ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY2Npc3MudHh0IGIvRG9jdW1lbnRhdGlvbi9jY2lzcy50eHQKaW5kZXggNjhhNzExZi4uMTUzNzg0MiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9jY2lzcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9jY2lzcy50eHQKQEAgLTEzMywzICsxMzMsMzIgQEAKIGFjY2VzcyB0aGVzZSBkZXZpY2VzIHRvbywgYXMgaWYgdGhlIGFycmF5IGNvbnRyb2xsZXIgd2VyZSBtZXJlbHkgYSBTQ1NJIAogY29udHJvbGxlciBpbiB0aGUgc2FtZSB3YXkgdGhhdCB3ZSBhcmUgYWxsb3dpbmcgaXQgdG8gYWNjZXNzIFNDU0kgdGFwZSBkcml2ZXMuCiAKK1NDU0kgZXJyb3IgaGFuZGxpbmcgZm9yIHRhcGUgZHJpdmVzIGFuZCBtZWRpdW0gY2hhbmdlcnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGxpbnV4IFNDU0kgbWlkIGxheWVyIHByb3ZpZGVzIGFuIGVycm9yIGhhbmRsaW5nIHByb3RvY29sIHdoaWNoCitraWNrcyBpbnRvIGdlYXIgd2hlbmV2ZXIgYSBTQ1NJIGNvbW1hbmQgZmFpbHMgdG8gY29tcGxldGUgd2l0aGluIGEKK2NlcnRhaW4gYW1vdW50IG9mIHRpbWUgKHdoaWNoIGNhbiB2YXJ5IGRlcGVuZGluZyBvbiB0aGUgY29tbWFuZCkuCitUaGUgY2Npc3MgZHJpdmVyIHBhcnRpY2lwYXRlcyBpbiB0aGlzIHByb3RvY29sIHRvIHNvbWUgZXh0ZW50LiAgVGhlCitub3JtYWwgcHJvdG9jb2wgaXMgYSBmb3VyIHN0ZXAgcHJvY2Vzcy4gIEZpcnN0IHRoZSBkZXZpY2UgaXMgdG9sZAordG8gYWJvcnQgdGhlIGNvbW1hbmQuICBJZiB0aGF0IGRvZXNuJ3Qgd29yaywgdGhlIGRldmljZSBpcyByZXNldC4KK0lmIHRoYXQgZG9lc24ndCB3b3JrLCB0aGUgU0NTSSBidXMgaXMgcmVzZXQuICBJZiB0aGF0IGRvZXNuJ3Qgd29yawordGhlIGhvc3QgYnVzIGFkYXB0ZXIgaXMgcmVzZXQuICBCZWNhdXNlIHRoZSBjY2lzcyBkcml2ZXIgaXMgYSBibG9jaworZHJpdmVyIGFzIHdlbGwgYXMgYSBTQ1NJIGRyaXZlciBhbmQgb25seSB0aGUgdGFwZSBkcml2ZXMgYW5kIG1lZGl1bQorY2hhbmdlcnMgYXJlIHByZXNlbnRlZCB0byB0aGUgU0NTSSBtaWQgbGF5ZXIsIGFuZCB1bmxpa2UgbW9yZSAKK3N0cmFpZ2h0Zm9yd2FyZCBTQ1NJIGRyaXZlcnMsIGRpc2sgaS9vIGNvbnRpbnVlcyB0aHJvdWdoIHRoZSBibG9jaworc2lkZSBkdXJpbmcgdGhlIFNDU0kgZXJyb3IgcmVjb3ZlcnkgcHJvY2VzcywgdGhlIGNjaXNzIGRyaXZlciBvbmx5CitpbXBsZW1lbnRzIHRoZSBmaXJzdCB0d28gb2YgdGhlc2UgYWN0aW9ucywgYWJvcnRpbmcgdGhlIGNvbW1hbmQsIGFuZAorcmVzZXR0aW5nIHRoZSBkZXZpY2UuICBBZGRpdGlvbmFsbHksIG1vc3QgdGFwZSBkcml2ZXMgd2lsbCBub3Qgb2JsaWdlIAoraW4gYWJvcnRpbmcgY29tbWFuZHMsIGFuZCBzb21ldGltZXMgaXQgYXBwZWFycyB0aGV5IHdpbGwgbm90IGV2ZW4gCitvYmV5IGEgcmVzZXQgY29vbW1hbmQsIHRob3VnaCBpbiBtb3N0IGNpcmN1bXN0YW5jZXMgdGhleSB3aWxsLiAgSW4KK3RoZSBjYXNlIHRoYXQgdGhlIGNvbW1hbmQgY2Fubm90IGJlIGFib3J0ZWQgYW5kIHRoZSBkZXZpY2UgY2Fubm90IGJlIAorcmVzZXQsIHRoZSBkZXZpY2Ugd2lsbCBiZSBzZXQgb2ZmbGluZS4KKworSW4gdGhlIGV2ZW50IHRoZSBlcnJvciBoYW5kbGluZyBjb2RlIGlzIHRyaWdnZXJlZCBhbmQgYSB0YXBlIGRyaXZlIGlzCitzdWNjZXNzZnVsbHkgcmVzZXQgb3IgdGhlIHRhcmR5IGNvbW1hbmQgaXMgc3VjY2Vzc2Z1bGx5IGFib3J0ZWQsIHRoZSAKK3RhcGUgZHJpdmUgbWF5IHN0aWxsIG5vdCBhbGxvdyBpL28gdG8gY29udGludWUgdW50aWwgc29tZSBjb21tYW5kCitpcyBpc3N1ZWQgd2hpY2ggcG9zaXRpb25zIHRoZSB0YXBlIHRvIGEga25vd24gcG9zaXRpb24uICBUeXBpY2FsbHkgeW91CittdXN0IHJld2luZCB0aGUgdGFwZSAoYnkgaXNzdWluZyAibXQgLWYgL2Rldi9zdDAgcmV3aW5kIiBmb3IgZXhhbXBsZSkKK2JlZm9yZSBpL28gY2FuIHByb2NlZWQgYWdhaW4gdG8gYSB0YXBlIGRyaXZlIHdoaWNoIHdhcyByZXNldC4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb25uZWN0b3IvY25fdGVzdC5jIGIvRG9jdW1lbnRhdGlvbi9jb25uZWN0b3IvY25fdGVzdC5jCmluZGV4IGI3ZGU4MmUuLjNlNzMyMzEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY29ubmVjdG9yL2NuX3Rlc3QuYworKysgYi9Eb2N1bWVudGF0aW9uL2Nvbm5lY3Rvci9jbl90ZXN0LmMKQEAgLTI1LDcgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogCi0jaW5jbHVkZSAiY29ubmVjdG9yLmgiCisjaW5jbHVkZSA8bGludXgvY29ubmVjdG9yLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgY2JfaWQgY25fdGVzdF9pZCA9IHsgMHgxMjMsIDB4NDU2IH07CiBzdGF0aWMgY2hhciBjbl90ZXN0X25hbWVbXSA9ICJjbl90ZXN0IjsKQEAgLTEwNCw3ICsxMDQsNyBAQAogCXJlcS0+Zmlyc3QgPSBjbl90ZXN0X2lkLnZhbCArIDIwOwogCXJlcS0+cmFuZ2UgPSAxMDsKIAotCU5FVExJTktfQ0Ioc2tiKS5kc3RfZ3JvdXBzID0gY3RsLT5ncm91cDsKKwlORVRMSU5LX0NCKHNrYikuZHN0X2dyb3VwID0gY3RsLT5ncm91cDsKIAkvL25ldGxpbmtfYnJvYWRjYXN0KG5scywgc2tiLCAwLCBjdGwtPmdyb3VwLCBHRlBfQVRPTUlDKTsKIAluZXRsaW5rX3VuaWNhc3QobmxzLCBza2IsIDAsIDApOwogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2R2Yi9idDh4eC50eHQgYi9Eb2N1bWVudGF0aW9uL2R2Yi9idDh4eC50eHQKaW5kZXggY2I2M2I3YS4uZGY2YzA1NCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kdmIvYnQ4eHgudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZHZiL2J0OHh4LnR4dApAQCAtMSw1ICsxLDUgQEAKLUhvdyB0byBnZXQgdGhlIE5lYnVsYSwgUENUViBhbmQgVHdpbmhhbiBEU1QgY2FyZHMgd29ya2luZwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitIb3cgdG8gZ2V0IHRoZSBOZWJ1bGEsIFBDVFYsIEZ1c2lvbkhEVFYgTGl0ZSBhbmQgVHdpbmhhbiBEU1QgY2FyZHMgd29ya2luZworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogVGhpcyBjbGFzcyBvZiBjYXJkcyBoYXMgYSBidDg3OGEgYXMgdGhlIFBDSSBpbnRlcmZhY2UsIGFuZAogcmVxdWlyZSB0aGUgYnR0diBkcml2ZXIuCkBAIC0yNiwyNyArMjYsMzEgQEAKIAogSW4gZ2VuZXJhbCB5b3UgbmVlZCB0byBsb2FkIHRoZSBidHR2IGRyaXZlciwgd2hpY2ggd2lsbCBoYW5kbGUgdGhlIGdwaW8gYW5kCiBpMmMgY29tbXVuaWNhdGlvbiBmb3IgdXMsIHBsdXMgdGhlIGNvbW1vbiBkdmItYnQ4eHggZGV2aWNlIGRyaXZlci4KLVRoZSBmcm9udGVuZHMgZm9yIE5lYnVsYSAobnh0NjAwMCksIFBpbm5hY2xlIFBDVFYgKGN4MjQxMTApIGFuZAotVHdpbkhhbiAoZHN0KSBhcmUgbG9hZGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIGR2Yi1idDh4eCBkZXZpY2UgZHJpdmVyLgorVGhlIGZyb250ZW5kcyBmb3IgTmVidWxhIChueHQ2MDAwKSwgUGlubmFjbGUgUENUViAoY3gyNDExMCksIFR3aW5IYW4gKGRzdCksCitGdXNpb25IRFRWIERWQi1UIExpdGUgKG10MzUyKSBhbmQgRnVzaW9uSERUVjUgTGl0ZSAobGdkdDMzMHgpIGFyZSBsb2FkZWQKK2F1dG9tYXRpY2FsbHkgYnkgdGhlIGR2Yi1idDh4eCBkZXZpY2UgZHJpdmVyLgogCi0zYSkgTmVidWxhIC8gUGlubmFjbGUgUENUVgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzNhKSBOZWJ1bGEgLyBQaW5uYWNsZSBQQ1RWIC8gRnVzaW9uSERUViBMaXRlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogICAgJCBtb2Rwcm9iZSBidHR2IChub3JtYWxseSBidHR2IGlzIGJlaW5nIGxvYWRlZCBhdXRvbWF0aWNhbGx5IGJ5IGttb2QpCi0gICAkIG1vZHByb2JlIGR2Yi1idDh4eCAob3IganVzdCBwbGFjZSBkdmItYnQ4eHggaW4gL2V0Yy9tb2R1bGVzIGZvciBhdXRvbWF0aWMgbG9hZGluZykKKyAgICQgbW9kcHJvYmUgZHZiLWJ0OHh4CisKKyhvciBqdXN0IHBsYWNlIGR2Yi1idDh4eCBpbiAvZXRjL21vZHVsZXMgZm9yIGF1dG9tYXRpYyBsb2FkaW5nKQogCiAKIDNiKSBUd2luSGFuIGFuZCBDbG9uZXMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSAgICQgbW9kcHJvYmUgYnR0diBpMmNfaHc9MSBjYXJkPTB4NzEKKyAgICQgbW9kcHJvYmUgYnR0diBjYXJkPTB4NzEKICAgICQgbW9kcHJvYmUgZHZiLWJ0OHh4CiAgICAkIG1vZHByb2JlIGRzdAogCiBUaGUgdmFsdWUgMHg3MSB3aWxsIG92ZXJyaWRlIHRoZSBQQ0kgdHlwZSBkZXRlY3Rpb24gZm9yIGR2Yi1idDh4eCwKLXdoaWNoICBpcyBuZWNlc3NhcnkgZm9yIFR3aW5IYW4gY2FyZHMuCit3aGljaCAgaXMgbmVjZXNzYXJ5IGZvciBUd2luSGFuIGNhcmRzLiBPbWlzc2lvbiBvZiB0aGlzIHBhcmFtZXRlciBtaWdodCByZXN1bHQKK2luIGEgc3lzdGVtIGxvY2t1cC4KIAotSWYgeW91J3JlIGhhdmluZyBhbiBvbGRlciBjYXJkIChibHVlIGNvbG9yIGNpcmN1aXQpIGFuZCBjYXJkPTB4NzEgbG9ja3MKK0lmIHlvdSdyZSBoYXZpbmcgYW4gb2xkZXIgY2FyZCAoYmx1ZSBjb2xvciBQQ0IpIGFuZCBjYXJkPTB4NzEgbG9ja3MgdXAKIHlvdXIgbWFjaGluZSwgdHJ5IHVzaW5nIDB4NjgsIHRvby4gSWYgdGhhdCBkb2VzIG5vdCB3b3JrLCBhc2sgb24gdGhlCiBtYWlsaW5nIGxpc3QuCiAKQEAgLTY0LDExICs2OCw0NyBAQAogZHN0X2FkZG9ucyB0YWtlcyB2YWx1ZXMgMCBhbmQgMHgyMC4gQSB2YWx1ZSBvZiAwIG1lYW5zIGl0IGlzIGEgRlRBIGNhcmQuCiAweDIwIG1lYW5zIGl0IGhhcyBhIENvbmRpdGlvbmFsIEFjY2VzcyBzbG90LgogCi1UaGUgYXV0b2RlY3RlZCB2YWx1ZXMgYXJlIGRldGVybWluZWQgYnl0aGUgY2FyZHMgJ3Jlc3BvbnNlCi1zdHJpbmcnIHdoaWNoIHlvdSBjYW4gc2VlIGluIHlvdXIgbG9ncyBlLmcuCitUaGUgYXV0b2RldGVjdGVkIHZhbHVlcyBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgY2FyZHMgJ3Jlc3BvbnNlIHN0cmluZycKK3doaWNoIHlvdSBjYW4gc2VlIGluIHlvdXIgbG9ncyBlLmcuCiAKIGRzdF9nZXRfZGV2aWNlX2lkOiBSZWNvZ25pc2UgW0RTVE1DSV0KIAorSWYgeW91IG5lZWQgdG8gc2VudCBpbiBidWcgcmVwb3J0cyBvbiB0aGUgZHN0LCBwbGVhc2UgZG8gc2VuZCBpbiBhIGNvbXBsZXRlCitsb2cgd2l0aCB0aGUgdmVyYm9zZT00IG1vZHVsZSBwYXJhbWV0ZXIuIEZvciBnZW5lcmFsIHVzYWdlLCB0aGUgZGVmYXVsdCBzZXR0aW5nCitvZiB2ZXJib3NlPTEgaXMgaWRlYWwuCisKKworNCkgTXVsdGlwbGUgY2FyZHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIHlvdSBoYXBwZW4gdG8gYmUgcnVubmluZyBtdWx0aXBsZSBjYXJkcywgaXQgd291bGQgYmUgYWR2aXNhYmxlIHRvIGxvYWQKK3RoZSBidHR2IG1vZHVsZSB3aXRoIHRoZSBjYXJkIGlkLiBUaGlzIHdvdWxkIGhlbHAgdG8gc29sdmUgYW55IG1vZHVsZSBsb2FkaW5nCitwcm9ibGVtcyB0aGF0IHlvdSBtaWdodCBmYWNlLgorCitGb3IgZXhhbXBsZSwgaWYgeW91IGhhdmUgYSBUd2luaGFuIGFuZCBDbG9uZXMgY2FyZCBhbG9uZyB3aXRoIGEgRnVzaW9uSERUVjUgTGl0ZQorCisJJCBtb2Rwcm9iZSBidHR2IGNhcmQ9MHg3MSBjYXJkPTB4ODcKKworSGVyZSB0aGUgb3JkZXIgb2YgdGhlIGNhcmQgaWQgaXMgaW1wb3J0YW50IGFuZCBzaG91bGQgYmUgdGhlIHNhbWUgYXMgdGhhdCBvZiB0aGUKK3BoeXNpY2FsIG9yZGVyIG9mIHRoZSBjYXJkcy4gSGVyZSBjYXJkPTB4NzEgcmVwcmVzZW50cyB0aGUgVHdpbmhhbiBhbmQgY2xvbmVzCithbmQgY2FyZD0weDg3IHJlcHJlc2VudHMgRnVzaW9uIEhEVFY1IExpdGUuIFRoZXNlIGFyZ3VtZW50cyBjYW4gYWxzbyBiZQorc3BlY2lmaWVkIGluIGRlY2ltYWwsIHJhdGhlciB0aGFuIGhleDoKKworCSQgbW9kcHJvYmUgYnR0diBjYXJkPTExMyBjYXJkPTEzNQorCitTb21lIGV4YW1wbGVzIG9mIGNhcmQtaWQncworCitQaW5uYWNsZSBTYXQJCTB4NWUgICg5NCkKK05lYnVsYSBEaWdpIFRWCQkweDY4ICAoMTA0KQorUEMgSERUVgkJCTB4NzAgICgxMTIpCitUd2luaGFuCQkJMHg3MSAgKDExMykKK0Z1c2lvbkhEVFYgRFZCLVQgTGl0ZQkweDgwICAoMTI4KQorRnVzaW9uSERUVjUgTGl0ZQkweDg3ICAoMTM1KQorCitGb3IgYSBmdWxsIGxpc3Qgb2YgY2FyZC1pZCdzLCBzZWUgdGhlIFY0TCBEb2N1bWVudGF0aW9uIHdpdGhpbiB0aGUga2VybmVsCitzb3VyY2U6ICBsaW51eC9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmJ0dHYKKworSWYgeW91IGhhdmUgcHJvYmxlbXMgd2l0aCB0aGlzIHBsZWFzZSBkbyBhc2sgb24gdGhlIG1haWxpbmcgbGlzdC4KIAogLS0KIEF1dGhvcnM6IFJpY2hhcmQgV2Fsa2VyLCBKYW1pZSBIb25hbiwgTWljaGFlbCBIdW5vbGQsIE1hbnUgQWJyYWhhbQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kdmIvY2FyZHMudHh0IGIvRG9jdW1lbnRhdGlvbi9kdmIvY2FyZHMudHh0CmluZGV4IGVmZGM0ZWUuLjE5MzI5Y2YgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZHZiL2NhcmRzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2R2Yi9jYXJkcy50eHQKQEAgLTQxLDYgKzQxLDEyIEBACiAgICAtIGRpYjMwMDBtYgk6IERpQmNvbSAzMDAwLU1CIGRlbW9kdWxhdG9yCiAgIERWQi1TL0MvVDoKICAgIC0gZHN0CQk6IFR3aW5IYW4gRFNUIEZyb250ZW5kCisgIEFUU0M6CisgICAtIG54dDIwMHgJCTogTnh0d2F2ZSBOWFQyMDAyICYgTlhUMjAwNAorICAgLSBvcjUxMjExCQk6IG9yNTEyMTEgYmFzZWQgKHBjSERUViBIRDIwMDAgY2FyZCkKKyAgIC0gb3I1MTEzMgkJOiBvcjUxMTMyIGJhc2VkIChwY0hEVFYgSEQzMDAwIGNhcmQpCisgICAtIGJjbTM1MTAJCTogQnJvYWRjb20gQkNNMzUxMAorICAgLSBsZ2R0MzMweAkJOiBMRyBFbGVjdHJvbmljcyBEVDMzMDIgJiBEVDMzMDMKIAogCiBvIENhcmRzIGJhc2VkIG9uIHRoZSBQaGlsbGlwcyBzYWE3MTQ2IG11bHRpbWVkaWEgUENJIGJyaWRnZSBjaGlwOgpAQCAtNjIsNiArNjgsMTAgQEAKICAgLSBOZWJ1bGEgRWxlY3Ryb25pY3MgRGlnaVRWCiAgIC0gVHdpbkhhbiBEU1QKICAgLSBBdmVybWVkaWEgRFZCLVQKKyAgLSBDaGFpblRlY2ggZGlnaXRvcCBEU1QtMTAwMCBEVkItUworICAtIHBjSERUViBIRC0yMDAwIFRWCisgIC0gRFZpQ08gRnVzaW9uSERUViBEVkItVCBMaXRlCisgIC0gRFZpQ08gRnVzaW9uSERUVjUgTGl0ZQogCiBvIFRlY2hub3RyZW5kIC8gSGF1cHBhdWdlIERWQiBVU0IgZGV2aWNlczoKICAgLSBOb3ZhIFVTQgpAQCAtODMsMyArOTMsMzAgQEAKICAgLSBEaUJjb20gVVNCMi4wIERWQi1UIHJlZmVyZW5jZSBkZXZpY2UgKG5vbi1wdWJsaWMpCiAKIG8gRXhwZXJpbWVudGFsIHN1cHBvcnQgZm9yIHRoZSBhbmFsb2cgbW9kdWxlIG9mIHRoZSBTaWVtZW5zIERWQi1DIFBDSSBjYXJkCisKK28gQ2FyZHMgYmFzZWQgb24gdGhlIENvbmV4YW50IGN4MjM4OHggUENJIGJyaWRnZToKKyAgLSBBRFMgVGVjaCBJbnN0YW50IFRWIERWQi1UIFBDSQorICAtIEFUSSBIRFRWIFdvbmRlcgorICAtIGRpZ2l0YWxub3cgRE5UViBMaXZlISBEVkItVAorICAtIERWaUNPIEZ1c2lvbkhEVFYgRFZCLVQxCisgIC0gRFZpQ08gRnVzaW9uSERUViBEVkItVCBQbHVzCisgIC0gRFZpQ08gRnVzaW9uSERUVjMgR29sZC1RCisgIC0gRFZpQ08gRnVzaW9uSERUVjMgR29sZC1UCisgIC0gRFZpQ08gRnVzaW9uSERUVjUgR29sZAorICAtIEhhdXBwYXVnZSBOb3ZhLVQgRFZCLVQKKyAgLSBLV29ybGQvVlN0cmVhbSBYUGVydCBEVkItVAorICAtIHBjSERUViBIRDMwMDAgSERUVgorICAtIFRlcnJhVGVjIENpbmVyZ3kgMTQwMCBEVkItVAorICAtIFdpbkZhc3QgRFRWMTAwMC1UCisKK28gQ2FyZHMgYmFzZWQgb24gdGhlIFBoaWxsaXBzIHNhYTcxMzQgUENJIGJyaWRnZToKKyAgLSBNZWRpb24gNzEzNAorICAtIFBpbm5hY2xlIFBDVFYgMzAwaSBEVkItVCArIFBBTAorICAtIExpZmVWaWV3IEZseURWQi1UIERVTworICAtIFR5cGhvb24gRFZCLVQgRHVvIERpZ2l0YWwvQW5hbG9nIENhcmRidXMKKyAgLSBQaGlsaXBzIFRPVUdIIERWQi1UIHJlZmVyZW5jZSBkZXNpZ24KKyAgLSBQaGlsaXBzIEVVUk9QQSBWMyByZWZlcmVuY2UgZGVzaWduCisgIC0gQ29tcHJvIFZpZGVvbWF0ZSBEVkItVDMwMAorICAtIENvbXBybyBWaWRlb21hdGUgRFZCLVQyMDAKKyAgLSBBVmVyTWVkaWEgQVZlclRWSEQgTUNFIEExODAKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kdmIvY29udHJpYnV0b3JzLnR4dCBiL0RvY3VtZW50YXRpb24vZHZiL2NvbnRyaWJ1dG9ycy50eHQKaW5kZXggYzlkNWNlMy4uMmNiZDJkMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kdmIvY29udHJpYnV0b3JzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2R2Yi9jb250cmlidXRvcnMudHh0CkBAIC03NSw1ICs3NSwyMiBAQAogUGV0ZXIgQmV1dG5lciA8cC5iZXV0bmVyQGdteC5uZXQ+CiAgIGZvciB0aGUgSVIgY29kZSBmb3IgdGhlIHR0dXNiLWRlYyBkcml2ZXIKIAorV2lsc29uIE1pY2hhZWxzIDx3aWxzb25taWNoYWVsc0BlYXJ0aGxpbmsubmV0PgorICBmb3IgdGhlIGxnZHQzMzB4IGZyb250ZW5kIGRyaXZlciwgYW5kIHZhcmlvdXMgYnVnZml4ZXMKKworTWljaGFlbCBLcnVma3kgPG1rcnVma3lAbTFrLm5ldD4KKyAgZm9yIG1haW50YWluaW5nIHY0bC9kdmIgaW50ZXItdHJlZSBkZXBlbmRlbmNpZXMKKworVGF5bG9yIEphY29iIDxydGphY29iQGVhcnRobGluay5uZXQ+CisgIGZvciB0aGUgbnh0MjAwMiBmcm9udGVuZCBkcml2ZXIKKworSmVhbi1GcmFuY29pcyBUaGliZXJ0IDxqZWFuZnJhbmNvaXNAc2FnZXR2LmNvbT4KKyAgZm9yIHRoZSBueHQyMDA0IGZyb250ZW5kIGRyaXZlcgorCitLaXJrIExhcHJheSA8a2lyay5sYXByYXlAZ21haWwuY29tPgorICBmb3IgdGhlIG9yNTEyMTEgYW5kIG9yNTExMzIgZnJvbnRlbmQgZHJpdmVycywgYW5kCisgIGZvciBtZXJnaW5nIHRoZSBueHQyMDAyIGFuZCBueHQyMDA0IG1vZHVsZXMgaW50byBhCisgIHNpbmdsZSBueHQyMDB4IGZyb250ZW5kIGRyaXZlci4KKwogKElmIHlvdSB0aGluayB5b3Ugc2hvdWxkIGJlIGluIHRoaXMgbGlzdCwgYnV0IHlvdSBhcmUgbm90LCBkcm9wIGEKICBsaW5lIHRvIHRoZSBEVkIgbWFpbGluZyBsaXN0KQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kdmIvZ2V0X2R2Yl9maXJtd2FyZSBiL0RvY3VtZW50YXRpb24vZHZiL2dldF9kdmJfZmlybXdhcmUKaW5kZXggYTc1MGYwMS4uYmU2ZWI0YyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kdmIvZ2V0X2R2Yl9maXJtd2FyZQorKysgYi9Eb2N1bWVudGF0aW9uL2R2Yi9nZXRfZHZiX2Zpcm13YXJlCkBAIC0yMiw3ICsyMiw3IEBACiB1c2UgSU86OkhhbmRsZTsKIAogQGNvbXBvbmVudHMgPSAoICJzcDg4NzAiLCAic3A4ODd4IiwgInRkYTEwMDQ1IiwgInRkYTEwMDQ2IiwgImF2NzExMCIsICJkZWMyMDAwdCIsCi0JCSJkZWMyNTQwdCIsICJkZWMzMDAwcyIsICJ2cDcwNDEiLCAiZGlidXNiIiwgIm54dDIwMDIiLAorCQkiZGVjMjU0MHQiLCAiZGVjMzAwMHMiLCAidnA3MDQxIiwgImRpYnVzYiIsICJueHQyMDAyIiwgIm54dDIwMDQiLAogCQkib3I1MTIxMSIsICJvcjUxMTMyX3FhbSIsICJvcjUxMTMyX3ZzYiIpOwogCiAjIENoZWNrIGFyZ3MKQEAgLTI1Miw2ICsyNTIsMjMgQEAKICAgICAkb3V0ZmlsZTsKIH0KIAorc3ViIG54dDIwMDQgeworICAgIG15ICRzb3VyY2VmaWxlID0gIkFWZXJUVkhEX01DRV9BMTgwX0Rydl92MS4yLjIuMTYuemlwIjsKKyAgICBteSAkdXJsID0gImh0dHA6Ly93d3cuYXZlci5jb20vc3VwcG9ydC9Ecml2ZXJzLyRzb3VyY2VmaWxlIjsKKyAgICBteSAkaGFzaCA9ICIxMTFjYjg4NWIxZTAwOTE4ODM0NmQ3MmFjZmVkMDI0YyI7CisgICAgbXkgJG91dGZpbGUgPSAiZHZiLWZlLW54dDIwMDQuZnciOworICAgIG15ICR0bXBkaXIgPSB0ZW1wZGlyKERJUiA9PiAiL3RtcCIsIENMRUFOVVAgPT4gMSk7CisKKyAgICBjaGVja3N0YW5kYXJkKCk7CisKKyAgICB3Z2V0ZmlsZSgkc291cmNlZmlsZSwgJHVybCk7CisgICAgdW56aXAoJHNvdXJjZWZpbGUsICR0bXBkaXIpOworICAgIHZlcmlmeSgiJHRtcGRpci8zeEh5YnJpZC5zeXMiLCAkaGFzaCk7CisgICAgZXh0cmFjdCgiJHRtcGRpci8zeEh5YnJpZC5zeXMiLCA0NjUzMDQsIDk1ODQsICRvdXRmaWxlKTsKKworICAgICRvdXRmaWxlOworfQorCiBzdWIgb3I1MTIxMSB7CiAgICAgbXkgJGZ3ZmlsZSA9ICJkdmItZmUtb3I1MTIxMS5mdyI7CiAgICAgbXkgJHVybCA9ICJodHRwOi8vbGludXh0di5vcmcvZG93bmxvYWRzL2Zpcm13YXJlLyRmd2ZpbGUiOwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mYi9mYmNvbi50eHQgYi9Eb2N1bWVudGF0aW9uL2ZiL2ZiY29uLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGRjZTBmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9mYi9mYmNvbi50eHQKQEAgLTAsMCArMSwxNTIgQEAKK1RoZSBGcmFtZWJ1ZmZlciBDb25zb2xlCis9PT09PT09PT09PT09PT09PT09PT09PQorCisJVGhlIGZyYW1lYnVmZmVyIGNvbnNvbGUgKGZiY29uKSwgYXMgaXRzIG5hbWUgaW1wbGllcywgaXMgYSB0ZXh0Citjb25zb2xlIHJ1bm5pbmcgb24gdG9wIG9mIHRoZSBmcmFtZWJ1ZmZlciBkZXZpY2UuIEl0IGhhcyB0aGUgZnVuY3Rpb25hbGl0eSBvZgorYW55IHN0YW5kYXJkIHRleHQgY29uc29sZSBkcml2ZXIsIHN1Y2ggYXMgdGhlIFZHQSBjb25zb2xlLCB3aXRoIHRoZSBhZGRlZAorZmVhdHVyZXMgdGhhdCBjYW4gYmUgYXR0cmlidXRlZCB0byB0aGUgZ3JhcGhpY2FsIG5hdHVyZSBvZiB0aGUgZnJhbWVidWZmZXIuCisKKwkgSW4gdGhlIHg4NiBhcmNoaXRlY3R1cmUsIHRoZSBmcmFtZWJ1ZmZlciBjb25zb2xlIGlzIG9wdGlvbmFsLCBhbmQKK3NvbWUgZXZlbiB0cmVhdCBpdCBhcyBhIHRveS4gRm9yIG90aGVyIGFyY2hpdGVjdHVyZXMsIGl0IGlzIHRoZSBvbmx5IGF2YWlsYWJsZQorZGlzcGxheSBkZXZpY2UsIHRleHQgb3IgZ3JhcGhpY2FsLgorCisJIFdoYXQgYXJlIHRoZSBmZWF0dXJlcyBvZiBmYmNvbj8gIFRoZSBmcmFtZWJ1ZmZlciBjb25zb2xlIHN1cHBvcnRzCitoaWdoIHJlc29sdXRpb25zLCB2YXJ5aW5nIGZvbnQgdHlwZXMsIGRpc3BsYXkgcm90YXRpb24sIHByaW1pdGl2ZSBtdWx0aWhlYWQsCitldGMuIFRoZW9yZXRpY2FsbHksIG11bHRpLWNvbG9yZWQgZm9udHMsIGJsZW5kaW5nLCBhbGlhc2luZywgYW5kIGFueSBmZWF0dXJlCittYWRlIGF2YWlsYWJsZSBieSB0aGUgdW5kZXJseWluZyBncmFwaGljcyBjYXJkIGFyZSBhbHNvIHBvc3NpYmxlLgorCitBLiBDb25maWd1cmF0aW9uCisKKwlUaGUgZnJhbWVidWZmZXIgY29uc29sZSBjYW4gYmUgZW5hYmxlZCBieSB1c2luZyB5b3VyIGZhdm9yaXRlIGtlcm5lbAorY29uZmlndXJhdGlvbiB0b29sLiAgSXQgaXMgdW5kZXIgRGV2aWNlIERyaXZlcnMtPkdyYXBoaWNzIFN1cHBvcnQtPlN1cHBvcnQgZm9yCitmcmFtZWJ1ZmZlciBkZXZpY2VzLT5GcmFtZWJ1ZmZlciBDb25zb2xlIFN1cHBvcnQuIFNlbGVjdCAneScgdG8gY29tcGlsZQorc3VwcG9ydCBzdGF0aWNhbGx5LCBvciAnbScgZm9yIG1vZHVsZSBzdXBwb3J0LiAgVGhlIG1vZHVsZSB3aWxsIGJlIGZiY29uLgorCisJSW4gb3JkZXIgZm9yIGZiY29uIHRvIGFjdGl2YXRlLCBhdCBsZWFzdCBvbmUgZnJhbWVidWZmZXIgZHJpdmVyIGlzCityZXF1aXJlZCwgc28gY2hvb3NlIGZyb20gYW55IG9mIHRoZSBudW1lcm91cyBkcml2ZXJzIGF2YWlsYWJsZS4gRm9yIHg4Ngorc3lzdGVtcywgdGhleSBhbG1vc3QgdW5pdmVyc2FsbHkgaGF2ZSBWR0EgY2FyZHMsIHNvIHZnYTE2ZmIgYW5kIHZlc2FmYiB3aWxsCithbHdheXMgYmUgYXZhaWxhYmxlLiBIb3dldmVyLCB1c2luZyBhIGNoaXBzZXQtc3BlY2lmaWMgZHJpdmVyIHdpbGwgZ2l2ZSB5b3UKK21vcmUgc3BlZWQgYW5kIGZlYXR1cmVzLCBzdWNoIGFzIHRoZSBhYmlsaXR5IHRvIGNoYW5nZSB0aGUgdmlkZW8gbW9kZQorZHluYW1pY2FsbHkuCisKKwlUbyBkaXNwbGF5IHRoZSBwZW5ndWluIGxvZ28sIGNob29zZSBhbnkgbG9nbyBhdmFpbGFibGUgaW4gTG9nbworQ29uZmlndXJhdGlvbi0+Qm9vdCB1cCBsb2dvLgorCisJQWxzbywgeW91IHdpbGwgbmVlZCB0byBzZWxlY3QgYXQgbGVhc3Qgb25lIGNvbXBpbGVkLWluIGZvbnRzLCBidXQgaWYKK3lvdSBkb24ndCBkbyBhbnl0aGluZywgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHRvb2wgd2lsbCBzZWxlY3Qgb25lIGZvciB5b3UsCit1c3VhbGx5IGFuIDh4MTYgZm9udC4KKworR09UQ0hBOiBBIGNvbW1vbiBidWcgcmVwb3J0IGlzIGVuYWJsaW5nIHRoZSBmcmFtZWJ1ZmZlciB3aXRob3V0IGVuYWJsaW5nIHRoZQorZnJhbWVidWZmZXIgY29uc29sZS4gIERlcGVuZGluZyBvbiB0aGUgZHJpdmVyLCB5b3UgbWF5IGdldCBhIGJsYW5rZWQgb3IKK2dhcmJsZWQgZGlzcGxheSwgYnV0IHRoZSBzeXN0ZW0gc3RpbGwgYm9vdHMgdG8gY29tcGxldGlvbi4gIElmIHlvdSBhcmUKK2ZvcnR1bmF0ZSB0byBoYXZlIGEgZHJpdmVyIHRoYXQgZG9lcyBub3QgYWx0ZXIgdGhlIGdyYXBoaWNzIGNoaXAsIHRoZW4geW91Cit3aWxsIHN0aWxsIGdldCBhIFZHQSBjb25zb2xlLgorCitCLiBMb2FkaW5nCisKK1Bvc3NpYmxlIHNjZW5hcmlvczoKKworMS4gRHJpdmVyIGFuZCBmYmNvbiBhcmUgY29tcGlsZWQgc3RhdGljYWxseQorCisJIFVzdWFsbHksIGZiY29uIHdpbGwgYXV0b21hdGljYWxseSB0YWtlIG92ZXIgeW91ciBjb25zb2xlLiBUaGUgbm90YWJsZQorCSBleGNlcHRpb24gaXMgdmVzYWZiLiAgSXQgbmVlZHMgdG8gYmUgZXhwbGljaXRseSBhY3RpdmF0ZWQgd2l0aCB0aGUKKwkgdmdhPSBib290IG9wdGlvbiBwYXJhbWV0ZXIuCisKKzIuIERyaXZlciBpcyBjb21waWxlZCBzdGF0aWNhbGx5LCBmYmNvbiBpcyBjb21waWxlZCBhcyBhIG1vZHVsZQorCisJIERlcGVuZGluZyBvbiB0aGUgZHJpdmVyLCB5b3UgZWl0aGVyIGdldCBhIHN0YW5kYXJkIGNvbnNvbGUsIG9yIGEKKwkgZ2FyYmxlZCBkaXNwbGF5LCBhcyBtZW50aW9uZWQgYWJvdmUuICBUbyBnZXQgYSBmcmFtZWJ1ZmZlciBjb25zb2xlLAorCSBkbyBhICdtb2Rwcm9iZSBmYmNvbicuCisKKzMuIERyaXZlciBpcyBjb21waWxlZCBhcyBhIG1vZHVsZSwgZmJjb24gaXMgY29tcGlsZWQgc3RhdGljYWxseQorCisJIFlvdSBnZXQgeW91ciBzdGFuZGFyZCBjb25zb2xlLiAgT25jZSB0aGUgZHJpdmVyIGlzIGxvYWRlZCB3aXRoCisJICdtb2Rwcm9iZSB4eHhmYicsIGZiY29uIGF1dG9tYXRpY2FsbHkgdGFrZXMgb3ZlciB0aGUgY29uc29sZSB3aXRoCisJIHRoZSBwb3NzaWJsZSBleGNlcHRpb24gb2YgdXNpbmcgdGhlIGZiY29uPW1hcDpuIG9wdGlvbi4gU2VlIGJlbG93LgorCis0LiBEcml2ZXIgYW5kIGZiY29uIGFyZSBjb21waWxlZCBhcyBhIG1vZHVsZS4KKworCSBZb3UgY2FuIGxvYWQgdGhlbSBpbiBhbnkgb3JkZXIuIE9uY2UgYm90aCBhcmUgbG9hZGVkLCBmYmNvbiB3aWxsIHRha2UKKwkgb3ZlciB0aGUgY29uc29sZS4KKworQy4gQm9vdCBvcHRpb25zCisKKyAgICAgICAgIFRoZSBmcmFtZWJ1ZmZlciBjb25zb2xlIGhhcyBzZXZlcmFsLCBsYXJnZWx5IHVua25vd24sIGJvb3Qgb3B0aW9ucworICAgICAgICAgdGhhdCBjYW4gY2hhbmdlIGl0cyBiZWhhdmlvci4KKworMS4gZmJjb249Zm9udDo8bmFtZT4KKworICAgICAgICBTZWxlY3QgdGhlIGluaXRpYWwgZm9udCB0byB1c2UuIFRoZSB2YWx1ZSAnbmFtZScgY2FuIGJlIGFueSBvZiB0aGUKKyAgICAgICAgY29tcGlsZWQtaW4gZm9udHM6IFZHQTh4MTYsIDd4MTQsIDEweDE4LCBWR0E4eDgsIE1JTkk0eDYsIFJvbWFuTGFyZ2UsCisgICAgICAgIFNVTjh4MTYsIFNVTjEyeDIyLCBQcm9Gb250NngxMSwgQWNvcm44eDgsIFBFQVJMOHg4LgorCisJTm90ZSwgbm90IGFsbCBkcml2ZXJzIGNhbiBoYW5kbGUgZm9udCB3aXRoIHdpZHRocyBub3QgZGl2aXNpYmxlIGJ5IDgsCisgICAgICAgIHN1Y2ggYXMgdmdhMTZmYi4KKworMi4gZmJjb249c2Nyb2xsYmFjazo8dmFsdWU+W2tdCisKKyAgICAgICAgVGhlIHNjcm9sbGJhY2sgYnVmZmVyIGlzIG1lbW9yeSB0aGF0IGlzIHVzZWQgdG8gcHJlc2VydmUgZGlzcGxheQorICAgICAgICBjb250ZW50cyB0aGF0IGhhcyBhbHJlYWR5IHNjcm9sbGVkIHBhc3QgeW91ciB2aWV3LiAgVGhpcyBpcyBhY2Nlc3NlZAorICAgICAgICBieSB1c2luZyB0aGUgU2hpZnQtUGFnZVVwIGtleSBjb21iaW5hdGlvbi4gIFRoZSB2YWx1ZSAndmFsdWUnIGlzIGFueQorICAgICAgICBpbnRlZ2VyLiBJdCBkZWZhdWx0cyB0byAzMktCLiAgVGhlICdrJyBzdWZmaXggaXMgb3B0aW9uYWwsIGFuZCB3aWxsCisgICAgICAgIG11bHRpcGx5IHRoZSAndmFsdWUnIGJ5IDEwMjQuCisKKzMuIGZiY29uPW1hcDo8MDEyMz4KKworICAgICAgICBUaGlzIGlzIGFuIGludGVyZXN0aW5nIG9wdGlvbi4gSXQgdGVsbHMgd2hpY2ggZHJpdmVyIGdldHMgbWFwcGVkIHRvCisgICAgICAgIHdoaWNoIGNvbnNvbGUuIFRoZSB2YWx1ZSAnMDEyMycgaXMgYSBzZXF1ZW5jZSB0aGF0IGdldHMgcmVwZWF0ZWQgdW50aWwKKyAgICAgICAgdGhlIHRvdGFsIGxlbmd0aCBpcyA2NCB3aGljaCBpcyB0aGUgbnVtYmVyIG9mIGNvbnNvbGVzIGF2YWlsYWJsZS4gSW4KKyAgICAgICAgdGhlIGFib3ZlIGV4YW1wbGUsIGl0IGlzIGV4cGFuZGVkIHRvIDAxMjMwMTIzMDEyMy4uLiBhbmQgdGhlIG1hcHBpbmcKKyAgICAgICAgd2lsbCBiZToKKworCQl0dHkgfCAxIDIgMyA0IDUgNiA3IDggOSAuLi4KKwkJZmIgIHwgMCAxIDIgMyAwIDEgMiAzIDAgLi4uCisKKwkJKCdjYXQgL3Byb2MvZmInIHNob3VsZCB0ZWxsIHlvdSB3aGF0IHRoZSBmYiBudW1iZXJzIGFyZSkKKworCU9uZSBzaWRlIGVmZmVjdCB0aGF0IG1heSBiZSB1c2VmdWwgaXMgdXNpbmcgYSBtYXAgdmFsdWUgdGhhdCBleGNlZWRzCisJdGhlIG51bWJlciBvZiBsb2FkZWQgZmIgZHJpdmVycy4gRm9yIGV4YW1wbGUsIGlmIG9ubHkgb25lIGRyaXZlciBpcworCWF2YWlsYWJsZSwgZmIwLCBhZGRpbmcgZmJjb249bWFwOjEgdGVsbHMgZmJjb24gbm90IHRvIHRha2Ugb3ZlciB0aGUKKwljb25zb2xlLgorCisJTGF0ZXIgb24sIHdoZW4geW91IHdhbnQgdG8gbWFwIHRoZSBjb25zb2xlIHRoZSB0byB0aGUgZnJhbWVidWZmZXIKKwlkZXZpY2UsIHlvdSBjYW4gdXNlIHRoZSBjb24yZmJtYXAgdXRpbGl0eS4KKworNC4gZmJjb249dmM6PG4xPi08bjI+CisKKwlUaGlzIG9wdGlvbiB0ZWxscyBmYmNvbiB0byB0YWtlIG92ZXIgb25seSBhIHJhbmdlIG9mIGNvbnNvbGVzIGFzCisJc3BlY2lmaWVkIGJ5IHRoZSB2YWx1ZXMgJ24xJyBhbmQgJ24yJy4gVGhlIHJlc3Qgb2YgdGhlIGNvbnNvbGVzCisJb3V0c2lkZSB0aGUgZ2l2ZW4gcmFuZ2Ugd2lsbCBzdGlsbCBiZSBjb250cm9sbGVkIGJ5IHRoZSBzdGFuZGFyZAorCWNvbnNvbGUgZHJpdmVyLgorCisJTk9URTogRm9yIHg4NiBtYWNoaW5lcywgdGhlIHN0YW5kYXJkIGNvbnNvbGUgaXMgdGhlIFZHQSBjb25zb2xlIHdoaWNoCisJaXMgdHlwaWNhbGx5IGxvY2F0ZWQgb24gdGhlIHNhbWUgdmlkZW8gY2FyZC4gIFRodXMsIHRoZSBjb25zb2xlcyB0aGF0CisJYXJlIGNvbnRyb2xsZWQgYnkgdGhlIFZHQSBjb25zb2xlIHdpbGwgYmUgZ2FyYmxlZC4KKworNC4gZmJjb249cm90YXRlOjxuPgorCisgICAgICAgIFRoaXMgb3B0aW9uIGNoYW5nZXMgdGhlIG9yaWVudGF0aW9uIGFuZ2xlIG9mIHRoZSBjb25zb2xlIGRpc3BsYXkuIFRoZQorICAgICAgICB2YWx1ZSAnbicgYWNjZXB0cyB0aGUgZm9sbG93aW5nOgorCisJICAgICAgMCAtIG5vcm1hbCBvcmllbnRhdGlvbiAoMCBkZWdyZWUpCisJICAgICAgMSAtIGNsb2Nrd2lzZSBvcmllbnRhdGlvbiAoOTAgZGVncmVlcykKKwkgICAgICAyIC0gdXBzaWRlIGRvd24gb3JpZW50YXRpb24gKDE4MCBkZWdyZWVzKQorCSAgICAgIDMgLSBjb3VudGVyY2xvY2t3aXNlIG9yaWVudGF0aW9uICgyNzAgZGVncmVlcykKKworCVRoZSBhbmdsZSBjYW4gYmUgY2hhbmdlZCBhbnl0aW1lIGFmdGVyd2FyZHMgYnkgJ2VjaG9pbmcnIHRoZSBzYW1lCisJbnVtYmVycyB0byBhbnkgb25lIG9mIHRoZSAyIGF0dHJpYnV0ZXMgZm91bmQgaW4KKwkvc3lzL2NsYXNzL2dyYXBoaWNzL2Zie3h9CisKKwkJY29uX3JvdGF0ZSAgICAgLSByb3RhdGUgdGhlIGRpc3BsYXkgb2YgdGhlIGFjdGl2ZSBjb25zb2xlCisJCWNvbl9yb3RhdGVfYWxsIC0gcm90YXRlIHRoZSBkaXNwbGF5IG9mIGFsbCBjb25zb2xlcworCisJQ29uc29sZSByb3RhdGlvbiB3aWxsIG9ubHkgYmVjb21lIGF2YWlsYWJsZSBpZiBDb25zb2xlIFJvdGF0aW9uCisJU3VwcG9ydCBpcyBjb21waWxlZCBpbiB5b3VyIGtlcm5lbC4KKworCU5PVEU6IFRoaXMgaXMgcHVyZWx5IGNvbnNvbGUgcm90YXRpb24uICBBbnkgb3RoZXIgYXBwbGljYXRpb25zIHRoYXQKKwl1c2UgdGhlIGZyYW1lYnVmZmVyIHdpbGwgcmVtYWluIGF0IHRoZWlyICdub3JtYWwnb3JpZW50YXRpb24uCisJQWN0dWFsbHksIHRoZSB1bmRlcmx5aW5nIGZiIGRyaXZlciBpcyB0b3RhbGx5IGlnbm9yYW50IG9mIGNvbnNvbGUKKwlyb3RhdGlvbi4KKworLS0tCitBbnRvbmlubyBEYXBsYXMgPGFkYXBsYXNAcG9sLm5ldD4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dCBiL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dAppbmRleCBkZWNkZjk5Li40MjlkYjRiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CkBAIC0yNSw2ICsyNSwxMyBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorV2hhdDoJZHJpdmVycyBkZXBlbmRpbmcgb24gT0JTT0xFVEVfT1NTX0RSSVZFUgorV2hlbjoJSmFudWFyeSAyMDA2CitXaHk6CU9TUyBkcml2ZXJzIHdpdGggQUxTQSByZXBsYWNlbWVudHMKK1dobzoJQWRyaWFuIEJ1bmsgPGJ1bmtAc3R1c3RhLmRlPgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwogV2hhdDoJUkNVIEFQSSBtb3ZlcyB0byBFWFBPUlRfU1lNQk9MX0dQTAogV2hlbjoJQXByaWwgMjAwNgogRmlsZXM6CWluY2x1ZGUvbGludXgvcmN1cGRhdGUuaCwga2VybmVsL3JjdXBkYXRlLmMKQEAgLTYwLDYgKzY3LDIxIEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitXaGF0OglWaWRlbzRMaW51eCBBUEkgMSBpb2N0bHMgYW5kIHZpZGVvX2RlY29kZXIuaCBmcm9tIFZpZGVvIGRldmljZXMuCitXaGVuOglKdWx5IDIwMDYKK1doeToJVjRMMSBBUDEgd2FzIHJlcGxhY2VkIGJ5IFY0TDIgQVBJLiBkdXJpbmcgbWlncmF0aW9uIGZyb20gMi40IHRvIDIuNgorCXNlcmllcy4gVGhlIG9sZCBBUEkgaGF2ZSBsb3RzIG9mIGRyYXdiYWNrcyBhbmQgZG9uJ3QgcHJvdmlkZSBlbm91Z2gKKwltZWFucyB0byB3b3JrIHdpdGggYWxsIHZpZGVvIGFuZCBhdWRpbyBzdGFuZGFyZHMuIFRoZSBuZXdlciBBUEkgaXMKKwlhbHJlYWR5IGF2YWlsYWJsZSBvbiB0aGUgbWFpbiBkcml2ZXJzIGFuZCBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkLgorCU5ld2VyIGRyaXZlcnMgc2hvdWxkIHVzZSB2NGxfY29tcGF0X3RyYW5zbGF0ZV9pb2N0bCBmdW5jdGlvbiB0byBoYW5kbGUKKwlvbGQgY2FsbHMsIHJlcGxhY2luZyB0byBuZXdlciBvbmVzLgorCURlY29kZXIgaW9jdHMgYXJlIHVzaW5nIGludGVybmFsbHkgdG8gYWxsb3cgdmlkZW8gZHJpdmVycyB0bworCWNvbW11bmljYXRlIHdpdGggdmlkZW8gZGVjb2RlcnMuIFRoaXMgc2hvdWxkIGFsc28gYmUgaW1wcm92ZWQgdG8gYWxsb3cKKwlWNEwyIGNhbGxzIGJlaW5nIHRyYW5zbGF0ZWQgaW50byBjb21wYXRpYmxlIGludGVybmFsIGlvY3Rscy4KK1dobzoJTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQGJydHVyYm8uY29tLmJyPgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwogV2hhdDoJaTJjIHN5c2ZzIG5hbWUgY2hhbmdlOiBpbjFfcmVmLCB2aWQgZGVwcmVjYXRlZCBpbiBmYXZvdXIgb2YgY3B1MF92aWQKIFdoZW46CU5vdmVtYmVyIDIwMDUKIEZpbGVzOglkcml2ZXJzL2kyYy9jaGlwcy9hZG0xMDI1LmMsIGRyaXZlcnMvaTJjL2NoaXBzL2FkbTEwMjYuYwpAQCAtMTExLDMgKzEzMywxMCBAQAogCXRvIGxpbmsgYWdhaW5zdCBBUEktY29tcGF0aWJsZSBsaWJyYXJ5IG9uIHRvcCBvZiBsaWJuZm5ldGxpbmtfcXVldWUgCiAJaW5zdGVhZCBvZiB0aGUgY3VycmVudCAnbGliaXBxJy4KIFdobzoJSGFyYWxkIFdlbHRlIDxsYWZvcmdlQG5ldGZpbHRlci5vcmc+CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGF0OglFWFBPUlRfU1lNQk9MKGxvb2t1cF9oYXNoKQorV2hlbjoJSmFudWFyeSAyMDA2CitXaHk6CVRvbyBsb3ctbGV2ZWwgaW50ZXJmYWNlLiAgVXNlIGxvb2t1cF9vbmVfbGVuIG9yIGxvb2t1cF9jcmVhdGUgaW5zdGVhZC4KK1dobzoJQ2hyaXN0b3BoIEhlbGx3aWcgPGhjaEBsc3QuZGU+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4dDIudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leHQyLnR4dAppbmRleCBkMTYzMzRlLi5hOGVkYjM3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4dDIudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXh0Mi50eHQKQEAgLTE3LDggKzE3LDYgQEAKIGJzZGRmCQkJKCopCU1ha2VzIGBkZicgYWN0IGxpa2UgQlNELgogbWluaXhkZgkJCQlNYWtlcyBgZGYnIGFjdCBsaWtlIE1pbml4LgogCi1jaGVjawkJCQlDaGVjayBibG9jayBhbmQgaW5vZGUgYml0bWFwcyBhdCBtb3VudCB0aW1lCi0JCQkJKHJlcXVpcmVzIENPTkZJR19FWFQyX0NIRUNLKS4KIGNoZWNrPW5vbmUsIG5vY2hlY2sJKCopCURvbid0IGRvIGV4dHJhIGNoZWNraW5nIG9mIGJpdG1hcHMgb24gbW91bnQKIAkJCQkoY2hlY2s9bm9ybWFsIGFuZCBjaGVjaz1zdHJpY3Qgb3B0aW9ucyByZW1vdmVkKQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXZpYXBybyBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtdmlhcHJvCmluZGV4IDkzNjNiOGIuLjE2Nzc1NjYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtdmlhcHJvCisrKyBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtdmlhcHJvCkBAIC03LDEyICs3LDEwIEBACiAgICogVklBIFRlY2hub2xvZ2llcywgSW5jLiBWVDgyQzY4NkEvQgogICAgIERhdGFzaGVldDogU29tZXRpbWVzIGF2YWlsYWJsZSBhdCB0aGUgVklBIHdlYnNpdGUKIAotICAqIFZJQSBUZWNobm9sb2dpZXMsIEluYy4gVlQ4MjMxLCBWVDgyMzMsIFZUODIzM0EsIFZUODIzNSwgVlQ4MjM3Ci0gICAgRGF0YXNoZWV0OiBhdmFpbGFibGUgb24gcmVxdWVzdCBmcm9tIFZpYQorICAqIFZJQSBUZWNobm9sb2dpZXMsIEluYy4gVlQ4MjMxLCBWVDgyMzMsIFZUODIzM0EsIFZUODIzNSwgVlQ4MjM3UgorICAgIERhdGFzaGVldDogYXZhaWxhYmxlIG9uIHJlcXVlc3QgZnJvbSBWSUEKIAogQXV0aG9yczoKLQlGcm9kbyBMb29pamFhcmQgPGZyb2RvbEBkZHMubmw+LAotCVBoaWxpcCBFZGVsYnJvY2sgPHBoaWxAbmV0cm9lZGdlLmNvbT4sCiAJS3n2c3RpIE3kbGtraSA8a21hbGtraUBjYy5odXQuZmk+LAogCU1hcmsgRC4gU3R1ZGViYWtlciA8bWRzeHl6MTIzQHlhaG9vLmNvbT4sCiAJSmVhbiBEZWx2YXJlIDxraGFsaUBsaW51eC1mci5vcmc+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy93cml0aW5nLWNsaWVudHMgYi9Eb2N1bWVudGF0aW9uL2kyYy93cml0aW5nLWNsaWVudHMKaW5kZXggY2ZmN2I2NS4uZDE5OTkzYyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pMmMvd3JpdGluZy1jbGllbnRzCisrKyBiL0RvY3VtZW50YXRpb24vaTJjL3dyaXRpbmctY2xpZW50cwpAQCAtNDEyLDcgKzQxMiw3IEBACiAgICAgICAgIHJlbGVhc2VfcmVnaW9uKGFkZHJlc3MsRk9PX0VYVEVOVCk7CiAgICAgLyogU0VOU09SUyBPTkxZIEVORCAqLwogICAgIEVSUk9SMToKLSAgICAgIGtmcmVlKG5ld19jbGllbnQpOworICAgICAga2ZyZWUoZGF0YSk7CiAgICAgRVJST1IwOgogICAgICAgcmV0dXJuIGVycjsKICAgfQpAQCAtNDQzLDcgKzQ0Myw3IEBACiAgICAgICByZWxlYXNlX3JlZ2lvbihjbGllbnQtPmFkZHIsTE03OF9FWFRFTlQpOwogICAgIC8qIEhZQlJJRCBTRU5TT1JTIENISVAgT05MWSBFTkQgKi8KIAotICAgIGtmcmVlKGRhdGEpOworICAgIGtmcmVlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTsKICAgICByZXR1cm4gMDsKICAgfQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21kLnR4dCBiL0RvY3VtZW50YXRpb24vbWQudHh0CmluZGV4IGUyYjUzNjkuLjIzZTZjY2UgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbWQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbWQudHh0CkBAIC0xMTYsMyArMTE2LDEyMiBAQAogCiBPbmNlIHN0YXJ0ZWQgd2l0aCBSVU5fQVJSQVksIHVuaW5pdGlhbGl6ZWQgc3BhcmVzIGNhbiBiZSBhZGRlZCB3aXRoCiBIT1RfQUREX0RJU0suCisKKworCitNRCBkZXZpY2VzIGluIHN5c2ZzCistLS0tLS0tLS0tLS0tLS0tLS0tCittZCBkZXZpY2VzIGFwcGVhciBpbiBzeXNmcyAoL3N5cykgYXMgcmVndWxhciBibG9jayBkZXZpY2VzLAorZS5nLgorICAgL3N5cy9ibG9jay9tZDAKKworRWFjaCAnbWQnIGRldmljZSB3aWxsIGNvbnRhaW4gYSBzdWJkaXJlY3RvcnkgY2FsbGVkICdtZCcgd2hpY2gKK2NvbnRhaW5zIGZ1cnRoZXIgbWQtc3BlY2lmaWMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGRldmljZS4KKworQWxsIG1kIGRldmljZXMgY29udGFpbjoKKyAgbGV2ZWwKKyAgICAgYSB0ZXh0IGZpbGUgaW5kaWNhdGluZyB0aGUgJ3JhaWQgbGV2ZWwnLiAgVGhpcyBtYXkgYmUgYSBzdGFuZGFyZAorICAgICBudW1lcmljYWwgbGV2ZWwgcHJlZml4ZWQgYnkgIlJBSUQtIiAtIGUuZy4gIlJBSUQtNSIsIG9yIHNvbWUKKyAgICAgb3RoZXIgbmFtZSBzdWNoIGFzICJsaW5lYXIiIG9yICJtdWx0aXBhdGgiLgorICAgICBJZiBubyByYWlkIGxldmVsIGhhcyBiZWVuIHNldCB5ZXQgKGFycmF5IGlzIHN0aWxsIGJlaW5nCisgICAgIGFzc2VtYmxlZCksIHRoaXMgZmlsZSB3aWxsIGJlIGVtcHR5LgorCisgIHJhaWRfZGlza3MKKyAgICAgYSB0ZXh0IGZpbGUgd2l0aCBhIHNpbXBsZSBudW1iZXIgaW5kaWNhdGluZyB0aGUgbnVtYmVyIG9mIGRldmljZXMKKyAgICAgaW4gYSBmdWxseSBmdW5jdGlvbmFsIGFycmF5LiAgSWYgdGhpcyBpcyBub3QgeWV0IGtub3duLCB0aGUgZmlsZQorICAgICB3aWxsIGJlIGVtcHR5LiAgSWYgYW4gYXJyYXkgaXMgYmVpbmcgcmVzaXplZCAobm90IGN1cnJlbnRseQorICAgICBwb3NzaWJsZSkgdGhpcyB3aWxsIGNvbnRhaW4gdGhlIGxhcmdlciBvZiB0aGUgb2xkIGFuZCBuZXcgc2l6ZXMuCisKK0FzIGNvbXBvbmVudCBkZXZpY2VzIGFyZSBhZGRlZCB0byBhbiBtZCBhcnJheSwgdGhleSBhcHBlYXIgaW4gdGhlICdtZCcKK2RpcmVjdG9yeSBhcyBuZXcgZGlyZWN0b3JpZXMgbmFtZWQKKyAgICAgIGRldi1YWFgKK3doZXJlIFhYWCBpcyBhIG5hbWUgdGhhdCB0aGUga2VybmVsIGtub3dzIGZvciB0aGUgZGV2aWNlLCBlLmcuIGhkYjEuCitFYWNoIGRpcmVjdG9yeSBjb250YWluczoKKworICAgICAgYmxvY2sKKyAgICAgICAgYSBzeW1saW5rIHRvIHRoZSBibG9jayBkZXZpY2UgaW4gL3N5cy9ibG9jaywgZS5nLgorCSAgICAgL3N5cy9ibG9jay9tZDAvbWQvZGV2LWhkYjEvYmxvY2sgLT4gLi4vLi4vLi4vLi4vYmxvY2svaGRiL2hkYjEKKworICAgICAgc3VwZXIKKyAgICAgICAgQSBmaWxlIGNvbnRhaW5pbmcgYW4gaW1hZ2Ugb2YgdGhlIHN1cGVyYmxvY2sgcmVhZCBmcm9tLCBvcgorICAgICAgICB3cml0dGVuIHRvLCB0aGF0IGRldmljZS4KKworICAgICAgc3RhdGUKKyAgICAgICAgQSBmaWxlIHJlY29yZGluZyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgZGV2aWNlIGluIHRoZSBhcnJheQorCXdoaWNoIGNhbiBiZSBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mCisJICAgICAgZmF1bHR5ICAgLSBkZXZpY2UgaGFzIGJlZW4ga2lja2VkIGZyb20gYWN0aXZlIHVzZSBkdWUgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICBhIGRldGVjdGVkIGZhdWx0CisJICAgICAgaW5fc3luYyAgLSBkZXZpY2UgaXMgYSBmdWxseSBpbi1zeW5jIG1lbWJlciBvZiB0aGUgYXJyYXkKKwkgICAgICBzcGFyZSAgICAtIGRldmljZSBpcyB3b3JraW5nLCBidXQgbm90IGEgZnVsbCBtZW1iZXIuCisJCQkgVGhpcyBpbmNsdWRlcyBzcGFyZXMgdGhhdCBhcmUgaW4gdGhlIHByb2Nlc3MKKwkJCSBvZiBiZWluZyByZWNvdmVycmVkIHRvCisJVGhpcyBsaXN0IG1ha2UgZ3JvdyBpbiBmdXR1cmUuCisKKworQW4gYWN0aXZlIG1kIGRldmljZSB3aWxsIGFsc28gY29udGFpbiBhbmQgZW50cnkgZm9yIGVhY2ggYWN0aXZlIGRldmljZQoraW4gdGhlIGFycmF5LiAgVGhlc2UgYXJlIG5hbWVkCisKKyAgICByZE5OCisKK3doZXJlICdOTicgaXMgdGhlIHBvc3NpdGlvbiBpbiB0aGUgYXJyYXksIHN0YXJ0aW5nIGZyb20gMC4KK1NvIGZvciBhIDMgZHJpdmUgYXJyYXkgdGhlcmUgd2lsbCBiZSByZDAsIHJkMSwgcmQyLgorVGhlc2UgYXJlIHN5bWJvbGljIGxpbmtzIHRvIHRoZSBhcHByb3ByaWF0ZSAnZGV2LVhYWCcgZW50cnkuCitUaHVzLCBmb3IgZXhhbXBsZSwKKyAgICAgICBjYXQgL3N5cy9ibG9jay9tZCovbWQvcmQqL3N0YXRlCit3aWxsIHNob3cgJ2luX3N5bmMnIG9uIGV2ZXJ5IGxpbmUuCisKKworCitBY3RpdmUgbWQgZGV2aWNlcyBmb3IgbGV2ZWxzIHRoYXQgc3VwcG9ydCBkYXRhIHJlZHVuZGFuY3kgKDEsNCw1LDYpCithbHNvIGhhdmUKKworICAgc3luY19hY3Rpb24KKyAgICAgYSB0ZXh0IGZpbGUgdGhhdCBjYW4gYmUgdXNlZCB0byBtb25pdG9yIGFuZCBjb250cm9sIHRoZSByZWJ1aWxkCisgICAgIHByb2Nlc3MuICBJdCBjb250YWlucyBvbmUgd29yZCB3aGljaCBjYW4gYmUgb25lIG9mOgorICAgICAgIHJlc3luYyAgICAgICAgLSByZWR1bmRhbmN5IGlzIGJlaW5nIHJlY2FsY3VsYXRlZCBhZnRlciB1bmNsZWFuCisgICAgICAgICAgICAgICAgICAgICAgIHNodXRkb3duIG9yIGNyZWF0aW9uCisgICAgICAgcmVjb3ZlciAgICAgICAtIGEgaG90IHNwYXJlIGlzIGJlaW5nIGJ1aWx0IHRvIHJlcGxhY2UgYQorICAgICAgICAgICAgICAgICAgICAgICBmYWlsZWQvbWlzc2luZyBkZXZpY2UKKyAgICAgICBpZGxlICAgICAgICAgIC0gbm90aGluZyBpcyBoYXBwZW5pbmcKKyAgICAgICBjaGVjayAgICAgICAgIC0gQSBmdWxsIGNoZWNrIG9mIHJlZHVuZGFuY3kgd2FzIHJlcXVlc3RlZCBhbmQgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgaGFwcGVuaW5nLiAgVGhpcyByZWFkcyBhbGwgYmxvY2sgYW5kIGNoZWNrcworICAgICAgICAgICAgICAgICAgICAgICB0aGVtLiBBIHJlcGFpciBtYXkgYWxzbyBoYXBwZW4gZm9yIHNvbWUgcmFpZAorICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMuCisgICAgICAgcmVwYWlyICAgICAgICAtIEEgZnVsbCBjaGVjayBhbmQgcmVwYWlyIGlzIGhhcHBlbmluZy4gIFRoaXMgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgc2ltaWxhciB0byAncmVzeW5jJywgYnV0IHdhcyByZXF1ZXN0ZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgICAgIHVzZXIsIGFuZCB0aGUgd3JpdGUtaW50ZW50IGJpdG1hcCBpcyBOT1QgdXNlZCB0bworCQkgICAgICAgb3B0aW1pc2UgdGhlIHByb2Nlc3MuCisKKyAgICAgIFRoaXMgZmlsZSBpcyB3cml0YWJsZSwgYW5kIGVhY2ggb2YgdGhlIHN0cmluZ3MgdGhhdCBjb3VsZCBiZQorICAgICAgcmVhZCBhcmUgbWVhbmluZ2Z1bCBmb3Igd3JpdGluZy4KKworICAgICAgICdpZGxlJyB3aWxsIHN0b3AgYW4gYWN0aXZlIHJlc3luYy9yZWNvdmVyeSBldGMuICBUaGVyZSBpcyBubworICAgICAgICAgICBndWFyYW50ZWUgdGhhdCBhbm90aGVyIHJlc3luYy9yZWNvdmVyeSBtYXkgbm90IGJlIGF1dG9tYXRpY2FsbHkKKwkgICBzdGFydGVkIGFnYWluLCB0aG91Z2ggc29tZSBldmVudCB3aWxsIGJlIG5lZWRlZCB0byB0cmlnZ2VyCisgICAgICAgICAgIHRoaXMuCisJJ3Jlc3luYycgb3IgJ3JlY292ZXJ5JyBjYW4gYmUgdXNlZCB0byByZXN0YXJ0IHRoZQorICAgICAgICAgICBjb3JyZXNwb25kaW5nIG9wZXJhdGlvbiBpZiBpdCB3YXMgc3RvcHBlZCB3aXRoICdpZGxlJy4KKwknY2hlY2snIGFuZCAncmVwYWlyJyB3aWxsIHN0YXJ0IHRoZSBhcHByb3ByaWF0ZSBwcm9jZXNzCisgICAgICAgICAgIHByb3ZpZGluZyB0aGUgY3VycmVudCBzdGF0ZSBpcyAnaWRsZScuCisKKyAgIG1pc21hdGNoX2NvdW50CisgICAgICBXaGVuIHBlcmZvcm1pbmcgJ2NoZWNrJyBhbmQgJ3JlcGFpcicsIGFuZCBwb3NzaWJseSB3aGVuCisgICAgICBwZXJmb3JtaW5nICdyZXN5bmMnLCBtZCB3aWxsIGNvdW50IHRoZSBudW1iZXIgb2YgZXJyb3JzIHRoYXQgYXJlCisgICAgICBmb3VuZC4gIFRoZSBjb3VudCBpbiAnbWlzbWF0Y2hfY250JyBpcyB0aGUgbnVtYmVyIG9mIHNlY3RvcnMKKyAgICAgIHRoYXQgd2VyZSByZS13cml0dGVuLCBvciAoZm9yICdjaGVjaycpIHdvdWxkIGhhdmUgYmVlbgorICAgICAgcmUtd3JpdHRlbi4gIEFzIG1vc3QgcmFpZCBsZXZlbHMgd29yayBpbiB1bml0cyBvZiBwYWdlcyByYXRoZXIKKyAgICAgIHRoYW4gc2VjdG9ycywgdGhpcyBteSBiZSBsYXJnZXIgdGhhbiB0aGUgbnVtYmVyIG9mIGFjdHVhbCBlcnJvcnMKKyAgICAgIGJ5IGEgZmFjdG9yIG9mIHRoZSBudW1iZXIgb2Ygc2VjdG9ycyBpbiBhIHBhZ2UuCisKK0VhY2ggYWN0aXZlIG1kIGRldmljZSBtYXkgYWxzbyBoYXZlIGF0dHJpYnV0ZXMgc3BlY2lmaWMgdG8gdGhlCitwZXJzb25hbGl0eSBtb2R1bGUgdGhhdCBtYW5hZ2VzIGl0LgorVGhlc2UgYXJlIHNwZWNpZmljIHRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kdWxlIGFuZCBjb3VsZAorY2hhbmdlIHN1YnN0YW50aWFsbHkgaWYgdGhlIGltcGxlbWVudGF0aW9uIGNoYW5nZXMuCisKK1RoZXNlIGN1cnJlbnRseSBpbmNsdWRlCisKKyAgc3RyaXBlX2NhY2hlX3NpemUgIChjdXJyZW50bHkgcmFpZDUgb25seSkKKyAgICAgIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBzdHJpcGUgY2FjaGUuICBUaGlzIGlzIHdyaXRhYmxlLCBidXQKKyAgICAgIHRoZXJlIGFyZSB1cHBlciBhbmQgbG93ZXIgbGltaXRzICgzMjc2OCwgMTYpLiAgRGVmYXVsdCBpcyAxMjguCisgIHN0cmlwX2NhY2hlX2FjdGl2ZSAoY3VycmVudGx5IHJhaWQ1IG9ubHkpCisgICAgICBudW1iZXIgb2YgYWN0aXZlIGVudHJpZXMgaW4gdGhlIHN0cmlwZSBjYWNoZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL1JFQURNRS5pcHcyMTAwIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL1JFQURNRS5pcHcyMTAwCmluZGV4IDIwNDY5NDguLjNhYjQwMzcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9SRUFETUUuaXB3MjEwMAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvUkVBRE1FLmlwdzIxMDAKQEAgLTEsMjcgKzEsODIgQEAKIAotPT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1JbnRlbChSKSBQUk8vV2lyZWxlc3MgMjEwMCBOZXR3b3JrIENvbm5lY3Rpb24gRHJpdmVyIGZvciBMaW51eAorSW50ZWwoUikgUFJPL1dpcmVsZXNzIDIxMDAgRHJpdmVyIGZvciBMaW51eCBpbiBzdXBwb3J0IG9mOgorCitJbnRlbChSKSBQUk8vV2lyZWxlc3MgMjEwMCBOZXR3b3JrIENvbm5lY3Rpb24KKworQ29weXJpZ2h0IChDKSAyMDAzLTIwMDUsIEludGVsIENvcnBvcmF0aW9uCisKIFJFQURNRS5pcHcyMTAwCiAKLU1hcmNoIDE0LCAyMDA1CitWZXJzaW9uOiAxLjEuMworRGF0ZSAgIDogT2N0b2JlciAxNywgMjAwNQogCi09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIEluZGV4Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLTAuIEludHJvZHVjdGlvbgotMS4gUmVsZWFzZSAxLjEuMCBDdXJyZW50IEZlYXR1cmVzCi0yLiBDb21tYW5kIExpbmUgUGFyYW1ldGVycwotMy4gU3lzZnMgSGVscGVyIEZpbGVzCi00LiBSYWRpbyBLaWxsIFN3aXRjaAotNS4gRHluYW1pYyBGaXJtd2FyZQotNi4gUG93ZXIgTWFuYWdlbWVudAotNy4gU3VwcG9ydAotOC4gTGljZW5zZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzAuIElNUE9SVEFOVCBJTkZPUk1BVElPTiBCRUZPUkUgVVNJTkcgVEhJUyBEUklWRVIKKzEuIEludHJvZHVjdGlvbgorMi4gUmVsZWFzZSAxLjEuMyBDdXJyZW50IEZlYXR1cmVzCiszLiBDb21tYW5kIExpbmUgUGFyYW1ldGVycworNC4gU3lzZnMgSGVscGVyIEZpbGVzCis1LiBSYWRpbyBLaWxsIFN3aXRjaAorNi4gRHluYW1pYyBGaXJtd2FyZQorNy4gUG93ZXIgTWFuYWdlbWVudAorOC4gU3VwcG9ydAorOS4gTGljZW5zZQogCiAKLT09PT09PT09PT09PT09PT09PT09PT09PT09PQotMC4gSW50cm9kdWN0aW9uCi0tLS0tLS0tLS0tLS0gLS0tLS0gICAtLS0tLSAgICAgICAtLS0tICAgICAgIC0tLSAgICAgICAtLSAgICAgICAgIC0gICAgIAorMC4gICBJTVBPUlRBTlQgSU5GT1JNQVRJT04gQkVGT1JFIFVTSU5HIFRISVMgRFJJVkVSCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJbXBvcnRhbnQgTm90aWNlIEZPUiBBTEwgVVNFUlMgT1IgRElTVFJJQlVUT1JTISEhIQorCitJbnRlbCB3aXJlbGVzcyBMQU4gYWRhcHRlcnMgYXJlIGVuZ2luZWVyZWQsIG1hbnVmYWN0dXJlZCwgdGVzdGVkLCBhbmQKK3F1YWxpdHkgY2hlY2tlZCB0byBlbnN1cmUgdGhhdCB0aGV5IG1lZXQgYWxsIG5lY2Vzc2FyeSBsb2NhbCBhbmQKK2dvdmVybm1lbnRhbCByZWd1bGF0b3J5IGFnZW5jeSByZXF1aXJlbWVudHMgZm9yIHRoZSByZWdpb25zIHRoYXQgdGhleQorYXJlIGRlc2lnbmF0ZWQgYW5kL29yIG1hcmtlZCB0byBzaGlwIGludG8uIFNpbmNlIHdpcmVsZXNzIExBTnMgYXJlCitnZW5lcmFsbHkgdW5saWNlbnNlZCBkZXZpY2VzIHRoYXQgc2hhcmUgc3BlY3RydW0gd2l0aCByYWRhcnMsCitzYXRlbGxpdGVzLCBhbmQgb3RoZXIgbGljZW5zZWQgYW5kIHVubGljZW5zZWQgZGV2aWNlcywgaXQgaXMgc29tZXRpbWVzCituZWNlc3NhcnkgdG8gZHluYW1pY2FsbHkgZGV0ZWN0LCBhdm9pZCwgYW5kIGxpbWl0IHVzYWdlIHRvIGF2b2lkCitpbnRlcmZlcmVuY2Ugd2l0aCB0aGVzZSBkZXZpY2VzLiBJbiBtYW55IGluc3RhbmNlcyBJbnRlbCBpcyByZXF1aXJlZCB0bworcHJvdmlkZSB0ZXN0IGRhdGEgdG8gcHJvdmUgcmVnaW9uYWwgYW5kIGxvY2FsIGNvbXBsaWFuY2UgdG8gcmVnaW9uYWwgYW5kCitnb3Zlcm5tZW50YWwgcmVndWxhdGlvbnMgYmVmb3JlIGNlcnRpZmljYXRpb24gb3IgYXBwcm92YWwgdG8gdXNlIHRoZQorcHJvZHVjdCBpcyBncmFudGVkLiBJbnRlbCdzIHdpcmVsZXNzIExBTidzIEVFUFJPTSwgZmlybXdhcmUsIGFuZAorc29mdHdhcmUgZHJpdmVyIGFyZSBkZXNpZ25lZCB0byBjYXJlZnVsbHkgY29udHJvbCBwYXJhbWV0ZXJzIHRoYXQgYWZmZWN0CityYWRpbyBvcGVyYXRpb24gYW5kIHRvIGVuc3VyZSBlbGVjdHJvbWFnbmV0aWMgY29tcGxpYW5jZSAoRU1DKS4gVGhlc2UKK3BhcmFtZXRlcnMgaW5jbHVkZSwgd2l0aG91dCBsaW1pdGF0aW9uLCBSRiBwb3dlciwgc3BlY3RydW0gdXNhZ2UsCitjaGFubmVsIHNjYW5uaW5nLCBhbmQgaHVtYW4gZXhwb3N1cmUuCisKK0ZvciB0aGVzZSByZWFzb25zIEludGVsIGNhbm5vdCBwZXJtaXQgYW55IG1hbmlwdWxhdGlvbiBieSB0aGlyZCBwYXJ0aWVzCitvZiB0aGUgc29mdHdhcmUgcHJvdmlkZWQgaW4gYmluYXJ5IGZvcm1hdCB3aXRoIHRoZSB3aXJlbGVzcyBXTEFOCithZGFwdGVycyAoZS5nLiwgdGhlIEVFUFJPTSBhbmQgZmlybXdhcmUpLiBGdXJ0aGVybW9yZSwgaWYgeW91IHVzZSBhbnkKK3BhdGNoZXMsIHV0aWxpdGllcywgb3IgY29kZSB3aXRoIHRoZSBJbnRlbCB3aXJlbGVzcyBMQU4gYWRhcHRlcnMgdGhhdAoraGF2ZSBiZWVuIG1hbmlwdWxhdGVkIGJ5IGFuIHVuYXV0aG9yaXplZCBwYXJ0eSAoaS5lLiwgcGF0Y2hlcywKK3V0aWxpdGllcywgb3IgY29kZSAoaW5jbHVkaW5nIG9wZW4gc291cmNlIGNvZGUgbW9kaWZpY2F0aW9ucykgd2hpY2ggaGF2ZQorbm90IGJlZW4gdmFsaWRhdGVkIGJ5IEludGVsKSwgKGkpIHlvdSB3aWxsIGJlIHNvbGVseSByZXNwb25zaWJsZSBmb3IKK2Vuc3VyaW5nIHRoZSByZWd1bGF0b3J5IGNvbXBsaWFuY2Ugb2YgdGhlIHByb2R1Y3RzLCAoaWkpIEludGVsIHdpbGwgYmVhcgorbm8gbGlhYmlsaXR5LCB1bmRlciBhbnkgdGhlb3J5IG9mIGxpYWJpbGl0eSBmb3IgYW55IGlzc3VlcyBhc3NvY2lhdGVkCit3aXRoIHRoZSBtb2RpZmllZCBwcm9kdWN0cywgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiwgY2xhaW1zIHVuZGVyCit0aGUgd2FycmFudHkgYW5kL29yIGlzc3VlcyBhcmlzaW5nIGZyb20gcmVndWxhdG9yeSBub24tY29tcGxpYW5jZSwgYW5kCisoaWlpKSBJbnRlbCB3aWxsIG5vdCBwcm92aWRlIG9yIGJlIHJlcXVpcmVkIHRvIGFzc2lzdCBpbiBwcm92aWRpbmcKK3N1cHBvcnQgdG8gYW55IHRoaXJkIHBhcnRpZXMgZm9yIHN1Y2ggbW9kaWZpZWQgcHJvZHVjdHMuCisKK05vdGU6IE1hbnkgcmVndWxhdG9yeSBhZ2VuY2llcyBjb25zaWRlciBXaXJlbGVzcyBMQU4gYWRhcHRlcnMgdG8gYmUKK21vZHVsZXMsIGFuZCBhY2NvcmRpbmdseSwgY29uZGl0aW9uIHN5c3RlbS1sZXZlbCByZWd1bGF0b3J5IGFwcHJvdmFsCit1cG9uIHJlY2VpcHQgYW5kIHJldmlldyBvZiB0ZXN0IGRhdGEgZG9jdW1lbnRpbmcgdGhhdCB0aGUgYW50ZW5uYXMgYW5kCitzeXN0ZW0gY29uZmlndXJhdGlvbiBkbyBub3QgY2F1c2UgdGhlIEVNQyBhbmQgcmFkaW8gb3BlcmF0aW9uIHRvIGJlCitub24tY29tcGxpYW50LgorCitUaGUgZHJpdmVycyBhdmFpbGFibGUgZm9yIGRvd25sb2FkIGZyb20gU291cmNlRm9yZ2UgYXJlIHByb3ZpZGVkIGFzIGEKK3BhcnQgb2YgYSBkZXZlbG9wbWVudCBwcm9qZWN0LiAgQ29uZm9ybWFuY2UgdG8gbG9jYWwgcmVndWxhdG9yeQorcmVxdWlyZW1lbnRzIGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgaW5kaXZpZHVhbCBkZXZlbG9wZXIuICBBcworc3VjaCwgaWYgeW91IGFyZSBpbnRlcmVzdGVkIGluIGRlcGxveWluZyBvciBzaGlwcGluZyBhIGRyaXZlciBhcyBwYXJ0IG9mCitzb2x1dGlvbiBpbnRlbmRlZCB0byBiZSB1c2VkIGZvciBwdXJwb3NlcyBvdGhlciB0aGFuIGRldmVsb3BtZW50LCBwbGVhc2UKK29idGFpbiBhIHRlc3RlZCBkcml2ZXIgZnJvbSBJbnRlbCBDdXN0b21lciBTdXBwb3J0IGF0OgorCitodHRwOi8vc3VwcG9ydC5pbnRlbC5jb20vc3VwcG9ydC9ub3RlYm9vay9zYi9DUy0wMDY0MDguaHRtCisKKworMS4gSW50cm9kdWN0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBUaGlzIGRvY3VtZW50IHByb3ZpZGVzIGEgYnJpZWYgb3ZlcnZpZXcgb2YgdGhlIGZlYXR1cmVzIHN1cHBvcnRlZCBieSB0aGUgCiBJUFcyMTAwIGRyaXZlciBwcm9qZWN0LiAgVGhlIG1haW4gcHJvamVjdCB3ZWJzaXRlLCB3aGVyZSB0aGUgbGF0ZXN0IApAQCAtMzQsOSArODksOCBAQAogZm9yIHRoZSBkcml2ZXIgcHJvamVjdC4KIAogCi09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLTEuIFJlbGVhc2UgMS4xLjAgQ3VycmVudCBTdXBwb3J0ZWQgRmVhdHVyZXMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgICAgCisyLiBSZWxlYXNlIDEuMS4zIEN1cnJlbnQgU3VwcG9ydGVkIEZlYXR1cmVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLSBNYW5hZ2VkIChCU1MpIGFuZCBBZC1Ib2MgKElCU1MpCiAtIFdFUCAoc2hhcmVkIGtleSBhbmQgb3BlbikKIC0gV2lyZWxlc3MgVG9vbHMgc3VwcG9ydCAKQEAgLTUxLDkgKzEwNSw4IEBACiBwZXJmb3JtZWQgb24gYSBnaXZlbiBmZWF0dXJlLgogCiAKLT09PT09PT09PT09PT09PT09PT09PT09PT09PQotMi4gQ29tbWFuZCBMaW5lIFBhcmFtZXRlcnMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgICAgCiszLiBDb21tYW5kIExpbmUgUGFyYW1ldGVycworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogSWYgdGhlIGRyaXZlciBpcyBidWlsdCBhcyBhIG1vZHVsZSwgdGhlIGZvbGxvd2luZyBvcHRpb25hbCBwYXJhbWV0ZXJzIGFyZSB1c2VkCiBieSBlbnRlcmluZyB0aGVtIG9uIHRoZSBjb21tYW5kIGxpbmUgd2l0aCB0aGUgbW9kcHJvYmUgY29tbWFuZCB1c2luZyB0aGlzCkBAIC03NSw5ICsxMjgsOSBAQAogZGlzYWJsZQkJYm9vbGVhbgkJZGlzYWJsZT0xIC8qIERvIG5vdCBwb3dlciB0aGUgSFcgKi8KIAogCi09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLTMuIFN5c2ZzIEhlbHBlciBGaWxlcworNC4gU3lzZnMgSGVscGVyIEZpbGVzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogVGhlcmUgYXJlIHNldmVyYWwgd2F5cyB0byBjb250cm9sIHRoZSBiZWhhdmlvciBvZiB0aGUgZHJpdmVyLiAgTWFueSBvZiB0aGUgCiBnZW5lcmFsIGNhcGFiaWxpdGllcyBhcmUgZXhwb3NlZCB0aHJvdWdoIHRoZSBXaXJlbGVzcyBUb29scyAoaXdjb25maWcpLiAgVGhlcmUKQEAgLTEyMCw5ICsxNzMsOCBAQAogICAJYmFzZWQgUkYga2lsbCBmcm9tIE9OIC0+IE9GRiAtPiBPTiwgdGhlIHJhZGlvIHdpbGwgTk9UIGNvbWUgYmFjayBvbgogCiAKLT09PT09PT09PT09PT09PT09PT09PT09PT09PQotNC4gUmFkaW8gS2lsbCBTd2l0Y2gKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorNS4gUmFkaW8gS2lsbCBTd2l0Y2gKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBNb3N0IGxhcHRvcHMgcHJvdmlkZSB0aGUgYWJpbGl0eSBmb3IgdGhlIHVzZXIgdG8gcGh5c2ljYWxseSBkaXNhYmxlIHRoZSByYWRpby4KIFNvbWUgdmVuZG9ycyBoYXZlIGltcGxlbWVudGVkIHRoaXMgYXMgYSBwaHlzaWNhbCBzd2l0Y2ggdGhhdCByZXF1aXJlcyBubwogc29mdHdhcmUgdG8gdHVybiB0aGUgcmFkaW8gb2ZmIGFuZCBvbi4gIE9uIG90aGVyIGxhcHRvcHMsIGhvd2V2ZXIsIHRoZSBzd2l0Y2gKQEAgLTEzNCw5ICsxODYsOCBAQAogb24geW91ciBzeXN0ZW0uCiAKIAotPT09PT09PT09PT09PT09PT09PT09PT09PT09Ci01LiBEeW5hbWljIEZpcm13YXJlCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgIAorNi4gRHluYW1pYyBGaXJtd2FyZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIEFzIHRoZSBmaXJtd2FyZSBpcyBsaWNlbnNlZCB1bmRlciBhIHJlc3RyaWN0ZWQgdXNlIGxpY2Vuc2UsIGl0IGNhbiBub3QgYmUgCiBpbmNsdWRlZCB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2VzLiAgVG8gZW5hYmxlIHRoZSBJUFcyMTAwIHlvdSB3aWxsIG5lZWQgYSAKIGZpcm13YXJlIGltYWdlIHRvIGxvYWQgaW50byB0aGUgd2lyZWxlc3MgTklDJ3MgcHJvY2Vzc29ycy4KQEAgLTE0Niw5ICsxOTcsOCBAQAogU2VlIElOU1RBTEwgZm9yIGluc3RydWN0aW9ucyBvbiBpbnN0YWxsaW5nIHRoZSBmaXJtd2FyZS4KIAogCi09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLTYuIFBvd2VyIE1hbmFnZW1lbnQKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgICAgCis3LiBQb3dlciBNYW5hZ2VtZW50CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogVGhlIElQVzIxMDAgc3VwcG9ydHMgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIFBvd2VyIFNhdmUgUHJvdG9jb2wgCiB0aHJvdWdoIGEgcHJpdmF0ZSB3aXJlbGVzcyBleHRlbnNpb24gaW50ZXJmYWNlLiAgVGhlIElQVzIxMDAgc3VwcG9ydHMgCiB0aGUgZm9sbG93aW5nIGRpZmZlcmVudCBtb2RlczoKQEAgLTIwMCw5ICsyNTAsOCBAQAogbGV2ZWwgaWYgYGl3Y29uZmlnIGV0aDEgcG93ZXIgb25gIGlzIGludm9rZWQuCiAKIAotPT09PT09PT09PT09PT09PT09PT09PT09PT09Ci03LiBTdXBwb3J0Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgIAorOC4gU3VwcG9ydAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogRm9yIGdlbmVyYWwgZGV2ZWxvcG1lbnQgaW5mb3JtYXRpb24gYW5kIHN1cHBvcnQsCiBnbyB0bzoKQEAgLTIxOCw5ICsyNjcsOCBAQAogCiAgICAgaHR0cDovL3N1cHBvcnRtYWlsLmludGVsLmNvbQogCi09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLTguIExpY2Vuc2UKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgICAgCis5LiBMaWNlbnNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAgIENvcHlyaWdodChjKSAyMDAzIC0gMjAwNSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL1JFQURNRS5pcHcyMjAwIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL1JFQURNRS5pcHcyMjAwCmluZGV4IDY5MTYwODAuLmM2NDkyZDMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9SRUFETUUuaXB3MjIwMAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvUkVBRE1FLmlwdzIyMDAKQEAgLTEsMzMgKzEsODkgQEAKIAogSW50ZWwoUikgUFJPL1dpcmVsZXNzIDI5MTVBQkcgRHJpdmVyIGZvciBMaW51eCBpbiBzdXBwb3J0IG9mOgogCi1JbnRlbChSKSBQUk8vV2lyZWxlc3MgMjIwMEJHIE5ldHdvcmsgQ29ubmVjdGlvbiAKLUludGVsKFIpIFBSTy9XaXJlbGVzcyAyOTE1QUJHIE5ldHdvcmsgQ29ubmVjdGlvbiAKK0ludGVsKFIpIFBSTy9XaXJlbGVzcyAyMjAwQkcgTmV0d29yayBDb25uZWN0aW9uCitJbnRlbChSKSBQUk8vV2lyZWxlc3MgMjkxNUFCRyBOZXR3b3JrIENvbm5lY3Rpb24KIAotTm90ZTogVGhlIEludGVsKFIpIFBSTy9XaXJlbGVzcyAyOTE1QUJHIERyaXZlciBmb3IgTGludXggYW5kIEludGVsKFIpIAotUFJPL1dpcmVsZXNzIDIyMDBCRyBEcml2ZXIgZm9yIExpbnV4IGlzIGEgdW5pZmllZCBkcml2ZXIgdGhhdCB3b3JrcyBvbiAKLWJvdGggaGFyZHdhcmUgYWRhcHRlcnMgbGlzdGVkIGFib3ZlLiBJbiB0aGlzIGRvY3VtZW50IHRoZSBJbnRlbChSKSAKLVBSTy9XaXJlbGVzcyAyOTE1QUJHIERyaXZlciBmb3IgTGludXggd2lsbCBiZSB1c2VkIHRvIHJlZmVyZW5jZSB0aGUgCitOb3RlOiBUaGUgSW50ZWwoUikgUFJPL1dpcmVsZXNzIDI5MTVBQkcgRHJpdmVyIGZvciBMaW51eCBhbmQgSW50ZWwoUikKK1BSTy9XaXJlbGVzcyAyMjAwQkcgRHJpdmVyIGZvciBMaW51eCBpcyBhIHVuaWZpZWQgZHJpdmVyIHRoYXQgd29ya3Mgb24KK2JvdGggaGFyZHdhcmUgYWRhcHRlcnMgbGlzdGVkIGFib3ZlLiBJbiB0aGlzIGRvY3VtZW50IHRoZSBJbnRlbChSKQorUFJPL1dpcmVsZXNzIDI5MTVBQkcgRHJpdmVyIGZvciBMaW51eCB3aWxsIGJlIHVzZWQgdG8gcmVmZXJlbmNlIHRoZQogdW5pZmllZCBkcml2ZXIuCiAKIENvcHlyaWdodCAoQykgMjAwNC0yMDA1LCBJbnRlbCBDb3Jwb3JhdGlvbgogCiBSRUFETUUuaXB3MjIwMAogCi1WZXJzaW9uOiAxLjAuMAotRGF0ZSAgIDogSmFudWFyeSAzMSwgMjAwNQorVmVyc2lvbjogMS4wLjgKK0RhdGUgICA6IE9jdG9iZXIgMjAsIDIwMDUKIAogCiBJbmRleAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzAuICAgSU1QT1JUQU5UIElORk9STUFUSU9OIEJFRk9SRSBVU0lORyBUSElTIERSSVZFUgogMS4gICBJbnRyb2R1Y3Rpb24KIDEuMS4gT3ZlcnZpZXcgb2YgZmVhdHVyZXMKIDEuMi4gTW9kdWxlIHBhcmFtZXRlcnMKIDEuMy4gV2lyZWxlc3MgRXh0ZW5zaW9uIFByaXZhdGUgTWV0aG9kcwogMS40LiBTeXNmcyBIZWxwZXIgRmlsZXMKLTIuICAgQWJvdXQgdGhlIFZlcnNpb24gTnVtYmVycwotMy4gICBTdXBwb3J0Ci00LiAgIExpY2Vuc2UKKzIuICAgQWQtSG9jIE5ldHdvcmtpbmcKKzMuICAgSW50ZXJhY3Rpbmcgd2l0aCBXaXJlbGVzcyBUb29scworMy4xLiBpd2NvbmZpZyBtb2RlCis0LiAgIEFib3V0IHRoZSBWZXJzaW9uIE51bWJlcnMKKzUuICAgRmlybXdhcmUgaW5zdGFsbGF0aW9uCis2LiAgIFN1cHBvcnQKKzcuICAgTGljZW5zZQorCisKKzAuICAgSU1QT1JUQU5UIElORk9STUFUSU9OIEJFRk9SRSBVU0lORyBUSElTIERSSVZFUgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSW1wb3J0YW50IE5vdGljZSBGT1IgQUxMIFVTRVJTIE9SIERJU1RSSUJVVE9SUyEhISEgCisKK0ludGVsIHdpcmVsZXNzIExBTiBhZGFwdGVycyBhcmUgZW5naW5lZXJlZCwgbWFudWZhY3R1cmVkLCB0ZXN0ZWQsIGFuZAorcXVhbGl0eSBjaGVja2VkIHRvIGVuc3VyZSB0aGF0IHRoZXkgbWVldCBhbGwgbmVjZXNzYXJ5IGxvY2FsIGFuZAorZ292ZXJubWVudGFsIHJlZ3VsYXRvcnkgYWdlbmN5IHJlcXVpcmVtZW50cyBmb3IgdGhlIHJlZ2lvbnMgdGhhdCB0aGV5CithcmUgZGVzaWduYXRlZCBhbmQvb3IgbWFya2VkIHRvIHNoaXAgaW50by4gU2luY2Ugd2lyZWxlc3MgTEFOcyBhcmUKK2dlbmVyYWxseSB1bmxpY2Vuc2VkIGRldmljZXMgdGhhdCBzaGFyZSBzcGVjdHJ1bSB3aXRoIHJhZGFycywKK3NhdGVsbGl0ZXMsIGFuZCBvdGhlciBsaWNlbnNlZCBhbmQgdW5saWNlbnNlZCBkZXZpY2VzLCBpdCBpcyBzb21ldGltZXMKK25lY2Vzc2FyeSB0byBkeW5hbWljYWxseSBkZXRlY3QsIGF2b2lkLCBhbmQgbGltaXQgdXNhZ2UgdG8gYXZvaWQKK2ludGVyZmVyZW5jZSB3aXRoIHRoZXNlIGRldmljZXMuIEluIG1hbnkgaW5zdGFuY2VzIEludGVsIGlzIHJlcXVpcmVkIHRvCitwcm92aWRlIHRlc3QgZGF0YSB0byBwcm92ZSByZWdpb25hbCBhbmQgbG9jYWwgY29tcGxpYW5jZSB0byByZWdpb25hbCBhbmQKK2dvdmVybm1lbnRhbCByZWd1bGF0aW9ucyBiZWZvcmUgY2VydGlmaWNhdGlvbiBvciBhcHByb3ZhbCB0byB1c2UgdGhlCitwcm9kdWN0IGlzIGdyYW50ZWQuIEludGVsJ3Mgd2lyZWxlc3MgTEFOJ3MgRUVQUk9NLCBmaXJtd2FyZSwgYW5kCitzb2Z0d2FyZSBkcml2ZXIgYXJlIGRlc2lnbmVkIHRvIGNhcmVmdWxseSBjb250cm9sIHBhcmFtZXRlcnMgdGhhdCBhZmZlY3QKK3JhZGlvIG9wZXJhdGlvbiBhbmQgdG8gZW5zdXJlIGVsZWN0cm9tYWduZXRpYyBjb21wbGlhbmNlIChFTUMpLiBUaGVzZQorcGFyYW1ldGVycyBpbmNsdWRlLCB3aXRob3V0IGxpbWl0YXRpb24sIFJGIHBvd2VyLCBzcGVjdHJ1bSB1c2FnZSwKK2NoYW5uZWwgc2Nhbm5pbmcsIGFuZCBodW1hbiBleHBvc3VyZS4gCisKK0ZvciB0aGVzZSByZWFzb25zIEludGVsIGNhbm5vdCBwZXJtaXQgYW55IG1hbmlwdWxhdGlvbiBieSB0aGlyZCBwYXJ0aWVzCitvZiB0aGUgc29mdHdhcmUgcHJvdmlkZWQgaW4gYmluYXJ5IGZvcm1hdCB3aXRoIHRoZSB3aXJlbGVzcyBXTEFOCithZGFwdGVycyAoZS5nLiwgdGhlIEVFUFJPTSBhbmQgZmlybXdhcmUpLiBGdXJ0aGVybW9yZSwgaWYgeW91IHVzZSBhbnkKK3BhdGNoZXMsIHV0aWxpdGllcywgb3IgY29kZSB3aXRoIHRoZSBJbnRlbCB3aXJlbGVzcyBMQU4gYWRhcHRlcnMgdGhhdAoraGF2ZSBiZWVuIG1hbmlwdWxhdGVkIGJ5IGFuIHVuYXV0aG9yaXplZCBwYXJ0eSAoaS5lLiwgcGF0Y2hlcywKK3V0aWxpdGllcywgb3IgY29kZSAoaW5jbHVkaW5nIG9wZW4gc291cmNlIGNvZGUgbW9kaWZpY2F0aW9ucykgd2hpY2ggaGF2ZQorbm90IGJlZW4gdmFsaWRhdGVkIGJ5IEludGVsKSwgKGkpIHlvdSB3aWxsIGJlIHNvbGVseSByZXNwb25zaWJsZSBmb3IKK2Vuc3VyaW5nIHRoZSByZWd1bGF0b3J5IGNvbXBsaWFuY2Ugb2YgdGhlIHByb2R1Y3RzLCAoaWkpIEludGVsIHdpbGwgYmVhcgorbm8gbGlhYmlsaXR5LCB1bmRlciBhbnkgdGhlb3J5IG9mIGxpYWJpbGl0eSBmb3IgYW55IGlzc3VlcyBhc3NvY2lhdGVkCit3aXRoIHRoZSBtb2RpZmllZCBwcm9kdWN0cywgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiwgY2xhaW1zIHVuZGVyCit0aGUgd2FycmFudHkgYW5kL29yIGlzc3VlcyBhcmlzaW5nIGZyb20gcmVndWxhdG9yeSBub24tY29tcGxpYW5jZSwgYW5kCisoaWlpKSBJbnRlbCB3aWxsIG5vdCBwcm92aWRlIG9yIGJlIHJlcXVpcmVkIHRvIGFzc2lzdCBpbiBwcm92aWRpbmcKK3N1cHBvcnQgdG8gYW55IHRoaXJkIHBhcnRpZXMgZm9yIHN1Y2ggbW9kaWZpZWQgcHJvZHVjdHMuICAKKworTm90ZTogTWFueSByZWd1bGF0b3J5IGFnZW5jaWVzIGNvbnNpZGVyIFdpcmVsZXNzIExBTiBhZGFwdGVycyB0byBiZQorbW9kdWxlcywgYW5kIGFjY29yZGluZ2x5LCBjb25kaXRpb24gc3lzdGVtLWxldmVsIHJlZ3VsYXRvcnkgYXBwcm92YWwKK3Vwb24gcmVjZWlwdCBhbmQgcmV2aWV3IG9mIHRlc3QgZGF0YSBkb2N1bWVudGluZyB0aGF0IHRoZSBhbnRlbm5hcyBhbmQKK3N5c3RlbSBjb25maWd1cmF0aW9uIGRvIG5vdCBjYXVzZSB0aGUgRU1DIGFuZCByYWRpbyBvcGVyYXRpb24gdG8gYmUKK25vbi1jb21wbGlhbnQuCisKK1RoZSBkcml2ZXJzIGF2YWlsYWJsZSBmb3IgZG93bmxvYWQgZnJvbSBTb3VyY2VGb3JnZSBhcmUgcHJvdmlkZWQgYXMgYSAKK3BhcnQgb2YgYSBkZXZlbG9wbWVudCBwcm9qZWN0LiAgQ29uZm9ybWFuY2UgdG8gbG9jYWwgcmVndWxhdG9yeSAKK3JlcXVpcmVtZW50cyBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGluZGl2aWR1YWwgZGV2ZWxvcGVyLiAgQXMgCitzdWNoLCBpZiB5b3UgYXJlIGludGVyZXN0ZWQgaW4gZGVwbG95aW5nIG9yIHNoaXBwaW5nIGEgZHJpdmVyIGFzIHBhcnQgb2YgCitzb2x1dGlvbiBpbnRlbmRlZCB0byBiZSB1c2VkIGZvciBwdXJwb3NlcyBvdGhlciB0aGFuIGRldmVsb3BtZW50LCBwbGVhc2UgCitvYnRhaW4gYSB0ZXN0ZWQgZHJpdmVyIGZyb20gSW50ZWwgQ3VzdG9tZXIgU3VwcG9ydCBhdDoKKworaHR0cDovL3N1cHBvcnQuaW50ZWwuY29tL3N1cHBvcnQvbm90ZWJvb2svc2IvQ1MtMDA2NDA4Lmh0bQogCiAKIDEuICAgSW50cm9kdWN0aW9uCkBAIC00NSw3ICsxMDEsNyBAQAogCiAxLjEuIE92ZXJ2aWV3IG9mIEZlYXR1cmVzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotVGhlIGN1cnJlbnQgcmVsZWFzZSAoMS4wLjApIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgZmVhdHVyZXM6CitUaGUgY3VycmVudCByZWxlYXNlICgxLjAuOCkgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBmZWF0dXJlczoKIAogKyBCU1MgbW9kZSAoSW5mcmFzdHJ1Y3R1cmUsIE1hbmFnZWQpCiArIElCU1MgbW9kZSAoQWQtSG9jKQpAQCAtNTYsMTcgKzExMiwyNyBAQAogKyBGdWxsIEEgcmF0ZSBzdXBwb3J0ICgyOTE1IG9ubHkpCiArIFRyYW5zbWl0IHBvd2VyIGNvbnRyb2wKICsgUyBzdGF0ZSBzdXBwb3J0IChBQ1BJIHN1c3BlbmQvcmVzdW1lKQorCitUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBjdXJyZW50bHkgZW5hYmxlZCwgYnV0IG5vdCBvZmZpY2lhbGx5CitzdXBwb3J0ZWQ6CisKKysgV1BBCiArIGxvbmcvc2hvcnQgcHJlYW1ibGUgc3VwcG9ydAorKyBNb25pdG9yIG1vZGUgKGFrYSBSRk1vbikKKworVGhlIGRpc3RpbmN0aW9uIGJldHdlZW4gb2ZmaWNpYWxseSBzdXBwb3J0ZWQgYW5kIGVuYWJsZWQgaXMgYSByZWZsZWN0aW9uIAorb24gdGhlIGFtb3VudCBvZiB2YWxpZGF0aW9uIGFuZCBpbnRlcm9wZXJhYmlsaXR5IHRlc3RpbmcgdGhhdCBoYXMgYmVlbgorcGVyZm9ybWVkIG9uIGEgZ2l2ZW4gZmVhdHVyZS4gCiAKIAogCiAxLjIuIENvbW1hbmQgTGluZSBQYXJhbWV0ZXJzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1MaWtlIG1hbnkgbW9kdWxlcyB1c2VkIGluIHRoZSBMaW51eCBrZXJuZWwsIHRoZSBJbnRlbChSKSBQUk8vV2lyZWxlc3MgCi0yOTE1QUJHIERyaXZlciBmb3IgTGludXggYWxsb3dzIGNlcnRhaW4gY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIGJlIAotcHJvdmlkZWQgYXMgbW9kdWxlIHBhcmFtZXRlcnMuICBUaGUgbW9zdCBjb21tb24gd2F5IHRvIHNwZWNpZnkgYSBtb2R1bGUgCi1wYXJhbWV0ZXIgaXMgdmlhIHRoZSBjb21tYW5kIGxpbmUuICAKK0xpa2UgbWFueSBtb2R1bGVzIHVzZWQgaW4gdGhlIExpbnV4IGtlcm5lbCwgdGhlIEludGVsKFIpIFBSTy9XaXJlbGVzcworMjkxNUFCRyBEcml2ZXIgZm9yIExpbnV4IGFsbG93cyBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gYmUgcHJvdmlkZWQgCithcyBtb2R1bGUgcGFyYW1ldGVycy4gIFRoZSBtb3N0IGNvbW1vbiB3YXkgdG8gc3BlY2lmeSBhIG1vZHVsZSBwYXJhbWV0ZXIgCitpcyB2aWEgdGhlIGNvbW1hbmQgbGluZS4gIAogCiBUaGUgZ2VuZXJhbCBmb3JtIGlzOgogCkBAIC05NiwxNCArMTYyLDE4IEBACiAKICAgZGVidWcKIAlJZiB1c2luZyBhIGRlYnVnIGJ1aWxkLCB0aGlzIGlzIHVzZWQgdG8gY29udHJvbCB0aGUgYW1vdW50IG9mIGRlYnVnCi0JaW5mbyBpcyBsb2dnZWQuICBTZWUgdGhlICdkdmFsJyBhbmQgJ2xvYWQnIHNjcmlwdCBmb3IgbW9yZSBpbmZvIG9uCi0JaG93IHRvIHVzZSB0aGlzICh0aGUgZHZhbCBhbmQgbG9hZCBzY3JpcHRzIGFyZSBwcm92aWRlZCBhcyBwYXJ0IAorCWluZm8gaXMgbG9nZ2VkLiAgU2VlIHRoZSAnZHZhbHMnIGFuZCAnbG9hZCcgc2NyaXB0IGZvciBtb3JlIGluZm8gb24KKwlob3cgdG8gdXNlIHRoaXMgKHRoZSBkdmFscyBhbmQgbG9hZCBzY3JpcHRzIGFyZSBwcm92aWRlZCBhcyBwYXJ0IAogCW9mIHRoZSBpcHcyMjAwIGRldmVsb3BtZW50IHNuYXBzaG90IHJlbGVhc2VzIGF2YWlsYWJsZSBmcm9tIHRoZSAKIAlTb3VyY2VGb3JnZSBwcm9qZWN0IGF0IGh0dHA6Ly9pcHcyMjAwLnNmLm5ldCkKKyAgCisgIGxlZAorCUNhbiBiZSB1c2VkIHRvIHR1cm4gb24gZXhwZXJpbWVudGFsIExFRCBjb2RlLgorCTAgPSBPZmYsIDEgPSBPbi4gIERlZmF1bHQgaXMgMC4KIAogICBtb2RlCiAJQ2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBkZWZhdWx0IG1vZGUgb2YgdGhlIGFkYXB0ZXIuICAKLQkwID0gTWFuYWdlZCwgMSA9IEFkLUhvYworCTAgPSBNYW5hZ2VkLCAxID0gQWQtSG9jLCAyID0gTW9uaXRvcgogCiAKIDEuMy4gV2lyZWxlc3MgRXh0ZW5zaW9uIFByaXZhdGUgTWV0aG9kcwpAQCAtMTY0LDggKzIzNCw4IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBUaGUgTGludXgga2VybmVsIHByb3ZpZGVzIGEgcHNldWRvIGZpbGUgc3lzdGVtIHRoYXQgY2FuIGJlIHVzZWQgdG8gCi1hY2Nlc3MgdmFyaW91cyBjb21wb25lbnRzIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtLiAgVGhlIEludGVsKFIpIAotUFJPL1dpcmVsZXNzIDI5MTVBQkcgRHJpdmVyIGZvciBMaW51eCBleHBvc2VzIHNldmVyYWwgY29uZmlndXJhdGlvbiAKK2FjY2VzcyB2YXJpb3VzIGNvbXBvbmVudHMgb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0uICBUaGUgSW50ZWwoUikKK1BSTy9XaXJlbGVzcyAyOTE1QUJHIERyaXZlciBmb3IgTGludXggZXhwb3NlcyBzZXZlcmFsIGNvbmZpZ3VyYXRpb24KIHBhcmFtZXRlcnMgdGhyb3VnaCB0aGlzIG1lY2hhbmlzbS4KIAogQW4gZW50cnkgaW4gdGhlIHN5c2ZzIGNhbiBzdXBwb3J0IHJlYWRpbmcgYW5kL29yIHdyaXRpbmcuICBZb3UgY2FuIApAQCAtMTg0LDEzICsyNTQsMTMgQEAKIAogV2hlcmUgJFZBTFVFIHdvdWxkIGJlIGEgbnVtYmVyIGluIHRoZSBjYXNlIG9mIHRoaXMgc3lzZnMgZW50cnkuICBUaGUgCiBpbnB1dCB0byBzeXNmcyBmaWxlcyBkb2VzIG5vdCBoYXZlIHRvIGJlIGEgbnVtYmVyLiAgRm9yIGV4YW1wbGUsIHRoZSAKLWZpcm13YXJlIGxvYWRlciB1c2VkIGJ5IGhvdHBsdWcgdXRpbGl6ZXMgc3lzZnMgZW50cmllcyBmb3IgdHJhbnNmZXJyaW5nIAorZmlybXdhcmUgbG9hZGVyIHVzZWQgYnkgaG90cGx1ZyB1dGlsaXplcyBzeXNmcyBlbnRyaWVzIGZvciB0cmFuc2ZlcmluZyAKIHRoZSBmaXJtd2FyZSBpbWFnZSBmcm9tIHVzZXIgc3BhY2UgaW50byB0aGUgZHJpdmVyLgogCiBUaGUgSW50ZWwoUikgUFJPL1dpcmVsZXNzIDI5MTVBQkcgRHJpdmVyIGZvciBMaW51eCBleHBvc2VzIHN5c2ZzIGVudHJpZXMgCi1hdCB0d28gbGV2ZWxzIC0tIGRyaXZlciBsZXZlbCwgd2hpY2ggYXBwbHkgdG8gYWxsIGluc3RhbmNlcyBvZiB0aGUgCi1kcml2ZXIgKGluIHRoZSBldmVudCB0aGF0IHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIGRldmljZSBpbnN0YWxsZWQpIGFuZCAKLWRldmljZSBsZXZlbCwgd2hpY2ggYXBwbGllcyBvbmx5IHRvIHRoZSBzaW5nbGUgc3BlY2lmaWMgaW5zdGFuY2UuCithdCB0d28gbGV2ZWxzIC0tIGRyaXZlciBsZXZlbCwgd2hpY2ggYXBwbHkgdG8gYWxsIGluc3RhbmNlcyBvZiB0aGUgZHJpdmVyIAorKGluIHRoZSBldmVudCB0aGF0IHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIGRldmljZSBpbnN0YWxsZWQpIGFuZCBkZXZpY2UgCitsZXZlbCwgd2hpY2ggYXBwbGllcyBvbmx5IHRvIHRoZSBzaW5nbGUgc3BlY2lmaWMgaW5zdGFuY2UuCiAKIAogMS40LjEgRHJpdmVyIExldmVsIFN5c2ZzIEhlbHBlciBGaWxlcwpAQCAtMjAzLDYgKzI3Myw3IEBACiAJVGhpcyBjb250cm9scyB0aGUgc2FtZSBnbG9iYWwgYXMgdGhlICdkZWJ1ZycgbW9kdWxlIHBhcmFtZXRlcgogCiAKKwogMS40LjIgRGV2aWNlIExldmVsIFN5c2ZzIEhlbHBlciBGaWxlcwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMjEzLDcgKzI4NCw3IEBACiBGb3IgZXhhbXBsZToKIAkvc3lzL2J1cy9wY2kvZHJpdmVycy9pcHcyMjAwLzAwMDA6MDI6MDEuMAogCi1Gb3IgdGhlIGRldmljZSBsZXZlbCBmaWxlcywgc2VlIC9zeXMvYnVzL3BjaS9bZHJpdmVycy9pcHcyMjAwOgorRm9yIHRoZSBkZXZpY2UgbGV2ZWwgZmlsZXMsIHNlZSAvc3lzL2J1cy9wY2kvZHJpdmVycy9pcHcyMjAwOgogCiAgIHJmX2tpbGwKIAlyZWFkIC0gCkBAIC0yMzEsOCArMzAyLDU5IEBACiAgIHVjb2RlIAogCXJlYWQtb25seSBhY2Nlc3MgdG8gdGhlIHVjb2RlIHZlcnNpb24gbnVtYmVyCiAKKyAgbGVkCisJcmVhZCAtCisJMCA9IExFRCBjb2RlIGRpc2FibGVkCisJMSA9IExFRCBjb2RlIGVuYWJsZWQKKwl3cml0ZSAtCisJMCA9IERpc2FibGUgTEVEIGNvZGUKKwkxID0gRW5hYmxlIExFRCBjb2RlCiAKLTIuICAgQWJvdXQgdGhlIFZlcnNpb24gTnVtYmVycworCU5PVEU6IFRoZSBMRUQgY29kZSBoYXMgYmVlbiByZXBvcnRlZCB0byBoYW5nIHNvbWUgc3lzdGVtcyB3aGVuIAorCXJ1bm5pbmcgaWZjb25maWcgYW5kIGlzIHRoZXJlZm9yZSBkaXNhYmxlZCBieSBkZWZhdWx0LgorCisKKzIuICAgQWQtSG9jIE5ldHdvcmtpbmcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doZW4gdXNpbmcgYSBkZXZpY2UgaW4gYW4gQWQtSG9jIG5ldHdvcmssIGl0IGlzIHVzZWZ1bCB0byB1bmRlcnN0YW5kIHRoZSAKK3NlcXVlbmNlIGFuZCByZXF1aXJlbWVudHMgZm9yIHRoZSBkcml2ZXIgdG8gYmUgYWJsZSB0byBjcmVhdGUsIGpvaW4sIG9yIAorbWVyZ2UgbmV0d29ya3MuCisKK1RoZSBmb2xsb3dpbmcgYXR0ZW1wdHMgdG8gcHJvdmlkZSBlbm91Z2ggaW5mb3JtYXRpb24gc28gdGhhdCB5b3UgY2FuIAoraGF2ZSBhIGNvbnNpc3RlbnQgZXhwZXJpZW5jZSB3aGlsZSB1c2luZyB0aGUgZHJpdmVyIGFzIGEgbWVtYmVyIG9mIGFuIAorQWQtSG9jIG5ldHdvcmsuCisKKzIuMS4gSm9pbmluZyBhbiBBZC1Ib2MgTmV0d29yaworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGVhc2llc3Qgd2F5IHRvIGdldCBvbnRvIGFuIEFkLUhvYyBuZXR3b3JrIGlzIHRvIGpvaW4gb25lIHRoYXQgCithbHJlYWR5IGV4aXN0cy4KKworMi4yLiBDcmVhdGluZyBhbiBBZC1Ib2MgTmV0d29yaworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQW4gQWQtSG9jIG5ldHdvcmtzIGlzIGNyZWF0ZWQgdXNpbmcgdGhlIHN5bnRheCBvZiB0aGUgV2lyZWxlc3MgdG9vbC4KKworRm9yIEV4YW1wbGU6Citpd2NvbmZpZyBldGgxIG1vZGUgYWQtaG9jIGVzc2lkIHRlc3RpbmcgY2hhbm5lbCAyCisKKzIuMy4gTWVyZ2luZyBBZC1Ib2MgTmV0d29ya3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworMy4gIEludGVyYWN0aW9uIHdpdGggV2lyZWxlc3MgVG9vbHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKzMuMSBpd2NvbmZpZyBtb2RlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGVuIGNvbmZpZ3VyaW5nIHRoZSBtb2RlIG9mIHRoZSBhZGFwdGVyLCBhbGwgcnVuLXRpbWUgY29uZmlndXJlZCBwYXJhbWV0ZXJzCithcmUgcmVzZXQgdG8gdGhlIHZhbHVlIHVzZWQgd2hlbiB0aGUgbW9kdWxlIHdhcyBsb2FkZWQuICBUaGlzIGluY2x1ZGVzCitjaGFubmVscywgcmF0ZXMsIEVTU0lELCBldGMuCisKKworNC4gICBBYm91dCB0aGUgVmVyc2lvbiBOdW1iZXJzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBEdWUgdG8gdGhlIG5hdHVyZSBvZiBvcGVuIHNvdXJjZSBkZXZlbG9wbWVudCBwcm9qZWN0cywgdGhlcmUgYXJlIApAQCAtMjU5LDEyICszODEsMjMgQEAKIFRoZSBtYWpvciB2ZXJzaW9uIG51bWJlciB3aWxsIGJlIGluY3JlbWVudGVkIHdoZW4gc2lnbmlmaWNhbnQgY2hhbmdlcwogYXJlIG1hZGUgdG8gdGhlIGRyaXZlci4gIEN1cnJlbnRseSwgdGhlcmUgYXJlIG5vIG1ham9yIGNoYW5nZXMgcGxhbm5lZC4KIAorNS4gIEZpcm13YXJlIGluc3RhbGxhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0zLiAgU3VwcG9ydAorVGhlIGRyaXZlciByZXF1aXJlcyBhIGZpcm13YXJlIGltYWdlLCBkb3dubG9hZCBpdCBhbmQgZXh0cmFjdCB0aGUKK2ZpbGVzIHVuZGVyIC9saWIvZmlybXdhcmUgKG9yIHdoZXJldmVyIHlvdXIgaG90cGx1ZydzIGZpcm13YXJlLmFnZW50Cit3aWxsIGxvb2sgZm9yIGZpcm13YXJlIGZpbGVzKQorCitUaGUgZmlybXdhcmUgY2FuIGJlIGRvd25sb2FkZWQgZnJvbSB0aGUgZm9sbG93aW5nIFVSTDoKKworICAgIGh0dHA6Ly9pcHcyMjAwLnNmLm5ldC8KKworCis2LiAgU3VwcG9ydAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotRm9yIGluc3RhbGxhdGlvbiBzdXBwb3J0IG9mIHRoZSAxLjAuMCB2ZXJzaW9uLCB5b3UgY2FuIGNvbnRhY3QgCi1odHRwOi8vc3VwcG9ydG1haWwuaW50ZWwuY29tLCBvciB5b3UgY2FuIHVzZSB0aGUgb3BlbiBzb3VyY2UgcHJvamVjdCAKK0ZvciBkaXJlY3Qgc3VwcG9ydCBvZiB0aGUgMS4wLjAgdmVyc2lvbiwgeW91IGNhbiBjb250YWN0IAoraHR0cDovL3N1cHBvcnRtYWlsLmludGVsLmNvbSwgb3IgeW91IGNhbiB1c2UgdGhlIG9wZW4gc291cmNlIHByb2plY3QKIHN1cHBvcnQuCiAKIEZvciBnZW5lcmFsIGluZm9ybWF0aW9uIGFuZCBzdXBwb3J0LCBnbyB0bzoKQEAgLTI3Miw3ICs0MDUsNyBAQAogICAgIGh0dHA6Ly9pcHcyMjAwLnNmLm5ldC8KIAogCi00LiAgTGljZW5zZQorNy4gIExpY2Vuc2UKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKICAgQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA1IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpAQCAtMjk3LDQgKzQzMCwzIEBACiAgIEphbWVzIFAuIEtldHJlbm9zIDxpcHcyMTAwLWFkbWluQGxpbnV4LmludGVsLmNvbT4KICAgSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NwogCi0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kY2NwLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kY2NwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDVkYWFiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RjY3AudHh0CkBAIC0wLDAgKzEsNTYgQEAKK0RDQ1AgcHJvdG9jb2wKKz09PT09PT09PT09PQorCitMYXN0IHVwZGF0ZWQ6IDEwIE5vdmVtYmVyIDIwMDUKKworQ29udGVudHMKKz09PT09PT09CisKKy0gSW50cm9kdWN0aW9uCistIE1pc3NpbmcgZmVhdHVyZXMKKy0gU29ja2V0IG9wdGlvbnMKKy0gTm90ZXMKKworSW50cm9kdWN0aW9uCis9PT09PT09PT09PT0KKworRGF0YWdyYW0gQ29uZ2VzdGlvbiBDb250cm9sIFByb3RvY29sIChEQ0NQKSBpcyBhbiB1bnJlbGlhYmxlLCBjb25uZWN0aW9uCitiYXNlZCBwcm90b2NvbCBkZXNpZ25lZCB0byBzb2x2ZSBpc3N1ZXMgcHJlc2VudCBpbiBVRFAgYW5kIFRDUCBwYXJ0aWN1bGFybHkKK2ZvciByZWFsIHRpbWUgYW5kIG11bHRpbWVkaWEgdHJhZmZpYy4KKworSXQgaGFzIGEgYmFzZSBwcm90b2NvbCBhbmQgcGx1Z2dhYmxlIGNvbmdlc3Rpb24gY29udHJvbCBJRHMgKENDSURzKS4KKworSXQgaXMgYXQgZHJhZnQgUkZDIHN0YXR1cyBhbmQgdGhlIGhvbWVwYWdlIGZvciBEQ0NQIGFzIGEgcHJvdG9jb2wgaXMgYXQ6CisJaHR0cDovL3d3dy5pY2lyLm9yZy9rb2hsZXIvZGNwLworCitNaXNzaW5nIGZlYXR1cmVzCis9PT09PT09PT09PT09PT09CisKK1RoZSBEQ0NQIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IGN1cnJlbnRseSBoYXZlIGFsbCB0aGUgZmVhdHVyZXMgdGhhdCBhcmUgaW4KK3RoZSBkcmFmdCBSRkMuCisKK0luIHBhcnRpY3VsYXIgdGhlIGZvbGxvd2luZyBhcmUgbWlzc2luZzoKKy0gQ0NJRDIgc3VwcG9ydAorLSBmZWF0dXJlIG5lZ290aWF0aW9uCisKK1doZW4gdGVzdGluZyBhZ2FpbnN0IG90aGVyIGltcGxlbWVudGF0aW9ucyBpdCBhcHBlYXJzIHRoYXQgZWxhcHNlZCB0aW1lCitvcHRpb25zIGFyZSBub3QgY29kZWQgY29tcGxpYW50IHRvIHRoZSBzcGVjaWZpY2F0aW9uLgorCitTb2NrZXQgb3B0aW9ucworPT09PT09PT09PT09PT0KKworRENDUF9TT0NLT1BUX1BBQ0tFVF9TSVpFIGlzIHVzZWQgZm9yIENDSUQzIHRvIHNldCBkZWZhdWx0IHBhY2tldCBzaXplIGZvcgorY2FsY3VsYXRpb25zLgorCitEQ0NQX1NPQ0tPUFRfU0VSVklDRSBzZXRzIHRoZSBzZXJ2aWNlLiBUaGlzIGlzIGNvbXB1bHNvcnkgYXMgcGVyIHRoZQorc3BlY2lmaWNhdGlvbi4gSWYgeW91IGRvbid0IHNldCBpdCB5b3Ugd2lsbCBnZXQgRVBST1RPLgorCitOb3RlcworPT09PT0KKworU0VMaW51eCBkb2VzIG5vdCB5ZXQgaGF2ZSBzdXBwb3J0IGZvciBEQ0NQLiBZb3Ugd2lsbCBuZWVkIHRvIHR1cm4gaXQgb2ZmIG9yCitlbHNlIHlvdSB3aWxsIGdldCBFQUNDRVMuCisKK0RDQ1AgZG9lcyBub3QgdHJhdmVsIHRocm91Z2ggTkFUIHN1Y2Nlc3NmdWxseSBhdCBwcmVzZW50LiBUaGlzIGlzIGJlY2F1c2UKK3RoZSBjaGVja3N1bSBjb3ZlcnMgdGhlIHBzdWVkby1oZWFkZXIgYXMgcGVyIFRDUCBhbmQgVURQLiBJdCBzaG91bGQgYmUKK3JlbGF0aXZlbHkgdHJpdmlhbCB0byBhZGQgTGludXggTkFUIHN1cHBvcnQgZm9yIERDQ1AuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0CmluZGV4IDY1ODk1YmIuLmViYzA5YTEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0CkBAIC03OCw2ICs3OCwxMSBAQAogCiBUQ1AgdmFyaWFibGVzOiAKIAordGNwX2FiYyAtIElOVEVHRVIKKwlDb250cm9scyBBcHByb3ByaWF0ZSBCeXRlIENvdW50IGRlZmluZWQgaW4gUkZDMzQ2NS4gSWYgc2V0IHRvCisJMCB0aGVuIGRvZXMgY29uZ2VzdGlvbiBhdm9pZCBvbmNlIHBlciBhY2suIDEgaXMgY29uc2VydmF0aXZlCisJdmFsdWUsIGFuZCAyIGlzIG1vcmUgYWdyZXNzaXZlLgorCiB0Y3Bfc3luX3JldHJpZXMgLSBJTlRFR0VSCiAJTnVtYmVyIG9mIHRpbWVzIGluaXRpYWwgU1lOcyBmb3IgYW4gYWN0aXZlIFRDUCBjb25uZWN0aW9uIGF0dGVtcHQKIAl3aWxsIGJlIHJldHJhbnNtaXR0ZWQuIFNob3VsZCBub3QgYmUgaGlnaGVyIHRoYW4gMjU1LiBEZWZhdWx0IHZhbHVlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3MzOTAvRGVidWdnaW5nMzkwLnR4dCBiL0RvY3VtZW50YXRpb24vczM5MC9EZWJ1Z2dpbmczOTAudHh0CmluZGV4IGFkYmZlNjIuLjg0NGMwM2YgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vczM5MC9EZWJ1Z2dpbmczOTAudHh0CisrKyBiL0RvY3VtZW50YXRpb24vczM5MC9EZWJ1Z2dpbmczOTAudHh0CkBAIC04NzEsNyArODcxLDcgQEAKIAogCiAKLWV4dGVybiBpbmxpbmUgdm9pZCBzcGluX2xvY2soc3BpbmxvY2tfdCAqbHApCitzdGF0aWMgaW5saW5lIHZvaWQgc3Bpbl9sb2NrKHNwaW5sb2NrX3QgKmxwKQogewogICAgICAgYTA6ICAgICAgIDE4IDM0ICAgICAgICAgICBsciAgICAgICVyMywlcjQKICAgICAgIGEyOiAgICAgICBhNyAzYSAwMyBiYyAgICAgYWhpICAgICAlcjMsOTU2CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NjaGVkLWFyY2gudHh0IGIvRG9jdW1lbnRhdGlvbi9zY2hlZC1hcmNoLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDE2MTVhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zY2hlZC1hcmNoLnR4dApAQCAtMCwwICsxLDg5IEBACisJQ1BVIFNjaGVkdWxlciBpbXBsZW1lbnRhdGlvbiBoaW50cyBmb3IgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGNvZGUKKworCU5pY2sgUGlnZ2luLCAyMDA1CisKK0NvbnRleHQgc3dpdGNoCis9PT09PT09PT09PT09PQorMS4gUnVucXVldWUgbG9ja2luZworQnkgZGVmYXVsdCwgdGhlIHN3aXRjaF90byBhcmNoIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIHRoZSBydW5xdWV1ZQorbG9ja2VkLiBUaGlzIGlzIHVzdWFsbHkgbm90IGEgcHJvYmxlbSB1bmxlc3Mgc3dpdGNoX3RvIG1heSBuZWVkIHRvCit0YWtlIHRoZSBydW5xdWV1ZSBsb2NrLiBUaGlzIGlzIHVzdWFsbHkgZHVlIHRvIGEgd2FrZSB1cCBvcGVyYXRpb24gaW4KK3RoZSBjb250ZXh0IHN3aXRjaC4gU2VlIGluY2x1ZGUvYXNtLWlhNjQvc3lzdGVtLmggZm9yIGFuIGV4YW1wbGUuCisKK1RvIHJlcXVlc3QgdGhlIHNjaGVkdWxlciBjYWxsIHN3aXRjaF90byB3aXRoIHRoZSBydW5xdWV1ZSB1bmxvY2tlZCwKK3lvdSBtdXN0IGAjZGVmaW5lIF9fQVJDSF9XQU5UX1VOTE9DS0VEX0NUWFNXYCBpbiBhIGhlYWRlciBmaWxlCisodHlwaWNhbGx5IHRoZSBvbmUgd2hlcmUgc3dpdGNoX3RvIGlzIGRlZmluZWQpLgorCitVbmxvY2tlZCBjb250ZXh0IHN3aXRjaGVzIGludHJvZHVjZSBvbmx5IGEgdmVyeSBtaW5vciBwZXJmb3JtYW5jZQorcGVuYWx0eSB0byB0aGUgY29yZSBzY2hlZHVsZXIgaW1wbGVtZW50YXRpb24gaW4gdGhlIENPTkZJR19TTVAgY2FzZS4KKworMi4gSW50ZXJydXB0IHN0YXR1cworQnkgZGVmYXVsdCwgdGhlIHN3aXRjaF90byBhcmNoIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIGludGVycnVwdHMKK2Rpc2FibGVkLiBJbnRlcnJ1cHRzIG1heSBiZSBlbmFibGVkIG92ZXIgdGhlIGNhbGwgaWYgaXQgaXMgbGlrZWx5IHRvCitpbnRyb2R1Y2UgYSBzaWduaWZpY2FudCBpbnRlcnJ1cHQgbGF0ZW5jeSBieSBhZGRpbmcgdGhlIGxpbmUKK2AjZGVmaW5lIF9fQVJDSF9XQU5UX0lOVEVSUlVQVFNfT05fQ1RYU1dgIGluIHRoZSBzYW1lIHBsYWNlIGFzIGZvcgordW5sb2NrZWQgY29udGV4dCBzd2l0Y2hlcy4gVGhpcyBkZWZpbmUgYWxzbyBpbXBsaWVzCitgX19BUkNIX1dBTlRfVU5MT0NLRURfQ1RYU1dgLiBTZWUgaW5jbHVkZS9hc20tYXJtL3N5c3RlbS5oIGZvciBhbgorZXhhbXBsZS4KKworCitDUFUgaWRsZQorPT09PT09PT0KK1lvdXIgY3B1X2lkbGUgcm91dGluZXMgbmVlZCB0byBvYmV5IHRoZSBmb2xsb3dpbmcgcnVsZXM6CisKKzEuIFByZWVtcHQgc2hvdWxkIG5vdyBkaXNhYmxlZCBvdmVyIGlkbGUgcm91dGluZXMuIFNob3VsZCBvbmx5CisgICBiZSBlbmFibGVkIHRvIGNhbGwgc2NoZWR1bGUoKSB0aGVuIGRpc2FibGVkIGFnYWluLgorCisyLiBuZWVkX3Jlc2NoZWQvVElGX05FRURfUkVTQ0hFRCBpcyBvbmx5IGV2ZXIgc2V0LCBhbmQgd2lsbCBuZXZlcgorICAgYmUgY2xlYXJlZCB1bnRpbCB0aGUgcnVubmluZyB0YXNrIGhhcyBjYWxsZWQgc2NoZWR1bGUoKS4gSWRsZQorICAgdGhyZWFkcyBuZWVkIG9ubHkgZXZlciBxdWVyeSBuZWVkX3Jlc2NoZWQsIGFuZCBtYXkgbmV2ZXIgc2V0IG9yCisgICBjbGVhciBpdC4KKworMy4gV2hlbiBjcHVfaWRsZSBmaW5kcyAobmVlZF9yZXNjaGVkKCkgPT0gJ3RydWUnKSwgaXQgc2hvdWxkIGNhbGwKKyAgIHNjaGVkdWxlKCkuIEl0IHNob3VsZCBub3QgY2FsbCBzY2hlZHVsZSgpIG90aGVyd2lzZS4KKworNC4gVGhlIG9ubHkgdGltZSBpbnRlcnJ1cHRzIG5lZWQgdG8gYmUgZGlzYWJsZWQgd2hlbiBjaGVja2luZworICAgbmVlZF9yZXNjaGVkIGlzIGlmIHdlIGFyZSBhYm91dCB0byBzbGVlcCB0aGUgcHJvY2Vzc29yIHVudGlsCisgICB0aGUgbmV4dCBpbnRlcnJ1cHQgKHRoaXMgZG9lc24ndCBwcm92aWRlIGFueSBwcm90ZWN0aW9uIG9mCisgICBuZWVkX3Jlc2NoZWQsIGl0IHByZXZlbnRzIGxvc2luZyBhbiBpbnRlcnJ1cHQpLgorCisJNGEuIENvbW1vbiBwcm9ibGVtIHdpdGggdGhpcyB0eXBlIG9mIHNsZWVwIGFwcGVhcnMgdG8gYmU6CisJICAgICAgICBsb2NhbF9pcnFfZGlzYWJsZSgpOworCSAgICAgICAgaWYgKCFuZWVkX3Jlc2NoZWQoKSkgeworCSAgICAgICAgICAgICAgICBsb2NhbF9pcnFfZW5hYmxlKCk7CisJICAgICAgICAgICAgICAgICoqKiByZXNjaGVkIGludGVycnVwdCBhcnJpdmVzIGhlcmUgKioqCisJICAgICAgICAgICAgICAgIF9fYXNtX18oInNsZWVwIHVudGlsIG5leHQgaW50ZXJydXB0Iik7CisJICAgICAgICB9CisKKzUuIFRJRl9QT0xMSU5HX05SRkxBRyBjYW4gYmUgc2V0IGJ5IGlkbGUgcm91dGluZXMgdGhhdCBkbyBub3QKKyAgIG5lZWQgYW4gaW50ZXJydXB0IHRvIHdha2UgdGhlbSB1cCB3aGVuIG5lZWRfcmVzY2hlZCBnb2VzIGhpZ2guCisgICBJbiBvdGhlciB3b3JkcywgdGhleSBtdXN0IGJlIHBlcmlvZGljYWxseSBwb2xsaW5nIG5lZWRfcmVzY2hlZCwKKyAgIGFsdGhvdWdoIGl0IG1heSBiZSByZWFzb25hYmxlIHRvIGRvIHNvbWUgYmFja2dyb3VuZCB3b3JrIG9yIGVudGVyCisgICBhIGxvdyBDUFUgcHJpb3JpdHkuCisKKyAgIAk1YS4gSWYgVElGX1BPTExJTkdfTlJGTEFHIGlzIHNldCwgYW5kIHdlIGRvIGRlY2lkZSB0byBlbnRlcgorCSAgICBhbiBpbnRlcnJ1cHQgc2xlZXAsIGl0IG5lZWRzIHRvIGJlIGNsZWFyZWQgdGhlbiBhIG1lbW9yeQorCSAgICBiYXJyaWVyIGlzc3VlZCAoZm9sbG93ZWQgYnkgYSB0ZXN0IG9mIG5lZWRfcmVzY2hlZCB3aXRoCisJICAgIGludGVycnVwdHMgZGlzYWJsZWQsIGFzIGV4cGxhaW5lZCBpbiAzKS4KKworYXJjaC9pMzg2L2tlcm5lbC9wcm9jZXNzLmMgaGFzIGV4YW1wbGVzIG9mIGJvdGggcG9sbGluZyBhbmQKK3NsZWVwaW5nIGlkbGUgZnVuY3Rpb25zLgorCisKK1Bvc3NpYmxlIGFyY2gvIHByb2JsZW1zCis9PT09PT09PT09PT09PT09PT09PT09PQorCitQb3NzaWJsZSBhcmNoIHByb2JsZW1zIEkgZm91bmQgKGFuZCBlaXRoZXIgdHJpZWQgdG8gZml4IG9yIGRpZG4ndCk6CisKK2g4MzAwIC0gSXMgc3VjaCBzbGVlcGluZyByYWN5IHZzIGludGVycnVwdHM/IChTZWUgIzRhKS4KKyAgICAgICAgVGhlIEg4LzMwMCBtYW51YWwgSSBmb3VuZCBpbmRpY2F0ZXMgeWVzLCBob3dldmVyIGRpc2FibGluZyBJUlFzCisgICAgICAgIG92ZXIgdGhlIHNsZWVwIG1lYW4gb25seSBOTUlzIGNhbiB3YWtlIGl0IHVwLCBzbyBjYW4ndCBmaXggZWFzaWx5CisgICAgICAgIHdpdGhvdXQgZG9pbmcgc3BpbiB3YWl0aW5nLgorCitpYTY0IC0gaXMgc2FmZV9oYWx0IGNhbGwgcmFjeSB2cyBpbnRlcnJ1cHRzPyAoZG9lcyBpdCBzbGVlcD8pIChTZWUgIzRhKQorCitzaDY0IC0gSXMgc2xlZXBpbmcgcmFjeSB2cyBpbnRlcnJ1cHRzPyAoU2VlICM0YSkKKworc3BhcmMgLSBJUlFzIG9uIGF0IHRoaXMgcG9pbnQoPyksIGNoYW5nZSBsb2NhbF9pcnFfc2F2ZSB0byBfZGlzYWJsZS4KKyAgICAgIC0gVE9ETzogbmVlZHMgc2Vjb25kYXJ5IENQVXMgdG8gZGlzYWJsZSBwcmVlbXB0IChTZWUgIzEpCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS8wMC1JTkRFWCBiL0RvY3VtZW50YXRpb24vc2NzaS8wMC1JTkRFWAppbmRleCBmZWY5MmViLi5lN2RhOGMzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3Njc2kvMDAtSU5ERVgKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpLzAwLUlOREVYCkBAIC01Miw4ICs1Miw2IEBACiAJLSBpbmZvIG9uIGRyaXZlciBmb3IgSU9tZWdhIHppcCBkcml2ZQogcWxvZ2ljZmFzLnR4dAogCS0gaW5mbyBvbiBkcml2ZXIgZm9yIFFMb2dpYyBGQVN4eHggYmFzZWQgYWRhcHRlcnMKLXFsb2dpY2lzcC50eHQKLQktIGluZm8gb24gZHJpdmVyIGZvciBRTG9naWMgSVNQIDEwMjAgYmFzZWQgYWRhcHRlcnMKIHNjc2ktZ2VuZXJpYy50eHQKIAktIGluZm8gb24gdGhlIHNnIGRyaXZlciBmb3IgZ2VuZXJpYyAobm9uLWRpc2svQ0QvdGFwZSkgU0NTSSBkZXZpY2VzLgogc2NzaS50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9xbG9naWNmYXMudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL3Fsb2dpY2Zhcy50eHQKaW5kZXggMzk4Zjk5MS4uYzIxMWQ4MiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zY3NpL3Fsb2dpY2Zhcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL3Fsb2dpY2Zhcy50eHQKQEAgLTExLDggKzExLDcgQEAKIAkqIElRLVBDSS0xMAogCSogSVEtUENJLUQKIAotaXMgcHJvdmlkZWQgYnkgdGhlIHFsb2dpY2lzcC5jIGRyaXZlci4gIENoZWNrIFJFQURNRS5xbG9naWNpc3AgZm9yCi1kZXRhaWxzLgoraXMgcHJvdmlkZWQgYnkgdGhlIHFsYTEyODAgZHJpdmVyLgogCiBOb3IgZG9lcyBpdCBzdXBwb3J0IHRoZSBQQ0ktQmFzaWMsIHdoaWNoIGlzIHN1cHBvcnRlZCBieSB0aGUKICdhbTUzYzk3NCcgZHJpdmVyLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL3Fsb2dpY2lzcC50eHQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvcWxvZ2ljaXNwLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjkyMGY2YzcuLjAwMDAwMDAKLS0tIGEvRG9jdW1lbnRhdGlvbi9zY3NpL3Fsb2dpY2lzcC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi1Ob3RlcyBmb3IgdGhlIFFMb2dpYyBJU1AxMDIwIFBDSSBTQ1NJIERyaXZlcjoKLQotVGhpcyBkcml2ZXIgd29ya3Mgd2VsbCBpbiBwcmFjdGljZSwgYnV0IGRvZXMgbm90IHN1cHBvcnQgZGlzY29ubmVjdC8KLXJlY29ubmVjdCwgd2hpY2ggbWFrZXMgdXNpbmcgaXQgd2l0aCB0YXBlIGRyaXZlcyBpbXByYWN0aWNhbC4KLQotSXQgc2hvdWxkIHdvcmsgZm9yIG1vc3QgaG9zdCBhZGFwdG9ycyB3aXRoIHRoZSBJU1AxMDIwIGNoaXAuICBUaGUKLVFMb2dpYyBDb3Jwb3JhdGlvbiBwcm9kdWNlcyBzZXZlcmFsIFBDSSBTQ1NJIGFkYXB0ZXJzIHdoaWNoIHNob3VsZAotd29yazoKLQotCSogSVEtUENJCi0JKiBJUS1QQ0ktMTAKLQkqIElRLVBDSS1ECi0KLVRoaXMgZHJpdmVyIG1heSB3b3JrIHdpdGggYm9hcmRzIGNvbnRhaW5pbmcgdGhlIElTUDEwMjBBIG9yIElTUDEwNDBBCi1jaGlwcywgYnV0IHRoYXQgaGFzIG5vdCBiZWVuIHRlc3RlZC4KLQotVGhpcyBkcml2ZXIgd2lsbCBOT1Qgd29yayB3aXRoOgotCi0JKiBJU0Egb3IgVkwgQnVzIFFsb2dpYyBjYXJkcyAodGhleSB1c2UgdGhlICdxbG9naWNmYXMnIGRyaXZlcikKLQkqIFBDSS1iYXNpYyAoaXQgdXNlcyB0aGUgJ2FtNTNjOTc0JyBkcml2ZXIpCi0KLU11Y2ggdGhhbmtzIHRvIFFMb2dpYydzIHRlY2ggc3VwcG9ydCBmb3IgcHJvdmlkaW5nIHRoZSBsYXRlc3QgSVNQMTAyMAotZmlybXdhcmUsIGFuZCBmb3IgdGFraW5nIHRoZSB0aW1lIHRvIHJldmlldyBteSBjb2RlLgotCi1FcmlrIE1vZQotZWhtQGNyaXMuY29tCi0KLVJldmlzZWQ6Ci1NaWNoYWVsIEEuIEdyaWZmaXRoCi1ncmlmQGNzLnVjci5lZHUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9zY3NpX2VoLnR4dCBiL0RvY3VtZW50YXRpb24vc2NzaS9zY3NpX2VoLnR4dAppbmRleCA1MzRhNTA5Li4zMzFhZmQ3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3Njc2kvc2NzaV9laC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL3Njc2lfZWgudHh0CkBAIC04MywxMSArODMsMTEgQEAKICBUaGUgdGltZW91dCBoYW5kbGVyIGlzIHNjc2lfdGltZXNfb3V0KCkuICBXaGVuIGEgdGltZW91dCBvY2N1cnMsIHRoaXMKIGZ1bmN0aW9uCiAKLSAxLiBpbnZva2VzIG9wdGlvbmFsIGhvc3R0LT5laF90aW1lZG91dCgpIGNhbGxiYWNrLiAgUmV0dXJuIHZhbHVlIGNhbgorIDEuIGludm9rZXMgb3B0aW9uYWwgaG9zdHQtPmVoX3RpbWVkX291dCgpIGNhbGxiYWNrLiAgUmV0dXJuIHZhbHVlIGNhbgogICAgIGJlIG9uZSBvZgogCiAgICAgLSBFSF9IQU5ETEVECi0JVGhpcyBpbmRpY2F0ZXMgdGhhdCBlaF90aW1lZG91dCgpIGRlYWx0IHdpdGggdGhlIHRpbWVvdXQuICBUaGUKKwlUaGlzIGluZGljYXRlcyB0aGF0IGVoX3RpbWVkX291dCgpIGRlYWx0IHdpdGggdGhlIHRpbWVvdXQuICBUaGUKIAlzY21kIGlzIHBhc3NlZCB0byBfX3Njc2lfZG9uZSgpIGFuZCB0aHVzIGxpbmtlZCBpbnRvIHBlci1jcHUKIAlzY3NpX2RvbmVfcS4gIE5vcm1hbCBjb21tYW5kIGNvbXBsZXRpb24gZGVzY3JpYmVkIGluIFsxLTItMV0KIAlmb2xsb3dzLgpAQCAtMTA1LDcgKzEwNSw3IEBACiAJY29tbWFuZCB3aWxsIHRpbWUgb3V0IGFnYWluLgogCiAgICAgLSBFSF9OT1RfSEFORExFRAotCVRoaXMgaXMgdGhlIHNhbWUgYXMgd2hlbiBlaF90aW1lZG91dCgpIGNhbGxiYWNrIGRvZXNuJ3QgZXhpc3QuCisJVGhpcyBpcyB0aGUgc2FtZSBhcyB3aGVuIGVoX3RpbWVkX291dCgpIGNhbGxiYWNrIGRvZXNuJ3QgZXhpc3QuCiAJU3RlcCAjMiBpcyB0YWtlbi4KIAogIDIuIHNjc2lfZWhfc2NtZF9hZGQoc2NtZCwgU0NTSV9FSF9DQU5DRUxfQ01EKSBpcyBpbnZva2VkIGZvciB0aGUKQEAgLTE0Miw3ICsxNDIsNyBAQAogIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IG1lYW4gbG93ZXIgbGF5ZXJzIGFyZSBxdWllc2NlbnQuICBJZiBhIExMREQKIGNvbXBsZXRlZCBhIHNjbWQgd2l0aCBlcnJvciBzdGF0dXMsIHRoZSBMTEREIGFuZCBsb3dlciBsYXllcnMgYXJlCiBhc3N1bWVkIHRvIGZvcmdldCBhYm91dCB0aGUgc2NtZCBhdCB0aGF0IHBvaW50LiAgSG93ZXZlciwgaWYgYSBzY21kCi1oYXMgdGltZWQgb3V0LCB1bmxlc3MgaG9zdHQtPmVoX3RpbWVkb3V0KCkgbWFkZSBsb3dlciBsYXllcnMgZm9yZ2V0CitoYXMgdGltZWQgb3V0LCB1bmxlc3MgaG9zdHQtPmVoX3RpbWVkX291dCgpIG1hZGUgbG93ZXIgbGF5ZXJzIGZvcmdldAogYWJvdXQgdGhlIHNjbWQsIHdoaWNoIGN1cnJlbnRseSBubyBMTEREIGRvZXMsIHRoZSBjb21tYW5kIGlzIHN0aWxsCiBhY3RpdmUgYXMgbG9uZyBhcyBsb3dlciBsYXllcnMgYXJlIGNvbmNlcm5lZCBhbmQgY29tcGxldGlvbiBjb3VsZAogb2NjdXIgYXQgYW55IHRpbWUuICBPZiBjb3Vyc2UsIGFsbCBzdWNoIGNvbXBsZXRpb25zIGFyZSBpZ25vcmVkIGFzIHRoZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL3Njc2lfbWlkX2xvd19hcGkudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL3Njc2lfbWlkX2xvd19hcGkudHh0CmluZGV4IDQ0ZGY4OWMuLjY2NTY1ZDQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc2NzaS9zY3NpX21pZF9sb3dfYXBpLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvc2NzaV9taWRfbG93X2FwaS50eHQKQEAgLTM0Niw3ICszNDYsNyBAQAogc3RydWN0IHRhZ3MuIEJvdGggY2FuIGJlIHN0aWxsIGZvdW5kIGluIHRoZSBTQ1NJIHN1YnN5c3RlbSwgYnV0CiB0aGUgdHlwZWRlZnMgaGF2ZSBiZWVuIG1vdmVkIHRvIGEgc2luZ2xlIGZpbGUsIHNjc2lfdHlwZWRlZnMuaCB0bwogbWFrZSB0aGVpciBmdXR1cmUgcmVtb3ZhbCBlYXNpZXIsIGZvciBleGFtcGxlOiAKLSJ0eXBlZGVmIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgU2NzaV9Ib3N0X1RlbXBsYXRlOyIKKyJ0eXBlZGVmIHN0cnVjdCBzY3NpX2NtbmQgU2NzaV9DbW5kOyIKIAogQWxzbywgbW9zdCBDOTkgZW5oYW5jZW1lbnRzIGFyZSBlbmNvdXJhZ2VkIHRvIHRoZSBleHRlbnQgdGhleSBhcmUgc3VwcG9ydGVkCiBieSB0aGUgcmVsZXZhbnQgZ2NjIGNvbXBpbGVycy4gU28gQzk5IHN0eWxlIHN0cnVjdHVyZSBhbmQgYXJyYXkKQEAgLTcxOCw3ICs3MTgsNyBAQAogICoKICAqICAgICAgRGVmaW5lZCBpbjogZHJpdmVycy9zY3NpL3Njc2kuYyAuCiAgKiovCi1pbnQgc2NzaV90cmFja19xdWV1ZV9mdWxsKFNjc2lfRGV2aWNlICpzZGV2LCBpbnQgZGVwdGgpCitpbnQgc2NzaV90cmFja19xdWV1ZV9mdWxsKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IGRlcHRoKQogCiAKIC8qKgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9BUEkuaHRtbCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQVBJLmh0bWwKaW5kZXggNDQxNDA3Yi4uYWZiZTlhZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9BUEkuaHRtbAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0FQSS5odG1sCkBAIC04LDcgKzgsNyBAQAogPC90ZD48dGQ+CiBPYnNvbGV0ZWQgYnkgVjRMMiBBUEkKIDwvdGQ+PC90cj48dHI+PHRkPgotPEEgSFJFRj1odHRwOi8vd3d3LmxpbnV4dHYub3JnL2Rvd25sb2Fkcy92aWRlbzRsaW51eC9BUEkvVjRMMl9BUEkuaHRtbD4KKzxBIEhSRUY9aHR0cDovL3d3dy5saW51eHR2Lm9yZy9kb3dubG9hZHMvdmlkZW80bGludXgvQVBJL1Y0TDJfQVBJPgogVjRMMiBBUEk8L2E+CiA8L3RkPjx0ZD4KIFNob3VsZCBiZSB1c2VkIGZvciBuZXcgcHJvamVjdHMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuYnR0diBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuYnR0dgppbmRleCBlYzc4NWY5Li4yNDA0MDk5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmJ0dHYKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5idHR2CkBAIC0xLDEzNyArMSwxNDIgQEAKLWNhcmQ9MCAtICAqKiogVU5LTk9XTi9HRU5FUklDICoqKgotY2FyZD0xIC0gTUlSTyBQQ1RWCi1jYXJkPTIgLSBIYXVwcGF1Z2UgKGJ0ODQ4KQotY2FyZD0zIC0gU1RCLCBHYXRld2F5IFAvTiA2MDAwNjk5IChidDg0OCkKLWNhcmQ9NCAtIEludGVsIENyZWF0ZSBhbmQgU2hhcmUgUENJLyBTbWFydCBWaWRlbyBSZWNvcmRlciBJSUkKLWNhcmQ9NSAtIERpYW1vbmQgRFRWMjAwMAotY2FyZD02IC0gQVZlck1lZGlhIFRWUGhvbmUKLWNhcmQ9NyAtIE1BVFJJWC1WaXNpb24gTVYtRGVsdGEKLWNhcmQ9OCAtIExpZmV2aWV3IEZseVZpZGVvIElJIChCdDg0OCkgTFIyNiAvIE1BWEkgVFYgVmlkZW8gUENJMiBMUjI2Ci1jYXJkPTkgLSBJTVMvSVhtaWNybyBUdXJib1RWCi1jYXJkPTEwIC0gSGF1cHBhdWdlIChidDg3OCkKLWNhcmQ9MTEgLSBNSVJPIFBDVFYgcHJvCi1jYXJkPTEyIC0gQURTIFRlY2hub2xvZ2llcyBDaGFubmVsIFN1cmZlciBUViAoYnQ4NDgpCi1jYXJkPTEzIC0gQVZlck1lZGlhIFRWQ2FwdHVyZSA5OAotY2FyZD0xNCAtIEFpbXNsYWIgVmlkZW8gSGlnaHdheSBYdHJlbWUgKFZIWCkKLWNhcmQ9MTUgLSBab2x0cml4IFRWLU1heAotY2FyZD0xNiAtIFByb2xpbmsgUGl4ZWx2aWV3IFBsYXlUViAoYnQ4NzgpCi1jYXJkPTE3IC0gTGVhZHRlayBXaW5WaWV3IDYwMQotY2FyZD0xOCAtIEFWRUMgSW50ZXJjYXB0dXJlCi1jYXJkPTE5IC0gTGlmZXZpZXcgRmx5VmlkZW8gSUkgRVogL0ZseUtpdCBMUjM4IEJ0ODQ4IChjYXB0dXJlIG9ubHkpCi1jYXJkPTIwIC0gQ0VJIFJhZmZsZXMgQ2FyZAotY2FyZD0yMSAtIExpZmV2aWV3IEZseVZpZGVvIDk4LyBMdWNreSBTdGFyIEltYWdlIFdvcmxkIENvbmZlcmVuY2VUViBMUjUwCi1jYXJkPTIyIC0gQXNrZXkgQ1BIMDUwLyBQaG9lYmUgVHYgTWFzdGVyICsgRk0KLWNhcmQ9MjMgLSBNb2R1bGFyIFRlY2hub2xvZ3kgTU0yMDEvTU0yMDIvTU0yMDUvTU0yMTAvTU0yMTUgUENUViwgYnQ4NzgKLWNhcmQ9MjQgLSBBc2tleSBDUEgwNVgvMDZYIChidDg3OCkgW21hbnkgdmVuZG9yc10KLWNhcmQ9MjUgLSBUZXJyYXRlYyBUZXJyYVRWKyBWZXJzaW9uIDEuMCAoQnQ4NDgpLyBUZXJyYSBUVmFsdWUgVmVyc2lvbiAxLjAvIFZvYmlzIFRWLUJvb3N0YXIKLWNhcmQ9MjYgLSBIYXVwcGF1Z2UgV2luQ2FtIG5ld2VyIChidDg3OCkKLWNhcmQ9MjcgLSBMaWZldmlldyBGbHlWaWRlbyA5OC8gTUFYSSBUViBWaWRlbyBQQ0kyIExSNTAKLWNhcmQ9MjggLSBUZXJyYXRlYyBUZXJyYVRWKyBWZXJzaW9uIDEuMSAoYnQ4NzgpCi1jYXJkPTI5IC0gSW1hZ2VuYXRpb24gUFhDMjAwCi1jYXJkPTMwIC0gTGlmZXZpZXcgRmx5VmlkZW8gOTggTFI1MAotY2FyZD0zMSAtIEZvcm1hYyBpUHJvVFYsIEZvcm1hYyBQcm9UViBJIChidDg0OCkKLWNhcmQ9MzIgLSBJbnRlbCBDcmVhdGUgYW5kIFNoYXJlIFBDSS8gU21hcnQgVmlkZW8gUmVjb3JkZXIgSUlJCi1jYXJkPTMzIC0gVGVycmF0ZWMgVGVycmFUVmFsdWUgVmVyc2lvbiBCdDg3OAotY2FyZD0zNCAtIExlYWR0ZWsgV2luRmFzdCAyMDAwLyBXaW5GYXN0IDIwMDAgWFAKLWNhcmQ9MzUgLSBMaWZldmlldyBGbHlWaWRlbyA5OCBMUjUwIC8gQ2hyb25vcyBWaWRlbyBTaHV0dGxlIElJCi1jYXJkPTM2IC0gTGlmZXZpZXcgRmx5VmlkZW8gOThGTSBMUjUwIC8gVHlwaG9vbiBUVmlldyBUVi9GTSBUdW5lcgotY2FyZD0zNyAtIFByb2xpbmsgUGl4ZWxWaWV3IFBsYXlUViBwcm8KLWNhcmQ9MzggLSBBc2tleSBDUEgwNlggVFZpZXc5OQotY2FyZD0zOSAtIFBpbm5hY2xlIFBDVFYgU3R1ZGlvL1JhdmUKLWNhcmQ9NDAgLSBTVEIgVFYgUENJIEZNLCBHYXRld2F5IFAvTiA2MDAwNzA0IChidDg3OCksIDNEZnggVm9vZG9vVFYgMTAwCi1jYXJkPTQxIC0gQVZlck1lZGlhIFRWUGhvbmUgOTgKLWNhcmQ9NDIgLSBQcm9WaWRlbyBQVjk1MQotY2FyZD00MyAtIExpdHRsZSBPbkFpciBUVgotY2FyZD00NCAtIFNpZ21hIFRWSUktRk0KLWNhcmQ9NDUgLSBNQVRSSVgtVmlzaW9uIE1WLURlbHRhIDIKLWNhcmQ9NDYgLSBab2x0cml4IEdlbmllIFRWL0ZNCi1jYXJkPTQ3IC0gVGVycmF0ZWMgVFYvUmFkaW8rCi1jYXJkPTQ4IC0gQXNrZXkgQ1BIMDN4LyBEeW5hbGluayBNYWdpYyBUVmlldwotY2FyZD00OSAtIElPREFUQSBHVi1CQ1RWMy9QQ0kKLWNhcmQ9NTAgLSBQcm9saW5rIFBWLUJUODc4UCs0RSAvIFBpeGVsVmlldyBQbGF5VFYgUEFLIC8gTGVuY28gTVhUVi05NTc4IENQCi1jYXJkPTUxIC0gRWFnbGUgV2lyZWxlc3MgQ2Fwcmljb3JuMiAoYnQ4NzhBKQotY2FyZD01MiAtIFBpbm5hY2xlIFBDVFYgU3R1ZGlvIFBybwotY2FyZD01MyAtIFR5cGhvb24gVFZpZXcgUkRTICsgRk0gU3RlcmVvIC8gS05DMSBUViBTdGF0aW9uIFJEUwotY2FyZD01NCAtIExpZmV2aWV3IEZseVZpZGVvIDIwMDAgL0ZseVZpZGVvIEEyLyBMaWZldGVjIExUIDk0MTUgVFYgW0xSOTBdCi1jYXJkPTU1IC0gQXNrZXkgQ1BIMDMxLyBCRVNUQlVZIEVhc3kgVFYKLWNhcmQ9NTYgLSBMaWZldmlldyBGbHlWaWRlbyA5OEZNIExSNTAKLWNhcmQ9NTcgLSBHcmFuZFRlYyAnR3JhbmQgVmlkZW8gQ2FwdHVyZScgKEJ0ODQ4KQotY2FyZD01OCAtIEFza2V5IENQSDA2MC8gUGhvZWJlIFRWIE1hc3RlciBPbmx5IChObyBGTSkKLWNhcmQ9NTkgLSBBc2tleSBDUEgwM3ggVFYgQ2FwdHVyZXIKLWNhcmQ9NjAgLSBNb2R1bGFyIFRlY2hub2xvZ3kgTU0xMDBQQ1RWCi1jYXJkPTYxIC0gQUcgRWxlY3Ryb25pY3MgR01WMQotY2FyZD02MiAtIEFza2V5IENQSDA2MS8gQkVTVEJVWSBFYXN5IFRWIChidDg3OCkKLWNhcmQ9NjMgLSBBVEkgVFYtV29uZGVyCi1jYXJkPTY0IC0gQVRJIFRWLVdvbmRlciBWRQotY2FyZD02NSAtIExpZmV2aWV3IEZseVZpZGVvIDIwMDBTIExSOTAKLWNhcmQ9NjYgLSBUZXJyYXRlYyBUVmFsdWVSYWRpbwotY2FyZD02NyAtIElPREFUQSBHVi1CQ1RWNC9QQ0kKLWNhcmQ9NjggLSAzRGZ4IFZvb2Rvb1RWIEZNIChFdXJvKSwgVm9vZG9vVFYgMjAwIChVU0EpCi1jYXJkPTY5IC0gQWN0aXZlIEltYWdpbmcgQUlNTVMKLWNhcmQ9NzAgLSBQcm9saW5rIFBpeGVsdmlldyBQVi1CVDg3OFArIChSZXYuNEMsOEUpCi1jYXJkPTcxIC0gTGlmZXZpZXcgRmx5VmlkZW8gOThFWiAoY2FwdHVyZSBvbmx5KSBMUjUxCi1jYXJkPTcyIC0gUHJvbGluayBQaXhlbHZpZXcgUFYtQlQ4NzhQKzlCIChQbGF5VFYgUHJvIHJldi45QiBGTStOSUNBTSkKLWNhcmQ9NzMgLSBTZW5zb3JheSAzMTEKLWNhcmQ9NzQgLSBSZW1vdGVWaXNpb24gTVggKFJWNjA1KQotY2FyZD03NSAtIFBvd2VyY29sb3IgTVRWODc4LyBNVFY4NzhSLyBNVFY4NzhGCi1jYXJkPTc2IC0gQ2Fub3B1cyBXaW5EVlIgUENJIChDT01QQVEgUHJlc2FyaW8gMzUyNEpQLCA1MTEySlApCi1jYXJkPTc3IC0gR3JhbmRUZWMgTXVsdGkgQ2FwdHVyZSBDYXJkIChCdDg3OCkKLWNhcmQ9NzggLSBKZXR3YXkgVFYvQ2FwdHVyZSBKVy1UVjg3OC1GQkssIEt3b3JsZCBLVy1UVjg3OFJGCi1jYXJkPTc5IC0gRFNQIERlc2lnbiBUQ1ZJREVPCi1jYXJkPTgwIC0gSGF1cHBhdWdlIFdpblRWIFBWUgotY2FyZD04MSAtIElPREFUQSBHVi1CQ1RWNS9QQ0kKLWNhcmQ9ODIgLSBPc3ByZXkgMTAwLzE1MCAoODc4KQotY2FyZD04MyAtIE9zcHJleSAxMDAvMTUwICg4NDgpCi1jYXJkPTg0IC0gT3NwcmV5IDEwMSAoODQ4KQotY2FyZD04NSAtIE9zcHJleSAxMDEvMTUxCi1jYXJkPTg2IC0gT3NwcmV5IDEwMS8xNTEgdy8gc3ZpZAotY2FyZD04NyAtIE9zcHJleSAyMDAvMjAxLzI1MC8yNTEKLWNhcmQ9ODggLSBPc3ByZXkgMjAwLzI1MAotY2FyZD04OSAtIE9zcHJleSAyMTAvMjIwCi1jYXJkPTkwIC0gT3NwcmV5IDUwMAotY2FyZD05MSAtIE9zcHJleSA1NDAKLWNhcmQ9OTIgLSBPc3ByZXkgMjAwMAotY2FyZD05MyAtIElEUyBFYWdsZQotY2FyZD05NCAtIFBpbm5hY2xlIFBDVFYgU2F0Ci1jYXJkPTk1IC0gRm9ybWFjIFByb1RWIElJIChidDg3OCkKLWNhcmQ9OTYgLSBNYWNoVFYKLWNhcmQ9OTcgLSBFdXJlc3lzIFBpY29sbwotY2FyZD05OCAtIFByb1ZpZGVvIFBWMTUwCi1jYXJkPTk5IC0gQUQtVFZLNTAzCi1jYXJkPTEwMCAtIEhlcmN1bGVzIFNtYXJ0IFRWIFN0ZXJlbwotY2FyZD0xMDEgLSBQYWNlIFRWICYgUmFkaW8gQ2FyZAotY2FyZD0xMDIgLSBJVkMtMjAwCi1jYXJkPTEwMyAtIEdyYW5kIFgtR3VhcmQgLyBUcnVzdCA4MTRQQ0kKLWNhcmQ9MTA0IC0gTmVidWxhIEVsZWN0cm9uaWNzIERpZ2lUVgotY2FyZD0xMDUgLSBQcm9WaWRlbyBQVjE0MwotY2FyZD0xMDYgLSBQSFlURUMgVkQtMDA5LVgxIE1pbmlESU4gKGJ0ODc4KQotY2FyZD0xMDcgLSBQSFlURUMgVkQtMDA5LVgxIENvbWJpIChidDg3OCkKLWNhcmQ9MTA4IC0gUEhZVEVDIFZELTAwOSBNaW5pRElOIChidDg3OCkKLWNhcmQ9MTA5IC0gUEhZVEVDIFZELTAwOSBDb21iaSAoYnQ4NzgpCi1jYXJkPTExMCAtIElWQy0xMDAKLWNhcmQ9MTExIC0gSVZDLTEyMEcKLWNhcmQ9MTEyIC0gcGNIRFRWIEhELTIwMDAgVFYKLWNhcmQ9MTEzIC0gVHdpbmhhbiBEU1QgKyBjbG9uZXMKLWNhcmQ9MTE0IC0gV2luZmFzdCBWQzEwMAotY2FyZD0xMTUgLSBUZXBwcm8gVEVWLTU2MC9JbnRlclZpc2lvbiBJVi01NjAKLWNhcmQ9MTE2IC0gU0lNVVMgR1ZDMTEwMAotY2FyZD0xMTcgLSBOR1MgTkdTVFYrCi1jYXJkPTExOCAtIExNTEJUNAotY2FyZD0xMTkgLSBUZWtyYW0gTTIwNSBQUk8KLWNhcmQ9MTIwIC0gQ29uY2VwdHJvbmljIENPTlRWRk1pCi1jYXJkPTEyMSAtIEV1cmVzeXMgUGljb2xvIFRldHJhCi1jYXJkPTEyMiAtIFNwaXJpdCBUViBUdW5lcgotY2FyZD0xMjMgLSBBVmVyTWVkaWEgQVZlclRWIERWQi1UIDc3MQotY2FyZD0xMjQgLSBBdmVyTWVkaWEgQXZlclRWIERWQi1UIDc2MQotY2FyZD0xMjUgLSBNQVRSSVggVmlzaW9uIFNpZ21hLVNRCi1jYXJkPTEyNiAtIE1BVFJJWCBWaXNpb24gU2lnbWEtU0xDCi1jYXJkPTEyNyAtIEFQQUMgVmlld2NvbXAgODc4KEFNQVgpCi1jYXJkPTEyOCAtIERWaUNPIEZ1c2lvbkhEVFYgRFZCLVQgTGl0ZQotY2FyZD0xMjkgLSBWLUdlYXIgTXlWQ0QKLWNhcmQ9MTMwIC0gU3VwZXIgVFYgVHVuZXIKLWNhcmQ9MTMxIC0gVGliZXQgU3lzdGVtcyAnUHJvZ3Jlc3MgRFZSJyBDUzE2Ci1jYXJkPTEzMiAtIEtvZGljb20gNDQwMFIgKG1hc3RlcikKLWNhcmQ9MTMzIC0gS29kaWNvbSA0NDAwUiAoc2xhdmUpCi1jYXJkPTEzNCAtIEFkbGluayBSVFYyNAotY2FyZD0xMzUgLSBEVmlDTyBGdXNpb25IRFRWIDUgTGl0ZQotY2FyZD0xMzYgLSBBY29ycCBZODc4RgorICAwIC0+ICAqKiogVU5LTk9XTi9HRU5FUklDICoqKgorICAxIC0+IE1JUk8gUENUVgorICAyIC0+IEhhdXBwYXVnZSAoYnQ4NDgpCisgIDMgLT4gU1RCLCBHYXRld2F5IFAvTiA2MDAwNjk5IChidDg0OCkKKyAgNCAtPiBJbnRlbCBDcmVhdGUgYW5kIFNoYXJlIFBDSS8gU21hcnQgVmlkZW8gUmVjb3JkZXIgSUlJCisgIDUgLT4gRGlhbW9uZCBEVFYyMDAwCisgIDYgLT4gQVZlck1lZGlhIFRWUGhvbmUKKyAgNyAtPiBNQVRSSVgtVmlzaW9uIE1WLURlbHRhCisgIDggLT4gTGlmZXZpZXcgRmx5VmlkZW8gSUkgKEJ0ODQ4KSBMUjI2IC8gTUFYSSBUViBWaWRlbyBQQ0kyIExSMjYKKyAgOSAtPiBJTVMvSVhtaWNybyBUdXJib1RWCisgMTAgLT4gSGF1cHBhdWdlIChidDg3OCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFswMDcwOjEzZWIsMDA3MDozOTAwLDI2MzY6MTBiNF0KKyAxMSAtPiBNSVJPIFBDVFYgcHJvCisgMTIgLT4gQURTIFRlY2hub2xvZ2llcyBDaGFubmVsIFN1cmZlciBUViAoYnQ4NDgpCisgMTMgLT4gQVZlck1lZGlhIFRWQ2FwdHVyZSA5OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxNDYxOjAwMDIsMTQ2MTowMDA0LDE0NjE6MDMwMF0KKyAxNCAtPiBBaW1zbGFiIFZpZGVvIEhpZ2h3YXkgWHRyZW1lIChWSFgpCisgMTUgLT4gWm9sdHJpeCBUVi1NYXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthMWEwOmEwZmNdCisgMTYgLT4gUHJvbGluayBQaXhlbHZpZXcgUGxheVRWIChidDg3OCkKKyAxNyAtPiBMZWFkdGVrIFdpblZpZXcgNjAxCisgMTggLT4gQVZFQyBJbnRlcmNhcHR1cmUKKyAxOSAtPiBMaWZldmlldyBGbHlWaWRlbyBJSSBFWiAvRmx5S2l0IExSMzggQnQ4NDggKGNhcHR1cmUgb25seSkKKyAyMCAtPiBDRUkgUmFmZmxlcyBDYXJkCisgMjEgLT4gTGlmZXZpZXcgRmx5VmlkZW8gOTgvIEx1Y2t5IFN0YXIgSW1hZ2UgV29ybGQgQ29uZmVyZW5jZVRWIExSNTAKKyAyMiAtPiBBc2tleSBDUEgwNTAvIFBob2ViZSBUdiBNYXN0ZXIgKyBGTSAgICAgICAgICAgICAgICAgWzE0ZmY6MzAwMl0KKyAyMyAtPiBNb2R1bGFyIFRlY2hub2xvZ3kgTU0yMDEvTU0yMDIvTU0yMDUvTU0yMTAvTU0yMTUgUENUViwgYnQ4NzggWzE0Yzc6MDEwMV0KKyAyNCAtPiBBc2tleSBDUEgwNVgvMDZYIChidDg3OCkgW21hbnkgdmVuZG9yc10gICAgICAgICAgICAgWzE0NGY6MzAwMiwxNDRmOjMwMDUsMTQ0Zjo1MDAwLDE0ZmY6MzAwMF0KKyAyNSAtPiBUZXJyYXRlYyBUZXJyYVRWKyBWZXJzaW9uIDEuMCAoQnQ4NDgpLyBUZXJyYSBUVmFsdWUgVmVyc2lvbiAxLjAvIFZvYmlzIFRWLUJvb3N0YXIKKyAyNiAtPiBIYXVwcGF1Z2UgV2luQ2FtIG5ld2VyIChidDg3OCkKKyAyNyAtPiBMaWZldmlldyBGbHlWaWRlbyA5OC8gTUFYSSBUViBWaWRlbyBQQ0kyIExSNTAKKyAyOCAtPiBUZXJyYXRlYyBUZXJyYVRWKyBWZXJzaW9uIDEuMSAoYnQ4NzgpICAgICAgICAgICAgICAgWzE1M2I6MTEyNywxODUyOjE4NTJdCisgMjkgLT4gSW1hZ2VuYXRpb24gUFhDMjAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxMjk1OjIwMGFdCisgMzAgLT4gTGlmZXZpZXcgRmx5VmlkZW8gOTggTFI1MCAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxZjdmOjE4NTBdCisgMzEgLT4gRm9ybWFjIGlQcm9UViwgRm9ybWFjIFByb1RWIEkgKGJ0ODQ4KQorIDMyIC0+IEludGVsIENyZWF0ZSBhbmQgU2hhcmUgUENJLyBTbWFydCBWaWRlbyBSZWNvcmRlciBJSUkKKyAzMyAtPiBUZXJyYXRlYyBUZXJyYVRWYWx1ZSBWZXJzaW9uIEJ0ODc4ICAgICAgICAgICAgICAgICAgWzE1M2I6MTExNywxNTNiOjExMTgsMTUzYjoxMTE5LDE1M2I6MTExYSwxNTNiOjExMzQsMTUzYjo1MDE4XQorIDM0IC0+IExlYWR0ZWsgV2luRmFzdCAyMDAwLyBXaW5GYXN0IDIwMDAgWFAgICAgICAgICAgICAgICBbMTA3ZDo2NjA2LDEwN2Q6NjYwOSw2NjA2OjIxN2QsZjZmZjpmZmY2XQorIDM1IC0+IExpZmV2aWV3IEZseVZpZGVvIDk4IExSNTAgLyBDaHJvbm9zIFZpZGVvIFNodXR0bGUgSUkgWzE4NTE6MTg1MCwxODUxOmEwNTBdCisgMzYgLT4gTGlmZXZpZXcgRmx5VmlkZW8gOThGTSBMUjUwIC8gVHlwaG9vbiBUVmlldyBUVi9GTSBUdW5lciBbMTg1MjoxODUyXQorIDM3IC0+IFByb2xpbmsgUGl4ZWxWaWV3IFBsYXlUViBwcm8KKyAzOCAtPiBBc2tleSBDUEgwNlggVFZpZXc5OSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzE0NGY6MzAwMCwxNDRmOmEwMDUsYTA0ZjphMGZjXQorIDM5IC0+IFBpbm5hY2xlIFBDVFYgU3R1ZGlvL1JhdmUgICAgICAgICAgICAgICAgICAgICAgICAgICBbMTFiZDowMDEyLGJkMTE6MTIwMCxiZDExOmZmMDAsMTFiZDpmZjEyXQorIDQwIC0+IFNUQiBUViBQQ0kgRk0sIEdhdGV3YXkgUC9OIDYwMDA3MDQgKGJ0ODc4KSwgM0RmeCBWb29kb29UViAxMDAgWzEwYjQ6MjYzNiwxMGI0OjI2NDUsMTIxYTozMDYwXQorIDQxIC0+IEFWZXJNZWRpYSBUVlBob25lIDk4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMTQ2MTowMDAxLDE0NjE6MDAwM10KKyA0MiAtPiBQcm9WaWRlbyBQVjk1MSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FhMGM6MTQ2Y10KKyA0MyAtPiBMaXR0bGUgT25BaXIgVFYKKyA0NCAtPiBTaWdtYSBUVklJLUZNCisgNDUgLT4gTUFUUklYLVZpc2lvbiBNVi1EZWx0YSAyCisgNDYgLT4gWm9sdHJpeCBHZW5pZSBUVi9GTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxNWIwOjQwMDAsMTViMDo0MDBhLDE1YjA6NDAwZCwxNWIwOjQwMTAsMTViMDo0MDE2XQorIDQ3IC0+IFRlcnJhdGVjIFRWL1JhZGlvKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMTUzYjoxMTIzXQorIDQ4IC0+IEFza2V5IENQSDAzeC8gRHluYWxpbmsgTWFnaWMgVFZpZXcKKyA0OSAtPiBJT0RBVEEgR1YtQkNUVjMvUENJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzEwZmM6NDAyMF0KKyA1MCAtPiBQcm9saW5rIFBWLUJUODc4UCs0RSAvIFBpeGVsVmlldyBQbGF5VFYgUEFLIC8gTGVuY28gTVhUVi05NTc4IENQCisgNTEgLT4gRWFnbGUgV2lyZWxlc3MgQ2Fwcmljb3JuMiAoYnQ4NzhBKQorIDUyIC0+IFBpbm5hY2xlIFBDVFYgU3R1ZGlvIFBybworIDUzIC0+IFR5cGhvb24gVFZpZXcgUkRTICsgRk0gU3RlcmVvIC8gS05DMSBUViBTdGF0aW9uIFJEUworIDU0IC0+IExpZmV2aWV3IEZseVZpZGVvIDIwMDAgL0ZseVZpZGVvIEEyLyBMaWZldGVjIExUIDk0MTUgVFYgW0xSOTBdCisgNTUgLT4gQXNrZXkgQ1BIMDMxLyBCRVNUQlVZIEVhc3kgVFYKKyA1NiAtPiBMaWZldmlldyBGbHlWaWRlbyA5OEZNIExSNTAgICAgICAgICAgICAgICAgICAgICAgICAgW2EwNTE6NDFhMF0KKyA1NyAtPiBHcmFuZFRlYyAnR3JhbmQgVmlkZW8gQ2FwdHVyZScgKEJ0ODQ4KSAgICAgICAgICAgICAgWzQzNDQ6NDE0Ml0KKyA1OCAtPiBBc2tleSBDUEgwNjAvIFBob2ViZSBUViBNYXN0ZXIgT25seSAoTm8gRk0pCisgNTkgLT4gQXNrZXkgQ1BIMDN4IFRWIENhcHR1cmVyCisgNjAgLT4gTW9kdWxhciBUZWNobm9sb2d5IE1NMTAwUENUVgorIDYxIC0+IEFHIEVsZWN0cm9uaWNzIEdNVjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMTVjYjowMTAxXQorIDYyIC0+IEFza2V5IENQSDA2MS8gQkVTVEJVWSBFYXN5IFRWIChidDg3OCkKKyA2MyAtPiBBVEkgVFYtV29uZGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzEwMDI6MDAwMV0KKyA2NCAtPiBBVEkgVFYtV29uZGVyIFZFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzEwMDI6MDAwM10KKyA2NSAtPiBMaWZldmlldyBGbHlWaWRlbyAyMDAwUyBMUjkwCisgNjYgLT4gVGVycmF0ZWMgVFZhbHVlUmFkaW8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxNTNiOjExMzUsMTUzYjpmZjNiXQorIDY3IC0+IElPREFUQSBHVi1CQ1RWNC9QQ0kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMTBmYzo0MDUwXQorIDY4IC0+IDNEZnggVm9vZG9vVFYgRk0gKEV1cm8pLCBWb29kb29UViAyMDAgKFVTQSkgICAgICAgICBbMTIxYTozMDAwLDEwYjQ6MjYzN10KKyA2OSAtPiBBY3RpdmUgSW1hZ2luZyBBSU1NUworIDcwIC0+IFByb2xpbmsgUGl4ZWx2aWV3IFBWLUJUODc4UCsgKFJldi40Qyw4RSkKKyA3MSAtPiBMaWZldmlldyBGbHlWaWRlbyA5OEVaIChjYXB0dXJlIG9ubHkpIExSNTEgICAgICAgICAgWzE4NTE6MTg1MV0KKyA3MiAtPiBQcm9saW5rIFBpeGVsdmlldyBQVi1CVDg3OFArOUIgKFBsYXlUViBQcm8gcmV2LjlCIEZNK05JQ0FNKSBbMTU1NDo0MDExXQorIDczIC0+IFNlbnNvcmF5IDMxMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbNjAwMDowMzExXQorIDc0IC0+IFJlbW90ZVZpc2lvbiBNWCAoUlY2MDUpCisgNzUgLT4gUG93ZXJjb2xvciBNVFY4NzgvIE1UVjg3OFIvIE1UVjg3OEYKKyA3NiAtPiBDYW5vcHVzIFdpbkRWUiBQQ0kgKENPTVBBUSBQcmVzYXJpbyAzNTI0SlAsIDUxMTJKUCkgWzBlMTE6MDA3OV0KKyA3NyAtPiBHcmFuZFRlYyBNdWx0aSBDYXB0dXJlIENhcmQgKEJ0ODc4KQorIDc4IC0+IEpldHdheSBUVi9DYXB0dXJlIEpXLVRWODc4LUZCSywgS3dvcmxkIEtXLVRWODc4UkYgICBbMGEwMToxN2RlXQorIDc5IC0+IERTUCBEZXNpZ24gVENWSURFTworIDgwIC0+IEhhdXBwYXVnZSBXaW5UViBQVlIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMDA3MDo0NTAwXQorIDgxIC0+IElPREFUQSBHVi1CQ1RWNS9QQ0kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMTBmYzo0MDcwLDEwZmM6ZDAxOF0KKyA4MiAtPiBPc3ByZXkgMTAwLzE1MCAoODc4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzAwNzA6ZmYwMF0KKyA4MyAtPiBPc3ByZXkgMTAwLzE1MCAoODQ4KQorIDg0IC0+IE9zcHJleSAxMDEgKDg0OCkKKyA4NSAtPiBPc3ByZXkgMTAxLzE1MQorIDg2IC0+IE9zcHJleSAxMDEvMTUxIHcvIHN2aWQKKyA4NyAtPiBPc3ByZXkgMjAwLzIwMS8yNTAvMjUxCisgODggLT4gT3NwcmV5IDIwMC8yNTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFswMDcwOmZmMDFdCisgODkgLT4gT3NwcmV5IDIxMC8yMjAKKyA5MCAtPiBPc3ByZXkgNTAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzAwNzA6ZmYwMl0KKyA5MSAtPiBPc3ByZXkgNTQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzAwNzA6ZmYwNF0KKyA5MiAtPiBPc3ByZXkgMjAwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzAwNzA6ZmYwM10KKyA5MyAtPiBJRFMgRWFnbGUKKyA5NCAtPiBQaW5uYWNsZSBQQ1RWIFNhdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzExYmQ6MDAxY10KKyA5NSAtPiBGb3JtYWMgUHJvVFYgSUkgKGJ0ODc4KQorIDk2IC0+IE1hY2hUVgorIDk3IC0+IEV1cmVzeXMgUGljb2xvCisgOTggLT4gUHJvVmlkZW8gUFYxNTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthYTAwOjE0NjAsYWEwMToxNDYxLGFhMDI6MTQ2MixhYTAzOjE0NjMsYWEwNDoxNDY0LGFhMDU6MTQ2NSxhYTA2OjE0NjYsYWEwNzoxNDY3XQorIDk5IC0+IEFELVRWSzUwMworMTAwIC0+IEhlcmN1bGVzIFNtYXJ0IFRWIFN0ZXJlbworMTAxIC0+IFBhY2UgVFYgJiBSYWRpbyBDYXJkCisxMDIgLT4gSVZDLTIwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFswMDAwOmExNTUsMDAwMTphMTU1LDAwMDI6YTE1NSwwMDAzOmExNTUsMDEwMDphMTU1LDAxMDE6YTE1NSwwMTAyOmExNTUsMDEwMzphMTU1XQorMTAzIC0+IEdyYW5kIFgtR3VhcmQgLyBUcnVzdCA4MTRQQ0kgICAgICAgICAgICAgICAgICAgICAgICBbMDMwNDowMTAyXQorMTA0IC0+IE5lYnVsYSBFbGVjdHJvbmljcyBEaWdpVFYgICAgICAgICAgICAgICAgICAgICAgICAgICBbMDA3MTowMTAxXQorMTA1IC0+IFByb1ZpZGVvIFBWMTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWEwMDoxNDMwLGFhMDA6MTQzMSxhYTAwOjE0MzIsYWEwMDoxNDMzLGFhMDM6MTQzM10KKzEwNiAtPiBQSFlURUMgVkQtMDA5LVgxIE1pbmlESU4gKGJ0ODc4KQorMTA3IC0+IFBIWVRFQyBWRC0wMDktWDEgQ29tYmkgKGJ0ODc4KQorMTA4IC0+IFBIWVRFQyBWRC0wMDkgTWluaURJTiAoYnQ4NzgpCisxMDkgLT4gUEhZVEVDIFZELTAwOSBDb21iaSAoYnQ4NzgpCisxMTAgLT4gSVZDLTEwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmZjAwOmExMzJdCisxMTEgLT4gSVZDLTEyMEcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmZjAwOmExODIsZmYwMTphMTgyLGZmMDI6YTE4MixmZjAzOmExODIsZmYwNDphMTgyLGZmMDU6YTE4MixmZjA2OmExODIsZmYwNzphMTgyLGZmMDg6YTE4MixmZjA5OmExODIsZmYwYTphMTgyLGZmMGI6YTE4MixmZjBjOmExODIsZmYwZDphMTgyLGZmMGU6YTE4MixmZjBmOmExODJdCisxMTIgLT4gcGNIRFRWIEhELTIwMDAgVFYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFs3MDYzOjIwMDBdCisxMTMgLT4gVHdpbmhhbiBEU1QgKyBjbG9uZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxMWJkOjAwMjYsMTgyMjowMDAxLDI3MGY6ZmMwMF0KKzExNCAtPiBXaW5mYXN0IFZDMTAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzEwN2Q6NjYwN10KKzExNSAtPiBUZXBwcm8gVEVWLTU2MC9JbnRlclZpc2lvbiBJVi01NjAKKzExNiAtPiBTSU1VUyBHVkMxMTAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FhNmE6ODJiMl0KKzExNyAtPiBOR1MgTkdTVFYrCisxMTggLT4gTE1MQlQ0CisxMTkgLT4gVGVrcmFtIE0yMDUgUFJPCisxMjAgLT4gQ29uY2VwdHJvbmljIENPTlRWRk1pCisxMjEgLT4gRXVyZXN5cyBQaWNvbG8gVGV0cmEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxODA1OjAxMDUsMTgwNTowMTA2LDE4MDU6MDEwNywxODA1OjAxMDhdCisxMjIgLT4gU3Bpcml0IFRWIFR1bmVyCisxMjMgLT4gQVZlck1lZGlhIEFWZXJUViBEVkItVCA3NzEgICAgICAgICAgICAgICAgICAgICAgICAgIFsxNDYxOjA3NzFdCisxMjQgLT4gQXZlck1lZGlhIEF2ZXJUViBEVkItVCA3NjEgICAgICAgICAgICAgICAgICAgICAgICAgIFsxNDYxOjA3NjFdCisxMjUgLT4gTUFUUklYIFZpc2lvbiBTaWdtYS1TUQorMTI2IC0+IE1BVFJJWCBWaXNpb24gU2lnbWEtU0xDCisxMjcgLT4gQVBBQyBWaWV3Y29tcCA4NzgoQU1BWCkKKzEyOCAtPiBEVmlDTyBGdXNpb25IRFRWIERWQi1UIExpdGUgICAgICAgICAgICAgICAgICAgICAgICAgWzE4YWM6ZGIxMF0KKzEyOSAtPiBWLUdlYXIgTXlWQ0QKKzEzMCAtPiBTdXBlciBUViBUdW5lcgorMTMxIC0+IFRpYmV0IFN5c3RlbXMgJ1Byb2dyZXNzIERWUicgQ1MxNgorMTMyIC0+IEtvZGljb20gNDQwMFIgKG1hc3RlcikKKzEzMyAtPiBLb2RpY29tIDQ0MDBSIChzbGF2ZSkKKzEzNCAtPiBBZGxpbmsgUlRWMjQKKzEzNSAtPiBEVmlDTyBGdXNpb25IRFRWIDUgTGl0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzE4YWM6ZDUwMF0KKzEzNiAtPiBBY29ycCBZODc4RiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzk1MTE6MTU0MF0KKzEzNyAtPiBDb25jZXB0cm9uaWMgQ1RWRk1pIHYyCisxMzggLT4gUHJvbGluayBQaXhlbHZpZXcgUFYtQlQ4NzhQKyAoUmV2LjJFKQorMTM5IC0+IFByb2xpbmsgUGl4ZWxWaWV3IFBsYXlUViBNUEVHMiBQVi1NNDkwMAorMTQwIC0+IE9zcHJleSA0NDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMDA3MDpmZjA3XQorMTQxIC0+IEFzb3VuZCBTa3lleWUgUENUVgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5jeDg4IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5jeDg4CmluZGV4IDAzZGViMDcuLmExMDE3ZDEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuY3g4OAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmN4ODgKQEAgLTEsMzIgKzEsMzcgQEAKLWNhcmQ9MCAtIFVOS05PV04vR0VORVJJQwotY2FyZD0xIC0gSGF1cHBhdWdlIFdpblRWIDM0eHh4IG1vZGVscwotY2FyZD0yIC0gR0RJIEJsYWNrIEdvbGQKLWNhcmQ9MyAtIFBpeGVsVmlldwotY2FyZD00IC0gQVRJIFRWIFdvbmRlciBQcm8KLWNhcmQ9NSAtIExlYWR0ZWsgV2luZmFzdCAyMDAwWFAgRXhwZXJ0Ci1jYXJkPTYgLSBBdmVyVFYgU3R1ZGlvIDMwMyAoTTEyNikKLWNhcmQ9NyAtIE1TSSBUVi1Abnl3aGVyZSBNYXN0ZXIKLWNhcmQ9OCAtIExlYWR0ZWsgV2luZmFzdCBEVjIwMDAKLWNhcmQ9OSAtIExlYWR0ZWsgUFZSIDIwMDAKLWNhcmQ9MTAgLSBJT0RBVEEgR1YtVkNQMy9QQ0kKLWNhcmQ9MTEgLSBQcm9saW5rIFBsYXlUViBQVlIKLWNhcmQ9MTIgLSBBU1VTIFBWUi00MTYKLWNhcmQ9MTMgLSBNU0kgVFYtQG55d2hlcmUKLWNhcmQ9MTQgLSBLV29ybGQvVlN0cmVhbSBYUGVydCBEVkItVAotY2FyZD0xNSAtIERWaUNPIEZ1c2lvbkhEVFYgRFZCLVQxCi1jYXJkPTE2IC0gS1dvcmxkIExUVjg4M1JGCi1jYXJkPTE3IC0gRFZpQ08gRnVzaW9uSERUViAzIEdvbGQtUQotY2FyZD0xOCAtIEhhdXBwYXVnZSBOb3ZhLVQgRFZCLVQKLWNhcmQ9MTkgLSBDb25leGFudCBEVkItVCByZWZlcmVuY2UgZGVzaWduCi1jYXJkPTIwIC0gUHJvdmlkZW8gUFYyNTkKLWNhcmQ9MjEgLSBEVmlDTyBGdXNpb25IRFRWIERWQi1UIFBsdXMKLWNhcmQ9MjIgLSBkaWdpdGFsbm93IEROVFYgTGl2ZSEgRFZCLVQKLWNhcmQ9MjMgLSBwY0hEVFYgSEQzMDAwIEhEVFYKLWNhcmQ9MjQgLSBIYXVwcGF1Z2UgV2luVFYgMjh4eHggKFJvc2x5bikgbW9kZWxzCi1jYXJkPTI1IC0gRGlnaXRhbC1Mb2dpYyBNSUNST1NQQUNFIEVudGVydGFpbm1lbnQgQ2VudGVyIChNRUMpCi1jYXJkPTI2IC0gSU9EQVRBIEdWL0JDVFY3RQotY2FyZD0yNyAtIFBpeGVsVmlldyBQbGF5VFYgVWx0cmEgUHJvIChTdGVyZW8pCi1jYXJkPTI4IC0gRFZpQ08gRnVzaW9uSERUViAzIEdvbGQtVAotY2FyZD0yOSAtIEFEUyBUZWNoIEluc3RhbnQgVFYgRFZCLVQgUENJCi1jYXJkPTMwIC0gVGVycmFUZWMgQ2luZXJneSAxNDAwIERWQi1UCi1jYXJkPTMxIC0gRFZpQ08gRnVzaW9uSERUViA1IEdvbGQKKyAgMCAtPiBVTktOT1dOL0dFTkVSSUMKKyAgMSAtPiBIYXVwcGF1Z2UgV2luVFYgMzR4eHggbW9kZWxzICAgICAgICAgICAgICAgICAgICAgICAgWzAwNzA6MzQwMCwwMDcwOjM0MDFdCisgIDIgLT4gR0RJIEJsYWNrIEdvbGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxNGM3OjAxMDYsMTRjNzowMTA3XQorICAzIC0+IFBpeGVsVmlldyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMTU1NDo0ODExXQorICA0IC0+IEFUSSBUViBXb25kZXIgUHJvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMTAwMjowMGY4XQorICA1IC0+IExlYWR0ZWsgV2luZmFzdCAyMDAwWFAgRXhwZXJ0ICAgICAgICAgICAgICAgICAgICAgICBbMTA3ZDo2NjExLDEwN2Q6NjYxM10KKyAgNiAtPiBBdmVyVFYgU3R1ZGlvIDMwMyAoTTEyNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzE0NjE6MDAwYl0KKyAgNyAtPiBNU0kgVFYtQG55d2hlcmUgTWFzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzE0NjI6ODYwNl0KKyAgOCAtPiBMZWFkdGVrIFdpbmZhc3QgRFYyMDAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzEwN2Q6NjYyMF0KKyAgOSAtPiBMZWFkdGVrIFBWUiAyMDAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzEwN2Q6NjYzYiwxMDdkOjY2M0NdCisgMTAgLT4gSU9EQVRBIEdWLVZDUDMvUENJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxMGZjOmQwMDNdCisgMTEgLT4gUHJvbGluayBQbGF5VFYgUFZSCisgMTIgLT4gQVNVUyBQVlItNDE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxMDQzOjQ4MjNdCisgMTMgLT4gTVNJIFRWLUBueXdoZXJlCisgMTQgLT4gS1dvcmxkL1ZTdHJlYW0gWFBlcnQgRFZCLVQgICAgICAgICAgICAgICAgICAgICAgICAgIFsxN2RlOjA4YTZdCisgMTUgLT4gRFZpQ08gRnVzaW9uSERUViBEVkItVDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxOGFjOmRiMDBdCisgMTYgLT4gS1dvcmxkIExUVjg4M1JGCisgMTcgLT4gRFZpQ08gRnVzaW9uSERUViAzIEdvbGQtUSAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxOGFjOmQ4MTBdCisgMTggLT4gSGF1cHBhdWdlIE5vdmEtVCBEVkItVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFswMDcwOjkwMDJdCisgMTkgLT4gQ29uZXhhbnQgRFZCLVQgcmVmZXJlbmNlIGRlc2lnbiAgICAgICAgICAgICAgICAgICAgIFsxNGYxOjAxODddCisgMjAgLT4gUHJvdmlkZW8gUFYyNTkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxNTQwOjI1ODBdCisgMjEgLT4gRFZpQ08gRnVzaW9uSERUViBEVkItVCBQbHVzICAgICAgICAgICAgICAgICAgICAgICAgIFsxOGFjOmRiMTBdCisgMjIgLT4gcGNIRFRWIEhEMzAwMCBIRFRWICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFs3MDYzOjMwMDBdCisgMjMgLT4gZGlnaXRhbG5vdyBETlRWIExpdmUhIERWQi1UICAgICAgICAgICAgICAgICAgICAgICAgIFsxN2RlOmE4YTZdCisgMjQgLT4gSGF1cHBhdWdlIFdpblRWIDI4eHh4IChSb3NseW4pIG1vZGVscyAgICAgICAgICAgICAgIFswMDcwOjI4MDFdCisgMjUgLT4gRGlnaXRhbC1Mb2dpYyBNSUNST1NQQUNFIEVudGVydGFpbm1lbnQgQ2VudGVyIChNRUMpIFsxNGYxOjAzNDJdCisgMjYgLT4gSU9EQVRBIEdWL0JDVFY3RSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxMGZjOmQwMzVdCisgMjcgLT4gUGl4ZWxWaWV3IFBsYXlUViBVbHRyYSBQcm8gKFN0ZXJlbykKKyAyOCAtPiBEVmlDTyBGdXNpb25IRFRWIDMgR29sZC1UICAgICAgICAgICAgICAgICAgICAgICAgICAgWzE4YWM6ZDgyMF0KKyAyOSAtPiBBRFMgVGVjaCBJbnN0YW50IFRWIERWQi1UIFBDSSAgICAgICAgICAgICAgICAgICAgICAgWzE0MjE6MDMzNF0KKyAzMCAtPiBUZXJyYVRlYyBDaW5lcmd5IDE0MDAgRFZCLVQgICAgICAgICAgICAgICAgICAgICAgICAgWzE1M2I6MTE2Nl0KKyAzMSAtPiBEVmlDTyBGdXNpb25IRFRWIDUgR29sZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzE4YWM6ZDUwMF0KKyAzMiAtPiBBdmVyTWVkaWEgVWx0cmFUViBNZWRpYSBDZW50ZXIgUENJIDU1MCAgICAgICAgICAgICAgWzE0NjE6ODAxMV0KKyAzMyAtPiBLd29ybGQgVi1TdHJlYW0gWHBlcnQgRFZECisgMzQgLT4gQVRJIEhEVFYgV29uZGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxMDAyOmExMDFdCisgMzUgLT4gV2luRmFzdCBEVFYxMDAwLVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxMDdkOjY2NWZdCisgMzYgLT4gQVZlclRWIDMwMyAoTTEyNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxNDYxOjAwMGFdCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmVtMjh4eCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuZW0yOHh4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwYzdjYWQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmVtMjh4eApAQCAtMCwwICsxLDEwIEBACisgIDAgLT4gVW5rbm93biBFTTI4MDAgdmlkZW8gZ3JhYmJlciAgICAgICAgICAgICAoZW0yODAwKSAgICAgICAgW2ViMWE6MjgwMF0KKyAgMSAtPiBVbmtub3duIEVNMjgyMC8yODQwIHZpZGVvIGdyYWJiZXIgICAgICAgIChlbTI4MjAvZW0yODQwKQorICAyIC0+IFRlcnJhdGVjIENpbmVyZ3kgMjUwIFVTQiAgICAgICAgICAgICAgICAgKGVtMjgyMC9lbTI4NDApIFswY2NkOjAwMzZdCisgIDMgLT4gUGlubmFjbGUgUENUViBVU0IgMiAgICAgICAgICAgICAgICAgICAgICAoZW0yODIwL2VtMjg0MCkgWzIzMDQ6MDIwOF0KKyAgNCAtPiBIYXVwcGF1Z2UgV2luVFYgVVNCIDIgICAgICAgICAgICAgICAgICAgIChlbTI4MjAvZW0yODQwKSBbMjA0MDo0MjAwXQorICA1IC0+IE1TSSBWT1ggVVNCIDIuMCAgICAgICAgICAgICAgICAgICAgICAgICAgKGVtMjgyMC9lbTI4NDApIFtlYjFhOjI4MjBdCisgIDYgLT4gVGVycmF0ZWMgQ2luZXJneSAyMDAgVVNCICAgICAgICAgICAgICAgICAoZW0yODAwKQorICA3IC0+IExlYWR0ZWsgV2luZmFzdCBVU0IgSUkgICAgICAgICAgICAgICAgICAgKGVtMjgwMCkKKyAgOCAtPiBLd29ybGQgVVNCMjgwMCAgICAgICAgICAgICAgICAgICAgICAgICAgIChlbTI4MDApCisgIDkgLT4gUGlubmFjbGUgRGF6emxlIERWQyA5MCAgICAgICAgICAgICAgICAgICAoZW0yODIwL2VtMjg0MCkgWzIzMDQ6MDIwN10KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1Quc2FhNzEzNCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1Quc2FhNzEzNAppbmRleCBkYzU3MjI1Li41N2M5ZDYzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnNhYTcxMzQKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5zYWE3MTM0CkBAIC02LDEwICs2LDEwIEBACiAgIDUgLT4gU0tOZXQgTW9uc3RlciBUViAgICAgICAgICAgICAgICAgICAgICAgICBbMTEzMTo0ZTg1XQogICA2IC0+IFRldmlvbiBNRCA5NzE3CiAgIDcgLT4gS05DIE9uZSBUVi1TdGF0aW9uIFJEUyAvIFR5cGhvb24gVFYgVHVuZXIgUkRTIFsxMTMxOmZlMDEsMTg5NDpmZTAxXQotICA4IC0+IFRlcnJhdGVjIENpbmVyZ3kgNDAwIFRWICAgICAgICAgICAgICAgICAgWzE1M0I6MTE0Ml0KKyAgOCAtPiBUZXJyYXRlYyBDaW5lcmd5IDQwMCBUViAgICAgICAgICAgICAgICAgIFsxNTNiOjExNDJdCiAgIDkgLT4gTWVkaW9uIDUwNDQKICAxMCAtPiBLd29ybGQvS3Vyb3V0b1NoaWtvdSBTQUE3MTMwLVRWUENJCi0gMTEgLT4gVGVycmF0ZWMgQ2luZXJneSA2MDAgVFYgICAgICAgICAgICAgICAgICBbMTUzQjoxMTQzXQorIDExIC0+IFRlcnJhdGVjIENpbmVyZ3kgNjAwIFRWICAgICAgICAgICAgICAgICAgWzE1M2I6MTE0M10KICAxMiAtPiBNZWRpb24gNzEzNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxNmJlOjAwMDNdCiAgMTMgLT4gVHlwaG9vbiBUVitSYWRpbyA5MDAzMQogIDE0IC0+IEVMU0EgRVgtVklTSU9OIDMwMFRWICAgICAgICAgICAgICAgICAgICAgWzEwNDg6MjI2Yl0KQEAgLTM2LDggKzM2LDggQEAKICAzNSAtPiBBdmVyTWVkaWEgQXZlclRWIFN0dWRpbyAzMDUgICAgICAgICAgICAgIFsxNDYxOjIxMTVdCiAgMzYgLT4gVVBNT1NUIFBVUlBMRSBUViAgICAgICAgICAgICAgICAgICAgICAgICBbMTJhYjowODAwXQogIDM3IC0+IEl0ZW1zIE11Y2hUViBQbHVzIC8gSVQtMDA1Ci0gMzggLT4gVGVycmF0ZWMgQ2luZXJneSAyMDAgVFYgICAgICAgICAgICAgICAgICBbMTUzQjoxMTUyXQotIDM5IC0+IExpZmVWaWV3IEZseVRWIFBsYXRpbnVtIE1pbmkgICAgICAgICAgICAgWzUxNjg6MDIxMl0KKyAzOCAtPiBUZXJyYXRlYyBDaW5lcmd5IDIwMCBUViAgICAgICAgICAgICAgICAgIFsxNTNiOjExNTJdCisgMzkgLT4gTGlmZVZpZXcgRmx5VFYgUGxhdGludW0gTWluaSAgICAgICAgICAgICBbNTE2ODowMjEyLDRlNDI6MDIxMl0KICA0MCAtPiBDb21wcm8gVmlkZW9NYXRlIFRWIFBWUi9GTSAgICAgICAgICAgICAgIFsxODViOmMxMDBdCiAgNDEgLT4gQ29tcHJvIFZpZGVvTWF0ZSBUViBHb2xkKyAgICAgICAgICAgICAgICBbMTg1YjpjMTAwXQogIDQyIC0+IFNhYnJlbnQgU0JULVRWRk0gKHNhYTcxMzApCkBAIC00Niw3ICs0Niw3IEBACiAgNDUgLT4gQXZlcm1lZGlhIEFWZXJUViBTdHVkaW8gMzA3ICAgICAgICAgICAgICBbMTQ2MTo5NzE1XQogIDQ2IC0+IEFWZXJNZWRpYSBDYXJkYnVzIFRWL1JhZGlvIChFNTAwKSAgICAgICAgWzE0NjE6ZDZlZV0KICA0NyAtPiBUZXJyYXRlYyBDaW5lcmd5IDQwMCBtb2JpbGUgICAgICAgICAgICAgIFsxNTNiOjExNjJdCi0gNDggLT4gVGVycmF0ZWMgQ2luZXJneSA2MDAgVFYgTUszICAgICAgICAgICAgICBbMTUzQjoxMTU4XQorIDQ4IC0+IFRlcnJhdGVjIENpbmVyZ3kgNjAwIFRWIE1LMyAgICAgICAgICAgICAgWzE1M2I6MTE1OF0KICA0OSAtPiBDb21wcm8gVmlkZW9NYXRlIEdvbGQrIFBhbCAgICAgICAgICAgICAgIFsxODViOmMyMDBdCiAgNTAgLT4gUGlubmFjbGUgUENUViAzMDBpIERWQi1UICsgUEFMICAgICAgICAgICBbMTFiZDowMDJkXQogIDUxIC0+IFByb1ZpZGVvIFBWOTUyICAgICAgICAgICAgICAgICAgICAgICAgICAgWzE1NDA6OTUyNF0KQEAgLTU2LDEyICs1NiwyNyBAQAogIDU1IC0+IExpZmVWaWV3IEZseURWQi1UIERVTyAgICAgICAgICAgICAgICAgICAgWzUxNjg6MDUwMiw1MTY4OjAzMDZdCiAgNTYgLT4gQXZlcm1lZGlhIEFWZXJUViAzMDcgICAgICAgICAgICAgICAgICAgICBbMTQ2MTphNzBhXQogIDU3IC0+IEF2ZXJtZWRpYSBBVmVyVFYgR08gMDA3IEZNICAgICAgICAgICAgICAgWzE0NjE6ZjMxZl0KLSA1OCAtPiBBRFMgVGVjaCBJbnN0YW50IFRWIChzYWE3MTM1KSAgICAgICAgICAgIFsxNDIxOjAzNTAsMTQyMTowMzcwXQorIDU4IC0+IEFEUyBUZWNoIEluc3RhbnQgVFYgKHNhYTcxMzUpICAgICAgICAgICAgWzE0MjE6MDM1MCwxNDIxOjAzNzAsMTQyMToxMzcwXQogIDU5IC0+IEt3b3JsZC9UZXZpb24gVi1TdHJlYW0gWHBlcnQgVFYgUFZSNzEzNAogIDYwIC0+IFR5cGhvb24gRFZCLVQgRHVvIERpZ2l0YWwvQW5hbG9nIENhcmRidXMgWzRlNDI6MDUwMl0KICA2MSAtPiBQaGlsaXBzIFRPVUdIIERWQi1UIHJlZmVyZW5jZSBkZXNpZ24gICAgIFsxMTMxOjIwMDRdCiAgNjIgLT4gQ29tcHJvIFZpZGVvTWF0ZSBUViBHb2xkK0lJCiAgNjMgLT4gS3dvcmxkIFhwZXJ0IFRWIFBWUjcxMzQKLSA2NCAtPiBGbHlUViBtaW5pIEFzdXMgRGlnaW1hdHJpeCAgICAgICAgICAgICAgIFsxMDQzOjAyMTAsMTA0MzowMjEwXQorIDY0IC0+IEZseVRWIG1pbmkgQXN1cyBEaWdpbWF0cml4ICAgICAgICAgICAgICAgWzEwNDM6MDIxMF0KICA2NSAtPiBWLVN0cmVhbSBTdHVkaW8gVFYgVGVybWluYXRvcgogIDY2IC0+IFl1YW4gVFVOLTkwMCAoc2FhNzEzNSkKKyA2NyAtPiBCZWhvbGRlciBCZWhvbGRUViA0MDkgRk0gICAgICAgICAgICAgICAgIFswMDAwOjQwOTFdCisgNjggLT4gR29UVmlldyA3MTM1IFBDSSAgICAgICAgICAgICAgICAgICAgICAgICBbNTQ1Njo3MTM1XQorIDY5IC0+IFBoaWxpcHMgRVVST1BBIFYzIHJlZmVyZW5jZSBkZXNpZ24gICAgICAgWzExMzE6MjAwNF0KKyA3MCAtPiBDb21wcm8gVmlkZW9tYXRlIERWQi1UMzAwICAgICAgICAgICAgICAgIFsxODViOmM5MDBdCisgNzEgLT4gQ29tcHJvIFZpZGVvbWF0ZSBEVkItVDIwMCAgICAgICAgICAgICAgICBbMTg1YjpjOTAxXQorIDcyIC0+IFJURCBFbWJlZGRlZCBUZWNobm9sb2dpZXMgVkZHNzM1MCAgICAgICAgWzE0MzU6NzM1MF0KKyA3MyAtPiBSVEQgRW1iZWRkZWQgVGVjaG5vbG9naWVzIFZGRzczMzAgICAgICAgIFsxNDM1OjczMzBdCisgNzQgLT4gTGlmZVZpZXcgRmx5VFYgUGxhdGludW0gTWluaTIgICAgICAgICAgICBbMTRjMDoxMjEyXQorIDc1IC0+IEFWZXJNZWRpYSBBVmVyVFZIRCBNQ0UgQTE4MCAgICAgICAgICAgICAgWzE0NjE6MTA0NF0KKyA3NiAtPiBTS05ldCBNb25zdGVyVFYgTW9iaWxlICAgICAgICAgICAgICAgICAgIFsxMTMxOjRlZTldCisgNzcgLT4gUGlubmFjbGUgUENUViAxMTBpIChzYWE3MTMzKSAgICAgICAgICAgICBbMTFiZDowMDJlXQorIDc4IC0+IEFTVVNUZUsgUDcxMzEgRHVhbCAgICAgICAgICAgICAgICAgICAgICAgWzEwNDM6NDg2Ml0KKyA3OSAtPiBTZWRuYS9NdWNoVFYgUEMgVFYgQ2FyZGJ1cyBUVi9SYWRpbyAoSVRPMjUgUmV2OjJCKQorIDgwIC0+IEFTVVMgRGlnaW1hdHJpeCBUViAgICAgICAgICAgICAgICAgICAgICAgWzEwNDM6MDIxMF0KKyA4MSAtPiBQaGlsaXBzIFRpZ2VyIHJlZmVyZW5jZSBkZXNpZ24gICAgICAgICAgIFsxMTMxOjIwMThdCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnR1bmVyIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC50dW5lcgppbmRleCBmNTg3NmJlLi5lYzg0MGNhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnR1bmVyCisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QudHVuZXIKQEAgLTUzLDcgKzUzLDcgQEAKIHR1bmVyPTUyIC0gVGhvbXNvbiBERFQgNzYxMCAoQVRTQy9OVFNDKQogdHVuZXI9NTMgLSBQaGlsaXBzIEZRMTI4NgogdHVuZXI9NTQgLSB0ZGE4MjkwKzc1Ci10dW5lcj01NSAtIExHIFBBTCAoVEFQRSBzZXJpZXMpCit0dW5lcj01NSAtIFRDTCAyMDAyTUIKIHR1bmVyPTU2IC0gUGhpbGlwcyBQQUwvU0VDQU0gbXVsdGkgKEZRMTIxNkFNRSBNSzQpCiB0dW5lcj01NyAtIFBoaWxpcHMgRlExMjM2QSBNSzQKIHR1bmVyPTU4IC0gWW1lYyBUVmlzaW9uIFRWRi04NTMxTUYvODgzMU1GLzg3MzFNRgpAQCAtNjUsMyArNjUsNSBAQAogdHVuZXI9NjQgLSBMRyBURFZTLUgwNjJGL1RVQTYwMzQKIHR1bmVyPTY1IC0gWW1lYyBUVkY2NlQ1LUIvREZGCiB0dW5lcj02NiAtIExHIE5UU0MgKFRBTE4gbWluaSBzZXJpZXMpCit0dW5lcj02NyAtIFBoaWxpcHMgVEQxMzE2IEh5YnJpZCBUdW5lcgordHVuZXI9NjggLSBQaGlsaXBzIFRVVjEyMzZEIEFUU0MvTlRTQyBkdWFsIGluCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L1JFQURNRS5jeDg4IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9SRUFETUUuY3g4OAppbmRleCA4OTdhYjgzLi4wNmEzM2E0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L1JFQURNRS5jeDg4CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvUkVBRE1FLmN4ODgKQEAgLTE3LDkgKzE3LDkgQEAKIAktIFRoZSBjaGlwIHNwZWNzIGZvciB0aGUgb24tY2hpcCBUViBzb3VuZCBkZWNvZGVyIGFyZSBuZXh0CiAJICB0byB1c2VsZXNzIDotLwogCS0gTmV2ZXJsZXNzIHRoZSBidWlsdGluIFRWIHNvdW5kIGRlY29kZXIgc3RhcnRzIHdvcmtpbmcgbm93LAotICAgICAgICAgIGF0IGxlYXN0IGZvciBQQUwtQkcuICBPdGhlciBUViBub3JtcyBuZWVkIG90aGVyIGNvZGUgLi4uCi0gICAgICAgICAgRk9SIEFOWSBSRVBPUlRTIE9OIFRISVMgUExFQVNFIE1FTlRJT04gVEhFIFRWIE5PUk0gWU9VIEFSRQotICAgICAgICAgIFVTSU5HLgorCSAgYXQgbGVhc3QgZm9yIFBBTC1CRy4gIE90aGVyIFRWIG5vcm1zIG5lZWQgb3RoZXIgY29kZSAuLi4KKwkgIEZPUiBBTlkgUkVQT1JUUyBPTiBUSElTIFBMRUFTRSBNRU5USU9OIFRIRSBUViBOT1JNIFlPVSBBUkUKKwkgIFVTSU5HLgogCS0gTW9zdCB0dW5lciBjaGlwcyBkbyBwcm92aWRlIG1vbm8gc291bmQsIHdoaWNoIG1heSBvciBtYXkgbm90CiAJICBiZSB1c2VhYmxlIGRlcGVuZGluZyBvbiB0aGUgYm9hcmQgZGVzaWduLiAgV2l0aCB0aGUgSGF1cHBhdWdlCiAJICBjYXJkcyBpdCB3b3Jrcywgc28gdGhlcmUgaXMgbW9ubyBzb3VuZCBhdmFpbGFibGUgYXMgZmFsbGJhY2suCkBAIC02NSw1ICs2NSw1IEBACiAKICAgR2VyZAogCi0tLSAKKy0tCiBHZXJkIEtub3JyIDxrcmF4ZWxAYnl0ZXNleC5vcmc+IFtTdVNFIExhYnNdCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L1JFQURNRS5zYWE3MTM0IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9SRUFETUUuc2FhNzEzNAppbmRleCAxZjc4OGU0Li5iOTExZjA4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L1JFQURNRS5zYWE3MTM0CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvUkVBRE1FLnNhYTcxMzQKQEAgLTc4LDUgKzc4LDUgQEAKIAogICBHZXJkCiAKLS0tIAorLS0KIEdlcmQgS25vcnIgPGtyYXhlbEBieXRlc2V4Lm9yZz4gW1N1U0UgTGFic10KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9DYXJkcyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9DYXJkcwppbmRleCA4ZjE5NDFlLi5kMzM4OTY1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvQ2FyZHMKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L0NhcmRzCkBAIC0xNDksMTEgKzE0OSwxMSBAQAogICAyKSBUaGVyZSBpcyBhIHByaW50IG9uIHRoZSBQQ0I6CiAgICAgICBMUjI1ICAgICAgID0gRmx5dmlkZW8gKFpvcmFuIFpSMzYxMjAsIFNBQTcxMTBBKQogICAgICAgTFIyNiBSZXYuTiA9IEZseXZpZGVvIElJIChCdDg0OCkKLSAgICAgICAgICAgUmV2Lk8gPSBGbHl2aWRlbyBJSSAoQnQ4NzgpCisJICAgUmV2Lk8gPSBGbHl2aWRlbyBJSSAoQnQ4NzgpCiAgICAgICBMUjM3IFJldi5DID0gRmx5dmlkZW8gRVogKENhcHR1cmUgb25seSwgWlIzNjEyMCArIFNBQTcxMTApCiAgICAgICBMUjM4IFJldi5BMT0gRmx5dmlkZW8gSUkgRVogKEJ0ODQ4IGNhcHR1cmUgb25seSkKICAgICAgIExSNTAgUmV2LlEgPSBGbHl2aWRlbyA5OCAody9lZXByb20gYW5kIFBDSSBzdWJzeXN0ZW0gSUQpCi0gICAgICAgICAgIFJldi5XID0gRmx5dmlkZW8gOTggKG5vIGVlcHJvbSkKKwkgICBSZXYuVyA9IEZseXZpZGVvIDk4IChubyBlZXByb20pCiAgICAgICBMUjUxIFJldi5FID0gRmx5dmlkZW8gOTggRVogKGNhcHR1cmUgb25seSkKICAgICAgIExSOTAgICAgICAgPSBGbHl2aWRlbyAyMDAwIChCdDg3OCkKIAkJICAgRmx5dmlkZW8gMjAwMFMgKEJ0ODc4KSB3L1N0ZXJlbyBUViAoUGFja2FnZSBpbmNsLiBMUjkxIGRhdWdodGVyYm9hcmQpCkBAIC0xNjMsNyArMTYzLDcgQEAKICAgICAgIExSMTM2CSA9IEZseXZpZGVvIDIxMDAvMzEwMCAoTG93IHByb2ZpbGUsIFNBQTcxMzAvU0FBNzEzNCkKICAgICAgIExSMTM3ICAgICAgPSBGbHl2aWRlbyBEVjIwMDAvRFYzMDAwIChTQUE3MTMwL1NBQTcxMzQgKyBJRUVFMTM5NCkKICAgICAgIExSMTM4IFJldi5DPSBGbHl2aWRlbyAyMDAwIChTQUE3MTMwKQotCSAgICAgICAgb3IgRmx5dmlkZW8gMzAwMCAoU0FBNzEzNCkgdy9TdGVyZW8gVFYKKwkJb3IgRmx5dmlkZW8gMzAwMCAoU0FBNzEzNCkgdy9TdGVyZW8gVFYKIAkJICAgVGhlc2UgZXhpc3QgaW4gdmFyaWF0aW9ucyB3L0ZNIGFuZCB3L1JlbW90ZSBzb21ldGltZXMgZGVub3RlZAogCQkgICBieSBzdWZmaXhlcyAiRk0iIGFuZCAiUiIuCiAgIDMpIFlvdSBoYXZlIGEgbGFwdG9wIChtaW5pUENJIGNhcmQpOgpAQCAtMTk3LDcgKzE5Nyw3IEBACiAgIDUwNjgwICJUViBUdW5lciBQYWwgQkciIChibHVlIHBhY2thZ2UpPSBQaXhlbHZpZXcgUFYtQlQ4NzhQKyAoUmV2IDlCKQogICA1MDY4MSAiVFYgVHVuZXIgUENJIFBhbCBJIiAodmFyaWFudCBvZiA1MDY4MCkKICAgNTA2ODIgIlRWaWV3IFRWL0ZNIFR1bmVyIFBhbCBCRyIgICAgICAgPSBGbHl2aWRlbyA5OEZNIChMUjUwIFJldi5RKQotICAgICAgICAgTm90ZTogVGhlIHBhY2thZ2UgaGFzIGEgcGljdHVyZSBvZiBDUEgwNXggKHdoaWNoIHdvdWxkIGJlIGEgcmVhbCBUVmlldykKKwkgTm90ZTogVGhlIHBhY2thZ2UgaGFzIGEgcGljdHVyZSBvZiBDUEgwNXggKHdoaWNoIHdvdWxkIGJlIGEgcmVhbCBUVmlldykKICAgNTA2ODMgIlRWIFR1bmVyIFBDSSBTRUNBTSIgKHZhcmlhbnQgb2YgNTA2ODApCiAgIDUwNjg0ICJUViBUdW5lciBQYWwgQkciICAgICAgICAgICAgICAgID0gUGl4ZWx2aWV3IDg3OFRWKFJldi4zRCkKICAgNTA2ODYgIlRWIFR1bmVyIiAgICAgICAgICAgICAgICAgICAgICAgPSBLTkMxIFRWIFN0YXRpb24KQEAgLTQxOCw5ICs0MTgsOSBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIExUOTMwNi9NRDkzMDYgPSBDUEgwNjEKICAgIExUOTQxNS9NRDk0MTUgPSBMUjkwIFJldi5GIG9yIFJldi5HCi0gICAgICAgICAgTUQ5NTkyID0gQXZlcm1lZGlhIFRWcGhvbmU5OCAoUENJX0lEPTE0NjE6MDAwMyksIFBDQi1SZXY9TTE2OElJLUIgKHcvVERBOTg3M0gpCi0gICAgICAgICAgTUQ5NzE3ID0gS05DIE9uZSAoUmV2IEQ0LCBzYWE3MTM0LCBGTTEyMTYgTUsyIHR1bmVyKQotICAgICAgICAgIE1ENTA0NCA9IEtOQyBPbmUgKFJldiBENCwgc2FhNzEzNCwgRk0xMjE2TUUgTUszIHR1bmVyKQorCSAgTUQ5NTkyID0gQXZlcm1lZGlhIFRWcGhvbmU5OCAoUENJX0lEPTE0NjE6MDAwMyksIFBDQi1SZXY9TTE2OElJLUIgKHcvVERBOTg3M0gpCisJICBNRDk3MTcgPSBLTkMgT25lIChSZXYgRDQsIHNhYTcxMzQsIEZNMTIxNiBNSzIgdHVuZXIpCisJICBNRDUwNDQgPSBLTkMgT25lIChSZXYgRDQsIHNhYTcxMzQsIEZNMTIxNk1FIE1LMyB0dW5lcikKIAogTW9kdWxhciBUZWNobm9sb2dpZXMgKHd3dy5tb2R1bGFydGVjaC5jb20pIFVLCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTQ1MywxMCArNDUzLDEwIEBACiAgICBEaXNjb3MgQURSIFBDLUthcnRlIElTQSAobm8gVFYhKQogICAgRGlzY29zIEFEUiBQQy1LYXJ0ZSBQQ0kgKHByb2JhYmx5IG5vIFRWPykKICAgIFRlY2huaS1QQy1TYXQgKFNhdC4gYW5hbG9nKQotICAgICAgICAgUmV2IDEuMiAoenIzNjEyMCwgdnB4MzIyMCwgc3R2MDAzMCwgc2FhNTI0NiwgQlNKRTMtNDk0QSkKKwkgUmV2IDEuMiAoenIzNjEyMCwgdnB4MzIyMCwgc3R2MDAzMCwgc2FhNTI0NiwgQlNKRTMtNDk0QSkKICAgIE1lZGlhZm9jdXMgSSAoenIzNjEyMC96cjM2MTI1LCBkcnAzNTEwLCBTYXQuIGFuYWxvZyArIEFEUiBSYWRpbykKICAgIE1lZGlhZm9jdXMgSUkgKHNhYTcxNDYsIFNhdC4gYW5hbG9nKQotICAgICAgICAgU2F0QURSIFJldiAyLjEgKHNhYTcxNDZhLCBzYWE3MTEzaCwgc3R2MDA1NmEsIG1zcDM0MDBjLCBkcnAzNTEwYSwgQlNLRTMtMzA3QSkKKwkgU2F0QURSIFJldiAyLjEgKHNhYTcxNDZhLCBzYWE3MTEzaCwgc3R2MDA1NmEsIG1zcDM0MDBjLCBkcnAzNTEwYSwgQlNLRTMtMzA3QSkKICAgIFNreVN0YXIgMSBEVkIgIChBVjcxMTApID0gVGVjaG5vdHJlbmQgUHJlbWl1bQogICAgU2t5U3RhciAyIERWQiAgKEIyQzIpICg9U2t5MlBDKQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvUkVBRE1FIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L1JFQURNRQppbmRleCBhNzJmNGM5Li43Y2EyMTU0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvUkVBRE1FCisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9SRUFETUUKQEAgLTQyLDkgKzQyLDkgQEAKIHRoZSBTdWJzeXN0ZW0gSUQgaW4gdGhlIHNlY29uZCBsaW5lLCBsb29rcyBsaWtlIHRoaXM6CiAKIDAwOjBhLjAgTXVsdGltZWRpYSB2aWRlbyBjb250cm9sbGVyOiBCcm9va3RyZWUgQ29ycG9yYXRpb24gQnQ4NzggKHJldiAwMikKLSAgICAgICAgU3Vic3lzdGVtOiBIYXVwcGF1Z2UgY29tcHV0ZXIgd29ya3MgSW5jLiBXaW5UVi9HTwotICAgICAgICBGbGFnczogYnVzIG1hc3RlciwgbWVkaXVtIGRldnNlbCwgbGF0ZW5jeSAzMiwgSVJRIDUKLSAgICAgICAgTWVtb3J5IGF0IGUyMDAwMDAwICgzMi1iaXQsIHByZWZldGNoYWJsZSkgW3NpemU9NEtdCisJU3Vic3lzdGVtOiBIYXVwcGF1Z2UgY29tcHV0ZXIgd29ya3MgSW5jLiBXaW5UVi9HTworCUZsYWdzOiBidXMgbWFzdGVyLCBtZWRpdW0gZGV2c2VsLCBsYXRlbmN5IDMyLCBJUlEgNQorCU1lbW9yeSBhdCBlMjAwMDAwMCAoMzItYml0LCBwcmVmZXRjaGFibGUpIFtzaXplPTRLXQogCiBvbmx5IGJ0ODc4LWJhc2VkIGNhcmRzIGNhbiBoYXZlIGEgc3Vic3lzdGVtIElEICh3aGljaCBkb2VzIG5vdCBtZWFuCiB0aGF0IGV2ZXJ5IGNhcmQgcmVhbGx5IGhhcyBvbmUpLiAgYnQ4NDggY2FyZHMgY2FuJ3QgaGF2ZSBhIFN1YnN5c3RlbQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L1NvdW5kLUZBUSBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9Tb3VuZC1GQVEKaW5kZXggYjhjOWMyNi4uMWU2MzI4ZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L1NvdW5kLUZBUQorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvU291bmQtRkFRCkBAIC02MSw4ICs2MSw4IEBACiBzdHJ1Y3QgdHZjYXJkCiB7CiAJWyAuLi4gXQotICAgICAgICB1MzIgZ3Bpb21hc2s7Ci0gICAgICAgIHUzMiBhdWRpb211eFs2XTsgLyogVHVuZXIsIFJhZGlvLCBleHRlcm5hbCwgaW50ZXJuYWwsIG11dGUsIHN0ZXJlbyAqLworCXUzMiBncGlvbWFzazsKKwl1MzIgYXVkaW9tdXhbNl07IC8qIFR1bmVyLCBSYWRpbywgZXh0ZXJuYWwsIGludGVybmFsLCBtdXRlLCBzdGVyZW8gKi8KIH07CiAKIGdwaW9tYXNrIHNwZWNpZmllcyB3aGljaCBwaW5zIGFyZSB1c2VkIHRvIGNvbnRyb2wgdGhlIGF1ZGlvIG11eCBjaGlwLgpAQCAtMTI2LDExICsxMjYsMTEgQEAKIHBsbCAgICAgICAgICAgICAtIHNhbWUgYXMgcGxsPSBpbnNtb2Qgb3B0aW9uCiB0dW5lcl90eXBlICAgICAgLSBzYW1lIGFzIHR1bmVyPSBpbnNtb2Qgb3B0aW9uCiAqX21vZHVsZW5hbWUgICAgLSBoaW50IHdoZW5ldmVyIHNvbWUgY2FyZCBuZWVkcyB0aGlzIG9yIHRoYXQgYXVkaW8KLSAgICAgICAgICAgICAgICAgIG1vZHVsZSBsb2FkZWQgdG8gd29yayBwcm9wZXJseS4KKwkJICBtb2R1bGUgbG9hZGVkIHRvIHdvcmsgcHJvcGVybHkuCiBoYXNfcmFkaW8JLSB3aGVuZXZlciB0aGlzIFRWIGNhcmQgaGFzIGEgcmFkaW8gdHVuZXIuCiBub19tc3AzNHh4CS0gIjEiIGRpc2FibGVzIGxvYWRpbmcgb2YgbXNwMzQwMC5vIG1vZHVsZQotbm9fdGRhOTg3NQktICIxIiBkaXNhYmxlcyBsb2FkaW5nIG9mIHRkYTk4NzUubyBtb2R1bGUgCi1uZWVkc190dmF1ZGlvCS0gc2V0IHRvICIxIiB0byBsb2FkIHR2YXVkaW8ubyBtb2R1bGUgCitub190ZGE5ODc1CS0gIjEiIGRpc2FibGVzIGxvYWRpbmcgb2YgdGRhOTg3NS5vIG1vZHVsZQorbmVlZHNfdHZhdWRpbwktIHNldCB0byAiMSIgdG8gbG9hZCB0dmF1ZGlvLm8gbW9kdWxlCiAKIElmIHNvbWUgY29uZmlnIGl0ZW0gaXMgc3BlY2lmaWVkIGJvdGggZnJvbSB0aGUgdHZjYXJkcyBhcnJheSBhbmQgYXMKIGluc21vZCBvcHRpb24sIHRoZSBpbnNtb2Qgb3B0aW9uIHRha2VzIHByZWNlZGVuY2UuCkBAIC0xNDQsNSArMTQ0LDUgQEAKIAogUFM6IElmIHlvdSBoYXZlIGEgbmV3IHdvcmtpbmcgZW50cnksIG1haWwgaXQgdG8gbWUuCiAKLS0tIAorLS0KIEdlcmQgS25vcnIgPGtyYXhlbEBieXRlc2V4Lm9yZz4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9UdW5lcnMgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvVHVuZXJzCmluZGV4IGQxOGZiYzcuLjBhMzcxZDMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9UdW5lcnMKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L1R1bmVycwpAQCAtMjEsNyArMjEsNyBAQAogICAgSj0gTlRTQy1KYXBhbgogICAgTD0gU2VjYW0gTEwKICAgIE09IEJHK0krREsKLSAgIE49IE5UU0MgCisgICBOPSBOVFNDCiAgICBRPSBCRytJK0RLK0xMCiAgWzg5XTogPwogIFsxMjVdOgpAQCAtOTYsNyArOTYsNyBAQAogICBUQURDLUgwMDJGOiBOVFNDIChMLDE3NS80MTA/OyAyLUIsIEMtVysxMSwgVysxMi02OSkKICAgVEFEQy1NMjAxRDogUEFMIEQvSytCL0crSSAoTCwxNDMvNDI1KSAgKHNvdW5kIGNvbnRyb2wgYXQgSTJDIGFkZHJlc3MgMHhjOCkKICAgVEFEQy1UMDAzRjogTlRTQyBUYWl3YW4gIChMLDE3NS80MTA/OyAyLUIsIEMtVysxMSwgVysxMi02OSkKLSAgU3VmZml4OiAKKyAgU3VmZml4OgogICAgIFA9IFN0YW5kYXJkIHBob25vIGZlbWFsZSBzb2NrZXQKICAgICBEPSBJRUMgZmVtYWxlIHNvY2tldAogICAgIEY9IEYtY29ubmVjdG9yCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2xpZmV2aWV3LnR4dCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvbGlmZXZpZXcudHh0CmluZGV4IGIwN2VhNzkuLjA1ZjllYjUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvbGlmZXZpZXcudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvbGlmZXZpZXcudHh0CkBAIC0xMCwzMyArMTAsMzMgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBzYWE3MTM0OgotICAgICAgICAgICAgICAgIC8qIExpZmVWaWV3IEZseVRWIFBsYXRpbnVtIEZNIChMUjIxNFdGKSAqLwotICAgICAgICAgICAgICAgIC8qICJQZXRlciBNaXNzZWwgPHBldGVyLm1pc3NlbEBvbmxpbmVob21lLmRlPiAqLwotICAgICAgICAgICAgICAgIC5uYW1lICAgICAgICAgICA9ICJMaWZlVmlldyBGbHlUViBQbGF0aW51bSBGTSIsCi0gICAgICAgICAgICAgICAgLyogICAgICBHUDI3ICAgIE1EVDIwMDUgUEI0IHBpbiAxMCAqLwotICAgICAgICAgICAgICAgIC8qICAgICAgR1AyNiAgICBNRFQyMDA1IFBCMyBwaW4gOSAqLwotICAgICAgICAgICAgICAgIC8qICAgICAgR1AyNSAgICBNRFQyMDA1IFBCMiBwaW4gOCAqLwotICAgICAgICAgICAgICAgIC8qICAgICAgR1AyMyAgICBNRFQyMDA1IFBCMSBwaW4gNyAqLwotICAgICAgICAgICAgICAgIC8qICAgICAgR1AyMiAgICBNRFQyMDA1IFBCMCBwaW4gNiAqLwotICAgICAgICAgICAgICAgIC8qICAgICAgR1AyMSAgICBNRFQyMDA1IFBCNSBwaW4gMTEgKi8KLSAgICAgICAgICAgICAgICAvKiAgICAgIEdQMjAgICAgTURUMjAwNSBQQjYgcGluIDEyICovCi0gICAgICAgICAgICAgICAgLyogICAgICBHUDE5ICAgIE1EVDIwMDUgUEI3IHBpbiAxMyAqLwotICAgICAgICAgICAgICAgIC8qICAgICAgbmMgICAgICBNRFQyMDA1IFBBMyBwaW4gMiAqLwotICAgICAgICAgICAgICAgIC8qICAgICAgUmVtb3RlICBNRFQyMDA1IFBBMiBwaW4gMSAqLwotICAgICAgICAgICAgICAgIC8qICAgICAgR1AxOCAgICBNRFQyMDA1IFBBMSBwaW4gMTggKi8KLSAgICAgICAgICAgICAgICAvKiAgICAgIG5jICAgICAgTURUMjAwNSBQQTAgcGluIDE3IHN0cmFwIGxvdyAqLworCQkvKiBMaWZlVmlldyBGbHlUViBQbGF0aW51bSBGTSAoTFIyMTRXRikgKi8KKwkJLyogIlBldGVyIE1pc3NlbCA8cGV0ZXIubWlzc2VsQG9ubGluZWhvbWUuZGU+ICovCisJCS5uYW1lICAgICAgICAgICA9ICJMaWZlVmlldyBGbHlUViBQbGF0aW51bSBGTSIsCisJCS8qICAgICAgR1AyNyAgICBNRFQyMDA1IFBCNCBwaW4gMTAgKi8KKwkJLyogICAgICBHUDI2ICAgIE1EVDIwMDUgUEIzIHBpbiA5ICovCisJCS8qICAgICAgR1AyNSAgICBNRFQyMDA1IFBCMiBwaW4gOCAqLworCQkvKiAgICAgIEdQMjMgICAgTURUMjAwNSBQQjEgcGluIDcgKi8KKwkJLyogICAgICBHUDIyICAgIE1EVDIwMDUgUEIwIHBpbiA2ICovCisJCS8qICAgICAgR1AyMSAgICBNRFQyMDA1IFBCNSBwaW4gMTEgKi8KKwkJLyogICAgICBHUDIwICAgIE1EVDIwMDUgUEI2IHBpbiAxMiAqLworCQkvKiAgICAgIEdQMTkgICAgTURUMjAwNSBQQjcgcGluIDEzICovCisJCS8qICAgICAgbmMgICAgICBNRFQyMDA1IFBBMyBwaW4gMiAqLworCQkvKiAgICAgIFJlbW90ZSAgTURUMjAwNSBQQTIgcGluIDEgKi8KKwkJLyogICAgICBHUDE4ICAgIE1EVDIwMDUgUEExIHBpbiAxOCAqLworCQkvKiAgICAgIG5jICAgICAgTURUMjAwNSBQQTAgcGluIDE3IHN0cmFwIGxvdyAqLwogCi0gICAgICAgICAgICAgICAgLyogICAgICBHUDE3ICAgIFN0cmFwICJHUDciPUhpZ2ggKi8KLSAgICAgICAgICAgICAgICAvKiAgICAgIEdQMTYgICAgU3RyYXAgIkdQNiI9SGlnaAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwPVJhZGlvIDE9VFYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRHJpdmVzIFNBNjMwRCBFTkNIMSBhbmQgSEVGNDA1MiBBMSBwaW5zCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGRvIEZNIHJhZGlvIHRocm91Z2ggU0lGIGlucHV0ICovCi0gICAgICAgICAgICAgICAgLyogICAgICBHUDE1ICAgIG5jICovCi0gICAgICAgICAgICAgICAgLyogICAgICBHUDE0ICAgIG5jICovCi0gICAgICAgICAgICAgICAgLyogICAgICBHUDEzICAgIG5jICovCi0gICAgICAgICAgICAgICAgLyogICAgICBHUDEyICAgIFN0cmFwICJHUDUiID0gSGlnaCAqLwotICAgICAgICAgICAgICAgIC8qICAgICAgR1AxMSAgICBTdHJhcCAiR1A0IiA9IEhpZ2ggKi8KLSAgICAgICAgICAgICAgICAvKiAgICAgIEdQMTAgICAgU3RyYXAgIkdQMyIgPSBIaWdoICovCi0gICAgICAgICAgICAgICAgLyogICAgICBHUDA5ICAgIFN0cmFwICJHUDIiID0gTG93ICovCi0gICAgICAgICAgICAgICAgLyogICAgICBHUDA4ICAgIFN0cmFwICJHUDEiID0gTG93ICovCi0gICAgICAgICAgICAgICAgLyogICAgICBHUDA3LjAwIG5jICovCisJCS8qICAgICAgR1AxNyAgICBTdHJhcCAiR1A3Ij1IaWdoICovCisJCS8qICAgICAgR1AxNiAgICBTdHJhcCAiR1A2Ij1IaWdoCisJCQkJMD1SYWRpbyAxPVRWCisJCQkJRHJpdmVzIFNBNjMwRCBFTkNIMSBhbmQgSEVGNDA1MiBBMSBwaW5zCisJCQkJdG8gZG8gRk0gcmFkaW8gdGhyb3VnaCBTSUYgaW5wdXQgKi8KKwkJLyogICAgICBHUDE1ICAgIG5jICovCisJCS8qICAgICAgR1AxNCAgICBuYyAqLworCQkvKiAgICAgIEdQMTMgICAgbmMgKi8KKwkJLyogICAgICBHUDEyICAgIFN0cmFwICJHUDUiID0gSGlnaCAqLworCQkvKiAgICAgIEdQMTEgICAgU3RyYXAgIkdQNCIgPSBIaWdoICovCisJCS8qICAgICAgR1AxMCAgICBTdHJhcCAiR1AzIiA9IEhpZ2ggKi8KKwkJLyogICAgICBHUDA5ICAgIFN0cmFwICJHUDIiID0gTG93ICovCisJCS8qICAgICAgR1AwOCAgICBTdHJhcCAiR1AxIiA9IExvdyAqLworCQkvKiAgICAgIEdQMDcuMDAgbmMgKi8KZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggMzAyOGQ0Yi4uMjMxM2RlMiAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKKysrIGIvTUFJTlRBSU5FUlMKQEAgLTcwNyw3ICs3MDcsNyBAQAogUDoJQXJuYWxkbyBDYXJ2YWxobyBkZSBNZWxvCiBNOglhY21lQG1hbmRyaXZhLmNvbQogTDoJZGNjcEB2Z2VyLmtlcm5lbC5vcmcKLVc6CWh0dHA6Ly93d3cud2x1Zy5vcmcubnovRENDUAorVzoJaHR0cDovL2xpbnV4LW5ldC5vc2RsLm9yZy9pbmRleC5waHAvRENDUAogUzoJTWFpbnRhaW5lZAogCiBERUNuZXQgTkVUV09SSyBMQVlFUgpAQCAtMTMzMCw2ICsxMzMwLDI0IEBACiBXOglodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2UxMDAwLwogUzoJU3VwcG9ydGVkCiAKK0lOVEVMIFBSTy9XSVJFTEVTUyAyMTAwIE5FVFdPUksgQ09OTkVDVElPTiBTVVBQT1JUCitQOglZaSBaaHUKK006CXlpLnpodUBpbnRlbC5jb20KK1A6CUphbWVzIEtldHJlbm9zCitNOglqa2V0cmVub0BsaW51eC5pbnRlbC5jb20KK0w6CWh0dHA6Ly9saXN0cy5zb3VyY2Vmb3JnZS5uZXQvbWFpbG1hbi9saXN0aW5mby9pcHcyMTAwLWRldmVsCitXOglodHRwOi8vaXB3MjEwMC5zb3VyY2Vmb3JnZS5uZXQKK1M6CVN1cHBvcnRlZAorCitJTlRFTCBQUk8vV0lSRUxFU1MgMjkxNUFCRyBORVRXT1JLIENPTk5FQ1RJT04gU1VQUE9SVAorUDoJWWkgWmh1CitNOgl5aS56aHVAaW50ZWwuY29tCitQOglKYW1lcyBLZXRyZW5vcworTToJamtldHJlbm9AbGludXguaW50ZWwuY29tCitMOglodHRwOi8vbGlzdHMuc291cmNlZm9yZ2UubmV0L21haWxtYW4vbGlzdGluZm8vaXB3MjEwMC1kZXZlbAorVzoJaHR0cDovL2lwdzIyMDAuc291cmNlZm9yZ2UubmV0CitTOglTdXBwb3J0ZWQKKwogSU9DMyBEUklWRVIKIFA6CVJhbGYgQmFlY2hsZQogTToJcmFsZkBsaW51eC1taXBzLm9yZwpkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQppbmRleCBlYTk2ZGExLi5jMDQxYTQzIDEwMDY0NAotLS0gYS9NYWtlZmlsZQorKysgYi9NYWtlZmlsZQpAQCAtMTY4LDcgKzE2OCw4IEBACiAKIFNVQkFSQ0ggOj0gJChzaGVsbCB1bmFtZSAtbSB8IHNlZCAtZSBzL2kuODYvaTM4Ni8gLWUgcy9zdW40dS9zcGFyYzY0LyBcCiAJCQkJICAtZSBzL2FybS4qL2FybS8gLWUgcy9zYTExMC9hcm0vIFwKLQkJCQkgIC1lIHMvczM5MHgvczM5MC8gLWUgcy9wYXJpc2M2NC9wYXJpc2MvICkKKwkJCQkgIC1lIHMvczM5MHgvczM5MC8gLWUgcy9wYXJpc2M2NC9wYXJpc2MvIFwKKwkJCQkgIC1lIHMvcHBjNjQvcG93ZXJwYy8gKQogCiAjIENyb3NzIGNvbXBpbGluZyBhbmQgc2VsZWN0aW5nIGRpZmZlcmVudCBzZXQgb2YgZ2NjL2Jpbi11dGlscwogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTM0Nyw3ICszNDgsNyBAQAogIyBOZWVkZWQgdG8gYmUgY29tcGF0aWJsZSB3aXRoIHRoZSBPPSBvcHRpb24KIExJTlVYSU5DTFVERSAgICA6PSAtSWluY2x1ZGUgXAogICAgICAgICAgICAgICAgICAgICQoaWYgJChLQlVJTERfU1JDKSwtSWluY2x1ZGUyIC1JJChzcmN0cmVlKS9pbmNsdWRlKSBcCi0JCSAgIC1pbWFjcm9zIGluY2x1ZGUvbGludXgvYXV0b2NvbmYuaAorCQkgICAtaW5jbHVkZSBpbmNsdWRlL2xpbnV4L2F1dG9jb25mLmgKIAogQ1BQRkxBR1MgICAgICAgIDo9IC1EX19LRVJORUxfXyAkKExJTlVYSU5DTFVERSkKIApAQCAtNDA3LDcgKzQwOCw3IEBACiAjIG9mIG1ha2Ugc28gLmNvbmZpZyBpcyBub3QgaW5jbHVkZWQgaW4gdGhpcyBjYXNlIGVpdGhlciAoZm9yICpjb25maWcpLgogCiBuby1kb3QtY29uZmlnLXRhcmdldHMgOj0gY2xlYW4gbXJwcm9wZXIgZGlzdGNsZWFuIFwKLQkJCSBjc2NvcGUgVEFHUyB0YWdzIGhlbHAgJWRvY3MgY2hlY2slCisJCQkgY3Njb3BlIFRBR1MgdGFncyBoZWxwICVkb2NzIGNoZWNrJSBrZXJuZWxyZWxlYXNlCiAKIGNvbmZpZy10YXJnZXRzIDo9IDAKIG1peGVkLXRhcmdldHMgIDo9IDAKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvYWxwaGEva2VybmVsL3Byb2Nlc3MuYwppbmRleCBlYjIwYzNhLi5hODY4MjYxIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvcHJvY2Vzcy5jCkBAIC00MywyMSArNDMsMTcgQEAKICNpbmNsdWRlICJwcm90by5oIgogI2luY2x1ZGUgInBjaV9pbXBsLmgiCiAKLXZvaWQgZGVmYXVsdF9pZGxlKHZvaWQpCi17Ci0JYmFycmllcigpOwotfQotCiB2b2lkCiBjcHVfaWRsZSh2b2lkKQogeworCXNldF90aHJlYWRfZmxhZyhUSUZfUE9MTElOR19OUkZMQUcpOworCiAJd2hpbGUgKDEpIHsKLQkJdm9pZCAoKmlkbGUpKHZvaWQpID0gZGVmYXVsdF9pZGxlOwogCQkvKiBGSVhNRSAtLSBFVjYgYW5kIExDQTQ1IGtub3cgaG93IHRvIHBvd2VyIGRvd24KIAkJICAgdGhlIENQVS4gICovCiAKIAkJd2hpbGUgKCFuZWVkX3Jlc2NoZWQoKSkKLQkJCWlkbGUoKTsKKwkJCWNwdV9yZWxheCgpOwogCQlzY2hlZHVsZSgpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL0tjb25maWcgYi9hcmNoL2FybS9LY29uZmlnCmluZGV4IDkxZDVlZjMuLjNkZjdjYmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL0tjb25maWcKKysrIGIvYXJjaC9hcm0vS2NvbmZpZwpAQCAtMjM5LDYgKzIzOSw4IEBACiAKIHNvdXJjZSAiYXJjaC9hcm0vbWFjaC1vbWFwMS9LY29uZmlnIgogCitzb3VyY2UgImFyY2gvYXJtL21hY2gtb21hcDIvS2NvbmZpZyIKKwogc291cmNlICJhcmNoL2FybS9tYWNoLXMzYzI0MTAvS2NvbmZpZyIKIAogc291cmNlICJhcmNoL2FybS9tYWNoLWxoN2E0MHgvS2NvbmZpZyIKQEAgLTM1Niw2ICszNTgsMTYgQEAKIAkgIFNheSBZIGhlcmUgdG8gZXhwZXJpbWVudCB3aXRoIHR1cm5pbmcgQ1BVcyBvZmYgYW5kIG9uLiAgQ1BVcwogCSAgY2FuIGJlIGNvbnRyb2xsZWQgdGhyb3VnaCAvc3lzL2RldmljZXMvc3lzdGVtL2NwdS4KIAorY29uZmlnIExPQ0FMX1RJTUVSUworCWJvb2wgIlVzZSBsb2NhbCB0aW1lciBpbnRlcnJ1cHRzIgorCWRlcGVuZHMgb24gU01QICYmIFJFQUxWSUVXX01QQ09SRQorCWRlZmF1bHQgeQorCWhlbHAKKwkgIEVuYWJsZSBzdXBwb3J0IGZvciBsb2NhbCB0aW1lcnMgb24gU01QIHBsYXRmb3JtcywgcmF0aGVyIHRoZW4gdGhlCisJICBsZWdhY3kgSVBJIGJyb2FkY2FzdCBtZXRob2QuICBMb2NhbCB0aW1lcnMgYWxsb3dzIHRoZSBzeXN0ZW0KKwkgIGFjY291bnRpbmcgdG8gYmUgc3ByZWFkIGFjcm9zcyB0aGUgdGltZXIgaW50ZXJ2YWwsIHByZXZlbnRpbmcgYQorCSAgInRodW5kZXJpbmcgaGVyZCIgYXQgZXZlcnkgdGltZXIgdGljay4KKwogY29uZmlnIFBSRUVNUFQKIAlib29sICJQcmVlbXB0aWJsZSBLZXJuZWwgKEVYUEVSSU1FTlRBTCkiCiAJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL01ha2VmaWxlIGIvYXJjaC9hcm0vTWFrZWZpbGUKaW5kZXggMTE0Y2RhN2YuLjgxYmQyMTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL01ha2VmaWxlCkBAIC05Myw2ICs5Myw3IEBACiAgbWFjaGluZS0kKENPTkZJR19BUkNIX0lYUDRYWCkJICAgOj0gaXhwNHh4CiAgbWFjaGluZS0kKENPTkZJR19BUkNIX0lYUDIwMDApICAgIDo9IGl4cDIwMDAKICBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfT01BUDEpCSAgIDo9IG9tYXAxCisgbWFjaGluZS0kKENPTkZJR19BUkNIX09NQVAyKQkgICA6PSBvbWFwMgogICBpbmNkaXItJChDT05GSUdfQVJDSF9PTUFQKQkgICA6PSBvbWFwCiAgbWFjaGluZS0kKENPTkZJR19BUkNIX1MzQzI0MTApCSAgIDo9IHMzYzI0MTAKICBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfTEg3QTQwWCkJICAgOj0gbGg3YTQweApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL21pc2MuYyBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKaW5kZXggNTBmMTNlZS4uNWFiOTQ1OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL21pc2MuYworKysgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvbWlzYy5jCkBAIC0yODMsOCArMjgzLDE0IEBACiAJcHV0c3RyKCIuIik7CiB9CiAKKyNpZm5kZWYgYXJjaF9lcnJvcgorI2RlZmluZSBhcmNoX2Vycm9yKHgpCisjZW5kaWYKKwogc3RhdGljIHZvaWQgZXJyb3IoY2hhciAqeCkKIHsKKwlhcmNoX2Vycm9yKHgpOworCiAJcHV0c3RyKCJcblxuIik7CiAJcHV0c3RyKHgpOwogCXB1dHN0cigiXG5cbiAtLSBTeXN0ZW0gaGFsdGVkIik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb21tb24vbG9jb21vLmMgYi9hcmNoL2FybS9jb21tb24vbG9jb21vLmMKaW5kZXggYWQ1NTY4MC4uNTU3ZTUyYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29tbW9uL2xvY29tby5jCisrKyBiL2FyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYwpAQCAtNTUwLDkgKzU1MCw5IEBACiAJdTE2CUxDTV9TUElNRDsKIH07CiAKLXN0YXRpYyBpbnQgbG9jb21vX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IGxvY29tb19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCXN0cnVjdCBsb2NvbW8gKmxjaGlwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGxvY29tbyAqbGNoaXAgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBsb2NvbW9fc2F2ZV9kYXRhICpzYXZlOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTU2MCw3ICs1NjAsNyBAQAogCWlmICghc2F2ZSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlkZXYtPnBvd2VyLnNhdmVkX3N0YXRlID0gKHZvaWQgKikgc2F2ZTsKKwlkZXYtPmRldi5wb3dlci5zYXZlZF9zdGF0ZSA9ICh2b2lkICopIHNhdmU7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbGNoaXAtPmxvY2ssIGZsYWdzKTsKIApAQCAtNTk0LDE0ICs1OTQsMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBsb2NvbW9fcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgbG9jb21vX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGxvY29tbyAqbGNoaXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgbG9jb21vICpsY2hpcCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IGxvY29tb19zYXZlX2RhdGEgKnNhdmU7CiAJdW5zaWduZWQgbG9uZyByOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJCi0Jc2F2ZSA9IChzdHJ1Y3QgbG9jb21vX3NhdmVfZGF0YSAqKSBkZXYtPnBvd2VyLnNhdmVkX3N0YXRlOworCXNhdmUgPSAoc3RydWN0IGxvY29tb19zYXZlX2RhdGEgKikgZGV2LT5kZXYucG93ZXIuc2F2ZWRfc3RhdGU7CiAJaWYgKCFzYXZlKQogCQlyZXR1cm4gMDsKIApAQCAtNzYwLDI3ICs3NjAsMjYgQEAKIAlrZnJlZShsY2hpcCk7CiB9CiAKLXN0YXRpYyBpbnQgbG9jb21vX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgbG9jb21vX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJc3RydWN0IHJlc291cmNlICptZW07CiAJaW50IGlycTsKIAotCW1lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCWlmICghbWVtKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlycSA9IHBsYXRmb3JtX2dldF9pcnEoZGV2LCAwKTsKIAotCXJldHVybiBfX2xvY29tb19wcm9iZShkZXYsIG1lbSwgaXJxKTsKKwlyZXR1cm4gX19sb2NvbW9fcHJvYmUoJmRldi0+ZGV2LCBtZW0sIGlycSk7CiB9CiAKLXN0YXRpYyBpbnQgbG9jb21vX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGxvY29tb19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBsb2NvbW8gKmxjaGlwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGxvY29tbyAqbGNoaXAgPSBwbGF0Zm9ybV9fZ2V0X2RydmRhdGEoZGV2KTsKIAogCWlmIChsY2hpcCkgewogCQlfX2xvY29tb19yZW1vdmUobGNoaXApOwotCQlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKwkJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTc5MiwxNSArNzkxLDE2IEBACiAgKgl0aGUgcGVyLW1hY2hpbmUgbGV2ZWwsIGFuZCB0aGVuIGhhdmUgdGhpcyBkcml2ZXIgcGljawogICoJdXAgdGhlIHJlZ2lzdGVyZWQgZGV2aWNlcy4KICAqLwotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGxvY29tb19kZXZpY2VfZHJpdmVyID0gewotCS5uYW1lCQk9ICJsb2NvbW8iLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbG9jb21vX2RldmljZV9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IGxvY29tb19wcm9iZSwKIAkucmVtb3ZlCQk9IGxvY29tb19yZW1vdmUsCiAjaWZkZWYgQ09ORklHX1BNCiAJLnN1c3BlbmQJPSBsb2NvbW9fc3VzcGVuZCwKIAkucmVzdW1lCQk9IGxvY29tb19yZXN1bWUsCiAjZW5kaWYKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAibG9jb21vIiwKKwl9LAogfTsKIAogLyoKQEAgLTExMjYsMTMgKzExMjYsMTMgQEAKIHsKIAlpbnQgcmV0ID0gYnVzX3JlZ2lzdGVyKCZsb2NvbW9fYnVzX3R5cGUpOwogCWlmIChyZXQgPT0gMCkKLQkJZHJpdmVyX3JlZ2lzdGVyKCZsb2NvbW9fZGV2aWNlX2RyaXZlcik7CisJCXBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbG9jb21vX2RldmljZV9kcml2ZXIpOwogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBsb2NvbW9fZXhpdCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZsb2NvbW9fZGV2aWNlX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmxvY29tb19kZXZpY2VfZHJpdmVyKTsKIAlidXNfdW5yZWdpc3RlcigmbG9jb21vX2J1c190eXBlKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jIGIvYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jCmluZGV4IDE3NGFhODYuLjdiMDdhY2IgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbW1vbi9zYTExMTEuYworKysgYi9hcmNoL2FybS9jb21tb24vc2ExMTExLmMKQEAgLTgwMSw5ICs4MDEsOSBAQAogCiAjaWZkZWYgQ09ORklHX1BNCiAKLXN0YXRpYyBpbnQgc2ExMTExX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHNhMTExMV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCXN0cnVjdCBzYTExMTEgKnNhY2hpcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBzYTExMTEgKnNhY2hpcCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IHNhMTExMV9zYXZlX2RhdGEgKnNhdmU7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBpbnQgdmFsOwpAQCAtODEyLDcgKzgxMiw3IEBACiAJc2F2ZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzYTExMTFfc2F2ZV9kYXRhKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzYXZlKQogCQlyZXR1cm4gLUVOT01FTTsKLQlkZXYtPnBvd2VyLnNhdmVkX3N0YXRlID0gc2F2ZTsKKwlkZXYtPmRldi5wb3dlci5zYXZlZF9zdGF0ZSA9IHNhdmU7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc2FjaGlwLT5sb2NrLCBmbGFncyk7CiAKQEAgLTg1OSwxNCArODU5LDE0IEBACiAgKglyZXN0b3JlZCBieSB0aGVpciByZXNwZWN0aXZlIGRyaXZlcnMsIGFuZCBtdXN0IGJlIGNhbGxlZAogICoJdmlhIExETSBhZnRlciB0aGlzIGZ1bmN0aW9uLgogICovCi1zdGF0aWMgaW50IHNhMTExMV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBzYTExMTFfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3Qgc2ExMTExICpzYWNoaXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgc2ExMTExICpzYWNoaXAgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBzYTExMTFfc2F2ZV9kYXRhICpzYXZlOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGlkOwogCXZvaWQgX19pb21lbSAqYmFzZTsKIAotCXNhdmUgPSAoc3RydWN0IHNhMTExMV9zYXZlX2RhdGEgKilkZXYtPnBvd2VyLnNhdmVkX3N0YXRlOworCXNhdmUgPSAoc3RydWN0IHNhMTExMV9zYXZlX2RhdGEgKilkZXYtPmRldi5wb3dlci5zYXZlZF9zdGF0ZTsKIAlpZiAoIXNhdmUpCiAJCXJldHVybiAwOwogCkBAIC04NzksNyArODc5LDcgQEAKIAlpZCA9IHNhMTExMV9yZWFkbChzYWNoaXAtPmJhc2UgKyBTQTExMTFfU0tJRCk7CiAJaWYgKChpZCAmIFNLSURfSURfTUFTSykgIT0gU0tJRF9TQTExMTFfSUQpIHsKIAkJX19zYTExMTFfcmVtb3ZlKHNhY2hpcCk7Ci0JCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOwogCQlrZnJlZShzYXZlKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtOTExLDcgKzkxMSw3IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYWNoaXAtPmxvY2ssIGZsYWdzKTsKIAotCWRldi0+cG93ZXIuc2F2ZWRfc3RhdGUgPSBOVUxMOworCWRldi0+ZGV2LnBvd2VyLnNhdmVkX3N0YXRlID0gTlVMTDsKIAlrZnJlZShzYXZlKTsKIAogCXJldHVybiAwOwpAQCAtOTIyLDkgKzkyMiw4IEBACiAjZGVmaW5lIHNhMTExMV9yZXN1bWUgIE5VTEwKICNlbmRpZgogCi1zdGF0aWMgaW50IHNhMTExMV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHNhMTExMV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgcmVzb3VyY2UgKm1lbTsKIAlpbnQgaXJxOwogCkBAIC05MzMsMjAgKzkzMiwyMCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwogCi0JcmV0dXJuIF9fc2ExMTExX3Byb2JlKGRldiwgbWVtLCBpcnEpOworCXJldHVybiBfX3NhMTExMV9wcm9iZSgmcGRldi0+ZGV2LCBtZW0sIGlycSk7CiB9CiAKLXN0YXRpYyBpbnQgc2ExMTExX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHNhMTExMV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3Qgc2ExMTExICpzYWNoaXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgc2ExMTExICpzYWNoaXAgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAogCWlmIChzYWNoaXApIHsKIAkJX19zYTExMTFfcmVtb3ZlKHNhY2hpcCk7Ci0JCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAogI2lmZGVmIENPTkZJR19QTQotCQlrZnJlZShkZXYtPnBvd2VyLnNhdmVkX3N0YXRlKTsKLQkJZGV2LT5wb3dlci5zYXZlZF9zdGF0ZSA9IE5VTEw7CisJCWtmcmVlKHBkZXYtPmRldi5wb3dlci5zYXZlZF9zdGF0ZSk7CisJCXBkZXYtPmRldi5wb3dlci5zYXZlZF9zdGF0ZSA9IE5VTEw7CiAjZW5kaWYKIAl9CiAKQEAgLTk2MiwxMyArOTYxLDE0IEBACiAgKglXZSBhbHNvIG5lZWQgdG8gaGFuZGxlIHRoZSBTRFJBTSBjb25maWd1cmF0aW9uIGZvcgogICoJUFhBMjUwL1NBMTExMCBtYWNoaW5lIGNsYXNzZXMuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBzYTExMTFfZGV2aWNlX2RyaXZlciA9IHsKLQkubmFtZQkJPSAic2ExMTExIiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNhMTExMV9kZXZpY2VfZHJpdmVyID0gewogCS5wcm9iZQkJPSBzYTExMTFfcHJvYmUsCiAJLnJlbW92ZQkJPSBzYTExMTFfcmVtb3ZlLAogCS5zdXNwZW5kCT0gc2ExMTExX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBzYTExMTFfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJzYTExMTEiLAorCX0sCiB9OwogCiAvKgpAQCAtMTI1NiwxMyArMTI1NiwxMyBAQAogewogCWludCByZXQgPSBidXNfcmVnaXN0ZXIoJnNhMTExMV9idXNfdHlwZSk7CiAJaWYgKHJldCA9PSAwKQotCQlkcml2ZXJfcmVnaXN0ZXIoJnNhMTExMV9kZXZpY2VfZHJpdmVyKTsKKwkJcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzYTExMTFfZGV2aWNlX2RyaXZlcik7CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHNhMTExMV9leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJnNhMTExMV9kZXZpY2VfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc2ExMTExX2RldmljZV9kcml2ZXIpOwogCWJ1c191bnJlZ2lzdGVyKCZzYTExMTFfYnVzX3R5cGUpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb21tb24vc2Nvb3AuYyBiL2FyY2gvYXJtL2NvbW1vbi9zY29vcC5jCmluZGV4IGJiNGVmZjYuLjMyOTI0YzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbW1vbi9zY29vcC5jCisrKyBiL2FyY2gvYXJtL2NvbW1vbi9zY29vcC5jCkBAIC0xOSwxMiArMTksNiBAQAogCiAjZGVmaW5lIFNDT09QX1JFRyhkLGFkcikgKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQqKShkICsoYWRyKSkpCiAKLS8qIFBDTUNJQSB0byBTY29vcCBsaW5rYWdlIHN0cnVjdHVyZXMgZm9yIHB4YTJ4eF9zaGFycHNsLmMKLSAgIFRoZXJlIGlzIG5vIGVhc3kgd2F5IHRvIGxpbmsgbXVsdGlwbGUgc2Nvb3AgZGV2aWNlcyBpbnRvIG9uZQotICAgc2luZ2xlIGVudGl0eSBmb3IgdGhlIHB4YTJ4eF9wY21jaWEgZGV2aWNlICovCi1pbnQgc2Nvb3BfbnVtOwotc3RydWN0IHNjb29wX3BjbWNpYV9kZXYgKnNjb29wX2RldnM7Ci0KIHN0cnVjdCAgc2Nvb3BfZGV2IHsKIAl2b2lkICAqYmFzZTsKIAlzcGlubG9ja190IHNjb29wX2xvY2s7CkBAIC0xMDQsOSArOTgsOSBAQAogfQogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IHNjb29wX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHNjb29wX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0Jc3RydWN0IHNjb29wX2RldiAqc2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBzY29vcF9kZXYgKnNkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJY2hlY2tfc2Nvb3BfcmVnKHNkZXYpOwogCXNkZXYtPnNjb29wX2dwd3IgPSBTQ09PUF9SRUcoc2Rldi0+YmFzZSwgU0NPT1BfR1BXUik7CkBAIC0xMTUsOSArMTA5LDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzY29vcF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBzY29vcF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBzY29vcF9kZXYgKnNkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgc2Nvb3BfZGV2ICpzZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAogCWNoZWNrX3Njb29wX3JlZyhzZGV2KTsKIAlTQ09PUF9SRUcoc2Rldi0+YmFzZSxTQ09PUF9HUFdSKSA9IHNkZXYtPnNjb29wX2dwd3I7CkBAIC0xMjksMTEgKzEyMywxMCBAQAogI2RlZmluZSBzY29vcF9yZXN1bWUJTlVMTAogI2VuZGlmCiAKLWludCBfX2luaXQgc2Nvb3BfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQoraW50IF9faW5pdCBzY29vcF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzY29vcF9kZXYgKmRldnB0cjsKIAlzdHJ1Y3Qgc2Nvb3BfY29uZmlnICppbmY7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXN0cnVjdCByZXNvdXJjZSAqbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAogCWlmICghbWVtKQpAQCAtMTQ3LDcgKzE0MCw3IEBACiAJbWVtc2V0KGRldnB0ciwgMCwgc2l6ZW9mKHN0cnVjdCBzY29vcF9kZXYpKTsKIAlzcGluX2xvY2tfaW5pdCgmZGV2cHRyLT5zY29vcF9sb2NrKTsKIAotCWluZiA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKwlpbmYgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlkZXZwdHItPmJhc2UgPSBpb3JlbWFwKG1lbS0+c3RhcnQsIG1lbS0+ZW5kIC0gbWVtLT5zdGFydCArIDEpOwogCiAJaWYgKCFkZXZwdHItPmJhc2UpIHsKQEAgLTE1NSw3ICsxNDgsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBkZXZwdHIpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRldnB0cik7CiAKIAlwcmludGsoIlNoYXJwIFNjb29wIERldmljZSBmb3VuZCBhdCAweCUwOHggLT4gMHglMDh4XG4iLCh1bnNpZ25lZCBpbnQpbWVtLT5zdGFydCwodW5zaWduZWQgaW50KWRldnB0ci0+YmFzZSk7CiAKQEAgLTE3MCwyOSArMTYzLDMwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2Nvb3BfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgc2Nvb3BfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHNjb29wX2RldiAqc2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBzY29vcF9kZXYgKnNkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlpZiAoc2RldikgewogCQlpb3VubWFwKHNkZXYtPmJhc2UpOwogCQlrZnJlZShzZGV2KTsKLQkJZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisJCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCX0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHNjb29wX2RyaXZlciA9IHsKLQkubmFtZQkJPSAic2hhcnAtc2Nvb3AiLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc2Nvb3BfZHJpdmVyID0gewogCS5wcm9iZQkJPSBzY29vcF9wcm9iZSwKIAkucmVtb3ZlIAk9IHNjb29wX3JlbW92ZSwKIAkuc3VzcGVuZAk9IHNjb29wX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBzY29vcF9yZXN1bWUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gInNoYXJwLXNjb29wIiwKKwl9LAogfTsKIAogaW50IF9faW5pdCBzY29vcF9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIGRyaXZlcl9yZWdpc3Rlcigmc2Nvb3BfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzY29vcF9kcml2ZXIpOwogfQogCiBzdWJzeXNfaW5pdGNhbGwoc2Nvb3BfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29tYXBfaDJfMTYxMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL29tYXBfaDJfMTYxMF9kZWZjb25maWcKaW5kZXggNDE5ODY3Ny4uNTI5ZjBmNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vbWFwX2gyXzE2MTBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9oMl8xNjEwX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMwotIyBNb24gU2VwICA1IDE4OjA3OjEyIDIwMDUKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNAorIyBXZWQgTm92ICA5IDE4OjUzOjQwIDIwMDUKICMKIENPTkZJR19BUk09eQogQ09ORklHX01NVT15CkBAIC0yMiw2ICsyMiw3IEBACiAjIEdlbmVyYWwgc2V0dXAKICMKIENPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiAjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldApAQCAtMzEsNiArMzIsNyBAQAogIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CiBDT05GSUdfS09CSkVDVF9VRVZFTlQ9eQogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKQEAgLTYwLDYgKzYyLDIzIEBACiAjIENPTkZJR19LTU9EIGlzIG5vdCBzZXQKIAogIworIyBCbG9jayBsYXllcgorIworCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKK0NPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKKworIwogIyBTeXN0ZW0gVHlwZQogIwogIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0CkBAIC04MSw2ICsxMDAsNyBAQAogIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX09NQVA9eQogIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldApAQCAtMTEyLDcgKzEzMiw3IEBACiAjIE9NQVAgQ29yZSBUeXBlCiAjCiAjIENPTkZJR19BUkNIX09NQVA3MzAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PTUFQMTUxMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09NQVAxNVhYIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX09NQVAxNlhYPXkKIAogIwpAQCAtMTc3LDYgKzE5Nyw4IEBACiAjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKIENPTkZJR19GTEFUTUVNPXkKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2CiAjIENPTkZJR19MRURTIGlzIG5vdCBzZXQKIENPTkZJR19BTElHTk1FTlRfVFJBUD15CiAKQEAgLTI1OCwxNCArMjgwLDE5IEBACiAjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfVENQRElBRz15Ci0jIENPTkZJR19JUF9UQ1BESUFHX0lQVjYgaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfVENQX0NPTkdfQklDPXkKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKIAogIworIyBEQ0NQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorCisjCiAjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQogIwogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CkBAIC0yODEsNiArMzA4LDEwIEBACiAjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKworIworIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKKyMKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfQ0xTX1JPVVRFIGlzIG5vdCBzZXQKIApAQCAtMjkxLDYgKzMyMiw3IEBACiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CiAKICMKICMgRGV2aWNlIERyaXZlcnMKQEAgLTMyOCwyMSArMzYwLDEzIEBACiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTgxOTIKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQogQ09ORklHX0FUQV9PVkVSX0VUSD1tCiAKICMKICMgU0NTSSBkZXZpY2Ugc3VwcG9ydAogIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTST15CiBDT05GSUdfU0NTSV9QUk9DX0ZTPXkKIApAQCAtMzY5LDEwICszOTMsMTIgQEAKICMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19BVFRSUyBpcyBub3Qgc2V0CiAKICMKICMgU0NTSSBsb3ctbGV2ZWwgZHJpdmVycwogIworIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU0FUQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKIApAQCAtNDA0LDYgKzQzMCwxMSBAQAogIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKIAogIworIyBQSFkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CisKKyMKICMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCiAjCiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKQEAgLTQzOSw2ICs0NzAsNyBAQAogIyBDT05GSUdfUFBQX1NZTkNfVFRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQUF9ERUZMQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQUF9CU0RDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUF9NUFBFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQUE9FIGlzIG5vdCBzZXQKIENPTkZJR19TTElQPXkKIENPTkZJR19TTElQX0NPTVBSRVNTRUQ9eQpAQCAtNTQxLDE4ICs1NzMsMTggQEAKICMKICMgVFBNIGRldmljZXMKICMKKyMgQ09ORklHX1RFTENMT0NLIGlzIG5vdCBzZXQKIAogIwogIyBJMkMgc3VwcG9ydAogIwogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TRU5TT1IgaXMgbm90IHNldAotQ09ORklHX0lTUDEzMDFfT01BUD15CiAKICMKICMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0CiAjCiBDT05GSUdfSFdNT049eQorIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogCiAjCkBAIC01NjAsNiArNTkyLDEwIEBACiAjCiAKICMKKyMgTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzCisjCisKKyMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldApAQCAtNTc2LDcgKzYxMiw2IEBACiAjIENPTkZJR19GQl9DRkJfRklMTFJFQ1QgaXMgbm90IHNldAogIyBDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU09GVF9DVVJTT1IgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAogQ09ORklHX0ZCX01PREVfSEVMUEVSUz15CiAjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldApAQCAtNTg5LDYgKzYyNCw3IEBACiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CiBDT05GSUdfRFVNTVlfQ09OU09MRT15CiBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19GT05UUz15CiBDT05GSUdfRk9OVF84eDg9eQogQ09ORklHX0ZPTlRfOHgxNj15CkBAIC02MDAsNiArNjM2LDcgQEAKICMgQ09ORklHX0ZPTlRfU1VOOHgxNiBpcyBub3Qgc2V0CiAjIENPTkZJR19GT05UX1NVTjEyeDIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZPTlRfMTB4MTggaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF9STCBpcyBub3Qgc2V0CiAKICMKICMgTG9nbyBjb25maWd1cmF0aW9uCkBAIC02MjQsMTAgKzY2MSwxMCBAQAogIyBPcGVuIFNvdW5kIFN5c3RlbQogIwogQ09ORklHX1NPVU5EX1BSSU1FPXkKKyMgQ09ORklHX09CU09MRVRFX09TU19EUklWRVIgaXMgbm90IHNldAogIyBDT05GSUdfU09VTkRfTVNORENMQVMgaXMgbm90IHNldAogIyBDT05GSUdfU09VTkRfTVNORFBJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TT1VORF9PU1MgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfQUQxOTgwIGlzIG5vdCBzZXQKIAogIwogIyBVU0Igc3VwcG9ydApAQCAtNjM3LDIyICs2NzQsMjEgQEAKICMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CiAKICMKKyMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIworCisjCiAjIFVTQiBHYWRnZXQgU3VwcG9ydAogIwotQ09ORklHX1VTQl9HQURHRVQ9eQotIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0dBREdFVF9TRUxFQ1RFRD15CisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX1BYQTJYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfR0FER0VUX09NQVA9eQotQ09ORklHX1VTQl9PTUFQPXkKKyMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfWkVSTyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0VUSD15Ci1DT05GSUdfVVNCX0VUSF9STkRJUz15CisjIENPTkZJR19VU0JfRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRklMRV9TVE9SQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HX1NFUklBTCBpcyBub3Qgc2V0CkBAIC02NzMsMTAgKzcwOSw2IEBACiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLQotIwotIyBYRlMgc3VwcG9ydAotIwogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ST01GU19GUz15CkBAIC02ODUsNiArNzE3LDcgQEAKIENPTkZJR19ETk9USUZZPXkKICMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAogCiAjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKQEAgLTcwNiwxMCArNzM5LDEwIEBACiAjCiBDT05GSUdfUFJPQ19GUz15CiBDT05GSUdfU1lTRlM9eQotIyBDT05GSUdfREVWUFRTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQorIyBDT05GSUdfUkVMQVlGU19GUyBpcyBub3Qgc2V0CiAKICMKICMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwpAQCAtNzUwLDYgKzc4Myw3IEBACiAjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfOVBfRlMgaXMgbm90IHNldAogCiAjCiAjIFBhcnRpdGlvbiBUeXBlcwpAQCAtODU5LDYgKzg5Myw3IEBACiAjIExpYnJhcnkgcm91dGluZXMKICMKICMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKIENPTkZJR19aTElCX0lORkxBVEU9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2FybWtzeW1zLmMgYi9hcmNoL2FybS9rZXJuZWwvYXJta3N5bXMuYwppbmRleCA3YjE3YTg3Li43YTMyNjFmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvYXJta3N5bXMuYworKysgYi9hcmNoL2FybS9rZXJuZWwvYXJta3N5bXMuYwpAQCAtOSw2ICs5LDcgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2NyeXB0b2hhc2guaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2luNi5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CkBAIC0xMjYsNiArMTI3LDkgQEAKIEVYUE9SVF9TWU1CT0woX19wdXRfdXNlcl80KTsKIEVYUE9SVF9TWU1CT0woX19wdXRfdXNlcl84KTsKIAorCS8qIGNyeXB0byBoYXNoICovCitFWFBPUlRfU1lNQk9MKHNoYV90cmFuc2Zvcm0pOworCiAJLyogZ2NjIGxpYiBmdW5jdGlvbnMgKi8KIEVYUE9SVF9TWU1CT0woX19hc2hsZGkzKTsKIEVYUE9SVF9TWU1CT0woX19hc2hyZGkzKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1hcm12LlMgYi9hcmNoL2FybS9rZXJuZWwvZW50cnktYXJtdi5TCmluZGV4IGE1MTFlYzUuLmQ5ZmI4MTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1hcm12LlMKKysrIGIvYXJjaC9hcm0va2VybmVsL2VudHJ5LWFybXYuUwpAQCAtNDcsNiArNDcsMTMgQEAKIAltb3ZuZQlyMCwgc3AKIAlhZHJuZQlsciwgMWIKIAlibmUJZG9fSVBJCisKKyNpZmRlZiBDT05GSUdfTE9DQUxfVElNRVJTCisJdGVzdF9mb3JfbHRpcnEgcjAsIHI2LCByNSwgbHIKKwltb3ZuZQlyMCwgc3AKKwlhZHJuZQlsciwgMWIKKwlibmUJZG9fbG9jYWxfdGltZXIKKyNlbmRpZgogI2VuZGlmCiAKIAkuZW5kbQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2lycS5jIGIvYXJjaC9hcm0va2VybmVsL2lycS5jCmluZGV4IDlkZWY0NDAuLmQ3MDk5ZGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL2FybS9rZXJuZWwvaXJxLmMKQEAgLTI2NCw2ICsyNjQsNyBAQAogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1NNUAogCQlzaG93X2lwaV9saXN0KHApOworCQlzaG93X2xvY2FsX2lycXMocCk7CiAjZW5kaWYKIAkJc2VxX3ByaW50ZihwLCAiRXJyOiAlMTBsdVxuIiwgaXJxX2Vycl9jb3VudCk7CiAJfQpAQCAtOTk1LDcgKzk5Niw3IEBACiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpkaXI7CiAJaW50IGlycTsKIAotCWRpciA9IHByb2NfbWtkaXIoImlycSIsIDApOworCWRpciA9IHByb2NfbWtkaXIoImlycSIsIE5VTEwpOwogCWlmICghZGlyKQogCQlyZXR1cm47CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL2FybS9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IGJhMjk4MjcuLjMwNDk0YWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3Byb2Nlc3MuYwpAQCAtODYsMTIgKzg2LDE2IEBACiAgKi8KIHZvaWQgZGVmYXVsdF9pZGxlKHZvaWQpCiB7Ci0JbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQlpZiAoIW5lZWRfcmVzY2hlZCgpICYmICFobHRfY291bnRlcikgewotCQl0aW1lcl9keW5fcmVwcm9ncmFtKCk7Ci0JCWFyY2hfaWRsZSgpOworCWlmIChobHRfY291bnRlcikKKwkJY3B1X3JlbGF4KCk7CisJZWxzZSB7CisJCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJCWlmICghbmVlZF9yZXNjaGVkKCkpIHsKKwkJCXRpbWVyX2R5bl9yZXByb2dyYW0oKTsKKwkJCWFyY2hfaWRsZSgpOworCQl9CisJCWxvY2FsX2lycV9lbmFibGUoKTsKIAl9Ci0JbG9jYWxfaXJxX2VuYWJsZSgpOwogfQogCiAvKgpAQCAtMTE2LDEzICsxMjAsMTMgQEAKIAogCQlpZiAoIWlkbGUpCiAJCQlpZGxlID0gZGVmYXVsdF9pZGxlOwotCQlwcmVlbXB0X2Rpc2FibGUoKTsKIAkJbGVkc19ldmVudChsZWRfaWRsZV9zdGFydCk7CiAJCXdoaWxlICghbmVlZF9yZXNjaGVkKCkpCiAJCQlpZGxlKCk7CiAJCWxlZHNfZXZlbnQobGVkX2lkbGVfZW5kKTsKLQkJcHJlZW1wdF9lbmFibGUoKTsKKwkJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOwogCQlzY2hlZHVsZSgpOworCQlwcmVlbXB0X2Rpc2FibGUoKTsKIAl9CiB9CiAKQEAgLTM1NSw3ICszNTksNyBAQAogCXN0cnVjdCB0aHJlYWRfaW5mbyAqdGhyZWFkID0gcC0+dGhyZWFkX2luZm87CiAJc3RydWN0IHB0X3JlZ3MgKmNoaWxkcmVnczsKIAotCWNoaWxkcmVncyA9ICgoc3RydWN0IHB0X3JlZ3MgKikoKHVuc2lnbmVkIGxvbmcpdGhyZWFkICsgVEhSRUFEX1NUQVJUX1NQKSkgLSAxOworCWNoaWxkcmVncyA9ICh2b2lkICopdGhyZWFkICsgVEhSRUFEX1NUQVJUX1NQIC0gc2l6ZW9mKCpyZWdzKTsKIAkqY2hpbGRyZWdzID0gKnJlZ3M7CiAJY2hpbGRyZWdzLT5BUk1fcjAgPSAwOwogCWNoaWxkcmVncy0+QVJNX3NwID0gc3RhY2tfc3RhcnQ7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvc21wLmMgYi9hcmNoL2FybS9rZXJuZWwvc21wLmMKaW5kZXggZWRiNWE0MC4uZTU1ZWE5NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3NtcC5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9zbXAuYwpAQCAtMTQyLDcgKzE0Miw3IEBACiAJCQlyZXQgPSAtRUlPOwogCX0KIAotCXNlY29uZGFyeV9kYXRhLnN0YWNrID0gMDsKKwlzZWNvbmRhcnlfZGF0YS5zdGFjayA9IE5VTEw7CiAJc2Vjb25kYXJ5X2RhdGEucGdkaXIgPSAwOwogCiAJKnBtZF9vZmZzZXQocGdkLCBQSFlTX09GRlNFVCkgPSBfX3BtZCgwKTsKQEAgLTE4NSw2ICsxODUsMTEgQEAKIAltaWdyYXRlX2lycXMoKTsKIAogCS8qCisJICogU3RvcCB0aGUgbG9jYWwgdGltZXIgZm9yIHRoaXMgQ1BVLgorCSAqLworCWxvY2FsX3RpbWVyX3N0b3AoY3B1KTsKKworCS8qCiAJICogRmx1c2ggdXNlciBjYWNoZSBhbmQgVExCIG1hcHBpbmdzLCBhbmQgdGhlbiByZW1vdmUgdGhpcyBDUFUKIAkgKiBmcm9tIHRoZSB2bSBtYXNrIHNldCBvZiBhbGwgcHJvY2Vzc2VzLgogCSAqLwpAQCAtMjUxLDcgKzI1Niw5IEBACiBhc21saW5rYWdlIHZvaWQgX19jcHVpbml0IHNlY29uZGFyeV9zdGFydF9rZXJuZWwodm9pZCkKIHsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9ICZpbml0X21tOwotCXVuc2lnbmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJdW5zaWduZWQgaW50IGNwdTsKKworCWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAogCXByaW50aygiQ1BVJXU6IEJvb3RlZCBzZWNvbmRhcnkgcHJvY2Vzc29yXG4iLCBjcHUpOwogCkBAIC0yNjgsNiArMjc1LDcgQEAKIAlsb2NhbF9mbHVzaF90bGJfYWxsKCk7CiAKIAljcHVfaW5pdCgpOworCXByZWVtcHRfZGlzYWJsZSgpOwogCiAJLyoKIAkgKiBHaXZlIHRoZSBwbGF0Zm9ybSBhIGNoYW5jZSB0byBkbyBpdHMgb3duIGluaXRpYWxpc2F0aW9uLgpAQCAtMjkwLDYgKzI5OCwxMSBAQAogCWNwdV9zZXQoY3B1LCBjcHVfb25saW5lX21hcCk7CiAKIAkvKgorCSAqIFNldHVwIGxvY2FsIHRpbWVyIGZvciB0aGlzIENQVS4KKwkgKi8KKwlsb2NhbF90aW1lcl9zZXR1cChjcHUpOworCisJLyoKIAkgKiBPSywgaXQncyBvZmYgdG8gdGhlIGlkbGUgdGhyZWFkIGZvciB1cwogCSAqLwogCWNwdV9pZGxlKCk7CkBAIC0zNTksOCArMzcyLDggQEAKICAqIFlvdSBtdXN0IG5vdCBjYWxsIHRoaXMgZnVuY3Rpb24gd2l0aCBkaXNhYmxlZCBpbnRlcnJ1cHRzLCBmcm9tIGEKICAqIGhhcmR3YXJlIGludGVycnVwdCBoYW5kbGVyLCBub3IgZnJvbSBhIGJvdHRvbSBoYWxmIGhhbmRsZXIuCiAgKi8KLWludCBzbXBfY2FsbF9mdW5jdGlvbl9vbl9jcHUodm9pZCAoKmZ1bmMpKHZvaWQgKmluZm8pLCB2b2lkICppbmZvLCBpbnQgcmV0cnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3YWl0LCBjcHVtYXNrX3QgY2FsbG1hcCkKK3N0YXRpYyBpbnQgc21wX2NhbGxfZnVuY3Rpb25fb25fY3B1KHZvaWQgKCpmdW5jKSh2b2lkICppbmZvKSwgdm9pZCAqaW5mbywKKwkJCQkgICAgaW50IHJldHJ5LCBpbnQgd2FpdCwgY3B1bWFza190IGNhbGxtYXApCiB7CiAJc3RydWN0IHNtcF9jYWxsX3N0cnVjdCBkYXRhOwogCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKQEAgLTQ1NCw2ICs0NjcsMTggQEAKIAlzZXFfcHV0YyhwLCAnXG4nKTsKIH0KIAordm9pZCBzaG93X2xvY2FsX2lycXMoc3RydWN0IHNlcV9maWxlICpwKQoreworCXVuc2lnbmVkIGludCBjcHU7CisKKwlzZXFfcHJpbnRmKHAsICJMT0M6ICIpOworCisJZm9yX2VhY2hfcHJlc2VudF9jcHUoY3B1KQorCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGlycV9zdGF0W2NwdV0ubG9jYWxfdGltZXJfaXJxcyk7CisKKwlzZXFfcHV0YyhwLCAnXG4nKTsKK30KKwogc3RhdGljIHZvaWQgaXBpX3RpbWVyKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCWludCB1c2VyID0gdXNlcl9tb2RlKHJlZ3MpOwpAQCAtNDY0LDYgKzQ4OSwxOCBAQAogCWlycV9leGl0KCk7CiB9CiAKKyNpZmRlZiBDT05GSUdfTE9DQUxfVElNRVJTCithc21saW5rYWdlIHZvaWQgZG9fbG9jYWxfdGltZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKworCWlmIChsb2NhbF90aW1lcl9hY2soKSkgeworCQlpcnFfc3RhdFtjcHVdLmxvY2FsX3RpbWVyX2lycXMrKzsKKwkJaXBpX3RpbWVyKHJlZ3MpOworCX0KK30KKyNlbmRpZgorCiAvKgogICogaXBpX2NhbGxfZnVuY3Rpb24gLSBoYW5kbGUgSVBJIGZyb20gc21wX2NhbGxfZnVuY3Rpb24oKQogICoKQEAgLTUxNSw3ICs1NTIsNyBAQAogICoKICAqICBCaXQgMCAtIEludGVyLXByb2Nlc3NvciBmdW5jdGlvbiBjYWxsCiAgKi8KLXZvaWQgZG9fSVBJKHN0cnVjdCBwdF9yZWdzICpyZWdzKQorYXNtbGlua2FnZSB2b2lkIGRvX0lQSShzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAl1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCXN0cnVjdCBpcGlfZGF0YSAqaXBpID0gJnBlcl9jcHUoaXBpX2RhdGEsIGNwdSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9saWIvYml0b3BzLmggYi9hcmNoL2FybS9saWIvYml0b3BzLmgKaW5kZXggZjM1ZDkxZi4uYjhjMTRlOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbGliL2JpdG9wcy5oCisrKyBiL2FyY2gvYXJtL2xpYi9iaXRvcHMuaApAQCAtMzQsNyArMzQsNyBAQAogCWFuZAlyMiwgcjAsICM3CiAJbW92CXIzLCAjMQogCW1vdglyMywgcjMsIGxzbCByMgotCXNhdmVfYW5kX2Rpc2FibGVfaXJxcyBpcCwgcjIKKwlzYXZlX2FuZF9kaXNhYmxlX2lycXMgaXAKIAlsZHJiCXIyLCBbcjEsIHIwLCBsc3IgIzNdCiAJXGluc3RyCXIyLCByMiwgcjMKIAlzdHJiCXIyLCBbcjEsIHIwLCBsc3IgIzNdCkBAIC01NCw3ICs1NCw3IEBACiAJYWRkCXIxLCByMSwgcjAsIGxzciAjMwogCWFuZAlyMywgcjAsICM3CiAJbW92CXIwLCAjMQotCXNhdmVfYW5kX2Rpc2FibGVfaXJxcyBpcCwgcjIKKwlzYXZlX2FuZF9kaXNhYmxlX2lycXMgaXAKIAlsZHJiCXIyLCBbcjFdCiAJdHN0CXIyLCByMCwgbHNsIHIzCiAJXGluc3RyCXIyLCByMiwgcjAsIGxzbCByMwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbGliL2NzdW1wYXJ0aWFsLlMgYi9hcmNoL2FybS9saWIvY3N1bXBhcnRpYWwuUwppbmRleCBjYjVlMzcwLi5mZTc5N2NmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9saWIvY3N1bXBhcnRpYWwuUworKysgYi9hcmNoL2FybS9saWIvY3N1bXBhcnRpYWwuUwpAQCAtMzksNiArMzksNyBAQAogCiAJCS8qIHdlIG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgYnl0ZS4gKi8KIAkJdHN0CWJ1ZiwgIzEJCQlAIG9kZCBhZGRyZXNzPworCQltb3ZuZQlzdW0sIHN1bSwgcm9yICM4CiAJCWxkcm5lYgl0ZDAsIFtidWZdLCAjMQogCQlzdWJuZQlsZW4sIGxlbiwgIzEKIAkJYWRjbmVzCXN1bSwgc3VtLCB0ZDAsIHB1dF9ieXRlXzEKQEAgLTEwMyw2ICsxMDQsOSBAQAogCQljbXAJbGVuLCAjOAkJCUAgRW5zdXJlIHRoYXQgd2UgaGF2ZSBhdCBsZWFzdAogCQlibG8JLmxlc3M4CQkJQCA4IGJ5dGVzIHRvIGNvcHkuCiAKKwkJdHN0CWJ1ZiwgIzEKKwkJbW92bmUJc3VtLCBzdW0sIHJvciAjOAorCiAJCWFkZHMJc3VtLCBzdW0sICMwCQlAIEMgPSAwCiAJCXRzdAlidWYsICMzCQkJQCBUZXN0IGRlc3RpbmF0aW9uIGFsaWdubWVudAogCQlibG5lCS5ub3RfYWxpZ25lZAkJQCBhbGlnaCBkZXN0aW5hdGlvbiwgcmV0dXJuIGhlcmUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L0tjb25maWcgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9LY29uZmlnCmluZGV4IDg5NzYyYTIuLjM4NTI4NTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvS2NvbmZpZwpAQCAtOCw2ICs4LDE2IEBACiAKIGNvbW1lbnQgIklYUDR4eCBQbGF0Zm9ybXMiCiAKKyMgVGhpcyBlbnRyeSBpcyBwbGFjZWQgb24gdG9wIGJlY2F1c2Ugb3RoZXJ3aXNlIGl0IHdvdWxkIGhhdmUKKyMgYmVlbiBzaG93biBhcyBhIHN1Ym1lbnUuCitjb25maWcgTUFDSF9OU0xVMgorCWJvb2wKKwlwcm9tcHQgIk5TTFUyIiBpZiAhKE1BQ0hfSVhEUDQ2NSB8fCBNQUNIX0lYRFBHNDI1IHx8IEFSQ0hfSVhEUDQyNSB8fCBBUkNIX0FESV9DT1lPVEUgfHwgQVJDSF9BVklMQSB8fCBBUkNIX0lYQ0RQMTEwMCB8fCBBUkNIX1BSUE1DMTEwMCB8fCBNQUNIX0dUV1g1NzE1KQorCWhlbHAKKwkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBzdXBwb3J0IExpbmtzeXMncworCSAgTlNMVTIgTkFTIGRldmljZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcyBwbGF0Zm9ybSwKKwkgIHNlZSBodHRwOi8vd3d3Lm5zbHUyLWxpbnV4Lm9yZworCiBjb25maWcgQVJDSF9BVklMQQogCWJvb2wgIkF2aWxhIgogCWhlbHAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvTWFrZWZpbGUKaW5kZXggZGRlY2JkYS4uN2ExNTYyOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvTWFrZWZpbGUKQEAgLTgsNCArOCw1IEBACiBvYmotJChDT05GSUdfTUFDSF9JWERQRzQyNSkJKz0gaXhkcGc0MjUtcGNpLm8gY295b3RlLXNldHVwLm8KIG9iai0kKENPTkZJR19BUkNIX0FESV9DT1lPVEUpCSs9IGNveW90ZS1wY2kubyBjb3lvdGUtc2V0dXAubwogb2JqLSQoQ09ORklHX01BQ0hfR1RXWDU3MTUpCSs9IGd0d3g1NzE1LXBjaS5vIGd0d3g1NzE1LXNldHVwLm8KK29iai0kKENPTkZJR19NQUNIX05TTFUyKQkrPSBuc2x1Mi1wY2kubyBuc2x1Mi1zZXR1cC5vIG5zbHUyLXBvd2VyLm8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvbnNsdTItcGNpLmMgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9uc2x1Mi1wY2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTc1ZjJlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvbnNsdTItcGNpLmMKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtaXhwNHh4L25zbHUyLXBjaS5jCisgKgorICogTlNMVTIgYm9hcmQtbGV2ZWwgUENJIGluaXRpYWxpemF0aW9uCisgKgorICogYmFzZWQgb24gaXhkcDQyNS1wY2kuYzoKKyAqCUNvcHlyaWdodCAoQykgMjAwMiBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAqCUNvcHlyaWdodCAoQykgMjAwMy0yMDA0IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqCisgKiBNYWludGFpbmVyOiBodHRwOi8vd3d3Lm5zbHUyLWxpbnV4Lm9yZy8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvcGNpLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKwordm9pZCBfX2luaXQgbnNsdTJfcGNpX3ByZWluaXQodm9pZCkKK3sKKwlzZXRfaXJxX3R5cGUoSVJRX05TTFUyX1BDSV9JTlRBLCBJUlFUX0xPVyk7CisJc2V0X2lycV90eXBlKElSUV9OU0xVMl9QQ0lfSU5UQiwgSVJRVF9MT1cpOworCXNldF9pcnFfdHlwZShJUlFfTlNMVTJfUENJX0lOVEMsIElSUVRfTE9XKTsKKworCWdwaW9fbGluZV9pc3JfY2xlYXIoTlNMVTJfUENJX0lOVEFfUElOKTsKKwlncGlvX2xpbmVfaXNyX2NsZWFyKE5TTFUyX1BDSV9JTlRCX1BJTik7CisJZ3Bpb19saW5lX2lzcl9jbGVhcihOU0xVMl9QQ0lfSU5UQ19QSU4pOworCisJLyogSU5URCBpcyBub3QgY29uZmlndXJlZCBhcyBHUElPIGlzIHVzZWQKKwkgKiBmb3IgdGhlIHBvd2VyIGlucHV0IGJ1dHRvbi4KKwkgKi8KKworCWl4cDR4eF9wY2lfcHJlaW5pdCgpOworfQorCitzdGF0aWMgaW50IF9faW5pdCBuc2x1Ml9tYXBfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKK3sKKwlzdGF0aWMgaW50IHBjaV9pcnFfdGFibGVbTlNMVTJfUENJX0lSUV9MSU5FU10gPSB7CisJCUlSUV9OU0xVMl9QQ0lfSU5UQSwKKwkJSVJRX05TTFUyX1BDSV9JTlRCLAorCQlJUlFfTlNMVTJfUENJX0lOVEMsCisJfTsKKworCWludCBpcnEgPSAtMTsKKworCWlmIChzbG90ID49IDEgJiYgc2xvdCA8PSBOU0xVMl9QQ0lfTUFYX0RFViAmJgorCQlwaW4gPj0gMSAmJiBwaW4gPD0gTlNMVTJfUENJX0lSUV9MSU5FUykgeworCQkJaXJxID0gcGNpX2lycV90YWJsZVsoc2xvdCArIHBpbiAtIDIpICUgTlNMVTJfUENJX0lSUV9MSU5FU107CisJfQorCisJcmV0dXJuIGlycTsKK30KKworc3RydWN0IGh3X3BjaSBfX2luaXRkYXRhIG5zbHUyX3BjaSA9IHsKKwkubnJfY29udHJvbGxlcnMgPSAxLAorCS5wcmVpbml0CT0gbnNsdTJfcGNpX3ByZWluaXQsCisJLnN3aXp6bGUJPSBwY2lfc3RkX3N3aXp6bGUsCisJLnNldHVwCQk9IGl4cDR4eF9zZXR1cCwKKwkuc2NhbgkJPSBpeHA0eHhfc2Nhbl9idXMsCisJLm1hcF9pcnEJPSBuc2x1Ml9tYXBfaXJxLAorfTsKKworaW50IF9faW5pdCBuc2x1Ml9wY2lfaW5pdCh2b2lkKSAvKiBtb25rZXkgc2VlLCBtb25rZXkgZG8gKi8KK3sKKwlpZiAobWFjaGluZV9pc19uc2x1MigpKQorCQlwY2lfY29tbW9uX2luaXQoJm5zbHUyX3BjaSk7CisKKwlyZXR1cm4gMDsKK30KKworc3Vic3lzX2luaXRjYWxsKG5zbHUyX3BjaV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L25zbHUyLXBvd2VyLmMgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9uc2x1Mi1wb3dlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4ZmJjOGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9uc2x1Mi1wb3dlci5jCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLWl4cDR4eC9uc2x1Mi1wb3dlci5jCisgKgorICogTlNMVTIgUG93ZXIvUmVzZXQgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IFRvd2VyIFRlY2hub2xvZ2llcworICoKKyAqIGJhc2VkIG9uIG5zbHUyLWlvLmMKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQgS2FyZW4gU3BlYXJlbAorICoKKyAqIEF1dGhvcjogQWxlc3NhbmRybyBadW1tbyA8YS56dW1tb0B0b3dlcnRlY2guaXQ+CisgKiBNYWludGFpbmVyczogaHR0cDovL3d3dy5uc2x1Mi1saW51eC5vcmcvCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworZXh0ZXJuIHZvaWQgY3RybF9hbHRfZGVsKHZvaWQpOworCitzdGF0aWMgaXJxcmV0dXJuX3QgbnNsdTJfcG93ZXJfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCS8qIFNpZ25hbCBpbml0IHRvIGRvIHRoZSBjdHJsYWx0ZGVsIGFjdGlvbiwgdGhpcyB3aWxsIGJ5cGFzcyBpbml0IGlmCisJICogaXQgaGFzbid0IHN0YXJ0ZWQgYW5kIGRvIGEga2VybmVsX3Jlc3RhcnQuCisJICovCisJY3RybF9hbHRfZGVsKCk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBuc2x1Ml9yZXNldF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJLyogVGhpcyBpcyB0aGUgcGFwZXItY2xpcCByZXNldCwgaXQgc2h1dHMgdGhlIG1hY2hpbmUgZG93biBkaXJlY3RseS4KKwkgKi8KKwltYWNoaW5lX3Bvd2VyX29mZigpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IF9faW5pdCBuc2x1Ml9wb3dlcl9pbml0KHZvaWQpCit7CisJaWYgKCEobWFjaGluZV9pc19uc2x1MigpKSkKKwkJcmV0dXJuIDA7CisKKwkqSVhQNFhYX0dQSU9fR1BJU1IgPSAweDIwNDAwMDAwOwkvKiByZWFkIHRoZSAyIGlycXMgdG8gY2xyICovCisKKwlzZXRfaXJxX3R5cGUoTlNMVTJfUkJfSVJRLCBJUlFUX0xPVyk7CisJc2V0X2lycV90eXBlKE5TTFUyX1BCX0lSUSwgSVJRVF9ISUdIKTsKKworCWdwaW9fbGluZV9pc3JfY2xlYXIoTlNMVTJfUkJfR1BJTyk7CisJZ3Bpb19saW5lX2lzcl9jbGVhcihOU0xVMl9QQl9HUElPKTsKKworCWlmIChyZXF1ZXN0X2lycShOU0xVMl9SQl9JUlEsICZuc2x1Ml9yZXNldF9oYW5kbGVyLAorCQlTQV9JTlRFUlJVUFQsICJOU0xVMiByZXNldCBidXR0b24iLCBOVUxMKSA8IDApIHsKKworCQlwcmludGsoS0VSTl9ERUJVRyAiUmVzZXQgQnV0dG9uIElSUSAlZCBub3QgYXZhaWxhYmxlXG4iLAorCQkJTlNMVTJfUkJfSVJRKTsKKworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlpZiAocmVxdWVzdF9pcnEoTlNMVTJfUEJfSVJRLCAmbnNsdTJfcG93ZXJfaGFuZGxlciwKKwkJU0FfSU5URVJSVVBULCAiTlNMVTIgcG93ZXIgYnV0dG9uIiwgTlVMTCkgPCAwKSB7CisKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlBvd2VyIEJ1dHRvbiBJUlEgJWQgbm90IGF2YWlsYWJsZVxuIiwKKwkJCU5TTFUyX1BCX0lSUSk7CisKKwkJcmV0dXJuIC1FSU87CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBuc2x1Ml9wb3dlcl9leGl0KHZvaWQpCit7CisJZnJlZV9pcnEoTlNMVTJfUkJfSVJRLCBOVUxMKTsKKwlmcmVlX2lycShOU0xVMl9QQl9JUlEsIE5VTEwpOworfQorCittb2R1bGVfaW5pdChuc2x1Ml9wb3dlcl9pbml0KTsKK21vZHVsZV9leGl0KG5zbHUyX3Bvd2VyX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJBbGVzc2FuZHJvIFp1bW1vIDxhLnp1bW1vQHRvd2VydGVjaC5pdD4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTlNMVTIgUG93ZXIvUmVzZXQgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9uc2x1Mi1zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvbnNsdTItc2V0dXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODllOTRjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvbnNsdTItc2V0dXAuYwpAQCAtMCwwICsxLDEzNCBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtaXhwNHh4L25zbHUyLXNldHVwLmMKKyAqCisgKiBOU0xVMiBib2FyZC1zZXR1cAorICoKKyAqIGJhc2VkIGl4ZHA0MjUtc2V0dXAuYzoKKyAqICAgICAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDQgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICoKKyAqIEF1dGhvcjogTWFyayBSYWtlcyA8bXJha2VzIGF0IG1hYy5jb20+CisgKiBNYWludGFpbmVyczogaHR0cDovL3d3dy5uc2x1Mi1saW51eC5vcmcvCisgKgorICogRml4ZWQgbWlzc2luZyBpbml0X3RpbWUgaW4gTUFDSElORV9TVEFSVCBrYXMxMSAxMC8yMi8wNAorICogQ2hhbmdlZCB0byBjb25mb3JtIHRvIG5ldyBzdHlsZSBfX2luaXQgaXhkcDQyNSBrYXMxMSAxMC8yMi8wNAorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfODI1MC5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KKworc3RhdGljIHN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhIG5zbHUyX2ZsYXNoX2RhdGEgPSB7CisJLm1hcF9uYW1lCQk9ICJjZmlfcHJvYmUiLAorCS53aWR0aAkJCT0gMiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbnNsdTJfZmxhc2hfcmVzb3VyY2UgPSB7CisJLnN0YXJ0CQkJPSBOU0xVMl9GTEFTSF9CQVNFLAorCS5lbmQJCQk9IE5TTFUyX0ZMQVNIX0JBU0UgKyBOU0xVMl9GTEFTSF9TSVpFLAorCS5mbGFncwkJCT0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBuc2x1Ml9mbGFzaCA9IHsKKwkubmFtZQkJCT0gIklYUDRYWC1GbGFzaCIsCisJLmlkCQkJPSAwLAorCS5kZXYucGxhdGZvcm1fZGF0YQk9ICZuc2x1Ml9mbGFzaF9kYXRhLAorCS5udW1fcmVzb3VyY2VzCQk9IDEsCisJLnJlc291cmNlCQk9ICZuc2x1Ml9mbGFzaF9yZXNvdXJjZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaXhwNHh4X2kyY19waW5zIG5zbHUyX2kyY19ncGlvX3BpbnMgPSB7CisJLnNkYV9waW4JCT0gTlNMVTJfU0RBX1BJTiwKKwkuc2NsX3BpbgkJPSBOU0xVMl9TQ0xfUElOLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbnNsdTJfaTJjX2NvbnRyb2xsZXIgPSB7CisJLm5hbWUJCQk9ICJJWFA0WFgtSTJDIiwKKwkuaWQJCQk9IDAsCisJLmRldi5wbGF0Zm9ybV9kYXRhCT0gJm5zbHUyX2kyY19ncGlvX3BpbnMsCisJLm51bV9yZXNvdXJjZXMJCT0gMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbnNsdTJfdWFydF9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAkJPSBJWFA0WFhfVUFSVDFfQkFTRV9QSFlTLAorCQkuZW5kCQk9IElYUDRYWF9VQVJUMV9CQVNFX1BIWVMgKyAweDBmZmYsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IElYUDRYWF9VQVJUMl9CQVNFX1BIWVMsCisJCS5lbmQJCT0gSVhQNFhYX1VBUlQyX0JBU0VfUEhZUyArIDB4MGZmZiwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgbnNsdTJfdWFydF9kYXRhW10gPSB7CisJeworCQkubWFwYmFzZQk9IElYUDRYWF9VQVJUMV9CQVNFX1BIWVMsCisJCS5tZW1iYXNlCT0gKGNoYXIgKilJWFA0WFhfVUFSVDFfQkFTRV9WSVJUICsgUkVHX09GRlNFVCwKKwkJLmlycQkJPSBJUlFfSVhQNFhYX1VBUlQxLAorCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJCS5pb3R5cGUJCT0gVVBJT19NRU0sCisJCS5yZWdzaGlmdAk9IDIsCisJCS51YXJ0Y2xrCT0gSVhQNFhYX1VBUlRfWFRBTCwKKwl9LAorCXsKKwkJLm1hcGJhc2UJPSBJWFA0WFhfVUFSVDJfQkFTRV9QSFlTLAorCQkubWVtYmFzZQk9IChjaGFyICopSVhQNFhYX1VBUlQyX0JBU0VfVklSVCArIFJFR19PRkZTRVQsCisJCS5pcnEJCT0gSVJRX0lYUDRYWF9VQVJUMiwKKwkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCQkuaW90eXBlCQk9IFVQSU9fTUVNLAorCQkucmVnc2hpZnQJPSAyLAorCQkudWFydGNsawk9IElYUDRYWF9VQVJUX1hUQUwsCisJfSwKKwl7IH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG5zbHUyX3VhcnQgPSB7CisJLm5hbWUJCQk9ICJzZXJpYWw4MjUwIiwKKwkuaWQJCQk9IFBMQVQ4MjUwX0RFVl9QTEFURk9STSwKKwkuZGV2LnBsYXRmb3JtX2RhdGEJPSBuc2x1Ml91YXJ0X2RhdGEsCisJLm51bV9yZXNvdXJjZXMJCT0gMiwKKwkucmVzb3VyY2UJCT0gbnNsdTJfdWFydF9yZXNvdXJjZXMsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbnNsdTJfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJm5zbHUyX2kyY19jb250cm9sbGVyLAorCSZuc2x1Ml9mbGFzaCwKKwkmbnNsdTJfdWFydCwKK307CisKK3N0YXRpYyB2b2lkIG5zbHUyX3Bvd2VyX29mZih2b2lkKQoreworCS8qIFRoaXMgY2F1c2VzIHRoZSBib3ggdG8gZHJvcCB0aGUgcG93ZXIgYW5kIGdvIGRlYWQuICovCisKKwkvKiBlbmFibGUgdGhlIHB3ciBjbnRsIGdwaW8gKi8KKwlncGlvX2xpbmVfY29uZmlnKE5TTFUyX1BPX0dQSU8sIElYUDRYWF9HUElPX09VVCk7CisKKwkvKiBkbyB0aGUgZGVlZCAqLworCWdwaW9fbGluZV9zZXQoTlNMVTJfUE9fR1BJTywgSVhQNFhYX0dQSU9fSElHSCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBuc2x1Ml9pbml0KHZvaWQpCit7CisJaXhwNHh4X3N5c19pbml0KCk7CisKKwlwbV9wb3dlcl9vZmYgPSBuc2x1Ml9wb3dlcl9vZmY7CisKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhuc2x1Ml9kZXZpY2VzLCBBUlJBWV9TSVpFKG5zbHUyX2RldmljZXMpKTsKK30KKworTUFDSElORV9TVEFSVChOU0xVMiwgIkxpbmtzeXMgTlNMVTIiKQorCS8qIE1haW50YWluZXI6IHd3dy5uc2x1Mi1saW51eC5vcmcgKi8KKwkucGh5c19yYW0JPSBQSFlTX09GRlNFVCwKKwkucGh5c19pbwk9IElYUDRYWF9QRVJJUEhFUkFMX0JBU0VfUEhZUywKKwkuaW9fcGdfb2Zmc3QJPSAoKElYUDRYWF9QRVJJUEhFUkFMX0JBU0VfVklSVCkgPj4gMTgpICYgMHhGRkZDLAorCS5ib290X3BhcmFtcwk9IDB4MDAwMDAxMDAsCisJLm1hcF9pbwkJPSBpeHA0eHhfbWFwX2lvLAorCS5pbml0X2lycQk9IGl4cDR4eF9pbml0X2lycSwKKwkudGltZXIgICAgICAgICAgPSAmaXhwNHh4X3RpbWVyLAorCS5pbml0X21hY2hpbmUJPSBuc2x1Ml9pbml0LAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtb21hcDEvS2NvbmZpZwppbmRleCAyN2ZjMmU4Li44NmEwZjBkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9LY29uZmlnCkBAIC02LDEwICs2LDEwIEBACiAJYm9vbCAiT01BUDczMCBCYXNlZCBTeXN0ZW0iCiAJc2VsZWN0IEFSQ0hfT01BUF9PVEcKIAotY29uZmlnIEFSQ0hfT01BUDE1MTAKK2NvbmZpZyBBUkNIX09NQVAxNVhYCiAJZGVwZW5kcyBvbiBBUkNIX09NQVAxCiAJZGVmYXVsdCB5Ci0JYm9vbCAiT01BUDE1MTAgQmFzZWQgU3lzdGVtIgorCWJvb2wgIk9NQVAxNXh4IEJhc2VkIFN5c3RlbSIKIAogY29uZmlnIEFSQ0hfT01BUDE2WFgKIAlkZXBlbmRzIG9uIEFSQ0hfT01BUDEKQEAgLTIxLDcgKzIxLDcgQEAKIAogY29uZmlnIE1BQ0hfT01BUF9JTk5PVkFUT1IKIAlib29sICJUSSBJbm5vdmF0b3IiCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAxICYmIChBUkNIX09NQVAxNTEwIHx8IEFSQ0hfT01BUDE2WFgpCisJZGVwZW5kcyBvbiBBUkNIX09NQVAxICYmIChBUkNIX09NQVAxNVhYIHx8IEFSQ0hfT01BUDE2WFgpCiAJaGVscAogICAgICAgICAgIFRJIE9NQVAgMTUxMCBvciAxNjEwIElubm92YXRvciBib2FyZCBzdXBwb3J0LiBTYXkgWSBoZXJlIGlmIHlvdQogICAgICAgICAgIGhhdmUgc3VjaCBhIGJvYXJkLgpAQCAtNjQsMjAgKzY0LDMwIEBACiAKIGNvbmZpZyBNQUNIX1ZPSUNFQkxVRQogCWJvb2wgIlZvaWNlYmx1ZSIKLQlkZXBlbmRzIG9uIEFSQ0hfT01BUDEgJiYgQVJDSF9PTUFQMTUxMAorCWRlcGVuZHMgb24gQVJDSF9PTUFQMSAmJiBBUkNIX09NQVAxNVhYCiAJaGVscAogCSAgU3VwcG9ydCBmb3IgVm9pY2VibHVlIEdTTS9Wb0lQIGdhdGV3YXkuIFNheSBZIGhlcmUgaWYgeW91IGhhdmUKIAkgIHN1Y2ggYSBib2FyZC4KIAogY29uZmlnIE1BQ0hfTkVUU1RBUgogCWJvb2wgIk5ldFN0YXIiCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAxICYmIEFSQ0hfT01BUDE1MTAKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDEgJiYgQVJDSF9PTUFQMTVYWAogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIE5ldFN0YXIgUEJYLiBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIHN1Y2ggYSBib2FyZC4KIAorY29uZmlnIE1BQ0hfT01BUF9QQUxNVEUKKwlib29sICJQYWxtIFR1bmdzdGVuIEUiCisJZGVwZW5kcyBvbiBBUkNIX09NQVAxICYmIEFSQ0hfT01BUDE1WFgKKwloZWxwCisgICAgICAgICAgU3VwcG9ydCBmb3IgdGhlIFBhbG0gVHVuZ3N0ZW4gRSBQREEuIEN1cnJlbnRseSBvbmx5IHRoZSBMQ0QgcGFuZWwKKyAgICAgICAgICBpcyBzdXBwb3J0ZWQuIFRvIGJvb3QgdGhlIGtlcm5lbCwgeW91J2xsIG5lZWQgYSBQYWxtT1MgY29tcGF0aWJsZQorICAgICAgICAgIGJvb3Rsb2FkZXI7IGNoZWNrIG91dCBodHRwOi8vcGFsbXRlbGludXguc291cmNlZm9yZ2UubmV0IGZvciBtb3JlCisgICAgICAgICAgaW5mb3JtYXRpb25zLgorICAgICAgICAgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgc3VjaCBhIFBEQSwgc2F5IE5PIG90aGVyd2lzZS4KKwogY29uZmlnIE1BQ0hfT01BUF9HRU5FUklDCiAJYm9vbCAiR2VuZXJpYyBPTUFQIGJvYXJkIgotCWRlcGVuZHMgb24gQVJDSF9PTUFQMSAmJiAoQVJDSF9PTUFQMTUxMCB8fCBBUkNIX09NQVAxNlhYKQorCWRlcGVuZHMgb24gQVJDSF9PTUFQMSAmJiAoQVJDSF9PTUFQMTVYWCB8fCBBUkNIX09NQVAxNlhYKQogCWhlbHAKICAgICAgICAgICBTdXBwb3J0IGZvciBnZW5lcmljIE9NQVAtMTUxMCwgMTYxMCBvciAxNzEwIGJvYXJkIHdpdGgKICAgICAgICAgICBubyBGUEdBLiBDYW4gYmUgdXNlZCBhcyB0ZW1wbGF0ZSBmb3IgcG9ydGluZyBMaW51eCB0bwpAQCAtMTIxLDMyICsxMzEsMzIgQEAKIAogY29uZmlnIE9NQVBfQVJNXzE2OE1IWgogCWJvb2wgIk9NQVAgQVJNIDE2OCBNSHogQ1BVIgotCWRlcGVuZHMgb24gQVJDSF9PTUFQMSAmJiAoQVJDSF9PTUFQMTUxMCB8fCBBUkNIX09NQVAxNlhYIHx8IEFSQ0hfT01BUDczMCkKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDEgJiYgKEFSQ0hfT01BUDE1WFggfHwgQVJDSF9PTUFQMTZYWCB8fCBBUkNIX09NQVA3MzApCiAJaGVscAogICAgICAgICAgIEVuYWJsZSAxNjhNSHogY2xvY2sgZm9yIE9NQVAgQ1BVLiBJZiB1bnN1cmUsIHNheSBOLgogCiBjb25maWcgT01BUF9BUk1fMTUwTUhaCiAJYm9vbCAiT01BUCBBUk0gMTUwIE1IeiBDUFUiCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAxICYmIEFSQ0hfT01BUDE1MTAKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDEgJiYgQVJDSF9PTUFQMTVYWAogCWhlbHAKIAkgIEVuYWJsZSAxNTBNSHogY2xvY2sgZm9yIE9NQVAgQ1BVLiBJZiB1bnN1cmUsIHNheSBOLgogCiBjb25maWcgT01BUF9BUk1fMTIwTUhaCiAJYm9vbCAiT01BUCBBUk0gMTIwIE1IeiBDUFUiCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAxICYmIChBUkNIX09NQVAxNTEwIHx8IEFSQ0hfT01BUDE2WFggfHwgQVJDSF9PTUFQNzMwKQorCWRlcGVuZHMgb24gQVJDSF9PTUFQMSAmJiAoQVJDSF9PTUFQMTVYWCB8fCBBUkNIX09NQVAxNlhYIHx8IEFSQ0hfT01BUDczMCkKIAloZWxwCiAgICAgICAgICAgRW5hYmxlIDEyME1IeiBjbG9jayBmb3IgT01BUCBDUFUuIElmIHVuc3VyZSwgc2F5IE4uCiAKIGNvbmZpZyBPTUFQX0FSTV82ME1IWgogCWJvb2wgIk9NQVAgQVJNIDYwIE1IeiBDUFUiCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAxICYmIChBUkNIX09NQVAxNTEwIHx8IEFSQ0hfT01BUDE2WFggfHwgQVJDSF9PTUFQNzMwKQorCWRlcGVuZHMgb24gQVJDSF9PTUFQMSAmJiAoQVJDSF9PTUFQMTVYWCB8fCBBUkNIX09NQVAxNlhYIHx8IEFSQ0hfT01BUDczMCkKICAgICAgICAgZGVmYXVsdCB5CiAJaGVscAogICAgICAgICAgIEVuYWJsZSA2ME1IeiBjbG9jayBmb3IgT01BUCBDUFUuIElmIHVuc3VyZSwgc2F5IFkuCiAKIGNvbmZpZyBPTUFQX0FSTV8zME1IWgogCWJvb2wgIk9NQVAgQVJNIDMwIE1IeiBDUFUiCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAxICYmIChBUkNIX09NQVAxNTEwIHx8IEFSQ0hfT01BUDE2WFggfHwgQVJDSF9PTUFQNzMwKQorCWRlcGVuZHMgb24gQVJDSF9PTUFQMSAmJiAoQVJDSF9PTUFQMTVYWCB8fCBBUkNIX09NQVAxNlhYIHx8IEFSQ0hfT01BUDczMCkKIAloZWxwCiAgICAgICAgICAgRW5hYmxlIDMwTUh6IGNsb2NrIGZvciBPTUFQIENQVS4gSWYgdW5zdXJlLCBzYXkgTi4KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtb21hcDEvTWFrZWZpbGUKaW5kZXggMTgxYTkzZC4uYjBiMDAxNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL01ha2VmaWxlCkBAIC0zLDcgKzMsNyBAQAogIwogCiAjIENvbW1vbiBzdXBwb3J0Ci1vYmoteSA6PSBpby5vIGlkLm8gaXJxLm8gdGltZS5vIHNlcmlhbC5vIGRldmljZXMubworb2JqLXkgOj0gaW8ubyBpZC5vIGNsb2NrLm8gaXJxLm8gdGltZS5vIG11eC5vIHNlcmlhbC5vIGRldmljZXMubwogbGVkLXkgOj0gbGVkcy5vCiAKICMgU3BlY2lmaWMgYm9hcmQgc3VwcG9ydApAQCAtMTUsOCArMTUsOSBAQAogb2JqLSQoQ09ORklHX01BQ0hfT01BUF9IMykJCSs9IGJvYXJkLWgzLm8KIG9iai0kKENPTkZJR19NQUNIX1ZPSUNFQkxVRSkJCSs9IGJvYXJkLXZvaWNlYmx1ZS5vCiBvYmotJChDT05GSUdfTUFDSF9ORVRTVEFSKQkJKz0gYm9hcmQtbmV0c3Rhci5vCitvYmotJChDT05GSUdfTUFDSF9PTUFQX1BBTE1URSkJCSs9IGJvYXJkLXBhbG10ZS5vCiAKLWlmZXEgKCQoQ09ORklHX0FSQ0hfT01BUDE1MTApLHkpCitpZmVxICgkKENPTkZJR19BUkNIX09NQVAxNVhYKSx5KQogIyBJbm5vdmF0b3ItMTUxMCBGUEdBCiBvYmotJChDT05GSUdfTUFDSF9PTUFQX0lOTk9WQVRPUikJKz0gZnBnYS5vCiBlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1nZW5lcmljLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWdlbmVyaWMuYwppbmRleCBjMjA5YzcxLi40YjI5MmU5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWdlbmVyaWMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWdlbmVyaWMuYwpAQCAtMTUsNyArMTUsNyBAQAogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KQEAgLTI4LDggKzI4LDYgQEAKICNpbmNsdWRlIDxhc20vYXJjaC9ib2FyZC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2NvbW1vbi5oPgogCi1zdGF0aWMgaW50IF9faW5pdGRhdGEgZ2VuZXJpY19zZXJpYWxfcG9ydHNbT01BUF9NQVhfTlJfUE9SVFNdID0gezEsIDEsIDF9OwotCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9nZW5lcmljX2luaXRfaXJxKHZvaWQpCiB7CiAJb21hcF9pbml0X2lycSgpOwpAQCAtMzcsNyArMzUsNyBAQAogCiAvKiBhc3N1bWUgbm8gTWluaS1BQiBwb3J0ICovCiAKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTUxMAorI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNVhYCiBzdGF0aWMgc3RydWN0IG9tYXBfdXNiX2NvbmZpZyBnZW5lcmljMTUxMF91c2JfY29uZmlnIF9faW5pdGRhdGEgPSB7CiAJLnJlZ2lzdGVyX2hvc3QJPSAxLAogCS5yZWdpc3Rlcl9kZXYJPSAxLApAQCAtNzYsMjEgKzc0LDE5IEBACiAKICNlbmRpZgogCitzdGF0aWMgc3RydWN0IG9tYXBfdWFydF9jb25maWcgZ2VuZXJpY191YXJ0X2NvbmZpZyBfX2luaXRkYXRhID0geworCS5lbmFibGVkX3VhcnRzID0gKCgxIDw8IDApIHwgKDEgPDwgMSkgfCAoMSA8PCAyKSksCit9OworCiBzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2tlcm5lbCBnZW5lcmljX2NvbmZpZ1tdID0gewogCXsgT01BUF9UQUdfVVNCLCAgICAgICAgICAgTlVMTCB9LAogCXsgT01BUF9UQUdfTU1DLCAgICAgICAgICAgJmdlbmVyaWNfbW1jX2NvbmZpZyB9LAorCXsgT01BUF9UQUdfVUFSVCwJJmdlbmVyaWNfdWFydF9jb25maWcgfSwKIH07CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwX2dlbmVyaWNfaW5pdCh2b2lkKQogewotCWNvbnN0IHN0cnVjdCBvbWFwX3VhcnRfY29uZmlnICp1YXJ0X2NvbmY7Ci0KLQkvKgotCSAqIE1ha2Ugc3VyZSB0aGUgc2VyaWFsIHBvcnRzIGFyZSBtdXhlZCBvbiBhdCB0aGlzIHBvaW50LgotCSAqIFlvdSBoYXZlIHRvIG11eCB0aGVtIG9mZiBpbiBkZXZpY2UgZHJpdmVycyBsYXRlciBvbgotCSAqIGlmIG5vdCBuZWVkZWQuCi0JICovCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1MTAKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAogCWlmIChjcHVfaXNfb21hcDE1MTAoKSkgewogCQlnZW5lcmljX2NvbmZpZ1swXS5kYXRhID0gJmdlbmVyaWMxNTEwX3VzYl9jb25maWc7CiAJfQpAQCAtMTAxLDIwICs5Nyw5IEBACiAJfQogI2VuZGlmCiAKLQl1YXJ0X2NvbmYgPSBvbWFwX2dldF9jb25maWcoT01BUF9UQUdfVUFSVCwgc3RydWN0IG9tYXBfdWFydF9jb25maWcpOwotCWlmICh1YXJ0X2NvbmYgIT0gTlVMTCkgewotCQl1bnNpZ25lZCBpbnQgZW5hYmxlZF9wb3J0cywgaTsKLQotCQllbmFibGVkX3BvcnRzID0gdWFydF9jb25mLT5lbmFibGVkX3VhcnRzOwotCQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7Ci0JCQlpZiAoIShlbmFibGVkX3BvcnRzICYgKDEgPDwgaSkpKQotCQkJCWdlbmVyaWNfc2VyaWFsX3BvcnRzW2ldID0gMDsKLQkJfQotCX0KLQogCW9tYXBfYm9hcmRfY29uZmlnID0gZ2VuZXJpY19jb25maWc7CiAJb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUoZ2VuZXJpY19jb25maWcpOwotCW9tYXBfc2VyaWFsX2luaXQoZ2VuZXJpY19zZXJpYWxfcG9ydHMpOworCW9tYXBfc2VyaWFsX2luaXQoKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IG9tYXBfZ2VuZXJpY19tYXBfaW8odm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDIuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDIuYwppbmRleCA0ZWU2YmQ4Li5hMDdlMmM5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMi5jCkBAIC00MCw4ICs0MCw2IEBACiAKIGV4dGVybiBpbnQgb21hcF9ncGlvX2luaXQodm9pZCk7CiAKLXN0YXRpYyBpbnQgX19pbml0ZGF0YSBoMl9zZXJpYWxfcG9ydHNbT01BUF9NQVhfTlJfUE9SVFNdID0gezEsIDEsIDF9OwotCiBzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gaDJfcGFydGl0aW9uc1tdID0gewogCS8qIGJvb3Rsb2FkZXIgKFUtQm9vdCwgZXRjKSBpbiBmaXJzdCBzZWN0b3IgKi8KIAl7CkBAIC0xNjAsOSArMTU4LDIwIEBACiAJfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgb21hcF91YXJ0X2NvbmZpZyBoMl91YXJ0X2NvbmZpZyBfX2luaXRkYXRhID0geworCS5lbmFibGVkX3VhcnRzID0gKCgxIDw8IDApIHwgKDEgPDwgMSkgfCAoMSA8PCAyKSksCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfbGNkX2NvbmZpZyBoMl9sY2RfY29uZmlnIF9faW5pdGRhdGEgPSB7CisJLnBhbmVsX25hbWUJPSAiaDIiLAorCS5jdHJsX25hbWUJPSAiaW50ZXJuYWwiLAorfTsKKwogc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX2NvbmZpZ19rZXJuZWwgaDJfY29uZmlnW10gPSB7CiAJeyBPTUFQX1RBR19VU0IsICAgICAgICAgICAmaDJfdXNiX2NvbmZpZyB9LAogCXsgT01BUF9UQUdfTU1DLCAgICAgICAgICAgJmgyX21tY19jb25maWcgfSwKKwl7IE9NQVBfVEFHX1VBUlQsCSZoMl91YXJ0X2NvbmZpZyB9LAorCXsgT01BUF9UQUdfTENELAkJJmgyX2xjZF9jb25maWcgfSwKIH07CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBoMl9pbml0KHZvaWQpCkBAIC0xODAsMTIgKzE4OSwxMiBAQAogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGgyX2RldmljZXMsIEFSUkFZX1NJWkUoaDJfZGV2aWNlcykpOwogCW9tYXBfYm9hcmRfY29uZmlnID0gaDJfY29uZmlnOwogCW9tYXBfYm9hcmRfY29uZmlnX3NpemUgPSBBUlJBWV9TSVpFKGgyX2NvbmZpZyk7CisJb21hcF9zZXJpYWxfaW5pdCgpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgaDJfbWFwX2lvKHZvaWQpCiB7CiAJb21hcF9tYXBfY29tbW9uX2lvKCk7Ci0Jb21hcF9zZXJpYWxfaW5pdChoMl9zZXJpYWxfcG9ydHMpOwogfQogCiBNQUNISU5FX1NUQVJUKE9NQVBfSDIsICJUSS1IMiIpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgzLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgzLmMKaW5kZXggZmM4MjQzNi4uNjY4ZTI3OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDMuYwpAQCAtNDEsOCArNDEsNiBAQAogCiBleHRlcm4gaW50IG9tYXBfZ3Bpb19pbml0KHZvaWQpOwogCi1zdGF0aWMgaW50IF9faW5pdGRhdGEgaDNfc2VyaWFsX3BvcnRzW09NQVBfTUFYX05SX1BPUlRTXSA9IHsxLCAxLCAxfTsKLQogc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGgzX3BhcnRpdGlvbnNbXSA9IHsKIAkvKiBib290bG9hZGVyIChVLUJvb3QsIGV0YykgaW4gZmlyc3Qgc2VjdG9yICovCiAJewpAQCAtMTY4LDkgKzE2NiwyMCBAQAogCX0sCiB9OwogCitzdGF0aWMgc3RydWN0IG9tYXBfdWFydF9jb25maWcgaDNfdWFydF9jb25maWcgX19pbml0ZGF0YSA9IHsKKwkuZW5hYmxlZF91YXJ0cyA9ICgoMSA8PCAwKSB8ICgxIDw8IDEpIHwgKDEgPDwgMikpLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2xjZF9jb25maWcgaDNfbGNkX2NvbmZpZyBfX2luaXRkYXRhID0geworCS5wYW5lbF9uYW1lCT0gImgzIiwKKwkuY3RybF9uYW1lCT0gImludGVybmFsIiwKK307CisKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfa2VybmVsIGgzX2NvbmZpZ1tdID0gewotCXsgT01BUF9UQUdfVVNCLAkgJmgzX3VzYl9jb25maWcgfSwKLQl7IE9NQVBfVEFHX01NQywgICZoM19tbWNfY29uZmlnIH0sCisJeyBPTUFQX1RBR19VU0IsCQkmaDNfdXNiX2NvbmZpZyB9LAorCXsgT01BUF9UQUdfTU1DLAkJJmgzX21tY19jb25maWcgfSwKKwl7IE9NQVBfVEFHX1VBUlQsCSZoM191YXJ0X2NvbmZpZyB9LAorCXsgT01BUF9UQUdfTENELAkJJmgzX2xjZF9jb25maWcgfSwKIH07CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBoM19pbml0KHZvaWQpCkBAIC0xODAsNiArMTg5LDcgQEAKIAkodm9pZCkgcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7CiAJb21hcF9ib2FyZF9jb25maWcgPSBoM19jb25maWc7CiAJb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUoaDNfY29uZmlnKTsKKwlvbWFwX3NlcmlhbF9pbml0KCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBoM19pbml0X3NtYzkxeCh2b2lkKQpAQCAtMjAxLDcgKzIxMSw2IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgaDNfbWFwX2lvKHZvaWQpCiB7CiAJb21hcF9tYXBfY29tbW9uX2lvKCk7Ci0Jb21hcF9zZXJpYWxfaW5pdChoM19zZXJpYWxfcG9ydHMpOwogfQogCiBNQUNISU5FX1NUQVJUKE9NQVBfSDMsICJUSSBPTUFQMTcxMCBIMyBib2FyZCIpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWlubm92YXRvci5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1pbm5vdmF0b3IuYwppbmRleCBhMmVhYzg1Li45NWYxZmYzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWlubm92YXRvci5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaW5ub3ZhdG9yLmMKQEAgLTM2LDggKzM2LDYgQEAKICNpbmNsdWRlIDxhc20vYXJjaC91c2IuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9jb21tb24uaD4KIAotc3RhdGljIGludCBfX2luaXRkYXRhIGlubm92YXRvcl9zZXJpYWxfcG9ydHNbT01BUF9NQVhfTlJfUE9SVFNdID0gezEsIDEsIDF9OwotCiBzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gaW5ub3ZhdG9yX3BhcnRpdGlvbnNbXSA9IHsKIAkvKiBib290bG9hZGVyIChVLUJvb3QsIGV0YykgaW4gZmlyc3Qgc2VjdG9yICovCiAJewpAQCAtOTksNyArOTcsNyBAQAogCS5yZXNvdXJjZQk9ICZpbm5vdmF0b3JfZmxhc2hfcmVzb3VyY2UsCiB9OwogCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1MTAKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAogCiAvKiBPbmx5IEZQR0EgbmVlZHMgdG8gYmUgbWFwcGVkIGhlcmUuIEFsbCBvdGhlcnMgYXJlIGRvbmUgd2l0aCBpb3JlbWFwICovCiBzdGF0aWMgc3RydWN0IG1hcF9kZXNjIGlubm92YXRvcjE1MTBfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CkBAIC0xMzYsNyArMTM0LDcgQEAKIAkmaW5ub3ZhdG9yMTUxMF9zbWM5MXhfZGV2aWNlLAogfTsKIAotI2VuZGlmIC8qIENPTkZJR19BUkNIX09NQVAxNTEwICovCisjZW5kaWYgLyogQ09ORklHX0FSQ0hfT01BUDE1WFggKi8KIAogI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNlhYCiAKQEAgLTE4NSw3ICsxODMsNyBAQAogewogCW9tYXBfaW5pdF9pcnEoKTsKIAlvbWFwX2dwaW9faW5pdCgpOwotI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNTEwCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1WFgKIAlpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKIAkJb21hcDE1MTBfZnBnYV9pbml0X2lycSgpOwogCX0KQEAgLTE5Myw3ICsxOTEsNyBAQAogCWlubm92YXRvcl9pbml0X3NtYzkxeCgpOwogfQogCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1MTAKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAogc3RhdGljIHN0cnVjdCBvbWFwX3VzYl9jb25maWcgaW5ub3ZhdG9yMTUxMF91c2JfY29uZmlnIF9faW5pdGRhdGEgPSB7CiAJLyogZm9yIGJ1bmRsZWQgbm9uLXN0YW5kYXJkIGhvc3QgYW5kIHBlcmlwaGVyYWwgY2FibGVzICovCiAJLmhtY19tb2RlCT0gNCwKQEAgLTIwNSw2ICsyMDMsMTEgQEAKIAkucmVnaXN0ZXJfZGV2CT0gMSwKIAkucGluc1swXQk9IDIsCiB9OworCitzdGF0aWMgc3RydWN0IG9tYXBfbGNkX2NvbmZpZyBpbm5vdmF0b3IxNTEwX2xjZF9jb25maWcgX19pbml0ZGF0YSA9IHsKKwkucGFuZWxfbmFtZQk9ICJpbm4xNTEwIiwKKwkuY3RybF9uYW1lCT0gImludGVybmFsIiwKK307CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNlhYCkBAIC0yMjIsNiArMjI1LDExIEBACiAKIAkucGluc1sxXQk9IDMsCiB9OworCitzdGF0aWMgc3RydWN0IG9tYXBfbGNkX2NvbmZpZyBpbm5vdmF0b3IxNjEwX2xjZF9jb25maWcgX19pbml0ZGF0YSA9IHsKKwkucGFuZWxfbmFtZQk9ICJpbm4xNjEwIiwKKwkuY3RybF9uYW1lCT0gImludGVybmFsIiwKK307CiAjZW5kaWYKIAogc3RhdGljIHN0cnVjdCBvbWFwX21tY19jb25maWcgaW5ub3ZhdG9yX21tY19jb25maWcgX19pbml0ZGF0YSA9IHsKQEAgLTIzNCwxNCArMjQyLDIwIEBACiAJfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgb21hcF91YXJ0X2NvbmZpZyBpbm5vdmF0b3JfdWFydF9jb25maWcgX19pbml0ZGF0YSA9IHsKKwkuZW5hYmxlZF91YXJ0cyA9ICgoMSA8PCAwKSB8ICgxIDw8IDEpIHwgKDEgPDwgMikpLAorfTsKKwogc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX2NvbmZpZ19rZXJuZWwgaW5ub3ZhdG9yX2NvbmZpZ1tdID0gewogCXsgT01BUF9UQUdfVVNCLCAgICAgICAgIE5VTEwgfSwKKwl7IE9NQVBfVEFHX0xDRCwJCU5VTEwgfSwKIAl7IE9NQVBfVEFHX01NQywJCSZpbm5vdmF0b3JfbW1jX2NvbmZpZyB9LAorCXsgT01BUF9UQUdfVUFSVCwJJmlubm92YXRvcl91YXJ0X2NvbmZpZyB9LAogfTsKIAogc3RhdGljIHZvaWQgX19pbml0IGlubm92YXRvcl9pbml0KHZvaWQpCiB7Ci0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1MTAKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAogCWlmIChjcHVfaXNfb21hcDE1MTAoKSkgewogCQlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhpbm5vdmF0b3IxNTEwX2RldmljZXMsIEFSUkFZX1NJWkUoaW5ub3ZhdG9yMTUxMF9kZXZpY2VzKSk7CiAJfQpAQCAtMjUyLDIzICsyNjYsMjggQEAKIAl9CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNTEwCi0JaWYgKGNwdV9pc19vbWFwMTUxMCgpKQorI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNVhYCisJaWYgKGNwdV9pc19vbWFwMTUxMCgpKSB7CiAJCWlubm92YXRvcl9jb25maWdbMF0uZGF0YSA9ICZpbm5vdmF0b3IxNTEwX3VzYl9jb25maWc7CisJCWlubm92YXRvcl9jb25maWdbMV0uZGF0YSA9ICZpbm5vdmF0b3IxNTEwX2xjZF9jb25maWc7CisJfQogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE2WFgKLQlpZiAoY3B1X2lzX29tYXAxNjEwKCkpCisJaWYgKGNwdV9pc19vbWFwMTYxMCgpKSB7CiAJCWlubm92YXRvcl9jb25maWdbMF0uZGF0YSA9ICZoMl91c2JfY29uZmlnOworCQlpbm5vdmF0b3JfY29uZmlnWzFdLmRhdGEgPSAmaW5ub3ZhdG9yMTYxMF9sY2RfY29uZmlnOworCX0KICNlbmRpZgogCW9tYXBfYm9hcmRfY29uZmlnID0gaW5ub3ZhdG9yX2NvbmZpZzsKIAlvbWFwX2JvYXJkX2NvbmZpZ19zaXplID0gQVJSQVlfU0laRShpbm5vdmF0b3JfY29uZmlnKTsKKwlvbWFwX3NlcmlhbF9pbml0KCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBpbm5vdmF0b3JfbWFwX2lvKHZvaWQpCiB7CiAJb21hcF9tYXBfY29tbW9uX2lvKCk7CiAKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTUxMAorI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNVhYCiAJaWYgKGNwdV9pc19vbWFwMTUxMCgpKSB7CiAJCWlvdGFibGVfaW5pdChpbm5vdmF0b3IxNTEwX2lvX2Rlc2MsIEFSUkFZX1NJWkUoaW5ub3ZhdG9yMTUxMF9pb19kZXNjKSk7CiAJCXVkZWxheSgxMCk7CS8qIERlbGF5IG5lZWRlZCBmb3IgRlBHQSAqLwpAQCAtMjgwLDcgKzI5OSw2IEBACiAJCSAgICAgICBmcGdhX3JlYWQoT01BUDE1MTBfRlBHQV9CT0FSRF9SRVYpKTsKIAl9CiAjZW5kaWYKLQlvbWFwX3NlcmlhbF9pbml0KGlubm92YXRvcl9zZXJpYWxfcG9ydHMpOwogfQogCiBNQUNISU5FX1NUQVJUKE9NQVBfSU5OT1ZBVE9SLCAiVEktSW5ub3ZhdG9yIikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtbmV0c3Rhci5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1uZXRzdGFyLmMKaW5kZXggYzg1MWMyZS4uMDQ0OGZhNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1uZXRzdGFyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1uZXRzdGFyLmMKQEAgLTU1LDYgKzU1LDE0IEBACiAJJm5ldHN0YXJfc21jOTF4X2RldmljZSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgb21hcF91YXJ0X2NvbmZpZyBuZXRzdGFyX3VhcnRfY29uZmlnIF9faW5pdGRhdGEgPSB7CisJLmVuYWJsZWRfdWFydHMgPSAoKDEgPDwgMCkgfCAoMSA8PCAxKSB8ICgxIDw8IDIpKSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfa2VybmVsIG5ldHN0YXJfY29uZmlnW10gPSB7CisJeyBPTUFQX1RBR19VQVJULAkmbmV0c3Rhcl91YXJ0X2NvbmZpZyB9LAorfTsKKwogc3RhdGljIHZvaWQgX19pbml0IG5ldHN0YXJfaW5pdF9pcnEodm9pZCkKIHsKIAlvbWFwX2luaXRfaXJxKCk7CkBAIC05MiwxNCArMTAwLDE1IEBACiAJLyogU3dpdGNoIG9mZiByZWQgTEVEICovCiAJb21hcF93cml0ZWIoMHgwMCwgT01BUF9MUEcxX1BNUik7CS8qIERpc2FibGUgY2xvY2sgKi8KIAlvbWFwX3dyaXRlYigweDgwLCBPTUFQX0xQRzFfTENSKTsKLX0KIAotc3RhdGljIGludCBfX2luaXRkYXRhIG9tYXBfc2VyaWFsX3BvcnRzW09NQVBfTUFYX05SX1BPUlRTXSA9IHsxLCAxLCAxfTsKKwlvbWFwX2JvYXJkX2NvbmZpZyA9IG5ldHN0YXJfY29uZmlnOworCW9tYXBfYm9hcmRfY29uZmlnX3NpemUgPSBBUlJBWV9TSVpFKG5ldHN0YXJfY29uZmlnKTsKKwlvbWFwX3NlcmlhbF9pbml0KCk7Cit9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBuZXRzdGFyX21hcF9pbyh2b2lkKQogewogCW9tYXBfbWFwX2NvbW1vbl9pbygpOwotCW9tYXBfc2VyaWFsX2luaXQob21hcF9zZXJpYWxfcG9ydHMpOwogfQogCiAjZGVmaW5lIE1BQ0hJTkVfUEFOSUNFRAkJMQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1vc2suYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtb3NrLmMKaW5kZXggYTg4NTI0ZS4uZTk5MGUxYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1vc2suYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLW9zay5jCkBAIC00Niw4ICs0Niw2IEBACiAjaW5jbHVkZSA8YXNtL2FyY2gvdGMuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9jb21tb24uaD4KIAotc3RhdGljIGludCBfX2luaXRkYXRhIG9za19zZXJpYWxfcG9ydHNbT01BUF9NQVhfTlJfUE9SVFNdID0gezEsIDAsIDB9OwotCiBzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gb3NrX3BhcnRpdGlvbnNbXSA9IHsKIAkvKiBib290bG9hZGVyIChVLUJvb3QsIGV0YykgaW4gZmlyc3Qgc2VjdG9yICovCiAJewpAQCAtMTU1LDcgKzE1Myw3IEBACiAJfQogCiAJLyogQ2hlY2sgRU1JRlMgd2FpdCBzdGF0ZXMgdG8gZml4IGVycm9ycyB3aXRoIFNNQ19HRVRfUEtUX0hEUiAqLwotCUVNSUZTX0NDUygxKSB8PSAweDI7CisJRU1JRlNfQ0NTKDEpIHw9IDB4MzsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IG9za19pbml0X2NmKHZvaWQpCkBAIC0xOTMsOCArMTkxLDE5IEBACiAJLnBpbnNbMF0JPSAyLAogfTsKIAorc3RhdGljIHN0cnVjdCBvbWFwX3VhcnRfY29uZmlnIG9za191YXJ0X2NvbmZpZyBfX2luaXRkYXRhID0geworCS5lbmFibGVkX3VhcnRzID0gKDEgPDwgMCksCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfbGNkX2NvbmZpZyBvc2tfbGNkX2NvbmZpZyBfX2luaXRkYXRhID0geworCS5wYW5lbF9uYW1lCT0gIm9zayIsCisJLmN0cmxfbmFtZQk9ICJpbnRlcm5hbCIsCit9OworCiBzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2tlcm5lbCBvc2tfY29uZmlnW10gPSB7CiAJeyBPTUFQX1RBR19VU0IsICAgICAgICAgICAmb3NrX3VzYl9jb25maWcgfSwKKwl7IE9NQVBfVEFHX1VBUlQsCQkmb3NrX3VhcnRfY29uZmlnIH0sCisJeyBPTUFQX1RBR19MQ0QsCQkJJm9za19sY2RfY29uZmlnIH0sCiB9OwogCiAjaWZkZWYJQ09ORklHX09NQVBfT1NLX01JU1RSQUwKQEAgLTI1NCwxMyArMjYzLDEzIEBACiAJb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUob3NrX2NvbmZpZyk7CiAJVVNCX1RSQU5TQ0VJVkVSX0NUUkxfUkVHIHw9ICgzIDw8IDEpOwogCisJb21hcF9zZXJpYWxfaW5pdCgpOwogCW9za19taXN0cmFsX2luaXQoKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IG9za19tYXBfaW8odm9pZCkKIHsKIAlvbWFwX21hcF9jb21tb25faW8oKTsKLQlvbWFwX3NlcmlhbF9pbml0KG9za19zZXJpYWxfcG9ydHMpOwogfQogCiBNQUNISU5FX1NUQVJUKE9NQVBfT1NLLCAiVEktT1NLIikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGFsbXRlLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG10ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0MGIyMGQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG10ZS5jCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG10ZS5jCisgKgorICogTW9kaWZpZWQgZnJvbSBib2FyZC1nZW5lcmljLmMKKyAqCisgKiBTdXBwb3J0IGZvciB0aGUgUGFsbSBUdW5nc3RlbiBFIFBEQS4KKyAqCisgKiBPcmlnaW5hbCB2ZXJzaW9uIDogTGF1cmVudCBHb256YWxlegorICoKKyAqIE1haW50YWludGVycyA6IGh0dHA6Ly9wYWxtdGVsaW51eC5zZi5uZXQKKyAqICAgICAgICAgICAgICAgIHBhbG10ZWxpbnV4LWRldmVsb3BwZXJzQGxpc3RzLnNmLm5ldAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9ncGlvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvbXV4Lmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvdXNiLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvYm9hcmQuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9jb21tb24uaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvY2xvY2suaD4KKworc3RhdGljIHZvaWQgX19pbml0IG9tYXBfZ2VuZXJpY19pbml0X2lycSh2b2lkKQoreworCW9tYXBfaW5pdF9pcnEoKTsKK30KKworc3RhdGljIHN0cnVjdCBvbWFwX3VzYl9jb25maWcgcGFsbXRlX3VzYl9jb25maWcgX19pbml0ZGF0YSA9IHsKKwkucmVnaXN0ZXJfZGV2CT0gMSwKKwkuaG1jX21vZGUJPSAwLAorCS5waW5zWzBdCT0gMywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9tbWNfY29uZmlnIHBhbG10ZV9tbWNfY29uZmlnIF9faW5pdGRhdGEgPSB7CisJLm1tYyBbMF0gPSB7CisJCS5lbmFibGVkIAk9IDEsCisJCS53aXJlNAkJPSAxLAorCQkud3BfcGluCQk9IE9NQVBfTVBVSU8oMyksCisJCS5wb3dlcl9waW4JPSAtMSwKKwkJLnN3aXRjaF9waW4JPSAtMSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2xjZF9jb25maWcgcGFsbXRlX2xjZF9jb25maWcgX19pbml0ZGF0YSA9IHsKKwkucGFuZWxfbmFtZQk9ICJwYWxtdGUiLAorCS5jdHJsX25hbWUJPSAiaW50ZXJuYWwiLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX2NvbmZpZ19rZXJuZWwgcGFsbXRlX2NvbmZpZ1tdID0geworCXsgT01BUF9UQUdfVVNCLCAmcGFsbXRlX3VzYl9jb25maWcgfSwKKwl7IE9NQVBfVEFHX01NQywJJnBhbG10ZV9tbWNfY29uZmlnIH0sCisJeyBPTUFQX1RBR19MQ0QsCSZwYWxtdGVfbGNkX2NvbmZpZyB9LAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IG9tYXBfZ2VuZXJpY19pbml0KHZvaWQpCit7CisJb21hcF9ib2FyZF9jb25maWcgPSBwYWxtdGVfY29uZmlnOworCW9tYXBfYm9hcmRfY29uZmlnX3NpemUgPSBBUlJBWV9TSVpFKHBhbG10ZV9jb25maWcpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9nZW5lcmljX21hcF9pbyh2b2lkKQoreworCW9tYXBfbWFwX2NvbW1vbl9pbygpOworfQorCitNQUNISU5FX1NUQVJUKE9NQVBfUEFMTVRFLCAiT01BUDMxMCBiYXNlZCBQYWxtIFR1bmdzdGVuIEUiKQorCS5waHlzX3JhbQk9IDB4MTAwMDAwMDAsCisJLnBoeXNfaW8JPSAweGZmZjAwMDAwLAorCS5pb19wZ19vZmZzdAk9ICgoMHhmZWYwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IDB4MTAwMDAxMDAsCisJLm1hcF9pbwkJPSBvbWFwX2dlbmVyaWNfbWFwX2lvLAorCS5pbml0X2lycQk9IG9tYXBfZ2VuZXJpY19pbml0X2lycSwKKwkuaW5pdF9tYWNoaW5lCT0gb21hcF9nZW5lcmljX2luaXQsCisJLnRpbWVyCQk9ICZvbWFwX3RpbWVyLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGVyc2V1czIuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGVyc2V1czIuYwppbmRleCAzNTRiMTU3Li5iZDkwMGI3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBlcnNldXMyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wZXJzZXVzMi5jCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8YXNtL2FyY2gvbXV4Lmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvZnBnYS5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2NvbW1vbi5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2JvYXJkLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc21jOTF4X3Jlc291cmNlc1tdID0gewogCVswXSA9IHsKQEAgLTQzLDggKzQ0LDYgQEAKIAl9LAogfTsKIAotc3RhdGljIGludCBfX2luaXRkYXRhIHAyX3NlcmlhbF9wb3J0c1tPTUFQX01BWF9OUl9QT1JUU10gPSB7MSwgMSwgMH07Ci0KIHN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBwMl9wYXJ0aXRpb25zW10gPSB7CiAJLyogYm9vdGxvYWRlciAoVS1Cb290LCBldGMpIGluIGZpcnN0IHNlY3RvciAqLwogCXsKQEAgLTExMSw5ICsxMTAsMjcgQEAKIAkmc21jOTF4X2RldmljZSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgb21hcF91YXJ0X2NvbmZpZyBwZXJzZXVzMl91YXJ0X2NvbmZpZyBfX2luaXRkYXRhID0geworCS5lbmFibGVkX3VhcnRzID0gKCgxIDw8IDApIHwgKDEgPDwgMSkpLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2xjZF9jb25maWcgcGVyc2V1czJfbGNkX2NvbmZpZyBfX2luaXRkYXRhID0geworCS5wYW5lbF9uYW1lCT0gInAyIiwKKwkuY3RybF9uYW1lCT0gImludGVybmFsIiwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfa2VybmVsIHBlcnNldXMyX2NvbmZpZ1tdID0geworCXsgT01BUF9UQUdfVUFSVCwJJnBlcnNldXMyX3VhcnRfY29uZmlnIH0sCisJeyBPTUFQX1RBR19MQ0QsCQkmcGVyc2V1czJfbGNkX2NvbmZpZyB9LAorfTsKKwogc3RhdGljIHZvaWQgX19pbml0IG9tYXBfcGVyc2V1czJfaW5pdCh2b2lkKQogewogCSh2b2lkKSBwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKKworCW9tYXBfYm9hcmRfY29uZmlnID0gcGVyc2V1czJfY29uZmlnOworCW9tYXBfYm9hcmRfY29uZmlnX3NpemUgPSBBUlJBWV9TSVpFKHBlcnNldXMyX2NvbmZpZyk7CisJb21hcF9zZXJpYWxfaW5pdCgpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgcGVyc2V1czJfaW5pdF9zbWM5MXgodm9pZCkKQEAgLTEzMSw3ICsxNDgsNiBAQAogCW9tYXBfZ3Bpb19pbml0KCk7CiAJcGVyc2V1czJfaW5pdF9zbWM5MXgoKTsKIH0KLQogLyogT25seSBGUEdBIG5lZWRzIHRvIGJlIG1hcHBlZCBoZXJlLiBBbGwgb3RoZXJzIGFyZSBkb25lIHdpdGggaW9yZW1hcCAqLwogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBvbWFwX3BlcnNldXMyX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0gewogCXsKQEAgLTE3OSw3ICsxOTUsNiBAQAogCSAqIEl0IGlzIHVzZWQgYXMgdGhlIEV0aGVybmV0IGNvbnRyb2xsZXIgaW50ZXJydXB0CiAJICovCiAJb21hcF93cml0ZWwob21hcF9yZWFkbChPTUFQNzMwX0lPX0NPTkZfOSkgJiAweDFGRkZGRkZGLCBPTUFQNzMwX0lPX0NPTkZfOSk7Ci0Jb21hcF9zZXJpYWxfaW5pdChwMl9zZXJpYWxfcG9ydHMpOwogfQogCiBNQUNISU5FX1NUQVJUKE9NQVBfUEVSU0VVUzIsICJPTUFQNzMwIFBlcnNldXMyIikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtdm9pY2VibHVlLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXZvaWNlYmx1ZS5jCmluZGV4IDNmMDE4YjIuLjZmOWE2MjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtdm9pY2VibHVlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC12b2ljZWJsdWUuYwpAQCAtMTUwLDkgKzE1MCwxNCBAQAogCX0sCiB9OwogCitzdGF0aWMgc3RydWN0IG9tYXBfdWFydF9jb25maWcgdm9pY2VibHVlX3VhcnRfY29uZmlnIF9faW5pdGRhdGEgPSB7CisJLmVuYWJsZWRfdWFydHMgPSAoKDEgPDwgMCkgfCAoMSA8PCAxKSB8ICgxIDw8IDIpKSwKK307CisKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfa2VybmVsIHZvaWNlYmx1ZV9jb25maWdbXSA9IHsKIAl7IE9NQVBfVEFHX1VTQiwgJnZvaWNlYmx1ZV91c2JfY29uZmlnIH0sCiAJeyBPTUFQX1RBR19NTUMsICZ2b2ljZWJsdWVfbW1jX2NvbmZpZyB9LAorCXsgT01BUF9UQUdfVUFSVCwJJnZvaWNlYmx1ZV91YXJ0X2NvbmZpZyB9LAogfTsKIAogc3RhdGljIHZvaWQgX19pbml0IHZvaWNlYmx1ZV9pbml0X2lycSh2b2lkKQpAQCAtMTkxLDYgKzE5Niw3IEBACiAJcGxhdGZvcm1fYWRkX2RldmljZXModm9pY2VibHVlX2RldmljZXMsIEFSUkFZX1NJWkUodm9pY2VibHVlX2RldmljZXMpKTsKIAlvbWFwX2JvYXJkX2NvbmZpZyA9IHZvaWNlYmx1ZV9jb25maWc7CiAJb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUodm9pY2VibHVlX2NvbmZpZyk7CisJb21hcF9zZXJpYWxfaW5pdCgpOwogCiAJLyogVGhlcmUgaXMgYSBnb29kIGNoYW5jZSBib2FyZCBpcyBnb2luZyB1cCwgc28gZW5hYmxlIHBvd2VyIExFRAogCSAqIChpdCBpcyBjb25uZWN0ZWQgdGhyb3VnaCBpbnZlcnRvcikgKi8KQEAgLTE5OCwxMiArMjA0LDkgQEAKIAlvbWFwX3dyaXRlYigweDAwLCBPTUFQX0xQRzFfUE1SKTsJLyogRGlzYWJsZSBjbG9jayAqLwogfQogCi1zdGF0aWMgaW50IF9faW5pdGRhdGEgb21hcF9zZXJpYWxfcG9ydHNbT01BUF9NQVhfTlJfUE9SVFNdID0gezEsIDEsIDF9OwotCiBzdGF0aWMgdm9pZCBfX2luaXQgdm9pY2VibHVlX21hcF9pbyh2b2lkKQogewogCW9tYXBfbWFwX2NvbW1vbl9pbygpOwotCW9tYXBfc2VyaWFsX2luaXQob21hcF9zZXJpYWxfcG9ydHMpOwogfQogCiAjZGVmaW5lIE1BQ0hJTkVfUEFOSUNFRAkJMQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9jbG9jay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyNzdlZWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2Nsb2NrLmMKQEAgLTAsMCArMSw3OTIgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwMS9jbG9jay5jCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNCAtIDIwMDUgTm9raWEgY29ycG9yYXRpb24KKyAqICBXcml0dGVuIGJ5IFR1dWtrYSBUaWtrYW5lbiA8dHV1a2thLnRpa2thbmVuQGVsZWt0cm9iaXQuY29tPgorICoKKyAqICBNb2RpZmllZCB0byB1c2Ugb21hcCBzaGFyZWQgY2xvY2sgZnJhbWV3b3JrIGJ5CisgKiAgVG9ueSBMaW5kZ3JlbiA8dG9ueUBhdG9taWRlLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvY2xvY2suaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL3VzYi5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2Nsb2NrLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvc3JhbS5oPgorCisjaW5jbHVkZSAiY2xvY2suaCIKKworX191MzIgYXJtX2lkbGVjdDFfbWFzazsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBPbWFwMSBzcGVjaWZpYyBjbG9jayBmdW5jdGlvbnMKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkIG9tYXAxX3dhdGNoZG9nX3JlY2FsYyhzdHJ1Y3QgY2xrICogY2xrKQoreworCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlIC8gMTQ7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXAxX3VhcnRfcmVjYWxjKHN0cnVjdCBjbGsgKiBjbGspCit7CisJdW5zaWduZWQgaW50IHZhbCA9IG9tYXBfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKKwlpZiAodmFsICYgY2xrLT5lbmFibGVfYml0KQorCQljbGstPnJhdGUgPSA0ODAwMDAwMDsKKwllbHNlCisJCWNsay0+cmF0ZSA9IDEyMDAwMDAwOworfQorCitzdGF0aWMgaW50IG9tYXAxX2Nsa19lbmFibGVfZHNwX2RvbWFpbihzdHJ1Y3QgY2xrICpjbGspCit7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IG9tYXAxX2Nsa191c2UoJmFwaV9jay5jbGspOworCWlmICghcmV0dmFsKSB7CisJCXJldHZhbCA9IG9tYXAxX2Nsa19lbmFibGUoY2xrKTsKKwkJb21hcDFfY2xrX3VudXNlKCZhcGlfY2suY2xrKTsKKwl9CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCBvbWFwMV9jbGtfZGlzYWJsZV9kc3BfZG9tYWluKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpZiAob21hcDFfY2xrX3VzZSgmYXBpX2NrLmNsaykgPT0gMCkgeworCQlvbWFwMV9jbGtfZGlzYWJsZShjbGspOworCQlvbWFwMV9jbGtfdW51c2UoJmFwaV9jay5jbGspOworCX0KK30KKworc3RhdGljIGludCBvbWFwMV9jbGtfZW5hYmxlX3VhcnRfZnVuY3Rpb25hbChzdHJ1Y3QgY2xrICpjbGspCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgdWFydF9jbGsgKnVjbGs7CisKKwlyZXQgPSBvbWFwMV9jbGtfZW5hYmxlKGNsayk7CisJaWYgKHJldCA9PSAwKSB7CisJCS8qIFNldCBzbWFydCBpZGxlIGFja25vd2xlZGdlbWVudCBtb2RlICovCisJCXVjbGsgPSAoc3RydWN0IHVhcnRfY2xrICopY2xrOworCQlvbWFwX3dyaXRlYigob21hcF9yZWFkYih1Y2xrLT5zeXNjX2FkZHIpICYgfjB4MTApIHwgOCwKKwkJCSAgICB1Y2xrLT5zeXNjX2FkZHIpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXAxX2Nsa19kaXNhYmxlX3VhcnRfZnVuY3Rpb25hbChzdHJ1Y3QgY2xrICpjbGspCit7CisJc3RydWN0IHVhcnRfY2xrICp1Y2xrOworCisJLyogU2V0IGZvcmNlIGlkbGUgYWNrbm93bGVkZ2VtZW50IG1vZGUgKi8KKwl1Y2xrID0gKHN0cnVjdCB1YXJ0X2NsayAqKWNsazsKKwlvbWFwX3dyaXRlYigob21hcF9yZWFkYih1Y2xrLT5zeXNjX2FkZHIpICYgfjB4MTgpLCB1Y2xrLT5zeXNjX2FkZHIpOworCisJb21hcDFfY2xrX2Rpc2FibGUoY2xrKTsKK30KKworc3RhdGljIHZvaWQgb21hcDFfY2xrX2FsbG93X2lkbGUoc3RydWN0IGNsayAqY2xrKQoreworCXN0cnVjdCBhcm1faWRsZWN0MV9jbGsgKiBpY2xrID0gKHN0cnVjdCBhcm1faWRsZWN0MV9jbGsgKiljbGs7CisKKwlpZiAoIShjbGstPmZsYWdzICYgQ0xPQ0tfSURMRV9DT05UUk9MKSkKKwkJcmV0dXJuOworCisJaWYgKGljbGstPm5vX2lkbGVfY291bnQgPiAwICYmICEoLS1pY2xrLT5ub19pZGxlX2NvdW50KSkKKwkJYXJtX2lkbGVjdDFfbWFzayB8PSAxIDw8IGljbGstPmlkbGVjdF9zaGlmdDsKK30KKworc3RhdGljIHZvaWQgb21hcDFfY2xrX2RlbnlfaWRsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJc3RydWN0IGFybV9pZGxlY3QxX2NsayAqIGljbGsgPSAoc3RydWN0IGFybV9pZGxlY3QxX2NsayAqKWNsazsKKworCWlmICghKGNsay0+ZmxhZ3MgJiBDTE9DS19JRExFX0NPTlRST0wpKQorCQlyZXR1cm47CisKKwlpZiAoaWNsay0+bm9faWRsZV9jb3VudCsrID09IDApCisJCWFybV9pZGxlY3QxX21hc2sgJj0gfigxIDw8IGljbGstPmlkbGVjdF9zaGlmdCk7Cit9CisKK3N0YXRpYyBfX3UxNiB2ZXJpZnlfY2tjdGxfdmFsdWUoX191MTYgbmV3dmFsKQoreworCS8qIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGZvciBmb2xsb3dpbmcgbGltaXRhdGlvbnMgc2V0CisJICogYnkgdGhlIGhhcmR3YXJlIChhbGwgY29uZGl0aW9ucyBtdXN0IGJlIHRydWUpOgorCSAqIERTUE1NVV9DSyA9PSBEU1BfQ0sgIG9yICBEU1BNTVVfQ0sgPT0gRFNQX0NLLzIKKwkgKiBBUk1fQ0sgPj0gVENfQ0sKKwkgKiBEU1BfQ0sgPj0gVENfQ0sKKwkgKiBEU1BNTVVfQ0sgPj0gVENfQ0sKKwkgKgorCSAqIEluIGFkZGl0aW9uIGZvbGxvd2luZyBydWxlcyBhcmUgZW5mb3JjZWQ6CisJICogTENEX0NLIDw9IFRDX0NLCisJICogQVJNUEVSX0NLIDw9IFRDX0NLCisJICoKKwkgKiBIb3dldmVyLCBtYXhpbXVtIGZyZXF1ZW5jaWVzIGFyZSBub3QgY2hlY2tlZCBmb3IhCisJICovCisJX191OCBwZXJfZXhwOworCV9fdTggbGNkX2V4cDsKKwlfX3U4IGFybV9leHA7CisJX191OCBkc3BfZXhwOworCV9fdTggdGNfZXhwOworCV9fdTggZHNwbW11X2V4cDsKKworCXBlcl9leHAgPSAobmV3dmFsID4+IENLQ1RMX1BFUkRJVl9PRkZTRVQpICYgMzsKKwlsY2RfZXhwID0gKG5ld3ZhbCA+PiBDS0NUTF9MQ0RESVZfT0ZGU0VUKSAmIDM7CisJYXJtX2V4cCA9IChuZXd2YWwgPj4gQ0tDVExfQVJNRElWX09GRlNFVCkgJiAzOworCWRzcF9leHAgPSAobmV3dmFsID4+IENLQ1RMX0RTUERJVl9PRkZTRVQpICYgMzsKKwl0Y19leHAgPSAobmV3dmFsID4+IENLQ1RMX1RDRElWX09GRlNFVCkgJiAzOworCWRzcG1tdV9leHAgPSAobmV3dmFsID4+IENLQ1RMX0RTUE1NVURJVl9PRkZTRVQpICYgMzsKKworCWlmIChkc3BtbXVfZXhwIDwgZHNwX2V4cCkKKwkJZHNwbW11X2V4cCA9IGRzcF9leHA7CisJaWYgKGRzcG1tdV9leHAgPiBkc3BfZXhwKzEpCisJCWRzcG1tdV9leHAgPSBkc3BfZXhwKzE7CisJaWYgKHRjX2V4cCA8IGFybV9leHApCisJCXRjX2V4cCA9IGFybV9leHA7CisJaWYgKHRjX2V4cCA8IGRzcG1tdV9leHApCisJCXRjX2V4cCA9IGRzcG1tdV9leHA7CisJaWYgKHRjX2V4cCA+IGxjZF9leHApCisJCWxjZF9leHAgPSB0Y19leHA7CisJaWYgKHRjX2V4cCA+IHBlcl9leHApCisJCXBlcl9leHAgPSB0Y19leHA7CisKKwluZXd2YWwgJj0gMHhmMDAwOworCW5ld3ZhbCB8PSBwZXJfZXhwIDw8IENLQ1RMX1BFUkRJVl9PRkZTRVQ7CisJbmV3dmFsIHw9IGxjZF9leHAgPDwgQ0tDVExfTENERElWX09GRlNFVDsKKwluZXd2YWwgfD0gYXJtX2V4cCA8PCBDS0NUTF9BUk1ESVZfT0ZGU0VUOworCW5ld3ZhbCB8PSBkc3BfZXhwIDw8IENLQ1RMX0RTUERJVl9PRkZTRVQ7CisJbmV3dmFsIHw9IHRjX2V4cCA8PCBDS0NUTF9UQ0RJVl9PRkZTRVQ7CisJbmV3dmFsIHw9IGRzcG1tdV9leHAgPDwgQ0tDVExfRFNQTU1VRElWX09GRlNFVDsKKworCXJldHVybiBuZXd2YWw7Cit9CisKK3N0YXRpYyBpbnQgY2FsY19kc29yX2V4cChzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwkvKiBOb3RlOiBJZiB0YXJnZXQgZnJlcXVlbmN5IGlzIHRvbyBsb3csIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gNCwKKwkgKiB3aGljaCBpcyBpbnZhbGlkIHZhbHVlLiBDYWxsZXIgbXVzdCBjaGVjayBmb3IgdGhpcyB2YWx1ZSBhbmQgYWN0CisJICogYWNjb3JkaW5nbHkuCisJICoKKwkgKiBOb3RlOiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGNoZWNrIGZvciBmb2xsb3dpbmcgbGltaXRhdGlvbnMgc2V0CisJICogYnkgdGhlIGhhcmR3YXJlIChhbGwgY29uZGl0aW9ucyBtdXN0IGJlIHRydWUpOgorCSAqIERTUE1NVV9DSyA9PSBEU1BfQ0sgIG9yICBEU1BNTVVfQ0sgPT0gRFNQX0NLLzIKKwkgKiBBUk1fQ0sgPj0gVENfQ0sKKwkgKiBEU1BfQ0sgPj0gVENfQ0sKKwkgKiBEU1BNTVVfQ0sgPj0gVENfQ0sKKwkgKi8KKwl1bnNpZ25lZCBsb25nIHJlYWxyYXRlOworCXN0cnVjdCBjbGsgKiBwYXJlbnQ7CisJdW5zaWduZWQgIGRzb3JfZXhwOworCisJaWYgKHVubGlrZWx5KCEoY2xrLT5mbGFncyAmIFJBVEVfQ0tDVEwpKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwYXJlbnQgPSBjbGstPnBhcmVudDsKKwlpZiAodW5saWtlbHkocGFyZW50ID09IDApKQorCQlyZXR1cm4gLUVJTzsKKworCXJlYWxyYXRlID0gcGFyZW50LT5yYXRlOworCWZvciAoZHNvcl9leHA9MDsgZHNvcl9leHA8NDsgZHNvcl9leHArKykgeworCQlpZiAocmVhbHJhdGUgPD0gcmF0ZSkKKwkJCWJyZWFrOworCisJCXJlYWxyYXRlIC89IDI7CisJfQorCisJcmV0dXJuIGRzb3JfZXhwOworfQorCitzdGF0aWMgdm9pZCBvbWFwMV9ja2N0bF9yZWNhbGMoc3RydWN0IGNsayAqIGNsaykKK3sKKwlpbnQgZHNvcjsKKworCS8qIENhbGN1bGF0ZSBkaXZpc29yIGVuY29kZWQgYXMgMi1iaXQgZXhwb25lbnQgKi8KKwlkc29yID0gMSA8PCAoMyAmIChvbWFwX3JlYWR3KEFSTV9DS0NUTCkgPj4gY2xrLT5yYXRlX29mZnNldCkpOworCisJaWYgKHVubGlrZWx5KGNsay0+cmF0ZSA9PSBjbGstPnBhcmVudC0+cmF0ZSAvIGRzb3IpKQorCQlyZXR1cm47IC8qIE5vIGNoYW5nZSwgcXVpY2sgZXhpdCAqLworCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlIC8gZHNvcjsKKworCWlmICh1bmxpa2VseShjbGstPmZsYWdzICYgUkFURV9QUk9QQUdBVEVTKSkKKwkJcHJvcGFnYXRlX3JhdGUoY2xrKTsKK30KKworc3RhdGljIHZvaWQgb21hcDFfY2tjdGxfcmVjYWxjX2RzcF9kb21haW4oc3RydWN0IGNsayAqIGNsaykKK3sKKwlpbnQgZHNvcjsKKworCS8qIENhbGN1bGF0ZSBkaXZpc29yIGVuY29kZWQgYXMgMi1iaXQgZXhwb25lbnQKKwkgKgorCSAqIFRoZSBjbG9jayBjb250cm9sIGJpdHMgYXJlIGluIERTUCBkb21haW4sCisJICogc28gYXBpX2NrIGlzIG5lZWRlZCBmb3IgYWNjZXNzLgorCSAqIE5vdGUgdGhhdCBEU1BfQ0tDVEwgdmlydCBhZGRyID0gcGh5cyBhZGRyLCBzbworCSAqIHdlIG11c3QgdXNlIF9fcmF3X3JlYWR3KCkgaW5zdGVhZCBvZiBvbWFwX3JlYWR3KCkuCisJICovCisJb21hcDFfY2xrX3VzZSgmYXBpX2NrLmNsayk7CisJZHNvciA9IDEgPDwgKDMgJiAoX19yYXdfcmVhZHcoRFNQX0NLQ1RMKSA+PiBjbGstPnJhdGVfb2Zmc2V0KSk7CisJb21hcDFfY2xrX3VudXNlKCZhcGlfY2suY2xrKTsKKworCWlmICh1bmxpa2VseShjbGstPnJhdGUgPT0gY2xrLT5wYXJlbnQtPnJhdGUgLyBkc29yKSkKKwkJcmV0dXJuOyAvKiBObyBjaGFuZ2UsIHF1aWNrIGV4aXQgKi8KKwljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvIGRzb3I7CisKKwlpZiAodW5saWtlbHkoY2xrLT5mbGFncyAmIFJBVEVfUFJPUEFHQVRFUykpCisJCXByb3BhZ2F0ZV9yYXRlKGNsayk7Cit9CisKKy8qIE1QVSB2aXJ0dWFsIGNsb2NrIGZ1bmN0aW9ucyAqLworc3RhdGljIGludCBvbWFwMV9zZWxlY3RfdGFibGVfcmF0ZShzdHJ1Y3QgY2xrICogY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJLyogRmluZCB0aGUgaGlnaGVzdCBzdXBwb3J0ZWQgZnJlcXVlbmN5IDw9IHJhdGUgYW5kIHN3aXRjaCB0byBpdCAqLworCXN0cnVjdCBtcHVfcmF0ZSAqIHB0cjsKKworCWlmIChjbGsgIT0gJnZpcnR1YWxfY2tfbXB1KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWZvciAocHRyID0gcmF0ZV90YWJsZTsgcHRyLT5yYXRlOyBwdHIrKykgeworCQlpZiAocHRyLT54dGFsICE9IGNrX3JlZi5yYXRlKQorCQkJY29udGludWU7CisKKwkJLyogRFBMTDEgY2Fubm90IGJlIHJlcHJvZ3JhbW1lZCB3aXRob3V0IHJpc2tpbmcgc3lzdGVtIGNyYXNoICovCisJCWlmIChsaWtlbHkoY2tfZHBsbDEucmF0ZSE9MCkgJiYgcHRyLT5wbGxfcmF0ZSAhPSBja19kcGxsMS5yYXRlKQorCQkJY29udGludWU7CisKKwkJLyogQ2FuIGNoZWNrIG9ubHkgYWZ0ZXIgeHRhbCBmcmVxdWVuY3kgY2hlY2sgKi8KKwkJaWYgKHB0ci0+cmF0ZSA8PSByYXRlKQorCQkJYnJlYWs7CisJfQorCisJaWYgKCFwdHItPnJhdGUpCisJCXJldHVybiAtRUlOVkFMOworCisJLyoKKwkgKiBJbiBtb3N0IGNhc2VzIHdlIHNob3VsZCBub3QgbmVlZCB0byByZXByb2dyYW0gRFBMTC4KKwkgKiBSZXByb2dyYW1taW5nIHRoZSBEUExMIGlzIHRyaWNreSwgaXQgbXVzdCBiZSBkb25lIGZyb20gU1JBTS4KKwkgKi8KKwlvbWFwX3NyYW1fcmVwcm9ncmFtX2Nsb2NrKHB0ci0+ZHBsbGN0bF92YWwsIHB0ci0+Y2tjdGxfdmFsKTsKKworCWNrX2RwbGwxLnJhdGUgPSBwdHItPnBsbF9yYXRlOworCXByb3BhZ2F0ZV9yYXRlKCZja19kcGxsMSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb21hcDFfY2xrX3NldF9yYXRlX2RzcF9kb21haW4oc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJaW50ICByZXQgPSAtRUlOVkFMOworCWludCAgZHNvcl9leHA7CisJX191MTYgIHJlZ3ZhbDsKKworCWlmIChjbGstPmZsYWdzICYgUkFURV9DS0NUTCkgeworCQlkc29yX2V4cCA9IGNhbGNfZHNvcl9leHAoY2xrLCByYXRlKTsKKwkJaWYgKGRzb3JfZXhwID4gMykKKwkJCWRzb3JfZXhwID0gLUVJTlZBTDsKKwkJaWYgKGRzb3JfZXhwIDwgMCkKKwkJCXJldHVybiBkc29yX2V4cDsKKworCQlyZWd2YWwgPSBfX3Jhd19yZWFkdyhEU1BfQ0tDVEwpOworCQlyZWd2YWwgJj0gfigzIDw8IGNsay0+cmF0ZV9vZmZzZXQpOworCQlyZWd2YWwgfD0gZHNvcl9leHAgPDwgY2xrLT5yYXRlX29mZnNldDsKKwkJX19yYXdfd3JpdGV3KHJlZ3ZhbCwgRFNQX0NLQ1RMKTsKKwkJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyAoMSA8PCBkc29yX2V4cCk7CisJCXJldCA9IDA7CisJfQorCisJaWYgKHVubGlrZWx5KHJldCA9PSAwICYmIChjbGstPmZsYWdzICYgUkFURV9QUk9QQUdBVEVTKSkpCisJCXByb3BhZ2F0ZV9yYXRlKGNsayk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgbG9uZyBvbWFwMV9yb3VuZF90b190YWJsZV9yYXRlKHN0cnVjdCBjbGsgKiBjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwkvKiBGaW5kIHRoZSBoaWdoZXN0IHN1cHBvcnRlZCBmcmVxdWVuY3kgPD0gcmF0ZSAqLworCXN0cnVjdCBtcHVfcmF0ZSAqIHB0cjsKKwlsb25nICBoaWdoZXN0X3JhdGU7CisKKwlpZiAoY2xrICE9ICZ2aXJ0dWFsX2NrX21wdSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwloaWdoZXN0X3JhdGUgPSAtRUlOVkFMOworCisJZm9yIChwdHIgPSByYXRlX3RhYmxlOyBwdHItPnJhdGU7IHB0cisrKSB7CisJCWlmIChwdHItPnh0YWwgIT0gY2tfcmVmLnJhdGUpCisJCQljb250aW51ZTsKKworCQloaWdoZXN0X3JhdGUgPSBwdHItPnJhdGU7CisKKwkJLyogQ2FuIGNoZWNrIG9ubHkgYWZ0ZXIgeHRhbCBmcmVxdWVuY3kgY2hlY2sgKi8KKwkJaWYgKHB0ci0+cmF0ZSA8PSByYXRlKQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIGhpZ2hlc3RfcmF0ZTsKK30KKworc3RhdGljIHVuc2lnbmVkIGNhbGNfZXh0X2Rzb3IodW5zaWduZWQgbG9uZyByYXRlKQoreworCXVuc2lnbmVkIGRzb3I7CisKKwkvKiBNQ0xLIGFuZCBCQ0xLIGRpdmlzb3Igc2VsZWN0aW9uIGlzIG5vdCBsaW5lYXI6CisJICogZnJlcSA9IDk2TUh6IC8gZHNvcgorCSAqCisJICogUkFUSU9fU0VMIHJhbmdlOiBkc29yIDwtPiBSQVRJT19TRUwKKwkgKiAwLi42OiAoUkFUSU9fU0VMKzIpIDwtPiAoZHNvci0yKQorCSAqIDYuLjQ4OiAgKDgrKFJBVElPX1NFTC02KSoyKSA8LT4gKChkc29yLTgpLzIrNikKKwkgKiBNaW5pbXVtIGRzb3IgaXMgMiBhbmQgbWF4aW11bSBpcyA5Ni4gT2RkIGRpdmlzb3JzIHN0YXJ0aW5nIGZyb20gOQorCSAqIGNhbiBub3QgYmUgdXNlZC4KKwkgKi8KKwlmb3IgKGRzb3IgPSAyOyBkc29yIDwgOTY7ICsrZHNvcikgeworCQlpZiAoKGRzb3IgJiAxKSAmJiBkc29yID4gOCkKKwkJICAJY29udGludWU7CisJCWlmIChyYXRlID49IDk2MDAwMDAwIC8gZHNvcikKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gZHNvcjsKK30KKworLyogT25seSBuZWVkZWQgb24gMTUxMCAqLworc3RhdGljIGludCBvbWFwMV9zZXRfdWFydF9yYXRlKHN0cnVjdCBjbGsgKiBjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwl1bnNpZ25lZCBpbnQgdmFsOworCisJdmFsID0gb21hcF9yZWFkbChjbGstPmVuYWJsZV9yZWcpOworCWlmIChyYXRlID09IDEyMDAwMDAwKQorCQl2YWwgJj0gfigxIDw8IGNsay0+ZW5hYmxlX2JpdCk7CisJZWxzZSBpZiAocmF0ZSA9PSA0ODAwMDAwMCkKKwkJdmFsIHw9ICgxIDw8IGNsay0+ZW5hYmxlX2JpdCk7CisJZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKKwlvbWFwX3dyaXRlbCh2YWwsIGNsay0+ZW5hYmxlX3JlZyk7CisJY2xrLT5yYXRlID0gcmF0ZTsKKworCXJldHVybiAwOworfQorCisvKiBFeHRlcm5hbCBjbG9jayAoTUNMSyAmIEJDTEspIGZ1bmN0aW9ucyAqLworc3RhdGljIGludCBvbWFwMV9zZXRfZXh0X2Nsa19yYXRlKHN0cnVjdCBjbGsgKiBjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwl1bnNpZ25lZCBkc29yOworCV9fdTE2IHJhdGlvX2JpdHM7CisKKwlkc29yID0gY2FsY19leHRfZHNvcihyYXRlKTsKKwljbGstPnJhdGUgPSA5NjAwMDAwMCAvIGRzb3I7CisJaWYgKGRzb3IgPiA4KQorCQlyYXRpb19iaXRzID0gKChkc29yIC0gOCkgLyAyICsgNikgPDwgMjsKKwllbHNlCisJCXJhdGlvX2JpdHMgPSAoZHNvciAtIDIpIDw8IDI7CisKKwlyYXRpb19iaXRzIHw9IG9tYXBfcmVhZHcoY2xrLT5lbmFibGVfcmVnKSAmIH4weGZkOworCW9tYXBfd3JpdGV3KHJhdGlvX2JpdHMsIGNsay0+ZW5hYmxlX3JlZyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGxvbmcgb21hcDFfcm91bmRfZXh0X2Nsa19yYXRlKHN0cnVjdCBjbGsgKiBjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwlyZXR1cm4gOTYwMDAwMDAgLyBjYWxjX2V4dF9kc29yKHJhdGUpOworfQorCitzdGF0aWMgdm9pZCBvbWFwMV9pbml0X2V4dF9jbGsoc3RydWN0IGNsayAqIGNsaykKK3sKKwl1bnNpZ25lZCBkc29yOworCV9fdTE2IHJhdGlvX2JpdHM7CisKKwkvKiBEZXRlcm1pbmUgY3VycmVudCByYXRlIGFuZCBlbnN1cmUgY2xvY2sgaXMgYmFzZWQgb24gOTZNSHogQVBMTCAqLworCXJhdGlvX2JpdHMgPSBvbWFwX3JlYWR3KGNsay0+ZW5hYmxlX3JlZykgJiB+MTsKKwlvbWFwX3dyaXRldyhyYXRpb19iaXRzLCBjbGstPmVuYWJsZV9yZWcpOworCisJcmF0aW9fYml0cyA9IChyYXRpb19iaXRzICYgMHhmYykgPj4gMjsKKwlpZiAocmF0aW9fYml0cyA+IDYpCisJCWRzb3IgPSAocmF0aW9fYml0cyAtIDYpICogMiArIDg7CisJZWxzZQorCQlkc29yID0gcmF0aW9fYml0cyArIDI7CisKKwljbGstPiByYXRlID0gOTYwMDAwMDAgLyBkc29yOworfQorCitzdGF0aWMgaW50IG9tYXAxX2Nsa191c2Uoc3RydWN0IGNsayAqY2xrKQoreworCWludCByZXQgPSAwOworCWlmIChjbGstPnVzZWNvdW50KysgPT0gMCkgeworCQlpZiAobGlrZWx5KGNsay0+cGFyZW50KSkgeworCQkJcmV0ID0gb21hcDFfY2xrX3VzZShjbGstPnBhcmVudCk7CisKKwkJCWlmICh1bmxpa2VseShyZXQgIT0gMCkpIHsKKwkJCQljbGstPnVzZWNvdW50LS07CisJCQkJcmV0dXJuIHJldDsKKwkJCX0KKworCQkJaWYgKGNsay0+ZmxhZ3MgJiBDTE9DS19OT19JRExFX1BBUkVOVCkKKwkJCQlpZiAoIWNwdV9pc19vbWFwMjR4eCgpKQorCQkJCQlvbWFwMV9jbGtfZGVueV9pZGxlKGNsay0+cGFyZW50KTsKKwkJfQorCisJCXJldCA9IGNsay0+ZW5hYmxlKGNsayk7CisKKwkJaWYgKHVubGlrZWx5KHJldCAhPSAwKSAmJiBjbGstPnBhcmVudCkgeworCQkJb21hcDFfY2xrX3VudXNlKGNsay0+cGFyZW50KTsKKwkJCWNsay0+dXNlY291bnQtLTsKKwkJfQorCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXAxX2Nsa191bnVzZShzdHJ1Y3QgY2xrICpjbGspCit7CisJaWYgKGNsay0+dXNlY291bnQgPiAwICYmICEoLS1jbGstPnVzZWNvdW50KSkgeworCQljbGstPmRpc2FibGUoY2xrKTsKKwkJaWYgKGxpa2VseShjbGstPnBhcmVudCkpIHsKKwkJCW9tYXAxX2Nsa191bnVzZShjbGstPnBhcmVudCk7CisJCQlpZiAoY2xrLT5mbGFncyAmIENMT0NLX05PX0lETEVfUEFSRU5UKQorCQkJCWlmICghY3B1X2lzX29tYXAyNHh4KCkpCisJCQkJCW9tYXAxX2Nsa19hbGxvd19pZGxlKGNsay0+cGFyZW50KTsKKwkJfQorCX0KK30KKworc3RhdGljIGludCBvbWFwMV9jbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlfX3UxNiByZWd2YWwxNjsKKwlfX3UzMiByZWd2YWwzMjsKKworCWlmIChjbGstPmZsYWdzICYgQUxXQVlTX0VOQUJMRUQpCisJCXJldHVybiAwOworCisJaWYgKHVubGlrZWx5KGNsay0+ZW5hYmxlX3JlZyA9PSAwKSkgeworCQlwcmludGsoS0VSTl9FUlIgImNsb2NrLmM6IEVuYWJsZSBmb3IgJXMgd2l0aG91dCBlbmFibGUgY29kZVxuIiwKKwkJICAgICAgIGNsay0+bmFtZSk7CisJCXJldHVybiAwOworCX0KKworCWlmIChjbGstPmZsYWdzICYgRU5BQkxFX1JFR18zMkJJVCkgeworCQlpZiAoY2xrLT5mbGFncyAmIFZJUlRVQUxfSU9fQUREUkVTUykgeworCQkJcmVndmFsMzIgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpOworCQkJcmVndmFsMzIgfD0gKDEgPDwgY2xrLT5lbmFibGVfYml0KTsKKwkJCV9fcmF3X3dyaXRlbChyZWd2YWwzMiwgY2xrLT5lbmFibGVfcmVnKTsKKwkJfSBlbHNlIHsKKwkJCXJlZ3ZhbDMyID0gb21hcF9yZWFkbChjbGstPmVuYWJsZV9yZWcpOworCQkJcmVndmFsMzIgfD0gKDEgPDwgY2xrLT5lbmFibGVfYml0KTsKKwkJCW9tYXBfd3JpdGVsKHJlZ3ZhbDMyLCBjbGstPmVuYWJsZV9yZWcpOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKGNsay0+ZmxhZ3MgJiBWSVJUVUFMX0lPX0FERFJFU1MpIHsKKwkJCXJlZ3ZhbDE2ID0gX19yYXdfcmVhZHcoY2xrLT5lbmFibGVfcmVnKTsKKwkJCXJlZ3ZhbDE2IHw9ICgxIDw8IGNsay0+ZW5hYmxlX2JpdCk7CisJCQlfX3Jhd193cml0ZXcocmVndmFsMTYsIGNsay0+ZW5hYmxlX3JlZyk7CisJCX0gZWxzZSB7CisJCQlyZWd2YWwxNiA9IG9tYXBfcmVhZHcoY2xrLT5lbmFibGVfcmVnKTsKKwkJCXJlZ3ZhbDE2IHw9ICgxIDw8IGNsay0+ZW5hYmxlX2JpdCk7CisJCQlvbWFwX3dyaXRldyhyZWd2YWwxNiwgY2xrLT5lbmFibGVfcmVnKTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBvbWFwMV9jbGtfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJX191MTYgcmVndmFsMTY7CisJX191MzIgcmVndmFsMzI7CisKKwlpZiAoY2xrLT5lbmFibGVfcmVnID09IDApCisJCXJldHVybjsKKworCWlmIChjbGstPmZsYWdzICYgRU5BQkxFX1JFR18zMkJJVCkgeworCQlpZiAoY2xrLT5mbGFncyAmIFZJUlRVQUxfSU9fQUREUkVTUykgeworCQkJcmVndmFsMzIgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpOworCQkJcmVndmFsMzIgJj0gfigxIDw8IGNsay0+ZW5hYmxlX2JpdCk7CisJCQlfX3Jhd193cml0ZWwocmVndmFsMzIsIGNsay0+ZW5hYmxlX3JlZyk7CisJCX0gZWxzZSB7CisJCQlyZWd2YWwzMiA9IG9tYXBfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKKwkJCXJlZ3ZhbDMyICY9IH4oMSA8PCBjbGstPmVuYWJsZV9iaXQpOworCQkJb21hcF93cml0ZWwocmVndmFsMzIsIGNsay0+ZW5hYmxlX3JlZyk7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoY2xrLT5mbGFncyAmIFZJUlRVQUxfSU9fQUREUkVTUykgeworCQkJcmVndmFsMTYgPSBfX3Jhd19yZWFkdyhjbGstPmVuYWJsZV9yZWcpOworCQkJcmVndmFsMTYgJj0gfigxIDw8IGNsay0+ZW5hYmxlX2JpdCk7CisJCQlfX3Jhd193cml0ZXcocmVndmFsMTYsIGNsay0+ZW5hYmxlX3JlZyk7CisJCX0gZWxzZSB7CisJCQlyZWd2YWwxNiA9IG9tYXBfcmVhZHcoY2xrLT5lbmFibGVfcmVnKTsKKwkJCXJlZ3ZhbDE2ICY9IH4oMSA8PCBjbGstPmVuYWJsZV9iaXQpOworCQkJb21hcF93cml0ZXcocmVndmFsMTYsIGNsay0+ZW5hYmxlX3JlZyk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBsb25nIG9tYXAxX2Nsa19yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCWludCBkc29yX2V4cDsKKworCWlmIChjbGstPmZsYWdzICYgUkFURV9GSVhFRCkKKwkJcmV0dXJuIGNsay0+cmF0ZTsKKworCWlmIChjbGstPmZsYWdzICYgUkFURV9DS0NUTCkgeworCQlkc29yX2V4cCA9IGNhbGNfZHNvcl9leHAoY2xrLCByYXRlKTsKKwkJaWYgKGRzb3JfZXhwIDwgMCkKKwkJCXJldHVybiBkc29yX2V4cDsKKwkJaWYgKGRzb3JfZXhwID4gMykKKwkJCWRzb3JfZXhwID0gMzsKKwkJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gKDEgPDwgZHNvcl9leHApOworCX0KKworCWlmKGNsay0+cm91bmRfcmF0ZSAhPSAwKQorCQlyZXR1cm4gY2xrLT5yb3VuZF9yYXRlKGNsaywgcmF0ZSk7CisKKwlyZXR1cm4gY2xrLT5yYXRlOworfQorCitzdGF0aWMgaW50IG9tYXAxX2Nsa19zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwlpbnQgIHJldCA9IC1FSU5WQUw7CisJaW50ICBkc29yX2V4cDsKKwlfX3UxNiAgcmVndmFsOworCisJaWYgKGNsay0+c2V0X3JhdGUpCisJCXJldCA9IGNsay0+c2V0X3JhdGUoY2xrLCByYXRlKTsKKwllbHNlIGlmIChjbGstPmZsYWdzICYgUkFURV9DS0NUTCkgeworCQlkc29yX2V4cCA9IGNhbGNfZHNvcl9leHAoY2xrLCByYXRlKTsKKwkJaWYgKGRzb3JfZXhwID4gMykKKwkJCWRzb3JfZXhwID0gLUVJTlZBTDsKKwkJaWYgKGRzb3JfZXhwIDwgMCkKKwkJCXJldHVybiBkc29yX2V4cDsKKworCQlyZWd2YWwgPSBvbWFwX3JlYWR3KEFSTV9DS0NUTCk7CisJCXJlZ3ZhbCAmPSB+KDMgPDwgY2xrLT5yYXRlX29mZnNldCk7CisJCXJlZ3ZhbCB8PSBkc29yX2V4cCA8PCBjbGstPnJhdGVfb2Zmc2V0OworCQlyZWd2YWwgPSB2ZXJpZnlfY2tjdGxfdmFsdWUocmVndmFsKTsKKwkJb21hcF93cml0ZXcocmVndmFsLCBBUk1fQ0tDVEwpOworCQljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvICgxIDw8IGRzb3JfZXhwKTsKKwkJcmV0ID0gMDsKKwl9CisKKwlpZiAodW5saWtlbHkocmV0ID09IDAgJiYgKGNsay0+ZmxhZ3MgJiBSQVRFX1BST1BBR0FURVMpKSkKKwkJcHJvcGFnYXRlX3JhdGUoY2xrKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogT21hcDEgY2xvY2sgcmVzZXQgYW5kIGluaXQgZnVuY3Rpb25zCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWZkZWYgQ09ORklHX09NQVBfUkVTRVRfQ0xPQ0tTCisvKgorICogUmVzZXRzIHNvbWUgY2xvY2tzIHRoYXQgbWF5IGJlIGxlZnQgb24gZnJvbSBib290bG9hZGVyLAorICogYnV0IGxlYXZlcyBzZXJpYWwgY2xvY2tzIG9uLiBTZWUgYWxzbyBvbWFwX2xhdGVfY2xrX3Jlc2V0KCkuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwMV9lYXJseV9jbGtfcmVzZXQodm9pZCkKK3sKKwkvL29tYXBfd3JpdGVsKDB4MyA8PCAyOSwgTU9EX0NPTkZfQ1RSTF8wKTsKK30KKworc3RhdGljIGludCBfX2luaXQgb21hcDFfbGF0ZV9jbGtfcmVzZXQodm9pZCkKK3sKKwkvKiBUdXJuIG9mZiBhbGwgdW51c2VkIGNsb2NrcyAqLworCXN0cnVjdCBjbGsgKnA7CisJX191MzIgcmVndmFsMzI7CisKKwkvKiBVU0JfUkVRX0VOIHdpbGwgYmUgZGlzYWJsZWQgbGF0ZXIgaWYgbmVjZXNzYXJ5ICh1c2JfZGNfY2spICovCisJcmVndmFsMzIgPSBvbWFwX3JlYWR3KFNPRlRfUkVRX1JFRykgJiAoMSA8PCA0KTsKKwlvbWFwX3dyaXRldyhyZWd2YWwzMiwgU09GVF9SRVFfUkVHKTsKKwlvbWFwX3dyaXRldygwLCBTT0ZUX1JFUV9SRUcyKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocCwgJmNsb2Nrcywgbm9kZSkgeworCQlpZiAocC0+dXNlY291bnQgPiAwIHx8IChwLT5mbGFncyAmIEFMV0FZU19FTkFCTEVEKSB8fAorCQkJcC0+ZW5hYmxlX3JlZyA9PSAwKQorCQkJY29udGludWU7CisKKwkJLyogQ2xvY2tzIGluIHRoZSBEU1AgZG9tYWluIG5lZWQgYXBpX2NrLiBKdXN0IGFzc3VtZSBib290bG9hZGVyCisJCSAqIGhhcyBub3QgZW5hYmxlZCBhbnkgRFNQIGNsb2NrcyAqLworCQlpZiAoKHUzMilwLT5lbmFibGVfcmVnID09IERTUF9JRExFQ1QyKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICJTa2lwcGluZyByZXNldCBjaGVjayBmb3IgRFNQIGRvbWFpbiAiCisJCQkgICAgICAgImNsb2NrIFwiJXNcIlxuIiwgcC0+bmFtZSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIElzIHRoZSBjbG9jayBhbHJlYWR5IGRpc2FibGVkPyAqLworCQlpZiAocC0+ZmxhZ3MgJiBFTkFCTEVfUkVHXzMyQklUKSB7CisJCQlpZiAocC0+ZmxhZ3MgJiBWSVJUVUFMX0lPX0FERFJFU1MpCisJCQkJcmVndmFsMzIgPSBfX3Jhd19yZWFkbChwLT5lbmFibGVfcmVnKTsKKwkJCWVsc2UKKwkJCQlyZWd2YWwzMiA9IG9tYXBfcmVhZGwocC0+ZW5hYmxlX3JlZyk7CisJCX0gZWxzZSB7CisJCQlpZiAocC0+ZmxhZ3MgJiBWSVJUVUFMX0lPX0FERFJFU1MpCisJCQkJcmVndmFsMzIgPSBfX3Jhd19yZWFkdyhwLT5lbmFibGVfcmVnKTsKKwkJCWVsc2UKKwkJCQlyZWd2YWwzMiA9IG9tYXBfcmVhZHcocC0+ZW5hYmxlX3JlZyk7CisJCX0KKworCQlpZiAoKHJlZ3ZhbDMyICYgKDEgPDwgcC0+ZW5hYmxlX2JpdCkpID09IDApCisJCQljb250aW51ZTsKKworCQkvKiBGSVhNRTogVGhpcyBjbG9jayBzZWVtcyB0byBiZSBuZWNlc3NhcnkgYnV0IG5vLW9uZQorCQkgKiBoYXMgYXNrZWQgZm9yIGl0cyBhY3RpdmF0aW9uLiAqLworCQlpZiAocCA9PSAmdGMyX2NrICAgICAgICAgLy8gRklYOiBwbS5jIChTUkFNKSwgQ0NQLCBDYW1lcmEKKwkJICAgIHx8IHAgPT0gJmNrX2RwbGwxb3V0LmNsayAvLyBGSVg6IFNvU1NJLCBTU1IKKwkJICAgIHx8IHAgPT0gJmFybV9ncGlvX2NrIC8vIEZJWDogR1BJTyBjb2RlIGZvciAxNTEwCisJCSAgICApIHsKKwkJCXByaW50ayhLRVJOX0lORk8gIkZJWE1FOiBDbG9jayBcIiVzXCIgc2VlbXMgdW51c2VkXG4iLAorCQkJICAgICAgIHAtPm5hbWUpOworCQkJY29udGludWU7CisJCX0KKworCQlwcmludGsoS0VSTl9JTkZPICJEaXNhYmxpbmcgdW51c2VkIGNsb2NrIFwiJXNcIi4uLiAiLCBwLT5uYW1lKTsKKwkJcC0+ZGlzYWJsZShwKTsKKwkJcHJpbnRrKCIgZG9uZVxuIik7CisJfQorCisJcmV0dXJuIDA7Cit9CitsYXRlX2luaXRjYWxsKG9tYXAxX2xhdGVfY2xrX3Jlc2V0KTsKKworI2Vsc2UKKyNkZWZpbmUgb21hcDFfZWFybHlfY2xrX3Jlc2V0KCkJe30KKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IGNsa19mdW5jdGlvbnMgb21hcDFfY2xrX2Z1bmN0aW9ucyA9IHsKKwkuY2xrX3VzZQkJPSBvbWFwMV9jbGtfdXNlLAorCS5jbGtfdW51c2UJCT0gb21hcDFfY2xrX3VudXNlLAorCS5jbGtfcm91bmRfcmF0ZQkJPSBvbWFwMV9jbGtfcm91bmRfcmF0ZSwKKwkuY2xrX3NldF9yYXRlCQk9IG9tYXAxX2Nsa19zZXRfcmF0ZSwKK307CisKK2ludCBfX2luaXQgb21hcDFfY2xrX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgY2xrICoqIGNsa3A7CisJY29uc3Qgc3RydWN0IG9tYXBfY2xvY2tfY29uZmlnICppbmZvOworCWludCBjcnlzdGFsX3R5cGUgPSAwOyAvKiBEZWZhdWx0IDEyIE1IeiAqLworCisJb21hcDFfZWFybHlfY2xrX3Jlc2V0KCk7CisJY2xrX2luaXQoJm9tYXAxX2Nsa19mdW5jdGlvbnMpOworCisJLyogQnkgZGVmYXVsdCBhbGwgaWRsZWN0MSBjbG9ja3MgYXJlIGFsbG93ZWQgdG8gaWRsZSAqLworCWFybV9pZGxlY3QxX21hc2sgPSB+MDsKKworCWZvciAoY2xrcCA9IG9uY2hpcF9jbGtzOyBjbGtwIDwgb25jaGlwX2Nsa3MrQVJSQVlfU0laRShvbmNoaXBfY2xrcyk7IGNsa3ArKykgeworCQlpZiAoKCgqY2xrcCktPmZsYWdzICZDTE9DS19JTl9PTUFQMTUxMCkgJiYgY3B1X2lzX29tYXAxNTEwKCkpIHsKKwkJCWNsa19yZWdpc3RlcigqY2xrcCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmICgoKCpjbGtwKS0+ZmxhZ3MgJkNMT0NLX0lOX09NQVAxNlhYKSAmJiBjcHVfaXNfb21hcDE2eHgoKSkgeworCQkJY2xrX3JlZ2lzdGVyKCpjbGtwKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKCgoKmNsa3ApLT5mbGFncyAmQ0xPQ0tfSU5fT01BUDczMCkgJiYgY3B1X2lzX29tYXA3MzAoKSkgeworCQkJY2xrX3JlZ2lzdGVyKCpjbGtwKTsKKwkJCWNvbnRpbnVlOworCQl9CisJfQorCisJaW5mbyA9IG9tYXBfZ2V0X2NvbmZpZyhPTUFQX1RBR19DTE9DSywgc3RydWN0IG9tYXBfY2xvY2tfY29uZmlnKTsKKwlpZiAoaW5mbyAhPSBOVUxMKSB7CisJCWlmICghY3B1X2lzX29tYXAxNTEwKCkpCisJCQljcnlzdGFsX3R5cGUgPSBpbmZvLT5zeXN0ZW1fY2xvY2tfdHlwZTsKKwl9CisKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA3MzApCisJY2tfcmVmLnJhdGUgPSAxMzAwMDAwMDsKKyNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE2WFgpCisJaWYgKGNyeXN0YWxfdHlwZSA9PSAyKQorCQlja19yZWYucmF0ZSA9IDE5MjAwMDAwOworI2VuZGlmCisKKwlwcmludGsoIkNsb2NrczogQVJNX1NZU1NUOiAweCUwNHggRFBMTF9DVEw6IDB4JTA0eCBBUk1fQ0tDVEw6IDB4JTA0eFxuIiwKKwkgICAgICAgb21hcF9yZWFkdyhBUk1fU1lTU1QpLCBvbWFwX3JlYWR3KERQTExfQ1RMKSwKKwkgICAgICAgb21hcF9yZWFkdyhBUk1fQ0tDVEwpKTsKKworCS8qIFdlIHdhbnQgdG8gYmUgaW4gc3luY3Jvbm91cyBzY2FsYWJsZSBtb2RlICovCisJb21hcF93cml0ZXcoMHgxMDAwLCBBUk1fU1lTU1QpOworCisjaWZkZWYgQ09ORklHX09NQVBfQ0xPQ0tTX1NFVF9CWV9CT09UTE9BREVSCisJLyogVXNlIHZhbHVlcyBzZXQgYnkgYm9vdGxvYWRlci4gRGV0ZXJtaW5lIFBMTCByYXRlIGFuZCByZWNhbGN1bGF0ZQorCSAqIGRlcGVuZGVudCBjbG9ja3MgYXMgaWYga2VybmVsIGhhZCBjaGFuZ2VkIFBMTCBvciBkaXZpc29ycy4KKwkgKi8KKwl7CisJCXVuc2lnbmVkIHBsbF9jdGxfdmFsID0gb21hcF9yZWFkdyhEUExMX0NUTCk7CisKKwkJY2tfZHBsbDEucmF0ZSA9IGNrX3JlZi5yYXRlOyAvKiBCYXNlIHh0YWwgcmF0ZSAqLworCQlpZiAocGxsX2N0bF92YWwgJiAweDEwKSB7CisJCQkvKiBQTEwgZW5hYmxlZCwgYXBwbHkgbXVsdGlwbGllciBhbmQgZGl2aXNvciAqLworCQkJaWYgKHBsbF9jdGxfdmFsICYgMHhmODApCisJCQkJY2tfZHBsbDEucmF0ZSAqPSAocGxsX2N0bF92YWwgJiAweGY4MCkgPj4gNzsKKwkJCWNrX2RwbGwxLnJhdGUgLz0gKChwbGxfY3RsX3ZhbCAmIDB4NjApID4+IDUpICsgMTsKKwkJfSBlbHNlIHsKKwkJCS8qIFBMTCBkaXNhYmxlZCwgYXBwbHkgYnlwYXNzIGRpdmlzb3IgKi8KKwkJCXN3aXRjaCAocGxsX2N0bF92YWwgJiAweGMpIHsKKwkJCWNhc2UgMDoKKwkJCQlicmVhazsKKwkJCWNhc2UgMHg0OgorCQkJCWNrX2RwbGwxLnJhdGUgLz0gMjsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJY2tfZHBsbDEucmF0ZSAvPSA0OworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCXByb3BhZ2F0ZV9yYXRlKCZja19kcGxsMSk7CisjZWxzZQorCS8qIEZpbmQgdGhlIGhpZ2hlc3Qgc3VwcG9ydGVkIGZyZXF1ZW5jeSBhbmQgZW5hYmxlIGl0ICovCisJaWYgKG9tYXAxX3NlbGVjdF90YWJsZV9yYXRlKCZ2aXJ0dWFsX2NrX21wdSwgfjApKSB7CisJCXByaW50ayhLRVJOX0VSUiAiU3lzdGVtIGZyZXF1ZW5jaWVzIG5vdCBzZXQuIENoZWNrIHlvdXIgY29uZmlnLlxuIik7CisJCS8qIEd1ZXNzIHNhbmUgdmFsdWVzICg2ME1IeikgKi8KKwkJb21hcF93cml0ZXcoMHgyMjkwLCBEUExMX0NUTCk7CisJCW9tYXBfd3JpdGV3KDB4MTAwNSwgQVJNX0NLQ1RMKTsKKwkJY2tfZHBsbDEucmF0ZSA9IDYwMDAwMDAwOworCQlwcm9wYWdhdGVfcmF0ZSgmY2tfZHBsbDEpOworCX0KKyNlbmRpZgorCS8qIENhY2hlIHJhdGVzIGZvciBjbG9ja3MgY29ubmVjdGVkIHRvIGNrX3JlZiAobm90IGRwbGwxKSAqLworCXByb3BhZ2F0ZV9yYXRlKCZja19yZWYpOworCXByaW50ayhLRVJOX0lORk8gIkNsb2NraW5nIHJhdGUgKHh0YWwvRFBMTDEvTVBVKTogIgorCQkiJWxkLiUwMWxkLyVsZC4lMDFsZC8lbGQuJTAxbGQgTUh6XG4iLAorCSAgICAgICBja19yZWYucmF0ZSAvIDEwMDAwMDAsIChja19yZWYucmF0ZSAvIDEwMDAwMCkgJSAxMCwKKwkgICAgICAgY2tfZHBsbDEucmF0ZSAvIDEwMDAwMDAsIChja19kcGxsMS5yYXRlIC8gMTAwMDAwKSAlIDEwLAorCSAgICAgICBhcm1fY2sucmF0ZSAvIDEwMDAwMDAsIChhcm1fY2sucmF0ZSAvIDEwMDAwMCkgJSAxMCk7CisKKyNpZmRlZiBDT05GSUdfTUFDSF9PTUFQX1BFUlNFVVMyCisJLyogU2VsZWN0IHNsaWNlciBvdXRwdXQgYXMgT01BUCBpbnB1dCBjbG9jayAqLworCW9tYXBfd3JpdGV3KG9tYXBfcmVhZHcoT01BUDczMF9QQ0NfVVBMRF9DVFJMKSAmIH4weDEsIE9NQVA3MzBfUENDX1VQTERfQ1RSTCk7CisjZW5kaWYKKworCS8qIFR1cm4gb2ZmIERTUCBhbmQgQVJNX1RJTVhPLiBNYWtlIHN1cmUgQVJNX0lOVEhDSyBpcyBub3QgZGl2aWRlZCAqLworCW9tYXBfd3JpdGV3KG9tYXBfcmVhZHcoQVJNX0NLQ1RMKSAmIDB4MGZmZiwgQVJNX0NLQ1RMKTsKKworCS8qIFB1dCBEU1AvTVBVSSBpbnRvIHJlc2V0IHVudGlsIG5lZWRlZCAqLworCW9tYXBfd3JpdGV3KDAsIEFSTV9SU1RDVDEpOworCW9tYXBfd3JpdGV3KDEsIEFSTV9SU1RDVDIpOworCW9tYXBfd3JpdGV3KDB4NDAwLCBBUk1fSURMRUNUMSk7CisKKwkvKgorCSAqIEFjY29yZGluZyB0byBPTUFQNTkxMCBFcnJhdHVtIFNZU19ETUFfMSwgYml0IERNQUNLX1JFUSAoYml0IDgpCisJICogb2YgdGhlIEFSTV9JRExFQ1QyIHJlZ2lzdGVyIG11c3QgYmUgc2V0IHRvIHplcm8uIFRoZSBwb3dlci1vbgorCSAqIGRlZmF1bHQgdmFsdWUgb2YgdGhpcyBiaXQgaXMgb25lLgorCSAqLworCW9tYXBfd3JpdGV3KDB4MDAwMCwgQVJNX0lETEVDVDIpOwkvKiBUdXJuIExDRCBjbG9jayBvZmYgYWxzbyAqLworCisJLyoKKwkgKiBPbmx5IGVuYWJsZSB0aG9zZSBjbG9ja3Mgd2Ugd2lsbCBuZWVkLCBsZXQgdGhlIGRyaXZlcnMKKwkgKiBlbmFibGUgb3RoZXIgY2xvY2tzIGFzIG5lY2Vzc2FyeQorCSAqLworCWNsa191c2UoJmFybXBlcl9jay5jbGspOworCWNsa191c2UoJmFybXhvcl9jay5jbGspOworCWNsa191c2UoJmFybXRpbV9jay5jbGspOyAvKiBUaGlzIHNob3VsZCBiZSBkb25lIGJ5IHRpbWVyIGNvZGUgKi8KKworCWlmIChjcHVfaXNfb21hcDE1MTAoKSkKKwkJY2xrX2VuYWJsZSgmYXJtX2dwaW9fY2spOworCisJcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvY2xvY2suaCBiL2FyY2gvYXJtL21hY2gtb21hcDEvY2xvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2JkZmI1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9jbG9jay5oCkBAIC0wLDAgKzEsNzY4IEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcDEvY2xvY2suaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA1IE5va2lhIGNvcnBvcmF0aW9uCisgKiAgV3JpdHRlbiBieSBUdXVra2EgVGlra2FuZW4gPHR1dWtrYS50aWtrYW5lbkBlbGVrdHJvYml0LmNvbT4KKyAqICBCYXNlZCBvbiBjbG9ja3MuaCBieSBUb255IExpbmRncmVuLCBHb3Jkb24gTWNOdXR0IGFuZCBSaWRnZVJ1biwgSW5jCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9fQVJDSF9BUk1fTUFDSF9PTUFQMV9DTE9DS19ICisjZGVmaW5lIF9fQVJDSF9BUk1fTUFDSF9PTUFQMV9DTE9DS19ICisKK3N0YXRpYyBpbnQgb21hcDFfY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICogY2xrKTsKK3N0YXRpYyB2b2lkIG9tYXAxX2Nsa19kaXNhYmxlKHN0cnVjdCBjbGsgKiBjbGspOworc3RhdGljIHZvaWQgb21hcDFfY2tjdGxfcmVjYWxjKHN0cnVjdCBjbGsgKiBjbGspOworc3RhdGljIHZvaWQgb21hcDFfd2F0Y2hkb2dfcmVjYWxjKHN0cnVjdCBjbGsgKiBjbGspOworc3RhdGljIHZvaWQgb21hcDFfY2tjdGxfcmVjYWxjX2RzcF9kb21haW4oc3RydWN0IGNsayAqIGNsayk7CitzdGF0aWMgaW50IG9tYXAxX2Nsa19lbmFibGVfZHNwX2RvbWFpbihzdHJ1Y3QgY2xrICogY2xrKTsKK3N0YXRpYyBpbnQgb21hcDFfY2xrX3NldF9yYXRlX2RzcF9kb21haW4oc3RydWN0IGNsayAqIGNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKK3N0YXRpYyB2b2lkIG9tYXAxX2Nsa19kaXNhYmxlX2RzcF9kb21haW4oc3RydWN0IGNsayAqIGNsayk7CitzdGF0aWMgaW50IG9tYXAxX3NldF91YXJ0X3JhdGUoc3RydWN0IGNsayAqIGNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKK3N0YXRpYyB2b2lkIG9tYXAxX3VhcnRfcmVjYWxjKHN0cnVjdCBjbGsgKiBjbGspOworc3RhdGljIGludCBvbWFwMV9jbGtfZW5hYmxlX3VhcnRfZnVuY3Rpb25hbChzdHJ1Y3QgY2xrICogY2xrKTsKK3N0YXRpYyB2b2lkIG9tYXAxX2Nsa19kaXNhYmxlX3VhcnRfZnVuY3Rpb25hbChzdHJ1Y3QgY2xrICogY2xrKTsKK3N0YXRpYyBpbnQgb21hcDFfc2V0X2V4dF9jbGtfcmF0ZShzdHJ1Y3QgY2xrICogY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpOworc3RhdGljIGxvbmcgb21hcDFfcm91bmRfZXh0X2Nsa19yYXRlKHN0cnVjdCBjbGsgKiBjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7CitzdGF0aWMgdm9pZCBvbWFwMV9pbml0X2V4dF9jbGsoc3RydWN0IGNsayAqIGNsayk7CitzdGF0aWMgaW50IG9tYXAxX3NlbGVjdF90YWJsZV9yYXRlKHN0cnVjdCBjbGsgKiBjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7CitzdGF0aWMgbG9uZyBvbWFwMV9yb3VuZF90b190YWJsZV9yYXRlKHN0cnVjdCBjbGsgKiBjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7CitzdGF0aWMgaW50IG9tYXAxX2Nsa191c2Uoc3RydWN0IGNsayAqY2xrKTsKK3N0YXRpYyB2b2lkIG9tYXAxX2Nsa191bnVzZShzdHJ1Y3QgY2xrICpjbGspOworCitzdHJ1Y3QgbXB1X3JhdGUgeworCXVuc2lnbmVkIGxvbmcJCXJhdGU7CisJdW5zaWduZWQgbG9uZwkJeHRhbDsKKwl1bnNpZ25lZCBsb25nCQlwbGxfcmF0ZTsKKwlfX3UxNgkJCWNrY3RsX3ZhbDsKKwlfX3UxNgkJCWRwbGxjdGxfdmFsOworfTsKKworc3RydWN0IHVhcnRfY2xrIHsKKwlzdHJ1Y3QgY2xrCWNsazsKKwl1bnNpZ25lZCBsb25nCXN5c2NfYWRkcjsKK307CisKKy8qIFByb3ZpZGUgYSBtZXRob2QgZm9yIHByZXZlbnRpbmcgaWRsaW5nIHNvbWUgQVJNIElETEVDVCBjbG9ja3MgKi8KK3N0cnVjdCBhcm1faWRsZWN0MV9jbGsgeworCXN0cnVjdCBjbGsJY2xrOworCXVuc2lnbmVkIGxvbmcJbm9faWRsZV9jb3VudDsKKwlfX3U4CQlpZGxlY3Rfc2hpZnQ7Cit9OworCisvKiBBUk1fQ0tDVEwgYml0IHNoaWZ0cyAqLworI2RlZmluZSBDS0NUTF9QRVJESVZfT0ZGU0VUCTAKKyNkZWZpbmUgQ0tDVExfTENERElWX09GRlNFVAkyCisjZGVmaW5lIENLQ1RMX0FSTURJVl9PRkZTRVQJNAorI2RlZmluZSBDS0NUTF9EU1BESVZfT0ZGU0VUCTYKKyNkZWZpbmUgQ0tDVExfVENESVZfT0ZGU0VUCTgKKyNkZWZpbmUgQ0tDVExfRFNQTU1VRElWX09GRlNFVAkxMAorLyojZGVmaW5lIEFSTV9USU1YTwkJMTIqLworI2RlZmluZSBFTl9EU1BDSwkJMTMKKy8qI2RlZmluZSBBUk1fSU5USENLX1NFTAkxNCovIC8qIERpdmlkZS1ieS0yIGZvciBtcHUgaW50aF9jayAqLworLyogRFNQX0NLQ1RMIGJpdCBzaGlmdHMgKi8KKyNkZWZpbmUgQ0tDVExfRFNQUEVSRElWX09GRlNFVAkwCisKKy8qIEFSTV9JRExFQ1QyIGJpdCBzaGlmdHMgKi8KKyNkZWZpbmUgRU5fV0RUQ0sJMAorI2RlZmluZSBFTl9YT1JQQ0sJMQorI2RlZmluZSBFTl9QRVJDSwkyCisjZGVmaW5lIEVOX0xDRENLCTMKKyNkZWZpbmUgRU5fTEJDSwkJNCAvKiBOb3Qgb24gMTYxMC8xNzEwICovCisvKiNkZWZpbmUgRU5fSFNBQkNLCTUqLworI2RlZmluZSBFTl9BUElDSwk2CisjZGVmaW5lIEVOX1RJTUNLCTcKKyNkZWZpbmUgRE1BQ0tfUkVRCTgKKyNkZWZpbmUgRU5fR1BJT0NLCTkgLyogTm90IG9uIDE2MTAvMTcxMCAqLworLyojZGVmaW5lIEVOX0xCRlJFRUNLCTEwKi8KKyNkZWZpbmUgRU5fQ0tPVVRfQVJNCTExCisKKy8qIEFSTV9JRExFQ1QzIGJpdCBzaGlmdHMgKi8KKyNkZWZpbmUgRU5fT0NQSV9DSwkwCisjZGVmaW5lIEVOX1RDMV9DSwkyCisjZGVmaW5lIEVOX1RDMl9DSwk0CisKKy8qIERTUF9JRExFQ1QyIGJpdCBzaGlmdHMgKDAsMSwyIGFyZSBzYW1lIGFzIGZvciBBUk1fSURMRUNUMikgKi8KKyNkZWZpbmUgRU5fRFNQVElNQ0sJNQorCisvKiBWYXJpb3VzIHJlZ2lzdGVyIGRlZmluZXMgZm9yIGNsb2NrIGNvbnRyb2xzIHNjYXR0ZXJlZCBhcm91bmQgT01BUCBjaGlwICovCisjZGVmaW5lIFVTQl9NQ0xLX0VOX0JJVAkJNAkvKiBJbiBVTFBEX0NMS0NfQ1RSTCAqLworI2RlZmluZSBVU0JfSE9TVF9ISENfVUhPU1RfRU4JOQkvKiBJbiBNT0RfQ09ORl9DVFJMXzAgKi8KKyNkZWZpbmUgU1dEX1VMUERfUExMX0NMS19SRVEJMQkvKiBJbiBTV0RfQ0xLX0RJVl9DVFJMX1NFTCAqLworI2RlZmluZSBDT01fVUxQRF9QTExfQ0xLX1JFUQkxCS8qIEluIENPTV9DTEtfRElWX0NUUkxfU0VMICovCisjZGVmaW5lIFNXRF9DTEtfRElWX0NUUkxfU0VMCTB4ZmZmZTA4NzQKKyNkZWZpbmUgQ09NX0NMS19ESVZfQ1RSTF9TRUwJMHhmZmZlMDg3OAorI2RlZmluZSBTT0ZUX1JFUV9SRUcJCTB4ZmZmZTA4MzQKKyNkZWZpbmUgU09GVF9SRVFfUkVHMgkJMHhmZmZlMDg4MAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIE9tYXAxIE1QVSByYXRlIHRhYmxlCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHN0cnVjdCBtcHVfcmF0ZSByYXRlX3RhYmxlW10gPSB7CisJLyogTVBVIE1IeiwgeHRhbCBNSHosIGRwbGwxIE1IeiwgQ0tDVEwsIERQTExfQ1RMCisJICogTk9URTogQ29tbWVudCBvcmRlciBoZXJlIGlzIGRpZmZlcmVudCBmcm9tIGJpdHMgaW4gQ0tDVEwgdmFsdWU6CisJICogYXJtZGl2LCBkc3BkaXYsIGRzcG1tdSwgdGNkaXYsIHBlcmRpdiwgbGNkZGl2CisJICovCisjaWYgZGVmaW5lZChDT05GSUdfT01BUF9BUk1fMjE2TUhaKQorCXsgMjE2MDAwMDAwLCAxMjAwMDAwMCwgMjE2MDAwMDAwLCAweDA1MGQsIDB4MjkxMCB9LCAvKiAxLzEvMi8yLzIvOCAqLworI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfT01BUF9BUk1fMTk1TUhaKQorCXsgMTk1MDAwMDAwLCAxMzAwMDAwMCwgMTk1MDAwMDAwLCAweDA1MGUsIDB4Mjc5MCB9LCAvKiAxLzEvMi8yLzQvOCAqLworI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfT01BUF9BUk1fMTkyTUhaKQorCXsgMTkyMDAwMDAwLCAxOTIwMDAwMCwgMTkyMDAwMDAwLCAweDA1MGYsIDB4MjUxMCB9LCAvKiAxLzEvMi8yLzgvOCAqLworCXsgMTkyMDAwMDAwLCAxMjAwMDAwMCwgMTkyMDAwMDAwLCAweDA1MGYsIDB4MjgxMCB9LCAvKiAxLzEvMi8yLzgvOCAqLworCXsgIDk2MDAwMDAwLCAxMjAwMDAwMCwgMTkyMDAwMDAwLCAweDA1NWYsIDB4MjgxMCB9LCAvKiAyLzIvMi8yLzgvOCAqLworCXsgIDQ4MDAwMDAwLCAxMjAwMDAwMCwgMTkyMDAwMDAwLCAweDBiYWYsIDB4MjgxMCB9LCAvKiA0LzQvNC84LzgvOCAqLworCXsgIDI0MDAwMDAwLCAxMjAwMDAwMCwgMTkyMDAwMDAwLCAweDBmZmYsIDB4MjgxMCB9LCAvKiA4LzgvOC84LzgvOCAqLworI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfT01BUF9BUk1fMTgyTUhaKQorCXsgMTgyMDAwMDAwLCAxMzAwMDAwMCwgMTgyMDAwMDAwLCAweDA1MGUsIDB4MjcxMCB9LCAvKiAxLzEvMi8yLzQvOCAqLworI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfT01BUF9BUk1fMTY4TUhaKQorCXsgMTY4MDAwMDAwLCAxMjAwMDAwMCwgMTY4MDAwMDAwLCAweDAxMGYsIDB4MjcxMCB9LCAvKiAxLzEvMS8yLzgvOCAqLworI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfT01BUF9BUk1fMTUwTUhaKQorCXsgMTUwMDAwMDAwLCAxMjAwMDAwMCwgMTUwMDAwMDAwLCAweDAxMGEsIDB4MmNiMCB9LCAvKiAxLzEvMS8yLzQvNCAqLworI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfT01BUF9BUk1fMTIwTUhaKQorCXsgMTIwMDAwMDAwLCAxMjAwMDAwMCwgMTIwMDAwMDAwLCAweDAxMGEsIDB4MjUxMCB9LCAvKiAxLzEvMS8yLzQvNCAqLworI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfT01BUF9BUk1fOTZNSFopCisJeyAgOTYwMDAwMDAsIDEyMDAwMDAwLCAgOTYwMDAwMDAsIDB4MDAwNSwgMHgyNDEwIH0sIC8qIDEvMS8xLzEvMi8yICovCisjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19PTUFQX0FSTV82ME1IWikKKwl7ICA2MDAwMDAwMCwgMTIwMDAwMDAsICA2MDAwMDAwMCwgMHgwMDA1LCAweDIyOTAgfSwgLyogMS8xLzEvMS8yLzIgKi8KKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX09NQVBfQVJNXzMwTUhaKQorCXsgIDMwMDAwMDAwLCAxMjAwMDAwMCwgIDYwMDAwMDAwLCAweDA1NTUsIDB4MjI5MCB9LCAvKiAyLzIvMi8yLzIvMiAqLworI2VuZGlmCisJeyAwLCAwLCAwLCAwLCAwIH0sCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIE9tYXAxIGNsb2NrcworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHN0cnVjdCBjbGsgY2tfcmVmID0geworCS5uYW1lCQk9ICJja19yZWYiLAorCS5yYXRlCQk9IDEyMDAwMDAwLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKKwkJCSAgQUxXQVlTX0VOQUJMRUQsCisJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZSwKKwkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNrX2RwbGwxID0geworCS5uYW1lCQk9ICJja19kcGxsMSIsCisJLnBhcmVudAkJPSAmY2tfcmVmLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKKwkJCSAgUkFURV9QUk9QQUdBVEVTIHwgQUxXQVlTX0VOQUJMRUQsCisJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZSwKKwkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXJtX2lkbGVjdDFfY2xrIGNrX2RwbGwxb3V0ID0geworCS5jbGsgPSB7CisJICAgICAgIAkubmFtZQkJPSAiY2tfZHBsbDFvdXQiLAorCQkucGFyZW50CQk9ICZja19kcGxsMSwKKwkJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNlhYIHwgQ0xPQ0tfSURMRV9DT05UUk9MLAorCQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKilBUk1fSURMRUNUMiwKKwkJLmVuYWJsZV9iaXQJPSBFTl9DS09VVF9BUk0sCisJCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCisJCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGUsCisJCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlLAorCX0sCisJLmlkbGVjdF9zaGlmdAk9IDEyLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgYXJtX2NrID0geworCS5uYW1lCQk9ICJhcm1fY2siLAorCS5wYXJlbnQJCT0gJmNrX2RwbGwxLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKKwkJCSAgUkFURV9DS0NUTCB8IFJBVEVfUFJPUEFHQVRFUyB8IEFMV0FZU19FTkFCTEVELAorCS5yYXRlX29mZnNldAk9IENLQ1RMX0FSTURJVl9PRkZTRVQsCisJLnJlY2FsYwkJPSAmb21hcDFfY2tjdGxfcmVjYWxjLAorCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGUsCisJLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGUsCit9OworCitzdGF0aWMgc3RydWN0IGFybV9pZGxlY3QxX2NsayBhcm1wZXJfY2sgPSB7CisJLmNsayA9IHsKKwkJLm5hbWUJCT0gImFybXBlcl9jayIsCisJCS5wYXJlbnQJCT0gJmNrX2RwbGwxLAorCQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCB8CisJCQkJICBSQVRFX0NLQ1RMIHwgQ0xPQ0tfSURMRV9DT05UUk9MLAorCQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKilBUk1fSURMRUNUMiwKKwkJLmVuYWJsZV9iaXQJPSBFTl9QRVJDSywKKwkJLnJhdGVfb2Zmc2V0CT0gQ0tDVExfUEVSRElWX09GRlNFVCwKKwkJLnJlY2FsYwkJPSAmb21hcDFfY2tjdGxfcmVjYWxjLAorCQkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlLAorCQkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZSwKKwl9LAorCS5pZGxlY3Rfc2hpZnQJPSAyLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgYXJtX2dwaW9fY2sgPSB7CisJLm5hbWUJCT0gImFybV9ncGlvX2NrIiwKKwkucGFyZW50CQk9ICZja19kcGxsMSwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopQVJNX0lETEVDVDIsCisJLmVuYWJsZV9iaXQJPSBFTl9HUElPQ0ssCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKKwkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlLAorCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlLAorfTsKKworc3RhdGljIHN0cnVjdCBhcm1faWRsZWN0MV9jbGsgYXJteG9yX2NrID0geworCS5jbGsgPSB7CisJCS5uYW1lCQk9ICJhcm14b3JfY2siLAorCQkucGFyZW50CQk9ICZja19yZWYsCisJCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKKwkJCQkgIENMT0NLX0lETEVfQ09OVFJPTCwKKwkJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopQVJNX0lETEVDVDIsCisJCS5lbmFibGVfYml0CT0gRU5fWE9SUENLLAorCQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorCQkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlLAorCQkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZSwKKwl9LAorCS5pZGxlY3Rfc2hpZnQJPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCBhcm1faWRsZWN0MV9jbGsgYXJtdGltX2NrID0geworCS5jbGsgPSB7CisJCS5uYW1lCQk9ICJhcm10aW1fY2siLAorCQkucGFyZW50CQk9ICZja19yZWYsCisJCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKKwkJCQkgIENMT0NLX0lETEVfQ09OVFJPTCwKKwkJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopQVJNX0lETEVDVDIsCisJCS5lbmFibGVfYml0CT0gRU5fVElNQ0ssCisJCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCisJCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGUsCisJCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlLAorCX0sCisJLmlkbGVjdF9zaGlmdAk9IDksCit9OworCitzdGF0aWMgc3RydWN0IGFybV9pZGxlY3QxX2NsayBhcm13ZHRfY2sgPSB7CisJLmNsayA9IHsKKwkJLm5hbWUJCT0gImFybXdkdF9jayIsCisJCS5wYXJlbnQJCT0gJmNrX3JlZiwKKwkJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAorCQkJCSAgQ0xPQ0tfSURMRV9DT05UUk9MLAorCQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKilBUk1fSURMRUNUMiwKKwkJLmVuYWJsZV9iaXQJPSBFTl9XRFRDSywKKwkJLnJlY2FsYwkJPSAmb21hcDFfd2F0Y2hkb2dfcmVjYWxjLAorCQkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlLAorCQkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZSwKKwl9LAorCS5pZGxlY3Rfc2hpZnQJPSAwLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgYXJtaW50aF9jazE2eHggPSB7CisJLm5hbWUJCT0gImFybWludGhfY2siLAorCS5wYXJlbnQJCT0gJmFybV9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE2WFggfCBBTFdBWVNfRU5BQkxFRCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorCS8qIE5vdGU6IE9uIDE2eHggdGhlIGZyZXF1ZW5jeSBjYW4gYmUgZGl2aWRlZCBieSAyIGJ5IHByb2dyYW1taW5nCisJICogQVJNX0NLQ1RMOkFSTV9JTlRIQ0tfU0VMKDE0KSB0byAxCisJICoKKwkgKiAxNTEwIHZlcnNpb24gaXMgaW4gVEMgY2xvY2tzLgorCSAqLworCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGUsCisJLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGUsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBkc3BfY2sgPSB7CisJLm5hbWUJCT0gImRzcF9jayIsCisJLnBhcmVudAkJPSAmY2tfZHBsbDEsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAorCQkJICBSQVRFX0NLQ1RMLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKUFSTV9DS0NUTCwKKwkuZW5hYmxlX2JpdAk9IEVOX0RTUENLLAorCS5yYXRlX29mZnNldAk9IENLQ1RMX0RTUERJVl9PRkZTRVQsCisJLnJlY2FsYwkJPSAmb21hcDFfY2tjdGxfcmVjYWxjLAorCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGUsCisJLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGUsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBkc3BtbXVfY2sgPSB7CisJLm5hbWUJCT0gImRzcG1tdV9jayIsCisJLnBhcmVudAkJPSAmY2tfZHBsbDEsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAorCQkJICBSQVRFX0NLQ1RMIHwgQUxXQVlTX0VOQUJMRUQsCisJLnJhdGVfb2Zmc2V0CT0gQ0tDVExfRFNQTU1VRElWX09GRlNFVCwKKwkucmVjYWxjCQk9ICZvbWFwMV9ja2N0bF9yZWNhbGMsCisJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZSwKKwkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRzcHBlcl9jayA9IHsKKwkubmFtZQkJPSAiZHNwcGVyX2NrIiwKKwkucGFyZW50CQk9ICZja19kcGxsMSwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCB8CisJCQkgIFJBVEVfQ0tDVEwgfCBWSVJUVUFMX0lPX0FERFJFU1MsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopRFNQX0lETEVDVDIsCisJLmVuYWJsZV9iaXQJPSBFTl9QRVJDSywKKwkucmF0ZV9vZmZzZXQJPSBDS0NUTF9QRVJESVZfT0ZGU0VULAorCS5yZWNhbGMJCT0gJm9tYXAxX2NrY3RsX3JlY2FsY19kc3BfZG9tYWluLAorCS5zZXRfcmF0ZQk9ICZvbWFwMV9jbGtfc2V0X3JhdGVfZHNwX2RvbWFpbiwKKwkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX2RzcF9kb21haW4sCisJLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGVfZHNwX2RvbWFpbiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRzcHhvcl9jayA9IHsKKwkubmFtZQkJPSAiZHNweG9yX2NrIiwKKwkucGFyZW50CQk9ICZja19yZWYsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAorCQkJICBWSVJUVUFMX0lPX0FERFJFU1MsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopRFNQX0lETEVDVDIsCisJLmVuYWJsZV9iaXQJPSBFTl9YT1JQQ0ssCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKKwkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX2RzcF9kb21haW4sCisJLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGVfZHNwX2RvbWFpbiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRzcHRpbV9jayA9IHsKKwkubmFtZQkJPSAiZHNwdGltX2NrIiwKKwkucGFyZW50CQk9ICZja19yZWYsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAorCQkJICBWSVJUVUFMX0lPX0FERFJFU1MsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopRFNQX0lETEVDVDIsCisJLmVuYWJsZV9iaXQJPSBFTl9EU1BUSU1DSywKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGVfZHNwX2RvbWFpbiwKKwkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZV9kc3BfZG9tYWluLAorfTsKKworLyogVGllIEFSTV9JRExFQ1QxOklETElGX0FSTSB0byB0aGlzIGxvZ2ljYWwgY2xvY2sgc3RydWN0dXJlICovCitzdGF0aWMgc3RydWN0IGFybV9pZGxlY3QxX2NsayB0Y19jayA9IHsKKwkuY2xrID0geworCQkubmFtZQkJPSAidGNfY2siLAorCQkucGFyZW50CQk9ICZja19kcGxsMSwKKwkJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAorCQkJCSAgQ0xPQ0tfSU5fT01BUDczMCB8IFJBVEVfQ0tDVEwgfAorCQkJCSAgUkFURV9QUk9QQUdBVEVTIHwgQUxXQVlTX0VOQUJMRUQgfAorCQkJCSAgQ0xPQ0tfSURMRV9DT05UUk9MLAorCQkucmF0ZV9vZmZzZXQJPSBDS0NUTF9UQ0RJVl9PRkZTRVQsCisJCS5yZWNhbGMJCT0gJm9tYXAxX2NrY3RsX3JlY2FsYywKKwkJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZSwKKwkJLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGUsCisJfSwKKwkuaWRsZWN0X3NoaWZ0CT0gNiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGFybWludGhfY2sxNTEwID0geworCS5uYW1lCQk9ICJhcm1pbnRoX2NrIiwKKwkucGFyZW50CQk9ICZ0Y19jay5jbGssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQUxXQVlTX0VOQUJMRUQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKKwkvKiBOb3RlOiBPbiAxNTEwIHRoZSBmcmVxdWVuY3kgZm9sbG93cyBUQ19DSworCSAqCisJICogMTZ4eCB2ZXJzaW9uIGlzIGluIE1QVSBjbG9ja3MuCisJICovCisJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZSwKKwkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHRpcGJfY2sgPSB7CisJLyogTm8taWRsZSBjb250cm9sbGVkIGJ5ICJ0Y19jayIgKi8KKwkubmFtZQkJPSAidGlicF9jayIsCisJLnBhcmVudAkJPSAmdGNfY2suY2xrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IEFMV0FZU19FTkFCTEVELAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCisJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZSwKKwkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGwzX29jcGlfY2sgPSB7CisJLyogTm8taWRsZSBjb250cm9sbGVkIGJ5ICJ0Y19jayIgKi8KKwkubmFtZQkJPSAibDNfb2NwaV9jayIsCisJLnBhcmVudAkJPSAmdGNfY2suY2xrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTZYWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKilBUk1fSURMRUNUMywKKwkuZW5hYmxlX2JpdAk9IEVOX09DUElfQ0ssCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKKwkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlLAorCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdGMxX2NrID0geworCS5uYW1lCQk9ICJ0YzFfY2siLAorCS5wYXJlbnQJCT0gJnRjX2NrLmNsaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE2WFgsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopQVJNX0lETEVDVDMsCisJLmVuYWJsZV9iaXQJPSBFTl9UQzFfQ0ssCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKKwkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlLAorCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdGMyX2NrID0geworCS5uYW1lCQk9ICJ0YzJfY2siLAorCS5wYXJlbnQJCT0gJnRjX2NrLmNsaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE2WFgsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopQVJNX0lETEVDVDMsCisJLmVuYWJsZV9iaXQJPSBFTl9UQzJfQ0ssCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKKwkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlLAorCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZG1hX2NrID0geworCS8qIE5vLWlkbGUgY29udHJvbGxlZCBieSAidGNfY2siICovCisJLm5hbWUJCT0gImRtYV9jayIsCisJLnBhcmVudAkJPSAmdGNfY2suY2xrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKKwkJCSAgQUxXQVlTX0VOQUJMRUQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKKwkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlLAorCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZG1hX2xjZGZyZWVfY2sgPSB7CisJLm5hbWUJCT0gImRtYV9sY2RmcmVlX2NrIiwKKwkucGFyZW50CQk9ICZ0Y19jay5jbGssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNlhYIHwgQUxXQVlTX0VOQUJMRUQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKKwkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlLAorCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlLAorfTsKKworc3RhdGljIHN0cnVjdCBhcm1faWRsZWN0MV9jbGsgYXBpX2NrID0geworCS5jbGsgPSB7CisJCS5uYW1lCQk9ICJhcGlfY2siLAorCQkucGFyZW50CQk9ICZ0Y19jay5jbGssCisJCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKKwkJCQkgIENMT0NLX0lETEVfQ09OVFJPTCwKKwkJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopQVJNX0lETEVDVDIsCisJCS5lbmFibGVfYml0CT0gRU5fQVBJQ0ssCisJCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCisJCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGUsCisJCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlLAorCX0sCisJLmlkbGVjdF9zaGlmdAk9IDgsCit9OworCitzdGF0aWMgc3RydWN0IGFybV9pZGxlY3QxX2NsayBsYl9jayA9IHsKKwkuY2xrID0geworCQkubmFtZQkJPSAibGJfY2siLAorCQkucGFyZW50CQk9ICZ0Y19jay5jbGssCisJCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lETEVfQ09OVFJPTCwKKwkJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopQVJNX0lETEVDVDIsCisJCS5lbmFibGVfYml0CT0gRU5fTEJDSywKKwkJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKKwkJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZSwKKwkJLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGUsCisJfSwKKwkuaWRsZWN0X3NoaWZ0CT0gNCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHJoZWExX2NrID0geworCS5uYW1lCQk9ICJyaGVhMV9jayIsCisJLnBhcmVudAkJPSAmdGNfY2suY2xrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTZYWCB8IEFMV0FZU19FTkFCTEVELAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCisJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZSwKKwkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHJoZWEyX2NrID0geworCS5uYW1lCQk9ICJyaGVhMl9jayIsCisJLnBhcmVudAkJPSAmdGNfY2suY2xrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTZYWCB8IEFMV0FZU19FTkFCTEVELAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCisJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZSwKKwkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGxjZF9ja18xNnh4ID0geworCS5uYW1lCQk9ICJsY2RfY2siLAorCS5wYXJlbnQJCT0gJmNrX2RwbGwxLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTZYWCB8IENMT0NLX0lOX09NQVA3MzAgfCBSQVRFX0NLQ1RMLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKUFSTV9JRExFQ1QyLAorCS5lbmFibGVfYml0CT0gRU5fTENEQ0ssCisJLnJhdGVfb2Zmc2V0CT0gQ0tDVExfTENERElWX09GRlNFVCwKKwkucmVjYWxjCQk9ICZvbWFwMV9ja2N0bF9yZWNhbGMsCisJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZSwKKwkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXJtX2lkbGVjdDFfY2xrIGxjZF9ja18xNTEwID0geworCS5jbGsgPSB7CisJCS5uYW1lCQk9ICJsY2RfY2siLAorCQkucGFyZW50CQk9ICZja19kcGxsMSwKKwkJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgUkFURV9DS0NUTCB8CisJCQkJICBDTE9DS19JRExFX0NPTlRST0wsCisJCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKUFSTV9JRExFQ1QyLAorCQkuZW5hYmxlX2JpdAk9IEVOX0xDRENLLAorCQkucmF0ZV9vZmZzZXQJPSBDS0NUTF9MQ0RESVZfT0ZGU0VULAorCQkucmVjYWxjCQk9ICZvbWFwMV9ja2N0bF9yZWNhbGMsCisJCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGUsCisJCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlLAorCX0sCisJLmlkbGVjdF9zaGlmdAk9IDMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1YXJ0MV8xNTEwID0geworCS5uYW1lCQk9ICJ1YXJ0MV9jayIsCisJLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcmVhbCBwYXJlbnQgKi8KKwkucGFyZW50CQk9ICZhcm1wZXJfY2suY2xrLAorCS5yYXRlCQk9IDEyMDAwMDAwLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IEVOQUJMRV9SRUdfMzJCSVQgfAorCQkJICBBTFdBWVNfRU5BQkxFRCB8IENMT0NLX05PX0lETEVfUEFSRU5ULAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKU1PRF9DT05GX0NUUkxfMCwKKwkuZW5hYmxlX2JpdAk9IDI5LAkvKiBDaG9vc2VzIGJldHdlZW4gMTJNSHogYW5kIDQ4TUh6ICovCisJLnNldF9yYXRlCT0gJm9tYXAxX3NldF91YXJ0X3JhdGUsCisJLnJlY2FsYwkJPSAmb21hcDFfdWFydF9yZWNhbGMsCisJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZSwKKwkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdWFydF9jbGsgdWFydDFfMTZ4eCA9IHsKKwkuY2xrCT0geworCQkubmFtZQkJPSAidWFydDFfY2siLAorCQkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyByZWFsIHBhcmVudCAqLworCQkucGFyZW50CQk9ICZhcm1wZXJfY2suY2xrLAorCQkucmF0ZQkJPSA0ODAwMDAwMCwKKwkJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNlhYIHwgUkFURV9GSVhFRCB8CisJCQkJICBFTkFCTEVfUkVHXzMyQklUIHwgQ0xPQ0tfTk9fSURMRV9QQVJFTlQsCisJCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKU1PRF9DT05GX0NUUkxfMCwKKwkJLmVuYWJsZV9iaXQJPSAyOSwKKwkJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZV91YXJ0X2Z1bmN0aW9uYWwsCisJCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlX3VhcnRfZnVuY3Rpb25hbCwKKwl9LAorCS5zeXNjX2FkZHIJPSAweGZmZmIwMDU0LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdWFydDJfY2sgPSB7CisJLm5hbWUJCT0gInVhcnQyX2NrIiwKKwkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyByZWFsIHBhcmVudCAqLworCS5wYXJlbnQJCT0gJmFybXBlcl9jay5jbGssCisJLnJhdGUJCT0gMTIwMDAwMDAsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAorCQkJICBFTkFCTEVfUkVHXzMyQklUIHwgQUxXQVlTX0VOQUJMRUQgfAorCQkJICBDTE9DS19OT19JRExFX1BBUkVOVCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKilNT0RfQ09ORl9DVFJMXzAsCisJLmVuYWJsZV9iaXQJPSAzMCwJLyogQ2hvb3NlcyBiZXR3ZWVuIDEyTUh6IGFuZCA0OE1IeiAqLworCS5zZXRfcmF0ZQk9ICZvbWFwMV9zZXRfdWFydF9yYXRlLAorCS5yZWNhbGMJCT0gJm9tYXAxX3VhcnRfcmVjYWxjLAorCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGUsCisJLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGUsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1YXJ0M18xNTEwID0geworCS5uYW1lCQk9ICJ1YXJ0M19jayIsCisJLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcmVhbCBwYXJlbnQgKi8KKwkucGFyZW50CQk9ICZhcm1wZXJfY2suY2xrLAorCS5yYXRlCQk9IDEyMDAwMDAwLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IEVOQUJMRV9SRUdfMzJCSVQgfAorCQkJICBBTFdBWVNfRU5BQkxFRCB8IENMT0NLX05PX0lETEVfUEFSRU5ULAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKU1PRF9DT05GX0NUUkxfMCwKKwkuZW5hYmxlX2JpdAk9IDMxLAkvKiBDaG9vc2VzIGJldHdlZW4gMTJNSHogYW5kIDQ4TUh6ICovCisJLnNldF9yYXRlCT0gJm9tYXAxX3NldF91YXJ0X3JhdGUsCisJLnJlY2FsYwkJPSAmb21hcDFfdWFydF9yZWNhbGMsCisJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZSwKKwkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdWFydF9jbGsgdWFydDNfMTZ4eCA9IHsKKwkuY2xrCT0geworCQkubmFtZQkJPSAidWFydDNfY2siLAorCQkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyByZWFsIHBhcmVudCAqLworCQkucGFyZW50CQk9ICZhcm1wZXJfY2suY2xrLAorCQkucmF0ZQkJPSA0ODAwMDAwMCwKKwkJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNlhYIHwgUkFURV9GSVhFRCB8CisJCQkJICBFTkFCTEVfUkVHXzMyQklUIHwgQ0xPQ0tfTk9fSURMRV9QQVJFTlQsCisJCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKU1PRF9DT05GX0NUUkxfMCwKKwkJLmVuYWJsZV9iaXQJPSAzMSwKKwkJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZV91YXJ0X2Z1bmN0aW9uYWwsCisJCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlX3VhcnRfZnVuY3Rpb25hbCwKKwl9LAorCS5zeXNjX2FkZHIJPSAweGZmZmI5ODU0LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdXNiX2Nsa28gPSB7CS8qIDYgTUh6IG91dHB1dCBvbiBXNF9VU0JfQ0xLTyAqLworCS5uYW1lCQk9ICJ1c2JfY2xrbyIsCisJLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcGFyZW50ICovCisJLnJhdGUJCT0gNjAwMDAwMCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCB8CisJCQkgIFJBVEVfRklYRUQgfCBFTkFCTEVfUkVHXzMyQklULAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKVVMUERfQ0xPQ0tfQ1RSTCwKKwkuZW5hYmxlX2JpdAk9IFVTQl9NQ0xLX0VOX0JJVCwKKwkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlLAorCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdXNiX2hoY19jazE1MTAgPSB7CisJLm5hbWUJCT0gInVzYl9oaGNfY2siLAorCS8qIERpcmVjdCBmcm9tIFVMUEQsIG5vIHBhcmVudCAqLworCS5yYXRlCQk9IDQ4MDAwMDAwLCAvKiBBY3R1YWxseSAyIGNsb2NrcywgMTJNSHogYW5kIDQ4TUh6ICovCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwKKwkJCSAgUkFURV9GSVhFRCB8IEVOQUJMRV9SRUdfMzJCSVQsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopTU9EX0NPTkZfQ1RSTF8wLAorCS5lbmFibGVfYml0CT0gVVNCX0hPU1RfSEhDX1VIT1NUX0VOLAorCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGUsCisJLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGUsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1c2JfaGhjX2NrMTZ4eCA9IHsKKwkubmFtZQkJPSAidXNiX2hoY19jayIsCisJLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcGFyZW50ICovCisJLnJhdGUJCT0gNDgwMDAwMDAsCisJLyogT1RHX1NZU0NPTl8yLk9UR19QQURFTiA9PSAwIChub3QgMTUxMC1jb21wYXRpYmxlKSAqLworCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTZYWCB8CisJCQkgIFJBVEVfRklYRUQgfCBFTkFCTEVfUkVHXzMyQklULAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKU9UR19CQVNFICsgMHgwOCAvKiBPVEdfU1lTQ09OXzIgKi8sCisJLmVuYWJsZV9iaXQJPSA4IC8qIFVIT1NUX0VOICovLAorCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGUsCisJLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGUsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1c2JfZGNfY2sgPSB7CisJLm5hbWUJCT0gInVzYl9kY19jayIsCisJLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcGFyZW50ICovCisJLnJhdGUJCT0gNDgwMDAwMDAsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNlhYIHwgUkFURV9GSVhFRCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKilTT0ZUX1JFUV9SRUcsCisJLmVuYWJsZV9iaXQJPSA0LAorCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGUsCisJLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGUsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY2xrXzE1MTAgPSB7CisJLm5hbWUJCT0gIm1jbGsiLAorCS8qIERpcmVjdCBmcm9tIFVMUEQsIG5vIHBhcmVudC4gTWF5IGJlIGVuYWJsZWQgYnkgZXh0IGhhcmR3YXJlLiAqLworCS5yYXRlCQk9IDEyMDAwMDAwLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IFJBVEVfRklYRUQsCisJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZSwKKwkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jbGtfMTZ4eCA9IHsKKwkubmFtZQkJPSAibWNsayIsCisJLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcGFyZW50LiBNYXkgYmUgZW5hYmxlZCBieSBleHQgaGFyZHdhcmUuICovCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNlhYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKUNPTV9DTEtfRElWX0NUUkxfU0VMLAorCS5lbmFibGVfYml0CT0gQ09NX1VMUERfUExMX0NMS19SRVEsCisJLnNldF9yYXRlCT0gJm9tYXAxX3NldF9leHRfY2xrX3JhdGUsCisJLnJvdW5kX3JhdGUJPSAmb21hcDFfcm91bmRfZXh0X2Nsa19yYXRlLAorCS5pbml0CQk9ICZvbWFwMV9pbml0X2V4dF9jbGssCisJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZSwKKwkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGJjbGtfMTUxMCA9IHsKKwkubmFtZQkJPSAiYmNsayIsCisJLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcGFyZW50LiBNYXkgYmUgZW5hYmxlZCBieSBleHQgaGFyZHdhcmUuICovCisJLnJhdGUJCT0gMTIwMDAwMDAsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgUkFURV9GSVhFRCwKKwkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlLAorCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgYmNsa18xNnh4ID0geworCS5uYW1lCQk9ICJiY2xrIiwKKwkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyBwYXJlbnQuIE1heSBiZSBlbmFibGVkIGJ5IGV4dCBoYXJkd2FyZS4gKi8KKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE2WFgsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopU1dEX0NMS19ESVZfQ1RSTF9TRUwsCisJLmVuYWJsZV9iaXQJPSBTV0RfVUxQRF9QTExfQ0xLX1JFUSwKKwkuc2V0X3JhdGUJPSAmb21hcDFfc2V0X2V4dF9jbGtfcmF0ZSwKKwkucm91bmRfcmF0ZQk9ICZvbWFwMV9yb3VuZF9leHRfY2xrX3JhdGUsCisJLmluaXQJCT0gJm9tYXAxX2luaXRfZXh0X2NsaywKKwkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlLAorCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbW1jMV9jayA9IHsKKwkubmFtZQkJPSAibW1jMV9jayIsCisJLyogRnVuY3Rpb25hbCBjbG9jayBpcyBkaXJlY3QgZnJvbSBVTFBELCBpbnRlcmZhY2UgY2xvY2sgaXMgQVJNUEVSICovCisJLnBhcmVudAkJPSAmYXJtcGVyX2NrLmNsaywKKwkucmF0ZQkJPSA0ODAwMDAwMCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCB8CisJCQkgIFJBVEVfRklYRUQgfCBFTkFCTEVfUkVHXzMyQklUIHwgQ0xPQ0tfTk9fSURMRV9QQVJFTlQsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopTU9EX0NPTkZfQ1RSTF8wLAorCS5lbmFibGVfYml0CT0gMjMsCisJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZSwKKwkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1tYzJfY2sgPSB7CisJLm5hbWUJCT0gIm1tYzJfY2siLAorCS8qIEZ1bmN0aW9uYWwgY2xvY2sgaXMgZGlyZWN0IGZyb20gVUxQRCwgaW50ZXJmYWNlIGNsb2NrIGlzIEFSTVBFUiAqLworCS5wYXJlbnQJCT0gJmFybXBlcl9jay5jbGssCisJLnJhdGUJCT0gNDgwMDAwMDAsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNlhYIHwKKwkJCSAgUkFURV9GSVhFRCB8IEVOQUJMRV9SRUdfMzJCSVQgfCBDTE9DS19OT19JRExFX1BBUkVOVCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKilNT0RfQ09ORl9DVFJMXzAsCisJLmVuYWJsZV9iaXQJPSAyMCwKKwkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlLAorCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdmlydHVhbF9ja19tcHUgPSB7CisJLm5hbWUJCT0gIm1wdSIsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAorCQkJICBWSVJUVUFMX0NMT0NLIHwgQUxXQVlTX0VOQUJMRUQsCisJLnBhcmVudAkJPSAmYXJtX2NrLCAvKiBJcyBzbWFydGVyIGFsaWFzIGZvciAqLworCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCisJLnNldF9yYXRlCT0gJm9tYXAxX3NlbGVjdF90YWJsZV9yYXRlLAorCS5yb3VuZF9yYXRlCT0gJm9tYXAxX3JvdW5kX3RvX3RhYmxlX3JhdGUsCisJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZSwKKwkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrICogb25jaGlwX2Nsa3NbXSA9IHsKKwkvKiBub24tVUxQRCBjbG9ja3MgKi8KKwkmY2tfcmVmLAorCSZja19kcGxsMSwKKwkvKiBDS19HRU4xIGNsb2NrcyAqLworCSZja19kcGxsMW91dC5jbGssCisJJmFybV9jaywKKwkmYXJtcGVyX2NrLmNsaywKKwkmYXJtX2dwaW9fY2ssCisJJmFybXhvcl9jay5jbGssCisJJmFybXRpbV9jay5jbGssCisJJmFybXdkdF9jay5jbGssCisJJmFybWludGhfY2sxNTEwLCAgJmFybWludGhfY2sxNnh4LAorCS8qIENLX0dFTjIgY2xvY2tzICovCisJJmRzcF9jaywKKwkmZHNwbW11X2NrLAorCSZkc3BwZXJfY2ssCisJJmRzcHhvcl9jaywKKwkmZHNwdGltX2NrLAorCS8qIENLX0dFTjMgY2xvY2tzICovCisJJnRjX2NrLmNsaywKKwkmdGlwYl9jaywKKwkmbDNfb2NwaV9jaywKKwkmdGMxX2NrLAorCSZ0YzJfY2ssCisJJmRtYV9jaywKKwkmZG1hX2xjZGZyZWVfY2ssCisJJmFwaV9jay5jbGssCisJJmxiX2NrLmNsaywKKwkmcmhlYTFfY2ssCisJJnJoZWEyX2NrLAorCSZsY2RfY2tfMTZ4eCwKKwkmbGNkX2NrXzE1MTAuY2xrLAorCS8qIFVMUEQgY2xvY2tzICovCisJJnVhcnQxXzE1MTAsCisJJnVhcnQxXzE2eHguY2xrLAorCSZ1YXJ0Ml9jaywKKwkmdWFydDNfMTUxMCwKKwkmdWFydDNfMTZ4eC5jbGssCisJJnVzYl9jbGtvLAorCSZ1c2JfaGhjX2NrMTUxMCwgJnVzYl9oaGNfY2sxNnh4LAorCSZ1c2JfZGNfY2ssCisJJm1jbGtfMTUxMCwgICZtY2xrXzE2eHgsCisJJmJjbGtfMTUxMCwgICZiY2xrXzE2eHgsCisJJm1tYzFfY2ssCisJJm1tYzJfY2ssCisJLyogVmlydHVhbCBjbG9ja3MgKi8KKwkmdmlydHVhbF9ja19tcHUsCit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9kZXZpY2VzLmMKaW5kZXggM2M1ZDkwMS4uZWNiYzQ3NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9kZXZpY2VzLmMKQEAgLTI1LDU2ICsyNSw3IEBACiAjaW5jbHVkZSA8YXNtL2FyY2gvbXV4Lmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgogCi0KLXN0YXRpYyB2b2lkIG9tYXBfbm9wX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQotewotICAgICAgICAvKiBOb3RoaW5nICovCi19Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLSNpZglkZWZpbmVkKENPTkZJR19JMkNfT01BUCkgfHwgZGVmaW5lZChDT05GSUdfSTJDX09NQVBfTU9EVUxFKQotCi0jZGVmaW5lCU9NQVBfSTJDX0JBU0UJCTB4ZmZmYjM4MDAKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpMmNfcmVzb3VyY2VzW10gPSB7Ci0JewotCQkuc3RhcnQJCT0gT01BUF9JMkNfQkFTRSwKLQkJLmVuZAkJPSBPTUFQX0kyQ19CQVNFICsgMHgzZiwKLQkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JewotCQkuc3RhcnQJCT0gSU5UX0kyQywKLQkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi0vKiBETUEgbm90IHVzZWQ7IHdvcmtzIGFyb3VuZCBlcnJhdHVtIHdyaXRpbmcgdG8gbm9uLWVtcHR5IGkyYyBmaWZvICovCi0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG9tYXBfaTJjX2RldmljZSA9IHsKLSAgICAgICAgLm5hbWUgICAgICAgICAgID0gImkyY19vbWFwIiwKLSAgICAgICAgLmlkICAgICAgICAgICAgID0gLTEsCi0gICAgICAgIC5kZXYgPSB7Ci0gICAgICAgICAgICAgICAgLnJlbGVhc2UgICAgICAgID0gb21hcF9ub3BfcmVsZWFzZSwKLSAgICAgICAgfSwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoaTJjX3Jlc291cmNlcyksCi0JLnJlc291cmNlCT0gaTJjX3Jlc291cmNlcywKLX07Ci0KLXN0YXRpYyB2b2lkIG9tYXBfaW5pdF9pMmModm9pZCkKLXsKLQkvKiBGSVhNRSBkZWZpbmUgYW5kIHVzZSBhIGJvb3QgdGFnLCBpbiBjYXNlIG9mIGJvYXJkcyB0aGF0Ci0JICogZWl0aGVyIGRvbid0IHdpcmUgdXAgSTJDLCBvciBjaGlwcyB0aGF0IG11eCBpdCBkaWZmZXJlbnRseS4uLgotCSAqIGl0IGNhbiBpbmNsdWRlIGNsb2NraW5nIGFuZCBhZGRyZXNzIGluZm8sIG1heWJlIG1vcmUuCi0JICovCi0Jb21hcF9jZmdfcmVnKEkyQ19TQ0wpOwotCW9tYXBfY2ZnX3JlZyhJMkNfU0RBKTsKLQotCSh2b2lkKSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm9tYXBfaTJjX2RldmljZSk7Ci19Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIG9tYXBfaW5pdF9pMmModm9pZCkge30KLSNlbmRpZgorZXh0ZXJuIHZvaWQgb21hcF9ub3BfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC0xMTAsMTM3ICs2MSw2IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLSNpZglkZWZpbmVkKENPTkZJR19NTUNfT01BUCkgfHwgZGVmaW5lZChDT05GSUdfTU1DX09NQVBfTU9EVUxFKQotCi0jZGVmaW5lCU9NQVBfTU1DMV9CQVNFCQkweGZmZmI3ODAwCi0jZGVmaW5lCU9NQVBfTU1DMl9CQVNFCQkweGZmZmI3YzAwCS8qIG9tYXAxNnh4IG9ubHkgKi8KLQotc3RhdGljIHN0cnVjdCBvbWFwX21tY19jb25mIG1tYzFfY29uZjsKLQotc3RhdGljIHU2NCBtbWMxX2RtYW1hc2sgPSAweGZmZmZmZmZmOwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIG1tYzFfcmVzb3VyY2VzW10gPSB7Ci0JewotCQkuc3RhcnQJCT0gSU9fQUREUkVTUyhPTUFQX01NQzFfQkFTRSksCi0JCS5lbmQJCT0gSU9fQUREUkVTUyhPTUFQX01NQzFfQkFTRSkgKyAweDdmLAotCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQl7Ci0JCS5zdGFydAkJPSBJTlRfTU1DLAotCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG1tY19vbWFwX2RldmljZTEgPSB7Ci0JLm5hbWUJCT0gIm1tY2ktb21hcCIsCi0JLmlkCQk9IDEsCi0JLmRldiA9IHsKLQkJLnJlbGVhc2UJPSBvbWFwX25vcF9yZWxlYXNlLAotCQkuZG1hX21hc2sJPSAmbW1jMV9kbWFtYXNrLAotCQkucGxhdGZvcm1fZGF0YQk9ICZtbWMxX2NvbmYsCi0JfSwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobW1jMV9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZQk9IG1tYzFfcmVzb3VyY2VzLAotfTsKLQotI2lmZGVmCUNPTkZJR19BUkNIX09NQVAxNlhYCi0KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9tbWNfY29uZiBtbWMyX2NvbmY7Ci0KLXN0YXRpYyB1NjQgbW1jMl9kbWFtYXNrID0gMHhmZmZmZmZmZjsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtbWMyX3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0CQk9IElPX0FERFJFU1MoT01BUF9NTUMyX0JBU0UpLAotCQkuZW5kCQk9IElPX0FERFJFU1MoT01BUF9NTUMyX0JBU0UpICsgMHg3ZiwKLQkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JewotCQkuc3RhcnQJCT0gSU5UXzE2MTBfTU1DMiwKLQkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtbWNfb21hcF9kZXZpY2UyID0gewotCS5uYW1lCQk9ICJtbWNpLW9tYXAiLAotCS5pZAkJPSAyLAotCS5kZXYgPSB7Ci0JCS5yZWxlYXNlCT0gb21hcF9ub3BfcmVsZWFzZSwKLQkJLmRtYV9tYXNrCT0gJm1tYzJfZG1hbWFzaywKLQkJLnBsYXRmb3JtX2RhdGEJPSAmbW1jMl9jb25mLAotCX0sCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG1tYzJfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UJPSBtbWMyX3Jlc291cmNlcywKLX07Ci0jZW5kaWYKLQotc3RhdGljIHZvaWQgX19pbml0IG9tYXBfaW5pdF9tbWModm9pZCkKLXsKLQljb25zdCBzdHJ1Y3Qgb21hcF9tbWNfY29uZmlnCSptbWNfY29uZjsKLQljb25zdCBzdHJ1Y3Qgb21hcF9tbWNfY29uZgkqbW1jOwotCi0JLyogTk9URTogIGFzc3VtZXMgTU1DIHdhcyBuZXZlciAod3JvbmdseSkgZW5hYmxlZCAqLwotCW1tY19jb25mID0gb21hcF9nZXRfY29uZmlnKE9NQVBfVEFHX01NQywgc3RydWN0IG9tYXBfbW1jX2NvbmZpZyk7Ci0JaWYgKCFtbWNfY29uZikKLQkJcmV0dXJuOwotCi0JLyogYmxvY2sgMSBpcyBhbHdheXMgYXZhaWxhYmxlIGFuZCBoYXMganVzdCBvbmUgcGlub3V0IG9wdGlvbiAqLwotCW1tYyA9ICZtbWNfY29uZi0+bW1jWzBdOwotCWlmIChtbWMtPmVuYWJsZWQpIHsKLQkJb21hcF9jZmdfcmVnKE1NQ19DTUQpOwotCQlvbWFwX2NmZ19yZWcoTU1DX0NMSyk7Ci0JCW9tYXBfY2ZnX3JlZyhNTUNfREFUMCk7Ci0JCWlmIChjcHVfaXNfb21hcDE3MTAoKSkgewotCSAgICAgICAgICAgICAgb21hcF9jZmdfcmVnKE0xNV8xNzEwX01NQ19DTEtJKTsKLQkgICAgICAgICAgICAgIG9tYXBfY2ZnX3JlZyhQMTlfMTcxMF9NTUNfQ01ERElSKTsKLQkgICAgICAgICAgICAgIG9tYXBfY2ZnX3JlZyhQMjBfMTcxMF9NTUNfREFURElSMCk7Ci0JICAgICAgICB9Ci0JCWlmIChtbWMtPndpcmU0KSB7Ci0JCQlvbWFwX2NmZ19yZWcoTU1DX0RBVDEpOwotCQkJLyogTk9URTogIERBVDIgY2FuIGJlIG9uIFcxMCAoaGVyZSkgb3IgTTE1ICovCi0JCQlpZiAoIW1tYy0+bm9tdXgpCi0JCQkJb21hcF9jZmdfcmVnKE1NQ19EQVQyKTsKLQkJCW9tYXBfY2ZnX3JlZyhNTUNfREFUMyk7Ci0JCX0KLQkJbW1jMV9jb25mID0gKm1tYzsKLQkJKHZvaWQpIHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmbW1jX29tYXBfZGV2aWNlMSk7Ci0JfQotCi0jaWZkZWYJQ09ORklHX0FSQ0hfT01BUDE2WFgKLQkvKiBibG9jayAyIGlzIG9uIG5ld2VyIGNoaXBzLCBhbmQgaGFzIG1hbnkgcGlub3V0IG9wdGlvbnMgKi8KLQltbWMgPSAmbW1jX2NvbmYtPm1tY1sxXTsKLQlpZiAobW1jLT5lbmFibGVkKSB7Ci0JCWlmICghbW1jLT5ub211eCkgewotCQkJb21hcF9jZmdfcmVnKFk4XzE2MTBfTU1DMl9DTUQpOwotCQkJb21hcF9jZmdfcmVnKFkxMF8xNjEwX01NQzJfQ0xLKTsKLQkJCW9tYXBfY2ZnX3JlZyhSMThfMTYxMF9NTUMyX0NMS0lOKTsKLQkJCW9tYXBfY2ZnX3JlZyhXOF8xNjEwX01NQzJfREFUMCk7Ci0JCQlpZiAobW1jLT53aXJlNCkgewotCQkJCW9tYXBfY2ZnX3JlZyhWOF8xNjEwX01NQzJfREFUMSk7Ci0JCQkJb21hcF9jZmdfcmVnKFcxNV8xNjEwX01NQzJfREFUMik7Ci0JCQkJb21hcF9jZmdfcmVnKFIxMF8xNjEwX01NQzJfREFUMyk7Ci0JCQl9Ci0KLQkJCS8qIFRoZXNlIGFyZSBuZWVkZWQgZm9yIHRoZSBsZXZlbCBzaGlmdGVyICovCi0JCQlvbWFwX2NmZ19yZWcoVjlfMTYxMF9NTUMyX0NNRERJUik7Ci0JCQlvbWFwX2NmZ19yZWcoVjVfMTYxMF9NTUMyX0RBVERJUjApOwotCQkJb21hcF9jZmdfcmVnKFcxOV8xNjEwX01NQzJfREFURElSMSk7Ci0JCX0KLQotCQkvKiBGZWVkYmFjayBjbG9jayBtdXN0IGJlIHNldCBvbiBPTUFQLTE3MTAgTU1DMiAqLwotCQlpZiAoY3B1X2lzX29tYXAxNzEwKCkpCi0JCQlvbWFwX3dyaXRlbChvbWFwX3JlYWRsKE1PRF9DT05GX0NUUkxfMSkgfCAoMSA8PCAyNCksCi0JCQkJICAgICBNT0RfQ09ORl9DVFJMXzEpOwotCQltbWMyX2NvbmYgPSAqbW1jOwotCQkodm9pZCkgcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZtbWNfb21hcF9kZXZpY2UyKTsKLQl9Ci0jZW5kaWYKLQlyZXR1cm47Ci19Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIG9tYXBfaW5pdF9tbWModm9pZCkge30KLSNlbmRpZgotCiAjaWYJZGVmaW5lZChDT05GSUdfT01BUF9SVEMpIHx8IGRlZmluZWQoQ09ORklHX09NQVBfUlRDKQogCiAjZGVmaW5lCU9NQVBfUlRDX0JBU0UJCTB4ZmZmYjQ4MDAKQEAgLTI3OSwzOCArOTksNiBAQAogc3RhdGljIGlubGluZSB2b2lkIG9tYXBfaW5pdF9ydGModm9pZCkge30KICNlbmRpZgogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0jaWYJZGVmaW5lZChDT05GSUdfT01BUDE2WFhfV0FUQ0hET0cpIHx8IGRlZmluZWQoQ09ORklHX09NQVAxNlhYX1dBVENIRE9HX01PRFVMRSkKLQotI2RlZmluZQlPTUFQX1dEVF9CQVNFCQkweGZmZmViMDAwCi0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugd2R0X3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0CQk9IE9NQVBfV0RUX0JBU0UsCi0JCS5lbmQJCT0gT01BUF9XRFRfQkFTRSArIDB4NGYsCi0JCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb21hcF93ZHRfZGV2aWNlID0gewotCS5uYW1lCSAgID0gIm9tYXAxNjEwX3dkdCIsCi0JLmlkCSAgICAgPSAtMSwKLQkuZGV2ID0gewotCQkucmVsZWFzZQk9IG9tYXBfbm9wX3JlbGVhc2UsCi0JfSwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUod2R0X3Jlc291cmNlcyksCi0JLnJlc291cmNlCT0gd2R0X3Jlc291cmNlcywKLX07Ci0KLXN0YXRpYyB2b2lkIG9tYXBfaW5pdF93ZHQodm9pZCkKLXsKLQkodm9pZCkgcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZvbWFwX3dkdF9kZXZpY2UpOwotfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBvbWFwX2luaXRfd2R0KHZvaWQpIHt9Ci0jZW5kaWYKLQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC0zMzQsMTggKzEyMiwxNSBAQAogICogbWF5IGJlIGhhbmRsZWQgYnkgdGhlIGJvb3QgbG9hZGVyLCBhbmQgZHJpdmVycyBzaG91bGQgZXhwZWN0IGl0IHdpbGwKICAqIG5vcm1hbGx5IGhhdmUgYmVlbiBkb25lIGJ5IHRoZSB0aW1lIHRoZXkncmUgcHJvYmVkLgogICovCi1zdGF0aWMgaW50IF9faW5pdCBvbWFwX2luaXRfZGV2aWNlcyh2b2lkKQorc3RhdGljIGludCBfX2luaXQgb21hcDFfaW5pdF9kZXZpY2VzKHZvaWQpCiB7CiAJLyogcGxlYXNlIGtlZXAgdGhlc2UgY2FsbHMsIGFuZCB0aGVpciBpbXBsZW1lbnRhdGlvbnMgYWJvdmUsCiAJICogaW4gYWxwaGFiZXRpY2FsIG9yZGVyIHNvIHRoZXkncmUgZWFzaWVyIHRvIHNvcnQgdGhyb3VnaC4KIAkgKi8KLQlvbWFwX2luaXRfaTJjKCk7CiAJb21hcF9pbml0X2lyZGEoKTsKLQlvbWFwX2luaXRfbW1jKCk7CiAJb21hcF9pbml0X3J0YygpOwotCW9tYXBfaW5pdF93ZHQoKTsKIAogCXJldHVybiAwOwogfQotYXJjaF9pbml0Y2FsbChvbWFwX2luaXRfZGV2aWNlcyk7CithcmNoX2luaXRjYWxsKG9tYXAxX2luaXRfZGV2aWNlcyk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvaWQuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvaWQuYwppbmRleCA5ODZjM2I3Li41YzYzN2MwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2lkLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9pZC5jCkBAIC0xOCw2ICsxOCwxMyBAQAogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKKyNkZWZpbmUgT01BUF9ESUVfSURfMAkJMHhmZmZlMTgwMAorI2RlZmluZSBPTUFQX0RJRV9JRF8xCQkweGZmZmUxODA0CisjZGVmaW5lIE9NQVBfUFJPRFVDVElPTl9JRF8wCTB4ZmZmZTIwMDAKKyNkZWZpbmUgT01BUF9QUk9EVUNUSU9OX0lEXzEJMHhmZmZlMjAwNAorI2RlZmluZSBPTUFQMzJfSURfMAkJMHhmZmZlZDQwMAorI2RlZmluZSBPTUFQMzJfSURfMQkJMHhmZmZlZDQwNAorCiBzdHJ1Y3Qgb21hcF9pZCB7CiAJdTE2CWp0YWdfaWQ7CS8qIFVzZWQgdG8gZGV0ZXJtaW5lIE9NQVAgdHlwZSAqLwogCXU4CWRpZV9yZXY7CS8qIFByb2Nlc3NvciByZXZpc2lvbiAqLwpAQCAtMjcsNiArMzQsNyBAQAogCiAvKiBSZWdpc3RlciB2YWx1ZXMgdG8gZGV0ZWN0IHRoZSBPTUFQIHZlcnNpb24gKi8KIHN0YXRpYyBzdHJ1Y3Qgb21hcF9pZCBvbWFwX2lkc1tdIF9faW5pdGRhdGEgPSB7CisJeyAuanRhZ19pZCA9IDB4YjU3NCwgLmRpZV9yZXYgPSAweDIsIC5vbWFwX2lkID0gMHgwMzMxMDMxNSwgLnR5cGUgPSAweDAzMTAwMDAwfSwKIAl7IC5qdGFnX2lkID0gMHgzNTVmLCAuZGllX3JldiA9IDB4MCwgLm9tYXBfaWQgPSAweDAzMzIwMDAwLCAudHlwZSA9IDB4MDczMDAxMDB9LAogCXsgLmp0YWdfaWQgPSAweGI1NWYsIC5kaWVfcmV2ID0gMHgwLCAub21hcF9pZCA9IDB4MDMzMjAwMDAsIC50eXBlID0gMHgwNzMwMDMwMH0sCiAJeyAuanRhZ19pZCA9IDB4YjQ3MCwgLmRpZV9yZXYgPSAweDAsIC5vbWFwX2lkID0gMHgwMzMxMDEwMCwgLnR5cGUgPSAweDE1MTAwMDAwfSwKQEAgLTE2NCw2ICsxNzIsNyBAQAogCWNhc2UgMHgwNzoKIAkJc3lzdGVtX3JldiB8PSAweDA3OwogCQlicmVhazsKKwljYXNlIDB4MDM6CiAJY2FzZSAweDE1OgogCQlzeXN0ZW1fcmV2IHw9IDB4MTU7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9pby5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9pby5jCmluZGV4IDc5ZmI4NjUuLmE3YTE5ZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvaW8uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2lvLmMKQEAgLTE1LDkgKzE1LDEwIEBACiAKICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9tdXguaD4KICNpbmNsdWRlIDxhc20vYXJjaC90Yy5oPgogCi1leHRlcm4gaW50IGNsa19pbml0KHZvaWQpOworZXh0ZXJuIGludCBvbWFwMV9jbGtfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIG9tYXBfY2hlY2tfcmV2aXNpb24odm9pZCk7CiBleHRlcm4gdm9pZCBvbWFwX3NyYW1faW5pdCh2b2lkKTsKIApAQCAtNTAsNyArNTEsNyBAQAogfTsKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1MTAKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBvbWFwMTUxMF9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKIAl7CiAJCS52aXJ0dWFsCT0gT01BUDE1MTBfRFNQX0JBU0UsCkBAIC05OCw3ICs5OSw3IEBACiAJCWlvdGFibGVfaW5pdChvbWFwNzMwX2lvX2Rlc2MsIEFSUkFZX1NJWkUob21hcDczMF9pb19kZXNjKSk7CiAJfQogI2VuZGlmCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1MTAKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAogCWlmIChjcHVfaXNfb21hcDE1MTAoKSkgewogCQlpb3RhYmxlX2luaXQob21hcDE1MTBfaW9fZGVzYywgQVJSQVlfU0laRShvbWFwMTUxMF9pb19kZXNjKSk7CiAJfQpAQCAtMTE5LDcgKzEyMCw3IEBACiAKIAkvKiBNdXN0IGluaXQgY2xvY2tzIGVhcmx5IHRvIGFzc3VyZSB0aGF0IHRpbWVyIGludGVycnVwdCB3b3JrcwogCSAqLwotCWNsa19pbml0KCk7CisJb21hcDFfY2xrX2luaXQoKTsKIH0KIAogLyoKQEAgLTEyNyw3ICsxMjgsOSBAQAogICovCiB2b2lkIF9faW5pdCBvbWFwX21hcF9jb21tb25faW8odm9pZCkKIHsKLQlpZiAoIWluaXRpYWxpemVkKQorCWlmICghaW5pdGlhbGl6ZWQpIHsKIAkJX29tYXBfbWFwX2lvKCk7CisJCW9tYXAxX211eF9pbml0KCk7CisJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2lycS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9pcnEuYwppbmRleCAxOTJjZTYwLi5lZDY1YTdkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2lycS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvaXJxLmMKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2NwdS5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKQEAgLTE0NywxMSArMTQ4LDE1IEBACiB9OwogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTUxMAorI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNVhYCiBzdGF0aWMgc3RydWN0IG9tYXBfaXJxX2Jhbmsgb21hcDE1MTBfaXJxX2JhbmtzW10gPSB7CiAJeyAuYmFzZV9yZWcgPSBPTUFQX0lIMV9CQVNFLCAJCS50cmlnZ2VyX21hcCA9IDB4YjNmZWJmZmYgfSwKIAl7IC5iYXNlX3JlZyA9IE9NQVBfSUgyX0JBU0UsIAkJLnRyaWdnZXJfbWFwID0gMHhmZmJmZmZlZCB9LAogfTsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9pcnFfYmFuayBvbWFwMzEwX2lycV9iYW5rc1tdID0geworCXsgLmJhc2VfcmVnID0gT01BUF9JSDFfQkFTRSwgCQkudHJpZ2dlcl9tYXAgPSAweGIzZmFlZmMzIH0sCisJeyAuYmFzZV9yZWcgPSBPTUFQX0lIMl9CQVNFLCAJCS50cmlnZ2VyX21hcCA9IDB4NjViM2MwNjEgfSwKK307CiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE2WFgpCkBAIC0xODEsMTEgKzE4NiwxNSBAQAogCQlpcnFfYmFua19jb3VudCA9IEFSUkFZX1NJWkUob21hcDczMF9pcnFfYmFua3MpOwogCX0KICNlbmRpZgotI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNTEwCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1WFgKIAlpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKIAkJaXJxX2JhbmtzID0gb21hcDE1MTBfaXJxX2JhbmtzOwogCQlpcnFfYmFua19jb3VudCA9IEFSUkFZX1NJWkUob21hcDE1MTBfaXJxX2JhbmtzKTsKIAl9CisJaWYgKGNwdV9pc19vbWFwMzEwKCkpIHsKKwkJaXJxX2JhbmtzID0gb21hcDMxMF9pcnFfYmFua3M7CisJCWlycV9iYW5rX2NvdW50ID0gQVJSQVlfU0laRShvbWFwMzEwX2lycV9iYW5rcyk7CisJfQogI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTZYWCkKIAlpZiAoY3B1X2lzX29tYXAxNnh4KCkpIHsKQEAgLTIyNiw5ICsyMzUsMTEgQEAKIAl9CiAKIAkvKiBVbm1hc2sgbGV2ZWwgMiBoYW5kbGVyICovCi0JaWYgKGNwdV9pc19vbWFwNzMwKCkpIHsKKworCWlmIChjcHVfaXNfb21hcDczMCgpKQogCQlvbWFwX3VubWFza19pcnEoSU5UXzczMF9JSDJfSVJRKTsKLQl9IGVsc2UgewotCQlvbWFwX3VubWFza19pcnEoSU5UX0lIMl9JUlEpOwotCX0KKwllbHNlIGlmIChjcHVfaXNfb21hcDE1MTAoKSkKKwkJb21hcF91bm1hc2tfaXJxKElOVF8xNTEwX0lIMl9JUlEpOworCWVsc2UgaWYgKGNwdV9pc19vbWFwMTZ4eCgpKQorCQlvbWFwX3VubWFza19pcnEoSU5UXzE2MTBfSUgyX0lSUSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2xlZHMtaDJwMi1kZWJ1Zy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9sZWRzLWgycDItZGVidWcuYwppbmRleCBiZTI4M2NkLi42NTA2NTA4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2xlZHMtaDJwMi1kZWJ1Zy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvbGVkcy1oMnAyLWRlYnVnLmMKQEAgLTEzLDEyICsxMywxMiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2xlZHMuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KIAogI2luY2x1ZGUgPGFzbS9hcmNoL2ZwZ2EuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9ncGlvLmg+CkBAIC02NCwxNCArNjQsMTkgQEAKIAljYXNlIGxlZF9zdG9wOgogCWNhc2UgbGVkX2hhbHRlZDoKIAkJLyogYWxsIGxlZHMgb2ZmIGR1cmluZyBzdXNwZW5kIG9yIHNodXRkb3duICovCi0JCW9tYXBfc2V0X2dwaW9fZGF0YW91dChHUElPX1RJTUVSLCAwKTsKLQkJb21hcF9zZXRfZ3Bpb19kYXRhb3V0KEdQSU9fSURMRSwgMCk7CisKKwkJaWYgKCEgbWFjaGluZV9pc19vbWFwX3BlcnNldXMyKCkpIHsKKwkJCW9tYXBfc2V0X2dwaW9fZGF0YW91dChHUElPX1RJTUVSLCAwKTsKKwkJCW9tYXBfc2V0X2dwaW9fZGF0YW91dChHUElPX0lETEUsIDApOworCQl9CisKIAkJX19yYXdfd3JpdGV3KH4wLCAmZnBnYS0+bGVkcyk7CiAJCWxlZF9zdGF0ZSAmPSB+TEVEX1NUQVRFX0VOQUJMRUQ7CiAJCWlmIChldnQgPT0gbGVkX2hhbHRlZCkgewogCQkJaW91bm1hcChmcGdhKTsKIAkJCWZwZ2EgPSBOVUxMOwogCQl9CisKIAkJZ290byBkb25lOwogCiAJY2FzZSBsZWRfY2xhaW06CkBAIC04NiwxOCArOTEsMzcgQEAKICNpZmRlZiBDT05GSUdfTEVEU19USU1FUgogCWNhc2UgbGVkX3RpbWVyOgogCQlsZWRfc3RhdGUgXj0gTEVEX1RJTUVSX09OOwotCQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoR1BJT19USU1FUiwgbGVkX3N0YXRlICYgTEVEX1RJTUVSX09OKTsKLQkJZ290byBkb25lOworCisJCWlmIChtYWNoaW5lX2lzX29tYXBfcGVyc2V1czIoKSkKKwkJCWh3X2xlZF9zdGF0ZSBePSBIMlAyX0RCR19GUEdBX1AyX0xFRF9USU1FUjsKKwkJZWxzZSB7CisJCQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoR1BJT19USU1FUiwgbGVkX3N0YXRlICYgTEVEX1RJTUVSX09OKTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCisJCWJyZWFrOwogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfTEVEU19DUFUKIAljYXNlIGxlZF9pZGxlX3N0YXJ0OgotCQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoR1BJT19JRExFLCAxKTsKLQkJZ290byBkb25lOworCQlpZiAobWFjaGluZV9pc19vbWFwX3BlcnNldXMyKCkpCisJCQlod19sZWRfc3RhdGUgfD0gSDJQMl9EQkdfRlBHQV9QMl9MRURfSURMRTsKKwkJZWxzZSB7CisJCQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoR1BJT19JRExFLCAxKTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCisJCWJyZWFrOwogCiAJY2FzZSBsZWRfaWRsZV9lbmQ6Ci0JCW9tYXBfc2V0X2dwaW9fZGF0YW91dChHUElPX0lETEUsIDApOwotCQlnb3RvIGRvbmU7CisJCWlmIChtYWNoaW5lX2lzX29tYXBfcGVyc2V1czIoKSkKKwkJCWh3X2xlZF9zdGF0ZSAmPSB+SDJQMl9EQkdfRlBHQV9QMl9MRURfSURMRTsKKwkJZWxzZSB7CisJCQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoR1BJT19JRExFLCAwKTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCisJCWJyZWFrOwogI2VuZGlmCiAKIAljYXNlIGxlZF9ncmVlbl9vbjoKQEAgLTEzNiw3ICsxNjAsNyBAQAogCS8qCiAJICogIEFjdHVhbGx5IGJ1cm4gdGhlIExFRHMKIAkgKi8KLQlpZiAobGVkX3N0YXRlICYgTEVEX1NUQVRFX0NMQUlNRUQpCisJaWYgKGxlZF9zdGF0ZSAmIExFRF9TVEFURV9FTkFCTEVEKQogCQlfX3Jhd193cml0ZXcofmh3X2xlZF9zdGF0ZSwgJmZwZ2EtPmxlZHMpOwogCiBkb25lOgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9sZWRzLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2xlZHMuYwppbmRleCA1YzZiMWJiLi4zZjlkY2FjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2xlZHMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2xlZHMuYwpAQCAtMzMsNyArMzMsNiBAQAogCiAJaWYgKG1hY2hpbmVfaXNfb21hcF9oMigpCiAJCQl8fCBtYWNoaW5lX2lzX29tYXBfaDMoKQotCQkJfHwgbWFjaGluZV9pc19vbWFwX3BlcnNldXMyKCkKICNpZmRlZglDT05GSUdfT01BUF9PU0tfTUlTVFJBTAogCQkJfHwgbWFjaGluZV9pc19vbWFwX29zaygpCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvbXV4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL211eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0YjhkNjIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL211eC5jCkBAIC0wLDAgKzEsMjg5IEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwMS9tdXguYworICoKKyAqIE9NQVAxIHBpbiBtdWx0aXBsZXhpbmcgY29uZmlndXJhdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA1IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogV3JpdHRlbiBieSBUb255IExpbmRncmVuIDx0b255LmxpbmRncmVuQG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKgorICovCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvbXV4Lmg+CisKKyNpZmRlZiBDT05GSUdfT01BUF9NVVgKKworI2lmZGVmIENPTkZJR19BUkNIX09NQVA3MzAKK3N0cnVjdCBwaW5fY29uZmlnIF9faW5pdGRhdGFfb3JfbW9kdWxlIG9tYXA3MzBfcGluc1tdID0geworTVVYX0NGR183MzAoIkUyXzczMF9LQlIwIiwJMTIsICAgMjEsICAgIDAsCSAgMCwgICAyMCwgICAxLAkgIE5BLAkgMCwgIDApCitNVVhfQ0ZHXzczMCgiSjdfNzMwX0tCUjEiLAkxMiwgICAyNSwgICAgMCwJICAwLCAgIDI0LCAgIDEsCSAgTkEsCSAwLCAgMCkKK01VWF9DRkdfNzMwKCJFMV83MzBfS0JSMiIsCTEyLCAgIDI5LCAgICAwLAkgIDAsICAgMjgsICAgMSwJICBOQSwJIDAsICAwKQorTVVYX0NGR183MzAoIkYzXzczMF9LQlIzIiwJMTMsICAgIDEsICAgIDAsCSAgMCwgICAwLCAgICAxLAkgIE5BLAkgMCwgIDApCitNVVhfQ0ZHXzczMCgiRDJfNzMwX0tCUjQiLAkxMywgICAgNSwgICAgMCwJICAwLCAgIDQsICAgIDEsCSAgTkEsCSAwLCAgMCkKK01VWF9DRkdfNzMwKCJDMl83MzBfS0JDMCIsCTEzLCAgICA5LCAgICAwLAkgIDAsCTgsICAgMSwJICBOQSwJIDAsICAwKQorTVVYX0NGR183MzAoIkQzXzczMF9LQkMxIiwJMTMsICAgMTMsICAgIDAsCSAgMCwgICAxMiwgICAxLAkgIE5BLAkgMCwgIDApCitNVVhfQ0ZHXzczMCgiRTRfNzMwX0tCQzIiLAkxMywgICAxNywgICAgMCwJICAwLCAgIDE2LCAgIDEsCSAgTkEsCSAwLCAgMCkKK01VWF9DRkdfNzMwKCJGNF83MzBfS0JDMyIsCTEzLCAgIDIxLCAgICAwLAkgIDAsICAgMjAsICAgMSwJICBOQSwJIDAsICAwKQorTVVYX0NGR183MzAoIkUzXzczMF9LQkM0IiwJMTMsICAgMjUsICAgIDAsCSAgMCwgICAyNCwgICAxLAkgIE5BLAkgMCwgIDApCit9OworI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNVhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNlhYKQorc3RydWN0IHBpbl9jb25maWcgX19pbml0ZGF0YV9vcl9tb2R1bGUgb21hcDF4eHhfcGluc1tdID0geworLyoKKyAqCSBkZXNjcmlwdGlvbgkJbXV4ICBtb2RlICAgbXV4CSBwdWxsIHB1bGwgIHB1bGwgIHB1X3BkCSBwdSAgZGJnCisgKgkJCQlyZWcgIG9mZnNldCBtb2RlIHJlZyAgYml0ICAgZW5hCSAgcmVnCisgKi8KK01VWF9DRkcoIlVBUlQxX1RYIiwJCSA5LCAgIDIxLCAgICAxLAkgIDIsICAgMywgICAwLAkgTkEsCSAwLCAgMCkKK01VWF9DRkcoIlVBUlQxX1JUUyIsCQkgOSwgICAxMiwgICAgMSwJICAyLCAgIDAsICAgMCwJIE5BLAkgMCwgIDApCisKKy8qIFVBUlQyIChDT01fVUFSVF9HQVRJTkcpLCBjb25mbGljdHMgd2l0aCBVU0IyICovCitNVVhfQ0ZHKCJVQVJUMl9UWCIsCQkgQywgICAyNywgICAgMSwJICAzLCAgIDMsICAgMCwJIE5BLAkgMCwgIDApCitNVVhfQ0ZHKCJVQVJUMl9SWCIsCQkgQywgICAxOCwgICAgMCwJICAzLCAgIDEsICAgMSwJIE5BLAkgMCwgIDApCitNVVhfQ0ZHKCJVQVJUMl9DVFMiLAkJIEMsICAgMjEsICAgIDAsCSAgMywgICAxLCAgIDEsCSBOQSwJIDAsICAwKQorTVVYX0NGRygiVUFSVDJfUlRTIiwJCSBDLCAgIDI0LCAgICAxLAkgIDMsICAgMiwgICAwLAkgTkEsCSAwLCAgMCkKKworLyogVUFSVDMgKEdJR0FfVUFSVF9HQVRJTkcpICovCitNVVhfQ0ZHKCJVQVJUM19UWCIsCQkgNiwgICAgMCwgICAgMSwJICAwLCAgMzAsICAgMCwJIE5BLAkgMCwgIDApCitNVVhfQ0ZHKCJVQVJUM19SWCIsCQkgNiwgICAgMywgICAgMCwJICAwLCAgMzEsICAgMSwJIE5BLAkgMCwgIDApCitNVVhfQ0ZHKCJVQVJUM19DVFMiLAkJIDUsICAgMTIsICAgIDIsCSAgMCwgIDI0LCAgIDAsCSBOQSwJIDAsICAwKQorTVVYX0NGRygiVUFSVDNfUlRTIiwJCSA1LCAgIDE1LCAgICAyLAkgIDAsICAyNSwgICAwLAkgTkEsCSAwLCAgMCkKK01VWF9DRkcoIlVBUlQzX0NMS1JFUSIsCQkgOSwgICAyNywgICAgMCwJICAyLCAgIDUsICAgMCwJIE5BLAkgMCwgIDApCitNVVhfQ0ZHKCJVQVJUM19CQ0xLIiwJCSBBLCAgICAwLCAgICAwLAkgIDIsICAgNiwgICAwLAkgTkEsCSAwLCAgMCkKK01VWF9DRkcoIlkxNV8xNjEwX1VBUlQzX1JUUyIsCSBBLCAgICAwLCAgICAxLAkgIDIsICAgNiwgICAwLAkgTkEsCSAwLCAgMCkKKworLyogUFdUICYgUFdMLCBjb25mbGljdHMgd2l0aCBVQVJUMyAqLworTVVYX0NGRygiUFdUIiwJCSAJIDYsICAgIDAsICAgIDIsCSAgMCwgIDMwLCAgIDAsCSBOQSwJIDAsICAwKQorTVVYX0NGRygiUFdMIiwJCSAJIDYsICAgIDMsICAgIDEsCSAgMCwgIDMxLCAgIDEsCSBOQSwJIDAsICAwKQorCisvKiBVU0IgaW50ZXJuYWwgbWFzdGVyIGdlbmVyaWMgKi8KK01VWF9DRkcoIlIxOF9VU0JfVkJVUyIsCQkgNywgICAgOSwgICAgMiwJICAxLCAgMTEsICAgMCwJIE5BLAkgMCwgIDEpCitNVVhfQ0ZHKCJSMThfMTUxMF9VU0JfR1BJTzAiLAkgNywgICAgOSwgICAgMCwJICAxLCAgMTEsICAgMSwJIE5BLAkgMCwgIDEpCisvKiB3b3JrcyBhcm91bmQgZXJyYXR1bTogIFc0X1VTQl9QVUVOIGFuZCBXNF9VU0JfUFVESVMgYXJlIHN3aXRjaGVkISAqLworTVVYX0NGRygiVzRfVVNCX1BVRU4iLAkJIEQsICAgIDMsICAgIDMsCSAgMywgICA1LCAgIDEsCSBOQSwJIDAsICAxKQorTVVYX0NGRygiVzRfVVNCX0NMS08iLAkJIEQsICAgIDMsICAgIDEsCSAgMywgICA1LCAgIDAsCSBOQSwJIDAsICAxKQorTVVYX0NGRygiVzRfVVNCX0hJR0haIiwJCSBELCAgICAzLCAgICA0LAkgIDMsICAgNSwgICAwLAkgIDMsCSAwLCAgMSkKK01VWF9DRkcoIlc0X0dQSU81OCIsCQkgRCwgICAgMywgICAgNywJICAzLCAgIDUsICAgMCwJICAzLAkgMCwgIDEpCisKKy8qIFVTQjEgbWFzdGVyICovCitNVVhfQ0ZHKCJVU0IxX1NVU1AiLAkJIDgsICAgMjcsICAgIDIsCSAgMSwgIDI3LCAgIDAsCSBOQSwJIDAsICAxKQorTVVYX0NGRygiVVNCMV9TRTAiLAkJIDksICAgIDAsICAgIDIsCSAgMSwgIDI4LCAgIDAsCSBOQSwJIDAsICAxKQorTVVYX0NGRygiVzEzXzE2MTBfVVNCMV9TRTAiLAkgOSwgICAgMCwgICAgNCwJICAxLCAgMjgsICAgMCwJIE5BLAkgMCwgIDEpCitNVVhfQ0ZHKCJVU0IxX1RYRU4iLAkJIDksICAgIDMsICAgIDIsCSAgMSwgIDI5LCAgIDAsCSBOQSwJIDAsICAxKQorTVVYX0NGRygiVVNCMV9UWEQiLAkJIDksICAgMjQsICAgIDEsCSAgMiwgICA0LCAgIDAsCSBOQSwJIDAsICAxKQorTVVYX0NGRygiVVNCMV9WUCIsCQkgQSwgICAgMywgICAgMSwJICAyLCAgIDcsICAgMCwJIE5BLAkgMCwgIDEpCitNVVhfQ0ZHKCJVU0IxX1ZNIiwJCSBBLCAgICA2LCAgICAxLAkgIDIsICAgOCwgICAwLAkgTkEsCSAwLCAgMSkKK01VWF9DRkcoIlVTQjFfUkNWIiwJCSBBLCAgICA5LCAgICAxLAkgIDIsICAgOSwgICAwLAkgTkEsCSAwLCAgMSkKK01VWF9DRkcoIlVTQjFfU1BFRUQiLAkJIEEsICAgMTIsICAgIDIsCSAgMiwgIDEwLCAgIDAsCSBOQSwJIDAsICAxKQorTVVYX0NGRygiUjEzXzE2MTBfVVNCMV9TUEVFRCIsCSBBLCAgIDEyLCAgICA1LAkgIDIsICAxMCwgICAwLAkgTkEsCSAwLCAgMSkKK01VWF9DRkcoIlIxM18xNzEwX1VTQjFfU0VPIiwJIEEsICAgMTIsICAgIDUsICAgMiwgIDEwLCAgIDAsICAgTkEsICAgICAwLCAgMSkKKworLyogVVNCMiBtYXN0ZXIgKi8KK01VWF9DRkcoIlVTQjJfU1VTUCIsCQkgQiwgICAgMywgICAgMSwJICAyLCAgMTcsICAgMCwJIE5BLAkgMCwgIDEpCitNVVhfQ0ZHKCJVU0IyX1ZQIiwJCSBCLCAgICA2LCAgICAxLAkgIDIsICAxOCwgICAwLAkgTkEsCSAwLCAgMSkKK01VWF9DRkcoIlVTQjJfVFhFTiIsCQkgQiwgICAgOSwgICAgMSwJICAyLCAgMTksICAgMCwJIE5BLAkgMCwgIDEpCitNVVhfQ0ZHKCJVU0IyX1ZNIiwJCSBDLCAgIDE4LCAgICAxLAkgIDMsICAgMCwgICAwLAkgTkEsCSAwLCAgMSkKK01VWF9DRkcoIlVTQjJfUkNWIiwJCSBDLCAgIDIxLCAgICAxLAkgIDMsICAgMSwgICAwLAkgTkEsCSAwLCAgMSkKK01VWF9DRkcoIlVTQjJfU0UwIiwJCSBDLCAgIDI0LCAgICAyLAkgIDMsICAgMiwgICAwLAkgTkEsCSAwLCAgMSkKK01VWF9DRkcoIlVTQjJfVFhEIiwJCSBDLCAgIDI3LCAgICAyLAkgIDMsICAgMywgICAwLAkgTkEsCSAwLCAgMSkKKworLyogT01BUC0xNTEwIEdQSU8gKi8KK01VWF9DRkcoIlIxOF8xNTEwX0dQSU8wIiwJIDcsICAgIDksICAgIDAsICAgMSwgIDExLCAgIDEsICAgIDAsICAgICAwLCAgMSkKK01VWF9DRkcoIlIxOV8xNTEwX0dQSU8xIiwJIDcsICAgIDYsICAgIDAsICAgMSwgIDEwLCAgIDEsICAgIDAsICAgICAwLCAgMSkKK01VWF9DRkcoIk0xNF8xNTEwX0dQSU8yIiwJIDcsICAgIDMsICAgIDAsICAgMSwgICA5LCAgIDEsICAgIDAsICAgICAwLCAgMSkKKworLyogT01BUDE2MTAgR1BJTyAqLworTVVYX0NGRygiUDE4XzE2MTBfR1BJTzMiLAkgNywgICAgMCwgICAgMCwgICAxLCAgIDgsICAgMCwgICBOQSwgICAgIDAsICAxKQorTVVYX0NGRygiWTE1XzE2MTBfR1BJTzE3IiwJIEEsICAgIDAsICAgIDcsICAgMiwgICA2LCAgIDAsICAgTkEsICAgICAwLCAgMSkKKworLyogT01BUC0xNzEwIEdQSU8gKi8KK01VWF9DRkcoIlIxOF8xNzEwX0dQSU8wIiwgICAgICAgIDcsICAgIDksICAgIDAsICAgMSwgIDExLCAgIDEsICAgIDEsICAgICAxLCAgMSkKK01VWF9DRkcoIlYyXzE3MTBfR1BJTzEwIiwgICAgICAgIEYsICAgMjcsICAgIDEsICAgNCwgICAzLCAgIDEsICAgIDQsICAgICAxLCAgMSkKK01VWF9DRkcoIk4yMV8xNzEwX0dQSU8xNCIsICAgICAgIDYsICAgIDksICAgIDAsICAgMSwgICAxLCAgIDEsICAgIDEsICAgICAxLCAgMSkKK01VWF9DRkcoIlcxNV8xNzEwX0dQSU80MCIsICAgICAgIDksICAgMjcsICAgIDcsICAgMiwgICA1LCAgIDEsICAgIDIsICAgICAxLCAgMSkKKworLyogTVBVSU8gKi8KK01VWF9DRkcoIk1QVUlPMiIsCQkgNywgICAxOCwgICAgMCwJICAxLCAgMTQsICAgMSwJIE5BLAkgMCwgIDEpCitNVVhfQ0ZHKCJOMTVfMTYxMF9NUFVJTzIiLAkgNywgICAxOCwgICAgMCwJICAxLCAgMTQsICAgMSwJICAxLAkgMCwgIDEpCitNVVhfQ0ZHKCJNUFVJTzQiLAkJIDcsICAgMTUsICAgIDAsCSAgMSwgIDEzLCAgIDEsCSBOQSwJIDAsICAxKQorTVVYX0NGRygiTVBVSU81IiwJCSA3LCAgIDEyLCAgICAwLAkgIDEsICAxMiwgICAxLAkgTkEsCSAwLCAgMSkKKworTVVYX0NGRygiVDIwXzE2MTBfTVBVSU81IiwJIDcsICAgMTIsICAgIDAsCSAgMSwgIDEyLCAgIDAsCSAgMywJIDAsICAxKQorTVVYX0NGRygiVzExXzE2MTBfTVBVSU82IiwJMTAsICAgMTUsICAgIDIsCSAgMywgICA4LCAgIDAsCSAgMywJIDAsICAxKQorTVVYX0NGRygiVjEwXzE2MTBfTVBVSU83IiwJIEEsICAgMjQsICAgIDIsCSAgMiwgIDE0LCAgIDAsCSAgMiwJIDAsICAxKQorTVVYX0NGRygiVzExXzE2MTBfTVBVSU85IiwJMTAsICAgMTUsICAgIDEsCSAgMywgICA4LCAgIDAsCSAgMywJIDAsICAxKQorTVVYX0NGRygiVjEwXzE2MTBfTVBVSU8xMCIsCSBBLCAgIDI0LCAgICAxLAkgIDIsICAxNCwgICAwLAkgIDIsCSAwLCAgMSkKK01VWF9DRkcoIlcxMF8xNjEwX01QVUlPMTEiLAkgQSwgICAxOCwgICAgMiwJICAyLCAgMTEsICAgMCwJICAyLAkgMCwgIDEpCitNVVhfQ0ZHKCJFMjBfMTYxMF9NUFVJTzEzIiwJIDMsICAgMjEsICAgIDEsCSAgMCwgICA3LCAgIDAsCSAgMCwJIDAsICAxKQorTVVYX0NGRygiVTIwXzE2MTBfTVBVSU8xNCIsCSA5LCAgICA2LCAgICA2LAkgIDAsICAzMCwgICAwLAkgIDAsCSAwLCAgMSkKK01VWF9DRkcoIkUxOV8xNjEwX01QVUlPMTUiLAkgMywgICAxOCwgICAgMSwJICAwLCAgIDYsICAgMCwJICAwLAkgMCwgIDEpCisKKy8qIE1DQlNQMiAqLworTVVYX0NGRygiTUNCU1AyX0NMS1IiLAkJIEMsICAgIDYsICAgIDAsCSAgMiwgIDI3LCAgIDEsCSBOQSwJIDAsICAxKQorTVVYX0NGRygiTUNCU1AyX0NMS1giLAkJIEMsICAgIDksICAgIDAsCSAgMiwgIDI5LCAgIDEsCSBOQSwJIDAsICAxKQorTVVYX0NGRygiTUNCU1AyX0RSIiwJCSBDLCAgICAwLCAgICAwLAkgIDIsICAyNiwgICAxLAkgTkEsCSAwLCAgMSkKK01VWF9DRkcoIk1DQlNQMl9EWCIsCQkgQywgICAxNSwgICAgMCwJICAyLCAgMzEsICAgMSwJIE5BLAkgMCwgIDEpCitNVVhfQ0ZHKCJNQ0JTUDJfRlNSIiwJCSBDLCAgIDEyLCAgICAwLAkgIDIsICAzMCwgICAxLAkgTkEsCSAwLCAgMSkKK01VWF9DRkcoIk1DQlNQMl9GU1giLAkJIEMsICAgIDMsICAgIDAsCSAgMiwgIDI3LCAgIDEsCSBOQSwJIDAsICAxKQorCisvKiBNQ0JTUDMgTk9URTogTW9kZSBtdXN0IDEgZm9yIGNsb2NrICovCitNVVhfQ0ZHKCJNQ0JTUDNfQ0xLWCIsCQkgOSwgICAgMywgICAgMSwJICAxLCAgMjksICAgMCwJIE5BLAkgMCwgIDEpCisKKy8qIE1pc2MgYmFsbG91dHMgKi8KK01VWF9DRkcoIkJBTExPVVRfVjhfQVJNSU8zIiwJIEIsICAgMTgsICAgIDAsCSAgMiwgIDI1LCAgIDEsCSBOQSwJIDAsICAxKQorTVVYX0NGRygiTjIwX0hEUSIsCSAgICAgICA2LCAgIDE4LCAgICAxLCAgIDEsICAgNCwgICAwLCAgICAxLCAgICAgNCwgIDApCisKKy8qIE9NQVAtMTYxMCBNTUMyICovCitNVVhfQ0ZHKCJXOF8xNjEwX01NQzJfREFUMCIsCSBCLCAgIDIxLCAgICA2LAkgIDIsICAyMywgICAxLAkgIDIsCSAxLCAgMSkKK01VWF9DRkcoIlY4XzE2MTBfTU1DMl9EQVQxIiwJIEIsICAgMjcsICAgIDYsCSAgMiwgIDI1LCAgIDEsCSAgMiwJIDEsICAxKQorTVVYX0NGRygiVzE1XzE2MTBfTU1DMl9EQVQyIiwJIDksICAgMTIsICAgIDYsCSAgMiwgICA1LCAgIDEsCSAgMiwJIDEsICAxKQorTVVYX0NGRygiUjEwXzE2MTBfTU1DMl9EQVQzIiwJIEIsICAgMTgsICAgIDYsCSAgMiwgIDIyLCAgIDEsCSAgMiwJIDEsICAxKQorTVVYX0NGRygiWTEwXzE2MTBfTU1DMl9DTEsiLAkgQiwgICAgMywgICAgNiwJICAyLCAgMTcsICAgMCwJICAyLAkgMCwgIDEpCitNVVhfQ0ZHKCJZOF8xNjEwX01NQzJfQ01EIiwJIEIsICAgMjQsICAgIDYsCSAgMiwgIDI0LCAgIDEsCSAgMiwJIDEsICAxKQorTVVYX0NGRygiVjlfMTYxMF9NTUMyX0NNRERJUiIsCSBCLCAgIDEyLCAgICA2LAkgIDIsICAyMCwgICAwLAkgIDIsCSAxLCAgMSkKK01VWF9DRkcoIlY1XzE2MTBfTU1DMl9EQVRESVIwIiwJIEIsICAgMTUsICAgIDYsCSAgMiwgIDIxLCAgIDAsCSAgMiwJIDEsICAxKQorTVVYX0NGRygiVzE5XzE2MTBfTU1DMl9EQVRESVIxIiwgOCwgICAxNSwgICAgNiwJICAxLCAgMjMsICAgMCwJICAxLAkgMSwgIDEpCitNVVhfQ0ZHKCJSMThfMTYxMF9NTUMyX0NMS0lOIiwJIDcsICAgIDksICAgIDYsCSAgMSwgIDExLCAgIDAsCSAgMSwJMTEsICAxKQorCisvKiBPTUFQLTE2MTAgRXh0ZXJuYWwgVHJhY2UgSW50ZXJmYWNlICovCitNVVhfQ0ZHKCJNMTlfMTYxMF9FVE1fUFNUQVQwIiwJIDUsICAgMjcsICAgIDEsCSAgMCwgIDI5LCAgIDAsCSAgMCwJIDAsICAxKQorTVVYX0NGRygiTDE1XzE2MTBfRVRNX1BTVEFUMSIsCSA1LCAgIDI0LCAgICAxLAkgIDAsICAyOCwgICAwLAkgIDAsCSAwLCAgMSkKK01VWF9DRkcoIkwxOF8xNjEwX0VUTV9QU1RBVDIiLAkgNSwgICAyMSwgICAgMSwJICAwLCAgMjcsICAgMCwJICAwLAkgMCwgIDEpCitNVVhfQ0ZHKCJMMTlfMTYxMF9FVE1fRDAiLAkgNSwgICAxOCwgICAgMSwJICAwLCAgMjYsICAgMCwJICAwLAkgMCwgIDEpCitNVVhfQ0ZHKCJKMTlfMTYxMF9FVE1fRDYiLAkgNSwgICAgMCwgICAgMSwJICAwLCAgMjAsICAgMCwJICAwLAkgMCwgIDEpCitNVVhfQ0ZHKCJKMThfMTYxMF9FVE1fRDciLAkgNSwgICAyNywgICAgMSwJICAwLCAgMTksICAgMCwJICAwLAkgMCwgIDEpCisKKy8qIE9NQVAxNlhYIEdQSU8gKi8KK01VWF9DRkcoIlAyMF8xNjEwX0dQSU80IiwJIDYsICAgMjcsICAgIDAsCSAgMSwgICA3LCAgIDAsCSAgMSwJIDEsICAxKQorTVVYX0NGRygiVjlfMTYxMF9HUElPNyIsCSBCLCAgIDEyLCAgICAxLAkgIDIsICAyMCwgICAwLAkgIDIsCSAxLCAgMSkKK01VWF9DRkcoIlc4XzE2MTBfR1BJTzkiLAkgQiwgICAyMSwgICAgMCwJICAyLCAgMjMsICAgMCwJICAyLAkgMSwgIDEpCitNVVhfQ0ZHKCJOMjBfMTYxMF9HUElPMTEiLCAgICAgICA2LCAgIDE4LCAgICAwLCAgIDEsICAgNCwgICAwLCAgICAxLCAgICAgMSwgIDEpCitNVVhfQ0ZHKCJOMTlfMTYxMF9HUElPMTMiLAkgNiwgICAxMiwgICAgMCwJICAxLCAgIDIsICAgMCwJICAxLAkgMSwgIDEpCitNVVhfQ0ZHKCJQMTBfMTYxMF9HUElPMjIiLAkgQywgICAgMCwgICAgNywJICAyLCAgMjYsICAgMCwJICAyLAkgMSwgIDEpCitNVVhfQ0ZHKCJWNV8xNjEwX0dQSU8yNCIsCSBCLCAgIDE1LCAgICA3LAkgIDIsICAyMSwgICAwLAkgIDIsCSAxLCAgMSkKK01VWF9DRkcoIkFBMjBfMTYxMF9HUElPXzQxIiwJIDksICAgIDksICAgIDcsCSAgMSwgIDMxLCAgIDAsCSAgMSwJIDEsICAxKQorTVVYX0NGRygiVzE5XzE2MTBfR1BJTzQ4IiwJIDgsICAgMTUsICAgIDcsICAgMSwgIDIzLCAgIDEsICAgIDEsICAgICAwLCAgMSkKK01VWF9DRkcoIk03XzE2MTBfR1BJTzYyIiwJMTAsICAgIDAsICAgIDAsICAgNCwgIDI0LCAgIDAsICAgIDQsICAgICAwLCAgMSkKK01VWF9DRkcoIlYxNF8xNlhYX0dQSU8zNyIsCSA5LCAgIDE4LCAgICA3LAkgIDIsICAgMiwgICAwLAkgIDIsCSAyLCAgMCkKK01VWF9DRkcoIlI5XzE2WFhfR1BJTzE4IiwJIEMsICAgMTgsICAgIDcsICAgMywgICAwLCAgIDAsICAgIDMsICAgICAwLCAgMCkKK01VWF9DRkcoIkwxNF8xNlhYX0dQSU80OSIsCSA2LCAgICAzLCAgICA3LCAgIDAsICAzMSwgICAwLCAgICAwLCAgICAzMSwgIDApCisKKy8qIE9NQVAtMTYxMCB1V2lyZSAqLworTVVYX0NGRygiVjE5XzE2MTBfVVdJUkVfU0NMSyIsCSA4LCAgICA2LCAgICAwLAkgIDEsICAyMCwgICAwLAkgIDEsCSAxLCAgMSkKK01VWF9DRkcoIlUxOF8xNjEwX1VXSVJFX1NESSIsCSA4LCAgICAwLCAgICAwLAkgIDEsICAxOCwgICAwLAkgIDEsCSAxLCAgMSkKK01VWF9DRkcoIlcyMV8xNjEwX1VXSVJFX1NETyIsCSA4LCAgICAzLCAgICAwLAkgIDEsICAxOSwgICAwLAkgIDEsCSAxLCAgMSkKK01VWF9DRkcoIk4xNF8xNjEwX1VXSVJFX0NTMCIsCSA4LCAgICA5LCAgICAxLAkgIDEsICAyMSwgICAwLAkgIDEsCSAxLCAgMSkKK01VWF9DRkcoIlAxNV8xNjEwX1VXSVJFX0NTMyIsCSA4LCAgIDEyLCAgICAxLAkgIDEsICAyMiwgICAwLAkgIDEsCSAxLCAgMSkKK01VWF9DRkcoIk4xNV8xNjEwX1VXSVJFX0NTMSIsCSA3LCAgIDE4LCAgICAyLAkgIDEsICAxNCwgICAwLAkgTkEsCSAwLCAgMSkKKworLyogT01BUC0xNjEwIEZsYXNoICovCitNVVhfQ0ZHKCJMM18xNjEwX0ZMQVNIX0NTMkJfT0UiLDEwLCAgICA2LCAgICAxLAkgTkEsICAgMCwgICAwLAkgTkEsCSAwLCAgMSkKK01VWF9DRkcoIk04XzE2MTBfRkxBU0hfQ1MyQl9XRSIsMTAsICAgIDMsICAgIDEsCSBOQSwgICAwLCAgIDAsCSBOQSwJIDAsICAxKQorCisvKiBGaXJzdCBNTUMgaW50ZXJmYWNlLCBzYW1lIG9uIDE1MTAsIDE2MTAgYW5kIDE3MTAgKi8KK01VWF9DRkcoIk1NQ19DTUQiLAkJIEEsICAgMjcsICAgIDAsCSAgMiwgIDE1LCAgIDEsCSAgMiwJIDEsICAxKQorTVVYX0NGRygiTU1DX0RBVDEiLAkJIEEsICAgMjQsICAgIDAsCSAgMiwgIDE0LCAgIDEsCSAgMiwJIDEsICAxKQorTVVYX0NGRygiTU1DX0RBVDIiLAkJIEEsICAgMTgsICAgIDAsCSAgMiwgIDEyLCAgIDEsCSAgMiwJIDEsICAxKQorTVVYX0NGRygiTU1DX0RBVDAiLAkJIEIsICAgIDAsICAgIDAsCSAgMiwgIDE2LCAgIDEsCSAgMiwJIDEsICAxKQorTVVYX0NGRygiTU1DX0NMSyIsCQkgQSwgICAyMSwgICAgMCwJIE5BLCAgIDAsICAgMCwJIE5BLAkgMCwgIDEpCitNVVhfQ0ZHKCJNTUNfREFUMyIsCQkxMCwgICAxNSwgICAgMCwJICAzLCAgIDgsICAgMSwJICAzLAkgMSwgIDEpCitNVVhfQ0ZHKCJNMTVfMTcxMF9NTUNfQ0xLSSIsCSA2LCAgIDIxLCAgICAyLCAgIDAsICAgMCwgICAwLCAgIE5BLCAgICAgMCwgIDEpCitNVVhfQ0ZHKCJQMTlfMTcxMF9NTUNfQ01ERElSIiwJIDYsICAgMjQsICAgIDYsICAgMCwgICAwLCAgIDAsICAgTkEsICAgICAwLCAgMSkKK01VWF9DRkcoIlAyMF8xNzEwX01NQ19EQVRESVIwIiwJIDYsICAgMjcsICAgIDUsICAgMCwgICAwLCAgIDAsICAgTkEsICAgICAwLCAgMSkKKworLyogT01BUC0xNjEwIFVTQjAgYWx0ZXJuYXRlIGNvbmZpZ3VyYXRpb24gKi8KK01VWF9DRkcoIlc5X1VTQjBfVFhFTiIsCQkgQiwgICA5LCAgICAgNSwJICAyLCAgMTksICAgMCwJICAyLAkgMCwgIDEpCitNVVhfQ0ZHKCJBQTlfVVNCMF9WUCIsCQkgQiwgICA2LCAgICAgNSwJICAyLCAgMTgsICAgMCwJICAyLAkgMCwgIDEpCitNVVhfQ0ZHKCJZNV9VU0IwX1JDViIsCQkgQywgIDIxLCAgICAgNSwJICAzLCAgIDEsICAgMCwJICAxLAkgMCwgIDEpCitNVVhfQ0ZHKCJSOV9VU0IwX1ZNIiwJCSBDLCAgMTgsICAgICA1LAkgIDMsICAgMCwgICAwLAkgIDMsCSAwLCAgMSkKK01VWF9DRkcoIlY2X1VTQjBfVFhEIiwJCSBDLCAgMjcsICAgICA1LAkgIDMsICAgMywgICAwLAkgIDMsCSAwLCAgMSkKK01VWF9DRkcoIlc1X1VTQjBfU0UwIiwJCSBDLCAgMjQsICAgICA1LAkgIDMsICAgMiwgICAwLAkgIDMsCSAwLCAgMSkKK01VWF9DRkcoIlY5X1VTQjBfU1BFRUQiLAkgQiwgIDEyLCAgICAgNSwJICAyLCAgMjAsICAgMCwJICAyLAkgMCwgIDEpCitNVVhfQ0ZHKCJZMTBfVVNCMF9TVVNQIiwJIEIsICAgMywgICAgIDUsCSAgMiwgIDE3LCAgIDAsCSAgMiwJIDAsICAxKQorCisvKiBVU0IyIGludGVyZmFjZSAqLworTVVYX0NGRygiVzlfVVNCMl9UWEVOIiwJCSBCLCAgIDksICAgICAxLAkgTkEsICAgMCwgICAwLAkgTkEsCSAwLCAgMSkKK01VWF9DRkcoIkFBOV9VU0IyX1ZQIiwJCSBCLCAgIDYsICAgICAxLAkgTkEsICAgMCwgICAwLAkgTkEsCSAwLCAgMSkKK01VWF9DRkcoIlk1X1VTQjJfUkNWIiwJCSBDLCAgMjEsICAgICAxLAkgTkEsICAgMCwgICAwLAkgTkEsCSAwLCAgMSkKK01VWF9DRkcoIlI5X1VTQjJfVk0iLAkJIEMsICAxOCwgICAgIDEsCSBOQSwgICAwLCAgIDAsCSBOQSwJIDAsICAxKQorTVVYX0NGRygiVjZfVVNCMl9UWEQiLAkJIEMsICAyNywgICAgIDIsCSBOQSwgICAwLCAgIDAsCSBOQSwJIDAsICAxKQorTVVYX0NGRygiVzVfVVNCMl9TRTAiLAkJIEMsICAyNCwgICAgIDIsCSBOQSwgICAwLCAgIDAsCSBOQSwJIDAsICAxKQorCisvKiAxNlhYIFVBUlQgKi8KK01VWF9DRkcoIlIxM18xNjEwX1VBUlQxX1RYIiwJIEEsICAxMiwgICAgIDYsCSAgMiwgIDEwLCAgIDAsCSAgMiwJMTAsICAxKQorTVVYX0NGRygiVjE0XzE2WFhfVUFSVDFfUlgiLAkgOSwgIDE4LCAgICAgMCwJICAyLCAgIDIsICAgMCwJICAyLAkgMiwgIDEpCitNVVhfQ0ZHKCJSMTRfMTYxMF9VQVJUMV9DVFMiLAkgOSwgIDE1LCAgICAgMCwJICAyLCAgIDEsICAgMCwJICAyLAkgMSwgIDEpCitNVVhfQ0ZHKCJBQTE1XzE2MTBfVUFSVDFfUlRTIiwJIDksICAxMiwgICAgIDEsCSAgMiwgICAwLCAgIDAsCSAgMiwJIDAsICAxKQorTVVYX0NGRygiUjlfMTZYWF9VQVJUMl9SWCIsCSBDLCAgMTgsICAgICAwLCAgIDMsICAgMCwgICAwLCAgICAzLCAgICAgMCwgIDEpCitNVVhfQ0ZHKCJMMTRfMTZYWF9VQVJUM19SWCIsCSA2LCAgIDMsICAgICAwLCAgIDAsICAzMSwgICAwLCAgICAwLCAgICAzMSwgIDEpCisKKy8qIEkyQyBpbnRlcmZhY2UgKi8KK01VWF9DRkcoIkkyQ19TQ0wiLAkJIDcsICAyNCwgICAgIDAsCSBOQSwgICAwLCAgIDAsCSBOQSwJIDAsICAwKQorTVVYX0NGRygiSTJDX1NEQSIsCQkgNywgIDI3LCAgICAgMCwJIE5BLCAgIDAsICAgMCwJIE5BLAkgMCwgIDApCisKKy8qIEtleXBhZCAqLworTVVYX0NGRygiRjE4XzE2MTBfS0JDMCIsCSAzLCAgMTUsICAgICAwLAkgIDAsICAgNSwgICAxLAkgIDAsCSAwLCAgMCkKK01VWF9DRkcoIkQyMF8xNjEwX0tCQzEiLAkgMywgIDEyLCAgICAgMCwJICAwLCAgIDQsICAgMSwJICAwLAkgMCwgIDApCitNVVhfQ0ZHKCJEMTlfMTYxMF9LQkMyIiwJIDMsICAgOSwgICAgIDAsCSAgMCwgICAzLCAgIDEsCSAgMCwJIDAsICAwKQorTVVYX0NGRygiRTE4XzE2MTBfS0JDMyIsCSAzLCAgIDYsICAgICAwLAkgIDAsICAgMiwgICAxLAkgIDAsCSAwLCAgMCkKK01VWF9DRkcoIkMyMV8xNjEwX0tCQzQiLAkgMywgICAzLCAgICAgMCwJICAwLCAgIDEsICAgMSwJICAwLAkgMCwgIDApCitNVVhfQ0ZHKCJHMThfMTYxMF9LQlIwIiwJIDQsICAgMCwgICAgIDAsCSAgMCwgICAxMCwgIDEsCSAgMCwJIDEsICAwKQorTVVYX0NGRygiRjE5XzE2MTBfS0JSMSIsCSAzLCAgIDI3LCAgICAwLAkgIDAsICAgOSwgICAxLAkgIDAsCSAxLCAgMCkKK01VWF9DRkcoIkgxNF8xNjEwX0tCUjIiLAkgMywgICAyNCwgICAgMCwJICAwLCAgIDgsICAgMSwJICAwLAkgMSwgIDApCitNVVhfQ0ZHKCJFMjBfMTYxMF9LQlIzIiwJIDMsICAgMjEsICAgIDAsCSAgMCwgICA3LCAgIDEsCSAgMCwJIDEsICAwKQorTVVYX0NGRygiRTE5XzE2MTBfS0JSNCIsCSAzLCAgIDE4LCAgICAwLAkgIDAsICAgNiwgICAxLAkgIDAsCSAxLCAgMCkKK01VWF9DRkcoIk4xOV8xNjEwX0tCUjUiLAkgNiwgIDEyLCAgICAgMSwJICAxLCAgIDIsICAgMSwJICAxLAkgMSwgIDApCisKKy8qIFBvd2VyIG1hbmFnZW1lbnQgKi8KK01VWF9DRkcoIlQyMF8xNjEwX0xPV19QV1IiLAkgNywgICAxMiwgICAgMSwJICBOQSwgICAwLCAgIDAsICAgTkEsCSAwLCAgMCkKKworLyogTUNMSyBTZXR0aW5ncyAqLworTVVYX0NGRygiVjVfMTcxMF9NQ0xLX09OIiwJIEIsICAgMTUsICAgIDAsCSAgTkEsICAgMCwgICAwLCAgIE5BLAkgMCwgIDApCitNVVhfQ0ZHKCJWNV8xNzEwX01DTEtfT0ZGIiwJIEIsICAgMTUsICAgIDYsCSAgTkEsICAgMCwgICAwLCAgIE5BLAkgMCwgIDApCitNVVhfQ0ZHKCJSMTBfMTYxMF9NQ0xLX09OIiwJIEIsICAgMTgsICAgIDAsCSAgTkEsICAyMiwgICAwLAkgIE5BLAkgMSwgIDApCitNVVhfQ0ZHKCJSMTBfMTYxMF9NQ0xLX09GRiIsCSBCLCAgIDE4LCAgICA2LAkgIDIsICAgMjIsICAgMSwJICAyLAkgMSwgIDEpCisKKy8qIENvbXBhY3RGbGFzaCBjb250cm9sbGVyLCBjb25mbGljdHMgd2l0aCBNTUMxICovCitNVVhfQ0ZHKCJQMTFfMTYxMF9DRl9DRDIiLAkgQSwgICAyNywgICAgMywJICAyLCAgIDE1LCAgIDEsCSAgMiwJIDEsICAxKQorTVVYX0NGRygiUjExXzE2MTBfQ0ZfSU9JUzE2IiwJIEIsICAgIDAsICAgIDMsCSAgMiwgICAxNiwgICAxLAkgIDIsCSAxLCAgMSkKK01VWF9DRkcoIlYxMF8xNjEwX0NGX0lSRVEiLAkgQSwgICAyNCwgICAgMywJICAyLCAgIDE0LCAgIDAsCSAgMiwJIDAsICAxKQorTVVYX0NGRygiVzEwXzE2MTBfQ0ZfUkVTRVQiLAkgQSwgICAxOCwgICAgMywJICAyLCAgIDEyLCAgIDEsCSAgMiwJIDEsICAxKQorTVVYX0NGRygiVzExXzE2MTBfQ0ZfQ0QxIiwJMTAsICAgMTUsICAgIDMsCSAgMywgICAgOCwgICAxLAkgIDMsCSAxLCAgMSkKK307CisjZW5kaWYJLyogQ09ORklHX0FSQ0hfT01BUDE1WFggfHwgQ09ORklHX0FSQ0hfT01BUDE2WFggKi8KKworaW50IF9faW5pdCBvbWFwMV9tdXhfaW5pdCh2b2lkKQoreworCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDczMAorCW9tYXBfbXV4X3JlZ2lzdGVyKG9tYXA3MzBfcGlucywgQVJSQVlfU0laRShvbWFwNzMwX3BpbnMpKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTVYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTZYWCkKKwlvbWFwX211eF9yZWdpc3RlcihvbWFwMXh4eF9waW5zLCBBUlJBWV9TSVpFKG9tYXAxeHh4X3BpbnMpKTsKKyNlbmRpZgorCisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9zZXJpYWwuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvc2VyaWFsLmMKaW5kZXggNDBjNGY3YzQuLjY4MTBjZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvc2VyaWFsLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9zZXJpYWwuYwpAQCAtMTA5LDkgKzEwOSwxMCBAQAogICogQnkgZGVmYXVsdCBVQVJUMiBkb2VzIG5vdCB3b3JrIG9uIElubm92YXRvci0xNTEwIGlmIHlvdSBoYXZlCiAgKiBVU0IgT0hDSSBlbmFibGVkLiBUbyB1c2UgVUFSVDIsIHlvdSBtdXN0IGRpc2FibGUgVVNCMiBmaXJzdC4KICAqLwotdm9pZCBfX2luaXQgb21hcF9zZXJpYWxfaW5pdChpbnQgcG9ydHNbT01BUF9NQVhfTlJfUE9SVFNdKQordm9pZCBfX2luaXQgb21hcF9zZXJpYWxfaW5pdCh2b2lkKQogewogCWludCBpOworCWNvbnN0IHN0cnVjdCBvbWFwX3VhcnRfY29uZmlnICppbmZvOwogCiAJaWYgKGNwdV9pc19vbWFwNzMwKCkpIHsKIAkJc2VyaWFsX3BsYXRmb3JtX2RhdGFbMF0ucmVnc2hpZnQgPSAwOwpAQCAtMTI2LDEwICsxMjcsMTQgQEAKIAkJc2VyaWFsX3BsYXRmb3JtX2RhdGFbMl0udWFydGNsayA9IE9NQVAxNTEwX0JBU0VfQkFVRCAqIDE2OwogCX0KIAorCWluZm8gPSBvbWFwX2dldF9jb25maWcoT01BUF9UQUdfVUFSVCwgc3RydWN0IG9tYXBfdWFydF9jb25maWcpOworCWlmIChpbmZvID09IE5VTEwpCisJCXJldHVybjsKKwogCWZvciAoaSA9IDA7IGkgPCBPTUFQX01BWF9OUl9QT1JUUzsgaSsrKSB7CiAJCXVuc2lnbmVkIGNoYXIgcmVnOwogCi0JCWlmIChwb3J0c1tpXSA9PSAwKSB7CisJCWlmICghKCgxIDw8IGkpICYgaW5mby0+ZW5hYmxlZF91YXJ0cykpIHsKIAkJCXNlcmlhbF9wbGF0Zm9ybV9kYXRhW2ldLm1lbWJhc2UgPSBOVUxMOwogCQkJc2VyaWFsX3BsYXRmb3JtX2RhdGFbaV0ubWFwYmFzZSA9IDA7CiAJCQljb250aW51ZTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvdGltZS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS90aW1lLmMKaW5kZXggMTkxYTliMS4uY2RiZjRkNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS90aW1lLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS90aW1lLmMKQEAgLTIyNiw4ICsyMjYsOCBAQAogCiAjaWZkZWYgQ09ORklHX09NQVBfMzJLX1RJTUVSCiAKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTUxMAotI2Vycm9yIE9NQVAgMzJLSHogdGltZXIgZG9lcyBub3QgY3VycmVudGx5IHdvcmsgb24gMTUxMCEKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAorI2Vycm9yIE9NQVAgMzJLSHogdGltZXIgZG9lcyBub3QgY3VycmVudGx5IHdvcmsgb24gMTVYWCEKICNlbmRpZgogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3ODg4MDkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL0tjb25maWcKQEAgLTAsMCArMSwyMiBAQAorY29tbWVudCAiT01BUCBDb3JlIFR5cGUiCisJZGVwZW5kcyBvbiBBUkNIX09NQVAyCisKK2NvbmZpZyBBUkNIX09NQVAyNFhYCisJYm9vbCAiT01BUDI0eHggQmFzZWQgU3lzdGVtIgorCWRlcGVuZHMgb24gQVJDSF9PTUFQMgorCitjb25maWcgQVJDSF9PTUFQMjQyMAorCWJvb2wgIk9NQVAyNDIwIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBBUkNIX09NQVAyNFhYCisKK2NvbW1lbnQgIk9NQVAgQm9hcmQgVHlwZSIKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDIKKworY29uZmlnIE1BQ0hfT01BUF9HRU5FUklDCisJYm9vbCAiR2VuZXJpYyBPTUFQIGJvYXJkIgorCWRlcGVuZHMgb24gQVJDSF9PTUFQMiAmJiBBUkNIX09NQVAyNFhYCisKK2NvbmZpZyBNQUNIX09NQVBfSDQKKwlib29sICJPTUFQIDI0MjAgSDQgYm9hcmQiCisJZGVwZW5kcyBvbiBBUkNIX09NQVAyICYmIEFSQ0hfT01BUDI0WFgKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtb21hcDIvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDIwNDExNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvTWFrZWZpbGUKQEAgLTAsMCArMSwxMyBAQAorIworIyBNYWtlZmlsZSBmb3IgdGhlIGxpbnV4IGtlcm5lbC4KKyMKKworIyBDb21tb24gc3VwcG9ydAorb2JqLXkgOj0gaXJxLm8gaWQubyBpby5vIHNyYW0tZm4ubyBjbG9jay5vIG11eC5vIGRldmljZXMubyBzZXJpYWwubworCitvYmotJChDT05GSUdfT01BUF9NUFVfVElNRVIpCQkrPSB0aW1lci1ncC5vCisKKyMgU3BlY2lmaWMgYm9hcmQgc3VwcG9ydAorb2JqLSQoQ09ORklHX01BQ0hfT01BUF9HRU5FUklDKQkJKz0gYm9hcmQtZ2VuZXJpYy5vCitvYmotJChDT05GSUdfTUFDSF9PTUFQX0g0KQkJKz0gYm9hcmQtaDQubworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL01ha2VmaWxlLmJvb3QgYi9hcmNoL2FybS9tYWNoLW9tYXAyL01ha2VmaWxlLmJvb3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY1YWZmNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvTWFrZWZpbGUuYm9vdApAQCAtMCwwICsxLDMgQEAKKyAgenJlbGFkZHIteQkJOj0gMHg4MDAwODAwMAorcGFyYW1zX3BoeXMteQkJOj0gMHg4MDAwMDEwMAoraW5pdHJkX3BoeXMteQkJOj0gMHg4MDgwMDAwMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1nZW5lcmljLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWdlbmVyaWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjAyZTdhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1nZW5lcmljLmMKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcC9vbWFwMi9ib2FyZC1nZW5lcmljLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgTm9raWEgQ29ycG9yYXRpb24KKyAqIEF1dGhvcjogUGF1bCBNdW5kdCA8cGF1bC5tdW5kdEBub2tpYS5jb20+CisgKgorICogTW9kaWZpZWQgZnJvbSBtYWNoLW9tYXAvb21hcDEvYm9hcmQtZ2VuZXJpYy5jCisgKgorICogQ29kZSBmb3IgZ2VuZXJpYyBPTUFQMiBib2FyZC4gU2hvdWxkIHdvcmsgb24gbWFueSBPTUFQMiBzeXN0ZW1zIHdoZXJlCisgKiB0aGUgYm9vdGxvYWRlciBwYXNzZXMgdGhlIGJvYXJkLXNwZWNpZmljIGRhdGEgdG8gdGhlIGtlcm5lbC4KKyAqIERvIG5vdCBwdXQgYW55IGJvYXJkIHNwZWNpZmljIGNvZGUgdG8gdGhpcyBmaWxlOyBjcmVhdGUgYSBuZXcgbWFjaGluZQorICogdHlwZSBpZiB5b3UgbmVlZCBjdXN0b20gbG93LWxldmVsIGluaXRpYWxpemF0aW9ucy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9tdXguaD4KKyNpbmNsdWRlIDxhc20vYXJjaC91c2IuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ib2FyZC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2NvbW1vbi5oPgorCitzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9nZW5lcmljX2luaXRfaXJxKHZvaWQpCit7CisJb21hcF9pbml0X2lycSgpOworfQorCitzdGF0aWMgc3RydWN0IG9tYXBfdWFydF9jb25maWcgZ2VuZXJpY191YXJ0X2NvbmZpZyBfX2luaXRkYXRhID0geworCS5lbmFibGVkX3VhcnRzID0gKCgxIDw8IDApIHwgKDEgPDwgMSkgfCAoMSA8PCAyKSksCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfbW1jX2NvbmZpZyBnZW5lcmljX21tY19jb25maWcgX19pbml0ZGF0YSA9IHsKKwkubW1jIFswXSA9IHsKKwkJLmVuYWJsZWQgCT0gMCwKKwkJLndpcmU0CQk9IDAsCisJCS53cF9waW4JCT0gLTEsCisJCS5wb3dlcl9waW4JPSAtMSwKKwkJLnN3aXRjaF9waW4JPSAtMSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX2NvbmZpZ19rZXJuZWwgZ2VuZXJpY19jb25maWdbXSA9IHsKKwl7IE9NQVBfVEFHX1VBUlQsCSZnZW5lcmljX3VhcnRfY29uZmlnIH0sCisJeyBPTUFQX1RBR19NTUMsCQkmZ2VuZXJpY19tbWNfY29uZmlnIH0sCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9nZW5lcmljX2luaXQodm9pZCkKK3sKKwlvbWFwX2JvYXJkX2NvbmZpZyA9IGdlbmVyaWNfY29uZmlnOworCW9tYXBfYm9hcmRfY29uZmlnX3NpemUgPSBBUlJBWV9TSVpFKGdlbmVyaWNfY29uZmlnKTsKKwlvbWFwX3NlcmlhbF9pbml0KCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBvbWFwX2dlbmVyaWNfbWFwX2lvKHZvaWQpCit7CisJb21hcF9tYXBfY29tbW9uX2lvKCk7Cit9CisKK01BQ0hJTkVfU1RBUlQoT01BUF9HRU5FUklDLCAiR2VuZXJpYyBPTUFQMjR4eCIpCisJLyogTWFpbnRhaW5lcjogUGF1bCBNdW5kdCA8cGF1bC5tdW5kdEBub2tpYS5jb20+ICovCisJLnBoeXNfcmFtCT0gMHg4MDAwMDAwMCwKKwkucGh5c19pbwk9IDB4NDgwMDAwMDAsCisJLmlvX3BnX29mZnN0CT0gKCgweGQ4MDAwMDAwKSA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zCT0gMHg4MDAwMDEwMCwKKwkubWFwX2lvCQk9IG9tYXBfZ2VuZXJpY19tYXBfaW8sCisJLmluaXRfaXJxCT0gb21hcF9nZW5lcmljX2luaXRfaXJxLAorCS5pbml0X21hY2hpbmUJPSBvbWFwX2dlbmVyaWNfaW5pdCwKKwkudGltZXIJCT0gJm9tYXBfdGltZXIsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1oNC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1oNC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyNTU0NDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWg0LmMKQEAgLTAsMCArMSwxOTcgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAvb21hcDIvYm9hcmQtaDQuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBOb2tpYSBDb3Jwb3JhdGlvbgorICogQXV0aG9yOiBQYXVsIE11bmR0IDxwYXVsLm11bmR0QG5va2lhLmNvbT4KKyAqCisgKiBNb2RpZmllZCBmcm9tIG1hY2gtb21hcC9vbWFwMS9ib2FyZC1nZW5lcmljLmMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2ZsYXNoLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9ncGlvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvbXV4Lmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvdXNiLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvYm9hcmQuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9jb21tb24uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9wcmNtLmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vZGVsYXkuaD4KKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGg0X3BhcnRpdGlvbnNbXSA9IHsKKwkvKiBib290bG9hZGVyIChVLUJvb3QsIGV0YykgaW4gZmlyc3Qgc2VjdG9yICovCisJeworCSAgICAgIC5uYW1lCQk9ICJib290bG9hZGVyIiwKKwkgICAgICAub2Zmc2V0CQk9IDAsCisJICAgICAgLnNpemUJCT0gU1pfMTI4SywKKwkgICAgICAubWFza19mbGFncwk9IE1URF9XUklURUFCTEUsIC8qIGZvcmNlIHJlYWQtb25seSAqLworCX0sCisJLyogYm9vdGxvYWRlciBwYXJhbXMgaW4gdGhlIG5leHQgc2VjdG9yICovCisJeworCSAgICAgIC5uYW1lCQk9ICJwYXJhbXMiLAorCSAgICAgIC5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAorCSAgICAgIC5zaXplCQk9IFNaXzEyOEssCisJICAgICAgLm1hc2tfZmxhZ3MJPSAwLAorCX0sCisJLyoga2VybmVsICovCisJeworCSAgICAgIC5uYW1lCQk9ICJrZXJuZWwiLAorCSAgICAgIC5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAorCSAgICAgIC5zaXplCQk9IFNaXzJNLAorCSAgICAgIC5tYXNrX2ZsYWdzCT0gMAorCX0sCisJLyogZmlsZSBzeXN0ZW0gKi8KKwl7CisJICAgICAgLm5hbWUJCT0gImZpbGVzeXN0ZW0iLAorCSAgICAgIC5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAorCSAgICAgIC5zaXplCQk9IE1URFBBUlRfU0laX0ZVTEwsCisJICAgICAgLm1hc2tfZmxhZ3MJPSAwCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhIGg0X2ZsYXNoX2RhdGEgPSB7CisJLm1hcF9uYW1lCT0gImNmaV9wcm9iZSIsCisJLndpZHRoCQk9IDIsCisJLnBhcnRzCQk9IGg0X3BhcnRpdGlvbnMsCisJLm5yX3BhcnRzCT0gQVJSQVlfU0laRShoNF9wYXJ0aXRpb25zKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaDRfZmxhc2hfcmVzb3VyY2UgPSB7CisJLnN0YXJ0CQk9IEg0X0NTMF9CQVNFLAorCS5lbmQJCT0gSDRfQ1MwX0JBU0UgKyBTWl82NE0gLSAxLAorCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGg0X2ZsYXNoX2RldmljZSA9IHsKKwkubmFtZQkJPSAib21hcGZsYXNoIiwKKwkuaWQJCT0gMCwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmaDRfZmxhc2hfZGF0YSwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkucmVzb3VyY2UJPSAmaDRfZmxhc2hfcmVzb3VyY2UsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGg0X3NtYzkxeF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydCAgPSBPTUFQMjRYWF9FVEhSX1NUQVJULCAgICAgICAgICAvKiBQaHlzaWNhbCAqLworCQkuZW5kICAgID0gT01BUDI0WFhfRVRIUl9TVEFSVCArIDB4ZiwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQgID0gT01BUF9HUElPX0lSUShPTUFQMjRYWF9FVEhSX0dQSU9fSVJRKSwKKwkJLmVuZCAgICA9IE9NQVBfR1BJT19JUlEoT01BUDI0WFhfRVRIUl9HUElPX0lSUSksCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaDRfc21jOTF4X2RldmljZSA9IHsKKwkubmFtZQkJPSAic21jOTF4IiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGg0X3NtYzkxeF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IGg0X3NtYzkxeF9yZXNvdXJjZXMsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqaDRfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJmg0X3NtYzkxeF9kZXZpY2UsCisJJmg0X2ZsYXNoX2RldmljZSwKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgaDRfaW5pdF9zbWM5MXgodm9pZCkKK3sKKwkvKiBNYWtlIHN1cmUgQ1MxIHRpbWluZ3MgYXJlIGNvcnJlY3QgKi8KKwlHUE1DX0NPTkZJRzFfMSA9IDB4MDAwMTEyMDA7CisJR1BNQ19DT05GSUcyXzEgPSAweDAwMWYxZjAxOworCUdQTUNfQ09ORklHM18xID0gMHgwMDA4MDgwMzsKKwlHUE1DX0NPTkZJRzRfMSA9IDB4MWMwOTFjMDk7CisJR1BNQ19DT05GSUc1XzEgPSAweDA0MWYxZjFmOworCUdQTUNfQ09ORklHNl8xID0gMHgwMDAwMDRjNDsKKwlHUE1DX0NPTkZJRzdfMSA9IDB4MDAwMDBmNDAgfCAoMHgwODAwMDAwMCA+PiAyNCk7CisJdWRlbGF5KDEwMCk7CisKKwlvbWFwX2NmZ19yZWcoTTE1XzI0WFhfR1BJTzkyKTsKKwlpZiAob21hcF9yZXF1ZXN0X2dwaW8oT01BUDI0WFhfRVRIUl9HUElPX0lSUSkgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJlcXVlc3QgR1BJTyVkIGZvciBzbWM5MXggSVJRXG4iLAorCQkJT01BUDI0WFhfRVRIUl9HUElPX0lSUSk7CisJCXJldHVybjsKKwl9CisJb21hcF9zZXRfZ3Bpb19kaXJlY3Rpb24oT01BUDI0WFhfRVRIUl9HUElPX0lSUSwgMSk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBvbWFwX2g0X2luaXRfaXJxKHZvaWQpCit7CisJb21hcF9pbml0X2lycSgpOworCW9tYXBfZ3Bpb19pbml0KCk7CisJaDRfaW5pdF9zbWM5MXgoKTsKK30KKworc3RhdGljIHN0cnVjdCBvbWFwX3VhcnRfY29uZmlnIGg0X3VhcnRfY29uZmlnIF9faW5pdGRhdGEgPSB7CisJLmVuYWJsZWRfdWFydHMgPSAoKDEgPDwgMCkgfCAoMSA8PCAxKSB8ICgxIDw8IDIpKSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9tbWNfY29uZmlnIGg0X21tY19jb25maWcgX19pbml0ZGF0YSA9IHsKKwkubW1jIFswXSA9IHsKKwkJLmVuYWJsZWQJPSAxLAorCQkud2lyZTQJCT0gMSwKKwkJLndwX3BpbgkJPSAtMSwKKwkJLnBvd2VyX3Bpbgk9IC0xLAorCQkuc3dpdGNoX3Bpbgk9IC0xLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfbGNkX2NvbmZpZyBoNF9sY2RfY29uZmlnIF9faW5pdGRhdGEgPSB7CisJLnBhbmVsX25hbWUJPSAiaDQiLAorCS5jdHJsX25hbWUJPSAiaW50ZXJuYWwiLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX2NvbmZpZ19rZXJuZWwgaDRfY29uZmlnW10gPSB7CisJeyBPTUFQX1RBR19VQVJULAkmaDRfdWFydF9jb25maWcgfSwKKwl7IE9NQVBfVEFHX01NQywJCSZoNF9tbWNfY29uZmlnIH0sCisJeyBPTUFQX1RBR19MQ0QsCQkmaDRfbGNkX2NvbmZpZyB9LAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IG9tYXBfaDRfaW5pdCh2b2lkKQoreworCS8qCisJICogTWFrZSBzdXJlIHRoZSBzZXJpYWwgcG9ydHMgYXJlIG11eGVkIG9uIGF0IHRoaXMgcG9pbnQuCisJICogWW91IGhhdmUgdG8gbXV4IHRoZW0gb2ZmIGluIGRldmljZSBkcml2ZXJzIGxhdGVyIG9uCisJICogaWYgbm90IG5lZWRlZC4KKwkgKi8KKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhoNF9kZXZpY2VzLCBBUlJBWV9TSVpFKGg0X2RldmljZXMpKTsKKwlvbWFwX2JvYXJkX2NvbmZpZyA9IGg0X2NvbmZpZzsKKwlvbWFwX2JvYXJkX2NvbmZpZ19zaXplID0gQVJSQVlfU0laRShoNF9jb25maWcpOworCW9tYXBfc2VyaWFsX2luaXQoKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IG9tYXBfaDRfbWFwX2lvKHZvaWQpCit7CisJb21hcF9tYXBfY29tbW9uX2lvKCk7Cit9CisKK01BQ0hJTkVfU1RBUlQoT01BUF9INCwgIk9NQVAyNDIwIEg0IGJvYXJkIikKKwkvKiBNYWludGFpbmVyOiBQYXVsIE11bmR0IDxwYXVsLm11bmR0QG5va2lhLmNvbT4gKi8KKwkucGh5c19yYW0JPSAweDgwMDAwMDAwLAorCS5waHlzX2lvCT0gMHg0ODAwMDAwMCwKKwkuaW9fcGdfb2Zmc3QJPSAoKDB4ZDgwMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMJPSAweDgwMDAwMTAwLAorCS5tYXBfaW8JCT0gb21hcF9oNF9tYXBfaW8sCisJLmluaXRfaXJxCT0gb21hcF9oNF9pbml0X2lycSwKKwkuaW5pdF9tYWNoaW5lCT0gb21hcF9oNF9pbml0LAorCS50aW1lcgkJPSAmb21hcF90aW1lciwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU4MThkOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2suYwpAQCAtMCwwICsxLDExMjkgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jay5jCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNSBUZXhhcyBJbnN0cnVtZW50cyBJbmMuCisgKiAgUmljaGFyZCBXb29kcnVmZiA8ci13b29kcnVmZjJAdGkuY29tPgorICogIENyZWF0ZWQgZm9yIE9NQVAyLgorICoKKyAqICBDbGVhbmVkIHVwIGFuZCBtb2RpZmllZCB0byB1c2Ugb21hcCBzaGFyZWQgY2xvY2sgZnJhbWV3b3JrIGJ5CisgKiAgVG9ueSBMaW5kZ3JlbiA8dG9ueUBhdG9taWRlLmNvbT4KKyAqCisgKiAgQmFzZWQgb24gb21hcDEgY2xvY2suYywgQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwNSBOb2tpYSBjb3Jwb3JhdGlvbgorICogIFdyaXR0ZW4gYnkgVHV1a2thIFRpa2thbmVuIDx0dXVra2EudGlra2FuZW5AZWxla3Ryb2JpdC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9jbG9jay5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2Nsb2NrLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvc3JhbS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3ByY20uaD4KKworI2luY2x1ZGUgImNsb2NrLmgiCisKKy8vI2RlZmluZSBET1dOX1ZBUklBQkxFX0RQTEwgMQkJCS8qIEV4cGVyaW1lbnRhbCAqLworCitzdGF0aWMgc3RydWN0IHByY21fY29uZmlnICpjdXJyX3ByY21fc2V0Oworc3RhdGljIHN0cnVjdCBtZW1vcnlfdGltaW5ncyBtZW1fdGltaW5nczsKK3N0YXRpYyB1MzIgY3Vycl9wZXJmX2xldmVsID0gUFJDTV9GVUxMX1NQRUVEOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIE9tYXAyIHNwZWNpZmljIGNsb2NrIGZ1bmN0aW9ucworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogUmVjYWxjdWxhdGUgU1lTVF9DTEsgKi8KK3N0YXRpYyB2b2lkIG9tYXAyX3N5c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKiBjbGspCit7CisJdTMyIGRpdiA9IFBSQ01fQ0xLU1JDX0NUUkw7CisJZGl2ICY9ICgxIDw8IDcpIHwgKDEgPDwgNik7CS8qIFRlc3QgaWYgZXh0IGNsayBkaXZpZGVkIGJ5IDEgb3IgMiAqLworCWRpdiA+Pj0gY2xrLT5yYXRlX29mZnNldDsKKwljbGstPnJhdGUgPSAoY2xrLT5wYXJlbnQtPnJhdGUgLyBkaXYpOworCXByb3BhZ2F0ZV9yYXRlKGNsayk7Cit9CisKK3N0YXRpYyB1MzIgb21hcDJfZ2V0X2RwbGxfcmF0ZShzdHJ1Y3QgY2xrICogdGNsaykKK3sKKwlpbnQgZHBsbF9jbGssIGRwbGxfbXVsdCwgZHBsbF9kaXYsIGFtdWx0OworCisJZHBsbF9tdWx0ID0gKENNX0NMS1NFTDFfUExMID4+IDEyKSAmIDB4MDNmZjsJLyogMTAgYml0cyAqLworCWRwbGxfZGl2ID0gKENNX0NMS1NFTDFfUExMID4+IDgpICYgMHgwZjsJLyogNCBiaXRzICovCisJZHBsbF9jbGsgPSAodGNsay0+cGFyZW50LT5yYXRlICogZHBsbF9tdWx0KSAvIChkcGxsX2RpdiArIDEpOworCWFtdWx0ID0gQ01fQ0xLU0VMMl9QTEwgJiAweDM7CisJZHBsbF9jbGsgKj0gYW11bHQ7CisKKwlyZXR1cm4gZHBsbF9jbGs7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMoc3RydWN0IGNsayAqY2xrKQoreworCWZvbGxvd3BhcmVudF9yZWNhbGMoY2xrKTsKK30KKworc3RhdGljIHZvaWQgb21hcDJfcHJvcGFnYXRlX3JhdGUoc3RydWN0IGNsayAqIGNsaykKK3sKKwlpZiAoIShjbGstPmZsYWdzICYgUkFURV9GSVhFRCkpCisJCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlOworCisJcHJvcGFnYXRlX3JhdGUoY2xrKTsKK30KKworLyogRW5hYmxlIGFuIEFQTEwgaWYgb2ZmICovCitzdGF0aWMgdm9pZCBvbWFwMl9jbGtfZml4ZWRfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1MzIgY3ZhbCwgaT0wOworCisJaWYgKGNsay0+ZW5hYmxlX2JpdCA9PSAweGZmKQkJCS8qIFBhcmVudCB3aWxsIGRvIGl0ICovCisJCXJldHVybjsKKworCWN2YWwgPSBDTV9DTEtFTl9QTEw7CisKKwlpZiAoKGN2YWwgJiAoMHgzIDw8IGNsay0+ZW5hYmxlX2JpdCkpID09ICgweDMgPDwgY2xrLT5lbmFibGVfYml0KSkKKwkJcmV0dXJuOworCisJY3ZhbCAmPSB+KDB4MyA8PCBjbGstPmVuYWJsZV9iaXQpOworCWN2YWwgfD0gKDB4MyA8PCBjbGstPmVuYWJsZV9iaXQpOworCUNNX0NMS0VOX1BMTCA9IGN2YWw7CisKKwlpZiAoY2xrID09ICZhcGxsOTZfY2spCisJCWN2YWwgPSAoMSA8PCA4KTsKKwllbHNlIGlmIChjbGsgPT0gJmFwbGw1NF9jaykKKwkJY3ZhbCA9ICgxIDw8IDYpOworCisJd2hpbGUgKCFDTV9JRExFU1RfQ0tHRU4gJiBjdmFsKSB7CQkvKiBXYWl0IGZvciBsb2NrICovCisJCSsraTsKKwkJdWRlbGF5KDEpOworCQlpZiAoaSA9PSAxMDAwMDApCisJCQlicmVhazsKKwl9Cit9CisKKy8qIEVuYWJsZXMgY2xvY2sgd2l0aG91dCBjb25zaWRlcmluZyBwYXJlbnQgZGVwZW5kZW5jaWVzIG9yIHVzZSBjb3VudAorICogUkVWSVNJVDogTWF5YmUgY2hhbmdlIHRoaXMgdG8gdXNlIGNsay0+ZW5hYmxlIGxpa2Ugb24gb21hcDE/CisgKi8KK3N0YXRpYyBpbnQgb21hcDJfY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICogY2xrKQoreworCXUzMiByZWd2YWwzMjsKKworCWlmIChjbGstPmZsYWdzICYgQUxXQVlTX0VOQUJMRUQpCisJCXJldHVybiAwOworCisJaWYgKHVubGlrZWx5KGNsay0+ZW5hYmxlX3JlZyA9PSAwKSkgeworCQlwcmludGsoS0VSTl9FUlIgImNsb2NrLmM6IEVuYWJsZSBmb3IgJXMgd2l0aG91dCBlbmFibGUgY29kZVxuIiwKKwkJICAgICAgIGNsay0+bmFtZSk7CisJCXJldHVybiAwOworCX0KKworCWlmIChjbGstPmVuYWJsZV9yZWcgPT0gKHZvaWQgX19pb21lbSAqKSZDTV9DTEtFTl9QTEwpIHsKKwkJb21hcDJfY2xrX2ZpeGVkX2VuYWJsZShjbGspOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZWd2YWwzMiA9IF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7CisJcmVndmFsMzIgfD0gKDEgPDwgY2xrLT5lbmFibGVfYml0KTsKKwlfX3Jhd193cml0ZWwocmVndmFsMzIsIGNsay0+ZW5hYmxlX3JlZyk7CisKKwlyZXR1cm4gMDsKK30KKworLyogU3RvcCBBUExMICovCitzdGF0aWMgdm9pZCBvbWFwMl9jbGtfZml4ZWRfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJdTMyIGN2YWw7CisKKwlpZihjbGstPmVuYWJsZV9iaXQgPT0gMHhmZikJCS8qIGxldCBwYXJlbnQgb2ZmIGRvIGl0ICovCisJCXJldHVybjsKKworCWN2YWwgPSBDTV9DTEtFTl9QTEw7CisJY3ZhbCAmPSB+KDB4MyA8PCBjbGstPmVuYWJsZV9iaXQpOworCUNNX0NMS0VOX1BMTCA9IGN2YWw7Cit9CisKKy8qIERpc2FibGVzIGNsb2NrIHdpdGhvdXQgY29uc2lkZXJpbmcgcGFyZW50IGRlcGVuZGVuY2llcyBvciB1c2UgY291bnQgKi8KK3N0YXRpYyB2b2lkIG9tYXAyX2Nsa19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1MzIgcmVndmFsMzI7CisKKwlpZiAoY2xrLT5lbmFibGVfcmVnID09IDApCisJCXJldHVybjsKKworCWlmIChjbGstPmVuYWJsZV9yZWcgPT0gKHZvaWQgX19pb21lbSAqKSZDTV9DTEtFTl9QTEwpIHsKKwkJb21hcDJfY2xrX2ZpeGVkX2Rpc2FibGUoY2xrKTsKKwkJcmV0dXJuOworCX0KKworCXJlZ3ZhbDMyID0gX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKKwlyZWd2YWwzMiAmPSB+KDEgPDwgY2xrLT5lbmFibGVfYml0KTsKKwlfX3Jhd193cml0ZWwocmVndmFsMzIsIGNsay0+ZW5hYmxlX3JlZyk7Cit9CisKK3N0YXRpYyBpbnQgb21hcDJfY2xrX3VzZShzdHJ1Y3QgY2xrICpjbGspCit7CisJaW50IHJldCA9IDA7CisKKwlpZiAoY2xrLT51c2Vjb3VudCsrID09IDApIHsKKwkJaWYgKGxpa2VseSgodTMyKWNsay0+cGFyZW50KSkKKwkJCXJldCA9IG9tYXAyX2Nsa191c2UoY2xrLT5wYXJlbnQpOworCisJCWlmICh1bmxpa2VseShyZXQgIT0gMCkpIHsKKwkJCWNsay0+dXNlY291bnQtLTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQlyZXQgPSBvbWFwMl9jbGtfZW5hYmxlKGNsayk7CisKKwkJaWYgKHVubGlrZWx5KHJldCAhPSAwKSAmJiBjbGstPnBhcmVudCkgeworCQkJb21hcDJfY2xrX3VudXNlKGNsay0+cGFyZW50KTsKKwkJCWNsay0+dXNlY291bnQtLTsKKwkJfQorCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXAyX2Nsa191bnVzZShzdHJ1Y3QgY2xrICpjbGspCit7CisJaWYgKGNsay0+dXNlY291bnQgPiAwICYmICEoLS1jbGstPnVzZWNvdW50KSkgeworCQlvbWFwMl9jbGtfZGlzYWJsZShjbGspOworCQlpZiAobGlrZWx5KCh1MzIpY2xrLT5wYXJlbnQpKQorCQkJb21hcDJfY2xrX3VudXNlKGNsay0+cGFyZW50KTsKKwl9Cit9CisKKy8qCisgKiBVc2VzIHRoZSBjdXJyZW50IHByY20gc2V0IHRvIHRlbGwgaWYgYSByYXRlIGlzIHZhbGlkLgorICogWW91IGNhbiBnbyBzbG93ZXIsIGJ1dCBub3QgZmFzdGVyIHdpdGhpbiBhIGdpdmVuIHJhdGUgc2V0LgorICovCitzdGF0aWMgdTMyIG9tYXAyX2RwbGxfcm91bmRfcmF0ZSh1bnNpZ25lZCBsb25nIHRhcmdldF9yYXRlKQoreworCXUzMiBoaWdoLCBsb3c7CisKKwlpZiAoKENNX0NMS1NFTDJfUExMICYgMHgzKSA9PSAxKSB7CS8qIERQTEwgY2xvY2tvdXQgKi8KKwkJaGlnaCA9IGN1cnJfcHJjbV9zZXQtPmRwbGxfc3BlZWQgKiAyOworCQlsb3cgPSBjdXJyX3ByY21fc2V0LT5kcGxsX3NwZWVkOworCX0gZWxzZSB7CQkJCS8qIERQTEwgY2xvY2tvdXQgeCAyICovCisJCWhpZ2ggPSBjdXJyX3ByY21fc2V0LT5kcGxsX3NwZWVkOworCQlsb3cgPSBjdXJyX3ByY21fc2V0LT5kcGxsX3NwZWVkIC8gMjsKKwl9CisKKyNpZmRlZiBET1dOX1ZBUklBQkxFX0RQTEwKKwlpZiAodGFyZ2V0X3JhdGUgPiBoaWdoKQorCQlyZXR1cm4gaGlnaDsKKwllbHNlCisJCXJldHVybiB0YXJnZXRfcmF0ZTsKKyNlbHNlCisJaWYgKHRhcmdldF9yYXRlID4gbG93KQorCQlyZXR1cm4gaGlnaDsKKwllbHNlCisJCXJldHVybiBsb3c7CisjZW5kaWYKKworfQorCisvKgorICogVXNlZCBmb3IgY2xvY2tzIHRoYXQgYXJlIHBhcnQgb2YgQ0xLU0VMX3h5eiBnb3Zlcm5lZCBjbG9ja3MuCisgKiBSRVZJU0lUOiBNYXliZSBjaGFuZ2UgdG8gdXNlIGNsay0+ZW5hYmxlKCkgZnVuY3Rpb25zIGxpa2Ugb24gb21hcDE/CisgKi8KK3N0YXRpYyB2b2lkIG9tYXAyX2Nsa3NlbF9yZWNhbGMoc3RydWN0IGNsayAqIGNsaykKK3sKKwl1MzIgZml4ZWQgPSAwLCBkaXYgPSAwOworCisJaWYgKGNsayA9PSAmZHBsbF9jaykgeworCQljbGstPnJhdGUgPSBvbWFwMl9nZXRfZHBsbF9yYXRlKGNsayk7CisJCWZpeGVkID0gMTsKKwkJZGl2ID0gMDsKKwl9CisKKwlpZiAoY2xrID09ICZpdmExX21wdV9pbnRfaWZjaykgeworCQlkaXYgPSAyOworCQlmaXhlZCA9IDE7CisJfQorCisJaWYgKChjbGsgPT0gJmRzczFfZmNrKSAmJiAoKENNX0NMS1NFTDFfQ09SRSAmICgweDFmIDw8IDgpKSA9PSAwKSkgeworCQljbGstPnJhdGUgPSBzeXNfY2sucmF0ZTsKKwkJcmV0dXJuOworCX0KKworCWlmICghZml4ZWQpIHsKKwkJZGl2ID0gb21hcDJfY2xrc2VsX2dldF9kaXZpc29yKGNsayk7CisJCWlmIChkaXYgPT0gMCkKKwkJCXJldHVybjsKKwl9CisKKwlpZiAoZGl2ICE9IDApIHsKKwkJaWYgKHVubGlrZWx5KGNsay0+cmF0ZSA9PSBjbGstPnBhcmVudC0+cmF0ZSAvIGRpdikpCisJCQlyZXR1cm47CisJCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlIC8gZGl2OworCX0KKworCWlmICh1bmxpa2VseShjbGstPmZsYWdzICYgUkFURV9QUk9QQUdBVEVTKSkKKwkJcHJvcGFnYXRlX3JhdGUoY2xrKTsKK30KKworLyoKKyAqIEZpbmRzIGJlc3QgZGl2aWRlciB2YWx1ZSBpbiBhbiBhcnJheSBiYXNlZCBvbiB0aGUgc291cmNlIGFuZCB0YXJnZXQKKyAqIHJhdGVzLiBUaGUgZGl2aWRlciBhcnJheSBtdXN0IGJlIHNvcnRlZCB3aXRoIHNtYWxsZXN0IGRpdmlkZXIgZmlyc3QuCisgKi8KK3N0YXRpYyBpbmxpbmUgdTMyIG9tYXAyX2RpdmlkZXJfZnJvbV90YWJsZSh1MzIgc2l6ZSwgdTMyICpkaXZfYXJyYXksCisJCQkJCSAgIHUzMiBzcmNfcmF0ZSwgdTMyIHRndF9yYXRlKQoreworCWludCBpLCB0ZXN0X3JhdGU7CisKKwlpZiAoZGl2X2FycmF5ID09IE5VTEwpCisJCXJldHVybiB+MTsKKworCWZvciAoaT0wOyBpIDwgc2l6ZTsgaSsrKSB7CisJCXRlc3RfcmF0ZSA9IHNyY19yYXRlIC8gKmRpdl9hcnJheTsKKwkJaWYgKHRlc3RfcmF0ZSA8PSB0Z3RfcmF0ZSkKKwkJCXJldHVybiAqZGl2X2FycmF5OworCQkrK2Rpdl9hcnJheTsKKwl9CisKKwlyZXR1cm4gfjA7CS8qIE5vIGFjY2VwdGFibGUgZGl2aWRlciAqLworfQorCisvKgorICogRmluZCBkaXZpc29yIGZvciB0aGUgZ2l2ZW4gY2xvY2sgYW5kIHRhcmdldCByYXRlLgorICoKKyAqIE5vdGUgdGhhdCB0aGlzIHdpbGwgbm90IHdvcmsgZm9yIGNsb2NrcyB3aGljaCBhcmUgcGFydCBvZiBDT05GSUdfUEFSVElDSVBBTlQsCisgKiB0aGV5IGFyZSBvbmx5IHNldHRhYmxlIGFzIHBhcnQgb2YgdmlydHVhbF9wcmNtIHNldC4KKyAqLworc3RhdGljIHUzMiBvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrICp0Y2xrLCB1MzIgdGFyZ2V0X3JhdGUsCisJdTMyICpuZXdfZGl2KQoreworCXUzMiBnZnhfZGl2W10gPSB7MiwgMywgNH07CisJdTMyIHN5c2Nsa291dF9kaXZbXSA9IHsxLCAyLCA0LCA4LCAxNn07CisJdTMyIGRzczFfZGl2W10gPSB7MSwgMiwgMywgNCwgNSwgNiwgOCwgOSwgMTIsIDE2fTsKKwl1MzIgdnlsbnFfZGl2W10gPSB7MSwgMiwgMywgNCwgNiwgOCwgOSwgMTIsIDE2LCAxOH07CisJdTMyIGJlc3RfZGl2ID0gfjAsIGFzaXplID0gMDsKKwl1MzIgKmRpdl9hcnJheSA9IE5VTEw7CisKKwlzd2l0Y2ggKHRjbGstPmZsYWdzICYgU1JDX1JBVEVfU0VMX01BU0spIHsKKwljYXNlIENNX0dGWF9TRUwxOgorCQlhc2l6ZSA9IDM7CisJCWRpdl9hcnJheSA9IGdmeF9kaXY7CisJCWJyZWFrOworCWNhc2UgQ01fUExMX1NFTDE6CisJCXJldHVybiBvbWFwMl9kcGxsX3JvdW5kX3JhdGUodGFyZ2V0X3JhdGUpOworCWNhc2UgQ01fU1lTQ0xLT1VUX1NFTDE6CisJCWFzaXplID0gNTsKKwkJZGl2X2FycmF5ID0gc3lzY2xrb3V0X2RpdjsKKwkJYnJlYWs7CisJY2FzZSBDTV9DT1JFX1NFTDE6CisJCWlmKHRjbGsgPT0gJmRzczFfZmNrKXsKKwkJCWlmKHRjbGstPnBhcmVudCA9PSAmY29yZV9jayl7CisJCQkJYXNpemUgPSAxMDsKKwkJCQlkaXZfYXJyYXkgPSBkc3MxX2RpdjsKKwkJCX0gZWxzZSB7CisJCQkJKm5ld19kaXYgPSAwOyAvKiBmaXhlZCBjbGsgKi8KKwkJCQlyZXR1cm4odGNsay0+cGFyZW50LT5yYXRlKTsKKwkJCX0KKwkJfSBlbHNlIGlmKCh0Y2xrID09ICZ2bHlucV9mY2spICYmIGNwdV9pc19vbWFwMjQyMCgpKXsKKwkJCWlmKHRjbGstPnBhcmVudCA9PSAmY29yZV9jayl7CisJCQkJYXNpemUgPSAxMDsKKwkJCQlkaXZfYXJyYXkgPSB2eWxucV9kaXY7CisJCQl9IGVsc2UgeworCQkJCSpuZXdfZGl2ID0gMDsgLyogZml4ZWQgY2xrICovCisJCQkJcmV0dXJuKHRjbGstPnBhcmVudC0+cmF0ZSk7CisJCQl9CisJCX0KKwkJYnJlYWs7CisJfQorCisJYmVzdF9kaXYgPSBvbWFwMl9kaXZpZGVyX2Zyb21fdGFibGUoYXNpemUsIGRpdl9hcnJheSwKKwkgdGNsay0+cGFyZW50LT5yYXRlLCB0YXJnZXRfcmF0ZSk7CisJaWYgKGJlc3RfZGl2ID09IH4wKXsKKwkJKm5ld19kaXYgPSAxOworCQlyZXR1cm4gYmVzdF9kaXY7IC8qIHNpZ25hbCBlcnJvciAqLworCX0KKworCSpuZXdfZGl2ID0gYmVzdF9kaXY7CisJcmV0dXJuICh0Y2xrLT5wYXJlbnQtPnJhdGUgLyBiZXN0X2Rpdik7Cit9CisKKy8qIEdpdmVuIGEgY2xvY2sgYW5kIGEgcmF0ZSBhcHBseSBhIGNsb2NrIHNwZWNpZmljIHJvdW5kaW5nIGZ1bmN0aW9uICovCitzdGF0aWMgbG9uZyBvbWFwMl9jbGtfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwl1MzIgbmV3X2RpdiA9IDA7CisJaW50IHZhbGlkX3JhdGU7CisKKwlpZiAoY2xrLT5mbGFncyAmIFJBVEVfRklYRUQpCisJCXJldHVybiBjbGstPnJhdGU7CisKKwlpZiAoY2xrLT5mbGFncyAmIFJBVEVfQ0tDVEwpIHsKKwkJdmFsaWRfcmF0ZSA9IG9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlKGNsaywgcmF0ZSwgJm5ld19kaXYpOworCQlyZXR1cm4gdmFsaWRfcmF0ZTsKKwl9CisKKwlpZiAoY2xrLT5yb3VuZF9yYXRlICE9IDApCisJCXJldHVybiBjbGstPnJvdW5kX3JhdGUoY2xrLCByYXRlKTsKKworCXJldHVybiBjbGstPnJhdGU7Cit9CisKKy8qCisgKiBDaGVjayB0aGUgRExMIGxvY2sgc3RhdGUsIGFuZCByZXR1cm4gdHVlIGlmIHJ1bm5pbmcgaW4gdW5sb2NrIG1vZGUuCisgKiBUaGlzIGlzIG5lZWRlZCB0byBjb21wZW5zdGUgZm9yIHRoZSBzaGlmdGVkIERMTCB2YWx1ZSBpbiB1bmxvY2sgbW9kZS4KKyAqLworc3RhdGljIHUzMiBvbWFwMl9kbGxfZm9yY2VfbmVlZGVkKHZvaWQpCit7CisJdTMyIGRsbF9zdGF0ZSA9IFNEUkNfRExMQV9DVFJMOwkJLyogZGxsYSBhbmQgZGxsYiBhcmUgYSBzZXQgKi8KKworCWlmICgoZGxsX3N0YXRlICYgKDEgPDwgMikpID09ICgxIDw8IDIpKQorCQlyZXR1cm4gMTsKKwllbHNlCisJCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBvbWFwMl9pbml0X21lbW9yeV9wYXJhbXModTMyIGZvcmNlX2xvY2tfdG9fdW5sb2NrX21vZGUpCit7CisJdW5zaWduZWQgbG9uZyBkbGxfY250OworCXUzMiBmYXN0X2RsbCA9IDA7CisKKwltZW1fdGltaW5ncy5tX3R5cGUgPSAhKChTRFJDX01SXzAgJiAweDMpID09IDB4MSk7IC8qIEREUiA9IDEsIFNEUiA9IDAgKi8KKworCS8qIDI0MjIgZXMyLjA1IGFuZCBiZXlvbmQgaGFzIGEgc2luZ2xlIFNJUCBERFIgaW5zdGVhZCBvZiAyIGxpa2Ugb3RoZXJzLgorCSAqIEluIHRoZSBjYXNlIG9mIDI0MjIsIGl0cyBvayB0byB1c2UgQ1MxIGluc3RlYWQgb2YgQ1MwLgorCSAqLworCisjaWYgMAkvKiBGSVhNRTogRW5hYmxlIGFmdGVyIDI0eHggY3B1IGRldGVjdGlvbiB3b3JrcyAqLworCWN0eXBlID0gZ2V0X2NwdV90eXBlKCk7CisJaWYgKGNwdV9pc19vbWFwMjQyMigpKQorCQltZW1fdGltaW5ncy5iYXNlX2NzID0gMTsKKwllbHNlCisjZW5kaWYKKwkJbWVtX3RpbWluZ3MuYmFzZV9jcyA9IDA7CisKKwlpZiAobWVtX3RpbWluZ3MubV90eXBlICE9IE1fRERSKQorCQlyZXR1cm47CisKKwkvKiBXaXRoIEREUiB3ZSBuZWVkIHRvIGRldGVybWluZSB0aGUgbG93IGZyZXF1ZW5jeSBETEwgdmFsdWUgKi8KKwlpZiAoKChtZW1fdGltaW5ncy5mYXN0X2RsbF9jdHJsICYgKDEgPDwgMikpID09IE1fTE9DS19DVFJMKSkKKwkJbWVtX3RpbWluZ3MuZGxsX21vZGUgPSBNX1VOTE9DSzsKKwllbHNlCisJCW1lbV90aW1pbmdzLmRsbF9tb2RlID0gTV9MT0NLOworCisJaWYgKG1lbV90aW1pbmdzLmJhc2VfY3MgPT0gMCkgeworCQlmYXN0X2RsbCA9IFNEUkNfRExMQV9DVFJMOworCQlkbGxfY250ID0gU0RSQ19ETExBX1NUQVRVUyAmIDB4ZmYwMDsKKwl9IGVsc2UgeworCQlmYXN0X2RsbCA9IFNEUkNfRExMQl9DVFJMOworCQlkbGxfY250ID0gU0RSQ19ETExCX1NUQVRVUyAmIDB4ZmYwMDsKKwl9CisJaWYgKGZvcmNlX2xvY2tfdG9fdW5sb2NrX21vZGUpIHsKKwkJZmFzdF9kbGwgJj0gfjB4ZmYwMDsKKwkJZmFzdF9kbGwgfD0gZGxsX2NudDsJCS8qIEN1cnJlbnQgbG9jayBtb2RlICovCisJfQorCW1lbV90aW1pbmdzLmZhc3RfZGxsX2N0cmwgPSBmYXN0X2RsbDsKKworCS8qIE5vIGRpc3J1cHRpb25zLCBERFIgd2lsbCBiZSBvZmZsaW5lICYgQy1BQkkgbm90IGZvbGxvd2VkICovCisJb21hcDJfc3JhbV9kZHJfaW5pdCgmbWVtX3RpbWluZ3Muc2xvd19kbGxfY3RybCwKKwkJCSAgICBtZW1fdGltaW5ncy5mYXN0X2RsbF9jdHJsLAorCQkJICAgIG1lbV90aW1pbmdzLmJhc2VfY3MsCisJCQkgICAgZm9yY2VfbG9ja190b191bmxvY2tfbW9kZSk7CisJbWVtX3RpbWluZ3Muc2xvd19kbGxfY3RybCAmPSAweGZmMDA7CS8qIEtlZXAgbG9jayB2YWx1ZSAqLworCisJLyogVHVybiBzdGF0dXMgaW50byB1bmxvY2sgY3RybCAqLworCW1lbV90aW1pbmdzLnNsb3dfZGxsX2N0cmwgfD0KKwkJKChtZW1fdGltaW5ncy5mYXN0X2RsbF9jdHJsICYgMHhGKSB8ICgxIDw8IDIpKTsKKworCS8qIDkwIGRlZ3JlZSBwaGFzZSBmb3IgYW55dGhpbmcgYmVsb3cgMTMzTWh6ICovCisJbWVtX3RpbWluZ3Muc2xvd19kbGxfY3RybCB8PSAoMSA8PCAxKTsKK30KKworc3RhdGljIHUzMiBvbWFwMl9yZXByb2dyYW1fc2RyYyh1MzIgbGV2ZWwsIHUzMiBmb3JjZSkKK3sKKwl1MzIgcHJldiA9IGN1cnJfcGVyZl9sZXZlbCwgZmxhZ3M7CisKKwlpZiAoKGN1cnJfcGVyZl9sZXZlbCA9PSBsZXZlbCkgJiYgIWZvcmNlKQorCQlyZXR1cm4gcHJldjsKKworCWlmIChsZXZlbCA9PSBQUkNNX0hBTEZfU1BFRUQpIHsKKwkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCQlQUkNNX1ZPTFRTRVRVUCA9IDB4ZmZmZjsKKwkJb21hcDJfc3JhbV9yZXByb2dyYW1fc2RyYyhQUkNNX0hBTEZfU1BFRUQsCisJCQkJCSAgbWVtX3RpbWluZ3Muc2xvd19kbGxfY3RybCwKKwkJCQkJICBtZW1fdGltaW5ncy5tX3R5cGUpOworCQljdXJyX3BlcmZfbGV2ZWwgPSBQUkNNX0hBTEZfU1BFRUQ7CisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwl9CisJaWYgKGxldmVsID09IFBSQ01fRlVMTF9TUEVFRCkgeworCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJCVBSQ01fVk9MVFNFVFVQID0gMHhmZmZmOworCQlvbWFwMl9zcmFtX3JlcHJvZ3JhbV9zZHJjKFBSQ01fRlVMTF9TUEVFRCwKKwkJCQkJICBtZW1fdGltaW5ncy5mYXN0X2RsbF9jdHJsLAorCQkJCQkgIG1lbV90aW1pbmdzLm1fdHlwZSk7CisJCWN1cnJfcGVyZl9sZXZlbCA9IFBSQ01fRlVMTF9TUEVFRDsKKwkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCX0KKworCXJldHVybiBwcmV2OworfQorCitzdGF0aWMgaW50IG9tYXAyX3JlcHJvZ3JhbV9kcGxsKHN0cnVjdCBjbGsgKiBjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwl1MzIgZmxhZ3MsIGN1cl9yYXRlLCBsb3csIG11bHQsIGRpdiwgdmFsaWRfcmF0ZSwgZG9uZV9yYXRlOworCXUzMiBieXBhc3MgPSAwOworCXN0cnVjdCBwcmNtX2NvbmZpZyB0bXBzZXQ7CisJaW50IHJldCA9IC1FSU5WQUw7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJY3VyX3JhdGUgPSBvbWFwMl9nZXRfZHBsbF9yYXRlKCZkcGxsX2NrKTsKKwltdWx0ID0gQ01fQ0xLU0VMMl9QTEwgJiAweDM7CisKKwlpZiAoKHJhdGUgPT0gKGN1cl9yYXRlIC8gMikpICYmIChtdWx0ID09IDIpKSB7CisJCW9tYXAyX3JlcHJvZ3JhbV9zZHJjKFBSQ01fSEFMRl9TUEVFRCwgMSk7CisJfSBlbHNlIGlmICgocmF0ZSA9PSAoY3VyX3JhdGUgKiAyKSkgJiYgKG11bHQgPT0gMSkpIHsKKwkJb21hcDJfcmVwcm9ncmFtX3NkcmMoUFJDTV9GVUxMX1NQRUVELCAxKTsKKwl9IGVsc2UgaWYgKHJhdGUgIT0gY3VyX3JhdGUpIHsKKwkJdmFsaWRfcmF0ZSA9IG9tYXAyX2RwbGxfcm91bmRfcmF0ZShyYXRlKTsKKwkJaWYgKHZhbGlkX3JhdGUgIT0gcmF0ZSkKKwkJCWdvdG8gZHBsbF9leGl0OworCisJCWlmICgoQ01fQ0xLU0VMMl9QTEwgJiAweDMpID09IDEpCisJCQlsb3cgPSBjdXJyX3ByY21fc2V0LT5kcGxsX3NwZWVkOworCQllbHNlCisJCQlsb3cgPSBjdXJyX3ByY21fc2V0LT5kcGxsX3NwZWVkIC8gMjsKKworCQl0bXBzZXQuY21fY2xrc2VsMV9wbGwgPSBDTV9DTEtTRUwxX1BMTDsKKwkJdG1wc2V0LmNtX2Nsa3NlbDFfcGxsICY9IH4oMHgzRkZGIDw8IDgpOworCQlkaXYgPSAoKGN1cnJfcHJjbV9zZXQtPnh0YWxfc3BlZWQgLyAxMDAwMDAwKSAtIDEpOworCQl0bXBzZXQuY21fY2xrc2VsMl9wbGwgPSBDTV9DTEtTRUwyX1BMTDsKKwkJdG1wc2V0LmNtX2Nsa3NlbDJfcGxsICY9IH4weDM7CisJCWlmIChyYXRlID4gbG93KSB7CisJCQl0bXBzZXQuY21fY2xrc2VsMl9wbGwgfD0gMHgyOworCQkJbXVsdCA9ICgocmF0ZSAvIDIpIC8gMTAwMDAwMCk7CisJCQlkb25lX3JhdGUgPSBQUkNNX0ZVTExfU1BFRUQ7CisJCX0gZWxzZSB7CisJCQl0bXBzZXQuY21fY2xrc2VsMl9wbGwgfD0gMHgxOworCQkJbXVsdCA9IChyYXRlIC8gMTAwMDAwMCk7CisJCQlkb25lX3JhdGUgPSBQUkNNX0hBTEZfU1BFRUQ7CisJCX0KKwkJdG1wc2V0LmNtX2Nsa3NlbDFfcGxsIHw9ICgoZGl2IDw8IDgpIHwgKG11bHQgPDwgMTIpKTsKKworCQkvKiBXb3JzdCBjYXNlICovCisJCXRtcHNldC5iYXNlX3NkcmNfcmZyID0gVjI0WFhfU0RSQ19SRlJfQ1RSTF9CWVBBU1M7CisKKwkJaWYgKHJhdGUgPT0gY3Vycl9wcmNtX3NldC0+eHRhbF9zcGVlZCkJLyogSWYgYXNraW5nIGZvciAxLTEgKi8KKwkJCWJ5cGFzcyA9IDE7CisKKwkJb21hcDJfcmVwcm9ncmFtX3NkcmMoUFJDTV9GVUxMX1NQRUVELCAxKTsgLyogRm9yIGluaXRfbWVtICovCisKKwkJLyogRm9yY2UgZGxsIGxvY2sgbW9kZSAqLworCQlvbWFwMl9zZXRfcHJjbSh0bXBzZXQuY21fY2xrc2VsMV9wbGwsIHRtcHNldC5iYXNlX3NkcmNfcmZyLAorCQkJICAgICAgIGJ5cGFzcyk7CisKKwkJLyogRXJyYXRhOiByZXQgZGxsIGVudHJ5IHN0YXRlICovCisJCW9tYXAyX2luaXRfbWVtb3J5X3BhcmFtcyhvbWFwMl9kbGxfZm9yY2VfbmVlZGVkKCkpOworCQlvbWFwMl9yZXByb2dyYW1fc2RyYyhkb25lX3JhdGUsIDApOworCX0KKwlvbWFwMl9jbGtzZWxfcmVjYWxjKCZkcGxsX2NrKTsKKwlyZXQgPSAwOworCitkcGxsX2V4aXQ6CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCXJldHVybihyZXQpOworfQorCisvKiBKdXN0IHJldHVybiB0aGUgTVBVIHNwZWVkICovCitzdGF0aWMgdm9pZCBvbWFwMl9tcHVfcmVjYWxjKHN0cnVjdCBjbGsgKiBjbGspCit7CisJY2xrLT5yYXRlID0gY3Vycl9wcmNtX3NldC0+bXB1X3NwZWVkOworfQorCisvKgorICogTG9vayBmb3IgYSByYXRlIGVxdWFsIG9yIGxlc3MgdGhhbiB0aGUgdGFyZ2V0IHJhdGUgZ2l2ZW4gYSBjb25maWd1cmF0aW9uIHNldC4KKyAqCisgKiBXaGF0J3Mgbm90IGVudGlyZWx5IGNsZWFyIGlzICJ3aGljaCIgZmllbGQgcmVwcmVzZW50cyB0aGUga2V5IGZpZWxkLgorICogU29tZSBtaWdodCBhcmd1ZSBMMy1ERFIsIG90aGVycyBBUk0sIG90aGVycyBJVkEuIFRoaXMgY29kZSBpcyBzaW1wbGUgYW5kCisgKiBqdXN0IHVzZXMgdGhlIEFSTSByYXRlcy4KKyAqLworc3RhdGljIGxvbmcgb21hcDJfcm91bmRfdG9fdGFibGVfcmF0ZShzdHJ1Y3QgY2xrICogY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJc3RydWN0IHByY21fY29uZmlnICogcHRyOworCWxvbmcgaGlnaGVzdF9yYXRlOworCisJaWYgKGNsayAhPSAmdmlydF9wcmNtX3NldCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwloaWdoZXN0X3JhdGUgPSAtRUlOVkFMOworCisJZm9yIChwdHIgPSByYXRlX3RhYmxlOyBwdHItPm1wdV9zcGVlZDsgcHRyKyspIHsKKwkJaWYgKHB0ci0+eHRhbF9zcGVlZCAhPSBzeXNfY2sucmF0ZSkKKwkJCWNvbnRpbnVlOworCisJCWhpZ2hlc3RfcmF0ZSA9IHB0ci0+bXB1X3NwZWVkOworCisJCS8qIENhbiBjaGVjayBvbmx5IGFmdGVyIHh0YWwgZnJlcXVlbmN5IGNoZWNrICovCisJCWlmIChwdHItPm1wdV9zcGVlZCA8PSByYXRlKQorCQkJYnJlYWs7CisJfQorCXJldHVybiBoaWdoZXN0X3JhdGU7Cit9CisKKy8qCisgKiBvbWFwMl9jb252ZXJ0X2ZpZWxkX3RvX2RpdigpIC0gdHVybiBmaWVsZCB2YWx1ZSBpbnRvIGludGVnZXIgZGl2aWRlcgorICovCitzdGF0aWMgdTMyIG9tYXAyX2Nsa3NlbF90b19kaXZpc29yKHUzMiBkaXZfc2VsLCB1MzIgZmllbGRfdmFsKQoreworCXUzMiBpOworCXUzMiBjbGtvdXRfYXJyYXlbXSA9IHsxLCAyLCA0LCA4LCAxNn07CisKKwlpZiAoKGRpdl9zZWwgJiBTUkNfUkFURV9TRUxfTUFTSykgPT0gQ01fU1lTQ0xLT1VUX1NFTDEpIHsKKwkJZm9yIChpID0gMDsgaSA8IDU7IGkrKykgeworCQkJaWYgKGZpZWxkX3ZhbCA9PSBpKQorCQkJCXJldHVybiBjbGtvdXRfYXJyYXlbaV07CisJCX0KKwkJcmV0dXJuIH4wOworCX0gZWxzZQorCQlyZXR1cm4gZmllbGRfdmFsOworfQorCisvKgorICogUmV0dXJucyB0aGUgQ0xLU0VMIGRpdmlkZXIgcmVnaXN0ZXIgdmFsdWUKKyAqIFJFVklTSVQ6IFRoaXMgc2hvdWxkIGJlIGNsZWFuZWQgdXAgdG8gd29yayBuaWNlbHkgd2l0aCB2b2lkIF9faW9tZW0gKgorICovCitzdGF0aWMgdTMyIG9tYXAyX2dldF9jbGtzZWwodTMyICpkaXZfc2VsLCB1MzIgKmZpZWxkX21hc2ssCisJCQkgICAgc3RydWN0IGNsayAqY2xrKQoreworCWludCByZXQgPSB+MDsKKwl1MzIgcmVnX3ZhbCwgZGl2X29mZjsKKwl1MzIgZGl2X2FkZHIgPSAwOworCXUzMiBtYXNrID0gfjA7CisKKwlkaXZfb2ZmID0gY2xrLT5yYXRlX29mZnNldDsKKworCXN3aXRjaCAoKCpkaXZfc2VsICYgU1JDX1JBVEVfU0VMX01BU0spKSB7CisJY2FzZSBDTV9NUFVfU0VMMToKKwkJZGl2X2FkZHIgPSAodTMyKSZDTV9DTEtTRUxfTVBVOworCQltYXNrID0gMHgxZjsKKwkJYnJlYWs7CisJY2FzZSBDTV9EU1BfU0VMMToKKwkJZGl2X2FkZHIgPSAodTMyKSZDTV9DTEtTRUxfRFNQOworCQlpZiAoY3B1X2lzX29tYXAyNDIwKCkpIHsKKwkJCWlmICgoZGl2X29mZiA9PSAwKSB8fCAoZGl2X29mZiA9PSA4KSkKKwkJCQltYXNrID0gMHgxZjsKKwkJCWVsc2UgaWYgKGRpdl9vZmYgPT0gNSkKKwkJCQltYXNrID0gMHgzOworCQl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMjQzMCgpKSB7CisJCQlpZiAoZGl2X29mZiA9PSAwKQorCQkJCW1hc2sgPSAweDFmOworCQkJZWxzZSBpZiAoZGl2X29mZiA9PSA1KQorCQkJCW1hc2sgPSAweDM7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBDTV9HRlhfU0VMMToKKwkJZGl2X2FkZHIgPSAodTMyKSZDTV9DTEtTRUxfR0ZYOworCQlpZiAoZGl2X29mZiA9PSAwKQorCQkJbWFzayA9IDB4NzsKKwkJYnJlYWs7CisJY2FzZSBDTV9NT0RFTV9TRUwxOgorCQlkaXZfYWRkciA9ICh1MzIpJkNNX0NMS1NFTF9NRE07CisJCWlmIChkaXZfb2ZmID09IDApCisJCQltYXNrID0gMHhmOworCQlicmVhazsKKwljYXNlIENNX1NZU0NMS09VVF9TRUwxOgorCQlkaXZfYWRkciA9ICh1MzIpJlBSQ01fQ0xLT1VUX0NUUkw7CisJCWlmICgoZGl2X29mZiA9PSAzKSB8fCAoZGl2X29mZiA9IDExKSkKKwkJCW1hc2s9IDB4MzsKKwkJYnJlYWs7CisJY2FzZSBDTV9DT1JFX1NFTDE6CisJCWRpdl9hZGRyID0gKHUzMikmQ01fQ0xLU0VMMV9DT1JFOworCQlzd2l0Y2ggKGRpdl9vZmYpIHsKKwkJY2FzZSAwOgkJCQkJLyogbDMgKi8KKwkJY2FzZSA4OgkJCQkJLyogZHNzMSAqLworCQljYXNlIDE1OgkJCQkvKiB2eWxuYy0yNDIwICovCisJCWNhc2UgMjA6CQkJCS8qIHNzaSAqLworCQkJbWFzayA9IDB4MWY7IGJyZWFrOworCQljYXNlIDU6CQkJCQkvKiBsNCAqLworCQkJbWFzayA9IDB4MzsgYnJlYWs7CisJCWNhc2UgMTM6CQkJCS8qIGRzczIgKi8KKwkJCW1hc2sgPSAweDE7IGJyZWFrOworCQljYXNlIDI1OgkJCQkvKiB1c2IgKi8KKwkJCW1hc2sgPSAweGY7IGJyZWFrOworCQl9CisJfQorCisJKmZpZWxkX21hc2sgPSBtYXNrOworCisJaWYgKHVubGlrZWx5KG1hc2sgPT0gfjApKQorCQlkaXZfYWRkciA9IDA7CisKKwkqZGl2X3NlbCA9IGRpdl9hZGRyOworCisJaWYgKHVubGlrZWx5KGRpdl9hZGRyID09IDApKQorCQlyZXR1cm4gcmV0OworCisJLyogSXNvbGF0ZSBmaWVsZCAqLworCXJlZ192YWwgPSBfX3Jhd19yZWFkbCgodm9pZCBfX2lvbWVtICopZGl2X2FkZHIpICYgKG1hc2sgPDwgZGl2X29mZik7CisKKwkvKiBOb3JtYWxpemUgYmFjayB0byBkaXZpZGVyIHZhbHVlICovCisJcmVnX3ZhbCA+Pj0gZGl2X29mZjsKKworCXJldHVybiByZWdfdmFsOworfQorCisvKgorICogUmV0dXJuIGRpdmlkZXIgdG8gYmUgYXBwbGllZCB0byBwYXJlbnQgY2xvY2suCisgKiBSZXR1cm4gMCBvbiBlcnJvci4KKyAqLworc3RhdGljIHUzMiBvbWFwMl9jbGtzZWxfZ2V0X2Rpdmlzb3Ioc3RydWN0IGNsayAqY2xrKQoreworCWludCByZXQgPSAwOworCXUzMiBkaXYsIGRpdl9zZWwsIGRpdl9vZmYsIGZpZWxkX21hc2ssIGZpZWxkX3ZhbDsKKworCS8qIGlzb2xhdGUgY29udHJvbCByZWdpc3RlciAqLworCWRpdl9zZWwgPSAoU1JDX1JBVEVfU0VMX01BU0sgJiBjbGstPmZsYWdzKTsKKworCWRpdl9vZmYgPSBjbGstPnJhdGVfb2Zmc2V0OworCWZpZWxkX3ZhbCA9IG9tYXAyX2dldF9jbGtzZWwoJmRpdl9zZWwsICZmaWVsZF9tYXNrLCBjbGspOworCWlmIChkaXZfc2VsID09IDApCisJCXJldHVybiByZXQ7CisKKwlkaXZfc2VsID0gKFNSQ19SQVRFX1NFTF9NQVNLICYgY2xrLT5mbGFncyk7CisJZGl2ID0gb21hcDJfY2xrc2VsX3RvX2Rpdmlzb3IoZGl2X3NlbCwgZmllbGRfdmFsKTsKKworCXJldHVybiBkaXY7Cit9CisKKy8qIFNldCB0aGUgY2xvY2sgcmF0ZSBmb3IgYSBjbG9jayBzb3VyY2UgKi8KK3N0YXRpYyBpbnQgb21hcDJfY2xrX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQorCit7CisJaW50IHJldCA9IC1FSU5WQUw7CisJdm9pZCBfX2lvbWVtICogcmVnOworCXUzMiBkaXZfc2VsLCBkaXZfb2ZmLCBmaWVsZF9tYXNrLCBmaWVsZF92YWwsIHJlZ192YWwsIHZhbGlkcmF0ZTsKKwl1MzIgbmV3X2RpdiA9IDA7CisKKwlpZiAoIShjbGstPmZsYWdzICYgQ09ORklHX1BBUlRJQ0lQQU5UKSAmJiAoY2xrLT5mbGFncyAmIFJBVEVfQ0tDVEwpKSB7CisJCWlmIChjbGsgPT0gJmRwbGxfY2spCisJCQlyZXR1cm4gb21hcDJfcmVwcm9ncmFtX2RwbGwoY2xrLCByYXRlKTsKKworCQkvKiBJc29sYXRlIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKwkJZGl2X3NlbCA9IChTUkNfUkFURV9TRUxfTUFTSyAmIGNsay0+ZmxhZ3MpOworCQlkaXZfb2ZmID0gY2xrLT5zcmNfb2Zmc2V0OworCisJCXZhbGlkcmF0ZSA9IG9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlKGNsaywgcmF0ZSwgJm5ld19kaXYpOworCQlpZih2YWxpZHJhdGUgIT0gcmF0ZSkKKwkJCXJldHVybihyZXQpOworCisJCWZpZWxkX3ZhbCA9IG9tYXAyX2dldF9jbGtzZWwoJmRpdl9zZWwsICZmaWVsZF9tYXNrLCBjbGspOworCQlpZiAoZGl2X3NlbCA9PSAwKQorCQkJcmV0dXJuIHJldDsKKworCQlpZihjbGstPmZsYWdzICYgQ01fU1lTQ0xLT1VUX1NFTDEpeworCQkJc3dpdGNoKG5ld19kaXYpeworCQkJY2FzZSAxNjogZmllbGRfdmFsID0gNDsgYnJlYWs7CisJCQljYXNlIDg6ICBmaWVsZF92YWwgPSAzOyBicmVhazsKKwkJCWNhc2UgNDogIGZpZWxkX3ZhbCA9IDI7IGJyZWFrOworCQkJY2FzZSAyOiAgZmllbGRfdmFsID0gMTsgYnJlYWs7CisJCQljYXNlIDE6ICBmaWVsZF92YWwgPSAwOyBicmVhazsKKwkJCX0KKwkJfQorCQllbHNlCisJCQlmaWVsZF92YWwgPSBuZXdfZGl2OworCisJCXJlZyA9ICh2b2lkIF9faW9tZW0gKilkaXZfc2VsOworCisJCXJlZ192YWwgPSBfX3Jhd19yZWFkbChyZWcpOworCQlyZWdfdmFsICY9IH4oZmllbGRfbWFzayA8PCBkaXZfb2ZmKTsKKwkJcmVnX3ZhbCB8PSAoZmllbGRfdmFsIDw8IGRpdl9vZmYpOworCisJCV9fcmF3X3dyaXRlbChyZWdfdmFsLCByZWcpOworCQljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvIGZpZWxkX3ZhbDsKKworCQlpZiAoY2xrLT5mbGFncyAmIERFTEFZRURfQVBQKQorCQkJX19yYXdfd3JpdGVsKDB4MSwgKHZvaWQgX19pb21lbSAqKSZQUkNNX0NMS0NGR19DVFJMKTsKKwkJcmV0ID0gMDsKKwl9IGVsc2UgaWYgKGNsay0+c2V0X3JhdGUgIT0gMCkKKwkJcmV0ID0gY2xrLT5zZXRfcmF0ZShjbGssIHJhdGUpOworCisJaWYgKHVubGlrZWx5KHJldCA9PSAwICYmIChjbGstPmZsYWdzICYgUkFURV9QUk9QQUdBVEVTKSkpCisJCXByb3BhZ2F0ZV9yYXRlKGNsayk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKiBDb252ZXJ0cyBlbmNvZGVkIGNvbnRyb2wgcmVnaXN0ZXIgYWRkcmVzcyBpbnRvIGEgZnVsbCBhZGRyZXNzICovCitzdGF0aWMgdTMyIG9tYXAyX2dldF9zcmNfZmllbGQodTMyICp0eXBlX3RvX2FkZHIsIHUzMiByZWdfb2Zmc2V0LAorCQkJICAgICAgIHN0cnVjdCBjbGsgKnNyY19jbGssIHUzMiAqZmllbGRfbWFzaykKK3sKKwl1MzIgdmFsID0gfjAsIHNyY19yZWdfYWRkciA9IDAsIG1hc2sgPSAwOworCisJLyogRmluZCB0YXJnZXQgY29udHJvbCByZWdpc3Rlci4qLworCXN3aXRjaCAoKCp0eXBlX3RvX2FkZHIgJiBTUkNfUkFURV9TRUxfTUFTSykpIHsKKwljYXNlIENNX0NPUkVfU0VMMToKKwkJc3JjX3JlZ19hZGRyID0gKHUzMikmQ01fQ0xLU0VMMV9DT1JFOworCQlpZiAocmVnX29mZnNldCA9PSAxMykgewkJCS8qIERTUzJfZmNsayAqLworCQkJbWFzayA9IDB4MTsKKwkJCWlmIChzcmNfY2xrID09ICZzeXNfY2spCisJCQkJdmFsID0gMDsKKwkJCWlmIChzcmNfY2xrID09ICZmdW5jXzQ4bV9jaykKKwkJCQl2YWwgPSAxOworCQl9IGVsc2UgaWYgKHJlZ19vZmZzZXQgPT0gOCkgewkJLyogRFNTMV9mY2xrICovCisJCQltYXNrID0gMHgxZjsKKwkJCWlmIChzcmNfY2xrID09ICZzeXNfY2spCisJCQkJdmFsID0gMDsKKwkJCWVsc2UgaWYgKHNyY19jbGsgPT0gJmNvcmVfY2spCS8qIGRpdmlkZWQgY2xvY2sgKi8KKwkJCQl2YWwgPSAweDEwOwkJLyogcmF0ZSBuZWVkcyBmaXhpbmcgKi8KKwkJfSBlbHNlIGlmICgocmVnX29mZnNldCA9PSAxNSkgJiYgY3B1X2lzX29tYXAyNDIwKCkpeyAvKnZsbnlxKi8KKwkJCW1hc2sgPSAweDFGOworCQkJaWYoc3JjX2NsayA9PSAmZnVuY185Nm1fY2spCisJCQkJdmFsID0gMDsKKwkJCWVsc2UgaWYgKHNyY19jbGsgPT0gJmNvcmVfY2spCisJCQkJdmFsID0gMHgxMDsKKwkJfQorCQlicmVhazsKKwljYXNlIENNX0NPUkVfU0VMMjoKKwkJc3JjX3JlZ19hZGRyID0gKHUzMikmQ01fQ0xLU0VMMl9DT1JFOworCQltYXNrID0gMHgzOworCQlpZiAoc3JjX2NsayA9PSAmZnVuY18zMmtfY2spCisJCQl2YWwgPSAweDA7CisJCWlmIChzcmNfY2xrID09ICZzeXNfY2spCisJCQl2YWwgPSAweDE7CisJCWlmIChzcmNfY2xrID09ICZhbHRfY2spCisJCQl2YWwgPSAweDI7CisJCWJyZWFrOworCWNhc2UgQ01fV0tVUF9TRUwxOgorCQlzcmNfcmVnX2FkZHIgPSAodTMyKSZDTV9DTEtTRUwyX0NPUkU7CisJCW1hc2sgPSAweDM7CisJCWlmIChzcmNfY2xrID09ICZmdW5jXzMya19jaykKKwkJCXZhbCA9IDB4MDsKKwkJaWYgKHNyY19jbGsgPT0gJnN5c19jaykKKwkJCXZhbCA9IDB4MTsKKwkJaWYgKHNyY19jbGsgPT0gJmFsdF9jaykKKwkJCXZhbCA9IDB4MjsKKwkJYnJlYWs7CisJY2FzZSBDTV9QTExfU0VMMToKKwkJc3JjX3JlZ19hZGRyID0gKHUzMikmQ01fQ0xLU0VMMV9QTEw7CisJCW1hc2sgPSAweDE7CisJCWlmIChyZWdfb2Zmc2V0ID09IDB4MykgeworCQkJaWYgKHNyY19jbGsgPT0gJmFwbGw5Nl9jaykKKwkJCQl2YWwgPSAwOworCQkJaWYgKHNyY19jbGsgPT0gJmFsdF9jaykKKwkJCQl2YWwgPSAxOworCQl9CisJCWVsc2UgaWYgKHJlZ19vZmZzZXQgPT0gMHg1KSB7CisJCQlpZiAoc3JjX2NsayA9PSAmYXBsbDU0X2NrKQorCQkJCXZhbCA9IDA7CisJCQlpZiAoc3JjX2NsayA9PSAmYWx0X2NrKQorCQkJCXZhbCA9IDE7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBDTV9QTExfU0VMMjoKKwkJc3JjX3JlZ19hZGRyID0gKHUzMikmQ01fQ0xLU0VMMl9QTEw7CisJCW1hc2sgPSAweDM7CisJCWlmIChzcmNfY2xrID09ICZmdW5jXzMya19jaykKKwkJCXZhbCA9IDB4MDsKKwkJaWYgKHNyY19jbGsgPT0gJmRwbGxfY2spCisJCQl2YWwgPSAweDI7CisJCWJyZWFrOworCWNhc2UgQ01fU1lTQ0xLT1VUX1NFTDE6CisJCXNyY19yZWdfYWRkciA9ICh1MzIpJlBSQ01fQ0xLT1VUX0NUUkw7CisJCW1hc2sgPSAweDM7CisJCWlmIChzcmNfY2xrID09ICZkcGxsX2NrKQorCQkJdmFsID0gMDsKKwkJaWYgKHNyY19jbGsgPT0gJnN5c19jaykKKwkJCXZhbCA9IDE7CisJCWlmIChzcmNfY2xrID09ICZmdW5jXzU0bV9jaykKKwkJCXZhbCA9IDI7CisJCWlmIChzcmNfY2xrID09ICZmdW5jXzk2bV9jaykKKwkJCXZhbCA9IDM7CisJCWJyZWFrOworCX0KKworCWlmICh2YWwgPT0gfjApCQkJLyogQ2F0Y2ggZXJyb3JzIGluIG9mZnNldCAqLworCQkqdHlwZV90b19hZGRyID0gMDsKKwllbHNlCisJCSp0eXBlX3RvX2FkZHIgPSBzcmNfcmVnX2FkZHI7CisJKmZpZWxkX21hc2sgPSBtYXNrOworCisJcmV0dXJuIHZhbDsKK30KKworc3RhdGljIGludCBvbWFwMl9jbGtfc2V0X3BhcmVudChzdHJ1Y3QgY2xrICpjbGssIHN0cnVjdCBjbGsgKm5ld19wYXJlbnQpCit7CisJdm9pZCBfX2lvbWVtICogcmVnOworCXUzMiBzcmNfc2VsLCBzcmNfb2ZmLCBmaWVsZF92YWwsIGZpZWxkX21hc2ssIHJlZ192YWwsIHJhdGU7CisJaW50IHJldCA9IC1FSU5WQUw7CisKKwlpZiAodW5saWtlbHkoY2xrLT5mbGFncyAmIENPTkZJR19QQVJUSUNJUEFOVCkpCisJCXJldHVybiByZXQ7CisKKwlpZiAoY2xrLT5mbGFncyAmIFNSQ19TRUxfTUFTSykgewkvKiBPbi1jaGlwIFNFTCBjb2xsZWN0aW9uICovCisJCXNyY19zZWwgPSAoU1JDX1JBVEVfU0VMX01BU0sgJiBjbGstPmZsYWdzKTsKKwkJc3JjX29mZiA9IGNsay0+c3JjX29mZnNldDsKKworCQlpZiAoc3JjX3NlbCA9PSAwKQorCQkJZ290byBzZXRfcGFyZW50X2Vycm9yOworCisJCWZpZWxkX3ZhbCA9IG9tYXAyX2dldF9zcmNfZmllbGQoJnNyY19zZWwsIHNyY19vZmYsIG5ld19wYXJlbnQsCisJCQkJCQkmZmllbGRfbWFzayk7CisKKwkJcmVnID0gKHZvaWQgX19pb21lbSAqKXNyY19zZWw7CisKKwkJaWYgKGNsay0+dXNlY291bnQgPiAwKQorCQkJb21hcDJfY2xrX2Rpc2FibGUoY2xrKTsKKworCQkvKiBTZXQgbmV3IHNvdXJjZSB2YWx1ZSAocHJldmlvdXMgZGl2aWRlcnMgaWYgYW55IGluIGVmZmVjdCkgKi8KKwkJcmVnX3ZhbCA9IF9fcmF3X3JlYWRsKHJlZykgJiB+KGZpZWxkX21hc2sgPDwgc3JjX29mZik7CisJCXJlZ192YWwgfD0gKGZpZWxkX3ZhbCA8PCBzcmNfb2ZmKTsKKwkJX19yYXdfd3JpdGVsKHJlZ192YWwsIHJlZyk7CisKKwkJaWYgKGNsay0+ZmxhZ3MgJiBERUxBWUVEX0FQUCkKKwkJCV9fcmF3X3dyaXRlbCgweDEsICh2b2lkIF9faW9tZW0gKikmUFJDTV9DTEtDRkdfQ1RSTCk7CisKKwkJaWYgKGNsay0+dXNlY291bnQgPiAwKQorCQkJb21hcDJfY2xrX2VuYWJsZShjbGspOworCisJCWNsay0+cGFyZW50ID0gbmV3X3BhcmVudDsKKworCQkvKiBTUkNfUkFURV9TRUxfTUFTSyBjbG9ja3MgZm9sbG93IHRoZWlyIHBhcmVudHMgcmF0ZXMuKi8KKwkJaWYgKChuZXdfcGFyZW50ID09ICZjb3JlX2NrKSAmJiAoY2xrID09ICZkc3MxX2ZjaykpCisJCQljbGstPnJhdGUgPSBuZXdfcGFyZW50LT5yYXRlIC8gMHgxMDsKKwkJZWxzZQorCQkJY2xrLT5yYXRlID0gbmV3X3BhcmVudC0+cmF0ZTsKKworCQlpZiAodW5saWtlbHkoY2xrLT5mbGFncyAmIFJBVEVfUFJPUEFHQVRFUykpCisJCQlwcm9wYWdhdGVfcmF0ZShjbGspOworCisJCXJldHVybiAwOworCX0gZWxzZSB7CisJCWNsay0+cGFyZW50ID0gbmV3X3BhcmVudDsKKwkJcmF0ZSA9IG5ld19wYXJlbnQtPnJhdGU7CisJCW9tYXAyX2Nsa19zZXRfcmF0ZShjbGssIHJhdGUpOworCQlyZXQgPSAwOworCX0KKworIHNldF9wYXJlbnRfZXJyb3I6CisJcmV0dXJuIHJldDsKK30KKworLyogU2V0cyBiYXNpYyBjbG9ja3MgYmFzZWQgb24gdGhlIHNwZWNpZmllZCByYXRlICovCitzdGF0aWMgaW50IG9tYXAyX3NlbGVjdF90YWJsZV9yYXRlKHN0cnVjdCBjbGsgKiBjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwl1MzIgZmxhZ3MsIGN1cl9yYXRlLCBkb25lX3JhdGUsIGJ5cGFzcyA9IDA7CisJdTggY3B1X21hc2sgPSAwOworCXN0cnVjdCBwcmNtX2NvbmZpZyAqcHJjbTsKKwl1bnNpZ25lZCBsb25nIGZvdW5kX3NwZWVkID0gMDsKKworCWlmIChjbGsgIT0gJnZpcnRfcHJjbV9zZXQpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogRklYTUU6IENoYW5nZSBjcHVfaXNfb21hcDI0MjAoKSB0byBjcHVfaXNfb21hcDI0MngoKSAqLworCWlmIChjcHVfaXNfb21hcDI0MjAoKSkKKwkJY3B1X21hc2sgPSBSQVRFX0lOXzI0Mlg7CisJZWxzZSBpZiAoY3B1X2lzX29tYXAyNDMwKCkpCisJCWNwdV9tYXNrID0gUkFURV9JTl8yNDNYOworCisJZm9yIChwcmNtID0gcmF0ZV90YWJsZTsgcHJjbS0+bXB1X3NwZWVkOyBwcmNtKyspIHsKKwkJaWYgKCEocHJjbS0+ZmxhZ3MgJiBjcHVfbWFzaykpCisJCQljb250aW51ZTsKKworCQlpZiAocHJjbS0+eHRhbF9zcGVlZCAhPSBzeXNfY2sucmF0ZSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChwcmNtLT5tcHVfc3BlZWQgPD0gcmF0ZSkgeworCQkJZm91bmRfc3BlZWQgPSBwcmNtLT5tcHVfc3BlZWQ7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICghZm91bmRfc3BlZWQpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiQ291bGQgbm90IHNldCBNUFUgcmF0ZSB0byAlbHVNSHpcbiIsCisJIHJhdGUgLyAxMDAwMDAwKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJY3Vycl9wcmNtX3NldCA9IHByY207CisJY3VyX3JhdGUgPSBvbWFwMl9nZXRfZHBsbF9yYXRlKCZkcGxsX2NrKTsKKworCWlmIChwcmNtLT5kcGxsX3NwZWVkID09IGN1cl9yYXRlIC8gMikgeworCQlvbWFwMl9yZXByb2dyYW1fc2RyYyhQUkNNX0hBTEZfU1BFRUQsIDEpOworCX0gZWxzZSBpZiAocHJjbS0+ZHBsbF9zcGVlZCA9PSBjdXJfcmF0ZSAqIDIpIHsKKwkJb21hcDJfcmVwcm9ncmFtX3NkcmMoUFJDTV9GVUxMX1NQRUVELCAxKTsKKwl9IGVsc2UgaWYgKHByY20tPmRwbGxfc3BlZWQgIT0gY3VyX3JhdGUpIHsKKwkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJCWlmIChwcmNtLT5kcGxsX3NwZWVkID09IHByY20tPnh0YWxfc3BlZWQpCisJCQlieXBhc3MgPSAxOworCisJCWlmICgocHJjbS0+Y21fY2xrc2VsMl9wbGwgJiAweDMpID09IDIpCisJCQlkb25lX3JhdGUgPSBQUkNNX0ZVTExfU1BFRUQ7CisJCWVsc2UKKwkJCWRvbmVfcmF0ZSA9IFBSQ01fSEFMRl9TUEVFRDsKKworCQkvKiBNUFUgZGl2aWRlciAqLworCQlDTV9DTEtTRUxfTVBVID0gcHJjbS0+Y21fY2xrc2VsX21wdTsKKworCQkvKiBkc3AgKyBpdmExIGRpdigyNDIwKSwgaXZhMi4xKDI0MzApICovCisJCUNNX0NMS1NFTF9EU1AgPSBwcmNtLT5jbV9jbGtzZWxfZHNwOworCisJCUNNX0NMS1NFTF9HRlggPSBwcmNtLT5jbV9jbGtzZWxfZ2Z4OworCisJCS8qIE1ham9yIHN1YnN5c3RlbSBkaXZpZGVycyAqLworCQlDTV9DTEtTRUwxX0NPUkUgPSBwcmNtLT5jbV9jbGtzZWwxX2NvcmU7CisJCWlmIChjcHVfaXNfb21hcDI0MzAoKSkKKwkJCUNNX0NMS1NFTF9NRE0gPSBwcmNtLT5jbV9jbGtzZWxfbWRtOworCisJCS8qIHgyIHRvIGVudGVyIGluaXRfbWVtICovCisJCW9tYXAyX3JlcHJvZ3JhbV9zZHJjKFBSQ01fRlVMTF9TUEVFRCwgMSk7CisKKwkJb21hcDJfc2V0X3ByY20ocHJjbS0+Y21fY2xrc2VsMV9wbGwsIHByY20tPmJhc2Vfc2RyY19yZnIsCisJCQkgICAgICAgYnlwYXNzKTsKKworCQlvbWFwMl9pbml0X21lbW9yeV9wYXJhbXMob21hcDJfZGxsX2ZvcmNlX25lZWRlZCgpKTsKKwkJb21hcDJfcmVwcm9ncmFtX3NkcmMoZG9uZV9yYXRlLCAwKTsKKworCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJfQorCW9tYXAyX2Nsa3NlbF9yZWNhbGMoJmRwbGxfY2spOworCisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogT21hcDIgY2xvY2sgcmVzZXQgYW5kIGluaXQgZnVuY3Rpb25zCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgc3RydWN0IGNsa19mdW5jdGlvbnMgb21hcDJfY2xrX2Z1bmN0aW9ucyA9IHsKKwkuY2xrX2VuYWJsZQkJPSBvbWFwMl9jbGtfZW5hYmxlLAorCS5jbGtfZGlzYWJsZQkJPSBvbWFwMl9jbGtfZGlzYWJsZSwKKwkuY2xrX3VzZQkJPSBvbWFwMl9jbGtfdXNlLAorCS5jbGtfdW51c2UJCT0gb21hcDJfY2xrX3VudXNlLAorCS5jbGtfcm91bmRfcmF0ZQkJPSBvbWFwMl9jbGtfcm91bmRfcmF0ZSwKKwkuY2xrX3NldF9yYXRlCQk9IG9tYXAyX2Nsa19zZXRfcmF0ZSwKKwkuY2xrX3NldF9wYXJlbnQJCT0gb21hcDJfY2xrX3NldF9wYXJlbnQsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgb21hcDJfZ2V0X2NyeXN0YWxfcmF0ZShzdHJ1Y3QgY2xrICpvc2MsIHN0cnVjdCBjbGsgKnN5cykKK3sKKwl1MzIgZGl2LCBhcGxscywgc2NsayA9IDEzMDAwMDAwOworCisJYXBsbHMgPSBDTV9DTEtTRUwxX1BMTDsKKwlhcGxscyAmPSAoKDEgPDwgMjMpIHwgKDEgPDwgMjQpIHwgKDEgPDwgMjUpKTsKKwlhcGxscyA+Pj0gMjM7CQkJLyogSXNvbGF0ZSBmaWVsZCwgMCwyLDMgKi8KKworCWlmIChhcGxscyA9PSAwKQorCQlzY2xrID0gMTkyMDAwMDA7CisJZWxzZSBpZiAoYXBsbHMgPT0gMikKKwkJc2NsayA9IDEzMDAwMDAwOworCWVsc2UgaWYgKGFwbGxzID09IDMpCisJCXNjbGsgPSAxMjAwMDAwMDsKKworCWRpdiA9IFBSQ01fQ0xLU1JDX0NUUkw7CisJZGl2ICY9ICgoMSA8PCA3KSB8ICgxIDw8IDYpKTsKKwlkaXYgPj49IHN5cy0+cmF0ZV9vZmZzZXQ7CisKKwlvc2MtPnJhdGUgPSBzY2xrICogZGl2OworCXN5cy0+cmF0ZSA9IHNjbGs7Cit9CisKKyNpZmRlZiBDT05GSUdfT01BUF9SRVNFVF9DTE9DS1MKK3N0YXRpYyB2b2lkIF9faW5pdCBvbWFwMl9kaXNhYmxlX3VudXNlZF9jbG9ja3Modm9pZCkKK3sKKwlzdHJ1Y3QgY2xrICpjazsKKwl1MzIgcmVndmFsMzI7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNrLCAmY2xvY2tzLCBub2RlKSB7CisJCWlmIChjay0+dXNlY291bnQgPiAwIHx8IChjay0+ZmxhZ3MgJiBBTFdBWVNfRU5BQkxFRCkgfHwKKwkJCWNrLT5lbmFibGVfcmVnID09IDApCisJCQljb250aW51ZTsKKworCQlyZWd2YWwzMiA9IF9fcmF3X3JlYWRsKGNrLT5lbmFibGVfcmVnKTsKKwkJaWYgKChyZWd2YWwzMiAmICgxIDw8IGNrLT5lbmFibGVfYml0KSkgPT0gMCkKKwkJCWNvbnRpbnVlOworCisJCXByaW50ayhLRVJOX0lORk8gIkRpc2FibGluZyB1bnVzZWQgY2xvY2sgXCIlc1wiXG4iLCBjay0+bmFtZSk7CisJCW9tYXAyX2Nsa19kaXNhYmxlKGNrKTsKKwl9Cit9CitsYXRlX2luaXRjYWxsKG9tYXAyX2Rpc2FibGVfdW51c2VkX2Nsb2Nrcyk7CisjZW5kaWYKKworLyoKKyAqIFN3aXRjaCB0aGUgTVBVIHJhdGUgaWYgc3BlY2lmaWVkIG9uIGNtZGxpbmUuCisgKiBXZSBjYW5ub3QgZG8gdGhpcyBlYXJseSB1bnRpbCBjbWRsaW5lIGlzIHBhcnNlZC4KKyAqLworc3RhdGljIGludCBfX2luaXQgb21hcDJfY2xrX2FyY2hfaW5pdCh2b2lkKQoreworCWlmICghbXB1cmF0ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAob21hcDJfc2VsZWN0X3RhYmxlX3JhdGUoJnZpcnRfcHJjbV9zZXQsIG1wdXJhdGUpKQorCQlwcmludGsoS0VSTl9FUlIgIkNvdWxkIG5vdCBmaW5kIG1hdGNoaW5nIE1QVSByYXRlXG4iKTsKKworCXByb3BhZ2F0ZV9yYXRlKCZvc2NfY2spOwkJLyogdXBkYXRlIG1haW4gcm9vdCBmYXN0ICovCisJcHJvcGFnYXRlX3JhdGUoJmZ1bmNfMzJrX2NrKTsJCS8qIHVwZGF0ZSBtYWluIHJvb3Qgc2xvdyAqLworCisJcHJpbnRrKEtFUk5fSU5GTyAiU3dpdGNoZWQgdG8gbmV3IGNsb2NraW5nIHJhdGUgKENyeXN0YWwvRFBMTC9NUFUpOiAiCisJICAgICAgICIlbGQuJTAxbGQvJWxkLyVsZCBNSHpcbiIsCisJICAgICAgIChzeXNfY2sucmF0ZSAvIDEwMDAwMDApLCAoc3lzX2NrLnJhdGUgLyAxMDAwMDApICUgMTAsCisJICAgICAgIChkcGxsX2NrLnJhdGUgLyAxMDAwMDAwKSwgKG1wdV9jay5yYXRlIC8gMTAwMDAwMCkpIDsKKworCXJldHVybiAwOworfQorYXJjaF9pbml0Y2FsbChvbWFwMl9jbGtfYXJjaF9pbml0KTsKKworaW50IF9faW5pdCBvbWFwMl9jbGtfaW5pdCh2b2lkKQoreworCXN0cnVjdCBwcmNtX2NvbmZpZyAqcHJjbTsKKwlzdHJ1Y3QgY2xrICoqIGNsa3A7CisJdTMyIGNsa3JhdGU7CisKKwljbGtfaW5pdCgmb21hcDJfY2xrX2Z1bmN0aW9ucyk7CisJb21hcDJfZ2V0X2NyeXN0YWxfcmF0ZSgmb3NjX2NrLCAmc3lzX2NrKTsKKworCWZvciAoY2xrcCA9IG9uY2hpcF9jbGtzOyBjbGtwIDwgb25jaGlwX2Nsa3MgKyBBUlJBWV9TSVpFKG9uY2hpcF9jbGtzKTsKKwkgICAgIGNsa3ArKykgeworCisJCWlmICgoKmNsa3ApLT5mbGFncyAmIENMT0NLX0lOX09NQVAyNDJYICYmIGNwdV9pc19vbWFwMjQyMCgpKSB7CisJCQljbGtfcmVnaXN0ZXIoKmNsa3ApOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoKCpjbGtwKS0+ZmxhZ3MgJiBDTE9DS19JTl9PTUFQMjQzWCAmJiBjcHVfaXNfb21hcDI0MzAoKSkgeworCQkJY2xrX3JlZ2lzdGVyKCpjbGtwKTsKKwkJCWNvbnRpbnVlOworCQl9CisJfQorCisJLyogQ2hlY2sgdGhlIE1QVSByYXRlIHNldCBieSBib290bG9hZGVyICovCisJY2xrcmF0ZSA9IG9tYXAyX2dldF9kcGxsX3JhdGUoJmRwbGxfY2spOworCWZvciAocHJjbSA9IHJhdGVfdGFibGU7IHByY20tPm1wdV9zcGVlZDsgcHJjbSsrKSB7CisJCWlmIChwcmNtLT54dGFsX3NwZWVkICE9IHN5c19jay5yYXRlKQorCQkJY29udGludWU7CisJCWlmIChwcmNtLT5kcGxsX3NwZWVkIDw9IGNsa3JhdGUpCisJCQkgYnJlYWs7CisJfQorCWN1cnJfcHJjbV9zZXQgPSBwcmNtOworCisJcHJvcGFnYXRlX3JhdGUoJm9zY19jayk7CQkvKiB1cGRhdGUgbWFpbiByb290IGZhc3QgKi8KKwlwcm9wYWdhdGVfcmF0ZSgmZnVuY18zMmtfY2spOwkJLyogdXBkYXRlIG1haW4gcm9vdCBzbG93ICovCisKKwlwcmludGsoS0VSTl9JTkZPICJDbG9ja2luZyByYXRlIChDcnlzdGFsL0RQTEwvTVBVKTogIgorCSAgICAgICAiJWxkLiUwMWxkLyVsZC8lbGQgTUh6XG4iLAorCSAgICAgICAoc3lzX2NrLnJhdGUgLyAxMDAwMDAwKSwgKHN5c19jay5yYXRlIC8gMTAwMDAwKSAlIDEwLAorCSAgICAgICAoZHBsbF9jay5yYXRlIC8gMTAwMDAwMCksIChtcHVfY2sucmF0ZSAvIDEwMDAwMDApKSA7CisKKwkvKgorCSAqIE9ubHkgZW5hYmxlIHRob3NlIGNsb2NrcyB3ZSB3aWxsIG5lZWQsIGxldCB0aGUgZHJpdmVycworCSAqIGVuYWJsZSBvdGhlciBjbG9ja3MgYXMgbmVjZXNzYXJ5CisJICovCisJY2xrX3VzZSgmc3luY18zMmtfaWNrKTsKKwljbGtfdXNlKCZvbWFwY3RybF9pY2spOworCWlmIChjcHVfaXNfb21hcDI0MzAoKSkKKwkJY2xrX3VzZSgmc2RyY19pY2spOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFlYWI1NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2suaApAQCAtMCwwICsxLDIxMDMgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwMjR4eC9jbG9jay5oCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNSBUZXhhcyBJbnN0cnVtZW50cyBJbmMuCisgKiAgUmljaGFyZCBXb29kcnVmZiA8ci13b29kcnVmZjJAdGkuY29tPgorICogIENyZWF0ZWQgZm9yIE9NQVAyLgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQgTm9raWEgY29ycG9yYXRpb24KKyAqICBXcml0dGVuIGJ5IFR1dWtrYSBUaWtrYW5lbiA8dHV1a2thLnRpa2thbmVuQGVsZWt0cm9iaXQuY29tPgorICogIEJhc2VkIG9uIGNsb2Nrcy5oIGJ5IFRvbnkgTGluZGdyZW4sIEdvcmRvbiBNY051dHQgYW5kIFJpZGdlUnVuLCBJbmMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19BUkNIX0FSTV9NQUNIX09NQVAyX0NMT0NLX0gKKyNkZWZpbmUgX19BUkNIX0FSTV9NQUNIX09NQVAyX0NMT0NLX0gKKworc3RhdGljIHZvaWQgb21hcDJfc3lzX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqIGNsayk7CitzdGF0aWMgdm9pZCBvbWFwMl9jbGtzZWxfcmVjYWxjKHN0cnVjdCBjbGsgKiBjbGspOworc3RhdGljIHZvaWQgb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYyhzdHJ1Y3QgY2xrICogY2xrKTsKK3N0YXRpYyB2b2lkIG9tYXAyX3Byb3BhZ2F0ZV9yYXRlKHN0cnVjdCBjbGsgKiBjbGspOworc3RhdGljIHZvaWQgb21hcDJfbXB1X3JlY2FsYyhzdHJ1Y3QgY2xrICogY2xrKTsKK3N0YXRpYyBpbnQgb21hcDJfc2VsZWN0X3RhYmxlX3JhdGUoc3RydWN0IGNsayAqIGNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKK3N0YXRpYyBsb25nIG9tYXAyX3JvdW5kX3RvX3RhYmxlX3JhdGUoc3RydWN0IGNsayAqIGNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKK3N0YXRpYyB2b2lkIG9tYXAyX2Nsa191bnVzZShzdHJ1Y3QgY2xrICpjbGspOworc3RhdGljIHZvaWQgb21hcDJfc3lzX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqIGNsayk7CitzdGF0aWMgdTMyIG9tYXAyX2Nsa3NlbF90b19kaXZpc29yKHUzMiBkaXZfc2VsLCB1MzIgZmllbGRfdmFsKTsKK3N0YXRpYyB1MzIgb21hcDJfY2xrc2VsX2dldF9kaXZpc29yKHN0cnVjdCBjbGsgKmNsayk7CisKKworI2RlZmluZSBSQVRFX0lOXzI0MlgJKDEgPDwgMCkKKyNkZWZpbmUgUkFURV9JTl8yNDNYCSgxIDw8IDEpCisKKy8qIE1lbW9yeSB0aW1pbmdzICovCisjZGVmaW5lIE1fRERSCQkxCisjZGVmaW5lIE1fTE9DS19DVFJMCSgxIDw8IDIpCisjZGVmaW5lIE1fVU5MT0NLCTAKKyNkZWZpbmUgTV9MT0NLCQkxCisKK3N0cnVjdCBtZW1vcnlfdGltaW5ncyB7CisJdTMyIG1fdHlwZTsJCS8qIGRkciA9IDEsIHNkciA9IDAgKi8KKwl1MzIgZGxsX21vZGU7CQkvKiB1c2UgbG9jayBtb2RlID0gMSwgdW5sb2NrIG1vZGUgPSAwICovCisJdTMyIHNsb3dfZGxsX2N0cmw7CS8qIHVubG9jayBtb2RlLCBkbGwgdmFsdWUgZm9yIHNsb3cgc3BlZWQgKi8KKwl1MzIgZmFzdF9kbGxfY3RybDsJLyogdW5sb2NrIG1vZGUsIGRsbCB2YWx1ZSBmb3IgZmFzdCBzcGVlZCAqLworCXUzMiBiYXNlX2NzOwkJLyogYmFzZSBjaGlwIHNlbGVjdCB0byB1c2UgZm9yIGNhbGN1bGF0aW9ucyAqLworfTsKKworLyogS2V5IGRpdmlkZXJzIHdoaWNoIG1ha2UgdXAgYSBQUkNNIHNldC4gUmF0aW8ncyBmb3IgYSBQUkNNIGFyZSBtYW5kYXRlZC4KKyAqIHh0YWxfc3BlZWQsIGRwbGxfc3BlZWQsIG1wdV9zcGVlZCwgQ01fQ0xLU0VMX01QVSxDTV9DTEtTRUxfRFNQCisgKiBDTV9DTEtTRUxfR0ZYLCBDTV9DTEtTRUwxX0NPUkUsIENNX0NMS1NFTDFfUExMIENNX0NMS1NFTDJfUExMLCBDTV9DTEtTRUxfTURNCisgKi8KK3N0cnVjdCBwcmNtX2NvbmZpZyB7CisJdW5zaWduZWQgbG9uZyB4dGFsX3NwZWVkOwkvKiBjcnlzdGFsIHJhdGUgKi8KKwl1bnNpZ25lZCBsb25nIGRwbGxfc3BlZWQ7CS8qIGRwbGw6IG91dCp4dGFsKk0vKE4tMSl0YWJsZV9yZWNhbGMgKi8KKwl1bnNpZ25lZCBsb25nIG1wdV9zcGVlZDsJLyogc3BlZWQgb2YgTVBVICovCisJdW5zaWduZWQgbG9uZyBjbV9jbGtzZWxfbXB1OwkvKiBtcHUgZGl2aWRlciAqLworCXVuc2lnbmVkIGxvbmcgY21fY2xrc2VsX2RzcDsJLyogZHNwK2l2YTEgZGl2KDI0MjApLCBpdmEyLjEoMjQzMCkgKi8KKwl1bnNpZ25lZCBsb25nIGNtX2Nsa3NlbF9nZng7CS8qIGdmeCBkaXZpZGVycyAqLworCXVuc2lnbmVkIGxvbmcgY21fY2xrc2VsMV9jb3JlOwkvKiBtYWpvciBzdWJzeXN0ZW0gZGl2aWRlcnMgKi8KKwl1bnNpZ25lZCBsb25nIGNtX2Nsa3NlbDFfcGxsOwkvKiBtLG4gKi8KKwl1bnNpZ25lZCBsb25nIGNtX2Nsa3NlbDJfcGxsOwkvKiBkcGxseDEgb3IgeDIgb3V0ICovCisJdW5zaWduZWQgbG9uZyBjbV9jbGtzZWxfbWRtOwkvKiBtb2RlbSBkaXZpZGVycyAyNDMwIG9ubHkgKi8KKwl1bnNpZ25lZCBsb25nIGJhc2Vfc2RyY19yZnI7CS8qIGJhc2UgcmVmcmVzaCB0aW1pbmcgZm9yIGEgc2V0ICovCisJdW5zaWduZWQgY2hhciBmbGFnczsKK307CisKKy8qIE1hc2sgZm9yIGNsa3NlbCB3aGljaCBzdXBwb3J0IHBhcmVudCBzZXR0aWduIGluIHNldF9yYXRlICovCisjZGVmaW5lIFNSQ19TRUxfTUFTSyAoQ01fQ09SRV9TRUwxIHwgQ01fQ09SRV9TRUwyIHwgQ01fV0tVUF9TRUwxIHwgXAorCQkJQ01fUExMX1NFTDEgfCBDTV9QTExfU0VMMiB8IENNX1NZU0NMS09VVF9TRUwxKQorCisvKiBNYXNrIGZvciBjbGtzZWwgcmVncyB3aGljaCBzdXBwb3J0IHJhdGUgb3BlcmF0aW9ucyAqLworI2RlZmluZSBTUkNfUkFURV9TRUxfTUFTSyAoQ01fTVBVX1NFTDEgfCBDTV9EU1BfU0VMMSB8IENNX0dGWF9TRUwxIHwgXAorCQkJQ01fTU9ERU1fU0VMMSB8IENNX0NPUkVfU0VMMSB8IENNX0NPUkVfU0VMMiB8IFwKKwkJCUNNX1dLVVBfU0VMMSB8IENNX1BMTF9TRUwxIHwgQ01fUExMX1NFTDIgfCBcCisJCQlDTV9TWVNDTEtPVVRfU0VMMSkKKworLyoKKyAqIFRoZSBPTUFQMiBwcm9jZXNzb3IgY2FuIGJlIHJ1biBhdCBzZXZlcmFsIGRpc2NyZXRlICdQUkNNIGNvbmZpZ3VyYXRpb25zJy4KKyAqIFRoZXNlIGNvbmZpZ3VyYXRpb25zIGFyZSBjaGFyYWN0ZXJpemVkIGJ5IHZvbHRhZ2UgYW5kIHNwZWVkIGZvciBjbG9ja3MuCisgKiBUaGUgZGV2aWNlIGlzIG9ubHkgdmFsaWRhdGVkIGZvciBjZXJ0YWluIGNvbWJpbmF0aW9ucy4gT25lIHdheSB0byBleHByZXNzCisgKiB0aGVzZSBjb21iaW5hdGlvbnMgaXMgdmlhIHRoZSAncmF0aW8ncycgd2hpY2ggdGhlIGNsb2NrcyBvcGVyYXRlIHdpdGgKKyAqIHJlc3BlY3QgdG8gZWFjaCBvdGhlci4gVGhlc2UgcmF0aW8gc2V0cyBhcmUgZm9yIGEgZ2l2ZW4gdm9sdGFnZS9EUExMCisgKiBzZXR0aW5nLiBBbGwgY29uZmlndXJhdGlvbnMgY2FuIGJlIGRlc2NyaWJlZCBieSBhIERQTEwgc2V0dGluZyBhbmQgYSByYXRpbworICogVGhlcmUgYXJlIDMgcmF0aW8gc2V0cyBmb3IgdGhlIDI0MzAgYW5kIFggcmF0aW8gc2V0cyBmb3IgMjQyMC4KKyAqCisgKiAyNDMwIGRpZmZlcnMgZnJvbSAyNDIwIGluIHRoYXQgdGhlcmUgYXJlIG5vIG1vcmUgcGhhc2Ugc3luY2hyb25pemVycyB1c2VkLgorICogVGhleSBib3RoIGhhdmUgYSBzbGlnaHRseSBkaWZmZXJlbnQgY2xvY2sgZG9tYWluIHNldHVwLiAyNDIwKGl2YTEsZHNwKSB2cworICogMjQzMCAoaXZhMi4xLCBOT2RzcCwgbWRtKQorICovCisKKy8qIENvcmUgZmllbGRzIGZvciBjbV9jbGtzZWwsIG5vdCByYXRpbyBnb3Zlcm5lZCAqLworI2RlZmluZSBSWF9DTEtTRUxfRFNTMQkJCSgweDEwIDw8IDgpCisjZGVmaW5lIFJYX0NMS1NFTF9EU1MyCQkJKDB4MCA8PCAxMykKKyNkZWZpbmUgUlhfQ0xLU0VMX1NTSQkJCSgweDUgPDwgMjApCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVm9sdGFnZS9EUExMIHJhdGlvcworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogMjQzMCBSYXRpbydzLCAyNDMwLVJhdGlvIENvbmZpZyAxICovCisjZGVmaW5lIFIxX0NMS1NFTF9MMwkJCSg0IDw8IDApCisjZGVmaW5lIFIxX0NMS1NFTF9MNAkJCSgyIDw8IDUpCisjZGVmaW5lIFIxX0NMS1NFTF9VU0IJCQkoNCA8PCAyNSkKKyNkZWZpbmUgUjFfQ01fQ0xLU0VMMV9DT1JFX1ZBTAkJUjFfQ0xLU0VMX1VTQiB8IFJYX0NMS1NFTF9TU0kgfCBcCisJCQkJCVJYX0NMS1NFTF9EU1MyIHwgUlhfQ0xLU0VMX0RTUzEgfCBcCisJCQkJCVIxX0NMS1NFTF9MNCB8IFIxX0NMS1NFTF9MMworI2RlZmluZSBSMV9DTEtTRUxfTVBVCQkJKDIgPDwgMCkKKyNkZWZpbmUgUjFfQ01fQ0xLU0VMX01QVV9WQUwJCVIxX0NMS1NFTF9NUFUKKyNkZWZpbmUgUjFfQ0xLU0VMX0RTUAkJCSgyIDw8IDApCisjZGVmaW5lIFIxX0NMS1NFTF9EU1BfSUYJCSgyIDw8IDUpCisjZGVmaW5lIFIxX0NNX0NMS1NFTF9EU1BfVkFMCQlSMV9DTEtTRUxfRFNQIHwgUjFfQ0xLU0VMX0RTUF9JRgorI2RlZmluZSBSMV9DTEtTRUxfR0ZYCQkJKDIgPDwgMCkKKyNkZWZpbmUgUjFfQ01fQ0xLU0VMX0dGWF9WQUwJCVIxX0NMS1NFTF9HRlgKKyNkZWZpbmUgUjFfQ0xLU0VMX01ETQkJCSg0IDw8IDApCisjZGVmaW5lIFIxX0NNX0NMS1NFTF9NRE1fVkFMCQlSMV9DTEtTRUxfTURNCisKKy8qIDI0MzAtUmF0aW8gQ29uZmlnIDIgKi8KKyNkZWZpbmUgUjJfQ0xLU0VMX0wzCQkJKDYgPDwgMCkKKyNkZWZpbmUgUjJfQ0xLU0VMX0w0CQkJKDIgPDwgNSkKKyNkZWZpbmUgUjJfQ0xLU0VMX1VTQgkJCSgyIDw8IDI1KQorI2RlZmluZSBSMl9DTV9DTEtTRUwxX0NPUkVfVkFMCQlSMl9DTEtTRUxfVVNCIHwgUlhfQ0xLU0VMX1NTSSB8IFwKKwkJCQkJUlhfQ0xLU0VMX0RTUzIgfCBSWF9DTEtTRUxfRFNTMSB8IFwKKwkJCQkJUjJfQ0xLU0VMX0w0IHwgUjJfQ0xLU0VMX0wzCisjZGVmaW5lIFIyX0NMS1NFTF9NUFUJCQkoMiA8PCAwKQorI2RlZmluZSBSMl9DTV9DTEtTRUxfTVBVX1ZBTAkJUjJfQ0xLU0VMX01QVQorI2RlZmluZSBSMl9DTEtTRUxfRFNQCQkJKDIgPDwgMCkKKyNkZWZpbmUgUjJfQ0xLU0VMX0RTUF9JRgkJKDMgPDwgNSkKKyNkZWZpbmUgUjJfQ01fQ0xLU0VMX0RTUF9WQUwJCVIyX0NMS1NFTF9EU1AgfCBSMl9DTEtTRUxfRFNQX0lGCisjZGVmaW5lIFIyX0NMS1NFTF9HRlgJCQkoMiA8PCAwKQorI2RlZmluZSBSMl9DTV9DTEtTRUxfR0ZYX1ZBTAkJUjJfQ0xLU0VMX0dGWAorI2RlZmluZSBSMl9DTEtTRUxfTURNCQkJKDYgPDwgMCkKKyNkZWZpbmUgUjJfQ01fQ0xLU0VMX01ETV9WQUwJCVIyX0NMS1NFTF9NRE0KKworLyogMjQzMC1SYXRpbyBCb290bSAoQllQQVNTKSAqLworI2RlZmluZSBSQl9DTEtTRUxfTDMJCQkoMSA8PCAwKQorI2RlZmluZSBSQl9DTEtTRUxfTDQJCQkoMSA8PCA1KQorI2RlZmluZSBSQl9DTEtTRUxfVVNCCQkJKDEgPDwgMjUpCisjZGVmaW5lIFJCX0NNX0NMS1NFTDFfQ09SRV9WQUwJCVJCX0NMS1NFTF9VU0IgfCBSWF9DTEtTRUxfU1NJIHwgXAorCQkJCQlSWF9DTEtTRUxfRFNTMiB8IFJYX0NMS1NFTF9EU1MxIHwgXAorCQkJCQlSQl9DTEtTRUxfTDQgfCBSQl9DTEtTRUxfTDMKKyNkZWZpbmUgUkJfQ0xLU0VMX01QVQkJCSgxIDw8IDApCisjZGVmaW5lIFJCX0NNX0NMS1NFTF9NUFVfVkFMCQlSQl9DTEtTRUxfTVBVCisjZGVmaW5lIFJCX0NMS1NFTF9EU1AJCQkoMSA8PCAwKQorI2RlZmluZSBSQl9DTEtTRUxfRFNQX0lGCQkoMSA8PCA1KQorI2RlZmluZSBSQl9DTV9DTEtTRUxfRFNQX1ZBTAkJUkJfQ0xLU0VMX0RTUCB8IFJCX0NMS1NFTF9EU1BfSUYKKyNkZWZpbmUgUkJfQ0xLU0VMX0dGWAkJCSgxIDw8IDApCisjZGVmaW5lIFJCX0NNX0NMS1NFTF9HRlhfVkFMCQlSQl9DTEtTRUxfR0ZYCisjZGVmaW5lIFJCX0NMS1NFTF9NRE0JCQkoMSA8PCAwKQorI2RlZmluZSBSQl9DTV9DTEtTRUxfTURNX1ZBTAkJUkJfQ0xLU0VMX01ETQorCisvKiAyNDIwIFJhdGlvIEVxdWl2YWxlbnRzICovCisjZGVmaW5lIFJYWF9DTEtTRUxfVkxZTlEJCSgweDEyIDw8IDE1KQorI2RlZmluZSBSWFhfQ0xLU0VMX1NTSQkJCSgweDggPDwgMjApCisKKy8qIDI0MjAtUFJDTSBJSUkgNTMyTUh6IGNvcmUgKi8KKyNkZWZpbmUgUklJSV9DTEtTRUxfTDMJCQkoNCA8PCAwKQkvKiAxMzNNSHogKi8KKyNkZWZpbmUgUklJSV9DTEtTRUxfTDQJCQkoMiA8PCA1KQkvKiA2Ni41TUh6ICovCisjZGVmaW5lIFJJSUlfQ0xLU0VMX1VTQgkJCSg0IDw8IDI1KQkvKiAzMy4yNU1IeiAqLworI2RlZmluZSBSSUlJX0NNX0NMS1NFTDFfQ09SRV9WQUwJUklJSV9DTEtTRUxfVVNCIHwgUlhYX0NMS1NFTF9TU0kgfCBcCisJCQkJCVJYWF9DTEtTRUxfVkxZTlEgfCBSWF9DTEtTRUxfRFNTMiB8IFwKKwkJCQkJUlhfQ0xLU0VMX0RTUzEgfCBSSUlJX0NMS1NFTF9MNCB8IFwKKwkJCQkJUklJSV9DTEtTRUxfTDMKKyNkZWZpbmUgUklJSV9DTEtTRUxfTVBVCQkJKDIgPDwgMCkJLyogMjY2TUh6ICovCisjZGVmaW5lIFJJSUlfQ01fQ0xLU0VMX01QVV9WQUwJCVJJSUlfQ0xLU0VMX01QVQorI2RlZmluZSBSSUlJX0NMS1NFTF9EU1AJCQkoMyA8PCAwKQkvKiBjNXggLSAxNzcuM01IeiAqLworI2RlZmluZSBSSUlJX0NMS1NFTF9EU1BfSUYJCSgyIDw8IDUpCS8qIGM1eCAtIDg4LjY3TUh6ICovCisjZGVmaW5lIFJJSUlfU1lOQ19EU1AJCQkoMSA8PCA3KQkvKiBFbmFibGUgc3luYyAqLworI2RlZmluZSBSSUlJX0NMS1NFTF9JVkEJCQkoNiA8PCA4KQkvKiBpdmExIC0gODguNjdNSHogKi8KKyNkZWZpbmUgUklJSV9TWU5DX0lWQQkJCSgxIDw8IDEzKQkvKiBFbmFibGUgc3luYyAqLworI2RlZmluZSBSSUlJX0NNX0NMS1NFTF9EU1BfVkFMCQlSSUlJX1NZTkNfSVZBIHwgUklJSV9DTEtTRUxfSVZBIHwgXAorCQkJCQlSSUlJX1NZTkNfRFNQIHwgUklJSV9DTEtTRUxfRFNQX0lGIHwgXAorCQkJCQlSSUlJX0NMS1NFTF9EU1AKKyNkZWZpbmUgUklJSV9DTEtTRUxfR0ZYCQkJKDIgPDwgMCkJLyogNjYuNU1IeiAqLworI2RlZmluZSBSSUlJX0NNX0NMS1NFTF9HRlhfVkFMCQlSSUlJX0NMS1NFTF9HRlgKKworLyogMjQyMC1QUkNNIElJIDYwME1IeiBjb3JlICovCisjZGVmaW5lIFJJSV9DTEtTRUxfTDMJCQkoNiA8PCAwKQkvKiAxMDBNSHogKi8KKyNkZWZpbmUgUklJX0NMS1NFTF9MNAkJCSgyIDw8IDUpCS8qIDUwTUh6ICovCisjZGVmaW5lIFJJSV9DTEtTRUxfVVNCCQkJKDIgPDwgMjUpCS8qIDUwTUh6ICovCisjZGVmaW5lIFJJSV9DTV9DTEtTRUwxX0NPUkVfVkFMCQlSSUlfQ0xLU0VMX1VTQiB8IFwKKwkJCQkJUlhYX0NMS1NFTF9TU0kgfCBSWFhfQ0xLU0VMX1ZMWU5RIHwgXAorCQkJCQlSWF9DTEtTRUxfRFNTMiB8IFJYX0NMS1NFTF9EU1MxIHwgXAorCQkJCQlSSUlfQ0xLU0VMX0w0IHwgUklJX0NMS1NFTF9MMworI2RlZmluZSBSSUlfQ0xLU0VMX01QVQkJCSgyIDw8IDApCS8qIDMwME1IeiAqLworI2RlZmluZSBSSUlfQ01fQ0xLU0VMX01QVV9WQUwJCVJJSV9DTEtTRUxfTVBVCisjZGVmaW5lIFJJSV9DTEtTRUxfRFNQCQkJKDMgPDwgMCkJLyogYzV4IC0gMjAwTUh6ICovCisjZGVmaW5lIFJJSV9DTEtTRUxfRFNQX0lGCQkoMiA8PCA1KQkvKiBjNXggLSAxMDBNSHogKi8KKyNkZWZpbmUgUklJX1NZTkNfRFNQCQkJKDAgPDwgNykJLyogQnlwYXNzIHN5bmMgKi8KKyNkZWZpbmUgUklJX0NMS1NFTF9JVkEJCQkoNiA8PCA4KQkvKiBpdmExIC0gMjAwTUh6ICovCisjZGVmaW5lIFJJSV9TWU5DX0lWQQkJCSgwIDw8IDEzKQkvKiBCeXBhc3Mgc3luYyAqLworI2RlZmluZSBSSUlfQ01fQ0xLU0VMX0RTUF9WQUwJCVJJSV9TWU5DX0lWQSB8IFJJSV9DTEtTRUxfSVZBIHwgXAorCQkJCQlSSUlfU1lOQ19EU1AgfCBSSUlfQ0xLU0VMX0RTUF9JRiB8IFwKKwkJCQkJUklJX0NMS1NFTF9EU1AKKyNkZWZpbmUgUklJX0NMS1NFTF9HRlgJCQkoMiA8PCAwKQkvKiA1ME1IeiAqLworI2RlZmluZSBSSUlfQ01fQ0xLU0VMX0dGWF9WQUwJCVJJSV9DTEtTRUxfR0ZYCisKKy8qIDI0MjAtUFJDTSBWSUkgKGJvb3QpICovCisjZGVmaW5lIFJWSUlfQ0xLU0VMX0wzCQkJKDEgPDwgMCkKKyNkZWZpbmUgUlZJSV9DTEtTRUxfTDQJCQkoMSA8PCA1KQorI2RlZmluZSBSVklJX0NMS1NFTF9EU1MxCQkoMSA8PCA4KQorI2RlZmluZSBSVklJX0NMS1NFTF9EU1MyCQkoMCA8PCAxMykKKyNkZWZpbmUgUlZJSV9DTEtTRUxfVkxZTlEJCSgxIDw8IDE1KQorI2RlZmluZSBSVklJX0NMS1NFTF9TU0kJCQkoMSA8PCAyMCkKKyNkZWZpbmUgUlZJSV9DTEtTRUxfVVNCCQkJKDEgPDwgMjUpCisKKyNkZWZpbmUgUlZJSV9DTV9DTEtTRUwxX0NPUkVfVkFMCVJWSUlfQ0xLU0VMX1VTQiB8IFJWSUlfQ0xLU0VMX1NTSSB8IFwKKwkJCQkJUlZJSV9DTEtTRUxfVkxZTlEgfCBSVklJX0NMS1NFTF9EU1MyIHwgXAorCQkJCQlSVklJX0NMS1NFTF9EU1MxIHwgUlZJSV9DTEtTRUxfTDQgfCBSVklJX0NMS1NFTF9MMworCisjZGVmaW5lIFJWSUlfQ0xLU0VMX01QVQkJCSgxIDw8IDApIC8qIGFsbCBkaXZpZGUgYnkgMSAqLworI2RlZmluZSBSVklJX0NNX0NMS1NFTF9NUFVfVkFMCQlSVklJX0NMS1NFTF9NUFUKKworI2RlZmluZSBSVklJX0NMS1NFTF9EU1AJCQkoMSA8PCAwKQorI2RlZmluZSBSVklJX0NMS1NFTF9EU1BfSUYJCSgxIDw8IDUpCisjZGVmaW5lIFJWSUlfU1lOQ19EU1AJCQkoMCA8PCA3KQorI2RlZmluZSBSVklJX0NMS1NFTF9JVkEJCQkoMSA8PCA4KQorI2RlZmluZSBSVklJX1NZTkNfSVZBCQkJKDAgPDwgMTMpCisjZGVmaW5lIFJWSUlfQ01fQ0xLU0VMX0RTUF9WQUwJCVJWSUlfU1lOQ19JVkEgfCBSVklJX0NMS1NFTF9JVkEgfCBSVklJX1NZTkNfRFNQIHwgXAorCQkJCQlSVklJX0NMS1NFTF9EU1BfSUYgfCBSVklJX0NMS1NFTF9EU1AKKworI2RlZmluZSBSVklJX0NMS1NFTF9HRlgJCQkoMSA8PCAwKQorI2RlZmluZSBSVklJX0NNX0NMS1NFTF9HRlhfVkFMCQlSVklJX0NMS1NFTF9HRlgKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAyNDMwIFRhcmdldCBtb2RlczogQWxvbmcgd2l0aCBlYWNoIGNvbmZpZ3VyYXRpb24gdGhlIENQVSBoYXMgc2V2ZXJhbAorICogbW9kZXMgd2hpY2ggZ29lcyBhbG9uZyB3aXRoIHRoZW0uIE1vZGVzIG1haW5seSBhcmUgdGhlIGFkZGl0aW9uIG9mCisgKiBkZXNjcmliZSBEUExMIGNvbWJpbmF0aW9ucyB0byBnbyBhbG9uZyB3aXRoIGEgcmF0aW8uCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBIYXJkd2FyZSBnb3Zlcm5lZCAqLworI2RlZmluZSBNWF80OE1fU1JDCQkJKDAgPDwgMykKKyNkZWZpbmUgTVhfNTRNX1NSQwkJCSgwIDw8IDUpCisjZGVmaW5lIE1YX0FQTExTX0NMSUtJTl8xMgkJKDMgPDwgMjMpCisjZGVmaW5lIE1YX0FQTExTX0NMSUtJTl8xMwkJKDIgPDwgMjMpCisjZGVmaW5lIE1YX0FQTExTX0NMSUtJTl8xOV8yCQkoMCA8PCAyMykKKworLyoKKyAqIDI0MzAgLSBzdGFuZGFsb25lLCAyKnJlZipNLyhuKzEpLCBNL04gaXMgZm9yIGV4YWN0bmVzcyBub3QgcmVsb2NrIHNwZWVkCisgKiAjMgkocmF0aW8xKSBiYXNlcG9ydC10YXJnZXQKKyAqICM1YQkocmF0aW8xKSBiYXNlcG9ydC10YXJnZXQsIHRhcmdldCBEUExMID0gMjY2KjIgPSA1MzJNSHoKKyAqLworI2RlZmluZSBNNUFfRFBMTF9NVUxUXzEyCQkoMTMzIDw8IDEyKQorI2RlZmluZSBNNUFfRFBMTF9ESVZfMTIJCQkoNSA8PCA4KQorI2RlZmluZSBNNUFfQ01fQ0xLU0VMMV9QTExfMTJfVkFMCU1YXzQ4TV9TUkMgfCBNWF81NE1fU1JDIHwgXAorCQkJCQlNNUFfRFBMTF9ESVZfMTIgfCBNNUFfRFBMTF9NVUxUXzEyIHwgXAorCQkJCQlNWF9BUExMU19DTElLSU5fMTIKKyNkZWZpbmUgTTVBX0RQTExfTVVMVF8xMwkJKDI2NiA8PCAxMikKKyNkZWZpbmUgTTVBX0RQTExfRElWXzEzCQkJKDEyIDw8IDgpCisjZGVmaW5lIE01QV9DTV9DTEtTRUwxX1BMTF8xM19WQUwJTVhfNDhNX1NSQyB8IE1YXzU0TV9TUkMgfCBcCisJCQkJCU01QV9EUExMX0RJVl8xMyB8IE01QV9EUExMX01VTFRfMTMgfCBcCisJCQkJCU1YX0FQTExTX0NMSUtJTl8xMworI2RlZmluZSBNNUFfRFBMTF9NVUxUXzE5CQkoMTgwIDw8IDEyKQorI2RlZmluZSBNNUFfRFBMTF9ESVZfMTkJCQkoMTIgPDwgOCkKKyNkZWZpbmUgTTVBX0NNX0NMS1NFTDFfUExMXzE5X1ZBTAlNWF80OE1fU1JDIHwgTVhfNTRNX1NSQyB8IFwKKwkJCQkJTTVBX0RQTExfRElWXzE5IHwgTTVBX0RQTExfTVVMVF8xOSB8IFwKKwkJCQkJTVhfQVBMTFNfQ0xJS0lOXzE5XzIKKy8qICM1YgkocmF0aW8xKSB0YXJnZXQgRFBMTCA9IDIwMCoyID0gNDAwTUh6ICovCisjZGVmaW5lIE01Ql9EUExMX01VTFRfMTIJCSg1MCA8PCAxMikKKyNkZWZpbmUgTTVCX0RQTExfRElWXzEyCQkJKDIgPDwgOCkKKyNkZWZpbmUgTTVCX0NNX0NMS1NFTDFfUExMXzEyX1ZBTAlNWF80OE1fU1JDIHwgTVhfNTRNX1NSQyB8IFwKKwkJCQkJTTVCX0RQTExfRElWXzEyIHwgTTVCX0RQTExfTVVMVF8xMiB8IFwKKwkJCQkJTVhfQVBMTFNfQ0xJS0lOXzEyCisjZGVmaW5lIE01Ql9EUExMX01VTFRfMTMJCSgyMDAgPDwgMTIpCisjZGVmaW5lIE01Ql9EUExMX0RJVl8xMwkJCSgxMiA8PCA4KQorCisjZGVmaW5lIE01Ql9DTV9DTEtTRUwxX1BMTF8xM19WQUwJTVhfNDhNX1NSQyB8IE1YXzU0TV9TUkMgfCBcCisJCQkJCU01Ql9EUExMX0RJVl8xMyB8IE01Ql9EUExMX01VTFRfMTMgfCBcCisJCQkJCU1YX0FQTExTX0NMSUtJTl8xMworI2RlZmluZSBNNUJfRFBMTF9NVUxUXzE5CQkoMTI1IDw8IDEyKQorI2RlZmluZSBNNUJfRFBMTF9ESVZfMTkJCQkoMzEgPDwgOCkKKyNkZWZpbmUgTTVCX0NNX0NMS1NFTDFfUExMXzE5X1ZBTAlNWF80OE1fU1JDIHwgTVhfNTRNX1NSQyB8IFwKKwkJCQkJTTVCX0RQTExfRElWXzE5IHwgTTVCX0RQTExfTVVMVF8xOSB8IFwKKwkJCQkJTVhfQVBMTFNfQ0xJS0lOXzE5XzIKKy8qCisgKiAjNAkocmF0aW8yKQorICogIzMJKHJhdGlvMikgYmFzZXBvcnQtdGFyZ2V0LCB0YXJnZXQgRFBMTCA9IDMzMCoyID0gNjYwTUh6CisgKi8KKyNkZWZpbmUgTTNfRFBMTF9NVUxUXzEyCQkJKDU1IDw8IDEyKQorI2RlZmluZSBNM19EUExMX0RJVl8xMgkJCSgxIDw8IDgpCisjZGVmaW5lIE0zX0NNX0NMS1NFTDFfUExMXzEyX1ZBTAlNWF80OE1fU1JDIHwgTVhfNTRNX1NSQyB8IFwKKwkJCQkJTTNfRFBMTF9ESVZfMTIgfCBNM19EUExMX01VTFRfMTIgfCBcCisJCQkJCU1YX0FQTExTX0NMSUtJTl8xMgorI2RlZmluZSBNM19EUExMX01VTFRfMTMJCQkoMzMwIDw8IDEyKQorI2RlZmluZSBNM19EUExMX0RJVl8xMwkJCSgxMiA8PCA4KQorI2RlZmluZSBNM19DTV9DTEtTRUwxX1BMTF8xM19WQUwJTVhfNDhNX1NSQyB8IE1YXzU0TV9TUkMgfCBcCisJCQkJCU0zX0RQTExfRElWXzEzIHwgTTNfRFBMTF9NVUxUXzEzIHwgXAorCQkJCQlNWF9BUExMU19DTElLSU5fMTMKKyNkZWZpbmUgTTNfRFBMTF9NVUxUXzE5CQkJKDI3NSA8PCAxMikKKyNkZWZpbmUgTTNfRFBMTF9ESVZfMTkJCQkoMTUgPDwgOCkKKyNkZWZpbmUgTTNfQ01fQ0xLU0VMMV9QTExfMTlfVkFMCU1YXzQ4TV9TUkMgfCBNWF81NE1fU1JDIHwgXAorCQkJCQlNM19EUExMX0RJVl8xOSB8IE0zX0RQTExfTVVMVF8xOSB8IFwKKwkJCQkJTVhfQVBMTFNfQ0xJS0lOXzE5XzIKKy8qIGJvb3QgKGJvb3QpICovCisjZGVmaW5lIE1CX0RQTExfTVVMVAkJCSgxIDw8IDEyKQorI2RlZmluZSBNQl9EUExMX0RJVgkJCSgwIDw8IDgpCisjZGVmaW5lIE1CX0NNX0NMS1NFTDFfUExMXzEyX1ZBTAlNWF80OE1fU1JDIHwgTVhfNTRNX1NSQyB8IE1CX0RQTExfRElWIHxcCisJCQkJCU1CX0RQTExfTVVMVCB8IE1YX0FQTExTX0NMSUtJTl8xMgorCisjZGVmaW5lIE1CX0NNX0NMS1NFTDFfUExMXzEzX1ZBTAlNWF80OE1fU1JDIHwgTVhfNTRNX1NSQyB8IE1CX0RQTExfRElWIHxcCisJCQkJCU1CX0RQTExfTVVMVCB8IE1YX0FQTExTX0NMSUtJTl8xMworCisjZGVmaW5lIE1CX0NNX0NMS1NFTDFfUExMXzE5X1ZBTAlNWF80OE1fU1JDIHwgTVhfNTRNX1NSQyB8IE1CX0RQTExfRElWIHxcCisJCQkJCU1CX0RQTExfTVVMVCB8IE1YX0FQTExTX0NMSUtJTl8xOQorCisvKgorICogMjQzMCAtIGNoYXNzaXMgKHNlZG5hKQorICogMTY1IChyYXRpbzEpIHNhbWUgYXMgYWJvdmUgIzIKKyAqIDE1MCAocmF0aW8xKQorICogMTMzIChyYXRpbzIpIHNhbWUgYXMgYWJvdmUgIzQKKyAqIDExMCAocmF0aW8yKSBzYW1lIGFzIGFib3ZlICMzCisgKiAxMDQgKHJhdGlvMikKKyAqIGJvb3QgKGJvb3QpCisgKi8KKworLyoKKyAqIDI0MjAgRXF1aXZhbGVudCAtIG1vZGUgcmVnaXN0ZXJzCisgKiBQUkNNIElJICwgdGFyZ2V0IERQTEwgPSAyKjMwME1IeiA9IDYwME1IegorICovCisjZGVmaW5lIE1JSV9EUExMX01VTFRfMTIJCSg1MCA8PCAxMikKKyNkZWZpbmUgTUlJX0RQTExfRElWXzEyCQkJKDEgPDwgOCkKKyNkZWZpbmUgTUlJX0NNX0NMS1NFTDFfUExMXzEyX1ZBTAlNWF80OE1fU1JDIHwgTVhfNTRNX1NSQyB8IFwKKwkJCQkJTUlJX0RQTExfRElWXzEyIHwgTUlJX0RQTExfTVVMVF8xMiB8IFwKKwkJCQkJTVhfQVBMTFNfQ0xJS0lOXzEyCisjZGVmaW5lIE1JSV9EUExMX01VTFRfMTMJCSgzMDAgPDwgMTIpCisjZGVmaW5lIE1JSV9EUExMX0RJVl8xMwkJCSgxMiA8PCA4KQorI2RlZmluZSBNSUlfQ01fQ0xLU0VMMV9QTExfMTNfVkFMCU1YXzQ4TV9TUkMgfCBNWF81NE1fU1JDIHwgXAorCQkJCQlNSUlfRFBMTF9ESVZfMTMgfCBNSUlfRFBMTF9NVUxUXzEzIHwgXAorCQkJCQlNWF9BUExMU19DTElLSU5fMTMKKworLyogUFJDTSBJSUkgdGFyZ2V0IERQTEwgPSAyKjI2NiA9IDUzMk1IeiovCisjZGVmaW5lIE1JSUlfRFBMTF9NVUxUXzEyCQkoMTMzIDw8IDEyKQorI2RlZmluZSBNSUlJX0RQTExfRElWXzEyCQkoNSA8PCA4KQorI2RlZmluZSBNSUlJX0NNX0NMS1NFTDFfUExMXzEyX1ZBTAlNWF80OE1fU1JDIHwgTVhfNTRNX1NSQyB8IFwKKwkJCQkJTUlJSV9EUExMX0RJVl8xMiB8IE1JSUlfRFBMTF9NVUxUXzEyIHwgXAorCQkJCQlNWF9BUExMU19DTElLSU5fMTIKKyNkZWZpbmUgTUlJSV9EUExMX01VTFRfMTMJCSgyNjYgPDwgMTIpCisjZGVmaW5lIE1JSUlfRFBMTF9ESVZfMTMJCSgxMiA8PCA4KQorI2RlZmluZSBNSUlJX0NNX0NMS1NFTDFfUExMXzEzX1ZBTAlNWF80OE1fU1JDIHwgTVhfNTRNX1NSQyB8IFwKKwkJCQkJTUlJSV9EUExMX0RJVl8xMyB8IE1JSUlfRFBMTF9NVUxUXzEzIHwgXAorCQkJCQlNWF9BUExMU19DTElLSU5fMTMKKworLyogUFJDTSBWSUkgKGJvb3QgYnlwYXNzKSAqLworI2RlZmluZSBNVklJX0NNX0NMS1NFTDFfUExMXzEyX1ZBTAlNQl9DTV9DTEtTRUwxX1BMTF8xMl9WQUwKKyNkZWZpbmUgTVZJSV9DTV9DTEtTRUwxX1BMTF8xM19WQUwJTUJfQ01fQ0xLU0VMMV9QTExfMTNfVkFMCisKKy8qIEhpZ2ggYW5kIGxvdyBvcGVyYXRpb24gdmFsdWUgKi8KKyNkZWZpbmUgTVhfQ0xLU0VMMl9QTExfMnhfVkFMCQkoMiA8PCAwKQorI2RlZmluZSBNWF9DTEtTRUwyX1BMTF8xeF9WQUwJCSgxIDw8IDApCisKKy8qCisgKiBUaGVzZSByZXByZXNlbnQgb3B0aW1hbCB2YWx1ZXMgZm9yIGNvbW1vbiBwYXJ0cywgaXQgd29uJ3Qgd29yayBmb3IgYWxsLgorICogQXMgbG9uZyBhcyB5b3Ugc2NhbGUgZG93biwgbW9zdCBwYXJhbWV0ZXJzIGFyZSBzdGlsbCB3b3JrLCB0aGV5IGp1c3QKKyAqIGJlY29tZSBzdWItb3B0aW1hbC4gVGhlIFJGUiB2YWx1ZSBnb2VzIGluIHRoZSBvcHBpc2l0ZSBkaXJlY3Rpb24uIElmIHlvdQorICogZG9uJ3QgYWRqdXN0IGl0IGRvd24gYXMgeW91ciBjbG9jayBwZXJpb2QgaW5jcmVhc2VzIHRoZSByZWZyZXNoIGludGVydmFsCisgKiB3aWxsIG5vdCBiZSBtZXQuIFNldHRpbmcgYWxsIHBhcmFtZXRlcnMgZm9yIGNvbXBsZXRlIHdvcnN0IGNhc2UgbWF5IHdvcmssCisgKiBidXQgbWF5IGN1dCBtZW1vcnkgcGVyZm9ybWFuY2UgYnkgMnguIER1ZSB0byBlcnJhdGEgdGhlIERMTHMgbmVlZCB0byBiZQorICogdW5sb2NrZWQgYW5kIHRoZWlyIHZhbHVlIG5lZWRzIHJ1biB0aW1lIGNhbGlicmF0aW9uLglBIGR5bmFtaWMgY2FsbCBpcworICogbmVlZCBmb3IgdGhhdCBhcyBubyBzaW5nbGUgcmlnaHQgdmFsdWUgZXhpc3RzIGFjb3JzcyBwcm9kdWN0aW9uIHNhbXBsZXMuCisgKgorICogT25seSB0aGUgRlVMTCBzcGVlZCB2YWx1ZXMgYXJlIGdpdmVuLiBDdXJyZW50IGNvZGUgaXMgc3VjaCB0aGF0IHJhdGUKKyAqIGNoYW5nZXMgbXVzdCBiZSBtYWRlIGF0IERQTExvdXR4Mi4gVGhlIGFjdHVhbCB2YWx1ZSBhZGp1c3RtZW50IGZvciBsb3cKKyAqIGZyZXF1ZW5jeSBvcGVyYXRpb24gd2lsbCBiZSBoYW5kbGVkIGJ5IG9tYXBfc2V0X3BlcmZvcm1hbmNlKCkKKyAqCisgKiBCeSBoYXZpbmcgdGhlIGJvb3QgbG9hZGVyIGJvb3QgdXAgaW4gdGhlIGZhc3Rlc3QgTDQgc3BlZWQgYXZhaWxhYmxlIGxpa2VseQorICogd2lsbCByZXN1bHQgaW4gc29tZXRoaW5nIHdoaWNoIHlvdSBjYW4gc3dpdGNoIGJldHdlZW4uCisgKi8KKyNkZWZpbmUgVjI0WFhfU0RSQ19SRlJfQ1RSTF8xMzNNSHoJKDB4MDAwM2RlMDAgfCAxKQorI2RlZmluZSBWMjRYWF9TRFJDX1JGUl9DVFJMXzEwME1IegkoMHgwMDAyZGEwMSB8IDEpCisjZGVmaW5lIFYyNFhYX1NEUkNfUkZSX0NUUkxfMTEwTUh6CSgweDAwMDJkYTAxIHwgMSkgLyogTmVlZCB0byBjYWxjICovCisjZGVmaW5lIFYyNFhYX1NEUkNfUkZSX0NUUkxfQllQQVNTCSgweDAwMDA1MDAwIHwgMSkgLyogTmVlZCB0byBjYWxjICovCisKKy8qIE1QVSBzcGVlZCBkZWZpbmVzICovCisjZGVmaW5lIFMxMk0JMTIwMDAwMDAKKyNkZWZpbmUgUzEzTQkxMzAwMDAwMAorI2RlZmluZSBTMTlNCTE5MjAwMDAwCisjZGVmaW5lIFMyNk0JMjYwMDAwMDAKKyNkZWZpbmUgUzEwME0JMTAwMDAwMDAwCisjZGVmaW5lIFMxMzNNCTEzMzAwMDAwMAorI2RlZmluZSBTMTUwTQkxNTAwMDAwMDAKKyNkZWZpbmUgUzE2NU0JMTY1MDAwMDAwCisjZGVmaW5lIFMyMDBNCTIwMDAwMDAwMAorI2RlZmluZSBTMjY2TQkyNjYwMDAwMDAKKyNkZWZpbmUgUzMwME0JMzAwMDAwMDAwCisjZGVmaW5lIFMzMzBNCTMzMDAwMDAwMAorI2RlZmluZSBTNDAwTQk0MDAwMDAwMDAKKyNkZWZpbmUgUzUzMk0JNTMyMDAwMDAwCisjZGVmaW5lIFM2MDBNCTYwMDAwMDAwMAorI2RlZmluZSBTNjYwTQk2NjAwMDAwMDAKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBLZXkgZGl2aWRlcnMgd2hpY2ggbWFrZSB1cCBhIFBSQ00gc2V0LiBSYXRpbydzIGZvciBhIFBSQ00gYXJlIG1hbmRhdGVkLgorICogeHRhbF9zcGVlZCwgZHBsbF9zcGVlZCwgbXB1X3NwZWVkLCBDTV9DTEtTRUxfTVBVLAorICogQ01fQ0xLU0VMX0RTUCwgQ01fQ0xLU0VMX0dGWCwgQ01fQ0xLU0VMMV9DT1JFLCBDTV9DTEtTRUwxX1BMTCwKKyAqIENNX0NMS1NFTDJfUExMLCBDTV9DTEtTRUxfTURNCisgKgorICogRmlsbGluZyBpbiB0YWJsZSBiYXNlZCBvbiBINCBib2FyZHMgYW5kIDI0MzAtU0RQcyB2YXJpYW50cyBhdmFpbGFibGUuCisgKiBUaGVyZSBhcmUgcXVpdGUgYSBmZXcgbW9yZSByYXRlcyBjb21iaW5hdGlvbnMgd2hpY2ggY291bGQgYmUgZGVmaW5lZC4KKyAqCisgKiBXaGVuIG11bHRpcGxlIHZhbHVlcyBhcmUgZGVmaWVuZCB0aGUgc3RhcnQgdXAgd2lsbCB0cnkgYW5kIGNob29zZSB0aGUKKyAqIGZhc3Rlc3Qgb25lLiBJZiBhICdmYXN0JyB2YWx1ZSBpcyBkZWZpbmVkLCB0aGVuIGF1dG9tYXRpY2FsbHksIHRoZSAvMgorICogb25lIHNob3VsZCBiZSBpbmNsdWRlZCBhcyBpdCBjYW4gYmUgdXNlZC4JR2VuZXJhbGx5IGhhdmluZyBtb3JlIHRoYXQKKyAqIG9uZSBmYXN0IHNldCBkb2VzIG5vdCBtYWtlIHNlbnNlLCBhcyBzdGF0aWMgdGltaW5ncyBuZWVkIHRvIGJlIGNoYW5nZWQKKyAqIHRvIGNoYW5nZSB0aGUgc2V0LgkgVGhlIGV4Y2VwdGlvbiBpcyB0aGUgYnlwYXNzIHNldHRpbmcgd2hpY2ggaXMKKyAqIGF2YWlsYmxlIGZvciBsb3cgcG93ZXIgYnlwYXNzLgorICoKKyAqIE5vdGU6IFRoaXMgdGFibGUgbmVlZHMgdG8gYmUgc29ydGVkLCBmYXN0ZXN0IHRvIHNsb3dlc3QuCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHN0cnVjdCBwcmNtX2NvbmZpZyByYXRlX3RhYmxlW10gPSB7CisJLyogUFJDTSBJSSAtIEZBU1QgKi8KKwl7UzEyTSwgUzYwME0sIFMzMDBNLCBSSUlfQ01fQ0xLU0VMX01QVV9WQUwsCQkvKiAzMDBNSHogQVJNICovCisJCVJJSV9DTV9DTEtTRUxfRFNQX1ZBTCwgUklJX0NNX0NMS1NFTF9HRlhfVkFMLAorCQlSSUlfQ01fQ0xLU0VMMV9DT1JFX1ZBTCwgTUlJX0NNX0NMS1NFTDFfUExMXzEyX1ZBTCwKKwkJTVhfQ0xLU0VMMl9QTExfMnhfVkFMLCAwLCBWMjRYWF9TRFJDX1JGUl9DVFJMXzEwME1IeiwKKwkJUkFURV9JTl8yNDJYfSwKKworCXtTMTNNLCBTNjAwTSwgUzMwME0sIFJJSV9DTV9DTEtTRUxfTVBVX1ZBTCwJCS8qIDMwME1IeiBBUk0gKi8KKwkJUklJX0NNX0NMS1NFTF9EU1BfVkFMLCBSSUlfQ01fQ0xLU0VMX0dGWF9WQUwsCisJCVJJSV9DTV9DTEtTRUwxX0NPUkVfVkFMLCBNSUlfQ01fQ0xLU0VMMV9QTExfMTNfVkFMLAorCQlNWF9DTEtTRUwyX1BMTF8yeF9WQUwsIDAsIFYyNFhYX1NEUkNfUkZSX0NUUkxfMTAwTUh6LAorCQlSQVRFX0lOXzI0Mlh9LAorCisJLyogUFJDTSBJSUkgLSBGQVNUICovCisJe1MxMk0sIFM1MzJNLCBTMjY2TSwgUklJSV9DTV9DTEtTRUxfTVBVX1ZBTCwJCS8qIDI2Nk1IeiBBUk0gKi8KKwkJUklJSV9DTV9DTEtTRUxfRFNQX1ZBTCwgUklJSV9DTV9DTEtTRUxfR0ZYX1ZBTCwKKwkJUklJSV9DTV9DTEtTRUwxX0NPUkVfVkFMLCBNSUlJX0NNX0NMS1NFTDFfUExMXzEyX1ZBTCwKKwkJTVhfQ0xLU0VMMl9QTExfMnhfVkFMLCAwLCBWMjRYWF9TRFJDX1JGUl9DVFJMXzEzM01IeiwKKwkJUkFURV9JTl8yNDJYfSwKKworCXtTMTNNLCBTNTMyTSwgUzI2Nk0sIFJJSUlfQ01fQ0xLU0VMX01QVV9WQUwsCQkvKiAyNjZNSHogQVJNICovCisJCVJJSUlfQ01fQ0xLU0VMX0RTUF9WQUwsIFJJSUlfQ01fQ0xLU0VMX0dGWF9WQUwsCisJCVJJSUlfQ01fQ0xLU0VMMV9DT1JFX1ZBTCwgTUlJSV9DTV9DTEtTRUwxX1BMTF8xM19WQUwsCisJCU1YX0NMS1NFTDJfUExMXzJ4X1ZBTCwgMCwgVjI0WFhfU0RSQ19SRlJfQ1RSTF8xMzNNSHosCisJCVJBVEVfSU5fMjQyWH0sCisKKwkvKiBQUkNNIElJIC0gU0xPVyAqLworCXtTMTJNLCBTMzAwTSwgUzE1ME0sIFJJSV9DTV9DTEtTRUxfTVBVX1ZBTCwJCS8qIDE1ME1IeiBBUk0gKi8KKwkJUklJX0NNX0NMS1NFTF9EU1BfVkFMLCBSSUlfQ01fQ0xLU0VMX0dGWF9WQUwsCisJCVJJSV9DTV9DTEtTRUwxX0NPUkVfVkFMLCBNSUlfQ01fQ0xLU0VMMV9QTExfMTJfVkFMLAorCQlNWF9DTEtTRUwyX1BMTF8yeF9WQUwsIDAsIFYyNFhYX1NEUkNfUkZSX0NUUkxfMTAwTUh6LAorCQlSQVRFX0lOXzI0Mlh9LAorCisJe1MxM00sIFMzMDBNLCBTMTUwTSwgUklJX0NNX0NMS1NFTF9NUFVfVkFMLAkJLyogMTUwTUh6IEFSTSAqLworCQlSSUlfQ01fQ0xLU0VMX0RTUF9WQUwsIFJJSV9DTV9DTEtTRUxfR0ZYX1ZBTCwKKwkJUklJX0NNX0NMS1NFTDFfQ09SRV9WQUwsIE1JSV9DTV9DTEtTRUwxX1BMTF8xM19WQUwsCisJCU1YX0NMS1NFTDJfUExMXzJ4X1ZBTCwgMCwgVjI0WFhfU0RSQ19SRlJfQ1RSTF8xMDBNSHosCisJCVJBVEVfSU5fMjQyWH0sCisKKwkvKiBQUkNNIElJSSAtIFNMT1cgKi8KKwl7UzEyTSwgUzI2Nk0sIFMxMzNNLCBSSUlJX0NNX0NMS1NFTF9NUFVfVkFMLAkJLyogMTMzTUh6IEFSTSAqLworCQlSSUlJX0NNX0NMS1NFTF9EU1BfVkFMLCBSSUlJX0NNX0NMS1NFTF9HRlhfVkFMLAorCQlSSUlJX0NNX0NMS1NFTDFfQ09SRV9WQUwsIE1JSUlfQ01fQ0xLU0VMMV9QTExfMTJfVkFMLAorCQlNWF9DTEtTRUwyX1BMTF8yeF9WQUwsIDAsIFYyNFhYX1NEUkNfUkZSX0NUUkxfMTMzTUh6LAorCQlSQVRFX0lOXzI0Mlh9LAorCisJe1MxM00sIFMyNjZNLCBTMTMzTSwgUklJSV9DTV9DTEtTRUxfTVBVX1ZBTCwJCS8qIDEzM01IeiBBUk0gKi8KKwkJUklJSV9DTV9DTEtTRUxfRFNQX1ZBTCwgUklJSV9DTV9DTEtTRUxfR0ZYX1ZBTCwKKwkJUklJSV9DTV9DTEtTRUwxX0NPUkVfVkFMLCBNSUlJX0NNX0NMS1NFTDFfUExMXzEzX1ZBTCwKKwkJTVhfQ0xLU0VMMl9QTExfMnhfVkFMLCAwLCBWMjRYWF9TRFJDX1JGUl9DVFJMXzEzM01IeiwKKwkJUkFURV9JTl8yNDJYfSwKKworCS8qIFBSQ00tVklJIChib290LWJ5cGFzcykgKi8KKwl7UzEyTSwgUzEyTSwgUzEyTSwgUlZJSV9DTV9DTEtTRUxfTVBVX1ZBTCwJCS8qIDEyTUh6IEFSTSovCisJCVJWSUlfQ01fQ0xLU0VMX0RTUF9WQUwsIFJWSUlfQ01fQ0xLU0VMX0dGWF9WQUwsCisJCVJWSUlfQ01fQ0xLU0VMMV9DT1JFX1ZBTCwgTVZJSV9DTV9DTEtTRUwxX1BMTF8xMl9WQUwsCisJCU1YX0NMS1NFTDJfUExMXzJ4X1ZBTCwgMCwgVjI0WFhfU0RSQ19SRlJfQ1RSTF9CWVBBU1MsCisJCVJBVEVfSU5fMjQyWH0sCisKKwkvKiBQUkNNLVZJSSAoYm9vdC1ieXBhc3MpICovCisJe1MxM00sIFMxM00sIFMxM00sIFJWSUlfQ01fQ0xLU0VMX01QVV9WQUwsCQkvKiAxM01IeiBBUk0gKi8KKwkJUlZJSV9DTV9DTEtTRUxfRFNQX1ZBTCwgUlZJSV9DTV9DTEtTRUxfR0ZYX1ZBTCwKKwkJUlZJSV9DTV9DTEtTRUwxX0NPUkVfVkFMLCBNVklJX0NNX0NMS1NFTDFfUExMXzEzX1ZBTCwKKwkJTVhfQ0xLU0VMMl9QTExfMnhfVkFMLCAwLCBWMjRYWF9TRFJDX1JGUl9DVFJMX0JZUEFTUywKKwkJUkFURV9JTl8yNDJYfSwKKworCS8qIFBSQ00gIzMgLSByYXRpbzIgKEVTMikgLSBGQVNUICovCisJe1MxM00sIFM2NjBNLCBTMzMwTSwgUjJfQ01fQ0xLU0VMX01QVV9WQUwsCQkvKiAzMzBNSHogQVJNICovCisJCVIyX0NNX0NMS1NFTF9EU1BfVkFMLCBSMl9DTV9DTEtTRUxfR0ZYX1ZBTCwKKwkJUjJfQ01fQ0xLU0VMMV9DT1JFX1ZBTCwgTTNfQ01fQ0xLU0VMMV9QTExfMTNfVkFMLAorCQlNWF9DTEtTRUwyX1BMTF8yeF9WQUwsIFIyX0NNX0NMS1NFTF9NRE1fVkFMLAorCQlWMjRYWF9TRFJDX1JGUl9DVFJMXzExME1IeiwKKwkJUkFURV9JTl8yNDNYfSwKKworCS8qIFBSQ00gIzVhIC0gcmF0aW8xIC0gRkFTVCAqLworCXtTMTNNLCBTNTMyTSwgUzI2Nk0sIFIxX0NNX0NMS1NFTF9NUFVfVkFMLAkJLyogMjY2TUh6IEFSTSAqLworCQlSMV9DTV9DTEtTRUxfRFNQX1ZBTCwgUjFfQ01fQ0xLU0VMX0dGWF9WQUwsCisJCVIxX0NNX0NMS1NFTDFfQ09SRV9WQUwsIE01QV9DTV9DTEtTRUwxX1BMTF8xM19WQUwsCisJCU1YX0NMS1NFTDJfUExMXzJ4X1ZBTCwgUjFfQ01fQ0xLU0VMX01ETV9WQUwsCisJCVYyNFhYX1NEUkNfUkZSX0NUUkxfMTMzTUh6LAorCQlSQVRFX0lOXzI0M1h9LAorCisJLyogUFJDTSAjNWIgLSByYXRpbzEgLSBGQVNUICovCisJe1MxM00sIFM0MDBNLCBTMjAwTSwgUjFfQ01fQ0xLU0VMX01QVV9WQUwsCQkvKiAyMDBNSHogQVJNICovCisJCVIxX0NNX0NMS1NFTF9EU1BfVkFMLCBSMV9DTV9DTEtTRUxfR0ZYX1ZBTCwKKwkJUjFfQ01fQ0xLU0VMMV9DT1JFX1ZBTCwgTTVCX0NNX0NMS1NFTDFfUExMXzEzX1ZBTCwKKwkJTVhfQ0xLU0VMMl9QTExfMnhfVkFMLCBSMV9DTV9DTEtTRUxfTURNX1ZBTCwKKwkJVjI0WFhfU0RSQ19SRlJfQ1RSTF8xMDBNSHosCisJCVJBVEVfSU5fMjQzWH0sCisKKwkvKiBQUkNNICMzIC0gcmF0aW8yIChFUzIpIC0gU0xPVyAqLworCXtTMTNNLCBTMzMwTSwgUzE2NU0sIFIyX0NNX0NMS1NFTF9NUFVfVkFMLAkJLyogMTY1TUh6IEFSTSAqLworCQlSMl9DTV9DTEtTRUxfRFNQX1ZBTCwgUjJfQ01fQ0xLU0VMX0dGWF9WQUwsCisJCVIyX0NNX0NMS1NFTDFfQ09SRV9WQUwsIE0zX0NNX0NMS1NFTDFfUExMXzEzX1ZBTCwKKwkJTVhfQ0xLU0VMMl9QTExfMXhfVkFMLCBSMl9DTV9DTEtTRUxfTURNX1ZBTCwKKwkJVjI0WFhfU0RSQ19SRlJfQ1RSTF8xMTBNSHosCisJCVJBVEVfSU5fMjQzWH0sCisKKwkvKiBQUkNNICM1YSAtIHJhdGlvMSAtIFNMT1cgKi8KKwl7UzEzTSwgUzI2Nk0sIFMxMzNNLCBSMV9DTV9DTEtTRUxfTVBVX1ZBTCwJCS8qIDEzM01IeiBBUk0gKi8KKwkJUjFfQ01fQ0xLU0VMX0RTUF9WQUwsIFIxX0NNX0NMS1NFTF9HRlhfVkFMLAorCQlSMV9DTV9DTEtTRUwxX0NPUkVfVkFMLCBNNUFfQ01fQ0xLU0VMMV9QTExfMTNfVkFMLAorCQlNWF9DTEtTRUwyX1BMTF8xeF9WQUwsIFIxX0NNX0NMS1NFTF9NRE1fVkFMLAorCQlWMjRYWF9TRFJDX1JGUl9DVFJMXzEzM01IeiwKKwkJUkFURV9JTl8yNDNYfSwKKworCS8qIFBSQ00gIzViIC0gcmF0aW8xIC0gU0xPVyovCisJe1MxM00sIFMyMDBNLCBTMTAwTSwgUjFfQ01fQ0xLU0VMX01QVV9WQUwsCQkvKiAxMDBNSHogQVJNICovCisJCVIxX0NNX0NMS1NFTF9EU1BfVkFMLCBSMV9DTV9DTEtTRUxfR0ZYX1ZBTCwKKwkJUjFfQ01fQ0xLU0VMMV9DT1JFX1ZBTCwgTTVCX0NNX0NMS1NFTDFfUExMXzEzX1ZBTCwKKwkJTVhfQ0xLU0VMMl9QTExfMXhfVkFMLCBSMV9DTV9DTEtTRUxfTURNX1ZBTCwKKwkJVjI0WFhfU0RSQ19SRlJfQ1RSTF8xMDBNSHosCisJCVJBVEVfSU5fMjQzWH0sCisKKwkvKiBQUkNNLWJvb3QvYnlwYXNzICovCisJe1MxM00sIFMxM00sIFMxM00sIFJCX0NNX0NMS1NFTF9NUFVfVkFMLAkJLyogMTNNaHogKi8KKwkJUkJfQ01fQ0xLU0VMX0RTUF9WQUwsIFJCX0NNX0NMS1NFTF9HRlhfVkFMLAorCQlSQl9DTV9DTEtTRUwxX0NPUkVfVkFMLCBNQl9DTV9DTEtTRUwxX1BMTF8xM19WQUwsCisJCU1YX0NMS1NFTDJfUExMXzJ4X1ZBTCwgUkJfQ01fQ0xLU0VMX01ETV9WQUwsCisJCVYyNFhYX1NEUkNfUkZSX0NUUkxfQllQQVNTLAorCQlSQVRFX0lOXzI0M1h9LAorCisJLyogUFJDTS1ib290L2J5cGFzcyAqLworCXtTMTJNLCBTMTJNLCBTMTJNLCBSQl9DTV9DTEtTRUxfTVBVX1ZBTCwJCS8qIDEyTWh6ICovCisJCVJCX0NNX0NMS1NFTF9EU1BfVkFMLCBSQl9DTV9DTEtTRUxfR0ZYX1ZBTCwKKwkJUkJfQ01fQ0xLU0VMMV9DT1JFX1ZBTCwgTUJfQ01fQ0xLU0VMMV9QTExfMTJfVkFMLAorCQlNWF9DTEtTRUwyX1BMTF8yeF9WQUwsIFJCX0NNX0NMS1NFTF9NRE1fVkFMLAorCQlWMjRYWF9TRFJDX1JGUl9DVFJMX0JZUEFTUywKKwkJUkFURV9JTl8yNDNYfSwKKworCXsgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMH0sCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIDI0eHggY2xvY2sgdHJlZS4KKyAqCisgKiBOT1RFOkluIG1hbnkgY2FzZXMgaGVyZSB3ZSBhcmUgYXNzaWduaW5nIGEgJ2RlZmF1bHQnIHBhcmVudC4JSW4gbWFueQorICoJY2FzZXMgdGhlIHBhcmVudCBpcyBzZWxlY3RhYmxlLglUaGUgZ2V0L3NldCBwYXJlbnQgY2FsbHMgd2lsbCBhbHNvCisgKglzd2l0Y2ggc291cmNlcy4KKyAqCisgKglNYW55IHNvbWUgY2xvY2tzIHNheSBhbHdheXNfZW5hYmxlZCwgYnV0IHRoZXkgY2FuIGJlIGF1dG8gaWRsZWQgZm9yCisgKglwb3dlciBzYXZpbmdzLiBUaGV5IHdpbGwgYWx3YXlzIGJlIGF2YWlsYWJsZSB1cG9uIGNsb2NrIHJlcXVlc3QuCisgKgorICoJU2V2ZXJhbCBzb3VyY2VzIGFyZSBnaXZlbiBpbml0aWFsIHJhdGVzIHdoaWNoIG1heSBiZSB3cm9uZywgdGhpcyB3aWxsCisgKgliZSBmaXhlZCB1cCBpbiB0aGUgaW5pdCBmdW5jLgorICoKKyAqCVRoaW5ncyBhcmUgYnJvYWRseSBzZXBhcmF0ZWQgYmVsb3cgYnkgY2xvY2sgZG9tYWlucy4gSXQgaXMKKyAqCW5vdGV3b3J0aHkgdGhhdCBtb3N0IHBlcmlmZXJhbHMgaGF2ZSBkZXBlbmRlbmNpZXMgb24gbXVsdGlwbGUgY2xvY2sKKyAqCWRvbWFpbnMuIE1hbnkgZ2V0IHRoZWlyIGludGVyZmFjZSBjbG9ja3MgZnJvbSB0aGUgTDQgZG9tYWluLCBidXQgZ2V0CisgKglmdW5jdGlvbmFsIGNsb2NrcyBmcm9tIGZpeGVkIHNvdXJjZXMgb3Igb3RoZXIgY29yZSBkb21haW4gZGVyaXZlZAorICoJY2xvY2tzLgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogQmFzZSBleHRlcm5hbCBpbnB1dCBjbG9ja3MgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGZ1bmNfMzJrX2NrID0geworCS5uYW1lCQk9ICJmdW5jXzMya19jayIsCisJLnJhdGUJCT0gMzIwMDAsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAorCQkJCVJBVEVfRklYRUQgfCBBTFdBWVNfRU5BQkxFRCwKK307CisKKy8qIFR5cGljYWwgMTIvMTNNSHogaW4gc3RhbmRhbG9uZSBtb2RlLCB3aWxsIGJlIDI2TWh6IGluIGNoYXNzaXMgbW9kZSAqLworc3RhdGljIHN0cnVjdCBjbGsgb3NjX2NrID0gewkJLyogKCoxMiwgKjEzLCAxOS4yLCAqMjYsIDM4LjQpTUh6ICovCisJLm5hbWUJCT0gIm9zY19jayIsCisJLnJhdGUJCT0gMjYwMDAwMDAsCQkvKiBmaXhlZCB1cCBpbiBjbG9jayBpbml0ICovCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAorCQkJCVJBVEVfRklYRUQgfCBBTFdBWVNfRU5BQkxFRCB8IFJBVEVfUFJPUEFHQVRFUywKK307CisKKy8qIFdpdGggb3V0IG1vZGVtIGxpa2VseSAxMk1Ieiwgd2l0aCBtb2RlbSBsaWtlbHkgMTNNSHogKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIHN5c19jayA9IHsJCS8qICgqMTIsICoxMywgMTkuMiwgMjYsIDM4LjQpTUh6ICovCisJLm5hbWUJCT0gInN5c19jayIsCQkvKiB+IHJlZl9jbGsgYWxzbyAqLworCS5wYXJlbnQJCT0gJm9zY19jaywKKwkucmF0ZQkJPSAxMzAwMDAwMCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CisJCQkJUkFURV9GSVhFRCB8IEFMV0FZU19FTkFCTEVEIHwgUkFURV9QUk9QQUdBVEVTLAorCS5yYXRlX29mZnNldAk9IDYsIC8qIHN5c2Nsa2RpdiAxIG9yIDIsIGFscmVhZHkgaGFuZGxlZCBvciBubyBib290ICovCisJLnJlY2FsYwkJPSAmb21hcDJfc3lzX2Nsa19yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBhbHRfY2sgPSB7CQkvKiBUeXBpY2FsIDU0TSBvciA0OE0sIG1heSBub3QgZXhpc3QgKi8KKwkubmFtZQkJPSAiYWx0X2NrIiwKKwkucmF0ZQkJPSA1NDAwMDAwMCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CisJCQkJUkFURV9GSVhFRCB8IEFMV0FZU19FTkFCTEVEIHwgUkFURV9QUk9QQUdBVEVTLAorCS5yZWNhbGMJCT0gJm9tYXAyX3Byb3BhZ2F0ZV9yYXRlLAorfTsKKworLyoKKyAqIEFuYWxvZyBkb21haW4gcm9vdCBzb3VyY2UgY2xvY2tzCisgKi8KKworLyogZHBsbF9jaywgaXMgYnJva2VuIG91dCBpbiB0byBzcGVjaWFsIGNhc2VzIHRocm91Z2ggY2xrc2VsICovCitzdGF0aWMgc3RydWN0IGNsayBkcGxsX2NrID0geworCS5uYW1lCQk9ICJkcGxsX2NrIiwKKwkucGFyZW50CQk9ICZzeXNfY2ssCQkvKiBDYW4gYmUgZnVuY18zMmsgYWxzbyAqLworCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKKwkJCQlSQVRFX1BST1BBR0FURVMgfCBSQVRFX0NLQ1RMIHwgQ01fUExMX1NFTDEsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGFwbGw5Nl9jayA9IHsKKwkubmFtZQkJPSAiYXBsbDk2X2NrIiwKKwkucGFyZW50CQk9ICZzeXNfY2ssCisJLnJhdGUJCT0gOTYwMDAwMDAsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHxDTE9DS19JTl9PTUFQMjQzWCB8CisJCQkJUkFURV9GSVhFRCB8IFJBVEVfUFJPUEFHQVRFUywKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fQ0xLRU5fUExMLAorCS5lbmFibGVfYml0CT0gMHgyLAorCS5yZWNhbGMJCT0gJm9tYXAyX3Byb3BhZ2F0ZV9yYXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgYXBsbDU0X2NrID0geworCS5uYW1lCQk9ICJhcGxsNTRfY2siLAorCS5wYXJlbnQJCT0gJnN5c19jaywKKwkucmF0ZQkJPSA1NDAwMDAwMCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CisJCQkJUkFURV9GSVhFRCB8IFJBVEVfUFJPUEFHQVRFUywKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fQ0xLRU5fUExMLAorCS5lbmFibGVfYml0CT0gMHg2LAorCS5yZWNhbGMJCT0gJm9tYXAyX3Byb3BhZ2F0ZV9yYXRlLAorfTsKKworLyoKKyAqIFBSQ00gZGlnaXRhbCBiYXNlIHNvdXJjZXMKKyAqLworc3RhdGljIHN0cnVjdCBjbGsgZnVuY181NG1fY2sgPSB7CisJLm5hbWUJCT0gImZ1bmNfNTRtX2NrIiwKKwkucGFyZW50CQk9ICZhcGxsNTRfY2ssCS8qIGNhbiBhbHNvIGJlIGFsdF9jbGsgKi8KKwkucmF0ZQkJPSA1NDAwMDAwMCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CisJCQkJUkFURV9GSVhFRCB8IENNX1BMTF9TRUwxIHwgUkFURV9QUk9QQUdBVEVTLAorCS5zcmNfb2Zmc2V0CT0gNSwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fQ0xLRU5fUExMLAorCS5lbmFibGVfYml0CT0gMHhmZiwKKwkucmVjYWxjCQk9ICZvbWFwMl9wcm9wYWdhdGVfcmF0ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNvcmVfY2sgPSB7CisJLm5hbWUJCT0gImNvcmVfY2siLAorCS5wYXJlbnQJCT0gJmRwbGxfY2ssCQkvKiBjYW4gYWxzbyBiZSAzMmsgKi8KKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CisJCQkJQUxXQVlTX0VOQUJMRUQgfCBSQVRFX1BST1BBR0FURVMsCisJLnJlY2FsYwkJPSAmb21hcDJfcHJvcGFnYXRlX3JhdGUsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBzbGVlcF9jayA9IHsJCS8qIHN5c19jbGsgb3IgMzJrICovCisJLm5hbWUJCT0gInNsZWVwX2NrIiwKKwkucGFyZW50CQk9ICZmdW5jXzMya19jaywKKwkucmF0ZQkJPSAzMjAwMCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkucmVjYWxjCQk9ICZvbWFwMl9wcm9wYWdhdGVfcmF0ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGZ1bmNfOTZtX2NrID0geworCS5uYW1lCQk9ICJmdW5jXzk2bV9jayIsCisJLnBhcmVudAkJPSAmYXBsbDk2X2NrLAorCS5yYXRlCQk9IDk2MDAwMDAwLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKKwkJCQlSQVRFX0ZJWEVEIHwgUkFURV9QUk9QQUdBVEVTLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9DTEtFTl9QTEwsCisJLmVuYWJsZV9iaXQJPSAweGZmLAorCS5yZWNhbGMJCT0gJm9tYXAyX3Byb3BhZ2F0ZV9yYXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZnVuY180OG1fY2sgPSB7CisJLm5hbWUJCT0gImZ1bmNfNDhtX2NrIiwKKwkucGFyZW50CQk9ICZhcGxsOTZfY2ssCSAvKiA5Nk0gb3IgQWx0ICovCisJLnJhdGUJCT0gNDgwMDAwMDAsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAorCQkJCVJBVEVfRklYRUQgfCBDTV9QTExfU0VMMSB8IFJBVEVfUFJPUEFHQVRFUywKKwkuc3JjX29mZnNldAk9IDMsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0NMS0VOX1BMTCwKKwkuZW5hYmxlX2JpdAk9IDB4ZmYsCisJLnJlY2FsYwkJPSAmb21hcDJfcHJvcGFnYXRlX3JhdGUsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBmdW5jXzEybV9jayA9IHsKKwkubmFtZQkJPSAiZnVuY18xMm1fY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfNDhtX2NrLAorCS5yYXRlCQk9IDEyMDAwMDAwLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKKwkJCQlSQVRFX0ZJWEVEIHwgUkFURV9QUk9QQUdBVEVTLAorCS5yZWNhbGMJCT0gJm9tYXAyX3Byb3BhZ2F0ZV9yYXRlLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9DTEtFTl9QTEwsCisJLmVuYWJsZV9iaXQJPSAweGZmLAorfTsKKworLyogU2VjdXJlIHRpbWVyLCBvbmx5IGF2YWlsYWJsZSBpbiBzZWN1cmUgbW9kZSAqLworc3RhdGljIHN0cnVjdCBjbGsgd2R0MV9vc2NfY2sgPSB7CisJLm5hbWUJCT0gImNrX3dkdDFfb3NjIiwKKwkucGFyZW50CQk9ICZvc2NfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHN5c19jbGtvdXQgPSB7CisJLm5hbWUJCT0gInN5c19jbGtvdXQiLAorCS5wYXJlbnQJCT0gJmZ1bmNfNTRtX2NrLAorCS5yYXRlCQk9IDU0MDAwMDAwLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKKwkJCQlDTV9TWVNDTEtPVVRfU0VMMSB8IFJBVEVfQ0tDVEwsCisJLnNyY19vZmZzZXQJPSAwLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZQUkNNX0NMS09VVF9DVFJMLAorCS5lbmFibGVfYml0CT0gNywKKwkucmF0ZV9vZmZzZXQJPSAzLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCisvKiBJbiAyNDMwLCBuZXcgaW4gMjQyMCBFUzIgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIHN5c19jbGtvdXQyID0geworCS5uYW1lCQk9ICJzeXNfY2xrb3V0MiIsCisJLnBhcmVudAkJPSAmZnVuY181NG1fY2ssCisJLnJhdGUJCT0gNTQwMDAwMDAsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAorCQkJCUNNX1NZU0NMS09VVF9TRUwxIHwgUkFURV9DS0NUTCwKKwkuc3JjX29mZnNldAk9IDgsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJlBSQ01fQ0xLT1VUX0NUUkwsCisJLmVuYWJsZV9iaXQJPSAxNSwKKwkucmF0ZV9vZmZzZXQJPSAxMSwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworLyoKKyAqIE1QVSBjbG9jayBkb21haW4KKyAqCUNsb2NrczoKKyAqCQlNUFVfRkNMSywgTVBVX0lDTEsKKyAqCQlJTlRfTV9GQ0xLLCBJTlRfTV9JX0NMSworICoKKyAqIC0gSW5kaXZpZHVhbCBjbG9ja3MgYXJlIGhhcmR3YXJlIG1hbmFnZWQuCisgKiAtIEJhc2UgZGl2aWRlciBjb21lcyBmcm9tOiBDTV9DTEtTRUxfTVBVCisgKgorICovCitzdGF0aWMgc3RydWN0IGNsayBtcHVfY2sgPSB7CS8qIENvbnRyb2wgY3B1ICovCisJLm5hbWUJCT0gIm1wdV9jayIsCisJLnBhcmVudAkJPSAmY29yZV9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8IFJBVEVfQ0tDVEwgfAorCQkJCUFMV0FZU19FTkFCTEVEIHwgQ01fTVBVX1NFTDEgfCBERUxBWUVEX0FQUCB8CisJCQkJQ09ORklHX1BBUlRJQ0lQQU5UIHwgUkFURV9QUk9QQUdBVEVTLAorCS5yYXRlX29mZnNldAk9IDAsCS8qIGJpdHMgMC00ICovCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKKy8qCisgKiBEU1AgKDI0MzAtSVZBMi4xKSAoMjQyMC1VTUErSVZBMSkgY2xvY2sgZG9tYWluCisgKiBDbG9ja3M6CisgKgkyNDMwOiBJVkEyLjFfRkNMSywgSVZBMi4xX0lDTEsKKyAqCTI0MjA6IFVNQV9GQ0xLLCBVTUFfSUNMSywgSVZBX01QVSwgSVZBX0NPUAorICovCitzdGF0aWMgc3RydWN0IGNsayBpdmEyXzFfZmNrID0geworCS5uYW1lCQk9ICJpdmEyXzFfZmNrIiwKKwkucGFyZW50CQk9ICZjb3JlX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCB8IFJBVEVfQ0tDVEwgfCBDTV9EU1BfU0VMMSB8CisJCQkJREVMQVlFRF9BUFAgfCBSQVRFX1BST1BBR0FURVMgfAorCQkJCUNPTkZJR19QQVJUSUNJUEFOVCwKKwkucmF0ZV9vZmZzZXQJPSAwLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU5fRFNQLAorCS5lbmFibGVfYml0CT0gMCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgaXZhMl8xX2ljayA9IHsKKwkubmFtZQkJPSAiaXZhMl8xX2ljayIsCisJLnBhcmVudAkJPSAmaXZhMl8xX2ZjaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1ggfCBSQVRFX0NLQ1RMIHwgQ01fRFNQX1NFTDEgfAorCQkJCURFTEFZRURfQVBQIHwgQ09ORklHX1BBUlRJQ0lQQU5ULAorCS5yYXRlX29mZnNldAk9IDUsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKKy8qCisgKiBXb24ndCBiZSB0b28gc3BlY2lmaWMgaGVyZS4gVGhlIGNvcmUgY2xvY2sgY29tZXMgaW50byB0aGlzIGJsb2NrCisgKiBpdCBpcyBkaXZpZGVkIHRoZW4gdGVlJ2VkLiBPbmUgYnJhbmNoIGdvZXMgZGlyZWN0bHkgdG8geHl6IGVuYWJsZQorICogY29udHJvbHMuIFRoZSBvdGhlciBicmFuY2ggZ2V0cyBmdXJ0aGVyIGRpdmlkZWQgYnkgMiB0aGVuIHBvc3NpYmx5CisgKiByb3V0ZWQgaW50byBhIHN5bmNocm9uaXplciBhbmQgb3V0IG9mIGNsb2NrcyBhYmMuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGRzcF9mY2sgPSB7CisJLm5hbWUJCT0gImRzcF9mY2siLAorCS5wYXJlbnQJCT0gJmNvcmVfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgUkFURV9DS0NUTCB8IENNX0RTUF9TRUwxIHwKKwkJCURFTEFZRURfQVBQIHwgQ09ORklHX1BBUlRJQ0lQQU5UIHwgUkFURV9QUk9QQUdBVEVTLAorCS5yYXRlX29mZnNldAk9IDAsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTl9EU1AsCisJLmVuYWJsZV9iaXQJPSAwLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBkc3BfaWNrID0geworCS5uYW1lCQk9ICJkc3BfaWNrIiwJIC8qIGFwcGFyZW50bHkgaXBpIGFuZCBpc3AgKi8KKwkucGFyZW50CQk9ICZkc3BfZmNrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IFJBVEVfQ0tDVEwgfCBDTV9EU1BfU0VMMSB8CisJCQkJREVMQVlFRF9BUFAgfCBDT05GSUdfUEFSVElDSVBBTlQsCisJLnJhdGVfb2Zmc2V0ID0gNSwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOX0RTUCwKKwkuZW5hYmxlX2JpdAk9IDEsCQkvKiBmb3IgaXBpICovCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGl2YTFfaWZjayA9IHsKKwkubmFtZQkJPSAiaXZhMV9pZmNrIiwKKwkucGFyZW50CQk9ICZjb3JlX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENNX0RTUF9TRUwxIHwgUkFURV9DS0NUTCB8CisJCQlDT05GSUdfUEFSVElDSVBBTlQgfCBSQVRFX1BST1BBR0FURVMgfCBERUxBWUVEX0FQUCwKKwkucmF0ZV9vZmZzZXQ9IDgsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTl9EU1AsCisJLmVuYWJsZV9iaXQJPSAxMCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworLyogSVZBMSBtcHUvaW50L2kvZiBjbG9ja3MgYXJlIC8yIG9mIHBhcmVudCAqLworc3RhdGljIHN0cnVjdCBjbGsgaXZhMV9tcHVfaW50X2lmY2sgPSB7CisJLm5hbWUJCT0gIml2YTFfbXB1X2ludF9pZmNrIiwKKwkucGFyZW50CQk9ICZpdmExX2lmY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgUkFURV9DS0NUTCB8IENNX0RTUF9TRUwxLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU5fRFNQLAorCS5lbmFibGVfYml0CT0gOCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworLyoKKyAqIEwzIGNsb2NrIGRvbWFpbgorICogTDMgY2xvY2tzIGFyZSB1c2VkIGZvciBib3RoIGludGVyZmFjZSBhbmQgZnVuY3Rpb25hbCBjbG9ja3MgdG8KKyAqIG11bHRpcGxlIGVudGl0aWVzLiBTb21lIG9mIHRoZXNlIGNsb2NrcyBhcmUgY29tcGxldGVseSBtYW5hZ2VkCisgKiBieSBoYXJkd2FyZSwgYW5kIHNvbWUgb3RoZXJzIGFsbG93IHNvZnR3YXJlIGNvbnRyb2wuIEhhcmR3YXJlCisgKiBtYW5hZ2VkIG9uZXMgZ2VuZXJhbCBhcmUgYmFzZWQgb24gZGlyZWN0bHkgQ0xLX1JFUSBzaWduYWxzIGFuZAorICogdmFyaW91cyBhdXRvIGlkbGUgc2V0dGluZ3MuIFRoZSBmdW5jdGlvbmFsIHNwZWMgc2V0cyBtYW55IG9mIHRoZXNlCisgKiBhcyAndGllLWhpZ2gnIGZvciB0aGVpciBlbmFibGVzLgorICoKKyAqIEktQ0xPQ0tTOgorICoJTDMtSW50ZXJjb25uZWN0LCBTTVMsIEdQTUMsIFNEUkMsIE9DTV9SQU0sIE9DTV9ST00sIFNETUEKKyAqCUNBTSwgSFMtVVNCLgorICogRi1DTE9DSworICoJU1NJLgorICoKKyAqIEdQTUMgbWVtb3JpZXMgYW5kIFNEUkMgaGF2ZSB0aW1pbmcgYW5kIGNsb2NrIHNlbnNpdGl2ZSByZWdpc3RlcnMgd2hpY2gKKyAqIG1heSB2ZXJ5IHdlbGwgbmVlZCBub3RpZmljYXRpb24gd2hlbiB0aGUgY2xvY2sgY2hhbmdlcy4gQ3VycmVudGx5IGZvciBsb3cKKyAqIG9wZXJhdGluZyBwb2ludHMsIHRoZXNlIGFyZSB0YWtlbiBjYXJlIG9mIGluIHNsZWVwLlMuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGNvcmVfbDNfY2sgPSB7CS8qIFVzZWQgZm9yIGljayBhbmQgZmNrLCBpbnRlcmNvbm5lY3QgKi8KKwkubmFtZQkJPSAiY29yZV9sM19jayIsCisJLnBhcmVudAkJPSAmY29yZV9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CisJCQkJUkFURV9DS0NUTCB8IEFMV0FZU19FTkFCTEVEIHwgQ01fQ09SRV9TRUwxIHwKKwkJCQlERUxBWUVEX0FQUCB8IENPTkZJR19QQVJUSUNJUEFOVCB8CisJCQkJUkFURV9QUk9QQUdBVEVTLAorCS5yYXRlX29mZnNldAk9IDAsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVzYl9sNF9pY2sgPSB7CS8qIEZTLVVTQiBpbnRlcmZhY2UgY2xvY2sgKi8KKwkubmFtZQkJPSAidXNiX2w0X2ljayIsCisJLnBhcmVudAkJPSAmY29yZV9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CisJCQkJUkFURV9DS0NUTCB8IENNX0NPUkVfU0VMMSB8IERFTEFZRURfQVBQIHwKKwkJCQlDT05GSUdfUEFSVElDSVBBTlQsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjJfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDAsCisJLnJhdGVfb2Zmc2V0ID0gMjUsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKKy8qCisgKiBTU0kgaXMgaW4gTDMgbWFuYWdlbWVudCBkb21haW4sIGl0cyBkaXJlY3QgcGFyZW50IGlzIGNvcmUgbm90IGwzLAorICogbWFueSBjb3JlIHBvd2VyIGRvbWFpbiBlbnRpdGllcyBhcmUgZ3JvdXBlZCBpbnRvIHRoZSBMMyBjbG9jaworICogZG9tYWluLgorICogU1NJX1NTUl9GQ0xLLCBTU0lfU1NUX0ZDTEssIFNTSV9MNF9DTElLCisgKgorICogc3NyID0gY29yZS8xLzIvMy80LzUsIHNzdCA9IDEvMiBzc3IuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIHNzaV9zc3Jfc3N0X2ZjayA9IHsKKwkubmFtZQkJPSAic3NpX2ZjayIsCisJLnBhcmVudAkJPSAmY29yZV9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CisJCQkJUkFURV9DS0NUTCB8IENNX0NPUkVfU0VMMSB8IERFTEFZRURfQVBQLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4yX0NPUkUsCS8qIGJpdCAxICovCisJLmVuYWJsZV9iaXQJPSAxLAorCS5yYXRlX29mZnNldCA9IDIwLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCisvKgorICogR0ZYIGNsb2NrIGRvbWFpbgorICoJQ2xvY2tzOgorICogR0ZYX0ZDTEssIEdGWF9JQ0xLCisgKiBHRlhfQ0cxKDJkKSwgR0ZYX0NHMigzZCkKKyAqCisgKiBHRlhfRkNMSyBydW5zIGZyb20gTDMsIGFuZCBpcyBkaXZpZGVkIGJ5ICgxLDIsMyw0KQorICogVGhlIDJkIGFuZCAzZCBjbG9ja3MgcnVuIGF0IGEgaGFyZHdhcmUgZGV0ZXJtaW5lZAorICogZGl2aWRlZCB2YWx1ZSBvZiBmY2xrLgorICoKKyAqLworc3RhdGljIHN0cnVjdCBjbGsgZ2Z4XzNkX2ZjayA9IHsKKwkubmFtZQkJPSAiZ2Z4XzNkX2ZjayIsCisJLnBhcmVudAkJPSAmY29yZV9sM19jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CisJCQkJUkFURV9DS0NUTCB8IENNX0dGWF9TRUwxLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU5fR0ZYLAorCS5lbmFibGVfYml0CT0gMiwKKwkucmF0ZV9vZmZzZXQ9IDAsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdmeF8yZF9mY2sgPSB7CisJLm5hbWUJCT0gImdmeF8yZF9mY2siLAorCS5wYXJlbnQJCT0gJmNvcmVfbDNfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAorCQkJCVJBVEVfQ0tDVEwgfCBDTV9HRlhfU0VMMSwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOX0dGWCwKKwkuZW5hYmxlX2JpdAk9IDEsCisJLnJhdGVfb2Zmc2V0PSAwLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBnZnhfaWNrID0geworCS5uYW1lCQk9ICJnZnhfaWNrIiwJCS8qIEZyb20gbDMgKi8KKwkucGFyZW50CQk9ICZjb3JlX2wzX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKKwkJCQlSQVRFX0NLQ1RMLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU5fR0ZYLAkvKiBiaXQgMCAqLworCS5lbmFibGVfYml0CT0gMCwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworLyoKKyAqIE1vZGVtIGNsb2NrIGRvbWFpbiAoMjQzMCkKKyAqCUNMT0NLUzoKKyAqCQlNRE1fT1NDX0NMSworICoJCU1ETV9JQ0xLCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIG1kbV9pY2sgPSB7CQkvKiB1c2VkIGJvdGggYXMgYSBpY2sgYW5kIGZjayAqLworCS5uYW1lCQk9ICJtZG1faWNrIiwKKwkucGFyZW50CQk9ICZjb3JlX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCB8IFJBVEVfQ0tDVEwgfCBDTV9NT0RFTV9TRUwxIHwKKwkJCQlERUxBWUVEX0FQUCB8IENPTkZJR19QQVJUSUNJUEFOVCwKKwkucmF0ZV9vZmZzZXQJPSAwLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU5fTURNLAorCS5lbmFibGVfYml0CT0gMCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWRtX29zY19jayA9IHsKKwkubmFtZQkJPSAibWRtX29zY19jayIsCisJLnJhdGUJCT0gMjYwMDAwMDAsCisJLnBhcmVudAkJPSAmb3NjX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCB8IFJBVEVfRklYRUQsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTl9NRE0sCisJLmVuYWJsZV9iaXQJPSAxLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKgorICogTDQgY2xvY2sgbWFuYWdlbWVudCBkb21haW4KKyAqCisgKiBUaGlzIGRvbWFpbiBjb250YWlucyBsb3RzIG9mIGludGVyZmFjZSBjbG9ja3MgZnJvbSB0aGUgTDQgaW50ZXJmYWNlLCBzb21lCisgKiBmdW5jdGlvbmFsIGNsb2Nrcy4JRml4ZWQgQVBMTCBmdW5jdGlvbmFsIHNvdXJjZSBjbG9ja3MgYXJlIG1hbmFnZWQgaW4KKyAqIHRoaXMgZG9tYWluLgorICovCitzdGF0aWMgc3RydWN0IGNsayBsNF9jayA9IHsJCS8qIHVzZWQgYm90aCBhcyBhbiBpY2sgYW5kIGZjayAqLworCS5uYW1lCQk9ICJsNF9jayIsCisJLnBhcmVudAkJPSAmY29yZV9sM19jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CisJCQkJUkFURV9DS0NUTCB8IEFMV0FZU19FTkFCTEVEIHwgQ01fQ09SRV9TRUwxIHwKKwkJCQlERUxBWUVEX0FQUCB8IFJBVEVfUFJPUEFHQVRFUywKKwkucmF0ZV9vZmZzZXQJPSA1LAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBzc2lfbDRfaWNrID0geworCS5uYW1lCQk9ICJzc2lfbDRfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8IFJBVEVfQ0tDVEwsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjJfQ09SRSwJLyogYml0IDEgKi8KKwkuZW5hYmxlX2JpdAk9IDEsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKKy8qCisgKiBEU1MgY2xvY2sgZG9tYWluCisgKiBDTE9DS3M6CisgKiBEU1NfTDRfSUNMSywgRFNTX0wzX0lDTEssCisgKiBEU1NfQ0xLMSwgRFNTX0NMSzIsIERTU181NE1Iel9DTEsKKyAqCisgKiBEU1MgaXMgYm90aCBpbml0aWF0b3IgYW5kIHRhcmdldC4KKyAqLworc3RhdGljIHN0cnVjdCBjbGsgZHNzX2ljayA9IHsJCS8qIEVuYWJsZXMgYm90aCBMMyxMNCBJQ0xLJ3MgKi8KKwkubmFtZQkJPSAiZHNzX2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCS8qIHJlYWxseSBib3RoIGwzIGFuZCBsNCAqLworCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwgUkFURV9DS0NUTCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMV9DT1JFLAorCS5lbmFibGVfYml0CT0gMCwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZHNzMV9mY2sgPSB7CisJLm5hbWUJCT0gImRzczFfZmNrIiwKKwkucGFyZW50CQk9ICZjb3JlX2NrLAkJLyogQ29yZSBvciBzeXMgKi8KKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CisJCQkJUkFURV9DS0NUTCB8IENNX0NPUkVfU0VMMSB8IERFTEFZRURfQVBQLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4xX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAwLAorCS5yYXRlX29mZnNldAk9IDgsCisJLnNyY19vZmZzZXQJPSA4LAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBkc3MyX2ZjayA9IHsJCS8qIEFsdCBjbGsgdXNlZCBpbiBwb3dlciBtYW5hZ2VtZW50ICovCisJLm5hbWUJCT0gImRzczJfZmNrIiwKKwkucGFyZW50CQk9ICZzeXNfY2ssCQkvKiBmaXhlZCBhdCBzeXNfY2sgb3IgNDhNSHogKi8KKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CisJCQkJUkFURV9DS0NUTCB8IENNX0NPUkVfU0VMMSB8IFJBVEVfRklYRUQsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjFfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDEsCisJLnNyY19vZmZzZXQJPSAxMywKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZHNzXzU0bV9mY2sgPSB7CS8qIEFsdCBjbGsgdXNlZCBpbiBwb3dlciBtYW5hZ2VtZW50ICovCisJLm5hbWUJCT0gImRzc181NG1fZmNrIiwJLyogNTRtIHR2IGNsayAqLworCS5wYXJlbnQJCT0gJmZ1bmNfNTRtX2NrLAorCS5yYXRlCQk9IDU0MDAwMDAwLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKKwkJCQlSQVRFX0ZJWEVEIHwgUkFURV9QUk9QQUdBVEVTLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4xX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAyLAorCS5yZWNhbGMJCT0gJm9tYXAyX3Byb3BhZ2F0ZV9yYXRlLAorfTsKKworLyoKKyAqIENPUkUgcG93ZXIgZG9tYWluIElDTEsgJiBGQ0xLIGRlZmluZXMuCisgKiBNYW55IG9mIHRoZSB0aGVzZSBjYW4gaGF2ZSBtb3JlIHRoYW4gb25lIHBvc3NpYmxlIHBhcmVudC4gRW50cmllcworICogaGVyZSB3aWxsIGxpa2VseSBoYXZlIGFuIEw0IGludGVyZmFjZSBwYXJlbnQsIGFuZCBtYXkgaGF2ZSBtdWx0aXBsZQorICogZnVuY3Rpb25hbCBjbG9jayBwYXJlbnRzLgorICovCitzdGF0aWMgc3RydWN0IGNsayBncHQxX2ljayA9IHsKKwkubmFtZQkJPSAiZ3B0MV9pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU5fV0tVUCwJLyogQml0NCAqLworCS5lbmFibGVfYml0CT0gMCwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0MV9mY2sgPSB7CisJLm5hbWUJCT0gImdwdDFfZmNrIiwKKwkucGFyZW50CQk9ICZmdW5jXzMya19jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CisJCQkJQ01fV0tVUF9TRUwxLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU5fV0tVUCwKKwkuZW5hYmxlX2JpdAk9IDAsCisJLnNyY19vZmZzZXQJPSAwLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQyX2ljayA9IHsKKwkubmFtZQkJPSAiZ3B0Ml9pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4xX0NPUkUsCS8qIGJpdDQgKi8KKwkuZW5hYmxlX2JpdAk9IDAsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDJfZmNrID0geworCS5uYW1lCQk9ICJncHQyX2ZjayIsCisJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAorCQkJCUNNX0NPUkVfU0VMMiwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMV9DT1JFLAorCS5lbmFibGVfYml0CT0gNCwKKwkuc3JjX29mZnNldAk9IDIsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDNfaWNrID0geworCS5uYW1lCQk9ICJncHQzX2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjFfQ09SRSwJLyogQml0NSAqLworCS5lbmFibGVfYml0CT0gNSwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0M19mY2sgPSB7CisJLm5hbWUJCT0gImdwdDNfZmNrIiwKKwkucGFyZW50CQk9ICZmdW5jXzMya19jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CisJCQkJQ01fQ09SRV9TRUwyLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4xX0NPUkUsCisJLmVuYWJsZV9iaXQJPSA1LAorCS5zcmNfb2Zmc2V0CT0gNCwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0NF9pY2sgPSB7CisJLm5hbWUJCT0gImdwdDRfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMV9DT1JFLAkvKiBCaXQ2ICovCisJLmVuYWJsZV9iaXQJPSA2LAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQ0X2ZjayA9IHsKKwkubmFtZQkJPSAiZ3B0NF9mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKKwkJCQlDTV9DT1JFX1NFTDIsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjFfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDYsCisJLnNyY19vZmZzZXQJPSA2LAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQ1X2ljayA9IHsKKwkubmFtZQkJPSAiZ3B0NV9pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4xX0NPUkUsCSAvKiBCaXQ3ICovCisJLmVuYWJsZV9iaXQJPSA3LAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQ1X2ZjayA9IHsKKwkubmFtZQkJPSAiZ3B0NV9mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKKwkJCQlDTV9DT1JFX1NFTDIsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjFfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDcsCisJLnNyY19vZmZzZXQJPSA4LAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQ2X2ljayA9IHsKKwkubmFtZQkJPSAiZ3B0Nl9pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfYml0CT0gOCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMV9DT1JFLAkgLyogYml0OCAqLworCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQ2X2ZjayA9IHsKKwkubmFtZQkJPSAiZ3B0Nl9mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKKwkJCQlDTV9DT1JFX1NFTDIsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjFfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDgsCisJLnNyY19vZmZzZXQJPSAxMCwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0N19pY2sgPSB7CisJLm5hbWUJCT0gImdwdDdfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMV9DT1JFLAkgLyogYml0OSAqLworCS5lbmFibGVfYml0CT0gOSwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0N19mY2sgPSB7CisJLm5hbWUJCT0gImdwdDdfZmNrIiwKKwkucGFyZW50CQk9ICZmdW5jXzMya19jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CisJCQkJQ01fQ09SRV9TRUwyLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4xX0NPUkUsCisJLmVuYWJsZV9iaXQJPSA5LAorCS5zcmNfb2Zmc2V0CT0gMTIsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDhfaWNrID0geworCS5uYW1lCQk9ICJncHQ4X2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjFfQ09SRSwJIC8qIGJpdDEwICovCisJLmVuYWJsZV9iaXQJPSAxMCwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0OF9mY2sgPSB7CisJLm5hbWUJCT0gImdwdDhfZmNrIiwKKwkucGFyZW50CQk9ICZmdW5jXzMya19jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CisJCQkJQ01fQ09SRV9TRUwyLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4xX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAxMCwKKwkuc3JjX29mZnNldAk9IDE0LAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQ5X2ljayA9IHsKKwkubmFtZQkJPSAiZ3B0OV9pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4xX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAxMSwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0OV9mY2sgPSB7CisJLm5hbWUJCT0gImdwdDlfZmNrIiwKKwkucGFyZW50CQk9ICZmdW5jXzMya19jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CisJCQkJCUNNX0NPUkVfU0VMMiwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMV9DT1JFLAorCS5lbmFibGVfYml0CT0gMTEsCisJLnNyY19vZmZzZXQJPSAxNiwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTBfaWNrID0geworCS5uYW1lCQk9ICJncHQxMF9pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4xX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAxMiwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTBfZmNrID0geworCS5uYW1lCQk9ICJncHQxMF9mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKKwkJCQkJQ01fQ09SRV9TRUwyLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4xX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAxMiwKKwkuc3JjX29mZnNldAk9IDE4LAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQxMV9pY2sgPSB7CisJLm5hbWUJCT0gImdwdDExX2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjFfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDEzLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQxMV9mY2sgPSB7CisJLm5hbWUJCT0gImdwdDExX2ZjayIsCisJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAorCQkJCQlDTV9DT1JFX1NFTDIsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjFfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDEzLAorCS5zcmNfb2Zmc2V0CT0gMjAsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDEyX2ljayA9IHsKKwkubmFtZQkJPSAiZ3B0MTJfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMV9DT1JFLAkgLyogYml0MTQgKi8KKwkuZW5hYmxlX2JpdAk9IDE0LAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQxMl9mY2sgPSB7CisJLm5hbWUJCT0gImdwdDEyX2ZjayIsCisJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAorCQkJCQlDTV9DT1JFX1NFTDIsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjFfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDE0LAorCS5zcmNfb2Zmc2V0CT0gMjIsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwMV9pY2sgPSB7CisJLm5hbWUJCT0gIm1jYnNwMV9pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfYml0CT0gMTUsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjFfQ09SRSwJIC8qIGJpdDE2ICovCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwMV9mY2sgPSB7CisJLm5hbWUJCT0gIm1jYnNwMV9mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfYml0CT0gMTUsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjFfQ09SRSwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNic3AyX2ljayA9IHsKKwkubmFtZQkJPSAibWNic3AyX2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9iaXQJPSAxNiwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMV9DT1JFLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY2JzcDJfZmNrID0geworCS5uYW1lCQk9ICJtY2JzcDJfZmNrIiwKKwkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX2JpdAk9IDE2LAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4xX0NPUkUsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwM19pY2sgPSB7CisJLm5hbWUJCT0gIm1jYnNwM19pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMl9DT1JFLAorCS5lbmFibGVfYml0CT0gMywKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNic3AzX2ZjayA9IHsKKwkubmFtZQkJPSAibWNic3AzX2ZjayIsCisJLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4yX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAzLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY2JzcDRfaWNrID0geworCS5uYW1lCQk9ICJtY2JzcDRfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjJfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDQsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwNF9mY2sgPSB7CisJLm5hbWUJCT0gIm1jYnNwNF9mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMl9DT1JFLAorCS5lbmFibGVfYml0CT0gNCwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNic3A1X2ljayA9IHsKKwkubmFtZQkJPSAibWNic3A1X2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4yX0NPUkUsCisJLmVuYWJsZV9iaXQJPSA1LAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY2JzcDVfZmNrID0geworCS5uYW1lCQk9ICJtY2JzcDVfZmNrIiwKKwkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjJfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDUsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpMV9pY2sgPSB7CisJLm5hbWUJCT0gIm1jc3BpMV9pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4xX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAxNywKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNzcGkxX2ZjayA9IHsKKwkubmFtZQkJPSAibWNzcGkxX2ZjayIsCisJLnBhcmVudAkJPSAmZnVuY180OG1fY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjFfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDE3LAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY3NwaTJfaWNrID0geworCS5uYW1lCQk9ICJtY3NwaTJfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMV9DT1JFLAorCS5lbmFibGVfYml0CT0gMTgsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpMl9mY2sgPSB7CisJLm5hbWUJCT0gIm1jc3BpMl9mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfNDhtX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4xX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAxOCwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNzcGkzX2ljayA9IHsKKwkubmFtZQkJPSAibWNzcGkzX2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4yX0NPUkUsCisJLmVuYWJsZV9iaXQJPSA5LAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY3NwaTNfZmNrID0geworCS5uYW1lCQk9ICJtY3NwaTNfZmNrIiwKKwkucGFyZW50CQk9ICZmdW5jXzQ4bV9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjJfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDksCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQxX2ljayA9IHsKKwkubmFtZQkJPSAidWFydDFfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMV9DT1JFLAorCS5lbmFibGVfYml0CT0gMjEsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQxX2ZjayA9IHsKKwkubmFtZQkJPSAidWFydDFfZmNrIiwKKwkucGFyZW50CQk9ICZmdW5jXzQ4bV9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMV9DT1JFLAorCS5lbmFibGVfYml0CT0gMjEsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQyX2ljayA9IHsKKwkubmFtZQkJPSAidWFydDJfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMV9DT1JFLAorCS5lbmFibGVfYml0CT0gMjIsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQyX2ZjayA9IHsKKwkubmFtZQkJPSAidWFydDJfZmNrIiwKKwkucGFyZW50CQk9ICZmdW5jXzQ4bV9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMV9DT1JFLAorCS5lbmFibGVfYml0CT0gMjIsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQzX2ljayA9IHsKKwkubmFtZQkJPSAidWFydDNfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMl9DT1JFLAorCS5lbmFibGVfYml0CT0gMiwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdWFydDNfZmNrID0geworCS5uYW1lCQk9ICJ1YXJ0M19mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfNDhtX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4yX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAyLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncGlvc19pY2sgPSB7CisJLm5hbWUJCT0gImdwaW9zX2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTl9XS1VQLAorCS5lbmFibGVfYml0CT0gMiwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3Bpb3NfZmNrID0geworCS5uYW1lCQk9ICJncGlvc19mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU5fV0tVUCwKKwkuZW5hYmxlX2JpdAk9IDIsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1wdV93ZHRfaWNrID0geworCS5uYW1lCQk9ICJtcHVfd2R0X2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTl9XS1VQLAorCS5lbmFibGVfYml0CT0gMywKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbXB1X3dkdF9mY2sgPSB7CisJLm5hbWUJCT0gIm1wdV93ZHRfZmNrIiwKKwkucGFyZW50CQk9ICZmdW5jXzMya19jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOX1dLVVAsCisJLmVuYWJsZV9iaXQJPSAzLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBzeW5jXzMya19pY2sgPSB7CisJLm5hbWUJCT0gInN5bmNfMzJrX2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTl9XS1VQLAorCS5lbmFibGVfYml0CT0gMSwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIHdkdDFfaWNrID0geworCS5uYW1lCQk9ICJ3ZHQxX2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTl9XS1VQLAorCS5lbmFibGVfYml0CT0gNCwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIG9tYXBjdHJsX2ljayA9IHsKKwkubmFtZQkJPSAib21hcGN0cmxfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOX1dLVVAsCisJLmVuYWJsZV9iaXQJPSA1LAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgaWNyX2ljayA9IHsKKwkubmFtZQkJPSAiaWNyX2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU5fV0tVUCwKKwkuZW5hYmxlX2JpdAk9IDYsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNhbV9pY2sgPSB7CisJLm5hbWUJCT0gImNhbV9pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4xX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAzMSwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgY2FtX2ZjayA9IHsKKwkubmFtZQkJPSAiY2FtX2ZjayIsCisJLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjFfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDMxLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtYWlsYm94ZXNfaWNrID0geworCS5uYW1lCQk9ICJtYWlsYm94ZXNfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMV9DT1JFLAorCS5lbmFibGVfYml0CT0gMzAsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHdkdDRfaWNrID0geworCS5uYW1lCQk9ICJ3ZHQ0X2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjFfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDI5LAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB3ZHQ0X2ZjayA9IHsKKwkubmFtZQkJPSAid2R0NF9mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4xX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAyOSwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgd2R0M19pY2sgPSB7CisJLm5hbWUJCT0gIndkdDNfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlgsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjFfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDI4LAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB3ZHQzX2ZjayA9IHsKKwkubmFtZQkJPSAid2R0M19mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMV9DT1JFLAorCS5lbmFibGVfYml0CT0gMjgsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1zcHJvX2ljayA9IHsKKwkubmFtZQkJPSAibXNwcm9faWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMV9DT1JFLAorCS5lbmFibGVfYml0CT0gMjcsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1zcHJvX2ZjayA9IHsKKwkubmFtZQkJPSAibXNwcm9fZmNrIiwKKwkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMV9DT1JFLAorCS5lbmFibGVfYml0CT0gMjcsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1tY19pY2sgPSB7CisJLm5hbWUJCT0gIm1tY19pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMV9DT1JFLAorCS5lbmFibGVfYml0CT0gMjYsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1tY19mY2sgPSB7CisJLm5hbWUJCT0gIm1tY19mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMV9DT1JFLAorCS5lbmFibGVfYml0CT0gMjYsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGZhY19pY2sgPSB7CisJLm5hbWUJCT0gImZhY19pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4xX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAyNSwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZmFjX2ZjayA9IHsKKwkubmFtZQkJPSAiZmFjX2ZjayIsCisJLnBhcmVudAkJPSAmZnVuY18xMm1fY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjFfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDI1LAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBlYWNfaWNrID0geworCS5uYW1lCQk9ICJlYWNfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlgsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjFfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDI0LAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBlYWNfZmNrID0geworCS5uYW1lCQk9ICJlYWNfZmNrIiwKKwkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlgsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjFfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDI0LAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBoZHFfaWNrID0geworCS5uYW1lCQk9ICJoZHFfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMV9DT1JFLAorCS5lbmFibGVfYml0CT0gMjMsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGhkcV9mY2sgPSB7CisJLm5hbWUJCT0gImhkcV9mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfMTJtX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4xX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAyMywKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgaTJjMl9pY2sgPSB7CisJLm5hbWUJCT0gImkyYzJfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMV9DT1JFLAorCS5lbmFibGVfYml0CT0gMjAsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGkyYzJfZmNrID0geworCS5uYW1lCQk9ICJpMmMyX2ZjayIsCisJLnBhcmVudAkJPSAmZnVuY18xMm1fY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjFfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDIwLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBpMmNoczJfZmNrID0geworCS5uYW1lCQk9ICJpMmNoczJfZmNrIiwKKwkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjJfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDIwLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBpMmMxX2ljayA9IHsKKwkubmFtZQkJPSAiaTJjMV9pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4xX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAxOSwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgaTJjMV9mY2sgPSB7CisJLm5hbWUJCT0gImkyYzFfZmNrIiwKKwkucGFyZW50CQk9ICZmdW5jXzEybV9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMV9DT1JFLAorCS5lbmFibGVfYml0CT0gMTksCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGkyY2hzMV9mY2sgPSB7CisJLm5hbWUJCT0gImkyY2hzMV9mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMl9DT1JFLAorCS5lbmFibGVfYml0CT0gMTksCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHZseW5xX2ljayA9IHsKKwkubmFtZQkJPSAidmx5bnFfaWNrIiwKKwkucGFyZW50CQk9ICZjb3JlX2wzX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMV9DT1JFLAorCS5lbmFibGVfYml0CT0gMywKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdmx5bnFfZmNrID0geworCS5uYW1lCQk9ICJ2bHlucV9mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCAgfCBSQVRFX0NLQ1RMIHwgQ01fQ09SRV9TRUwxIHwgREVMQVlFRF9BUFAsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjFfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDMsCisJLnNyY19vZmZzZXQJPSAxNSwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc2RyY19pY2sgPSB7CisJLm5hbWUJCT0gInNkcmNfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjNfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDIsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRlc19pY2sgPSB7CisJLm5hbWUJCT0gImRlc19pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCB8IENMT0NLX0lOX09NQVAyNDJYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU40X0NPUkUsCisJLmVuYWJsZV9iaXQJPSAwLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBzaGFfaWNrID0geworCS5uYW1lCQk9ICJzaGFfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1ggfCBDTE9DS19JTl9PTUFQMjQyWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VONF9DT1JFLAorCS5lbmFibGVfYml0CT0gMSwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgcm5nX2ljayA9IHsKKwkubmFtZQkJPSAicm5nX2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYIHwgQ0xPQ0tfSU5fT01BUDI0MlgsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjRfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDIsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGFlc19pY2sgPSB7CisJLm5hbWUJCT0gImFlc19pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCB8IENMT0NLX0lOX09NQVAyNDJYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU40X0NPUkUsCisJLmVuYWJsZV9iaXQJPSAzLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBwa2FfaWNrID0geworCS5uYW1lCQk9ICJwa2FfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1ggfCBDTE9DS19JTl9PTUFQMjQyWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VONF9DT1JFLAorCS5lbmFibGVfYml0CT0gNCwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdXNiX2ZjayA9IHsKKwkubmFtZQkJPSAidXNiX2ZjayIsCisJLnBhcmVudAkJPSAmZnVuY180OG1fY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYIHwgQ0xPQ0tfSU5fT01BUDI0MlgsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjJfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDAsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVzYmhzX2ljayA9IHsKKwkubmFtZQkJPSAidXNiaHNfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjJfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDYsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1tY2hzMV9pY2sgPSB7CisJLm5hbWUJCT0gIm1tY2hzMV9pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMl9DT1JFLAorCS5lbmFibGVfYml0CT0gNywKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbW1jaHMxX2ZjayA9IHsKKwkubmFtZQkJPSAibW1jaHMxX2ZjayIsCisJLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4yX0NPUkUsCisJLmVuYWJsZV9iaXQJPSA3LAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtbWNoczJfaWNrID0geworCS5uYW1lCQk9ICJtbWNoczJfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjJfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDgsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1tY2hzMl9mY2sgPSB7CisJLm5hbWUJCT0gIm1tY2hzMl9mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMl9DT1JFLAorCS5lbmFibGVfYml0CT0gOCwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzVfaWNrID0geworCS5uYW1lCQk9ICJncGlvNV9pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMl9DT1JFLAorCS5lbmFibGVfYml0CT0gMTAsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwaW81X2ZjayA9IHsKKwkubmFtZQkJPSAiZ3BpbzVfZmNrIiwKKwkucGFyZW50CQk9ICZmdW5jXzMya19jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjJfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDEwLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtZG1faW50Y19pY2sgPSB7CisJLm5hbWUJCT0gIm1kbV9pbnRjX2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4yX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAxMSwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbW1jaHNkYjFfZmNrID0geworCS5uYW1lCQk9ICJtbWNoc2RiMV9mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMl9DT1JFLAorCS5lbmFibGVfYml0CT0gMTYsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1tY2hzZGIyX2ZjayA9IHsKKwkubmFtZQkJPSAibW1jaHNkYjJfZmNrIiwKKwkucGFyZW50CQk9ICZmdW5jXzMya19jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjJfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDE3LAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKgorICogVGhpcyBjbG9jayBpcyBhIGNvbXBvc2l0ZSBjbG9jayB3aGljaCBkb2VzIGVudGlyZSBzZXQgY2hhbmdlcyB0aGVuCisgKiBmb3JjZXMgYSByZWJhbGFuY2UuIEl0IGtleXMgb24gdGhlIE1QVSBzcGVlZCwgYnV0IGl0IHJlYWxseSBjb3VsZAorICogYmUgYW55IGtleSBzcGVlZCBwYXJ0IG9mIGEgc2V0IGluIHRoZSByYXRlIHRhYmxlLgorICoKKyAqIHRvIHJlYWxseSBjaGFuZ2UgYSBzZXQsIHlvdSBuZWVkIG1lbW9yeSB0YWJsZSBzZXRzIHdoaWNoIGdldCBjaGFuZ2VkCisgKiBpbiBzcmFtLCBwcmUtbm90aWZpZXJzICYgcG9zdCBub3RpZmllcnMsIGNoYW5naW5nIHRoZSB0b3Agc2V0LCB3aXRob3V0CisgKiBoYXZpbmcgbG93IGxldmVsIGRpc3BsYXkgcmVjYWxjJ3Mgd29uJ3Qgd29yay4uLiB0aGlzIGlzIHdoeSBkcG0gbm90aWZpZXJzCisgKiB3b3JrLCBpc3IncyBvZmYsIHdhbGsgYSBsaXN0IG9mIGNsb2NrcyBhbHJlYWR5IF9vZmZfIGFuZCBub3QgbWVzc2luZyB3aXRoCisgKiB0aGUgYnVzLgorICoKKyAqIFRoaXMgY2xvY2sgc2hvdWxkIGhhdmUgbm8gcGFyZW50LiBJdCBlbWJvZGllcyB0aGUgZW50aXJlIHVwcGVyIGxldmVsCisgKiBhY3RpdmUgc2V0LiBBIHBhcmVudCB3aWxsIG1lc3MgdXAgc29tZSBvZiB0aGUgaW5pdCBhbHNvLgorICovCitzdGF0aWMgc3RydWN0IGNsayB2aXJ0X3ByY21fc2V0ID0geworCS5uYW1lCQk9ICJ2aXJ0X3ByY21fc2V0IiwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CisJCQkJVklSVFVBTF9DTE9DSyB8IEFMV0FZU19FTkFCTEVEIHwgREVMQVlFRF9BUFAsCisJLnBhcmVudAkJPSAmbXB1X2NrLAkvKiBJbmRleGVkIGJ5IG1wdSBzcGVlZCwgbm8gcGFyZW50ICovCisJLnJlY2FsYwkJPSAmb21hcDJfbXB1X3JlY2FsYywJLyogc2V0cyBhcmUga2V5ZWQgb24gbXB1IHJhdGUgKi8KKwkuc2V0X3JhdGUJPSAmb21hcDJfc2VsZWN0X3RhYmxlX3JhdGUsCisJLnJvdW5kX3JhdGUJPSAmb21hcDJfcm91bmRfdG9fdGFibGVfcmF0ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrICpvbmNoaXBfY2xrc1tdID0geworCS8qIGV4dGVybmFsIHJvb3Qgc291cmNlcyAqLworCSZmdW5jXzMya19jaywKKwkmb3NjX2NrLAorCSZzeXNfY2ssCisJJmFsdF9jaywKKwkvKiBpbnRlcm5hbCBhbmFsb2cgc291cmNlcyAqLworCSZkcGxsX2NrLAorCSZhcGxsOTZfY2ssCisJJmFwbGw1NF9jaywKKwkvKiBpbnRlcm5hbCBwcmNtIHJvb3Qgc291cmNlcyAqLworCSZmdW5jXzU0bV9jaywKKwkmY29yZV9jaywKKwkmc2xlZXBfY2ssCisJJmZ1bmNfOTZtX2NrLAorCSZmdW5jXzQ4bV9jaywKKwkmZnVuY18xMm1fY2ssCisJJndkdDFfb3NjX2NrLAorCSZzeXNfY2xrb3V0LAorCSZzeXNfY2xrb3V0MiwKKwkvKiBtcHUgZG9tYWluIGNsb2NrcyAqLworCSZtcHVfY2ssCisJLyogZHNwIGRvbWFpbiBjbG9ja3MgKi8KKwkmaXZhMl8xX2ZjaywJCS8qIDI0MzAgKi8KKwkmaXZhMl8xX2ljaywKKwkmZHNwX2ljaywJCS8qIDI0MjAgKi8KKwkmZHNwX2ZjaywKKwkmaXZhMV9pZmNrLAorCSZpdmExX21wdV9pbnRfaWZjaywKKwkvKiBHRlggZG9tYWluIGNsb2NrcyAqLworCSZnZnhfM2RfZmNrLAorCSZnZnhfMmRfZmNrLAorCSZnZnhfaWNrLAorCS8qIE1vZGVtIGRvbWFpbiBjbG9ja3MgKi8KKwkmbWRtX2ljaywKKwkmbWRtX29zY19jaywKKwkvKiBEU1MgZG9tYWluIGNsb2NrcyAqLworCSZkc3NfaWNrLAorCSZkc3MxX2ZjaywKKwkmZHNzMl9mY2ssCisJJmRzc181NG1fZmNrLAorCS8qIEwzIGRvbWFpbiBjbG9ja3MgKi8KKwkmY29yZV9sM19jaywKKwkmc3NpX3Nzcl9zc3RfZmNrLAorCSZ1c2JfbDRfaWNrLAorCS8qIEw0IGRvbWFpbiBjbG9ja3MgKi8KKwkmbDRfY2ssCQkJLyogdXNlZCBhcyBib3RoIGNvcmVfbDQgYW5kIHd1X2w0ICovCisJJnNzaV9sNF9pY2ssCisJLyogdmlydHVhbCBtZXRhLWdyb3VwIGNsb2NrICovCisJJnZpcnRfcHJjbV9zZXQsCisJLyogZ2VuZXJhbCBsNCBpbnRlcmZhY2UgY2ssIG11bHRpLXBhcmVudCBmdW5jdGlvbmFsIGNsayAqLworCSZncHQxX2ljaywKKwkmZ3B0MV9mY2ssCisJJmdwdDJfaWNrLAorCSZncHQyX2ZjaywKKwkmZ3B0M19pY2ssCisJJmdwdDNfZmNrLAorCSZncHQ0X2ljaywKKwkmZ3B0NF9mY2ssCisJJmdwdDVfaWNrLAorCSZncHQ1X2ZjaywKKwkmZ3B0Nl9pY2ssCisJJmdwdDZfZmNrLAorCSZncHQ3X2ljaywKKwkmZ3B0N19mY2ssCisJJmdwdDhfaWNrLAorCSZncHQ4X2ZjaywKKwkmZ3B0OV9pY2ssCisJJmdwdDlfZmNrLAorCSZncHQxMF9pY2ssCisJJmdwdDEwX2ZjaywKKwkmZ3B0MTFfaWNrLAorCSZncHQxMV9mY2ssCisJJmdwdDEyX2ljaywKKwkmZ3B0MTJfZmNrLAorCSZtY2JzcDFfaWNrLAorCSZtY2JzcDFfZmNrLAorCSZtY2JzcDJfaWNrLAorCSZtY2JzcDJfZmNrLAorCSZtY2JzcDNfaWNrLAorCSZtY2JzcDNfZmNrLAorCSZtY2JzcDRfaWNrLAorCSZtY2JzcDRfZmNrLAorCSZtY2JzcDVfaWNrLAorCSZtY2JzcDVfZmNrLAorCSZtY3NwaTFfaWNrLAorCSZtY3NwaTFfZmNrLAorCSZtY3NwaTJfaWNrLAorCSZtY3NwaTJfZmNrLAorCSZtY3NwaTNfaWNrLAorCSZtY3NwaTNfZmNrLAorCSZ1YXJ0MV9pY2ssCisJJnVhcnQxX2ZjaywKKwkmdWFydDJfaWNrLAorCSZ1YXJ0Ml9mY2ssCisJJnVhcnQzX2ljaywKKwkmdWFydDNfZmNrLAorCSZncGlvc19pY2ssCisJJmdwaW9zX2ZjaywKKwkmbXB1X3dkdF9pY2ssCisJJm1wdV93ZHRfZmNrLAorCSZzeW5jXzMya19pY2ssCisJJndkdDFfaWNrLAorCSZvbWFwY3RybF9pY2ssCisJJmljcl9pY2ssCisJJmNhbV9mY2ssCisJJmNhbV9pY2ssCisJJm1haWxib3hlc19pY2ssCisJJndkdDRfaWNrLAorCSZ3ZHQ0X2ZjaywKKwkmd2R0M19pY2ssCisJJndkdDNfZmNrLAorCSZtc3Byb19pY2ssCisJJm1zcHJvX2ZjaywKKwkmbW1jX2ljaywKKwkmbW1jX2ZjaywKKwkmZmFjX2ljaywKKwkmZmFjX2ZjaywKKwkmZWFjX2ljaywKKwkmZWFjX2ZjaywKKwkmaGRxX2ljaywKKwkmaGRxX2ZjaywKKwkmaTJjMV9pY2ssCisJJmkyYzFfZmNrLAorCSZpMmNoczFfZmNrLAorCSZpMmMyX2ljaywKKwkmaTJjMl9mY2ssCisJJmkyY2hzMl9mY2ssCisJJnZseW5xX2ljaywKKwkmdmx5bnFfZmNrLAorCSZzZHJjX2ljaywKKwkmZGVzX2ljaywKKwkmc2hhX2ljaywKKwkmcm5nX2ljaywKKwkmYWVzX2ljaywKKwkmcGthX2ljaywKKwkmdXNiX2ZjaywKKwkmdXNiaHNfaWNrLAorCSZtbWNoczFfaWNrLAorCSZtbWNoczFfZmNrLAorCSZtbWNoczJfaWNrLAorCSZtbWNoczJfZmNrLAorCSZncGlvNV9pY2ssCisJJmdwaW81X2ZjaywKKwkmbWRtX2ludGNfaWNrLAorCSZtbWNoc2RiMV9mY2ssCisJJm1tY2hzZGIyX2ZjaywKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2RldmljZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTgxZWRiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9kZXZpY2VzLmMKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcDIvZGV2aWNlcy5jCisgKgorICogT01BUDIgcGxhdGZvcm0gZGV2aWNlIHNldHVwL2luaXRpYWxpemF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL3RjLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvYm9hcmQuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9tdXguaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ncGlvLmg+CisKK2V4dGVybiB2b2lkIG9tYXBfbm9wX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmIAlkZWZpbmVkKENPTkZJR19JMkNfT01BUCkgfHwgZGVmaW5lZChDT05GSUdfSTJDX09NQVBfTU9EVUxFKQorCisjZGVmaW5lIE9NQVAyX0kyQ19CQVNFMgkJMHg0ODA3MjAwMAorI2RlZmluZSBPTUFQMl9JMkNfSU5UMgkJNTcKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpMmNfcmVzb3VyY2VzMltdID0geworCXsKKwkJLnN0YXJ0CQk9IE9NQVAyX0kyQ19CQVNFMiwKKwkJLmVuZAkJPSBPTUFQMl9JMkNfQkFTRTIgKyAweDNmLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAkJPSBPTUFQMl9JMkNfSU5UMiwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvbWFwX2kyY19kZXZpY2UyID0geworICAgICAgICAubmFtZSAgICAgICAgICAgPSAiaTJjX29tYXAiLAorICAgICAgICAuaWQgICAgICAgICAgICAgPSAyLAorICAgICAgICAuZGV2ID0geworICAgICAgICAgICAgICAgIC5yZWxlYXNlICAgICAgICA9IG9tYXBfbm9wX3JlbGVhc2UsCisgICAgICAgIH0sCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGkyY19yZXNvdXJjZXMyKSwKKwkucmVzb3VyY2UJPSBpMmNfcmVzb3VyY2VzMiwKK307CisKKy8qIFNlZSBhbHNvIGFyY2gvYXJtL3BsYXQtb21hcC9kZXZpY2VzLmMgZm9yIGZpcnN0IEkyQyBvbiAyNHh4ICovCitzdGF0aWMgdm9pZCBvbWFwX2luaXRfaTJjKHZvaWQpCit7CisJLyogUkVWSVNJVDogU2Vjb25kIEkyQyBub3QgaW4gdXNlIG9uIEg0PyAqLworCWlmIChtYWNoaW5lX2lzX29tYXBfaDQoKSkKKwkJcmV0dXJuOworCisJb21hcF9jZmdfcmVnKEoxNV8yNFhYX0kyQzJfU0NMKTsKKwlvbWFwX2NmZ19yZWcoSDE5XzI0WFhfSTJDMl9TREEpOworCSh2b2lkKSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm9tYXBfaTJjX2RldmljZTIpOworfQorCisjZWxzZQorCitzdGF0aWMgdm9pZCBvbWFwX2luaXRfaTJjKHZvaWQpIHt9CisKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IF9faW5pdCBvbWFwMl9pbml0X2RldmljZXModm9pZCkKK3sKKwkvKiBwbGVhc2Uga2VlcCB0aGVzZSBjYWxscywgYW5kIHRoZWlyIGltcGxlbWVudGF0aW9ucyBhYm92ZSwKKwkgKiBpbiBhbHBoYWJldGljYWwgb3JkZXIgc28gdGhleSdyZSBlYXNpZXIgdG8gc29ydCB0aHJvdWdoLgorCSAqLworCW9tYXBfaW5pdF9pMmMoKTsKKworCXJldHVybiAwOworfQorYXJjaF9pbml0Y2FsbChvbWFwMl9pbml0X2RldmljZXMpOworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2lkLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2lkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzYxODczMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaWQuYwpAQCAtMCwwICsxLDEyNCBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcDIvaWQuYworICoKKyAqIE9NQVAyIENQVSBpZGVudGlmaWNhdGlvbiBjb2RlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IE5va2lhIENvcnBvcmF0aW9uCisgKiBXcml0dGVuIGJ5IFRvbnkgTGluZGdyZW4gPHRvbnlAYXRvbWlkZS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKyNkZWZpbmUgT01BUDI0WFhfVEFQX0JBU0UJaW9fcDJ2KDB4NDgwMTQwMDApCisKKyNkZWZpbmUgT01BUF9UQVBfSURDT0RFCQkweDAyMDQKKyNkZWZpbmUgT01BUF9UQVBfUFJPRF9JRAkweDAyMDgKKworI2RlZmluZSBPTUFQX1RBUF9ESUVfSURfMAkweDAyMTgKKyNkZWZpbmUgT01BUF9UQVBfRElFX0lEXzEJMHgwMjFDCisjZGVmaW5lIE9NQVBfVEFQX0RJRV9JRF8yCTB4MDIyMAorI2RlZmluZSBPTUFQX1RBUF9ESUVfSURfMwkweDAyMjQKKworLyogc3lzdGVtX3JldiBmaWVsZHMgZm9yIE9NQVAyIHByb2Nlc3NvcnM6CisgKiAgIENQVSBpZCBiaXRzICAgICBbMzE6MTZdLAorICogICBDUFUgZGV2aWNlIHR5cGUgWzE1OjEyXSwgKHVucHJnLG5vcm1hbCxQT1ApCisgKiAgIENQVSByZXZpc2lvbiAgICBbMTE6MDhdCisgKiAgIENQVSBjbGFzcyBiaXRzICBbMDc6MDBdCisgKi8KKworc3RydWN0IG9tYXBfaWQgeworCXUxNgloYXdrZXllOwkvKiBTaWxpY29uIHR5cGUgKEhhd2tleWUgaWQpICovCisJdTgJZGV2OwkJLyogRGV2aWNlIHR5cGUgZnJvbSBwcm9kdWN0aW9uX2lkIHJlZyAqLworCXUzMgl0eXBlOwkJLyogY29tYmluZWQgdHlwZSBpZCBjb3BpZWQgdG8gc3lzdGVtX3JldiAqLworfTsKKworLyogUmVnaXN0ZXIgdmFsdWVzIHRvIGRldGVjdCB0aGUgT01BUCB2ZXJzaW9uICovCitzdGF0aWMgc3RydWN0IG9tYXBfaWQgb21hcF9pZHNbXSBfX2luaXRkYXRhID0geworCXsgLmhhd2tleWUgPSAweGI1ZDksIC5kZXYgPSAweDAsIC50eXBlID0gMHgyNDIwMDAwMCB9LAorCXsgLmhhd2tleWUgPSAweGI1ZDksIC5kZXYgPSAweDEsIC50eXBlID0gMHgyNDIwMTAwMCB9LAorCXsgLmhhd2tleWUgPSAweGI1ZDksIC5kZXYgPSAweDIsIC50eXBlID0gMHgyNDIwMjAwMCB9LAorCXsgLmhhd2tleWUgPSAweGI1ZDksIC5kZXYgPSAweDQsIC50eXBlID0gMHgyNDIyMDAwMCB9LAorCXsgLmhhd2tleWUgPSAweGI1ZDksIC5kZXYgPSAweDgsIC50eXBlID0gMHgyNDIzMDAwMCB9LAorCXsgLmhhd2tleWUgPSAweGI2OGEsIC5kZXYgPSAweDAsIC50eXBlID0gMHgyNDMwMDAwMCB9LAorfTsKKworc3RhdGljIHUzMiBfX2luaXQgcmVhZF90YXBfcmVnKGludCByZWcpCit7CisJcmV0dXJuIF9fcmF3X3JlYWRsKE9NQVAyNFhYX1RBUF9CQVNFICsgcmVnKTsKK30KKwordm9pZCBfX2luaXQgb21hcDJfY2hlY2tfcmV2aXNpb24odm9pZCkKK3sKKwlpbnQgaSwgajsKKwl1MzIgaWRjb2RlOworCXUzMiBwcm9kX2lkOworCXUxNiBoYXdrZXllOworCXU4ICBkZXZfdHlwZTsKKwl1OCAgcmV2OworCisJaWRjb2RlID0gcmVhZF90YXBfcmVnKE9NQVBfVEFQX0lEQ09ERSk7CisJcHJvZF9pZCA9IHJlYWRfdGFwX3JlZyhPTUFQX1RBUF9QUk9EX0lEKTsKKwloYXdrZXllID0gKGlkY29kZSA+PiAxMikgJiAweGZmZmY7CisJcmV2ID0gKGlkY29kZSA+PiAyOCkgJiAweDBmOworCWRldl90eXBlID0gKHByb2RfaWQgPj4gMTYpICYgMHgwZjsKKworI2lmZGVmIERFQlVHCisJcHJpbnRrKEtFUk5fREVCVUcgIk9NQVBfVEFQX0lEQ09ERSAweCUwOHggUkVWICVpIEhBV0tFWUUgMHglMDR4IE1BTkYgJTAzeFxuIiwKKwkJaWRjb2RlLCByZXYsIGhhd2tleWUsIChpZGNvZGUgPj4gMSkgJiAweDdmZik7CisJcHJpbnRrKEtFUk5fREVCVUcgIk9NQVBfVEFQX0RJRV9JRF8wOiAweCUwOHhcbiIsCisJCXJlYWRfdGFwX3JlZyhPTUFQX1RBUF9ESUVfSURfMCkpOworCXByaW50ayhLRVJOX0RFQlVHICJPTUFQX1RBUF9ESUVfSURfMTogMHglMDh4IERFVl9SRVY6ICVpXG4iLAorCQlyZWFkX3RhcF9yZWcoT01BUF9UQVBfRElFX0lEXzEpLAorCSAgICAgICAocmVhZF90YXBfcmVnKE9NQVBfVEFQX0RJRV9JRF8xKSA+PiAyOCkgJiAweGYpOworCXByaW50ayhLRVJOX0RFQlVHICJPTUFQX1RBUF9ESUVfSURfMjogMHglMDh4XG4iLAorCQlyZWFkX3RhcF9yZWcoT01BUF9UQVBfRElFX0lEXzIpKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiT01BUF9UQVBfRElFX0lEXzM6IDB4JTA4eFxuIiwKKwkJcmVhZF90YXBfcmVnKE9NQVBfVEFQX0RJRV9JRF8zKSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIk9NQVBfVEFQX1BST0RfSURfMDogMHglMDh4IERFVl9UWVBFOiAlaVxuIiwKKwkJcHJvZF9pZCwgZGV2X3R5cGUpOworI2VuZGlmCisKKwkvKiBDaGVjayBoYXdrZXllIGlkcyAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG9tYXBfaWRzKTsgaSsrKSB7CisJCWlmIChoYXdrZXllID09IG9tYXBfaWRzW2ldLmhhd2tleWUpCisJCQlicmVhazsKKwl9CisKKwlpZiAoaSA9PSBBUlJBWV9TSVpFKG9tYXBfaWRzKSkgeworCQlwcmludGsoS0VSTl9FUlIgIlVua25vd24gT01BUCBDUFUgaWRcbiIpOworCQlyZXR1cm47CisJfQorCisJZm9yIChqID0gaTsgaiA8IEFSUkFZX1NJWkUob21hcF9pZHMpOyBqKyspIHsKKwkJaWYgKGRldl90eXBlID09IG9tYXBfaWRzW2pdLmRldikKKwkJCWJyZWFrOworCX0KKworCWlmIChqID09IEFSUkFZX1NJWkUob21hcF9pZHMpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiVW5rbm93biBPTUFQIGRldmljZSB0eXBlLiAiCisJCQkJIkhhbmRsaW5nIGl0IGFzIE9NQVAlMDR4XG4iLAorCQkJCW9tYXBfaWRzW2ldLnR5cGUgPj4gMTYpOworCQlqID0gaTsKKwl9CisJc3lzdGVtX3JldiA9IG9tYXBfaWRzW2pdLnR5cGU7CisKKwlzeXN0ZW1fcmV2IHw9IHJldiA8PCA4OworCisJLyogQWRkIHRoZSBjcHUgY2xhc3MgaW5mbyAoMjR4eCkgKi8KKwlzeXN0ZW1fcmV2IHw9IDB4MjQ7CisKKwlwcl9pbmZvKCJPTUFQJTA0eCIsIHN5c3RlbV9yZXYgPj4gMTYpOworCWlmICgoc3lzdGVtX3JldiA+PiA4KSAmIDB4MGYpCisJCXByaW50aygiJXgiLCAoc3lzdGVtX3JldiA+PiA4KSAmIDB4MGYpOworCXByaW50aygiXG4iKTsKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pby5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlYTY3YmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2lvLmMKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcDIvaW8uYworICoKKyAqIE9NQVAyIEkvTyBtYXBwaW5nIGNvZGUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgTm9raWEgQ29ycG9yYXRpb24KKyAqIEF1dGhvcjogSnVoYSBZcmr2bOQgPGp1aGEueXJqb2xhQG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9tdXguaD4KKworZXh0ZXJuIHZvaWQgb21hcF9zcmFtX2luaXQodm9pZCk7CitleHRlcm4gaW50IG9tYXAyX2Nsa19pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgb21hcDJfY2hlY2tfcmV2aXNpb24odm9pZCk7CisKKy8qCisgKiBUaGUgbWFjaGluZSBzcGVjaWZpYyBjb2RlIG1heSBwcm92aWRlIHRoZSBleHRyYSBtYXBwaW5nIGJlc2lkZXMgdGhlCisgKiBkZWZhdWx0IG1hcHBpbmcgcHJvdmlkZWQgaGVyZS4KKyAqLworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBvbWFwMl9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKKwl7CisJCS52aXJ0dWFsCT0gTDNfMjRYWF9WSVJULAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oTDNfMjRYWF9QSFlTKSwKKwkJLmxlbmd0aAkJPSBMM18yNFhYX1NJWkUsCisJCS50eXBlCQk9IE1UX0RFVklDRQorCX0sCisJeworCQkudmlydHVhbAk9IEw0XzI0WFhfVklSVCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEw0XzI0WFhfUEhZUyksCisJCS5sZW5ndGgJCT0gTDRfMjRYWF9TSVpFLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UKKwl9Cit9OworCit2b2lkIF9faW5pdCBvbWFwX21hcF9jb21tb25faW8odm9pZCkKK3sKKwlpb3RhYmxlX2luaXQob21hcDJfaW9fZGVzYywgQVJSQVlfU0laRShvbWFwMl9pb19kZXNjKSk7CisJb21hcDJfY2hlY2tfcmV2aXNpb24oKTsKKwlvbWFwX3NyYW1faW5pdCgpOworCW9tYXAyX211eF9pbml0KCk7CisJb21hcDJfY2xrX2luaXQoKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvaXJxLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2lycS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3YmFmZjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2lycS5jCkBAIC0wLDAgKzEsMTQ5IEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwL29tYXAyL2lycS5jCisgKgorICogSW50ZXJydXB0IGhhbmRsZXIgZm9yIE9NQVAyIGJvYXJkcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgTm9raWEgQ29ycG9yYXRpb24KKyAqIEF1dGhvcjogUGF1bCBNdW5kdCA8cGF1bC5tdW5kdEBub2tpYS5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKyNkZWZpbmUgSU5UQ19SRVZJU0lPTgkweDAwMDAKKyNkZWZpbmUgSU5UQ19TWVNDT05GSUcJMHgwMDEwCisjZGVmaW5lIElOVENfU1lTU1RBVFVTCTB4MDAxNAorI2RlZmluZSBJTlRDX0NPTlRST0wJMHgwMDQ4CisjZGVmaW5lIElOVENfTUlSX0NMRUFSMAkweDAwODgKKyNkZWZpbmUgSU5UQ19NSVJfU0VUMAkweDAwOGMKKworLyoKKyAqIE9NQVAyIGhhcyBhIG51bWJlciBvZiBkaWZmZXJlbnQgaW50ZXJydXB0IGNvbnRyb2xsZXJzLCBlYWNoIGludGVycnVwdAorICogY29udHJvbGxlciBpcyBpZGVudGlmaWVkIGFzIGl0cyBvd24gImJhbmsiLiBSZWdpc3RlciBkZWZpbml0aW9ucyBhcmUKKyAqIGZhaXJseSBjb25zaXN0ZW50IGZvciBlYWNoIGJhbmssIGJ1dCBub3QgYWxsIHJlZ2lzdGVycyBhcmUgaW1wbGVtZW50ZWQKKyAqIGZvciBlYWNoIGJhbmsuLiB3aGVuIGluIGRvdWJ0LCBjb25zdWx0IHRoZSBUUk0uCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9pcnFfYmFuayB7CisJdW5zaWduZWQgbG9uZyBiYXNlX3JlZzsKKwl1bnNpZ25lZCBpbnQgbnJfaXJxczsKK30gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoNCkpKSBpcnFfYmFua3NbXSA9IHsKKwl7CisJCS8qIE1QVSBJTlRDICovCisJCS5iYXNlX3JlZwk9IE9NQVAyNFhYX0lDX0JBU0UsCisJCS5ucl9pcnFzCT0gOTYsCisJfSwgeworCQkvKiBYWFg6IERTUCBJTlRDICovCisKKyNpZiAwCisJLyoKKwkgKiBDb21tZW50ZWQgb3V0IGZvciBub3cgdW50aWwgd2UgZml4IHRoZSBJVkEgY2xvY2tpbmcKKwkgKi8KKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMjQyMAorCX0sIHsKKwkJLyogSVZBIElOVEMgKDI0MjAgb25seSkgKi8KKwkJLmJhc2VfcmVnCT0gT01BUDI0WFhfSVZBX0lOVENfQkFTRSwKKwkJLm5yX2lycXMJPSAxNiwJLyogQWN0dWFsbHkgMzIsIGJ1dCBvbmx5IDE2IGFyZSB1c2VkICovCisjZW5kaWYKKyNlbmRpZgorCX0KK307CisKKy8qIFhYWDogRklRIGFuZCBhZGRpdGlvbmFsIElOVEMgc3VwcG9ydCAob25seSBNUFUgYXQgdGhlIG1vbWVudCkgKi8KK3N0YXRpYyB2b2lkIG9tYXBfYWNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCW9tYXBfd3JpdGVsKDB4MSwgaXJxX2JhbmtzWzBdLmJhc2VfcmVnICsgSU5UQ19DT05UUk9MKTsKK30KKworc3RhdGljIHZvaWQgb21hcF9tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCWludCBvZmZzZXQgPSAoaXJxID4+IDUpIDw8IDU7CisKKwlpZiAoaXJxID49IDY0KSB7CisJCWlycSAlPSA2NDsKKwl9IGVsc2UgaWYgKGlycSA+PSAzMikgeworCQlpcnEgJT0gMzI7CisJfQorCisJb21hcF93cml0ZWwoMSA8PCBpcnEsIGlycV9iYW5rc1swXS5iYXNlX3JlZyArIElOVENfTUlSX1NFVDAgKyBvZmZzZXQpOworfQorCitzdGF0aWMgdm9pZCBvbWFwX3VubWFza19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlpbnQgb2Zmc2V0ID0gKGlycSA+PiA1KSA8PCA1OworCisJaWYgKGlycSA+PSA2NCkgeworCQlpcnEgJT0gNjQ7CisJfSBlbHNlIGlmIChpcnEgPj0gMzIpIHsKKwkJaXJxICU9IDMyOworCX0KKworCW9tYXBfd3JpdGVsKDEgPDwgaXJxLCBpcnFfYmFua3NbMF0uYmFzZV9yZWcgKyBJTlRDX01JUl9DTEVBUjAgKyBvZmZzZXQpOworfQorCitzdGF0aWMgdm9pZCBvbWFwX21hc2tfYWNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCW9tYXBfbWFza19pcnEoaXJxKTsKKwlvbWFwX2Fja19pcnEoaXJxKTsKK30KKworc3RhdGljIHN0cnVjdCBpcnFjaGlwIG9tYXBfaXJxX2NoaXAgPSB7CisJLmFjawk9IG9tYXBfbWFza19hY2tfaXJxLAorCS5tYXNrCT0gb21hcF9tYXNrX2lycSwKKwkudW5tYXNrCT0gb21hcF91bm1hc2tfaXJxLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IG9tYXBfaXJxX2JhbmtfaW5pdF9vbmUoc3RydWN0IG9tYXBfaXJxX2JhbmsgKmJhbmspCit7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwl0bXAgPSBvbWFwX3JlYWRsKGJhbmstPmJhc2VfcmVnICsgSU5UQ19SRVZJU0lPTikgJiAweGZmOworCXByaW50ayhLRVJOX0lORk8gIklSUTogRm91bmQgYW4gSU5UQyBhdCAweCUwOGx4ICIKKwkJCSAiKHJldmlzaW9uICVsZC4lbGQpIHdpdGggJWQgaW50ZXJydXB0c1xuIiwKKwkJCSBiYW5rLT5iYXNlX3JlZywgdG1wID4+IDQsIHRtcCAmIDB4ZiwgYmFuay0+bnJfaXJxcyk7CisKKwl0bXAgPSBvbWFwX3JlYWRsKGJhbmstPmJhc2VfcmVnICsgSU5UQ19TWVNDT05GSUcpOworCXRtcCB8PSAxIDw8IDE7CS8qIHNvZnQgcmVzZXQgKi8KKwlvbWFwX3dyaXRlbCh0bXAsIGJhbmstPmJhc2VfcmVnICsgSU5UQ19TWVNDT05GSUcpOworCisJd2hpbGUgKCEob21hcF9yZWFkbChiYW5rLT5iYXNlX3JlZyArIElOVENfU1lTU1RBVFVTKSAmIDB4MSkpCisJCS8qIFdhaXQgZm9yIHJlc2V0IHRvIGNvbXBsZXRlICovOworfQorCit2b2lkIF9faW5pdCBvbWFwX2luaXRfaXJxKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBucl9pcnFzID0gMDsKKwl1bnNpZ25lZCBpbnQgbnJfYmFua3MgPSAwOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaXJxX2JhbmtzKTsgaSsrKSB7CisJCXN0cnVjdCBvbWFwX2lycV9iYW5rICpiYW5rID0gaXJxX2JhbmtzICsgaTsKKworCQkvKiBYWFggKi8KKwkJaWYgKCFiYW5rLT5iYXNlX3JlZykKKwkJCWNvbnRpbnVlOworCisJCW9tYXBfaXJxX2JhbmtfaW5pdF9vbmUoYmFuayk7CisKKwkJbnJfaXJxcyArPSBiYW5rLT5ucl9pcnFzOworCQlucl9iYW5rcysrOworCX0KKworCXByaW50ayhLRVJOX0lORk8gIlRvdGFsIG9mICVsZCBpbnRlcnJ1cHRzIG9uICVkIGFjdGl2ZSBjb250cm9sbGVyJXNcbiIsCisJICAgICAgIG5yX2lycXMsIG5yX2JhbmtzLCBucl9iYW5rcyA+IDEgPyAicyIgOiAiIik7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfaXJxczsgaSsrKSB7CisJCXNldF9pcnFfY2hpcChpLCAmb21hcF9pcnFfY2hpcCk7CisJCXNldF9pcnFfaGFuZGxlcihpLCBkb19sZXZlbF9JUlEpOworCQlzZXRfaXJxX2ZsYWdzKGksIElSUUZfVkFMSUQpOworCX0KK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE0NjU0OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmMKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmMKKyAqCisgKiBPTUFQMSBwaW4gbXVsdGlwbGV4aW5nIGNvbmZpZ3VyYXRpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwNSBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIFdyaXR0ZW4gYnkgVG9ueSBMaW5kZ3JlbiA8dG9ueS5saW5kZ3JlbkBub2tpYS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL211eC5oPgorCisjaWZkZWYgQ09ORklHX09NQVBfTVVYCisKKy8qIE5PVEU6IFNlZSBtdXguaCBmb3IgdGhlIGVudW1lcmF0aW9uICovCisKK3N0cnVjdCBwaW5fY29uZmlnIF9faW5pdGRhdGFfb3JfbW9kdWxlIG9tYXAyNHh4X3BpbnNbXSA9IHsKKy8qCisgKglkZXNjcmlwdGlvbgkJCW11eAltdXgJcHVsbAlwdWxsCWRlYnVnCisgKgkJCQkJb2Zmc2V0CW1vZGUJZW5hCXR5cGUKKyAqLworCisvKiAyNHh4IEkyQyAqLworTVVYX0NGR18yNFhYKCJNMTlfMjRYWF9JMkMxX1NDTCIsCTB4MTExLAkwLAkwLAkwLAkxKQorTVVYX0NGR18yNFhYKCJMMTVfMjRYWF9JMkMxX1NEQSIsCTB4MTEyLAkwLAkwLAkwLAkxKQorTVVYX0NGR18yNFhYKCJKMTVfMjRYWF9JMkMyX1NDTCIsCTB4MTEzLAkwLAkwLAkwLAkxKQorTVVYX0NGR18yNFhYKCJIMTlfMjRYWF9JMkMyX1NEQSIsCTB4MTE0LAkwLAkwLAkwLAkxKQorCisvKiBNZW5lbGF1cyBpbnRlcnJ1cHQgKi8KK01VWF9DRkdfMjRYWCgiVzE5XzI0WFhfU1lTX05JUlEiLAkweDEyYywJMCwJMSwJMSwJMSkKKworLyogMjR4eCBHUElPICovCitNVVhfQ0ZHXzI0WFgoIlkyMF8yNFhYX0dQSU82MCIsCQkweDEyYywJMywJMCwJMCwJMSkKK01VWF9DRkdfMjRYWCgiTTE1XzI0WFhfR1BJTzkyIiwJCTB4MTBhLAkzLAkwLAkwLAkxKQorCit9OworCitpbnQgX19pbml0IG9tYXAyX211eF9pbml0KHZvaWQpCit7CisJb21hcF9tdXhfcmVnaXN0ZXIob21hcDI0eHhfcGlucywgQVJSQVlfU0laRShvbWFwMjR4eF9waW5zKSk7CisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcmNtLmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL3ByY20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWI4OWI5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcmNtLmgKQEAgLTAsMCArMSw0MTkgQEAKKy8qCisgKiBwcmNtLmggLSBBY2Nlc3MgZGVmaW5hdGlvbnMgZm9yIHVzZSBpbiBPTUFQMjRYWCBjbG9jayBhbmQgcG93ZXIgbWFuYWdlbWVudAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaWZuZGVmIF9fQVNNX0FSTV9BUkNIX0RQTV9QUkNNX0gKKyNkZWZpbmUgX19BU01fQVJNX0FSQ0hfRFBNX1BSQ01fSAorCisvKiBTRVRfUEVSRk9STUFOQ0VfTEVWRUwgUEFSQU1FVEVSUyAqLworI2RlZmluZSBQUkNNX0hBTEZfU1BFRUQgMQorI2RlZmluZSBQUkNNX0ZVTExfU1BFRUQgMgorCisjaWZuZGVmIF9fQVNTRU1CTEVSX18KKworI2RlZmluZSBQUkNNX1JFRzMyKG9mZnNldCkJX19SRUczMihPTUFQMjRYWF9QUkNNX0JBU0UgKyAob2Zmc2V0KSkKKworI2RlZmluZSBQUkNNX1JFVklTSU9OCQlQUkNNX1JFRzMyKDB4MDAwKQorI2RlZmluZSBQUkNNX1NZU0NPTkZJRwkJUFJDTV9SRUczMigweDAxMCkKKyNkZWZpbmUgUFJDTV9JUlFTVEFUVVNfTVBVCVBSQ01fUkVHMzIoMHgwMTgpCisjZGVmaW5lIFBSQ01fSVJRRU5BQkxFX01QVQlQUkNNX1JFRzMyKDB4MDFDKQorI2RlZmluZSBQUkNNX1ZPTFRDVFJMCQlQUkNNX1JFRzMyKDB4MDUwKQorI2RlZmluZSBQUkNNX1ZPTFRTVAkJUFJDTV9SRUczMigweDA1NCkKKyNkZWZpbmUgUFJDTV9DTEtTUkNfQ1RSTAlQUkNNX1JFRzMyKDB4MDYwKQorI2RlZmluZSBQUkNNX0NMS09VVF9DVFJMCVBSQ01fUkVHMzIoMHgwNzApCisjZGVmaW5lIFBSQ01fQ0xLRU1VTF9DVFJMCVBSQ01fUkVHMzIoMHgwNzgpCisjZGVmaW5lIFBSQ01fQ0xLQ0ZHX0NUUkwJUFJDTV9SRUczMigweDA4MCkKKyNkZWZpbmUgUFJDTV9DTEtDRkdfU1RBVFVTCVBSQ01fUkVHMzIoMHgwODQpCisjZGVmaW5lIFBSQ01fVk9MVFNFVFVQCQlQUkNNX1JFRzMyKDB4MDkwKQorI2RlZmluZSBQUkNNX0NMS1NTRVRVUAkJUFJDTV9SRUczMigweDA5NCkKKyNkZWZpbmUgUFJDTV9QT0xDVFJMCQlQUkNNX1JFRzMyKDB4MDk4KQorCisvKiBHRU5FUkFMIFBVUlBPU0UgKi8KKyNkZWZpbmUgR0VORVJBTF9QVVJQT1NFMQlQUkNNX1JFRzMyKDB4MEIwKQorI2RlZmluZSBHRU5FUkFMX1BVUlBPU0UyCVBSQ01fUkVHMzIoMHgwQjQpCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTMJUFJDTV9SRUczMigweDBCOCkKKyNkZWZpbmUgR0VORVJBTF9QVVJQT1NFNAlQUkNNX1JFRzMyKDB4MEJDKQorI2RlZmluZSBHRU5FUkFMX1BVUlBPU0U1CVBSQ01fUkVHMzIoMHgwQzApCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTYJUFJDTV9SRUczMigweDBDNCkKKyNkZWZpbmUgR0VORVJBTF9QVVJQT1NFNwlQUkNNX1JFRzMyKDB4MEM4KQorI2RlZmluZSBHRU5FUkFMX1BVUlBPU0U4CVBSQ01fUkVHMzIoMHgwQ0MpCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTkJUFJDTV9SRUczMigweDBEMCkKKyNkZWZpbmUgR0VORVJBTF9QVVJQT1NFMTAJUFJDTV9SRUczMigweDBENCkKKyNkZWZpbmUgR0VORVJBTF9QVVJQT1NFMTEJUFJDTV9SRUczMigweDBEOCkKKyNkZWZpbmUgR0VORVJBTF9QVVJQT1NFMTIJUFJDTV9SRUczMigweDBEQykKKyNkZWZpbmUgR0VORVJBTF9QVVJQT1NFMTMJUFJDTV9SRUczMigweDBFMCkKKyNkZWZpbmUgR0VORVJBTF9QVVJQT1NFMTQJUFJDTV9SRUczMigweDBFNCkKKyNkZWZpbmUgR0VORVJBTF9QVVJQT1NFMTUJUFJDTV9SRUczMigweDBFOCkKKyNkZWZpbmUgR0VORVJBTF9QVVJQT1NFMTYJUFJDTV9SRUczMigweDBFQykKKyNkZWZpbmUgR0VORVJBTF9QVVJQT1NFMTcJUFJDTV9SRUczMigweDBGMCkKKyNkZWZpbmUgR0VORVJBTF9QVVJQT1NFMTgJUFJDTV9SRUczMigweDBGNCkKKyNkZWZpbmUgR0VORVJBTF9QVVJQT1NFMTkJUFJDTV9SRUczMigweDBGOCkKKyNkZWZpbmUgR0VORVJBTF9QVVJQT1NFMjAJUFJDTV9SRUczMigweDBGQykKKworLyogTVBVICovCisjZGVmaW5lIENNX0NMS1NFTF9NUFUJCVBSQ01fUkVHMzIoMHgxNDApCisjZGVmaW5lIENNX0NMS1NUQ1RSTF9NUFUJUFJDTV9SRUczMigweDE0OCkKKyNkZWZpbmUgUk1fUlNUU1RfTVBVCQlQUkNNX1JFRzMyKDB4MTU4KQorI2RlZmluZSBQTV9XS0RFUF9NUFUJCVBSQ01fUkVHMzIoMHgxQzgpCisjZGVmaW5lIFBNX0VWR0VOQ1RSTF9NUFUJUFJDTV9SRUczMigweDFENCkKKyNkZWZpbmUgUE1fRVZFR0VOT05USU1fTVBVCVBSQ01fUkVHMzIoMHgxRDgpCisjZGVmaW5lIFBNX0VWRUdFTk9GRlRJTV9NUFUJUFJDTV9SRUczMigweDFEQykKKyNkZWZpbmUgUE1fUFdTVENUUkxfTVBVCQlQUkNNX1JFRzMyKDB4MUUwKQorI2RlZmluZSBQTV9QV1NUU1RfTVBVCQlQUkNNX1JFRzMyKDB4MUU0KQorCisvKiBDT1JFICovCisjZGVmaW5lIENNX0ZDTEtFTjFfQ09SRQkJUFJDTV9SRUczMigweDIwMCkKKyNkZWZpbmUgQ01fRkNMS0VOMl9DT1JFCQlQUkNNX1JFRzMyKDB4MjA0KQorI2RlZmluZSBDTV9GQ0xLRU4zX0NPUkUJCVBSQ01fUkVHMzIoMHgyMDgpCisjZGVmaW5lIENNX0lDTEtFTjFfQ09SRQkJUFJDTV9SRUczMigweDIxMCkKKyNkZWZpbmUgQ01fSUNMS0VOMl9DT1JFCQlQUkNNX1JFRzMyKDB4MjE0KQorI2RlZmluZSBDTV9JQ0xLRU4zX0NPUkUJCVBSQ01fUkVHMzIoMHgyMTgpCisjZGVmaW5lIENNX0lDTEtFTjRfQ09SRQkJUFJDTV9SRUczMigweDIxQykKKyNkZWZpbmUgQ01fSURMRVNUMV9DT1JFCQlQUkNNX1JFRzMyKDB4MjIwKQorI2RlZmluZSBDTV9JRExFU1QyX0NPUkUJCVBSQ01fUkVHMzIoMHgyMjQpCisjZGVmaW5lIENNX0lETEVTVDNfQ09SRQkJUFJDTV9SRUczMigweDIyOCkKKyNkZWZpbmUgQ01fSURMRVNUNF9DT1JFCQlQUkNNX1JFRzMyKDB4MjJDKQorI2RlZmluZSBDTV9BVVRPSURMRTFfQ09SRQlQUkNNX1JFRzMyKDB4MjMwKQorI2RlZmluZSBDTV9BVVRPSURMRTJfQ09SRQlQUkNNX1JFRzMyKDB4MjM0KQorI2RlZmluZSBDTV9BVVRPSURMRTNfQ09SRQlQUkNNX1JFRzMyKDB4MjM4KQorI2RlZmluZSBDTV9BVVRPSURMRTRfQ09SRQlQUkNNX1JFRzMyKDB4MjNDKQorI2RlZmluZSBDTV9DTEtTRUwxX0NPUkUJCVBSQ01fUkVHMzIoMHgyNDApCisjZGVmaW5lIENNX0NMS1NFTDJfQ09SRQkJUFJDTV9SRUczMigweDI0NCkKKyNkZWZpbmUgQ01fQ0xLU1RDVFJMX0NPUkUJUFJDTV9SRUczMigweDI0OCkKKyNkZWZpbmUgUE1fV0tFTjFfQ09SRQkJUFJDTV9SRUczMigweDJBMCkKKyNkZWZpbmUgUE1fV0tFTjJfQ09SRQkJUFJDTV9SRUczMigweDJBNCkKKyNkZWZpbmUgUE1fV0tTVDFfQ09SRQkJUFJDTV9SRUczMigweDJCMCkKKyNkZWZpbmUgUE1fV0tTVDJfQ09SRQkJUFJDTV9SRUczMigweDJCNCkKKyNkZWZpbmUgUE1fV0tERVBfQ09SRQkJUFJDTV9SRUczMigweDJDOCkKKyNkZWZpbmUgUE1fUFdTVENUUkxfQ09SRQlQUkNNX1JFRzMyKDB4MkUwKQorI2RlZmluZSBQTV9QV1NUU1RfQ09SRQkJUFJDTV9SRUczMigweDJFNCkKKworLyogR0ZYICovCisjZGVmaW5lIENNX0ZDTEtFTl9HRlgJCVBSQ01fUkVHMzIoMHgzMDApCisjZGVmaW5lIENNX0lDTEtFTl9HRlgJCVBSQ01fUkVHMzIoMHgzMTApCisjZGVmaW5lIENNX0lETEVTVF9HRlgJCVBSQ01fUkVHMzIoMHgzMjApCisjZGVmaW5lIENNX0NMS1NFTF9HRlgJCVBSQ01fUkVHMzIoMHgzNDApCisjZGVmaW5lIENNX0NMS1NUQ1RSTF9HRlgJUFJDTV9SRUczMigweDM0OCkKKyNkZWZpbmUgUk1fUlNUQ1RSTF9HRlgJCVBSQ01fUkVHMzIoMHgzNTApCisjZGVmaW5lIFJNX1JTVFNUX0dGWAkJUFJDTV9SRUczMigweDM1OCkKKyNkZWZpbmUgUE1fV0tERVBfR0ZYCQlQUkNNX1JFRzMyKDB4M0M4KQorI2RlZmluZSBQTV9QV1NUQ1RSTF9HRlgJCVBSQ01fUkVHMzIoMHgzRTApCisjZGVmaW5lIFBNX1BXU1RTVF9HRlgJCVBSQ01fUkVHMzIoMHgzRTQpCisKKy8qIFdBS0UtVVAgKi8KKyNkZWZpbmUgQ01fRkNMS0VOX1dLVVAJCVBSQ01fUkVHMzIoMHg0MDApCisjZGVmaW5lIENNX0lDTEtFTl9XS1VQCQlQUkNNX1JFRzMyKDB4NDEwKQorI2RlZmluZSBDTV9JRExFU1RfV0tVUAkJUFJDTV9SRUczMigweDQyMCkKKyNkZWZpbmUgQ01fQVVUT0lETEVfV0tVUAlQUkNNX1JFRzMyKDB4NDMwKQorI2RlZmluZSBDTV9DTEtTRUxfV0tVUAkJUFJDTV9SRUczMigweDQ0MCkKKyNkZWZpbmUgUk1fUlNUQ1RSTF9XS1VQCQlQUkNNX1JFRzMyKDB4NDUwKQorI2RlZmluZSBSTV9SU1RUSU1FX1dLVVAJCVBSQ01fUkVHMzIoMHg0NTQpCisjZGVmaW5lIFJNX1JTVFNUX1dLVVAJCVBSQ01fUkVHMzIoMHg0NTgpCisjZGVmaW5lIFBNX1dLRU5fV0tVUAkJUFJDTV9SRUczMigweDRBMCkKKyNkZWZpbmUgUE1fV0tTVF9XS1VQCQlQUkNNX1JFRzMyKDB4NEIwKQorCisvKiBDTE9DS1MgKi8KKyNkZWZpbmUgQ01fQ0xLRU5fUExMCQlQUkNNX1JFRzMyKDB4NTAwKQorI2RlZmluZSBDTV9JRExFU1RfQ0tHRU4JCVBSQ01fUkVHMzIoMHg1MjApCisjZGVmaW5lIENNX0FVVE9JRExFX1BMTAkJUFJDTV9SRUczMigweDUzMCkKKyNkZWZpbmUgQ01fQ0xLU0VMMV9QTEwJCVBSQ01fUkVHMzIoMHg1NDApCisjZGVmaW5lIENNX0NMS1NFTDJfUExMCQlQUkNNX1JFRzMyKDB4NTQ0KQorCisvKiBEU1AgKi8KKyNkZWZpbmUgQ01fRkNMS0VOX0RTUAkJUFJDTV9SRUczMigweDgwMCkKKyNkZWZpbmUgQ01fSUNMS0VOX0RTUAkJUFJDTV9SRUczMigweDgxMCkKKyNkZWZpbmUgQ01fSURMRVNUX0RTUAkJUFJDTV9SRUczMigweDgyMCkKKyNkZWZpbmUgQ01fQVVUT0lETEVfRFNQCQlQUkNNX1JFRzMyKDB4ODMwKQorI2RlZmluZSBDTV9DTEtTRUxfRFNQCQlQUkNNX1JFRzMyKDB4ODQwKQorI2RlZmluZSBDTV9DTEtTVENUUkxfRFNQCVBSQ01fUkVHMzIoMHg4NDgpCisjZGVmaW5lIFJNX1JTVENUUkxfRFNQCQlQUkNNX1JFRzMyKDB4ODUwKQorI2RlZmluZSBSTV9SU1RTVF9EU1AJCVBSQ01fUkVHMzIoMHg4NTgpCisjZGVmaW5lIFBNX1dLRU5fRFNQCQlQUkNNX1JFRzMyKDB4OEEwKQorI2RlZmluZSBQTV9XS0RFUF9EU1AJCVBSQ01fUkVHMzIoMHg4QzgpCisjZGVmaW5lIFBNX1BXU1RDVFJMX0RTUAkJUFJDTV9SRUczMigweDhFMCkKKyNkZWZpbmUgUE1fUFdTVFNUX0RTUAkJUFJDTV9SRUczMigweDhFNCkKKyNkZWZpbmUgUFJDTV9JUlFTVEFUVVNfRFNQCVBSQ01fUkVHMzIoMHg4RjApCisjZGVmaW5lIFBSQ01fSVJRRU5BQkxFX0RTUAlQUkNNX1JFRzMyKDB4OEY0KQorCisvKiBJVkEgKi8KKyNkZWZpbmUgUFJDTV9JUlFTVEFUVVNfSVZBCVBSQ01fUkVHMzIoMHg4RjgpCisjZGVmaW5lIFBSQ01fSVJRRU5BQkxFX0lWQQlQUkNNX1JFRzMyKDB4OEZDKQorCisvKiBNb2RlbSBvbiAyNDMwICovCisjZGVmaW5lIENNX0ZDTEtFTl9NRE0JCVBSQ01fUkVHMzIoMHhDMDApCisjZGVmaW5lIENNX0lDTEtFTl9NRE0JCVBSQ01fUkVHMzIoMHhDMTApCisjZGVmaW5lIENNX0lETEVTVF9NRE0JCVBSQ01fUkVHMzIoMHhDMjApCisjZGVmaW5lIENNX0NMS1NFTF9NRE0JCVBSQ01fUkVHMzIoMHhDNDApCisKKy8qIEZJWE1FOiBNb3ZlIHRvIGhlYWRlciBmb3IgMjQzMCAqLworI2RlZmluZSBESVNQX0JBU0UJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4NTAwMDApCisjZGVmaW5lIERJU1BfUkVHMzIob2Zmc2V0KQlfX1JFRzMyKERJU1BfQkFTRSArIChvZmZzZXQpKQorCisjZGVmaW5lIEdQTUNfQkFTRQkJKE9NQVAyNFhYX0dQTUNfQkFTRSkKKyNkZWZpbmUgR1BNQ19SRUczMihvZmZzZXQpCV9fUkVHMzIoR1BNQ19CQVNFICsgKG9mZnNldCkpCisKKyNkZWZpbmUgR1BUMV9CQVNFCQkoT01BUDI0WFhfR1BUMSkKKyNkZWZpbmUgR1BUMV9SRUczMihvZmZzZXQpCV9fUkVHMzIoR1BUMV9CQVNFICsgKG9mZnNldCkpCisKKy8qIE1pc2Mgc3lzY29uZmlnICovCisjZGVmaW5lIERJU1BDX1NZU0NPTkZJRwkJRElTUF9SRUczMigweDQxMCkKKyNkZWZpbmUgU1BJX0JBU0UJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4OTgwMDApCisjZGVmaW5lIE1DU1BJMV9TWVNDT05GSUcJX19SRUczMihTUElfQkFTRSArIDB4MTApCisjZGVmaW5lIE1DU1BJMl9TWVNDT05GSUcJX19SRUczMihTUElfQkFTRSsweDIwMDAgKyAweDEwKQorCisvLyNkZWZpbmUgRFNQX01NVV9TWVNDT05GSUcJMHg1QTAwMDAxMAorI2RlZmluZSBDQU1FUkFfTU1VX1NZU0NPTkZJRwlfX1JFRzMyKERJU1BfQkFTRSsweDJDMTApCisvLyNkZWZpbmUgSVZBX01NVV9TWVNDT05GSUcJMHg1RDAwMDAxMAorLy8jZGVmaW5lIERTUF9ETUFfU1lTQ09ORklHCTB4MDBGQ0MwMkMKKyNkZWZpbmUgQ0FNRVJBX0RNQV9TWVNDT05GSUcJX19SRUczMihESVNQX0JBU0UrMHgyODJDKQorI2RlZmluZSBTWVNURU1fRE1BX1NZU0NPTkZJRwlfX1JFRzMyKERJU1BfQkFTRSsweDYwMkMpCisjZGVmaW5lIEdQTUNfU1lTQ09ORklHCQlHUE1DX1JFRzMyKDB4MDEwKQorI2RlZmluZSBNQUlMQk9YRVNfU1lTQ09ORklHCV9fUkVHMzIoT01BUDI0WFhfTDRfSU9fQkFTRSsweDk0MDEwKQorI2RlZmluZSBVQVJUMV9TWVNDT05GSUcJCV9fUkVHMzIoT01BUDI0WFhfTDRfSU9fQkFTRSsweDZBMDU0KQorI2RlZmluZSBVQVJUMl9TWVNDT05GSUcJCV9fUkVHMzIoT01BUDI0WFhfTDRfSU9fQkFTRSsweDZDMDU0KQorI2RlZmluZSBVQVJUM19TWVNDT05GSUcJCV9fUkVHMzIoT01BUDI0WFhfTDRfSU9fQkFTRSsweDZFMDU0KQorLy8jZGVmaW5lIElWQV9TWVNDT05GSUcJCTB4NUMwNjAwMTAKKyNkZWZpbmUgU0RSQ19TWVNDT05GSUcJCV9fUkVHMzIoT01BUDI0WFhfU0RSQ19CQVNFKzB4MTApCisjZGVmaW5lIFNNU19TWVNDT05GSUcJCV9fUkVHMzIoT01BUDI0WFhfU01TX0JBU0UrMHgxMCkKKyNkZWZpbmUgU1NJX1NZU0NPTkZJRwkJX19SRUczMihESVNQX0JBU0UrMHg4MDEwKQorLy8jZGVmaW5lIFZMWU5RX1NZU0NPTkZJRwkweDY3RkZGRTEwCisKKy8qIHJrdyAtIGdvb2QgY2FubmlkYXRlcyBmb3IgUE1fIHRvIHN0YXJ0IHdoYXQgbm0gd2FzIHRyeWluZyAqLworI2RlZmluZSBPTUFQMjRYWF9HUFQyCQkoT01BUDI0WFhfTDRfSU9fQkFTRSsweDJBMDAwKQorI2RlZmluZSBPTUFQMjRYWF9HUFQzCQkoT01BUDI0WFhfTDRfSU9fQkFTRSsweDc4MDAwKQorI2RlZmluZSBPTUFQMjRYWF9HUFQ0CQkoT01BUDI0WFhfTDRfSU9fQkFTRSsweDdBMDAwKQorI2RlZmluZSBPTUFQMjRYWF9HUFQ1CQkoT01BUDI0WFhfTDRfSU9fQkFTRSsweDdDMDAwKQorI2RlZmluZSBPTUFQMjRYWF9HUFQ2CQkoT01BUDI0WFhfTDRfSU9fQkFTRSsweDdFMDAwKQorI2RlZmluZSBPTUFQMjRYWF9HUFQ3CQkoT01BUDI0WFhfTDRfSU9fQkFTRSsweDgwMDAwKQorI2RlZmluZSBPTUFQMjRYWF9HUFQ4CQkoT01BUDI0WFhfTDRfSU9fQkFTRSsweDgyMDAwKQorI2RlZmluZSBPTUFQMjRYWF9HUFQ5CQkoT01BUDI0WFhfTDRfSU9fQkFTRSsweDg0MDAwKQorI2RlZmluZSBPTUFQMjRYWF9HUFQxMAkJKE9NQVAyNFhYX0w0X0lPX0JBU0UrMHg4NjAwMCkKKyNkZWZpbmUgT01BUDI0WFhfR1BUMTEJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4ODgwMDApCisjZGVmaW5lIE9NQVAyNFhYX0dQVDEyCQkoT01BUDI0WFhfTDRfSU9fQkFTRSsweDhBMDAwKQorCisjZGVmaW5lIEdQVElNRVIxX1NZU0NPTkZJRwlHUFQxX1JFRzMyKDB4MDEwKQorI2RlZmluZSBHUFRJTUVSMl9TWVNDT05GSUcJX19SRUczMihPTUFQMjRYWF9HUFQyICsgMHgxMCkKKyNkZWZpbmUgR1BUSU1FUjNfU1lTQ09ORklHCV9fUkVHMzIoT01BUDI0WFhfR1BUMyArIDB4MTApCisjZGVmaW5lIEdQVElNRVI0X1NZU0NPTkZJRwlfX1JFRzMyKE9NQVAyNFhYX0dQVDQgKyAweDEwKQorI2RlZmluZSBHUFRJTUVSNV9TWVNDT05GSUcJX19SRUczMihPTUFQMjRYWF9HUFQ1ICsgMHgxMCkKKyNkZWZpbmUgR1BUSU1FUjZfU1lTQ09ORklHCV9fUkVHMzIoT01BUDI0WFhfR1BUNiArIDB4MTApCisjZGVmaW5lIEdQVElNRVI3X1NZU0NPTkZJRwlfX1JFRzMyKE9NQVAyNFhYX0dQVDcgKyAweDEwKQorI2RlZmluZSBHUFRJTUVSOF9TWVNDT05GSUcJX19SRUczMihPTUFQMjRYWF9HUFQ4ICsgMHgxMCkKKyNkZWZpbmUgR1BUSU1FUjlfU1lTQ09ORklHCV9fUkVHMzIoT01BUDI0WFhfR1BUOSArIDB4MTApCisjZGVmaW5lIEdQVElNRVIxMF9TWVNDT05GSUcJX19SRUczMihPTUFQMjRYWF9HUFQxMCArIDB4MTApCisjZGVmaW5lIEdQVElNRVIxMV9TWVNDT05GSUcJX19SRUczMihPTUFQMjRYWF9HUFQxMSArIDB4MTApCisjZGVmaW5lIEdQVElNRVIxMl9TWVNDT05GSUcJX19SRUczMihPTUFQMjRYWF9HUFQxMiArIDB4MTApCisKKyNkZWZpbmUgR1BJT1hfQkFTRShYKQkJKE9NQVAyNFhYX0dQSU9fQkFTRSsoMHgyMDAwKigoWCktMSkpKQorCisjZGVmaW5lIEdQSU8xX1NZU0NPTkZJRwkJX19SRUczMigoR1BJT1hfQkFTRSgxKSsweDEwKSkKKyNkZWZpbmUgR1BJTzJfU1lTQ09ORklHCQlfX1JFRzMyKChHUElPWF9CQVNFKDIpKzB4MTApKQorI2RlZmluZSBHUElPM19TWVNDT05GSUcJCV9fUkVHMzIoKEdQSU9YX0JBU0UoMykrMHgxMCkpCisjZGVmaW5lIEdQSU80X1NZU0NPTkZJRwkJX19SRUczMigoR1BJT1hfQkFTRSg0KSsweDEwKSkKKworLyogR1AgVElNRVIgMSAqLworI2RlZmluZSBHUFRJTUVSMV9USVNUQVQJCUdQVDFfUkVHMzIoMHgwMTQpCisjZGVmaW5lIEdQVElNRVIxX1RJU1IJCUdQVDFfUkVHMzIoMHgwMTgpCisjZGVmaW5lIEdQVElNRVIxX1RJRVIJCUdQVDFfUkVHMzIoMHgwMUMpCisjZGVmaW5lIEdQVElNRVIxX1RXRVIJCUdQVDFfUkVHMzIoMHgwMjApCisjZGVmaW5lIEdQVElNRVIxX1RDTFIJCUdQVDFfUkVHMzIoMHgwMjQpCisjZGVmaW5lIEdQVElNRVIxX1RDUlIJCUdQVDFfUkVHMzIoMHgwMjgpCisjZGVmaW5lIEdQVElNRVIxX1RMRFIJCUdQVDFfUkVHMzIoMHgwMkMpCisjZGVmaW5lIEdQVElNRVIxX1RUR1IJCUdQVDFfUkVHMzIoMHgwMzApCisjZGVmaW5lIEdQVElNRVIxX1RXUFMJCUdQVDFfUkVHMzIoMHgwMzQpCisjZGVmaW5lIEdQVElNRVIxX1RNQVIJCUdQVDFfUkVHMzIoMHgwMzgpCisjZGVmaW5lIEdQVElNRVIxX1RDQVIxCQlHUFQxX1JFRzMyKDB4MDNDKQorI2RlZmluZSBHUFRJTUVSMV9UU0lDUgkJR1BUMV9SRUczMigweDA0MCkKKyNkZWZpbmUgR1BUSU1FUjFfVENBUjIJCUdQVDFfUkVHMzIoMHgwNDQpCisKKy8qIHJrdyAtLSBiYXNlIGZpeCB1cCBwbGVhc2UuLi4gKi8KKyNkZWZpbmUgR1BUSU1FUjNfVElTUgkJX19SRUczMihPTUFQMjRYWF9MNF9JT19CQVNFKzB4NzgwMTgpCisKKy8qIFNEUkMgKi8KKyNkZWZpbmUgU0RSQ19ETExBX0NUUkwJCV9fUkVHMzIoT01BUDI0WFhfU0RSQ19CQVNFKzB4MDYwKQorI2RlZmluZSBTRFJDX0RMTEFfU1RBVFVTCV9fUkVHMzIoT01BUDI0WFhfU0RSQ19CQVNFKzB4MDY0KQorI2RlZmluZSBTRFJDX0RMTEJfQ1RSTAkJX19SRUczMihPTUFQMjRYWF9TRFJDX0JBU0UrMHgwNjgpCisjZGVmaW5lIFNEUkNfRExMQl9TVEFUVVMJX19SRUczMihPTUFQMjRYWF9TRFJDX0JBU0UrMHgwNkMpCisjZGVmaW5lIFNEUkNfUE9XRVIJCV9fUkVHMzIoT01BUDI0WFhfU0RSQ19CQVNFKzB4MDcwKQorI2RlZmluZSBTRFJDX01SXzAJCV9fUkVHMzIoT01BUDI0WFhfU0RSQ19CQVNFKzB4MDg0KQorCisvKiBHUElPIDEgKi8KKyNkZWZpbmUgR1BJTzFfQkFTRQkJR1BJT1hfQkFTRSgxKQorI2RlZmluZSBHUElPMV9SRUczMihvZmZzZXQpCV9fUkVHMzIoR1BJTzFfQkFTRSArIChvZmZzZXQpKQorI2RlZmluZSBHUElPMV9JUlFFTkFCTEUxCUdQSU8xX1JFRzMyKDB4MDFDKQorI2RlZmluZSBHUElPMV9JUlFTVEFUVVMxCUdQSU8xX1JFRzMyKDB4MDE4KQorI2RlZmluZSBHUElPMV9JUlFFTkFCTEUyCUdQSU8xX1JFRzMyKDB4MDJDKQorI2RlZmluZSBHUElPMV9JUlFTVEFUVVMyCUdQSU8xX1JFRzMyKDB4MDI4KQorI2RlZmluZSBHUElPMV9XQUtFVVBFTkFCTEUJR1BJTzFfUkVHMzIoMHgwMjApCisjZGVmaW5lIEdQSU8xX1JJU0lOR0RFVEVDVAlHUElPMV9SRUczMigweDA0OCkKKyNkZWZpbmUgR1BJTzFfREFUQUlOCQlHUElPMV9SRUczMigweDAzOCkKKyNkZWZpbmUgR1BJTzFfT0UJCUdQSU8xX1JFRzMyKDB4MDM0KQorI2RlZmluZSBHUElPMV9EQVRBT1VUCQlHUElPMV9SRUczMigweDAzQykKKworLyogR1BJTzIgKi8KKyNkZWZpbmUgR1BJTzJfQkFTRQkJR1BJT1hfQkFTRSgyKQorI2RlZmluZSBHUElPMl9SRUczMihvZmZzZXQpCV9fUkVHMzIoR1BJTzJfQkFTRSArIChvZmZzZXQpKQorI2RlZmluZSBHUElPMl9JUlFFTkFCTEUxCUdQSU8yX1JFRzMyKDB4MDFDKQorI2RlZmluZSBHUElPMl9JUlFTVEFUVVMxCUdQSU8yX1JFRzMyKDB4MDE4KQorI2RlZmluZSBHUElPMl9JUlFFTkFCTEUyCUdQSU8yX1JFRzMyKDB4MDJDKQorI2RlZmluZSBHUElPMl9JUlFTVEFUVVMyCUdQSU8yX1JFRzMyKDB4MDI4KQorI2RlZmluZSBHUElPMl9XQUtFVVBFTkFCTEUJR1BJTzJfUkVHMzIoMHgwMjApCisjZGVmaW5lIEdQSU8yX1JJU0lOR0RFVEVDVAlHUElPMl9SRUczMigweDA0OCkKKyNkZWZpbmUgR1BJTzJfREFUQUlOCQlHUElPMl9SRUczMigweDAzOCkKKyNkZWZpbmUgR1BJTzJfT0UJCUdQSU8yX1JFRzMyKDB4MDM0KQorI2RlZmluZSBHUElPMl9EQVRBT1VUCQlHUElPMl9SRUczMigweDAzQykKKworLyogR1BJTyAzICovCisjZGVmaW5lIEdQSU8zX0JBU0UJCUdQSU9YX0JBU0UoMykKKyNkZWZpbmUgR1BJTzNfUkVHMzIob2Zmc2V0KQlfX1JFRzMyKEdQSU8zX0JBU0UgKyAob2Zmc2V0KSkKKyNkZWZpbmUgR1BJTzNfSVJRRU5BQkxFMQlHUElPM19SRUczMigweDAxQykKKyNkZWZpbmUgR1BJTzNfSVJRU1RBVFVTMQlHUElPM19SRUczMigweDAxOCkKKyNkZWZpbmUgR1BJTzNfSVJRRU5BQkxFMglHUElPM19SRUczMigweDAyQykKKyNkZWZpbmUgR1BJTzNfSVJRU1RBVFVTMglHUElPM19SRUczMigweDAyOCkKKyNkZWZpbmUgR1BJTzNfV0FLRVVQRU5BQkxFCUdQSU8zX1JFRzMyKDB4MDIwKQorI2RlZmluZSBHUElPM19SSVNJTkdERVRFQ1QJR1BJTzNfUkVHMzIoMHgwNDgpCisjZGVmaW5lIEdQSU8zX0ZBTExJTkdERVRFQ1QJR1BJTzNfUkVHMzIoMHgwNEMpCisjZGVmaW5lIEdQSU8zX0RBVEFJTgkJR1BJTzNfUkVHMzIoMHgwMzgpCisjZGVmaW5lIEdQSU8zX09FCQlHUElPM19SRUczMigweDAzNCkKKyNkZWZpbmUgR1BJTzNfREFUQU9VVAkJR1BJTzNfUkVHMzIoMHgwM0MpCisjZGVmaW5lIEdQSU8zX0RFQk9VTkNFTkFCTEUJR1BJTzNfUkVHMzIoMHgwNTApCisjZGVmaW5lIEdQSU8zX0RFQk9VTkNJTkdUSU1FCUdQSU8zX1JFRzMyKDB4MDU0KQorCisvKiBHUElPIDQgKi8KKyNkZWZpbmUgR1BJTzRfQkFTRQkJR1BJT1hfQkFTRSg0KQorI2RlZmluZSBHUElPNF9SRUczMihvZmZzZXQpCV9fUkVHMzIoR1BJTzRfQkFTRSArIChvZmZzZXQpKQorI2RlZmluZSBHUElPNF9JUlFFTkFCTEUxCUdQSU80X1JFRzMyKDB4MDFDKQorI2RlZmluZSBHUElPNF9JUlFTVEFUVVMxCUdQSU80X1JFRzMyKDB4MDE4KQorI2RlZmluZSBHUElPNF9JUlFFTkFCTEUyCUdQSU80X1JFRzMyKDB4MDJDKQorI2RlZmluZSBHUElPNF9JUlFTVEFUVVMyCUdQSU80X1JFRzMyKDB4MDI4KQorI2RlZmluZSBHUElPNF9XQUtFVVBFTkFCTEUJR1BJTzRfUkVHMzIoMHgwMjApCisjZGVmaW5lIEdQSU80X1JJU0lOR0RFVEVDVAlHUElPNF9SRUczMigweDA0OCkKKyNkZWZpbmUgR1BJTzRfRkFMTElOR0RFVEVDVAlHUElPNF9SRUczMigweDA0QykKKyNkZWZpbmUgR1BJTzRfREFUQUlOCQlHUElPNF9SRUczMigweDAzOCkKKyNkZWZpbmUgR1BJTzRfT0UJCUdQSU80X1JFRzMyKDB4MDM0KQorI2RlZmluZSBHUElPNF9EQVRBT1VUCQlHUElPNF9SRUczMigweDAzQykKKyNkZWZpbmUgR1BJTzRfREVCT1VOQ0VOQUJMRQlHUElPNF9SRUczMigweDA1MCkKKyNkZWZpbmUgR1BJTzRfREVCT1VOQ0lOR1RJTUUJR1BJTzRfUkVHMzIoMHgwNTQpCisKKworLyogSU8gQ09ORklHICovCisjZGVmaW5lIENPTlRST0xfQkFTRQkJKE9NQVAyNFhYX0NUUkxfQkFTRSkKKyNkZWZpbmUgQ09OVFJPTF9SRUczMihvZmZzZXQpCV9fUkVHMzIoQ09OVFJPTF9CQVNFICsgKG9mZnNldCkpCisKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX1NQSTFfTkNTMglDT05UUk9MX1JFRzMyKDB4MTA0KQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfU1lTX1hUQUxPVVQJQ09OVFJPTF9SRUczMigweDEzNCkKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX1VBUlQxX1JYCUNPTlRST0xfUkVHMzIoMHgwQzgpCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9NQ0JTUDFfRFgJQ09OVFJPTF9SRUczMigweDEwQykKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0dQTUNfTkNTNAlDT05UUk9MX1JFRzMyKDB4MDkwKQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRFNTX0Q1CQlDT05UUk9MX1JFRzMyKDB4MEI4KQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRFNTX0Q5CQlDT05UUk9MX1JFRzMyKDB4MEJDKQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRFNTX0QxMwkJQ09OVFJPTF9SRUczMigweDBDMCkKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0RTU19WU1lOQwlDT05UUk9MX1JFRzMyKDB4MENDKQorCisvKiBDT05UUk9MICovCisjZGVmaW5lIENPTlRST0xfREVWQ09ORgkJQ09OVFJPTF9SRUczMigweDI3NCkKKworLyogSU5URVJSVVBUIENPTlRST0xMRVIgKi8KKyNkZWZpbmUgSU5UQ19CQVNFCQkoT01BUDI0WFhfTDRfSU9fQkFTRSsweGZlMDAwKQorI2RlZmluZSBJTlRDX1JFRzMyKG9mZnNldCkJX19SRUczMihJTlRDX0JBU0UgKyAob2Zmc2V0KSkKKworI2RlZmluZSBJTlRDMV9VX0JBU0UJCUlOVENfUkVHMzIoMHgwMDApCisjZGVmaW5lIElOVENfTUlSMAkJSU5UQ19SRUczMigweDA4NCkKKyNkZWZpbmUgSU5UQ19NSVJfU0VUMAkJSU5UQ19SRUczMigweDA4QykKKyNkZWZpbmUgSU5UQ19NSVJfQ0xFQVIwCQlJTlRDX1JFRzMyKDB4MDg4KQorI2RlZmluZSBJTlRDX0lTUl9DTEVBUjAJCUlOVENfUkVHMzIoMHgwOTQpCisjZGVmaW5lIElOVENfTUlSMQkJSU5UQ19SRUczMigweDBBNCkKKyNkZWZpbmUgSU5UQ19NSVJfU0VUMQkJSU5UQ19SRUczMigweDBBQykKKyNkZWZpbmUgSU5UQ19NSVJfQ0xFQVIxCQlJTlRDX1JFRzMyKDB4MEE4KQorI2RlZmluZSBJTlRDX0lTUl9DTEVBUjEJCUlOVENfUkVHMzIoMHgwQjQpCisjZGVmaW5lIElOVENfTUlSMgkJSU5UQ19SRUczMigweDBDNCkKKyNkZWZpbmUgSU5UQ19NSVJfU0VUMgkJSU5UQ19SRUczMigweDBDQykKKyNkZWZpbmUgSU5UQ19NSVJfQ0xFQVIyCQlJTlRDX1JFRzMyKDB4MEM4KQorI2RlZmluZSBJTlRDX0lTUl9DTEVBUjIJCUlOVENfUkVHMzIoMHgwRDQpCisjZGVmaW5lIElOVENfU0lSX0lSUQkJSU5UQ19SRUczMigweDA0MCkKKyNkZWZpbmUgSU5UQ19DT05UUk9MCQlJTlRDX1JFRzMyKDB4MDQ4KQorI2RlZmluZSBJTlRDX0lMUjExCQlJTlRDX1JFRzMyKDB4MTJDKQorI2RlZmluZSBJTlRDX0lMUjMyCQlJTlRDX1JFRzMyKDB4MTgwKQorI2RlZmluZSBJTlRDX0lMUjM3CQlJTlRDX1JFRzMyKDB4MTk0KQorI2RlZmluZSBJTlRDX1NZU0NPTkZJRwkJSU5UQ19SRUczMigweDAxMCkKKworLyogUkFNIEZJUkVXQUxMICovCisjZGVmaW5lIFJBTUZXX0JBU0UJCSgweDY4MDA1MDAwKQorI2RlZmluZSBSQU1GV19SRUczMihvZmZzZXQpCV9fUkVHMzIoUkFNRldfQkFTRSArIChvZmZzZXQpKQorCisjZGVmaW5lIFJBTUZXX1JFUUlORk9QRVJNMAlSQU1GV19SRUczMigweDA0OCkKKyNkZWZpbmUgUkFNRldfUkVBRFBFUk0wCQlSQU1GV19SRUczMigweDA1MCkKKyNkZWZpbmUgUkFNRldfV1JJVEVQRVJNMAlSQU1GV19SRUczMigweDA1OCkKKworLyogR1BNQyBDUzEgRlBHQSBPTiBVU0VSIElOVEVSRkFDRSBNT0RVTEUgKi8KKy8vI2RlZmluZSBERUJVR19CT0FSRF9MRURfUkVHSVNURVIgMHgwNDAwMDAxNAorCisvKiBHUE1DIENTMCAqLworI2RlZmluZSBHUE1DX0NPTkZJRzFfMAkJR1BNQ19SRUczMigweDA2MCkKKyNkZWZpbmUgR1BNQ19DT05GSUcyXzAJCUdQTUNfUkVHMzIoMHgwNjQpCisjZGVmaW5lIEdQTUNfQ09ORklHM18wCQlHUE1DX1JFRzMyKDB4MDY4KQorI2RlZmluZSBHUE1DX0NPTkZJRzRfMAkJR1BNQ19SRUczMigweDA2QykKKyNkZWZpbmUgR1BNQ19DT05GSUc1XzAJCUdQTUNfUkVHMzIoMHgwNzApCisjZGVmaW5lIEdQTUNfQ09ORklHNl8wCQlHUE1DX1JFRzMyKDB4MDc0KQorI2RlZmluZSBHUE1DX0NPTkZJRzdfMAkJR1BNQ19SRUczMigweDA3OCkKKworLyogRFNTICovCisjZGVmaW5lIERTU19DT05UUk9MCQlESVNQX1JFRzMyKDB4MDQwKQorI2RlZmluZSBESVNQQ19DT05UUk9MCQlESVNQX1JFRzMyKDB4NDQwKQorI2RlZmluZSBESVNQQ19TWVNTVEFUVVMJCURJU1BfUkVHMzIoMHg0MTQpCisjZGVmaW5lIERJU1BDX0lSUVNUQVRVUwkJRElTUF9SRUczMigweDQxOCkKKyNkZWZpbmUgRElTUENfSVJRRU5BQkxFCQlESVNQX1JFRzMyKDB4NDFDKQorI2RlZmluZSBESVNQQ19DT05GSUcJCURJU1BfUkVHMzIoMHg0NDQpCisjZGVmaW5lIERJU1BDX0RFRkFVTFRfQ09MT1IwCURJU1BfUkVHMzIoMHg0NEMpCisjZGVmaW5lIERJU1BDX0RFRkFVTFRfQ09MT1IxCURJU1BfUkVHMzIoMHg0NTApCisjZGVmaW5lIERJU1BDX1RSQU5TX0NPTE9SMAlESVNQX1JFRzMyKDB4NDU0KQorI2RlZmluZSBESVNQQ19UUkFOU19DT0xPUjEJRElTUF9SRUczMigweDQ1OCkKKyNkZWZpbmUgRElTUENfTElORV9OVU1CRVIJRElTUF9SRUczMigweDQ2MCkKKyNkZWZpbmUgRElTUENfVElNSU5HX0gJCURJU1BfUkVHMzIoMHg0NjQpCisjZGVmaW5lIERJU1BDX1RJTUlOR19WCQlESVNQX1JFRzMyKDB4NDY4KQorI2RlZmluZSBESVNQQ19QT0xfRlJFUQkJRElTUF9SRUczMigweDQ2QykKKyNkZWZpbmUgRElTUENfRElWSVNPUgkJRElTUF9SRUczMigweDQ3MCkKKyNkZWZpbmUgRElTUENfU0laRV9ESUcJCURJU1BfUkVHMzIoMHg0NzgpCisjZGVmaW5lIERJU1BDX1NJWkVfTENECQlESVNQX1JFRzMyKDB4NDdDKQorI2RlZmluZSBESVNQQ19HRlhfQkEwCQlESVNQX1JFRzMyKDB4NDgwKQorI2RlZmluZSBESVNQQ19HRlhfQkExCQlESVNQX1JFRzMyKDB4NDg0KQorI2RlZmluZSBESVNQQ19HRlhfUE9TSVRJT04JRElTUF9SRUczMigweDQ4OCkKKyNkZWZpbmUgRElTUENfR0ZYX1NJWkUJCURJU1BfUkVHMzIoMHg0OEMpCisjZGVmaW5lIERJU1BDX0dGWF9BVFRSSUJVVEVTCURJU1BfUkVHMzIoMHg0QTApCisjZGVmaW5lIERJU1BDX0dGWF9GSUZPX1RIUkVTSE9MRAlESVNQX1JFRzMyKDB4NEE0KQorI2RlZmluZSBESVNQQ19HRlhfUk9XX0lOQwlESVNQX1JFRzMyKDB4NEFDKQorI2RlZmluZSBESVNQQ19HRlhfUElYRUxfSU5DCURJU1BfUkVHMzIoMHg0QjApCisjZGVmaW5lIERJU1BDX0dGWF9XSU5ET1dfU0tJUAlESVNQX1JFRzMyKDB4NEI0KQorI2RlZmluZSBESVNQQ19HRlhfVEFCTEVfQkEJRElTUF9SRUczMigweDRCOCkKKyNkZWZpbmUgRElTUENfREFUQV9DWUNMRTEJRElTUF9SRUczMigweDVENCkKKyNkZWZpbmUgRElTUENfREFUQV9DWUNMRTIJRElTUF9SRUczMigweDVEOCkKKyNkZWZpbmUgRElTUENfREFUQV9DWUNMRTMJRElTUF9SRUczMigweDVEQykKKworLyogV2FrZSB1cCBkZWZpbmUgZm9yIGJvYXJkICovCisjZGVmaW5lIEdQSU85NwkJCSgxIDw8IDEpCisjZGVmaW5lIEdQSU84OAkJCSgxIDw8IDI0KQorCisjZW5kaWYgLyogX19BU1NFTUJMRVJfXyAqLworCisjZW5kaWYKKworCisKKworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3NlcmlhbC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9zZXJpYWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGRmMDRmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9zZXJpYWwuYwpAQCAtMCwwICsxLDE4MCBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtb21hcC9vbWFwMi9zZXJpYWwuYworICoKKyAqIE9NQVAyIHNlcmlhbCBzdXBwb3J0LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBOb2tpYSBDb3Jwb3JhdGlvbgorICogQXV0aG9yOiBQYXVsIE11bmR0IDxwYXVsLm11bmR0QG5va2lhLmNvbT4KKyAqCisgKiBCYXNlZCBvZmYgb2YgYXJjaC9hcm0vbWFjaC1vbWFwL29tYXAxL3NlcmlhbC5jCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfODI1MC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9yZWcuaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9jbG9jay5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvY29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvYm9hcmQuaD4KKworc3RhdGljIHN0cnVjdCBjbGsgKiB1YXJ0MV9pY2sgPSBOVUxMOworc3RhdGljIHN0cnVjdCBjbGsgKiB1YXJ0MV9mY2sgPSBOVUxMOworc3RhdGljIHN0cnVjdCBjbGsgKiB1YXJ0Ml9pY2sgPSBOVUxMOworc3RhdGljIHN0cnVjdCBjbGsgKiB1YXJ0Ml9mY2sgPSBOVUxMOworc3RhdGljIHN0cnVjdCBjbGsgKiB1YXJ0M19pY2sgPSBOVUxMOworc3RhdGljIHN0cnVjdCBjbGsgKiB1YXJ0M19mY2sgPSBOVUxMOworCitzdGF0aWMgc3RydWN0IHBsYXRfc2VyaWFsODI1MF9wb3J0IHNlcmlhbF9wbGF0Zm9ybV9kYXRhW10gPSB7CisJeworCQkubWVtYmFzZQk9IChjaGFyICopSU9fQUREUkVTUyhPTUFQX1VBUlQxX0JBU0UpLAorCQkubWFwYmFzZQk9ICh1bnNpZ25lZCBsb25nKU9NQVBfVUFSVDFfQkFTRSwKKwkJLmlycQkJPSA3MiwKKwkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCQkuaW90eXBlCQk9IFVQSU9fTUVNLAorCQkucmVnc2hpZnQJPSAyLAorCQkudWFydGNsawk9IE9NQVAxNlhYX0JBU0VfQkFVRCAqIDE2LAorCX0sIHsKKwkJLm1lbWJhc2UJPSAoY2hhciAqKUlPX0FERFJFU1MoT01BUF9VQVJUMl9CQVNFKSwKKwkJLm1hcGJhc2UJPSAodW5zaWduZWQgbG9uZylPTUFQX1VBUlQyX0JBU0UsCisJCS5pcnEJCT0gNzMsCisJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKKwkJLmlvdHlwZQkJPSBVUElPX01FTSwKKwkJLnJlZ3NoaWZ0CT0gMiwKKwkJLnVhcnRjbGsJPSBPTUFQMTZYWF9CQVNFX0JBVUQgKiAxNiwKKwl9LCB7CisJCS5tZW1iYXNlCT0gKGNoYXIgKilJT19BRERSRVNTKE9NQVBfVUFSVDNfQkFTRSksCisJCS5tYXBiYXNlCT0gKHVuc2lnbmVkIGxvbmcpT01BUF9VQVJUM19CQVNFLAorCQkuaXJxCQk9IDc0LAorCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJCS5pb3R5cGUJCT0gVVBJT19NRU0sCisJCS5yZWdzaGlmdAk9IDIsCisJCS51YXJ0Y2xrCT0gT01BUDE2WFhfQkFTRV9CQVVEICogMTYsCisJfSwgeworCQkuZmxhZ3MJCT0gMAorCX0KK307CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHNlcmlhbF9yZWFkX3JlZyhzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgKnVwLAorCQkJCQkgICBpbnQgb2Zmc2V0KQoreworCW9mZnNldCA8PD0gdXAtPnJlZ3NoaWZ0OworCXJldHVybiAodW5zaWduZWQgaW50KV9fcmF3X3JlYWRiKHVwLT5tZW1iYXNlICsgb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNlcmlhbF93cml0ZV9yZWcoc3RydWN0IHBsYXRfc2VyaWFsODI1MF9wb3J0ICpwLCBpbnQgb2Zmc2V0LAorCQkJCSAgICBpbnQgdmFsdWUpCit7CisJb2Zmc2V0IDw8PSBwLT5yZWdzaGlmdDsKKwlfX3Jhd193cml0ZWIodmFsdWUsICh1bnNpZ25lZCBsb25nKShwLT5tZW1iYXNlICsgb2Zmc2V0KSk7Cit9CisKKy8qCisgKiBJbnRlcm5hbCBVQVJUcyBuZWVkIHRvIGJlIGluaXRpYWxpemVkIGZvciB0aGUgODI1MCBhdXRvY29uZmlnIHRvIHdvcmsKKyAqIHByb3Blcmx5LiBOb3RlIHRoYXQgdGhlIFRYIHdhdGVybWFyayBpbml0aWFsaXphdGlvbiBtYXkgbm90IGJlIG5lZWRlZAorICogb25jZSB0aGUgODI1MC5jIHdhdGVybWFyayBoYW5kbGluZyBjb2RlIGlzIG1lcmdlZC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBvbWFwX3NlcmlhbF9yZXNldChzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgKnApCit7CisJc2VyaWFsX3dyaXRlX3JlZyhwLCBVQVJUX09NQVBfTURSMSwgMHgwNyk7CisJc2VyaWFsX3dyaXRlX3JlZyhwLCBVQVJUX09NQVBfU0NSLCAweDA4KTsKKwlzZXJpYWxfd3JpdGVfcmVnKHAsIFVBUlRfT01BUF9NRFIxLCAweDAwKTsKKwlzZXJpYWxfd3JpdGVfcmVnKHAsIFVBUlRfT01BUF9TWVNDLCAweDAxKTsKK30KKwordm9pZCBfX2luaXQgb21hcF9zZXJpYWxfaW5pdCgpCit7CisJaW50IGk7CisJY29uc3Qgc3RydWN0IG9tYXBfdWFydF9jb25maWcgKmluZm87CisKKwkvKgorCSAqIE1ha2Ugc3VyZSB0aGUgc2VyaWFsIHBvcnRzIGFyZSBtdXhlZCBvbiBhdCB0aGlzIHBvaW50LgorCSAqIFlvdSBoYXZlIHRvIG11eCB0aGVtIG9mZiBpbiBkZXZpY2UgZHJpdmVycyBsYXRlciBvbgorCSAqIGlmIG5vdCBuZWVkZWQuCisJICovCisKKwlpbmZvID0gb21hcF9nZXRfY29uZmlnKE9NQVBfVEFHX1VBUlQsCisJCQkgICAgICAgc3RydWN0IG9tYXBfdWFydF9jb25maWcpOworCisJaWYgKGluZm8gPT0gTlVMTCkKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IE9NQVBfTUFYX05SX1BPUlRTOyBpKyspIHsKKwkJc3RydWN0IHBsYXRfc2VyaWFsODI1MF9wb3J0ICpwID0gc2VyaWFsX3BsYXRmb3JtX2RhdGEgKyBpOworCisJCWlmICghKGluZm8tPmVuYWJsZWRfdWFydHMgJiAoMSA8PCBpKSkpIHsKKwkJCXAtPm1lbWJhc2UgPSAwOworCQkJcC0+bWFwYmFzZSA9IDA7CisJCQljb250aW51ZTsKKwkJfQorCisJCXN3aXRjaCAoaSkgeworCQljYXNlIDA6CisJCQl1YXJ0MV9pY2sgPSBjbGtfZ2V0KE5VTEwsICJ1YXJ0MV9pY2siKTsKKwkJCWlmIChJU19FUlIodWFydDFfaWNrKSkKKwkJCQlwcmludGsoIkNvdWxkIG5vdCBnZXQgdWFydDFfaWNrXG4iKTsKKwkJCWVsc2UgeworCQkJCWNsa191c2UodWFydDFfaWNrKTsKKwkJCX0KKworCQkJdWFydDFfZmNrID0gY2xrX2dldChOVUxMLCAidWFydDFfZmNrIik7CisJCQlpZiAoSVNfRVJSKHVhcnQxX2ZjaykpCisJCQkJcHJpbnRrKCJDb3VsZCBub3QgZ2V0IHVhcnQxX2Zja1xuIik7CisJCQllbHNlIHsKKwkJCQljbGtfdXNlKHVhcnQxX2Zjayk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJdWFydDJfaWNrID0gY2xrX2dldChOVUxMLCAidWFydDJfaWNrIik7CisJCQlpZiAoSVNfRVJSKHVhcnQyX2ljaykpCisJCQkJcHJpbnRrKCJDb3VsZCBub3QgZ2V0IHVhcnQyX2lja1xuIik7CisJCQllbHNlIHsKKwkJCQljbGtfdXNlKHVhcnQyX2ljayk7CisJCQl9CisKKwkJCXVhcnQyX2ZjayA9IGNsa19nZXQoTlVMTCwgInVhcnQyX2ZjayIpOworCQkJaWYgKElTX0VSUih1YXJ0Ml9mY2spKQorCQkJCXByaW50aygiQ291bGQgbm90IGdldCB1YXJ0Ml9mY2tcbiIpOworCQkJZWxzZSB7CisJCQkJY2xrX3VzZSh1YXJ0Ml9mY2spOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCXVhcnQzX2ljayA9IGNsa19nZXQoTlVMTCwgInVhcnQzX2ljayIpOworCQkJaWYgKElTX0VSUih1YXJ0M19pY2spKQorCQkJCXByaW50aygiQ291bGQgbm90IGdldCB1YXJ0M19pY2tcbiIpOworCQkJZWxzZSB7CisJCQkJY2xrX3VzZSh1YXJ0M19pY2spOworCQkJfQorCisJCQl1YXJ0M19mY2sgPSBjbGtfZ2V0KE5VTEwsICJ1YXJ0M19mY2siKTsKKwkJCWlmIChJU19FUlIodWFydDNfZmNrKSkKKwkJCQlwcmludGsoIkNvdWxkIG5vdCBnZXQgdWFydDNfZmNrXG4iKTsKKwkJCWVsc2UgeworCQkJCWNsa191c2UodWFydDNfZmNrKTsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisKKwkJb21hcF9zZXJpYWxfcmVzZXQocCk7CisJfQorfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzZXJpYWxfZGV2aWNlID0geworCS5uYW1lCQkJPSAic2VyaWFsODI1MCIsCisJLmlkCQkJPSAwLAorCS5kZXYJCQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSBzZXJpYWxfcGxhdGZvcm1fZGF0YSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgb21hcF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmc2VyaWFsX2RldmljZSk7Cit9CithcmNoX2luaXRjYWxsKG9tYXBfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3NyYW0tZm4uUyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc3JhbS1mbi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhODY5ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NyYW0tZm4uUwpAQCAtMCwwICsxLDMzMyBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcDEvc3JhbS5TCisgKgorICogT21hcDIgc3BlY2lmaWMgZnVuY3Rpb25zIHRoYXQgbmVlZCB0byBiZSBydW4gaW4gaW50ZXJuYWwgU1JBTQorICoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNAorICogVGV4YXMgSW5zdHJ1bWVudHMsIDx3d3cudGkuY29tPgorICogUmljaGFyZCBXb29kcnVmZiA8ci13b29kcnVmZjJAdGkuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAvUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9pby5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvcHJjbS5oPgorCisjZGVmaW5lIFRJTUVSXzMyS1NZTkNUX0NSX1YJSU9fQUREUkVTUyhPTUFQMjRYWF8zMktTWU5DVF9CQVNFICsgMHgwMTApCisKKyNkZWZpbmUgQ01fQ0xLU0VMMl9QTExfVglJT19BRERSRVNTKE9NQVAyNFhYX1BSQ01fQkFTRSArIDB4NTQ0KQorI2RlZmluZSBQUkNNX1ZPTFRDVFJMX1YJCUlPX0FERFJFU1MoT01BUDI0WFhfUFJDTV9CQVNFICsgMHgwNTApCisjZGVmaW5lIFBSQ01fQ0xLQ0ZHX0NUUkxfVglJT19BRERSRVNTKE9NQVAyNFhYX1BSQ01fQkFTRSArIDB4MDgwKQorI2RlZmluZSBDTV9DTEtFTl9QTExfVgkJSU9fQUREUkVTUyhPTUFQMjRYWF9QUkNNX0JBU0UgKyAweDUwMCkKKyNkZWZpbmUgQ01fSURMRVNUX0NLR0VOX1YJSU9fQUREUkVTUyhPTUFQMjRYWF9QUkNNX0JBU0UgKyAweDUyMCkKKyNkZWZpbmUgQ01fQ0xLU0VMMV9QTExfVglJT19BRERSRVNTKE9NQVAyNFhYX1BSQ01fQkFTRSArIDB4NTQwKQorCisjZGVmaW5lIFNEUkNfRExMQV9DVFJMX1YJSU9fQUREUkVTUyhPTUFQMjRYWF9TRFJDX0JBU0UgKyAweDA2MCkKKyNkZWZpbmUgU0RSQ19SRlJfQ1RSTF9WCQlJT19BRERSRVNTKE9NQVAyNFhYX1NEUkNfQkFTRSArIDB4MGE0KQorCisJLnRleHQKKworRU5UUlkoc3JhbV9kZHJfaW5pdCkKKwlzdG1mZAlzcCEsIHtyMCAtIHIxMiwgbHJ9CUAgc2F2ZSByZWdpc3RlcnMgb24gc3RhY2sKKworCW1vdglyMTIsIHIyCQkJQCBjYXB0dXJlIENTMSB2cyBDUzAKKwltb3YJcjgsIHIzCQkJQCBjYXB0dXJlIGZvcmNlIHBhcmFtZXRlcgorCisJLyogZnJlcXVlbmN5IHNoaWZ0IGRvd24gKi8KKwlsZHIJcjIsIGNtX2Nsa3NlbDJfcGxsCUAgZ2V0IGFkZHJlc3Mgb2YgZHBsbG91dCByZWcKKwltb3YJcjMsICMweDEJCUAgdmFsdWUgZm9yIDF4IG9wZXJhdGlvbgorCXN0cglyMywgW3IyXQkJQCBnbyB0byBMMS1mcmVxIG9wZXJhdGlvbgorCisJLyogdm9sdGFnZSBzaGlmdCBkb3duICovCisJbW92IHI5LCAjMHgxCQkJQCBzZXQgdXAgZm9yIEwxIHZvbHRhZ2UgY2FsbAorCWJsIHZvbHRhZ2Vfc2hpZnQJCUAgZ28gZHJvcCB2b2x0YWdlCisKKwkvKiBkbGwgbG9jayBtb2RlICovCisJbGRyCXIxMSwgc2RyY19kbGxhX2N0cmwJQCBhZGRyIG9mIGRsbGEgY3RybAorCWxkcglyMTAsIFtyMTFdCQlAIGdldCBjdXJyZW50IHZhbAorCWNtcAlyMTIsICMweDEJCUAgY3MxIGJhc2UgKDI0MjIgZXMyLjA1LzEpCisJYWRkZXEJcjExLCByMTEsICMweDgJCUAgaWYgY3MxIGJhc2UsIG1vdmUgdG8gRExMQgorCW12bglyOSwgIzB4NAkJQCBtYXNrIHRvIGdldCBjbGVhciBiaXQyCisJYW5kCXIxMCwgcjEwLCByOQkJQCBjbGVhciBiaXQyIGZvciBsb2NrIG1vZGUuCisJb3JyCXIxMCwgcjEwLCAjMHg4CQlAIG1ha2Ugc3VyZSBETEwgb24gKGVzMiBiaXQgcG9zKQorCW9ycglyMTAsIHIxMCwgIzB4MgkJQCA5MCBkZWdyZWUgcGhhc2UgZm9yIGFsbCBiZWxvdyAxMzNNaHoKKwlzdHIJcjEwLCBbcjExXQkJQCBjb21taXQgdG8gRExMQV9DVFJMCisJYmwJaV9kbGxfd2FpdAkJQCB3YWl0IGZvciBkbGwgdG8gbG9jaworCisJLyogZ2V0IGRsbCB2YWx1ZSAqLworCWFkZAlyMTEsIHIxMSwgIzB4NAkJQCBnZXQgYWRkciBvZiBzdGF0dXMgcmVnCisJbGRyCXIxMCwgW3IxMV0JCUAgZ2V0IGxvY2tlZCB2YWx1ZQorCisJLyogdm9sdGFnZSBzaGlmdCB1cCAqLworCW1vdiByOSwgIzB4MAkJCUAgc2hpZnQgYmFjayB0byBMMC12b2x0YWdlCisJYmwgdm9sdGFnZV9zaGlmdAkJQCBnbyByYWlzZSB2b2x0YWdlCisKKwkvKiBmcmVxdWVuY3kgc2hpZnQgdXAgKi8KKwltb3YJcjMsICMweDIJCUAgdmFsdWUgZm9yIDJ4IG9wZXJhdGlvbgorCXN0cglyMywgW3IyXQkJQCBnbyB0byBMMC1mcmVxIG9wZXJhdGlvbgorCisJLyogcmVzZXQgZW50cnkgbW9kZSBmb3IgZGxsY3RybCAqLworCXN1YglyMTEsIHIxMSwgIzB4NAkJQCBtb3ZlIGZyb20gc3RhdHVzIHRvIGN0cmwKKwljbXAJcjEyLCAjMHgxCQlAIG5vcm1hbGl6ZSBpZiBjczEgYmFzZWQKKwlzdWJlcQlyMTEsIHIxMSwgIzB4OAkJQCBwb3NzaWJseSBiYWNrIHRvIERMTEEKKwljbXAJcjgsICMweDEJCUAgaWYgZm9yY2VkIHVubG9jayBleGl0CisJb3JyZXEJcjEsIHIxLCAjMHg0CQlAIG1ha2Ugc3VyZSBleGl0IHdpdGggdW5sb2NrZWQgdmFsdWUKKwlzdHIJcjEsIFtyMTFdCQlAIHJlc3RvcmUgRExMQV9DVFJMIGhpZ2ggdmFsdWUKKwlhZGQJcjExLCByMTEsICMweDgJCUAgbW92ZSB0byBETExCX0NUUkwgYWRkcgorCXN0cglyMSwgW3IxMV0JCUAgc2V0IHZhbHVlIERMTEJfQ1RSTAorCWJsCWlfZGxsX3dhaXQJCUAgd2FpdCBmb3IgcG9zc2libGUgbG9jaworCisJLyogc2V0IHVwIGZvciByZXR1cm4sIEREUiBzaG91bGQgYmUgZ29vZCAqLworCXN0ciByMTAsIFtyMF0JCQlAIHdyaXRlIGRsbF9zdGF0dXMgYW5kIHJldHVybiBjb3VudGVyCisJbGRtZmQJc3AhLCB7cjAgLSByMTIsIHBjfQlAIHJlc3RvcmUgcmVncyBhbmQgcmV0dXJuCisKKwkvKiBlbnN1cmUgdGhlIERMTCBoYXMgcmVsb2NrZWQgKi8KK2lfZGxsX3dhaXQ6CisJbW92CXI0LCAjMHg4MDAJCUAgZGVsYXkgRExMIHJlbG9jaywgbWluIDB4NDAwIEwzIGNsb2NrcworaV9kbGxfZGVsYXk6CisJc3VicwlyNCwgcjQsICMweDEKKwlibmUJaV9kbGxfZGVsYXkKKwltb3YJcGMsIGxyCisKKwkvKgorCSAqIHNoaWZ0IHVwIG9yIGRvd24gdm9sdGFnZSwgdXNlIFI5IGFzIGlucHV0IHRvIHRlbGwgbGV2ZWwuCisJICogd2FpdCBmb3IgaXQgdG8gZmluaXNoLCB1c2UgMzJrIHN5bmMgY291bnRlciwgMXRpY2s9MzF1Uy4KKwkgKi8KK3ZvbHRhZ2Vfc2hpZnQ6CisJbGRyCXI0LCBwcmNtX3ZvbHRjdHJsCUAgZ2V0IGFkZHIgb2Ygdm9sdCBjdHJsLgorCWxkcglyNSwgW3I0XQkJQCBnZXQgdmFsdWUuCisJbGRyCXI2LCBwcmNtX21hc2tfdmFsCUAgZ2V0IHZhbHVlIG9mIG1hc2sKKwlhbmQJcjUsIHI1LCByNgkJQCBhcHBseSBtYXNrIHRvIGNsZWFyIGJpdHMKKwlvcnIJcjUsIHI1LCByOQkJQCBidWxsZCB2YWx1ZSBmb3IgTDAvTDEtdm9sdCBvcGVyYXRpb24uCisJc3RyCXI1LCBbcjRdCQlAIHNldCB1cCBmb3IgY2hhbmdlLgorCW1vdglyMywgIzB4NDAwMAkJQCBnZXQgdmFsIGZvciBmb3JjZQorCW9ycglyNSwgcjUsIHIzCQlAIGJ1aWxkIHZhbHVlIGZvciBmb3JjZQorCXN0cglyNSwgW3I0XQkJQCBGb3JjZSB0cmFuc2l0aW9uIHRvIEwxCisKKwlsZHIJcjMsIHRpbWVyXzMya3N5bmN0X2NyCUAgZ2V0IGFkZHIgb2YgY291bnRlcgorCWxkcglyNSwgW3IzXQkJQCBnZXQgdmFsdWUKKwlhZGQJcjUsIHI1LCAjMHgzCQlAIGdpdmUgaXQgYXQgbW9zdCA5M3VTCit2b2x0X2RlbGF5OgorCWxkcglyNywgW3IzXQkJQCBnZXQgdGltZXIgdmFsdWUKKwljbXAJcjUsIHI3CQkJQCB0aW1lIHVwPworCWJoaQl2b2x0X2RlbGF5CQlAIG5vdCB5ZXQtPmJyYW5jaAorCW1vdglwYywgbHIJCQlAIGJhY2sgdG8gY2FsbGVyLgorCisvKiByZWxhdGl2ZSBsb2FkIGNvbnN0YW50cyAqLworY21fY2xrc2VsMl9wbGw6CisJLndvcmQgQ01fQ0xLU0VMMl9QTExfVgorc2RyY19kbGxhX2N0cmw6CisJLndvcmQgU0RSQ19ETExBX0NUUkxfVgorcHJjbV92b2x0Y3RybDoKKwkud29yZCBQUkNNX1ZPTFRDVFJMX1YKK3ByY21fbWFza192YWw6CisJLndvcmQgMHhGRkZGM0ZGQwordGltZXJfMzJrc3luY3RfY3I6CisJLndvcmQgVElNRVJfMzJLU1lOQ1RfQ1JfVgorRU5UUlkoc3JhbV9kZHJfaW5pdF9zeikKKwkud29yZAkuIC0gc3JhbV9kZHJfaW5pdAorCisvKgorICogUmVwcm9ncmFtcyBtZW1vcnkgdGltaW5ncy4KKyAqIHIwID0gW1BSQ01fRlVMTCB8IFBSQ01fSEFMRl0gcjEgPSBTRFJDX0RMTEFfQ1RSTCB2YWx1ZSByMiA9IFtERFIgfCBTRFJdCisgKiBQUkNNX0ZVTEwgPSAyLCBQUkNNX0hBTEYgPSAxLCBERFIgPSAxLCBTRFIgPSAwCisgKi8KK0VOVFJZKHNyYW1fcmVwcm9ncmFtX3NkcmMpCisJc3RtZmQJc3AhLCB7cjAgLSByMTAsIGxyfQlAIHNhdmUgcmVnaXN0ZXJzIG9uIHN0YWNrCisJbW92CXIzLCAjMHgwCQlAIGNsZWFyIGZvciBtcmMgY2FsbAorCW1jcglwMTUsIDAsIHIzLCBjNywgYzEwLCA0CUAgbWVtb3J5IGJhcnJpZXIsIGZpbmlzaCBBUk0gU0RSL0REUgorCW5vcAorCW5vcAorCWxkcglyNiwgZGRyX3NkcmNfcmZyX2N0cmwJQCBnZXQgYWRkciBvZiByZWZyZXNoIHJlZworCWxkcglyNSwgW3I2XQkJQCBnZXQgdmFsdWUKKwltb3YJcjUsIHI1LCBsc3IgIzgJCUAgaXNvbGF0ZSByZnIgZmllbGQgYW5kIGRyb3AgYnVyc3QKKworCWNtcAlyMCwgIzB4MQkJQCBnb2luZyB0byBoYWxmIHNwZWVkPworCW1vdm5lCXI5LCAjMHgwCQlAIGlmIHVwIHNldCBmbGFnIHVwIGZvciBwcmUgdXAsIGhpIHZvbHQKKworCWJsbmUJdm9sdGFnZV9zaGlmdF9jCQlAIGFkanVzdCB2b2x0YWdlCisKKwljbXAJcjAsICMweDEJCUAgZ29pbmcgdG8gaGFsZiBzcGVlZCAocG9zdCBicmFuY2ggbGluaykKKwltb3ZlcQlyNSwgcjUsIGxzciAjMQkJQCBkaXZpZGUgYnkgMiBpZiB0byBoYWxmCisJbW92bmUJcjUsIHI1LCBsc2wgIzEJCUAgbXVsdCBieSAyIGlmIHRvIGZ1bGwKKwltb3YJcjUsIHI1LCBsc2wgIzgJCUAgcHV0IHJmciBmaWVsZCBiYWNrIGludG8gcGxhY2UKKwlhZGQJcjUsIHI1LCAjMHgxCQlAIHR1cm4gb24gYnVyc3Qgb2YgMQorCWxkcglyNCwgZGRyX2NtX2Nsa3NlbDJfcGxsCUAgZ2V0IGFkZHJlc3Mgb2Ygb3V0IHJlZworCWxkcglyMywgW3I0XQkJQCBnZXQgY3VyciB2YWx1ZQorCW9ycglyMywgcjMsICMweDMKKwliaWMJcjMsIHIzLCAjMHgzCQlAIGNsZWFyIGxvd2VyIGJpdHMKKwlvcnIJcjMsIHIzLCByMAkJQCBuZXcgc3RhdGUgdmFsdWUKKwlzdHIJcjMsIFtyNF0JCUAgc2V0IG5ldyBzdGF0ZSAocGxsL3gsIHg9MSBvciAyKQorCW5vcAorCW5vcAorCisJbW92ZXEJcjksICMweDEJCUAgaWYgc3BlZWQgZG93biwgcG9zdCBkb3duLCBkcm9wIHZvbHQKKwlibGVxCXZvbHRhZ2Vfc2hpZnRfYworCisJbWNyCXAxNSwgMCwgcjMsIGM3LCBjMTAsIDQJQCBtZW1vcnkgYmFycmllcgorCXN0cglyNSwgW3I2XQkJQCBzZXQgbmV3IFJGUl8xIHZhbHVlCisJYWRkCXI2LCByNiwgIzB4MzAJCUAgZ2V0IFJGUl8yIGFkZHIKKwlzdHIJcjUsIFtyNl0JCUAgc2V0IFJGUl8yCisJbm9wCisJY21wCXIyLCAjMHgxCQlAIChTRFIgb3IgRERSKSBkbyB3ZSBuZWVkIHRvIGFkanVzdCBETEwKKwlibmUJZnJlcV9vdXQJCUAgbGVhdmUgaWYgU0RSLCBubyBETEwgZnVuY3Rpb24KKworCS8qIFdpdGggRERSLCB3ZSBuZWVkIHRvIHRha2UgY2FyZSBvZiB0aGUgRExMIGZvciB0aGUgZnJlcXVlbmN5IGNoYW5nZSAqLworCWxkcglyMiwgZGRyX3NkcmNfZGxsYV9jdHJsCUAgYWRkciBvZiBkbGxhIGN0cmwKKwlzdHIJcjEsIFtyMl0JCUAgd3JpdGUgb3V0IG5ldyBTRFJDX0RMTEFfQ1RSTAorCWFkZAlyMiwgcjIsICMweDgJCUAgYWRkciB0byBTRFJDX0RMTEJfQ1RSTAorCXN0cglyMSwgW3IyXQkJQCBjb21taXQgdG8gU0RSQ19ETExCX0NUUkwKKwltb3YJcjEsICMweDIwMDAJCUAgd2FpdCBETEwgcmVsb2NrLCBtaW4gMHg0MDAgTDMgY2xvY2tzCitkbGxfd2FpdDoKKwlzdWJzCXIxLCByMSwgIzB4MQorCWJuZQlkbGxfd2FpdAorZnJlcV9vdXQ6CisJbGRtZmQJc3AhLCB7cjAgLSByMTAsIHBjfQlAIHJlc3RvcmUgcmVncyBhbmQgcmV0dXJuCisKKyAgICAvKgorICAgICAqIHNoaWZ0IHVwIG9yIGRvd24gdm9sdGFnZSwgdXNlIFI5IGFzIGlucHV0IHRvIHRlbGwgbGV2ZWwuCisgICAgICoJd2FpdCBmb3IgaXQgdG8gZmluaXNoLCB1c2UgMzJrIHN5bmMgY291bnRlciwgMXRpY2s9MzF1Uy4KKyAgICAgKi8KK3ZvbHRhZ2Vfc2hpZnRfYzoKKwlsZHIJcjEwLCBkZHJfcHJjbV92b2x0Y3RybAlAIGdldCBhZGRyIG9mIHZvbHQgY3RybAorCWxkcglyOCwgW3IxMF0JCUAgZ2V0IHZhbHVlCisJbGRyCXI3LCBkZHJfcHJjbV9tYXNrX3ZhbAlAIGdldCB2YWx1ZSBvZiBtYXNrCisJYW5kCXI4LCByOCwgcjcJCUAgYXBwbHkgbWFzayB0byBjbGVhciBiaXRzCisJb3JyCXI4LCByOCwgcjkJCUAgYnVsbGQgdmFsdWUgZm9yIEwwL0wxLXZvbHQgb3BlcmF0aW9uLgorCXN0cglyOCwgW3IxMF0JCUAgc2V0IHVwIGZvciBjaGFuZ2UuCisJbW92CXI3LCAjMHg0MDAwCQlAIGdldCB2YWwgZm9yIGZvcmNlCisJb3JyCXI4LCByOCwgcjcJCUAgYnVpbGQgdmFsdWUgZm9yIGZvcmNlCisJc3RyCXI4LCBbcjEwXQkJQCBGb3JjZSB0cmFuc2l0aW9uIHRvIEwxCisKKwlsZHIJcjEwLCBkZHJfdGltZXJfMzJrc3luY3QJQCBnZXQgYWRkciBvZiBjb3VudGVyCisJbGRyCXI4LCBbcjEwXQkJQCBnZXQgdmFsdWUKKwlhZGQJcjgsIHI4LCAjMHgyCQlAIGdpdmUgaXQgYXQgbW9zdCA2MnVTIChtaW4gMzErKQordm9sdF9kZWxheV9jOgorCWxkcglyNywgW3IxMF0JCUAgZ2V0IHRpbWVyIHZhbHVlCisJY21wCXI4LCByNwkJCUAgdGltZSB1cD8KKwliaGkJdm9sdF9kZWxheV9jCQlAIG5vdCB5ZXQtPmJyYW5jaAorCW1vdglwYywgbHIJCQlAIGJhY2sgdG8gY2FsbGVyCisKK2Rkcl9jbV9jbGtzZWwyX3BsbDoKKwkud29yZCBDTV9DTEtTRUwyX1BMTF9WCitkZHJfc2RyY19kbGxhX2N0cmw6CisJLndvcmQgU0RSQ19ETExBX0NUUkxfVgorZGRyX3NkcmNfcmZyX2N0cmw6CisJLndvcmQgU0RSQ19SRlJfQ1RSTF9WCitkZHJfcHJjbV92b2x0Y3RybDoKKwkud29yZCBQUkNNX1ZPTFRDVFJMX1YKK2Rkcl9wcmNtX21hc2tfdmFsOgorCS53b3JkIDB4RkZGRjNGRkMKK2Rkcl90aW1lcl8zMmtzeW5jdDoKKwkud29yZCBUSU1FUl8zMktTWU5DVF9DUl9WCisKK0VOVFJZKHNyYW1fcmVwcm9ncmFtX3NkcmNfc3opCisJLndvcmQJLiAtIHNyYW1fcmVwcm9ncmFtX3NkcmMKKworLyoKKyAqIFNldCBkaXZpZGVycyBhbmQgcGxsLiBBbHNvIHJlY2FsY3VsYXRlIERMTCB2YWx1ZSBmb3IgRERSIGFuZCB1bmxvY2sgbW9kZS4KKyAqLworRU5UUlkoc3JhbV9zZXRfcHJjbSkKKwlzdG1mZAlzcCEsIHtyMC1yMTIsIGxyfQlAIHJlZ3MgdG8gc3RhY2sKKwlhZHIJcjQsIHBiZWdpbgkJQCBhZGRyIG9mIHByZWxvYWQgc3RhcnQKKwlhZHIJcjgsIHBlbmQJCUAgYWRkciBvZiBwcmVsb2FkIGVuZAorCW1jcnIJcDE1LCAxLCByOCwgcjQsIGMxMglAIHByZWxvYWQgaW50byBpY2FjaGUKK3BiZWdpbjoKKwkvKiBtb3ZlIGludG8gZmFzdCByZWxvY2sgYnlwYXNzICovCisJbGRyCXI4LCBwbGxfY3RsCQlAIGdldCBhZGRyCisJbGRyCXI1LCBbcjhdCQlAIGdldCB2YWwKKwltdm4JcjYsICMweDMJCUAgY2xlYXIgbWFzaworCWFuZAlyNSwgcjUsIHI2CQlAIGNsZWFyIGZpZWxkCisJb3JyCXI3LCByNSwgIzB4MgkJQCBmYXN0IHJlbG9jayB2YWwKKwlzdHIJcjcsIFtyOF0JCUAgZ28gdG8gZmFzdCByZWxvY2sKKwlsZHIJcjQsIHBsbF9zdGF0CQlAIGFkZHIgb2Ygc3RhdAorYmxvY2s6CisJLyogd2FpdCBmb3IgYnlwYXNzICovCisJbGRyCXI4LCBbcjRdCQlAIHN0YXQgdmFsdWUKKwlhbmQJcjgsIHI4LCAjMHgzCQlAIG1hc2sgZm9yIHN0YXQKKwljbXAJcjgsICMweDEJCUAgdGhlcmUgeWV0CisJYm5lCWJsb2NrCQkJQCBsb29wIGlmIG5vdAorCisJLyogc2V0IG5ldyBkcGxsIGRpdmlkZXJzIF9hZnRlcl8gaW4gYnlwYXNzICovCisJbGRyCXI0LCBwbGxfZGl2CQlAIGdldCBhZGRyCisJc3RyCXIwLCBbcjRdCQlAIHNldCBkcGxsIGN0cmwgdmFsCisKKwlsZHIJcjQsIHNldF9jb25maWcJCUAgZ2V0IGFkZHIKKwltb3YJcjgsICMxCQkJQCB2YWxpZCBjZmcgbXNrCisJc3RyCXI4LCBbcjRdCQlAIG1ha2UgZGl2aWRlcnMgdGFrZQorCisJbW92CXI0LCAjMTAwCQlAIGRlYWQgc3BpbiBhIGJpdAord2FpdF9hX2JpdDoKKwlzdWJzCXI0LCByNCwgIzEJCUAgZGVjIGxvb3AKKwlibmUJd2FpdF9hX2JpdAkJQCBkZWxheSBkb25lPworCisJLyogY2hlY2sgaWYgc3RheWluZyBpbiBieXBhc3MgKi8KKwljbXAJcjIsICMweDEJCUAgc3RheSBpbiBieXBhc3M/CisJYmVxCXBlbmQJCQlAIGp1bXAgb3ZlciBkcGxsIHJlbG9jaworCisJLyogcmVsb2NrIERQTEwgd2l0aCBuZXcgdmFscyAqLworCWxkcglyNSwgcGxsX3N0YXQJCUAgZ2V0IGFkZHIKKwlsZHIJcjQsIHBsbF9jdGwJCUAgZ2V0IGFkZHIKKwlvcnIJcjgsIHI3LCAjMHgzCQlAIHZhbCBmb3IgbG9jayBkcGxsCisJc3RyCXI4LCBbcjRdCQlAIHNldCB2YWwKKwltb3YJcjAsICMxMDAwCQlAIGRlYWQgc3BpbiBhIGJpdAord2FpdF9tb3JlOgorCXN1YnMJcjAsIHIwLCAjMQkJQCBkZWMgbG9vcAorCWJuZQl3YWl0X21vcmUJCUAgZGVsYXkgZG9uZT8KK3dhaXRfbG9jazoKKwlsZHIJcjgsIFtyNV0JCUAgZ2V0IGxvY2sgdmFsCisJYW5kCXI4LCByOCwgIzMJCUAgaXNvbGF0ZSBmaWVsZAorCWNtcAlyOCwgIzIJCQlAIGxvY2tlZD8KKwlibmUJd2FpdF9sb2NrCQlAIHdhaXQgaWYgbm90CitwZW5kOgorCS8qIHVwZGF0ZSBtZW1vcnkgdGltaW5ncyAmIGJyaWVmbHkgbG9jayBkbGwgKi8KKwlsZHIJcjQsIHNkcmNfcmZyCQlAIGdldCBhZGRyCisJc3RyCXIxLCBbcjRdCQlAIHVwZGF0ZSByZWZyZXNoIHRpbWluZworCWxkcglyMTEsIGRsbGFfY3RybAkJQCBnZXQgYWRkciBvZiBETExBIGN0cmwKKwlsZHIJcjEwLCBbcjExXQkJQCBnZXQgY3VycmVudCB2YWwKKwltdm4JcjksICMweDQJCUAgbWFzayB0byBnZXQgY2xlYXIgYml0MgorCWFuZAlyMTAsIHIxMCwgcjkJCUAgY2xlYXIgYml0MiBmb3IgbG9jayBtb2RlCisJb3JyCXIxMCwgcjEwLCAjMHg4CQlAIG1ha2Ugc3VyZSBETEwgb24gKGVzMiBiaXQgcG9zKQorCXN0cglyMTAsIFtyMTFdCQlAIGNvbW1pdCB0byBETExBX0NUUkwKKwlhZGQJcjExLCByMTEsICMweDgJCUAgbW92ZSB0byBkbGxiCisJc3RyCXIxMCwgW3IxMV0JCUAgaGl0IERMTEIgYWxzbworCisJbW92CXI0LCAjMHg4MDAJCUAgcmVsb2NrIHRpbWUgKG1pbiAweDQwMCBMMyBjbG9ja3MpCit3YWl0X2RsbF9sb2NrOgorCXN1YnMJcjQsIHI0LCAjMHgxCisJYm5lCXdhaXRfZGxsX2xvY2sKKwlub3AKKwlsZG1mZAlzcCEsIHtyMC1yMTIsIHBjfQlAIHJlc3RvcmUgcmVncyBhbmQgcmV0dXJuCisKK3NldF9jb25maWc6CisJLndvcmQgUFJDTV9DTEtDRkdfQ1RSTF9WCitwbGxfY3RsOgorCS53b3JkIENNX0NMS0VOX1BMTF9WCitwbGxfc3RhdDoKKwkud29yZCBDTV9JRExFU1RfQ0tHRU5fVgorcGxsX2RpdjoKKwkud29yZCBDTV9DTEtTRUwxX1BMTF9WCitzZHJjX3JmcjoKKwkud29yZCBTRFJDX1JGUl9DVFJMX1YKK2RsbGFfY3RybDoKKwkud29yZCBTRFJDX0RMTEFfQ1RSTF9WCisKK0VOVFJZKHNyYW1fc2V0X3ByY21fc3opCisJLndvcmQJLiAtIHNyYW1fc2V0X3ByY20KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvdGltZXItZ3AuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvdGltZXItZ3AuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWMxMTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi90aW1lci1ncC5jCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwMi90aW1lci1ncC5jCisgKgorICogT01BUDIgR1AgdGltZXIgc3VwcG9ydC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgTm9raWEgQ29ycG9yYXRpb24KKyAqIEF1dGhvcjogUGF1bCBNdW5kdCA8cGF1bC5tdW5kdEBub2tpYS5jb20+CisgKiAgICAgICAgIEp1aGEgWXJq9mzkIDxqdWhhLnlyam9sYUBub2tpYS5jb20+CisgKgorICogU29tZSBwYXJ0cyBiYXNlZCBvZmYgb2YgVEkncyAyNHh4IGNvZGU6CisgKgorICogICBDb3B5cmlnaHQgKEMpIDIwMDQgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBSb3VnaGx5IG1vZGVsbGVkIGFmdGVyIHRoZSBPTUFQMSBNUFUgdGltZXIgY29kZS4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CisjaW5jbHVkZSA8YXNtL2RlbGF5Lmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2Nsb2NrLmg+CisKKyNkZWZpbmUgT01BUDJfR1BfVElNRVIxX0JBU0UJMHg0ODAyODAwMAorI2RlZmluZSBPTUFQMl9HUF9USU1FUjJfQkFTRQkweDQ4MDJhMDAwCisjZGVmaW5lIE9NQVAyX0dQX1RJTUVSM19CQVNFCTB4NDgwNzgwMDAKKyNkZWZpbmUgT01BUDJfR1BfVElNRVI0X0JBU0UJMHg0ODA3YTAwMAorCisjZGVmaW5lIEdQX1RJTUVSX1RJRFIJCTB4MDAKKyNkZWZpbmUgR1BfVElNRVJfVElTUgkJMHgxOAorI2RlZmluZSBHUF9USU1FUl9USUVSCQkweDFjCisjZGVmaW5lIEdQX1RJTUVSX1RDTFIJCTB4MjQKKyNkZWZpbmUgR1BfVElNRVJfVENSUgkJMHgyOAorI2RlZmluZSBHUF9USU1FUl9UTERSCQkweDJjCisjZGVmaW5lIEdQX1RJTUVSX1RTSUNSCQkweDQwCisKKyNkZWZpbmUgT1NfVElNRVJfTlIJCTEgIC8qIEdQIHRpbWVyIDIgKi8KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgdGltZXJfYmFzZVtdID0geworCUlPX0FERFJFU1MoT01BUDJfR1BfVElNRVIxX0JBU0UpLAorCUlPX0FERFJFU1MoT01BUDJfR1BfVElNRVIyX0JBU0UpLAorCUlPX0FERFJFU1MoT01BUDJfR1BfVElNRVIzX0JBU0UpLAorCUlPX0FERFJFU1MoT01BUDJfR1BfVElNRVI0X0JBU0UpLAorfTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgdGltZXJfcmVhZF9yZWcoaW50IG5yLCB1bnNpZ25lZCBpbnQgcmVnKQoreworCXJldHVybiBfX3Jhd19yZWFkbCh0aW1lcl9iYXNlW25yXSArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0aW1lcl93cml0ZV9yZWcoaW50IG5yLCB1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBpbnQgdmFsKQoreworCV9fcmF3X3dyaXRlbCh2YWwsIHRpbWVyX2Jhc2VbbnJdICsgcmVnKTsKK30KKworLyogTm90ZSB0aGF0IHdlIGFsd2F5cyBlbmFibGUgdGhlIGNsb2NrIHByZXNjYWxlIGRpdmlkZXIgYml0ICovCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcDJfZ3BfdGltZXJfc3RhcnQoaW50IG5yLCB1bnNpZ25lZCBsb25nIGxvYWRfdmFsKQoreworCXVuc2lnbmVkIGludCB0bXA7CisKKwl0bXAgPSAweGZmZmZmZmZmIC0gbG9hZF92YWw7CisKKwl0aW1lcl93cml0ZV9yZWcobnIsIEdQX1RJTUVSX1RMRFIsIHRtcCk7CisJdGltZXJfd3JpdGVfcmVnKG5yLCBHUF9USU1FUl9UQ1JSLCB0bXApOworCXRpbWVyX3dyaXRlX3JlZyhuciwgR1BfVElNRVJfVElFUiwgMSA8PCAxKTsKKwl0aW1lcl93cml0ZV9yZWcobnIsIEdQX1RJTUVSX1RDTFIsICgxIDw8IDUpIHwgKDEgPDwgMSkgfCAxKTsKK30KKworc3RhdGljIGlycXJldHVybl90IG9tYXAyX2dwX3RpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQsCisJCQkJCSAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl3cml0ZV9zZXFsb2NrKCZ4dGltZV9sb2NrKTsKKworCXRpbWVyX3dyaXRlX3JlZyhPU19USU1FUl9OUiwgR1BfVElNRVJfVElTUiwgMSA8PCAxKTsKKwl0aW1lcl90aWNrKHJlZ3MpOworCisJd3JpdGVfc2VxdW5sb2NrKCZ4dGltZV9sb2NrKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gb21hcDJfZ3BfdGltZXJfaXJxID0geworCS5uYW1lCQk9ICJncCB0aW1lciIsCisJLmZsYWdzCQk9IFNBX0lOVEVSUlVQVCwKKwkuaGFuZGxlcgk9IG9tYXAyX2dwX3RpbWVyX2ludGVycnVwdCwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBvbWFwMl9ncF90aW1lcl9pbml0KHZvaWQpCit7CisJc3RydWN0IGNsayAqIHN5c19jazsKKwl1MzIgdGlja19wZXJpb2QgPSAxMjAwMDA7CisJdTMyIGw7CisKKwkvKiBSZXNldCBjbG9jayBhbmQgcHJlc2NhbGUgdmFsdWUgKi8KKwl0aW1lcl93cml0ZV9yZWcoT1NfVElNRVJfTlIsIEdQX1RJTUVSX1RDTFIsIDApOworCisJc3lzX2NrID0gY2xrX2dldChOVUxMLCAic3lzX2NrIik7CisJaWYgKElTX0VSUihzeXNfY2spKQorCQlwcmludGsoS0VSTl9FUlIgIkNvdWxkIG5vdCBnZXQgc3lzX2NrXG4iKTsKKwllbHNlIHsKKwkJY2xrX3VzZShzeXNfY2spOworCQl0aWNrX3BlcmlvZCA9IGNsa19nZXRfcmF0ZShzeXNfY2spIC8gMTAwOworCQljbGtfcHV0KHN5c19jayk7CisJfQorCisJdGlja19wZXJpb2QgLz0gMjsJLyogTWluaW11bSBwcmVzY2FsZSBkaXZpZGVyIGlzIDIgKi8KKwl0aWNrX3BlcmlvZCAtPSAxOworCisJbCA9IHRpbWVyX3JlYWRfcmVnKE9TX1RJTUVSX05SLCBHUF9USU1FUl9USURSKTsKKwlwcmludGsoS0VSTl9JTkZPICJPTUFQMiBHUCB0aW1lciAoSFcgdmVyc2lvbiAlZC4lZClcbiIsCisJICAgICAgIChsID4+IDQpICYgMHgwZiwgbCAmIDB4MGYpOworCisJc2V0dXBfaXJxKDM4LCAmb21hcDJfZ3BfdGltZXJfaXJxKTsKKworCW9tYXAyX2dwX3RpbWVyX3N0YXJ0KE9TX1RJTUVSX05SLCB0aWNrX3BlcmlvZCk7Cit9CisKK3N0cnVjdCBzeXNfdGltZXIgb21hcF90aW1lciA9IHsKKwkuaW5pdAk9IG9tYXAyX2dwX3RpbWVyX2luaXQsCit9OworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1weGEvS2NvbmZpZwppbmRleCBiMzgwYTQzOC4uZTIwMWFhOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9LY29uZmlnCkBAIC02MCw2ICs2MCw3IEBACiAJYm9vbCAiRW5hYmxlIFNoYXJwIFNMLUM3MDAgKENvcmdpKSBTdXBwb3J0IgogCWRlcGVuZHMgUFhBX1NIQVJQU0xfMjV4CiAJc2VsZWN0IFBYQV9TSEFSUF9DN3h4CisJc2VsZWN0IFBYQV9TU1AKIAogY29uZmlnIE1BQ0hfU0hFUEhFUkQKIAlib29sICJFbmFibGUgU2hhcnAgU0wtQzc1MCAoU2hlcGhlcmQpIFN1cHBvcnQiCkBAIC0xMDIsMTIgKzEwMywxOCBAQAogCiBjb25maWcgUFhBX1NIQVJQX0M3eHgKIAlib29sCisJc2VsZWN0IFBYQV9TU1AKIAloZWxwCiAJICBFbmFibGUgc3VwcG9ydCBmb3IgYWxsIFNoYXJwIEM3eHggbW9kZWxzCiAKIGNvbmZpZyBQWEFfU0hBUlBfQ3h4MDAKIAlib29sCisJc2VsZWN0IFBYQV9TU1AKIAloZWxwCiAJICBFbmFibGUgY29tbW9uIHN1cHBvcnQgZm9yIFNoYXJwIEN4eDAwIG1vZGVscwogCitjb25maWcgUFhBX1NTUAorCXRyaXN0YXRlCisJaGVscAorCSAgRW5hYmxlIHN1cHBvcnQgZm9yIFBYQTJ4eCBTU1AgcG9ydHMKIGVuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtcHhhL01ha2VmaWxlCmluZGV4IDhiYzcyZDAuLmQyMTBiZDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL01ha2VmaWxlCkBAIC0xMSw4ICsxMSw4IEBACiBvYmotJChDT05GSUdfQVJDSF9MVUJCT0NLKSArPSBsdWJib2NrLm8KIG9iai0kKENPTkZJR19NQUNIX01BSU5TVE9ORSkgKz0gbWFpbnN0b25lLm8KIG9iai0kKENPTkZJR19BUkNIX1BYQV9JRFApICs9IGlkcC5vCi1vYmotJChDT05GSUdfUFhBX1NIQVJQX0M3eHgpCSs9IGNvcmdpLm8gY29yZ2lfc3NwLm8gY29yZ2lfbGNkLm8gc3NwLm8KLW9iai0kKENPTkZJR19QWEFfU0hBUlBfQ3h4MDApCSs9IHNwaXR6Lm8gY29yZ2lfc3NwLm8gY29yZ2lfbGNkLm8gc3NwLm8KK29iai0kKENPTkZJR19QWEFfU0hBUlBfQzd4eCkJKz0gY29yZ2kubyBjb3JnaV9zc3AubyBjb3JnaV9sY2Qubworb2JqLSQoQ09ORklHX1BYQV9TSEFSUF9DeHgwMCkJKz0gc3BpdHoubyBjb3JnaV9zc3AubyBjb3JnaV9sY2Qubwogb2JqLSQoQ09ORklHX01BQ0hfUE9PRExFKQkrPSBwb29kbGUubwogb2JqLSQoQ09ORklHX01BQ0hfVE9TQSkgICAgICAgICArPSB0b3NhLm8KIApAQCAtMjYsNiArMjYsNyBAQAogCiAjIE1pc2MgZmVhdHVyZXMKIG9iai0kKENPTkZJR19QTSkgKz0gcG0ubyBzbGVlcC5vCitvYmotJChDT05GSUdfUFhBX1NTUCkgKz0gc3NwLm8KIAogaWZlcSAoJChDT05GSUdfUFhBMjd4KSx5KQogb2JqLSQoQ09ORklHX1BNKSArPSBzdGFuZGJ5Lm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NvcmdpLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaS5jCmluZGV4IGViNWY2ZDc0Li4xMDBmYjMxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NvcmdpLmMKQEAgLTYyLDE1ICs2Miw2IEBACiAJLmlvX291dAkJPSBDT1JHSV9TQ09PUF9JT19PVVQsCiB9OwogCi1zdGF0aWMgc3RydWN0IHNjb29wX3BjbWNpYV9kZXYgY29yZ2lfcGNtY2lhX3Njb29wW10gPSB7Ci17Ci0JLmRldiAgICAgICAgPSAmY29yZ2lzY29vcF9kZXZpY2UuZGV2LAotCS5pcnEgICAgICAgID0gQ09SR0lfSVJRX0dQSU9fQ0ZfSVJRLAotCS5jZF9pcnEgICAgID0gQ09SR0lfSVJRX0dQSU9fQ0ZfQ0QsCi0JLmNkX2lycV9zdHIgPSAiUENNQ0lBMCBDRCIsCi19LAotfTsKLQogc3RydWN0IHBsYXRmb3JtX2RldmljZSBjb3JnaXNjb29wX2RldmljZSA9IHsKIAkubmFtZQkJPSAic2hhcnAtc2Nvb3AiLAogCS5pZAkJPSAtMSwKQEAgLTgxLDYgKzcyLDQ0IEBACiAJLnJlc291cmNlCT0gY29yZ2lfc2Nvb3BfcmVzb3VyY2VzLAogfTsKIAorc3RhdGljIHZvaWQgY29yZ2lfcGNtY2lhX2luaXQodm9pZCkKK3sKKwkvKiBTZXR1cCBkZWZhdWx0IHN0YXRlIG9mIEdQSU8gb3V0cHV0cworCSAgIGJlZm9yZSB3ZSBlbmFibGUgdGhlbSBhcyBvdXRwdXRzLiAqLworCUdQU1IoR1BJTzQ4X25QT0UpID0gR1BJT19iaXQoR1BJTzQ4X25QT0UpIHwKKwkJR1BJT19iaXQoR1BJTzQ5X25QV0UpIHwgR1BJT19iaXQoR1BJTzUwX25QSU9SKSB8CisJCUdQSU9fYml0KEdQSU81MV9uUElPVykgfCBHUElPX2JpdChHUElPNTJfblBDRV8xKSB8CisJCUdQSU9fYml0KEdQSU81M19uUENFXzIpOworCisJcHhhX2dwaW9fbW9kZShHUElPNDhfblBPRV9NRCk7CisJcHhhX2dwaW9fbW9kZShHUElPNDlfblBXRV9NRCk7CisJcHhhX2dwaW9fbW9kZShHUElPNTBfblBJT1JfTUQpOworCXB4YV9ncGlvX21vZGUoR1BJTzUxX25QSU9XX01EKTsKKwlweGFfZ3Bpb19tb2RlKEdQSU81NV9uUFJFR19NRCk7CisJcHhhX2dwaW9fbW9kZShHUElPNTZfblBXQUlUX01EKTsKKwlweGFfZ3Bpb19tb2RlKEdQSU81N19uSU9JUzE2X01EKTsKKwlweGFfZ3Bpb19tb2RlKEdQSU81Ml9uUENFXzFfTUQpOworCXB4YV9ncGlvX21vZGUoR1BJTzUzX25QQ0VfMl9NRCk7CisJcHhhX2dwaW9fbW9kZShHUElPNTRfcFNLVFNFTF9NRCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2Nvb3BfcGNtY2lhX2RldiBjb3JnaV9wY21jaWFfc2Nvb3BbXSA9IHsKK3sKKwkuZGV2ICAgICAgICA9ICZjb3JnaXNjb29wX2RldmljZS5kZXYsCisJLmlycSAgICAgICAgPSBDT1JHSV9JUlFfR1BJT19DRl9JUlEsCisJLmNkX2lycSAgICAgPSBDT1JHSV9JUlFfR1BJT19DRl9DRCwKKwkuY2RfaXJxX3N0ciA9ICJQQ01DSUEwIENEIiwKK30sCit9OworCitzdGF0aWMgc3RydWN0IHNjb29wX3BjbWNpYV9jb25maWcgY29yZ2lfcGNtY2lhX2NvbmZpZyA9IHsKKwkuZGV2cyAgICAgICAgID0gJmNvcmdpX3BjbWNpYV9zY29vcFswXSwKKwkubnVtX2RldnMgICAgID0gMSwKKwkucGNtY2lhX2luaXQgID0gY29yZ2lfcGNtY2lhX2luaXQsCit9OworCitFWFBPUlRfU1lNQk9MKGNvcmdpc2Nvb3BfZGV2aWNlKTsKKwogCiAvKgogICogQ29yZ2kgU1NQIERldmljZQpAQCAtMjk0LDggKzMyMyw3IEBACiAJcHhhX3NldF9tY2lfaW5mbygmY29yZ2lfbWNpX3BsYXRmb3JtX2RhdGEpOwogCXB4YV9zZXRfZmljcF9pbmZvKCZjb3JnaV9maWNwX3BsYXRmb3JtX2RhdGEpOwogCi0Jc2Nvb3BfbnVtID0gMTsKLQlzY29vcF9kZXZzID0gJmNvcmdpX3BjbWNpYV9zY29vcFswXTsKKwlwbGF0Zm9ybV9zY29vcF9jb25maWcgPSAmY29yZ2lfcGNtY2lhX2NvbmZpZzsKIAogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZXMsIEFSUkFZX1NJWkUoZGV2aWNlcykpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvY29yZ2lfc3NwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaV9zc3AuYwppbmRleCA1OTFlNWYzLi5iMzcxZDcyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaV9zc3AuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaV9zc3AuYwpAQCAtMTkxLDcgKzE5MSw3IEBACiAJc3NwX21hY2hpbmZvID0gbWFjaGluZm87CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IGNvcmdpX3NzcF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9faW5pdCBjb3JnaV9zc3BfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCWludCByZXQ7CiAKQEAgLTIwMyw3ICsyMDMsNyBAQAogCUdQRFIoc3NwX21hY2hpbmZvLT5jc19hZHM3ODQ2KSB8PSBHUElPX2JpdChzc3BfbWFjaGluZm8tPmNzX2Fkczc4NDYpOyAgLyogb3V0cHV0ICovCiAJR1BTUihzc3BfbWFjaGluZm8tPmNzX2Fkczc4NDYpID0gR1BJT19iaXQoc3NwX21hY2hpbmZvLT5jc19hZHM3ODQ2KTsgICAvKiBIaWdoIC0gRGlzYWJsZSBBRFM3ODQ2Ki8KIAotCXJldCA9IHNzcF9pbml0KCZjb3JnaV9zc3BfZGV2LHNzcF9tYWNoaW5mby0+cG9ydCk7CisJcmV0ID0gc3NwX2luaXQoJmNvcmdpX3NzcF9kZXYsIHNzcF9tYWNoaW5mby0+cG9ydCwgMCk7CiAKIAlpZiAocmV0KQogCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byByZWdpc3RlciBTU1AgaGFuZGxlciFcbiIpOwpAQCAtMjE2LDEzICsyMTYsMTMgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGNvcmdpX3NzcF9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBjb3JnaV9zc3BfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlzc3BfZXhpdCgmY29yZ2lfc3NwX2Rldik7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY29yZ2lfc3NwX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IGNvcmdpX3NzcF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCXNzcF9mbHVzaCgmY29yZ2lfc3NwX2Rldik7CiAJc3NwX3NhdmVfc3RhdGUoJmNvcmdpX3NzcF9kZXYsJmNvcmdpX3NzcF9zdGF0ZSk7CkBAIC0yMzAsNyArMjMwLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjb3JnaV9zc3BfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgY29yZ2lfc3NwX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJR1BTUihzc3BfbWFjaGluZm8tPmNzX2xjZGNvbikgPSBHUElPX2JpdChzc3BfbWFjaGluZm8tPmNzX2xjZGNvbik7ICAvKiBIaWdoIC0gRGlzYWJsZSBMQ0QgQ29udHJvbC9UaW1pbmcgR2VuICovCiAJR1BTUihzc3BfbWFjaGluZm8tPmNzX21heDExMTEpID0gR1BJT19iaXQoc3NwX21hY2hpbmZvLT5jc19tYXgxMTExKTsgLyogSGlnaCAtIERpc2FibGUgTUFYMTExMSovCkBAIC0yNDEsMTggKzI0MSwxOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgY29yZ2lzc3BfZHJpdmVyID0gewotCS5uYW1lCQk9ICJjb3JnaS1zc3AiLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgY29yZ2lzc3BfZHJpdmVyID0gewogCS5wcm9iZQkJPSBjb3JnaV9zc3BfcHJvYmUsCiAJLnJlbW92ZQkJPSBjb3JnaV9zc3BfcmVtb3ZlLAogCS5zdXNwZW5kCT0gY29yZ2lfc3NwX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBjb3JnaV9zc3BfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJjb3JnaS1zc3AiLAorCX0sCiB9OwogCiBpbnQgX19pbml0IGNvcmdpX3NzcF9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmY29yZ2lzc3BfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZjb3JnaXNzcF9kcml2ZXIpOwogfQogCiBhcmNoX2luaXRjYWxsKGNvcmdpX3NzcF9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3Bvb2RsZS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcG9vZGxlLmMKaW5kZXggYWQ2YTEzZi4uZWVmM2RlMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcG9vZGxlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcG9vZGxlLmMKQEAgLTY1LDYgKzY1LDI3IEBACiAJLnJlc291cmNlCT0gcG9vZGxlX3Njb29wX3Jlc291cmNlcywKIH07CiAKK3N0YXRpYyB2b2lkIHBvb2RsZV9wY21jaWFfaW5pdCh2b2lkKQoreworCS8qIFNldHVwIGRlZmF1bHQgc3RhdGUgb2YgR1BJTyBvdXRwdXRzCisJICAgYmVmb3JlIHdlIGVuYWJsZSB0aGVtIGFzIG91dHB1dHMuICovCisJR1BTUihHUElPNDhfblBPRSkgPSBHUElPX2JpdChHUElPNDhfblBPRSkgfAorCQlHUElPX2JpdChHUElPNDlfblBXRSkgfCBHUElPX2JpdChHUElPNTBfblBJT1IpIHwKKwkJR1BJT19iaXQoR1BJTzUxX25QSU9XKSB8IEdQSU9fYml0KEdQSU81Ml9uUENFXzEpIHwKKwkJR1BJT19iaXQoR1BJTzUzX25QQ0VfMik7CisKKwlweGFfZ3Bpb19tb2RlKEdQSU80OF9uUE9FX01EKTsKKwlweGFfZ3Bpb19tb2RlKEdQSU80OV9uUFdFX01EKTsKKwlweGFfZ3Bpb19tb2RlKEdQSU81MF9uUElPUl9NRCk7CisJcHhhX2dwaW9fbW9kZShHUElPNTFfblBJT1dfTUQpOworCXB4YV9ncGlvX21vZGUoR1BJTzU1X25QUkVHX01EKTsKKwlweGFfZ3Bpb19tb2RlKEdQSU81Nl9uUFdBSVRfTUQpOworCXB4YV9ncGlvX21vZGUoR1BJTzU3X25JT0lTMTZfTUQpOworCXB4YV9ncGlvX21vZGUoR1BJTzUyX25QQ0VfMV9NRCk7CisJcHhhX2dwaW9fbW9kZShHUElPNTNfblBDRV8yX01EKTsKKwlweGFfZ3Bpb19tb2RlKEdQSU81NF9wU0tUU0VMX01EKTsKK30KKwogc3RhdGljIHN0cnVjdCBzY29vcF9wY21jaWFfZGV2IHBvb2RsZV9wY21jaWFfc2Nvb3BbXSA9IHsKIHsKIAkuZGV2ICAgICAgICA9ICZwb29kbGVfc2Nvb3BfZGV2aWNlLmRldiwKQEAgLTc0LDYgKzk1LDE0IEBACiB9LAogfTsKIAorc3RhdGljIHN0cnVjdCBzY29vcF9wY21jaWFfY29uZmlnIHBvb2RsZV9wY21jaWFfY29uZmlnID0geworCS5kZXZzICAgICAgICAgPSAmcG9vZGxlX3BjbWNpYV9zY29vcFswXSwKKwkubnVtX2RldnMgICAgID0gMSwKKwkucGNtY2lhX2luaXQgID0gcG9vZGxlX3BjbWNpYV9pbml0LAorfTsKKworRVhQT1JUX1NZTUJPTChwb29kbGVfc2Nvb3BfZGV2aWNlKTsKKwogCiAvKiBMb0NvTW8gZGV2aWNlICovCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGxvY29tb19yZXNvdXJjZXNbXSA9IHsKQEAgLTI2OCw4ICsyOTcsNyBAQAogCXB4YV9zZXRfbWNpX2luZm8oJnBvb2RsZV9tY2lfcGxhdGZvcm1fZGF0YSk7CiAJcHhhX3NldF9maWNwX2luZm8oJnBvb2RsZV9maWNwX3BsYXRmb3JtX2RhdGEpOwogCi0Jc2Nvb3BfbnVtID0gMTsKLQlzY29vcF9kZXZzID0gJnBvb2RsZV9wY21jaWFfc2Nvb3BbMF07CisJcGxhdGZvcm1fc2Nvb3BfY29uZmlnID0gJnBvb2RsZV9wY21jaWFfY29uZmlnOwogCiAJcmV0ID0gcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7CiAJaWYgKHJldCkgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvc2hhcnBzbC5oIGIvYXJjaC9hcm0vbWFjaC1weGEvc2hhcnBzbC5oCmluZGV4IDM5NzdhNzcuLjQ4NzljMGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3NoYXJwc2wuaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9zaGFycHNsLmgKQEAgLTMyLDMgKzMyLDkwIEBACiB2b2lkIHNwaXR6X3B1dF9oc3luYyh2b2lkKTsKIHZvaWQgY29yZ2lfd2FpdF9oc3luYyh2b2lkKTsKIHZvaWQgc3BpdHpfd2FpdF9oc3luYyh2b2lkKTsKKworLyoKKyAqIFNoYXJwU0wgQmF0dGVyeS9QTSBEcml2ZXIKKyAqLworCitzdHJ1Y3Qgc2hhcnBzbF9jaGFyZ2VyX21hY2hpbmZvIHsKKwl2b2lkICgqaW5pdCkodm9pZCk7CisJaW50IGdwaW9fYWNpbjsKKwlpbnQgZ3Bpb19iYXRmdWxsOworCWludCBncGlvX2JhdGxvY2s7CisJaW50IGdwaW9fZmF0YWw7CisJaW50ICgqc3RhdHVzX2FjaW4pKHZvaWQpOworCXZvaWQgKCpkaXNjaGFyZ2UpKGludCk7CisJdm9pZCAoKmRpc2NoYXJnZTEpKGludCk7CisJdm9pZCAoKmNoYXJnZSkoaW50KTsKKwl2b2lkICgqY2hhcmdlbGVkKShpbnQpOworCXZvaWQgKCptZWFzdXJlX3RlbXApKGludCk7CisJdm9pZCAoKnByZXN1c3BlbmQpKHZvaWQpOworCXZvaWQgKCpwb3N0c3VzcGVuZCkodm9pZCk7CisJdW5zaWduZWQgbG9uZyAoKmNoYXJnZXJfd2FrZXVwKSh2b2lkKTsKKwlpbnQgKCpzaG91bGRfd2FrZXVwKSh1bnNpZ25lZCBpbnQgcmVzdW1lX29uX2FsYXJtKTsKKwlpbnQgYmF0X2xldmVsczsKKwlzdHJ1Y3QgYmF0dGVyeV90aHJlc2ggKmJhdF9sZXZlbHNfbm9hYzsKKwlzdHJ1Y3QgYmF0dGVyeV90aHJlc2ggKmJhdF9sZXZlbHNfYWNpbjsKKwlpbnQgc3RhdHVzX2hpZ2hfYWNpbjsKKwlpbnQgc3RhdHVzX2xvd19hY2luOworCWludCBzdGF0dXNfaGlnaF9ub2FjOworCWludCBzdGF0dXNfbG93X25vYWM7Cit9OworCitzdHJ1Y3QgYmF0dGVyeV90aHJlc2ggeworCWludCB2b2x0YWdlOworCWludCBwZXJjZW50YWdlOworfTsKKworc3RydWN0IGJhdHRlcnlfc3RhdCB7CisJaW50IGFjX3N0YXR1czsgICAgICAgICAvKiBBUE0gQUMgUHJlc2VudC9Ob3QgUHJlc2VudCAqLworCWludCBtYWluYmF0X3N0YXR1czsgICAgLyogQVBNIE1haW4gQmF0dGVyeSBTdGF0dXMgKi8KKwlpbnQgbWFpbmJhdF9wZXJjZW50OyAgIC8qIE1haW4gQmF0dGVyeSBQZXJjZW50YWdlIENoYXJnZSAqLworCWludCBtYWluYmF0X3ZvbHRhZ2U7ICAgLyogTWFpbiBCYXR0ZXJ5IFZvbHRhZ2UgKi8KK307CisKK3N0cnVjdCBzaGFycHNsX3BtX3N0YXR1cyB7CisJc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCB0aW1lcl9saXN0IGFjX3RpbWVyOworCXN0cnVjdCB0aW1lcl9saXN0IGNocmdfZnVsbF90aW1lcjsKKworCWludCBjaGFyZ2VfbW9kZTsKKyNkZWZpbmUgQ0hSR19FUlJPUiAgICAoLTEpCisjZGVmaW5lIENIUkdfT0ZGICAgICAgKDApCisjZGVmaW5lIENIUkdfT04gICAgICAgKDEpCisjZGVmaW5lIENIUkdfRE9ORSAgICAgKDIpCisKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CisjZGVmaW5lIFNIQVJQU0xfU1VTUEVOREVEICAgICAgICgxIDw8IDApICAvKiBEZXZpY2UgaXMgU3VzcGVuZGVkICovCisjZGVmaW5lIFNIQVJQU0xfQUxBUk1fQUNUSVZFICAgICgxIDw8IDEpICAvKiBBbGFybSBpcyBmb3IgY2hhcmdpbmcgZXZlbnQgKG5vdCB1c2VyKSAqLworI2RlZmluZSBTSEFSUFNMX0JMX0xJTUlUICAgICAgICAoMSA8PCAyKSAgLyogQmFja2xpZ2h0IEludGVuc2l0eSBMaW1pdGVkICovCisjZGVmaW5lIFNIQVJQU0xfQVBNX1FVRVVFRCAgICAgICgxIDw8IDMpICAvKiBBUE0gRXZlbnQgUXVldWVkICovCisjZGVmaW5lIFNIQVJQU0xfRE9fT0ZGTElORV9DSFJHICgxIDw8IDQpICAvKiBUcmlnZ2VyIHRoZSBvZmZsaW5lIGNoYXJnZXIgKi8KKworCWludCBmdWxsX2NvdW50OworCXVuc2lnbmVkIGxvbmcgY2hhcmdlX3N0YXJ0X3RpbWU7CisJc3RydWN0IHNoYXJwc2xfY2hhcmdlcl9tYWNoaW5mbyAqbWFjaGluZm87CisJc3RydWN0IGJhdHRlcnlfc3RhdCBiYXR0c3RhdDsKK307CisKK2V4dGVybiBzdHJ1Y3Qgc2hhcnBzbF9wbV9zdGF0dXMgc2hhcnBzbF9wbTsKK2V4dGVybiBzdHJ1Y3QgYmF0dGVyeV90aHJlc2ggc3BpdHpfYmF0dGVyeV9sZXZlbHNfYWNpbltdOworZXh0ZXJuIHN0cnVjdCBiYXR0ZXJ5X3RocmVzaCBzcGl0el9iYXR0ZXJ5X2xldmVsc19ub2FjW107CisKKyNkZWZpbmUgUkVBRF9HUElPX0JJVCh4KSAgICAoR1BMUih4KSAmIEdQSU9fYml0KHgpKQorCisjZGVmaW5lIFNIQVJQU0xfTEVEX0VSUk9SICAyCisjZGVmaW5lIFNIQVJQU0xfTEVEX09OICAgICAxCisjZGVmaW5lIFNIQVJQU0xfTEVEX09GRiAgICAwCisKKyNkZWZpbmUgQ0hBUkdFX09OKCkgICAgICAgICBzaGFycHNsX3BtLm1hY2hpbmZvLT5jaGFyZ2UoMSkKKyNkZWZpbmUgQ0hBUkdFX09GRigpICAgICAgICBzaGFycHNsX3BtLm1hY2hpbmZvLT5jaGFyZ2UoMCkKKyNkZWZpbmUgQ0hBUkdFX0xFRF9PTigpICAgICBzaGFycHNsX3BtLm1hY2hpbmZvLT5jaGFyZ2VsZWQoU0hBUlBTTF9MRURfT04pCisjZGVmaW5lIENIQVJHRV9MRURfT0ZGKCkgICAgc2hhcnBzbF9wbS5tYWNoaW5mby0+Y2hhcmdlbGVkKFNIQVJQU0xfTEVEX09GRikKKyNkZWZpbmUgQ0hBUkdFX0xFRF9FUlIoKSAgICBzaGFycHNsX3BtLm1hY2hpbmZvLT5jaGFyZ2VsZWQoU0hBUlBTTF9MRURfRVJST1IpCisjZGVmaW5lIERJU0NIQVJHRV9PTigpICAgICAgc2hhcnBzbF9wbS5tYWNoaW5mby0+ZGlzY2hhcmdlKDEpCisjZGVmaW5lIERJU0NIQVJHRV9PRkYoKSAgICAgc2hhcnBzbF9wbS5tYWNoaW5mby0+ZGlzY2hhcmdlKDApCisjZGVmaW5lIFNUQVRVU19BQ19JTiAgICAgICAgc2hhcnBzbF9wbS5tYWNoaW5mby0+c3RhdHVzX2FjaW4oKQorI2RlZmluZSBTVEFUVVNfQkFUVF9MT0NLRUQgIFJFQURfR1BJT19CSVQoc2hhcnBzbF9wbS5tYWNoaW5mby0+Z3Bpb19iYXRsb2NrKQorI2RlZmluZSBTVEFUVVNfQ0hSR19GVUxMICAgIFJFQURfR1BJT19CSVQoc2hhcnBzbF9wbS5tYWNoaW5mby0+Z3Bpb19iYXRmdWxsKQorI2RlZmluZSBTVEFUVVNfRkFUQUwgICAgICAgIFJFQURfR1BJT19CSVQoc2hhcnBzbF9wbS5tYWNoaW5mby0+Z3Bpb19mYXRhbCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3NoYXJwc2xfcG0uYyBiL2FyY2gvYXJtL21hY2gtcHhhL3NoYXJwc2xfcG0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzllODcxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvc2hhcnBzbF9wbS5jCkBAIC0wLDAgKzEsOTkyIEBACisvKgorICogQmF0dGVyeSBhbmQgUG93ZXIgTWFuYWdlbWVudCBjb2RlIGZvciB0aGUgU2hhcnAgU0wtQzd4eCBhbmQgU0wtQ3h4MDAKKyAqIHNlcmllcyBvZiBQREFzCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDUgUmljaGFyZCBQdXJkaWUKKyAqCisgKiBCYXNlZCBvbiBjb2RlIHdyaXR0ZW4gYnkgU2hhcnAgZm9yIDIuNCBrZXJuZWxzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI3VuZGVmIERFQlVHCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9hcG1fYmlvcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvc2Nvb3AuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vYXBtLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9wbS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3B4YS1yZWdzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvc2hhcnBzbC5oPgorI2luY2x1ZGUgInNoYXJwc2wuaCIKKworLyoKKyAqIENvbnN0YW50cworICovCisjZGVmaW5lIFNIQVJQU0xfQ0hBUkdFX09OX1RJTUVfSU5URVJWQUwgICAgICAgIChtc2Vjc190b19qaWZmaWVzKDEqNjAqMTAwMCkpICAvKiAxIG1pbiAqLworI2RlZmluZSBTSEFSUFNMX0NIQVJHRV9GSU5JU0hfVElNRSAgICAgICAgICAgICAobXNlY3NfdG9famlmZmllcygxMCo2MCoxMDAwKSkgLyogMTAgbWluICovCisjZGVmaW5lIFNIQVJQU0xfQkFUQ0hLX1RJTUUgICAgICAgICAgICAgICAgICAgIChtc2Vjc190b19qaWZmaWVzKDE1KjEwMDApKSAgICAvKiAxNSBzZWMgKi8KKyNkZWZpbmUgU0hBUlBTTF9CQVRDSEtfVElNRV9TVVNQRU5EICAgICAgICAgICAgKDYwKjEwKSAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEwIG1pbiAqLworI2RlZmluZSBTSEFSUFNMX1dBSVRfQ09fVElNRSAgICAgICAgICAgICAgICAgICAxNSAgLyogMTUgc2VjICovCisjZGVmaW5lIFNIQVJQU0xfV0FJVF9ESVNDSEFSR0VfT04gICAgICAgICAgICAgIDEwMCAvKiAxMDAgbXNlYyAqLworI2RlZmluZSBTSEFSUFNMX0NIRUNLX0JBVFRFUllfV0FJVF9USU1FX1RFTVAgICAxMCAgLyogMTAgbXNlYyAqLworI2RlZmluZSBTSEFSUFNMX0NIRUNLX0JBVFRFUllfV0FJVF9USU1FX1ZPTFQgICAxMCAgLyogMTAgbXNlYyAqLworI2RlZmluZSBTSEFSUFNMX0NIRUNLX0JBVFRFUllfV0FJVF9USU1FX0pLVkFEICAxMCAgLyogMTAgbXNlYyAqLworI2RlZmluZSBTSEFSUFNMX0NIQVJHRV9XQUlUX1RJTUUgICAgICAgICAgICAgICAxNSAgLyogMTUgbXNlYyAqLworI2RlZmluZSBTSEFSUFNMX0NIQVJHRV9DT19DSEVDS19USU1FICAgICAgICAgICA1ICAgLyogNSBtc2VjICovCisjZGVmaW5lIFNIQVJQU0xfQ0hBUkdFX1JFVFJZX0NOVCAgICAgICAgICAgICAgIDEgICAvKiBlcXYuIDEwIG1pbiAqLworCisjZGVmaW5lIFNIQVJQU0xfQ0hBUkdFX09OX1ZPTFQgICAgICAgICAweDk5ICAvKiAyLjlWICovCisjZGVmaW5lIFNIQVJQU0xfQ0hBUkdFX09OX1RFTVAgICAgICAgICAweGUwICAvKiAyLjlWICovCisjZGVmaW5lIFNIQVJQU0xfQ0hBUkdFX09OX0pLVkFEX0hJR0ggICAweDliICAvKiA2ViAqLworI2RlZmluZSBTSEFSUFNMX0NIQVJHRV9PTl9KS1ZBRF9MT1cgICAgMHgzNCAgLyogMlYgKi8KKyNkZWZpbmUgU0hBUlBTTF9GQVRBTF9BQ0lOX1ZPTFQgICAgICAgIDE4MiAgIC8qIDMuNDVWICovCisjZGVmaW5lIFNIQVJQU0xfRkFUQUxfTk9BQ0lOX1ZPTFQgICAgICAxNzAgICAvKiAzLjQwViAqLworCitzdHJ1Y3QgYmF0dGVyeV90aHJlc2ggc3BpdHpfYmF0dGVyeV9sZXZlbHNfYWNpbltdID0geworCXsgMjEzLCAxMDB9LAorCXsgMjEyLCAgOTh9LAorCXsgMjExLCAgOTV9LAorCXsgMjEwLCAgOTN9LAorCXsgMjA5LCAgOTB9LAorCXsgMjA4LCAgODh9LAorCXsgMjA3LCAgODV9LAorCXsgMjA2LCAgODN9LAorCXsgMjA1LCAgODB9LAorCXsgMjA0LCAgNzh9LAorCXsgMjAzLCAgNzV9LAorCXsgMjAyLCAgNzN9LAorCXsgMjAxLCAgNzB9LAorCXsgMjAwLCAgNjh9LAorCXsgMTk5LCAgNjV9LAorCXsgMTk4LCAgNjN9LAorCXsgMTk3LCAgNjB9LAorCXsgMTk2LCAgNTh9LAorCXsgMTk1LCAgNTV9LAorCXsgMTk0LCAgNTN9LAorCXsgMTkzLCAgNTB9LAorCXsgMTkyLCAgNDh9LAorCXsgMTkyLCAgNDV9LAorCXsgMTkxLCAgNDN9LAorCXsgMTkxLCAgNDB9LAorCXsgMTkwLCAgMzh9LAorCXsgMTkwLCAgMzV9LAorCXsgMTg5LCAgMzN9LAorCXsgMTg4LCAgMzB9LAorCXsgMTg3LCAgMjh9LAorCXsgMTg2LCAgMjV9LAorCXsgMTg1LCAgMjN9LAorCXsgMTg0LCAgMjB9LAorCXsgMTgzLCAgMTh9LAorCXsgMTgyLCAgMTV9LAorCXsgMTgxLCAgMTN9LAorCXsgMTgwLCAgMTB9LAorCXsgMTc5LCAgIDh9LAorCXsgMTc4LCAgIDV9LAorCXsgICAwLCAgIDB9LAorfTsKKworc3RydWN0IGJhdHRlcnlfdGhyZXNoICBzcGl0el9iYXR0ZXJ5X2xldmVsc19ub2FjW10gPSB7CisJeyAyMTMsIDEwMH0sCisJeyAyMTIsICA5OH0sCisJeyAyMTEsICA5NX0sCisJeyAyMTAsICA5M30sCisJeyAyMDksICA5MH0sCisJeyAyMDgsICA4OH0sCisJeyAyMDcsICA4NX0sCisJeyAyMDYsICA4M30sCisJeyAyMDUsICA4MH0sCisJeyAyMDQsICA3OH0sCisJeyAyMDMsICA3NX0sCisJeyAyMDIsICA3M30sCisJeyAyMDEsICA3MH0sCisJeyAyMDAsICA2OH0sCisJeyAxOTksICA2NX0sCisJeyAxOTgsICA2M30sCisJeyAxOTcsICA2MH0sCisJeyAxOTYsICA1OH0sCisJeyAxOTUsICA1NX0sCisJeyAxOTQsICA1M30sCisJeyAxOTMsICA1MH0sCisJeyAxOTIsICA0OH0sCisJeyAxOTEsICA0NX0sCisJeyAxOTAsICA0M30sCisJeyAxODksICA0MH0sCisJeyAxODgsICAzOH0sCisJeyAxODcsICAzNX0sCisJeyAxODYsICAzM30sCisJeyAxODUsICAzMH0sCisJeyAxODQsICAyOH0sCisJeyAxODMsICAyNX0sCisJeyAxODIsICAyM30sCisJeyAxODEsICAyMH0sCisJeyAxODAsICAxOH0sCisJeyAxNzksICAxNX0sCisJeyAxNzgsICAxM30sCisJeyAxNzcsICAxMH0sCisJeyAxNzYsICAgOH0sCisJeyAxNzUsICAgNX0sCisJeyAgIDAsICAgMH0sCit9OworCisvKiBNQVgxMTExIENvbW1hbmRzICovCisjZGVmaW5lIE1BWENUUkxfUEQwICAgICAgMXUgPDwgMAorI2RlZmluZSBNQVhDVFJMX1BEMSAgICAgIDF1IDw8IDEKKyNkZWZpbmUgTUFYQ1RSTF9TR0wgICAgICAxdSA8PCAyCisjZGVmaW5lIE1BWENUUkxfVU5JICAgICAgMXUgPDwgMworI2RlZmluZSBNQVhDVFJMX1NFTF9TSCAgIDQKKyNkZWZpbmUgTUFYQ1RSTF9TVFIgICAgICAxdSA8PCA3CisKKy8qIE1BWDExMTEgQ2hhbm5lbCBEZWZpbml0aW9ucyAqLworI2RlZmluZSBCQVRUX0FEICAgIDR1CisjZGVmaW5lIEJBVFRfVEhNICAgMnUKKyNkZWZpbmUgSktfVkFEICAgICA2dQorCisKKy8qCisgKiBQcm90b3R5cGVzCisgKi8KK3N0YXRpYyBpbnQgc2hhcnBzbF9yZWFkX01haW5CYXR0ZXJ5KHZvaWQpOworc3RhdGljIGludCBzaGFycHNsX29mZl9jaGFyZ2VfYmF0dGVyeSh2b2lkKTsKK3N0YXRpYyBpbnQgc2hhcnBzbF9jaGVja19iYXR0ZXJ5KGludCBtb2RlKTsKK3N0YXRpYyBpbnQgc2hhcnBzbF9hY19jaGVjayh2b2lkKTsKK3N0YXRpYyBpbnQgc2hhcnBzbF9mYXRhbF9jaGVjayh2b2lkKTsKK3N0YXRpYyBpbnQgc2hhcnBzbF9hdmVyYWdlX3ZhbHVlKGludCBhZCk7CitzdGF0aWMgdm9pZCBzaGFycHNsX2F2ZXJhZ2VfY2xlYXIodm9pZCk7CitzdGF0aWMgdm9pZCBzaGFycHNsX2NoYXJnZV90b2dnbGUodm9pZCAqcHJpdmF0ZV8pOworc3RhdGljIHZvaWQgc2hhcnBzbF9iYXR0ZXJ5X3RocmVhZCh2b2lkICpwcml2YXRlXyk7CisKKworLyoKKyAqIFZhcmlhYmxlcworICovCitzdHJ1Y3Qgc2hhcnBzbF9wbV9zdGF0dXMgc2hhcnBzbF9wbTsKK0RFQ0xBUkVfV09SSyh0b2dnbGVfY2hhcmdlciwgc2hhcnBzbF9jaGFyZ2VfdG9nZ2xlLCBOVUxMKTsKK0RFQ0xBUkVfV09SSyhzaGFycHNsX2JhdCwgc2hhcnBzbF9iYXR0ZXJ5X3RocmVhZCwgTlVMTCk7CisKKworc3RhdGljIGludCBnZXRfcGVyY2VudGFnZShpbnQgdm9sdGFnZSkKK3sKKwlpbnQgaSA9IHNoYXJwc2xfcG0ubWFjaGluZm8tPmJhdF9sZXZlbHMgLSAxOworCXN0cnVjdCBiYXR0ZXJ5X3RocmVzaCAqdGhyZXNoOworCisJaWYgKHNoYXJwc2xfcG0uY2hhcmdlX21vZGUgPT0gQ0hSR19PTikKKwkJdGhyZXNoPXNoYXJwc2xfcG0ubWFjaGluZm8tPmJhdF9sZXZlbHNfYWNpbjsKKwllbHNlCisJCXRocmVzaD1zaGFycHNsX3BtLm1hY2hpbmZvLT5iYXRfbGV2ZWxzX25vYWM7CisKKwl3aGlsZSAoaSA+IDAgJiYgKHZvbHRhZ2UgPiB0aHJlc2hbaV0udm9sdGFnZSkpCisJCWktLTsKKworCXJldHVybiB0aHJlc2hbaV0ucGVyY2VudGFnZTsKK30KKworc3RhdGljIGludCBnZXRfYXBtX3N0YXR1cyhpbnQgdm9sdGFnZSkKK3sKKwlpbnQgbG93X3RocmVzaCwgaGlnaF90aHJlc2g7CisKKwlpZiAoc2hhcnBzbF9wbS5jaGFyZ2VfbW9kZSA9PSBDSFJHX09OKSB7CisJCWhpZ2hfdGhyZXNoID0gc2hhcnBzbF9wbS5tYWNoaW5mby0+c3RhdHVzX2hpZ2hfYWNpbjsKKwkJbG93X3RocmVzaCA9IHNoYXJwc2xfcG0ubWFjaGluZm8tPnN0YXR1c19sb3dfYWNpbjsKKwl9IGVsc2UgeworCQloaWdoX3RocmVzaCA9IHNoYXJwc2xfcG0ubWFjaGluZm8tPnN0YXR1c19oaWdoX25vYWM7CisJCWxvd190aHJlc2ggPSBzaGFycHNsX3BtLm1hY2hpbmZvLT5zdGF0dXNfbG93X25vYWM7CisJfQorCisJaWYgKHZvbHRhZ2UgPj0gaGlnaF90aHJlc2gpCisJCXJldHVybiBBUE1fQkFUVEVSWV9TVEFUVVNfSElHSDsKKwlpZiAodm9sdGFnZSA+PSBsb3dfdGhyZXNoKQorCQlyZXR1cm4gQVBNX0JBVFRFUllfU1RBVFVTX0xPVzsKKwlyZXR1cm4gQVBNX0JBVFRFUllfU1RBVFVTX0NSSVRJQ0FMOworfQorCit2b2lkIHNoYXJwc2xfYmF0dGVyeV9raWNrKHZvaWQpCit7CisJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZzaGFycHNsX2JhdCwgbXNlY3NfdG9famlmZmllcygxMjUpKTsKK30KK0VYUE9SVF9TWU1CT0woc2hhcnBzbF9iYXR0ZXJ5X2tpY2spOworCisKK3N0YXRpYyB2b2lkIHNoYXJwc2xfYmF0dGVyeV90aHJlYWQodm9pZCAqcHJpdmF0ZV8pCit7CisJaW50IHZvbHRhZ2UsIHBlcmNlbnQsIGFwbV9zdGF0dXMsIGkgPSAwOworCisJaWYgKCFzaGFycHNsX3BtLm1hY2hpbmZvKQorCQlyZXR1cm47CisKKwlzaGFycHNsX3BtLmJhdHRzdGF0LmFjX3N0YXR1cyA9ICghKFNUQVRVU19BQ19JTikgPyBBUE1fQUNfT0ZGTElORSA6IEFQTV9BQ19PTkxJTkUpOworCisJLyogQ29yZ2kgY2Fubm90IGNvbmZpcm0gd2hlbiBiYXR0ZXJ5IGZ1bGx5IGNoYXJnZWQgc28gcGVyaW9kaWNhbGx5IGtpY2shICovCisJaWYgKG1hY2hpbmVfaXNfY29yZ2koKSAmJiAoc2hhcnBzbF9wbS5jaGFyZ2VfbW9kZSA9PSBDSFJHX09OKQorCQkJJiYgdGltZV9hZnRlcihqaWZmaWVzLCBzaGFycHNsX3BtLmNoYXJnZV9zdGFydF90aW1lICsgIFNIQVJQU0xfQ0hBUkdFX09OX1RJTUVfSU5URVJWQUwpKQorCQlzY2hlZHVsZV93b3JrKCZ0b2dnbGVfY2hhcmdlcik7CisKKwl3aGlsZSgxKSB7CisJCXZvbHRhZ2UgPSBzaGFycHNsX3JlYWRfTWFpbkJhdHRlcnkoKTsKKwkJaWYgKHZvbHRhZ2UgPiAwKSBicmVhazsKKwkJaWYgKGkrKyA+IDUpIHsKKwkJCXZvbHRhZ2UgPSBzaGFycHNsX3BtLm1hY2hpbmZvLT5iYXRfbGV2ZWxzX25vYWNbMF0udm9sdGFnZTsKKwkJCWRldl93YXJuKHNoYXJwc2xfcG0uZGV2LCAiV2FybmluZzogQ2Fubm90IHJlYWQgbWFpbiBiYXR0ZXJ5IVxuIik7CisJCQlicmVhazsKKwkJfQorCX0KKworCXZvbHRhZ2UgPSBzaGFycHNsX2F2ZXJhZ2VfdmFsdWUodm9sdGFnZSk7CisJYXBtX3N0YXR1cyA9IGdldF9hcG1fc3RhdHVzKHZvbHRhZ2UpOworCXBlcmNlbnQgPSBnZXRfcGVyY2VudGFnZSh2b2x0YWdlKTsKKworCS8qIEF0IGxvdyBiYXR0ZXJ5IHZvbHRhZ2VzLCB0aGUgdm9sdGFnZSBoYXMgYSB0ZW5kZW5jeSB0byBzdGFydAorICAgICAgICAgICBjcmVlcGluZyBiYWNrIHVwIHNvIHdlIHRyeSB0byBhdm9pZCB0aGlzIGhlcmUgKi8KKwlpZiAoKHNoYXJwc2xfcG0uYmF0dHN0YXQuYWNfc3RhdHVzID09IEFQTV9BQ19PTkxJTkUpIHx8IChhcG1fc3RhdHVzID09IEFQTV9CQVRURVJZX1NUQVRVU19ISUdIKSB8fCAgcGVyY2VudCA8PSBzaGFycHNsX3BtLmJhdHRzdGF0Lm1haW5iYXRfcGVyY2VudCkgeworCQlzaGFycHNsX3BtLmJhdHRzdGF0Lm1haW5iYXRfdm9sdGFnZSA9IHZvbHRhZ2U7CisJCXNoYXJwc2xfcG0uYmF0dHN0YXQubWFpbmJhdF9zdGF0dXMgPSBhcG1fc3RhdHVzOworCQlzaGFycHNsX3BtLmJhdHRzdGF0Lm1haW5iYXRfcGVyY2VudCA9IHBlcmNlbnQ7CisJfQorCisJZGV2X2RiZyhzaGFycHNsX3BtLmRldiwgIkJhdHRlcnk6IHZvbHRhZ2U6ICVkLCBzdGF0dXM6ICVkLCBwZXJjZW50YWdlOiAlZCwgdGltZTogJWRcbiIsIHZvbHRhZ2UsCisJCQlzaGFycHNsX3BtLmJhdHRzdGF0Lm1haW5iYXRfc3RhdHVzLCBzaGFycHNsX3BtLmJhdHRzdGF0Lm1haW5iYXRfcGVyY2VudCwgamlmZmllcyk7CisKKwkvKiBJZiBiYXR0ZXJ5IGlzIGxvdy4gbGltaXQgYmFja2xpZ2h0IGludGVuc2l0eSB0byBzYXZlIHBvd2VyLiAqLworCWlmICgoc2hhcnBzbF9wbS5iYXR0c3RhdC5hY19zdGF0dXMgIT0gQVBNX0FDX09OTElORSkKKwkJCSYmICgoc2hhcnBzbF9wbS5iYXR0c3RhdC5tYWluYmF0X3N0YXR1cyA9PSBBUE1fQkFUVEVSWV9TVEFUVVNfTE9XKSB8fAorCQkJKHNoYXJwc2xfcG0uYmF0dHN0YXQubWFpbmJhdF9zdGF0dXMgPT0gQVBNX0JBVFRFUllfU1RBVFVTX0NSSVRJQ0FMKSkpIHsKKwkJaWYgKCEoc2hhcnBzbF9wbS5mbGFncyAmIFNIQVJQU0xfQkxfTElNSVQpKSB7CisJCQljb3JnaWJsX2xpbWl0X2ludGVuc2l0eSgxKTsKKwkJCXNoYXJwc2xfcG0uZmxhZ3MgfD0gU0hBUlBTTF9CTF9MSU1JVDsKKwkJfQorCX0gZWxzZSBpZiAoc2hhcnBzbF9wbS5mbGFncyAmIFNIQVJQU0xfQkxfTElNSVQpIHsKKwkJY29yZ2libF9saW1pdF9pbnRlbnNpdHkoMCk7CisJCXNoYXJwc2xfcG0uZmxhZ3MgJj0gflNIQVJQU0xfQkxfTElNSVQ7CisJfQorCisJLyogU3VzcGVuZCBpZiBjcml0aWNhbCBiYXR0ZXJ5IGxldmVsICovCisJaWYgKChzaGFycHNsX3BtLmJhdHRzdGF0LmFjX3N0YXR1cyAhPSBBUE1fQUNfT05MSU5FKQorCQkJJiYgKHNoYXJwc2xfcG0uYmF0dHN0YXQubWFpbmJhdF9zdGF0dXMgPT0gQVBNX0JBVFRFUllfU1RBVFVTX0NSSVRJQ0FMKQorCQkJJiYgIShzaGFycHNsX3BtLmZsYWdzICYgU0hBUlBTTF9BUE1fUVVFVUVEKSkgeworCQlzaGFycHNsX3BtLmZsYWdzIHw9IFNIQVJQU0xfQVBNX1FVRVVFRDsKKwkJZGV2X2VycihzaGFycHNsX3BtLmRldiwgIkZhdGFsIE9mZlxuIik7CisJCWFwbV9xdWV1ZV9ldmVudChBUE1fQ1JJVElDQUxfU1VTUEVORCk7CisJfQorCisJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZzaGFycHNsX2JhdCwgU0hBUlBTTF9CQVRDSEtfVElNRSk7Cit9CisKK3N0YXRpYyB2b2lkIHNoYXJwc2xfY2hhcmdlX29uKHZvaWQpCit7CisJZGV2X2RiZyhzaGFycHNsX3BtLmRldiwgIlR1cm5pbmcgQ2hhcmdlciBPblxuIik7CisKKwlzaGFycHNsX3BtLmZ1bGxfY291bnQgPSAwOworCXNoYXJwc2xfcG0uY2hhcmdlX21vZGUgPSBDSFJHX09OOworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmdG9nZ2xlX2NoYXJnZXIsIG1zZWNzX3RvX2ppZmZpZXMoMjUwKSk7CisJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZzaGFycHNsX2JhdCwgbXNlY3NfdG9famlmZmllcyg1MDApKTsKK30KKworc3RhdGljIHZvaWQgc2hhcnBzbF9jaGFyZ2Vfb2ZmKHZvaWQpCit7CisJZGV2X2RiZyhzaGFycHNsX3BtLmRldiwgIlR1cm5pbmcgQ2hhcmdlciBPZmZcbiIpOworCisJQ0hBUkdFX09GRigpOworCUNIQVJHRV9MRURfT0ZGKCk7CisJc2hhcnBzbF9wbS5jaGFyZ2VfbW9kZSA9IENIUkdfT0ZGOworCisJc2NoZWR1bGVfd29yaygmc2hhcnBzbF9iYXQpOworfQorCitzdGF0aWMgdm9pZCBzaGFycHNsX2NoYXJnZV9lcnJvcih2b2lkKQoreworCUNIQVJHRV9MRURfRVJSKCk7CisJQ0hBUkdFX09GRigpOworCXNoYXJwc2xfcG0uY2hhcmdlX21vZGUgPSBDSFJHX0VSUk9SOworfQorCitzdGF0aWMgdm9pZCBzaGFycHNsX2NoYXJnZV90b2dnbGUodm9pZCAqcHJpdmF0ZV8pCit7CisJZGV2X2RiZyhzaGFycHNsX3BtLmRldiwgIlRvb2dsaW5nIENoYXJnZXIgYXQgdGltZTogJWx4XG4iLCBqaWZmaWVzKTsKKworCWlmIChTVEFUVVNfQUNfSU4gPT0gMCkgeworCQlzaGFycHNsX2NoYXJnZV9vZmYoKTsKKwkJcmV0dXJuOworCX0gZWxzZSBpZiAoKHNoYXJwc2xfY2hlY2tfYmF0dGVyeSgxKSA8IDApIHx8IChzaGFycHNsX2FjX2NoZWNrKCkgPCAwKSkgeworCQlzaGFycHNsX2NoYXJnZV9lcnJvcigpOworCQlyZXR1cm47CisJfQorCisJQ0hBUkdFX0xFRF9PTigpOworCUNIQVJHRV9PRkYoKTsKKwltZGVsYXkoU0hBUlBTTF9DSEFSR0VfV0FJVF9USU1FKTsKKwlDSEFSR0VfT04oKTsKKworCXNoYXJwc2xfcG0uY2hhcmdlX3N0YXJ0X3RpbWUgPSBqaWZmaWVzOworfQorCitzdGF0aWMgdm9pZCBzaGFycHNsX2FjX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlpbnQgYWNpbiA9IFNUQVRVU19BQ19JTjsKKworCWRldl9kYmcoc2hhcnBzbF9wbS5kZXYsICJBQyBTdGF0dXM6ICVkXG4iLGFjaW4pOworCisJc2hhcnBzbF9hdmVyYWdlX2NsZWFyKCk7CisJaWYgKGFjaW4gJiYgKHNoYXJwc2xfcG0uY2hhcmdlX21vZGUgIT0gQ0hSR19PTikpCisJCXNoYXJwc2xfY2hhcmdlX29uKCk7CisJZWxzZSBpZiAoc2hhcnBzbF9wbS5jaGFyZ2VfbW9kZSA9PSBDSFJHX09OKQorCQlzaGFycHNsX2NoYXJnZV9vZmYoKTsKKworCXNjaGVkdWxlX3dvcmsoJnNoYXJwc2xfYmF0KTsKK30KKworCitzdGF0aWMgaXJxcmV0dXJuX3Qgc2hhcnBzbF9hY19pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqZnApCit7CisJLyogRGVsYXkgdGhlIGV2ZW50IHNsaWdodGx5IHRvIGRlYm91bmNlICovCisJLyogTXVzdCBiZSBhIHNtYWxsZXIgZGVsYXkgdGhhbiB0aGUgY2hyZ19mdWxsX2lzciBiZWxvdyAqLworCW1vZF90aW1lcigmc2hhcnBzbF9wbS5hY190aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMjUwKSk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIHNoYXJwc2xfY2hyZ19mdWxsX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlkZXZfZGJnKHNoYXJwc2xfcG0uZGV2LCAiQ2hhcmdlIEZ1bGwgYXQgdGltZTogJWx4XG4iLCBqaWZmaWVzKTsKKworCXNoYXJwc2xfcG0uZnVsbF9jb3VudCsrOworCisJaWYgKFNUQVRVU19BQ19JTiA9PSAwKSB7CisJCWRldl9kYmcoc2hhcnBzbF9wbS5kZXYsICJDaGFyZ2UgRnVsbDogQUMgcmVtb3ZlZCAtIHN0b3AgY2hhcmdpbmchXG4iKTsKKwkJaWYgKHNoYXJwc2xfcG0uY2hhcmdlX21vZGUgPT0gQ0hSR19PTikKKwkJCXNoYXJwc2xfY2hhcmdlX29mZigpOworCX0gZWxzZSBpZiAoc2hhcnBzbF9wbS5mdWxsX2NvdW50IDwgMikgeworCQlkZXZfZGJnKHNoYXJwc2xfcG0uZGV2LCAiQ2hhcmdlIEZ1bGw6IENvdW50IHRvbyBsb3dcbiIpOworCQlzY2hlZHVsZV93b3JrKCZ0b2dnbGVfY2hhcmdlcik7CisJfSBlbHNlIGlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHNoYXJwc2xfcG0uY2hhcmdlX3N0YXJ0X3RpbWUgKyBTSEFSUFNMX0NIQVJHRV9GSU5JU0hfVElNRSkpIHsKKwkJZGV2X2RiZyhzaGFycHNsX3BtLmRldiwgIkNoYXJnZSBGdWxsOiBJbnRlcnJ1cHQgZ2VuZXJhdGVkIHRvbyBzbG93bHkgLSByZXRyeS5cbiIpOworCQlzY2hlZHVsZV93b3JrKCZ0b2dnbGVfY2hhcmdlcik7CisJfSBlbHNlIHsKKwkJc2hhcnBzbF9jaGFyZ2Vfb2ZmKCk7CisJCXNoYXJwc2xfcG0uY2hhcmdlX21vZGUgPSBDSFJHX0RPTkU7CisJCWRldl9kYmcoc2hhcnBzbF9wbS5kZXYsICJDaGFyZ2UgRnVsbDogQ2hhcmdpbmcgRmluaXNoZWRcbiIpOworCX0KK30KKworLyogQ2hhcmdpbmcgRmluaXNoZWQgSW50ZXJydXB0IChOb3QgcHJlc2VudCBvbiBDb3JnaSkgKi8KKy8qIENhbiB0cmlnZ2VyIGF0IHRoZSBzYW1lIHRpbWUgYXMgYW4gQUMgc3RhdXMgY2hhbmdlIHNvCisgICBkZWxheSB1bnRpbCBhZnRlciB0aGF0IGhhcyBiZWVuIHByb2Nlc3NlZCAqLworc3RhdGljIGlycXJldHVybl90IHNoYXJwc2xfY2hyZ19mdWxsX2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpmcCkKK3sKKwlpZiAoc2hhcnBzbF9wbS5mbGFncyAmIFNIQVJQU0xfU1VTUEVOREVEKQorCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisKKwkvKiBkZWxheSB1bnRpbCBhZnRlciBhbnkgYWMgaW50ZXJydXB0ICovCisJbW9kX3RpbWVyKCZzaGFycHNsX3BtLmNocmdfZnVsbF90aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNTAwKSk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBzaGFycHNsX2ZhdGFsX2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpmcCkKK3sKKwlpbnQgaXNfZmF0YWwgPSAwOworCisJaWYgKFNUQVRVU19CQVRUX0xPQ0tFRCA9PSAwKSB7CisJCWRldl9lcnIoc2hhcnBzbF9wbS5kZXYsICJCYXR0ZXJ5IG5vdyBVbmxvY2tlZCEgU3VzcGVuZGluZy5cbiIpOworCQlpc19mYXRhbCA9IDE7CisJfQorCisJaWYgKHNoYXJwc2xfcG0ubWFjaGluZm8tPmdwaW9fZmF0YWwgJiYgKFNUQVRVU19GQVRBTCA9PSAwKSkgeworCQlkZXZfZXJyKHNoYXJwc2xfcG0uZGV2LCAiRmF0YWwgQmF0dCBFcnJvciEgU3VzcGVuZGluZy5cbiIpOworCQlpc19mYXRhbCA9IDE7CisJfQorCisJaWYgKCEoc2hhcnBzbF9wbS5mbGFncyAmIFNIQVJQU0xfQVBNX1FVRVVFRCkgJiYgaXNfZmF0YWwpIHsKKwkJc2hhcnBzbF9wbS5mbGFncyB8PSBTSEFSUFNMX0FQTV9RVUVVRUQ7CisJCWFwbV9xdWV1ZV9ldmVudChBUE1fQ1JJVElDQUxfU1VTUEVORCk7CisJfQorCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKgorICogTWFpbnRhaW4gYW4gYXZlcmFnZSBvZiB0aGUgbGFzdCAxMCByZWFkaW5ncworICovCisjZGVmaW5lIFNIQVJQU0xfQ05WX1ZBTFVFX05VTSAgICAxMAorc3RhdGljIGludCBzaGFycHNsX2FkX2luZGV4OworCitzdGF0aWMgdm9pZCBzaGFycHNsX2F2ZXJhZ2VfY2xlYXIodm9pZCkKK3sKKwlzaGFycHNsX2FkX2luZGV4ID0gMDsKK30KKworc3RhdGljIGludCBzaGFycHNsX2F2ZXJhZ2VfdmFsdWUoaW50IGFkKQoreworCWludCBpLCBhZF92YWwgPSAwOworCXN0YXRpYyBpbnQgc2hhcnBzbF9hZFtTSEFSUFNMX0NOVl9WQUxVRV9OVU0rMV07CisKKwlpZiAoc2hhcnBzbF9wbS5iYXR0c3RhdC5tYWluYmF0X3N0YXR1cyAhPSBBUE1fQkFUVEVSWV9TVEFUVVNfSElHSCkgeworCQlzaGFycHNsX2FkX2luZGV4ID0gMDsKKwkJcmV0dXJuIGFkOworCX0KKworCXNoYXJwc2xfYWRbc2hhcnBzbF9hZF9pbmRleF0gPSBhZDsKKwlzaGFycHNsX2FkX2luZGV4Kys7CisJaWYgKHNoYXJwc2xfYWRfaW5kZXggPj0gU0hBUlBTTF9DTlZfVkFMVUVfTlVNKSB7CisJCWZvciAoaT0wOyBpIDwgKFNIQVJQU0xfQ05WX1ZBTFVFX05VTS0xKTsgaSsrKQorCQkJc2hhcnBzbF9hZFtpXSA9IHNoYXJwc2xfYWRbaSsxXTsKKwkJc2hhcnBzbF9hZF9pbmRleCA9IFNIQVJQU0xfQ05WX1ZBTFVFX05VTSAtIDE7CisJfQorCWZvciAoaT0wOyBpIDwgc2hhcnBzbF9hZF9pbmRleDsgaSsrKQorCQlhZF92YWwgKz0gc2hhcnBzbF9hZFtpXTsKKworCXJldHVybiAoYWRfdmFsIC8gc2hhcnBzbF9hZF9pbmRleCk7Cit9CisKKworLyoKKyAqIFJlYWQgTUFYMTExMSBBREMKKyAqLworc3RhdGljIGludCByZWFkX21heDExMTEoaW50IGNoYW5uZWwpCit7CisJcmV0dXJuIGNvcmdpX3NzcF9tYXgxMTExX2dldCgoY2hhbm5lbCA8PCBNQVhDVFJMX1NFTF9TSCkgfCBNQVhDVFJMX1BEMCB8IE1BWENUUkxfUEQxCisJCQl8IE1BWENUUkxfU0dMIHwgTUFYQ1RSTF9VTkkgfCBNQVhDVFJMX1NUUik7Cit9CisKK3N0YXRpYyBpbnQgc2hhcnBzbF9yZWFkX01haW5CYXR0ZXJ5KHZvaWQpCit7CisJcmV0dXJuIHJlYWRfbWF4MTExMShCQVRUX0FEKTsKK30KKworc3RhdGljIGludCBzaGFycHNsX3JlYWRfVGVtcCh2b2lkKQoreworCWludCB0ZW1wOworCisJc2hhcnBzbF9wbS5tYWNoaW5mby0+bWVhc3VyZV90ZW1wKDEpOworCisJbWRlbGF5KFNIQVJQU0xfQ0hFQ0tfQkFUVEVSWV9XQUlUX1RJTUVfVEVNUCk7CisJdGVtcCA9IHJlYWRfbWF4MTExMShCQVRUX1RITSk7CisKKwlzaGFycHNsX3BtLm1hY2hpbmZvLT5tZWFzdXJlX3RlbXAoMCk7CisKKwlyZXR1cm4gdGVtcDsKK30KKworc3RhdGljIGludCBzaGFycHNsX3JlYWRfamt2YWQodm9pZCkKK3sKKwlyZXR1cm4gcmVhZF9tYXgxMTExKEpLX1ZBRCk7Cit9CisKKy8qCisgKiBUYWtlIGFuIGFycmF5IG9mIDUgaW50ZWdlcnMsIHJlbW92ZSB0aGUgbWF4aW11bSBhbmQgbWluaW11bSB2YWx1ZXMKKyAqIGFuZCByZXR1cm4gdGhlIGF2ZXJhZ2UuCisgKi8KK3N0YXRpYyBpbnQgZ2V0X3NlbGVjdF92YWwoaW50ICp2YWwpCit7CisJaW50IGksIGosIGssIHRlbXAsIHN1bSA9IDA7CisKKwkvKiBGaW5kIE1BWCB2YWwgKi8KKwl0ZW1wID0gdmFsWzBdOworCWo9MDsKKwlmb3IgKGk9MTsgaTw1OyBpKyspIHsKKwkJaWYgKHRlbXAgPCB2YWxbaV0pIHsKKwkJCXRlbXAgPSB2YWxbaV07CisJCQlqID0gaTsKKwkJfQorCX0KKworCS8qIEZpbmQgTUlOIHZhbCAqLworCXRlbXAgPSB2YWxbNF07CisJaz00OworCWZvciAoaT0zOyBpPj0wOyBpLS0pIHsKKwkJaWYgKHRlbXAgPiB2YWxbaV0pIHsKKwkJCXRlbXAgPSB2YWxbaV07CisJCQlrID0gaTsKKwkJfQorCX0KKworCWZvciAoaT0wOyBpPDU7IGkrKykKKwkJaWYgKGkgIT0gaiAmJiBpICE9IGsgKQorCQkJc3VtICs9IHZhbFtpXTsKKworCWRldl9kYmcoc2hhcnBzbF9wbS5kZXYsICJBdmVyYWdlOiAlZCBmcm9tIHZhbHVlczogJWQsICVkLCAlZCwgJWQsICVkXG4iLCBzdW0vMywgdmFsWzBdLCB2YWxbMV0sIHZhbFsyXSwgdmFsWzNdLCB2YWxbNF0pOworCisJcmV0dXJuIChzdW0vMyk7Cit9CisKKy8qICBtb2RlIDAgLSBDaGVjayB0ZW1wZXJhdHVyZSBhbmQgdm9sdGFnZQorICogICAgICAgMSAtIENoZWNrIHRlbXBlcmF0dXJlIG9ubHkgKi8KK3N0YXRpYyBpbnQgc2hhcnBzbF9jaGVja19iYXR0ZXJ5KGludCBtb2RlKQoreworCWludCB2YWwsIGksIGJ1ZmZbNV07CisKKwkvKiBDaGVjayBiYXR0ZXJ5IHRlbXBlcmF0dXJlICovCisJZm9yIChpPTA7IGk8NTsgaSsrKSB7CisJCW1kZWxheShTSEFSUFNMX0NIRUNLX0JBVFRFUllfV0FJVF9USU1FX1RFTVApOworCQlidWZmW2ldID0gc2hhcnBzbF9yZWFkX1RlbXAoKTsKKwl9CisKKwl2YWwgPSBnZXRfc2VsZWN0X3ZhbChidWZmKTsKKworCWRldl9kYmcoc2hhcnBzbF9wbS5kZXYsICJUZW1wZXJhdHVyZTogJWRcbiIsIHZhbCk7CisJaWYgKHZhbCA+IFNIQVJQU0xfQ0hBUkdFX09OX1RFTVApCisJCXJldHVybiAtMTsKKwlpZiAobW9kZSA9PSAxKQorCQlyZXR1cm4gMDsKKworCS8qIGRpc2FibGUgY2hhcmdlLCBlbmFibGUgZGlzY2hhcmdlICovCisJQ0hBUkdFX09GRigpOworCURJU0NIQVJHRV9PTigpOworCW1kZWxheShTSEFSUFNMX1dBSVRfRElTQ0hBUkdFX09OKTsKKworCWlmIChzaGFycHNsX3BtLm1hY2hpbmZvLT5kaXNjaGFyZ2UxKQorCQlzaGFycHNsX3BtLm1hY2hpbmZvLT5kaXNjaGFyZ2UxKDEpOworCisJLyogQ2hlY2sgYmF0dGVyeSB2b2x0YWdlICovCisJZm9yIChpPTA7IGk8NTsgaSsrKSB7CisJCWJ1ZmZbaV0gPSBzaGFycHNsX3JlYWRfTWFpbkJhdHRlcnkoKTsKKwkJbWRlbGF5KFNIQVJQU0xfQ0hFQ0tfQkFUVEVSWV9XQUlUX1RJTUVfVk9MVCk7CisJfQorCisJaWYgKHNoYXJwc2xfcG0ubWFjaGluZm8tPmRpc2NoYXJnZTEpCisJCXNoYXJwc2xfcG0ubWFjaGluZm8tPmRpc2NoYXJnZTEoMCk7CisKKwlESVNDSEFSR0VfT0ZGKCk7CisKKwl2YWwgPSBnZXRfc2VsZWN0X3ZhbChidWZmKTsKKwlkZXZfZGJnKHNoYXJwc2xfcG0uZGV2LCAiQmF0dGVyeSBWb2x0YWdlOiAlZFxuIiwgdmFsKTsKKworCWlmICh2YWwgPCBTSEFSUFNMX0NIQVJHRV9PTl9WT0xUKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaGFycHNsX2FjX2NoZWNrKHZvaWQpCit7CisJaW50IHRlbXAsIGksIGJ1ZmZbNV07CisKKwlmb3IgKGk9MDsgaTw1OyBpKyspIHsKKwkJYnVmZltpXSA9IHNoYXJwc2xfcmVhZF9qa3ZhZCgpOworCQltZGVsYXkoU0hBUlBTTF9DSEVDS19CQVRURVJZX1dBSVRfVElNRV9KS1ZBRCk7CisJfQorCisJdGVtcCA9IGdldF9zZWxlY3RfdmFsKGJ1ZmYpOworCWRldl9kYmcoc2hhcnBzbF9wbS5kZXYsICJBQyBWb2x0YWdlOiAlZFxuIix0ZW1wKTsKKworCWlmICgodGVtcCA+IFNIQVJQU0xfQ0hBUkdFX09OX0pLVkFEX0hJR0gpIHx8ICh0ZW1wIDwgU0hBUlBTTF9DSEFSR0VfT05fSktWQURfTE9XKSkgeworCQlkZXZfZXJyKHNoYXJwc2xfcG0uZGV2LCAiRXJyb3I6IEFDIGNoZWNrIGZhaWxlZC5cbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgc2hhcnBzbF9wbV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXNoYXJwc2xfcG0uZmxhZ3MgfD0gU0hBUlBTTF9TVVNQRU5ERUQ7CisJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKworCWlmIChzaGFycHNsX3BtLmNoYXJnZV9tb2RlID09IENIUkdfT04pCisJCXNoYXJwc2xfcG0uZmxhZ3MgfD0gU0hBUlBTTF9ET19PRkZMSU5FX0NIUkc7CisJZWxzZQorCQlzaGFycHNsX3BtLmZsYWdzICY9IH5TSEFSUFNMX0RPX09GRkxJTkVfQ0hSRzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNoYXJwc2xfcG1fcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwkvKiBDbGVhciB0aGUgcmVzZXQgc291cmNlIGluZGljYXRvcnMgYXMgdGhleSBicmVhayB0aGUgYm9vdGxvYWRlciB1cG9uIHJlYm9vdCAqLworCVJDU1IgPSAweDBmOworCXNoYXJwc2xfYXZlcmFnZV9jbGVhcigpOworCXNoYXJwc2xfcG0uZmxhZ3MgJj0gflNIQVJQU0xfQVBNX1FVRVVFRDsKKwlzaGFycHNsX3BtLmZsYWdzICY9IH5TSEFSUFNMX1NVU1BFTkRFRDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjb3JnaV9nb3RvX3NsZWVwKHVuc2lnbmVkIGxvbmcgYWxhcm1fdGltZSwgdW5zaWduZWQgaW50IGFsYXJtX2VuYWJsZSwgc3VzcGVuZF9zdGF0ZV90IHN0YXRlKQoreworCWRldl9kYmcoc2hhcnBzbF9wbS5kZXYsICJUaW1lIGlzOiAlMDh4XG4iLFJDTlIpOworCisJZGV2X2RiZyhzaGFycHNsX3BtLmRldiwgIk9mZmxpbmUgQ2hhcmdlIEFjdGl2YXRlID0gJWRcbiIsc2hhcnBzbF9wbS5mbGFncyAmIFNIQVJQU0xfRE9fT0ZGTElORV9DSFJHKTsKKwkvKiBub3QgY2hhcmdpbmcgYW5kIEFDLUlOISAqLworCisJaWYgKChzaGFycHNsX3BtLmZsYWdzICYgU0hBUlBTTF9ET19PRkZMSU5FX0NIUkcpICYmIChTVEFUVVNfQUNfSU4gIT0gMCkpIHsKKwkJZGV2X2RiZyhzaGFycHNsX3BtLmRldiwgIkFjdGl2YXRpbmcgT2ZmbGluZSBDaGFyZ2VyLi4uXG4iKTsKKwkJc2hhcnBzbF9wbS5jaGFyZ2VfbW9kZSA9IENIUkdfT0ZGOworCQlzaGFycHNsX3BtLmZsYWdzICY9IH5TSEFSUFNMX0RPX09GRkxJTkVfQ0hSRzsKKwkJc2hhcnBzbF9vZmZfY2hhcmdlX2JhdHRlcnkoKTsKKwl9CisKKwlzaGFycHNsX3BtLm1hY2hpbmZvLT5wcmVzdXNwZW5kKCk7CisKKwlQRURSID0gMHhmZmZmZmZmZjsgLyogY2xlYXIgaXQgKi8KKworCXNoYXJwc2xfcG0uZmxhZ3MgJj0gflNIQVJQU0xfQUxBUk1fQUNUSVZFOworCWlmICgoc2hhcnBzbF9wbS5jaGFyZ2VfbW9kZSA9PSBDSFJHX09OKSAmJiAoKGFsYXJtX2VuYWJsZSAmJiAoKGFsYXJtX3RpbWUgLSBSQ05SKSA+IChTSEFSUFNMX0JBVENIS19USU1FX1NVU1BFTkQgKyAzMCkpKSB8fCAhYWxhcm1fZW5hYmxlKSkgeworCQlSVFNSICY9IFJUU1JfQUxFOworCQlSVEFSID0gUkNOUiArIFNIQVJQU0xfQkFUQ0hLX1RJTUVfU1VTUEVORDsKKwkJZGV2X2RiZyhzaGFycHNsX3BtLmRldiwgIkNoYXJnaW5nIGFsYXJtIGF0OiAlMDh4XG4iLFJUQVIpOworCQlzaGFycHNsX3BtLmZsYWdzIHw9IFNIQVJQU0xfQUxBUk1fQUNUSVZFOworCX0gZWxzZSBpZiAoYWxhcm1fZW5hYmxlKSB7CisJCVJUU1IgJj0gUlRTUl9BTEU7CisJCVJUQVIgPSBhbGFybV90aW1lOworCQlkZXZfZGJnKHNoYXJwc2xfcG0uZGV2LCAiVXNlciBhbGFybSBhdDogJTA4eFxuIixSVEFSKTsKKwl9IGVsc2UgeworCQlkZXZfZGJnKHNoYXJwc2xfcG0uZGV2LCAiTm8gYWxhcm1zIHNldC5cbiIpOworCX0KKworCXB4YV9wbV9lbnRlcihzdGF0ZSk7CisKKwlzaGFycHNsX3BtLm1hY2hpbmZvLT5wb3N0c3VzcGVuZCgpOworCisJZGV2X2RiZyhzaGFycHNsX3BtLmRldiwgIkNvcmdpIHdva2VuIHVwIGZyb20gc3VzcGVuZDogJTA4eFxuIixQRURSKTsKK30KKworc3RhdGljIGludCBjb3JnaV9lbnRlcl9zdXNwZW5kKHVuc2lnbmVkIGxvbmcgYWxhcm1fdGltZSwgdW5zaWduZWQgaW50IGFsYXJtX2VuYWJsZSwgc3VzcGVuZF9zdGF0ZV90IHN0YXRlKQoreworCWlmICghc2hhcnBzbF9wbS5tYWNoaW5mby0+c2hvdWxkX3dha2V1cCghKHNoYXJwc2xfcG0uZmxhZ3MgJiBTSEFSUFNMX0FMQVJNX0FDVElWRSkgJiYgYWxhcm1fZW5hYmxlKSApCisJeworCQlpZiAoIShzaGFycHNsX3BtLmZsYWdzICYgU0hBUlBTTF9BTEFSTV9BQ1RJVkUpKSB7CisJCQlkZXZfZGJnKHNoYXJwc2xfcG0uZGV2LCAiTm8gdXNlciB0cmlnZ2VyZWQgd2FrZXVwIGV2ZW50cyBhbmQgbm90IGNoYXJnaW5nLiBTdHJhbmdlLiBTdXNwZW5kLlxuIik7CisJCQljb3JnaV9nb3RvX3NsZWVwKGFsYXJtX3RpbWUsIGFsYXJtX2VuYWJsZSwgc3RhdGUpOworCQkJcmV0dXJuIDE7CisJCX0KKwkJaWYoc2hhcnBzbF9vZmZfY2hhcmdlX2JhdHRlcnkoKSkgeworCQkJZGV2X2RiZyhzaGFycHNsX3BtLmRldiwgIkNoYXJnaW5nLiBTdXNwZW5kLi4uXG4iKTsKKwkJCWNvcmdpX2dvdG9fc2xlZXAoYWxhcm1fdGltZSwgYWxhcm1fZW5hYmxlLCBzdGF0ZSk7CisJCQlyZXR1cm4gMTsKKwkJfQorCQlkZXZfZGJnKHNoYXJwc2xfcG0uZGV2LCAiVXNlciB0cmlnZ2VyZWQgd2FrZXVwIGluIG9mZmxpbmUgY2hhcmdlci5cbiIpOworCX0KKworCWlmICgoU1RBVFVTX0JBVFRfTE9DS0VEID09IDApIHx8IChzaGFycHNsX2ZhdGFsX2NoZWNrKCkgPCAwKSApCisJeworCQlkZXZfZXJyKHNoYXJwc2xfcG0uZGV2LCAiRmF0YWwgY29uZGl0aW9uLiBTdXNwZW5kLlxuIik7CisJCWNvcmdpX2dvdG9fc2xlZXAoYWxhcm1fdGltZSwgYWxhcm1fZW5hYmxlLCBzdGF0ZSk7CisJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNvcmdpX3B4YV9wbV9lbnRlcihzdXNwZW5kX3N0YXRlX3Qgc3RhdGUpCit7CisJdW5zaWduZWQgbG9uZyBhbGFybV90aW1lID0gUlRBUjsKKwl1bnNpZ25lZCBpbnQgYWxhcm1fc3RhdHVzID0gKChSVFNSICYgUlRTUl9BTEUpICE9IDApOworCisJZGV2X2RiZyhzaGFycHNsX3BtLmRldiwgIlNoYXJwU0wgc3VzcGVuZGluZyBmb3IgZmlyc3QgdGltZS5cbiIpOworCisJY29yZ2lfZ290b19zbGVlcChhbGFybV90aW1lLCBhbGFybV9zdGF0dXMsIHN0YXRlKTsKKworCXdoaWxlIChjb3JnaV9lbnRlcl9zdXNwZW5kKGFsYXJtX3RpbWUsYWxhcm1fc3RhdHVzLHN0YXRlKSkKKwkJe30KKworCWRldl9kYmcoc2hhcnBzbF9wbS5kZXYsICJTaGFycFNMIHJlc3VtaW5nLi4uXG4iKTsKKworCXJldHVybiAwOworfQorI2VuZGlmCisKKworLyoKKyAqIENoZWNrIGZvciBmYXRhbCBiYXR0ZXJ5IGVycm9ycworICogRmF0YWwgcmV0dXJucyAtMQorICovCitzdGF0aWMgaW50IHNoYXJwc2xfZmF0YWxfY2hlY2sodm9pZCkKK3sKKwlpbnQgYnVmZls1XSwgdGVtcCwgaSwgYWNpbjsKKworCWRldl9kYmcoc2hhcnBzbF9wbS5kZXYsICJzaGFycHNsX2ZhdGFsX2NoZWNrIGVudGVyZWRcbiIpOworCisJLyogQ2hlY2sgQUMtQWRhcHRlciAqLworCWFjaW4gPSBTVEFUVVNfQUNfSU47CisKKwlpZiAoYWNpbiAmJiAoc2hhcnBzbF9wbS5jaGFyZ2VfbW9kZSA9PSBDSFJHX09OKSkgeworCQlDSEFSR0VfT0ZGKCk7CisJCXVkZWxheSgxMDApOworCQlESVNDSEFSR0VfT04oKTsJLyogZW5hYmxlIGRpc2NoYXJnZSAqLworCQltZGVsYXkoU0hBUlBTTF9XQUlUX0RJU0NIQVJHRV9PTik7CisJfQorCisJaWYgKHNoYXJwc2xfcG0ubWFjaGluZm8tPmRpc2NoYXJnZTEpCisJCXNoYXJwc2xfcG0ubWFjaGluZm8tPmRpc2NoYXJnZTEoMSk7CisKKwkvKiBDaGVjayBiYXR0ZXJ5IDogY2hlY2sgaW5zZXJ0aW5nIGJhdHRlcnkgPyAqLworCWZvciAoaT0wOyBpPDU7IGkrKykgeworCQlidWZmW2ldID0gc2hhcnBzbF9yZWFkX01haW5CYXR0ZXJ5KCk7CisJCW1kZWxheShTSEFSUFNMX0NIRUNLX0JBVFRFUllfV0FJVF9USU1FX1ZPTFQpOworCX0KKworCWlmIChzaGFycHNsX3BtLm1hY2hpbmZvLT5kaXNjaGFyZ2UxKQorCQlzaGFycHNsX3BtLm1hY2hpbmZvLT5kaXNjaGFyZ2UxKDApOworCisJaWYgKGFjaW4gJiYgKHNoYXJwc2xfcG0uY2hhcmdlX21vZGUgPT0gQ0hSR19PTikpIHsKKwkJdWRlbGF5KDEwMCk7CisJCUNIQVJHRV9PTigpOworCQlESVNDSEFSR0VfT0ZGKCk7CisJfQorCisJdGVtcCA9IGdldF9zZWxlY3RfdmFsKGJ1ZmYpOworCWRldl9kYmcoc2hhcnBzbF9wbS5kZXYsICJzaGFycHNsX2ZhdGFsX2NoZWNrOiBhY2luOiAlZCwgZGlzY2hhcmdlIHZvbHRhZ2U6ICVkLCBubyBkaXNjaGFyZ2U6ICVkXG4iLCBhY2luLCB0ZW1wLCBzaGFycHNsX3JlYWRfTWFpbkJhdHRlcnkoKSk7CisKKwlpZiAoKGFjaW4gJiYgKHRlbXAgPCBTSEFSUFNMX0ZBVEFMX0FDSU5fVk9MVCkpIHx8CisJCQkoIWFjaW4gJiYgKHRlbXAgPCBTSEFSUFNMX0ZBVEFMX05PQUNJTl9WT0xUKSkpCisJCXJldHVybiAtMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaGFycHNsX29mZl9jaGFyZ2VfZXJyb3Iodm9pZCkKK3sKKwlkZXZfZXJyKHNoYXJwc2xfcG0uZGV2LCAiT2ZmbGluZSBDaGFyZ2VyOiBFcnJvciBvY2N1cmVkLlxuIik7CisJQ0hBUkdFX09GRigpOworCUNIQVJHRV9MRURfRVJSKCk7CisJc2hhcnBzbF9wbS5jaGFyZ2VfbW9kZSA9IENIUkdfRVJST1I7CisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBDaGFyZ2luZyBDb250cm9sIHdoaWxlIHN1c3BlbmRlZAorICogUmV0dXJuIDEgLSBnbyBzdHJhaWdodCB0byBzbGVlcAorICogUmV0dXJuIDAgLSBzbGVlcCBvciB3YWtldXAgZGVwZW5kaW5nIG9uIG90aGVyIGZhY3RvcnMKKyAqLworc3RhdGljIGludCBzaGFycHNsX29mZl9jaGFyZ2VfYmF0dGVyeSh2b2lkKQoreworCWludCB0aW1lOworCisJZGV2X2RiZyhzaGFycHNsX3BtLmRldiwgIkNoYXJnZSBNb2RlOiAlZFxuIiwgc2hhcnBzbF9wbS5jaGFyZ2VfbW9kZSk7CisKKwlpZiAoc2hhcnBzbF9wbS5jaGFyZ2VfbW9kZSA9PSBDSFJHX09GRikgeworCQlkZXZfZGJnKHNoYXJwc2xfcG0uZGV2LCAiT2ZmbGluZSBDaGFyZ2VyOiBTdGVwIDFcbiIpOworCisJCS8qIEFDIENoZWNrICovCisJCWlmICgoc2hhcnBzbF9hY19jaGVjaygpIDwgMCkgfHwgKHNoYXJwc2xfY2hlY2tfYmF0dGVyeSgxKSA8IDApKQorCQkJcmV0dXJuIHNoYXJwc2xfb2ZmX2NoYXJnZV9lcnJvcigpOworCisJCS8qIFN0YXJ0IENoYXJnaW5nICovCisJCUNIQVJHRV9MRURfT04oKTsKKwkJQ0hBUkdFX09GRigpOworCQltZGVsYXkoU0hBUlBTTF9DSEFSR0VfV0FJVF9USU1FKTsKKwkJQ0hBUkdFX09OKCk7CisKKwkJc2hhcnBzbF9wbS5jaGFyZ2VfbW9kZSA9IENIUkdfT047CisJCXNoYXJwc2xfcG0uZnVsbF9jb3VudCA9IDA7CisKKwkJcmV0dXJuIDE7CisJfSBlbHNlIGlmIChzaGFycHNsX3BtLmNoYXJnZV9tb2RlICE9IENIUkdfT04pIHsKKwkJcmV0dXJuIDE7CisJfQorCisJaWYgKHNoYXJwc2xfcG0uZnVsbF9jb3VudCA9PSAwKSB7CisJCWludCB0aW1lOworCisJCWRldl9kYmcoc2hhcnBzbF9wbS5kZXYsICJPZmZsaW5lIENoYXJnZXI6IFN0ZXAgMlxuIik7CisKKwkJaWYgKHNoYXJwc2xfY2hlY2tfYmF0dGVyeSgwKSA8IDApCisJCQlyZXR1cm4gc2hhcnBzbF9vZmZfY2hhcmdlX2Vycm9yKCk7CisKKwkJQ0hBUkdFX09GRigpOworCQltZGVsYXkoU0hBUlBTTF9DSEFSR0VfV0FJVF9USU1FKTsKKwkJQ0hBUkdFX09OKCk7CisJCXNoYXJwc2xfcG0uY2hhcmdlX21vZGUgPSBDSFJHX09OOworCisJCW1kZWxheShTSEFSUFNMX0NIQVJHRV9DT19DSEVDS19USU1FKTsKKworCQl0aW1lID0gUkNOUjsKKwkJd2hpbGUoMSkgeworCQkJLyogQ2hlY2sgaWYgYW55IHdha2V1cCBldmVudCBoYWQgb2NjdXJlZCAqLworCQkJaWYgKHNoYXJwc2xfcG0ubWFjaGluZm8tPmNoYXJnZXJfd2FrZXVwKCkgIT0gMCkKKwkJCQlyZXR1cm4gMDsKKwkJCS8qIENoZWNrIGZvciB0aW1lb3V0ICovCisJCQlpZiAoKFJDTlIgLSB0aW1lKSA+IFNIQVJQU0xfV0FJVF9DT19USU1FKQorCQkJCXJldHVybiAxOworCQkJaWYgKFNUQVRVU19DSFJHX0ZVTEwpIHsKKwkJCQlkZXZfZGJnKHNoYXJwc2xfcG0uZGV2LCAiT2ZmbGluZSBDaGFyZ2VyOiBDaGFyZ2UgZnVsbCBvY2N1cmVkLiBSZXRyeWluZyB0byBjaGVja1xuIik7CisJICAgCQkJc2hhcnBzbF9wbS5mdWxsX2NvdW50Kys7CisJCQkJQ0hBUkdFX09GRigpOworCQkJCW1kZWxheShTSEFSUFNMX0NIQVJHRV9XQUlUX1RJTUUpOworCQkJCUNIQVJHRV9PTigpOworCQkJCXJldHVybiAxOworCQkJfQorCQl9CisJfQorCisJZGV2X2RiZyhzaGFycHNsX3BtLmRldiwgIk9mZmxpbmUgQ2hhcmdlcjogU3RlcCAzXG4iKTsKKworCW1kZWxheShTSEFSUFNMX0NIQVJHRV9DT19DSEVDS19USU1FKTsKKworCXRpbWUgPSBSQ05SOworCXdoaWxlKDEpIHsKKwkJLyogQ2hlY2sgaWYgYW55IHdha2V1cCBldmVudCBoYWQgb2NjdXJlZCAqLworCQlpZiAoc2hhcnBzbF9wbS5tYWNoaW5mby0+Y2hhcmdlcl93YWtldXAoKSAhPSAwKQorCQkJcmV0dXJuIDA7CisJCS8qIENoZWNrIGZvciB0aW1lb3V0ICovCisJCWlmICgoUkNOUi10aW1lKSA+IFNIQVJQU0xfV0FJVF9DT19USU1FKSB7CisJCQlpZiAoc2hhcnBzbF9wbS5mdWxsX2NvdW50ID4gU0hBUlBTTF9DSEFSR0VfUkVUUllfQ05UKSB7CisJCQkJZGV2X2RiZyhzaGFycHNsX3BtLmRldiwgIk9mZmxpbmUgQ2hhcmdlcjogTm90IGNoYXJnZWQgc3VmZmljaWVudGx5LiBSZXRyeWluZy5cbiIpOworCQkJCXNoYXJwc2xfcG0uZnVsbF9jb3VudCA9IDA7CisJCQl9CisJCQlzaGFycHNsX3BtLmZ1bGxfY291bnQrKzsKKwkJCXJldHVybiAxOworCQl9CisJCWlmIChTVEFUVVNfQ0hSR19GVUxMKSB7CisJCQlkZXZfZGJnKHNoYXJwc2xfcG0uZGV2LCAiT2ZmbGluZSBDaGFyZ2VyOiBDaGFyZ2luZyBjb21wbGV0ZS5cbiIpOworCQkJQ0hBUkdFX0xFRF9PRkYoKTsKKwkJCUNIQVJHRV9PRkYoKTsKKwkJCXNoYXJwc2xfcG0uY2hhcmdlX21vZGUgPSBDSFJHX0RPTkU7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KK30KKworCitzdGF0aWMgc3NpemVfdCBiYXR0ZXJ5X3BlcmNlbnRhZ2Vfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsc2hhcnBzbF9wbS5iYXR0c3RhdC5tYWluYmF0X3BlcmNlbnQpOworfQorCitzdGF0aWMgc3NpemVfdCBiYXR0ZXJ5X3ZvbHRhZ2Vfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsc2hhcnBzbF9wbS5iYXR0c3RhdC5tYWluYmF0X3ZvbHRhZ2UpOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIoYmF0dGVyeV9wZXJjZW50YWdlLCAwNDQ0LCBiYXR0ZXJ5X3BlcmNlbnRhZ2Vfc2hvdywgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIoYmF0dGVyeV92b2x0YWdlLCAwNDQ0LCBiYXR0ZXJ5X3ZvbHRhZ2Vfc2hvdywgTlVMTCk7CisKK2V4dGVybiB2b2lkICgqYXBtX2dldF9wb3dlcl9zdGF0dXMpKHN0cnVjdCBhcG1fcG93ZXJfaW5mbyAqKTsKKworc3RhdGljIHZvaWQgc2hhcnBzbF9hcG1fZ2V0X3Bvd2VyX3N0YXR1cyhzdHJ1Y3QgYXBtX3Bvd2VyX2luZm8gKmluZm8pCit7CisJaW5mby0+YWNfbGluZV9zdGF0dXMgPSBzaGFycHNsX3BtLmJhdHRzdGF0LmFjX3N0YXR1czsKKworCWlmIChzaGFycHNsX3BtLmNoYXJnZV9tb2RlID09IENIUkdfT04pCisJCWluZm8tPmJhdHRlcnlfc3RhdHVzID0gQVBNX0JBVFRFUllfU1RBVFVTX0NIQVJHSU5HOworCWVsc2UKKwkJaW5mby0+YmF0dGVyeV9zdGF0dXMgPSBzaGFycHNsX3BtLmJhdHRzdGF0Lm1haW5iYXRfc3RhdHVzOworCisJaW5mby0+YmF0dGVyeV9mbGFnID0gKDEgPDwgaW5mby0+YmF0dGVyeV9zdGF0dXMpOworCWluZm8tPmJhdHRlcnlfbGlmZSA9IHNoYXJwc2xfcG0uYmF0dHN0YXQubWFpbmJhdF9wZXJjZW50OworfQorCitzdGF0aWMgc3RydWN0IHBtX29wcyBzaGFycHNsX3BtX29wcyA9IHsKKwkucG1fZGlza19tb2RlCT0gUE1fRElTS19GSVJNV0FSRSwKKwkucHJlcGFyZQk9IHB4YV9wbV9wcmVwYXJlLAorCS5lbnRlcgkJPSBjb3JnaV9weGFfcG1fZW50ZXIsCisJLmZpbmlzaAkJPSBweGFfcG1fZmluaXNoLAorfTsKKworc3RhdGljIGludCBfX2luaXQgc2hhcnBzbF9wbV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaWYgKCFkZXYtPnBsYXRmb3JtX2RhdGEpCisJCXJldHVybiAtRUlOVkFMOworCisJc2hhcnBzbF9wbS5kZXYgPSBkZXY7CisJc2hhcnBzbF9wbS5tYWNoaW5mbyA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKwlzaGFycHNsX3BtLmNoYXJnZV9tb2RlID0gQ0hSR19PRkY7CisJc2hhcnBzbF9wbS5mbGFncyA9IDA7CisKKwlzaGFycHNsX3BtLm1hY2hpbmZvLT5pbml0KCk7CisKKwlpbml0X3RpbWVyKCZzaGFycHNsX3BtLmFjX3RpbWVyKTsKKwlzaGFycHNsX3BtLmFjX3RpbWVyLmZ1bmN0aW9uID0gc2hhcnBzbF9hY190aW1lcjsKKworCWluaXRfdGltZXIoJnNoYXJwc2xfcG0uY2hyZ19mdWxsX3RpbWVyKTsKKwlzaGFycHNsX3BtLmNocmdfZnVsbF90aW1lci5mdW5jdGlvbiA9IHNoYXJwc2xfY2hyZ19mdWxsX3RpbWVyOworCisJcHhhX2dwaW9fbW9kZShzaGFycHNsX3BtLm1hY2hpbmZvLT5ncGlvX2FjaW4gfCBHUElPX0lOKTsKKwlweGFfZ3Bpb19tb2RlKHNoYXJwc2xfcG0ubWFjaGluZm8tPmdwaW9fYmF0ZnVsbCB8IEdQSU9fSU4pOworCXB4YV9ncGlvX21vZGUoc2hhcnBzbF9wbS5tYWNoaW5mby0+Z3Bpb19iYXRsb2NrIHwgR1BJT19JTik7CisKKwkvKiBSZWdpc3RlciBpbnRlcnJ1cHQgaGFuZGxlcnMgKi8KKwlpZiAocmVxdWVzdF9pcnEoSVJRX0dQSU8oc2hhcnBzbF9wbS5tYWNoaW5mby0+Z3Bpb19hY2luKSwgc2hhcnBzbF9hY19pc3IsIFNBX0lOVEVSUlVQVCwgIkFDIElucHV0IERldGVjdCIsIHNoYXJwc2xfYWNfaXNyKSkgeworCQlkZXZfZXJyKHNoYXJwc2xfcG0uZGV2LCAiQ291bGQgbm90IGdldCBpcnEgJWQuXG4iLCBJUlFfR1BJTyhzaGFycHNsX3BtLm1hY2hpbmZvLT5ncGlvX2FjaW4pKTsKKwl9CisJZWxzZSBzZXRfaXJxX3R5cGUoSVJRX0dQSU8oc2hhcnBzbF9wbS5tYWNoaW5mby0+Z3Bpb19hY2luKSxJUlFUX0JPVEhFREdFKTsKKworCWlmIChyZXF1ZXN0X2lycShJUlFfR1BJTyhzaGFycHNsX3BtLm1hY2hpbmZvLT5ncGlvX2JhdGxvY2spLCBzaGFycHNsX2ZhdGFsX2lzciwgU0FfSU5URVJSVVBULCAiQmF0dGVyeSBDb3ZlciIsIHNoYXJwc2xfZmF0YWxfaXNyKSkgeworCQlkZXZfZXJyKHNoYXJwc2xfcG0uZGV2LCAiQ291bGQgbm90IGdldCBpcnEgJWQuXG4iLCBJUlFfR1BJTyhzaGFycHNsX3BtLm1hY2hpbmZvLT5ncGlvX2JhdGxvY2spKTsKKwl9CisJZWxzZSBzZXRfaXJxX3R5cGUoSVJRX0dQSU8oc2hhcnBzbF9wbS5tYWNoaW5mby0+Z3Bpb19iYXRsb2NrKSxJUlFUX0ZBTExJTkcpOworCisJaWYgKHNoYXJwc2xfcG0ubWFjaGluZm8tPmdwaW9fZmF0YWwpIHsKKwkJaWYgKHJlcXVlc3RfaXJxKElSUV9HUElPKHNoYXJwc2xfcG0ubWFjaGluZm8tPmdwaW9fZmF0YWwpLCBzaGFycHNsX2ZhdGFsX2lzciwgU0FfSU5URVJSVVBULCAiRmF0YWwgQmF0dGVyeSIsIHNoYXJwc2xfZmF0YWxfaXNyKSkgeworCQkJZGV2X2VycihzaGFycHNsX3BtLmRldiwgIkNvdWxkIG5vdCBnZXQgaXJxICVkLlxuIiwgSVJRX0dQSU8oc2hhcnBzbF9wbS5tYWNoaW5mby0+Z3Bpb19mYXRhbCkpOworCQl9CisJCWVsc2Ugc2V0X2lycV90eXBlKElSUV9HUElPKHNoYXJwc2xfcG0ubWFjaGluZm8tPmdwaW9fZmF0YWwpLElSUVRfRkFMTElORyk7CisJfQorCisJaWYgKCFtYWNoaW5lX2lzX2NvcmdpKCkpCisJeworCQkvKiBSZWdpc3RlciBpbnRlcnJ1cHQgaGFuZGxlci4gKi8KKwkJaWYgKHJlcXVlc3RfaXJxKElSUV9HUElPKHNoYXJwc2xfcG0ubWFjaGluZm8tPmdwaW9fYmF0ZnVsbCksIHNoYXJwc2xfY2hyZ19mdWxsX2lzciwgU0FfSU5URVJSVVBULCAiQ08iLCBzaGFycHNsX2NocmdfZnVsbF9pc3IpKSB7CisJCQlkZXZfZXJyKHNoYXJwc2xfcG0uZGV2LCAiQ291bGQgbm90IGdldCBpcnEgJWQuXG4iLCBJUlFfR1BJTyhzaGFycHNsX3BtLm1hY2hpbmZvLT5ncGlvX2JhdGZ1bGwpKTsKKwkJfQorCQllbHNlIHNldF9pcnFfdHlwZShJUlFfR1BJTyhzaGFycHNsX3BtLm1hY2hpbmZvLT5ncGlvX2JhdGZ1bGwpLElSUVRfUklTSU5HKTsKKwl9CisKKwlkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfYmF0dGVyeV9wZXJjZW50YWdlKTsKKwlkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfYmF0dGVyeV92b2x0YWdlKTsKKworCWFwbV9nZXRfcG93ZXJfc3RhdHVzID0gc2hhcnBzbF9hcG1fZ2V0X3Bvd2VyX3N0YXR1czsKKworCXBtX3NldF9vcHMoJnNoYXJwc2xfcG1fb3BzKTsKKworCW1vZF90aW1lcigmc2hhcnBzbF9wbS5hY190aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMjUwKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaGFycHNsX3BtX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcG1fc2V0X29wcyhOVUxMKTsKKworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9iYXR0ZXJ5X3BlcmNlbnRhZ2UpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9iYXR0ZXJ5X3ZvbHRhZ2UpOworCisJZnJlZV9pcnEoSVJRX0dQSU8oc2hhcnBzbF9wbS5tYWNoaW5mby0+Z3Bpb19hY2luKSwgc2hhcnBzbF9hY19pc3IpOworCWZyZWVfaXJxKElSUV9HUElPKHNoYXJwc2xfcG0ubWFjaGluZm8tPmdwaW9fYmF0bG9jayksIHNoYXJwc2xfZmF0YWxfaXNyKTsKKworCWlmIChzaGFycHNsX3BtLm1hY2hpbmZvLT5ncGlvX2ZhdGFsKQorCQlmcmVlX2lycShJUlFfR1BJTyhzaGFycHNsX3BtLm1hY2hpbmZvLT5ncGlvX2ZhdGFsKSwgc2hhcnBzbF9mYXRhbF9pc3IpOworCisJaWYgKCFtYWNoaW5lX2lzX2NvcmdpKCkpCisJCWZyZWVfaXJxKElSUV9HUElPKHNoYXJwc2xfcG0ubWFjaGluZm8tPmdwaW9fYmF0ZnVsbCksIHNoYXJwc2xfY2hyZ19mdWxsX2lzcik7CisKKwlkZWxfdGltZXJfc3luYygmc2hhcnBzbF9wbS5jaHJnX2Z1bGxfdGltZXIpOworCWRlbF90aW1lcl9zeW5jKCZzaGFycHNsX3BtLmFjX3RpbWVyKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgc2hhcnBzbF9wbV9kcml2ZXIgPSB7CisJLm5hbWUJCT0gInNoYXJwc2wtcG0iLAorCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorCS5wcm9iZQkJPSBzaGFycHNsX3BtX3Byb2JlLAorCS5yZW1vdmUJCT0gc2hhcnBzbF9wbV9yZW1vdmUsCisJLnN1c3BlbmQJPSBzaGFycHNsX3BtX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBzaGFycHNsX3BtX3Jlc3VtZSwKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNoYXJwc2xfcG1faW5pdCh2b2lkKQoreworCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJnNoYXJwc2xfcG1fZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgc2hhcnBzbF9wbV9leGl0KHZvaWQpCit7CisgCWRyaXZlcl91bnJlZ2lzdGVyKCZzaGFycHNsX3BtX2RyaXZlcik7Cit9CisKK2xhdGVfaW5pdGNhbGwoc2hhcnBzbF9wbV9pbml0KTsKK21vZHVsZV9leGl0KHNoYXJwc2xfcG1fZXhpdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9zcGl0ei5jIGIvYXJjaC9hcm0vbWFjaC1weGEvc3BpdHouYwppbmRleCA2YzY4NzhjLi40ZTlhNjk5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9zcGl0ei5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3NwaXR6LmMKQEAgLTEwNCw2ICsxMDQsNjYgQEAKIAkucmVzb3VyY2UJPSBzcGl0el9zY29vcDJfcmVzb3VyY2VzLAogfTsKIAorI2RlZmluZSBTUElUWl9QV1JfU0QgMHgwMQorI2RlZmluZSBTUElUWl9QV1JfQ0YgMHgwMgorCisvKiBQb3dlciBjb250cm9sIGlzIHNoYXJlZCB3aXRoIGJldHdlZW4gb25lIG9mIHRoZSBDRiBzbG90cyBhbmQgU0QgKi8KK3N0YXRpYyB2b2lkIHNwaXR6X2NhcmRfcHdyX2N0cmwoaW50IGRldmljZSwgdW5zaWduZWQgc2hvcnQgbmV3X2NwcikKK3sKKwl1bnNpZ25lZCBzaG9ydCBjcHIgPSByZWFkX3Njb29wX3JlZygmc3BpdHpzY29vcF9kZXZpY2UuZGV2LCBTQ09PUF9DUFIpOworCisJaWYgKG5ld19jcHIgJiAweDAwMDcpIHsKKwkgICAgICAgIHNldF9zY29vcF9ncGlvKCZzcGl0enNjb29wX2RldmljZS5kZXYsIFNQSVRaX1NDUF9DRl9QT1dFUik7CisJCWlmICghKGNwciAmIDB4MDAwMikgJiYgIShjcHIgJiAweDAwMDQpKQorCQkgICAgICAgIG1kZWxheSg1KTsKKwkJaWYgKGRldmljZSA9PSBTUElUWl9QV1JfQ0YpCisJCSAgICAgICAgY3ByIHw9IDB4MDAwMjsKKwkJaWYgKGRldmljZSA9PSBTUElUWl9QV1JfU0QpCisJCSAgICAgICAgY3ByIHw9IDB4MDAwNDsKKwkgICAgICAgIHdyaXRlX3Njb29wX3JlZygmc3BpdHpzY29vcF9kZXZpY2UuZGV2LCBTQ09PUF9DUFIsIGNwciB8IG5ld19jcHIpOworCX0gZWxzZSB7CisJCWlmIChkZXZpY2UgPT0gU1BJVFpfUFdSX0NGKQorCQkgICAgICAgIGNwciAmPSB+MHgwMDAyOworCQlpZiAoZGV2aWNlID09IFNQSVRaX1BXUl9TRCkKKwkJICAgICAgICBjcHIgJj0gfjB4MDAwNDsKKwkgICAgICAgIHdyaXRlX3Njb29wX3JlZygmc3BpdHpzY29vcF9kZXZpY2UuZGV2LCBTQ09PUF9DUFIsIGNwciB8IG5ld19jcHIpOworCQlpZiAoIShjcHIgJiAweDAwMDIpICYmICEoY3ByICYgMHgwMDA0KSkgeworCQkgICAgICAgIG1kZWxheSgxKTsKKwkJICAgICAgICByZXNldF9zY29vcF9ncGlvKCZzcGl0enNjb29wX2RldmljZS5kZXYsIFNQSVRaX1NDUF9DRl9QT1dFUik7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNwaXR6X3BjbWNpYV9pbml0KHZvaWQpCit7CisJLyogU2V0dXAgZGVmYXVsdCBzdGF0ZSBvZiBHUElPIG91dHB1dHMKKwkgICBiZWZvcmUgd2UgZW5hYmxlIHRoZW0gYXMgb3V0cHV0cy4gKi8KKwlHUFNSKEdQSU80OF9uUE9FKSA9IEdQSU9fYml0KEdQSU80OF9uUE9FKSB8CisJCUdQSU9fYml0KEdQSU80OV9uUFdFKSB8CUdQSU9fYml0KEdQSU81MF9uUElPUikgfAorCQlHUElPX2JpdChHUElPNTFfblBJT1cpIHwgR1BJT19iaXQoR1BJTzU0X25QQ0VfMik7CisJR1BTUihHUElPODVfblBDRV8xKSA9IEdQSU9fYml0KEdQSU84NV9uUENFXzEpOworCisJcHhhX2dwaW9fbW9kZShHUElPNDhfblBPRV9NRCk7CisJcHhhX2dwaW9fbW9kZShHUElPNDlfblBXRV9NRCk7CisJcHhhX2dwaW9fbW9kZShHUElPNTBfblBJT1JfTUQpOworCXB4YV9ncGlvX21vZGUoR1BJTzUxX25QSU9XX01EKTsKKwlweGFfZ3Bpb19tb2RlKEdQSU81NV9uUFJFR19NRCk7CisJcHhhX2dwaW9fbW9kZShHUElPNTZfblBXQUlUX01EKTsKKwlweGFfZ3Bpb19tb2RlKEdQSU81N19uSU9JUzE2X01EKTsKKwlweGFfZ3Bpb19tb2RlKEdQSU84NV9uUENFXzFfTUQpOworCXB4YV9ncGlvX21vZGUoR1BJTzU0X25QQ0VfMl9NRCk7CisJcHhhX2dwaW9fbW9kZShHUElPMTA0X3BTS1RTRUxfTUQpOworfQorCitzdGF0aWMgdm9pZCBzcGl0el9wY21jaWFfcHdyKHN0cnVjdCBkZXZpY2UgKnNjb29wLCB1bnNpZ25lZCBzaG9ydCBjcHIsIGludCBucikKK3sKKwkvKiBPbmx5IG5lZWQgdG8gb3ZlcnJpZGUgYmVoYXZpb3VyIGZvciBzbG90IDAgKi8KKwlpZiAobnIgPT0gMCkKKwkJc3BpdHpfY2FyZF9wd3JfY3RybChTUElUWl9QV1JfQ0YsIGNwcik7CisJZWxzZQorCQl3cml0ZV9zY29vcF9yZWcoc2Nvb3AsIFNDT09QX0NQUiwgY3ByKTsKK30KKwogc3RhdGljIHN0cnVjdCBzY29vcF9wY21jaWFfZGV2IHNwaXR6X3BjbWNpYV9zY29vcFtdID0gewogewogCS5kZXYgICAgICAgID0gJnNwaXR6c2Nvb3BfZGV2aWNlLmRldiwKQEAgLTExNyw2ICsxNzcsMTYgQEAKIH0sCiB9OwogCitzdGF0aWMgc3RydWN0IHNjb29wX3BjbWNpYV9jb25maWcgc3BpdHpfcGNtY2lhX2NvbmZpZyA9IHsKKwkuZGV2cyAgICAgICAgID0gJnNwaXR6X3BjbWNpYV9zY29vcFswXSwKKwkubnVtX2RldnMgICAgID0gMiwKKwkucGNtY2lhX2luaXQgID0gc3BpdHpfcGNtY2lhX2luaXQsCisJLnBvd2VyX2N0cmwgICA9IHNwaXR6X3BjbWNpYV9wd3IsCit9OworCitFWFBPUlRfU1lNQk9MKHNwaXR6c2Nvb3BfZGV2aWNlKTsKK0VYUE9SVF9TWU1CT0woc3BpdHpzY29vcDJfZGV2aWNlKTsKKwogCiAvKgogICogU3BpdHogU1NQIERldmljZQpAQCAtMjM1LDI3ICszMDUsMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyogUG93ZXIgY29udHJvbCBpcyBzaGFyZWQgd2l0aCBvbmUgb2YgdGhlIENGIHNsb3RzIHNvIHdlIGhhdmUgYSBtZXNzICovCiBzdGF0aWMgdm9pZCBzcGl0el9tY2lfc2V0cG93ZXIoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgdmRkKQogewogCXN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSogcF9kID0gZGV2LT5wbGF0Zm9ybV9kYXRhOwogCi0JdW5zaWduZWQgc2hvcnQgY3ByID0gcmVhZF9zY29vcF9yZWcoJnNwaXR6c2Nvb3BfZGV2aWNlLmRldiwgU0NPT1BfQ1BSKTsKLQotCWlmICgoIDEgPDwgdmRkKSAmIHBfZC0+b2NyX21hc2spIHsKLQkJLyogcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBvblxuIiwgX19GVU5DVElPTl9fKTsgKi8KLQkJc2V0X3Njb29wX2dwaW8oJnNwaXR6c2Nvb3BfZGV2aWNlLmRldiwgU1BJVFpfU0NQX0NGX1BPV0VSKTsKLQkJbWRlbGF5KDIpOwotCQl3cml0ZV9zY29vcF9yZWcoJnNwaXR6c2Nvb3BfZGV2aWNlLmRldiwgU0NPT1BfQ1BSLCBjcHIgfCAweDA0KTsKLQl9IGVsc2UgewotCQkvKiBwcmludGsoS0VSTl9ERUJVRyAiJXM6IG9mZlxuIiwgX19GVU5DVElPTl9fKTsgKi8KLQkJd3JpdGVfc2Nvb3BfcmVnKCZzcGl0enNjb29wX2RldmljZS5kZXYsIFNDT09QX0NQUiwgY3ByICYgfjB4MDQpOwotCi0JCWlmICghKGNwciB8IDB4MDIpKSB7Ci0JCQltZGVsYXkoMSk7Ci0JCQlyZXNldF9zY29vcF9ncGlvKCZzcGl0enNjb29wX2RldmljZS5kZXYsIFNQSVRaX1NDUF9DRl9QT1dFUik7Ci0JCX0KLQl9CisJaWYgKCggMSA8PCB2ZGQpICYgcF9kLT5vY3JfbWFzaykKKwkJc3BpdHpfY2FyZF9wd3JfY3RybChTUElUWl9QV1JfU0QsIDB4MDAwNCk7CisJZWxzZQorCQlzcGl0el9jYXJkX3B3cl9jdHJsKFNQSVRaX1BXUl9TRCwgMHgwMDAwKTsKIH0KIAogc3RhdGljIGludCBzcGl0el9tY2lfZ2V0X3JvKHN0cnVjdCBkZXZpY2UgKmRldikKQEAgLTM1MSw4ICs0MDgsOCBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgc3BpdHpfaW5pdCh2b2lkKQogewotCXNjb29wX251bSA9IDI7Ci0Jc2Nvb3BfZGV2cyA9ICZzcGl0el9wY21jaWFfc2Nvb3BbMF07CisJcGxhdGZvcm1fc2Nvb3BfY29uZmlnID0gJnNwaXR6X3BjbWNpYV9jb25maWc7CisKIAlzcGl0el9ibF9tYWNoaW5mby5zZXRfYmxfaW50ZW5zaXR5ID0gc3BpdHpfYmxfc2V0X2ludGVuc2l0eTsKIAogCWNvbW1vbl9pbml0KCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9zc3AuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3NzcC5jCmluZGV4IDRkODI2YzAuLmE2OGIzMGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3NzcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3NzcC5jCkBAIC0xOSw2ICsxOSw4IEBACiAgKiAgIDIybmQgQXVnIDIwMDMgSW5pdGlhbCB2ZXJzaW9uLgogICogICAyMHRoIERlYyAyMDA0IEFkZGVkIHNzcF9jb25maWcgZm9yIGNoYW5naW5nIHBvcnQgY29uZmlnIHdpdGhvdXQKICAqICAgICAgICAgICAgICAgICBjbG9zaW5nIHRoZSBwb3J0LgorICogICAgNHRoIEF1ZyAyMDA1IEFkZGVkIG9wdGlvbiB0byBkaXNhYmxlIGlycSBoYW5kbGVyIHJlZ2lzdHJhdGlvbiBhbmQKKyAqICAgICAgICAgICAgICAgICBjbGVhbmVkIHVwIGlycSBhbmQgY2xvY2sgZGV0ZWN0aW9uLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTM3LDYgKzM5LDI2IEBACiAKICNkZWZpbmUgUFhBX1NTUF9QT1JUUyAJMwogCitzdHJ1Y3Qgc3NwX2luZm9fIHsKKwlpbnQgaXJxOworCXUzMiBjbG9jazsKK307CisKKy8qCisgKiBTU1AgcG9ydCBjbG9jayBhbmQgSVJRIHNldHRpbmdzCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3NwX2luZm9fIHNzcF9pbmZvW1BYQV9TU1BfUE9SVFNdID0geworI2lmIGRlZmluZWQgKENPTkZJR19QWEEyN3gpCisJe0lSUV9TU1AsCUNLRU4yM19TU1AxfSwKKwl7SVJRX1NTUDIsCUNLRU4zX1NTUDJ9LAorCXtJUlFfU1NQMywJQ0tFTjRfU1NQM30sCisjZWxzZQorCXtJUlFfU1NQLAlDS0VOM19TU1B9LAorCXtJUlFfTlNTUCwJQ0tFTjlfTlNTUH0sCisJe0lSUV9BU1NQLAlDS0VOMTBfQVNTUH0sCisjZW5kaWYKK307CisKIHN0YXRpYyBERUNMQVJFX01VVEVYKHNlbSk7CiBzdGF0aWMgaW50IHVzZV9jb3VudFtQWEFfU1NQX1BPUlRTXSA9IHswLCAwLCAwfTsKIApAQCAtMjEwLDkgKzIzMiw5IEBACiAgKiAgICUtRUJVU1kJaWYgdGhlIHJlc291cmNlcyBhcmUgYWxyZWFkeSBpbiB1c2UKICAqICAgJTAJCW9uIHN1Y2Nlc3MKICAqLwotaW50IHNzcF9pbml0KHN0cnVjdCBzc3BfZGV2ICpkZXYsIHUzMiBwb3J0KQoraW50IHNzcF9pbml0KHN0cnVjdCBzc3BfZGV2ICpkZXYsIHUzMiBwb3J0LCB1MzIgaW5pdF9mbGFncykKIHsKLQlpbnQgcmV0LCBpcnE7CisJaW50IHJldDsKIAogCWlmIChwb3J0ID4gUFhBX1NTUF9QT1JUUyB8fCBwb3J0ID09IDApCiAJCXJldHVybiAtRU5PREVWOwpAQCAtMjI5LDYxICsyNTEsMjAgQEAKIAkJdXAoJnNlbSk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQotCi0Jc3dpdGNoIChwb3J0KSB7Ci0JCWNhc2UgMToKLQkJCWlycSA9IElSUV9TU1A7Ci0JCQlicmVhazsKLSNpZiBkZWZpbmVkIChDT05GSUdfUFhBMjd4KQotCQljYXNlIDI6Ci0JCQlpcnEgPSBJUlFfU1NQMjsKLQkJCWJyZWFrOwotCQljYXNlIDM6Ci0JCQlpcnEgPSBJUlFfU1NQMzsKLQkJCWJyZWFrOwotI2Vsc2UKLQkJY2FzZSAyOgotCQkJaXJxID0gSVJRX05TU1A7Ci0JCQlicmVhazsKLQkJY2FzZSAzOgotCQkJaXJxID0gSVJRX0FTU1A7Ci0JCQlicmVhazsKLSNlbmRpZgotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCiAJZGV2LT5wb3J0ID0gcG9ydDsKIAotCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgc3NwX2ludGVycnVwdCwgMCwgIlNTUCIsIGRldik7Ci0JaWYgKHJldCkKLQkJZ290byBvdXRfcmVnaW9uOworCS8qIGRvIHdlIG5lZWQgdG8gZ2V0IGlycSAqLworCWlmICghKGluaXRfZmxhZ3MgJiBTU1BfTk9fSVJRKSkgeworCQlyZXQgPSByZXF1ZXN0X2lycShzc3BfaW5mb1twb3J0LTFdLmlycSwgc3NwX2ludGVycnVwdCwKKwkJCQkwLCAiU1NQIiwgZGV2KTsKKwkgICAgCWlmIChyZXQpCisJCQlnb3RvIG91dF9yZWdpb247CisJICAgIAlkZXYtPmlycSA9IHNzcF9pbmZvW3BvcnQtMV0uaXJxOworCX0gZWxzZQorCQlkZXYtPmlycSA9IDA7CiAKIAkvKiB0dXJuIG9uIFNTUCBwb3J0IGNsb2NrICovCi0Jc3dpdGNoIChkZXYtPnBvcnQpIHsKLSNpZiBkZWZpbmVkIChDT05GSUdfUFhBMjd4KQotCQljYXNlIDE6Ci0JCQlweGFfc2V0X2NrZW4oQ0tFTjIzX1NTUDEsIDEpOwotCQkJYnJlYWs7Ci0JCWNhc2UgMjoKLQkJCXB4YV9zZXRfY2tlbihDS0VOM19TU1AyLCAxKTsKLQkJCWJyZWFrOwotCQljYXNlIDM6Ci0JCQlweGFfc2V0X2NrZW4oQ0tFTjRfU1NQMywgMSk7Ci0JCQlicmVhazsKLSNlbHNlCi0JCWNhc2UgMToKLQkJCXB4YV9zZXRfY2tlbihDS0VOM19TU1AsIDEpOwotCQkJYnJlYWs7Ci0JCWNhc2UgMjoKLQkJCXB4YV9zZXRfY2tlbihDS0VOOV9OU1NQLCAxKTsKLQkJCWJyZWFrOwotCQljYXNlIDM6Ci0JCQlweGFfc2V0X2NrZW4oQ0tFTjEwX0FTU1AsIDEpOwotCQkJYnJlYWs7Ci0jZW5kaWYKLQl9Ci0KKwlweGFfc2V0X2NrZW4oc3NwX2luZm9bcG9ydC0xXS5jbG9jaywgMSk7CiAJdXAoJnNlbSk7CiAJcmV0dXJuIDA7CiAKQEAgLTMwMSw0NiArMjgyLDE3IEBACiAgKi8KIHZvaWQgc3NwX2V4aXQoc3RydWN0IHNzcF9kZXYgKmRldikKIHsKLQlpbnQgaXJxOwotCiAJZG93bigmc2VtKTsKIAlTU0NSMF9QKGRldi0+cG9ydCkgJj0gflNTQ1IwX1NTRTsKIAotCS8qIGZpbmQgaXJxLCBzYXZlIHBvd2VyIGFuZCB0dXJuIG9mZiBTU1AgcG9ydCBjbG9jayAqLwotCXN3aXRjaCAoZGV2LT5wb3J0KSB7Ci0jaWYgZGVmaW5lZCAoQ09ORklHX1BYQTI3eCkKLQkJY2FzZSAxOgotCQkJaXJxID0gSVJRX1NTUDsKLQkJCXB4YV9zZXRfY2tlbihDS0VOMjNfU1NQMSwgMCk7Ci0JCQlicmVhazsKLQkJY2FzZSAyOgotCQkJaXJxID0gSVJRX1NTUDI7Ci0JCQlweGFfc2V0X2NrZW4oQ0tFTjNfU1NQMiwgMCk7Ci0JCQlicmVhazsKLQkJY2FzZSAzOgotCQkJaXJxID0gSVJRX1NTUDM7Ci0JCQlweGFfc2V0X2NrZW4oQ0tFTjRfU1NQMywgMCk7Ci0JCQlicmVhazsKLSNlbHNlCi0JCWNhc2UgMToKLQkJCWlycSA9IElSUV9TU1A7Ci0JCQlweGFfc2V0X2NrZW4oQ0tFTjNfU1NQLCAwKTsKLQkJCWJyZWFrOwotCQljYXNlIDI6Ci0JCQlpcnEgPSBJUlFfTlNTUDsKLQkJCXB4YV9zZXRfY2tlbihDS0VOOV9OU1NQLCAwKTsKLQkJCWJyZWFrOwotCQljYXNlIDM6Ci0JCQlpcnEgPSBJUlFfQVNTUDsKLQkJCXB4YV9zZXRfY2tlbihDS0VOMTBfQVNTUCwgMCk7Ci0JCQlicmVhazsKLSNlbmRpZgotCQlkZWZhdWx0OgotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiU1NQOiB0cmllZCB0byBjbG9zZSBpbnZhbGlkIHBvcnRcbiIpOwotCQkJcmV0dXJuOworICAgIAlpZiAoZGV2LT5wb3J0ID4gUFhBX1NTUF9QT1JUUyB8fCBkZXYtPnBvcnQgPT0gMCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJTU1A6IHRyaWVkIHRvIGNsb3NlIGludmFsaWQgcG9ydFxuIik7CisJCXJldHVybjsKIAl9CiAKLQlmcmVlX2lycShpcnEsIGRldik7CisJcHhhX3NldF9ja2VuKHNzcF9pbmZvW2Rldi0+cG9ydC0xXS5jbG9jaywgMCk7CisJaWYgKGRldi0+aXJxKQorCQlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKIAlyZWxlYXNlX21lbV9yZWdpb24oX19QUkVHKFNTQ1IwX1AoZGV2LT5wb3J0KSksIDB4MmMpOwogCXVzZV9jb3VudFtkZXYtPnBvcnQgLSAxXS0tOwogCXVwKCZzZW0pOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvdGltZS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvdGltZS5jCmluZGV4IDdkYWQzZjEuLmI5YjIwNTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3RpbWUuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS90aW1lLmMKQEAgLTEzMiwxMSArMTMyLDEzIEBACiAJdHYudHZfc2VjID0gcHhhX2dldF9ydGNfdGltZSgpOwogCWRvX3NldHRpbWVvZmRheSgmdHYpOwogCi0JT1NNUjAgPSAwOwkJLyogc2V0IGluaXRpYWwgbWF0Y2ggYXQgMCAqLworCU9JRVIgPSAwOwkJLyogZGlzYWJsZSBhbnkgdGltZXIgaW50ZXJydXB0cyAqLworCU9TQ1IgPSBMQVRDSCoyOwkJLyogcHVzaCBPU0NSIG91dCBvZiB0aGUgd2F5ICovCisJT1NNUjAgPSBMQVRDSDsJCS8qIHNldCBpbml0aWFsIG1hdGNoICovCiAJT1NTUiA9IDB4ZjsJCS8qIGNsZWFyIHN0YXR1cyBvbiBhbGwgdGltZXJzICovCiAJc2V0dXBfaXJxKElSUV9PU1QwLCAmcHhhX3RpbWVyX2lycSk7Ci0JT0lFUiB8PSBPSUVSX0UwOwkvKiBlbmFibGUgbWF0Y2ggb24gdGltZXIgMCB0byBjYXVzZSBpbnRlcnJ1cHRzICovCi0JT1NDUiA9IDA7CQkvKiBpbml0aWFsaXplIGZyZWUtcnVubmluZyB0aW1lciwgZm9yY2UgZmlyc3QgbWF0Y2ggKi8KKwlPSUVSID0gT0lFUl9FMDsJCS8qIGVuYWJsZSBtYXRjaCBvbiB0aW1lciAwIHRvIGNhdXNlIGludGVycnVwdHMgKi8KKwlPU0NSID0gMDsJCS8qIGluaXRpYWxpemUgZnJlZS1ydW5uaW5nIHRpbWVyICovCiB9CiAKICNpZmRlZiBDT05GSUdfTk9fSURMRV9IWgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvdG9zYS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvdG9zYS5jCmluZGV4IDQwMDYwOWYuLmMzMTIwNTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3Rvc2EuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS90b3NhLmMKQEAgLTk4LDYgKzk4LDkgQEAKIAkucmVzb3VyY2UJPSB0b3NhX3Njb29wX2pjX3Jlc291cmNlcywKIH07CiAKKy8qCisgKiBQQ01DSUEKKyAqLwogc3RhdGljIHN0cnVjdCBzY29vcF9wY21jaWFfZGV2IHRvc2FfcGNtY2lhX3Njb29wW10gPSB7CiB7CiAJLmRldiAgICAgICAgPSAmdG9zYXNjb29wX2RldmljZS5kZXYsCkBAIC0xMTEsMTYgKzExNCwxNTUgQEAKIH0sCiB9OwogCitzdGF0aWMgdm9pZCB0b3NhX3BjbWNpYV9pbml0KHZvaWQpCit7CisJLyogU2V0dXAgZGVmYXVsdCBzdGF0ZSBvZiBHUElPIG91dHB1dHMKKwkgICBiZWZvcmUgd2UgZW5hYmxlIHRoZW0gYXMgb3V0cHV0cy4gKi8KKwlHUFNSKEdQSU80OF9uUE9FKSA9IEdQSU9fYml0KEdQSU80OF9uUE9FKSB8CisJCUdQSU9fYml0KEdQSU80OV9uUFdFKSB8IEdQSU9fYml0KEdQSU81MF9uUElPUikgfAorCQlHUElPX2JpdChHUElPNTFfblBJT1cpIHwgR1BJT19iaXQoR1BJTzUyX25QQ0VfMSkgfAorCQlHUElPX2JpdChHUElPNTNfblBDRV8yKTsKKworCXB4YV9ncGlvX21vZGUoR1BJTzQ4X25QT0VfTUQpOworCXB4YV9ncGlvX21vZGUoR1BJTzQ5X25QV0VfTUQpOworCXB4YV9ncGlvX21vZGUoR1BJTzUwX25QSU9SX01EKTsKKwlweGFfZ3Bpb19tb2RlKEdQSU81MV9uUElPV19NRCk7CisJcHhhX2dwaW9fbW9kZShHUElPNTVfblBSRUdfTUQpOworCXB4YV9ncGlvX21vZGUoR1BJTzU2X25QV0FJVF9NRCk7CisJcHhhX2dwaW9fbW9kZShHUElPNTdfbklPSVMxNl9NRCk7CisJcHhhX2dwaW9fbW9kZShHUElPNTJfblBDRV8xX01EKTsKKwlweGFfZ3Bpb19tb2RlKEdQSU81M19uUENFXzJfTUQpOworCXB4YV9ncGlvX21vZGUoR1BJTzU0X3BTS1RTRUxfTUQpOworfQorCitzdGF0aWMgc3RydWN0IHNjb29wX3BjbWNpYV9jb25maWcgdG9zYV9wY21jaWFfY29uZmlnID0geworCS5kZXZzICAgICAgICAgPSAmdG9zYV9wY21jaWFfc2Nvb3BbMF0sCisJLm51bV9kZXZzICAgICA9IDIsCisJLnBjbWNpYV9pbml0ICA9IHRvc2FfcGNtY2lhX2luaXQsCit9OworCisvKgorICogVVNCIERldmljZSBDb250cm9sbGVyCisgKi8KK3N0YXRpYyB2b2lkIHRvc2FfdWRjX2NvbW1hbmQoaW50IGNtZCkKK3sKKwlzd2l0Y2goY21kKQl7CisJCWNhc2UgUFhBMlhYX1VEQ19DTURfQ09OTkVDVDoKKwkJCXNldF9zY29vcF9ncGlvKCZ0b3Nhc2Nvb3BfamNfZGV2aWNlLmRldixUT1NBX1NDT09QX0pDX1VTQl9QVUxMVVApOworCQkJYnJlYWs7CisJCWNhc2UgUFhBMlhYX1VEQ19DTURfRElTQ09OTkVDVDoKKwkJCXJlc2V0X3Njb29wX2dwaW8oJnRvc2FzY29vcF9qY19kZXZpY2UuZGV2LFRPU0FfU0NPT1BfSkNfVVNCX1BVTExVUCk7CisJCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgdG9zYV91ZGNfaXNfY29ubmVjdGVkKHZvaWQpCit7CisJcmV0dXJuICgoR1BMUihUT1NBX0dQSU9fVVNCX0lOKSAmIEdQSU9fYml0KFRPU0FfR1BJT19VU0JfSU4pKSA9PSAwKTsKK30KKworCitzdGF0aWMgc3RydWN0IHB4YTJ4eF91ZGNfbWFjaF9pbmZvIHVkY19pbmZvIF9faW5pdGRhdGEgPSB7CisJLnVkY19jb21tYW5kCQk9IHRvc2FfdWRjX2NvbW1hbmQsCisJLnVkY19pc19jb25uZWN0ZWQJPSB0b3NhX3VkY19pc19jb25uZWN0ZWQsCit9OworCisvKgorICogTU1DL1NEIERldmljZQorICovCitzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIHRvc2FfbWNpX3BsYXRmb3JtX2RhdGE7CisKK3N0YXRpYyBpbnQgdG9zYV9tY2lfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIGlycXJldHVybl90ICgqdG9zYV9kZXRlY3RfaW50KShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKiksIHZvaWQgKmRhdGEpCit7CisJaW50IGVycjsKKworCS8qIHNldHVwIEdQSU8gZm9yIFBYQTI1eCBNTUMgY29udHJvbGxlciAqLworCXB4YV9ncGlvX21vZGUoR1BJTzZfTU1DQ0xLX01EKTsKKwlweGFfZ3Bpb19tb2RlKEdQSU84X01NQ0NTMF9NRCk7CisJcHhhX2dwaW9fbW9kZShUT1NBX0dQSU9fblNEX0RFVEVDVCB8IEdQSU9fSU4pOworCisJdG9zYV9tY2lfcGxhdGZvcm1fZGF0YS5kZXRlY3RfZGVsYXkgPSBtc2Vjc190b19qaWZmaWVzKDI1MCk7CisKKwllcnIgPSByZXF1ZXN0X2lycShUT1NBX0lSUV9HUElPX25TRF9ERVRFQ1QsIHRvc2FfZGV0ZWN0X2ludCwgU0FfSU5URVJSVVBULAorCQkJCSJNTUMvU0QgY2FyZCBkZXRlY3QiLCBkYXRhKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAidG9zYV9tY2lfaW5pdDogTU1DL1NEOiBjYW4ndCByZXF1ZXN0IE1NQyBjYXJkIGRldGVjdCBJUlFcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJc2V0X2lycV90eXBlKFRPU0FfSVJRX0dQSU9fblNEX0RFVEVDVCwgSVJRVF9CT1RIRURHRSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdG9zYV9tY2lfc2V0cG93ZXIoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgdmRkKQoreworCXN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSogcF9kID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCisJaWYgKCggMSA8PCB2ZGQpICYgcF9kLT5vY3JfbWFzaykgeworCQlzZXRfc2Nvb3BfZ3BpbygmdG9zYXNjb29wX2RldmljZS5kZXYsVE9TQV9TQ09PUF9QV1JfT04pOworCX0gZWxzZSB7CisJCXJlc2V0X3Njb29wX2dwaW8oJnRvc2FzY29vcF9kZXZpY2UuZGV2LFRPU0FfU0NPT1BfUFdSX09OKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgdG9zYV9tY2lfZ2V0X3JvKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gKHJlYWRfc2Nvb3BfcmVnKCZ0b3Nhc2Nvb3BfZGV2aWNlLmRldiwgU0NPT1BfR1BXUikmVE9TQV9TQ09PUF9TRF9XUCk7Cit9CisKK3N0YXRpYyB2b2lkIHRvc2FfbWNpX2V4aXQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQoreworCWZyZWVfaXJxKFRPU0FfSVJRX0dQSU9fblNEX0RFVEVDVCwgZGF0YSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgdG9zYV9tY2lfcGxhdGZvcm1fZGF0YSA9IHsKKwkub2NyX21hc2sgICAgICAgPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCisJLmluaXQgICAgICAgICAgID0gdG9zYV9tY2lfaW5pdCwKKwkuZ2V0X3JvCQk9IHRvc2FfbWNpX2dldF9ybywKKwkuc2V0cG93ZXIgICAgICAgPSB0b3NhX21jaV9zZXRwb3dlciwKKwkuZXhpdCAgICAgICAgICAgPSB0b3NhX21jaV9leGl0LAorfTsKKworLyoKKyAqIElyZGEKKyAqLworc3RhdGljIHZvaWQgdG9zYV9pcmRhX3RyYW5zY2VpdmVyX21vZGUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgbW9kZSkKK3sKKwlpZiAobW9kZSAmIElSX09GRikgeworCQlyZXNldF9zY29vcF9ncGlvKCZ0b3Nhc2Nvb3BfZGV2aWNlLmRldixUT1NBX1NDT09QX0lSX1BPV0VSRFdOKTsKKwkJcHhhX2dwaW9fbW9kZShHUElPNDdfU1RUWER8R1BJT19ERkxUX0xPVyk7CisJCXB4YV9ncGlvX21vZGUoR1BJTzQ3X1NUVFhEfEdQSU9fT1VUKTsKKwl9IGVsc2UgeworCQlweGFfZ3Bpb19tb2RlKEdQSU80N19TVFRYRF9NRCk7CisJCXNldF9zY29vcF9ncGlvKCZ0b3Nhc2Nvb3BfZGV2aWNlLmRldixUT1NBX1NDT09QX0lSX1BPV0VSRFdOKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcHhhZmljcF9wbGF0Zm9ybV9kYXRhIHRvc2FfZmljcF9wbGF0Zm9ybV9kYXRhID0geworCS50cmFuc2NlaXZlcl9jYXAgID0gSVJfU0lSTU9ERSB8IElSX09GRiwKKwkudHJhbnNjZWl2ZXJfbW9kZSA9IHRvc2FfaXJkYV90cmFuc2NlaXZlcl9tb2RlLAorfTsKKworLyoKKyAqIFRvc2EgS2V5Ym9hcmQKKyAqLworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdG9zYWtiZF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInRvc2Eta2V5Ym9hcmQiLAorCS5pZAkJPSAtMSwKK307CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmdG9zYXNjb29wX2RldmljZSwKIAkmdG9zYXNjb29wX2pjX2RldmljZSwKKwkmdG9zYWtiZF9kZXZpY2UsCiB9OwogCiBzdGF0aWMgdm9pZCBfX2luaXQgdG9zYV9pbml0KHZvaWQpCiB7CiAJcHhhX2dwaW9fbW9kZShUT1NBX0dQSU9fT05fUkVTRVQgfCBHUElPX0lOKTsKIAlweGFfZ3Bpb19tb2RlKFRPU0FfR1BJT19UQzYzOTNfSU5UIHwgR1BJT19JTik7CisJcHhhX2dwaW9fbW9kZShUT1NBX0dQSU9fVVNCX0lOIHwgR1BJT19JTik7CiAKIAkvKiBzZXR1cCBzbGVlcCBtb2RlIHZhbHVlcyAqLwogCVBXRVIgID0gMHgwMDAwMDAwMjsKQEAgLTEzMSwxMyArMjczLDE1IEBACiAJUEdTUjIgPSAweDAwMDE0MDAwOwogCVBDRlIgfD0gUENGUl9PUERFOwogCi0JLy8gZW5hYmxlIGJhdHRfZmF1bHQKKwkvKiBlbmFibGUgYmF0dF9mYXVsdCAqLwogCVBNQ1IgPSAweDAxOwogCi0JcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7CisJcHhhX3NldF9tY2lfaW5mbygmdG9zYV9tY2lfcGxhdGZvcm1fZGF0YSk7CisJcHhhX3NldF91ZGNfaW5mbygmdWRjX2luZm8pOworCXB4YV9zZXRfZmljcF9pbmZvKCZ0b3NhX2ZpY3BfcGxhdGZvcm1fZGF0YSk7CisJcGxhdGZvcm1fc2Nvb3BfY29uZmlnID0gJnRvc2FfcGNtY2lhX2NvbmZpZzsKIAotCXNjb29wX251bSA9IDI7Ci0Jc2Nvb3BfZGV2cyA9ICZ0b3NhX3BjbWNpYV9zY29vcFswXTsKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IGZpeHVwX3Rvc2Eoc3RydWN0IG1hY2hpbmVfZGVzYyAqZGVzYywKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L01ha2VmaWxlCmluZGV4IDAxMWE4NWMuLjM2ZTc2YmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9NYWtlZmlsZQpAQCAtNSwzICs1LDUgQEAKIG9iai15CQkJCQk6PSBjb3JlLm8gY2xvY2subwogb2JqLSQoQ09ORklHX01BQ0hfUkVBTFZJRVdfRUIpCQkrPSByZWFsdmlld19lYi5vCiBvYmotJChDT05GSUdfU01QKQkJCSs9IHBsYXRzbXAubyBoZWFkc21wLm8KK29iai0kKENPTkZJR19IT1RQTFVHX0NQVSkJCSs9IGhvdHBsdWcubworb2JqLSQoQ09ORklHX0xPQ0FMX1RJTUVSUykJCSs9IGxvY2FsdGltZXIubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9jb3JlLmMgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2NvcmUuYwppbmRleCA0ODJlYjUxLi5lMmM2ZmEyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2NvcmUuYworKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2NvcmUuYwpAQCAtNTUwLDYgKzU1MCwxMSBAQAogCiAJdGltZXJfdGljayhyZWdzKTsKIAorI2lmIGRlZmluZWQoQ09ORklHX1NNUCkgJiYgIWRlZmluZWQoQ09ORklHX0xPQ0FMX1RJTUVSUykKKwlzbXBfc2VuZF90aW1lcigpOworCXVwZGF0ZV9wcm9jZXNzX3RpbWVzKHVzZXJfbW9kZShyZWdzKSk7CisjZW5kaWYKKwogCXdyaXRlX3NlcXVubG9jaygmeHRpbWVfbG9jayk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2hvdHBsdWcuYyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaG90cGx1Zy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5NzQ4Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2hvdHBsdWcuYwpAQCAtMCwwICsxLDEzOCBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2hvdHBsdWcuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDIgQVJNIEx0ZC4KKyAqICBBbGwgUmlnaHRzIFJlc2VydmVkCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgorCitleHRlcm4gdm9sYXRpbGUgaW50IHBlbl9yZWxlYXNlOworCitzdGF0aWMgREVDTEFSRV9DT01QTEVUSU9OKGNwdV9raWxsZWQpOworCitzdGF0aWMgaW5saW5lIHZvaWQgY3B1X2VudGVyX2xvd3Bvd2VyKHZvaWQpCit7CisJdW5zaWduZWQgaW50IHY7CisKKwlhc20gdm9sYXRpbGUoCSJtY3IJcDE1LCAwLCAlMSwgYzcsIGMxNCwgMFxuIgorCSIJbWNyCXAxNSwgMCwgJTEsIGM3LCBjNSwgMFxuIgorCSIJbWNyCXAxNSwgMCwgJTEsIGM3LCBjMTAsIDRcbiIKKwkvKgorCSAqIFR1cm4gb2ZmIGNvaGVyZW5jeQorCSAqLworCSIJbXJjCXAxNSwgMCwgJTAsIGMxLCBjMCwgMVxuIgorCSIJYmljCSUwLCAlMCwgIzB4MjBcbiIKKwkiCW1jcglwMTUsIDAsICUwLCBjMSwgYzAsIDFcbiIKKwkiCW1yYwlwMTUsIDAsICUwLCBjMSwgYzAsIDBcbiIKKwkiCWJpYwklMCwgJTAsICMweDA0XG4iCisJIgltY3IJcDE1LCAwLCAlMCwgYzEsIGMwLCAwXG4iCisJICA6ICI9JnIiICh2KQorCSAgOiAiciIgKDApCisJICA6ICJjYyIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY3B1X2xlYXZlX2xvd3Bvd2VyKHZvaWQpCit7CisJdW5zaWduZWQgaW50IHY7CisKKwlhc20gdm9sYXRpbGUoCSJtcmMJcDE1LCAwLCAlMCwgYzEsIGMwLCAwXG4iCisJIglvcnIJJTAsICUwLCAjMHgwNFxuIgorCSIJbWNyCXAxNSwgMCwgJTAsIGMxLCBjMCwgMFxuIgorCSIJbXJjCXAxNSwgMCwgJTAsIGMxLCBjMCwgMVxuIgorCSIJb3JyCSUwLCAlMCwgIzB4MjBcbiIKKwkiCW1jcglwMTUsIDAsICUwLCBjMSwgYzAsIDFcbiIKKwkgIDogIj0mciIgKHYpCisJICA6CisJICA6ICJjYyIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcGxhdGZvcm1fZG9fbG93cG93ZXIodW5zaWduZWQgaW50IGNwdSkKK3sKKwkvKgorCSAqIHRoZXJlIGlzIG5vIHBvd2VyLWNvbnRyb2wgaGFyZHdhcmUgb24gdGhpcyBwbGF0Zm9ybSwgc28gYWxsCisJICogd2UgY2FuIGRvIGlzIHB1dCB0aGUgY29yZSBpbnRvIFdGSTsgdGhpcyBpcyBzYWZlIGFzIHRoZSBjYWxsaW5nCisJICogY29kZSB3aWxsIGhhdmUgYWxyZWFkeSBkaXNhYmxlZCBpbnRlcnJ1cHRzCisJICovCisJZm9yICg7OykgeworCQkvKgorCQkgKiBoZXJlJ3MgdGhlIFdGSQorCQkgKi8KKwkJYXNtKCIud29yZAkweGUzMjBmMDAzXG4iCisJCSAgICA6CisJCSAgICA6CisJCSAgICA6ICJtZW1vcnkiLCAiY2MiKTsKKworCQlpZiAocGVuX3JlbGVhc2UgPT0gY3B1KSB7CisJCQkvKgorCQkJICogT0ssIHByb3BlciB3YWtldXAsIHdlJ3JlIGRvbmUKKwkJCSAqLworCQkJYnJlYWs7CisJCX0KKworCQkvKgorCQkgKiBnZXR0aW5nIGhlcmUsIG1lYW5zIHRoYXQgd2UgaGF2ZSBjb21lIG91dCBvZiBXRkkgd2l0aG91dAorCQkgKiBoYXZpbmcgYmVlbiB3b2tlbiB1cCAtIHRoaXMgc2hvdWxkbid0IGhhcHBlbgorCQkgKgorCQkgKiBUaGUgdHJvdWJsZSBpcywgbGV0dGluZyBwZW9wbGUga25vdyBhYm91dCB0aGlzIGlzIG5vdCByZWFsbHkKKwkJICogcG9zc2libGUsIHNpbmNlIHdlIGFyZSBjdXJyZW50bHkgcnVubmluZyBpbmNvaGVyZW50bHksIGFuZAorCQkgKiB0aGVyZWZvcmUgY2Fubm90IHNhZmVseSBjYWxsIHByaW50aygpIG9yIGFueXRoaW5nIGVsc2UKKwkJICovCisjaWZkZWYgREVCVUcKKwkJcHJpbnRrKCJDUFUldTogc3B1cmlvdXMgd2FrZXVwIGNhbGxcbiIsIGNwdSk7CisjZW5kaWYKKwl9Cit9CisKK2ludCBwbGF0Zm9ybV9jcHVfa2lsbCh1bnNpZ25lZCBpbnQgY3B1KQoreworCXJldHVybiB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmNwdV9raWxsZWQsIDUwMDApOworfQorCisvKgorICogcGxhdGZvcm0tc3BlY2lmaWMgY29kZSB0byBzaHV0ZG93biBhIENQVQorICoKKyAqIENhbGxlZCB3aXRoIElSUXMgZGlzYWJsZWQKKyAqLwordm9pZCBwbGF0Zm9ybV9jcHVfZGllKHVuc2lnbmVkIGludCBjcHUpCit7CisjaWZkZWYgREVCVUcKKwl1bnNpZ25lZCBpbnQgdGhpc19jcHUgPSBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKTsKKworCWlmIChjcHUgIT0gdGhpc19jcHUpIHsKKwkJcHJpbnRrKEtFUk5fQ1JJVCAiRWVrISBwbGF0Zm9ybV9jcHVfZGllIHJ1bm5pbmcgb24gJXUsIHNob3VsZCBiZSAldVxuIiwKKwkJCSAgIHRoaXNfY3B1LCBjcHUpOworCQlCVUcoKTsKKwl9CisjZW5kaWYKKworCXByaW50ayhLRVJOX05PVElDRSAiQ1BVJXU6IHNodXRkb3duXG4iLCBjcHUpOworCWNvbXBsZXRlKCZjcHVfa2lsbGVkKTsKKworCS8qCisJICogd2UncmUgcmVhZHkgZm9yIHNodXRkb3duIG5vdywgc28gZG8gaXQKKwkgKi8KKwljcHVfZW50ZXJfbG93cG93ZXIoKTsKKwlwbGF0Zm9ybV9kb19sb3dwb3dlcihjcHUpOworCisJLyoKKwkgKiBicmluZyB0aGlzIENQVSBiYWNrIGludG8gdGhlIHdvcmxkIG9mIGNhY2hlCisJICogY29oZXJlbmN5LCBhbmQgdGhlbiByZXN0b3JlIGludGVycnVwdHMKKwkgKi8KKwljcHVfbGVhdmVfbG93cG93ZXIoKTsKK30KKworaW50IG1hY2hfY3B1X2Rpc2FibGUodW5zaWduZWQgaW50IGNwdSkKK3sKKwkvKgorCSAqIHdlIGRvbid0IGFsbG93IENQVSAwIHRvIGJlIHNodXRkb3duIChpdCBpcyBzdGlsbCB0b28gc3BlY2lhbAorCSAqIGUuZy4gY2xvY2sgdGljayBpbnRlcnJ1cHRzKQorCSAqLworCXJldHVybiBjcHUgPT0gMCA/IC1FUEVSTSA6IDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2xvY2FsdGltZXIuYyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvbG9jYWx0aW1lci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlOTE3ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2xvY2FsdGltZXIuYwpAQCAtMCwwICsxLDEzMCBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2xvY2FsdGltZXIuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDIgQVJNIEx0ZC4KKyAqICBBbGwgUmlnaHRzIFJlc2VydmVkCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9hcm1fdHdkLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2dpYy5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKworI2luY2x1ZGUgImNvcmUuaCIKKworI2RlZmluZSBUV0RfQkFTRShjcHUpCShfX2lvX2FkZHJlc3MoUkVBTFZJRVdfVFdEX0JBU0UpICsgXAorCQkJICgoY3B1KSAqIFJFQUxWSUVXX1RXRF9TSVpFKSkKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgbXBjb3JlX3RpbWVyX3JhdGU7CisKKy8qCisgKiBsb2NhbF90aW1lcl9hY2s6IGNoZWNrcyBmb3IgYSBsb2NhbCB0aW1lciBpbnRlcnJ1cHQuCisgKgorICogSWYgYSBsb2NhbCB0aW1lciBpbnRlcnJ1cHQgaGFzIG9jY3VyZWQsIGFja25vd2xlZGdlIGFuZCByZXR1cm4gMS4KKyAqIE90aGVyd2lzZSwgcmV0dXJuIDAuCisgKi8KK2ludCBsb2NhbF90aW1lcl9hY2sodm9pZCkKK3sKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBUV0RfQkFTRShzbXBfcHJvY2Vzc29yX2lkKCkpOworCisJaWYgKF9fcmF3X3JlYWRsKGJhc2UgKyBUV0RfVElNRVJfSU5UU1RBVCkpIHsKKwkJX19yYXdfd3JpdGVsKDEsIGJhc2UgKyBUV0RfVElNRVJfSU5UU1RBVCk7CisJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQorCit2b2lkIF9fY3B1aW5pdCBsb2NhbF90aW1lcl9zZXR1cCh1bnNpZ25lZCBpbnQgY3B1KQoreworCXZvaWQgX19pb21lbSAqYmFzZSA9IFRXRF9CQVNFKGNwdSk7CisJdW5zaWduZWQgaW50IGxvYWQsIG9mZnNldDsKKwl1NjQgd2FpdGppZmZpZXM7CisJdW5zaWduZWQgaW50IGNvdW50OworCisJLyoKKwkgKiBJZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHJvdW5kLCB3ZSBuZWVkIHRvIHdvcmsgb3V0IGhvdyBmYXN0CisJICogdGhlIHRpbWVyIHRpY2tzCisJICovCisJaWYgKG1wY29yZV90aW1lcl9yYXRlID09IDApIHsKKwkJcHJpbnRrKCJDYWxpYnJhdGluZyBsb2NhbCB0aW1lci4uLiAiKTsKKworCQkvKiBXYWl0IGZvciBhIHRpY2sgdG8gc3RhcnQgKi8KKwkJd2FpdGppZmZpZXMgPSBnZXRfamlmZmllc182NCgpICsgMTsKKworCQl3aGlsZSAoZ2V0X2ppZmZpZXNfNjQoKSA8IHdhaXRqaWZmaWVzKQorCQkJdWRlbGF5KDEwKTsKKworCQkvKiBPSywgbm93IHRoZSB0aWNrIGhhcyBzdGFydGVkLCBsZXQncyBnZXQgdGhlIHRpbWVyIGdvaW5nICovCisJCXdhaXRqaWZmaWVzICs9IDU7CisKKwkJCQkgLyogZW5hYmxlLCBubyBpbnRlcnJ1cHQgb3IgcmVsb2FkICovCisJCV9fcmF3X3dyaXRlbCgweDEsIGJhc2UgKyBUV0RfVElNRVJfQ09OVFJPTCk7CisKKwkJCQkgLyogbWF4aW11bSB2YWx1ZSAqLworCQlfX3Jhd193cml0ZWwoMHhGRkZGRkZGRlUsIGJhc2UgKyBUV0RfVElNRVJfQ09VTlRFUik7CisKKwkJd2hpbGUgKGdldF9qaWZmaWVzXzY0KCkgPCB3YWl0amlmZmllcykKKwkJCXVkZWxheSgxMCk7CisKKwkJY291bnQgPSBfX3Jhd19yZWFkbChiYXNlICsgVFdEX1RJTUVSX0NPVU5URVIpOworCisJCW1wY29yZV90aW1lcl9yYXRlID0gKDB4RkZGRkZGRkZVIC0gY291bnQpICogKEhaIC8gNSk7CisKKwkJcHJpbnRrKCIlbHUuJTAybHVNSHouXG4iLCBtcGNvcmVfdGltZXJfcmF0ZSAvIDEwMDAwMDAsCisJCQkobXBjb3JlX3RpbWVyX3JhdGUgLyAxMDAwMDApICUgMTAwKTsKKwl9CisKKwlsb2FkID0gbXBjb3JlX3RpbWVyX3JhdGUgLyBIWjsKKworCV9fcmF3X3dyaXRlbChsb2FkLCBiYXNlICsgVFdEX1RJTUVSX0xPQUQpOworCV9fcmF3X3dyaXRlbCgweDcsICBiYXNlICsgVFdEX1RJTUVSX0NPTlRST0wpOworCisJLyoKKwkgKiBOb3cgbWFuZXV2ZXIgb3VyIGxvY2FsIHRpY2sgaW50byB0aGUgcmlnaHQgcGFydCBvZiB0aGUgamlmZnkuCisJICogU3RhcnQgYnkgd29ya2luZyBvdXQgd2hlcmUgd2l0aGluIHRoZSB0aWNrIG91ciBsb2NhbCB0aW1lcgorCSAqIGludGVycnVwdCBzaG91bGQgZ28uCisJICovCisJb2Zmc2V0ID0gKChtcGNvcmVfdGltZXJfcmF0ZSAvIEhaKSAvIChOUl9DUFVTICsgMSkpICogKGNwdSArIDEpOworCisJLyoKKwkgKiBnZXR0aW1lb2Zmc2V0KCkgd2lsbCByZXR1cm4gYSBudW1iZXIgb2YgdXMgc2luY2UgdGhlIGxhc3QgdGljay4KKwkgKiBDb252ZXJ0IHRoaXMgbnVtYmVyIG9mIHVzIHRvIGEgbG9jYWwgdGltZXIgdGljayBjb3VudC4KKwkgKiBCZSBjYXJlZnVsIG9mIGludGVnZXIgb3ZlcmZsb3cgd2hpbHN0IGtlZXBpbmcgbWF4aW11bSBwcmVjaXNpb24uCisJICoKKwkgKiB3aXRoIEhaPTEwMCBhbmQgMU1IeiAoZnBnYSkgfiAxR0h6IHByb2Nlc3NvcjoKKwkgKiBsb2FkID0gMSB+IDEwLDAwMAorCSAqIG1wY29yZV90aW1lcl9yYXRlLzEwMDAwID0gMTAwIH4gMTAwLDAwMAorCSAqCisJICogc28gdGhlIG11bHRpcGx5IHZhbHVlIHdpbGwgYmUgbGVzcyB0aGFuIDEwXjkgYWx3YXlzLgorCSAqLworCWxvYWQgPSAoc3lzdGVtX3RpbWVyLT5vZmZzZXQoKSAqIChtcGNvcmVfdGltZXJfcmF0ZSAvIDEwMDAwKSkgLyAxMDA7CisKKwkvKiBBZGQgb24gb3VyIG9mZnNldCB0byBnZXQgdGhlIGxvYWQgdmFsdWUgKi8KKwlsb2FkID0gKGxvYWQgKyBvZmZzZXQpICUgKG1wY29yZV90aW1lcl9yYXRlIC8gSFopOworCisJX19yYXdfd3JpdGVsKGxvYWQsIGJhc2UgKyBUV0RfVElNRVJfQ09VTlRFUik7CisKKwkvKiBNYWtlIHN1cmUgb3VyIGxvY2FsIGludGVycnVwdCBjb250cm9sbGVyIGhhcyB0aGlzIGVuYWJsZWQgKi8KKwlfX3Jhd193cml0ZWwoMSA8PCBJUlFfTE9DQUxUSU1FUiwKKwkJICAgICBfX2lvX2FkZHJlc3MoUkVBTFZJRVdfR0lDX0RJU1RfQkFTRSkgKyBHSUNfRElTVF9FTkFCTEVfU0VUKTsKK30KKworLyoKKyAqIHRha2UgYSBsb2NhbCB0aW1lciBkb3duCisgKi8KK3ZvaWQgX19jcHVleGl0IGxvY2FsX3RpbWVyX3N0b3AodW5zaWduZWQgaW50IGNwdSkKK3sKKwlfX3Jhd193cml0ZWwoMCwgVFdEX0JBU0UoY3B1KSArIFRXRF9USU1FUl9DT05UUk9MKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcGxhdHNtcC5jIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9wbGF0c21wLmMKaW5kZXggOTg0NDY0NC4uMGM3ZDRhYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9wbGF0c21wLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9wbGF0c21wLmMKQEAgLTMyLDcgKzMyLDcgQEAKIHsKIAl1bnNpZ25lZCBpbnQgbmNvcmVzOwogCi0JbmNvcmVzID0gX19yYXdfcmVhZGwoSU9fQUREUkVTUyhSRUFMVklFV19NUENPUkVfU0NVX0JBU0UpICsgU0NVX0NPTkZJRyk7CisJbmNvcmVzID0gX19yYXdfcmVhZGwoX19pb19hZGRyZXNzKFJFQUxWSUVXX01QQ09SRV9TQ1VfQkFTRSkgKyBTQ1VfQ09ORklHKTsKIAogCXJldHVybiAobmNvcmVzICYgMHgwMykgKyAxOwogfQpAQCAtMTMzLDEyICsxMzMsMTIgQEAKICNpZiAxCiAjZGVmaW5lIFJFQUxWSUVXX1NZU19GTEFHU1NfT0ZGU0VUIDB4MzAKIAlfX3Jhd193cml0ZWwodmlydF90b19waHlzKHJlYWx2aWV3X3NlY29uZGFyeV9zdGFydHVwKSwKLQkJICAgICAoSU9fQUREUkVTUyhSRUFMVklFV19TWVNfQkFTRSkgKwotCQkgICAgICBSRUFMVklFV19TWVNfRkxBR1NTX09GRlNFVCkpOworCQkgICAgIF9faW9fYWRkcmVzcyhSRUFMVklFV19TWVNfQkFTRSkgKworCQkgICAgIFJFQUxWSUVXX1NZU19GTEFHU1NfT0ZGU0VUKTsKICNkZWZpbmUgUkVBTFZJRVdfU1lTX0ZMQUdTQ19PRkZTRVQgMHgzNAogCV9fcmF3X3dyaXRlbCgzLAotCQkgICAgIChJT19BRERSRVNTKFJFQUxWSUVXX1NZU19CQVNFKSArCi0JCSAgICAgIFJFQUxWSUVXX1NZU19GTEFHU0NfT0ZGU0VUKSk7CisJCSAgICAgX19pb19hZGRyZXNzKFJFQUxWSUVXX1NZU19CQVNFKSArCisJCSAgICAgUkVBTFZJRVdfU1lTX0ZMQUdTQ19PRkZTRVQpOwogI2VuZGlmCiAKIAltYigpOwpAQCAtMTc1LDYgKzE3NSwxMSBAQAogCQltYXhfY3B1cyA9IG5jb3JlczsKIAogCS8qCisJICogRW5hYmxlIHRoZSBsb2NhbCB0aW1lciBmb3IgcHJpbWFyeSBDUFUKKwkgKi8KKwlsb2NhbF90aW1lcl9zZXR1cChjcHUpOworCisJLyoKIAkgKiBJbml0aWFsaXNlIHRoZSBwb3NzaWJsZS9wcmVzZW50IG1hcHMuCiAJICogY3B1X3Bvc3NpYmxlX21hcCBkZXNjcmliZXMgdGhlIHNldCBvZiBDUFVzIHdoaWNoIG1heSBiZSBwcmVzZW50CiAJICogY3B1X3ByZXNlbnRfbWFwIGRlc2NyaWJlcyB0aGUgc2V0IG9mIENQVXMgcG9wdWxhdGVkCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9LY29uZmlnCmluZGV4IGM3OTZiY2QuLjBiOWQ3Y2EgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9LY29uZmlnCkBAIC0xMjEsNiArMTIxLDE0IEBACiAJICBzeXN0ZW0gcmVzZXRzIGRlcGVuZHMgb24gdGhlIHZhbHVlIG9mIFBDTEsuIFRoZSB0aW1lb3V0IG9uIGFuCiAJICAyMDBNSHogczNjMjQxMCBzaG91bGQgYmUgYWJvdXQgMzAgc2Vjb25kcy4KIAorY29uZmlnIFMzQzI0MTBfQk9PVF9FUlJPUl9SRVNFVAorCWJvb2wgIlMzQzI0MTAgUmVib290IG9uIGRlY29tcHJlc3Npb24gZXJyb3IiCisJZGVwZW5kcyBvbiBBUkNIX1MzQzI0MTAKKwloZWxwCisJICBTYXkgeSBoZXJlIHRvIHVzZSB0aGUgd2F0Y2hkb2cgdG8gcmVzZXQgdGhlIHN5c3RlbSBpZiB0aGUKKwkgIGtlcm5lbCBkZWNvbXByZXNzb3IgZGV0ZWN0cyBhbiBlcnJvciBkdXJpbmcgZGVjb21wcmVzc2lvbi4KKworCiBjb21tZW50ICJTM0MyNDEwIFNldHVwIgogCiBjb25maWcgUzNDMjQxMF9ETUEKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWFudWJpcy5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtYW51YmlzLmMKaW5kZXggODM5MGI2OC4uMGY4MWZjMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtYW51YmlzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtYW51YmlzLmMKQEAgLTU2LDggKzU2LDE2IEBACiBzdGF0aWMgc3RydWN0IG1hcF9kZXNjIGFudWJpc19pb2Rlc2NbXSBfX2luaXRkYXRhID0gewogICAvKiBJU0EgSU8gYXJlYXMgKi8KIAotICB7ICh1MzIpUzNDMjRYWF9WQV9JU0FfQllURSwgMHgwLAkgICBTWl8xNk0sIE1UX0RFVklDRSB9LAotICB7ICh1MzIpUzNDMjRYWF9WQV9JU0FfV09SRCwgMHgwLAkgICBTWl8xNk0sIE1UX0RFVklDRSB9LAorICB7CisJLnZpcnR1YWwJPSAodTMyKVMzQzI0WFhfVkFfSVNBX0JZVEUsCisJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKDB4MCksCisJLmxlbmd0aAkJPSBTWl80TSwKKwkudHlwZQkJPSBNVF9ERVZJQ0UKKyAgfSwgeworCS52aXJ0dWFsCT0gKHUzMilTM0MyNFhYX1ZBX0lTQV9XT1JELAorCS5wZm4JCT0gX19waHlzX3RvX3BmbigweDApLAorCS5sZW5ndGggCT0gU1pfNE0sIE1UX0RFVklDRQorICB9LAogCiAgIC8qIHdlIGNvdWxkIHBvc3NpYmx5IGNvbXByZXNzIHRoZSBuZXh0IHNldCBkb3duIGludG8gYSBzZXQgb2Ygc21hbGxlciB0YWJsZXMKICAgICogcGFnZXRhYmxlcywgYnV0IHRoYXQgd291bGQgbWVhbiB1c2luZyBhbiBMMiBzZWN0aW9uLCBhbmQgaXQgc3RpbGwgbWVhbnMKQEAgLTY2LDE2ICs3NCw0MSBAQAogCiAgIC8qIENQTEQgY29udHJvbCByZWdpc3RlcnMgKi8KIAotICB7ICh1MzIpQU5VQklTX1ZBX0NUUkwxLAlBTlVCSVNfUEFfQ1RSTDEsCVNaXzRLLCBNVF9ERVZJQ0UgfSwKLSAgeyAodTMyKUFOVUJJU19WQV9DVFJMMiwJQU5VQklTX1BBX0NUUkwyLAlTWl80SywgTVRfREVWSUNFIH0sCisgIHsKKwkudmlydHVhbAk9ICh1MzIpQU5VQklTX1ZBX0NUUkwxLAorCS5wZm4JCT0gX19waHlzX3RvX3BmbihBTlVCSVNfUEFfQ1RSTDEpLAorCS5sZW5ndGgJCT0gU1pfNEssCisJLnR5cGUJCT0gTVRfREVWSUNFCisgIH0sIHsKKwkudmlydHVhbAk9ICh1MzIpQU5VQklTX1ZBX0NUUkwyLAorCS5wZm4JCT0gX19waHlzX3RvX3BmbihBTlVCSVNfUEFfQ1RSTDIpLAorCS5sZW5ndGgJCT0gU1pfNEssCisJLnR5cGUJCT1NVF9ERVZJQ0UKKyAgfSwKIAogICAvKiBJREUgZHJpdmVzICovCiAKLSAgeyAodTMyKUFOVUJJU19JREVQUkksCQlTM0MyNDEwX0NTMywJCVNaXzFNLCBNVF9ERVZJQ0UgfSwKLSAgeyAodTMyKUFOVUJJU19JREVQUklBVVgsCVMzQzI0MTBfQ1MzKygxPDwyNiksCVNaXzFNLCBNVF9ERVZJQ0UgfSwKLQotICB7ICh1MzIpQU5VQklTX0lERVNFQywJCVMzQzI0MTBfQ1M0LAkJU1pfMU0sIE1UX0RFVklDRSB9LAotICB7ICh1MzIpQU5VQklTX0lERVNFQ0FVWCwJUzNDMjQxMF9DUzQrKDE8PDI2KSwJU1pfMU0sIE1UX0RFVklDRSB9LAorICB7CisJLnZpcnR1YWwJPSAodTMyKUFOVUJJU19JREVQUkksCisJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFMzQzI0MTBfQ1MzKSwKKwkubGVuZ3RoCQk9IFNaXzFNLAorCS50eXBlCQk9IE1UX0RFVklDRQorICB9LCB7CisJLnZpcnR1YWwJPSAodTMyKUFOVUJJU19JREVQUklBVVgsCisJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFMzQzI0MTBfQ1MzKygxPDwyNikpLAorCS5sZW5ndGgJCT0gU1pfMU0sCisJLnR5cGUJCT0gTVRfREVWSUNFCisgIH0sIHsKKwkudmlydHVhbAk9ICh1MzIpQU5VQklTX0lERVNFQywKKwkucGZuCQk9IF9fcGh5c190b19wZm4oUzNDMjQxMF9DUzQpLAorCS5sZW5ndGgJCT0gU1pfMU0sCisJLnR5cGUJCT0gTVRfREVWSUNFCisgIH0sIHsKKwkudmlydHVhbAk9ICh1MzIpQU5VQklTX0lERVNFQ0FVWCwKKwkucGZuCQk9IF9fcGh5c190b19wZm4oUzNDMjQxMF9DUzQrKDE8PDI2KSksCisJLmxlbmd0aAkJPSBTWl8xTSwKKwkudHlwZQkJPSBNVF9ERVZJQ0UKKyAgfSwKIH07CiAKICNkZWZpbmUgVUNPTiBTM0MyNDEwX1VDT05fREVGQVVMVCB8IFMzQzI0MTBfVUNPTl9VQ0xLCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1iYXN0LmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1iYXN0LmMKaW5kZXggMGI3MWM4OS4uMWJlMjU2NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtYmFzdC5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWJhc3QuYwpAQCAtODksMzIgKzg5LDYzIEBACiAKIC8qIG1hY3JvcyB0byBtb2RpZnkgdGhlIHBoeXNpY2FsIGFkZHJlc3NlcyBmb3IgaW8gc3BhY2UgKi8KIAotI2RlZmluZSBQQV9DUzIoaXRlbSkgKChpdGVtKSArIFMzQzI0MTBfQ1MyKQotI2RlZmluZSBQQV9DUzMoaXRlbSkgKChpdGVtKSArIFMzQzI0MTBfQ1MzKQotI2RlZmluZSBQQV9DUzQoaXRlbSkgKChpdGVtKSArIFMzQzI0MTBfQ1M0KQotI2RlZmluZSBQQV9DUzUoaXRlbSkgKChpdGVtKSArIFMzQzI0MTBfQ1M1KQorI2RlZmluZSBQQV9DUzIoaXRlbSkgKF9fcGh5c190b19wZm4oKGl0ZW0pICsgUzNDMjQxMF9DUzIpKQorI2RlZmluZSBQQV9DUzMoaXRlbSkgKF9fcGh5c190b19wZm4oKGl0ZW0pICsgUzNDMjQxMF9DUzMpKQorI2RlZmluZSBQQV9DUzQoaXRlbSkgKF9fcGh5c190b19wZm4oKGl0ZW0pICsgUzNDMjQxMF9DUzQpKQorI2RlZmluZSBQQV9DUzUoaXRlbSkgKF9fcGh5c190b19wZm4oKGl0ZW0pICsgUzNDMjQxMF9DUzUpKQogCiBzdGF0aWMgc3RydWN0IG1hcF9kZXNjIGJhc3RfaW9kZXNjW10gX19pbml0ZGF0YSA9IHsKICAgLyogSVNBIElPIGFyZWFzICovCi0KLSAgeyAodTMyKVMzQzI0WFhfVkFfSVNBX0JZVEUsIFBBX0NTMihCQVNUX1BBX0lTQUlPKSwgICBTWl8xNk0sIE1UX0RFVklDRSB9LAotICB7ICh1MzIpUzNDMjRYWF9WQV9JU0FfV09SRCwgUEFfQ1MzKEJBU1RfUEFfSVNBSU8pLCAgIFNaXzE2TSwgTVRfREVWSUNFIH0sCi0KLSAgLyogd2UgY291bGQgcG9zc2libHkgY29tcHJlc3MgdGhlIG5leHQgc2V0IGRvd24gaW50byBhIHNldCBvZiBzbWFsbGVyIHRhYmxlcwotICAgKiBwYWdldGFibGVzLCBidXQgdGhhdCB3b3VsZCBtZWFuIHVzaW5nIGFuIEwyIHNlY3Rpb24sIGFuZCBpdCBzdGlsbCBtZWFucwotICAgKiB3ZSBjYW5ub3QgYWN0dWFsbHkgZmVlZCB0aGUgc2FtZSByZWdpc3RlciB0byBhbiBMRFIgZHVlIHRvIDE2SyBzcGFjaW5nCi0gICAqLwotCisgIHsKKwkgIC52aXJ0dWFsCT0gKHUzMilTM0MyNFhYX1ZBX0lTQV9CWVRFLAorCSAgLnBmbgkJPSBQQV9DUzIoQkFTVF9QQV9JU0FJTyksCisJICAubGVuZ3RoCT0gU1pfMTZNLAorCSAgLnR5cGUJCT0gTVRfREVWSUNFLAorICB9LCB7CisJICAudmlydHVhbAk9ICh1MzIpUzNDMjRYWF9WQV9JU0FfV09SRCwKKwkgIC5wZm4JCT0gUEFfQ1MzKEJBU1RfUEFfSVNBSU8pLAorCSAgLmxlbmd0aAk9IFNaXzE2TSwKKwkgIC50eXBlCQk9IE1UX0RFVklDRSwKKyAgfSwKICAgLyogYmFzdCBDUExEIGNvbnRyb2wgcmVnaXN0ZXJzLCBhbmQgZXh0ZXJuYWwgaW50ZXJydXB0IGNvbnRyb2xzICovCi0gIHsgKHUzMilCQVNUX1ZBX0NUUkwxLCBCQVNUX1BBX0NUUkwxLAkJICAgU1pfMU0sIE1UX0RFVklDRSB9LAotICB7ICh1MzIpQkFTVF9WQV9DVFJMMiwgQkFTVF9QQV9DVFJMMiwJCSAgIFNaXzFNLCBNVF9ERVZJQ0UgfSwKLSAgeyAodTMyKUJBU1RfVkFfQ1RSTDMsIEJBU1RfUEFfQ1RSTDMsCQkgICBTWl8xTSwgTVRfREVWSUNFIH0sCi0gIHsgKHUzMilCQVNUX1ZBX0NUUkw0LCBCQVNUX1BBX0NUUkw0LAkJICAgU1pfMU0sIE1UX0RFVklDRSB9LAotCisgIHsKKwkgIC52aXJ0dWFsCT0gKHUzMilCQVNUX1ZBX0NUUkwxLAorCSAgLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEJBU1RfUEFfQ1RSTDEpLAorCSAgLmxlbmd0aAk9IFNaXzFNLAorCSAgLnR5cGUJCT0gTVRfREVWSUNFLAorICB9LCB7CisJICAudmlydHVhbAk9ICh1MzIpQkFTVF9WQV9DVFJMMiwKKwkgIC5wZm4JCT0gX19waHlzX3RvX3BmbihCQVNUX1BBX0NUUkwyKSwKKwkgIC5sZW5ndGgJPSBTWl8xTSwKKwkgIC50eXBlCQk9IE1UX0RFVklDRSwKKyAgfSwgeworCSAgLnZpcnR1YWwJPSAodTMyKUJBU1RfVkFfQ1RSTDMsCisJICAucGZuCQk9IF9fcGh5c190b19wZm4oQkFTVF9QQV9DVFJMMyksCisJICAubGVuZ3RoCT0gU1pfMU0sCisJICAudHlwZQkJPSBNVF9ERVZJQ0UsCisgIH0sIHsKKwkgIC52aXJ0dWFsCT0gKHUzMilCQVNUX1ZBX0NUUkw0LAorCSAgLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEJBU1RfUEFfQ1RSTDQpLAorCSAgLmxlbmd0aAk9IFNaXzFNLAorCSAgLnR5cGUJCT0gTVRfREVWSUNFLAorICB9LAogICAvKiBQQzEwNCBJUlEgbXV4ICovCi0gIHsgKHUzMilCQVNUX1ZBX1BDMTA0X0lSUVJFUSwgIEJBU1RfUEFfUEMxMDRfSVJRUkVRLCAgIFNaXzFNLCBNVF9ERVZJQ0UgfSwKLSAgeyAodTMyKUJBU1RfVkFfUEMxMDRfSVJRUkFXLCAgQkFTVF9QQV9QQzEwNF9JUlFSQVcsICAgU1pfMU0sIE1UX0RFVklDRSB9LAotICB7ICh1MzIpQkFTVF9WQV9QQzEwNF9JUlFNQVNLLCBCQVNUX1BBX1BDMTA0X0lSUU1BU0ssICBTWl8xTSwgTVRfREVWSUNFIH0sCisgIHsKKwkgIC52aXJ0dWFsCT0gKHUzMilCQVNUX1ZBX1BDMTA0X0lSUVJFUSwKKwkgIC5wZm4JCT0gX19waHlzX3RvX3BmbihCQVNUX1BBX1BDMTA0X0lSUVJFUSksCisJICAubGVuZ3RoCT0gU1pfMU0sCisJICAudHlwZQkJPSBNVF9ERVZJQ0UsCisgIH0sIHsKKwkgIC52aXJ0dWFsCT0gKHUzMilCQVNUX1ZBX1BDMTA0X0lSUVJBVywKKwkgIC5wZm4JCT0gX19waHlzX3RvX3BmbihCQVNUX1BBX1BDMTA0X0lSUVJBVyksCisJICAubGVuZ3RoCT0gU1pfMU0sCisJICAudHlwZQkJPSBNVF9ERVZJQ0UsCisgIH0sIHsKKwkgIC52aXJ0dWFsCT0gKHUzMilCQVNUX1ZBX1BDMTA0X0lSUU1BU0ssCisJICAucGZuCQk9IF9fcGh5c190b19wZm4oQkFTVF9QQV9QQzEwNF9JUlFNQVNLKSwKKwkgIC5sZW5ndGgJPSBTWl8xTSwKKwkgIC50eXBlCQk9IE1UX0RFVklDRSwKKyAgfSwKIAogICAvKiBwZXJpcGhlcmFsIHNwYWNlLi4uIG9uZSBmb3IgZWFjaCBvZiBmYXN0L3Nsb3cvYnl0ZS8xNmJpdCAqLwogICAvKiBub3RlLCBpZGUgaXMgb25seSBkZWNvZGVkIGluIHdvcmQgc3BhY2UsIGV2ZW4gdGhvdWdoIHNvbWUgcmVnaXN0ZXJzCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1yeDM3MTUuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXJ4MzcxNS5jCmluZGV4IDI0ZDY5MDEuLmY4ZDg2ZDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXJ4MzcxNS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXJ4MzcxNS5jCkBAIC01Niw4ICs1NiwxNyBAQAogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyByeDM3MTVfaW9kZXNjW10gX19pbml0ZGF0YSA9IHsKIAkvKiBkdW1wIElTQSBzcGFjZSBzb21ld2hlcmUgdW51c2VkICovCiAKLQl7ICh1MzIpUzNDMjRYWF9WQV9JU0FfV09SRCwgUzNDMjQxMF9DUzMsIFNaXzE2TSwgTVRfREVWSUNFIH0sCi0JeyAodTMyKVMzQzI0WFhfVkFfSVNBX0JZVEUsIFMzQzI0MTBfQ1MzLCBTWl8xNk0sIE1UX0RFVklDRSB9LAorCXsKKwkJLnZpcnR1YWwJPSAodTMyKVMzQzI0WFhfVkFfSVNBX1dPUkQsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihTM0MyNDEwX0NTMyksCisJCS5sZW5ndGgJCT0gU1pfMU0sCisJCS50eXBlCQk9IE1UX0RFVklDRSwKKwl9LCB7CisJCS52aXJ0dWFsCT0gKHUzMilTM0MyNFhYX1ZBX0lTQV9CWVRFLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oUzNDMjQxMF9DUzMpLAorCQkubGVuZ3RoCQk9IFNaXzFNLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UsCisJfSwKIH07CiAKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtc21kazI0NDAuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXNtZGsyNDQwLmMKaW5kZXggZDY2NmM2Mi4uNGUzMTExOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtc21kazI0NDAuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1zbWRrMjQ0MC5jCkBAIC01OCw4ICs1OCwyNyBAQAogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBzbWRrMjQ0MF9pb2Rlc2NbXSBfX2luaXRkYXRhID0gewogCS8qIElTQSBJTyBTcGFjZSBtYXAgKG1lbW9yeSBzcGFjZSBzZWxlY3RlZCBieSBBMjQpICovCiAKLQl7ICh1MzIpUzNDMjRYWF9WQV9JU0FfV09SRCwgUzNDMjQxMF9DUzIsIFNaXzE2TSwgTVRfREVWSUNFIH0sCi0JeyAodTMyKVMzQzI0WFhfVkFfSVNBX0JZVEUsIFMzQzI0MTBfQ1MyLCBTWl8xNk0sIE1UX0RFVklDRSB9LAorCXsKKwkJLnZpcnR1YWwJPSAodTMyKVMzQzI0WFhfVkFfSVNBX1dPUkQsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihTM0MyNDEwX0NTMiksCisJCS5sZW5ndGgJCT0gMHgxMDAwMCwKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwJPSAodTMyKVMzQzI0WFhfVkFfSVNBX1dPUkQgKyAweDEwMDAwLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oUzNDMjQxMF9DUzIgKyAoMTw8MjQpKSwKKwkJLmxlbmd0aAkJPSBTWl80TSwKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwJPSAodTMyKVMzQzI0WFhfVkFfSVNBX0JZVEUsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihTM0MyNDEwX0NTMiksCisJCS5sZW5ndGgJCT0gMHgxMDAwMCwKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwJPSAodTMyKVMzQzI0WFhfVkFfSVNBX0JZVEUgKyAweDEwMDAwLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oUzNDMjQxMF9DUzIgKyAoMTw8MjQpKSwKKwkJLmxlbmd0aAkJPSBTWl80TSwKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0KIH07CiAKICNkZWZpbmUgVUNPTiBTM0MyNDEwX1VDT05fREVGQVVMVCB8IFMzQzI0MTBfVUNPTl9VQ0xLCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC12cjEwMDAuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXZyMTAwMC5jCmluZGV4IDQ2YjI1OTYuLmFlN2UwOTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXZyMTAwMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXZyMTAwMC5jCkBAIC03NCwyNyArNzQsNDcgQEAKIAogLyogbWFjcm9zIHRvIG1vZGlmeSB0aGUgcGh5c2ljYWwgYWRkcmVzc2VzIGZvciBpbyBzcGFjZSAqLwogCi0jZGVmaW5lIFBBX0NTMihpdGVtKSAoKGl0ZW0pICsgUzNDMjQxMF9DUzIpCi0jZGVmaW5lIFBBX0NTMyhpdGVtKSAoKGl0ZW0pICsgUzNDMjQxMF9DUzMpCi0jZGVmaW5lIFBBX0NTNChpdGVtKSAoKGl0ZW0pICsgUzNDMjQxMF9DUzQpCi0jZGVmaW5lIFBBX0NTNShpdGVtKSAoKGl0ZW0pICsgUzNDMjQxMF9DUzUpCisjZGVmaW5lIFBBX0NTMihpdGVtKSAoX19waHlzX3RvX3BmbigoaXRlbSkgKyBTM0MyNDEwX0NTMikpCisjZGVmaW5lIFBBX0NTMyhpdGVtKSAoX19waHlzX3RvX3BmbigoaXRlbSkgKyBTM0MyNDEwX0NTMykpCisjZGVmaW5lIFBBX0NTNChpdGVtKSAoX19waHlzX3RvX3BmbigoaXRlbSkgKyBTM0MyNDEwX0NTNCkpCisjZGVmaW5lIFBBX0NTNShpdGVtKSAoX19waHlzX3RvX3BmbigoaXRlbSkgKyBTM0MyNDEwX0NTNSkpCiAKIHN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgdnIxMDAwX2lvZGVzY1tdIF9faW5pdGRhdGEgPSB7CiAgIC8qIElTQSBJTyBhcmVhcyAqLworICB7CisJICAudmlydHVhbAk9ICh1MzIpUzNDMjRYWF9WQV9JU0FfQllURSwKKwkgIC5wZm4JCT0gUEFfQ1MyKEJBU1RfUEFfSVNBSU8pLAorCSAgLmxlbmd0aAk9IFNaXzE2TSwKKwkgIC50eXBlCQk9IE1UX0RFVklDRSwKKyAgfSwgeworCSAgLnZpcnR1YWwJPSAodTMyKVMzQzI0WFhfVkFfSVNBX1dPUkQsCisJICAucGZuCQk9IFBBX0NTMyhCQVNUX1BBX0lTQUlPKSwKKwkgIC5sZW5ndGgJPSBTWl8xNk0sCisJICAudHlwZQkJPSBNVF9ERVZJQ0UsCisgIH0sCiAKLSAgeyAodTMyKVMzQzI0WFhfVkFfSVNBX0JZVEUsIFBBX0NTMihCQVNUX1BBX0lTQUlPKSwJICAgU1pfMTZNLCBNVF9ERVZJQ0UgfSwKLSAgeyAodTMyKVMzQzI0WFhfVkFfSVNBX1dPUkQsIFBBX0NTMyhCQVNUX1BBX0lTQUlPKSwJICAgU1pfMTZNLCBNVF9ERVZJQ0UgfSwKLQotICAvKiB3ZSBjb3VsZCBwb3NzaWJseSBjb21wcmVzcyB0aGUgbmV4dCBzZXQgZG93biBpbnRvIGEgc2V0IG9mIHNtYWxsZXIgdGFibGVzCi0gICAqIHBhZ2V0YWJsZXMsIGJ1dCB0aGF0IHdvdWxkIG1lYW4gdXNpbmcgYW4gTDIgc2VjdGlvbiwgYW5kIGl0IHN0aWxsIG1lYW5zCi0gICAqIHdlIGNhbm5vdCBhY3R1YWxseSBmZWVkIHRoZSBzYW1lIHJlZ2lzdGVyIHRvIGFuIExEUiBkdWUgdG8gMTZLIHNwYWNpbmcKLSAgICovCi0KLSAgLyogYmFzdCBDUExEIGNvbnRyb2wgcmVnaXN0ZXJzLCBhbmQgZXh0ZXJuYWwgaW50ZXJydXB0IGNvbnRyb2xzICovCi0gIHsgKHUzMilWUjEwMDBfVkFfQ1RSTDEsIFZSMTAwMF9QQV9DVFJMMSwJICAgICAgIFNaXzFNLCBNVF9ERVZJQ0UgfSwKLSAgeyAodTMyKVZSMTAwMF9WQV9DVFJMMiwgVlIxMDAwX1BBX0NUUkwyLAkgICAgICAgU1pfMU0sIE1UX0RFVklDRSB9LAotICB7ICh1MzIpVlIxMDAwX1ZBX0NUUkwzLCBWUjEwMDBfUEFfQ1RSTDMsCSAgICAgICBTWl8xTSwgTVRfREVWSUNFIH0sCi0gIHsgKHUzMilWUjEwMDBfVkFfQ1RSTDQsIFZSMTAwMF9QQV9DVFJMNCwJICAgICAgIFNaXzFNLCBNVF9ERVZJQ0UgfSwKKyAgLyogIENQTEQgY29udHJvbCByZWdpc3RlcnMsIGFuZCBleHRlcm5hbCBpbnRlcnJ1cHQgY29udHJvbHMgKi8KKyAgeworCSAgLnZpcnR1YWwJPSAodTMyKVZSMTAwMF9WQV9DVFJMMSwKKwkgIC5wZm4JCT0gX19waHlzX3RvX3BmbihWUjEwMDBfUEFfQ1RSTDEpLAorCSAgLmxlbmd0aAk9IFNaXzFNLAorCSAgLnR5cGUJCT0gTVRfREVWSUNFLAorICB9LCB7CisJICAudmlydHVhbAk9ICh1MzIpVlIxMDAwX1ZBX0NUUkwyLAorCSAgLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFZSMTAwMF9QQV9DVFJMMiksCisJICAubGVuZ3RoCT0gU1pfMU0sCisJICAudHlwZQkJPSBNVF9ERVZJQ0UsCisgIH0sIHsKKwkgIC52aXJ0dWFsCT0gKHUzMilWUjEwMDBfVkFfQ1RSTDMsCisJICAucGZuCQk9IF9fcGh5c190b19wZm4oVlIxMDAwX1BBX0NUUkwzKSwKKwkgIC5sZW5ndGgJPSBTWl8xTSwKKwkgIC50eXBlCQk9IE1UX0RFVklDRSwKKyAgfSwgeworCSAgLnZpcnR1YWwJPSAodTMyKVZSMTAwMF9WQV9DVFJMNCwKKwkgIC5wZm4JCT0gX19waHlzX3RvX3BmbihWUjEwMDBfUEFfQ1RSTDQpLAorCSAgLmxlbmd0aAk9IFNaXzFNLAorCSAgLnR5cGUJCT0gTVRfREVWSUNFLAorICB9LAogCiAgIC8qIHBlcmlwaGVyYWwgc3BhY2UuLi4gb25lIGZvciBlYWNoIG9mIGZhc3Qvc2xvdy9ieXRlLzE2Yml0ICovCiAgIC8qIG5vdGUsIGlkZSBpcyBvbmx5IGRlY29kZWQgaW4gd29yZCBzcGFjZSwgZXZlbiB0aG91Z2ggc29tZSByZWdpc3RlcnMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL25lcG9uc2V0LmMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9uZXBvbnNldC5jCmluZGV4IDY5ZjE5NzAuLjllMDJiYzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL25lcG9uc2V0LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvbmVwb25zZXQuYwpAQCAtMTM3LDcgKzEzNyw3IEBACiAJLmdldF9tY3RybAk9IG5lcG9uc2V0X2dldF9tY3RybCwKIH07CiAKLXN0YXRpYyBpbnQgbmVwb25zZXRfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBuZXBvbnNldF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc2ExMTAwX3JlZ2lzdGVyX3VhcnRfZm5zKCZuZXBvbnNldF9wb3J0X2Zucyk7CiAKQEAgLTE3OCwyNyArMTc4LDI3IEBACiAvKgogICogTERNIHBvd2VyIG1hbmFnZW1lbnQuCiAgKi8KLXN0YXRpYyBpbnQgbmVwb25zZXRfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgbmVwb25zZXRfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAkvKgogCSAqIFNhdmUgc3RhdGUuCiAJICovCi0JaWYgKCFkZXYtPnBvd2VyLnNhdmVkX3N0YXRlKQotCQlkZXYtPnBvd2VyLnNhdmVkX3N0YXRlID0ga21hbGxvYyhzaXplb2YodW5zaWduZWQgaW50KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkZXYtPnBvd2VyLnNhdmVkX3N0YXRlKQorCWlmICghZGV2LT5kZXYucG93ZXIuc2F2ZWRfc3RhdGUpCisJCWRldi0+ZGV2LnBvd2VyLnNhdmVkX3N0YXRlID0ga21hbGxvYyhzaXplb2YodW5zaWduZWQgaW50KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXYtPmRldi5wb3dlci5zYXZlZF9zdGF0ZSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQkqKHVuc2lnbmVkIGludCAqKWRldi0+cG93ZXIuc2F2ZWRfc3RhdGUgPSBOQ1JfMDsKKwkqKHVuc2lnbmVkIGludCAqKWRldi0+ZGV2LnBvd2VyLnNhdmVkX3N0YXRlID0gTkNSXzA7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBuZXBvbnNldF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBuZXBvbnNldF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCWlmIChkZXYtPnBvd2VyLnNhdmVkX3N0YXRlKSB7Ci0JCU5DUl8wID0gKih1bnNpZ25lZCBpbnQgKilkZXYtPnBvd2VyLnNhdmVkX3N0YXRlOwotCQlrZnJlZShkZXYtPnBvd2VyLnNhdmVkX3N0YXRlKTsKLQkJZGV2LT5wb3dlci5zYXZlZF9zdGF0ZSA9IE5VTEw7CisJaWYgKGRldi0+ZGV2LnBvd2VyLnNhdmVkX3N0YXRlKSB7CisJCU5DUl8wID0gKih1bnNpZ25lZCBpbnQgKilkZXYtPmRldi5wb3dlci5zYXZlZF9zdGF0ZTsKKwkJa2ZyZWUoZGV2LT5kZXYucG93ZXIuc2F2ZWRfc3RhdGUpOworCQlkZXYtPmRldi5wb3dlci5zYXZlZF9zdGF0ZSA9IE5VTEw7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0yMDksMTIgKzIwOSwxMyBAQAogI2RlZmluZSBuZXBvbnNldF9yZXN1bWUgIE5VTEwKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgbmVwb25zZXRfZGV2aWNlX2RyaXZlciA9IHsKLQkubmFtZQkJPSAibmVwb25zZXQiLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbmVwb25zZXRfZGV2aWNlX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gbmVwb25zZXRfcHJvYmUsCiAJLnN1c3BlbmQJPSBuZXBvbnNldF9zdXNwZW5kLAogCS5yZXN1bWUJCT0gbmVwb25zZXRfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJuZXBvbnNldCIsCisJfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbmVwb25zZXRfcmVzb3VyY2VzW10gPSB7CkBAIC0yOTMsNyArMjk0LDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgbmVwb25zZXRfaW5pdCh2b2lkKQogewotCWRyaXZlcl9yZWdpc3RlcigmbmVwb25zZXRfZGV2aWNlX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZuZXBvbnNldF9kZXZpY2VfZHJpdmVyKTsKIAogCS8qCiAJICogVGhlIE5lcG9uc2V0IGlzIG9ubHkgcHJlc2VudCBvbiB0aGUgQXNzYWJldCBtYWNoaW5lIHR5cGUuCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC90aW1lLmMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC90aW1lLmMKaW5kZXggNDdlMDQyMC4uZTRiNDM1ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvdGltZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL3RpbWUuYwpAQCAtMTI0LDExICsxMjQsMTMgQEAKIAl0di50dl9zZWMgPSBzYTExMDBfZ2V0X3J0Y190aW1lKCk7CiAJZG9fc2V0dGltZW9mZGF5KCZ0dik7CiAKLQlPU01SMCA9IDA7CQkvKiBzZXQgaW5pdGlhbCBtYXRjaCBhdCAwICovCisJT0lFUiA9IDA7CQkvKiBkaXNhYmxlIGFueSB0aW1lciBpbnRlcnJ1cHRzICovCisJT1NDUiA9IExBVENIKjI7CQkvKiBwdXNoIE9TQ1Igb3V0IG9mIHRoZSB3YXkgKi8KKwlPU01SMCA9IExBVENIOwkJLyogc2V0IGluaXRpYWwgbWF0Y2ggKi8KIAlPU1NSID0gMHhmOwkJLyogY2xlYXIgc3RhdHVzIG9uIGFsbCB0aW1lcnMgKi8KIAlzZXR1cF9pcnEoSVJRX09TVDAsICZzYTExMDBfdGltZXJfaXJxKTsKLQlPSUVSIHw9IE9JRVJfRTA7CS8qIGVuYWJsZSBtYXRjaCBvbiB0aW1lciAwIHRvIGNhdXNlIGludGVycnVwdHMgKi8KLQlPU0NSID0gMDsJCS8qIGluaXRpYWxpemUgZnJlZS1ydW5uaW5nIHRpbWVyLCBmb3JjZSBmaXJzdCBtYXRjaCAqLworCU9JRVIgPSBPSUVSX0UwOwkJLyogZW5hYmxlIG1hdGNoIG9uIHRpbWVyIDAgdG8gY2F1c2UgaW50ZXJydXB0cyAqLworCU9TQ1IgPSAwOwkJLyogaW5pdGlhbGl6ZSBmcmVlLXJ1bm5pbmcgdGltZXIgKi8KIH0KIAogI2lmZGVmIENPTkZJR19OT19JRExFX0haCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9LY29uZmlnIGIvYXJjaC9hcm0vbW0vS2NvbmZpZwppbmRleCBlM2MxNGQ2Li5lODRmZGRlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21tL0tjb25maWcKQEAgLTEwMiw4ICsxMDIsOCBAQAogIyBBUk05MjVUCiBjb25maWcgQ1BVX0FSTTkyNVQKICAJYm9vbCAiU3VwcG9ydCBBUk05MjVUIHByb2Nlc3NvciIgaWYgQVJDSF9PTUFQMQotIAlkZXBlbmRzIG9uIEFSQ0hfT01BUDE1MTAKLSAJZGVmYXVsdCB5IGlmIEFSQ0hfT01BUDE1MTAKKyAJZGVwZW5kcyBvbiBBUkNIX09NQVAxNVhYCisgCWRlZmF1bHQgeSBpZiBBUkNIX09NQVAxNVhYCiAJc2VsZWN0IENQVV8zMnY0CiAJc2VsZWN0IENQVV9BQlJUX0VWNFQKIAlzZWxlY3QgQ1BVX0NBQ0hFX1Y0V1QKQEAgLTI0Miw3ICsyNDIsNyBAQAogIyBBUk12NgogY29uZmlnIENQVV9WNgogCWJvb2wgIlN1cHBvcnQgQVJNIFY2IHByb2Nlc3NvciIKLQlkZXBlbmRzIG9uIEFSQ0hfSU5URUdSQVRPUiB8fCBNQUNIX1JFQUxWSUVXX0VCCisJZGVwZW5kcyBvbiBBUkNIX0lOVEVHUkFUT1IgfHwgTUFDSF9SRUFMVklFV19FQiB8fCBBUkNIX09NQVAyCiAJc2VsZWN0IENQVV8zMnY2CiAJc2VsZWN0IENQVV9BQlJUX0VWNgogCXNlbGVjdCBDUFVfQ0FDSEVfVjYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9NYWtlZmlsZSBiL2FyY2gvYXJtL3BsYXQtb21hcC9NYWtlZmlsZQppbmRleCA3ZTE0NGY5Li45Y2NmMTk0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL01ha2VmaWxlCkBAIC0zLDcgKzMsNyBAQAogIwogCiAjIENvbW1vbiBzdXBwb3J0Ci1vYmoteSA6PSBjb21tb24ubyBzcmFtLm8gc3JhbS1mbi5vIGNsb2NrLm8gZG1hLm8gbXV4Lm8gZ3Bpby5vIG1jYnNwLm8gdXNiLm8KK29iai15IDo9IGNvbW1vbi5vIHNyYW0ubyBzcmFtLWZuLm8gY2xvY2subyBkZXZpY2VzLm8gZG1hLm8gbXV4Lm8gZ3Bpby5vIG1jYnNwLm8gdXNiLm8KIG9iai1tIDo9CiBvYmotbiA6PQogb2JqLSAgOj0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9jbG9jay5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2Nsb2NrLmMKaW5kZXggYTAyMGZlMS4uN2NlMzliOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2Nsb2NrLmMKQEAgLTEsMTUgKzEsMjAgQEAKIC8qCiAgKiAgbGludXgvYXJjaC9hcm0vcGxhdC1vbWFwL2Nsb2NrLmMKICAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA0IE5va2lhIGNvcnBvcmF0aW9uCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwNSBOb2tpYSBjb3Jwb3JhdGlvbgogICogIFdyaXR0ZW4gYnkgVHV1a2thIFRpa2thbmVuIDx0dXVra2EudGlra2FuZW5AZWxla3Ryb2JpdC5jb20+CiAgKgorICogIE1vZGlmaWVkIGZvciBvbWFwIHNoYXJlZCBjbG9jayBmcmFtZXdvcmsgYnkgVG9ueSBMaW5kZ3JlbiA8dG9ueUBhdG9taWRlLmNvbT4KKyAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KQEAgLTE4LDU2MiArMjMsMjAgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2Nsb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvYm9hcmQuaD4KLSNpbmNsdWRlIDxhc20vYXJjaC91c2IuaD4KIAotI2luY2x1ZGUgImNsb2NrLmgiCi0jaW5jbHVkZSAic3JhbS5oIgorI2luY2x1ZGUgPGFzbS9hcmNoL2Nsb2NrLmg+CiAKLXN0YXRpYyBMSVNUX0hFQUQoY2xvY2tzKTsKK0xJU1RfSEVBRChjbG9ja3MpOwogc3RhdGljIERFQ0xBUkVfTVVURVgoY2xvY2tzX3NlbSk7Ci1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNsb2NrZndfbG9jayk7Ci1zdGF0aWMgdm9pZCBwcm9wYWdhdGVfcmF0ZShzdHJ1Y3QgY2xrICogIGNsayk7Ci0vKiBVQVJUIGNsb2NrIGZ1bmN0aW9uICovCi1zdGF0aWMgaW50IHNldF91YXJ0X3JhdGUoc3RydWN0IGNsayAqIGNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKLS8qIEV4dGVybmFsIGNsb2NrIChNQ0xLICYgQkNMSykgZnVuY3Rpb25zICovCi1zdGF0aWMgaW50IHNldF9leHRfY2xrX3JhdGUoc3RydWN0IGNsayAqICBjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7Ci1zdGF0aWMgbG9uZyByb3VuZF9leHRfY2xrX3JhdGUoc3RydWN0IGNsayAqICBjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7Ci1zdGF0aWMgdm9pZCBpbml0X2V4dF9jbGsoc3RydWN0IGNsayAqICBjbGspOwotLyogTVBVIHZpcnR1YWwgY2xvY2sgZnVuY3Rpb25zICovCi1zdGF0aWMgaW50IHNlbGVjdF90YWJsZV9yYXRlKHN0cnVjdCBjbGsgKiAgY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpOwotc3RhdGljIGxvbmcgcm91bmRfdG9fdGFibGVfcmF0ZShzdHJ1Y3QgY2xrICogIGNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKLXZvaWQgY2xrX3NldGRwbGwoX191MTYsIF9fdTE2KTsKK0RFRklORV9TUElOTE9DSyhjbG9ja2Z3X2xvY2spOwogCi1zdGF0aWMgc3RydWN0IG1wdV9yYXRlIHJhdGVfdGFibGVbXSA9IHsKLQkvKiBNUFUgTUh6LCB4dGFsIE1IeiwgZHBsbDEgTUh6LCBDS0NUTCwgRFBMTF9DVEwKLQkgKiBhcm1kaXYsIGRzcGRpdiwgZHNwbW11LCB0Y2RpdiwgcGVyZGl2LCBsY2RkaXYKLQkgKi8KLSNpZiBkZWZpbmVkKENPTkZJR19PTUFQX0FSTV8yMTZNSFopCi0JeyAyMTYwMDAwMDAsIDEyMDAwMDAwLCAyMTYwMDAwMDAsIDB4MDUwZCwgMHgyOTEwIH0sIC8qIDEvMS8yLzIvMi84ICovCi0jZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19PTUFQX0FSTV8xOTVNSFopCi0JeyAxOTUwMDAwMDAsIDEzMDAwMDAwLCAxOTUwMDAwMDAsIDB4MDUwZSwgMHgyNzkwIH0sIC8qIDEvMS8yLzIvNC84ICovCi0jZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19PTUFQX0FSTV8xOTJNSFopCi0JeyAxOTIwMDAwMDAsIDE5MjAwMDAwLCAxOTIwMDAwMDAsIDB4MDUwZiwgMHgyNTEwIH0sIC8qIDEvMS8yLzIvOC84ICovCi0JeyAxOTIwMDAwMDAsIDEyMDAwMDAwLCAxOTIwMDAwMDAsIDB4MDUwZiwgMHgyODEwIH0sIC8qIDEvMS8yLzIvOC84ICovCi0JeyAgOTYwMDAwMDAsIDEyMDAwMDAwLCAxOTIwMDAwMDAsIDB4MDU1ZiwgMHgyODEwIH0sIC8qIDIvMi8yLzIvOC84ICovCi0JeyAgNDgwMDAwMDAsIDEyMDAwMDAwLCAxOTIwMDAwMDAsIDB4MGJhZiwgMHgyODEwIH0sIC8qIDQvOC80LzQvOC84ICovCi0JeyAgMjQwMDAwMDAsIDEyMDAwMDAwLCAxOTIwMDAwMDAsIDB4MGZmZiwgMHgyODEwIH0sIC8qIDgvOC84LzgvOC84ICovCi0jZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19PTUFQX0FSTV8xODJNSFopCi0JeyAxODIwMDAwMDAsIDEzMDAwMDAwLCAxODIwMDAwMDAsIDB4MDUwZSwgMHgyNzEwIH0sIC8qIDEvMS8yLzIvNC84ICovCi0jZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19PTUFQX0FSTV8xNjhNSFopCi0JeyAxNjgwMDAwMDAsIDEyMDAwMDAwLCAxNjgwMDAwMDAsIDB4MDEwZiwgMHgyNzEwIH0sIC8qIDEvMS8xLzIvOC84ICovCi0jZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19PTUFQX0FSTV8xNTBNSFopCi0JeyAxNTAwMDAwMDAsIDEyMDAwMDAwLCAxNTAwMDAwMDAsIDB4MDEwYSwgMHgyY2IwIH0sIC8qIDEvMS8xLzIvNC80ICovCi0jZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19PTUFQX0FSTV8xMjBNSFopCi0JeyAxMjAwMDAwMDAsIDEyMDAwMDAwLCAxMjAwMDAwMDAsIDB4MDEwYSwgMHgyNTEwIH0sIC8qIDEvMS8xLzIvNC80ICovCi0jZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19PTUFQX0FSTV85Nk1IWikKLQl7ICA5NjAwMDAwMCwgMTIwMDAwMDAsICA5NjAwMDAwMCwgMHgwMDA1LCAweDI0MTAgfSwgLyogMS8xLzEvMS8yLzIgKi8KLSNlbmRpZgotI2lmIGRlZmluZWQoQ09ORklHX09NQVBfQVJNXzYwTUhaKQotCXsgIDYwMDAwMDAwLCAxMjAwMDAwMCwgIDYwMDAwMDAwLCAweDAwMDUsIDB4MjI5MCB9LCAvKiAxLzEvMS8xLzIvMiAqLwotI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfT01BUF9BUk1fMzBNSFopCi0JeyAgMzAwMDAwMDAsIDEyMDAwMDAwLCAgNjAwMDAwMDAsIDB4MDU1NSwgMHgyMjkwIH0sIC8qIDIvMi8yLzIvMi8yICovCi0jZW5kaWYKLQl7IDAsIDAsIDAsIDAsIDAgfSwKLX07CitzdGF0aWMgc3RydWN0IGNsa19mdW5jdGlvbnMgKmFyY2hfY2xvY2s7CiAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogU3RhbmRhcmQgY2xvY2sgZnVuY3Rpb25zIGRlZmluZWQgaW4gYXNtL2hhcmR3YXJlL2Nsb2NrLmgKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyB2b2lkIGNrY3RsX3JlY2FsYyhzdHJ1Y3QgY2xrICogIGNsayk7Ci1pbnQgX19jbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsayk7Ci12b2lkIF9fY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKTsKLXZvaWQgX19jbGtfdW51c2Uoc3RydWN0IGNsayAqY2xrKTsKLWludCBfX2Nsa191c2Uoc3RydWN0IGNsayAqY2xrKTsKLQotCi1zdGF0aWMgdm9pZCBmb2xsb3dwYXJlbnRfcmVjYWxjKHN0cnVjdCBjbGsgKiAgY2xrKQotewotCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlOwotfQotCi0KLXN0YXRpYyB2b2lkIHdhdGNoZG9nX3JlY2FsYyhzdHJ1Y3QgY2xrICogIGNsaykKLXsKLQljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvIDE0OwotfQotCi1zdGF0aWMgdm9pZCB1YXJ0X3JlY2FsYyhzdHJ1Y3QgY2xrICogY2xrKQotewotCXVuc2lnbmVkIGludCB2YWwgPSBvbWFwX3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7Ci0JaWYgKHZhbCAmIGNsay0+ZW5hYmxlX2JpdCkKLQkJY2xrLT5yYXRlID0gNDgwMDAwMDA7Ci0JZWxzZQotCQljbGstPnJhdGUgPSAxMjAwMDAwMDsKLX0KLQotc3RhdGljIHN0cnVjdCBjbGsgY2tfcmVmID0gewotCS5uYW1lCQk9ICJja19yZWYiLAotCS5yYXRlCQk9IDEyMDAwMDAwLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKLQkJCSAgQUxXQVlTX0VOQUJMRUQsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBja19kcGxsMSA9IHsKLQkubmFtZQkJPSAiY2tfZHBsbDEiLAotCS5wYXJlbnQJCT0gJmNrX3JlZiwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCB8Ci0JCQkgIFJBVEVfUFJPUEFHQVRFUyB8IEFMV0FZU19FTkFCTEVELAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgY2tfZHBsbDFvdXQgPSB7Ci0JLm5hbWUJCT0gImNrX2RwbGwxb3V0IiwKLQkucGFyZW50CQk9ICZja19kcGxsMSwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE2WFgsCi0JLmVuYWJsZV9yZWcJPSBBUk1fSURMRUNUMiwKLQkuZW5hYmxlX2JpdAk9IEVOX0NLT1VUX0FSTSwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgYXJtX2NrID0gewotCS5uYW1lCQk9ICJhcm1fY2siLAotCS5wYXJlbnQJCT0gJmNrX2RwbGwxLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKLQkJCSAgUkFURV9DS0NUTCB8IFJBVEVfUFJPUEFHQVRFUyB8IEFMV0FZU19FTkFCTEVELAotCS5yYXRlX29mZnNldAk9IENLQ1RMX0FSTURJVl9PRkZTRVQsCi0JLnJlY2FsYwkJPSAmY2tjdGxfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgYXJtcGVyX2NrID0gewotCS5uYW1lCQk9ICJhcm1wZXJfY2siLAotCS5wYXJlbnQJCT0gJmNrX2RwbGwxLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKLQkJCSAgUkFURV9DS0NUTCwKLQkuZW5hYmxlX3JlZwk9IEFSTV9JRExFQ1QyLAotCS5lbmFibGVfYml0CT0gRU5fUEVSQ0ssCi0JLnJhdGVfb2Zmc2V0CT0gQ0tDVExfUEVSRElWX09GRlNFVCwKLQkucmVjYWxjCQk9ICZja2N0bF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBhcm1fZ3Bpb19jayA9IHsKLQkubmFtZQkJPSAiYXJtX2dwaW9fY2siLAotCS5wYXJlbnQJCT0gJmNrX2RwbGwxLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCwKLQkuZW5hYmxlX3JlZwk9IEFSTV9JRExFQ1QyLAotCS5lbmFibGVfYml0CT0gRU5fR1BJT0NLLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBhcm14b3JfY2sgPSB7Ci0JLm5hbWUJCT0gImFybXhvcl9jayIsCi0JLnBhcmVudAkJPSAmY2tfcmVmLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYLAotCS5lbmFibGVfcmVnCT0gQVJNX0lETEVDVDIsCi0JLmVuYWJsZV9iaXQJPSBFTl9YT1JQQ0ssCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGFybXRpbV9jayA9IHsKLQkubmFtZQkJPSAiYXJtdGltX2NrIiwKLQkucGFyZW50CQk9ICZja19yZWYsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFgsCi0JLmVuYWJsZV9yZWcJPSBBUk1fSURMRUNUMiwKLQkuZW5hYmxlX2JpdAk9IEVOX1RJTUNLLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBhcm13ZHRfY2sgPSB7Ci0JLm5hbWUJCT0gImFybXdkdF9jayIsCi0JLnBhcmVudAkJPSAmY2tfcmVmLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYLAotCS5lbmFibGVfcmVnCT0gQVJNX0lETEVDVDIsCi0JLmVuYWJsZV9iaXQJPSBFTl9XRFRDSywKLQkucmVjYWxjCQk9ICZ3YXRjaGRvZ19yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBhcm1pbnRoX2NrMTZ4eCA9IHsKLQkubmFtZQkJPSAiYXJtaW50aF9jayIsCi0JLnBhcmVudAkJPSAmYXJtX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTZYWCB8IEFMV0FZU19FTkFCTEVELAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi0JLyogTm90ZTogT24gMTZ4eCB0aGUgZnJlcXVlbmN5IGNhbiBiZSBkaXZpZGVkIGJ5IDIgYnkgcHJvZ3JhbW1pbmcKLQkgKiBBUk1fQ0tDVEw6QVJNX0lOVEhDS19TRUwoMTQpIHRvIDEKLQkgKgotCSAqIDE1MTAgdmVyc2lvbiBpcyBpbiBUQyBjbG9ja3MuCi0JICovCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBkc3BfY2sgPSB7Ci0JLm5hbWUJCT0gImRzcF9jayIsCi0JLnBhcmVudAkJPSAmY2tfZHBsbDEsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAotCQkJICBSQVRFX0NLQ1RMLAotCS5lbmFibGVfcmVnCT0gQVJNX0NLQ1RMLAotCS5lbmFibGVfYml0CT0gRU5fRFNQQ0ssCi0JLnJhdGVfb2Zmc2V0CT0gQ0tDVExfRFNQRElWX09GRlNFVCwKLQkucmVjYWxjCQk9ICZja2N0bF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBkc3BtbXVfY2sgPSB7Ci0JLm5hbWUJCT0gImRzcG1tdV9jayIsCi0JLnBhcmVudAkJPSAmY2tfZHBsbDEsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAotCQkJICBSQVRFX0NLQ1RMIHwgQUxXQVlTX0VOQUJMRUQsCi0JLnJhdGVfb2Zmc2V0CT0gQ0tDVExfRFNQTU1VRElWX09GRlNFVCwKLQkucmVjYWxjCQk9ICZja2N0bF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBkc3BwZXJfY2sgPSB7Ci0JLm5hbWUJCT0gImRzcHBlcl9jayIsCi0JLnBhcmVudAkJPSAmY2tfZHBsbDEsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAotCQkJICBSQVRFX0NLQ1RMIHwgRFNQX0RPTUFJTl9DTE9DSyB8IFZJUlRVQUxfSU9fQUREUkVTUywKLQkuZW5hYmxlX3JlZwk9IERTUF9JRExFQ1QyLAotCS5lbmFibGVfYml0CT0gRU5fUEVSQ0ssCi0JLnJhdGVfb2Zmc2V0CT0gQ0tDVExfUEVSRElWX09GRlNFVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotCS8vLnJlY2FsYwkJPSAmY2tjdGxfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZHNweG9yX2NrID0gewotCS5uYW1lCQk9ICJkc3B4b3JfY2siLAotCS5wYXJlbnQJCT0gJmNrX3JlZiwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCB8Ci0JCQkgIERTUF9ET01BSU5fQ0xPQ0sgfCBWSVJUVUFMX0lPX0FERFJFU1MsCi0JLmVuYWJsZV9yZWcJPSBEU1BfSURMRUNUMiwKLQkuZW5hYmxlX2JpdAk9IEVOX1hPUlBDSywKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZHNwdGltX2NrID0gewotCS5uYW1lCQk9ICJkc3B0aW1fY2siLAotCS5wYXJlbnQJCT0gJmNrX3JlZiwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCB8Ci0JCQkgIERTUF9ET01BSU5fQ0xPQ0sgfCBWSVJUVUFMX0lPX0FERFJFU1MsCi0JLmVuYWJsZV9yZWcJPSBEU1BfSURMRUNUMiwKLQkuZW5hYmxlX2JpdAk9IEVOX0RTUFRJTUNLLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB0Y19jayA9IHsKLQkubmFtZQkJPSAidGNfY2siLAotCS5wYXJlbnQJCT0gJmNrX2RwbGwxLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwgQ0xPQ0tfSU5fT01BUDczMCB8Ci0JCQkgIFJBVEVfQ0tDVEwgfCBSQVRFX1BST1BBR0FURVMgfCBBTFdBWVNfRU5BQkxFRCwKLQkucmF0ZV9vZmZzZXQJPSBDS0NUTF9UQ0RJVl9PRkZTRVQsCi0JLnJlY2FsYwkJPSAmY2tjdGxfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgYXJtaW50aF9jazE1MTAgPSB7Ci0JLm5hbWUJCT0gImFybWludGhfY2siLAotCS5wYXJlbnQJCT0gJnRjX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IEFMV0FZU19FTkFCTEVELAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi0JLyogTm90ZTogT24gMTUxMCB0aGUgZnJlcXVlbmN5IGZvbGxvd3MgVENfQ0sKLQkgKgotCSAqIDE2eHggdmVyc2lvbiBpcyBpbiBNUFUgY2xvY2tzLgotCSAqLwotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdGlwYl9jayA9IHsKLQkubmFtZQkJPSAidGlicF9jayIsCi0JLnBhcmVudAkJPSAmdGNfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQUxXQVlTX0VOQUJMRUQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGwzX29jcGlfY2sgPSB7Ci0JLm5hbWUJCT0gImwzX29jcGlfY2siLAotCS5wYXJlbnQJCT0gJnRjX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTZYWCwKLQkuZW5hYmxlX3JlZwk9IEFSTV9JRExFQ1QzLAotCS5lbmFibGVfYml0CT0gRU5fT0NQSV9DSywKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdGMxX2NrID0gewotCS5uYW1lCQk9ICJ0YzFfY2siLAotCS5wYXJlbnQJCT0gJnRjX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTZYWCwKLQkuZW5hYmxlX3JlZwk9IEFSTV9JRExFQ1QzLAotCS5lbmFibGVfYml0CT0gRU5fVEMxX0NLLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB0YzJfY2sgPSB7Ci0JLm5hbWUJCT0gInRjMl9jayIsCi0JLnBhcmVudAkJPSAmdGNfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNlhYLAotCS5lbmFibGVfcmVnCT0gQVJNX0lETEVDVDMsCi0JLmVuYWJsZV9iaXQJPSBFTl9UQzJfQ0ssCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGRtYV9jayA9IHsKLQkubmFtZQkJPSAiZG1hX2NrIiwKLQkucGFyZW50CQk9ICZ0Y19jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCB8Ci0JCQkgIEFMV0FZU19FTkFCTEVELAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBkbWFfbGNkZnJlZV9jayA9IHsKLQkubmFtZQkJPSAiZG1hX2xjZGZyZWVfY2siLAotCS5wYXJlbnQJCT0gJnRjX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTZYWCB8IEFMV0FZU19FTkFCTEVELAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBhcGlfY2sgPSB7Ci0JLm5hbWUJCT0gImFwaV9jayIsCi0JLnBhcmVudAkJPSAmdGNfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFgsCi0JLmVuYWJsZV9yZWcJPSBBUk1fSURMRUNUMiwKLQkuZW5hYmxlX2JpdAk9IEVOX0FQSUNLLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBsYl9jayA9IHsKLQkubmFtZQkJPSAibGJfY2siLAotCS5wYXJlbnQJCT0gJnRjX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCwKLQkuZW5hYmxlX3JlZwk9IEFSTV9JRExFQ1QyLAotCS5lbmFibGVfYml0CT0gRU5fTEJDSywKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgcmhlYTFfY2sgPSB7Ci0JLm5hbWUJCT0gInJoZWExX2NrIiwKLQkucGFyZW50CQk9ICZ0Y19jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE2WFggfCBBTFdBWVNfRU5BQkxFRCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgcmhlYTJfY2sgPSB7Ci0JLm5hbWUJCT0gInJoZWEyX2NrIiwKLQkucGFyZW50CQk9ICZ0Y19jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE2WFggfCBBTFdBWVNfRU5BQkxFRCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbGNkX2NrID0gewotCS5uYW1lCQk9ICJsY2RfY2siLAotCS5wYXJlbnQJCT0gJmNrX2RwbGwxLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwgQ0xPQ0tfSU5fT01BUDczMCB8Ci0JCQkgIFJBVEVfQ0tDVEwsCi0JLmVuYWJsZV9yZWcJPSBBUk1fSURMRUNUMiwKLQkuZW5hYmxlX2JpdAk9IEVOX0xDRENLLAotCS5yYXRlX29mZnNldAk9IENLQ1RMX0xDRERJVl9PRkZTRVQsCi0JLnJlY2FsYwkJPSAmY2tjdGxfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdWFydDFfMTUxMCA9IHsKLQkubmFtZQkJPSAidWFydDFfY2siLAotCS8qIERpcmVjdCBmcm9tIFVMUEQsIG5vIHBhcmVudCAqLwotCS5yYXRlCQk9IDEyMDAwMDAwLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IEVOQUJMRV9SRUdfMzJCSVQgfCBBTFdBWVNfRU5BQkxFRCwKLQkuZW5hYmxlX3JlZwk9IE1PRF9DT05GX0NUUkxfMCwKLQkuZW5hYmxlX2JpdAk9IDI5LAkvKiBDaG9vc2VzIGJldHdlZW4gMTJNSHogYW5kIDQ4TUh6ICovCi0JLnNldF9yYXRlCT0gJnNldF91YXJ0X3JhdGUsCi0JLnJlY2FsYwkJPSAmdWFydF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB1YXJ0MV8xNnh4ID0gewotCS5uYW1lCQk9ICJ1YXJ0MV9jayIsCi0JLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcGFyZW50ICovCi0JLnJhdGUJCT0gNDgwMDAwMDAsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNlhYIHwgUkFURV9GSVhFRCB8IEVOQUJMRV9SRUdfMzJCSVQsCi0JLmVuYWJsZV9yZWcJPSBNT0RfQ09ORl9DVFJMXzAsCi0JLmVuYWJsZV9iaXQJPSAyOSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQyX2NrID0gewotCS5uYW1lCQk9ICJ1YXJ0Ml9jayIsCi0JLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcGFyZW50ICovCi0JLnJhdGUJCT0gMTIwMDAwMDAsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfCBFTkFCTEVfUkVHXzMyQklUIHwKLQkJCSAgQUxXQVlTX0VOQUJMRUQsCi0JLmVuYWJsZV9yZWcJPSBNT0RfQ09ORl9DVFJMXzAsCi0JLmVuYWJsZV9iaXQJPSAzMCwJLyogQ2hvb3NlcyBiZXR3ZWVuIDEyTUh6IGFuZCA0OE1IeiAqLwotCS5zZXRfcmF0ZQk9ICZzZXRfdWFydF9yYXRlLAotCS5yZWNhbGMJCT0gJnVhcnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdWFydDNfMTUxMCA9IHsKLQkubmFtZQkJPSAidWFydDNfY2siLAotCS8qIERpcmVjdCBmcm9tIFVMUEQsIG5vIHBhcmVudCAqLwotCS5yYXRlCQk9IDEyMDAwMDAwLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IEVOQUJMRV9SRUdfMzJCSVQgfCBBTFdBWVNfRU5BQkxFRCwKLQkuZW5hYmxlX3JlZwk9IE1PRF9DT05GX0NUUkxfMCwKLQkuZW5hYmxlX2JpdAk9IDMxLAkvKiBDaG9vc2VzIGJldHdlZW4gMTJNSHogYW5kIDQ4TUh6ICovCi0JLnNldF9yYXRlCT0gJnNldF91YXJ0X3JhdGUsCi0JLnJlY2FsYwkJPSAmdWFydF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB1YXJ0M18xNnh4ID0gewotCS5uYW1lCQk9ICJ1YXJ0M19jayIsCi0JLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcGFyZW50ICovCi0JLnJhdGUJCT0gNDgwMDAwMDAsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNlhYIHwgUkFURV9GSVhFRCB8IEVOQUJMRV9SRUdfMzJCSVQsCi0JLmVuYWJsZV9yZWcJPSBNT0RfQ09ORl9DVFJMXzAsCi0JLmVuYWJsZV9iaXQJPSAzMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHVzYl9jbGtvID0gewkvKiA2IE1IeiBvdXRwdXQgb24gVzRfVVNCX0NMS08gKi8KLQkubmFtZQkJPSAidXNiX2Nsa28iLAotCS8qIERpcmVjdCBmcm9tIFVMUEQsIG5vIHBhcmVudCAqLwotCS5yYXRlCQk9IDYwMDAwMDAsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAotCQkJICBSQVRFX0ZJWEVEIHwgRU5BQkxFX1JFR18zMkJJVCwKLQkuZW5hYmxlX3JlZwk9IFVMUERfQ0xPQ0tfQ1RSTCwKLQkuZW5hYmxlX2JpdAk9IFVTQl9NQ0xLX0VOX0JJVCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHVzYl9oaGNfY2sxNTEwID0gewotCS5uYW1lCQk9ICJ1c2JfaGhjX2NrIiwKLQkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyBwYXJlbnQgKi8KLQkucmF0ZQkJPSA0ODAwMDAwMCwgLyogQWN0dWFsbHkgMiBjbG9ja3MsIDEyTUh6IGFuZCA0OE1IeiAqLwotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8Ci0JCQkgIFJBVEVfRklYRUQgfCBFTkFCTEVfUkVHXzMyQklULAotCS5lbmFibGVfcmVnCT0gTU9EX0NPTkZfQ1RSTF8wLAotCS5lbmFibGVfYml0CT0gVVNCX0hPU1RfSEhDX1VIT1NUX0VOLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdXNiX2hoY19jazE2eHggPSB7Ci0JLm5hbWUJCT0gInVzYl9oaGNfY2siLAotCS8qIERpcmVjdCBmcm9tIFVMUEQsIG5vIHBhcmVudCAqLwotCS5yYXRlCQk9IDQ4MDAwMDAwLAotCS8qIE9UR19TWVNDT05fMi5PVEdfUEFERU4gPT0gMCAobm90IDE1MTAtY29tcGF0aWJsZSkgKi8KLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE2WFggfAotCQkJICBSQVRFX0ZJWEVEIHwgRU5BQkxFX1JFR18zMkJJVCwKLQkuZW5hYmxlX3JlZwk9IE9UR19CQVNFICsgMHgwOCAvKiBPVEdfU1lTQ09OXzIgKi8sCi0JLmVuYWJsZV9iaXQJPSA4IC8qIFVIT1NUX0VOICovLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdXNiX2RjX2NrID0gewotCS5uYW1lCQk9ICJ1c2JfZGNfY2siLAotCS8qIERpcmVjdCBmcm9tIFVMUEQsIG5vIHBhcmVudCAqLwotCS5yYXRlCQk9IDQ4MDAwMDAwLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTZYWCB8IFJBVEVfRklYRUQsCi0JLmVuYWJsZV9yZWcJPSBTT0ZUX1JFUV9SRUcsCi0JLmVuYWJsZV9iaXQJPSA0LAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbWNsa18xNTEwID0gewotCS5uYW1lCQk9ICJtY2xrIiwKLQkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyBwYXJlbnQuIE1heSBiZSBlbmFibGVkIGJ5IGV4dCBoYXJkd2FyZS4gKi8KLQkucmF0ZQkJPSAxMjAwMDAwMCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBSQVRFX0ZJWEVELAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbWNsa18xNnh4ID0gewotCS5uYW1lCQk9ICJtY2xrIiwKLQkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyBwYXJlbnQuIE1heSBiZSBlbmFibGVkIGJ5IGV4dCBoYXJkd2FyZS4gKi8KLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE2WFgsCi0JLmVuYWJsZV9yZWcJPSBDT01fQ0xLX0RJVl9DVFJMX1NFTCwKLQkuZW5hYmxlX2JpdAk9IENPTV9VTFBEX1BMTF9DTEtfUkVRLAotCS5zZXRfcmF0ZQk9ICZzZXRfZXh0X2Nsa19yYXRlLAotCS5yb3VuZF9yYXRlCT0gJnJvdW5kX2V4dF9jbGtfcmF0ZSwKLQkuaW5pdAkJPSAmaW5pdF9leHRfY2xrLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgYmNsa18xNTEwID0gewotCS5uYW1lCQk9ICJiY2xrIiwKLQkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyBwYXJlbnQuIE1heSBiZSBlbmFibGVkIGJ5IGV4dCBoYXJkd2FyZS4gKi8KLQkucmF0ZQkJPSAxMjAwMDAwMCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBSQVRFX0ZJWEVELAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgYmNsa18xNnh4ID0gewotCS5uYW1lCQk9ICJiY2xrIiwKLQkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyBwYXJlbnQuIE1heSBiZSBlbmFibGVkIGJ5IGV4dCBoYXJkd2FyZS4gKi8KLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE2WFgsCi0JLmVuYWJsZV9yZWcJPSBTV0RfQ0xLX0RJVl9DVFJMX1NFTCwKLQkuZW5hYmxlX2JpdAk9IFNXRF9VTFBEX1BMTF9DTEtfUkVRLAotCS5zZXRfcmF0ZQk9ICZzZXRfZXh0X2Nsa19yYXRlLAotCS5yb3VuZF9yYXRlCT0gJnJvdW5kX2V4dF9jbGtfcmF0ZSwKLQkuaW5pdAkJPSAmaW5pdF9leHRfY2xrLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbW1jMV9jayA9IHsKLQkubmFtZQkJPSAibW1jMV9jayIsCi0JLyogRnVuY3Rpb25hbCBjbG9jayBpcyBkaXJlY3QgZnJvbSBVTFBELCBpbnRlcmZhY2UgY2xvY2sgaXMgQVJNUEVSICovCi0JLnBhcmVudAkJPSAmYXJtcGVyX2NrLAotCS5yYXRlCQk9IDQ4MDAwMDAwLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKLQkJCSAgUkFURV9GSVhFRCB8IEVOQUJMRV9SRUdfMzJCSVQsCi0JLmVuYWJsZV9yZWcJPSBNT0RfQ09ORl9DVFJMXzAsCi0JLmVuYWJsZV9iaXQJPSAyMywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1tYzJfY2sgPSB7Ci0JLm5hbWUJCT0gIm1tYzJfY2siLAotCS8qIEZ1bmN0aW9uYWwgY2xvY2sgaXMgZGlyZWN0IGZyb20gVUxQRCwgaW50ZXJmYWNlIGNsb2NrIGlzIEFSTVBFUiAqLwotCS5wYXJlbnQJCT0gJmFybXBlcl9jaywKLQkucmF0ZQkJPSA0ODAwMDAwMCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE2WFggfAotCQkJICBSQVRFX0ZJWEVEIHwgRU5BQkxFX1JFR18zMkJJVCwKLQkuZW5hYmxlX3JlZwk9IE1PRF9DT05GX0NUUkxfMCwKLQkuZW5hYmxlX2JpdAk9IDIwLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdmlydHVhbF9ja19tcHUgPSB7Ci0JLm5hbWUJCT0gIm1wdSIsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAotCQkJICBWSVJUVUFMX0NMT0NLIHwgQUxXQVlTX0VOQUJMRUQsCi0JLnBhcmVudAkJPSAmYXJtX2NrLCAvKiBJcyBzbWFydGVyIGFsaWFzIGZvciAqLwotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi0JLnNldF9yYXRlCT0gJnNlbGVjdF90YWJsZV9yYXRlLAotCS5yb3VuZF9yYXRlCT0gJnJvdW5kX3RvX3RhYmxlX3JhdGUsCi19OwotCi0KLXN0YXRpYyBzdHJ1Y3QgY2xrICogIG9uY2hpcF9jbGtzW10gPSB7Ci0JLyogbm9uLVVMUEQgY2xvY2tzICovCi0JJmNrX3JlZiwKLQkmY2tfZHBsbDEsCi0JLyogQ0tfR0VOMSBjbG9ja3MgKi8KLQkmY2tfZHBsbDFvdXQsCi0JJmFybV9jaywKLQkmYXJtcGVyX2NrLAotCSZhcm1fZ3Bpb19jaywKLQkmYXJteG9yX2NrLAotCSZhcm10aW1fY2ssCi0JJmFybXdkdF9jaywKLQkmYXJtaW50aF9jazE1MTAsICAmYXJtaW50aF9jazE2eHgsCi0JLyogQ0tfR0VOMiBjbG9ja3MgKi8KLQkmZHNwX2NrLAotCSZkc3BtbXVfY2ssCi0JJmRzcHBlcl9jaywKLQkmZHNweG9yX2NrLAotCSZkc3B0aW1fY2ssCi0JLyogQ0tfR0VOMyBjbG9ja3MgKi8KLQkmdGNfY2ssCi0JJnRpcGJfY2ssCi0JJmwzX29jcGlfY2ssCi0JJnRjMV9jaywKLQkmdGMyX2NrLAotCSZkbWFfY2ssCi0JJmRtYV9sY2RmcmVlX2NrLAotCSZhcGlfY2ssCi0JJmxiX2NrLAotCSZyaGVhMV9jaywKLQkmcmhlYTJfY2ssCi0JJmxjZF9jaywKLQkvKiBVTFBEIGNsb2NrcyAqLwotCSZ1YXJ0MV8xNTEwLAotCSZ1YXJ0MV8xNnh4LAotCSZ1YXJ0Ml9jaywKLQkmdWFydDNfMTUxMCwKLQkmdWFydDNfMTZ4eCwKLQkmdXNiX2Nsa28sCi0JJnVzYl9oaGNfY2sxNTEwLCAmdXNiX2hoY19jazE2eHgsCi0JJnVzYl9kY19jaywKLQkmbWNsa18xNTEwLCAgJm1jbGtfMTZ4eCwKLQkmYmNsa18xNTEwLCAgJmJjbGtfMTZ4eCwKLQkmbW1jMV9jaywKLQkmbW1jMl9jaywKLQkvKiBWaXJ0dWFsIGNsb2NrcyAqLwotCSZ2aXJ0dWFsX2NrX21wdSwKLX07Ci0KLXN0cnVjdCBjbGsgKmNsa19nZXQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICppZCkKK3N0cnVjdCBjbGsgKiBjbGtfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqaWQpCiB7CiAJc3RydWN0IGNsayAqcCwgKmNsayA9IEVSUl9QVFIoLUVOT0VOVCk7CiAKQEAgLTU5MCw2ICs1Myw4OSBAQAogfQogRVhQT1JUX1NZTUJPTChjbGtfZ2V0KTsKIAoraW50IGNsa19lbmFibGUoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldCA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7CisJaWYgKGNsay0+ZW5hYmxlKQorCQlyZXQgPSBjbGstPmVuYWJsZShjbGspOworCWVsc2UgaWYgKGFyY2hfY2xvY2stPmNsa19lbmFibGUpCisJCXJldCA9IGFyY2hfY2xvY2stPmNsa19lbmFibGUoY2xrKTsKKwllbHNlCisJCXByaW50ayhLRVJOX0VSUiAiQ291bGQgbm90IGVuYWJsZSBjbG9jayAlc1xuIiwgY2xrLT5uYW1lKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19lbmFibGUpOworCit2b2lkIGNsa19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOworCWlmIChjbGstPmRpc2FibGUpCisJCWNsay0+ZGlzYWJsZShjbGspOworCWVsc2UgaWYgKGFyY2hfY2xvY2stPmNsa19kaXNhYmxlKQorCQlhcmNoX2Nsb2NrLT5jbGtfZGlzYWJsZShjbGspOworCWVsc2UKKwkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZCBub3QgZGlzYWJsZSBjbG9jayAlc1xuIiwgY2xrLT5uYW1lKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0woY2xrX2Rpc2FibGUpOworCitpbnQgY2xrX3VzZShzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0ID0gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKKwlpZiAoYXJjaF9jbG9jay0+Y2xrX3VzZSkKKwkJcmV0ID0gYXJjaF9jbG9jay0+Y2xrX3VzZShjbGspOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woY2xrX3VzZSk7CisKK3ZvaWQgY2xrX3VudXNlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOworCWlmIChhcmNoX2Nsb2NrLT5jbGtfdW51c2UpCisJCWFyY2hfY2xvY2stPmNsa191bnVzZShjbGspOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTChjbGtfdW51c2UpOworCitpbnQgY2xrX2dldF91c2Vjb3VudChzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0ID0gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKKwlyZXQgPSBjbGstPnVzZWNvdW50OworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woY2xrX2dldF91c2Vjb3VudCk7CisKK3Vuc2lnbmVkIGxvbmcgY2xrX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgcmV0ID0gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKKwlyZXQgPSBjbGstPnJhdGU7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChjbGtfZ2V0X3JhdGUpOwogCiB2b2lkIGNsa19wdXQoc3RydWN0IGNsayAqY2xrKQogewpAQCAtNTk4LDUyNiArMTQ0LDEwOSBAQAogfQogRVhQT1JUX1NZTUJPTChjbGtfcHV0KTsKIAotCi1pbnQgX19jbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlfX3UxNiByZWd2YWwxNjsKLQlfX3UzMiByZWd2YWwzMjsKLQotCWlmIChjbGstPmZsYWdzICYgQUxXQVlTX0VOQUJMRUQpCi0JCXJldHVybiAwOwotCi0JaWYgKHVubGlrZWx5KGNsay0+ZW5hYmxlX3JlZyA9PSAwKSkgewotCQlwcmludGsoS0VSTl9FUlIgImNsb2NrLmM6IEVuYWJsZSBmb3IgJXMgd2l0aG91dCBlbmFibGUgY29kZVxuIiwKLQkJICAgICAgIGNsay0+bmFtZSk7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmIChjbGstPmZsYWdzICYgRFNQX0RPTUFJTl9DTE9DSykgewotCQlfX2Nsa191c2UoJmFwaV9jayk7Ci0JfQotCi0JaWYgKGNsay0+ZmxhZ3MgJiBFTkFCTEVfUkVHXzMyQklUKSB7Ci0JCWlmIChjbGstPmZsYWdzICYgVklSVFVBTF9JT19BRERSRVNTKSB7Ci0JCQlyZWd2YWwzMiA9IF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7Ci0JCQlyZWd2YWwzMiB8PSAoMSA8PCBjbGstPmVuYWJsZV9iaXQpOwotCQkJX19yYXdfd3JpdGVsKHJlZ3ZhbDMyLCBjbGstPmVuYWJsZV9yZWcpOwotCQl9IGVsc2UgewotCQkJcmVndmFsMzIgPSBvbWFwX3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7Ci0JCQlyZWd2YWwzMiB8PSAoMSA8PCBjbGstPmVuYWJsZV9iaXQpOwotCQkJb21hcF93cml0ZWwocmVndmFsMzIsIGNsay0+ZW5hYmxlX3JlZyk7Ci0JCX0KLQl9IGVsc2UgewotCQlpZiAoY2xrLT5mbGFncyAmIFZJUlRVQUxfSU9fQUREUkVTUykgewotCQkJcmVndmFsMTYgPSBfX3Jhd19yZWFkdyhjbGstPmVuYWJsZV9yZWcpOwotCQkJcmVndmFsMTYgfD0gKDEgPDwgY2xrLT5lbmFibGVfYml0KTsKLQkJCV9fcmF3X3dyaXRldyhyZWd2YWwxNiwgY2xrLT5lbmFibGVfcmVnKTsKLQkJfSBlbHNlIHsKLQkJCXJlZ3ZhbDE2ID0gb21hcF9yZWFkdyhjbGstPmVuYWJsZV9yZWcpOwotCQkJcmVndmFsMTYgfD0gKDEgPDwgY2xrLT5lbmFibGVfYml0KTsKLQkJCW9tYXBfd3JpdGV3KHJlZ3ZhbDE2LCBjbGstPmVuYWJsZV9yZWcpOwotCQl9Ci0JfQotCi0JaWYgKGNsay0+ZmxhZ3MgJiBEU1BfRE9NQUlOX0NMT0NLKSB7Ci0JCV9fY2xrX3VudXNlKCZhcGlfY2spOwotCX0KLQotCXJldHVybiAwOwotfQotCi0KLXZvaWQgX19jbGtfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JX191MTYgcmVndmFsMTY7Ci0JX191MzIgcmVndmFsMzI7Ci0KLQlpZiAoY2xrLT5lbmFibGVfcmVnID09IDApCi0JCXJldHVybjsKLQotCWlmIChjbGstPmZsYWdzICYgRFNQX0RPTUFJTl9DTE9DSykgewotCQlfX2Nsa191c2UoJmFwaV9jayk7Ci0JfQotCi0JaWYgKGNsay0+ZmxhZ3MgJiBFTkFCTEVfUkVHXzMyQklUKSB7Ci0JCWlmIChjbGstPmZsYWdzICYgVklSVFVBTF9JT19BRERSRVNTKSB7Ci0JCQlyZWd2YWwzMiA9IF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7Ci0JCQlyZWd2YWwzMiAmPSB+KDEgPDwgY2xrLT5lbmFibGVfYml0KTsKLQkJCV9fcmF3X3dyaXRlbChyZWd2YWwzMiwgY2xrLT5lbmFibGVfcmVnKTsKLQkJfSBlbHNlIHsKLQkJCXJlZ3ZhbDMyID0gb21hcF9yZWFkbChjbGstPmVuYWJsZV9yZWcpOwotCQkJcmVndmFsMzIgJj0gfigxIDw8IGNsay0+ZW5hYmxlX2JpdCk7Ci0JCQlvbWFwX3dyaXRlbChyZWd2YWwzMiwgY2xrLT5lbmFibGVfcmVnKTsKLQkJfQotCX0gZWxzZSB7Ci0JCWlmIChjbGstPmZsYWdzICYgVklSVFVBTF9JT19BRERSRVNTKSB7Ci0JCQlyZWd2YWwxNiA9IF9fcmF3X3JlYWR3KGNsay0+ZW5hYmxlX3JlZyk7Ci0JCQlyZWd2YWwxNiAmPSB+KDEgPDwgY2xrLT5lbmFibGVfYml0KTsKLQkJCV9fcmF3X3dyaXRldyhyZWd2YWwxNiwgY2xrLT5lbmFibGVfcmVnKTsKLQkJfSBlbHNlIHsKLQkJCXJlZ3ZhbDE2ID0gb21hcF9yZWFkdyhjbGstPmVuYWJsZV9yZWcpOwotCQkJcmVndmFsMTYgJj0gfigxIDw8IGNsay0+ZW5hYmxlX2JpdCk7Ci0JCQlvbWFwX3dyaXRldyhyZWd2YWwxNiwgY2xrLT5lbmFibGVfcmVnKTsKLQkJfQotCX0KLQotCWlmIChjbGstPmZsYWdzICYgRFNQX0RPTUFJTl9DTE9DSykgewotCQlfX2Nsa191bnVzZSgmYXBpX2NrKTsKLQl9Ci19Ci0KLQotdm9pZCBfX2Nsa191bnVzZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JaWYgKGNsay0+dXNlY291bnQgPiAwICYmICEoLS1jbGstPnVzZWNvdW50KSkgewotCQlfX2Nsa19kaXNhYmxlKGNsayk7Ci0JCWlmIChsaWtlbHkoY2xrLT5wYXJlbnQpKQotCQkJX19jbGtfdW51c2UoY2xrLT5wYXJlbnQpOwotCX0KLX0KLQotCi1pbnQgX19jbGtfdXNlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlpbnQgcmV0ID0gMDsKLQlpZiAoY2xrLT51c2Vjb3VudCsrID09IDApIHsKLQkJaWYgKGxpa2VseShjbGstPnBhcmVudCkpCi0JCQlyZXQgPSBfX2Nsa191c2UoY2xrLT5wYXJlbnQpOwotCi0JCWlmICh1bmxpa2VseShyZXQgIT0gMCkpIHsKLQkJCWNsay0+dXNlY291bnQtLTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KLQotCQlyZXQgPSBfX2Nsa19lbmFibGUoY2xrKTsKLQotCQlpZiAodW5saWtlbHkocmV0ICE9IDApICYmIGNsay0+cGFyZW50KSB7Ci0JCQlfX2Nsa191bnVzZShjbGstPnBhcmVudCk7Ci0JCQljbGstPnVzZWNvdW50LS07Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0KLWludCBjbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZXQ7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7Ci0JcmV0ID0gX19jbGtfZW5hYmxlKGNsayk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0woY2xrX2VuYWJsZSk7Ci0KLQotdm9pZCBjbGtfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKLQlfX2Nsa19kaXNhYmxlKGNsayk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7Ci19Ci1FWFBPUlRfU1lNQk9MKGNsa19kaXNhYmxlKTsKLQotCi1pbnQgY2xrX3VzZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmV0ID0gMDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKLQlyZXQgPSBfX2Nsa191c2UoY2xrKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTChjbGtfdXNlKTsKLQotCi12b2lkIGNsa191bnVzZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKLQlfX2Nsa191bnVzZShjbGspOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOwotfQotRVhQT1JUX1NZTUJPTChjbGtfdW51c2UpOwotCi0KLWludCBjbGtfZ2V0X3VzZWNvdW50KHN0cnVjdCBjbGsgKmNsaykKLXsKLSAgICAgICAgcmV0dXJuIGNsay0+dXNlY291bnQ7Ci19Ci1FWFBPUlRfU1lNQk9MKGNsa19nZXRfdXNlY291bnQpOwotCi0KLXVuc2lnbmVkIGxvbmcgY2xrX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlyZXR1cm4gY2xrLT5yYXRlOwotfQotRVhQT1JUX1NZTUJPTChjbGtfZ2V0X3JhdGUpOwotCi0KLXN0YXRpYyBfX3UxNiB2ZXJpZnlfY2tjdGxfdmFsdWUoX191MTYgbmV3dmFsKQotewotCS8qIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGZvciBmb2xsb3dpbmcgbGltaXRhdGlvbnMgc2V0Ci0JICogYnkgdGhlIGhhcmR3YXJlIChhbGwgY29uZGl0aW9ucyBtdXN0IGJlIHRydWUpOgotCSAqIERTUE1NVV9DSyA9PSBEU1BfQ0sgIG9yICBEU1BNTVVfQ0sgPT0gRFNQX0NLLzIKLQkgKiBBUk1fQ0sgPj0gVENfQ0sKLQkgKiBEU1BfQ0sgPj0gVENfQ0sKLQkgKiBEU1BNTVVfQ0sgPj0gVENfQ0sKLQkgKgotCSAqIEluIGFkZGl0aW9uIGZvbGxvd2luZyBydWxlcyBhcmUgZW5mb3JjZWQ6Ci0JICogTENEX0NLIDw9IFRDX0NLCi0JICogQVJNUEVSX0NLIDw9IFRDX0NLCi0JICoKLQkgKiBIb3dldmVyLCBtYXhpbXVtIGZyZXF1ZW5jaWVzIGFyZSBub3QgY2hlY2tlZCBmb3IhCi0JICovCi0JX191OCBwZXJfZXhwOwotCV9fdTggbGNkX2V4cDsKLQlfX3U4IGFybV9leHA7Ci0JX191OCBkc3BfZXhwOwotCV9fdTggdGNfZXhwOwotCV9fdTggZHNwbW11X2V4cDsKLQotCXBlcl9leHAgPSAobmV3dmFsID4+IENLQ1RMX1BFUkRJVl9PRkZTRVQpICYgMzsKLQlsY2RfZXhwID0gKG5ld3ZhbCA+PiBDS0NUTF9MQ0RESVZfT0ZGU0VUKSAmIDM7Ci0JYXJtX2V4cCA9IChuZXd2YWwgPj4gQ0tDVExfQVJNRElWX09GRlNFVCkgJiAzOwotCWRzcF9leHAgPSAobmV3dmFsID4+IENLQ1RMX0RTUERJVl9PRkZTRVQpICYgMzsKLQl0Y19leHAgPSAobmV3dmFsID4+IENLQ1RMX1RDRElWX09GRlNFVCkgJiAzOwotCWRzcG1tdV9leHAgPSAobmV3dmFsID4+IENLQ1RMX0RTUE1NVURJVl9PRkZTRVQpICYgMzsKLQotCWlmIChkc3BtbXVfZXhwIDwgZHNwX2V4cCkKLQkJZHNwbW11X2V4cCA9IGRzcF9leHA7Ci0JaWYgKGRzcG1tdV9leHAgPiBkc3BfZXhwKzEpCi0JCWRzcG1tdV9leHAgPSBkc3BfZXhwKzE7Ci0JaWYgKHRjX2V4cCA8IGFybV9leHApCi0JCXRjX2V4cCA9IGFybV9leHA7Ci0JaWYgKHRjX2V4cCA8IGRzcG1tdV9leHApCi0JCXRjX2V4cCA9IGRzcG1tdV9leHA7Ci0JaWYgKHRjX2V4cCA+IGxjZF9leHApCi0JCWxjZF9leHAgPSB0Y19leHA7Ci0JaWYgKHRjX2V4cCA+IHBlcl9leHApCi0JCXBlcl9leHAgPSB0Y19leHA7Ci0KLQluZXd2YWwgJj0gMHhmMDAwOwotCW5ld3ZhbCB8PSBwZXJfZXhwIDw8IENLQ1RMX1BFUkRJVl9PRkZTRVQ7Ci0JbmV3dmFsIHw9IGxjZF9leHAgPDwgQ0tDVExfTENERElWX09GRlNFVDsKLQluZXd2YWwgfD0gYXJtX2V4cCA8PCBDS0NUTF9BUk1ESVZfT0ZGU0VUOwotCW5ld3ZhbCB8PSBkc3BfZXhwIDw8IENLQ1RMX0RTUERJVl9PRkZTRVQ7Ci0JbmV3dmFsIHw9IHRjX2V4cCA8PCBDS0NUTF9UQ0RJVl9PRkZTRVQ7Ci0JbmV3dmFsIHw9IGRzcG1tdV9leHAgPDwgQ0tDVExfRFNQTU1VRElWX09GRlNFVDsKLQotCXJldHVybiBuZXd2YWw7Ci19Ci0KLQotc3RhdGljIGludCBjYWxjX2Rzb3JfZXhwKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQotewotCS8qIE5vdGU6IElmIHRhcmdldCBmcmVxdWVuY3kgaXMgdG9vIGxvdywgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiA0LAotCSAqIHdoaWNoIGlzIGludmFsaWQgdmFsdWUuIENhbGxlciBtdXN0IGNoZWNrIGZvciB0aGlzIHZhbHVlIGFuZCBhY3QKLQkgKiBhY2NvcmRpbmdseS4KLQkgKgotCSAqIE5vdGU6IFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgY2hlY2sgZm9yIGZvbGxvd2luZyBsaW1pdGF0aW9ucyBzZXQKLQkgKiBieSB0aGUgaGFyZHdhcmUgKGFsbCBjb25kaXRpb25zIG11c3QgYmUgdHJ1ZSk6Ci0JICogRFNQTU1VX0NLID09IERTUF9DSyAgb3IgIERTUE1NVV9DSyA9PSBEU1BfQ0svMgotCSAqIEFSTV9DSyA+PSBUQ19DSwotCSAqIERTUF9DSyA+PSBUQ19DSwotCSAqIERTUE1NVV9DSyA+PSBUQ19DSwotCSAqLwotCXVuc2lnbmVkIGxvbmcgcmVhbHJhdGU7Ci0Jc3RydWN0IGNsayAqICBwYXJlbnQ7Ci0JdW5zaWduZWQgIGRzb3JfZXhwOwotCi0JaWYgKHVubGlrZWx5KCEoY2xrLT5mbGFncyAmIFJBVEVfQ0tDVEwpKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlwYXJlbnQgPSBjbGstPnBhcmVudDsKLQlpZiAodW5saWtlbHkocGFyZW50ID09IDApKQotCQlyZXR1cm4gLUVJTzsKLQotCXJlYWxyYXRlID0gcGFyZW50LT5yYXRlOwotCWZvciAoZHNvcl9leHA9MDsgZHNvcl9leHA8NDsgZHNvcl9leHArKykgewotCQlpZiAocmVhbHJhdGUgPD0gcmF0ZSkKLQkJCWJyZWFrOwotCi0JCXJlYWxyYXRlIC89IDI7Ci0JfQotCi0JcmV0dXJuIGRzb3JfZXhwOwotfQotCi0KLXN0YXRpYyB2b2lkIGNrY3RsX3JlY2FsYyhzdHJ1Y3QgY2xrICogIGNsaykKLXsKLQlpbnQgZHNvcjsKLQotCS8qIENhbGN1bGF0ZSBkaXZpc29yIGVuY29kZWQgYXMgMi1iaXQgZXhwb25lbnQgKi8KLQlpZiAoY2xrLT5mbGFncyAmIERTUF9ET01BSU5fQ0xPQ0spIHsKLQkJLyogVGhlIGNsb2NrIGNvbnRyb2wgYml0cyBhcmUgaW4gRFNQIGRvbWFpbiwKLQkJICogc28gYXBpX2NrIGlzIG5lZWRlZCBmb3IgYWNjZXNzLgotCQkgKiBOb3RlIHRoYXQgRFNQX0NLQ1RMIHZpcnQgYWRkciA9IHBoeXMgYWRkciwgc28KLQkJICogd2UgbXVzdCB1c2UgX19yYXdfcmVhZHcoKSBpbnN0ZWFkIG9mIG9tYXBfcmVhZHcoKS4KLQkJICovCi0JCV9fY2xrX3VzZSgmYXBpX2NrKTsKLQkJZHNvciA9IDEgPDwgKDMgJiAoX19yYXdfcmVhZHcoRFNQX0NLQ1RMKSA+PiBjbGstPnJhdGVfb2Zmc2V0KSk7Ci0JCV9fY2xrX3VudXNlKCZhcGlfY2spOwotCX0gZWxzZSB7Ci0JCWRzb3IgPSAxIDw8ICgzICYgKG9tYXBfcmVhZHcoQVJNX0NLQ1RMKSA+PiBjbGstPnJhdGVfb2Zmc2V0KSk7Ci0JfQotCWlmICh1bmxpa2VseShjbGstPnJhdGUgPT0gY2xrLT5wYXJlbnQtPnJhdGUgLyBkc29yKSkKLQkJcmV0dXJuOyAvKiBObyBjaGFuZ2UsIHF1aWNrIGV4aXQgKi8KLQljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvIGRzb3I7Ci0KLQlpZiAodW5saWtlbHkoY2xrLT5mbGFncyAmIFJBVEVfUFJPUEFHQVRFUykpCi0JCXByb3BhZ2F0ZV9yYXRlKGNsayk7Ci19Ci0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogT3B0aW9uYWwgY2xvY2sgZnVuY3Rpb25zIGRlZmluZWQgaW4gYXNtL2hhcmR3YXJlL2Nsb2NrLmgKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIGxvbmcgY2xrX3JvdW5kX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCiB7Ci0JaW50IGRzb3JfZXhwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJbG9uZyByZXQgPSAwOwogCi0JaWYgKGNsay0+ZmxhZ3MgJiBSQVRFX0ZJWEVEKQotCQlyZXR1cm4gY2xrLT5yYXRlOworCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKKwlpZiAoYXJjaF9jbG9jay0+Y2xrX3JvdW5kX3JhdGUpCisJCXJldCA9IGFyY2hfY2xvY2stPmNsa19yb3VuZF9yYXRlKGNsaywgcmF0ZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7CiAKLQlpZiAoY2xrLT5mbGFncyAmIFJBVEVfQ0tDVEwpIHsKLQkJZHNvcl9leHAgPSBjYWxjX2Rzb3JfZXhwKGNsaywgcmF0ZSk7Ci0JCWlmIChkc29yX2V4cCA8IDApCi0JCQlyZXR1cm4gZHNvcl9leHA7Ci0JCWlmIChkc29yX2V4cCA+IDMpCi0JCQlkc29yX2V4cCA9IDM7Ci0JCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvICgxIDw8IGRzb3JfZXhwKTsKLQl9Ci0KLQlpZihjbGstPnJvdW5kX3JhdGUgIT0gMCkKLQkJcmV0dXJuIGNsay0+cm91bmRfcmF0ZShjbGssIHJhdGUpOwotCi0JcmV0dXJuIGNsay0+cmF0ZTsKKwlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChjbGtfcm91bmRfcmF0ZSk7CiAKLQotc3RhdGljIHZvaWQgcHJvcGFnYXRlX3JhdGUoc3RydWN0IGNsayAqICBjbGspCi17Ci0Jc3RydWN0IGNsayAqKiAgY2xrcDsKLQotCWZvciAoY2xrcCA9IG9uY2hpcF9jbGtzOyBjbGtwIDwgb25jaGlwX2Nsa3MrQVJSQVlfU0laRShvbmNoaXBfY2xrcyk7IGNsa3ArKykgewotCQlpZiAobGlrZWx5KCgqY2xrcCktPnBhcmVudCAhPSBjbGspKSBjb250aW51ZTsKLQkJaWYgKGxpa2VseSgoKmNsa3ApLT5yZWNhbGMpKQotCQkJKCpjbGtwKS0+cmVjYWxjKCpjbGtwKTsKLQl9Ci19Ci0KLQotc3RhdGljIGludCBzZWxlY3RfdGFibGVfcmF0ZShzdHJ1Y3QgY2xrICogIGNsaywgdW5zaWduZWQgbG9uZyByYXRlKQotewotCS8qIEZpbmQgdGhlIGhpZ2hlc3Qgc3VwcG9ydGVkIGZyZXF1ZW5jeSA8PSByYXRlIGFuZCBzd2l0Y2ggdG8gaXQgKi8KLQlzdHJ1Y3QgbXB1X3JhdGUgKiAgcHRyOwotCi0JaWYgKGNsayAhPSAmdmlydHVhbF9ja19tcHUpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JZm9yIChwdHIgPSByYXRlX3RhYmxlOyBwdHItPnJhdGU7IHB0cisrKSB7Ci0JCWlmIChwdHItPnh0YWwgIT0gY2tfcmVmLnJhdGUpCi0JCQljb250aW51ZTsKLQotCQkvKiBEUExMMSBjYW5ub3QgYmUgcmVwcm9ncmFtbWVkIHdpdGhvdXQgcmlza2luZyBzeXN0ZW0gY3Jhc2ggKi8KLQkJaWYgKGxpa2VseShja19kcGxsMS5yYXRlIT0wKSAmJiBwdHItPnBsbF9yYXRlICE9IGNrX2RwbGwxLnJhdGUpCi0JCQljb250aW51ZTsKLQotCQkvKiBDYW4gY2hlY2sgb25seSBhZnRlciB4dGFsIGZyZXF1ZW5jeSBjaGVjayAqLwotCQlpZiAocHRyLT5yYXRlIDw9IHJhdGUpCi0JCQlicmVhazsKLQl9Ci0KLQlpZiAoIXB0ci0+cmF0ZSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkvKgotCSAqIEluIG1vc3QgY2FzZXMgd2Ugc2hvdWxkIG5vdCBuZWVkIHRvIHJlcHJvZ3JhbSBEUExMLgotCSAqIFJlcHJvZ3JhbW1pbmcgdGhlIERQTEwgaXMgdHJpY2t5LCBpdCBtdXN0IGJlIGRvbmUgZnJvbSBTUkFNLgotCSAqLwotCW9tYXBfc3JhbV9yZXByb2dyYW1fY2xvY2socHRyLT5kcGxsY3RsX3ZhbCwgcHRyLT5ja2N0bF92YWwpOwotCi0JY2tfZHBsbDEucmF0ZSA9IHB0ci0+cGxsX3JhdGU7Ci0JcHJvcGFnYXRlX3JhdGUoJmNrX2RwbGwxKTsKLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgbG9uZyByb3VuZF90b190YWJsZV9yYXRlKHN0cnVjdCBjbGsgKiAgY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCi17Ci0JLyogRmluZCB0aGUgaGlnaGVzdCBzdXBwb3J0ZWQgZnJlcXVlbmN5IDw9IHJhdGUgKi8KLQlzdHJ1Y3QgbXB1X3JhdGUgKiAgcHRyOwotCWxvbmcgIGhpZ2hlc3RfcmF0ZTsKLQotCWlmIChjbGsgIT0gJnZpcnR1YWxfY2tfbXB1KQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWhpZ2hlc3RfcmF0ZSA9IC1FSU5WQUw7Ci0KLQlmb3IgKHB0ciA9IHJhdGVfdGFibGU7IHB0ci0+cmF0ZTsgcHRyKyspIHsKLQkJaWYgKHB0ci0+eHRhbCAhPSBja19yZWYucmF0ZSkKLQkJCWNvbnRpbnVlOwotCi0JCWhpZ2hlc3RfcmF0ZSA9IHB0ci0+cmF0ZTsKLQotCQkvKiBDYW4gY2hlY2sgb25seSBhZnRlciB4dGFsIGZyZXF1ZW5jeSBjaGVjayAqLwotCQlpZiAocHRyLT5yYXRlIDw9IHJhdGUpCi0JCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gaGlnaGVzdF9yYXRlOwotfQotCi0KIGludCBjbGtfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCiB7Ci0JaW50ICByZXQgPSAtRUlOVkFMOwotCWludCAgZHNvcl9leHA7Ci0JX191MTYgIHJlZ3ZhbDsKLQl1bnNpZ25lZCBsb25nICBmbGFnczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQgPSAwOwogCi0JaWYgKGNsay0+ZmxhZ3MgJiBSQVRFX0NLQ1RMKSB7Ci0JCWRzb3JfZXhwID0gY2FsY19kc29yX2V4cChjbGssIHJhdGUpOwotCQlpZiAoZHNvcl9leHAgPiAzKQotCQkJZHNvcl9leHAgPSAtRUlOVkFMOwotCQlpZiAoZHNvcl9leHAgPCAwKQotCQkJcmV0dXJuIGRzb3JfZXhwOwotCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKLQkJcmVndmFsID0gb21hcF9yZWFkdyhBUk1fQ0tDVEwpOwotCQlyZWd2YWwgJj0gfigzIDw8IGNsay0+cmF0ZV9vZmZzZXQpOwotCQlyZWd2YWwgfD0gZHNvcl9leHAgPDwgY2xrLT5yYXRlX29mZnNldDsKLQkJcmVndmFsID0gdmVyaWZ5X2NrY3RsX3ZhbHVlKHJlZ3ZhbCk7Ci0JCW9tYXBfd3JpdGV3KHJlZ3ZhbCwgQVJNX0NLQ1RMKTsKLQkJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyAoMSA8PCBkc29yX2V4cCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOwotCQlyZXQgPSAwOwotCX0gZWxzZSBpZihjbGstPnNldF9yYXRlICE9IDApIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOwotCQlyZXQgPSBjbGstPnNldF9yYXRlKGNsaywgcmF0ZSk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOwotCX0KLQotCWlmICh1bmxpa2VseShyZXQgPT0gMCAmJiAoY2xrLT5mbGFncyAmIFJBVEVfUFJPUEFHQVRFUykpKQotCQlwcm9wYWdhdGVfcmF0ZShjbGspOworCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKKwlpZiAoYXJjaF9jbG9jay0+Y2xrX3NldF9yYXRlKQorCQlyZXQgPSBhcmNoX2Nsb2NrLT5jbGtfc2V0X3JhdGUoY2xrLCByYXRlKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MKGNsa19zZXRfcmF0ZSk7CiAKLQotc3RhdGljIHVuc2lnbmVkIGNhbGNfZXh0X2Rzb3IodW5zaWduZWQgbG9uZyByYXRlKQoraW50IGNsa19zZXRfcGFyZW50KHN0cnVjdCBjbGsgKmNsaywgc3RydWN0IGNsayAqcGFyZW50KQogewotCXVuc2lnbmVkIGRzb3I7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0ID0gMDsKIAotCS8qIE1DTEsgYW5kIEJDTEsgZGl2aXNvciBzZWxlY3Rpb24gaXMgbm90IGxpbmVhcjoKLQkgKiBmcmVxID0gOTZNSHogLyBkc29yCi0JICoKLQkgKiBSQVRJT19TRUwgcmFuZ2U6IGRzb3IgPC0+IFJBVElPX1NFTAotCSAqIDAuLjY6IChSQVRJT19TRUwrMikgPC0+IChkc29yLTIpCi0JICogNi4uNDg6ICAoOCsoUkFUSU9fU0VMLTYpKjIpIDwtPiAoKGRzb3ItOCkvMis2KQotCSAqIE1pbmltdW0gZHNvciBpcyAyIGFuZCBtYXhpbXVtIGlzIDk2LiBPZGQgZGl2aXNvcnMgc3RhcnRpbmcgZnJvbSA5Ci0JICogY2FuIG5vdCBiZSB1c2VkLgotCSAqLwotCWZvciAoZHNvciA9IDI7IGRzb3IgPCA5NjsgKytkc29yKSB7Ci0JCWlmICgoZHNvciAmIDEpICYmIGRzb3IgPiA4KQotCQkgIAljb250aW51ZTsKLQkJaWYgKHJhdGUgPj0gOTYwMDAwMDAgLyBkc29yKQotCQkJYnJlYWs7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOworCWlmIChhcmNoX2Nsb2NrLT5jbGtfc2V0X3BhcmVudCkKKwkJcmV0ID0gIGFyY2hfY2xvY2stPmNsa19zZXRfcGFyZW50KGNsaywgcGFyZW50KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19zZXRfcGFyZW50KTsKKworc3RydWN0IGNsayAqY2xrX2dldF9wYXJlbnQoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGNsayAqIHJldCA9IE5VTEw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7CisJaWYgKGFyY2hfY2xvY2stPmNsa19nZXRfcGFyZW50KQorCQlyZXQgPSBhcmNoX2Nsb2NrLT5jbGtfZ2V0X3BhcmVudChjbGspOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woY2xrX2dldF9wYXJlbnQpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIE9NQVAgc3BlY2lmaWMgY2xvY2sgZnVuY3Rpb25zIHNoYXJlZCBiZXR3ZWVuIG9tYXAxIGFuZCBvbWFwMgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwordW5zaWduZWQgaW50IF9faW5pdGRhdGEgbXB1cmF0ZTsKKworLyoKKyAqIEJ5IGRlZmF1bHQgd2UgdXNlIHRoZSByYXRlIHNldCBieSB0aGUgYm9vdGxvYWRlci4KKyAqIFlvdSBjYW4gb3ZlcnJpZGUgdGhpcyB3aXRoIG1wdXJhdGU9IGNtZGxpbmUgb3B0aW9uLgorICovCitzdGF0aWMgaW50IF9faW5pdCBvbWFwX2Nsa19zZXR1cChjaGFyICpzdHIpCit7CisJZ2V0X29wdGlvbigmc3RyLCAmbXB1cmF0ZSk7CisKKwlpZiAoIW1wdXJhdGUpCisJCXJldHVybiAxOworCisJaWYgKG1wdXJhdGUgPCAxMDAwKQorCQltcHVyYXRlICo9IDEwMDAwMDA7CisKKwlyZXR1cm4gMTsKK30KK19fc2V0dXAoIm1wdXJhdGU9Iiwgb21hcF9jbGtfc2V0dXApOworCisvKiBVc2VkIGZvciBjbG9ja3MgdGhhdCBhbHdheXMgaGF2ZSBzYW1lIHZhbHVlIGFzIHRoZSBwYXJlbnQgY2xvY2sgKi8KK3ZvaWQgZm9sbG93cGFyZW50X3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCit7CisJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGU7Cit9CisKKy8qIFByb3BhZ2F0ZSByYXRlIHRvIGNoaWxkcmVuICovCit2b2lkIHByb3BhZ2F0ZV9yYXRlKHN0cnVjdCBjbGsgKiB0Y2xrKQoreworCXN0cnVjdCBjbGsgKmNsa3A7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNsa3AsICZjbG9ja3MsIG5vZGUpIHsKKwkJaWYgKGxpa2VseShjbGtwLT5wYXJlbnQgIT0gdGNsaykpCisJCQljb250aW51ZTsKKwkJaWYgKGxpa2VseSgodTMyKWNsa3AtPnJlY2FsYykpCisJCQljbGtwLT5yZWNhbGMoY2xrcCk7CiAJfQotCXJldHVybiBkc29yOwogfQogCi0vKiBPbmx5IG5lZWRlZCBvbiAxNTEwICovCi1zdGF0aWMgaW50IHNldF91YXJ0X3JhdGUoc3RydWN0IGNsayAqIGNsaywgdW5zaWduZWQgbG9uZyByYXRlKQotewotCXVuc2lnbmVkIGludCB2YWw7Ci0KLQl2YWwgPSBvbWFwX3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7Ci0JaWYgKHJhdGUgPT0gMTIwMDAwMDApCi0JCXZhbCAmPSB+KDEgPDwgY2xrLT5lbmFibGVfYml0KTsKLQllbHNlIGlmIChyYXRlID09IDQ4MDAwMDAwKQotCQl2YWwgfD0gKDEgPDwgY2xrLT5lbmFibGVfYml0KTsKLQllbHNlCi0JCXJldHVybiAtRUlOVkFMOwotCW9tYXBfd3JpdGVsKHZhbCwgY2xrLT5lbmFibGVfcmVnKTsKLQljbGstPnJhdGUgPSByYXRlOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc2V0X2V4dF9jbGtfcmF0ZShzdHJ1Y3QgY2xrICogIGNsaywgdW5zaWduZWQgbG9uZyByYXRlKQotewotCXVuc2lnbmVkIGRzb3I7Ci0JX191MTYgcmF0aW9fYml0czsKLQotCWRzb3IgPSBjYWxjX2V4dF9kc29yKHJhdGUpOwotCWNsay0+cmF0ZSA9IDk2MDAwMDAwIC8gZHNvcjsKLQlpZiAoZHNvciA+IDgpCi0JCXJhdGlvX2JpdHMgPSAoKGRzb3IgLSA4KSAvIDIgKyA2KSA8PCAyOwotCWVsc2UKLQkJcmF0aW9fYml0cyA9IChkc29yIC0gMikgPDwgMjsKLQotCXJhdGlvX2JpdHMgfD0gb21hcF9yZWFkdyhjbGstPmVuYWJsZV9yZWcpICYgfjB4ZmQ7Ci0Jb21hcF93cml0ZXcocmF0aW9fYml0cywgY2xrLT5lbmFibGVfcmVnKTsKLQotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyBsb25nIHJvdW5kX2V4dF9jbGtfcmF0ZShzdHJ1Y3QgY2xrICogIGNsaywgdW5zaWduZWQgbG9uZyByYXRlKQotewotCXJldHVybiA5NjAwMDAwMCAvIGNhbGNfZXh0X2Rzb3IocmF0ZSk7Ci19Ci0KLQotc3RhdGljIHZvaWQgaW5pdF9leHRfY2xrKHN0cnVjdCBjbGsgKiAgY2xrKQotewotCXVuc2lnbmVkIGRzb3I7Ci0JX191MTYgcmF0aW9fYml0czsKLQotCS8qIERldGVybWluZSBjdXJyZW50IHJhdGUgYW5kIGVuc3VyZSBjbG9jayBpcyBiYXNlZCBvbiA5Nk1IeiBBUExMICovCi0JcmF0aW9fYml0cyA9IG9tYXBfcmVhZHcoY2xrLT5lbmFibGVfcmVnKSAmIH4xOwotCW9tYXBfd3JpdGV3KHJhdGlvX2JpdHMsIGNsay0+ZW5hYmxlX3JlZyk7Ci0KLQlyYXRpb19iaXRzID0gKHJhdGlvX2JpdHMgJiAweGZjKSA+PiAyOwotCWlmIChyYXRpb19iaXRzID4gNikKLQkJZHNvciA9IChyYXRpb19iaXRzIC0gNikgKiAyICsgODsKLQllbHNlCi0JCWRzb3IgPSByYXRpb19iaXRzICsgMjsKLQotCWNsay0+IHJhdGUgPSA5NjAwMDAwMCAvIGRzb3I7Ci19Ci0KLQogaW50IGNsa19yZWdpc3RlcihzdHJ1Y3QgY2xrICpjbGspCiB7CiAJZG93bigmY2xvY2tzX3NlbSk7CkBAIC0xMTI1LDYgKzI1NCw3IEBACiAJaWYgKGNsay0+aW5pdCkKIAkJY2xrLT5pbml0KGNsayk7CiAJdXAoJmNsb2Nrc19zZW0pOworCiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKGNsa19yZWdpc3Rlcik7CkBAIC0xMTM3LDIwMyArMjY3LDM4IEBACiB9CiBFWFBPUlRfU1lNQk9MKGNsa191bnJlZ2lzdGVyKTsKIAotI2lmZGVmIENPTkZJR19PTUFQX1JFU0VUX0NMT0NLUwotLyoKLSAqIFJlc2V0cyBzb21lIGNsb2NrcyB0aGF0IG1heSBiZSBsZWZ0IG9uIGZyb20gYm9vdGxvYWRlciwKLSAqIGJ1dCBsZWF2ZXMgc2VyaWFsIGNsb2NrcyBvbi4gU2VlIGFsc28gb21hcF9sYXRlX2Nsa19yZXNldCgpLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgb21hcF9lYXJseV9jbGtfcmVzZXQodm9pZCkKK3ZvaWQgY2xrX2RlbnlfaWRsZShzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JLy9vbWFwX3dyaXRlbCgweDMgPDwgMjksIE1PRF9DT05GX0NUUkxfMCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKKwlpZiAoYXJjaF9jbG9jay0+Y2xrX2RlbnlfaWRsZSkKKwkJYXJjaF9jbG9jay0+Y2xrX2RlbnlfaWRsZShjbGspOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOwogfQotI2Vsc2UKLSNkZWZpbmUgb21hcF9lYXJseV9jbGtfcmVzZXQoKQl7fQotI2VuZGlmCitFWFBPUlRfU1lNQk9MKGNsa19kZW55X2lkbGUpOwogCi1pbnQgX19pbml0IGNsa19pbml0KHZvaWQpCit2b2lkIGNsa19hbGxvd19pZGxlKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlzdHJ1Y3QgY2xrICoqICBjbGtwOwotCWNvbnN0IHN0cnVjdCBvbWFwX2Nsb2NrX2NvbmZpZyAqaW5mbzsKLQlpbnQgY3J5c3RhbF90eXBlID0gMDsgLyogRGVmYXVsdCAxMiBNSHogKi8KKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jb21hcF9lYXJseV9jbGtfcmVzZXQoKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7CisJaWYgKGFyY2hfY2xvY2stPmNsa19hbGxvd19pZGxlKQorCQlhcmNoX2Nsb2NrLT5jbGtfYWxsb3dfaWRsZShjbGspOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTChjbGtfYWxsb3dfaWRsZSk7CiAKLQlmb3IgKGNsa3AgPSBvbmNoaXBfY2xrczsgY2xrcCA8IG9uY2hpcF9jbGtzK0FSUkFZX1NJWkUob25jaGlwX2Nsa3MpOyBjbGtwKyspIHsKLQkJaWYgKCgoKmNsa3ApLT5mbGFncyAmQ0xPQ0tfSU5fT01BUDE1MTApICYmIGNwdV9pc19vbWFwMTUxMCgpKSB7Ci0JCQljbGtfcmVnaXN0ZXIoKmNsa3ApOwotCQkJY29udGludWU7Ci0JCX0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLQkJaWYgKCgoKmNsa3ApLT5mbGFncyAmQ0xPQ0tfSU5fT01BUDE2WFgpICYmIGNwdV9pc19vbWFwMTZ4eCgpKSB7Ci0JCQljbGtfcmVnaXN0ZXIoKmNsa3ApOwotCQkJY29udGludWU7Ci0JCX0KLQotCQlpZiAoKCgqY2xrcCktPmZsYWdzICZDTE9DS19JTl9PTUFQNzMwKSAmJiBjcHVfaXNfb21hcDczMCgpKSB7Ci0JCQljbGtfcmVnaXN0ZXIoKmNsa3ApOwotCQkJY29udGludWU7Ci0JCX0KK2ludCBfX2luaXQgY2xrX2luaXQoc3RydWN0IGNsa19mdW5jdGlvbnMgKiBjdXN0b21fY2xvY2tzKQoreworCWlmICghY3VzdG9tX2Nsb2NrcykgeworCQlwcmludGsoS0VSTl9FUlIgIk5vIGN1c3RvbSBjbG9jayBmdW5jdGlvbnMgcmVnaXN0ZXJlZFxuIik7CisJCUJVRygpOwogCX0KIAotCWluZm8gPSBvbWFwX2dldF9jb25maWcoT01BUF9UQUdfQ0xPQ0ssIHN0cnVjdCBvbWFwX2Nsb2NrX2NvbmZpZyk7Ci0JaWYgKGluZm8gIT0gTlVMTCkgewotCQlpZiAoIWNwdV9pc19vbWFwMTUxMCgpKQotCQkJY3J5c3RhbF90eXBlID0gaW5mby0+c3lzdGVtX2Nsb2NrX3R5cGU7Ci0JfQotCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNzMwKQotCWNrX3JlZi5yYXRlID0gMTMwMDAwMDA7Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNlhYKQotCWlmIChjcnlzdGFsX3R5cGUgPT0gMikKLQkJY2tfcmVmLnJhdGUgPSAxOTIwMDAwMDsKLSNlbmRpZgotCi0JcHJpbnRrKCJDbG9ja3M6IEFSTV9TWVNTVDogMHglMDR4IERQTExfQ1RMOiAweCUwNHggQVJNX0NLQ1RMOiAweCUwNHhcbiIsCi0JICAgICAgIG9tYXBfcmVhZHcoQVJNX1NZU1NUKSwgb21hcF9yZWFkdyhEUExMX0NUTCksCi0JICAgICAgIG9tYXBfcmVhZHcoQVJNX0NLQ1RMKSk7Ci0KLQkvKiBXZSB3YW50IHRvIGJlIGluIHN5bmNyb25vdXMgc2NhbGFibGUgbW9kZSAqLwotCW9tYXBfd3JpdGV3KDB4MTAwMCwgQVJNX1NZU1NUKTsKLQotI2lmZGVmIENPTkZJR19PTUFQX0NMT0NLU19TRVRfQllfQk9PVExPQURFUgotCS8qIFVzZSB2YWx1ZXMgc2V0IGJ5IGJvb3Rsb2FkZXIuIERldGVybWluZSBQTEwgcmF0ZSBhbmQgcmVjYWxjdWxhdGUKLQkgKiBkZXBlbmRlbnQgY2xvY2tzIGFzIGlmIGtlcm5lbCBoYWQgY2hhbmdlZCBQTEwgb3IgZGl2aXNvcnMuCi0JICovCi0JewotCQl1bnNpZ25lZCBwbGxfY3RsX3ZhbCA9IG9tYXBfcmVhZHcoRFBMTF9DVEwpOwotCi0JCWNrX2RwbGwxLnJhdGUgPSBja19yZWYucmF0ZTsgLyogQmFzZSB4dGFsIHJhdGUgKi8KLQkJaWYgKHBsbF9jdGxfdmFsICYgMHgxMCkgewotCQkJLyogUExMIGVuYWJsZWQsIGFwcGx5IG11bHRpcGxpZXIgYW5kIGRpdmlzb3IgKi8KLQkJCWlmIChwbGxfY3RsX3ZhbCAmIDB4ZjgwKQotCQkJCWNrX2RwbGwxLnJhdGUgKj0gKHBsbF9jdGxfdmFsICYgMHhmODApID4+IDc7Ci0JCQlja19kcGxsMS5yYXRlIC89ICgocGxsX2N0bF92YWwgJiAweDYwKSA+PiA1KSArIDE7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBQTEwgZGlzYWJsZWQsIGFwcGx5IGJ5cGFzcyBkaXZpc29yICovCi0JCQlzd2l0Y2ggKHBsbF9jdGxfdmFsICYgMHhjKSB7Ci0JCQljYXNlIDA6Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIDB4NDoKLQkJCQlja19kcGxsMS5yYXRlIC89IDI7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCWNrX2RwbGwxLnJhdGUgLz0gNDsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0KLQlwcm9wYWdhdGVfcmF0ZSgmY2tfZHBsbDEpOwotI2Vsc2UKLQkvKiBGaW5kIHRoZSBoaWdoZXN0IHN1cHBvcnRlZCBmcmVxdWVuY3kgYW5kIGVuYWJsZSBpdCAqLwotCWlmIChzZWxlY3RfdGFibGVfcmF0ZSgmdmlydHVhbF9ja19tcHUsIH4wKSkgewotCQlwcmludGsoS0VSTl9FUlIgIlN5c3RlbSBmcmVxdWVuY2llcyBub3Qgc2V0LiBDaGVjayB5b3VyIGNvbmZpZy5cbiIpOwotCQkvKiBHdWVzcyBzYW5lIHZhbHVlcyAoNjBNSHopICovCi0JCW9tYXBfd3JpdGV3KDB4MjI5MCwgRFBMTF9DVEwpOwotCQlvbWFwX3dyaXRldygweDEwMDUsIEFSTV9DS0NUTCk7Ci0JCWNrX2RwbGwxLnJhdGUgPSA2MDAwMDAwMDsKLQkJcHJvcGFnYXRlX3JhdGUoJmNrX2RwbGwxKTsKLQl9Ci0jZW5kaWYKLQkvKiBDYWNoZSByYXRlcyBmb3IgY2xvY2tzIGNvbm5lY3RlZCB0byBja19yZWYgKG5vdCBkcGxsMSkgKi8KLQlwcm9wYWdhdGVfcmF0ZSgmY2tfcmVmKTsKLQlwcmludGsoS0VSTl9JTkZPICJDbG9ja2luZyByYXRlICh4dGFsL0RQTEwxL01QVSk6ICIKLQkJIiVsZC4lMDFsZC8lbGQuJTAxbGQvJWxkLiUwMWxkIE1IelxuIiwKLQkgICAgICAgY2tfcmVmLnJhdGUgLyAxMDAwMDAwLCAoY2tfcmVmLnJhdGUgLyAxMDAwMDApICUgMTAsCi0JICAgICAgIGNrX2RwbGwxLnJhdGUgLyAxMDAwMDAwLCAoY2tfZHBsbDEucmF0ZSAvIDEwMDAwMCkgJSAxMCwKLQkgICAgICAgYXJtX2NrLnJhdGUgLyAxMDAwMDAwLCAoYXJtX2NrLnJhdGUgLyAxMDAwMDApICUgMTApOwotCi0jaWZkZWYgQ09ORklHX01BQ0hfT01BUF9QRVJTRVVTMgotCS8qIFNlbGVjdCBzbGljZXIgb3V0cHV0IGFzIE9NQVAgaW5wdXQgY2xvY2sgKi8KLQlvbWFwX3dyaXRldyhvbWFwX3JlYWR3KE9NQVA3MzBfUENDX1VQTERfQ1RSTCkgJiB+MHgxLCBPTUFQNzMwX1BDQ19VUExEX0NUUkwpOwotI2VuZGlmCi0KLQkvKiBUdXJuIG9mZiBEU1AgYW5kIEFSTV9USU1YTy4gTWFrZSBzdXJlIEFSTV9JTlRIQ0sgaXMgbm90IGRpdmlkZWQgKi8KLQlvbWFwX3dyaXRldyhvbWFwX3JlYWR3KEFSTV9DS0NUTCkgJiAweDBmZmYsIEFSTV9DS0NUTCk7Ci0KLQkvKiBQdXQgRFNQL01QVUkgaW50byByZXNldCB1bnRpbCBuZWVkZWQgKi8KLQlvbWFwX3dyaXRldygwLCBBUk1fUlNUQ1QxKTsKLQlvbWFwX3dyaXRldygxLCBBUk1fUlNUQ1QyKTsKLQlvbWFwX3dyaXRldygweDQwMCwgQVJNX0lETEVDVDEpOwotCi0JLyoKLQkgKiBBY2NvcmRpbmcgdG8gT01BUDU5MTAgRXJyYXR1bSBTWVNfRE1BXzEsIGJpdCBETUFDS19SRVEgKGJpdCA4KQotCSAqIG9mIHRoZSBBUk1fSURMRUNUMiByZWdpc3RlciBtdXN0IGJlIHNldCB0byB6ZXJvLiBUaGUgcG93ZXItb24KLQkgKiBkZWZhdWx0IHZhbHVlIG9mIHRoaXMgYml0IGlzIG9uZS4KLQkgKi8KLQlvbWFwX3dyaXRldygweDAwMDAsIEFSTV9JRExFQ1QyKTsJLyogVHVybiBMQ0QgY2xvY2sgb2ZmIGFsc28gKi8KLQotCS8qCi0JICogT25seSBlbmFibGUgdGhvc2UgY2xvY2tzIHdlIHdpbGwgbmVlZCwgbGV0IHRoZSBkcml2ZXJzCi0JICogZW5hYmxlIG90aGVyIGNsb2NrcyBhcyBuZWNlc3NhcnkKLQkgKi8KLQljbGtfdXNlKCZhcm1wZXJfY2spOwotCWNsa191c2UoJmFybXhvcl9jayk7Ci0JY2xrX3VzZSgmYXJtdGltX2NrKTsKLQotCWlmIChjcHVfaXNfb21hcDE1MTAoKSkKLQkJY2xrX2VuYWJsZSgmYXJtX2dwaW9fY2spOworCWFyY2hfY2xvY2sgPSBjdXN0b21fY2xvY2tzOwogCiAJcmV0dXJuIDA7CiB9Ci0KLQotI2lmZGVmIENPTkZJR19PTUFQX1JFU0VUX0NMT0NLUwotCi1zdGF0aWMgaW50IF9faW5pdCBvbWFwX2xhdGVfY2xrX3Jlc2V0KHZvaWQpCi17Ci0JLyogVHVybiBvZmYgYWxsIHVudXNlZCBjbG9ja3MgKi8KLQlzdHJ1Y3QgY2xrICpwOwotCV9fdTMyIHJlZ3ZhbDMyOwotCi0JLyogVVNCX1JFUV9FTiB3aWxsIGJlIGRpc2FibGVkIGxhdGVyIGlmIG5lY2Vzc2FyeSAodXNiX2RjX2NrKSAqLwotCXJlZ3ZhbDMyID0gb21hcF9yZWFkdyhTT0ZUX1JFUV9SRUcpICYgKDEgPDwgNCk7Ci0Jb21hcF93cml0ZXcocmVndmFsMzIsIFNPRlRfUkVRX1JFRyk7Ci0Jb21hcF93cml0ZXcoMCwgU09GVF9SRVFfUkVHMik7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsICZjbG9ja3MsIG5vZGUpIHsKLQkJaWYgKHAtPnVzZWNvdW50ID4gMCB8fCAocC0+ZmxhZ3MgJiBBTFdBWVNfRU5BQkxFRCkgfHwKLQkJCXAtPmVuYWJsZV9yZWcgPT0gMCkKLQkJCWNvbnRpbnVlOwotCi0JCS8qIEFzc3VtZSBubyBEU1AgY2xvY2tzIGhhdmUgYmVlbiBhY3RpdmF0ZWQgYnkgYm9vdGxvYWRlciAqLwotCQlpZiAocC0+ZmxhZ3MgJiBEU1BfRE9NQUlOX0NMT0NLKQotCQkJY29udGludWU7Ci0KLQkJLyogSXMgdGhlIGNsb2NrIGFscmVhZHkgZGlzYWJsZWQ/ICovCi0JCWlmIChwLT5mbGFncyAmIEVOQUJMRV9SRUdfMzJCSVQpIHsKLQkJCWlmIChwLT5mbGFncyAmIFZJUlRVQUxfSU9fQUREUkVTUykKLQkJCQlyZWd2YWwzMiA9IF9fcmF3X3JlYWRsKHAtPmVuYWJsZV9yZWcpOwotCQkJZWxzZQotCQkJCXJlZ3ZhbDMyID0gb21hcF9yZWFkbChwLT5lbmFibGVfcmVnKTsKLQkJfSBlbHNlIHsKLQkJCWlmIChwLT5mbGFncyAmIFZJUlRVQUxfSU9fQUREUkVTUykKLQkJCQlyZWd2YWwzMiA9IF9fcmF3X3JlYWR3KHAtPmVuYWJsZV9yZWcpOwotCQkJZWxzZQotCQkJCXJlZ3ZhbDMyID0gb21hcF9yZWFkdyhwLT5lbmFibGVfcmVnKTsKLQkJfQotCi0JCWlmICgocmVndmFsMzIgJiAoMSA8PCBwLT5lbmFibGVfYml0KSkgPT0gMCkKLQkJCWNvbnRpbnVlOwotCi0JCS8qIEZJWE1FOiBUaGlzIGNsb2NrIHNlZW1zIHRvIGJlIG5lY2Vzc2FyeSBidXQgbm8tb25lCi0JCSAqIGhhcyBhc2tlZCBmb3IgaXRzIGFjdGl2YXRpb24uICovCi0JCWlmIChwID09ICZ0YzJfY2sgICAgICAgICAvLyBGSVg6IHBtLmMgKFNSQU0pLCBDQ1AsIENhbWVyYQotCQkgICAgfHwgcCA9PSAmY2tfZHBsbDFvdXQgLy8gRklYOiBTb1NTSSwgU1NSCi0JCSAgICB8fCBwID09ICZhcm1fZ3Bpb19jayAvLyBGSVg6IEdQSU8gY29kZSBmb3IgMTUxMAotCQkgICAgKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJGSVhNRTogQ2xvY2sgXCIlc1wiIHNlZW1zIHVudXNlZFxuIiwKLQkJCSAgICAgICBwLT5uYW1lKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJcHJpbnRrKEtFUk5fSU5GTyAiRGlzYWJsaW5nIHVudXNlZCBjbG9jayBcIiVzXCIuLi4gIiwgcC0+bmFtZSk7Ci0JCV9fY2xrX2Rpc2FibGUocCk7Ci0JCXByaW50aygiIGRvbmVcbiIpOwotCX0KLQotCXJldHVybiAwOwotfQotCi1sYXRlX2luaXRjYWxsKG9tYXBfbGF0ZV9jbGtfcmVzZXQpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9jbG9jay5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2Nsb2NrLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4OWUxZTguLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2Nsb2NrLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjAgKzAsMCBAQAotLyoKLSAqICBsaW51eC9hcmNoL2FybS9wbGF0LW9tYXAvY2xvY2suaAotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQgTm9raWEgY29ycG9yYXRpb24KLSAqICBXcml0dGVuIGJ5IFR1dWtrYSBUaWtrYW5lbiA8dHV1a2thLnRpa2thbmVuQGVsZWt0cm9iaXQuY29tPgotICogIEJhc2VkIG9uIGNsb2Nrcy5oIGJ5IFRvbnkgTGluZGdyZW4sIEdvcmRvbiBNY051dHQgYW5kIFJpZGdlUnVuLCBJbmMKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpZm5kZWYgX19BUkNIX0FSTV9PTUFQX0NMT0NLX0gKLSNkZWZpbmUgX19BUkNIX0FSTV9PTUFQX0NMT0NLX0gKLQotc3RydWN0IG1vZHVsZTsKLQotc3RydWN0IGNsayB7Ci0Jc3RydWN0IGxpc3RfaGVhZAlub2RlOwotCXN0cnVjdCBtb2R1bGUJCSpvd25lcjsKLQljb25zdCBjaGFyCQkqbmFtZTsKLQlzdHJ1Y3QgY2xrCQkqcGFyZW50OwotCXVuc2lnbmVkIGxvbmcJCXJhdGU7Ci0JX19zOAkJCXVzZWNvdW50OwotCV9fdTE2CQkJZmxhZ3M7Ci0JX191MzIJCQllbmFibGVfcmVnOwotCV9fdTgJCQllbmFibGVfYml0OwotCV9fdTgJCQlyYXRlX29mZnNldDsKLQl2b2lkCQkJKCpyZWNhbGMpKHN0cnVjdCBjbGsgKik7Ci0JaW50CQkJKCpzZXRfcmF0ZSkoc3RydWN0IGNsayAqLCB1bnNpZ25lZCBsb25nKTsKLQlsb25nCQkJKCpyb3VuZF9yYXRlKShzdHJ1Y3QgY2xrICosIHVuc2lnbmVkIGxvbmcpOwotCXZvaWQJCQkoKmluaXQpKHN0cnVjdCBjbGsgKik7Ci19OwotCi0KLXN0cnVjdCBtcHVfcmF0ZSB7Ci0JdW5zaWduZWQgbG9uZwkJcmF0ZTsKLQl1bnNpZ25lZCBsb25nCQl4dGFsOwotCXVuc2lnbmVkIGxvbmcJCXBsbF9yYXRlOwotCV9fdTE2CQkJY2tjdGxfdmFsOwotCV9fdTE2CQkJZHBsbGN0bF92YWw7Ci19OwotCi0KLS8qIENsb2NrIGZsYWdzICovCi0jZGVmaW5lIFJBVEVfQ0tDVEwJCTEKLSNkZWZpbmUgUkFURV9GSVhFRAkJMgotI2RlZmluZSBSQVRFX1BST1BBR0FURVMJCTQKLSNkZWZpbmUgVklSVFVBTF9DTE9DSwkJOAotI2RlZmluZSBBTFdBWVNfRU5BQkxFRAkJMTYKLSNkZWZpbmUgRU5BQkxFX1JFR18zMkJJVAkzMgotI2RlZmluZSBDTE9DS19JTl9PTUFQMTZYWAk2NAotI2RlZmluZSBDTE9DS19JTl9PTUFQMTUxMAkxMjgKLSNkZWZpbmUgQ0xPQ0tfSU5fT01BUDczMAkyNTYKLSNkZWZpbmUgRFNQX0RPTUFJTl9DTE9DSwk1MTIKLSNkZWZpbmUgVklSVFVBTF9JT19BRERSRVNTCTEwMjQKLQotLyogQVJNX0NLQ1RMIGJpdCBzaGlmdHMgKi8KLSNkZWZpbmUgQ0tDVExfUEVSRElWX09GRlNFVAkwCi0jZGVmaW5lIENLQ1RMX0xDRERJVl9PRkZTRVQJMgotI2RlZmluZSBDS0NUTF9BUk1ESVZfT0ZGU0VUCTQKLSNkZWZpbmUgQ0tDVExfRFNQRElWX09GRlNFVAk2Ci0jZGVmaW5lIENLQ1RMX1RDRElWX09GRlNFVAk4Ci0jZGVmaW5lIENLQ1RMX0RTUE1NVURJVl9PRkZTRVQJMTAKLS8qI2RlZmluZSBBUk1fVElNWE8JCTEyKi8KLSNkZWZpbmUgRU5fRFNQQ0sJCTEzCi0vKiNkZWZpbmUgQVJNX0lOVEhDS19TRUwJMTQqLyAvKiBEaXZpZGUtYnktMiBmb3IgbXB1IGludGhfY2sgKi8KLS8qIERTUF9DS0NUTCBiaXQgc2hpZnRzICovCi0jZGVmaW5lIENLQ1RMX0RTUFBFUkRJVl9PRkZTRVQJMAotCi0vKiBBUk1fSURMRUNUMSBiaXQgc2hpZnRzICovCi0vKiNkZWZpbmUgSURMV0RUX0FSTQkwKi8KLS8qI2RlZmluZSBJRExYT1JQX0FSTQkxKi8KLS8qI2RlZmluZSBJRExQRVJfQVJNCTIqLwotLyojZGVmaW5lIElETExDRF9BUk0JMyovCi0vKiNkZWZpbmUgSURMTEJfQVJNCTQqLwotLyojZGVmaW5lIElETEhTQUJfQVJNCTUqLwotLyojZGVmaW5lIElETElGX0FSTQk2Ki8KLS8qI2RlZmluZSBJRExEUExMX0FSTQk3Ki8KLS8qI2RlZmluZSBJRExBUElfQVJNCTgqLwotLyojZGVmaW5lIElETFRJTV9BUk0JOSovCi0vKiNkZWZpbmUgU0VUQVJNX0lETEUJMTEqLwotCi0vKiBBUk1fSURMRUNUMiBiaXQgc2hpZnRzICovCi0jZGVmaW5lIEVOX1dEVENLCTAKLSNkZWZpbmUgRU5fWE9SUENLCTEKLSNkZWZpbmUgRU5fUEVSQ0sJMgotI2RlZmluZSBFTl9MQ0RDSwkzCi0jZGVmaW5lIEVOX0xCQ0sJCTQgLyogTm90IG9uIDE2MTAvMTcxMCAqLwotLyojZGVmaW5lIEVOX0hTQUJDSwk1Ki8KLSNkZWZpbmUgRU5fQVBJQ0sJNgotI2RlZmluZSBFTl9USU1DSwk3Ci0jZGVmaW5lIERNQUNLX1JFUQk4Ci0jZGVmaW5lIEVOX0dQSU9DSwk5IC8qIE5vdCBvbiAxNjEwLzE3MTAgKi8KLS8qI2RlZmluZSBFTl9MQkZSRUVDSwkxMCovCi0jZGVmaW5lIEVOX0NLT1VUX0FSTQkxMQotCi0vKiBBUk1fSURMRUNUMyBiaXQgc2hpZnRzICovCi0jZGVmaW5lIEVOX09DUElfQ0sJMAotI2RlZmluZSBFTl9UQzFfQ0sJMgotI2RlZmluZSBFTl9UQzJfQ0sJNAotCi0vKiBEU1BfSURMRUNUMiBiaXQgc2hpZnRzICgwLDEsMiBhcmUgc2FtZSBhcyBmb3IgQVJNX0lETEVDVDIpICovCi0jZGVmaW5lIEVOX0RTUFRJTUNLCTUKLQotLyogVmFyaW91cyByZWdpc3RlciBkZWZpbmVzIGZvciBjbG9jayBjb250cm9scyBzY2F0dGVyZWQgYXJvdW5kIE9NQVAgY2hpcCAqLwotI2RlZmluZSBVU0JfTUNMS19FTl9CSVQJCTQJLyogSW4gVUxQRF9DTEtDX0NUUkwgKi8KLSNkZWZpbmUgVVNCX0hPU1RfSEhDX1VIT1NUX0VOCTkJLyogSW4gTU9EX0NPTkZfQ1RSTF8wICovCi0jZGVmaW5lIFNXRF9VTFBEX1BMTF9DTEtfUkVRCTEJLyogSW4gU1dEX0NMS19ESVZfQ1RSTF9TRUwgKi8KLSNkZWZpbmUgQ09NX1VMUERfUExMX0NMS19SRVEJMQkvKiBJbiBDT01fQ0xLX0RJVl9DVFJMX1NFTCAqLwotI2RlZmluZSBTV0RfQ0xLX0RJVl9DVFJMX1NFTAkweGZmZmUwODc0Ci0jZGVmaW5lIENPTV9DTEtfRElWX0NUUkxfU0VMCTB4ZmZmZTA4NzgKLSNkZWZpbmUgU09GVF9SRVFfUkVHCQkweGZmZmUwODM0Ci0jZGVmaW5lIFNPRlRfUkVRX1JFRzIJCTB4ZmZmZTA4ODAKLQotaW50IGNsa19yZWdpc3RlcihzdHJ1Y3QgY2xrICpjbGspOwotdm9pZCBjbGtfdW5yZWdpc3RlcihzdHJ1Y3QgY2xrICpjbGspOwotaW50IGNsa19pbml0KHZvaWQpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9jb21tb24uYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9jb21tb24uYwppbmRleCAwMmJjYzZjLi5jY2RiNDUyNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2NvbW1vbi5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9jb21tb24uYwpAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgPGFzbS9hcmNoL211eC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2ZwZ2EuaD4KIAotI2luY2x1ZGUgImNsb2NrLmgiCisjaW5jbHVkZSA8YXNtL2FyY2gvY2xvY2suaD4KIAogI2RlZmluZSBOT19MRU5HVEhfQ0hFQ0sgMHhmZmZmZmZmZgogCkBAIC0xMTcsMTkgKzExNyw0MyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBvbWFwX2FkZF9zZXJpYWxfY29uc29sZSh2b2lkKQogewotCWNvbnN0IHN0cnVjdCBvbWFwX3NlcmlhbF9jb25zb2xlX2NvbmZpZyAqaW5mbzsKKwljb25zdCBzdHJ1Y3Qgb21hcF9zZXJpYWxfY29uc29sZV9jb25maWcgKmNvbl9pbmZvOworCWNvbnN0IHN0cnVjdCBvbWFwX3VhcnRfY29uZmlnICp1YXJ0X2luZm87CisJc3RhdGljIGNoYXIgc3BlZWRbMTFdLCAqb3B0ID0gTlVMTDsKKwlpbnQgbGluZSwgaSwgdWFydF9pZHg7CiAKLQlpbmZvID0gb21hcF9nZXRfY29uZmlnKE9NQVBfVEFHX1NFUklBTF9DT05TT0xFLAotCQkJICAgICAgIHN0cnVjdCBvbWFwX3NlcmlhbF9jb25zb2xlX2NvbmZpZyk7Ci0JaWYgKGluZm8gIT0gTlVMTCAmJiBpbmZvLT5jb25zb2xlX3VhcnQpIHsKLQkJc3RhdGljIGNoYXIgc3BlZWRbMTFdLCAqb3B0ID0gTlVMTDsKKwl1YXJ0X2luZm8gPSBvbWFwX2dldF9jb25maWcoT01BUF9UQUdfVUFSVCwgc3RydWN0IG9tYXBfdWFydF9jb25maWcpOworCWNvbl9pbmZvID0gb21hcF9nZXRfY29uZmlnKE9NQVBfVEFHX1NFUklBTF9DT05TT0xFLAorCQkJCQlzdHJ1Y3Qgb21hcF9zZXJpYWxfY29uc29sZV9jb25maWcpOworCWlmICh1YXJ0X2luZm8gPT0gTlVMTCB8fCBjb25faW5mbyA9PSBOVUxMKQorCQlyZXR1cm4gMDsKIAotCQlpZiAoaW5mby0+Y29uc29sZV9zcGVlZCkgewotCQkJc25wcmludGYoc3BlZWQsIHNpemVvZihzcGVlZCksICIldSIsIGluZm8tPmNvbnNvbGVfc3BlZWQpOwotCQkJb3B0ID0gc3BlZWQ7Ci0JCX0KLQkJcmV0dXJuIGFkZF9wcmVmZXJyZWRfY29uc29sZSgidHR5UyIsIGluZm8tPmNvbnNvbGVfdWFydCAtIDEsIG9wdCk7CisJaWYgKGNvbl9pbmZvLT5jb25zb2xlX3VhcnQgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoY29uX2luZm8tPmNvbnNvbGVfc3BlZWQpIHsKKwkJc25wcmludGYoc3BlZWQsIHNpemVvZihzcGVlZCksICIldSIsIGNvbl9pbmZvLT5jb25zb2xlX3NwZWVkKTsKKwkJb3B0ID0gc3BlZWQ7CiAJfQotCXJldHVybiAwOworCisJdWFydF9pZHggPSBjb25faW5mby0+Y29uc29sZV91YXJ0IC0gMTsKKwlpZiAodWFydF9pZHggPj0gT01BUF9NQVhfTlJfUE9SVFMpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiQ29uc29sZTogZXh0ZXJuYWwgVUFSVCMlZC4gIgorCQkJIk5vdCBhZGRpbmcgaXQgYXMgY29uc29sZSB0aGlzIHRpbWUuXG4iLAorCQkJdWFydF9pZHggKyAxKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghKHVhcnRfaW5mby0+ZW5hYmxlZF91YXJ0cyAmICgxIDw8IHVhcnRfaWR4KSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJDb25zb2xlOiBTZWxlY3RlZCBVQVJUIyVkIGlzICIKKwkJCSJub3QgZW5hYmxlZCBmb3IgdGhpcyBwbGF0Zm9ybVxuIiwKKwkJCXVhcnRfaWR4ICsgMSk7CisJCXJldHVybiAtMTsKKwl9CisJbGluZSA9IDA7CisJZm9yIChpID0gMDsgaSA8IHVhcnRfaWR4OyBpKyspIHsKKwkJaWYgKHVhcnRfaW5mby0+ZW5hYmxlZF91YXJ0cyAmICgxIDw8IGkpKQorCQkJbGluZSsrOworCX0KKwlyZXR1cm4gYWRkX3ByZWZlcnJlZF9jb25zb2xlKCJ0dHlTIiwgbGluZSwgb3B0KTsKIH0KIGNvbnNvbGVfaW5pdGNhbGwob21hcF9hZGRfc2VyaWFsX2NvbnNvbGUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2RldmljZXMuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kZXZpY2VzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRjY2U5MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kZXZpY2VzLmMKQEAgLTAsMCArMSwzODEgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9wbGF0LW9tYXAvZGV2aWNlcy5jCisgKgorICogQ29tbW9uIHBsYXRmb3JtIGRldmljZSBzZXR1cC9pbml0aWFsaXphdGlvbiBmb3IgT01BUDEgYW5kIE9NQVAyCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL3RjLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvYm9hcmQuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9tdXguaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ncGlvLmg+CisKKwordm9pZCBvbWFwX25vcF9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKyAgICAgICAgLyogTm90aGluZyAqLworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWYgCWRlZmluZWQoQ09ORklHX0kyQ19PTUFQKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfT01BUF9NT0RVTEUpCisKKyNkZWZpbmUJT01BUDFfSTJDX0JBU0UJCTB4ZmZmYjM4MDAKKyNkZWZpbmUgT01BUDJfSTJDX0JBU0UxCQkweDQ4MDcwMDAwCisjZGVmaW5lIE9NQVBfSTJDX1NJWkUJCTB4M2YKKyNkZWZpbmUgT01BUDFfSTJDX0lOVAkJSU5UX0kyQworI2RlZmluZSBPTUFQMl9JMkNfSU5UMQkJNTYKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpMmNfcmVzb3VyY2VzMVtdID0geworCXsKKwkJLnN0YXJ0CQk9IDAsCisJCS5lbmQJCT0gMCwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJCT0gMCwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCisvKiBETUEgbm90IHVzZWQ7IHdvcmtzIGFyb3VuZCBlcnJhdHVtIHdyaXRpbmcgdG8gbm9uLWVtcHR5IGkyYyBmaWZvICovCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG9tYXBfaTJjX2RldmljZTEgPSB7CisgICAgICAgIC5uYW1lICAgICAgICAgICA9ICJpMmNfb21hcCIsCisgICAgICAgIC5pZCAgICAgICAgICAgICA9IDEsCisgICAgICAgIC5kZXYgPSB7CisgICAgICAgICAgICAgICAgLnJlbGVhc2UgICAgICAgID0gb21hcF9ub3BfcmVsZWFzZSwKKyAgICAgICAgfSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoaTJjX3Jlc291cmNlczEpLAorCS5yZXNvdXJjZQk9IGkyY19yZXNvdXJjZXMxLAorfTsKKworLyogU2VlIGFsc28gYXJjaC9hcm0vbWFjaC1vbWFwMi9kZXZpY2VzLmMgZm9yIHNlY29uZCBJMkMgb24gMjR4eCAqLworc3RhdGljIHZvaWQgb21hcF9pbml0X2kyYyh2b2lkKQoreworCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgeworCQlpMmNfcmVzb3VyY2VzMVswXS5zdGFydCA9IE9NQVAyX0kyQ19CQVNFMTsKKwkJaTJjX3Jlc291cmNlczFbMF0uZW5kID0gT01BUDJfSTJDX0JBU0UxICsgT01BUF9JMkNfU0laRTsKKwkJaTJjX3Jlc291cmNlczFbMV0uc3RhcnQgPSBPTUFQMl9JMkNfSU5UMTsKKwl9IGVsc2UgeworCQlpMmNfcmVzb3VyY2VzMVswXS5zdGFydCA9IE9NQVAxX0kyQ19CQVNFOworCQlpMmNfcmVzb3VyY2VzMVswXS5lbmQgPSBPTUFQMV9JMkNfQkFTRSArIE9NQVBfSTJDX1NJWkU7CisJCWkyY19yZXNvdXJjZXMxWzFdLnN0YXJ0ID0gT01BUDFfSTJDX0lOVDsKKwl9CisKKwkvKiBGSVhNRSBkZWZpbmUgYW5kIHVzZSBhIGJvb3QgdGFnLCBpbiBjYXNlIG9mIGJvYXJkcyB0aGF0CisJICogZWl0aGVyIGRvbid0IHdpcmUgdXAgSTJDLCBvciBjaGlwcyB0aGF0IG11eCBpdCBkaWZmZXJlbnRseS4uLgorCSAqIGl0IGNhbiBpbmNsdWRlIGNsb2NraW5nIGFuZCBhZGRyZXNzIGluZm8sIG1heWJlIG1vcmUuCisJICovCisJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CisJCW9tYXBfY2ZnX3JlZyhNMTlfMjRYWF9JMkMxX1NDTCk7CisJCW9tYXBfY2ZnX3JlZyhMMTVfMjRYWF9JMkMxX1NEQSk7CisJfSBlbHNlIHsKKwkJb21hcF9jZmdfcmVnKEkyQ19TQ0wpOworCQlvbWFwX2NmZ19yZWcoSTJDX1NEQSk7CisJfQorCisJKHZvaWQpIHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmb21hcF9pMmNfZGV2aWNlMSk7Cit9CisKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcF9pbml0X2kyYyh2b2lkKSB7fQorI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZglkZWZpbmVkKENPTkZJR19NTUNfT01BUCkgfHwgZGVmaW5lZChDT05GSUdfTU1DX09NQVBfTU9EVUxFKQorCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDI0WFgKKyNkZWZpbmUJT01BUF9NTUMxX0JBU0UJCTB4NDgwOWMwMDAKKyNkZWZpbmUgT01BUF9NTUMxX0lOVAkJODMKKyNlbHNlCisjZGVmaW5lCU9NQVBfTU1DMV9CQVNFCQkweGZmZmI3ODAwCisjZGVmaW5lIE9NQVBfTU1DMV9JTlQJCUlOVF9NTUMKKyNlbmRpZgorI2RlZmluZQlPTUFQX01NQzJfQkFTRQkJMHhmZmZiN2MwMAkvKiBvbWFwMTZ4eCBvbmx5ICovCisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9tbWNfY29uZiBtbWMxX2NvbmY7CisKK3N0YXRpYyB1NjQgbW1jMV9kbWFtYXNrID0gMHhmZmZmZmZmZjsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtbWMxX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CQk9IElPX0FERFJFU1MoT01BUF9NTUMxX0JBU0UpLAorCQkuZW5kCQk9IElPX0FERFJFU1MoT01BUF9NTUMxX0JBU0UpICsgMHg3ZiwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJCT0gT01BUF9NTUMxX0lOVCwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtbWNfb21hcF9kZXZpY2UxID0geworCS5uYW1lCQk9ICJtbWNpLW9tYXAiLAorCS5pZAkJPSAxLAorCS5kZXYgPSB7CisJCS5yZWxlYXNlCT0gb21hcF9ub3BfcmVsZWFzZSwKKwkJLmRtYV9tYXNrCT0gJm1tYzFfZG1hbWFzaywKKwkJLnBsYXRmb3JtX2RhdGEJPSAmbW1jMV9jb25mLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG1tYzFfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBtbWMxX3Jlc291cmNlcywKK307CisKKyNpZmRlZglDT05GSUdfQVJDSF9PTUFQMTZYWAorCitzdGF0aWMgc3RydWN0IG9tYXBfbW1jX2NvbmYgbW1jMl9jb25mOworCitzdGF0aWMgdTY0IG1tYzJfZG1hbWFzayA9IDB4ZmZmZmZmZmY7CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbW1jMl9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAkJPSBJT19BRERSRVNTKE9NQVBfTU1DMl9CQVNFKSwKKwkJLmVuZAkJPSBJT19BRERSRVNTKE9NQVBfTU1DMl9CQVNFKSArIDB4N2YsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IElOVF8xNjEwX01NQzIsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbW1jX29tYXBfZGV2aWNlMiA9IHsKKwkubmFtZQkJPSAibW1jaS1vbWFwIiwKKwkuaWQJCT0gMiwKKwkuZGV2ID0geworCQkucmVsZWFzZQk9IG9tYXBfbm9wX3JlbGVhc2UsCisJCS5kbWFfbWFzawk9ICZtbWMyX2RtYW1hc2ssCisJCS5wbGF0Zm9ybV9kYXRhCT0gJm1tYzJfY29uZiwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShtbWMyX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gbW1jMl9yZXNvdXJjZXMsCit9OworI2VuZGlmCisKK3N0YXRpYyB2b2lkIF9faW5pdCBvbWFwX2luaXRfbW1jKHZvaWQpCit7CisJY29uc3Qgc3RydWN0IG9tYXBfbW1jX2NvbmZpZwkqbW1jX2NvbmY7CisJY29uc3Qgc3RydWN0IG9tYXBfbW1jX2NvbmYJKm1tYzsKKworCS8qIE5PVEU6ICBhc3N1bWVzIE1NQyB3YXMgbmV2ZXIgKHdyb25nbHkpIGVuYWJsZWQgKi8KKwltbWNfY29uZiA9IG9tYXBfZ2V0X2NvbmZpZyhPTUFQX1RBR19NTUMsIHN0cnVjdCBvbWFwX21tY19jb25maWcpOworCWlmICghbW1jX2NvbmYpCisJCXJldHVybjsKKworCS8qIGJsb2NrIDEgaXMgYWx3YXlzIGF2YWlsYWJsZSBhbmQgaGFzIGp1c3Qgb25lIHBpbm91dCBvcHRpb24gKi8KKwltbWMgPSAmbW1jX2NvbmYtPm1tY1swXTsKKwlpZiAobW1jLT5lbmFibGVkKSB7CisJCWlmICghY3B1X2lzX29tYXAyNHh4KCkpIHsKKwkJCW9tYXBfY2ZnX3JlZyhNTUNfQ01EKTsKKwkJCW9tYXBfY2ZnX3JlZyhNTUNfQ0xLKTsKKwkJCW9tYXBfY2ZnX3JlZyhNTUNfREFUMCk7CisJCQlpZiAoY3B1X2lzX29tYXAxNzEwKCkpIHsKKwkJCQlvbWFwX2NmZ19yZWcoTTE1XzE3MTBfTU1DX0NMS0kpOworCQkJCW9tYXBfY2ZnX3JlZyhQMTlfMTcxMF9NTUNfQ01ERElSKTsKKwkJCQlvbWFwX2NmZ19yZWcoUDIwXzE3MTBfTU1DX0RBVERJUjApOworCQkJfQorCQl9CisJCWlmIChtbWMtPndpcmU0KSB7CisJCQlpZiAoIWNwdV9pc19vbWFwMjR4eCgpKSB7CisJCQkJb21hcF9jZmdfcmVnKE1NQ19EQVQxKTsKKwkJCQkvKiBOT1RFOiAgREFUMiBjYW4gYmUgb24gVzEwIChoZXJlKSBvciBNMTUgKi8KKwkJCQlpZiAoIW1tYy0+bm9tdXgpCisJCQkJCW9tYXBfY2ZnX3JlZyhNTUNfREFUMik7CisJCQkJb21hcF9jZmdfcmVnKE1NQ19EQVQzKTsKKwkJCX0KKwkJfQorCQltbWMxX2NvbmYgPSAqbW1jOworCQkodm9pZCkgcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZtbWNfb21hcF9kZXZpY2UxKTsKKwl9CisKKyNpZmRlZglDT05GSUdfQVJDSF9PTUFQMTZYWAorCS8qIGJsb2NrIDIgaXMgb24gbmV3ZXIgY2hpcHMsIGFuZCBoYXMgbWFueSBwaW5vdXQgb3B0aW9ucyAqLworCW1tYyA9ICZtbWNfY29uZi0+bW1jWzFdOworCWlmIChtbWMtPmVuYWJsZWQpIHsKKwkJaWYgKCFtbWMtPm5vbXV4KSB7CisJCQlvbWFwX2NmZ19yZWcoWThfMTYxMF9NTUMyX0NNRCk7CisJCQlvbWFwX2NmZ19yZWcoWTEwXzE2MTBfTU1DMl9DTEspOworCQkJb21hcF9jZmdfcmVnKFIxOF8xNjEwX01NQzJfQ0xLSU4pOworCQkJb21hcF9jZmdfcmVnKFc4XzE2MTBfTU1DMl9EQVQwKTsKKwkJCWlmIChtbWMtPndpcmU0KSB7CisJCQkJb21hcF9jZmdfcmVnKFY4XzE2MTBfTU1DMl9EQVQxKTsKKwkJCQlvbWFwX2NmZ19yZWcoVzE1XzE2MTBfTU1DMl9EQVQyKTsKKwkJCQlvbWFwX2NmZ19yZWcoUjEwXzE2MTBfTU1DMl9EQVQzKTsKKwkJCX0KKworCQkJLyogVGhlc2UgYXJlIG5lZWRlZCBmb3IgdGhlIGxldmVsIHNoaWZ0ZXIgKi8KKwkJCW9tYXBfY2ZnX3JlZyhWOV8xNjEwX01NQzJfQ01ERElSKTsKKwkJCW9tYXBfY2ZnX3JlZyhWNV8xNjEwX01NQzJfREFURElSMCk7CisJCQlvbWFwX2NmZ19yZWcoVzE5XzE2MTBfTU1DMl9EQVRESVIxKTsKKwkJfQorCisJCS8qIEZlZWRiYWNrIGNsb2NrIG11c3QgYmUgc2V0IG9uIE9NQVAtMTcxMCBNTUMyICovCisJCWlmIChjcHVfaXNfb21hcDE3MTAoKSkKKwkJCW9tYXBfd3JpdGVsKG9tYXBfcmVhZGwoTU9EX0NPTkZfQ1RSTF8xKSB8ICgxIDw8IDI0KSwKKwkJCQkgICAgIE1PRF9DT05GX0NUUkxfMSk7CisJCW1tYzJfY29uZiA9ICptbWM7CisJCSh2b2lkKSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm1tY19vbWFwX2RldmljZTIpOworCX0KKyNlbmRpZgorCXJldHVybjsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcF9pbml0X21tYyh2b2lkKSB7fQorI2VuZGlmCisKKyNpZglkZWZpbmVkKENPTkZJR19PTUFQX1dBVENIRE9HKSB8fCBkZWZpbmVkKENPTkZJR19PTUFQX1dBVENIRE9HX01PRFVMRSkKKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNFhYCisjZGVmaW5lCU9NQVBfV0RUX0JBU0UJCTB4NDgwMjIwMDAKKyNlbHNlCisjZGVmaW5lCU9NQVBfV0RUX0JBU0UJCTB4ZmZmZWIwMDAKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHdkdF9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAkJPSBPTUFQX1dEVF9CQVNFLAorCQkuZW5kCQk9IE9NQVBfV0RUX0JBU0UgKyAweDRmLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG9tYXBfd2R0X2RldmljZSA9IHsKKwkubmFtZQkgICA9ICJvbWFwX3dkdCIsCisJLmlkCSAgICAgPSAtMSwKKwkuZGV2ID0geworCQkucmVsZWFzZQk9IG9tYXBfbm9wX3JlbGVhc2UsCisJfSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUod2R0X3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gd2R0X3Jlc291cmNlcywKK307CisKK3N0YXRpYyB2b2lkIG9tYXBfaW5pdF93ZHQodm9pZCkKK3sKKwkodm9pZCkgcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZvbWFwX3dkdF9kZXZpY2UpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwX2luaXRfd2R0KHZvaWQpIHt9CisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmCWRlZmluZWQoQ09ORklHX09NQVBfUk5HKSB8fCBkZWZpbmVkKENPTkZJR19PTUFQX1JOR19NT0RVTEUpCisKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMjRYWAorI2RlZmluZQlPTUFQX1JOR19CQVNFCQkweDQ4MEEwMDAwCisjZWxzZQorI2RlZmluZQlPTUFQX1JOR19CQVNFCQkweGZmZmU1MDAwCisjZW5kaWYKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBybmdfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJCT0gT01BUF9STkdfQkFTRSwKKwkJLmVuZAkJPSBPTUFQX1JOR19CQVNFICsgMHg0ZiwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvbWFwX3JuZ19kZXZpY2UgPSB7CisJLm5hbWUJICAgPSAib21hcF9ybmciLAorCS5pZAkgICAgID0gLTEsCisJLmRldiA9IHsKKwkJLnJlbGVhc2UJPSBvbWFwX25vcF9yZWxlYXNlLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHJuZ19yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IHJuZ19yZXNvdXJjZXMsCit9OworCitzdGF0aWMgdm9pZCBvbWFwX2luaXRfcm5nKHZvaWQpCit7CisJKHZvaWQpIHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmb21hcF9ybmdfZGV2aWNlKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcF9pbml0X3JuZyh2b2lkKSB7fQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19GQl9PTUFQKSB8fCBkZWZpbmVkKENPTkZJR19GQl9PTUFQX01PRFVMRSkKKworc3RhdGljIHN0cnVjdCBvbWFwX2xjZF9jb25maWcgb21hcF9mYl9jb25mOworCitzdGF0aWMgdTY0IG9tYXBfZmJfZG1hX21hc2sgPSB+KHUzMikwOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvbWFwX2ZiX2RldmljZSA9IHsKKwkubmFtZQkJPSAib21hcGZiIiwKKwkuaWQJCT0gLTEsCisJLmRldiA9IHsKKwkJLnJlbGVhc2UJCT0gb21hcF9ub3BfcmVsZWFzZSwKKwkJLmRtYV9tYXNrCQk9ICZvbWFwX2ZiX2RtYV9tYXNrLAorCQkuY29oZXJlbnRfZG1hX21hc2sJPSB+KHUzMikwLAorCQkucGxhdGZvcm1fZGF0YQkJPSAmb21hcF9mYl9jb25mLAorCX0sCisJLm51bV9yZXNvdXJjZXMgPSAwLAorfTsKKworc3RhdGljIGlubGluZSB2b2lkIG9tYXBfaW5pdF9mYih2b2lkKQoreworCWNvbnN0IHN0cnVjdCBvbWFwX2xjZF9jb25maWcgKmNvbmY7CisKKwljb25mID0gb21hcF9nZXRfY29uZmlnKE9NQVBfVEFHX0xDRCwgc3RydWN0IG9tYXBfbGNkX2NvbmZpZyk7CisJaWYgKGNvbmYgIT0gTlVMTCkKKwkJb21hcF9mYl9jb25mID0gKmNvbmY7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZvbWFwX2ZiX2RldmljZSk7Cit9CisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwX2luaXRfZmIodm9pZCkge30KKworI2VuZGlmCisKKy8qCisgKiBUaGlzIGdldHMgY2FsbGVkIGFmdGVyIGJvYXJkLXNwZWNpZmljIElOSVRfTUFDSElORSwgYW5kIGluaXRpYWxpemVzIG1vc3QKKyAqIG9uLWNoaXAgcGVyaXBoZXJhbHMgYWNjZXNzaWJsZSBvbiB0aGlzIGJvYXJkIChleGNlcHQgZm9yIGZldyBsaWtlIFVTQik6CisgKgorICogIChhKSBEb2VzIGFueSAic3RhbmRhcmQgY29uZmlnIiBwaW4gbXV4aW5nIG5lZWRlZC4gIEJvYXJkLXNwZWNpZmljCisgKgljb2RlIHdpbGwgaGF2ZSBtdXhlZCBHUElPIHBpbnMgYW5kIGRvbmUgIm5vbnN0YW5kYXJkIiBzZXR1cDsKKyAqCXRoYXQgY29kZSBjb3VsZCBsaXZlIGluIHRoZSBib290IGxvYWRlci4KKyAqICAoYikgUG9wdWxhdGluZyBib2FyZC1zcGVjaWZpYyBwbGF0Zm9ybV9kYXRhIHdpdGggdGhlIGRhdGEgZHJpdmVycworICoJcmVseSBvbiB0byBoYW5kbGUgd2lyaW5nIHZhcmlhdGlvbnMuCisgKiAgKGMpIENyZWF0aW5nIHBsYXRmb3JtIGRldmljZXMgYXMgbWVhbmluZ2Z1bCBvbiB0aGlzIGJvYXJkIGFuZAorICoJd2l0aCB0aGlzIGtlcm5lbCBjb25maWd1cmF0aW9uLgorICoKKyAqIENsYWltaW5nIEdQSU9zLCBhbmQgc2V0dGluZyB0aGVpciBkaXJlY3Rpb24gYW5kIGluaXRpYWwgdmFsdWVzLCBpcyB0aGUKKyAqIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBkZXZpY2UgZHJpdmVycy4gIFNvIGlzIHJlc3BvbmRpbmcgdG8gcHJvYmUoKS4KKyAqCisgKiBCb2FyZC1zcGVjaWZpYyBrbm93bGVnZSBsaWtlIGNyZWF0aW5nIGRldmljZXMgb3IgcGluIHNldHVwIGlzIHRvIGJlCisgKiBrZXB0IG91dCBvZiBkcml2ZXJzIGFzIG11Y2ggYXMgcG9zc2libGUuICBJbiBwYXJ0aWN1bGFyLCBwaW4gc2V0dXAKKyAqIG1heSBiZSBoYW5kbGVkIGJ5IHRoZSBib290IGxvYWRlciwgYW5kIGRyaXZlcnMgc2hvdWxkIGV4cGVjdCBpdCB3aWxsCisgKiBub3JtYWxseSBoYXZlIGJlZW4gZG9uZSBieSB0aGUgdGltZSB0aGV5J3JlIHByb2JlZC4KKyAqLworc3RhdGljIGludCBfX2luaXQgb21hcF9pbml0X2RldmljZXModm9pZCkKK3sKKwkvKiBwbGVhc2Uga2VlcCB0aGVzZSBjYWxscywgYW5kIHRoZWlyIGltcGxlbWVudGF0aW9ucyBhYm92ZSwKKwkgKiBpbiBhbHBoYWJldGljYWwgb3JkZXIgc28gdGhleSdyZSBlYXNpZXIgdG8gc29ydCB0aHJvdWdoLgorCSAqLworCW9tYXBfaW5pdF9mYigpOworCW9tYXBfaW5pdF9pMmMoKTsKKwlvbWFwX2luaXRfbW1jKCk7CisJb21hcF9pbml0X3dkdCgpOworCW9tYXBfaW5pdF9ybmcoKTsKKworCXJldHVybiAwOworfQorYXJjaF9pbml0Y2FsbChvbWFwX2luaXRfZGV2aWNlcyk7CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9kbWEuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kbWEuYwppbmRleCBkYTdiNjUxLi5mNWNjMjFhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvZG1hLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2RtYS5jCkBAIC02LDYgKzYsOCBAQAogICogRE1BIGNoYW5uZWwgbGlua2luZyBmb3IgMTYxMCBieSBTYW11ZWwgT3J0aXogPHNhbXVlbC5vcnRpekBub2tpYS5jb20+CiAgKiBHcmFwaGljcyBETUEgYW5kIExDRCBETUEgZ3JhcGhpY3MgdHJhbmZvcm1hdGlvbnMKICAqIGJ5IEltcmUgRGVhayA8aW1yZS5kZWFrQG5va2lhLmNvbT4KKyAqIE9NQVAyIHN1cHBvcnQgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIE1lcmdlZCB0byBzdXBwb3J0IGJvdGggT01BUDEgYW5kIE9NQVAyIGJ5IFRvbnkgTGluZGdyZW4gPHRvbnlAYXRvbWlkZS5jb20+CiAgKiBTb21lIGZ1bmN0aW9ucyBiYXNlZCBvbiBlYXJsaWVyIGRtYS1vbWFwLmMgQ29weXJpZ2h0IChDKSAyMDAxIFJpZGdlUnVuLCBJbmMuCiAgKgogICogU3VwcG9ydCBmdW5jdGlvbnMgZm9yIHRoZSBPTUFQIGludGVybmFsIERNQSBjaGFubmVscy4KQEAgLTMxLDggKzMzLDE1IEBACiAKICNpbmNsdWRlIDxhc20vYXJjaC90Yy5oPgogCi0jZGVmaW5lIE9NQVBfRE1BX0FDVElWRQkJMHgwMQorI2RlZmluZSBERUJVR19QUklOVFMKKyN1bmRlZiBERUJVR19QUklOVFMKKyNpZmRlZiBERUJVR19QUklOVFMKKyNkZWZpbmUgZGVidWdfcHJpbnRrKHgpIHByaW50ayB4CisjZWxzZQorI2RlZmluZQlkZWJ1Z19wcmludGsoeCkKKyNlbmRpZgogCisjZGVmaW5lIE9NQVBfRE1BX0FDVElWRQkJMHgwMQogI2RlZmluZSBPTUFQX0RNQV9DQ1JfRU4JCSgxIDw8IDcpCiAKICNkZWZpbmUgT01BUF9GVU5DX01VWF9BUk1fQkFTRQkoMHhmZmZlMTAwMCArIDB4ZWMpCkBAIC01NSw3ICs2NCw3IEBACiBzdGF0aWMgc3BpbmxvY2tfdCBkbWFfY2hhbl9sb2NrOwogc3RhdGljIHN0cnVjdCBvbWFwX2RtYV9sY2ggZG1hX2NoYW5bT01BUF9MT0dJQ0FMX0RNQV9DSF9DT1VOVF07CiAKLWNvbnN0IHN0YXRpYyB1OCBkbWFfaXJxW09NQVBfTE9HSUNBTF9ETUFfQ0hfQ09VTlRdID0geworY29uc3Qgc3RhdGljIHU4IG9tYXAxX2RtYV9pcnFbT01BUF9MT0dJQ0FMX0RNQV9DSF9DT1VOVF0gPSB7CiAJSU5UX0RNQV9DSDBfNiwgSU5UX0RNQV9DSDFfNywgSU5UX0RNQV9DSDJfOCwgSU5UX0RNQV9DSDMsCiAJSU5UX0RNQV9DSDQsIElOVF9ETUFfQ0g1LCBJTlRfMTYxMF9ETUFfQ0g2LCBJTlRfMTYxMF9ETUFfQ0g3LAogCUlOVF8xNjEwX0RNQV9DSDgsIElOVF8xNjEwX0RNQV9DSDksIElOVF8xNjEwX0RNQV9DSDEwLApAQCAtNjMsNiArNzIsMjAgQEAKIAlJTlRfMTYxMF9ETUFfQ0gxNCwgSU5UXzE2MTBfRE1BX0NIMTUsIElOVF9ETUFfTENECiB9OwogCisjZGVmaW5lIFJFVklTSVRfMjRYWCgpCQlwcmludGsoS0VSTl9FUlIgIkZJWE1FOiBubyAlcyBvbiAyNHh4XG4iLCBcCisJCQkJCQlfX0ZVTkNUSU9OX18pOworCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1WFgKKy8qIFJldHVybnMgMSBpZiB0aGUgRE1BIG1vZHVsZSBpcyBpbiBPTUFQMTUxMC1jb21wYXRpYmxlIG1vZGUsIDAgb3RoZXJ3aXNlICovCitpbnQgb21hcF9kbWFfaW5fMTUxMF9tb2RlKHZvaWQpCit7CisJcmV0dXJuIGVuYWJsZV8xNTEwX21vZGU7Cit9CisjZWxzZQorI2RlZmluZSBvbWFwX2RtYV9pbl8xNTEwX21vZGUoKQkJMAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMQogc3RhdGljIGlubGluZSBpbnQgZ2V0X2dkbWFfZGV2KGludCByZXEpCiB7CiAJdTMyIHJlZyA9IE9NQVBfRlVOQ19NVVhfQVJNX0JBU0UgKyAoKHJlcSAtIDEpIC8gNSkgKiA0OwpAQCAtODIsNiArMTA1LDkgQEAKIAlsIHw9IChkZXYgLSAxKSA8PCBzaGlmdDsKIAlvbWFwX3dyaXRlbChsLCByZWcpOwogfQorI2Vsc2UKKyNkZWZpbmUgc2V0X2dkbWFfZGV2KHJlcSwgZGV2KQlkbyB7fSB3aGlsZSAoMCkKKyNlbmRpZgogCiBzdGF0aWMgdm9pZCBjbGVhcl9sY2hfcmVncyhpbnQgbGNoKQogewpAQCAtMTIxLDM4ICsxNDcsNjIgQEAKIH0KIAogdm9pZCBvbWFwX3NldF9kbWFfdHJhbnNmZXJfcGFyYW1zKGludCBsY2gsIGludCBkYXRhX3R5cGUsIGludCBlbGVtX2NvdW50LAotCQkJCSAgaW50IGZyYW1lX2NvdW50LCBpbnQgc3luY19tb2RlKQorCQkJCSAgaW50IGZyYW1lX2NvdW50LCBpbnQgc3luY19tb2RlLAorCQkJCSAgaW50IGRtYV90cmlnZ2VyLCBpbnQgc3JjX29yX2RzdF9zeW5jaCkKIHsKLQl1MTYgdzsKKwlPTUFQX0RNQV9DU0RQX1JFRyhsY2gpICY9IH4weDAzOworCU9NQVBfRE1BX0NTRFBfUkVHKGxjaCkgfD0gZGF0YV90eXBlOwogCi0JdyA9IG9tYXBfcmVhZHcoT01BUF9ETUFfQ1NEUChsY2gpKTsKLQl3ICY9IH4weDAzOwotCXcgfD0gZGF0YV90eXBlOwotCW9tYXBfd3JpdGV3KHcsIE9NQVBfRE1BX0NTRFAobGNoKSk7CisJaWYgKGNwdV9jbGFzc19pc19vbWFwMSgpKSB7CisJCU9NQVBfRE1BX0NDUl9SRUcobGNoKSAmPSB+KDEgPDwgNSk7CisJCWlmIChzeW5jX21vZGUgPT0gT01BUF9ETUFfU1lOQ19GUkFNRSkKKwkJCU9NQVBfRE1BX0NDUl9SRUcobGNoKSB8PSAxIDw8IDU7CiAKLQl3ID0gb21hcF9yZWFkdyhPTUFQX0RNQV9DQ1IobGNoKSk7Ci0JdyAmPSB+KDEgPDwgNSk7Ci0JaWYgKHN5bmNfbW9kZSA9PSBPTUFQX0RNQV9TWU5DX0ZSQU1FKQotCQl3IHw9IDEgPDwgNTsKLQlvbWFwX3dyaXRldyh3LCBPTUFQX0RNQV9DQ1IobGNoKSk7CisJCU9NQVAxX0RNQV9DQ1IyX1JFRyhsY2gpICY9IH4oMSA8PCAyKTsKKwkJaWYgKHN5bmNfbW9kZSA9PSBPTUFQX0RNQV9TWU5DX0JMT0NLKQorCQkJT01BUDFfRE1BX0NDUjJfUkVHKGxjaCkgfD0gMSA8PCAyOworCX0KIAotCXcgPSBvbWFwX3JlYWR3KE9NQVBfRE1BX0NDUjIobGNoKSk7Ci0JdyAmPSB+KDEgPDwgMik7Ci0JaWYgKHN5bmNfbW9kZSA9PSBPTUFQX0RNQV9TWU5DX0JMT0NLKQotCQl3IHw9IDEgPDwgMjsKLQlvbWFwX3dyaXRldyh3LCBPTUFQX0RNQV9DQ1IyKGxjaCkpOworCWlmIChjcHVfaXNfb21hcDI0eHgoKSAmJiBkbWFfdHJpZ2dlcikgeworCQl1MzIgdmFsID0gT01BUF9ETUFfQ0NSX1JFRyhsY2gpOwogCi0Jb21hcF93cml0ZXcoZWxlbV9jb3VudCwgT01BUF9ETUFfQ0VOKGxjaCkpOwotCW9tYXBfd3JpdGV3KGZyYW1lX2NvdW50LCBPTUFQX0RNQV9DRk4obGNoKSk7CisJCWlmIChkbWFfdHJpZ2dlciA+IDYzKQorCQkJdmFsIHw9IDEgPDwgMjA7CisJCWlmIChkbWFfdHJpZ2dlciA+IDMxKQorCQkJdmFsIHw9IDEgPDwgMTk7CiAKKwkJdmFsIHw9IChkbWFfdHJpZ2dlciAmIDB4MWYpOworCisJCWlmIChzeW5jX21vZGUgJiBPTUFQX0RNQV9TWU5DX0ZSQU1FKQorCQkJdmFsIHw9IDEgPDwgNTsKKworCQlpZiAoc3luY19tb2RlICYgT01BUF9ETUFfU1lOQ19CTE9DSykKKwkJCXZhbCB8PSAxIDw8IDE4OworCisJCWlmIChzcmNfb3JfZHN0X3N5bmNoKQorCQkJdmFsIHw9IDEgPDwgMjQ7CQkvKiBzb3VyY2Ugc3luY2ggKi8KKwkJZWxzZQorCQkJdmFsICY9IH4oMSA8PCAyNCk7CS8qIGRlc3Qgc3luY2ggKi8KKworCQlPTUFQX0RNQV9DQ1JfUkVHKGxjaCkgPSB2YWw7CisJfQorCisJT01BUF9ETUFfQ0VOX1JFRyhsY2gpID0gZWxlbV9jb3VudDsKKwlPTUFQX0RNQV9DRk5fUkVHKGxjaCkgPSBmcmFtZV9jb3VudDsKIH0KKwogdm9pZCBvbWFwX3NldF9kbWFfY29sb3JfbW9kZShpbnQgbGNoLCBlbnVtIG9tYXBfZG1hX2NvbG9yX21vZGUgbW9kZSwgdTMyIGNvbG9yKQogewogCXUxNiB3OwogCiAJQlVHX09OKG9tYXBfZG1hX2luXzE1MTBfbW9kZSgpKTsKIAotCXcgPSBvbWFwX3JlYWR3KE9NQVBfRE1BX0NDUjIobGNoKSkgJiB+MHgwMzsKKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKKwkJUkVWSVNJVF8yNFhYKCk7CisJCXJldHVybjsKKwl9CisKKwl3ID0gT01BUDFfRE1BX0NDUjJfUkVHKGxjaCkgJiB+MHgwMzsKIAlzd2l0Y2ggKG1vZGUpIHsKIAljYXNlIE9NQVBfRE1BX0NPTlNUQU5UX0ZJTEw6CiAJCXcgfD0gMHgwMTsKQEAgLTE2NSw2MyArMjE1LDg0IEBACiAJZGVmYXVsdDoKIAkJQlVHKCk7CiAJfQotCW9tYXBfd3JpdGV3KHcsIE9NQVBfRE1BX0NDUjIobGNoKSk7CisJT01BUDFfRE1BX0NDUjJfUkVHKGxjaCkgPSB3OwogCi0JdyA9IG9tYXBfcmVhZHcoT01BUF9ETUFfTENIX0NUUkwobGNoKSkgJiB+MHgwZjsKKwl3ID0gT01BUDFfRE1BX0xDSF9DVFJMX1JFRyhsY2gpICYgfjB4MGY7CiAJLyogRGVmYXVsdCBpcyBjaGFubmVsIHR5cGUgMkQgKi8KIAlpZiAobW9kZSkgewotCQlvbWFwX3dyaXRldygodTE2KWNvbG9yLCBPTUFQX0RNQV9DT0xPUl9MKGxjaCkpOwotCQlvbWFwX3dyaXRldygodTE2KShjb2xvciA+PiAxNiksIE9NQVBfRE1BX0NPTE9SX1UobGNoKSk7CisJCU9NQVAxX0RNQV9DT0xPUl9MX1JFRyhsY2gpID0gKHUxNiljb2xvcjsKKwkJT01BUDFfRE1BX0NPTE9SX1VfUkVHKGxjaCkgPSAodTE2KShjb2xvciA+PiAxNik7CiAJCXcgfD0gMTsJCS8qIENoYW5uZWwgdHlwZSBHICovCiAJfQotCW9tYXBfd3JpdGV3KHcsIE9NQVBfRE1BX0xDSF9DVFJMKGxjaCkpOworCU9NQVAxX0RNQV9MQ0hfQ1RSTF9SRUcobGNoKSA9IHc7CiB9CiAKLQorLyogTm90ZSB0aGF0IHNyY19wb3J0IGlzIG9ubHkgZm9yIG9tYXAxICovCiB2b2lkIG9tYXBfc2V0X2RtYV9zcmNfcGFyYW1zKGludCBsY2gsIGludCBzcmNfcG9ydCwgaW50IHNyY19hbW9kZSwKLQkJCSAgICAgdW5zaWduZWQgbG9uZyBzcmNfc3RhcnQpCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgc3JjX3N0YXJ0LAorCQkJICAgICBpbnQgc3JjX2VpLCBpbnQgc3JjX2ZpKQogewotCXUxNiB3OworCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkgeworCQlPTUFQX0RNQV9DU0RQX1JFRyhsY2gpICY9IH4oMHgxZiA8PCAyKTsKKwkJT01BUF9ETUFfQ1NEUF9SRUcobGNoKSB8PSBzcmNfcG9ydCA8PCAyOworCX0KIAotCXcgPSBvbWFwX3JlYWR3KE9NQVBfRE1BX0NTRFAobGNoKSk7Ci0JdyAmPSB+KDB4MWYgPDwgMik7Ci0JdyB8PSBzcmNfcG9ydCA8PCAyOwotCW9tYXBfd3JpdGV3KHcsIE9NQVBfRE1BX0NTRFAobGNoKSk7CisJT01BUF9ETUFfQ0NSX1JFRyhsY2gpICY9IH4oMHgwMyA8PCAxMik7CisJT01BUF9ETUFfQ0NSX1JFRyhsY2gpIHw9IHNyY19hbW9kZSA8PCAxMjsKIAotCXcgPSBvbWFwX3JlYWR3KE9NQVBfRE1BX0NDUihsY2gpKTsKLQl3ICY9IH4oMHgwMyA8PCAxMik7Ci0JdyB8PSBzcmNfYW1vZGUgPDwgMTI7Ci0Jb21hcF93cml0ZXcodywgT01BUF9ETUFfQ0NSKGxjaCkpOworCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkgeworCQlPTUFQMV9ETUFfQ1NTQV9VX1JFRyhsY2gpID0gc3JjX3N0YXJ0ID4+IDE2OworCQlPTUFQMV9ETUFfQ1NTQV9MX1JFRyhsY2gpID0gc3JjX3N0YXJ0OworCX0KIAotCW9tYXBfd3JpdGV3KHNyY19zdGFydCA+PiAxNiwgT01BUF9ETUFfQ1NTQV9VKGxjaCkpOwotCW9tYXBfd3JpdGV3KHNyY19zdGFydCwgT01BUF9ETUFfQ1NTQV9MKGxjaCkpOworCWlmIChjcHVfaXNfb21hcDI0eHgoKSkKKwkJT01BUDJfRE1BX0NTU0FfUkVHKGxjaCkgPSBzcmNfc3RhcnQ7CisKKwlPTUFQX0RNQV9DU0VJX1JFRyhsY2gpID0gc3JjX2VpOworCU9NQVBfRE1BX0NTRklfUkVHKGxjaCkgPSBzcmNfZmk7Cit9CisKK3ZvaWQgb21hcF9zZXRfZG1hX3BhcmFtcyhpbnQgbGNoLCBzdHJ1Y3Qgb21hcF9kbWFfY2hhbm5lbF9wYXJhbXMgKiBwYXJhbXMpCit7CisJb21hcF9zZXRfZG1hX3RyYW5zZmVyX3BhcmFtcyhsY2gsIHBhcmFtcy0+ZGF0YV90eXBlLAorCQkJCSAgICAgcGFyYW1zLT5lbGVtX2NvdW50LCBwYXJhbXMtPmZyYW1lX2NvdW50LAorCQkJCSAgICAgcGFyYW1zLT5zeW5jX21vZGUsIHBhcmFtcy0+dHJpZ2dlciwKKwkJCQkgICAgIHBhcmFtcy0+c3JjX29yX2RzdF9zeW5jaCk7CisJb21hcF9zZXRfZG1hX3NyY19wYXJhbXMobGNoLCBwYXJhbXMtPnNyY19wb3J0LAorCQkJCXBhcmFtcy0+c3JjX2Ftb2RlLCBwYXJhbXMtPnNyY19zdGFydCwKKwkJCQlwYXJhbXMtPnNyY19laSwgcGFyYW1zLT5zcmNfZmkpOworCisJb21hcF9zZXRfZG1hX2Rlc3RfcGFyYW1zKGxjaCwgcGFyYW1zLT5kc3RfcG9ydCwKKwkJCQkgcGFyYW1zLT5kc3RfYW1vZGUsIHBhcmFtcy0+ZHN0X3N0YXJ0LAorCQkJCSBwYXJhbXMtPmRzdF9laSwgcGFyYW1zLT5kc3RfZmkpOwogfQogCiB2b2lkIG9tYXBfc2V0X2RtYV9zcmNfaW5kZXgoaW50IGxjaCwgaW50IGVpZHgsIGludCBmaWR4KQogewotCW9tYXBfd3JpdGV3KGVpZHgsIE9NQVBfRE1BX0NTRUkobGNoKSk7Ci0Jb21hcF93cml0ZXcoZmlkeCwgT01BUF9ETUFfQ1NGSShsY2gpKTsKKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKKwkJUkVWSVNJVF8yNFhYKCk7CisJCXJldHVybjsKKwl9CisJT01BUF9ETUFfQ1NFSV9SRUcobGNoKSA9IGVpZHg7CisJT01BUF9ETUFfQ1NGSV9SRUcobGNoKSA9IGZpZHg7CiB9CiAKIHZvaWQgb21hcF9zZXRfZG1hX3NyY19kYXRhX3BhY2soaW50IGxjaCwgaW50IGVuYWJsZSkKIHsKLQl1MTYgdzsKLQotCXcgPSBvbWFwX3JlYWR3KE9NQVBfRE1BX0NTRFAobGNoKSkgJiB+KDEgPDwgNik7Ci0JdyB8PSBlbmFibGUgPyAoMSA8PCA2KSA6IDA7Ci0Jb21hcF93cml0ZXcodywgT01BUF9ETUFfQ1NEUChsY2gpKTsKKwlPTUFQX0RNQV9DU0RQX1JFRyhsY2gpICY9IH4oMSA8PCA2KTsKKwlpZiAoZW5hYmxlKQorCQlPTUFQX0RNQV9DU0RQX1JFRyhsY2gpIHw9ICgxIDw8IDYpOwogfQogCiB2b2lkIG9tYXBfc2V0X2RtYV9zcmNfYnVyc3RfbW9kZShpbnQgbGNoLCBlbnVtIG9tYXBfZG1hX2J1cnN0X21vZGUgYnVyc3RfbW9kZSkKIHsKLQl1MTYgdzsKKwlPTUFQX0RNQV9DU0RQX1JFRyhsY2gpICY9IH4oMHgwMyA8PCA3KTsKIAotCXcgPSBvbWFwX3JlYWR3KE9NQVBfRE1BX0NTRFAobGNoKSkgJiB+KDB4MDMgPDwgNyk7CiAJc3dpdGNoIChidXJzdF9tb2RlKSB7CiAJY2FzZSBPTUFQX0RNQV9EQVRBX0JVUlNUX0RJUzoKIAkJYnJlYWs7CiAJY2FzZSBPTUFQX0RNQV9EQVRBX0JVUlNUXzQ6Ci0JCXcgfD0gKDB4MDEgPDwgNyk7CisJCU9NQVBfRE1BX0NTRFBfUkVHKGxjaCkgfD0gKDB4MDIgPDwgNyk7CiAJCWJyZWFrOwogCWNhc2UgT01BUF9ETUFfREFUQV9CVVJTVF84OgogCQkvKiBub3Qgc3VwcG9ydGVkIGJ5IGN1cnJlbnQgaGFyZHdhcmUKQEAgLTIzMSwxNzUgKzMwMiw4NyBAQAogCWRlZmF1bHQ6CiAJCUJVRygpOwogCX0KLQlvbWFwX3dyaXRldyh3LCBPTUFQX0RNQV9DU0RQKGxjaCkpOwogfQogCisvKiBOb3RlIHRoYXQgZGVzdF9wb3J0IGlzIG9ubHkgZm9yIE9NQVAxICovCiB2b2lkIG9tYXBfc2V0X2RtYV9kZXN0X3BhcmFtcyhpbnQgbGNoLCBpbnQgZGVzdF9wb3J0LCBpbnQgZGVzdF9hbW9kZSwKLQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZGVzdF9zdGFydCkKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZGVzdF9zdGFydCwKKwkJCSAgICAgIGludCBkc3RfZWksIGludCBkc3RfZmkpCiB7Ci0JdTE2IHc7CisJaWYgKGNwdV9jbGFzc19pc19vbWFwMSgpKSB7CisJCU9NQVBfRE1BX0NTRFBfUkVHKGxjaCkgJj0gfigweDFmIDw8IDkpOworCQlPTUFQX0RNQV9DU0RQX1JFRyhsY2gpIHw9IGRlc3RfcG9ydCA8PCA5OworCX0KIAotCXcgPSBvbWFwX3JlYWR3KE9NQVBfRE1BX0NTRFAobGNoKSk7Ci0JdyAmPSB+KDB4MWYgPDwgOSk7Ci0JdyB8PSBkZXN0X3BvcnQgPDwgOTsKLQlvbWFwX3dyaXRldyh3LCBPTUFQX0RNQV9DU0RQKGxjaCkpOworCU9NQVBfRE1BX0NDUl9SRUcobGNoKSAmPSB+KDB4MDMgPDwgMTQpOworCU9NQVBfRE1BX0NDUl9SRUcobGNoKSB8PSBkZXN0X2Ftb2RlIDw8IDE0OwogCi0JdyA9IG9tYXBfcmVhZHcoT01BUF9ETUFfQ0NSKGxjaCkpOwotCXcgJj0gfigweDAzIDw8IDE0KTsKLQl3IHw9IGRlc3RfYW1vZGUgPDwgMTQ7Ci0Jb21hcF93cml0ZXcodywgT01BUF9ETUFfQ0NSKGxjaCkpOworCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkgeworCQlPTUFQMV9ETUFfQ0RTQV9VX1JFRyhsY2gpID0gZGVzdF9zdGFydCA+PiAxNjsKKwkJT01BUDFfRE1BX0NEU0FfTF9SRUcobGNoKSA9IGRlc3Rfc3RhcnQ7CisJfQogCi0Jb21hcF93cml0ZXcoZGVzdF9zdGFydCA+PiAxNiwgT01BUF9ETUFfQ0RTQV9VKGxjaCkpOwotCW9tYXBfd3JpdGV3KGRlc3Rfc3RhcnQsIE9NQVBfRE1BX0NEU0FfTChsY2gpKTsKKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkpCisJCU9NQVAyX0RNQV9DRFNBX1JFRyhsY2gpID0gZGVzdF9zdGFydDsKKworCU9NQVBfRE1BX0NERUlfUkVHKGxjaCkgPSBkc3RfZWk7CisJT01BUF9ETUFfQ0RGSV9SRUcobGNoKSA9IGRzdF9maTsKIH0KIAogdm9pZCBvbWFwX3NldF9kbWFfZGVzdF9pbmRleChpbnQgbGNoLCBpbnQgZWlkeCwgaW50IGZpZHgpCiB7Ci0Jb21hcF93cml0ZXcoZWlkeCwgT01BUF9ETUFfQ0RFSShsY2gpKTsKLQlvbWFwX3dyaXRldyhmaWR4LCBPTUFQX0RNQV9DREZJKGxjaCkpOworCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgeworCQlSRVZJU0lUXzI0WFgoKTsKKwkJcmV0dXJuOworCX0KKwlPTUFQX0RNQV9DREVJX1JFRyhsY2gpID0gZWlkeDsKKwlPTUFQX0RNQV9DREZJX1JFRyhsY2gpID0gZmlkeDsKIH0KIAogdm9pZCBvbWFwX3NldF9kbWFfZGVzdF9kYXRhX3BhY2soaW50IGxjaCwgaW50IGVuYWJsZSkKIHsKLQl1MTYgdzsKLQotCXcgPSBvbWFwX3JlYWR3KE9NQVBfRE1BX0NTRFAobGNoKSkgJiB+KDEgPDwgMTMpOwotCXcgfD0gZW5hYmxlID8gKDEgPDwgMTMpIDogMDsKLQlvbWFwX3dyaXRldyh3LCBPTUFQX0RNQV9DU0RQKGxjaCkpOworCU9NQVBfRE1BX0NTRFBfUkVHKGxjaCkgJj0gfigxIDw8IDEzKTsKKwlpZiAoZW5hYmxlKQorCQlPTUFQX0RNQV9DU0RQX1JFRyhsY2gpIHw9IDEgPDwgMTM7CiB9CiAKIHZvaWQgb21hcF9zZXRfZG1hX2Rlc3RfYnVyc3RfbW9kZShpbnQgbGNoLCBlbnVtIG9tYXBfZG1hX2J1cnN0X21vZGUgYnVyc3RfbW9kZSkKIHsKLQl1MTYgdzsKKwlPTUFQX0RNQV9DU0RQX1JFRyhsY2gpICY9IH4oMHgwMyA8PCAxNCk7CiAKLQl3ID0gb21hcF9yZWFkdyhPTUFQX0RNQV9DU0RQKGxjaCkpICYgfigweDAzIDw8IDE0KTsKIAlzd2l0Y2ggKGJ1cnN0X21vZGUpIHsKIAljYXNlIE9NQVBfRE1BX0RBVEFfQlVSU1RfRElTOgogCQlicmVhazsKIAljYXNlIE9NQVBfRE1BX0RBVEFfQlVSU1RfNDoKLQkJdyB8PSAoMHgwMSA8PCAxNCk7CisJCU9NQVBfRE1BX0NTRFBfUkVHKGxjaCkgfD0gKDB4MDIgPDwgMTQpOwogCQlicmVhazsKIAljYXNlIE9NQVBfRE1BX0RBVEFfQlVSU1RfODoKLQkJdyB8PSAoMHgwMyA8PCAxNCk7CisJCU9NQVBfRE1BX0NTRFBfUkVHKGxjaCkgfD0gKDB4MDMgPDwgMTQpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlwcmludGsoS0VSTl9FUlIgIkludmFsaWQgRE1BIGJ1cnN0IG1vZGVcbiIpOwogCQlCVUcoKTsKIAkJcmV0dXJuOwogCX0KLQlvbWFwX3dyaXRldyh3LCBPTUFQX0RNQV9DU0RQKGxjaCkpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9pbnRyKGludCBsY2gpCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcF9lbmFibGVfY2hhbm5lbF9pcnEoaW50IGxjaCkKIHsKLQl1MTYgdzsKKwl1MzIgc3RhdHVzOwogCiAJLyogUmVhZCBDU1IgdG8gbWFrZSBzdXJlIGl0J3MgY2xlYXJlZC4gKi8KLQl3ID0gb21hcF9yZWFkdyhPTUFQX0RNQV9DU1IobGNoKSk7CisJc3RhdHVzID0gT01BUF9ETUFfQ1NSX1JFRyhsY2gpOworCiAJLyogRW5hYmxlIHNvbWUgbmljZSBpbnRlcnJ1cHRzLiAqLwotCW9tYXBfd3JpdGV3KGRtYV9jaGFuW2xjaF0uZW5hYmxlZF9pcnFzLCBPTUFQX0RNQV9DSUNSKGxjaCkpOworCU9NQVBfRE1BX0NJQ1JfUkVHKGxjaCkgPSBkbWFfY2hhbltsY2hdLmVuYWJsZWRfaXJxczsKKwogCWRtYV9jaGFuW2xjaF0uZmxhZ3MgfD0gT01BUF9ETUFfQUNUSVZFOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZW5hYmxlX2xuayhpbnQgbGNoKQorc3RhdGljIHZvaWQgb21hcF9kaXNhYmxlX2NoYW5uZWxfaXJxKGludCBsY2gpCiB7Ci0JdTE2IHc7Ci0KLQkvKiBDbGVhciB0aGUgU1RPUF9MTksgYml0cyAqLwotCXcgPSBvbWFwX3JlYWR3KE9NQVBfRE1BX0NMTktfQ1RSTChsY2gpKTsKLQl3ICY9IH4oMSA8PCAxNCk7Ci0Jb21hcF93cml0ZXcodywgT01BUF9ETUFfQ0xOS19DVFJMKGxjaCkpOwotCi0JLyogQW5kIHNldCB0aGUgRU5BQkxFX0xOSyBiaXRzICovCi0JaWYgKGRtYV9jaGFuW2xjaF0ubmV4dF9sY2ggIT0gLTEpCi0JCW9tYXBfd3JpdGV3KGRtYV9jaGFuW2xjaF0ubmV4dF9sY2ggfCAoMSA8PCAxNSksCi0JCQkgICAgT01BUF9ETUFfQ0xOS19DVFJMKGxjaCkpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZGlzYWJsZV9sbmsoaW50IGxjaCkKLXsKLQl1MTYgdzsKLQotCS8qIERpc2FibGUgaW50ZXJydXB0cyAqLwotCW9tYXBfd3JpdGV3KDAsIE9NQVBfRE1BX0NJQ1IobGNoKSk7Ci0KLQkvKiBTZXQgdGhlIFNUT1BfTE5LIGJpdCAqLwotCXcgPSBvbWFwX3JlYWR3KE9NQVBfRE1BX0NMTktfQ1RSTChsY2gpKTsKLQl3IHw9ICgxIDw8IDE0KTsKLQl3ID0gb21hcF93cml0ZXcodywgT01BUF9ETUFfQ0xOS19DVFJMKGxjaCkpOwotCi0JZG1hX2NoYW5bbGNoXS5mbGFncyAmPSB+T01BUF9ETUFfQUNUSVZFOwotfQotCi12b2lkIG9tYXBfc3RhcnRfZG1hKGludCBsY2gpCi17Ci0JdTE2IHc7Ci0KLQlpZiAoIW9tYXBfZG1hX2luXzE1MTBfbW9kZSgpICYmIGRtYV9jaGFuW2xjaF0ubmV4dF9sY2ggIT0gLTEpIHsKLQkJaW50IG5leHRfbGNoLCBjdXJfbGNoOwotCQljaGFyIGRtYV9jaGFuX2xpbmtfbWFwW09NQVBfTE9HSUNBTF9ETUFfQ0hfQ09VTlRdOwotCi0JCWRtYV9jaGFuX2xpbmtfbWFwW2xjaF0gPSAxOwotCQkvKiBTZXQgdGhlIGxpbmsgcmVnaXN0ZXIgb2YgdGhlIGZpcnN0IGNoYW5uZWwgKi8KLQkJZW5hYmxlX2xuayhsY2gpOwotCi0JCW1lbXNldChkbWFfY2hhbl9saW5rX21hcCwgMCwgc2l6ZW9mKGRtYV9jaGFuX2xpbmtfbWFwKSk7Ci0JCWN1cl9sY2ggPSBkbWFfY2hhbltsY2hdLm5leHRfbGNoOwotCQlkbyB7Ci0JCQluZXh0X2xjaCA9IGRtYV9jaGFuW2N1cl9sY2hdLm5leHRfbGNoOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGUgbG9vcCBjYXNlOiB3ZSd2ZSBiZWVuIGhlcmUgYWxyZWFkeSAqLwotCQkJaWYgKGRtYV9jaGFuX2xpbmtfbWFwW2N1cl9sY2hdKQotCQkJCWJyZWFrOwotCQkJLyogTWFyayB0aGUgY3VycmVudCBjaGFubmVsICovCi0JCQlkbWFfY2hhbl9saW5rX21hcFtjdXJfbGNoXSA9IDE7Ci0KLQkJCWVuYWJsZV9sbmsoY3VyX2xjaCk7Ci0JCQlpbml0X2ludHIoY3VyX2xjaCk7Ci0KLQkJCWN1cl9sY2ggPSBuZXh0X2xjaDsKLQkJfSB3aGlsZSAobmV4dF9sY2ggIT0gLTEpOwotCX0KLQotCWluaXRfaW50cihsY2gpOwotCi0JdyA9IG9tYXBfcmVhZHcoT01BUF9ETUFfQ0NSKGxjaCkpOwotCXcgfD0gT01BUF9ETUFfQ0NSX0VOOwotCW9tYXBfd3JpdGV3KHcsIE9NQVBfRE1BX0NDUihsY2gpKTsKLQlkbWFfY2hhbltsY2hdLmZsYWdzIHw9IE9NQVBfRE1BX0FDVElWRTsKLX0KLQotdm9pZCBvbWFwX3N0b3BfZG1hKGludCBsY2gpCi17Ci0JdTE2IHc7Ci0KLQlpZiAoIW9tYXBfZG1hX2luXzE1MTBfbW9kZSgpICYmIGRtYV9jaGFuW2xjaF0ubmV4dF9sY2ggIT0gLTEpIHsKLQkJaW50IG5leHRfbGNoLCBjdXJfbGNoID0gbGNoOwotCQljaGFyIGRtYV9jaGFuX2xpbmtfbWFwW09NQVBfTE9HSUNBTF9ETUFfQ0hfQ09VTlRdOwotCi0JCW1lbXNldChkbWFfY2hhbl9saW5rX21hcCwgMCwgc2l6ZW9mKGRtYV9jaGFuX2xpbmtfbWFwKSk7Ci0JCWRvIHsKLQkJCS8qIFRoZSBsb29wIGNhc2U6IHdlJ3ZlIGJlZW4gaGVyZSBhbHJlYWR5ICovCi0JCQlpZiAoZG1hX2NoYW5fbGlua19tYXBbY3VyX2xjaF0pCi0JCQkJYnJlYWs7Ci0JCQkvKiBNYXJrIHRoZSBjdXJyZW50IGNoYW5uZWwgKi8KLQkJCWRtYV9jaGFuX2xpbmtfbWFwW2N1cl9sY2hdID0gMTsKLQotCQkJZGlzYWJsZV9sbmsoY3VyX2xjaCk7Ci0KLQkJCW5leHRfbGNoID0gZG1hX2NoYW5bY3VyX2xjaF0ubmV4dF9sY2g7Ci0JCQljdXJfbGNoID0gbmV4dF9sY2g7Ci0JCX0gd2hpbGUgKG5leHRfbGNoICE9IC0xKTsKLQotCQlyZXR1cm47Ci0JfQotCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMgb24gdGhlIGNoYW5uZWwgKi8KLQlvbWFwX3dyaXRldygwLCBPTUFQX0RNQV9DSUNSKGxjaCkpOwotCi0JdyA9IG9tYXBfcmVhZHcoT01BUF9ETUFfQ0NSKGxjaCkpOwotCXcgJj0gfk9NQVBfRE1BX0NDUl9FTjsKLQlvbWFwX3dyaXRldyh3LCBPTUFQX0RNQV9DQ1IobGNoKSk7Ci0JZG1hX2NoYW5bbGNoXS5mbGFncyAmPSB+T01BUF9ETUFfQUNUSVZFOworCWlmIChjcHVfaXNfb21hcDI0eHgoKSkKKwkJT01BUF9ETUFfQ0lDUl9SRUcobGNoKSA9IDA7CiB9CiAKIHZvaWQgb21hcF9lbmFibGVfZG1hX2lycShpbnQgbGNoLCB1MTYgYml0cykKQEAgLTQxMiw1NSArMzk1LDQ1IEBACiAJZG1hX2NoYW5bbGNoXS5lbmFibGVkX2lycXMgJj0gfmJpdHM7CiB9CiAKLXN0YXRpYyBpbnQgZG1hX2hhbmRsZV9jaChpbnQgY2gpCitzdGF0aWMgaW5saW5lIHZvaWQgZW5hYmxlX2xuayhpbnQgbGNoKQogewotCXUxNiBjc3I7CisJaWYgKGNwdV9jbGFzc19pc19vbWFwMSgpKQorCQlPTUFQX0RNQV9DTE5LX0NUUkxfUkVHKGxjaCkgJj0gfigxIDw8IDE0KTsKIAotCWlmIChlbmFibGVfMTUxMF9tb2RlICYmIGNoID49IDYpIHsKLQkJY3NyID0gZG1hX2NoYW5bY2hdLnNhdmVkX2NzcjsKLQkJZG1hX2NoYW5bY2hdLnNhdmVkX2NzciA9IDA7Ci0JfSBlbHNlCi0JCWNzciA9IG9tYXBfcmVhZHcoT01BUF9ETUFfQ1NSKGNoKSk7Ci0JaWYgKGVuYWJsZV8xNTEwX21vZGUgJiYgY2ggPD0gMiAmJiAoY3NyID4+IDcpICE9IDApIHsKLQkJZG1hX2NoYW5bY2ggKyA2XS5zYXZlZF9jc3IgPSBjc3IgPj4gNzsKLQkJY3NyICY9IDB4N2Y7Ci0JfQotCWlmICgoY3NyICYgMHgzZikgPT0gMCkKLQkJcmV0dXJuIDA7Ci0JaWYgKHVubGlrZWx5KGRtYV9jaGFuW2NoXS5kZXZfaWQgPT0gLTEpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIlNwdXJpb3VzIGludGVycnVwdCBmcm9tIERNQSBjaGFubmVsICVkIChDU1IgJTA0eClcbiIsCi0JCSAgICAgICBjaCwgY3NyKTsKLQkJcmV0dXJuIDA7Ci0JfQotCWlmICh1bmxpa2VseShjc3IgJiBPTUFQX0RNQV9UT1VUX0lSUSkpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkRNQSB0aW1lb3V0IHdpdGggZGV2aWNlICVkXG4iLCBkbWFfY2hhbltjaF0uZGV2X2lkKTsKLQlpZiAodW5saWtlbHkoY3NyICYgT01BUF9ETUFfRFJPUF9JUlEpKQotCQlwcmludGsoS0VSTl9XQVJOSU5HICJETUEgc3luY2hyb25pemF0aW9uIGV2ZW50IGRyb3Agb2NjdXJyZWQgd2l0aCBkZXZpY2UgJWRcbiIsCi0JCSAgICAgICBkbWFfY2hhbltjaF0uZGV2X2lkKTsKLQlpZiAobGlrZWx5KGNzciAmIE9NQVBfRE1BX0JMT0NLX0lSUSkpCi0JCWRtYV9jaGFuW2NoXS5mbGFncyAmPSB+T01BUF9ETUFfQUNUSVZFOwotCWlmIChsaWtlbHkoZG1hX2NoYW5bY2hdLmNhbGxiYWNrICE9IE5VTEwpKQotCQlkbWFfY2hhbltjaF0uY2FsbGJhY2soY2gsIGNzciwgZG1hX2NoYW5bY2hdLmRhdGEpOwotCXJldHVybiAxOworCS8qIFNldCB0aGUgRU5BQkxFX0xOSyBiaXRzICovCisJaWYgKGRtYV9jaGFuW2xjaF0ubmV4dF9sY2ggIT0gLTEpCisJCU9NQVBfRE1BX0NMTktfQ1RSTF9SRUcobGNoKSA9CisJCQlkbWFfY2hhbltsY2hdLm5leHRfbGNoIHwgKDEgPDwgMTUpOwogfQogCi1zdGF0aWMgaXJxcmV0dXJuX3QgZG1hX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitzdGF0aWMgaW5saW5lIHZvaWQgZGlzYWJsZV9sbmsoaW50IGxjaCkKIHsKLQlpbnQgY2ggPSAoKGludCkgZGV2X2lkKSAtIDE7Ci0JaW50IGhhbmRsZWQgPSAwOwotCi0JZm9yICg7OykgewotCQlpbnQgaGFuZGxlZF9ub3cgPSAwOwotCi0JCWhhbmRsZWRfbm93ICs9IGRtYV9oYW5kbGVfY2goY2gpOwotCQlpZiAoZW5hYmxlXzE1MTBfbW9kZSAmJiBkbWFfY2hhbltjaCArIDZdLnNhdmVkX2NzcikKLQkJCWhhbmRsZWRfbm93ICs9IGRtYV9oYW5kbGVfY2goY2ggKyA2KTsKLQkJaWYgKCFoYW5kbGVkX25vdykKLQkJCWJyZWFrOwotCQloYW5kbGVkICs9IGhhbmRsZWRfbm93OworCS8qIERpc2FibGUgaW50ZXJydXB0cyAqLworCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkgeworCQlPTUFQX0RNQV9DSUNSX1JFRyhsY2gpID0gMDsKKwkJLyogU2V0IHRoZSBTVE9QX0xOSyBiaXQgKi8KKwkJT01BUF9ETUFfQ0xOS19DVFJMX1JFRyhsY2gpIHw9IDEgPDwgMTQ7CiAJfQogCi0JcmV0dXJuIGhhbmRsZWQgPyBJUlFfSEFORExFRCA6IElSUV9OT05FOworCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgeworCQlvbWFwX2Rpc2FibGVfY2hhbm5lbF9pcnEobGNoKTsKKwkJLyogQ2xlYXIgdGhlIEVOQUJMRV9MTksgYml0ICovCisJCU9NQVBfRE1BX0NMTktfQ1RSTF9SRUcobGNoKSAmPSB+KDEgPDwgMTUpOworCX0KKworCWRtYV9jaGFuW2xjaF0uZmxhZ3MgJj0gfk9NQVBfRE1BX0FDVElWRTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG9tYXAyX2VuYWJsZV9pcnFfbGNoKGludCBsY2gpCit7CisJdTMyIHZhbDsKKworCWlmICghY3B1X2lzX29tYXAyNHh4KCkpCisJCXJldHVybjsKKworCXZhbCA9IG9tYXBfcmVhZGwoT01BUF9ETUE0X0lSUUVOQUJMRV9MMCk7CisJdmFsIHw9IDEgPDwgbGNoOworCW9tYXBfd3JpdGVsKHZhbCwgT01BUF9ETUE0X0lSUUVOQUJMRV9MMCk7CiB9CiAKIGludCBvbWFwX3JlcXVlc3RfZG1hKGludCBkZXZfaWQsIGNvbnN0IGNoYXIgKmRldl9uYW1lLApAQCAtNDg1LDE0ICs0NTgsMjMgQEAKIAl9CiAJY2hhbiA9IGRtYV9jaGFuICsgZnJlZV9jaDsKIAljaGFuLT5kZXZfaWQgPSBkZXZfaWQ7Ci0JY2xlYXJfbGNoX3JlZ3MoZnJlZV9jaCk7CisKKwlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkpCisJCWNsZWFyX2xjaF9yZWdzKGZyZWVfY2gpOworCisJaWYgKGNwdV9pc19vbWFwMjR4eCgpKQorCQlvbWFwX2NsZWFyX2RtYShmcmVlX2NoKTsKKwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRtYV9jaGFuX2xvY2ssIGZsYWdzKTsKIAotCWNoYW4tPmRldl9pZCA9IGRldl9pZDsKIAljaGFuLT5kZXZfbmFtZSA9IGRldl9uYW1lOwogCWNoYW4tPmNhbGxiYWNrID0gY2FsbGJhY2s7CiAJY2hhbi0+ZGF0YSA9IGRhdGE7Ci0JY2hhbi0+ZW5hYmxlZF9pcnFzID0gT01BUF9ETUFfVE9VVF9JUlEgfCBPTUFQX0RNQV9EUk9QX0lSUSB8IE9NQVBfRE1BX0JMT0NLX0lSUTsKKwljaGFuLT5lbmFibGVkX2lycXMgPSBPTUFQX0RNQV9UT1VUX0lSUSB8IE9NQVBfRE1BX0RST1BfSVJRIHwKKwkJCQlPTUFQX0RNQV9CTE9DS19JUlE7CisKKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkpCisJCWNoYW4tPmVuYWJsZWRfaXJxcyB8PSBPTUFQMl9ETUFfVFJBTlNfRVJSX0lSUTsKIAogCWlmIChjcHVfaXNfb21hcDE2eHgoKSkgewogCQkvKiBJZiB0aGUgc3luYyBkZXZpY2UgaXMgc2V0LCBjb25maWd1cmUgaXQgZHluYW1pY2FsbHkuICovCkBAIC01MDIsMzcgKzQ4NCwyNDIgQEAKIAkJfQogCQkvKiBEaXNhYmxlIHRoZSAxNTEwIGNvbXBhdGliaWxpdHkgbW9kZSBhbmQgc2V0IHRoZSBzeW5jIGRldmljZQogCQkgKiBpZC4gKi8KLQkJb21hcF93cml0ZXcoZGV2X2lkIHwgKDEgPDwgMTApLCBPTUFQX0RNQV9DQ1IoZnJlZV9jaCkpOwotCX0gZWxzZSB7Ci0JCW9tYXBfd3JpdGV3KGRldl9pZCwgT01BUF9ETUFfQ0NSKGZyZWVfY2gpKTsKKwkJT01BUF9ETUFfQ0NSX1JFRyhmcmVlX2NoKSA9IGRldl9pZCB8ICgxIDw8IDEwKTsKKwl9IGVsc2UgaWYgKGNwdV9pc19vbWFwNzMwKCkgfHwgY3B1X2lzX29tYXAxNXh4KCkpIHsKKwkJT01BUF9ETUFfQ0NSX1JFRyhmcmVlX2NoKSA9IGRldl9pZDsKIAl9CisKKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKKwkJb21hcDJfZW5hYmxlX2lycV9sY2goZnJlZV9jaCk7CisKKwkJb21hcF9lbmFibGVfY2hhbm5lbF9pcnEoZnJlZV9jaCk7CisJCS8qIENsZWFyIHRoZSBDU1IgcmVnaXN0ZXIgYW5kIElSUSBzdGF0dXMgcmVnaXN0ZXIgKi8KKwkJT01BUF9ETUFfQ1NSX1JFRyhmcmVlX2NoKSA9IDB4MDsKKwkJb21hcF93cml0ZWwofjB4MCwgT01BUF9ETUE0X0lSUVNUQVRVU19MMCk7CisJfQorCiAJKmRtYV9jaF9vdXQgPSBmcmVlX2NoOwogCiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgb21hcF9mcmVlX2RtYShpbnQgY2gpCit2b2lkIG9tYXBfZnJlZV9kbWEoaW50IGxjaCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRtYV9jaGFuX2xvY2ssIGZsYWdzKTsKLQlpZiAoZG1hX2NoYW5bY2hdLmRldl9pZCA9PSAtMSkgewotCQlwcmludGsoIm9tYXBfZG1hOiB0cnlpbmcgdG8gZnJlZSBub25hbGxvY2F0ZWQgRE1BIGNoYW5uZWwgJWRcbiIsIGNoKTsKKwlpZiAoZG1hX2NoYW5bbGNoXS5kZXZfaWQgPT0gLTEpIHsKKwkJcHJpbnRrKCJvbWFwX2RtYTogdHJ5aW5nIHRvIGZyZWUgbm9uYWxsb2NhdGVkIERNQSBjaGFubmVsICVkXG4iLAorCQkgICAgICAgbGNoKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZG1hX2NoYW5fbG9jaywgZmxhZ3MpOwogCQlyZXR1cm47CiAJfQotCWRtYV9jaGFuW2NoXS5kZXZfaWQgPSAtMTsKKwlkbWFfY2hhbltsY2hdLmRldl9pZCA9IC0xOworCWRtYV9jaGFuW2xjaF0ubmV4dF9sY2ggPSAtMTsKKwlkbWFfY2hhbltsY2hdLmNhbGxiYWNrID0gTlVMTDsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkbWFfY2hhbl9sb2NrLCBmbGFncyk7CiAKLQkvKiBEaXNhYmxlIGFsbCBETUEgaW50ZXJydXB0cyBmb3IgdGhlIGNoYW5uZWwuICovCi0Jb21hcF93cml0ZXcoMCwgT01BUF9ETUFfQ0lDUihjaCkpOwotCS8qIE1ha2Ugc3VyZSB0aGUgRE1BIHRyYW5zZmVyIGlzIHN0b3BwZWQuICovCi0Jb21hcF93cml0ZXcoMCwgT01BUF9ETUFfQ0NSKGNoKSk7CisJaWYgKGNwdV9jbGFzc19pc19vbWFwMSgpKSB7CisJCS8qIERpc2FibGUgYWxsIERNQSBpbnRlcnJ1cHRzIGZvciB0aGUgY2hhbm5lbC4gKi8KKwkJT01BUF9ETUFfQ0lDUl9SRUcobGNoKSA9IDA7CisJCS8qIE1ha2Ugc3VyZSB0aGUgRE1BIHRyYW5zZmVyIGlzIHN0b3BwZWQuICovCisJCU9NQVBfRE1BX0NDUl9SRUcobGNoKSA9IDA7CisJfQorCisJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CisJCXUzMiB2YWw7CisJCS8qIERpc2FibGUgaW50ZXJydXB0cyAqLworCQl2YWwgPSBvbWFwX3JlYWRsKE9NQVBfRE1BNF9JUlFFTkFCTEVfTDApOworCQl2YWwgJj0gfigxIDw8IGxjaCk7CisJCW9tYXBfd3JpdGVsKHZhbCwgT01BUF9ETUE0X0lSUUVOQUJMRV9MMCk7CisKKwkJLyogQ2xlYXIgdGhlIENTUiByZWdpc3RlciBhbmQgSVJRIHN0YXR1cyByZWdpc3RlciAqLworCQlPTUFQX0RNQV9DU1JfUkVHKGxjaCkgPSAweDA7CisKKwkJdmFsID0gb21hcF9yZWFkbChPTUFQX0RNQTRfSVJRU1RBVFVTX0wwKTsKKwkJdmFsIHw9IDEgPDwgbGNoOworCQlvbWFwX3dyaXRlbCh2YWwsIE9NQVBfRE1BNF9JUlFTVEFUVVNfTDApOworCisJCS8qIERpc2FibGUgYWxsIERNQSBpbnRlcnJ1cHRzIGZvciB0aGUgY2hhbm5lbC4gKi8KKwkJT01BUF9ETUFfQ0lDUl9SRUcobGNoKSA9IDA7CisKKwkJLyogTWFrZSBzdXJlIHRoZSBETUEgdHJhbnNmZXIgaXMgc3RvcHBlZC4gKi8KKwkJT01BUF9ETUFfQ0NSX1JFRyhsY2gpID0gMDsKKwkJb21hcF9jbGVhcl9kbWEobGNoKTsKKwl9CiB9CiAKLWludCBvbWFwX2RtYV9pbl8xNTEwX21vZGUodm9pZCkKKy8qCisgKiBDbGVhcnMgYW55IERNQSBzdGF0ZSBzbyB0aGUgRE1BIGVuZ2luZSBpcyByZWFkeSB0byByZXN0YXJ0IHdpdGggbmV3IGJ1ZmZlcnMKKyAqIHRocm91Z2ggb21hcF9zdGFydF9kbWEoKS4gQW55IGJ1ZmZlcnMgaW4gZmxpZ2h0IGFyZSBkaXNjYXJkZWQuCisgKi8KK3ZvaWQgb21hcF9jbGVhcl9kbWEoaW50IGxjaCkKIHsKLQlyZXR1cm4gZW5hYmxlXzE1MTBfbW9kZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJaWYgKGNwdV9jbGFzc19pc19vbWFwMSgpKSB7CisJCWludCBzdGF0dXM7CisJCU9NQVBfRE1BX0NDUl9SRUcobGNoKSAmPSB+T01BUF9ETUFfQ0NSX0VOOworCisJCS8qIENsZWFyIHBlbmRpbmcgaW50ZXJydXB0cyAqLworCQlzdGF0dXMgPSBPTUFQX0RNQV9DU1JfUkVHKGxjaCk7CisJfQorCisJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CisJCWludCBpOworCQl1MzIgbGNoX2Jhc2UgPSBPTUFQMjRYWF9ETUFfQkFTRSArIGxjaCAqIDB4NjAgKyAweDgwOworCQlmb3IgKGkgPSAwOyBpIDwgMHg0NDsgaSArPSA0KQorCQkJb21hcF93cml0ZWwoMCwgbGNoX2Jhc2UgKyBpKTsKKwl9CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK3ZvaWQgb21hcF9zdGFydF9kbWEoaW50IGxjaCkKK3sKKwlpZiAoIW9tYXBfZG1hX2luXzE1MTBfbW9kZSgpICYmIGRtYV9jaGFuW2xjaF0ubmV4dF9sY2ggIT0gLTEpIHsKKwkJaW50IG5leHRfbGNoLCBjdXJfbGNoOworCQljaGFyIGRtYV9jaGFuX2xpbmtfbWFwW09NQVBfTE9HSUNBTF9ETUFfQ0hfQ09VTlRdOworCisJCWRtYV9jaGFuX2xpbmtfbWFwW2xjaF0gPSAxOworCQkvKiBTZXQgdGhlIGxpbmsgcmVnaXN0ZXIgb2YgdGhlIGZpcnN0IGNoYW5uZWwgKi8KKwkJZW5hYmxlX2xuayhsY2gpOworCisJCW1lbXNldChkbWFfY2hhbl9saW5rX21hcCwgMCwgc2l6ZW9mKGRtYV9jaGFuX2xpbmtfbWFwKSk7CisJCWN1cl9sY2ggPSBkbWFfY2hhbltsY2hdLm5leHRfbGNoOworCQlkbyB7CisJCQluZXh0X2xjaCA9IGRtYV9jaGFuW2N1cl9sY2hdLm5leHRfbGNoOworCisJCQkvKiBUaGUgbG9vcCBjYXNlOiB3ZSd2ZSBiZWVuIGhlcmUgYWxyZWFkeSAqLworCQkJaWYgKGRtYV9jaGFuX2xpbmtfbWFwW2N1cl9sY2hdKQorCQkJCWJyZWFrOworCQkJLyogTWFyayB0aGUgY3VycmVudCBjaGFubmVsICovCisJCQlkbWFfY2hhbl9saW5rX21hcFtjdXJfbGNoXSA9IDE7CisKKwkJCWVuYWJsZV9sbmsoY3VyX2xjaCk7CisJCQlvbWFwX2VuYWJsZV9jaGFubmVsX2lycShjdXJfbGNoKTsKKworCQkJY3VyX2xjaCA9IG5leHRfbGNoOworCQl9IHdoaWxlIChuZXh0X2xjaCAhPSAtMSk7CisJfSBlbHNlIGlmIChjcHVfaXNfb21hcDI0eHgoKSkgeworCQkvKiBFcnJhdGE6IE5lZWQgdG8gd3JpdGUgbGNoIGV2ZW4gaWYgbm90IHVzaW5nIGNoYWluaW5nICovCisJCU9NQVBfRE1BX0NMTktfQ1RSTF9SRUcobGNoKSA9IGxjaDsKKwl9CisKKwlvbWFwX2VuYWJsZV9jaGFubmVsX2lycShsY2gpOworCisJLyogRXJyYXRhOiBPbiBFUzIuMCBCVUZGRVJJTkcgZGlzYWJsZSBtdXN0IGJlIHNldC4KKwkgKiBUaGlzIHdpbGwgYWx3YXlzIGZhaWwgb24gRVMxLjAgKi8KKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKKwkJT01BUF9ETUFfQ0NSX1JFRyhsY2gpIHw9IE9NQVBfRE1BX0NDUl9FTjsKKwl9CisKKwlPTUFQX0RNQV9DQ1JfUkVHKGxjaCkgfD0gT01BUF9ETUFfQ0NSX0VOOworCisJZG1hX2NoYW5bbGNoXS5mbGFncyB8PSBPTUFQX0RNQV9BQ1RJVkU7Cit9CisKK3ZvaWQgb21hcF9zdG9wX2RtYShpbnQgbGNoKQoreworCWlmICghb21hcF9kbWFfaW5fMTUxMF9tb2RlKCkgJiYgZG1hX2NoYW5bbGNoXS5uZXh0X2xjaCAhPSAtMSkgeworCQlpbnQgbmV4dF9sY2gsIGN1cl9sY2ggPSBsY2g7CisJCWNoYXIgZG1hX2NoYW5fbGlua19tYXBbT01BUF9MT0dJQ0FMX0RNQV9DSF9DT1VOVF07CisKKwkJbWVtc2V0KGRtYV9jaGFuX2xpbmtfbWFwLCAwLCBzaXplb2YoZG1hX2NoYW5fbGlua19tYXApKTsKKwkJZG8geworCQkJLyogVGhlIGxvb3AgY2FzZTogd2UndmUgYmVlbiBoZXJlIGFscmVhZHkgKi8KKwkJCWlmIChkbWFfY2hhbl9saW5rX21hcFtjdXJfbGNoXSkKKwkJCQlicmVhazsKKwkJCS8qIE1hcmsgdGhlIGN1cnJlbnQgY2hhbm5lbCAqLworCQkJZG1hX2NoYW5fbGlua19tYXBbY3VyX2xjaF0gPSAxOworCisJCQlkaXNhYmxlX2xuayhjdXJfbGNoKTsKKworCQkJbmV4dF9sY2ggPSBkbWFfY2hhbltjdXJfbGNoXS5uZXh0X2xjaDsKKwkJCWN1cl9sY2ggPSBuZXh0X2xjaDsKKwkJfSB3aGlsZSAobmV4dF9sY2ggIT0gLTEpOworCisJCXJldHVybjsKKwl9CisKKwkvKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzIG9uIHRoZSBjaGFubmVsICovCisJaWYgKGNwdV9jbGFzc19pc19vbWFwMSgpKQorCQlPTUFQX0RNQV9DSUNSX1JFRyhsY2gpID0gMDsKKworCU9NQVBfRE1BX0NDUl9SRUcobGNoKSAmPSB+T01BUF9ETUFfQ0NSX0VOOworCWRtYV9jaGFuW2xjaF0uZmxhZ3MgJj0gfk9NQVBfRE1BX0FDVElWRTsKK30KKworLyoKKyAqIFJldHVybnMgY3VycmVudCBwaHlzaWNhbCBzb3VyY2UgYWRkcmVzcyBmb3IgdGhlIGdpdmVuIERNQSBjaGFubmVsLgorICogSWYgdGhlIGNoYW5uZWwgaXMgcnVubmluZyB0aGUgY2FsbGVyIG11c3QgZGlzYWJsZSBpbnRlcnJ1cHRzIHByaW9yIGNhbGxpbmcKKyAqIHRoaXMgZnVuY3Rpb24gYW5kIHByb2Nlc3MgdGhlIHJldHVybmVkIHZhbHVlIGJlZm9yZSByZS1lbmFibGluZyBpbnRlcnJ1cHQgdG8KKyAqIHByZXZlbnQgcmFjZXMgd2l0aCB0aGUgaW50ZXJydXB0IGhhbmRsZXIuIE5vdGUgdGhhdCBpbiBjb250aW51b3VzIG1vZGUgdGhlcmUKKyAqIGlzIGEgY2hhbmNlIGZvciBDU1NBX0wgcmVnaXN0ZXIgb3ZlcmZsb3cgaW5iZXR3ZWVuIHRoZSB0d28gcmVhZHMgcmVzdWx0aW5nCisgKiBpbiBpbmNvcnJlY3QgcmV0dXJuIHZhbHVlLgorICovCitkbWFfYWRkcl90IG9tYXBfZ2V0X2RtYV9zcmNfcG9zKGludCBsY2gpCit7CisJZG1hX2FkZHJfdCBvZmZzZXQ7CisKKwlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkpCisJCW9mZnNldCA9IChkbWFfYWRkcl90KSAoT01BUDFfRE1BX0NTU0FfTF9SRUcobGNoKSB8CisJCQkJICAgICAgIChPTUFQMV9ETUFfQ1NTQV9VX1JFRyhsY2gpIDw8IDE2KSk7CisKKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkpCisJCW9mZnNldCA9IE9NQVBfRE1BX0NTQUNfUkVHKGxjaCk7CisKKwlyZXR1cm4gb2Zmc2V0OworfQorCisvKgorICogUmV0dXJucyBjdXJyZW50IHBoeXNpY2FsIGRlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIHRoZSBnaXZlbiBETUEgY2hhbm5lbC4KKyAqIElmIHRoZSBjaGFubmVsIGlzIHJ1bm5pbmcgdGhlIGNhbGxlciBtdXN0IGRpc2FibGUgaW50ZXJydXB0cyBwcmlvciBjYWxsaW5nCisgKiB0aGlzIGZ1bmN0aW9uIGFuZCBwcm9jZXNzIHRoZSByZXR1cm5lZCB2YWx1ZSBiZWZvcmUgcmUtZW5hYmxpbmcgaW50ZXJydXB0IHRvCisgKiBwcmV2ZW50IHJhY2VzIHdpdGggdGhlIGludGVycnVwdCBoYW5kbGVyLiBOb3RlIHRoYXQgaW4gY29udGludW91cyBtb2RlIHRoZXJlCisgKiBpcyBhIGNoYW5jZSBmb3IgQ0RTQV9MIHJlZ2lzdGVyIG92ZXJmbG93IGluYmV0d2VlbiB0aGUgdHdvIHJlYWRzIHJlc3VsdGluZworICogaW4gaW5jb3JyZWN0IHJldHVybiB2YWx1ZS4KKyAqLworZG1hX2FkZHJfdCBvbWFwX2dldF9kbWFfZHN0X3BvcyhpbnQgbGNoKQoreworCWRtYV9hZGRyX3Qgb2Zmc2V0OworCisJaWYgKGNwdV9jbGFzc19pc19vbWFwMSgpKQorCQlvZmZzZXQgPSAoZG1hX2FkZHJfdCkgKE9NQVAxX0RNQV9DRFNBX0xfUkVHKGxjaCkgfAorCQkJCSAgICAgICAoT01BUDFfRE1BX0NEU0FfVV9SRUcobGNoKSA8PCAxNikpOworCisJaWYgKGNwdV9pc19vbWFwMjR4eCgpKQorCQlvZmZzZXQgPSBPTUFQMl9ETUFfQ0RTQV9SRUcobGNoKTsKKworCXJldHVybiBvZmZzZXQ7Cit9CisKKy8qCisgKiBSZXR1cm5zIGN1cnJlbnQgc291cmNlIHRyYW5zZmVyIGNvdW50aW5nIGZvciB0aGUgZ2l2ZW4gRE1BIGNoYW5uZWwuCisgKiBDYW4gYmUgdXNlZCB0byBtb25pdG9yIHRoZSBwcm9ncmVzcyBvZiBhIHRyYW5zZmVyIGluc2lkZSBhIGJsb2NrLgorICogSXQgbXVzdCBiZSBjYWxsZWQgd2l0aCBkaXNhYmxlZCBpbnRlcnJ1cHRzLgorICovCitpbnQgb21hcF9nZXRfZG1hX3NyY19hZGRyX2NvdW50ZXIoaW50IGxjaCkKK3sKKwlyZXR1cm4gKGRtYV9hZGRyX3QpIE9NQVBfRE1BX0NTQUNfUkVHKGxjaCk7Cit9CisKK2ludCBvbWFwX2RtYV9ydW5uaW5nKHZvaWQpCit7CisJaW50IGxjaDsKKworCS8qIENoZWNrIGlmIExDRCBETUEgaXMgcnVubmluZyAqLworCWlmIChjcHVfaXNfb21hcDE2eHgoKSkKKwkJaWYgKG9tYXBfcmVhZHcoT01BUDE2MTBfRE1BX0xDRF9DQ1IpICYgT01BUF9ETUFfQ0NSX0VOKQorCQkJcmV0dXJuIDE7CisKKwlmb3IgKGxjaCA9IDA7IGxjaCA8IGRtYV9jaGFuX2NvdW50OyBsY2grKykKKwkJaWYgKE9NQVBfRE1BX0NDUl9SRUcobGNoKSAmIE9NQVBfRE1BX0NDUl9FTikKKwkJCXJldHVybiAxOworCisJcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC01NTAsNyArNzM3LDggQEAKIAogCWlmICgoZG1hX2NoYW5bbGNoX2hlYWRdLmRldl9pZCA9PSAtMSkgfHwKIAkgICAgKGRtYV9jaGFuW2xjaF9xdWV1ZV0uZGV2X2lkID09IC0xKSkgewotCQlwcmludGsoS0VSTl9FUlIgIm9tYXBfZG1hOiB0cnlpbmcgdG8gbGluayBub24gcmVxdWVzdGVkIGNoYW5uZWxzXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJvbWFwX2RtYTogdHJ5aW5nIHRvIGxpbmsgIgorCQkgICAgICAgIm5vbiByZXF1ZXN0ZWQgY2hhbm5lbHNcbiIpOwogCQlkdW1wX3N0YWNrKCk7CiAJfQogCkBAIC01NzAsMjAgKzc1OCwxNDkgQEAKIAogCWlmIChkbWFfY2hhbltsY2hfaGVhZF0ubmV4dF9sY2ggIT0gbGNoX3F1ZXVlIHx8CiAJICAgIGRtYV9jaGFuW2xjaF9oZWFkXS5uZXh0X2xjaCA9PSAtMSkgewotCQlwcmludGsoS0VSTl9FUlIgIm9tYXBfZG1hOiB0cnlpbmcgdG8gdW5saW5rIG5vbiBsaW5rZWQgY2hhbm5lbHNcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIm9tYXBfZG1hOiB0cnlpbmcgdG8gdW5saW5rICIKKwkJICAgICAgICJub24gbGlua2VkIGNoYW5uZWxzXG4iKTsKIAkJZHVtcF9zdGFjaygpOwogCX0KIAogCiAJaWYgKChkbWFfY2hhbltsY2hfaGVhZF0uZmxhZ3MgJiBPTUFQX0RNQV9BQ1RJVkUpIHx8CiAJICAgIChkbWFfY2hhbltsY2hfaGVhZF0uZmxhZ3MgJiBPTUFQX0RNQV9BQ1RJVkUpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAib21hcF9kbWE6IFlvdSBuZWVkIHRvIHN0b3AgdGhlIERNQSBjaGFubmVscyBiZWZvcmUgdW5saW5raW5nXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJvbWFwX2RtYTogWW91IG5lZWQgdG8gc3RvcCB0aGUgRE1BIGNoYW5uZWxzICIKKwkJICAgICAgICJiZWZvcmUgdW5saW5raW5nXG4iKTsKIAkJZHVtcF9zdGFjaygpOwogCX0KIAogCWRtYV9jaGFuW2xjaF9oZWFkXS5uZXh0X2xjaCA9IC0xOwogfQogCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDEKKworc3RhdGljIGludCBvbWFwMV9kbWFfaGFuZGxlX2NoKGludCBjaCkKK3sKKwl1MTYgY3NyOworCisJaWYgKGVuYWJsZV8xNTEwX21vZGUgJiYgY2ggPj0gNikgeworCQljc3IgPSBkbWFfY2hhbltjaF0uc2F2ZWRfY3NyOworCQlkbWFfY2hhbltjaF0uc2F2ZWRfY3NyID0gMDsKKwl9IGVsc2UKKwkJY3NyID0gT01BUF9ETUFfQ1NSX1JFRyhjaCk7CisJaWYgKGVuYWJsZV8xNTEwX21vZGUgJiYgY2ggPD0gMiAmJiAoY3NyID4+IDcpICE9IDApIHsKKwkJZG1hX2NoYW5bY2ggKyA2XS5zYXZlZF9jc3IgPSBjc3IgPj4gNzsKKwkJY3NyICY9IDB4N2Y7CisJfQorCWlmICgoY3NyICYgMHgzZikgPT0gMCkKKwkJcmV0dXJuIDA7CisJaWYgKHVubGlrZWx5KGRtYV9jaGFuW2NoXS5kZXZfaWQgPT0gLTEpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlNwdXJpb3VzIGludGVycnVwdCBmcm9tIERNQSBjaGFubmVsICIKKwkJICAgICAgICIlZCAoQ1NSICUwNHgpXG4iLCBjaCwgY3NyKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICh1bmxpa2VseShjc3IgJiBPTUFQX0RNQV9UT1VUX0lSUSkpCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkRNQSB0aW1lb3V0IHdpdGggZGV2aWNlICVkXG4iLAorCQkgICAgICAgZG1hX2NoYW5bY2hdLmRldl9pZCk7CisJaWYgKHVubGlrZWx5KGNzciAmIE9NQVBfRE1BX0RST1BfSVJRKSkKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiRE1BIHN5bmNocm9uaXphdGlvbiBldmVudCBkcm9wIG9jY3VycmVkICIKKwkJICAgICAgICJ3aXRoIGRldmljZSAlZFxuIiwgZG1hX2NoYW5bY2hdLmRldl9pZCk7CisJaWYgKGxpa2VseShjc3IgJiBPTUFQX0RNQV9CTE9DS19JUlEpKQorCQlkbWFfY2hhbltjaF0uZmxhZ3MgJj0gfk9NQVBfRE1BX0FDVElWRTsKKwlpZiAobGlrZWx5KGRtYV9jaGFuW2NoXS5jYWxsYmFjayAhPSBOVUxMKSkKKwkJZG1hX2NoYW5bY2hdLmNhbGxiYWNrKGNoLCBjc3IsIGRtYV9jaGFuW2NoXS5kYXRhKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGlycXJldHVybl90IG9tYXAxX2RtYV9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQsCisJCQkJCSBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpbnQgY2ggPSAoKGludCkgZGV2X2lkKSAtIDE7CisJaW50IGhhbmRsZWQgPSAwOworCisJZm9yICg7OykgeworCQlpbnQgaGFuZGxlZF9ub3cgPSAwOworCisJCWhhbmRsZWRfbm93ICs9IG9tYXAxX2RtYV9oYW5kbGVfY2goY2gpOworCQlpZiAoZW5hYmxlXzE1MTBfbW9kZSAmJiBkbWFfY2hhbltjaCArIDZdLnNhdmVkX2NzcikKKwkJCWhhbmRsZWRfbm93ICs9IG9tYXAxX2RtYV9oYW5kbGVfY2goY2ggKyA2KTsKKwkJaWYgKCFoYW5kbGVkX25vdykKKwkJCWJyZWFrOworCQloYW5kbGVkICs9IGhhbmRsZWRfbm93OworCX0KKworCXJldHVybiBoYW5kbGVkID8gSVJRX0hBTkRMRUQgOiBJUlFfTk9ORTsKK30KKworI2Vsc2UKKyNkZWZpbmUgb21hcDFfZG1hX2lycV9oYW5kbGVyCU5VTEwKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDIKKworc3RhdGljIGludCBvbWFwMl9kbWFfaGFuZGxlX2NoKGludCBjaCkKK3sKKwl1MzIgc3RhdHVzID0gT01BUF9ETUFfQ1NSX1JFRyhjaCk7CisJdTMyIHZhbDsKKworCWlmICghc3RhdHVzKQorCQlyZXR1cm4gMDsKKwlpZiAodW5saWtlbHkoZG1hX2NoYW5bY2hdLmRldl9pZCA9PSAtMSkpCisJCXJldHVybiAwOworCS8qIFJFVklTSVQ6IEFjY29yZGluZyB0byAyNHh4IFRSTSwgdGhlcmUncyBubyBUT1VUX0lFICovCisJaWYgKHVubGlrZWx5KHN0YXR1cyAmIE9NQVBfRE1BX1RPVVRfSVJRKSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiRE1BIHRpbWVvdXQgd2l0aCBkZXZpY2UgJWRcbiIsCisJCSAgICAgICBkbWFfY2hhbltjaF0uZGV2X2lkKTsKKwlpZiAodW5saWtlbHkoc3RhdHVzICYgT01BUF9ETUFfRFJPUF9JUlEpKQorCQlwcmludGsoS0VSTl9JTkZPCisJCSAgICAgICAiRE1BIHN5bmNocm9uaXphdGlvbiBldmVudCBkcm9wIG9jY3VycmVkIHdpdGggZGV2aWNlICIKKwkJICAgICAgICIlZFxuIiwgZG1hX2NoYW5bY2hdLmRldl9pZCk7CisKKwlpZiAodW5saWtlbHkoc3RhdHVzICYgT01BUDJfRE1BX1RSQU5TX0VSUl9JUlEpKQorCQlwcmludGsoS0VSTl9JTkZPICJETUEgdHJhbnNhY3Rpb24gZXJyb3Igd2l0aCBkZXZpY2UgJWRcbiIsCisJCSAgICAgICBkbWFfY2hhbltjaF0uZGV2X2lkKTsKKworCU9NQVBfRE1BX0NTUl9SRUcoY2gpID0gMHgyMDsKKworCXZhbCA9IG9tYXBfcmVhZGwoT01BUF9ETUE0X0lSUVNUQVRVU19MMCk7CisJLyogY2ggaW4gdGhpcyBmdW5jdGlvbiBpcyBmcm9tIDAtMzEgd2hpbGUgaW4gcmVnaXN0ZXIgaXQgaXMgMS0zMiAqLworCXZhbCA9IDEgPDwgKGNoKTsKKwlvbWFwX3dyaXRlbCh2YWwsIE9NQVBfRE1BNF9JUlFTVEFUVVNfTDApOworCisJaWYgKGxpa2VseShkbWFfY2hhbltjaF0uY2FsbGJhY2sgIT0gTlVMTCkpCisJCWRtYV9jaGFuW2NoXS5jYWxsYmFjayhjaCwgc3RhdHVzLCBkbWFfY2hhbltjaF0uZGF0YSk7CisKKwlyZXR1cm4gMDsKK30KKworLyogU1RBVFVTIHJlZ2lzdGVyIGNvdW50IGlzIGZyb20gMS0zMiB3aGlsZSBvdXIgaXMgMC0zMSAqLworc3RhdGljIGlycXJldHVybl90IG9tYXAyX2RtYV9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQsCisJCQkJCSBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1MzIgdmFsOworCWludCBpOworCisJdmFsID0gb21hcF9yZWFkbChPTUFQX0RNQTRfSVJRU1RBVFVTX0wwKTsKKworCWZvciAoaSA9IDE7IGkgPD0gT01BUF9MT0dJQ0FMX0RNQV9DSF9DT1VOVDsgaSsrKSB7CisJCWludCBhY3RpdmUgPSB2YWwgJiAoMSA8PCAoaSAtIDEpKTsKKwkJaWYgKGFjdGl2ZSkKKwkJCW9tYXAyX2RtYV9oYW5kbGVfY2goaSAtIDEpOworCX0KKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gb21hcDI0eHhfZG1hX2lycSA9IHsKKwkubmFtZSA9ICJETUEiLAorCS5oYW5kbGVyID0gb21hcDJfZG1hX2lycV9oYW5kbGVyLAorCS5mbGFncyA9IFNBX0lOVEVSUlVQVAorfTsKKworI2Vsc2UKK3N0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIG9tYXAyNHh4X2RtYV9pcnE7CisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogc3RhdGljIHN0cnVjdCBsY2RfZG1hX2luZm8gewogCXNwaW5sb2NrX3QgbG9jazsKQEAgLTc5NSw3ICsxMTEyLDcgQEAKIAkvKiBBbHdheXMgc2V0IHRoZSBzb3VyY2UgcG9ydCBhcyBTRFJBTSBmb3Igbm93Ki8KIAl3ICY9IH4oMHgwMyA8PCA2KTsKIAlpZiAobGNkX2RtYS5jYWxsYmFjayAhPSBOVUxMKQotCQl3IHw9IDEgPDwgMTsgICAgICAgICAgICAvKiBCbG9jayBpbnRlcnJ1cHQgZW5hYmxlICovCisJCXcgfD0gMSA8PCAxOwkJLyogQmxvY2sgaW50ZXJydXB0IGVuYWJsZSAqLwogCWVsc2UKIAkJdyAmPSB+KDEgPDwgMSk7CiAJb21hcF93cml0ZXcodywgT01BUDE2MTBfRE1BX0xDRF9DVFJMKTsKQEAgLTgxNCw3ICsxMTMxLDggQEAKIAlvbWFwX3dyaXRldyhmaSwgT01BUDE2MTBfRE1BX0xDRF9TUkNfRklfQjFfTCk7CiB9CiAKLXN0YXRpYyBpcnFyZXR1cm5fdCBsY2RfZG1hX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitzdGF0aWMgaXJxcmV0dXJuX3QgbGNkX2RtYV9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQsCisJCQkJICAgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXUxNiB3OwogCkBAIC04NzAsNyArMTE4OCw4IEBACiAJCXJldHVybjsKIAl9CiAJaWYgKCFlbmFibGVfMTUxMF9tb2RlKQotCQlvbWFwX3dyaXRldyhvbWFwX3JlYWR3KE9NQVAxNjEwX0RNQV9MQ0RfQ0NSKSAmIH4xLCBPTUFQMTYxMF9ETUFfTENEX0NDUik7CisJCW9tYXBfd3JpdGV3KG9tYXBfcmVhZHcoT01BUDE2MTBfRE1BX0xDRF9DQ1IpICYgfjEsCisJCQkgICAgT01BUDE2MTBfRE1BX0xDRF9DQ1IpOwogCWxjZF9kbWEucmVzZXJ2ZWQgPSAwOwogCXNwaW5fdW5sb2NrKCZsY2RfZG1hLmxvY2spOwogfQpAQCAtOTM5LDkzICsxMjU4LDI0IEBACiAJb21hcF93cml0ZXcodywgT01BUDE2MTBfRE1BX0xDRF9DVFJMKTsKIH0KIAotLyoKLSAqIENsZWFycyBhbnkgRE1BIHN0YXRlIHNvIHRoZSBETUEgZW5naW5lIGlzIHJlYWR5IHRvIHJlc3RhcnQgd2l0aCBuZXcgYnVmZmVycwotICogdGhyb3VnaCBvbWFwX3N0YXJ0X2RtYSgpLiBBbnkgYnVmZmVycyBpbiBmbGlnaHQgYXJlIGRpc2NhcmRlZC4KLSAqLwotdm9pZCBvbWFwX2NsZWFyX2RtYShpbnQgbGNoKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHN0YXR1czsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlvbWFwX3dyaXRldyhvbWFwX3JlYWR3KE9NQVBfRE1BX0NDUihsY2gpKSAmIH5PTUFQX0RNQV9DQ1JfRU4sCi0JCSAgICBPTUFQX0RNQV9DQ1IobGNoKSk7Ci0Jc3RhdHVzID0gT01BUF9ETUFfQ1NSKGxjaCk7CS8qIGNsZWFyIHBlbmRpbmcgaW50ZXJydXB0cyAqLwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLQotLyoKLSAqIFJldHVybnMgY3VycmVudCBwaHlzaWNhbCBzb3VyY2UgYWRkcmVzcyBmb3IgdGhlIGdpdmVuIERNQSBjaGFubmVsLgotICogSWYgdGhlIGNoYW5uZWwgaXMgcnVubmluZyB0aGUgY2FsbGVyIG11c3QgZGlzYWJsZSBpbnRlcnJ1cHRzIHByaW9yIGNhbGxpbmcKLSAqIHRoaXMgZnVuY3Rpb24gYW5kIHByb2Nlc3MgdGhlIHJldHVybmVkIHZhbHVlIGJlZm9yZSByZS1lbmFibGluZyBpbnRlcnJ1cHQgdG8KLSAqIHByZXZlbnQgcmFjZXMgd2l0aCB0aGUgaW50ZXJydXB0IGhhbmRsZXIuIE5vdGUgdGhhdCBpbiBjb250aW51b3VzIG1vZGUgdGhlcmUKLSAqIGlzIGEgY2hhbmNlIGZvciBDU1NBX0wgcmVnaXN0ZXIgb3ZlcmZsb3cgaW5iZXR3ZWVuIHRoZSB0d28gcmVhZHMgcmVzdWx0aW5nCi0gKiBpbiBpbmNvcnJlY3QgcmV0dXJuIHZhbHVlLgotICovCi1kbWFfYWRkcl90IG9tYXBfZ2V0X2RtYV9zcmNfcG9zKGludCBsY2gpCi17Ci0JcmV0dXJuIChkbWFfYWRkcl90KSAob21hcF9yZWFkdyhPTUFQX0RNQV9DU1NBX0wobGNoKSkgfAotCShvbWFwX3JlYWR3KE9NQVBfRE1BX0NTU0FfVShsY2gpKSA8PCAxNikpOwotfQotCi0vKgotICogUmV0dXJucyBjdXJyZW50IHBoeXNpY2FsIGRlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIHRoZSBnaXZlbiBETUEgY2hhbm5lbC4KLSAqIElmIHRoZSBjaGFubmVsIGlzIHJ1bm5pbmcgdGhlIGNhbGxlciBtdXN0IGRpc2FibGUgaW50ZXJydXB0cyBwcmlvciBjYWxsaW5nCi0gKiB0aGlzIGZ1bmN0aW9uIGFuZCBwcm9jZXNzIHRoZSByZXR1cm5lZCB2YWx1ZSBiZWZvcmUgcmUtZW5hYmxpbmcgaW50ZXJydXB0IHRvCi0gKiBwcmV2ZW50IHJhY2VzIHdpdGggdGhlIGludGVycnVwdCBoYW5kbGVyLiBOb3RlIHRoYXQgaW4gY29udGludW91cyBtb2RlIHRoZXJlCi0gKiBpcyBhIGNoYW5jZSBmb3IgQ0RTQV9MIHJlZ2lzdGVyIG92ZXJmbG93IGluYmV0d2VlbiB0aGUgdHdvIHJlYWRzIHJlc3VsdGluZwotICogaW4gaW5jb3JyZWN0IHJldHVybiB2YWx1ZS4KLSAqLwotZG1hX2FkZHJfdCBvbWFwX2dldF9kbWFfZHN0X3BvcyhpbnQgbGNoKQotewotCXJldHVybiAoZG1hX2FkZHJfdCkgKG9tYXBfcmVhZHcoT01BUF9ETUFfQ0RTQV9MKGxjaCkpIHwKLQkob21hcF9yZWFkdyhPTUFQX0RNQV9DRFNBX1UobGNoKSkgPDwgMTYpKTsKLX0KLQotLyoKLSAqIFJldHVybnMgY3VycmVudCBzb3VyY2UgdHJhbnNmZXIgY291bnRpbmcgZm9yIHRoZSBnaXZlbiBETUEgY2hhbm5lbC4KLSAqIENhbiBiZSB1c2VkIHRvIG1vbml0b3IgdGhlIHByb2dyZXNzIG9mIGEgdHJhbnNmZXIgaW5zaWRlIGEgIGJsb2NrLgotICogSXQgbXVzdCBiZSBjYWxsZWQgd2l0aCBkaXNhYmxlZCBpbnRlcnJ1cHRzLgotICovCi1pbnQgb21hcF9nZXRfZG1hX3NyY19hZGRyX2NvdW50ZXIoaW50IGxjaCkKLXsKLQlyZXR1cm4gKGRtYV9hZGRyX3QpIG9tYXBfcmVhZHcoT01BUF9ETUFfQ1NBQyhsY2gpKTsKLX0KLQotaW50IG9tYXBfZG1hX3J1bm5pbmcodm9pZCkKLXsKLQlpbnQgbGNoOwotCi0JLyogQ2hlY2sgaWYgTENEIERNQSBpcyBydW5uaW5nICovCi0JaWYgKGNwdV9pc19vbWFwMTZ4eCgpKQotCQlpZiAob21hcF9yZWFkdyhPTUFQMTYxMF9ETUFfTENEX0NDUikgJiBPTUFQX0RNQV9DQ1JfRU4pCi0JCQlyZXR1cm4gMTsKLQotCWZvciAobGNoID0gMDsgbGNoIDwgZG1hX2NoYW5fY291bnQ7IGxjaCsrKSB7Ci0JCXUxNiB3OwotCi0JCXcgPSBvbWFwX3JlYWR3KE9NQVBfRE1BX0NDUihsY2gpKTsKLQkJaWYgKHcgJiBPTUFQX0RNQV9DQ1JfRU4pCi0JCQlyZXR1cm4gMTsKLQl9Ci0JcmV0dXJuIDA7Ci19CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiBzdGF0aWMgaW50IF9faW5pdCBvbWFwX2luaXRfZG1hKHZvaWQpCiB7CiAJaW50IGNoLCByOwogCi0JaWYgKGNwdV9pc19vbWFwMTUxMCgpKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIkRNQSBzdXBwb3J0IGZvciBPTUFQMTUxMCBpbml0aWFsaXplZFxuIik7CisJaWYgKGNwdV9pc19vbWFwMTV4eCgpKSB7CisJCXByaW50ayhLRVJOX0lORk8gIkRNQSBzdXBwb3J0IGZvciBPTUFQMTV4eCBpbml0aWFsaXplZFxuIik7CiAJCWRtYV9jaGFuX2NvdW50ID0gOTsKIAkJZW5hYmxlXzE1MTBfbW9kZSA9IDE7CiAJfSBlbHNlIGlmIChjcHVfaXNfb21hcDE2eHgoKSB8fCBjcHVfaXNfb21hcDczMCgpKSB7CiAJCXByaW50ayhLRVJOX0lORk8gIk9NQVAgRE1BIGhhcmR3YXJlIHZlcnNpb24gJWRcbiIsCiAJCSAgICAgICBvbWFwX3JlYWR3KE9NQVBfRE1BX0hXX0lEKSk7CiAJCXByaW50ayhLRVJOX0lORk8gIkRNQSBjYXBhYmlsaXRpZXM6ICUwOHg6JTA4eDolMDR4OiUwNHg6JTA0eFxuIiwKLQkJICAgICAgIChvbWFwX3JlYWR3KE9NQVBfRE1BX0NBUFNfMF9VKSA8PCAxNikgfCBvbWFwX3JlYWR3KE9NQVBfRE1BX0NBUFNfMF9MKSwKLQkJICAgICAgIChvbWFwX3JlYWR3KE9NQVBfRE1BX0NBUFNfMV9VKSA8PCAxNikgfCBvbWFwX3JlYWR3KE9NQVBfRE1BX0NBUFNfMV9MKSwKKwkJICAgICAgIChvbWFwX3JlYWR3KE9NQVBfRE1BX0NBUFNfMF9VKSA8PCAxNikgfAorCQkgICAgICAgb21hcF9yZWFkdyhPTUFQX0RNQV9DQVBTXzBfTCksCisJCSAgICAgICAob21hcF9yZWFkdyhPTUFQX0RNQV9DQVBTXzFfVSkgPDwgMTYpIHwKKwkJICAgICAgIG9tYXBfcmVhZHcoT01BUF9ETUFfQ0FQU18xX0wpLAogCQkgICAgICAgb21hcF9yZWFkdyhPTUFQX0RNQV9DQVBTXzIpLCBvbWFwX3JlYWR3KE9NQVBfRE1BX0NBUFNfMyksCiAJCSAgICAgICBvbWFwX3JlYWR3KE9NQVBfRE1BX0NBUFNfNCkpOwogCQlpZiAoIWVuYWJsZV8xNTEwX21vZGUpIHsKQEAgLTEwMzgsNiArMTI4OCwxMSBAQAogCQkJZG1hX2NoYW5fY291bnQgPSAxNjsKIAkJfSBlbHNlCiAJCQlkbWFfY2hhbl9jb3VudCA9IDk7CisJfSBlbHNlIGlmIChjcHVfaXNfb21hcDI0eHgoKSkgeworCQl1OCByZXZpc2lvbiA9IG9tYXBfcmVhZGIoT01BUF9ETUE0X1JFVklTSU9OKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiT01BUCBETUEgaGFyZHdhcmUgcmV2aXNpb24gJWQuJWRcbiIsCisJCSAgICAgICByZXZpc2lvbiA+PiA0LCByZXZpc2lvbiAmIDB4Zik7CisJCWRtYV9jaGFuX2NvdW50ID0gT01BUF9MT0dJQ0FMX0RNQV9DSF9DT1VOVDsKIAl9IGVsc2UgewogCQlkbWFfY2hhbl9jb3VudCA9IDA7CiAJCXJldHVybiAwOwpAQCAtMTA0OSw0MSArMTMwNCw1NiBAQAogCW1lbXNldCgmZG1hX2NoYW4sIDAsIHNpemVvZihkbWFfY2hhbikpOwogCiAJZm9yIChjaCA9IDA7IGNoIDwgZG1hX2NoYW5fY291bnQ7IGNoKyspIHsKKwkJb21hcF9jbGVhcl9kbWEoY2gpOwogCQlkbWFfY2hhbltjaF0uZGV2X2lkID0gLTE7CiAJCWRtYV9jaGFuW2NoXS5uZXh0X2xjaCA9IC0xOwogCiAJCWlmIChjaCA+PSA2ICYmIGVuYWJsZV8xNTEwX21vZGUpCiAJCQljb250aW51ZTsKIAotCQkvKiByZXF1ZXN0X2lycSgpIGRvZXNuJ3QgbGlrZSBkZXZfaWQgKGllLiBjaCkgYmVpbmcgemVybywKLQkJICogc28gd2UgaGF2ZSB0byBrbHVkZ2UgYXJvdW5kIHRoaXMuICovCi0JCXIgPSByZXF1ZXN0X2lycShkbWFfaXJxW2NoXSwgZG1hX2lycV9oYW5kbGVyLCAwLCAiRE1BIiwKLQkJCQkodm9pZCAqKSAoY2ggKyAxKSk7CisJCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkgeworCQkJLyogcmVxdWVzdF9pcnEoKSBkb2Vzbid0IGxpa2UgZGV2X2lkIChpZS4gY2gpIGJlaW5nCisJCQkgKiB6ZXJvLCBzbyB3ZSBoYXZlIHRvIGtsdWRnZSBhcm91bmQgdGhpcy4gKi8KKwkJCXIgPSByZXF1ZXN0X2lycShvbWFwMV9kbWFfaXJxW2NoXSwKKwkJCQkJb21hcDFfZG1hX2lycV9oYW5kbGVyLCAwLCAiRE1BIiwKKwkJCQkJKHZvaWQgKikgKGNoICsgMSkpOworCQkJaWYgKHIgIT0gMCkgeworCQkJCWludCBpOworCisJCQkJcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gcmVxdWVzdCBJUlEgJWQgIgorCQkJCSAgICAgICAiZm9yIERNQSAoZXJyb3IgJWQpXG4iLAorCQkJCSAgICAgICBvbWFwMV9kbWFfaXJxW2NoXSwgcik7CisJCQkJZm9yIChpID0gMDsgaSA8IGNoOyBpKyspCisJCQkJCWZyZWVfaXJxKG9tYXAxX2RtYV9pcnFbaV0sCisJCQkJCQkgKHZvaWQgKikgKGkgKyAxKSk7CisJCQkJcmV0dXJuIHI7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkpCisJCXNldHVwX2lycShJTlRfMjRYWF9TRE1BX0lSUTAsICZvbWFwMjR4eF9kbWFfaXJxKTsKKworCS8qIEZJWE1FOiBVcGRhdGUgTENEIERNQSB0byB3b3JrIG9uIDI0eHggKi8KKwlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkpIHsKKwkJciA9IHJlcXVlc3RfaXJxKElOVF9ETUFfTENELCBsY2RfZG1hX2lycV9oYW5kbGVyLCAwLAorCQkJCSJMQ0QgRE1BIiwgTlVMTCk7CiAJCWlmIChyICE9IDApIHsKIAkJCWludCBpOwogCi0JCQlwcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byByZXF1ZXN0IElSUSAlZCBmb3IgRE1BIChlcnJvciAlZClcbiIsCi0JCQkgICAgICAgZG1hX2lycVtjaF0sIHIpOwotCQkJZm9yIChpID0gMDsgaSA8IGNoOyBpKyspCi0JCQkJZnJlZV9pcnEoZG1hX2lycVtpXSwgKHZvaWQgKikgKGkgKyAxKSk7CisJCQlwcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byByZXF1ZXN0IElSUSBmb3IgTENEIERNQSAiCisJCQkgICAgICAgIihlcnJvciAlZClcbiIsIHIpOworCQkJZm9yIChpID0gMDsgaSA8IGRtYV9jaGFuX2NvdW50OyBpKyspCisJCQkJZnJlZV9pcnEob21hcDFfZG1hX2lycVtpXSwgKHZvaWQgKikgKGkgKyAxKSk7CiAJCQlyZXR1cm4gcjsKIAkJfQogCX0KLQlyID0gcmVxdWVzdF9pcnEoSU5UX0RNQV9MQ0QsIGxjZF9kbWFfaXJxX2hhbmRsZXIsIDAsICJMQ0QgRE1BIiwgTlVMTCk7Ci0JaWYgKHIgIT0gMCkgewotCQlpbnQgaTsKIAotCQlwcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byByZXF1ZXN0IElSUSBmb3IgTENEIERNQSAoZXJyb3IgJWQpXG4iLCByKTsKLQkJZm9yIChpID0gMDsgaSA8IGRtYV9jaGFuX2NvdW50OyBpKyspCi0JCQlmcmVlX2lycShkbWFfaXJxW2ldLCAodm9pZCAqKSAoaSArIDEpKTsKLQkJcmV0dXJuIHI7Ci0JfQogCXJldHVybiAwOwogfQogCiBhcmNoX2luaXRjYWxsKG9tYXBfaW5pdF9kbWEpOwogCi0KIEVYUE9SVF9TWU1CT0wob21hcF9nZXRfZG1hX3NyY19wb3MpOwogRVhQT1JUX1NZTUJPTChvbWFwX2dldF9kbWFfZHN0X3Bvcyk7CiBFWFBPUlRfU1lNQk9MKG9tYXBfZ2V0X2RtYV9zcmNfYWRkcl9jb3VudGVyKTsKQEAgLTExMDksNiArMTM3OSw4IEBACiBFWFBPUlRfU1lNQk9MKG9tYXBfc2V0X2RtYV9kZXN0X2RhdGFfcGFjayk7CiBFWFBPUlRfU1lNQk9MKG9tYXBfc2V0X2RtYV9kZXN0X2J1cnN0X21vZGUpOwogCitFWFBPUlRfU1lNQk9MKG9tYXBfc2V0X2RtYV9wYXJhbXMpOworCiBFWFBPUlRfU1lNQk9MKG9tYXBfZG1hX2xpbmtfbGNoKTsKIEVYUE9SVF9TWU1CT0wob21hcF9kbWFfdW5saW5rX2xjaCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9ncGlvLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvZ3Bpby5jCmluZGV4IDU1MDU5YTIuLjc2ZjcyMWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9ncGlvLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2dwaW8uYwpAQCAtMTQwLDcgKzE0MCw3IEBACiB9OwogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTUxMAorI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNVhYCiBzdGF0aWMgc3RydWN0IGdwaW9fYmFuayBncGlvX2JhbmtfMTUxMFsyXSA9IHsKIAl7IE9NQVBfTVBVSU9fQkFTRSwgICAgSU5UX01QVUlPLCAgICAgIElIX01QVUlPX0JBU0UsIE1FVEhPRF9NUFVJTyB9LAogCXsgT01BUDE1MTBfR1BJT19CQVNFLCBJTlRfR1BJT19CQU5LMSwgSUhfR1BJT19CQVNFLCAgTUVUSE9EX0dQSU9fMTUxMCB9CkBAIC0xNzMsNyArMTczLDcgQEAKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgZ3Bpb19iYW5rICpnZXRfZ3Bpb19iYW5rKGludCBncGlvKQogewotI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNTEwCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1WFgKIAlpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKIAkJaWYgKE9NQVBfR1BJT19JU19NUFVJTyhncGlvKSkKIAkJCXJldHVybiAmZ3Bpb19iYW5rWzBdOwpAQCAtMjIyLDcgKzIyMiw3IEBACiAJCQlyZXR1cm4gLTE7CiAJCXJldHVybiAwOwogCX0KLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTUxMAorI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNVhYCiAJaWYgKGNwdV9pc19vbWFwMTUxMCgpICYmIGdwaW8gPCAxNikKIAkJcmV0dXJuIDA7CiAjZW5kaWYKQEAgLTY1NCw3ICs2NTQsNyBAQAogCS8qIFNldCB0cmlnZ2VyIHRvIG5vbmUuIFlvdSBuZWVkIHRvIGVuYWJsZSB0aGUgdHJpZ2dlciBhZnRlciByZXF1ZXN0X2lycSAqLwogCV9zZXRfZ3Bpb190cmlnZ2VyaW5nKGJhbmssIGdldF9ncGlvX2luZGV4KGdwaW8pLCBJUlFUX05PRURHRSk7CiAKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTUxMAorI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNVhYCiAJaWYgKGJhbmstPm1ldGhvZCA9PSBNRVRIT0RfR1BJT18xNTEwKSB7CiAJCXZvaWQgX19pb21lbSAqcmVnOwogCkBAIC03MzksNyArNzM5LDcgQEAKIAliYW5rID0gKHN0cnVjdCBncGlvX2JhbmsgKikgZGVzYy0+ZGF0YTsKIAlpZiAoYmFuay0+bWV0aG9kID09IE1FVEhPRF9NUFVJTykKIAkJaXNyX3JlZyA9IGJhbmstPmJhc2UgKyBPTUFQX01QVUlPX0dQSU9fSU5UOwotI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNTEwCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1WFgKIAlpZiAoYmFuay0+bWV0aG9kID09IE1FVEhPRF9HUElPXzE1MTApCiAJCWlzcl9yZWcgPSBiYW5rLT5iYXNlICsgT01BUDE1MTBfR1BJT19JTlRfU1RBVFVTOwogI2VuZGlmCkBAIC03NzQsNyArNzc0LDcgQEAKIAkJCWQgPSBpcnFfZGVzYyArIGdwaW9faXJxOwogCQkJZGVzY19oYW5kbGVfaXJxKGdwaW9faXJxLCBkLCByZWdzKTsKIAkJfQotICAgICAgICB9CisJfQogfQogCiBzdGF0aWMgdm9pZCBncGlvX2Fja19pcnEodW5zaWduZWQgaW50IGlycSkKQEAgLTgzNyw4ICs4MzcsOSBAQAogCS51bm1hc2sgPSBtcHVpb191bm1hc2tfaXJxCiB9OwogCi1zdGF0aWMgaW50IGluaXRpYWxpemVkID0gMDsKLXN0YXRpYyBzdHJ1Y3QgY2xrICogZ3Bpb19jayA9IE5VTEw7CitzdGF0aWMgaW50IGluaXRpYWxpemVkOworc3RhdGljIHN0cnVjdCBjbGsgKiBncGlvX2ljazsKK3N0YXRpYyBzdHJ1Y3QgY2xrICogZ3Bpb19mY2s7CiAKIHN0YXRpYyBpbnQgX19pbml0IF9vbWFwX2dwaW9faW5pdCh2b2lkKQogewpAQCAtODQ4LDE0ICs4NDksMjYgQEAKIAlpbml0aWFsaXplZCA9IDE7CiAKIAlpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKLQkJZ3Bpb19jayA9IGNsa19nZXQoTlVMTCwgImFybV9ncGlvX2NrIik7Ci0JCWlmIChJU19FUlIoZ3Bpb19jaykpCisJCWdwaW9faWNrID0gY2xrX2dldChOVUxMLCAiYXJtX2dwaW9fY2siKTsKKwkJaWYgKElTX0VSUihncGlvX2ljaykpCiAJCQlwcmludGsoIkNvdWxkIG5vdCBnZXQgYXJtX2dwaW9fY2tcbiIpOwogCQllbHNlCi0JCQljbGtfdXNlKGdwaW9fY2spOworCQkJY2xrX3VzZShncGlvX2ljayk7CisJfQorCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgeworCQlncGlvX2ljayA9IGNsa19nZXQoTlVMTCwgImdwaW9zX2ljayIpOworCQlpZiAoSVNfRVJSKGdwaW9faWNrKSkKKwkJCXByaW50aygiQ291bGQgbm90IGdldCBncGlvc19pY2tcbiIpOworCQllbHNlCisJCQljbGtfdXNlKGdwaW9faWNrKTsKKwkJZ3Bpb19mY2sgPSBjbGtfZ2V0KE5VTEwsICJncGlvc19mY2siKTsKKwkJaWYgKElTX0VSUihncGlvX2ljaykpCisJCQlwcmludGsoIkNvdWxkIG5vdCBnZXQgZ3Bpb3NfZmNrXG4iKTsKKwkJZWxzZQorCQkJY2xrX3VzZShncGlvX2Zjayk7CiAJfQogCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1MTAKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAogCWlmIChjcHVfaXNfb21hcDE1MTAoKSkgewogCQlwcmludGsoS0VSTl9JTkZPICJPTUFQMTUxMCBHUElPIGhhcmR3YXJlXG4iKTsKIAkJZ3Bpb19iYW5rX2NvdW50ID0gMjsKQEAgLTkwMSw3ICs5MTQsNyBAQAogCQlpZiAoYmFuay0+bWV0aG9kID09IE1FVEhPRF9NUFVJTykgewogCQkJb21hcF93cml0ZXcoMHhGRkZGLCBPTUFQX01QVUlPX0JBU0UgKyBPTUFQX01QVUlPX0dQSU9fTUFTS0lUKTsKIAkJfQotI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNTEwCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1WFgKIAkJaWYgKGJhbmstPm1ldGhvZCA9PSBNRVRIT0RfR1BJT18xNTEwKSB7CiAJCQlfX3Jhd193cml0ZXcoMHhmZmZmLCBiYW5rLT5iYXNlICsgT01BUDE1MTBfR1BJT19JTlRfTUFTSyk7CiAJCQlfX3Jhd193cml0ZXcoMHgwMDAwLCBiYW5rLT5iYXNlICsgT01BUDE1MTBfR1BJT19JTlRfU1RBVFVTKTsKQEAgLTEwMzgsNiArMTA1MSw3IEBACiAKIC8qCiAgKiBUaGlzIG1heSBnZXQgY2FsbGVkIGVhcmx5IGZyb20gYm9hcmQgc3BlY2lmaWMgaW5pdAorICogZm9yIGJvYXJkcyB0aGF0IGhhdmUgaW50ZXJydXB0cyByb3V0ZWQgdmlhIEZQR0EuCiAgKi8KIGludCBvbWFwX2dwaW9faW5pdCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL21jYnNwLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvbWNic3AuYwppbmRleCA5YzliN2RmLi5lYTk0NzVjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvbWNic3AuYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvbWNic3AuYwpAQCAtNDkxLDE3ICs0OTEsMjAgQEAKIAlvbWFwX3NldF9kbWFfdHJhbnNmZXJfcGFyYW1zKG1jYnNwW2lkXS5kbWFfdHhfbGNoLAogCQkJCSAgICAgT01BUF9ETUFfREFUQV9UWVBFX1MxNiwKIAkJCQkgICAgIGxlbmd0aCA+PiAxLCAxLAotCQkJCSAgICAgT01BUF9ETUFfU1lOQ19FTEVNRU5UKTsKKwkJCQkgICAgIE9NQVBfRE1BX1NZTkNfRUxFTUVOVCwKKwkJCQkgICAgIDAsIDApOwogCiAJb21hcF9zZXRfZG1hX2Rlc3RfcGFyYW1zKG1jYnNwW2lkXS5kbWFfdHhfbGNoLAogCQkJCSBPTUFQX0RNQV9QT1JUX1RJUEIsCiAJCQkJIE9NQVBfRE1BX0FNT0RFX0NPTlNUQU5ULAotCQkJCSBtY2JzcFtpZF0uaW9fYmFzZSArIE9NQVBfTUNCU1BfUkVHX0RYUjEpOworCQkJCSBtY2JzcFtpZF0uaW9fYmFzZSArIE9NQVBfTUNCU1BfUkVHX0RYUjEsCisJCQkJIDAsIDApOwogCiAJb21hcF9zZXRfZG1hX3NyY19wYXJhbXMobWNic3BbaWRdLmRtYV90eF9sY2gsCiAJCQkJT01BUF9ETUFfUE9SVF9FTUlGRiwKIAkJCQlPTUFQX0RNQV9BTU9ERV9QT1NUX0lOQywKLQkJCQlidWZmZXIpOworCQkJCWJ1ZmZlciwKKwkJCQkwLCAwKTsKIAogCW9tYXBfc3RhcnRfZG1hKG1jYnNwW2lkXS5kbWFfdHhfbGNoKTsKIAl3YWl0X2Zvcl9jb21wbGV0aW9uKCYobWNic3BbaWRdLnR4X2RtYV9jb21wbGV0aW9uKSk7CkBAIC01MzEsMTcgKzUzNCwyMCBAQAogCW9tYXBfc2V0X2RtYV90cmFuc2Zlcl9wYXJhbXMobWNic3BbaWRdLmRtYV9yeF9sY2gsCiAJCQkJICAgICBPTUFQX0RNQV9EQVRBX1RZUEVfUzE2LAogCQkJCSAgICAgbGVuZ3RoID4+IDEsIDEsCi0JCQkJICAgICBPTUFQX0RNQV9TWU5DX0VMRU1FTlQpOworCQkJCSAgICAgT01BUF9ETUFfU1lOQ19FTEVNRU5ULAorCQkJCSAgICAgMCwgMCk7CiAKIAlvbWFwX3NldF9kbWFfc3JjX3BhcmFtcyhtY2JzcFtpZF0uZG1hX3J4X2xjaCwKIAkJCQlPTUFQX0RNQV9QT1JUX1RJUEIsCiAJCQkJT01BUF9ETUFfQU1PREVfQ09OU1RBTlQsCi0JCQkJbWNic3BbaWRdLmlvX2Jhc2UgKyBPTUFQX01DQlNQX1JFR19EUlIxKTsKKwkJCQltY2JzcFtpZF0uaW9fYmFzZSArIE9NQVBfTUNCU1BfUkVHX0RSUjEsCisJCQkJMCwgMCk7CiAKIAlvbWFwX3NldF9kbWFfZGVzdF9wYXJhbXMobWNic3BbaWRdLmRtYV9yeF9sY2gsCiAJCQkJIE9NQVBfRE1BX1BPUlRfRU1JRkYsCiAJCQkJIE9NQVBfRE1BX0FNT0RFX1BPU1RfSU5DLAotCQkJCSBidWZmZXIpOworCQkJCSBidWZmZXIsCisJCQkJIDAsIDApOwogCiAJb21hcF9zdGFydF9kbWEobWNic3BbaWRdLmRtYV9yeF9sY2gpOwogCXdhaXRfZm9yX2NvbXBsZXRpb24oJihtY2JzcFtpZF0ucnhfZG1hX2NvbXBsZXRpb24pKTsKQEAgLTY0Myw3ICs2NDksNyBAQAogfTsKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1MTAKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAogc3RhdGljIGNvbnN0IHN0cnVjdCBvbWFwX21jYnNwX2luZm8gbWNic3BfMTUxMFtdID0gewogCVswXSA9IHsgLnZpcnRfYmFzZSA9IE9NQVAxNTEwX01DQlNQMV9CQVNFLAogCQkuZG1hX3J4X3N5bmMgPSBPTUFQX0RNQV9NQ0JTUDFfUlgsCkBAIC03MTIsNyArNzE4LDcgQEAKIAkJbWNic3BfY291bnQgPSBBUlJBWV9TSVpFKG1jYnNwXzczMCk7CiAJfQogI2VuZGlmCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1MTAKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAogCWlmIChjcHVfaXNfb21hcDE1MTAoKSkgewogCQltY2JzcF9pbmZvID0gbWNic3BfMTUxMDsKIAkJbWNic3BfY291bnQgPSBBUlJBWV9TSVpFKG1jYnNwXzE1MTApOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL211eC5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL211eC5jCmluZGV4IDY0NDgyMDQuLjhjMWMwMTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9tdXguYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvbXV4LmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogVXRpbGl0eSB0byBzZXQgdGhlIE9tYXAgTVVYIGFuZCBQVUxMX0RXTiByZWdpc3RlcnMgZnJvbSBhIHRhYmxlIGluIG11eC5oCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAzIE5va2lhIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA1IE5va2lhIENvcnBvcmF0aW9uCiAgKgogICogV3JpdHRlbiBieSBUb255IExpbmRncmVuIDx0b255LmxpbmRncmVuQG5va2lhLmNvbT4KICAqCkBAIC0yNSwzOCArMjUsNzQgQEAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0KLSNkZWZpbmUgX19NVVhfQ19fCiAjaW5jbHVkZSA8YXNtL2FyY2gvbXV4Lmg+CiAKICNpZmRlZiBDT05GSUdfT01BUF9NVVgKIAorI2RlZmluZSBPTUFQMjRYWF9MNF9CQVNFCTB4NDgwMDAwMDAKKyNkZWZpbmUgT01BUDI0WFhfUFVMTF9FTkEJKDEgPDwgMykKKyNkZWZpbmUgT01BUDI0WFhfUFVMTF9VUAkoMSA8PCA0KQorCitzdGF0aWMgc3RydWN0IHBpbl9jb25maWcgKiBwaW5fdGFibGU7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBwaW5fdGFibGVfc3o7CisKK2V4dGVybiBzdHJ1Y3QgcGluX2NvbmZpZyAqIG9tYXA3MzBfcGluczsKK2V4dGVybiBzdHJ1Y3QgcGluX2NvbmZpZyAqIG9tYXAxeHh4X3BpbnM7CitleHRlcm4gc3RydWN0IHBpbl9jb25maWcgKiBvbWFwMjR4eF9waW5zOworCitpbnQgX19pbml0IG9tYXBfbXV4X3JlZ2lzdGVyKHN0cnVjdCBwaW5fY29uZmlnICogcGlucywgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXBpbl90YWJsZSA9IHBpbnM7CisJcGluX3RhYmxlX3N6ID0gc2l6ZTsKKworCXJldHVybiAwOworfQorCiAvKgogICogU2V0cyB0aGUgT21hcCBNVVggYW5kIFBVTExfRFdOIHJlZ2lzdGVycyBiYXNlZCBvbiB0aGUgdGFibGUKICAqLwotaW50IF9faW5pdF9vcl9tb2R1bGUKLW9tYXBfY2ZnX3JlZyhjb25zdCByZWdfY2ZnX3QgcmVnX2NmZykKK2ludCBfX2luaXRfb3JfbW9kdWxlIG9tYXBfY2ZnX3JlZyhjb25zdCB1bnNpZ25lZCBsb25nIGluZGV4KQogewogCXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobXV4X3NwaW5fbG9jayk7CiAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXJlZ19jZmdfc2V0ICpjZmc7CisJc3RydWN0IHBpbl9jb25maWcgKmNmZzsKIAl1bnNpZ25lZCBpbnQgcmVnX29yaWcgPSAwLCByZWcgPSAwLCBwdV9wZF9vcmlnID0gMCwgcHVfcGQgPSAwLAogCQlwdWxsX29yaWcgPSAwLCBwdWxsID0gMDsKIAl1bnNpZ25lZCBpbnQgbWFzaywgd2FybiA9IDA7CiAKLQlpZiAoY3B1X2lzX29tYXA3eHgoKSkKLQkJcmV0dXJuIDA7CisJaWYgKCFwaW5fdGFibGUpCisJCUJVRygpOwogCi0JaWYgKHJlZ19jZmcgPiBBUlJBWV9TSVpFKHJlZ19jZmdfdGFibGUpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiTVVYOiByZWdfY2ZnICVkXG4iLCByZWdfY2ZnKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGluZGV4ID49IHBpbl90YWJsZV9zeikgeworCQlwcmludGsoS0VSTl9FUlIgIkludmFsaWQgcGluIG11eCBpbmRleDogJWx1ICglbHUpXG4iLAorCQkgICAgICAgaW5kZXgsIHBpbl90YWJsZV9zeik7CisJCWR1bXBfc3RhY2soKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JY2ZnID0gKHJlZ19jZmdfc2V0ICopJnJlZ19jZmdfdGFibGVbcmVnX2NmZ107CisJY2ZnID0gKHN0cnVjdCBwaW5fY29uZmlnICopJnBpbl90YWJsZVtpbmRleF07CisJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CisJCXU4IHJlZyA9IDA7CisKKwkJcmVnIHw9IGNmZy0+bWFzayAmIDB4NzsKKwkJaWYgKGNmZy0+cHVsbF92YWwpCisJCQlyZWcgfD0gT01BUDI0WFhfUFVMTF9FTkE7CisJCWlmKGNmZy0+cHVfcGRfdmFsKQorCQkJcmVnIHw9IE9NQVAyNFhYX1BVTExfVVA7CisjaWZkZWYgQ09ORklHX09NQVBfTVVYX0RFQlVHCisJCXByaW50aygiTXV4aW5nICVzICgweCUwOHgpOiAweCUwMnggLT4gMHglMDJ4XG4iLAorCQkgICAgICAgY2ZnLT5uYW1lLCBPTUFQMjRYWF9MNF9CQVNFICsgY2ZnLT5tdXhfcmVnLAorCQkgICAgICAgb21hcF9yZWFkYihPTUFQMjRYWF9MNF9CQVNFICsgY2ZnLT5tdXhfcmVnKSwgcmVnKTsKKyNlbmRpZgorCQlvbWFwX3dyaXRlYihyZWcsIE9NQVAyNFhYX0w0X0JBU0UgKyBjZmctPm11eF9yZWcpOworCisJCXJldHVybiAwOworCX0KIAogCS8qIENoZWNrIHRoZSBtdXggcmVnaXN0ZXIgaW4gcXVlc3Rpb24gKi8KIAlpZiAoY2ZnLT5tdXhfcmVnKSB7CkBAIC0xNTcsNyArMTkzLDggQEAKIAlyZXR1cm4gMDsKICNlbmRpZgogfQotCiBFWFBPUlRfU1lNQk9MKG9tYXBfY2ZnX3JlZyk7Ci0KKyNlbHNlCisjZGVmaW5lIG9tYXBfbXV4X2luaXQoKSBkbyB7fSB3aGlsZSgwKQorI2RlZmluZSBvbWFwX2NmZ19yZWcoeCkJZG8ge30gd2hpbGUoMCkKICNlbmRpZgkvKiBDT05GSUdfT01BUF9NVVggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9vY3BpLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvb2NwaS5jCmluZGV4IDFmYjE2ZjkuLjJlZGUyZWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9vY3BpLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL29jcGkuYwpAQCAtMjUsNyArMjUsNiBAQAogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9wbS5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL3BtLmMKaW5kZXggZTE1YzZjMS4uOTY2Y2NhMDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9wbS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9wbS5jCkBAIC01NCwxMSArNTQsMTIgQEAKICNpbmNsdWRlIDxhc20vYXJjaC90cHM2NTAxMC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2RzcF9jb21tb24uaD4KIAotI2luY2x1ZGUgImNsb2NrLmgiCi0jaW5jbHVkZSAic3JhbS5oIgorI2luY2x1ZGUgPGFzbS9hcmNoL2Nsb2NrLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvc3JhbS5oPgogCiBzdGF0aWMgdW5zaWduZWQgaW50IGFybV9zbGVlcF9zYXZlW0FSTV9TTEVFUF9TQVZFX1NJWkVdOwogc3RhdGljIHVuc2lnbmVkIHNob3J0IHVscGRfc2xlZXBfc2F2ZVtVTFBEX1NMRUVQX1NBVkVfU0laRV07CitzdGF0aWMgdW5zaWduZWQgaW50IG1wdWk3MzBfc2xlZXBfc2F2ZVtNUFVJNzMwX1NMRUVQX1NBVkVfU0laRV07CiBzdGF0aWMgdW5zaWduZWQgaW50IG1wdWkxNTEwX3NsZWVwX3NhdmVbTVBVSTE1MTBfU0xFRVBfU0FWRV9TSVpFXTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbXB1aTE2MTBfc2xlZXBfc2F2ZVtNUFVJMTYxMF9TTEVFUF9TQVZFX1NJWkVdOwogCkBAIC0xMjAsOCArMTIxLDggQEAKICAqLwogc3RhdGljIHZvaWQgb21hcF9wbV93YWtldXBfc2V0dXAodm9pZCkKIHsKLQl1MzIgbGV2ZWwxX3dha2UgPSBPTUFQX0lSUV9CSVQoSU5UX0lIMl9JUlEpOwotCXUzMiBsZXZlbDJfd2FrZSA9IE9NQVBfSVJRX0JJVChJTlRfVUFSVDIpIHwgT01BUF9JUlFfQklUKElOVF9LRVlCT0FSRCk7CisJdTMyIGxldmVsMV93YWtlID0gMDsKKwl1MzIgbGV2ZWwyX3dha2UgPSBPTUFQX0lSUV9CSVQoSU5UX1VBUlQyKTsKIAogCS8qCiAJICogVHVybiBvZmYgYWxsIGludGVycnVwdHMgZXhjZXB0IEdQSU8gYmFuayAxLCBMMS0ybmQgbGV2ZWwgY2FzY2FkZSwKQEAgLTEyOSwxOSArMTMwLDI5IEBACiAJICogZHJpdmVycyBtdXN0IHN0aWxsIHNlcGFyYXRlbHkgY2FsbCBvbWFwX3NldF9ncGlvX3dha2V1cCgpIHRvCiAJICogd2FrZSB1cCB0byBhIEdQSU8gaW50ZXJydXB0LgogCSAqLwotCWlmIChjcHVfaXNfb21hcDE1MTAoKSB8fCBjcHVfaXNfb21hcDE2eHgoKSkKLQkJbGV2ZWwxX3dha2UgfD0gT01BUF9JUlFfQklUKElOVF9HUElPX0JBTksxKTsKLQllbHNlIGlmIChjcHVfaXNfb21hcDczMCgpKQotCQlsZXZlbDFfd2FrZSB8PSBPTUFQX0lSUV9CSVQoSU5UXzczMF9HUElPX0JBTksxKTsKKwlpZiAoY3B1X2lzX29tYXA3MzAoKSkKKwkJbGV2ZWwxX3dha2UgPSBPTUFQX0lSUV9CSVQoSU5UXzczMF9HUElPX0JBTksxKSB8CisJCQlPTUFQX0lSUV9CSVQoSU5UXzczMF9JSDJfSVJRKTsKKwllbHNlIGlmIChjcHVfaXNfb21hcDE1MTAoKSkKKwkJbGV2ZWwxX3dha2UgPSBPTUFQX0lSUV9CSVQoSU5UX0dQSU9fQkFOSzEpIHwKKwkJCU9NQVBfSVJRX0JJVChJTlRfMTUxMF9JSDJfSVJRKTsKKwllbHNlIGlmIChjcHVfaXNfb21hcDE2eHgoKSkKKwkJbGV2ZWwxX3dha2UgPSBPTUFQX0lSUV9CSVQoSU5UX0dQSU9fQkFOSzEpIHwKKwkJCU9NQVBfSVJRX0JJVChJTlRfMTYxMF9JSDJfSVJRKTsKIAogCW9tYXBfd3JpdGVsKH5sZXZlbDFfd2FrZSwgT01BUF9JSDFfTUlSKTsKIAotCWlmIChjcHVfaXNfb21hcDE1MTAoKSkKLQkJb21hcF93cml0ZWwofmxldmVsMl93YWtlLCAgT01BUF9JSDJfTUlSKTsKLQotCS8qIElOVF8xNjEwX1dBS0VfVVBfUkVRIGlzIG5lZWRlZCBmb3IgR1BJTyB3YWtldXAuLi4gKi8KLQlpZiAoY3B1X2lzX29tYXAxNnh4KCkpIHsKKwlpZiAoY3B1X2lzX29tYXA3MzAoKSkgewogCQlvbWFwX3dyaXRlbCh+bGV2ZWwyX3dha2UsIE9NQVBfSUgyXzBfTUlSKTsKKwkJb21hcF93cml0ZWwofihPTUFQX0lSUV9CSVQoSU5UXzczMF9XQUtFX1VQX1JFUSkgfCBPTUFQX0lSUV9CSVQoSU5UXzczMF9NUFVJT19LRVlQQUQpKSwgT01BUF9JSDJfMV9NSVIpOworCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKKwkJbGV2ZWwyX3dha2UgfD0gT01BUF9JUlFfQklUKElOVF9LRVlCT0FSRCk7CisJCW9tYXBfd3JpdGVsKH5sZXZlbDJfd2FrZSwgIE9NQVBfSUgyX01JUik7CisJfSBlbHNlIGlmIChjcHVfaXNfb21hcDE2eHgoKSkgeworCQlsZXZlbDJfd2FrZSB8PSBPTUFQX0lSUV9CSVQoSU5UX0tFWUJPQVJEKTsKKwkJb21hcF93cml0ZWwofmxldmVsMl93YWtlLCBPTUFQX0lIMl8wX01JUik7CisKKwkJLyogSU5UXzE2MTBfV0FLRV9VUF9SRVEgaXMgbmVlZGVkIGZvciBHUElPIHdha2V1cC4uLiAqLwogCQlvbWFwX3dyaXRlbCh+T01BUF9JUlFfQklUKElOVF8xNjEwX1dBS0VfVVBfUkVRKSwgT01BUF9JSDJfMV9NSVIpOwogCQlvbWFwX3dyaXRlbCh+MHgwLCBPTUFQX0lIMl8yX01JUik7CiAJCW9tYXBfd3JpdGVsKH4weDAsIE9NQVBfSUgyXzNfTUlSKTsKQEAgLTE4NSw3ICsxOTYsMTcgQEAKICAJICogU2F2ZSBpbnRlcnJ1cHQsIE1QVUksIEFSTSBhbmQgVVBMRCBjb250cm9sIHJlZ2lzdGVycy4KIAkgKi8KIAotCWlmIChjcHVfaXNfb21hcDE1MTAoKSkgeworCWlmIChjcHVfaXNfb21hcDczMCgpKSB7CisJCU1QVUk3MzBfU0FWRShPTUFQX0lIMV9NSVIpOworCQlNUFVJNzMwX1NBVkUoT01BUF9JSDJfMF9NSVIpOworCQlNUFVJNzMwX1NBVkUoT01BUF9JSDJfMV9NSVIpOworCQlNUFVJNzMwX1NBVkUoTVBVSV9DVFJMKTsKKwkJTVBVSTczMF9TQVZFKE1QVUlfRFNQX0JPT1RfQ09ORklHKTsKKwkJTVBVSTczMF9TQVZFKE1QVUlfRFNQX0FQSV9DT05GSUcpOworCQlNUFVJNzMwX1NBVkUoRU1JRlNfQ09ORklHKTsKKwkJTVBVSTczMF9TQVZFKEVNSUZGX1NEUkFNX0NPTkZJRyk7CisKKwl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMTUxMCgpKSB7CiAJCU1QVUkxNTEwX1NBVkUoT01BUF9JSDFfTUlSKTsKIAkJTVBVSTE1MTBfU0FWRShPTUFQX0lIMl9NSVIpOwogCQlNUFVJMTUxMF9TQVZFKE1QVUlfQ1RSTCk7CkBAIC0yODAsNyArMzAxLDEzIEBACiAJVUxQRF9SRVNUT1JFKFVMUERfQ0xPQ0tfQ1RSTCk7CiAJVUxQRF9SRVNUT1JFKFVMUERfU1RBVFVTX1JFUSk7CiAKLQlpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKKwlpZiAoY3B1X2lzX29tYXA3MzAoKSkgeworCQlNUFVJNzMwX1JFU1RPUkUoRU1JRlNfQ09ORklHKTsKKwkJTVBVSTczMF9SRVNUT1JFKEVNSUZGX1NEUkFNX0NPTkZJRyk7CisJCU1QVUk3MzBfUkVTVE9SRShPTUFQX0lIMV9NSVIpOworCQlNUFVJNzMwX1JFU1RPUkUoT01BUF9JSDJfMF9NSVIpOworCQlNUFVJNzMwX1JFU1RPUkUoT01BUF9JSDJfMV9NSVIpOworCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKIAkJTVBVSTE1MTBfUkVTVE9SRShNUFVJX0NUUkwpOwogCQlNUFVJMTUxMF9SRVNUT1JFKE1QVUlfRFNQX0JPT1RfQ09ORklHKTsKIAkJTVBVSTE1MTBfUkVTVE9SRShNUFVJX0RTUF9BUElfQ09ORklHKTsKQEAgLTM1NSw3ICszODIsMTQgQEAKIAlVTFBEX1NBVkUoVUxQRF9EUExMX0NUUkwpOwogCVVMUERfU0FWRShVTFBEX1BPV0VSX0NUUkwpOwogCi0JaWYgKGNwdV9pc19vbWFwMTUxMCgpKSB7CisJaWYgKGNwdV9pc19vbWFwNzMwKCkpIHsKKwkJTVBVSTczMF9TQVZFKE1QVUlfQ1RSTCk7CisJCU1QVUk3MzBfU0FWRShNUFVJX0RTUF9TVEFUVVMpOworCQlNUFVJNzMwX1NBVkUoTVBVSV9EU1BfQk9PVF9DT05GSUcpOworCQlNUFVJNzMwX1NBVkUoTVBVSV9EU1BfQVBJX0NPTkZJRyk7CisJCU1QVUk3MzBfU0FWRShFTUlGRl9TRFJBTV9DT05GSUcpOworCQlNUFVJNzMwX1NBVkUoRU1JRlNfQ09ORklHKTsKKwl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMTUxMCgpKSB7CiAJCU1QVUkxNTEwX1NBVkUoTVBVSV9DVFJMKTsKIAkJTVBVSTE1MTBfU0FWRShNUFVJX0RTUF9TVEFUVVMpOwogCQlNUFVJMTUxMF9TQVZFKE1QVUlfRFNQX0JPT1RfQ09ORklHKTsKQEAgLTQwNCw3ICs0MzgsMjEgQEAKIAkJICAgVUxQRF9TSE9XKFVMUERfU1RBVFVTX1JFUSksCiAJCSAgIFVMUERfU0hPVyhVTFBEX1BPV0VSX0NUUkwpKTsKIAotCQlpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKKwkJaWYgKGNwdV9pc19vbWFwNzMwKCkpIHsKKwkJCW15X2J1ZmZlcl9vZmZzZXQgKz0gc3ByaW50ZihteV9iYXNlICsgbXlfYnVmZmVyX29mZnNldCwKKwkJCSAgICJNUFVJNzMwX0NUUkxfUkVHCSAgICAgMHglLTh4IFxuIgorCQkJICAgIk1QVUk3MzBfRFNQX1NUQVRVU19SRUc6ICAgICAgMHglLTh4IFxuIgorCQkJICAgIk1QVUk3MzBfRFNQX0JPT1RfQ09ORklHX1JFRzogMHglLTh4IFxuIgorCSAiTVBVSTczMF9EU1BfQVBJX0NPTkZJR19SRUc6ICAweCUtOHggXG4iCisJICJNUFVJNzMwX1NEUkFNX0NPTkZJR19SRUc6ICAgIDB4JS04eCBcbiIKKwkgIk1QVUk3MzBfRU1JRlNfQ09ORklHX1JFRzogICAgMHglLTh4IFxuIiwKKwkgTVBVSTczMF9TSE9XKE1QVUlfQ1RSTCksCisJIE1QVUk3MzBfU0hPVyhNUFVJX0RTUF9TVEFUVVMpLAorCSBNUFVJNzMwX1NIT1coTVBVSV9EU1BfQk9PVF9DT05GSUcpLAorCSBNUFVJNzMwX1NIT1coTVBVSV9EU1BfQVBJX0NPTkZJRyksCisJIE1QVUk3MzBfU0hPVyhFTUlGRl9TRFJBTV9DT05GSUcpLAorCSBNUFVJNzMwX1NIT1coRU1JRlNfQ09ORklHKSk7CisJCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKIAkJCW15X2J1ZmZlcl9vZmZzZXQgKz0gc3ByaW50ZihteV9iYXNlICsgbXlfYnVmZmVyX29mZnNldCwKIAkJCSAgICJNUFVJMTUxMF9DVFJMX1JFRyAgICAgICAgICAgICAweCUtOHggXG4iCiAJCQkgICAiTVBVSTE1MTBfRFNQX1NUQVRVU19SRUc6ICAgICAgMHglLTh4IFxuIgpAQCAtNTUzLDcgKzYwMSwxMiBAQAogCSAqIFRoZXNlIHJvdXRpbmVzIG5lZWQgdG8gYmUgaW4gU1JBTSBhcyB0aGF0J3MgdGhlIG9ubHkKIAkgKiBtZW1vcnkgdGhlIE1QVSBjYW4gc2VlIHdoZW4gaXQgd2FrZXMgdXAuCiAJICovCi0JaWYgKGNwdV9pc19vbWFwMTUxMCgpKSB7CisJaWYgKGNwdV9pc19vbWFwNzMwKCkpIHsKKwkJb21hcF9zcmFtX2lkbGUgPSBvbWFwX3NyYW1fcHVzaChvbWFwNzMwX2lkbGVfbG9vcF9zdXNwZW5kLAorCQkJCQkJb21hcDczMF9pZGxlX2xvb3Bfc3VzcGVuZF9zeik7CisJCW9tYXBfc3JhbV9zdXNwZW5kID0gb21hcF9zcmFtX3B1c2gob21hcDczMF9jcHVfc3VzcGVuZCwKKwkgb21hcDczMF9jcHVfc3VzcGVuZF9zeik7CisJfSBlbHNlIGlmIChjcHVfaXNfb21hcDE1MTAoKSkgewogCQlvbWFwX3NyYW1faWRsZSA9IG9tYXBfc3JhbV9wdXNoKG9tYXAxNTEwX2lkbGVfbG9vcF9zdXNwZW5kLAogCQkJCQkJb21hcDE1MTBfaWRsZV9sb29wX3N1c3BlbmRfc3opOwogCQlvbWFwX3NyYW1fc3VzcGVuZCA9IG9tYXBfc3JhbV9wdXNoKG9tYXAxNTEwX2NwdV9zdXNwZW5kLApAQCAtNTcyLDcgKzYyNSwxMSBAQAogCiAJcG1faWRsZSA9IG9tYXBfcG1faWRsZTsKIAotCXNldHVwX2lycShJTlRfMTYxMF9XQUtFX1VQX1JFUSwgJm9tYXBfd2FrZXVwX2lycSk7CisJaWYgKGNwdV9pc19vbWFwNzMwKCkpCisJCXNldHVwX2lycShJTlRfNzMwX1dBS0VfVVBfUkVRLCAmb21hcF93YWtldXBfaXJxKTsKKwllbHNlIGlmIChjcHVfaXNfb21hcDE2eHgoKSkKKwkJc2V0dXBfaXJxKElOVF8xNjEwX1dBS0VfVVBfUkVRLCAmb21hcF93YWtldXBfaXJxKTsKKwogI2lmIDAKIAkvKiAtLS0gQkVHSU4gQk9BUkQtREVQRU5ERU5UIENPREUgLS0tICovCiAJLyogU2xlZXB4IG1hc2sgZGlyZWN0aW9uICovCkBAIC01OTEsNyArNjQ4LDkgQEAKIAlvbWFwX3dyaXRldyhVTFBEX1BPV0VSX0NUUkxfUkVHX1ZBTCwgVUxQRF9QT1dFUl9DVFJMKTsKIAogCS8qIENvbmZpZ3VyZSBJRExFQ1QzICovCi0JaWYgKGNwdV9pc19vbWFwMTZ4eCgpKQorCWlmIChjcHVfaXNfb21hcDczMCgpKQorCQlvbWFwX3dyaXRlbChPTUFQNzMwX0lETEVDVDNfVkFMLCBPTUFQNzMwX0lETEVDVDMpOworCWVsc2UgaWYgKGNwdV9pc19vbWFwMTZ4eCgpKQogCQlvbWFwX3dyaXRlbChPTUFQMTYxMF9JRExFQ1QzX1ZBTCwgT01BUDE2MTBfSURMRUNUMyk7CiAKIAlwbV9zZXRfb3BzKCZvbWFwX3BtX29wcyk7CkBAIC02MDAsOCArNjU5LDEwIEBACiAJb21hcF9wbV9pbml0X3Byb2MoKTsKICNlbmRpZgogCi0JLyogY29uZmlndXJlIExPV19QV1IgcGluICovCi0Jb21hcF9jZmdfcmVnKFQyMF8xNjEwX0xPV19QV1IpOworCWlmIChjcHVfaXNfb21hcDE2eHgoKSkgeworCQkvKiBjb25maWd1cmUgTE9XX1BXUiBwaW4gKi8KKwkJb21hcF9jZmdfcmVnKFQyMF8xNjEwX0xPV19QV1IpOworCX0KIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL3NsZWVwLlMgYi9hcmNoL2FybS9wbGF0LW9tYXAvc2xlZXAuUwppbmRleCA5Zjc0NTgzLi40Y2Q3ZDI5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvc2xlZXAuUworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvc2xlZXAuUwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBsaW51eC9hcmNoL2FybS9wbGF0LW9tYXAvc2xlZXAuUwogICoKLSAqIExvdy1sZXZlbCBPTUFQMTUxMC8xNjEwIHNsZWVwL3dha2VVcCBzdXBwb3J0CisgKiBMb3ctbGV2ZWwgT01BUDczMC8xNTEwLzE2MTAgc2xlZXAvd2FrZVVwIHN1cHBvcnQKICAqCiAgKiBJbml0aWFsIFNBMTExMCBjb2RlOgogICogQ29weXJpZ2h0IChjKSAyMDAxIENsaWZmIEJyYWtlIDxjYnJha2VAYWNjZWxlbnQuY29tPgpAQCAtNTIsNyArNTIsNTcgQEAKICAqICAgICAgIHByb2Nlc3NvciBzcGVjaWZpYyBmdW5jdGlvbnMgaGVyZS4KICAqLwogCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1MTAKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA3MzApCitFTlRSWShvbWFwNzMwX2lkbGVfbG9vcF9zdXNwZW5kKQorCisJc3RtZmQJc3AhLCB7cjAgLSByMTIsIGxyfQkJQCBzYXZlIHJlZ2lzdGVycyBvbiBzdGFjaworCisJQCBsb2FkIGJhc2UgYWRkcmVzcyBvZiBBUk1fSURMRUNUMSBhbmQgQVJNX0lETEVDVDIKKwltb3YJcjQsICNDTEtHRU5fUkVHX0FTTV9CQVNFICYgMHhmZjAwMDAwMAorCW9ycglyNCwgcjQsICNDTEtHRU5fUkVHX0FTTV9CQVNFICYgMHgwMGZmMDAwMAorCW9ycglyNCwgcjQsICNDTEtHRU5fUkVHX0FTTV9CQVNFICYgMHgwMDAwZmYwMAorCisJQCB0dXJuIG9mZiBjbG9jayBkb21haW5zCisJQCBnZXQgQVJNX0lETEVDVDIgaW50byByMgorCWxkcmgJcjIsIFtyNCwgI0FSTV9JRExFQ1QyX0FTTV9PRkZTRVQgJiAweGZmXQorCW1vdglyNSwgI09NQVA3MzBfSURMRUNUMl9TTEVFUF9WQUwgJiAweGZmCisJb3JyCXI1LCByNSwgI09NQVA3MzBfSURMRUNUMl9TTEVFUF9WQUwgJiAweGZmMDAKKwlzdHJoCXI1LCBbcjQsICNBUk1fSURMRUNUMl9BU01fT0ZGU0VUICYgMHhmZl0KKworCUAgcmVxdWVzdCBBUk0gaWRsZQorCUAgZ2V0IEFSTV9JRExFQ1QxIGludG8gcjEKKwlsZHJoCXIxLCBbcjQsICNBUk1fSURMRUNUMV9BU01fT0ZGU0VUICYgMHhmZl0KKwlvcnIJcjMsIHIxLCAjT01BUDczMF9JRExFX0xPT1BfUkVRVUVTVCAmIDB4ZmZmZgorCXN0cmgJcjMsIFtyNCwgI0FSTV9JRExFQ1QxX0FTTV9PRkZTRVQgJiAweGZmXQorCisJbW92CXI1LCAjSURMRV9XQUlUX0NZQ0xFUyAmIDB4ZmYKKwlvcnIJcjUsIHI1LCAjSURMRV9XQUlUX0NZQ0xFUyAmIDB4ZmYwMAorbF83MzA6CXN1YnMJcjUsIHI1LCAjMQorCWJuZQlsXzczMAorLyoKKyAqIExldCdzIHdhaXQgZm9yIHRoZSBuZXh0IGNsb2NrIHRpY2sgdG8gd2FrZSB1cyB1cC4KKyAqLworCW1vdglyMCwgIzAKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMwLCA0CQlAIHdhaXQgZm9yIGludGVycnVwdAorLyoKKyAqIG9tYXA3MzBfaWRsZV9sb29wX3N1c3BlbmQoKSdzIHJlc3VtZSBwb2ludC4KKyAqCisgKiBJdCB3aWxsIGp1c3Qgc3RhcnQgZXhlY3V0aW5nIGhlcmUsIHNvIHdlJ2xsIHJlc3RvcmUgc3R1ZmYgZnJvbSB0aGUKKyAqIHN0YWNrLCByZXNldCB0aGUgQVJNX0lETEVDVDEgYW5kIEFSTV9JRExFQ1QyLgorICovCisKKwlAIHJlc3RvcmUgQVJNX0lETEVDVDEgYW5kIEFSTV9JRExFQ1QyIGFuZCByZXR1cm4KKwlAIHIxIGhhcyBBUk1fSURMRUNUMSBhbmQgcjIgc3RpbGwgaGFzIEFSTV9JRExFQ1QyCisJc3RyaAlyMiwgW3I0LCAjQVJNX0lETEVDVDJfQVNNX09GRlNFVCAmIDB4ZmZdCisJc3RyaAlyMSwgW3I0LCAjQVJNX0lETEVDVDFfQVNNX09GRlNFVCAmIDB4ZmZdCisKKwlsZG1mZAlzcCEsIHtyMCAtIHIxMiwgcGN9CQlAIHJlc3RvcmUgcmVncyBhbmQgcmV0dXJuCisKK0VOVFJZKG9tYXA3MzBfaWRsZV9sb29wX3N1c3BlbmRfc3opCisJLndvcmQJLiAtIG9tYXA3MzBfaWRsZV9sb29wX3N1c3BlbmQKKyNlbmRpZiAvKiBDT05GSUdfQVJDSF9PTUFQNzMwICovCisKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAogRU5UUlkob21hcDE1MTBfaWRsZV9sb29wX3N1c3BlbmQpCiAKIAlzdG1mZAlzcCEsIHtyMCAtIHIxMiwgbHJ9CQlAIHNhdmUgcmVnaXN0ZXJzIG9uIHN0YWNrCkBAIC0xMDAsNyArMTUwLDcgQEAKIAogRU5UUlkob21hcDE1MTBfaWRsZV9sb29wX3N1c3BlbmRfc3opCiAJLndvcmQJLiAtIG9tYXAxNTEwX2lkbGVfbG9vcF9zdXNwZW5kCi0jZW5kaWYgLyogQ09ORklHX0FSQ0hfT01BUDE1MTAgKi8KKyNlbmRpZiAvKiBDT05GSUdfQVJDSF9PTUFQMTVYWCAqLwogCiAjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTZYWCkKIEVOVFJZKG9tYXAxNjEwX2lkbGVfbG9vcF9zdXNwZW5kKQpAQCAtMTY5LDcgKzIxOSw4NiBAQAogICoKICAqLwogCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1MTAKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA3MzApCitFTlRSWShvbWFwNzMwX2NwdV9zdXNwZW5kKQorCisJQCBzYXZlIHJlZ2lzdGVycyBvbiBzdGFjaworCXN0bWZkCXNwISwge3IwIC0gcjEyLCBscn0KKworCUAgRHJhaW4gd3JpdGUgY2FjaGUKKwltb3YJcjQsICMwCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQKKwlub3AKKworCUAgbG9hZCBiYXNlIGFkZHJlc3Mgb2YgVHJhZmZpYyBDb250cm9sbGVyCisJbW92CXI2LCAjVENNSUZfQVNNX0JBU0UgJiAweGZmMDAwMDAwCisJb3JyCXI2LCByNiwgI1RDTUlGX0FTTV9CQVNFICYgMHgwMGZmMDAwMAorCW9ycglyNiwgcjYsICNUQ01JRl9BU01fQkFTRSAmIDB4MDAwMGZmMDAKKworCUAgcHJlcGFyZSB0byBwdXQgU0RSQU0gaW50byBzZWxmLXJlZnJlc2ggbWFudWFsbHkKKwlsZHIJcjcsIFtyNiwgI0VNSUZGX1NEUkFNX0NPTkZJR19BU01fT0ZGU0VUICYgMHhmZl0KKwlvcnIJcjksIHI3LCAjU0VMRl9SRUZSRVNIX01PREUgJiAweGZmMDAwMDAwCisJb3JyCXI5LCByOSwgI1NFTEZfUkVGUkVTSF9NT0RFICYgMHgwMDAwMDBmZgorCXN0cglyOSwgW3I2LCAjRU1JRkZfU0RSQU1fQ09ORklHX0FTTV9PRkZTRVQgJiAweGZmXQorCisJQCBwcmVwYXJlIHRvIHB1dCBFTUlGUyB0byBTbGVlcAorCWxkcglyOCwgW3I2LCAjRU1JRlNfQ09ORklHX0FTTV9PRkZTRVQgJiAweGZmXQorCW9ycglyOSwgcjgsICNJRExFX0VNSUZTX1JFUVVFU1QgJiAweGZmCisJc3RyCXI5LCBbcjYsICNFTUlGU19DT05GSUdfQVNNX09GRlNFVCAmIDB4ZmZdCisKKwlAIGxvYWQgYmFzZSBhZGRyZXNzIG9mIEFSTV9JRExFQ1QxIGFuZCBBUk1fSURMRUNUMgorCW1vdglyNCwgI0NMS0dFTl9SRUdfQVNNX0JBU0UgJiAweGZmMDAwMDAwCisJb3JyCXI0LCByNCwgI0NMS0dFTl9SRUdfQVNNX0JBU0UgJiAweDAwZmYwMDAwCisJb3JyCXI0LCByNCwgI0NMS0dFTl9SRUdfQVNNX0JBU0UgJiAweDAwMDBmZjAwCisKKwlAIHR1cm4gb2ZmIGNsb2NrIGRvbWFpbnMKKwlAIGRvIG5vdCBkaXNhYmxlIFBFUkNLICgweDA0KQorCW1vdglyNSwgI09NQVA3MzBfSURMRUNUMl9TTEVFUF9WQUwgJiAweGZmCisJb3JyCXI1LCByNSwgI09NQVA3MzBfSURMRUNUMl9TTEVFUF9WQUwgJiAweGZmMDAKKwlzdHJoCXI1LCBbcjQsICNBUk1fSURMRUNUMl9BU01fT0ZGU0VUICYgMHhmZl0KKworCUAgcmVxdWVzdCBBUk0gaWRsZQorCW1vdglyMywgI09NQVA3MzBfSURMRUNUMV9TTEVFUF9WQUwgJiAweGZmCisJb3JyCXIzLCByMywgI09NQVA3MzBfSURMRUNUMV9TTEVFUF9WQUwgJiAweGZmMDAKKwlzdHJoCXIzLCBbcjQsICNBUk1fSURMRUNUMV9BU01fT0ZGU0VUICYgMHhmZl0KKworCUAgZGlzYWJsZSBpbnN0cnVjdGlvbiBjYWNoZQorCW1yYwlwMTUsIDAsIHI5LCBjMSwgYzAsIDAKKwliaWMJcjIsIHI5LCAjMHgxMDAwCisJbWNyCXAxNSwgMCwgcjIsIGMxLCBjMCwgMAorCW5vcAorCisvKgorICogTGV0J3Mgd2FpdCBmb3IgdGhlIG5leHQgd2FrZSB1cCBldmVudCB0byB3YWtlIHVzIHVwLiByMCBjYW4ndCBiZQorICogdXNlZCBoZXJlIGJlY2F1c2UgcjAgaG9sZHMgQVJNX0lETEVDVDEKKyAqLworCW1vdglyMiwgIzAKKwltY3IJcDE1LCAwLCByMiwgYzcsIGMwLCA0CQlAIHdhaXQgZm9yIGludGVycnVwdAorLyoKKyAqIG9tYXA3MzBfY3B1X3N1c3BlbmQoKSdzIHJlc3VtZSBwb2ludC4KKyAqCisgKiBJdCB3aWxsIGp1c3Qgc3RhcnQgZXhlY3V0aW5nIGhlcmUsIHNvIHdlJ2xsIHJlc3RvcmUgc3R1ZmYgZnJvbSB0aGUKKyAqIHN0YWNrLgorICovCisJQCByZS1lbmFibGUgSWNhY2hlCisJbWNyCXAxNSwgMCwgcjksIGMxLCBjMCwgMAorCisJQCByZXNldCB0aGUgQVJNX0lETEVDVDEgYW5kIEFSTV9JRExFQ1QyLgorCXN0cmgJcjEsIFtyNCwgI0FSTV9JRExFQ1QyX0FTTV9PRkZTRVQgJiAweGZmXQorCXN0cmgJcjAsIFtyNCwgI0FSTV9JRExFQ1QxX0FTTV9PRkZTRVQgJiAweGZmXQorCisJQCBSZXN0b3JlIEVNSUZGIGNvbnRyb2xzCisJc3RyCXI3LCBbcjYsICNFTUlGRl9TRFJBTV9DT05GSUdfQVNNX09GRlNFVCAmIDB4ZmZdCisJc3RyCXI4LCBbcjYsICNFTUlGU19DT05GSUdfQVNNX09GRlNFVCAmIDB4ZmZdCisKKwlAIHJlc3RvcmUgcmVncyBhbmQgcmV0dXJuCisJbGRtZmQJc3AhLCB7cjAgLSByMTIsIHBjfQorCitFTlRSWShvbWFwNzMwX2NwdV9zdXNwZW5kX3N6KQorCS53b3JkCS4gLSBvbWFwNzMwX2NwdV9zdXNwZW5kCisjZW5kaWYgLyogQ09ORklHX0FSQ0hfT01BUDczMCAqLworCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1WFgKIEVOVFJZKG9tYXAxNTEwX2NwdV9zdXNwZW5kKQogCiAJQCBzYXZlIHJlZ2lzdGVycyBvbiBzdGFjawpAQCAtMjQxLDcgKzM3MCw3IEBACiAKIEVOVFJZKG9tYXAxNTEwX2NwdV9zdXNwZW5kX3N6KQogCS53b3JkCS4gLSBvbWFwMTUxMF9jcHVfc3VzcGVuZAotI2VuZGlmIC8qIENPTkZJR19BUkNIX09NQVAxNTEwICovCisjZW5kaWYgLyogQ09ORklHX0FSQ0hfT01BUDE1WFggKi8KIAogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE2WFgpCiBFTlRSWShvbWFwMTYxMF9jcHVfc3VzcGVuZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9zcmFtLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvc3JhbS5jCmluZGV4IDdhZDY5ZjEuLjc5MmY2NjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9zcmFtLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL3NyYW0uYwpAQCAtMjAsMTAgKzIwLDEzIEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KIAotI2luY2x1ZGUgInNyYW0uaCIKKyNpbmNsdWRlIDxhc20vYXJjaC9zcmFtLmg+CiAKLSNkZWZpbmUgT01BUDFfU1JBTV9CQVNFCQkweGQwMDAwMDAwCi0jZGVmaW5lIE9NQVAxX1NSQU1fU1RBUlQJMHgyMDAwMDAwMAorI2RlZmluZSBPTUFQMV9TUkFNX1BBCQkweDIwMDAwMDAwCisjZGVmaW5lIE9NQVAxX1NSQU1fVkEJCTB4ZDAwMDAwMDAKKyNkZWZpbmUgT01BUDJfU1JBTV9QQQkJMHg0MDIwMDAwMAorI2RlZmluZSBPTUFQMl9TUkFNX1ZBCQkweGQwMDAwMDAwCisKICNkZWZpbmUgU1JBTV9CT09UTE9BREVSX1NaCTB4ODAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgb21hcF9zcmFtX2Jhc2U7CkBAIC0zMSwzNyArMzQsNDAgQEAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIG9tYXBfc3JhbV9jZWlsOwogCiAvKgotICogVGhlIGFtb3VudCBvZiBTUkFNIGRlcGVuZHMgb24gdGhlIGNvcmUgdHlwZToKLSAqIDczMCA9IDIwMEssIDE1MTAgPSA1MTJLLCA1OTEyID0gMjU2SywgMTYxMCA9IDE2SywgMTcxMCA9IDE2SworICogVGhlIGFtb3VudCBvZiBTUkFNIGRlcGVuZHMgb24gdGhlIGNvcmUgdHlwZS4KICAqIE5vdGUgdGhhdCB3ZSBjYW5ub3QgdHJ5IHRvIHRlc3QgZm9yIFNSQU0gaGVyZSBiZWNhdXNlIHdyaXRlcwogICogdG8gc2VjdXJlIFNSQU0gd2lsbCBoYW5nIHRoZSBzeXN0ZW0uIEFsc28gdGhlIFNSQU0gaXMgbm90CiAgKiB5ZXQgbWFwcGVkIGF0IHRoaXMgcG9pbnQuCiAgKi8KIHZvaWQgX19pbml0IG9tYXBfZGV0ZWN0X3NyYW0odm9pZCkKIHsKLQlvbWFwX3NyYW1fYmFzZSA9IE9NQVAxX1NSQU1fQkFTRTsKKwlpZiAoIWNwdV9pc19vbWFwMjR4eCgpKQorCQlvbWFwX3NyYW1fYmFzZSA9IE9NQVAxX1NSQU1fVkE7CisJZWxzZQorCQlvbWFwX3NyYW1fYmFzZSA9IE9NQVAyX1NSQU1fVkE7CiAKIAlpZiAoY3B1X2lzX29tYXA3MzAoKSkKLQkJb21hcF9zcmFtX3NpemUgPSAweDMyMDAwOwotCWVsc2UgaWYgKGNwdV9pc19vbWFwMTUxMCgpKQotCQlvbWFwX3NyYW1fc2l6ZSA9IDB4ODAwMDA7CisJCW9tYXBfc3JhbV9zaXplID0gMHgzMjAwMDsJLyogMjAwSyAqLworCWVsc2UgaWYgKGNwdV9pc19vbWFwMTV4eCgpKQorCQlvbWFwX3NyYW1fc2l6ZSA9IDB4MzAwMDA7CS8qIDE5MksgKi8KIAllbHNlIGlmIChjcHVfaXNfb21hcDE2MTAoKSB8fCBjcHVfaXNfb21hcDE2MjEoKSB8fCBjcHVfaXNfb21hcDE3MTAoKSkKLQkJb21hcF9zcmFtX3NpemUgPSAweDQwMDA7CisJCW9tYXBfc3JhbV9zaXplID0gMHg0MDAwOwkvKiAxNksgKi8KIAllbHNlIGlmIChjcHVfaXNfb21hcDE2MTEoKSkKLQkJb21hcF9zcmFtX3NpemUgPSAweDNlODAwOworCQlvbWFwX3NyYW1fc2l6ZSA9IDB4M2U4MDA7CS8qIDI1MEsgKi8KKwllbHNlIGlmIChjcHVfaXNfb21hcDI0MjAoKSkKKwkJb21hcF9zcmFtX3NpemUgPSAweGEwMDE0OwkvKiA2NDBLICovCiAJZWxzZSB7CiAJCXByaW50ayhLRVJOX0VSUiAiQ291bGQgbm90IGRldGVjdCBTUkFNIHNpemVcbiIpOwogCQlvbWFwX3NyYW1fc2l6ZSA9IDB4NDAwMDsKIAl9CiAKLQlwcmludGsoS0VSTl9JTkZPICJTUkFNIHNpemU6IDB4JWx4XG4iLCBvbWFwX3NyYW1fc2l6ZSk7CiAJb21hcF9zcmFtX2NlaWwgPSBvbWFwX3NyYW1fYmFzZSArIG9tYXBfc3JhbV9zaXplOwogfQogCiBzdGF0aWMgc3RydWN0IG1hcF9kZXNjIG9tYXBfc3JhbV9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKIAl7CS8qIC5sZW5ndGggZ2V0cyBmaWxsZWQgaW4gYXQgcnVudGltZSAqLwotCQkudmlydHVhbAk9IE9NQVAxX1NSQU1fQkFTRSwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKE9NQVAxX1NSQU1fU1RBUlQpLAorCQkudmlydHVhbAk9IE9NQVAxX1NSQU1fVkEsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihPTUFQMV9TUkFNX1BBKSwKIAkJLnR5cGUJCT0gTVRfREVWSUNFCiAJfQogfTsKQEAgLTc2LDEwICs4MiwxOSBAQAogCWlmIChvbWFwX3NyYW1fc2l6ZSA9PSAwKQogCQlyZXR1cm47CiAKKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKKwkJb21hcF9zcmFtX2lvX2Rlc2NbMF0udmlydHVhbCA9IE9NQVAyX1NSQU1fVkE7CisJCW9tYXBfc3JhbV9pb19kZXNjWzBdLnBmbiA9IF9fcGh5c190b19wZm4oT01BUDJfU1JBTV9QQSk7CisJfQorCiAJb21hcF9zcmFtX2lvX2Rlc2NbMF0ubGVuZ3RoID0gKG9tYXBfc3JhbV9zaXplICsgUEFHRV9TSVpFLTEpL1BBR0VfU0laRTsKIAlvbWFwX3NyYW1faW9fZGVzY1swXS5sZW5ndGggKj0gUEFHRV9TSVpFOwogCWlvdGFibGVfaW5pdChvbWFwX3NyYW1faW9fZGVzYywgQVJSQVlfU0laRShvbWFwX3NyYW1faW9fZGVzYykpOwogCisJcHJpbnRrKEtFUk5fSU5GTyAiU1JBTTogTWFwcGVkIHBhIDB4JTA4bHggdG8gdmEgMHglMDhseCBzaXplOiAweCVseFxuIiwKKwkgICAgICAgb21hcF9zcmFtX2lvX2Rlc2NbMF0ucGZuLCBvbWFwX3NyYW1faW9fZGVzY1swXS52aXJ0dWFsLAorCSAgICAgICBvbWFwX3NyYW1faW9fZGVzY1swXS5sZW5ndGgpOworCiAJLyoKIAkgKiBMb29rcyBsaWtlIHdlIG5lZWQgdG8gcHJlc2VydmUgc29tZSBib290bG9hZGVyIGNvZGUgYXQgdGhlCiAJICogYmVnaW5uaW5nIG9mIFNSQU0gZm9yIGp1bXBpbmcgdG8gZmxhc2ggZm9yIHJlYm9vdCB0byB3b3JrLi4uCkBAIC04OCwxNiArMTAzLDYgQEAKIAkgICAgICAgb21hcF9zcmFtX3NpemUgLSBTUkFNX0JPT1RMT0FERVJfU1opOwogfQogCi1zdGF0aWMgdm9pZCAoKl9vbWFwX3NyYW1fcmVwcm9ncmFtX2Nsb2NrKSh1MzIgZHBsbGN0bCwgdTMyIGNrY3RsKSA9IE5VTEw7Ci0KLXZvaWQgb21hcF9zcmFtX3JlcHJvZ3JhbV9jbG9jayh1MzIgZHBsbGN0bCwgdTMyIGNrY3RsKQotewotCWlmIChfb21hcF9zcmFtX3JlcHJvZ3JhbV9jbG9jayA9PSBOVUxMKQotCQlwYW5pYygiQ2Fubm90IHVzZSBTUkFNIik7Ci0KLQlyZXR1cm4gX29tYXBfc3JhbV9yZXByb2dyYW1fY2xvY2soZHBsbGN0bCwgY2tjdGwpOwotfQotCiB2b2lkICogb21hcF9zcmFtX3B1c2godm9pZCAqIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpCiB7CiAJaWYgKHNpemUgPiAob21hcF9zcmFtX2NlaWwgLSAob21hcF9zcmFtX2Jhc2UgKyBTUkFNX0JPT1RMT0FERVJfU1opKSkgewpAQCAtMTExLDEwICsxMTYsOTQgQEAKIAlyZXR1cm4gKHZvaWQgKilvbWFwX3NyYW1fY2VpbDsKIH0KIAotdm9pZCBfX2luaXQgb21hcF9zcmFtX2luaXQodm9pZCkKK3N0YXRpYyB2b2lkIG9tYXBfc3JhbV9lcnJvcih2b2lkKQoreworCXBhbmljKCJVbmluaXRpYWxpemVkIFNSQU0gZnVuY3Rpb25cbiIpOworfQorCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDEKKworc3RhdGljIHZvaWQgKCpfb21hcF9zcmFtX3JlcHJvZ3JhbV9jbG9jaykodTMyIGRwbGxjdGwsIHUzMiBja2N0bCk7CisKK3ZvaWQgb21hcF9zcmFtX3JlcHJvZ3JhbV9jbG9jayh1MzIgZHBsbGN0bCwgdTMyIGNrY3RsKQoreworCWlmICghX29tYXBfc3JhbV9yZXByb2dyYW1fY2xvY2spCisJCW9tYXBfc3JhbV9lcnJvcigpOworCisJcmV0dXJuIF9vbWFwX3NyYW1fcmVwcm9ncmFtX2Nsb2NrKGRwbGxjdGwsIGNrY3RsKTsKK30KKworaW50IF9faW5pdCBvbWFwMV9zcmFtX2luaXQodm9pZCkKK3sKKwlfb21hcF9zcmFtX3JlcHJvZ3JhbV9jbG9jayA9IG9tYXBfc3JhbV9wdXNoKHNyYW1fcmVwcm9ncmFtX2Nsb2NrLAorCQkJCQkJICAgIHNyYW1fcmVwcm9ncmFtX2Nsb2NrX3N6KTsKKworCXJldHVybiAwOworfQorCisjZWxzZQorI2RlZmluZSBvbWFwMV9zcmFtX2luaXQoKQlkbyB7fSB3aGlsZSAoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDIKKworc3RhdGljIHZvaWQgKCpfb21hcDJfc3JhbV9kZHJfaW5pdCkodTMyICpzbG93X2RsbF9jdHJsLCB1MzIgZmFzdF9kbGxfY3RybCwKKwkJCSAgICAgIHUzMiBiYXNlX2NzLCB1MzIgZm9yY2VfdW5sb2NrKTsKKwordm9pZCBvbWFwMl9zcmFtX2Rkcl9pbml0KHUzMiAqc2xvd19kbGxfY3RybCwgdTMyIGZhc3RfZGxsX2N0cmwsCisJCSAgIHUzMiBiYXNlX2NzLCB1MzIgZm9yY2VfdW5sb2NrKQoreworCWlmICghX29tYXAyX3NyYW1fZGRyX2luaXQpCisJCW9tYXBfc3JhbV9lcnJvcigpOworCisJcmV0dXJuIF9vbWFwMl9zcmFtX2Rkcl9pbml0KHNsb3dfZGxsX2N0cmwsIGZhc3RfZGxsX2N0cmwsCisJCQkJICAgIGJhc2VfY3MsIGZvcmNlX3VubG9jayk7Cit9CisKK3N0YXRpYyB2b2lkICgqX29tYXAyX3NyYW1fcmVwcm9ncmFtX3NkcmMpKHUzMiBwZXJmX2xldmVsLCB1MzIgZGxsX3ZhbCwKKwkJCQkJICB1MzIgbWVtX3R5cGUpOworCit2b2lkIG9tYXAyX3NyYW1fcmVwcm9ncmFtX3NkcmModTMyIHBlcmZfbGV2ZWwsIHUzMiBkbGxfdmFsLCB1MzIgbWVtX3R5cGUpCit7CisJaWYgKCFfb21hcDJfc3JhbV9yZXByb2dyYW1fc2RyYykKKwkJb21hcF9zcmFtX2Vycm9yKCk7CisKKwlyZXR1cm4gX29tYXAyX3NyYW1fcmVwcm9ncmFtX3NkcmMocGVyZl9sZXZlbCwgZGxsX3ZhbCwgbWVtX3R5cGUpOworfQorCitzdGF0aWMgdTMyICgqX29tYXAyX3NldF9wcmNtKSh1MzIgZHBsbF9jdHJsX3ZhbCwgdTMyIHNkcmNfcmZyX3ZhbCwgaW50IGJ5cGFzcyk7CisKK3UzMiBvbWFwMl9zZXRfcHJjbSh1MzIgZHBsbF9jdHJsX3ZhbCwgdTMyIHNkcmNfcmZyX3ZhbCwgaW50IGJ5cGFzcykKK3sKKwlpZiAoIV9vbWFwMl9zZXRfcHJjbSkKKwkJb21hcF9zcmFtX2Vycm9yKCk7CisKKwlyZXR1cm4gX29tYXAyX3NldF9wcmNtKGRwbGxfY3RybF92YWwsIHNkcmNfcmZyX3ZhbCwgYnlwYXNzKTsKK30KKworaW50IF9faW5pdCBvbWFwMl9zcmFtX2luaXQodm9pZCkKK3sKKwlfb21hcDJfc3JhbV9kZHJfaW5pdCA9IG9tYXBfc3JhbV9wdXNoKHNyYW1fZGRyX2luaXQsIHNyYW1fZGRyX2luaXRfc3opOworCisJX29tYXAyX3NyYW1fcmVwcm9ncmFtX3NkcmMgPSBvbWFwX3NyYW1fcHVzaChzcmFtX3JlcHJvZ3JhbV9zZHJjLAorCQkJCQkJICAgIHNyYW1fcmVwcm9ncmFtX3NkcmNfc3opOworCV9vbWFwMl9zZXRfcHJjbSA9IG9tYXBfc3JhbV9wdXNoKHNyYW1fc2V0X3ByY20sIHNyYW1fc2V0X3ByY21fc3opOworCisJcmV0dXJuIDA7Cit9CisjZWxzZQorI2RlZmluZSBvbWFwMl9zcmFtX2luaXQoKQlkbyB7fSB3aGlsZSAoMCkKKyNlbmRpZgorCitpbnQgX19pbml0IG9tYXBfc3JhbV9pbml0KHZvaWQpCiB7CiAJb21hcF9kZXRlY3Rfc3JhbSgpOwogCW9tYXBfbWFwX3NyYW0oKTsKLQlfb21hcF9zcmFtX3JlcHJvZ3JhbV9jbG9jayA9IG9tYXBfc3JhbV9wdXNoKHNyYW1fcmVwcm9ncmFtX2Nsb2NrLAotCQkJCQkJICAgIHNyYW1fcmVwcm9ncmFtX2Nsb2NrX3N6KTsKKworCWlmICghY3B1X2lzX29tYXAyNHh4KCkpCisJCW9tYXAxX3NyYW1faW5pdCgpOworCWVsc2UKKwkJb21hcDJfc3JhbV9pbml0KCk7CisKKwlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9zcmFtLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvc3JhbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MTk4NGVmLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9zcmFtLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0vKgotICogbGludXgvYXJjaC9hcm0vcGxhdC1vbWFwL3NyYW0uaAotICoKLSAqIEludGVyZmFjZSBmb3IgZnVuY3Rpb25zIHRoYXQgbmVlZCB0byBiZSBydW4gaW4gaW50ZXJuYWwgU1JBTQotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLQotI2lmbmRlZiBfX0FSQ0hfQVJNX09NQVBfU1JBTV9ICi0jZGVmaW5lIF9fQVJDSF9BUk1fT01BUF9TUkFNX0gKLQotZXh0ZXJuIHZvaWQgKiBvbWFwX3NyYW1fcHVzaCh2b2lkICogc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7Ci1leHRlcm4gdm9pZCBvbWFwX3NyYW1fcmVwcm9ncmFtX2Nsb2NrKHUzMiBkcGxsY3RsLCB1MzIgY2tjdGwpOwotCi0vKiBEbyBub3QgdXNlIHRoZXNlICovCi1leHRlcm4gdm9pZCBzcmFtX3JlcHJvZ3JhbV9jbG9jayh1MzIgY2tjdGwsIHUzMiBkcGxsY3RsKTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIHNyYW1fcmVwcm9ncmFtX2Nsb2NrX3N6OwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC91c2IuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC91c2IuYwppbmRleCAyMDVlMmQwLi4wMGFmYzdhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvdXNiLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL3VzYi5jCkBAIC05MSw2ICs5MSw4IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVBfT1RHKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNVhYKQorCiBzdGF0aWMgdTMyIF9faW5pdCBvbWFwX3VzYjBfaW5pdCh1bnNpZ25lZCBud2lyZXMsIHVuc2lnbmVkIGlzX2RldmljZSkKIHsKIAl1MzIJc3lzY29uMSA9IDA7CkBAIC0yNzEsNiArMjczLDggQEAKIAlyZXR1cm4gc3lzY29uMSA8PCAyNDsKIH0KIAorI2VuZGlmCisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKICNpZglkZWZpbmVkKENPTkZJR19VU0JfR0FER0VUX09NQVApIHx8IFwKQEAgLTQ5NCw3ICs0OTgsNyBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0jaWZkZWYJQ09ORklHX0FSQ0hfT01BUDE1MTAKKyNpZmRlZglDT05GSUdfQVJDSF9PTUFQMTVYWAogCiAjZGVmaW5lIFVMUERfRFBMTF9DVFJMX1JFRwlfX1JFRzE2KFVMUERfRFBMTF9DVFJMKQogI2RlZmluZSBEUExMX0lPQgkJKDEgPDwgMTMpCkBAIC01MDcsNyArNTExLDYgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IG9tYXBfMTUxMF91c2JfaW5pdChzdHJ1Y3Qgb21hcF91c2JfY29uZmlnICpjb25maWcpCiB7Ci0JaW50IHN0YXR1czsKIAl1bnNpZ25lZCBpbnQgdmFsOwogCiAJb21hcF91c2IwX2luaXQoY29uZmlnLT5waW5zWzBdLCBpc191c2IwX2RldmljZShjb25maWcpKTsKQEAgLTUzOSw2ICs1NDIsOCBAQAogCiAjaWZkZWYJQ09ORklHX1VTQl9HQURHRVRfT01BUAogCWlmIChjb25maWctPnJlZ2lzdGVyX2RldikgeworCQlpbnQgc3RhdHVzOworCiAJCXVkY19kZXZpY2UuZGV2LnBsYXRmb3JtX2RhdGEgPSBjb25maWc7CiAJCXN0YXR1cyA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmdWRjX2RldmljZSk7CiAJCWlmIChzdGF0dXMpCkBAIC01NDksNiArNTU0LDggQEAKIAogI2lmCWRlZmluZWQoQ09ORklHX1VTQl9PSENJX0hDRCkgfHwgZGVmaW5lZChDT05GSUdfVVNCX09IQ0lfSENEX01PRFVMRSkKIAlpZiAoY29uZmlnLT5yZWdpc3Rlcl9ob3N0KSB7CisJCWludCBzdGF0dXM7CisKIAkJb2hjaV9kZXZpY2UuZGV2LnBsYXRmb3JtX2RhdGEgPSBjb25maWc7CiAJCXN0YXR1cyA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmb2hjaV9kZXZpY2UpOwogCQlpZiAoc3RhdHVzKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0yNi9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9hcm0yNi9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDllYjk5NjQuLjE1ODMzYTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtMjYva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL2FybTI2L2tlcm5lbC9wcm9jZXNzLmMKQEAgLTc0LDE1ICs3NCwxMyBAQAogdm9pZCBjcHVfaWRsZSh2b2lkKQogewogCS8qIGVuZGxlc3MgaWRsZSBsb29wIHdpdGggbm8gcHJpb3JpdHkgYXQgYWxsICovCi0JcHJlZW1wdF9kaXNhYmxlKCk7CiAJd2hpbGUgKDEpIHsKLQkJd2hpbGUgKCFuZWVkX3Jlc2NoZWQoKSkgewotCQkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQkJCWlmICghbmVlZF9yZXNjaGVkKCkgJiYgIWhsdF9jb3VudGVyKQotCQkJCWxvY2FsX2lycV9lbmFibGUoKTsKLQkJfQorCQl3aGlsZSAoIW5lZWRfcmVzY2hlZCgpKQorCQkJY3B1X3JlbGF4KCk7CisJCXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWQoKTsKKwkJc2NoZWR1bGUoKTsKKwkJcHJlZW1wdF9kaXNhYmxlKCk7CiAJfQotCXNjaGVkdWxlKCk7CiB9CiAKIHN0YXRpYyBjaGFyIHJlYm9vdF9tb2RlID0gJ2gnOwpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjEwL2RyaXZlcnMvcGNmODU2My5jIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2RyaXZlcnMvcGNmODU2My5jCmluZGV4IDIwMWY0YzkuLmYyYzU1NzQgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9kcml2ZXJzL3BjZjg1NjMuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MTAvZHJpdmVycy9wY2Y4NTYzLmMKQEAgLTE5LDcgKzE5LDYgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MTAva2VybmVsL2Zhc3R0aW1lci5jIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC9mYXN0dGltZXIuYwppbmRleCAwOTRmZjQ1Li5jYWMwNWE1IDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MTAva2VybmVsL2Zhc3R0aW1lci5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9rZXJuZWwvZmFzdHRpbWVyLmMKQEAgLTExMiw3ICsxMTIsNiBAQAogI2luY2x1ZGUgPGFzbS9ydGMuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KIAogI2luY2x1ZGUgPGFzbS9hcmNoL3N2aW50by5oPgogI2luY2x1ZGUgPGFzbS9mYXN0dGltZXIuaD4KZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9kcml2ZXJzL25hbmRmbGFzaC5jIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvbmFuZGZsYXNoLmMKaW5kZXggZmMyYTYxOS4uOTNkZGVhNGQgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9kcml2ZXJzL25hbmRmbGFzaC5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9kcml2ZXJzL25hbmRmbGFzaC5jCkBAIC0xNCw3ICsxNCw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9kcml2ZXJzL3BjZjg1NjMuYyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9kcml2ZXJzL3BjZjg1NjMuYwppbmRleCBmODk0NTgwLi5kNzg4YmRhIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9wY2Y4NTYzLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvcGNmODU2My5jCkBAIC0xOCw3ICsxOCw2IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9zbXAuYyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvc21wLmMKaW5kZXggOTU3ZjU1MS4uMTM4NjdmNCAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9zbXAuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL3NtcC5jCkBAIC0xNjEsNiArMTYxLDcgQEAKIAlSRUdfV1IoaW50cl92ZWN0LCBpcnFfcmVnc1tjcHVdLCByd19tYXNrLCB2ZWN0X21hc2spOwogCXVubWFza19pcnEoSVBJX0lOVFJfVkVDVCk7CiAJdW5tYXNrX2lycShUSU1FUl9JTlRSX1ZFQ1QpOworCXByZWVtcHRfZGlzYWJsZSgpOwogCWxvY2FsX2lycV9lbmFibGUoKTsKIAogCWNwdV9zZXQoY3B1LCBjcHVfb25saW5lX21hcCk7CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvY3Jpcy9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDk0OWEwZTQuLjdjODBhZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvY3Jpcy9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0yMTgsNyArMjE4LDkgQEAKIAkJCQlpZGxlID0gZGVmYXVsdF9pZGxlOwogCQkJaWRsZSgpOwogCQl9CisJCXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWQoKTsKIAkJc2NoZWR1bGUoKTsKKwkJcHJlZW1wdF9kaXNhYmxlKCk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL2Zydi9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9mcnYva2VybmVsL3Byb2Nlc3MuYwppbmRleCAzMDAxYjgyLi41NGE0NTIxIDEwMDY0NAotLS0gYS9hcmNoL2Zydi9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvZnJ2L2tlcm5lbC9wcm9jZXNzLmMKQEAgLTc3LDE2ICs3NywyMCBAQAogICovCiB2b2lkIGNwdV9pZGxlKHZvaWQpCiB7CisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwogCS8qIGVuZGxlc3MgaWRsZSBsb29wIHdpdGggbm8gcHJpb3JpdHkgYXQgYWxsICovCiAJd2hpbGUgKDEpIHsKIAkJd2hpbGUgKCFuZWVkX3Jlc2NoZWQoKSkgewotCQkJaXJxX3N0YXRbc21wX3Byb2Nlc3Nvcl9pZCgpXS5pZGxlX3RpbWVzdGFtcCA9IGppZmZpZXM7CisJCQlpcnFfc3RhdFtjcHVdLmlkbGVfdGltZXN0YW1wID0gamlmZmllczsKIAogCQkJaWYgKCFmcnZfZG1hX2lucHJvZ3Jlc3MgJiYgaWRsZSkKIAkJCQlpZGxlKCk7CiAJCX0KIAorCQlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7CiAJCXNjaGVkdWxlKCk7CisJCXByZWVtcHRfZGlzYWJsZSgpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9oODMwMC9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDI3ZjFmY2UuLmZlMjFhZGYgMTAwNjQ0Ci0tLSBhL2FyY2gvaDgzMDAva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL2g4MzAwL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTUzLDIyICs1MywxOCBAQAogI2lmICFkZWZpbmVkKENPTkZJR19IODMwMEhfU0lNKSAmJiAhZGVmaW5lZChDT05GSUdfSDhTX1NJTSkKIHZvaWQgZGVmYXVsdF9pZGxlKHZvaWQpCiB7Ci0Jd2hpbGUoMSkgewotCQlpZiAoIW5lZWRfcmVzY2hlZCgpKSB7Ci0JCQlsb2NhbF9pcnFfZW5hYmxlKCk7Ci0JCQlfX2FzbV9fKCJzbGVlcCIpOwotCQkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQkJfQotCQlzY2hlZHVsZSgpOwotCX0KKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCWlmICghbmVlZF9yZXNjaGVkKCkpIHsKKwkJbG9jYWxfaXJxX2VuYWJsZSgpOworCQkvKiBYWFg6IHJhY2UgaGVyZSEgV2hhdCBpZiBuZWVkX3Jlc2NoZWQoKSBnZXRzIHNldCBub3c/ICovCisJCV9fYXNtX18oInNsZWVwIik7CisJfSBlbHNlCisJCWxvY2FsX2lycV9lbmFibGUoKTsKIH0KICNlbHNlCiB2b2lkIGRlZmF1bHRfaWRsZSh2b2lkKQogewotCXdoaWxlKDEpIHsKLQkJaWYgKG5lZWRfcmVzY2hlZCgpKQotCQkJc2NoZWR1bGUoKTsKLQl9CisJY3B1X3JlbGF4KCk7CiB9CiAjZW5kaWYKIHZvaWQgKCppZGxlKSh2b2lkKSA9IGRlZmF1bHRfaWRsZTsKQEAgLTgxLDcgKzc3LDEzIEBACiAgKi8KIHZvaWQgY3B1X2lkbGUodm9pZCkKIHsKLQlpZGxlKCk7CisJd2hpbGUgKDEpIHsKKwkJd2hpbGUgKCFuZWVkX3Jlc2NoZWQoKSkKKwkJCWlkbGUoKTsKKwkJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOworCQlzY2hlZHVsZSgpOworCQlwcmVlbXB0X2Rpc2FibGUoKTsKKwl9CiB9CiAKIHZvaWQgbWFjaGluZV9yZXN0YXJ0KGNoYXIgKiBfX3VudXNlZCkKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvYXBtLmMgYi9hcmNoL2kzODYva2VybmVsL2FwbS5jCmluZGV4IDg2ZTgwYzUuLjAwMzU0OGIgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvYXBtLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9hcG0uYwpAQCAtNzY5LDggKzc2OSwyNiBAQAogc3RhdGljIGludCBhcG1fZG9faWRsZSh2b2lkKQogewogCXUzMgllYXg7CisJdTgJcmV0ID0gMDsKKwlpbnQJaWRsZWQgPSAwOworCWludAlwb2xsaW5nOwogCi0JaWYgKGFwbV9iaW9zX2NhbGxfc2ltcGxlKEFQTV9GVU5DX0lETEUsIDAsIDAsICZlYXgpKSB7CisJcG9sbGluZyA9IHRlc3RfdGhyZWFkX2ZsYWcoVElGX1BPTExJTkdfTlJGTEFHKTsKKwlpZiAocG9sbGluZykgeworCQljbGVhcl90aHJlYWRfZmxhZyhUSUZfUE9MTElOR19OUkZMQUcpOworCQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOworCX0KKwlpZiAoIW5lZWRfcmVzY2hlZCgpKSB7CisJCWlkbGVkID0gMTsKKwkJcmV0ID0gYXBtX2Jpb3NfY2FsbF9zaW1wbGUoQVBNX0ZVTkNfSURMRSwgMCwgMCwgJmVheCk7CisJfQorCWlmIChwb2xsaW5nKQorCQlzZXRfdGhyZWFkX2ZsYWcoVElGX1BPTExJTkdfTlJGTEFHKTsKKworCWlmICghaWRsZWQpCisJCXJldHVybiAwOworCisJaWYgKHJldCkgewogCQlzdGF0aWMgdW5zaWduZWQgbG9uZyB0OwogCiAJCS8qIFRoaXMgYWx3YXlzIGZhaWxzIG9uIHNvbWUgU01QIGJvYXJkcyBydW5uaW5nIFVQIGtlcm5lbHMuCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDdhMTRmZGYuLjFjYjI2MWYgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvcHJvY2Vzcy5jCkBAIC05OSwxNCArOTksMjIgQEAKICAqLwogdm9pZCBkZWZhdWx0X2lkbGUodm9pZCkKIHsKKwlsb2NhbF9pcnFfZW5hYmxlKCk7CisKIAlpZiAoIWhsdF9jb3VudGVyICYmIGJvb3RfY3B1X2RhdGEuaGx0X3dvcmtzX29rKSB7Ci0JCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0JCWlmICghbmVlZF9yZXNjaGVkKCkpCi0JCQlzYWZlX2hhbHQoKTsKLQkJZWxzZQotCQkJbG9jYWxfaXJxX2VuYWJsZSgpOworCQljbGVhcl90aHJlYWRfZmxhZyhUSUZfUE9MTElOR19OUkZMQUcpOworCQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOworCQl3aGlsZSAoIW5lZWRfcmVzY2hlZCgpKSB7CisJCQlsb2NhbF9pcnFfZGlzYWJsZSgpOworCQkJaWYgKCFuZWVkX3Jlc2NoZWQoKSkKKwkJCQlzYWZlX2hhbHQoKTsKKwkJCWVsc2UKKwkJCQlsb2NhbF9pcnFfZW5hYmxlKCk7CisJCX0KKwkJc2V0X3RocmVhZF9mbGFnKFRJRl9QT0xMSU5HX05SRkxBRyk7CiAJfSBlbHNlIHsKLQkJY3B1X3JlbGF4KCk7CisJCXdoaWxlICghbmVlZF9yZXNjaGVkKCkpCisJCQljcHVfcmVsYXgoKTsKIAl9CiB9CiAjaWZkZWYgQ09ORklHX0FQTV9NT0RVTEUKQEAgLTEyMCwyOSArMTI4LDE0IEBACiAgKi8KIHN0YXRpYyB2b2lkIHBvbGxfaWRsZSAodm9pZCkKIHsKLQlpbnQgb2xkdmFsOwotCiAJbG9jYWxfaXJxX2VuYWJsZSgpOwogCi0JLyoKLQkgKiBEZWFsIHdpdGggYW5vdGhlciBDUFUganVzdCBoYXZpbmcgY2hvc2VuIGEgdGhyZWFkIHRvCi0JICogcnVuIGhlcmU6Ci0JICovCi0Jb2xkdmFsID0gdGVzdF9hbmRfY2xlYXJfdGhyZWFkX2ZsYWcoVElGX05FRURfUkVTQ0hFRCk7Ci0KLQlpZiAoIW9sZHZhbCkgewotCQlzZXRfdGhyZWFkX2ZsYWcoVElGX1BPTExJTkdfTlJGTEFHKTsKLQkJYXNtIHZvbGF0aWxlKAotCQkJIjI6IgotCQkJInRlc3RsICUwLCAlMTsiCi0JCQkicmVwOyBub3A7IgotCQkJImplIDJiOyIKLQkJCTogOiAiaSIoX1RJRl9ORUVEX1JFU0NIRUQpLCAibSIgKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+ZmxhZ3MpKTsKLQotCQljbGVhcl90aHJlYWRfZmxhZyhUSUZfUE9MTElOR19OUkZMQUcpOwotCX0gZWxzZSB7Ci0JCXNldF9uZWVkX3Jlc2NoZWQoKTsKLQl9CisJYXNtIHZvbGF0aWxlKAorCQkiMjoiCisJCSJ0ZXN0bCAlMCwgJTE7IgorCQkicmVwOyBub3A7IgorCQkiamUgMmI7IgorCQk6IDogImkiKF9USUZfTkVFRF9SRVNDSEVEKSwgIm0iIChjdXJyZW50X3RocmVhZF9pbmZvKCktPmZsYWdzKSk7CiB9CiAKICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKQEAgLTE3OSw3ICsxNzIsOSBAQAogICovCiB2b2lkIGNwdV9pZGxlKHZvaWQpCiB7Ci0JaW50IGNwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7CisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKworCXNldF90aHJlYWRfZmxhZyhUSUZfUE9MTElOR19OUkZMQUcpOwogCiAJLyogZW5kbGVzcyBpZGxlIGxvb3Agd2l0aCBubyBwcmlvcml0eSBhdCBhbGwgKi8KIAl3aGlsZSAoMSkgewpAQCAtMjAxLDcgKzE5Niw5IEBACiAJCQlfX2dldF9jcHVfdmFyKGlycV9zdGF0KS5pZGxlX3RpbWVzdGFtcCA9IGppZmZpZXM7CiAJCQlpZGxlKCk7CiAJCX0KKwkJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOwogCQlzY2hlZHVsZSgpOworCQlwcmVlbXB0X2Rpc2FibGUoKTsKIAl9CiB9CiAKQEAgLTI0NCwxNSArMjQxLDEyIEBACiB7CiAJbG9jYWxfaXJxX2VuYWJsZSgpOwogCi0JaWYgKCFuZWVkX3Jlc2NoZWQoKSkgewotCQlzZXRfdGhyZWFkX2ZsYWcoVElGX1BPTExJTkdfTlJGTEFHKTsKLQkJZG8gewotCQkJX19tb25pdG9yKCh2b2lkICopJmN1cnJlbnRfdGhyZWFkX2luZm8oKS0+ZmxhZ3MsIDAsIDApOwotCQkJaWYgKG5lZWRfcmVzY2hlZCgpKQotCQkJCWJyZWFrOwotCQkJX19td2FpdCgwLCAwKTsKLQkJfSB3aGlsZSAoIW5lZWRfcmVzY2hlZCgpKTsKLQkJY2xlYXJfdGhyZWFkX2ZsYWcoVElGX1BPTExJTkdfTlJGTEFHKTsKKwl3aGlsZSAoIW5lZWRfcmVzY2hlZCgpKSB7CisJCV9fbW9uaXRvcigodm9pZCAqKSZjdXJyZW50X3RocmVhZF9pbmZvKCktPmZsYWdzLCAwLCAwKTsKKwkJc21wX21iKCk7CisJCWlmIChuZWVkX3Jlc2NoZWQoKSkKKwkJCWJyZWFrOworCQlfX213YWl0KDAsIDApOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9pMzg2L2tlcm5lbC9zZXR1cC5jCmluZGV4IGI0OGFjNjM1Li5mZGZjYjBjIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9zZXR1cC5jCkBAIC0xMjksOSArMTI5LDcgQEAKIEVYUE9SVF9TWU1CT0woZHJpdmVfaW5mbyk7CiAjZW5kaWYKIHN0cnVjdCBzY3JlZW5faW5mbyBzY3JlZW5faW5mbzsKLSNpZmRlZiBDT05GSUdfVlQKIEVYUE9SVF9TWU1CT0woc2NyZWVuX2luZm8pOwotI2VuZGlmCiBzdHJ1Y3QgYXBtX2luZm8gYXBtX2luZm87CiBFWFBPUlRfU1lNQk9MKGFwbV9pbmZvKTsKIHN0cnVjdCBzeXNfZGVzY190YWJsZV9zdHJ1Y3QgewpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9zbXBib290LmMgYi9hcmNoL2kzODYva2VybmVsL3NtcGJvb3QuYwppbmRleCA0N2VjNzY3Li5iYzVhOWQ5IDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL3NtcGJvb3QuYworKysgYi9hcmNoL2kzODYva2VybmVsL3NtcGJvb3QuYwpAQCAtNDg1LDYgKzQ4NSw3IEBACiAJICogdGhpbmdzIGRvbmUgaGVyZSB0byB0aGUgbW9zdCBuZWNlc3NhcnkgdGhpbmdzLgogCSAqLwogCWNwdV9pbml0KCk7CisJcHJlZW1wdF9kaXNhYmxlKCk7CiAJc21wX2NhbGxpbigpOwogCXdoaWxlICghY3B1X2lzc2V0KHNtcF9wcm9jZXNzb3JfaWQoKSwgc21wX2NvbW1lbmNlZF9tYXNrKSkKIAkJcmVwX25vcCgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L3BjaS9maXh1cC5jIGIvYXJjaC9pMzg2L3BjaS9maXh1cC5jCmluZGV4IDM5ODQyMjYuLmVlYjFiMWYyZCAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L3BjaS9maXh1cC5jCisrKyBiL2FyY2gvaTM4Ni9wY2kvZml4dXAuYwpAQCAtNDMzLDkgKzQzMyw4IEBACiAJCXJldHVybjsgLyogb25seSBhcHBsaWVzIHRvIGNlcnRhaW4gVG9zaGliYXMgKHNvIGZhcikgKi8KIAogCS8qIFJlc3RvcmUgY29uZmlnIHNwYWNlIG9uIFRvc2hpYmEgbGFwdG9wcyAqLwotCW1kZWxheSgxMCk7CiAJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgUENJX0NBQ0hFX0xJTkVfU0laRSwgdG9zaGliYV9saW5lX3NpemUpOwotCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIFBDSV9JTlRFUlJVUFRfTElORSwgZGV2LT5pcnEpOworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgUENJX0lOVEVSUlVQVF9MSU5FLCAodTggKikmZGV2LT5pcnEpOwogCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCBQQ0lfQkFTRV9BRERSRVNTXzAsCiAJCQkgICAgICAgcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgMCkpOwogCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCBQQ0lfQkFTRV9BRERSRVNTXzEsCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaWEzMi9pYTMyX2lvY3RsLmMgYi9hcmNoL2lhNjQvaWEzMi9pYTMyX2lvY3RsLmMKaW5kZXggMTY0YjIxMS4uODg3MzkzOSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2lhMzIvaWEzMl9pb2N0bC5jCisrKyBiL2FyY2gvaWE2NC9pYTMyL2lhMzJfaW9jdGwuYwpAQCAtMjksMTAgKzI5LDggQEAKICNkZWZpbmUgQ09ERQogI2luY2x1ZGUgImNvbXBhdF9pb2N0bC5jIgogCi10eXBlZGVmIGludCAoKiBpb2N0bDMyX2hhbmRsZXJfdCkodW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcsIHN0cnVjdCBmaWxlICopOwotCiAjZGVmaW5lIENPTVBBVElCTEVfSU9DVEwoY21kKQkJSEFORExFX0lPQ1RMKChjbWQpLHN5c19pb2N0bCkKLSNkZWZpbmUgSEFORExFX0lPQ1RMKGNtZCxoYW5kbGVyKQl7IChjbWQpLCAoaW9jdGwzMl9oYW5kbGVyX3QpKGhhbmRsZXIpLCBOVUxMIH0sCisjZGVmaW5lIEhBTkRMRV9JT0NUTChjbWQsaGFuZGxlcikJeyAoY21kKSwgKGlvY3RsX3RyYW5zX2hhbmRsZXJfdCkoaGFuZGxlciksIE5VTEwgfSwKICNkZWZpbmUgSU9DVExfVEFCTEVfU1RBUlQgXAogCXN0cnVjdCBpb2N0bF90cmFucyBpb2N0bF9zdGFydFtdID0gewogI2RlZmluZSBJT0NUTF9UQUJMRV9FTkQgXApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9lZmkuYyBiL2FyY2gvaWE2NC9rZXJuZWwvZWZpLmMKaW5kZXggZjcyZWE2YS4uYTNhYTQ1YyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9lZmkuYworKysgYi9hcmNoL2lhNjQva2VybmVsL2VmaS5jCkBAIC05ODcsNyArOTg3LDcgQEAKIAkJCQlicmVhazsKIAkJfQogCi0JCWlmICgocmVzID0ga2NhbGxvYygxLCBzaXplb2Yoc3RydWN0IHJlc291cmNlKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpIHsKKwkJaWYgKChyZXMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gYWxvY2F0ZSByZXNvdXJjZSBmb3IgaW9tZW1cbiIpOwogCQkJcmV0dXJuOwogCQl9CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2twcm9iZXMuYyBiL2FyY2gvaWE2NC9rZXJuZWwva3Byb2Jlcy5jCmluZGV4IDk2NzM2YTEuLjgwMWVlYWUgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwva3Byb2Jlcy5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwva3Byb2Jlcy5jCkBAIC0zNDcsNyArMzQ3LDcgQEAKIAkJKChzdHJ1Y3QgZm5wdHIgKilrcmV0cHJvYmVfdHJhbXBvbGluZSktPmlwOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmtyZXRwcm9iZV9sb2NrLCBmbGFncyk7Ci0gICAgICAgIGhlYWQgPSBrcmV0cHJvYmVfaW5zdF90YWJsZV9oZWFkKGN1cnJlbnQpOworCWhlYWQgPSBrcmV0cHJvYmVfaW5zdF90YWJsZV9oZWFkKGN1cnJlbnQpOwogCiAJLyoKIAkgKiBJdCBpcyBwb3NzaWJsZSB0byBoYXZlIG11bHRpcGxlIGluc3RhbmNlcyBhc3NvY2lhdGVkIHdpdGggYSBnaXZlbgpAQCAtMzYzLDkgKzM2Myw5IEBACiAJICogICAgICAga3JldHByb2JlX3RyYW1wb2xpbmUKIAkgKi8KIAlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJpLCBub2RlLCB0bXAsIGhlYWQsIGhsaXN0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKHJpLT50YXNrICE9IGN1cnJlbnQpCisJCWlmIChyaS0+dGFzayAhPSBjdXJyZW50KQogCQkJLyogYW5vdGhlciB0YXNrIGlzIHNoYXJpbmcgb3VyIGhhc2ggYnVja2V0ICovCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKwkJCWNvbnRpbnVlOwogCiAJCWlmIChyaS0+cnAgJiYgcmktPnJwLT5oYW5kbGVyKQogCQkJcmktPnJwLT5oYW5kbGVyKHJpLCByZWdzKTsKQEAgLTM5NCw3ICszOTQsNyBAQAogCSAqIGtwcm9iZV9oYW5kbGVyKCkgdGhhdCB3ZSBkb24ndCB3YW50IHRoZSBwb3N0X2hhbmRsZXIKIAkgKiB0byBydW4gKGFuZCBoYXZlIHJlLWVuYWJsZWQgcHJlZW1wdGlvbikKIAkgKi8KLSAgICAgICAgcmV0dXJuIDE7CisJcmV0dXJuIDE7CiB9CiAKIC8qIENhbGxlZCB3aXRoIGtyZXRwcm9iZV9sb2NrIGhlbGQgKi8KQEAgLTczOSwxMiArNzM5LDE2IEBACiAKIAlzd2l0Y2godmFsKSB7CiAJY2FzZSBESUVfQlJFQUs6Ci0JCWlmIChwcmVfa3Byb2Jlc19oYW5kbGVyKGFyZ3MpKQotCQkJcmV0ID0gTk9USUZZX1NUT1A7CisJCS8qIGVyciBpcyBicmVhayBudW1iZXIgZnJvbSBpYTY0X2JhZF9icmVhaygpICovCisJCWlmIChhcmdzLT5lcnIgPT0gMHg4MDIwMCB8fCBhcmdzLT5lcnIgPT0gMHg4MDMwMCkKKwkJCWlmIChwcmVfa3Byb2Jlc19oYW5kbGVyKGFyZ3MpKQorCQkJCXJldCA9IE5PVElGWV9TVE9QOwogCQlicmVhazsKLQljYXNlIERJRV9TUzoKLQkJaWYgKHBvc3Rfa3Byb2Jlc19oYW5kbGVyKGFyZ3MtPnJlZ3MpKQotCQkJcmV0ID0gTk9USUZZX1NUT1A7CisJY2FzZSBESUVfRkFVTFQ6CisJCS8qIGVyciBpcyB2ZWN0b3IgbnVtYmVyIGZyb20gaWE2NF9mYXVsdCgpICovCisJCWlmIChhcmdzLT5lcnIgPT0gMzYpCisJCQlpZiAocG9zdF9rcHJvYmVzX2hhbmRsZXIoYXJncy0+cmVncykpCisJCQkJcmV0ID0gTk9USUZZX1NUT1A7CiAJCWJyZWFrOwogCWNhc2UgRElFX1BBR0VfRkFVTFQ6CiAJCS8qIGtwcm9iZV9ydW5uaW5nKCkgbmVlZHMgc21wX3Byb2Nlc3Nvcl9pZCgpICovCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL21jYS5jIGIvYXJjaC9pYTY0L2tlcm5lbC9tY2EuYwppbmRleCA1MmM0N2RhLi4zNTVhZjE1IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL21jYS5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvbWNhLmMKQEAgLTUxLDYgKzUxLDkgQEAKICAqCiAgKiAyMDA1LTA4LTEyIEtlaXRoIE93ZW5zIDxrYW9zQHNnaS5jb20+CiAgKgkgICAgICBDb252ZXJ0IE1DQS9JTklUIGhhbmRsZXJzIHRvIHVzZSBwZXIgZXZlbnQgc3RhY2tzIGFuZCBTQUwvT1Mgc3RhdGUuCisgKgorICogMjAwNS0xMC0wNyBLZWl0aCBPd2VucyA8a2Fvc0BzZ2kuY29tPgorICoJICAgICAgQWRkIG5vdGlmeV9kaWUoKSBob29rcy4KICAqLwogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CkBAIC01OCw3ICs2MSw2IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KQEAgLTY5LDYgKzcxLDcgQEAKICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KIAogI2luY2x1ZGUgPGFzbS9kZWxheS5oPgorI2luY2x1ZGUgPGFzbS9rZGVidWcuaD4KICNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgogI2luY2x1ZGUgPGFzbS9tZW1pbml0Lmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KQEAgLTEzMiw2ICsxMzUsMTQgQEAKIAogc3RhdGljIGludCBtY2FfaW5pdDsKIAorCitzdGF0aWMgdm9pZCBpbmxpbmUKK2lhNjRfbWNhX3NwaW4oY29uc3QgY2hhciAqZnVuYykKK3sKKwlwcmludGsoS0VSTl9FTUVSRyAiJXM6IHNwaW5uaW5nIGhlcmUsIG5vdCByZXR1cm5pbmcgdG8gU0FMXG4iLCBmdW5jKTsKKwl3aGlsZSAoMSkKKwkJY3B1X3JlbGF4KCk7Cit9CiAvKgogICogSUE2NF9NQ0EgbG9nIHN1cHBvcnQKICAqLwpAQCAtNTI2LDEzICs1MzcsMTYgQEAKICAqICBPdXRwdXRzIDogICBOb25lCiAgKi8KIHN0YXRpYyBpcnFyZXR1cm5fdAotaWE2NF9tY2FfcmVuZGV6X2ludF9oYW5kbGVyKGludCByZW5kZXpfaXJxLCB2b2lkICphcmcsIHN0cnVjdCBwdF9yZWdzICpwdHJlZ3MpCitpYTY0X21jYV9yZW5kZXpfaW50X2hhbmRsZXIoaW50IHJlbmRlel9pcnEsIHZvaWQgKmFyZywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCiAJLyogTWFzayBhbGwgaW50ZXJydXB0cyAqLwogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlpZiAobm90aWZ5X2RpZShESUVfTUNBX1JFTkRaVk9VU19FTlRFUiwgIk1DQSIsIHJlZ3MsIDAsIDAsIDApCisJCQk9PSBOT1RJRllfU1RPUCkKKwkJaWE2NF9tY2Ffc3BpbihfX0ZVTkNUSU9OX18pOwogCiAJaWE2NF9tY19pbmZvLmltaV9yZW5kZXpfY2hlY2tpbltjcHVdID0gSUE2NF9NQ0FfUkVOREVaX0NIRUNLSU5fRE9ORTsKIAkvKiBSZWdpc3RlciB3aXRoIHRoZSBTQUwgbW9uYXJjaCB0aGF0IHRoZSBzbGF2ZSBoYXMKQEAgLTU0MCwxMCArNTU0LDE4IEBACiAJICovCiAJaWE2NF9zYWxfbWNfcmVuZGV6KCk7CiAKKwlpZiAobm90aWZ5X2RpZShESUVfTUNBX1JFTkRaVk9VU19QUk9DRVNTLCAiTUNBIiwgcmVncywgMCwgMCwgMCkKKwkJCT09IE5PVElGWV9TVE9QKQorCQlpYTY0X21jYV9zcGluKF9fRlVOQ1RJT05fXyk7CisKIAkvKiBXYWl0IGZvciB0aGUgbW9uYXJjaCBjcHUgdG8gZXhpdC4gKi8KIAl3aGlsZSAobW9uYXJjaF9jcHUgIT0gLTEpCiAJICAgICAgIGNwdV9yZWxheCgpOwkvKiBzcGluIHVudGlsIG1vbmFyY2ggbGVhdmVzICovCiAKKwlpZiAobm90aWZ5X2RpZShESUVfTUNBX1JFTkRaVk9VU19MRUFWRSwgIk1DQSIsIHJlZ3MsIDAsIDAsIDApCisJCQk9PSBOT1RJRllfU1RPUCkKKwkJaWE2NF9tY2Ffc3BpbihfX0ZVTkNUSU9OX18pOworCiAJLyogRW5hYmxlIGFsbCBpbnRlcnJ1cHRzICovCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCXJldHVybiBJUlFfSEFORExFRDsKQEAgLTkzMyw2ICs5NTUsOSBAQAogCW9vcHNfaW5fcHJvZ3Jlc3MgPSAxOwkvKiBGSVhNRTogbWFrZSBwcmludGsgTk1JL01DQS9JTklUIHNhZmUgKi8KIAlwcmV2aW91c19jdXJyZW50ID0gaWE2NF9tY2FfbW9kaWZ5X29yaWdpbmFsX3N0YWNrKHJlZ3MsIHN3LCBzb3MsICJNQ0EiKTsKIAltb25hcmNoX2NwdSA9IGNwdTsKKwlpZiAobm90aWZ5X2RpZShESUVfTUNBX01PTkFSQ0hfRU5URVIsICJNQ0EiLCByZWdzLCAwLCAwLCAwKQorCQkJPT0gTk9USUZZX1NUT1ApCisJCWlhNjRfbWNhX3NwaW4oX19GVU5DVElPTl9fKTsKIAlpYTY0X3dhaXRfZm9yX3NsYXZlcyhjcHUpOwogCiAJLyogV2FrZXVwIGFsbCB0aGUgcHJvY2Vzc29ycyB3aGljaCBhcmUgc3Bpbm5pbmcgaW4gdGhlIHJlbmRlenZvdXMgbG9vcC4KQEAgLTk0Miw2ICs5NjcsOSBAQAogCSAqIHNwaW5uaW5nIGluIFNBTCBkb2VzIG5vdCB3b3JrLgogCSAqLwogCWlhNjRfbWNhX3dha2V1cF9hbGwoKTsKKwlpZiAobm90aWZ5X2RpZShESUVfTUNBX01PTkFSQ0hfUFJPQ0VTUywgIk1DQSIsIHJlZ3MsIDAsIDAsIDApCisJCQk9PSBOT1RJRllfU1RPUCkKKwkJaWE2NF9tY2Ffc3BpbihfX0ZVTkNUSU9OX18pOwogCiAJLyogR2V0IHRoZSBNQ0EgZXJyb3IgcmVjb3JkIGFuZCBsb2cgaXQgKi8KIAlpYTY0X21jYV9sb2dfc2FsX2Vycm9yX3JlY29yZChTQUxfSU5GT19UWVBFX01DQSk7CkBAIC05NjAsNiArOTg4LDkgQEAKIAkJaWE2NF9zYWxfY2xlYXJfc3RhdGVfaW5mbyhTQUxfSU5GT19UWVBFX01DQSk7CiAJCXNvcy0+b3Nfc3RhdHVzID0gSUE2NF9NQ0FfQ09SUkVDVEVEOwogCX0KKwlpZiAobm90aWZ5X2RpZShESUVfTUNBX01PTkFSQ0hfTEVBVkUsICJNQ0EiLCByZWdzLCAwLCAwLCByZWNvdmVyKQorCQkJPT0gTk9USUZZX1NUT1ApCisJCWlhNjRfbWNhX3NwaW4oX19GVU5DVElPTl9fKTsKIAogCXNldF9jdXJyX3Rhc2soY3B1LCBwcmV2aW91c19jdXJyZW50KTsKIAltb25hcmNoX2NwdSA9IC0xOwpAQCAtMTE4OCw2ICsxMjE5LDM3IEBACiAKICNlbmRpZiAvKiBDT05GSUdfQUNQSSAqLwogCitzdGF0aWMgaW50CitkZWZhdWx0X21vbmFyY2hfaW5pdF9wcm9jZXNzKHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwgdW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKmRhdGEpCit7CisJaW50IGM7CisJc3RydWN0IHRhc2tfc3RydWN0ICpnLCAqdDsKKwlpZiAodmFsICE9IERJRV9JTklUX01PTkFSQ0hfUFJPQ0VTUykKKwkJcmV0dXJuIE5PVElGWV9ET05FOworCXByaW50ayhLRVJOX0VSUiAiUHJvY2Vzc2VzIGludGVycnVwdGVkIGJ5IElOSVQgLSIpOworCWZvcl9lYWNoX29ubGluZV9jcHUoYykgeworCQlzdHJ1Y3QgaWE2NF9zYWxfb3Nfc3RhdGUgKnM7CisJCXQgPSBfX3ZhKF9fcGVyX2NwdV9tY2FbY10gKyBJQTY0X01DQV9DUFVfSU5JVF9TVEFDS19PRkZTRVQpOworCQlzID0gKHN0cnVjdCBpYTY0X3NhbF9vc19zdGF0ZSAqKSgoY2hhciAqKXQgKyBNQ0FfU09TX09GRlNFVCk7CisJCWcgPSBzLT5wcmV2X3Rhc2s7CisJCWlmIChnKSB7CisJCQlpZiAoZy0+cGlkKQorCQkJCXByaW50aygiICVkIiwgZy0+cGlkKTsKKwkJCWVsc2UKKwkJCQlwcmludGsoIiAlZCAoY3B1ICVkIHRhc2sgMHglcCkiLCBnLT5waWQsIHRhc2tfY3B1KGcpLCBnKTsKKwkJfQorCX0KKwlwcmludGsoIlxuXG4iKTsKKwlpZiAocmVhZF90cnlsb2NrKCZ0YXNrbGlzdF9sb2NrKSkgeworCQlkb19lYWNoX3RocmVhZCAoZywgdCkgeworCQkJcHJpbnRrKCJcbkJhY2t0cmFjZSBvZiBwaWQgJWQgKCVzKVxuIiwgdC0+cGlkLCB0LT5jb21tKTsKKwkJCXNob3dfc3RhY2sodCwgTlVMTCk7CisJCX0gd2hpbGVfZWFjaF90aHJlYWQgKGcsIHQpOworCQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CisJfQorCXJldHVybiBOT1RJRllfRE9ORTsKK30KKwogLyoKICAqIEMgcG9ydGlvbiBvZiB0aGUgT1MgSU5JVCBoYW5kbGVyCiAgKgpAQCAtMTIxMiw4ICsxMjc0LDcgQEAKIAlzdGF0aWMgYXRvbWljX3Qgc2xhdmVzOwogCXN0YXRpYyBhdG9taWNfdCBtb25hcmNoczsKIAl0YXNrX3QgKnByZXZpb3VzX2N1cnJlbnQ7Ci0JaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKSwgYzsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmcsICp0OworCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAKIAlvb3BzX2luX3Byb2dyZXNzID0gMTsJLyogRklYTUU6IG1ha2UgcHJpbnRrIE5NSS9NQ0EvSU5JVCBzYWZlICovCiAJY29uc29sZV9sb2dsZXZlbCA9IDE1OwkvKiBtYWtlIHN1cmUgcHJpbnRrcyBtYWtlIGl0IHRvIGNvbnNvbGUgKi8KQEAgLTEyNTMsOCArMTMxNCwxNyBAQAogCQlpYTY0X21jX2luZm8uaW1pX3JlbmRlel9jaGVja2luW2NwdV0gPSBJQTY0X01DQV9SRU5ERVpfQ0hFQ0tJTl9JTklUOwogCQl3aGlsZSAobW9uYXJjaF9jcHUgPT0gLTEpCiAJCSAgICAgICBjcHVfcmVsYXgoKTsJLyogc3BpbiB1bnRpbCBtb25hcmNoIGVudGVycyAqLworCQlpZiAobm90aWZ5X2RpZShESUVfSU5JVF9TTEFWRV9FTlRFUiwgIklOSVQiLCByZWdzLCAwLCAwLCAwKQorCQkJCT09IE5PVElGWV9TVE9QKQorCQkJaWE2NF9tY2Ffc3BpbihfX0ZVTkNUSU9OX18pOworCQlpZiAobm90aWZ5X2RpZShESUVfSU5JVF9TTEFWRV9QUk9DRVNTLCAiSU5JVCIsIHJlZ3MsIDAsIDAsIDApCisJCQkJPT0gTk9USUZZX1NUT1ApCisJCQlpYTY0X21jYV9zcGluKF9fRlVOQ1RJT05fXyk7CiAJCXdoaWxlIChtb25hcmNoX2NwdSAhPSAtMSkKIAkJICAgICAgIGNwdV9yZWxheCgpOwkvKiBzcGluIHVudGlsIG1vbmFyY2ggbGVhdmVzICovCisJCWlmIChub3RpZnlfZGllKERJRV9JTklUX1NMQVZFX0xFQVZFLCAiSU5JVCIsIHJlZ3MsIDAsIDAsIDApCisJCQkJPT0gTk9USUZZX1NUT1ApCisJCQlpYTY0X21jYV9zcGluKF9fRlVOQ1RJT05fXyk7CiAJCXByaW50aygiU2xhdmUgb24gY3B1ICVkIHJldHVybmluZyB0byBub3JtYWwgc2VydmljZS5cbiIsIGNwdSk7CiAJCXNldF9jdXJyX3Rhc2soY3B1LCBwcmV2aW91c19jdXJyZW50KTsKIAkJaWE2NF9tY19pbmZvLmltaV9yZW5kZXpfY2hlY2tpbltjcHVdID0gSUE2NF9NQ0FfUkVOREVaX0NIRUNLSU5fTk9URE9ORTsKQEAgLTEyNjMsNiArMTMzMyw5IEBACiAJfQogCiAJbW9uYXJjaF9jcHUgPSBjcHU7CisJaWYgKG5vdGlmeV9kaWUoRElFX0lOSVRfTU9OQVJDSF9FTlRFUiwgIklOSVQiLCByZWdzLCAwLCAwLCAwKQorCQkJPT0gTk9USUZZX1NUT1ApCisJCWlhNjRfbWNhX3NwaW4oX19GVU5DVElPTl9fKTsKIAogCS8qCiAJICogV2FpdCBmb3IgYSBiaXQuICBPbiBzb21lIG1hY2hpbmVzIChlLmcuLCBIUCdzIHp4MjAwMCBhbmQgeng2MDAwLCBJTklUIGNhbiBiZQpAQCAtMTI3MywyNyArMTM0NiwxNiBAQAogCXByaW50aygiRGVsYXlpbmcgZm9yIDUgc2Vjb25kcy4uLlxuIik7CiAJdWRlbGF5KDUqMTAwMDAwMCk7CiAJaWE2NF93YWl0X2Zvcl9zbGF2ZXMoY3B1KTsKLQlwcmludGsoS0VSTl9FUlIgIlByb2Nlc3NlcyBpbnRlcnJ1cHRlZCBieSBJTklUIC0iKTsKLQlmb3JfZWFjaF9vbmxpbmVfY3B1KGMpIHsKLQkJc3RydWN0IGlhNjRfc2FsX29zX3N0YXRlICpzOwotCQl0ID0gX192YShfX3Blcl9jcHVfbWNhW2NdICsgSUE2NF9NQ0FfQ1BVX0lOSVRfU1RBQ0tfT0ZGU0VUKTsKLQkJcyA9IChzdHJ1Y3QgaWE2NF9zYWxfb3Nfc3RhdGUgKikoKGNoYXIgKil0ICsgTUNBX1NPU19PRkZTRVQpOwotCQlnID0gcy0+cHJldl90YXNrOwotCQlpZiAoZykgewotCQkJaWYgKGctPnBpZCkKLQkJCQlwcmludGsoIiAlZCIsIGctPnBpZCk7Ci0JCQllbHNlCi0JCQkJcHJpbnRrKCIgJWQgKGNwdSAlZCB0YXNrIDB4JXApIiwgZy0+cGlkLCB0YXNrX2NwdShnKSwgZyk7Ci0JCX0KLQl9Ci0JcHJpbnRrKCJcblxuIik7Ci0JaWYgKHJlYWRfdHJ5bG9jaygmdGFza2xpc3RfbG9jaykpIHsKLQkJZG9fZWFjaF90aHJlYWQgKGcsIHQpIHsKLQkJCXByaW50aygiXG5CYWNrdHJhY2Ugb2YgcGlkICVkICglcylcbiIsIHQtPnBpZCwgdC0+Y29tbSk7Ci0JCQlzaG93X3N0YWNrKHQsIE5VTEwpOwotCQl9IHdoaWxlX2VhY2hfdGhyZWFkIChnLCB0KTsKLQkJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOwotCX0KKwkvKiBJZiBub2JvZHkgaW50ZXJjZXB0cyBESUVfSU5JVF9NT05BUkNIX1BST0NFU1MgdGhlbiB3ZSBkcm9wIHRocm91Z2gKKwkgKiB0byBkZWZhdWx0X21vbmFyY2hfaW5pdF9wcm9jZXNzKCkgYWJvdmUgYW5kIGp1c3QgcHJpbnQgYWxsIHRoZQorCSAqIHRhc2tzLgorCSAqLworCWlmIChub3RpZnlfZGllKERJRV9JTklUX01PTkFSQ0hfUFJPQ0VTUywgIklOSVQiLCByZWdzLCAwLCAwLCAwKQorCQkJPT0gTk9USUZZX1NUT1ApCisJCWlhNjRfbWNhX3NwaW4oX19GVU5DVElPTl9fKTsKKwlpZiAobm90aWZ5X2RpZShESUVfSU5JVF9NT05BUkNIX0xFQVZFLCAiSU5JVCIsIHJlZ3MsIDAsIDAsIDApCisJCQk9PSBOT1RJRllfU1RPUCkKKwkJaWE2NF9tY2Ffc3BpbihfX0ZVTkNUSU9OX18pOwogCXByaW50aygiXG5JTklUIGR1bXAgY29tcGxldGUuICBNb25hcmNoIG9uIGNwdSAlZCByZXR1cm5pbmcgdG8gbm9ybWFsIHNlcnZpY2UuXG4iLCBjcHUpOwogCWF0b21pY19kZWMoJm1vbmFyY2hzKTsKIAlzZXRfY3Vycl90YXNrKGNwdSwgcHJldmlvdXNfY3VycmVudCk7CkBAIC0xNDYyLDYgKzE1MjQsMTAgQEAKIAlzNjQgcmM7CiAJc3RydWN0IGlhNjRfc2FsX3JldHZhbCBpc3J2OwogCXU2NCB0aW1lb3V0ID0gSUE2NF9NQ0FfUkVOREVaX1RJTUVPVVQ7CS8qIHBsYXRmb3JtIHNwZWNpZmljICovCisJc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBkZWZhdWx0X2luaXRfbW9uYXJjaF9uYiA9IHsKKwkJLm5vdGlmaWVyX2NhbGwgPSBkZWZhdWx0X21vbmFyY2hfaW5pdF9wcm9jZXNzLAorCQkucHJpb3JpdHkgPSAwLyogd2UgbmVlZCB0byBub3RpZmllZCBsYXN0ICovCisJfTsKIAogCUlBNjRfTUNBX0RFQlVHKCIlczogYmVnaW5cbiIsIF9fRlVOQ1RJT05fXyk7CiAKQEAgLTE1NTUsNiArMTYyMSwxMCBAQAogCQkgICAgICAgIihzdGF0dXMgJWxkKVxuIiwgcmMpOwogCQlyZXR1cm47CiAJfQorCWlmIChyZWdpc3Rlcl9kaWVfbm90aWZpZXIoJmRlZmF1bHRfaW5pdF9tb25hcmNoX25iKSkgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZWdpc3RlciBkZWZhdWx0IG1vbmFyY2ggSU5JVCBwcm9jZXNzXG4iKTsKKwkJcmV0dXJuOworCX0KIAogCUlBNjRfTUNBX0RFQlVHKCIlczogcmVnaXN0ZXJlZCBPUyBJTklUIGhhbmRsZXIgd2l0aCBTQUxcbiIsIF9fRlVOQ1RJT05fXyk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvbWNhX2Rydi5jIGIvYXJjaC9pYTY0L2tlcm5lbC9tY2FfZHJ2LmMKaW5kZXggZjA4MWM2MC4uMzQ5MmUzMiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9tY2FfZHJ2LmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9tY2FfZHJ2LmMKQEAgLTg4LDcgKzg4LDcgQEAKIAlpZiAoIWlhNjRfcGh5c19hZGRyX3ZhbGlkKHBhZGRyKSkKIAkJcmV0dXJuIElTT0xBVEVfTk9ORTsKIAotCWlmICghcGZuX3ZhbGlkKHBhZGRyKSkKKwlpZiAoIXBmbl92YWxpZChwYWRkciA+PiBQQUdFX1NISUZUKSkKIAkJcmV0dXJuIElTT0xBVEVfTk9ORTsKIAogCS8qIGNvbnZlcnQgcGh5c2ljYWwgYWRkcmVzcyB0byBwaHlzaWNhbCBwYWdlIG51bWJlciAqLwpAQCAtMTA4LDYgKzEwOCw3IEBACiAJCXJldHVybiBJU09MQVRFX05HOwogCiAJLyogYWRkIGF0dHJpYnV0ZSAnUmVzZXJ2ZWQnIGFuZCByZWdpc3RlciB0aGUgcGFnZSAqLworCWdldF9wYWdlKHApOwogCVNldFBhZ2VSZXNlcnZlZChwKTsKIAlwYWdlX2lzb2xhdGVbbnVtX3BhZ2VfaXNvbGF0ZSsrXSA9IHA7CiAKQEAgLTU0Niw5ICs1NDcsMjAgQEAKIAkJKHBhbF9wcm9jZXNzb3Jfc3RhdGVfaW5mb190KilwZWlkeF9wc3AocGVpZHgpOwogCiAJLyoKLQkgKiBXZSBjYW5ub3QgcmVjb3ZlciBlcnJvcnMgd2l0aCBvdGhlciB0aGFuIGJ1c19jaGVjay4KKwkgKiBQcm9jZXNzb3IgcmVjb3Zlcnkgc3RhdHVzIG11c3Qga2V5IG9mZiBvZiB0aGUgUEFMIHJlY292ZXJ5CisJICogc3RhdHVzIGluIHRoZSBQcm9jZXNzb3IgU3RhdGUgUGFyYW1ldGVyLgogCSAqLwotCWlmIChwc3AtPmNjIHx8IHBzcC0+cmMgfHwgcHNwLT51YykKKworCS8qCisJICogVGhlIG1hY2hpbmUgY2hlY2sgaXMgY29ycmVjdGVkLgorCSAqLworCWlmIChwc3AtPmNtID09IDEpCisJCXJldHVybiAxOworCisJLyoKKwkgKiBUaGUgZXJyb3Igd2FzIG5vdCBjb250YWluZWQuICBTb2Z0d2FyZSBtdXN0IGJlIHJlc2V0LgorCSAqLworCWlmIChwc3AtPnVzIHx8IHBzcC0+Y2kgPT0gMCkKIAkJcmV0dXJuIDA7CiAKIAkvKgpAQCAtNTY5LDggKzU4MSw2IEBACiAJCXJldHVybiAwOwogCWlmIChwYmNpLT5lYiAmJiBwYmNpLT5ic2kgPiAwKQogCQlyZXR1cm4gMDsKLQlpZiAocHNwLT5jaSA9PSAwKQotCQlyZXR1cm4gMDsKIAogCS8qCiAJICogVGhpcyBpcyBhIGxvY2FsIE1DQSBhbmQgZXN0aW1hdGVkIGFzIHJlY292ZXJibGUgZXh0ZXJuYWwgYnVzIGVycm9yLgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL2lhNjQva2VybmVsL3Byb2Nlc3MuYwppbmRleCAwNTFlMDUwLi5lOTJlYTY0IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL2lhNjQva2VybmVsL3Byb2Nlc3MuYwpAQCAtNCw2ICs0LDkgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OC0yMDAzIEhld2xldHQtUGFja2FyZCBDbwogICoJRGF2aWQgTW9zYmVyZ2VyLVRhbmcgPGRhdmlkbUBocGwuaHAuY29tPgogICogMDQvMTEvMTcgQXNob2sgUmFqCTxhc2hvay5yYWpAaW50ZWwuY29tPiBBZGRlZCBDUFUgSG90cGx1ZyBTdXBwb3J0CisgKgorICogMjAwNS0xMC0wNyBLZWl0aCBPd2VucyA8a2Fvc0BzZ2kuY29tPgorICoJICAgICAgQWRkIG5vdGlmeV9kaWUoKSBob29rcy4KICAqLwogI2RlZmluZSBfX0tFUk5FTF9TWVNDQUxMU19fCS8qIHNlZSA8YXNtL3VuaXN0ZC5oPiAqLwogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgpAQCAtMzQsNiArMzcsNyBAQAogI2luY2x1ZGUgPGFzbS9lbGYuaD4KICNpbmNsdWRlIDxhc20vaWEzMi5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20va2RlYnVnLmg+CiAjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL3NhbC5oPgpAQCAtMTk3LDExICsyMDEsMTUgQEAKIGRlZmF1bHRfaWRsZSAodm9pZCkKIHsKIAlsb2NhbF9pcnFfZW5hYmxlKCk7Ci0Jd2hpbGUgKCFuZWVkX3Jlc2NoZWQoKSkKLQkJaWYgKGNhbl9kb19wYWxfaGFsdCkKLQkJCXNhZmVfaGFsdCgpOwotCQllbHNlCisJd2hpbGUgKCFuZWVkX3Jlc2NoZWQoKSkgeworCQlpZiAoY2FuX2RvX3BhbF9oYWx0KSB7CisJCQlsb2NhbF9pcnFfZGlzYWJsZSgpOworCQkJaWYgKCFuZWVkX3Jlc2NoZWQoKSkKKwkJCQlzYWZlX2hhbHQoKTsKKwkJCWxvY2FsX2lycV9lbmFibGUoKTsKKwkJfSBlbHNlCiAJCQljcHVfcmVsYXgoKTsKKwl9CiB9CiAKICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKQEAgLTI2MywxNiArMjcxLDE2IEBACiBjcHVfaWRsZSAodm9pZCkKIHsKIAl2b2lkICgqbWFya19pZGxlKShpbnQpID0gaWE2NF9tYXJrX2lkbGU7CisgIAlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCXNldF90aHJlYWRfZmxhZyhUSUZfUE9MTElOR19OUkZMQUcpOwogCiAJLyogZW5kbGVzcyBpZGxlIGxvb3Agd2l0aCBubyBwcmlvcml0eSBhdCBhbGwgKi8KIAl3aGlsZSAoMSkgeworCQlpZiAoIW5lZWRfcmVzY2hlZCgpKSB7CisJCQl2b2lkICgqaWRsZSkodm9pZCk7CiAjaWZkZWYgQ09ORklHX1NNUAotCQlpZiAoIW5lZWRfcmVzY2hlZCgpKQogCQkJbWluX3h0cCgpOwogI2VuZGlmCi0JCXdoaWxlICghbmVlZF9yZXNjaGVkKCkpIHsKLQkJCXZvaWQgKCppZGxlKSh2b2lkKTsKLQogCQkJaWYgKF9fZ2V0X2NwdV92YXIoY3B1X2lkbGVfc3RhdGUpKQogCQkJCV9fZ2V0X2NwdV92YXIoY3B1X2lkbGVfc3RhdGUpID0gMDsKIApAQCAtMjg0LDE3ICsyOTIsMTcgQEAKIAkJCWlmICghaWRsZSkKIAkJCQlpZGxlID0gZGVmYXVsdF9pZGxlOwogCQkJKCppZGxlKSgpOwotCQl9Ci0KLQkJaWYgKG1hcmtfaWRsZSkKLQkJCSgqbWFya19pZGxlKSgwKTsKLQorCQkJaWYgKG1hcmtfaWRsZSkKKwkJCQkoKm1hcmtfaWRsZSkoMCk7CiAjaWZkZWYgQ09ORklHX1NNUAotCQlub3JtYWxfeHRwKCk7CisJCQlub3JtYWxfeHRwKCk7CiAjZW5kaWYKKwkJfQorCQlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7CiAJCXNjaGVkdWxlKCk7CisJCXByZWVtcHRfZGlzYWJsZSgpOwogCQljaGVja19wZ3RfY2FjaGUoKTsKLQkJaWYgKGNwdV9pc19vZmZsaW5lKHNtcF9wcm9jZXNzb3JfaWQoKSkpCisJCWlmIChjcHVfaXNfb2ZmbGluZShjcHUpKQogCQkJcGxheV9kZWFkKCk7CiAJfQogfQpAQCAtODA0LDEyICs4MTIsMTQgQEAKIHZvaWQKIG1hY2hpbmVfcmVzdGFydCAoY2hhciAqcmVzdGFydF9jbWQpCiB7CisJKHZvaWQpIG5vdGlmeV9kaWUoRElFX01BQ0hJTkVfUkVTVEFSVCwgcmVzdGFydF9jbWQsIE5VTEwsIDAsIDAsIDApOwogCSgqZWZpLnJlc2V0X3N5c3RlbSkoRUZJX1JFU0VUX1dBUk0sIDAsIDAsIE5VTEwpOwogfQogCiB2b2lkCiBtYWNoaW5lX2hhbHQgKHZvaWQpCiB7CisJKHZvaWQpIG5vdGlmeV9kaWUoRElFX01BQ0hJTkVfSEFMVCwgIiIsIE5VTEwsIDAsIDAsIDApOwogCWNwdV9oYWx0KCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvaWE2NC9rZXJuZWwvc2V0dXAuYwppbmRleCAzYWY2ZGUzLi41YWRkMGJjIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9zZXR1cC5jCkBAIC00NjEsNiArNDYxLDcgQEAKICNlbmRpZgogCiAJY3B1X2luaXQoKTsJLyogaW5pdGlhbGl6ZSB0aGUgYm9vdHN0cmFwIENQVSAqLworCW1tdV9jb250ZXh0X2luaXQoKTsJLyogaW5pdGlhbGl6ZSBjb250ZXh0X2lkIGJpdG1hcCAqLwogCiAjaWZkZWYgQ09ORklHX0FDUEkKIAlhY3BpX2Jvb3RfaW5pdCgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9zaWduYWwuYyBiL2FyY2gvaWE2NC9rZXJuZWwvc2lnbmFsLmMKaW5kZXggNzc0ZjM0Yi4uNThjZTA3ZSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9zaWduYWwuYworKysgYi9hcmNoL2lhNjQva2VybmVsL3NpZ25hbC5jCkBAIC0zODcsMTUgKzM4NywxNCBAQAogCSAgICAgc3RydWN0IHNpZ3NjcmF0Y2ggKnNjcikKIHsKIAlleHRlcm4gY2hhciBfX2tlcm5lbF9zaWd0cmFtcFtdOwotCXVuc2lnbmVkIGxvbmcgdHJhbXBfYWRkciwgbmV3X3JicyA9IDA7CisJdW5zaWduZWQgbG9uZyB0cmFtcF9hZGRyLCBuZXdfcmJzID0gMCwgbmV3X3NwOwogCXN0cnVjdCBzaWdmcmFtZSBfX3VzZXIgKmZyYW1lOwogCWxvbmcgZXJyOwogCi0JZnJhbWUgPSAodm9pZCBfX3VzZXIgKikgc2NyLT5wdC5yMTI7CisJbmV3X3NwID0gc2NyLT5wdC5yMTI7CiAJdHJhbXBfYWRkciA9ICh1bnNpZ25lZCBsb25nKSBfX2tlcm5lbF9zaWd0cmFtcDsKLQlpZiAoKGthLT5zYS5zYV9mbGFncyAmIFNBX09OU1RBQ0spICYmIHNhc19zc19mbGFncygodW5zaWduZWQgbG9uZykgZnJhbWUpID09IDApIHsKLQkJZnJhbWUgPSAodm9pZCBfX3VzZXIgKikgKChjdXJyZW50LT5zYXNfc3Nfc3AgKyBjdXJyZW50LT5zYXNfc3Nfc2l6ZSkKLQkJCQkJICYgfihTVEFDS19BTElHTiAtIDEpKTsKKwlpZiAoKGthLT5zYS5zYV9mbGFncyAmIFNBX09OU1RBQ0spICYmIHNhc19zc19mbGFncyhuZXdfc3ApID09IDApIHsKKwkJbmV3X3NwID0gY3VycmVudC0+c2FzX3NzX3NwICsgY3VycmVudC0+c2FzX3NzX3NpemU7CiAJCS8qCiAJCSAqIFdlIG5lZWQgdG8gY2hlY2sgZm9yIHRoZSByZWdpc3RlciBzdGFjayBiZWluZyBvbiB0aGUgc2lnbmFsIHN0YWNrCiAJCSAqIHNlcGFyYXRlbHksIGJlY2F1c2UgaXQncyBzd2l0Y2hlZCBzZXBhcmF0ZWx5IChtZW1vcnkgc3RhY2sgaXMgc3dpdGNoZWQKQEAgLTQwNCw3ICs0MDMsNyBAQAogCQlpZiAoIXJic19vbl9zaWdfc3RhY2soc2NyLT5wdC5hcl9ic3BzdG9yZSkpCiAJCQluZXdfcmJzID0gKGN1cnJlbnQtPnNhc19zc19zcCArIHNpemVvZihsb25nKSAtIDEpICYgfihzaXplb2YobG9uZykgLSAxKTsKIAl9Ci0JZnJhbWUgPSAodm9pZCBfX3VzZXIgKikgZnJhbWUgLSAoKHNpemVvZigqZnJhbWUpICsgU1RBQ0tfQUxJR04gLSAxKSAmIH4oU1RBQ0tfQUxJR04gLSAxKSk7CisJZnJhbWUgPSAodm9pZCBfX3VzZXIgKikgKChuZXdfc3AgLSBzaXplb2YoKmZyYW1lKSkgJiAtU1RBQ0tfQUxJR04pOwogCiAJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBmcmFtZSwgc2l6ZW9mKCpmcmFtZSkpKQogCQlyZXR1cm4gZm9yY2Vfc2lnc2Vndl9pbmZvKHNpZywgZnJhbWUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9zbXBib290LmMgYi9hcmNoL2lhNjQva2VybmVsL3NtcGJvb3QuYwppbmRleCA0MDBhNDg5Li44ZjQ0ZTdkIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3NtcGJvb3QuYworKysgYi9hcmNoL2lhNjQva2VybmVsL3NtcGJvb3QuYwpAQCAtMzk5LDYgKzM5OSw3IEBACiAJRHByaW50aygic3RhcnRfc2Vjb25kYXJ5OiBzdGFydGluZyBDUFUgMHgleFxuIiwgaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCkpOwogCWVmaV9tYXBfcGFsX2NvZGUoKTsKIAljcHVfaW5pdCgpOworCXByZWVtcHRfZGlzYWJsZSgpOwogCXNtcF9jYWxsaW4oKTsKIAogCWNwdV9pZGxlKCk7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3RyYXBzLmMgYi9hcmNoL2lhNjQva2VybmVsL3RyYXBzLmMKaW5kZXggZjk3MDM1OS4uZmJhNWZkZCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvdHJhcHMuYwpAQCAtMzAsMTcgKzMwLDIwIEBACiBFWFBPUlRfU1lNQk9MKGZwc3dhX2ludGVyZmFjZSk7CiAKIHN0cnVjdCBub3RpZmllcl9ibG9jayAqaWE2NGRpZV9jaGFpbjsKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soZGllX25vdGlmaWVyX2xvY2spOwogCi1pbnQgcmVnaXN0ZXJfZGllX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCitpbnQKK3JlZ2lzdGVyX2RpZV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKQogewotCWludCBlcnIgPSAwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRpZV9ub3RpZmllcl9sb2NrLCBmbGFncyk7Ci0JZXJyID0gbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJmlhNjRkaWVfY2hhaW4sIG5iKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkaWVfbm90aWZpZXJfbG9jaywgZmxhZ3MpOwotCXJldHVybiBlcnI7CisJcmV0dXJuIG5vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZpYTY0ZGllX2NoYWluLCBuYik7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChyZWdpc3Rlcl9kaWVfbm90aWZpZXIpOworCitpbnQKK3VucmVnaXN0ZXJfZGllX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCit7CisJcmV0dXJuIG5vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoJmlhNjRkaWVfY2hhaW4sIG5iKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHVucmVnaXN0ZXJfZGllX25vdGlmaWVyKTsKIAogdm9pZCBfX2luaXQKIHRyYXBfaW5pdCAodm9pZCkKQEAgLTEwNSw2ICsxMDgsNyBAQAogCWlmICgrK2RpZS5sb2NrX293bmVyX2RlcHRoIDwgMykgewogCQlwcmludGsoIiVzWyVkXTogJXMgJWxkIFslZF1cbiIsCiAJCQljdXJyZW50LT5jb21tLCBjdXJyZW50LT5waWQsIHN0ciwgZXJyLCArK2RpZV9jb3VudGVyKTsKKwkJKHZvaWQpIG5vdGlmeV9kaWUoRElFX09PUFMsIChjaGFyICopc3RyLCByZWdzLCBlcnIsIDI1NSwgU0lHU0VHVik7CiAJCXNob3dfcmVncyhyZWdzKTsKICAgCX0gZWxzZQogCQlwcmludGsoS0VSTl9FUlIgIlJlY3Vyc2l2ZSBkaWUoKSBmYWlsdXJlLCBvdXRwdXQgc3VwcHJlc3NlZFxuIik7CkBAIC0xNTUsOSArMTU5LDggQEAKIAlzd2l0Y2ggKGJyZWFrX251bSkgewogCSAgICAgIGNhc2UgMDogLyogdW5rbm93biBlcnJvciAodXNlZCBieSBHQ0MgZm9yIF9fYnVpbHRpbl9hYm9ydCgpKSAqLwogCQlpZiAobm90aWZ5X2RpZShESUVfQlJFQUssICJicmVhayAwIiwgcmVncywgYnJlYWtfbnVtLCBUUkFQX0JSS1BULCBTSUdUUkFQKQotCQkJICAgICAgIAk9PSBOT1RJRllfU1RPUCkgeworCQkJICAgICAgIAk9PSBOT1RJRllfU1RPUCkKIAkJCXJldHVybjsKLQkJfQogCQlkaWVfaWZfa2VybmVsKCJidWdjaGVjayEiLCByZWdzLCBicmVha19udW0pOwogCQlzaWcgPSBTSUdJTEw7IGNvZGUgPSBJTExfSUxMT1BDOwogCQlicmVhazsKQEAgLTIxMCwxNSArMjEzLDYgQEAKIAkJc2lnID0gU0lHSUxMOyBjb2RlID0gX19JTExfQk5ETU9EOwogCQlicmVhazsKIAotCSAgICAgIGNhc2UgMHg4MDIwMDoKLQkgICAgICBjYXNlIDB4ODAzMDA6Ci0JCWlmIChub3RpZnlfZGllKERJRV9CUkVBSywgImtwcm9iZSIsIHJlZ3MsIGJyZWFrX251bSwgVFJBUF9CUktQVCwgU0lHVFJBUCkKLQkJCSAgICAgICAJPT0gTk9USUZZX1NUT1ApIHsKLQkJCXJldHVybjsKLQkJfQotCQlzaWcgPSBTSUdUUkFQOyBjb2RlID0gVFJBUF9CUktQVDsKLQkJYnJlYWs7Ci0KIAkgICAgICBkZWZhdWx0OgogCQlpZiAoYnJlYWtfbnVtIDwgMHg0MDAwMCB8fCBicmVha19udW0gPiAweDEwMDAwMCkKIAkJCWRpZV9pZl9rZXJuZWwoIkJhZCBicmVhayIsIHJlZ3MsIGJyZWFrX251bSk7CkBAIC0yMjYsNiArMjIwLDkgQEAKIAkJaWYgKGJyZWFrX251bSA8IDB4ODAwMDApIHsKIAkJCXNpZyA9IFNJR0lMTDsgY29kZSA9IF9fSUxMX0JSRUFLOwogCQl9IGVsc2UgeworCQkJaWYgKG5vdGlmeV9kaWUoRElFX0JSRUFLLCAiYmFkIGJyZWFrIiwgcmVncywgYnJlYWtfbnVtLCBUUkFQX0JSS1BULCBTSUdUUkFQKQorCQkJCQk9PSBOT1RJRllfU1RPUCkKKwkJCQlyZXR1cm47CiAJCQlzaWcgPSBTSUdUUkFQOyBjb2RlID0gVFJBUF9CUktQVDsKIAkJfQogCX0KQEAgLTU3OCwxMiArNTc1LDExIEBACiAjZW5kaWYKIAkJCWJyZWFrOwogCQkgICAgICBjYXNlIDM1OiBzaWdpbmZvLnNpX2NvZGUgPSBUUkFQX0JSQU5DSDsgaWZhID0gMDsgYnJlYWs7Ci0JCSAgICAgIGNhc2UgMzY6Ci0JCQkgICAgICBpZiAobm90aWZ5X2RpZShESUVfU1MsICJzcyIsICZyZWdzLCB2ZWN0b3IsCi0JCQkJCSAgICAgdmVjdG9yLCBTSUdUUkFQKSA9PSBOT1RJRllfU1RPUCkKLQkJCQkgICAgICByZXR1cm47Ci0JCQkgICAgICBzaWdpbmZvLnNpX2NvZGUgPSBUUkFQX1RSQUNFOyBpZmEgPSAwOyBicmVhazsKKwkJICAgICAgY2FzZSAzNjogc2lnaW5mby5zaV9jb2RlID0gVFJBUF9UUkFDRTsgaWZhID0gMDsgYnJlYWs7CiAJCX0KKwkJaWYgKG5vdGlmeV9kaWUoRElFX0ZBVUxULCAiaWE2NF9mYXVsdCIsICZyZWdzLCB2ZWN0b3IsIHNpZ2luZm8uc2lfY29kZSwgU0lHVFJBUCkKKwkJCSAgICAgICAJPT0gTk9USUZZX1NUT1ApCisJCQlyZXR1cm47CiAJCXNpZ2luZm8uc2lfc2lnbm8gPSBTSUdUUkFQOwogCQlzaWdpbmZvLnNpX2Vycm5vID0gMDsKIAkJc2lnaW5mby5zaV9hZGRyICA9ICh2b2lkIF9fdXNlciAqKSBpZmE7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvbW0vZGlzY29udGlnLmMgYi9hcmNoL2lhNjQvbW0vZGlzY29udGlnLmMKaW5kZXggYTg4Y2RiNy4uMGY3NzZiMCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L21tL2Rpc2NvbnRpZy5jCisrKyBiL2FyY2gvaWE2NC9tbS9kaXNjb250aWcuYwpAQCAtMzUwLDE0ICszNTAsMTIgQEAKICAqCWZvciBiZXN0LgogICogQG5pZDogbm9kZSBpZAogICogQHBlcm5vZGVzaXplOiBzaXplIG9mIHRoaXMgbm9kZSdzIHBlcm5vZGUgZGF0YQotICogQGFsaWduOiBhbGlnbm1lbnQgdG8gdXNlIGZvciB0aGlzIG5vZGUncyBwZXJub2RlIGRhdGEKICAqLwotc3RhdGljIHZvaWQgX19pbml0ICptZW1vcnlfbGVzc19ub2RlX2FsbG9jKGludCBuaWQsIHVuc2lnbmVkIGxvbmcgcGVybm9kZXNpemUsCi0JdW5zaWduZWQgbG9uZyBhbGlnbikKK3N0YXRpYyB2b2lkIF9faW5pdCAqbWVtb3J5X2xlc3Nfbm9kZV9hbGxvYyhpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHBlcm5vZGVzaXplKQogewogCXZvaWQgKnB0ciA9IE5VTEw7CiAJdTggYmVzdCA9IDB4ZmY7Ci0JaW50IGJlc3Rub2RlID0gLTEsIG5vZGU7CisJaW50IGJlc3Rub2RlID0gLTEsIG5vZGUsIGFueW5vZGUgPSAwOwogCiAJZm9yX2VhY2hfb25saW5lX25vZGUobm9kZSkgewogCQlpZiAobm9kZV9pc3NldChub2RlLCBtZW1vcnlfbGVzc19tYXNrKSkKQEAgLTM2NiwxMyArMzY0LDE1IEBACiAJCQliZXN0ID0gbm9kZV9kaXN0YW5jZShuaWQsIG5vZGUpOwogCQkJYmVzdG5vZGUgPSBub2RlOwogCQl9CisJCWFueW5vZGUgPSBub2RlOwogCX0KIAotCXB0ciA9IF9fYWxsb2NfYm9vdG1lbV9ub2RlKG1lbV9kYXRhW2Jlc3Rub2RlXS5wZ2RhdCwKLQkJcGVybm9kZXNpemUsIGFsaWduLCBfX3BhKE1BWF9ETUFfQUREUkVTUykpOworCWlmIChiZXN0bm9kZSA9PSAtMSkKKwkJYmVzdG5vZGUgPSBhbnlub2RlOwogCi0JaWYgKCFwdHIpCi0JCXBhbmljKCJOTyBtZW1vcnkgZm9yIG1lbW9yeSBsZXNzIG5vZGVcbiIpOworCXB0ciA9IF9fYWxsb2NfYm9vdG1lbV9ub2RlKG1lbV9kYXRhW2Jlc3Rub2RlXS5wZ2RhdCwgcGVybm9kZXNpemUsCisJCVBFUkNQVV9QQUdFX1NJWkUsIF9fcGEoTUFYX0RNQV9BRERSRVNTKSk7CisKIAlyZXR1cm4gcHRyOwogfQogCkBAIC00MTMsOCArNDEzLDcgQEAKIAogCWZvcl9lYWNoX25vZGVfbWFzayhub2RlLCBtZW1vcnlfbGVzc19tYXNrKSB7CiAJCXBlcm5vZGVzaXplID0gY29tcHV0ZV9wZXJub2Rlc2l6ZShub2RlKTsKLQkJcGVybm9kZSA9IG1lbW9yeV9sZXNzX25vZGVfYWxsb2Mobm9kZSwgcGVybm9kZXNpemUsCi0JCQkobm9kZSkgPyAobm9kZSAqIFBFUkNQVV9QQUdFX1NJWkUpIDogKDEwMjQqMTAyNCkpOworCQlwZXJub2RlID0gbWVtb3J5X2xlc3Nfbm9kZV9hbGxvYyhub2RlLCBwZXJub2Rlc2l6ZSk7CiAJCWZpbGxfcGVybm9kZShub2RlLCBfX3BhKHBlcm5vZGUpLCBwZXJub2Rlc2l6ZSk7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvbW0vdGxiLmMgYi9hcmNoL2lhNjQvbW0vdGxiLmMKaW5kZXggYzc5YTliOS4uNDExMDVkNCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L21tL3RsYi5jCisrKyBiL2FyY2gvaWE2NC9tbS90bGIuYwpAQCAtOCw2ICs4LDggQEAKICAqCQlNb2RpZmllZCBSSUQgYWxsb2NhdGlvbiBmb3IgU01QCiAgKiAgICAgICAgICBHb3V0aGFtIFJhbyA8Z291dGhhbS5yYW9AaW50ZWwuY29tPgogICogICAgICAgICAgICAgIElQSSBiYXNlZCBwdGMgaW1wbGVtZW50YXRpb24gYW5kIEEtc3RlcCBJUEkgaW1wbGVtZW50YXRpb24uCisgKiBSb2hpdCBTZXRoIDxyb2hpdC5zZXRoQGludGVsLmNvbT4KKyAqIEtlbiBDaGVuIDxrZW5uZXRoLncuY2hlbkBpbnRlbC5jb20+CiAgKi8KICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTE2LDc4ICsxOCw3NSBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CiAKICNpbmNsdWRlIDxhc20vZGVsYXkuaD4KICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KICNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgogI2luY2x1ZGUgPGFzbS9wYWwuaD4KICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vZG1hLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgewogCXVuc2lnbmVkIGxvbmcgbWFzazsJLyogbWFzayBvZiBzdXBwb3J0ZWQgcHVyZ2UgcGFnZS1zaXplcyAqLwotCXVuc2lnbmVkIGxvbmcgbWF4X2JpdHM7CS8qIGxvZzIoKSBvZiBsYXJnZXN0IHN1cHBvcnRlZCBwdXJnZSBwYWdlLXNpemUgKi8KKwl1bnNpZ25lZCBsb25nIG1heF9iaXRzOwkvKiBsb2cyIG9mIGxhcmdlc3Qgc3VwcG9ydGVkIHB1cmdlIHBhZ2Utc2l6ZSAqLwogfSBwdXJnZTsKIAogc3RydWN0IGlhNjRfY3R4IGlhNjRfY3R4ID0gewogCS5sb2NrID0JCVNQSU5fTE9DS19VTkxPQ0tFRCwKIAkubmV4dCA9CQkxLAotCS5saW1pdCA9CSgxIDw8IDE1KSAtIDEsCQkvKiBzdGFydCBvdXQgd2l0aCB0aGUgc2FmZSAoYXJjaGl0ZWN0ZWQpIGxpbWl0ICovCiAJLm1heF9jdHggPQl+MFUKIH07CiAKIERFRklORV9QRVJfQ1BVKHU4LCBpYTY0X25lZWRfdGxiX2ZsdXNoKTsKIAogLyoKKyAqIEluaXRpYWxpemVzIHRoZSBpYTY0X2N0eC5iaXRtYXAgYXJyYXkgYmFzZWQgb24gbWF4X2N0eCsxLgorICogQ2FsbGVkIGFmdGVyIGNwdV9pbml0KCkgaGFzIHNldHVwIGlhNjRfY3R4Lm1heF9jdHggYmFzZWQgb24KKyAqIG1heGltdW0gUklEIHRoYXQgaXMgc3VwcG9ydGVkIGJ5IGJvb3QgQ1BVLgorICovCit2b2lkIF9faW5pdAorbW11X2NvbnRleHRfaW5pdCAodm9pZCkKK3sKKwlpYTY0X2N0eC5iaXRtYXAgPSBhbGxvY19ib290bWVtKChpYTY0X2N0eC5tYXhfY3R4KzEpPj4zKTsKKwlpYTY0X2N0eC5mbHVzaG1hcCA9IGFsbG9jX2Jvb3RtZW0oKGlhNjRfY3R4Lm1heF9jdHgrMSk+PjMpOworfQorCisvKgogICogQWNxdWlyZSB0aGUgaWE2NF9jdHgubG9jayBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIQogICovCiB2b2lkCiB3cmFwX21tdV9jb250ZXh0IChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKLQl1bnNpZ25lZCBsb25nIHRza19jb250ZXh0LCBtYXhfY3R4ID0gaWE2NF9jdHgubWF4X2N0eDsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzazsKLQlpbnQgaTsKKwlpbnQgaSwgY3B1OworCXVuc2lnbmVkIGxvbmcgZmx1c2hfYml0OwogCi0JaWYgKGlhNjRfY3R4Lm5leHQgPiBtYXhfY3R4KQotCQlpYTY0X2N0eC5uZXh0ID0gMzAwOwkvKiBza2lwIGRhZW1vbnMgKi8KLQlpYTY0X2N0eC5saW1pdCA9IG1heF9jdHggKyAxOworCWZvciAoaT0wOyBpIDw9IGlhNjRfY3R4Lm1heF9jdHggLyBCSVRTX1BFUl9MT05HOyBpKyspIHsKKwkJZmx1c2hfYml0ID0geGNoZygmaWE2NF9jdHguZmx1c2htYXBbaV0sIDApOworCQlpYTY0X2N0eC5iaXRtYXBbaV0gXj0gZmx1c2hfYml0OworCX0KKyAKKwkvKiB1c2Ugb2Zmc2V0IGF0IDMwMCB0byBza2lwIGRhZW1vbnMgKi8KKwlpYTY0X2N0eC5uZXh0ID0gZmluZF9uZXh0X3plcm9fYml0KGlhNjRfY3R4LmJpdG1hcCwKKwkJCQlpYTY0X2N0eC5tYXhfY3R4LCAzMDApOworCWlhNjRfY3R4LmxpbWl0ID0gZmluZF9uZXh0X2JpdChpYTY0X2N0eC5iaXRtYXAsCisJCQkJaWE2NF9jdHgubWF4X2N0eCwgaWE2NF9jdHgubmV4dCk7CiAKIAkvKgotCSAqIFNjYW4gYWxsIHRoZSB0YXNrJ3MgbW0tPmNvbnRleHQgYW5kIHNldCBwcm9wZXIgc2FmZSByYW5nZQorCSAqIGNhbid0IGNhbGwgZmx1c2hfdGxiX2FsbCgpIGhlcmUgYmVjYXVzZSBvZiByYWNlIGNvbmRpdGlvbgorCSAqIHdpdGggTygxKSBzY2hlZHVsZXIgW0VGXQogCSAqLwotCi0JcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKLSAgcmVwZWF0OgotCWZvcl9lYWNoX3Byb2Nlc3ModHNrKSB7Ci0JCWlmICghdHNrLT5tbSkKLQkJCWNvbnRpbnVlOwotCQl0c2tfY29udGV4dCA9IHRzay0+bW0tPmNvbnRleHQ7Ci0JCWlmICh0c2tfY29udGV4dCA9PSBpYTY0X2N0eC5uZXh0KSB7Ci0JCQlpZiAoKytpYTY0X2N0eC5uZXh0ID49IGlhNjRfY3R4LmxpbWl0KSB7Ci0JCQkJLyogZW1wdHkgcmFuZ2U6IHJlc2V0IHRoZSByYW5nZSBsaW1pdCBhbmQgc3RhcnQgb3ZlciAqLwotCQkJCWlmIChpYTY0X2N0eC5uZXh0ID4gbWF4X2N0eCkKLQkJCQkJaWE2NF9jdHgubmV4dCA9IDMwMDsKLQkJCQlpYTY0X2N0eC5saW1pdCA9IG1heF9jdHggKyAxOwotCQkJCWdvdG8gcmVwZWF0OwotCQkJfQotCQl9Ci0JCWlmICgodHNrX2NvbnRleHQgPiBpYTY0X2N0eC5uZXh0KSAmJiAodHNrX2NvbnRleHQgPCBpYTY0X2N0eC5saW1pdCkpCi0JCQlpYTY0X2N0eC5saW1pdCA9IHRza19jb250ZXh0OwotCX0KLQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7Ci0JLyogY2FuJ3QgY2FsbCBmbHVzaF90bGJfYWxsKCkgaGVyZSBiZWNhdXNlIG9mIHJhY2UgY29uZGl0aW9uIHdpdGggTygxKSBzY2hlZHVsZXIgW0VGXSAqLwotCXsKLQkJaW50IGNwdSA9IGdldF9jcHUoKTsgLyogcHJldmVudCBwcmVlbXB0aW9uL21pZ3JhdGlvbiAqLwotCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGkpIHsKLQkJCWlmIChpICE9IGNwdSkKLQkJCQlwZXJfY3B1KGlhNjRfbmVlZF90bGJfZmx1c2gsIGkpID0gMTsKLQkJfQotCQlwdXRfY3B1KCk7Ci0JfQorCWNwdSA9IGdldF9jcHUoKTsgLyogcHJldmVudCBwcmVlbXB0aW9uL21pZ3JhdGlvbiAqLworCWZvcl9lYWNoX29ubGluZV9jcHUoaSkKKwkJaWYgKGkgIT0gY3B1KQorCQkJcGVyX2NwdShpYTY0X25lZWRfdGxiX2ZsdXNoLCBpKSA9IDE7CisJcHV0X2NwdSgpOwogCWxvY2FsX2ZsdXNoX3RsYl9hbGwoKTsKIH0KIAogdm9pZAotaWE2NF9nbG9iYWxfdGxiX3B1cmdlIChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsIHVuc2lnbmVkIGxvbmcgbmJpdHMpCitpYTY0X2dsb2JhbF90bGJfcHVyZ2UgKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAorCQkgICAgICAgdW5zaWduZWQgbG9uZyBlbmQsIHVuc2lnbmVkIGxvbmcgbmJpdHMpCiB7CiAJc3RhdGljIERFRklORV9TUElOTE9DSyhwdGNnX2xvY2spOwogCkBAIC0xMzUsNyArMTM0LDggQEAKIH0KIAogdm9pZAotZmx1c2hfdGxiX3JhbmdlIChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCitmbHVzaF90bGJfcmFuZ2UgKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAorCQkgdW5zaWduZWQgbG9uZyBlbmQpCiB7CiAJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtPnZtX21tOwogCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IGVuZCAtIHN0YXJ0OwpAQCAtMTQ5LDcgKzE0OSw4IEBACiAjZW5kaWYKIAogCW5iaXRzID0gaWE2NF9mbHMoc2l6ZSArIDB4ZmZmKTsKLQl3aGlsZSAodW5saWtlbHkgKCgoMVVMIDw8IG5iaXRzKSAmIHB1cmdlLm1hc2spID09IDApICYmIChuYml0cyA8IHB1cmdlLm1heF9iaXRzKSkKKwl3aGlsZSAodW5saWtlbHkgKCgoMVVMIDw8IG5iaXRzKSAmIHB1cmdlLm1hc2spID09IDApICYmCisJCQkobmJpdHMgPCBwdXJnZS5tYXhfYml0cykpCiAJCSsrbmJpdHM7CiAJaWYgKG5iaXRzID4gcHVyZ2UubWF4X2JpdHMpCiAJCW5iaXRzID0gcHVyZ2UubWF4X2JpdHM7CkBAIC0xOTEsNSArMTkyLDUgQEAKIAlsb2NhbF9jcHVfZGF0YS0+cHRjZV9zdHJpZGVbMF0gPSBwdGNlX2luZm8uc3RyaWRlWzBdOwogCWxvY2FsX2NwdV9kYXRhLT5wdGNlX3N0cmlkZVsxXSA9IHB0Y2VfaW5mby5zdHJpZGVbMV07CiAKLQlsb2NhbF9mbHVzaF90bGJfYWxsKCk7CQkvKiBudWtlIGxlZnQgb3ZlcnMgZnJvbSBib290c3RyYXBwaW5nLi4uICovCisJbG9jYWxfZmx1c2hfdGxiX2FsbCgpOwkvKiBudWtlIGxlZnQgb3ZlcnMgZnJvbSBib290c3RyYXBwaW5nLi4uICovCiB9CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvcGNpL3BjaS5jIGIvYXJjaC9pYTY0L3BjaS9wY2kuYwppbmRleCAwMTdjZmMzLi4yMGQ3NmZhIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvcGNpL3BjaS5jCisrKyBiL2FyY2gvaWE2NC9wY2kvcGNpLmMKQEAgLTk1LDcgKzk1LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBwY2lfcmF3X29wcyBwY2lfc2FsX29wcyA9IHsKLQkucmVhZCA9IAlwY2lfc2FsX3JlYWQsCisJLnJlYWQgPQkJcGNpX3NhbF9yZWFkLAogCS53cml0ZSA9CXBjaV9zYWxfd3JpdGUKIH07CiAKQEAgLTEzNywzNSArMTM3LDk4IEBACiAJcmV0dXJuIGNvbnRyb2xsZXI7CiB9CiAKLXN0YXRpYyB1NjQgX19kZXZpbml0Ci1hZGRfaW9fc3BhY2UgKHN0cnVjdCBhY3BpX3Jlc291cmNlX2FkZHJlc3M2NCAqYWRkcikKK3N0cnVjdCBwY2lfcm9vdF9pbmZvIHsKKwlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmNvbnRyb2xsZXI7CisJY2hhciAqbmFtZTsKK307CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK25ld19zcGFjZSAodTY0IHBoeXNfYmFzZSwgaW50IHNwYXJzZSkKIHsKLQl1NjQgb2Zmc2V0OwotCWludCBzcGFyc2UgPSAwOworCXU2NCBtbWlvX2Jhc2U7CiAJaW50IGk7CiAKLQlpZiAoYWRkci0+YWRkcmVzc190cmFuc2xhdGlvbl9vZmZzZXQgPT0gMCkKLQkJcmV0dXJuIElPX1NQQUNFX0JBU0UoMCk7CS8qIHBhcnQgb2YgbGVnYWN5IElPIHNwYWNlICovCisJaWYgKHBoeXNfYmFzZSA9PSAwKQorCQlyZXR1cm4gMDsJLyogbGVnYWN5IEkvTyBwb3J0IHNwYWNlICovCiAKLQlpZiAoYWRkci0+YXR0cmlidXRlLmlvLnRyYW5zbGF0aW9uX2F0dHJpYnV0ZSA9PSBBQ1BJX1NQQVJTRV9UUkFOU0xBVElPTikKLQkJc3BhcnNlID0gMTsKLQotCW9mZnNldCA9ICh1NjQpIGlvcmVtYXAoYWRkci0+YWRkcmVzc190cmFuc2xhdGlvbl9vZmZzZXQsIDApOworCW1taW9fYmFzZSA9ICh1NjQpIGlvcmVtYXAocGh5c19iYXNlLCAwKTsKIAlmb3IgKGkgPSAwOyBpIDwgbnVtX2lvX3NwYWNlczsgaSsrKQotCQlpZiAoaW9fc3BhY2VbaV0ubW1pb19iYXNlID09IG9mZnNldCAmJgorCQlpZiAoaW9fc3BhY2VbaV0ubW1pb19iYXNlID09IG1taW9fYmFzZSAmJgogCQkgICAgaW9fc3BhY2VbaV0uc3BhcnNlID09IHNwYXJzZSkKLQkJCXJldHVybiBJT19TUEFDRV9CQVNFKGkpOworCQkJcmV0dXJuIGk7CiAKIAlpZiAobnVtX2lvX3NwYWNlcyA9PSBNQVhfSU9fU1BBQ0VTKSB7Ci0JCXByaW50aygiVG9vIG1hbnkgSU8gcG9ydCBzcGFjZXNcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIlBDSTogVG9vIG1hbnkgSU8gcG9ydCBzcGFjZXMgIgorCQkJIihNQVhfSU9fU1BBQ0VTPSVsdSlcbiIsIE1BWF9JT19TUEFDRVMpOwogCQlyZXR1cm4gfjA7CiAJfQogCiAJaSA9IG51bV9pb19zcGFjZXMrKzsKLQlpb19zcGFjZVtpXS5tbWlvX2Jhc2UgPSBvZmZzZXQ7CisJaW9fc3BhY2VbaV0ubW1pb19iYXNlID0gbW1pb19iYXNlOwogCWlvX3NwYWNlW2ldLnNwYXJzZSA9IHNwYXJzZTsKIAotCXJldHVybiBJT19TUEFDRV9CQVNFKGkpOworCXJldHVybiBpOworfQorCitzdGF0aWMgdTY0IF9fZGV2aW5pdAorYWRkX2lvX3NwYWNlIChzdHJ1Y3QgcGNpX3Jvb3RfaW5mbyAqaW5mbywgc3RydWN0IGFjcGlfcmVzb3VyY2VfYWRkcmVzczY0ICphZGRyKQoreworCXN0cnVjdCByZXNvdXJjZSAqcmVzb3VyY2U7CisJY2hhciAqbmFtZTsKKwl1NjQgYmFzZSwgbWluLCBtYXgsIGJhc2VfcG9ydDsKKwl1bnNpZ25lZCBpbnQgc3BhcnNlID0gMCwgc3BhY2VfbnIsIGxlbjsKKworCXJlc291cmNlID0ga3phbGxvYyhzaXplb2YoKnJlc291cmNlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZXNvdXJjZSkgeworCQlwcmludGsoS0VSTl9FUlIgIlBDSTogTm8gbWVtb3J5IGZvciAlcyBJL08gcG9ydCBzcGFjZVxuIiwKKwkJCWluZm8tPm5hbWUpOworCQlnb3RvIG91dDsKKwl9CisKKwlsZW4gPSBzdHJsZW4oaW5mby0+bmFtZSkgKyAzMjsKKwluYW1lID0ga3phbGxvYyhsZW4sIEdGUF9LRVJORUwpOworCWlmICghbmFtZSkgeworCQlwcmludGsoS0VSTl9FUlIgIlBDSTogTm8gbWVtb3J5IGZvciAlcyBJL08gcG9ydCBzcGFjZSBuYW1lXG4iLAorCQkJaW5mby0+bmFtZSk7CisJCWdvdG8gZnJlZV9yZXNvdXJjZTsKKwl9CisKKwltaW4gPSBhZGRyLT5taW5fYWRkcmVzc19yYW5nZTsKKwltYXggPSBtaW4gKyBhZGRyLT5hZGRyZXNzX2xlbmd0aCAtIDE7CisJaWYgKGFkZHItPmF0dHJpYnV0ZS5pby50cmFuc2xhdGlvbl9hdHRyaWJ1dGUgPT0gQUNQSV9TUEFSU0VfVFJBTlNMQVRJT04pCisJCXNwYXJzZSA9IDE7CisKKwlzcGFjZV9uciA9IG5ld19zcGFjZShhZGRyLT5hZGRyZXNzX3RyYW5zbGF0aW9uX29mZnNldCwgc3BhcnNlKTsKKwlpZiAoc3BhY2VfbnIgPT0gfjApCisJCWdvdG8gZnJlZV9uYW1lOworCisJYmFzZSA9IF9fcGEoaW9fc3BhY2Vbc3BhY2VfbnJdLm1taW9fYmFzZSk7CisJYmFzZV9wb3J0ID0gSU9fU1BBQ0VfQkFTRShzcGFjZV9ucik7CisJc25wcmludGYobmFtZSwgbGVuLCAiJXMgSS9PIFBvcnRzICUwOGx4LSUwOGx4IiwgaW5mby0+bmFtZSwKKwkJYmFzZV9wb3J0ICsgbWluLCBiYXNlX3BvcnQgKyBtYXgpOworCisJLyoKKwkgKiBUaGUgU0RNIGd1YXJhbnRlZXMgdGhlIGxlZ2FjeSAwLTY0SyBzcGFjZSBpcyBzcGFyc2UsIGJ1dCBpZiB0aGUKKwkgKiBtYXBwaW5nIGlzIGRvbmUgYnkgdGhlIHByb2Nlc3NvciAobm90IHRoZSBicmlkZ2UpLCBBQ1BJIG1heSBub3QKKwkgKiBtYXJrIGl0IGFzIHNwYXJzZS4KKwkgKi8KKwlpZiAoc3BhY2VfbnIgPT0gMCkKKwkJc3BhcnNlID0gMTsKKworCXJlc291cmNlLT5uYW1lICA9IG5hbWU7CisJcmVzb3VyY2UtPmZsYWdzID0gSU9SRVNPVVJDRV9NRU07CisJcmVzb3VyY2UtPnN0YXJ0ID0gYmFzZSArIChzcGFyc2UgPyBJT19TUEFDRV9TUEFSU0VfRU5DT0RJTkcobWluKSA6IG1pbik7CisJcmVzb3VyY2UtPmVuZCAgID0gYmFzZSArIChzcGFyc2UgPyBJT19TUEFDRV9TUEFSU0VfRU5DT0RJTkcobWF4KSA6IG1heCk7CisJaW5zZXJ0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgcmVzb3VyY2UpOworCisJcmV0dXJuIGJhc2VfcG9ydDsKKworZnJlZV9uYW1lOgorCWtmcmVlKG5hbWUpOworZnJlZV9yZXNvdXJjZToKKwlrZnJlZShyZXNvdXJjZSk7CitvdXQ6CisJcmV0dXJuIH4wOwogfQogCiBzdGF0aWMgYWNwaV9zdGF0dXMgX19kZXZpbml0IHJlc291cmNlX3RvX3dpbmRvdyhzdHJ1Y3QgYWNwaV9yZXNvdXJjZSAqcmVzb3VyY2UsCkBAIC0yMDUsMTEgKzI2OCw2IEBACiAJcmV0dXJuIEFFX09LOwogfQogCi1zdHJ1Y3QgcGNpX3Jvb3RfaW5mbyB7Ci0Jc3RydWN0IHBjaV9jb250cm9sbGVyICpjb250cm9sbGVyOwotCWNoYXIgKm5hbWU7Ci19OwotCiBzdGF0aWMgX19kZXZpbml0IGFjcGlfc3RhdHVzIGFkZF93aW5kb3coc3RydWN0IGFjcGlfcmVzb3VyY2UgKnJlcywgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgcGNpX3Jvb3RfaW5mbyAqaW5mbyA9IGRhdGE7CkBAIC0yMzEsNyArMjg5LDcgQEAKIAl9IGVsc2UgaWYgKGFkZHIucmVzb3VyY2VfdHlwZSA9PSBBQ1BJX0lPX1JBTkdFKSB7CiAJCWZsYWdzID0gSU9SRVNPVVJDRV9JTzsKIAkJcm9vdCA9ICZpb3BvcnRfcmVzb3VyY2U7Ci0JCW9mZnNldCA9IGFkZF9pb19zcGFjZSgmYWRkcik7CisJCW9mZnNldCA9IGFkZF9pb19zcGFjZShpbmZvLCAmYWRkcik7CiAJCWlmIChvZmZzZXQgPT0gfjApCiAJCQlyZXR1cm4gQUVfT0s7CiAJfSBlbHNlCkBAIC0yNDEsNyArMjk5LDcgQEAKIAl3aW5kb3ctPnJlc291cmNlLm5hbWUgPSBpbmZvLT5uYW1lOwogCXdpbmRvdy0+cmVzb3VyY2UuZmxhZ3MgPSBmbGFnczsKIAl3aW5kb3ctPnJlc291cmNlLnN0YXJ0ID0gYWRkci5taW5fYWRkcmVzc19yYW5nZSArIG9mZnNldDsKLQl3aW5kb3ctPnJlc291cmNlLmVuZCA9IGFkZHIubWF4X2FkZHJlc3NfcmFuZ2UgKyBvZmZzZXQ7CisJd2luZG93LT5yZXNvdXJjZS5lbmQgPSB3aW5kb3ctPnJlc291cmNlLnN0YXJ0ICsgYWRkci5hZGRyZXNzX2xlbmd0aCAtIDE7CiAJd2luZG93LT5yZXNvdXJjZS5jaGlsZCA9IE5VTEw7CiAJd2luZG93LT5vZmZzZXQgPSBvZmZzZXQ7CiAKQEAgLTczOSw3ICs3OTcsNyBAQAogewogCWludCBjb3VudCA9IG5yX3JlbGVhc2VkOwogCi0gCWNvdW50ICs9IChJQTY0X0xBU1RfREVWSUNFX1ZFQ1RPUiAtIGxhc3QpOworCWNvdW50ICs9IChJQTY0X0xBU1RfREVWSUNFX1ZFQ1RPUiAtIGxhc3QpOwogCiAJcmV0dXJuIGNvdW50OwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL2tlcm5lbC9pb19pbml0LmMgYi9hcmNoL2lhNjQvc24va2VybmVsL2lvX2luaXQuYwppbmRleCBiNGY1MDUzLi4wNWU0ZWE4IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24va2VybmVsL2lvX2luaXQuYworKysgYi9hcmNoL2lhNjQvc24va2VybmVsL2lvX2luaXQuYwpAQCAtMzQ5LDcgKzM0OSw3IEBACiAJCXJldHVybjsJCS8qYnVzICMgZG9lcyBub3QgZXhpc3QgKi8KIAlwcm9tX2J1c3NvZnRfcHRyID0gX192YShwcm9tX2J1c3NvZnRfcHRyKTsKIAotIAljb250cm9sbGVyID0ga2NhbGxvYygxLHNpemVvZihzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIpLCBHRlBfS0VSTkVMKTsKKyAJY29udHJvbGxlciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2lfY29udHJvbGxlciksIEdGUF9LRVJORUwpOwogCWNvbnRyb2xsZXItPnNlZ21lbnQgPSBzZWdtZW50OwogIAlpZiAoIWNvbnRyb2xsZXIpCiAgCQlCVUcoKTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9rZXJuZWwveHBjLmggYi9hcmNoL2lhNjQvc24va2VybmVsL3hwYy5oCmluZGV4IGZiY2VkYzcuLjU0ODNhOWYgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9rZXJuZWwveHBjLmgKKysrIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC94cGMuaApAQCAtMTYzLDcgKzE2Myw3IEBACiAJdTggdmVyc2lvbjsKIAl1NjQgaGVhcnRiZWF0OwogCXU2NCBoZWFydGJlYXRpbmdfdG9fbWFzazsKLQl1NjQga2RiX3N0YXR1czsJCS8qIDAgPSBtYWNoaW5lIHJ1bm5pbmcgKi8KKwl1NjQgaGVhcnRiZWF0X29mZmxpbmU7CS8qIGlmIDAsIGhlYXJ0YmVhdCBzaG91bGQgYmUgY2hhbmdpbmcgKi8KIAlpbnQgYWN0X25hc2lkOwogCWludCBhY3RfcGh5c19jcHVpZDsKIAl1NjQgdmFyc19wYXJ0X3BhOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL2tlcm5lbC94cGNfbWFpbi5jIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC94cGNfbWFpbi5jCmluZGV4IGNlY2UzYzcuLmI2MTcyMzYgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9rZXJuZWwveHBjX21haW4uYworKysgYi9hcmNoL2lhNjQvc24va2VybmVsL3hwY19tYWluLmMKQEAgLTU3LDYgKzU3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KICNpbmNsdWRlIDxhc20vc24vaW50ci5oPgogI2luY2x1ZGUgPGFzbS9zbi9zbl9zYWwuaD4KKyNpbmNsdWRlIDxhc20va2RlYnVnLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlICJ4cGMuaCIKIApAQCAtMTg4LDYgKzE4OSwxMSBAQAogCS5ub3RpZmllcl9jYWxsID0geHBjX3N5c3RlbV9yZWJvb3QsCiB9OwogCitzdGF0aWMgaW50IHhwY19zeXN0ZW1fZGllKHN0cnVjdCBub3RpZmllcl9ibG9jayAqLCB1bnNpZ25lZCBsb25nLCB2b2lkICopOworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayB4cGNfZGllX25vdGlmaWVyID0geworCS5ub3RpZmllcl9jYWxsID0geHBjX3N5c3RlbV9kaWUsCit9OworCiAKIC8qCiAgKiBUaW1lciBmdW5jdGlvbiB0byBlbmZvcmNlIHRoZSB0aW1lbGltaXQgb24gdGhlIHBhcnRpdGlvbiBkaXNlbmdhZ2UgcmVxdWVzdC4KQEAgLTk5Nyw2ICsxMDAzLDkgQEAKIAkvKiB0YWtlIG91cnNlbHZlcyBvZmYgb2YgdGhlIHJlYm9vdF9ub3RpZmllcl9saXN0ICovCiAJKHZvaWQpIHVucmVnaXN0ZXJfcmVib290X25vdGlmaWVyKCZ4cGNfcmVib290X25vdGlmaWVyKTsKIAorCS8qIHRha2Ugb3Vyc2VsdmVzIG9mZiBvZiB0aGUgZGllX25vdGlmaWVyIGxpc3QgKi8KKwkodm9pZCkgdW5yZWdpc3Rlcl9kaWVfbm90aWZpZXIoJnhwY19kaWVfbm90aWZpZXIpOworCiAJLyogY2xvc2UgZG93biBwcm90ZWN0aW9ucyBmb3IgSVBJIG9wZXJhdGlvbnMgKi8KIAl4cGNfcmVzdHJpY3RfSVBJX29wcygpOwogCkBAIC0xMDExLDYgKzEwMjAsNjMgQEAKIAogCiAvKgorICogQ2FsbGVkIHdoZW4gdGhlIHN5c3RlbSBpcyBhYm91dCB0byBiZSBlaXRoZXIgcmVzdGFydGVkIG9yIGhhbHRlZC4KKyAqLworc3RhdGljIHZvaWQKK3hwY19kaWVfZGlzZW5nYWdlKHZvaWQpCit7CisJc3RydWN0IHhwY19wYXJ0aXRpb24gKnBhcnQ7CisJcGFydGlkX3QgcGFydGlkOworCXVuc2lnbmVkIGxvbmcgZW5nYWdlZDsKKwlsb25nIHRpbWUsIHByaW50X3RpbWUsIGRpc2VuZ2FnZV9yZXF1ZXN0X3RpbWVvdXQ7CisKKworCS8qIGtlZXAgeHBjX2hiX2NoZWNrZXIgdGhyZWFkIGZyb20gZG9pbmcgYW55dGhpbmcgKGp1c3QgaW4gY2FzZSkgKi8KKwl4cGNfZXhpdGluZyA9IDE7CisKKwl4cGNfdmFycy0+aGVhcnRiZWF0aW5nX3RvX21hc2sgPSAwOyAgLyogaW5kaWNhdGUgd2UncmUgZGVhY3RpdmF0ZWQgKi8KKworCWZvciAocGFydGlkID0gMTsgcGFydGlkIDwgWFBfTUFYX1BBUlRJVElPTlM7IHBhcnRpZCsrKSB7CisJCXBhcnQgPSAmeHBjX3BhcnRpdGlvbnNbcGFydGlkXTsKKworCQlpZiAoIVhQQ19TVVBQT1JUU19ESVNFTkdBR0VfUkVRVUVTVChwYXJ0LT4KKwkJCQkJCQlyZW1vdGVfdmFyc192ZXJzaW9uKSkgeworCisJCQkvKiBqdXN0IGluIGNhc2UgaXQgd2FzIGxlZnQgc2V0IGJ5IGFuIGVhcmxpZXIgWFBDICovCisJCQl4cGNfY2xlYXJfcGFydGl0aW9uX2VuZ2FnZWQoMVVMIDw8IHBhcnRpZCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmICh4cGNfcGFydGl0aW9uX2VuZ2FnZWQoMVVMIDw8IHBhcnRpZCkgfHwKKwkJCQkJcGFydC0+YWN0X3N0YXRlICE9IFhQQ19QX0lOQUNUSVZFKSB7CisJCQl4cGNfcmVxdWVzdF9wYXJ0aXRpb25fZGlzZW5nYWdlKHBhcnQpOworCQkJeHBjX21hcmtfcGFydGl0aW9uX2Rpc2VuZ2FnZWQocGFydCk7CisJCQl4cGNfSVBJX3NlbmRfZGlzZW5nYWdlKHBhcnQpOworCQl9CisJfQorCisJcHJpbnRfdGltZSA9IHJ0Y190aW1lKCk7CisJZGlzZW5nYWdlX3JlcXVlc3RfdGltZW91dCA9IHByaW50X3RpbWUgKworCQkoeHBjX2Rpc2VuZ2FnZV9yZXF1ZXN0X3RpbWVsaW1pdCAqIHNuX3J0Y19jeWNsZXNfcGVyX3NlY29uZCk7CisKKwkvKiB3YWl0IGZvciBhbGwgb3RoZXIgcGFydGl0aW9ucyB0byBkaXNlbmdhZ2UgZnJvbSB1cyAqLworCisJd2hpbGUgKChlbmdhZ2VkID0geHBjX3BhcnRpdGlvbl9lbmdhZ2VkKC0xVUwpKSAmJgorCQkJKHRpbWUgPSBydGNfdGltZSgpKSA8IGRpc2VuZ2FnZV9yZXF1ZXN0X3RpbWVvdXQpIHsKKworCQlpZiAodGltZSA+PSBwcmludF90aW1lKSB7CisJCQlkZXZfaW5mbyh4cGNfcGFydCwgIndhaXRpbmcgZm9yIHJlbW90ZSBwYXJ0aXRpb25zIHRvICIKKwkJCQkiZGlzZW5nYWdlLCBlbmdhZ2VkPTB4JWx4XG4iLCBlbmdhZ2VkKTsKKwkJCXByaW50X3RpbWUgPSB0aW1lICsgKFhQQ19ESVNFTkdBR0VfUFJJTlRNU0dfSU5URVJWQUwgKgorCQkJCQkJc25fcnRjX2N5Y2xlc19wZXJfc2Vjb25kKTsKKwkJfQorCX0KKwlkZXZfaW5mbyh4cGNfcGFydCwgImZpbmlzaGVkIHdhaXRpbmcgZm9yIHJlbW90ZSBwYXJ0aXRpb25zIHRvICIKKwkJCQkiZGlzZW5nYWdlLCBlbmdhZ2VkPTB4JWx4XG4iLCBlbmdhZ2VkKTsKK30KKworCisvKgogICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgc3lzdGVtIGlzIGJlaW5nIHJlYm9vdGVkLgogICovCiBzdGF0aWMgaW50CkBAIC0xMDM4LDYgKzExMDQsMzMgQEAKIH0KIAogCisvKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgc3lzdGVtIGlzIGJlaW5nIHJlYm9vdGVkLgorICovCitzdGF0aWMgaW50Cit4cGNfc3lzdGVtX2RpZShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICp1bnVzZWQpCit7CisJc3dpdGNoIChldmVudCkgeworCWNhc2UgRElFX01BQ0hJTkVfUkVTVEFSVDoKKwljYXNlIERJRV9NQUNISU5FX0hBTFQ6CisJCXhwY19kaWVfZGlzZW5nYWdlKCk7CisJCWJyZWFrOworCWNhc2UgRElFX01DQV9NT05BUkNIX0VOVEVSOgorCWNhc2UgRElFX0lOSVRfTU9OQVJDSF9FTlRFUjoKKwkJeHBjX3ZhcnMtPmhlYXJ0YmVhdCsrOworCQl4cGNfdmFycy0+aGVhcnRiZWF0X29mZmxpbmUgPSAxOworCQlicmVhazsKKwljYXNlIERJRV9NQ0FfTU9OQVJDSF9MRUFWRToKKwljYXNlIERJRV9JTklUX01PTkFSQ0hfTEVBVkU6CisJCXhwY192YXJzLT5oZWFydGJlYXQrKzsKKwkJeHBjX3ZhcnMtPmhlYXJ0YmVhdF9vZmZsaW5lID0gMDsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIE5PVElGWV9ET05FOworfQorCisKIGludCBfX2luaXQKIHhwY19pbml0KHZvaWQpCiB7CkBAIC0xMTU0LDYgKzEyNDcsMTIgQEAKIAkJZGV2X3dhcm4oeHBjX3BhcnQsICJjYW4ndCByZWdpc3RlciByZWJvb3Qgbm90aWZpZXJcbiIpOwogCX0KIAorCS8qIGFkZCBvdXJzZWx2ZXMgdG8gdGhlIGRpZV9ub3RpZmllciBsaXN0IChpLmUuLCBpYTY0ZGllX2NoYWluKSAqLworCXJldCA9IHJlZ2lzdGVyX2RpZV9ub3RpZmllcigmeHBjX2RpZV9ub3RpZmllcik7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl93YXJuKHhwY19wYXJ0LCAiY2FuJ3QgcmVnaXN0ZXIgZGllIG5vdGlmaWVyXG4iKTsKKwl9CisKIAogCS8qCiAJICogU2V0IHRoZSBiZWF0aW5nIHRvIG90aGVyIHBhcnRpdGlvbnMgaW50byBtb3Rpb24uICBUaGlzIGlzCkBAIC0xMTc5LDYgKzEyNzgsOSBAQAogCQkvKiB0YWtlIG91cnNlbHZlcyBvZmYgb2YgdGhlIHJlYm9vdF9ub3RpZmllcl9saXN0ICovCiAJCSh2b2lkKSB1bnJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigmeHBjX3JlYm9vdF9ub3RpZmllcik7CiAKKwkJLyogdGFrZSBvdXJzZWx2ZXMgb2ZmIG9mIHRoZSBkaWVfbm90aWZpZXIgbGlzdCAqLworCQkodm9pZCkgdW5yZWdpc3Rlcl9kaWVfbm90aWZpZXIoJnhwY19kaWVfbm90aWZpZXIpOworCiAJCWRlbF90aW1lcl9zeW5jKCZ4cGNfaGJfdGltZXIpOwogCQlmcmVlX2lycShTR0lfWFBDX0FDVElWQVRFLCBOVUxMKTsKIAkJeHBjX3Jlc3RyaWN0X0lQSV9vcHMoKTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9rZXJuZWwveHBjX3BhcnRpdGlvbi5jIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC94cGNfcGFydGl0aW9uLmMKaW5kZXggNTgxZTExMy4uY2RkNjQzMSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL2tlcm5lbC94cGNfcGFydGl0aW9uLmMKKysrIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC94cGNfcGFydGl0aW9uLmMKQEAgLTQzNiwxMyArNDM2LDEzIEBACiAJCX0KIAogCQlkZXZfZGJnKHhwY19wYXJ0LCAicGFydGlkID0gJWQsIGhlYXJ0YmVhdCA9ICVsZCwgbGFzdF9oZWFydGJlYXQiCi0JCQkiID0gJWxkLCBrZGJfc3RhdHVzID0gJWxkLCBIQl9tYXNrID0gMHglbHhcbiIsIHBhcnRpZCwKLQkJCXJlbW90ZV92YXJzLT5oZWFydGJlYXQsIHBhcnQtPmxhc3RfaGVhcnRiZWF0LAotCQkJcmVtb3RlX3ZhcnMtPmtkYl9zdGF0dXMsCisJCQkiID0gJWxkLCBoZWFydGJlYXRfb2ZmbGluZSA9ICVsZCwgSEJfbWFzayA9IDB4JWx4XG4iLAorCQkJcGFydGlkLCByZW1vdGVfdmFycy0+aGVhcnRiZWF0LCBwYXJ0LT5sYXN0X2hlYXJ0YmVhdCwKKwkJCXJlbW90ZV92YXJzLT5oZWFydGJlYXRfb2ZmbGluZSwKIAkJCXJlbW90ZV92YXJzLT5oZWFydGJlYXRpbmdfdG9fbWFzayk7CiAKIAkJaWYgKCgocmVtb3RlX3ZhcnMtPmhlYXJ0YmVhdCA9PSBwYXJ0LT5sYXN0X2hlYXJ0YmVhdCkgJiYKLQkJCShyZW1vdGVfdmFycy0+a2RiX3N0YXR1cyA9PSAwKSkgfHwKKwkJCShyZW1vdGVfdmFycy0+aGVhcnRiZWF0X29mZmxpbmUgPT0gMCkpIHx8CiAJCQkgICAgICF4cGNfaGJfYWxsb3dlZChzbl9wYXJ0aXRpb25faWQsIHJlbW90ZV92YXJzKSkgewogCiAJCQlYUENfREVBQ1RJVkFURV9QQVJUSVRJT04ocGFydCwgeHBjTm9IZWFydGJlYXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL3BjaS9wY2lici9wY2licl9wcm92aWRlci5jIGIvYXJjaC9pYTY0L3NuL3BjaS9wY2lici9wY2licl9wcm92aWRlci5jCmluZGV4IDdiMDNiODAuLjFmNTAwYzggMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9wY2kvcGNpYnIvcGNpYnJfcHJvdmlkZXIuYworKysgYi9hcmNoL2lhNjQvc24vcGNpL3BjaWJyL3BjaWJyX3Byb3ZpZGVyLmMKQEAgLTIxMiwxMyArMjEyLDEzIEBACiAJCSAgICBwZGlfcGNpYnVzX2luZm87CiAKIAkJLyogRGlzYWJsZSB0aGUgZGV2aWNlJ3MgSVJRICAgKi8KLQkJcGNpcmVnX2ludHJfZW5hYmxlX2JpdF9jbHIocGNpYnVzX2luZm8sIGJpdCk7CisJCXBjaXJlZ19pbnRyX2VuYWJsZV9iaXRfY2xyKHBjaWJ1c19pbmZvLCAoMSA8PCBiaXQpKTsKIAogCQkvKiBDaGFuZ2UgdGhlIGRldmljZSdzIElSUSAgICAqLwogCQlwY2lyZWdfaW50cl9hZGRyX2FkZHJfc2V0KHBjaWJ1c19pbmZvLCBiaXQsIHh0YWxrX2FkZHIpOwogCiAJCS8qIFJlLWVuYWJsZSB0aGUgZGV2aWNlJ3MgSVJRICovCi0JCXBjaXJlZ19pbnRyX2VuYWJsZV9iaXRfc2V0KHBjaWJ1c19pbmZvLCBiaXQpOworCQlwY2lyZWdfaW50cl9lbmFibGVfYml0X3NldChwY2lidXNfaW5mbywgKDEgPDwgYml0KSk7CiAKIAkJcGNpYnJfZm9yY2VfaW50ZXJydXB0KHNuX2lycV9pbmZvKTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24vcGNpL3BjaWJyL3BjaWJyX3JlZy5jIGIvYXJjaC9pYTY0L3NuL3BjaS9wY2lici9wY2licl9yZWcuYwppbmRleCA0ZjcxOGMzLi41ZDUzNDA5IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24vcGNpL3BjaWJyL3BjaWJyX3JlZy5jCisrKyBiL2FyY2gvaWE2NC9zbi9wY2kvcGNpYnIvcGNpYnJfcmVnLmMKQEAgLTEzMSw3ICsxMzEsNyBAQAogCQkJX19zbl9jbHJxX3JlbGF4ZWQoJnB0ci0+dGlvLmNwX2ludF9lbmFibGUsIGJpdHMpOwogCQkJYnJlYWs7CiAJCWNhc2UgUENJQlJfQlJJREdFVFlQRV9QSUM6Ci0JCQlfX3NuX2NscnFfcmVsYXhlZCgmcHRyLT5waWMucF9pbnRfZW5hYmxlLCB+Yml0cyk7CisJCQlfX3NuX2NscnFfcmVsYXhlZCgmcHRyLT5waWMucF9pbnRfZW5hYmxlLCBiaXRzKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJcGFuaWMKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9wY2kvdGlvY2VfcHJvdmlkZXIuYyBiL2FyY2gvaWE2NC9zbi9wY2kvdGlvY2VfcHJvdmlkZXIuYwppbmRleCA5ZjAzZDRlLi5kZGExOTZjIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24vcGNpL3Rpb2NlX3Byb3ZpZGVyLmMKKysrIGIvYXJjaC9pYTY0L3NuL3BjaS90aW9jZV9wcm92aWRlci5jCkBAIC0yMTgsNyArMjE4LDcgQEAKIAlpZiAoaSA+IGxhc3QpCiAJCXJldHVybiAwOwogCi0JbWFwID0ga2NhbGxvYygxLCBzaXplb2Yoc3RydWN0IHRpb2NlX2RtYW1hcCksIEdGUF9BVE9NSUMpOworCW1hcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB0aW9jZV9kbWFtYXApLCBHRlBfQVRPTUlDKTsKIAlpZiAoIW1hcCkKIAkJcmV0dXJuIDA7CiAKQEAgLTU1NSw3ICs1NTUsNyBAQAogCXN0cnVjdCB0aW9jZSAqdGlvY2VfbW1yOwogCXN0cnVjdCB0aW9jZV9rZXJuZWwgKnRpb2NlX2tlcm47CiAKLQl0aW9jZV9rZXJuID0ga2NhbGxvYygxLCBzaXplb2Yoc3RydWN0IHRpb2NlX2tlcm5lbCksIEdGUF9LRVJORUwpOworCXRpb2NlX2tlcm4gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdGlvY2Vfa2VybmVsKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF0aW9jZV9rZXJuKSB7CiAJCXJldHVybiBOVUxMOwogCX0KQEAgLTcyNyw3ICs3MjcsNyBAQAogCSAqIEFsbG9jYXRlIGtlcm5lbCBidXMgc29mdCBhbmQgY29weSBmcm9tIHByb20uCiAJICovCiAKLQl0aW9jZV9jb21tb24gPSBrY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgdGlvY2VfY29tbW9uKSwgR0ZQX0tFUk5FTCk7CisJdGlvY2VfY29tbW9uID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHRpb2NlX2NvbW1vbiksIEdGUF9LRVJORUwpOwogCWlmICghdGlvY2VfY29tbW9uKQogCQlyZXR1cm4gTlVMTDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL20zMnIva2VybmVsL3Byb2Nlc3MuYwppbmRleCBlYTEzYThmLi5jYzRiNTcxIDEwMDY0NAotLS0gYS9hcmNoL20zMnIva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL20zMnIva2VybmVsL3Byb2Nlc3MuYwpAQCAtMTA0LDcgKzEwNCw5IEBACiAKIAkJCWlkbGUoKTsKIAkJfQorCQlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7CiAJCXNjaGVkdWxlKCk7CisJCXByZWVtcHRfZGlzYWJsZSgpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC9zbXBib290LmMgYi9hcmNoL20zMnIva2VybmVsL3NtcGJvb3QuYwppbmRleCA2NDBkNTkyLi5iOTBjNTQxIDEwMDY0NAotLS0gYS9hcmNoL20zMnIva2VybmVsL3NtcGJvb3QuYworKysgYi9hcmNoL20zMnIva2VybmVsL3NtcGJvb3QuYwpAQCAtNDI2LDYgKzQyNiw3IEBACiBpbnQgX19pbml0IHN0YXJ0X3NlY29uZGFyeSh2b2lkICp1bnVzZWQpCiB7CiAJY3B1X2luaXQoKTsKKwlwcmVlbXB0X2Rpc2FibGUoKTsKIAlzbXBfY2FsbGluKCk7CiAJd2hpbGUgKCFjcHVfaXNzZXQoc21wX3Byb2Nlc3Nvcl9pZCgpLCBzbXBfY29tbWVuY2VkX21hc2spKQogCQljcHVfcmVsYXgoKTsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9tNjhrL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggMTFiMWI5MC4uMTNkMTA5MzIgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvbTY4ay9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0xMDIsNyArMTAyLDkgQEAKIAl3aGlsZSAoMSkgewogCQl3aGlsZSAoIW5lZWRfcmVzY2hlZCgpKQogCQkJaWRsZSgpOworCQlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7CiAJCXNjaGVkdWxlKCk7CisJCXByZWVtcHRfZGlzYWJsZSgpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vc2V0dXAuYyBiL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL3NldHVwLmMKaW5kZXggMWVmMTVkNS4uNGYyMWY0MiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vc2V0dXAuYworKysgYi9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9zZXR1cC5jCkBAIC0xMTEsMTcgKzExMSw2IEBACiAgICAgfQogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfRkJfRTEzNTYKLQlpZiAoKGFyZ3B0ciA9IHN0cnN0cihhcmdwdHIsICJ2aWRlbz0iKSkgPT0gTlVMTCkgewotCQlhcmdwdHIgPSBwcm9tX2dldGNtZGxpbmUoKTsKLSNpZmRlZiBDT05GSUdfTUlQU19QQjEwMDAKLQkJc3RyY2F0KGFyZ3B0ciwgIiB2aWRlbz1lMTM1NmZiOnN5c3RlbTpwYjEwMDAsbW11bmFsaWduOjEiKTsKLSNlbHNlCi0JCXN0cmNhdChhcmdwdHIsICIgdmlkZW89ZTEzNTZmYjpzeXN0ZW06cGIxNTAwIik7Ci0jZW5kaWYKLQl9Ci0jZW5kaWYKLQogI2lmZGVmIENPTkZJR19GQl9YUEVSVDk4CiAJaWYgKChhcmdwdHIgPSBzdHJzdHIoYXJncHRyLCAidmlkZW89IikpID09IE5VTEwpIHsKIAkJYXJncHRyID0gcHJvbV9nZXRjbWRsaW5lKCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9kZGI1NDc2X2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2RkYjU0NzZfZGVmY29uZmlnCmluZGV4IGIyNjBlNTEuLjMyNmYzYWEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2RkYjU0NzZfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2RkYjU0NzZfZGVmY29uZmlnCkBAIC02NTgsNyArNjU4LDYgQEAKICMgQ09ORklHX0ZCX1NNSVZHWCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9DWUJMQSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9UUklERU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0UxMzU2IGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9qbXIzOTI3X2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2ptcjM5MjdfZGVmY29uZmlnCmluZGV4IDlhNzI4YzIuLjYzOTBhNzUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2ptcjM5MjdfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2ptcjM5MjdfZGVmY29uZmlnCkBAIC02MjgsNyArNjI4LDYgQEAKICMgQ09ORklHX0ZCX1NNSVZHWCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9DWUJMQSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9UUklERU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0UxMzU2IGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9vY2Vsb3RfM19kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9vY2Vsb3RfM19kZWZjb25maWcKaW5kZXggZmZiMjNmYy4uZjE4ZDA1YyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3Mvb2NlbG90XzNfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL29jZWxvdF8zX2RlZmNvbmZpZwpAQCAtNzU4LDcgKzc1OCw2IEBACiAjIENPTkZJR19GQl9TTUlWR1ggaXMgbm90IHNldAogIyBDT05GSUdfRkJfQ1lCTEEgaXMgbm90IHNldAogIyBDT05GSUdfRkJfVFJJREVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9FMTM1NiBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvcG54ODU1MC12MnBjaV9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9wbng4NTUwLXYycGNpX2RlZmNvbmZpZwppbmRleCAwNWU2NTIwLi4zN2JkOGQ1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9wbng4NTUwLXYycGNpX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9wbng4NTUwLXYycGNpX2RlZmNvbmZpZwpAQCAtODk3LDcgKzg5Nyw2IEBACiAjIENPTkZJR19GQl9TTUlWR1ggaXMgbm90IHNldAogIyBDT05GSUdfRkJfQ1lCTEEgaXMgbm90IHNldAogIyBDT05GSUdfRkJfVFJJREVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9FMTM1NiBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvcmJobWE0NTAwX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL3JiaG1hNDUwMF9kZWZjb25maWcKaW5kZXggMmJjNjFjYS4uODk3NDIwZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvcmJobWE0NTAwX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9yYmhtYTQ1MDBfZGVmY29uZmlnCkBAIC04NzYsNyArODc2LDYgQEAKICMgQ09ORklHX0ZCX1NNSVZHWCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9DWUJMQSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9UUklERU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0UxMzU2IGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2lvY3RsMzIuYyBiL2FyY2gvbWlwcy9rZXJuZWwvaW9jdGwzMi5jCmluZGV4IGVkOWIyZGEuLjllYTFmYzcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvaW9jdGwzMi5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvaW9jdGwzMi5jCkBAIC0yNiwxMCArMjYsOCBAQAogI2RlZmluZSBDT0RFCiAjaW5jbHVkZSAiY29tcGF0X2lvY3RsLmMiCiAKLXR5cGVkZWYgaW50ICgqIGlvY3RsMzJfaGFuZGxlcl90KSh1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZywgc3RydWN0IGZpbGUgKik7Ci0KICNkZWZpbmUgQ09NUEFUSUJMRV9JT0NUTChjbWQpCQlIQU5ETEVfSU9DVEwoKGNtZCksc3lzX2lvY3RsKQotI2RlZmluZSBIQU5ETEVfSU9DVEwoY21kLGhhbmRsZXIpCXsgKGNtZCksIChpb2N0bDMyX2hhbmRsZXJfdCkoaGFuZGxlciksIE5VTEwgfSwKKyNkZWZpbmUgSEFORExFX0lPQ1RMKGNtZCxoYW5kbGVyKQl7IChjbWQpLCAoaW9jdGxfdHJhbnNfaGFuZGxlcl90KShoYW5kbGVyKSwgTlVMTCB9LAogI2RlZmluZSBJT0NUTF9UQUJMRV9TVEFSVCBcCiAJc3RydWN0IGlvY3RsX3RyYW5zIGlvY3RsX3N0YXJ0W10gPSB7CiAjZGVmaW5lIElPQ1RMX1RBQkxFX0VORCBcCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvbWlwcy9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDRmZTNkNTcuLmRkNzI1NzcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvcHJvY2Vzcy5jCkBAIC01Miw3ICs1Miw5IEBACiAJCXdoaWxlICghbmVlZF9yZXNjaGVkKCkpCiAJCQlpZiAoY3B1X3dhaXQpCiAJCQkJKCpjcHVfd2FpdCkoKTsKKwkJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOwogCQlzY2hlZHVsZSgpOworCQlwcmVlbXB0X2Rpc2FibGUoKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc21wLmMgYi9hcmNoL21pcHMva2VybmVsL3NtcC5jCmluZGV4IGZjYWNmMWEuLjI1NDcyZmMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zbXAuYwpAQCAtODIsNyArODIsNyBAQAogICovCiBhc21saW5rYWdlIHZvaWQgc3RhcnRfc2Vjb25kYXJ5KHZvaWQpCiB7Ci0JdW5zaWduZWQgaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwl1bnNpZ25lZCBpbnQgY3B1OwogCiAJY3B1X3Byb2JlKCk7CiAJY3B1X3JlcG9ydCgpOwpAQCAtOTUsNiArOTUsOCBAQAogCSAqLwogCiAJY2FsaWJyYXRlX2RlbGF5KCk7CisJcHJlZW1wdF9kaXNhYmxlKCk7CisJY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCWNwdV9kYXRhW2NwdV0udWRlbGF5X3ZhbCA9IGxvb3BzX3Blcl9qaWZmeTsKIAogCXByb21fc21wX2ZpbmlzaCgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3R4NDkzOC90b3NoaWJhX3JidHg0OTM4L2lycS5jIGIvYXJjaC9taXBzL3R4NDkzOC90b3NoaWJhX3JidHg0OTM4L2lycS5jCmluZGV4IDIzMGY1YTkuLjljZDljMGYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy90eDQ5MzgvdG9zaGliYV9yYnR4NDkzOC9pcnEuYworKysgYi9hcmNoL21pcHMvdHg0OTM4L3Rvc2hpYmFfcmJ0eDQ5MzgvaXJxLmMKQEAgLTg0LDcgKzg0LDYgQEAKICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL3JlYm9vdC5oPgogI2luY2x1ZGUgPGFzbS90aW1lLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KICNpbmNsdWRlIDxhc20vdHg0OTM4L3JidHg0OTM4Lmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9hc20tb2Zmc2V0cy5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL2FzbS1vZmZzZXRzLmMKaW5kZXggMWFkNDRmOS4uZTIzYzRlMSAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL2FzbS1vZmZzZXRzLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL2FzbS1vZmZzZXRzLmMKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkX2luZm8uaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPgogCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL3Byb2Nlc3MuYwppbmRleCA3ZmRjYTg3Li5mZWU0ZjFmIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTg4LDExICs4OCwxNSBAQAogICovCiB2b2lkIGNwdV9pZGxlKHZvaWQpCiB7CisJc2V0X3RocmVhZF9mbGFnKFRJRl9QT0xMSU5HX05SRkxBRyk7CisKIAkvKiBlbmRsZXNzIGlkbGUgbG9vcCB3aXRoIG5vIHByaW9yaXR5IGF0IGFsbCAqLwogCXdoaWxlICgxKSB7CiAJCXdoaWxlICghbmVlZF9yZXNjaGVkKCkpCiAJCQliYXJyaWVyKCk7CisJCXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWQoKTsKIAkJc2NoZWR1bGUoKTsKKwkJcHJlZW1wdF9kaXNhYmxlKCk7CiAJCWNoZWNrX3BndF9jYWNoZSgpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zbXAuYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9zbXAuYwppbmRleCA1ZGIzYmU0Li5hOWVjZjY0IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3NtcC5jCkBAIC00NjMsNiArNDYzLDcgQEAKICNlbmRpZgogCiAJc21wX2NwdV9pbml0KHNsYXZlX2lkKTsKKwlwcmVlbXB0X2Rpc2FibGUoKTsKIAogI2lmIDAJLyogTk9UIFdPUktJTkcgWUVUIC0gc2VlIGVudHJ5LlMgKi8KIAlpc3RhY2sgPSAodm9pZCAqKV9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCxJU1RBQ0tfT1JERVIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL0tjb25maWcgYi9hcmNoL3Bvd2VycGMvS2NvbmZpZwppbmRleCAxNDkzYzc4Li5jNTIzMDI5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvS2NvbmZpZwpAQCAtNTgxLDE3ICs1ODEsMTIgQEAKICAgICAgICBkZWZfYm9vbCB5CiAgICAgICAgZGVwZW5kcyBvbiBQUEM2NCAmJiAhTlVNQQogCi1jb25maWcgQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFCi0JZGVmX2Jvb2wgeQotCWRlcGVuZHMgb24gU01QICYmIFBQQ19QU0VSSUVTCi0KLWNvbmZpZyBBUkNIX0RJU0NPTlRJR01FTV9ERUZBVUxUCi0JZGVmX2Jvb2wgeQotCWRlcGVuZHMgb24gQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFCi0KIGNvbmZpZyBBUkNIX1NQQVJTRU1FTV9FTkFCTEUKIAlkZWZfYm9vbCB5Ci0JZGVwZW5kcyBvbiBBUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUKKworY29uZmlnIEFSQ0hfU1BBUlNFTUVNX0RFRkFVTFQKKwlkZWZfYm9vbCB5CisJZGVwZW5kcyBvbiBTTVAgJiYgUFBDX1BTRVJJRVMKIAogc291cmNlICJtbS9LY29uZmlnIgogCkBAIC01OTksNiArNTk0LDEwIEBACiAJZGVmX2Jvb2wgeQogCWRlcGVuZHMgb24gTkVFRF9NVUxUSVBMRV9OT0RFUwogCitjb25maWcgQVJDSF9NRU1PUllfUFJPQkUKKwlkZWZfYm9vbCB5CisJZGVwZW5kcyBvbiBNRU1PUllfSE9UUExVRworCiAjIFNvbWUgTlVNQSBub2RlcyBoYXZlIG1lbW9yeSByYW5nZXMgdGhhdCBzcGFuCiAjIG90aGVyIG5vZGVzLiAgRXZlbiB0aG91Z2ggYSBwZm4gaXMgdmFsaWQgYW5kCiAjIGJldHdlZW4gYSBub2RlJ3Mgc3RhcnQgYW5kIGVuZCBwZm5zLCBpdCBtYXkgbm90CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9NYWtlZmlsZQppbmRleCBiM2FlMjk5Li45YTc0YjdhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvTWFrZWZpbGUKQEAgLTQsNiArNCw3IEBACiAKIGlmZXEgKCQoQ09ORklHX1BQQzY0KSx5KQogRVhUUkFfQ0ZMQUdTCSs9IC1tbm8tbWluaW1hbC10b2MKK0NGTEFHU19pb2N0bDMyLm8gKz0gLUlmcy8KIGVuZGlmCiBpZmVxICgkKENPTkZJR19QUEMzMikseSkKIENGTEFHU19wcm9tX2luaXQubyAgICAgICs9IC1mUElDCkBAIC0xMSwxNyArMTIsMjkgQEAKIGVuZGlmCiAKIG9iai15CQkJCTo9IHNlbWFwaG9yZS5vIGNwdXRhYmxlLm8gcHRyYWNlLm8gc3lzY2FsbHMubyBcCi0JCQkJICAgc2lnbmFsXzMyLm8gcG1jLm8KKwkJCQkgICBpcnEubyBzaWduYWxfMzIubyBwbWMubyB2ZHNvLm8KK29iai15CQkJCSs9IHZkc28zMi8KIG9iai0kKENPTkZJR19QUEM2NCkJCSs9IHNldHVwXzY0Lm8gYmluZm10X2VsZjMyLm8gc3lzX3BwYzMyLm8gXAotCQkJCSAgIHNpZ25hbF82NC5vIHB0cmFjZTMyLm8gc3lzdGJsLm8KKwkJCQkgICBzaWduYWxfNjQubyBwdHJhY2UzMi5vIHN5c3RibC5vIFwKKwkJCQkgICBwYWNhLm8gaW9jdGwzMi5vIGNwdV9zZXR1cF9wb3dlcjQubyBcCisJCQkJICAgZmlybXdhcmUubyBzeXNmcy5vIHVkYmcubworb2JqLSQoQ09ORklHX1BQQzY0KQkJKz0gdmRzbzY0Lwogb2JqLSQoQ09ORklHX0FMVElWRUMpCQkrPSB2ZWNlbXUubyB2ZWN0b3Iubwogb2JqLSQoQ09ORklHX1BPV0VSNCkJCSs9IGlkbGVfcG93ZXI0Lm8KIG9iai0kKENPTkZJR19QUENfT0YpCQkrPSBvZl9kZXZpY2Uubwotb2JqLSQoQ09ORklHX1BQQ19SVEFTKQkJKz0gcnRhcy5vCitwcm9jZnMtJChDT05GSUdfUFBDNjQpCQk6PSBwcm9jX3BwYzY0Lm8KK29iai0kKENPTkZJR19QUk9DX0ZTKQkJKz0gJChwcm9jZnMteSkKK3J0YXNwY2ktJChDT05GSUdfUFBDNjQpCQk6PSBydGFzX3BjaS5vCitvYmotJChDT05GSUdfUFBDX1JUQVMpCQkrPSBydGFzLm8gJChydGFzcGNpLXkpCiBvYmotJChDT05GSUdfUlRBU19GTEFTSCkJKz0gcnRhc19mbGFzaC5vCiBvYmotJChDT05GSUdfUlRBU19QUk9DKQkJKz0gcnRhcy1wcm9jLm8KK29iai0kKENPTkZJR19MUEFSQ0ZHKQkJKz0gbHBhcmNmZy5vCiBvYmotJChDT05GSUdfSUJNVklPKQkJKz0gdmlvLm8KIG9iai0kKENPTkZJR19HRU5FUklDX1RCU1lOQykJKz0gc21wLXRic3luYy5vCitvYmotJChDT05GSUdfUFBDX1BTRVJJRVMpCSs9IHVkYmdfMTY1NTAubworb2JqLSQoQ09ORklHX1BQQ19NQVBMRSkJCSs9IHVkYmdfMTY1NTAubwordWRiZ3NjYy0kKENPTkZJR19QUEM2NCkJCTo9IHVkYmdfc2NjLm8KK29iai0kKENPTkZJR19QUENfUE1BQykJCSs9ICQodWRiZ3NjYy15KQogCiBpZmVxICgkKENPTkZJR19QUENfTUVSR0UpLHkpCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvYXNtLW9mZnNldHMuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvYXNtLW9mZnNldHMuYwppbmRleCBiNzU3NTcyLi40NTUwZWI0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2FzbS1vZmZzZXRzLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCkBAIC0zNywxMiArMzcsMTIgQEAKICNpbmNsdWRlIDxhc20vY3B1dGFibGUuaD4KICNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KICNpbmNsdWRlIDxhc20vcnRhcy5oPgorI2luY2x1ZGUgPGFzbS92ZHNvX2RhdGFwYWdlLmg+CiAjaWZkZWYgQ09ORklHX1BQQzY0CiAjaW5jbHVkZSA8YXNtL3BhY2EuaD4KICNpbmNsdWRlIDxhc20vbHBwYWNhLmg+CiAjaW5jbHVkZSA8YXNtL2lzZXJpZXMvaHZfbHBfZXZlbnQuaD4KICNpbmNsdWRlIDxhc20vY2FjaGUuaD4KLSNpbmNsdWRlIDxhc20vc3lzdGVtY2ZnLmg+CiAjaW5jbHVkZSA8YXNtL2NvbXBhdC5oPgogI2VuZGlmCiAKQEAgLTEwNiw3ICsxMDYsNiBAQAogCURFRklORShJQ0FDSEVMMUxJTkVTSVpFLCBvZmZzZXRvZihzdHJ1Y3QgcHBjNjRfY2FjaGVzLCBpbGluZV9zaXplKSk7CiAJREVGSU5FKElDQUNIRUwxTE9HTElORVNJWkUsIG9mZnNldG9mKHN0cnVjdCBwcGM2NF9jYWNoZXMsIGxvZ19pbGluZV9zaXplKSk7CiAJREVGSU5FKElDQUNIRUwxTElORVNQRVJQQUdFLCBvZmZzZXRvZihzdHJ1Y3QgcHBjNjRfY2FjaGVzLCBpbGluZXNfcGVyX3BhZ2UpKTsKLQlERUZJTkUoUExBVEZPUk0sIG9mZnNldG9mKHN0cnVjdCBzeXN0ZW1jZmcsIHBsYXRmb3JtKSk7CiAJREVGSU5FKFBMQVRGT1JNX0xQQVIsIFBMQVRGT1JNX0xQQVIpOwogCiAJLyogcGFjYSAqLwpAQCAtMjUyLDI1ICsyNTEsNDIgQEAKIAogCURFRklORShUQVNLX1NJWkUsIFRBU0tfU0laRSk7CiAJREVGSU5FKE5VTV9VU0VSX1NFR01FTlRTLCBUQVNLX1NJWkU+PjI4KTsKLSNlbHNlIC8qIENPTkZJR19QUEM2NCAqLwotCS8qIHN5c3RlbWNmZyBvZmZzZXRzIGZvciB1c2UgYnkgdmRzbyAqLwotCURFRklORShDRkdfVEJfT1JJR19TVEFNUCwgb2Zmc2V0b2Yoc3RydWN0IHN5c3RlbWNmZywgdGJfb3JpZ19zdGFtcCkpOwotCURFRklORShDRkdfVEJfVElDS1NfUEVSX1NFQywgb2Zmc2V0b2Yoc3RydWN0IHN5c3RlbWNmZywgdGJfdGlja3NfcGVyX3NlYykpOwotCURFRklORShDRkdfVEJfVE9fWFMsIG9mZnNldG9mKHN0cnVjdCBzeXN0ZW1jZmcsIHRiX3RvX3hzKSk7Ci0JREVGSU5FKENGR19TVEFNUF9YU0VDLCBvZmZzZXRvZihzdHJ1Y3Qgc3lzdGVtY2ZnLCBzdGFtcF94c2VjKSk7Ci0JREVGSU5FKENGR19UQl9VUERBVEVfQ09VTlQsIG9mZnNldG9mKHN0cnVjdCBzeXN0ZW1jZmcsIHRiX3VwZGF0ZV9jb3VudCkpOwotCURFRklORShDRkdfVFpfTUlOVVRFV0VTVCwgb2Zmc2V0b2Yoc3RydWN0IHN5c3RlbWNmZywgdHpfbWludXRlc3dlc3QpKTsKLQlERUZJTkUoQ0ZHX1RaX0RTVFRJTUUsIG9mZnNldG9mKHN0cnVjdCBzeXN0ZW1jZmcsIHR6X2RzdHRpbWUpKTsKLQlERUZJTkUoQ0ZHX1NZU0NBTExfTUFQMzIsIG9mZnNldG9mKHN0cnVjdCBzeXN0ZW1jZmcsIHN5c2NhbGxfbWFwXzMyKSk7Ci0JREVGSU5FKENGR19TWVNDQUxMX01BUDY0LCBvZmZzZXRvZihzdHJ1Y3Qgc3lzdGVtY2ZnLCBzeXNjYWxsX21hcF82NCkpOworI2VuZGlmIC8qICEgQ09ORklHX1BQQzY0ICovCiAKLQkvKiB0aW1ldmFsL3RpbWV6b25lIG9mZnNldHMgZm9yIHVzZSBieSB2ZHNvICovCisJLyogZGF0YXBhZ2Ugb2Zmc2V0cyBmb3IgdXNlIGJ5IHZkc28gKi8KKwlERUZJTkUoQ0ZHX1RCX09SSUdfU1RBTVAsIG9mZnNldG9mKHN0cnVjdCB2ZHNvX2RhdGEsIHRiX29yaWdfc3RhbXApKTsKKwlERUZJTkUoQ0ZHX1RCX1RJQ0tTX1BFUl9TRUMsIG9mZnNldG9mKHN0cnVjdCB2ZHNvX2RhdGEsIHRiX3RpY2tzX3Blcl9zZWMpKTsKKwlERUZJTkUoQ0ZHX1RCX1RPX1hTLCBvZmZzZXRvZihzdHJ1Y3QgdmRzb19kYXRhLCB0Yl90b194cykpOworCURFRklORShDRkdfU1RBTVBfWFNFQywgb2Zmc2V0b2Yoc3RydWN0IHZkc29fZGF0YSwgc3RhbXBfeHNlYykpOworCURFRklORShDRkdfVEJfVVBEQVRFX0NPVU5ULCBvZmZzZXRvZihzdHJ1Y3QgdmRzb19kYXRhLCB0Yl91cGRhdGVfY291bnQpKTsKKwlERUZJTkUoQ0ZHX1RaX01JTlVURVdFU1QsIG9mZnNldG9mKHN0cnVjdCB2ZHNvX2RhdGEsIHR6X21pbnV0ZXN3ZXN0KSk7CisJREVGSU5FKENGR19UWl9EU1RUSU1FLCBvZmZzZXRvZihzdHJ1Y3QgdmRzb19kYXRhLCB0el9kc3R0aW1lKSk7CisJREVGSU5FKENGR19TWVNDQUxMX01BUDMyLCBvZmZzZXRvZihzdHJ1Y3QgdmRzb19kYXRhLCBzeXNjYWxsX21hcF8zMikpOworCURFRklORShXVE9NX0NMT0NLX1NFQywgb2Zmc2V0b2Yoc3RydWN0IHZkc29fZGF0YSwgd3RvbV9jbG9ja19zZWMpKTsKKwlERUZJTkUoV1RPTV9DTE9DS19OU0VDLCBvZmZzZXRvZihzdHJ1Y3QgdmRzb19kYXRhLCB3dG9tX2Nsb2NrX25zZWMpKTsKKyNpZmRlZiBDT05GSUdfUFBDNjQKKwlERUZJTkUoQ0ZHX1NZU0NBTExfTUFQNjQsIG9mZnNldG9mKHN0cnVjdCB2ZHNvX2RhdGEsIHN5c2NhbGxfbWFwXzY0KSk7CiAJREVGSU5FKFRWQUw2NF9UVl9TRUMsIG9mZnNldG9mKHN0cnVjdCB0aW1ldmFsLCB0dl9zZWMpKTsKIAlERUZJTkUoVFZBTDY0X1RWX1VTRUMsIG9mZnNldG9mKHN0cnVjdCB0aW1ldmFsLCB0dl91c2VjKSk7CiAJREVGSU5FKFRWQUwzMl9UVl9TRUMsIG9mZnNldG9mKHN0cnVjdCBjb21wYXRfdGltZXZhbCwgdHZfc2VjKSk7CiAJREVGSU5FKFRWQUwzMl9UVl9VU0VDLCBvZmZzZXRvZihzdHJ1Y3QgY29tcGF0X3RpbWV2YWwsIHR2X3VzZWMpKTsKKwlERUZJTkUoVFNQQzMyX1RWX1NFQywgb2Zmc2V0b2Yoc3RydWN0IGNvbXBhdF90aW1lc3BlYywgdHZfc2VjKSk7CisJREVGSU5FKFRTUEMzMl9UVl9OU0VDLCBvZmZzZXRvZihzdHJ1Y3QgY29tcGF0X3RpbWVzcGVjLCB0dl9uc2VjKSk7CisjZWxzZQorCURFRklORShUVkFMMzJfVFZfU0VDLCBvZmZzZXRvZihzdHJ1Y3QgdGltZXZhbCwgdHZfc2VjKSk7CisJREVGSU5FKFRWQUwzMl9UVl9VU0VDLCBvZmZzZXRvZihzdHJ1Y3QgdGltZXZhbCwgdHZfdXNlYykpOworCURFRklORShUU1BFQzMyX1RWX1NFQywgb2Zmc2V0b2Yoc3RydWN0IHRpbWVzcGVjLCB0dl9zZWMpKTsKKwlERUZJTkUoVFNQRUMzMl9UVl9OU0VDLCBvZmZzZXRvZihzdHJ1Y3QgdGltZXNwZWMsIHR2X25zZWMpKTsKKyNlbmRpZgorCS8qIHRpbWV2YWwvdGltZXpvbmUgb2Zmc2V0cyBmb3IgdXNlIGJ5IHZkc28gKi8KIAlERUZJTkUoVFpPTkVfVFpfTUlOV0VTVCwgb2Zmc2V0b2Yoc3RydWN0IHRpbWV6b25lLCB0el9taW51dGVzd2VzdCkpOwogCURFRklORShUWk9ORV9UWl9EU1RUSU1FLCBvZmZzZXRvZihzdHJ1Y3QgdGltZXpvbmUsIHR6X2RzdHRpbWUpKTsKLSNlbmRpZiAvKiBDT05GSUdfUFBDNjQgKi8KKworCS8qIE90aGVyIGJpdHMgdXNlZCBieSB0aGUgdmRzbyAqLworCURFRklORShDTE9DS19SRUFMVElNRSwgQ0xPQ0tfUkVBTFRJTUUpOworCURFRklORShDTE9DS19NT05PVE9OSUMsIENMT0NLX01PTk9UT05JQyk7CisJREVGSU5FKE5TRUNfUEVSX1NFQywgTlNFQ19QRVJfU0VDKTsKKwlERUZJTkUoQ0xPQ0tfUkVBTFRJTUVfUkVTLCBUSUNLX05TRUMpOworCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC9jcHVfc2V0dXBfcG93ZXI0LlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NwdV9zZXR1cF9wb3dlcjQuUwpzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBhcmNoL3BwYzY0L2tlcm5lbC9jcHVfc2V0dXBfcG93ZXI0LlMKcmVuYW1lIHRvIGFyY2gvcG93ZXJwYy9rZXJuZWwvY3B1X3NldHVwX3Bvd2VyNC5TCmluZGV4IDFmYjY3M2M1Li5jY2E5NDJmIDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC9jcHVfc2V0dXBfcG93ZXI0LlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHVfc2V0dXBfcG93ZXI0LlMKQEAgLTExNCwxMSArMTE0LDExIEBACiAKIAkuZGF0YQogCS5iYWxpZ24JTDFfQ0FDSEVfQllURVMsMAotY3B1X3N0YXRlX3N0b3JhZ2U6CQorY3B1X3N0YXRlX3N0b3JhZ2U6CiAJLnNwYWNlCUNTX1NJWkUKIAkuYmFsaWduCUwxX0NBQ0hFX0JZVEVTLDAKIAkudGV4dAotCQorCiAvKiBDYWxsZWQgaW4gbm9ybWFsIGNvbnRleHQgdG8gYmFja3VwIENQVSAwIHN0YXRlLiBUaGlzCiAgKiBkb2VzIG5vdCBpbmNsdWRlIGNhY2hlIHNldHRpbmdzLiBUaGlzIGZ1bmN0aW9uIGlzIGFsc28KICAqIGNhbGxlZCBmb3IgbWFjaGluZSBzbGVlcC4gVGhpcyBkb2VzIG5vdCBpbmNsdWRlIHRoZSBNTVUKQEAgLTE1MSw3ICsxNTEsNyBAQAogCXN0ZAlyMyxDU19ISUQ0KHI1KQogCW1mc3ByCXIzLFNQUk5fSElENQogCXN0ZAlyMyxDU19ISUQ1KHI1KQotCQorCiAyOgogCW10Y3IJcjcKIAlibHIKQEAgLTIxMyw3ICsyMTMsNyBAQAogCW10c3ByCVNQUk5fSElEMSxyMwogCXN5bmMKIAlpc3luYwotCQorCiAJLyogUmVzdG9yZSBISUQ0ICovCiAJbGQJcjMsQ1NfSElENChyNSkKIAlzeW5jCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2NwdXRhYmxlLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NwdXRhYmxlLmMKaW5kZXggY2M0ZTllYi4uMWQ4NWNlZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHV0YWJsZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYwpAQCAtNTIsNiArNTIsOSBAQAogI2RlZmluZSBDT01NT05fVVNFUgkJKFBQQ19GRUFUVVJFXzMyIHwgUFBDX0ZFQVRVUkVfSEFTX0ZQVSB8IFwKIAkJCQkgUFBDX0ZFQVRVUkVfSEFTX01NVSkKICNkZWZpbmUgQ09NTU9OX1VTRVJfUFBDNjQJKENPTU1PTl9VU0VSIHwgUFBDX0ZFQVRVUkVfNjQpCisjZGVmaW5lIENPTU1PTl9VU0VSX1BPV0VSNAkoQ09NTU9OX1VTRVJfUFBDNjQgfCBQUENfRkVBVFVSRV9QT1dFUjQpCisjZGVmaW5lIENPTU1PTl9VU0VSX1BPV0VSNQkoQ09NTU9OX1VTRVJfUFBDNjQgfCBQUENfRkVBVFVSRV9QT1dFUjUpCisjZGVmaW5lIENPTU1PTl9VU0VSX1BPV0VSNV9QTFVTCShDT01NT05fVVNFUl9QUEM2NCB8IFBQQ19GRUFUVVJFX1BPV0VSNV9QTFVTKQogCiAKIC8qIFdlIG9ubHkgc2V0IHRoZSBzcGUgZmVhdHVyZXMgaWYgdGhlIGtlcm5lbCB3YXMgY29tcGlsZWQgd2l0aApAQCAtMTYwLDcgKzE2Myw3IEBACiAJCS5wdnJfdmFsdWUJCT0gMHgwMDM1MDAwMCwKIAkJLmNwdV9uYW1lCQk9ICJQT1dFUjQgKGdwKSIsCiAJCS5jcHVfZmVhdHVyZXMJCT0gQ1BVX0ZUUlNfUE9XRVI0LAotCQkuY3B1X3VzZXJfZmVhdHVyZXMJPSBDT01NT05fVVNFUl9QUEM2NCwKKwkJLmNwdV91c2VyX2ZlYXR1cmVzCT0gQ09NTU9OX1VTRVJfUE9XRVI0LAogCQkuaWNhY2hlX2JzaXplCQk9IDEyOCwKIAkJLmRjYWNoZV9ic2l6ZQkJPSAxMjgsCiAJCS5udW1fcG1jcwkJPSA4LApAQCAtMTc1LDcgKzE3OCw3IEBACiAJCS5wdnJfdmFsdWUJCT0gMHgwMDM4MDAwMCwKIAkJLmNwdV9uYW1lCQk9ICJQT1dFUjQrIChncSkiLAogCQkuY3B1X2ZlYXR1cmVzCQk9IENQVV9GVFJTX1BPV0VSNCwKLQkJLmNwdV91c2VyX2ZlYXR1cmVzCT0gQ09NTU9OX1VTRVJfUFBDNjQsCisJCS5jcHVfdXNlcl9mZWF0dXJlcwk9IENPTU1PTl9VU0VSX1BPV0VSNCwKIAkJLmljYWNoZV9ic2l6ZQkJPSAxMjgsCiAJCS5kY2FjaGVfYnNpemUJCT0gMTI4LAogCQkubnVtX3BtY3MJCT0gOCwKQEAgLTE5MCw3ICsxOTMsNyBAQAogCQkucHZyX3ZhbHVlCQk9IDB4MDAzOTAwMDAsCiAJCS5jcHVfbmFtZQkJPSAiUFBDOTcwIiwKIAkJLmNwdV9mZWF0dXJlcwkJPSBDUFVfRlRSU19QUEM5NzAsCi0JCS5jcHVfdXNlcl9mZWF0dXJlcwk9IENPTU1PTl9VU0VSX1BQQzY0IHwKKwkJLmNwdV91c2VyX2ZlYXR1cmVzCT0gQ09NTU9OX1VTRVJfUE9XRVI0IHwKIAkJCVBQQ19GRUFUVVJFX0hBU19BTFRJVkVDX0NPTVAsCiAJCS5pY2FjaGVfYnNpemUJCT0gMTI4LAogCQkuZGNhY2hlX2JzaXplCQk9IDEyOCwKQEAgLTIxMiw3ICsyMTUsNyBAQAogI2Vsc2UKIAkJLmNwdV9mZWF0dXJlcwkJPSBDUFVfRlRSU19QUEM5NzAsCiAjZW5kaWYKLQkJLmNwdV91c2VyX2ZlYXR1cmVzCT0gQ09NTU9OX1VTRVJfUFBDNjQgfAorCQkuY3B1X3VzZXJfZmVhdHVyZXMJPSBDT01NT05fVVNFUl9QT1dFUjQgfAogCQkJUFBDX0ZFQVRVUkVfSEFTX0FMVElWRUNfQ09NUCwKIAkJLmljYWNoZV9ic2l6ZQkJPSAxMjgsCiAJCS5kY2FjaGVfYnNpemUJCT0gMTI4LApAQCAtMjMwLDcgKzIzMyw3IEBACiAJCS5wdnJfdmFsdWUJCT0gMHgwMDQ0MDAwMCwKIAkJLmNwdV9uYW1lCQk9ICJQUEM5NzBNUCIsCiAJCS5jcHVfZmVhdHVyZXMJCT0gQ1BVX0ZUUlNfUFBDOTcwLAotCQkuY3B1X3VzZXJfZmVhdHVyZXMJPSBDT01NT05fVVNFUl9QUEM2NCB8CisJCS5jcHVfdXNlcl9mZWF0dXJlcwk9IENPTU1PTl9VU0VSX1BPV0VSNCB8CiAJCQlQUENfRkVBVFVSRV9IQVNfQUxUSVZFQ19DT01QLAogCQkuaWNhY2hlX2JzaXplCQk9IDEyOCwKIAkJLmRjYWNoZV9ic2l6ZQkJPSAxMjgsCkBAIC0yNDUsNyArMjQ4LDcgQEAKIAkJLnB2cl92YWx1ZQkJPSAweDAwM2EwMDAwLAogCQkuY3B1X25hbWUJCT0gIlBPV0VSNSAoZ3IpIiwKIAkJLmNwdV9mZWF0dXJlcwkJPSBDUFVfRlRSU19QT1dFUjUsCi0JCS5jcHVfdXNlcl9mZWF0dXJlcwk9IENPTU1PTl9VU0VSX1BQQzY0LAorCQkuY3B1X3VzZXJfZmVhdHVyZXMJPSBDT01NT05fVVNFUl9QT1dFUjUsCiAJCS5pY2FjaGVfYnNpemUJCT0gMTI4LAogCQkuZGNhY2hlX2JzaXplCQk9IDEyOCwKIAkJLm51bV9wbWNzCQk9IDYsCkBAIC0yNjAsNyArMjYzLDcgQEAKIAkJLnB2cl92YWx1ZQkJPSAweDAwM2IwMDAwLAogCQkuY3B1X25hbWUJCT0gIlBPV0VSNSAoZ3MpIiwKIAkJLmNwdV9mZWF0dXJlcwkJPSBDUFVfRlRSU19QT1dFUjUsCi0JCS5jcHVfdXNlcl9mZWF0dXJlcwk9IENPTU1PTl9VU0VSX1BQQzY0LAorCQkuY3B1X3VzZXJfZmVhdHVyZXMJPSBDT01NT05fVVNFUl9QT1dFUjVfUExVUywKIAkJLmljYWNoZV9ic2l6ZQkJPSAxMjgsCiAJCS5kY2FjaGVfYnNpemUJCT0gMTI4LAogCQkubnVtX3BtY3MJCT0gNiwKQEAgLTI3Niw3ICsyNzksNyBAQAogCQkuY3B1X25hbWUJCT0gIkNlbGwgQnJvYWRiYW5kIEVuZ2luZSIsCiAJCS5jcHVfZmVhdHVyZXMJCT0gQ1BVX0ZUUlNfQ0VMTCwKIAkJLmNwdV91c2VyX2ZlYXR1cmVzCT0gQ09NTU9OX1VTRVJfUFBDNjQgfAotCQkJUFBDX0ZFQVRVUkVfSEFTX0FMVElWRUNfQ09NUCwKKwkJCVBQQ19GRUFUVVJFX0NFTEwgfCBQUENfRkVBVFVSRV9IQVNfQUxUSVZFQ19DT01QLAogCQkuaWNhY2hlX2JzaXplCQk9IDEyOCwKIAkJLmRjYWNoZV9ic2l6ZQkJPSAxMjgsCiAJCS5jcHVfc2V0dXAJCT0gX19zZXR1cF9jcHVfYmUsCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC9maXJtd2FyZS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9maXJtd2FyZS5jCnNpbWlsYXJpdHkgaW5kZXggOTclCnJlbmFtZSBmcm9tIGFyY2gvcHBjNjQva2VybmVsL2Zpcm13YXJlLmMKcmVuYW1lIHRvIGFyY2gvcG93ZXJwYy9rZXJuZWwvZmlybXdhcmUuYwppbmRleCBkODQzMmMwLi42NWVhZTc1IDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC9maXJtd2FyZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZmlybXdhcmUuYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiAgYXJjaC9wcGM2NC9rZXJuZWwvZmlybXdhcmUuYwotICoKICAqICBFeHRyYWN0ZWQgZnJvbSBjcHV0YWJsZS5jCiAgKgogICogIENvcHlyaWdodCAoQykgMjAwMSBCZW4uIEhlcnJlbnNjaG1pZHQgKGJlbmhAa2VybmVsLmNyYXNoaW5nLm9yZykKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZnB1LlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2ZwdS5TCmluZGV4IDRkNjAwMWYuLmI3ODBiNDIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZnB1LlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9mcHUuUwpAQCAtNDEsMjAgKzQxLDIwIEBACiAjaWZuZGVmIENPTkZJR19TTVAKIAlMT0FEQkFTRShyMywgbGFzdF90YXNrX3VzZWRfbWF0aCkKIAl0b3JlYWwocjMpCi0JTERMCXI0LE9GRihsYXN0X3Rhc2tfdXNlZF9tYXRoKShyMykKLQlDTVBJCTAscjQsMAorCVBQQ19MTAlyNCxPRkYobGFzdF90YXNrX3VzZWRfbWF0aCkocjMpCisJUFBDX0xDTVBJCTAscjQsMAogCWJlcQkxZgogCXRvcmVhbChyNCkKIAlhZGRpCXI0LHI0LFRIUkVBRAkJLyogd2FudCBsYXN0X3Rhc2tfdXNlZF9tYXRoLT50aHJlYWQgKi8KIAlTQVZFXzMyRlBSUygwLCByNCkKIAltZmZzCWZyMAogCXN0ZmQJZnIwLFRIUkVBRF9GUFNDUihyNCkKLQlMREwJcjUsUFRfUkVHUyhyNCkKKwlQUENfTEwJcjUsUFRfUkVHUyhyNCkKIAl0b3JlYWwocjUpCi0JTERMCXI0LF9NU1ItU1RBQ0tfRlJBTUVfT1ZFUkhFQUQocjUpCisJUFBDX0xMCXI0LF9NU1ItU1RBQ0tfRlJBTUVfT1ZFUkhFQUQocjUpCiAJbGkJcjEwLE1TUl9GUHxNU1JfRkUwfE1TUl9GRTEKIAlhbmRjCXI0LHI0LHIxMAkJLyogZGlzYWJsZSBGUCBmb3IgcHJldmlvdXMgdGFzayAqLwotCVNUTAlyNCxfTVNSLVNUQUNLX0ZSQU1FX09WRVJIRUFEKHI1KQorCVBQQ19TVEwJcjQsX01TUi1TVEFDS19GUkFNRV9PVkVSSEVBRChyNSkKIDE6CiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCS8qIGVuYWJsZSB1c2Ugb2YgRlAgYWZ0ZXIgcmV0dXJuICovCkBAIC03Nyw3ICs3Nyw3IEBACiAjaWZuZGVmIENPTkZJR19TTVAKIAlzdWJpCXI0LHI1LFRIUkVBRAogCWZyb21yZWFsKHI0KQotCVNUTAlyNCxPRkYobGFzdF90YXNrX3VzZWRfbWF0aCkocjMpCisJUFBDX1NUTAlyNCxPRkYobGFzdF90YXNrX3VzZWRfbWF0aCkocjMpCiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCS8qIHJlc3RvcmUgcmVnaXN0ZXJzIGFuZCByZXR1cm4gKi8KIAkvKiB3ZSBoYXZlbid0IHVzZWQgY3RyIG9yIHhlciBvciBsciAqLwpAQCAtOTcsMjQgKzk3LDI0IEBACiAJTVRNU1JEKHI1KQkJCS8qIGVuYWJsZSB1c2Ugb2YgZnB1IG5vdyAqLwogCVNZTkNfNjAxCiAJaXN5bmMKLQlDTVBJCTAscjMsMAorCVBQQ19MQ01QSQkwLHIzLDAKIAliZXFsci0JCQkJLyogaWYgbm8gcHJldmlvdXMgb3duZXIsIGRvbmUgKi8KIAlhZGRpCXIzLHIzLFRIUkVBRAkgICAgICAgIC8qIHdhbnQgVEhSRUFEIG9mIHRhc2sgKi8KLQlMREwJcjUsUFRfUkVHUyhyMykKLQlDTVBJCTAscjUsMAorCVBQQ19MTAlyNSxQVF9SRUdTKHIzKQorCVBQQ19MQ01QSQkwLHI1LDAKIAlTQVZFXzMyRlBSUygwLCByMykKIAltZmZzCWZyMAogCXN0ZmQJZnIwLFRIUkVBRF9GUFNDUihyMykKIAliZXEJMWYKLQlMREwJcjQsX01TUi1TVEFDS19GUkFNRV9PVkVSSEVBRChyNSkKKwlQUENfTEwJcjQsX01TUi1TVEFDS19GUkFNRV9PVkVSSEVBRChyNSkKIAlsaQlyMyxNU1JfRlB8TVNSX0ZFMHxNU1JfRkUxCiAJYW5kYwlyNCxyNCxyMwkJLyogZGlzYWJsZSBGUCBmb3IgcHJldmlvdXMgdGFzayAqLwotCVNUTAlyNCxfTVNSLVNUQUNLX0ZSQU1FX09WRVJIRUFEKHI1KQorCVBQQ19TVEwJcjQsX01TUi1TVEFDS19GUkFNRV9PVkVSSEVBRChyNSkKIDE6CiAjaWZuZGVmIENPTkZJR19TTVAKIAlsaQlyNSwwCiAJTE9BREJBU0UocjQsbGFzdF90YXNrX3VzZWRfbWF0aCkKLQlTVEwJcjUsT0ZGKGxhc3RfdGFza191c2VkX21hdGgpKHI0KQorCVBQQ19TVEwJcjUsT0ZGKGxhc3RfdGFza191c2VkX21hdGgpKHI0KQogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAlibHIKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzMyLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfMzIuUwppbmRleCBiMTAyZTNhLi5jY2RmOTQ3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfMzIuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfMzIuUwpAQCAtMTEwMCw2ICsxMTAwLDcgQEAKIAltcglyMyxyMzEKIAltcglyNCxyMzAKIAlibAltYWNoaW5lX2luaXQKKwlibAlfX3NhdmVfY3B1X3NldHVwCiAJYmwJTU1VX2luaXQKIAogI2lmZGVmIENPTkZJR19BUFVTCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfNjQuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF82NC5TCmluZGV4IDE2YWI0MGQuLjhhOGJmNzkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF82NC5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF82NC5TCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSA8YXNtL3JlZy5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL21tdS5oPgotI2luY2x1ZGUgPGFzbS9zeXN0ZW1jZmcuaD4KICNpbmNsdWRlIDxhc20vcHBjX2FzbS5oPgogI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgogI2luY2x1ZGUgPGFzbS9idWcuaD4KQEAgLTE2OTcsMjUgKzE2OTYsMTQgQEAKICAqICAgU1BSRzMgPSBwYWNhIHZpcnR1YWwgYWRkcmVzcwogICovCiBfR0xPQkFMKF9fc2Vjb25kYXJ5X3N0YXJ0KQorCS8qIFNldCB0aHJlYWQgcHJpb3JpdHkgdG8gTUVESVVNICovCisJSE1UX01FRElVTQogCi0JSE1UX01FRElVTQkJCS8qIFNldCB0aHJlYWQgcHJpb3JpdHkgdG8gTUVESVVNICovCi0KKwkvKiBMb2FkIFRPQyAqLwogCWxkCXIyLFBBQ0FUT0MocjEzKQotCWxpCXI2LDAKLQlzdGIJcjYsUEFDQVBST0NFTkFCTEVEKHIxMykKIAotI2lmbmRlZiBDT05GSUdfUFBDX0lTRVJJRVMKLQkvKiBJbml0aWFsaXplIHRoZSBwYWdlIHRhYmxlIHBvaW50ZXIgcmVnaXN0ZXIuICovCi0JTE9BREFERFIocjYsX1NEUjEpCi0JbGQJcjYsMChyNikJCS8qIGdldCB0aGUgdmFsdWUgb2YgX1NEUjEJICovCi0JbXRzcHIJU1BSTl9TRFIxLHI2CQkJLyogc2V0IHRoZSBodGFiIGxvY2F0aW9uCSAqLwotI2VuZGlmCi0JLyogSW5pdGlhbGl6ZSB0aGUgZmlyc3Qgc2VnbWVudCB0YWJsZSAob3IgU0xCKSBlbnRyeQkJICovCi0JbGQJcjMsUEFDQVNUQUJWSVJUKHIxMykJLyogZ2V0IGFkZHIgb2Ygc2VnbWVudCB0YWJsZQkgKi8KLUJFR0lOX0ZUUl9TRUNUSU9OCi0JYmwJLnN0YWJfaW5pdGlhbGl6ZQotRU5EX0ZUUl9TRUNUSU9OX0lGQ0xSKENQVV9GVFJfU0xCKQotCWJsCS5zbGJfaW5pdGlhbGl6ZQorCS8qIERvIGVhcmx5IHNldHVwIGZvciB0aGF0IENQVSAoc3RhYiwgc2xiLCBoYXNoIHRhYmxlIHBvaW50ZXIpICovCisJYmwJLmVhcmx5X3NldHVwX3NlY29uZGFyeQogCiAJLyogSW5pdGlhbGl6ZSB0aGUga2VybmVsIHN0YWNrLiAgSnVzdCBhIHJlcGVhdCBmb3IgaVNlcmllcy4JICovCiAJTE9BREFERFIocjMsY3VycmVudF9zZXQpCkBAIC0xNzI0LDM3ICsxNzEyLDcgQEAKIAlhZGRpCXIxLHIxLFRIUkVBRF9TSVpFLVNUQUNLX0ZSQU1FX09WRVJIRUFECiAJc3RkCXIxLFBBQ0FLU0FWRShyMTMpCiAKLQlsZAlyMyxQQUNBU1RBQlJFQUwocjEzKQkvKiBnZXQgcmFkZHIgb2Ygc2VnbWVudCB0YWJsZQkgKi8KLQlvcmkJcjQscjMsMQkJCS8qIHR1cm4gb24gdmFsaWQgYml0CQkgKi8KLQotI2lmZGVmIENPTkZJR19QUENfSVNFUklFUwotCWxpCXIwLC0xCQkJLyogaHlwZXJ2aXNvciBjYWxsICovCi0JbGkJcjMsMQotCXNsZGkJcjMscjMsNjMJCS8qIDB4ODAwMDAwMDAwMDAwMDAwMCAqLwotCW9yaQlyMyxyMyw0CQkJLyogMHg4MDAwMDAwMDAwMDAwMDA0ICovCi0Jc2MJCQkJLyogSHZDYWxsX3NldEFTUiAqLwotI2Vsc2UKLQkvKiBzZXQgdGhlIEFTUiAqLwotCWxkCXIzLHN5c3RlbWNmZ0Bnb3QocjIpCS8qIHIzID0gcHRyIHRvIHN5c3RlbWNmZwkgKi8KLQlsZAlyMywwKHIzKQotCWx3eglyMyxQTEFURk9STShyMykJCS8qIHIzID0gcGxhdGZvcm0gZmxhZ3MJCSAqLwotCWFuZGkuCXIzLHIzLFBMQVRGT1JNX0xQQVIJLyogVGVzdCBpZiBiaXQgMCBpcyBzZXQgKExQQVIgYml0KSAqLwotCWJlcQk5OGYJCQkvKiBicmFuY2ggaWYgcmVzdWx0IGlzIDAgICovCi0JbWZzcHIJcjMsU1BSTl9QVlIKLQlzcndpCXIzLHIzLDE2Ci0JY21wd2kJcjMsMHgzNwkJCS8qIFNTdGFyICAqLwotCWJlcQk5N2YKLQljbXB3aQlyMywweDM2CQkJLyogSVN0YXIgICovCi0JYmVxCTk3ZgotCWNtcHdpCXIzLDB4MzQJCQkvKiBQdWxzYXIgKi8KLQlibmUJOThmCi05NzoJbGkJcjMsSF9TRVRfQVNSCQkvKiBoY2FsbCA9IEhfU0VUX0FTUiAqLwotCUhWU0MJCQkJLyogSW52b2tpbmcgaGNhbGwgKi8KLQliCTk5ZgotOTg6CQkJCQkvKiAhKHJwYSBoeXBlcnZpc29yKSB8fCAhKHN0YXIpICAqLwotCW10YXNyCXI0CQkJLyogc2V0IHRoZSBzdGFiIGxvY2F0aW9uCSAqLwotOTk6Ci0jZW5kaWYKKwkvKiBDbGVhciBiYWNrY2hhaW4gc28gd2UgZ2V0IG5pY2UgYmFja3RyYWNlcyAqLwogCWxpCXI3LDAKIAltdGxyCXI3CiAKQEAgLTE3NzcsNiArMTczNSw3IEBACiAJbGkJcjMsMAogCXN0ZAlyMywwKHIxKQkJLyogWmVybyB0aGUgc3RhY2sgZnJhbWUgcG9pbnRlcgkqLwogCWJsCS5zdGFydF9zZWNvbmRhcnkKKwliCS4KICNlbmRpZgogCiAvKgpAQCAtMTg5Niw0MCArMTg1NSw2IEBACiAJbXIJcjMscjMxCiAgCWJsCS5lYXJseV9zZXR1cAogCi0JLyogc2V0IHRoZSBBU1IgKi8KLQlsZAlyMyxQQUNBU1RBQlJFQUwocjEzKQotCW9yaQlyNCxyMywxCQkJLyogdHVybiBvbiB2YWxpZCBiaXQJCSAqLwotCWxkCXIzLHN5c3RlbWNmZ0Bnb3QocjIpCS8qIHIzID0gcHRyIHRvIHN5c3RlbWNmZyAqLwotCWxkCXIzLDAocjMpCi0JbHd6CXIzLFBMQVRGT1JNKHIzKQkJLyogcjMgPSBwbGF0Zm9ybSBmbGFncyAqLwotCWFuZGkuCXIzLHIzLFBMQVRGT1JNX0xQQVIJLyogVGVzdCBpZiBiaXQgMCBpcyBzZXQgKExQQVIgYml0KSAqLwotCWJlcQk5OGYJCQkvKiBicmFuY2ggaWYgcmVzdWx0IGlzIDAgICovCi0JbWZzcHIJcjMsU1BSTl9QVlIKLQlzcndpCXIzLHIzLDE2Ci0JY21wd2kJcjMsMHgzNwkJCS8qIFNTdGFyICovCi0JYmVxCTk3ZgotCWNtcHdpCXIzLDB4MzYJCQkvKiBJU3RhciAgKi8KLQliZXEJOTdmCi0JY21wd2kJcjMsMHgzNAkJCS8qIFB1bHNhciAqLwotCWJuZQk5OGYKLTk3OglsaQlyMyxIX1NFVF9BU1IJCS8qIGhjYWxsID0gSF9TRVRfQVNSICovCi0JSFZTQwkJCQkvKiBJbnZva2luZyBoY2FsbCAqLwotCWIJOTlmCi05ODoJCQkJCS8qICEocnBhIGh5cGVydmlzb3IpIHx8ICEoc3RhcikgKi8KLQltdGFzcglyNAkJCS8qIHNldCB0aGUgc3RhYiBsb2NhdGlvbgkqLwotOTk6Ci0JLyogU2V0IFNEUjEgKGhhc2ggdGFibGUgcG9pbnRlcikgKi8KLQlsZAlyMyxzeXN0ZW1jZmdAZ290KHIyKQkvKiByMyA9IHB0ciB0byBzeXN0ZW1jZmcgKi8KLQlsZAlyMywwKHIzKQotCWx3eglyMyxQTEFURk9STShyMykJCS8qIHIzID0gcGxhdGZvcm0gZmxhZ3MgKi8KLQkvKiBUZXN0IGlmIGJpdCAwIGlzIHNldCAoTFBBUiBiaXQpICovCi0JYW5kaS4JcjMscjMsUExBVEZPUk1fTFBBUgotCWJuZQk5OGYJCQkvKiBicmFuY2ggaWYgcmVzdWx0IGlzICEwICAqLwotCUxPQURBRERSKHI2LF9TRFIxKQkJLyogT25seSBpZiBOT1QgTFBBUiAqLwotCWFkZAlyNixyNixyMjYKLQlsZAlyNiwwKHI2KQkJLyogZ2V0IHRoZSB2YWx1ZSBvZiBfU0RSMSAqLwotCW10c3ByCVNQUk5fU0RSMSxyNgkJCS8qIHNldCB0aGUgaHRhYiBsb2NhdGlvbiAgKi8KLTk4OiAKIAlMT0FEQUREUihyMywuc3RhcnRfaGVyZV9jb21tb24pCiAJU0VUX1JFR19UT19DT05TVChyNCwgTVNSX0tFUk5FTCkKIAltdHNwcglTUFJOX1NSUjAscjMKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL2lvY3RsMzIuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaW9jdGwzMi5jCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIGFyY2gvcHBjNjQva2VybmVsL2lvY3RsMzIuYwpyZW5hbWUgdG8gYXJjaC9wb3dlcnBjL2tlcm5lbC9pb2N0bDMyLmMKaW5kZXggYmE0YTg5OS4uM2ZhNmE5MyAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9rZXJuZWwvaW9jdGwzMi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaW9jdGwzMi5jCkBAIC0xLDYgKzEsNiBAQAotLyogCisvKgogICogaW9jdGwzMi5jOiBDb252ZXJzaW9uIGJldHdlZW4gMzJiaXQgYW5kIDY0Yml0IG5hdGl2ZSBpb2N0bHMuCi0gKiAKKyAqCiAgKiBCYXNlZCBvbiBzcGFyYzY0IGlvY3RsMzIuYyBieToKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTctMjAwMCAgSmFrdWIgSmVsaW5layAgKGpha3ViQHJlZGhhdC5jb20pCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC9pcnEuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaXJxLmMKc2ltaWxhcml0eSBpbmRleCA3MCUKcmVuYW1lIGZyb20gYXJjaC9wcGM2NC9rZXJuZWwvaXJxLmMKcmVuYW1lIHRvIGFyY2gvcG93ZXJwYy9rZXJuZWwvaXJxLmMKaW5kZXggODc0NzQ1OC4uNGI3OTQwNiAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pcnEuYwpAQCAtNSwxMiArNSwxMiBAQAogICogICAgQ29weXJpZ2h0IChDKSAxOTkyIExpbnVzIFRvcnZhbGRzCiAgKiAgQWRhcHRlZCBmcm9tIGFyY2gvaTM4NiBieSBHYXJ5IFRob21hcwogICogICAgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTYgR2FyeSBUaG9tYXMgKGdkdEBsaW51eHBwYy5vcmcpCi0gKiAgVXBkYXRlZCBhbmQgbW9kaWZpZWQgYnkgQ29ydCBEb3VnYW4gKGNvcnRAY3Mubm10LmVkdSkKLSAqICAgIENvcHlyaWdodCAoQykgMTk5NiBDb3J0IERvdWdhbgorICogIFVwZGF0ZWQgYW5kIG1vZGlmaWVkIGJ5IENvcnQgRG91Z2FuIDxjb3J0QGZzbWxhYnMuY29tPgorICogICAgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDEgQ29ydCBEb3VnYW4KICAqICBBZGFwdGVkIGZvciBQb3dlciBNYWNpbnRvc2ggYnkgUGF1bCBNYWNrZXJyYXMKICAqICAgIENvcHlyaWdodCAoQykgMTk5NiBQYXVsIE1hY2tlcnJhcyAocGF1bHVzQGNzLmFudS5lZHUuYXUpCiAgKiAgQW1pZ2EvQVBVUyBjaGFuZ2VzIGJ5IEplc3BlciBTa292IChqc2tvdkBjeWdudXMuY28udWspLgotICogCisgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgpAQCAtMjEsNiArMjEsMTQgQEAKICAqIGluc3RlYWQgb2YganVzdCBncmFiYmluZyB0aGVtLiBUaHVzIHNldHVwcyB3aXRoIGRpZmZlcmVudCBJUlEgbnVtYmVycwogICogc2hvdWxkbid0IHJlc3VsdCBpbiBhbnkgd2VpcmQgc3VycHJpc2VzLCBhbmQgaW5zdGFsbGluZyBuZXcgaGFuZGxlcnMKICAqIHNob3VsZCBiZSBlYXNpZXIuCisgKgorICogVGhlIE1QQzh4eCBoYXMgYW4gaW50ZXJydXB0IG1hc2sgaW4gdGhlIFNJVS4gIElmIGEgYml0IGlzIHNldCwgdGhlCisgKiBpbnRlcnJ1cHQgaXMgX2VuYWJsZWRfLiAgQXMgZXhwZWN0ZWQsIElSUTAgaXMgYml0IDAgaW4gdGhlIDMyLWJpdAorICogbWFzayByZWdpc3RlciAob2Ygd2hpY2ggb25seSAxNiBhcmUgZGVmaW5lZCksIGhlbmNlIHRoZSB3ZWlyZCBzaGlmdGluZworICogYW5kIGNvbXBsZW1lbnQgb2YgdGhlIGNhY2hlZF9pcnFfbWFzay4gIEkgd2FudCB0byBiZSBhYmxlIHRvIHN0dWZmCisgKiB0aGlzIHJpZ2h0IGludG8gdGhlIFNJVSBTTUFTSyByZWdpc3Rlci4KKyAqIE1hbnkgb2YgdGhlIHByZXAvY2hycCBmdW5jdGlvbnMgYXJlIGNvbmRpdGlvbmFsIGNvbXBpbGVkIG9uIENPTkZJR184eHgKKyAqIHRvIHJlZHVjZSBjb2RlIHNwYWNlIGFuZCB1bmRlZmluZWQgZnVuY3Rpb24gcmVmZXJlbmNlcy4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KQEAgLTI5LDYgKzM3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXguaD4KQEAgLTQwLDkgKzQ5LDEzIEBACiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgotI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2lmZGVmIENPTkZJR19QUEM2NAorI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CisjZW5kaWYKIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgpAQCAtNTIsMzUgKzY1LDU0IEBACiAjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+Ci0jaW5jbHVkZSA8YXNtL2lzZXJpZXMvaXRfbHBfcXVldWUuaD4KICNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgorI2lmZGVmIENPTkZJR19QUEM2NAorI2luY2x1ZGUgPGFzbS9pc2VyaWVzL2l0X2xwX3F1ZXVlLmg+CiAjaW5jbHVkZSA8YXNtL3BhY2EuaD4KLQotI2lmZGVmIENPTkZJR19TTVAKLWV4dGVybiB2b2lkIGlTZXJpZXNfc21wX21lc3NhZ2VfcmVjdiggc3RydWN0IHB0X3JlZ3MgKiApOwogI2VuZGlmCiAKLWV4dGVybiBpcnFfZGVzY190IGlycV9kZXNjW05SX0lSUVNdOworc3RhdGljIGludCBwcGNfc3B1cmlvdXNfaW50ZXJydXB0czsKKworI2lmIGRlZmluZWQoQ09ORklHX1BQQ19JU0VSSUVTKSAmJiBkZWZpbmVkKENPTkZJR19TTVApCitleHRlcm4gdm9pZCBpU2VyaWVzX3NtcF9tZXNzYWdlX3JlY3Yoc3RydWN0IHB0X3JlZ3MgKik7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19QUEMzMgorI2RlZmluZSBOUl9NQVNLX1dPUkRTCSgoTlJfSVJRUyArIDMxKSAvIDMyKQorCit1bnNpZ25lZCBsb25nIHBwY19jYWNoZWRfaXJxX21hc2tbTlJfTUFTS19XT1JEU107CithdG9taWNfdCBwcGNfbl9sb3N0X2ludGVycnVwdHM7CisKKyNpZmRlZiBDT05GSUdfVEFVX0lOVAorZXh0ZXJuIGludCB0YXVfaW5pdGlhbGl6ZWQ7CitleHRlcm4gaW50IHRhdV9pbnRlcnJ1cHRzKGludCk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX1NNUCkgJiYgIWRlZmluZWQoQ09ORklHX1BQQ19NRVJHRSkKK2V4dGVybiBhdG9taWNfdCBpcGlfcmVjdjsKK2V4dGVybiBhdG9taWNfdCBpcGlfc2VudDsKKyNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19QUEMzMiAqLworCisjaWZkZWYgQ09ORklHX1BQQzY0CiBFWFBPUlRfU1lNQk9MKGlycV9kZXNjKTsKIAogaW50IGRpc3RyaWJ1dGVfaXJxcyA9IDE7CiBpbnQgX19pcnFfb2Zmc2V0X3ZhbHVlOwotaW50IHBwY19zcHVyaW91c19pbnRlcnJ1cHRzOwogdTY0IHBwYzY0X2ludGVycnVwdF9jb250cm9sbGVyOworI2VuZGlmIC8qIENPTkZJR19QUEM2NCAqLwogCiBpbnQgc2hvd19pbnRlcnJ1cHRzKHN0cnVjdCBzZXFfZmlsZSAqcCwgdm9pZCAqdikKIHsKLQlpbnQgaSA9ICoobG9mZl90ICopIHYsIGo7Ci0Jc3RydWN0IGlycWFjdGlvbiAqIGFjdGlvbjsKKwlpbnQgaSA9ICoobG9mZl90ICopdiwgajsKKwlzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb247CiAJaXJxX2Rlc2NfdCAqZGVzYzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKGkgPT0gMCkgewotCQlzZXFfcHJpbnRmKHAsICIgICAgICAgICAgICIpOwotCQlmb3IgKGo9MDsgajxOUl9DUFVTOyBqKyspIHsKLQkJCWlmIChjcHVfb25saW5lKGopKQotCQkJCXNlcV9wcmludGYocCwgIkNQVSVkICAgICAgICIsaik7Ci0JCX0KKwkJc2VxX3B1dHMocCwgIiAgICAgICAgICAgIik7CisJCWZvcl9lYWNoX29ubGluZV9jcHUoaikKKwkJCXNlcV9wcmludGYocCwgIkNQVSVkICAgICAgICIsIGopOwogCQlzZXFfcHV0YyhwLCAnXG4nKTsKIAl9CiAKQEAgLTkyLDI2ICsxMjQsNDEgQEAKIAkJCWdvdG8gc2tpcDsKIAkJc2VxX3ByaW50ZihwLCAiJTNkOiAiLCBpKTsKICNpZmRlZiBDT05GSUdfU01QCi0JCWZvciAoaiA9IDA7IGogPCBOUl9DUFVTOyBqKyspIHsKLQkJCWlmIChjcHVfb25saW5lKGopKQotCQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfY3B1KGopLmlycXNbaV0pOwotCQl9CisJCWZvcl9lYWNoX29ubGluZV9jcHUoaikKKwkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfY3B1KGopLmlycXNbaV0pOwogI2Vsc2UKIAkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzKGkpKTsKICNlbmRpZiAvKiBDT05GSUdfU01QICovCiAJCWlmIChkZXNjLT5oYW5kbGVyKQotCQkJc2VxX3ByaW50ZihwLCAiICVzICIsIGRlc2MtPmhhbmRsZXItPnR5cGVuYW1lICk7CisJCQlzZXFfcHJpbnRmKHAsICIgJXMgIiwgZGVzYy0+aGFuZGxlci0+dHlwZW5hbWUpOwogCQllbHNlCi0JCQlzZXFfcHJpbnRmKHAsICIgIE5vbmUgICAgICAiKTsKKwkJCXNlcV9wdXRzKHAsICIgIE5vbmUgICAgICAiKTsKIAkJc2VxX3ByaW50ZihwLCAiJXMiLCAoZGVzYy0+c3RhdHVzICYgSVJRX0xFVkVMKSA/ICJMZXZlbCAiIDogIkVkZ2UgICIpOwotCQlzZXFfcHJpbnRmKHAsICIgICAgJXMiLGFjdGlvbi0+bmFtZSk7Ci0JCWZvciAoYWN0aW9uPWFjdGlvbi0+bmV4dDsgYWN0aW9uOyBhY3Rpb24gPSBhY3Rpb24tPm5leHQpCisJCXNlcV9wcmludGYocCwgIiAgICAlcyIsIGFjdGlvbi0+bmFtZSk7CisJCWZvciAoYWN0aW9uID0gYWN0aW9uLT5uZXh0OyBhY3Rpb247IGFjdGlvbiA9IGFjdGlvbi0+bmV4dCkKIAkJCXNlcV9wcmludGYocCwgIiwgJXMiLCBhY3Rpb24tPm5hbWUpOwogCQlzZXFfcHV0YyhwLCAnXG4nKTsKIHNraXA6CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKLQl9IGVsc2UgaWYgKGkgPT0gTlJfSVJRUykKKwl9IGVsc2UgaWYgKGkgPT0gTlJfSVJRUykgeworI2lmZGVmIENPTkZJR19QUEMzMgorI2lmZGVmIENPTkZJR19UQVVfSU5UCisJCWlmICh0YXVfaW5pdGlhbGl6ZWQpeworCQkJc2VxX3B1dHMocCwgIlRBVTogIik7CisJCQlmb3IgKGogPSAwOyBqIDwgTlJfQ1BVUzsgaisrKQorCQkJCWlmIChjcHVfb25saW5lKGopKQorCQkJCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIHRhdV9pbnRlcnJ1cHRzKGopKTsKKwkJCXNlcV9wdXRzKHAsICIgIFBvd2VyUEMgICAgICAgICAgICAgVGhlcm1hbCBBc3Npc3QgKGNwdSB0ZW1wKVxuIik7CisJCX0KKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX1NNUCkgJiYgIWRlZmluZWQoQ09ORklHX1BQQ19NRVJHRSkKKwkJLyogc2hvdWxkIHRoaXMgYmUgcGVyIHByb2Nlc3NvciBzZW5kL3JlY2VpdmU/ICovCisJCXNlcV9wcmludGYocCwgIklQSSAocmVjdi9zZW50KTogJTEwdS8ldVxuIiwKKwkJCQlhdG9taWNfcmVhZCgmaXBpX3JlY3YpLCBhdG9taWNfcmVhZCgmaXBpX3NlbnQpKTsKKyNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19QUEMzMiAqLwogCQlzZXFfcHJpbnRmKHAsICJCQUQ6ICUxMHVcbiIsIHBwY19zcHVyaW91c19pbnRlcnJ1cHRzKTsKKwl9CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE0NCwxMjYgKzE5MSw2IEBACiB9CiAjZW5kaWYKIAotZXh0ZXJuIGludCBub2lycWRlYnVnOwotCi0vKgotICogRXZlbnR1YWxseSwgdGhpcyBzaG91bGQgdGFrZSBhbiBhcnJheSBvZiBpbnRlcnJ1cHRzIGFuZCBhbiBhcnJheSBzaXplCi0gKiBzbyBpdCBjYW4gZGlzcGF0Y2ggbXVsdGlwbGUgaW50ZXJydXB0cy4KLSAqLwotdm9pZCBwcGNfaXJxX2Rpc3BhdGNoX2hhbmRsZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBpcnEpCi17Ci0JaW50IHN0YXR1czsKLQlzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb247Ci0JaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQlpcnFfZGVzY190ICpkZXNjID0gZ2V0X2lycV9kZXNjKGlycSk7Ci0JaXJxcmV0dXJuX3QgYWN0aW9uX3JldDsKLSNpZmRlZiBDT05GSUdfSVJRU1RBQ0tTCi0Jc3RydWN0IHRocmVhZF9pbmZvICpjdXJ0cCwgKmlycXRwOwotI2VuZGlmCi0KLQlrc3RhdF9jcHUoY3B1KS5pcnFzW2lycV0rKzsKLQotCWlmIChkZXNjLT5zdGF0dXMgJiBJUlFfUEVSX0NQVSkgewotCQkvKiBubyBsb2NraW5nIHJlcXVpcmVkIGZvciBDUFUtbG9jYWwgaW50ZXJydXB0czogKi8KLQkJYWNrX2lycShpcnEpOwotCQlhY3Rpb25fcmV0ID0gaGFuZGxlX0lSUV9ldmVudChpcnEsIHJlZ3MsIGRlc2MtPmFjdGlvbik7Ci0JCWRlc2MtPmhhbmRsZXItPmVuZChpcnEpOwotCQlyZXR1cm47Ci0JfQotCi0Jc3Bpbl9sb2NrKCZkZXNjLT5sb2NrKTsKLQlhY2tfaXJxKGlycSk7CQotCS8qCi0JICAgUkVQTEFZIGlzIHdoZW4gTGludXggcmVzZW5kcyBhbiBJUlEgdGhhdCB3YXMgZHJvcHBlZCBlYXJsaWVyCi0JICAgV0FJVElORyBpcyB1c2VkIGJ5IHByb2JlIHRvIG1hcmsgaXJxcyB0aGF0IGFyZSBiZWluZyB0ZXN0ZWQKLQkgICAqLwotCXN0YXR1cyA9IGRlc2MtPnN0YXR1cyAmIH4oSVJRX1JFUExBWSB8IElSUV9XQUlUSU5HKTsKLQlzdGF0dXMgfD0gSVJRX1BFTkRJTkc7IC8qIHdlIF93YW50XyB0byBoYW5kbGUgaXQgKi8KLQotCS8qCi0JICogSWYgdGhlIElSUSBpcyBkaXNhYmxlZCBmb3Igd2hhdGV2ZXIgcmVhc29uLCB3ZSBjYW5ub3QKLQkgKiB1c2UgdGhlIGFjdGlvbiB3ZSBoYXZlLgotCSAqLwotCWFjdGlvbiA9IE5VTEw7Ci0JaWYgKGxpa2VseSghKHN0YXR1cyAmIChJUlFfRElTQUJMRUQgfCBJUlFfSU5QUk9HUkVTUykpKSkgewotCQlhY3Rpb24gPSBkZXNjLT5hY3Rpb247Ci0JCWlmICghYWN0aW9uIHx8ICFhY3Rpb24tPmhhbmRsZXIpIHsKLQkJCXBwY19zcHVyaW91c19pbnRlcnJ1cHRzKys7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiVW5oYW5kbGVkIGludGVycnVwdCAleCwgZGlzYWJsZWRcbiIsIGlycSk7Ci0JCQkvKiBXZSBjYW4ndCBjYWxsIGRpc2FibGVfaXJxIGhlcmUsIGl0IHdvdWxkIGRlYWRsb2NrICovCi0JCQlpZiAoIWRlc2MtPmRlcHRoKQotCQkJCWRlc2MtPmRlcHRoID0gMTsKLQkJCWRlc2MtPnN0YXR1cyB8PSBJUlFfRElTQUJMRUQ7Ci0JCQkvKiBUaGlzIGlzIG5vdCBhIHJlYWwgc3B1cnJpb3VzIGludGVycnVwdCwgd2UKLQkJCSAqIGhhdmUgdG8gZW9pIGl0LCBzbyB3ZSBqdW1wIHRvIG91dAotCQkJICovCi0JCQltYXNrX2lycShpcnEpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQkJc3RhdHVzICY9IH5JUlFfUEVORElORzsgLyogd2UgY29tbWl0IHRvIGhhbmRsaW5nICovCi0JCXN0YXR1cyB8PSBJUlFfSU5QUk9HUkVTUzsgLyogd2UgYXJlIGhhbmRsaW5nIGl0ICovCi0JfQotCWRlc2MtPnN0YXR1cyA9IHN0YXR1czsKLQotCS8qCi0JICogSWYgdGhlcmUgaXMgbm8gSVJRIGhhbmRsZXIgb3IgaXQgd2FzIGRpc2FibGVkLCBleGl0IGVhcmx5LgotCSAgIFNpbmNlIHdlIHNldCBQRU5ESU5HLCBpZiBhbm90aGVyIHByb2Nlc3NvciBpcyBoYW5kbGluZwotCSAgIGEgZGlmZmVyZW50IGluc3RhbmNlIG9mIHRoaXMgc2FtZSBpcnEsIHRoZSBvdGhlciBwcm9jZXNzb3IKLQkgICB3aWxsIHRha2UgY2FyZSBvZiBpdC4KLQkgKi8KLQlpZiAodW5saWtlbHkoIWFjdGlvbikpCi0JCWdvdG8gb3V0OwotCi0JLyoKLQkgKiBFZGdlIHRyaWdnZXJlZCBpbnRlcnJ1cHRzIG5lZWQgdG8gcmVtZW1iZXIKLQkgKiBwZW5kaW5nIGV2ZW50cy4KLQkgKiBUaGlzIGFwcGxpZXMgdG8gYW55IGh3IGludGVycnVwdHMgdGhhdCBhbGxvdyBhIHNlY29uZAotCSAqIGluc3RhbmNlIG9mIHRoZSBzYW1lIGlycSB0byBhcnJpdmUgd2hpbGUgd2UgYXJlIGluIGRvX0lSUQotCSAqIG9yIGluIHRoZSBoYW5kbGVyLiBCdXQgdGhlIGNvZGUgaGVyZSBvbmx5IGhhbmRsZXMgdGhlIF9zZWNvbmRfCi0JICogaW5zdGFuY2Ugb2YgdGhlIGlycSwgbm90IHRoZSB0aGlyZCBvciBmb3VydGguIFNvIGl0IGlzIG1vc3RseQotCSAqIHVzZWZ1bCBmb3IgaXJxIGhhcmR3YXJlIHRoYXQgZG9lcyBub3QgbWFzayBjbGVhbmx5IGluIGFuCi0JICogU01QIGVudmlyb25tZW50LgotCSAqLwotCWZvciAoOzspIHsKLQkJc3Bpbl91bmxvY2soJmRlc2MtPmxvY2spOwotCi0jaWZkZWYgQ09ORklHX0lSUVNUQUNLUwotCQkvKiBTd2l0Y2ggdG8gdGhlIGlycSBzdGFjayB0byBoYW5kbGUgdGhpcyAqLwotCQljdXJ0cCA9IGN1cnJlbnRfdGhyZWFkX2luZm8oKTsKLQkJaXJxdHAgPSBoYXJkaXJxX2N0eFtzbXBfcHJvY2Vzc29yX2lkKCldOwotCQlpZiAoY3VydHAgIT0gaXJxdHApIHsKLQkJCWlycXRwLT50YXNrID0gY3VydHAtPnRhc2s7Ci0JCQlpcnF0cC0+ZmxhZ3MgPSAwOwotCQkJYWN0aW9uX3JldCA9IGNhbGxfaGFuZGxlX0lSUV9ldmVudChpcnEsIHJlZ3MsIGFjdGlvbiwgaXJxdHApOwotCQkJaXJxdHAtPnRhc2sgPSBOVUxMOwotCQkJaWYgKGlycXRwLT5mbGFncykKLQkJCQlzZXRfYml0cyhpcnF0cC0+ZmxhZ3MsICZjdXJ0cC0+ZmxhZ3MpOwotCQl9IGVsc2UKLSNlbmRpZgotCQkJYWN0aW9uX3JldCA9IGhhbmRsZV9JUlFfZXZlbnQoaXJxLCByZWdzLCBhY3Rpb24pOwotCi0JCXNwaW5fbG9jaygmZGVzYy0+bG9jayk7Ci0JCWlmICghbm9pcnFkZWJ1ZykKLQkJCW5vdGVfaW50ZXJydXB0KGlycSwgZGVzYywgYWN0aW9uX3JldCwgcmVncyk7Ci0JCWlmIChsaWtlbHkoIShkZXNjLT5zdGF0dXMgJiBJUlFfUEVORElORykpKQotCQkJYnJlYWs7Ci0JCWRlc2MtPnN0YXR1cyAmPSB+SVJRX1BFTkRJTkc7Ci0JfQotb3V0OgotCWRlc2MtPnN0YXR1cyAmPSB+SVJRX0lOUFJPR1JFU1M7Ci0JLyoKLQkgKiBUaGUgLT5lbmQoKSBoYW5kbGVyIGhhcyB0byBkZWFsIHdpdGggaW50ZXJydXB0cyB3aGljaCBnb3QKLQkgKiBkaXNhYmxlZCB3aGlsZSB0aGUgaGFuZGxlciB3YXMgcnVubmluZy4KLQkgKi8KLQlpZiAoZGVzYy0+aGFuZGxlcikgewotCQlpZiAoZGVzYy0+aGFuZGxlci0+ZW5kKQotCQkJZGVzYy0+aGFuZGxlci0+ZW5kKGlycSk7Ci0JCWVsc2UgaWYgKGRlc2MtPmhhbmRsZXItPmVuYWJsZSkKLQkJCWRlc2MtPmhhbmRsZXItPmVuYWJsZShpcnEpOwotCX0KLQlzcGluX3VubG9jaygmZGVzYy0+bG9jayk7Ci19Ci0KICNpZmRlZiBDT05GSUdfUFBDX0lTRVJJRVMKIHZvaWQgZG9fSVJRKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewpAQCAtMzEwLDggKzIzNywxMSBAQAogdm9pZCBkb19JUlEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJaW50IGlycTsKKyNpZmRlZiBDT05GSUdfSVJRU1RBQ0tTCisJc3RydWN0IHRocmVhZF9pbmZvICpjdXJ0cCwgKmlycXRwOworI2VuZGlmCiAKLQlpcnFfZW50ZXIoKTsKKyAgICAgICAgaXJxX2VudGVyKCk7CiAKICNpZmRlZiBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVwogCS8qIERlYnVnZ2luZyBjaGVjayBmb3Igc3RhY2sgb3ZlcmZsb3c6IGlzIHRoZXJlIGxlc3MgdGhhbiAyS0IgZnJlZT8gKi8KQEAgLTMyOCwyMCArMjU4LDQ0IEBACiAJfQogI2VuZGlmCiAKKwkvKgorCSAqIEV2ZXJ5IHBsYXRmb3JtIGlzIHJlcXVpcmVkIHRvIGltcGxlbWVudCBwcGNfbWQuZ2V0X2lycS4KKwkgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZWl0aGVyIHJldHVybiBhbiBpcnEgbnVtYmVyIG9yIC0xIHRvCisJICogaW5kaWNhdGUgdGhlcmUgYXJlIG5vIG1vcmUgcGVuZGluZy4KKwkgKiBUaGUgdmFsdWUgLTIgaXMgZm9yIGJ1Z2d5IGhhcmR3YXJlIGFuZCBtZWFucyB0aGF0IHRoaXMgSVJRCisJICogaGFzIGFscmVhZHkgYmVlbiBoYW5kbGVkLiAtLSBUb20KKwkgKi8KIAlpcnEgPSBwcGNfbWQuZ2V0X2lycShyZWdzKTsKIAotCWlmIChpcnEgPj0gMCkKLQkJcHBjX2lycV9kaXNwYXRjaF9oYW5kbGVyKHJlZ3MsIGlycSk7Ci0JZWxzZQotCQkvKiBUaGF0J3Mgbm90IFNNUCBzYWZlIC4uLiBidXQgd2hvIGNhcmVzID8gKi8KLQkJcHBjX3NwdXJpb3VzX2ludGVycnVwdHMrKzsKLQotCWlycV9leGl0KCk7CisJaWYgKGlycSA+PSAwKSB7CisjaWZkZWYgQ09ORklHX0lSUVNUQUNLUworCQkvKiBTd2l0Y2ggdG8gdGhlIGlycSBzdGFjayB0byBoYW5kbGUgdGhpcyAqLworCQljdXJ0cCA9IGN1cnJlbnRfdGhyZWFkX2luZm8oKTsKKwkJaXJxdHAgPSBoYXJkaXJxX2N0eFtzbXBfcHJvY2Vzc29yX2lkKCldOworCQlpZiAoY3VydHAgIT0gaXJxdHApIHsKKwkJCWlycXRwLT50YXNrID0gY3VydHAtPnRhc2s7CisJCQlpcnF0cC0+ZmxhZ3MgPSAwOworCQkJY2FsbF9fX2RvX0lSUShpcnEsIHJlZ3MsIGlycXRwKTsKKwkJCWlycXRwLT50YXNrID0gTlVMTDsKKwkJCWlmIChpcnF0cC0+ZmxhZ3MpCisJCQkJc2V0X2JpdHMoaXJxdHAtPmZsYWdzLCAmY3VydHAtPmZsYWdzKTsKKwkJfSBlbHNlCisjZW5kaWYKKwkJCV9fZG9fSVJRKGlycSwgcmVncyk7CisJfSBlbHNlCisjaWZkZWYgQ09ORklHX1BQQzMyCisJCWlmIChpcnEgIT0gLTIpCisjZW5kaWYKKwkJCS8qIFRoYXQncyBub3QgU01QIHNhZmUgLi4uIGJ1dCB3aG8gY2FyZXMgPyAqLworCQkJcHBjX3NwdXJpb3VzX2ludGVycnVwdHMrKzsKKyAgICAgICAgaXJxX2V4aXQoKTsKIH0KKwogI2VuZGlmCS8qIENPTkZJR19QUENfSVNFUklFUyAqLwogCiB2b2lkIF9faW5pdCBpbml0X0lSUSh2b2lkKQogeworI2lmZGVmIENPTkZJR19QUEM2NAogCXN0YXRpYyBpbnQgb25jZSA9IDA7CiAKIAlpZiAob25jZSkKQEAgLTM0OSwxMCArMzAzLDE0IEBACiAKIAlvbmNlKys7CiAKKyNlbmRpZgogCXBwY19tZC5pbml0X0lSUSgpOworI2lmZGVmIENPTkZJR19QUEM2NAogCWlycV9jdHhfaW5pdCgpOworI2VuZGlmCiB9CiAKKyNpZmRlZiBDT05GSUdfUFBDNjQKICNpZm5kZWYgQ09ORklHX1BQQ19JU0VSSUVTCiAvKgogICogVmlydHVhbCBJUlEgbWFwcGluZyBjb2RlLCB1c2VkIG9uIHN5c3RlbXMgd2l0aCBYSUNTIGludGVycnVwdCBjb250cm9sbGVycy4KQEAgLTUxNywzICs0NzUsNCBAQAogfQogCiBfX3NldHVwKCJub2lycWRpc3RyaWIiLCBzZXR1cF9ub2lycWRpc3RyaWIpOworI2VuZGlmIC8qIENPTkZJR19QUEM2NCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvbHBhcmNmZy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9scGFyY2ZnLmMKc2ltaWxhcml0eSBpbmRleCA5NiUKcmVuYW1lIGZyb20gYXJjaC9wcGM2NC9rZXJuZWwvbHBhcmNmZy5jCnJlbmFtZSB0byBhcmNoL3Bvd2VycGMva2VybmVsL2xwYXJjZmcuYwppbmRleCAzZTdiMmYyLi4xYjNiYThhIDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC9scGFyY2ZnLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9scGFyY2ZnLmMKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDxhc20vdGltZS5oPgogI2luY2x1ZGUgPGFzbS9pc2VyaWVzL2l0X2V4cF92cGRfcGFuZWwuaD4KICNpbmNsdWRlIDxhc20vcHJvbS5oPgorI2luY2x1ZGUgPGFzbS92ZHNvX2RhdGFwYWdlLmg+CiAKICNkZWZpbmUgTU9EVUxFX1ZFUlMgIjEuNiIKICNkZWZpbmUgTU9EVUxFX05BTUUgImxwYXJjZmciCkBAIC00Miw3ICs0Myw3IEBACiAvKiAjZGVmaW5lIExQQVJDRkdfREVCVUcgKi8KIAogLyogZmluZCBhIGJldHRlciBwbGFjZSBmb3IgdGhpcyBmdW5jdGlvbi4uLiAqLwotdm9pZCBsb2dfcGxwYXJfaGNhbGxfcmV0dXJuKHVuc2lnbmVkIGxvbmcgcmMsIGNoYXIgKnRhZykKK3N0YXRpYyB2b2lkIGxvZ19wbHBhcl9oY2FsbF9yZXR1cm4odW5zaWduZWQgbG9uZyByYywgY2hhciAqdGFnKQogewogCWlmIChyYyA9PSAwKQkJLyogc3VjY2VzcywgcmV0dXJuICovCiAJCXJldHVybjsKQEAgLTk2LDcgKzk3LDcgQEAKIAogI2RlZmluZSBscGFyY2ZnX3dyaXRlIE5VTEwKIAotLyogCisvKgogICogTWV0aG9kcyB1c2VkIHRvIGZldGNoIExQQVIgZGF0YSB3aGVuIHJ1bm5pbmcgb24gYW4gaVNlcmllcyBwbGF0Zm9ybS4KICAqLwogc3RhdGljIGludCBscGFyY2ZnX2RhdGEoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQpAQCAtMTY4LDcgKzE2OSw3IEBACiAjZW5kaWYJCQkJLyogQ09ORklHX1BQQ19JU0VSSUVTICovCiAKICNpZmRlZiBDT05GSUdfUFBDX1BTRVJJRVMKLS8qIAorLyoKICAqIE1ldGhvZHMgdXNlZCB0byBmZXRjaCBMUEFSIGRhdGEgd2hlbiBydW5uaW5nIG9uIGEgcFNlcmllcyBwbGF0Zm9ybS4KICAqLwogCkBAIC0xNzcsNyArMTc4LDcgQEAKICAqICBlbnRpdGxlZF9jYXBhY2l0eSx1bmFsbG9jYXRlZF9jYXBhY2l0eSwKICAqICBhZ2dyZWdhdGlvbiwgcmVzb3VyY2VfY2FwYWJpbGl0eSkuCiAgKgotICogIFI0ID0gRW50aXRsZWQgUHJvY2Vzc29yIENhcGFjaXR5IFBlcmNlbnRhZ2UuIAorICogIFI0ID0gRW50aXRsZWQgUHJvY2Vzc29yIENhcGFjaXR5IFBlcmNlbnRhZ2UuCiAgKiAgUjUgPSBVbmFsbG9jYXRlZCBQcm9jZXNzb3IgQ2FwYWNpdHkgUGVyY2VudGFnZS4KICAqICBSNiAoQUFCQkNDRERFRUZGR0dISCkuCiAgKiAgICAgIFhYWFggLSByZXNlcnZlZCAoMCkKQEAgLTE5MCw3ICsxOTEsNyBAQAogICogICAgICAgICAgWFggLSB2YXJpYWJsZSBwcm9jZXNzb3IgQ2FwYWNpdHkgV2VpZ2h0CiAgKiAgICAgICAgICAgIFhYIC0gVW5hbGxvY2F0ZWQgVmFyaWFibGUgUHJvY2Vzc29yIENhcGFjaXR5IFdlaWdodC4KICAqICAgICAgICAgICAgICBYWFhYIC0gQWN0aXZlIHByb2Nlc3NvcnMgaW4gUGh5c2ljYWwgUHJvY2Vzc29yIFBvb2wuCi0gKiAgICAgICAgICAgICAgICAgIFhYWFggIC0gUHJvY2Vzc29ycyBhY3RpdmUgb24gcGxhdGZvcm0uIAorICogICAgICAgICAgICAgICAgICBYWFhYICAtIFByb2Nlc3NvcnMgYWN0aXZlIG9uIHBsYXRmb3JtLgogICovCiBzdGF0aWMgdW5zaWduZWQgaW50IGhfZ2V0X3BwcCh1bnNpZ25lZCBsb25nICplbnRpdGxlZCwKIAkJCSAgICAgIHVuc2lnbmVkIGxvbmcgKnVuYWxsb2NhdGVkLApAQCAtMjEyLDExICsyMTMsMTAgQEAKIAl1bnNpZ25lZCBsb25nIGR1bW15OwogCXJjID0gcGxwYXJfaGNhbGwoSF9QSUMsIDAsIDAsIDAsIDAsIHBvb2xfaWRsZV90aW1lLCBudW1fcHJvY3MsICZkdW1teSk7CiAKLQlsb2dfcGxwYXJfaGNhbGxfcmV0dXJuKHJjLCAiSF9QSUMiKTsKKwlpZiAocmMgIT0gSF9BdXRob3JpdHkpCisJCWxvZ19wbHBhcl9oY2FsbF9yZXR1cm4ocmMsICJIX1BJQyIpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcHVycih2b2lkKTsKLQogLyogVHJhY2sgc3VtIG9mIGFsbCBwdXJycyBhY3Jvc3MgYWxsIHByb2Nlc3NvcnMuIFRoaXMgaXMgdXNlZCB0byBmdXJ0aGVyICovCiAvKiBjYWxjdWxhdGUgdXNhZ2UgdmFsdWVzIGJ5IGRpZmZlcmVudCBhcHBsaWNhdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICovCiAKQEAgLTI3Myw3ICsyNzMsNyBAQAogCQlpZiAoIXdvcmtidWZmZXIpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiJXMgJXMga21hbGxvYyBmYWlsdXJlIGF0IGxpbmUgJWQgXG4iLAogCQkJICAgICAgIF9fRklMRV9fLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsKLQkJCWtmcmVlKGxvY2FsX2J1ZmZlcik7CQkJCisJCQlrZnJlZShsb2NhbF9idWZmZXIpOwogCQkJcmV0dXJuOwogCQl9CiAjaWZkZWYgTFBBUkNGR19ERUJVRwpAQCAtMzE4LDggKzMxOCw2IEBACiAJa2ZyZWUobG9jYWxfYnVmZmVyKTsKIH0KIAotc3RhdGljIGludCBscGFyY2ZnX2NvdW50X2FjdGl2ZV9wcm9jZXNzb3JzKHZvaWQpOwotCiAvKiBSZXR1cm4gdGhlIG51bWJlciBvZiBwcm9jZXNzb3JzIGluIHRoZSBzeXN0ZW0uCiAgKiBUaGlzIGZ1bmN0aW9uIHJlYWRzIHRocm91Z2ggdGhlIGRldmljZSB0cmVlIGFuZCBjb3VudHMKICAqIHRoZSB2aXJ0dWFsIHByb2Nlc3NvcnMsIHRoaXMgZG9lcyBub3QgaW5jbHVkZSB0aHJlYWRzLgpAQCAtMzcxLDcgKzM2OSw3IEBACiAJbHJkcnAgPSAoaW50ICopZ2V0X3Byb3BlcnR5KHJ0YXNfbm9kZSwgImlibSxscmRyLWNhcGFjaXR5IiwgTlVMTCk7CiAKIAlpZiAobHJkcnAgPT0gTlVMTCkgewotCQlwYXJ0aXRpb25fcG90ZW50aWFsX3Byb2Nlc3NvcnMgPSBzeXN0ZW1jZmctPnByb2Nlc3NvckNvdW50OworCQlwYXJ0aXRpb25fcG90ZW50aWFsX3Byb2Nlc3NvcnMgPSB2ZHNvX2RhdGEtPnByb2Nlc3NvckNvdW50OwogCX0gZWxzZSB7CiAJCXBhcnRpdGlvbl9wb3RlbnRpYWxfcHJvY2Vzc29ycyA9ICoobHJkcnAgKyA0KTsKIAl9CkBAIC01NDcsNyArNTQ1LDcgQEAKIAkJcmV0dmFsID0gLUVJTzsKIAl9CiAKLSAgICAgIG91dDoKK291dDoKIAlrZnJlZShrYnVmKTsKIAlyZXR1cm4gcmV0dmFsOwogfQpAQCAtNTYwLDEwICs1NTgsMTAgQEAKIH0KIAogc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBscGFyY2ZnX2ZvcHMgPSB7Ci0gICAgICAub3duZXIJPSBUSElTX01PRFVMRSwKLSAgICAgIC5yZWFkCT0gc2VxX3JlYWQsCi0gICAgICAub3Blbgk9IGxwYXJjZmdfb3BlbiwKLSAgICAgIC5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5vcGVuCQk9IGxwYXJjZmdfb3BlbiwKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAogfTsKIAogaW50IF9faW5pdCBscGFyY2ZnX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvbWlzY18zMi5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9taXNjXzMyLlMKaW5kZXggM2JlZGI1My4uZjZkODRhNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9taXNjXzMyLlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9taXNjXzMyLlMKQEAgLTUxOSw3ICs1MTksNyBAQAogICoKICAqIGZsdXNoX2ljYWNoZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHN0b3ApCiAgKi8KLV9HTE9CQUwoZmx1c2hfaWNhY2hlX3JhbmdlKQorX0dMT0JBTChfX2ZsdXNoX2ljYWNoZV9yYW5nZSkKIEJFR0lOX0ZUUl9TRUNUSU9OCiAJYmxyCQkJCS8qIGZvciA2MDEsIGRvIG5vdGhpbmcgKi8KIEVORF9GVFJfU0VDVElPTl9JRkNMUihDUFVfRlRSX1NQTElUX0lEX0NBQ0hFKQpAQCAtNjA3LDI3ICs2MDcsNiBAQAogCXN5bmMJCQkJLyogd2FpdCBmb3IgZGNiaSdzIHRvIGdldCB0byByYW0gKi8KIAlibHIKIAotI2lmZGVmIENPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEUKLS8qCi0gKiA0MHggY29yZXMgaGF2ZSA4SyBvciAxNksgZGNhY2hlIGFuZCAzMiBieXRlIGxpbmUgc2l6ZS4KLSAqIDQ0eCBoYXMgYSAzMksgZGNhY2hlIGFuZCAzMiBieXRlIGxpbmUgc2l6ZS4KLSAqIDh4eCBoYXMgMSwgMiwgNCwgOEsgdmFyaWFudHMuCi0gKiBGb3Igbm93LCBjb3ZlciB0aGUgd29yc3QgY2FzZSBvZiB0aGUgNDR4LgotICogTXVzdCBiZSBjYWxsZWQgd2l0aCBleHRlcm5hbCBpbnRlcnJ1cHRzIGRpc2FibGVkLgotICovCi0jZGVmaW5lIENBQ0hFX05XQVlTCTY0Ci0jZGVmaW5lIENBQ0hFX05MSU5FUwkxNgotCi1fR0xPQkFMKGZsdXNoX2RjYWNoZV9hbGwpCi0JbGkJcjQsICgyICogQ0FDSEVfTldBWVMgKiBDQUNIRV9OTElORVMpCi0JbXRjdHIJcjQKLQlsaXMgICAgIHI1LCBLRVJORUxCQVNFQGgKLTE6CWx3eglyMywgMChyNSkJCS8qIExvYWQgb25lIHdvcmQgZnJvbSBldmVyeSBsaW5lICovCi0JYWRkaQlyNSwgcjUsIEwxX0NBQ0hFX0JZVEVTCi0JYmRueiAgICAxYgotCWJscgotI2VuZGlmIC8qIENPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEUgKi8KLQogLyoKICAqIEZsdXNoIGEgcGFydGljdWxhciBwYWdlIGZyb20gdGhlIGRhdGEgY2FjaGUgdG8gUkFNLgogICogTm90ZTogdGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgaW5zdHJ1Y3Rpb24gY2FjaGUgZG9lcyAqbm90KgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9taXNjXzY0LlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL21pc2NfNjQuUwppbmRleCBhZTE0MzNkLi5hZTQ4YTAwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL21pc2NfNjQuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL21pc2NfNjQuUwpAQCAtODksMTIgKzg5LDEyIEBACiAJbXRscglyMAogCWJscgogCi1fR0xPQkFMKGNhbGxfaGFuZGxlX0lSUV9ldmVudCkKK19HTE9CQUwoY2FsbF9fX2RvX0lSUSkKIAltZmxyCXIwCiAJc3RkCXIwLDE2KHIxKQotCXN0ZHUJcjEsVEhSRUFEX1NJWkUtMTEyKHI2KQotCW1yCXIxLHI2Ci0JYmwJLmhhbmRsZV9JUlFfZXZlbnQKKwlzdGR1CXIxLFRIUkVBRF9TSVpFLTExMihyNSkKKwltcglyMSxyNQorCWJsCS5fX2RvX0lSUQogCWxkCXIxLDAocjEpCiAJbGQJcjAsMTYocjEpCiAJbXRscglyMApkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvcGFjYURhdGEuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGFjYS5jCnNpbWlsYXJpdHkgaW5kZXggOTUlCnJlbmFtZSBmcm9tIGFyY2gvcHBjNjQva2VybmVsL3BhY2FEYXRhLmMKcmVuYW1lIHRvIGFyY2gvcG93ZXJwYy9rZXJuZWwvcGFjYS5jCmluZGV4IDMxMzNjNzIuLmE3YjY4ZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQva2VybmVsL3BhY2FEYXRhLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wYWNhLmMKQEAgLTE1LDI0ICsxNSwxNiBAQAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KLQogI2luY2x1ZGUgPGFzbS9scHBhY2EuaD4KICNpbmNsdWRlIDxhc20vaXNlcmllcy9pdF9scF9xdWV1ZS5oPgogI2luY2x1ZGUgPGFzbS9wYWNhLmg+CiAKLXN0YXRpYyB1bmlvbiB7Ci0Jc3RydWN0IHN5c3RlbWNmZwlkYXRhOwotCXU4CQkJcGFnZVtQQUdFX1NJWkVdOwotfSBzeXN0ZW1jZmdfc3RvcmUgX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oIi5kYXRhLnBhZ2UuYWxpZ25lZCIpKSk7Ci1zdHJ1Y3Qgc3lzdGVtY2ZnICpzeXN0ZW1jZmcgPSAmc3lzdGVtY2ZnX3N0b3JlLmRhdGE7Ci1FWFBPUlRfU1lNQk9MKHN5c3RlbWNmZyk7Ci0KIAogLyogVGhpcyBzeW1ib2wgaXMgcHJvdmlkZWQgYnkgdGhlIGxpbmtlciAtIGxldCBpdCBmaWxsIGluIHRoZSBwYWNhCiAgKiBmaWVsZCBjb3JyZWN0bHkgKi8KIGV4dGVybiB1bnNpZ25lZCBsb25nIF9fdG9jX3N0YXJ0OwogCi0vKiBUaGUgUGFjYSBpcyBhbiBhcnJheSB3aXRoIG9uZSBlbnRyeSBwZXIgcHJvY2Vzc29yLiAgRWFjaCBjb250YWlucyBhbiAKKy8qIFRoZSBQYWNhIGlzIGFuIGFycmF5IHdpdGggb25lIGVudHJ5IHBlciBwcm9jZXNzb3IuICBFYWNoIGNvbnRhaW5zIGFuCiAgKiBscHBhY2EsIHdoaWNoIGNvbnRhaW5zIHRoZSBpbmZvcm1hdGlvbiBzaGFyZWQgYmV0d2VlbiB0aGUKICAqIGh5cGVydmlzb3IgYW5kIExpbnV4LiAgRWFjaCBhbHNvIGNvbnRhaW5zIGFuIEl0THBSZWdTYXZlIGFyZWEgd2hpY2gKICAqIGlzIHVzZWQgYnkgdGhlIGh5cGVydmlzb3IgdG8gc2F2ZSByZWdpc3RlcnMuCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BwY19rc3ltcy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcGNfa3N5bXMuYwppbmRleCA0N2Q2ZjdlLi41ZGNmNGJhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3BwY19rc3ltcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHBjX2tzeW1zLmMKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlIDxhc20vY3B1dGFibGUuaD4KICNpbmNsdWRlIDxhc20vYnRleHQuaD4KICNpbmNsdWRlIDxhc20vZGl2NjQuaD4KKyNpbmNsdWRlIDxhc20vc2lnbmFsLmg+CiAKICNpZmRlZiAgQ09ORklHXzh4eAogI2luY2x1ZGUgPGFzbS9jb21tcHJvYy5oPgpAQCAtNTYsNyArNTcsNiBAQAogZXh0ZXJuIHZvaWQgYWxpZ25tZW50X2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiBleHRlcm4gdm9pZCBwcm9ncmFtX2NoZWNrX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiBleHRlcm4gdm9pZCBzaW5nbGVfc3RlcF9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwotZXh0ZXJuIGludCBkb19zaWduYWwoc2lnc2V0X3QgKiwgc3RydWN0IHB0X3JlZ3MgKik7CiBleHRlcm4gaW50IHBtYWNfbmV3d29ybGQ7CiBleHRlcm4gaW50IHN5c19zaWdyZXR1cm4oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwogCkBAIC0xODgsOSArMTg4LDYgQEAKIEVYUE9SVF9TWU1CT0woY3VkYV9yZXF1ZXN0KTsKIEVYUE9SVF9TWU1CT0woY3VkYV9wb2xsKTsKICNlbmRpZiAvKiBDT05GSUdfQURCX0NVREEgKi8KLSNpZiBkZWZpbmVkKENPTkZJR19QUENfTVVMVElQTEFURk9STSkgJiYgZGVmaW5lZChDT05GSUdfUFBDMzIpCi1FWFBPUlRfU1lNQk9MKF9tYWNoaW5lKTsKLSNlbmRpZgogI2lmZGVmIENPTkZJR19QUENfUE1BQwogRVhQT1JUX1NZTUJPTChzeXNfY3RybGVyKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvcHJvY19wcGM2NC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jX3BwYzY0LmMKc2ltaWxhcml0eSBpbmRleCA5NCUKcmVuYW1lIGZyb20gYXJjaC9wcGM2NC9rZXJuZWwvcHJvY19wcGM2NC5jCnJlbmFtZSB0byBhcmNoL3Bvd2VycGMva2VybmVsL3Byb2NfcHBjNjQuYwppbmRleCAyNGU5NTVlZS4uN2JhNDJhNCAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9rZXJuZWwvcHJvY19wcGM2NC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY19wcGM2NC5jCkBAIC0xLDE4ICsxLDE2IEBACiAvKgotICogYXJjaC9wcGM2NC9rZXJuZWwvcHJvY19wcGM2NC5jCi0gKgogICogQ29weXJpZ2h0IChDKSAyMDAxIE1pa2UgQ29ycmlnYW4gJiBEYXZlIEVuZ2VicmV0c2VuIElCTSBDb3Jwb3JhdGlvbgotICogCisgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgogICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqIAorICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKiAKKyAqCiAgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQpAQCAtMjUsNyArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KIAotI2luY2x1ZGUgPGFzbS9zeXN0ZW1jZmcuaD4KKyNpbmNsdWRlIDxhc20vdmRzb19kYXRhcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9ydGFzLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vcHJvbS5oPgpAQCAtNTMsNyArNTEsNyBAQAogCWlmICghcm9vdCkKIAkJcmV0dXJuIDE7CiAKLQlpZiAoIShzeXN0ZW1jZmctPnBsYXRmb3JtICYgKFBMQVRGT1JNX1BTRVJJRVMgfCBQTEFURk9STV9DRUxMKSkpCisJaWYgKCEocGxhdGZvcm1faXNfcHNlcmllcygpIHx8IF9tYWNoaW5lID09IFBMQVRGT1JNX0NFTEwpKQogCQlyZXR1cm4gMDsKIAogCWlmICghcHJvY19ta2RpcigicnRhcyIsIHJvb3QpKQpAQCAtNzQsNyArNzIsNyBAQAogCWlmICghcGRlKQogCQlyZXR1cm4gMTsKIAlwZGUtPm5saW5rID0gMTsKLQlwZGUtPmRhdGEgPSBzeXN0ZW1jZmc7CisJcGRlLT5kYXRhID0gdmRzb19kYXRhOwogCXBkZS0+c2l6ZSA9IFBBR0VfU0laRTsKIAlwZGUtPnByb2NfZm9wcyA9ICZwYWdlX21hcF9mb3BzOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb20uYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbS5jCmluZGV4IGY2NDVhZGIuLjZhNWI0NjggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbS5jCkBAIC00OCw5ICs0OCw2IEBACiAjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KICNpbmNsdWRlIDxhc20vcFNlcmllc19yZWNvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9wY2ktYnJpZGdlLmg+Ci0jaWZkZWYgQ09ORklHX1BQQzY0Ci0jaW5jbHVkZSA8YXNtL3N5c3RlbWNmZy5oPgotI2VuZGlmCiAKICNpZmRlZiBERUJVRwogI2RlZmluZSBEQkcoZm10Li4uKSBwcmludGsoS0VSTl9FUlIgZm10KQpAQCAtNzQsMTAgKzcxLDYgQEAKIHR5cGVkZWYgaW50IGludGVycHJldF9mdW5jKHN0cnVjdCBkZXZpY2Vfbm9kZSAqLCB1bnNpZ25lZCBsb25nICosCiAJCQkgICBpbnQsIGludCwgaW50KTsKIAotZXh0ZXJuIHN0cnVjdCBydGFzX3QgcnRhczsKLWV4dGVybiBzdHJ1Y3QgbG1iIGxtYjsKLWV4dGVybiB1bnNpZ25lZCBsb25nIGtsaW1pdDsKLQogc3RhdGljIGludCBfX2luaXRkYXRhIGR0X3Jvb3RfYWRkcl9jZWxsczsKIHN0YXRpYyBpbnQgX19pbml0ZGF0YSBkdF9yb290X3NpemVfY2VsbHM7CiAKQEAgLTM5MSw3ICszODQsNyBAQAogCiAjaWZkZWYgQ09ORklHX1BQQzY0CiAJCS8qIFdlIG9mZnNldCBpcnEgbnVtYmVycyBmb3IgdGhlIHUzIE1QSUMgYnkgMTI4IGluIFBvd2VyTWFjICovCi0JCWlmIChzeXN0ZW1jZmctPnBsYXRmb3JtID09IFBMQVRGT1JNX1BPV0VSTUFDICYmIGljICYmIGljLT5wYXJlbnQpIHsKKwkJaWYgKF9tYWNoaW5lID09IFBMQVRGT1JNX1BPV0VSTUFDICYmIGljICYmIGljLT5wYXJlbnQpIHsKIAkJCWNoYXIgKm5hbWUgPSBnZXRfcHJvcGVydHkoaWMtPnBhcmVudCwgIm5hbWUiLCBOVUxMKTsKIAkJCWlmIChuYW1lICYmICFzdHJjbXAobmFtZSwgInUzIikpCiAJCQkJbnAtPmludHJzW2ludHJjb3VudF0ubGluZSArPSAxMjg7CkBAIC0xMDg3LDkgKzEwODAsOSBAQAogc3RhdGljIGludCBfX2luaXQgZWFybHlfaW5pdF9kdF9zY2FuX2NwdXModW5zaWduZWQgbG9uZyBub2RlLAogCQkJCQkgIGNvbnN0IGNoYXIgKnVuYW1lLCBpbnQgZGVwdGgsIHZvaWQgKmRhdGEpCiB7Ci0JY2hhciAqdHlwZSA9IG9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgImRldmljZV90eXBlIiwgTlVMTCk7CiAJdTMyICpwcm9wOwotCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IDA7CisJdW5zaWduZWQgbG9uZyBzaXplOworCWNoYXIgKnR5cGUgPSBvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJkZXZpY2VfdHlwZSIsICZzaXplKTsKIAogCS8qIFdlIGFyZSBzY2FubmluZyAiY3B1IiBub2RlcyBvbmx5ICovCiAJaWYgKHR5cGUgPT0gTlVMTCB8fCBzdHJjbXAodHlwZSwgImNwdSIpICE9IDApCkBAIC0xMTE1LDcgKzExMDgsNyBAQAogCiAjaWZkZWYgQ09ORklHX0FMVElWRUMKIAkvKiBDaGVjayBpZiB3ZSBoYXZlIGEgVk1YIGFuZCBldmVudHVhbGx5IHVwZGF0ZSBDUFUgZmVhdHVyZXMgKi8KLQlwcm9wID0gKHUzMiAqKW9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgImlibSx2bXgiLCAmc2l6ZSk7CisJcHJvcCA9ICh1MzIgKilvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJpYm0sdm14IiwgTlVMTCk7CiAJaWYgKHByb3AgJiYgKCpwcm9wKSA+IDApIHsKIAkJY3VyX2NwdV9zcGVjLT5jcHVfZmVhdHVyZXMgfD0gQ1BVX0ZUUl9BTFRJVkVDOwogCQljdXJfY3B1X3NwZWMtPmNwdV91c2VyX2ZlYXR1cmVzIHw9IFBQQ19GRUFUVVJFX0hBU19BTFRJVkVDOwpAQCAtMTE2MSwxMyArMTE1NCw5IEBACiAJcHJvcCA9ICh1MzIgKilvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJsaW51eCxwbGF0Zm9ybSIsIE5VTEwpOwogCWlmIChwcm9wID09IE5VTEwpCiAJCXJldHVybiAwOwotI2lmZGVmIENPTkZJR19QUEM2NAotCXN5c3RlbWNmZy0+cGxhdGZvcm0gPSAqcHJvcDsKLSNlbHNlCiAjaWZkZWYgQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNCiAJX21hY2hpbmUgPSAqcHJvcDsKICNlbmRpZgotI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfUFBDNjQKIAkvKiBjaGVjayBpZiBpb21tdSBpcyBmb3JjZWQgb24gb3Igb2ZmICovCkBAIC0xMjY0LDcgKzEyNTMsMTQgQEAKIAl1bnNpZ25lZCBsb25nIGw7CiAKIAkvKiBXZSBhcmUgc2Nhbm5pbmcgIm1lbW9yeSIgbm9kZXMgb25seSAqLwotCWlmICh0eXBlID09IE5VTEwgfHwgc3RyY21wKHR5cGUsICJtZW1vcnkiKSAhPSAwKQorCWlmICh0eXBlID09IE5VTEwpIHsKKwkJLyoKKwkJICogVGhlIGxvbmd0cmFpbCBkb2Vzbid0IGhhdmUgYSBkZXZpY2VfdHlwZSBvbiB0aGUKKwkJICogL21lbW9yeSBub2RlLCBzbyBsb29rIGZvciB0aGUgbm9kZSBjYWxsZWQgL21lbW9yeUAwLgorCQkgKi8KKwkJaWYgKGRlcHRoICE9IDEgfHwgc3RyY21wKHVuYW1lLCAibWVtb3J5QDAiKSAhPSAwKQorCQkJcmV0dXJuIDA7CisJfSBlbHNlIGlmIChzdHJjbXAodHlwZSwgIm1lbW9yeSIpICE9IDApCiAJCXJldHVybiAwOwogCiAJcmVnID0gKGNlbGxfdCAqKW9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgInJlZyIsICZsKTsKQEAgLTEzMzksOSArMTMzNSw2IEBACiAJb2Zfc2Nhbl9mbGF0X2R0KGVhcmx5X2luaXRfZHRfc2Nhbl9tZW1vcnksIE5VTEwpOwogCWxtYl9lbmZvcmNlX21lbW9yeV9saW1pdChtZW1vcnlfbGltaXQpOwogCWxtYl9hbmFseXplKCk7Ci0jaWZkZWYgQ09ORklHX1BQQzY0Ci0Jc3lzdGVtY2ZnLT5waHlzaWNhbE1lbW9yeVNpemUgPSBsbWJfcGh5c19tZW1fc2l6ZSgpOwotI2VuZGlmCiAJbG1iX3Jlc2VydmUoMCwgX19wYShrbGltaXQpKTsKIAogCURCRygiUGh5cy4gbWVtOiAlbHhcbiIsIGxtYl9waHlzX21lbV9zaXplKCkpOwpAQCAtMTkwOCw3ICsxOTAxLDcgQEAKIAkvKiBXZSBkb24ndCBzdXBwb3J0IHRoYXQgZnVuY3Rpb24gb24gUG93ZXJNYWMsIGF0IGxlYXN0CiAJICogbm90IHlldAogCSAqLwotCWlmIChzeXN0ZW1jZmctPnBsYXRmb3JtID09IFBMQVRGT1JNX1BPV0VSTUFDKQorCWlmIChfbWFjaGluZSA9PSBQTEFURk9STV9QT1dFUk1BQykKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAkvKiBmaXggdXAgbmV3IG5vZGUncyBsaW51eF9waGFuZGxlIGZpZWxkICovCkBAIC0xOTkyLDkgKzE5ODUsMTEgQEAKIAkqbmV4dCA9IHByb3A7CiAJd3JpdGVfdW5sb2NrKCZkZXZ0cmVlX2xvY2spOwogCisjaWZkZWYgQ09ORklHX1BST0NfREVWSUNFVFJFRQogCS8qIHRyeSB0byBhZGQgdG8gcHJvYyBhcyB3ZWxsIGlmIGl0IHdhcyBpbml0aWFsaXplZCAqLwogCWlmIChucC0+cGRlKQogCQlwcm9jX2RldmljZV90cmVlX2FkZF9wcm9wKG5wLT5wZGUsIHByb3ApOworI2VuZGlmIC8qIENPTkZJR19QUk9DX0RFVklDRVRSRUUgKi8KIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tX2luaXQuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbV9pbml0LmMKaW5kZXggNmRjMzNkMS4uNGNlMDEwNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tX2luaXQuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb21faW5pdC5jCkBAIC05NCwxMSArOTQsMTcgQEAKICNpZmRlZiBDT05GSUdfUFBDNjQKICNkZWZpbmUgUkVMT0MoeCkgICAgICAgICgqUFRSUkVMT0MoJih4KSkpCiAjZGVmaW5lIEFERFIoeCkJCSh1MzIpIGFkZF9yZWxvY19vZmZzZXQoKHVuc2lnbmVkIGxvbmcpKHgpKQorI2RlZmluZSBPRl9XT1JLQVJPVU5EUwkwCiAjZWxzZQogI2RlZmluZSBSRUxPQyh4KQkoeCkKICNkZWZpbmUgQUREUih4KQkJKHUzMikgKHgpCisjZGVmaW5lIE9GX1dPUktBUk9VTkRTCW9mX3dvcmthcm91bmRzCitpbnQgb2Zfd29ya2Fyb3VuZHM7CiAjZW5kaWYKIAorI2RlZmluZSBPRl9XQV9DTEFJTQkxCS8qIGRvIHBoeXMvdmlydCBjbGFpbSBzZXBhcmF0ZWx5LCB0aGVuIG1hcCAqLworI2RlZmluZSBPRl9XQV9MT05HVFJBSUwJMgkvKiB3b3JrIGFyb3VuZCBsb25ndHJhaWwgYnVncyAqLworCiAjZGVmaW5lIFBST01fQlVHKCkgZG8gewkJCQkJCVwKICAgICAgICAgcHJvbV9wcmludGYoImtlcm5lbCBCVUcgYXQgJXMgbGluZSAweCV4IVxuIiwJCVwKIAkJICAgIFJFTE9DKF9fRklMRV9fKSwgX19MSU5FX18pOwkJCVwKQEAgLTExMSwxMSArMTE3LDYgQEAKICNkZWZpbmUgcHJvbV9kZWJ1Zyh4Li4uKQogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfUFBDMzIKLSNkZWZpbmUgUExBVEZPUk1fUE9XRVJNQUMJX01BQ0hfUG1hYwotI2RlZmluZSBQTEFURk9STV9DSFJQCQlfTUFDSF9jaHJwCi0jZW5kaWYKLQogCiB0eXBlZGVmIHUzMiBwcm9tX2FyZ190OwogCkBAIC0xMjgsMTAgKzEyOSwxMSBAQAogCiBzdHJ1Y3QgcHJvbV90IHsKIAlpaGFuZGxlIHJvb3Q7Ci0JaWhhbmRsZSBjaG9zZW47CisJcGhhbmRsZSBjaG9zZW47CiAJaW50IGNwdTsKIAlpaGFuZGxlIHN0ZG91dDsKIAlpaGFuZGxlIG1tdW1hcDsKKwlpaGFuZGxlIG1lbW9yeTsKIH07CiAKIHN0cnVjdCBtZW1fbWFwX2VudHJ5IHsKQEAgLTM2MCwxNiArMzYyLDM2IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBwcm9tX2NsYWltKHVuc2lnbmVkIGxvbmcgdmlydCwgdW5zaWduZWQgbG9uZyBzaXplLAogCQkJCXVuc2lnbmVkIGxvbmcgYWxpZ24pCiB7Ci0JaW50IHJldDsKIAlzdHJ1Y3QgcHJvbV90ICpfcHJvbSA9ICZSRUxPQyhwcm9tKTsKIAotCXJldCA9IGNhbGxfcHJvbSgiY2xhaW0iLCAzLCAxLCAocHJvbV9hcmdfdCl2aXJ0LCAocHJvbV9hcmdfdClzaXplLAotCQkJKHByb21fYXJnX3QpYWxpZ24pOwotCWlmIChyZXQgIT0gLTEgJiYgX3Byb20tPm1tdW1hcCAhPSAwKQotCQkvKiBvbGQgcG1hY3MgbmVlZCB1cyB0byBtYXAgYXMgd2VsbCAqLworCWlmIChhbGlnbiA9PSAwICYmIChPRl9XT1JLQVJPVU5EUyAmIE9GX1dBX0NMQUlNKSkgeworCQkvKgorCQkgKiBPbGQgT0YgcmVxdWlyZXMgd2UgY2xhaW0gcGh5c2ljYWwgYW5kIHZpcnR1YWwgc2VwYXJhdGVseQorCQkgKiBhbmQgdGhlbiBtYXAgZXhwbGljaXRseSAoYXNzdW1pbmcgdmlydHVhbCBtb2RlKQorCQkgKi8KKwkJaW50IHJldDsKKwkJcHJvbV9hcmdfdCByZXN1bHQ7CisKKwkJcmV0ID0gY2FsbF9wcm9tX3JldCgiY2FsbC1tZXRob2QiLCA1LCAyLCAmcmVzdWx0LAorCQkJCSAgICBBRERSKCJjbGFpbSIpLCBfcHJvbS0+bWVtb3J5LAorCQkJCSAgICBhbGlnbiwgc2l6ZSwgdmlydCk7CisJCWlmIChyZXQgIT0gMCB8fCByZXN1bHQgPT0gLTEpCisJCQlyZXR1cm4gLTE7CisJCXJldCA9IGNhbGxfcHJvbV9yZXQoImNhbGwtbWV0aG9kIiwgNSwgMiwgJnJlc3VsdCwKKwkJCQkgICAgQUREUigiY2xhaW0iKSwgX3Byb20tPm1tdW1hcCwKKwkJCQkgICAgYWxpZ24sIHNpemUsIHZpcnQpOworCQlpZiAocmV0ICE9IDApIHsKKwkJCWNhbGxfcHJvbSgiY2FsbC1tZXRob2QiLCA0LCAxLCBBRERSKCJyZWxlYXNlIiksCisJCQkJICBfcHJvbS0+bWVtb3J5LCBzaXplLCB2aXJ0KTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQkvKiB0aGUgMHgxMiBpcyBNIChjb2hlcmVuY2UpICsgUFAgPT0gcmVhZC93cml0ZSAqLwogCQljYWxsX3Byb20oImNhbGwtbWV0aG9kIiwgNiwgMSwKLQkJCSAgQUREUigibWFwIiksIF9wcm9tLT5tbXVtYXAsIDAsIHNpemUsIHZpcnQsIHZpcnQpOwotCXJldHVybiByZXQ7CisJCQkgIEFERFIoIm1hcCIpLCBfcHJvbS0+bW11bWFwLCAweDEyLCBzaXplLCB2aXJ0LCB2aXJ0KTsKKwkJcmV0dXJuIHZpcnQ7CisJfQorCXJldHVybiBjYWxsX3Byb20oImNsYWltIiwgMywgMSwgKHByb21fYXJnX3QpdmlydCwgKHByb21fYXJnX3Qpc2l6ZSwKKwkJCSAocHJvbV9hcmdfdClhbGlnbik7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBfX2F0dHJpYnV0ZV9fKChub3JldHVybikpIHByb21fcGFuaWMoY29uc3QgY2hhciAqcmVhc29uKQpAQCAtNDE1LDExICs0MzcsNTIgQEAKIAlyZXR1cm4gY2FsbF9wcm9tKCJnZXRwcm9wbGVuIiwgMiwgMSwgbm9kZSwgQUREUihwbmFtZSkpOwogfQogCi1zdGF0aWMgaW50IGlubGluZSBwcm9tX3NldHByb3AocGhhbmRsZSBub2RlLCBjb25zdCBjaGFyICpwbmFtZSwKLQkJCSAgICAgICB2b2lkICp2YWx1ZSwgc2l6ZV90IHZhbHVlbGVuKQorc3RhdGljIHZvaWQgYWRkX3N0cmluZyhjaGFyICoqc3RyLCBjb25zdCBjaGFyICpxKQogewotCXJldHVybiBjYWxsX3Byb20oInNldHByb3AiLCA0LCAxLCBub2RlLCBBRERSKHBuYW1lKSwKLQkJCSAodTMyKSh1bnNpZ25lZCBsb25nKSB2YWx1ZSwgKHUzMikgdmFsdWVsZW4pOworCWNoYXIgKnAgPSAqc3RyOworCisJd2hpbGUgKCpxKQorCQkqcCsrID0gKnErKzsKKwkqcCsrID0gJyAnOworCSpzdHIgPSBwOworfQorCitzdGF0aWMgY2hhciAqdG9oZXgodW5zaWduZWQgaW50IHgpCit7CisJc3RhdGljIGNoYXIgZGlnaXRzW10gPSAiMDEyMzQ1Njc4OWFiY2RlZiI7CisJc3RhdGljIGNoYXIgcmVzdWx0WzldOworCWludCBpOworCisJcmVzdWx0WzhdID0gMDsKKwlpID0gODsKKwlkbyB7CisJCS0taTsKKwkJcmVzdWx0W2ldID0gZGlnaXRzW3ggJiAweGZdOworCQl4ID4+PSA0OworCX0gd2hpbGUgKHggIT0gMCAmJiBpID4gMCk7CisJcmV0dXJuICZyZXN1bHRbaV07Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHByb21fc2V0cHJvcChwaGFuZGxlIG5vZGUsIGNvbnN0IGNoYXIgKm5vZGVuYW1lLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKnBuYW1lLCB2b2lkICp2YWx1ZSwgc2l6ZV90IHZhbHVlbGVuKQoreworCWNoYXIgY21kWzI1Nl0sICpwOworCisJaWYgKCEoT0ZfV09SS0FST1VORFMgJiBPRl9XQV9MT05HVFJBSUwpKQorCQlyZXR1cm4gY2FsbF9wcm9tKCJzZXRwcm9wIiwgNCwgMSwgbm9kZSwgQUREUihwbmFtZSksCisJCQkJICh1MzIpKHVuc2lnbmVkIGxvbmcpIHZhbHVlLCAodTMyKSB2YWx1ZWxlbik7CisKKwkvKiBnYWguLi4gc2V0cHJvcCBkb2Vzbid0IHdvcmsgb24gbG9uZ3RyYWlsLCBoYXZlIHRvIHVzZSBpbnRlcnByZXQgKi8KKwlwID0gY21kOworCWFkZF9zdHJpbmcoJnAsICJkZXYiKTsKKwlhZGRfc3RyaW5nKCZwLCBub2RlbmFtZSk7CisJYWRkX3N0cmluZygmcCwgdG9oZXgoKHUzMikodW5zaWduZWQgbG9uZykgdmFsdWUpKTsKKwlhZGRfc3RyaW5nKCZwLCB0b2hleCh2YWx1ZWxlbikpOworCWFkZF9zdHJpbmcoJnAsIHRvaGV4KEFERFIocG5hbWUpKSk7CisJYWRkX3N0cmluZygmcCwgdG9oZXgoc3RybGVuKFJFTE9DKHBuYW1lKSkpKTsKKwlhZGRfc3RyaW5nKCZwLCAicHJvcGVydHkiKTsKKwkqcCA9IDA7CisJcmV0dXJuIGNhbGxfcHJvbSgiaW50ZXJwcmV0IiwgMSwgMSwgKHUzMikodW5zaWduZWQgbG9uZykgY21kKTsKIH0KIAogLyogV2UgY2FuJ3QgdXNlIHRoZSBzdGFuZGFyZCB2ZXJzaW9ucyBiZWNhdXNlIG9mIFJFTE9DIGhlYWRhY2hlcy4gKi8KQEAgLTk4MCw3ICsxMDQzLDcgQEAKIAogCXJ0YXNfaW5zdCA9IGNhbGxfcHJvbSgib3BlbiIsIDEsIDEsIEFERFIoIi9ydGFzIikpOwogCWlmICghSUhBTkRMRV9WQUxJRChydGFzX2luc3QpKSB7Ci0JCXByb21fcHJpbnRmKCJvcGVuaW5nIHJ0YXMgcGFja2FnZSBmYWlsZWQiKTsKKwkJcHJvbV9wcmludGYoIm9wZW5pbmcgcnRhcyBwYWNrYWdlIGZhaWxlZCAoJXgpXG4iLCBydGFzX2luc3QpOwogCQlyZXR1cm47CiAJfQogCkBAIC05ODgsNyArMTA1MSw3IEBACiAKIAlpZiAoY2FsbF9wcm9tX3JldCgiY2FsbC1tZXRob2QiLCAzLCAyLCAmZW50cnksCiAJCQkgIEFERFIoImluc3RhbnRpYXRlLXJ0YXMiKSwKLQkJCSAgcnRhc19pbnN0LCBiYXNlKSA9PSBQUk9NX0VSUk9SCisJCQkgIHJ0YXNfaW5zdCwgYmFzZSkgIT0gMAogCSAgICB8fCBlbnRyeSA9PSAwKSB7CiAJCXByb21fcHJpbnRmKCIgZmFpbGVkXG4iKTsKIAkJcmV0dXJuOwpAQCAtOTk3LDggKzEwNjAsMTAgQEAKIAogCXJlc2VydmVfbWVtKGJhc2UsIHNpemUpOwogCi0JcHJvbV9zZXRwcm9wKHJ0YXNfbm9kZSwgImxpbnV4LHJ0YXMtYmFzZSIsICZiYXNlLCBzaXplb2YoYmFzZSkpOwotCXByb21fc2V0cHJvcChydGFzX25vZGUsICJsaW51eCxydGFzLWVudHJ5IiwgJmVudHJ5LCBzaXplb2YoZW50cnkpKTsKKwlwcm9tX3NldHByb3AocnRhc19ub2RlLCAiL3J0YXMiLCAibGludXgscnRhcy1iYXNlIiwKKwkJICAgICAmYmFzZSwgc2l6ZW9mKGJhc2UpKTsKKwlwcm9tX3NldHByb3AocnRhc19ub2RlLCAiL3J0YXMiLCAibGludXgscnRhcy1lbnRyeSIsCisJCSAgICAgJmVudHJ5LCBzaXplb2YoZW50cnkpKTsKIAogCXByb21fZGVidWcoInJ0YXMgYmFzZSAgICAgPSAweCV4XG4iLCBiYXNlKTsKIAlwcm9tX2RlYnVnKCJydGFzIGVudHJ5ICAgID0gMHgleFxuIiwgZW50cnkpOwpAQCAtMTA4OSwxMCArMTE1NCw2IEBACiAJCWlmIChiYXNlIDwgbG9jYWxfYWxsb2NfYm90dG9tKQogCQkJbG9jYWxfYWxsb2NfYm90dG9tID0gYmFzZTsKIAotCQkvKiBTYXZlIGF3YXkgdGhlIFRDRSB0YWJsZSBhdHRyaWJ1dGVzIGZvciBsYXRlciB1c2UuICovCi0JCXByb21fc2V0cHJvcChub2RlLCAibGludXgsdGNlLWJhc2UiLCAmYmFzZSwgc2l6ZW9mKGJhc2UpKTsKLQkJcHJvbV9zZXRwcm9wKG5vZGUsICJsaW51eCx0Y2Utc2l6ZSIsICZtaW5zaXplLCBzaXplb2YobWluc2l6ZSkpOwotCiAJCS8qIEl0IHNlZW1zIE9GIGRvZXNuJ3QgbnVsbC10ZXJtaW5hdGUgdGhlIHBhdGggOi0oICovCiAJCW1lbXNldChwYXRoLCAwLCBzaXplb2YocGF0aCkpOwogCQkvKiBDYWxsIE9GIHRvIHNldHVwIHRoZSBUQ0UgaGFyZHdhcmUgKi8KQEAgLTExMDEsNiArMTE2MiwxMCBAQAogCQkJcHJvbV9wcmludGYoInBhY2thZ2UtdG8tcGF0aCBmYWlsZWRcbiIpOwogCQl9CiAKKwkJLyogU2F2ZSBhd2F5IHRoZSBUQ0UgdGFibGUgYXR0cmlidXRlcyBmb3IgbGF0ZXIgdXNlLiAqLworCQlwcm9tX3NldHByb3Aobm9kZSwgcGF0aCwgImxpbnV4LHRjZS1iYXNlIiwgJmJhc2UsIHNpemVvZihiYXNlKSk7CisJCXByb21fc2V0cHJvcChub2RlLCBwYXRoLCAibGludXgsdGNlLXNpemUiLCAmbWluc2l6ZSwgc2l6ZW9mKG1pbnNpemUpKTsKKwogCQlwcm9tX2RlYnVnKCJUQ0UgdGFibGU6ICVzXG4iLCBwYXRoKTsKIAkJcHJvbV9kZWJ1ZygiXHRub2RlID0gMHgleFxuIiwgbm9kZSk7CiAJCXByb21fZGVidWcoIlx0YmFzZSA9IDB4JXhcbiIsIGJhc2UpOwpAQCAtMTM0Miw2ICsxNDA3LDcgQEAKIC8qCiAgKiBGb3IgcmVhbGx5IG9sZCBwb3dlcm1hY3MsIHdlIG5lZWQgdG8gbWFwIHRoaW5ncyB3ZSBjbGFpbS4KICAqIEZvciB0aGF0LCB3ZSBuZWVkIHRoZSBpaGFuZGxlIG9mIHRoZSBtbXUuCisgKiBBbHNvLCBvbiB0aGUgbG9uZ3RyYWlsLCB3ZSBuZWVkIHRvIHdvcmsgYXJvdW5kIG90aGVyIGJ1Z3MuCiAgKi8KIHN0YXRpYyB2b2lkIF9faW5pdCBwcm9tX2ZpbmRfbW11KHZvaWQpCiB7CkBAIC0xMzU1LDEyICsxNDIxLDE5IEBACiAJaWYgKHByb21fZ2V0cHJvcChvcHJvbSwgIm1vZGVsIiwgdmVyc2lvbiwgc2l6ZW9mKHZlcnNpb24pKSA8PSAwKQogCQlyZXR1cm47CiAJdmVyc2lvbltzaXplb2YodmVyc2lvbikgLSAxXSA9IDA7Ci0JcHJvbV9wcmludGYoIk9GIHZlcnNpb24gaXMgJyVzJ1xuIiwgdmVyc2lvbik7CiAJLyogWFhYIG1pZ2h0IG5lZWQgdG8gYWRkIG90aGVyIHZlcnNpb25zIGhlcmUgKi8KLQlpZiAoc3RyY21wKHZlcnNpb24sICJPcGVuIEZpcm13YXJlLCAxLjAuNSIpICE9IDApCisJaWYgKHN0cmNtcCh2ZXJzaW9uLCAiT3BlbiBGaXJtd2FyZSwgMS4wLjUiKSA9PSAwKQorCQlvZl93b3JrYXJvdW5kcyA9IE9GX1dBX0NMQUlNOworCWVsc2UgaWYgKHN0cm5jbXAodmVyc2lvbiwgIkZpcm1Xb3JrcywzLiIsIDEyKSA9PSAwKSB7CisJCW9mX3dvcmthcm91bmRzID0gT0ZfV0FfQ0xBSU0gfCBPRl9XQV9MT05HVFJBSUw7CisJCWNhbGxfcHJvbSgiaW50ZXJwcmV0IiwgMSwgMSwgImRldiAvbWVtb3J5IDAgdG8gYWxsb3ctcmVjbGFpbSIpOworCX0gZWxzZQogCQlyZXR1cm47CisJX3Byb20tPm1lbW9yeSA9IGNhbGxfcHJvbSgib3BlbiIsIDEsIDEsIEFERFIoIi9tZW1vcnkiKSk7CiAJcHJvbV9nZXRwcm9wKF9wcm9tLT5jaG9zZW4sICJtbXUiLCAmX3Byb20tPm1tdW1hcCwKIAkJICAgICBzaXplb2YoX3Byb20tPm1tdW1hcCkpOworCWlmICghSUhBTkRMRV9WQUxJRChfcHJvbS0+bWVtb3J5KSB8fCAhSUhBTkRMRV9WQUxJRChfcHJvbS0+bW11bWFwKSkKKwkJb2Zfd29ya2Fyb3VuZHMgJj0gfk9GX1dBX0NMQUlNOwkJLyogaG1tbSAqLwogfQogI2Vsc2UKICNkZWZpbmUgcHJvbV9maW5kX21tdSgpCkBAIC0xMzgyLDE2ICsxNDU1LDE3IEBACiAJbWVtc2V0KHBhdGgsIDAsIDI1Nik7CiAJY2FsbF9wcm9tKCJpbnN0YW5jZS10by1wYXRoIiwgMywgMSwgX3Byb20tPnN0ZG91dCwgcGF0aCwgMjU1KTsKIAl2YWwgPSBjYWxsX3Byb20oImluc3RhbmNlLXRvLXBhY2thZ2UiLCAxLCAxLCBfcHJvbS0+c3Rkb3V0KTsKLQlwcm9tX3NldHByb3AoX3Byb20tPmNob3NlbiwgImxpbnV4LHN0ZG91dC1wYWNrYWdlIiwgJnZhbCwgc2l6ZW9mKHZhbCkpOworCXByb21fc2V0cHJvcChfcHJvbS0+Y2hvc2VuLCAiL2Nob3NlbiIsICJsaW51eCxzdGRvdXQtcGFja2FnZSIsCisJCSAgICAgJnZhbCwgc2l6ZW9mKHZhbCkpOwogCXByb21fcHJpbnRmKCJPRiBzdGRvdXQgZGV2aWNlIGlzOiAlc1xuIiwgUkVMT0Mob2Zfc3Rkb3V0X2RldmljZSkpOwotCXByb21fc2V0cHJvcChfcHJvbS0+Y2hvc2VuLCAibGludXgsc3Rkb3V0LXBhdGgiLAotCQkgICAgIFJFTE9DKG9mX3N0ZG91dF9kZXZpY2UpLCBzdHJsZW4oUkVMT0Mob2Zfc3Rkb3V0X2RldmljZSkpKzEpOworCXByb21fc2V0cHJvcChfcHJvbS0+Y2hvc2VuLCAiL2Nob3NlbiIsICJsaW51eCxzdGRvdXQtcGF0aCIsCisJCSAgICAgcGF0aCwgc3RybGVuKHBhdGgpICsgMSk7CiAKIAkvKiBJZiBpdCdzIGEgZGlzcGxheSwgbm90ZSBpdCAqLwogCW1lbXNldCh0eXBlLCAwLCBzaXplb2YodHlwZSkpOwogCXByb21fZ2V0cHJvcCh2YWwsICJkZXZpY2VfdHlwZSIsIHR5cGUsIHNpemVvZih0eXBlKSk7CiAJaWYgKHN0cmNtcCh0eXBlLCBSRUxPQygiZGlzcGxheSIpKSA9PSAwKQotCQlwcm9tX3NldHByb3AodmFsLCAibGludXgsYm9vdC1kaXNwbGF5IiwgTlVMTCwgMCk7CisJCXByb21fc2V0cHJvcCh2YWwsIHBhdGgsICJsaW51eCxib290LWRpc3BsYXkiLCBOVUxMLCAwKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IHByb21fY2xvc2Vfc3RkaW4odm9pZCkKQEAgLTE1MTQsNyArMTU4OCw3IEBACiAKIAkJLyogU3VjY2VzcyAqLwogCQlwcm9tX3ByaW50ZigiZG9uZVxuIik7Ci0JCXByb21fc2V0cHJvcChub2RlLCAibGludXgsb3BlbmVkIiwgTlVMTCwgMCk7CisJCXByb21fc2V0cHJvcChub2RlLCBwYXRoLCAibGludXgsb3BlbmVkIiwgTlVMTCwgMCk7CiAKIAkJLyogU2V0dXAgYSB1c2FibGUgY29sb3IgdGFibGUgd2hlbiB0aGUgYXBwcm9wcmlhdGUKIAkJICogbWV0aG9kIGlzIGF2YWlsYWJsZS4gU2hvdWxkIHVwZGF0ZSB0aGlzIHRvIHNldC1jb2xvcnMgKi8KQEAgLTE4ODQsOSArMTk1OCwxMSBAQAogCS8qIGludGVycnVwdCBvbiB0aGlzIHJldmlzaW9uIG9mIHUzIGlzIG51bWJlciAwIGFuZCBsZXZlbCAqLwogCWludGVycnVwdHNbMF0gPSAwOwogCWludGVycnVwdHNbMV0gPSAxOwotCXByb21fc2V0cHJvcChpMmMsICJpbnRlcnJ1cHRzIiwgJmludGVycnVwdHMsIHNpemVvZihpbnRlcnJ1cHRzKSk7CisJcHJvbV9zZXRwcm9wKGkyYywgIi91M0AwLGY4MDAwMDAwL2kyY0BmODAwMTAwMCIsICJpbnRlcnJ1cHRzIiwKKwkJICAgICAmaW50ZXJydXB0cywgc2l6ZW9mKGludGVycnVwdHMpKTsKIAlwYXJlbnQgPSAodTMyKW1waWM7Ci0JcHJvbV9zZXRwcm9wKGkyYywgImludGVycnVwdC1wYXJlbnQiLCAmcGFyZW50LCBzaXplb2YocGFyZW50KSk7CisJcHJvbV9zZXRwcm9wKGkyYywgIi91M0AwLGY4MDAwMDAwL2kyY0BmODAwMTAwMCIsICJpbnRlcnJ1cHQtcGFyZW50IiwKKwkJICAgICAmcGFyZW50LCBzaXplb2YocGFyZW50KSk7CiAjZW5kaWYKIH0KIApAQCAtMTkyMiwxMSArMTk5OCwxMSBAQAogCQlSRUxPQyhwcm9tX2luaXRyZF9lbmQpID0gUkVMT0MocHJvbV9pbml0cmRfc3RhcnQpICsgcjQ7CiAKIAkJdmFsID0gUkVMT0MocHJvbV9pbml0cmRfc3RhcnQpOwotCQlwcm9tX3NldHByb3AoX3Byb20tPmNob3NlbiwgImxpbnV4LGluaXRyZC1zdGFydCIsICZ2YWwsCi0JCQkgICAgIHNpemVvZih2YWwpKTsKKwkJcHJvbV9zZXRwcm9wKF9wcm9tLT5jaG9zZW4sICIvY2hvc2VuIiwgImxpbnV4LGluaXRyZC1zdGFydCIsCisJCQkgICAgICZ2YWwsIHNpemVvZih2YWwpKTsKIAkJdmFsID0gUkVMT0MocHJvbV9pbml0cmRfZW5kKTsKLQkJcHJvbV9zZXRwcm9wKF9wcm9tLT5jaG9zZW4sICJsaW51eCxpbml0cmQtZW5kIiwgJnZhbCwKLQkJCSAgICAgc2l6ZW9mKHZhbCkpOworCQlwcm9tX3NldHByb3AoX3Byb20tPmNob3NlbiwgIi9jaG9zZW4iLCAibGludXgsaW5pdHJkLWVuZCIsCisJCQkgICAgICZ2YWwsIHNpemVvZih2YWwpKTsKIAogCQlyZXNlcnZlX21lbShSRUxPQyhwcm9tX2luaXRyZF9zdGFydCksCiAJCQkgICAgUkVMT0MocHJvbV9pbml0cmRfZW5kKSAtIFJFTE9DKHByb21faW5pdHJkX3N0YXJ0KSk7CkBAIC0xOTY5LDE2ICsyMDQ1LDE3IEBACiAJcHJvbV9pbml0X2NsaWVudF9zZXJ2aWNlcyhwcCk7CiAKIAkvKgorCSAqIFNlZSBpZiB0aGlzIE9GIGlzIG9sZCBlbm91Z2ggdGhhdCB3ZSBuZWVkIHRvIGRvIGV4cGxpY2l0IG1hcHMKKwkgKiBhbmQgb3RoZXIgd29ya2Fyb3VuZHMKKwkgKi8KKwlwcm9tX2ZpbmRfbW11KCk7CisKKwkvKgogCSAqIEluaXQgcHJvbSBzdGRvdXQgZGV2aWNlCiAJICovCiAJcHJvbV9pbml0X3N0ZG91dCgpOwogCiAJLyoKLQkgKiBTZWUgaWYgdGhpcyBPRiBpcyBvbGQgZW5vdWdoIHRoYXQgd2UgbmVlZCB0byBkbyBleHBsaWNpdCBtYXBzCi0JICovCi0JcHJvbV9maW5kX21tdSgpOwotCi0JLyoKIAkgKiBDaGVjayBmb3IgYW4gaW5pdHJkCiAJICovCiAJcHJvbV9jaGVja19pbml0cmQocjMsIHI0KTsKQEAgLTE5ODksMTQgKzIwNjYsMTUgQEAKIAkgKi8KIAlSRUxPQyhvZl9wbGF0Zm9ybSkgPSBwcm9tX2ZpbmRfbWFjaGluZV90eXBlKCk7CiAJZ2V0cHJvcF9ydmFsID0gUkVMT0Mob2ZfcGxhdGZvcm0pOwotCXByb21fc2V0cHJvcChfcHJvbS0+Y2hvc2VuLCAibGludXgscGxhdGZvcm0iLAorCXByb21fc2V0cHJvcChfcHJvbS0+Y2hvc2VuLCAiL2Nob3NlbiIsICJsaW51eCxwbGF0Zm9ybSIsCiAJCSAgICAgJmdldHByb3BfcnZhbCwgc2l6ZW9mKGdldHByb3BfcnZhbCkpOwogCiAjaWZkZWYgQ09ORklHX1BQQ19QU0VSSUVTCiAJLyoKIAkgKiBPbiBwU2VyaWVzLCBpbmZvcm0gdGhlIGZpcm13YXJlIGFib3V0IG91ciBjYXBhYmlsaXRpZXMKIAkgKi8KLQlpZiAoUkVMT0Mob2ZfcGxhdGZvcm0pICYgUExBVEZPUk1fUFNFUklFUykKKwlpZiAoUkVMT0Mob2ZfcGxhdGZvcm0pID09IFBMQVRGT1JNX1BTRVJJRVMgfHwKKwkgICAgUkVMT0Mob2ZfcGxhdGZvcm0pID09IFBMQVRGT1JNX1BTRVJJRVNfTFBBUikKIAkJcHJvbV9zZW5kX2NhcGFiaWxpdGllcygpOwogI2VuZGlmCiAKQEAgLTIwNTAsMjEgKzIxMjgsMjMgQEAKIAkgKiBGaWxsIGluIHNvbWUgaW5mb3MgZm9yIHVzZSBieSB0aGUga2VybmVsIGxhdGVyIG9uCiAJICovCiAJaWYgKFJFTE9DKHByb21fbWVtb3J5X2xpbWl0KSkKLQkJcHJvbV9zZXRwcm9wKF9wcm9tLT5jaG9zZW4sICJsaW51eCxtZW1vcnktbGltaXQiLAorCQlwcm9tX3NldHByb3AoX3Byb20tPmNob3NlbiwgIi9jaG9zZW4iLCAibGludXgsbWVtb3J5LWxpbWl0IiwKIAkJCSAgICAgJlJFTE9DKHByb21fbWVtb3J5X2xpbWl0KSwKIAkJCSAgICAgc2l6ZW9mKHByb21fbWVtb3J5X2xpbWl0KSk7CiAjaWZkZWYgQ09ORklHX1BQQzY0CiAJaWYgKFJFTE9DKHBwYzY0X2lvbW11X29mZikpCi0JCXByb21fc2V0cHJvcChfcHJvbS0+Y2hvc2VuLCAibGludXgsaW9tbXUtb2ZmIiwgTlVMTCwgMCk7CisJCXByb21fc2V0cHJvcChfcHJvbS0+Y2hvc2VuLCAiL2Nob3NlbiIsICJsaW51eCxpb21tdS1vZmYiLAorCQkJICAgICBOVUxMLCAwKTsKIAogCWlmIChSRUxPQyhpb21tdV9mb3JjZV9vbikpCi0JCXByb21fc2V0cHJvcChfcHJvbS0+Y2hvc2VuLCAibGludXgsaW9tbXUtZm9yY2Utb24iLCBOVUxMLCAwKTsKKwkJcHJvbV9zZXRwcm9wKF9wcm9tLT5jaG9zZW4sICIvY2hvc2VuIiwgImxpbnV4LGlvbW11LWZvcmNlLW9uIiwKKwkJCSAgICAgTlVMTCwgMCk7CiAKIAlpZiAoUkVMT0MocHJvbV90Y2VfYWxsb2Nfc3RhcnQpKSB7Ci0JCXByb21fc2V0cHJvcChfcHJvbS0+Y2hvc2VuLCAibGludXgsdGNlLWFsbG9jLXN0YXJ0IiwKKwkJcHJvbV9zZXRwcm9wKF9wcm9tLT5jaG9zZW4sICIvY2hvc2VuIiwgImxpbnV4LHRjZS1hbGxvYy1zdGFydCIsCiAJCQkgICAgICZSRUxPQyhwcm9tX3RjZV9hbGxvY19zdGFydCksCiAJCQkgICAgIHNpemVvZihwcm9tX3RjZV9hbGxvY19zdGFydCkpOwotCQlwcm9tX3NldHByb3AoX3Byb20tPmNob3NlbiwgImxpbnV4LHRjZS1hbGxvYy1lbmQiLAorCQlwcm9tX3NldHByb3AoX3Byb20tPmNob3NlbiwgIi9jaG9zZW4iLCAibGludXgsdGNlLWFsbG9jLWVuZCIsCiAJCQkgICAgICZSRUxPQyhwcm9tX3RjZV9hbGxvY19lbmQpLAogCQkJICAgICBzaXplb2YocHJvbV90Y2VfYWxsb2NfZW5kKSk7CiAJfQpAQCAtMjA4MSw4ICsyMTYxLDEzIEBACiAJcHJvbV9wcmludGYoImNvcHlpbmcgT0YgZGV2aWNlIHRyZWUgLi4uXG4iKTsKIAlmbGF0dGVuX2RldmljZV90cmVlKCk7CiAKLQkvKiBpbiBjYXNlIHN0ZGluIGlzIFVTQiBhbmQgc3RpbGwgYWN0aXZlIG9uIElCTSBtYWNoaW5lcy4uLiAqLwotCXByb21fY2xvc2Vfc3RkaW4oKTsKKwkvKgorCSAqIGluIGNhc2Ugc3RkaW4gaXMgVVNCIGFuZCBzdGlsbCBhY3RpdmUgb24gSUJNIG1hY2hpbmVzLi4uCisJICogVW5mb3J0dW5hdGVseSBxdWllc2NlIGNyYXNoZXMgb24gc29tZSBwb3dlcm1hY3MgaWYgd2UgaGF2ZQorCSAqIGNsb3NlZCBzdGRpbiBhbHJlYWR5IChpbiBwYXJ0aWN1bGFyIHRoZSBwb3dlcmJvb2sgMTAxKS4KKwkgKi8KKwlpZiAoUkVMT0Mob2ZfcGxhdGZvcm0pICE9IFBMQVRGT1JNX1BPV0VSTUFDKQorCQlwcm9tX2Nsb3NlX3N0ZGluKCk7CiAKIAkvKgogCSAqIENhbGwgT0YgInF1aWVzY2UiIG1ldGhvZCB0byBzaHV0IGRvd24gcGVuZGluZyBETUEncyBmcm9tCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMtcHJvYy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzLXByb2MuYwppbmRleCA1YmRkNWIwLi43YTk1YjhhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMtcHJvYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy1wcm9jLmMKQEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlIDxhc20vcnRhcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+IC8qIGZvciBwcGNfbWQgKi8KICNpbmNsdWRlIDxhc20vdGltZS5oPgotI2luY2x1ZGUgPGFzbS9zeXN0ZW1jZmcuaD4KIAogLyogVG9rZW4gZm9yIFNlbnNvcnMgKi8KICNkZWZpbmUgS0VZX1NXSVRDSAkJMHgwMDAxCkBAIC0yNTksNyArMjU4LDcgQEAKIHsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmVudHJ5OwogCi0JaWYgKCEoc3lzdGVtY2ZnLT5wbGF0Zm9ybSAmIFBMQVRGT1JNX1BTRVJJRVMpKQorCWlmIChfbWFjaGluZSAhPSBQTEFURk9STV9QU0VSSUVTICYmIF9tYWNoaW5lICE9IFBMQVRGT1JNX1BTRVJJRVNfTFBBUikKIAkJcmV0dXJuIDE7CiAKIAlydGFzX25vZGUgPSBvZl9maW5kX25vZGVfYnlfbmFtZShOVUxMLCAicnRhcyIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMuYwppbmRleCA5ZDRlMDdmLi40MjgzZmEzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMuYwpAQCAtMjksOSArMjksNiBAQAogI2luY2x1ZGUgPGFzbS9kZWxheS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2xtYi5oPgotI2lmZGVmIENPTkZJR19QUEM2NAotI2luY2x1ZGUgPGFzbS9zeXN0ZW1jZmcuaD4KLSNlbmRpZgogCiBzdHJ1Y3QgcnRhc190IHJ0YXMgPSB7CiAJLmxvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQKQEAgLTY3MSw3ICs2NjgsNyBAQAogCSAqIHRoZSBzdG9wLXNlbGYgdG9rZW4gaWYgYW55CiAJICovCiAjaWZkZWYgQ09ORklHX1BQQzY0Ci0JaWYgKHN5c3RlbWNmZy0+cGxhdGZvcm0gPT0gUExBVEZPUk1fUFNFUklFU19MUEFSKQorCWlmIChfbWFjaGluZSA9PSBQTEFURk9STV9QU0VSSUVTX0xQQVIpCiAJCXJ0YXNfcmVnaW9uID0gbWluKGxtYi5ybW9fc2l6ZSwgUlRBU19JTlNUQU5USUFURV9NQVgpOwogI2VuZGlmCiAJcnRhc19ybW9fYnVmID0gbG1iX2FsbG9jX2Jhc2UoUlRBU19STU9CVUZfTUFYLCBQQUdFX1NJWkUsIHJ0YXNfcmVnaW9uKTsKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL3J0YXNfcGNpLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXNfcGNpLmMKc2ltaWxhcml0eSBpbmRleCA5MiUKcmVuYW1lIGZyb20gYXJjaC9wcGM2NC9rZXJuZWwvcnRhc19wY2kuYwpyZW5hbWUgdG8gYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzX3BjaS5jCmluZGV4IDNjM2YxOTEuLjBlNWE4ZTEgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQva2VybmVsL3J0YXNfcGNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzX3BjaS5jCkBAIC01LDE5ICs1LDE5IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDMgQW50b24gQmxhbmNoYXJkIDxhbnRvbkBhdS5pYm0uY29tPiwgSUJNCiAgKgogICogUlRBUyBzcGVjaWZpYyByb3V0aW5lcyBmb3IgUENJLgotICogCisgKgogICogQmFzZWQgb24gY29kZSBmcm9tIHBjaS5jLCBjaHJwX3BjaS5jIGFuZCBwU2VyaWVzX3BjaS5jCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgogICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqICAgIAorICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKiAKKyAqCiAgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQpAQCAtNDcsNyArNDcsNyBAQAogc3RhdGljIGludCBpYm1fcmVhZF9wY2lfY29uZmlnOwogc3RhdGljIGludCBpYm1fd3JpdGVfcGNpX2NvbmZpZzsKIAotc3RhdGljIGludCBjb25maWdfYWNjZXNzX3ZhbGlkKHN0cnVjdCBwY2lfZG4gKmRuLCBpbnQgd2hlcmUpCitzdGF0aWMgaW5saW5lIGludCBjb25maWdfYWNjZXNzX3ZhbGlkKHN0cnVjdCBwY2lfZG4gKmRuLCBpbnQgd2hlcmUpCiB7CiAJaWYgKHdoZXJlIDwgMjU2KQogCQlyZXR1cm4gMTsKQEAgLTcyLDE2ICs3MiwxNCBAQAogICAgICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBydGFzX3JlYWRfY29uZmlnKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4sIGludCB3aGVyZSwgaW50IHNpemUsIHUzMiAqdmFsKQorc3RhdGljIGludCBydGFzX3JlYWRfY29uZmlnKHN0cnVjdCBwY2lfZG4gKnBkbiwgaW50IHdoZXJlLCBpbnQgc2l6ZSwgdTMyICp2YWwpCiB7CiAJaW50IHJldHVybnZhbCA9IC0xOwogCXVuc2lnbmVkIGxvbmcgYnVpZCwgYWRkcjsKIAlpbnQgcmV0OwotCXN0cnVjdCBwY2lfZG4gKnBkbjsKIAotCWlmICghZG4gfHwgIWRuLT5kYXRhKQorCWlmICghcGRuKQogCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOwotCXBkbiA9IGRuLT5kYXRhOwogCWlmICghY29uZmlnX2FjY2Vzc192YWxpZChwZG4sIHdoZXJlKSkKIAkJcmV0dXJuIFBDSUJJT1NfQkFEX1JFR0lTVEVSX05VTUJFUjsKIApAQCAtOTAsNyArODgsNyBAQAogCWJ1aWQgPSBwZG4tPnBoYi0+YnVpZDsKIAlpZiAoYnVpZCkgewogCQlyZXQgPSBydGFzX2NhbGwoaWJtX3JlYWRfcGNpX2NvbmZpZywgNCwgMiwgJnJldHVybnZhbCwKLQkJCQlhZGRyLCBidWlkID4+IDMyLCBidWlkICYgMHhmZmZmZmZmZiwgc2l6ZSk7CisJCQkJYWRkciwgQlVJRF9ISShidWlkKSwgQlVJRF9MTyhidWlkKSwgc2l6ZSk7CiAJfSBlbHNlIHsKIAkJcmV0ID0gcnRhc19jYWxsKHJlYWRfcGNpX2NvbmZpZywgMiwgMiwgJnJldHVybnZhbCwgYWRkciwgc2l6ZSk7CiAJfQpAQCAtMTAwLDcgKzk4LDcgQEAKIAkJcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKIAogCWlmIChyZXR1cm52YWwgPT0gRUVIX0lPX0VSUk9SX1ZBTFVFKHNpemUpICYmCi0JICAgIGVlaF9kbl9jaGVja19mYWlsdXJlIChkbiwgTlVMTCkpCisJICAgIGVlaF9kbl9jaGVja19mYWlsdXJlIChwZG4tPm5vZGUsIE5VTEwpKQogCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOwogCiAJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKQEAgLTExOCwyMyArMTE2LDIzIEBACiAJCWJ1c2RuID0gYnVzLT5zeXNkYXRhOwkvKiBtdXN0IGJlIGEgcGhiICovCiAKIAkvKiBTZWFyY2ggb25seSBkaXJlY3QgY2hpbGRyZW4gb2YgdGhlIGJ1cyAqLwotCWZvciAoZG4gPSBidXNkbi0+Y2hpbGQ7IGRuOyBkbiA9IGRuLT5zaWJsaW5nKQotCQlpZiAoZG4tPmRhdGEgJiYgUENJX0ROKGRuKS0+ZGV2Zm4gPT0gZGV2Zm4KKwlmb3IgKGRuID0gYnVzZG4tPmNoaWxkOyBkbjsgZG4gPSBkbi0+c2libGluZykgeworCQlzdHJ1Y3QgcGNpX2RuICpwZG4gPSBQQ0lfRE4oZG4pOworCQlpZiAocGRuICYmIHBkbi0+ZGV2Zm4gPT0gZGV2Zm4KIAkJICAgICYmIG9mX2RldmljZV9hdmFpbGFibGUoZG4pKQotCQkJcmV0dXJuIHJ0YXNfcmVhZF9jb25maWcoZG4sIHdoZXJlLCBzaXplLCB2YWwpOworCQkJcmV0dXJuIHJ0YXNfcmVhZF9jb25maWcocGRuLCB3aGVyZSwgc2l6ZSwgdmFsKTsKKwl9CiAKIAlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOwogfQogCi1pbnQgcnRhc193cml0ZV9jb25maWcoc3RydWN0IGRldmljZV9ub2RlICpkbiwgaW50IHdoZXJlLCBpbnQgc2l6ZSwgdTMyIHZhbCkKK2ludCBydGFzX3dyaXRlX2NvbmZpZyhzdHJ1Y3QgcGNpX2RuICpwZG4sIGludCB3aGVyZSwgaW50IHNpemUsIHUzMiB2YWwpCiB7CiAJdW5zaWduZWQgbG9uZyBidWlkLCBhZGRyOwogCWludCByZXQ7Ci0Jc3RydWN0IHBjaV9kbiAqcGRuOwogCi0JaWYgKCFkbiB8fCAhZG4tPmRhdGEpCisJaWYgKCFwZG4pCiAJCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7Ci0JcGRuID0gZG4tPmRhdGE7CiAJaWYgKCFjb25maWdfYWNjZXNzX3ZhbGlkKHBkbiwgd2hlcmUpKQogCQlyZXR1cm4gUENJQklPU19CQURfUkVHSVNURVJfTlVNQkVSOwogCkBAIC0xNDIsNyArMTQwLDggQEAKIAkJKHBkbi0+ZGV2Zm4gPDwgOCkgfCAod2hlcmUgJiAweGZmKTsKIAlidWlkID0gcGRuLT5waGItPmJ1aWQ7CiAJaWYgKGJ1aWQpIHsKLQkJcmV0ID0gcnRhc19jYWxsKGlibV93cml0ZV9wY2lfY29uZmlnLCA1LCAxLCBOVUxMLCBhZGRyLCBidWlkID4+IDMyLCBidWlkICYgMHhmZmZmZmZmZiwgc2l6ZSwgKHVsb25nKSB2YWwpOworCQlyZXQgPSBydGFzX2NhbGwoaWJtX3dyaXRlX3BjaV9jb25maWcsIDUsIDEsIE5VTEwsIGFkZHIsCisJCQlCVUlEX0hJKGJ1aWQpLCBCVUlEX0xPKGJ1aWQpLCBzaXplLCAodWxvbmcpIHZhbCk7CiAJfSBlbHNlIHsKIAkJcmV0ID0gcnRhc19jYWxsKHdyaXRlX3BjaV9jb25maWcsIDMsIDEsIE5VTEwsIGFkZHIsIHNpemUsICh1bG9uZyl2YWwpOwogCX0KQEAgLTE2NSwxMCArMTY0LDEyIEBACiAJCWJ1c2RuID0gYnVzLT5zeXNkYXRhOwkvKiBtdXN0IGJlIGEgcGhiICovCiAKIAkvKiBTZWFyY2ggb25seSBkaXJlY3QgY2hpbGRyZW4gb2YgdGhlIGJ1cyAqLwotCWZvciAoZG4gPSBidXNkbi0+Y2hpbGQ7IGRuOyBkbiA9IGRuLT5zaWJsaW5nKQotCQlpZiAoZG4tPmRhdGEgJiYgUENJX0ROKGRuKS0+ZGV2Zm4gPT0gZGV2Zm4KKwlmb3IgKGRuID0gYnVzZG4tPmNoaWxkOyBkbjsgZG4gPSBkbi0+c2libGluZykgeworCQlzdHJ1Y3QgcGNpX2RuICpwZG4gPSBQQ0lfRE4oZG4pOworCQlpZiAocGRuICYmIHBkbi0+ZGV2Zm4gPT0gZGV2Zm4KIAkJICAgICYmIG9mX2RldmljZV9hdmFpbGFibGUoZG4pKQotCQkJcmV0dXJuIHJ0YXNfd3JpdGVfY29uZmlnKGRuLCB3aGVyZSwgc2l6ZSwgdmFsKTsKKwkJCXJldHVybiBydGFzX3dyaXRlX2NvbmZpZyhwZG4sIHdoZXJlLCBzaXplLCB2YWwpOworCX0KIAlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOwogfQogCkBAIC0yMjEsNyArMjIyLDcgQEAKIAkvKiBQeXRob24ncyByZWdpc3RlciBmaWxlIGlzIDEgTUIgaW4gc2l6ZS4gKi8KIAljaGlwX3JlZ3MgPSBpb3JlbWFwKHJlZ19zdHJ1Y3QuYWRkcmVzcyAmIH4oMHhmZmZmZlVMKSwgMHgxMDAwMDApOwogCi0JLyogCisJLyoKIAkgKiBGaXJtd2FyZSBkb2Vzbid0IGFsd2F5cyBjbGVhciB0aGlzIGJpdCB3aGljaCBpcyBjcml0aWNhbAogCSAqIGZvciBnb29kIHBlcmZvcm1hbmNlIC0gQW50b24KIAkgKi8KQEAgLTI5Miw3ICsyOTMsNyBAQAogCWlmIChidXNfcmFuZ2UgPT0gTlVMTCB8fCBsZW4gPCAyICogc2l6ZW9mKGludCkpIHsKIAkJcmV0dXJuIDE7CiAgCX0KLSAKKwogCXBoYi0+Zmlyc3RfYnVzbm8gPSAgYnVzX3JhbmdlWzBdOwogCXBoYi0+bGFzdF9idXNubyAgPSAgYnVzX3JhbmdlWzFdOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwLWNvbW1vbi5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cC1jb21tb24uYwppbmRleCBlMjI4NTZlLi4zM2U3ZjJjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwLWNvbW1vbi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXAtY29tbW9uLmMKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vcHJvbS5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vdmRzb19kYXRhcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL3NtcC5oPgogI2luY2x1ZGUgPGFzbS9lbGYuaD4KQEAgLTUxLDYgKzUyLDkgQEAKICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9tbXUuaD4KICNpbmNsdWRlIDxhc20vbG1iLmg+CisjaW5jbHVkZSA8YXNtL3htb24uaD4KKworI2luY2x1ZGUgInNldHVwLmgiCiAKICN1bmRlZiBERUJVRwogCkBAIC02MCw2ICs2NCwxMyBAQAogI2RlZmluZSBEQkcoZm10Li4uKQogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfUFBDX01VTFRJUExBVEZPUk0KK2ludCBfbWFjaGluZSA9IDA7CitFWFBPUlRfU1lNQk9MKF9tYWNoaW5lKTsKKyNlbmRpZgorCit1bnNpZ25lZCBsb25nIGtsaW1pdCA9ICh1bnNpZ25lZCBsb25nKSBfZW5kOworCiAvKgogICogVGhpcyBzdGlsbCBzZWVtcyB0byBiZSBuZWVkZWQuLi4gLS0gcGF1bHVzCiAgKi8gCkBAIC00MzMsMTAgKzQ0NCw4IEBACiAJaWYgKGluaXRyZF9zdGFydCA+PSBLRVJORUxCQVNFICYmIGluaXRyZF9lbmQgPj0gS0VSTkVMQkFTRSAmJgogCSAgICBpbml0cmRfZW5kID4gaW5pdHJkX3N0YXJ0KQogCQlST09UX0RFViA9IFJvb3RfUkFNMDsKLQllbHNlIHsKLQkJcHJpbnRrKCJCb2d1cyBpbml0cmQgJTA4bHggJTA4bHhcbiIsIGluaXRyZF9zdGFydCwgaW5pdHJkX2VuZCk7CisJZWxzZQogCQlpbml0cmRfc3RhcnQgPSBpbml0cmRfZW5kID0gMDsKLQl9CiAKIAlpZiAoaW5pdHJkX3N0YXJ0KQogCQlwcmludGsoIkZvdW5kIGluaXRyZCBhdCAweCVseDoweCVseFxuIiwgaW5pdHJkX3N0YXJ0LCBpbml0cmRfZW5kKTsKQEAgLTUxMCw4ICs1MTksOCBAQAogCSAqIE9uIHBTZXJpZXMgTFBBUiwgd2UgbmVlZCB0byBrbm93IGhvdyBtYW55IGNwdXMKIAkgKiBjb3VsZCBwb3NzaWJseSBiZSBhZGRlZCB0byB0aGlzIHBhcnRpdGlvbi4KIAkgKi8KLQlpZiAoc3lzdGVtY2ZnLT5wbGF0Zm9ybSA9PSBQTEFURk9STV9QU0VSSUVTX0xQQVIgJiYKLQkJCQkoZG4gPSBvZl9maW5kX25vZGVfYnlfcGF0aCgiL3J0YXMiKSkpIHsKKwlpZiAoX21hY2hpbmUgPT0gUExBVEZPUk1fUFNFUklFU19MUEFSICYmCisJICAgIChkbiA9IG9mX2ZpbmRfbm9kZV9ieV9wYXRoKCIvcnRhcyIpKSkgewogCQlpbnQgbnVtX2FkZHJfY2VsbCwgbnVtX3NpemVfY2VsbCwgbWF4Y3B1czsKIAkJdW5zaWduZWQgaW50ICppcmVnOwogCkBAIC01NTUsNyArNTY0LDI3IEBACiAJCQljcHVfc2V0KGNwdSBeIDB4MSwgY3B1X3NpYmxpbmdfbWFwW2NwdV0pOwogCX0KIAotCXN5c3RlbWNmZy0+cHJvY2Vzc29yQ291bnQgPSBudW1fcHJlc2VudF9jcHVzKCk7CisJdmRzb19kYXRhLT5wcm9jZXNzb3JDb3VudCA9IG51bV9wcmVzZW50X2NwdXMoKTsKICNlbmRpZiAvKiBDT05GSUdfUFBDNjQgKi8KIH0KICNlbmRpZiAvKiBDT05GSUdfU01QICovCisKKyNpZmRlZiBDT05GSUdfWE1PTgorc3RhdGljIGludCBfX2luaXQgZWFybHlfeG1vbihjaGFyICpwKQoreworCS8qIGVuc3VyZSB4bW9uIGlzIGVuYWJsZWQgKi8KKwlpZiAocCkgeworCQlpZiAoc3RybmNtcChwLCAib24iLCAyKSA9PSAwKQorCQkJeG1vbl9pbml0KDEpOworCQlpZiAoc3RybmNtcChwLCAib2ZmIiwgMykgPT0gMCkKKwkJCXhtb25faW5pdCgwKTsKKwkJaWYgKHN0cm5jbXAocCwgImVhcmx5IiwgNSkgIT0gMCkKKwkJCXJldHVybiAwOworCX0KKwl4bW9uX2luaXQoMSk7CisJZGVidWdnZXIoTlVMTCk7CisKKwlyZXR1cm4gMDsKK30KK2Vhcmx5X3BhcmFtKCJ4bW9uIiwgZWFybHlfeG1vbik7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXAuaCBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWJiYTc1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cC5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfUE9XRVJQQ19LRVJORUxfU0VUVVBfSAorI2RlZmluZSBfUE9XRVJQQ19LRVJORUxfU0VUVVBfSAorCit2b2lkIGNoZWNrX2Zvcl9pbml0cmQodm9pZCk7CisKKyNlbmRpZiAvKiBfUE9XRVJQQ19LRVJORUxfU0VUVVBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF8zMi5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF8zMi5jCmluZGV4IDNhZjI2MzEuLmM5OGNmY2MgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfMzIuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzMyLmMKQEAgLTQwLDYgKzQwLDggQEAKICNpbmNsdWRlIDxhc20veG1vbi5oPgogI2luY2x1ZGUgPGFzbS90aW1lLmg+CiAKKyNpbmNsdWRlICJzZXR1cC5oIgorCiAjZGVmaW5lIERCRyhmbXQuLi4pCiAKICNpZiBkZWZpbmVkIENPTkZJR19LR0RCCkBAIC03MCw4ICs3Miw2IEBACiBpbnQgaGF2ZV9vZiA9IDE7CiAKICNpZmRlZiBDT05GSUdfUFBDX01VTFRJUExBVEZPUk0KLWludCBfbWFjaGluZSA9IDA7Ci0KIGV4dGVybiB2b2lkIHByZXBfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIHBtYWNfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIGNocnBfaW5pdCh2b2lkKTsKQEAgLTI3OSw3ICsyNzksNiBAQAogLyogV2FybmluZywgSU8gYmFzZSBpcyBub3QgeWV0IGluaXRlZCAqLwogdm9pZCBfX2luaXQgc2V0dXBfYXJjaChjaGFyICoqY21kbGluZV9wKQogewotCWV4dGVybiBjaGFyICprbGltaXQ7CiAJZXh0ZXJuIHZvaWQgZG9faW5pdF9ib290bWVtKHZvaWQpOwogCiAJLyogc28gdWRlbGF5IGRvZXMgc29tZXRoaW5nIHNlbnNpYmxlLCBhc3N1bWUgPD0gMTAwMCBib2dvbWlwcyAqLwpAQCAtMzAzLDE0ICszMDIsOSBAQAogCQlwbWFjX2ZlYXR1cmVfaW5pdCgpOwkvKiBOZXcgY29vbCB3YXkgKi8KICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX1hNT04KLQl4bW9uX21hcF9zY2MoKTsKLQlpZiAoc3Ryc3RyKGNtZF9saW5lLCAieG1vbiIpKSB7Ci0JCXhtb25faW5pdCgxKTsKLQkJZGVidWdnZXIoTlVMTCk7Ci0JfQotI2VuZGlmIC8qIENPTkZJR19YTU9OICovCi0JaWYgKCBwcGNfbWQucHJvZ3Jlc3MgKSBwcGNfbWQucHJvZ3Jlc3MoInNldHVwX2FyY2g6IGVudGVyIiwgMHgzZWFiKTsKKyNpZmRlZiBDT05GSUdfWE1PTl9ERUZBVUxUCisJeG1vbl9pbml0KDEpOworI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19LR0RCKQogCWlmIChwcGNfbWQua2dkYl9tYXBfc2NjKQpAQCAtMzQzLDcgKzMzNyw3IEBACiAJaW5pdF9tbS5zdGFydF9jb2RlID0gUEFHRV9PRkZTRVQ7CiAJaW5pdF9tbS5lbmRfY29kZSA9ICh1bnNpZ25lZCBsb25nKSBfZXRleHQ7CiAJaW5pdF9tbS5lbmRfZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBfZWRhdGE7Ci0JaW5pdF9tbS5icmsgPSAodW5zaWduZWQgbG9uZykga2xpbWl0OworCWluaXRfbW0uYnJrID0ga2xpbWl0OwogCiAJLyogU2F2ZSB1bnBhcnNlZCBjb21tYW5kIGxpbmUgY29weSBmb3IgL3Byb2MvY21kbGluZSAqLwogCXN0cmxjcHkoc2F2ZWRfY29tbWFuZF9saW5lLCBjbWRfbGluZSwgQ09NTUFORF9MSU5FX1NJWkUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF82NC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF82NC5jCmluZGV4IDA0NzFlODQuLmZkYmQ5ZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfNjQuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzY0LmMKQEAgLTU3LDEwICs1NywxMSBAQAogI2luY2x1ZGUgPGFzbS9sbWIuaD4KICNpbmNsdWRlIDxhc20vaXNlcmllcy9pdF9scF9uYWNhLmg+CiAjaW5jbHVkZSA8YXNtL2Zpcm13YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL3N5c3RlbWNmZy5oPgogI2luY2x1ZGUgPGFzbS94bW9uLmg+CiAjaW5jbHVkZSA8YXNtL3VkYmcuaD4KIAorI2luY2x1ZGUgInNldHVwLmgiCisKICNpZmRlZiBERUJVRwogI2RlZmluZSBEQkcoZm10Li4uKSB1ZGJnX3ByaW50ZihmbXQpCiAjZWxzZQpAQCAtOTQsMTUgKzk1LDYgQEAKIAlkbyB7IHVkYmdfcHV0YyA9IGNhbGxfcnRhc19kaXNwbGF5X3N0YXR1c19kZWxheTsgfSB3aGlsZSgwKQogI2VuZGlmCiAKLS8qIGV4dGVybiB2b2lkICpzdGFiOyAqLwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcga2xpbWl0OwotCi1leHRlcm4gdm9pZCBtbV9pbml0X3BwYzY0KHZvaWQpOwotZXh0ZXJuIHZvaWQgc3RhYl9pbml0aWFsaXplKHVuc2lnbmVkIGxvbmcgc3RhYik7Ci1leHRlcm4gdm9pZCBodGFiX2luaXRpYWxpemUodm9pZCk7Ci1leHRlcm4gdm9pZCBlYXJseV9pbml0X2RldnRyZWUodm9pZCAqZmxhdF9kdCk7Ci1leHRlcm4gdm9pZCB1bmZsYXR0ZW5fZGV2aWNlX3RyZWUodm9pZCk7Ci0KIGludCBoYXZlX29mID0gMTsKIGludCBib290X2NwdWlkID0gMDsKIGludCBib290X2NwdWlkX3BoeXMgPSAwOwpAQCAtMjU0LDExICsyNDYsMTAgQEAKIAkgKiBJdGVyYXRlIGFsbCBwcGNfbWQgc3RydWN0dXJlcyB1bnRpbCB3ZSBmaW5kIHRoZSBwcm9wZXIKIAkgKiBvbmUgZm9yIHRoZSBjdXJyZW50IG1hY2hpbmUgdHlwZQogCSAqLwotCURCRygiUHJvYmluZyBtYWNoaW5lIHR5cGUgZm9yIHBsYXRmb3JtICV4Li4uXG4iLAotCSAgICBzeXN0ZW1jZmctPnBsYXRmb3JtKTsKKwlEQkcoIlByb2JpbmcgbWFjaGluZSB0eXBlIGZvciBwbGF0Zm9ybSAleC4uLlxuIiwgX21hY2hpbmUpOwogCiAJZm9yIChtYWNoID0gbWFjaGluZXM7ICptYWNoOyBtYWNoKyspIHsKLQkJaWYgKCgqbWFjaCktPnByb2JlKHN5c3RlbWNmZy0+cGxhdGZvcm0pKQorCQlpZiAoKCptYWNoKS0+cHJvYmUoX21hY2hpbmUpKQogCQkJYnJlYWs7CiAJfQogCS8qIFdoYXQgY2FuIHdlIGRvIGlmIHdlIGRpZG4ndCBmaW5kID8gKi8KQEAgLTI5MCw2ICsyODEsMjggQEAKIAlEQkcoIiA8LSBlYXJseV9zZXR1cCgpXG4iKTsKIH0KIAorI2lmZGVmIENPTkZJR19TTVAKK3ZvaWQgZWFybHlfc2V0dXBfc2Vjb25kYXJ5KHZvaWQpCit7CisJc3RydWN0IHBhY2Ffc3RydWN0ICpscGFjYSA9IGdldF9wYWNhKCk7CisKKwkvKiBNYXJrIGVuYWJsZWQgaW4gUEFDQSAqLworCWxwYWNhLT5wcm9jX2VuYWJsZWQgPSAwOworCisJLyogSW5pdGlhbGl6ZSBoYXNoIHRhYmxlIGZvciB0aGF0IENQVSAqLworCWh0YWJfaW5pdGlhbGl6ZV9zZWNvbmRhcnkoKTsKKworCS8qIEluaXRpYWxpemUgU1RBQi9TTEIuIFdlIHVzZSBhIHZpcnR1YWwgYWRkcmVzcyBhcyBpdCB3b3JrcworCSAqIGluIHJlYWwgbW9kZSBvbiBwU2VyaWVzIGFuZCB3ZSB3YW50IGEgdmlydXRhbCBhZGRyZXNzIG9uCisJICogaVNlcmllcyBhbnl3YXkKKwkgKi8KKwlpZiAoY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfU0xCKSkKKwkJc2xiX2luaXRpYWxpemUoKTsKKwllbHNlCisJCXN0YWJfaW5pdGlhbGl6ZShscGFjYS0+c3RhYl9hZGRyKTsKK30KKworI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAogI2lmIGRlZmluZWQoQ09ORklHX1NNUCkgfHwgZGVmaW5lZChDT05GSUdfS0VYRUMpCiB2b2lkIHNtcF9yZWxlYXNlX2NwdXModm9pZCkKQEAgLTMxNSw3ICszMjgsOCBAQAogI2VuZGlmIC8qIENPTkZJR19TTVAgfHwgQ09ORklHX0tFWEVDICovCiAKIC8qCi0gKiBJbml0aWFsaXplIHNvbWUgcmVtYWluaW5nIG1lbWJlcnMgb2YgdGhlIHBwYzY0X2NhY2hlcyBhbmQgc3lzdGVtY2ZnIHN0cnVjdHVyZXMKKyAqIEluaXRpYWxpemUgc29tZSByZW1haW5pbmcgbWVtYmVycyBvZiB0aGUgcHBjNjRfY2FjaGVzIGFuZCBzeXN0ZW1jZmcKKyAqIHN0cnVjdHVyZXMKICAqIChhdCBsZWFzdCB1bnRpbCB3ZSBnZXQgcmlkIG9mIHRoZW0gY29tcGxldGVseSkuIFRoaXMgaXMgbW9zdGx5IHNvbWUKICAqIGNhY2hlIGluZm9ybWF0aW9ucyBhYm91dCB0aGUgQ1BVIHRoYXQgd2lsbCBiZSB1c2VkIGJ5IGNhY2hlIGZsdXNoCiAgKiByb3V0aW5lcyBhbmQvb3IgcHJvdmlkZWQgdG8gdXNlcmxhbmQKQEAgLTM0MCw3ICszNTQsNyBAQAogCQkJY29uc3QgY2hhciAqZGMsICppYzsKIAogCQkJLyogVGhlbiByZWFkIGNhY2hlIGluZm9ybWF0aW9ucyAqLwotCQkJaWYgKHN5c3RlbWNmZy0+cGxhdGZvcm0gPT0gUExBVEZPUk1fUE9XRVJNQUMpIHsKKwkJCWlmIChfbWFjaGluZSA9PSBQTEFURk9STV9QT1dFUk1BQykgewogCQkJCWRjID0gImQtY2FjaGUtYmxvY2stc2l6ZSI7CiAJCQkJaWMgPSAiaS1jYWNoZS1ibG9jay1zaXplIjsKIAkJCX0gZWxzZSB7CkBAIC0zNjAsOSArMzc0LDggQEAKIAkJCQlEQkcoIkFyZ2gsIGNhbid0IGZpbmQgZGNhY2hlIHByb3BlcnRpZXMgISAiCiAJCQkJICAgICJzaXplcDogJXAsIGxzaXplcDogJXBcbiIsIHNpemVwLCBsc2l6ZXApOwogCi0JCQlzeXN0ZW1jZmctPmRjYWNoZV9zaXplID0gcHBjNjRfY2FjaGVzLmRzaXplID0gc2l6ZTsKLQkJCXN5c3RlbWNmZy0+ZGNhY2hlX2xpbmVfc2l6ZSA9Ci0JCQkJcHBjNjRfY2FjaGVzLmRsaW5lX3NpemUgPSBsc2l6ZTsKKwkJCXBwYzY0X2NhY2hlcy5kc2l6ZSA9IHNpemU7CisJCQlwcGM2NF9jYWNoZXMuZGxpbmVfc2l6ZSA9IGxzaXplOwogCQkJcHBjNjRfY2FjaGVzLmxvZ19kbGluZV9zaXplID0gX19pbG9nMihsc2l6ZSk7CiAJCQlwcGM2NF9jYWNoZXMuZGxpbmVzX3Blcl9wYWdlID0gUEFHRV9TSVpFIC8gbHNpemU7CiAKQEAgLTM3OCwyMCArMzkxLDEzIEBACiAJCQkJREJHKCJBcmdoLCBjYW4ndCBmaW5kIGljYWNoZSBwcm9wZXJ0aWVzICEgIgogCQkJCSAgICAic2l6ZXA6ICVwLCBsc2l6ZXA6ICVwXG4iLCBzaXplcCwgbHNpemVwKTsKIAotCQkJc3lzdGVtY2ZnLT5pY2FjaGVfc2l6ZSA9IHBwYzY0X2NhY2hlcy5pc2l6ZSA9IHNpemU7Ci0JCQlzeXN0ZW1jZmctPmljYWNoZV9saW5lX3NpemUgPQotCQkJCXBwYzY0X2NhY2hlcy5pbGluZV9zaXplID0gbHNpemU7CisJCQlwcGM2NF9jYWNoZXMuaXNpemUgPSBzaXplOworCQkJcHBjNjRfY2FjaGVzLmlsaW5lX3NpemUgPSBsc2l6ZTsKIAkJCXBwYzY0X2NhY2hlcy5sb2dfaWxpbmVfc2l6ZSA9IF9faWxvZzIobHNpemUpOwogCQkJcHBjNjRfY2FjaGVzLmlsaW5lc19wZXJfcGFnZSA9IFBBR0VfU0laRSAvIGxzaXplOwogCQl9CiAJfQogCi0JLyogQWRkIGFuIGV5ZSBjYXRjaGVyIGFuZCB0aGUgc3lzdGVtY2ZnIGxheW91dCB2ZXJzaW9uIG51bWJlciAqLwotCXN0cmNweShzeXN0ZW1jZmctPmV5ZV9jYXRjaGVyLCAiU1lTVEVNQ0ZHOlBQQzY0Iik7Ci0Jc3lzdGVtY2ZnLT52ZXJzaW9uLm1ham9yID0gU1lTVEVNQ0ZHX01BSk9SOwotCXN5c3RlbWNmZy0+dmVyc2lvbi5taW5vciA9IFNZU1RFTUNGR19NSU5PUjsKLQlzeXN0ZW1jZmctPnByb2Nlc3NvciA9IG1mc3ByKFNQUk5fUFZSKTsKLQogCURCRygiIDwtIGluaXRpYWxpemVfY2FjaGVfaW5mbygpXG4iKTsKIH0KIApAQCAtNDc4LDE1ICs0ODQsMTQgQEAKIAogCXByaW50aygiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwogCXByaW50aygicHBjNjRfcGZ0X3NpemUgICAgICAgICAgICAgICAgPSAweCVseFxuIiwgcHBjNjRfcGZ0X3NpemUpOwotCXByaW50aygicHBjNjRfaW50ZXJydXB0X2NvbnRyb2xsZXIgICAgPSAweCVsZFxuIiwgcHBjNjRfaW50ZXJydXB0X2NvbnRyb2xsZXIpOwotCXByaW50aygic3lzdGVtY2ZnICAgICAgICAgICAgICAgICAgICAgPSAweCVwXG4iLCBzeXN0ZW1jZmcpOwotCXByaW50aygic3lzdGVtY2ZnLT5wbGF0Zm9ybSAgICAgICAgICAgPSAweCV4XG4iLCBzeXN0ZW1jZmctPnBsYXRmb3JtKTsKLQlwcmludGsoInN5c3RlbWNmZy0+cHJvY2Vzc29yQ291bnQgICAgID0gMHglbHhcbiIsIHN5c3RlbWNmZy0+cHJvY2Vzc29yQ291bnQpOwotCXByaW50aygic3lzdGVtY2ZnLT5waHlzaWNhbE1lbW9yeVNpemUgPSAweCVseFxuIiwgc3lzdGVtY2ZnLT5waHlzaWNhbE1lbW9yeVNpemUpOworCXByaW50aygicHBjNjRfaW50ZXJydXB0X2NvbnRyb2xsZXIgICAgPSAweCVsZFxuIiwKKwkgICAgICAgcHBjNjRfaW50ZXJydXB0X2NvbnRyb2xsZXIpOworCXByaW50aygicGxhdGZvcm0gICAgICAgICAgICAgICAgICAgICAgPSAweCV4XG4iLCBfbWFjaGluZSk7CisJcHJpbnRrKCJwaHlzaWNhbE1lbW9yeVNpemUgICAgICAgICAgICA9IDB4JWx4XG4iLCBsbWJfcGh5c19tZW1fc2l6ZSgpKTsKIAlwcmludGsoInBwYzY0X2NhY2hlcy5kY2FjaGVfbGluZV9zaXplID0gMHgleFxuIiwKLQkJCXBwYzY0X2NhY2hlcy5kbGluZV9zaXplKTsKKwkgICAgICAgcHBjNjRfY2FjaGVzLmRsaW5lX3NpemUpOwogCXByaW50aygicHBjNjRfY2FjaGVzLmljYWNoZV9saW5lX3NpemUgPSAweCV4XG4iLAotCQkJcHBjNjRfY2FjaGVzLmlsaW5lX3NpemUpOworCSAgICAgICBwcGM2NF9jYWNoZXMuaWxpbmVfc2l6ZSk7CiAJcHJpbnRrKCJodGFiX2FkZHJlc3MgICAgICAgICAgICAgICAgICA9IDB4JXBcbiIsIGh0YWJfYWRkcmVzcyk7CiAJcHJpbnRrKCJodGFiX2hhc2hfbWFzayAgICAgICAgICAgICAgICA9IDB4JWx4XG4iLCBodGFiX2hhc2hfbWFzayk7CiAJcHJpbnRrKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CkBAIC01NTEsMzMgKzU1Niw2IEBACiB9CiAKIC8qCi0gKiBDYWxsZWQgZnJvbSBzZXR1cF9hcmNoIHRvIGluaXRpYWxpemUgdGhlIGJpdG1hcCBvZiBhdmFpbGFibGUKLSAqIHN5c2NhbGxzIGluIHRoZSBzeXN0ZW1jZmcgcGFnZQotICovCi12b2lkIF9faW5pdCBzZXR1cF9zeXNjYWxsX21hcCh2b2lkKQotewotCXVuc2lnbmVkIGludCBpLCBjb3VudDY0ID0gMCwgY291bnQzMiA9IDA7Ci0JZXh0ZXJuIHVuc2lnbmVkIGxvbmcgKnN5c19jYWxsX3RhYmxlOwotCWV4dGVybiB1bnNpZ25lZCBsb25nIHN5c19uaV9zeXNjYWxsOwotCi0KLQlmb3IgKGkgPSAwOyBpIDwgX19OUl9zeXNjYWxsczsgaSsrKSB7Ci0JCWlmIChzeXNfY2FsbF90YWJsZVtpKjJdICE9IHN5c19uaV9zeXNjYWxsKSB7Ci0JCQljb3VudDY0Kys7Ci0JCQlzeXN0ZW1jZmctPnN5c2NhbGxfbWFwXzY0W2kgPj4gNV0gfD0KLQkJCQkweDgwMDAwMDAwVUwgPj4gKGkgJiAweDFmKTsKLQkJfQotCQlpZiAoc3lzX2NhbGxfdGFibGVbaSoyKzFdICE9IHN5c19uaV9zeXNjYWxsKSB7Ci0JCQljb3VudDMyKys7Ci0JCQlzeXN0ZW1jZmctPnN5c2NhbGxfbWFwXzMyW2kgPj4gNV0gfD0KLQkJCQkweDgwMDAwMDAwVUwgPj4gKGkgJiAweDFmKTsKLQkJfQotCX0KLQlwcmludGsoS0VSTl9JTkZPICJTeXNjYWxsIG1hcCBzZXR1cCwgJWQgMzItYml0IGFuZCAlZCA2NC1iaXQgc3lzY2FsbHNcbiIsCi0JICAgICAgIGNvdW50MzIsIGNvdW50NjQpOwotfQotCi0vKgogICogQ2FsbGVkIGludG8gZnJvbSBzdGFydF9rZXJuZWwsIGFmdGVyIGxvY2tfa2VybmVsIGhhcyBiZWVuIGNhbGxlZC4KICAqIEluaXRpYWxpemVzIGJvb3RtZW0sIHdoaWNoIGlzIHVuc2VkIHRvIG1hbmFnZSBwYWdlIGFsbG9jYXRpb24gdW50aWwKICAqIG1lbV9pbml0IGlzIGNhbGxlZC4KQEAgLTYxOCw5ICs1OTYsNiBAQAogCWRvX2luaXRfYm9vdG1lbSgpOwogCXNwYXJzZV9pbml0KCk7CiAKLQkvKiBpbml0aWFsaXplIHRoZSBzeXNjYWxsIG1hcCBpbiBzeXN0ZW1jZmcgKi8KLQlzZXR1cF9zeXNjYWxsX21hcCgpOwotCiAjaWZkZWYgQ09ORklHX0RVTU1ZX0NPTlNPTEUKIAljb25zd2l0Y2hwID0gJmR1bW15X2NvbjsKICNlbmRpZgpAQCAtODU4LDI2ICs4MzMsNiBAQAogfQogRVhQT1JUX1NZTUJPTChjaGVja19sZWdhY3lfaW9wb3J0KTsKIAotI2lmZGVmIENPTkZJR19YTU9OCi1zdGF0aWMgaW50IF9faW5pdCBlYXJseV94bW9uKGNoYXIgKnApCi17Ci0JLyogZW5zdXJlIHhtb24gaXMgZW5hYmxlZCAqLwotCWlmIChwKSB7Ci0JCWlmIChzdHJuY21wKHAsICJvbiIsIDIpID09IDApCi0JCQl4bW9uX2luaXQoMSk7Ci0JCWlmIChzdHJuY21wKHAsICJvZmYiLCAzKSA9PSAwKQotCQkJeG1vbl9pbml0KDApOwotCQlpZiAoc3RybmNtcChwLCAiZWFybHkiLCA1KSAhPSAwKQotCQkJcmV0dXJuIDA7Ci0JfQotCXhtb25faW5pdCgxKTsKLQlkZWJ1Z2dlcihOVUxMKTsKLQotCXJldHVybiAwOwotfQotZWFybHlfcGFyYW0oInhtb24iLCBlYXJseV94bW9uKTsKLSNlbmRpZgotCiB2b2lkIGNwdV9kaWUodm9pZCkKIHsKIAlpZiAocHBjX21kLmNwdV9kaWUpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3NpZ25hbF8zMi5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWxfMzIuYwppbmRleCAwODFkOTMxLi44YmRmOTViIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3NpZ25hbF8zMi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2lnbmFsXzMyLmMKQEAgLTQyLDEwICs0MiwxMSBAQAogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9zaWdjb250ZXh0Lmg+CisjaW5jbHVkZSA8YXNtL3Zkc28uaD4KICNpZmRlZiBDT05GSUdfUFBDNjQKICNpbmNsdWRlICJwcGMzMi5oIgogI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSNpbmNsdWRlIDxhc20vdmRzby5oPgogI2Vsc2UKICNpbmNsdWRlIDxhc20vdWNvbnRleHQuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgpAQCAtODA4LDE0ICs4MDksMTEgQEAKIAogCS8qIFNhdmUgdXNlciByZWdpc3RlcnMgb24gdGhlIHN0YWNrICovCiAJZnJhbWUgPSAmcnRfc2YtPnVjLnVjX21jb250ZXh0OwotI2lmZGVmIENPTkZJR19QUEM2NAogCWlmICh2ZHNvMzJfcnRfc2lndHJhbXAgJiYgY3VycmVudC0+dGhyZWFkLnZkc29fYmFzZSkgewogCQlpZiAoc2F2ZV91c2VyX3JlZ3MocmVncywgZnJhbWUsIDApKQogCQkJZ290byBiYWRmcmFtZTsKIAkJcmVncy0+bGluayA9IGN1cnJlbnQtPnRocmVhZC52ZHNvX2Jhc2UgKyB2ZHNvMzJfcnRfc2lndHJhbXA7Ci0JfSBlbHNlCi0jZW5kaWYKLQl7CisJfSBlbHNlIHsKIAkJaWYgKHNhdmVfdXNlcl9yZWdzKHJlZ3MsIGZyYW1lLCBfX05SX3J0X3NpZ3JldHVybikpCiAJCQlnb3RvIGJhZGZyYW1lOwogCQlyZWdzLT5saW5rID0gKHVuc2lnbmVkIGxvbmcpIGZyYW1lLT50cmFtcDsKQEAgLTEwODksMTQgKzEwODcsMTEgQEAKIAkgICAgfHwgX19wdXRfdXNlcihzaWcsICZzYy0+c2lnbmFsKSkKIAkJZ290byBiYWRmcmFtZTsKIAotI2lmZGVmIENPTkZJR19QUEM2NAogCWlmICh2ZHNvMzJfc2lndHJhbXAgJiYgY3VycmVudC0+dGhyZWFkLnZkc29fYmFzZSkgewogCQlpZiAoc2F2ZV91c2VyX3JlZ3MocmVncywgJmZyYW1lLT5tY3R4LCAwKSkKIAkJCWdvdG8gYmFkZnJhbWU7CiAJCXJlZ3MtPmxpbmsgPSBjdXJyZW50LT50aHJlYWQudmRzb19iYXNlICsgdmRzbzMyX3NpZ3RyYW1wOwotCX0gZWxzZQotI2VuZGlmCi0JeworCX0gZWxzZSB7CiAJCWlmIChzYXZlX3VzZXJfcmVncyhyZWdzLCAmZnJhbWUtPm1jdHgsIF9fTlJfc2lncmV0dXJuKSkKIAkJCWdvdG8gYmFkZnJhbWU7CiAJCXJlZ3MtPmxpbmsgPSAodW5zaWduZWQgbG9uZykgZnJhbWUtPm1jdHgudHJhbXA7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3NtcC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zbXAuYwppbmRleCA1YzMzMGMzLi42MmRmYzViIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc21wLmMKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlIDxhc20vY3B1dGFibGUuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL21waWMuaD4KKyNpbmNsdWRlIDxhc20vdmRzb19kYXRhcGFnZS5oPgogI2lmZGVmIENPTkZJR19QUEM2NAogI2luY2x1ZGUgPGFzbS9wYWNhLmg+CiAjZW5kaWYKQEAgLTM2OCw5ICszNjksMTEgQEAKIAlpZiAoY3B1ID09IGJvb3RfY3B1aWQpCiAJCXJldHVybiAtRUJVU1k7CiAKLQlzeXN0ZW1jZmctPnByb2Nlc3NvckNvdW50LS07CiAJY3B1X2NsZWFyKGNwdSwgY3B1X29ubGluZV9tYXApOworI2lmZGVmIENPTkZJR19QUEM2NAorCXZkc29fZGF0YS0+cHJvY2Vzc29yQ291bnQtLTsKIAlmaXh1cF9pcnFzKGNwdV9vbmxpbmVfbWFwKTsKKyNlbmRpZgogCXJldHVybiAwOwogfQogCkBAIC0zODgsOSArMzkxLDExIEBACiAJd2hpbGUgKCFjcHVfb25saW5lKGNwdSkpCiAJCWNwdV9yZWxheCgpOwogCisjaWZkZWYgQ09ORklHX1BQQzY0CiAJZml4dXBfaXJxcyhjcHVfb25saW5lX21hcCk7CiAJLyogY291bnRlciB0aGUgaXJxIGRpc2FibGUgaW4gZml4dXBfaXJxcyAqLwogCWxvY2FsX2lycV9lbmFibGUoKTsKKyNlbmRpZgogCXJldHVybiAwOwogfQogCkBAIC00MTksNyArNDI0LDkgQEAKIAl3aGlsZSAoX19nZXRfY3B1X3ZhcihjcHVfc3RhdGUpICE9IENQVV9VUF9QUkVQQVJFKQogCQljcHVfcmVsYXgoKTsKIAorI2lmZGVmIENPTkZJR19QUEM2NAogCWZsdXNoX3RsYl9wZW5kaW5nKCk7CisjZW5kaWYKIAljcHVfc2V0KGNwdSwgY3B1X29ubGluZV9tYXApOwogCWxvY2FsX2lycV9lbmFibGUoKTsKIH0KQEAgLTUxMCw2ICs1MTcsNyBAQAogCiAJc21wX3N0b3JlX2NwdV9pbmZvKGNwdSk7CiAJc2V0X2RlYyh0Yl90aWNrc19wZXJfamlmZnkpOworCXByZWVtcHRfZGlzYWJsZSgpOwogCWNwdV9jYWxsaW5fbWFwW2NwdV0gPSAxOwogCiAJc21wX29wcy0+c2V0dXBfY3B1KGNwdSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3N5c19wcGMzMi5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXNfcHBjMzIuYwppbmRleCBhODIxMGVkLi45YzkyMWQxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3N5c19wcGMzMi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzX3BwYzMyLmMKQEAgLTUyLDcgKzUyLDYgQEAKICNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAjaW5jbHVkZSA8YXNtL3RpbWUuaD4KICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KLSNpbmNsdWRlIDxhc20vc3lzdGVtY2ZnLmg+CiAjaW5jbHVkZSA8YXNtL3BwYy1wY2kuaD4KIAogLyogcmVhZGRpciAmIGdldGRlbnRzICovCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC9zeXNmcy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXNmcy5jCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIGFyY2gvcHBjNjQva2VybmVsL3N5c2ZzLmMKcmVuYW1lIHRvIGFyY2gvcG93ZXJwYy9rZXJuZWwvc3lzZnMuYwppbmRleCBlOTllYzYyLi4wZjBjM2E5IDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC9zeXNmcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzZnMuYwpAQCAtMTYsNyArMTYsNiBAQAogI2luY2x1ZGUgPGFzbS9maXJtd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9odmNhbGwuaD4KICNpbmNsdWRlIDxhc20vcHJvbS5oPgotI2luY2x1ZGUgPGFzbS9zeXN0ZW1jZmcuaD4KICNpbmNsdWRlIDxhc20vcGFjYS5oPgogI2luY2x1ZGUgPGFzbS9scHBhY2EuaD4KICNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgpAQCAtMjMyLDcgKzIzMSw3IEBACiAJCXN5c2Rldl9jcmVhdGVfZmlsZShzLCAmYXR0cl9wbWM3KTsKIAlpZiAoY3VyX2NwdV9zcGVjLT5udW1fcG1jcyA+PSA4KQogCQlzeXNkZXZfY3JlYXRlX2ZpbGUocywgJmF0dHJfcG1jOCk7Ci0gIAorCiAJaWYgKGNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX1NNVCkpCiAJCXN5c2Rldl9jcmVhdGVfZmlsZShzLCAmYXR0cl9wdXJyKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdGltZS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC90aW1lLmMKaW5kZXggYTYyODJiNi4uMDcwYjRiNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC90aW1lLmMKQEAgLTYyLDggKzYyLDggQEAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CiAjaW5jbHVkZSA8YXNtL3NtcC5oPgorI2luY2x1ZGUgPGFzbS92ZHNvX2RhdGFwYWdlLmg+CiAjaWZkZWYgQ09ORklHX1BQQzY0Ci0jaW5jbHVkZSA8YXNtL3N5c3RlbWNmZy5oPgogI2luY2x1ZGUgPGFzbS9maXJtd2FyZS5oPgogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1BQQ19JU0VSSUVTCkBAIC0yNjEsNyArMjYxLDYgQEAKIAlkb19ndG9kLnZhcnAgPSB0ZW1wX3ZhcnA7CiAJZG9fZ3RvZC52YXJfaWR4ID0gdGVtcF9pZHg7CiAKLSNpZmRlZiBDT05GSUdfUFBDNjQKIAkvKgogCSAqIHRiX3VwZGF0ZV9jb3VudCBpcyB1c2VkIHRvIGFsbG93IHRoZSB1c2Vyc3BhY2UgZ2V0dGltZW9mZGF5IGNvZGUKIAkgKiB0byBhc3N1cmUgaXRzZWxmIHRoYXQgaXQgc2VlcyBhIGNvbnNpc3RlbnQgdmlldyBvZiB0aGUgdGJfdG9feHMgYW5kCkBAIC0yNzEsMTQgKzI3MCwxNSBAQAogCSAqIHRiX3RvX3hzIGFuZCBzdGFtcF94c2VjIHZhbHVlcyBhcmUgY29uc2lzdGVudC4gIElmIG5vdCwgdGhlbiBpdAogCSAqIGxvb3BzIGJhY2sgYW5kIHJlYWRzIHRoZW0gYWdhaW4gdW50aWwgdGhpcyBjcml0ZXJpYSBpcyBtZXQuCiAJICovCi0JKysoc3lzdGVtY2ZnLT50Yl91cGRhdGVfY291bnQpOworCSsrKHZkc29fZGF0YS0+dGJfdXBkYXRlX2NvdW50KTsKIAlzbXBfd21iKCk7Ci0Jc3lzdGVtY2ZnLT50Yl9vcmlnX3N0YW1wID0gbmV3X3RiX3N0YW1wOwotCXN5c3RlbWNmZy0+c3RhbXBfeHNlYyA9IG5ld19zdGFtcF94c2VjOwotCXN5c3RlbWNmZy0+dGJfdG9feHMgPSBuZXdfdGJfdG9feHM7CisJdmRzb19kYXRhLT50Yl9vcmlnX3N0YW1wID0gbmV3X3RiX3N0YW1wOworCXZkc29fZGF0YS0+c3RhbXBfeHNlYyA9IG5ld19zdGFtcF94c2VjOworCXZkc29fZGF0YS0+dGJfdG9feHMgPSBuZXdfdGJfdG9feHM7CisJdmRzb19kYXRhLT53dG9tX2Nsb2NrX3NlYyA9IHdhbGxfdG9fbW9ub3RvbmljLnR2X3NlYzsKKwl2ZHNvX2RhdGEtPnd0b21fY2xvY2tfbnNlYyA9IHdhbGxfdG9fbW9ub3RvbmljLnR2X25zZWM7CiAJc21wX3dtYigpOwotCSsrKHN5c3RlbWNmZy0+dGJfdXBkYXRlX2NvdW50KTsKLSNlbmRpZgorCSsrKHZkc29fZGF0YS0+dGJfdXBkYXRlX2NvdW50KTsKIH0KIAogLyoKQEAgLTM1Nyw4ICszNTcsOCBAQAogCQkJCWRvX2d0b2QudGJfdGlja3NfcGVyX3NlYyA9IHRiX3RpY2tzX3Blcl9zZWM7CiAJCQkJdGJfdG9feHMgPSBkaXZyZXMucmVzdWx0X2xvdzsKIAkJCQlkb19ndG9kLnZhcnAtPnRiX3RvX3hzID0gdGJfdG9feHM7Ci0JCQkJc3lzdGVtY2ZnLT50Yl90aWNrc19wZXJfc2VjID0gdGJfdGlja3NfcGVyX3NlYzsKLQkJCQlzeXN0ZW1jZmctPnRiX3RvX3hzID0gdGJfdG9feHM7CisJCQkJdmRzb19kYXRhLT50Yl90aWNrc19wZXJfc2VjID0gdGJfdGlja3NfcGVyX3NlYzsKKwkJCQl2ZHNvX2RhdGEtPnRiX3RvX3hzID0gdGJfdG9feHM7CiAJCQl9CiAJCQllbHNlIHsKIAkJCQlwcmludGsoICJUaXRhbiByZWNhbGlicmF0ZTogRkFJTEVEIChkaWZmZXJlbmNlID4gNCBwZXJjZW50KVxuIgpAQCAtNDgzLDYgKzQ4Myw4IEBACiAJdW5zaWduZWQgbG9uZyBvZmZzZXQgPSB0Yl90aWNrc19wZXJfamlmZnkgLyBtYXhfY3B1czsKIAl1bnNpZ25lZCBsb25nIHByZXZpb3VzX3RiID0gcGVyX2NwdShsYXN0X2ppZmZ5LCBib290X2NwdWlkKTsKIAorCS8qIG1ha2Ugc3VyZSB0YiA+IHBlcl9jcHUobGFzdF9qaWZmeSwgY3B1KSBmb3IgYWxsIGNwdXMgYWx3YXlzICovCisJcHJldmlvdXNfdGIgLT0gdGJfdGlja3NfcGVyX2ppZmZ5OwogCWZvcl9lYWNoX2NwdShpKSB7CiAJCWlmIChpICE9IGJvb3RfY3B1aWQpIHsKIAkJCXByZXZpb3VzX3RiICs9IG9mZnNldDsKQEAgLTU1OCwxMCArNTYwLDggQEAKIAluZXdfeHNlYyArPSAodTY0KW5ld19zZWMgKiBYU0VDX1BFUl9TRUMgLSB0Yl9kZWx0YV94czsKIAl1cGRhdGVfZ3RvZCh0Yl9sYXN0X2ppZmZ5LCBuZXdfeHNlYywgZG9fZ3RvZC52YXJwLT50Yl90b194cyk7CiAKLSNpZmRlZiBDT05GSUdfUFBDNjQKLQlzeXN0ZW1jZmctPnR6X21pbnV0ZXN3ZXN0ID0gc3lzX3R6LnR6X21pbnV0ZXN3ZXN0OwotCXN5c3RlbWNmZy0+dHpfZHN0dGltZSA9IHN5c190ei50el9kc3R0aW1lOwotI2VuZGlmCisJdmRzb19kYXRhLT50el9taW51dGVzd2VzdCA9IHN5c190ei50el9taW51dGVzd2VzdDsKKwl2ZHNvX2RhdGEtPnR6X2RzdHRpbWUgPSBzeXNfdHoudHpfZHN0dGltZTsKIAogCXdyaXRlX3NlcXVubG9ja19pcnFyZXN0b3JlKCZ4dGltZV9sb2NrLCBmbGFncyk7CiAJY2xvY2tfd2FzX3NldCgpOwpAQCAtNzEwLDEzICs3MTAsMTIgQEAKIAlkb19ndG9kLnRiX3RpY2tzX3Blcl9zZWMgPSB0Yl90aWNrc19wZXJfc2VjOwogCWRvX2d0b2QudmFycC0+dGJfdG9feHMgPSB0Yl90b194czsKIAlkb19ndG9kLnRiX3RvX3VzID0gdGJfdG9fdXM7Ci0jaWZkZWYgQ09ORklHX1BQQzY0Ci0Jc3lzdGVtY2ZnLT50Yl9vcmlnX3N0YW1wID0gdGJfbGFzdF9qaWZmeTsKLQlzeXN0ZW1jZmctPnRiX3VwZGF0ZV9jb3VudCA9IDA7Ci0Jc3lzdGVtY2ZnLT50Yl90aWNrc19wZXJfc2VjID0gdGJfdGlja3NfcGVyX3NlYzsKLQlzeXN0ZW1jZmctPnN0YW1wX3hzZWMgPSB4dGltZS50dl9zZWMgKiBYU0VDX1BFUl9TRUM7Ci0Jc3lzdGVtY2ZnLT50Yl90b194cyA9IHRiX3RvX3hzOwotI2VuZGlmCisKKwl2ZHNvX2RhdGEtPnRiX29yaWdfc3RhbXAgPSB0Yl9sYXN0X2ppZmZ5OworCXZkc29fZGF0YS0+dGJfdXBkYXRlX2NvdW50ID0gMDsKKwl2ZHNvX2RhdGEtPnRiX3RpY2tzX3Blcl9zZWMgPSB0Yl90aWNrc19wZXJfc2VjOworCXZkc29fZGF0YS0+c3RhbXBfeHNlYyA9IHh0aW1lLnR2X3NlYyAqIFhTRUNfUEVSX1NFQzsKKwl2ZHNvX2RhdGEtPnRiX3RvX3hzID0gdGJfdG9feHM7CiAKIAl0aW1lX2ZyZXEgPSAwOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3RyYXBzLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3RyYXBzLmMKaW5kZXggMzJmMjE1OC4uMTUxMTQ1NCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdHJhcHMuYwpAQCAtNDksNyArNDksNiBAQAogI2lmZGVmIENPTkZJR19QUEM2NAogI2luY2x1ZGUgPGFzbS9maXJtd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KLSNpbmNsdWRlIDxhc20vc3lzdGVtY2ZnLmg+CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19QUEM2NAkvKiBYWFggKi8KQEAgLTEyOSw3ICsxMjgsNyBAQAogCW5sID0gMTsKICNlbmRpZgogI2lmZGVmIENPTkZJR19QUEM2NAotCXN3aXRjaCAoc3lzdGVtY2ZnLT5wbGF0Zm9ybSkgeworCXN3aXRjaCAoX21hY2hpbmUpIHsKIAljYXNlIFBMQVRGT1JNX1BTRVJJRVM6CiAJCXByaW50aygiUFNFUklFUyAiKTsKIAkJbmwgPSAxOwpAQCAtODg3LDEwICs4ODYsNiBAQAogCWRpZSgiVW5yZWNvdmVyYWJsZSBWTVgvQWx0aXZlYyBVbmF2YWlsYWJsZSBFeGNlcHRpb24iLCByZWdzLCBTSUdBQlJUKTsKIH0KIAotI2lmZGVmIENPTkZJR19QUEM2NAotZXh0ZXJuIHBlcmZfaXJxX3QgcGVyZl9pcnE7Ci0jZW5kaWYKLQogI2lmIGRlZmluZWQoQ09ORklHX1BQQzY0KSB8fCBkZWZpbmVkKENPTkZJR19FNTAwKQogdm9pZCBwZXJmb3JtYW5jZV9tb25pdG9yX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL3VkYmcuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdWRiZy5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3BwYzY0L2tlcm5lbC91ZGJnLmMKcmVuYW1lIHRvIGFyY2gvcG93ZXJwYy9rZXJuZWwvdWRiZy5jCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC91ZGJnXzE2NTUwLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3VkYmdfMTY1NTAuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9wcGM2NC9rZXJuZWwvdWRiZ18xNjU1MC5jCnJlbmFtZSB0byBhcmNoL3Bvd2VycGMva2VybmVsL3VkYmdfMTY1NTAuYwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvdWRiZ19zY2MuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdWRiZ19zY2MuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9wcGM2NC9rZXJuZWwvdWRiZ19zY2MuYwpyZW5hbWUgdG8gYXJjaC9wb3dlcnBjL2tlcm5lbC91ZGJnX3NjYy5jCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc28uYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkNGQ4YmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc28uYwpAQCAtMCwwICsxLDc0NiBAQAorLyoKKyAqICBsaW51eC9hcmNoL3BwYzY0L2tlcm5lbC92ZHNvLmMKKyAqCisgKiAgICBDb3B5cmlnaHQgKEMpIDIwMDQgQmVuamFtaW4gSGVycmVuc2NobWlkdCwgSUJNIENvcnAuCisgKgkJCSA8YmVuaEBrZXJuZWwuY3Jhc2hpbmcub3JnPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqICAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgorI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC91c2VyLmg+CisjaW5jbHVkZSA8bGludXgvZWxmLmg+CisjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KKyNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CisKKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL21tdS5oPgorI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgorI2luY2x1ZGUgPGFzbS9sbWIuaD4KKyNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgorI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgorI2luY2x1ZGUgPGFzbS92ZHNvLmg+CisjaW5jbHVkZSA8YXNtL3Zkc29fZGF0YXBhZ2UuaD4KKworI3VuZGVmIERFQlVHCisKKyNpZmRlZiBERUJVRworI2RlZmluZSBEQkcoZm10Li4uKSBwcmludGsoZm10KQorI2Vsc2UKKyNkZWZpbmUgREJHKGZtdC4uLikKKyNlbmRpZgorCisvKiBNYXggc3VwcG9ydGVkIHNpemUgZm9yIHN5bWJvbCBuYW1lcyAqLworI2RlZmluZSBNQVhfU1lNTkFNRQk2NAorCitleHRlcm4gY2hhciB2ZHNvMzJfc3RhcnQsIHZkc28zMl9lbmQ7CitzdGF0aWMgdm9pZCAqdmRzbzMyX2tiYXNlID0gJnZkc28zMl9zdGFydDsKK3Vuc2lnbmVkIGludCB2ZHNvMzJfcGFnZXM7Cit1bnNpZ25lZCBsb25nIHZkc28zMl9zaWd0cmFtcDsKK3Vuc2lnbmVkIGxvbmcgdmRzbzMyX3J0X3NpZ3RyYW1wOworCisjaWZkZWYgQ09ORklHX1BQQzY0CitleHRlcm4gY2hhciB2ZHNvNjRfc3RhcnQsIHZkc282NF9lbmQ7CitzdGF0aWMgdm9pZCAqdmRzbzY0X2tiYXNlID0gJnZkc282NF9zdGFydDsKK3Vuc2lnbmVkIGludCB2ZHNvNjRfcGFnZXM7Cit1bnNpZ25lZCBsb25nIHZkc282NF9ydF9zaWd0cmFtcDsKKyNlbmRpZiAvKiBDT05GSUdfUFBDNjQgKi8KKworLyoKKyAqIFRoZSB2ZHNvIGRhdGEgcGFnZSAoYWthLiBzeXN0ZW1jZmcgZm9yIG9sZCBwcGM2NCBmYW5zKSBpcyBoZXJlLgorICogT25jZSB0aGUgZWFybHkgYm9vdCBrZXJuZWwgY29kZSBubyBsb25nZXIgbmVlZHMgdG8gbXVjayBhcm91bmQKKyAqIHdpdGggaXQsIGl0IHdpbGwgYmVjb21lIGR5bmFtaWNhbGx5IGFsbG9jYXRlZAorICovCitzdGF0aWMgdW5pb24geworCXN0cnVjdCB2ZHNvX2RhdGEJZGF0YTsKKwl1OAkJCXBhZ2VbUEFHRV9TSVpFXTsKK30gdmRzb19kYXRhX3N0b3JlIF9fYXR0cmlidXRlX18oKF9fc2VjdGlvbl9fKCIuZGF0YS5wYWdlX2FsaWduZWQiKSkpOworc3RydWN0IHZkc29fZGF0YSAqdmRzb19kYXRhID0gJnZkc29fZGF0YV9zdG9yZS5kYXRhOworCisvKiBGb3JtYXQgb2YgdGhlIHBhdGNoIHRhYmxlICovCitzdHJ1Y3QgdmRzb19wYXRjaF9kZWYKK3sKKwl1bnNpZ25lZCBsb25nCWZ0cl9tYXNrLCBmdHJfdmFsdWU7CisJY29uc3QgY2hhcgkqZ2VuX25hbWU7CisJY29uc3QgY2hhcgkqZml4X25hbWU7Cit9OworCisvKiBUYWJsZSBvZiBmdW5jdGlvbnMgdG8gcGF0Y2ggYmFzZWQgb24gdGhlIENQVSB0eXBlL3JldmlzaW9uCisgKgorICogQ3VycmVudGx5LCB3ZSBvbmx5IGNoYW5nZSBzeW5jX2RpY2FjaGUgdG8gZG8gbm90aGluZyBvbiBwcm9jZXNzb3JzCisgKiB3aXRoIGEgY29oZXJlbnQgaWNhY2hlCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdmRzb19wYXRjaF9kZWYgdmRzb19wYXRjaGVzW10gPSB7CisJeworCQlDUFVfRlRSX0NPSEVSRU5UX0lDQUNIRSwgQ1BVX0ZUUl9DT0hFUkVOVF9JQ0FDSEUsCisJCSJfX2tlcm5lbF9zeW5jX2RpY2FjaGUiLCAiX19rZXJuZWxfc3luY19kaWNhY2hlX3A1IgorCX0sCisJeworCQlDUFVfRlRSX1VTRV9UQiwgMCwKKwkJIl9fa2VybmVsX2dldHRpbWVvZmRheSIsIE5VTEwKKwl9LAorfTsKKworLyoKKyAqIFNvbWUgaW5mb3MgY2FycmllZCBhcm91bmQgZm9yIGVhY2ggb2YgdGhlbSBkdXJpbmcgcGFyc2luZyBhdAorICogYm9vdCB0aW1lLgorICovCitzdHJ1Y3QgbGliMzJfZWxmaW5mbworeworCUVsZjMyX0VoZHIJKmhkcjsJCS8qIHB0ciB0byBFTEYgKi8KKwlFbGYzMl9TeW0JKmR5bnN5bTsJLyogcHRyIHRvIC5keW5zeW0gc2VjdGlvbiAqLworCXVuc2lnbmVkIGxvbmcJZHluc3ltc2l6ZTsJLyogc2l6ZSBvZiAuZHluc3ltIHNlY3Rpb24gKi8KKwljaGFyCQkqZHluc3RyOwkvKiBwdHIgdG8gLmR5bnN0ciBzZWN0aW9uICovCisJdW5zaWduZWQgbG9uZwl0ZXh0OwkJLyogb2Zmc2V0IG9mIC50ZXh0IHNlY3Rpb24gaW4gLnNvICovCit9OworCitzdHJ1Y3QgbGliNjRfZWxmaW5mbworeworCUVsZjY0X0VoZHIJKmhkcjsKKwlFbGY2NF9TeW0JKmR5bnN5bTsKKwl1bnNpZ25lZCBsb25nCWR5bnN5bXNpemU7CisJY2hhcgkJKmR5bnN0cjsKKwl1bnNpZ25lZCBsb25nCXRleHQ7Cit9OworCisKKyNpZmRlZiBfX0RFQlVHCitzdGF0aWMgdm9pZCBkdW1wX29uZV92ZHNvX3BhZ2Uoc3RydWN0IHBhZ2UgKnBnLCBzdHJ1Y3QgcGFnZSAqdXBnKQoreworCXByaW50aygia3BnOiAlcCAoYzolZCxmOiUwOGx4KSIsIF9fdmEocGFnZV90b19wZm4ocGcpIDw8IFBBR0VfU0hJRlQpLAorCSAgICAgICBwYWdlX2NvdW50KHBnKSwKKwkgICAgICAgcGctPmZsYWdzKTsKKwlpZiAodXBnLyogJiYgcGcgIT0gdXBnKi8pIHsKKwkJcHJpbnRrKCIgdXBnOiAlcCAoYzolZCxmOiUwOGx4KSIsIF9fdmEocGFnZV90b19wZm4odXBnKQorCQkJCQkJICAgICAgIDw8IFBBR0VfU0hJRlQpLAorCQkgICAgICAgcGFnZV9jb3VudCh1cGcpLAorCQkgICAgICAgdXBnLT5mbGFncyk7CisJfQorCXByaW50aygiXG4iKTsKK30KKworc3RhdGljIHZvaWQgZHVtcF92ZHNvX3BhZ2VzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIHZtYSkKK3sKKwlpbnQgaTsKKworCWlmICghdm1hIHx8IHRlc3RfdGhyZWFkX2ZsYWcoVElGXzMyQklUKSkgeworCQlwcmludGsoInZEU08zMiBAICUwMTZseDpcbiIsICh1bnNpZ25lZCBsb25nKXZkc28zMl9rYmFzZSk7CisJCWZvciAoaT0wOyBpPHZkc28zMl9wYWdlczsgaSsrKSB7CisJCQlzdHJ1Y3QgcGFnZSAqcGcgPSB2aXJ0X3RvX3BhZ2UodmRzbzMyX2tiYXNlICsKKwkJCQkJCSAgICAgICBpKlBBR0VfU0laRSk7CisJCQlzdHJ1Y3QgcGFnZSAqdXBnID0gKHZtYSAmJiB2bWEtPnZtX21tKSA/CisJCQkJZm9sbG93X3BhZ2Uodm1hLT52bV9tbSwgdm1hLT52bV9zdGFydCArCisJCQkJCSAgICBpKlBBR0VfU0laRSwgMCkKKwkJCQk6IE5VTEw7CisJCQlkdW1wX29uZV92ZHNvX3BhZ2UocGcsIHVwZyk7CisJCX0KKwl9CisJaWYgKCF2bWEgfHwgIXRlc3RfdGhyZWFkX2ZsYWcoVElGXzMyQklUKSkgeworCQlwcmludGsoInZEU082NCBAICUwMTZseDpcbiIsICh1bnNpZ25lZCBsb25nKXZkc282NF9rYmFzZSk7CisJCWZvciAoaT0wOyBpPHZkc282NF9wYWdlczsgaSsrKSB7CisJCQlzdHJ1Y3QgcGFnZSAqcGcgPSB2aXJ0X3RvX3BhZ2UodmRzbzY0X2tiYXNlICsKKwkJCQkJCSAgICAgICBpKlBBR0VfU0laRSk7CisJCQlzdHJ1Y3QgcGFnZSAqdXBnID0gKHZtYSAmJiB2bWEtPnZtX21tKSA/CisJCQkJZm9sbG93X3BhZ2Uodm1hLT52bV9tbSwgdm1hLT52bV9zdGFydCArCisJCQkJCSAgICBpKlBBR0VfU0laRSwgMCkKKwkJCQk6IE5VTEw7CisJCQlkdW1wX29uZV92ZHNvX3BhZ2UocGcsIHVwZyk7CisJCX0KKwl9Cit9CisjZW5kaWYgLyogREVCVUcgKi8KKworLyoKKyAqIEtlZXAgYSBkdW1teSB2bWFfY2xvc2UgZm9yIG5vdywgaXQgd2lsbCBwcmV2ZW50IFZNQSBtZXJnaW5nLgorICovCitzdGF0aWMgdm9pZCB2ZHNvX3ZtYV9jbG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bWEpCit7Cit9CisKKy8qCisgKiBPdXIgbm9wYWdlKCkgZnVuY3Rpb24sIG1hcHMgaW4gdGhlIGFjdHVhbCB2RFNPIGtlcm5lbCBwYWdlcywgdGhleSB3aWxsCisgKiBiZSBtYXBwZWQgcmVhZC1vbmx5IGJ5IGRvX25vX3BhZ2UoKSwgYW5kIGV2ZW50dWFsbHkgQ09XJ2VkLCBlaXRoZXIKKyAqIHJpZ2h0IGF3YXkgZm9yIGFuIGluaXRpYWwgd3JpdGUgYWNjZXNzLCBvciBieSBkb193cF9wYWdlKCkuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqIHZkc29fdm1hX25vcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bWEsCisJCQkJICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIGludCAqdHlwZSkKK3sKKwl1bnNpZ25lZCBsb25nIG9mZnNldCA9IGFkZHJlc3MgLSB2bWEtPnZtX3N0YXJ0OworCXN0cnVjdCBwYWdlICpwZzsKKyNpZmRlZiBDT05GSUdfUFBDNjQKKwl2b2lkICp2YmFzZSA9IHRlc3RfdGhyZWFkX2ZsYWcoVElGXzMyQklUKSA/CisJCXZkc28zMl9rYmFzZSA6IHZkc282NF9rYmFzZTsKKyNlbHNlCisJdm9pZCAqdmJhc2UgPSB2ZHNvMzJfa2Jhc2U7CisjZW5kaWYKKworCURCRygidmRzb192bWFfbm9wYWdlKGN1cnJlbnQ6ICVzLCBhZGRyZXNzOiAlMDE2bHgsIG9mZjogJWx4KVxuIiwKKwkgICAgY3VycmVudC0+Y29tbSwgYWRkcmVzcywgb2Zmc2V0KTsKKworCWlmIChhZGRyZXNzIDwgdm1hLT52bV9zdGFydCB8fCBhZGRyZXNzID4gdm1hLT52bV9lbmQpCisJCXJldHVybiBOT1BBR0VfU0lHQlVTOworCisJLyoKKwkgKiBMYXN0IHBhZ2UgaXMgc3lzdGVtY2ZnLgorCSAqLworCWlmICgodm1hLT52bV9lbmQgLSBhZGRyZXNzKSA8PSBQQUdFX1NJWkUpCisJCXBnID0gdmlydF90b19wYWdlKHZkc29fZGF0YSk7CisJZWxzZQorCQlwZyA9IHZpcnRfdG9fcGFnZSh2YmFzZSArIG9mZnNldCk7CisKKwlnZXRfcGFnZShwZyk7CisJREJHKCIgLT5wYWdlIGNvdW50OiAlZFxuIiwgcGFnZV9jb3VudChwZykpOworCisJcmV0dXJuIHBnOworfQorCitzdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHZkc29fdm1vcHMgPSB7CisJLmNsb3NlCT0gdmRzb192bWFfY2xvc2UsCisJLm5vcGFnZQk9IHZkc29fdm1hX25vcGFnZSwKK307CisKKy8qCisgKiBUaGlzIGlzIGNhbGxlZCBmcm9tIGJpbmZtdF9lbGYsIHdlIGNyZWF0ZSB0aGUgc3BlY2lhbCB2bWEgZm9yIHRoZQorICogdkRTTyBhbmQgaW5zZXJ0IGl0IGludG8gdGhlIG1tIHN0cnVjdCB0cmVlCisgKi8KK2ludCBhcmNoX3NldHVwX2FkZGl0aW9uYWxfcGFnZXMoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwKKwkJCQlpbnQgZXhlY3V0YWJsZV9zdGFjaykKK3sKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtPm1tOworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOworCXVuc2lnbmVkIGxvbmcgdmRzb19wYWdlczsKKwl1bnNpZ25lZCBsb25nIHZkc29fYmFzZTsKKworI2lmZGVmIENPTkZJR19QUEM2NAorCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl8zMkJJVCkpIHsKKwkJdmRzb19wYWdlcyA9IHZkc28zMl9wYWdlczsKKwkJdmRzb19iYXNlID0gVkRTTzMyX01CQVNFOworCX0gZWxzZSB7CisJCXZkc29fcGFnZXMgPSB2ZHNvNjRfcGFnZXM7CisJCXZkc29fYmFzZSA9IFZEU082NF9NQkFTRTsKKwl9CisjZWxzZQorCXZkc29fcGFnZXMgPSB2ZHNvMzJfcGFnZXM7CisJdmRzb19iYXNlID0gVkRTTzMyX01CQVNFOworI2VuZGlmCisKKwljdXJyZW50LT50aHJlYWQudmRzb19iYXNlID0gMDsKKworCS8qIHZEU08gaGFzIGEgcHJvYmxlbSBhbmQgd2FzIGRpc2FibGVkLCBqdXN0IGRvbid0ICJlbmFibGUiIGl0IGZvciB0aGUKKwkgKiBwcm9jZXNzCisJICovCisJaWYgKHZkc29fcGFnZXMgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwl2bWEgPSBrbWVtX2NhY2hlX2FsbG9jKHZtX2FyZWFfY2FjaGVwLCBTTEFCX0tFUk5FTCk7CisJaWYgKHZtYSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1lbXNldCh2bWEsIDAsIHNpemVvZigqdm1hKSk7CisKKwkvKiBBZGQgYSBwYWdlIHRvIHRoZSB2ZHNvIHNpemUgZm9yIHRoZSBkYXRhIHBhZ2UgKi8KKwl2ZHNvX3BhZ2VzICsrOworCisJLyoKKwkgKiBwaWNrIGEgYmFzZSBhZGRyZXNzIGZvciB0aGUgdkRTTyBpbiBwcm9jZXNzIHNwYWNlLiBXZSB0cnkgdG8gcHV0IGl0CisJICogYXQgdmRzb19iYXNlIHdoaWNoIGlzIHRoZSAibmF0dXJhbCIgYmFzZSBmb3IgaXQsIGJ1dCB3ZSBtaWdodCBmYWlsCisJICogYW5kIGVuZCB1cCBwdXR0aW5nIGl0IGVsc2V3aGVyZS4KKwkgKi8KKwl2ZHNvX2Jhc2UgPSBnZXRfdW5tYXBwZWRfYXJlYShOVUxMLCB2ZHNvX2Jhc2UsCisJCQkJICAgICAgdmRzb19wYWdlcyA8PCBQQUdFX1NISUZULCAwLCAwKTsKKwlpZiAodmRzb19iYXNlICYgflBBR0VfTUFTSykgeworCQlrbWVtX2NhY2hlX2ZyZWUodm1fYXJlYV9jYWNoZXAsIHZtYSk7CisJCXJldHVybiAoaW50KXZkc29fYmFzZTsKKwl9CisKKwljdXJyZW50LT50aHJlYWQudmRzb19iYXNlID0gdmRzb19iYXNlOworCisJdm1hLT52bV9tbSA9IG1tOworCXZtYS0+dm1fc3RhcnQgPSBjdXJyZW50LT50aHJlYWQudmRzb19iYXNlOworCXZtYS0+dm1fZW5kID0gdm1hLT52bV9zdGFydCArICh2ZHNvX3BhZ2VzIDw8IFBBR0VfU0hJRlQpOworCisJLyoKKwkgKiBvdXIgdm1hIGZsYWdzIGRvbid0IGhhdmUgVk1fV1JJVEUgc28gYnkgZGVmYXVsdCwgdGhlIHByb2Nlc3MgaXNuJ3QKKwkgKiBhbGxvd2VkIHRvIHdyaXRlIHRob3NlIHBhZ2VzLgorCSAqIGdkYiBjYW4gYnJlYWsgdGhhdCB3aXRoIHB0cmFjZSBpbnRlcmZhY2UsIGFuZCB0aHVzIHRyaWdnZXIgQ09XIG9uCisJICogdGhvc2UgcGFnZXMgYnV0IGl0J3MgdGhlbiB5b3VyIHJlc3BvbnNpYmlsaXR5IHRvIG5ldmVyIGRvIHRoYXQgb24KKwkgKiB0aGUgImRhdGEiIHBhZ2Ugb2YgdGhlIHZEU08gb3IgeW91J2xsIHN0b3AgZ2V0dGluZyBrZXJuZWwgdXBkYXRlcworCSAqIGFuZCB5b3VyIG5pY2UgdXNlcmxhbmQgZ2V0dGltZW9mZGF5IHdpbGwgYmUgdG90YWxseSBkZWFkLgorCSAqIEl0J3MgZmluZSB0byB1c2UgdGhhdCBmb3Igc2V0dGluZyBicmVha3BvaW50cyBpbiB0aGUgdkRTTyBjb2RlCisJICogcGFnZXMgdGhvdWdoCisJICovCisJdm1hLT52bV9mbGFncyA9IFZNX1JFQUQgfCBWTV9FWEVDIHwgVk1fTUFZUkVBRCB8IFZNX01BWVdSSVRFIHwKKwkJVk1fTUFZRVhFQyB8IFZNX1JFU0VSVkVEOworCXZtYS0+dm1fZmxhZ3MgfD0gbW0tPmRlZl9mbGFnczsKKwl2bWEtPnZtX3BhZ2VfcHJvdCA9IHByb3RlY3Rpb25fbWFwW3ZtYS0+dm1fZmxhZ3MgJiAweDddOworCXZtYS0+dm1fb3BzID0gJnZkc29fdm1vcHM7CisKKwlkb3duX3dyaXRlKCZtbS0+bW1hcF9zZW0pOworCWlmIChpbnNlcnRfdm1fc3RydWN0KG1tLCB2bWEpKSB7CisJCXVwX3dyaXRlKCZtbS0+bW1hcF9zZW0pOworCQlrbWVtX2NhY2hlX2ZyZWUodm1fYXJlYV9jYWNoZXAsIHZtYSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwltbS0+dG90YWxfdm0gKz0gKHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCkgPj4gUEFHRV9TSElGVDsKKwl1cF93cml0ZSgmbW0tPm1tYXBfc2VtKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCAqIF9faW5pdCBmaW5kX3NlY3Rpb24zMihFbGYzMl9FaGRyICplaGRyLCBjb25zdCBjaGFyICpzZWNuYW1lLAorCQkJCSAgdW5zaWduZWQgbG9uZyAqc2l6ZSkKK3sKKwlFbGYzMl9TaGRyICpzZWNoZHJzOworCXVuc2lnbmVkIGludCBpOworCWNoYXIgKnNlY25hbWVzOworCisJLyogR3JhYiBzZWN0aW9uIGhlYWRlcnMgYW5kIHN0cmluZ3Mgc28gd2UgY2FuIHRlbGwgd2hvIGlzIHdobyAqLworCXNlY2hkcnMgPSAodm9pZCAqKWVoZHIgKyBlaGRyLT5lX3Nob2ZmOworCXNlY25hbWVzID0gKHZvaWQgKillaGRyICsgc2VjaGRyc1tlaGRyLT5lX3Noc3RybmR4XS5zaF9vZmZzZXQ7CisKKwkvKiBGaW5kIHRoZSBzZWN0aW9uIHRoZXkgd2FudCAqLworCWZvciAoaSA9IDE7IGkgPCBlaGRyLT5lX3NobnVtOyBpKyspIHsKKwkJaWYgKHN0cmNtcChzZWNuYW1lcytzZWNoZHJzW2ldLnNoX25hbWUsIHNlY25hbWUpID09IDApIHsKKwkJCWlmIChzaXplKQorCQkJCSpzaXplID0gc2VjaGRyc1tpXS5zaF9zaXplOworCQkJcmV0dXJuICh2b2lkICopZWhkciArIHNlY2hkcnNbaV0uc2hfb2Zmc2V0OworCQl9CisJfQorCSpzaXplID0gMDsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIEVsZjMyX1N5bSAqIF9faW5pdCBmaW5kX3N5bWJvbDMyKHN0cnVjdCBsaWIzMl9lbGZpbmZvICpsaWIsCisJCQkJCWNvbnN0IGNoYXIgKnN5bW5hbWUpCit7CisJdW5zaWduZWQgaW50IGk7CisJY2hhciBuYW1lW01BWF9TWU1OQU1FXSwgKmM7CisKKwlmb3IgKGkgPSAwOyBpIDwgKGxpYi0+ZHluc3ltc2l6ZSAvIHNpemVvZihFbGYzMl9TeW0pKTsgaSsrKSB7CisJCWlmIChsaWItPmR5bnN5bVtpXS5zdF9uYW1lID09IDApCisJCQljb250aW51ZTsKKwkJc3RybGNweShuYW1lLCBsaWItPmR5bnN0ciArIGxpYi0+ZHluc3ltW2ldLnN0X25hbWUsCisJCQlNQVhfU1lNTkFNRSk7CisJCWMgPSBzdHJjaHIobmFtZSwgJ0AnKTsKKwkJaWYgKGMpCisJCQkqYyA9IDA7CisJCWlmIChzdHJjbXAoc3ltbmFtZSwgbmFtZSkgPT0gMCkKKwkJCXJldHVybiAmbGliLT5keW5zeW1baV07CisJfQorCXJldHVybiBOVUxMOworfQorCisvKiBOb3RlIHRoYXQgd2UgYXNzdW1lIHRoZSBzZWN0aW9uIGlzIC50ZXh0IGFuZCB0aGUgc3ltYm9sIGlzIHJlbGF0aXZlIHRvCisgKiB0aGUgbGlicmFyeSBiYXNlCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCBmaW5kX2Z1bmN0aW9uMzIoc3RydWN0IGxpYjMyX2VsZmluZm8gKmxpYiwKKwkJCQkJICAgIGNvbnN0IGNoYXIgKnN5bW5hbWUpCit7CisJRWxmMzJfU3ltICpzeW0gPSBmaW5kX3N5bWJvbDMyKGxpYiwgc3ltbmFtZSk7CisKKwlpZiAoc3ltID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAidkRTTzMyOiBmdW5jdGlvbiAlcyBub3QgZm91bmQgIVxuIiwKKwkJICAgICAgIHN5bW5hbWUpOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIHN5bS0+c3RfdmFsdWUgLSBWRFNPMzJfTEJBU0U7Cit9CisKK3N0YXRpYyBpbnQgdmRzb19kb19mdW5jX3BhdGNoMzIoc3RydWN0IGxpYjMyX2VsZmluZm8gKnYzMiwKKwkJCQlzdHJ1Y3QgbGliNjRfZWxmaW5mbyAqdjY0LAorCQkJCWNvbnN0IGNoYXIgKm9yaWcsIGNvbnN0IGNoYXIgKmZpeCkKK3sKKwlFbGYzMl9TeW0gKnN5bTMyX2dlbiwgKnN5bTMyX2ZpeDsKKworCXN5bTMyX2dlbiA9IGZpbmRfc3ltYm9sMzIodjMyLCBvcmlnKTsKKwlpZiAoc3ltMzJfZ2VuID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ2RFNPMzI6IENhbid0IGZpbmQgc3ltYm9sICVzICFcbiIsIG9yaWcpOworCQlyZXR1cm4gLTE7CisJfQorCWlmIChmaXggPT0gTlVMTCkgeworCQlzeW0zMl9nZW4tPnN0X25hbWUgPSAwOworCQlyZXR1cm4gMDsKKwl9CisJc3ltMzJfZml4ID0gZmluZF9zeW1ib2wzMih2MzIsIGZpeCk7CisJaWYgKHN5bTMyX2ZpeCA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAidkRTTzMyOiBDYW4ndCBmaW5kIHN5bWJvbCAlcyAhXG4iLCBmaXgpOworCQlyZXR1cm4gLTE7CisJfQorCXN5bTMyX2dlbi0+c3RfdmFsdWUgPSBzeW0zMl9maXgtPnN0X3ZhbHVlOworCXN5bTMyX2dlbi0+c3Rfc2l6ZSA9IHN5bTMyX2ZpeC0+c3Rfc2l6ZTsKKwlzeW0zMl9nZW4tPnN0X2luZm8gPSBzeW0zMl9maXgtPnN0X2luZm87CisJc3ltMzJfZ2VuLT5zdF9vdGhlciA9IHN5bTMyX2ZpeC0+c3Rfb3RoZXI7CisJc3ltMzJfZ2VuLT5zdF9zaG5keCA9IHN5bTMyX2ZpeC0+c3Rfc2huZHg7CisKKwlyZXR1cm4gMDsKK30KKworCisjaWZkZWYgQ09ORklHX1BQQzY0CisKK3N0YXRpYyB2b2lkICogX19pbml0IGZpbmRfc2VjdGlvbjY0KEVsZjY0X0VoZHIgKmVoZHIsIGNvbnN0IGNoYXIgKnNlY25hbWUsCisJCQkJICB1bnNpZ25lZCBsb25nICpzaXplKQoreworCUVsZjY0X1NoZHIgKnNlY2hkcnM7CisJdW5zaWduZWQgaW50IGk7CisJY2hhciAqc2VjbmFtZXM7CisKKwkvKiBHcmFiIHNlY3Rpb24gaGVhZGVycyBhbmQgc3RyaW5ncyBzbyB3ZSBjYW4gdGVsbCB3aG8gaXMgd2hvICovCisJc2VjaGRycyA9ICh2b2lkICopZWhkciArIGVoZHItPmVfc2hvZmY7CisJc2VjbmFtZXMgPSAodm9pZCAqKWVoZHIgKyBzZWNoZHJzW2VoZHItPmVfc2hzdHJuZHhdLnNoX29mZnNldDsKKworCS8qIEZpbmQgdGhlIHNlY3Rpb24gdGhleSB3YW50ICovCisJZm9yIChpID0gMTsgaSA8IGVoZHItPmVfc2hudW07IGkrKykgeworCQlpZiAoc3RyY21wKHNlY25hbWVzK3NlY2hkcnNbaV0uc2hfbmFtZSwgc2VjbmFtZSkgPT0gMCkgeworCQkJaWYgKHNpemUpCisJCQkJKnNpemUgPSBzZWNoZHJzW2ldLnNoX3NpemU7CisJCQlyZXR1cm4gKHZvaWQgKillaGRyICsgc2VjaGRyc1tpXS5zaF9vZmZzZXQ7CisJCX0KKwl9CisJaWYgKHNpemUpCisJCSpzaXplID0gMDsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIEVsZjY0X1N5bSAqIF9faW5pdCBmaW5kX3N5bWJvbDY0KHN0cnVjdCBsaWI2NF9lbGZpbmZvICpsaWIsCisJCQkJCWNvbnN0IGNoYXIgKnN5bW5hbWUpCit7CisJdW5zaWduZWQgaW50IGk7CisJY2hhciBuYW1lW01BWF9TWU1OQU1FXSwgKmM7CisKKwlmb3IgKGkgPSAwOyBpIDwgKGxpYi0+ZHluc3ltc2l6ZSAvIHNpemVvZihFbGY2NF9TeW0pKTsgaSsrKSB7CisJCWlmIChsaWItPmR5bnN5bVtpXS5zdF9uYW1lID09IDApCisJCQljb250aW51ZTsKKwkJc3RybGNweShuYW1lLCBsaWItPmR5bnN0ciArIGxpYi0+ZHluc3ltW2ldLnN0X25hbWUsCisJCQlNQVhfU1lNTkFNRSk7CisJCWMgPSBzdHJjaHIobmFtZSwgJ0AnKTsKKwkJaWYgKGMpCisJCQkqYyA9IDA7CisJCWlmIChzdHJjbXAoc3ltbmFtZSwgbmFtZSkgPT0gMCkKKwkJCXJldHVybiAmbGliLT5keW5zeW1baV07CisJfQorCXJldHVybiBOVUxMOworfQorCisvKiBOb3RlIHRoYXQgd2UgYXNzdW1lIHRoZSBzZWN0aW9uIGlzIC50ZXh0IGFuZCB0aGUgc3ltYm9sIGlzIHJlbGF0aXZlIHRvCisgKiB0aGUgbGlicmFyeSBiYXNlCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCBmaW5kX2Z1bmN0aW9uNjQoc3RydWN0IGxpYjY0X2VsZmluZm8gKmxpYiwKKwkJCQkJICAgIGNvbnN0IGNoYXIgKnN5bW5hbWUpCit7CisJRWxmNjRfU3ltICpzeW0gPSBmaW5kX3N5bWJvbDY0KGxpYiwgc3ltbmFtZSk7CisKKwlpZiAoc3ltID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAidkRTTzY0OiBmdW5jdGlvbiAlcyBub3QgZm91bmQgIVxuIiwKKwkJICAgICAgIHN5bW5hbWUpOworCQlyZXR1cm4gMDsKKwl9CisjaWZkZWYgVkRTNjRfSEFTX0RFU0NSSVBUT1JTCisJcmV0dXJuICooKHU2NCAqKSh2ZHNvNjRfa2Jhc2UgKyBzeW0tPnN0X3ZhbHVlIC0gVkRTTzY0X0xCQVNFKSkgLQorCQlWRFNPNjRfTEJBU0U7CisjZWxzZQorCXJldHVybiBzeW0tPnN0X3ZhbHVlIC0gVkRTTzY0X0xCQVNFOworI2VuZGlmCit9CisKK3N0YXRpYyBpbnQgdmRzb19kb19mdW5jX3BhdGNoNjQoc3RydWN0IGxpYjMyX2VsZmluZm8gKnYzMiwKKwkJCQlzdHJ1Y3QgbGliNjRfZWxmaW5mbyAqdjY0LAorCQkJCWNvbnN0IGNoYXIgKm9yaWcsIGNvbnN0IGNoYXIgKmZpeCkKK3sKKwlFbGY2NF9TeW0gKnN5bTY0X2dlbiwgKnN5bTY0X2ZpeDsKKworCXN5bTY0X2dlbiA9IGZpbmRfc3ltYm9sNjQodjY0LCBvcmlnKTsKKwlpZiAoc3ltNjRfZ2VuID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ2RFNPNjQ6IENhbid0IGZpbmQgc3ltYm9sICVzICFcbiIsIG9yaWcpOworCQlyZXR1cm4gLTE7CisJfQorCWlmIChmaXggPT0gTlVMTCkgeworCQlzeW02NF9nZW4tPnN0X25hbWUgPSAwOworCQlyZXR1cm4gMDsKKwl9CisJc3ltNjRfZml4ID0gZmluZF9zeW1ib2w2NCh2NjQsIGZpeCk7CisJaWYgKHN5bTY0X2ZpeCA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAidkRTTzY0OiBDYW4ndCBmaW5kIHN5bWJvbCAlcyAhXG4iLCBmaXgpOworCQlyZXR1cm4gLTE7CisJfQorCXN5bTY0X2dlbi0+c3RfdmFsdWUgPSBzeW02NF9maXgtPnN0X3ZhbHVlOworCXN5bTY0X2dlbi0+c3Rfc2l6ZSA9IHN5bTY0X2ZpeC0+c3Rfc2l6ZTsKKwlzeW02NF9nZW4tPnN0X2luZm8gPSBzeW02NF9maXgtPnN0X2luZm87CisJc3ltNjRfZ2VuLT5zdF9vdGhlciA9IHN5bTY0X2ZpeC0+c3Rfb3RoZXI7CisJc3ltNjRfZ2VuLT5zdF9zaG5keCA9IHN5bTY0X2ZpeC0+c3Rfc2huZHg7CisKKwlyZXR1cm4gMDsKK30KKworI2VuZGlmIC8qIENPTkZJR19QUEM2NCAqLworCisKK3N0YXRpYyBfX2luaXQgaW50IHZkc29fZG9fZmluZF9zZWN0aW9ucyhzdHJ1Y3QgbGliMzJfZWxmaW5mbyAqdjMyLAorCQkJCQlzdHJ1Y3QgbGliNjRfZWxmaW5mbyAqdjY0KQoreworCXZvaWQgKnNlY3Q7CisKKwkvKgorCSAqIExvY2F0ZSBzeW1ib2wgdGFibGVzICYgdGV4dCBzZWN0aW9uCisJICovCisKKwl2MzItPmR5bnN5bSA9IGZpbmRfc2VjdGlvbjMyKHYzMi0+aGRyLCAiLmR5bnN5bSIsICZ2MzItPmR5bnN5bXNpemUpOworCXYzMi0+ZHluc3RyID0gZmluZF9zZWN0aW9uMzIodjMyLT5oZHIsICIuZHluc3RyIiwgTlVMTCk7CisJaWYgKHYzMi0+ZHluc3ltID09IE5VTEwgfHwgdjMyLT5keW5zdHIgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgInZEU08zMjogcmVxdWlyZWQgc3ltYm9sIHNlY3Rpb24gbm90IGZvdW5kXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKwlzZWN0ID0gZmluZF9zZWN0aW9uMzIodjMyLT5oZHIsICIudGV4dCIsIE5VTEwpOworCWlmIChzZWN0ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ2RFNPMzI6IHRoZSAudGV4dCBzZWN0aW9uIHdhcyBub3QgZm91bmRcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCXYzMi0+dGV4dCA9IHNlY3QgLSB2ZHNvMzJfa2Jhc2U7CisKKyNpZmRlZiBDT05GSUdfUFBDNjQKKwl2NjQtPmR5bnN5bSA9IGZpbmRfc2VjdGlvbjY0KHY2NC0+aGRyLCAiLmR5bnN5bSIsICZ2NjQtPmR5bnN5bXNpemUpOworCXY2NC0+ZHluc3RyID0gZmluZF9zZWN0aW9uNjQodjY0LT5oZHIsICIuZHluc3RyIiwgTlVMTCk7CisJaWYgKHY2NC0+ZHluc3ltID09IE5VTEwgfHwgdjY0LT5keW5zdHIgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgInZEU082NDogcmVxdWlyZWQgc3ltYm9sIHNlY3Rpb24gbm90IGZvdW5kXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKwlzZWN0ID0gZmluZF9zZWN0aW9uNjQodjY0LT5oZHIsICIudGV4dCIsIE5VTEwpOworCWlmIChzZWN0ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ2RFNPNjQ6IHRoZSAudGV4dCBzZWN0aW9uIHdhcyBub3QgZm91bmRcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCXY2NC0+dGV4dCA9IHNlY3QgLSB2ZHNvNjRfa2Jhc2U7CisjZW5kaWYgLyogQ09ORklHX1BQQzY0ICovCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIF9faW5pdCB2b2lkIHZkc29fc2V0dXBfdHJhbXBvbGluZXMoc3RydWN0IGxpYjMyX2VsZmluZm8gKnYzMiwKKwkJCQkJICBzdHJ1Y3QgbGliNjRfZWxmaW5mbyAqdjY0KQoreworCS8qCisJICogRmluZCBzaWduYWwgdHJhbXBvbGluZXMKKwkgKi8KKworI2lmZGVmIENPTkZJR19QUEM2NAorCXZkc282NF9ydF9zaWd0cmFtcCA9IGZpbmRfZnVuY3Rpb242NCh2NjQsICJfX2tlcm5lbF9zaWd0cmFtcF9ydDY0Iik7CisjZW5kaWYKKwl2ZHNvMzJfc2lndHJhbXAJICAgPSBmaW5kX2Z1bmN0aW9uMzIodjMyLCAiX19rZXJuZWxfc2lndHJhbXAzMiIpOworCXZkc28zMl9ydF9zaWd0cmFtcCA9IGZpbmRfZnVuY3Rpb24zMih2MzIsICJfX2tlcm5lbF9zaWd0cmFtcF9ydDMyIik7Cit9CisKK3N0YXRpYyBfX2luaXQgaW50IHZkc29fZml4dXBfZGF0YXBhZ2Uoc3RydWN0IGxpYjMyX2VsZmluZm8gKnYzMiwKKwkJCQkgICAgICAgc3RydWN0IGxpYjY0X2VsZmluZm8gKnY2NCkKK3sKKwlFbGYzMl9TeW0gKnN5bTMyOworI2lmZGVmIENPTkZJR19QUEM2NAorCUVsZjY0X1N5bSAqc3ltNjQ7CisKKyAgICAgICAJc3ltNjQgPSBmaW5kX3N5bWJvbDY0KHY2NCwgIl9fa2VybmVsX2RhdGFwYWdlX29mZnNldCIpOworCWlmIChzeW02NCA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAidkRTTzY0OiBDYW4ndCBmaW5kIHN5bWJvbCAiCisJCSAgICAgICAiX19rZXJuZWxfZGF0YXBhZ2Vfb2Zmc2V0ICFcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCSooKGludCAqKSh2ZHNvNjRfa2Jhc2UgKyBzeW02NC0+c3RfdmFsdWUgLSBWRFNPNjRfTEJBU0UpKSA9CisJCSh2ZHNvNjRfcGFnZXMgPDwgUEFHRV9TSElGVCkgLQorCQkoc3ltNjQtPnN0X3ZhbHVlIC0gVkRTTzY0X0xCQVNFKTsKKyNlbmRpZiAvKiBDT05GSUdfUFBDNjQgKi8KKworCXN5bTMyID0gZmluZF9zeW1ib2wzMih2MzIsICJfX2tlcm5lbF9kYXRhcGFnZV9vZmZzZXQiKTsKKwlpZiAoc3ltMzIgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgInZEU08zMjogQ2FuJ3QgZmluZCBzeW1ib2wgIgorCQkgICAgICAgIl9fa2VybmVsX2RhdGFwYWdlX29mZnNldCAhXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKwkqKChpbnQgKikodmRzbzMyX2tiYXNlICsgKHN5bTMyLT5zdF92YWx1ZSAtIFZEU08zMl9MQkFTRSkpKSA9CisJCSh2ZHNvMzJfcGFnZXMgPDwgUEFHRV9TSElGVCkgLQorCQkoc3ltMzItPnN0X3ZhbHVlIC0gVkRTTzMyX0xCQVNFKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgX19pbml0IGludCB2ZHNvX2ZpeHVwX2FsdF9mdW5jcyhzdHJ1Y3QgbGliMzJfZWxmaW5mbyAqdjMyLAorCQkJCSAgICAgICBzdHJ1Y3QgbGliNjRfZWxmaW5mbyAqdjY0KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodmRzb19wYXRjaGVzKTsgaSsrKSB7CisJCXN0cnVjdCB2ZHNvX3BhdGNoX2RlZiAqcGF0Y2ggPSAmdmRzb19wYXRjaGVzW2ldOworCQlpbnQgbWF0Y2ggPSAoY3VyX2NwdV9zcGVjLT5jcHVfZmVhdHVyZXMgJiBwYXRjaC0+ZnRyX21hc2spCisJCQk9PSBwYXRjaC0+ZnRyX3ZhbHVlOworCQlpZiAoIW1hdGNoKQorCQkJY29udGludWU7CisKKwkJREJHKCJyZXBsYWNpbmcgJXMgd2l0aCAlcy4uLlxuIiwgcGF0Y2gtPmdlbl9uYW1lLAorCQkgICAgcGF0Y2gtPmZpeF9uYW1lID8gIk5PTkUiIDogcGF0Y2gtPmZpeF9uYW1lKTsKKworCQkvKgorCQkgKiBQYXRjaCB0aGUgMzIgYml0cyBhbmQgNjQgYml0cyBzeW1ib2xzLiBOb3RlIHRoYXQgd2UgZG8gbm90CisJCSAqIHBhdGNoIHRoZSAiLiIgc3ltYm9sIG9uIDY0IGJpdHMuCisJCSAqIEl0IHdvdWxkIGJlIGVhc3kgdG8gZG8sIGJ1dCBkb2Vzbid0IHNlZW0gdG8gYmUgbmVjZXNzYXJ5LAorCQkgKiBwYXRjaGluZyB0aGUgT1BEIHN5bWJvbCBpcyBlbm91Z2guCisJCSAqLworCQl2ZHNvX2RvX2Z1bmNfcGF0Y2gzMih2MzIsIHY2NCwgcGF0Y2gtPmdlbl9uYW1lLAorCQkJCSAgICAgcGF0Y2gtPmZpeF9uYW1lKTsKKyNpZmRlZiBDT05GSUdfUFBDNjQKKwkJdmRzb19kb19mdW5jX3BhdGNoNjQodjMyLCB2NjQsIHBhdGNoLT5nZW5fbmFtZSwKKwkJCQkgICAgIHBhdGNoLT5maXhfbmFtZSk7CisjZW5kaWYgLyogQ09ORklHX1BQQzY0ICovCisJfQorCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIF9faW5pdCBpbnQgdmRzb19zZXR1cCh2b2lkKQoreworCXN0cnVjdCBsaWIzMl9lbGZpbmZvCXYzMjsKKwlzdHJ1Y3QgbGliNjRfZWxmaW5mbwl2NjQ7CisKKwl2MzIuaGRyID0gdmRzbzMyX2tiYXNlOworI2lmZGVmIENPTkZJR19QUEM2NAorCXY2NC5oZHIgPSB2ZHNvNjRfa2Jhc2U7CisjZW5kaWYKKwlpZiAodmRzb19kb19maW5kX3NlY3Rpb25zKCZ2MzIsICZ2NjQpKQorCQlyZXR1cm4gLTE7CisKKwlpZiAodmRzb19maXh1cF9kYXRhcGFnZSgmdjMyLCAmdjY0KSkKKwkJcmV0dXJuIC0xOworCisJaWYgKHZkc29fZml4dXBfYWx0X2Z1bmNzKCZ2MzIsICZ2NjQpKQorCQlyZXR1cm4gLTE7CisKKwl2ZHNvX3NldHVwX3RyYW1wb2xpbmVzKCZ2MzIsICZ2NjQpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBDYWxsZWQgZnJvbSBzZXR1cF9hcmNoIHRvIGluaXRpYWxpemUgdGhlIGJpdG1hcCBvZiBhdmFpbGFibGUKKyAqIHN5c2NhbGxzIGluIHRoZSBzeXN0ZW1jZmcgcGFnZQorICovCitzdGF0aWMgdm9pZCBfX2luaXQgdmRzb19zZXR1cF9zeXNjYWxsX21hcCh2b2lkKQoreworCXVuc2lnbmVkIGludCBpOworCWV4dGVybiB1bnNpZ25lZCBsb25nICpzeXNfY2FsbF90YWJsZTsKKwlleHRlcm4gdW5zaWduZWQgbG9uZyBzeXNfbmlfc3lzY2FsbDsKKworCisJZm9yIChpID0gMDsgaSA8IF9fTlJfc3lzY2FsbHM7IGkrKykgeworI2lmZGVmIENPTkZJR19QUEM2NAorCQlpZiAoc3lzX2NhbGxfdGFibGVbaSoyXSAhPSBzeXNfbmlfc3lzY2FsbCkKKwkJCXZkc29fZGF0YS0+c3lzY2FsbF9tYXBfNjRbaSA+PiA1XSB8PQorCQkJCTB4ODAwMDAwMDBVTCA+PiAoaSAmIDB4MWYpOworCQlpZiAoc3lzX2NhbGxfdGFibGVbaSoyKzFdICE9IHN5c19uaV9zeXNjYWxsKQorCQkJdmRzb19kYXRhLT5zeXNjYWxsX21hcF8zMltpID4+IDVdIHw9CisJCQkJMHg4MDAwMDAwMFVMID4+IChpICYgMHgxZik7CisjZWxzZSAvKiBDT05GSUdfUFBDNjQgKi8KKwkJaWYgKHN5c19jYWxsX3RhYmxlW2ldICE9IHN5c19uaV9zeXNjYWxsKQorCQkJdmRzb19kYXRhLT5zeXNjYWxsX21hcF8zMltpID4+IDVdIHw9CisJCQkJMHg4MDAwMDAwMFVMID4+IChpICYgMHgxZik7CisjZW5kaWYgLyogQ09ORklHX1BQQzY0ICovCisJfQorfQorCisKK3ZvaWQgX19pbml0IHZkc29faW5pdCh2b2lkKQoreworCWludCBpOworCisjaWZkZWYgQ09ORklHX1BQQzY0CisJLyoKKwkgKiBGaWxsIHVwIHRoZSAic3lzdGVtY2ZnIiBzdHVmZiBmb3IgYmFja3dhcmQgY29tcGF0aWJsaXR5CisJICovCisJc3RyY3B5KHZkc29fZGF0YS0+ZXllX2NhdGNoZXIsICJTWVNURU1DRkc6UFBDNjQiKTsKKwl2ZHNvX2RhdGEtPnZlcnNpb24ubWFqb3IgPSBTWVNURU1DRkdfTUFKT1I7CisJdmRzb19kYXRhLT52ZXJzaW9uLm1pbm9yID0gU1lTVEVNQ0ZHX01JTk9SOworCXZkc29fZGF0YS0+cHJvY2Vzc29yID0gbWZzcHIoU1BSTl9QVlIpOworCXZkc29fZGF0YS0+cGxhdGZvcm0gPSBfbWFjaGluZTsKKwl2ZHNvX2RhdGEtPnBoeXNpY2FsTWVtb3J5U2l6ZSA9IGxtYl9waHlzX21lbV9zaXplKCk7CisJdmRzb19kYXRhLT5kY2FjaGVfc2l6ZSA9IHBwYzY0X2NhY2hlcy5kc2l6ZTsKKwl2ZHNvX2RhdGEtPmRjYWNoZV9saW5lX3NpemUgPSBwcGM2NF9jYWNoZXMuZGxpbmVfc2l6ZTsKKwl2ZHNvX2RhdGEtPmljYWNoZV9zaXplID0gcHBjNjRfY2FjaGVzLmlzaXplOworCXZkc29fZGF0YS0+aWNhY2hlX2xpbmVfc2l6ZSA9IHBwYzY0X2NhY2hlcy5pbGluZV9zaXplOworCisJLyoKKwkgKiBDYWxjdWxhdGUgdGhlIHNpemUgb2YgdGhlIDY0IGJpdHMgdkRTTworCSAqLworCXZkc282NF9wYWdlcyA9ICgmdmRzbzY0X2VuZCAtICZ2ZHNvNjRfc3RhcnQpID4+IFBBR0VfU0hJRlQ7CisJREJHKCJ2ZHNvNjRfa2Jhc2U6ICVwLCAweCV4IHBhZ2VzXG4iLCB2ZHNvNjRfa2Jhc2UsIHZkc282NF9wYWdlcyk7CisjZW5kaWYgLyogQ09ORklHX1BQQzY0ICovCisKKworCS8qCisJICogQ2FsY3VsYXRlIHRoZSBzaXplIG9mIHRoZSAzMiBiaXRzIHZEU08KKwkgKi8KKwl2ZHNvMzJfcGFnZXMgPSAoJnZkc28zMl9lbmQgLSAmdmRzbzMyX3N0YXJ0KSA+PiBQQUdFX1NISUZUOworCURCRygidmRzbzMyX2tiYXNlOiAlcCwgMHgleCBwYWdlc1xuIiwgdmRzbzMyX2tiYXNlLCB2ZHNvMzJfcGFnZXMpOworCisKKwkvKgorCSAqIFNldHVwIHRoZSBzeXNjYWxsIG1hcCBpbiB0aGUgdkRPUworCSAqLworCXZkc29fc2V0dXBfc3lzY2FsbF9tYXAoKTsKKwkvKgorCSAqIEluaXRpYWxpemUgdGhlIHZEU08gaW1hZ2VzIGluIG1lbW9yeSwgdGhhdCBpcyBkbyBuZWNlc3NhcnkKKwkgKiBmaXh1cHMgb2YgdkRTTyBzeW1ib2xzLCBsb2NhdGUgdHJhbXBvbGluZXMsIGV0Yy4uLgorCSAqLworCWlmICh2ZHNvX3NldHVwKCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ2RFNPIHNldHVwIGZhaWx1cmUsIG5vdCBlbmFibGVkICFcbiIpOworCQl2ZHNvMzJfcGFnZXMgPSAwOworI2lmZGVmIENPTkZJR19QUEM2NAorCQl2ZHNvNjRfcGFnZXMgPSAwOworI2VuZGlmCisJCXJldHVybjsKKwl9CisKKwkvKiBNYWtlIHN1cmUgcGFnZXMgYXJlIGluIHRoZSBjb3JyZWN0IHN0YXRlICovCisJZm9yIChpID0gMDsgaSA8IHZkc28zMl9wYWdlczsgaSsrKSB7CisJCXN0cnVjdCBwYWdlICpwZyA9IHZpcnRfdG9fcGFnZSh2ZHNvMzJfa2Jhc2UgKyBpKlBBR0VfU0laRSk7CisJCUNsZWFyUGFnZVJlc2VydmVkKHBnKTsKKwkJZ2V0X3BhZ2UocGcpOworCisJfQorI2lmZGVmIENPTkZJR19QUEM2NAorCWZvciAoaSA9IDA7IGkgPCB2ZHNvNjRfcGFnZXM7IGkrKykgeworCQlzdHJ1Y3QgcGFnZSAqcGcgPSB2aXJ0X3RvX3BhZ2UodmRzbzY0X2tiYXNlICsgaSpQQUdFX1NJWkUpOworCQlDbGVhclBhZ2VSZXNlcnZlZChwZyk7CisJCWdldF9wYWdlKHBnKTsKKwl9CisjZW5kaWYgLyogQ09ORklHX1BQQzY0ICovCisKKwlnZXRfcGFnZSh2aXJ0X3RvX3BhZ2UodmRzb19kYXRhKSk7Cit9CisKK2ludCBpbl9nYXRlX2FyZWFfbm9fdGFzayh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcmV0dXJuIDA7Cit9CisKK2ludCBpbl9nYXRlX2FyZWEoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZ2V0X2dhdGVfdm1hKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCXJldHVybiBOVUxMOworfQorCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC92ZHNvMzIvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc28zMi9NYWtlZmlsZQpzaW1pbGFyaXR5IGluZGV4IDkwJQpyZW5hbWUgZnJvbSBhcmNoL3BwYzY0L2tlcm5lbC92ZHNvMzIvTWFrZWZpbGUKcmVuYW1lIHRvIGFyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzMyL01ha2VmaWxlCmluZGV4IDBiMWIwZGYuLjhhM2JlZDUgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQva2VybmVsL3Zkc28zMi9NYWtlZmlsZQorKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc28zMi9NYWtlZmlsZQpAQCAtNSw2ICs1LDEwIEBACiAKICMgQnVpbGQgcnVsZXMKIAoraWZlcSAoJChDT05GSUdfUFBDMzIpLHkpCitDUk9TUzMyQ0MgOj0gJChDQykKK2VuZGlmCisKIHRhcmdldHMgOj0gJChvYmotdmRzbzMyKSB2ZHNvMzIuc28KIG9iai12ZHNvMzIgOj0gJChhZGRwcmVmaXggJChvYmopLywgJChvYmotdmRzbzMyKSkKIApAQCAtMTUsNyArMTksNyBAQAogCiBvYmoteSArPSB2ZHNvMzJfd3JhcHBlci5vCiBleHRyYS15ICs9IHZkc28zMi5sZHMKLUNQUEZMQUdTX3Zkc28zMi5sZHMgKz0gLVAgLUMgLVUkKEFSQ0gpCitDUFBGTEFHU192ZHNvMzIubGRzICs9IC1QIC1DIC1VcG93ZXJwYwogCiAjIEZvcmNlIGRlcGVuZGVuY3kgKGluY2JpbiBpcyBiYWQpCiAkKG9iaikvdmRzbzMyX3dyYXBwZXIubyA6ICQob2JqKS92ZHNvMzIuc28KZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL3Zkc28zMi9jYWNoZWZsdXNoLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc28zMi9jYWNoZWZsdXNoLlMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvcHBjNjQva2VybmVsL3Zkc28zMi9jYWNoZWZsdXNoLlMKcmVuYW1lIHRvIGFyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzMyL2NhY2hlZmx1c2guUwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzMyL2RhdGFwYWdlLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc28zMi9kYXRhcGFnZS5TCnNpbWlsYXJpdHkgaW5kZXggODIlCnJlbmFtZSBmcm9tIGFyY2gvcHBjNjQva2VybmVsL3Zkc28zMi9kYXRhcGFnZS5TCnJlbmFtZSB0byBhcmNoL3Bvd2VycGMva2VybmVsL3Zkc28zMi9kYXRhcGFnZS5TCmluZGV4IDRmNGViMGIuLmEwOGMyNmUgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQva2VybmVsL3Zkc28zMi9kYXRhcGFnZS5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzMyL2RhdGFwYWdlLlMKQEAgLTY2LDMgKzY2LDE5IEBACiAJYmxyCiAgIC5jZmlfZW5kcHJvYwogVl9GVU5DVElPTl9FTkQoX19rZXJuZWxfZ2V0X3N5c2NhbGxfbWFwKQorCisvKgorICogdm9pZCB1bnNpZ25lZCBsb25nIGxvbmcgIF9fa2VybmVsX2dldF90YmZyZXEodm9pZCk7CisgKgorICogcmV0dXJucyB0aGUgdGltZWJhc2UgZnJlcXVlbmN5IGluIEhaCisgKi8KK1ZfRlVOQ1RJT05fQkVHSU4oX19rZXJuZWxfZ2V0X3RiZnJlcSkKKyAgLmNmaV9zdGFydHByb2MKKwltZmxyCXIxMgorICAuY2ZpX3JlZ2lzdGVyIGxyLHIxMgorCWJsCV9fZ2V0X2RhdGFwYWdlQGxvY2FsCisJbHd6CXIzLENGR19UQl9USUNLU19QRVJfU0VDKHIzKQorCWx3eglyNCwoQ0ZHX1RCX1RJQ0tTX1BFUl9TRUMgKyA0KShyMykKKwltdGxyCXIxMgorICAuY2ZpX2VuZHByb2MKK1ZfRlVOQ1RJT05fRU5EKF9fa2VybmVsX2dldF90YmZyZXEpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc28zMi9nZXR0aW1lb2ZkYXkuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzMyL2dldHRpbWVvZmRheS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlYjVmYzkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc28zMi9nZXR0aW1lb2ZkYXkuUwpAQCAtMCwwICsxLDMxNSBAQAorLyoKKyAqIFVzZXJsYW5kIGltcGxlbWVudGF0aW9uIG9mIGdldHRpbWVvZmRheSgpIGZvciAzMiBiaXRzIHByb2Nlc3NlcyBpbiBhCisgKiBwcGM2NCBrZXJuZWwgZm9yIHVzZSBpbiB0aGUgdkRTTworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBCZW5qYW1pbiBIZXJyZW5zY2htdWlkdCAoYmVuaEBrZXJuZWwuY3Jhc2hpbmcub3JnLAorICogICAgICAgICAgICAgICAgICAgIElCTSBDb3JwLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL3BwY19hc20uaD4KKyNpbmNsdWRlIDxhc20vdmRzby5oPgorI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKworCS50ZXh0CisvKgorICogRXhhY3QgcHJvdG90eXBlIG9mIGdldHRpbWVvZmRheQorICoKKyAqIGludCBfX2tlcm5lbF9nZXR0aW1lb2ZkYXkoc3RydWN0IHRpbWV2YWwgKnR2LCBzdHJ1Y3QgdGltZXpvbmUgKnR6KTsKKyAqCisgKi8KK1ZfRlVOQ1RJT05fQkVHSU4oX19rZXJuZWxfZ2V0dGltZW9mZGF5KQorICAuY2ZpX3N0YXJ0cHJvYworCW1mbHIJcjEyCisgIC5jZmlfcmVnaXN0ZXIgbHIscjEyCisKKwltcglyMTAscjMJCQkvKiByMTAgc2F2ZXMgdHYgKi8KKwltcglyMTEscjQJCQkvKiByMTEgc2F2ZXMgdHogKi8KKwlibAlfX2dldF9kYXRhcGFnZUBsb2NhbAkvKiBnZXQgZGF0YSBwYWdlICovCisJbXIJcjksIHIzCQkJLyogZGF0YXBhZ2UgcHRyIGluIHI5ICovCisJYmwJX19kb19nZXRfeHNlY0Bsb2NhbAkvKiBnZXQgeHNlYyBmcm9tIHRiICYga2VybmVsICovCisJYm5lLQkyZgkJCS8qIG91dCBvZiBsaW5lIC0+IGRvIHN5c2NhbGwgKi8KKworCS8qIHNlY29uZHMgYXJlIHhzZWMgPj4gMjAgKi8KKwlybHdpbm0JcjUscjQsMTIsMjAsMzEKKwlybHdpbWkJcjUscjMsMTIsMCwxOQorCXN0dwlyNSxUVkFMMzJfVFZfU0VDKHIxMCkKKworCS8qIGdldCByZW1haW5pbmcgeHNlYyBhbmQgY29udmVydCB0byB1c2VjLiB3ZSBzY2FsZQorCSAqIHVwIHJlbWFpbmluZyB4c2VjIGJ5IDEyIGJpdHMgYW5kIGdldCB0aGUgdG9wIDMyIGJpdHMKKwkgKiBvZiB0aGUgbXVsdGlwbGljYXRpb24KKwkgKi8KKwlybHdpbm0JcjUscjQsMTIsMCwxOQorCWxpcwlyNiwxMDAwMDAwQGgKKwlvcmkJcjYscjYsMTAwMDAwMEBsCisJbXVsaHd1CXI1LHI1LHI2CisJc3R3CXI1LFRWQUwzMl9UVl9VU0VDKHIxMCkKKworCWNtcGxpCWNyMCxyMTEsMAkJLyogY2hlY2sgaWYgdHogaXMgTlVMTCAqLworCWJlcQkxZgorCWx3eglyNCxDRkdfVFpfTUlOVVRFV0VTVChyOSkvKiBmaWxsIHR6ICovCisJbHd6CXI1LENGR19UWl9EU1RUSU1FKHI5KQorCXN0dwlyNCxUWk9ORV9UWl9NSU5XRVNUKHIxMSkKKwlzdHcJcjUsVFpPTkVfVFpfRFNUVElNRShyMTEpCisKKzE6CW10bHIJcjEyCisJbGkJcjMsMAorCWJscgorCisyOgorCW10bHIJcjEyCisJbXIJcjMscjEwCisJbXIJcjQscjExCisJbGkJcjAsX19OUl9nZXR0aW1lb2ZkYXkKKwlzYworCWJscgorICAuY2ZpX2VuZHByb2MKK1ZfRlVOQ1RJT05fRU5EKF9fa2VybmVsX2dldHRpbWVvZmRheSkKKworLyoKKyAqIEV4YWN0IHByb3RvdHlwZSBvZiBjbG9ja19nZXR0aW1lKCkKKyAqCisgKiBpbnQgX19rZXJuZWxfY2xvY2tfZ2V0dGltZShjbG9ja2lkX3QgY2xvY2tfaWQsIHN0cnVjdCB0aW1lc3BlYyAqdHApOworICoKKyAqLworVl9GVU5DVElPTl9CRUdJTihfX2tlcm5lbF9jbG9ja19nZXR0aW1lKQorICAuY2ZpX3N0YXJ0cHJvYworCS8qIENoZWNrIGZvciBzdXBwb3J0ZWQgY2xvY2sgSURzICovCisJY21wbGkJY3IwLHIzLENMT0NLX1JFQUxUSU1FCisJY21wbGkJY3IxLHIzLENMT0NLX01PTk9UT05JQworCWNyb3IJY3IwLGNyMCxjcjEKKwlibmUJY3IwLDk5ZgorCisJbWZscglyMTIJCQkvKiByMTIgc2F2ZXMgbHIgKi8KKyAgLmNmaV9yZWdpc3RlciBscixyMTIKKwltcglyMTAscjMJCQkvKiByMTAgc2F2ZXMgaWQgKi8KKwltcglyMTEscjQJCQkvKiByMTEgc2F2ZXMgdHAgKi8KKwlibAlfX2dldF9kYXRhcGFnZUBsb2NhbAkvKiBnZXQgZGF0YSBwYWdlICovCisJbXIJcjksIHIzCQkJLyogZGF0YXBhZ2UgcHRyIGluIHI5ICovCisJYmVxCWNyMSw1MGYJCQkvKiBpZiBtb25vdG9uaWMgLT4ganVtcCB0aGVyZSAqLworCisJLyoKKwkgKiBDTE9DS19SRUFMVElNRQorCSAqLworCisJYmwJX19kb19nZXRfeHNlY0Bsb2NhbAkvKiBnZXQgeHNlYyBmcm9tIHRiICYga2VybmVsICovCisJYm5lLQk5OGYJCQkvKiBvdXQgb2YgbGluZSAtPiBkbyBzeXNjYWxsICovCisKKwkvKiBzZWNvbmRzIGFyZSB4c2VjID4+IDIwICovCisJcmx3aW5tCXI1LHI0LDEyLDIwLDMxCisJcmx3aW1pCXI1LHIzLDEyLDAsMTkKKwlzdHcJcjUsVFNQQzMyX1RWX1NFQyhyMTEpCisKKwkvKiBnZXQgcmVtYWluaW5nIHhzZWMgYW5kIGNvbnZlcnQgdG8gbnNlYy4gd2Ugc2NhbGUKKwkgKiB1cCByZW1haW5pbmcgeHNlYyBieSAxMiBiaXRzIGFuZCBnZXQgdGhlIHRvcCAzMiBiaXRzCisJICogb2YgdGhlIG11bHRpcGxpY2F0aW9uLCB0aGVuIHdlIG11bHRpcGx5IGJ5IDEwMDAKKwkgKi8KKwlybHdpbm0JcjUscjQsMTIsMCwxOQorCWxpcwlyNiwxMDAwMDAwQGgKKwlvcmkJcjYscjYsMTAwMDAwMEBsCisJbXVsaHd1CXI1LHI1LHI2CisJbXVsbGkJcjUscjUsMTAwMAorCXN0dwlyNSxUU1BDMzJfVFZfTlNFQyhyMTEpCisJbXRscglyMTIKKwlsaQlyMywwCisJYmxyCisKKwkvKgorCSAqIENMT0NLX01PTk9UT05JQworCSAqLworCis1MDoJYmwJX19kb19nZXRfeHNlY0Bsb2NhbAkvKiBnZXQgeHNlYyBmcm9tIHRiICYga2VybmVsICovCisJYm5lLQk5OGYJCQkvKiBvdXQgb2YgbGluZSAtPiBkbyBzeXNjYWxsICovCisKKwkvKiBzZWNvbmRzIGFyZSB4c2VjID4+IDIwICovCisJcmx3aW5tCXI2LHI0LDEyLDIwLDMxCisJcmx3aW1pCXI2LHIzLDEyLDAsMTkKKworCS8qIGdldCByZW1haW5pbmcgeHNlYyBhbmQgY29udmVydCB0byBuc2VjLiB3ZSBzY2FsZQorCSAqIHVwIHJlbWFpbmluZyB4c2VjIGJ5IDEyIGJpdHMgYW5kIGdldCB0aGUgdG9wIDMyIGJpdHMKKwkgKiBvZiB0aGUgbXVsdGlwbGljYXRpb24sIHRoZW4gd2UgbXVsdGlwbHkgYnkgMTAwMAorCSAqLworCXJsd2lubQlyNyxyNCwxMiwwLDE5CisJbGlzCXI1LDEwMDAwMDBAaAorCW9yaQlyNSxyNSwxMDAwMDAwQGwKKwltdWxod3UJcjcscjcscjUKKwltdWxsaQlyNyxyNywxMDAwCisKKwkvKiBub3cgd2UgbXVzdCBmaXh1cCB1c2luZyB3YWxsIHRvIG1vbm90b25pYy4gV2UgbmVlZCB0byBzbmFwc2hvdAorCSAqIHRoYXQgdmFsdWUgYW5kIGRvIHRoZSBjb3VudGVyIHRyaWNrIGFnYWluLiBGb3J0dW5hdGVseSwgd2Ugc3RpbGwKKwkgKiBoYXZlIHRoZSBjb3VudGVyIHZhbHVlIGluIHI4IHRoYXQgd2FzIHJldHVybmVkIGJ5IF9fZG9fZ2V0X3hzZWMuCisJICogQXQgdGhpcyBwb2ludCwgcjYscjcgY29udGFpbiBvdXIgc2VjL25zZWMgdmFsdWVzLCByMyxyNCBhbmQgcjUKKwkgKiBjYW4gYmUgdXNlZAorCSAqLworCisJbHd6CXIzLFdUT01fQ0xPQ0tfU0VDKHI5KQorCWx3eglyNCxXVE9NX0NMT0NLX05TRUMocjkpCisKKwkvKiBXZSBub3cgaGF2ZSBvdXIgcmVzdWx0IGluIHIzLHI0LiBXZSBjcmVhdGUgYSBmYWtlIGRlcGVuZGVuY3kKKwkgKiBvbiB0aGF0IHJlc3VsdCBhbmQgcmUtY2hlY2sgdGhlIGNvdW50ZXIKKwkgKi8KKwlvcglyNSxyNCxyMworCXhvcglyMCxyNSxyNQorCWFkZAlyOSxyOSxyMAorI2lmZGVmIENPTkZJR19QUEM2NAorCWx3eglyMCwoQ0ZHX1RCX1VQREFURV9DT1VOVCs0KShyOSkKKyNlbHNlCisJbHd6CXIwLChDRkdfVEJfVVBEQVRFX0NPVU5UKShyOSkKKyNlbmRpZgorICAgICAgICBjbXBsICAgIGNyMCxyOCxyMAkJLyogY2hlY2sgaWYgdXBkYXRlZCAqLworCWJuZS0JNTBiCisKKwkvKiBDYWxjdWxhdGUgYW5kIHN0b3JlIHJlc3VsdC4gTm90ZSB0aGF0IHRoaXMgbWltbWljcyB0aGUgQyBjb2RlLAorCSAqIHdoaWNoIG1heSBjYXVzZSBmdW5ueSByZXN1bHRzIGlmIG5zZWMgZ29lcyBuZWdhdGl2ZS4uLiBpcyB0aGF0CisJICogcG9zc2libGUgYXQgYWxsID8KKwkgKi8KKwlhZGQJcjMscjMscjYKKwlhZGQJcjQscjQscjcKKwlsaXMJcjUsTlNFQ19QRVJfU0VDQGgKKwlvcmkJcjUscjUsTlNFQ19QRVJfU0VDQGwKKwljbXBsaQljcjAscjQscjUKKwlibHQJMWYKKwlzdWJmCXI0LHI1LHI0CisJYWRkaQlyMyxyMywxCisxOglzdHcJcjMsVFNQQzMyX1RWX1NFQyhyMTEpCisJc3R3CXI0LFRTUEMzMl9UVl9OU0VDKHIxMSkKKworCW10bHIJcjEyCisJbGkJcjMsMAorCWJscgorCisJLyoKKwkgKiBzeXNjYWxsIGZhbGxiYWNrCisJICovCis5ODoKKwltdGxyCXIxMgorCW1yCXIzLHIxMAorCW1yCXI0LHIxMQorOTk6CisJbGkJcjAsX19OUl9jbG9ja19nZXR0aW1lCisJc2MKKwlibHIKKyAgLmNmaV9lbmRwcm9jCitWX0ZVTkNUSU9OX0VORChfX2tlcm5lbF9jbG9ja19nZXR0aW1lKQorCisKKy8qCisgKiBFeGFjdCBwcm90b3R5cGUgb2YgY2xvY2tfZ2V0cmVzKCkKKyAqCisgKiBpbnQgX19rZXJuZWxfY2xvY2tfZ2V0cmVzKGNsb2NraWRfdCBjbG9ja19pZCwgc3RydWN0IHRpbWVzcGVjICpyZXMpOworICoKKyAqLworVl9GVU5DVElPTl9CRUdJTihfX2tlcm5lbF9jbG9ja19nZXRyZXMpCisgIC5jZmlfc3RhcnRwcm9jCisJLyogQ2hlY2sgZm9yIHN1cHBvcnRlZCBjbG9jayBJRHMgKi8KKwljbXB3aQljcjAscjMsQ0xPQ0tfUkVBTFRJTUUKKwljbXB3aQljcjEscjMsQ0xPQ0tfTU9OT1RPTklDCisJY3JvcgljcjAsY3IwLGNyMQorCWJuZQljcjAsOTlmCisKKwlsaQlyMywwCisJY21wbGkJY3IwLHI0LDAKKwliZXFscgorCWxpcwlyNSxDTE9DS19SRUFMVElNRV9SRVNAaAorCW9yaQlyNSxyNSxDTE9DS19SRUFMVElNRV9SRVNAbAorCXN0dwlyMyxUU1BDMzJfVFZfU0VDKHI0KQorCXN0dwlyNSxUU1BDMzJfVFZfTlNFQyhyNCkKKwlibHIKKworCS8qCisJICogc3lzY2FsbCBmYWxsYmFjaworCSAqLworOTk6CisJbGkJcjAsX19OUl9jbG9ja19nZXRyZXMKKwlzYworCWJscgorICAuY2ZpX2VuZHByb2MKK1ZfRlVOQ1RJT05fRU5EKF9fa2VybmVsX2Nsb2NrX2dldHJlcykKKworCisvKgorICogVGhpcyBpcyB0aGUgY29yZSBvZiBnZXR0aW1lb2ZkYXkoKSAmIGZyaWVuZHMsIGl0IHJldHVybnMgdGhlIHhzZWMKKyAqIHZhbHVlIGluIHIzICYgcjQgYW5kIGV4cGVjdHMgdGhlIGRhdGFwYWdlIHB0ciAobm9uIGNsb2JiZXJlZCkKKyAqIGluIHI5LiBjbG9iYmVycyByMCxyNCxyNSxyNixyNyxyOC4KKyAqIFdoZW4gcmV0dXJuaW5nLCByOCBjb250YWlucyB0aGUgY291bnRlciB2YWx1ZSB0aGF0IGNhbiBiZSByZXVzZWQKKyAqIGJ5IHRoZSBtb25vdG9uaWMgY2xvY2sgaW1wbGVtZW50YXRpb24KKyAqLworX19kb19nZXRfeHNlYzoKKyAgLmNmaV9zdGFydHByb2MKKwkvKiBDaGVjayBmb3IgdXBkYXRlIGNvdW50ICYgbG9hZCB2YWx1ZXMuIFdlIHVzZSB0aGUgbG93CisJICogb3JkZXIgMzIgYml0cyBvZiB0aGUgdXBkYXRlIGNvdW50CisJICovCisjaWZkZWYgQ09ORklHX1BQQzY0CisxOglsd3oJcjgsKENGR19UQl9VUERBVEVfQ09VTlQrNCkocjkpCisjZWxzZQorMToJbHd6CXI4LChDRkdfVEJfVVBEQVRFX0NPVU5UKShyOSkKKyNlbmRpZgorCWFuZGkuCXIwLHI4LDEJCQkvKiBwZW5kaW5nIHVwZGF0ZSA/IGxvb3AgKi8KKwlibmUtCTFiCisJeG9yCXIwLHI4LHI4CQkvKiBjcmVhdGUgZGVwZW5kZW5jeSAqLworCWFkZAlyOSxyOSxyMAorCisJLyogTG9hZCBvcmlnIHN0YW1wIChvZmZzZXQgdG8gVEIpICovCisJbHd6CXI1LENGR19UQl9PUklHX1NUQU1QKHI5KQorCWx3eglyNiwoQ0ZHX1RCX09SSUdfU1RBTVArNCkocjkpCisKKwkvKiBHZXQgYSBzdGFibGUgVEIgdmFsdWUgKi8KKzI6CW1mdGJ1CXIzCisJbWZ0YmwJcjQKKwltZnRidQlyMAorCWNtcGwJY3IwLHIzLHIwCisJYm5lLQkyYgorCisJLyogU3Vic3RyYWN0IHRiIG9yaWcgc3RhbXAuIElmIHRoZSBoaWdoIHBhcnQgaXMgbm9uLXplcm8sIHdlIGp1bXAgdG8KKwkgKiB0aGUgc2xvdyBwYXRoIHdoaWNoIGNhbGwgdGhlIHN5c2NhbGwuCisJICogSWYgaXQncyBvaywgdGhlbiB3ZSBoYXZlIG91ciAzMiBiaXRzIHRiX3RpY2tzIHZhbHVlIGluIHI3CisJICovCisJc3ViZmMJcjcscjYscjQKKwlzdWJmZS4JcjAscjUscjMKKwlibmUtCTNmCisKKwkvKiBMb2FkIHNjYWxlIGZhY3RvciAmIGRvIG11bHRpcGxpY2F0aW9uICovCisJbHd6CXI1LENGR19UQl9UT19YUyhyOSkJLyogbG9hZCB2YWx1ZXMgKi8KKwlsd3oJcjYsKENGR19UQl9UT19YUys0KShyOSkKKwltdWxod3UJcjQscjcscjUKKwltdWxod3UJcjYscjcscjYKKwltdWxsdwlyMCxyNyxyNQorCWFkZGMJcjYscjYscjAKKworCS8qIEF0IHRoaXMgcG9pbnQsIHdlIGhhdmUgdGhlIHNjYWxlZCB4c2VjIHZhbHVlIGluIHI0ICsgWEVSOkNBCisJICogd2UgbG9hZCAmIGFkZCB0aGUgc3RhbXAgc2luY2UgZXBvY2gKKwkgKi8KKwlsd3oJcjUsQ0ZHX1NUQU1QX1hTRUMocjkpCisJbHd6CXI2LChDRkdfU1RBTVBfWFNFQys0KShyOSkKKwlhZGRlCXI0LHI0LHI2CisJYWRkemUJcjMscjUKKworCS8qIFdlIG5vdyBoYXZlIG91ciByZXN1bHQgaW4gcjMscjQuIFdlIGNyZWF0ZSBhIGZha2UgZGVwZW5kZW5jeQorCSAqIG9uIHRoYXQgcmVzdWx0IGFuZCByZS1jaGVjayB0aGUgY291bnRlcgorCSAqLworCW9yCXI2LHI0LHIzCisJeG9yCXIwLHI2LHI2CisJYWRkCXI5LHI5LHIwCisjaWZkZWYgQ09ORklHX1BQQzY0CisJbHd6CXIwLChDRkdfVEJfVVBEQVRFX0NPVU5UKzQpKHI5KQorI2Vsc2UKKwlsd3oJcjAsKENGR19UQl9VUERBVEVfQ09VTlQpKHI5KQorI2VuZGlmCisgICAgICAgIGNtcGwgICAgY3IwLHI4LHIwCQkvKiBjaGVjayBpZiB1cGRhdGVkICovCisJYm5lLQkxYgorCisJLyogV2FybmluZyAhIFRoZSBjYWxsZXIgZXhwZWN0cyBDUjpFUSB0byBiZSBzZXQgdG8gaW5kaWNhdGUgYQorCSAqIHN1Y2Nlc3NmdWwgY2FsY3VsYXRpb24gKHNvIGl0IHdvbid0IGZhbGxiYWNrIHRvIHRoZSBzeXNjYWxsCisJICogbWV0aG9kKS4gV2UgaGF2ZSBvdmVycmlkZW4gdGhhdCBDUiBiaXQgaW4gdGhlIGNvdW50ZXIgY2hlY2ssCisJICogYnV0IGZvcnR1bmF0ZWx5LCB0aGUgbG9vcCBleGl0IGNvbmRpdGlvbiBfaXNfIENSOkVRIHNldCwgc28KKwkgKiB3ZSBjYW4gZXhpdCBzYWZlbHkgaGVyZS4gSWYgeW91IGNoYW5nZSB0aGlzIGNvZGUsIGJlIGNhcmVmdWwKKwkgKiBvZiB0aGF0IHNpZGUgZWZmZWN0LgorCSAqLworMzoJYmxyCisgIC5jZmlfZW5kcHJvYwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzMyL25vdGUuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzMyL25vdGUuUwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzMyL25vdGUuUwpyZW5hbWUgdG8gYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvMzIvbm90ZS5TCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC92ZHNvMzIvc2lndHJhbXAuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzMyL3NpZ3RyYW1wLlMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvcHBjNjQva2VybmVsL3Zkc28zMi9zaWd0cmFtcC5TCnJlbmFtZSB0byBhcmNoL3Bvd2VycGMva2VybmVsL3Zkc28zMi9zaWd0cmFtcC5TCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC92ZHNvMzIvdmRzbzMyLmxkcy5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvMzIvdmRzbzMyLmxkcy5TCnNpbWlsYXJpdHkgaW5kZXggOTclCnJlbmFtZSBmcm9tIGFyY2gvcHBjNjQva2VybmVsL3Zkc28zMi92ZHNvMzIubGRzLlMKcmVuYW1lIHRvIGFyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzMyL3Zkc28zMi5sZHMuUwppbmRleCA2Zjg3YTkxLi5mNGJhZDcyIDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC92ZHNvMzIvdmRzbzMyLmxkcy5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzMyL3Zkc28zMi5sZHMuUwpAQCAtMTAyLDkgKzEwMiwxMiBAQAogewogICBWRFNPX1ZFUlNJT05fU1RSSU5HIHsKICAgICBnbG9iYWw6Ci0JX19rZXJuZWxfZGF0YXBhZ2Vfb2Zmc2V0OyAvKiBIYXMgdG8gYmUgdGhlcmUgZm9yIHRoZSBrZXJuZWwgdG8gZmluZCBpdCAqLworCV9fa2VybmVsX2RhdGFwYWdlX29mZnNldDsgLyogSGFzIHRvIGJlIHRoZXJlIGZvciB0aGUga2VybmVsIHRvIGZpbmQgKi8KIAlfX2tlcm5lbF9nZXRfc3lzY2FsbF9tYXA7CiAJX19rZXJuZWxfZ2V0dGltZW9mZGF5OworCV9fa2VybmVsX2Nsb2NrX2dldHRpbWU7CisJX19rZXJuZWxfY2xvY2tfZ2V0cmVzOworCV9fa2VybmVsX2dldF90YmZyZXE7CiAJX19rZXJuZWxfc3luY19kaWNhY2hlOwogCV9fa2VybmVsX3N5bmNfZGljYWNoZV9wNTsKIAlfX2tlcm5lbF9zaWd0cmFtcDMyOwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzMyL3Zkc28zMl93cmFwcGVyLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc28zMi92ZHNvMzJfd3JhcHBlci5TCnNpbWlsYXJpdHkgaW5kZXggNzklCnJlbmFtZSBmcm9tIGFyY2gvcHBjNjQva2VybmVsL3Zkc28zMi92ZHNvMzJfd3JhcHBlci5TCnJlbmFtZSB0byBhcmNoL3Bvd2VycGMva2VybmVsL3Zkc28zMi92ZHNvMzJfd3JhcHBlci5TCmluZGV4IDc2Y2EyOGUuLjU1NmYwY2EgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQva2VybmVsL3Zkc28zMi92ZHNvMzJfd3JhcHBlci5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzMyL3Zkc28zMl93cmFwcGVyLlMKQEAgLTYsNyArNiw3IEBACiAJLmdsb2JsIHZkc28zMl9zdGFydCwgdmRzbzMyX2VuZAogCS5iYWxpZ24gUEFHRV9TSVpFCiB2ZHNvMzJfc3RhcnQ6Ci0JLmluY2JpbiAiYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzMyL3Zkc28zMi5zbyIKKwkuaW5jYmluICJhcmNoL3Bvd2VycGMva2VybmVsL3Zkc28zMi92ZHNvMzIuc28iCiAJLmJhbGlnbiBQQUdFX1NJWkUKIHZkc28zMl9lbmQ6CiAKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL3Zkc282NC9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzY0L01ha2VmaWxlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3BwYzY0L2tlcm5lbC92ZHNvNjQvTWFrZWZpbGUKcmVuYW1lIHRvIGFyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzY0L01ha2VmaWxlCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC92ZHNvNjQvY2FjaGVmbHVzaC5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvNjQvY2FjaGVmbHVzaC5TCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3BwYzY0L2tlcm5lbC92ZHNvNjQvY2FjaGVmbHVzaC5TCnJlbmFtZSB0byBhcmNoL3Bvd2VycGMva2VybmVsL3Zkc282NC9jYWNoZWZsdXNoLlMKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL3Zkc282NC9kYXRhcGFnZS5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvNjQvZGF0YXBhZ2UuUwpzaW1pbGFyaXR5IGluZGV4IDgzJQpyZW5hbWUgZnJvbSBhcmNoL3BwYzY0L2tlcm5lbC92ZHNvNjQvZGF0YXBhZ2UuUwpyZW5hbWUgdG8gYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvNjQvZGF0YXBhZ2UuUwppbmRleCBlZDZlNTk5Li5lNjdlZGEwZiAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzY0L2RhdGFwYWdlLlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvNjQvZGF0YXBhZ2UuUwpAQCAtNjYsMyArNjYsMTkgQEAKIAlibHIKICAgLmNmaV9lbmRwcm9jCiBWX0ZVTkNUSU9OX0VORChfX2tlcm5lbF9nZXRfc3lzY2FsbF9tYXApCisKKworLyoKKyAqIHZvaWQgdW5zaWduZWQgbG9uZyAgX19rZXJuZWxfZ2V0X3RiZnJlcSh2b2lkKTsKKyAqCisgKiByZXR1cm5zIHRoZSB0aW1lYmFzZSBmcmVxdWVuY3kgaW4gSFoKKyAqLworVl9GVU5DVElPTl9CRUdJTihfX2tlcm5lbF9nZXRfdGJmcmVxKQorICAuY2ZpX3N0YXJ0cHJvYworCW1mbHIJcjEyCisgIC5jZmlfcmVnaXN0ZXIgbHIscjEyCisJYmwJVl9MT0NBTF9GVU5DKF9fZ2V0X2RhdGFwYWdlKQorCWxkCXIzLENGR19UQl9USUNLU19QRVJfU0VDKHIzKQorCW10bHIJcjEyCisgIC5jZmlfZW5kcHJvYworVl9GVU5DVElPTl9FTkQoX19rZXJuZWxfZ2V0X3RiZnJlcSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzY0L2dldHRpbWVvZmRheS5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvNjQvZ2V0dGltZW9mZGF5LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM3MWMwMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzY0L2dldHRpbWVvZmRheS5TCkBAIC0wLDAgKzEsMjQyIEBACisvKgorICogVXNlcmxhbmQgaW1wbGVtZW50YXRpb24gb2YgZ2V0dGltZW9mZGF5KCkgZm9yIDY0IGJpdHMgcHJvY2Vzc2VzIGluIGEKKyAqIHBwYzY0IGtlcm5lbCBmb3IgdXNlIGluIHRoZSB2RFNPCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0IEJlbmphbWluIEhlcnJlbnNjaG11aWR0IChiZW5oQGtlcm5lbC5jcmFzaGluZy5vcmcpLAorICogICAgICAgICAgICAgICAgICAgIElCTSBDb3JwLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL3BwY19hc20uaD4KKyNpbmNsdWRlIDxhc20vdmRzby5oPgorI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKworCS50ZXh0CisvKgorICogRXhhY3QgcHJvdG90eXBlIG9mIGdldHRpbWVvZmRheQorICoKKyAqIGludCBfX2tlcm5lbF9nZXR0aW1lb2ZkYXkoc3RydWN0IHRpbWV2YWwgKnR2LCBzdHJ1Y3QgdGltZXpvbmUgKnR6KTsKKyAqCisgKi8KK1ZfRlVOQ1RJT05fQkVHSU4oX19rZXJuZWxfZ2V0dGltZW9mZGF5KQorICAuY2ZpX3N0YXJ0cHJvYworCW1mbHIJcjEyCisgIC5jZmlfcmVnaXN0ZXIgbHIscjEyCisKKwltcglyMTEscjMJCQkvKiByMTEgaG9sZHMgdHYgKi8KKwltcglyMTAscjQJCQkvKiByMTAgaG9sZHMgdHogKi8KKwlibAlWX0xPQ0FMX0ZVTkMoX19nZXRfZGF0YXBhZ2UpCS8qIGdldCBkYXRhIHBhZ2UgKi8KKwlibAlWX0xPQ0FMX0ZVTkMoX19kb19nZXRfeHNlYykJLyogZ2V0IHhzZWMgZnJvbSB0YiAmIGtlcm5lbCAqLworCWxpcyAgICAgcjcsMTUJCQkvKiByNyA9IDEwMDAwMDAgPSBVU0VDX1BFUl9TRUMgKi8KKwlvcmkgICAgIHI3LHI3LDE2OTYwCisJcmxkaWNsICByNSxyNCw0NCwyMAkJLyogcjUgPSBzZWMgPSB4c2VjIC8gWFNFQ19QRVJfU0VDICovCisJcmxkaWNyICByNixyNSwyMCw0MwkJLyogcjYgPSBzZWMgKiBYU0VDX1BFUl9TRUMgKi8KKwlzdGQJcjUsVFZBTDY0X1RWX1NFQyhyMTEpCS8qIHN0b3JlIHNlYyBpbiB0diAqLworCXN1YmYJcjAscjYscjQJCS8qIHIwID0geHNlYyA9ICh4c2VjIC0gcjYpICovCisJbXVsbGQgICByMCxyMCxyNwkJLyogdXNlYyA9ICh4c2VjICogVVNFQ19QRVJfU0VDKSAvCisJCQkJCSAqIFhTRUNfUEVSX1NFQworCQkJCQkgKi8KKwlybGRpY2wgIHIwLHIwLDQ0LDIwCisJY21wbGRpCWNyMCxyMTAsMAkJLyogY2hlY2sgaWYgdHogaXMgTlVMTCAqLworCXN0ZAlyMCxUVkFMNjRfVFZfVVNFQyhyMTEpCS8qIHN0b3JlIHVzZWMgaW4gdHYgKi8KKwliZXEJMWYKKwlsd3oJcjQsQ0ZHX1RaX01JTlVURVdFU1QocjMpLyogZmlsbCB0eiAqLworCWx3eglyNSxDRkdfVFpfRFNUVElNRShyMykKKwlzdHcJcjQsVFpPTkVfVFpfTUlOV0VTVChyMTApCisJc3R3CXI1LFRaT05FX1RaX0RTVFRJTUUocjEwKQorMToJbXRscglyMTIKKwlsaQlyMywwCQkJLyogYWx3YXlzIHN1Y2Nlc3MgKi8KKwlibHIKKyAgLmNmaV9lbmRwcm9jCitWX0ZVTkNUSU9OX0VORChfX2tlcm5lbF9nZXR0aW1lb2ZkYXkpCisKKworLyoKKyAqIEV4YWN0IHByb3RvdHlwZSBvZiBjbG9ja19nZXR0aW1lKCkKKyAqCisgKiBpbnQgX19rZXJuZWxfY2xvY2tfZ2V0dGltZShjbG9ja2lkX3QgY2xvY2tfaWQsIHN0cnVjdCB0aW1lc3BlYyAqdHApOworICoKKyAqLworVl9GVU5DVElPTl9CRUdJTihfX2tlcm5lbF9jbG9ja19nZXR0aW1lKQorICAuY2ZpX3N0YXJ0cHJvYworCS8qIENoZWNrIGZvciBzdXBwb3J0ZWQgY2xvY2sgSURzICovCisJY21wd2kJY3IwLHIzLENMT0NLX1JFQUxUSU1FCisJY21wd2kJY3IxLHIzLENMT0NLX01PTk9UT05JQworCWNyb3IJY3IwLGNyMCxjcjEKKwlibmUJY3IwLDk5ZgorCisJbWZscglyMTIJCQkvKiByMTIgc2F2ZXMgbHIgKi8KKyAgLmNmaV9yZWdpc3RlciBscixyMTIKKwltcglyMTAscjMJCQkvKiByMTAgc2F2ZXMgaWQgKi8KKwltcglyMTEscjQJCQkvKiByMTEgc2F2ZXMgdHAgKi8KKwlibAlWX0xPQ0FMX0ZVTkMoX19nZXRfZGF0YXBhZ2UpCS8qIGdldCBkYXRhIHBhZ2UgKi8KKwliZXEJY3IxLDUwZgkJCS8qIGlmIG1vbm90b25pYyAtPiBqdW1wIHRoZXJlICovCisKKwkvKgorCSAqIENMT0NLX1JFQUxUSU1FCisJICovCisKKwlibAlWX0xPQ0FMX0ZVTkMoX19kb19nZXRfeHNlYykJLyogZ2V0IHhzZWMgZnJvbSB0YiAmIGtlcm5lbCAqLworCisJbGlzICAgICByNywweDNiOWEJCS8qIHI3ID0gMTAwMDAwMDAwMCA9IE5TRUNfUEVSX1NFQyAqLworCW9yaSAgICAgcjcscjcsMHhjYTAwCisJcmxkaWNsICByNSxyNCw0NCwyMAkJLyogcjUgPSBzZWMgPSB4c2VjIC8gWFNFQ19QRVJfU0VDICovCisJcmxkaWNyICByNixyNSwyMCw0MwkJLyogcjYgPSBzZWMgKiBYU0VDX1BFUl9TRUMgKi8KKwlzdGQJcjUsVFNQQzY0X1RWX1NFQyhyMTEpCS8qIHN0b3JlIHNlYyBpbiB0diAqLworCXN1YmYJcjAscjYscjQJCS8qIHIwID0geHNlYyA9ICh4c2VjIC0gcjYpICovCisJbXVsbGQgICByMCxyMCxyNwkJLyogbnNlYyA9ICh4c2VjICogTlNFQ19QRVJfU0VDKSAvCisJCQkJCSAqIFhTRUNfUEVSX1NFQworCQkJCQkgKi8KKwlybGRpY2wgIHIwLHIwLDQ0LDIwCisJc3RkCXIwLFRTUEM2NF9UVl9OU0VDKHIxMSkJLyogc3RvcmUgbnNlYyBpbiB0cCAqLworCisJbXRscglyMTIKKwlsaQlyMywwCisJYmxyCisKKwkvKgorCSAqIENMT0NLX01PTk9UT05JQworCSAqLworCis1MDoJYmwJVl9MT0NBTF9GVU5DKF9fZG9fZ2V0X3hzZWMpCS8qIGdldCB4c2VjIGZyb20gdGIgJiBrZXJuZWwgKi8KKworCWxpcyAgICAgcjcsMHgzYjlhCQkvKiByNyA9IDEwMDAwMDAwMDAgPSBOU0VDX1BFUl9TRUMgKi8KKwlvcmkgICAgIHI3LHI3LDB4Y2EwMAorCXJsZGljbCAgcjUscjQsNDQsMjAJCS8qIHI1ID0gc2VjID0geHNlYyAvIFhTRUNfUEVSX1NFQyAqLworCXJsZGljciAgcjYscjUsMjAsNDMJCS8qIHI2ID0gc2VjICogWFNFQ19QRVJfU0VDICovCisJc3ViZglyMCxyNixyNAkJLyogcjAgPSB4c2VjID0gKHhzZWMgLSByNikgKi8KKwltdWxsZCAgIHIwLHIwLHI3CQkvKiBuc2VjID0gKHhzZWMgKiBOU0VDX1BFUl9TRUMpIC8KKwkJCQkJICogWFNFQ19QRVJfU0VDCisJCQkJCSAqLworCXJsZGljbCAgcjYscjAsNDQsMjAKKworCS8qIG5vdyB3ZSBtdXN0IGZpeHVwIHVzaW5nIHdhbGwgdG8gbW9ub3RvbmljLiBXZSBuZWVkIHRvIHNuYXBzaG90CisJICogdGhhdCB2YWx1ZSBhbmQgZG8gdGhlIGNvdW50ZXIgdHJpY2sgYWdhaW4uIEZvcnR1bmF0ZWx5LCB3ZSBzdGlsbAorCSAqIGhhdmUgdGhlIGNvdW50ZXIgdmFsdWUgaW4gcjggdGhhdCB3YXMgcmV0dXJuZWQgYnkgX19kb19nZXRfeHNlYy4KKwkgKiBBdCB0aGlzIHBvaW50LCByNSxyNiBjb250YWluIG91ciBzZWMvbnNlYyB2YWx1ZXMuCisJICogY2FuIGJlIHVzZWQKKwkgKi8KKworCWx3eglyNCxXVE9NX0NMT0NLX1NFQyhyOSkKKwlsd3oJcjcsV1RPTV9DTE9DS19OU0VDKHI5KQorCisJLyogV2Ugbm93IGhhdmUgb3VyIHJlc3VsdCBpbiByNCxyNy4gV2UgY3JlYXRlIGEgZmFrZSBkZXBlbmRlbmN5CisJICogb24gdGhhdCByZXN1bHQgYW5kIHJlLWNoZWNrIHRoZSBjb3VudGVyCisJICovCisJb3IJcjkscjQscjcKKwl4b3IJcjAscjkscjkKKwlhZGQJcjMscjMscjAKKwlsZAlyMCxDRkdfVEJfVVBEQVRFX0NPVU5UKHIzKQorICAgICAgICBjbXBsZCAgIGNyMCxyMCxyOAkJLyogY2hlY2sgaWYgdXBkYXRlZCAqLworCWJuZS0JNTBiCisKKwkvKiBDYWxjdWxhdGUgYW5kIHN0b3JlIHJlc3VsdC4gTm90ZSB0aGF0IHRoaXMgbWltbWljcyB0aGUgQyBjb2RlLAorCSAqIHdoaWNoIG1heSBjYXVzZSBmdW5ueSByZXN1bHRzIGlmIG5zZWMgZ29lcyBuZWdhdGl2ZS4uLiBpcyB0aGF0CisJICogcG9zc2libGUgYXQgYWxsID8KKwkgKi8KKwlhZGQJcjQscjQscjUKKwlhZGQJcjcscjcscjYKKwlsaXMJcjksTlNFQ19QRVJfU0VDQGgKKwlvcmkJcjkscjksTlNFQ19QRVJfU0VDQGwKKwljbXBsaQljcjAscjcscjkKKwlibHQJMWYKKwlzdWJmCXI3LHI5LHI3CisJYWRkaQlyNCxyNCwxCisxOglzdGQJcjQsVFNQQzY0X1RWX1NFQyhyMTEpCisJc3RkCXI3LFRTUEM2NF9UVl9OU0VDKHIxMSkKKworCW10bHIJcjEyCisJbGkJcjMsMAorCWJscgorCisJLyoKKwkgKiBzeXNjYWxsIGZhbGxiYWNrCisJICovCis5ODoKKwltdGxyCXIxMgorCW1yCXIzLHIxMAorCW1yCXI0LHIxMQorOTk6CisJbGkJcjAsX19OUl9jbG9ja19nZXR0aW1lCisJc2MKKwlibHIKKyAgLmNmaV9lbmRwcm9jCitWX0ZVTkNUSU9OX0VORChfX2tlcm5lbF9jbG9ja19nZXR0aW1lKQorCisKKy8qCisgKiBFeGFjdCBwcm90b3R5cGUgb2YgY2xvY2tfZ2V0cmVzKCkKKyAqCisgKiBpbnQgX19rZXJuZWxfY2xvY2tfZ2V0cmVzKGNsb2NraWRfdCBjbG9ja19pZCwgc3RydWN0IHRpbWVzcGVjICpyZXMpOworICoKKyAqLworVl9GVU5DVElPTl9CRUdJTihfX2tlcm5lbF9jbG9ja19nZXRyZXMpCisgIC5jZmlfc3RhcnRwcm9jCisJLyogQ2hlY2sgZm9yIHN1cHBvcnRlZCBjbG9jayBJRHMgKi8KKwljbXB3aQljcjAscjMsQ0xPQ0tfUkVBTFRJTUUKKwljbXB3aQljcjEscjMsQ0xPQ0tfTU9OT1RPTklDCisJY3JvcgljcjAsY3IwLGNyMQorCWJuZQljcjAsOTlmCisKKwlsaQlyMywwCisJY21wbGkJY3IwLHI0LDAKKwliZXFscgorCWxpcwlyNSxDTE9DS19SRUFMVElNRV9SRVNAaAorCW9yaQlyNSxyNSxDTE9DS19SRUFMVElNRV9SRVNAbAorCXN0ZAlyMyxUU1BDNjRfVFZfU0VDKHI0KQorCXN0ZAlyNSxUU1BDNjRfVFZfTlNFQyhyNCkKKwlibHIKKworCS8qCisJICogc3lzY2FsbCBmYWxsYmFjaworCSAqLworOTk6CisJbGkJcjAsX19OUl9jbG9ja19nZXRyZXMKKwlzYworCWJscgorICAuY2ZpX2VuZHByb2MKK1ZfRlVOQ1RJT05fRU5EKF9fa2VybmVsX2Nsb2NrX2dldHJlcykKKworCisvKgorICogVGhpcyBpcyB0aGUgY29yZSBvZiBnZXR0aW1lb2ZkYXkoKSwgaXQgcmV0dXJucyB0aGUgeHNlYworICogdmFsdWUgaW4gcjQgYW5kIGV4cGVjdHMgdGhlIGRhdGFwYWdlIHB0ciAobm9uIGNsb2JiZXJlZCkKKyAqIGluIHIzLiBjbG9iYmVycyByMCxyNCxyNSxyNixyNyxyOAorICogV2hlbiByZXR1cm5pbmcsIHI4IGNvbnRhaW5zIHRoZSBjb3VudGVyIHZhbHVlIHRoYXQgY2FuIGJlIHJldXNlZAorICovCitWX0ZVTkNUSU9OX0JFR0lOKF9fZG9fZ2V0X3hzZWMpCisgIC5jZmlfc3RhcnRwcm9jCisJLyogY2hlY2sgZm9yIHVwZGF0ZSBjb3VudCAmIGxvYWQgdmFsdWVzICovCisxOglsZAlyOCxDRkdfVEJfVVBEQVRFX0NPVU5UKHIzKQorCWFuZGkuCXIwLHI0LDEJCQkvKiBwZW5kaW5nIHVwZGF0ZSA/IGxvb3AgKi8KKwlibmUtCTFiCisJeG9yCXIwLHI0LHI0CQkvKiBjcmVhdGUgZGVwZW5kZW5jeSAqLworCWFkZAlyMyxyMyxyMAorCisJLyogR2V0IFRCICYgb2Zmc2V0IGl0ICovCisJbWZ0YglyNworCWxkCXI5LENGR19UQl9PUklHX1NUQU1QKHIzKQorCXN1YmYJcjcscjkscjcKKworCS8qIFNjYWxlIHJlc3VsdCAqLworCWxkCXI1LENGR19UQl9UT19YUyhyMykKKwltdWxoZHUJcjcscjcscjUKKworCS8qIEFkZCBzdGFtcCBzaW5jZSBlcG9jaCAqLworCWxkCXI2LENGR19TVEFNUF9YU0VDKHIzKQorCWFkZAlyNCxyNixyNworCisJeG9yCXIwLHI0LHI0CisJYWRkCXIzLHIzLHIwCisJbGQJcjAsQ0ZHX1RCX1VQREFURV9DT1VOVChyMykKKyAgICAgICAgY21wbGQgICBjcjAscjAscjgJCS8qIGNoZWNrIGlmIHVwZGF0ZWQgKi8KKwlibmUtCTFiCisJYmxyCisgIC5jZmlfZW5kcHJvYworVl9GVU5DVElPTl9FTkQoX19kb19nZXRfeHNlYykKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL3Zkc282NC9ub3RlLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc282NC9ub3RlLlMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvcHBjNjQva2VybmVsL3Zkc282NC9ub3RlLlMKcmVuYW1lIHRvIGFyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzY0L25vdGUuUwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzY0L3NpZ3RyYW1wLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc282NC9zaWd0cmFtcC5TCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3BwYzY0L2tlcm5lbC92ZHNvNjQvc2lndHJhbXAuUwpyZW5hbWUgdG8gYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvNjQvc2lndHJhbXAuUwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzY0L3Zkc282NC5sZHMuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzY0L3Zkc282NC5sZHMuUwpzaW1pbGFyaXR5IGluZGV4IDk3JQpyZW5hbWUgZnJvbSBhcmNoL3BwYzY0L2tlcm5lbC92ZHNvNjQvdmRzbzY0Lmxkcy5TCnJlbmFtZSB0byBhcmNoL3Bvd2VycGMva2VybmVsL3Zkc282NC92ZHNvNjQubGRzLlMKaW5kZXggOWNiMjgxOC4uNGJkZjIyNCAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzY0L3Zkc282NC5sZHMuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc282NC92ZHNvNjQubGRzLlMKQEAgLTEwMiw5ICsxMDIsMTIgQEAKIHsKICAgVkRTT19WRVJTSU9OX1NUUklORyB7CiAgICAgZ2xvYmFsOgotCV9fa2VybmVsX2RhdGFwYWdlX29mZnNldDsgLyogSGFzIHRvIGJlIHRoZXJlIGZvciB0aGUga2VybmVsIHRvIGZpbmQgaXQgKi8KKwlfX2tlcm5lbF9kYXRhcGFnZV9vZmZzZXQ7IC8qIEhhcyB0byBiZSB0aGVyZSBmb3IgdGhlIGtlcm5lbCB0byBmaW5kICovCiAJX19rZXJuZWxfZ2V0X3N5c2NhbGxfbWFwOwogICAgIAlfX2tlcm5lbF9nZXR0aW1lb2ZkYXk7CisJX19rZXJuZWxfY2xvY2tfZ2V0dGltZTsKKwlfX2tlcm5lbF9jbG9ja19nZXRyZXM7CisJX19rZXJuZWxfZ2V0X3RiZnJlcTsKIAlfX2tlcm5lbF9zeW5jX2RpY2FjaGU7CiAJX19rZXJuZWxfc3luY19kaWNhY2hlX3A1OwogCV9fa2VybmVsX3NpZ3RyYW1wX3J0NjQ7CmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC92ZHNvNjQvdmRzbzY0X3dyYXBwZXIuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzY0L3Zkc282NF93cmFwcGVyLlMKc2ltaWxhcml0eSBpbmRleCA3OSUKcmVuYW1lIGZyb20gYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzY0L3Zkc282NF93cmFwcGVyLlMKcmVuYW1lIHRvIGFyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzY0L3Zkc282NF93cmFwcGVyLlMKaW5kZXggNzcxYzI3NC4uMDUyOWNiOSAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzY0L3Zkc282NF93cmFwcGVyLlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvNjQvdmRzbzY0X3dyYXBwZXIuUwpAQCAtNiw3ICs2LDcgQEAKIAkuZ2xvYmwgdmRzbzY0X3N0YXJ0LCB2ZHNvNjRfZW5kCiAJLmJhbGlnbiBQQUdFX1NJWkUKIHZkc282NF9zdGFydDoKLQkuaW5jYmluICJhcmNoL3BwYzY0L2tlcm5lbC92ZHNvNjQvdmRzbzY0LnNvIgorCS5pbmNiaW4gImFyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzY0L3Zkc282NC5zbyIKIAkuYmFsaWduIFBBR0VfU0laRQogdmRzbzY0X2VuZDoKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92aW8uYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmlvLmMKaW5kZXggOTcwODJhNC4uNzFhNmFkZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92aW8uYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zpby5jCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSA8YXNtL2lvbW11Lmg+CiAjaW5jbHVkZSA8YXNtL2RtYS5oPgogI2luY2x1ZGUgPGFzbS92aW8uaD4KKyNpbmNsdWRlIDxhc20vcHJvbS5oPgogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHZpb19kZXZpY2VfaWQgKnZpb19tYXRjaF9kZXZpY2UoCiAJCWNvbnN0IHN0cnVjdCB2aW9fZGV2aWNlX2lkICosIGNvbnN0IHN0cnVjdCB2aW9fZGV2ICopOwpAQCAtMjY1LDcgKzI2NiwzMyBAQAogCXJldHVybiAoaWRzICE9IE5VTEwpICYmICh2aW9fbWF0Y2hfZGV2aWNlKGlkcywgdmlvX2RldikgIT0gTlVMTCk7CiB9CiAKK3N0YXRpYyBpbnQgdmlvX2hvdHBsdWcoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICoqZW52cCwgaW50IG51bV9lbnZwLAorCQkJY2hhciAqYnVmZmVyLCBpbnQgYnVmZmVyX3NpemUpCit7CisJY29uc3Qgc3RydWN0IHZpb19kZXYgKnZpb19kZXYgPSB0b192aW9fZGV2KGRldik7CisJY2hhciAqY3A7CisJaW50IGxlbmd0aDsKKworCWlmICghbnVtX2VudnApCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKCF2aW9fZGV2LT5kZXYucGxhdGZvcm1fZGF0YSkKKwkJcmV0dXJuIC1FTk9ERVY7CisJY3AgPSAoY2hhciAqKWdldF9wcm9wZXJ0eSh2aW9fZGV2LT5kZXYucGxhdGZvcm1fZGF0YSwgImNvbXBhdGlibGUiLCAmbGVuZ3RoKTsKKwlpZiAoIWNwKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWVudnBbMF0gPSBidWZmZXI7CisJbGVuZ3RoID0gc2NucHJpbnRmKGJ1ZmZlciwgYnVmZmVyX3NpemUsICJNT0RBTElBUz12aW86VCVzUyVzIiwKKwkJCQl2aW9fZGV2LT50eXBlLCBjcCk7CisJaWYgKGJ1ZmZlcl9zaXplIC0gbGVuZ3RoIDw9IDApCisJCXJldHVybiAtRU5PTUVNOworCWVudnBbMV0gPSBOVUxMOworCXJldHVybiAwOworfQorCiBzdHJ1Y3QgYnVzX3R5cGUgdmlvX2J1c190eXBlID0gewogCS5uYW1lID0gInZpbyIsCisJLmhvdHBsdWcgPSB2aW9faG90cGx1ZywKIAkubWF0Y2ggPSB2aW9fYnVzX21hdGNoLAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9saWIvYml0b3BzLmMgYi9hcmNoL3Bvd2VycGMvbGliL2JpdG9wcy5jCmluZGV4IGI2N2NlMzAuLmY2OGFkNzEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9saWIvYml0b3BzLmMKKysrIGIvYXJjaC9wb3dlcnBjL2xpYi9iaXRvcHMuYwpAQCAtNDEsNyArNDEsNyBAQAogCXRtcCA9ICpwOwogCiBmb3VuZF9maXJzdDoKLQl0bXAgJj0gKH4wVUwgPj4gKDY0IC0gc2l6ZSkpOworCXRtcCAmPSAofjBVTCA+PiAoQklUU19QRVJfTE9ORyAtIHNpemUpKTsKIAlpZiAodG1wID09IDBVTCkJCS8qIEFyZSBhbnkgYml0cyBzZXQ/ICovCiAJCXJldHVybiByZXN1bHQgKyBzaXplOwkvKiBOb3BlLiAqLwogZm91bmRfbWlkZGxlOgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL2hhc2hfdXRpbHNfNjQuYyBiL2FyY2gvcG93ZXJwYy9tbS9oYXNoX3V0aWxzXzY0LmMKaW5kZXggMjJlNDc0OC4uNzA2ZThhNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL2hhc2hfdXRpbHNfNjQuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vaGFzaF91dGlsc182NC5jCkBAIC04NCwxMCArODQsMTEgQEAKIGV4dGVybiB1bnNpZ25lZCBsb25nIGRhcnRfdGFibGViYXNlOwogI2VuZGlmIC8qIENPTkZJR19VM19EQVJUICovCiAKK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9TRFIxOworc3RydWN0IG1tdV9wc2l6ZV9kZWYgbW11X3BzaXplX2RlZnNbTU1VX1BBR0VfQ09VTlRdOworCiBocHRlX3QgKmh0YWJfYWRkcmVzczsKIHVuc2lnbmVkIGxvbmcgaHRhYl9oYXNoX21hc2s7Ci11bnNpZ25lZCBsb25nIF9TRFIxOwotc3RydWN0IG1tdV9wc2l6ZV9kZWYgbW11X3BzaXplX2RlZnNbTU1VX1BBR0VfQ09VTlRdOwogaW50IG1tdV9saW5lYXJfcHNpemUgPSBNTVVfUEFHRV80SzsKIGludCBtbXVfdmlydHVhbF9wc2l6ZSA9IE1NVV9QQUdFXzRLOwogI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0UKQEAgLTE2NSw3ICsxNjYsNyBAQAogCQkgKiBub3JtYWwgaW5zZXJ0IGNhbGxiYWNrIGhlcmUuCiAJCSAqLwogI2lmZGVmIENPTkZJR19QUENfSVNFUklFUwotCQlpZiAoc3lzdGVtY2ZnLT5wbGF0Zm9ybSA9PSBQTEFURk9STV9JU0VSSUVTX0xQQVIpCisJCWlmIChfbWFjaGluZSA9PSBQTEFURk9STV9JU0VSSUVTX0xQQVIpCiAJCQlyZXQgPSBpU2VyaWVzX2hwdGVfaW5zZXJ0KGhwdGVnLCB2YSwKIAkJCQkJCSAgdmlydF90b19hYnMocGFkZHIpLAogCQkJCQkJICB0bXBfbW9kZSwKQEAgLTE3NCw3ICsxNzUsNyBAQAogCQllbHNlCiAjZW5kaWYKICNpZmRlZiBDT05GSUdfUFBDX1BTRVJJRVMKLQkJaWYgKHN5c3RlbWNmZy0+cGxhdGZvcm0gJiBQTEFURk9STV9MUEFSKQorCQlpZiAoX21hY2hpbmUgJiBQTEFURk9STV9MUEFSKQogCQkJcmV0ID0gcFNlcmllc19scGFyX2hwdGVfaW5zZXJ0KGhwdGVnLCB2YSwKIAkJCQkJCSAgICAgICB2aXJ0X3RvX2FicyhwYWRkciksCiAJCQkJCQkgICAgICAgdG1wX21vZGUsCkBAIC0yOTMsNyArMjk0LDcgQEAKIAkgKiBOb3QgaW4gdGhlIGRldmljZS10cmVlLCBsZXQncyBmYWxsYmFjayBvbiBrbm93biBzaXplCiAJICogbGlzdCBmb3IgMTZNIGNhcGFibGUgR1AgJiBHUgogCSAqLwotCWlmICgoc3lzdGVtY2ZnLT5wbGF0Zm9ybSAhPSBQTEFURk9STV9JU0VSSUVTX0xQQVIpICYmCisJaWYgKChfbWFjaGluZSAhPSBQTEFURk9STV9JU0VSSUVTX0xQQVIpICYmCiAJICAgIGNwdV9oYXNfZmVhdHVyZShDUFVfRlRSXzE2TV9QQUdFKSkKIAkJbWVtY3B5KG1tdV9wc2l6ZV9kZWZzLCBtbXVfcHNpemVfZGVmYXVsdHNfZ3AsCiAJCSAgICAgICBzaXplb2YobW11X3BzaXplX2RlZmF1bHRzX2dwKSk7CkBAIC0zNjQsNyArMzY1LDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IGh0YWJfZ2V0X3RhYmxlX3NpemUodm9pZCkKIHsKLQl1bnNpZ25lZCBsb25nIHJuZF9tZW1fc2l6ZSwgcHRlZ19jb3VudDsKKwl1bnNpZ25lZCBsb25nIG1lbV9zaXplLCBybmRfbWVtX3NpemUsIHB0ZWdfY291bnQ7CiAKIAkvKiBJZiBoYXNoIHNpemUgaXNuJ3QgYWxyZWFkeSBwcm92aWRlZCBieSB0aGUgcGxhdGZvcm0sIHdlIHRyeSB0bwogCSAqIHJldHJlaXZlIGl0IGZyb20gdGhlIGRldmljZS10cmVlLiBJZiBpdCdzIG5vdCB0aGVyZSBuZWl0aGVyLCB3ZQpAQCAtMzc2LDggKzM3Nyw5IEBACiAJCXJldHVybiAxVUwgPDwgcHBjNjRfcGZ0X3NpemU7CiAKIAkvKiByb3VuZCBtZW1fc2l6ZSB1cCB0byBuZXh0IHBvd2VyIG9mIDIgKi8KLQlybmRfbWVtX3NpemUgPSAxVUwgPDwgX19pbG9nMihzeXN0ZW1jZmctPnBoeXNpY2FsTWVtb3J5U2l6ZSk7Ci0JaWYgKHJuZF9tZW1fc2l6ZSA8IHN5c3RlbWNmZy0+cGh5c2ljYWxNZW1vcnlTaXplKQorCW1lbV9zaXplID0gbG1iX3BoeXNfbWVtX3NpemUoKTsKKwlybmRfbWVtX3NpemUgPSAxVUwgPDwgX19pbG9nMihtZW1fc2l6ZSk7CisJaWYgKHJuZF9tZW1fc2l6ZSA8IG1lbV9zaXplKQogCQlybmRfbWVtX3NpemUgPDw9IDE7CiAKIAkvKiAjIHBhZ2VzIC8gMiAqLwpAQCAtMzg2LDYgKzM4OCwxNSBAQAogCXJldHVybiBwdGVnX2NvdW50IDw8IDc7CiB9CiAKKyNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFBMVUcKK3ZvaWQgY3JlYXRlX3NlY3Rpb25fbWFwcGluZyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwkJQlVHX09OKGh0YWJfYm9sdF9tYXBwaW5nKHN0YXJ0LCBlbmQsIHN0YXJ0LAorCQkJX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9ESVJUWSB8IF9QQUdFX0NPSEVSRU5UIHwgUFBfUldYWCwKKwkJCW1tdV9saW5lYXJfcHNpemUpKTsKK30KKyNlbmRpZiAvKiBDT05GSUdfTUVNT1JZX0hPVFBMVUcgKi8KKwogdm9pZCBfX2luaXQgaHRhYl9pbml0aWFsaXplKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyB0YWJsZSwgaHRhYl9zaXplX2J5dGVzOwpAQCAtNDEwLDcgKzQyMSw3IEBACiAKIAlodGFiX2hhc2hfbWFzayA9IHB0ZWdfY291bnQgLSAxOwogCi0JaWYgKHN5c3RlbWNmZy0+cGxhdGZvcm0gJiBQTEFURk9STV9MUEFSKSB7CisJaWYgKHBsYXRmb3JtX2lzX2xwYXIoKSkgewogCQkvKiBVc2luZyBhIGh5cGVydmlzb3Igd2hpY2ggb3ducyB0aGUgaHRhYiAqLwogCQlodGFiX2FkZHJlc3MgPSBOVUxMOwogCQlfU0RSMSA9IDA7IApAQCAtNDMxLDYgKzQ0Miw5IEBACiAKIAkJLyogSW5pdGlhbGl6ZSB0aGUgSFBUIHdpdGggbm8gZW50cmllcyAqLwogCQltZW1zZXQoKHZvaWQgKil0YWJsZSwgMCwgaHRhYl9zaXplX2J5dGVzKTsKKworCQkvKiBTZXQgU0RSMSAqLworCQltdHNwcihTUFJOX1NEUjEsIF9TRFIxKTsKIAl9CiAKIAltb2RlX3J3ID0gX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9ESVJUWSB8IF9QQUdFX0NPSEVSRU5UIHwgUFBfUldYWDsKQEAgLTUwMCw2ICs1MTQsMTIgQEAKICN1bmRlZiBLQgogI3VuZGVmIE1CCiAKK3ZvaWQgX19pbml0IGh0YWJfaW5pdGlhbGl6ZV9zZWNvbmRhcnkodm9pZCkKK3sKKwlpZiAoIXBsYXRmb3JtX2lzX2xwYXIoKSkKKwkJbXRzcHIoU1BSTl9TRFIxLCBfU0RSMSk7Cit9CisKIC8qCiAgKiBDYWxsZWQgYnkgYXNtIGhhc2h0YWJsZS5TIGZvciBkb2luZyBsYXp5IGljYWNoZSBmbHVzaAogICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vaW5pdF8zMi5jIGIvYXJjaC9wb3dlcnBjL21tL2luaXRfMzIuYwppbmRleCA0NjEyYTc5Li43ZDRiOGI1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vaW5pdF8zMi5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9pbml0XzMyLmMKQEAgLTg0LDkgKzg0LDYgQEAKIC8qIFhYWCBzaG91bGQgYmUgaW4gY3VycmVudC5oICAtLSBwYXVsdXMgKi8KIGV4dGVybiBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnJlbnRfc2V0W05SX0NQVVNdOwogCi1jaGFyICprbGltaXQgPSBfZW5kOwotc3RydWN0IGRldmljZV9ub2RlICptZW1vcnlfbm9kZTsKLQogZXh0ZXJuIGludCBpbml0X2Jvb3RtZW1fZG9uZTsKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9pbml0XzY0LmMgYi9hcmNoL3Bvd2VycGMvbW0vaW5pdF82NC5jCmluZGV4IGNlOTc0YzguLjExMzRmNzAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9pbml0XzY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL2luaXRfNjQuYwpAQCAtMjAsNiArMjAsOCBAQAogICoKICAqLwogCisjdW5kZWYgREVCVUcKKwogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CkBAIC02NCw2ICs2NiwxMiBAQAogI2luY2x1ZGUgPGFzbS92ZHNvLmg+CiAjaW5jbHVkZSA8YXNtL2ltYWxsb2MuaD4KIAorI2lmZGVmIERFQlVHCisjZGVmaW5lIERCRyhmbXQuLi4pIHByaW50ayhmbXQpCisjZWxzZQorI2RlZmluZSBEQkcoZm10Li4uKQorI2VuZGlmCisKICNpZiBQR1RBQkxFX1JBTkdFID4gVVNFUl9WU0lEX1JBTkdFCiAjd2FybmluZyBMaW1pdGVkIHVzZXIgVlNJRCByYW5nZSBtZWFucyBwYWdldGFibGUgc3BhY2UgaXMgd2FzdGVkCiAjZW5kaWYKQEAgLTcyLDggKzgwLDYgQEAKICN3YXJuaW5nIFRBU0tfU0laRSBpcyBzbWFsbGVyIHRoYW4gaXQgbmVlZHMgdG8gYmUuCiAjZW5kaWYKIAotdW5zaWduZWQgbG9uZyBrbGltaXQgPSAodW5zaWduZWQgbG9uZylfZW5kOwotCiAvKiBtYXggYW1vdW50IG9mIFJBTSB0byB1c2UgKi8KIHVuc2lnbmVkIGxvbmcgX19tYXhfbWVtb3J5OwogCkBAIC0xODgsMTQgKzE5NCwxNCBAQAogfQogCiAjaWZkZWYgQ09ORklHX1BQQ182NEtfUEFHRVMKLXN0YXRpYyBjb25zdCBpbnQgcGd0YWJsZV9jYWNoZV9zaXplWzJdID0gewotCVBURV9UQUJMRV9TSVpFLCBQR0RfVEFCTEVfU0laRQorc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBwZ3RhYmxlX2NhY2hlX3NpemVbM10gPSB7CisJUFRFX1RBQkxFX1NJWkUsIFBNRF9UQUJMRV9TSVpFLCBQR0RfVEFCTEVfU0laRQogfTsKIHN0YXRpYyBjb25zdCBjaGFyICpwZ3RhYmxlX2NhY2hlX25hbWVbQVJSQVlfU0laRShwZ3RhYmxlX2NhY2hlX3NpemUpXSA9IHsKLQkicHRlX3BtZF9jYWNoZSIsICJwZ2RfY2FjaGUiLAorCSJwdGVfcG1kX2NhY2hlIiwgInBtZF9jYWNoZSIsICJwZ2RfY2FjaGUiLAogfTsKICNlbHNlCi1zdGF0aWMgY29uc3QgaW50IHBndGFibGVfY2FjaGVfc2l6ZVsyXSA9IHsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgcGd0YWJsZV9jYWNoZV9zaXplWzJdID0gewogCVBURV9UQUJMRV9TSVpFLCBQTURfVEFCTEVfU0laRQogfTsKIHN0YXRpYyBjb25zdCBjaGFyICpwZ3RhYmxlX2NhY2hlX25hbWVbQVJSQVlfU0laRShwZ3RhYmxlX2NhY2hlX3NpemUpXSA9IHsKQEAgLTIxMyw2ICsyMTksOCBAQAogCQlpbnQgc2l6ZSA9IHBndGFibGVfY2FjaGVfc2l6ZVtpXTsKIAkJY29uc3QgY2hhciAqbmFtZSA9IHBndGFibGVfY2FjaGVfbmFtZVtpXTsKIAorCQlEQkcoIkFsbG9jYXRpbmcgcGFnZSB0YWJsZSBjYWNoZSAlcyAoIyVkKSAiCisJCSAgICAiZm9yIHNpemU6ICUwOHguLi5cbiIsIG5hbWUsIGksIHNpemUpOwogCQlwZ3RhYmxlX2NhY2hlW2ldID0ga21lbV9jYWNoZV9jcmVhdGUobmFtZSwKIAkJCQkJCSAgICAgc2l6ZSwgc2l6ZSwKIAkJCQkJCSAgICAgU0xBQl9IV0NBQ0hFX0FMSUdOIHwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9tZW0uYyBiL2FyY2gvcG93ZXJwYy9tbS9tZW0uYwppbmRleCA2ZjU1ZWZkLi5lMmM5NWZjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vbWVtLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL21lbS5jCkBAIC00Niw5ICs0Niw3IEBACiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KICNpbmNsdWRlIDxhc20vbG1iLmg+CiAjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+Ci0jaWZkZWYgQ09ORklHX1BQQzY0CiAjaW5jbHVkZSA8YXNtL3Zkc28uaD4KLSNlbmRpZgogCiAjaW5jbHVkZSAibW11X2RlY2wuaCIKIApAQCAtMTEwLDYgKzEwOCw3IEBACiB2b2lkIG9ubGluZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQogewogCUNsZWFyUGFnZVJlc2VydmVkKHBhZ2UpOworCXNldF9wYWdlX2NvdW50KHBhZ2UsIDApOwogCWZyZWVfY29sZF9wYWdlKHBhZ2UpOwogCXRvdGFscmFtX3BhZ2VzKys7CiAJbnVtX3BoeXNwYWdlcysrOwpAQCAtMTI3LDYgKzEyNiw5IEBACiAJdW5zaWduZWQgbG9uZyBzdGFydF9wZm4gPSBzdGFydCA+PiBQQUdFX1NISUZUOwogCXVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBzaXplID4+IFBBR0VfU0hJRlQ7CiAKKwlzdGFydCArPSBLRVJORUxCQVNFOworCWNyZWF0ZV9zZWN0aW9uX21hcHBpbmcoc3RhcnQsIHN0YXJ0ICsgc2l6ZSk7CisKIAkvKiB0aGlzIHNob3VsZCB3b3JrIGZvciBtb3N0IG5vbi1oaWdobWVtIHBsYXRmb3JtcyAqLwogCXpvbmUgPSBwZ2RhdGEtPm5vZGVfem9uZXM7CiAKQEAgLTM5MywxMCArMzk1LDggQEAKIAogCW1lbV9pbml0X2RvbmUgPSAxOwogCi0jaWZkZWYgQ09ORklHX1BQQzY0CiAJLyogSW5pdGlhbGl6ZSB0aGUgdkRTTyAqLwogCXZkc29faW5pdCgpOwotI2VuZGlmCiB9CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vbnVtYS5jIGIvYXJjaC9wb3dlcnBjL21tL251bWEuYwppbmRleCBkYTA5YmEwLi5iZDJjZjEzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vbnVtYS5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9udW1hLmMKQEAgLTE3LDkgKzE3LDggQEAKICNpbmNsdWRlIDxsaW51eC9ub2RlbWFzay5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CisjaW5jbHVkZSA8YXNtL3NwYXJzZW1lbS5oPgogI2luY2x1ZGUgPGFzbS9sbWIuaD4KLSNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgotI2luY2x1ZGUgPGFzbS9hYnNfYWRkci5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vc21wLmg+CiAKQEAgLTI4LDQ1ICsyNywxMTMgQEAKIHN0YXRpYyBpbnQgbnVtYV9kZWJ1ZzsKICNkZWZpbmUgZGJnKGFyZ3MuLi4pIGlmIChudW1hX2RlYnVnKSB7IHByaW50ayhLRVJOX0lORk8gYXJncyk7IH0KIAotI2lmZGVmIERFQlVHX05VTUEKLSNkZWZpbmUgQVJSQVlfSU5JVElBTElTRVIgLTEKLSNlbHNlCi0jZGVmaW5lIEFSUkFZX0lOSVRJQUxJU0VSIDAKLSNlbmRpZgotCi1pbnQgbnVtYV9jcHVfbG9va3VwX3RhYmxlW05SX0NQVVNdID0geyBbIDAgLi4uIChOUl9DUFVTIC0gMSldID0KLQlBUlJBWV9JTklUSUFMSVNFUn07Ci1jaGFyICpudW1hX21lbW9yeV9sb29rdXBfdGFibGU7CitpbnQgbnVtYV9jcHVfbG9va3VwX3RhYmxlW05SX0NQVVNdOwogY3B1bWFza190IG51bWFfY3B1bWFza19sb29rdXBfdGFibGVbTUFYX05VTU5PREVTXTsKLWludCBucl9jcHVzX2luX25vZGVbTUFYX05VTU5PREVTXSA9IHsgWzAgLi4uIChNQVhfTlVNTk9ERVMgLTEpXSA9IDB9OwotCiBzdHJ1Y3QgcGdsaXN0X2RhdGEgKm5vZGVfZGF0YVtNQVhfTlVNTk9ERVNdOwotYm9vdG1lbV9kYXRhX3QgX19pbml0ZGF0YSBwbGF0X25vZGVfYmRhdGFbTUFYX05VTU5PREVTXTsKKworRVhQT1JUX1NZTUJPTChudW1hX2NwdV9sb29rdXBfdGFibGUpOworRVhQT1JUX1NZTUJPTChudW1hX2NwdW1hc2tfbG9va3VwX3RhYmxlKTsKK0VYUE9SVF9TWU1CT0wobm9kZV9kYXRhKTsKKworc3RhdGljIGJvb3RtZW1fZGF0YV90IF9faW5pdGRhdGEgcGxhdF9ub2RlX2JkYXRhW01BWF9OVU1OT0RFU107CiBzdGF0aWMgaW50IG1pbl9jb21tb25fZGVwdGg7CiAKIC8qCi0gKiBXZSBuZWVkIHNvbWV3aGVyZSB0byBzdG9yZSBzdGFydC9zcGFuIGZvciBlYWNoIG5vZGUgdW50aWwgd2UgaGF2ZQorICogV2UgbmVlZCBzb21ld2hlcmUgdG8gc3RvcmUgc3RhcnQvZW5kL25vZGUgZm9yIGVhY2ggcmVnaW9uIHVudGlsIHdlIGhhdmUKICAqIGFsbG9jYXRlZCB0aGUgcmVhbCBub2RlX2RhdGEgc3RydWN0dXJlcy4KICAqLworI2RlZmluZSBNQVhfUkVHSU9OUwkoTUFYX0xNQl9SRUdJT05TKjIpCiBzdGF0aWMgc3RydWN0IHsKLQl1bnNpZ25lZCBsb25nIG5vZGVfc3RhcnRfcGZuOwotCXVuc2lnbmVkIGxvbmcgbm9kZV9lbmRfcGZuOwotCXVuc2lnbmVkIGxvbmcgbm9kZV9wcmVzZW50X3BhZ2VzOwotfSBpbml0X25vZGVfZGF0YVtNQVhfTlVNTk9ERVNdIF9faW5pdGRhdGE7CisJdW5zaWduZWQgbG9uZyBzdGFydF9wZm47CisJdW5zaWduZWQgbG9uZyBlbmRfcGZuOworCWludCBuaWQ7Cit9IGluaXRfbm9kZV9kYXRhW01BWF9SRUdJT05TXSBfX2luaXRkYXRhOwogCi1FWFBPUlRfU1lNQk9MKG5vZGVfZGF0YSk7Ci1FWFBPUlRfU1lNQk9MKG51bWFfY3B1X2xvb2t1cF90YWJsZSk7Ci1FWFBPUlRfU1lNQk9MKG51bWFfbWVtb3J5X2xvb2t1cF90YWJsZSk7Ci1FWFBPUlRfU1lNQk9MKG51bWFfY3B1bWFza19sb29rdXBfdGFibGUpOwotRVhQT1JUX1NZTUJPTChucl9jcHVzX2luX25vZGUpOworaW50IF9faW5pdCBlYXJseV9wZm5fdG9fbmlkKHVuc2lnbmVkIGxvbmcgcGZuKQoreworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaW5pdF9ub2RlX2RhdGFbaV0uZW5kX3BmbjsgaSsrKSB7CisJCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuID0gaW5pdF9ub2RlX2RhdGFbaV0uc3RhcnRfcGZuOworCQl1bnNpZ25lZCBsb25nIGVuZF9wZm4gPSBpbml0X25vZGVfZGF0YVtpXS5lbmRfcGZuOworCisJCWlmICgoc3RhcnRfcGZuIDw9IHBmbikgJiYgKHBmbiA8IGVuZF9wZm4pKQorCQkJcmV0dXJuIGluaXRfbm9kZV9kYXRhW2ldLm5pZDsKKwl9CisKKwlyZXR1cm4gLTE7Cit9CisKK3ZvaWQgX19pbml0IGFkZF9yZWdpb24odW5zaWduZWQgaW50IG5pZCwgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sCisJCSAgICAgICB1bnNpZ25lZCBsb25nIHBhZ2VzKQoreworCXVuc2lnbmVkIGludCBpOworCisJZGJnKCJhZGRfcmVnaW9uIG5pZCAlZCBzdGFydF9wZm4gMHglbHggcGFnZXMgMHglbHhcbiIsCisJCW5pZCwgc3RhcnRfcGZuLCBwYWdlcyk7CisKKwlmb3IgKGkgPSAwOyBpbml0X25vZGVfZGF0YVtpXS5lbmRfcGZuOyBpKyspIHsKKwkJaWYgKGluaXRfbm9kZV9kYXRhW2ldLm5pZCAhPSBuaWQpCisJCQljb250aW51ZTsKKwkJaWYgKGluaXRfbm9kZV9kYXRhW2ldLmVuZF9wZm4gPT0gc3RhcnRfcGZuKSB7CisJCQlpbml0X25vZGVfZGF0YVtpXS5lbmRfcGZuICs9IHBhZ2VzOworCQkJcmV0dXJuOworCQl9CisJCWlmIChpbml0X25vZGVfZGF0YVtpXS5zdGFydF9wZm4gPT0gKHN0YXJ0X3BmbiArIHBhZ2VzKSkgeworCQkJaW5pdF9ub2RlX2RhdGFbaV0uc3RhcnRfcGZuIC09IHBhZ2VzOworCQkJcmV0dXJuOworCQl9CisJfQorCisJLyoKKwkgKiBMZWF2ZSBsYXN0IGVudHJ5IE5VTEwgc28gd2UgZG9udCBpdGVyYXRlIG9mZiB0aGUgZW5kICh3ZSB1c2UKKwkgKiBlbnRyeS5lbmRfcGZuIHRvIHRlcm1pbmF0ZSB0aGUgd2FsaykuCisJICovCisJaWYgKGkgPj0gKE1BWF9SRUdJT05TIC0gMSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJXQVJOSU5HOiB0b28gbWFueSBtZW1vcnkgcmVnaW9ucyBpbiAiCisJCQkJIm51bWEgY29kZSwgdHJ1bmNhdGluZ1xuIik7CisJCXJldHVybjsKKwl9CisKKwlpbml0X25vZGVfZGF0YVtpXS5zdGFydF9wZm4gPSBzdGFydF9wZm47CisJaW5pdF9ub2RlX2RhdGFbaV0uZW5kX3BmbiA9IHN0YXJ0X3BmbiArIHBhZ2VzOworCWluaXRfbm9kZV9kYXRhW2ldLm5pZCA9IG5pZDsKK30KKworLyogV2UgYXNzdW1lIGluaXRfbm9kZV9kYXRhIGhhcyBubyBvdmVybGFwcGluZyByZWdpb25zICovCit2b2lkIF9faW5pdCBnZXRfcmVnaW9uKHVuc2lnbmVkIGludCBuaWQsIHVuc2lnbmVkIGxvbmcgKnN0YXJ0X3BmbiwKKwkJICAgICAgIHVuc2lnbmVkIGxvbmcgKmVuZF9wZm4sIHVuc2lnbmVkIGxvbmcgKnBhZ2VzX3ByZXNlbnQpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwkqc3RhcnRfcGZuID0gLTFVTDsKKwkqZW5kX3BmbiA9ICpwYWdlc19wcmVzZW50ID0gMDsKKworCWZvciAoaSA9IDA7IGluaXRfbm9kZV9kYXRhW2ldLmVuZF9wZm47IGkrKykgeworCQlpZiAoaW5pdF9ub2RlX2RhdGFbaV0ubmlkICE9IG5pZCkKKwkJCWNvbnRpbnVlOworCisJCSpwYWdlc19wcmVzZW50ICs9IGluaXRfbm9kZV9kYXRhW2ldLmVuZF9wZm4gLQorCQkJaW5pdF9ub2RlX2RhdGFbaV0uc3RhcnRfcGZuOworCisJCWlmIChpbml0X25vZGVfZGF0YVtpXS5zdGFydF9wZm4gPCAqc3RhcnRfcGZuKQorCQkJKnN0YXJ0X3BmbiA9IGluaXRfbm9kZV9kYXRhW2ldLnN0YXJ0X3BmbjsKKworCQlpZiAoaW5pdF9ub2RlX2RhdGFbaV0uZW5kX3BmbiA+ICplbmRfcGZuKQorCQkJKmVuZF9wZm4gPSBpbml0X25vZGVfZGF0YVtpXS5lbmRfcGZuOworCX0KKworCS8qIFdlIGRpZG50IGZpbmQgYSBtYXRjaGluZyByZWdpb24sIHJldHVybiBzdGFydC9lbmQgYXMgMCAqLworCWlmICgqc3RhcnRfcGZuID09IC0xVUwpCisJCXN0YXJ0X3BmbiA9IDA7Cit9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXBfY3B1X3RvX25vZGUoaW50IGNwdSwgaW50IG5vZGUpCiB7CiAJbnVtYV9jcHVfbG9va3VwX3RhYmxlW2NwdV0gPSBub2RlOwotCWlmICghKGNwdV9pc3NldChjcHUsIG51bWFfY3B1bWFza19sb29rdXBfdGFibGVbbm9kZV0pKSkgeworCisJaWYgKCEoY3B1X2lzc2V0KGNwdSwgbnVtYV9jcHVtYXNrX2xvb2t1cF90YWJsZVtub2RlXSkpKQogCQljcHVfc2V0KGNwdSwgbnVtYV9jcHVtYXNrX2xvb2t1cF90YWJsZVtub2RlXSk7Ci0JCW5yX2NwdXNfaW5fbm9kZVtub2RlXSsrOwotCX0KIH0KIAogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQpAQCAtNzgsNyArMTQ1LDYgQEAKIAogCWlmIChjcHVfaXNzZXQoY3B1LCBudW1hX2NwdW1hc2tfbG9va3VwX3RhYmxlW25vZGVdKSkgewogCQljcHVfY2xlYXIoY3B1LCBudW1hX2NwdW1hc2tfbG9va3VwX3RhYmxlW25vZGVdKTsKLQkJbnJfY3B1c19pbl9ub2RlW25vZGVdLS07CiAJfSBlbHNlIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJXQVJOSU5HOiBjcHUgJWx1IG5vdCBmb3VuZCBpbiBub2RlICVkXG4iLAogCQkgICAgICAgY3B1LCBub2RlKTsKQEAgLTg2LDcgKzE1Miw3IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX0hPVFBMVUdfQ1BVICovCiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX25vZGUgKiBfX2RldmluaXQgZmluZF9jcHVfbm9kZSh1bnNpZ25lZCBpbnQgY3B1KQorc3RhdGljIHN0cnVjdCBkZXZpY2Vfbm9kZSAqZmluZF9jcHVfbm9kZSh1bnNpZ25lZCBpbnQgY3B1KQogewogCXVuc2lnbmVkIGludCBod19jcHVpZCA9IGdldF9oYXJkX3NtcF9wcm9jZXNzb3JfaWQoY3B1KTsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNwdV9ub2RlID0gTlVMTDsKQEAgLTIxMyw3ICsyNzksNyBAQAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgcmVhZF9uX2NlbGxzKGludCBuLCB1bnNpZ25lZCBpbnQgKipidWYpCitzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgcmVhZF9uX2NlbGxzKGludCBuLCB1bnNpZ25lZCBpbnQgKipidWYpCiB7CiAJdW5zaWduZWQgbG9uZyByZXN1bHQgPSAwOwogCkBAIC0yOTUsNyArMzYxLDggQEAKICAqIG9yIHplcm8uIElmIHRoZSByZXR1cm5lZCB2YWx1ZSBvZiBzaXplIGlzIDAgdGhlIHJlZ2lvbiBzaG91bGQgYmUKICAqIGRpc2NhcmRlZCBhcyBpdCBsaWVzIHdob2x5IGFib3ZlIHRoZSBtZW1vcnkgbGltaXQuCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCBudW1hX2VuZm9yY2VfbWVtb3J5X2xpbWl0KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCBudW1hX2VuZm9yY2VfbWVtb3J5X2xpbWl0KHVuc2lnbmVkIGxvbmcgc3RhcnQsCisJCQkJCQkgICAgICB1bnNpZ25lZCBsb25nIHNpemUpCiB7CiAJLyoKIAkgKiBXZSB1c2UgbG1iX2VuZF9vZl9EUkFNKCkgaW4gaGVyZSBpbnN0ZWFkIG9mIG1lbW9yeV9saW1pdCBiZWNhdXNlCkBAIC0zMjAsOCArMzg3LDcgQEAKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNwdSA9IE5VTEw7CiAJc3RydWN0IGRldmljZV9ub2RlICptZW1vcnkgPSBOVUxMOwogCWludCBhZGRyX2NlbGxzLCBzaXplX2NlbGxzOwotCWludCBtYXhfZG9tYWluID0gMDsKLQlsb25nIGVudHJpZXMgPSBsbWJfZW5kX29mX0RSQU0oKSA+PiBNRU1PUllfSU5DUkVNRU5UX1NISUZUOworCWludCBtYXhfZG9tYWluOwogCXVuc2lnbmVkIGxvbmcgaTsKIAogCWlmIChudW1hX2VuYWJsZWQgPT0gMCkgewpAQCAtMzI5LDEzICszOTUsNiBAQAogCQlyZXR1cm4gLTE7CiAJfQogCi0JbnVtYV9tZW1vcnlfbG9va3VwX3RhYmxlID0KLQkJKGNoYXIgKilhYnNfdG9fdmlydChsbWJfYWxsb2MoZW50cmllcyAqIHNpemVvZihjaGFyKSwgMSkpOwotCW1lbXNldChudW1hX21lbW9yeV9sb29rdXBfdGFibGUsIDAsIGVudHJpZXMgKiBzaXplb2YoY2hhcikpOwotCi0JZm9yIChpID0gMDsgaSA8IGVudHJpZXMgOyBpKyspCi0JCW51bWFfbWVtb3J5X2xvb2t1cF90YWJsZVtpXSA9IEFSUkFZX0lOSVRJQUxJU0VSOwotCiAJbWluX2NvbW1vbl9kZXB0aCA9IGZpbmRfbWluX2NvbW1vbl9kZXB0aCgpOwogCiAJZGJnKCJOVU1BIGFzc29jaWF0aXZpdHkgZGVwdGggZm9yIENQVS9NZW1vcnk6ICVkXG4iLCBtaW5fY29tbW9uX2RlcHRoKTsKQEAgLTM4Nyw5ICs0NDYsNiBAQAogCQlzdGFydCA9IHJlYWRfbl9jZWxscyhhZGRyX2NlbGxzLCAmbWVtY2VsbF9idWYpOwogCQlzaXplID0gcmVhZF9uX2NlbGxzKHNpemVfY2VsbHMsICZtZW1jZWxsX2J1Zik7CiAKLQkJc3RhcnQgPSBfQUxJR05fRE9XTihzdGFydCwgTUVNT1JZX0lOQ1JFTUVOVCk7Ci0JCXNpemUgPSBfQUxJR05fVVAoc2l6ZSwgTUVNT1JZX0lOQ1JFTUVOVCk7Ci0KIAkJbnVtYV9kb21haW4gPSBvZl9ub2RlX251bWFfZG9tYWluKG1lbW9yeSk7CiAKIAkJaWYgKG51bWFfZG9tYWluID49IE1BWF9OVU1OT0RFUykgewpAQCAtNDAzLDQ0ICs0NTksMTUgQEAKIAkJaWYgKG1heF9kb21haW4gPCBudW1hX2RvbWFpbikKIAkJCW1heF9kb21haW4gPSBudW1hX2RvbWFpbjsKIAotCQlpZiAoISAoc2l6ZSA9IG51bWFfZW5mb3JjZV9tZW1vcnlfbGltaXQoc3RhcnQsIHNpemUpKSkgeworCQlpZiAoIShzaXplID0gbnVtYV9lbmZvcmNlX21lbW9yeV9saW1pdChzdGFydCwgc2l6ZSkpKSB7CiAJCQlpZiAoLS1yYW5nZXMpCiAJCQkJZ290byBuZXdfcmFuZ2U7CiAJCQllbHNlCiAJCQkJY29udGludWU7CiAJCX0KIAotCQkvKgotCQkgKiBJbml0aWFsaXplIG5ldyBub2RlIHN0cnVjdCwgb3IgYWRkIHRvIGFuIGV4aXN0aW5nIG9uZS4KLQkJICovCi0JCWlmIChpbml0X25vZGVfZGF0YVtudW1hX2RvbWFpbl0ubm9kZV9lbmRfcGZuKSB7Ci0JCQlpZiAoKHN0YXJ0IC8gUEFHRV9TSVpFKSA8Ci0JCQkgICAgaW5pdF9ub2RlX2RhdGFbbnVtYV9kb21haW5dLm5vZGVfc3RhcnRfcGZuKQotCQkJCWluaXRfbm9kZV9kYXRhW251bWFfZG9tYWluXS5ub2RlX3N0YXJ0X3BmbiA9Ci0JCQkJCXN0YXJ0IC8gUEFHRV9TSVpFOwotCQkJaWYgKCgoc3RhcnQgLyBQQUdFX1NJWkUpICsgKHNpemUgLyBQQUdFX1NJWkUpKSA+Ci0JCQkgICAgaW5pdF9ub2RlX2RhdGFbbnVtYV9kb21haW5dLm5vZGVfZW5kX3BmbikKLQkJCQlpbml0X25vZGVfZGF0YVtudW1hX2RvbWFpbl0ubm9kZV9lbmRfcGZuID0KLQkJCQkJKHN0YXJ0IC8gUEFHRV9TSVpFKSArCi0JCQkJCShzaXplIC8gUEFHRV9TSVpFKTsKLQotCQkJaW5pdF9ub2RlX2RhdGFbbnVtYV9kb21haW5dLm5vZGVfcHJlc2VudF9wYWdlcyArPQotCQkJCXNpemUgLyBQQUdFX1NJWkU7Ci0JCX0gZWxzZSB7Ci0JCQlub2RlX3NldF9vbmxpbmUobnVtYV9kb21haW4pOwotCi0JCQlpbml0X25vZGVfZGF0YVtudW1hX2RvbWFpbl0ubm9kZV9zdGFydF9wZm4gPQotCQkJCXN0YXJ0IC8gUEFHRV9TSVpFOwotCQkJaW5pdF9ub2RlX2RhdGFbbnVtYV9kb21haW5dLm5vZGVfZW5kX3BmbiA9Ci0JCQkJaW5pdF9ub2RlX2RhdGFbbnVtYV9kb21haW5dLm5vZGVfc3RhcnRfcGZuICsKLQkJCQlzaXplIC8gUEFHRV9TSVpFOwotCQkJaW5pdF9ub2RlX2RhdGFbbnVtYV9kb21haW5dLm5vZGVfcHJlc2VudF9wYWdlcyA9Ci0JCQkJc2l6ZSAvIFBBR0VfU0laRTsKLQkJfQotCi0JCWZvciAoaSA9IHN0YXJ0IDsgaSA8IChzdGFydCtzaXplKTsgaSArPSBNRU1PUllfSU5DUkVNRU5UKQotCQkJbnVtYV9tZW1vcnlfbG9va3VwX3RhYmxlW2kgPj4gTUVNT1JZX0lOQ1JFTUVOVF9TSElGVF0gPQotCQkJCW51bWFfZG9tYWluOworCQlhZGRfcmVnaW9uKG51bWFfZG9tYWluLCBzdGFydCA+PiBQQUdFX1NISUZULAorCQkJICAgc2l6ZSA+PiBQQUdFX1NISUZUKTsKIAogCQlpZiAoLS1yYW5nZXMpCiAJCQlnb3RvIG5ld19yYW5nZTsKQEAgLTQ1NiwzMiArNDgzLDE1IEBACiB7CiAJdW5zaWduZWQgbG9uZyB0b3Bfb2ZfcmFtID0gbG1iX2VuZF9vZl9EUkFNKCk7CiAJdW5zaWduZWQgbG9uZyB0b3RhbF9yYW0gPSBsbWJfcGh5c19tZW1fc2l6ZSgpOwotCXVuc2lnbmVkIGxvbmcgaTsKIAogCXByaW50ayhLRVJOX0lORk8gIlRvcCBvZiBSQU06IDB4JWx4LCBUb3RhbCBSQU06IDB4JWx4XG4iLAogCSAgICAgICB0b3Bfb2ZfcmFtLCB0b3RhbF9yYW0pOwogCXByaW50ayhLRVJOX0lORk8gIk1lbW9yeSBob2xlIHNpemU6ICVsZE1CXG4iLAogCSAgICAgICAodG9wX29mX3JhbSAtIHRvdGFsX3JhbSkgPj4gMjApOwogCi0JaWYgKCFudW1hX21lbW9yeV9sb29rdXBfdGFibGUpIHsKLQkJbG9uZyBlbnRyaWVzID0gdG9wX29mX3JhbSA+PiBNRU1PUllfSU5DUkVNRU5UX1NISUZUOwotCQludW1hX21lbW9yeV9sb29rdXBfdGFibGUgPQotCQkJKGNoYXIgKilhYnNfdG9fdmlydChsbWJfYWxsb2MoZW50cmllcyAqIHNpemVvZihjaGFyKSwgMSkpOwotCQltZW1zZXQobnVtYV9tZW1vcnlfbG9va3VwX3RhYmxlLCAwLCBlbnRyaWVzICogc2l6ZW9mKGNoYXIpKTsKLQkJZm9yIChpID0gMDsgaSA8IGVudHJpZXMgOyBpKyspCi0JCQludW1hX21lbW9yeV9sb29rdXBfdGFibGVbaV0gPSBBUlJBWV9JTklUSUFMSVNFUjsKLQl9Ci0KIAltYXBfY3B1X3RvX25vZGUoYm9vdF9jcHVpZCwgMCk7Ci0KKwlhZGRfcmVnaW9uKDAsIDAsIGxtYl9lbmRfb2ZfRFJBTSgpID4+IFBBR0VfU0hJRlQpOwogCW5vZGVfc2V0X29ubGluZSgwKTsKLQotCWluaXRfbm9kZV9kYXRhWzBdLm5vZGVfc3RhcnRfcGZuID0gMDsKLQlpbml0X25vZGVfZGF0YVswXS5ub2RlX2VuZF9wZm4gPSBsbWJfZW5kX29mX0RSQU0oKSAvIFBBR0VfU0laRTsKLQlpbml0X25vZGVfZGF0YVswXS5ub2RlX3ByZXNlbnRfcGFnZXMgPSB0b3RhbF9yYW0gLyBQQUdFX1NJWkU7Ci0KLQlmb3IgKGkgPSAwIDsgaSA8IHRvcF9vZl9yYW07IGkgKz0gTUVNT1JZX0lOQ1JFTUVOVCkKLQkJbnVtYV9tZW1vcnlfbG9va3VwX3RhYmxlW2kgPj4gTUVNT1JZX0lOQ1JFTUVOVF9TSElGVF0gPSAwOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgZHVtcF9udW1hX3RvcG9sb2d5KHZvaWQpCkBAIC00OTksOCArNTA5LDkgQEAKIAogCQljb3VudCA9IDA7CiAKLQkJZm9yIChpID0gMDsgaSA8IGxtYl9lbmRfb2ZfRFJBTSgpOyBpICs9IE1FTU9SWV9JTkNSRU1FTlQpIHsKLQkJCWlmIChudW1hX21lbW9yeV9sb29rdXBfdGFibGVbaSA+PiBNRU1PUllfSU5DUkVNRU5UX1NISUZUXSA9PSBub2RlKSB7CisJCWZvciAoaSA9IDA7IGkgPCBsbWJfZW5kX29mX0RSQU0oKTsKKwkJICAgICBpICs9ICgxIDw8IFNFQ1RJT05fU0laRV9CSVRTKSkgeworCQkJaWYgKGVhcmx5X3Bmbl90b19uaWQoaSA+PiBQQUdFX1NISUZUKSA9PSBub2RlKSB7CiAJCQkJaWYgKGNvdW50ID09IDApCiAJCQkJCXByaW50aygiIDB4JWx4IiwgaSk7CiAJCQkJKytjb3VudDsKQEAgLTUyNSwxMCArNTM2LDEyIEBACiAgKgogICogUmV0dXJucyB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgbWVtb3J5LgogICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBjYXJlZnVsX2FsbG9jYXRpb24oaW50IG5pZCwgdW5zaWduZWQgbG9uZyBzaXplLAotCQkJCQl1bnNpZ25lZCBsb25nIGFsaWduLCB1bnNpZ25lZCBsb25nIGVuZCkKK3N0YXRpYyB2b2lkIF9faW5pdCAqY2FyZWZ1bF9hbGxvY2F0aW9uKGludCBuaWQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBhbGlnbiwKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBlbmRfcGZuKQogewotCXVuc2lnbmVkIGxvbmcgcmV0ID0gbG1iX2FsbG9jX2Jhc2Uoc2l6ZSwgYWxpZ24sIGVuZCk7CisJaW50IG5ld19uaWQ7CisJdW5zaWduZWQgbG9uZyByZXQgPSBsbWJfYWxsb2NfYmFzZShzaXplLCBhbGlnbiwgZW5kX3BmbiA8PCBQQUdFX1NISUZUKTsKIAogCS8qIHJldHJ5IG92ZXIgYWxsIG1lbW9yeSAqLwogCWlmICghcmV0KQpAQCAtNTQyLDI4ICs1NTUsMjcgQEAKIAkgKiBJZiB0aGUgbWVtb3J5IGNhbWUgZnJvbSBhIHByZXZpb3VzbHkgYWxsb2NhdGVkIG5vZGUsIHdlIG11c3QKIAkgKiByZXRyeSB3aXRoIHRoZSBib290bWVtIGFsbG9jYXRvci4KIAkgKi8KLQlpZiAocGFfdG9fbmlkKHJldCkgPCBuaWQpIHsKLQkJbmlkID0gcGFfdG9fbmlkKHJldCk7Ci0JCXJldCA9ICh1bnNpZ25lZCBsb25nKV9fYWxsb2NfYm9vdG1lbV9ub2RlKE5PREVfREFUQShuaWQpLAorCW5ld19uaWQgPSBlYXJseV9wZm5fdG9fbmlkKHJldCA+PiBQQUdFX1NISUZUKTsKKwlpZiAobmV3X25pZCA8IG5pZCkgeworCQlyZXQgPSAodW5zaWduZWQgbG9uZylfX2FsbG9jX2Jvb3RtZW1fbm9kZShOT0RFX0RBVEEobmV3X25pZCksCiAJCQkJc2l6ZSwgYWxpZ24sIDApOwogCiAJCWlmICghcmV0KQogCQkJcGFuaWMoIm51bWEuYzogY2Fubm90IGFsbG9jYXRlICVsdSBieXRlcyBvbiBub2RlICVkIiwKLQkJCSAgICAgIHNpemUsIG5pZCk7CisJCQkgICAgICBzaXplLCBuZXdfbmlkKTsKIAotCQlyZXQgPSB2aXJ0X3RvX2FicyhyZXQpOworCQlyZXQgPSBfX3BhKHJldCk7CiAKIAkJZGJnKCJhbGxvY19ib290bWVtICVseCAlbHhcbiIsIHJldCwgc2l6ZSk7CiAJfQogCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gKHZvaWQgKilyZXQ7CiB9CiAKIHZvaWQgX19pbml0IGRvX2luaXRfYm9vdG1lbSh2b2lkKQogewogCWludCBuaWQ7Ci0JaW50IGFkZHJfY2VsbHMsIHNpemVfY2VsbHM7Ci0Jc3RydWN0IGRldmljZV9ub2RlICptZW1vcnkgPSBOVUxMOworCXVuc2lnbmVkIGludCBpOwogCXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgcHBjNjRfbnVtYV9uYiA9IHsKIAkJLm5vdGlmaWVyX2NhbGwgPSBjcHVfbnVtYV9jYWxsYmFjaywKIAkJLnByaW9yaXR5ID0gMSAvKiBNdXN0IHJ1biBiZWZvcmUgc2NoZWQgZG9tYWlucyBub3RpZmllci4gKi8KQEAgLTU4MSw5OSArNTkzLDY2IEBACiAJcmVnaXN0ZXJfY3B1X25vdGlmaWVyKCZwcGM2NF9udW1hX25iKTsKIAogCWZvcl9lYWNoX29ubGluZV9ub2RlKG5pZCkgewotCQl1bnNpZ25lZCBsb25nIHN0YXJ0X3BhZGRyLCBlbmRfcGFkZHI7Ci0JCWludCBpOworCQl1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgZW5kX3BmbiwgcGFnZXNfcHJlc2VudDsKIAkJdW5zaWduZWQgbG9uZyBib290bWVtX3BhZGRyOwogCQl1bnNpZ25lZCBsb25nIGJvb3RtYXBfcGFnZXM7CiAKLQkJc3RhcnRfcGFkZHIgPSBpbml0X25vZGVfZGF0YVtuaWRdLm5vZGVfc3RhcnRfcGZuICogUEFHRV9TSVpFOwotCQllbmRfcGFkZHIgPSBpbml0X25vZGVfZGF0YVtuaWRdLm5vZGVfZW5kX3BmbiAqIFBBR0VfU0laRTsKKwkJZ2V0X3JlZ2lvbihuaWQsICZzdGFydF9wZm4sICZlbmRfcGZuLCAmcGFnZXNfcHJlc2VudCk7CiAKIAkJLyogQWxsb2NhdGUgdGhlIG5vZGUgc3RydWN0dXJlIG5vZGUgbG9jYWwgaWYgcG9zc2libGUgKi8KLQkJTk9ERV9EQVRBKG5pZCkgPSAoc3RydWN0IHBnbGlzdF9kYXRhICopY2FyZWZ1bF9hbGxvY2F0aW9uKG5pZCwKKwkJTk9ERV9EQVRBKG5pZCkgPSBjYXJlZnVsX2FsbG9jYXRpb24obmlkLAogCQkJCQlzaXplb2Yoc3RydWN0IHBnbGlzdF9kYXRhKSwKLQkJCQkJU01QX0NBQ0hFX0JZVEVTLCBlbmRfcGFkZHIpOwotCQlOT0RFX0RBVEEobmlkKSA9IGFic190b192aXJ0KE5PREVfREFUQShuaWQpKTsKKwkJCQkJU01QX0NBQ0hFX0JZVEVTLCBlbmRfcGZuKTsKKwkJTk9ERV9EQVRBKG5pZCkgPSBfX3ZhKE5PREVfREFUQShuaWQpKTsKIAkJbWVtc2V0KE5PREVfREFUQShuaWQpLCAwLCBzaXplb2Yoc3RydWN0IHBnbGlzdF9kYXRhKSk7CiAKICAgCQlkYmcoIm5vZGUgJWRcbiIsIG5pZCk7CiAJCWRiZygiTk9ERV9EQVRBKCkgPSAlcFxuIiwgTk9ERV9EQVRBKG5pZCkpOwogCiAJCU5PREVfREFUQShuaWQpLT5iZGF0YSA9ICZwbGF0X25vZGVfYmRhdGFbbmlkXTsKLQkJTk9ERV9EQVRBKG5pZCktPm5vZGVfc3RhcnRfcGZuID0KLQkJCWluaXRfbm9kZV9kYXRhW25pZF0ubm9kZV9zdGFydF9wZm47Ci0JCU5PREVfREFUQShuaWQpLT5ub2RlX3NwYW5uZWRfcGFnZXMgPQotCQkJZW5kX3BhZGRyIC0gc3RhcnRfcGFkZHI7CisJCU5PREVfREFUQShuaWQpLT5ub2RlX3N0YXJ0X3BmbiA9IHN0YXJ0X3BmbjsKKwkJTk9ERV9EQVRBKG5pZCktPm5vZGVfc3Bhbm5lZF9wYWdlcyA9IGVuZF9wZm4gLSBzdGFydF9wZm47CiAKIAkJaWYgKE5PREVfREFUQShuaWQpLT5ub2RlX3NwYW5uZWRfcGFnZXMgPT0gMCkKICAgCQkJY29udGludWU7CiAKLSAgCQlkYmcoInN0YXJ0X3BhZGRyID0gJWx4XG4iLCBzdGFydF9wYWRkcik7Ci0gIAkJZGJnKCJlbmRfcGFkZHIgPSAlbHhcbiIsIGVuZF9wYWRkcik7CisgIAkJZGJnKCJzdGFydF9wYWRkciA9ICVseFxuIiwgc3RhcnRfcGZuIDw8IFBBR0VfU0hJRlQpOworICAJCWRiZygiZW5kX3BhZGRyID0gJWx4XG4iLCBlbmRfcGZuIDw8IFBBR0VfU0hJRlQpOwogCi0JCWJvb3RtYXBfcGFnZXMgPSBib290bWVtX2Jvb3RtYXBfcGFnZXMoKGVuZF9wYWRkciAtIHN0YXJ0X3BhZGRyKSA+PiBQQUdFX1NISUZUKTsKKwkJYm9vdG1hcF9wYWdlcyA9IGJvb3RtZW1fYm9vdG1hcF9wYWdlcyhlbmRfcGZuIC0gc3RhcnRfcGZuKTsKKwkJYm9vdG1lbV9wYWRkciA9ICh1bnNpZ25lZCBsb25nKWNhcmVmdWxfYWxsb2NhdGlvbihuaWQsCisJCQkJCWJvb3RtYXBfcGFnZXMgPDwgUEFHRV9TSElGVCwKKwkJCQkJUEFHRV9TSVpFLCBlbmRfcGZuKTsKKwkJbWVtc2V0KF9fdmEoYm9vdG1lbV9wYWRkciksIDAsIGJvb3RtYXBfcGFnZXMgPDwgUEFHRV9TSElGVCk7CiAKLQkJYm9vdG1lbV9wYWRkciA9IGNhcmVmdWxfYWxsb2NhdGlvbihuaWQsCi0JCQkJYm9vdG1hcF9wYWdlcyA8PCBQQUdFX1NISUZULAotCQkJCVBBR0VfU0laRSwgZW5kX3BhZGRyKTsKLQkJbWVtc2V0KGFic190b192aXJ0KGJvb3RtZW1fcGFkZHIpLCAwLAotCQkgICAgICAgYm9vdG1hcF9wYWdlcyA8PCBQQUdFX1NISUZUKTsKIAkJZGJnKCJib290bWFwX3BhZGRyID0gJWx4XG4iLCBib290bWVtX3BhZGRyKTsKIAogCQlpbml0X2Jvb3RtZW1fbm9kZShOT0RFX0RBVEEobmlkKSwgYm9vdG1lbV9wYWRkciA+PiBQQUdFX1NISUZULAotCQkJCSAgc3RhcnRfcGFkZHIgPj4gUEFHRV9TSElGVCwKLQkJCQkgIGVuZF9wYWRkciA+PiBQQUdFX1NISUZUKTsKKwkJCQkgIHN0YXJ0X3BmbiwgZW5kX3Bmbik7CiAKLQkJLyoKLQkJICogV2UgbmVlZCB0byBkbyBhbm90aGVyIHNjYW4gb2YgYWxsIG1lbW9yeSBzZWN0aW9ucyB0bwotCQkgKiBhc3NvY2lhdGUgbWVtb3J5IHdpdGggdGhlIGNvcnJlY3Qgbm9kZS4KLQkJICovCi0JCWFkZHJfY2VsbHMgPSBnZXRfbWVtX2FkZHJfY2VsbHMoKTsKLQkJc2l6ZV9jZWxscyA9IGdldF9tZW1fc2l6ZV9jZWxscygpOwotCQltZW1vcnkgPSBOVUxMOwotCQl3aGlsZSAoKG1lbW9yeSA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKG1lbW9yeSwgIm1lbW9yeSIpKSAhPSBOVUxMKSB7Ci0JCQl1bnNpZ25lZCBsb25nIG1lbV9zdGFydCwgbWVtX3NpemU7Ci0JCQlpbnQgbnVtYV9kb21haW4sIHJhbmdlczsKLQkJCXVuc2lnbmVkIGludCAqbWVtY2VsbF9idWY7Ci0JCQl1bnNpZ25lZCBpbnQgbGVuOworCQkvKiBBZGQgZnJlZSByZWdpb25zIG9uIHRoaXMgbm9kZSAqLworCQlmb3IgKGkgPSAwOyBpbml0X25vZGVfZGF0YVtpXS5lbmRfcGZuOyBpKyspIHsKKwkJCXVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZDsKIAotCQkJbWVtY2VsbF9idWYgPSAodW5zaWduZWQgaW50ICopZ2V0X3Byb3BlcnR5KG1lbW9yeSwgInJlZyIsICZsZW4pOwotCQkJaWYgKCFtZW1jZWxsX2J1ZiB8fCBsZW4gPD0gMCkKKwkJCWlmIChpbml0X25vZGVfZGF0YVtpXS5uaWQgIT0gbmlkKQogCQkJCWNvbnRpbnVlOwogCi0JCQlyYW5nZXMgPSBtZW1vcnktPm5fYWRkcnM7CS8qIHJhbmdlcyBpbiBjZWxsICovCi1uZXdfcmFuZ2U6Ci0JCQltZW1fc3RhcnQgPSByZWFkX25fY2VsbHMoYWRkcl9jZWxscywgJm1lbWNlbGxfYnVmKTsKLQkJCW1lbV9zaXplID0gcmVhZF9uX2NlbGxzKHNpemVfY2VsbHMsICZtZW1jZWxsX2J1Zik7Ci0JCQlpZiAobnVtYV9lbmFibGVkKSB7Ci0JCQkJbnVtYV9kb21haW4gPSBvZl9ub2RlX251bWFfZG9tYWluKG1lbW9yeSk7Ci0JCQkJaWYgKG51bWFfZG9tYWluICA+PSBNQVhfTlVNTk9ERVMpCi0JCQkJCW51bWFfZG9tYWluID0gMDsKLQkJCX0gZWxzZQotCQkJCW51bWFfZG9tYWluID0gIDA7CisJCQlzdGFydCA9IGluaXRfbm9kZV9kYXRhW2ldLnN0YXJ0X3BmbiA8PCBQQUdFX1NISUZUOworCQkJZW5kID0gaW5pdF9ub2RlX2RhdGFbaV0uZW5kX3BmbiA8PCBQQUdFX1NISUZUOwogCi0JCQlpZiAobnVtYV9kb21haW4gIT0gbmlkKQotCQkJCWNvbnRpbnVlOwotCi0JCQltZW1fc2l6ZSA9IG51bWFfZW5mb3JjZV9tZW1vcnlfbGltaXQobWVtX3N0YXJ0LCBtZW1fc2l6ZSk7Ci0gIAkJCWlmIChtZW1fc2l6ZSkgewotICAJCQkJZGJnKCJmcmVlX2Jvb3RtZW0gJWx4ICVseFxuIiwgbWVtX3N0YXJ0LCBtZW1fc2l6ZSk7Ci0gIAkJCQlmcmVlX2Jvb3RtZW1fbm9kZShOT0RFX0RBVEEobmlkKSwgbWVtX3N0YXJ0LCBtZW1fc2l6ZSk7Ci0JCQl9Ci0KLQkJCWlmICgtLXJhbmdlcykJCS8qIHByb2Nlc3MgYWxsIHJhbmdlcyBpbiBjZWxsICovCi0JCQkJZ290byBuZXdfcmFuZ2U7CisJCQlkYmcoImZyZWVfYm9vdG1lbSAlbHggJWx4XG4iLCBzdGFydCwgZW5kIC0gc3RhcnQpOworICAJCQlmcmVlX2Jvb3RtZW1fbm9kZShOT0RFX0RBVEEobmlkKSwgc3RhcnQsIGVuZCAtIHN0YXJ0KTsKIAkJfQogCi0JCS8qCi0JCSAqIE1hcmsgcmVzZXJ2ZWQgcmVnaW9ucyBvbiB0aGlzIG5vZGUKLQkJICovCisJCS8qIE1hcmsgcmVzZXJ2ZWQgcmVnaW9ucyBvbiB0aGlzIG5vZGUgKi8KIAkJZm9yIChpID0gMDsgaSA8IGxtYi5yZXNlcnZlZC5jbnQ7IGkrKykgewogCQkJdW5zaWduZWQgbG9uZyBwaHlzYmFzZSA9IGxtYi5yZXNlcnZlZC5yZWdpb25baV0uYmFzZTsKIAkJCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IGxtYi5yZXNlcnZlZC5yZWdpb25baV0uc2l6ZTsKKwkJCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGFkZHIgPSBzdGFydF9wZm4gPDwgUEFHRV9TSElGVDsKKwkJCXVuc2lnbmVkIGxvbmcgZW5kX3BhZGRyID0gZW5kX3BmbiA8PCBQQUdFX1NISUZUOwogCi0JCQlpZiAocGFfdG9fbmlkKHBoeXNiYXNlKSAhPSBuaWQgJiYKLQkJCSAgICBwYV90b19uaWQocGh5c2Jhc2Urc2l6ZS0xKSAhPSBuaWQpCisJCQlpZiAoZWFybHlfcGZuX3RvX25pZChwaHlzYmFzZSA+PiBQQUdFX1NISUZUKSAhPSBuaWQgJiYKKwkJCSAgICBlYXJseV9wZm5fdG9fbmlkKChwaHlzYmFzZStzaXplLTEpID4+IFBBR0VfU0hJRlQpICE9IG5pZCkKIAkJCQljb250aW51ZTsKIAogCQkJaWYgKHBoeXNiYXNlIDwgZW5kX3BhZGRyICYmCkBAIC02OTMsNDYgKzY3MiwxOSBAQAogCQkJCQkJICAgICBzaXplKTsKIAkJCX0KIAkJfQotCQkvKgotCQkgKiBUaGlzIGxvb3AgbWF5IGxvb2sgZmFtYWxpYXIsIGJ1dCB3ZSBoYXZlIHRvIGRvIGl0IGFnYWluCi0JCSAqIGFmdGVyIG1hcmtpbmcgb3VyIHJlc2VydmVkIG1lbW9yeSB0byBtYXJrIG1lbW9yeSBwcmVzZW50Ci0JCSAqIGZvciBzcGFyc2VtZW0uCi0JCSAqLwotCQlhZGRyX2NlbGxzID0gZ2V0X21lbV9hZGRyX2NlbGxzKCk7Ci0JCXNpemVfY2VsbHMgPSBnZXRfbWVtX3NpemVfY2VsbHMoKTsKLQkJbWVtb3J5ID0gTlVMTDsKLQkJd2hpbGUgKChtZW1vcnkgPSBvZl9maW5kX25vZGVfYnlfdHlwZShtZW1vcnksICJtZW1vcnkiKSkgIT0gTlVMTCkgewotCQkJdW5zaWduZWQgbG9uZyBtZW1fc3RhcnQsIG1lbV9zaXplOwotCQkJaW50IG51bWFfZG9tYWluLCByYW5nZXM7Ci0JCQl1bnNpZ25lZCBpbnQgKm1lbWNlbGxfYnVmOwotCQkJdW5zaWduZWQgaW50IGxlbjsKIAotCQkJbWVtY2VsbF9idWYgPSAodW5zaWduZWQgaW50ICopZ2V0X3Byb3BlcnR5KG1lbW9yeSwgInJlZyIsICZsZW4pOwotCQkJaWYgKCFtZW1jZWxsX2J1ZiB8fCBsZW4gPD0gMCkKKwkJLyogQWRkIHJlZ2lvbnMgaW50byBzcGFyc2VtZW0gKi8KKwkJZm9yIChpID0gMDsgaW5pdF9ub2RlX2RhdGFbaV0uZW5kX3BmbjsgaSsrKSB7CisJCQl1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7CisKKwkJCWlmIChpbml0X25vZGVfZGF0YVtpXS5uaWQgIT0gbmlkKQogCQkJCWNvbnRpbnVlOwogCi0JCQlyYW5nZXMgPSBtZW1vcnktPm5fYWRkcnM7CS8qIHJhbmdlcyBpbiBjZWxsICovCi1uZXdfcmFuZ2UyOgotCQkJbWVtX3N0YXJ0ID0gcmVhZF9uX2NlbGxzKGFkZHJfY2VsbHMsICZtZW1jZWxsX2J1Zik7Ci0JCQltZW1fc2l6ZSA9IHJlYWRfbl9jZWxscyhzaXplX2NlbGxzLCAmbWVtY2VsbF9idWYpOwotCQkJaWYgKG51bWFfZW5hYmxlZCkgewotCQkJCW51bWFfZG9tYWluID0gb2Zfbm9kZV9udW1hX2RvbWFpbihtZW1vcnkpOwotCQkJCWlmIChudW1hX2RvbWFpbiAgPj0gTUFYX05VTU5PREVTKQotCQkJCQludW1hX2RvbWFpbiA9IDA7Ci0JCQl9IGVsc2UKLQkJCQludW1hX2RvbWFpbiA9ICAwOworCQkJc3RhcnQgPSBpbml0X25vZGVfZGF0YVtpXS5zdGFydF9wZm47CisJCQllbmQgPSBpbml0X25vZGVfZGF0YVtpXS5lbmRfcGZuOwogCi0JCQlpZiAobnVtYV9kb21haW4gIT0gbmlkKQotCQkJCWNvbnRpbnVlOwotCi0JCQltZW1fc2l6ZSA9IG51bWFfZW5mb3JjZV9tZW1vcnlfbGltaXQobWVtX3N0YXJ0LCBtZW1fc2l6ZSk7Ci0JCQltZW1vcnlfcHJlc2VudChudW1hX2RvbWFpbiwgbWVtX3N0YXJ0ID4+IFBBR0VfU0hJRlQsCi0JCQkJICAgICAgIChtZW1fc3RhcnQgKyBtZW1fc2l6ZSkgPj4gUEFHRV9TSElGVCk7Ci0KLQkJCWlmICgtLXJhbmdlcykJCS8qIHByb2Nlc3MgYWxsIHJhbmdlcyBpbiBjZWxsICovCi0JCQkJZ290byBuZXdfcmFuZ2UyOworCQkJbWVtb3J5X3ByZXNlbnQobmlkLCBzdGFydCwgZW5kKTsKIAkJfQotCiAJfQogfQogCkBAIC03NDYsMjEgKzY5OCwxOCBAQAogCW1lbXNldCh6aG9sZXNfc2l6ZSwgMCwgc2l6ZW9mKHpob2xlc19zaXplKSk7CiAKIAlmb3JfZWFjaF9vbmxpbmVfbm9kZShuaWQpIHsKLQkJdW5zaWduZWQgbG9uZyBzdGFydF9wZm47Ci0JCXVuc2lnbmVkIGxvbmcgZW5kX3BmbjsKKwkJdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIGVuZF9wZm4sIHBhZ2VzX3ByZXNlbnQ7CiAKLQkJc3RhcnRfcGZuID0gaW5pdF9ub2RlX2RhdGFbbmlkXS5ub2RlX3N0YXJ0X3BmbjsKLQkJZW5kX3BmbiA9IGluaXRfbm9kZV9kYXRhW25pZF0ubm9kZV9lbmRfcGZuOworCQlnZXRfcmVnaW9uKG5pZCwgJnN0YXJ0X3BmbiwgJmVuZF9wZm4sICZwYWdlc19wcmVzZW50KTsKIAogCQl6b25lc19zaXplW1pPTkVfRE1BXSA9IGVuZF9wZm4gLSBzdGFydF9wZm47Ci0JCXpob2xlc19zaXplW1pPTkVfRE1BXSA9IHpvbmVzX3NpemVbWk9ORV9ETUFdIC0KLQkJCWluaXRfbm9kZV9kYXRhW25pZF0ubm9kZV9wcmVzZW50X3BhZ2VzOworCQl6aG9sZXNfc2l6ZVtaT05FX0RNQV0gPSB6b25lc19zaXplW1pPTkVfRE1BXSAtIHBhZ2VzX3ByZXNlbnQ7CiAKIAkJZGJnKCJmcmVlX2FyZWFfaW5pdCBub2RlICVkICVseCAlbHggKGhvbGU6ICVseClcbiIsIG5pZCwKIAkJICAgIHpvbmVzX3NpemVbWk9ORV9ETUFdLCBzdGFydF9wZm4sIHpob2xlc19zaXplW1pPTkVfRE1BXSk7CiAKLQkJZnJlZV9hcmVhX2luaXRfbm9kZShuaWQsIE5PREVfREFUQShuaWQpLCB6b25lc19zaXplLAotCQkJCQkJCXN0YXJ0X3BmbiwgemhvbGVzX3NpemUpOworCQlmcmVlX2FyZWFfaW5pdF9ub2RlKG5pZCwgTk9ERV9EQVRBKG5pZCksIHpvbmVzX3NpemUsIHN0YXJ0X3BmbiwKKwkJCQkgICAgemhvbGVzX3NpemUpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL3BndGFibGVfNjQuYyBiL2FyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzY0LmMKaW5kZXggOTAwODQyNC4uYzdmN2JiNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL3BndGFibGVfNjQuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV82NC5jCkBAIC0xMjIsOCArMTIyLDExIEBACiAJCSAqCiAJCSAqLwogCQlpZiAoaHRhYl9ib2x0X21hcHBpbmcoZWEsIGVhICsgUEFHRV9TSVpFLCBwYSwgZmxhZ3MsCi0JCQkJICAgICAgbW11X3ZpcnR1YWxfcHNpemUpKQotCQkJcGFuaWMoIkNhbid0IG1hcCBib2x0ZWQgSU8gbWFwcGluZyIpOworCQkJCSAgICAgIG1tdV92aXJ0dWFsX3BzaXplKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gZG8gYm9sdGVkIG1hcHBpbmcgSU8gIgorCQkJICAgICAgICJtZW1vcnkgYXQgJTAxNmx4ICFcbiIsIHBhKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CiAJfQogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL3N0YWIuYyBiL2FyY2gvcG93ZXJwYy9tbS9zdGFiLmMKaW5kZXggZmEzMjVkYi4uY2ZiYjRlMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL3N0YWIuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vc3RhYi5jCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSA8YXNtL2NwdXRhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL2xtYi5oPgogI2luY2x1ZGUgPGFzbS9hYnNfYWRkci5oPgorI2luY2x1ZGUgPGFzbS9maXJtd2FyZS5oPgogCiBzdHJ1Y3Qgc3RhYl9lbnRyeSB7CiAJdW5zaWduZWQgbG9uZyBlc2lkX2RhdGE7CkBAIC0yNTYsNyArMjU3LDcgQEAKIAogCQlwYWNhW2NwdV0uc3RhYl9hZGRyID0gbmV3c3RhYjsKIAkJcGFjYVtjcHVdLnN0YWJfcmVhbCA9IHZpcnRfdG9fYWJzKG5ld3N0YWIpOwotCQlwcmludGsoS0VSTl9ERUJVRyAiU2VnbWVudCB0YWJsZSBmb3IgQ1BVICVkIGF0IDB4JWx4ICIKKwkJcHJpbnRrKEtFUk5fSU5GTyAiU2VnbWVudCB0YWJsZSBmb3IgQ1BVICVkIGF0IDB4JWx4ICIKIAkJICAgICAgICJ2aXJ0dWFsLCAweCVseCBhYnNvbHV0ZVxuIiwKIAkJICAgICAgIGNwdSwgcGFjYVtjcHVdLnN0YWJfYWRkciwgcGFjYVtjcHVdLnN0YWJfcmVhbCk7CiAJfQpAQCAtMjcwLDEwICsyNzEsMjggQEAKIHZvaWQgc3RhYl9pbml0aWFsaXplKHVuc2lnbmVkIGxvbmcgc3RhYikKIHsKIAl1bnNpZ25lZCBsb25nIHZzaWQgPSBnZXRfa2VybmVsX3ZzaWQoS0VSTkVMQkFTRSk7CisJdW5zaWduZWQgbG9uZyBzdGFicmVhbDsKIAogCWFzbSB2b2xhdGlsZSgiaXN5bmM7IHNsYmlhOyBpc3luYyI6OjoibWVtb3J5Iik7CiAJbWFrZV9zdGUoc3RhYiwgR0VUX0VTSUQoS0VSTkVMQkFTRSksIHZzaWQpOwogCiAJLyogT3JkZXIgdXBkYXRlICovCiAJYXNtIHZvbGF0aWxlKCJzeW5jIjo6OiJtZW1vcnkiKTsKKworCS8qIFNldCBBU1IgKi8KKwlzdGFicmVhbCA9IGdldF9wYWNhKCktPnN0YWJfcmVhbCB8IDB4MXVsOworCisjaWZkZWYgQ09ORklHX1BQQ19JU0VSSUVTCisJaWYgKGZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfSVNFUklFUykpIHsKKwkJSHZDYWxsMShIdkNhbGxCYXNlU2V0QVNSLCBzdGFicmVhbCk7CisJCXJldHVybjsKKwl9CisjZW5kaWYgLyogQ09ORklHX1BQQ19JU0VSSUVTICovCisjaWZkZWYgQ09ORklHX1BQQ19QU0VSSUVTCisJaWYgKHBsYXRmb3JtX2lzX2xwYXIoKSkgeworCQlwbHBhcl9oY2FsbF9ub3JldHMoSF9TRVRfQVNSLCBzdGFicmVhbCk7CisJCXJldHVybjsKKwl9CisjZW5kaWYKKwltdHNwcihTUFJOX0FTUiwgc3RhYnJlYWwpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL29wcm9maWxlL29wX21vZGVsX3Bvd2VyNC5jIGIvYXJjaC9wb3dlcnBjL29wcm9maWxlL29wX21vZGVsX3Bvd2VyNC5jCmluZGV4IGM0ZWU1NDcuLmEzNDAxYjQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9vcHJvZmlsZS9vcF9tb2RlbF9wb3dlcjQuYworKysgYi9hcmNoL3Bvd2VycGMvb3Byb2ZpbGUvb3BfbW9kZWxfcG93ZXI0LmMKQEAgLTE0LDcgKzE0LDYgQEAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgotI2luY2x1ZGUgPGFzbS9zeXN0ZW1jZmcuaD4KICNpbmNsdWRlIDxhc20vcnRhcy5oPgogI2luY2x1ZGUgPGFzbS9vcHJvZmlsZV9pbXBsLmg+CiAjaW5jbHVkZSA8YXNtL3JlZy5oPgpAQCAtMjMzLDggKzIzMiw3IEBACiAJbW1jcmEgPSBtZnNwcihTUFJOX01NQ1JBKTsKIAogCS8qIFdlcmUgd2UgaW4gdGhlIGh5cGVydmlzb3I/ICovCi0JaWYgKChzeXN0ZW1jZmctPnBsYXRmb3JtID09IFBMQVRGT1JNX1BTRVJJRVNfTFBBUikgJiYKLQkgICAgKG1tY3JhICYgTU1DUkFfU0lIVikpCisJaWYgKHBsYXRmb3JtX2lzX2xwYXIoKSAmJiAobW1jcmEgJiBNTUNSQV9TSUhWKSkKIAkJLyogZnVuY3Rpb24gZGVzY3JpcHRvciBtYWRuZXNzICovCiAJCXJldHVybiAqKCh1bnNpZ25lZCBsb25nICopaHlwZXJ2aXNvcl9idWNrZXQpOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvc2V0dXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2hycC9zZXR1cC5jCmluZGV4IGVjZDMyZDUuLjQwOTlkZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2hycC9zZXR1cC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2hycC9zZXR1cC5jCkBAIC0zNjEsNyArMzYxLDkgQEAKIAlwcmludGsoS0VSTl9JTkZPICJPcGVuUElDIGF0ICVseFxuIiwgb3BhZGRyKTsKIAogCWlycV9jb3VudCA9IE5SX0lSUVMgLSBOVU1fSVNBX0lOVEVSUlVQVFMgLSA0OyAvKiBsZWF2ZSByb29tIGZvciBJUElzICovCi0JcHJvbV9nZXRfaXJxX3NlbnNlcyhpbml0X3NlbnNlcywgTlVNXzgyNTlfSU5URVJSVVBUUywgTlJfSVJRUyAtIDQpOworCXByb21fZ2V0X2lycV9zZW5zZXMoaW5pdF9zZW5zZXMsIE5VTV9JU0FfSU5URVJSVVBUUywgTlJfSVJRUyAtIDQpOworCS8qIGk4MjU5IGNhc2NhZGUgaXMgYWx3YXlzIHBvc2l0aXZlIGxldmVsICovCisJaW5pdF9zZW5zZXNbMF0gPSBJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkU7CiAKIAlpcmFuZ2VzID0gKHVuc2lnbmVkIGludCAqKSBnZXRfcHJvcGVydHkobnAsICJpbnRlcnJ1cHQtcmFuZ2VzIiwgJmxlbik7CiAJaWYgKGlyYW5nZXMgPT0gTlVMTCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9pcnEuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9pcnEuYwppbmRleCBhMDY2MDNkLi4wMTA5MGU5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvaXJxLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2lycS5jCkBAIC0xMDMsNiArMTAzLDkgQEAKIAkJc3RydWN0IHB0X3JlZ3MgKnJlZ3NQYXJtKQogewogCWludCBpcnE7CisjaWZkZWYgQ09ORklHX0lSUVNUQUNLUworCXN0cnVjdCB0aHJlYWRfaW5mbyAqY3VydHAsICppcnF0cDsKKyNlbmRpZgogCiAJKytQY2lfSW50ZXJydXB0X0NvdW50OwogCkBAIC0xMTAsNyArMTEzLDIwIEBACiAJY2FzZSBYbVBjaUxwRXZlbnRfU2xvdEludGVycnVwdDoKIAkJaXJxID0gZXZlbnRQYXJtLT5odkxwRXZlbnQueENvcnJlbGF0aW9uVG9rZW47CiAJCS8qIERpc3BhdGNoIHRoZSBpbnRlcnJ1cHQgaGFuZGxlcnMgZm9yIHRoaXMgaXJxICovCi0JCXBwY19pcnFfZGlzcGF0Y2hfaGFuZGxlcihyZWdzUGFybSwgaXJxKTsKKyNpZmRlZiBDT05GSUdfSVJRU1RBQ0tTCisJCS8qIFN3aXRjaCB0byB0aGUgaXJxIHN0YWNrIHRvIGhhbmRsZSB0aGlzICovCisJCWN1cnRwID0gY3VycmVudF90aHJlYWRfaW5mbygpOworCQlpcnF0cCA9IGhhcmRpcnFfY3R4W3NtcF9wcm9jZXNzb3JfaWQoKV07CisJCWlmIChjdXJ0cCAhPSBpcnF0cCkgeworCQkJaXJxdHAtPnRhc2sgPSBjdXJ0cC0+dGFzazsKKwkJCWlycXRwLT5mbGFncyA9IDA7CisJCQljYWxsX19fZG9fSVJRKGlycSwgcmVnc1Bhcm0sIGlycXRwKTsKKwkJCWlycXRwLT50YXNrID0gTlVMTDsKKwkJCWlmIChpcnF0cC0+ZmxhZ3MpCisJCQkJc2V0X2JpdHMoaXJxdHAtPmZsYWdzLCAmY3VydHAtPmZsYWdzKTsKKwkJfSBlbHNlCisjZW5kaWYKKwkJCV9fZG9fSVJRKGlycSwgcmVnc1Bhcm0pOwogCQlIdkNhbGxQY2lfZW9pKGV2ZW50UGFybS0+ZXZlbnREYXRhLnNsb3RJbnRlcnJ1cHQuYnVzTnVtYmVyLAogCQkJZXZlbnRQYXJtLT5ldmVudERhdGEuc2xvdEludGVycnVwdC5zdWJCdXNOdW1iZXIsCiAJCQlldmVudFBhcm0tPmV2ZW50RGF0YS5zbG90SW50ZXJydXB0LmRldmljZUlkKTsKQEAgLTMxMCwxMCArMzI2LDggQEAKIH0KIAogLyoKLSAqIE5lZWQgdG8gZGVmaW5lIHRoaXMgc28gcHBjX2lycV9kaXNwYXRjaF9oYW5kbGVyIHdpbGwgTk9UIGNhbGwKLSAqIGVuYWJsZV9JUlEgYXQgdGhlIGVuZCBvZiBpbnRlcnJ1cHQgaGFuZGxpbmcuICBIb3dldmVyLCB0aGlzIGRvZXMKLSAqIG5vdGhpbmcgYmVjYXVzZSB0aGVyZSBpcyBub3QgZW5vdWdoIGluZm9ybWF0aW9uIHByb3ZpZGVkIHRvIGRvCi0gKiB0aGUgRU9JIEh2Q2FsbC4gIFRoaXMgaXMgZG9uZSBieSBYbVBjaUxwRXZlbnQuYworICogVGhpcyBkb2VzIG5vdGhpbmcgYmVjYXVzZSB0aGVyZSBpcyBub3QgZW5vdWdoIGluZm9ybWF0aW9uCisgKiBwcm92aWRlZCB0byBkbyB0aGUgRU9JIEh2Q2FsbC4gIFRoaXMgaXMgZG9uZSBieSBYbVBjaUxwRXZlbnQuYwogICovCiBzdGF0aWMgdm9pZCBpU2VyaWVzX2VuZF9JUlEodW5zaWduZWQgaW50IGlycSkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9taXNjLlMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvbWlzYy5TCmluZGV4IDA5ZjE0NTIuLmRmZTdhYTEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9taXNjLlMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL21pc2MuUwpAQCAtMTUsNiArMTUsNyBAQAogCiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgorI2luY2x1ZGUgPGFzbS9wcGNfYXNtLmg+CiAKIAkudGV4dAogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvc2V0dXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9zZXR1cC5jCmluZGV4IGQzZTRiZjcuLjZhMjlmMzAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9zZXR1cC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9zZXR1cC5jCkBAIC0zOSw3ICszOSw4IEBACiAjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CiAjaW5jbHVkZSA8YXNtL2lvbW11Lmg+CiAjaW5jbHVkZSA8YXNtL2Zpcm13YXJlLmg+Ci0KKyNpbmNsdWRlIDxhc20vc3lzdGVtY2ZnLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS90aW1lLmg+CiAjaW5jbHVkZSA8YXNtL3BhY2EuaD4KICNpbmNsdWRlIDxhc20vY2FjaGUuaD4KQEAgLTcxLDcgKzcyLDcgQEAKICNlbmRpZgogCiAvKiBGdW5jdGlvbiBQcm90b3R5cGVzICovCi1zdGF0aWMgdm9pZCBidWlsZF9pU2VyaWVzX01lbW9yeV9NYXAodm9pZCk7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBidWlsZF9pU2VyaWVzX01lbW9yeV9NYXAodm9pZCk7CiBzdGF0aWMgdm9pZCBpc2VyaWVzX3NoYXJlZF9pZGxlKHZvaWQpOwogc3RhdGljIHZvaWQgaXNlcmllc19kZWRpY2F0ZWRfaWRsZSh2b2lkKTsKICNpZmRlZiBDT05GSUdfUENJCkBAIC04NCw3ICs4NSw2IEBACiBpbnQgcGlyYW5oYV9zaW11bGF0b3I7CiAKIGV4dGVybiBpbnQgcmRfc2l6ZTsJCS8qIERlZmluZWQgaW4gZHJpdmVycy9ibG9jay9yZC5jICovCi1leHRlcm4gdW5zaWduZWQgbG9uZyBrbGltaXQ7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBlbWJlZGRlZF9zeXNtYXBfc3RhcnQ7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBlbWJlZGRlZF9zeXNtYXBfZW5kOwogCkBAIC00MDMsOSArNDAzLDExIEBACiAgKiBhIHRhYmxlIHVzZWQgdG8gdHJhbnNsYXRlIExpbnV4J3MgcGh5c2ljYWwgYWRkcmVzc2VzIHRvIHRoZXNlCiAgKiBhYnNvbHV0ZSBhZGRyZXNzZXMuICBBYnNvbHV0ZSBhZGRyZXNzZXMgYXJlIG5lZWRlZCB3aGVuCiAgKiBjb21tdW5pY2F0aW5nIHdpdGggdGhlIGh5cGVydmlzb3IgKGUuZy4gdG8gYnVpbGQgSFBUIGVudHJpZXMpCisgKgorICogUmV0dXJucyB0aGUgcGh5c2ljYWwgbWVtb3J5IHNpemUKICAqLwogCi1zdGF0aWMgdm9pZCBfX2luaXQgYnVpbGRfaVNlcmllc19NZW1vcnlfTWFwKHZvaWQpCitzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgYnVpbGRfaVNlcmllc19NZW1vcnlfTWFwKHZvaWQpCiB7CiAJdTMyIGxvYWRBcmVhRmlyc3RDaHVuaywgbG9hZEFyZWFMYXN0Q2h1bmssIGxvYWRBcmVhU2l6ZTsKIAl1MzIgbmV4dFBoeXNDaHVuazsKQEAgLTUzOCw3ICs1NDAsNyBAQAogCSAqIHdoaWNoIHNob3VsZCBiZSBlcXVhbCB0bwogCSAqICAgbmV4dFBoeXNDaHVuawogCSAqLwotCXN5c3RlbWNmZy0+cGh5c2ljYWxNZW1vcnlTaXplID0gY2h1bmtfdG9fYWRkcihuZXh0UGh5c0NodW5rKTsKKwlyZXR1cm4gY2h1bmtfdG9fYWRkcihuZXh0UGh5c0NodW5rKTsKIH0KIAogLyoKQEAgLTU2NCw4ICs1NjYsOCBAQAogCXByaW50aygiTWF4IHBoeXNpY2FsIHByb2Nlc3NvcnMgPSAlZFxuIiwKIAkJCWl0VnBkQXJlYXMueFNsaWNNYXhQaHlzaWNhbFByb2NzKTsKIAotCXN5c3RlbWNmZy0+cHJvY2Vzc29yID0geElvSHJpUHJvY2Vzc29yVnBkW3Byb2NJeF0ueFBWUjsKLQlwcmludGsoIlByb2Nlc3NvciB2ZXJzaW9uID0gJXhcbiIsIHN5c3RlbWNmZy0+cHJvY2Vzc29yKTsKKwlfc3lzdGVtY2ZnLT5wcm9jZXNzb3IgPSB4SW9IcmlQcm9jZXNzb3JWcGRbcHJvY0l4XS54UFZSOworCXByaW50aygiUHJvY2Vzc29yIHZlcnNpb24gPSAleFxuIiwgX3N5c3RlbWNmZy0+cHJvY2Vzc29yKTsKIH0KIAogc3RhdGljIHZvaWQgaVNlcmllc19zaG93X2NwdWluZm8oc3RydWN0IHNlcV9maWxlICptKQpAQCAtNjk0LDIwICs2OTYsMTggQEAKIAkJaWYgKGh2bHBldmVudF9pc19wZW5kaW5nKCkpCiAJCQlwcm9jZXNzX2lTZXJpZXNfZXZlbnRzKCk7CiAKKwkJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOwogCQlzY2hlZHVsZSgpOworCQlwcmVlbXB0X2Rpc2FibGUoKTsKIAl9CiB9CiAKIHN0YXRpYyB2b2lkIGlzZXJpZXNfZGVkaWNhdGVkX2lkbGUodm9pZCkKIHsKLQlsb25nIG9sZHZhbDsKKwlzZXRfdGhyZWFkX2ZsYWcoVElGX1BPTExJTkdfTlJGTEFHKTsKIAogCXdoaWxlICgxKSB7Ci0JCW9sZHZhbCA9IHRlc3RfYW5kX2NsZWFyX3RocmVhZF9mbGFnKFRJRl9ORUVEX1JFU0NIRUQpOwotCi0JCWlmICghb2xkdmFsKSB7Ci0JCQlzZXRfdGhyZWFkX2ZsYWcoVElGX1BPTExJTkdfTlJGTEFHKTsKLQorCQlpZiAoIW5lZWRfcmVzY2hlZCgpKSB7CiAJCQl3aGlsZSAoIW5lZWRfcmVzY2hlZCgpKSB7CiAJCQkJcHBjNjRfcnVubGF0Y2hfb2ZmKCk7CiAJCQkJSE1UX2xvdygpOwpAQCAtNzIwLDEzICs3MjAsMTIgQEAKIAkJCX0KIAogCQkJSE1UX21lZGl1bSgpOwotCQkJY2xlYXJfdGhyZWFkX2ZsYWcoVElGX1BPTExJTkdfTlJGTEFHKTsKLQkJfSBlbHNlIHsKLQkJCXNldF9uZWVkX3Jlc2NoZWQoKTsKIAkJfQogCiAJCXBwYzY0X3J1bmxhdGNoX29uKCk7CisJCXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWQoKTsKIAkJc2NoZWR1bGUoKTsKKwkJcHJlZW1wdF9kaXNhYmxlKCk7CiAJfQogfQogCkBAIC05MzEsNyArOTMwLDcgQEAKIAlkdF9lbmRfbm9kZShkdCk7CiB9CiAKLXZvaWQgYnVpbGRfZmxhdF9kdChzdHJ1Y3QgaXNlcmllc19mbGF0X2R0ICpkdCkKK3ZvaWQgYnVpbGRfZmxhdF9kdChzdHJ1Y3QgaXNlcmllc19mbGF0X2R0ICpkdCwgdW5zaWduZWQgbG9uZyBwaHlzX21lbV9zaXplKQogewogCXU2NCB0bXBbMl07CiAKQEAgLTk0Nyw3ICs5NDYsNyBAQAogCWR0X3Byb3Bfc3RyKGR0LCAibmFtZSIsICJtZW1vcnkiKTsKIAlkdF9wcm9wX3N0cihkdCwgImRldmljZV90eXBlIiwgIm1lbW9yeSIpOwogCXRtcFswXSA9IDA7Ci0JdG1wWzFdID0gc3lzdGVtY2ZnLT5waHlzaWNhbE1lbW9yeVNpemU7CisJdG1wWzFdID0gcGh5c19tZW1fc2l6ZTsKIAlkdF9wcm9wX3U2NF9saXN0KGR0LCAicmVnIiwgdG1wLCAyKTsKIAlkdF9lbmRfbm9kZShkdCk7CiAKQEAgLTk2NywxMyArOTY2LDE1IEBACiAKIHZvaWQgKiBfX2luaXQgaVNlcmllc19lYXJseV9zZXR1cCh2b2lkKQogeworCXVuc2lnbmVkIGxvbmcgcGh5c19tZW1fc2l6ZTsKKwogCWlTZXJpZXNfZml4dXBfa2xpbWl0KCk7CiAKIAkvKgogCSAqIEluaXRpYWxpemUgdGhlIHRhYmxlIHdoaWNoIHRyYW5zbGF0ZSBMaW51eCBwaHlzaWNhbCBhZGRyZXNzZXMgdG8KIAkgKiBBUy80MDAgYWJzb2x1dGUgYWRkcmVzc2VzCiAJICovCi0JYnVpbGRfaVNlcmllc19NZW1vcnlfTWFwKCk7CisJcGh5c19tZW1fc2l6ZSA9IGJ1aWxkX2lTZXJpZXNfTWVtb3J5X01hcCgpOwogCiAJaVNlcmllc19nZXRfY21kbGluZSgpOwogCkBAIC05ODMsNyArOTg0LDcgQEAKIAkvKiBQYXJzZSBlYXJseSBwYXJhbWV0ZXJzLCBpbiBwYXJ0aWN1bGFyIG1lbT14ICovCiAJcGFyc2VfZWFybHlfcGFyYW0oKTsKIAotCWJ1aWxkX2ZsYXRfZHQoJmlzZXJpZXNfZHQpOworCWJ1aWxkX2ZsYXRfZHQoJmlzZXJpZXNfZHQsIHBoeXNfbWVtX3NpemUpOwogCiAJcmV0dXJuICh2b2lkICopIF9fcGEoJmlzZXJpZXNfZHQpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9tYXBsZS9wY2kuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvbWFwbGUvcGNpLmMKaW5kZXggMzQwYzIxYy4uODk1YWViMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9tYXBsZS9wY2kuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL21hcGxlL3BjaS5jCkBAIC0zODAsOSArMzgwLDYgQEAKIAlmb3JfZWFjaF9wY2lfZGV2KGRldikKIAkJcGNpX3JlYWRfaXJxX2xpbmUoZGV2KTsKIAotCS8qIERvIHRoZSBtYXBwaW5nIG9mIHRoZSBJTyBzcGFjZSAqLwotCXBoYnNfcmVtYXBfaW8oKTsKLQogCURCRygiIDwtIG1hcGxlX3BjaWJpb3NfZml4dXBcbiIpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BjaS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9wY2kuYwppbmRleCA4ZjgxOGQwLi5kZmQ0MWI5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BjaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGNpLmMKQEAgLTkxOCw5ICs5MTgsNiBAQAogCQkJUENJX0ROKG5wKS0+YnVzbm8gPSAweGYwOwogCX0KIAotCS8qIG1hcCBpbiBQQ0kgSS9PIHNwYWNlICovCi0JcGhic19yZW1hcF9pbygpOwotCiAJLyogcG1hY19jaGVja19odF9saW5rKCk7ICovCiAKIAkvKiBUZWxsIHBjaS5jIHRvIG5vdCB1c2UgdGhlIGNvbW1vbiByZXNvdXJjZSBhbGxvY2F0aW9uIG1lY2hhbmlzbSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9waWMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGljLmMKaW5kZXggODNhNDllOC4uOTAwNDBjNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9waWMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BpYy5jCkBAIC03NCw2ICs3NCw5IEBACiAjZGVmaW5lIEdBVFdJQ0tfSVJRX1BPT0xfU0laRSAgICAgICAgMTAKIHN0YXRpYyBzdHJ1Y3QgaW50ZXJydXB0X2luZm8gZ2F0d2lja19pbnRfcG9vbFtHQVRXSUNLX0lSUV9QT09MX1NJWkVdOwogCisjZGVmaW5lIE5SX01BU0tfV09SRFMJKChOUl9JUlFTICsgMzEpIC8gMzIpCitzdGF0aWMgdW5zaWduZWQgbG9uZyBwcGNfbG9zdF9pbnRlcnJ1cHRzW05SX01BU0tfV09SRFNdOworCiAvKgogICogTWFyayBhbiBpcnEgYXMgImxvc3QiLiAgVGhpcyBpcyBvbmx5IHVzZWQgb24gdGhlIHBtYWMKICAqIHNpbmNlIGl0IGNhbiBsb3NlIGludGVycnVwdHMgKHNlZSBwbWFjX3NldF9pcnFfbWFzaykuCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3NtcC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9zbXAuYwppbmRleCBlMWY5NDQzLi45NTdiMDkxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3NtcC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvc21wLmMKQEAgLTMwNSw5ICszMDUsMTkgQEAKIAlwc3VyZ2Vfc3RhcnQgPSBpb3JlbWFwKFBTVVJHRV9TVEFSVCwgNCk7CiAJcHN1cmdlX3ByaV9pbnRyID0gaW9yZW1hcChQU1VSR0VfUFJJX0lOVFIsIDQpOwogCi0JLyogdGhpcyBpcyBub3QgYWN0dWFsbHkgc3RyaWN0bHkgbmVjZXNzYXJ5IC0tIHBhdWx1cy4gKi8KLQlmb3IgKGkgPSAxOyBpIDwgbmNwdXM7ICsraSkKLQkJc21wX2h3X2luZGV4W2ldID0gaTsKKwkvKgorCSAqIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgT0YgZG9lc24ndCBrbm93IGFib3V0IHRoZQorCSAqIHNlY29uZGFyeSBjcHUocyksIGFuZCB0aHVzIHRoZXJlIGFyZW4ndCBub2RlcyBpbiB0aGUKKwkgKiBkZXZpY2UgdHJlZSBmb3IgdGhlbSwgYW5kIHNtcF9zZXR1cF9jcHVfbWFwcyBoYXNuJ3QKKwkgKiBzZXQgdGhlaXIgYml0cyBpbiBjcHVfcG9zc2libGVfbWFwIGFuZCBjcHVfcHJlc2VudF9tYXAuCisJICovCisJaWYgKG5jcHVzID4gTlJfQ1BVUykKKwkJbmNwdXMgPSBOUl9DUFVTOworCWZvciAoaSA9IDE7IGkgPCBuY3B1cyA7ICsraSkgeworCQljcHVfc2V0KGksIGNwdV9wcmVzZW50X21hcCk7CisJCWNwdV9zZXQoaSwgY3B1X3Bvc3NpYmxlX21hcCk7CisJCXNldF9oYXJkX3NtcF9wcm9jZXNzb3JfaWQoaSwgaSk7CisJfQogCiAJaWYgKHBwY19tZC5wcm9ncmVzcykgcHBjX21kLnByb2dyZXNzKCJzbXBfcHN1cmdlX3Byb2JlIC0gZG9uZSIsIDB4MzUyKTsKIApAQCAtMzQ4LDYgKzM1OCw3IEBACiAJaW50IHQ7CiAKIAlzZXRfZGVjKHRiX3RpY2tzX3Blcl9qaWZmeSk7CisJLyogWFhYIGZpeG1lICovCiAJc2V0X3RiKDAsIDApOwogCWxhc3RfamlmZnlfc3RhbXAoY3B1X25yKSA9IDA7CiAKQEAgLTM2Myw4ICszNzQsNiBAQAogCiAJLyogbm93IGludGVycnVwdCB0aGUgc2Vjb25kYXJ5LCBzdGFydGluZyBib3RoIFRCcyAqLwogCXBzdXJnZV9zZXRfaXBpKDEpOwotCi0Jc21wX3RiX3N5bmNocm9uaXplZCA9IDE7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIHBzdXJnZV9pcnFhY3Rpb24gPSB7CkBAIC02MjUsOSArNjM0LDggQEAKIAlmb3IgKHQgPSAxMDAwMDA7IHQgPiAwICYmIHNlY190Yl9yZXNldDsgLS10KQogCQl1ZGVsYXkoMTApOwogCWlmIChzZWNfdGJfcmVzZXQpCisJCS8qIFhYWCBCVUdfT04gaGVyZT8gKi8KIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiVGltZW91dCB3YWl0aW5nIHN5bmMoMikgb24gc2Vjb25kIENQVVxuIik7Ci0JZWxzZQotCQlzbXBfdGJfc3luY2hyb25pemVkID0gMTsKIAogCS8qIE5vdywgcmVzdGFydCB0aGUgdGltZWJhc2UgYnkgbGVhdmluZyB0aGUgR1BJTyB0byBhbiBvcGVuIGNvbGxlY3RvciAqLwogICAgICAgIAlwbWFjX2NhbGxfZmVhdHVyZShQTUFDX0ZUUl9XUklURV9HUElPLCBOVUxMLCBjb3JlOTlfdGJfZ3BpbywgMCk7CkBAIC04MTAsMTkgKzgxOCw5IEBACiB9CiAKIAotLyogQ29yZTk5IE1hY3MgKGR1YWwgRzRzIGFuZCBHNXMpICovCi1zdHJ1Y3Qgc21wX29wc190IGNvcmU5OV9zbXBfb3BzID0gewotCS5tZXNzYWdlX3Bhc3MJPSBzbXBfbXBpY19tZXNzYWdlX3Bhc3MsCi0JLnByb2JlCQk9IHNtcF9jb3JlOTlfcHJvYmUsCi0JLmtpY2tfY3B1CT0gc21wX2NvcmU5OV9raWNrX2NwdSwKLQkuc2V0dXBfY3B1CT0gc21wX2NvcmU5OV9zZXR1cF9jcHUsCi0JLmdpdmVfdGltZWJhc2UJPSBzbXBfY29yZTk5X2dpdmVfdGltZWJhc2UsCi0JLnRha2VfdGltZWJhc2UJPSBzbXBfY29yZTk5X3Rha2VfdGltZWJhc2UsCi19OwotCiAjaWYgZGVmaW5lZChDT05GSUdfSE9UUExVR19DUFUpICYmIGRlZmluZWQoQ09ORklHX1BQQzMyKQogCi1pbnQgX19jcHVfZGlzYWJsZSh2b2lkKQoraW50IHNtcF9jb3JlOTlfY3B1X2Rpc2FibGUodm9pZCkKIHsKIAljcHVfY2xlYXIoc21wX3Byb2Nlc3Nvcl9pZCgpLCBjcHVfb25saW5lX21hcCk7CiAKQEAgLTg0Niw3ICs4NDQsNyBAQAogCWxvd19jcHVfZGllKCk7CiB9CiAKLXZvaWQgX19jcHVfZGllKHVuc2lnbmVkIGludCBjcHUpCit2b2lkIHNtcF9jb3JlOTlfY3B1X2RpZSh1bnNpZ25lZCBpbnQgY3B1KQogewogCWludCB0aW1lb3V0OwogCkBAIC04NTgsOCArODU2LDIxIEBACiAJCX0KIAkJbXNsZWVwKDEpOwogCX0KLQljcHVfY2FsbGluX21hcFtjcHVdID0gMDsKIAljcHVfZGVhZFtjcHVdID0gMDsKIH0KIAogI2VuZGlmCisKKy8qIENvcmU5OSBNYWNzIChkdWFsIEc0cyBhbmQgRzVzKSAqLworc3RydWN0IHNtcF9vcHNfdCBjb3JlOTlfc21wX29wcyA9IHsKKwkubWVzc2FnZV9wYXNzCT0gc21wX21waWNfbWVzc2FnZV9wYXNzLAorCS5wcm9iZQkJPSBzbXBfY29yZTk5X3Byb2JlLAorCS5raWNrX2NwdQk9IHNtcF9jb3JlOTlfa2lja19jcHUsCisJLnNldHVwX2NwdQk9IHNtcF9jb3JlOTlfc2V0dXBfY3B1LAorCS5naXZlX3RpbWViYXNlCT0gc21wX2NvcmU5OV9naXZlX3RpbWViYXNlLAorCS50YWtlX3RpbWViYXNlCT0gc21wX2NvcmU5OV90YWtlX3RpbWViYXNlLAorI2lmIGRlZmluZWQoQ09ORklHX0hPVFBMVUdfQ1BVKSAmJiBkZWZpbmVkKENPTkZJR19QUEMzMikKKwkuY3B1X2Rpc2FibGUJPSBzbXBfY29yZTk5X2NwdV9kaXNhYmxlLAorCS5jcHVfZGllCT0gc21wX2NvcmU5OV9jcHVfZGllLAorI2VuZGlmCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL01ha2VmaWxlCmluZGV4IGI5OTM4ZmUuLmU3Y2E1YjEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9NYWtlZmlsZQorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvTWFrZWZpbGUKQEAgLTMsMyArMyw1IEBACiBvYmotJChDT05GSUdfU01QKQkrPSBzbXAubwogb2JqLSQoQ09ORklHX0lCTVZJTykJKz0gdmlvLm8KIG9iai0kKENPTkZJR19YSUNTKQkrPSB4aWNzLm8KK29iai0kKENPTkZJR19TQ0FOTE9HKQkrPSBzY2FubG9nLm8KK29iai0kKENPTkZJR19FRUgpICAgICs9IGVlaC5vIGVlaF9ldmVudC5vCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC9lZWguYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWguYwpzaW1pbGFyaXR5IGluZGV4IDYzJQpyZW5hbWUgZnJvbSBhcmNoL3BwYzY0L2tlcm5lbC9lZWguYwpyZW5hbWUgdG8gYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaC5jCmluZGV4IDAzNWQxYjEuLjc5ZGUyMzEgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQva2VybmVsL2VlaC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWguYwpAQCAtMSwzOSArMSwzNyBAQAogLyoKICAqIGVlaC5jCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEgRGF2ZSBFbmdlYnJldHNlbiAmIFRvZGQgSW5nbGV0dCBJQk0gQ29ycG9yYXRpb24KLSAqIAorICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKICAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKiAKKyAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICogCisgKgogICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKICAqLwogCi0jaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3JidHJlZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAjaW5jbHVkZSA8YXNtL2VlaC5oPgorI2luY2x1ZGUgPGFzbS9lZWhfZXZlbnQuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgotI2luY2x1ZGUgPGFzbS9ydGFzLmg+Ci0jaW5jbHVkZSA8YXNtL2F0b21pYy5oPgotI2luY2x1ZGUgPGFzbS9zeXN0ZW1jZmcuaD4KICNpbmNsdWRlIDxhc20vcHBjLXBjaS5oPgorI2luY2x1ZGUgPGFzbS9ydGFzLmg+CiAKICN1bmRlZiBERUJVRwogCkBAIC00OSw4ICs0Nyw4IEBACiAgKiAgd2VyZSAiZW1wdHkiOiBhbGwgcmVhZHMgcmV0dXJuIDB4ZmYncyBhbmQgYWxsIHdyaXRlcyBhcmUgc2lsZW50bHkKICAqICBpZ25vcmVkLiAgRUVIIHNsb3QgaXNvbGF0aW9uIGV2ZW50cyBjYW4gYmUgdHJpZ2dlcmVkIGJ5IHBhcml0eQogICogIGVycm9ycyBvbiB0aGUgYWRkcmVzcyBvciBkYXRhIGJ1c3NlcyAoZS5nLiBkdXJpbmcgcG9zdGVkIHdyaXRlcyksCi0gKiAgd2hpY2ggaW4gdHVybiBtaWdodCBiZSBjYXVzZWQgYnkgZHVzdCwgdmlicmF0aW9uLCBodW1pZGl0eSwKLSAqICByYWRpb2FjdGl2aXR5IG9yIHBsYWluLW9sZCBmYWlsZWQgaGFyZHdhcmUuCisgKiAgd2hpY2ggaW4gdHVybiBtaWdodCBiZSBjYXVzZWQgYnkgbG93IHZvbHRhZ2Ugb24gdGhlIGJ1cywgZHVzdCwKKyAqICB2aWJyYXRpb24sIGh1bWlkaXR5LCByYWRpb2FjdGl2aXR5IG9yIHBsYWluLW9sZCBmYWlsZWQgaGFyZHdhcmUuCiAgKgogICogIE5vdGUsIGhvd2V2ZXIsIHRoYXQgb25lIG9mIHRoZSBsZWFkaW5nIGNhdXNlcyBvZiBFRUggc2xvdAogICogIGZyZWV6ZSBldmVudHMgYXJlIGJ1Z2d5IGRldmljZSBkcml2ZXJzLCBidWdneSBkZXZpY2UgbWljcm9jb2RlLApAQCAtNzEsMjYgKzY5LDE1IEBACiAgKiAgYW5kIHNlbnQgb3V0IGZvciBwcm9jZXNzaW5nLgogICovCiAKLS8qKiBCdXMgVW5pdCBJRCBtYWNyb3M7IGdldCBsb3cgYW5kIGhpIDMyLWJpdHMgb2YgdGhlIDY0LWJpdCBCVUlEICovCi0jZGVmaW5lIEJVSURfSEkoYnVpZCkgKChidWlkKSA+PiAzMikKLSNkZWZpbmUgQlVJRF9MTyhidWlkKSAoKGJ1aWQpICYgMHhmZmZmZmZmZikKLQotLyogRUVIIGV2ZW50IHdvcmtxdWV1ZSBzZXR1cC4gKi8KLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soZWVoX2V2ZW50bGlzdF9sb2NrKTsKLUxJU1RfSEVBRChlZWhfZXZlbnRsaXN0KTsKLXN0YXRpYyB2b2lkIGVlaF9ldmVudF9oYW5kbGVyKHZvaWQgKik7Ci1ERUNMQVJFX1dPUksoZWVoX2V2ZW50X3dxLCBlZWhfZXZlbnRfaGFuZGxlciwgTlVMTCk7Ci0KLXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKmVlaF9ub3RpZmllcl9jaGFpbjsKLQotLyoKLSAqIElmIGEgZGV2aWNlIGRyaXZlciBrZWVwcyByZWFkaW5nIGFuIE1NSU8gcmVnaXN0ZXIgaW4gYW4gaW50ZXJydXB0CisvKiBJZiBhIGRldmljZSBkcml2ZXIga2VlcHMgcmVhZGluZyBhbiBNTUlPIHJlZ2lzdGVyIGluIGFuIGludGVycnVwdAogICogaGFuZGxlciBhZnRlciBhIHNsb3QgaXNvbGF0aW9uIGV2ZW50IGhhcyBvY2N1cnJlZCwgd2UgYXNzdW1lIGl0CiAgKiBpcyBicm9rZW4gYW5kIHBhbmljLiAgVGhpcyBzZXRzIHRoZSB0aHJlc2hvbGQgZm9yIGhvdyBtYW55IHJlYWQKICAqIGF0dGVtcHRzIHdlIGFsbG93IGJlZm9yZSBwYW5pY2tpbmcuCiAgKi8KLSNkZWZpbmUgRUVIX01BWF9GQUlMUwkxMDAwCi1zdGF0aWMgYXRvbWljX3QgZWVoX2ZhaWxfY291bnQ7CisjZGVmaW5lIEVFSF9NQVhfRkFJTFMJMTAwMDAwCisKKy8qIE1pc2MgZm9yd2FyZCBkZWNsYXJhaW9ucyAqLworc3RhdGljIHZvaWQgZWVoX3NhdmVfYmFycyhzdHJ1Y3QgcGNpX2RldiAqIHBkZXYsIHN0cnVjdCBwY2lfZG4gKnBkbik7CiAKIC8qIFJUQVMgdG9rZW5zICovCiBzdGF0aWMgaW50IGlibV9zZXRfZWVoX29wdGlvbjsKQEAgLTEwMSwxMiArODgsMTkgQEAKIAogc3RhdGljIGludCBlZWhfc3Vic3lzdGVtX2VuYWJsZWQ7CiAKKy8qIExvY2sgdG8gYXZvaWQgcmFjZXMgZHVlIHRvIG11bHRpcGxlIHJlcG9ydHMgb2YgYW4gZXJyb3IgKi8KK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soY29uZmlybV9lcnJvcl9sb2NrKTsKKwogLyogQnVmZmVyIGZvciByZXBvcnRpbmcgc2xvdC1lcnJvci1kZXRhaWwgcnRhcyBjYWxscyAqLwogc3RhdGljIHVuc2lnbmVkIGNoYXIgc2xvdF9lcnJidWZbUlRBU19FUlJPUl9MT0dfTUFYXTsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soc2xvdF9lcnJidWZfbG9jayk7CiBzdGF0aWMgaW50IGVlaF9lcnJvcl9idWZfc2l6ZTsKIAogLyogU3lzdGVtIG1vbml0b3Jpbmcgc3RhdGlzdGljcyAqLworc3RhdGljIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIG5vX2RldmljZSk7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZywgbm9fZG4pOworc3RhdGljIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIG5vX2NmZ19hZGRyKTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCBpZ25vcmVkX2NoZWNrKTsKIHN0YXRpYyBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCB0b3RhbF9tbWlvX2Zmcyk7CiBzdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZywgZmFsc2VfcG9zaXRpdmVzKTsKIHN0YXRpYyBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCBpZ25vcmVkX2ZhaWx1cmVzKTsKQEAgLTIyNCw5ICsyMTgsOSBAQAogCXdoaWxlICgqcCkgewogCQlwYXJlbnQgPSAqcDsKIAkJcGlhciA9IHJiX2VudHJ5KHBhcmVudCwgc3RydWN0IHBjaV9pb19hZGRyX3JhbmdlLCByYl9ub2RlKTsKLQkJaWYgKGFsbyA8IHBpYXItPmFkZHJfbG8pIHsKKwkJaWYgKGFoaSA8IHBpYXItPmFkZHJfbG8pIHsKIAkJCXAgPSAmcGFyZW50LT5yYl9sZWZ0OwotCQl9IGVsc2UgaWYgKGFoaSA+IHBpYXItPmFkZHJfaGkpIHsKKwkJfSBlbHNlIGlmIChhbG8gPiBwaWFyLT5hZGRyX2hpKSB7CiAJCQlwID0gJnBhcmVudC0+cmJfcmlnaHQ7CiAJCX0gZWxzZSB7CiAJCQlpZiAoZGV2ICE9IHBpYXItPnBjaWRldiB8fApAQCAtMjQ1LDYgKzIzOSwxMSBAQAogCXBpYXItPnBjaWRldiA9IGRldjsKIAlwaWFyLT5mbGFncyA9IGZsYWdzOwogCisjaWZkZWYgREVCVUcKKwlwcmludGsoS0VSTl9ERUJVRyAiUElBUjogaW5zZXJ0IHJhbmdlPVslbHg6JWx4XSBkZXY9JXNcbiIsCisJICAgICAgICAgICAgICAgICAgYWxvLCBhaGksIHBjaV9uYW1lIChkZXYpKTsKKyNlbmRpZgorCiAJcmJfbGlua19ub2RlKCZwaWFyLT5yYl9ub2RlLCBwYXJlbnQsIHApOwogCXJiX2luc2VydF9jb2xvcigmcGlhci0+cmJfbm9kZSwgJnBjaV9pb19hZGRyX2NhY2hlX3Jvb3QucmJfcm9vdCk7CiAKQEAgLTI2MCwxOCArMjU5LDE3IEBACiAKIAlkbiA9IHBjaV9kZXZpY2VfdG9fT0Zfbm9kZShkZXYpOwogCWlmICghZG4pIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiUENJOiBubyBwY2kgZG4gZm91bmQgZm9yIGRldj0lc1xuIiwKLQkJCXBjaV9uYW1lKGRldikpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJQQ0k6IG5vIHBjaSBkbiBmb3VuZCBmb3IgZGV2PSVzXG4iLCBwY2lfbmFtZShkZXYpKTsKIAkJcmV0dXJuOwogCX0KIAogCS8qIFNraXAgYW55IGRldmljZXMgZm9yIHdoaWNoIEVFSCBpcyBub3QgZW5hYmxlZC4gKi8KLQlwZG4gPSBkbi0+ZGF0YTsKKwlwZG4gPSBQQ0lfRE4oZG4pOwogCWlmICghKHBkbi0+ZWVoX21vZGUgJiBFRUhfTU9ERV9TVVBQT1JURUQpIHx8CiAJICAgIHBkbi0+ZWVoX21vZGUgJiBFRUhfTU9ERV9OT0NIRUNLKSB7CiAjaWZkZWYgREVCVUcKLQkJcHJpbnRrKEtFUk5fSU5GTyAiUENJOiBza2lwIGJ1aWxkaW5nIGFkZHJlc3MgY2FjaGUgZm9yPSVzXG4iLAotCQkgICAgICAgcGNpX25hbWUoZGV2KSk7CisJCXByaW50ayhLRVJOX0lORk8gIlBDSTogc2tpcCBidWlsZGluZyBhZGRyZXNzIGNhY2hlIGZvcj0lcyAtICVzXG4iLAorCQkgICAgICAgcGNpX25hbWUoZGV2KSwgcGRuLT5ub2RlLT5mdWxsX25hbWUpOwogI2VuZGlmCiAJCXJldHVybjsKIAl9CkBAIC0zMDcsNyArMzA1LDcgQEAKICAqIHdlIG1haW50YWluIGEgY2FjaGUgb2YgZGV2aWNlcyB0aGF0IGNhbiBiZSBxdWlja2x5IHNlYXJjaGVkLgogICogVGhpcyByb3V0aW5lIGFkZHMgYSBkZXZpY2UgdG8gdGhhdCBjYWNoZS4KICAqLwotdm9pZCBwY2lfYWRkcl9jYWNoZV9pbnNlcnRfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCitzdGF0aWMgdm9pZCBwY2lfYWRkcl9jYWNoZV9pbnNlcnRfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtMzUwLDcgKzM0OCw3IEBACiAgKiB0aGUgdHJlZSBtdWx0aXBsZSB0aW1lcyAob25jZSBwZXIgcmVzb3VyY2UpLgogICogQnV0IHNvIHdoYXQ7IGRldmljZSByZW1vdmFsIGRvZXNuJ3QgbmVlZCB0byBiZSB0aGF0IGZhc3QuCiAgKi8KLXZvaWQgcGNpX2FkZHJfY2FjaGVfcmVtb3ZlX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQorc3RhdGljIHZvaWQgcGNpX2FkZHJfY2FjaGVfcmVtb3ZlX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTM3MCw4ICszNjgsMTIgQEAKICAqLwogdm9pZCBfX2luaXQgcGNpX2FkZHJfY2FjaGVfYnVpbGQodm9pZCkKIHsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuOwogCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBOVUxMOwogCisJaWYgKCFlZWhfc3Vic3lzdGVtX2VuYWJsZWQpCisJCXJldHVybjsKKwogCXNwaW5fbG9ja19pbml0KCZwY2lfaW9fYWRkcl9jYWNoZV9yb290LnBpYXJfbG9jayk7CiAKIAl3aGlsZSAoKGRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIGRldikpICE9IE5VTEwpIHsKQEAgLTM4MCw2ICszODIsMTAgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAJCXBjaV9hZGRyX2NhY2hlX2luc2VydF9kZXZpY2UoZGV2KTsKKworCQkvKiBTYXZlIHRoZSBCQVInczsgZmlybXdhcmUgZG9lc24ndCByZXN0b3JlIHRoZXNlIGFmdGVyIEVFSCByZXNldCAqLworCQlkbiA9IHBjaV9kZXZpY2VfdG9fT0Zfbm9kZShkZXYpOworCQllZWhfc2F2ZV9iYXJzKGRldiwgUENJX0ROKGRuKSk7CiAJfQogCiAjaWZkZWYgREVCVUcKQEAgLTM5MSwyMiArMzk3LDI2IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIEFib3ZlIGxpZXMgdGhlIFBDSSBBZGRyZXNzIENhY2hlLiBCZWxvdyBsaWVzIHRoZSBFRUggZXZlbnQgaW5mcmFzdHJ1Y3R1cmUgKi8KIAotLyoqCi0gKiBlZWhfcmVnaXN0ZXJfbm90aWZpZXIgLSBSZWdpc3RlciB0byBmaW5kIG91dCBhYm91dCBFRUggZXZlbnRzLgotICogQG5iOiBub3RpZmllciBibG9jayB0byBjYWxsYmFjayBvbiBldmVudHMKLSAqLwotaW50IGVlaF9yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKQordm9pZCBlZWhfc2xvdF9lcnJvcl9kZXRhaWwgKHN0cnVjdCBwY2lfZG4gKnBkbiwgaW50IHNldmVyaXR5KQogewotCXJldHVybiBub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmZWVoX25vdGlmaWVyX2NoYWluLCBuYik7Ci19CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmM7CiAKLS8qKgotICogZWVoX3VucmVnaXN0ZXJfbm90aWZpZXIgLSBVbnJlZ2lzdGVyIHRvIGFuIEVFSCBldmVudCBub3RpZmllci4KLSAqIEBuYjogbm90aWZpZXIgYmxvY2sgdG8gY2FsbGJhY2sgb24gZXZlbnRzCi0gKi8KLWludCBlZWhfdW5yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKQotewotCXJldHVybiBub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyKCZlZWhfbm90aWZpZXJfY2hhaW4sIG5iKTsKKwkvKiBMb2cgdGhlIGVycm9yIHdpdGggdGhlIHJ0YXMgbG9nZ2VyICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNsb3RfZXJyYnVmX2xvY2ssIGZsYWdzKTsKKwltZW1zZXQoc2xvdF9lcnJidWYsIDAsIGVlaF9lcnJvcl9idWZfc2l6ZSk7CisKKwlyYyA9IHJ0YXNfY2FsbChpYm1fc2xvdF9lcnJvcl9kZXRhaWwsCisJICAgICAgICAgICAgICAgOCwgMSwgTlVMTCwgcGRuLT5lZWhfY29uZmlnX2FkZHIsCisJICAgICAgICAgICAgICAgQlVJRF9ISShwZG4tPnBoYi0+YnVpZCksCisJICAgICAgICAgICAgICAgQlVJRF9MTyhwZG4tPnBoYi0+YnVpZCksIE5VTEwsIDAsCisJICAgICAgICAgICAgICAgdmlydF90b19waHlzKHNsb3RfZXJyYnVmKSwKKwkgICAgICAgICAgICAgICBlZWhfZXJyb3JfYnVmX3NpemUsCisJICAgICAgICAgICAgICAgc2V2ZXJpdHkpOworCisJaWYgKHJjID09IDApCisJCWxvZ19lcnJvcihzbG90X2VycmJ1ZiwgRVJSX1RZUEVfUlRBU19MT0csIDApOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNsb3RfZXJyYnVmX2xvY2ssIGZsYWdzKTsKIH0KIAogLyoqCkBAIC00MTQsMTYgKzQyNCwxNiBAQAogICogQGRuOiBkZXZpY2Ugbm9kZSB0byByZWFkCiAgKiBAcmV0czogYXJyYXkgdG8gcmV0dXJuIHJlc3VsdHMgaW4KICAqLwotc3RhdGljIGludCByZWFkX3Nsb3RfcmVzZXRfc3RhdGUoc3RydWN0IGRldmljZV9ub2RlICpkbiwgaW50IHJldHNbXSkKK3N0YXRpYyBpbnQgcmVhZF9zbG90X3Jlc2V0X3N0YXRlKHN0cnVjdCBwY2lfZG4gKnBkbiwgaW50IHJldHNbXSkKIHsKIAlpbnQgdG9rZW4sIG91dHB1dHM7Ci0Jc3RydWN0IHBjaV9kbiAqcGRuID0gZG4tPmRhdGE7CiAKIAlpZiAoaWJtX3JlYWRfc2xvdF9yZXNldF9zdGF0ZTIgIT0gUlRBU19VTktOT1dOX1NFUlZJQ0UpIHsKIAkJdG9rZW4gPSBpYm1fcmVhZF9zbG90X3Jlc2V0X3N0YXRlMjsKIAkJb3V0cHV0cyA9IDQ7CiAJfSBlbHNlIHsKIAkJdG9rZW4gPSBpYm1fcmVhZF9zbG90X3Jlc2V0X3N0YXRlOworCQlyZXRzWzJdID0gMDsgLyogZmFrZSBQRSBVbmF2YWlsYWJsZSBpbmZvICovCiAJCW91dHB1dHMgPSAzOwogCX0KIApAQCAtNDMyLDc1ICs0NDIsOCBAQAogfQogCiAvKioKLSAqIGVlaF9wYW5pYyAtIGNhbGwgcGFuaWMoKSBmb3IgYW4gZWVoIGV2ZW50IHRoYXQgY2Fubm90IGJlIGhhbmRsZWQuCi0gKiBUaGUgcGhpbG9zb3BoeSBvZiB0aGlzIHJvdXRpbmUgaXMgdGhhdCBpdCBpcyBiZXR0ZXIgdG8gcGFuaWMgYW5kCi0gKiBoYWx0IHRoZSBPUyB0aGFuIGl0IGlzIHRvIHJpc2sgcG9zc2libGUgZGF0YSBjb3JydXB0aW9uIGJ5Ci0gKiBvYmxpdmlvdXMgZGV2aWNlIGRyaXZlcnMgdGhhdCBkb24ndCBrbm93IGJldHRlci4KLSAqCi0gKiBAZGV2IHBjaSBkZXZpY2UgdGhhdCBoYWQgYW4gZWVoIGV2ZW50Ci0gKiBAcmVzZXRfc3RhdGUgY3VycmVudCByZXNldCBzdGF0ZSBvZiB0aGUgZGV2aWNlIHNsb3QKLSAqLwotc3RhdGljIHZvaWQgZWVoX3BhbmljKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCByZXNldF9zdGF0ZSkKLXsKLQkvKgotCSAqIFhYWCBXZSBzaG91bGQgY3JlYXRlIGEgc2VwYXJhdGUgc3lzY3RsIGZvciB0aGlzLgotCSAqCi0JICogU2luY2UgdGhlIHBhbmljX29uX29vcHMgc3lzY3RsIGlzIHVzZWQgdG8gaGFsdCB0aGUgc3lzdGVtCi0JICogaW4gbGlnaHQgb2YgcG90ZW50aWFsIGNvcnJ1cHRpb24sIHdlIGNhbiB1c2UgaXQgaGVyZS4KLQkgKi8KLQlpZiAocGFuaWNfb25fb29wcykKLQkJcGFuaWMoIkVFSDogTU1JTyBmYWlsdXJlICglZCkgb24gZGV2aWNlOiVzXG4iLCByZXNldF9zdGF0ZSwKLQkJICAgICAgcGNpX25hbWUoZGV2KSk7Ci0JZWxzZSB7Ci0JCV9fZ2V0X2NwdV92YXIoaWdub3JlZF9mYWlsdXJlcykrKzsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiRUVIOiBJZ25vcmVkIE1NSU8gZmFpbHVyZSAoJWQpIG9uIGRldmljZTolc1xuIiwKLQkJICAgICAgIHJlc2V0X3N0YXRlLCBwY2lfbmFtZShkZXYpKTsKLQl9Ci19Ci0KLS8qKgotICogZWVoX2V2ZW50X2hhbmRsZXIgLSBkaXNwYXRjaCBFRUggZXZlbnRzLiAgVGhlIGRldGVjdGlvbiBvZiBhIGZyb3plbgotICogc2xvdCBjYW4gb2NjdXIgaW5zaWRlIGFuIGludGVycnVwdCwgd2hlcmUgaXQgY2FuIGJlIGhhcmQgdG8gZG8KLSAqIGFueXRoaW5nIGFib3V0IGl0LiAgVGhlIGdvYWwgb2YgdGhpcyByb3V0aW5lIGlzIHRvIHB1bGwgdGhlc2UKLSAqIGRldGVjdGlvbiBldmVudHMgb3V0IG9mIHRoZSBjb250ZXh0IG9mIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciwgYW5kCi0gKiByZS1kaXNwYXRjaCB0aGVtIGZvciBwcm9jZXNzaW5nIGF0IGEgbGF0ZXIgdGltZSBpbiBhIG5vcm1hbCBjb250ZXh0LgotICoKLSAqIEBkdW1teSAtIHVudXNlZAotICovCi1zdGF0aWMgdm9pZCBlZWhfZXZlbnRfaGFuZGxlcih2b2lkICpkdW1teSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBlZWhfZXZlbnQJKmV2ZW50OwotCi0Jd2hpbGUgKDEpIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmVlaF9ldmVudGxpc3RfbG9jaywgZmxhZ3MpOwotCQlldmVudCA9IE5VTEw7Ci0JCWlmICghbGlzdF9lbXB0eSgmZWVoX2V2ZW50bGlzdCkpIHsKLQkJCWV2ZW50ID0gbGlzdF9lbnRyeShlZWhfZXZlbnRsaXN0Lm5leHQsIHN0cnVjdCBlZWhfZXZlbnQsIGxpc3QpOwotCQkJbGlzdF9kZWwoJmV2ZW50LT5saXN0KTsKLQkJfQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlZWhfZXZlbnRsaXN0X2xvY2ssIGZsYWdzKTsKLQkJaWYgKGV2ZW50ID09IE5VTEwpCi0JCQlicmVhazsKLQotCQlwcmludGsoS0VSTl9JTkZPICJFRUg6IE1NSU8gZmFpbHVyZSAoJWQpLCBub3RpZml5aW5nIGRldmljZSAiCi0JCSAgICAgICAiJXNcbiIsIGV2ZW50LT5yZXNldF9zdGF0ZSwKLQkJICAgICAgIHBjaV9uYW1lKGV2ZW50LT5kZXYpKTsKLQotCQlhdG9taWNfc2V0KCZlZWhfZmFpbF9jb3VudCwgMCk7Ci0JCW5vdGlmaWVyX2NhbGxfY2hhaW4gKCZlZWhfbm90aWZpZXJfY2hhaW4sCi0JCQkJICAgICBFRUhfTk9USUZZX0ZSRUVaRSwgZXZlbnQpOwotCi0JCV9fZ2V0X2NwdV92YXIoc2xvdF9yZXNldHMpKys7Ci0KLQkJcGNpX2Rldl9wdXQoZXZlbnQtPmRldik7Ci0JCWtmcmVlKGV2ZW50KTsKLQl9Ci19Ci0KLS8qKgogICogZWVoX3Rva2VuX3RvX3BoeXMgLSBjb252ZXJ0IEVFSCBhZGRyZXNzIHRva2VuIHRvIHBoeXMgYWRkcmVzcwotICogQHRva2VuIGkvbyB0b2tlbiwgc2hvdWxkIGJlIGFkZHJlc3MgaW4gdGhlIGZvcm0gMHhFLi4uLgorICogQHRva2VuIGkvbyB0b2tlbiwgc2hvdWxkIGJlIGFkZHJlc3MgaW4gdGhlIGZvcm0gMHhBLi4uLgogICovCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZWVoX3Rva2VuX3RvX3BoeXModW5zaWduZWQgbG9uZyB0b2tlbikKIHsKQEAgLTUxNSw2ICs0NTgsNzAgQEAKIAlyZXR1cm4gcGEgfCAodG9rZW4gJiAoUEFHRV9TSVpFLTEpKTsKIH0KIAorLyoqIAorICogUmV0dXJuIHRoZSAicGFydGl0aW9uYWJsZSBlbmRwb2ludCIgKHBlKSB1bmRlciB3aGljaCB0aGlzIGRldmljZSBsaWVzCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX25vZGUgKiBmaW5kX2RldmljZV9wZShzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuKQoreworCXdoaWxlICgoZG4tPnBhcmVudCkgJiYgUENJX0ROKGRuLT5wYXJlbnQpICYmCisJICAgICAgKFBDSV9ETihkbi0+cGFyZW50KS0+ZWVoX21vZGUgJiBFRUhfTU9ERV9TVVBQT1JURUQpKSB7CisJCWRuID0gZG4tPnBhcmVudDsKKwl9CisJcmV0dXJuIGRuOworfQorCisvKiogTWFyayBhbGwgZGV2aWNlcyB0aGF0IGFyZSBwZWVycyBvZiB0aGlzIGRldmljZSBhcyBmYWlsZWQuCisgKiAgTWFyayB0aGUgZGV2aWNlIGRyaXZlciB0b28sIHNvIHRoYXQgaXQgY2FuIHNlZSB0aGUgZmFpbHVyZQorICogIGltbWVkaWF0ZWx5OyB0aGlzIGlzIGNyaXRpY2FsLCBzaW5jZSBzb21lIGRyaXZlcnMgcG9sbAorICogIHN0YXR1cyByZWdpc3RlcnMgaW4gaW50ZXJydXB0cyAuLi4gSWYgYSBkcml2ZXIgaXMgcG9sbGluZywKKyAqICBhbmQgdGhlIHNsb3QgaXMgZnJvemVuLCB0aGVuIHRoZSBkcml2ZXIgY2FuIGRlYWRsb2NrIGluCisgKiAgYW4gaW50ZXJydXB0IGNvbnRleHQsIHdoaWNoIGlzIGJhZC4KKyAqLworCitzdGF0aWMgdm9pZCBfX2VlaF9tYXJrX3Nsb3QgKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4sIGludCBtb2RlX2ZsYWcpCit7CisJd2hpbGUgKGRuKSB7CisJCWlmIChQQ0lfRE4oZG4pKSB7CisJCQlQQ0lfRE4oZG4pLT5lZWhfbW9kZSB8PSBtb2RlX2ZsYWc7CisKKwkJCWlmIChkbi0+Y2hpbGQpCisJCQkJX19lZWhfbWFya19zbG90IChkbi0+Y2hpbGQsIG1vZGVfZmxhZyk7CisJCX0KKwkJZG4gPSBkbi0+c2libGluZzsKKwl9Cit9CisKK3ZvaWQgZWVoX21hcmtfc2xvdCAoc3RydWN0IGRldmljZV9ub2RlICpkbiwgaW50IG1vZGVfZmxhZykKK3sKKwlkbiA9IGZpbmRfZGV2aWNlX3BlIChkbik7CisJUENJX0ROKGRuKS0+ZWVoX21vZGUgfD0gbW9kZV9mbGFnOworCV9fZWVoX21hcmtfc2xvdCAoZG4tPmNoaWxkLCBtb2RlX2ZsYWcpOworfQorCitzdGF0aWMgdm9pZCBfX2VlaF9jbGVhcl9zbG90IChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuLCBpbnQgbW9kZV9mbGFnKQoreworCXdoaWxlIChkbikgeworCQlpZiAoUENJX0ROKGRuKSkgeworCQkJUENJX0ROKGRuKS0+ZWVoX21vZGUgJj0gfm1vZGVfZmxhZzsKKwkJCVBDSV9ETihkbiktPmVlaF9jaGVja19jb3VudCA9IDA7CisJCQlpZiAoZG4tPmNoaWxkKQorCQkJCV9fZWVoX2NsZWFyX3Nsb3QgKGRuLT5jaGlsZCwgbW9kZV9mbGFnKTsKKwkJfQorCQlkbiA9IGRuLT5zaWJsaW5nOworCX0KK30KKwordm9pZCBlZWhfY2xlYXJfc2xvdCAoc3RydWN0IGRldmljZV9ub2RlICpkbiwgaW50IG1vZGVfZmxhZykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXNwaW5fbG9ja19pcnFzYXZlKCZjb25maXJtX2Vycm9yX2xvY2ssIGZsYWdzKTsKKwlkbiA9IGZpbmRfZGV2aWNlX3BlIChkbik7CisJUENJX0ROKGRuKS0+ZWVoX21vZGUgJj0gfm1vZGVfZmxhZzsKKwlQQ0lfRE4oZG4pLT5lZWhfY2hlY2tfY291bnQgPSAwOworCV9fZWVoX2NsZWFyX3Nsb3QgKGRuLT5jaGlsZCwgbW9kZV9mbGFnKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb25maXJtX2Vycm9yX2xvY2ssIGZsYWdzKTsKK30KKwogLyoqCiAgKiBlZWhfZG5fY2hlY2tfZmFpbHVyZSAtIGNoZWNrIGlmIGFsbCAxJ3MgZGF0YSBpcyBkdWUgdG8gRUVIIHNsb3QgZnJlZXplCiAgKiBAZG4gZGV2aWNlIG5vZGUKQEAgLTUyNiw3ICs1MzMsNyBAQAogICogd2lsbCBxdWVyeSBmaXJtd2FyZSBmb3IgdGhlIEVFSCBzdGF0dXMuCiAgKgogICogUmV0dXJucyAwIGlmIHRoZXJlIGhhcyBub3QgYmVlbiBhbiBFRUggZXJyb3I7IG90aGVyd2lzZSByZXR1cm5zCi0gKiBhIG5vbi16ZXJvIHZhbHVlIGFuZCBxdWV1ZXMgdXAgYSBzb2x0IGlzb2xhdGlvbiBldmVudCBub3RpZmljYXRpb24uCisgKiBhIG5vbi16ZXJvIHZhbHVlIGFuZCBxdWV1ZXMgdXAgYSBzbG90IGlzb2xhdGlvbiBldmVudCBub3RpZmljYXRpb24uCiAgKgogICogSXQgaXMgc2FmZSB0byBjYWxsIHRoaXMgcm91dGluZSBpbiBhbiBpbnRlcnJ1cHQgY29udGV4dC4KICAqLwpAQCAtNTM1LDQyICs1NDIsNTkgQEAKIAlpbnQgcmV0OwogCWludCByZXRzWzNdOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJjLCByZXNldF9zdGF0ZTsKLQlzdHJ1Y3QgZWVoX2V2ZW50ICAqZXZlbnQ7CiAJc3RydWN0IHBjaV9kbiAqcGRuOworCWludCByYyA9IDA7CiAKIAlfX2dldF9jcHVfdmFyKHRvdGFsX21taW9fZmZzKSsrOwogCiAJaWYgKCFlZWhfc3Vic3lzdGVtX2VuYWJsZWQpCiAJCXJldHVybiAwOwogCi0JaWYgKCFkbikKKwlpZiAoIWRuKSB7CisJCV9fZ2V0X2NwdV92YXIobm9fZG4pKys7CiAJCXJldHVybiAwOwotCXBkbiA9IGRuLT5kYXRhOworCX0KKwlwZG4gPSBQQ0lfRE4oZG4pOwogCiAJLyogQWNjZXNzIHRvIElPIEJBUnMgbWlnaHQgZ2V0IHRoaXMgZmFyIGFuZCBzdGlsbCBub3Qgd2FudCBjaGVja2luZy4gKi8KLQlpZiAoIXBkbi0+ZWVoX2NhcGFibGUgfHwgIShwZG4tPmVlaF9tb2RlICYgRUVIX01PREVfU1VQUE9SVEVEKSB8fAorCWlmICghKHBkbi0+ZWVoX21vZGUgJiBFRUhfTU9ERV9TVVBQT1JURUQpIHx8CiAJICAgIHBkbi0+ZWVoX21vZGUgJiBFRUhfTU9ERV9OT0NIRUNLKSB7CisJCV9fZ2V0X2NwdV92YXIoaWdub3JlZF9jaGVjaykrKzsKKyNpZmRlZiBERUJVRworCQlwcmludGsgKCJFRUg6aWdub3JlZCBjaGVjayAoJXgpIGZvciAlcyAlc1xuIiwgCisJCSAgICAgICAgcGRuLT5lZWhfbW9kZSwgcGNpX25hbWUgKGRldiksIGRuLT5mdWxsX25hbWUpOworI2VuZGlmCiAJCXJldHVybiAwOwogCX0KIAogCWlmICghcGRuLT5lZWhfY29uZmlnX2FkZHIpIHsKKwkJX19nZXRfY3B1X3Zhcihub19jZmdfYWRkcikrKzsKIAkJcmV0dXJuIDA7CiAJfQogCi0JLyoKLQkgKiBJZiB3ZSBhbHJlYWR5IGhhdmUgYSBwZW5kaW5nIGlzb2xhdGlvbiBldmVudCBmb3IgdGhpcwotCSAqIHNsb3QsIHdlIGtub3cgaXQncyBiYWQgYWxyZWFkeSwgd2UgZG9uJ3QgbmVlZCB0byBjaGVjay4uLgorCS8qIElmIHdlIGFscmVhZHkgaGF2ZSBhIHBlbmRpbmcgaXNvbGF0aW9uIGV2ZW50IGZvciB0aGlzCisJICogc2xvdCwgd2Uga25vdyBpdCdzIGJhZCBhbHJlYWR5LCB3ZSBkb24ndCBuZWVkIHRvIGNoZWNrLgorCSAqIERvIHRoaXMgY2hlY2tpbmcgdW5kZXIgYSBsb2NrOyBhcyBtdWx0aXBsZSBQQ0kgZGV2aWNlcworCSAqIGluIG9uZSBzbG90IG1pZ2h0IHJlcG9ydCBlcnJvcnMgc2ltdWx0YW5lb3VzbHksIGFuZCB3ZQorCSAqIG9ubHkgd2FudCBvbmUgZXJyb3IgcmVjb3Zlcnkgcm91dGluZSBydW5uaW5nLgogCSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZjb25maXJtX2Vycm9yX2xvY2ssIGZsYWdzKTsKKwlyYyA9IDE7CiAJaWYgKHBkbi0+ZWVoX21vZGUgJiBFRUhfTU9ERV9JU09MQVRFRCkgewotCQlhdG9taWNfaW5jKCZlZWhfZmFpbF9jb3VudCk7Ci0JCWlmIChhdG9taWNfcmVhZCgmZWVoX2ZhaWxfY291bnQpID49IEVFSF9NQVhfRkFJTFMpIHsKKwkJcGRuLT5lZWhfY2hlY2tfY291bnQgKys7CisJCWlmIChwZG4tPmVlaF9jaGVja19jb3VudCA+PSBFRUhfTUFYX0ZBSUxTKSB7CisJCQlwcmludGsgKEtFUk5fRVJSICJFRUg6IERldmljZSBkcml2ZXIgaWdub3JlZCAlZCBiYWQgcmVhZHMsIHBhbmljaW5nXG4iLAorCQkJICAgICAgICBwZG4tPmVlaF9jaGVja19jb3VudCk7CisJCQlkdW1wX3N0YWNrKCk7CisJCQkKIAkJCS8qIHJlLXJlYWQgdGhlIHNsb3QgcmVzZXQgc3RhdGUgKi8KLQkJCWlmIChyZWFkX3Nsb3RfcmVzZXRfc3RhdGUoZG4sIHJldHMpICE9IDApCisJCQlpZiAocmVhZF9zbG90X3Jlc2V0X3N0YXRlKHBkbiwgcmV0cykgIT0gMCkKIAkJCQlyZXRzWzBdID0gLTE7CS8qIHJlc2V0IHN0YXRlIHVua25vd24gKi8KLQkJCWVlaF9wYW5pYyhkZXYsIHJldHNbMF0pOworCisJCQkvKiBJZiB3ZSBhcmUgaGVyZSwgdGhlbiB3ZSBoaXQgYW4gaW5maW5pdGUgbG9vcC4gU3RvcC4gKi8KKwkJCXBhbmljKCJFRUg6IE1NSU8gaGFsdCAoJWQpIG9uIGRldmljZTolc1xuIiwgcmV0c1swXSwgcGNpX25hbWUoZGV2KSk7CiAJCX0KLQkJcmV0dXJuIDA7CisJCWdvdG8gZG5fdW5sb2NrOwogCX0KIAogCS8qCkBAIC01ODAsNjYgKzYwNCw2OSBAQAogCSAqIGZ1bmN0aW9uIHplcm8gb2YgYSBtdWx0aS1mdW5jdGlvbiBkZXZpY2UuCiAJICogSW4gYW55IGNhc2UgdGhleSBtdXN0IHNoYXJlIGEgY29tbW9uIFBIQi4KIAkgKi8KLQlyZXQgPSByZWFkX3Nsb3RfcmVzZXRfc3RhdGUoZG4sIHJldHMpOwotCWlmICghKHJldCA9PSAwICYmIHJldHNbMV0gPT0gMSAmJiAocmV0c1swXSA9PSAyIHx8IHJldHNbMF0gPT0gNCkpKSB7CisJcmV0ID0gcmVhZF9zbG90X3Jlc2V0X3N0YXRlKHBkbiwgcmV0cyk7CisKKwkvKiBJZiB0aGUgY2FsbCB0byBmaXJtd2FyZSBmYWlsZWQsIHB1bnQgKi8KKwlpZiAocmV0ICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiRUVIOiByZWFkX3Nsb3RfcmVzZXRfc3RhdGUoKSBmYWlsZWQ7IHJjPSVkIGRuPSVzXG4iLAorCQkgICAgICAgcmV0LCBkbi0+ZnVsbF9uYW1lKTsKIAkJX19nZXRfY3B1X3ZhcihmYWxzZV9wb3NpdGl2ZXMpKys7Ci0JCXJldHVybiAwOworCQlyYyA9IDA7CisJCWdvdG8gZG5fdW5sb2NrOwogCX0KIAotCS8qIHByZXZlbnQgcmVwZWF0ZWQgcmVwb3J0cyBvZiB0aGlzIGZhaWx1cmUgKi8KLQlwZG4tPmVlaF9tb2RlIHw9IEVFSF9NT0RFX0lTT0xBVEVEOworCS8qIElmIEVFSCBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgZGV2aWNlLCBwdW50LiAqLworCWlmIChyZXRzWzFdICE9IDEpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiRUVIOiBldmVudCBvbiB1bnN1cHBvcnRlZCBkZXZpY2UsIHJjPSVkIGRuPSVzXG4iLAorCQkgICAgICAgcmV0LCBkbi0+ZnVsbF9uYW1lKTsKKwkJX19nZXRfY3B1X3ZhcihmYWxzZV9wb3NpdGl2ZXMpKys7CisJCXJjID0gMDsKKwkJZ290byBkbl91bmxvY2s7CisJfQogCi0JcmVzZXRfc3RhdGUgPSByZXRzWzBdOworCS8qIElmIG5vdCB0aGUga2luZCBvZiBlcnJvciB3ZSBrbm93IGFib3V0LCBwdW50LiAqLworCWlmIChyZXRzWzBdICE9IDIgJiYgcmV0c1swXSAhPSA0ICYmIHJldHNbMF0gIT0gNSkgeworCQlfX2dldF9jcHVfdmFyKGZhbHNlX3Bvc2l0aXZlcykrKzsKKwkJcmMgPSAwOworCQlnb3RvIGRuX3VubG9jazsKKwl9CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmc2xvdF9lcnJidWZfbG9jaywgZmxhZ3MpOwotCW1lbXNldChzbG90X2VycmJ1ZiwgMCwgZWVoX2Vycm9yX2J1Zl9zaXplKTsKKwkvKiBOb3RlIHRoYXQgY29uZmlnLWlvIHRvIGVtcHR5IHNsb3RzIG1heSBmYWlsOworCSAqIHdlIHJlY29nbml6ZSBlbXB0eSBiZWNhdXNlIHRoZXkgZG9uJ3QgaGF2ZSBjaGlsZHJlbi4gKi8KKwlpZiAoKHJldHNbMF0gPT0gNSkgJiYgKGRuLT5jaGlsZCA9PSBOVUxMKSkgeworCQlfX2dldF9jcHVfdmFyKGZhbHNlX3Bvc2l0aXZlcykrKzsKKwkJcmMgPSAwOworCQlnb3RvIGRuX3VubG9jazsKKwl9CiAKLQlyYyA9IHJ0YXNfY2FsbChpYm1fc2xvdF9lcnJvcl9kZXRhaWwsCi0JICAgICAgICAgICAgICAgOCwgMSwgTlVMTCwgcGRuLT5lZWhfY29uZmlnX2FkZHIsCi0JICAgICAgICAgICAgICAgQlVJRF9ISShwZG4tPnBoYi0+YnVpZCksCi0JICAgICAgICAgICAgICAgQlVJRF9MTyhwZG4tPnBoYi0+YnVpZCksIE5VTEwsIDAsCi0JICAgICAgICAgICAgICAgdmlydF90b19waHlzKHNsb3RfZXJyYnVmKSwKLQkgICAgICAgICAgICAgICBlZWhfZXJyb3JfYnVmX3NpemUsCi0JICAgICAgICAgICAgICAgMSAvKiBUZW1wb3JhcnkgRXJyb3IgKi8pOworCV9fZ2V0X2NwdV92YXIoc2xvdF9yZXNldHMpKys7CisgCisJLyogQXZvaWQgcmVwZWF0ZWQgcmVwb3J0cyBvZiB0aGlzIGZhaWx1cmUsIGluY2x1ZGluZyBwcm9ibGVtcworCSAqIHdpdGggb3RoZXIgZnVuY3Rpb25zIG9uIHRoaXMgZGV2aWNlLCBhbmQgZnVuY3Rpb25zIHVuZGVyCisJICogYnJpZGdlcy4gKi8KKwllZWhfbWFya19zbG90IChkbiwgRUVIX01PREVfSVNPTEFURUQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbmZpcm1fZXJyb3JfbG9jaywgZmxhZ3MpOwogCi0JaWYgKHJjID09IDApCi0JCWxvZ19lcnJvcihzbG90X2VycmJ1ZiwgRVJSX1RZUEVfUlRBU19MT0csIDApOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNsb3RfZXJyYnVmX2xvY2ssIGZsYWdzKTsKLQotCXByaW50ayhLRVJOX0lORk8gIkVFSDogTU1JTyBmYWlsdXJlICglZCkgb24gZGV2aWNlOiAlcyAlc1xuIiwKLQkgICAgICAgcmV0c1swXSwgZG4tPm5hbWUsIGRuLT5mdWxsX25hbWUpOwotCWV2ZW50ID0ga21hbGxvYyhzaXplb2YoKmV2ZW50KSwgR0ZQX0FUT01JQyk7Ci0JaWYgKGV2ZW50ID09IE5VTEwpIHsKLQkJZWVoX3BhbmljKGRldiwgcmVzZXRfc3RhdGUpOwotCQlyZXR1cm4gMTsKLSAJfQotCi0JZXZlbnQtPmRldiA9IGRldjsKLQlldmVudC0+ZG4gPSBkbjsKLQlldmVudC0+cmVzZXRfc3RhdGUgPSByZXNldF9zdGF0ZTsKLQotCS8qIFdlIG1heSBvciBtYXkgbm90IGJlIGNhbGxlZCBpbiBhbiBpbnRlcnJ1cHQgY29udGV4dCAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZlZWhfZXZlbnRsaXN0X2xvY2ssIGZsYWdzKTsKLQlsaXN0X2FkZCgmZXZlbnQtPmxpc3QsICZlZWhfZXZlbnRsaXN0KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlZWhfZXZlbnRsaXN0X2xvY2ssIGZsYWdzKTsKLQorCWVlaF9zZW5kX2ZhaWx1cmVfZXZlbnQgKGRuLCBkZXYsIHJldHNbMF0sIHJldHNbMl0pOworCQogCS8qIE1vc3QgRUVIIGV2ZW50cyBhcmUgZHVlIHRvIGRldmljZSBkcml2ZXIgYnVncy4gIEhhdmluZwogCSAqIGEgc3RhY2sgdHJhY2Ugd2lsbCBoZWxwIHRoZSBkZXZpY2UtZHJpdmVyIGF1dGhvcnMgZmlndXJlCiAJICogb3V0IHdoYXQgaGFwcGVuZWQuICBTbyBwcmludCB0aGF0IG91dC4gKi8KLQlkdW1wX3N0YWNrKCk7Ci0Jc2NoZWR1bGVfd29yaygmZWVoX2V2ZW50X3dxKTsKKwlpZiAocmV0c1swXSAhPSA1KSBkdW1wX3N0YWNrKCk7CisJcmV0dXJuIDE7CiAKLQlyZXR1cm4gMDsKK2RuX3VubG9jazoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb25maXJtX2Vycm9yX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmM7CiB9CiAKLUVYUE9SVF9TWU1CT0woZWVoX2RuX2NoZWNrX2ZhaWx1cmUpOworRVhQT1JUX1NZTUJPTF9HUEwoZWVoX2RuX2NoZWNrX2ZhaWx1cmUpOwogCiAvKioKICAqIGVlaF9jaGVja19mYWlsdXJlIC0gY2hlY2sgaWYgYWxsIDEncyBkYXRhIGlzIGR1ZSB0byBFRUggc2xvdCBmcmVlemUKICAqIEB0b2tlbiBpL28gdG9rZW4sIHNob3VsZCBiZSBhZGRyZXNzIGluIHRoZSBmb3JtIDB4QS4uLi4KICAqIEB2YWwgdmFsdWUsIHNob3VsZCBiZSBhbGwgMSdzIChYWFggd2h5IGRvIHdlIG5lZWQgdGhpcyBhcmc/PykKICAqCi0gKiBDaGVjayBmb3IgYW4gZWVoIGZhaWx1cmUgYXQgdGhlIGdpdmVuIHRva2VuIGFkZHJlc3MuCiAgKiBDaGVjayBmb3IgYW4gRUVIIGZhaWx1cmUgYXQgdGhlIGdpdmVuIHRva2VuIGFkZHJlc3MuICBDYWxsIHRoaXMKICAqIHJvdXRpbmUgaWYgdGhlIHJlc3VsdCBvZiBhIHJlYWQgd2FzIGFsbCAweGZmJ3MgYW5kIHlvdSB3YW50IHRvCiAgKiBmaW5kIG91dCBpZiB0aGlzIGlzIGR1ZSB0byBhbiBFRUggc2xvdCBmcmVlemUgZXZlbnQuICBUaGlzIHJvdXRpbmUKQEAgLTY1Niw4ICs2ODMsMTAgQEAKIAkvKiBGaW5kaW5nIHRoZSBwaHlzIGFkZHIgKyBwY2kgZGV2aWNlOyB0aGlzIGlzIHByZXR0eSBxdWljay4gKi8KIAlhZGRyID0gZWVoX3Rva2VuX3RvX3BoeXMoKHVuc2lnbmVkIGxvbmcgX19mb3JjZSkgdG9rZW4pOwogCWRldiA9IHBjaV9nZXRfZGV2aWNlX2J5X2FkZHIoYWRkcik7Ci0JaWYgKCFkZXYpCisJaWYgKCFkZXYpIHsKKwkJX19nZXRfY3B1X3Zhcihub19kZXZpY2UpKys7CiAJCXJldHVybiB2YWw7CisJfQogCiAJZG4gPSBwY2lfZGV2aWNlX3RvX09GX25vZGUoZGV2KTsKIAllZWhfZG5fY2hlY2tfZmFpbHVyZSAoZG4sIGRldik7CkBAIC02NjgsNiArNjk3LDIxNyBAQAogCiBFWFBPUlRfU1lNQk9MKGVlaF9jaGVja19mYWlsdXJlKTsKIAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogVGhlIGNvZGUgYmVsb3cgZGVhbHMgd2l0aCBlcnJvciByZWNvdmVyeSAqLworCisvKiogUmV0dXJuIG5lZ2F0aXZlIHZhbHVlIGlmIGEgcGVybWFuZW50IGVycm9yLCBlbHNlIHJldHVybgorICogYSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQgdW50aWwgdGhlIFBDSSBzbG90IGlzCisgKiByZWFkeSB0byBiZSB1c2VkLgorICovCitzdGF0aWMgaW50CitlZWhfc2xvdF9hdmFpbGFiaWxpdHkoc3RydWN0IHBjaV9kbiAqcGRuKQoreworCWludCByYzsKKwlpbnQgcmV0c1szXTsKKworCXJjID0gcmVhZF9zbG90X3Jlc2V0X3N0YXRlKHBkbiwgcmV0cyk7CisKKwlpZiAocmMpIHJldHVybiByYzsKKworCWlmIChyZXRzWzFdID09IDApIHJldHVybiAtMTsgIC8qIEVFSCBpcyBub3Qgc3VwcG9ydGVkICovCisJaWYgKHJldHNbMF0gPT0gMCkgIHJldHVybiAwOyAgLyogT2xsIEtvcnJlY3QgKi8KKwlpZiAocmV0c1swXSA9PSA1KSB7CisJCWlmIChyZXRzWzJdID09IDApIHJldHVybiAtMTsgLyogcGVybWFuZW50bHkgdW5hdmFpbGFibGUgKi8KKwkJcmV0dXJuIHJldHNbMl07IC8qIG51bWJlciBvZiBtaWxsaXNlY3MgdG8gd2FpdCAqLworCX0KKwlyZXR1cm4gLTE7Cit9CisKKy8qKiBydGFzX3BjaV9zbG90X3Jlc2V0IHJhaXNlcy9sb3dlcnMgdGhlIHBjaSAjUlNUIGxpbmUKKyAqICBzdGF0ZTogMS8wIHRvIHJhaXNlL2xvd2VyIHRoZSAjUlNUCisgKgorICogQ2xlYXIgdGhlIEVFSC1mcm96ZW4gY29uZGl0aW9uIG9uIGEgc2xvdC4gIFRoaXMgcm91dGluZQorICogYXNzZXJ0cyB0aGUgUENJICNSU1QgbGluZSBpZiB0aGUgJ3N0YXRlJyBhcmd1bWVudCBpcyAnMScsCisgKiBhbmQgZHJvcHMgdGhlICNSU1QgbGluZSBpZiAnc3RhdGUgaXMgJzAnLiAgVGhpcyByb3V0aW5lIGlzCisgKiBzYWZlIHRvIGNhbGwgaW4gYW4gaW50ZXJydXB0IGNvbnRleHQuCisgKgorICovCisKK3N0YXRpYyB2b2lkCitydGFzX3BjaV9zbG90X3Jlc2V0KHN0cnVjdCBwY2lfZG4gKnBkbiwgaW50IHN0YXRlKQoreworCWludCByYzsKKworCUJVR19PTiAocGRuPT1OVUxMKTsgCisKKwlpZiAoIXBkbi0+cGhiKSB7CisJCXByaW50ayAoS0VSTl9XQVJOSU5HICJFRUg6IGluIHNsb3QgcmVzZXQsIGRldmljZSBub2RlICVzIGhhcyBubyBwaGJcbiIsCisJCSAgICAgICAgcGRuLT5ub2RlLT5mdWxsX25hbWUpOworCQlyZXR1cm47CisJfQorCisJcmMgPSBydGFzX2NhbGwoaWJtX3NldF9zbG90X3Jlc2V0LDQsMSwgTlVMTCwKKwkgICAgICAgICAgICAgICBwZG4tPmVlaF9jb25maWdfYWRkciwKKwkgICAgICAgICAgICAgICBCVUlEX0hJKHBkbi0+cGhiLT5idWlkKSwKKwkgICAgICAgICAgICAgICBCVUlEX0xPKHBkbi0+cGhiLT5idWlkKSwKKwkgICAgICAgICAgICAgICBzdGF0ZSk7CisJaWYgKHJjKSB7CisJCXByaW50ayAoS0VSTl9XQVJOSU5HICJFRUg6IFVuYWJsZSB0byByZXNldCB0aGUgZmFpbGVkIHNsb3QsICglZCkgI1JTVD0lZCBkbj0lc1xuIiwgCisJCSAgICAgICAgcmMsIHN0YXRlLCBwZG4tPm5vZGUtPmZ1bGxfbmFtZSk7CisJCXJldHVybjsKKwl9Cit9CisKKy8qKiBydGFzX3NldF9zbG90X3Jlc2V0IC0tIGFzc2VydCB0aGUgcGNpICNSU1QgbGluZSBmb3IgMS80IHNlY29uZAorICogIGRuIC0tIGRldmljZSBub2RlIHRvIGJlIHJlc2V0LgorICovCisKK3ZvaWQKK3J0YXNfc2V0X3Nsb3RfcmVzZXQoc3RydWN0IHBjaV9kbiAqcGRuKQoreworCWludCBpLCByYzsKKworCXJ0YXNfcGNpX3Nsb3RfcmVzZXQgKHBkbiwgMSk7CisKKwkvKiBUaGUgUENJIGJ1cyByZXF1aXJlcyB0aGF0IHRoZSByZXNldCBiZSBoZWxkIGhpZ2ggZm9yIGF0IGxlYXN0CisJICogYSAxMDAgbWlsbGlzZWNvbmRzLiBXZSB3YWl0IGEgYml0IGxvbmdlciAnanVzdCBpbiBjYXNlJy4gICovCisKKyNkZWZpbmUgUENJX0JVU19SU1RfSE9MRF9USU1FX01TRUMgMjUwCisJbXNsZWVwIChQQ0lfQlVTX1JTVF9IT0xEX1RJTUVfTVNFQyk7CisJCisJLyogV2UgbWlnaHQgZ2V0IGhpdCB3aXRoIGFub3RoZXIgRUVIIGZyZWV6ZSBhcyBzb29uIGFzIHRoZSAKKwkgKiBwY2kgc2xvdCByZXNldCBsaW5lIGlzIGRyb3BwZWQuIE1ha2Ugc3VyZSB3ZSBkb24ndCBtaXNzCisJICogdGhlc2UsIGFuZCBjbGVhciB0aGUgZmxhZyBub3cuICovCisJZWVoX2NsZWFyX3Nsb3QgKHBkbi0+bm9kZSwgRUVIX01PREVfSVNPTEFURUQpOworCisJcnRhc19wY2lfc2xvdF9yZXNldCAocGRuLCAwKTsKKworCS8qIEFmdGVyIGEgUENJIHNsb3QgaGFzIGJlZW4gcmVzZXQsIHRoZSBQQ0kgRXhwcmVzcyBzcGVjIHJlcXVpcmVzCisJICogYSAxLjUgc2Vjb25kIGlkbGUgdGltZSBmb3IgdGhlIGJ1cyB0byBzdGFiaWxpemUsIGJlZm9yZSBzdGFydGluZworCSAqIHVwIHRyYWZmaWMuICovCisjZGVmaW5lIFBDSV9CVVNfU0VUVExFX1RJTUVfTVNFQyAxODAwCisJbXNsZWVwIChQQ0lfQlVTX1NFVFRMRV9USU1FX01TRUMpOworCisJLyogTm93IGRvdWJsZSBjaGVjayB3aXRoIHRoZSBmaXJtd2FyZSB0byBtYWtlIHN1cmUgdGhlIGRldmljZSBpcworCSAqIHJlYWR5IHRvIGJlIHVzZWQ7IGlmIG5vdCwgd2FpdCBmb3IgcmVjb3ZlcnkuICovCisJZm9yIChpPTA7IGk8MTA7IGkrKykgeworCQlyYyA9IGVlaF9zbG90X2F2YWlsYWJpbGl0eSAocGRuKTsKKwkJaWYgKHJjIDw9IDApIGJyZWFrOworCisJCW1zbGVlcCAocmMrMTAwKTsKKwl9Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qKiBTYXZlIGFuZCByZXN0b3JlIG9mIFBDSSBCQVJzCisgKgorICogQWx0aG91Z2ggZmlybXdhcmUgd2lsbCBzZXQgdXAgQkFScyBkdXJpbmcgYm9vdCwgaXQgZG9lc24ndAorICogc2V0IHVwIGRldmljZSBCQVIncyBhZnRlciBhIGRldmljZSByZXNldCwgYWx0aG91Z2ggaXQgd2lsbCwKKyAqIGlmIHJlcXVlc3RlZCwgc2V0IHVwIGJyaWRnZSBjb25maWd1cmF0aW9uLiBUaHVzLCB3ZSBuZWVkIHRvCisgKiBjb25maWd1cmUgdGhlIFBDSSBkZXZpY2VzIG91cnNlbHZlcy4gIAorICovCisKKy8qKgorICogX19yZXN0b3JlX2JhcnMgLSBSZXN0b3JlIHRoZSBCYXNlIEFkZHJlc3MgUmVnaXN0ZXJzCisgKiBMb2FkcyB0aGUgUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UgYmFzZSBhZGRyZXNzIHJlZ2lzdGVycywKKyAqIHRoZSBleHBhbnNpb24gUk9NIGJhc2UgYWRkcmVzcywgdGhlIGxhdGVuY3kgdGltZXIsIGFuZCBldGMuCisgKiBmcm9tIHRoZSBzYXZlZCB2YWx1ZXMgaW4gdGhlIGRldmljZSBub2RlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgX19yZXN0b3JlX2JhcnMgKHN0cnVjdCBwY2lfZG4gKnBkbikKK3sKKwlpbnQgaTsKKworCWlmIChOVUxMPT1wZG4tPnBoYikgcmV0dXJuOworCWZvciAoaT00OyBpPDEwOyBpKyspIHsKKwkJcnRhc193cml0ZV9jb25maWcocGRuLCBpKjQsIDQsIHBkbi0+Y29uZmlnX3NwYWNlW2ldKTsKKwl9CisKKwkvKiAxMiA9PSBFeHBhbnNpb24gUk9NIEFkZHJlc3MgKi8KKwlydGFzX3dyaXRlX2NvbmZpZyhwZG4sIDEyKjQsIDQsIHBkbi0+Y29uZmlnX3NwYWNlWzEyXSk7CisKKyNkZWZpbmUgQllURV9TV0FQKE9GRikgKDgqKChPRkYpLzQpKzMtKE9GRikpCisjZGVmaW5lIFNBVkVEX0JZVEUoT0ZGKSAoKCh1OCAqKShwZG4tPmNvbmZpZ19zcGFjZSkpW0JZVEVfU1dBUChPRkYpXSkKKworCXJ0YXNfd3JpdGVfY29uZmlnIChwZG4sIFBDSV9DQUNIRV9MSU5FX1NJWkUsIDEsCisJICAgICAgICAgICAgU0FWRURfQllURShQQ0lfQ0FDSEVfTElORV9TSVpFKSk7CisKKwlydGFzX3dyaXRlX2NvbmZpZyAocGRuLCBQQ0lfTEFURU5DWV9USU1FUiwgMSwKKwkgICAgICAgICAgICBTQVZFRF9CWVRFKFBDSV9MQVRFTkNZX1RJTUVSKSk7CisKKwkvKiBtYXggbGF0ZW5jeSwgbWluIGdyYW50LCBpbnRlcnJ1cHQgcGluIGFuZCBsaW5lICovCisJcnRhc193cml0ZV9jb25maWcocGRuLCAxNSo0LCA0LCBwZG4tPmNvbmZpZ19zcGFjZVsxNV0pOworfQorCisvKioKKyAqIGVlaF9yZXN0b3JlX2JhcnMgLSByZXN0b3JlIHRoZSBQQ0kgY29uZmlnIHNwYWNlIGluZm8KKyAqCisgKiBUaGlzIHJvdXRpbmUgcGVyZm9ybXMgYSByZWN1cnNpdmUgd2FsayB0byB0aGUgY2hpbGRyZW4KKyAqIG9mIHRoaXMgZGV2aWNlIGFzIHdlbGwuCisgKi8KK3ZvaWQgZWVoX3Jlc3RvcmVfYmFycyhzdHJ1Y3QgcGNpX2RuICpwZG4pCit7CisJc3RydWN0IGRldmljZV9ub2RlICpkbjsKKwlpZiAoIXBkbikgCisJCXJldHVybjsKKwkKKwlpZiAoISBwZG4tPmVlaF9pc19icmlkZ2UpCisJCV9fcmVzdG9yZV9iYXJzIChwZG4pOworCisJZG4gPSBwZG4tPm5vZGUtPmNoaWxkOworCXdoaWxlIChkbikgeworCQllZWhfcmVzdG9yZV9iYXJzIChQQ0lfRE4oZG4pKTsKKwkJZG4gPSBkbi0+c2libGluZzsKKwl9Cit9CisKKy8qKgorICogZWVoX3NhdmVfYmFycyAtIHNhdmUgZGV2aWNlIGJhcnMKKyAqCisgKiBTYXZlIHRoZSB2YWx1ZXMgb2YgdGhlIGRldmljZSBiYXJzLiBVbmxpa2UgdGhlIHJlc3RvcmUKKyAqIHJvdXRpbmUsIHRoaXMgcm91dGluZSBpcyAqbm90KiByZWN1cnNpdmUuIFRoaXMgaXMgYmVjYXVzZQorICogUENJIGRldmljZXMgYXJlIGFkZGVkIGluZGl2aWR1YWxsbHk7IGJ1dCwgZm9yIHRoZSByZXN0b3JlLAorICogYW4gZW50aXJlIHNsb3QgaXMgcmVzZXQgYXQgYSB0aW1lLgorICovCitzdGF0aWMgdm9pZCBlZWhfc2F2ZV9iYXJzKHN0cnVjdCBwY2lfZGV2ICogcGRldiwgc3RydWN0IHBjaV9kbiAqcGRuKQoreworCWludCBpOworCisJaWYgKCFwZGV2IHx8ICFwZG4gKQorCQlyZXR1cm47CisJCisJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCisJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBpICogNCwgJnBkbi0+Y29uZmlnX3NwYWNlW2ldKTsKKworCWlmIChwZGV2LT5oZHJfdHlwZSA9PSBQQ0lfSEVBREVSX1RZUEVfQlJJREdFKQorCQlwZG4tPmVlaF9pc19icmlkZ2UgPSAxOworfQorCit2b2lkCitydGFzX2NvbmZpZ3VyZV9icmlkZ2Uoc3RydWN0IHBjaV9kbiAqcGRuKQoreworCWludCB0b2tlbiA9IHJ0YXNfdG9rZW4gKCJpYm0sY29uZmlndXJlLWJyaWRnZSIpOworCWludCByYzsKKworCWlmICh0b2tlbiA9PSBSVEFTX1VOS05PV05fU0VSVklDRSkKKwkJcmV0dXJuOworCXJjID0gcnRhc19jYWxsKHRva2VuLDMsMSwgTlVMTCwKKwkgICAgICAgICAgICAgICBwZG4tPmVlaF9jb25maWdfYWRkciwKKwkgICAgICAgICAgICAgICBCVUlEX0hJKHBkbi0+cGhiLT5idWlkKSwKKwkgICAgICAgICAgICAgICBCVUlEX0xPKHBkbi0+cGhiLT5idWlkKSk7CisJaWYgKHJjKSB7CisJCXByaW50ayAoS0VSTl9XQVJOSU5HICJFRUg6IFVuYWJsZSB0byBjb25maWd1cmUgZGV2aWNlIGJyaWRnZSAoJWQpIGZvciAlc1xuIiwKKwkJICAgICAgICByYywgcGRuLT5ub2RlLT5mdWxsX25hbWUpOworCX0KK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogVGhlIGNvZGUgYmVsb3cgZGVhbHMgd2l0aCBlbmFibGluZyBFRUggZm9yIGRldmljZXMgZHVyaW5nICB0aGUKKyAqIGVhcmx5IGJvb3Qgc2VxdWVuY2UuICBFRUggbXVzdCBiZSBlbmFibGVkIGJlZm9yZSBhbnkgUENJIHByb2JpbmcKKyAqIGNhbiBiZSBkb25lLgorICovCisKKyNkZWZpbmUgRUVIX0VOQUJMRSAxCisKIHN0cnVjdCBlZWhfZWFybHlfZW5hYmxlX2luZm8gewogCXVuc2lnbmVkIGludCBidWlkX2hpOwogCXVuc2lnbmVkIGludCBidWlkX2xvOwpAQCAtNjg0LDkgKzkyNCwxMSBAQAogCXUzMiAqZGV2aWNlX2lkID0gKHUzMiAqKWdldF9wcm9wZXJ0eShkbiwgImRldmljZS1pZCIsIE5VTEwpOwogCXUzMiAqcmVnczsKIAlpbnQgZW5hYmxlOwotCXN0cnVjdCBwY2lfZG4gKnBkbiA9IGRuLT5kYXRhOworCXN0cnVjdCBwY2lfZG4gKnBkbiA9IFBDSV9ETihkbik7CiAKIAlwZG4tPmVlaF9tb2RlID0gMDsKKwlwZG4tPmVlaF9jaGVja19jb3VudCA9IDA7CisJcGRuLT5lZWhfZnJlZXplX2NvdW50ID0gMDsKIAogCWlmIChzdGF0dXMgJiYgc3RyY21wKHN0YXR1cywgIm9rIikgIT0gMCkKIAkJcmV0dXJuIE5VTEw7CS8qIGlnbm9yZSBkZXZpY2VzIHdpdGggYmFkIHN0YXR1cyAqLwpAQCAtNzIzLDggKzk2NSw5IEBACiAJCS8qIEZpcnN0IHJlZ2lzdGVyIGVudHJ5IGlzIGFkZHIgKDAwQkJTUzAwKSAgKi8KIAkJLyogVHJ5IHRvIGVuYWJsZSBlZWggKi8KIAkJcmV0ID0gcnRhc19jYWxsKGlibV9zZXRfZWVoX29wdGlvbiwgNCwgMSwgTlVMTCwKLQkJCQlyZWdzWzBdLCBpbmZvLT5idWlkX2hpLCBpbmZvLT5idWlkX2xvLAotCQkJCUVFSF9FTkFCTEUpOworCQkgICAgICAgICAgICAgICAgcmVnc1swXSwgaW5mby0+YnVpZF9oaSwgaW5mby0+YnVpZF9sbywKKwkJICAgICAgICAgICAgICAgIEVFSF9FTkFCTEUpOworCiAJCWlmIChyZXQgPT0gMCkgewogCQkJZWVoX3N1YnN5c3RlbV9lbmFibGVkID0gMTsKIAkJCXBkbi0+ZWVoX21vZGUgfD0gRUVIX01PREVfU1VQUE9SVEVEOwpAQCAtNzM2LDcgKzk3OSw3IEBACiAKIAkJCS8qIFRoaXMgZGV2aWNlIGRvZXNuJ3Qgc3VwcG9ydCBFRUgsIGJ1dCBpdCBtYXkgaGF2ZSBhbgogCQkJICogRUVIIHBhcmVudCwgaW4gd2hpY2ggY2FzZSB3ZSBtYXJrIGl0IGFzIHN1cHBvcnRlZC4gKi8KLQkJCWlmIChkbi0+cGFyZW50ICYmIGRuLT5wYXJlbnQtPmRhdGEKKwkJCWlmIChkbi0+cGFyZW50ICYmIFBDSV9ETihkbi0+cGFyZW50KQogCQkJICAgICYmIChQQ0lfRE4oZG4tPnBhcmVudCktPmVlaF9tb2RlICYgRUVIX01PREVfU1VQUE9SVEVEKSkgewogCQkJCS8qIFBhcmVudCBzdXBwb3J0cyBFRUguICovCiAJCQkJcGRuLT5lZWhfbW9kZSB8PSBFRUhfTU9ERV9TVVBQT1JURUQ7CkBAIC03NDksNyArOTkyLDcgQEAKIAkJICAgICAgIGRuLT5mdWxsX25hbWUpOwogCX0KIAotCXJldHVybiBOVUxMOyAKKwlyZXR1cm4gTlVMTDsKIH0KIAogLyoKQEAgLTc3MCw2ICsxMDEzLDkgQEAKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKnBoYiwgKm5wOwogCXN0cnVjdCBlZWhfZWFybHlfZW5hYmxlX2luZm8gaW5mbzsKIAorCXNwaW5fbG9ja19pbml0KCZjb25maXJtX2Vycm9yX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZzbG90X2VycmJ1Zl9sb2NrKTsKKwogCW5wID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi9ydGFzIik7CiAJaWYgKG5wID09IE5VTEwpCiAJCXJldHVybjsKQEAgLTc5NywxMyArMTA0MywxMSBAQAogCWZvciAocGhiID0gb2ZfZmluZF9ub2RlX2J5X25hbWUoTlVMTCwgInBjaSIpOyBwaGI7CiAJICAgICBwaGIgPSBvZl9maW5kX25vZGVfYnlfbmFtZShwaGIsICJwY2kiKSkgewogCQl1bnNpZ25lZCBsb25nIGJ1aWQ7Ci0JCXN0cnVjdCBwY2lfZG4gKnBjaTsKIAogCQlidWlkID0gZ2V0X3BoYl9idWlkKHBoYik7Ci0JCWlmIChidWlkID09IDAgfHwgcGhiLT5kYXRhID09IE5VTEwpCisJCWlmIChidWlkID09IDAgfHwgUENJX0ROKHBoYikgPT0gTlVMTCkKIAkJCWNvbnRpbnVlOwogCi0JCXBjaSA9IHBoYi0+ZGF0YTsKIAkJaW5mby5idWlkX2xvID0gQlVJRF9MTyhidWlkKTsKIAkJaW5mby5idWlkX2hpID0gQlVJRF9ISShidWlkKTsKIAkJdHJhdmVyc2VfcGNpX2RldmljZXMocGhiLCBlYXJseV9lbmFibGVfZWVoLCAmaW5mbyk7CkBAIC04MzIsMTEgKzEwNzYsMTMgQEAKIAlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKnBoYjsKIAlzdHJ1Y3QgZWVoX2Vhcmx5X2VuYWJsZV9pbmZvIGluZm87CiAKLQlpZiAoIWRuIHx8ICFkbi0+ZGF0YSkKKwlpZiAoIWRuIHx8ICFQQ0lfRE4oZG4pKQogCQlyZXR1cm47CiAJcGhiID0gUENJX0ROKGRuKS0+cGhiOwogCWlmIChOVUxMID09IHBoYiB8fCAwID09IHBoYi0+YnVpZCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJFRUg6IEV4cGVjdGVkIGJ1aWQgYnV0IGZvdW5kIG5vbmVcbiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJFRUg6IEV4cGVjdGVkIGJ1aWQgYnV0IGZvdW5kIG5vbmUgZm9yICVzXG4iLAorCQkgICAgICAgZG4tPmZ1bGxfbmFtZSk7CisJCWR1bXBfc3RhY2soKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtODQ0LDcgKzEwOTAsNyBAQAogCWluZm8uYnVpZF9sbyA9IEJVSURfTE8ocGhiLT5idWlkKTsKIAllYXJseV9lbmFibGVfZWVoKGRuLCAmaW5mbyk7CiB9Ci1FWFBPUlRfU1lNQk9MKGVlaF9hZGRfZGV2aWNlX2Vhcmx5KTsKK0VYUE9SVF9TWU1CT0xfR1BMKGVlaF9hZGRfZGV2aWNlX2Vhcmx5KTsKIAogLyoqCiAgKiBlZWhfYWRkX2RldmljZV9sYXRlIC0gcGVyZm9ybSBFRUggaW5pdGlhbGl6YXRpb24gZm9yIHRoZSBpbmRpY2F0ZWQgcGNpIGRldmljZQpAQCAtODU1LDYgKzExMDEsOSBAQAogICovCiB2b2lkIGVlaF9hZGRfZGV2aWNlX2xhdGUoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuOworCXN0cnVjdCBwY2lfZG4gKnBkbjsKKwogCWlmICghZGV2IHx8ICFlZWhfc3Vic3lzdGVtX2VuYWJsZWQpCiAJCXJldHVybjsKIApAQCAtODYyLDkgKzExMTEsMTUgQEAKIAlwcmludGsoS0VSTl9ERUJVRyAiRUVIOiBhZGRpbmcgZGV2aWNlICVzXG4iLCBwY2lfbmFtZShkZXYpKTsKICNlbmRpZgogCisJcGNpX2Rldl9nZXQgKGRldik7CisJZG4gPSBwY2lfZGV2aWNlX3RvX09GX25vZGUoZGV2KTsKKwlwZG4gPSBQQ0lfRE4oZG4pOworCXBkbi0+cGNpZGV2ID0gZGV2OworCiAJcGNpX2FkZHJfY2FjaGVfaW5zZXJ0X2RldmljZSAoZGV2KTsKKwllZWhfc2F2ZV9iYXJzKGRldiwgcGRuKTsKIH0KLUVYUE9SVF9TWU1CT0woZWVoX2FkZF9kZXZpY2VfbGF0ZSk7CitFWFBPUlRfU1lNQk9MX0dQTChlZWhfYWRkX2RldmljZV9sYXRlKTsKIAogLyoqCiAgKiBlZWhfcmVtb3ZlX2RldmljZSAtIHVuZG8gRUVIIHNldHVwIGZvciB0aGUgaW5kaWNhdGVkIHBjaSBkZXZpY2UKQEAgLTg3NSw2ICsxMTMwLDcgQEAKICAqLwogdm9pZCBlZWhfcmVtb3ZlX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQogeworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZG47CiAJaWYgKCFkZXYgfHwgIWVlaF9zdWJzeXN0ZW1fZW5hYmxlZCkKIAkJcmV0dXJuOwogCkBAIC04ODMsMjAgKzExMzksMjkgQEAKIAlwcmludGsoS0VSTl9ERUJVRyAiRUVIOiByZW1vdmUgZGV2aWNlICVzXG4iLCBwY2lfbmFtZShkZXYpKTsKICNlbmRpZgogCXBjaV9hZGRyX2NhY2hlX3JlbW92ZV9kZXZpY2UoZGV2KTsKKworCWRuID0gcGNpX2RldmljZV90b19PRl9ub2RlKGRldik7CisJUENJX0ROKGRuKS0+cGNpZGV2ID0gTlVMTDsKKwlwY2lfZGV2X3B1dCAoZGV2KTsKIH0KLUVYUE9SVF9TWU1CT0woZWVoX3JlbW92ZV9kZXZpY2UpOworRVhQT1JUX1NZTUJPTF9HUEwoZWVoX3JlbW92ZV9kZXZpY2UpOwogCiBzdGF0aWMgaW50IHByb2NfZWVoX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewogCXVuc2lnbmVkIGludCBjcHU7CiAJdW5zaWduZWQgbG9uZyBmZnMgPSAwLCBwb3NpdGl2ZXMgPSAwLCBmYWlsdXJlcyA9IDA7CiAJdW5zaWduZWQgbG9uZyByZXNldHMgPSAwOworCXVuc2lnbmVkIGxvbmcgbm9fZGV2ID0gMCwgbm9fZG4gPSAwLCBub19jZmcgPSAwLCBub19jaGVjayA9IDA7CiAKIAlmb3JfZWFjaF9jcHUoY3B1KSB7CiAJCWZmcyArPSBwZXJfY3B1KHRvdGFsX21taW9fZmZzLCBjcHUpOwogCQlwb3NpdGl2ZXMgKz0gcGVyX2NwdShmYWxzZV9wb3NpdGl2ZXMsIGNwdSk7CiAJCWZhaWx1cmVzICs9IHBlcl9jcHUoaWdub3JlZF9mYWlsdXJlcywgY3B1KTsKIAkJcmVzZXRzICs9IHBlcl9jcHUoc2xvdF9yZXNldHMsIGNwdSk7CisJCW5vX2RldiArPSBwZXJfY3B1KG5vX2RldmljZSwgY3B1KTsKKwkJbm9fZG4gKz0gcGVyX2NwdShub19kbiwgY3B1KTsKKwkJbm9fY2ZnICs9IHBlcl9jcHUobm9fY2ZnX2FkZHIsIGNwdSk7CisJCW5vX2NoZWNrICs9IHBlcl9jcHUoaWdub3JlZF9jaGVjaywgY3B1KTsKIAl9CiAKIAlpZiAoMCA9PSBlZWhfc3Vic3lzdGVtX2VuYWJsZWQpIHsKQEAgLTkwNCwxMyArMTE2OSwxNyBAQAogCQlzZXFfcHJpbnRmKG0sICJlZWhfdG90YWxfbW1pb19mZnM9JWxkXG4iLCBmZnMpOwogCX0gZWxzZSB7CiAJCXNlcV9wcmludGYobSwgIkVFSCBTdWJzeXN0ZW0gaXMgZW5hYmxlZFxuIik7Ci0JCXNlcV9wcmludGYobSwgImVlaF90b3RhbF9tbWlvX2Zmcz0lbGRcbiIKLQkJCSAgICJlZWhfZmFsc2VfcG9zaXRpdmVzPSVsZFxuIgotCQkJICAgImVlaF9pZ25vcmVkX2ZhaWx1cmVzPSVsZFxuIgotCQkJICAgImVlaF9zbG90X3Jlc2V0cz0lbGRcbiIKLQkJCQkiZWVoX2ZhaWxfY291bnQ9JWRcbiIsCi0JCQkgICBmZnMsIHBvc2l0aXZlcywgZmFpbHVyZXMsIHJlc2V0cywKLQkJCQllZWhfZmFpbF9jb3VudC5jb3VudGVyKTsKKwkJc2VxX3ByaW50ZihtLAorCQkJCSJubyBkZXZpY2U9JWxkXG4iCisJCQkJIm5vIGRldmljZSBub2RlPSVsZFxuIgorCQkJCSJubyBjb25maWcgYWRkcmVzcz0lbGRcbiIKKwkJCQkiY2hlY2sgbm90IHdhbnRlZD0lbGRcbiIKKwkJCQkiZWVoX3RvdGFsX21taW9fZmZzPSVsZFxuIgorCQkJCSJlZWhfZmFsc2VfcG9zaXRpdmVzPSVsZFxuIgorCQkJCSJlZWhfaWdub3JlZF9mYWlsdXJlcz0lbGRcbiIKKwkJCQkiZWVoX3Nsb3RfcmVzZXRzPSVsZFxuIiwKKwkJCQlub19kZXYsIG5vX2RuLCBub19jZmcsIG5vX2NoZWNrLAorCQkJCWZmcywgcG9zaXRpdmVzLCBmYWlsdXJlcywgcmVzZXRzKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTkzMiw3ICsxMjAxLDcgQEAKIHsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmU7CiAKLQlpZiAoc3lzdGVtY2ZnLT5wbGF0Zm9ybSAmIFBMQVRGT1JNX1BTRVJJRVMpIHsKKwlpZiAocGxhdGZvcm1faXNfcHNlcmllcygpKSB7CiAJCWUgPSBjcmVhdGVfcHJvY19lbnRyeSgicHBjNjQvZWVoIiwgMCwgTlVMTCk7CiAJCWlmIChlKQogCQkJZS0+cHJvY19mb3BzID0gJnByb2NfZWVoX29wZXJhdGlvbnM7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoX2V2ZW50LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoX2V2ZW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI0OTczMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWhfZXZlbnQuYwpAQCAtMCwwICsxLDE1NSBAQAorLyoKKyAqIGVlaF9ldmVudC5jCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA1IExpbmFzIFZlcHN0YXMgPGxpbmFzQGxpbmFzLm9yZz4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGFzbS9lZWhfZXZlbnQuaD4KKworLyoqIE92ZXJ2aWV3OgorICogIEVFSCBlcnJvciBzdGF0ZXMgbWF5IGJlIGRldGVjdGVkIHdpdGhpbiBleGNlcHRpb24gaGFuZGxlcnM7CisgKiAgaG93ZXZlciwgdGhlIHJlY292ZXJ5IHByb2Nlc3NpbmcgbmVlZHMgdG8gb2NjdXIgYXN5bmNocm9ub3VzbHkKKyAqICBpbiBhIG5vcm1hbCBrZXJuZWwgY29udGV4dCBhbmQgbm90IGFuIGludGVycnVwdCBjb250ZXh0LgorICogIFRoaXMgcGFpciBvZiByb3V0aW5lcyBjcmVhdGVzIGFuIGV2ZW50IGFuZCBxdWV1ZXMgaXQgb250byBhCisgKiAgd29yay1xdWV1ZSwgd2hlcmUgYSB3b3JrZXIgdGhyZWFkIGNhbiBkcml2ZSByZWNvdmVyeS4KKyAqLworCisvKiBFRUggZXZlbnQgd29ya3F1ZXVlIHNldHVwLiAqLworc3RhdGljIHNwaW5sb2NrX3QgZWVoX2V2ZW50bGlzdF9sb2NrID0gU1BJTl9MT0NLX1VOTE9DS0VEOworTElTVF9IRUFEKGVlaF9ldmVudGxpc3QpOworc3RhdGljIHZvaWQgZWVoX3RocmVhZF9sYXVuY2hlcih2b2lkICopOworREVDTEFSRV9XT1JLKGVlaF9ldmVudF93cSwgZWVoX3RocmVhZF9sYXVuY2hlciwgTlVMTCk7CisKKy8qKgorICogZWVoX3BhbmljIC0gY2FsbCBwYW5pYygpIGZvciBhbiBlZWggZXZlbnQgdGhhdCBjYW5ub3QgYmUgaGFuZGxlZC4KKyAqIFRoZSBwaGlsb3NvcGh5IG9mIHRoaXMgcm91dGluZSBpcyB0aGF0IGl0IGlzIGJldHRlciB0byBwYW5pYyBhbmQKKyAqIGhhbHQgdGhlIE9TIHRoYW4gaXQgaXMgdG8gcmlzayBwb3NzaWJsZSBkYXRhIGNvcnJ1cHRpb24gYnkKKyAqIG9ibGl2aW91cyBkZXZpY2UgZHJpdmVycyB0aGF0IGRvbid0IGtub3cgYmV0dGVyLgorICoKKyAqIEBkZXYgcGNpIGRldmljZSB0aGF0IGhhZCBhbiBlZWggZXZlbnQKKyAqIEByZXNldF9zdGF0ZSBjdXJyZW50IHJlc2V0IHN0YXRlIG9mIHRoZSBkZXZpY2Ugc2xvdAorICovCitzdGF0aWMgdm9pZCBlZWhfcGFuaWMoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHJlc2V0X3N0YXRlKQoreworCS8qCisJICogU2luY2UgdGhlIHBhbmljX29uX29vcHMgc3lzY3RsIGlzIHVzZWQgdG8gaGFsdCB0aGUgc3lzdGVtCisJICogaW4gbGlnaHQgb2YgcG90ZW50aWFsIGNvcnJ1cHRpb24sIHdlIGNhbiB1c2UgaXQgaGVyZS4KKwkgKi8KKwlpZiAocGFuaWNfb25fb29wcykgeworCQlwYW5pYygiRUVIOiBNTUlPIGZhaWx1cmUgKCVkKSBvbiBkZXZpY2U6JXNcbiIsIHJlc2V0X3N0YXRlLAorCQkgICAgICBwY2lfbmFtZShkZXYpKTsKKwl9CisJZWxzZSB7CisJCXByaW50ayhLRVJOX0lORk8gIkVFSDogSWdub3JlZCBNTUlPIGZhaWx1cmUgKCVkKSBvbiBkZXZpY2U6JXNcbiIsCisJCSAgICAgICByZXNldF9zdGF0ZSwgcGNpX25hbWUoZGV2KSk7CisJfQorfQorCisvKioKKyAqIGVlaF9ldmVudF9oYW5kbGVyIC0gZGlzcGF0Y2ggRUVIIGV2ZW50cy4gIFRoZSBkZXRlY3Rpb24gb2YgYSBmcm96ZW4KKyAqIHNsb3QgY2FuIG9jY3VyIGluc2lkZSBhbiBpbnRlcnJ1cHQsIHdoZXJlIGl0IGNhbiBiZSBoYXJkIHRvIGRvCisgKiBhbnl0aGluZyBhYm91dCBpdC4gIFRoZSBnb2FsIG9mIHRoaXMgcm91dGluZSBpcyB0byBwdWxsIHRoZXNlCisgKiBkZXRlY3Rpb24gZXZlbnRzIG91dCBvZiB0aGUgY29udGV4dCBvZiB0aGUgaW50ZXJydXB0IGhhbmRsZXIsIGFuZAorICogcmUtZGlzcGF0Y2ggdGhlbSBmb3IgcHJvY2Vzc2luZyBhdCBhIGxhdGVyIHRpbWUgaW4gYSBub3JtYWwgY29udGV4dC4KKyAqCisgKiBAZHVtbXkgLSB1bnVzZWQKKyAqLworc3RhdGljIGludCBlZWhfZXZlbnRfaGFuZGxlcih2b2lkICogZHVtbXkpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgZWVoX2V2ZW50CSpldmVudDsKKworCWRhZW1vbml6ZSAoImVlaGQiKTsKKworCXdoaWxlICgxKSB7CisJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmVlaF9ldmVudGxpc3RfbG9jaywgZmxhZ3MpOworCQlldmVudCA9IE5VTEw7CisJCWlmICghbGlzdF9lbXB0eSgmZWVoX2V2ZW50bGlzdCkpIHsKKwkJCWV2ZW50ID0gbGlzdF9lbnRyeShlZWhfZXZlbnRsaXN0Lm5leHQsIHN0cnVjdCBlZWhfZXZlbnQsIGxpc3QpOworCQkJbGlzdF9kZWwoJmV2ZW50LT5saXN0KTsKKwkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlZWhfZXZlbnRsaXN0X2xvY2ssIGZsYWdzKTsKKwkJaWYgKGV2ZW50ID09IE5VTEwpCisJCQlicmVhazsKKworCQlwcmludGsoS0VSTl9JTkZPICJFRUg6IERldGVjdGVkIFBDSSBidXMgZXJyb3Igb24gZGV2aWNlICVzXG4iLAorCQkgICAgICAgcGNpX25hbWUoZXZlbnQtPmRldikpOworCisJCWVlaF9wYW5pYyAoZXZlbnQtPmRldiwgZXZlbnQtPnN0YXRlKTsKKworCQlrZnJlZShldmVudCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogZWVoX3RocmVhZF9sYXVuY2hlcgorICoKKyAqIEBkdW1teSAtIHVudXNlZAorICovCitzdGF0aWMgdm9pZCBlZWhfdGhyZWFkX2xhdW5jaGVyKHZvaWQgKmR1bW15KQoreworCWlmIChrZXJuZWxfdGhyZWFkKGVlaF9ldmVudF9oYW5kbGVyLCBOVUxMLCBDTE9ORV9LRVJORUwpIDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gc3RhcnQgRUVIIGRhZW1vblxuIik7Cit9CisKKy8qKgorICogZWVoX3NlbmRfZmFpbHVyZV9ldmVudCAtIGdlbmVyYXRlIGEgUENJIGVycm9yIGV2ZW50CisgKiBAZGV2IHBjaSBkZXZpY2UKKyAqCisgKiBUaGlzIHJvdXRpbmUgY2FuIGJlIGNhbGxlZCB3aXRoaW4gYW4gaW50ZXJydXB0IGNvbnRleHQ7CisgKiB0aGUgYWN0dWFsIGV2ZW50IHdpbGwgYmUgZGVsaXZlcmVkIGluIGEgbm9ybWFsIGNvbnRleHQKKyAqIChmcm9tIGEgd29ya3F1ZXVlKS4KKyAqLworaW50IGVlaF9zZW5kX2ZhaWx1cmVfZXZlbnQgKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHBjaV9kZXYgKmRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRpbWVfdW5hdmFpbCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBlZWhfZXZlbnQgKmV2ZW50OworCisJZXZlbnQgPSBrbWFsbG9jKHNpemVvZigqZXZlbnQpLCBHRlBfQVRPTUlDKTsKKwlpZiAoZXZlbnQgPT0gTlVMTCkgeworCQlwcmludGsgKEtFUk5fRVJSICJFRUg6IG91dCBvZiBtZW1vcnksIGV2ZW50IG5vdCBoYW5kbGVkXG4iKTsKKwkJcmV0dXJuIDE7CisgCX0KKworCWlmIChkZXYpCisJCXBjaV9kZXZfZ2V0KGRldik7CisKKwlldmVudC0+ZG4gPSBkbjsKKwlldmVudC0+ZGV2ID0gZGV2OworCWV2ZW50LT5zdGF0ZSA9IHN0YXRlOworCWV2ZW50LT50aW1lX3VuYXZhaWwgPSB0aW1lX3VuYXZhaWw7CisKKwkvKiBXZSBtYXkgb3IgbWF5IG5vdCBiZSBjYWxsZWQgaW4gYW4gaW50ZXJydXB0IGNvbnRleHQgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmZWVoX2V2ZW50bGlzdF9sb2NrLCBmbGFncyk7CisJbGlzdF9hZGQoJmV2ZW50LT5saXN0LCAmZWVoX2V2ZW50bGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWVoX2V2ZW50bGlzdF9sb2NrLCBmbGFncyk7CisKKwlzY2hlZHVsZV93b3JrKCZlZWhfZXZlbnRfd3EpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqIEVORCBPRiBGSUxFICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9pb21tdS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2lvbW11LmMKaW5kZXggZmNjNTBiZi4uOTdiYTUyMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2lvbW11LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2lvbW11LmMKQEAgLTQyLDcgKzQyLDYgQEAKICNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgogI2luY2x1ZGUgPGFzbS9hYnNfYWRkci5oPgogI2luY2x1ZGUgPGFzbS9wU2VyaWVzX3JlY29uZmlnLmg+Ci0jaW5jbHVkZSA8YXNtL3N5c3RlbWNmZy5oPgogI2luY2x1ZGUgPGFzbS9maXJtd2FyZS5oPgogI2luY2x1ZGUgPGFzbS90Y2UuaD4KICNpbmNsdWRlIDxhc20vcHBjLXBjaS5oPgpAQCAtNTgyLDcgKzU4MSw3IEBACiAJCXJldHVybjsKIAl9CiAKLQlpZiAoc3lzdGVtY2ZnLT5wbGF0Zm9ybSAmIFBMQVRGT1JNX0xQQVIpIHsKKwlpZiAocGxhdGZvcm1faXNfbHBhcigpKSB7CiAJCWlmIChmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX01VTFRJVENFKSkgewogCQkJcHBjX21kLnRjZV9idWlsZCA9IHRjZV9idWlsZG11bHRpX3BTZXJpZXNMUDsKIAkJCXBwY19tZC50Y2VfZnJlZQkgPSB0Y2VfZnJlZW11bHRpX3BTZXJpZXNMUDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wY2kuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wY2kuYwppbmRleCBjMTk4NjU2Li45OTlhOTYyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BjaS5jCkBAIC0xMDcsNyArMTA3LDYgQEAKIAogdm9pZCBfX2luaXQgcFNlcmllc19maW5hbF9maXh1cCh2b2lkKQogewotCXBoYnNfcmVtYXBfaW8oKTsKIAlwU2VyaWVzX3JlcXVlc3RfcmVnaW9ucygpOwogCiAJcGNpX2FkZHJfY2FjaGVfYnVpbGQoKTsKQEAgLTEyMyw3ICsxMjIsNyBAQAogCWludCBpOwogCXVuc2lnbmVkIGludCByZWc7CiAKLQlpZiAoIShzeXN0ZW1jZmctPnBsYXRmb3JtICYgUExBVEZPUk1fUFNFUklFUykpCisJaWYgKCFwbGF0Zm9ybV9pc19wc2VyaWVzKCkpCiAJCXJldHVybjsKIAogCXByaW50aygiVXNpbmcgSU5UQyBmb3IgVzgyYzEwNSBJREUgY29udHJvbGxlci5cbiIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3JlY29uZmlnLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcmVjb25maWcuYwppbmRleCBkN2Q0MDAzLi5kODg2NDE2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcmVjb25maWcuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcmVjb25maWcuYwpAQCAtNDA4LDcgKzQwOCw3IEBACiB7CiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICplbnQ7CiAKLQlpZiAoIShzeXN0ZW1jZmctPnBsYXRmb3JtICYgUExBVEZPUk1fUFNFUklFUykpCisJaWYgKCFwbGF0Zm9ybV9pc19wc2VyaWVzKCkpCiAJCXJldHVybiAwOwogCiAJZW50ID0gY3JlYXRlX3Byb2NfZW50cnkoInBwYzY0L29mZHQiLCBTX0lXVVNSLCBOVUxMKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ydGFzZC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3J0YXNkLmMKaW5kZXggZTI2YjA0Mi4uYTZmNjI4ZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3J0YXNkLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3J0YXNkLmMKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlIDxhc20vcHJvbS5oPgogI2luY2x1ZGUgPGFzbS9udnJhbS5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KLSNpbmNsdWRlIDxhc20vc3lzdGVtY2ZnLmg+CiAKICNpZiAwCiAjZGVmaW5lIERFQlVHKEEuLi4pCXByaW50ayhLRVJOX0VSUiBBKQpAQCAtNDgyLDEwICs0ODEsMTIgQEAKIHsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmVudHJ5OwogCi0JLyogTm8gUlRBUywgb25seSB3YXJuIGlmIHdlIGFyZSBvbiBhIHBTZXJpZXMgYm94ICAqLworCWlmICghcGxhdGZvcm1faXNfcHNlcmllcygpKQorCQlyZXR1cm4gMDsKKworCS8qIE5vIFJUQVMgKi8KIAlpZiAocnRhc190b2tlbigiZXZlbnQtc2NhbiIpID09IFJUQVNfVU5LTk9XTl9TRVJWSUNFKSB7Ci0JCWlmIChzeXN0ZW1jZmctPnBsYXRmb3JtICYgUExBVEZPUk1fUFNFUklFUykKLQkJCXByaW50ayhLRVJOX0lORk8gInJ0YXNkOiBubyBldmVudC1zY2FuIG9uIHN5c3RlbVxuIik7CisJCXByaW50ayhLRVJOX0lORk8gInJ0YXNkOiBubyBldmVudC1zY2FuIG9uIHN5c3RlbVxuIik7CiAJCXJldHVybiAxOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvc2NhbmxvZy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NjYW5sb2cuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9wcGM2NC9rZXJuZWwvc2NhbmxvZy5jCnJlbmFtZSB0byBhcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvc2NhbmxvZy5jCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvc2V0dXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zZXR1cC5jCmluZGV4IGU3OGMzOTMuLjMxOTkwODIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zZXR1cC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zZXR1cC5jCkBAIC0yNDksNyArMjQ5LDcgQEAKIAkJcHBjX21kLmlkbGVfbG9vcCA9IGRlZmF1bHRfaWRsZTsKIAl9CiAKLQlpZiAoc3lzdGVtY2ZnLT5wbGF0Zm9ybSAmIFBMQVRGT1JNX0xQQVIpCisJaWYgKHBsYXRmb3JtX2lzX2xwYXIoKSkKIAkJcHBjX21kLmVuYWJsZV9wbWNzID0gcHNlcmllc19scGFyX2VuYWJsZV9wbWNzOwogCWVsc2UKIAkJcHBjX21kLmVuYWJsZV9wbWNzID0gcG93ZXI0X2VuYWJsZV9wbWNzOwpAQCAtMzA2LDkgKzMwNiw3IEBACiAJfQogCiAJb2Zfbm9kZV9wdXQoZG4pOwotIG5vX3J0YXM6Ci0JcHJpbnRrKEtFUk5fSU5GTyAiZmlybXdhcmVfZmVhdHVyZXMgPSAweCVseFxuIiwgCi0JICAgICAgIHBwYzY0X2Zpcm13YXJlX2ZlYXR1cmVzKTsKK25vX3J0YXM6CiAKIAlEQkcoIiA8LSBmd19mZWF0dXJlX2luaXQoKVxuIik7CiB9CkBAIC0zNzgsNyArMzc2LDcgQEAKIAogCWZ3X2ZlYXR1cmVfaW5pdCgpOwogCQotCWlmIChzeXN0ZW1jZmctPnBsYXRmb3JtICYgUExBVEZPUk1fTFBBUikKKwlpZiAocGxhdGZvcm1faXNfbHBhcigpKQogCQlocHRlX2luaXRfbHBhcigpOwogCWVsc2UgewogCQlocHRlX2luaXRfbmF0aXZlKCk7CkBAIC0zODgsNyArMzg2LDcgQEAKIAogCWdlbmVyaWNfZmluZF9sZWdhY3lfc2VyaWFsX3BvcnRzKCZwaHlzcG9ydCwgJmRlZmF1bHRfc3BlZWQpOwogCi0JaWYgKHN5c3RlbWNmZy0+cGxhdGZvcm0gJiBQTEFURk9STV9MUEFSKQorCWlmIChwbGF0Zm9ybV9pc19scGFyKCkpCiAJCWZpbmRfdWRiZ192dGVybSgpOwogCWVsc2UgaWYgKHBoeXNwb3J0KSB7CiAJCS8qIE1hcCB0aGUgdWFydCBmb3IgdWRiZy4gKi8KQEAgLTQ2OSw2ICs0NjcsNyBAQAogCQkgKiBtb3JlLgogCQkgKi8KIAkJY2xlYXJfdGhyZWFkX2ZsYWcoVElGX1BPTExJTkdfTlJGTEFHKTsKKwkJc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKIAogCQkvKgogCQkgKiBTTVQgZHluYW1pYyBtb2RlLiBDZWRlIHdpbGwgcmVzdWx0IGluIHRoaXMgdGhyZWFkIGdvaW5nCkBAIC00ODEsNiArNDgwLDcgQEAKIAkJCWNlZGVfcHJvY2Vzc29yKCk7CiAJCWVsc2UKIAkJCWxvY2FsX2lycV9lbmFibGUoKTsKKwkJc2V0X3RocmVhZF9mbGFnKFRJRl9QT0xMSU5HX05SRkxBRyk7CiAJfSBlbHNlIHsKIAkJLyoKIAkJICogR2l2ZSB0aGUgSFYgYW4gb3Bwb3J0dW5pdHkgYXQgdGhlIHByb2Nlc3Nvciwgc2luY2Ugd2UgYXJlCkBAIC00OTIsMTEgKzQ5MiwxMSBAQAogCiBzdGF0aWMgdm9pZCBwc2VyaWVzX2RlZGljYXRlZF9pZGxlKHZvaWQpCiB7IAotCWxvbmcgb2xkdmFsOwogCXN0cnVjdCBwYWNhX3N0cnVjdCAqbHBhY2EgPSBnZXRfcGFjYSgpOwogCXVuc2lnbmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJdW5zaWduZWQgbG9uZyBzdGFydF9zbm9vemU7CiAJdW5zaWduZWQgbG9uZyAqc210X3Nub296ZV9kZWxheSA9ICZfX2dldF9jcHVfdmFyKHNtdF9zbm9vemVfZGVsYXkpOworCXNldF90aHJlYWRfZmxhZyhUSUZfUE9MTElOR19OUkZMQUcpOwogCiAJd2hpbGUgKDEpIHsKIAkJLyoKQEAgLTUwNSwxMCArNTA1LDcgQEAKIAkJICovCiAJCWxwYWNhLT5scHBhY2EuaWRsZSA9IDE7CiAKLQkJb2xkdmFsID0gdGVzdF9hbmRfY2xlYXJfdGhyZWFkX2ZsYWcoVElGX05FRURfUkVTQ0hFRCk7Ci0JCWlmICghb2xkdmFsKSB7Ci0JCQlzZXRfdGhyZWFkX2ZsYWcoVElGX1BPTExJTkdfTlJGTEFHKTsKLQorCQlpZiAoIW5lZWRfcmVzY2hlZCgpKSB7CiAJCQlzdGFydF9zbm9vemUgPSBfX2dldF90YigpICsKIAkJCQkqc210X3Nub296ZV9kZWxheSAqIHRiX3RpY2tzX3Blcl91c2VjOwogCkBAIC01MzEsMTUgKzUyOCwxNCBAQAogCQkJfQogCiAJCQlITVRfbWVkaXVtKCk7Ci0JCQljbGVhcl90aHJlYWRfZmxhZyhUSUZfUE9MTElOR19OUkZMQUcpOwotCQl9IGVsc2UgewotCQkJc2V0X25lZWRfcmVzY2hlZCgpOwogCQl9CiAKIAkJbHBhY2EtPmxwcGFjYS5pZGxlID0gMDsKIAkJcHBjNjRfcnVubGF0Y2hfb24oKTsKIAorCQlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7CiAJCXNjaGVkdWxlKCk7CisJCXByZWVtcHRfZGlzYWJsZSgpOwogCiAJCWlmIChjcHVfaXNfb2ZmbGluZShjcHUpICYmIHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fUlVOTklORykKIAkJCWNwdV9kaWUoKTsKQEAgLTU4Myw3ICs1NzksOSBAQAogCQlscGFjYS0+bHBwYWNhLmlkbGUgPSAwOwogCQlwcGM2NF9ydW5sYXRjaF9vbigpOwogCisJCXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWQoKTsKIAkJc2NoZWR1bGUoKTsKKwkJcHJlZW1wdF9kaXNhYmxlKCk7CiAKIAkJaWYgKGNwdV9pc19vZmZsaW5lKGNwdSkgJiYgc3lzdGVtX3N0YXRlID09IFNZU1RFTV9SVU5OSU5HKQogCQkJY3B1X2RpZSgpOwpAQCAtNTkyLDcgKzU5MCw3IEBACiAKIHN0YXRpYyBpbnQgcFNlcmllc19wY2lfcHJvYmVfbW9kZShzdHJ1Y3QgcGNpX2J1cyAqYnVzKQogewotCWlmIChzeXN0ZW1jZmctPnBsYXRmb3JtICYgUExBVEZPUk1fTFBBUikKKwlpZiAocGxhdGZvcm1faXNfbHBhcigpKQogCQlyZXR1cm4gUENJX1BST0JFX0RFVlRSRUU7CiAJcmV0dXJuIFBDSV9QUk9CRV9OT1JNQUw7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvc21wLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvc21wLmMKaW5kZXggN2EyNDNlOC4uNTgwMGNkZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NtcC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zbXAuYwpAQCAtNDYsNiArNDYsNyBAQAogI2luY2x1ZGUgPGFzbS9ydGFzLmg+CiAjaW5jbHVkZSA8YXNtL3BTZXJpZXNfcmVjb25maWcuaD4KICNpbmNsdWRlIDxhc20vbXBpYy5oPgorI2luY2x1ZGUgPGFzbS92ZHNvX2RhdGFwYWdlLmg+CiAKICNpbmNsdWRlICJwbHBhcl93cmFwcGVycy5oIgogCkBAIC05Niw3ICs5Nyw3IEBACiAJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAogCWNwdV9jbGVhcihjcHUsIGNwdV9vbmxpbmVfbWFwKTsKLQlzeXN0ZW1jZmctPnByb2Nlc3NvckNvdW50LS07CisJdmRzb19kYXRhLT5wcm9jZXNzb3JDb3VudC0tOwogCiAJLypmaXggYm9vdF9jcHVpZCBoZXJlKi8KIAlpZiAoY3B1ID09IGJvb3RfY3B1aWQpCkBAIC00NDEsNyArNDQyLDcgQEAKIAlzbXBfb3BzLT5jcHVfZGllID0gcFNlcmllc19jcHVfZGllOwogCiAJLyogUHJvY2Vzc29ycyBjYW4gYmUgYWRkZWQvcmVtb3ZlZCBvbmx5IG9uIExQQVIgKi8KLQlpZiAoc3lzdGVtY2ZnLT5wbGF0Zm9ybSA9PSBQTEFURk9STV9QU0VSSUVTX0xQQVIpCisJaWYgKHBsYXRmb3JtX2lzX2xwYXIoKSkKIAkJcFNlcmllc19yZWNvbmZpZ19ub3RpZmllcl9yZWdpc3RlcigmcFNlcmllc19zbXBfbmIpOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy94aWNzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMveGljcy5jCmluZGV4IGM3MmM4NmYuLjcyYWMxODAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy94aWNzLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3hpY3MuYwpAQCAtNTQ1LDcgKzU0NSw5IEBACiAJCW9mX25vZGVfcHV0KG5wKTsKIAl9CiAKLQlpZiAoc3lzdGVtY2ZnLT5wbGF0Zm9ybSA9PSBQTEFURk9STV9QU0VSSUVTKSB7CisJaWYgKHBsYXRmb3JtX2lzX2xwYXIoKSkKKwkJb3BzID0gJnBTZXJpZXNMUF9vcHM7CisJZWxzZSB7CiAjaWZkZWYgQ09ORklHX1NNUAogCQlmb3JfZWFjaF9jcHUoaSkgewogCQkJaW50IGhhcmRfaWQ7CkBAIC01NjEsMTIgKzU2MywxMSBAQAogI2Vsc2UKIAkJeGljc19wZXJfY3B1WzBdID0gaW9yZW1hcChpbnRyX2Jhc2UsIGludHJfc2l6ZSk7CiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwotCX0gZWxzZSBpZiAoc3lzdGVtY2ZnLT5wbGF0Zm9ybSA9PSBQTEFURk9STV9QU0VSSUVTX0xQQVIpIHsKLQkJb3BzID0gJnBTZXJpZXNMUF9vcHM7CiAJfQogCiAJeGljc184MjU5X3BpYy5lbmFibGUgPSBpODI1OV9waWMuZW5hYmxlOwogCXhpY3NfODI1OV9waWMuZGlzYWJsZSA9IGk4MjU5X3BpYy5kaXNhYmxlOworCXhpY3NfODI1OV9waWMuZW5kID0gaTgyNTlfcGljLmVuZDsKIAlmb3IgKGkgPSAwOyBpIDwgMTY7ICsraSkKIAkJZ2V0X2lycV9kZXNjKGkpLT5oYW5kbGVyID0gJnhpY3NfODI1OV9waWM7CiAJZm9yICg7IGkgPCBOUl9JUlFTOyArK2kpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3UzX2lvbW11LmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3UzX2lvbW11LmMKaW5kZXggNTQzZDY1OS4uZjMyYmFmNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi91M19pb21tdS5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvdTNfaW9tbXUuYwpAQCAtMjI2LDcgKzIyNiw3IEBACiAJaW9tbXVfdGFibGVfdTMuaXRfYnVzbm8gPSAwOwogCWlvbW11X3RhYmxlX3UzLml0X29mZnNldCA9IDA7CiAJLyogaXRfc2l6ZSBpcyBpbiBudW1iZXIgb2YgZW50cmllcyAqLwotCWlvbW11X3RhYmxlX3UzLml0X3NpemUgPSBkYXJ0X3RhYmxlc2l6ZSAvIHNpemVvZih1MzIpOworCWlvbW11X3RhYmxlX3UzLml0X3NpemUgPSAoZGFydF90YWJsZXNpemUgLyBzaXplb2YodTMyKSkgPj4gREFSVF9QQUdFX0ZBQ1RPUjsKIAogCS8qIEluaXRpYWxpemUgdGhlIGNvbW1vbiBJT01NVSBjb2RlICovCiAJaW9tbXVfdGFibGVfdTMuaXRfYmFzZSA9ICh1bnNpZ25lZCBsb25nKWRhcnRfdmJhc2U7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMveG1vbi9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy94bW9uL01ha2VmaWxlCmluZGV4IDc5YTc4NGYuLmIyMDMxMmUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy94bW9uL01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy94bW9uL01ha2VmaWxlCkBAIC04LDQgKzgsNCBAQAogb2JqLSQoQ09ORklHXzZ4eCkJKz0gc3RhcnRfMzIubwogb2JqLSQoQ09ORklHXzR4eCkJKz0gc3RhcnRfMzIubwogb2JqLSQoQ09ORklHX1BQQzY0KQkrPSBzdGFydF82NC5vCi1vYmoteQkJCSs9IHhtb24ubyBwcGMtZGlzLm8gcHBjLW9wYy5vIHN1YnJfcHJmLm8gc2V0am1wLm8KK29iai15CQkJKz0geG1vbi5vIHBwYy1kaXMubyBwcGMtb3BjLm8gc2V0am1wLm8gbm9uc3RkaW8ubwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3htb24vbm9uc3RkaW8uYyBiL2FyY2gvcG93ZXJwYy94bW9uL25vbnN0ZGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg3NjU4MwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy94bW9uL25vbnN0ZGlvLmMKQEAgLTAsMCArMSwxMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwNSBQYXVsIE1hY2tlcnJhcy4KKyAqCisgKiAgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAgICAgIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxhc20vdGltZS5oPgorI2luY2x1ZGUgIm5vbnN0ZGlvLmgiCisKK2ludCB4bW9uX3B1dGNoYXIoaW50IGMpCit7CisJY2hhciBjaCA9IGM7CisKKwlpZiAoYyA9PSAnXG4nKQorCQl4bW9uX3B1dGNoYXIoJ1xyJyk7CisJcmV0dXJuIHhtb25fd3JpdGUoJmNoLCAxKSA9PSAxPyBjOiAtMTsKK30KKworc3RhdGljIGNoYXIgbGluZVsyNTZdOworc3RhdGljIGNoYXIgKmxpbmVwdHI7CitzdGF0aWMgaW50IGxpbmVsZWZ0OworCitpbnQgeG1vbl9leHBlY3QoY29uc3QgY2hhciAqc3RyLCB1bnNpZ25lZCBsb25nIHRpbWVvdXQpCit7CisJaW50IGM7CisJdW5zaWduZWQgbG9uZyB0MDsKKworCS8qIGFzc3VtZSAyNU1IeiBkZWZhdWx0IHRpbWViYXNlIGlmIHRiX3RpY2tzX3Blcl9zZWMgbm90IHNldCB5ZXQgKi8KKwl0aW1lb3V0ICo9IHRiX3RpY2tzX3Blcl9zZWM/IHRiX3RpY2tzX3Blcl9zZWM6IDI1MDAwMDAwOworCXQwID0gZ2V0X3RibCgpOworCWRvIHsKKwkJbGluZXB0ciA9IGxpbmU7CisJCWZvciAoOzspIHsKKwkJCWMgPSB4bW9uX3JlYWRfcG9sbCgpOworCQkJaWYgKGMgPT0gLTEpIHsKKwkJCQlpZiAoZ2V0X3RibCgpIC0gdDAgPiB0aW1lb3V0KQorCQkJCQlyZXR1cm4gMDsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmIChjID09ICdcbicpCisJCQkJYnJlYWs7CisJCQlpZiAoYyAhPSAnXHInICYmIGxpbmVwdHIgPCAmbGluZVtzaXplb2YobGluZSkgLSAxXSkKKwkJCQkqbGluZXB0cisrID0gYzsKKwkJfQorCQkqbGluZXB0ciA9IDA7CisJfSB3aGlsZSAoc3Ryc3RyKGxpbmUsIHN0cikgPT0gTlVMTCk7CisJcmV0dXJuIDE7Cit9CisKK2ludCB4bW9uX2dldGNoYXIodm9pZCkKK3sKKwlpbnQgYzsKKworCWlmIChsaW5lbGVmdCA9PSAwKSB7CisJCWxpbmVwdHIgPSBsaW5lOworCQlmb3IgKDs7KSB7CisJCQljID0geG1vbl9yZWFkY2hhcigpOworCQkJaWYgKGMgPT0gLTEgfHwgYyA9PSA0KQorCQkJCWJyZWFrOworCQkJaWYgKGMgPT0gJ1xyJyB8fCBjID09ICdcbicpIHsKKwkJCQkqbGluZXB0cisrID0gJ1xuJzsKKwkJCQl4bW9uX3B1dGNoYXIoJ1xuJyk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlzd2l0Y2ggKGMpIHsKKwkJCWNhc2UgMDE3NzoKKwkJCWNhc2UgJ1xiJzoKKwkJCQlpZiAobGluZXB0ciA+IGxpbmUpIHsKKwkJCQkJeG1vbl9wdXRjaGFyKCdcYicpOworCQkJCQl4bW9uX3B1dGNoYXIoJyAnKTsKKwkJCQkJeG1vbl9wdXRjaGFyKCdcYicpOworCQkJCQktLWxpbmVwdHI7CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSAnVScgJiAweDFGOgorCQkJCXdoaWxlIChsaW5lcHRyID4gbGluZSkgeworCQkJCQl4bW9uX3B1dGNoYXIoJ1xiJyk7CisJCQkJCXhtb25fcHV0Y2hhcignICcpOworCQkJCQl4bW9uX3B1dGNoYXIoJ1xiJyk7CisJCQkJCS0tbGluZXB0cjsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWlmIChsaW5lcHRyID49ICZsaW5lW3NpemVvZihsaW5lKSAtIDFdKQorCQkJCQl4bW9uX3B1dGNoYXIoJ1xhJyk7CisJCQkJZWxzZSB7CisJCQkJCXhtb25fcHV0Y2hhcihjKTsKKwkJCQkJKmxpbmVwdHIrKyA9IGM7CisJCQkJfQorCQkJfQorCQl9CisJCWxpbmVsZWZ0ID0gbGluZXB0ciAtIGxpbmU7CisJCWxpbmVwdHIgPSBsaW5lOworCX0KKwlpZiAobGluZWxlZnQgPT0gMCkKKwkJcmV0dXJuIC0xOworCS0tbGluZWxlZnQ7CisJcmV0dXJuICpsaW5lcHRyKys7Cit9CisKK2NoYXIgKnhtb25fZ2V0cyhjaGFyICpzdHIsIGludCBuYikKK3sKKwljaGFyICpwOworCWludCBjOworCisJZm9yIChwID0gc3RyOyBwIDwgc3RyICsgbmIgLSAxOyApIHsKKwkJYyA9IHhtb25fZ2V0Y2hhcigpOworCQlpZiAoYyA9PSAtMSkgeworCQkJaWYgKHAgPT0gc3RyKQorCQkJCXJldHVybiBOVUxMOworCQkJYnJlYWs7CisJCX0KKwkJKnArKyA9IGM7CisJCWlmIChjID09ICdcbicpCisJCQlicmVhazsKKwl9CisJKnAgPSAwOworCXJldHVybiBzdHI7Cit9CisKK3ZvaWQgeG1vbl9wcmludGYoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisJdmFfbGlzdCBhcmdzOworCWludCBuOworCXN0YXRpYyBjaGFyIHhtb25fb3V0YnVmWzEwMjRdOworCisJdmFfc3RhcnQoYXJncywgZm9ybWF0KTsKKwluID0gdnNucHJpbnRmKHhtb25fb3V0YnVmLCBzaXplb2YoeG1vbl9vdXRidWYpLCBmb3JtYXQsIGFyZ3MpOworCXZhX2VuZChhcmdzKTsKKwl4bW9uX3dyaXRlKHhtb25fb3V0YnVmLCBuKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy94bW9uL25vbnN0ZGlvLmggYi9hcmNoL3Bvd2VycGMveG1vbi9ub25zdGRpby5oCmluZGV4IDg0MjExYTIuLjQ3Y2ViYmQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy94bW9uL25vbnN0ZGlvLmgKKysrIGIvYXJjaC9wb3dlcnBjL3htb24vbm9uc3RkaW8uaApAQCAtMSwyMiArMSwxNCBAQAotdHlwZWRlZiBpbnQJRklMRTsKLWV4dGVybiBGSUxFICp4bW9uX3N0ZGluLCAqeG1vbl9zdGRvdXQ7CiAjZGVmaW5lIEVPRgkoLTEpCi0jZGVmaW5lIHN0ZGluCXhtb25fc3RkaW4KLSNkZWZpbmUgc3Rkb3V0CXhtb25fc3Rkb3V0Ci0jZGVmaW5lIHByaW50Zgl4bW9uX3ByaW50ZgotI2RlZmluZSBmcHJpbnRmCXhtb25fZnByaW50ZgotI2RlZmluZSBmcHV0cwl4bW9uX2ZwdXRzCi0jZGVmaW5lIGZnZXRzCXhtb25fZmdldHMKLSNkZWZpbmUgcHV0Y2hhcgl4bW9uX3B1dGNoYXIKLSNkZWZpbmUgZ2V0Y2hhcgl4bW9uX2dldGNoYXIKLSNkZWZpbmUgcHV0Ywl4bW9uX3B1dGMKLSNkZWZpbmUgZ2V0Ywl4bW9uX2dldGMKLSNkZWZpbmUgZm9wZW4obiwgbSkJTlVMTAotI2RlZmluZSBmZmx1c2goZikJZG8ge30gd2hpbGUgKDApCi0jZGVmaW5lIGZjbG9zZShmKQlkbyB7fSB3aGlsZSAoMCkKLWV4dGVybiBjaGFyICpmZ2V0cyhjaGFyICosIGludCwgdm9pZCAqKTsKLWV4dGVybiB2b2lkIHhtb25fcHJpbnRmKGNvbnN0IGNoYXIgKiwgLi4uKTsKLWV4dGVybiB2b2lkIHhtb25fZnByaW50Zih2b2lkICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKLWV4dGVybiB2b2lkIHhtb25fc3ByaW50ZihjaGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKIAotI2RlZmluZSBwZXJyb3IocykJcHJpbnRmKCIlczogbm8gZmlsZXMhXG4iLCAocykpCisjZGVmaW5lIHByaW50Zgl4bW9uX3ByaW50ZgorI2RlZmluZSBwdXRjaGFyCXhtb25fcHV0Y2hhcgorCitleHRlcm4gaW50IHhtb25fcHV0Y2hhcihpbnQgYyk7CitleHRlcm4gaW50IHhtb25fZ2V0Y2hhcih2b2lkKTsKK2V4dGVybiBjaGFyICp4bW9uX2dldHMoY2hhciAqLCBpbnQpOworZXh0ZXJuIHZvaWQgeG1vbl9wcmludGYoY29uc3QgY2hhciAqLCAuLi4pOworZXh0ZXJuIHZvaWQgeG1vbl9tYXBfc2NjKHZvaWQpOworZXh0ZXJuIGludCB4bW9uX2V4cGVjdChjb25zdCBjaGFyICpzdHIsIHVuc2lnbmVkIGxvbmcgdGltZW91dCk7CitleHRlcm4gaW50IHhtb25fd3JpdGUodm9pZCAqcHRyLCBpbnQgbmIpOworZXh0ZXJuIGludCB4bW9uX3JlYWRjaGFyKHZvaWQpOworZXh0ZXJuIGludCB4bW9uX3JlYWRfcG9sbCh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy94bW9uL3NldGptcC5TIGIvYXJjaC9wb3dlcnBjL3htb24vc2V0am1wLlMKaW5kZXggZjhlNDBkZi4uOTZhOTFmMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3htb24vc2V0am1wLlMKKysrIGIvYXJjaC9wb3dlcnBjL3htb24vc2V0am1wLlMKQEAgLTE0LDYxICsxNCw2MSBAQAogCiBfR0xPQkFMKHhtb25fc2V0am1wKQogCW1mbHIJcjAKLQlTVEwJcjAsMChyMykKLQlTVEwJcjEsU1pMKHIzKQotCVNUTAlyMiwyKlNaTChyMykKKwlQUENfU1RMCXIwLDAocjMpCisJUFBDX1NUTAlyMSxTWkwocjMpCisJUFBDX1NUTAlyMiwyKlNaTChyMykKIAltZmNyCXIwCi0JU1RMCXIwLDMqU1pMKHIzKQotCVNUTAlyMTMsNCpTWkwocjMpCi0JU1RMCXIxNCw1KlNaTChyMykKLQlTVEwJcjE1LDYqU1pMKHIzKQotCVNUTAlyMTYsNypTWkwocjMpCi0JU1RMCXIxNyw4KlNaTChyMykKLQlTVEwJcjE4LDkqU1pMKHIzKQotCVNUTAlyMTksMTAqU1pMKHIzKQotCVNUTAlyMjAsMTEqU1pMKHIzKQotCVNUTAlyMjEsMTIqU1pMKHIzKQotCVNUTAlyMjIsMTMqU1pMKHIzKQotCVNUTAlyMjMsMTQqU1pMKHIzKQotCVNUTAlyMjQsMTUqU1pMKHIzKQotCVNUTAlyMjUsMTYqU1pMKHIzKQotCVNUTAlyMjYsMTcqU1pMKHIzKQotCVNUTAlyMjcsMTgqU1pMKHIzKQotCVNUTAlyMjgsMTkqU1pMKHIzKQotCVNUTAlyMjksMjAqU1pMKHIzKQotCVNUTAlyMzAsMjEqU1pMKHIzKQotCVNUTAlyMzEsMjIqU1pMKHIzKQorCVBQQ19TVEwJcjAsMypTWkwocjMpCisJUFBDX1NUTAlyMTMsNCpTWkwocjMpCisJUFBDX1NUTAlyMTQsNSpTWkwocjMpCisJUFBDX1NUTAlyMTUsNipTWkwocjMpCisJUFBDX1NUTAlyMTYsNypTWkwocjMpCisJUFBDX1NUTAlyMTcsOCpTWkwocjMpCisJUFBDX1NUTAlyMTgsOSpTWkwocjMpCisJUFBDX1NUTAlyMTksMTAqU1pMKHIzKQorCVBQQ19TVEwJcjIwLDExKlNaTChyMykKKwlQUENfU1RMCXIyMSwxMipTWkwocjMpCisJUFBDX1NUTAlyMjIsMTMqU1pMKHIzKQorCVBQQ19TVEwJcjIzLDE0KlNaTChyMykKKwlQUENfU1RMCXIyNCwxNSpTWkwocjMpCisJUFBDX1NUTAlyMjUsMTYqU1pMKHIzKQorCVBQQ19TVEwJcjI2LDE3KlNaTChyMykKKwlQUENfU1RMCXIyNywxOCpTWkwocjMpCisJUFBDX1NUTAlyMjgsMTkqU1pMKHIzKQorCVBQQ19TVEwJcjI5LDIwKlNaTChyMykKKwlQUENfU1RMCXIzMCwyMSpTWkwocjMpCisJUFBDX1NUTAlyMzEsMjIqU1pMKHIzKQogCWxpCXIzLDAKIAlibHIKIAogX0dMT0JBTCh4bW9uX2xvbmdqbXApCi0JQ01QSQlyNCwwCisJUFBDX0xDTVBJIHI0LDAKIAlibmUJMWYKIAlsaQlyNCwxCi0xOglMREwJcjEzLDQqU1pMKHIzKQotCUxETAlyMTQsNSpTWkwocjMpCi0JTERMCXIxNSw2KlNaTChyMykKLQlMREwJcjE2LDcqU1pMKHIzKQotCUxETAlyMTcsOCpTWkwocjMpCi0JTERMCXIxOCw5KlNaTChyMykKLQlMREwJcjE5LDEwKlNaTChyMykKLQlMREwJcjIwLDExKlNaTChyMykKLQlMREwJcjIxLDEyKlNaTChyMykKLQlMREwJcjIyLDEzKlNaTChyMykKLQlMREwJcjIzLDE0KlNaTChyMykKLQlMREwJcjI0LDE1KlNaTChyMykKLQlMREwJcjI1LDE2KlNaTChyMykKLQlMREwJcjI2LDE3KlNaTChyMykKLQlMREwJcjI3LDE4KlNaTChyMykKLQlMREwJcjI4LDE5KlNaTChyMykKLQlMREwJcjI5LDIwKlNaTChyMykKLQlMREwJcjMwLDIxKlNaTChyMykKLQlMREwJcjMxLDIyKlNaTChyMykKLQlMREwJcjAsMypTWkwocjMpCisxOglQUENfTEwJcjEzLDQqU1pMKHIzKQorCVBQQ19MTAlyMTQsNSpTWkwocjMpCisJUFBDX0xMCXIxNSw2KlNaTChyMykKKwlQUENfTEwJcjE2LDcqU1pMKHIzKQorCVBQQ19MTAlyMTcsOCpTWkwocjMpCisJUFBDX0xMCXIxOCw5KlNaTChyMykKKwlQUENfTEwJcjE5LDEwKlNaTChyMykKKwlQUENfTEwJcjIwLDExKlNaTChyMykKKwlQUENfTEwJcjIxLDEyKlNaTChyMykKKwlQUENfTEwJcjIyLDEzKlNaTChyMykKKwlQUENfTEwJcjIzLDE0KlNaTChyMykKKwlQUENfTEwJcjI0LDE1KlNaTChyMykKKwlQUENfTEwJcjI1LDE2KlNaTChyMykKKwlQUENfTEwJcjI2LDE3KlNaTChyMykKKwlQUENfTEwJcjI3LDE4KlNaTChyMykKKwlQUENfTEwJcjI4LDE5KlNaTChyMykKKwlQUENfTEwJcjI5LDIwKlNaTChyMykKKwlQUENfTEwJcjMwLDIxKlNaTChyMykKKwlQUENfTEwJcjMxLDIyKlNaTChyMykKKwlQUENfTEwJcjAsMypTWkwocjMpCiAJbXRjcmYJMHgzOCxyMAotCUxETAlyMCwwKHIzKQotCUxETAlyMSxTWkwocjMpCi0JTERMCXIyLDIqU1pMKHIzKQorCVBQQ19MTAlyMCwwKHIzKQorCVBQQ19MTAlyMSxTWkwocjMpCisJUFBDX0xMCXIyLDIqU1pMKHIzKQogCW10bHIJcjAKIAltcglyMyxyNAogCWJscgpAQCAtODQsNTIgKzg0LDUyIEBACiAgKiBkaWZmZXJlbnQgQUJJcywgdGhvdWdoKS4KICAqLwogX0dMT0JBTCh4bW9uX3NhdmVfcmVncykKLQlTVEwJcjAsMCpTWkwocjMpCi0JU1RMCXIyLDIqU1pMKHIzKQotCVNUTAlyMywzKlNaTChyMykKLQlTVEwJcjQsNCpTWkwocjMpCi0JU1RMCXI1LDUqU1pMKHIzKQotCVNUTAlyNiw2KlNaTChyMykKLQlTVEwJcjcsNypTWkwocjMpCi0JU1RMCXI4LDgqU1pMKHIzKQotCVNUTAlyOSw5KlNaTChyMykKLQlTVEwJcjEwLDEwKlNaTChyMykKLQlTVEwJcjExLDExKlNaTChyMykKLQlTVEwJcjEyLDEyKlNaTChyMykKLQlTVEwJcjEzLDEzKlNaTChyMykKLQlTVEwJcjE0LDE0KlNaTChyMykKLQlTVEwJcjE1LDE1KlNaTChyMykKLQlTVEwJcjE2LDE2KlNaTChyMykKLQlTVEwJcjE3LDE3KlNaTChyMykKLQlTVEwJcjE4LDE4KlNaTChyMykKLQlTVEwJcjE5LDE5KlNaTChyMykKLQlTVEwJcjIwLDIwKlNaTChyMykKLQlTVEwJcjIxLDIxKlNaTChyMykKLQlTVEwJcjIyLDIyKlNaTChyMykKLQlTVEwJcjIzLDIzKlNaTChyMykKLQlTVEwJcjI0LDI0KlNaTChyMykKLQlTVEwJcjI1LDI1KlNaTChyMykKLQlTVEwJcjI2LDI2KlNaTChyMykKLQlTVEwJcjI3LDI3KlNaTChyMykKLQlTVEwJcjI4LDI4KlNaTChyMykKLQlTVEwJcjI5LDI5KlNaTChyMykKLQlTVEwJcjMwLDMwKlNaTChyMykKLQlTVEwJcjMxLDMxKlNaTChyMykKKwlQUENfU1RMCXIwLDAqU1pMKHIzKQorCVBQQ19TVEwJcjIsMipTWkwocjMpCisJUFBDX1NUTAlyMywzKlNaTChyMykKKwlQUENfU1RMCXI0LDQqU1pMKHIzKQorCVBQQ19TVEwJcjUsNSpTWkwocjMpCisJUFBDX1NUTAlyNiw2KlNaTChyMykKKwlQUENfU1RMCXI3LDcqU1pMKHIzKQorCVBQQ19TVEwJcjgsOCpTWkwocjMpCisJUFBDX1NUTAlyOSw5KlNaTChyMykKKwlQUENfU1RMCXIxMCwxMCpTWkwocjMpCisJUFBDX1NUTAlyMTEsMTEqU1pMKHIzKQorCVBQQ19TVEwJcjEyLDEyKlNaTChyMykKKwlQUENfU1RMCXIxMywxMypTWkwocjMpCisJUFBDX1NUTAlyMTQsMTQqU1pMKHIzKQorCVBQQ19TVEwJcjE1LDE1KlNaTChyMykKKwlQUENfU1RMCXIxNiwxNipTWkwocjMpCisJUFBDX1NUTAlyMTcsMTcqU1pMKHIzKQorCVBQQ19TVEwJcjE4LDE4KlNaTChyMykKKwlQUENfU1RMCXIxOSwxOSpTWkwocjMpCisJUFBDX1NUTAlyMjAsMjAqU1pMKHIzKQorCVBQQ19TVEwJcjIxLDIxKlNaTChyMykKKwlQUENfU1RMCXIyMiwyMipTWkwocjMpCisJUFBDX1NUTAlyMjMsMjMqU1pMKHIzKQorCVBQQ19TVEwJcjI0LDI0KlNaTChyMykKKwlQUENfU1RMCXIyNSwyNSpTWkwocjMpCisJUFBDX1NUTAlyMjYsMjYqU1pMKHIzKQorCVBQQ19TVEwJcjI3LDI3KlNaTChyMykKKwlQUENfU1RMCXIyOCwyOCpTWkwocjMpCisJUFBDX1NUTAlyMjksMjkqU1pMKHIzKQorCVBQQ19TVEwJcjMwLDMwKlNaTChyMykKKwlQUENfU1RMCXIzMSwzMSpTWkwocjMpCiAJLyogZ28gdXAgb25lIHN0YWNrIGZyYW1lIGZvciBTUCAqLwotCUxETAlyNCwwKHIxKQotCVNUTAlyNCwxKlNaTChyMykKKwlQUENfTEwJcjQsMChyMSkKKwlQUENfU1RMCXI0LDEqU1pMKHIzKQogCS8qIGdldCBjYWxsZXIncyBMUiAqLwotCUxETAlyMCxMUlNBVkUocjQpCi0JU1RMCXIwLF9OSVAtU1RBQ0tfRlJBTUVfT1ZFUkhFQUQocjMpCi0JU1RMCXIwLF9MSU5LLVNUQUNLX0ZSQU1FX09WRVJIRUFEKHIzKQorCVBQQ19MTAlyMCxMUlNBVkUocjQpCisJUFBDX1NUTAlyMCxfTklQLVNUQUNLX0ZSQU1FX09WRVJIRUFEKHIzKQorCVBQQ19TVEwJcjAsX0xJTkstU1RBQ0tfRlJBTUVfT1ZFUkhFQUQocjMpCiAJbWZtc3IJcjAKLQlTVEwJcjAsX01TUi1TVEFDS19GUkFNRV9PVkVSSEVBRChyMykKKwlQUENfU1RMCXIwLF9NU1ItU1RBQ0tfRlJBTUVfT1ZFUkhFQUQocjMpCiAJbWZjdHIJcjAKLQlTVEwJcjAsX0NUUi1TVEFDS19GUkFNRV9PVkVSSEVBRChyMykKKwlQUENfU1RMCXIwLF9DVFItU1RBQ0tfRlJBTUVfT1ZFUkhFQUQocjMpCiAJbWZ4ZXIJcjAKLQlTVEwJcjAsX1hFUi1TVEFDS19GUkFNRV9PVkVSSEVBRChyMykKKwlQUENfU1RMCXIwLF9YRVItU1RBQ0tfRlJBTUVfT1ZFUkhFQUQocjMpCiAJbWZjcglyMAotCVNUTAlyMCxfQ0NSLVNUQUNLX0ZSQU1FX09WRVJIRUFEKHIzKQorCVBQQ19TVEwJcjAsX0NDUi1TVEFDS19GUkFNRV9PVkVSSEVBRChyMykKIAlsaQlyMCwwCi0JU1RMCXIwLF9UUkFQLVNUQUNLX0ZSQU1FX09WRVJIRUFEKHIzKQorCVBQQ19TVEwJcjAsX1RSQVAtU1RBQ0tfRlJBTUVfT1ZFUkhFQUQocjMpCiAJYmxyCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMveG1vbi9zdGFydF8zMi5jIGIvYXJjaC9wb3dlcnBjL3htb24vc3RhcnRfMzIuYwppbmRleCA2OWI2NThjLi5jMjQ2NGRmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMveG1vbi9zdGFydF8zMi5jCisrKyBiL2FyY2gvcG93ZXJwYy94bW9uL3N0YXJ0XzMyLmMKQEAgLTExLDcgKzExLDYgQEAKICNpbmNsdWRlIDxsaW51eC9jdWRhLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNycS5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGFzbS94bW9uLmg+CiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KQEAgLTIyLDEwICsyMSwxMSBAQAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vZGVsYXkuaD4KICNpbmNsdWRlIDxhc20vYnRleHQuaD4KKyNpbmNsdWRlIDxhc20vdGltZS5oPgorI2luY2x1ZGUgIm5vbnN0ZGlvLmgiCiAKIHN0YXRpYyB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIF9faW9tZW0gKnNjY2MsICpzY2NkOwogdW5zaWduZWQgaW50IFRYUkRZLCBSWFJEWSwgRExBQjsKLXN0YXRpYyBpbnQgeG1vbl9leHBlY3QoY29uc3QgY2hhciAqc3RyLCB1bnNpZ25lZCBpbnQgdGltZW91dCk7CiAKIHN0YXRpYyBpbnQgdXNlX3NlcmlhbDsKIHN0YXRpYyBpbnQgdXNlX3NjcmVlbjsKQEAgLTMzLDE2ICszMyw2IEBACiBzdGF0aWMgaW50IHhtb25fdXNlX3NjY2I7CiBzdGF0aWMgc3RydWN0IGRldmljZV9ub2RlICpjaGFubmVsX25vZGU7CiAKLSNkZWZpbmUgVEJfU1BFRUQJMjUwMDAwMDAKLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgcmVhZHRiKHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IHJldDsKLQotCWFzbSB2b2xhdGlsZSgibWZ0YiAlMCIgOiAiPXIiIChyZXQpIDopOwotCXJldHVybiByZXQ7Ci19Ci0KIHZvaWQgYnVmX2FjY2Vzcyh2b2lkKQogewogCWlmIChETEFCKQpAQCAtOTEsMjMgKzgxLDcgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfUFBDX0NIUlAgKi8KIAotI2lmZGVmIENPTkZJR19NQUdJQ19TWVNSUQotc3RhdGljIHZvaWQgc3lzcnFfaGFuZGxlX3htb24oaW50IGtleSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCi0JCQkgICAgICBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQotewotCXhtb24ocmVncyk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc3lzcnFfa2V5X29wIHN5c3JxX3htb25fb3AgPQotewotCS5oYW5kbGVyID0Jc3lzcnFfaGFuZGxlX3htb24sCi0JLmhlbHBfbXNnID0JIlhtb24iLAotCS5hY3Rpb25fbXNnID0JIkVudGVyaW5nIHhtb24iLAotfTsKLSNlbmRpZgotCi12b2lkCi14bW9uX21hcF9zY2Modm9pZCkKK3ZvaWQgeG1vbl9tYXBfc2NjKHZvaWQpCiB7CiAjaWZkZWYgQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNCiAJdm9sYXRpbGUgdW5zaWduZWQgY2hhciBfX2lvbWVtICpiYXNlOwpAQCAtMjE3LDggKzE5MSw2IEBACiAJUlhSRFkgPSAxOwogCURMQUIgPSAweDgwOwogI2VuZGlmIC8qIHBsYXRmb3JtICovCi0KLQlyZWdpc3Rlcl9zeXNycV9rZXkoJ3gnLCAmc3lzcnFfeG1vbl9vcCk7CiB9CiAKIHN0YXRpYyBpbnQgc2NjX2luaXRpYWxpemVkID0gMDsKQEAgLTIzOCw4ICsyMTAsNyBAQAogI2VuZGlmIC8qIENPTkZJR19BREJfQ1VEQSAqLwogfQogCi1pbnQKLXhtb25fd3JpdGUodm9pZCAqaGFuZGxlLCB2b2lkICpwdHIsIGludCBuYikKK2ludCB4bW9uX3dyaXRlKHZvaWQgKnB0ciwgaW50IG5iKQogewogCWNoYXIgKnAgPSBwdHI7CiAJaW50IGksIGMsIGN0OwpAQCAtMzExLDggKzI4Miw3IEBACiAJIlwwLlwwKlwwK1wwXDBcMFwwXDAvXHJcMC1cMCIJCQkvKiAweDQwIC0gMHg0ZiAqLwogCSJcMFwwMDAwMTIzNDU2Nzg5XDBcMFwwIjsJCQkvKiAweDUwIC0gMHg1ZiAqLwogCi1zdGF0aWMgaW50Ci14bW9uX2dldF9hZGJfa2V5KHZvaWQpCitzdGF0aWMgaW50IHhtb25fZ2V0X2FkYl9rZXkodm9pZCkKIHsKIAlpbnQgaywgdCwgb247CiAKQEAgLTM1MCwzMiArMzIwLDIxIEBACiB9CiAjZW5kaWYgLyogQ09ORklHX0JPT1RYX1RFWFQgKi8KIAotaW50Ci14bW9uX3JlYWQodm9pZCAqaGFuZGxlLCB2b2lkICpwdHIsIGludCBuYikKK2ludCB4bW9uX3JlYWRjaGFyKHZvaWQpCiB7Ci0gICAgY2hhciAqcCA9IHB0cjsKLSAgICBpbnQgaTsKLQogI2lmZGVmIENPTkZJR19CT09UWF9URVhUCi0gICAgaWYgKHVzZV9zY3JlZW4pIHsKLQlmb3IgKGkgPSAwOyBpIDwgbmI7ICsraSkKLQkgICAgKnArKyA9IHhtb25fZ2V0X2FkYl9rZXkoKTsKLQlyZXR1cm4gaTsKLSAgICB9CisJaWYgKHVzZV9zY3JlZW4pCisJCXJldHVybiB4bW9uX2dldF9hZGJfa2V5KCk7CiAjZW5kaWYKLSAgICBpZiAoIXNjY19pbml0aWFsaXplZCkKLQl4bW9uX2luaXRfc2NjKCk7Ci0gICAgZm9yIChpID0gMDsgaSA8IG5iOyArK2kpIHsKKwlpZiAoIXNjY19pbml0aWFsaXplZCkKKwkJeG1vbl9pbml0X3NjYygpOwogCXdoaWxlICgoKnNjY2MgJiBSWFJEWSkgPT0gMCkKLQkgICAgZG9fcG9sbF9hZGIoKTsKKwkJZG9fcG9sbF9hZGIoKTsKIAlidWZfYWNjZXNzKCk7Ci0JKnArKyA9ICpzY2NkOwotICAgIH0KLSAgICByZXR1cm4gaTsKKwlyZXR1cm4gKnNjY2Q7CiB9CiAKLWludAoteG1vbl9yZWFkX3BvbGwodm9pZCkKK2ludCB4bW9uX3JlYWRfcG9sbCh2b2lkKQogewogCWlmICgoKnNjY2MgJiBSWFJEWSkgPT0gMCkgewogCQlkb19wb2xsX2FkYigpOwpAQCAtMzk1LDggKzM1NCw3IEBACiAgICAgMywgIDB4YzEsCQkvKiByeCBlbmFibGUsIDggYml0cyAqLwogfTsKIAotdm9pZAoteG1vbl9pbml0X3NjYyh2b2lkKQordm9pZCB4bW9uX2luaXRfc2NjKHZvaWQpCiB7CiAJaWYgKCBfbWFjaGluZSA9PSBfTUFDSF9jaHJwICkKIAl7CkBAIC00MTAsNiArMzY4LDcgQEAKIAllbHNlIGlmICggX21hY2hpbmUgPT0gX01BQ0hfUG1hYyApCiAJewogCQlpbnQgaSwgeDsKKwkJdW5zaWduZWQgbG9uZyB0aW1lb3V0OwogCiAJCWlmIChjaGFubmVsX25vZGUgIT0gMCkKIAkJCXBtYWNfY2FsbF9mZWF0dXJlKApAQCAtNDI0LDggKzM4MywxMiBAQAogCQkJCVBNQUNfRlRSX01PREVNX0VOQUJMRSwKIAkJCQljaGFubmVsX25vZGUsIDAsIDEpOwogCQkJcHJpbnRrKEtFUk5fSU5GTyAiTW9kZW0gcG93ZXJlZCB1cCBieSBkZWJ1Z2dlciAhXG4iKTsKLQkJCXQwID0gcmVhZHRiKCk7Ci0JCQl3aGlsZSAocmVhZHRiKCkgLSB0MCA8IDMqVEJfU1BFRUQpCisJCQl0MCA9IGdldF90YmwoKTsKKwkJCXRpbWVvdXQgPSAzICogdGJfdGlja3NfcGVyX3NlYzsKKwkJCWlmICh0aW1lb3V0ID09IDApCisJCQkJLyogYXNzdW1lIDI1TUh6IGlmIHRiX3RpY2tzX3Blcl9zZWMgbm90IHNldCAqLworCQkJCXRpbWVvdXQgPSA3NTAwMDAwMDsKKwkJCXdoaWxlIChnZXRfdGJsKCkgLSB0MCA8IHRpbWVvdXQpCiAJCQkJZWllaW8oKTsKIAkJfQogCQkvKiB1c2UgdGhlIEIgY2hhbm5lbCBpZiByZXF1ZXN0ZWQgKi8KQEAgLTQ0NywxNjQgKzQxMCwxOSBAQAogCXNjY19pbml0aWFsaXplZCA9IDE7CiAJaWYgKHZpYV9tb2RlbSkgewogCQlmb3IgKDs7KSB7Ci0JCQl4bW9uX3dyaXRlKE5VTEwsICJBVEUxVjFcciIsIDcpOworCQkJeG1vbl93cml0ZSgiQVRFMVYxXHIiLCA3KTsKIAkJCWlmICh4bW9uX2V4cGVjdCgiT0siLCA1KSkgewotCQkJCXhtb25fd3JpdGUoTlVMTCwgIkFUQVxyIiwgNCk7CisJCQkJeG1vbl93cml0ZSgiQVRBXHIiLCA0KTsKIAkJCQlpZiAoeG1vbl9leHBlY3QoIkNPTk5FQ1QiLCA0MCkpCiAJCQkJCWJyZWFrOwogCQkJfQotCQkJeG1vbl93cml0ZShOVUxMLCAiKysrIiwgMyk7CisJCQl4bW9uX3dyaXRlKCIrKysiLCAzKTsKIAkJCXhtb25fZXhwZWN0KCJPSyIsIDMpOwogCQl9CiAJfQogfQogCi12b2lkICp4bW9uX3N0ZGluOwotdm9pZCAqeG1vbl9zdGRvdXQ7Ci12b2lkICp4bW9uX3N0ZGVycjsKLQotaW50IHhtb25fcHV0YyhpbnQgYywgdm9pZCAqZikKLXsKLSAgICBjaGFyIGNoID0gYzsKLQotICAgIGlmIChjID09ICdcbicpCi0JeG1vbl9wdXRjKCdccicsIGYpOwotICAgIHJldHVybiB4bW9uX3dyaXRlKGYsICZjaCwgMSkgPT0gMT8gYzogLTE7Ci19Ci0KLWludCB4bW9uX3B1dGNoYXIoaW50IGMpCi17Ci0JcmV0dXJuIHhtb25fcHV0YyhjLCB4bW9uX3N0ZG91dCk7Ci19Ci0KLWludCB4bW9uX2ZwdXRzKGNoYXIgKnN0ciwgdm9pZCAqZikKLXsKLQlpbnQgbiA9IHN0cmxlbihzdHIpOwotCi0JcmV0dXJuIHhtb25fd3JpdGUoZiwgc3RyLCBuKSA9PSBuPyAwOiAtMTsKLX0KLQotaW50Ci14bW9uX3JlYWRjaGFyKHZvaWQpCi17Ci0JY2hhciBjaDsKLQotCWZvciAoOzspIHsKLQkJc3dpdGNoICh4bW9uX3JlYWQoeG1vbl9zdGRpbiwgJmNoLCAxKSkgewotCQljYXNlIDE6Ci0JCQlyZXR1cm4gY2g7Ci0JCWNhc2UgLTE6Ci0JCQl4bW9uX3ByaW50ZigicmVhZChzdGRpbikgcmV0dXJuZWQgLTFcclxuIiwgMCwgMCk7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyBjaGFyIGxpbmVbMjU2XTsKLXN0YXRpYyBjaGFyICpsaW5lcHRyOwotc3RhdGljIGludCBsaW5lbGVmdDsKLQotaW50IHhtb25fZXhwZWN0KGNvbnN0IGNoYXIgKnN0ciwgdW5zaWduZWQgaW50IHRpbWVvdXQpCi17Ci0JaW50IGM7Ci0JdW5zaWduZWQgaW50IHQwOwotCi0JdGltZW91dCAqPSBUQl9TUEVFRDsKLQl0MCA9IHJlYWR0YigpOwotCWRvIHsKLQkJbGluZXB0ciA9IGxpbmU7Ci0JCWZvciAoOzspIHsKLQkJCWMgPSB4bW9uX3JlYWRfcG9sbCgpOwotCQkJaWYgKGMgPT0gLTEpIHsKLQkJCQlpZiAocmVhZHRiKCkgLSB0MCA+IHRpbWVvdXQpCi0JCQkJCXJldHVybiAwOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJaWYgKGMgPT0gJ1xuJykKLQkJCQlicmVhazsKLQkJCWlmIChjICE9ICdccicgJiYgbGluZXB0ciA8ICZsaW5lW3NpemVvZihsaW5lKSAtIDFdKQotCQkJCSpsaW5lcHRyKysgPSBjOwotCQl9Ci0JCSpsaW5lcHRyID0gMDsKLQl9IHdoaWxlIChzdHJzdHIobGluZSwgc3RyKSA9PSBOVUxMKTsKLQlyZXR1cm4gMTsKLX0KLQotaW50Ci14bW9uX2dldGNoYXIodm9pZCkKLXsKLSAgICBpbnQgYzsKLQotICAgIGlmIChsaW5lbGVmdCA9PSAwKSB7Ci0JbGluZXB0ciA9IGxpbmU7Ci0JZm9yICg7OykgewotCSAgICBjID0geG1vbl9yZWFkY2hhcigpOwotCSAgICBpZiAoYyA9PSAtMSB8fCBjID09IDQpCi0JCWJyZWFrOwotCSAgICBpZiAoYyA9PSAnXHInIHx8IGMgPT0gJ1xuJykgewotCQkqbGluZXB0cisrID0gJ1xuJzsKLQkJeG1vbl9wdXRjaGFyKCdcbicpOwotCQlicmVhazsKLQkgICAgfQotCSAgICBzd2l0Y2ggKGMpIHsKLQkgICAgY2FzZSAwMTc3OgotCSAgICBjYXNlICdcYic6Ci0JCWlmIChsaW5lcHRyID4gbGluZSkgewotCQkgICAgeG1vbl9wdXRjaGFyKCdcYicpOwotCQkgICAgeG1vbl9wdXRjaGFyKCcgJyk7Ci0JCSAgICB4bW9uX3B1dGNoYXIoJ1xiJyk7Ci0JCSAgICAtLWxpbmVwdHI7Ci0JCX0KLQkJYnJlYWs7Ci0JICAgIGNhc2UgJ1UnICYgMHgxRjoKLQkJd2hpbGUgKGxpbmVwdHIgPiBsaW5lKSB7Ci0JCSAgICB4bW9uX3B1dGNoYXIoJ1xiJyk7Ci0JCSAgICB4bW9uX3B1dGNoYXIoJyAnKTsKLQkJICAgIHhtb25fcHV0Y2hhcignXGInKTsKLQkJICAgIC0tbGluZXB0cjsKLQkJfQotCQlicmVhazsKLQkgICAgZGVmYXVsdDoKLQkJaWYgKGxpbmVwdHIgPj0gJmxpbmVbc2l6ZW9mKGxpbmUpIC0gMV0pCi0JCSAgICB4bW9uX3B1dGNoYXIoJ1xhJyk7Ci0JCWVsc2UgewotCQkgICAgeG1vbl9wdXRjaGFyKGMpOwotCQkgICAgKmxpbmVwdHIrKyA9IGM7Ci0JCX0KLQkgICAgfQotCX0KLQlsaW5lbGVmdCA9IGxpbmVwdHIgLSBsaW5lOwotCWxpbmVwdHIgPSBsaW5lOwotICAgIH0KLSAgICBpZiAobGluZWxlZnQgPT0gMCkKLQlyZXR1cm4gLTE7Ci0gICAgLS1saW5lbGVmdDsKLSAgICByZXR1cm4gKmxpbmVwdHIrKzsKLX0KLQotY2hhciAqCi14bW9uX2ZnZXRzKGNoYXIgKnN0ciwgaW50IG5iLCB2b2lkICpmKQotewotICAgIGNoYXIgKnA7Ci0gICAgaW50IGM7Ci0KLSAgICBmb3IgKHAgPSBzdHI7IHAgPCBzdHIgKyBuYiAtIDE7ICkgewotCWMgPSB4bW9uX2dldGNoYXIoKTsKLQlpZiAoYyA9PSAtMSkgewotCSAgICBpZiAocCA9PSBzdHIpCi0JCXJldHVybiBOVUxMOwotCSAgICBicmVhazsKLQl9Ci0JKnArKyA9IGM7Ci0JaWYgKGMgPT0gJ1xuJykKLQkgICAgYnJlYWs7Ci0gICAgfQotICAgICpwID0gMDsKLSAgICByZXR1cm4gc3RyOwotfQotCi12b2lkCi14bW9uX2VudGVyKHZvaWQpCit2b2lkIHhtb25fZW50ZXIodm9pZCkKIHsKICNpZmRlZiBDT05GSUdfQURCX1BNVQogCWlmIChfbWFjaGluZSA9PSBfTUFDSF9QbWFjKSB7CkBAIC02MTMsOCArNDMxLDcgQEAKICNlbmRpZgogfQogCi12b2lkCi14bW9uX2xlYXZlKHZvaWQpCit2b2lkIHhtb25fbGVhdmUodm9pZCkKIHsKICNpZmRlZiBDT05GSUdfQURCX1BNVQogCWlmIChfbWFjaGluZSA9PSBfTUFDSF9QbWFjKSB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMveG1vbi9zdGFydF82NC5jIGIvYXJjaC9wb3dlcnBjL3htb24vc3RhcnRfNjQuYwppbmRleCBlNTBjMTU4Li43MTI1NTJjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMveG1vbi9zdGFydF82NC5jCisrKyBiL2FyY2gvcG93ZXJwYy94bW9uL3N0YXJ0XzY0LmMKQEAgLTYsMTgyICs2LDI5IEBACiAgKiAgICAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgogICogICAgICAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNycS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9wYWdlLmg+Ci0jaW5jbHVkZSA8YXNtL3Byb20uaD4KLSNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL3VkYmcuaD4KLSNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSAibm9uc3RkaW8uaCIKIAotI2lmZGVmIENPTkZJR19NQUdJQ19TWVNSUQotCi1zdGF0aWMgdm9pZCBzeXNycV9oYW5kbGVfeG1vbihpbnQga2V5LCBzdHJ1Y3QgcHRfcmVncyAqcHRfcmVncywKLQkJCSAgICAgIHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpIAordm9pZCB4bW9uX21hcF9zY2Modm9pZCkKIHsKLQkvKiBlbnN1cmUgeG1vbiBpcyBlbmFibGVkICovCi0JeG1vbl9pbml0KDEpOwotCWRlYnVnZ2VyKHB0X3JlZ3MpOwogfQogCi1zdGF0aWMgc3RydWN0IHN5c3JxX2tleV9vcCBzeXNycV94bW9uX29wID0gCi17Ci0JLmhhbmRsZXIgPQlzeXNycV9oYW5kbGVfeG1vbiwKLQkuaGVscF9tc2cgPQkiWG1vbiIsCi0JLmFjdGlvbl9tc2cgPQkiRW50ZXJpbmcgeG1vbiIsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBzZXR1cF94bW9uX3N5c3JxKHZvaWQpCi17Ci0JcmVnaXN0ZXJfc3lzcnFfa2V5KCd4JywgJnN5c3JxX3htb25fb3ApOwotCXJldHVybiAwOwotfQotX19pbml0Y2FsbChzZXR1cF94bW9uX3N5c3JxKTsKLSNlbmRpZiAvKiBDT05GSUdfTUFHSUNfU1lTUlEgKi8KLQotaW50Ci14bW9uX3dyaXRlKHZvaWQgKmhhbmRsZSwgdm9pZCAqcHRyLCBpbnQgbmIpCitpbnQgeG1vbl93cml0ZSh2b2lkICpwdHIsIGludCBuYikKIHsKIAlyZXR1cm4gdWRiZ193cml0ZShwdHIsIG5iKTsKIH0KIAotaW50Ci14bW9uX3JlYWQodm9pZCAqaGFuZGxlLCB2b2lkICpwdHIsIGludCBuYikKK2ludCB4bW9uX3JlYWRjaGFyKHZvaWQpCiB7Ci0JcmV0dXJuIHVkYmdfcmVhZChwdHIsIG5iKTsKKwlpZiAodWRiZ19nZXRjKQorCQlyZXR1cm4gdWRiZ19nZXRjKCk7CisJcmV0dXJuIC0xOwogfQogCi1pbnQKLXhtb25fcmVhZF9wb2xsKHZvaWQpCitpbnQgeG1vbl9yZWFkX3BvbGwodm9pZCkKIHsKIAlpZiAodWRiZ19nZXRjX3BvbGwpCiAJCXJldHVybiB1ZGJnX2dldGNfcG9sbCgpOwogCXJldHVybiAtMTsKIH0KLSAKLUZJTEUgKnhtb25fc3RkaW47Ci1GSUxFICp4bW9uX3N0ZG91dDsKLQotaW50Ci14bW9uX3B1dGMoaW50IGMsIHZvaWQgKmYpCi17Ci0JY2hhciBjaCA9IGM7Ci0KLQlpZiAoYyA9PSAnXG4nKQotCQl4bW9uX3B1dGMoJ1xyJywgZik7Ci0JcmV0dXJuIHhtb25fd3JpdGUoZiwgJmNoLCAxKSA9PSAxPyBjOiAtMTsKLX0KLQotaW50Ci14bW9uX3B1dGNoYXIoaW50IGMpCi17Ci0JcmV0dXJuIHhtb25fcHV0YyhjLCB4bW9uX3N0ZG91dCk7Ci19Ci0KLWludAoteG1vbl9mcHV0cyhjaGFyICpzdHIsIHZvaWQgKmYpCi17Ci0JaW50IG4gPSBzdHJsZW4oc3RyKTsKLQotCXJldHVybiB4bW9uX3dyaXRlKGYsIHN0ciwgbikgPT0gbj8gMDogLTE7Ci19Ci0KLWludAoteG1vbl9yZWFkY2hhcih2b2lkKQotewotCWNoYXIgY2g7Ci0KLQlmb3IgKDs7KSB7Ci0JCXN3aXRjaCAoeG1vbl9yZWFkKHhtb25fc3RkaW4sICZjaCwgMSkpIHsKLQkJY2FzZSAxOgotCQkJcmV0dXJuIGNoOwotCQljYXNlIC0xOgotCQkJeG1vbl9wcmludGYoInJlYWQoc3RkaW4pIHJldHVybmVkIC0xXHJcbiIsIDAsIDApOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgY2hhciBsaW5lWzI1Nl07Ci1zdGF0aWMgY2hhciAqbGluZXB0cjsKLXN0YXRpYyBpbnQgbGluZWxlZnQ7Ci0KLWludAoteG1vbl9nZXRjaGFyKHZvaWQpCi17Ci0JaW50IGM7Ci0KLQlpZiAobGluZWxlZnQgPT0gMCkgewotCQlsaW5lcHRyID0gbGluZTsKLQkJZm9yICg7OykgewotCQkJYyA9IHhtb25fcmVhZGNoYXIoKTsKLQkJCWlmIChjID09IC0xIHx8IGMgPT0gNCkKLQkJCQlicmVhazsKLQkJCWlmIChjID09ICdccicgfHwgYyA9PSAnXG4nKSB7Ci0JCQkJKmxpbmVwdHIrKyA9ICdcbic7Ci0JCQkJeG1vbl9wdXRjaGFyKCdcbicpOwotCQkJCWJyZWFrOwotCQkJfQotCQkJc3dpdGNoIChjKSB7Ci0JCQljYXNlIDAxNzc6Ci0JCQljYXNlICdcYic6Ci0JCQkJaWYgKGxpbmVwdHIgPiBsaW5lKSB7Ci0JCQkJCXhtb25fcHV0Y2hhcignXGInKTsKLQkJCQkJeG1vbl9wdXRjaGFyKCcgJyk7Ci0JCQkJCXhtb25fcHV0Y2hhcignXGInKTsKLQkJCQkJLS1saW5lcHRyOwotCQkJCX0KLQkJCQlicmVhazsKLQkJCWNhc2UgJ1UnICYgMHgxRjoKLQkJCQl3aGlsZSAobGluZXB0ciA+IGxpbmUpIHsKLQkJCQkJeG1vbl9wdXRjaGFyKCdcYicpOwotCQkJCQl4bW9uX3B1dGNoYXIoJyAnKTsKLQkJCQkJeG1vbl9wdXRjaGFyKCdcYicpOwotCQkJCQktLWxpbmVwdHI7Ci0JCQkJfQotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQlpZiAobGluZXB0ciA+PSAmbGluZVtzaXplb2YobGluZSkgLSAxXSkKLQkJCQkJeG1vbl9wdXRjaGFyKCdcYScpOwotCQkJCWVsc2UgewotCQkJCQl4bW9uX3B1dGNoYXIoYyk7Ci0JCQkJCSpsaW5lcHRyKysgPSBjOwotCQkJCX0KLQkJCX0KLQkJfQotCQlsaW5lbGVmdCA9IGxpbmVwdHIgLSBsaW5lOwotCQlsaW5lcHRyID0gbGluZTsKLQl9Ci0JaWYgKGxpbmVsZWZ0ID09IDApCi0JCXJldHVybiAtMTsKLQktLWxpbmVsZWZ0OwotCXJldHVybiAqbGluZXB0cisrOwotfQotCi1jaGFyICoKLXhtb25fZmdldHMoY2hhciAqc3RyLCBpbnQgbmIsIHZvaWQgKmYpCi17Ci0JY2hhciAqcDsKLQlpbnQgYzsKLQotCWZvciAocCA9IHN0cjsgcCA8IHN0ciArIG5iIC0gMTsgKSB7Ci0JCWMgPSB4bW9uX2dldGNoYXIoKTsKLQkJaWYgKGMgPT0gLTEpIHsKLQkJCWlmIChwID09IHN0cikKLQkJCQlyZXR1cm4gTlVMTDsKLQkJCWJyZWFrOwotCQl9Ci0JCSpwKysgPSBjOwotCQlpZiAoYyA9PSAnXG4nKQotCQkJYnJlYWs7Ci0JfQotCSpwID0gMDsKLQlyZXR1cm4gc3RyOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3htb24vc3RhcnRfOHh4LmMgYi9hcmNoL3Bvd2VycGMveG1vbi9zdGFydF84eHguYwppbmRleCBhNDhiZDU5Li40YzE3YjA0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMveG1vbi9zdGFydF84eHguYworKysgYi9hcmNoL3Bvd2VycGMveG1vbi9zdGFydF84eHguYwpAQCAtMTUsMjczICsxNSwzMCBAQAogI2luY2x1ZGUgPGFzbS84eHhfaW1tYXAuaD4KICNpbmNsdWRlIDxhc20vbXBjOHh4Lmg+CiAjaW5jbHVkZSA8YXNtL2NvbW1wcm9jLmg+CisjaW5jbHVkZSAibm9uc3RkaW8uaCIKIAotZXh0ZXJuIHZvaWQgeG1vbl9wcmludGYoY29uc3QgY2hhciAqZm10LCAuLi4pOwogZXh0ZXJuIGludCB4bW9uXzh4eF93cml0ZShjaGFyICpzdHIsIGludCBuYik7CiBleHRlcm4gaW50IHhtb25fOHh4X3JlYWRfcG9sbCh2b2lkKTsKIGV4dGVybiBpbnQgeG1vbl84eHhfcmVhZF9jaGFyKHZvaWQpOwotdm9pZCBwcm9tX2RyYXdoZXgodWludCk7Ci12b2lkIHByb21fZHJhd3N0cmluZyhjb25zdCBjaGFyICpzdHIpOwogCi1zdGF0aWMgaW50IHVzZV9zY3JlZW4gPSAxOyAvKiBkZWZhdWx0ICovCi0KLSNkZWZpbmUgVEJfU1BFRUQJMjUwMDAwMDAKLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgcmVhZHRiKHZvaWQpCit2b2lkIHhtb25fbWFwX3NjYyh2b2lkKQogewotCXVuc2lnbmVkIGludCByZXQ7Ci0KLQlhc20gdm9sYXRpbGUoIm1mdGIgJTAiIDogIj1yIiAocmV0KSA6KTsKLQlyZXR1cm4gcmV0OwotfQotCi12b2lkIGJ1Zl9hY2Nlc3Modm9pZCkKLXsKLX0KLQotdm9pZAoteG1vbl9tYXBfc2NjKHZvaWQpCi17Ci0KIAljcG1wID0gKGNwbTh4eF90ICopJigoKGltbWFwX3QgKilJTUFQX0FERFIpLT5pbV9jcG0pOwotCXVzZV9zY3JlZW4gPSAwOwotCQotCXByb21fZHJhd3N0cmluZygieG1vbiB1c2VzIHNlcmlhbCBwb3J0XG4iKTsKIH0KIAotc3RhdGljIGludCBzY2NfaW5pdGlhbGl6ZWQgPSAwOwotCiB2b2lkIHhtb25faW5pdF9zY2Modm9pZCk7CiAKLWludAoteG1vbl93cml0ZSh2b2lkICpoYW5kbGUsIHZvaWQgKnB0ciwgaW50IG5iKQoraW50IHhtb25fd3JpdGUodm9pZCAqcHRyLCBpbnQgbmIpCiB7Ci0JY2hhciAqcCA9IHB0cjsKLQlpbnQgaSwgYywgY3Q7Ci0KLQlpZiAoIXNjY19pbml0aWFsaXplZCkKLQkJeG1vbl9pbml0X3NjYygpOwotCiAJcmV0dXJuKHhtb25fOHh4X3dyaXRlKHB0ciwgbmIpKTsKIH0KIAotaW50IHhtb25fd2FudHNfa2V5OwotCi1pbnQKLXhtb25fcmVhZCh2b2lkICpoYW5kbGUsIHZvaWQgKnB0ciwgaW50IG5iKQoraW50IHhtb25fcmVhZGNoYXIodm9pZCkKIHsKLQljaGFyICpwID0gcHRyOwotCWludCBpOwotCi0JaWYgKCFzY2NfaW5pdGlhbGl6ZWQpCi0JCXhtb25faW5pdF9zY2MoKTsKLQotCWZvciAoaSA9IDA7IGkgPCBuYjsgKytpKSB7Ci0JCSpwKysgPSB4bW9uXzh4eF9yZWFkX2NoYXIoKTsKLQl9Ci0JcmV0dXJuIGk7CisJcmV0dXJuIHhtb25fOHh4X3JlYWRfY2hhcigpOwogfQogCi1pbnQKLXhtb25fcmVhZF9wb2xsKHZvaWQpCitpbnQgeG1vbl9yZWFkX3BvbGwodm9pZCkKIHsKIAlyZXR1cm4oeG1vbl84eHhfcmVhZF9wb2xsKCkpOwogfQotCi12b2lkCi14bW9uX2luaXRfc2NjKCkKLXsKLQlzY2NfaW5pdGlhbGl6ZWQgPSAxOwotfQotCi0jaWYgMAotZXh0ZXJuIGludCAoKnByb21fZW50cnkpKHZvaWQgKik7Ci0KLWludAoteG1vbl9leGl0KHZvaWQpCi17Ci0gICAgc3RydWN0IHByb21fYXJncyB7Ci0JY2hhciAqc2VydmljZTsKLSAgICB9IGFyZ3M7Ci0KLSAgICBmb3IgKDs7KSB7Ci0JYXJncy5zZXJ2aWNlID0gImV4aXQiOwotCSgqcHJvbV9lbnRyeSkoJmFyZ3MpOwotICAgIH0KLX0KLSNlbmRpZgotCi12b2lkICp4bW9uX3N0ZGluOwotdm9pZCAqeG1vbl9zdGRvdXQ7Ci12b2lkICp4bW9uX3N0ZGVycjsKLQotdm9pZAoteG1vbl9pbml0KHZvaWQpCi17Ci19Ci0KLWludAoteG1vbl9wdXRjKGludCBjLCB2b2lkICpmKQotewotICAgIGNoYXIgY2ggPSBjOwotCi0gICAgaWYgKGMgPT0gJ1xuJykKLQl4bW9uX3B1dGMoJ1xyJywgZik7Ci0gICAgcmV0dXJuIHhtb25fd3JpdGUoZiwgJmNoLCAxKSA9PSAxPyBjOiAtMTsKLX0KLQotaW50Ci14bW9uX3B1dGNoYXIoaW50IGMpCi17Ci0gICAgcmV0dXJuIHhtb25fcHV0YyhjLCB4bW9uX3N0ZG91dCk7Ci19Ci0KLWludAoteG1vbl9mcHV0cyhjaGFyICpzdHIsIHZvaWQgKmYpCi17Ci0gICAgaW50IG4gPSBzdHJsZW4oc3RyKTsKLQotICAgIHJldHVybiB4bW9uX3dyaXRlKGYsIHN0ciwgbikgPT0gbj8gMDogLTE7Ci19Ci0KLWludAoteG1vbl9yZWFkY2hhcih2b2lkKQotewotICAgIGNoYXIgY2g7Ci0KLSAgICBmb3IgKDs7KSB7Ci0Jc3dpdGNoICh4bW9uX3JlYWQoeG1vbl9zdGRpbiwgJmNoLCAxKSkgewotCWNhc2UgMToKLQkgICAgcmV0dXJuIGNoOwotCWNhc2UgLTE6Ci0JICAgIHhtb25fcHJpbnRmKCJyZWFkKHN0ZGluKSByZXR1cm5lZCAtMVxyXG4iLCAwLCAwKTsKLQkgICAgcmV0dXJuIC0xOwotCX0KLSAgICB9Ci19Ci0KLXN0YXRpYyBjaGFyIGxpbmVbMjU2XTsKLXN0YXRpYyBjaGFyICpsaW5lcHRyOwotc3RhdGljIGludCBsaW5lbGVmdDsKLQotI2lmIDAKLWludCB4bW9uX2V4cGVjdChjb25zdCBjaGFyICpzdHIsIHVuc2lnbmVkIGludCB0aW1lb3V0KQotewotCWludCBjOwotCXVuc2lnbmVkIGludCB0MDsKLQotCXRpbWVvdXQgKj0gVEJfU1BFRUQ7Ci0JdDAgPSByZWFkdGIoKTsKLQlkbyB7Ci0JCWxpbmVwdHIgPSBsaW5lOwotCQlmb3IgKDs7KSB7Ci0JCQljID0geG1vbl9yZWFkX3BvbGwoKTsKLQkJCWlmIChjID09IC0xKSB7Ci0JCQkJaWYgKHJlYWR0YigpIC0gdDAgPiB0aW1lb3V0KQotCQkJCQlyZXR1cm4gMDsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCWlmIChjID09ICdcbicpCi0JCQkJYnJlYWs7Ci0JCQlpZiAoYyAhPSAnXHInICYmIGxpbmVwdHIgPCAmbGluZVtzaXplb2YobGluZSkgLSAxXSkKLQkJCQkqbGluZXB0cisrID0gYzsKLQkJfQotCQkqbGluZXB0ciA9IDA7Ci0JfSB3aGlsZSAoc3Ryc3RyKGxpbmUsIHN0cikgPT0gTlVMTCk7Ci0JcmV0dXJuIDE7Ci19Ci0jZW5kaWYKLQotaW50Ci14bW9uX2dldGNoYXIodm9pZCkKLXsKLSAgICBpbnQgYzsKLQotICAgIGlmIChsaW5lbGVmdCA9PSAwKSB7Ci0JbGluZXB0ciA9IGxpbmU7Ci0JZm9yICg7OykgewotCSAgICBjID0geG1vbl9yZWFkY2hhcigpOwotCSAgICBpZiAoYyA9PSAtMSB8fCBjID09IDQpCi0JCWJyZWFrOwotCSAgICBpZiAoYyA9PSAnXHInIHx8IGMgPT0gJ1xuJykgewotCQkqbGluZXB0cisrID0gJ1xuJzsKLQkJeG1vbl9wdXRjaGFyKCdcbicpOwotCQlicmVhazsKLQkgICAgfQotCSAgICBzd2l0Y2ggKGMpIHsKLQkgICAgY2FzZSAwMTc3OgotCSAgICBjYXNlICdcYic6Ci0JCWlmIChsaW5lcHRyID4gbGluZSkgewotCQkgICAgeG1vbl9wdXRjaGFyKCdcYicpOwotCQkgICAgeG1vbl9wdXRjaGFyKCcgJyk7Ci0JCSAgICB4bW9uX3B1dGNoYXIoJ1xiJyk7Ci0JCSAgICAtLWxpbmVwdHI7Ci0JCX0KLQkJYnJlYWs7Ci0JICAgIGNhc2UgJ1UnICYgMHgxRjoKLQkJd2hpbGUgKGxpbmVwdHIgPiBsaW5lKSB7Ci0JCSAgICB4bW9uX3B1dGNoYXIoJ1xiJyk7Ci0JCSAgICB4bW9uX3B1dGNoYXIoJyAnKTsKLQkJICAgIHhtb25fcHV0Y2hhcignXGInKTsKLQkJICAgIC0tbGluZXB0cjsKLQkJfQotCQlicmVhazsKLQkgICAgZGVmYXVsdDoKLQkJaWYgKGxpbmVwdHIgPj0gJmxpbmVbc2l6ZW9mKGxpbmUpIC0gMV0pCi0JCSAgICB4bW9uX3B1dGNoYXIoJ1xhJyk7Ci0JCWVsc2UgewotCQkgICAgeG1vbl9wdXRjaGFyKGMpOwotCQkgICAgKmxpbmVwdHIrKyA9IGM7Ci0JCX0KLQkgICAgfQotCX0KLQlsaW5lbGVmdCA9IGxpbmVwdHIgLSBsaW5lOwotCWxpbmVwdHIgPSBsaW5lOwotICAgIH0KLSAgICBpZiAobGluZWxlZnQgPT0gMCkKLQlyZXR1cm4gLTE7Ci0gICAgLS1saW5lbGVmdDsKLSAgICByZXR1cm4gKmxpbmVwdHIrKzsKLX0KLQotY2hhciAqCi14bW9uX2ZnZXRzKGNoYXIgKnN0ciwgaW50IG5iLCB2b2lkICpmKQotewotICAgIGNoYXIgKnA7Ci0gICAgaW50IGM7Ci0KLSAgICBmb3IgKHAgPSBzdHI7IHAgPCBzdHIgKyBuYiAtIDE7ICkgewotCWMgPSB4bW9uX2dldGNoYXIoKTsKLQlpZiAoYyA9PSAtMSkgewotCSAgICBpZiAocCA9PSBzdHIpCi0JCXJldHVybiAwOwotCSAgICBicmVhazsKLQl9Ci0JKnArKyA9IGM7Ci0JaWYgKGMgPT0gJ1xuJykKLQkgICAgYnJlYWs7Ci0gICAgfQotICAgICpwID0gMDsKLSAgICByZXR1cm4gc3RyOwotfQotCi12b2lkCi1wcm9tX2RyYXdoZXgodWludCB2YWwpCi17Ci0JdW5zaWduZWQgY2hhciBidWZbMTBdOwotCi0JaW50IGk7Ci0JZm9yIChpID0gNzsgIGkgPj0gMDsgIGktLSkKLQl7Ci0JCWJ1ZltpXSA9ICIwMTIzNDU2Nzg5YWJjZGVmIlt2YWwgJiAweDBmXTsKLQkJdmFsID4+PSA0OwotCX0KLQlidWZbOF0gPSAnXDAnOwotCXhtb25fZnB1dHMoYnVmLCB4bW9uX3N0ZG91dCk7Ci19Ci0KLXZvaWQKLXByb21fZHJhd3N0cmluZyhjb25zdCBjaGFyICpzdHIpCi17Ci0JeG1vbl9mcHV0cyhzdHIsIHhtb25fc3Rkb3V0KTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy94bW9uL3N1YnJfcHJmLmMgYi9hcmNoL3Bvd2VycGMveG1vbi9zdWJyX3ByZi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDg3MzhjLi4wMDAwMDAwCi0tLSBhL2FyY2gvcG93ZXJwYy94bW9uL3N1YnJfcHJmLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKgotICogV3JpdHRlbiBieSBDb3J0IERvdWdhbiB0byByZXBsYWNlIHRoZSB2ZXJzaW9uIG9yaWdpbmFsbHkgdXNlZAotICogYnkgUGF1bCBNYWNrZXJyYXMsIHdoaWNoIGNhbWUgZnJvbSBOZXRCU0QgYW5kIHRodXMgaGFkIGNvcHlyaWdodAotICogY29uZmxpY3RzIHdpdGggTGludXguCi0gKgotICogVGhpcyBmaWxlIG1ha2VzIGxpYmVyYWwgdXNlIG9mIHRoZSBzdGFuZGFyZCBsaW51eCB1dGlsaXR5Ci0gKiByb3V0aW5lcyB0byByZWR1Y2UgdGhlIHNpemUgb2YgdGhlIGJpbmFyeS4gIFdlIGFzc3VtZSB3ZSBjYW4KLSAqIHRydXN0IHNvbWUgcGFydHMgb2YgTGludXggaW5zaWRlIHRoZSBkZWJ1Z2dlci4KLSAqICAgLS0gQ29ydCAoY29ydEBjcy5ubXQuZWR1KQotICoKLSAqIENvcHlyaWdodCAoQykgMTk5OSBDb3J0IERvdWdhbi4KLSAqCi0gKiAgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICAgICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCi0gKiAgICAgIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPHN0ZGFyZy5oPgotI2luY2x1ZGUgIm5vbnN0ZGlvLmgiCi0KLWV4dGVybiBpbnQgeG1vbl93cml0ZSh2b2lkICosIHZvaWQgKiwgaW50KTsKLQotdm9pZCB4bW9uX3ZmcHJpbnRmKHZvaWQgKmYsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcCkKLXsKLQlzdGF0aWMgY2hhciB4bW9uX2J1ZlsyMDQ4XTsKLQlpbnQgbjsKLQotCW4gPSB2c3ByaW50Zih4bW9uX2J1ZiwgZm10LCBhcCk7Ci0JeG1vbl93cml0ZShmLCB4bW9uX2J1Ziwgbik7Ci19Ci0KLXZvaWQgeG1vbl9wcmludGYoY29uc3QgY2hhciAqZm10LCAuLi4pCi17Ci0JdmFfbGlzdCBhcDsKLQotCXZhX3N0YXJ0KGFwLCBmbXQpOwotCXhtb25fdmZwcmludGYoc3Rkb3V0LCBmbXQsIGFwKTsKLQl2YV9lbmQoYXApOwotfQotRVhQT1JUX1NZTUJPTCh4bW9uX3ByaW50Zik7Ci0KLXZvaWQgeG1vbl9mcHJpbnRmKHZvaWQgKmYsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQotewotCXZhX2xpc3QgYXA7Ci0KLQl2YV9zdGFydChhcCwgZm10KTsKLQl4bW9uX3ZmcHJpbnRmKGYsIGZtdCwgYXApOwotCXZhX2VuZChhcCk7Ci19Ci0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy94bW9uL3htb24uYyBiL2FyY2gvcG93ZXJwYy94bW9uL3htb24uYwppbmRleCAxMTI0ZjExLi5lZjQzNTZiMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3htb24veG1vbi5jCisrKyBiL2FyY2gvcG93ZXJwYy94bW9uL3htb24uYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBSb3V0aW5lcyBwcm92aWRpbmcgYSBzaW1wbGUgbW9uaXRvciBmb3IgdXNlIG9uIHRoZSBQb3dlck1hYy4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYgUGF1bCBNYWNrZXJyYXMuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwNSBQYXVsIE1hY2tlcnJhcy4KICAqCiAgKiAgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNycS5oPgogCiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogI2luY2x1ZGUgPGFzbS9zdHJpbmcuaD4KQEAgLTE0NCwxNSArMTQ1LDEwIEBACiBzdGF0aWMgY29uc3QgY2hhciAqZ2V0dmVjbmFtZSh1bnNpZ25lZCBsb25nIHZlYyk7CiAKIGV4dGVybiBpbnQgcHJpbnRfaW5zbl9wb3dlcnBjKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIGludCk7Ci1leHRlcm4gdm9pZCBwcmludGYoY29uc3QgY2hhciAqZm10LCAuLi4pOwotZXh0ZXJuIHZvaWQgeG1vbl92ZnByaW50Zih2b2lkICpmLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXApOwotZXh0ZXJuIGludCB4bW9uX3B1dGMoaW50IGMsIHZvaWQgKmYpOwotZXh0ZXJuIGludCBwdXRjaGFyKGludCBjaCk7CiAKIGV4dGVybiB2b2lkIHhtb25fZW50ZXIodm9pZCk7CiBleHRlcm4gdm9pZCB4bW9uX2xlYXZlKHZvaWQpOwogCi1leHRlcm4gaW50IHhtb25fcmVhZF9wb2xsKHZvaWQpOwogZXh0ZXJuIGxvbmcgc2V0am1wKGxvbmcgKik7CiBleHRlcm4gdm9pZCBsb25nam1wKGxvbmcgKiwgbG9uZyk7CiBleHRlcm4gdm9pZCB4bW9uX3NhdmVfcmVncyhzdHJ1Y3QgcHRfcmVncyAqKTsKQEAgLTc0OCw3ICs3NDQsNiBAQAogCQlwcmludGYoIiV4OiIsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCQlwcmludGYoIm1vbj4gIik7Ci0JCWZmbHVzaChzdGRvdXQpOwogCQlmbHVzaF9pbnB1dCgpOwogCQl0ZXJtY2ggPSAwOwogCQljbWQgPSBza2lwYmwoKTsKQEAgLTE0NzIsMTcgKzE0NjcsMjMgQEAKIHsKIAl1bnNpZ25lZCBpbnQgaW5zdHJzWzJdOwogCXVuc2lnbmVkIGxvbmcgKCpjb2RlKSh2b2lkKTsKLQl1bnNpZ25lZCBsb25nIG9wZFszXTsKIAl1bnNpZ25lZCBsb25nIHJldCA9IC0xVUw7CisjaWZkZWYgQ09ORklHX1BQQzY0CisJdW5zaWduZWQgbG9uZyBvcGRbM107CiAKLQlpbnN0cnNbMF0gPSAweDdjNjAwMmE2ICsgKChuICYgMHgxRikgPDwgMTYpICsgKChuICYgMHgzZTApIDw8IDYpOwotCWluc3Ryc1sxXSA9IDB4NGU4MDAwMjA7CiAJb3BkWzBdID0gKHVuc2lnbmVkIGxvbmcpaW5zdHJzOwogCW9wZFsxXSA9IDA7CiAJb3BkWzJdID0gMDsKKwljb2RlID0gKHVuc2lnbmVkIGxvbmcgKCopKHZvaWQpKSBvcGQ7CisjZWxzZQorCWNvZGUgPSAodW5zaWduZWQgbG9uZyAoKikodm9pZCkpIGluc3RyczsKKyNlbmRpZgorCisJLyogbWZzcHIgcjMsbjsgYmxyICovCisJaW5zdHJzWzBdID0gMHg3YzYwMDJhNiArICgobiAmIDB4MUYpIDw8IDE2KSArICgobiAmIDB4M2UwKSA8PCA2KTsKKwlpbnN0cnNbMV0gPSAweDRlODAwMDIwOwogCXN0b3JlX2luc3QoaW5zdHJzKTsKIAlzdG9yZV9pbnN0KGluc3RycysxKTsKLQljb2RlID0gKHVuc2lnbmVkIGxvbmcgKCopKHZvaWQpKSBvcGQ7CiAKIAlpZiAoc2V0am1wKGJ1c19lcnJvcl9qbXApID09IDApIHsKIAkJY2F0Y2hfbWVtb3J5X2Vycm9ycyA9IDE7CkBAIC0xNTA0LDE2ICsxNTA1LDIxIEBACiB7CiAJdW5zaWduZWQgaW50IGluc3Ryc1syXTsKIAl1bnNpZ25lZCBsb25nICgqY29kZSkodW5zaWduZWQgbG9uZyk7CisjaWZkZWYgQ09ORklHX1BQQzY0CiAJdW5zaWduZWQgbG9uZyBvcGRbM107CiAKLQlpbnN0cnNbMF0gPSAweDdjNjAwM2E2ICsgKChuICYgMHgxRikgPDwgMTYpICsgKChuICYgMHgzZTApIDw8IDYpOwotCWluc3Ryc1sxXSA9IDB4NGU4MDAwMjA7CiAJb3BkWzBdID0gKHVuc2lnbmVkIGxvbmcpaW5zdHJzOwogCW9wZFsxXSA9IDA7CiAJb3BkWzJdID0gMDsKKwljb2RlID0gKHVuc2lnbmVkIGxvbmcgKCopKHVuc2lnbmVkIGxvbmcpKSBvcGQ7CisjZWxzZQorCWNvZGUgPSAodW5zaWduZWQgbG9uZyAoKikodW5zaWduZWQgbG9uZykpIGluc3RyczsKKyNlbmRpZgorCisJaW5zdHJzWzBdID0gMHg3YzYwMDNhNiArICgobiAmIDB4MUYpIDw8IDE2KSArICgobiAmIDB4M2UwKSA8PCA2KTsKKwlpbnN0cnNbMV0gPSAweDRlODAwMDIwOwogCXN0b3JlX2luc3QoaW5zdHJzKTsKIAlzdG9yZV9pbnN0KGluc3RycysxKTsKLQljb2RlID0gKHVuc2lnbmVkIGxvbmcgKCopKHVuc2lnbmVkIGxvbmcpKSBvcGQ7CiAKIAlpZiAoc2V0am1wKGJ1c19lcnJvcl9qbXApID09IDApIHsKIAkJY2F0Y2hfbWVtb3J5X2Vycm9ycyA9IDE7CkBAIC0xNzk3LDcgKzE4MDMsNyBAQAogCWZvcig7Oyl7CiAJCWlmICghbW5vcmVhZCkKIAkJCW4gPSBtcmVhZChhZHJzLCB2YWwsIHNpemUpOwotCQlwcmludGYoIiUuMTZ4JWMiLCBhZHJzLCBicmV2PyAncic6ICcgJyk7CisJCXByaW50ZihSRUciJWMiLCBhZHJzLCBicmV2PyAncic6ICcgJyk7CiAJCWlmICghbW5vcmVhZCkgewogCQkJaWYgKGJyZXYpCiAJCQkJYnl0ZXJldih2YWwsIHNpemUpOwpAQCAtMTk3NiwxNyArMTk4MiwxOCBAQAogCQluciA9IG1yZWFkKGFkcnMsIHRlbXAsIHIpOwogCQlhZHJzICs9IG5yOwogCQlmb3IgKG0gPSAwOyBtIDwgcjsgKyttKSB7Ci0JCSAgICAgICAgaWYgKChtICYgNykgPT0gMCAmJiBtID4gMCkKLQkJCSAgICBwdXRjaGFyKCcgJyk7CisJCSAgICAgICAgaWYgKChtICYgKHNpemVvZihsb25nKSAtIDEpKSA9PSAwICYmIG0gPiAwKQorCQkJCXB1dGNoYXIoJyAnKTsKIAkJCWlmIChtIDwgbnIpCiAJCQkJcHJpbnRmKCIlLjJ4IiwgdGVtcFttXSk7CiAJCQllbHNlCiAJCQkJcHJpbnRmKCIlcyIsIGZhdWx0X2NoYXJzW2ZhdWx0X3R5cGVdKTsKIAkJfQotCQlpZiAobSA8PSA4KQotCQkJcHJpbnRmKCIgIik7Ci0JCWZvciAoOyBtIDwgMTY7ICsrbSkKKwkJZm9yICg7IG0gPCAxNjsgKyttKSB7CisJCSAgICAgICAgaWYgKChtICYgKHNpemVvZihsb25nKSAtIDEpKSA9PSAwKQorCQkJCXB1dGNoYXIoJyAnKTsKIAkJCXByaW50ZigiICAiKTsKKwkJfQogCQlwcmludGYoIiAgfCIpOwogCQlmb3IgKG0gPSAwOyBtIDwgcjsgKyttKSB7CiAJCQlpZiAobSA8IG5yKSB7CkBAIC0yMTUxLDcgKzIxNTgsNiBAQAogCQlvayA9IG1yZWFkKGEsICZ2LCAxKTsKIAkJaWYgKG9rICYmICFvb2spIHsKIAkJCXByaW50ZigiJS44eCAuLiAiLCBhKTsKLQkJCWZmbHVzaChzdGRvdXQpOwogCQl9IGVsc2UgaWYgKCFvayAmJiBvb2spCiAJCQlwcmludGYoIiUuOHhcbiIsIGEgLSBtc2tpcCk7CiAJCW9vayA9IG9rOwpAQCAtMjM3Miw3ICsyMzc4LDcgQEAKIGluY2hhcih2b2lkKQogewogCWlmIChsaW5lcHRyID09IE5VTEwgfHwgKmxpbmVwdHIgPT0gMCkgewotCQlpZiAoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBzdGRpbikgPT0gTlVMTCkgeworCQlpZiAoeG1vbl9nZXRzKGxpbmUsIHNpemVvZihsaW5lKSkgPT0gTlVMTCkgewogCQkJbGluZXB0ciA9IE5VTEw7CiAJCQlyZXR1cm4gRU9GOwogCQl9CkBAIC0yNTI2LDQgKzI1MzIsMjkgQEAKIAkJX19kZWJ1Z2dlcl9kYWJyX21hdGNoID0gTlVMTDsKIAkJX19kZWJ1Z2dlcl9mYXVsdF9oYW5kbGVyID0gTlVMTDsKIAl9CisJeG1vbl9tYXBfc2NjKCk7CiB9CisKKyNpZmRlZiBDT05GSUdfTUFHSUNfU1lTUlEKK3N0YXRpYyB2b2lkIHN5c3JxX2hhbmRsZV94bW9uKGludCBrZXksIHN0cnVjdCBwdF9yZWdzICpwdF9yZWdzLAorCQkJICAgICAgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkgCit7CisJLyogZW5zdXJlIHhtb24gaXMgZW5hYmxlZCAqLworCXhtb25faW5pdCgxKTsKKwlkZWJ1Z2dlcihwdF9yZWdzKTsKK30KKworc3RhdGljIHN0cnVjdCBzeXNycV9rZXlfb3Agc3lzcnFfeG1vbl9vcCA9IAoreworCS5oYW5kbGVyID0Jc3lzcnFfaGFuZGxlX3htb24sCisJLmhlbHBfbXNnID0JIlhtb24iLAorCS5hY3Rpb25fbXNnID0JIkVudGVyaW5nIHhtb24iLAorfTsKKworc3RhdGljIGludCBfX2luaXQgc2V0dXBfeG1vbl9zeXNycSh2b2lkKQoreworCXJlZ2lzdGVyX3N5c3JxX2tleSgneCcsICZzeXNycV94bW9uX29wKTsKKwlyZXR1cm4gMDsKK30KK19faW5pdGNhbGwoc2V0dXBfeG1vbl9zeXNycSk7CisjZW5kaWYgLyogQ09ORklHX01BR0lDX1NZU1JRICovCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9ib290L2luY2x1ZGUvb2YxMjc1LmggYi9hcmNoL3BwYy9ib290L2luY2x1ZGUvb2YxMjc1LmgKaW5kZXggNjkxNzNkZi4uNGVkODhhYyAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvYm9vdC9pbmNsdWRlL29mMTI3NS5oCisrKyBiL2FyY2gvcHBjL2Jvb3QvaW5jbHVkZS9vZjEyNzUuaApAQCAtMTksNiArMTksOSBAQAogCiAvKiBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgKi8KIAoraW50CWNhbGxfcHJvbShjb25zdCBjaGFyICpzZXJ2aWNlLCBpbnQgbmFyZ3MsIGludCBucmV0LCAuLi4pOworaW50CWNhbGxfcHJvbV9yZXQoY29uc3QgY2hhciAqc2VydmljZSwgaW50IG5hcmdzLCBpbnQgbnJldCwKKwkJICAgICAgdW5zaWduZWQgaW50ICpyZXRzLCAuLi4pOwogdm9pZCAqCWNsYWltKHVuc2lnbmVkIGludCB2aXJ0LCB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IGFsaWduKTsKIGludAltYXAodW5zaWduZWQgaW50IHBoeXMsIHVuc2lnbmVkIGludCB2aXJ0LCB1bnNpZ25lZCBpbnQgc2l6ZSk7CiB2b2lkCWVudGVyKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvYm9vdC9vZjEyNzUvTWFrZWZpbGUgYi9hcmNoL3BwYy9ib290L29mMTI3NS9NYWtlZmlsZQppbmRleCAwMmU2ZjIzLi4wYjk3OWMwIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9ib290L29mMTI3NS9NYWtlZmlsZQorKysgYi9hcmNoL3BwYy9ib290L29mMTI3NS9NYWtlZmlsZQpAQCAtMyw0ICszLDQgQEAKICMKIAogbGliLXkgOj0gY2xhaW0ubyBlbnRlci5vIGV4aXQubyBmaW5kZGV2aWNlLm8gZ2V0cHJvcC5vIG9maW5pdC5vCVwKLQkgb2ZzdGRpby5vIHJlYWQubyByZWxlYXNlLm8gd3JpdGUubyBtYXAubworCSBvZnN0ZGlvLm8gcmVhZC5vIHJlbGVhc2UubyB3cml0ZS5vIG1hcC5vIGNhbGxfcHJvbS5vCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9ib290L29mMTI3NS9jYWxsX3Byb20uYyBiL2FyY2gvcHBjL2Jvb3Qvb2YxMjc1L2NhbGxfcHJvbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0NzlhM2EKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3BwYy9ib290L29mMTI3NS9jYWxsX3Byb20uYwpAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDUgUGF1bCBNYWNrZXJyYXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSAib2YxMjc1LmgiCisjaW5jbHVkZSA8c3RkYXJnLmg+CisKK2ludCBjYWxsX3Byb20oY29uc3QgY2hhciAqc2VydmljZSwgaW50IG5hcmdzLCBpbnQgbnJldCwgLi4uKQoreworCWludCBpOworCXN0cnVjdCBwcm9tX2FyZ3MgeworCQljb25zdCBjaGFyICpzZXJ2aWNlOworCQlpbnQgbmFyZ3M7CisJCWludCBucmV0OworCQl1bnNpZ25lZCBpbnQgYXJnc1sxMl07CisJfSBhcmdzOworCXZhX2xpc3QgbGlzdDsKKworCWFyZ3Muc2VydmljZSA9IHNlcnZpY2U7CisJYXJncy5uYXJncyA9IG5hcmdzOworCWFyZ3MubnJldCA9IG5yZXQ7CisKKwl2YV9zdGFydChsaXN0LCBucmV0KTsKKwlmb3IgKGkgPSAwOyBpIDwgbmFyZ3M7IGkrKykKKwkJYXJncy5hcmdzW2ldID0gdmFfYXJnKGxpc3QsIHVuc2lnbmVkIGludCk7CisJdmFfZW5kKGxpc3QpOworCisJZm9yIChpID0gMDsgaSA8IG5yZXQ7IGkrKykKKwkJYXJncy5hcmdzW25hcmdzK2ldID0gMDsKKworCWlmIChvZl9wcm9tX2VudHJ5KCZhcmdzKSA8IDApCisJCXJldHVybiAtMTsKKworCXJldHVybiAobnJldCA+IDApPyBhcmdzLmFyZ3NbbmFyZ3NdOiAwOworfQorCitpbnQgY2FsbF9wcm9tX3JldChjb25zdCBjaGFyICpzZXJ2aWNlLCBpbnQgbmFyZ3MsIGludCBucmV0LAorCQkgIHVuc2lnbmVkIGludCAqcmV0cywgLi4uKQoreworCWludCBpOworCXN0cnVjdCBwcm9tX2FyZ3MgeworCQljb25zdCBjaGFyICpzZXJ2aWNlOworCQlpbnQgbmFyZ3M7CisJCWludCBucmV0OworCQl1bnNpZ25lZCBpbnQgYXJnc1sxMl07CisJfSBhcmdzOworCXZhX2xpc3QgbGlzdDsKKworCWFyZ3Muc2VydmljZSA9IHNlcnZpY2U7CisJYXJncy5uYXJncyA9IG5hcmdzOworCWFyZ3MubnJldCA9IG5yZXQ7CisKKwl2YV9zdGFydChsaXN0LCByZXRzKTsKKwlmb3IgKGkgPSAwOyBpIDwgbmFyZ3M7IGkrKykKKwkJYXJncy5hcmdzW2ldID0gdmFfYXJnKGxpc3QsIHVuc2lnbmVkIGludCk7CisJdmFfZW5kKGxpc3QpOworCisJZm9yIChpID0gMDsgaSA8IG5yZXQ7IGkrKykKKwkJYXJncy5hcmdzW25hcmdzK2ldID0gMDsKKworCWlmIChvZl9wcm9tX2VudHJ5KCZhcmdzKSA8IDApCisJCXJldHVybiAtMTsKKworCWlmIChyZXRzICE9ICh2b2lkICopIDApCisJCWZvciAoaSA9IDE7IGkgPCBucmV0OyArK2kpCisJCQlyZXRzW2ktMV0gPSBhcmdzLmFyZ3NbbmFyZ3MraV07CisKKwlyZXR1cm4gKG5yZXQgPiAwKT8gYXJncy5hcmdzW25hcmdzXTogMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2Jvb3Qvb2YxMjc1L2NsYWltLmMgYi9hcmNoL3BwYy9ib290L29mMTI3NS9jbGFpbS5jCmluZGV4IDEzMTY5YTUuLjFlZDNhZWUgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2Jvb3Qvb2YxMjc1L2NsYWltLmMKKysrIGIvYXJjaC9wcGMvYm9vdC9vZjEyNzUvY2xhaW0uYwpAQCAtOSwyNyArOSw4NCBAQAogICovCiAKICNpbmNsdWRlICJvZjEyNzUuaCIKKyNpbmNsdWRlICJub25zdGRpby5oIgogCi12b2lkICoKLWNsYWltKHVuc2lnbmVkIGludCB2aXJ0LCB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IGFsaWduKQorLyoKKyAqIE9sZGVyIE9GJ3MgcmVxdWlyZSB0aGF0IHdoZW4gY2xhaW1pbmcgYSBzcGVjaWZpYyByYW5nZSBvZiBhZGRyZXNzZXMsCisgKiB3ZSBjbGFpbSB0aGUgcGh5c2ljYWwgc3BhY2UgaW4gdGhlIC9tZW1vcnkgbm9kZSBhbmQgdGhlIHZpcnR1YWwKKyAqIHNwYWNlIGluIHRoZSBjaG9zZW4gbW11IG5vZGUsIGFuZCB0aGVuIGRvIGEgbWFwIG9wZXJhdGlvbiB0bworICogbWFwIHZpcnR1YWwgdG8gcGh5c2ljYWwuCisgKi8KK3N0YXRpYyBpbnQgbmVlZF9tYXAgPSAtMTsKK3N0YXRpYyBpaGFuZGxlIGNob3Nlbl9tbXU7CitzdGF0aWMgcGhhbmRsZSBtZW1vcnk7CisKKy8qIHJldHVybnMgdHJ1ZSBpZiBzMiBpcyBhIHByZWZpeCBvZiBzMSAqLworc3RhdGljIGludCBzdHJpbmdfbWF0Y2goY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyKQogewotICAgIHN0cnVjdCBwcm9tX2FyZ3MgewotCWNoYXIgKnNlcnZpY2U7Ci0JaW50IG5hcmdzOwotCWludCBucmV0OwotCXVuc2lnbmVkIGludCB2aXJ0OwotCXVuc2lnbmVkIGludCBzaXplOwotCXVuc2lnbmVkIGludCBhbGlnbjsKLQl2b2lkICpyZXQ7Ci0gICAgfSBhcmdzOworCWZvciAoOyAqczI7ICsrczIpCisJCWlmICgqczErKyAhPSAqczIpCisJCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KIAotICAgIGFyZ3Muc2VydmljZSA9ICJjbGFpbSI7Ci0gICAgYXJncy5uYXJncyA9IDM7Ci0gICAgYXJncy5ucmV0ID0gMTsKLSAgICBhcmdzLnZpcnQgPSB2aXJ0OwotICAgIGFyZ3Muc2l6ZSA9IHNpemU7Ci0gICAgYXJncy5hbGlnbiA9IGFsaWduOwotICAgIGFyZ3MucmV0ID0gKHZvaWQgKikgMDsKLSAgICAoKm9mX3Byb21fZW50cnkpKCZhcmdzKTsKLSAgICByZXR1cm4gYXJncy5yZXQ7CitzdGF0aWMgaW50IGNoZWNrX29mX3ZlcnNpb24odm9pZCkKK3sKKwlwaGFuZGxlIG9wcm9tLCBjaG9zZW47CisJY2hhciB2ZXJzaW9uWzY0XTsKKworCW9wcm9tID0gZmluZGRldmljZSgiL29wZW5wcm9tIik7CisJaWYgKG9wcm9tID09IE9GX0lOVkFMSURfSEFORExFKQorCQlyZXR1cm4gMDsKKwlpZiAoZ2V0cHJvcChvcHJvbSwgIm1vZGVsIiwgdmVyc2lvbiwgc2l6ZW9mKHZlcnNpb24pKSA8PSAwKQorCQlyZXR1cm4gMDsKKwl2ZXJzaW9uW3NpemVvZih2ZXJzaW9uKS0xXSA9IDA7CisJcHJpbnRmKCJPRiB2ZXJzaW9uID0gJyVzJ1xuIiwgdmVyc2lvbik7CisJaWYgKCFzdHJpbmdfbWF0Y2godmVyc2lvbiwgIk9wZW4gRmlybXdhcmUsIDEuIikKKwkgICAgJiYgIXN0cmluZ19tYXRjaCh2ZXJzaW9uLCAiRmlybVdvcmtzLDMuIikpCisJCXJldHVybiAwOworCWNob3NlbiA9IGZpbmRkZXZpY2UoIi9jaG9zZW4iKTsKKwlpZiAoY2hvc2VuID09IE9GX0lOVkFMSURfSEFORExFKSB7CisJCWNob3NlbiA9IGZpbmRkZXZpY2UoIi9jaG9zZW5AMCIpOworCQlpZiAoY2hvc2VuID09IE9GX0lOVkFMSURfSEFORExFKSB7CisJCQlwcmludGYoIm5vIGNob3NlblxuIik7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlpZiAoZ2V0cHJvcChjaG9zZW4sICJtbXUiLCAmY2hvc2VuX21tdSwgc2l6ZW9mKGNob3Nlbl9tbXUpKSA8PSAwKSB7CisJCXByaW50Zigibm8gbW11XG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCW1lbW9yeSA9IChpaGFuZGxlKSBjYWxsX3Byb20oIm9wZW4iLCAxLCAxLCAiL21lbW9yeSIpOworCWlmIChtZW1vcnkgPT0gT0ZfSU5WQUxJRF9IQU5ETEUpIHsKKwkJbWVtb3J5ID0gKGloYW5kbGUpIGNhbGxfcHJvbSgib3BlbiIsIDEsIDEsICIvbWVtb3J5QDAiKTsKKwkJaWYgKG1lbW9yeSA9PSBPRl9JTlZBTElEX0hBTkRMRSkgeworCQkJcHJpbnRmKCJubyBtZW1vcnkgbm9kZVxuIik7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlwcmludGYoIm9sZCBPRiBkZXRlY3RlZFxuIik7CisJcmV0dXJuIDE7Cit9CisKK3ZvaWQgKmNsYWltKHVuc2lnbmVkIGludCB2aXJ0LCB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IGFsaWduKQoreworCWludCByZXQ7CisJdW5zaWduZWQgaW50IHJlc3VsdDsKKworCWlmIChuZWVkX21hcCA8IDApCisJCW5lZWRfbWFwID0gY2hlY2tfb2ZfdmVyc2lvbigpOworCWlmIChhbGlnbiB8fCAhbmVlZF9tYXApCisJCXJldHVybiAodm9pZCAqKSBjYWxsX3Byb20oImNsYWltIiwgMywgMSwgdmlydCwgc2l6ZSwgYWxpZ24pOworCQorCXJldCA9IGNhbGxfcHJvbV9yZXQoImNhbGwtbWV0aG9kIiwgNSwgMiwgJnJlc3VsdCwgImNsYWltIiwgbWVtb3J5LAorCQkJICAgIGFsaWduLCBzaXplLCB2aXJ0KTsKKwlpZiAocmV0ICE9IDAgfHwgcmVzdWx0ID09IC0xKQorCQlyZXR1cm4gKHZvaWQgKikgLTE7CisJcmV0ID0gY2FsbF9wcm9tX3JldCgiY2FsbC1tZXRob2QiLCA1LCAyLCAmcmVzdWx0LCAiY2xhaW0iLCBjaG9zZW5fbW11LAorCQkJICAgIGFsaWduLCBzaXplLCB2aXJ0KTsKKwkvKiAweDEyID09IGNvaGVyZW50ICsgcmVhZC93cml0ZSAqLworCXJldCA9IGNhbGxfcHJvbSgiY2FsbC1tZXRob2QiLCA2LCAxLCAibWFwIiwgY2hvc2VuX21tdSwKKwkJCTB4MTIsIHNpemUsIHZpcnQsIHZpcnQpOworCXJldHVybiB2aXJ0OwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvYm9vdC9vZjEyNzUvZmluZGRldmljZS5jIGIvYXJjaC9wcGMvYm9vdC9vZjEyNzUvZmluZGRldmljZS5jCmluZGV4IDJjMGY3Y2IuLjBkY2IxMjAgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2Jvb3Qvb2YxMjc1L2ZpbmRkZXZpY2UuYworKysgYi9hcmNoL3BwYy9ib290L29mMTI3NS9maW5kZGV2aWNlLmMKQEAgLTEwLDIyICsxMCw3IEBACiAKICNpbmNsdWRlICJvZjEyNzUuaCIKIAotcGhhbmRsZQotZmluZGRldmljZShjb25zdCBjaGFyICpuYW1lKQorcGhhbmRsZSBmaW5kZGV2aWNlKGNvbnN0IGNoYXIgKm5hbWUpCiB7Ci0gICAgc3RydWN0IHByb21fYXJncyB7Ci0JY2hhciAqc2VydmljZTsKLQlpbnQgbmFyZ3M7Ci0JaW50IG5yZXQ7Ci0JY29uc3QgY2hhciAqZGV2c3BlYzsKLQlwaGFuZGxlIGRldmljZTsKLSAgICB9IGFyZ3M7Ci0KLSAgICBhcmdzLnNlcnZpY2UgPSAiZmluZGRldmljZSI7Ci0gICAgYXJncy5uYXJncyA9IDE7Ci0gICAgYXJncy5ucmV0ID0gMTsKLSAgICBhcmdzLmRldnNwZWMgPSBuYW1lOwotICAgIGFyZ3MuZGV2aWNlID0gT0ZfSU5WQUxJRF9IQU5ETEU7Ci0gICAgKCpvZl9wcm9tX2VudHJ5KSgmYXJncyk7Ci0gICAgcmV0dXJuIGFyZ3MuZGV2aWNlOworCXJldHVybiAocGhhbmRsZSkgY2FsbF9wcm9tKCJmaW5kZGV2aWNlIiwgMSwgMSwgbmFtZSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9ib290L29wZW5maXJtd2FyZS9NYWtlZmlsZSBiL2FyY2gvcHBjL2Jvb3Qvb3BlbmZpcm13YXJlL01ha2VmaWxlCmluZGV4IDAzNDE1MjMuLjgzYTY0MzMgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2Jvb3Qvb3BlbmZpcm13YXJlL01ha2VmaWxlCisrKyBiL2FyY2gvcHBjL2Jvb3Qvb3BlbmZpcm13YXJlL01ha2VmaWxlCkBAIC04MCw4ICs4MCw3IEBACiAJJChjYWxsIGlmX2NoYW5nZWQsbWtub3RlKQogCiAKLSQob2JqKS9jb2ZmY3J0MC5vOiBFWFRSQV9BRkxBR1MgOj0gLXRyYWRpdGlvbmFsIC1EWENPRkYKLSQob2JqKS9jcnQwLm86ICAgICBFWFRSQV9BRkxBR1MgOj0gLXRyYWRpdGlvbmFsCiskKG9iaikvY29mZmNydDAubzogRVhUUkFfQUZMQUdTIDo9IC1EWENPRkYKIHRhcmdldHMgKz0gY29mZmNydDAubyBjcnQwLm8KICQob2JqKS9jb2ZmY3J0MC5vICQob2JqKS9jcnQwLm86ICQoY29tbW9uKS9jcnQwLlMgRk9SQ0UKIAkkKGNhbGwgaWZfY2hhbmdlZF9kZXAsYXNfb19TKQpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvY29uZmlncy9tcGM4MzR4X3N5c19kZWZjb25maWcgYi9hcmNoL3BwYy9jb25maWdzL21wYzgzNHhfc3lzX2RlZmNvbmZpZwppbmRleCA0YTU1MjJjLi42NzNkYzY0IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9jb25maWdzL21wYzgzNHhfc3lzX2RlZmNvbmZpZworKysgYi9hcmNoL3BwYy9jb25maWdzL21wYzgzNHhfc3lzX2RlZmNvbmZpZwpAQCAtMSwxNiArMSwxNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjExLXJjNAotIyBUaHUgRmViIDE3IDE2OjEyOjIzIDIwMDUKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNAorIyBNb24gTm92ICA3IDE1OjM4OjI5IDIwMDUKICMKIENPTkZJR19NTVU9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfSEFWRV9ERUNfTE9DSz15CiBDT05GSUdfUFBDPXkKIENPTkZJR19QUEMzMj15CiBDT05GSUdfR0VORVJJQ19OVlJBTT15CitDT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15CiAKICMKICMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCkBAIC0xOCwyMyArMTksMjggQEAKIENPTkZJR19FWFBFUklNRU5UQUw9eQogQ09ORklHX0NMRUFOX0NPTVBJTEU9eQogQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogCiAjCiAjIEdlbmVyYWwgc2V0dXAKICMKIENPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiAjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKIENPTkZJR19LT0JKRUNUX1VFVkVOVD15CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogQ09ORklHX0VNQkVEREVEPXkKICMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CiAjIENPTkZJR19FUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CkBAIC00NCw2ICs1MCw3IEBACiBDT05GSUdfQ0NfQUxJR05fTE9PUFM9MAogQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAogCiAjCiAjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CkBAIC01OSwzNCArNjYsODQgQEAKICMgQ09ORklHX1BPV0VSMyBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUjQgaXMgbm90IHNldAogIyBDT05GSUdfOHh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0UyMDAgaXMgbm90IHNldAogIyBDT05GSUdfRTUwMCBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0ZQVT15CisjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5UX0VBUkxZX1NFUklBTCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX0dFTjU1MD15Ci1DT05GSUdfODN4eD15Ci0KLSMKLSMgRnJlZXNjYWxlIDgzeHggb3B0aW9ucwotIwotQ09ORklHX01QQzgzNHhfU1lTPXkKLUNPTkZJR19NUEM4MzR4PXkKIENPTkZJR19QUENfU1REX01NVT15CiAKICMKICMgUGxhdGZvcm0gb3B0aW9ucwogIworIyBDT05GSUdfUFBDX01VTFRJUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfQVBVUyBpcyBub3Qgc2V0CisjIENPTkZJR19LQVRBTkEgaXMgbm90IHNldAorIyBDT05GSUdfV0lMTE9XIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQQ0k2OTAgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJQTUMyNTAgaXMgbm90IHNldAorIyBDT05GSUdfQ0hFU1ROVVQgaXMgbm90IHNldAorIyBDT05GSUdfU1BSVUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hEUFUgaXMgbm90IHNldAorIyBDT05GSUdfRVY2NDI2MCBpcyBub3Qgc2V0CisjIENPTkZJR19MT1BFQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVk1FNTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19QUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUlBNQzc1MCBpcyBub3Qgc2V0CisjIENPTkZJR19QUlBNQzgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TQU5EUE9JTlQgaXMgbm90IHNldAorIyBDT05GSUdfUkFEU1RPTkVfUFBDN0QgaXMgbm90IHNldAorIyBDT05GSUdfUEFMNCBpcyBub3Qgc2V0CisjIENPTkZJR19HRU1JTkkgaXMgbm90IHNldAorIyBDT05GSUdfRVNUODI2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TQkM4Mnh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NCUzgyNjAgaXMgbm90IHNldAorIyBDT05GSUdfUlBYODI2MCBpcyBub3Qgc2V0CisjIENPTkZJR19UUU04MjYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FEUzgyNzIgaXMgbm90IHNldAorIyBDT05GSUdfUFEyRkFEUyBpcyBub3Qgc2V0CisjIENPTkZJR19MSVRFNTIwMCBpcyBub3Qgc2V0CitDT05GSUdfTVBDODM0eF9TWVM9eQorIyBDT05GSUdfRVY2NDM2MCBpcyBub3Qgc2V0CitDT05GSUdfODN4eD15CitDT05GSUdfTVBDODM0eD15CiAjIENPTkZJR19TTVAgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMjUwPXkKKyMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAorQ09ORklHX0haPTI1MAorQ09ORklHX1BSRUVNUFRfTk9ORT15CisjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKKyMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKIENPTkZJR19CSU5GTVRfRUxGPXkKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19QTSBpcyBub3Qgc2V0CisjIENPTkZJR19TT0ZUV0FSRV9TVVNQRU5EIGlzIG5vdCBzZXQKK0NPTkZJR19TRUNDT01QPXkKK0NPTkZJR19JU0FfRE1BX0FQST15CiAKICMKICMgQnVzIG9wdGlvbnMKICMKIENPTkZJR19HRU5FUklDX0lTQV9ETUE9eQotIyBDT05GSUdfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9ET01BSU5TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0lORElSRUNUX1BDST15CitDT05GSUdfUENJPXkKK0NPTkZJR19QQ0lfRE9NQUlOUz15CisjIENPTkZJR19NUEM4M3h4X1BDSTIgaXMgbm90IHNldAorQ09ORklHX1BDSV9MRUdBQ1lfUFJPQz15CiAKICMKICMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydApAQCAtOTQsMTAgKzE1MSw2IEBACiAjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAogCiAjCi0jIFBDLWNhcmQgYnJpZGdlcwotIwotCi0jCiAjIEFkdmFuY2VkIHNldHVwCiAjCiAjIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKQEAgLTExMiw2ICsxNjUsNzUgQEAKIENPTkZJR19CT09UX0xPQUQ9MHgwMDgwMDAwMAogCiAjCisjIE5ldHdvcmtpbmcKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKK0NPTkZJR19JUF9NVUxUSUNBU1Q9eQorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CitDT05GSUdfU1lOX0NPT0tJRVM9eQorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19CSUM9eQorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorCisjCisjIERDQ1AgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisKKyMKKyMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0NMU19ST1VURSBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKworIwogIyBEZXZpY2UgRHJpdmVycwogIwogCkBAIC0xMjMsNiArMjQ1LDExIEBACiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAogCiAjCisjIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKKyMKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CisKKyMKICMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQogIwogIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKQEAgLTE0MCwxNSArMjY3LDE5IEBACiAjIEJsb2NrIGRldmljZXMKICMKICMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKICMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQogQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zMjc2OAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiAjIENPTkZJR19MQkQgaXMgbm90IHNldAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAKQEAgLTE1OSw2ICsyOTAsMTEgQEAKIENPTkZJR19JT1NDSEVEX0FTPXkKIENPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKIENPTkZJR19JT1NDSEVEX0NGUT15CitDT05GSUdfREVGQVVMVF9BUz15CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogCiAjCkBAIC0xNjksNiArMzA1LDcgQEAKICMKICMgU0NTSSBkZXZpY2Ugc3VwcG9ydAogIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKIAogIwpAQCAtMTc5LDg1ICszMTYsMjUgQEAKICMKICMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAogIworIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKIAogIwogIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CiAjCisjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CiAKICMKICMgSTJPIGRldmljZSBzdXBwb3J0CiAjCisjIENPTkZJR19JMk8gaXMgbm90IHNldAogCiAjCiAjIE1hY2ludG9zaCBkZXZpY2UgZHJpdmVycwogIwogCiAjCi0jIE5ldHdvcmtpbmcgc3VwcG9ydAorIyBOZXR3b3JrIGRldmljZSBzdXBwb3J0CiAjCi1DT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKLUNPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUTElOS19ERVYgaXMgbm90IHNldAotQ09ORklHX1VOSVg9eQotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVD15Ci1DT05GSUdfSVBfTVVMVElDQVNUPXkKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfUE5QPXkKLUNPTkZJR19JUF9QTlBfREhDUD15Ci1DT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lOX0NPT0tJRVM9eQotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfVENQRElBRz15Ci0jIENPTkZJR19JUF9UQ1BESUFHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotCi0jCi0jIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIwotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9DTFNfUk9VVEUgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKQEAgLTI2NSwyNCArMzQyLDkwIEBACiAjIENPTkZJR19UVU4gaXMgbm90IHNldAogCiAjCisjIEFSQ25ldCBkZXZpY2VzCisjCisjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAorCisjCisjIFBIWSBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX1BIWUxJQj15CisKKyMKKyMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycworIworQ09ORklHX01BUlZFTExfUEhZPXkKKyMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAorCisjCiAjIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQogIwogQ09ORklHX05FVF9FVEhFUk5FVD15CiBDT05GSUdfTUlJPXkKKyMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAorIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAorCisjCisjIFR1bGlwIGZhbWlseSBuZXR3b3JrIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAorIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAorQ09ORklHX05FVF9QQ0k9eQorIyBDT05GSUdfUENORVQzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUQ4MTExX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19BREFQVEVDX1NUQVJGSVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19GT1JDRURFVEggaXMgbm90IHNldAorIyBDT05GSUdfREdSUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBSTzEwMCBpcyBub3Qgc2V0CitDT05GSUdfRTEwMD15CisjIENPTkZJR19GRUFMTlggaXMgbm90IHNldAorIyBDT05GSUdfTkFUU0VNSSBpcyBub3Qgc2V0CisjIENPTkZJR19ORTJLX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR184MTM5Q1AgaXMgbm90IHNldAorIyBDT05GSUdfODEzOVRPTyBpcyBub3Qgc2V0CisjIENPTkZJR19TSVM5MDAgaXMgbm90IHNldAorIyBDT05GSUdfRVBJQzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CisjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0CiAKICMKICMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKICMKKyMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKK0NPTkZJR19FMTAwMD15CisjIENPTkZJR19FMTAwMF9OQVBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAorIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CisjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAorIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAorIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLR0UgaXMgbm90IHNldAorIyBDT05GSUdfU0s5OExJTiBpcyBub3Qgc2V0CisjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAorIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JOWDIgaXMgbm90IHNldAogQ09ORklHX0dJQU5GQVI9eQogIyBDT05GSUdfR0ZBUl9OQVBJIGlzIG5vdCBzZXQKIAogIwogIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKICMKKyMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAorIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CisjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKIAogIwogIyBUb2tlbiBSaW5nIGRldmljZXMKICMKKyMgQ09ORklHX1RSIGlzIG5vdCBzZXQKIAogIwogIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKQEAgLTI5MywxMCArNDM2LDE0IEBACiAjIFdhbiBpbnRlcmZhY2VzCiAjCiAjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CisjIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUFAgaXMgbm90IHNldAogIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAogCiAjCiAjIElTRE4gc3Vic3lzdGVtCkBAIC0zMjMsMTQgKzQ3MCw2IEBACiAjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CiAKICMKLSMgSW5wdXQgSS9PIGRyaXZlcnMKLSMKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19TT1VORF9HQU1FUE9SVD15Ci0jIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJT19JODA0MiBpcyBub3Qgc2V0Ci0KLSMKICMgSW5wdXQgRGV2aWNlIERyaXZlcnMKICMKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKQEAgLTM0MCw2ICs0NzksMTIgQEAKICMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAogCiAjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCiAjIENoYXJhY3RlciBkZXZpY2VzCiAjCiAjIENPTkZJR19WVCBpcyBub3Qgc2V0CkBAIC0zNTgsNiArNTAzLDcgQEAKICMKIENPTkZJR19TRVJJQUxfQ09SRT15CiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CkBAIC0zNzYsNiArNTIyLDcgQEAKICMgQ09ORklHX0dFTl9SVENfWCBpcyBub3Qgc2V0CiAjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKIAogIwogIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKQEAgLTM4NSw2ICs1MzIsMTIgQEAKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAogCiAjCisjIFRQTSBkZXZpY2VzCisjCisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RFTENMT0NLIGlzIG5vdCBzZXQKKworIwogIyBJMkMgc3VwcG9ydAogIwogQ09ORklHX0kyQz15CkBAIC00MDAsNDggKzU1Myw0MSBAQAogIwogIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKICMKLSMgQ09ORklHX0kyQ19JU0EgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSTgxMCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAogQ09ORklHX0kyQ19NUEM9eQorIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BST1NBVkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0FWQUdFNCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ3gyMDBfQUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1BDQV9JU0EgaXMgbm90IHNldAogCiAjCi0jIEhhcmR3YXJlIFNlbnNvcnMgQ2hpcCBzdXBwb3J0CisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwotIyBDT05GSUdfSTJDX1NFTlNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BU0IxMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GU0NIRVIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKLQotIwotIyBPdGhlciBJMkMgQ2hpcCBzdXBwb3J0Ci0jCisjIENPTkZJR19TRU5TT1JTX0RTMTMzNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RTMTM3NCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0VFUFJPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1JUQzg1NjQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NNDFUMDAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19YMTIwNV9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CkBAIC00NTMsMTAgKzU5OSw1NSBAQAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogCiAjCisjIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydAorIworQ09ORklHX0hXTU9OPXkKKyMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQVNCMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GU0NIRVIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GU0NQT1MgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKICMgTWlzYyBkZXZpY2VzCiAjCiAKICMKKyMgTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzCisjCisKKyMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldApAQCAtNDc5LDExICs2NzAsMTIgQEAKICMKICMgVVNCIHN1cHBvcnQKICMKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKKyMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CiAKICMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKICMKIAogIwpAQCAtNTAyLDEwICs2OTQsMTUgQEAKICMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAogCiAjCisjIFNOIERldmljZXMKKyMKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKICMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlM9eQogQ09ORklHX0VYVDNfRlNfWEFUVFI9eQogIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldApAQCAtNTE1LDE3ICs3MTIsMTYgQEAKIENPTkZJR19GU19NQkNBQ0hFPXkKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgWEZTIHN1cHBvcnQKLSMKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0lOT1RJRlk9eQogIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAogQ09ORklHX0ROT1RJRlk9eQogIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CiAKICMKICMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwpAQCAtNTQ2LDEyICs3NDIsMTAgQEAKIENPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKIENPTkZJR19TWVNGUz15Ci0jIENPTkZJR19ERVZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERVZQVFNfRlNfWEFUVFIgaXMgbm90IHNldAogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1hBVFRSIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQorIyBDT05GSUdfUkVMQVlGU19GUyBpcyBub3Qgc2V0CiAKICMKICMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwpAQCAtNTgwLDYgKzc3NCw3IEBACiAjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15CiBDT05GSUdfTE9DS0Q9eQorQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15CiAjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CkBAIC01ODgsNiArNzgzLDcgQEAKICMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR185UF9GUyBpcyBub3Qgc2V0CiAKICMKICMgUGFydGl0aW9uIFR5cGVzCkBAIC02MTQsNiArODEwLDcgQEAKICMgTGlicmFyeSByb3V0aW5lcwogIwogIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMj15CiAjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAogCkBAIC02MjUsNyArODIyLDkgQEAKICMKICMgS2VybmVsIGhhY2tpbmcKICMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogIyBDT05GSUdfU0VSSUFMX1RFWFRfREVCVUcgaXMgbm90IHNldAogCiAjCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL3BwYy9rZXJuZWwvTWFrZWZpbGUKaW5kZXggNzZhNTVhNC4uMTdhNGRhNiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvcHBjL2tlcm5lbC9NYWtlZmlsZQpAQCAtMTIsNyArMTIsNyBAQAogZXh0cmEtJChDT05GSUdfUE9XRVI0KQkJKz0gaWRsZV9wb3dlcjQubwogZXh0cmEteQkJCQkrPSB2bWxpbnV4LmxkcwogCi1vYmoteQkJCQk6PSBlbnRyeS5vIHRyYXBzLm8gaXJxLm8gaWRsZS5vIHRpbWUubyBtaXNjLm8gXAorb2JqLXkJCQkJOj0gZW50cnkubyB0cmFwcy5vIGlkbGUubyB0aW1lLm8gbWlzYy5vIFwKIAkJCQkJcHJvY2Vzcy5vIGFsaWduLm8gXAogCQkJCQlzZXR1cC5vIFwKIAkJCQkJcHBjX2h0YWIubwpAQCAtMzgsOCArMzgsNyBAQAogIyBUaGVzZSBhcmUgaGVyZSB3aGlsZSB3ZSBkbyB0aGUgYXJjaGl0ZWN0dXJlIG1lcmdlCiAKIGVsc2UKLW9iai15CQkJCTo9IGlycS5vIGlkbGUubyBcCi0JCQkJCWFsaWduLm8KK29iai15CQkJCTo9IGlkbGUubyBhbGlnbi5vCiBvYmotJChDT05GSUdfNnh4KQkJKz0gbDJjci5vIGNwdV9zZXR1cF82eHgubwogb2JqLSQoQ09ORklHX1NPRlRXQVJFX1NVU1BFTkQpCSs9IHN3c3VzcC5vCiBvYmotJChDT05GSUdfTU9EVUxFUykJCSs9IG1vZHVsZS5vCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9rZXJuZWwvYXNtLW9mZnNldHMuYyBiL2FyY2gvcHBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCmluZGV4IDk2ODI2MWQuLmZlMGU3NjcgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCisrKyBiL2FyY2gvcHBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgorI2luY2x1ZGUgPGFzbS92ZHNvX2RhdGFwYWdlLmg+CiAKICNkZWZpbmUgREVGSU5FKHN5bSwgdmFsKSBcCiAJYXNtIHZvbGF0aWxlKCJcbi0+IiAjc3ltICIgJTAgIiAjdmFsIDogOiAiaSIgKHZhbCkpCkBAIC0xNDMsNSArMTQ0LDMyIEBACiAKIAlERUZJTkUoVEFTS19TSVpFLCBUQVNLX1NJWkUpOwogCURFRklORShOVU1fVVNFUl9TRUdNRU5UUywgVEFTS19TSVpFPj4yOCk7CisKKwkvKiBkYXRhcGFnZSBvZmZzZXRzIGZvciB1c2UgYnkgdmRzbyAqLworCURFRklORShDRkdfVEJfT1JJR19TVEFNUCwgb2Zmc2V0b2Yoc3RydWN0IHZkc29fZGF0YSwgdGJfb3JpZ19zdGFtcCkpOworCURFRklORShDRkdfVEJfVElDS1NfUEVSX1NFQywgb2Zmc2V0b2Yoc3RydWN0IHZkc29fZGF0YSwgdGJfdGlja3NfcGVyX3NlYykpOworCURFRklORShDRkdfVEJfVE9fWFMsIG9mZnNldG9mKHN0cnVjdCB2ZHNvX2RhdGEsIHRiX3RvX3hzKSk7CisJREVGSU5FKENGR19TVEFNUF9YU0VDLCBvZmZzZXRvZihzdHJ1Y3QgdmRzb19kYXRhLCBzdGFtcF94c2VjKSk7CisJREVGSU5FKENGR19UQl9VUERBVEVfQ09VTlQsIG9mZnNldG9mKHN0cnVjdCB2ZHNvX2RhdGEsIHRiX3VwZGF0ZV9jb3VudCkpOworCURFRklORShDRkdfVFpfTUlOVVRFV0VTVCwgb2Zmc2V0b2Yoc3RydWN0IHZkc29fZGF0YSwgdHpfbWludXRlc3dlc3QpKTsKKwlERUZJTkUoQ0ZHX1RaX0RTVFRJTUUsIG9mZnNldG9mKHN0cnVjdCB2ZHNvX2RhdGEsIHR6X2RzdHRpbWUpKTsKKwlERUZJTkUoQ0ZHX1NZU0NBTExfTUFQMzIsIG9mZnNldG9mKHN0cnVjdCB2ZHNvX2RhdGEsIHN5c2NhbGxfbWFwXzMyKSk7CisJREVGSU5FKFdUT01fQ0xPQ0tfU0VDLCBvZmZzZXRvZihzdHJ1Y3QgdmRzb19kYXRhLCB3dG9tX2Nsb2NrX3NlYykpOworCURFRklORShXVE9NX0NMT0NLX05TRUMsIG9mZnNldG9mKHN0cnVjdCB2ZHNvX2RhdGEsIHd0b21fY2xvY2tfbnNlYykpOworCURFRklORShUVkFMMzJfVFZfU0VDLCBvZmZzZXRvZihzdHJ1Y3QgdGltZXZhbCwgdHZfc2VjKSk7CisJREVGSU5FKFRWQUwzMl9UVl9VU0VDLCBvZmZzZXRvZihzdHJ1Y3QgdGltZXZhbCwgdHZfdXNlYykpOworCURFRklORShUU1BFQzMyX1RWX1NFQywgb2Zmc2V0b2Yoc3RydWN0IHRpbWVzcGVjLCB0dl9zZWMpKTsKKwlERUZJTkUoVFNQRUMzMl9UVl9OU0VDLCBvZmZzZXRvZihzdHJ1Y3QgdGltZXNwZWMsIHR2X25zZWMpKTsKKworCS8qIHRpbWV2YWwvdGltZXpvbmUgb2Zmc2V0cyBmb3IgdXNlIGJ5IHZkc28gKi8KKwlERUZJTkUoVFpPTkVfVFpfTUlOV0VTVCwgb2Zmc2V0b2Yoc3RydWN0IHRpbWV6b25lLCB0el9taW51dGVzd2VzdCkpOworCURFRklORShUWk9ORV9UWl9EU1RUSU1FLCBvZmZzZXRvZihzdHJ1Y3QgdGltZXpvbmUsIHR6X2RzdHRpbWUpKTsKKworCS8qIE90aGVyIGJpdHMgdXNlZCBieSB0aGUgdmRzbyAqLworCURFRklORShDTE9DS19SRUFMVElNRSwgQ0xPQ0tfUkVBTFRJTUUpOworCURFRklORShDTE9DS19NT05PVE9OSUMsIENMT0NLX01PTk9UT05JQyk7CisJREVGSU5FKE5TRUNfUEVSX1NFQywgTlNFQ19QRVJfU0VDKTsKKwlERUZJTkUoQ0xPQ0tfUkVBTFRJTUVfUkVTLCBUSUNLX05TRUMpOworCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9rZXJuZWwvaGVhZF9ib29rZS5oIGIvYXJjaC9wcGMva2VybmVsL2hlYWRfYm9va2UuaAppbmRleCBhZWIzNDliLi5mM2QyNzRjIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9rZXJuZWwvaGVhZF9ib29rZS5oCisrKyBiL2FyY2gvcHBjL2tlcm5lbC9oZWFkX2Jvb2tlLmgKQEAgLTM1OCw2ICszNTgsNiBAQAogCU5PUk1BTF9FWENFUFRJT05fUFJPTE9HOwkJCQkJICAgICAgXAogCWJuZQlsb2FkX3VwX2ZwdTsJCS8qIGlmIGZyb20gdXNlciwganVzdCBsb2FkIGl0IHVwICovICAgXAogCWFkZGkJcjMscjEsU1RBQ0tfRlJBTUVfT1ZFUkhFQUQ7CQkJCSAgICAgIFwKLQlFWENfWEZFUl9FRV9MSVRFKDB4ODAwLCBLZXJuZWxGUCkKKwlFWENfWEZFUl9FRV9MSVRFKDB4ODAwLCBrZXJuZWxfZnBfdW5hdmFpbGFibGVfZXhjZXB0aW9uKQogCiAjZW5kaWYgLyogX19IRUFEX0JPT0tFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMva2VybmVsL2lkbGUuYyBiL2FyY2gvcHBjL2tlcm5lbC9pZGxlLmMKaW5kZXggMTFlNWI0NC4uODIxYTc1ZSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMva2VybmVsL2lkbGUuYworKysgYi9hcmNoL3BwYy9rZXJuZWwvaWRsZS5jCkBAIC01MywxMCArNTMsNiBAQAogCQl9CiAjZW5kaWYKIAl9Ci0JaWYgKG5lZWRfcmVzY2hlZCgpKQotCQlzY2hlZHVsZSgpOwotCWlmIChjcHVfaXNfb2ZmbGluZShjcHUpICYmIHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fUlVOTklORykKLQkJY3B1X2RpZSgpOwogfQogCiAvKgpAQCAtNjQsMTEgKzYwLDIyIEBACiAgKi8KIHZvaWQgY3B1X2lkbGUodm9pZCkKIHsKLQlmb3IgKDs7KQotCQlpZiAocHBjX21kLmlkbGUgIT0gTlVMTCkKLQkJCXBwY19tZC5pZGxlKCk7Ci0JCWVsc2UKLQkJCWRlZmF1bHRfaWRsZSgpOworCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisKKwlmb3IgKDs7KSB7CisJCXdoaWxlICghbmVlZF9yZXNjaGVkKCkpIHsKKwkJCWlmIChwcGNfbWQuaWRsZSAhPSBOVUxMKQorCQkJCXBwY19tZC5pZGxlKCk7CisJCQllbHNlCisJCQkJZGVmYXVsdF9pZGxlKCk7CisJCX0KKworCQlpZiAoY3B1X2lzX29mZmxpbmUoY3B1KSAmJiBzeXN0ZW1fc3RhdGUgPT0gU1lTVEVNX1JVTk5JTkcpCisJCQljcHVfZGllKCk7CisJCXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWQoKTsKKwkJc2NoZWR1bGUoKTsKKwkJcHJlZW1wdF9kaXNhYmxlKCk7CisJfQogfQogCiAjaWYgZGVmaW5lZChDT05GSUdfU1lTQ1RMKSAmJiBkZWZpbmVkKENPTkZJR182eHgpCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9rZXJuZWwvaXJxLmMgYi9hcmNoL3BwYy9rZXJuZWwvaXJxLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiYjJiOWYuLjAwMDAwMDAKLS0tIGEvYXJjaC9wcGMva2VybmVsL2lycS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTY1ICswLDAgQEAKLS8qCi0gKiAgYXJjaC9wcGMva2VybmVsL2lycS5jCi0gKgotICogIERlcml2ZWQgZnJvbSBhcmNoL2kzODYva2VybmVsL2lycS5jCi0gKiAgICBDb3B5cmlnaHQgKEMpIDE5OTIgTGludXMgVG9ydmFsZHMKLSAqICBBZGFwdGVkIGZyb20gYXJjaC9pMzg2IGJ5IEdhcnkgVGhvbWFzCi0gKiAgICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5NiBHYXJ5IFRob21hcyAoZ2R0QGxpbnV4cHBjLm9yZykKLSAqICBVcGRhdGVkIGFuZCBtb2RpZmllZCBieSBDb3J0IERvdWdhbiA8Y29ydEBmc21sYWJzLmNvbT4KLSAqICAgIENvcHlyaWdodCAoQykgMTk5Ni0yMDAxIENvcnQgRG91Z2FuCi0gKiAgQWRhcHRlZCBmb3IgUG93ZXIgTWFjaW50b3NoIGJ5IFBhdWwgTWFja2VycmFzCi0gKiAgICBDb3B5cmlnaHQgKEMpIDE5OTYgUGF1bCBNYWNrZXJyYXMgKHBhdWx1c0Bjcy5hbnUuZWR1LmF1KQotICogIEFtaWdhL0FQVVMgY2hhbmdlcyBieSBKZXNwZXIgU2tvdiAoanNrb3ZAY3lnbnVzLmNvLnVrKS4KLSAqCi0gKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGNvZGUgdXNlZCBieSB2YXJpb3VzIElSUSBoYW5kbGluZyByb3V0aW5lczoKLSAqIGFza2luZyBmb3IgZGlmZmVyZW50IElSUSdzIHNob3VsZCBiZSBkb25lIHRocm91Z2ggdGhlc2Ugcm91dGluZXMKLSAqIGluc3RlYWQgb2YganVzdCBncmFiYmluZyB0aGVtLiBUaHVzIHNldHVwcyB3aXRoIGRpZmZlcmVudCBJUlEgbnVtYmVycwotICogc2hvdWxkbid0IHJlc3VsdCBpbiBhbnkgd2VpcmQgc3VycHJpc2VzLCBhbmQgaW5zdGFsbGluZyBuZXcgaGFuZGxlcnMKLSAqIHNob3VsZCBiZSBlYXNpZXIuCi0gKgotICogVGhlIE1QQzh4eCBoYXMgYW4gaW50ZXJydXB0IG1hc2sgaW4gdGhlIFNJVS4gIElmIGEgYml0IGlzIHNldCwgdGhlCi0gKiBpbnRlcnJ1cHQgaXMgX2VuYWJsZWRfLiAgQXMgZXhwZWN0ZWQsIElSUTAgaXMgYml0IDAgaW4gdGhlIDMyLWJpdAotICogbWFzayByZWdpc3RlciAob2Ygd2hpY2ggb25seSAxNiBhcmUgZGVmaW5lZCksIGhlbmNlIHRoZSB3ZWlyZCBzaGlmdGluZwotICogYW5kIGNvbXBsZW1lbnQgb2YgdGhlIGNhY2hlZF9pcnFfbWFzay4gIEkgd2FudCB0byBiZSBhYmxlIHRvIHN0dWZmCi0gKiB0aGlzIHJpZ2h0IGludG8gdGhlIFNJVSBTTUFTSyByZWdpc3Rlci4KLSAqIE1hbnkgb2YgdGhlIHByZXAvY2hycCBmdW5jdGlvbnMgYXJlIGNvbmRpdGlvbmFsIGNvbXBpbGVkIG9uIENPTkZJR184eHgKLSAqIHRvIHJlZHVjZSBjb2RlIHNwYWNlIGFuZCB1bmRlZmluZWQgZnVuY3Rpb24gcmVmZXJlbmNlcy4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KLSNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KLSNpbmNsdWRlIDxsaW51eC9wcm9maWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvYml0b3BzLmg+Ci0KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20vY2FjaGUuaD4KLSNpbmNsdWRlIDxhc20vcHJvbS5oPgotI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KLSNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgotCi0jZGVmaW5lIE5SX01BU0tfV09SRFMJKChOUl9JUlFTICsgMzEpIC8gMzIpCi0KLWV4dGVybiBhdG9taWNfdCBpcGlfcmVjdjsKLWV4dGVybiBhdG9taWNfdCBpcGlfc2VudDsKLQotI2RlZmluZSBNQVhDT1VOVCAxMDAwMDAwMAotCi1pbnQgcHBjX3NwdXJpb3VzX2ludGVycnVwdHMgPSAwOwotc3RydWN0IGlycWFjdGlvbiAqcHBjX2lycV9hY3Rpb25bTlJfSVJRU107Ci11bnNpZ25lZCBsb25nIHBwY19jYWNoZWRfaXJxX21hc2tbTlJfTUFTS19XT1JEU107Ci11bnNpZ25lZCBsb25nIHBwY19sb3N0X2ludGVycnVwdHNbTlJfTUFTS19XT1JEU107Ci1hdG9taWNfdCBwcGNfbl9sb3N0X2ludGVycnVwdHM7Ci0KLSNpZmRlZiBDT05GSUdfVEFVX0lOVAotZXh0ZXJuIGludCB0YXVfaW5pdGlhbGl6ZWQ7Ci1leHRlcm4gaW50IHRhdV9pbnRlcnJ1cHRzKGludCk7Ci0jZW5kaWYKLQotaW50IHNob3dfaW50ZXJydXB0cyhzdHJ1Y3Qgc2VxX2ZpbGUgKnAsIHZvaWQgKnYpCi17Ci0JaW50IGkgPSAqKGxvZmZfdCAqKSB2LCBqOwotCXN0cnVjdCBpcnFhY3Rpb24gKiBhY3Rpb247Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChpID09IDApIHsKLQkJc2VxX3B1dHMocCwgIiAgICAgICAgICAgIik7Ci0JCWZvciAoaj0wOyBqPE5SX0NQVVM7IGorKykKLQkJCWlmIChjcHVfb25saW5lKGopKQotCQkJCXNlcV9wcmludGYocCwgIkNQVSVkICAgICAgICIsIGopOwotCQlzZXFfcHV0YyhwLCAnXG4nKTsKLQl9Ci0KLQlpZiAoaSA8IE5SX0lSUVMpIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlycV9kZXNjW2ldLmxvY2ssIGZsYWdzKTsKLQkJYWN0aW9uID0gaXJxX2Rlc2NbaV0uYWN0aW9uOwotCQlpZiAoICFhY3Rpb24gfHwgIWFjdGlvbi0+aGFuZGxlciApCi0JCQlnb3RvIHNraXA7Ci0JCXNlcV9wcmludGYocCwgIiUzZDogIiwgaSk7Ci0jaWZkZWYgQ09ORklHX1NNUAotCQlmb3IgKGogPSAwOyBqIDwgTlJfQ1BVUzsgaisrKQotCQkJaWYgKGNwdV9vbmxpbmUoaikpCi0JCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLAotCQkJCQkgICBrc3RhdF9jcHUoaikuaXJxc1tpXSk7Ci0jZWxzZQotCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXMoaSkpOwotI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KLQkJaWYgKGlycV9kZXNjW2ldLmhhbmRsZXIpCi0JCQlzZXFfcHJpbnRmKHAsICIgJXMgIiwgaXJxX2Rlc2NbaV0uaGFuZGxlci0+dHlwZW5hbWUpOwotCQllbHNlCi0JCQlzZXFfcHV0cyhwLCAiICBOb25lICAgICAgIik7Ci0JCXNlcV9wcmludGYocCwgIiVzIiwgKGlycV9kZXNjW2ldLnN0YXR1cyAmIElSUV9MRVZFTCkgPyAiTGV2ZWwgIiA6ICJFZGdlICAiKTsKLQkJc2VxX3ByaW50ZihwLCAiICAgICVzIiwgYWN0aW9uLT5uYW1lKTsKLQkJZm9yIChhY3Rpb24gPSBhY3Rpb24tPm5leHQ7IGFjdGlvbjsgYWN0aW9uID0gYWN0aW9uLT5uZXh0KQotCQkJc2VxX3ByaW50ZihwLCAiLCAlcyIsIGFjdGlvbi0+bmFtZSk7Ci0JCXNlcV9wdXRjKHAsICdcbicpOwotc2tpcDoKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX2Rlc2NbaV0ubG9jaywgZmxhZ3MpOwotCX0gZWxzZSBpZiAoaSA9PSBOUl9JUlFTKSB7Ci0jaWZkZWYgQ09ORklHX1RBVV9JTlQKLQkJaWYgKHRhdV9pbml0aWFsaXplZCl7Ci0JCQlzZXFfcHV0cyhwLCAiVEFVOiAiKTsKLQkJCWZvciAoaiA9IDA7IGogPCBOUl9DUFVTOyBqKyspCi0JCQkJaWYgKGNwdV9vbmxpbmUoaikpCi0JCQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgdGF1X2ludGVycnVwdHMoaikpOwotCQkJc2VxX3B1dHMocCwgIiAgUG93ZXJQQyAgICAgICAgICAgICBUaGVybWFsIEFzc2lzdCAoY3B1IHRlbXApXG4iKTsKLQkJfQotI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfU01QKSAmJiAhZGVmaW5lZChDT05GSUdfUFBDX01FUkdFKQotCQkvKiBzaG91bGQgdGhpcyBiZSBwZXIgcHJvY2Vzc29yIHNlbmQvcmVjZWl2ZT8gKi8KLQkJc2VxX3ByaW50ZihwLCAiSVBJIChyZWN2L3NlbnQpOiAlMTB1LyV1XG4iLAotCQkJCWF0b21pY19yZWFkKCZpcGlfcmVjdiksIGF0b21pY19yZWFkKCZpcGlfc2VudCkpOwotI2VuZGlmCi0JCXNlcV9wcmludGYocCwgIkJBRDogJTEwdVxuIiwgcHBjX3NwdXJpb3VzX2ludGVycnVwdHMpOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBkb19JUlEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JaW50IGlycSwgZmlyc3QgPSAxOwotICAgICAgICBpcnFfZW50ZXIoKTsKLQotCS8qCi0JICogRXZlcnkgcGxhdGZvcm0gaXMgcmVxdWlyZWQgdG8gaW1wbGVtZW50IHBwY19tZC5nZXRfaXJxLgotCSAqIFRoaXMgZnVuY3Rpb24gd2lsbCBlaXRoZXIgcmV0dXJuIGFuIGlycSBudW1iZXIgb3IgLTEgdG8KLQkgKiBpbmRpY2F0ZSB0aGVyZSBhcmUgbm8gbW9yZSBwZW5kaW5nLiAgQnV0IHRoZSBmaXJzdCB0aW1lCi0JICogdGhyb3VnaCB0aGUgbG9vcCB0aGlzIG1lYW5zIHRoZXJlIHdhc24ndCBhbmQgSVJRIHBlbmRpbmcuCi0JICogVGhlIHZhbHVlIC0yIGlzIGZvciBidWdneSBoYXJkd2FyZSBhbmQgbWVhbnMgdGhhdCB0aGlzIElSUQotCSAqIGhhcyBhbHJlYWR5IGJlZW4gaGFuZGxlZC4gLS0gVG9tCi0JICovCi0Jd2hpbGUgKChpcnEgPSBwcGNfbWQuZ2V0X2lycShyZWdzKSkgPj0gMCkgewotCQlfX2RvX0lSUShpcnEsIHJlZ3MpOwotCQlmaXJzdCA9IDA7Ci0JfQotCWlmIChpcnEgIT0gLTIgJiYgZmlyc3QpCi0JCS8qIFRoYXQncyBub3QgU01QIHNhZmUgLi4uIGJ1dCB3aG8gY2FyZXMgPyAqLwotCQlwcGNfc3B1cmlvdXNfaW50ZXJydXB0cysrOwotICAgICAgICBpcnFfZXhpdCgpOwotfQotCi12b2lkIF9faW5pdCBpbml0X0lSUSh2b2lkKQotewotCXBwY19tZC5pbml0X0lSUSgpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMva2VybmVsL21pc2MuUyBiL2FyY2gvcHBjL2tlcm5lbC9taXNjLlMKaW5kZXggYWU2YWYyOS4uNWU2MTEyNCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMva2VybmVsL21pc2MuUworKysgYi9hcmNoL3BwYy9rZXJuZWwvbWlzYy5TCkBAIC00OTcsOSArNDk3LDkgQEAKICAqIGFuZCBpbnZhbGlkYXRlIHRoZSBjb3JyZXNwb25kaW5nIGluc3RydWN0aW9uIGNhY2hlIGJsb2Nrcy4KICAqIFRoaXMgaXMgYSBuby1vcCBvbiB0aGUgNjAxLgogICoKLSAqIGZsdXNoX2ljYWNoZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHN0b3ApCisgKiBfX2ZsdXNoX2ljYWNoZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHN0b3ApCiAgKi8KLV9HTE9CQUwoZmx1c2hfaWNhY2hlX3JhbmdlKQorX0dMT0JBTChfX2ZsdXNoX2ljYWNoZV9yYW5nZSkKIEJFR0lOX0ZUUl9TRUNUSU9OCiAJYmxyCQkJCS8qIGZvciA2MDEsIGRvIG5vdGhpbmcgKi8KIEVORF9GVFJfU0VDVElPTl9JRkNMUihDUFVfRlRSX1NQTElUX0lEX0NBQ0hFKQpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMva2VybmVsL3BjaS5jIGIvYXJjaC9wcGMva2VybmVsL3BjaS5jCmluZGV4IGU4ZjRlNTcuLjQ4ZWQ1OGYgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2tlcm5lbC9wY2kuYworKysgYi9hcmNoL3BwYy9rZXJuZWwvcGNpLmMKQEAgLTYyLDIwICs2Miw2IEBACiBzdGF0aWMgaW50IHBjaV9idXNfY291bnQ7CiAKIHN0YXRpYyB2b2lkCi1maXh1cF9yZXYxXzUzYzgxMChzdHJ1Y3QgcGNpX2RldiogZGV2KQotewotCS8qIHJldiAxIG5jcjUzYzgxMCBjaGlwcyBkb24ndCBzZXQgdGhlIGNsYXNzIGF0IGFsbCB3aGljaCBtZWFucwotCSAqIHRoZXkgZG9uJ3QgZ2V0IHRoZWlyIHJlc291cmNlcyByZW1hcHBlZC4gRml4IHRoYXQgaGVyZS4KLQkgKi8KLQotCWlmICgoZGV2LT5jbGFzcyA9PSBQQ0lfQ0xBU1NfTk9UX0RFRklORUQpKSB7Ci0JCXByaW50aygiTkNSIDUzYzgxMCByZXYgMSBkZXRlY3RlZCwgc2V0dGluZyBQQ0kgY2xhc3MuXG4iKTsKLQkJZGV2LT5jbGFzcyA9IFBDSV9DTEFTU19TVE9SQUdFX1NDU0k7Ci0JfQotfQotREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfTkNSLAlQQ0lfREVWSUNFX0lEX05DUl81M0M4MTAsCWZpeHVwX3JldjFfNTNjODEwKTsKLQotc3RhdGljIHZvaWQKIGZpeHVwX2Jyb2tlbl9wY25ldDMyKHN0cnVjdCBwY2lfZGV2KiBkZXYpCiB7CiAJaWYgKChkZXYtPmNsYXNzPj44ID09IFBDSV9DTEFTU19ORVRXT1JLX0VUSEVSTkVUKSkgewpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMva2VybmVsL3BwY19rc3ltcy5jIGIvYXJjaC9wcGMva2VybmVsL3BwY19rc3ltcy5jCmluZGV4IGUwY2E2MWIuLjY2MDczZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2tlcm5lbC9wcGNfa3N5bXMuYworKysgYi9hcmNoL3BwYy9rZXJuZWwvcHBjX2tzeW1zLmMKQEAgLTQ2LDYgKzQ2LDcgQEAKICNpbmNsdWRlIDxhc20vYnRleHQuaD4KICNpbmNsdWRlIDxhc20vZGl2NjQuaD4KICNpbmNsdWRlIDxhc20veG1vbi5oPgorI2luY2x1ZGUgPGFzbS9zaWduYWwuaD4KIAogI2lmZGVmICBDT05GSUdfOHh4CiAjaW5jbHVkZSA8YXNtL2NvbW1wcm9jLmg+CkBAIC01Nyw3ICs1OCw2IEBACiBleHRlcm4gdm9pZCBhbGlnbm1lbnRfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKIGV4dGVybiB2b2lkIHByb2dyYW1fY2hlY2tfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKIGV4dGVybiB2b2lkIHNpbmdsZV9zdGVwX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Ci1leHRlcm4gaW50IGRvX3NpZ25hbChzaWdzZXRfdCAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKIGV4dGVybiBpbnQgcG1hY19uZXd3b3JsZDsKIGV4dGVybiBpbnQgc3lzX3NpZ3JldHVybihzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiAKQEAgLTc4LDcgKzc4LDYgQEAKIEVYUE9SVF9TWU1CT0woc2luZ2xlX3N0ZXBfZXhjZXB0aW9uKTsKIEVYUE9SVF9TWU1CT0woc3lzX3NpZ3JldHVybik7CiBFWFBPUlRfU1lNQk9MKHBwY19uX2xvc3RfaW50ZXJydXB0cyk7Ci1FWFBPUlRfU1lNQk9MKHBwY19sb3N0X2ludGVycnVwdHMpOwogCiBFWFBPUlRfU1lNQk9MKElTQV9ETUFfVEhSRVNIT0xEKTsKIEVYUE9SVF9TWU1CT0woRE1BX01PREVfUkVBRCk7CkBAIC0xNzYsNiArMTc1LDcgQEAKICNlbmRpZiAvKiBDT05GSUdfUENJICovCiAKICNpZmRlZiBDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFCitleHRlcm4gdm9pZCBmbHVzaF9kY2FjaGVfYWxsKHZvaWQpOwogRVhQT1JUX1NZTUJPTChmbHVzaF9kY2FjaGVfYWxsKTsKICNlbmRpZgogCkBAIC0yMTcsOSArMjE3LDYgQEAKIEVYUE9SVF9TWU1CT0woY3VkYV9yZXF1ZXN0KTsKIEVYUE9SVF9TWU1CT0woY3VkYV9wb2xsKTsKICNlbmRpZiAvKiBDT05GSUdfQURCX0NVREEgKi8KLSNpZmRlZiBDT05GSUdfUFBDX01VTFRJUExBVEZPUk0KLUVYUE9SVF9TWU1CT0woX21hY2hpbmUpOwotI2VuZGlmCiAjaWZkZWYgQ09ORklHX1BQQ19QTUFDCiBFWFBPUlRfU1lNQk9MKHN5c19jdHJsZXIpOwogRVhQT1JUX1NZTUJPTChwbWFjX25ld3dvcmxkKTsKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9wcGMva2VybmVsL3NldHVwLmMKaW5kZXggNmJjYjg1ZC4uZGM1NWUxYSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9wcGMva2VybmVsL3NldHVwLmMKQEAgLTc2LDYgKzc2LDcgQEAKIAogI2lmZGVmIENPTkZJR19QUENfTVVMVElQTEFURk9STQogaW50IF9tYWNoaW5lID0gMDsKK0VYUE9SVF9TWU1CT0woX21hY2hpbmUpOwogCiBleHRlcm4gdm9pZCBwcmVwX2luaXQodW5zaWduZWQgbG9uZyByMywgdW5zaWduZWQgbG9uZyByNCwKIAkJdW5zaWduZWQgbG9uZyByNSwgdW5zaWduZWQgbG9uZyByNiwgdW5zaWduZWQgbG9uZyByNyk7CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9rZXJuZWwvc21wLmMgYi9hcmNoL3BwYy9rZXJuZWwvc21wLmMKaW5kZXggYmM1YmYxMS4uNDNiOGZjMiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvcHBjL2tlcm5lbC9zbXAuYwpAQCAtMzQxLDYgKzM0MSw3IEBACiAJY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogICAgICAgICBzbXBfc3RvcmVfY3B1X2luZm8oY3B1KTsKIAlzZXRfZGVjKHRiX3RpY2tzX3Blcl9qaWZmeSk7CisJcHJlZW1wdF9kaXNhYmxlKCk7CiAJY3B1X2NhbGxpbl9tYXBbY3B1XSA9IDE7CiAKIAlwcmludGsoIkNQVSAlZCBkb25lIGNhbGxpbi4uLlxuIiwgY3B1KTsKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy84M3h4L21wYzgzNHhfc3lzLmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvODN4eC9tcGM4MzR4X3N5cy5jCmluZGV4IDc5YjNmNTMuLjk4ZWRjNzUgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy84M3h4L21wYzgzNHhfc3lzLmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzgzeHgvbXBjODM0eF9zeXMuYwpAQCAtNTEsNiArNTEsOSBAQAogCiAjaW5jbHVkZSA8c3lzbGliL3BwYzgzeHhfc2V0dXAuaD4KIAorc3RhdGljIGNvbnN0IGNoYXIgKkdGQVJfUEhZXzAgPSAicGh5MDowIjsKK3N0YXRpYyBjb25zdCBjaGFyICpHRkFSX1BIWV8xID0gInBoeTA6MSI7CisKICNpZm5kZWYgQ09ORklHX1BDSQogdW5zaWduZWQgbG9uZyBpc2FfaW9fYmFzZSA9IDA7CiB1bnNpZ25lZCBsb25nIGlzYV9tZW1fYmFzZSA9IDA7CkBAIC05Nyw2ICsxMDAsNyBAQAogCWJkX3QgKmJpbmZvID0gKGJkX3QgKikgX19yZXM7CiAJdW5zaWduZWQgaW50IGZyZXE7CiAJc3RydWN0IGdpYW5mYXJfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisJc3RydWN0IGdpYW5mYXJfbWRpb19kYXRhICptZGF0YTsKIAogCS8qIGdldCB0aGUgY29yZSBmcmVxdWVuY3kgKi8KIAlmcmVxID0gYmluZm8tPmJpX2ludGZyZXE7CkBAIC0xMTEsMjQgKzExNSwyNyBAQAogI2VuZGlmCiAJbXBjODN4eF9lYXJseV9zZXJpYWxfbWFwKCk7CiAKKwkvKiBzZXR1cCB0aGUgYm9hcmQgcmVsYXRlZCBpbmZvIGZvciB0aGUgTURJTyBidXMgKi8KKwltZGF0YSA9IChzdHJ1Y3QgZ2lhbmZhcl9tZGlvX2RhdGEgKikgcHBjX3N5c19nZXRfcGRhdGEoTVBDODN4eF9NRElPKTsKKworCW1kYXRhLT5pcnFbMF0gPSBNUEM4M3h4X0lSUV9FWFQxOworCW1kYXRhLT5pcnFbMV0gPSBNUEM4M3h4X0lSUV9FWFQyOworCW1kYXRhLT5pcnFbMl0gPSAtMTsKKwltZGF0YS0+aXJxWzMxXSA9IC0xOworCW1kYXRhLT5wYWRkciArPSBiaW5mby0+YmlfaW1tcl9iYXNlOworCiAJLyogc2V0dXAgdGhlIGJvYXJkIHJlbGF0ZWQgaW5mb3JtYXRpb24gZm9yIHRoZSBlbmV0IGNvbnRyb2xsZXJzICovCiAJcGRhdGEgPSAoc3RydWN0IGdpYW5mYXJfcGxhdGZvcm1fZGF0YSAqKSBwcGNfc3lzX2dldF9wZGF0YShNUEM4M3h4X1RTRUMxKTsKIAlpZiAocGRhdGEpIHsKIAkJcGRhdGEtPmJvYXJkX2ZsYWdzID0gRlNMX0dJQU5GQVJfQlJEX0hBU19QSFlfSU5UUjsKLQkJcGRhdGEtPmludGVycnVwdFBIWSA9IE1QQzgzeHhfSVJRX0VYVDE7Ci0JCXBkYXRhLT5waHlpZCA9IDA7Ci0JCS8qIGZpeHVwIHBoeSBhZGRyZXNzICovCi0JCXBkYXRhLT5waHlfcmVnX2FkZHIgKz0gYmluZm8tPmJpX2ltbXJfYmFzZTsKKwkJcGRhdGEtPmJ1c19pZCA9IEdGQVJfUEhZXzA7CiAJCW1lbWNweShwZGF0YS0+bWFjX2FkZHIsIGJpbmZvLT5iaV9lbmV0YWRkciwgNik7CiAJfQogCiAJcGRhdGEgPSAoc3RydWN0IGdpYW5mYXJfcGxhdGZvcm1fZGF0YSAqKSBwcGNfc3lzX2dldF9wZGF0YShNUEM4M3h4X1RTRUMyKTsKIAlpZiAocGRhdGEpIHsKIAkJcGRhdGEtPmJvYXJkX2ZsYWdzID0gRlNMX0dJQU5GQVJfQlJEX0hBU19QSFlfSU5UUjsKLQkJcGRhdGEtPmludGVycnVwdFBIWSA9IE1QQzgzeHhfSVJRX0VYVDI7Ci0JCXBkYXRhLT5waHlpZCA9IDE7Ci0JCS8qIGZpeHVwIHBoeSBhZGRyZXNzICovCi0JCXBkYXRhLT5waHlfcmVnX2FkZHIgKz0gYmluZm8tPmJpX2ltbXJfYmFzZTsKKwkJcGRhdGEtPmJ1c19pZCA9IEdGQVJfUEhZXzE7CiAJCW1lbWNweShwZGF0YS0+bWFjX2FkZHIsIGJpbmZvLT5iaV9lbmV0MWFkZHIsIDYpOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvc3R4X2dwMy5oIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvc3R4X2dwMy5oCmluZGV4IDk1ZmRmNGIuLjdiY2M2YzMgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L3N0eF9ncDMuaAorKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9zdHhfZ3AzLmgKQEAgLTIxLDYgKzIxLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGFzbS9wcGNib290Lmg+CiAKICNkZWZpbmUgQk9BUkRfQ0NTUkJBUgkJKCh1aW50KTB4ZTAwMDAwMDApCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvcG1hY19waWMuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9wbWFjX3BpYy5jCmluZGV4IDlmMmQ5NWUuLjQ3NDJiZjYgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9wbWFjX3BpYy5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9wbWFjX3BpYy5jCkBAIC03NSw2ICs3NSw5IEBACiAjZGVmaW5lIEdBVFdJQ0tfSVJRX1BPT0xfU0laRSAgICAgICAgMTAKIHN0YXRpYyBzdHJ1Y3QgaW50ZXJydXB0X2luZm8gZ2F0d2lja19pbnRfcG9vbFtHQVRXSUNLX0lSUV9QT09MX1NJWkVdOwogCisjZGVmaW5lIE5SX01BU0tfV09SRFMJKChOUl9JUlFTICsgMzEpIC8gMzIpCitzdGF0aWMgdW5zaWduZWQgbG9uZyBwcGNfbG9zdF9pbnRlcnJ1cHRzW05SX01BU0tfV09SRFNdOworCiAvKgogICogTWFyayBhbiBpcnEgYXMgImxvc3QiLiAgVGhpcyBpcyBvbmx5IHVzZWQgb24gdGhlIHBtYWMKICAqIHNpbmNlIGl0IGNhbiBsb3NlIGludGVycnVwdHMgKHNlZSBwbWFjX3NldF9pcnFfbWFzaykuCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvcHJlcF9zZXR1cC5jIGIvYXJjaC9wcGMvcGxhdGZvcm1zL3ByZXBfc2V0dXAuYwppbmRleCAwNjdkN2Q1Li40NDE1NzQ4IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvcHJlcF9zZXR1cC5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9wcmVwX3NldHVwLmMKQEAgLTYxLDYgKzYxLDE1IEBACiAjaW5jbHVkZSA8YXNtL3BjaS1icmlkZ2UuaD4KICNpbmNsdWRlIDxhc20vdG9kYy5oPgogCisvKiBwcmVwIHJlZ2lzdGVycyBmb3IgTDIgKi8KKyNkZWZpbmUgQ0FDSEVDUkJBICAgICAgIDB4ODAwMDA4MjMgICAgICAvKiBDYWNoZSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIGFkZHJlc3MgKi8KKyNkZWZpbmUgTDJDQUNIRV9NQVNLCTB4MDMJLyogTWFzayBmb3IgMiBMMiBDYWNoZSBiaXRzICovCisjZGVmaW5lIEwyQ0FDSEVfNTEyS0IJMHgwMAkvKiA1MTJLQiAqLworI2RlZmluZSBMMkNBQ0hFXzI1NktCCTB4MDEJLyogMjU2S0IgKi8KKyNkZWZpbmUgTDJDQUNIRV8xTUIJMHgwMgkvKiAxTUIgKi8KKyNkZWZpbmUgTDJDQUNIRV9OT05FCTB4MDMJLyogTk9ORSAqLworI2RlZmluZSBMMkNBQ0hFX1BBUklUWSAgMHgwOCAgICAvKiBNYXNrIGZvciBMMiBDYWNoZSBQYXJpdHkgUHJvdGVjdGVkIGJpdCAqLworCiBUT0RDX0FMTE9DKCk7CiAKIHVuc2lnbmVkIGNoYXIgdWNTeXN0ZW1UeXBlOwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvc3lzbGliL01ha2VmaWxlIGIvYXJjaC9wcGMvc3lzbGliL01ha2VmaWxlCmluZGV4IDViZDMzYmEuLjViN2YyYjggMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3N5c2xpYi9NYWtlZmlsZQorKysgYi9hcmNoL3BwYy9zeXNsaWIvTWFrZWZpbGUKQEAgLTMzLDcgKzMzLDYgQEAKIG9iai0kKENPTkZJR19QUEM0eHhfRURNQSkJKz0gcHBjNHh4X3NnZG1hLm8KIGlmZXEgKCQoQ09ORklHXzQweCkseSkKIG9iai0kKENPTkZJR19QQ0kpCQkrPSBwY2lfYXV0by5vIHBwYzQwNV9wY2kubwotb2JqLSQoQ09ORklHX1JBUElESU8pCQkrPSBwcGM4NXh4X3Jpby5vCiBlbmRpZgogZW5kaWYKIG9iai0kKENPTkZJR184eHgpCQkrPSBtOHh4X3NldHVwLm8gcHBjOHh4X3BpYy5vICQod2R0LW1wYzh4eC15KSBcCkBAIC05Niw2ICs5NSw3IEBACiBpZmVxICgkKENPTkZJR184NXh4KSx5KQogb2JqLSQoQ09ORklHX1BDSSkJCSs9IHBjaV9hdXRvLm8KIGVuZGlmCitvYmotJChDT05GSUdfUkFQSURJTykJCSs9IHBwYzg1eHhfcmlvLm8KIG9iai0kKENPTkZJR184M3h4KQkJKz0gaXBpYy5vIHBwYzgzeHhfc2V0dXAubyBwcGNfc3lzLm8gXAogCQkJCQltcGM4M3h4X3N5cy5vIG1wYzgzeHhfZGV2aWNlcy5vCiBpZmVxICgkKENPTkZJR184M3h4KSx5KQpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvc3lzbGliL2NwbTJfcGljLmMgYi9hcmNoL3BwYy9zeXNsaWIvY3BtMl9waWMuYwppbmRleCBjODY3YmU2Li4yOWQ5NWQ0MSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvc3lzbGliL2NwbTJfcGljLmMKKysrIGIvYXJjaC9wcGMvc3lzbGliL2NwbTJfcGljLmMKQEAgLTM3LDcgKzM3LDcgQEAKIHN0YXRpYwl1X2NoYXIJaXJxX3RvX3NpdWJpdFtdID0gewogCSAwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCAgOSwKIAkgOCwgIDcsICA2LCAgNSwgIDQsICAzLCAgMiwgIDEsCi0JIDIsICAxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLAorCSAyLCAgMSwgIDAsIDE0LCAxMywgMTIsIDExLCAxMCwKIAkgOSwgIDgsICA3LCAgNiwgIDUsICA0LCAgMywgIDAsCiAJMzEsIDMwLCAyOSwgMjgsIDI3LCAyNiwgMjUsIDI0LAogCTIzLCAyMiwgMjEsIDIwLCAxOSwgMTgsIDE3LCAxNiwKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3N5c2xpYi9tcGM4M3h4X2RldmljZXMuYyBiL2FyY2gvcHBjL3N5c2xpYi9tcGM4M3h4X2RldmljZXMuYwppbmRleCBkYmY4YWNhLi5mNDNmYmY5IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvbXBjODN4eF9kZXZpY2VzLmMKKysrIGIvYXJjaC9wcGMvc3lzbGliL21wYzgzeHhfZGV2aWNlcy5jCkBAIC0yNywxOCArMjcsMjAgQEAKICAqIHdoYXQgSU1NUkJBUiBpcywgd2lsbCBnZXQgZml4ZWQgdXAgYnkgbWFjaF9tcGM4M3h4X2ZpeHVwCiAgKi8KIAorc3RydWN0IGdpYW5mYXJfbWRpb19kYXRhIG1wYzgzeHhfbWRpb19wZGF0YSA9IHsKKwkucGFkZHIgPSAweDI0NTIwLAorfTsKKwogc3RhdGljIHN0cnVjdCBnaWFuZmFyX3BsYXRmb3JtX2RhdGEgbXBjODN4eF90c2VjMV9wZGF0YSA9IHsKIAkuZGV2aWNlX2ZsYWdzID0gRlNMX0dJQU5GQVJfREVWX0hBU19HSUdBQklUIHwKIAkgICAgRlNMX0dJQU5GQVJfREVWX0hBU19DT0FMRVNDRSB8IEZTTF9HSUFORkFSX0RFVl9IQVNfUk1PTiB8CiAJICAgIEZTTF9HSUFORkFSX0RFVl9IQVNfTVVMVElfSU5UUiwKLQkucGh5X3JlZ19hZGRyID0gMHgyNDAwMCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgZ2lhbmZhcl9wbGF0Zm9ybV9kYXRhIG1wYzgzeHhfdHNlYzJfcGRhdGEgPSB7CiAJLmRldmljZV9mbGFncyA9IEZTTF9HSUFORkFSX0RFVl9IQVNfR0lHQUJJVCB8CiAJICAgIEZTTF9HSUFORkFSX0RFVl9IQVNfQ09BTEVTQ0UgfCBGU0xfR0lBTkZBUl9ERVZfSEFTX1JNT04gfAogCSAgICBGU0xfR0lBTkZBUl9ERVZfSEFTX01VTFRJX0lOVFIsCi0JLnBoeV9yZWdfYWRkciA9IDB4MjQwMDAsCiB9OwogCiBzdGF0aWMgc3RydWN0IGZzbF9pMmNfcGxhdGZvcm1fZGF0YSBtcGM4M3h4X2ZzbF9pMmMxX3BkYXRhID0gewpAQCAtMjIwLDYgKzIyMiwxMiBAQAogCQkJfSwKIAkJfSwKIAl9LAorCVtNUEM4M3h4X01ESU9dID0geworCQkubmFtZSA9ICJmc2wtZ2lhbmZhcl9tZGlvIiwKKwkJLmlkID0gMCwKKwkJLmRldi5wbGF0Zm9ybV9kYXRhID0gJm1wYzgzeHhfbWRpb19wZGF0YSwKKwkJLm51bV9yZXNvdXJjZXMgPSAwLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBtYWNoX21wYzgzeHhfZml4dXAoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3N5c2xpYi9tcGM4M3h4X3N5cy5jIGIvYXJjaC9wcGMvc3lzbGliL21wYzgzeHhfc3lzLmMKaW5kZXggMjlhYTYzMy4uZGE3NDM0NCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvc3lzbGliL21wYzgzeHhfc3lzLmMKKysrIGIvYXJjaC9wcGMvc3lzbGliL21wYzgzeHhfc3lzLmMKQEAgLTI0LDcyICsyNCw3MiBAQAogCQkucHBjX3N5c19uYW1lCT0gIjgzNDlFIiwKIAkJLm1hc2sgCQk9IDB4RkZGRjAwMDAsCiAJCS52YWx1ZSAJCT0gMHg4MDUwMDAwMCwKLQkJLm51bV9kZXZpY2VzCT0gOCwKKwkJLm51bV9kZXZpY2VzCT0gOSwKIAkJLmRldmljZV9saXN0CT0gKGVudW0gcHBjX3N5c19kZXZpY2VzW10pCiAJCXsKIAkJCU1QQzgzeHhfVFNFQzEsIE1QQzgzeHhfVFNFQzIsIE1QQzgzeHhfSUlDMSwKIAkJCU1QQzgzeHhfSUlDMiwgTVBDODN4eF9EVUFSVCwgTVBDODN4eF9TRUMyLAotCQkJTVBDODN4eF9VU0IyX0RSLCBNUEM4M3h4X1VTQjJfTVBICisJCQlNUEM4M3h4X1VTQjJfRFIsIE1QQzgzeHhfVVNCMl9NUEgsIE1QQzgzeHhfTURJTwogCQl9LAogCX0sCiAJewogCQkucHBjX3N5c19uYW1lCT0gIjgzNDkiLAogCQkubWFzayAJCT0gMHhGRkZGMDAwMCwKIAkJLnZhbHVlIAkJPSAweDgwNTEwMDAwLAotCQkubnVtX2RldmljZXMJPSA3LAorCQkubnVtX2RldmljZXMJPSA4LAogCQkuZGV2aWNlX2xpc3QJPSAoZW51bSBwcGNfc3lzX2RldmljZXNbXSkKIAkJewogCQkJTVBDODN4eF9UU0VDMSwgTVBDODN4eF9UU0VDMiwgTVBDODN4eF9JSUMxLAogCQkJTVBDODN4eF9JSUMyLCBNUEM4M3h4X0RVQVJULAotCQkJTVBDODN4eF9VU0IyX0RSLCBNUEM4M3h4X1VTQjJfTVBICisJCQlNUEM4M3h4X1VTQjJfRFIsIE1QQzgzeHhfVVNCMl9NUEgsIE1QQzgzeHhfTURJTwogCQl9LAogCX0sCiAJewogCQkucHBjX3N5c19uYW1lCT0gIjgzNDdFIiwKIAkJLm1hc2sgCQk9IDB4RkZGRjAwMDAsCiAJCS52YWx1ZSAJCT0gMHg4MDUyMDAwMCwKLQkJLm51bV9kZXZpY2VzCT0gOCwKKwkJLm51bV9kZXZpY2VzCT0gOSwKIAkJLmRldmljZV9saXN0CT0gKGVudW0gcHBjX3N5c19kZXZpY2VzW10pCiAJCXsKIAkJCU1QQzgzeHhfVFNFQzEsIE1QQzgzeHhfVFNFQzIsIE1QQzgzeHhfSUlDMSwKIAkJCU1QQzgzeHhfSUlDMiwgTVBDODN4eF9EVUFSVCwgTVBDODN4eF9TRUMyLAotCQkJTVBDODN4eF9VU0IyX0RSLCBNUEM4M3h4X1VTQjJfTVBICisJCQlNUEM4M3h4X1VTQjJfRFIsIE1QQzgzeHhfVVNCMl9NUEgsIE1QQzgzeHhfTURJTwogCQl9LAogCX0sCiAJewogCQkucHBjX3N5c19uYW1lCT0gIjgzNDciLAogCQkubWFzayAJCT0gMHhGRkZGMDAwMCwKIAkJLnZhbHVlIAkJPSAweDgwNTMwMDAwLAotCQkubnVtX2RldmljZXMJPSA3LAorCQkubnVtX2RldmljZXMJPSA4LAogCQkuZGV2aWNlX2xpc3QJPSAoZW51bSBwcGNfc3lzX2RldmljZXNbXSkKIAkJewogCQkJTVBDODN4eF9UU0VDMSwgTVBDODN4eF9UU0VDMiwgTVBDODN4eF9JSUMxLAogCQkJTVBDODN4eF9JSUMyLCBNUEM4M3h4X0RVQVJULAotCQkJTVBDODN4eF9VU0IyX0RSLCBNUEM4M3h4X1VTQjJfTVBICisJCQlNUEM4M3h4X1VTQjJfRFIsIE1QQzgzeHhfVVNCMl9NUEgsIE1QQzgzeHhfTURJTwogCQl9LAogCX0sCiAJewogCQkucHBjX3N5c19uYW1lCT0gIjgzNDNFIiwKIAkJLm1hc2sgCQk9IDB4RkZGRjAwMDAsCiAJCS52YWx1ZSAJCT0gMHg4MDU0MDAwMCwKLQkJLm51bV9kZXZpY2VzCT0gNywKKwkJLm51bV9kZXZpY2VzCT0gOCwKIAkJLmRldmljZV9saXN0CT0gKGVudW0gcHBjX3N5c19kZXZpY2VzW10pCiAJCXsKIAkJCU1QQzgzeHhfVFNFQzEsIE1QQzgzeHhfVFNFQzIsIE1QQzgzeHhfSUlDMSwKIAkJCU1QQzgzeHhfSUlDMiwgTVBDODN4eF9EVUFSVCwgTVBDODN4eF9TRUMyLAotCQkJTVBDODN4eF9VU0IyX0RSLAorCQkJTVBDODN4eF9VU0IyX0RSLCBNUEM4M3h4X01ESU8KIAkJfSwKIAl9LAogCXsKIAkJLnBwY19zeXNfbmFtZQk9ICI4MzQzIiwKIAkJLm1hc2sgCQk9IDB4RkZGRjAwMDAsCiAJCS52YWx1ZSAJCT0gMHg4MDU1MDAwMCwKLQkJLm51bV9kZXZpY2VzCT0gNiwKKwkJLm51bV9kZXZpY2VzCT0gNywKIAkJLmRldmljZV9saXN0CT0gKGVudW0gcHBjX3N5c19kZXZpY2VzW10pCiAJCXsKIAkJCU1QQzgzeHhfVFNFQzEsIE1QQzgzeHhfVFNFQzIsIE1QQzgzeHhfSUlDMSwKIAkJCU1QQzgzeHhfSUlDMiwgTVBDODN4eF9EVUFSVCwKLQkJCU1QQzgzeHhfVVNCMl9EUiwKKwkJCU1QQzgzeHhfVVNCMl9EUiwgTVBDODN4eF9NRElPCiAJCX0sCiAJfSwKIAl7CS8qIGRlZmF1bHQgbWF0Y2ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3N5c2xpYi9wcm9tLmMgYi9hcmNoL3BwYy9zeXNsaWIvcHJvbS5jCmluZGV4IDAzYjFmYzkuLmFmNGRlYWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3N5c2xpYi9wcm9tLmMKKysrIGIvYXJjaC9wcGMvc3lzbGliL3Byb20uYwpAQCAtMTMsNyArMTMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvcHJvbV9pbml0LmMgYi9hcmNoL3BwYy9zeXNsaWIvcHJvbV9pbml0LmMKaW5kZXggN2YxNTEzNi4uZGYxNDQyMiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvc3lzbGliL3Byb21faW5pdC5jCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9wcm9tX2luaXQuYwpAQCAtOSw3ICs5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9LY29uZmlnIGIvYXJjaC9wcGM2NC9LY29uZmlnCmluZGV4IDI5NTUyMzQuLjlkMTBjMTIgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQvS2NvbmZpZworKysgYi9hcmNoL3BwYzY0L0tjb25maWcKQEAgLTI3OSwxNyArMjc5LDEyIEBACiAgICAgICAgZGVmX2Jvb2wgeQogICAgICAgIGRlcGVuZHMgb24gIU5VTUEKIAotY29uZmlnIEFSQ0hfRElTQ09OVElHTUVNX0VOQUJMRQotCWRlZl9ib29sIHkKLQlkZXBlbmRzIG9uIFNNUCAmJiBQUENfUFNFUklFUwotCi1jb25maWcgQVJDSF9ESVNDT05USUdNRU1fREVGQVVMVAotCWRlZl9ib29sIHkKLQlkZXBlbmRzIG9uIEFSQ0hfRElTQ09OVElHTUVNX0VOQUJMRQotCiBjb25maWcgQVJDSF9TUEFSU0VNRU1fRU5BQkxFCiAJZGVmX2Jvb2wgeQotCWRlcGVuZHMgb24gQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFCisKK2NvbmZpZyBBUkNIX1NQQVJTRU1FTV9ERUZBVUxUCisJZGVmX2Jvb2wgeQorCWRlcGVuZHMgb24gTlVNQQogCiBzb3VyY2UgIm1tL0tjb25maWciCiAKQEAgLTI5Nyw2ICsyOTIsMTAgQEAKIAlkZWZfYm9vbCB5CiAJZGVwZW5kcyBvbiBORUVEX01VTFRJUExFX05PREVTCiAKK2NvbmZpZyBBUkNIX01FTU9SWV9QUk9CRQorCWRlZl9ib29sIHkKKwlkZXBlbmRzIG9uIE1FTU9SWV9IT1RQTFVHCisKICMgU29tZSBOVU1BIG5vZGVzIGhhdmUgbWVtb3J5IHJhbmdlcyB0aGF0IHNwYW4KICMgb3RoZXIgbm9kZXMuICBFdmVuIHRob3VnaCBhIHBmbiBpcyB2YWxpZCBhbmQKICMgYmV0d2VlbiBhIG5vZGUncyBzdGFydCBhbmQgZW5kIHBmbnMsIGl0IG1heSBub3QKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQvYm9vdC9hZGRSYW1EaXNrLmMgYi9hcmNoL3BwYzY0L2Jvb3QvYWRkUmFtRGlzay5jCmluZGV4IDdmMmMwOTQuLmMwMmE5OTkgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQvYm9vdC9hZGRSYW1EaXNrLmMKKysrIGIvYXJjaC9wcGM2NC9ib290L2FkZFJhbURpc2suYwpAQCAtNSwxMSArNSw1OSBAQAogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZWxmLmg+CiAKICNkZWZpbmUgRWxmSGVhZGVyU2l6ZSAgKDY0ICogMTAyNCkKICNkZWZpbmUgRWxmUGFnZXMgIChFbGZIZWFkZXJTaXplIC8gNDA5NikKICNkZWZpbmUgS0VSTkVMQkFTRSAoMHhjMDAwMDAwMDAwMDAwMDAwKQorI2RlZmluZSBfQUxJR05fVVAoYWRkcixzaXplKQkoKChhZGRyKSsoKHNpemUpLTEpKSYofigoc2l6ZSktMSkpKQogCitzdHJ1Y3QgYWRkcl9yYW5nZSB7CisJdW5zaWduZWQgbG9uZyBsb25nIGFkZHI7CisJdW5zaWduZWQgbG9uZyBtZW1zaXplOworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OworfTsKKworc3RhdGljIGludCBjaGVja19lbGY2NCh2b2lkICpwLCBpbnQgc2l6ZSwgc3RydWN0IGFkZHJfcmFuZ2UgKnIpCit7CisJRWxmNjRfRWhkciAqZWxmNjQgPSBwOworCUVsZjY0X1BoZHIgKmVsZjY0cGg7CisKKwlpZiAoZWxmNjQtPmVfaWRlbnRbRUlfTUFHMF0gIT0gRUxGTUFHMCB8fAorCSAgICBlbGY2NC0+ZV9pZGVudFtFSV9NQUcxXSAhPSBFTEZNQUcxIHx8CisJICAgIGVsZjY0LT5lX2lkZW50W0VJX01BRzJdICE9IEVMRk1BRzIgfHwKKwkgICAgZWxmNjQtPmVfaWRlbnRbRUlfTUFHM10gIT0gRUxGTUFHMyB8fAorCSAgICBlbGY2NC0+ZV9pZGVudFtFSV9DTEFTU10gIT0gRUxGQ0xBU1M2NCB8fAorCSAgICBlbGY2NC0+ZV9pZGVudFtFSV9EQVRBXSAhPSBFTEZEQVRBMk1TQiB8fAorCSAgICBlbGY2NC0+ZV90eXBlICE9IEVUX0VYRUMgfHwgZWxmNjQtPmVfbWFjaGluZSAhPSBFTV9QUEM2NCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoKGVsZjY0LT5lX3Bob2ZmICsgc2l6ZW9mKEVsZjY0X1BoZHIpKSA+IHNpemUpCisJCXJldHVybiAwOworCisJZWxmNjRwaCA9IChFbGY2NF9QaGRyICopICgodW5zaWduZWQgbG9uZyllbGY2NCArCisJCQkJICAodW5zaWduZWQgbG9uZyllbGY2NC0+ZV9waG9mZik7CisKKwlyLT5tZW1zaXplID0gKHVuc2lnbmVkIGxvbmcpZWxmNjRwaC0+cF9tZW1zejsKKwlyLT5vZmZzZXQgPSAodW5zaWduZWQgbG9uZyllbGY2NHBoLT5wX29mZnNldDsKKwlyLT5hZGRyID0gKHVuc2lnbmVkIGxvbmcgbG9uZyllbGY2NHBoLT5wX3ZhZGRyOworCisjaWZkZWYgREVCVUcKKwlwcmludGYoIlBQQzY0IEVMRiBmaWxlLCBwaDpcbiIpOworCXByaW50ZigicF90eXBlICAgMHglMDh4XG4iLCBlbGY2NHBoLT5wX3R5cGUpOworCXByaW50ZigicF9mbGFncyAgMHglMDh4XG4iLCBlbGY2NHBoLT5wX2ZsYWdzKTsKKwlwcmludGYoInBfb2Zmc2V0IDB4JTAxNmxseFxuIiwgZWxmNjRwaC0+cF9vZmZzZXQpOworCXByaW50ZigicF92YWRkciAgMHglMDE2bGx4XG4iLCBlbGY2NHBoLT5wX3ZhZGRyKTsKKwlwcmludGYoInBfcGFkZHIgIDB4JTAxNmxseFxuIiwgZWxmNjRwaC0+cF9wYWRkcik7CisJcHJpbnRmKCJwX2ZpbGVzeiAweCUwMTZsbHhcbiIsIGVsZjY0cGgtPnBfZmlsZXN6KTsKKwlwcmludGYoInBfbWVtc3ogIDB4JTAxNmxseFxuIiwgZWxmNjRwaC0+cF9tZW1zeik7CisJcHJpbnRmKCJwX2FsaWduICAweCUwMTZsbHhcbiIsIGVsZjY0cGgtPnBfYWxpZ24pOworCXByaW50ZigiLi4uIHNraXBwaW5nIDB4JTA4bHggYnl0ZXMgb2YgRUxGIGhlYWRlclxuIiwKKwkgICAgICAgKHVuc2lnbmVkIGxvbmcpZWxmNjRwaC0+cF9vZmZzZXQpOworI2VuZGlmCisKKwlyZXR1cm4gNjQ7Cit9CiB2b2lkIGdldDRrKEZJTEUgKmZpbGUsIGNoYXIgKmJ1ZiApCiB7CiAJdW5zaWduZWQgajsKQEAgLTM0LDk3ICs4Miw5MiBAQAogaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogewogCWNoYXIgaW5idWZbNDA5Nl07Ci0JRklMRSAqcmFtRGlzayA9IE5VTEw7Ci0JRklMRSAqc3lzbWFwID0gTlVMTDsKLQlGSUxFICppbnB1dFZtbGludXggPSBOVUxMOwotCUZJTEUgKm91dHB1dFZtbGludXggPSBOVUxMOwotICAKLQl1bnNpZ25lZCBpID0gMDsKLQl1bnNpZ25lZCBsb25nIHJhbUZpbGVMZW4gPSAwOwotCXVuc2lnbmVkIGxvbmcgcmFtTGVuID0gMDsKLQl1bnNpZ25lZCBsb25nIHJvdW5kUiA9IDA7Ci0gIAotCXVuc2lnbmVkIGxvbmcgc3lzbWFwRmlsZUxlbiA9IDA7Ci0JdW5zaWduZWQgbG9uZyBzeXNtYXBMZW4gPSAwOwotCXVuc2lnbmVkIGxvbmcgc3lzbWFwUGFnZXMgPSAwOwotCWNoYXIqIHB0cl9lbmQgPSBOVUxMOyAKLQl1bnNpZ25lZCBsb25nIG9mZnNldF9lbmQgPSAwOworCXN0cnVjdCBhZGRyX3JhbmdlIHZtbGludXg7CisJRklMRSAqcmFtRGlzazsKKwlGSUxFICppbnB1dFZtbGludXg7CisJRklMRSAqb3V0cHV0Vm1saW51eDsKIAotCXVuc2lnbmVkIGxvbmcga2VybmVsTGVuID0gMDsKLQl1bnNpZ25lZCBsb25nIGFjdHVhbEtlcm5lbExlbiA9IDA7Ci0JdW5zaWduZWQgbG9uZyByb3VuZCA9IDA7Ci0JdW5zaWduZWQgbG9uZyByb3VuZGVkS2VybmVsTGVuID0gMDsKLQl1bnNpZ25lZCBsb25nIHJhbVN0YXJ0T2ZmcyA9IDA7Ci0JdW5zaWduZWQgbG9uZyByYW1QYWdlcyA9IDA7Ci0JdW5zaWduZWQgbG9uZyByb3VuZGVkS2VybmVsUGFnZXMgPSAwOwotCXVuc2lnbmVkIGxvbmcgaHZSZWxlYXNlRGF0YSA9IDA7CisJY2hhciAqcmRfbmFtZSwgKmx4X25hbWUsICpvdXRfbmFtZTsKKworCXNpemVfdCBpOworCXVuc2lnbmVkIGxvbmcgcmFtRmlsZUxlbjsKKwl1bnNpZ25lZCBsb25nIHJhbUxlbjsKKwl1bnNpZ25lZCBsb25nIHJvdW5kUjsKKwl1bnNpZ25lZCBsb25nIG9mZnNldF9lbmQ7CisKKwl1bnNpZ25lZCBsb25nIGtlcm5lbExlbjsKKwl1bnNpZ25lZCBsb25nIGFjdHVhbEtlcm5lbExlbjsKKwl1bnNpZ25lZCBsb25nIHJvdW5kOworCXVuc2lnbmVkIGxvbmcgcm91bmRlZEtlcm5lbExlbjsKKwl1bnNpZ25lZCBsb25nIHJhbVN0YXJ0T2ZmczsKKwl1bnNpZ25lZCBsb25nIHJhbVBhZ2VzOworCXVuc2lnbmVkIGxvbmcgcm91bmRlZEtlcm5lbFBhZ2VzOworCXVuc2lnbmVkIGxvbmcgaHZSZWxlYXNlRGF0YTsKIAl1X2ludDMyX3QgZXllQ2F0Y2hlciA9IDB4YzhhNWQ5YzQ7Ci0JdW5zaWduZWQgbG9uZyBuYWNhID0gMDsKLQl1bnNpZ25lZCBsb25nIHhSYW1EaXNrID0gMDsKLQl1bnNpZ25lZCBsb25nIHhSYW1EaXNrU2l6ZSA9IDA7Ci0JbG9uZyBwYWRQYWdlcyA9IDA7CisJdW5zaWduZWQgbG9uZyBuYWNhOworCXVuc2lnbmVkIGxvbmcgeFJhbURpc2s7CisJdW5zaWduZWQgbG9uZyB4UmFtRGlza1NpemU7CisJbG9uZyBwYWRQYWdlczsKICAgCiAgIAogCWlmIChhcmdjIDwgMikgewogCQlmcHJpbnRmKHN0ZGVyciwgIk5hbWUgb2YgUkFNIGRpc2sgZmlsZSBtaXNzaW5nLlxuIik7CiAJCWV4aXQoMSk7CiAJfQorCXJkX25hbWUgPSBhcmd2WzFdOwogCiAJaWYgKGFyZ2MgPCAzKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAiTmFtZSBvZiBTeXN0ZW0gTWFwIGlucHV0IGZpbGUgaXMgbWlzc2luZy5cbiIpOwotCQlleGl0KDEpOwotCX0KLSAgCi0JaWYgKGFyZ2MgPCA0KSB7CiAJCWZwcmludGYoc3RkZXJyLCAiTmFtZSBvZiB2bWxpbnV4IGZpbGUgbWlzc2luZy5cbiIpOwogCQlleGl0KDEpOwogCX0KKwlseF9uYW1lID0gYXJndlsyXTsKIAotCWlmIChhcmdjIDwgNSkgeworCWlmIChhcmdjIDwgNCkgewogCQlmcHJpbnRmKHN0ZGVyciwgIk5hbWUgb2Ygdm1saW51eCBvdXRwdXQgZmlsZSBtaXNzaW5nLlxuIik7CiAJCWV4aXQoMSk7CiAJfQorCW91dF9uYW1lID0gYXJndlszXTsKIAogCi0JcmFtRGlzayA9IGZvcGVuKGFyZ3ZbMV0sICJyIik7CisJcmFtRGlzayA9IGZvcGVuKHJkX25hbWUsICJyIik7CiAJaWYgKCAhIHJhbURpc2sgKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAiUkFNIGRpc2sgZmlsZSBcIiVzXCIgZmFpbGVkIHRvIG9wZW4uXG4iLCBhcmd2WzFdKTsKKwkJZnByaW50ZihzdGRlcnIsICJSQU0gZGlzayBmaWxlIFwiJXNcIiBmYWlsZWQgdG8gb3Blbi5cbiIsIHJkX25hbWUpOwogCQlleGl0KDEpOwogCX0KIAotCXN5c21hcCA9IGZvcGVuKGFyZ3ZbMl0sICJyIik7Ci0JaWYgKCAhIHN5c21hcCApIHsKLQkJZnByaW50ZihzdGRlcnIsICJTeXN0ZW0gTWFwIGZpbGUgXCIlc1wiIGZhaWxlZCB0byBvcGVuLlxuIiwgYXJndlsyXSk7Ci0JCWV4aXQoMSk7Ci0JfQotICAKLQlpbnB1dFZtbGludXggPSBmb3Blbihhcmd2WzNdLCAiciIpOworCWlucHV0Vm1saW51eCA9IGZvcGVuKGx4X25hbWUsICJyIik7CiAJaWYgKCAhIGlucHV0Vm1saW51eCApIHsKLQkJZnByaW50ZihzdGRlcnIsICJ2bWxpbnV4IGZpbGUgXCIlc1wiIGZhaWxlZCB0byBvcGVuLlxuIiwgYXJndlszXSk7CisJCWZwcmludGYoc3RkZXJyLCAidm1saW51eCBmaWxlIFwiJXNcIiBmYWlsZWQgdG8gb3Blbi5cbiIsIGx4X25hbWUpOwogCQlleGl0KDEpOwogCX0KICAgCi0Jb3V0cHV0Vm1saW51eCA9IGZvcGVuKGFyZ3ZbNF0sICJ3KyIpOworCW91dHB1dFZtbGludXggPSBmb3BlbihvdXRfbmFtZSwgIncrIik7CiAJaWYgKCAhIG91dHB1dFZtbGludXggKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAib3V0cHV0IHZtbGludXggZmlsZSBcIiVzXCIgZmFpbGVkIHRvIG9wZW4uXG4iLCBhcmd2WzRdKTsKKwkJZnByaW50ZihzdGRlcnIsICJvdXRwdXQgdm1saW51eCBmaWxlIFwiJXNcIiBmYWlsZWQgdG8gb3Blbi5cbiIsIG91dF9uYW1lKTsKIAkJZXhpdCgxKTsKIAl9Ci0gIAotICAKLSAgCisKKwlpID0gZnJlYWQoaW5idWYsIDEsIHNpemVvZihpbmJ1ZiksIGlucHV0Vm1saW51eCk7CisJaWYgKGkgIT0gc2l6ZW9mKGluYnVmKSkgeworCQlmcHJpbnRmKHN0ZGVyciwgImNhbiBub3QgcmVhZCB2bWxpbnV4IGZpbGUgJXM6ICV1XG4iLCBseF9uYW1lLCBpKTsKKwkJZXhpdCgxKTsKKwl9CisKKwlpID0gY2hlY2tfZWxmNjQoaW5idWYsIHNpemVvZihpbmJ1ZiksICZ2bWxpbnV4KTsKKwlpZiAoaSA9PSAwKSB7CisJCWZwcmludGYoc3RkZXJyLCAiWW91IG11c3QgaGF2ZSBhIGxpbnV4IGtlcm5lbCBzcGVjaWZpZWQgYXMgYXJndlsyXVxuIik7CisJCWV4aXQoMSk7CisJfQorCiAJLyogSW5wdXQgVm1saW51eCBmaWxlICovCiAJZnNlZWsoaW5wdXRWbWxpbnV4LCAwLCBTRUVLX0VORCk7CiAJa2VybmVsTGVuID0gZnRlbGwoaW5wdXRWbWxpbnV4KTsKIAlmc2VlayhpbnB1dFZtbGludXgsIDAsIFNFRUtfU0VUKTsKLQlwcmludGYoImtlcm5lbCBmaWxlIHNpemUgPSAlZFxuIiwga2VybmVsTGVuKTsKLQlpZiAoIGtlcm5lbExlbiA9PSAwICkgewotCQlmcHJpbnRmKHN0ZGVyciwgIllvdSBtdXN0IGhhdmUgYSBsaW51eCBrZXJuZWwgc3BlY2lmaWVkIGFzIGFyZ3ZbM11cbiIpOwotCQlleGl0KDEpOwotCX0KKwlwcmludGYoImtlcm5lbCBmaWxlIHNpemUgPSAlbHVcbiIsIGtlcm5lbExlbik7CiAKIAlhY3R1YWxLZXJuZWxMZW4gPSBrZXJuZWxMZW4gLSBFbGZIZWFkZXJTaXplOwogCi0JcHJpbnRmKCJhY3R1YWwga2VybmVsIGxlbmd0aCAobWludXMgRUxGIGhlYWRlcikgPSAlZFxuIiwgYWN0dWFsS2VybmVsTGVuKTsKKwlwcmludGYoImFjdHVhbCBrZXJuZWwgbGVuZ3RoIChtaW51cyBFTEYgaGVhZGVyKSA9ICVsdVxuIiwgYWN0dWFsS2VybmVsTGVuKTsKIAogCXJvdW5kID0gYWN0dWFsS2VybmVsTGVuICUgNDA5NjsKIAlyb3VuZGVkS2VybmVsTGVuID0gYWN0dWFsS2VybmVsTGVuOwpAQCAtMTM0LDM5ICsxNzcsNyBAQAogCXJvdW5kZWRLZXJuZWxQYWdlcyA9IHJvdW5kZWRLZXJuZWxMZW4gLyA0MDk2OwogCXByaW50ZigiVm1saW51eCBwYWdlcyB0byBjb3B5ID0gJWxkLzB4JWx4IFxuIiwgcm91bmRlZEtlcm5lbFBhZ2VzLCByb3VuZGVkS2VybmVsUGFnZXMpOwogCi0KLQotCS8qIElucHV0IFN5c3RlbSBNYXAgZmlsZSAqLwotCS8qIChuZWVkcyB0byBiZSBwcm9jZXNzZWQgc2ltcGx5IHRvIGRldGVybWluZSBpZiB3ZSBuZWVkIHRvIGFkZCBwYWQgcGFnZXMgZHVlIHRvIHRoZSBzdGF0aWMgdmFyaWFibGVzIG5vdCBiZWluZyBpbmNsdWRlZCBpbiB0aGUgdm1saW51eCkgKi8KLQlmc2VlayhzeXNtYXAsIDAsIFNFRUtfRU5EKTsKLQlzeXNtYXBGaWxlTGVuID0gZnRlbGwoc3lzbWFwKTsKLQlmc2VlayhzeXNtYXAsIDAsIFNFRUtfU0VUKTsKLQlwcmludGYoIiVzIGZpbGUgc2l6ZSA9ICVsZC8weCVseCBcbiIsIGFyZ3ZbMl0sIHN5c21hcEZpbGVMZW4sIHN5c21hcEZpbGVMZW4pOwotCi0Jc3lzbWFwTGVuID0gc3lzbWFwRmlsZUxlbjsKLQotCXJvdW5kUiA9IDQwOTYgLSAoc3lzbWFwTGVuICUgNDA5Nik7Ci0JaWYgKHJvdW5kUikgewotCQlwcmludGYoIlJvdW5kaW5nIFN5c3RlbSBNYXAgZmlsZSB1cCB0byBhIG11bHRpcGxlIG9mIDQwOTYsIGFkZGluZyAlbGQvMHglbHggXG4iLCByb3VuZFIsIHJvdW5kUik7Ci0JCXN5c21hcExlbiArPSByb3VuZFI7Ci0JfQotCXByaW50ZigiUm91bmRlZCBTeXN0ZW0gTWFwIHNpemUgaXMgJWxkLzB4JWx4IFxuIiwgc3lzbWFwTGVuLCBzeXNtYXBMZW4pOwotICAKLQkvKiBQcm9jZXNzIHRoZSBTeXNtYXAgZmlsZSB0byBkZXRlcm1pbmUgd2hlcmUgX2VuZCBpcyAqLwotCXN5c21hcFBhZ2VzID0gc3lzbWFwTGVuIC8gNDA5NjsKLQkvKiByZWFkIHRoZSB3aG9sZSBmaWxlIGxpbmUgYnkgbGluZSwgZXhwZWN0IHRoYXQgaXQgZG9lc24ndCBmYWlsICovCi0Jd2hpbGUgKCBmZ2V0cyhpbmJ1ZiwgNDA5Niwgc3lzbWFwKSApICA7Ci0JLyogc2VhcmNoIGZvciBfZW5kIGluIHRoZSBsYXN0IHBhZ2Ugb2YgdGhlIHN5c3RlbSBtYXAgKi8KLQlwdHJfZW5kID0gc3Ryc3RyKGluYnVmLCAiIF9lbmQiKTsKLQlpZiAoIXB0cl9lbmQpIHsKLQkJZnByaW50ZihzdGRlcnIsICJVbmFibGUgdG8gZmluZCBfZW5kIGluIHRoZSBzeXNtYXAgZmlsZSBcbiIpOwotCQlmcHJpbnRmKHN0ZGVyciwgImluYnVmOiBcbiIpOwotCQlmcHJpbnRmKHN0ZGVyciwgIiVzIFxuIiwgaW5idWYpOwotCQlleGl0KDEpOwotCX0KLQlwcmludGYoIkZvdW5kIF9lbmQgaW4gdGhlIGxhc3QgcGFnZSBvZiB0aGUgc3lzbWFwIC0gYmFja2luZyB1cCAxMCBjaGFyYWN0ZXJzIGl0IGxvb2tzIGxpa2UgJXMiLCBwdHJfZW5kLTEwKTsKLQkvKiBjb252ZXJ0IGFkZHJlc3Mgb2YgX2VuZCBpbiBzeXN0ZW0gbWFwIHRvIGhleCBvZmZzZXQuICovCi0Jb2Zmc2V0X2VuZCA9ICh1bnNpZ25lZCBpbnQpc3RydG9sKHB0cl9lbmQtMTAsIE5VTEwsIDE2KTsKKwlvZmZzZXRfZW5kID0gX0FMSUdOX1VQKHZtbGludXgubWVtc2l6ZSwgNDA5Nik7CiAJLyogY2FsYyBob3cgbWFueSBwYWdlcyB3ZSBuZWVkIHRvIGluc2VydCBiZXR3ZWVuIHRoZSB2bWxpbnV4IGFuZCB0aGUgc3RhcnQgb2YgdGhlIHJhbSBkaXNrICovCiAJcGFkUGFnZXMgPSBvZmZzZXRfZW5kLzQwOTYgLSByb3VuZGVkS2VybmVsUGFnZXM7CiAKQEAgLTE5NCw3ICsyMDUsNyBAQAogCWZzZWVrKHJhbURpc2ssIDAsIFNFRUtfRU5EKTsKIAlyYW1GaWxlTGVuID0gZnRlbGwocmFtRGlzayk7CiAJZnNlZWsocmFtRGlzaywgMCwgU0VFS19TRVQpOwotCXByaW50ZigiJXMgZmlsZSBzaXplID0gJWxkLzB4JWx4IFxuIiwgYXJndlsxXSwgcmFtRmlsZUxlbiwgcmFtRmlsZUxlbik7CisJcHJpbnRmKCIlcyBmaWxlIHNpemUgPSAlbGQvMHglbHggXG4iLCByZF9uYW1lLCByYW1GaWxlTGVuLCByYW1GaWxlTGVuKTsKIAogCXJhbUxlbiA9IHJhbUZpbGVMZW47CiAKQEAgLTI0OCwxOSArMjU5LDE5IEBACiAJLyogZnNlZWsgdG8gdGhlIGh2UmVsZWFzZURhdGEgcG9pbnRlciAqLwogCWZzZWVrKG91dHB1dFZtbGludXgsIEVsZkhlYWRlclNpemUgKyAweDI0LCBTRUVLX1NFVCk7CiAJaWYgKGZyZWFkKCZodlJlbGVhc2VEYXRhLCA0LCAxLCBvdXRwdXRWbWxpbnV4KSAhPSAxKSB7Ci0JCWRlYXRoKCJDb3VsZCBub3QgcmVhZCBodlJlbGVhc2VEYXRhIHBvaW50ZXJcbiIsIG91dHB1dFZtbGludXgsIGFyZ3ZbNF0pOworCQlkZWF0aCgiQ291bGQgbm90IHJlYWQgaHZSZWxlYXNlRGF0YSBwb2ludGVyXG4iLCBvdXRwdXRWbWxpbnV4LCBvdXRfbmFtZSk7CiAJfQogCWh2UmVsZWFzZURhdGEgPSBudG9obChodlJlbGVhc2VEYXRhKTsgLyogQ29udmVydCB0byBuYXRpdmUgaW50ICovCi0JcHJpbnRmKCJodlJlbGVhc2VEYXRhIGlzIGF0ICUwOHhcbiIsIGh2UmVsZWFzZURhdGEpOworCXByaW50ZigiaHZSZWxlYXNlRGF0YSBpcyBhdCAlMDhseFxuIiwgaHZSZWxlYXNlRGF0YSk7CiAKIAkvKiBmc2VlayB0byB0aGUgaHZSZWxlYXNlRGF0YSAqLwogCWZzZWVrKG91dHB1dFZtbGludXgsIEVsZkhlYWRlclNpemUgKyBodlJlbGVhc2VEYXRhLCBTRUVLX1NFVCk7CiAJaWYgKGZyZWFkKGluYnVmLCAweDQwLCAxLCBvdXRwdXRWbWxpbnV4KSAhPSAxKSB7Ci0JCWRlYXRoKCJDb3VsZCBub3QgcmVhZCBodlJlbGVhc2VEYXRhXG4iLCBvdXRwdXRWbWxpbnV4LCBhcmd2WzRdKTsKKwkJZGVhdGgoIkNvdWxkIG5vdCByZWFkIGh2UmVsZWFzZURhdGFcbiIsIG91dHB1dFZtbGludXgsIG91dF9uYW1lKTsKIAl9CiAJLyogQ2hlY2sgaHZSZWxlYXNlRGF0YSBzYW5pdHkgKi8KIAlpZiAobWVtY21wKGluYnVmLCAmZXllQ2F0Y2hlciwgNCkgIT0gMCkgewotCQlkZWF0aCgiaHZSZWxlYXNlRGF0YSBpcyBpbnZhbGlkXG4iLCBvdXRwdXRWbWxpbnV4LCBhcmd2WzRdKTsKKwkJZGVhdGgoImh2UmVsZWFzZURhdGEgaXMgaW52YWxpZFxuIiwgb3V0cHV0Vm1saW51eCwgb3V0X25hbWUpOwogCX0KIAkvKiBHZXQgdGhlIG5hY2EgcG9pbnRlciAqLwogCW5hY2EgPSBudG9obCgqKCh1X2ludDMyX3QqKSAmaW5idWZbMHgwQ10pKSAtIEtFUk5FTEJBU0U7CkBAIC0yNjksMTMgKzI4MCwxMyBAQAogCS8qIGZzZWVrIHRvIHRoZSBuYWNhICovCiAJZnNlZWsob3V0cHV0Vm1saW51eCwgRWxmSGVhZGVyU2l6ZSArIG5hY2EsIFNFRUtfU0VUKTsKIAlpZiAoZnJlYWQoaW5idWYsIDB4MTgsIDEsIG91dHB1dFZtbGludXgpICE9IDEpIHsKLQkJZGVhdGgoIkNvdWxkIG5vdCByZWFkIG5hY2FcbiIsIG91dHB1dFZtbGludXgsIGFyZ3ZbNF0pOworCQlkZWF0aCgiQ291bGQgbm90IHJlYWQgbmFjYVxuIiwgb3V0cHV0Vm1saW51eCwgb3V0X25hbWUpOwogCX0KIAl4UmFtRGlzayA9IG50b2hsKCooKHVfaW50MzJfdCAqKSAmaW5idWZbMHgwY10pKTsKIAl4UmFtRGlza1NpemUgPSBudG9obCgqKCh1X2ludDMyX3QgKikgJmluYnVmWzB4MTRdKSk7CiAJLyogTWFrZSBzdXJlIGEgUkFNIGRpc2sgaXNuJ3QgYWxyZWFkeSBwcmVzZW50ICovCiAJaWYgKCh4UmFtRGlzayAhPSAwKSB8fCAoeFJhbURpc2tTaXplICE9IDApKSB7Ci0JCWRlYXRoKCJSQU0gZGlzayBpcyBhbHJlYWR5IGF0dGFjaGVkIHRvIHRoaXMga2VybmVsXG4iLCBvdXRwdXRWbWxpbnV4LCBhcmd2WzRdKTsKKwkJZGVhdGgoIlJBTSBkaXNrIGlzIGFscmVhZHkgYXR0YWNoZWQgdG8gdGhpcyBrZXJuZWxcbiIsIG91dHB1dFZtbGludXgsIG91dF9uYW1lKTsKIAl9CiAJLyogRmlsbCBpbiB0aGUgdmFsdWVzICovCiAJKigodV9pbnQzMl90ICopICZpbmJ1ZlsweDBjXSkgPSBodG9ubChyYW1TdGFydE9mZnMpOwpAQCAtMjg1LDE1ICsyOTYsMTUgQEAKIAlmZmx1c2gob3V0cHV0Vm1saW51eCk7CiAJZnNlZWsob3V0cHV0Vm1saW51eCwgRWxmSGVhZGVyU2l6ZSArIG5hY2EsIFNFRUtfU0VUKTsKIAlpZiAoZndyaXRlKGluYnVmLCAweDE4LCAxLCBvdXRwdXRWbWxpbnV4KSAhPSAxKSB7Ci0JCWRlYXRoKCJDb3VsZCBub3Qgd3JpdGUgbmFjYVxuIiwgb3V0cHV0Vm1saW51eCwgYXJndls0XSk7CisJCWRlYXRoKCJDb3VsZCBub3Qgd3JpdGUgbmFjYVxuIiwgb3V0cHV0Vm1saW51eCwgb3V0X25hbWUpOwogCX0KLQlwcmludGYoIlJhbSBEaXNrIG9mIDB4JWx4IHBhZ2VzIGlzIGF0dGFjaGVkIHRvIHRoZSBrZXJuZWwgYXQgb2Zmc2V0IDB4JTA4eFxuIiwKKwlwcmludGYoIlJhbSBEaXNrIG9mIDB4JWx4IHBhZ2VzIGlzIGF0dGFjaGVkIHRvIHRoZSBrZXJuZWwgYXQgb2Zmc2V0IDB4JTA4bHhcbiIsCiAJICAgICAgIHJhbVBhZ2VzLCByYW1TdGFydE9mZnMpOwogCiAJLyogRG9uZSAqLwogCWZjbG9zZShvdXRwdXRWbWxpbnV4KTsKIAkvKiBTZXQgcGVybWlzc2lvbiB0byBleGVjdXRhYmxlICovCi0JY2htb2QoYXJndls0XSwgU19JUlVTUnxTX0lXVVNSfFNfSVhVU1J8U19JUkdSUHxTX0lYR1JQfFNfSVJPVEh8U19JWE9USCk7CisJY2htb2Qob3V0X25hbWUsIFNfSVJVU1J8U19JV1VTUnxTX0lYVVNSfFNfSVJHUlB8U19JWEdSUHxTX0lST1RIfFNfSVhPVEgpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvcHBjNjQva2VybmVsL01ha2VmaWxlCmluZGV4IGM0NDFhZWIuLmRhYzRjYzIgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvcHBjNjQva2VybmVsL01ha2VmaWxlCkBAIC0xMSwxMyArMTEsMTAgQEAKIAogZW5kaWYKIAotb2JqLXkgICAgICAgICAgICAgICArPQlpcnEubyBpZGxlLm8gZG1hLm8gXAotCQkJYWxpZ24ubyBwYWNhRGF0YS5vIFwKLQkJCXVkYmcubyBpb2N0bDMyLm8gXAorb2JqLXkgICAgICAgICAgICAgICArPQlpZGxlLm8gZG1hLm8gXAorCQkJYWxpZ24ubyBcCiAJCQlydGMubyBcCi0JCQljcHVfc2V0dXBfcG93ZXI0Lm8gXAotCQkJaW9tbXUubyBzeXNmcy5vIHZkc28ubyBmaXJtd2FyZS5vCi1vYmoteSArPSB2ZHNvMzIvIHZkc282NC8KKwkJCWlvbW11Lm8KIAogcGNpLW9iai0kKENPTkZJR19QUENfTVVMVElQTEFURk9STSkJKz0gcGNpX2RuLm8gcGNpX2RpcmVjdF9pb21tdS5vCiAKQEAgLTI4LDMyICsyNSwxOSBAQAogb2JqLSQoQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNKSArPSBwcm9tX2luaXQubwogZW5kaWYKIAotb2JqLSQoQ09ORklHX1BQQ19QU0VSSUVTKSArPSB1ZGJnXzE2NTUwLm8KLQogb2JqLSQoQ09ORklHX0tFWEVDKQkJKz0gbWFjaGluZV9rZXhlYy5vCi1vYmotJChDT05GSUdfRUVIKQkJKz0gZWVoLm8KLW9iai0kKENPTkZJR19QUk9DX0ZTKQkJKz0gcHJvY19wcGM2NC5vCiBvYmotJChDT05GSUdfTU9EVUxFUykJCSs9IG1vZHVsZS5vCiBpZm5lcSAoJChDT05GSUdfUFBDX01FUkdFKSx5KQogb2JqLSQoQ09ORklHX01PRFVMRVMpCQkrPSBwcGNfa3N5bXMubwogZW5kaWYKLW9iai0kKENPTkZJR19QUENfUlRBUykJCSs9IHJ0YXNfcGNpLm8KLW9iai0kKENPTkZJR19TQ0FOTE9HKQkJKz0gc2NhbmxvZy5vCi1vYmotJChDT05GSUdfTFBBUkNGRykJCSs9IGxwYXJjZmcubwogb2JqLSQoQ09ORklHX0hWQ19DT05TT0xFKQkrPSBodmNvbnNvbGUubwogaWZuZXEgKCQoQ09ORklHX1BQQ19NRVJHRSkseSkKIG9iai0kKENPTkZJR19CT09UWF9URVhUKQkrPSBidGV4dC5vCiBlbmRpZgogb2JqLSQoQ09ORklHX0hWQ1MpCQkrPSBodmNzZXJ2ZXIubwogCi1vYmotJChDT05GSUdfUFBDX1BNQUMpCQkrPSB1ZGJnX3NjYy5vCi0KLW9iai0kKENPTkZJR19QUENfTUFQTEUpCQkrPSB1ZGJnXzE2NTUwLm8KLQogb2JqLSQoQ09ORklHX0tQUk9CRVMpCQkrPSBrcHJvYmVzLm8KIAotQ0ZMQUdTX2lvY3RsMzIubyArPSAtSWZzLwotCiBpZm5lcSAoJChDT05GSUdfUFBDX01FUkdFKSx5KQogaWZlcSAoJChDT05GSUdfUFBDX0lTRVJJRVMpLHkpCiBhcmNoL3BwYzY0L2tlcm5lbC9oZWFkLm86IGFyY2gvcG93ZXJwYy9rZXJuZWwvbHBhcm1hcC5zCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC9hc20tb2Zmc2V0cy5jIGIvYXJjaC9wcGM2NC9rZXJuZWwvYXNtLW9mZnNldHMuYwppbmRleCBiY2U5MDY1Li44NGFiNWMxIDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC9hc20tb2Zmc2V0cy5jCisrKyBiL2FyY2gvcHBjNjQva2VybmVsL2FzbS1vZmZzZXRzLmMKQEAgLTc0LDcgKzc0LDYgQEAKIAlERUZJTkUoSUNBQ0hFTDFMSU5FU0laRSwgb2Zmc2V0b2Yoc3RydWN0IHBwYzY0X2NhY2hlcywgaWxpbmVfc2l6ZSkpOwogCURFRklORShJQ0FDSEVMMUxPR0xJTkVTSVpFLCBvZmZzZXRvZihzdHJ1Y3QgcHBjNjRfY2FjaGVzLCBsb2dfaWxpbmVfc2l6ZSkpOwogCURFRklORShJQ0FDSEVMMUxJTkVTUEVSUEFHRSwgb2Zmc2V0b2Yoc3RydWN0IHBwYzY0X2NhY2hlcywgaWxpbmVzX3Blcl9wYWdlKSk7Ci0JREVGSU5FKFBMQVRGT1JNLCBvZmZzZXRvZihzdHJ1Y3Qgc3lzdGVtY2ZnLCBwbGF0Zm9ybSkpOwogCURFRklORShQTEFURk9STV9MUEFSLCBQTEFURk9STV9MUEFSKTsKIAogCS8qIHBhY2EgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL2hlYWQuUyBiL2FyY2gvcHBjNjQva2VybmVsL2hlYWQuUwppbmRleCA5ZTgwNTBlLi4xYzg2OWVhIDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC9oZWFkLlMKKysrIGIvYXJjaC9wcGM2NC9rZXJuZWwvaGVhZC5TCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL21tdS5oPgotI2luY2x1ZGUgPGFzbS9zeXN0ZW1jZmcuaD4KICNpbmNsdWRlIDxhc20vcHBjX2FzbS5oPgogI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgogI2luY2x1ZGUgPGFzbS9idWcuaD4KQEAgLTE3MDEsMjEgKzE3MDAsOSBAQAogCUhNVF9NRURJVU0JCQkvKiBTZXQgdGhyZWFkIHByaW9yaXR5IHRvIE1FRElVTSAqLwogCiAJbGQJcjIsUEFDQVRPQyhyMTMpCi0JbGkJcjYsMAotCXN0YglyNixQQUNBUFJPQ0VOQUJMRUQocjEzKQogCi0jaWZuZGVmIENPTkZJR19QUENfSVNFUklFUwotCS8qIEluaXRpYWxpemUgdGhlIHBhZ2UgdGFibGUgcG9pbnRlciByZWdpc3Rlci4gKi8KLQlMT0FEQUREUihyNixfU0RSMSkKLQlsZAlyNiwwKHI2KQkJLyogZ2V0IHRoZSB2YWx1ZSBvZiBfU0RSMQkgKi8KLQltdHNwcglTUFJOX1NEUjEscjYJCQkvKiBzZXQgdGhlIGh0YWIgbG9jYXRpb24JICovCi0jZW5kaWYKLQkvKiBJbml0aWFsaXplIHRoZSBmaXJzdCBzZWdtZW50IHRhYmxlIChvciBTTEIpIGVudHJ5CQkgKi8KLQlsZAlyMyxQQUNBU1RBQlZJUlQocjEzKQkvKiBnZXQgYWRkciBvZiBzZWdtZW50IHRhYmxlCSAqLwotQkVHSU5fRlRSX1NFQ1RJT04KLQlibAkuc3RhYl9pbml0aWFsaXplCi1FTkRfRlRSX1NFQ1RJT05fSUZDTFIoQ1BVX0ZUUl9TTEIpCi0JYmwJLnNsYl9pbml0aWFsaXplCisJLyogRG8gZWFybHkgc2V0dXAgZm9yIHRoYXQgQ1BVICovCisJYmwJLmVhcmx5X3NldHVwX3NlY29uZGFyeQogCiAJLyogSW5pdGlhbGl6ZSB0aGUga2VybmVsIHN0YWNrLiAgSnVzdCBhIHJlcGVhdCBmb3IgaVNlcmllcy4JICovCiAJTE9BREFERFIocjMsY3VycmVudF9zZXQpCkBAIC0xNzI0LDM3ICsxNzExLDYgQEAKIAlhZGRpCXIxLHIxLFRIUkVBRF9TSVpFLVNUQUNLX0ZSQU1FX09WRVJIRUFECiAJc3RkCXIxLFBBQ0FLU0FWRShyMTMpCiAKLQlsZAlyMyxQQUNBU1RBQlJFQUwocjEzKQkvKiBnZXQgcmFkZHIgb2Ygc2VnbWVudCB0YWJsZQkgKi8KLQlvcmkJcjQscjMsMQkJCS8qIHR1cm4gb24gdmFsaWQgYml0CQkgKi8KLQotI2lmZGVmIENPTkZJR19QUENfSVNFUklFUwotCWxpCXIwLC0xCQkJLyogaHlwZXJ2aXNvciBjYWxsICovCi0JbGkJcjMsMQotCXNsZGkJcjMscjMsNjMJCS8qIDB4ODAwMDAwMDAwMDAwMDAwMCAqLwotCW9yaQlyMyxyMyw0CQkJLyogMHg4MDAwMDAwMDAwMDAwMDA0ICovCi0Jc2MJCQkJLyogSHZDYWxsX3NldEFTUiAqLwotI2Vsc2UKLQkvKiBzZXQgdGhlIEFTUiAqLwotCWxkCXIzLHN5c3RlbWNmZ0Bnb3QocjIpCS8qIHIzID0gcHRyIHRvIHN5c3RlbWNmZwkgKi8KLQlsZAlyMywwKHIzKQotCWx3eglyMyxQTEFURk9STShyMykJCS8qIHIzID0gcGxhdGZvcm0gZmxhZ3MJCSAqLwotCWFuZGkuCXIzLHIzLFBMQVRGT1JNX0xQQVIJLyogVGVzdCBpZiBiaXQgMCBpcyBzZXQgKExQQVIgYml0KSAqLwotCWJlcQk5OGYJCQkvKiBicmFuY2ggaWYgcmVzdWx0IGlzIDAgICovCi0JbWZzcHIJcjMsU1BSTl9QVlIKLQlzcndpCXIzLHIzLDE2Ci0JY21wd2kJcjMsMHgzNwkJCS8qIFNTdGFyICAqLwotCWJlcQk5N2YKLQljbXB3aQlyMywweDM2CQkJLyogSVN0YXIgICovCi0JYmVxCTk3ZgotCWNtcHdpCXIzLDB4MzQJCQkvKiBQdWxzYXIgKi8KLQlibmUJOThmCi05NzoJbGkJcjMsSF9TRVRfQVNSCQkvKiBoY2FsbCA9IEhfU0VUX0FTUiAqLwotCUhWU0MJCQkJLyogSW52b2tpbmcgaGNhbGwgKi8KLQliCTk5ZgotOTg6CQkJCQkvKiAhKHJwYSBoeXBlcnZpc29yKSB8fCAhKHN0YXIpICAqLwotCW10YXNyCXI0CQkJLyogc2V0IHRoZSBzdGFiIGxvY2F0aW9uCSAqLwotOTk6Ci0jZW5kaWYKIAlsaQlyNywwCiAJbXRscglyNwogCkBAIC0xODk2LDQwICsxODUyLDYgQEAKIAltcglyMyxyMzEKICAJYmwJLmVhcmx5X3NldHVwCiAKLQkvKiBzZXQgdGhlIEFTUiAqLwotCWxkCXIzLFBBQ0FTVEFCUkVBTChyMTMpCi0Jb3JpCXI0LHIzLDEJCQkvKiB0dXJuIG9uIHZhbGlkIGJpdAkJICovCi0JbGQJcjMsc3lzdGVtY2ZnQGdvdChyMikJLyogcjMgPSBwdHIgdG8gc3lzdGVtY2ZnICovCi0JbGQJcjMsMChyMykKLQlsd3oJcjMsUExBVEZPUk0ocjMpCQkvKiByMyA9IHBsYXRmb3JtIGZsYWdzICovCi0JYW5kaS4JcjMscjMsUExBVEZPUk1fTFBBUgkvKiBUZXN0IGlmIGJpdCAwIGlzIHNldCAoTFBBUiBiaXQpICovCi0JYmVxCTk4ZgkJCS8qIGJyYW5jaCBpZiByZXN1bHQgaXMgMCAgKi8KLQltZnNwcglyMyxTUFJOX1BWUgotCXNyd2kJcjMscjMsMTYKLQljbXB3aQlyMywweDM3CQkJLyogU1N0YXIgKi8KLQliZXEJOTdmCi0JY21wd2kJcjMsMHgzNgkJCS8qIElTdGFyICAqLwotCWJlcQk5N2YKLQljbXB3aQlyMywweDM0CQkJLyogUHVsc2FyICovCi0JYm5lCTk4ZgotOTc6CWxpCXIzLEhfU0VUX0FTUgkJLyogaGNhbGwgPSBIX1NFVF9BU1IgKi8KLQlIVlNDCQkJCS8qIEludm9raW5nIGhjYWxsICovCi0JYgk5OWYKLTk4OgkJCQkJLyogIShycGEgaHlwZXJ2aXNvcikgfHwgIShzdGFyKSAqLwotCW10YXNyCXI0CQkJLyogc2V0IHRoZSBzdGFiIGxvY2F0aW9uCSovCi05OToKLQkvKiBTZXQgU0RSMSAoaGFzaCB0YWJsZSBwb2ludGVyKSAqLwotCWxkCXIzLHN5c3RlbWNmZ0Bnb3QocjIpCS8qIHIzID0gcHRyIHRvIHN5c3RlbWNmZyAqLwotCWxkCXIzLDAocjMpCi0JbHd6CXIzLFBMQVRGT1JNKHIzKQkJLyogcjMgPSBwbGF0Zm9ybSBmbGFncyAqLwotCS8qIFRlc3QgaWYgYml0IDAgaXMgc2V0IChMUEFSIGJpdCkgKi8KLQlhbmRpLglyMyxyMyxQTEFURk9STV9MUEFSCi0JYm5lCTk4ZgkJCS8qIGJyYW5jaCBpZiByZXN1bHQgaXMgITAgICovCi0JTE9BREFERFIocjYsX1NEUjEpCQkvKiBPbmx5IGlmIE5PVCBMUEFSICovCi0Jc3ViCXI2LHI2LHIyNgotCWxkCXI2LDAocjYpCQkvKiBnZXQgdGhlIHZhbHVlIG9mIF9TRFIxICovCi0JbXRzcHIJU1BSTl9TRFIxLHI2CQkJLyogc2V0IHRoZSBodGFiIGxvY2F0aW9uICAqLwotOTg6IAogCUxPQURBRERSKHIzLC5zdGFydF9oZXJlX2NvbW1vbikKIAlTRVRfUkVHX1RPX0NPTlNUKHI0LCBNU1JfS0VSTkVMKQogCW10c3ByCVNQUk5fU1JSMCxyMwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvaWRsZS5jIGIvYXJjaC9wcGM2NC9rZXJuZWwvaWRsZS5jCmluZGV4IDhmZWMyNzQuLmI4NzlkMzAgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQva2VybmVsL2lkbGUuYworKysgYi9hcmNoL3BwYzY0L2tlcm5lbC9pZGxlLmMKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL2NwdXRhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL3RpbWUuaD4KLSNpbmNsdWRlIDxhc20vc3lzdGVtY2ZnLmg+CiAjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KICNpbmNsdWRlIDxhc20vc21wLmg+CiAKQEAgLTM0LDE1ICszMywxMSBAQAogCiB2b2lkIGRlZmF1bHRfaWRsZSh2b2lkKQogewotCWxvbmcgb2xkdmFsOwogCXVuc2lnbmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJc2V0X3RocmVhZF9mbGFnKFRJRl9QT0xMSU5HX05SRkxBRyk7CiAKIAl3aGlsZSAoMSkgewotCQlvbGR2YWwgPSB0ZXN0X2FuZF9jbGVhcl90aHJlYWRfZmxhZyhUSUZfTkVFRF9SRVNDSEVEKTsKLQotCQlpZiAoIW9sZHZhbCkgewotCQkJc2V0X3RocmVhZF9mbGFnKFRJRl9QT0xMSU5HX05SRkxBRyk7Ci0KKwkJaWYgKCFuZWVkX3Jlc2NoZWQoKSkgewogCQkJd2hpbGUgKCFuZWVkX3Jlc2NoZWQoKSAmJiAhY3B1X2lzX29mZmxpbmUoY3B1KSkgewogCQkJCXBwYzY0X3J1bmxhdGNoX29mZigpOwogCkBAIC01NSwxMyArNTAsMTIgQEAKIAkJCX0KIAogCQkJSE1UX21lZGl1bSgpOwotCQkJY2xlYXJfdGhyZWFkX2ZsYWcoVElGX1BPTExJTkdfTlJGTEFHKTsKLQkJfSBlbHNlIHsKLQkJCXNldF9uZWVkX3Jlc2NoZWQoKTsKIAkJfQogCiAJCXBwYzY0X3J1bmxhdGNoX29uKCk7CisJCXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWQoKTsKIAkJc2NoZWR1bGUoKTsKKwkJcHJlZW1wdF9kaXNhYmxlKCk7CiAJCWlmIChjcHVfaXNfb2ZmbGluZShjcHUpICYmIHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fUlVOTklORykKIAkJCWNwdV9kaWUoKTsKIAl9CkBAIC03Nyw3ICs3MSw5IEBACiAKIAkJaWYgKG5lZWRfcmVzY2hlZCgpKSB7CiAJCQlwcGM2NF9ydW5sYXRjaF9vbigpOworCQkJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOwogCQkJc2NoZWR1bGUoKTsKKwkJCXByZWVtcHRfZGlzYWJsZSgpOwogCQl9CiAKIAkJaWYgKGNwdV9pc19vZmZsaW5lKHNtcF9wcm9jZXNzb3JfaWQoKSkgJiYKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL21pc2MuUyBiL2FyY2gvcHBjNjQva2VybmVsL21pc2MuUwppbmRleCA5MTQ2MzJlLi41ZTA4OWRlIDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC9taXNjLlMKKysrIGIvYXJjaC9wcGM2NC9rZXJuZWwvbWlzYy5TCkBAIC03OCwxMiArNzgsMTIgQEAKIAltdGxyCXIwCiAJYmxyCiAKLV9HTE9CQUwoY2FsbF9oYW5kbGVfSVJRX2V2ZW50KQorX0dMT0JBTChjYWxsX19fZG9fSVJRKQogCW1mbHIJcjAKIAlzdGQJcjAsMTYocjEpCi0Jc3RkdQlyMSxUSFJFQURfU0laRS0xMTIocjYpCi0JbXIJcjEscjYKLQlibAkuaGFuZGxlX0lSUV9ldmVudAorCXN0ZHUJcjEsVEhSRUFEX1NJWkUtMTEyKHI1KQorCW1yCXIxLHI1CisJYmwJLl9fZG9fSVJRCiAJbGQJcjEsMChyMSkKIAlsZAlyMCwxNihyMSkKIAltdGxyCXIwCkBAIC0xODYsNyArMTg2LDggQEAKIAliZG56CTJiCiAJaXN5bmMKIAlibHIKLQkucHJldmlvdXMgLnRleHQKKworCS50ZXh0CiAvKgogICogTGlrZSBhYm92ZSwgYnV0IG9ubHkgZG8gdGhlIEQtY2FjaGUuCiAgKgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvbnZyYW0uYyBiL2FyY2gvcHBjNjQva2VybmVsL252cmFtLmMKaW5kZXggNGZiMWE5Zi4uYzBmY2QyOSAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9rZXJuZWwvbnZyYW0uYworKysgYi9hcmNoL3BwYzY0L2tlcm5lbC9udnJhbS5jCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSA8YXNtL3J0YXMuaD4KICNpbmNsdWRlIDxhc20vcHJvbS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+Ci0jaW5jbHVkZSA8YXNtL3N5c3RlbWNmZy5oPgogCiAjdW5kZWYgREVCVUdfTlZSQU0KIApAQCAtMTY3LDcgKzE2Niw3IEBACiAJY2FzZSBJT0NfTlZSQU1fR0VUX09GRlNFVDogewogCQlpbnQgcGFydCwgb2Zmc2V0OwogCi0JCWlmIChzeXN0ZW1jZmctPnBsYXRmb3JtICE9IFBMQVRGT1JNX1BPV0VSTUFDKQorCQlpZiAoX21hY2hpbmUgIT0gUExBVEZPUk1fUE9XRVJNQUMpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZwYXJ0LCAodm9pZCBfX3VzZXIqKWFyZywgc2l6ZW9mKHBhcnQpKSAhPSAwKQogCQkJcmV0dXJuIC1FRkFVTFQ7CkBAIC00NTAsNyArNDQ5LDcgQEAKIAkgKiBpbiBvdXIgbnZyYW0sIGFzIEFwcGxlIGRlZmluZWQgcGFydGl0aW9ucyB1c2UgcHJldHR5IG11Y2gKIAkgKiBhbGwgb2YgdGhlIHNwYWNlCiAJICovCi0JaWYgKHN5c3RlbWNmZy0+cGxhdGZvcm0gPT0gUExBVEZPUk1fUE9XRVJNQUMpCisJaWYgKF9tYWNoaW5lID09IFBMQVRGT1JNX1BPV0VSTUFDKQogCQlyZXR1cm4gLUVOT1NQQzsKIAogCS8qIHNlZSBpZiB3ZSBoYXZlIGFuIE9TIHBhcnRpdGlvbiB0aGF0IG1lZXRzIG91ciBuZWVkcy4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL3BjaS5jIGIvYXJjaC9wcGM2NC9rZXJuZWwvcGNpLmMKaW5kZXggMzAyNDdmZi4uM2NlZjFiOCAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9rZXJuZWwvcGNpLmMKKysrIGIvYXJjaC9wcGM2NC9rZXJuZWwvcGNpLmMKQEAgLTU0OCw2ICs1NDgsMTEgQEAKIAlpZiAocHBjNjRfaXNhYnJpZGdlX2RldiAhPSBOVUxMKQogCQlwcmludGsoIklTQSBicmlkZ2UgYXQgJXNcbiIsIHBjaV9uYW1lKHBwYzY0X2lzYWJyaWRnZV9kZXYpKTsKIAorI2lmZGVmIENPTkZJR19QUENfTVVMVElQTEFURk9STQorCS8qIG1hcCBpbiBQQ0kgSS9PIHNwYWNlICovCisJcGhic19yZW1hcF9pbygpOworI2VuZGlmCisKIAlwcmludGsoIlBDSTogUHJvYmluZyBQQ0kgaGFyZHdhcmUgZG9uZVxuIik7CiAKIAlyZXR1cm4gMDsKQEAgLTEyNzcsMTIgKzEyODIsOSBAQAogCSAqIEc1IG1hY2hpbmVzLi4uIFNvIHdoZW4gc29tZXRoaW5nIGFza3MgZm9yIGJ1cyAwIGlvIGJhc2UKIAkgKiAoYnVzIDAgaXMgSFQgcm9vdCksIHdlIHJldHVybiB0aGUgQUdQIG9uZSBpbnN0ZWFkLgogCSAqLwotI2lmZGVmIENPTkZJR19QUENfUE1BQwotCWlmIChzeXN0ZW1jZmctPnBsYXRmb3JtID09IFBMQVRGT1JNX1BPV0VSTUFDICYmCi0JICAgIG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiTWFjUklTQzQiKSkKKwlpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJNYWNSSVNDNCIpKQogCQlpZiAoaW5fYnVzID09IDApCiAJCQlpbl9idXMgPSAweGYwOwotI2VuZGlmIC8qIENPTkZJR19QUENfUE1BQyAqLwogCiAJLyogVGhhdCBzeXNjYWxsIGlzbid0IHF1aXRlIGNvbXBhdGlibGUgd2l0aCBQQ0kgZG9tYWlucywgYnV0IGl0J3MKIAkgKiB1c2VkIG9uIHByZS1kb21haW5zIHNldHVwLiBXZSByZXR1cm4gdGhlIGZpcnN0IG1hdGNoCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC9wY2lfZG4uYyBiL2FyY2gvcHBjNjQva2VybmVsL3BjaV9kbi5jCmluZGV4IDFhNDQzYTcuLjEyYzRjOWUgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQva2VybmVsL3BjaV9kbi5jCisrKyBiL2FyY2gvcHBjNjQva2VybmVsL3BjaV9kbi5jCkBAIC00Myw3ICs0Myw3IEBACiAJdTMyICpyZWdzOwogCXN0cnVjdCBwY2lfZG4gKnBkbjsKIAotCWlmIChwaGItPmlzX2R5bmFtaWMpCisJaWYgKG1lbV9pbml0X2RvbmUpCiAJCXBkbiA9IGttYWxsb2Moc2l6ZW9mKCpwZG4pLCBHRlBfS0VSTkVMKTsKIAllbHNlCiAJCXBkbiA9IGFsbG9jX2Jvb3RtZW0oc2l6ZW9mKCpwZG4pKTsKQEAgLTEyMCw2ICsxMjAsMTQgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAorLyoqIAorICogcGNpX2RldnNfcGhiX2luaXRfZHluYW1pYyAtIHNldHVwIHBjaSBkZXZpY2VzIHVuZGVyIHRoaXMgUEhCCisgKiBwaGI6IHBjaS10by1ob3N0IGJyaWRnZSAodG9wLWxldmVsIGJyaWRnZSBjb25uZWN0aW5nIHRvIGNwdSkKKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGJvdGggZHVyaW5nIGJvb3QsIChiZWZvcmUgdGhlIG1lbW9yeQorICogc3Vic3lzdGVtIGlzIHNldCB1cCwgYmVmb3JlIGttYWxsb2MgaXMgdmFsaWQpIGFuZCBkdXJpbmcgdGhlIAorICogZHluYW1pYyBscGFyIG9wZXJhdGlvbiBvZiBhZGRpbmcgYSBQSEIgdG8gYSBydW5uaW5nIHN5c3RlbS4KKyAqLwogdm9pZCBfX2RldmluaXQgcGNpX2RldnNfcGhiX2luaXRfZHluYW1pYyhzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKnBoYikKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKiBkbiA9IChzdHJ1Y3QgZGV2aWNlX25vZGUgKikgcGhiLT5hcmNoX2RhdGE7CkBAIC0yMDEsOSArMjA5LDE0IEBACiAJLm5vdGlmaWVyX2NhbGwgPSBwY2lfZG5fcmVjb25maWdfbm90aWZpZXIsCiB9OwogCi0vKgotICogQWN0dWFsbHkgaW5pdGlhbGl6ZSB0aGUgcGhicy4KLSAqIFRoZSBidXN3YWxrIG9uIHRoaXMgcGhiIGhhcyBub3QgaGFwcGVuZWQgeWV0LgorLyoqIAorICogcGNpX2RldnNfcGhiX2luaXQgLSBJbml0aWFsaXplIHBoYnMgYW5kIHBjaSBkZXZzIHVuZGVyIHRoZW0uCisgKiAKKyAqIFRoaXMgcm91dGluZSB3YWxrcyBvdmVyIGFsbCBwaGIncyAocGNpLWhvc3QgYnJpZGdlcykgb24gdGhlCisgKiBzeXN0ZW0sIGFuZCBzZXRzIHVwIGFzc29ydGVkIHBjaS1yZWxhdGVkIHN0cnVjdHVyZXMgCisgKiAoaW5jbHVkaW5nIHBjaSBpbmZvIGluIHRoZSBkZXZpY2Ugbm9kZSBzdHJ1Y3RzKSBmb3IgZWFjaAorICogcGNpIGRldmljZSBmb3VuZCB1bmRlcm5lYXRoLiAgVGhpcyByb3V0aW5lIHJ1bnMgb25jZSwKKyAqIGVhcmx5IGluIHRoZSBib290IHNlcXVlbmNlLgogICovCiB2b2lkIF9faW5pdCBwY2lfZGV2c19waGJfaW5pdCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvcHJvbS5jIGIvYXJjaC9wcGM2NC9rZXJuZWwvcHJvbS5jCmluZGV4IDM0MDJmYmUuLmZiYWQyYzMgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQva2VybmVsL3Byb20uYworKysgYi9hcmNoL3BwYzY0L2tlcm5lbC9wcm9tLmMKQEAgLTMxOCw3ICszMTgsNyBAQAogCQl9CiAKIAkJLyogV2Ugb2Zmc2V0IGlycSBudW1iZXJzIGZvciB0aGUgdTMgTVBJQyBieSAxMjggaW4gUG93ZXJNYWMgKi8KLQkJaWYgKHN5c3RlbWNmZy0+cGxhdGZvcm0gPT0gUExBVEZPUk1fUE9XRVJNQUMgJiYgaWMgJiYgaWMtPnBhcmVudCkgeworCQlpZiAoX21hY2hpbmUgPT0gUExBVEZPUk1fUE9XRVJNQUMgJiYgaWMgJiYgaWMtPnBhcmVudCkgewogCQkJY2hhciAqbmFtZSA9IGdldF9wcm9wZXJ0eShpYy0+cGFyZW50LCAibmFtZSIsIE5VTEwpOwogCQkJaWYgKG5hbWUgJiYgIXN0cmNtcChuYW1lLCAidTMiKSkKIAkJCQlucC0+aW50cnNbaW50cmNvdW50XS5saW5lICs9IDEyODsKQEAgLTEwNjUsNyArMTA2NSw3IEBACiAJcHJvcCA9ICh1MzIgKilvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJsaW51eCxwbGF0Zm9ybSIsIE5VTEwpOwogCWlmIChwcm9wID09IE5VTEwpCiAJCXJldHVybiAwOwotCXN5c3RlbWNmZy0+cGxhdGZvcm0gPSAqcHJvcDsKKwlfbWFjaGluZSA9ICpwcm9wOwogCiAJLyogY2hlY2sgaWYgaW9tbXUgaXMgZm9yY2VkIG9uIG9yIG9mZiAqLwogCWlmIChvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJsaW51eCxpb21tdS1vZmYiLCBOVUxMKSAhPSBOVUxMKQpAQCAtMTIzMCwxMSArMTIzMCw4IEBACiAJb2Zfc2Nhbl9mbGF0X2R0KGVhcmx5X2luaXRfZHRfc2Nhbl9tZW1vcnksIE5VTEwpOwogCWxtYl9lbmZvcmNlX21lbW9yeV9saW1pdChtZW1vcnlfbGltaXQpOwogCWxtYl9hbmFseXplKCk7Ci0Jc3lzdGVtY2ZnLT5waHlzaWNhbE1lbW9yeVNpemUgPSBsbWJfcGh5c19tZW1fc2l6ZSgpOwogCWxtYl9yZXNlcnZlKDAsIF9fcGEoa2xpbWl0KSk7CiAKLQlEQkcoIlBoeXMuIG1lbTogJWx4XG4iLCBzeXN0ZW1jZmctPnBoeXNpY2FsTWVtb3J5U2l6ZSk7Ci0KIAkvKiBSZXNlcnZlIExNQiByZWdpb25zIHVzZWQgYnkga2VybmVsLCBpbml0cmQsIGR0LCBldGMuLi4gKi8KIAllYXJseV9yZXNlcnZlX21lbSgpOwogCkBAIC0xNzUzLDcgKzE3NTAsNyBAQAogCS8qIFdlIGRvbid0IHN1cHBvcnQgdGhhdCBmdW5jdGlvbiBvbiBQb3dlck1hYywgYXQgbGVhc3QKIAkgKiBub3QgeWV0CiAJICovCi0JaWYgKHN5c3RlbWNmZy0+cGxhdGZvcm0gPT0gUExBVEZPUk1fUE9XRVJNQUMpCisJaWYgKF9tYWNoaW5lID09IFBMQVRGT1JNX1BPV0VSTUFDKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCS8qIGZpeCB1cCBuZXcgbm9kZSdzIGxpbnV4X3BoYW5kbGUgZmllbGQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL3Byb21faW5pdC5jIGIvYXJjaC9wcGM2NC9rZXJuZWwvcHJvbV9pbml0LmMKaW5kZXggZTRjODgwZGEuLjYzNzVmNDAgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQva2VybmVsL3Byb21faW5pdC5jCisrKyBiL2FyY2gvcHBjNjQva2VybmVsL3Byb21faW5pdC5jCkBAIC0xOTM0LDcgKzE5MzQsOCBAQAogCS8qCiAJICogT24gcFNlcmllcywgaW5mb3JtIHRoZSBmaXJtd2FyZSBhYm91dCBvdXIgY2FwYWJpbGl0aWVzCiAJICovCi0JaWYgKFJFTE9DKG9mX3BsYXRmb3JtKSAmIFBMQVRGT1JNX1BTRVJJRVMpCisJaWYgKFJFTE9DKG9mX3BsYXRmb3JtKSA9PSBQTEFURk9STV9QU0VSSUVTIHx8CisJICAgIFJFTE9DKG9mX3BsYXRmb3JtKSA9PSBQTEFURk9STV9QU0VSSUVTX0xQQVIpCiAJCXByb21fc2VuZF9jYXBhYmlsaXRpZXMoKTsKIAogCS8qCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC92ZHNvLmMgYi9hcmNoL3BwYzY0L2tlcm5lbC92ZHNvLmMKaW5kZXggNGFhY2Y1Mi4uMWJiYWNhYyAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9rZXJuZWwvdmRzby5jCisrKyBiL2FyY2gvcHBjNjQva2VybmVsL3Zkc28uYwpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CiAjaW5jbHVkZSA8YXNtL2NwdXRhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbWNmZy5oPgogI2luY2x1ZGUgPGFzbS92ZHNvLmg+CiAKICN1bmRlZiBERUJVRwpAQCAtMTc5LDcgKzE4MCw3IEBACiAJICogTGFzdCBwYWdlIGlzIHN5c3RlbWNmZy4KIAkgKi8KIAlpZiAoKHZtYS0+dm1fZW5kIC0gYWRkcmVzcykgPD0gUEFHRV9TSVpFKQotCQlwZyA9IHZpcnRfdG9fcGFnZShzeXN0ZW1jZmcpOworCQlwZyA9IHZpcnRfdG9fcGFnZShfc3lzdGVtY2ZnKTsKIAllbHNlCiAJCXBnID0gdmlydF90b19wYWdlKHZiYXNlICsgb2Zmc2V0KTsKIApAQCAtNjA0LDcgKzYwNSw3IEBACiAJCWdldF9wYWdlKHBnKTsKIAl9CiAKLQlnZXRfcGFnZSh2aXJ0X3RvX3BhZ2Uoc3lzdGVtY2ZnKSk7CisJZ2V0X3BhZ2UodmlydF90b19wYWdlKF9zeXN0ZW1jZmcpKTsKIH0KIAogaW50IGluX2dhdGVfYXJlYV9ub190YXNrKHVuc2lnbmVkIGxvbmcgYWRkcikKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL3Zkc28zMi9nZXR0aW1lb2ZkYXkuUyBiL2FyY2gvcHBjNjQva2VybmVsL3Zkc28zMi9nZXR0aW1lb2ZkYXkuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTI0M2MxZC4uMDAwMDAwMAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC92ZHNvMzIvZ2V0dGltZW9mZGF5LlMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDAgKzAsMCBAQAotLyoKLSAqIFVzZXJsYW5kIGltcGxlbWVudGF0aW9uIG9mIGdldHRpbWVvZmRheSgpIGZvciAzMiBiaXRzIHByb2Nlc3NlcyBpbiBhCi0gKiBwcGM2NCBrZXJuZWwgZm9yIHVzZSBpbiB0aGUgdkRTTwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNCBCZW5qYW1pbiBIZXJyZW5zY2htdWlkdCAoYmVuaEBrZXJuZWwuY3Jhc2hpbmcub3JnKSwgSUJNIENvcnAuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgotICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgotI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KLSNpbmNsdWRlIDxhc20vcHBjX2FzbS5oPgotI2luY2x1ZGUgPGFzbS92ZHNvLmg+Ci0jaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+Ci0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotCi0JLnRleHQKLS8qCi0gKiBFeGFjdCBwcm90b3R5cGUgb2YgZ2V0dGltZW9mZGF5Ci0gKgotICogaW50IF9fa2VybmVsX2dldHRpbWVvZmRheShzdHJ1Y3QgdGltZXZhbCAqdHYsIHN0cnVjdCB0aW1lem9uZSAqdHopOwotICoKLSAqLwotVl9GVU5DVElPTl9CRUdJTihfX2tlcm5lbF9nZXR0aW1lb2ZkYXkpCi0gIC5jZmlfc3RhcnRwcm9jCi0JbWZscglyMTIKLSAgLmNmaV9yZWdpc3RlciBscixyMTIKLQotCW1yCXIxMCxyMwkJCS8qIHIxMCBzYXZlcyB0diAqLwotCW1yCXIxMSxyNAkJCS8qIHIxMSBzYXZlcyB0eiAqLwotCWJsCV9fZ2V0X2RhdGFwYWdlQGxvY2FsCS8qIGdldCBkYXRhIHBhZ2UgKi8KLQltcglyOSwgcjMJCQkvKiBkYXRhcGFnZSBwdHIgaW4gcjkgKi8KLQlibAlfX2RvX2dldF94c2VjQGxvY2FsCS8qIGdldCB4c2VjIGZyb20gdGIgJiBrZXJuZWwgKi8KLQlibmUtCTJmCQkJLyogb3V0IG9mIGxpbmUgLT4gZG8gc3lzY2FsbCAqLwotCi0JLyogc2Vjb25kcyBhcmUgeHNlYyA+PiAyMCAqLwotCXJsd2lubQlyNSxyNCwxMiwyMCwzMQotCXJsd2ltaQlyNSxyMywxMiwwLDE5Ci0Jc3R3CXI1LFRWQUwzMl9UVl9TRUMocjEwKQotCi0JLyogZ2V0IHJlbWFpbmluZyB4c2VjIGFuZCBjb252ZXJ0IHRvIHVzZWMuIHdlIHNjYWxlCi0JICogdXAgcmVtYWluaW5nIHhzZWMgYnkgMTIgYml0cyBhbmQgZ2V0IHRoZSB0b3AgMzIgYml0cwotCSAqIG9mIHRoZSBtdWx0aXBsaWNhdGlvbgotCSAqLwotCXJsd2lubQlyNSxyNCwxMiwwLDE5Ci0JbGlzCXI2LDEwMDAwMDBAaAotCW9yaQlyNixyNiwxMDAwMDAwQGwKLQltdWxod3UJcjUscjUscjYKLQlzdHcJcjUsVFZBTDMyX1RWX1VTRUMocjEwKQotCi0JY21wbGkJY3IwLHIxMSwwCQkvKiBjaGVjayBpZiB0eiBpcyBOVUxMICovCi0JYmVxCTFmCi0JbHd6CXI0LENGR19UWl9NSU5VVEVXRVNUKHI5KS8qIGZpbGwgdHogKi8KLQlsd3oJcjUsQ0ZHX1RaX0RTVFRJTUUocjkpCi0Jc3R3CXI0LFRaT05FX1RaX01JTldFU1QocjExKQotCXN0dwlyNSxUWk9ORV9UWl9EU1RUSU1FKHIxMSkKLQotMToJbXRscglyMTIKLQlsaQlyMywwCi0JYmxyCi0KLTI6CW1yCXIzLHIxMAotCW1yCXI0LHIxMQotCWxpCXIwLF9fTlJfZ2V0dGltZW9mZGF5Ci0Jc2MKLQliCTFiCi0gIC5jZmlfZW5kcHJvYwotVl9GVU5DVElPTl9FTkQoX19rZXJuZWxfZ2V0dGltZW9mZGF5KQotCi0vKgotICogVGhpcyBpcyB0aGUgY29yZSBvZiBnZXR0aW1lb2ZkYXkoKSwgaXQgcmV0dXJucyB0aGUgeHNlYwotICogdmFsdWUgaW4gcjMgJiByNCBhbmQgZXhwZWN0cyB0aGUgZGF0YXBhZ2UgcHRyIChub24gY2xvYmJlcmVkKQotICogaW4gcjkuIGNsb2JiZXJzIHIwLHI0LHI1LHI2LHI3LHI4Ci0qLwotX19kb19nZXRfeHNlYzoKLSAgLmNmaV9zdGFydHByb2MKLQkvKiBDaGVjayBmb3IgdXBkYXRlIGNvdW50ICYgbG9hZCB2YWx1ZXMuIFdlIHVzZSB0aGUgbG93Ci0JICogb3JkZXIgMzIgYml0cyBvZiB0aGUgdXBkYXRlIGNvdW50Ci0JICovCi0xOglsd3oJcjgsKENGR19UQl9VUERBVEVfQ09VTlQrNCkocjkpCi0JYW5kaS4JcjAscjgsMQkJCS8qIHBlbmRpbmcgdXBkYXRlID8gbG9vcCAqLwotCWJuZS0JMWIKLQl4b3IJcjAscjgscjgJCS8qIGNyZWF0ZSBkZXBlbmRlbmN5ICovCi0JYWRkCXI5LHI5LHIwCi0KLQkvKiBMb2FkIG9yaWcgc3RhbXAgKG9mZnNldCB0byBUQikgKi8KLQlsd3oJcjUsQ0ZHX1RCX09SSUdfU1RBTVAocjkpCi0JbHd6CXI2LChDRkdfVEJfT1JJR19TVEFNUCs0KShyOSkKLQotCS8qIEdldCBhIHN0YWJsZSBUQiB2YWx1ZSAqLwotMjoJbWZ0YnUJcjMKLQltZnRibAlyNAotCW1mdGJ1CXIwCi0JY21wbAljcjAscjMscjAKLQlibmUtCTJiCi0KLQkvKiBTdWJzdHJhY3QgdGIgb3JpZyBzdGFtcC4gSWYgdGhlIGhpZ2ggcGFydCBpcyBub24temVybywgd2UganVtcCB0byB0aGUKLQkgKiBzbG93IHBhdGggd2hpY2ggY2FsbCB0aGUgc3lzY2FsbC4gSWYgaXQncyBvaywgdGhlbiB3ZSBoYXZlIG91ciAzMiBiaXRzCi0JICogdGJfdGlja3MgdmFsdWUgaW4gcjcKLQkgKi8KLQlzdWJmYwlyNyxyNixyNAotCXN1YmZlLglyMCxyNSxyMwotCWJuZS0JM2YKLQotCS8qIExvYWQgc2NhbGUgZmFjdG9yICYgZG8gbXVsdGlwbGljYXRpb24gKi8KLQlsd3oJcjUsQ0ZHX1RCX1RPX1hTKHI5KQkvKiBsb2FkIHZhbHVlcyAqLwotCWx3eglyNiwoQ0ZHX1RCX1RPX1hTKzQpKHI5KQotCW11bGh3dQlyNCxyNyxyNQotCW11bGh3dQlyNixyNyxyNgotCW11bGx3CXIwLHI3LHI1Ci0JYWRkYwlyNixyNixyMAotCi0JLyogQXQgdGhpcyBwb2ludCwgd2UgaGF2ZSB0aGUgc2NhbGVkIHhzZWMgdmFsdWUgaW4gcjQgKyBYRVI6Q0EKLQkgKiB3ZSBsb2FkICYgYWRkIHRoZSBzdGFtcCBzaW5jZSBlcG9jaAotCSAqLwotCWx3eglyNSxDRkdfU1RBTVBfWFNFQyhyOSkKLQlsd3oJcjYsKENGR19TVEFNUF9YU0VDKzQpKHI5KQotCWFkZGUJcjQscjQscjYKLQlhZGR6ZQlyMyxyNQotCi0JLyogV2Ugbm93IGhhdmUgb3VyIHJlc3VsdCBpbiByMyxyNC4gV2UgY3JlYXRlIGEgZmFrZSBkZXBlbmRlbmN5Ci0JICogb24gdGhhdCByZXN1bHQgYW5kIHJlLWNoZWNrIHRoZSBjb3VudGVyCi0JICovCi0JeG9yCXIwLHI0LHI0Ci0JYWRkCXI5LHI5LHIwCi0JbHd6CXIwLChDRkdfVEJfVVBEQVRFX0NPVU5UKzQpKHI5KQotICAgICAgICBjbXBsICAgIGNyMCxyOCxyMAkJLyogY2hlY2sgaWYgdXBkYXRlZCAqLwotCWJuZS0JMWIKLQotCS8qIFdhcm5pbmcgISBUaGUgY2FsbGVyIGV4cGVjdHMgQ1I6RVEgdG8gYmUgc2V0IHRvIGluZGljYXRlIGEKLQkgKiBzdWNjZXNzZnVsIGNhbGN1bGF0aW9uIChzbyBpdCB3b24ndCBmYWxsYmFjayB0byB0aGUgc3lzY2FsbAotCSAqIG1ldGhvZCkuIFdlIGhhdmUgb3ZlcnJpZGVuIHRoYXQgQ1IgYml0IGluIHRoZSBjb3VudGVyIGNoZWNrLAotCSAqIGJ1dCBmb3J0dW5hdGVseSwgdGhlIGxvb3AgZXhpdCBjb25kaXRpb24gX2lzXyBDUjpFUSBzZXQsIHNvCi0JICogd2UgY2FuIGV4aXQgc2FmZWx5IGhlcmUuIElmIHlvdSBjaGFuZ2UgdGhpcyBjb2RlLCBiZSBjYXJlZnVsCi0JICogb2YgdGhhdCBzaWRlIGVmZmVjdC4KLQkgKi8KLTM6CWJscgotICAuY2ZpX2VuZHByb2MKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL3Zkc282NC9nZXR0aW1lb2ZkYXkuUyBiL2FyY2gvcHBjNjQva2VybmVsL3Zkc282NC9nZXR0aW1lb2ZkYXkuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjZkZjgwMi4uMDAwMDAwMAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC92ZHNvNjQvZ2V0dGltZW9mZGF5LlMKKysrIC9kZXYvbnVsbApAQCAtMSw5MSArMCwwIEBACi0vKgotICogVXNlcmxhbmQgaW1wbGVtZW50YXRpb24gb2YgZ2V0dGltZW9mZGF5KCkgZm9yIDY0IGJpdHMgcHJvY2Vzc2VzIGluIGEKLSAqIHBwYzY0IGtlcm5lbCBmb3IgdXNlIGluIHRoZSB2RFNPCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA0IEJlbmphbWluIEhlcnJlbnNjaG11aWR0IChiZW5oQGtlcm5lbC5jcmFzaGluZy5vcmcpLAotICogICAgICAgICAgICAgICAgICAgIElCTSBDb3JwLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KLSAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLSNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+Ci0jaW5jbHVkZSA8YXNtL3BwY19hc20uaD4KLSNpbmNsdWRlIDxhc20vdmRzby5oPgotI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgotCi0JLnRleHQKLS8qCi0gKiBFeGFjdCBwcm90b3R5cGUgb2YgZ2V0dGltZW9mZGF5Ci0gKgotICogaW50IF9fa2VybmVsX2dldHRpbWVvZmRheShzdHJ1Y3QgdGltZXZhbCAqdHYsIHN0cnVjdCB0aW1lem9uZSAqdHopOwotICoKLSAqLwotVl9GVU5DVElPTl9CRUdJTihfX2tlcm5lbF9nZXR0aW1lb2ZkYXkpCi0gIC5jZmlfc3RhcnRwcm9jCi0JbWZscglyMTIKLSAgLmNmaV9yZWdpc3RlciBscixyMTIKLQotCW1yCXIxMSxyMwkJCS8qIHIxMSBob2xkcyB0diAqLwotCW1yCXIxMCxyNAkJCS8qIHIxMCBob2xkcyB0eiAqLwotCWJsCVZfTE9DQUxfRlVOQyhfX2dldF9kYXRhcGFnZSkJCS8qIGdldCBkYXRhIHBhZ2UgKi8KLQlibAlWX0xPQ0FMX0ZVTkMoX19kb19nZXRfeHNlYykJCS8qIGdldCB4c2VjIGZyb20gdGIgJiBrZXJuZWwgKi8KLQlsaXMgICAgIHI3LDE1CQkJLyogcjcgPSAxMDAwMDAwID0gVVNFQ19QRVJfU0VDICovCi0Jb3JpICAgICByNyxyNywxNjk2MAotCXJsZGljbCAgcjUscjQsNDQsMjAJCS8qIHI1ID0gc2VjID0geHNlYyAvIFhTRUNfUEVSX1NFQyAqLwotCXJsZGljciAgcjYscjUsMjAsNDMJCS8qIHI2ID0gc2VjICogWFNFQ19QRVJfU0VDICovCi0Jc3RkCXI1LFRWQUw2NF9UVl9TRUMocjExKQkvKiBzdG9yZSBzZWMgaW4gdHYgKi8KLQlzdWJmCXIwLHI2LHI0CQkvKiByMCA9IHhzZWMgPSAoeHNlYyAtIHI2KSAqLwotCW11bGxkICAgcjAscjAscjcJCS8qIHVzZWMgPSAoeHNlYyAqIFVTRUNfUEVSX1NFQykgLyBYU0VDX1BFUl9TRUMgKi8KLQlybGRpY2wgIHIwLHIwLDQ0LDIwCi0JY21wbGRpCWNyMCxyMTAsMAkJLyogY2hlY2sgaWYgdHogaXMgTlVMTCAqLwotCXN0ZAlyMCxUVkFMNjRfVFZfVVNFQyhyMTEpCS8qIHN0b3JlIHVzZWMgaW4gdHYgKi8KLQliZXEJMWYKLQlsd3oJcjQsQ0ZHX1RaX01JTlVURVdFU1QocjMpLyogZmlsbCB0eiAqLwotCWx3eglyNSxDRkdfVFpfRFNUVElNRShyMykKLQlzdHcJcjQsVFpPTkVfVFpfTUlOV0VTVChyMTApCi0Jc3R3CXI1LFRaT05FX1RaX0RTVFRJTUUocjEwKQotMToJbXRscglyMTIKLQlsaQlyMywwCQkJLyogYWx3YXlzIHN1Y2Nlc3MgKi8KLQlibHIKLSAgLmNmaV9lbmRwcm9jCi1WX0ZVTkNUSU9OX0VORChfX2tlcm5lbF9nZXR0aW1lb2ZkYXkpCi0KLQotLyoKLSAqIFRoaXMgaXMgdGhlIGNvcmUgb2YgZ2V0dGltZW9mZGF5KCksIGl0IHJldHVybnMgdGhlIHhzZWMKLSAqIHZhbHVlIGluIHI0IGFuZCBleHBlY3RzIHRoZSBkYXRhcGFnZSBwdHIgKG5vbiBjbG9iYmVyZWQpCi0gKiBpbiByMy4gY2xvYmJlcnMgcjAscjQscjUscjYscjcscjgKLSovCi1WX0ZVTkNUSU9OX0JFR0lOKF9fZG9fZ2V0X3hzZWMpCi0gIC5jZmlfc3RhcnRwcm9jCi0JLyogY2hlY2sgZm9yIHVwZGF0ZSBjb3VudCAmIGxvYWQgdmFsdWVzICovCi0xOglsZAlyNyxDRkdfVEJfVVBEQVRFX0NPVU5UKHIzKQotCWFuZGkuCXIwLHI0LDEJCQkvKiBwZW5kaW5nIHVwZGF0ZSA/IGxvb3AgKi8KLQlibmUtCTFiCi0JeG9yCXIwLHI0LHI0CQkvKiBjcmVhdGUgZGVwZW5kZW5jeSAqLwotCWFkZAlyMyxyMyxyMAotCi0JLyogR2V0IFRCICYgb2Zmc2V0IGl0ICovCi0JbWZ0YglyOAotCWxkCXI5LENGR19UQl9PUklHX1NUQU1QKHIzKQotCXN1YmYJcjgscjkscjgKLQotCS8qIFNjYWxlIHJlc3VsdCAqLwotCWxkCXI1LENGR19UQl9UT19YUyhyMykKLQltdWxoZHUJcjgscjgscjUKLQotCS8qIEFkZCBzdGFtcCBzaW5jZSBlcG9jaCAqLwotCWxkCXI2LENGR19TVEFNUF9YU0VDKHIzKQotCWFkZAlyNCxyNixyOAotCi0JeG9yCXIwLHI0LHI0Ci0JYWRkCXIzLHIzLHIwCi0JbGQJcjAsQ0ZHX1RCX1VQREFURV9DT1VOVChyMykKLSAgICAgICAgY21wbGQgICBjcjAscjAscjcJCS8qIGNoZWNrIGlmIHVwZGF0ZWQgKi8KLQlibmUtCTFiCi0JYmxyCi0gIC5jZmlfZW5kcHJvYwotVl9GVU5DVElPTl9FTkQoX19kb19nZXRfeHNlYykKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9hcHBsZGF0YS9hcHBsZGF0YV9iYXNlLmMgYi9hcmNoL3MzOTAvYXBwbGRhdGEvYXBwbGRhdGFfYmFzZS5jCmluZGV4IGM5ZjJmNjAuLmRlZTZhYjU0IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvYXBwbGRhdGEvYXBwbGRhdGFfYmFzZS5jCisrKyBiL2FyY2gvczM5MC9hcHBsZGF0YS9hcHBsZGF0YV9iYXNlLmMKQEAgLTU5MiwxMiArNTkyLDE1IEBACiAgKi8KIHZvaWQgYXBwbGRhdGFfdW5yZWdpc3Rlcl9vcHMoc3RydWN0IGFwcGxkYXRhX29wcyAqb3BzKQogeworCXZvaWQgKnRhYmxlOwogCXNwaW5fbG9jaygmYXBwbGRhdGFfb3BzX2xvY2spOwotCXVucmVnaXN0ZXJfc3lzY3RsX3RhYmxlKG9wcy0+c3lzY3RsX2hlYWRlcik7CiAJbGlzdF9kZWwoJm9wcy0+bGlzdCk7Ci0Ja2ZyZWUob3BzLT5jdGxfdGFibGUpOworCS8qIGF0IHRoYXQgcG9pbnQgYW55IGluY29taW5nIGFjY2VzcyB3aWxsIGZhaWwgKi8KKwl0YWJsZSA9IG9wcy0+Y3RsX3RhYmxlOwogCW9wcy0+Y3RsX3RhYmxlID0gTlVMTDsKIAlzcGluX3VubG9jaygmYXBwbGRhdGFfb3BzX2xvY2spOworCXVucmVnaXN0ZXJfc3lzY3RsX3RhYmxlKG9wcy0+c3lzY3RsX2hlYWRlcik7CisJa2ZyZWUodGFibGUpOwogCVBfSU5GTygiJXMtb3BzIHVucmVnaXN0ZXJlZCFcbiIsIG9wcy0+bmFtZSk7CiB9CiAvKioqKioqKioqKioqKioqKioqKioqKiBtb2R1bGUtb3BzIG1hbmFnZW1lbnQgPEVORD4gKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2RlYnVnLmMgYi9hcmNoL3MzOTAva2VybmVsL2RlYnVnLmMKaW5kZXggYmM1OTI4Mi4uODk2ZDM5ZCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9kZWJ1Zy5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvZGVidWcuYwpAQCAtNDg2LDcgKzQ4Niw3IEBACiAgKiAtIGdvdG8gbmV4dCBlbnRyeSBpbiBwX2luZm8KICAqLwogCi1leHRlcm4gaW5saW5lIGludAorc3RhdGljIGlubGluZSBpbnQKIGRlYnVnX25leHRfZW50cnkoZmlsZV9wcml2YXRlX2luZm9fdCAqcF9pbmZvKQogewogCWRlYnVnX2luZm9fdCAqaWQ7CkBAIC04MDAsNyArODAwLDcgQEAKICAqIC0gc2V0IGFjdGl2ZSBlbnRyeSB0byBuZXh0IGluIHRoZSByaW5nIGJ1ZmZlcgogICovCiAKLWV4dGVybiBpbmxpbmUgdm9pZAorc3RhdGljIGlubGluZSB2b2lkCiBwcm9jZWVkX2FjdGl2ZV9lbnRyeShkZWJ1Z19pbmZvX3QgKiBpZCkKIHsKIAlpZiAoKGlkLT5hY3RpdmVfZW50cmllc1tpZC0+YWN0aXZlX2FyZWFdICs9IGlkLT5lbnRyeV9zaXplKQpAQCAtODE3LDcgKzgxNyw3IEBACiAgKiAtIHNldCBhY3RpdmUgYXJlYSB0byBuZXh0IGluIHRoZSByaW5nIGJ1ZmZlcgogICovCiAKLWV4dGVybiBpbmxpbmUgdm9pZAorc3RhdGljIGlubGluZSB2b2lkCiBwcm9jZWVkX2FjdGl2ZV9hcmVhKGRlYnVnX2luZm9fdCAqIGlkKQogewogCWlkLT5hY3RpdmVfYXJlYSsrOwpAQCAtODI4LDcgKzgyOCw3IEBACiAgKiBnZXRfYWN0aXZlX2VudHJ5OgogICovCiAKLWV4dGVybiBpbmxpbmUgZGVidWdfZW50cnlfdCoKK3N0YXRpYyBpbmxpbmUgZGVidWdfZW50cnlfdCoKIGdldF9hY3RpdmVfZW50cnkoZGVidWdfaW5mb190ICogaWQpCiB7CiAJcmV0dXJuIChkZWJ1Z19lbnRyeV90ICopICgoKGNoYXIgKikgaWQtPmFyZWFzW2lkLT5hY3RpdmVfYXJlYV0KQEAgLTg0MSw3ICs4NDEsNyBAQAogICogLSBzZXQgdGltZXN0YW1wLCBjYWxsZXIgYWRkcmVzcywgY3B1IG51bWJlciBldGMuCiAgKi8KIAotZXh0ZXJuIGlubGluZSB2b2lkCitzdGF0aWMgaW5saW5lIHZvaWQKIGRlYnVnX2ZpbmlzaF9lbnRyeShkZWJ1Z19pbmZvX3QgKiBpZCwgZGVidWdfZW50cnlfdCogYWN0aXZlLCBpbnQgbGV2ZWwsCiAJCQlpbnQgZXhjZXB0aW9uKQogewpAQCAtOTcxLDcgKzk3MSw3IEBACiAgKiBjb3VudHMgYXJndW1lbnRzIGluIGZvcm1hdCBzdHJpbmcgZm9yIHNwcmludGYgdmlldwogICovCiAKLWV4dGVybiBpbmxpbmUgaW50CitzdGF0aWMgaW5saW5lIGludAogZGVidWdfY291bnRfbnVtYXJncyhjaGFyICpzdHJpbmcpCiB7CiAJaW50IG51bWFyZ3M9MDsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggOWYzZGZmNi4uNzhiNjRmZTUgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvcHJvY2Vzcy5jCkBAIC05OSwxNSArOTksMTUgQEAKIHsKIAlpbnQgY3B1LCByYzsKIAotCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0gICAgICAgIGlmIChuZWVkX3Jlc2NoZWQoKSkgewotCQlsb2NhbF9pcnFfZW5hYmxlKCk7Ci0gICAgICAgICAgICAgICAgc2NoZWR1bGUoKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQogCS8qIENQVSBpcyBnb2luZyBpZGxlLiAqLwogCWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJaWYgKG5lZWRfcmVzY2hlZCgpKSB7CisJCWxvY2FsX2lycV9lbmFibGUoKTsKKwkJcmV0dXJuOworCX0KKwogCXJjID0gbm90aWZpZXJfY2FsbF9jaGFpbigmaWRsZV9jaGFpbiwgQ1BVX0lETEUsICh2b2lkICopKGxvbmcpIGNwdSk7CiAJaWYgKHJjICE9IE5PVElGWV9PSyAmJiByYyAhPSBOT1RJRllfRE9ORSkKIAkJQlVHKCk7CkBAIC0xMjAsNyArMTIwLDcgQEAKIAlfX2N0bF9zZXRfYml0KDgsIDE1KTsKIAogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQotCWlmIChjcHVfaXNfb2ZmbGluZShzbXBfcHJvY2Vzc29yX2lkKCkpKQorCWlmIChjcHVfaXNfb2ZmbGluZShjcHUpKQogCQljcHVfZGllKCk7CiAjZW5kaWYKIApAQCAtMTM5LDggKzEzOSwxNCBAQAogCiB2b2lkIGNwdV9pZGxlKHZvaWQpCiB7Ci0JZm9yICg7OykKLQkJZGVmYXVsdF9pZGxlKCk7CisJZm9yICg7OykgeworCQl3aGlsZSAoIW5lZWRfcmVzY2hlZCgpKQorCQkJZGVmYXVsdF9pZGxlKCk7CisKKwkJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOworCQlzY2hlZHVsZSgpOworCQlwcmVlbXB0X2Rpc2FibGUoKTsKKwl9CiB9CiAKIHZvaWQgc2hvd19yZWdzKHN0cnVjdCBwdF9yZWdzICpyZWdzKQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9zbXAuYyBiL2FyY2gvczM5MC9rZXJuZWwvc21wLmMKaW5kZXggZTEzYzg3Yi4uNTg1NmIzZiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9zbXAuYworKysgYi9hcmNoL3MzOTAva2VybmVsL3NtcC5jCkBAIC01MzMsNiArNTMzLDcgQEAKIHsKICAgICAgICAgLyogU2V0dXAgdGhlIGNwdSAqLwogICAgICAgICBjcHVfaW5pdCgpOworCXByZWVtcHRfZGlzYWJsZSgpOwogICAgICAgICAvKiBpbml0IHBlciBDUFUgdGltZXIgKi8KICAgICAgICAgaW5pdF9jcHVfdGltZXIoKTsKICNpZmRlZiBDT05GSUdfVklSVF9USU1FUgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2ZhdWx0LmMgYi9hcmNoL3MzOTAvbW0vZmF1bHQuYwppbmRleCA2NGUzMmRhLi5mYjI2MDdjIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbW0vZmF1bHQuYworKysgYi9hcmNoL3MzOTAvbW0vZmF1bHQuYwpAQCAtMTYwLDcgKzE2MCw3IEBACiAgKiAgIDExICAgICAgIFBhZ2UgdHJhbnNsYXRpb24gICAgIC0+ICBOb3QgcHJlc2VudCAgICAgICAobnVsbGlmaWNhdGlvbikKICAqICAgM2IgICAgICAgUmVnaW9uIHRoaXJkIHRyYW5zLiAgLT4gIE5vdCBwcmVzZW50ICAgICAgIChudWxsaWZpY2F0aW9uKQogICovCi1leHRlcm4gaW5saW5lIHZvaWQKK3N0YXRpYyBpbmxpbmUgdm9pZAogZG9fZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGVycm9yX2NvZGUsIGludCBpc19wcm90ZWN0aW9uKQogewogICAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzazsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvc2gva2VybmVsL3Byb2Nlc3MuYwppbmRleCA2ZGNlOWQwLi5mZDRmMjQwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvcHJvY2Vzcy5jCkBAIC01MSwyOCArNTEsMjQgQEAKIAogRVhQT1JUX1NZTUJPTChlbmFibGVfaGx0KTsKIAotdm9pZCBkZWZhdWx0X2lkbGUodm9pZCkKK3ZvaWQgY3B1X2lkbGUodm9pZCkKIHsKIAkvKiBlbmRsZXNzIGlkbGUgbG9vcCB3aXRoIG5vIHByaW9yaXR5IGF0IGFsbCAqLwogCXdoaWxlICgxKSB7CiAJCWlmIChobHRfY291bnRlcikgewotCQkJd2hpbGUgKDEpCi0JCQkJaWYgKG5lZWRfcmVzY2hlZCgpKQotCQkJCQlicmVhazsKKwkJCXdoaWxlICghbmVlZF9yZXNjaGVkKCkpCisJCQkJY3B1X3JlbGF4KCk7CiAJCX0gZWxzZSB7CiAJCQl3aGlsZSAoIW5lZWRfcmVzY2hlZCgpKQogCQkJCWNwdV9zbGVlcCgpOwogCQl9CiAKKwkJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOwogCQlzY2hlZHVsZSgpOworCQlwcmVlbXB0X2Rpc2FibGUoKTsKIAl9CiB9CiAKLXZvaWQgY3B1X2lkbGUodm9pZCkKLXsKLQlkZWZhdWx0X2lkbGUoKTsKLX0KLQogdm9pZCBtYWNoaW5lX3Jlc3RhcnQoY2hhciAqIF9fdW51c2VkKQogewogCS8qIFNSLkJMPTEgYW5kIGludm9rZSBhZGRyZXNzIGVycm9yIHRvIGxldCBDUFUgcmVzZXQgKG1hbnVhbCByZXNldCkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3NtcC5jIGIvYXJjaC9zaC9rZXJuZWwvc21wLmMKaW5kZXggNWVjZWZjMC4uNTllNDliMSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvc21wLmMKQEAgLTExMiw3ICsxMTIsOSBAQAogCiBpbnQgc3RhcnRfc2Vjb25kYXJ5KHZvaWQgKnVudXNlZCkKIHsKLQl1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCXVuc2lnbmVkIGludCBjcHU7CisKKwljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAKIAlhdG9taWNfaW5jKCZpbml0X21tLm1tX2NvdW50KTsKIAljdXJyZW50LT5hY3RpdmVfbW0gPSAmaW5pdF9tbTsKQEAgLTEyMCw2ICsxMjIsNyBAQAogCXNtcF9zdG9yZV9jcHVfaW5mbyhjcHUpOwogCiAJX19zbXBfc2xhdmVfaW5pdChjcHUpOworCXByZWVtcHRfZGlzYWJsZSgpOwogCXBlcl9jcHVfdHJhcF9pbml0KCk7CiAJCiAJYXRvbWljX2luYygmY3B1c19ib290ZWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaDY0L2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL3NoNjQva2VybmVsL3Byb2Nlc3MuYwppbmRleCBlZmRlNDFjLi5iOTVkMDQxIDEwMDY0NAotLS0gYS9hcmNoL3NoNjQva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL3NoNjQva2VybmVsL3Byb2Nlc3MuYwpAQCAtMzA3LDIzICszMDcsMTkgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGhsdCh2b2lkKQogewotCWlmIChobHRfY291bnRlcikKLQkJcmV0dXJuOwotCiAJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzbGVlcCIgOiA6IDogIm1lbW9yeSIpOwogfQogCiAvKgogICogVGhlIGlkbGUgbG9vcCBvbiBhIHVuaXByb2Nlc3NvciBTSC4uCiAgKi8KLXZvaWQgZGVmYXVsdF9pZGxlKHZvaWQpCit2b2lkIGNwdV9pZGxlKHZvaWQpCiB7CiAJLyogZW5kbGVzcyBpZGxlIGxvb3Agd2l0aCBubyBwcmlvcml0eSBhdCBhbGwgKi8KIAl3aGlsZSAoMSkgewogCQlpZiAoaGx0X2NvdW50ZXIpIHsKLQkJCXdoaWxlICgxKQotCQkJCWlmIChuZWVkX3Jlc2NoZWQoKSkKLQkJCQkJYnJlYWs7CisJCQl3aGlsZSAoIW5lZWRfcmVzY2hlZCgpKQorCQkJCWNwdV9yZWxheCgpOwogCQl9IGVsc2UgewogCQkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAkJCXdoaWxlICghbmVlZF9yZXNjaGVkKCkpIHsKQEAgLTMzNCwxMyArMzMwLDExIEBACiAJCQl9CiAJCQlsb2NhbF9pcnFfZW5hYmxlKCk7CiAJCX0KKwkJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOwogCQlzY2hlZHVsZSgpOworCQlwcmVlbXB0X2Rpc2FibGUoKTsKIAl9Ci19CiAKLXZvaWQgY3B1X2lkbGUodm9pZCkKLXsKLQlkZWZhdWx0X2lkbGUoKTsKIH0KIAogdm9pZCBtYWNoaW5lX3Jlc3RhcnQoY2hhciAqIF9fdW51c2VkKQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvY3B1LmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9jcHUuYwppbmRleCA2YTRlYmM2Li5kN2JmYzYxIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9jcHUuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9jcHUuYwpAQCAtNzUsNyArNzUsNyBAQAogICB7IDksIDMsICJGdWppdHN1IG9yIFdlaXRlayBvbi1jaGlwIEZQVSJ9LAogfTsKIAotI2RlZmluZSBOU1BBUkNGUFUgIChzaXplb2YobGludXhfc3BhcmNfZnB1KS9zaXplb2Yoc3RydWN0IGNwdV9mcF9pbmZvKSkKKyNkZWZpbmUgTlNQQVJDRlBVICBBUlJBWV9TSVpFKGxpbnV4X3NwYXJjX2ZwdSkKIAogc3RydWN0IGNwdV9pdV9pbmZvIGxpbnV4X3NwYXJjX2NoaXBzW10gPSB7CiAgIC8qIFN1bjQvMTAwLCA0LzIwMCwgU0xDICovCkBAIC0xMjAsNyArMTIwLDcgQEAKICAgeyAweGYsIDAsICJVTktOT1dOIENQVS1WRU5ET1IvVFlQRSJ9LAogfTsKIAotI2RlZmluZSBOU1BBUkNDSElQUyAgKHNpemVvZihsaW51eF9zcGFyY19jaGlwcykvc2l6ZW9mKHN0cnVjdCBjcHVfaXVfaW5mbykpCisjZGVmaW5lIE5TUEFSQ0NISVBTICBBUlJBWV9TSVpFKGxpbnV4X3NwYXJjX2NoaXBzKQogCiBjaGFyICpzcGFyY19jcHVfdHlwZTsKIGNoYXIgKnNwYXJjX2ZwdV90eXBlOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvcGNpYy5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvcGNpYy5jCmluZGV4IDI1ZTMxZDUuLmNjY2ZjMTIgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3BjaWMuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9wY2ljLmMKQEAgLTE0Myw3ICsxNDMsNyBAQAogICogYXMgc2V2ZXJhbCBQUk9NcyBtYXkgYmUgaW5zdGFsbGVkIG9uIHRoZSBzYW1lIHBoeXNpY2FsIGJvYXJkLgogICovCiAjZGVmaW5lIFNOMkxfSU5JVChuYW1lLCBtYXApCVwKLSAgeyBuYW1lLCBtYXAsIHNpemVvZihtYXApL3NpemVvZihzdHJ1Y3QgcGNpY19jYTJpcnEpIH0KKyAgeyBuYW1lLCBtYXAsIEFSUkFZX1NJWkUobWFwKSB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpY19zbjJsaXN0IHBjaWNfa25vd25fc3lzbmFtZXNbXSA9IHsKIAlTTjJMX0lOSVQoIlNVTlcsSmF2YUVuZ2luZTEiLCBwY2ljX2lfamUxYSksCS8qIEpFMSwgUFJPTSAyLjMyICovCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggMjllNzJiNS4uZWE4NjQ3NCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3Byb2Nlc3MuYwpAQCAtNjcsMTMgKzY3LDYgQEAKIHN0cnVjdCB0YXNrX3N0cnVjdCAqbGFzdF90YXNrX3VzZWRfbWF0aCA9IE5VTEw7CiBzdHJ1Y3QgdGhyZWFkX2luZm8gKmN1cnJlbnRfc2V0W05SX0NQVVNdOwogCi0vKgotICogZGVmYXVsdF9pZGxlIGlzIG5ldyBpbiAyLjUuIFhYWCBSZXZpZXcsIGN1cnJlbnRseSBzdG9sZW4gZnJvbSBzcGFyYzY0LgotICovCi12b2lkIGRlZmF1bHRfaWRsZSh2b2lkKQotewotfQotCiAjaWZuZGVmIENPTkZJR19TTVAKIAogI2RlZmluZSBTVU40Q19GQVVMVF9ISUdIIDEwMApAQCAtOTIsMTIgKzg1LDExIEBACiAJCQlzdGF0aWMgdW5zaWduZWQgbG9uZyBmcHM7CiAJCQl1bnNpZ25lZCBsb25nIG5vdzsKIAkJCXVuc2lnbmVkIGxvbmcgZmF1bHRzOwotCQkJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCQkJZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3VuNGNfa2VybmVsX2ZhdWx0czsKIAkJCWV4dGVybiB2b2lkIHN1bjRjX2dyb3dfa2VybmVsX3Jpbmcodm9pZCk7CiAKLQkJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkJCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAJCQlub3cgPSBqaWZmaWVzOwogCQkJY291bnQgLT0gKG5vdyAtIGxhc3RfamlmZmllcyk7CiAJCQlsYXN0X2ppZmZpZXMgPSBub3c7CkBAIC0xMTMsMTQgKzEwNSwxOSBAQAogCQkJCQlzdW40Y19ncm93X2tlcm5lbF9yaW5nKCk7CiAJCQkJfQogCQkJfQotCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCQkJbG9jYWxfaXJxX2VuYWJsZSgpOwogCQl9CiAKLQkJd2hpbGUoKCFuZWVkX3Jlc2NoZWQoKSkgJiYgcG1faWRsZSkgewotCQkJKCpwbV9pZGxlKSgpOworCQlpZiAocG1faWRsZSkgeworCQkJd2hpbGUgKCFuZWVkX3Jlc2NoZWQoKSkKKwkJCQkoKnBtX2lkbGUpKCk7CisJCX0gZWxzZSB7CisJCQl3aGlsZSAoIW5lZWRfcmVzY2hlZCgpKQorCQkJCWNwdV9yZWxheCgpOwogCQl9Ci0KKwkJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOwogCQlzY2hlZHVsZSgpOworCQlwcmVlbXB0X2Rpc2FibGUoKTsKIAkJY2hlY2tfcGd0X2NhY2hlKCk7CiAJfQogfQpAQCAtMTMwLDEzICsxMjcsMTUgQEAKIC8qIFRoaXMgaXMgYmVpbmcgZXhlY3V0ZWQgaW4gdGFzayAwICd1c2VyIHNwYWNlJy4gKi8KIHZvaWQgY3B1X2lkbGUodm9pZCkKIHsKKyAgICAgICAgc2V0X3RocmVhZF9mbGFnKFRJRl9QT0xMSU5HX05SRkxBRyk7CiAJLyogZW5kbGVzcyBpZGxlIGxvb3Agd2l0aCBubyBwcmlvcml0eSBhdCBhbGwgKi8KIAl3aGlsZSgxKSB7Ci0JCWlmKG5lZWRfcmVzY2hlZCgpKSB7Ci0JCQlzY2hlZHVsZSgpOwotCQkJY2hlY2tfcGd0X2NhY2hlKCk7Ci0JCX0KLQkJYmFycmllcigpOyAvKiBvciBlbHNlIGdjYyBvcHRpbWl6ZXMuLi4gKi8KKwkJd2hpbGUgKCFuZWVkX3Jlc2NoZWQoKSkKKwkJCWNwdV9yZWxheCgpOworCQlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7CisJCXNjaGVkdWxlKCk7CisJCXByZWVtcHRfZGlzYWJsZSgpOworCQljaGVja19wZ3RfY2FjaGUoKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvbW0vZmF1bHQuYyBiL2FyY2gvc3BhcmMvbW0vZmF1bHQuYwppbmRleCAyYmJkNTNmLi45ZWVlZDMzIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL21tL2ZhdWx0LmMKKysrIGIvYXJjaC9zcGFyYy9tbS9mYXVsdC5jCkBAIC0zMyw4ICszMyw2IEBACiAjaW5jbHVkZSA8YXNtL2tkZWJ1Zy5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKLSNkZWZpbmUgRUxFTUVOVFMoYXJyKSAoc2l6ZW9mIChhcnIpL3NpemVvZiAoYXJyWzBdKSkKLQogZXh0ZXJuIGludCBwcm9tX25vZGVfcm9vdDsKIAogLyogQXQgYm9vdCB0aW1lIHdlIGRldGVybWluZSB0aGVzZSB0d28gdmFsdWVzIG5lY2Vzc2FyeSBmb3Igc2V0dGluZwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9jcHUuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvY3B1LmMKaW5kZXggNzdlZjVkZi4uMDBlZWQ4OCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9jcHUuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL2NwdS5jCkBAIC00Myw3ICs0Myw3IEBACiAgIHsgMHgzZSwgMHgyMiwgMCwgIlVsdHJhU3BhcmMgSUlJaSsgaW50ZWdyYXRlZCBGUFUifSwKIH07CiAKLSNkZWZpbmUgTlNQQVJDRlBVICAoc2l6ZW9mKGxpbnV4X3NwYXJjX2ZwdSkvc2l6ZW9mKHN0cnVjdCBjcHVfZnBfaW5mbykpCisjZGVmaW5lIE5TUEFSQ0ZQVSAgQVJSQVlfU0laRShsaW51eF9zcGFyY19mcHUpCiAKIHN0cnVjdCBjcHVfaXVfaW5mbyBsaW51eF9zcGFyY19jaGlwc1tdID0gewogICB7IDB4MTcsIDB4MTAsICJUSSBVbHRyYVNwYXJjIEkgICAoU3BpdEZpcmUpIn0sCkBAIC01OSw3ICs1OSw3IEBACiAgIHsgMHgzZSwgMHgyMiwgIlRJIFVsdHJhU3BhcmMgSUlJaSsgKFNlcnJhbm8pIn0sCiB9OwogCi0jZGVmaW5lIE5TUEFSQ0NISVBTICAoc2l6ZW9mKGxpbnV4X3NwYXJjX2NoaXBzKS9zaXplb2Yoc3RydWN0IGNwdV9pdV9pbmZvKSkKKyNkZWZpbmUgTlNQQVJDQ0hJUFMgIEFSUkFZX1NJWkUobGludXhfc3BhcmNfY2hpcHMpCiAKIGNoYXIgKnNwYXJjX2NwdV90eXBlID0gImNwdS1vb3BzIjsKIGNoYXIgKnNwYXJjX2ZwdV90eXBlID0gImZwdS1vb3BzIjsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvaW9jdGwzMi5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9pb2N0bDMyLmMKaW5kZXggOTJlMjYzMC4uZTYyMjE0MyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9pb2N0bDMyLmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9pb2N0bDMyLmMKQEAgLTkyLDEwICs5Miw4IEBACiAJcmV0dXJuIHN5c19pb2N0bCAoZmQsIEZCSU9TQ1VSU09SLCAodW5zaWduZWQgbG9uZylwKTsKIH0KIAotdHlwZWRlZiBpbnQgKCogaW9jdGwzMl9oYW5kbGVyX3QpKHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nLCBzdHJ1Y3QgZmlsZSAqKTsKLQogI2RlZmluZSBDT01QQVRJQkxFX0lPQ1RMKGNtZCkJCUhBTkRMRV9JT0NUTCgoY21kKSxzeXNfaW9jdGwpCi0jZGVmaW5lIEhBTkRMRV9JT0NUTChjbWQsaGFuZGxlcikJeyAoY21kKSwgKGlvY3RsMzJfaGFuZGxlcl90KShoYW5kbGVyKSwgTlVMTCB9LAorI2RlZmluZSBIQU5ETEVfSU9DVEwoY21kLGhhbmRsZXIpCXsgKGNtZCksIChpb2N0bF90cmFuc19oYW5kbGVyX3QpKGhhbmRsZXIpLCBOVUxMIH0sCiAjZGVmaW5lIElPQ1RMX1RBQkxFX1NUQVJUIFwKIAlzdHJ1Y3QgaW9jdGxfdHJhbnMgaW9jdGxfc3RhcnRbXSA9IHsKICNkZWZpbmUgSU9DVExfVEFCTEVfRU5EIFwKQEAgLTExNiw4ICsxMTQsNiBAQAogQ09NUEFUSUJMRV9JT0NUTChGQklPR0NVUk1BWCkKIC8qIExpdHRsZSBrICovCiAvKiBMaXR0bGUgdiwgdGhlIHZpZGVvNGxpbnV4IGlvY3RscyAqLwotQ09NUEFUSUJMRV9JT0NUTChfSU9SKCdwJywgMjAsIGludFs3XSkpIC8qIFJUQ0dFVCAqLwotQ09NUEFUSUJMRV9JT0NUTChfSU9XKCdwJywgMjEsIGludFs3XSkpIC8qIFJUQ1NFVCAqLwogLyogQW5kIHRoZXNlIGlvY3RscyBuZWVkIHRyYW5zbGF0aW9uICovCiAvKiBOb3RlIFNJT0NSVE1TRyBpcyBubyBsb25nZXIsIHNvIHRoaXMgaXMgc2FmZSBhbmQgKiB0aGUgdXNlciB3b3VsZCBoYXZlIHNlZW4ganVzdCBhbiAtRUlOVkFMIGFueXdheXMuICovCiBIQU5ETEVfSU9DVEwoRkJJT1BVVENNQVAzMiwgZmJpb2dldHB1dGNtYXApCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDdkMTBiMDMuLjAyZjlkZWMgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvcHJvY2Vzcy5jCkBAIC03NCw3ICs3NCw5IEBACiAJCXdoaWxlICghbmVlZF9yZXNjaGVkKCkpCiAJCQliYXJyaWVyKCk7CiAKKwkJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOwogCQlzY2hlZHVsZSgpOworCQlwcmVlbXB0X2Rpc2FibGUoKTsKIAkJY2hlY2tfcGd0X2NhY2hlKCk7CiAJfQogfQpAQCAtODMsMjEgKzg1LDMxIEBACiAKIC8qCiAgKiB0aGUgaWRsZSBsb29wIG9uIGEgVWx0cmFNdWx0aVBlbmd1aW4uLi4KKyAqCisgKiBUSUZfUE9MTElOR19OUkZMQUcgaXMgc2V0IGJlY2F1c2Ugd2UgZG8gbm90IHNsZWVwIHRoZSBjcHUKKyAqIGluc2lkZSBvZiB0aGUgaWRsZXIgdGFzaywgc28gYW4gaW50ZXJydXB0IGlzIG5vdCBuZWVkZWQKKyAqIHRvIGdldCBhIGNsZWFuIGZhc3QgcmVzcG9uc2UuCisgKgorICogWFhYIFJldmVyaWZ5IHRoaXMgYXNzdW1wdGlvbi4uLiAtRGF2ZU0KKyAqCisgKiBBZGRlbmR1bTogV2UgZG8gd2FudCBpdCB0byBkbyBzb21ldGhpbmcgZm9yIHRoZSBzaWduYWwKKyAqICAgICAgICAgICBkZWxpdmVyeSBjYXNlLCB3ZSBkZXRlY3QgdGhhdCBieSBqdXN0IHNlZWluZworICogICAgICAgICAgIGlmIHdlIGFyZSB0cnlpbmcgdG8gc2VuZCB0aGlzIHRvIGFuIGlkbGVyIG9yIG5vdC4KICAqLwotI2RlZmluZSBpZGxlX21lX2hhcmRlcigpCShjcHVfZGF0YShzbXBfcHJvY2Vzc29yX2lkKCkpLmlkbGVfdm9sdW1lICs9IDEpCi0jZGVmaW5lIHVuaWRsZV9tZSgpCQkoY3B1X2RhdGEoc21wX3Byb2Nlc3Nvcl9pZCgpKS5pZGxlX3ZvbHVtZSA9IDApCiB2b2lkIGNwdV9pZGxlKHZvaWQpCiB7CisJY3B1aW5mb19zcGFyYyAqY3B1aW5mbyA9ICZsb2NhbF9jcHVfZGF0YSgpOwogCXNldF90aHJlYWRfZmxhZyhUSUZfUE9MTElOR19OUkZMQUcpOworCiAJd2hpbGUoMSkgewogCQlpZiAobmVlZF9yZXNjaGVkKCkpIHsKLQkJCXVuaWRsZV9tZSgpOwotCQkJY2xlYXJfdGhyZWFkX2ZsYWcoVElGX1BPTExJTkdfTlJGTEFHKTsKKwkJCWNwdWluZm8tPmlkbGVfdm9sdW1lID0gMDsKKwkJCXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWQoKTsKIAkJCXNjaGVkdWxlKCk7Ci0JCQlzZXRfdGhyZWFkX2ZsYWcoVElGX1BPTExJTkdfTlJGTEFHKTsKKwkJCXByZWVtcHRfZGlzYWJsZSgpOwogCQkJY2hlY2tfcGd0X2NhY2hlKCk7CiAJCX0KLQkJaWRsZV9tZV9oYXJkZXIoKTsKKwkJY3B1aW5mby0+aWRsZV92b2x1bWUrKzsKIAogCQkvKiBUaGUgc3RvcmUgb3JkZXJpbmcgaXMgc28gdGhhdCBJUlEgaGFuZGxlcnMgb24KIAkJICogb3RoZXIgY3B1cyBzZWUgb3VyIGluY3JlYXNpbmcgaWRsZW5lc3MgZm9yIHRoZSBidWRkeQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zYnVzLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3NidXMuYwppbmRleCBlMDlkZGY5Li45NmI4MjUwIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3NidXMuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3NidXMuYwpAQCAtNzkwLDcgKzc5MCw3IEBACiAKICN1bmRlZiBib2dvbgogCi0jZGVmaW5lIE5VTV9TWVNJT19PRkZTRVRTIChzaXplb2Yoc3lzaW9faXJxX29mZnNldHMpIC8gc2l6ZW9mKHN5c2lvX2lycV9vZmZzZXRzWzBdKSkKKyNkZWZpbmUgTlVNX1NZU0lPX09GRlNFVFMgQVJSQVlfU0laRShzeXNpb19pcnFfb2Zmc2V0cykKIAogLyogQ29udmVydCBJbnRlcnJ1cHQgTWFwcGluZyByZWdpc3RlciBwb2ludGVyIHRvIGFzc29jaWF0ZWQKICAqIEludGVycnVwdCBDbGVhciByZWdpc3RlciBwb2ludGVyLCBTWVNJTyBzcGVjaWZpYyB2ZXJzaW9uLgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zZXR1cC5jCmluZGV4IGJmMTg0OWQuLjQ4MTgwNTMgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3NldHVwLmMKQEAgLTU4Nyw2ICs1ODcsOCBAQAogdW5zaWduZWQgaW50IGRjYWNoZV9wYXJpdHlfdGwxX29jY3VycmVkOwogdW5zaWduZWQgaW50IGljYWNoZV9wYXJpdHlfdGwxX29jY3VycmVkOwogCitzdGF0aWMgaW50IG5jcHVzX3Byb2JlZDsKKwogc3RhdGljIGludCBzaG93X2NwdWluZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpfX3VudXNlZCkKIHsKIAlzZXFfcHJpbnRmKG0sIApAQCAtNTk1LDggKzU5Nyw4IEBACiAJCSAgICJwcm9tbGliXHRcdDogVmVyc2lvbiAzIFJldmlzaW9uICVkXG4iCiAJCSAgICJwcm9tXHRcdDogJWQuJWQuJWRcbiIKIAkJICAgInR5cGVcdFx0OiBzdW40dVxuIgotCQkgICAibmNwdXMgcHJvYmVkXHQ6ICVsZFxuIgotCQkgICAibmNwdXMgYWN0aXZlXHQ6ICVsZFxuIgorCQkgICAibmNwdXMgcHJvYmVkXHQ6ICVkXG4iCisJCSAgICJuY3B1cyBhY3RpdmVcdDogJWRcbiIKIAkJICAgIkQkIHBhcml0eSB0bDFcdDogJXVcbiIKIAkJICAgIkkkIHBhcml0eSB0bDFcdDogJXVcbiIKICNpZm5kZWYgQ09ORklHX1NNUApAQCAtNjEwLDggKzYxMiw4IEBACiAJCSAgIHByb21fcHJldiA+PiAxNiwKIAkJICAgKHByb21fcHJldiA+PiA4KSAmIDB4ZmYsCiAJCSAgIHByb21fcHJldiAmIDB4ZmYsCi0JCSAgIChsb25nKW51bV9wb3NzaWJsZV9jcHVzKCksCi0JCSAgIChsb25nKW51bV9vbmxpbmVfY3B1cygpLAorCQkgICBuY3B1c19wcm9iZWQsCisJCSAgIG51bV9vbmxpbmVfY3B1cygpLAogCQkgICBkY2FjaGVfcGFyaXR5X3RsMV9vY2N1cnJlZCwKIAkJICAgaWNhY2hlX3Bhcml0eV90bDFfb2NjdXJyZWQKICNpZm5kZWYgQ09ORklHX1NNUApAQCAtNjc3LDYgKzY3OSwxNSBAQAogCWludCBpLCBlcnI7CiAKIAllcnIgPSAtRU5PTUVNOworCisJLyogQ291bnQgdGhlIG51bWJlciBvZiBwaHlzaWNhbGx5IHByZXNlbnQgcHJvY2Vzc29ycyBpbgorCSAqIHRoZSBtYWNoaW5lLCBldmVuIG9uIHVuaXByb2Nlc3Nvciwgc28gdGhhdCAvcHJvYy9jcHVpbmZvCisJICogb3V0cHV0IGlzIGNvbnNpc3RlbnQgd2l0aCAyLjQueAorCSAqLworCW5jcHVzX3Byb2JlZCA9IDA7CisJd2hpbGUgKCFjcHVfZmluZF9ieV9pbnN0YW5jZShuY3B1c19wcm9iZWQsIE5VTEwsIE5VTEwpKQorCQluY3B1c19wcm9iZWQrKzsKKwogCWZvciAoaSA9IDA7IGkgPCBOUl9DUFVTOyBpKyspIHsKIAkJaWYgKGNwdV9wb3NzaWJsZShpKSkgewogCQkJc3RydWN0IGNwdSAqcCA9IGttYWxsb2Moc2l6ZW9mKCpwKSwgR0ZQX0tFUk5FTCk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3NtcC5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zbXAuYwppbmRleCA1ZDkwZWU5Li42ZWZjMDNkZiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zbXAuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3NtcC5jCkBAIC0zOSw3ICszOSw2IEBACiAjaW5jbHVkZSA8YXNtL3N0YXJmaXJlLmg+CiAjaW5jbHVkZSA8YXNtL3RsYi5oPgogCi1leHRlcm4gaW50IGxpbnV4X251bV9jcHVzOwogZXh0ZXJuIHZvaWQgY2FsaWJyYXRlX2RlbGF5KHZvaWQpOwogCiAvKiBQbGVhc2UgZG9uJ3QgbWFrZSB0aGlzIHN0dWZmIGluaXRkYXRhISEhICAtLURhdmVNICovCkBAIC0xNjgsNiArMTY3LDkgQEAKIAkJcm1iKCk7CiAKIAljcHVfc2V0KGNwdWlkLCBjcHVfb25saW5lX21hcCk7CisKKwkvKiBpZGxlIHRocmVhZCBpcyBleHBlY3RlZCB0byBoYXZlIHByZWVtcHQgZGlzYWJsZWQgKi8KKwlwcmVlbXB0X2Rpc2FibGUoKTsKIH0KIAogdm9pZCBjcHVfcGFuaWModm9pZCkKQEAgLTExNDksMjAgKzExNTEsOSBAQAogCSAgICAgICAoYm9nb3N1bS8oNTAwMC9IWikpJTEwMCk7CiB9CiAKLS8qIFRoaXMgbmVlZG4ndCBkbyBhbnl0aGluZyBhcyB3ZSBkbyBub3Qgc2xlZXAgdGhlIGNwdQotICogaW5zaWRlIG9mIHRoZSBpZGxlciB0YXNrLCBzbyBhbiBpbnRlcnJ1cHQgaXMgbm90IG5lZWRlZAotICogdG8gZ2V0IGEgY2xlYW4gZmFzdCByZXNwb25zZS4KLSAqCi0gKiBYWFggUmV2ZXJpZnkgdGhpcyBhc3N1bXB0aW9uLi4uIC1EYXZlTQotICoKLSAqIEFkZGVuZHVtOiBXZSBkbyB3YW50IGl0IHRvIGRvIHNvbWV0aGluZyBmb3IgdGhlIHNpZ25hbAotICogICAgICAgICAgIGRlbGl2ZXJ5IGNhc2UsIHdlIGRldGVjdCB0aGF0IGJ5IGp1c3Qgc2VlaW5nCi0gKiAgICAgICAgICAgaWYgd2UgYXJlIHRyeWluZyB0byBzZW5kIHRoaXMgdG8gYW4gaWRsZXIgb3Igbm90LgotICovCiB2b2lkIHNtcF9zZW5kX3Jlc2NoZWR1bGUoaW50IGNwdSkKIHsKLQlpZiAoY3B1X2RhdGEoY3B1KS5pZGxlX3ZvbHVtZSA9PSAwKQotCQlzbXBfcmVjZWl2ZV9zaWduYWwoY3B1KTsKKwlzbXBfcmVjZWl2ZV9zaWduYWwoY3B1KTsKIH0KIAogLyogVGhpcyBpcyBhIG5vcCBiZWNhdXNlIHdlIGNhcHR1cmUgYWxsIG90aGVyIGNwdXMKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9tbS9mYXVsdC5jIGIvYXJjaC9zcGFyYzY0L21tL2ZhdWx0LmMKaW5kZXggMzFmYmM2Ny4uNmYwNTM5YSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L21tL2ZhdWx0LmMKKysrIGIvYXJjaC9zcGFyYzY0L21tL2ZhdWx0LmMKQEAgLTMwLDggKzMwLDYgQEAKICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KICNpbmNsdWRlIDxhc20va2RlYnVnLmg+CiAKLSNkZWZpbmUgRUxFTUVOVFMoYXJyKSAoc2l6ZW9mIChhcnIpL3NpemVvZiAoYXJyWzBdKSkKLQogLyoKICAqIFRvIGRlYnVnIGtlcm5lbCB0byBjYXRjaCBhY2Nlc3NlcyB0byBjZXJ0YWluIHZpcnR1YWwvcGh5c2ljYWwgYWRkcmVzc2VzLgogICogTW9kZSA9IDAgc2VsZWN0cyBwaHlzaWNhbCB3YXRjaHBvaW50cywgbW9kZSA9IDEgc2VsZWN0cyB2aXJ0dWFsIHdhdGNocG9pbnRzLgpAQCAtMTA5LDcgKzEwNyw3IEBACiAgKiB0aGlzLiBBZGRpdGlvbmFsbHksIHRvIHByZXZlbnQga3N3YXBkIGZyb20gcmlwcGluZyBwdGVzIGZyb20KICAqIHVuZGVyIHVzLCByYWlzZSBpbnRlcnJ1cHRzIGFyb3VuZCB0aGUgdGltZSB0aGF0IHdlIGxvb2sgYXQgdGhlCiAgKiBwdGUsIGtzd2FwZCB3aWxsIGhhdmUgdG8gd2FpdCB0byBnZXQgaGlzIHNtcCBpcGkgcmVzcG9uc2UgZnJvbQotICogdXMuIFRoaXMgc2F2ZXMgdXMgaGF2aW5nIHRvIGdldCBwYWdlX3RhYmxlX2xvY2suCisgKiB1cy4gdm10cnVuY2F0ZSBsaWtld2lzZS4gVGhpcyBzYXZlcyB1cyBoYXZpbmcgdG8gZ2V0IHB0ZSBsb2NrLgogICovCiBzdGF0aWMgdW5zaWduZWQgaW50IGdldF91c2VyX2luc24odW5zaWduZWQgbG9uZyB0cGMpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3VtL2RyaXZlcnMvbmV0X2tlcm4uYyBiL2FyY2gvdW0vZHJpdmVycy9uZXRfa2Vybi5jCmluZGV4IGZlODY1ZDkuLjg0YzczYTMgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZHJpdmVycy9uZXRfa2Vybi5jCisrKyBiL2FyY2gvdW0vZHJpdmVycy9uZXRfa2Vybi5jCkBAIC0yNDMsMzQgKzI0MywxOCBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgdW1sX25ldF9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmciwgaW50IGNtZCkKK3N0YXRpYyB2b2lkIHVtbF9uZXRfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICppbmZvKQogewotCXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvIGluZm8gPSB7Ci0JCS5jbWQgICAgID0gRVRIVE9PTF9HRFJWSU5GTywKLQkJLmRyaXZlciAgPSBEUklWRVJfTkFNRSwKLQkJLnZlcnNpb24gPSAiNDIiLAotCX07Ci0Jdm9pZCAqdXNlcmFkZHI7Ci0JdTMyIGV0aGNtZDsKLQotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBTSU9DRVRIVE9PTDoKLQkJdXNlcmFkZHIgPSBpZnItPmlmcl9kYXRhOwotCQlpZiAoY29weV9mcm9tX3VzZXIoJmV0aGNtZCwgdXNlcmFkZHIsIHNpemVvZihldGhjbWQpKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlzd2l0Y2ggKGV0aGNtZCkgewotCQljYXNlIEVUSFRPT0xfR0RSVklORk86Ci0JCQlpZiAoY29weV90b191c2VyKHVzZXJhZGRyLCAmaW5mbywgc2l6ZW9mKGluZm8pKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCXJldHVybiAwOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCQl9Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQorCXN0cmNweShpbmZvLT5kcml2ZXIsIERSSVZFUl9OQU1FKTsKKwlzdHJjcHkoaW5mby0+dmVyc2lvbiwgIjQyIik7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgdW1sX25ldF9ldGh0b29sX29wcyA9IHsKKwkuZ2V0X2RydmluZm8JPSB1bWxfbmV0X2dldF9kcnZpbmZvLAorCS5nZXRfbGluawk9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCit9OworCiB2b2lkIHVtbF9uZXRfdXNlcl90aW1lcl9leHBpcmUodW5zaWduZWQgbG9uZyBfY29ubikKIHsKICNpZmRlZiB1bmRlZgpAQCAtMjg0LDkgKzI2OCwxMCBAQAogc3RhdGljIERFRklORV9TUElOTE9DSyhkZXZpY2VzX2xvY2spOwogc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgZGV2aWNlcyA9IExJU1RfSEVBRF9JTklUKGRldmljZXMpOwogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgdW1sX25ldF9kcml2ZXIgPSB7Ci0JLm5hbWUgID0gRFJJVkVSX05BTUUsCi0JLmJ1cyAgID0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdW1sX25ldF9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgID0gRFJJVkVSX05BTUUsCisJfSwKIH07CiBzdGF0aWMgaW50IGRyaXZlcl9yZWdpc3RlcmVkOwogCkBAIC0zMzMsNyArMzE4LDcgQEAKIAogCS8qIHN5c2ZzIHJlZ2lzdGVyICovCiAJaWYgKCFkcml2ZXJfcmVnaXN0ZXJlZCkgewotCQlkcml2ZXJfcmVnaXN0ZXIoJnVtbF9uZXRfZHJpdmVyKTsKKwkJcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ1bWxfbmV0X2RyaXZlcik7CiAJCWRyaXZlcl9yZWdpc3RlcmVkID0gMTsKIAl9CiAJZGV2aWNlLT5wZGV2LmlkID0gbjsKQEAgLTM1OSw3ICszNDQsNyBAQAogCWRldi0+dHhfdGltZW91dCA9IHVtbF9uZXRfdHhfdGltZW91dDsKIAlkZXYtPnNldF9tYWNfYWRkcmVzcyA9IHVtbF9uZXRfc2V0X21hYzsKIAlkZXYtPmNoYW5nZV9tdHUgPSB1bWxfbmV0X2NoYW5nZV9tdHU7Ci0JZGV2LT5kb19pb2N0bCA9IHVtbF9uZXRfaW9jdGw7CisJZGV2LT5ldGh0b29sX29wcyA9ICZ1bWxfbmV0X2V0aHRvb2xfb3BzOwogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSAoSFogPj4gMSk7CiAJZGV2LT5pcnEgPSBVTV9FVEhfSVJROwogCmRpZmYgLS1naXQgYS9hcmNoL3VtL2RyaXZlcnMvdWJkX2tlcm4uYyBiL2FyY2gvdW0vZHJpdmVycy91YmRfa2Vybi5jCmluZGV4IGIyYzg2MjUuLjkzODk4OTEgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZHJpdmVycy91YmRfa2Vybi5jCisrKyBiL2FyY2gvdW0vZHJpdmVycy91YmRfa2Vybi5jCkBAIC04MjMsOSArODIzLDEwIEBACiAKIF9faW5pdGNhbGwodWJkX21jX2luaXQpOwogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgdWJkX2RyaXZlciA9IHsKLQkubmFtZSAgPSBEUklWRVJfTkFNRSwKLQkuYnVzICAgPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB1YmRfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lICA9IERSSVZFUl9OQU1FLAorCX0sCiB9OwogCiBpbnQgdWJkX2luaXQodm9pZCkKQEAgLTg1MCw3ICs4NTEsNyBAQAogCQlpZiAocmVnaXN0ZXJfYmxrZGV2KGZha2VfbWFqb3IsICJ1YmQiKSkKIAkJCXJldHVybiAtMTsKIAl9Ci0JZHJpdmVyX3JlZ2lzdGVyKCZ1YmRfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnViZF9kcml2ZXIpOwogCWZvciAoaSA9IDA7IGkgPCBNQVhfREVWOyBpKyspIAogCQl1YmRfYWRkKGkpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC92ODUwL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL3Y4NTAva2VybmVsL3Byb2Nlc3MuYwppbmRleCA5YzcwOGMzLi4zOWNmMjQ3IDEwMDY0NAotLS0gYS9hcmNoL3Y4NTAva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL3Y4NTAva2VybmVsL3Byb2Nlc3MuYwpAQCAtMzYsMTEgKzM2LDggQEAKIC8qIFRoZSBpZGxlIGxvb3AuICAqLwogdm9pZCBkZWZhdWx0X2lkbGUgKHZvaWQpCiB7Ci0Jd2hpbGUgKDEpIHsKLQkJd2hpbGUgKCEgbmVlZF9yZXNjaGVkICgpKQotCQkJYXNtICgiaGFsdDsgbm9wOyBub3A7IG5vcDsgbm9wOyBub3AiIDo6OiAiY2MiKTsKLQkJc2NoZWR1bGUgKCk7Ci0JfQorCXdoaWxlICghIG5lZWRfcmVzY2hlZCAoKSkKKwkJYXNtICgiaGFsdDsgbm9wOyBub3A7IG5vcDsgbm9wOyBub3AiIDo6OiAiY2MiKTsKIH0KIAogdm9pZCAoKmlkbGUpKHZvaWQpID0gZGVmYXVsdF9pZGxlOwpAQCAtNTQsNyArNTEsMTQgQEAKIHZvaWQgY3B1X2lkbGUgKHZvaWQpCiB7CiAJLyogZW5kbGVzcyBpZGxlIGxvb3Agd2l0aCBubyBwcmlvcml0eSBhdCBhbGwgKi8KLQkoKmlkbGUpICgpOworCXdoaWxlICgxKSB7CisJCXdoaWxlICghbmVlZF9yZXNjaGVkKCkpCisJCQkoKmlkbGUpICgpOworCisJCXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWQoKTsKKwkJc2NoZWR1bGUoKTsKKwkJcHJlZW1wdF9kaXNhYmxlKCk7CisJfQogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQvaWEzMi9pYTMyX2lvY3RsLmMgYi9hcmNoL3g4Nl82NC9pYTMyL2lhMzJfaW9jdGwuYwppbmRleCA0YmEwZTI5Li5lMzM1YmQwIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9pYTMyL2lhMzJfaW9jdGwuYworKysgYi9hcmNoL3g4Nl82NC9pYTMyL2lhMzJfaW9jdGwuYwpAQCAtNjQsMTIgKzY0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9jb21wYXRfaW9jdGwuaD4KICNkZWZpbmUgREVDTEFSRVMKICNpbmNsdWRlICJjb21wYXRfaW9jdGwuYyIKLUNPTVBBVElCTEVfSU9DVEwoSERJT19TRVRfS0VFUFNFVFRJTkdTKQotQ09NUEFUSUJMRV9JT0NUTChIRElPX1NDQU5fSFdJRikKLUNPTVBBVElCTEVfSU9DVEwoQkxLUkFTRVQpCi1DT01QQVRJQkxFX0lPQ1RMKDB4NEI1MCkgICAvKiBLREdIV0NMSyAtIG5vdCBpbiB0aGUga2VybmVsLCBidXQgZG9uJ3QgY29tcGxhaW4gKi8KLUNPTVBBVElCTEVfSU9DVEwoMHg0QjUxKSAgIC8qIEtEU0hXQ0xLIC0gbm90IGluIHRoZSBrZXJuZWwsIGJ1dCBkb24ndCBjb21wbGFpbiAqLwotQ09NUEFUSUJMRV9JT0NUTChGSU9RU0laRSkKIAogLyogQW5kIHRoZXNlIGlvY3RscyBuZWVkIHRyYW5zbGF0aW9uICovCiAvKiByZWFsdGltZSBkZXZpY2UgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IGI1YTg5YzAuLjU5YmU4NWQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL3Byb2Nlc3MuYwpAQCAtODYsMTIgKzg2LDIyIEBACiAgKi8KIHZvaWQgZGVmYXVsdF9pZGxlKHZvaWQpCiB7CisJbG9jYWxfaXJxX2VuYWJsZSgpOworCiAJaWYgKCFhdG9taWNfcmVhZCgmaGx0X2NvdW50ZXIpKSB7Ci0JCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0JCWlmICghbmVlZF9yZXNjaGVkKCkpCi0JCQlzYWZlX2hhbHQoKTsKLQkJZWxzZQotCQkJbG9jYWxfaXJxX2VuYWJsZSgpOworCQljbGVhcl90aHJlYWRfZmxhZyhUSUZfUE9MTElOR19OUkZMQUcpOworCQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOworCQl3aGlsZSAoIW5lZWRfcmVzY2hlZCgpKSB7CisJCQlsb2NhbF9pcnFfZGlzYWJsZSgpOworCQkJaWYgKCFuZWVkX3Jlc2NoZWQoKSkKKwkJCQlzYWZlX2hhbHQoKTsKKwkJCWVsc2UKKwkJCQlsb2NhbF9pcnFfZW5hYmxlKCk7CisJCX0KKwkJc2V0X3RocmVhZF9mbGFnKFRJRl9QT0xMSU5HX05SRkxBRyk7CisJfSBlbHNlIHsKKwkJd2hpbGUgKCFuZWVkX3Jlc2NoZWQoKSkKKwkJCWNwdV9yZWxheCgpOwogCX0KIH0KIApAQCAtMTAyLDMwICsxMTIsMTYgQEAKICAqLwogc3RhdGljIHZvaWQgcG9sbF9pZGxlICh2b2lkKQogewotCWludCBvbGR2YWw7Ci0KIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiAKLQkvKgotCSAqIERlYWwgd2l0aCBhbm90aGVyIENQVSBqdXN0IGhhdmluZyBjaG9zZW4gYSB0aHJlYWQgdG8KLQkgKiBydW4gaGVyZToKLQkgKi8KLQlvbGR2YWwgPSB0ZXN0X2FuZF9jbGVhcl90aHJlYWRfZmxhZyhUSUZfTkVFRF9SRVNDSEVEKTsKLQotCWlmICghb2xkdmFsKSB7Ci0JCXNldF90aHJlYWRfZmxhZyhUSUZfUE9MTElOR19OUkZMQUcpOyAKLQkJYXNtIHZvbGF0aWxlKAotCQkJIjI6IgotCQkJInRlc3RsICUwLCUxOyIKLQkJCSJyZXA7IG5vcDsiCi0JCQkiamUgMmI7IgotCQkJOiA6Ci0JCQkiaSIgKF9USUZfTkVFRF9SRVNDSEVEKSwgCi0JCQkibSIgKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+ZmxhZ3MpKTsKLQkJY2xlYXJfdGhyZWFkX2ZsYWcoVElGX1BPTExJTkdfTlJGTEFHKTsKLQl9IGVsc2UgewotCQlzZXRfbmVlZF9yZXNjaGVkKCk7Ci0JfQorCWFzbSB2b2xhdGlsZSgKKwkJIjI6IgorCQkidGVzdGwgJTAsJTE7IgorCQkicmVwOyBub3A7IgorCQkiamUgMmI7IgorCQk6IDoKKwkJImkiIChfVElGX05FRURfUkVTQ0hFRCksCisJCSJtIiAoY3VycmVudF90aHJlYWRfaW5mbygpLT5mbGFncykpOwogfQogCiB2b2lkIGNwdV9pZGxlX3dhaXQodm9pZCkKQEAgLTE4Nyw2ICsxODMsOCBAQAogICovCiB2b2lkIGNwdV9pZGxlICh2b2lkKQogeworCXNldF90aHJlYWRfZmxhZyhUSUZfUE9MTElOR19OUkZMQUcpOworCiAJLyogZW5kbGVzcyBpZGxlIGxvb3Agd2l0aCBubyBwcmlvcml0eSBhdCBhbGwgKi8KIAl3aGlsZSAoMSkgewogCQl3aGlsZSAoIW5lZWRfcmVzY2hlZCgpKSB7CkBAIC0yMDQsNyArMjAyLDkgQEAKIAkJCWlkbGUoKTsKIAkJfQogCisJCXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWQoKTsKIAkJc2NoZWR1bGUoKTsKKwkJcHJlZW1wdF9kaXNhYmxlKCk7CiAJfQogfQogCkBAIC0yMTksMTUgKzIxOSwxMiBAQAogewogCWxvY2FsX2lycV9lbmFibGUoKTsKIAotCWlmICghbmVlZF9yZXNjaGVkKCkpIHsKLQkJc2V0X3RocmVhZF9mbGFnKFRJRl9QT0xMSU5HX05SRkxBRyk7Ci0JCWRvIHsKLQkJCV9fbW9uaXRvcigodm9pZCAqKSZjdXJyZW50X3RocmVhZF9pbmZvKCktPmZsYWdzLCAwLCAwKTsKLQkJCWlmIChuZWVkX3Jlc2NoZWQoKSkKLQkJCQlicmVhazsKLQkJCV9fbXdhaXQoMCwgMCk7Ci0JCX0gd2hpbGUgKCFuZWVkX3Jlc2NoZWQoKSk7Ci0JCWNsZWFyX3RocmVhZF9mbGFnKFRJRl9QT0xMSU5HX05SRkxBRyk7CisJd2hpbGUgKCFuZWVkX3Jlc2NoZWQoKSkgeworCQlfX21vbml0b3IoKHZvaWQgKikmY3VycmVudF90aHJlYWRfaW5mbygpLT5mbGFncywgMCwgMCk7CisJCXNtcF9tYigpOworCQlpZiAobmVlZF9yZXNjaGVkKCkpCisJCQlicmVhazsKKwkJX19td2FpdCgwLCAwKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9zbXBib290LmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvc21wYm9vdC5jCmluZGV4IDRiNWIwODguLmM0ZTU5YmIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9zbXBib290LmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL3NtcGJvb3QuYwpAQCAtNDcyLDYgKzQ3Miw3IEBACiAJICogdGhpbmdzIGRvbmUgaGVyZSB0byB0aGUgbW9zdCBuZWNlc3NhcnkgdGhpbmdzLgogCSAqLwogCWNwdV9pbml0KCk7CisJcHJlZW1wdF9kaXNhYmxlKCk7CiAJc21wX2NhbGxpbigpOwogCiAJLyogb3RoZXJ3aXNlIGdjYyB3aWxsIG1vdmUgdXAgdGhlIHNtcF9wcm9jZXNzb3JfaWQgYmVmb3JlIHRoZSBjcHVfaW5pdCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2Eva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gveHRlbnNhL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggMDhlZjZkOC4uNmE0NGI1NCAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2Eva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvcHJvY2Vzcy5jCkBAIC05Niw4ICs5Niw5IEBACiAJd2hpbGUgKDEpIHsKIAkJd2hpbGUgKCFuZWVkX3Jlc2NoZWQoKSkKIAkJCXBsYXRmb3JtX2lkbGUoKTsKLQkJcHJlZW1wdF9lbmFibGUoKTsKKwkJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOwogCQlzY2hlZHVsZSgpOworCQlwcmVlbXB0X2Rpc2FibGUoKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL3BsYXRmb3JtLWlzcy9uZXR3b3JrLmMgYi9hcmNoL3h0ZW5zYS9wbGF0Zm9ybS1pc3MvbmV0d29yay5jCmluZGV4IDA2ODJmZmQuLjBkYzU1Y2MgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL3BsYXRmb3JtLWlzcy9uZXR3b3JrLmMKKysrIGIvYXJjaC94dGVuc2EvcGxhdGZvcm0taXNzL25ldHdvcmsuYwpAQCAtNjExLDQ2ICs2MTEsMTUgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotc3RhdGljIGludCBpc3NfbmV0X2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLCBpbnQgY21kKQotewotI2lmIDAKLQlzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyBpbmZvID0gewotCQkuY21kICAgICA9IEVUSFRPT0xfR0RSVklORk8sCi0JCS5kcml2ZXIgID0gRFJJVkVSX05BTUUsCi0JCS52ZXJzaW9uID0gIjQyIiwKLQl9OwotCXZvaWQgKnVzZXJhZGRyOwotCXUzMiBldGhjbWQ7Ci0KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgU0lPQ0VUSFRPT0w6Ci0JCXVzZXJhZGRyID0gaWZyLT5pZnJfZGF0YTsKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZldGhjbWQsIHVzZXJhZGRyLCBzaXplb2YoZXRoY21kKSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQotCQlzd2l0Y2ggKGV0aGNtZCkgewotCQkJY2FzZSBFVEhUT09MX0dEUlZJTkZPOgotCQkJCWlmIChjb3B5X3RvX3VzZXIodXNlcmFkZHIsICZpbmZvLCBzaXplb2YoaW5mbykpKQotCQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCQlyZXR1cm4gMDsKLQkJCWRlZmF1bHQ6Ci0JCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCQl9Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotI2VuZGlmCi0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KIHZvaWQgaXNzX25ldF91c2VyX3RpbWVyX2V4cGlyZSh1bnNpZ25lZCBsb25nIF9jb25uKQogewogfQogCiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBpc3NfbmV0X2RyaXZlciA9IHsKLQkubmFtZSAgPSBEUklWRVJfTkFNRSwKLQkuYnVzICAgPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBpc3NfbmV0X2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSAgPSBEUklWRVJfTkFNRSwKKwl9LAogfTsKIAogc3RhdGljIGludCBkcml2ZXJfcmVnaXN0ZXJlZDsKQEAgLTcwMSw3ICs2NzAsNyBAQAogCS8qIHN5c2ZzIHJlZ2lzdGVyICovCiAKIAlpZiAoIWRyaXZlcl9yZWdpc3RlcmVkKSB7Ci0JCWRyaXZlcl9yZWdpc3RlcigmaXNzX25ldF9kcml2ZXIpOworCQlwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmlzc19uZXRfZHJpdmVyKTsKIAkJZHJpdmVyX3JlZ2lzdGVyZWQgPSAxOwogCX0KIApAQCAtNzMwLDcgKzY5OSw2IEBACiAJZGV2LT50eF90aW1lb3V0ID0gaXNzX25ldF90eF90aW1lb3V0OwogCWRldi0+c2V0X21hY19hZGRyZXNzID0gaXNzX25ldF9zZXRfbWFjOwogCWRldi0+Y2hhbmdlX210dSA9IGlzc19uZXRfY2hhbmdlX210dTsKLQlkZXYtPmRvX2lvY3RsID0gaXNzX25ldF9pb2N0bDsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gKEhaID4+IDEpOwogCWRldi0+aXJxID0gLTE7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9nbHVlLmMgYi9kcml2ZXJzL2FjcGkvZ2x1ZS5jCmluZGV4IDM5MzdhZGYuLmFhOTkzNzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9nbHVlLmMKKysrIGIvZHJpdmVycy9hY3BpL2dsdWUuYwpAQCAtMjAzLDYgKzIwMyw3IEBACiAJYWNwaV9nZXRfZGV2aWNlcyhQQ0lfUk9PVF9ISURfU1RSSU5HLCBmaW5kX3BjaV9yb290YnJpZGdlLCAmZmluZCwgTlVMTCk7CiAJcmV0dXJuIGZpbmQuaGFuZGxlOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoYWNwaV9nZXRfcGNpX3Jvb3RicmlkZ2VfaGFuZGxlKTsKIAogLyogR2V0IGRldmljZSdzIGhhbmRsZXIgcGVyIGl0cyBhZGRyZXNzIHVuZGVyIGl0cyBwYXJlbnQgKi8KIHN0cnVjdCBhY3BpX2ZpbmRfY2hpbGQgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9pZGxlLmMgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2lkbGUuYwppbmRleCAxNjFkYjRhLi41NzNiNmE5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9pZGxlLmMKKysrIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9pZGxlLmMKQEAgLTE2Nyw2ICsxNjcsMTkgQEAKIAlyZXR1cm47CiB9CiAKK3N0YXRpYyB2b2lkIGFjcGlfc2FmZV9oYWx0KHZvaWQpCit7CisJaW50IHBvbGxpbmcgPSB0ZXN0X3RocmVhZF9mbGFnKFRJRl9QT0xMSU5HX05SRkxBRyk7CisJaWYgKHBvbGxpbmcpIHsKKwkJY2xlYXJfdGhyZWFkX2ZsYWcoVElGX1BPTExJTkdfTlJGTEFHKTsKKwkJc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKKwl9CisJaWYgKCFuZWVkX3Jlc2NoZWQoKSkKKwkJc2FmZV9oYWx0KCk7CisJaWYgKHBvbGxpbmcpCisJCXNldF90aHJlYWRfZmxhZyhUSUZfUE9MTElOR19OUkZMQUcpOworfQorCiBzdGF0aWMgYXRvbWljX3QgYzNfY3B1X2NvdW50OwogCiBzdGF0aWMgdm9pZCBhY3BpX3Byb2Nlc3Nvcl9pZGxlKHZvaWQpCkBAIC0xNzcsNyArMTkwLDcgQEAKIAlpbnQgc2xlZXBfdGlja3MgPSAwOwogCXUzMiB0MSwgdDIgPSAwOwogCi0JcHIgPSBwcm9jZXNzb3JzW3Jhd19zbXBfcHJvY2Vzc29yX2lkKCldOworCXByID0gcHJvY2Vzc29yc1tzbXBfcHJvY2Vzc29yX2lkKCldOwogCWlmICghcHIpCiAJCXJldHVybjsKIApAQCAtMTk3LDggKzIxMCwxMyBAQAogCX0KIAogCWN4ID0gcHItPnBvd2VyLnN0YXRlOwotCWlmICghY3gpCi0JCWdvdG8gZWFzeV9vdXQ7CisJaWYgKCFjeCkgeworCQlpZiAocG1faWRsZV9zYXZlKQorCQkJcG1faWRsZV9zYXZlKCk7CisJCWVsc2UKKwkJCWFjcGlfc2FmZV9oYWx0KCk7CisJCXJldHVybjsKKwl9CiAKIAkvKgogCSAqIENoZWNrIEJNIEFjdGl2aXR5CkBAIC0yNzgsNyArMjk2LDggQEAKIAkJaWYgKHBtX2lkbGVfc2F2ZSkKIAkJCXBtX2lkbGVfc2F2ZSgpOwogCQllbHNlCi0JCQlzYWZlX2hhbHQoKTsKKwkJCWFjcGlfc2FmZV9oYWx0KCk7CisKIAkJLyoKIAkJICogVEJEOiBDYW4ndCBnZXQgdGltZSBkdXJhdGlvbiB3aGlsZSBpbiBDMSwgYXMgcmVzdW1lcwogCQkgKiAgICAgIGdvIHRvIGFuIElTUiByYXRoZXIgdGhhbiBoZXJlLiAgTmVlZCB0byBpbnN0cnVtZW50CkBAIC00MTQsMTYgKzQzMyw2IEBACiAJICovCiAJaWYgKG5leHRfc3RhdGUgIT0gcHItPnBvd2VyLnN0YXRlKQogCQlhY3BpX3Byb2Nlc3Nvcl9wb3dlcl9hY3RpdmF0ZShwciwgbmV4dF9zdGF0ZSk7Ci0KLQlyZXR1cm47Ci0KLSAgICAgIGVhc3lfb3V0OgotCS8qIGRvIEMxIGluc3RlYWQgb2YgYnVzeSBsb29wICovCi0JaWYgKHBtX2lkbGVfc2F2ZSkKLQkJcG1faWRsZV9zYXZlKCk7Ci0JZWxzZQotCQlzYWZlX2hhbHQoKTsKLQlyZXR1cm47CiB9CiAKIHN0YXRpYyBpbnQgYWNwaV9wcm9jZXNzb3Jfc2V0X3Bvd2VyX3BvbGljeShzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vaG9yaXpvbi5jIGIvZHJpdmVycy9hdG0vaG9yaXpvbi5jCmluZGV4IDBjZGVkMDQuLjgyMWM4MWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRtL2hvcml6b24uYworKysgYi9kcml2ZXJzL2F0bS9ob3Jpem9uLmMKQEAgLTE1MTEsOCArMTUxMSw4IEBACiAgICAgLy8gYS5rLmEuIHByZXBhcmUgdGhlIGNoYW5uZWwgYW5kIHJlbWVtYmVyIHRoYXQgd2UgaGF2ZSBkb25lIHNvLgogICAgIAogICAgIHR4X2NoX2Rlc2MgKiB0eF9kZXNjID0gJm1lbW1hcC0+dHhfZGVzY3NbdHhfY2hhbm5lbF07Ci0gICAgdTE2IHJkX3B0cjsKLSAgICB1MTYgd3JfcHRyOworICAgIHUzMiByZF9wdHI7CisgICAgdTMyIHdyX3B0cjsKICAgICB1MTYgY2hhbm5lbCA9IHZjYy0+Y2hhbm5lbDsKICAgICAKICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMgYi9kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYwppbmRleCA2ZDQ3MzZlLi44ODI3ZGFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYworKysgYi9kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYwpAQCAtMjAsNiArMjAsOCBAQAogCiAjaW5jbHVkZSAiYmFzZS5oIgogCisjZGVmaW5lIHRvX3BsYXRmb3JtX2RyaXZlcihkcnYpCShjb250YWluZXJfb2YoKGRydiksIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIsIGRyaXZlcikpCisKIHN0cnVjdCBkZXZpY2UgcGxhdGZvcm1fYnVzID0gewogCS5idXNfaWQJCT0gInBsYXRmb3JtIiwKIH07CkBAIC0zNTQsNiArMzU2LDc3IEBACiAJcmV0dXJuIEVSUl9QVFIocmV0dmFsKTsKIH0KIAorc3RhdGljIGludCBwbGF0Zm9ybV9kcnZfcHJvYmUoc3RydWN0IGRldmljZSAqX2RldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyICpkcnYgPSB0b19wbGF0Zm9ybV9kcml2ZXIoX2Rldi0+ZHJpdmVyKTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoX2Rldik7CisKKwlyZXR1cm4gZHJ2LT5wcm9iZShkZXYpOworfQorCitzdGF0aWMgaW50IHBsYXRmb3JtX2Rydl9yZW1vdmUoc3RydWN0IGRldmljZSAqX2RldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyICpkcnYgPSB0b19wbGF0Zm9ybV9kcml2ZXIoX2Rldi0+ZHJpdmVyKTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoX2Rldik7CisKKwlyZXR1cm4gZHJ2LT5yZW1vdmUoZGV2KTsKK30KKworc3RhdGljIHZvaWQgcGxhdGZvcm1fZHJ2X3NodXRkb3duKHN0cnVjdCBkZXZpY2UgKl9kZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RyaXZlciAqZHJ2ID0gdG9fcGxhdGZvcm1fZHJpdmVyKF9kZXYtPmRyaXZlcik7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKF9kZXYpOworCisJZHJ2LT5zaHV0ZG93bihkZXYpOworfQorCitzdGF0aWMgaW50IHBsYXRmb3JtX2Rydl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKl9kZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyICpkcnYgPSB0b19wbGF0Zm9ybV9kcml2ZXIoX2Rldi0+ZHJpdmVyKTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoX2Rldik7CisKKwlyZXR1cm4gZHJ2LT5zdXNwZW5kKGRldiwgc3RhdGUpOworfQorCitzdGF0aWMgaW50IHBsYXRmb3JtX2Rydl9yZXN1bWUoc3RydWN0IGRldmljZSAqX2RldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyICpkcnYgPSB0b19wbGF0Zm9ybV9kcml2ZXIoX2Rldi0+ZHJpdmVyKTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoX2Rldik7CisKKwlyZXR1cm4gZHJ2LT5yZXN1bWUoZGV2KTsKK30KKworLyoqCisgKglwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIKKyAqCUBkcnY6IHBsYXRmb3JtIGRyaXZlciBzdHJ1Y3R1cmUKKyAqLworaW50IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcihzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyICpkcnYpCit7CisJZHJ2LT5kcml2ZXIuYnVzID0gJnBsYXRmb3JtX2J1c190eXBlOworCWlmIChkcnYtPnByb2JlKQorCQlkcnYtPmRyaXZlci5wcm9iZSA9IHBsYXRmb3JtX2Rydl9wcm9iZTsKKwlpZiAoZHJ2LT5yZW1vdmUpCisJCWRydi0+ZHJpdmVyLnJlbW92ZSA9IHBsYXRmb3JtX2Rydl9yZW1vdmU7CisJaWYgKGRydi0+c2h1dGRvd24pCisJCWRydi0+ZHJpdmVyLnNodXRkb3duID0gcGxhdGZvcm1fZHJ2X3NodXRkb3duOworCWlmIChkcnYtPnN1c3BlbmQpCisJCWRydi0+ZHJpdmVyLnN1c3BlbmQgPSBwbGF0Zm9ybV9kcnZfc3VzcGVuZDsKKwlpZiAoZHJ2LT5yZXN1bWUpCisJCWRydi0+ZHJpdmVyLnJlc3VtZSA9IHBsYXRmb3JtX2Rydl9yZXN1bWU7CisJcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmZHJ2LT5kcml2ZXIpOworfQorRVhQT1JUX1NZTUJPTF9HUEwocGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKTsKKworLyoqCisgKglwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcgorICoJQGRydjogcGxhdGZvcm0gZHJpdmVyIHN0cnVjdHVyZQorICovCit2b2lkIHBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgKmRydikKK3sKKwlkcml2ZXJfdW5yZWdpc3RlcigmZHJ2LT5kcml2ZXIpOworfQorRVhQT1JUX1NZTUJPTF9HUEwocGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIpOworCiAKIC8qKgogICoJcGxhdGZvcm1fbWF0Y2ggLSBiaW5kIHBsYXRmb3JtIGRldmljZSB0byBwbGF0Zm9ybSBkcml2ZXIuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2Fjc2kuYyBiL2RyaXZlcnMvYmxvY2svYWNzaS5jCmluZGV4IDBlMWYzNGYuLjVkMmQ2NDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svYWNzaS5jCisrKyBiL2RyaXZlcnMvYmxvY2svYWNzaS5jCkBAIC01OCw3ICs1OCw2IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaS5oPiAvKiBmb3IgU0NTSV9JT0NUTF9HRVRfSURMVU4gKi8KLXR5cGVkZWYgdm9pZCBTY3NpX0RldmljZTsgLyogaGFjayB0byBhdm9pZCBpbmNsdWRpbmcgc2NzaS5oICovCiAjaW5jbHVkZSA8c2NzaS9zY3NpX2lvY3RsLmg+CiAjaW5jbHVkZSA8bGludXgvaGRyZWcuaD4gLyogZm9yIEhESU9fR0VUR0VPICovCiAjaW5jbHVkZSA8bGludXgvYmxrcGcuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svYW1pZmxvcC5jIGIvZHJpdmVycy9ibG9jay9hbWlmbG9wLmMKaW5kZXggMTQ2OGU4Yy4uMGFjYmZmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9hbWlmbG9wLmMKKysrIGIvZHJpdmVycy9ibG9jay9hbWlmbG9wLmMKQEAgLTE4MTYsNyArMTgxNiw2IEBACiB9CiAKICNpZmRlZiBNT0RVTEUKLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAKIGludCBpbml0X21vZHVsZSh2b2lkKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9jY2lzcy5jIGIvZHJpdmVycy9ibG9jay9jY2lzcy5jCmluZGV4IGE5N2M4MGIuLmUyMzlhNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svY2Npc3MuYworKysgYi9kcml2ZXJzL2Jsb2NrL2NjaXNzLmMKQEAgLTE0OCw2ICsxNDgsNyBAQAogc3RhdGljIGN0bHJfaW5mb190ICpoYmFbTUFYX0NUTFJdOwogCiBzdGF0aWMgdm9pZCBkb19jY2lzc19yZXF1ZXN0KHJlcXVlc3RfcXVldWVfdCAqcSk7CitzdGF0aWMgaXJxcmV0dXJuX3QgZG9fY2Npc3NfaW50cihpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKIHN0YXRpYyBpbnQgY2Npc3Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZXApOwogc3RhdGljIGludCBjY2lzc19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlcCk7CiBzdGF0aWMgaW50IGNjaXNzX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlcCwgCkBAIC0xNTgzLDYgKzE1ODQsMjQgQEAKIAkJfQogCX0gZWxzZSBpZiAoY21kX3R5cGUgPT0gVFlQRV9NU0cpIHsKIAkJc3dpdGNoIChjbWQpIHsKKwkJY2FzZSAwOiAvKiBBQk9SVCBtZXNzYWdlICovCisJCQljLT5SZXF1ZXN0LkNEQkxlbiA9IDEyOworCQkJYy0+UmVxdWVzdC5UeXBlLkF0dHJpYnV0ZSA9IEFUVFJfU0lNUExFOworCQkJYy0+UmVxdWVzdC5UeXBlLkRpcmVjdGlvbiA9IFhGRVJfV1JJVEU7CisJCQljLT5SZXF1ZXN0LlRpbWVvdXQgPSAwOworCQkJYy0+UmVxdWVzdC5DREJbMF0gPSBjbWQ7IC8qIGFib3J0ICovCisJCQljLT5SZXF1ZXN0LkNEQlsxXSA9IDA7ICAgLyogYWJvcnQgYSBjb21tYW5kICovCisJCQkvKiBidWZmIGNvbnRhaW5zIHRoZSB0YWcgb2YgdGhlIGNvbW1hbmQgdG8gYWJvcnQgKi8KKwkJCW1lbWNweSgmYy0+UmVxdWVzdC5DREJbNF0sIGJ1ZmYsIDgpOworCQkJYnJlYWs7CisJCWNhc2UgMTogLyogUkVTRVQgbWVzc2FnZSAqLworCQkJYy0+UmVxdWVzdC5DREJMZW4gPSAxMjsKKwkJCWMtPlJlcXVlc3QuVHlwZS5BdHRyaWJ1dGUgPSBBVFRSX1NJTVBMRTsKKwkJCWMtPlJlcXVlc3QuVHlwZS5EaXJlY3Rpb24gPSBYRkVSX1dSSVRFOworCQkJYy0+UmVxdWVzdC5UaW1lb3V0ID0gMDsKKwkJCW1lbXNldCgmYy0+UmVxdWVzdC5DREJbMF0sIDAsIHNpemVvZihjLT5SZXF1ZXN0LkNEQikpOworCQkJYy0+UmVxdWVzdC5DREJbMF0gPSBjbWQ7ICAvKiByZXNldCAqLworCQkJYy0+UmVxdWVzdC5DREJbMV0gPSAweDA0OyAvKiByZXNldCBhIExVTiAqLwogCQljYXNlIDM6CS8qIE5vLU9wIG1lc3NhZ2UgKi8KIAkJCWMtPlJlcXVlc3QuQ0RCTGVuID0gMTsKIAkJCWMtPlJlcXVlc3QuVHlwZS5BdHRyaWJ1dGUgPSBBVFRSX1NJTVBMRTsKQEAgLTE4NjksNiArMTg4OCw1MiBAQAogCS8qIEludmFsaWQgYWRkcmVzcyB0byB0ZWxsIGNhbGxlciB3ZSByYW4gb3V0IG9mIHRpbWUgKi8KIAlyZXR1cm4gMTsKIH0KKworc3RhdGljIGludCBhZGRfc2VuZGNtZF9yZWplY3QoX191OCBjbWQsIGludCBjdGxyLCB1bnNpZ25lZCBsb25nIGNvbXBsZXRlKQoreworCS8qIFdlIGdldCBpbiBoZXJlIGlmIHNlbmRjbWQoKSBpcyBwb2xsaW5nIGZvciBjb21wbGV0aW9ucworCSAgIGFuZCBnZXRzIHNvbWUgY29tbWFuZCBiYWNrIHRoYXQgaXQgd2Fzbid0IGV4cGVjdGluZyAtLSAKKwkgICBzb21ldGhpbmcgb3RoZXIgdGhhbiB0aGF0IHdoaWNoIGl0IGp1c3Qgc2VudCBkb3duLiAgCisJICAgT3JkaW5hcmlseSwgdGhhdCBzaG91bGRuJ3QgaGFwcGVuLCBidXQgaXQgY2FuIGhhcHBlbiB3aGVuIAorCSAgIHRoZSBzY3NpIHRhcGUgc3R1ZmYgZ2V0cyBpbnRvIGVycm9yIGhhbmRsaW5nIG1vZGUsIGFuZAorCSAgIHN0YXJ0cyB1c2luZyBzZW5kY21kKCkgdG8gdHJ5IHRvIGFib3J0IGNvbW1hbmRzIGFuZCAKKwkgICByZXNldCB0YXBlIGRyaXZlcy4gIEluIHRoYXQgY2FzZSwgc2VuZGNtZCBtYXkgcGljayB1cAorCSAgIGNvbXBsZXRpb25zIG9mIGNvbW1hbmRzIHRoYXQgd2VyZSBzZW50IHRvIGxvZ2ljYWwgZHJpdmVzCisJICAgdGhyb3VnaCB0aGUgYmxvY2sgaS9vIHN5c3RlbSwgb3IgY2Npc3MgaW9jdGxzIGNvbXBsZXRpbmcsIGV0Yy4gCisJICAgSW4gdGhhdCBjYXNlLCB3ZSBuZWVkIHRvIHNhdmUgdGhvc2UgY29tcGxldGlvbnMgZm9yIGxhdGVyCisJICAgcHJvY2Vzc2luZyBieSB0aGUgaW50ZXJydXB0IGhhbmRsZXIuCisJKi8KKworI2lmZGVmIENPTkZJR19DSVNTX1NDU0lfVEFQRQorCXN0cnVjdCBzZW5kY21kX3JlamVjdF9saXN0ICpzcmwgPSAmaGJhW2N0bHJdLT5zY3NpX3JlamVjdHM7CQorCisJLyogSWYgaXQncyBub3QgdGhlIHNjc2kgdGFwZSBzdHVmZiBkb2luZyBlcnJvciBoYW5kbGluZywgKGFib3J0ICovCisJLyogb3IgcmVzZXQpIHRoZW4gd2UgZG9uJ3QgZXhwZWN0IGFueXRoaW5nIHdlaXJkLiAqLworCWlmIChjbWQgIT0gQ0NJU1NfUkVTRVRfTVNHICYmIGNtZCAhPSBDQ0lTU19BQk9SVF9NU0cpIHsKKyNlbmRpZgorCQlwcmludGsoIEtFUk5fV0FSTklORyAiY2Npc3MgY2Npc3MlZDogU2VuZENtZCAiCisJCSAgICAgICJJbnZhbGlkIGNvbW1hbmQgbGlzdCBhZGRyZXNzIHJldHVybmVkISAoJWx4KVxuIiwKKwkJCWN0bHIsIGNvbXBsZXRlKTsKKwkJLyogbm90IG11Y2ggd2UgY2FuIGRvLiAqLworI2lmZGVmIENPTkZJR19DSVNTX1NDU0lfVEFQRQorCQlyZXR1cm4gMTsKKwl9CisKKwkvKiBXZSd2ZSBzZW50IGRvd24gYW4gYWJvcnQgb3IgcmVzZXQsIGJ1dCBzb21ldGhpbmcgZWxzZQorCSAgIGhhcyBjb21wbGV0ZWQgKi8KKwlpZiAoc3JsLT5uY29tcGxldGlvbnMgPj0gKE5SX0NNRFMgKyAyKSkgeworCQkvKiBVaCBvaC4gIE5vIHJvb20gdG8gc2F2ZSBpdCBmb3IgbGF0ZXIuLi4gKi8KKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2Npc3MlZDogU2VuZGNtZDogSW52YWxpZCBjb21tYW5kIGFkZHIsICIKKwkJCSJyZWplY3QgbGlzdCBvdmVyZmxvdywgY29tbWFuZCBsb3N0IVxuIiwgY3Rscik7CisJCXJldHVybiAxOworCX0KKwkvKiBTYXZlIGl0IGZvciBsYXRlciAqLworCXNybC0+Y29tcGxldGVbc3JsLT5uY29tcGxldGlvbnNdID0gY29tcGxldGU7CisJc3JsLT5uY29tcGxldGlvbnMrKzsKKyNlbmRpZgorCXJldHVybiAwOworfQorCiAvKgogICogU2VuZCBhIGNvbW1hbmQgdG8gdGhlIGNvbnRyb2xsZXIsIGFuZCB3YWl0IGZvciBpdCB0byBjb21wbGV0ZS4gIAogICogT25seSB1c2VkIGF0IGluaXQgdGltZS4gCkBAIC0xODkxLDcgKzE5NTYsNyBAQAogCXVuc2lnbmVkIGxvbmcgY29tcGxldGU7CiAJY3Rscl9pbmZvX3QgKmluZm9fcD0gaGJhW2N0bHJdOwogCXU2NGJpdCBidWZmX2RtYV9oYW5kbGU7Ci0JaW50IHN0YXR1czsKKwlpbnQgc3RhdHVzLCBkb25lID0gMDsKIAogCWlmICgoYyA9IGNtZF9hbGxvYyhpbmZvX3AsIDEpKSA9PSBOVUxMKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImNjaXNzOiB1bmFibGUgdG8gZ2V0IG1lbW9yeSIpOwpAQCAtMTkxMyw3ICsxOTc4LDkgQEAKICAgICAgICAgaW5mb19wLT5hY2Nlc3Muc2V0X2ludHJfbWFzayhpbmZvX3AsIENDSVNTX0lOVFJfT0ZGKTsKIAkKIAkvKiBNYWtlIHN1cmUgdGhlcmUgaXMgcm9vbSBpbiB0aGUgY29tbWFuZCBGSUZPICovCi0gICAgICAgIC8qIEFjdHVhbGx5IGl0IHNob3VsZCBiZSBjb21wbGV0ZWx5IGVtcHR5IGF0IHRoaXMgdGltZS4gKi8KKyAgICAgICAgLyogQWN0dWFsbHkgaXQgc2hvdWxkIGJlIGNvbXBsZXRlbHkgZW1wdHkgYXQgdGhpcyB0aW1lICovCisJLyogdW5sZXNzIHdlIGFyZSBpbiBoZXJlIGRvaW5nIGVycm9yIGhhbmRsaW5nIGZvciB0aGUgc2NzaSAqLworCS8qIHRhcGUgc2lkZSBvZiB0aGUgZHJpdmVyLiAqLwogICAgICAgICBmb3IgKGkgPSAyMDAwMDA7IGkgPiAwOyBpLS0pIAogCXsKIAkJLyogaWYgZmlmbyBpc24ndCBmdWxsIGdvICovCkBAIC0xOTMwLDEzICsxOTk3LDI1IEBACiAgICAgICAgICAqIFNlbmQgdGhlIGNtZAogICAgICAgICAgKi8KICAgICAgICAgaW5mb19wLT5hY2Nlc3Muc3VibWl0X2NvbW1hbmQoaW5mb19wLCBjKTsKLSAgICAgICAgY29tcGxldGUgPSBwb2xsY29tcGxldGUoY3Rscik7CisJZG9uZSA9IDA7CisJZG8geworCQljb21wbGV0ZSA9IHBvbGxjb21wbGV0ZShjdGxyKTsKIAogI2lmZGVmIENDSVNTX0RFQlVHCi0JcHJpbnRrKEtFUk5fREVCVUcgImNjaXNzOiBjb21tYW5kIGNvbXBsZXRlZFxuIik7CisJCXByaW50ayhLRVJOX0RFQlVHICJjY2lzczogY29tbWFuZCBjb21wbGV0ZWRcbiIpOwogI2VuZGlmIC8qIENDSVNTX0RFQlVHICovCiAKLQlpZiAoY29tcGxldGUgIT0gMSkgeworCQlpZiAoY29tcGxldGUgPT0gMSkgeworCQkJcHJpbnRrKCBLRVJOX1dBUk5JTkcKKwkJCQkiY2Npc3MgY2Npc3MlZDogU2VuZENtZCBUaW1lb3V0IG91dCwgIgorCQkJCSJObyBjb21tYW5kIGxpc3QgYWRkcmVzcyByZXR1cm5lZCFcbiIsCisJCQkJY3Rscik7CisJCQlzdGF0dXMgPSBJT19FUlJPUjsKKwkJCWRvbmUgPSAxOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBUaGlzIHdpbGwgbmVlZCB0byBjaGFuZ2UgZm9yIGRpcmVjdCBsb29rdXAgY29tcGxldGlvbnMgKi8KIAkJaWYgKCAoY29tcGxldGUgJiBDSVNTX0VSUk9SX0JJVCkKIAkJICAgICAmJiAoY29tcGxldGUgJiB+Q0lTU19FUlJPUl9CSVQpID09IGMtPmJ1c2FkZHIpCiAJCSAgICAgewpAQCAtMTk3Niw2ICsyMDU1LDEwIEBACiAJCQkJCQlzdGF0dXMgPSBJT19FUlJPUjsKIAkJCQkJCWdvdG8gY2xlYW51cDE7CiAJCQkJCX0KKwkJCQl9IGVsc2UgaWYgKGMtPmVycl9pbmZvLT5Db21tYW5kU3RhdHVzID09IENNRF9VTkFCT1JUQUJMRSkgeworCQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJjY2lzcyVkOiBjb21tYW5kIGNvdWxkIG5vdCBiZSBhYm9ydGVkLlxuIiwgY3Rscik7CisJCQkJCXN0YXR1cyA9IElPX0VSUk9SOworCQkJCQlnb3RvIGNsZWFudXAxOwogCQkJCX0KIAkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJjaXNzIGNpc3MlZDogc2VuZGNtZCIKIAkJCQkiIEVycm9yICV4IFxuIiwgY3RsciwgCkBAIC0xOTkwLDIwICsyMDczLDE1IEBACiAJCQkJZ290byBjbGVhbnVwMTsKIAkJCX0KIAkJfQorCQkvKiBUaGlzIHdpbGwgbmVlZCBjaGFuZ2luZyBmb3IgZGlyZWN0IGxvb2t1cCBjb21wbGV0aW9ucyAqLwogICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZSAhPSBjLT5idXNhZGRyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoIEtFUk5fV0FSTklORyAiY2Npc3MgY2Npc3MlZDogU2VuZENtZCAiCi0gICAgICAgICAgICAgICAgICAgICAgIkludmFsaWQgY29tbWFuZCBsaXN0IGFkZHJlc3MgcmV0dXJuZWQhICglbHgpXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdGxyLCBjb21wbGV0ZSk7Ci0JCQlzdGF0dXMgPSBJT19FUlJPUjsKLQkJCWdvdG8gY2xlYW51cDE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHByaW50ayggS0VSTl9XQVJOSU5HCi0gICAgICAgICAgICAgICAgICAgICAgICAiY2Npc3MgY2Npc3MlZDogU2VuZENtZCBUaW1lb3V0IG91dCwgIgotICAgICAgICAgICAgICAgICAgICAgICAgIk5vIGNvbW1hbmQgbGlzdCBhZGRyZXNzIHJldHVybmVkIVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGN0bHIpOwotCQlzdGF0dXMgPSBJT19FUlJPUjsKLSAgICAgICAgfQorCQkJaWYgKGFkZF9zZW5kY21kX3JlamVjdChjbWQsIGN0bHIsIGNvbXBsZXRlKSAhPSAwKSB7CisJCQkJQlVHKCk7IC8qIHdlIGFyZSBwcmV0dHkgbXVjaCBob3NlZCBpZiB3ZSBnZXQgaGVyZS4gKi8KKwkJCX0KKwkJCWNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0gZWxzZQorCQkJZG9uZSA9IDE7CisgICAgICAgIH0gd2hpbGUgKCFkb25lKTsKIAkJCiBjbGVhbnVwMToJCiAJLyogdW5sb2NrIHRoZSBkYXRhIGJ1ZmZlciBmcm9tIERNQSAqLwpAQCAtMjAxMSw2ICsyMDg5LDExIEBACiAJYnVmZl9kbWFfaGFuZGxlLnZhbDMyLnVwcGVyID0gYy0+U0dbMF0uQWRkci51cHBlcjsKIAlwY2lfdW5tYXBfc2luZ2xlKGluZm9fcC0+cGRldiwgKGRtYV9hZGRyX3QpIGJ1ZmZfZG1hX2hhbmRsZS52YWwsCiAJCQkJYy0+U0dbMF0uTGVuLCBQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOworI2lmZGVmIENPTkZJR19DSVNTX1NDU0lfVEFQRQorCS8qIGlmIHdlIHNhdmVkIHNvbWUgY29tbWFuZHMgZm9yIGxhdGVyLCBwcm9jZXNzIHRoZW0gbm93LiAqLworCWlmIChpbmZvX3AtPnNjc2lfcmVqZWN0cy5uY29tcGxldGlvbnMgPiAwKQorCQlkb19jY2lzc19pbnRyKDAsIGluZm9fcCwgTlVMTCk7CisjZW5kaWYKIAljbWRfZnJlZShpbmZvX3AsIGMsIDEpOwogCXJldHVybiAoc3RhdHVzKTsKIH0gCkBAIC0yMzM1LDYgKzI0MTgsNDggQEAKIAlzdGFydF9pbyhoKTsKIH0KIAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF9uZXh0X2NvbXBsZXRpb24oY3Rscl9pbmZvX3QgKmgpCit7CisjaWZkZWYgQ09ORklHX0NJU1NfU0NTSV9UQVBFCisJLyogQW55IHJlamVjdHMgZnJvbSBzZW5kY21kKCkgbHlpbmcgYXJvdW5kPyBQcm9jZXNzIHRoZW0gZmlyc3QgKi8KKwlpZiAoaC0+c2NzaV9yZWplY3RzLm5jb21wbGV0aW9ucyA9PSAwKQorCQlyZXR1cm4gaC0+YWNjZXNzLmNvbW1hbmRfY29tcGxldGVkKGgpOworCWVsc2UgeworCQlzdHJ1Y3Qgc2VuZGNtZF9yZWplY3RfbGlzdCAqc3JsOworCQlpbnQgbjsKKwkJc3JsID0gJmgtPnNjc2lfcmVqZWN0czsKKwkJbiA9IC0tc3JsLT5uY29tcGxldGlvbnM7CisJCS8qIHByaW50aygiY2Npc3MlZDogcHJvY2Vzc2luZyBzYXZlZCByZWplY3RcbiIsIGgtPmN0bHIpOyAqLworCQlwcmludGsoInAiKTsKKwkJcmV0dXJuIHNybC0+Y29tcGxldGVbbl07CisJfQorI2Vsc2UKKwlyZXR1cm4gaC0+YWNjZXNzLmNvbW1hbmRfY29tcGxldGVkKGgpOworI2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGludGVycnVwdF9wZW5kaW5nKGN0bHJfaW5mb190ICpoKQoreworI2lmZGVmIENPTkZJR19DSVNTX1NDU0lfVEFQRQorCXJldHVybiAoIGgtPmFjY2Vzcy5pbnRyX3BlbmRpbmcoaCkgCisJCXx8IChoLT5zY3NpX3JlamVjdHMubmNvbXBsZXRpb25zID4gMCkpOworI2Vsc2UKKwlyZXR1cm4gaC0+YWNjZXNzLmludHJfcGVuZGluZyhoKTsKKyNlbmRpZgorfQorCitzdGF0aWMgaW5saW5lIGxvbmcgaW50ZXJydXB0X25vdF9mb3JfdXMoY3Rscl9pbmZvX3QgKmgpCit7CisjaWZkZWYgQ09ORklHX0NJU1NfU0NTSV9UQVBFCisJcmV0dXJuICgoKGgtPmFjY2Vzcy5pbnRyX3BlbmRpbmcoaCkgPT0gMCkgfHwgCisJCSAoaC0+aW50ZXJydXB0c19lbmFibGVkID09IDApKSAKKwkgICAgICAmJiAoaC0+c2NzaV9yZWplY3RzLm5jb21wbGV0aW9ucyA9PSAwKSk7CisjZWxzZQorCXJldHVybiAoKChoLT5hY2Nlc3MuaW50cl9wZW5kaW5nKGgpID09IDApIHx8IAorCQkgKGgtPmludGVycnVwdHNfZW5hYmxlZCA9PSAwKSkpOworI2VuZGlmCit9CisKIHN0YXRpYyBpcnFyZXR1cm5fdCBkb19jY2lzc19pbnRyKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJY3Rscl9pbmZvX3QgKmggPSBkZXZfaWQ7CkBAIC0yMzQ0LDE5ICsyNDY5LDE1IEBACiAJaW50IGo7CiAJaW50IHN0YXJ0X3F1ZXVlID0gaC0+bmV4dF90b19ydW47CiAKLQkvKiBJcyB0aGlzIGludGVycnVwdCBmb3IgdXM/ICovCi0JaWYgKCggaC0+YWNjZXNzLmludHJfcGVuZGluZyhoKSA9PSAwKSB8fCAoaC0+aW50ZXJydXB0c19lbmFibGVkID09IDApKQorCWlmIChpbnRlcnJ1cHRfbm90X2Zvcl91cyhoKSkKIAkJcmV0dXJuIElSUV9OT05FOwotCiAJLyoKIAkgKiBJZiB0aGVyZSBhcmUgY29tcGxldGVkIGNvbW1hbmRzIGluIHRoZSBjb21wbGV0aW9uIHF1ZXVlLAogCSAqIHdlIGhhZCBiZXR0ZXIgZG8gc29tZXRoaW5nIGFib3V0IGl0LgogCSAqLwogCXNwaW5fbG9ja19pcnFzYXZlKENDSVNTX0xPQ0soaC0+Y3RsciksIGZsYWdzKTsKLQl3aGlsZSggaC0+YWNjZXNzLmludHJfcGVuZGluZyhoKSkKLQl7Ci0JCXdoaWxlKChhID0gaC0+YWNjZXNzLmNvbW1hbmRfY29tcGxldGVkKGgpKSAhPSBGSUZPX0VNUFRZKSAKLQkJeworCXdoaWxlIChpbnRlcnJ1cHRfcGVuZGluZyhoKSkgeworCQl3aGlsZSgoYSA9IGdldF9uZXh0X2NvbXBsZXRpb24oaCkpICE9IEZJRk9fRU1QVFkpIHsKIAkJCWExID0gYTsKIAkJCWlmICgoYSAmIDB4MDQpKSB7CiAJCQkJYTIgPSAoYSA+PiAzKTsKQEAgLTI5NjMsNyArMzA4NCwxNSBAQAogICAgICAgICAgICAgICAgIHByaW50ayggS0VSTl9FUlIgImNjaXNzOiBvdXQgb2YgbWVtb3J5Iik7CiAJCWdvdG8gY2xlYW40OwogCX0KLQorI2lmZGVmIENPTkZJR19DSVNTX1NDU0lfVEFQRQorCWhiYVtpXS0+c2NzaV9yZWplY3RzLmNvbXBsZXRlID0gCisJCWttYWxsb2Moc2l6ZW9mKGhiYVtpXS0+c2NzaV9yZWplY3RzLmNvbXBsZXRlWzBdKSAqIAorCQkJKE5SX0NNRFMgKyA1KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGhiYVtpXS0+c2NzaV9yZWplY3RzLmNvbXBsZXRlID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBwcmludGsoIEtFUk5fRVJSICJjY2lzczogb3V0IG9mIG1lbW9yeSIpOworCQlnb3RvIGNsZWFuNDsKKwl9CisjZW5kaWYKIAlzcGluX2xvY2tfaW5pdCgmaGJhW2ldLT5sb2NrKTsKIAogCS8qIEluaXRpYWxpemUgdGhlIHBkZXYgZHJpdmVyIHByaXZhdGUgZGF0YS4gCkBAIC0zMDMxLDYgKzMxNjAsMTAgQEAKIAlyZXR1cm4oMSk7CiAKIGNsZWFuNDoKKyNpZmRlZiBDT05GSUdfQ0lTU19TQ1NJX1RBUEUKKwlpZihoYmFbaV0tPnNjc2lfcmVqZWN0cy5jb21wbGV0ZSkKKwkJa2ZyZWUoaGJhW2ldLT5zY3NpX3JlamVjdHMuY29tcGxldGUpOworI2VuZGlmCiAJa2ZyZWUoaGJhW2ldLT5jbWRfcG9vbF9iaXRzKTsKIAlpZihoYmFbaV0tPmNtZF9wb29sKQogCQlwY2lfZnJlZV9jb25zaXN0ZW50KGhiYVtpXS0+cGRldiwKQEAgLTMxMDMsNiArMzIzNiw5IEBACiAJcGNpX2ZyZWVfY29uc2lzdGVudChoYmFbaV0tPnBkZXYsIE5SX0NNRFMgKiBzaXplb2YoIEVycm9ySW5mb19zdHJ1Y3QpLAogCQloYmFbaV0tPmVycmluZm9fcG9vbCwgaGJhW2ldLT5lcnJpbmZvX3Bvb2xfZGhhbmRsZSk7CiAJa2ZyZWUoaGJhW2ldLT5jbWRfcG9vbF9iaXRzKTsKKyNpZmRlZiBDT05GSUdfQ0lTU19TQ1NJX1RBUEUKKwlrZnJlZShoYmFbaV0tPnNjc2lfcmVqZWN0cy5jb21wbGV0ZSk7CisjZW5kaWYKICAJcmVsZWFzZV9pb19tZW0oaGJhW2ldKTsKIAlmcmVlX2hiYShpKTsKIH0JCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2NjaXNzLmggYi9kcml2ZXJzL2Jsb2NrL2NjaXNzLmgKaW5kZXggZWYyNzdiYS4uM2IwODU4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9jY2lzcy5oCisrKyBiL2RyaXZlcnMvYmxvY2svY2Npc3MuaApAQCAtNDQsNiArNDQsMTQgQEAKIAkJCQkgICovCiB9IGRyaXZlX2luZm9fc3RydWN0OwogCisjaWZkZWYgQ09ORklHX0NJU1NfU0NTSV9UQVBFCisKK3N0cnVjdCBzZW5kY21kX3JlamVjdF9saXN0IHsKKwlpbnQgbmNvbXBsZXRpb25zOworCXVuc2lnbmVkIGxvbmcgKmNvbXBsZXRlOyAvKiBhcnJheSBvZiBOUl9DTURTIHRhZ3MgKi8KK307CisKKyNlbmRpZgogc3RydWN0IGN0bHJfaW5mbyAKIHsKIAlpbnQJY3RscjsKQEAgLTEwMCw2ICsxMDgsOSBAQAogCXN0cnVjdCBnZW5kaXNrICAgKmdlbmRpc2tbTldEXTsKICNpZmRlZiBDT05GSUdfQ0lTU19TQ1NJX1RBUEUKIAl2b2lkICpzY3NpX2N0bHI7IC8qIHB0ciB0byBzdHJ1Y3R1cmUgY29udGFpbmluZyBzY3NpIHJlbGF0ZWQgc3R1ZmYgKi8KKwkvKiBsaXN0IG9mIGJsb2NrIHNpZGUgY29tbWFuZHMgdGhlIHNjc2kgZXJyb3IgaGFuZGxpbmcgc3Vja2VkIHVwICovCisJLyogYW5kIHNhdmVkIGZvciBsYXRlciBwcm9jZXNzaW5nICovCisJc3RydWN0IHNlbmRjbWRfcmVqZWN0X2xpc3Qgc2NzaV9yZWplY3RzOwogI2VuZGlmCiAJdW5zaWduZWQgY2hhciBhbGl2ZTsKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2NjaXNzX3Njc2kuYyBiL2RyaXZlcnMvYmxvY2svY2Npc3Nfc2NzaS5jCmluZGV4IGVjMjc5NzYuLjMyMjZhYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svY2Npc3Nfc2NzaS5jCisrKyBiL2RyaXZlcnMvYmxvY2svY2Npc3Nfc2NzaS5jCkBAIC00Miw2ICs0Miw5IEBACiAKICNpbmNsdWRlICJjY2lzc19zY3NpLmgiCiAKKyNkZWZpbmUgQ0NJU1NfQUJPUlRfTVNHIDB4MDAKKyNkZWZpbmUgQ0NJU1NfUkVTRVRfTVNHIDB4MDEKKwogLyogc29tZSBwcm90b3R5cGVzLi4uICovIAogc3RhdGljIGludCBzZW5kY21kKAogCV9fdTgJY21kLApAQCAtNjcsNiArNzAsOCBAQAogCiBzdGF0aWMgaW50IGNjaXNzX3Njc2lfcXVldWVfY29tbWFuZCAoc3RydWN0IHNjc2lfY21uZCAqY21kLAogCQl2b2lkICgqIGRvbmUpKHN0cnVjdCBzY3NpX2NtbmQgKikpOworc3RhdGljIGludCBjY2lzc19laF9kZXZpY2VfcmVzZXRfaGFuZGxlcihzdHJ1Y3Qgc2NzaV9jbW5kICopOworc3RhdGljIGludCBjY2lzc19laF9hYm9ydF9oYW5kbGVyKHN0cnVjdCBzY3NpX2NtbmQgKik7CiAKIHN0YXRpYyBzdHJ1Y3QgY2Npc3Nfc2NzaV9oYmFfdCBjY2lzc3Njc2lbTUFYX0NUTFJdID0gewogCXsgLm5hbWUgPSAiY2Npc3MwIiwgLm5kZXZpY2VzID0gMCB9LApAQCAtOTAsNiArOTUsOSBAQAogCS5zZ190YWJsZXNpemUJCT0gTUFYU0dFTlRSSUVTLAogCS5jbWRfcGVyX2x1bgkJPSAxLAogCS51c2VfY2x1c3RlcmluZwkJPSBESVNBQkxFX0NMVVNURVJJTkcsCisJLyogQ2FuJ3QgaGF2ZSBlaF9idXNfcmVzZXRfaGFuZGxlciBvciBlaF9ob3N0X3Jlc2V0X2hhbmRsZXIgZm9yIGNjaXNzICovCisJLmVoX2RldmljZV9yZXNldF9oYW5kbGVyPSBjY2lzc19laF9kZXZpY2VfcmVzZXRfaGFuZGxlciwKKwkuZWhfYWJvcnRfaGFuZGxlcgk9IGNjaXNzX2VoX2Fib3J0X2hhbmRsZXIsCiB9OwogCiAjcHJhZ21hIHBhY2soMSkKQEAgLTI0Nyw3ICsyNTUsNyBAQAogI2RlZmluZSBERVZJQ0VUWVBFKG4pIChuPDAgfHwgbj5NQVhfU0NTSV9ERVZJQ0VfQ09ERSkgPyBcCiAJIlVua25vd24iIDogc2NzaV9kZXZpY2VfdHlwZXNbbl0KIAotI2lmIDAKKyNpZiAxCiBzdGF0aWMgaW50IHhtYXJnaW49ODsKIHN0YXRpYyBpbnQgYW1hcmdpbj02MDsKIApAQCAtMTQ0OCw2ICsxNDU2LDc4IEBACiAJKnBvcyArPSBzaXplOyAqbGVuICs9IHNpemU7CiB9CiAKKy8qIE5lZWQgYXQgbGVhc3Qgb25lIG9mIHRoZXNlIGVycm9yIGhhbmRsZXJzIHRvIGtlZXAgLi4vc2NzaS9ob3N0cy5jIGZyb20gCisgKiBjb21wbGFpbmluZy4gIERvaW5nIGEgaG9zdC0gb3IgYnVzLXJlc2V0IGNhbid0IGRvIGFueXRoaW5nIGdvb2QgaGVyZS4gCisgKiBEZXNwaXRlIHdoYXQgaXQgbWlnaHQgc2F5IGluIHNjc2lfZXJyb3IuYywgdGhlcmUgbWF5IHdlbGwgYmUgY29tbWFuZHMKKyAqIG9uIHRoZSBjb250cm9sbGVyLCBhcyB0aGUgY2Npc3MgZHJpdmVyIHJlZ2lzdGVycyB0d2ljZSwgb25jZSBhcyBhIGJsb2NrCisgKiBkZXZpY2UgZm9yIHRoZSBsb2dpY2FsIGRyaXZlcywgYW5kIG9uY2UgYXMgYSBzY3NpIGRldmljZSwgZm9yIGFueSB0YXBlCisgKiBkcml2ZXMuICBTbyB3ZSBrbm93IHRoZXJlIGFyZSBubyBjb21tYW5kcyBvdXQgb24gdGhlIHRhcGUgZHJpdmVzLCBidXQgd2UKKyAqIGRvbid0IGtub3cgdGhlcmUgYXJlIG5vIGNvbW1hbmRzIG9uIHRoZSBjb250cm9sbGVyLCBhbmQgaXQgaXMgbGlrZWx5IAorICogdGhhdCB0aGVyZSBwcm9iYWJseSBhcmUsIGFzIHRoZSBjY2lzcyBibG9jayBkZXZpY2UgaXMgbW9zdCBjb21tb25seSB1c2VkCisgKiBhcyBhIGJvb3QgZGV2aWNlIChlbWJlZGRlZCBjb250cm9sbGVyIG9uIEhQL0NvbXBhcSBzeXN0ZW1zLikKKyovCisKK3N0YXRpYyBpbnQgY2Npc3NfZWhfZGV2aWNlX3Jlc2V0X2hhbmRsZXIoc3RydWN0IHNjc2lfY21uZCAqc2NzaWNtZCkKK3sKKwlpbnQgcmM7CisJQ29tbWFuZExpc3Rfc3RydWN0ICpjbWRfaW5fdHJvdWJsZTsKKwljdGxyX2luZm9fdCAqKmM7CisJaW50IGN0bHI7CisKKwkvKiBmaW5kIHRoZSBjb250cm9sbGVyIHRvIHdoaWNoIHRoZSBjb21tYW5kIHRvIGJlIGFib3J0ZWQgd2FzIHNlbnQgKi8KKwljID0gKGN0bHJfaW5mb190ICoqKSAmc2NzaWNtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YVswXTsJCisJaWYgKGMgPT0gTlVMTCkgLyogcGFyYW5vaWEgKi8KKwkJcmV0dXJuIEZBSUxFRDsKKwljdGxyID0gKCpjKS0+Y3RscjsKKwlwcmludGsoS0VSTl9XQVJOSU5HICJjY2lzcyVkOiByZXNldHRpbmcgdGFwZSBkcml2ZSBvciBtZWRpdW0gY2hhbmdlci5cbiIsIGN0bHIpOworCisJLyogZmluZCB0aGUgY29tbWFuZCB0aGF0J3MgZ2l2aW5nIHVzIHRyb3VibGUgKi8KKwljbWRfaW5fdHJvdWJsZSA9IChDb21tYW5kTGlzdF9zdHJ1Y3QgKikgc2NzaWNtZC0+aG9zdF9zY3JpYmJsZTsKKwlpZiAoY21kX2luX3Ryb3VibGUgPT0gTlVMTCkgeyAvKiBwYXJhbm9pYSAqLworCQlyZXR1cm4gRkFJTEVEOworCX0KKwkvKiBzZW5kIGEgcmVzZXQgdG8gdGhlIFNDU0kgTFVOIHdoaWNoIHRoZSBjb21tYW5kIHdhcyBzZW50IHRvICovCisJcmMgPSBzZW5kY21kKENDSVNTX1JFU0VUX01TRywgY3RsciwgTlVMTCwgMCwgMiwgMCwgMCwgCisJCSh1bnNpZ25lZCBjaGFyICopICZjbWRfaW5fdHJvdWJsZS0+SGVhZGVyLkxVTi5MdW5BZGRyQnl0ZXNbMF0sIAorCQlUWVBFX01TRyk7CisJLyogc2VuZGNtZCB0dXJuZWQgb2ZmIGludGVycnB1dHMgb24gdGhlIGJvYXJkLCB0dXJuICdlbSBiYWNrIG9uLiAqLworCSgqYyktPmFjY2Vzcy5zZXRfaW50cl9tYXNrKCpjLCBDQ0lTU19JTlRSX09OKTsKKwlpZiAocmMgPT0gMCkKKwkJcmV0dXJuIFNVQ0NFU1M7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiY2Npc3MlZDogcmVzZXR0aW5nIGRldmljZSBmYWlsZWQuXG4iLCBjdGxyKTsKKwlyZXR1cm4gRkFJTEVEOworfQorCitzdGF0aWMgaW50ICBjY2lzc19laF9hYm9ydF9oYW5kbGVyKHN0cnVjdCBzY3NpX2NtbmQgKnNjc2ljbWQpCit7CisJaW50IHJjOworCUNvbW1hbmRMaXN0X3N0cnVjdCAqY21kX3RvX2Fib3J0OworCWN0bHJfaW5mb190ICoqYzsKKwlpbnQgY3RscjsKKworCS8qIGZpbmQgdGhlIGNvbnRyb2xsZXIgdG8gd2hpY2ggdGhlIGNvbW1hbmQgdG8gYmUgYWJvcnRlZCB3YXMgc2VudCAqLworCWMgPSAoY3Rscl9pbmZvX3QgKiopICZzY3NpY21kLT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhWzBdOwkKKwlpZiAoYyA9PSBOVUxMKSAvKiBwYXJhbm9pYSAqLworCQlyZXR1cm4gRkFJTEVEOworCWN0bHIgPSAoKmMpLT5jdGxyOworCXByaW50ayhLRVJOX1dBUk5JTkcgImNjaXNzJWQ6IGFib3J0aW5nIHRhcmR5IFNDU0kgY21kXG4iLCBjdGxyKTsKKworCS8qIGZpbmQgdGhlIGNvbW1hbmQgdG8gYmUgYWJvcnRlZCAqLworCWNtZF90b19hYm9ydCA9IChDb21tYW5kTGlzdF9zdHJ1Y3QgKikgc2NzaWNtZC0+aG9zdF9zY3JpYmJsZTsKKwlpZiAoY21kX3RvX2Fib3J0ID09IE5VTEwpIC8qIHBhcmFub2lhICovCisJCXJldHVybiBGQUlMRUQ7CisJcmMgPSBzZW5kY21kKENDSVNTX0FCT1JUX01TRywgY3RsciwgJmNtZF90b19hYm9ydC0+SGVhZGVyLlRhZywgCisJCTAsIDIsIDAsIDAsIAorCQkodW5zaWduZWQgY2hhciAqKSAmY21kX3RvX2Fib3J0LT5IZWFkZXIuTFVOLkx1bkFkZHJCeXRlc1swXSwgCisJCVRZUEVfTVNHKTsKKwkvKiBzZW5kY21kIHR1cm5lZCBvZmYgaW50ZXJycHV0cyBvbiB0aGUgYm9hcmQsIHR1cm4gJ2VtIGJhY2sgb24uICovCisJKCpjKS0+YWNjZXNzLnNldF9pbnRyX21hc2soKmMsIENDSVNTX0lOVFJfT04pOworCWlmIChyYyA9PSAwKQorCQlyZXR1cm4gU1VDQ0VTUzsKKwlyZXR1cm4gRkFJTEVEOworCit9CisKICNlbHNlIC8qIG5vIENPTkZJR19DSVNTX1NDU0lfVEFQRSAqLwogCiAvKiBJZiBubyB0YXBlIHN1cHBvcnQsIHRoZW4gdGhlc2UgYmVjb21lIGRlZmluZWQgb3V0IG9mIGV4aXN0ZW5jZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9mbG9wcHkuYyBiL2RyaXZlcnMvYmxvY2svZmxvcHB5LmMKaW5kZXggNzdjZmQ2OS4uMTNiOGE5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9mbG9wcHkuYworKysgYi9kcml2ZXJzL2Jsb2NrL2Zsb3BweS5jCkBAIC0zNzE0LDYgKzM3MTQsMTIgQEAKIAkJVVNFVEYoRkRfVkVSSUZZKTsKIAl9CiAKKwkvKiBzZXQgdW5kZXJseWluZyBnZW5kaXNrIHBvbGljeSB0byByZWZsZWN0IHJlYWwgcm8vcncgc3RhdHVzICovCisJaWYgKFVURVNURihGRF9ESVNLX1dSSVRBQkxFKSkKKwkJaW5vZGUtPmlfYmRldi0+YmRfZGlzay0+cG9saWN5ID0gMDsKKwllbHNlCisJCWlub2RlLT5pX2JkZXYtPmJkX2Rpc2stPnBvbGljeSA9IDE7CisKIAlpZiAoVURSUy0+ZmRfcmVmID09IC0xIHx8IChVRFJTLT5mZF9yZWYgJiYgKGZpbHAtPmZfZmxhZ3MgJiBPX0VYQ0wpKSkKIAkJZ290byBvdXQyOwogCkBAIC0zNzcwLDggKzM3NzYsNyBAQAogCS8qIEFsbG93IGlvY3RscyBpZiB3ZSBoYXZlIHdyaXRlLXBlcm1pc3Npb25zIGV2ZW4gaWYgcmVhZC1vbmx5IG9wZW4uCiAJICogTmVlZGVkIHNvIHRoYXQgcHJvZ3JhbXMgc3VjaCBhcyBmZHJhd2NtZCBzdGlsbCBjYW4gd29yayBvbiB3cml0ZQogCSAqIHByb3RlY3RlZCBkaXNrcyAqLwotCWlmIChmaWxwLT5mX21vZGUgJiAyCi0JICAgIHx8IHBlcm1pc3Npb24oZmlscC0+Zl9kZW50cnktPmRfaW5vZGUsIDIsIE5VTEwpID09IDApCisJaWYgKChmaWxwLT5mX21vZGUgJiBGTU9ERV9XUklURSkgfHwgIWZpbGVfcGVybWlzc2lvbihmaWxwLCBNQVlfV1JJVEUpKQogCQlmaWxwLT5wcml2YXRlX2RhdGEgPSAodm9pZCAqKTg7CiAKIAlpZiAoVUZEQ1MtPnJhd2NtZCA9PSAxKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9wa3RjZHZkLmMgYi9kcml2ZXJzL2Jsb2NrL3BrdGNkdmQuYwppbmRleCBhMjgwZTY3Li41OWU1OTgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3BrdGNkdmQuYworKysgYi9kcml2ZXJzL2Jsb2NrL3BrdGNkdmQuYwpAQCAtNTExLDE0ICs1MTEsMTEgQEAKICAqLwogc3RhdGljIHZvaWQgcGt0X2lvc2NoZWRfcHJvY2Vzc19xdWV1ZShzdHJ1Y3QgcGt0Y2R2ZF9kZXZpY2UgKnBkKQogewotCXJlcXVlc3RfcXVldWVfdCAqcTsKIAogCWlmIChhdG9taWNfcmVhZCgmcGQtPmlvc2NoZWQuYXR0ZW50aW9uKSA9PSAwKQogCQlyZXR1cm47CiAJYXRvbWljX3NldCgmcGQtPmlvc2NoZWQuYXR0ZW50aW9uLCAwKTsKIAotCXEgPSBiZGV2X2dldF9xdWV1ZShwZC0+YmRldik7Ci0KIAlmb3IgKDs7KSB7CiAJCXN0cnVjdCBiaW8gKmJpbzsKIAkJaW50IHJlYWRzX3F1ZXVlZCwgd3JpdGVzX3F1ZXVlZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2JwYTEweC5jIGIvZHJpdmVycy9ibHVldG9vdGgvYnBhMTB4LmMKaW5kZXggZWNiZWI3ZS4uMzk0Nzk2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvYnBhMTB4LmMKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvYnBhMTB4LmMKQEAgLTg0LDggKzg0LDggQEAKIAogc3RydWN0IGhjaV92ZW5kb3JfaGRyIHsKIAlfX3U4CXR5cGU7Ci0JX191MTYJc251bTsKLQlfX3UxNglkbGVuOworCV9fbGUxNglzbnVtOworCV9fbGUxNglkbGVuOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIHN0YXRpYyB2b2lkIGJwYTEweF9yZWN2X2J1bGsoc3RydWN0IGJwYTEweF9kYXRhICpkYXRhLCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV91c2IuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV91c2IuYwppbmRleCBmNTEwYjI1Li4wNTdjYjJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9oY2lfdXNiLmMKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvaGNpX3VzYi5jCkBAIC02NSw2ICs2NSw3IEBACiAjZW5kaWYKIAogc3RhdGljIGludCBpZ25vcmUgPSAwOworc3RhdGljIGludCBpZ25vcmVfZGdhID0gMDsKIHN0YXRpYyBpbnQgaWdub3JlX2NzciA9IDA7CiBzdGF0aWMgaW50IGlnbm9yZV9zbmlmZmVyID0gMDsKIHN0YXRpYyBpbnQgcmVzZXQgPSAwOwpAQCAtODQxLDYgKzg0Miw5IEBACiAJaWYgKGlnbm9yZSB8fCBpZC0+ZHJpdmVyX2luZm8gJiBIQ0lfSUdOT1JFKQogCQlyZXR1cm4gLUVOT0RFVjsKIAorCWlmIChpZ25vcmVfZGdhICYmIGlkLT5kcml2ZXJfaW5mbyAmIEhDSV9ESUdJQU5TV0VSKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCWlmIChpZ25vcmVfY3NyICYmIGlkLT5kcml2ZXJfaW5mbyAmIEhDSV9DU1IpCiAJCXJldHVybiAtRU5PREVWOwogCkBAIC0xMDcwLDYgKzEwNzQsOSBAQAogbW9kdWxlX3BhcmFtKGlnbm9yZSwgYm9vbCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGlnbm9yZSwgIklnbm9yZSBkZXZpY2VzIGZyb20gdGhlIG1hdGNoaW5nIHRhYmxlIik7CiAKK21vZHVsZV9wYXJhbShpZ25vcmVfZGdhLCBib29sLCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoaWdub3JlX2RnYSwgIklnbm9yZSBkZXZpY2VzIHdpdGggaWQgMDhmZDowMDAxIik7CisKIG1vZHVsZV9wYXJhbShpZ25vcmVfY3NyLCBib29sLCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoaWdub3JlX2NzciwgIklnbm9yZSBkZXZpY2VzIHdpdGggaWQgMGExMjowMDAxIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvYWxpLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9hbGktYWdwLmMKaW5kZXggYmE1NGI1OC4uYjAyZmMyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9hbGktYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9hbGktYWdwLmMKQEAgLTM4OSw3ICszODksNiBAQAogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGFncF9hbGlfcGNpX3RhYmxlKTsKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGFncF9hbGlfcGNpX2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gImFncGdhcnQtYWxpIiwKIAkuaWRfdGFibGUJPSBhZ3BfYWxpX3BjaV90YWJsZSwKIAkucHJvYmUJCT0gYWdwX2FsaV9wcm9iZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvYW1kLWs3LWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9hbWQtazctYWdwLmMKaW5kZXggNDBmY2Q4OGIyLi4xZjc3NjY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2FtZC1rNy1hZ3AuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL2FtZC1rNy1hZ3AuYwpAQCAtNTE1LDcgKzUxNSw2IEBACiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYWdwX2FtZGs3X3BjaV90YWJsZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBhZ3BfYW1kazdfcGNpX2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gImFncGdhcnQtYW1kazciLAogCS5pZF90YWJsZQk9IGFncF9hbWRrN19wY2lfdGFibGUsCiAJLnByb2JlCQk9IGFncF9hbWRrN19wcm9iZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvYW1kNjQtYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2FtZDY0LWFncC5jCmluZGV4IDhmNzQ4ZmQuLjc4Y2U5OGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvYW1kNjQtYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9hbWQ2NC1hZ3AuYwpAQCAtNzAzLDcgKzcwMyw2IEBACiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYWdwX2FtZDY0X3BjaV90YWJsZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBhZ3BfYW1kNjRfcGNpX2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gImFncGdhcnQtYW1kNjQiLAogCS5pZF90YWJsZQk9IGFncF9hbWQ2NF9wY2lfdGFibGUsCiAJLnByb2JlCQk9IGFncF9hbWQ2NF9wcm9iZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvYXRpLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9hdGktYWdwLmMKaW5kZXggZmJkNDE1NS4uNTMzNzJhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9hdGktYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9hdGktYWdwLmMKQEAgLTUyMSw3ICs1MjEsNiBAQAogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGFncF9hdGlfcGNpX3RhYmxlKTsKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGFncF9hdGlfcGNpX2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gImFncGdhcnQtYXRpIiwKIAkuaWRfdGFibGUJPSBhZ3BfYXRpX3BjaV90YWJsZSwKIAkucHJvYmUJCT0gYWdwX2F0aV9wcm9iZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvYmFja2VuZC5jIGIvZHJpdmVycy9jaGFyL2FncC9iYWNrZW5kLmMKaW5kZXggNzNmMzMzZi4uMjdiY2EzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9iYWNrZW5kLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9iYWNrZW5kLmMKQEAgLTE0Nyw2ICsxNDcsNyBAQAogCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAidW5hYmxlIHRvIGdldCBtZW1vcnkgZm9yIHNjcmF0Y2ggcGFnZS5cbiIpOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KKwkJZmx1c2hfYWdwX21hcHBpbmdzKCk7CiAKIAkJYnJpZGdlLT5zY3JhdGNoX3BhZ2VfcmVhbCA9IHZpcnRfdG9fZ2FydChhZGRyKTsKIAkJYnJpZGdlLT5zY3JhdGNoX3BhZ2UgPQpAQCAtMTg3LDkgKzE4OCwxMSBAQAogCXJldHVybiAwOwogCiBlcnJfb3V0OgotCWlmIChicmlkZ2UtPmRyaXZlci0+bmVlZHNfc2NyYXRjaF9wYWdlKQorCWlmIChicmlkZ2UtPmRyaXZlci0+bmVlZHNfc2NyYXRjaF9wYWdlKSB7CiAJCWJyaWRnZS0+ZHJpdmVyLT5hZ3BfZGVzdHJveV9wYWdlKAogCQkJCWdhcnRfdG9fdmlydChicmlkZ2UtPnNjcmF0Y2hfcGFnZV9yZWFsKSk7CisJCWZsdXNoX2FncF9tYXBwaW5ncygpOworCX0KIAlpZiAoZ290X2dhdHQpCiAJCWJyaWRnZS0+ZHJpdmVyLT5mcmVlX2dhdHRfdGFibGUoYnJpZGdlKTsKIAlpZiAoZ290X2tleWxpc3QpIHsKQEAgLTIxMSw5ICsyMTQsMTEgQEAKIAlicmlkZ2UtPmtleV9saXN0ID0gTlVMTDsKIAogCWlmIChicmlkZ2UtPmRyaXZlci0+YWdwX2Rlc3Ryb3lfcGFnZSAmJgotCSAgICBicmlkZ2UtPmRyaXZlci0+bmVlZHNfc2NyYXRjaF9wYWdlKQorCSAgICBicmlkZ2UtPmRyaXZlci0+bmVlZHNfc2NyYXRjaF9wYWdlKSB7CiAJCWJyaWRnZS0+ZHJpdmVyLT5hZ3BfZGVzdHJveV9wYWdlKAogCQkJCWdhcnRfdG9fdmlydChicmlkZ2UtPnNjcmF0Y2hfcGFnZV9yZWFsKSk7CisJCWZsdXNoX2FncF9tYXBwaW5ncygpOworCX0KIH0KIAogLyogV2hlbiB3ZSByZW1vdmUgdGhlIGdsb2JhbCB2YXJpYWJsZSBhZ3BfYnJpZGdlIGZyb20gYWxsIGRyaXZlcnMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvZWZmaWNlb24tYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2VmZmljZW9uLWFncC5jCmluZGV4IGQ0MWUwYTYuLmU3YWVhNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvZWZmaWNlb24tYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9lZmZpY2Vvbi1hZ3AuYwpAQCAtNDI5LDcgKzQyOSw2IEBACiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYWdwX2VmZmljZW9uX3BjaV90YWJsZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBhZ3BfZWZmaWNlb25fcGNpX2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gImFncGdhcnQtZWZmaWNlb24iLAogCS5pZF90YWJsZQk9IGFncF9lZmZpY2Vvbl9wY2lfdGFibGUsCiAJLnByb2JlCQk9IGFncF9lZmZpY2Vvbl9wcm9iZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvZ2VuZXJpYy5jIGIvZHJpdmVycy9jaGFyL2FncC9nZW5lcmljLmMKaW5kZXggYzRhMzg3MS4uNTU2N2NlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9nZW5lcmljLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9nZW5lcmljLmMKQEAgLTU3LDcgKzU3LDggQEAKIHsKIAlpbnQgaTsKIAlpID0gY2hhbmdlX3BhZ2VfYXR0cihwYWdlLCAxLCBQQUdFX0tFUk5FTF9OT0NBQ0hFKTsKLQlnbG9iYWxfZmx1c2hfdGxiKCk7CisJLyogQ2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkgdG8gY2FsbCBnbG9iYWxfZmx1c2hfdGxiKCkgZm9yCisJICogcGVyZm9ybWFuY2UgcmVhc29ucyAqLwogCXJldHVybiBpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwobWFwX3BhZ2VfaW50b19hZ3ApOwpAQCAtNjYsNyArNjcsOCBAQAogewogCWludCBpOwogCWkgPSBjaGFuZ2VfcGFnZV9hdHRyKHBhZ2UsIDEsIFBBR0VfS0VSTkVMKTsKLQlnbG9iYWxfZmx1c2hfdGxiKCk7CisJLyogQ2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkgdG8gY2FsbCBnbG9iYWxfZmx1c2hfdGxiKCkgZm9yCisJICogcGVyZm9ybWFuY2UgcmVhc29ucyAqLwogCXJldHVybiBpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodW5tYXBfcGFnZV9mcm9tX2FncCk7CkBAIC0xNTMsNiArMTU1LDcgQEAKIAkJZm9yIChpID0gMDsgaSA8IGN1cnItPnBhZ2VfY291bnQ7IGkrKykgewogCQkJY3Vyci0+YnJpZGdlLT5kcml2ZXItPmFncF9kZXN0cm95X3BhZ2UoZ2FydF90b192aXJ0KGN1cnItPm1lbW9yeVtpXSkpOwogCQl9CisJCWZsdXNoX2FncF9tYXBwaW5ncygpOwogCX0KIAlhZ3BfZnJlZV9rZXkoY3Vyci0+a2V5KTsKIAl2ZnJlZShjdXJyLT5tZW1vcnkpOwpAQCAtMjEwLDcgKzIxMyw3IEBACiAJCW5ldy0+bWVtb3J5W2ldID0gdmlydF90b19nYXJ0KGFkZHIpOwogCQluZXctPnBhZ2VfY291bnQrKzsKIAl9Ci0gICAgICAgbmV3LT5icmlkZ2UgPSBicmlkZ2U7CisJbmV3LT5icmlkZ2UgPSBicmlkZ2U7CiAKIAlmbHVzaF9hZ3BfbWFwcGluZ3MoKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9pNDYwLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9pNDYwLWFncC5jCmluZGV4IDU4OTQ0Y2QuLjhlZTE5YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvaTQ2MC1hZ3AuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL2k0NjAtYWdwLmMKQEAgLTExMSw4ICsxMTEsMTAgQEAKIAogCWlmIChpNDYwLmlvX3BhZ2Vfc2hpZnQgIT0gSTQ2MF9JT19QQUdFX1NISUZUKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlgKLQkJICAgICAgICJJL08gKEdBUlQpIHBhZ2Utc2l6ZSAlWnVLQiBkb2Vzbid0IG1hdGNoIGV4cGVjdGVkIHNpemUgJVp1S0JcbiIsCi0JCSAgICAgICAxVUwgPDwgKGk0NjAuaW9fcGFnZV9zaGlmdCAtIDEwKSwgMVVMIDw8IChJNDYwX0lPX1BBR0VfU0hJRlQpKTsKKwkJCSJJL08gKEdBUlQpIHBhZ2Utc2l6ZSAlbHVLQiBkb2Vzbid0IG1hdGNoIGV4cGVjdGVkICIKKwkJCQkic2l6ZSAlbHVLQlxuIiwKKwkJCTFVTCA8PCAoaTQ2MC5pb19wYWdlX3NoaWZ0IC0gMTApLAorCQkJMVVMIDw8IChJNDYwX0lPX1BBR0VfU0hJRlQpKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC01MTQsOSArNTE2LDEwIEBACiB7CiAJdm9pZCAqcGFnZTsKIAotCWlmIChJNDYwX0lPX1BBR0VfU0hJRlQgPD0gUEFHRV9TSElGVCkKKwlpZiAoSTQ2MF9JT19QQUdFX1NISUZUIDw9IFBBR0VfU0hJRlQpIHsKIAkJcGFnZSA9IGFncF9nZW5lcmljX2FsbG9jX3BhZ2UoYWdwX2JyaWRnZSk7Ci0JZWxzZQorCQlnbG9iYWxfZmx1c2hfdGxiKCk7CisJfSBlbHNlCiAJCS8qIFJldHVybmluZyBOVUxMIHdvdWxkIGNhdXNlIHByb2JsZW1zICovCiAJCS8qIEFLOiByZWFsbHkgZHViaW91cyBjb2RlLiAqLwogCQlwYWdlID0gKHZvaWQgKil+MFVMOwpAQCAtNTI1LDggKzUyOCwxMCBAQAogCiBzdGF0aWMgdm9pZCBpNDYwX2Rlc3Ryb3lfcGFnZSAodm9pZCAqcGFnZSkKIHsKLQlpZiAoSTQ2MF9JT19QQUdFX1NISUZUIDw9IFBBR0VfU0hJRlQpCisJaWYgKEk0NjBfSU9fUEFHRV9TSElGVCA8PSBQQUdFX1NISUZUKSB7CiAJCWFncF9nZW5lcmljX2Rlc3Ryb3lfcGFnZShwYWdlKTsKKwkJZ2xvYmFsX2ZsdXNoX3RsYigpOworCX0KIH0KIAogI2VuZGlmIC8qIEk0NjBfTEFSR0VfSU9fUEFHRVMgKi8KQEAgLTUzNiw3ICs1NDEsNyBAQAogewogCS8qIE1ha2Ugc3VyZSB0aGUgcmV0dXJuZWQgYWRkcmVzcyBpcyBhIHZhbGlkIEdBVFQgZW50cnkgKi8KIAlyZXR1cm4gYnJpZGdlLT5kcml2ZXItPm1hc2tzWzBdLm1hc2sKLQkJfCAoKChhZGRyICYgfigoMSA8PCBJNDYwX0lPX1BBR0VfU0hJRlQpIC0gMSkpICYgMHhmZmZmZmYwMDApID4+IDEyKTsKKwkJfCAoKChhZGRyICYgfigoMSA8PCBJNDYwX0lPX1BBR0VfU0hJRlQpIC0gMSkpICYgMHhmZmZmZjAwMCkgPj4gMTIpOwogfQogCiBzdHJ1Y3QgYWdwX2JyaWRnZV9kcml2ZXIgaW50ZWxfaTQ2MF9kcml2ZXIgPSB7CkBAIC02MTcsNyArNjIyLDYgQEAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBhZ3BfaW50ZWxfaTQ2MF9wY2lfdGFibGUpOwogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYWdwX2ludGVsX2k0NjBfcGNpX2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gImFncGdhcnQtaW50ZWwtaTQ2MCIsCiAJLmlkX3RhYmxlCT0gYWdwX2ludGVsX2k0NjBfcGNpX3RhYmxlLAogCS5wcm9iZQkJPSBhZ3BfaW50ZWxfaTQ2MF9wcm9iZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWFncC5jCmluZGV4IGJmNGNjOWYuLmU3YmVkNTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9pbnRlbC1hZ3AuYwpAQCAtMjcwLDYgKzI3MCw3IEBACiAKIAlzd2l0Y2ggKHBnX2NvdW50KSB7CiAJY2FzZSAxOiBhZGRyID0gYWdwX2JyaWRnZS0+ZHJpdmVyLT5hZ3BfYWxsb2NfcGFnZShhZ3BfYnJpZGdlKTsKKwkJZ2xvYmFsX2ZsdXNoX3RsYigpOwogCQlicmVhazsKIAljYXNlIDQ6CiAJCS8qIGtsdWRnZSB0byBnZXQgNCBwaHlzaWNhbCBwYWdlcyBmb3IgQVJHQiBjdXJzb3IgKi8KQEAgLTMzMCw5ICszMzEsMTEgQEAKIAlpZihjdXJyLT50eXBlID09IEFHUF9QSFlTX01FTU9SWSkgewogCQlpZiAoY3Vyci0+cGFnZV9jb3VudCA9PSA0KQogCQkJaTh4eF9kZXN0cm95X3BhZ2VzKGdhcnRfdG9fdmlydChjdXJyLT5tZW1vcnlbMF0pKTsKLQkJZWxzZQorCQllbHNlIHsKIAkJCWFncF9icmlkZ2UtPmRyaXZlci0+YWdwX2Rlc3Ryb3lfcGFnZSgKIAkJCQkgZ2FydF90b192aXJ0KGN1cnItPm1lbW9yeVswXSkpOworCQkJZ2xvYmFsX2ZsdXNoX3RsYigpOworCQl9CiAJCXZmcmVlKGN1cnItPm1lbW9yeSk7CiAJfQogCWtmcmVlKGN1cnIpOwpAQCAtMTgyNCw3ICsxODI3LDYgQEAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBhZ3BfaW50ZWxfcGNpX3RhYmxlKTsKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGFncF9pbnRlbF9wY2lfZHJpdmVyID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJPSAiYWdwZ2FydC1pbnRlbCIsCiAJLmlkX3RhYmxlCT0gYWdwX2ludGVsX3BjaV90YWJsZSwKIAkucHJvYmUJCT0gYWdwX2ludGVsX3Byb2JlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9udmlkaWEtYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL252aWRpYS1hZ3AuYwppbmRleCAzYWVkMGM1Li44MGRhZmEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL252aWRpYS1hZ3AuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL252aWRpYS1hZ3AuYwpAQCAtMzk4LDcgKzM5OCw2IEBACiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYWdwX252aWRpYV9wY2lfdGFibGUpOwogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYWdwX252aWRpYV9wY2lfZHJpdmVyID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJPSAiYWdwZ2FydC1udmlkaWEiLAogCS5pZF90YWJsZQk9IGFncF9udmlkaWFfcGNpX3RhYmxlLAogCS5wcm9iZQkJPSBhZ3BfbnZpZGlhX3Byb2JlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9zaXMtYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL3Npcy1hZ3AuYwppbmRleCBhNzAxMzYxLi5lYmMwNTU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL3Npcy1hZ3AuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL3Npcy1hZ3AuYwpAQCAtMzMyLDcgKzMzMiw2IEBACiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYWdwX3Npc19wY2lfdGFibGUpOwogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYWdwX3Npc19wY2lfZHJpdmVyID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJPSAiYWdwZ2FydC1zaXMiLAogCS5pZF90YWJsZQk9IGFncF9zaXNfcGNpX3RhYmxlLAogCS5wcm9iZQkJPSBhZ3Bfc2lzX3Byb2JlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9zd29ya3MtYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL3N3b3Jrcy1hZ3AuYwppbmRleCA1YTUzOTJkLi4zZjhmN2ZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL3N3b3Jrcy1hZ3AuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL3N3b3Jrcy1hZ3AuYwpAQCAtNTQ1LDcgKzU0NSw2IEBACiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYWdwX3NlcnZlcndvcmtzX3BjaV90YWJsZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBhZ3Bfc2VydmVyd29ya3NfcGNpX2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gImFncGdhcnQtc2VydmVyd29ya3MiLAogCS5pZF90YWJsZQk9IGFncF9zZXJ2ZXJ3b3Jrc19wY2lfdGFibGUsCiAJLnByb2JlCQk9IGFncF9zZXJ2ZXJ3b3Jrc19wcm9iZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvdW5pbm9ydGgtYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL3VuaW5vcnRoLWFncC5jCmluZGV4IDE4M2M1MGEuLmM4MjU1MzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvdW5pbm9ydGgtYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC91bmlub3J0aC1hZ3AuYwpAQCAtNjU4LDcgKzY1OCw2IEBACiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYWdwX3VuaW5vcnRoX3BjaV90YWJsZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBhZ3BfdW5pbm9ydGhfcGNpX2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gImFncGdhcnQtdW5pbm9ydGgiLAogCS5pZF90YWJsZQk9IGFncF91bmlub3J0aF9wY2lfdGFibGUsCiAJLnByb2JlCQk9IGFncF91bmlub3J0aF9wcm9iZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvdmlhLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC92aWEtYWdwLmMKaW5kZXggNWQ5YTEzNy4uYzg0N2RmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC92aWEtYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC92aWEtYWdwLmMKQEAgLTUxOCw3ICs1MTgsNiBAQAogCiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBhZ3BfdmlhX3BjaV9kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9ICJhZ3BnYXJ0LXZpYSIsCiAJLmlkX3RhYmxlCT0gYWdwX3ZpYV9wY2lfdGFibGUsCiAJLnByb2JlCQk9IGFncF92aWFfcHJvYmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL2F0aV9wY2lnYXJ0LmMgYi9kcml2ZXJzL2NoYXIvZHJtL2F0aV9wY2lnYXJ0LmMKaW5kZXggNmQzZmVjMS4uZWZmZjBlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9hdGlfcGNpZ2FydC5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vYXRpX3BjaWdhcnQuYwpAQCAtMjAzLDEwICsyMDMsMTAgQEAKIAogCQlmb3IgKGogPSAwOyBqIDwgKFBBR0VfU0laRSAvIEFUSV9QQ0lHQVJUX1BBR0VfU0laRSk7IGorKykgewogCQkJaWYgKGdhcnRfaW5mby0+aXNfcGNpZSkKLQkJCQkqcGNpX2dhcnQgPSAoY3B1X3RvX2xlMzIocGFnZV9iYXNlKSA+PiA4KSB8IDB4YzsKKwkJCQkqcGNpX2dhcnQgPSBjcHVfdG9fbGUzMigocGFnZV9iYXNlID4+IDgpIHwgMHhjKTsKIAkJCWVsc2UKIAkJCQkqcGNpX2dhcnQgPSBjcHVfdG9fbGUzMihwYWdlX2Jhc2UpOwotCQkJKnBjaV9nYXJ0Kys7CisJCQlwY2lfZ2FydCsrOwogCQkJcGFnZV9iYXNlICs9IEFUSV9QQ0lHQVJUX1BBR0VfU0laRTsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9lcGNhLmMgYi9kcml2ZXJzL2NoYXIvZXBjYS5jCmluZGV4IGI3YTBlNGQuLjQwNzcwOGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9lcGNhLmMKKysrIGIvZHJpdmVycy9jaGFyL2VwY2EuYwpAQCAtMzExMyw3ICszMTEzLDYgQEAKIGludCBfX2luaXQgaW5pdF9QQ0kgKHZvaWQpCiB7CS8qIEJlZ2luIGluaXRfUENJICovCiAJbWVtc2V0ICgmZXBjYV9kcml2ZXIsIDAsIHNpemVvZiAoZXBjYV9kcml2ZXIpKTsKLQllcGNhX2RyaXZlci5vd25lciA9IFRISVNfTU9EVUxFOwogCWVwY2FfZHJpdmVyLm5hbWUgPSAiZXBjYSI7CiAJZXBjYV9kcml2ZXIuaWRfdGFibGUgPSBlcGNhX3BjaV90Ymw7CiAJZXBjYV9kcml2ZXIucHJvYmUgPSBlcGNhX2luaXRfb25lOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2lwMi5jIGIvZHJpdmVycy9jaGFyL2lwMi5jCmluZGV4IDZjZDEyZjIuLjdjYWRmYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pcDIuYworKysgYi9kcml2ZXJzL2NoYXIvaXAyLmMKQEAgLTcsNyArNyw2IEBACiAvLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfbXNnaGFuZGxlci5jIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9tc2doYW5kbGVyLmMKaW5kZXggYzFkMDZiYS4uZDE2YmQ0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9tc2doYW5kbGVyLmMKKysrIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9tc2doYW5kbGVyLmMKQEAgLTI2NDgsNyArMjY0OCw3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJmludGYtPndhaXRpbmdfbXNnc19sb2NrLCBmbGFncyk7CiAJaWYgKCFsaXN0X2VtcHR5KCZpbnRmLT53YWl0aW5nX21zZ3MpKSB7CiAJCWxpc3RfYWRkX3RhaWwoJm1zZy0+bGluaywgJmludGYtPndhaXRpbmdfbXNncyk7Ci0JCXNwaW5fdW5sb2NrKCZpbnRmLT53YWl0aW5nX21zZ3NfbG9jayk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmludGYtPndhaXRpbmdfbXNnc19sb2NrLCBmbGFncyk7CiAJCWdvdG8gb3V0OwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbnRmLT53YWl0aW5nX21zZ3NfbG9jaywgZmxhZ3MpOwpAQCAtMjY1Nyw5ICsyNjU3LDkgQEAKIAlpZiAocnYgPiAwKSB7CiAJCS8qIENvdWxkIG5vdCBoYW5kbGUgdGhlIG1lc3NhZ2Ugbm93LCBqdXN0IGFkZCBpdCB0byBhCiAgICAgICAgICAgICAgICAgICAgbGlzdCB0byBoYW5kbGUgbGF0ZXIuICovCi0JCXNwaW5fbG9jaygmaW50Zi0+d2FpdGluZ19tc2dzX2xvY2spOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW50Zi0+d2FpdGluZ19tc2dzX2xvY2ssIGZsYWdzKTsKIAkJbGlzdF9hZGRfdGFpbCgmbXNnLT5saW5rLCAmaW50Zi0+d2FpdGluZ19tc2dzKTsKLQkJc3Bpbl91bmxvY2soJmludGYtPndhaXRpbmdfbXNnc19sb2NrKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW50Zi0+d2FpdGluZ19tc2dzX2xvY2ssIGZsYWdzKTsKIAl9IGVsc2UgaWYgKHJ2ID09IDApIHsKIAkJaXBtaV9mcmVlX3NtaV9tc2cobXNnKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbXdhdmUvdHAzNzgwaS5jIGIvZHJpdmVycy9jaGFyL213YXZlL3RwMzc4MGkuYwppbmRleCBkNmM3MmUwLi5jYzNlNTRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvbXdhdmUvdHAzNzgwaS5jCisrKyBiL2RyaXZlcnMvY2hhci9td2F2ZS90cDM3ODBpLmMKQEAgLTQ2LDcgKzQ2LDYgQEAKICoJRmlyc3QgcmVsZWFzZSB0byB0aGUgcHVibGljCiAqLwogCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL214c2VyLmMgYi9kcml2ZXJzL2NoYXIvbXhzZXIuYwppbmRleCAzYjk2NWE2Li4yNjQ0OGYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvbXhzZXIuYworKysgYi9kcml2ZXJzL2NoYXIvbXhzZXIuYwpAQCAtMzgsNyArMzgsNiBAQAogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2F1dG9jb25mLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9zM2MyNDEwLXJ0Yy5jIGIvZHJpdmVycy9jaGFyL3MzYzI0MTAtcnRjLmMKaW5kZXggZDcyNGMwZC4uM2RmN2E1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3MzYzI0MTAtcnRjLmMKKysrIGIvZHJpdmVycy9jaGFyL3MzYzI0MTAtcnRjLmMKQEAgLTM4Miw3ICszODIsNyBAQAogCS5wcm9jCSAgICAgICAgPSBzM2MyNDEwX3J0Y19wcm9jLAogfTsKIAotc3RhdGljIHZvaWQgczNjMjQxMF9ydGNfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IGVuKQorc3RhdGljIHZvaWQgczNjMjQxMF9ydGNfZW5hYmxlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIGludCBlbikKIHsKIAl1bnNpZ25lZCBpbnQgdG1wOwogCkBAIC0zOTksMjEgKzM5OSwyMSBAQAogCQkvKiByZS1lbmFibGUgdGhlIGRldmljZSwgYW5kIGNoZWNrIGl0IGlzIG9rICovCiAKIAkJaWYgKChyZWFkYihTM0MyNDEwX1JUQ0NPTikgJiBTM0MyNDEwX1JUQ0NPTl9SVENFTikgPT0gMCl7Ci0JCQlkZXZfaW5mbyhkZXYsICJydGMgZGlzYWJsZWQsIHJlLWVuYWJsaW5nXG4iKTsKKwkJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJydGMgZGlzYWJsZWQsIHJlLWVuYWJsaW5nXG4iKTsKIAogCQkJdG1wID0gcmVhZGIoUzNDMjQxMF9SVENDT04pOwogCQkJd3JpdGViKHRtcCB8IFMzQzI0MTBfUlRDQ09OX1JUQ0VOICwgUzNDMjQxMF9SVENDT04pOwogCQl9CiAKIAkJaWYgKChyZWFkYihTM0MyNDEwX1JUQ0NPTikgJiBTM0MyNDEwX1JUQ0NPTl9DTlRTRUwpKXsKLQkJCWRldl9pbmZvKGRldiwgInJlbW92aW5nIFMzQzI0MTBfUlRDQ09OX0NOVFNFTFxuIik7CisJCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAicmVtb3ZpbmcgUzNDMjQxMF9SVENDT05fQ05UU0VMXG4iKTsKIAogCQkJdG1wID0gcmVhZGIoUzNDMjQxMF9SVENDT04pOwogCQkJd3JpdGViKHRtcCYgflMzQzI0MTBfUlRDQ09OX0NOVFNFTCAsIFMzQzI0MTBfUlRDQ09OKTsKIAkJfQogCiAJCWlmICgocmVhZGIoUzNDMjQxMF9SVENDT04pICYgUzNDMjQxMF9SVENDT05fQ0xLUlNUKSl7Ci0JCQlkZXZfaW5mbyhkZXYsICJyZW1vdmluZyBTM0MyNDEwX1JUQ0NPTl9DTEtSU1RcbiIpOworCQkJZGV2X2luZm8oJnBkZXYtPmRldiwgInJlbW92aW5nIFMzQzI0MTBfUlRDQ09OX0NMS1JTVFxuIik7CiAKIAkJCXRtcCA9IHJlYWRiKFMzQzI0MTBfUlRDQ09OKTsKIAkJCXdyaXRlYih0bXAgJiB+UzNDMjQxMF9SVENDT05fQ0xLUlNULCBTM0MyNDEwX1JUQ0NPTik7CkBAIC00MjEsNyArNDIxLDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgczNjMjQxMF9ydGNfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgczNjMjQxMF9ydGNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAl1bnJlZ2lzdGVyX3J0YygmczNjMjQxMF9ydGNvcHMpOwogCkBAIC00MzgsMjUgKzQzOCwyNCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHMzYzI0MTBfcnRjX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgczNjMjQxMF9ydGNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJaW50IHJldDsKIAotCXByX2RlYnVnKCIlczogcHJvYmU9JXAsIGRldmljZT0lcFxuIiwgX19GVU5DVElPTl9fLCBwZGV2LCBkZXYpOworCXByX2RlYnVnKCIlczogcHJvYmU9JXBcbiIsIF9fRlVOQ1RJT05fXywgcGRldik7CiAKIAkvKiBmaW5kIHRoZSBJUlFzICovCiAKIAlzM2MyNDEwX3J0Y190aWNrbm8gPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDEpOwogCWlmIChzM2MyNDEwX3J0Y190aWNrbm8gPD0gMCkgewotCQlkZXZfZXJyKGRldiwgIm5vIGlycSBmb3IgcnRjIHRpY2tcbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBpcnEgZm9yIHJ0YyB0aWNrXG4iKTsKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCiAJczNjMjQxMF9ydGNfYWxhcm1ubyA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CiAJaWYgKHMzYzI0MTBfcnRjX2FsYXJtbm8gPD0gMCkgewotCQlkZXZfZXJyKGRldiwgIm5vIGlycSBmb3IgYWxhcm1cbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBpcnEgZm9yIGFsYXJtXG4iKTsKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCkBAIC00NjcsNyArNDY2LDcgQEAKIAogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJaWYgKHJlcyA9PSBOVUxMKSB7Ci0JCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCBtZW1vcnkgcmVnaW9uIHJlc291cmNlXG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCBtZW1vcnkgcmVnaW9uIHJlc291cmNlXG4iKTsKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCkBAIC00NzUsMTQgKzQ3NCwxNCBAQAogCQkJCSAgICAgcGRldi0+bmFtZSk7CiAKIAlpZiAoczNjMjQxMF9ydGNfbWVtID09IE5VTEwpIHsKLQkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gcmVzZXJ2ZSBtZW1vcnkgcmVnaW9uXG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlc2VydmUgbWVtb3J5IHJlZ2lvblxuIik7CiAJCXJldCA9IC1FTk9FTlQ7CiAJCWdvdG8gZXhpdF9lcnI7CiAJfQogCiAJczNjMjQxMF9ydGNfYmFzZSA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CiAJaWYgKHMzYzI0MTBfcnRjX2Jhc2UgPT0gTlVMTCkgewotCQlkZXZfZXJyKGRldiwgImZhaWxlZCBpb3JlbWFwKClcbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgaW9yZW1hcCgpXG4iKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBleGl0X2VycjsKIAl9CkBAIC00OTQsNyArNDkzLDcgQEAKIAogCS8qIGNoZWNrIHRvIHNlZSBpZiBldmVyeXRoaW5nIGlzIHNldHVwIGNvcnJlY3RseSAqLwogCi0JczNjMjQxMF9ydGNfZW5hYmxlKGRldiwgMSk7CisJczNjMjQxMF9ydGNfZW5hYmxlKHBkZXYsIDEpOwogCiAgCXByX2RlYnVnKCJzM2MyNDEwX3J0YzogUlRDQ09OPSUwMnhcbiIsIHJlYWRiKFMzQzI0MTBfUlRDQ09OKSk7CiAKQEAgLTUwNiw3ICs1MDUsNyBAQAogCXJldHVybiAwOwogCiAgZXhpdF9lcnI6Ci0JZGV2X2VycihkZXYsICJlcnJvciAlZCBkdXJpbmcgaW5pdGlhbGlzYXRpb25cbiIsIHJldCk7CisJZGV2X2VycigmcGRldi0+ZGV2LCAiZXJyb3IgJWQgZHVyaW5nIGluaXRpYWxpc2F0aW9uXG4iLCByZXQpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTUxOSw3ICs1MTgsNyBAQAogCiBzdGF0aWMgaW50IHRpY250X3NhdmU7CiAKLXN0YXRpYyBpbnQgczNjMjQxMF9ydGNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgczNjMjQxMF9ydGNfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IHJ0Y190aW1lIHRtOwogCXN0cnVjdCB0aW1lc3BlYyB0aW1lOwpAQCAtNTM1LDE5ICs1MzQsMTkgQEAKIAlzM2MyNDEwX3J0Y19nZXR0aW1lKCZ0bSk7CiAJcnRjX3RtX3RvX3RpbWUoJnRtLCAmdGltZS50dl9zZWMpOwogCXNhdmVfdGltZV9kZWx0YSgmczNjMjQxMF9ydGNfZGVsdGEsICZ0aW1lKTsKLQlzM2MyNDEwX3J0Y19lbmFibGUoZGV2LCAwKTsKKwlzM2MyNDEwX3J0Y19lbmFibGUocGRldiwgMCk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzM2MyNDEwX3J0Y19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBzM2MyNDEwX3J0Y19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgcnRjX3RpbWUgdG07CiAJc3RydWN0IHRpbWVzcGVjIHRpbWU7CiAKIAl0aW1lLnR2X25zZWMgPSAwOwogCi0JczNjMjQxMF9ydGNfZW5hYmxlKGRldiwgMSk7CisJczNjMjQxMF9ydGNfZW5hYmxlKHBkZXYsIDEpOwogCXMzYzI0MTBfcnRjX2dldHRpbWUoJnRtKTsKIAlydGNfdG1fdG9fdGltZSgmdG0sICZ0aW1lLnR2X3NlYyk7CiAJcmVzdG9yZV90aW1lX2RlbHRhKCZzM2MyNDEwX3J0Y19kZWx0YSwgJnRpbWUpOwpAQCAtNTYwLDE0ICs1NTksMTUgQEAKICNkZWZpbmUgczNjMjQxMF9ydGNfcmVzdW1lICBOVUxMCiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHMzYzI0MTBfcnRjZHJ2ID0gewotCS5uYW1lCQk9ICJzM2MyNDEwLXJ0YyIsCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgczNjMjQxMF9ydGNkcnYgPSB7CiAJLnByb2JlCQk9IHMzYzI0MTBfcnRjX3Byb2JlLAogCS5yZW1vdmUJCT0gczNjMjQxMF9ydGNfcmVtb3ZlLAogCS5zdXNwZW5kCT0gczNjMjQxMF9ydGNfc3VzcGVuZCwKIAkucmVzdW1lCQk9IHMzYzI0MTBfcnRjX3Jlc3VtZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAiczNjMjQxMC1ydGMiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAogfTsKIAogc3RhdGljIGNoYXIgX19pbml0ZGF0YSBiYW5uZXJbXSA9ICJTM0MyNDEwIFJUQywgKGMpIDIwMDQgU2ltdGVjIEVsZWN0cm9uaWNzXG4iOwpAQCAtNTc1LDEyICs1NzUsMTIgQEAKIHN0YXRpYyBpbnQgX19pbml0IHMzYzI0MTBfcnRjX2luaXQodm9pZCkKIHsKIAlwcmludGsoYmFubmVyKTsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZzM2MyNDEwX3J0Y2Rydik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmczNjMjQxMF9ydGNkcnYpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgczNjMjQxMF9ydGNfZXhpdCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZzM2MyNDEwX3J0Y2Rydik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnMzYzI0MTBfcnRjZHJ2KTsKIH0KIAogbW9kdWxlX2luaXQoczNjMjQxMF9ydGNfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvc29ueXBpLmMgYi9kcml2ZXJzL2NoYXIvc29ueXBpLmMKaW5kZXggZDA1MDY3ZC4uNTFhMDczNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3NvbnlwaS5jCisrKyBiL2RyaXZlcnMvY2hhci9zb255cGkuYwpAQCAtMTE2OCw3ICsxMTY4LDcgQEAKICNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBpbnQgb2xkX2NhbWVyYV9wb3dlcjsKIAotc3RhdGljIGludCBzb255cGlfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgc29ueXBpX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJb2xkX2NhbWVyYV9wb3dlciA9IHNvbnlwaV9kZXZpY2UuY2FtZXJhX3Bvd2VyOwogCXNvbnlwaV9kaXNhYmxlKCk7CkBAIC0xMTc2LDI2ICsxMTc2LDI3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc29ueXBpX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHNvbnlwaV9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXNvbnlwaV9lbmFibGUob2xkX2NhbWVyYV9wb3dlcik7CiAJcmV0dXJuIDA7CiB9CiAjZW5kaWYKIAotc3RhdGljIHZvaWQgc29ueXBpX3NodXRkb3duKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIHNvbnlwaV9zaHV0ZG93bihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc29ueXBpX2Rpc2FibGUoKTsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHNvbnlwaV9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gInNvbnlwaSIsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzb255cGlfZHJpdmVyID0gewogI2lmZGVmIENPTkZJR19QTQogCS5zdXNwZW5kCT0gc29ueXBpX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBzb255cGlfcmVzdW1lLAogI2VuZGlmCiAJLnNodXRkb3duCT0gc29ueXBpX3NodXRkb3duLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJzb255cGkiLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBzb255cGlfY3JlYXRlX2lucHV0X2RldmljZXModm9pZCkKQEAgLTE0NTUsMjAgKzE0NTYsMjAgQEAKIAlpZiAoIWRtaV9jaGVja19zeXN0ZW0oc29ueXBpX2RtaV90YWJsZSkpCiAJCXJldHVybiAtRU5PREVWOwogCi0JcmV0ID0gZHJpdmVyX3JlZ2lzdGVyKCZzb255cGlfZHJpdmVyKTsKKwlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnNvbnlwaV9kcml2ZXIpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKIAlyZXQgPSBzb255cGlfcHJvYmUoKTsKIAlpZiAocmV0KQotCQlkcml2ZXJfdW5yZWdpc3Rlcigmc29ueXBpX2RyaXZlcik7CisJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzb255cGlfZHJpdmVyKTsKIAogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBzb255cGlfZXhpdCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZzb255cGlfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc29ueXBpX2RyaXZlcik7CiAJc29ueXBpX3JlbW92ZSgpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvc3BlY2lhbGl4LmMgYi9kcml2ZXJzL2NoYXIvc3BlY2lhbGl4LmMKaW5kZXggMzUyNTQ3ZS4uMGJiZmNlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3NwZWNpYWxpeC5jCisrKyBiL2RyaXZlcnMvY2hhci9zcGVjaWFsaXguYwpAQCAtOTAsNyArOTAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2ZjbnRsLmg+CiAjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9zeW5jbGluay5jIGIvZHJpdmVycy9jaGFyL3N5bmNsaW5rLmMKaW5kZXggNWQxZmZhMy4uODJjNmFiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3N5bmNsaW5rLmMKKysrIGIvZHJpdmVycy9jaGFyL3N5bmNsaW5rLmMKQEAgLTkxMiw3ICs5MTIsNiBAQAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgc3luY2xpbmtfcGNpX2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gInN5bmNsaW5rIiwKIAkuaWRfdGFibGUJPSBzeW5jbGlua19wY2lfdGJsLAogCS5wcm9iZQkJPSBzeW5jbGlua19pbml0X29uZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9zeW5jbGlua21wLmMgYi9kcml2ZXJzL2NoYXIvc3luY2xpbmttcC5jCmluZGV4IDdjMDYzYzUuLmVlNWE0MGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zeW5jbGlua21wLmMKKysrIGIvZHJpdmVycy9jaGFyL3N5bmNsaW5rbXAuYwpAQCAtNTAwLDcgKzUwMCw2IEBACiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBzeW5jbGlua21wX3BjaV9kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9ICJzeW5jbGlua21wIiwKIAkuaWRfdGFibGUJPSBzeW5jbGlua21wX3BjaV90YmwsCiAJLnByb2JlCQk9IHN5bmNsaW5rbXBfaW5pdF9vbmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvc3lzcnEuYyBiL2RyaXZlcnMvY2hhci9zeXNycS5jCmluZGV4IGZlYjI1MTUuLjE0NTI3NWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zeXNycS5jCisrKyBiL2RyaXZlcnMvY2hhci9zeXNycS5jCkBAIC0zNTQsNyArMzU0LDcgQEAKICAgICAgICAgcmV0dXJuIG9wX3A7CiB9CiAKLXZvaWQgX19zeXNycV9wdXRfa2V5X29wIChpbnQga2V5LCBzdHJ1Y3Qgc3lzcnFfa2V5X29wICpvcF9wKSB7CitzdGF0aWMgdm9pZCBfX3N5c3JxX3B1dF9rZXlfb3AgKGludCBrZXksIHN0cnVjdCBzeXNycV9rZXlfb3AgKm9wX3ApIHsKICAgICAgICAgaW50IGk7CiAKIAlpID0gc3lzcnFfa2V5X3RhYmxlX2tleTJpbmRleChrZXkpOwpAQCAtNDE5LDcgKzQxOSw3IEBACiAJX19oYW5kbGVfc3lzcnEoa2V5LCBwdF9yZWdzLCB0dHksIDEpOwogfQogCi1pbnQgX19zeXNycV9zd2FwX2tleV9vcHMoaW50IGtleSwgc3RydWN0IHN5c3JxX2tleV9vcCAqaW5zZXJ0X29wX3AsCitzdGF0aWMgaW50IF9fc3lzcnFfc3dhcF9rZXlfb3BzKGludCBrZXksIHN0cnVjdCBzeXNycV9rZXlfb3AgKmluc2VydF9vcF9wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3lzcnFfa2V5X29wICpyZW1vdmVfb3BfcCkgewogCiAJaW50IHJldHZhbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90YjAyMTkuYyBiL2RyaXZlcnMvY2hhci90YjAyMTkuYwppbmRleCAyNDM1NWIyLi5iM2Q0MTFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdGIwMjE5LmMKKysrIGIvZHJpdmVycy9jaGFyL3RiMDIxOS5jCkBAIC0yODMsNyArMjgzLDcgQEAKIAl2cjQxeHhfc2V0X2lycV9sZXZlbChUQjAyMTlfUENJX1NMT1QzX1BJTiwgSVJRX0xFVkVMX0xPVyk7CiB9CiAKLXN0YXRpYyBpbnQgdGIwMjE5X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgdGIwMjE5X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlpbnQgcmV0dmFsOwogCkBAIC0zMTksNyArMzE5LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB0YjAyMTlfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgdGIwMjE5X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJX21hY2hpbmVfcmVzdGFydCA9IG9sZF9tYWNoaW5lX3Jlc3RhcnQ7CiAKQEAgLTMzMywxMSArMzMzLDEyIEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICp0YjAyMTlfcGxhdGZvcm1fZGV2aWNlOwogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgdGIwMjE5X2RldmljZV9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gIlRCMDIxOSIsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB0YjAyMTlfZGV2aWNlX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gdGIwMjE5X3Byb2JlLAogCS5yZW1vdmUJCT0gdGIwMjE5X3JlbW92ZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAiVEIwMjE5IiwKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2RldmluaXQgdGFuYmFjX3RiMDIxOV9pbml0KHZvaWQpCkBAIC0zNDgsNyArMzQ5LDcgQEAKIAlpZiAoSVNfRVJSKHRiMDIxOV9wbGF0Zm9ybV9kZXZpY2UpKQogCQlyZXR1cm4gUFRSX0VSUih0YjAyMTlfcGxhdGZvcm1fZGV2aWNlKTsKIAotCXJldHZhbCA9IGRyaXZlcl9yZWdpc3RlcigmdGIwMjE5X2RldmljZV9kcml2ZXIpOworCXJldHZhbCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmdGIwMjE5X2RldmljZV9kcml2ZXIpOwogCWlmIChyZXR2YWwgPCAwKQogCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcih0YjAyMTlfcGxhdGZvcm1fZGV2aWNlKTsKIApAQCAtMzU3LDcgKzM1OCw3IEBACiAKIHN0YXRpYyB2b2lkIF9fZGV2ZXhpdCB0YW5iYWNfdGIwMjE5X2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmdGIwMjE5X2RldmljZV9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ0YjAyMTlfZGV2aWNlX2RyaXZlcik7CiAKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcih0YjAyMTlfcGxhdGZvcm1fZGV2aWNlKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90cG0vdHBtLmggYi9kcml2ZXJzL2NoYXIvdHBtL3RwbS5oCmluZGV4IDk5YTYwNDkuLjkyOTNiY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90cG0vdHBtLmgKKysrIGIvZHJpdmVycy9jaGFyL3RwbS90cG0uaApAQCAtMTksNyArMTksNiBAQAogICogCiAgKi8KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Zpb2NvbnMuYyBiL2RyaXZlcnMvY2hhci92aW9jb25zLmMKaW5kZXggOTg2MDFjNy4uNGQ3NWMyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Zpb2NvbnMuYworKysgYi9kcml2ZXJzL2NoYXIvdmlvY29ucy5jCkBAIC0yNiw3ICsyNiw2IEBACiAgKiBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQogICovCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Zpb3RhcGUuYyBiL2RyaXZlcnMvY2hhci92aW90YXBlLmMKaW5kZXggODY3Y2M0ZS4uNjBhYWJkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Zpb3RhcGUuYworKysgYi9kcml2ZXJzL2NoYXIvdmlvdGFwZS5jCkBAIC0zMiw3ICszMiw2IEBACiAgKiBpc2VyaWVzL3Zpby5oCiAgKi8KICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci92cjQxeHhfZ2l1LmMgYi9kcml2ZXJzL2NoYXIvdnI0MXh4X2dpdS5jCmluZGV4IDk0NjQxMDguLjlhYzZkNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci92cjQxeHhfZ2l1LmMKKysrIGIvZHJpdmVycy9jaGFyL3ZyNDF4eF9naXUuYwpAQCAtNjEzLDcgKzYxMyw3IEBACiAJLnJlbGVhc2UJPSBncGlvX3JlbGVhc2UsCiB9OwogCi1zdGF0aWMgaW50IGdpdV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGdpdV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJdW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZSwgZmxhZ3MgPSAwOwogCXVuc2lnbmVkIGludCBucl9waW5zID0gMDsKQEAgLTY5Nyw3ICs2OTcsNyBAQAogCXJldHVybiBjYXNjYWRlX2lycShHSVVJTlRfSVJRLCBnaXVfZ2V0X2lycSk7CiB9CiAKLXN0YXRpYyBpbnQgZ2l1X3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGdpdV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCWlvdW5tYXAoZ2l1X2Jhc2UpOwogCkBAIC03MTAsMTEgKzcxMCwxMiBAQAogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZ2l1X3BsYXRmb3JtX2RldmljZTsKIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGdpdV9kZXZpY2VfZHJpdmVyID0gewotCS5uYW1lCQk9ICJHSVUiLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZ2l1X2RldmljZV9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IGdpdV9wcm9iZSwKIAkucmVtb3ZlCQk9IGdpdV9yZW1vdmUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gIkdJVSIsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHZyNDF4eF9naXVfaW5pdCh2b2lkKQpAQCAtNzI1LDcgKzcyNiw3IEBACiAJaWYgKElTX0VSUihnaXVfcGxhdGZvcm1fZGV2aWNlKSkKIAkJcmV0dXJuIFBUUl9FUlIoZ2l1X3BsYXRmb3JtX2RldmljZSk7CiAKLQlyZXR2YWwgPSBkcml2ZXJfcmVnaXN0ZXIoJmdpdV9kZXZpY2VfZHJpdmVyKTsKKwlyZXR2YWwgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmdpdV9kZXZpY2VfZHJpdmVyKTsKIAlpZiAocmV0dmFsIDwgMCkKIAkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZ2l1X3BsYXRmb3JtX2RldmljZSk7CiAKQEAgLTczNCw3ICs3MzUsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2RldmV4aXQgdnI0MXh4X2dpdV9leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJmdpdV9kZXZpY2VfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZ2l1X2RldmljZV9kcml2ZXIpOwogCiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZ2l1X3BsYXRmb3JtX2RldmljZSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdnI0MXh4X3J0Yy5jIGIvZHJpdmVycy9jaGFyL3ZyNDF4eF9ydGMuYwppbmRleCA1ZTMyOTJkLi40MzViMzA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdnI0MXh4X3J0Yy5jCisrKyBiL2RyaXZlcnMvY2hhci92cjQxeHhfcnRjLmMKQEAgLTU2MCwxMyArNTYwLDExIEBACiAJLmZvcHMJPSAmcnRjX2ZvcHMsCiB9OwogCi1zdGF0aWMgaW50IHJ0Y19wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHJ0Y19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CiAJdW5zaWduZWQgaW50IGlycTsKIAlpbnQgcmV0dmFsOwogCi0JcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCWlmIChwZGV2LT5udW1fcmVzb3VyY2VzICE9IDIpCiAJCXJldHVybiAtRUJVU1k7CiAKQEAgLTYzNSw3ICs2MzMsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHJ0Y19yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBydGNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlpbnQgcmV0dmFsOwogCkBAIC02NTUsMTEgKzY1MywxMiBAQAogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcnRjX3BsYXRmb3JtX2RldmljZTsKIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHJ0Y19kZXZpY2VfZHJpdmVyID0gewotCS5uYW1lCQk9IHJ0Y19uYW1lLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcnRjX2RldmljZV9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IHJ0Y19wcm9iZSwKIAkucmVtb3ZlCQk9IHJ0Y19yZW1vdmUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gcnRjX25hbWUsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHZyNDF4eF9ydGNfaW5pdCh2b2lkKQpAQCAtNjkxLDcgKzY5MCw3IEBACiAJaWYgKElTX0VSUihydGNfcGxhdGZvcm1fZGV2aWNlKSkKIAkJcmV0dXJuIFBUUl9FUlIocnRjX3BsYXRmb3JtX2RldmljZSk7CiAKLQlyZXR2YWwgPSBkcml2ZXJfcmVnaXN0ZXIoJnJ0Y19kZXZpY2VfZHJpdmVyKTsKKwlyZXR2YWwgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnJ0Y19kZXZpY2VfZHJpdmVyKTsKIAlpZiAocmV0dmFsIDwgMCkKIAkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocnRjX3BsYXRmb3JtX2RldmljZSk7CiAKQEAgLTcwMCw3ICs2OTksNyBAQAogCiBzdGF0aWMgdm9pZCBfX2RldmV4aXQgdnI0MXh4X3J0Y19leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJnJ0Y19kZXZpY2VfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmcnRjX2RldmljZV9kcml2ZXIpOwogCiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocnRjX3BsYXRmb3JtX2RldmljZSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvbXBjb3JlX3dkdC5jIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL21wY29yZV93ZHQuYwppbmRleCBkYTYzMWMxLi45ZGVmY2Y4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvbXBjb3JlX3dkdC5jCisrKyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9tcGNvcmVfd2R0LmMKQEAgLTEzOSw3ICsxMzksNyBAQAogICovCiBzdGF0aWMgaW50IG1wY29yZV93ZHRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlzdHJ1Y3QgbXBjb3JlX3dkdCAqd2R0ID0gZGV2X2dldF9kcnZkYXRhKCZtcGNvcmVfd2R0X2Rldi0+ZGV2KTsKKwlzdHJ1Y3QgbXBjb3JlX3dkdCAqd2R0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEobXBjb3JlX3dkdF9kZXYpOwogCiAJaWYgKHRlc3RfYW5kX3NldF9iaXQoMCwgJndkdC0+dGltZXJfYWxpdmUpKQogCQlyZXR1cm4gLUVCVVNZOwpAQCAtMjkxLDkgKzI5MSw5IEBACiAgKglTeXN0ZW0gc2h1dGRvd24gaGFuZGxlci4gIFR1cm4gb2ZmIHRoZSB3YXRjaGRvZyBpZiB3ZSdyZQogICoJcmVzdGFydGluZyBvciBoYWx0aW5nIHRoZSBzeXN0ZW0uCiAgKi8KLXN0YXRpYyB2b2lkIG1wY29yZV93ZHRfc2h1dGRvd24oc3RydWN0IGRldmljZSAqX2RldikKK3N0YXRpYyB2b2lkIG1wY29yZV93ZHRfc2h1dGRvd24oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBtcGNvcmVfd2R0ICp3ZHQgPSBkZXZfZ2V0X2RydmRhdGEoX2Rldik7CisJc3RydWN0IG1wY29yZV93ZHQgKndkdCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKIAlpZiAoc3lzdGVtX3N0YXRlID09IFNZU1RFTV9SRVNUQVJUIHx8IHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fSEFMVCkKIAkJbXBjb3JlX3dkdF9zdG9wKHdkdCk7CkBAIC0zMTcsOSArMzE3LDggQEAKIAkuZm9wcwkJPSAmbXBjb3JlX3dkdF9mb3BzLAogfTsKIAotc3RhdGljIGludCBfX2RldmluaXQgbXBjb3JlX3dkdF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpfZGV2KQorc3RhdGljIGludCBfX2RldmluaXQgbXBjb3JlX3dkdF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKF9kZXYpOwogCXN0cnVjdCBtcGNvcmVfd2R0ICp3ZHQ7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJaW50IHJldDsKQEAgLTM2NCw3ICszNjMsNyBAQAogCX0KIAogCW1wY29yZV93ZHRfc3RvcCh3ZHQpOwotCWRldl9zZXRfZHJ2ZGF0YSgmZGV2LT5kZXYsIHdkdCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoJmRldi0+ZGV2LCB3ZHQpOwogCW1wY29yZV93ZHRfZGV2ID0gZGV2OwogCiAJcmV0dXJuIDA7CkBAIC0zNzksMTEgKzM3OCwxMSBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZleGl0IG1wY29yZV93ZHRfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19kZXZleGl0IG1wY29yZV93ZHRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgbXBjb3JlX3dkdCAqd2R0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IG1wY29yZV93ZHQgKndkdCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOwogCiAJbWlzY19kZXJlZ2lzdGVyKCZtcGNvcmVfd2R0X21pc2NkZXYpOwogCkBAIC0zOTUsMTMgKzM5NCwxNCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgbXBjb3JlX3dkdF9kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5uYW1lCQk9ICJtcGNvcmVfd2R0IiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG1wY29yZV93ZHRfZHJpdmVyID0gewogCS5wcm9iZQkJPSBtcGNvcmVfd2R0X3Byb2JlLAogCS5yZW1vdmUJCT0gX19kZXZleGl0X3AobXBjb3JlX3dkdF9yZW1vdmUpLAogCS5zaHV0ZG93bgk9IG1wY29yZV93ZHRfc2h1dGRvd24sCisJLmRyaXZlcgkJPSB7CisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCQkubmFtZQk9ICJtcGNvcmVfd2R0IiwKKwl9LAogfTsKIAogc3RhdGljIGNoYXIgYmFubmVyW10gX19pbml0ZGF0YSA9IEtFUk5fSU5GTyAiTVBjb3JlIFdhdGNoZG9nIFRpbWVyOiAwLjEuIG1wY29yZV9ub2Jvb3Q9JWQgbXBjb3JlX21hcmdpbj0lZCBzZWMgKG5vd2F5b3V0PSAlZClcbiI7CkBAIC00MjAsMTIgKzQyMCwxMiBAQAogCiAJcHJpbnRrKGJhbm5lciwgbXBjb3JlX25vYm9vdCwgbXBjb3JlX21hcmdpbiwgbm93YXlvdXQpOwogCi0JcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmbXBjb3JlX3dkdF9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm1wY29yZV93ZHRfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IG1wY29yZV93ZHRfZXhpdCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZtcGNvcmVfd2R0X2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm1wY29yZV93ZHRfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQobXBjb3JlX3dkdF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9tdjY0eDYwX3dkdC5jIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL212NjR4NjBfd2R0LmMKaW5kZXggMTE5YjNjNS4uMDBkOWVmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL212NjR4NjBfd2R0LmMKKysrIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL212NjR4NjBfd2R0LmMKQEAgLTE4MiwxMCArMTgyLDkgQEAKIAkuZm9wcyA9ICZtdjY0eDYwX3dkdF9mb3BzLAogfTsKIAotc3RhdGljIGludCBfX2RldmluaXQgbXY2NHg2MF93ZHRfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBfX2RldmluaXQgbXY2NHg2MF93ZHRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7Ci0Jc3RydWN0IG12NjR4NjBfd2R0X3BkYXRhICpwZGF0YSA9IHBkLT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgbXY2NHg2MF93ZHRfcGRhdGEgKnBkYXRhID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlpbnQgYnVzX2NsayA9IDEzMzsKIAogCW12NjR4NjBfd2R0X3RpbWVvdXQgPSAxMDsKQEAgLTIwMiw3ICsyMDEsNyBAQAogCXJldHVybiBtaXNjX3JlZ2lzdGVyKCZtdjY0eDYwX3dkdF9taXNjZGV2KTsKIH0KIAotc3RhdGljIGludCBfX2RldmV4aXQgbXY2NHg2MF93ZHRfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19kZXZleGl0IG12NjR4NjBfd2R0X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJbWlzY19kZXJlZ2lzdGVyKCZtdjY0eDYwX3dkdF9taXNjZGV2KTsKIApAQCAtMjEyLDEyICsyMTEsMTMgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIG12NjR4NjBfd2R0X2RyaXZlciA9IHsKLQkub3duZXIgPSBUSElTX01PRFVMRSwKLQkubmFtZSA9IE1WNjR4NjBfV0RUX05BTUUsCi0JLmJ1cyA9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG12NjR4NjBfd2R0X2RyaXZlciA9IHsKIAkucHJvYmUgPSBtdjY0eDYwX3dkdF9wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3AobXY2NHg2MF93ZHRfcmVtb3ZlKSwKKwkuZHJpdmVyID0geworCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwkJLm5hbWUgPSBNVjY0eDYwX1dEVF9OQU1FLAorCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbXY2NHg2MF93ZHRfZGV2OwpAQCAtMjM1LDE0ICsyMzUsMTQgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JcmV0ID0gZHJpdmVyX3JlZ2lzdGVyKCZtdjY0eDYwX3dkdF9kcml2ZXIpOworCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbXY2NHg2MF93ZHRfZHJpdmVyKTsKICAgICAgIG91dDoKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgbXY2NHg2MF93ZHRfZXhpdCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZtdjY0eDYwX3dkdF9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZtdjY0eDYwX3dkdF9kcml2ZXIpOwogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKG12NjR4NjBfd2R0X2Rldik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9wY3dkX3BjaS5jIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3Bjd2RfcGNpLmMKaW5kZXggZDllZjU1Yi4uMjQ1MWVkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3Bjd2RfcGNpLmMKKysrIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3Bjd2RfcGNpLmMKQEAgLTc1NSw3ICs3NTUsNiBAQAogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHBjaXBjd2RfcGNpX3RibCk7CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBwY2lwY3dkX2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gV0FUQ0hET0dfTkFNRSwKIAkuaWRfdGFibGUJPSBwY2lwY3dkX3BjaV90YmwsCiAJLnByb2JlCQk9IHBjaXBjd2RfY2FyZF9pbml0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3MzYzI0MTBfd2R0LmMgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvczNjMjQxMF93ZHQuYwppbmRleCA3NTFjYjc3Li5lYjY2N2RhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvczNjMjQxMF93ZHQuYworKysgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvczNjMjQxMF93ZHQuYwpAQCAtMzQ3LDE1ICszNDcsMTQgQEAKIH0KIC8qIGRldmljZSBpbnRlcmZhY2UgKi8KIAotc3RhdGljIGludCBzM2MyNDEwd2R0X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgczNjMjQxMHdkdF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAlpbnQgc3RhcnRlZCA9IDA7CiAJaW50IHJldDsKIAlpbnQgc2l6ZTsKIAotCURCRygiJXM6IHByb2JlPSVwLCBkZXZpY2U9JXBcbiIsIF9fRlVOQ1RJT05fXywgcGRldiwgZGV2KTsKKwlEQkcoIiVzOiBwcm9iZT0lcFxuIiwgX19GVU5DVElPTl9fLCBwZGV2KTsKIAogCS8qIGdldCB0aGUgbWVtb3J5IHJlZ2lvbiBmb3IgdGhlIHdhdGNoZG9nIHRpbWVyICovCiAKQEAgLTM4NiwxMyArMzg1LDEzIEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCXJldCA9IHJlcXVlc3RfaXJxKHJlcy0+c3RhcnQsIHMzYzI0MTB3ZHRfaXJxLCAwLCBwZGV2LT5uYW1lLCBkZXYpOworCXJldCA9IHJlcXVlc3RfaXJxKHJlcy0+c3RhcnQsIHMzYzI0MTB3ZHRfaXJxLCAwLCBwZGV2LT5uYW1lLCBwZGV2KTsKIAlpZiAocmV0ICE9IDApIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyBQRlggImZhaWxlZCB0byBpbnN0YWxsIGlycSAoJWQpXG4iLCByZXQpOwogCQlyZXR1cm4gcmV0OwogCX0KIAotCXdkdF9jbG9jayA9IGNsa19nZXQoZGV2LCAid2F0Y2hkb2ciKTsKKwl3ZHRfY2xvY2sgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJ3YXRjaGRvZyIpOwogCWlmICh3ZHRfY2xvY2sgPT0gTlVMTCkgewogCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiZmFpbGVkIHRvIGZpbmQgd2F0Y2hkb2cgY2xvY2sgc291cmNlXG4iKTsKIAkJcmV0dXJuIC1FTk9FTlQ7CkBAIC00MzAsNyArNDI5LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzM2MyNDEwd2R0X3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHMzYzI0MTB3ZHRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlpZiAod2R0X21lbSAhPSBOVUxMKSB7CiAJCXJlbGVhc2VfcmVzb3VyY2Uod2R0X21lbSk7CkBAIC00NTQsNyArNDUzLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgczNjMjQxMHdkdF9zaHV0ZG93bihzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBzM2MyNDEwd2R0X3NodXRkb3duKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlzM2MyNDEwd2R0X3N0b3AoKTsJCiB9CkBAIC00NjQsNyArNDYzLDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHd0Y29uX3NhdmU7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyB3dGRhdF9zYXZlOwogCi1zdGF0aWMgaW50IHMzYzI0MTB3ZHRfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgczNjMjQxMHdkdF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCS8qIFNhdmUgd2F0Y2hkb2cgc3RhdGUsIGFuZCB0dXJuIGl0IG9mZi4gKi8KIAl3dGNvbl9zYXZlID0gcmVhZGwod2R0X2Jhc2UgKyBTM0MyNDEwX1dUQ09OKTsKQEAgLTQ3Niw3ICs0NzUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHMzYzI0MTB3ZHRfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgczNjMjQxMHdkdF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCS8qIFJlc3RvcmUgd2F0Y2hkb2cgc3RhdGUuICovCiAKQEAgLTQ5NiwxNSArNDk1LDE2IEBACiAjZW5kaWYgLyogQ09ORklHX1BNICovCiAKIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHMzYzI0MTB3ZHRfZHJpdmVyID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkubmFtZQkJPSAiczNjMjQxMC13ZHQiLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgczNjMjQxMHdkdF9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IHMzYzI0MTB3ZHRfcHJvYmUsCiAJLnJlbW92ZQkJPSBzM2MyNDEwd2R0X3JlbW92ZSwKIAkuc2h1dGRvd24JPSBzM2MyNDEwd2R0X3NodXRkb3duLAogCS5zdXNwZW5kCT0gczNjMjQxMHdkdF9zdXNwZW5kLAogCS5yZXN1bWUJCT0gczNjMjQxMHdkdF9yZXN1bWUsCisJLmRyaXZlcgkJPSB7CisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCQkubmFtZQk9ICJzM2MyNDEwLXdkdCIsCisJfSwKIH07CiAKIApAQCAtNTEzLDEyICs1MTMsMTIgQEAKIHN0YXRpYyBpbnQgX19pbml0IHdhdGNoZG9nX2luaXQodm9pZCkKIHsKIAlwcmludGsoYmFubmVyKTsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZzM2MyNDEwd2R0X2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmczNjMjQxMHdkdF9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgd2F0Y2hkb2dfZXhpdCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZzM2MyNDEwd2R0X2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnMzYzI0MTB3ZHRfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQod2F0Y2hkb2dfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvd2R0X3BjaS5jIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3dkdF9wY2kuYwppbmRleCBkYzkzNzBmLi40YjMzMTE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvd2R0X3BjaS5jCisrKyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy93ZHRfcGNpLmMKQEAgLTcxMSw3ICs3MTEsNiBAQAogCiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciB3ZHRwY2lfZHJpdmVyID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJPSAid2R0X3BjaSIsCiAJLmlkX3RhYmxlCT0gd2R0cGNpX3BjaV90YmwsCiAJLnByb2JlCQk9IHdkdHBjaV9pbml0X29uZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLmMgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcS5jCmluZGV4IDI1YWNmNDcuLjIzYTYzMjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLmMKKysrIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEuYwpAQCAtMzgsNyArMzgsNiBAQAogc3RhdGljIHN0cnVjdCBjcHVmcmVxX3BvbGljeQkqY3B1ZnJlcV9jcHVfZGF0YVtOUl9DUFVTXTsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soY3B1ZnJlcV9kcml2ZXJfbG9jayk7CiAKLQogLyogaW50ZXJuYWwgcHJvdG90eXBlcyAqLwogc3RhdGljIGludCBfX2NwdWZyZXFfZ292ZXJub3Ioc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksIHVuc2lnbmVkIGludCBldmVudCk7CiBzdGF0aWMgdm9pZCBoYW5kbGVfdXBkYXRlKHZvaWQgKmRhdGEpOwpAQCAtMTExNSwyNCArMTExNCwyMSBAQAogCWludCByZXR2YWwgPSAtRUlOVkFMOwogCiAJLyoKLQkgKiBDb252ZXJ0ZWQgdGhlIGxvY2tfY3B1X2hvdHBsdWcgdG8gcHJlZW1wdF9kaXNhYmxlKCkKLQkgKiBhbmQgcHJlZW1wdF9lbmFibGUoKS4gVGhpcyBpcyBhIGJpdCBrbHVkZ3kgYW5kIHJlbGllcyBvbiBob3cgY3B1Ci0JICogaG90cGx1ZyB3b3Jrcy4gQWxsIHdlIG5lZWQgaXMgYSBndWFyYW50ZWUgdGhhdCBjcHUgaG90cGx1ZyB3b24ndCBtYWtlCi0JICogcHJvZ3Jlc3Mgb24gYW55IGNwdS4gT25jZSB3ZSBkbyBwcmVlbXB0X2Rpc2FibGUoKSwgdGhpcyB3b3VsZCBlbnN1cmUKLQkgKiB0aGF0IGhvdHBsdWcgdGhyZWFkcyBkb24ndCBnZXQgb250byB0aGlzIGNwdSwgdGhlcmVieSBkZWxheWluZwotCSAqIHRoZSBjcHUgcmVtb3ZlIHByb2Nlc3MuCi0JICoKLQkgKiBXZSByZW1vdmVkIHRoZSBsb2NrX2NwdV9ob3RwbHVnIHNpbmNlIHdlIG5lZWQgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uCi0JICogdmlhIGNwdSBob3RwbHVnIGNhbGxiYWNrcywgd2hpY2ggcmVzdWx0IGluIGxvY2tpbmcgdGhlIGNwdSBob3RwbHVnCi0JICogdGhyZWFkIGl0c2VsZi4gQWdyZWUgdGhpcyBpcyBub3QgdmVyeSBjbGVhbiwgY3B1ZnJlcSBjb21tdW5pdHkKLQkgKiBjb3VsZCBpbXByb3ZlIHRoaXMgaWYgcmVxdWlyZWQuIC0gQXNob2sgUmFqIDxhc2hvay5yYWpAaW50ZWwuY29tPgorCSAqIElmIHdlIGFyZSBhbHJlYWR5IGluIGNvbnRleHQgb2YgaG90cGx1ZyB0aHJlYWQsIHdlIGRvbnQgbmVlZCB0bworCSAqIGFjcXVpcmUgdGhlIGhvdHBsdWcgbG9jay4gT3RoZXJ3aXNlIGFjcXVpcmUgY3B1Y29udHJvbCB0byBwcmV2ZW50CisJICogaG90cGx1ZyBmcm9tIHJlbW92aW5nIHRoaXMgY3B1IHRoYXQgd2UgYXJlIHdvcmtpbmcgb24uCiAJICovCi0JcHJlZW1wdF9kaXNhYmxlKCk7CisJaWYgKCFjdXJyZW50X2luX2NwdV9ob3RwbHVnKCkpCisJCWxvY2tfY3B1X2hvdHBsdWcoKTsKKwogCWRwcmludGsoInRhcmdldCBmb3IgQ1BVICV1OiAldSBrSHosIHJlbGF0aW9uICV1XG4iLCBwb2xpY3ktPmNwdSwKIAkJdGFyZ2V0X2ZyZXEsIHJlbGF0aW9uKTsKIAlpZiAoY3B1X29ubGluZShwb2xpY3ktPmNwdSkgJiYgY3B1ZnJlcV9kcml2ZXItPnRhcmdldCkKIAkJcmV0dmFsID0gY3B1ZnJlcV9kcml2ZXItPnRhcmdldChwb2xpY3ksIHRhcmdldF9mcmVxLCByZWxhdGlvbik7Ci0JcHJlZW1wdF9lbmFibGUoKTsKKworCWlmICghY3VycmVudF9pbl9jcHVfaG90cGx1ZygpKQorCQl1bmxvY2tfY3B1X2hvdHBsdWcoKTsKKwogCXJldHVybiByZXR2YWw7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChfX2NwdWZyZXFfZHJpdmVyX3RhcmdldCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2RlbGxfcmJ1LmMgYi9kcml2ZXJzL2Zpcm13YXJlL2RlbGxfcmJ1LmMKaW5kZXggYmExNzI5Mi4uNmQ4MzI5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJtd2FyZS9kZWxsX3JidS5jCisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZGVsbF9yYnUuYwpAQCAtMzQsNyArMzQsNiBAQAogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICAqLwotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2hkYXBzLmMgYi9kcml2ZXJzL2h3bW9uL2hkYXBzLmMKaW5kZXggMWU1ZGZjNy4uYzgxYmQ0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9oZGFwcy5jCisrKyBiL2RyaXZlcnMvaHdtb24vaGRhcHMuYwpAQCAtNjAsOSArNjAsMTEgQEAKIAogI2RlZmluZSBIREFQU19QT0xMX1BFUklPRAkoSFovMjApCS8qIHBvbGwgZm9yIGlucHV0IGV2ZXJ5IDEvMjBzICovCiAjZGVmaW5lIEhEQVBTX0lOUFVUX0ZVWloJNAkvKiBpbnB1dCBldmVudCB0aHJlc2hvbGQgKi8KKyNkZWZpbmUgSERBUFNfSU5QVVRfRkxBVAk0CiAKIHN0YXRpYyBzdHJ1Y3QgdGltZXJfbGlzdCBoZGFwc190aW1lcjsKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2Oworc3RhdGljIHN0cnVjdCBpbnB1dF9kZXYgKmhkYXBzX2lkZXY7CiBzdGF0aWMgdW5zaWduZWQgaW50IGhkYXBzX2ludmVydDsKIHN0YXRpYyB1OCBrbV9hY3Rpdml0eTsKIHN0YXRpYyBpbnQgcmVzdF94OwpAQCAtMjg0LDcgKzI4Niw3IEBACiAKIC8qIERldmljZSBtb2RlbCBzdHVmZiAqLwogCi1zdGF0aWMgaW50IGhkYXBzX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgaGRhcHNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCWludCByZXQ7CiAKQEAgLTI5NiwyOSArMjk4LDE4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaGRhcHNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgaGRhcHNfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlyZXR1cm4gaGRhcHNfZGV2aWNlX2luaXQoKTsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGhkYXBzX2RyaXZlciA9IHsKLQkubmFtZSA9ICJoZGFwcyIsCi0JLmJ1cyA9ICZwbGF0Zm9ybV9idXNfdHlwZSwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGhkYXBzX2RyaXZlciA9IHsKIAkucHJvYmUgPSBoZGFwc19wcm9iZSwKLQkucmVzdW1lID0gaGRhcHNfcmVzdW1lCi19OwotCi0vKiBJbnB1dCBjbGFzcyBzdHVmZiAqLwotCi1zdGF0aWMgc3RydWN0IGlucHV0X2RldiBoZGFwc19pZGV2ID0gewotCS5uYW1lID0gImhkYXBzIiwKLQkuZXZiaXQgPSB7IEJJVChFVl9BQlMpIH0sCi0JLmFic2JpdCA9IHsgQklUKEFCU19YKSB8IEJJVChBQlNfWSkgfSwKLQkuYWJzbWluICA9IHsgW0FCU19YXSA9IC0yNTYsIFtBQlNfWV0gPSAtMjU2IH0sCi0JLmFic21heCAgPSB7IFtBQlNfWF0gPSAyNTYsIFtBQlNfWV0gPSAyNTYgfSwKLQkuYWJzZnV6eiA9IHsgW0FCU19YXSA9IEhEQVBTX0lOUFVUX0ZVWlosIFtBQlNfWV0gPSBIREFQU19JTlBVVF9GVVpaIH0sCi0JLmFic2ZsYXQgPSB7IFtBQlNfWF0gPSBIREFQU19JTlBVVF9GVVpaLCBbQUJTX1ldID0gSERBUFNfSU5QVVRfRlVaWiB9LAorCS5yZXN1bWUgPSBoZGFwc19yZXN1bWUsCisJLmRyaXZlcgk9IHsKKwkJLm5hbWUgPSAiaGRhcHMiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAogfTsKIAogLyoKQEAgLTM0Miw5ICszMzMsOSBAQAogCWlmIChfX2hkYXBzX3JlYWRfcGFpcihIREFQU19QT1JUX1hQT1MsIEhEQVBTX1BPUlRfWVBPUywgJngsICZ5KSkKIAkJZ290byBvdXQ7CiAKLQlpbnB1dF9yZXBvcnRfYWJzKCZoZGFwc19pZGV2LCBBQlNfWCwgeCAtIHJlc3RfeCk7Ci0JaW5wdXRfcmVwb3J0X2FicygmaGRhcHNfaWRldiwgQUJTX1ksIHkgLSByZXN0X3kpOwotCWlucHV0X3N5bmMoJmhkYXBzX2lkZXYpOworCWlucHV0X3JlcG9ydF9hYnMoaGRhcHNfaWRldiwgQUJTX1gsIHggLSByZXN0X3gpOworCWlucHV0X3JlcG9ydF9hYnMoaGRhcHNfaWRldiwgQUJTX1ksIHkgLSByZXN0X3kpOworCWlucHV0X3N5bmMoaGRhcHNfaWRldik7CiAKIAltb2RfdGltZXIoJmhkYXBzX3RpbWVyLCBqaWZmaWVzICsgSERBUFNfUE9MTF9QRVJJT0QpOwogCkBAIC01NTAsNyArNTQxLDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JcmV0ID0gZHJpdmVyX3JlZ2lzdGVyKCZoZGFwc19kcml2ZXIpOworCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmaGRhcHNfZHJpdmVyKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dF9yZWdpb247CiAKQEAgLTU2NCwxMiArNTU1LDI1IEBACiAJaWYgKHJldCkKIAkJZ290byBvdXRfZGV2aWNlOwogCisJaGRhcHNfaWRldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOworCWlmICghaGRhcHNfaWRldikgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dF9ncm91cDsKKwl9CisKIAkvKiBpbml0aWFsIGNhbGlicmF0ZSBmb3IgdGhlIGlucHV0IGRldmljZSAqLwogCWhkYXBzX2NhbGlicmF0ZSgpOwogCiAJLyogaW5pdGlhbGl6ZSB0aGUgaW5wdXQgY2xhc3MgKi8KLQloZGFwc19pZGV2LmRldiA9ICZwZGV2LT5kZXY7Ci0JaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKCZoZGFwc19pZGV2KTsKKwloZGFwc19pZGV2LT5uYW1lID0gImhkYXBzIjsKKwloZGFwc19pZGV2LT5jZGV2LmRldiA9ICZwZGV2LT5kZXY7CisJaGRhcHNfaWRldi0+ZXZiaXRbMF0gPSBCSVQoRVZfQUJTKTsKKwlpbnB1dF9zZXRfYWJzX3BhcmFtcyhoZGFwc19pZGV2LCBBQlNfWCwKKwkJCS0yNTYsIDI1NiwgSERBUFNfSU5QVVRfRlVaWiwgSERBUFNfSU5QVVRfRkxBVCk7CisJaW5wdXRfc2V0X2Fic19wYXJhbXMoaGRhcHNfaWRldiwgQUJTX1gsCisJCQktMjU2LCAyNTYsIEhEQVBTX0lOUFVUX0ZVWlosIEhEQVBTX0lOUFVUX0ZMQVQpOworCisJaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGhkYXBzX2lkZXYpOwogCiAJLyogc3RhcnQgdXAgb3VyIHRpbWVyIGZvciB0aGUgaW5wdXQgZGV2aWNlICovCiAJaW5pdF90aW1lcigmaGRhcHNfdGltZXIpOwpAQCAtNTgwLDEwICs1ODQsMTIgQEAKIAlwcmludGsoS0VSTl9JTkZPICJoZGFwczogZHJpdmVyIHN1Y2Nlc3NmdWxseSBsb2FkZWQuXG4iKTsKIAlyZXR1cm4gMDsKIAorb3V0X2dyb3VwOgorCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZoZGFwc19hdHRyaWJ1dGVfZ3JvdXApOwogb3V0X2RldmljZToKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwZGV2KTsKIG91dF9kcml2ZXI6Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJmhkYXBzX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmhkYXBzX2RyaXZlcik7CiBvdXRfcmVnaW9uOgogCXJlbGVhc2VfcmVnaW9uKEhEQVBTX0xPV19QT1JULCBIREFQU19OUl9QT1JUUyk7CiBvdXQ6CkBAIC01OTQsMTAgKzYwMCwxMCBAQAogc3RhdGljIHZvaWQgX19leGl0IGhkYXBzX2V4aXQodm9pZCkKIHsKIAlkZWxfdGltZXJfc3luYygmaGRhcHNfdGltZXIpOwotCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKCZoZGFwc19pZGV2KTsKKwlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShoZGFwc19pZGV2KTsKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmaGRhcHNfYXR0cmlidXRlX2dyb3VwKTsKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwZGV2KTsKLQlkcml2ZXJfdW5yZWdpc3RlcigmaGRhcHNfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmaGRhcHNfZHJpdmVyKTsKIAlyZWxlYXNlX3JlZ2lvbihIREFQU19MT1dfUE9SVCwgSERBUFNfTlJfUE9SVFMpOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiaGRhcHM6IGRyaXZlciB1bmxvYWRlZC5cbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi93ODM2MjdoZi5jIGIvZHJpdmVycy9od21vbi93ODM2MjdoZi5jCmluZGV4IDcwZWY5MjYuLjRlOWEwNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vdzgzNjI3aGYuYworKysgYi9kcml2ZXJzL2h3bW9uL3c4MzYyN2hmLmMKQEAgLTE4MCwxMSArMTgwLDEwIEBACiAjZGVmaW5lIFc4Mzc4MURfUkVHX0JBTksgMHg0RQogCiAjZGVmaW5lIFc4Mzc4MURfUkVHX0NPTkZJRyAweDQwCi0jZGVmaW5lIFc4Mzc4MURfUkVHX0FMQVJNMSAweDQxCi0jZGVmaW5lIFc4Mzc4MURfUkVHX0FMQVJNMiAweDQyCi0jZGVmaW5lIFc4Mzc4MURfUkVHX0FMQVJNMyAweDQ1MAorI2RlZmluZSBXODM3ODFEX1JFR19BTEFSTTEgMHg0NTkKKyNkZWZpbmUgVzgzNzgxRF9SRUdfQUxBUk0yIDB4NDVBCisjZGVmaW5lIFc4Mzc4MURfUkVHX0FMQVJNMyAweDQ1QgogCi0jZGVmaW5lIFc4Mzc4MURfUkVHX0lSUSAweDRDCiAjZGVmaW5lIFc4Mzc4MURfUkVHX0JFRVBfQ09ORklHIDB4NEQKICNkZWZpbmUgVzgzNzgxRF9SRUdfQkVFUF9JTlRTMSAweDU2CiAjZGVmaW5lIFc4Mzc4MURfUkVHX0JFRVBfSU5UUzIgMHg1NwpAQCAtMTM3MCwxMyArMTM2OSw2IEBACiAJCQkJCVc4Mzc4MURfUkVHX1RFTVAzX0NPTkZJRywgdG1wICYgMHhmZSk7CiAJCQl9CiAJCX0KLQotCQkvKiBlbmFibGUgY29tcGFyYXRvciBtb2RlIGZvciB0ZW1wMiBhbmQgdGVtcDMgc28KLQkgICAgICAgICAgIGFsYXJtIGluZGljYXRpb24gd2lsbCB3b3JrIGNvcnJlY3RseSAqLwotCQlpID0gdzgzNjI3aGZfcmVhZF92YWx1ZShjbGllbnQsIFc4Mzc4MURfUkVHX0lSUSk7Ci0JCWlmICghKGkgJiAweDQwKSkKLQkJCXc4MzYyN2hmX3dyaXRlX3ZhbHVlKGNsaWVudCwgVzgzNzgxRF9SRUdfSVJRLAotCQkJCQkgICAgaSB8IDB4NDApOwogCX0KIAogCS8qIFN0YXJ0IG1vbml0b3JpbmcgKi8KQEAgLTE0MDAsNyArMTM5Miw3IEBACiAJCQkvKiBza2lwIG1pc3Npbmcgc2Vuc29ycyAqLwogCQkJaWYgKCgoZGF0YS0+dHlwZSA9PSB3ODM2OTdoZikgJiYgKGkgPT0gMSkpIHx8CiAJCQkgICAgKChkYXRhLT50eXBlID09IHc4MzYyN3RoZiB8fCBkYXRhLT50eXBlID09IHc4MzYzN2hmKQotCQkJICAgICYmIChpID09IDQgfHwgaSA9PSA1KSkpCisJCQkgICAgJiYgKGkgPT0gNSB8fCBpID09IDYpKSkKIAkJCQljb250aW51ZTsKIAkJCWRhdGEtPmluW2ldID0KIAkJCSAgICB3ODM2MjdoZl9yZWFkX3ZhbHVlKGNsaWVudCwgVzgzNzgxRF9SRUdfSU4oaSkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbGkxNTM1LmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFsaTE1MzUuYwppbmRleCBiYTkwZjUxLi4zZWI0Nzg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFsaTE1MzUuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFsaTE1MzUuYwpAQCAtNTEzLDcgKzUxMyw2IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBhbGkxNTM1X2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gImFsaTE1MzVfc21idXMiLAogCS5pZF90YWJsZQk9IGFsaTE1MzVfaWRzLAogCS5wcm9iZQkJPSBhbGkxNTM1X3Byb2JlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbGkxNTYzLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFsaTE1NjMuYwppbmRleCBmMWE2MmQ4Li5lNmY2MzIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFsaTE1NjMuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFsaTE1NjMuYwpAQCAtNDA4LDcgKzQwOCw2IEBACiBNT0RVTEVfREVWSUNFX1RBQkxFIChwY2ksIGFsaTE1NjNfaWRfdGFibGUpOwogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYWxpMTU2M19wY2lfZHJpdmVyID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKICAJLm5hbWUJCT0gImFsaTE1NjNfc21idXMiLAogCS5pZF90YWJsZQk9IGFsaTE1NjNfaWRfdGFibGUsCiAgCS5wcm9iZQkJPSBhbGkxNTYzX3Byb2JlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbGkxNXgzLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFsaTE1eDMuYwppbmRleCA0MDBiMDhlLi43YTVjMDk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFsaTE1eDMuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFsaTE1eDMuYwpAQCAtNTA0LDcgKzUwNCw2IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBhbGkxNXgzX2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gImFsaTE1eDNfc21idXMiLAogCS5pZF90YWJsZQk9IGFsaTE1eDNfaWRzLAogCS5wcm9iZQkJPSBhbGkxNXgzX3Byb2JlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbWQ3NTYuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYW1kNzU2LmMKaW5kZXggZGUwMzVkMS4uMTc1MGRlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbWQ3NTYuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFtZDc1Ni5jCkBAIC00MDEsNyArNDAxLDYgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGFtZDc1Nl9kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9ICJhbWQ3NTZfc21idXMiLAogCS5pZF90YWJsZQk9IGFtZDc1Nl9pZHMsCiAJLnByb2JlCQk9IGFtZDc1Nl9wcm9iZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYW1kODExMS5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbWQ4MTExLmMKaW5kZXggZjNiNzlhNi4uZTVlZjU2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbWQ4MTExLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbWQ4MTExLmMKQEAgLTM4NCw3ICszODQsNiBAQAogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYW1kODExMV9kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9ICJhbWQ4MTExX3NtYnVzMiIsCiAJLmlkX3RhYmxlCT0gYW1kODExMV9pZHMsCiAJLnByb2JlCQk9IGFtZDgxMTFfcHJvYmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWh5ZHJhLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWh5ZHJhLmMKaW5kZXggMWI1MzU0ZS4uZTBjYjNiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1oeWRyYS5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaHlkcmEuYwpAQCAtMTU1LDcgKzE1NSw2IEBACiAKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGh5ZHJhX2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gImh5ZHJhX3NtYnVzIiwKIAkuaWRfdGFibGUJPSBoeWRyYV9pZHMsCiAJLnByb2JlCQk9IGh5ZHJhX3Byb2JlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pODAxLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWk4MDEuYwppbmRleCA0ZjYzMTk1MC4uYWMzZWFmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pODAxLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pODAxLmMKQEAgLTU2MCw3ICs1NjAsNiBAQAogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgaTgwMV9kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9ICJpODAxX3NtYnVzIiwKIAkuaWRfdGFibGUJPSBpODAxX2lkcywKIAkucHJvYmUJCT0gaTgwMV9wcm9iZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaTgxMC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pODEwLmMKaW5kZXggNTJiYzMwNS4uNzQ4YmUzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pODEwLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pODEwLmMKQEAgLTIzMyw3ICsyMzMsNiBAQAogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgaTgxMF9kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9ICJpODEwX3NtYnVzIiwKIAkuaWRfdGFibGUJPSBpODEwX2lkcywKIAkucHJvYmUJCT0gaTgxMF9wcm9iZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaW9wM3h4LmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWlvcDN4eC5jCmluZGV4IGNmYWU0YWQuLjE0MTQ4NTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaW9wM3h4LmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pb3AzeHguYwpAQCAtNDA1LDEwICs0MDUsOSBAQAogfTsKIAogc3RhdGljIGludCAKLWlvcDN4eF9pMmNfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKK2lvcDN4eF9pMmNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXZpY2UpOwotCXN0cnVjdCBpMmNfYWRhcHRlciAqcGFkYXB0ZXIgPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CisJc3RydWN0IGkyY19hZGFwdGVyICpwYWRhcHRlciA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBpMmNfYWxnb19pb3AzeHhfZGF0YSAqYWRhcHRlcl9kYXRhID0gCiAJCShzdHJ1Y3QgaTJjX2FsZ29faW9wM3h4X2RhdGEgKilwYWRhcHRlci0+YWxnb19kYXRhOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKQEAgLTQyNiwxNSArNDI1LDE0IEBACiAJa2ZyZWUoYWRhcHRlcl9kYXRhKTsKIAlrZnJlZShwYWRhcHRlcik7CiAKLQlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgTlVMTCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCAKLWlvcDN4eF9pMmNfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQoraW9wM3h4X2kyY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAlpbnQgcmV0OwogCXN0cnVjdCBpMmNfYWRhcHRlciAqbmV3X2FkYXB0ZXI7CkBAIC00OTksNyArNDk3LDcgQEAKIAlpb3AzeHhfaTJjX3NldF9zbGF2ZV9hZGRyKGFkYXB0ZXJfZGF0YSk7CiAJaW9wM3h4X2kyY19lbmFibGUoYWRhcHRlcl9kYXRhKTsKIAotCWRldl9zZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2LCBuZXdfYWRhcHRlcik7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbmV3X2FkYXB0ZXIpOwogCW5ld19hZGFwdGVyLT5hbGdvX2RhdGEgPSBhZGFwdGVyX2RhdGE7CiAKIAlpMmNfYWRkX2FkYXB0ZXIobmV3X2FkYXB0ZXIpOwpAQCAtNTIzLDI0ICs1MjEsMjUgQEAKIH0KIAogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgaW9wM3h4X2kyY19kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5uYW1lCQk9ICJJT1AzeHgtSTJDIiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGlvcDN4eF9pMmNfZHJpdmVyID0gewogCS5wcm9iZQkJPSBpb3AzeHhfaTJjX3Byb2JlLAotCS5yZW1vdmUJCT0gaW9wM3h4X2kyY19yZW1vdmUKKwkucmVtb3ZlCQk9IGlvcDN4eF9pMmNfcmVtb3ZlLAorCS5kcml2ZXIJCT0geworCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLm5hbWUJPSAiSU9QM3h4LUkyQyIsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IAogaTJjX2lvcDN4eF9pbml0ICh2b2lkKQogewotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJmlvcDN4eF9pMmNfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZpb3AzeHhfaTJjX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCAKIGkyY19pb3AzeHhfZXhpdCAodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmaW9wM3h4X2kyY19kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZpb3AzeHhfaTJjX2RyaXZlcik7CiAJcmV0dXJuOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWl4cDIwMDAuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaXhwMjAwMC5jCmluZGV4IDY0NTUyYTMuLmNlZjAyNGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaXhwMjAwMC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaXhwMjAwMC5jCkBAIC04NiwxMiArODYsMTEgQEAKIAlzdHJ1Y3QgaTJjX2FsZ29fYml0X2RhdGEgYWxnb19kYXRhOwogfTsKIAotc3RhdGljIGludCBpeHAyMDAwX2kyY19yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBpeHAyMDAwX2kyY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdF9kZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdF9kZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKLQlzdHJ1Y3QgaXhwMjAwMF9pMmNfZGF0YSAqZHJ2X2RhdGEgPSBkZXZfZ2V0X2RydmRhdGEoJnBsYXRfZGV2LT5kZXYpOworCXN0cnVjdCBpeHAyMDAwX2kyY19kYXRhICpkcnZfZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBsYXRfZGV2KTsKIAotCWRldl9zZXRfZHJ2ZGF0YSgmcGxhdF9kZXYtPmRldiwgTlVMTCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGxhdF9kZXYsIE5VTEwpOwogCiAJaTJjX2JpdF9kZWxfYnVzKCZkcnZfZGF0YS0+YWRhcHRlcik7CiAKQEAgLTEwMCwxMCArOTksOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGl4cDIwMDBfaTJjX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgaXhwMjAwMF9pMmNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdF9kZXYpCiB7CiAJaW50IGVycjsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0X2RldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXN0cnVjdCBpeHAyMDAwX2kyY19waW5zICpncGlvID0gcGxhdF9kZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCBpeHAyMDAwX2kyY19kYXRhICpkcnZfZGF0YSA9IAogCQlremFsbG9jKHNpemVvZihzdHJ1Y3QgaXhwMjAwMF9pMmNfZGF0YSksIEdGUF9LRVJORUwpOwpAQCAtMTM5LDI3ICsxMzcsMjggQEAKIAkJcmV0dXJuIGVycjsKIAl9IAogCi0JZGV2X3NldF9kcnZkYXRhKCZwbGF0X2Rldi0+ZGV2LCBkcnZfZGF0YSk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGxhdF9kZXYsIGRydl9kYXRhKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgaXhwMjAwMF9pMmNfZHJpdmVyID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkubmFtZQkJPSAiSVhQMjAwMC1JMkMiLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaXhwMjAwMF9pMmNfZHJpdmVyID0gewogCS5wcm9iZQkJPSBpeHAyMDAwX2kyY19wcm9iZSwKIAkucmVtb3ZlCQk9IGl4cDIwMDBfaTJjX3JlbW92ZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAiSVhQMjAwMC1JMkMiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgaXhwMjAwMF9pMmNfaW5pdCh2b2lkKQogewotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJml4cDIwMDBfaTJjX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmaXhwMjAwMF9pMmNfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGl4cDIwMDBfaTJjX2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmaXhwMjAwMF9pMmNfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmaXhwMjAwMF9pMmNfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoaXhwMjAwMF9pMmNfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWl4cDR4eC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1peHA0eHguYwppbmRleCBjYzY1MmMzLi5hYTM2ODU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWl4cDR4eC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaXhwNHh4LmMKQEAgLTg3LDEyICs4NywxMSBAQAogCXN0cnVjdCBpMmNfYWxnb19iaXRfZGF0YSBhbGdvX2RhdGE7CiB9OwogCi1zdGF0aWMgaW50IGl4cDR4eF9pMmNfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgaXhwNHh4X2kyY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdF9kZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdF9kZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKLQlzdHJ1Y3QgaXhwNHh4X2kyY19kYXRhICpkcnZfZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YSgmcGxhdF9kZXYtPmRldik7CisJc3RydWN0IGl4cDR4eF9pMmNfZGF0YSAqZHJ2X2RhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwbGF0X2Rldik7CiAKLQlkZXZfc2V0X2RydmRhdGEoJnBsYXRfZGV2LT5kZXYsIE5VTEwpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBsYXRfZGV2LCBOVUxMKTsKIAogCWkyY19iaXRfZGVsX2J1cygmZHJ2X2RhdGEtPmFkYXB0ZXIpOwogCkBAIC0xMDEsMTAgKzEwMCw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaXhwNHh4X2kyY19wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGl4cDR4eF9pMmNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdF9kZXYpCiB7CiAJaW50IGVycjsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0X2RldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXN0cnVjdCBpeHA0eHhfaTJjX3BpbnMgKmdwaW8gPSBwbGF0X2Rldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IGl4cDR4eF9pMmNfZGF0YSAqZHJ2X2RhdGEgPSAKIAkJa3phbGxvYyhzaXplb2Yoc3RydWN0IGl4cDR4eF9pMmNfZGF0YSksIEdGUF9LRVJORUwpOwpAQCAtMTQ4LDI3ICsxNDYsMjggQEAKIAkJcmV0dXJuIGVycjsKIAl9CiAKLQlkZXZfc2V0X2RydmRhdGEoJnBsYXRfZGV2LT5kZXYsIGRydl9kYXRhKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwbGF0X2RldiwgZHJ2X2RhdGEpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBpeHA0eHhfaTJjX2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLm5hbWUJCT0gIklYUDRYWC1JMkMiLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaXhwNHh4X2kyY19kcml2ZXIgPSB7CiAJLnByb2JlCQk9IGl4cDR4eF9pMmNfcHJvYmUsCiAJLnJlbW92ZQkJPSBpeHA0eHhfaTJjX3JlbW92ZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAiSVhQNFhYLUkyQyIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBpeHA0eHhfaTJjX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZpeHA0eHhfaTJjX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmaXhwNHh4X2kyY19kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgaXhwNHh4X2kyY19leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJml4cDR4eF9pMmNfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmaXhwNHh4X2kyY19kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChpeHA0eHhfaTJjX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tcGMuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbXBjLmMKaW5kZXggNjViOTM5YS4uNWNjZDMzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tcGMuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW1wYy5jCkBAIC0yODgsMTEgKzI4OCwxMCBAQAogCS5yZXRyaWVzID0gMQogfTsKIAotc3RhdGljIGludCBmc2xfaTJjX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKK3N0YXRpYyBpbnQgZnNsX2kyY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCWludCByZXN1bHQgPSAwOwogCXN0cnVjdCBtcGNfaTJjICppMmM7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXZpY2UpOwogCXN0cnVjdCBmc2xfaTJjX3BsYXRmb3JtX2RhdGEgKnBkYXRhOwogCXN0cnVjdCByZXNvdXJjZSAqciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAKQEAgLTMyMyw3ICszMjIsNyBAQAogCQl9CiAKIAltcGNfaTJjX3NldGNsb2NrKGkyYyk7Ci0JZGV2X3NldF9kcnZkYXRhKGRldmljZSwgaTJjKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBpMmMpOwogCiAJaTJjLT5hZGFwID0gbXBjX29wczsKIAlpMmNfc2V0X2FkYXBkYXRhKCZpMmMtPmFkYXAsIGkyYyk7CkBAIC0zNDUsMTIgKzM0NCwxMiBAQAogCXJldHVybiByZXN1bHQ7CiB9OwogCi1zdGF0aWMgaW50IGZzbF9pMmNfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKK3N0YXRpYyBpbnQgZnNsX2kyY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgbXBjX2kyYyAqaTJjID0gZGV2X2dldF9kcnZkYXRhKGRldmljZSk7CisJc3RydWN0IG1wY19pMmMgKmkyYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCiAJaTJjX2RlbF9hZGFwdGVyKCZpMmMtPmFkYXApOwotCWRldl9zZXRfZHJ2ZGF0YShkZXZpY2UsIE5VTEwpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCiAJaWYgKGkyYy0+aXJxICE9IDApCiAJCWZyZWVfaXJxKGkyYy0+aXJxLCBpMmMpOwpAQCAtMzYxLDIyICszNjAsMjMgQEAKIH07CiAKIC8qIFN0cnVjdHVyZSBmb3IgYSBkZXZpY2UgZHJpdmVyICovCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgZnNsX2kyY19kcml2ZXIgPSB7Ci0JLm93bmVyID0gVEhJU19NT0RVTEUsCi0JLm5hbWUgPSAiZnNsLWkyYyIsCi0JLmJ1cyA9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGZzbF9pMmNfZHJpdmVyID0gewogCS5wcm9iZSA9IGZzbF9pMmNfcHJvYmUsCiAJLnJlbW92ZSA9IGZzbF9pMmNfcmVtb3ZlLAorCS5kcml2ZXIJPSB7CisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQkubmFtZSA9ICJmc2wtaTJjIiwKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgZnNsX2kyY19pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmZnNsX2kyY19kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmZzbF9pMmNfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGZzbF9pMmNfZXhpdCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZmc2xfaTJjX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmZzbF9pMmNfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoZnNsX2kyY19pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbXY2NHh4eC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tdjY0eHh4LmMKaW5kZXggNmI0ODAyNy4uYWZkNzYzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tdjY0eHh4LmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tdjY0eHh4LmMKQEAgLTQ5MiwxMSArNDkyLDEwIEBACiB9CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0Ci1tdjY0eHh4X2kyY19wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCittdjY0eHh4X2kyY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZCkKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCQkqcGQgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgbXY2NHh4eF9pMmNfZGF0YQkJKmRydl9kYXRhOwotCXN0cnVjdCBtdjY0eHh4X2kyY19wZGF0YQkqcGRhdGEgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IG12NjR4eHhfaTJjX3BkYXRhCSpwZGF0YSA9IHBkLT5kZXYucGxhdGZvcm1fZGF0YTsKIAlpbnQJcmM7CiAKIAlpZiAoKHBkLT5pZCAhPSAwKSB8fCAhcGRhdGEpCkBAIC01MjYsNyArNTI1LDcgQEAKIAlkcnZfZGF0YS0+YWRhcHRlci5jbGFzcyA9IEkyQ19DTEFTU19IV01PTjsKIAlkcnZfZGF0YS0+YWRhcHRlci50aW1lb3V0ID0gcGRhdGEtPnRpbWVvdXQ7CiAJZHJ2X2RhdGEtPmFkYXB0ZXIucmV0cmllcyA9IHBkYXRhLT5yZXRyaWVzOwotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGRydl9kYXRhKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZCwgZHJ2X2RhdGEpOwogCWkyY19zZXRfYWRhcGRhdGEoJmRydl9kYXRhLT5hZGFwdGVyLCBkcnZfZGF0YSk7CiAKIAlpZiAocmVxdWVzdF9pcnEoZHJ2X2RhdGEtPmlycSwgbXY2NHh4eF9pMmNfaW50ciwgMCwKQEAgLTU1NSw5ICs1NTQsOSBAQAogfQogCiBzdGF0aWMgaW50IF9fZGV2ZXhpdAotbXY2NHh4eF9pMmNfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK212NjR4eHhfaTJjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IG12NjR4eHhfaTJjX2RhdGEJCSpkcnZfZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBtdjY0eHh4X2kyY19kYXRhCQkqZHJ2X2RhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCWludAlyYzsKIAogCXJjID0gaTJjX2RlbF9hZGFwdGVyKCZkcnZfZGF0YS0+YWRhcHRlcik7CkBAIC01NjgsMjQgKzU2NywyNSBAQAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIG12NjR4eHhfaTJjX2RyaXZlciA9IHsKLQkub3duZXIJPSBUSElTX01PRFVMRSwKLQkubmFtZQk9IE1WNjRYWFhfSTJDX0NUTFJfTkFNRSwKLQkuYnVzCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXY2NHh4eF9pMmNfZHJpdmVyID0gewogCS5wcm9iZQk9IG12NjR4eHhfaTJjX3Byb2JlLAogCS5yZW1vdmUJPSBtdjY0eHh4X2kyY19yZW1vdmUsCisJLmRyaXZlcgk9IHsKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5uYW1lCT0gTVY2NFhYWF9JMkNfQ1RMUl9OQU1FLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdAogbXY2NHh4eF9pMmNfaW5pdCh2b2lkKQogewotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJm12NjR4eHhfaTJjX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbXY2NHh4eF9pMmNfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0CiBtdjY0eHh4X2kyY19leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJm12NjR4eHhfaTJjX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm12NjR4eHhfaTJjX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KG12NjR4eHhfaTJjX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1uZm9yY2UyLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW5mb3JjZTIuYwppbmRleCBmZDI2MDM2Li40ZDE4ZTZlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1uZm9yY2UyLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1uZm9yY2UyLmMKQEAgLTM0Nyw3ICszNDcsNiBAQAogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbmZvcmNlMl9kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9ICJuRm9yY2UyX3NtYnVzIiwKIAkuaWRfdGFibGUJPSBuZm9yY2UyX2lkcywKIAkucHJvYmUJCT0gbmZvcmNlMl9wcm9iZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGlpeDQuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGlpeDQuYwppbmRleCA3ZDYzZWVjLi42OTJmNDczIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBpaXg0LmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1waWl4NC5jCkBAIC00NjIsNyArNDYyLDYgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHBpaXg0X2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gInBpaXg0X3NtYnVzIiwKIAkuaWRfdGFibGUJPSBwaWl4NF9pZHMsCiAJLnByb2JlCQk9IHBpaXg0X3Byb2JlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wcm9zYXZhZ2UuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcHJvc2F2YWdlLmMKaW5kZXggNDJjYjFkOC4uOTQ3OTUyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wcm9zYXZhZ2UuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXByb3NhdmFnZS5jCkBAIC0zMDEsNyArMzAxLDYgQEAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUgKHBjaSwgcHJvc2F2YWdlX3BjaV90YmwpOwogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgcHJvc2F2YWdlX2RyaXZlciA9IHsKLQkub3duZXIJCT0JVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0JInByb3NhdmFnZV9zbWJ1cyIsCiAJLmlkX3RhYmxlCT0JcHJvc2F2YWdlX3BjaV90YmwsCiAJLnByb2JlCQk9CXByb3NhdmFnZV9wcm9iZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcHhhLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXB4YS5jCmluZGV4IDY3Y2NiZWEuLjcwZjdhYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcHhhLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1weGEuYwpAQCAtOTM2LDEwICs5MzYsMTAgQEAKIAl9LAogfTsKIAotc3RhdGljIGludCBpMmNfcHhhX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgaTJjX3B4YV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHB4YV9pMmMgKmkyYyA9ICZpMmNfcHhhOwotCXN0cnVjdCBpMmNfcHhhX3BsYXRmb3JtX2RhdGEgKnBsYXQgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IGkyY19weGFfcGxhdGZvcm1fZGF0YSAqcGxhdCA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJaW50IHJldDsKIAogI2lmZGVmIENPTkZJR19QWEEyN3gKQEAgLTk2OCw3ICs5NjgsNyBAQAogCWkyY19weGFfcmVzZXQoaTJjKTsKIAogCWkyYy0+YWRhcC5hbGdvX2RhdGEgPSBpMmM7Ci0JaTJjLT5hZGFwLmRldi5wYXJlbnQgPSBkZXY7CisJaTJjLT5hZGFwLmRldi5wYXJlbnQgPSAmZGV2LT5kZXY7CiAKIAlyZXQgPSBpMmNfYWRkX2FkYXB0ZXIoJmkyYy0+YWRhcCk7CiAJaWYgKHJldCA8IDApIHsKQEAgLTk3Niw3ICs5NzYsNyBAQAogCQlnb3RvIGVycl9pcnE7CiAJfQogCi0JZGV2X3NldF9kcnZkYXRhKGRldiwgaTJjKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIGkyYyk7CiAKICNpZmRlZiBDT05GSUdfSTJDX1BYQV9TTEFWRQogCXByaW50ayhLRVJOX0lORk8gIkkyQzogJXM6IFBYQSBJMkMgYWRhcHRlciwgc2xhdmUgYWRkcmVzcyAlZFxuIiwKQEAgLTk5MywxMSArOTkzLDExIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBpMmNfcHhhX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGkyY19weGFfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcHhhX2kyYyAqaTJjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHB4YV9pMmMgKmkyYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOwogCiAJaTJjX2RlbF9hZGFwdGVyKCZpMmMtPmFkYXApOwogCWZyZWVfaXJxKElSUV9JMkMsIGkyYyk7CkBAIC0xMDA2LDIxICsxMDA2LDIyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBpMmNfcHhhX2RyaXZlciA9IHsKLQkubmFtZQkJPSAicHhhMnh4LWkyYyIsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBpMmNfcHhhX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gaTJjX3B4YV9wcm9iZSwKIAkucmVtb3ZlCQk9IGkyY19weGFfcmVtb3ZlLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJweGEyeHgtaTJjIiwKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgaTJjX2FkYXBfcHhhX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZpMmNfcHhhX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmaTJjX3B4YV9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBpMmNfYWRhcF9weGFfZXhpdCh2b2lkKQogewotCXJldHVybiBkcml2ZXJfdW5yZWdpc3RlcigmaTJjX3B4YV9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmaTJjX3B4YV9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChpMmNfYWRhcF9weGFfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXMzYzI0MTAuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtczNjMjQxMC5jCmluZGV4IDFiNTgyMjYuLjU4Y2ZkMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtczNjMjQxMC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtczNjMjQxMC5jCkBAIC03NjAsMjQgKzc2MCwyMyBAQAogICogY2FsbGVkIGJ5IHRoZSBidXMgZHJpdmVyIHdoZW4gYSBzdWl0YWJsZSBkZXZpY2UgaXMgZm91bmQKICovCiAKLXN0YXRpYyBpbnQgczNjMjR4eF9pMmNfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBzM2MyNHh4X2kyY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgczNjMjR4eF9pMmMgKmkyYyA9ICZzM2MyNHh4X2kyYzsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAlpbnQgcmV0OwogCiAJLyogZmluZCB0aGUgY2xvY2sgYW5kIGVuYWJsZSBpdCAqLwogCi0JaTJjLT5kZXYgPSBkZXY7Ci0JaTJjLT5jbGsgPSBjbGtfZ2V0KGRldiwgImkyYyIpOworCWkyYy0+ZGV2ID0gJnBkZXYtPmRldjsKKwlpMmMtPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgImkyYyIpOwogCWlmIChJU19FUlIoaTJjLT5jbGspKSB7Ci0JCWRldl9lcnIoZGV2LCAiY2Fubm90IGdldCBjbG9ja1xuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCBnZXQgY2xvY2tcbiIpOwogCQlyZXQgPSAtRU5PRU5UOwogCQlnb3RvIG91dDsKIAl9CiAKLQlkZXZfZGJnKGRldiwgImNsb2NrIHNvdXJjZSAlcFxuIiwgaTJjLT5jbGspOworCWRldl9kYmcoJnBkZXYtPmRldiwgImNsb2NrIHNvdXJjZSAlcFxuIiwgaTJjLT5jbGspOwogCiAJY2xrX3VzZShpMmMtPmNsayk7CiAJY2xrX2VuYWJsZShpMmMtPmNsayk7CkBAIC03ODYsNyArNzg1LDcgQEAKIAogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJaWYgKHJlcyA9PSBOVUxMKSB7Ci0JCWRldl9lcnIoZGV2LCAiY2Fubm90IGZpbmQgSU8gcmVzb3VyY2VcbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgZmluZCBJTyByZXNvdXJjZVxuIik7CiAJCXJldCA9IC1FTk9FTlQ7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTc5NSw3ICs3OTQsNyBAQAogCQkJCQkgcGRldi0+bmFtZSk7CiAKIAlpZiAoaTJjLT5pb2FyZWEgPT0gTlVMTCkgewotCQlkZXZfZXJyKGRldiwgImNhbm5vdCByZXF1ZXN0IElPXG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IHJlcXVlc3QgSU9cbiIpOwogCQlyZXQgPSAtRU5YSU87CiAJCWdvdG8gb3V0OwogCX0KQEAgLTgwMywxNyArODAyLDE3IEBACiAJaTJjLT5yZWdzID0gaW9yZW1hcChyZXMtPnN0YXJ0LCAocmVzLT5lbmQtcmVzLT5zdGFydCkrMSk7CiAKIAlpZiAoaTJjLT5yZWdzID09IE5VTEwpIHsKLQkJZGV2X2VycihkZXYsICJjYW5ub3QgbWFwIElPXG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IG1hcCBJT1xuIik7CiAJCXJldCA9IC1FTlhJTzsKIAkJZ290byBvdXQ7CiAJfQogCi0JZGV2X2RiZyhkZXYsICJyZWdpc3RlcnMgJXAgKCVwLCAlcClcbiIsIGkyYy0+cmVncywgaTJjLT5pb2FyZWEsIHJlcyk7CisJZGV2X2RiZygmcGRldi0+ZGV2LCAicmVnaXN0ZXJzICVwICglcCwgJXApXG4iLCBpMmMtPnJlZ3MsIGkyYy0+aW9hcmVhLCByZXMpOwogCiAJLyogc2V0dXAgaW5mbyBibG9jayBmb3IgdGhlIGkyYyBjb3JlICovCiAKIAlpMmMtPmFkYXAuYWxnb19kYXRhID0gaTJjOwotCWkyYy0+YWRhcC5kZXYucGFyZW50ID0gZGV2OworCWkyYy0+YWRhcC5kZXYucGFyZW50ID0gJnBkZXYtPmRldjsKIAogCS8qIGluaXRpYWxpc2UgdGhlIGkyYyBjb250cm9sbGVyICovCiAKQEAgLTgyNyw3ICs4MjYsNyBAQAogCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSVJRLCAwKTsKIAlpZiAocmVzID09IE5VTEwpIHsKLQkJZGV2X2VycihkZXYsICJjYW5ub3QgZmluZCBJUlFcbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgZmluZCBJUlFcbiIpOwogCQlyZXQgPSAtRU5PRU5UOwogCQlnb3RvIG91dDsKIAl9CkBAIC04MzYsMjMgKzgzNSwyMyBAQAogCQkJICBwZGV2LT5uYW1lLCBpMmMpOwogCiAJaWYgKHJldCAhPSAwKSB7Ci0JCWRldl9lcnIoZGV2LCAiY2Fubm90IGNsYWltIElSUVxuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCBjbGFpbSBJUlFcbiIpOwogCQlnb3RvIG91dDsKIAl9CiAKIAlpMmMtPmlycSA9IHJlczsKIAkJCi0JZGV2X2RiZyhkZXYsICJpcnEgcmVzb3VyY2UgJXAgKCVsZClcbiIsIHJlcywgcmVzLT5zdGFydCk7CisJZGV2X2RiZygmcGRldi0+ZGV2LCAiaXJxIHJlc291cmNlICVwICglbGQpXG4iLCByZXMsIHJlcy0+c3RhcnQpOwogCiAJcmV0ID0gaTJjX2FkZF9hZGFwdGVyKCZpMmMtPmFkYXApOwogCWlmIChyZXQgPCAwKSB7Ci0JCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGFkZCBidXMgdG8gaTJjIGNvcmVcbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gYWRkIGJ1cyB0byBpMmMgY29yZVxuIik7CiAJCWdvdG8gb3V0OwogCX0KIAotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGkyYyk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaTJjKTsKIAotCWRldl9pbmZvKGRldiwgIiVzOiBTM0MgSTJDIGFkYXB0ZXJcbiIsIGkyYy0+YWRhcC5kZXYuYnVzX2lkKTsKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiJXM6IFMzQyBJMkMgYWRhcHRlclxuIiwgaTJjLT5hZGFwLmRldi5idXNfaWQpOwogCiAgb3V0OgogCWlmIChyZXQgPCAwKQpAQCAtODY2LDIyICs4NjUsMjIgQEAKICAqIGNhbGxlZCB3aGVuIGRldmljZSBpcyByZW1vdmVkIGZyb20gdGhlIGJ1cwogKi8KIAotc3RhdGljIGludCBzM2MyNHh4X2kyY19yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBzM2MyNHh4X2kyY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgczNjMjR4eF9pMmMgKmkyYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBzM2MyNHh4X2kyYyAqaTJjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJCiAJaWYgKGkyYyAhPSBOVUxMKSB7CiAJCXMzYzI0eHhfaTJjX2ZyZWUoaTJjKTsKLQkJZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisJCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCX0KIAogCXJldHVybiAwOwogfQogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IHMzYzI0eHhfaTJjX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHMzYzI0eHhfaTJjX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHMzYzI0eHhfaTJjICppMmMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgczNjMjR4eF9pMmMgKmkyYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKIAlpZiAoaTJjICE9IE5VTEwpCiAJCXMzYzI0eHhfaTJjX2luaXQoaTJjKTsKQEAgLTg5NSwzMyArODk0LDM1IEBACiAKIC8qIGRldmljZSBkcml2ZXIgZm9yIHBsYXRmb3JtIGJ1cyBiaXRzICovCiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBzM2MyNDEwX2kyY19kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5uYW1lCQk9ICJzM2MyNDEwLWkyYyIsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzM2MyNDEwX2kyY19kcml2ZXIgPSB7CiAJLnByb2JlCQk9IHMzYzI0eHhfaTJjX3Byb2JlLAogCS5yZW1vdmUJCT0gczNjMjR4eF9pMmNfcmVtb3ZlLAogCS5yZXN1bWUJCT0gczNjMjR4eF9pMmNfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLm5hbWUJPSAiczNjMjQxMC1pMmMiLAorCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgczNjMjQ0MF9pMmNfZHJpdmVyID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkubmFtZQkJPSAiczNjMjQ0MC1pMmMiLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgczNjMjQ0MF9pMmNfZHJpdmVyID0gewogCS5wcm9iZQkJPSBzM2MyNHh4X2kyY19wcm9iZSwKIAkucmVtb3ZlCQk9IHMzYzI0eHhfaTJjX3JlbW92ZSwKIAkucmVzdW1lCQk9IHMzYzI0eHhfaTJjX3Jlc3VtZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5uYW1lCT0gInMzYzI0NDAtaTJjIiwKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgaTJjX2FkYXBfczNjX2luaXQodm9pZCkKIHsKIAlpbnQgcmV0OwogCi0JcmV0ID0gZHJpdmVyX3JlZ2lzdGVyKCZzM2MyNDEwX2kyY19kcml2ZXIpOworCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmczNjMjQxMF9pMmNfZHJpdmVyKTsKIAlpZiAocmV0ID09IDApIHsKLQkJcmV0ID0gZHJpdmVyX3JlZ2lzdGVyKCZzM2MyNDQwX2kyY19kcml2ZXIpOworCQlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnMzYzI0NDBfaTJjX2RyaXZlcik7CiAJCWlmIChyZXQpCi0JCQlkcml2ZXJfdW5yZWdpc3RlcigmczNjMjQxMF9pMmNfZHJpdmVyKTsKKwkJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzM2MyNDEwX2kyY19kcml2ZXIpOwogCX0KIAogCXJldHVybiByZXQ7CkBAIC05MjksOCArOTMwLDggQEAKIAogc3RhdGljIHZvaWQgX19leGl0IGkyY19hZGFwX3MzY19leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJnMzYzI0MTBfaTJjX2RyaXZlcik7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJnMzYzI0NDBfaTJjX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnMzYzI0MTBfaTJjX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnMzYzI0NDBfaTJjX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGkyY19hZGFwX3MzY19pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2F2YWdlNC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zYXZhZ2U0LmMKaW5kZXggYWViZTg3Yi4uMGM4NTE4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zYXZhZ2U0LmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zYXZhZ2U0LmMKQEAgLTE3OSw3ICsxNzksNiBAQAogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgc2F2YWdlNF9kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9ICJzYXZhZ2U0X3NtYnVzIiwKIAkuaWRfdGFibGUJPSBzYXZhZ2U0X2lkcywKIAkucHJvYmUJCT0gc2F2YWdlNF9wcm9iZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2lzNTU5NS5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zaXM1NTk1LmMKaW5kZXggM2FkMjdjMy4uYjU3YWI3NGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2lzNTU5NS5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2lzNTU5NS5jCkBAIC0zOTgsNyArMzk4LDYgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHNpczU1OTVfZHJpdmVyID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJPSAic2lzNTU5NV9zbWJ1cyIsCiAJLmlkX3RhYmxlCT0gc2lzNTU5NV9pZHMsCiAJLnByb2JlCQk9IHNpczU1OTVfcHJvYmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNpczYzMC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zaXM2MzAuYwppbmRleCA3ZjQ5ZTVmLi5hY2I3NWUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNpczYzMC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2lzNjMwLmMKQEAgLTQ5Niw3ICs0OTYsNiBAQAogCiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBzaXM2MzBfZHJpdmVyID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJPSAic2lzNjMwX3NtYnVzIiwKIAkuaWRfdGFibGUJPSBzaXM2MzBfaWRzLAogCS5wcm9iZQkJPSBzaXM2MzBfcHJvYmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNpczk2eC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zaXM5NnguYwppbmRleCA2YTEzNGMwLi4zMDI0OTA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNpczk2eC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2lzOTZ4LmMKQEAgLTMyOSw3ICszMjksNiBAQAogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgc2lzOTZ4X2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gInNpczk2eF9zbWJ1cyIsCiAJLmlkX3RhYmxlCT0gc2lzOTZ4X2lkcywKIAkucHJvYmUJCT0gc2lzOTZ4X3Byb2JlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy12aWEuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdmlhLmMKaW5kZXggNTQ0YTM4ZS4uNDg0YmJhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy12aWEuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXZpYS5jCkBAIC0xNTksNyArMTU5LDYgQEAKIAogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgdnQ1ODZiX2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gInZ0NTg2Yl9zbWJ1cyIsCiAJLmlkX3RhYmxlCT0gdnQ1ODZiX2lkcywKIAkucHJvYmUJCT0gdnQ1ODZiX3Byb2JlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy12aWFwcm8uYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdmlhcHJvLmMKaW5kZXggYzkzNjZiNS4uNDdlNTJiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy12aWFwcm8uYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXZpYXByby5jCkBAIC0xNDIsMTkgKzE0MiwxOCBAQAogCS8qIE1ha2Ugc3VyZSB0aGUgU01CdXMgaG9zdCBpcyByZWFkeSB0byBzdGFydCB0cmFuc21pdHRpbmcgKi8KIAlpZiAoKHRlbXAgPSBpbmJfcChTTUJIU1RTVFMpKSAmIDB4MUYpIHsKIAkJZGV2X2RiZygmdnQ1OTZfYWRhcHRlci5kZXYsICJTTUJ1cyBidXN5ICgweCUwMngpLiAiCi0JCQkiUmVzZXR0aW5nLi4uICIsIHRlbXApOworCQkJIlJlc2V0dGluZy4uLlxuIiwgdGVtcCk7CiAKIAkJb3V0Yl9wKHRlbXAsIFNNQkhTVFNUUyk7CiAJCWlmICgodGVtcCA9IGluYl9wKFNNQkhTVFNUUykpICYgMHgxRikgewotCQkJcHJpbnRrKCJGYWlsZWQhICgweCUwMngpXG4iLCB0ZW1wKTsKKwkJCWRldl9lcnIoJnZ0NTk2X2FkYXB0ZXIuZGV2LCAiU01CdXMgcmVzZXQgZmFpbGVkISAiCisJCQkJIigweCUwMngpXG4iLCB0ZW1wKTsKIAkJCXJldHVybiAtMTsKLQkJfSBlbHNlIHsKLQkJCXByaW50aygiU3VjY2Vzc2Z1bCFcbiIpOwogCQl9CiAJfQogCiAJLyogU3RhcnQgdGhlIHRyYW5zYWN0aW9uIGJ5IHNldHRpbmcgYml0IDYgKi8KLQlvdXRiX3AoMHg0MCB8IChzaXplICYgMHgzQyksIFNNQkhTVENOVCk7CisJb3V0Yl9wKDB4NDAgfCBzaXplLCBTTUJIU1RDTlQpOwogCiAJLyogV2Ugd2lsbCBhbHdheXMgd2FpdCBmb3IgYSBmcmFjdGlvbiBvZiBhIHNlY29uZCAqLwogCWRvIHsKQEAgLTE3MSw3ICsxNzAsNyBAQAogCWlmICh0ZW1wICYgMHgxMCkgewogCQlyZXN1bHQgPSAtMTsKIAkJZGV2X2VycigmdnQ1OTZfYWRhcHRlci5kZXYsICJUcmFuc2FjdGlvbiBmYWlsZWQgKDB4JTAyeClcbiIsCi0JCQlpbmJfcChTTUJIU1RDTlQpICYgMHgzQyk7CisJCQlzaXplKTsKIAl9CiAKIAlpZiAodGVtcCAmIDB4MDgpIHsKQEAgLTE4MCwxMSArMTc5LDEzIEBACiAJfQogCiAJaWYgKHRlbXAgJiAweDA0KSB7CisJCWludCByZWFkID0gaW5iX3AoU01CSFNUQUREKSAmIDB4MDE7CiAJCXJlc3VsdCA9IC0xOwotCQkvKiBRdWljayBjb21tYW5kcyBhcmUgdXNlZCB0byBwcm9iZSBmb3IgY2hpcHMsIHNvCi0JCSAgIGVycm9ycyBhcmUgZXhwZWN0ZWQsIGFuZCB3ZSBkb24ndCB3YW50IHRvIGZyaWdodGVuIHRoZQotCQkgICB1c2VyLiAqLwotCQlpZiAoKGluYl9wKFNNQkhTVENOVCkgJiAweDNDKSAhPSBWVDU5Nl9RVUlDSykKKwkJLyogVGhlIHF1aWNrIGFuZCByZWNlaXZlIGJ5dGUgY29tbWFuZHMgYXJlIHVzZWQgdG8gcHJvYmUKKwkJICAgZm9yIGNoaXBzLCBzbyBlcnJvcnMgYXJlIGV4cGVjdGVkLCBhbmQgd2UgZG9uJ3Qgd2FudAorCQkgICB0byBmcmlnaHRlbiB0aGUgdXNlci4gKi8KKwkJaWYgKCEoKHNpemUgPT0gVlQ1OTZfUVVJQ0sgJiYgIXJlYWQpIHx8CisJCSAgICAgIChzaXplID09IFZUNTk2X0JZVEUgJiYgcmVhZCkpKQogCQkJZGV2X2VycigmdnQ1OTZfYWRhcHRlci5kZXYsICJUcmFuc2FjdGlvbiBlcnJvciFcbiIpOwogCX0KIApAQCAtNDM5LDcgKzQ0MCw2IEBACiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgdnQ1OTZfaWRzKTsKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHZ0NTk2X2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gInZ0NTk2X3NtYnVzIiwKIAkuaWRfdGFibGUJPSB2dDU5Nl9pZHMsCiAJLnByb2JlCQk9IHZ0NTk2X3Byb2JlLApAQCAtNDYyLDkgKzQ2Miw5IEBACiAJfQogfQogCi1NT0RVTEVfQVVUSE9SKAotICAgICJGcm9kbyBMb29pamFhcmQgPGZyb2RvbEBkZHMubmw+IGFuZCAiCi0gICAgIlBoaWxpcCBFZGVsYnJvY2sgPHBoaWxAbmV0cm9lZGdlLmNvbT4iKTsKK01PRFVMRV9BVVRIT1IoIkt5b3N0aSBNYWxra2kgPGttYWxra2lAY2MuaHV0LmZpPiwgIgorCSAgICAgICJNYXJrIEQuIFN0dWRlYmFrZXIgPG1kc3h5ejEyM0B5YWhvby5jb20+IGFuZCAiCisJICAgICAgIkplYW4gRGVsdmFyZSA8a2hhbGlAbGludXgtZnIub3JnPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJ2dDgyYzU5NiBTTUJ1cyBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy12b29kb28zLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXZvb2RvbzMuYwppbmRleCA2NTBjM2ViLi5iNjc1NzczIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXZvb2RvbzMuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXZvb2RvbzMuYwpAQCAtMjI1LDcgKzIyNSw2IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciB2b29kb28zX2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gInZvb2RvbzNfc21idXMiLAogCS5pZF90YWJsZQk9IHZvb2RvbzNfaWRzLAogCS5wcm9iZQkJPSB2b29kb28zX3Byb2JlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvY2hpcHMvZHMxMzM3LmMgYi9kcml2ZXJzL2kyYy9jaGlwcy9kczEzMzcuYwppbmRleCAwMWIwMzcwLi4wMjY4MmZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9jaGlwcy9kczEzMzcuYworKysgYi9kcml2ZXJzL2kyYy9jaGlwcy9kczEzMzcuYwpAQCAtMTY0LDkgKzE2NCw5IEBACiAJYnVmWzFdID0gQklOMkJDRChkdC0+dG1fc2VjKTsKIAlidWZbMl0gPSBCSU4yQkNEKGR0LT50bV9taW4pOwogCWJ1ZlszXSA9IEJJTjJCQ0QoZHQtPnRtX2hvdXIpOwotCWJ1Zls0XSA9IEJJTjJCQ0QoZHQtPnRtX3dkYXkpICsgMTsKKwlidWZbNF0gPSBCSU4yQkNEKGR0LT50bV93ZGF5ICsgMSk7CiAJYnVmWzVdID0gQklOMkJDRChkdC0+dG1fbWRheSk7Ci0JYnVmWzZdID0gQklOMkJDRChkdC0+dG1fbW9uKSArIDE7CisJYnVmWzZdID0gQklOMkJDRChkdC0+dG1fbW9uICsgMSk7CiAJdmFsID0gZHQtPnRtX3llYXI7CiAJaWYgKHZhbCA+PSAxMDApIHsKIAkJdmFsIC09IDEwMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2NoaXBzL2lzcDEzMDFfb21hcC5jIGIvZHJpdmVycy9pMmMvY2hpcHMvaXNwMTMwMV9vbWFwLmMKaW5kZXggOWRiYjcyZi4uZDJhMTAwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvY2hpcHMvaXNwMTMwMV9vbWFwLmMKKysrIGIvZHJpdmVycy9pMmMvY2hpcHMvaXNwMTMwMV9vbWFwLmMKQEAgLTg3MywyNiArODczLDI3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgb3RnX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgb3RnX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAkvLyBzdHJ1Y3Qgb21hcF91c2JfY29uZmlnICpjb25maWcgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CiAKLQlvdGdfZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJb3RnX2RldiA9IGRldjsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBvdGdfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgb3RnX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJb3RnX2RldiA9IDA7CiAJcmV0dXJuIDA7CiB9CiAKLXN0cnVjdCBkZXZpY2VfZHJpdmVyIG9tYXBfb3RnX2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLm5hbWUJCT0gIm9tYXBfb3RnIiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb21hcF9vdGdfZHJpdmVyID0gewogCS5wcm9iZQkJPSBvdGdfcHJvYmUsCi0JLnJlbW92ZQkJPSBvdGdfcmVtb3ZlLAkKKwkucmVtb3ZlCQk9IG90Z19yZW1vdmUsCisJLmRyaXZlcgkJPSB7CisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCQkubmFtZQk9ICJvbWFwX290ZyIsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgb3RnX2JpbmQoc3RydWN0IGlzcDEzMDEgKmlzcCkKQEAgLTkwMiw3ICs5MDMsNyBAQAogCWlmIChvdGdfZGV2KQogCQlyZXR1cm4gLUVCVVNZOwogCi0Jc3RhdHVzID0gZHJpdmVyX3JlZ2lzdGVyKCZvbWFwX290Z19kcml2ZXIpOworCXN0YXR1cyA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmb21hcF9vdGdfZHJpdmVyKTsKIAlpZiAoc3RhdHVzIDwgMCkKIAkJcmV0dXJuIHN0YXR1czsKIApAQCAtOTEzLDcgKzkxNCw3IEBACiAJCXN0YXR1cyA9IC1FTk9ERVY7CiAKIAlpZiAoc3RhdHVzIDwgMCkKLQkJZHJpdmVyX3VucmVnaXN0ZXIoJm9tYXBfb3RnX2RyaXZlcik7CisJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZvbWFwX290Z19kcml2ZXIpOwogCXJldHVybiBzdGF0dXM7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL0tjb25maWcgYi9kcml2ZXJzL2lkZS9LY29uZmlnCmluZGV4IGE3Mzc4ODYuLjQyZTViODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL0tjb25maWcKKysrIGIvZHJpdmVycy9pZGUvS2NvbmZpZwpAQCAtNTM5LDYgKzUzOSwxNSBAQAogCiAJICBJdCBpcyBzYWZlIHRvIHNheSBZIHRvIHRoaXMgcXVlc3Rpb24uCiAKK2NvbmZpZyBCTEtfREVWX0NTNTUzNQorCXRyaXN0YXRlICJBTUQgQ1M1NTM1IGNoaXBzZXQgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFg4NiAmJiAhWDg2XzY0CisJaGVscAorCSAgSW5jbHVkZSBzdXBwb3J0IGZvciBVRE1BIG9uIHRoZSBOU0MvQU1EIENTNTUzNSBjb21wYW5pb24gY2hpcHNldC4KKwkgIFRoaXMgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGRldGVjdGVkIGFuZCBjb25maWd1cmVkIGlmIGZvdW5kLgorCisJICBJdCBpcyBzYWZlIHRvIHNheSBZIHRvIHRoaXMgcXVlc3Rpb24uCisKIGNvbmZpZyBCTEtfREVWX0hQVDM0WAogCXRyaXN0YXRlICJIUFQzNFggY2hpcHNldCBzdXBwb3J0IgogCWhlbHAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1mbG9wcHkuYyBiL2RyaXZlcnMvaWRlL2lkZS1mbG9wcHkuYwppbmRleCBlODNmNTRkLi5mNjE1YWI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5LmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWZsb3BweS5jCkBAIC0yMDM4LDExICsyMDM4LDkgQEAKIAlzdHJ1Y3QgaWRlX2Zsb3BweV9vYmogKmZsb3BweSA9IGlkZV9mbG9wcHlfZyhiZGV2LT5iZF9kaXNrKTsKIAlpZGVfZHJpdmVfdCAqZHJpdmUgPSBmbG9wcHktPmRyaXZlOwogCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOwotCWludCBlcnIgPSBnZW5lcmljX2lkZV9pb2N0bChkcml2ZSwgZmlsZSwgYmRldiwgY21kLCBhcmcpOworCWludCBlcnI7CiAJaW50IHByZXZlbnQgPSAoYXJnKSA/IDEgOiAwOwogCWlkZWZsb3BweV9wY190IHBjOwotCWlmIChlcnIgIT0gLUVJTlZBTCkKLQkJcmV0dXJuIGVycjsKIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBDRFJPTUVKRUNUOgpAQCAtMjA5NCw3ICsyMDkyLDcgQEAKIAljYXNlIElERUZMT1BQWV9JT0NUTF9GT1JNQVRfR0VUX1BST0dSRVNTOgogCQlyZXR1cm4gaWRlZmxvcHB5X2dldF9mb3JtYXRfcHJvZ3Jlc3MoZHJpdmUsIGFyZ3ApOwogCX0KLSAJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIGdlbmVyaWNfaWRlX2lvY3RsKGRyaXZlLCBmaWxlLCBiZGV2LCBjbWQsIGFyZyk7CiB9CiAKIHN0YXRpYyBpbnQgaWRlZmxvcHB5X21lZGlhX2NoYW5nZWQoc3RydWN0IGdlbmRpc2sgKmRpc2spCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtaW9wcy5jIGIvZHJpdmVycy9pZGUvaWRlLWlvcHMuYwppbmRleCAwYjBhYTRmLi5hZjdhZjk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtaW9wcy5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1pb3BzLmMKQEAgLTEwNCw4ICsxMDQsNiBAQAogCWh3aWYtPklOU0wJPSBpZGVfaW5zbDsKIH0KIAotRVhQT1JUX1NZTUJPTChkZWZhdWx0X2h3aWZfaW9wcyk7Ci0KIC8qCiAgKglNTUlPIG9wZXJhdGlvbnMsIHR5cGljYWxseSB1c2VkIGZvciBTQVRBIGNvbnRyb2xsZXJzCiAgKi8KQEAgLTMyOSw4ICszMjcsNiBAQAogCWh3aWYtPmF0YXBpX291dHB1dF9ieXRlcwk9IGF0YXBpX291dHB1dF9ieXRlczsKIH0KIAotRVhQT1JUX1NZTUJPTChkZWZhdWx0X2h3aWZfdHJhbnNwb3J0KTsKLQogLyoKICAqIEJlZ2lubmluZyBvZiBUYXNrZmlsZSBPUENPREUgTGlicmFyeSBhbmQgZmVhdHVyZSBzZXRzLgogICovCkBAIC01MjksOCArNTI1LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotRVhQT1JUX1NZTUJPTCh3YWl0X2Zvcl9yZWFkeSk7Ci0KIC8qCiAgKiBUaGlzIHJvdXRpbmUgYnVzeS13YWl0cyBmb3IgdGhlIGRyaXZlIHN0YXR1cyB0byBiZSBub3QgImJ1c3kiLgogICogSXQgdGhlbiBjaGVja3MgdGhlIHN0YXR1cyBmb3IgYWxsIG9mIHRoZSAiZ29vZCIgYml0cyBhbmQgbm9uZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLXRhc2tmaWxlLmMgYi9kcml2ZXJzL2lkZS9pZGUtdGFza2ZpbGUuYwppbmRleCA3ZWMxOGZhLi41NGY5NjM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtdGFza2ZpbGUuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtdGFza2ZpbGUuYwpAQCAtMTYxLDggKzE2MSw2IEBACiAJcmV0dXJuIGlkZV9zdG9wcGVkOwogfQogCi1FWFBPUlRfU1lNQk9MKGRvX3J3X3Rhc2tmaWxlKTsKLQogLyoKICAqIHNldF9tdWx0bW9kZV9pbnRyKCkgaXMgaW52b2tlZCBvbiBjb21wbGV0aW9uIG9mIGEgV0lOX1NFVE1VTFQgY21kLgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUuYyBiL2RyaXZlcnMvaWRlL2lkZS5jCmluZGV4IDlmZTE5ODAuLjhhZjE3OWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS5jCkBAIC04MDMsNiArODAzLDcgQEAKIAlod2lmLT5pcnEgPSBody0+aXJxOwogCWh3aWYtPm5vcHJvYmUgPSAwOwogCWh3aWYtPmNoaXBzZXQgPSBody0+Y2hpcHNldDsKKwlod2lmLT5nZW5kZXYucGFyZW50ID0gaHctPmRldjsKIAogCWlmICghaW5pdGlhbGl6aW5nKSB7CiAJCXByb2JlX2h3aWZfaW5pdF93aXRoX2ZpeHVwKGh3aWYsIGZpeHVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2xlZ2FjeS9pZGUtY3MuYyBiL2RyaXZlcnMvaWRlL2xlZ2FjeS9pZGUtY3MuYwppbmRleCAxZGFmZmZhLi5lZjc5ODA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9sZWdhY3kvaWRlLWNzLmMKKysrIGIvZHJpdmVycy9pZGUvbGVnYWN5L2lkZS1jcy5jCkBAIC0xODIsMTMgKzE4MiwxNCBAQAogICAgIAogfSAvKiBpZGVfZGV0YWNoICovCiAKLXN0YXRpYyBpbnQgaWRlY3NfcmVnaXN0ZXIodW5zaWduZWQgbG9uZyBpbywgdW5zaWduZWQgbG9uZyBjdGwsIHVuc2lnbmVkIGxvbmcgaXJxKQorc3RhdGljIGludCBpZGVjc19yZWdpc3Rlcih1bnNpZ25lZCBsb25nIGlvLCB1bnNpZ25lZCBsb25nIGN0bCwgdW5zaWduZWQgbG9uZyBpcnEsIHN0cnVjdCBwY21jaWFfZGV2aWNlICpoYW5kbGUpCiB7CiAgICAgaHdfcmVnc190IGh3OwogICAgIG1lbXNldCgmaHcsIDAsIHNpemVvZihodykpOwogICAgIGlkZV9pbml0X2h3aWZfcG9ydHMoJmh3LCBpbywgY3RsLCBOVUxMKTsKICAgICBody5pcnEgPSBpcnE7CiAgICAgaHcuY2hpcHNldCA9IGlkZV9wY2k7CisgICAgaHcuZGV2ID0gJmhhbmRsZS0+ZGV2OwogICAgIHJldHVybiBpZGVfcmVnaXN0ZXJfaHdfd2l0aF9maXh1cCgmaHcsIE5VTEwsIGlkZV91bmRlY29kZWRfc2xhdmUpOwogfQogCkBAIC0zMjcsMTIgKzMyOCwxMiBAQAogCiAgICAgLyogcmV0cnkgcmVnaXN0cmF0aW9uIGluIGNhc2UgZGV2aWNlIGlzIHN0aWxsIHNwaW5uaW5nIHVwICovCiAgICAgZm9yIChoZCA9IC0xLCBpID0gMDsgaSA8IDEwOyBpKyspIHsKLQloZCA9IGlkZWNzX3JlZ2lzdGVyKGlvX2Jhc2UsIGN0bF9iYXNlLCBsaW5rLT5pcnEuQXNzaWduZWRJUlEpOworCWhkID0gaWRlY3NfcmVnaXN0ZXIoaW9fYmFzZSwgY3RsX2Jhc2UsIGxpbmstPmlycS5Bc3NpZ25lZElSUSwgaGFuZGxlKTsKIAlpZiAoaGQgPj0gMCkgYnJlYWs7CiAJaWYgKGxpbmstPmlvLk51bVBvcnRzMSA9PSAweDIwKSB7CiAJICAgIG91dGIoMHgwMiwgY3RsX2Jhc2UgKyAweDEwKTsKIAkgICAgaGQgPSBpZGVjc19yZWdpc3Rlcihpb19iYXNlICsgMHgxMCwgY3RsX2Jhc2UgKyAweDEwLAotCQkJCWxpbmstPmlycS5Bc3NpZ25lZElSUSk7CisJCQkJbGluay0+aXJxLkFzc2lnbmVkSVJRLCBoYW5kbGUpOwogCSAgICBpZiAoaGQgPj0gMCkgewogCQlpb19iYXNlICs9IDB4MTA7CiAJCWN0bF9iYXNlICs9IDB4MTA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvTWFrZWZpbGUgYi9kcml2ZXJzL2lkZS9wY2kvTWFrZWZpbGUKaW5kZXggYWY0NjIyNi4uZjM1ZDY4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9NYWtlZmlsZQpAQCAtNiw2ICs2LDcgQEAKIG9iai0kKENPTkZJR19CTEtfREVWX0NNRDY0WCkJCSs9IGNtZDY0eC5vCiBvYmotJChDT05GSUdfQkxLX0RFVl9DUzU1MjApCQkrPSBjczU1MjAubwogb2JqLSQoQ09ORklHX0JMS19ERVZfQ1M1NTMwKQkJKz0gY3M1NTMwLm8KK29iai0kKENPTkZJR19CTEtfREVWX0NTNTUzNSkJCSs9IGNzNTUzNS5vCiBvYmotJChDT05GSUdfQkxLX0RFVl9TQzEyMDApCQkrPSBzYzEyMDAubwogb2JqLSQoQ09ORklHX0JMS19ERVZfQ1k4MkM2OTMpCQkrPSBjeTgyYzY5My5vCiBvYmotJChDT05GSUdfQkxLX0RFVl9IUFQzNFgpCQkrPSBocHQzNHgubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL2FtZDc0eHguYyBiL2RyaXZlcnMvaWRlL3BjaS9hbWQ3NHh4LmMKaW5kZXggODQ0YTZjOS4uMjE5NjVlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL2FtZDc0eHguYworKysgYi9kcml2ZXJzL2lkZS9wY2kvYW1kNzR4eC5jCkBAIC03NCw2ICs3NCw3IEBACiAJeyBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0VfTUNQMDRfSURFLAkweDUwLCBBTURfVURNQV8xMzMgfSwKIAl7IFBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRV9NQ1A1MV9JREUsCTB4NTAsIEFNRF9VRE1BXzEzMyB9LAogCXsgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFX01DUDU1X0lERSwJMHg1MCwgQU1EX1VETUFfMTMzIH0sCisJeyBQQ0lfREVWSUNFX0lEX0FNRF9DUzU1MzZfSURFLAkJCTB4NDAsIEFNRF9VRE1BXzEwMCB9LAogCXsgMCB9CiB9OwogCkBAIC00OTEsNiArNDkyLDcgQEAKIAkvKiAxNCAqLyBERUNMQVJFX05WX0RFVigiTkZPUkNFLU1DUDA0IiksCiAJLyogMTUgKi8gREVDTEFSRV9OVl9ERVYoIk5GT1JDRS1NQ1A1MSIpLAogCS8qIDE2ICovIERFQ0xBUkVfTlZfREVWKCJORk9SQ0UtTUNQNTUiKSwKKwkvKiAxNyAqLyBERUNMQVJFX0FNRF9ERVYoIkFNRDU1MzYiKSwKIH07CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGFtZDc0eHhfcHJvYmUoc3RydWN0IHBjaV9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQpAQCAtNTI3LDYgKzUyOSw3IEBACiAJeyBQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFX01DUDA0X0lERSwJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMTQgfSwKIAl7IFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0VfTUNQNTFfSURFLAlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAxNSB9LAogCXsgUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRV9NQ1A1NV9JREUsCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDE2IH0sCisJeyBQQ0lfVkVORE9SX0lEX0FNRCwJUENJX0RFVklDRV9JRF9BTURfQ1M1NTM2X0lERSwJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDE3IH0sCiAJeyAwLCB9LAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBhbWQ3NHh4X3BjaV90YmwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL2NzNTUzNS5jIGIvZHJpdmVycy9pZGUvcGNpL2NzNTUzNS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlYjMwNTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2lkZS9wY2kvY3M1NTM1LmMKQEAgLTAsMCArMSwzMDUgQEAKKy8qCisgKiBsaW51eC9kcml2ZXJzL2lkZS9wY2kvY3M1NTM1LmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKgorICogSGlzdG9yeToKKyAqIDA5LzIwLzIwMDUgLSBKYXlhIEt1bWFyIDxqYXlha3VtYXIuaWRlQGdtYWlsLmNvbT4KKyAqIC0gUmV3b3JrZWQgdHVuZXByb2MsIHNldF9kcml2ZSwgbWlzYyBtb2RzIHRvIHByZXAgZm9yIG1haW5saW5lCisgKiAtIFdvcmsgd2FzIHNwb25zb3JlZCBieSBDSVMgKE0pIFNkbiBCaGQuCisgKiBQb3J0ZWQgdG8gS2VybmVsIDIuNi4xMSBvbiBKdW5lIDI2LCAyMDA1IGJ5CisgKiAgIFdvbGZnYW5nIFp1bGVnZXIgPHdvbGZnYW5nLnp1bGVnZXJAZ214LmRlPgorICogICBBbGV4YW5kZXIgS2lhdXNjaCA8YWxleC5raWF1c2NoQHQtb25saW5lLmRlPgorICogT3JpZ2luYWxseSBkZXZlbG9wZWQgYnkgQU1EIGZvciAyLjQvMi42CisgKgorICogRGV2ZWxvcG1lbnQgb2YgdGhpcyBjaGlwc2V0IGRyaXZlciB3YXMgZnVuZGVkCisgKiBieSB0aGUgbmljZSBmb2xrcyBhdCBOYXRpb25hbCBTZW1pY29uZHVjdG9yL0FNRC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIERvY3VtZW50YXRpb246CisgKiAgQ1M1NTM1IGRvY3VtZW50YXRpb24gYXZhaWxhYmxlIGZyb20gQU1ECisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgorCisjaW5jbHVkZSAiaWRlLXRpbWluZy5oIgorCisjZGVmaW5lIE1TUl9BVEFDX0JBU0UJCTB4NTEzMDAwMDAKKyNkZWZpbmUgQVRBQ19HTERfTVNSX0NBUAkoTVNSX0FUQUNfQkFTRSswKQorI2RlZmluZSBBVEFDX0dMRF9NU1JfQ09ORklHCShNU1JfQVRBQ19CQVNFKzB4MDEpCisjZGVmaW5lIEFUQUNfR0xEX01TUl9TTUkJKE1TUl9BVEFDX0JBU0UrMHgwMikKKyNkZWZpbmUgQVRBQ19HTERfTVNSX0VSUk9SCShNU1JfQVRBQ19CQVNFKzB4MDMpCisjZGVmaW5lIEFUQUNfR0xEX01TUl9QTQkJKE1TUl9BVEFDX0JBU0UrMHgwNCkKKyNkZWZpbmUgQVRBQ19HTERfTVNSX0RJQUcJKE1TUl9BVEFDX0JBU0UrMHgwNSkKKyNkZWZpbmUgQVRBQ19JT19CQVIJCShNU1JfQVRBQ19CQVNFKzB4MDgpCisjZGVmaW5lIEFUQUNfUkVTRVQJCShNU1JfQVRBQ19CQVNFKzB4MTApCisjZGVmaW5lIEFUQUNfQ0gwRDBfUElPCQkoTVNSX0FUQUNfQkFTRSsweDIwKQorI2RlZmluZSBBVEFDX0NIMEQwX0RNQQkJKE1TUl9BVEFDX0JBU0UrMHgyMSkKKyNkZWZpbmUgQVRBQ19DSDBEMV9QSU8JCShNU1JfQVRBQ19CQVNFKzB4MjIpCisjZGVmaW5lIEFUQUNfQ0gwRDFfRE1BCQkoTVNSX0FUQUNfQkFTRSsweDIzKQorI2RlZmluZSBBVEFDX1BDSV9BQlJURVJSCShNU1JfQVRBQ19CQVNFKzB4MjQpCisjZGVmaW5lIEFUQUNfQk0wX0NNRF9QUklNCTB4MDAKKyNkZWZpbmUgQVRBQ19CTTBfU1RTX1BSSU0JMHgwMgorI2RlZmluZSBBVEFDX0JNMF9QUkQJCTB4MDQKKyNkZWZpbmUgQ1M1NTM1X0NBQkxFX0RFVEVDVAkweDQ4CisKKy8qIEZvcm1hdCBJIFBJTyBzZXR0aW5ncy4gV2Ugc2VwZXJhdGUgb3V0IGNtZCBhbmQgZGF0YSBmb3Igc2FmZXIgdGltaW5ncyAqLworCitzdGF0aWMgdW5zaWduZWQgaW50IGNzNTUzNV9waW9fY21kX3RpbWluZ3NbNV0gPQoreyAweEY3RjQsIDB4NTNGMywgMHgxM0YxLCAweDUxMzEsIDB4MTEzMSB9Oworc3RhdGljIHVuc2lnbmVkIGludCBjczU1MzVfcGlvX2R0YV90aW1pbmdzWzVdID0KK3sgMHhGN0Y0LCAweEYxNzMsIDB4ODE0MSwgMHg1MTMxLCAweDExMzEgfTsKKworc3RhdGljIHVuc2lnbmVkIGludCBjczU1MzVfbXdkbWFfdGltaW5nc1szXSA9Cit7IDB4N0YwRkZGRjMsIDB4N0YwMzUzNTIsIDB4N2YwMjQyNDEgfTsKKworc3RhdGljIHVuc2lnbmVkIGludCBjczU1MzVfdWRtYV90aW1pbmdzWzVdID0KK3sgMHg3Rjc0MzZBMSwgMHg3RjczMzQ4MSwgMHg3RjcyMzI2MSwgMHg3RjcxMzE2MSwgMHg3RjcwMzA2MSB9OworCisvKiBNYWNyb3MgdG8gY2hlY2sgaWYgdGhlIHJlZ2lzdGVyIGlzIHRoZSByZXNldCB2YWx1ZSAtICByZXNldCB2YWx1ZSBpcyBhbgorICAgaW52YWxpZCB0aW1pbmcgYW5kIGluZGljYXRlcyB0aGUgcmVnaXN0ZXIgaGFzIG5vdCBiZWVuIHNldCBwcmV2aW91c2x5ICovCisKKyNkZWZpbmUgQ1M1NTM1X0JBRF9QSU8odGltaW5ncykgKCAodGltaW5ncyZ+MHg4MDAwMDAwMFVMKSA9PSAweDAwMDA5MTcyICkKKyNkZWZpbmUgQ1M1NTM1X0JBRF9ETUEodGltaW5ncykgKCAodGltaW5ncyAmIDB4MDAwRkZGRkYpID09IDB4MDAwNzc3NzEgKQorCisvKioqKgorICoJY3M1NTM1X3NldF9zcGVlZCAgICAgICAgIC0gICAgIENvbmZpZ3VyZSB0aGUgY2hpcHNldCB0byB0aGUgbmV3IHNwZWVkCisgKglAZHJpdmU6IERyaXZlIHRvIHNldCB1cAorICoJQHNwZWVkOiBkZXNpcmVkIHNwZWVkCisgKgorICoJY3M1NTM1X3NldF9zcGVlZCgpIGNvbmZpZ3VyZXMgdGhlIGNoaXBzZXQgdG8gYSBuZXcgc3BlZWQuCisgKi8KK3N0YXRpYyB2b2lkIGNzNTUzNV9zZXRfc3BlZWQoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBzcGVlZCkKK3sKKworCXUzMiByZWcgPSAwLCBkdW1teTsKKwlpbnQgdW5pdCA9IGRyaXZlLT5zZWxlY3QuYi51bml0OworCisKKwkvKiBTZXQgdGhlIFBJTyB0aW1pbmdzICovCisJaWYgKChzcGVlZCAmIFhGRVJfTU9ERSkgPT0gWEZFUl9QSU8pIHsKKwkJdTggcGlvYTsKKwkJdTggcGlvYjsKKwkJdTggY21kOworCisJCXBpb2EgPSBzcGVlZCAtIFhGRVJfUElPXzA7CisJCXBpb2IgPSBpZGVfZ2V0X2Jlc3RfcGlvX21vZGUoJihkcml2ZS0+aHdpZi0+ZHJpdmVzWyF1bml0XSksCisJCQkJCQkyNTUsIDQsIE5VTEwpOworCQljbWQgPSBwaW9hIDwgcGlvYiA/IHBpb2EgOiBwaW9iOworCisJCS8qIFdyaXRlIHRoZSBzcGVlZCBvZiB0aGUgY3VycmVudCBkcml2ZSAqLworCQlyZWcgPSAoY3M1NTM1X3Bpb19jbWRfdGltaW5nc1tjbWRdIDw8IDE2KSB8CisJCQljczU1MzVfcGlvX2R0YV90aW1pbmdzW3Bpb2FdOworCQl3cm1zcih1bml0ID8gQVRBQ19DSDBEMV9QSU8gOiBBVEFDX0NIMEQwX1BJTywgcmVnLCAwKTsKKworCQkvKiBBbmQgaWYgbmVzc2VzYXJ5IC0gY2hhbmdlIHRoZSBzcGVlZCBvZiB0aGUgb3RoZXIgZHJpdmUgKi8KKwkJcmRtc3IodW5pdCA/ICBBVEFDX0NIMEQwX1BJTyA6IEFUQUNfQ0gwRDFfUElPLCByZWcsIGR1bW15KTsKKworCQlpZiAoKChyZWcgPj4gMTYpICYgY3M1NTM1X3Bpb19jbWRfdGltaW5nc1tjbWRdKSAhPQorCQkJY3M1NTM1X3Bpb19jbWRfdGltaW5nc1tjbWRdKSB7CisJCQlyZWcgJj0gMHgwMDAwRkZGRjsKKwkJCXJlZyB8PSBjczU1MzVfcGlvX2NtZF90aW1pbmdzW2NtZF0gPDwgMTY7CisJCQl3cm1zcih1bml0ID8gQVRBQ19DSDBEMF9QSU8gOiBBVEFDX0NIMEQxX1BJTywgcmVnLCAwKTsKKwkJfQorCisJCS8qIFNldCBiaXQgMzEgb2YgdGhlIERNQSByZWdpc3RlciBmb3IgUElPIGZvcm1hdCAxIHRpbWluZ3MgKi8KKwkJcmRtc3IodW5pdCA/ICBBVEFDX0NIMEQxX0RNQSA6IEFUQUNfQ0gwRDBfRE1BLCByZWcsIGR1bW15KTsKKwkJd3Jtc3IodW5pdCA/IEFUQUNfQ0gwRDFfRE1BIDogQVRBQ19DSDBEMF9ETUEsCisJCQkJCXJlZyB8IDB4ODAwMDAwMDBVTCwgMCk7CisJfSBlbHNlIHsKKwkJcmRtc3IodW5pdCA/IEFUQUNfQ0gwRDFfRE1BIDogQVRBQ19DSDBEMF9ETUEsIHJlZywgZHVtbXkpOworCisJCXJlZyAmPSAweDgwMDAwMDAwVUw7ICAvKiBQcmVzZXJ2ZSB0aGUgUElPIGZvcm1hdCBiaXQgKi8KKworCQlpZiAoc3BlZWQgPj0gWEZFUl9VRE1BXzAgJiYgc3BlZWQgPD0gWEZFUl9VRE1BXzcpCisJCQlyZWcgfD0gY3M1NTM1X3VkbWFfdGltaW5nc1tzcGVlZCAtIFhGRVJfVURNQV8wXTsKKwkJZWxzZSBpZiAoc3BlZWQgPj0gWEZFUl9NV19ETUFfMCAmJiBzcGVlZCA8PSBYRkVSX01XX0RNQV8yKQorCQkJcmVnIHw9IGNzNTUzNV9td2RtYV90aW1pbmdzW3NwZWVkIC0gWEZFUl9NV19ETUFfMF07CisJCWVsc2UKKwkJCXJldHVybjsKKworCQl3cm1zcih1bml0ID8gQVRBQ19DSDBEMV9ETUEgOiBBVEFDX0NIMEQwX0RNQSwgcmVnLCAwKTsKKwl9Cit9CisKK3N0YXRpYyB1OCBjczU1MzVfcmF0ZW1hc2soaWRlX2RyaXZlX3QgKmRyaXZlKQoreworCS8qIGVpZ2h0eTkzIHdpbGwgcmV0dXJuIDEgaWYgaXQncyA4MGNvcmUgYW5kIGNhcGFibGUgb2YKKwlleGNlZWRpbmcgdWRtYTIsIDAgb3RoZXJ3aXNlLiB3ZSBuZWVkIHJhdGVtYXNrIHRvIHNldAorCXRoZSBtYXggc3BlZWQgYW5kIGlmIHdlIGNhbiA+IHVkbWEyIHRoZW4gd2UgcmV0dXJuIDIKKwl3aGljaCBzZWxlY3RzIHNwZWVkX21heCBhcyB1ZG1hNCB3aGljaCBpcyB0aGUgNTUzNSdzIG1heAorCXNwZWVkLCBhbmQgMSBzZWxlY3RzIHVkbWEyIHdoaWNoIGlzIHRoZSBtYXggZm9yIDQwYyAqLworCWlmICghZWlnaHR5X25pbnR5X3RocmVlKGRyaXZlKSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMjsKK30KKworCisvKioqKgorICoJY3M1NTM1X3NldF9kcml2ZSAgICAgICAgIC0gICAgIENvbmZpZ3VyZSB0aGUgZHJpdmUgdG8gdGhlIG5ldyBzcGVlZAorICoJQGRyaXZlOiBEcml2ZSB0byBzZXQgdXAKKyAqCUBzcGVlZDogZGVzaXJlZCBzcGVlZAorICoKKyAqCWNzNTUzNV9zZXRfZHJpdmUoKSBjb25maWd1cmVzIHRoZSBkcml2ZSBhbmQgdGhlIGNoaXBzZXQgdG8gYQorICoJbmV3IHNwZWVkLiBJdCBhbHNvIGNhbiBiZSBjYWxsZWQgYnkgdXBwZXIgbGF5ZXJzLgorICovCitzdGF0aWMgaW50IGNzNTUzNV9zZXRfZHJpdmUoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBzcGVlZCkKK3sKKwlzcGVlZCA9IGlkZV9yYXRlX2ZpbHRlcihjczU1MzVfcmF0ZW1hc2soZHJpdmUpLCBzcGVlZCk7CisJaWRlX2NvbmZpZ19kcml2ZV9zcGVlZChkcml2ZSwgc3BlZWQpOworCWNzNTUzNV9zZXRfc3BlZWQoZHJpdmUsIHNwZWVkKTsKKworCXJldHVybiAwOworfQorCisvKioqKgorICoJY3M1NTM1X3R1bmVwcm9jICAgIC0gICAgICAgUElPIHNldHVwCisgKglAZHJpdmU6IGRyaXZlIHRvIHNldCB1cAorICoJQHBpbzogbW9kZSB0byB1c2UgKDI1NSBmb3IgJ2Jlc3QgcG9zc2libGUnKQorICoKKyAqCUEgY2FsbGJhY2sgZnJvbSB0aGUgdXBwZXIgbGF5ZXJzIGZvciBQSU8tb25seSB0dW5pbmcuCisgKi8KK3N0YXRpYyB2b2lkIGNzNTUzNV90dW5lcHJvYyhpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IHhmZXJzcGVlZCkKK3sKKwl1OCBtb2Rlc1tdID0gewlYRkVSX1BJT18wLCBYRkVSX1BJT18xLCBYRkVSX1BJT18yLCBYRkVSX1BJT18zLAorCQkJWEZFUl9QSU9fNCB9OworCisJLyogY3M1NTM1IG1heCBwaW8gaXMgcGlvIDQsIGJlc3RfcGlvIHdpbGwgY2hlY2sgdGhlIGJsYWNrbGlzdC4KKwlpIHRoaW5rIHdlIGRvbid0IG5lZWQgdG8gcmF0ZV9maWx0ZXIgdGhlIGluY29taW5nIHhmZXJzcGVlZAorCXNpbmNlIHdlIGtub3cgd2UncmUgb25seSBnb2luZyB0byBjaG9vc2UgcGlvICovCisJeGZlcnNwZWVkID0gaWRlX2dldF9iZXN0X3Bpb19tb2RlKGRyaXZlLCB4ZmVyc3BlZWQsIDQsIE5VTEwpOworCWlkZV9jb25maWdfZHJpdmVfc3BlZWQoZHJpdmUsIG1vZGVzW3hmZXJzcGVlZF0pOworCWNzNTUzNV9zZXRfc3BlZWQoZHJpdmUsIHhmZXJzcGVlZCk7Cit9CisKK3N0YXRpYyBpbnQgY3M1NTM1X2NvbmZpZ19kcml2ZV9mb3JfZG1hKGlkZV9kcml2ZV90ICpkcml2ZSkKK3sKKwl1OCBzcGVlZDsKKworCXNwZWVkID0gaWRlX2RtYV9zcGVlZChkcml2ZSwgY3M1NTM1X3JhdGVtYXNrKGRyaXZlKSk7CisKKwkvKiBJZiBubyBETUEgc3BlZWQgd2FzIGF2YWlsYWJsZSB0aGVuIGxldCBkbWFfY2hlY2sgaGl0IHBpbyAqLworCWlmICghc3BlZWQpIHsKKwkJcmV0dXJuIDA7CisJfQorCisJY3M1NTM1X3NldF9kcml2ZShkcml2ZSwgc3BlZWQpOworCXJldHVybiBpZGVfZG1hX2VuYWJsZShkcml2ZSk7Cit9CisKK3N0YXRpYyBpbnQgY3M1NTM1X2RtYV9jaGVjayhpZGVfZHJpdmVfdCAqZHJpdmUpCit7CisJaWRlX2h3aWZfdCAqaHdpZgk9IGRyaXZlLT5od2lmOworCXN0cnVjdCBoZF9kcml2ZWlkICppZAk9IGRyaXZlLT5pZDsKKwl1OCBzcGVlZDsKKworCWRyaXZlLT5pbml0X3NwZWVkID0gMDsKKworCWlmICgoaWQtPmNhcGFiaWxpdHkgJiAxKSAmJiBkcml2ZS0+YXV0b2RtYSkgeworCQlpZiAoaWRlX3VzZV9kbWEoZHJpdmUpKSB7CisJCQlpZiAoY3M1NTM1X2NvbmZpZ19kcml2ZV9mb3JfZG1hKGRyaXZlKSkKKwkJCQlyZXR1cm4gaHdpZi0+aWRlX2RtYV9vbihkcml2ZSk7CisJCX0KKworCQlnb3RvIGZhc3RfYXRhX3BpbzsKKworCX0gZWxzZSBpZiAoKGlkLT5jYXBhYmlsaXR5ICYgOCkgfHwgKGlkLT5maWVsZF92YWxpZCAmIDIpKSB7CitmYXN0X2F0YV9waW86CisJCXNwZWVkID0gaWRlX2dldF9iZXN0X3Bpb19tb2RlKGRyaXZlLCAyNTUsIDQsIE5VTEwpOworCQljczU1MzVfc2V0X2RyaXZlKGRyaXZlLCBzcGVlZCk7CisJCXJldHVybiBod2lmLT5pZGVfZG1hX29mZl9xdWlldGx5KGRyaXZlKTsKKwl9CisJLyogSU9SRFkgbm90IHN1cHBvcnRlZCAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgdTggX19kZXZpbml0IGNzNTUzNV9jYWJsZV9kZXRlY3Qoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwl1OCBiaXQ7CisKKwkvKiBpZiBhIDgwIHdpcmUgY2FibGUgd2FzIGRldGVjdGVkICovCisJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBDUzU1MzVfQ0FCTEVfREVURUNULCAmYml0KTsKKwlyZXR1cm4gKGJpdCAmIDEpOworfQorCisvKioqKgorICoJaW5pdF9od2lmX2NzNTUzNSAgICAgICAgLSAgICAgICBJbml0aWFsaXplIG9uZSBpZGUgY2FubmVsCisgKglAaHdpZjogQ2hhbm5lbCBkZXNjcmlwdG9yCisgKgorICoJVGhpcyBnZXRzIGludm9rZWQgYnkgdGhlIElERSBkcml2ZXIgb25jZSBmb3IgZWFjaCBjaGFubmVsLiBJdAorICoJcGVyZm9ybXMgY2hhbm5lbC1zcGVjaWZpYyBwcmUtaW5pdGlhbGl6YXRpb24gYmVmb3JlIGRyaXZlIHByb2JpbmcuCisgKgorICovCitzdGF0aWMgdm9pZCBfX2RldmluaXQgaW5pdF9od2lmX2NzNTUzNShpZGVfaHdpZl90ICpod2lmKQoreworCWludCBpOworCisJaHdpZi0+YXV0b2RtYSA9IDA7CisKKwlod2lmLT50dW5lcHJvYyA9ICZjczU1MzVfdHVuZXByb2M7CisJaHdpZi0+c3BlZWRwcm9jID0gJmNzNTUzNV9zZXRfZHJpdmU7CisJaHdpZi0+aWRlX2RtYV9jaGVjayA9ICZjczU1MzVfZG1hX2NoZWNrOworCisJaHdpZi0+YXRhcGlfZG1hID0gMTsKKwlod2lmLT51bHRyYV9tYXNrID0gMHgxRjsKKwlod2lmLT5td2RtYV9tYXNrID0gMHgwNzsKKworCisJaHdpZi0+dWRtYV9mb3VyID0gY3M1NTM1X2NhYmxlX2RldGVjdChod2lmLT5wY2lfZGV2KTsKKworCWlmICghbm9hdXRvZG1hKQorCQlod2lmLT5hdXRvZG1hID0gMTsKKworCS8qIGp1c3Qgc2V0dGluZyBhdXRvdHVuZSBhbmQgbm90IHdvcnJ5aW5nIGFib3V0IGJpb3MgdGltaW5ncyAqLworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJaHdpZi0+ZHJpdmVzW2ldLmF1dG90dW5lID0gMTsKKwkJaHdpZi0+ZHJpdmVzW2ldLmF1dG9kbWEgPSBod2lmLT5hdXRvZG1hOworCX0KK30KKworc3RhdGljIGlkZV9wY2lfZGV2aWNlX3QgY3M1NTM1X2NoaXBzZXQgX19kZXZpbml0ZGF0YSA9IHsKKwkubmFtZQkJPSAiQ1M1NTM1IiwKKwkuaW5pdF9od2lmCT0gaW5pdF9od2lmX2NzNTUzNSwKKwkuY2hhbm5lbHMJPSAxLAorCS5hdXRvZG1hCT0gQVVUT0RNQSwKKwkuYm9vdGFibGUJPSBPTl9CT0FSRCwKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGNzNTUzNV9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJCQljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCit7CisJcmV0dXJuIGlkZV9zZXR1cF9wY2lfZGV2aWNlKGRldiwgJmNzNTUzNV9jaGlwc2V0KTsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGNzNTUzNV9wY2lfdGJsW10gPQoreworCXsgUENJX1ZFTkRPUl9JRF9OUywgUENJX0RFVklDRV9JRF9OU19DUzU1MzVfSURFLCBQQ0lfQU5ZX0lELAorCQlQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7IDAsIH0sCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgY3M1NTM1X3BjaV90YmwpOworCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0geworCS5uYW1lICAgICAgID0gIkNTNTUzNV9JREUiLAorCS5pZF90YWJsZSAgID0gY3M1NTM1X3BjaV90YmwsCisJLnByb2JlICAgICAgPSBjczU1MzVfaW5pdF9vbmUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBjczU1MzVfaWRlX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaWRlX3BjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGNzNTUzNV9pZGVfaW5pdCk7CisKK01PRFVMRV9BVVRIT1IoIkFNRCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJQQ0kgZHJpdmVyIG1vZHVsZSBmb3IgQU1EL05TIENTNTUzNSBJREUiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9jeTgyYzY5My5jIGIvZHJpdmVycy9pZGUvcGNpL2N5ODJjNjkzLmMKaW5kZXggNWEzMzUxMy4uOWY0MWVjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL2N5ODJjNjkzLmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL2N5ODJjNjkzLmMKQEAgLTQ2OSw3ICs0NjksNyBAQAogCiBzdGF0aWMgX19kZXZpbml0ZGF0YSBpZGVfaHdpZl90ICpwcmltYXJ5OwogCi12b2lkIF9fZGV2aW5pdCBpbml0X2lvcHNfY3k4MmM2OTMoaWRlX2h3aWZfdCAqaHdpZikKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBpbml0X2lvcHNfY3k4MmM2OTMoaWRlX2h3aWZfdCAqaHdpZikKIHsKIAlpZiAoUENJX0ZVTkMoaHdpZi0+cGNpX2Rldi0+ZGV2Zm4pID09IDEpCiAJCXByaW1hcnkgPSBod2lmOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL3NpaW1hZ2UuYyBiL2RyaXZlcnMvaWRlL3BjaS9zaWltYWdlLmMKaW5kZXggMmI5OTYxYi4uMDIyZDI0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL3NpaW1hZ2UuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvc2lpbWFnZS5jCkBAIC03MDEsNiArNzAxLDcgQEAKIAl1bnNpZ25lZCBsb25nIGJhcnNpemUJPSBwY2lfcmVzb3VyY2VfbGVuKGRldiwgNSk7CiAJdTggdG1wYnl0ZQk9IDA7CiAJdm9pZCBfX2lvbWVtICppb2FkZHI7CisJdTMyIHRtcCwgaXJxX21hc2s7CiAKIAkvKgogCSAqCURyb3AgYmFjayB0byBQSU8gaWYgd2UgY2FuJ3QgbWFwIHRoZSBtbWlvLiBTb21lCkBAIC03MjYsNiArNzI3LDE0IEBACiAJcGNpX3NldF9kcnZkYXRhKGRldiwgKHZvaWQgKikgaW9hZGRyKTsKIAogCWlmIChwZGV2X2lzX3NhdGEoZGV2KSkgeworCQkvKiBtYWtlIHN1cmUgSURFMC8xIGludGVycnVwdHMgYXJlIG5vdCBtYXNrZWQgKi8KKwkJaXJxX21hc2sgPSAoMSA8PCAyMikgfCAoMSA8PCAyMyk7CisJCXRtcCA9IHJlYWRsKGlvYWRkciArIDB4NDgpOworCQlpZiAodG1wICYgaXJxX21hc2spIHsKKwkJCXRtcCAmPSB+aXJxX21hc2s7CisJCQl3cml0ZWwodG1wLCBpb2FkZHIgKyAweDQ4KTsKKwkJCXJlYWRsKGlvYWRkciArIDB4NDgpOyAvKiBmbHVzaCAqLworCQl9CiAJCXdyaXRlbCgwLCBpb2FkZHIgKyAweDE0OCk7CiAJCXdyaXRlbCgwLCBpb2FkZHIgKyAweDFDOCk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvc2V0dXAtcGNpLmMgYi9kcml2ZXJzL2lkZS9zZXR1cC1wY2kuYwppbmRleCAxOGVkNzc2Li5kNGYyMTExIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9zZXR1cC1wY2kuYworKysgYi9kcml2ZXJzL2lkZS9zZXR1cC1wY2kuYwpAQCAtNzg3LDggKzc4Nyw5IEBACiBzdGF0aWMgTElTVF9IRUFEKGlkZV9wY2lfZHJpdmVycyk7CiAKIC8qCi0gKglpZGVfcmVnaXN0ZXJfcGNpX2RyaXZlcgkJLQlhdHRhY2ggSURFIGRyaXZlcgorICoJX19pZGVfcmVnaXN0ZXJfcGNpX2RyaXZlcgktCWF0dGFjaCBJREUgZHJpdmVyCiAgKglAZHJpdmVyOiBwY2kgZHJpdmVyCisgKglAbW9kdWxlOiBvd25lciBtb2R1bGUgb2YgdGhlIGRyaXZlcgogICoKICAqCVJlZ2lzdGVycyBhIGRyaXZlciB3aXRoIHRoZSBJREUgbGF5ZXIuIFRoZSBJREUgbGF5ZXIgYXJyYW5nZXMgdGhhdAogICoJYm9vdCB0aW1lIHNldHVwIGlzIGRvbmUgaW4gdGhlIGV4cGVjdGVkIGRldmljZSBvcmRlciBhbmQgdGhlbiAKQEAgLTgwMSwxNSArODAyLDE2IEBACiAgKglSZXR1cm5zIGFyZSB0aGUgc2FtZSBhcyBmb3IgcGNpX3JlZ2lzdGVyX2RyaXZlcgogICovCiAKLWludCBpZGVfcGNpX3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgcGNpX2RyaXZlciAqZHJpdmVyKQoraW50IF9faWRlX3BjaV9yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHBjaV9kcml2ZXIgKmRyaXZlciwgc3RydWN0IG1vZHVsZSAqbW9kdWxlKQogewogCWlmKCFwcmVfaW5pdCkKLQkJcmV0dXJuIHBjaV9tb2R1bGVfaW5pdChkcml2ZXIpOworCQlyZXR1cm4gX19wY2lfcmVnaXN0ZXJfZHJpdmVyKGRyaXZlciwgbW9kdWxlKTsKKwlkcml2ZXItPmRyaXZlci5vd25lciA9IG1vZHVsZTsKIAlsaXN0X2FkZF90YWlsKCZkcml2ZXItPm5vZGUsICZpZGVfcGNpX2RyaXZlcnMpOwogCXJldHVybiAwOwogfQogCi1FWFBPUlRfU1lNQk9MX0dQTChpZGVfcGNpX3JlZ2lzdGVyX2RyaXZlcik7CitFWFBPUlRfU1lNQk9MX0dQTChfX2lkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKTsKIAogLyoqCiAgKglpZGVfdW5yZWdpc3Rlcl9wY2lfZHJpdmVyCS0JdW5yZWdpc3RlciBhbiBJREUgZHJpdmVyCkBAIC04OTcsNiArODk5LDYgQEAKIAl7CiAJCWxpc3RfZGVsKGwpOwogCQlkID0gbGlzdF9lbnRyeShsLCBzdHJ1Y3QgcGNpX2RyaXZlciwgbm9kZSk7Ci0JCXBjaV9yZWdpc3Rlcl9kcml2ZXIoZCk7CisJCV9fcGNpX3JlZ2lzdGVyX2RyaXZlcihkLCBkLT5kcml2ZXIub3duZXIpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VzZXJfbWFkLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91c2VyX21hZC5jCmluZGV4IGFlZDVjYTIuLjVlYTc0MWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VzZXJfbWFkLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXNlcl9tYWQuYwpAQCAtMzEsNyArMzEsNyBAQAogICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQogICogU09GVFdBUkUuCiAgKgotICogJElkOiB1c2VyX21hZC5jIDI4MTQgMjAwNS0wNy0wNiAxOToxNDowOVogaGFsciAkCisgKiAkSWQ6IHVzZXJfbWFkLmMgNDAxMCAyMDA1LTExLTA5IDIzOjExOjU2WiByb2xhbmQgJAogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTExMCwxMyArMTEwLDEzIEBACiB9OwogCiBzdHJ1Y3QgaWJfdW1hZF9maWxlIHsKLQlzdHJ1Y3QgaWJfdW1hZF9wb3J0ICpwb3J0OwotCXN0cnVjdCBsaXN0X2hlYWQgICAgIHJlY3ZfbGlzdDsKLQlzdHJ1Y3QgbGlzdF9oZWFkICAgICBwb3J0X2xpc3Q7Ci0Jc3BpbmxvY2tfdCAgICAgICAgICAgcmVjdl9sb2NrOwotCXdhaXRfcXVldWVfaGVhZF90ICAgIHJlY3Zfd2FpdDsKLQlzdHJ1Y3QgaWJfbWFkX2FnZW50ICphZ2VudFtJQl9VTUFEX01BWF9BR0VOVFNdOwotCXN0cnVjdCBpYl9tciAgICAgICAgKm1yW0lCX1VNQURfTUFYX0FHRU5UU107CisJc3RydWN0IGliX3VtYWRfcG9ydCAgICAqcG9ydDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXJlY3ZfbGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXBvcnRfbGlzdDsKKwlzcGlubG9ja190CQlyZWN2X2xvY2s7CisJd2FpdF9xdWV1ZV9oZWFkX3QJcmVjdl93YWl0OworCXN0cnVjdCBpYl9tYWRfYWdlbnQgICAgKmFnZW50W0lCX1VNQURfTUFYX0FHRU5UU107CisJaW50CQkJYWdlbnRzX2RlYWQ7CiB9OwogCiBzdHJ1Y3QgaWJfdW1hZF9wYWNrZXQgewpAQCAtMTQ1LDYgKzE0NSwxMiBAQAogCWtmcmVlKGRldik7CiB9CiAKKy8qIGNhbGxlciBtdXN0IGhvbGQgcG9ydC0+bXV0ZXggYXQgbGVhc3QgZm9yIHJlYWRpbmcgKi8KK3N0YXRpYyBzdHJ1Y3QgaWJfbWFkX2FnZW50ICpfX2dldF9hZ2VudChzdHJ1Y3QgaWJfdW1hZF9maWxlICpmaWxlLCBpbnQgaWQpCit7CisJcmV0dXJuIGZpbGUtPmFnZW50c19kZWFkID8gTlVMTCA6IGZpbGUtPmFnZW50W2lkXTsKK30KKwogc3RhdGljIGludCBxdWV1ZV9wYWNrZXQoc3RydWN0IGliX3VtYWRfZmlsZSAqZmlsZSwKIAkJCXN0cnVjdCBpYl9tYWRfYWdlbnQgKmFnZW50LAogCQkJc3RydWN0IGliX3VtYWRfcGFja2V0ICpwYWNrZXQpCkBAIC0xNTIsMTAgKzE1OCwxMSBAQAogCWludCByZXQgPSAxOwogCiAJZG93bl9yZWFkKCZmaWxlLT5wb3J0LT5tdXRleCk7CisKIAlmb3IgKHBhY2tldC0+bWFkLmhkci5pZCA9IDA7CiAJICAgICBwYWNrZXQtPm1hZC5oZHIuaWQgPCBJQl9VTUFEX01BWF9BR0VOVFM7CiAJICAgICBwYWNrZXQtPm1hZC5oZHIuaWQrKykKLQkJaWYgKGFnZW50ID09IGZpbGUtPmFnZW50W3BhY2tldC0+bWFkLmhkci5pZF0pIHsKKwkJaWYgKGFnZW50ID09IF9fZ2V0X2FnZW50KGZpbGUsIHBhY2tldC0+bWFkLmhkci5pZCkpIHsKIAkJCXNwaW5fbG9ja19pcnEoJmZpbGUtPnJlY3ZfbG9jayk7CiAJCQlsaXN0X2FkZF90YWlsKCZwYWNrZXQtPmxpc3QsICZmaWxlLT5yZWN2X2xpc3QpOwogCQkJc3Bpbl91bmxvY2tfaXJxKCZmaWxlLT5yZWN2X2xvY2spOwpAQCAtMzI3LDcgKzMzNCw3IEBACiAKIAlkb3duX3JlYWQoJmZpbGUtPnBvcnQtPm11dGV4KTsKIAotCWFnZW50ID0gZmlsZS0+YWdlbnRbcGFja2V0LT5tYWQuaGRyLmlkXTsKKwlhZ2VudCA9IF9fZ2V0X2FnZW50KGZpbGUsIHBhY2tldC0+bWFkLmhkci5pZCk7CiAJaWYgKCFhZ2VudCkgewogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIGVycl91cDsKQEAgLTQ4MSw3ICs0ODgsNyBAQAogCX0KIAogCWZvciAoYWdlbnRfaWQgPSAwOyBhZ2VudF9pZCA8IElCX1VNQURfTUFYX0FHRU5UUzsgKythZ2VudF9pZCkKLQkJaWYgKCFmaWxlLT5hZ2VudFthZ2VudF9pZF0pCisJCWlmICghX19nZXRfYWdlbnQoZmlsZSwgYWdlbnRfaWQpKQogCQkJZ290byBmb3VuZDsKIAogCXJldCA9IC1FTk9NRU07CkBAIC01MDUsMjkgKzUxMiwxNSBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlmaWxlLT5hZ2VudFthZ2VudF9pZF0gPSBhZ2VudDsKLQotCWZpbGUtPm1yW2FnZW50X2lkXSA9IGliX2dldF9kbWFfbXIoYWdlbnQtPnFwLT5wZCwgSUJfQUNDRVNTX0xPQ0FMX1dSSVRFKTsKLQlpZiAoSVNfRVJSKGZpbGUtPm1yW2FnZW50X2lkXSkpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBlcnI7Ci0JfQotCiAJaWYgKHB1dF91c2VyKGFnZW50X2lkLAogCQkgICAgICh1MzIgX191c2VyICopIChhcmcgKyBvZmZzZXRvZihzdHJ1Y3QgaWJfdXNlcl9tYWRfcmVnX3JlcSwgaWQpKSkpIHsKIAkJcmV0ID0gLUVGQVVMVDsKLQkJZ290byBlcnJfbXI7CisJCWliX3VucmVnaXN0ZXJfbWFkX2FnZW50KGFnZW50KTsKKwkJZ290byBvdXQ7CiAJfQogCisJZmlsZS0+YWdlbnRbYWdlbnRfaWRdID0gYWdlbnQ7CiAJcmV0ID0gMDsKLQlnb3RvIG91dDsKLQotZXJyX21yOgotCWliX2RlcmVnX21yKGZpbGUtPm1yW2FnZW50X2lkXSk7Ci0KLWVycjoKLQlmaWxlLT5hZ2VudFthZ2VudF9pZF0gPSBOVUxMOwotCWliX3VucmVnaXN0ZXJfbWFkX2FnZW50KGFnZW50KTsKIAogb3V0OgogCXVwX3dyaXRlKCZmaWxlLT5wb3J0LT5tdXRleCk7CkBAIC01MzYsMjcgKzUyOSwyOSBAQAogCiBzdGF0aWMgaW50IGliX3VtYWRfdW5yZWdfYWdlbnQoc3RydWN0IGliX3VtYWRfZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CisJc3RydWN0IGliX21hZF9hZ2VudCAqYWdlbnQgPSBOVUxMOwogCXUzMiBpZDsKIAlpbnQgcmV0ID0gMDsKIAorCWlmIChnZXRfdXNlcihpZCwgKHUzMiBfX3VzZXIgKikgYXJnKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKIAlkb3duX3dyaXRlKCZmaWxlLT5wb3J0LT5tdXRleCk7CiAKLQlpZiAoZ2V0X3VzZXIoaWQsICh1MzIgX191c2VyICopIGFyZykpIHsKLQkJcmV0ID0gLUVGQVVMVDsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKGlkIDwgMCB8fCBpZCA+PSBJQl9VTUFEX01BWF9BR0VOVFMgfHwgIWZpbGUtPmFnZW50W2lkXSkgeworCWlmIChpZCA8IDAgfHwgaWQgPj0gSUJfVU1BRF9NQVhfQUdFTlRTIHx8ICFfX2dldF9hZ2VudChmaWxlLCBpZCkpIHsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBvdXQ7CiAJfQogCi0JaWJfZGVyZWdfbXIoZmlsZS0+bXJbaWRdKTsKLQlpYl91bnJlZ2lzdGVyX21hZF9hZ2VudChmaWxlLT5hZ2VudFtpZF0pOworCWFnZW50ID0gZmlsZS0+YWdlbnRbaWRdOwogCWZpbGUtPmFnZW50W2lkXSA9IE5VTEw7CiAKIG91dDoKIAl1cF93cml0ZSgmZmlsZS0+cG9ydC0+bXV0ZXgpOworCisJaWYgKGFnZW50KQorCQlpYl91bnJlZ2lzdGVyX21hZF9hZ2VudChhZ2VudCk7CisKIAlyZXR1cm4gcmV0OwogfQogCkBAIC02MjEsMjMgKzYxNiwyOSBAQAogCXN0cnVjdCBpYl91bWFkX2ZpbGUgKmZpbGUgPSBmaWxwLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGliX3VtYWRfZGV2aWNlICpkZXYgPSBmaWxlLT5wb3J0LT51bWFkX2RldjsKIAlzdHJ1Y3QgaWJfdW1hZF9wYWNrZXQgKnBhY2tldCwgKnRtcDsKKwlpbnQgYWxyZWFkeV9kZWFkOwogCWludCBpOwogCiAJZG93bl93cml0ZSgmZmlsZS0+cG9ydC0+bXV0ZXgpOwotCWZvciAoaSA9IDA7IGkgPCBJQl9VTUFEX01BWF9BR0VOVFM7ICsraSkKLQkJaWYgKGZpbGUtPmFnZW50W2ldKSB7Ci0JCQlpYl9kZXJlZ19tcihmaWxlLT5tcltpXSk7Ci0JCQlpYl91bnJlZ2lzdGVyX21hZF9hZ2VudChmaWxlLT5hZ2VudFtpXSk7Ci0JCX0KKworCWFscmVhZHlfZGVhZCA9IGZpbGUtPmFnZW50c19kZWFkOworCWZpbGUtPmFnZW50c19kZWFkID0gMTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwYWNrZXQsIHRtcCwgJmZpbGUtPnJlY3ZfbGlzdCwgbGlzdCkKIAkJa2ZyZWUocGFja2V0KTsKIAogCWxpc3RfZGVsKCZmaWxlLT5wb3J0X2xpc3QpOwotCXVwX3dyaXRlKCZmaWxlLT5wb3J0LT5tdXRleCk7CisKKwlkb3duZ3JhZGVfd3JpdGUoJmZpbGUtPnBvcnQtPm11dGV4KTsKKworCWlmICghYWxyZWFkeV9kZWFkKQorCQlmb3IgKGkgPSAwOyBpIDwgSUJfVU1BRF9NQVhfQUdFTlRTOyArK2kpCisJCQlpZiAoZmlsZS0+YWdlbnRbaV0pCisJCQkJaWJfdW5yZWdpc3Rlcl9tYWRfYWdlbnQoZmlsZS0+YWdlbnRbaV0pOworCisJdXBfcmVhZCgmZmlsZS0+cG9ydC0+bXV0ZXgpOwogCiAJa2ZyZWUoZmlsZSk7Ci0KIAlrcmVmX3B1dCgmZGV2LT5yZWYsIGliX3VtYWRfcmVsZWFzZV9kZXYpOwogCiAJcmV0dXJuIDA7CkBAIC04MDEsNyArODAyLDcgQEAKIAkJZ290byBlcnJfY2xhc3M7CiAJcG9ydC0+c21fZGV2LT5vd25lciA9IFRISVNfTU9EVUxFOwogCXBvcnQtPnNtX2Rldi0+b3BzICAgPSAmdW1hZF9zbV9mb3BzOwotCWtvYmplY3Rfc2V0X25hbWUoJnBvcnQtPmRldi0+a29iaiwgImlzc20lZCIsIHBvcnQtPmRldl9udW0pOworCWtvYmplY3Rfc2V0X25hbWUoJnBvcnQtPnNtX2Rldi0+a29iaiwgImlzc20lZCIsIHBvcnQtPmRldl9udW0pOwogCWlmIChjZGV2X2FkZChwb3J0LT5zbV9kZXYsIGJhc2VfZGV2ICsgcG9ydC0+ZGV2X251bSArIElCX1VNQURfTUFYX1BPUlRTLCAxKSkKIAkJZ290byBlcnJfc21fY2RldjsKIApAQCAtODYzLDE0ICs4NjQsMzYgQEAKIAogCXBvcnQtPmliX2RldiA9IE5VTEw7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGZpbGUsICZwb3J0LT5maWxlX2xpc3QsIHBvcnRfbGlzdCkKLQkJZm9yIChpZCA9IDA7IGlkIDwgSUJfVU1BRF9NQVhfQUdFTlRTOyArK2lkKSB7Ci0JCQlpZiAoIWZpbGUtPmFnZW50W2lkXSkKLQkJCQljb250aW51ZTsKLQkJCWliX2RlcmVnX21yKGZpbGUtPm1yW2lkXSk7Ci0JCQlpYl91bnJlZ2lzdGVyX21hZF9hZ2VudChmaWxlLT5hZ2VudFtpZF0pOwotCQkJZmlsZS0+YWdlbnRbaWRdID0gTlVMTDsKLQkJfQorCS8qCisJICogTm93IGdvIHRocm91Z2ggdGhlIGxpc3Qgb2YgZmlsZXMgYXR0YWNoZWQgdG8gdGhpcyBwb3J0IGFuZAorCSAqIHVucmVnaXN0ZXIgYWxsIG9mIHRoZWlyIE1BRCBhZ2VudHMuICBXZSBuZWVkIHRvIGhvbGQKKwkgKiBwb3J0LT5tdXRleCB3aGlsZSBkb2luZyB0aGlzIHRvIGF2b2lkIHJhY2luZyB3aXRoCisJICogaWJfdW1hZF9jbG9zZSgpLCBidXQgd2UgY2FuJ3QgaG9sZCB0aGUgbXV0ZXggZm9yIHdyaXRpbmcKKwkgKiB3aGlsZSBjYWxsaW5nIGliX3VucmVnaXN0ZXJfbWFkX2FnZW50KCksIHNpbmNlIHRoYXQgbWlnaHQKKwkgKiBkZWFkbG9jayBieSBjYWxsaW5nIGJhY2sgaW50byBxdWV1ZV9wYWNrZXQoKS4gIFNvIHdlCisJICogZG93bmdyYWRlIG91ciBsb2NrIHRvIGEgcmVhZCBsb2NrLCBhbmQgdGhlbiBkcm9wIGFuZAorCSAqIHJlYWNxdWlyZSB0aGUgd3JpdGUgbG9jayBmb3IgdGhlIG5leHQgaXRlcmF0aW9uLgorCSAqCisJICogV2UgZG8gbGlzdF9kZWxfaW5pdCgpIG9uIHRoZSBmaWxlJ3MgbGlzdF9oZWFkIHNvIHRoYXQgdGhlCisJICogbGlzdF9kZWwgaW4gaWJfdW1hZF9jbG9zZSgpIGlzIHN0aWxsIE9LLCBldmVuIGFmdGVyIHRoZQorCSAqIGZpbGUgaXMgcmVtb3ZlZCBmcm9tIHRoZSBsaXN0LgorCSAqLworCXdoaWxlICghbGlzdF9lbXB0eSgmcG9ydC0+ZmlsZV9saXN0KSkgeworCQlmaWxlID0gbGlzdF9lbnRyeShwb3J0LT5maWxlX2xpc3QubmV4dCwgc3RydWN0IGliX3VtYWRfZmlsZSwKKwkJCQkgIHBvcnRfbGlzdCk7CisKKwkJZmlsZS0+YWdlbnRzX2RlYWQgPSAxOworCQlsaXN0X2RlbF9pbml0KCZmaWxlLT5wb3J0X2xpc3QpOworCisJCWRvd25ncmFkZV93cml0ZSgmcG9ydC0+bXV0ZXgpOworCisJCWZvciAoaWQgPSAwOyBpZCA8IElCX1VNQURfTUFYX0FHRU5UUzsgKytpZCkKKwkJCWlmIChmaWxlLT5hZ2VudFtpZF0pCisJCQkJaWJfdW5yZWdpc3Rlcl9tYWRfYWdlbnQoZmlsZS0+YWdlbnRbaWRdKTsKKworCQl1cF9yZWFkKCZwb3J0LT5tdXRleCk7CisJCWRvd25fd3JpdGUoJnBvcnQtPm11dGV4KTsKKwl9CiAKIAl1cF93cml0ZSgmcG9ydC0+bXV0ZXgpOwogCkBAIC05MTMsNyArOTM2LDcgQEAKIAogZXJyOgogCXdoaWxlICgtLWkgPj0gcykKLQkJaWJfdW1hZF9raWxsX3BvcnQoJnVtYWRfZGV2LT5wb3J0W2ldKTsKKwkJaWJfdW1hZF9raWxsX3BvcnQoJnVtYWRfZGV2LT5wb3J0W2kgLSBzXSk7CiAKIAlrcmVmX3B1dCgmdW1hZF9kZXYtPnJlZiwgaWJfdW1hZF9yZWxlYXNlX2Rldik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfY21kLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfY21kLmMKaW5kZXggNjNhNzQxNS4uZWQ0NWRhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzX2NtZC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJic19jbWQuYwpAQCAtNzA4LDcgKzcwOCw3IEBACiAJCXJlc3AtPndjW2ldLm9wY29kZSAJICAgPSB3Y1tpXS5vcGNvZGU7CiAJCXJlc3AtPndjW2ldLnZlbmRvcl9lcnIgCSAgID0gd2NbaV0udmVuZG9yX2VycjsKIAkJcmVzcC0+d2NbaV0uYnl0ZV9sZW4gCSAgID0gd2NbaV0uYnl0ZV9sZW47Ci0JCXJlc3AtPndjW2ldLmltbV9kYXRhIAkgICA9IHdjW2ldLmltbV9kYXRhOworCQlyZXNwLT53Y1tpXS5pbW1fZGF0YSAJICAgPSAoX191MzIgX19mb3JjZSkgd2NbaV0uaW1tX2RhdGE7CiAJCXJlc3AtPndjW2ldLnFwX251bSAJICAgPSB3Y1tpXS5xcF9udW07CiAJCXJlc3AtPndjW2ldLnNyY19xcCAJICAgPSB3Y1tpXS5zcmNfcXA7CiAJCXJlc3AtPndjW2ldLndjX2ZsYWdzIAkgICA9IHdjW2ldLndjX2ZsYWdzOwpAQCAtOTA4LDcgKzkwOCwxMiBAQAogCWlmIChyZXQpCiAJCWdvdG8gZXJyX2Rlc3Ryb3k7CiAKLQlyZXNwLnFwX2hhbmRsZSA9IHVvYmotPnVvYmplY3QuaWQ7CisJcmVzcC5xcF9oYW5kbGUgICAgICAgPSB1b2JqLT51b2JqZWN0LmlkOworCXJlc3AubWF4X3JlY3Zfc2dlICAgID0gYXR0ci5jYXAubWF4X3JlY3Zfc2dlOworCXJlc3AubWF4X3NlbmRfc2dlICAgID0gYXR0ci5jYXAubWF4X3NlbmRfc2dlOworCXJlc3AubWF4X3JlY3Zfd3IgICAgID0gYXR0ci5jYXAubWF4X3JlY3Zfd3I7CisJcmVzcC5tYXhfc2VuZF93ciAgICAgPSBhdHRyLmNhcC5tYXhfc2VuZF93cjsKKwlyZXNwLm1heF9pbmxpbmVfZGF0YSA9IGF0dHIuY2FwLm1heF9pbmxpbmVfZGF0YTsKIAogCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopICh1bnNpZ25lZCBsb25nKSBjbWQucmVzcG9uc2UsCiAJCQkgJnJlc3AsIHNpemVvZiByZXNwKSkgewpAQCAtMTEzNSw3ICsxMTQwLDcgQEAKIAkJbmV4dC0+bnVtX3NnZSAgICA9IHVzZXJfd3ItPm51bV9zZ2U7CiAJCW5leHQtPm9wY29kZSAgICAgPSB1c2VyX3dyLT5vcGNvZGU7CiAJCW5leHQtPnNlbmRfZmxhZ3MgPSB1c2VyX3dyLT5zZW5kX2ZsYWdzOwotCQluZXh0LT5pbW1fZGF0YSAgID0gdXNlcl93ci0+aW1tX2RhdGE7CisJCW5leHQtPmltbV9kYXRhICAgPSAoX19iZTMyIF9fZm9yY2UpIHVzZXJfd3ItPmltbV9kYXRhOwogCiAJCWlmIChxcC0+cXBfdHlwZSA9PSBJQl9RUFRfVUQpIHsKIAkJCW5leHQtPndyLnVkLmFoID0gaWRyX2ZpbmQoJmliX3V2ZXJic19haF9pZHIsCkBAIC0xNzAxLDcgKzE3MDYsNiBAQAogCX0KIAogCWF0dHIubWF4X3dyICAgID0gY21kLm1heF93cjsKLQlhdHRyLm1heF9zZ2UgICA9IGNtZC5tYXhfc2dlOwogCWF0dHIuc3JxX2xpbWl0ID0gY21kLnNycV9saW1pdDsKIAogCXJldCA9IGliX21vZGlmeV9zcnEoc3JxLCAmYXR0ciwgY21kLmF0dHJfbWFzayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS92ZXJicy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuYwppbmRleCA0MTg2Y2M4Li40YzE1ZTExIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS92ZXJicy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3ZlcmJzLmMKQEAgLTMyNSwxNiArMzI1LDggQEAKIGludCBpYl9yZXNpemVfY3Eoc3RydWN0IGliX2NxICpjcSwKICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICBjcWUpCiB7Ci0JaW50IHJldDsKLQotCWlmICghY3EtPmRldmljZS0+cmVzaXplX2NxKQotCQlyZXR1cm4gLUVOT1NZUzsKLQotCXJldCA9IGNxLT5kZXZpY2UtPnJlc2l6ZV9jcShjcSwgJmNxZSk7Ci0JaWYgKCFyZXQpCi0JCWNxLT5jcWUgPSBjcWU7Ci0KLQlyZXR1cm4gcmV0OworCXJldHVybiBjcS0+ZGV2aWNlLT5yZXNpemVfY3EgPworCQljcS0+ZGV2aWNlLT5yZXNpemVfY3EoY3EsIGNxZSkgOiAtRU5PU1lTOwogfQogRVhQT1JUX1NZTUJPTChpYl9yZXNpemVfY3EpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfY2F0YXMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jYXRhcy5jCmluZGV4IDI1ZWJhYjYuLmMzYmVjNzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jYXRhcy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jYXRhcy5jCkBAIC05Nyw3ICs5Nyw3IEBACiAJCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjYXRhc19sb2NrLCBmbGFncyk7Ci0JaWYgKGRldi0+Y2F0YXNfZXJyLnN0b3ApCisJaWYgKCFkZXYtPmNhdGFzX2Vyci5zdG9wKQogCQltb2RfdGltZXIoJmRldi0+Y2F0YXNfZXJyLnRpbWVyLAogCQkJICBqaWZmaWVzICsgTVRIQ0FfQ0FUQVNfUE9MTF9JTlRFUlZBTCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2F0YXNfbG9jaywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2NtZC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2NtZC5jCmluZGV4IDQ5ZjIxMWQuLjllZDM0NTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jbWQuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfY21kLmMKQEAgLTEwNjAsNiArMTA2MCw4IEBACiAJCWRldl9saW0tPmhjYS5hcmJlbC5yZXNpemVfc3JxID0gZmllbGQgJiAxOwogCQlNVEhDQV9HRVQoZmllbGQsIG91dGJveCwgUVVFUllfREVWX0xJTV9NQVhfU0dfUlFfT0ZGU0VUKTsKIAkJZGV2X2xpbS0+bWF4X3NnID0gbWluX3QoaW50LCBmaWVsZCwgZGV2X2xpbS0+bWF4X3NnKTsKKwkJTVRIQ0FfR0VUKHNpemUsIG91dGJveCwgUVVFUllfREVWX0xJTV9NQVhfREVTQ19TWl9SUV9PRkZTRVQpOworCQlkZXZfbGltLT5tYXhfZGVzY19zeiA9IG1pbl90KGludCwgc2l6ZSwgZGV2X2xpbS0+bWF4X2Rlc2Nfc3opOwogCQlNVEhDQV9HRVQoc2l6ZSwgb3V0Ym94LCBRVUVSWV9ERVZfTElNX01QVF9FTlRSWV9TWl9PRkZTRVQpOwogCQlkZXZfbGltLT5tcHRfZW50cnlfc3ogPSBzaXplOwogCQlNVEhDQV9HRVQoZmllbGQsIG91dGJveCwgUVVFUllfREVWX0xJTV9QQkxfU1pfT0ZGU0VUKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jcS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2NxLmMKaW5kZXggZjk4ZTIzNS4uNGE4YWRjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2NxLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2NxLmMKQEAgLTI1OCw3ICsyNTgsNyBAQAogewogCXN0cnVjdCBtdGhjYV9jcSAqY3E7CiAJc3RydWN0IG10aGNhX2NxZSAqY3FlOwotCWludCBwcm9kX2luZGV4OworCXUzMiBwcm9kX2luZGV4OwogCWludCBuZnJlZWQgPSAwOwogCiAJc3Bpbl9sb2NrX2lycSgmZGV2LT5jcV90YWJsZS5sb2NrKTsKQEAgLTI5MywxOSArMjkzLDE1IEBACiAJICogTm93IHN3ZWVwIGJhY2t3YXJkcyB0aHJvdWdoIHRoZSBDUSwgcmVtb3ZpbmcgQ1EgZW50cmllcwogCSAqIHRoYXQgbWF0Y2ggb3VyIFFQIGJ5IGNvcHlpbmcgb2xkZXIgZW50cmllcyBvbiB0b3Agb2YgdGhlbS4KIAkgKi8KLQl3aGlsZSAocHJvZF9pbmRleCA+IGNxLT5jb25zX2luZGV4KSB7Ci0JCWNxZSA9IGdldF9jcWUoY3EsIChwcm9kX2luZGV4IC0gMSkgJiBjcS0+aWJjcS5jcWUpOworCXdoaWxlICgoaW50KSAtLXByb2RfaW5kZXggLSAoaW50KSBjcS0+Y29uc19pbmRleCA+PSAwKSB7CisJCWNxZSA9IGdldF9jcWUoY3EsIHByb2RfaW5kZXggJiBjcS0+aWJjcS5jcWUpOwogCQlpZiAoY3FlLT5teV9xcG4gPT0gY3B1X3RvX2JlMzIocXBuKSkgewogCQkJaWYgKHNycSkKIAkJCQltdGhjYV9mcmVlX3NycV93cWUoc3JxLCBiZTMyX3RvX2NwdShjcWUtPndxZSkpOwogCQkJKytuZnJlZWQ7Ci0JCX0KLQkJZWxzZSBpZiAobmZyZWVkKQotCQkJbWVtY3B5KGdldF9jcWUoY3EsIChwcm9kX2luZGV4IC0gMSArIG5mcmVlZCkgJgotCQkJCSAgICAgICBjcS0+aWJjcS5jcWUpLAotCQkJICAgICAgIGNxZSwKLQkJCSAgICAgICBNVEhDQV9DUV9FTlRSWV9TSVpFKTsKLQkJLS1wcm9kX2luZGV4OworCQl9IGVsc2UgaWYgKG5mcmVlZCkKKwkJCW1lbWNweShnZXRfY3FlKGNxLCAocHJvZF9pbmRleCArIG5mcmVlZCkgJiBjcS0+aWJjcS5jcWUpLAorCQkJICAgICAgIGNxZSwgTVRIQ0FfQ1FfRU5UUllfU0laRSk7CiAJfQogCiAJaWYgKG5mcmVlZCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2Rldi5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2Rldi5oCmluZGV4IGU3ZTVkM2IuLjQ5N2ZmNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9kZXYuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfZGV2LmgKQEAgLTEzMSw2ICsxMzEsNyBAQAogCWludCAgICAgIG1heF9zZzsKIAlpbnQgICAgICBudW1fcXBzOwogCWludCAgICAgIG1heF93cWVzOworCWludAkgbWF4X2Rlc2Nfc3o7CiAJaW50CSBtYXhfcXBfaW5pdF9yZG1hOwogCWludCAgICAgIHJlc2VydmVkX3FwczsKIAlpbnQgICAgICBudW1fc3JxczsKQEAgLTE1NCw2ICsxNTUsNyBAQAogCWludCAgICAgIHJlc2VydmVkX21jZ3M7CiAJaW50ICAgICAgbnVtX3BkczsKIAlpbnQgICAgICByZXNlcnZlZF9wZHM7CisJdTMyICAgICAgcGFnZV9zaXplX2NhcDsKIAl1MzIgICAgICBmbGFnczsKIAl1OCAgICAgICBwb3J0X3dpZHRoX2NhcDsKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbWFpbi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX21haW4uYwppbmRleCA0NWM2MzI4Li42Zjk0YjI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbWFpbi5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tYWluLmMKQEAgLTE2OCw2ICsxNjgsNyBAQAogCW1kZXYtPmxpbWl0cy5tYXhfc3JxX3dxZXMgICAgICAgPSBkZXZfbGltLT5tYXhfc3JxX3N6OwogCW1kZXYtPmxpbWl0cy5yZXNlcnZlZF9zcnFzICAgICAgPSBkZXZfbGltLT5yZXNlcnZlZF9zcnFzOwogCW1kZXYtPmxpbWl0cy5yZXNlcnZlZF9lZWNzICAgICAgPSBkZXZfbGltLT5yZXNlcnZlZF9lZWNzOworCW1kZXYtPmxpbWl0cy5tYXhfZGVzY19zeiAgICAgICAgPSBkZXZfbGltLT5tYXhfZGVzY19zejsKIAkvKgogCSAqIFN1YnRyYWN0IDEgZnJvbSB0aGUgbGltaXQgYmVjYXVzZSB3ZSBuZWVkIHRvIGFsbG9jYXRlIGEKIAkgKiBzcGFyZSBDUUUgc28gdGhlIEhDQSBIVyBjYW4gdGVsbCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGFuCkBAIC0xODEsNiArMTgyLDcgQEAKIAltZGV2LT5saW1pdHMucmVzZXJ2ZWRfdWFycyAgICAgID0gZGV2X2xpbS0+cmVzZXJ2ZWRfdWFyczsKIAltZGV2LT5saW1pdHMucmVzZXJ2ZWRfcGRzICAgICAgID0gZGV2X2xpbS0+cmVzZXJ2ZWRfcGRzOwogCW1kZXYtPmxpbWl0cy5wb3J0X3dpZHRoX2NhcCAgICAgPSBkZXZfbGltLT5tYXhfcG9ydF93aWR0aDsKKwltZGV2LT5saW1pdHMucGFnZV9zaXplX2NhcCAgICAgID0gfih1MzIpIChkZXZfbGltLT5taW5fcGFnZV9zeiAtIDEpOwogCW1kZXYtPmxpbWl0cy5mbGFncyAgICAgICAgICAgICAgPSBkZXZfbGltLT5mbGFnczsKIAogCS8qIElCX0RFVklDRV9SRVNJWkVfTUFYX1dSIG5vdCBzdXBwb3J0ZWQgYnkgZHJpdmVyLgpAQCAtMTE5Niw3ICsxMTk4LDYgQEAKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG10aGNhX2RyaXZlciA9IHsKIAkubmFtZQkJPSBEUlZfTkFNRSwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLmlkX3RhYmxlCT0gbXRoY2FfcGNpX3RhYmxlLAogCS5wcm9iZQkJPSBtdGhjYV9pbml0X29uZSwKIAkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKG10aGNhX3JlbW92ZV9vbmUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcHJvdmlkZXIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9wcm92aWRlci5jCmluZGV4IDZiMDE2NjYuLjRjYzdlMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9wcm92aWRlci5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9wcm92aWRlci5jCkBAIC05MCw2ICs5MCw3IEBACiAJbWVtY3B5KCZwcm9wcy0+bm9kZV9ndWlkLCAgICAgIG91dF9tYWQtPmRhdGEgKyAxMiwgOCk7CiAKIAlwcm9wcy0+bWF4X21yX3NpemUgICAgICAgICA9IH4wdWxsOworCXByb3BzLT5wYWdlX3NpemVfY2FwICAgICAgID0gbWRldi0+bGltaXRzLnBhZ2Vfc2l6ZV9jYXA7CiAJcHJvcHMtPm1heF9xcCAgICAgICAgICAgICAgPSBtZGV2LT5saW1pdHMubnVtX3FwcyAtIG1kZXYtPmxpbWl0cy5yZXNlcnZlZF9xcHM7CiAJcHJvcHMtPm1heF9xcF93ciAgICAgICAgICAgPSBtZGV2LT5saW1pdHMubWF4X3dxZXM7CiAJcHJvcHMtPm1heF9zZ2UgICAgICAgICAgICAgPSBtZGV2LT5saW1pdHMubWF4X3NnOwpAQCAtNjE1LDExICs2MTYsMTEgQEAKIAkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIAl9CiAKLQlpbml0X2F0dHItPmNhcC5tYXhfaW5saW5lX2RhdGEgPSAwOwogCWluaXRfYXR0ci0+Y2FwLm1heF9zZW5kX3dyICAgICA9IHFwLT5zcS5tYXg7CiAJaW5pdF9hdHRyLT5jYXAubWF4X3JlY3Zfd3IgICAgID0gcXAtPnJxLm1heDsKIAlpbml0X2F0dHItPmNhcC5tYXhfc2VuZF9zZ2UgICAgPSBxcC0+c3EubWF4X2dzOwogCWluaXRfYXR0ci0+Y2FwLm1heF9yZWN2X3NnZSAgICA9IHFwLT5ycS5tYXhfZ3M7CisJaW5pdF9hdHRyLT5jYXAubWF4X2lubGluZV9kYXRhID0gcXAtPm1heF9pbmxpbmVfZGF0YTsKIAogCXJldHVybiAmcXAtPmlicXA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcHJvdmlkZXIuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9wcm92aWRlci5oCmluZGV4IGJjZDRiMDEuLjFlNzM5NDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9wcm92aWRlci5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9wcm92aWRlci5oCkBAIC0yNTEsNiArMjUxLDcgQEAKIAlzdHJ1Y3QgbXRoY2Ffd3EgICAgICAgIHNxOwogCWVudW0gaWJfc2lnX3R5cGUgICAgICAgc3FfcG9saWN5OwogCWludCAgICAgICAgICAgICAgICAgICAgc2VuZF93cWVfb2Zmc2V0OworCWludCAgICAgICAgICAgICAgICAgICAgbWF4X2lubGluZV9kYXRhOwogCiAJdTY0ICAgICAgICAgICAgICAgICAgICp3cmlkOwogCXVuaW9uIG10aGNhX2J1ZgkgICAgICAgcXVldWU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcXAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9xcC5jCmluZGV4IDg4NTJlYTQuLjc2MGM0MThkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcXAuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcXAuYwpAQCAtODg1LDYgKzg4NSw0OCBAQAogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyB2b2lkIG10aGNhX2FkanVzdF9xcF9jYXBzKHN0cnVjdCBtdGhjYV9kZXYgKmRldiwKKwkJCQkgc3RydWN0IG10aGNhX3BkICpwZCwKKwkJCQkgc3RydWN0IG10aGNhX3FwICpxcCkKK3sKKwlpbnQgbWF4X2RhdGFfc2l6ZTsKKworCS8qCisJICogQ2FsY3VsYXRlIHRoZSBtYXhpbXVtIHNpemUgb2YgV1FFIHMvZyBzZWdtZW50cywgZXhjbHVkaW5nCisJICogdGhlIG5leHQgc2VnbWVudCBhbmQgb3RoZXIgbm9uLWRhdGEgc2VnbWVudHMuCisJICovCisJbWF4X2RhdGFfc2l6ZSA9IG1pbihkZXYtPmxpbWl0cy5tYXhfZGVzY19zeiwgMSA8PCBxcC0+c3Eud3FlX3NoaWZ0KSAtCisJCXNpemVvZiAoc3RydWN0IG10aGNhX25leHRfc2VnKTsKKworCXN3aXRjaCAocXAtPnRyYW5zcG9ydCkgeworCWNhc2UgTUxYOgorCQltYXhfZGF0YV9zaXplIC09IDIgKiBzaXplb2YgKHN0cnVjdCBtdGhjYV9kYXRhX3NlZyk7CisJCWJyZWFrOworCisJY2FzZSBVRDoKKwkJaWYgKG10aGNhX2lzX21lbWZyZWUoZGV2KSkKKwkJCW1heF9kYXRhX3NpemUgLT0gc2l6ZW9mIChzdHJ1Y3QgbXRoY2FfYXJiZWxfdWRfc2VnKTsKKwkJZWxzZQorCQkJbWF4X2RhdGFfc2l6ZSAtPSBzaXplb2YgKHN0cnVjdCBtdGhjYV90YXZvcl91ZF9zZWcpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCW1heF9kYXRhX3NpemUgLT0gc2l6ZW9mIChzdHJ1Y3QgbXRoY2FfcmFkZHJfc2VnKTsKKwkJYnJlYWs7CisJfQorCisJLyogV2UgZG9uJ3Qgc3VwcG9ydCBpbmxpbmUgZGF0YSBmb3Iga2VybmVsIFFQcyAoeWV0KS4gKi8KKwlpZiAoIXBkLT5pYnBkLnVvYmplY3QpCisJCXFwLT5tYXhfaW5saW5lX2RhdGEgPSAwOworICAgICAgICBlbHNlCisJCXFwLT5tYXhfaW5saW5lX2RhdGEgPSBtYXhfZGF0YV9zaXplIC0gTVRIQ0FfSU5MSU5FX0hFQURFUl9TSVpFOworCisJcXAtPnNxLm1heF9ncyA9IG1heF9kYXRhX3NpemUgLyBzaXplb2YgKHN0cnVjdCBtdGhjYV9kYXRhX3NlZyk7CisJcXAtPnJxLm1heF9ncyA9IChtaW4oZGV2LT5saW1pdHMubWF4X2Rlc2Nfc3osIDEgPDwgcXAtPnJxLndxZV9zaGlmdCkgLQorCQkJc2l6ZW9mIChzdHJ1Y3QgbXRoY2FfbmV4dF9zZWcpKSAvCisJCQlzaXplb2YgKHN0cnVjdCBtdGhjYV9kYXRhX3NlZyk7Cit9CisKIC8qCiAgKiBBbGxvY2F0ZSBhbmQgcmVnaXN0ZXIgYnVmZmVyIGZvciBXUUVzLiAgcXAtPnJxLm1heCwgc3EubWF4LAogICogcnEubWF4X2dzIGFuZCBzcS5tYXhfZ3MgbXVzdCBhbGwgYmUgYXNzaWduZWQuCkBAIC05MDIsMjcgKzk0NCw1MyBAQAogCXNpemUgPSBzaXplb2YgKHN0cnVjdCBtdGhjYV9uZXh0X3NlZykgKwogCQlxcC0+cnEubWF4X2dzICogc2l6ZW9mIChzdHJ1Y3QgbXRoY2FfZGF0YV9zZWcpOwogCisJaWYgKHNpemUgPiBkZXYtPmxpbWl0cy5tYXhfZGVzY19zeikKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlmb3IgKHFwLT5ycS53cWVfc2hpZnQgPSA2OyAxIDw8IHFwLT5ycS53cWVfc2hpZnQgPCBzaXplOwogCSAgICAgcXAtPnJxLndxZV9zaGlmdCsrKQogCQk7IC8qIG5vdGhpbmcgKi8KIAotCXNpemUgPSBzaXplb2YgKHN0cnVjdCBtdGhjYV9uZXh0X3NlZykgKwotCQlxcC0+c3EubWF4X2dzICogc2l6ZW9mIChzdHJ1Y3QgbXRoY2FfZGF0YV9zZWcpOworCXNpemUgPSBxcC0+c3EubWF4X2dzICogc2l6ZW9mIChzdHJ1Y3QgbXRoY2FfZGF0YV9zZWcpOwogCXN3aXRjaCAocXAtPnRyYW5zcG9ydCkgewogCWNhc2UgTUxYOgogCQlzaXplICs9IDIgKiBzaXplb2YgKHN0cnVjdCBtdGhjYV9kYXRhX3NlZyk7CiAJCWJyZWFrOworCiAJY2FzZSBVRDoKLQkJaWYgKG10aGNhX2lzX21lbWZyZWUoZGV2KSkKLQkJCXNpemUgKz0gc2l6ZW9mIChzdHJ1Y3QgbXRoY2FfYXJiZWxfdWRfc2VnKTsKLQkJZWxzZQotCQkJc2l6ZSArPSBzaXplb2YgKHN0cnVjdCBtdGhjYV90YXZvcl91ZF9zZWcpOworCQlzaXplICs9IG10aGNhX2lzX21lbWZyZWUoZGV2KSA/CisJCQlzaXplb2YgKHN0cnVjdCBtdGhjYV9hcmJlbF91ZF9zZWcpIDoKKwkJCXNpemVvZiAoc3RydWN0IG10aGNhX3Rhdm9yX3VkX3NlZyk7CiAJCWJyZWFrOworCisJY2FzZSBVQzoKKwkJc2l6ZSArPSBzaXplb2YgKHN0cnVjdCBtdGhjYV9yYWRkcl9zZWcpOworCQlicmVhazsKKworCWNhc2UgUkM6CisJCXNpemUgKz0gc2l6ZW9mIChzdHJ1Y3QgbXRoY2FfcmFkZHJfc2VnKTsKKwkJLyoKKwkJICogQW4gYXRvbWljIG9wIHdpbGwgcmVxdWlyZSBhbiBhdG9taWMgc2VnbWVudCwgYQorCQkgKiByZW1vdGUgYWRkcmVzcyBzZWdtZW50IGFuZCBvbmUgc2NhdHRlciBlbnRyeS4KKwkJICovCisJCXNpemUgPSBtYXhfdChpbnQsIHNpemUsCisJCQkgICAgIHNpemVvZiAoc3RydWN0IG10aGNhX2F0b21pY19zZWcpICsKKwkJCSAgICAgc2l6ZW9mIChzdHJ1Y3QgbXRoY2FfcmFkZHJfc2VnKSArCisJCQkgICAgIHNpemVvZiAoc3RydWN0IG10aGNhX2RhdGFfc2VnKSk7CisJCWJyZWFrOworCiAJZGVmYXVsdDoKLQkJLyogYmluZCBzZWcgaXMgYXMgYmlnIGFzIGF0b21pYyArIHJhZGRyIHNlZ3MgKi8KLQkJc2l6ZSArPSBzaXplb2YgKHN0cnVjdCBtdGhjYV9iaW5kX3NlZyk7CisJCWJyZWFrOwogCX0KIAorCS8qIE1ha2Ugc3VyZSB0aGF0IHdlIGhhdmUgZW5vdWdoIHNwYWNlIGZvciBhIGJpbmQgcmVxdWVzdCAqLworCXNpemUgPSBtYXhfdChpbnQsIHNpemUsIHNpemVvZiAoc3RydWN0IG10aGNhX2JpbmRfc2VnKSk7CisKKwlzaXplICs9IHNpemVvZiAoc3RydWN0IG10aGNhX25leHRfc2VnKTsKKworCWlmIChzaXplID4gZGV2LT5saW1pdHMubWF4X2Rlc2Nfc3opCisJCXJldHVybiAtRUlOVkFMOworCiAJZm9yIChxcC0+c3Eud3FlX3NoaWZ0ID0gNjsgMSA8PCBxcC0+c3Eud3FlX3NoaWZ0IDwgc2l6ZTsKIAkgICAgIHFwLT5zcS53cWVfc2hpZnQrKykKIAkJOyAvKiBub3RoaW5nICovCkBAIC0xMDY2LDYgKzExMzQsOCBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAorCW10aGNhX2FkanVzdF9xcF9jYXBzKGRldiwgcGQsIHFwKTsKKwogCS8qCiAJICogSWYgdGhpcyBpcyBhIHVzZXJzcGFjZSBRUCwgd2UncmUgZG9uZSBub3cuICBUaGUgZG9vcmJlbGxzCiAJICogd2lsbCBiZSBhbGxvY2F0ZWQgYW5kIGJ1ZmZlcnMgd2lsbCBiZSBpbml0aWFsaXplZCBpbgpAQCAtMTQ4Niw4ICsxNTU2LDggQEAKIAkJCQl9CiAKIAkJCQl3cWUgKz0gc2l6ZW9mIChzdHJ1Y3QgbXRoY2FfYXRvbWljX3NlZyk7Ci0JCQkJc2l6ZSArPSBzaXplb2YgKHN0cnVjdCBtdGhjYV9yYWRkcl9zZWcpIC8gMTYgKwotCQkJCQlzaXplb2YgKHN0cnVjdCBtdGhjYV9hdG9taWNfc2VnKTsKKwkJCQlzaXplICs9IChzaXplb2YgKHN0cnVjdCBtdGhjYV9yYWRkcl9zZWcpICsKKwkJCQkJIHNpemVvZiAoc3RydWN0IG10aGNhX2F0b21pY19zZWcpKSAvIDE2OwogCQkJCWJyZWFrOwogCiAJCQljYXNlIElCX1dSX1JETUFfV1JJVEU6CkBAIC0xNjM3LDYgKzE3MDcsNyBAQAogewogCXN0cnVjdCBtdGhjYV9kZXYgKmRldiA9IHRvX21kZXYoaWJxcC0+ZGV2aWNlKTsKIAlzdHJ1Y3QgbXRoY2FfcXAgKnFwID0gdG9fbXFwKGlicXApOworCV9fYmUzMiBkb29yYmVsbFsyXTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBlcnIgPSAwOwogCWludCBucmVxOwpAQCAtMTY1NCw2ICsxNzI1LDIyIEBACiAJaW5kID0gcXAtPnJxLm5leHRfaW5kOwogCiAJZm9yIChucmVxID0gMDsgd3I7ICsrbnJlcSwgd3IgPSB3ci0+bmV4dCkgeworCQlpZiAodW5saWtlbHkobnJlcSA9PSBNVEhDQV9UQVZPUl9NQVhfV1FFU19QRVJfUkVDVl9EQikpIHsKKwkJCW5yZXEgPSAwOworCisJCQlkb29yYmVsbFswXSA9IGNwdV90b19iZTMyKChxcC0+cnEubmV4dF9pbmQgPDwgcXAtPnJxLndxZV9zaGlmdCkgfCBzaXplMCk7CisJCQlkb29yYmVsbFsxXSA9IGNwdV90b19iZTMyKHFwLT5xcG4gPDwgOCk7CisKKwkJCXdtYigpOworCisJCQltdGhjYV93cml0ZTY0KGRvb3JiZWxsLAorCQkJCSAgICAgIGRldi0+a2FyICsgTVRIQ0FfUkVDRUlWRV9ET09SQkVMTCwKKwkJCQkgICAgICBNVEhDQV9HRVRfRE9PUkJFTExfTE9DSygmZGV2LT5kb29yYmVsbF9sb2NrKSk7CisKKwkJCXFwLT5ycS5oZWFkICs9IE1USENBX1RBVk9SX01BWF9XUUVTX1BFUl9SRUNWX0RCOworCQkJc2l6ZTAgPSAwOworCQl9CisKIAkJaWYgKG10aGNhX3dxX292ZXJmbG93KCZxcC0+cnEsIG5yZXEsIHFwLT5pYnFwLnJlY3ZfY3EpKSB7CiAJCQltdGhjYV9lcnIoZGV2LCAiUlEgJTA2eCBmdWxsICgldSBoZWFkLCAldSB0YWlsLCIKIAkJCQkJIiAlZCBtYXgsICVkIG5yZXEpXG4iLCBxcC0+cXBuLApAQCAtMTcxMSw4ICsxNzk4LDYgQEAKIAogb3V0OgogCWlmIChsaWtlbHkobnJlcSkpIHsKLQkJX19iZTMyIGRvb3JiZWxsWzJdOwotCiAJCWRvb3JiZWxsWzBdID0gY3B1X3RvX2JlMzIoKHFwLT5ycS5uZXh0X2luZCA8PCBxcC0+cnEud3FlX3NoaWZ0KSB8IHNpemUwKTsKIAkJZG9vcmJlbGxbMV0gPSBjcHVfdG9fYmUzMigocXAtPnFwbiA8PCA4KSB8IG5yZXEpOwogCkBAIC0xODA2LDggKzE4OTEsOCBAQAogCQkJCX0KIAogCQkJCXdxZSArPSBzaXplb2YgKHN0cnVjdCBtdGhjYV9hdG9taWNfc2VnKTsKLQkJCQlzaXplICs9IHNpemVvZiAoc3RydWN0IG10aGNhX3JhZGRyX3NlZykgLyAxNiArCi0JCQkJCXNpemVvZiAoc3RydWN0IG10aGNhX2F0b21pY19zZWcpOworCQkJCXNpemUgKz0gKHNpemVvZiAoc3RydWN0IG10aGNhX3JhZGRyX3NlZykgKworCQkJCQkgc2l6ZW9mIChzdHJ1Y3QgbXRoY2FfYXRvbWljX3NlZykpIC8gMTY7CiAJCQkJYnJlYWs7CiAKIAkJCWNhc2UgSUJfV1JfUkRNQV9SRUFEOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3NycS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3NycS5jCmluZGV4IDI2ZDUxNjEuLmY3ZDIzNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9zcnEuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2Ffc3JxLmMKQEAgLTQxNyw2ICs0MTcsNyBAQAogewogCXN0cnVjdCBtdGhjYV9kZXYgKmRldiA9IHRvX21kZXYoaWJzcnEtPmRldmljZSk7CiAJc3RydWN0IG10aGNhX3NycSAqc3JxID0gdG9fbXNycShpYnNycSk7CisJX19iZTMyIGRvb3JiZWxsWzJdOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGVyciA9IDA7CiAJaW50IGZpcnN0X2luZDsKQEAgLTQzMiw2ICs0MzMsMjUgQEAKIAlmaXJzdF9pbmQgPSBzcnEtPmZpcnN0X2ZyZWU7CiAKIAlmb3IgKG5yZXEgPSAwOyB3cjsgKytucmVxLCB3ciA9IHdyLT5uZXh0KSB7CisJCWlmICh1bmxpa2VseShucmVxID09IE1USENBX1RBVk9SX01BWF9XUUVTX1BFUl9SRUNWX0RCKSkgeworCQkJbnJlcSA9IDA7CisKKwkJCWRvb3JiZWxsWzBdID0gY3B1X3RvX2JlMzIoZmlyc3RfaW5kIDw8IHNycS0+d3FlX3NoaWZ0KTsKKwkJCWRvb3JiZWxsWzFdID0gY3B1X3RvX2JlMzIoc3JxLT5zcnFuIDw8IDgpOworCisJCQkvKgorCQkJICogTWFrZSBzdXJlIHRoYXQgZGVzY3JpcHRvcnMgYXJlIHdyaXR0ZW4KKwkJCSAqIGJlZm9yZSBkb29yYmVsbCBpcyBydW5nLgorCQkJICovCisJCQl3bWIoKTsKKworCQkJbXRoY2Ffd3JpdGU2NChkb29yYmVsbCwKKwkJCQkgICAgICBkZXYtPmthciArIE1USENBX1JFQ0VJVkVfRE9PUkJFTEwsCisJCQkJICAgICAgTVRIQ0FfR0VUX0RPT1JCRUxMX0xPQ0soJmRldi0+ZG9vcmJlbGxfbG9jaykpOworCisJCQlmaXJzdF9pbmQgPSBzcnEtPmZpcnN0X2ZyZWU7CisJCX0KKwogCQlpbmQgPSBzcnEtPmZpcnN0X2ZyZWU7CiAKIAkJaWYgKGluZCA8IDApIHsKQEAgLTQ5NCw4ICs1MTQsNiBAQAogCX0KIAogCWlmIChsaWtlbHkobnJlcSkpIHsKLQkJX19iZTMyIGRvb3JiZWxsWzJdOwotCiAJCWRvb3JiZWxsWzBdID0gY3B1X3RvX2JlMzIoZmlyc3RfaW5kIDw8IHNycS0+d3FlX3NoaWZ0KTsKIAkJZG9vcmJlbGxbMV0gPSBjcHVfdG9fYmUzMigoc3JxLT5zcnFuIDw8IDgpIHwgbnJlcSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV93cWUuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV93cWUuaAppbmRleCAxZjRjMGZmLi43M2YxYzBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2Ffd3FlLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3dxZS5oCkBAIC00OSw3ICs0OSw4IEBACiB9OwogCiBlbnVtIHsKLQlNVEhDQV9JTlZBTF9MS0VZID0gMHgxMDAKKwlNVEhDQV9JTlZBTF9MS0VZCQkJPSAweDEwMCwKKwlNVEhDQV9UQVZPUl9NQVhfV1FFU19QRVJfUkVDVl9EQgk9IDI1NgogfTsKIAogc3RydWN0IG10aGNhX25leHRfc2VnIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWIuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWIuaAppbmRleCAwMDk1YWNjLi45OTIzYTE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYi5oCkBAIC0xNzksNiArMTc5LDcgQEAKICNpZmRlZiBDT05GSUdfSU5GSU5JQkFORF9JUE9JQl9ERUJVRwogCXN0cnVjdCBsaXN0X2hlYWQgZnNfbGlzdDsKIAlzdHJ1Y3QgZGVudHJ5ICptY2dfZGVudHJ5OworCXN0cnVjdCBkZW50cnkgKnBhdGhfZGVudHJ5OwogI2VuZGlmCiB9OwogCkBAIC0yNzAsNyArMjcxLDYgQEAKIAogI2lmZGVmIENPTkZJR19JTkZJTklCQU5EX0lQT0lCX0RFQlVHCiBzdHJ1Y3QgaXBvaWJfbWNhc3RfaXRlciAqaXBvaWJfbWNhc3RfaXRlcl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotdm9pZCBpcG9pYl9tY2FzdF9pdGVyX2ZyZWUoc3RydWN0IGlwb2liX21jYXN0X2l0ZXIgKml0ZXIpOwogaW50IGlwb2liX21jYXN0X2l0ZXJfbmV4dChzdHJ1Y3QgaXBvaWJfbWNhc3RfaXRlciAqaXRlcik7CiB2b2lkIGlwb2liX21jYXN0X2l0ZXJfcmVhZChzdHJ1Y3QgaXBvaWJfbWNhc3RfaXRlciAqaXRlciwKIAkJCQkgIHVuaW9uIGliX2dpZCAqZ2lkLApAQCAtMjc4LDYgKzI3OCwxMSBAQAogCQkJCSAgdW5zaWduZWQgaW50ICpxdWV1ZWxlbiwKIAkJCQkgIHVuc2lnbmVkIGludCAqY29tcGxldGUsCiAJCQkJICB1bnNpZ25lZCBpbnQgKnNlbmRfb25seSk7CisKK3N0cnVjdCBpcG9pYl9wYXRoX2l0ZXIgKmlwb2liX3BhdGhfaXRlcl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworaW50IGlwb2liX3BhdGhfaXRlcl9uZXh0KHN0cnVjdCBpcG9pYl9wYXRoX2l0ZXIgKml0ZXIpOwordm9pZCBpcG9pYl9wYXRoX2l0ZXJfcmVhZChzdHJ1Y3QgaXBvaWJfcGF0aF9pdGVyICppdGVyLAorCQkJICBzdHJ1Y3QgaXBvaWJfcGF0aCAqcGF0aCk7CiAjZW5kaWYKIAogaW50IGlwb2liX21jYXN0X2F0dGFjaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgbWxpZCwKQEAgLTI5OSwxMyArMzA0LDEzIEBACiBpbnQgaXBvaWJfcGtleV9kZXZfZGVsYXlfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAogI2lmZGVmIENPTkZJR19JTkZJTklCQU5EX0lQT0lCX0RFQlVHCi1pbnQgaXBvaWJfY3JlYXRlX2RlYnVnX2ZpbGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci12b2lkIGlwb2liX2RlbGV0ZV9kZWJ1Z19maWxlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwordm9pZCBpcG9pYl9jcmVhdGVfZGVidWdfZmlsZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Cit2b2lkIGlwb2liX2RlbGV0ZV9kZWJ1Z19maWxlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIGludCBpcG9pYl9yZWdpc3Rlcl9kZWJ1Z2ZzKHZvaWQpOwogdm9pZCBpcG9pYl91bnJlZ2lzdGVyX2RlYnVnZnModm9pZCk7CiAjZWxzZQotc3RhdGljIGlubGluZSBpbnQgaXBvaWJfY3JlYXRlX2RlYnVnX2ZpbGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikgeyByZXR1cm4gMDsgfQotc3RhdGljIGlubGluZSB2b2lkIGlwb2liX2RlbGV0ZV9kZWJ1Z19maWxlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIGlwb2liX2NyZWF0ZV9kZWJ1Z19maWxlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBpcG9pYl9kZWxldGVfZGVidWdfZmlsZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikgeyB9CiBzdGF0aWMgaW5saW5lIGludCBpcG9pYl9yZWdpc3Rlcl9kZWJ1Z2ZzKHZvaWQpIHsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBpcG9pYl91bnJlZ2lzdGVyX2RlYnVnZnModm9pZCkgeyB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfZnMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfZnMuYwppbmRleCAzOGIxNTBmLi42ODUyNThlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2ZzLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9mcy5jCkBAIC00Myw2ICs0MywxOCBAQAogCiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqaXBvaWJfcm9vdDsKIAorc3RhdGljIHZvaWQgZm9ybWF0X2dpZCh1bmlvbiBpYl9naWQgKmdpZCwgY2hhciAqYnVmKQoreworCWludCBpLCBuOworCisJZm9yIChuID0gMCwgaSA9IDA7IGkgPCA4OyArK2kpIHsKKwkJbiArPSBzcHJpbnRmKGJ1ZiArIG4sICIleCIsCisJCQkgICAgIGJlMTZfdG9fY3B1KCgoX19iZTE2ICopIGdpZC0+cmF3KVtpXSkpOworCQlpZiAoaSA8IDcpCisJCQlidWZbbisrXSA9ICc6JzsKKwl9Cit9CisKIHN0YXRpYyB2b2lkICppcG9pYl9tY2dfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqZmlsZSwgbG9mZl90ICpwb3MpCiB7CiAJc3RydWN0IGlwb2liX21jYXN0X2l0ZXIgKml0ZXI7CkBAIC01NCw3ICs2Niw3IEBACiAKIAl3aGlsZSAobi0tKSB7CiAJCWlmIChpcG9pYl9tY2FzdF9pdGVyX25leHQoaXRlcikpIHsKLQkJCWlwb2liX21jYXN0X2l0ZXJfZnJlZShpdGVyKTsKKwkJCWtmcmVlKGl0ZXIpOwogCQkJcmV0dXJuIE5VTEw7CiAJCX0KIAl9CkBAIC03MCw3ICs4Miw3IEBACiAJKCpwb3MpKys7CiAKIAlpZiAoaXBvaWJfbWNhc3RfaXRlcl9uZXh0KGl0ZXIpKSB7Ci0JCWlwb2liX21jYXN0X2l0ZXJfZnJlZShpdGVyKTsKKwkJa2ZyZWUoaXRlcik7CiAJCXJldHVybiBOVUxMOwogCX0KIApAQCAtODcsMzIgKzk5LDMyIEBACiAJc3RydWN0IGlwb2liX21jYXN0X2l0ZXIgKml0ZXIgPSBpdGVyX3B0cjsKIAljaGFyIGdpZF9idWZbc2l6ZW9mICJmZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmYiXTsKIAl1bmlvbiBpYl9naWQgbWdpZDsKLQlpbnQgaSwgbjsKIAl1bnNpZ25lZCBsb25nIGNyZWF0ZWQ7CiAJdW5zaWduZWQgaW50IHF1ZXVlbGVuLCBjb21wbGV0ZSwgc2VuZF9vbmx5OwogCi0JaWYgKGl0ZXIpIHsKLQkJaXBvaWJfbWNhc3RfaXRlcl9yZWFkKGl0ZXIsICZtZ2lkLCAmY3JlYXRlZCwgJnF1ZXVlbGVuLAotCQkJCSAgICAgICZjb21wbGV0ZSwgJnNlbmRfb25seSk7CisJaWYgKCFpdGVyKQorCQlyZXR1cm4gMDsKIAotCQlmb3IgKG4gPSAwLCBpID0gMDsgaSA8IHNpemVvZiBtZ2lkIC8gMjsgKytpKSB7Ci0JCQluICs9IHNwcmludGYoZ2lkX2J1ZiArIG4sICIleCIsCi0JCQkJICAgICBiZTE2X3RvX2NwdSgoKF9fYmUxNiAqKSBtZ2lkLnJhdylbaV0pKTsKLQkJCWlmIChpIDwgc2l6ZW9mIG1naWQgLyAyIC0gMSkKLQkJCQlnaWRfYnVmW24rK10gPSAnOic7Ci0JCX0KLQl9CisJaXBvaWJfbWNhc3RfaXRlcl9yZWFkKGl0ZXIsICZtZ2lkLCAmY3JlYXRlZCwgJnF1ZXVlbGVuLAorCQkJICAgICAgJmNvbXBsZXRlLCAmc2VuZF9vbmx5KTsKIAotCXNlcV9wcmludGYoZmlsZSwgIkdJRDogJSpzIiwgLSgxICsgKGludCkgc2l6ZW9mIGdpZF9idWYpLCBnaWRfYnVmKTsKKwlmb3JtYXRfZ2lkKCZtZ2lkLCBnaWRfYnVmKTsKIAogCXNlcV9wcmludGYoZmlsZSwKLQkJICAgIiBjcmVhdGVkOiAlMTBsZCBxdWV1ZWxlbjogJTRkIGNvbXBsZXRlOiAlZCBzZW5kX29ubHk6ICVkXG4iLAotCQkgICBjcmVhdGVkLCBxdWV1ZWxlbiwgY29tcGxldGUsIHNlbmRfb25seSk7CisJCSAgICJHSUQ6ICVzXG4iCisJCSAgICIgIGNyZWF0ZWQ6ICUxMGxkXG4iCisJCSAgICIgIHF1ZXVlbGVuOiAlOWRcbiIKKwkJICAgIiAgY29tcGxldGU6ICU5c1xuIgorCQkgICAiICBzZW5kX29ubHk6ICU4c1xuIgorCQkgICAiXG4iLAorCQkgICBnaWRfYnVmLCBjcmVhdGVkLCBxdWV1ZWxlbiwKKwkJICAgY29tcGxldGUgPyAieWVzIiA6ICJubyIsCisJCSAgIHNlbmRfb25seSA/ICJ5ZXMiIDogIm5vIik7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBpcG9pYl9zZXFfb3BzID0geworc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBpcG9pYl9tY2dfc2VxX29wcyA9IHsKIAkuc3RhcnQgPSBpcG9pYl9tY2dfc2VxX3N0YXJ0LAogCS5uZXh0ICA9IGlwb2liX21jZ19zZXFfbmV4dCwKIAkuc3RvcCAgPSBpcG9pYl9tY2dfc2VxX3N0b3AsCkBAIC0xMjQsNyArMTM2LDcgQEAKIAlzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcTsKIAlpbnQgcmV0OwogCi0JcmV0ID0gc2VxX29wZW4oZmlsZSwgJmlwb2liX3NlcV9vcHMpOworCXJldCA9IHNlcV9vcGVuKGZpbGUsICZpcG9pYl9tY2dfc2VxX29wcyk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIApAQCAtMTM0LDcgKzE0Niw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGlwb2liX2ZvcHMgPSB7CitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpcG9pYl9tY2dfZm9wcyA9IHsKIAkub3duZXIgICA9IFRISVNfTU9EVUxFLAogCS5vcGVuICAgID0gaXBvaWJfbWNnX29wZW4sCiAJLnJlYWQgICAgPSBzZXFfcmVhZCwKQEAgLTE0MiwyNSArMTU0LDEzOCBAQAogCS5yZWxlYXNlID0gc2VxX3JlbGVhc2UKIH07CiAKLWludCBpcG9pYl9jcmVhdGVfZGVidWdfZmlsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgKmlwb2liX3BhdGhfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqZmlsZSwgbG9mZl90ICpwb3MpCiB7Ci0Jc3RydWN0IGlwb2liX2Rldl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQljaGFyIG5hbWVbSUZOQU1TSVogKyBzaXplb2YgIl9tY2ciXTsKKwlzdHJ1Y3QgaXBvaWJfcGF0aF9pdGVyICppdGVyOworCWxvZmZfdCBuID0gKnBvczsKIAotCXNucHJpbnRmKG5hbWUsIHNpemVvZiBuYW1lLCAiJXNfbWNnIiwgZGV2LT5uYW1lKTsKKwlpdGVyID0gaXBvaWJfcGF0aF9pdGVyX2luaXQoZmlsZS0+cHJpdmF0ZSk7CisJaWYgKCFpdGVyKQorCQlyZXR1cm4gTlVMTDsKIAotCXByaXYtPm1jZ19kZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKG5hbWUsIFNfSUZSRUcgfCBTX0lSVUdPLAotCQkJCQkgICAgICAgaXBvaWJfcm9vdCwgZGV2LCAmaXBvaWJfZm9wcyk7CisJd2hpbGUgKG4tLSkgeworCQlpZiAoaXBvaWJfcGF0aF9pdGVyX25leHQoaXRlcikpIHsKKwkJCWtmcmVlKGl0ZXIpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwl9CiAKLQlyZXR1cm4gcHJpdi0+bWNnX2RlbnRyeSA/IDAgOiAtRU5PTUVNOworCXJldHVybiBpdGVyOwogfQogCi12b2lkIGlwb2liX2RlbGV0ZV9kZWJ1Z19maWxlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCAqaXBvaWJfcGF0aF9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKmZpbGUsIHZvaWQgKml0ZXJfcHRyLAorCQkJCSAgIGxvZmZfdCAqcG9zKQoreworCXN0cnVjdCBpcG9pYl9wYXRoX2l0ZXIgKml0ZXIgPSBpdGVyX3B0cjsKKworCSgqcG9zKSsrOworCisJaWYgKGlwb2liX3BhdGhfaXRlcl9uZXh0KGl0ZXIpKSB7CisJCWtmcmVlKGl0ZXIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlyZXR1cm4gaXRlcjsKK30KKworc3RhdGljIHZvaWQgaXBvaWJfcGF0aF9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKmZpbGUsIHZvaWQgKml0ZXJfcHRyKQoreworCS8qIG5vdGhpbmcgZm9yIG5vdyAqLworfQorCitzdGF0aWMgaW50IGlwb2liX3BhdGhfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpmaWxlLCB2b2lkICppdGVyX3B0cikKK3sKKwlzdHJ1Y3QgaXBvaWJfcGF0aF9pdGVyICppdGVyID0gaXRlcl9wdHI7CisJY2hhciBnaWRfYnVmW3NpemVvZiAiZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmIl07CisJc3RydWN0IGlwb2liX3BhdGggcGF0aDsKKwlpbnQgcmF0ZTsKKworCWlmICghaXRlcikKKwkJcmV0dXJuIDA7CisKKwlpcG9pYl9wYXRoX2l0ZXJfcmVhZChpdGVyLCAmcGF0aCk7CisKKwlmb3JtYXRfZ2lkKCZwYXRoLnBhdGhyZWMuZGdpZCwgZ2lkX2J1Zik7CisKKwlzZXFfcHJpbnRmKGZpbGUsCisJCSAgICJHSUQ6ICVzXG4iCisJCSAgICIgIGNvbXBsZXRlOiAlNnNcbiIsCisJCSAgIGdpZF9idWYsIHBhdGgucGF0aHJlYy5kbGlkID8gInllcyIgOiAibm8iKTsKKworCWlmIChwYXRoLnBhdGhyZWMuZGxpZCkgeworCQlyYXRlID0gaWJfc2FfcmF0ZV9lbnVtX3RvX2ludChwYXRoLnBhdGhyZWMucmF0ZSkgKiAyNTsKKworCQlzZXFfcHJpbnRmKGZpbGUsCisJCQkgICAiICBETElEOiAgICAgMHglMDR4XG4iCisJCQkgICAiICBTTDogJTEyZFxuIgorCQkJICAgIiAgcmF0ZTogJSpkJXMgR2Ivc2VjXG4iLAorCQkJICAgYmUxNl90b19jcHUocGF0aC5wYXRocmVjLmRsaWQpLAorCQkJICAgcGF0aC5wYXRocmVjLnNsLAorCQkJICAgMTAgLSAoKHJhdGUgJSAxMCkgPyAyIDogMCksCisJCQkgICByYXRlIC8gMTAsIHJhdGUgJSAxMCA/ICIuNSIgOiAiIik7CisJfQorCisJc2VxX3B1dGMoZmlsZSwgJ1xuJyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBpcG9pYl9wYXRoX3NlcV9vcHMgPSB7CisJLnN0YXJ0ID0gaXBvaWJfcGF0aF9zZXFfc3RhcnQsCisJLm5leHQgID0gaXBvaWJfcGF0aF9zZXFfbmV4dCwKKwkuc3RvcCAgPSBpcG9pYl9wYXRoX3NlcV9zdG9wLAorCS5zaG93ICA9IGlwb2liX3BhdGhfc2VxX3Nob3csCit9OworCitzdGF0aWMgaW50IGlwb2liX3BhdGhfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcTsKKwlpbnQgcmV0OworCisJcmV0ID0gc2VxX29wZW4oZmlsZSwgJmlwb2liX3BhdGhfc2VxX29wcyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXNlcSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzZXEtPnByaXZhdGUgPSBpbm9kZS0+dS5nZW5lcmljX2lwOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGlwb2liX3BhdGhfZm9wcyA9IHsKKwkub3duZXIgICA9IFRISVNfTU9EVUxFLAorCS5vcGVuICAgID0gaXBvaWJfcGF0aF9vcGVuLAorCS5yZWFkICAgID0gc2VxX3JlYWQsCisJLmxsc2VlayAgPSBzZXFfbHNlZWssCisJLnJlbGVhc2UgPSBzZXFfcmVsZWFzZQorfTsKKwordm9pZCBpcG9pYl9jcmVhdGVfZGVidWdfZmlsZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgaXBvaWJfZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWNoYXIgbmFtZVtJRk5BTVNJWiArIHNpemVvZiAiX3BhdGgiXTsKKworCXNucHJpbnRmKG5hbWUsIHNpemVvZiBuYW1lLCAiJXNfbWNnIiwgZGV2LT5uYW1lKTsKKwlwcml2LT5tY2dfZGVudHJ5ID0gZGVidWdmc19jcmVhdGVfZmlsZShuYW1lLCBTX0lGUkVHIHwgU19JUlVHTywKKwkJCQkJICAgICAgIGlwb2liX3Jvb3QsIGRldiwgJmlwb2liX21jZ19mb3BzKTsKKwlpZiAoIXByaXYtPm1jZ19kZW50cnkpCisJCWlwb2liX3dhcm4ocHJpdiwgImZhaWxlZCB0byBjcmVhdGUgbWNnIGRlYnVnIGZpbGVcbiIpOworCisJc25wcmludGYobmFtZSwgc2l6ZW9mIG5hbWUsICIlc19wYXRoIiwgZGV2LT5uYW1lKTsKKwlwcml2LT5wYXRoX2RlbnRyeSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUobmFtZSwgU19JRlJFRyB8IFNfSVJVR08sCisJCQkJCQlpcG9pYl9yb290LCBkZXYsICZpcG9pYl9wYXRoX2ZvcHMpOworCWlmICghcHJpdi0+cGF0aF9kZW50cnkpCisJCWlwb2liX3dhcm4ocHJpdiwgImZhaWxlZCB0byBjcmVhdGUgcGF0aCBkZWJ1ZyBmaWxlXG4iKTsKK30KKwordm9pZCBpcG9pYl9kZWxldGVfZGVidWdfZmlsZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgaXBvaWJfZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJaWYgKHByaXYtPm1jZ19kZW50cnkpCiAJCWRlYnVnZnNfcmVtb3ZlKHByaXYtPm1jZ19kZW50cnkpOworCWlmIChwcml2LT5wYXRoX2RlbnRyeSkKKwkJZGVidWdmc19yZW1vdmUocHJpdi0+cGF0aF9kZW50cnkpOwogfQogCiBpbnQgaXBvaWJfcmVnaXN0ZXJfZGVidWdmcyh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX21haW4uYwppbmRleCBjZTAyOTYyLi4yZmEzMDc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX21haW4uYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX21haW4uYwpAQCAtNTgsNiArNTgsMTEgQEAKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWdfbGV2ZWwsICJFbmFibGUgZGVidWcgdHJhY2luZyBpZiA+IDAiKTsKICNlbmRpZgogCitzdHJ1Y3QgaXBvaWJfcGF0aF9pdGVyIHsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCXN0cnVjdCBpcG9pYl9wYXRoICBwYXRoOworfTsKKwogc3RhdGljIGNvbnN0IHU4IGlwdjRfYmNhc3RfYWRkcltdID0gewogCTB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsCiAJMHhmZiwgMHgxMiwgMHg0MCwgMHgxYiwJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKQEAgLTI1MCw2ICsyNTUsNjQgQEAKIAlrZnJlZShwYXRoKTsKIH0KIAorI2lmZGVmIENPTkZJR19JTkZJTklCQU5EX0lQT0lCX0RFQlVHCisKK3N0cnVjdCBpcG9pYl9wYXRoX2l0ZXIgKmlwb2liX3BhdGhfaXRlcl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGlwb2liX3BhdGhfaXRlciAqaXRlcjsKKworCWl0ZXIgPSBrbWFsbG9jKHNpemVvZiAqaXRlciwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpdGVyKQorCQlyZXR1cm4gTlVMTDsKKworCWl0ZXItPmRldiA9IGRldjsKKwltZW1zZXQoaXRlci0+cGF0aC5wYXRocmVjLmRnaWQucmF3LCAwLCAxNik7CisKKwlpZiAoaXBvaWJfcGF0aF9pdGVyX25leHQoaXRlcikpIHsKKwkJa2ZyZWUoaXRlcik7CisJCXJldHVybiBOVUxMOworCX0KKworCXJldHVybiBpdGVyOworfQorCitpbnQgaXBvaWJfcGF0aF9pdGVyX25leHQoc3RydWN0IGlwb2liX3BhdGhfaXRlciAqaXRlcikKK3sKKwlzdHJ1Y3QgaXBvaWJfZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihpdGVyLT5kZXYpOworCXN0cnVjdCByYl9ub2RlICpuOworCXN0cnVjdCBpcG9pYl9wYXRoICpwYXRoOworCWludCByZXQgPSAxOworCisJc3Bpbl9sb2NrX2lycSgmcHJpdi0+bG9jayk7CisKKwluID0gcmJfZmlyc3QoJnByaXYtPnBhdGhfdHJlZSk7CisKKwl3aGlsZSAobikgeworCQlwYXRoID0gcmJfZW50cnkobiwgc3RydWN0IGlwb2liX3BhdGgsIHJiX25vZGUpOworCisJCWlmIChtZW1jbXAoaXRlci0+cGF0aC5wYXRocmVjLmRnaWQucmF3LCBwYXRoLT5wYXRocmVjLmRnaWQucmF3LAorCQkJICAgc2l6ZW9mICh1bmlvbiBpYl9naWQpKSA8IDApIHsKKwkJCWl0ZXItPnBhdGggPSAqcGF0aDsKKwkJCXJldCA9IDA7CisJCQlicmVhazsKKwkJfQorCisJCW4gPSByYl9uZXh0KG4pOworCX0KKworCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+bG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIGlwb2liX3BhdGhfaXRlcl9yZWFkKHN0cnVjdCBpcG9pYl9wYXRoX2l0ZXIgKml0ZXIsCisJCQkgIHN0cnVjdCBpcG9pYl9wYXRoICpwYXRoKQoreworCSpwYXRoID0gaXRlci0+cGF0aDsKK30KKworI2VuZGlmIC8qIENPTkZJR19JTkZJTklCQU5EX0lQT0lCX0RFQlVHICovCisKIHZvaWQgaXBvaWJfZmx1c2hfcGF0aHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgaXBvaWJfZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtNzYzLDcgKzgyNiw3IEBACiB7CiAJc3RydWN0IGlwb2liX2Rldl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KSwgKmNwcml2LCAqdGNwcml2OwogCi0JaXBvaWJfZGVsZXRlX2RlYnVnX2ZpbGUoZGV2KTsKKwlpcG9pYl9kZWxldGVfZGVidWdfZmlsZXMoZGV2KTsKIAogCS8qIERlbGV0ZSBhbnkgY2hpbGQgaW50ZXJmYWNlcyBmaXJzdCAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjcHJpdiwgdGNwcml2LCAmcHJpdi0+Y2hpbGRfaW50ZnMsIGxpc3QpIHsKQEAgLTk3Miw4ICsxMDM1LDcgQEAKIAkJZ290byByZWdpc3Rlcl9mYWlsZWQ7CiAJfQogCi0JaWYgKGlwb2liX2NyZWF0ZV9kZWJ1Z19maWxlKHByaXYtPmRldikpCi0JCWdvdG8gZGVidWdfZmFpbGVkOworCWlwb2liX2NyZWF0ZV9kZWJ1Z19maWxlcyhwcml2LT5kZXYpOwogCiAJaWYgKGlwb2liX2FkZF9wa2V5X2F0dHIocHJpdi0+ZGV2KSkKIAkJZ290byBzeXNmc19mYWlsZWQ7CkBAIC05ODcsOSArMTA0OSw3IEBACiAJcmV0dXJuIHByaXYtPmRldjsKIAogc3lzZnNfZmFpbGVkOgotCWlwb2liX2RlbGV0ZV9kZWJ1Z19maWxlKHByaXYtPmRldik7Ci0KLWRlYnVnX2ZhaWxlZDoKKwlpcG9pYl9kZWxldGVfZGVidWdfZmlsZXMocHJpdi0+ZGV2KTsKIAl1bnJlZ2lzdGVyX25ldGRldihwcml2LT5kZXYpOwogCiByZWdpc3Rlcl9mYWlsZWQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX211bHRpY2FzdC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tdWx0aWNhc3QuYwppbmRleCAzZWNmNzhhLi5jMzNlZDg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX211bHRpY2FzdC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbXVsdGljYXN0LmMKQEAgLTEyMCwxMiArMTIwLDggQEAKIAlpZiAobWNhc3QtPmFoKQogCQlpcG9pYl9wdXRfYWgobWNhc3QtPmFoKTsKIAotCXdoaWxlICghc2tiX3F1ZXVlX2VtcHR5KCZtY2FzdC0+cGt0X3F1ZXVlKSkgewotCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gc2tiX2RlcXVldWUoJm1jYXN0LT5wa3RfcXVldWUpOwotCi0JCXNrYi0+ZGV2ID0gZGV2OwotCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCX0KKwl3aGlsZSAoIXNrYl9xdWV1ZV9lbXB0eSgmbWNhc3QtPnBrdF9xdWV1ZSkpCisJCWRldl9rZnJlZV9za2JfYW55KHNrYl9kZXF1ZXVlKCZtY2FzdC0+cGt0X3F1ZXVlKSk7CiAKIAlrZnJlZShtY2FzdCk7CiB9CkBAIC0zMTcsMTMgKzMxMyw4IEBACiAJCQkJCUlQT0lCX0dJRF9BUkcobWNhc3QtPm1jbWVtYmVyLm1naWQpLCBzdGF0dXMpOwogCiAJCS8qIEZsdXNoIG91dCBhbnkgcXVldWVkIHBhY2tldHMgKi8KLQkJd2hpbGUgKCFza2JfcXVldWVfZW1wdHkoJm1jYXN0LT5wa3RfcXVldWUpKSB7Ci0JCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gc2tiX2RlcXVldWUoJm1jYXN0LT5wa3RfcXVldWUpOwotCi0JCQlza2ItPmRldiA9IGRldjsKLQotCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQkJfQorCQl3aGlsZSAoIXNrYl9xdWV1ZV9lbXB0eSgmbWNhc3QtPnBrdF9xdWV1ZSkpCisJCQlkZXZfa2ZyZWVfc2tiX2FueShza2JfZGVxdWV1ZSgmbWNhc3QtPnBrdF9xdWV1ZSkpOwogCiAJCS8qIENsZWFyIHRoZSBidXN5IGZsYWcgc28gd2UgdHJ5IGFnYWluICovCiAJCWNsZWFyX2JpdChJUE9JQl9NQ0FTVF9GTEFHX0JVU1ksICZtY2FzdC0+ZmxhZ3MpOwpAQCAtOTI4LDIxICs5MTksMTYgQEAKIAkJcmV0dXJuIE5VTEw7CiAKIAlpdGVyLT5kZXYgPSBkZXY7Ci0JbWVtc2V0KGl0ZXItPm1naWQucmF3LCAwLCBzaXplb2YgaXRlci0+bWdpZCk7CisJbWVtc2V0KGl0ZXItPm1naWQucmF3LCAwLCAxNik7CiAKIAlpZiAoaXBvaWJfbWNhc3RfaXRlcl9uZXh0KGl0ZXIpKSB7Ci0JCWlwb2liX21jYXN0X2l0ZXJfZnJlZShpdGVyKTsKKwkJa2ZyZWUoaXRlcik7CiAJCXJldHVybiBOVUxMOwogCX0KIAogCXJldHVybiBpdGVyOwogfQogCi12b2lkIGlwb2liX21jYXN0X2l0ZXJfZnJlZShzdHJ1Y3QgaXBvaWJfbWNhc3RfaXRlciAqaXRlcikKLXsKLQlrZnJlZShpdGVyKTsKLX0KLQogaW50IGlwb2liX21jYXN0X2l0ZXJfbmV4dChzdHJ1Y3QgaXBvaWJfbWNhc3RfaXRlciAqaXRlcikKIHsKIAlzdHJ1Y3QgaXBvaWJfZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihpdGVyLT5kZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl92bGFuLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX3ZsYW4uYwppbmRleCAzMzJkNzMwLi5kMjgwYjM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX3ZsYW4uYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX3ZsYW4uYwpAQCAtMTEzLDggKzExMyw3IEBACiAKIAlwcml2LT5wYXJlbnQgPSBwcHJpdi0+ZGV2OwogCi0JaWYgKGlwb2liX2NyZWF0ZV9kZWJ1Z19maWxlKHByaXYtPmRldikpCi0JCWdvdG8gZGVidWdfZmFpbGVkOworCWlwb2liX2NyZWF0ZV9kZWJ1Z19maWxlcyhwcml2LT5kZXYpOwogCiAJaWYgKGlwb2liX2FkZF9wa2V5X2F0dHIocHJpdi0+ZGV2KSkKIAkJZ290byBzeXNmc19mYWlsZWQ7CkBAIC0xMzAsOSArMTI5LDcgQEAKIAlyZXR1cm4gMDsKIAogc3lzZnNfZmFpbGVkOgotCWlwb2liX2RlbGV0ZV9kZWJ1Z19maWxlKHByaXYtPmRldik7Ci0KLWRlYnVnX2ZhaWxlZDoKKwlpcG9pYl9kZWxldGVfZGVidWdfZmlsZXMocHJpdi0+ZGV2KTsKIAl1bnJlZ2lzdGVyX25ldGRldihwcml2LT5kZXYpOwogCiByZWdpc3Rlcl9mYWlsZWQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jCmluZGV4IDI2ODdlMzQuLjMyMWEzYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jCkBAIC0zMiw3ICszMiw2IEBACiAgKiAkSWQ6IGliX3NycC5jIDM5MzIgMjAwNS0xMS0wMSAxNzoxOToyOVogcm9sYW5kICQKICAqLwogCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2lucHV0LmMgYi9kcml2ZXJzL2lucHV0L2lucHV0LmMKaW5kZXggMDg3OTkxNS4uYzhhZTJiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9pbnB1dC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvaW5wdXQuYwpAQCAtNjY5LDcgKzY2OSw3IEBACiAJCUlOUFVUX0FERF9IT1RQTFVHX1ZBUigiTkFNRT1cIiVzXCIiLCBkZXYtPm5hbWUpOwogCWlmIChkZXYtPnBoeXMpCiAJCUlOUFVUX0FERF9IT1RQTFVHX1ZBUigiUEhZUz1cIiVzXCIiLCBkZXYtPnBoeXMpOwotCWlmIChkZXYtPnBoeXMpCisJaWYgKGRldi0+dW5pcSkKIAkJSU5QVVRfQUREX0hPVFBMVUdfVkFSKCJVTklRPVwiJXNcIiIsIGRldi0+dW5pcSk7CiAKIAlJTlBVVF9BRERfSE9UUExVR19CTV9WQVIoIkVWPSIsIGRldi0+ZXZiaXQsIEVWX01BWCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2Nvcmdpa2JkLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2Nvcmdpa2JkLmMKaW5kZXggZDAwZDE0Yi4uNjQ2NzJkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9jb3JnaWtiZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvY29yZ2lrYmQuYwpAQCAtMjU5LDE3ICsyNTksMTcgQEAKIH0KIAogI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBjb3JnaWtiZF9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBjb3JnaWtiZF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCXN0cnVjdCBjb3JnaWtiZCAqY29yZ2lrYmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgY29yZ2lrYmQgKmNvcmdpa2JkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAljb3JnaWtiZC0+c3VzcGVuZGVkID0gMTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGNvcmdpa2JkX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGNvcmdpa2JkX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGNvcmdpa2JkICpjb3JnaWtiZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBjb3JnaWtiZCAqY29yZ2lrYmQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJLyogVXBvbiByZXN1bWUsIGlnbm9yZSB0aGUgc3VzcGVuZCBrZXkgZm9yIGEgc2hvcnQgd2hpbGUgKi8KIAljb3JnaWtiZC0+c3VzcGVuZF9qaWZmaWVzPWppZmZpZXM7CkBAIC0yODIsNyArMjgyLDcgQEAKICNkZWZpbmUgY29yZ2lrYmRfcmVzdW1lCQlOVUxMCiAjZW5kaWYKIAotc3RhdGljIGludCBfX2luaXQgY29yZ2lrYmRfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBfX2luaXQgY29yZ2lrYmRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgY29yZ2lrYmQgKmNvcmdpa2JkOwogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldjsKQEAgLTI5Niw3ICsyOTYsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBjb3JnaWtiZCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgY29yZ2lrYmQpOwogCiAJY29yZ2lrYmQtPmlucHV0ID0gaW5wdXRfZGV2OwogCXNwaW5fbG9ja19pbml0KCZjb3JnaWtiZC0+bG9jayk7CkBAIC0zMjEsNyArMzIxLDcgQEAKIAlpbnB1dF9kZXYtPmlkLnZlbmRvciA9IDB4MDAwMTsKIAlpbnB1dF9kZXYtPmlkLnByb2R1Y3QgPSAweDAwMDE7CiAJaW5wdXRfZGV2LT5pZC52ZXJzaW9uID0gMHgwMTAwOwotCWlucHV0X2Rldi0+Y2Rldi5kZXYgPSBkZXY7CisJaW5wdXRfZGV2LT5jZGV2LmRldiA9ICZwZGV2LT5kZXY7CiAJaW5wdXRfZGV2LT5wcml2YXRlID0gY29yZ2lrYmQ7CiAKIAlpbnB1dF9kZXYtPmV2Yml0WzBdID0gQklUKEVWX0tFWSkgfCBCSVQoRVZfUkVQKSB8IEJJVChFVl9QV1IpIHwgQklUKEVWX1NXKTsKQEAgLTM1NiwxMCArMzU2LDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY29yZ2lrYmRfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgY29yZ2lrYmRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJaW50IGk7Ci0Jc3RydWN0IGNvcmdpa2JkICpjb3JnaWtiZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBjb3JnaWtiZCAqY29yZ2lrYmQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAogCWZvciAoaSA9IDA7IGkgPCBDT1JHSV9LRVlfU0VOU0VfTlVNOyBpKyspCiAJCWZyZWVfaXJxKENPUkdJX0lSUV9HUElPX0tFWV9TRU5TRShpKSwgY29yZ2lrYmQpOwpAQCAtMzc0LDIzICszNzQsMjQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGNvcmdpa2JkX2RyaXZlciA9IHsKLQkubmFtZQkJPSAiY29yZ2kta2V5Ym9hcmQiLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgY29yZ2lrYmRfZHJpdmVyID0gewogCS5wcm9iZQkJPSBjb3JnaWtiZF9wcm9iZSwKIAkucmVtb3ZlCQk9IGNvcmdpa2JkX3JlbW92ZSwKIAkuc3VzcGVuZAk9IGNvcmdpa2JkX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBjb3JnaWtiZF9yZXN1bWUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gImNvcmdpLWtleWJvYXJkIiwKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2RldmluaXQgY29yZ2lrYmRfaW5pdCh2b2lkKQogewotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJmNvcmdpa2JkX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmY29yZ2lrYmRfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGNvcmdpa2JkX2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmY29yZ2lrYmRfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmY29yZ2lrYmRfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoY29yZ2lrYmRfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3NwaXR6a2JkLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3NwaXR6a2JkLmMKaW5kZXggMGZhMzhhNS4uNmExNWZlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9zcGl0emtiZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc3BpdHprYmQuYwpAQCAtMzA5LDEwICszMDksMTAgQEAKIH0KIAogI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBzcGl0emtiZF9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBzcGl0emtiZF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCWludCBpOwotCXN0cnVjdCBzcGl0emtiZCAqc3BpdHprYmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgc3BpdHprYmQgKnNwaXR6a2JkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAlzcGl0emtiZC0+c3VzcGVuZGVkID0gMTsKIAogCS8qIFNldCBTdHJvYmUgbGluZXMgYXMgaW5wdXRzIC0gKmV4Y2VwdCogc3Ryb2JlIGxpbmUgMCBsZWF2ZSB0aGlzCkBAIC0zMjMsMTAgKzMyMywxMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNwaXR6a2JkX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHNwaXR6a2JkX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJaW50IGk7Ci0Jc3RydWN0IHNwaXR6a2JkICpzcGl0emtiZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBzcGl0emtiZCAqc3BpdHprYmQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJZm9yIChpID0gMDsgaSA8IFNQSVRaX0tFWV9TVFJPQkVfTlVNOyBpKyspCiAJCXB4YV9ncGlvX21vZGUoc3BpdHpfc3Ryb2Jlc1tpXSB8IEdQSU9fT1VUIHwgR1BJT19ERkxUX0hJR0gpOwpAQCAtMzQyLDcgKzM0Miw3IEBACiAjZGVmaW5lIHNwaXR6a2JkX3Jlc3VtZQkJTlVMTAogI2VuZGlmCiAKLXN0YXRpYyBpbnQgX19pbml0IHNwaXR6a2JkX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19pbml0IHNwaXR6a2JkX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgc3BpdHprYmQgKnNwaXR6a2JkOwogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldjsKQEAgLTM1OCw3ICszNTgsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBzcGl0emtiZCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBzcGl0emtiZCk7CiAJc3RyY3B5KHNwaXR6a2JkLT5waHlzLCAic3BpdHprYmQvaW5wdXQwIik7CiAKIAlzcGluX2xvY2tfaW5pdCgmc3BpdHprYmQtPmxvY2spOwpAQCAtMzgwLDcgKzM4MCw3IEBACiAJaW5wdXRfZGV2LT5wcml2YXRlID0gc3BpdHprYmQ7CiAJaW5wdXRfZGV2LT5uYW1lID0gIlNwaXR6IEtleWJvYXJkIjsKIAlpbnB1dF9kZXYtPnBoeXMgPSBzcGl0emtiZC0+cGh5czsKLQlpbnB1dF9kZXYtPmNkZXYuZGV2ID0gZGV2OworCWlucHV0X2Rldi0+Y2Rldi5kZXYgPSAmZGV2LT5kZXY7CiAKIAlpbnB1dF9kZXYtPmlkLmJ1c3R5cGUgPSBCVVNfSE9TVDsKIAlpbnB1dF9kZXYtPmlkLnZlbmRvciA9IDB4MDAwMTsKQEAgLTQzNywxMCArNDM3LDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc3BpdHprYmRfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgc3BpdHprYmRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlpbnQgaTsKLQlzdHJ1Y3Qgc3BpdHprYmQgKnNwaXR6a2JkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHNwaXR6a2JkICpzcGl0emtiZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgU1BJVFpfS0VZX1NFTlNFX05VTTsgaSsrKQogCQlmcmVlX2lycShJUlFfR1BJTyhzcGl0el9zZW5zZXNbaV0pLCBzcGl0emtiZCk7CkBAIC00NjAsMjMgKzQ2MCwyNCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgc3BpdHprYmRfZHJpdmVyID0gewotCS5uYW1lCQk9ICJzcGl0ei1rZXlib2FyZCIsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzcGl0emtiZF9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IHNwaXR6a2JkX3Byb2JlLAogCS5yZW1vdmUJCT0gc3BpdHprYmRfcmVtb3ZlLAogCS5zdXNwZW5kCT0gc3BpdHprYmRfc3VzcGVuZCwKIAkucmVzdW1lCQk9IHNwaXR6a2JkX3Jlc3VtZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAic3BpdHota2V5Ym9hcmQiLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBzcGl0emtiZF9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIGRyaXZlcl9yZWdpc3Rlcigmc3BpdHprYmRfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzcGl0emtiZF9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgc3BpdHprYmRfZXhpdCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZzcGl0emtiZF9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzcGl0emtiZF9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChzcGl0emtiZF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIuYyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIuYwppbmRleCAwMWUxODY0Li5hYzg2YzFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLmMKKysrIGIvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi5jCkBAIC05MTIsNyArOTEyLDcgQEAKICAqIEhlcmUgd2UgdHJ5IHRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIEJJT1Mgc2V0dGluZ3MKICAqLwogCi1zdGF0aWMgaW50IGk4MDQyX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IGk4MDQyX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJZGVsX3RpbWVyX3N5bmMoJmk4MDQyX3RpbWVyKTsKIAlpODA0Ml9jb250cm9sbGVyX3Jlc2V0KCk7CkBAIC05MjUsNyArOTI1LDcgQEAKICAqIEhlcmUgd2UgdHJ5IHRvIHJlc2V0IGV2ZXJ5dGhpbmcgYmFjayB0byBhIHN0YXRlIGluIHdoaWNoIHN1c3BlbmRlZAogICovCiAKLXN0YXRpYyBpbnQgaTgwNDJfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgaTgwNDJfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlpbnQgaTsKIApAQCAtOTY0LDE3ICs5NjQsMTggQEAKICAqIGJlY2F1c2Ugb3RoZXJ3aXNlIEJJT1NlcyB3aWxsIGJlIGNvbmZ1c2VkLgogICovCiAKLXN0YXRpYyB2b2lkIGk4MDQyX3NodXRkb3duKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIGk4MDQyX3NodXRkb3duKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlpODA0Ml9jb250cm9sbGVyX2NsZWFudXAoKTsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGk4MDQyX2RyaXZlciA9IHsKLQkubmFtZQkJPSAiaTgwNDIiLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaTgwNDJfZHJpdmVyID0gewogCS5zdXNwZW5kCT0gaTgwNDJfc3VzcGVuZCwKIAkucmVzdW1lCQk9IGk4MDQyX3Jlc3VtZSwKIAkuc2h1dGRvd24JPSBpODA0Ml9zaHV0ZG93biwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAiaTgwNDIiLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBpODA0Ml9jcmVhdGVfa2JkX3BvcnQodm9pZCkKQEAgLTEwNzgsNyArMTA3OSw3IEBACiAJCWdvdG8gZXJyX3BsYXRmb3JtX2V4aXQ7CiAJfQogCi0JZXJyID0gZHJpdmVyX3JlZ2lzdGVyKCZpODA0Ml9kcml2ZXIpOworCWVyciA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmaTgwNDJfZHJpdmVyKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9jb250cm9sbGVyX2NsZWFudXA7CiAKQEAgLTExMjYsNyArMTEyNyw3IEBACiAgZXJyX3VucmVnaXN0ZXJfZGV2aWNlOgogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGk4MDQyX3BsYXRmb3JtX2RldmljZSk7CiAgZXJyX3VucmVnaXN0ZXJfZHJpdmVyOgotCWRyaXZlcl91bnJlZ2lzdGVyKCZpODA0Ml9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZpODA0Ml9kcml2ZXIpOwogIGVycl9jb250cm9sbGVyX2NsZWFudXA6CiAJaTgwNDJfY29udHJvbGxlcl9jbGVhbnVwKCk7CiAgZXJyX3BsYXRmb3JtX2V4aXQ6CkBAIC0xMTQ4LDcgKzExNDksNyBAQAogCWRlbF90aW1lcl9zeW5jKCZpODA0Ml90aW1lcik7CiAKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihpODA0Ml9wbGF0Zm9ybV9kZXZpY2UpOwotCWRyaXZlcl91bnJlZ2lzdGVyKCZpODA0Ml9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZpODA0Ml9kcml2ZXIpOwogCiAJaTgwNDJfcGxhdGZvcm1fZXhpdCgpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL3JwY2tiZC5jIGIvZHJpdmVycy9pbnB1dC9zZXJpby9ycGNrYmQuYwppbmRleCA1MmM0OTI1Li5hM2JkMTE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3NlcmlvL3JwY2tiZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vcnBja2JkLmMKQEAgLTEwNyw3ICsxMDcsNyBAQAogICogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgc2VyaW8gc3RydWN0dXJlIGZvciBzdWJzZXF1ZW50IHJlZ2lzdHJhdGlvbgogICogd2l0aCBzZXJpbyBjb3JlLgogICovCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBycGNrYmRfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBfX2RldmluaXQgcnBja2JkX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgc2VyaW8gKnNlcmlvOwogCkBAIC0xMjAsMzcgKzEyMCwzOCBAQAogCXNlcmlvLT53cml0ZQkJPSBycGNrYmRfd3JpdGU7CiAJc2VyaW8tPm9wZW4JCT0gcnBja2JkX29wZW47CiAJc2VyaW8tPmNsb3NlCQk9IHJwY2tiZF9jbG9zZTsKLQlzZXJpby0+ZGV2LnBhcmVudAk9IGRldjsKKwlzZXJpby0+ZGV2LnBhcmVudAk9ICZkZXYtPmRldjsKIAlzdHJsY3B5KHNlcmlvLT5uYW1lLCAiUmlzY1BDIFBTLzIga2JkIHBvcnQiLCBzaXplb2Yoc2VyaW8tPm5hbWUpKTsKIAlzdHJsY3B5KHNlcmlvLT5waHlzLCAicnBja2JkL3NlcmlvMCIsIHNpemVvZihzZXJpby0+cGh5cykpOwogCi0JZGV2X3NldF9kcnZkYXRhKGRldiwgc2VyaW8pOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgc2VyaW8pOwogCXNlcmlvX3JlZ2lzdGVyX3BvcnQoc2VyaW8pOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IF9fZGV2ZXhpdCBycGNrYmRfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19kZXZleGl0IHJwY2tiZF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBzZXJpbyAqc2VyaW8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgc2VyaW8gKnNlcmlvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAlzZXJpb191bnJlZ2lzdGVyX3BvcnQoc2VyaW8pOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgcnBja2JkX2RyaXZlciA9IHsKLQkubmFtZQkJPSAia2FydCIsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBycGNrYmRfZHJpdmVyID0gewogCS5wcm9iZQkJPSBycGNrYmRfcHJvYmUsCiAJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChycGNrYmRfcmVtb3ZlKSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAia2FydCIsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHJwY2tiZF9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmcnBja2JkX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmcnBja2JkX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBycGNrYmRfZXhpdCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZycGNrYmRfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmcnBja2JkX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KHJwY2tiZF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vY29yZ2lfdHMuYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vY29yZ2lfdHMuYwppbmRleCAxNWU4OGVlLi4xMDQyOTg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2NvcmdpX3RzLmMKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9jb3JnaV90cy5jCkBAIC0yMzEsOSArMjMxLDkgQEAKIH0KIAogI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBjb3JnaXRzX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IGNvcmdpdHNfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlzdHJ1Y3QgY29yZ2lfdHMgKmNvcmdpX3RzID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGNvcmdpX3RzICpjb3JnaV90cyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKIAlpZiAoY29yZ2lfdHMtPnBlbmRvd24pIHsKIAkJZGVsX3RpbWVyX3N5bmMoJmNvcmdpX3RzLT50aW1lcik7CkBAIC0yNDgsOSArMjQ4LDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjb3JnaXRzX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGNvcmdpdHNfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgY29yZ2lfdHMgKmNvcmdpX3RzID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGNvcmdpX3RzICpjb3JnaV90cyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKIAljb3JnaV9zc3BfYWRzNzg0Nl9wdXRnZXQoKDR1IDw8IEFEU0NUUkxfQURSX1NIKSB8IEFEU0NUUkxfU1RTKTsKIAkvKiBFbmFibGUgRmFsbGluZyBFZGdlICovCkBAIC0yNjQsMTAgKzI2NCw5IEBACiAjZGVmaW5lIGNvcmdpdHNfcmVzdW1lCQlOVUxMCiAjZW5kaWYKIAotc3RhdGljIGludCBfX2luaXQgY29yZ2l0c19wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9faW5pdCBjb3JnaXRzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IGNvcmdpX3RzICpjb3JnaV90czsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OwogCWludCBlcnIgPSAtRU5PTUVNOwogCkBAIC0yNzYsOSArMjc1LDkgQEAKIAlpZiAoIWNvcmdpX3RzIHx8ICFpbnB1dF9kZXYpCiAJCWdvdG8gZmFpbDsKIAotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGNvcmdpX3RzKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBjb3JnaV90cyk7CiAKLQljb3JnaV90cy0+bWFjaGluZm8gPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisJY29yZ2lfdHMtPm1hY2hpbmZvID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJY29yZ2lfdHMtPmlycV9ncGlvID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKIAogCWlmIChjb3JnaV90cy0+aXJxX2dwaW8gPCAwKSB7CkBAIC0yOTgsNyArMjk3LDcgQEAKIAlpbnB1dF9kZXYtPmlkLnZlbmRvciA9IDB4MDAwMTsKIAlpbnB1dF9kZXYtPmlkLnByb2R1Y3QgPSAweDAwMDI7CiAJaW5wdXRfZGV2LT5pZC52ZXJzaW9uID0gMHgwMTAwOwotCWlucHV0X2Rldi0+Y2Rldi5kZXYgPSBkZXY7CisJaW5wdXRfZGV2LT5jZGV2LmRldiA9ICZwZGV2LT5kZXY7CiAJaW5wdXRfZGV2LT5wcml2YXRlID0gY29yZ2lfdHM7CiAKIAlpbnB1dF9kZXYtPmV2Yml0WzBdID0gQklUKEVWX0tFWSkgfCBCSVQoRVZfQUJTKTsKQEAgLTMzOSw5ICszMzgsOSBAQAogCiB9CiAKLXN0YXRpYyBpbnQgY29yZ2l0c19yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBjb3JnaXRzX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBjb3JnaV90cyAqY29yZ2lfdHMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgY29yZ2lfdHMgKmNvcmdpX3RzID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKIAlmcmVlX2lycShjb3JnaV90cy0+aXJxX2dwaW8sIE5VTEwpOwogCWRlbF90aW1lcl9zeW5jKCZjb3JnaV90cy0+dGltZXIpOwpAQCAtMzUxLDIzICszNTAsMjQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGNvcmdpdHNfZHJpdmVyID0gewotCS5uYW1lCQk9ICJjb3JnaS10cyIsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBjb3JnaXRzX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gY29yZ2l0c19wcm9iZSwKIAkucmVtb3ZlCQk9IGNvcmdpdHNfcmVtb3ZlLAogCS5zdXNwZW5kCT0gY29yZ2l0c19zdXNwZW5kLAogCS5yZXN1bWUJCT0gY29yZ2l0c19yZXN1bWUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gImNvcmdpLXRzIiwKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2RldmluaXQgY29yZ2l0c19pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmY29yZ2l0c19kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmNvcmdpdHNfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGNvcmdpdHNfZXhpdCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZjb3JnaXRzX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmNvcmdpdHNfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoY29yZ2l0c19pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9kaXZlcnQvZGl2ZXJ0X2luaXQuYyBiL2RyaXZlcnMvaXNkbi9kaXZlcnQvZGl2ZXJ0X2luaXQuYwppbmRleCA0MzRlNjg0Li4yZjdjOWZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vZGl2ZXJ0L2RpdmVydF9pbml0LmMKKysrIGIvZHJpdmVycy9pc2RuL2RpdmVydC9kaXZlcnRfaW5pdC5jCkBAIC0xMCw3ICsxMCw2IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9kaXZlcnQvZGl2ZXJ0X3Byb2Nmcy5jIGIvZHJpdmVycy9pc2RuL2RpdmVydC9kaXZlcnRfcHJvY2ZzLmMKaW5kZXggMGIwZWEyNi4uMWIzN2Q4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2RpdmVydC9kaXZlcnRfcHJvY2ZzLmMKKysrIGIvZHJpdmVycy9pc2RuL2RpdmVydC9kaXZlcnRfcHJvY2ZzLmMKQEAgLTExLDcgKzExLDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpZmRlZiBDT05GSUdfUFJPQ19GUwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2RpdmVydC9pc2RuX2RpdmVydC5jIGIvZHJpdmVycy9pc2RuL2RpdmVydC9pc2RuX2RpdmVydC5jCmluZGV4IDBiZmQ2OTguLmYxYTFmOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9kaXZlcnQvaXNkbl9kaXZlcnQuYworKysgYi9kcml2ZXJzL2lzZG4vZGl2ZXJ0L2lzZG5fZGl2ZXJ0LmMKQEAgLTksNyArOSw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogCiAjaW5jbHVkZSAiaXNkbl9kaXZlcnQuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9oaXNheF9mY3BjaXBucC5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2hpc2F4X2ZjcGNpcG5wLmMKaW5kZXggYjRkNzk1ZC4uZGM3ZWY5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2hpc2F4X2ZjcGNpcG5wLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2hpc2F4X2ZjcGNpcG5wLmMKQEAgLTIzLDcgKzIzLDYgQEAKICAqIG8gdHhfc2tiIGF0IFBIX0RFQUNUSVZBVEUgdGltZQogICovCiAKLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L3N0NTQ4MV9pbml0LmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvc3Q1NDgxX2luaXQuYwppbmRleCAyY2Y1ZDFhLi44ZTE5MmEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvc3Q1NDgxX2luaXQuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvc3Q1NDgxX2luaXQuYwpAQCAtMjUsNyArMjUsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2h5c2RuL2h5Y2FwaS5jIGIvZHJpdmVycy9pc2RuL2h5c2RuL2h5Y2FwaS5jCmluZGV4IDFmZDNkNGUuLmFjYzFkM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oeXNkbi9oeWNhcGkuYworKysgYi9kcml2ZXJzL2lzZG4vaHlzZG4vaHljYXBpLmMKQEAgLTExLDcgKzExLDYgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX2luaXQuYyBiL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9pbml0LmMKaW5kZXggMTJjODEzNy4uY2I3OTFmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX2luaXQuYworKysgYi9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5faW5pdC5jCkBAIC0xMyw3ICsxMyw2IEBACiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9uZXQuYyBiL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9uZXQuYwppbmRleCBiYWJlYzgxLi5hYTAxNjI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fbmV0LmMKKysrIGIvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX25ldC5jCkBAIC0xNCw3ICsxNCw2IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9wcm9jY29uZi5jIGIvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX3Byb2Njb25mLmMKaW5kZXggODdmNTlhMC4uNDBlNTYxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX3Byb2Njb25mLmMKKysrIGIvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX3Byb2Njb25mLmMKQEAgLTEyLDcgKzEyLDYgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fcHJvY2xvZy5jIGIvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX3Byb2Nsb2cuYwppbmRleCA0ZDU3MDExLi42YzI2ZjFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fcHJvY2xvZy5jCisrKyBiL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9wcm9jbG9nLmMKQEAgLTExLDcgKzExLDYgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fY29tbW9uLmMgYi9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fY29tbW9uLmMKaW5kZXggOGE3ZDU0YS4uNDY0M2RmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2k0bC9pc2RuX2NvbW1vbi5jCisrKyBiL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl9jb21tb24uYwpAQCAtMTQsNyArMTQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9pc2RuLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaWNuL2ljbi5oIGIvZHJpdmVycy9pc2RuL2ljbi9pY24uaAppbmRleCA5MDI4Y2MzLi43ZDcyNDVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaWNuL2ljbi5oCisrKyBiL2RyaXZlcnMvaXNkbi9pY24vaWNuLmgKQEAgLTM1LDcgKzM1LDYgQEAKICNpZmRlZiBfX0tFUk5FTF9fCiAvKiBLZXJuZWwgaW5jbHVkZXMgKi8KIAotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9pc2RubG9vcC9pc2RubG9vcC5oIGIvZHJpdmVycy9pc2RuL2lzZG5sb29wL2lzZG5sb29wLmgKaW5kZXggOGZiN2JjMS4uZDY5OWZlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2lzZG5sb29wL2lzZG5sb29wLmgKKysrIGIvZHJpdmVycy9pc2RuL2lzZG5sb29wL2lzZG5sb29wLmgKQEAgLTMzLDcgKzMzLDYgQEAKICNpZmRlZiBfX0tFUk5FTF9fCiAvKiBLZXJuZWwgaW5jbHVkZXMgKi8KIAotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9zYy9pbmNsdWRlcy5oIGIvZHJpdmVycy9pc2RuL3NjL2luY2x1ZGVzLmgKaW5kZXggNDYxMWRhNi4uNTI4NmUwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL3NjL2luY2x1ZGVzLmgKKysrIGIvZHJpdmVycy9pc2RuL3NjL2luY2x1ZGVzLmgKQEAgLTQsNyArNCw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9iaXRtYXAuYyBiL2RyaXZlcnMvbWQvYml0bWFwLmMKaW5kZXggMDE2NTRmYy4uNTEzMTUzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9iaXRtYXAuYworKysgYi9kcml2ZXJzL21kL2JpdG1hcC5jCkBAIC0yMSw3ICsyMSw2IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC0yNzIsNyArMjcxLDggQEAKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKIAlJVEVSQVRFX1JERVYobWRkZXYsIHJkZXYsIHRtcCkgewotCQlpZiAoISByZGV2LT5pbl9zeW5jIHx8IHJkZXYtPmZhdWx0eSkKKwkJaWYgKCEgdGVzdF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKQorCQkgICAgfHwgdGVzdF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpKQogCQkJY29udGludWU7CiAKIAkJdGFyZ2V0ID0gKHJkZXYtPnNiX29mZnNldCA8PCAxKSArIG9mZnNldCArIGluZGV4ICogKFBBR0VfU0laRS81MTIpOwpAQCAtMjkyLDcgKzI5Miw4IEBACiAJc3RydWN0IGxpc3RfaGVhZCAqdG1wOwogCiAJSVRFUkFURV9SREVWKG1kZGV2LCByZGV2LCB0bXApCi0JCWlmIChyZGV2LT5pbl9zeW5jICYmICFyZGV2LT5mYXVsdHkpCisJCWlmICh0ZXN0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpCisJCSAgICAmJiAhdGVzdF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpKQogCQkJbWRfc3VwZXJfd3JpdGUobWRkZXYsIHJkZXYsCiAJCQkJICAgICAgIChyZGV2LT5zYl9vZmZzZXQ8PDEpICsgb2Zmc2V0CiAJCQkJICAgICAgICsgcGFnZS0+aW5kZXggKiAoUEFHRV9TSVpFLzUxMiksCkBAIC0zMDAsNyArMzAxLDcgQEAKIAkJCQkgICAgICAgcGFnZSk7CiAKIAlpZiAod2FpdCkKLQkJd2FpdF9ldmVudChtZGRldi0+c2Jfd2FpdCwgYXRvbWljX3JlYWQoJm1kZGV2LT5wZW5kaW5nX3dyaXRlcyk9PTApOworCQltZF9zdXBlcl93YWl0KG1kZGV2KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDgxLDcgKzQ4Miw4IEBACiAJLyogdmVyaWZ5IHRoYXQgdGhlIGJpdG1hcC1zcGVjaWZpYyBmaWVsZHMgYXJlIHZhbGlkICovCiAJaWYgKHNiLT5tYWdpYyAhPSBjcHVfdG9fbGUzMihCSVRNQVBfTUFHSUMpKQogCQlyZWFzb24gPSAiYmFkIG1hZ2ljIjsKLQllbHNlIGlmIChzYi0+dmVyc2lvbiAhPSBjcHVfdG9fbGUzMihCSVRNQVBfTUFKT1IpKQorCWVsc2UgaWYgKGxlMzJfdG9fY3B1KHNiLT52ZXJzaW9uKSA8IEJJVE1BUF9NQUpPUl9MTyB8fAorCQkgbGUzMl90b19jcHUoc2ItPnZlcnNpb24pID4gQklUTUFQX01BSk9SX0hJKQogCQlyZWFzb24gPSAidW5yZWNvZ25pemVkIHN1cGVyYmxvY2sgdmVyc2lvbiI7CiAJZWxzZSBpZiAoY2h1bmtzaXplIDwgNTEyIHx8IGNodW5rc2l6ZSA+ICgxMDI0ICogMTAyNCAqIDQpKQogCQlyZWFzb24gPSAiYml0bWFwIGNodW5rc2l6ZSBvdXQgb2YgcmFuZ2UgKDUxMkIgLSA0TUIpIjsKQEAgLTUyNiw2ICs1MjgsOCBAQAogCWJpdG1hcC0+ZGFlbW9uX2xhc3RydW4gPSBqaWZmaWVzOwogCWJpdG1hcC0+bWF4X3dyaXRlX2JlaGluZCA9IHdyaXRlX2JlaGluZDsKIAliaXRtYXAtPmZsYWdzIHw9IHNiLT5zdGF0ZTsKKwlpZiAobGUzMl90b19jcHUoc2ItPnZlcnNpb24pID09IEJJVE1BUF9NQUpPUl9IT1NURU5ESUFOKQorCQliaXRtYXAtPmZsYWdzIHw9IEJJVE1BUF9IT1NURU5ESUFOOwogCWJpdG1hcC0+ZXZlbnRzX2NsZWFyZWQgPSBsZTY0X3RvX2NwdShzYi0+ZXZlbnRzX2NsZWFyZWQpOwogCWlmIChzYi0+c3RhdGUgJiBCSVRNQVBfU1RBTEUpCiAJCWJpdG1hcC0+ZXZlbnRzX2NsZWFyZWQgPSBiaXRtYXAtPm1kZGV2LT5ldmVudHM7CkBAIC03NjMsNyArNzY3LDEwIEBACiAKICAJLyogc2V0IHRoZSBiaXQgKi8KIAlrYWRkciA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX1VTRVIwKTsKLQlzZXRfYml0KGJpdCwga2FkZHIpOworCWlmIChiaXRtYXAtPmZsYWdzICYgQklUTUFQX0hPU1RFTkRJQU4pCisJCXNldF9iaXQoYml0LCBrYWRkcik7CisJZWxzZQorCQlleHQyX3NldF9iaXQoYml0LCBrYWRkcik7CiAJa3VubWFwX2F0b21pYyhrYWRkciwgS01fVVNFUjApOwogCVBSSU5USygic2V0IGZpbGUgYml0ICVsdSBwYWdlICVsdVxuIiwgYml0LCBwYWdlLT5pbmRleCk7CiAKQEAgLTgyMSw4ICs4MjgsNyBAQAogCQkJCQkgICAgd2FrZV91cF9wcm9jZXNzKGJpdG1hcC0+d3JpdGViYWNrX2RhZW1vbi0+dHNrKSk7CiAJCQlzcGluX3VubG9ja19pcnEoJmJpdG1hcC0+d3JpdGVfbG9jayk7CiAJCX0gZWxzZQotCQkJd2FpdF9ldmVudChiaXRtYXAtPm1kZGV2LT5zYl93YWl0LAotCQkJCSAgIGF0b21pY19yZWFkKCZiaXRtYXAtPm1kZGV2LT5wZW5kaW5nX3dyaXRlcyk9PTApOworCQkJbWRfc3VwZXJfd2FpdChiaXRtYXAtPm1kZGV2KTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC04OTAsNiArODk2LDcgQEAKIAlvbGRpbmRleCA9IH4wTDsKIAogCWZvciAoaSA9IDA7IGkgPCBjaHVua3M7IGkrKykgeworCQlpbnQgYjsKIAkJaW5kZXggPSBmaWxlX3BhZ2VfaW5kZXgoaSk7CiAJCWJpdCA9IGZpbGVfcGFnZV9vZmZzZXQoaSk7CiAJCWlmIChpbmRleCAhPSBvbGRpbmRleCkgeyAvKiB0aGlzIGlzIGEgbmV3IHBhZ2UsIHJlYWQgaXQgaW4gKi8KQEAgLTkzOCw3ICs5NDUsMTEgQEAKIAogCQkJYml0bWFwLT5maWxlbWFwW2JpdG1hcC0+ZmlsZV9wYWdlcysrXSA9IHBhZ2U7CiAJCX0KLQkJaWYgKHRlc3RfYml0KGJpdCwgcGFnZV9hZGRyZXNzKHBhZ2UpKSkgeworCQlpZiAoYml0bWFwLT5mbGFncyAmIEJJVE1BUF9IT1NURU5ESUFOKQorCQkJYiA9IHRlc3RfYml0KGJpdCwgcGFnZV9hZGRyZXNzKHBhZ2UpKTsKKwkJZWxzZQorCQkJYiA9IGV4dDJfdGVzdF9iaXQoYml0LCBwYWdlX2FkZHJlc3MocGFnZSkpOworCQlpZiAoYikgewogCQkJLyogaWYgdGhlIGRpc2sgYml0IGlzIHNldCwgc2V0IHRoZSBtZW1vcnkgYml0ICovCiAJCQliaXRtYXBfc2V0X21lbW9yeV9iaXRzKGJpdG1hcCwgaSA8PCBDSFVOS19CTE9DS19TSElGVChiaXRtYXApLAogCQkJCQkgICAgICAgKChpKzEpIDw8IChDSFVOS19CTE9DS19TSElGVChiaXRtYXApKSA+PSBzdGFydCkKQEAgLTEwOTYsNyArMTEwNywxMCBAQAogCQkJCQkJICAtMSk7CiAKIAkJCQkvKiBjbGVhciB0aGUgYml0ICovCi0JCQkJY2xlYXJfYml0KGZpbGVfcGFnZV9vZmZzZXQoaiksIHBhZ2VfYWRkcmVzcyhwYWdlKSk7CisJCQkJaWYgKGJpdG1hcC0+ZmxhZ3MgJiBCSVRNQVBfSE9TVEVORElBTikKKwkJCQkJY2xlYXJfYml0KGZpbGVfcGFnZV9vZmZzZXQoaiksIHBhZ2VfYWRkcmVzcyhwYWdlKSk7CisJCQkJZWxzZQorCQkJCQlleHQyX2NsZWFyX2JpdChmaWxlX3BhZ2Vfb2Zmc2V0KGopLCBwYWdlX2FkZHJlc3MocGFnZSkpOwogCQkJfQogCQl9CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJpdG1hcC0+bG9jaywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tZC5jIGIvZHJpdmVycy9tZC9tZC5jCmluZGV4IDllY2Y1MWUuLmFkZjk2MGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvbWQuYworKysgYi9kcml2ZXJzL21kL21kLmMKQEAgLTEzMSw2ICsxMzEsOCBAQAogCiBzdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIG1kX2ZvcHM7CiAKK3N0YXRpYyBpbnQgc3RhcnRfcmVhZG9ubHk7CisKIC8qCiAgKiBFbmFibGVzIHRvIGl0ZXJhdGUgb3ZlciBhbGwgZXhpc3RpbmcgbWQgYXJyYXlzCiAgKiBhbGxfbWRkZXZzX2xvY2sgcHJvdGVjdHMgdGhpcyBsaXN0LgpAQCAtMTgxLDcgKzE4Myw3IEBACiAJaWYgKCFtZGRldi0+cmFpZF9kaXNrcyAmJiBsaXN0X2VtcHR5KCZtZGRldi0+ZGlza3MpKSB7CiAJCWxpc3RfZGVsKCZtZGRldi0+YWxsX21kZGV2cyk7CiAJCWJsa19wdXRfcXVldWUobWRkZXYtPnF1ZXVlKTsKLQkJa2ZyZWUobWRkZXYpOworCQlrb2JqZWN0X3VucmVnaXN0ZXIoJm1kZGV2LT5rb2JqKTsKIAl9CiAJc3Bpbl91bmxvY2soJmFsbF9tZGRldnNfbG9jayk7CiB9CkBAIC0zMzAsMTggKzMzMiw0NiBAQAogc3RhdGljIGludCBzdXBlcl93cml0dGVuKHN0cnVjdCBiaW8gKmJpbywgdW5zaWduZWQgaW50IGJ5dGVzX2RvbmUsIGludCBlcnJvcikKIHsKIAltZGtfcmRldl90ICpyZGV2ID0gYmlvLT5iaV9wcml2YXRlOworCW1kZGV2X3QgKm1kZGV2ID0gcmRldi0+bWRkZXY7CiAJaWYgKGJpby0+Ymlfc2l6ZSkKIAkJcmV0dXJuIDE7CiAKIAlpZiAoZXJyb3IgfHwgIXRlc3RfYml0KEJJT19VUFRPREFURSwgJmJpby0+YmlfZmxhZ3MpKQotCQltZF9lcnJvcihyZGV2LT5tZGRldiwgcmRldik7CisJCW1kX2Vycm9yKG1kZGV2LCByZGV2KTsKIAotCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZyZGV2LT5tZGRldi0+cGVuZGluZ193cml0ZXMpKQotCQl3YWtlX3VwKCZyZGV2LT5tZGRldi0+c2Jfd2FpdCk7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJm1kZGV2LT5wZW5kaW5nX3dyaXRlcykpCisJCXdha2VfdXAoJm1kZGV2LT5zYl93YWl0KTsKIAliaW9fcHV0KGJpbyk7CiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgc3VwZXJfd3JpdHRlbl9iYXJyaWVyKHN0cnVjdCBiaW8gKmJpbywgdW5zaWduZWQgaW50IGJ5dGVzX2RvbmUsIGludCBlcnJvcikKK3sKKwlzdHJ1Y3QgYmlvICpiaW8yID0gYmlvLT5iaV9wcml2YXRlOworCW1ka19yZGV2X3QgKnJkZXYgPSBiaW8yLT5iaV9wcml2YXRlOworCW1kZGV2X3QgKm1kZGV2ID0gcmRldi0+bWRkZXY7CisJaWYgKGJpby0+Ymlfc2l6ZSkKKwkJcmV0dXJuIDE7CisKKwlpZiAoIXRlc3RfYml0KEJJT19VUFRPREFURSwgJmJpby0+YmlfZmxhZ3MpICYmCisJICAgIGVycm9yID09IC1FT1BOT1RTVVBQKSB7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJCS8qIGJhcnJpZXJzIGRvbid0IGFwcGVhciB0byBiZSBzdXBwb3J0ZWQgOi0oICovCisJCXNldF9iaXQoQmFycmllcnNOb3RzdXBwLCAmcmRldi0+ZmxhZ3MpOworCQltZGRldi0+YmFycmllcnNfd29yayA9IDA7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZtZGRldi0+d3JpdGVfbG9jaywgZmxhZ3MpOworCQliaW8yLT5iaV9uZXh0ID0gbWRkZXYtPmJpb2xpc3Q7CisJCW1kZGV2LT5iaW9saXN0ID0gYmlvMjsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWRkZXYtPndyaXRlX2xvY2ssIGZsYWdzKTsKKwkJd2FrZV91cCgmbWRkZXYtPnNiX3dhaXQpOworCQliaW9fcHV0KGJpbyk7CisJCXJldHVybiAwOworCX0KKwliaW9fcHV0KGJpbzIpOworCWJpby0+YmlfcHJpdmF0ZSA9IHJkZXY7CisJcmV0dXJuIHN1cGVyX3dyaXR0ZW4oYmlvLCBieXRlc19kb25lLCBlcnJvcik7Cit9CisKIHZvaWQgbWRfc3VwZXJfd3JpdGUobWRkZXZfdCAqbWRkZXYsIG1ka19yZGV2X3QgKnJkZXYsCiAJCSAgIHNlY3Rvcl90IHNlY3RvciwgaW50IHNpemUsIHN0cnVjdCBwYWdlICpwYWdlKQogewpAQCAtMzUwLDE2ICszODAsNTQgQEAKIAkgKiBhbmQgZGVjcmVtZW50IGl0IG9uIGNvbXBsZXRpb24sIHdha2luZyB1cCBzYl93YWl0CiAJICogaWYgemVybyBpcyByZWFjaGVkLgogCSAqIElmIGFuIGVycm9yIG9jY3VycmVkLCBjYWxsIG1kX2Vycm9yCisJICoKKwkgKiBBcyB3ZSBtaWdodCBuZWVkIHRvIHJlc3VibWl0IHRoZSByZXF1ZXN0IGlmIEJJT19SV19CQVJSSUVSCisJICogY2F1c2VzIEVOT1RTVVBQLCB3ZSBhbGxvY2F0ZSBhIHNwYXJlIGJpby4uLgogCSAqLwogCXN0cnVjdCBiaW8gKmJpbyA9IGJpb19hbGxvYyhHRlBfTk9JTywgMSk7CisJaW50IHJ3ID0gKDE8PEJJT19SVykgfCAoMTw8QklPX1JXX1NZTkMpOwogCiAJYmlvLT5iaV9iZGV2ID0gcmRldi0+YmRldjsKIAliaW8tPmJpX3NlY3RvciA9IHNlY3RvcjsKIAliaW9fYWRkX3BhZ2UoYmlvLCBwYWdlLCBzaXplLCAwKTsKIAliaW8tPmJpX3ByaXZhdGUgPSByZGV2OwogCWJpby0+YmlfZW5kX2lvID0gc3VwZXJfd3JpdHRlbjsKKwliaW8tPmJpX3J3ID0gcnc7CisKIAlhdG9taWNfaW5jKCZtZGRldi0+cGVuZGluZ193cml0ZXMpOwotCXN1Ym1pdF9iaW8oKDE8PEJJT19SVyl8KDE8PEJJT19SV19TWU5DKSwgYmlvKTsKKwlpZiAoIXRlc3RfYml0KEJhcnJpZXJzTm90c3VwcCwgJnJkZXYtPmZsYWdzKSkgeworCQlzdHJ1Y3QgYmlvICpyYmlvOworCQlydyB8PSAoMTw8QklPX1JXX0JBUlJJRVIpOworCQlyYmlvID0gYmlvX2Nsb25lKGJpbywgR0ZQX05PSU8pOworCQlyYmlvLT5iaV9wcml2YXRlID0gYmlvOworCQlyYmlvLT5iaV9lbmRfaW8gPSBzdXBlcl93cml0dGVuX2JhcnJpZXI7CisJCXN1Ym1pdF9iaW8ocncsIHJiaW8pOworCX0gZWxzZQorCQlzdWJtaXRfYmlvKHJ3LCBiaW8pOworfQorCit2b2lkIG1kX3N1cGVyX3dhaXQobWRkZXZfdCAqbWRkZXYpCit7CisJLyogd2FpdCBmb3IgYWxsIHN1cGVyYmxvY2sgd3JpdGVzIHRoYXQgd2VyZSBzY2hlZHVsZWQgdG8gY29tcGxldGUuCisJICogaWYgYW55IGhhZCB0byBiZSByZXRyaWVkIChkdWUgdG8gQkFSUklFUiBwcm9ibGVtcyksIHJldHJ5IHRoZW0KKwkgKi8KKwlERUZJTkVfV0FJVCh3cSk7CisJZm9yKDs7KSB7CisJCXByZXBhcmVfdG9fd2FpdCgmbWRkZXYtPnNiX3dhaXQsICZ3cSwgVEFTS19VTklOVEVSUlVQVElCTEUpOworCQlpZiAoYXRvbWljX3JlYWQoJm1kZGV2LT5wZW5kaW5nX3dyaXRlcyk9PTApCisJCQlicmVhazsKKwkJd2hpbGUgKG1kZGV2LT5iaW9saXN0KSB7CisJCQlzdHJ1Y3QgYmlvICpiaW87CisJCQlzcGluX2xvY2tfaXJxKCZtZGRldi0+d3JpdGVfbG9jayk7CisJCQliaW8gPSBtZGRldi0+YmlvbGlzdDsKKwkJCW1kZGV2LT5iaW9saXN0ID0gYmlvLT5iaV9uZXh0IDsKKwkJCWJpby0+YmlfbmV4dCA9IE5VTEw7CisJCQlzcGluX3VubG9ja19pcnEoJm1kZGV2LT53cml0ZV9sb2NrKTsKKwkJCXN1Ym1pdF9iaW8oYmlvLT5iaV9ydywgYmlvKTsKKwkJfQorCQlzY2hlZHVsZSgpOworCX0KKwlmaW5pc2hfd2FpdCgmbWRkZXYtPnNiX3dhaXQsICZ3cSk7CiB9CiAKIHN0YXRpYyBpbnQgYmlfY29tcGxldGUoc3RydWN0IGJpbyAqYmlvLCB1bnNpZ25lZCBpbnQgYnl0ZXNfZG9uZSwgaW50IGVycm9yKQpAQCAtNjEwLDcgKzY3OCw3IEBACiAJbWRwX3N1cGVyX3QgKnNiID0gKG1kcF9zdXBlcl90ICopcGFnZV9hZGRyZXNzKHJkZXYtPnNiX3BhZ2UpOwogCiAJcmRldi0+cmFpZF9kaXNrID0gLTE7Ci0JcmRldi0+aW5fc3luYyA9IDA7CisJcmRldi0+ZmxhZ3MgPSAwOwogCWlmIChtZGRldi0+cmFpZF9kaXNrcyA9PSAwKSB7CiAJCW1kZGV2LT5tYWpvcl92ZXJzaW9uID0gMDsKIAkJbWRkZXYtPm1pbm9yX3ZlcnNpb24gPSBzYi0+bWlub3JfdmVyc2lvbjsKQEAgLTY3MSwyMSArNzM5LDE5IEBACiAJCXJldHVybiAwOwogCiAJaWYgKG1kZGV2LT5sZXZlbCAhPSBMRVZFTF9NVUxUSVBBVEgpIHsKLQkJcmRldi0+ZmF1bHR5ID0gMDsKLQkJcmRldi0+ZmxhZ3MgPSAwOwogCQlkZXNjID0gc2ItPmRpc2tzICsgcmRldi0+ZGVzY19ucjsKIAogCQlpZiAoZGVzYy0+c3RhdGUgJiAoMTw8TURfRElTS19GQVVMVFkpKQotCQkJcmRldi0+ZmF1bHR5ID0gMTsKKwkJCXNldF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpOwogCQllbHNlIGlmIChkZXNjLT5zdGF0ZSAmICgxPDxNRF9ESVNLX1NZTkMpICYmCiAJCQkgZGVzYy0+cmFpZF9kaXNrIDwgbWRkZXYtPnJhaWRfZGlza3MpIHsKLQkJCXJkZXYtPmluX3N5bmMgPSAxOworCQkJc2V0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpOwogCQkJcmRldi0+cmFpZF9kaXNrID0gZGVzYy0+cmFpZF9kaXNrOwogCQl9CiAJCWlmIChkZXNjLT5zdGF0ZSAmICgxPDxNRF9ESVNLX1dSSVRFTU9TVExZKSkKIAkJCXNldF9iaXQoV3JpdGVNb3N0bHksICZyZGV2LT5mbGFncyk7CiAJfSBlbHNlIC8qIE1VTFRJUEFUSCBhcmUgYWx3YXlzIGluc3luYyAqLwotCQlyZGV2LT5pbl9zeW5jID0gMTsKKwkJc2V0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpOwogCXJldHVybiAwOwogfQogCkBAIC02OTksNiArNzY1LDcgQEAKIAltZGtfcmRldl90ICpyZGV2MjsKIAlpbnQgbmV4dF9zcGFyZSA9IG1kZGV2LT5yYWlkX2Rpc2tzOwogCisKIAkvKiBtYWtlIHJkZXYtPnNiIG1hdGNoIG1kZGV2IGRhdGEuLgogCSAqCiAJICogMS8gemVybyBvdXQgZGlza3MKQEAgLTc1OCwyMyArODI1LDI3IEBACiAJc2ItPmRpc2tzWzBdLnN0YXRlID0gKDE8PE1EX0RJU0tfUkVNT1ZFRCk7CiAJSVRFUkFURV9SREVWKG1kZGV2LHJkZXYyLHRtcCkgewogCQltZHBfZGlza190ICpkOwotCQlpZiAocmRldjItPnJhaWRfZGlzayA+PSAwICYmIHJkZXYyLT5pbl9zeW5jICYmICFyZGV2Mi0+ZmF1bHR5KQotCQkJcmRldjItPmRlc2NfbnIgPSByZGV2Mi0+cmFpZF9kaXNrOworCQlpbnQgZGVzY19ucjsKKwkJaWYgKHJkZXYyLT5yYWlkX2Rpc2sgPj0gMCAmJiB0ZXN0X2JpdChJbl9zeW5jLCAmcmRldjItPmZsYWdzKQorCQkgICAgJiYgIXRlc3RfYml0KEZhdWx0eSwgJnJkZXYyLT5mbGFncykpCisJCQlkZXNjX25yID0gcmRldjItPnJhaWRfZGlzazsKIAkJZWxzZQotCQkJcmRldjItPmRlc2NfbnIgPSBuZXh0X3NwYXJlKys7CisJCQlkZXNjX25yID0gbmV4dF9zcGFyZSsrOworCQlyZGV2Mi0+ZGVzY19uciA9IGRlc2NfbnI7CiAJCWQgPSAmc2ItPmRpc2tzW3JkZXYyLT5kZXNjX25yXTsKIAkJbnJfZGlza3MrKzsKIAkJZC0+bnVtYmVyID0gcmRldjItPmRlc2NfbnI7CiAJCWQtPm1ham9yID0gTUFKT1IocmRldjItPmJkZXYtPmJkX2Rldik7CiAJCWQtPm1pbm9yID0gTUlOT1IocmRldjItPmJkZXYtPmJkX2Rldik7Ci0JCWlmIChyZGV2Mi0+cmFpZF9kaXNrID49IDAgJiYgcmRldi0+aW5fc3luYyAmJiAhcmRldjItPmZhdWx0eSkKKwkJaWYgKHJkZXYyLT5yYWlkX2Rpc2sgPj0gMCAmJiB0ZXN0X2JpdChJbl9zeW5jLCAmcmRldjItPmZsYWdzKQorCQkgICAgJiYgIXRlc3RfYml0KEZhdWx0eSwgJnJkZXYyLT5mbGFncykpCiAJCQlkLT5yYWlkX2Rpc2sgPSByZGV2Mi0+cmFpZF9kaXNrOwogCQllbHNlCiAJCQlkLT5yYWlkX2Rpc2sgPSByZGV2Mi0+ZGVzY19ucjsgLyogY29tcGF0aWJpbGl0eSAqLwotCQlpZiAocmRldjItPmZhdWx0eSkgeworCQlpZiAodGVzdF9iaXQoRmF1bHR5LCAmcmRldjItPmZsYWdzKSkgewogCQkJZC0+c3RhdGUgPSAoMTw8TURfRElTS19GQVVMVFkpOwogCQkJZmFpbGVkKys7Ci0JCX0gZWxzZSBpZiAocmRldjItPmluX3N5bmMpIHsKKwkJfSBlbHNlIGlmICh0ZXN0X2JpdChJbl9zeW5jLCAmcmRldjItPmZsYWdzKSkgewogCQkJZC0+c3RhdGUgPSAoMTw8TURfRElTS19BQ1RJVkUpOwogCQkJZC0+c3RhdGUgfD0gKDE8PE1EX0RJU0tfU1lOQyk7CiAJCQlhY3RpdmUrKzsKQEAgLTc4Nyw3ICs4NTgsNiBAQAogCQlpZiAodGVzdF9iaXQoV3JpdGVNb3N0bHksICZyZGV2Mi0+ZmxhZ3MpKQogCQkJZC0+c3RhdGUgfD0gKDE8PE1EX0RJU0tfV1JJVEVNT1NUTFkpOwogCX0KLQkKIAkvKiBub3cgc2V0IHRoZSAicmVtb3ZlZCIgYW5kICJmYXVsdHkiIGJpdHMgb24gYW55IG1pc3NpbmcgZGV2aWNlcyAqLwogCWZvciAoaT0wIDsgaSA8IG1kZGV2LT5yYWlkX2Rpc2tzIDsgaSsrKSB7CiAJCW1kcF9kaXNrX3QgKmQgPSAmc2ItPmRpc2tzW2ldOwpAQCAtOTQ0LDcgKzEwMTQsNyBAQAogCXN0cnVjdCBtZHBfc3VwZXJibG9ja18xICpzYiA9IChzdHJ1Y3QgbWRwX3N1cGVyYmxvY2tfMSopcGFnZV9hZGRyZXNzKHJkZXYtPnNiX3BhZ2UpOwogCiAJcmRldi0+cmFpZF9kaXNrID0gLTE7Ci0JcmRldi0+aW5fc3luYyA9IDA7CisJcmRldi0+ZmxhZ3MgPSAwOwogCWlmIChtZGRldi0+cmFpZF9kaXNrcyA9PSAwKSB7CiAJCW1kZGV2LT5tYWpvcl92ZXJzaW9uID0gMTsKIAkJbWRkZXYtPnBhdGNoX3ZlcnNpb24gPSAwOwpAQCAtOTk2LDIyICsxMDY2LDE5IEBACiAJCXJvbGUgPSBsZTE2X3RvX2NwdShzYi0+ZGV2X3JvbGVzW3JkZXYtPmRlc2NfbnJdKTsKIAkJc3dpdGNoKHJvbGUpIHsKIAkJY2FzZSAweGZmZmY6IC8qIHNwYXJlICovCi0JCQlyZGV2LT5mYXVsdHkgPSAwOwogCQkJYnJlYWs7CiAJCWNhc2UgMHhmZmZlOiAvKiBmYXVsdHkgKi8KLQkJCXJkZXYtPmZhdWx0eSA9IDE7CisJCQlzZXRfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJcmRldi0+aW5fc3luYyA9IDE7Ci0JCQlyZGV2LT5mYXVsdHkgPSAwOworCQkJc2V0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpOwogCQkJcmRldi0+cmFpZF9kaXNrID0gcm9sZTsKIAkJCWJyZWFrOwogCQl9Ci0JCXJkZXYtPmZsYWdzID0gMDsKIAkJaWYgKHNiLT5kZXZmbGFncyAmIFdyaXRlTW9zdGx5MSkKIAkJCXNldF9iaXQoV3JpdGVNb3N0bHksICZyZGV2LT5mbGFncyk7CiAJfSBlbHNlIC8qIE1VTFRJUEFUSCBhcmUgYWx3YXlzIGluc3luYyAqLwotCQlyZGV2LT5pbl9zeW5jID0gMTsKKwkJc2V0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMDU1LDkgKzExMjIsOSBAQAogCQogCUlURVJBVEVfUkRFVihtZGRldixyZGV2Mix0bXApIHsKIAkJaSA9IHJkZXYyLT5kZXNjX25yOwotCQlpZiAocmRldjItPmZhdWx0eSkKKwkJaWYgKHRlc3RfYml0KEZhdWx0eSwgJnJkZXYyLT5mbGFncykpCiAJCQlzYi0+ZGV2X3JvbGVzW2ldID0gY3B1X3RvX2xlMTYoMHhmZmZlKTsKLQkJZWxzZSBpZiAocmRldjItPmluX3N5bmMpCisJCWVsc2UgaWYgKHRlc3RfYml0KEluX3N5bmMsICZyZGV2Mi0+ZmxhZ3MpKQogCQkJc2ItPmRldl9yb2xlc1tpXSA9IGNwdV90b19sZTE2KHJkZXYyLT5yYWlkX2Rpc2spOwogCQllbHNlCiAJCQlzYi0+ZGV2X3JvbGVzW2ldID0gY3B1X3RvX2xlMTYoMHhmZmZmKTsKQEAgLTExMTUsNiArMTE4Miw3IEBACiB7CiAJbWRrX3JkZXZfdCAqc2FtZV9wZGV2OwogCWNoYXIgYltCREVWTkFNRV9TSVpFXSwgYjJbQkRFVk5BTUVfU0laRV07CisJc3RydWN0IGtvYmplY3QgKmtvOwogCiAJaWYgKHJkZXYtPm1kZGV2KSB7CiAJCU1EX0JVRygpOwpAQCAtMTE0MywxMCArMTIxMSwyMiBAQAogCQlpZiAoZmluZF9yZGV2X25yKG1kZGV2LCByZGV2LT5kZXNjX25yKSkKIAkJCXJldHVybiAtRUJVU1k7CiAJfQorCWJkZXZuYW1lKHJkZXYtPmJkZXYsYik7CisJaWYgKGtvYmplY3Rfc2V0X25hbWUoJnJkZXYtPmtvYmosICJkZXYtJXMiLCBiKSA8IDApCisJCXJldHVybiAtRU5PTUVNOwogCQkJCiAJbGlzdF9hZGQoJnJkZXYtPnNhbWVfc2V0LCAmbWRkZXYtPmRpc2tzKTsKIAlyZGV2LT5tZGRldiA9IG1kZGV2OwotCXByaW50ayhLRVJOX0lORk8gIm1kOiBiaW5kPCVzPlxuIiwgYmRldm5hbWUocmRldi0+YmRldixiKSk7CisJcHJpbnRrKEtFUk5fSU5GTyAibWQ6IGJpbmQ8JXM+XG4iLCBiKTsKKworCXJkZXYtPmtvYmoucGFyZW50ID0gJm1kZGV2LT5rb2JqOworCWtvYmplY3RfYWRkKCZyZGV2LT5rb2JqKTsKKworCWlmIChyZGV2LT5iZGV2LT5iZF9wYXJ0KQorCQlrbyA9ICZyZGV2LT5iZGV2LT5iZF9wYXJ0LT5rb2JqOworCWVsc2UKKwkJa28gPSAmcmRldi0+YmRldi0+YmRfZGlzay0+a29iajsKKwlzeXNmc19jcmVhdGVfbGluaygmcmRldi0+a29iaiwga28sICJibG9jayIpOwogCXJldHVybiAwOwogfQogCkBAIC0xMTYwLDYgKzEyNDAsOCBAQAogCWxpc3RfZGVsX2luaXQoJnJkZXYtPnNhbWVfc2V0KTsKIAlwcmludGsoS0VSTl9JTkZPICJtZDogdW5iaW5kPCVzPlxuIiwgYmRldm5hbWUocmRldi0+YmRldixiKSk7CiAJcmRldi0+bWRkZXYgPSBOVUxMOworCXN5c2ZzX3JlbW92ZV9saW5rKCZyZGV2LT5rb2JqLCAiYmxvY2siKTsKKwlrb2JqZWN0X2RlbCgmcmRldi0+a29iaik7CiB9CiAKIC8qCkBAIC0xMjE1LDcgKzEyOTcsNyBAQAogCW1kX2F1dG9kZXRlY3RfZGV2KHJkZXYtPmJkZXYtPmJkX2Rldik7CiAjZW5kaWYKIAl1bmxvY2tfcmRldihyZGV2KTsKLQlrZnJlZShyZGV2KTsKKwlrb2JqZWN0X3B1dCgmcmRldi0+a29iaik7CiB9CiAKIHN0YXRpYyB2b2lkIGtpY2tfcmRldl9mcm9tX2FycmF5KG1ka19yZGV2X3QgKiByZGV2KQpAQCAtMTI4Nyw3ICsxMzY5LDggQEAKIAljaGFyIGJbQkRFVk5BTUVfU0laRV07CiAJcHJpbnRrKEtFUk5fSU5GTyAibWQ6IHJkZXYgJXMsIFNaOiUwOGxsdSBGOiVkIFM6JWQgRE46JXVcbiIsCiAJCWJkZXZuYW1lKHJkZXYtPmJkZXYsYiksICh1bnNpZ25lZCBsb25nIGxvbmcpcmRldi0+c2l6ZSwKLQkgICAgICAgCXJkZXYtPmZhdWx0eSwgcmRldi0+aW5fc3luYywgcmRldi0+ZGVzY19ucik7CisJICAgICAgICB0ZXN0X2JpdChGYXVsdHksICZyZGV2LT5mbGFncyksIHRlc3RfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncyksCisJICAgICAgICByZGV2LT5kZXNjX25yKTsKIAlpZiAocmRldi0+c2JfbG9hZGVkKSB7CiAJCXByaW50ayhLRVJOX0lORk8gIm1kOiByZGV2IHN1cGVyYmxvY2s6XG4iKTsKIAkJcHJpbnRfc2IoKG1kcF9zdXBlcl90KilwYWdlX2FkZHJlc3MocmRldi0+c2JfcGFnZSkpOwpAQCAtMTM0NCw3ICsxNDI3LDcgQEAKIAlpbnQgc3luY19yZXE7CiAKIHJlcGVhdDoKLQlzcGluX2xvY2soJm1kZGV2LT53cml0ZV9sb2NrKTsKKwlzcGluX2xvY2tfaXJxKCZtZGRldi0+d3JpdGVfbG9jayk7CiAJc3luY19yZXEgPSBtZGRldi0+aW5fc3luYzsKIAltZGRldi0+dXRpbWUgPSBnZXRfc2Vjb25kcygpOwogCW1kZGV2LT5ldmVudHMgKys7CkBAIC0xMzY3LDExICsxNDUwLDExIEBACiAJICovCiAJaWYgKCFtZGRldi0+cGVyc2lzdGVudCkgewogCQltZGRldi0+c2JfZGlydHkgPSAwOwotCQlzcGluX3VubG9jaygmbWRkZXYtPndyaXRlX2xvY2spOworCQlzcGluX3VubG9ja19pcnEoJm1kZGV2LT53cml0ZV9sb2NrKTsKIAkJd2FrZV91cCgmbWRkZXYtPnNiX3dhaXQpOwogCQlyZXR1cm47CiAJfQotCXNwaW5fdW5sb2NrKCZtZGRldi0+d3JpdGVfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxKCZtZGRldi0+d3JpdGVfbG9jayk7CiAKIAlkcHJpbnRrKEtFUk5fSU5GTyAKIAkJIm1kOiB1cGRhdGluZyAlcyBSQUlEIHN1cGVyYmxvY2sgb24gZGV2aWNlIChpbiBzeW5jICVkKVxuIiwKQEAgLTEzODEsMTEgKzE0NjQsMTEgQEAKIAlJVEVSQVRFX1JERVYobWRkZXYscmRldix0bXApIHsKIAkJY2hhciBiW0JERVZOQU1FX1NJWkVdOwogCQlkcHJpbnRrKEtFUk5fSU5GTyAibWQ6ICIpOwotCQlpZiAocmRldi0+ZmF1bHR5KQorCQlpZiAodGVzdF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpKQogCQkJZHByaW50aygiKHNraXBwaW5nIGZhdWx0eSAiKTsKIAogCQlkcHJpbnRrKCIlcyAiLCBiZGV2bmFtZShyZGV2LT5iZGV2LGIpKTsKLQkJaWYgKCFyZGV2LT5mYXVsdHkpIHsKKwkJaWYgKCF0ZXN0X2JpdChGYXVsdHksICZyZGV2LT5mbGFncykpIHsKIAkJCW1kX3N1cGVyX3dyaXRlKG1kZGV2LHJkZXYsCiAJCQkJICAgICAgIHJkZXYtPnNiX29mZnNldDw8MSwgcmRldi0+c2Jfc2l6ZSwKIAkJCQkgICAgICAgcmRldi0+c2JfcGFnZSk7CkBAIC0xMzk5LDIxICsxNDgyLDEwNiBAQAogCQkJLyogb25seSBuZWVkIHRvIHdyaXRlIG9uZSBzdXBlcmJsb2NrLi4uICovCiAJCQlicmVhazsKIAl9Ci0Jd2FpdF9ldmVudChtZGRldi0+c2Jfd2FpdCwgYXRvbWljX3JlYWQoJm1kZGV2LT5wZW5kaW5nX3dyaXRlcyk9PTApOworCW1kX3N1cGVyX3dhaXQobWRkZXYpOwogCS8qIGlmIHRoZXJlIHdhcyBhIGZhaWx1cmUsIHNiX2RpcnR5IHdhcyBzZXQgdG8gMSwgYW5kIHdlIHJlLXdyaXRlIHN1cGVyICovCiAKLQlzcGluX2xvY2soJm1kZGV2LT53cml0ZV9sb2NrKTsKKwlzcGluX2xvY2tfaXJxKCZtZGRldi0+d3JpdGVfbG9jayk7CiAJaWYgKG1kZGV2LT5pbl9zeW5jICE9IHN5bmNfcmVxfHwgbWRkZXYtPnNiX2RpcnR5ID09IDEpIHsKIAkJLyogaGF2ZSB0byB3cml0ZSBpdCBvdXQgYWdhaW4gKi8KLQkJc3Bpbl91bmxvY2soJm1kZGV2LT53cml0ZV9sb2NrKTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZtZGRldi0+d3JpdGVfbG9jayk7CiAJCWdvdG8gcmVwZWF0OwogCX0KIAltZGRldi0+c2JfZGlydHkgPSAwOwotCXNwaW5fdW5sb2NrKCZtZGRldi0+d3JpdGVfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxKCZtZGRldi0+d3JpdGVfbG9jayk7CiAJd2FrZV91cCgmbWRkZXYtPnNiX3dhaXQpOwogCiB9CiAKK3N0cnVjdCByZGV2X3N5c2ZzX2VudHJ5IHsKKwlzdHJ1Y3QgYXR0cmlidXRlIGF0dHI7CisJc3NpemVfdCAoKnNob3cpKG1ka19yZGV2X3QgKiwgY2hhciAqKTsKKwlzc2l6ZV90ICgqc3RvcmUpKG1ka19yZGV2X3QgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOworfTsKKworc3RhdGljIHNzaXplX3QKK3N0YXRlX3Nob3cobWRrX3JkZXZfdCAqcmRldiwgY2hhciAqcGFnZSkKK3sKKwljaGFyICpzZXAgPSAiIjsKKwlpbnQgbGVuPTA7CisKKwlpZiAodGVzdF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpKSB7CisJCWxlbis9IHNwcmludGYocGFnZStsZW4sICIlc2ZhdWx0eSIsc2VwKTsKKwkJc2VwID0gIiwiOworCX0KKwlpZiAodGVzdF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKSkgeworCQlsZW4gKz0gc3ByaW50ZihwYWdlK2xlbiwgIiVzaW5fc3luYyIsc2VwKTsKKwkJc2VwID0gIiwiOworCX0KKwlpZiAoIXRlc3RfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKSAmJgorCSAgICAhdGVzdF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKSkgeworCQlsZW4gKz0gc3ByaW50ZihwYWdlK2xlbiwgIiVzc3BhcmUiLCBzZXApOworCQlzZXAgPSAiLCI7CisJfQorCXJldHVybiBsZW4rc3ByaW50ZihwYWdlK2xlbiwgIlxuIik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmRldl9zeXNmc19lbnRyeQorcmRldl9zdGF0ZSA9IF9fQVRUUl9STyhzdGF0ZSk7CisKK3N0YXRpYyBzc2l6ZV90CitzdXBlcl9zaG93KG1ka19yZGV2X3QgKnJkZXYsIGNoYXIgKnBhZ2UpCit7CisJaWYgKHJkZXYtPnNiX2xvYWRlZCAmJiByZGV2LT5zYl9zaXplKSB7CisJCW1lbWNweShwYWdlLCBwYWdlX2FkZHJlc3MocmRldi0+c2JfcGFnZSksIHJkZXYtPnNiX3NpemUpOworCQlyZXR1cm4gcmRldi0+c2Jfc2l6ZTsKKwl9IGVsc2UKKwkJcmV0dXJuIDA7Cit9CitzdGF0aWMgc3RydWN0IHJkZXZfc3lzZnNfZW50cnkgcmRldl9zdXBlciA9IF9fQVRUUl9STyhzdXBlcik7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpyZGV2X2RlZmF1bHRfYXR0cnNbXSA9IHsKKwkmcmRldl9zdGF0ZS5hdHRyLAorCSZyZGV2X3N1cGVyLmF0dHIsCisJTlVMTCwKK307CitzdGF0aWMgc3NpemVfdAorcmRldl9hdHRyX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKnBhZ2UpCit7CisJc3RydWN0IHJkZXZfc3lzZnNfZW50cnkgKmVudHJ5ID0gY29udGFpbmVyX29mKGF0dHIsIHN0cnVjdCByZGV2X3N5c2ZzX2VudHJ5LCBhdHRyKTsKKwltZGtfcmRldl90ICpyZGV2ID0gY29udGFpbmVyX29mKGtvYmosIG1ka19yZGV2X3QsIGtvYmopOworCisJaWYgKCFlbnRyeS0+c2hvdykKKwkJcmV0dXJuIC1FSU87CisJcmV0dXJuIGVudHJ5LT5zaG93KHJkZXYsIHBhZ2UpOworfQorCitzdGF0aWMgc3NpemVfdAorcmRldl9hdHRyX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLAorCSAgICAgIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBsZW5ndGgpCit7CisJc3RydWN0IHJkZXZfc3lzZnNfZW50cnkgKmVudHJ5ID0gY29udGFpbmVyX29mKGF0dHIsIHN0cnVjdCByZGV2X3N5c2ZzX2VudHJ5LCBhdHRyKTsKKwltZGtfcmRldl90ICpyZGV2ID0gY29udGFpbmVyX29mKGtvYmosIG1ka19yZGV2X3QsIGtvYmopOworCisJaWYgKCFlbnRyeS0+c3RvcmUpCisJCXJldHVybiAtRUlPOworCXJldHVybiBlbnRyeS0+c3RvcmUocmRldiwgcGFnZSwgbGVuZ3RoKTsKK30KKworc3RhdGljIHZvaWQgcmRldl9mcmVlKHN0cnVjdCBrb2JqZWN0ICprbykKK3sKKwltZGtfcmRldl90ICpyZGV2ID0gY29udGFpbmVyX29mKGtvLCBtZGtfcmRldl90LCBrb2JqKTsKKwlrZnJlZShyZGV2KTsKK30KK3N0YXRpYyBzdHJ1Y3Qgc3lzZnNfb3BzIHJkZXZfc3lzZnNfb3BzID0geworCS5zaG93CQk9IHJkZXZfYXR0cl9zaG93LAorCS5zdG9yZQkJPSByZGV2X2F0dHJfc3RvcmUsCit9Oworc3RhdGljIHN0cnVjdCBrb2JqX3R5cGUgcmRldl9rdHlwZSA9IHsKKwkucmVsZWFzZQk9IHJkZXZfZnJlZSwKKwkuc3lzZnNfb3BzCT0gJnJkZXZfc3lzZnNfb3BzLAorCS5kZWZhdWx0X2F0dHJzCT0gcmRldl9kZWZhdWx0X2F0dHJzLAorfTsKKwogLyoKICAqIEltcG9ydCBhIGRldmljZS4gSWYgJ3N1cGVyX2Zvcm1hdCcgPj0gMCwgdGhlbiBzYW5pdHkgY2hlY2sgdGhlIHN1cGVyYmxvY2sKICAqCkBAIC0xNDQ1LDExICsxNjEzLDE1IEBACiAJaWYgKGVycikKIAkJZ290byBhYm9ydF9mcmVlOwogCisJcmRldi0+a29iai5wYXJlbnQgPSBOVUxMOworCXJkZXYtPmtvYmoua3R5cGUgPSAmcmRldl9rdHlwZTsKKwlrb2JqZWN0X2luaXQoJnJkZXYtPmtvYmopOworCiAJcmRldi0+ZGVzY19uciA9IC0xOwotCXJkZXYtPmZhdWx0eSA9IDA7Ci0JcmRldi0+aW5fc3luYyA9IDA7CisJcmRldi0+ZmxhZ3MgPSAwOwogCXJkZXYtPmRhdGFfb2Zmc2V0ID0gMDsKIAlhdG9taWNfc2V0KCZyZGV2LT5ucl9wZW5kaW5nLCAwKTsKKwlhdG9taWNfc2V0KCZyZGV2LT5yZWFkX2Vycm9ycywgMCk7CiAKIAlzaXplID0gcmRldi0+YmRldi0+YmRfaW5vZGUtPmlfc2l6ZSA+PiBCTE9DS19TSVpFX0JJVFM7CiAJaWYgKCFzaXplKSB7CkBAIC0xNTM3LDcgKzE3MDksNyBAQAogCQlpZiAobWRkZXYtPmxldmVsID09IExFVkVMX01VTFRJUEFUSCkgewogCQkJcmRldi0+ZGVzY19uciA9IGkrKzsKIAkJCXJkZXYtPnJhaWRfZGlzayA9IHJkZXYtPmRlc2NfbnI7Ci0JCQlyZGV2LT5pbl9zeW5jID0gMTsKKwkJCXNldF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKTsKIAkJfQogCX0KIApAQCAtMTU1MSw2ICsxNzIzLDE2MiBAQAogCiB9CiAKK3N0YXRpYyBzc2l6ZV90CitsZXZlbF9zaG93KG1kZGV2X3QgKm1kZGV2LCBjaGFyICpwYWdlKQoreworCW1ka19wZXJzb25hbGl0eV90ICpwID0gbWRkZXYtPnBlcnM7CisJaWYgKHAgPT0gTlVMTCAmJiBtZGRldi0+cmFpZF9kaXNrcyA9PSAwKQorCQlyZXR1cm4gMDsKKwlpZiAobWRkZXYtPmxldmVsID49IDApCisJCXJldHVybiBzcHJpbnRmKHBhZ2UsICJSQUlELSVkXG4iLCBtZGRldi0+bGV2ZWwpOworCWVsc2UKKwkJcmV0dXJuIHNwcmludGYocGFnZSwgIiVzXG4iLCBwLT5uYW1lKTsKK30KKworc3RhdGljIHN0cnVjdCBtZF9zeXNmc19lbnRyeSBtZF9sZXZlbCA9IF9fQVRUUl9STyhsZXZlbCk7CisKK3N0YXRpYyBzc2l6ZV90CityYWlkX2Rpc2tzX3Nob3cobWRkZXZfdCAqbWRkZXYsIGNoYXIgKnBhZ2UpCit7CisJaWYgKG1kZGV2LT5yYWlkX2Rpc2tzID09IDApCisJCXJldHVybiAwOworCXJldHVybiBzcHJpbnRmKHBhZ2UsICIlZFxuIiwgbWRkZXYtPnJhaWRfZGlza3MpOworfQorCitzdGF0aWMgc3RydWN0IG1kX3N5c2ZzX2VudHJ5IG1kX3JhaWRfZGlza3MgPSBfX0FUVFJfUk8ocmFpZF9kaXNrcyk7CisKK3N0YXRpYyBzc2l6ZV90CithY3Rpb25fc2hvdyhtZGRldl90ICptZGRldiwgY2hhciAqcGFnZSkKK3sKKwljaGFyICp0eXBlID0gImlkbGUiOworCWlmICh0ZXN0X2JpdChNRF9SRUNPVkVSWV9SVU5OSU5HLCAmbWRkZXYtPnJlY292ZXJ5KSB8fAorCSAgICB0ZXN0X2JpdChNRF9SRUNPVkVSWV9ORUVERUQsICZtZGRldi0+cmVjb3ZlcnkpKSB7CisJCWlmICh0ZXN0X2JpdChNRF9SRUNPVkVSWV9TWU5DLCAmbWRkZXYtPnJlY292ZXJ5KSkgeworCQkJaWYgKCF0ZXN0X2JpdChNRF9SRUNPVkVSWV9SRVFVRVNURUQsICZtZGRldi0+cmVjb3ZlcnkpKQorCQkJCXR5cGUgPSAicmVzeW5jIjsKKwkJCWVsc2UgaWYgKHRlc3RfYml0KE1EX1JFQ09WRVJZX0NIRUNLLCAmbWRkZXYtPnJlY292ZXJ5KSkKKwkJCQl0eXBlID0gImNoZWNrIjsKKwkJCWVsc2UKKwkJCQl0eXBlID0gInJlcGFpciI7CisJCX0gZWxzZQorCQkJdHlwZSA9ICJyZWNvdmVyIjsKKwl9CisJcmV0dXJuIHNwcmludGYocGFnZSwgIiVzXG4iLCB0eXBlKTsKK30KKworc3RhdGljIHNzaXplX3QKK2FjdGlvbl9zdG9yZShtZGRldl90ICptZGRldiwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbikKK3sKKwlpZiAoIW1kZGV2LT5wZXJzIHx8ICFtZGRldi0+cGVycy0+c3luY19yZXF1ZXN0KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChzdHJjbXAocGFnZSwgImlkbGUiKT09MCB8fCBzdHJjbXAocGFnZSwgImlkbGVcbiIpPT0wKSB7CisJCWlmIChtZGRldi0+c3luY190aHJlYWQpIHsKKwkJCXNldF9iaXQoTURfUkVDT1ZFUllfSU5UUiwgJm1kZGV2LT5yZWNvdmVyeSk7CisJCQltZF91bnJlZ2lzdGVyX3RocmVhZChtZGRldi0+c3luY190aHJlYWQpOworCQkJbWRkZXYtPnN5bmNfdGhyZWFkID0gTlVMTDsKKwkJCW1kZGV2LT5yZWNvdmVyeSA9IDA7CisJCX0KKwkJcmV0dXJuIGxlbjsKKwl9CisKKwlpZiAodGVzdF9iaXQoTURfUkVDT1ZFUllfUlVOTklORywgJm1kZGV2LT5yZWNvdmVyeSkgfHwKKwkgICAgdGVzdF9iaXQoTURfUkVDT1ZFUllfTkVFREVELCAmbWRkZXYtPnJlY292ZXJ5KSkKKwkJcmV0dXJuIC1FQlVTWTsKKwlpZiAoc3RyY21wKHBhZ2UsICJyZXN5bmMiKT09MCB8fCBzdHJjbXAocGFnZSwgInJlc3luY1xuIik9PTAgfHwKKwkgICAgc3RyY21wKHBhZ2UsICJyZWNvdmVyIik9PTAgfHwgc3RyY21wKHBhZ2UsICJyZWNvdmVyXG4iKT09MCkKKwkJc2V0X2JpdChNRF9SRUNPVkVSWV9ORUVERUQsICZtZGRldi0+cmVjb3ZlcnkpOworCWVsc2UgeworCQlpZiAoc3RyY21wKHBhZ2UsICJjaGVjayIpPT0wIHx8IHN0cmNtcChwYWdlLCAiY2hlY2tcbiIpPT0wKQorCQkJc2V0X2JpdChNRF9SRUNPVkVSWV9DSEVDSywgJm1kZGV2LT5yZWNvdmVyeSk7CisJCWVsc2UgaWYgKHN0cmNtcChwYWdlLCAicmVwYWlyIikhPTAgJiYgc3RyY21wKHBhZ2UsICJyZXBhaXJcbiIpIT0wKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXNldF9iaXQoTURfUkVDT1ZFUllfUkVRVUVTVEVELCAmbWRkZXYtPnJlY292ZXJ5KTsKKwkJc2V0X2JpdChNRF9SRUNPVkVSWV9TWU5DLCAmbWRkZXYtPnJlY292ZXJ5KTsKKwkJc2V0X2JpdChNRF9SRUNPVkVSWV9ORUVERUQsICZtZGRldi0+cmVjb3ZlcnkpOworCX0KKwltZF93YWtldXBfdGhyZWFkKG1kZGV2LT50aHJlYWQpOworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBzc2l6ZV90CittaXNtYXRjaF9jbnRfc2hvdyhtZGRldl90ICptZGRldiwgY2hhciAqcGFnZSkKK3sKKwlyZXR1cm4gc3ByaW50ZihwYWdlLCAiJWxsdVxuIiwKKwkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIG1kZGV2LT5yZXN5bmNfbWlzbWF0Y2hlcyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbWRfc3lzZnNfZW50cnkKK21kX3NjYW5fbW9kZSA9IF9fQVRUUihzeW5jX2FjdGlvbiwgU19JUlVHT3xTX0lXVVNSLCBhY3Rpb25fc2hvdywgYWN0aW9uX3N0b3JlKTsKKworCitzdGF0aWMgc3RydWN0IG1kX3N5c2ZzX2VudHJ5CittZF9taXNtYXRjaGVzID0gX19BVFRSX1JPKG1pc21hdGNoX2NudCk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICptZF9kZWZhdWx0X2F0dHJzW10gPSB7CisJJm1kX2xldmVsLmF0dHIsCisJJm1kX3JhaWRfZGlza3MuYXR0ciwKKwlOVUxMLAorfTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKm1kX3JlZHVuZGFuY3lfYXR0cnNbXSA9IHsKKwkmbWRfc2Nhbl9tb2RlLmF0dHIsCisJJm1kX21pc21hdGNoZXMuYXR0ciwKKwlOVUxMLAorfTsKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIG1kX3JlZHVuZGFuY3lfZ3JvdXAgPSB7CisJLm5hbWUgPSBOVUxMLAorCS5hdHRycyA9IG1kX3JlZHVuZGFuY3lfYXR0cnMsCit9OworCisKK3N0YXRpYyBzc2l6ZV90CittZF9hdHRyX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKnBhZ2UpCit7CisJc3RydWN0IG1kX3N5c2ZzX2VudHJ5ICplbnRyeSA9IGNvbnRhaW5lcl9vZihhdHRyLCBzdHJ1Y3QgbWRfc3lzZnNfZW50cnksIGF0dHIpOworCW1kZGV2X3QgKm1kZGV2ID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBtZGRldl9zLCBrb2JqKTsKKwlzc2l6ZV90IHJ2OworCisJaWYgKCFlbnRyeS0+c2hvdykKKwkJcmV0dXJuIC1FSU87CisJbWRkZXZfbG9jayhtZGRldik7CisJcnYgPSBlbnRyeS0+c2hvdyhtZGRldiwgcGFnZSk7CisJbWRkZXZfdW5sb2NrKG1kZGV2KTsKKwlyZXR1cm4gcnY7Cit9CisKK3N0YXRpYyBzc2l6ZV90CittZF9hdHRyX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLAorCSAgICAgIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBsZW5ndGgpCit7CisJc3RydWN0IG1kX3N5c2ZzX2VudHJ5ICplbnRyeSA9IGNvbnRhaW5lcl9vZihhdHRyLCBzdHJ1Y3QgbWRfc3lzZnNfZW50cnksIGF0dHIpOworCW1kZGV2X3QgKm1kZGV2ID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBtZGRldl9zLCBrb2JqKTsKKwlzc2l6ZV90IHJ2OworCisJaWYgKCFlbnRyeS0+c3RvcmUpCisJCXJldHVybiAtRUlPOworCW1kZGV2X2xvY2sobWRkZXYpOworCXJ2ID0gZW50cnktPnN0b3JlKG1kZGV2LCBwYWdlLCBsZW5ndGgpOworCW1kZGV2X3VubG9jayhtZGRldik7CisJcmV0dXJuIHJ2OworfQorCitzdGF0aWMgdm9pZCBtZF9mcmVlKHN0cnVjdCBrb2JqZWN0ICprbykKK3sKKwltZGRldl90ICptZGRldiA9IGNvbnRhaW5lcl9vZihrbywgbWRkZXZfdCwga29iaik7CisJa2ZyZWUobWRkZXYpOworfQorCitzdGF0aWMgc3RydWN0IHN5c2ZzX29wcyBtZF9zeXNmc19vcHMgPSB7CisJLnNob3cJPSBtZF9hdHRyX3Nob3csCisJLnN0b3JlCT0gbWRfYXR0cl9zdG9yZSwKK307CitzdGF0aWMgc3RydWN0IGtvYmpfdHlwZSBtZF9rdHlwZSA9IHsKKwkucmVsZWFzZQk9IG1kX2ZyZWUsCisJLnN5c2ZzX29wcwk9ICZtZF9zeXNmc19vcHMsCisJLmRlZmF1bHRfYXR0cnMJPSBtZF9kZWZhdWx0X2F0dHJzLAorfTsKKwogaW50IG1kcF9tYWpvciA9IDA7CiAKIHN0YXRpYyBzdHJ1Y3Qga29iamVjdCAqbWRfcHJvYmUoZGV2X3QgZGV2LCBpbnQgKnBhcnQsIHZvaWQgKmRhdGEpCkBAIC0xNTkyLDYgKzE5MjAsMTEgQEAKIAlhZGRfZGlzayhkaXNrKTsKIAltZGRldi0+Z2VuZGlzayA9IGRpc2s7CiAJdXAoJmRpc2tzX3NlbSk7CisJbWRkZXYtPmtvYmoucGFyZW50ID0gJmRpc2stPmtvYmo7CisJbWRkZXYtPmtvYmoua19uYW1lID0gTlVMTDsKKwlzbnByaW50ZihtZGRldi0+a29iai5uYW1lLCBLT0JKX05BTUVfTEVOLCAiJXMiLCAibWQiKTsKKwltZGRldi0+a29iai5rdHlwZSA9ICZtZF9rdHlwZTsKKwlrb2JqZWN0X3JlZ2lzdGVyKCZtZGRldi0+a29iaik7CiAJcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTE2NjMsNyArMTk5Niw3IEBACiAKIAkJLyogZGV2aWNlcyBtdXN0IGhhdmUgbWluaW11bSBzaXplIG9mIG9uZSBjaHVuayAqLwogCQlJVEVSQVRFX1JERVYobWRkZXYscmRldix0bXApIHsKLQkJCWlmIChyZGV2LT5mYXVsdHkpCisJCQlpZiAodGVzdF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpKQogCQkJCWNvbnRpbnVlOwogCQkJaWYgKHJkZXYtPnNpemUgPCBjaHVua19zaXplIC8gMTAyNCkgewogCQkJCXByaW50ayhLRVJOX1dBUk5JTkcKQEAgLTE2OTEsNyArMjAyNCw3IEBACiAJICogQWxzbyBmaW5kIGxhcmdlc3QgaGFyZHNlY3RvciBzaXplCiAJICovCiAJSVRFUkFURV9SREVWKG1kZGV2LHJkZXYsdG1wKSB7Ci0JCWlmIChyZGV2LT5mYXVsdHkpCisJCWlmICh0ZXN0X2JpdChGYXVsdHksICZyZGV2LT5mbGFncykpCiAJCQljb250aW51ZTsKIAkJc3luY19ibG9ja2RldihyZGV2LT5iZGV2KTsKIAkJaW52YWxpZGF0ZV9iZGV2KHJkZXYtPmJkZXYsIDApOwpAQCAtMTcxNSw2ICsyMDQ4LDEwIEBACiAKIAltZGRldi0+cmVjb3ZlcnkgPSAwOwogCW1kZGV2LT5yZXN5bmNfbWF4X3NlY3RvcnMgPSBtZGRldi0+c2l6ZSA8PCAxOyAvKiBtYXkgYmUgb3Zlci1yaWRkZW4gYnkgcGVyc29uYWxpdHkgKi8KKwltZGRldi0+YmFycmllcnNfd29yayA9IDE7CisKKwlpZiAoc3RhcnRfcmVhZG9ubHkpCisJCW1kZGV2LT5ybyA9IDI7IC8qIHJlYWQtb25seSwgYnV0IHN3aXRjaCBvbiBmaXJzdCB3cml0ZSAqLwogCiAJLyogYmVmb3JlIHdlIHN0YXJ0IHRoZSBhcnJheSBydW5uaW5nLCBpbml0aWFsaXNlIHRoZSBiaXRtYXAgKi8KIAllcnIgPSBiaXRtYXBfY3JlYXRlKG1kZGV2KTsKQEAgLTE3MzAsMTIgKzIwNjcsMjQgQEAKIAkJYml0bWFwX2Rlc3Ryb3kobWRkZXYpOwogCQlyZXR1cm4gZXJyOwogCX0KKwlpZiAobWRkZXYtPnBlcnMtPnN5bmNfcmVxdWVzdCkKKwkJc3lzZnNfY3JlYXRlX2dyb3VwKCZtZGRldi0+a29iaiwgJm1kX3JlZHVuZGFuY3lfZ3JvdXApOworCWVsc2UgaWYgKG1kZGV2LT5ybyA9PSAyKSAvKiBhdXRvLXJlYWRvbmx5IG5vdCBtZWFuaW5nZnVsICovCisJCW1kZGV2LT5ybyA9IDA7CisKICAJYXRvbWljX3NldCgmbWRkZXYtPndyaXRlc19wZW5kaW5nLDApOwogCW1kZGV2LT5zYWZlbW9kZSA9IDA7CiAJbWRkZXYtPnNhZmVtb2RlX3RpbWVyLmZ1bmN0aW9uID0gbWRfc2FmZW1vZGVfdGltZW91dDsKIAltZGRldi0+c2FmZW1vZGVfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBtZGRldjsKIAltZGRldi0+c2FmZW1vZGVfZGVsYXkgPSAoMjAgKiBIWikvMTAwMCArMTsgLyogMjAgbXNlYyBkZWxheSAqLwogCW1kZGV2LT5pbl9zeW5jID0gMTsKKworCUlURVJBVEVfUkRFVihtZGRldixyZGV2LHRtcCkKKwkJaWYgKHJkZXYtPnJhaWRfZGlzayA+PSAwKSB7CisJCQljaGFyIG5tWzIwXTsKKwkJCXNwcmludGYobm0sICJyZCVkIiwgcmRldi0+cmFpZF9kaXNrKTsKKwkJCXN5c2ZzX2NyZWF0ZV9saW5rKCZtZGRldi0+a29iaiwgJnJkZXYtPmtvYmosIG5tKTsKKwkJfQogCQogCXNldF9iaXQoTURfUkVDT1ZFUllfTkVFREVELCAmbWRkZXYtPnJlY292ZXJ5KTsKIAltZF93YWtldXBfdGhyZWFkKG1kZGV2LT50aHJlYWQpOwpAQCAtMTgyMSwxNiArMjE3MCwxOSBAQAogCiAJCWlmIChybykgewogCQkJZXJyICA9IC1FTlhJTzsKLQkJCWlmIChtZGRldi0+cm8pCisJCQlpZiAobWRkZXYtPnJvPT0xKQogCQkJCWdvdG8gb3V0OwogCQkJbWRkZXYtPnJvID0gMTsKIAkJfSBlbHNlIHsKIAkJCWJpdG1hcF9mbHVzaChtZGRldik7Ci0JCQl3YWl0X2V2ZW50KG1kZGV2LT5zYl93YWl0LCBhdG9taWNfcmVhZCgmbWRkZXYtPnBlbmRpbmdfd3JpdGVzKT09MCk7CisJCQltZF9zdXBlcl93YWl0KG1kZGV2KTsKIAkJCWlmIChtZGRldi0+cm8pCiAJCQkJc2V0X2Rpc2tfcm8oZGlzaywgMCk7CiAJCQlibGtfcXVldWVfbWFrZV9yZXF1ZXN0KG1kZGV2LT5xdWV1ZSwgbWRfZmFpbF9yZXF1ZXN0KTsKIAkJCW1kZGV2LT5wZXJzLT5zdG9wKG1kZGV2KTsKKwkJCWlmIChtZGRldi0+cGVycy0+c3luY19yZXF1ZXN0KQorCQkJCXN5c2ZzX3JlbW92ZV9ncm91cCgmbWRkZXYtPmtvYmosICZtZF9yZWR1bmRhbmN5X2dyb3VwKTsKKwogCQkJbW9kdWxlX3B1dChtZGRldi0+cGVycy0+b3duZXIpOwogCQkJbWRkZXYtPnBlcnMgPSBOVUxMOwogCQkJaWYgKG1kZGV2LT5ybykKQEAgLTE4NTcsOSArMjIwOSwxOCBAQAogCSAqIEZyZWUgcmVzb3VyY2VzIGlmIGZpbmFsIHN0b3AKIAkgKi8KIAlpZiAoIXJvKSB7CisJCW1ka19yZGV2X3QgKnJkZXY7CisJCXN0cnVjdCBsaXN0X2hlYWQgKnRtcDsKIAkJc3RydWN0IGdlbmRpc2sgKmRpc2s7CiAJCXByaW50ayhLRVJOX0lORk8gIm1kOiAlcyBzdG9wcGVkLlxuIiwgbWRuYW1lKG1kZGV2KSk7CiAKKwkJSVRFUkFURV9SREVWKG1kZGV2LHJkZXYsdG1wKQorCQkJaWYgKHJkZXYtPnJhaWRfZGlzayA+PSAwKSB7CisJCQkJY2hhciBubVsyMF07CisJCQkJc3ByaW50ZihubSwgInJkJWQiLCByZGV2LT5yYWlkX2Rpc2spOworCQkJCXN5c2ZzX3JlbW92ZV9saW5rKCZtZGRldi0+a29iaiwgbm0pOworCQkJfQorCiAJCWV4cG9ydF9hcnJheShtZGRldik7CiAKIAkJbWRkZXYtPmFycmF5X3NpemUgPSAwOwpAQCAtMjAxMiw3ICsyMzczLDcgQEAKIAkJcmV0dXJuIGVycjsKIAl9CiAKLQlpZiAoc3RhcnRfcmRldi0+ZmF1bHR5KSB7CisJaWYgKHRlc3RfYml0KEZhdWx0eSwgJnN0YXJ0X3JkZXYtPmZsYWdzKSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HIAogCQkJIm1kOiBjYW4gbm90IGF1dG9zdGFydCBiYXNlZCBvbiBmYXVsdHkgJXMhXG4iLAogCQkJYmRldm5hbWUoc3RhcnRfcmRldi0+YmRldixiKSk7CkBAIC0yMDcxLDExICsyNDMyLDExIEBACiAJbnI9d29ya2luZz1hY3RpdmU9ZmFpbGVkPXNwYXJlPTA7CiAJSVRFUkFURV9SREVWKG1kZGV2LHJkZXYsdG1wKSB7CiAJCW5yKys7Ci0JCWlmIChyZGV2LT5mYXVsdHkpCisJCWlmICh0ZXN0X2JpdChGYXVsdHksICZyZGV2LT5mbGFncykpCiAJCQlmYWlsZWQrKzsKIAkJZWxzZSB7CiAJCQl3b3JraW5nKys7Ci0JCQlpZiAocmRldi0+aW5fc3luYykKKwkJCWlmICh0ZXN0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpKQogCQkJCWFjdGl2ZSsrOwkKIAkJCWVsc2UKIAkJCQlzcGFyZSsrOwpAQCAtMjE2Niw5ICsyNTI3LDkgQEAKIAkJaW5mby5taW5vciA9IE1JTk9SKHJkZXYtPmJkZXYtPmJkX2Rldik7CiAJCWluZm8ucmFpZF9kaXNrID0gcmRldi0+cmFpZF9kaXNrOwogCQlpbmZvLnN0YXRlID0gMDsKLQkJaWYgKHJkZXYtPmZhdWx0eSkKKwkJaWYgKHRlc3RfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKSkKIAkJCWluZm8uc3RhdGUgfD0gKDE8PE1EX0RJU0tfRkFVTFRZKTsKLQkJZWxzZSBpZiAocmRldi0+aW5fc3luYykgeworCQllbHNlIGlmICh0ZXN0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpKSB7CiAJCQlpbmZvLnN0YXRlIHw9ICgxPDxNRF9ESVNLX0FDVElWRSk7CiAJCQlpbmZvLnN0YXRlIHw9ICgxPDxNRF9ESVNLX1NZTkMpOwogCQl9CkBAIC0yMjYxLDcgKzI2MjIsNyBAQAogCQkJCXZhbGlkYXRlX3N1cGVyKG1kZGV2LCByZGV2KTsKIAkJcmRldi0+c2F2ZWRfcmFpZF9kaXNrID0gcmRldi0+cmFpZF9kaXNrOwogCi0JCXJkZXYtPmluX3N5bmMgPSAwOyAvKiBqdXN0IHRvIGJlIHN1cmUgKi8KKwkJY2xlYXJfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncyk7IC8qIGp1c3QgdG8gYmUgc3VyZSAqLwogCQlpZiAoaW5mby0+c3RhdGUgJiAoMTw8TURfRElTS19XUklURU1PU1RMWSkpCiAJCQlzZXRfYml0KFdyaXRlTW9zdGx5LCAmcmRldi0+ZmxhZ3MpOwogCkBAIC0yMjk5LDExICsyNjYwLDExIEBACiAJCWVsc2UKIAkJCXJkZXYtPnJhaWRfZGlzayA9IC0xOwogCi0JCXJkZXYtPmZhdWx0eSA9IDA7CisJCXJkZXYtPmZsYWdzID0gMDsKKwogCQlpZiAocmRldi0+cmFpZF9kaXNrIDwgbWRkZXYtPnJhaWRfZGlza3MpCi0JCQlyZGV2LT5pbl9zeW5jID0gKGluZm8tPnN0YXRlICYgKDE8PE1EX0RJU0tfU1lOQykpOwotCQllbHNlCi0JCQlyZGV2LT5pbl9zeW5jID0gMDsKKwkJCWlmIChpbmZvLT5zdGF0ZSAmICgxPDxNRF9ESVNLX1NZTkMpKQorCQkJCXNldF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKTsKIAogCQlpZiAoaW5mby0+c3RhdGUgJiAoMTw8TURfRElTS19XUklURU1PU1RMWSkpCiAJCQlzZXRfYml0KFdyaXRlTW9zdGx5LCAmcmRldi0+ZmxhZ3MpOwpAQCAtMjQwMiwxNCArMjc2MywxNCBAQAogCQlnb3RvIGFib3J0X2V4cG9ydDsKIAl9CiAKLQlpZiAocmRldi0+ZmF1bHR5KSB7CisJaWYgKHRlc3RfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HIAogCQkJIm1kOiBjYW4gbm90IGhvdC1hZGQgZmF1bHR5ICVzIGRpc2sgdG8gJXMhXG4iLAogCQkJYmRldm5hbWUocmRldi0+YmRldixiKSwgbWRuYW1lKG1kZGV2KSk7CiAJCWVyciA9IC1FSU5WQUw7CiAJCWdvdG8gYWJvcnRfZXhwb3J0OwogCX0KLQlyZGV2LT5pbl9zeW5jID0gMDsKKwljbGVhcl9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKTsKIAlyZGV2LT5kZXNjX25yID0gLTE7CiAJYmluZF9yZGV2X3RvX2FycmF5KHJkZXYsIG1kZGV2KTsKIApAQCAtMjkyOSwxMiArMzI5MCwyMiBAQAogCiAJLyoKIAkgKiBUaGUgcmVtYWluaW5nIGlvY3RscyBhcmUgY2hhbmdpbmcgdGhlIHN0YXRlIG9mIHRoZQotCSAqIHN1cGVyYmxvY2ssIHNvIHdlIGRvIG5vdCBhbGxvdyByZWFkLW9ubHkgYXJyYXlzCi0JICogaGVyZToKKwkgKiBzdXBlcmJsb2NrLCBzbyB3ZSBkbyBub3QgYWxsb3cgdGhlbSBvbiByZWFkLW9ubHkgYXJyYXlzLgorCSAqIEhvd2V2ZXIgbm9uLU1EIGlvY3RscyAoZS5nLiBnZXQtc2l6ZSkgd2lsbCBzdGlsbCBjb21lIHRocm91Z2gKKwkgKiBoZXJlIGFuZCBoaXQgdGhlICdkZWZhdWx0JyBiZWxvdywgc28gb25seSBkaXNhbGxvdworCSAqICdtZCcgaW9jdGxzLCBhbmQgc3dpdGNoIHRvIHJ3IG1vZGUgaWYgc3RhcnRlZCBhdXRvLXJlYWRvbmx5LgogCSAqLwotCWlmIChtZGRldi0+cm8pIHsKLQkJZXJyID0gLUVST0ZTOwotCQlnb3RvIGFib3J0X3VubG9jazsKKwlpZiAoX0lPQ19UWVBFKGNtZCkgPT0gTURfTUFKT1IgJiYKKwkgICAgbWRkZXYtPnJvICYmIG1kZGV2LT5wZXJzKSB7CisJCWlmIChtZGRldi0+cm8gPT0gMikgeworCQkJbWRkZXYtPnJvID0gMDsKKwkJc2V0X2JpdChNRF9SRUNPVkVSWV9ORUVERUQsICZtZGRldi0+cmVjb3ZlcnkpOworCQltZF93YWtldXBfdGhyZWFkKG1kZGV2LT50aHJlYWQpOworCisJCX0gZWxzZSB7CisJCQllcnIgPSAtRVJPRlM7CisJCQlnb3RvIGFib3J0X3VubG9jazsKKwkJfQogCX0KIAogCXN3aXRjaCAoY21kKQpAQCAtMzA2NCwyMSArMzQzNSwxNyBAQAogCSAqLwogCiAJYWxsb3dfc2lnbmFsKFNJR0tJTEwpOwotCWNvbXBsZXRlKHRocmVhZC0+ZXZlbnQpOwogCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7Ci0JCXZvaWQgKCpydW4pKG1kZGV2X3QgKik7CiAKLQkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQodGhyZWFkLT53cXVldWUsCi0JCQkJCQkgdGVzdF9iaXQoVEhSRUFEX1dBS0VVUCwgJnRocmVhZC0+ZmxhZ3MpCi0JCQkJCQkgfHwga3RocmVhZF9zaG91bGRfc3RvcCgpLAotCQkJCQkJIHRocmVhZC0+dGltZW91dCk7CisJCXdhaXRfZXZlbnRfdGltZW91dCh0aHJlYWQtPndxdWV1ZSwKKwkJCQkgICB0ZXN0X2JpdChUSFJFQURfV0FLRVVQLCAmdGhyZWFkLT5mbGFncykKKwkJCQkgICB8fCBrdGhyZWFkX3Nob3VsZF9zdG9wKCksCisJCQkJICAgdGhyZWFkLT50aW1lb3V0KTsKIAkJdHJ5X3RvX2ZyZWV6ZSgpOwogCiAJCWNsZWFyX2JpdChUSFJFQURfV0FLRVVQLCAmdGhyZWFkLT5mbGFncyk7CiAKLQkJcnVuID0gdGhyZWFkLT5ydW47Ci0JCWlmIChydW4pCi0JCQlydW4odGhyZWFkLT5tZGRldik7CisJCXRocmVhZC0+cnVuKHRocmVhZC0+bWRkZXYpOwogCX0KIAogCXJldHVybiAwOwpAQCAtMzA5Nyw3ICszNDY0LDYgQEAKIAkJCQkgY29uc3QgY2hhciAqbmFtZSkKIHsKIAltZGtfdGhyZWFkX3QgKnRocmVhZDsKLQlzdHJ1Y3QgY29tcGxldGlvbiBldmVudDsKIAogCXRocmVhZCA9IGttYWxsb2Moc2l6ZW9mKG1ka190aHJlYWRfdCksIEdGUF9LRVJORUwpOwogCWlmICghdGhyZWFkKQpAQCAtMzEwNiwxOCArMzQ3MiwxNCBAQAogCW1lbXNldCh0aHJlYWQsIDAsIHNpemVvZihtZGtfdGhyZWFkX3QpKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ0aHJlYWQtPndxdWV1ZSk7CiAKLQlpbml0X2NvbXBsZXRpb24oJmV2ZW50KTsKLQl0aHJlYWQtPmV2ZW50ID0gJmV2ZW50OwogCXRocmVhZC0+cnVuID0gcnVuOwogCXRocmVhZC0+bWRkZXYgPSBtZGRldjsKLQl0aHJlYWQtPm5hbWUgPSBuYW1lOwogCXRocmVhZC0+dGltZW91dCA9IE1BWF9TQ0hFRFVMRV9USU1FT1VUOwogCXRocmVhZC0+dHNrID0ga3RocmVhZF9ydW4obWRfdGhyZWFkLCB0aHJlYWQsIG5hbWUsIG1kbmFtZSh0aHJlYWQtPm1kZGV2KSk7CiAJaWYgKElTX0VSUih0aHJlYWQtPnRzaykpIHsKIAkJa2ZyZWUodGhyZWFkKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQotCXdhaXRfZm9yX2NvbXBsZXRpb24oJmV2ZW50KTsKIAlyZXR1cm4gdGhyZWFkOwogfQogCkBAIC0zMTM2LDcgKzM0OTgsNyBAQAogCQlyZXR1cm47CiAJfQogCi0JaWYgKCFyZGV2IHx8IHJkZXYtPmZhdWx0eSkKKwlpZiAoIXJkZXYgfHwgdGVzdF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpKQogCQlyZXR1cm47CiAvKgogCWRwcmludGsoIm1kX2Vycm9yIGRldjolcywgcmRldjooJWQ6JWQpLCAoY2FsbGVyOiAlcCwlcCwlcCwlcCkuXG4iLApAQCAtMzMyMiw4ICszNjg0LDEwIEBACiAJCXNlcV9wcmludGYoc2VxLCAiJXMgOiAlc2FjdGl2ZSIsIG1kbmFtZShtZGRldiksCiAJCQkJCQltZGRldi0+cGVycyA/ICIiIDogImluIik7CiAJCWlmIChtZGRldi0+cGVycykgewotCQkJaWYgKG1kZGV2LT5ybykKKwkJCWlmIChtZGRldi0+cm89PTEpCiAJCQkJc2VxX3ByaW50ZihzZXEsICIgKHJlYWQtb25seSkiKTsKKwkJCWlmIChtZGRldi0+cm89PTIpCisJCQkJc2VxX3ByaW50ZihzZXEsICIoYXV0by1yZWFkLW9ubHkpIik7CiAJCQlzZXFfcHJpbnRmKHNlcSwgIiAlcyIsIG1kZGV2LT5wZXJzLT5uYW1lKTsKIAkJfQogCkBAIC0zMzM0LDcgKzM2OTgsNyBAQAogCQkJCWJkZXZuYW1lKHJkZXYtPmJkZXYsYiksIHJkZXYtPmRlc2NfbnIpOwogCQkJaWYgKHRlc3RfYml0KFdyaXRlTW9zdGx5LCAmcmRldi0+ZmxhZ3MpKQogCQkJCXNlcV9wcmludGYoc2VxLCAiKFcpIik7Ci0JCQlpZiAocmRldi0+ZmF1bHR5KSB7CisJCQlpZiAodGVzdF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpKSB7CiAJCQkJc2VxX3ByaW50ZihzZXEsICIoRikiKTsKIAkJCQljb250aW51ZTsKIAkJCX0gZWxzZSBpZiAocmRldi0+cmFpZF9kaXNrIDwgMCkKQEAgLTMzNjMsMTEgKzM3MjcsMTUgQEAKIAkJaWYgKG1kZGV2LT5wZXJzKSB7CiAJCQltZGRldi0+cGVycy0+c3RhdHVzIChzZXEsIG1kZGV2KTsKIAkgCQlzZXFfcHJpbnRmKHNlcSwgIlxuICAgICAgIik7Ci0JCQlpZiAobWRkZXYtPmN1cnJfcmVzeW5jID4gMikgewotCQkJCXN0YXR1c19yZXN5bmMgKHNlcSwgbWRkZXYpOwotCQkJCXNlcV9wcmludGYoc2VxLCAiXG4gICAgICAiKTsKLQkJCX0gZWxzZSBpZiAobWRkZXYtPmN1cnJfcmVzeW5jID09IDEgfHwgbWRkZXYtPmN1cnJfcmVzeW5jID09IDIpCi0JCQkJc2VxX3ByaW50ZihzZXEsICIJcmVzeW5jPURFTEFZRURcbiAgICAgICIpOworCQkJaWYgKG1kZGV2LT5wZXJzLT5zeW5jX3JlcXVlc3QpIHsKKwkJCQlpZiAobWRkZXYtPmN1cnJfcmVzeW5jID4gMikgeworCQkJCQlzdGF0dXNfcmVzeW5jIChzZXEsIG1kZGV2KTsKKwkJCQkJc2VxX3ByaW50ZihzZXEsICJcbiAgICAgICIpOworCQkJCX0gZWxzZSBpZiAobWRkZXYtPmN1cnJfcmVzeW5jID09IDEgfHwgbWRkZXYtPmN1cnJfcmVzeW5jID09IDIpCisJCQkJCXNlcV9wcmludGYoc2VxLCAiXHRyZXN5bmM9REVMQVlFRFxuICAgICAgIik7CisJCQkJZWxzZSBpZiAobWRkZXYtPnJlY292ZXJ5X2NwIDwgTWF4U2VjdG9yKQorCQkJCQlzZXFfcHJpbnRmKHNlcSwgIlx0cmVzeW5jPVBFTkRJTkdcbiAgICAgICIpOworCQkJfQogCQl9IGVsc2UKIAkJCXNlcV9wcmludGYoc2VxLCAiXG4gICAgICAgIik7CiAKQEAgLTM1MDQsMTUgKzM4NzIsMjIgQEAKIAlpZiAoYmlvX2RhdGFfZGlyKGJpKSAhPSBXUklURSkKIAkJcmV0dXJuOwogCisJQlVHX09OKG1kZGV2LT5ybyA9PSAxKTsKKwlpZiAobWRkZXYtPnJvID09IDIpIHsKKwkJLyogbmVlZCB0byBzd2l0Y2ggdG8gcmVhZC93cml0ZSAqLworCQltZGRldi0+cm8gPSAwOworCQlzZXRfYml0KE1EX1JFQ09WRVJZX05FRURFRCwgJm1kZGV2LT5yZWNvdmVyeSk7CisJCW1kX3dha2V1cF90aHJlYWQobWRkZXYtPnRocmVhZCk7CisJfQogCWF0b21pY19pbmMoJm1kZGV2LT53cml0ZXNfcGVuZGluZyk7CiAJaWYgKG1kZGV2LT5pbl9zeW5jKSB7Ci0JCXNwaW5fbG9jaygmbWRkZXYtPndyaXRlX2xvY2spOworCQlzcGluX2xvY2tfaXJxKCZtZGRldi0+d3JpdGVfbG9jayk7CiAJCWlmIChtZGRldi0+aW5fc3luYykgewogCQkJbWRkZXYtPmluX3N5bmMgPSAwOwogCQkJbWRkZXYtPnNiX2RpcnR5ID0gMTsKIAkJCW1kX3dha2V1cF90aHJlYWQobWRkZXYtPnRocmVhZCk7CiAJCX0KLQkJc3Bpbl91bmxvY2soJm1kZGV2LT53cml0ZV9sb2NrKTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZtZGRldi0+d3JpdGVfbG9jayk7CiAJfQogCXdhaXRfZXZlbnQobWRkZXYtPnNiX3dhaXQsIG1kZGV2LT5zYl9kaXJ0eT09MCk7CiB9CkBAIC0zNTY4LDkgKzM5NDMsNyBAQAogCQltZGRldi0+Y3Vycl9yZXN5bmMgPSAyOwogCiAJdHJ5X2FnYWluOgotCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkgfHwKLQkJICAgIGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgewotCQkJZmx1c2hfc2lnbmFscyhjdXJyZW50KTsKKwkJaWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgewogCQkJc2V0X2JpdChNRF9SRUNPVkVSWV9JTlRSLCAmbWRkZXYtPnJlY292ZXJ5KTsKIAkJCWdvdG8gc2tpcDsKIAkJfQpAQCAtMzU5MCw5ICszOTYzLDggQEAKIAkJCQkJICogdGltZSAncm91bmQgd2hlbiBjdXJyX3Jlc3luYyA9PSAyCiAJCQkJCSAqLwogCQkJCQljb250aW51ZTsKLQkJCQlwcmVwYXJlX3RvX3dhaXQoJnJlc3luY193YWl0LCAmd3EsIFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCQkJaWYgKCFzaWduYWxfcGVuZGluZyhjdXJyZW50KSAmJgotCQkJCSAgICAha3RocmVhZF9zaG91bGRfc3RvcCgpICYmCisJCQkJcHJlcGFyZV90b193YWl0KCZyZXN5bmNfd2FpdCwgJndxLCBUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisJCQkJaWYgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkgJiYKIAkJCQkgICAgbWRkZXYyLT5jdXJyX3Jlc3luYyA+PSBtZGRldi0+Y3Vycl9yZXN5bmMpIHsKIAkJCQkJcHJpbnRrKEtFUk5fSU5GTyAibWQ6IGRlbGF5aW5nIHJlc3luYyBvZiAlcyIKIAkJCQkJICAgICAgICIgdW50aWwgJXMgaGFzIGZpbmlzaGVkIHJlc3luYyAodGhleSIKQEAgLTM2MDgsMTIgKzM5ODAsMTMgQEAKIAkJfQogCX0gd2hpbGUgKG1kZGV2LT5jdXJyX3Jlc3luYyA8IDIpOwogCi0JaWYgKHRlc3RfYml0KE1EX1JFQ09WRVJZX1NZTkMsICZtZGRldi0+cmVjb3ZlcnkpKQorCWlmICh0ZXN0X2JpdChNRF9SRUNPVkVSWV9TWU5DLCAmbWRkZXYtPnJlY292ZXJ5KSkgewogCQkvKiByZXN5bmMgZm9sbG93cyB0aGUgc2l6ZSByZXF1ZXN0ZWQgYnkgdGhlIHBlcnNvbmFsaXR5LAogCQkgKiB3aGljaCBkZWZhdWx0cyB0byBwaHlzaWNhbCBzaXplLCBidXQgY2FuIGJlIHZpcnR1YWwgc2l6ZQogCQkgKi8KIAkJbWF4X3NlY3RvcnMgPSBtZGRldi0+cmVzeW5jX21heF9zZWN0b3JzOwotCWVsc2UKKwkJbWRkZXYtPnJlc3luY19taXNtYXRjaGVzID0gMDsKKwl9IGVsc2UKIAkJLyogcmVjb3ZlcnkgZm9sbG93cyB0aGUgcGh5c2ljYWwgc2l6ZSBvZiBkZXZpY2VzICovCiAJCW1heF9zZWN0b3JzID0gbWRkZXYtPnNpemUgPDwgMTsKIApAQCAtMzYyNiw3ICszOTk5LDggQEAKIAogCWlzX21kZGV2X2lkbGUobWRkZXYpOyAvKiB0aGlzIGFsc28gaW5pdGlhbGl6ZXMgSU8gZXZlbnQgY291bnRlcnMgKi8KIAkvKiB3ZSBkb24ndCB1c2UgdGhlIGNoZWNrcG9pbnQgaWYgdGhlcmUncyBhIGJpdG1hcCAqLwotCWlmICh0ZXN0X2JpdChNRF9SRUNPVkVSWV9TWU5DLCAmbWRkZXYtPnJlY292ZXJ5KSAmJiAhbWRkZXYtPmJpdG1hcCkKKwlpZiAodGVzdF9iaXQoTURfUkVDT1ZFUllfU1lOQywgJm1kZGV2LT5yZWNvdmVyeSkgJiYgIW1kZGV2LT5iaXRtYXAKKwkgICAgJiYgISB0ZXN0X2JpdChNRF9SRUNPVkVSWV9SRVFVRVNURUQsICZtZGRldi0+cmVjb3ZlcnkpKQogCQlqID0gbWRkZXYtPnJlY292ZXJ5X2NwOwogCWVsc2UKIAkJaiA9IDA7CkBAIC0zNjk5LDEzICs0MDczLDEyIEBACiAJCX0KIAogCi0JCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSB8fCBrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKKwkJaWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgewogCQkJLyoKIAkJCSAqIGdvdCBhIHNpZ25hbCwgZXhpdC4KIAkJCSAqLwogCQkJcHJpbnRrKEtFUk5fSU5GTyAKIAkJCQkibWQ6IG1kX2RvX3N5bmMoKSBnb3Qgc2lnbmFsIC4uLiBleGl0aW5nXG4iKTsKLQkJCWZsdXNoX3NpZ25hbHMoY3VycmVudCk7CiAJCQlzZXRfYml0KE1EX1JFQ09WRVJZX0lOVFIsICZtZGRldi0+cmVjb3ZlcnkpOwogCQkJZ290byBvdXQ7CiAJCX0KQEAgLTM3MjcsNyArNDEwMCw3IEBACiAJCWlmIChjdXJyc3BlZWQgPiBzeXNjdGxfc3BlZWRfbGltaXRfbWluKSB7CiAJCQlpZiAoKGN1cnJzcGVlZCA+IHN5c2N0bF9zcGVlZF9saW1pdF9tYXgpIHx8CiAJCQkJCSFpc19tZGRldl9pZGxlKG1kZGV2KSkgewotCQkJCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDI1MCk7CisJCQkJbXNsZWVwKDI1MCk7CiAJCQkJZ290byByZXBlYXQ7CiAJCQl9CiAJCX0KQEAgLTM4MjAsNyArNDE5Myw3IEBACiAJaWYgKG1kZGV2X3RyeWxvY2sobWRkZXYpPT0wKSB7CiAJCWludCBzcGFyZXMgPTA7CiAKLQkJc3Bpbl9sb2NrKCZtZGRldi0+d3JpdGVfbG9jayk7CisJCXNwaW5fbG9ja19pcnEoJm1kZGV2LT53cml0ZV9sb2NrKTsKIAkJaWYgKG1kZGV2LT5zYWZlbW9kZSAmJiAhYXRvbWljX3JlYWQoJm1kZGV2LT53cml0ZXNfcGVuZGluZykgJiYKIAkJICAgICFtZGRldi0+aW5fc3luYyAmJiBtZGRldi0+cmVjb3ZlcnlfY3AgPT0gTWF4U2VjdG9yKSB7CiAJCQltZGRldi0+aW5fc3luYyA9IDE7CkBAIC0zODI4LDcgKzQyMDEsNyBAQAogCQl9CiAJCWlmIChtZGRldi0+c2FmZW1vZGUgPT0gMSkKIAkJCW1kZGV2LT5zYWZlbW9kZSA9IDA7Ci0JCXNwaW5fdW5sb2NrKCZtZGRldi0+d3JpdGVfbG9jayk7CisJCXNwaW5fdW5sb2NrX2lycSgmbWRkZXYtPndyaXRlX2xvY2spOwogCiAJCWlmIChtZGRldi0+c2JfZGlydHkpCiAJCQltZF91cGRhdGVfc2IobWRkZXYpOwpAQCAtMzg2NCw5ICs0MjM3LDEzIEBACiAJCQlzZXRfYml0KE1EX1JFQ09WRVJZX05FRURFRCwgJm1kZGV2LT5yZWNvdmVyeSk7CiAJCQlnb3RvIHVubG9jazsKIAkJfQotCQlpZiAobWRkZXYtPnJlY292ZXJ5KQotCQkJLyogcHJvYmFibHkganVzdCB0aGUgUkVDT1ZFUllfTkVFREVEIGZsYWcgKi8KLQkJCW1kZGV2LT5yZWNvdmVyeSA9IDA7CisJCS8qIENsZWFyIHNvbWUgYml0cyB0aGF0IGRvbid0IG1lYW4gYW55dGhpbmcsIGJ1dAorCQkgKiBtaWdodCBiZSBsZWZ0IHNldAorCQkgKi8KKwkJY2xlYXJfYml0KE1EX1JFQ09WRVJZX05FRURFRCwgJm1kZGV2LT5yZWNvdmVyeSk7CisJCWNsZWFyX2JpdChNRF9SRUNPVkVSWV9FUlIsICZtZGRldi0+cmVjb3ZlcnkpOworCQljbGVhcl9iaXQoTURfUkVDT1ZFUllfSU5UUiwgJm1kZGV2LT5yZWNvdmVyeSk7CisJCWNsZWFyX2JpdChNRF9SRUNPVkVSWV9ET05FLCAmbWRkZXYtPnJlY292ZXJ5KTsKIAogCQkvKiBubyByZWNvdmVyeSBpcyBydW5uaW5nLgogCQkgKiByZW1vdmUgYW55IGZhaWxlZCBkcml2ZXMsIHRoZW4KQEAgLTM4NzYsMzEgKzQyNTMsNDEgQEAKIAkJICovCiAJCUlURVJBVEVfUkRFVihtZGRldixyZGV2LHJ0bXApCiAJCQlpZiAocmRldi0+cmFpZF9kaXNrID49IDAgJiYKLQkJCSAgICAocmRldi0+ZmF1bHR5IHx8ICEgcmRldi0+aW5fc3luYykgJiYKKwkJCSAgICAodGVzdF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpIHx8ICEgdGVzdF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKSkgJiYKIAkJCSAgICBhdG9taWNfcmVhZCgmcmRldi0+bnJfcGVuZGluZyk9PTApIHsKLQkJCQlpZiAobWRkZXYtPnBlcnMtPmhvdF9yZW1vdmVfZGlzayhtZGRldiwgcmRldi0+cmFpZF9kaXNrKT09MCkKKwkJCQlpZiAobWRkZXYtPnBlcnMtPmhvdF9yZW1vdmVfZGlzayhtZGRldiwgcmRldi0+cmFpZF9kaXNrKT09MCkgeworCQkJCQljaGFyIG5tWzIwXTsKKwkJCQkJc3ByaW50ZihubSwicmQlZCIsIHJkZXYtPnJhaWRfZGlzayk7CisJCQkJCXN5c2ZzX3JlbW92ZV9saW5rKCZtZGRldi0+a29iaiwgbm0pOwogCQkJCQlyZGV2LT5yYWlkX2Rpc2sgPSAtMTsKKwkJCQl9CiAJCQl9CiAKIAkJaWYgKG1kZGV2LT5kZWdyYWRlZCkgewogCQkJSVRFUkFURV9SREVWKG1kZGV2LHJkZXYscnRtcCkKIAkJCQlpZiAocmRldi0+cmFpZF9kaXNrIDwgMAotCQkJCSAgICAmJiAhcmRldi0+ZmF1bHR5KSB7Ci0JCQkJCWlmIChtZGRldi0+cGVycy0+aG90X2FkZF9kaXNrKG1kZGV2LHJkZXYpKQorCQkJCSAgICAmJiAhdGVzdF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpKSB7CisJCQkJCWlmIChtZGRldi0+cGVycy0+aG90X2FkZF9kaXNrKG1kZGV2LHJkZXYpKSB7CisJCQkJCQljaGFyIG5tWzIwXTsKKwkJCQkJCXNwcmludGYobm0sICJyZCVkIiwgcmRldi0+cmFpZF9kaXNrKTsKKwkJCQkJCXN5c2ZzX2NyZWF0ZV9saW5rKCZtZGRldi0+a29iaiwgJnJkZXYtPmtvYmosIG5tKTsKIAkJCQkJCXNwYXJlcysrOwotCQkJCQllbHNlCisJCQkJCX0gZWxzZQogCQkJCQkJYnJlYWs7CiAJCQkJfQogCQl9CiAKLQkJaWYgKCFzcGFyZXMgJiYgKG1kZGV2LT5yZWNvdmVyeV9jcCA9PSBNYXhTZWN0b3IgKSkgewotCQkJLyogbm90aGluZyB3ZSBjYW4gZG8gLi4uICovCisJCWlmIChzcGFyZXMpIHsKKwkJCWNsZWFyX2JpdChNRF9SRUNPVkVSWV9TWU5DLCAmbWRkZXYtPnJlY292ZXJ5KTsKKwkJCWNsZWFyX2JpdChNRF9SRUNPVkVSWV9DSEVDSywgJm1kZGV2LT5yZWNvdmVyeSk7CisJCX0gZWxzZSBpZiAobWRkZXYtPnJlY292ZXJ5X2NwIDwgTWF4U2VjdG9yKSB7CisJCQlzZXRfYml0KE1EX1JFQ09WRVJZX1NZTkMsICZtZGRldi0+cmVjb3ZlcnkpOworCQl9IGVsc2UgaWYgKCF0ZXN0X2JpdChNRF9SRUNPVkVSWV9TWU5DLCAmbWRkZXYtPnJlY292ZXJ5KSkKKwkJCS8qIG5vdGhpbmcgdG8gYmUgZG9uZSAuLi4gKi8KIAkJCWdvdG8gdW5sb2NrOwotCQl9CisKIAkJaWYgKG1kZGV2LT5wZXJzLT5zeW5jX3JlcXVlc3QpIHsKIAkJCXNldF9iaXQoTURfUkVDT1ZFUllfUlVOTklORywgJm1kZGV2LT5yZWNvdmVyeSk7Ci0JCQlpZiAoIXNwYXJlcykKLQkJCQlzZXRfYml0KE1EX1JFQ09WRVJZX1NZTkMsICZtZGRldi0+cmVjb3ZlcnkpOwogCQkJaWYgKHNwYXJlcyAmJiBtZGRldi0+Yml0bWFwICYmICEgbWRkZXYtPmJpdG1hcC0+ZmlsZSkgewogCQkJCS8qIFdlIGFyZSBhZGRpbmcgYSBkZXZpY2Ugb3IgZGV2aWNlcyB0byBhbiBhcnJheQogCQkJCSAqIHdoaWNoIGhhcyB0aGUgYml0bWFwIHN0b3JlZCBvbiBhbGwgZGV2aWNlcy4KQEAgLTM5NzUsNyArNDM2Miw3IEBACiAJCQkiIE1EX1NCX0RJU0tTPSVkXG4iLAogCQkJTURfTUFKT1JfVkVSU0lPTiwgTURfTUlOT1JfVkVSU0lPTiwKIAkJCU1EX1BBVENITEVWRUxfVkVSU0lPTiwgTUFYX01EX0RFVlMsIE1EX1NCX0RJU0tTKTsKLQlwcmludGsoS0VSTl9JTkZPICJtZDogYml0bWFwIHZlcnNpb24gJWQuJWRcbiIsIEJJVE1BUF9NQUpPUiwKKwlwcmludGsoS0VSTl9JTkZPICJtZDogYml0bWFwIHZlcnNpb24gJWQuJWRcbiIsIEJJVE1BUF9NQUpPUl9ISSwKIAkJCUJJVE1BUF9NSU5PUik7CiAKIAlpZiAocmVnaXN0ZXJfYmxrZGV2KE1BSk9SX05SLCAibWQiKSkKQEAgLTQwMzksNyArNDQyNiw3IEBACiAJCWlmIChJU19FUlIocmRldikpCiAJCQljb250aW51ZTsKIAotCQlpZiAocmRldi0+ZmF1bHR5KSB7CisJCWlmICh0ZXN0X2JpdChGYXVsdHksICZyZGV2LT5mbGFncykpIHsKIAkJCU1EX0JVRygpOwogCQkJY29udGludWU7CiAJCX0KQEAgLTQwODYsNiArNDQ3MywyMyBAQAogbW9kdWxlX2luaXQobWRfaW5pdCkKIG1vZHVsZV9leGl0KG1kX2V4aXQpCiAKK3N0YXRpYyBpbnQgZ2V0X3JvKGNoYXIgKmJ1ZmZlciwgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApCit7CisJcmV0dXJuIHNwcmludGYoYnVmZmVyLCAiJWQiLCBzdGFydF9yZWFkb25seSk7Cit9CitzdGF0aWMgaW50IHNldF9ybyhjb25zdCBjaGFyICp2YWwsIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKQoreworCWNoYXIgKmU7CisJaW50IG51bSA9IHNpbXBsZV9zdHJ0b3VsKHZhbCwgJmUsIDEwKTsKKwlpZiAoKnZhbCAmJiAoKmUgPT0gJ1wwJyB8fCAqZSA9PSAnXG4nKSkgeworCQlzdGFydF9yZWFkb25seSA9IG51bTsKKwkJcmV0dXJuIDA7OworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworbW9kdWxlX3BhcmFtX2NhbGwoc3RhcnRfcm8sIHNldF9ybywgZ2V0X3JvLCBOVUxMLCAwNjAwKTsKKwogRVhQT1JUX1NZTUJPTChyZWdpc3Rlcl9tZF9wZXJzb25hbGl0eSk7CiBFWFBPUlRfU1lNQk9MKHVucmVnaXN0ZXJfbWRfcGVyc29uYWxpdHkpOwogRVhQT1JUX1NZTUJPTChtZF9lcnJvcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL211bHRpcGF0aC5jIGIvZHJpdmVycy9tZC9tdWx0aXBhdGguYwppbmRleCBjMDZmNDQ3Li4xNDVjZGM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL211bHRpcGF0aC5jCisrKyBiL2RyaXZlcnMvbWQvbXVsdGlwYXRoLmMKQEAgLTYzLDggKzYzLDggQEAKIAogCXJjdV9yZWFkX2xvY2soKTsKIAlmb3IgKGkgPSAwOyBpIDwgZGlza3M7IGkrKykgewotCQltZGtfcmRldl90ICpyZGV2ID0gY29uZi0+bXVsdGlwYXRoc1tpXS5yZGV2OwotCQlpZiAocmRldiAmJiByZGV2LT5pbl9zeW5jKSB7CisJCW1ka19yZGV2X3QgKnJkZXYgPSByY3VfZGVyZWZlcmVuY2UoY29uZi0+bXVsdGlwYXRoc1tpXS5yZGV2KTsKKwkJaWYgKHJkZXYgJiYgdGVzdF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKSkgewogCQkJYXRvbWljX2luYygmcmRldi0+bnJfcGVuZGluZyk7CiAJCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJCXJldHVybiBpOwpAQCAtMTM5LDggKzEzOSw5IEBACiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJZm9yIChpPTA7IGk8bWRkZXYtPnJhaWRfZGlza3M7IGkrKykgewotCQltZGtfcmRldl90ICpyZGV2ID0gY29uZi0+bXVsdGlwYXRoc1tpXS5yZGV2OwotCQlpZiAocmRldiAmJiAhcmRldi0+ZmF1bHR5ICYmIGF0b21pY19yZWFkKCZyZGV2LT5ucl9wZW5kaW5nKSkgeworCQltZGtfcmRldl90ICpyZGV2ID0gcmN1X2RlcmVmZXJlbmNlKGNvbmYtPm11bHRpcGF0aHNbaV0ucmRldik7CisJCWlmIChyZGV2ICYmICF0ZXN0X2JpdChGYXVsdHksICZyZGV2LT5mbGFncykKKwkJICAgICYmIGF0b21pY19yZWFkKCZyZGV2LT5ucl9wZW5kaW5nKSkgewogCQkJcmVxdWVzdF9xdWV1ZV90ICpyX3F1ZXVlID0gYmRldl9nZXRfcXVldWUocmRldi0+YmRldik7CiAKIAkJCWF0b21pY19pbmMoJnJkZXYtPm5yX3BlbmRpbmcpOwpAQCAtMjExLDcgKzIxMiw3IEBACiAJZm9yIChpID0gMDsgaSA8IGNvbmYtPnJhaWRfZGlza3M7IGkrKykKIAkJc2VxX3ByaW50ZiAoc2VxLCAiJXMiLAogCQkJICAgICAgIGNvbmYtPm11bHRpcGF0aHNbaV0ucmRldiAmJiAKLQkJCSAgICAgICBjb25mLT5tdWx0aXBhdGhzW2ldLnJkZXYtPmluX3N5bmMgPyAiVSIgOiAiXyIpOworCQkJICAgICAgIHRlc3RfYml0KEluX3N5bmMsICZjb25mLT5tdWx0aXBhdGhzW2ldLnJkZXYtPmZsYWdzKSA/ICJVIiA6ICJfIik7CiAJc2VxX3ByaW50ZiAoc2VxLCAiXSIpOwogfQogCkBAIC0yMjQsOCArMjI1LDggQEAKIAogCXJjdV9yZWFkX2xvY2soKTsKIAlmb3IgKGk9MDsgaTxtZGRldi0+cmFpZF9kaXNrcyAmJiByZXQgPT0gMDsgaSsrKSB7Ci0JCW1ka19yZGV2X3QgKnJkZXYgPSBjb25mLT5tdWx0aXBhdGhzW2ldLnJkZXY7Ci0JCWlmIChyZGV2ICYmICFyZGV2LT5mYXVsdHkpIHsKKwkJbWRrX3JkZXZfdCAqcmRldiA9IHJjdV9kZXJlZmVyZW5jZShjb25mLT5tdWx0aXBhdGhzW2ldLnJkZXYpOworCQlpZiAocmRldiAmJiAhdGVzdF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpKSB7CiAJCQlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2ID0gcmRldi0+YmRldjsKIAkJCXJlcXVlc3RfcXVldWVfdCAqcl9xdWV1ZSA9IGJkZXZfZ2V0X3F1ZXVlKGJkZXYpOwogCkBAIC0yNjUsMTAgKzI2NiwxMCBAQAogCQkvKgogCQkgKiBNYXJrIGRpc2sgYXMgdW51c2FibGUKIAkJICovCi0JCWlmICghcmRldi0+ZmF1bHR5KSB7CisJCWlmICghdGVzdF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpKSB7CiAJCQljaGFyIGJbQkRFVk5BTUVfU0laRV07Ci0JCQlyZGV2LT5pbl9zeW5jID0gMDsKLQkJCXJkZXYtPmZhdWx0eSA9IDE7CisJCQljbGVhcl9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKTsKKwkJCXNldF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpOwogCQkJbWRkZXYtPnNiX2RpcnR5ID0gMTsKIAkJCWNvbmYtPndvcmtpbmdfZGlza3MtLTsKIAkJCXByaW50ayhLRVJOX0FMRVJUICJtdWx0aXBhdGg6IElPIGZhaWx1cmUgb24gJXMsIgpAQCAtMjk4LDcgKzI5OSw3IEBACiAJCXRtcCA9IGNvbmYtPm11bHRpcGF0aHMgKyBpOwogCQlpZiAodG1wLT5yZGV2KQogCQkJcHJpbnRrKCIgZGlzayVkLCBvOiVkLCBkZXY6JXNcbiIsCi0JCQkJaSwhdG1wLT5yZGV2LT5mYXVsdHksCisJCQkJaSwhdGVzdF9iaXQoRmF1bHR5LCAmdG1wLT5yZGV2LT5mbGFncyksCiAJCQkgICAgICAgYmRldm5hbWUodG1wLT5yZGV2LT5iZGV2LGIpKTsKIAl9CiB9CkBAIC0zMzAsOCArMzMxLDggQEAKIAogCQkJY29uZi0+d29ya2luZ19kaXNrcysrOwogCQkJcmRldi0+cmFpZF9kaXNrID0gcGF0aDsKLQkJCXJkZXYtPmluX3N5bmMgPSAxOwotCQkJcC0+cmRldiA9IHJkZXY7CisJCQlzZXRfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncyk7CisJCQlyY3VfYXNzaWduX3BvaW50ZXIocC0+cmRldiwgcmRldik7CiAJCQlmb3VuZCA9IDE7CiAJCX0KIApAQCAtMzUwLDcgKzM1MSw3IEBACiAKIAlyZGV2ID0gcC0+cmRldjsKIAlpZiAocmRldikgewotCQlpZiAocmRldi0+aW5fc3luYyB8fAorCQlpZiAodGVzdF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKSB8fAogCQkgICAgYXRvbWljX3JlYWQoJnJkZXYtPm5yX3BlbmRpbmcpKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgImhvdC1yZW1vdmUtZGlzaywgc2xvdCAlZCBpcyBpZGVudGlmaWVkIgkJCQkiIGJ1dCBpcyBzdGlsbCBvcGVyYXRpb25hbCFcbiIsIG51bWJlcik7CiAJCQllcnIgPSAtRUJVU1k7CkBAIC00ODIsNyArNDgzLDcgQEAKIAkJICAgIG1kZGV2LT5xdWV1ZS0+bWF4X3NlY3RvcnMgPiAoUEFHRV9TSVpFPj45KSkKIAkJCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhtZGRldi0+cXVldWUsIFBBR0VfU0laRT4+OSk7CiAKLQkJaWYgKCFyZGV2LT5mYXVsdHkpIAorCQlpZiAoIXRlc3RfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKSkKIAkJCWNvbmYtPndvcmtpbmdfZGlza3MrKzsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDEuYyBiL2RyaXZlcnMvbWQvcmFpZDEuYwppbmRleCBlMTZmNDczLi4yZGE5ZDNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQxLmMKKysrIGIvZHJpdmVycy9tZC9yYWlkMS5jCkBAIC0zMDEsNyArMzAxLDcgQEAKIHsKIAlpbnQgdXB0b2RhdGUgPSB0ZXN0X2JpdChCSU9fVVBUT0RBVEUsICZiaW8tPmJpX2ZsYWdzKTsKIAlyMWJpb190ICogcjFfYmlvID0gKHIxYmlvX3QgKikoYmlvLT5iaV9wcml2YXRlKTsKLQlpbnQgbWlycm9yLCBiZWhpbmQ7CisJaW50IG1pcnJvciwgYmVoaW5kID0gdGVzdF9iaXQoUjFCSU9fQmVoaW5kSU8sICZyMV9iaW8tPnN0YXRlKTsKIAljb25mX3QgKmNvbmYgPSBtZGRldl90b19jb25mKHIxX2Jpby0+bWRkZXYpOwogCiAJaWYgKGJpby0+Ymlfc2l6ZSkKQEAgLTMxMSw0NyArMzExLDU0IEBACiAJCWlmIChyMV9iaW8tPmJpb3NbbWlycm9yXSA9PSBiaW8pCiAJCQlicmVhazsKIAotCS8qCi0JICogdGhpcyBicmFuY2ggaXMgb3VyICdvbmUgbWlycm9yIElPIGhhcyBmaW5pc2hlZCcgZXZlbnQgaGFuZGxlcjoKLQkgKi8KLQlpZiAoIXVwdG9kYXRlKSB7Ci0JCW1kX2Vycm9yKHIxX2Jpby0+bWRkZXYsIGNvbmYtPm1pcnJvcnNbbWlycm9yXS5yZGV2KTsKLQkJLyogYW4gSS9PIGZhaWxlZCwgd2UgY2FuJ3QgY2xlYXIgdGhlIGJpdG1hcCAqLwotCQlzZXRfYml0KFIxQklPX0RlZ3JhZGVkLCAmcjFfYmlvLT5zdGF0ZSk7Ci0JfSBlbHNlCisJaWYgKGVycm9yID09IC1FTk9UU1VQUCAmJiB0ZXN0X2JpdChSMUJJT19CYXJyaWVyLCAmcjFfYmlvLT5zdGF0ZSkpIHsKKwkJc2V0X2JpdChCYXJyaWVyc05vdHN1cHAsICZjb25mLT5taXJyb3JzW21pcnJvcl0ucmRldi0+ZmxhZ3MpOworCQlzZXRfYml0KFIxQklPX0JhcnJpZXJSZXRyeSwgJnIxX2Jpby0+c3RhdGUpOworCQlyMV9iaW8tPm1kZGV2LT5iYXJyaWVyc193b3JrID0gMDsKKwl9IGVsc2UgewogCQkvKgotCQkgKiBTZXQgUjFCSU9fVXB0b2RhdGUgaW4gb3VyIG1hc3RlciBiaW8sIHNvIHRoYXQKLQkJICogd2Ugd2lsbCByZXR1cm4gYSBnb29kIGVycm9yIGNvZGUgZm9yIHRvIHRoZSBoaWdoZXIKLQkJICogbGV2ZWxzIGV2ZW4gaWYgSU8gb24gc29tZSBvdGhlciBtaXJyb3JlZCBidWZmZXIgZmFpbHMuCi0JCSAqCi0JCSAqIFRoZSAnbWFzdGVyJyByZXByZXNlbnRzIHRoZSBjb21wb3NpdGUgSU8gb3BlcmF0aW9uIHRvCi0JCSAqIHVzZXItc2lkZS4gU28gaWYgc29tZXRoaW5nIHdhaXRzIGZvciBJTywgdGhlbiBpdCB3aWxsCi0JCSAqIHdhaXQgZm9yIHRoZSAnbWFzdGVyJyBiaW8uCisJCSAqIHRoaXMgYnJhbmNoIGlzIG91ciAnb25lIG1pcnJvciBJTyBoYXMgZmluaXNoZWQnIGV2ZW50IGhhbmRsZXI6CiAJCSAqLwotCQlzZXRfYml0KFIxQklPX1VwdG9kYXRlLCAmcjFfYmlvLT5zdGF0ZSk7CisJCXIxX2Jpby0+Ymlvc1ttaXJyb3JdID0gTlVMTDsKKwkJYmlvX3B1dChiaW8pOworCQlpZiAoIXVwdG9kYXRlKSB7CisJCQltZF9lcnJvcihyMV9iaW8tPm1kZGV2LCBjb25mLT5taXJyb3JzW21pcnJvcl0ucmRldik7CisJCQkvKiBhbiBJL08gZmFpbGVkLCB3ZSBjYW4ndCBjbGVhciB0aGUgYml0bWFwICovCisJCQlzZXRfYml0KFIxQklPX0RlZ3JhZGVkLCAmcjFfYmlvLT5zdGF0ZSk7CisJCX0gZWxzZQorCQkJLyoKKwkJCSAqIFNldCBSMUJJT19VcHRvZGF0ZSBpbiBvdXIgbWFzdGVyIGJpbywgc28gdGhhdAorCQkJICogd2Ugd2lsbCByZXR1cm4gYSBnb29kIGVycm9yIGNvZGUgZm9yIHRvIHRoZSBoaWdoZXIKKwkJCSAqIGxldmVscyBldmVuIGlmIElPIG9uIHNvbWUgb3RoZXIgbWlycm9yZWQgYnVmZmVyIGZhaWxzLgorCQkJICoKKwkJCSAqIFRoZSAnbWFzdGVyJyByZXByZXNlbnRzIHRoZSBjb21wb3NpdGUgSU8gb3BlcmF0aW9uIHRvCisJCQkgKiB1c2VyLXNpZGUuIFNvIGlmIHNvbWV0aGluZyB3YWl0cyBmb3IgSU8sIHRoZW4gaXQgd2lsbAorCQkJICogd2FpdCBmb3IgdGhlICdtYXN0ZXInIGJpby4KKwkJCSAqLworCQkJc2V0X2JpdChSMUJJT19VcHRvZGF0ZSwgJnIxX2Jpby0+c3RhdGUpOwogCi0JdXBkYXRlX2hlYWRfcG9zKG1pcnJvciwgcjFfYmlvKTsKKwkJdXBkYXRlX2hlYWRfcG9zKG1pcnJvciwgcjFfYmlvKTsKIAotCWJlaGluZCA9IHRlc3RfYml0KFIxQklPX0JlaGluZElPLCAmcjFfYmlvLT5zdGF0ZSk7Ci0JaWYgKGJlaGluZCkgewotCQlpZiAodGVzdF9iaXQoV3JpdGVNb3N0bHksICZjb25mLT5taXJyb3JzW21pcnJvcl0ucmRldi0+ZmxhZ3MpKQotCQkJYXRvbWljX2RlYygmcjFfYmlvLT5iZWhpbmRfcmVtYWluaW5nKTsKKwkJaWYgKGJlaGluZCkgeworCQkJaWYgKHRlc3RfYml0KFdyaXRlTW9zdGx5LCAmY29uZi0+bWlycm9yc1ttaXJyb3JdLnJkZXYtPmZsYWdzKSkKKwkJCQlhdG9taWNfZGVjKCZyMV9iaW8tPmJlaGluZF9yZW1haW5pbmcpOwogCi0JCS8qIEluIGJlaGluZCBtb2RlLCB3ZSBBQ0sgdGhlIG1hc3RlciBiaW8gb25jZSB0aGUgSS9PIGhhcyBzYWZlbHkKLQkJICogcmVhY2hlZCBhbGwgbm9uLXdyaXRlbW9zdGx5IGRpc2tzLiBTZXR0aW5nIHRoZSBSZXR1cm5lZCBiaXQKLQkJICogZW5zdXJlcyB0aGF0IHRoaXMgZ2V0cyBkb25lIG9ubHkgb25jZSAtLSB3ZSBkb24ndCBldmVyIHdhbnQgdG8KLQkJICogcmV0dXJuIC1FSU8gaGVyZSwgaW5zdGVhZCB3ZSdsbCB3YWl0ICovCisJCQkvKiBJbiBiZWhpbmQgbW9kZSwgd2UgQUNLIHRoZSBtYXN0ZXIgYmlvIG9uY2UgdGhlIEkvTyBoYXMgc2FmZWx5CisJCQkgKiByZWFjaGVkIGFsbCBub24td3JpdGVtb3N0bHkgZGlza3MuIFNldHRpbmcgdGhlIFJldHVybmVkIGJpdAorCQkJICogZW5zdXJlcyB0aGF0IHRoaXMgZ2V0cyBkb25lIG9ubHkgb25jZSAtLSB3ZSBkb24ndCBldmVyIHdhbnQgdG8KKwkJCSAqIHJldHVybiAtRUlPIGhlcmUsIGluc3RlYWQgd2UnbGwgd2FpdCAqLwogCi0JCWlmIChhdG9taWNfcmVhZCgmcjFfYmlvLT5iZWhpbmRfcmVtYWluaW5nKSA+PSAoYXRvbWljX3JlYWQoJnIxX2Jpby0+cmVtYWluaW5nKS0xKSAmJgotCQkgICAgdGVzdF9iaXQoUjFCSU9fVXB0b2RhdGUsICZyMV9iaW8tPnN0YXRlKSkgewotCQkJLyogTWF5YmUgd2UgY2FuIHJldHVybiBub3cgKi8KLQkJCWlmICghdGVzdF9hbmRfc2V0X2JpdChSMUJJT19SZXR1cm5lZCwgJnIxX2Jpby0+c3RhdGUpKSB7Ci0JCQkJc3RydWN0IGJpbyAqbWJpbyA9IHIxX2Jpby0+bWFzdGVyX2JpbzsKLQkJCQlQUklOVEsoS0VSTl9ERUJVRyAicmFpZDE6IGJlaGluZCBlbmQgd3JpdGUgc2VjdG9ycyAlbGx1LSVsbHVcbiIsCi0JCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIG1iaW8tPmJpX3NlY3RvciwKLQkJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgbWJpby0+Ymlfc2VjdG9yICsKLQkJCQkgICAgICAgKG1iaW8tPmJpX3NpemUgPj4gOSkgLSAxKTsKLQkJCQliaW9fZW5kaW8obWJpbywgbWJpby0+Ymlfc2l6ZSwgMCk7CisJCQlpZiAoYXRvbWljX3JlYWQoJnIxX2Jpby0+YmVoaW5kX3JlbWFpbmluZykgPj0gKGF0b21pY19yZWFkKCZyMV9iaW8tPnJlbWFpbmluZyktMSkgJiYKKwkJCSAgICB0ZXN0X2JpdChSMUJJT19VcHRvZGF0ZSwgJnIxX2Jpby0+c3RhdGUpKSB7CisJCQkJLyogTWF5YmUgd2UgY2FuIHJldHVybiBub3cgKi8KKwkJCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoUjFCSU9fUmV0dXJuZWQsICZyMV9iaW8tPnN0YXRlKSkgeworCQkJCQlzdHJ1Y3QgYmlvICptYmlvID0gcjFfYmlvLT5tYXN0ZXJfYmlvOworCQkJCQlQUklOVEsoS0VSTl9ERUJVRyAicmFpZDE6IGJlaGluZCBlbmQgd3JpdGUgc2VjdG9ycyAlbGx1LSVsbHVcbiIsCisJCQkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBtYmlvLT5iaV9zZWN0b3IsCisJCQkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBtYmlvLT5iaV9zZWN0b3IgKworCQkJCQkgICAgICAgKG1iaW8tPmJpX3NpemUgPj4gOSkgLSAxKTsKKwkJCQkJYmlvX2VuZGlvKG1iaW8sIG1iaW8tPmJpX3NpemUsIDApOworCQkJCX0KIAkJCX0KIAkJfQogCX0KQEAgLTM2MSw4ICszNjgsMTYgQEAKIAkgKiBhbHJlYWR5LgogCSAqLwogCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZyMV9iaW8tPnJlbWFpbmluZykpIHsKKwkJaWYgKHRlc3RfYml0KFIxQklPX0JhcnJpZXJSZXRyeSwgJnIxX2Jpby0+c3RhdGUpKSB7CisJCQlyZXNjaGVkdWxlX3JldHJ5KHIxX2Jpbyk7CisJCQkvKiBEb24ndCBkZWNfcGVuZGluZyB5ZXQsIHdlIHdhbnQgdG8gaG9sZAorCQkJICogdGhlIHJlZmVyZW5jZSBvdmVyIHRoZSByZXRyeQorCQkJICovCisJCQlyZXR1cm4gMDsKKwkJfQogCQlpZiAodGVzdF9iaXQoUjFCSU9fQmVoaW5kSU8sICZyMV9iaW8tPnN0YXRlKSkgewogCQkJLyogZnJlZSBleHRyYSBjb3B5IG9mIHRoZSBkYXRhIHBhZ2VzICovCisvKiBGSVhNRSBiaW8gaGFzIGJlZW4gZnJlZWQhISEgKi8KIAkJCWludCBpID0gYmlvLT5iaV92Y250OwogCQkJd2hpbGUgKGktLSkKIAkJCQlfX2ZyZWVfcGFnZShiaW8tPmJpX2lvX3ZlY1tpXS5idl9wYWdlKTsKQEAgLTQxNiwxMiArNDMxLDEyIEBACiAJCS8qIENob29zZSB0aGUgZmlyc3Qgb3BlcmF0aW9uIGRldmljZSwgZm9yIGNvbnNpc3RhbmN5ICovCiAJCW5ld19kaXNrID0gMDsKIAotCQlmb3IgKHJkZXYgPSBjb25mLT5taXJyb3JzW25ld19kaXNrXS5yZGV2OwotCQkgICAgICFyZGV2IHx8ICFyZGV2LT5pbl9zeW5jCisJCWZvciAocmRldiA9IHJjdV9kZXJlZmVyZW5jZShjb25mLT5taXJyb3JzW25ld19kaXNrXS5yZGV2KTsKKwkJICAgICAhcmRldiB8fCAhdGVzdF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKQogCQkJICAgICB8fCB0ZXN0X2JpdChXcml0ZU1vc3RseSwgJnJkZXYtPmZsYWdzKTsKLQkJICAgICByZGV2ID0gY29uZi0+bWlycm9yc1srK25ld19kaXNrXS5yZGV2KSB7CisJCSAgICAgcmRldiA9IHJjdV9kZXJlZmVyZW5jZShjb25mLT5taXJyb3JzWysrbmV3X2Rpc2tdLnJkZXYpKSB7CiAKLQkJCWlmIChyZGV2ICYmIHJkZXYtPmluX3N5bmMpCisJCQlpZiAocmRldiAmJiB0ZXN0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpKQogCQkJCXdvbmx5X2Rpc2sgPSBuZXdfZGlzazsKIAogCQkJaWYgKG5ld19kaXNrID09IGNvbmYtPnJhaWRfZGlza3MgLSAxKSB7CkBAIC00MzQsMTIgKzQ0OSwxMiBAQAogCiAKIAkvKiBtYWtlIHN1cmUgdGhlIGRpc2sgaXMgb3BlcmF0aW9uYWwgKi8KLQlmb3IgKHJkZXYgPSBjb25mLT5taXJyb3JzW25ld19kaXNrXS5yZGV2OwotCSAgICAgIXJkZXYgfHwgIXJkZXYtPmluX3N5bmMgfHwKKwlmb3IgKHJkZXYgPSByY3VfZGVyZWZlcmVuY2UoY29uZi0+bWlycm9yc1tuZXdfZGlza10ucmRldik7CisJICAgICAhcmRldiB8fCAhdGVzdF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKSB8fAogCQkgICAgIHRlc3RfYml0KFdyaXRlTW9zdGx5LCAmcmRldi0+ZmxhZ3MpOwotCSAgICAgcmRldiA9IGNvbmYtPm1pcnJvcnNbbmV3X2Rpc2tdLnJkZXYpIHsKKwkgICAgIHJkZXYgPSByY3VfZGVyZWZlcmVuY2UoY29uZi0+bWlycm9yc1tuZXdfZGlza10ucmRldikpIHsKIAotCQlpZiAocmRldiAmJiByZGV2LT5pbl9zeW5jKQorCQlpZiAocmRldiAmJiB0ZXN0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpKQogCQkJd29ubHlfZGlzayA9IG5ld19kaXNrOwogCiAJCWlmIChuZXdfZGlzayA8PSAwKQpAQCAtNDc0LDEwICs0ODksMTAgQEAKIAkJCWRpc2sgPSBjb25mLT5yYWlkX2Rpc2tzOwogCQlkaXNrLS07CiAKLQkJcmRldiA9IGNvbmYtPm1pcnJvcnNbZGlza10ucmRldjsKKwkJcmRldiA9IHJjdV9kZXJlZmVyZW5jZShjb25mLT5taXJyb3JzW2Rpc2tdLnJkZXYpOwogCiAJCWlmICghcmRldiB8fAotCQkgICAgIXJkZXYtPmluX3N5bmMgfHwKKwkJICAgICF0ZXN0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpIHx8CiAJCSAgICB0ZXN0X2JpdChXcml0ZU1vc3RseSwgJnJkZXYtPmZsYWdzKSkKIAkJCWNvbnRpbnVlOwogCkBAIC00OTYsMTEgKzUxMSwxMSBAQAogCiAKIAlpZiAobmV3X2Rpc2sgPj0gMCkgewotCQlyZGV2ID0gY29uZi0+bWlycm9yc1tuZXdfZGlza10ucmRldjsKKwkJcmRldiA9IHJjdV9kZXJlZmVyZW5jZShjb25mLT5taXJyb3JzW25ld19kaXNrXS5yZGV2KTsKIAkJaWYgKCFyZGV2KQogCQkJZ290byByZXRyeTsKIAkJYXRvbWljX2luYygmcmRldi0+bnJfcGVuZGluZyk7Ci0JCWlmICghcmRldi0+aW5fc3luYykgeworCQlpZiAoIXRlc3RfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncykpIHsKIAkJCS8qIGNhbm5vdCByaXNrIHJldHVybmluZyBhIGRldmljZSB0aGF0IGZhaWxlZAogCQkJICogYmVmb3JlIHdlIGluYydlZCBucl9wZW5kaW5nCiAJCQkgKi8KQEAgLTUyMiw4ICs1MzcsOCBAQAogCiAJcmN1X3JlYWRfbG9jaygpOwogCWZvciAoaT0wOyBpPG1kZGV2LT5yYWlkX2Rpc2tzOyBpKyspIHsKLQkJbWRrX3JkZXZfdCAqcmRldiA9IGNvbmYtPm1pcnJvcnNbaV0ucmRldjsKLQkJaWYgKHJkZXYgJiYgIXJkZXYtPmZhdWx0eSAmJiBhdG9taWNfcmVhZCgmcmRldi0+bnJfcGVuZGluZykpIHsKKwkJbWRrX3JkZXZfdCAqcmRldiA9IHJjdV9kZXJlZmVyZW5jZShjb25mLT5taXJyb3JzW2ldLnJkZXYpOworCQlpZiAocmRldiAmJiAhdGVzdF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpICYmIGF0b21pY19yZWFkKCZyZGV2LT5ucl9wZW5kaW5nKSkgewogCQkJcmVxdWVzdF9xdWV1ZV90ICpyX3F1ZXVlID0gYmRldl9nZXRfcXVldWUocmRldi0+YmRldik7CiAKIAkJCWF0b21pY19pbmMoJnJkZXYtPm5yX3BlbmRpbmcpOwpAQCAtNTU2LDggKzU3MSw4IEBACiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJZm9yIChpPTA7IGk8bWRkZXYtPnJhaWRfZGlza3MgJiYgcmV0ID09IDA7IGkrKykgewotCQltZGtfcmRldl90ICpyZGV2ID0gY29uZi0+bWlycm9yc1tpXS5yZGV2OwotCQlpZiAocmRldiAmJiAhcmRldi0+ZmF1bHR5KSB7CisJCW1ka19yZGV2X3QgKnJkZXYgPSByY3VfZGVyZWZlcmVuY2UoY29uZi0+bWlycm9yc1tpXS5yZGV2KTsKKwkJaWYgKHJkZXYgJiYgIXRlc3RfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKSkgewogCQkJc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiA9IHJkZXYtPmJkZXY7CiAJCQlyZXF1ZXN0X3F1ZXVlX3QgKnJfcXVldWUgPSBiZGV2X2dldF9xdWV1ZShiZGV2KTsKIApAQCAtNjQ4LDggKzY2Myw5IEBACiAJc3RydWN0IGJpb19saXN0IGJsOwogCXN0cnVjdCBwYWdlICoqYmVoaW5kX3BhZ2VzID0gTlVMTDsKIAljb25zdCBpbnQgcncgPSBiaW9fZGF0YV9kaXIoYmlvKTsKKwlpbnQgZG9fYmFycmllcnM7CiAKLQlpZiAodW5saWtlbHkoYmlvX2JhcnJpZXIoYmlvKSkpIHsKKwlpZiAodW5saWtlbHkoIW1kZGV2LT5iYXJyaWVyc193b3JrICYmIGJpb19iYXJyaWVyKGJpbykpKSB7CiAJCWJpb19lbmRpbyhiaW8sIGJpby0+Ymlfc2l6ZSwgLUVPUE5PVFNVUFApOwogCQlyZXR1cm4gMDsKIAl9CkBAIC03MjgsMTAgKzc0NCwxMCBAQAogI2VuZGlmCiAJcmN1X3JlYWRfbG9jaygpOwogCWZvciAoaSA9IDA7ICBpIDwgZGlza3M7IGkrKykgewotCQlpZiAoKHJkZXY9Y29uZi0+bWlycm9yc1tpXS5yZGV2KSAhPSBOVUxMICYmCi0JCSAgICAhcmRldi0+ZmF1bHR5KSB7CisJCWlmICgocmRldj1yY3VfZGVyZWZlcmVuY2UoY29uZi0+bWlycm9yc1tpXS5yZGV2KSkgIT0gTlVMTCAmJgorCQkgICAgIXRlc3RfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKSkgewogCQkJYXRvbWljX2luYygmcmRldi0+bnJfcGVuZGluZyk7Ci0JCQlpZiAocmRldi0+ZmF1bHR5KSB7CisJCQlpZiAodGVzdF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpKSB7CiAJCQkJYXRvbWljX2RlYygmcmRldi0+bnJfcGVuZGluZyk7CiAJCQkJcjFfYmlvLT5iaW9zW2ldID0gTlVMTDsKIAkJCX0gZWxzZQpAQCAtNzU5LDYgKzc3NSwxMCBAQAogCWF0b21pY19zZXQoJnIxX2Jpby0+cmVtYWluaW5nLCAwKTsKIAlhdG9taWNfc2V0KCZyMV9iaW8tPmJlaGluZF9yZW1haW5pbmcsIDApOwogCisJZG9fYmFycmllcnMgPSBiaW8tPmJpX3J3ICYgQklPX1JXX0JBUlJJRVI7CisJaWYgKGRvX2JhcnJpZXJzKQorCQlzZXRfYml0KFIxQklPX0JhcnJpZXIsICZyMV9iaW8tPnN0YXRlKTsKKwogCWJpb19saXN0X2luaXQoJmJsKTsKIAlmb3IgKGkgPSAwOyBpIDwgZGlza3M7IGkrKykgewogCQlzdHJ1Y3QgYmlvICptYmlvOwpAQCAtNzcxLDcgKzc5MSw3IEBACiAJCW1iaW8tPmJpX3NlY3Rvcgk9IHIxX2Jpby0+c2VjdG9yICsgY29uZi0+bWlycm9yc1tpXS5yZGV2LT5kYXRhX29mZnNldDsKIAkJbWJpby0+YmlfYmRldiA9IGNvbmYtPm1pcnJvcnNbaV0ucmRldi0+YmRldjsKIAkJbWJpby0+YmlfZW5kX2lvCT0gcmFpZDFfZW5kX3dyaXRlX3JlcXVlc3Q7Ci0JCW1iaW8tPmJpX3J3ID0gV1JJVEU7CisJCW1iaW8tPmJpX3J3ID0gV1JJVEUgfCBkb19iYXJyaWVyczsKIAkJbWJpby0+YmlfcHJpdmF0ZSA9IHIxX2JpbzsKIAogCQlpZiAoYmVoaW5kX3BhZ2VzKSB7CkBAIC04MjQsNyArODQ0LDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgY29uZi0+cmFpZF9kaXNrczsgaSsrKQogCQlzZXFfcHJpbnRmKHNlcSwgIiVzIiwKIAkJCSAgICAgIGNvbmYtPm1pcnJvcnNbaV0ucmRldiAmJgotCQkJICAgICAgY29uZi0+bWlycm9yc1tpXS5yZGV2LT5pbl9zeW5jID8gIlUiIDogIl8iKTsKKwkJCSAgICAgIHRlc3RfYml0KEluX3N5bmMsICZjb25mLT5taXJyb3JzW2ldLnJkZXYtPmZsYWdzKSA/ICJVIiA6ICJfIik7CiAJc2VxX3ByaW50ZihzZXEsICJdIik7CiB9CiAKQEAgLTg0MCwxNCArODYwLDE0IEBACiAJICogbmV4dCBsZXZlbCB1cCBrbm93LgogCSAqIGVsc2UgbWFyayB0aGUgZHJpdmUgYXMgZmFpbGVkCiAJICovCi0JaWYgKHJkZXYtPmluX3N5bmMKKwlpZiAodGVzdF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKQogCSAgICAmJiBjb25mLT53b3JraW5nX2Rpc2tzID09IDEpCiAJCS8qCiAJCSAqIERvbid0IGZhaWwgdGhlIGRyaXZlLCBhY3QgYXMgdGhvdWdoIHdlIHdlcmUganVzdCBhCiAJCSAqIG5vcm1hbCBzaW5nbGUgZHJpdmUKIAkJICovCiAJCXJldHVybjsKLQlpZiAocmRldi0+aW5fc3luYykgeworCWlmICh0ZXN0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpKSB7CiAJCW1kZGV2LT5kZWdyYWRlZCsrOwogCQljb25mLT53b3JraW5nX2Rpc2tzLS07CiAJCS8qCkBAIC04NTUsOCArODc1LDggQEAKIAkJICovCiAJCXNldF9iaXQoTURfUkVDT1ZFUllfRVJSLCAmbWRkZXYtPnJlY292ZXJ5KTsKIAl9Ci0JcmRldi0+aW5fc3luYyA9IDA7Ci0JcmRldi0+ZmF1bHR5ID0gMTsKKwljbGVhcl9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKTsKKwlzZXRfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKTsKIAltZGRldi0+c2JfZGlydHkgPSAxOwogCXByaW50ayhLRVJOX0FMRVJUICJyYWlkMTogRGlzayBmYWlsdXJlIG9uICVzLCBkaXNhYmxpbmcgZGV2aWNlLiBcbiIKIAkJIglPcGVyYXRpb24gY29udGludWluZyBvbiAlZCBkZXZpY2VzXG4iLApAQCAtODgxLDcgKzkwMSw3IEBACiAJCXRtcCA9IGNvbmYtPm1pcnJvcnMgKyBpOwogCQlpZiAodG1wLT5yZGV2KQogCQkJcHJpbnRrKCIgZGlzayAlZCwgd286JWQsIG86JWQsIGRldjolc1xuIiwKLQkJCQlpLCAhdG1wLT5yZGV2LT5pbl9zeW5jLCAhdG1wLT5yZGV2LT5mYXVsdHksCisJCQkJaSwgIXRlc3RfYml0KEluX3N5bmMsICZ0bXAtPnJkZXYtPmZsYWdzKSwgIXRlc3RfYml0KEZhdWx0eSwgJnRtcC0+cmRldi0+ZmxhZ3MpLAogCQkJCWJkZXZuYW1lKHRtcC0+cmRldi0+YmRldixiKSk7CiAJfQogfQpAQCAtOTEzLDExICs5MzMsMTEgQEAKIAlmb3IgKGkgPSAwOyBpIDwgY29uZi0+cmFpZF9kaXNrczsgaSsrKSB7CiAJCXRtcCA9IGNvbmYtPm1pcnJvcnMgKyBpOwogCQlpZiAodG1wLT5yZGV2IAotCQkgICAgJiYgIXRtcC0+cmRldi0+ZmF1bHR5Ci0JCSAgICAmJiAhdG1wLT5yZGV2LT5pbl9zeW5jKSB7CisJCSAgICAmJiAhdGVzdF9iaXQoRmF1bHR5LCAmdG1wLT5yZGV2LT5mbGFncykKKwkJICAgICYmICF0ZXN0X2JpdChJbl9zeW5jLCAmdG1wLT5yZGV2LT5mbGFncykpIHsKIAkJCWNvbmYtPndvcmtpbmdfZGlza3MrKzsKIAkJCW1kZGV2LT5kZWdyYWRlZC0tOwotCQkJdG1wLT5yZGV2LT5pbl9zeW5jID0gMTsKKwkJCXNldF9iaXQoSW5fc3luYywgJnRtcC0+cmRldi0+ZmxhZ3MpOwogCQl9CiAJfQogCkBAIC05NTQsNyArOTc0LDcgQEAKIAkJCWZvdW5kID0gMTsKIAkJCWlmIChyZGV2LT5zYXZlZF9yYWlkX2Rpc2sgIT0gbWlycm9yKQogCQkJCWNvbmYtPmZ1bGxzeW5jID0gMTsKLQkJCXAtPnJkZXYgPSByZGV2OworCQkJcmN1X2Fzc2lnbl9wb2ludGVyKHAtPnJkZXYsIHJkZXYpOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtOTcyLDcgKzk5Miw3IEBACiAJcHJpbnRfY29uZihjb25mKTsKIAlyZGV2ID0gcC0+cmRldjsKIAlpZiAocmRldikgewotCQlpZiAocmRldi0+aW5fc3luYyB8fAorCQlpZiAodGVzdF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKSB8fAogCQkgICAgYXRvbWljX3JlYWQoJnJkZXYtPm5yX3BlbmRpbmcpKSB7CiAJCQllcnIgPSAtRUJVU1k7CiAJCQlnb3RvIGFib3J0OwpAQCAtMTE1Myw2ICsxMTczLDM2IEBACiAJCWlmICh0ZXN0X2JpdChSMUJJT19Jc1N5bmMsICZyMV9iaW8tPnN0YXRlKSkgewogCQkJc3luY19yZXF1ZXN0X3dyaXRlKG1kZGV2LCByMV9iaW8pOwogCQkJdW5wbHVnID0gMTsKKwkJfSBlbHNlIGlmICh0ZXN0X2JpdChSMUJJT19CYXJyaWVyUmV0cnksICZyMV9iaW8tPnN0YXRlKSkgeworCQkJLyogc29tZSByZXF1ZXN0cyBpbiB0aGUgcjFiaW8gd2VyZSBCSU9fUldfQkFSUklFUgorCQkJICogcmVxdWVzdHMgd2hpY2ggZmFpbGVkIHdpdGggLUVOT1RTVVBQLiAgSG9odW1tLi4KKwkJCSAqIEJldHRlciByZXN1Ym1pdCB3aXRob3V0IHRoZSBiYXJyaWVyLgorCQkJICogV2Uga25vdyB3aGljaCBkZXZpY2VzIHRvIHJlc3VibWl0IGZvciwgYmVjYXVzZQorCQkJICogYWxsIG90aGVycyBoYXZlIGhhZCB0aGVpciBiaW9zW10gZW50cnkgY2xlYXJlZC4KKwkJCSAqLworCQkJaW50IGk7CisJCQljbGVhcl9iaXQoUjFCSU9fQmFycmllclJldHJ5LCAmcjFfYmlvLT5zdGF0ZSk7CisJCQljbGVhcl9iaXQoUjFCSU9fQmFycmllciwgJnIxX2Jpby0+c3RhdGUpOworCQkJZm9yIChpPTA7IGkgPCBjb25mLT5yYWlkX2Rpc2tzOyBpKyspCisJCQkJaWYgKHIxX2Jpby0+Ymlvc1tpXSkgeworCQkJCQlzdHJ1Y3QgYmlvX3ZlYyAqYnZlYzsKKwkJCQkJaW50IGo7CisKKwkJCQkJYmlvID0gYmlvX2Nsb25lKHIxX2Jpby0+bWFzdGVyX2JpbywgR0ZQX05PSU8pOworCQkJCQkvKiBjb3B5IHBhZ2VzIGZyb20gdGhlIGZhaWxlZCBiaW8sIGFzCisJCQkJCSAqIHRoaXMgbWlnaHQgYmUgYSB3cml0ZS1iZWhpbmQgZGV2aWNlICovCisJCQkJCV9fYmlvX2Zvcl9lYWNoX3NlZ21lbnQoYnZlYywgYmlvLCBqLCAwKQorCQkJCQkJYnZlYy0+YnZfcGFnZSA9IGJpb19pb3ZlY19pZHgocjFfYmlvLT5iaW9zW2ldLCBqKS0+YnZfcGFnZTsKKwkJCQkJYmlvX3B1dChyMV9iaW8tPmJpb3NbaV0pOworCQkJCQliaW8tPmJpX3NlY3RvciA9IHIxX2Jpby0+c2VjdG9yICsKKwkJCQkJCWNvbmYtPm1pcnJvcnNbaV0ucmRldi0+ZGF0YV9vZmZzZXQ7CisJCQkJCWJpby0+YmlfYmRldiA9IGNvbmYtPm1pcnJvcnNbaV0ucmRldi0+YmRldjsKKwkJCQkJYmlvLT5iaV9lbmRfaW8gPSByYWlkMV9lbmRfd3JpdGVfcmVxdWVzdDsKKwkJCQkJYmlvLT5iaV9ydyA9IFdSSVRFOworCQkJCQliaW8tPmJpX3ByaXZhdGUgPSByMV9iaW87CisJCQkJCXIxX2Jpby0+Ymlvc1tpXSA9IGJpbzsKKwkJCQkJZ2VuZXJpY19tYWtlX3JlcXVlc3QoYmlvKTsKKwkJCQl9CiAJCX0gZWxzZSB7CiAJCQlpbnQgZGlzazsKIAkJCWJpbyA9IHIxX2Jpby0+Ymlvc1tyMV9iaW8tPnJlYWRfZGlza107CkBAIC0xMjYwLDcgKzEzMTAsNyBAQAogCSAqIFRoaXMgY2FsbCB0aGUgYml0bWFwX3N0YXJ0X3N5bmMgZG9lc24ndCBhY3R1YWxseSByZWNvcmQgYW55dGhpbmcKIAkgKi8KIAlpZiAoIWJpdG1hcF9zdGFydF9zeW5jKG1kZGV2LT5iaXRtYXAsIHNlY3Rvcl9uciwgJnN5bmNfYmxvY2tzLCAxKSAmJgotCSAgICAhY29uZi0+ZnVsbHN5bmMpIHsKKwkgICAgIWNvbmYtPmZ1bGxzeW5jICYmICF0ZXN0X2JpdChNRF9SRUNPVkVSWV9SRVFVRVNURUQsICZtZGRldi0+cmVjb3ZlcnkpKSB7CiAJCS8qIFdlIGNhbiBza2lwIHRoaXMgYmxvY2ssIGFuZCBwcm9iYWJseSBzZXZlcmFsIG1vcmUgKi8KIAkJKnNraXBwZWQgPSAxOwogCQlyZXR1cm4gc3luY19ibG9ja3M7CkBAIC0xMjgyLDExICsxMzMyLDExIEBACiAJLyogbWFrZSBzdXJlIGRpc2sgaXMgb3BlcmF0aW9uYWwgKi8KIAl3b25seSA9IGRpc2s7CiAJd2hpbGUgKGNvbmYtPm1pcnJvcnNbZGlza10ucmRldiA9PSBOVUxMIHx8Ci0JICAgICAgICFjb25mLT5taXJyb3JzW2Rpc2tdLnJkZXYtPmluX3N5bmMgfHwKKwkgICAgICAgIXRlc3RfYml0KEluX3N5bmMsICZjb25mLT5taXJyb3JzW2Rpc2tdLnJkZXYtPmZsYWdzKSB8fAogCSAgICAgICB0ZXN0X2JpdChXcml0ZU1vc3RseSwgJmNvbmYtPm1pcnJvcnNbZGlza10ucmRldi0+ZmxhZ3MpCiAJCSkgewogCQlpZiAoY29uZi0+bWlycm9yc1tkaXNrXS5yZGV2ICAmJgotCQkgICAgY29uZi0+bWlycm9yc1tkaXNrXS5yZGV2LT5pbl9zeW5jKQorCQkgICAgdGVzdF9iaXQoSW5fc3luYywgJmNvbmYtPm1pcnJvcnNbZGlza10ucmRldi0+ZmxhZ3MpKQogCQkJd29ubHkgPSBkaXNrOwogCQlpZiAoZGlzayA8PSAwKQogCQkJZGlzayA9IGNvbmYtPnJhaWRfZGlza3M7CkBAIC0xMzMzLDExICsxMzgzLDEyIEBACiAJCQliaW8tPmJpX3J3ID0gUkVBRDsKIAkJCWJpby0+YmlfZW5kX2lvID0gZW5kX3N5bmNfcmVhZDsKIAkJfSBlbHNlIGlmIChjb25mLT5taXJyb3JzW2ldLnJkZXYgPT0gTlVMTCB8fAotCQkJICAgY29uZi0+bWlycm9yc1tpXS5yZGV2LT5mYXVsdHkpIHsKKwkJCSAgIHRlc3RfYml0KEZhdWx0eSwgJmNvbmYtPm1pcnJvcnNbaV0ucmRldi0+ZmxhZ3MpKSB7CiAJCQlzdGlsbF9kZWdyYWRlZCA9IDE7CiAJCQljb250aW51ZTsKLQkJfSBlbHNlIGlmICghY29uZi0+bWlycm9yc1tpXS5yZGV2LT5pbl9zeW5jIHx8Ci0JCQkgICBzZWN0b3JfbnIgKyBSRVNZTkNfU0VDVE9SUyA+IG1kZGV2LT5yZWNvdmVyeV9jcCkgeworCQl9IGVsc2UgaWYgKCF0ZXN0X2JpdChJbl9zeW5jLCAmY29uZi0+bWlycm9yc1tpXS5yZGV2LT5mbGFncykgfHwKKwkJCSAgIHNlY3Rvcl9uciArIFJFU1lOQ19TRUNUT1JTID4gbWRkZXYtPnJlY292ZXJ5X2NwICAgfHwKKwkJCSAgIHRlc3RfYml0KE1EX1JFQ09WRVJZX1JFUVVFU1RFRCwgJm1kZGV2LT5yZWNvdmVyeSkpIHsKIAkJCWJpby0+YmlfcncgPSBXUklURTsKIAkJCWJpby0+YmlfZW5kX2lvID0gZW5kX3N5bmNfd3JpdGU7CiAJCQl3cml0ZV90YXJnZXRzICsrOwpAQCAtMTM3MSw4ICsxNDIyLDkgQEAKIAkJCWJyZWFrOwogCQlpZiAoc3luY19ibG9ja3MgPT0gMCkgewogCQkJaWYgKCFiaXRtYXBfc3RhcnRfc3luYyhtZGRldi0+Yml0bWFwLCBzZWN0b3JfbnIsCi0JCQkJCSZzeW5jX2Jsb2Nrcywgc3RpbGxfZGVncmFkZWQpICYmCi0JCQkJCSFjb25mLT5mdWxsc3luYykKKwkJCQkJICAgICAgICZzeW5jX2Jsb2Nrcywgc3RpbGxfZGVncmFkZWQpICYmCisJCQkgICAgIWNvbmYtPmZ1bGxzeW5jICYmCisJCQkgICAgIXRlc3RfYml0KE1EX1JFQ09WRVJZX1JFUVVFU1RFRCwgJm1kZGV2LT5yZWNvdmVyeSkpCiAJCQkJYnJlYWs7CiAJCQlpZiAoc3luY19ibG9ja3MgPCAoUEFHRV9TSVpFPj45KSkKIAkJCQlCVUcoKTsKQEAgLTE0NzgsNyArMTUzMCw3IEBACiAJCQlibGtfcXVldWVfbWF4X3NlY3RvcnMobWRkZXYtPnF1ZXVlLCBQQUdFX1NJWkU+PjkpOwogCiAJCWRpc2stPmhlYWRfcG9zaXRpb24gPSAwOwotCQlpZiAoIXJkZXYtPmZhdWx0eSAmJiByZGV2LT5pbl9zeW5jKQorCQlpZiAoIXRlc3RfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKSAmJiB0ZXN0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpKQogCQkJY29uZi0+d29ya2luZ19kaXNrcysrOwogCX0KIAljb25mLT5yYWlkX2Rpc2tzID0gbWRkZXYtPnJhaWRfZGlza3M7CkBAIC0xNTE4LDcgKzE1NzAsNyBAQAogCSAqLwogCWZvciAoaiA9IDA7IGogPCBjb25mLT5yYWlkX2Rpc2tzICYmCiAJCSAgICAgKCFjb25mLT5taXJyb3JzW2pdLnJkZXYgfHwKLQkJICAgICAgIWNvbmYtPm1pcnJvcnNbal0ucmRldi0+aW5fc3luYykgOyBqKyspCisJCSAgICAgICF0ZXN0X2JpdChJbl9zeW5jLCAmY29uZi0+bWlycm9yc1tqXS5yZGV2LT5mbGFncykpIDsgaisrKQogCQkvKiBub3RoaW5nICovOwogCWNvbmYtPmxhc3RfdXNlZCA9IGo7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDEwLmMgYi9kcml2ZXJzL21kL3JhaWQxMC5jCmluZGV4IGJiZTQwZTkuLjg2N2YwNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDEwLmMKKysrIGIvZHJpdmVycy9tZC9yYWlkMTAuYwpAQCAtNDk2LDYgKzQ5Niw3IEBACiAJaW50IGRpc2ssIHNsb3QsIG5zbG90OwogCWNvbnN0IGludCBzZWN0b3JzID0gcjEwX2Jpby0+c2VjdG9yczsKIAlzZWN0b3JfdCBuZXdfZGlzdGFuY2UsIGN1cnJlbnRfZGlzdGFuY2U7CisJbWRrX3JkZXZfdCAqcmRldjsKIAogCXJhaWQxMF9maW5kX3BoeXMoY29uZiwgcjEwX2Jpbyk7CiAJcmN1X3JlYWRfbG9jaygpOwpAQCAtNTEwLDggKzUxMSw4IEBACiAJCXNsb3QgPSAwOwogCQlkaXNrID0gcjEwX2Jpby0+ZGV2c1tzbG90XS5kZXZudW07CiAKLQkJd2hpbGUgKCFjb25mLT5taXJyb3JzW2Rpc2tdLnJkZXYgfHwKLQkJICAgICAgICFjb25mLT5taXJyb3JzW2Rpc2tdLnJkZXYtPmluX3N5bmMpIHsKKwkJd2hpbGUgKChyZGV2ID0gcmN1X2RlcmVmZXJlbmNlKGNvbmYtPm1pcnJvcnNbZGlza10ucmRldikpID09IE5VTEwgfHwKKwkJICAgICAgICF0ZXN0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpKSB7CiAJCQlzbG90Kys7CiAJCQlpZiAoc2xvdCA9PSBjb25mLT5jb3BpZXMpIHsKIAkJCQlzbG90ID0gMDsKQEAgLTUyNyw4ICs1MjgsOCBAQAogCS8qIG1ha2Ugc3VyZSB0aGUgZGlzayBpcyBvcGVyYXRpb25hbCAqLwogCXNsb3QgPSAwOwogCWRpc2sgPSByMTBfYmlvLT5kZXZzW3Nsb3RdLmRldm51bTsKLQl3aGlsZSAoIWNvbmYtPm1pcnJvcnNbZGlza10ucmRldiB8fAotCSAgICAgICAhY29uZi0+bWlycm9yc1tkaXNrXS5yZGV2LT5pbl9zeW5jKSB7CisJd2hpbGUgKChyZGV2PXJjdV9kZXJlZmVyZW5jZShjb25mLT5taXJyb3JzW2Rpc2tdLnJkZXYpKSA9PSBOVUxMIHx8CisJICAgICAgICF0ZXN0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpKSB7CiAJCXNsb3QgKys7CiAJCWlmIChzbG90ID09IGNvbmYtPmNvcGllcykgewogCQkJZGlzayA9IC0xOwpAQCAtNTQ3LDExICs1NDgsMTEgQEAKIAkJaW50IG5kaXNrID0gcjEwX2Jpby0+ZGV2c1tuc2xvdF0uZGV2bnVtOwogCiAKLQkJaWYgKCFjb25mLT5taXJyb3JzW25kaXNrXS5yZGV2IHx8Ci0JCSAgICAhY29uZi0+bWlycm9yc1tuZGlza10ucmRldi0+aW5fc3luYykKKwkJaWYgKChyZGV2PXJjdV9kZXJlZmVyZW5jZShjb25mLT5taXJyb3JzW25kaXNrXS5yZGV2KSkgPT0gTlVMTCB8fAorCQkgICAgIXRlc3RfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncykpCiAJCQljb250aW51ZTsKIAotCQlpZiAoIWF0b21pY19yZWFkKCZjb25mLT5taXJyb3JzW25kaXNrXS5yZGV2LT5ucl9wZW5kaW5nKSkgeworCQlpZiAoIWF0b21pY19yZWFkKCZyZGV2LT5ucl9wZW5kaW5nKSkgewogCQkJZGlzayA9IG5kaXNrOwogCQkJc2xvdCA9IG5zbG90OwogCQkJYnJlYWs7CkBAIC01NjksNyArNTcwLDcgQEAKIAlyMTBfYmlvLT5yZWFkX3Nsb3QgPSBzbG90OwogLyoJY29uZi0+bmV4dF9zZXFfc2VjdCA9IHRoaXNfc2VjdG9yICsgc2VjdG9yczsqLwogCi0JaWYgKGRpc2sgPj0gMCAmJiBjb25mLT5taXJyb3JzW2Rpc2tdLnJkZXYpCisJaWYgKGRpc2sgPj0gMCAmJiAocmRldj1yY3VfZGVyZWZlcmVuY2UoY29uZi0+bWlycm9yc1tkaXNrXS5yZGV2KSkhPSBOVUxMKQogCQlhdG9taWNfaW5jKCZjb25mLT5taXJyb3JzW2Rpc2tdLnJkZXYtPm5yX3BlbmRpbmcpOwogCXJjdV9yZWFkX3VubG9jaygpOwogCkBAIC01ODMsOCArNTg0LDggQEAKIAogCXJjdV9yZWFkX2xvY2soKTsKIAlmb3IgKGk9MDsgaTxtZGRldi0+cmFpZF9kaXNrczsgaSsrKSB7Ci0JCW1ka19yZGV2X3QgKnJkZXYgPSBjb25mLT5taXJyb3JzW2ldLnJkZXY7Ci0JCWlmIChyZGV2ICYmICFyZGV2LT5mYXVsdHkgJiYgYXRvbWljX3JlYWQoJnJkZXYtPm5yX3BlbmRpbmcpKSB7CisJCW1ka19yZGV2X3QgKnJkZXYgPSByY3VfZGVyZWZlcmVuY2UoY29uZi0+bWlycm9yc1tpXS5yZGV2KTsKKwkJaWYgKHJkZXYgJiYgIXRlc3RfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKSAmJiBhdG9taWNfcmVhZCgmcmRldi0+bnJfcGVuZGluZykpIHsKIAkJCXJlcXVlc3RfcXVldWVfdCAqcl9xdWV1ZSA9IGJkZXZfZ2V0X3F1ZXVlKHJkZXYtPmJkZXYpOwogCiAJCQlhdG9taWNfaW5jKCZyZGV2LT5ucl9wZW5kaW5nKTsKQEAgLTYxNCw4ICs2MTUsOCBAQAogCiAJcmN1X3JlYWRfbG9jaygpOwogCWZvciAoaT0wOyBpPG1kZGV2LT5yYWlkX2Rpc2tzICYmIHJldCA9PSAwOyBpKyspIHsKLQkJbWRrX3JkZXZfdCAqcmRldiA9IGNvbmYtPm1pcnJvcnNbaV0ucmRldjsKLQkJaWYgKHJkZXYgJiYgIXJkZXYtPmZhdWx0eSkgeworCQltZGtfcmRldl90ICpyZGV2ID0gcmN1X2RlcmVmZXJlbmNlKGNvbmYtPm1pcnJvcnNbaV0ucmRldik7CisJCWlmIChyZGV2ICYmICF0ZXN0X2JpdChGYXVsdHksICZyZGV2LT5mbGFncykpIHsKIAkJCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYgPSByZGV2LT5iZGV2OwogCQkJcmVxdWVzdF9xdWV1ZV90ICpyX3F1ZXVlID0gYmRldl9nZXRfcXVldWUoYmRldik7CiAKQEAgLTc2OCw5ICs3NjksMTAgQEAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJZm9yIChpID0gMDsgIGkgPCBjb25mLT5jb3BpZXM7IGkrKykgewogCQlpbnQgZCA9IHIxMF9iaW8tPmRldnNbaV0uZGV2bnVtOwotCQlpZiAoY29uZi0+bWlycm9yc1tkXS5yZGV2ICYmCi0JCSAgICAhY29uZi0+bWlycm9yc1tkXS5yZGV2LT5mYXVsdHkpIHsKLQkJCWF0b21pY19pbmMoJmNvbmYtPm1pcnJvcnNbZF0ucmRldi0+bnJfcGVuZGluZyk7CisJCW1ka19yZGV2X3QgKnJkZXYgPSByY3VfZGVyZWZlcmVuY2UoY29uZi0+bWlycm9yc1tkXS5yZGV2KTsKKwkJaWYgKHJkZXYgJiYKKwkJICAgICF0ZXN0X2JpdChGYXVsdHksICZyZGV2LT5mbGFncykpIHsKKwkJCWF0b21pY19pbmMoJnJkZXYtPm5yX3BlbmRpbmcpOwogCQkJcjEwX2Jpby0+ZGV2c1tpXS5iaW8gPSBiaW87CiAJCX0gZWxzZQogCQkJcjEwX2Jpby0+ZGV2c1tpXS5iaW8gPSBOVUxMOwpAQCAtODI0LDcgKzgyNiw3IEBACiAJZm9yIChpID0gMDsgaSA8IGNvbmYtPnJhaWRfZGlza3M7IGkrKykKIAkJc2VxX3ByaW50ZihzZXEsICIlcyIsCiAJCQkgICAgICBjb25mLT5taXJyb3JzW2ldLnJkZXYgJiYKLQkJCSAgICAgIGNvbmYtPm1pcnJvcnNbaV0ucmRldi0+aW5fc3luYyA/ICJVIiA6ICJfIik7CisJCQkgICAgICB0ZXN0X2JpdChJbl9zeW5jLCAmY29uZi0+bWlycm9yc1tpXS5yZGV2LT5mbGFncykgPyAiVSIgOiAiXyIpOwogCXNlcV9wcmludGYoc2VxLCAiXSIpOwogfQogCkBAIC04MzksNyArODQxLDcgQEAKIAkgKiBuZXh0IGxldmVsIHVwIGtub3cuCiAJICogZWxzZSBtYXJrIHRoZSBkcml2ZSBhcyBmYWlsZWQKIAkgKi8KLQlpZiAocmRldi0+aW5fc3luYworCWlmICh0ZXN0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpCiAJICAgICYmIGNvbmYtPndvcmtpbmdfZGlza3MgPT0gMSkKIAkJLyoKIAkJICogRG9uJ3QgZmFpbCB0aGUgZHJpdmUsIGp1c3QgcmV0dXJuIGFuIElPIGVycm9yLgpAQCAtODQ5LDcgKzg1MSw3IEBACiAJCSAqIHJlYWxseSBkZWFkIiB0ZXN0cy4uLgogCQkgKi8KIAkJcmV0dXJuOwotCWlmIChyZGV2LT5pbl9zeW5jKSB7CisJaWYgKHRlc3RfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncykpIHsKIAkJbWRkZXYtPmRlZ3JhZGVkKys7CiAJCWNvbmYtPndvcmtpbmdfZGlza3MtLTsKIAkJLyoKQEAgLTg1Nyw4ICs4NTksOCBAQAogCQkgKi8KIAkJc2V0X2JpdChNRF9SRUNPVkVSWV9FUlIsICZtZGRldi0+cmVjb3ZlcnkpOwogCX0KLQlyZGV2LT5pbl9zeW5jID0gMDsKLQlyZGV2LT5mYXVsdHkgPSAxOworCWNsZWFyX2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpOworCXNldF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpOwogCW1kZGV2LT5zYl9kaXJ0eSA9IDE7CiAJcHJpbnRrKEtFUk5fQUxFUlQgInJhaWQxMDogRGlzayBmYWlsdXJlIG9uICVzLCBkaXNhYmxpbmcgZGV2aWNlLiBcbiIKIAkJIglPcGVyYXRpb24gY29udGludWluZyBvbiAlZCBkZXZpY2VzXG4iLApAQCAtODgzLDcgKzg4NSw4IEBACiAJCXRtcCA9IGNvbmYtPm1pcnJvcnMgKyBpOwogCQlpZiAodG1wLT5yZGV2KQogCQkJcHJpbnRrKCIgZGlzayAlZCwgd286JWQsIG86JWQsIGRldjolc1xuIiwKLQkJCQlpLCAhdG1wLT5yZGV2LT5pbl9zeW5jLCAhdG1wLT5yZGV2LT5mYXVsdHksCisJCQkJaSwgIXRlc3RfYml0KEluX3N5bmMsICZ0bXAtPnJkZXYtPmZsYWdzKSwKKwkJCSAgICAgICAgIXRlc3RfYml0KEZhdWx0eSwgJnRtcC0+cmRldi0+ZmxhZ3MpLAogCQkJCWJkZXZuYW1lKHRtcC0+cmRldi0+YmRldixiKSk7CiAJfQogfQpAQCAtOTM2LDExICs5MzksMTEgQEAKIAlmb3IgKGkgPSAwOyBpIDwgY29uZi0+cmFpZF9kaXNrczsgaSsrKSB7CiAJCXRtcCA9IGNvbmYtPm1pcnJvcnMgKyBpOwogCQlpZiAodG1wLT5yZGV2Ci0JCSAgICAmJiAhdG1wLT5yZGV2LT5mYXVsdHkKLQkJICAgICYmICF0bXAtPnJkZXYtPmluX3N5bmMpIHsKKwkJICAgICYmICF0ZXN0X2JpdChGYXVsdHksICZ0bXAtPnJkZXYtPmZsYWdzKQorCQkgICAgJiYgIXRlc3RfYml0KEluX3N5bmMsICZ0bXAtPnJkZXYtPmZsYWdzKSkgewogCQkJY29uZi0+d29ya2luZ19kaXNrcysrOwogCQkJbWRkZXYtPmRlZ3JhZGVkLS07Ci0JCQl0bXAtPnJkZXYtPmluX3N5bmMgPSAxOworCQkJc2V0X2JpdChJbl9zeW5jLCAmdG1wLT5yZGV2LT5mbGFncyk7CiAJCX0KIAl9CiAKQEAgLTk4MCw3ICs5ODMsNyBAQAogCQkJcC0+aGVhZF9wb3NpdGlvbiA9IDA7CiAJCQlyZGV2LT5yYWlkX2Rpc2sgPSBtaXJyb3I7CiAJCQlmb3VuZCA9IDE7Ci0JCQlwLT5yZGV2ID0gcmRldjsKKwkJCXJjdV9hc3NpZ25fcG9pbnRlcihwLT5yZGV2LCByZGV2KTsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTk5OCw3ICsxMDAxLDcgQEAKIAlwcmludF9jb25mKGNvbmYpOwogCXJkZXYgPSBwLT5yZGV2OwogCWlmIChyZGV2KSB7Ci0JCWlmIChyZGV2LT5pbl9zeW5jIHx8CisJCWlmICh0ZXN0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpIHx8CiAJCSAgICBhdG9taWNfcmVhZCgmcmRldi0+bnJfcGVuZGluZykpIHsKIAkJCWVyciA9IC1FQlVTWTsKIAkJCWdvdG8gYWJvcnQ7CkBAIC0xNDE0LDcgKzE0MTcsNyBAQAogCiAJCWZvciAoaT0wIDsgaTxjb25mLT5yYWlkX2Rpc2tzOyBpKyspCiAJCQlpZiAoY29uZi0+bWlycm9yc1tpXS5yZGV2ICYmCi0JCQkgICAgIWNvbmYtPm1pcnJvcnNbaV0ucmRldi0+aW5fc3luYykgeworCQkJICAgICF0ZXN0X2JpdChJbl9zeW5jLCAmY29uZi0+bWlycm9yc1tpXS5yZGV2LT5mbGFncykpIHsKIAkJCQkvKiB3YW50IHRvIHJlY29uc3RydWN0IHRoaXMgZGV2aWNlICovCiAJCQkJcjEwYmlvX3QgKnJiMiA9IHIxMF9iaW87CiAKQEAgLTE0MzUsNyArMTQzOCw3IEBACiAJCQkJZm9yIChqPTA7IGo8Y29uZi0+Y29waWVzO2orKykgewogCQkJCQlpbnQgZCA9IHIxMF9iaW8tPmRldnNbal0uZGV2bnVtOwogCQkJCQlpZiAoY29uZi0+bWlycm9yc1tkXS5yZGV2ICYmCi0JCQkJCSAgICBjb25mLT5taXJyb3JzW2RdLnJkZXYtPmluX3N5bmMpIHsKKwkJCQkJICAgIHRlc3RfYml0KEluX3N5bmMsICZjb25mLT5taXJyb3JzW2RdLnJkZXYtPmZsYWdzKSkgewogCQkJCQkJLyogVGhpcyBpcyB3aGVyZSB3ZSByZWFkIGZyb20gKi8KIAkJCQkJCWJpbyA9IHIxMF9iaW8tPmRldnNbMF0uYmlvOwogCQkJCQkJYmlvLT5iaV9uZXh0ID0gYmlvbGlzdDsKQEAgLTE1MTEsNyArMTUxNCw3IEBACiAJCQliaW8gPSByMTBfYmlvLT5kZXZzW2ldLmJpbzsKIAkJCWJpby0+YmlfZW5kX2lvID0gTlVMTDsKIAkJCWlmIChjb25mLT5taXJyb3JzW2RdLnJkZXYgPT0gTlVMTCB8fAotCQkJICAgIGNvbmYtPm1pcnJvcnNbZF0ucmRldi0+ZmF1bHR5KQorCQkJICAgIHRlc3RfYml0KEZhdWx0eSwgJmNvbmYtPm1pcnJvcnNbZF0ucmRldi0+ZmxhZ3MpKQogCQkJCWNvbnRpbnVlOwogCQkJYXRvbWljX2luYygmY29uZi0+bWlycm9yc1tkXS5yZGV2LT5ucl9wZW5kaW5nKTsKIAkJCWF0b21pY19pbmMoJnIxMF9iaW8tPnJlbWFpbmluZyk7CkBAIC0xNjk3LDcgKzE3MDAsNyBAQAogCQkJbWRkZXYtPnF1ZXVlLT5tYXhfc2VjdG9ycyA9IChQQUdFX1NJWkU+PjkpOwogCiAJCWRpc2stPmhlYWRfcG9zaXRpb24gPSAwOwotCQlpZiAoIXJkZXYtPmZhdWx0eSAmJiByZGV2LT5pbl9zeW5jKQorCQlpZiAoIXRlc3RfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKSAmJiB0ZXN0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpKQogCQkJY29uZi0+d29ya2luZ19kaXNrcysrOwogCX0KIAljb25mLT5yYWlkX2Rpc2tzID0gbWRkZXYtPnJhaWRfZGlza3M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQ1LmMgYi9kcml2ZXJzL21kL3JhaWQ1LmMKaW5kZXggMTIyM2U5OC4uZTJhNDAyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkNS5jCisrKyBiL2RyaXZlcnMvbWQvcmFpZDUuYwpAQCAtMjkzLDkgKzI5MywzMSBAQAogCXJldHVybiBzaDsKIH0KIAotc3RhdGljIGludCBncm93X3N0cmlwZXMocmFpZDVfY29uZl90ICpjb25mLCBpbnQgbnVtKQorc3RhdGljIGludCBncm93X29uZV9zdHJpcGUocmFpZDVfY29uZl90ICpjb25mKQogewogCXN0cnVjdCBzdHJpcGVfaGVhZCAqc2g7CisJc2ggPSBrbWVtX2NhY2hlX2FsbG9jKGNvbmYtPnNsYWJfY2FjaGUsIEdGUF9LRVJORUwpOworCWlmICghc2gpCisJCXJldHVybiAwOworCW1lbXNldChzaCwgMCwgc2l6ZW9mKCpzaCkgKyAoY29uZi0+cmFpZF9kaXNrcy0xKSpzaXplb2Yoc3RydWN0IHI1ZGV2KSk7CisJc2gtPnJhaWRfY29uZiA9IGNvbmY7CisJc3Bpbl9sb2NrX2luaXQoJnNoLT5sb2NrKTsKKworCWlmIChncm93X2J1ZmZlcnMoc2gsIGNvbmYtPnJhaWRfZGlza3MpKSB7CisJCXNocmlua19idWZmZXJzKHNoLCBjb25mLT5yYWlkX2Rpc2tzKTsKKwkJa21lbV9jYWNoZV9mcmVlKGNvbmYtPnNsYWJfY2FjaGUsIHNoKTsKKwkJcmV0dXJuIDA7CisJfQorCS8qIHdlIGp1c3QgY3JlYXRlZCBhbiBhY3RpdmUgc3RyaXBlIHNvLi4uICovCisJYXRvbWljX3NldCgmc2gtPmNvdW50LCAxKTsKKwlhdG9taWNfaW5jKCZjb25mLT5hY3RpdmVfc3RyaXBlcyk7CisJSU5JVF9MSVNUX0hFQUQoJnNoLT5scnUpOworCXJlbGVhc2Vfc3RyaXBlKHNoKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBncm93X3N0cmlwZXMocmFpZDVfY29uZl90ICpjb25mLCBpbnQgbnVtKQorewogCWttZW1fY2FjaGVfdCAqc2M7CiAJaW50IGRldnMgPSBjb25mLT5yYWlkX2Rpc2tzOwogCkBAIC0zMDgsNDggKzMzMCwzOSBAQAogCQlyZXR1cm4gMTsKIAljb25mLT5zbGFiX2NhY2hlID0gc2M7CiAJd2hpbGUgKG51bS0tKSB7Ci0JCXNoID0ga21lbV9jYWNoZV9hbGxvYyhzYywgR0ZQX0tFUk5FTCk7Ci0JCWlmICghc2gpCisJCWlmICghZ3Jvd19vbmVfc3RyaXBlKGNvbmYpKQogCQkJcmV0dXJuIDE7Ci0JCW1lbXNldChzaCwgMCwgc2l6ZW9mKCpzaCkgKyAoZGV2cy0xKSpzaXplb2Yoc3RydWN0IHI1ZGV2KSk7Ci0JCXNoLT5yYWlkX2NvbmYgPSBjb25mOwotCQlzcGluX2xvY2tfaW5pdCgmc2gtPmxvY2spOwotCi0JCWlmIChncm93X2J1ZmZlcnMoc2gsIGNvbmYtPnJhaWRfZGlza3MpKSB7Ci0JCQlzaHJpbmtfYnVmZmVycyhzaCwgY29uZi0+cmFpZF9kaXNrcyk7Ci0JCQlrbWVtX2NhY2hlX2ZyZWUoc2MsIHNoKTsKLQkJCXJldHVybiAxOwotCQl9Ci0JCS8qIHdlIGp1c3QgY3JlYXRlZCBhbiBhY3RpdmUgc3RyaXBlIHNvLi4uICovCi0JCWF0b21pY19zZXQoJnNoLT5jb3VudCwgMSk7Ci0JCWF0b21pY19pbmMoJmNvbmYtPmFjdGl2ZV9zdHJpcGVzKTsKLQkJSU5JVF9MSVNUX0hFQUQoJnNoLT5scnUpOwotCQlyZWxlYXNlX3N0cmlwZShzaCk7CiAJfQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBzaHJpbmtfc3RyaXBlcyhyYWlkNV9jb25mX3QgKmNvbmYpCitzdGF0aWMgaW50IGRyb3Bfb25lX3N0cmlwZShyYWlkNV9jb25mX3QgKmNvbmYpCiB7CiAJc3RydWN0IHN0cmlwZV9oZWFkICpzaDsKIAotCXdoaWxlICgxKSB7Ci0JCXNwaW5fbG9ja19pcnEoJmNvbmYtPmRldmljZV9sb2NrKTsKLQkJc2ggPSBnZXRfZnJlZV9zdHJpcGUoY29uZik7Ci0JCXNwaW5fdW5sb2NrX2lycSgmY29uZi0+ZGV2aWNlX2xvY2spOwotCQlpZiAoIXNoKQotCQkJYnJlYWs7Ci0JCWlmIChhdG9taWNfcmVhZCgmc2gtPmNvdW50KSkKLQkJCUJVRygpOwotCQlzaHJpbmtfYnVmZmVycyhzaCwgY29uZi0+cmFpZF9kaXNrcyk7Ci0JCWttZW1fY2FjaGVfZnJlZShjb25mLT5zbGFiX2NhY2hlLCBzaCk7Ci0JCWF0b21pY19kZWMoJmNvbmYtPmFjdGl2ZV9zdHJpcGVzKTsKLQl9CisJc3Bpbl9sb2NrX2lycSgmY29uZi0+ZGV2aWNlX2xvY2spOworCXNoID0gZ2V0X2ZyZWVfc3RyaXBlKGNvbmYpOworCXNwaW5fdW5sb2NrX2lycSgmY29uZi0+ZGV2aWNlX2xvY2spOworCWlmICghc2gpCisJCXJldHVybiAwOworCWlmIChhdG9taWNfcmVhZCgmc2gtPmNvdW50KSkKKwkJQlVHKCk7CisJc2hyaW5rX2J1ZmZlcnMoc2gsIGNvbmYtPnJhaWRfZGlza3MpOworCWttZW1fY2FjaGVfZnJlZShjb25mLT5zbGFiX2NhY2hlLCBzaCk7CisJYXRvbWljX2RlYygmY29uZi0+YWN0aXZlX3N0cmlwZXMpOworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBzaHJpbmtfc3RyaXBlcyhyYWlkNV9jb25mX3QgKmNvbmYpCit7CisJd2hpbGUgKGRyb3Bfb25lX3N0cmlwZShjb25mKSkKKwkJOworCiAJa21lbV9jYWNoZV9kZXN0cm95KGNvbmYtPnNsYWJfY2FjaGUpOwogCWNvbmYtPnNsYWJfY2FjaGUgPSBOVUxMOwogfQogCi1zdGF0aWMgaW50IHJhaWQ1X2VuZF9yZWFkX3JlcXVlc3QgKHN0cnVjdCBiaW8gKiBiaSwgdW5zaWduZWQgaW50IGJ5dGVzX2RvbmUsCitzdGF0aWMgaW50IHJhaWQ1X2VuZF9yZWFkX3JlcXVlc3Qoc3RydWN0IGJpbyAqIGJpLCB1bnNpZ25lZCBpbnQgYnl0ZXNfZG9uZSwKIAkJCQkgICBpbnQgZXJyb3IpCiB7CiAgCXN0cnVjdCBzdHJpcGVfaGVhZCAqc2ggPSBiaS0+YmlfcHJpdmF0ZTsKQEAgLTQwMSwxMCArNDE0LDM1IEBACiAJCX0KICNlbHNlCiAJCXNldF9iaXQoUjVfVVBUT0RBVEUsICZzaC0+ZGV2W2ldLmZsYWdzKTsKLSNlbmRpZgkJCisjZW5kaWYKKwkJaWYgKHRlc3RfYml0KFI1X1JlYWRFcnJvciwgJnNoLT5kZXZbaV0uZmxhZ3MpKSB7CisJCQlwcmludGsoIlI1OiByZWFkIGVycm9yIGNvcnJlY3RlZCEhXG4iKTsKKwkJCWNsZWFyX2JpdChSNV9SZWFkRXJyb3IsICZzaC0+ZGV2W2ldLmZsYWdzKTsKKwkJCWNsZWFyX2JpdChSNV9SZVdyaXRlLCAmc2gtPmRldltpXS5mbGFncyk7CisJCX0KKwkJaWYgKGF0b21pY19yZWFkKCZjb25mLT5kaXNrc1tpXS5yZGV2LT5yZWFkX2Vycm9ycykpCisJCQlhdG9taWNfc2V0KCZjb25mLT5kaXNrc1tpXS5yZGV2LT5yZWFkX2Vycm9ycywgMCk7CiAJfSBlbHNlIHsKLQkJbWRfZXJyb3IoY29uZi0+bWRkZXYsIGNvbmYtPmRpc2tzW2ldLnJkZXYpOworCQlpbnQgcmV0cnkgPSAwOwogCQljbGVhcl9iaXQoUjVfVVBUT0RBVEUsICZzaC0+ZGV2W2ldLmZsYWdzKTsKKwkJYXRvbWljX2luYygmY29uZi0+ZGlza3NbaV0ucmRldi0+cmVhZF9lcnJvcnMpOworCQlpZiAoY29uZi0+bWRkZXYtPmRlZ3JhZGVkKQorCQkJcHJpbnRrKCJSNTogcmVhZCBlcnJvciBub3QgY29ycmVjdGFibGUuXG4iKTsKKwkJZWxzZSBpZiAodGVzdF9iaXQoUjVfUmVXcml0ZSwgJnNoLT5kZXZbaV0uZmxhZ3MpKQorCQkJLyogT2gsIG5vISEhICovCisJCQlwcmludGsoIlI1OiByZWFkIGVycm9yIE5PVCBjb3JyZWN0ZWQhIVxuIik7CisJCWVsc2UgaWYgKGF0b21pY19yZWFkKCZjb25mLT5kaXNrc1tpXS5yZGV2LT5yZWFkX2Vycm9ycykKKwkJCSA+IGNvbmYtPm1heF9ucl9zdHJpcGVzKQorCQkJcHJpbnRrKCJyYWlkNTogVG9vIG1hbnkgcmVhZCBlcnJvcnMsIGZhaWxpbmcgZGV2aWNlLlxuIik7CisJCWVsc2UKKwkJCXJldHJ5ID0gMTsKKwkJaWYgKHJldHJ5KQorCQkJc2V0X2JpdChSNV9SZWFkRXJyb3IsICZzaC0+ZGV2W2ldLmZsYWdzKTsKKwkJZWxzZSB7CisJCQljbGVhcl9iaXQoUjVfUmVhZEVycm9yLCAmc2gtPmRldltpXS5mbGFncyk7CisJCQljbGVhcl9iaXQoUjVfUmVXcml0ZSwgJnNoLT5kZXZbaV0uZmxhZ3MpOworCQkJbWRfZXJyb3IoY29uZi0+bWRkZXYsIGNvbmYtPmRpc2tzW2ldLnJkZXYpOworCQl9CiAJfQogCXJkZXZfZGVjX3BlbmRpbmcoY29uZi0+ZGlza3NbaV0ucmRldiwgY29uZi0+bWRkZXYpOwogI2lmIDAKQEAgLTQ4NywxOSArNTI1LDE5IEBACiAJcmFpZDVfY29uZl90ICpjb25mID0gKHJhaWQ1X2NvbmZfdCAqKSBtZGRldi0+cHJpdmF0ZTsKIAlQUklOVEsoInJhaWQ1OiBlcnJvciBjYWxsZWRcbiIpOwogCi0JaWYgKCFyZGV2LT5mYXVsdHkpIHsKKwlpZiAoIXRlc3RfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKSkgewogCQltZGRldi0+c2JfZGlydHkgPSAxOwotCQlpZiAocmRldi0+aW5fc3luYykgeworCQlpZiAodGVzdF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKSkgewogCQkJY29uZi0+d29ya2luZ19kaXNrcy0tOwogCQkJbWRkZXYtPmRlZ3JhZGVkKys7CiAJCQljb25mLT5mYWlsZWRfZGlza3MrKzsKLQkJCXJkZXYtPmluX3N5bmMgPSAwOworCQkJY2xlYXJfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncyk7CiAJCQkvKgogCQkJICogaWYgcmVjb3Zlcnkgd2FzIHJ1bm5pbmcsIG1ha2Ugc3VyZSBpdCBhYm9ydHMuCiAJCQkgKi8KIAkJCXNldF9iaXQoTURfUkVDT1ZFUllfRVJSLCAmbWRkZXYtPnJlY292ZXJ5KTsKIAkJfQotCQlyZGV2LT5mYXVsdHkgPSAxOworCQlzZXRfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKTsKIAkJcHJpbnRrIChLRVJOX0FMRVJUCiAJCQkicmFpZDU6IERpc2sgZmFpbHVyZSBvbiAlcywgZGlzYWJsaW5nIGRldmljZS4iCiAJCQkiIE9wZXJhdGlvbiBjb250aW51aW5nIG9uICVkIGRldmljZXNcbiIsCkBAIC05NjUsNyArMTAwMywxMyBAQAogCQl9CiAJCWlmIChkZXYtPndyaXR0ZW4pIHdyaXR0ZW4rKzsKIAkJcmRldiA9IGNvbmYtPmRpc2tzW2ldLnJkZXY7IC8qIEZJWE1FLCBzaG91bGQgSSBiZSBsb29raW5nIHJkZXYgKi8KLQkJaWYgKCFyZGV2IHx8ICFyZGV2LT5pbl9zeW5jKSB7CisJCWlmICghcmRldiB8fCAhdGVzdF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKSkgeworCQkJLyogVGhlIFJlYWRFcnJvciBmbGFnIHdpbCBqdXN0IGJlIGNvbmZ1c2luZyBub3cgKi8KKwkJCWNsZWFyX2JpdChSNV9SZWFkRXJyb3IsICZkZXYtPmZsYWdzKTsKKwkJCWNsZWFyX2JpdChSNV9SZVdyaXRlLCAmZGV2LT5mbGFncyk7CisJCX0KKwkJaWYgKCFyZGV2IHx8ICF0ZXN0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpCisJCSAgICB8fCB0ZXN0X2JpdChSNV9SZWFkRXJyb3IsICZkZXYtPmZsYWdzKSkgewogCQkJZmFpbGVkKys7CiAJCQlmYWlsZWRfbnVtID0gaTsKIAkJfSBlbHNlCkBAIC05ODAsNiArMTAyNCwxNCBAQAogCWlmIChmYWlsZWQgPiAxICYmIHRvX3JlYWQrdG9fd3JpdGUrd3JpdHRlbikgewogCQlmb3IgKGk9ZGlza3M7IGktLTsgKSB7CiAJCQlpbnQgYml0bWFwX2VuZCA9IDA7CisKKwkJCWlmICh0ZXN0X2JpdChSNV9SZWFkRXJyb3IsICZzaC0+ZGV2W2ldLmZsYWdzKSkgeworCQkJCW1ka19yZGV2X3QgKnJkZXYgPSBjb25mLT5kaXNrc1tpXS5yZGV2OworCQkJCWlmIChyZGV2ICYmIHRlc3RfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncykpCisJCQkJCS8qIG11bHRpcGxlIHJlYWQgZmFpbHVyZXMgaW4gb25lIHN0cmlwZSAqLworCQkJCQltZF9lcnJvcihjb25mLT5tZGRldiwgcmRldik7CisJCQl9CisKIAkJCXNwaW5fbG9ja19pcnEoJmNvbmYtPmRldmljZV9sb2NrKTsKIAkJCS8qIGZhaWwgYWxsIHdyaXRlcyBmaXJzdCAqLwogCQkJYmkgPSBzaC0+ZGV2W2ldLnRvd3JpdGU7CkBAIC0xMDE1LDcgKzEwNjcsOCBAQAogCQkJfQogCiAJCQkvKiBmYWlsIGFueSByZWFkcyBpZiB0aGlzIGRldmljZSBpcyBub24tb3BlcmF0aW9uYWwgKi8KLQkJCWlmICghdGVzdF9iaXQoUjVfSW5zeW5jLCAmc2gtPmRldltpXS5mbGFncykpIHsKKwkJCWlmICghdGVzdF9iaXQoUjVfSW5zeW5jLCAmc2gtPmRldltpXS5mbGFncykgfHwKKwkJCSAgICB0ZXN0X2JpdChSNV9SZWFkRXJyb3IsICZzaC0+ZGV2W2ldLmZsYWdzKSkgewogCQkJCWJpID0gc2gtPmRldltpXS50b3JlYWQ7CiAJCQkJc2gtPmRldltpXS50b3JlYWQgPSBOVUxMOwogCQkJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUjVfT3ZlcmxhcCwgJnNoLT5kZXZbaV0uZmxhZ3MpKQpAQCAtMTI0Nyw2ICsxMzAwLDExIEBACiAJCQkgICAgIW1lbWNtcChwYWdlYSwgcGFnZWErNCwgU1RSSVBFX1NJWkUtNCkpIHsKIAkJCQkvKiBwYXJpdHkgaXMgY29ycmVjdCAob24gZGlzYywgbm90IGluIGJ1ZmZlciBhbnkgbW9yZSkgKi8KIAkJCQlzZXRfYml0KFNUUklQRV9JTlNZTkMsICZzaC0+c3RhdGUpOworCQkJfSBlbHNlIHsKKwkJCQljb25mLT5tZGRldi0+cmVzeW5jX21pc21hdGNoZXMgKz0gU1RSSVBFX1NFQ1RPUlM7CisJCQkJaWYgKHRlc3RfYml0KE1EX1JFQ09WRVJZX0NIRUNLLCAmY29uZi0+bWRkZXYtPnJlY292ZXJ5KSkKKwkJCQkJLyogZG9uJ3QgdHJ5IHRvIHJlcGFpciEhICovCisJCQkJCXNldF9iaXQoU1RSSVBFX0lOU1lOQywgJnNoLT5zdGF0ZSk7CiAJCQl9CiAJCX0KIAkJaWYgKCF0ZXN0X2JpdChTVFJJUEVfSU5TWU5DLCAmc2gtPnN0YXRlKSkgewpAQCAtMTI3NCw3ICsxMzMyLDI3IEBACiAJCW1kX2RvbmVfc3luYyhjb25mLT5tZGRldiwgU1RSSVBFX1NFQ1RPUlMsMSk7CiAJCWNsZWFyX2JpdChTVFJJUEVfU1lOQ0lORywgJnNoLT5zdGF0ZSk7CiAJfQotCQorCisJLyogSWYgdGhlIGZhaWxlZCBkcml2ZSBpcyBqdXN0IGEgUmVhZEVycm9yLCB0aGVuIHdlIG1pZ2h0IG5lZWQgdG8gcHJvZ3Jlc3MKKwkgKiB0aGUgcmVwYWlyL2NoZWNrIHByb2Nlc3MKKwkgKi8KKwlpZiAoZmFpbGVkID09IDEgJiYgISBjb25mLT5tZGRldi0+cm8gJiYKKwkgICAgdGVzdF9iaXQoUjVfUmVhZEVycm9yLCAmc2gtPmRldltmYWlsZWRfbnVtXS5mbGFncykKKwkgICAgJiYgIXRlc3RfYml0KFI1X0xPQ0tFRCwgJnNoLT5kZXZbZmFpbGVkX251bV0uZmxhZ3MpCisJICAgICYmIHRlc3RfYml0KFI1X1VQVE9EQVRFLCAmc2gtPmRldltmYWlsZWRfbnVtXS5mbGFncykKKwkJKSB7CisJCWRldiA9ICZzaC0+ZGV2W2ZhaWxlZF9udW1dOworCQlpZiAoIXRlc3RfYml0KFI1X1JlV3JpdGUsICZkZXYtPmZsYWdzKSkgeworCQkJc2V0X2JpdChSNV9XYW50d3JpdGUsICZkZXYtPmZsYWdzKTsKKwkJCXNldF9iaXQoUjVfUmVXcml0ZSwgJmRldi0+ZmxhZ3MpOworCQkJc2V0X2JpdChSNV9MT0NLRUQsICZkZXYtPmZsYWdzKTsKKwkJfSBlbHNlIHsKKwkJCS8qIGxldCdzIHJlYWQgaXQgYmFjayAqLworCQkJc2V0X2JpdChSNV9XYW50cmVhZCwgJmRldi0+ZmxhZ3MpOworCQkJc2V0X2JpdChSNV9MT0NLRUQsICZkZXYtPmZsYWdzKTsKKwkJfQorCX0KKwogCXNwaW5fdW5sb2NrKCZzaC0+bG9jayk7CiAKIAl3aGlsZSAoKGJpPXJldHVybl9iaSkpIHsKQEAgLTEzMDUsOCArMTM4Myw4IEBACiAJCQliaS0+YmlfZW5kX2lvID0gcmFpZDVfZW5kX3JlYWRfcmVxdWVzdDsKICAKIAkJcmN1X3JlYWRfbG9jaygpOwotCQlyZGV2ID0gY29uZi0+ZGlza3NbaV0ucmRldjsKLQkJaWYgKHJkZXYgJiYgcmRldi0+ZmF1bHR5KQorCQlyZGV2ID0gcmN1X2RlcmVmZXJlbmNlKGNvbmYtPmRpc2tzW2ldLnJkZXYpOworCQlpZiAocmRldiAmJiB0ZXN0X2JpdChGYXVsdHksICZyZGV2LT5mbGFncykpCiAJCQlyZGV2ID0gTlVMTDsKIAkJaWYgKHJkZXYpCiAJCQlhdG9taWNfaW5jKCZyZGV2LT5ucl9wZW5kaW5nKTsKQEAgLTEzNzksOCArMTQ1Nyw4IEBACiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJZm9yIChpPTA7IGk8bWRkZXYtPnJhaWRfZGlza3M7IGkrKykgewotCQltZGtfcmRldl90ICpyZGV2ID0gY29uZi0+ZGlza3NbaV0ucmRldjsKLQkJaWYgKHJkZXYgJiYgIXJkZXYtPmZhdWx0eSAmJiBhdG9taWNfcmVhZCgmcmRldi0+bnJfcGVuZGluZykpIHsKKwkJbWRrX3JkZXZfdCAqcmRldiA9IHJjdV9kZXJlZmVyZW5jZShjb25mLT5kaXNrc1tpXS5yZGV2KTsKKwkJaWYgKHJkZXYgJiYgIXRlc3RfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKSAmJiBhdG9taWNfcmVhZCgmcmRldi0+bnJfcGVuZGluZykpIHsKIAkJCXJlcXVlc3RfcXVldWVfdCAqcl9xdWV1ZSA9IGJkZXZfZ2V0X3F1ZXVlKHJkZXYtPmJkZXYpOwogCiAJCQlhdG9taWNfaW5jKCZyZGV2LT5ucl9wZW5kaW5nKTsKQEAgLTE0MjQsOCArMTUwMiw4IEBACiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJZm9yIChpPTA7IGk8bWRkZXYtPnJhaWRfZGlza3MgJiYgcmV0ID09IDA7IGkrKykgewotCQltZGtfcmRldl90ICpyZGV2ID0gY29uZi0+ZGlza3NbaV0ucmRldjsKLQkJaWYgKHJkZXYgJiYgIXJkZXYtPmZhdWx0eSkgeworCQltZGtfcmRldl90ICpyZGV2ID0gcmN1X2RlcmVmZXJlbmNlKGNvbmYtPmRpc2tzW2ldLnJkZXYpOworCQlpZiAocmRldiAmJiAhdGVzdF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpKSB7CiAJCQlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2ID0gcmRldi0+YmRldjsKIAkJCXJlcXVlc3RfcXVldWVfdCAqcl9xdWV1ZSA9IGJkZXZfZ2V0X3F1ZXVlKGJkZXYpOwogCkBAIC0xNTY3LDYgKzE2NDUsNyBAQAogCQlyZXR1cm4gcnY7CiAJfQogCWlmICghYml0bWFwX3N0YXJ0X3N5bmMobWRkZXYtPmJpdG1hcCwgc2VjdG9yX25yLCAmc3luY19ibG9ja3MsIDEpICYmCisJICAgICF0ZXN0X2JpdChNRF9SRUNPVkVSWV9SRVFVRVNURUQsICZtZGRldi0+cmVjb3ZlcnkpICYmCiAJICAgICFjb25mLT5mdWxsc3luYyAmJiBzeW5jX2Jsb2NrcyA+PSBTVFJJUEVfU0VDVE9SUykgewogCQkvKiB3ZSBjYW4gc2tpcCB0aGlzIGJsb2NrLCBhbmQgcHJvYmFibHkgbW9yZSAqLwogCQlzeW5jX2Jsb2NrcyAvPSBTVFJJUEVfU0VDVE9SUzsKQEAgLTE2NjMsNiArMTc0Miw3NCBAQAogCVBSSU5USygiLS0tIHJhaWQ1ZCBpbmFjdGl2ZVxuIik7CiB9CiAKK3N0YXRpYyBzc2l6ZV90CityYWlkNV9zaG93X3N0cmlwZV9jYWNoZV9zaXplKG1kZGV2X3QgKm1kZGV2LCBjaGFyICpwYWdlKQoreworCXJhaWQ1X2NvbmZfdCAqY29uZiA9IG1kZGV2X3RvX2NvbmYobWRkZXYpOworCWlmIChjb25mKQorCQlyZXR1cm4gc3ByaW50ZihwYWdlLCAiJWRcbiIsIGNvbmYtPm1heF9ucl9zdHJpcGVzKTsKKwllbHNlCisJCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdAorcmFpZDVfc3RvcmVfc3RyaXBlX2NhY2hlX3NpemUobWRkZXZfdCAqbWRkZXYsIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBsZW4pCit7CisJcmFpZDVfY29uZl90ICpjb25mID0gbWRkZXZfdG9fY29uZihtZGRldik7CisJY2hhciAqZW5kOworCWludCBuZXc7CisJaWYgKGxlbiA+PSBQQUdFX1NJWkUpCisJCXJldHVybiAtRUlOVkFMOworCWlmICghY29uZikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwluZXcgPSBzaW1wbGVfc3RydG91bChwYWdlLCAmZW5kLCAxMCk7CisJaWYgKCEqcGFnZSB8fCAoKmVuZCAmJiAqZW5kICE9ICdcbicpICkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKG5ldyA8PSAxNiB8fCBuZXcgPiAzMjc2OCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJd2hpbGUgKG5ldyA8IGNvbmYtPm1heF9ucl9zdHJpcGVzKSB7CisJCWlmIChkcm9wX29uZV9zdHJpcGUoY29uZikpCisJCQljb25mLT5tYXhfbnJfc3RyaXBlcy0tOworCQllbHNlCisJCQlicmVhazsKKwl9CisJd2hpbGUgKG5ldyA+IGNvbmYtPm1heF9ucl9zdHJpcGVzKSB7CisJCWlmIChncm93X29uZV9zdHJpcGUoY29uZikpCisJCQljb25mLT5tYXhfbnJfc3RyaXBlcysrOworCQllbHNlIGJyZWFrOworCX0KKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgc3RydWN0IG1kX3N5c2ZzX2VudHJ5CityYWlkNV9zdHJpcGVjYWNoZV9zaXplID0gX19BVFRSKHN0cmlwZV9jYWNoZV9zaXplLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJCQlyYWlkNV9zaG93X3N0cmlwZV9jYWNoZV9zaXplLAorCQkJCXJhaWQ1X3N0b3JlX3N0cmlwZV9jYWNoZV9zaXplKTsKKworc3RhdGljIHNzaXplX3QKK3N0cmlwZV9jYWNoZV9hY3RpdmVfc2hvdyhtZGRldl90ICptZGRldiwgY2hhciAqcGFnZSkKK3sKKwlyYWlkNV9jb25mX3QgKmNvbmYgPSBtZGRldl90b19jb25mKG1kZGV2KTsKKwlpZiAoY29uZikKKwkJcmV0dXJuIHNwcmludGYocGFnZSwgIiVkXG4iLCBhdG9taWNfcmVhZCgmY29uZi0+YWN0aXZlX3N0cmlwZXMpKTsKKwllbHNlCisJCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IG1kX3N5c2ZzX2VudHJ5CityYWlkNV9zdHJpcGVjYWNoZV9hY3RpdmUgPSBfX0FUVFJfUk8oc3RyaXBlX2NhY2hlX2FjdGl2ZSk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpyYWlkNV9hdHRyc1tdID0gIHsKKwkmcmFpZDVfc3RyaXBlY2FjaGVfc2l6ZS5hdHRyLAorCSZyYWlkNV9zdHJpcGVjYWNoZV9hY3RpdmUuYXR0ciwKKwlOVUxMLAorfTsKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHJhaWQ1X2F0dHJzX2dyb3VwID0geworCS5uYW1lID0gTlVMTCwKKwkuYXR0cnMgPSByYWlkNV9hdHRycywKK307CisKIHN0YXRpYyBpbnQgcnVuKG1kZGV2X3QgKm1kZGV2KQogewogCXJhaWQ1X2NvbmZfdCAqY29uZjsKQEAgLTE3MDksNyArMTg1Niw3IEBACiAKIAkJZGlzay0+cmRldiA9IHJkZXY7CiAKLQkJaWYgKHJkZXYtPmluX3N5bmMpIHsKKwkJaWYgKHRlc3RfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncykpIHsKIAkJCWNoYXIgYltCREVWTkFNRV9TSVpFXTsKIAkJCXByaW50ayhLRVJOX0lORk8gInJhaWQ1OiBkZXZpY2UgJXMgb3BlcmF0aW9uYWwgYXMgcmFpZCIKIAkJCQkiIGRpc2sgJWRcbiIsIGJkZXZuYW1lKHJkZXYtPmJkZXYsYiksCkBAIC0xODA0LDYgKzE5NTEsNyBAQAogCX0KIAogCS8qIE9rLCBldmVyeXRoaW5nIGlzIGp1c3QgZmluZSBub3cgKi8KKwlzeXNmc19jcmVhdGVfZ3JvdXAoJm1kZGV2LT5rb2JqLCAmcmFpZDVfYXR0cnNfZ3JvdXApOwogCiAJaWYgKG1kZGV2LT5iaXRtYXApCiAJCW1kZGV2LT50aHJlYWQtPnRpbWVvdXQgPSBtZGRldi0+Yml0bWFwLT5kYWVtb25fc2xlZXAgKiBIWjsKQEAgLTE4MjgsNyArMTk3Niw3IEBACiAKIAogCi1zdGF0aWMgaW50IHN0b3AgKG1kZGV2X3QgKm1kZGV2KQorc3RhdGljIGludCBzdG9wKG1kZGV2X3QgKm1kZGV2KQogewogCXJhaWQ1X2NvbmZfdCAqY29uZiA9IChyYWlkNV9jb25mX3QgKikgbWRkZXYtPnByaXZhdGU7CiAKQEAgLTE4MzcsNiArMTk4NSw3IEBACiAJc2hyaW5rX3N0cmlwZXMoY29uZik7CiAJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZykgY29uZi0+c3RyaXBlX2hhc2h0YmwsIEhBU0hfUEFHRVNfT1JERVIpOwogCWJsa19zeW5jX3F1ZXVlKG1kZGV2LT5xdWV1ZSk7IC8qIHRoZSB1bnBsdWcgZm4gcmVmZXJlbmNlcyAnY29uZicqLworCXN5c2ZzX3JlbW92ZV9ncm91cCgmbWRkZXYtPmtvYmosICZyYWlkNV9hdHRyc19ncm91cCk7CiAJa2ZyZWUoY29uZik7CiAJbWRkZXYtPnByaXZhdGUgPSBOVUxMOwogCXJldHVybiAwOwpAQCAtMTg4Nyw3ICsyMDM2LDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgY29uZi0+cmFpZF9kaXNrczsgaSsrKQogCQlzZXFfcHJpbnRmIChzZXEsICIlcyIsCiAJCQkgICAgICAgY29uZi0+ZGlza3NbaV0ucmRldiAmJgotCQkJICAgICAgIGNvbmYtPmRpc2tzW2ldLnJkZXYtPmluX3N5bmMgPyAiVSIgOiAiXyIpOworCQkJICAgICAgIHRlc3RfYml0KEluX3N5bmMsICZjb25mLT5kaXNrc1tpXS5yZGV2LT5mbGFncykgPyAiVSIgOiAiXyIpOwogCXNlcV9wcmludGYgKHNlcSwgIl0iKTsKICNpZiBSQUlENV9ERUJVRwogI2RlZmluZSBEKHgpIFwKQEAgLTE5MTQsNyArMjA2Myw3IEBACiAJCXRtcCA9IGNvbmYtPmRpc2tzICsgaTsKIAkJaWYgKHRtcC0+cmRldikKIAkJcHJpbnRrKCIgZGlzayAlZCwgbzolZCwgZGV2OiVzXG4iLAotCQkJaSwgIXRtcC0+cmRldi0+ZmF1bHR5LAorCQkJaSwgIXRlc3RfYml0KEZhdWx0eSwgJnRtcC0+cmRldi0+ZmxhZ3MpLAogCQkJYmRldm5hbWUodG1wLT5yZGV2LT5iZGV2LGIpKTsKIAl9CiB9CkBAIC0xOTI4LDEyICsyMDc3LDEyIEBACiAJZm9yIChpID0gMDsgaSA8IGNvbmYtPnJhaWRfZGlza3M7IGkrKykgewogCQl0bXAgPSBjb25mLT5kaXNrcyArIGk7CiAJCWlmICh0bXAtPnJkZXYKLQkJICAgICYmICF0bXAtPnJkZXYtPmZhdWx0eQotCQkgICAgJiYgIXRtcC0+cmRldi0+aW5fc3luYykgeworCQkgICAgJiYgIXRlc3RfYml0KEZhdWx0eSwgJnRtcC0+cmRldi0+ZmxhZ3MpCisJCSAgICAmJiAhdGVzdF9iaXQoSW5fc3luYywgJnRtcC0+cmRldi0+ZmxhZ3MpKSB7CiAJCQltZGRldi0+ZGVncmFkZWQtLTsKIAkJCWNvbmYtPmZhaWxlZF9kaXNrcy0tOwogCQkJY29uZi0+d29ya2luZ19kaXNrcysrOwotCQkJdG1wLT5yZGV2LT5pbl9zeW5jID0gMTsKKwkJCXNldF9iaXQoSW5fc3luYywgJnRtcC0+cmRldi0+ZmxhZ3MpOwogCQl9CiAJfQogCXByaW50X3JhaWQ1X2NvbmYoY29uZik7CkBAIC0xOTUwLDcgKzIwOTksNyBAQAogCXByaW50X3JhaWQ1X2NvbmYoY29uZik7CiAJcmRldiA9IHAtPnJkZXY7CiAJaWYgKHJkZXYpIHsKLQkJaWYgKHJkZXYtPmluX3N5bmMgfHwKKwkJaWYgKHRlc3RfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncykgfHwKIAkJICAgIGF0b21pY19yZWFkKCZyZGV2LT5ucl9wZW5kaW5nKSkgewogCQkJZXJyID0gLUVCVVNZOwogCQkJZ290byBhYm9ydDsKQEAgLTE5ODUsMTIgKzIxMzQsMTIgQEAKIAkgKi8KIAlmb3IgKGRpc2s9MDsgZGlzayA8IG1kZGV2LT5yYWlkX2Rpc2tzOyBkaXNrKyspCiAJCWlmICgocD1jb25mLT5kaXNrcyArIGRpc2spLT5yZGV2ID09IE5VTEwpIHsKLQkJCXJkZXYtPmluX3N5bmMgPSAwOworCQkJY2xlYXJfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncyk7CiAJCQlyZGV2LT5yYWlkX2Rpc2sgPSBkaXNrOwogCQkJZm91bmQgPSAxOwogCQkJaWYgKHJkZXYtPnNhdmVkX3JhaWRfZGlzayAhPSBkaXNrKQogCQkJCWNvbmYtPmZ1bGxzeW5jID0gMTsKLQkJCXAtPnJkZXYgPSByZGV2OworCQkJcmN1X2Fzc2lnbl9wb2ludGVyKHAtPnJkZXYsIHJkZXYpOwogCQkJYnJlYWs7CiAJCX0KIAlwcmludF9yYWlkNV9jb25mKGNvbmYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkNm1haW4uYyBiL2RyaXZlcnMvbWQvcmFpZDZtYWluLmMKaW5kZXggNzc1Nzg2OS4uZWFlNWEzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkNm1haW4uYworKysgYi9kcml2ZXJzL21kL3JhaWQ2bWFpbi5jCkBAIC01MDcsMTkgKzUwNywxOSBAQAogCXJhaWQ2X2NvbmZfdCAqY29uZiA9IChyYWlkNl9jb25mX3QgKikgbWRkZXYtPnByaXZhdGU7CiAJUFJJTlRLKCJyYWlkNjogZXJyb3IgY2FsbGVkXG4iKTsKIAotCWlmICghcmRldi0+ZmF1bHR5KSB7CisJaWYgKCF0ZXN0X2JpdChGYXVsdHksICZyZGV2LT5mbGFncykpIHsKIAkJbWRkZXYtPnNiX2RpcnR5ID0gMTsKLQkJaWYgKHJkZXYtPmluX3N5bmMpIHsKKwkJaWYgKHRlc3RfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncykpIHsKIAkJCWNvbmYtPndvcmtpbmdfZGlza3MtLTsKIAkJCW1kZGV2LT5kZWdyYWRlZCsrOwogCQkJY29uZi0+ZmFpbGVkX2Rpc2tzKys7Ci0JCQlyZGV2LT5pbl9zeW5jID0gMDsKKwkJCWNsZWFyX2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpOwogCQkJLyoKIAkJCSAqIGlmIHJlY292ZXJ5IHdhcyBydW5uaW5nLCBtYWtlIHN1cmUgaXQgYWJvcnRzLgogCQkJICovCiAJCQlzZXRfYml0KE1EX1JFQ09WRVJZX0VSUiwgJm1kZGV2LT5yZWNvdmVyeSk7CiAJCX0KLQkJcmRldi0+ZmF1bHR5ID0gMTsKKwkJc2V0X2JpdChGYXVsdHksICZyZGV2LT5mbGFncyk7CiAJCXByaW50ayAoS0VSTl9BTEVSVAogCQkJInJhaWQ2OiBEaXNrIGZhaWx1cmUgb24gJXMsIGRpc2FibGluZyBkZXZpY2UuIgogCQkJIiBPcGVyYXRpb24gY29udGludWluZyBvbiAlZCBkZXZpY2VzXG4iLApAQCAtMTA3MSw3ICsxMDcxLDcgQEAKIAkJfQogCQlpZiAoZGV2LT53cml0dGVuKSB3cml0dGVuKys7CiAJCXJkZXYgPSBjb25mLT5kaXNrc1tpXS5yZGV2OyAvKiBGSVhNRSwgc2hvdWxkIEkgYmUgbG9va2luZyByZGV2ICovCi0JCWlmICghcmRldiB8fCAhcmRldi0+aW5fc3luYykgeworCQlpZiAoIXJkZXYgfHwgIXRlc3RfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncykpIHsKIAkJCWlmICggZmFpbGVkIDwgMiApCiAJCQkJZmFpbGVkX251bVtmYWlsZWRdID0gaTsKIAkJCWZhaWxlZCsrOwpAQCAtMTQ2NCw4ICsxNDY0LDggQEAKIAkJCWJpLT5iaV9lbmRfaW8gPSByYWlkNl9lbmRfcmVhZF9yZXF1ZXN0OwogCiAJCXJjdV9yZWFkX2xvY2soKTsKLQkJcmRldiA9IGNvbmYtPmRpc2tzW2ldLnJkZXY7Ci0JCWlmIChyZGV2ICYmIHJkZXYtPmZhdWx0eSkKKwkJcmRldiA9IHJjdV9kZXJlZmVyZW5jZShjb25mLT5kaXNrc1tpXS5yZGV2KTsKKwkJaWYgKHJkZXYgJiYgdGVzdF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpKQogCQkJcmRldiA9IE5VTEw7CiAJCWlmIChyZGV2KQogCQkJYXRvbWljX2luYygmcmRldi0+bnJfcGVuZGluZyk7CkBAIC0xNTM4LDggKzE1MzgsOCBAQAogCiAJcmN1X3JlYWRfbG9jaygpOwogCWZvciAoaT0wOyBpPG1kZGV2LT5yYWlkX2Rpc2tzOyBpKyspIHsKLQkJbWRrX3JkZXZfdCAqcmRldiA9IGNvbmYtPmRpc2tzW2ldLnJkZXY7Ci0JCWlmIChyZGV2ICYmICFyZGV2LT5mYXVsdHkgJiYgYXRvbWljX3JlYWQoJnJkZXYtPm5yX3BlbmRpbmcpKSB7CisJCW1ka19yZGV2X3QgKnJkZXYgPSByY3VfZGVyZWZlcmVuY2UoY29uZi0+ZGlza3NbaV0ucmRldik7CisJCWlmIChyZGV2ICYmICF0ZXN0X2JpdChGYXVsdHksICZyZGV2LT5mbGFncykgJiYgYXRvbWljX3JlYWQoJnJkZXYtPm5yX3BlbmRpbmcpKSB7CiAJCQlyZXF1ZXN0X3F1ZXVlX3QgKnJfcXVldWUgPSBiZGV2X2dldF9xdWV1ZShyZGV2LT5iZGV2KTsKIAogCQkJYXRvbWljX2luYygmcmRldi0+bnJfcGVuZGluZyk7CkBAIC0xNTgzLDggKzE1ODMsOCBAQAogCiAJcmN1X3JlYWRfbG9jaygpOwogCWZvciAoaT0wOyBpPG1kZGV2LT5yYWlkX2Rpc2tzICYmIHJldCA9PSAwOyBpKyspIHsKLQkJbWRrX3JkZXZfdCAqcmRldiA9IGNvbmYtPmRpc2tzW2ldLnJkZXY7Ci0JCWlmIChyZGV2ICYmICFyZGV2LT5mYXVsdHkpIHsKKwkJbWRrX3JkZXZfdCAqcmRldiA9IHJjdV9kZXJlZmVyZW5jZShjb25mLT5kaXNrc1tpXS5yZGV2KTsKKwkJaWYgKHJkZXYgJiYgIXRlc3RfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKSkgewogCQkJc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiA9IHJkZXYtPmJkZXY7CiAJCQlyZXF1ZXN0X3F1ZXVlX3QgKnJfcXVldWUgPSBiZGV2X2dldF9xdWV1ZShiZGV2KTsKIApAQCAtMTg2OCw3ICsxODY4LDcgQEAKIAogCQlkaXNrLT5yZGV2ID0gcmRldjsKIAotCQlpZiAocmRldi0+aW5fc3luYykgeworCQlpZiAodGVzdF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKSkgewogCQkJY2hhciBiW0JERVZOQU1FX1NJWkVdOwogCQkJcHJpbnRrKEtFUk5fSU5GTyAicmFpZDY6IGRldmljZSAlcyBvcGVyYXRpb25hbCBhcyByYWlkIgogCQkJICAgICAgICIgZGlzayAlZFxuIiwgYmRldm5hbWUocmRldi0+YmRldixiKSwKQEAgLTIwNTIsNyArMjA1Miw3IEBACiAJZm9yIChpID0gMDsgaSA8IGNvbmYtPnJhaWRfZGlza3M7IGkrKykKICAJCXNlcV9wcmludGYgKHNlcSwgIiVzIiwKIAkJCSAgICBjb25mLT5kaXNrc1tpXS5yZGV2ICYmCi0JCQkgICAgY29uZi0+ZGlza3NbaV0ucmRldi0+aW5fc3luYyA/ICJVIiA6ICJfIik7CisJCQkgICAgdGVzdF9iaXQoSW5fc3luYywgJmNvbmYtPmRpc2tzW2ldLnJkZXYtPmZsYWdzKSA/ICJVIiA6ICJfIik7CiAJc2VxX3ByaW50ZiAoc2VxLCAiXSIpOwogI2lmIFJBSUQ2X0RVTVBTVEFURQogCXNlcV9wcmludGYgKHNlcSwgIlxuIik7CkBAIC0yMDc4LDcgKzIwNzgsNyBAQAogCQl0bXAgPSBjb25mLT5kaXNrcyArIGk7CiAJCWlmICh0bXAtPnJkZXYpCiAJCXByaW50aygiIGRpc2sgJWQsIG86JWQsIGRldjolc1xuIiwKLQkJCWksICF0bXAtPnJkZXYtPmZhdWx0eSwKKwkJCWksICF0ZXN0X2JpdChGYXVsdHksICZ0bXAtPnJkZXYtPmZsYWdzKSwKIAkJCWJkZXZuYW1lKHRtcC0+cmRldi0+YmRldixiKSk7CiAJfQogfQpAQCAtMjA5MiwxMiArMjA5MiwxMiBAQAogCWZvciAoaSA9IDA7IGkgPCBjb25mLT5yYWlkX2Rpc2tzOyBpKyspIHsKIAkJdG1wID0gY29uZi0+ZGlza3MgKyBpOwogCQlpZiAodG1wLT5yZGV2Ci0JCSAgICAmJiAhdG1wLT5yZGV2LT5mYXVsdHkKLQkJICAgICYmICF0bXAtPnJkZXYtPmluX3N5bmMpIHsKKwkJICAgICYmICF0ZXN0X2JpdChGYXVsdHksICZ0bXAtPnJkZXYtPmZsYWdzKQorCQkgICAgJiYgIXRlc3RfYml0KEluX3N5bmMsICZ0bXAtPnJkZXYtPmZsYWdzKSkgewogCQkJbWRkZXYtPmRlZ3JhZGVkLS07CiAJCQljb25mLT5mYWlsZWRfZGlza3MtLTsKIAkJCWNvbmYtPndvcmtpbmdfZGlza3MrKzsKLQkJCXRtcC0+cmRldi0+aW5fc3luYyA9IDE7CisJCQlzZXRfYml0KEluX3N5bmMsICZ0bXAtPnJkZXYtPmZsYWdzKTsKIAkJfQogCX0KIAlwcmludF9yYWlkNl9jb25mKGNvbmYpOwpAQCAtMjExNCw3ICsyMTE0LDcgQEAKIAlwcmludF9yYWlkNl9jb25mKGNvbmYpOwogCXJkZXYgPSBwLT5yZGV2OwogCWlmIChyZGV2KSB7Ci0JCWlmIChyZGV2LT5pbl9zeW5jIHx8CisJCWlmICh0ZXN0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpIHx8CiAJCSAgICBhdG9taWNfcmVhZCgmcmRldi0+bnJfcGVuZGluZykpIHsKIAkJCWVyciA9IC1FQlVTWTsKIAkJCWdvdG8gYWJvcnQ7CkBAIC0yMTQ5LDEyICsyMTQ5LDEyIEBACiAJICovCiAJZm9yIChkaXNrPTA7IGRpc2sgPCBtZGRldi0+cmFpZF9kaXNrczsgZGlzaysrKQogCQlpZiAoKHA9Y29uZi0+ZGlza3MgKyBkaXNrKS0+cmRldiA9PSBOVUxMKSB7Ci0JCQlyZGV2LT5pbl9zeW5jID0gMDsKKwkJCWNsZWFyX2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpOwogCQkJcmRldi0+cmFpZF9kaXNrID0gZGlzazsKIAkJCWZvdW5kID0gMTsKIAkJCWlmIChyZGV2LT5zYXZlZF9yYWlkX2Rpc2sgIT0gZGlzaykKIAkJCQljb25mLT5mdWxsc3luYyA9IDE7Ci0JCQlwLT5yZGV2ID0gcmRldjsKKwkJCXJjdV9hc3NpZ25fcG9pbnRlcihwLT5yZGV2LCByZGV2KTsKIAkJCWJyZWFrOwogCQl9CiAJcHJpbnRfcmFpZDZfY29uZihjb25mKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL2lyLWNvbW1vbi5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vaXItY29tbW9uLmMKaW5kZXggMzFmY2NiNC4uNGI3MWZkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vaXItY29tbW9uLmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vaXItY29tbW9uLmMKQEAgLTExNiw3ICsxMTYsNyBAQAogCVsgNDYgXSA9IEtFWV9CTFVFLAogCVsgMjQgXSA9IEtFWV9LUFBMVVMsCQkvKiBmaW5lIHR1bmUgKyAqLwogCVsgMjUgXSA9IEtFWV9LUE1JTlVTLAkJLyogZmluZSB0dW5lIC0gKi8KLSAgICAgICAgWyAzMyBdID0gS0VZX0tQRE9ULAorCVsgMzMgXSA9IEtFWV9LUERPVCwKIAlbIDE5IF0gPSBLRVlfS1BFTlRFUiwKIAlbIDM0IF0gPSBLRVlfQkFDSywKIAlbIDM1IF0gPSBLRVlfUExBWVBBVVNFLApAQCAtMjM5LDcgKzIzOSw3IEBACiAJZHByaW50aygxLCIlczoga2V5IGV2ZW50IGNvZGU9JWQgZG93bj0lZFxuIiwKIAkJZGV2LT5uYW1lLGlyLT5rZXljb2RlLGlyLT5rZXlwcmVzc2VkKTsKIAlpbnB1dF9yZXBvcnRfa2V5KGRldixpci0+a2V5Y29kZSxpci0+a2V5cHJlc3NlZCk7Ci0gICAgICAgIGlucHV0X3N5bmMoZGV2KTsKKwlpbnB1dF9zeW5jKGRldik7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtZmUtdHVuZXIuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1mZS10dW5lci5jCmluZGV4IDQ3ZTI4YjAuLmEzNTMzMDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1mZS10dW5lci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1mZS10dW5lci5jCkBAIC0xMyw2ICsxMyw4IEBACiAjaW5jbHVkZSAiYmNtMzUxMC5oIgogI2luY2x1ZGUgInN0djAyOTcuaCIKICNpbmNsdWRlICJtdDMxMi5oIgorI2luY2x1ZGUgImxnZHQzMzB4LmgiCisjaW5jbHVkZSAiZHZiLXBsbC5oIgogCiAvKiBsbmIgY29udHJvbCAqLwogCkBAIC0yMzQsNyArMjM2LDYgQEAKIAkuaW5pdHRhYiA9IHNhbXN1bmdfdGJtdTI0MTEyX2luaXR0YWIsCiAJLm1jbGsgPSA4ODAwMDAwMFVMLAogCS5pbnZlcnQgPSAwLAotCS5lbmhhbmNlZF90dW5pbmcgPSAwLAogCS5za2lwX3JlaW5pdCA9IDAsCiAJLmxvY2tfb3V0cHV0ID0gU1RWMDIyOV9MT0NLT1VUUFVUX0xLLAogCS52b2x0MTNfb3AwX29wMSA9IFNUVjAyOTlfVk9MVDEzX09QMSwKQEAgLTI5Niw2ICsyOTcsNTIgQEAKIAlyZXR1cm4gcmVxdWVzdF9maXJtd2FyZShmdywgbmFtZSwgZmMtPmRldik7CiB9CiAKK3N0YXRpYyBpbnQgbGdkdDMzMDNfcGxsX3NldChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMqIHBhcmFtcykKK3sKKwlzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjID0gZmUtPmR2Yi0+cHJpdjsKKwl1OCBidWZbNF07CisJc3RydWN0IGkyY19tc2cgbXNnID0KKwkJeyAuYWRkciA9IDB4NjEsIC5mbGFncyA9IDAsIC5idWYgPSBidWYsIC5sZW4gPSA0IH07CisJaW50IGVycjsKKworCWR2Yl9wbGxfY29uZmlndXJlKCZkdmJfcGxsX3RkdnNfdHVhNjAzNCxidWYsIHBhcmFtcy0+ZnJlcXVlbmN5LCAwKTsKKwlkcHJpbnRrKDEsICIlczogdHVuZXIgYXQgMHglMDJ4IGJ5dGVzOiAweCUwMnggMHglMDJ4IDB4JTAyeCAweCUwMnhcbiIsCisJCQlfX0ZVTkNUSU9OX18sIG1zZy5hZGRyLCBidWZbMF0sYnVmWzFdLGJ1ZlsyXSxidWZbM10pOworCWlmICgoZXJyID0gaTJjX3RyYW5zZmVyKCZmYy0+aTJjX2FkYXAsICZtc2csIDEpKSAhPSAxKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImxnZHQzMzAzOiAlcyBlcnJvciAiCisJCQkgICAiKGFkZHIgJTAyeCA8LSAlMDJ4LCBlcnIgPSAlaSlcbiIsCisJCQkgICBfX0ZVTkNUSU9OX18sIGJ1ZlswXSwgYnVmWzFdLCBlcnIpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJCWVsc2UKKwkJCXJldHVybiAtRVJFTU9URUlPOworCX0KKworCWJ1ZlswXSA9IDB4ODYgfCAweDE4OworCWJ1ZlsxXSA9IDB4NTA7CisJbXNnLmxlbiA9IDI7CisJaWYgKChlcnIgPSBpMmNfdHJhbnNmZXIoJmZjLT5pMmNfYWRhcCwgJm1zZywgMSkpICE9IDEpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAibGdkdDMzMDM6ICVzIGVycm9yICIKKwkJCSAgICIoYWRkciAlMDJ4IDwtICUwMngsIGVyciA9ICVpKVxuIiwKKwkJCSAgIF9fRlVOQ1RJT05fXywgYnVmWzBdLCBidWZbMV0sIGVycik7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwkJZWxzZQorCQkJcmV0dXJuIC1FUkVNT1RFSU87CisJfQorCisgICAgICAgIHJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGxnZHQzMzB4X2NvbmZpZyBhaXIycGNfYXRzY19oZDUwMDBfY29uZmlnID0geworCS5kZW1vZF9hZGRyZXNzICAgICAgID0gMHg1OSwKKwkuZGVtb2RfY2hpcCAgICAgICAgICA9IExHRFQzMzAzLAorCS5zZXJpYWxfbXBlZyAgICAgICAgID0gMHgwNCwKKwkucGxsX3NldCAgICAgICAgICAgICA9IGxnZHQzMzAzX3BsbF9zZXQsCisJLmNsb2NrX3BvbGFyaXR5X2ZsaXAgPSAxLAorfTsKKwogc3RhdGljIHN0cnVjdCBueHQyMDAyX2NvbmZpZyBzYW1zdW5nX3RibXZfY29uZmlnID0gewogCS5kZW1vZF9hZGRyZXNzICAgID0gMHgwYSwKIAkucmVxdWVzdF9maXJtd2FyZSA9IGZsZXhjb3BfZmVfcmVxdWVzdF9maXJtd2FyZSwKQEAgLTQ1OCw2ICs1MDUsMTEgQEAKIAkJZmMtPmRldl90eXBlICAgICAgICAgID0gRkNfQUlSX0FUU0MyOwogCQlpbmZvKCJmb3VuZCB0aGUgbnh0MjAwMiBhdCBpMmMgYWRkcmVzczogMHglMDJ4IixzYW1zdW5nX3RibXZfY29uZmlnLmRlbW9kX2FkZHJlc3MpOwogCX0gZWxzZQorCS8qIHRyeSB0aGUgYWlyIGF0c2MgM25kIGdlbmVyYXRpb24gKGxnZHQzMzAzKSAqLworCWlmICgoZmMtPmZlID0gbGdkdDMzMHhfYXR0YWNoKCZhaXIycGNfYXRzY19oZDUwMDBfY29uZmlnLCAmZmMtPmkyY19hZGFwKSkgIT0gTlVMTCkgeworCQlmYy0+ZGV2X3R5cGUgICAgICAgICAgPSBGQ19BSVJfQVRTQzM7CisJCWluZm8oImZvdW5kIHRoZSBsZ2R0MzMwMyBhdCBpMmMgYWRkcmVzczogMHglMDJ4IixhaXIycGNfYXRzY19oZDUwMDBfY29uZmlnLmRlbW9kX2FkZHJlc3MpOworCX0gZWxzZQogCS8qIHRyeSB0aGUgYWlyIGF0c2MgMW5kIGdlbmVyYXRpb24gKGJjbTM1MTApL3BhbmFzb25pYyBjdDEwcyAqLwogCWlmICgoZmMtPmZlID0gYmNtMzUxMF9hdHRhY2goJmFpcjJwY19hdHNjX2ZpcnN0X2dlbl9jb25maWcsICZmYy0+aTJjX2FkYXApKSAhPSBOVUxMKSB7CiAJCWZjLT5kZXZfdHlwZSAgICAgICAgICA9IEZDX0FJUl9BVFNDMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1taXNjLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtbWlzYy5jCmluZGV4IDNhMDhkMzguLjYyMjgyZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1taXNjLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLW1pc2MuYwpAQCAtNTEsNiArNTEsNyBAQAogCSJTa3kyUEMvU2t5U3RhciAyIERWQi1TIiwKIAkiU2t5MlBDL1NreVN0YXIgMiBEVkItUyAob2xkIHZlcnNpb24pIiwKIAkiQ2FibGUyUEMvQ2FibGVTdGFyIDIgRFZCLUMiLAorCSJBaXIyUEMvQWlyU3RhciAyIEFUU0MgM3JkIGdlbmVyYXRpb24gKEhENTAwMCkiLAogfTsKIAogY29uc3QgY2hhciAqZmxleGNvcF9idXNfbmFtZXNbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1yZWcuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1yZWcuaAppbmRleCA0YWUxZWI1Li4yM2NjNjQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtcmVnLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLXJlZy5oCkBAIC0yNiw2ICsyNiw3IEBACiAJRkNfU0tZLAogCUZDX1NLWV9PTEQsCiAJRkNfQ0FCTEUsCisJRkNfQUlSX0FUU0MzLAogfSBmbGV4Y29wX2RldmljZV90eXBlX3Q7CiAKIHR5cGVkZWYgZW51bSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC5jCmluZGV4IDEyODczZDQuLjEyM2VkOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC5jCkBAIC0xOTMsNiArMTkzLDcgQEAKIAl2MjA0ID0gZmMtPnJlYWRfaWJpX3JlZyhmYyxtaXNjXzIwNCk7CiAJdjIwNC5taXNjXzIwNC5QZXJfcmVzZXRfc2lnID0gMDsKIAlmYy0+d3JpdGVfaWJpX3JlZyhmYyxtaXNjXzIwNCx2MjA0KTsKKwltc2xlZXAoMSk7CiAJdjIwNC5taXNjXzIwNC5QZXJfcmVzZXRfc2lnID0gMTsKIAlmYy0+d3JpdGVfaWJpX3JlZyhmYyxtaXNjXzIwNCx2MjA0KTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L0tjb25maWcgYi9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9LY29uZmlnCmluZGV4IDFlODVkMTYuLjIzMzdiNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvS2NvbmZpZwpAQCAtNiwxMCArNiwxMiBAQAogCXNlbGVjdCBEVkJfTlhUNjAwMAogCXNlbGVjdCBEVkJfQ1gyNDExMAogCXNlbGVjdCBEVkJfT1I1MTIxMQorCXNlbGVjdCBEVkJfTEdEVDMzMFgKIAloZWxwCiAJICBTdXBwb3J0IGZvciBQQ0kgY2FyZHMgYmFzZWQgb24gdGhlIEJ0OHh4IFBDSSBicmlkZ2UuIEV4YW1wbGVzIGFyZQogCSAgdGhlIE5lYnVsYSBjYXJkcywgdGhlIFBpbm5hY2xlIFBDVFYgY2FyZHMsIHRoZSBUd2luaGFuIERTVCBjYXJkcywKLQkgIHRoZSBwY0hEVFYgSEQyMDAwIGNhcmRzLCBhbmQgY2VydGFpbiBBVmVyTWVkaWEgY2FyZHMuCisJICB0aGUgcGNIRFRWIEhEMjAwMCBjYXJkcywgdGhlIERWaUNPIEZ1c2lvbkhEVFYgTGl0ZSBjYXJkcywgYW5kCisJICBzb21lIEFWZXJNZWRpYSBjYXJkcy4KIAogCSAgU2luY2UgdGhlc2UgY2FyZHMgaGF2ZSBubyBNUEVHIGRlY29kZXIgb25ib2FyZCwgdGhleSB0cmFuc21pdAogCSAgb25seSBjb21wcmVzc2VkIE1QRUcgZGF0YSBvdmVyIHRoZSBQQ0kgYnVzLCBzbyB5b3UgbmVlZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHN0LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kc3QuYwppbmRleCBiM2M5ZDczLi44OTc3YzdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kc3QuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kc3QuYwpAQCAtNjkwLDggKzY5MCw4IEBACiAJCS5kZXZpY2VfaWQgPSAiRFRULUNJIiwKIAkJLm9mZnNldCA9IDEsCiAJCS5kc3RfdHlwZSA9IERTVF9UWVBFX0lTX1RFUlIsCi0JCS50eXBlX2ZsYWdzID0gRFNUX1RZUEVfSEFTX1RTMjA0IHwgRFNUX1RZUEVfSEFTX0ZXXzIsCi0JCS5kc3RfZmVhdHVyZSA9IDAKKwkJLnR5cGVfZmxhZ3MgPSBEU1RfVFlQRV9IQVNfVFMyMDQgfCBEU1RfVFlQRV9IQVNfTkVXVFVORSB8IERTVF9UWVBFX0hBU19GV18yIHwgRFNUX1RZUEVfSEFTX01VTFRJX0ZFLAorCQkuZHN0X2ZlYXR1cmUgPSBEU1RfVFlQRV9IQVNfQ0EKIAl9LAogCiAJewpAQCAtNzk2LDYgKzc5Niw1NiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGRzdF9nZXRfdHVuZXJfaW5mbyhzdHJ1Y3QgZHN0X3N0YXRlICpzdGF0ZSkKK3sKKwl1OCBnZXRfdHVuZXJfMVtdID0geyAweDAwLCAweDEzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07CisJdTggZ2V0X3R1bmVyXzJbXSA9IHsgMHgwMCwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OworCisJZ2V0X3R1bmVyXzFbN10gPSBkc3RfY2hlY2tfc3VtKGdldF90dW5lcl8xLCA3KTsKKwlnZXRfdHVuZXJfMls3XSA9IGRzdF9jaGVja19zdW0oZ2V0X3R1bmVyXzIsIDcpOworCWlmIChzdGF0ZS0+dHlwZV9mbGFncyAmIERTVF9UWVBFX0hBU19NVUxUSV9GRSkgeworCQlpZiAoZHN0X2NvbW1hbmQoc3RhdGUsIGdldF90dW5lcl8yLCA4KSA8IDApIHsKKwkJCWRwcmludGsodmVyYm9zZSwgRFNUX0lORk8sIDEsICJVbnN1cHBvcnRlZCBDb21tYW5kIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoZHN0X2NvbW1hbmQoc3RhdGUsIGdldF90dW5lcl8xLCA4KSA8IDApIHsKKwkJCWRwcmludGsodmVyYm9zZSwgRFNUX0lORk8sIDEsICJVbnN1cHBvcnRlZCBDb21tYW5kIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisJbWVtc2V0KCZzdGF0ZS0+Ym9hcmRfaW5mbywgJ1wwJywgOCk7CisJbWVtY3B5KCZzdGF0ZS0+Ym9hcmRfaW5mbywgJnN0YXRlLT5yeGJ1ZmZlciwgOCk7CisJaWYgKHN0YXRlLT50eXBlX2ZsYWdzICYgRFNUX1RZUEVfSEFTX01VTFRJX0ZFKSB7CisJCWlmIChzdGF0ZS0+Ym9hcmRfaW5mb1sxXSA9PSAweDBiKSB7CisJCQlpZiAoc3RhdGUtPnR5cGVfZmxhZ3MgJiBEU1RfVFlQRV9IQVNfVFMyMDQpCisJCQkJc3RhdGUtPnR5cGVfZmxhZ3MgJj0gfkRTVF9UWVBFX0hBU19UUzIwNDsKKwkJCXN0YXRlLT50eXBlX2ZsYWdzIHw9IERTVF9UWVBFX0hBU19ORVdUVU5FOworCQkJZHByaW50ayh2ZXJib3NlLCBEU1RfSU5GTywgMSwgIkRTVCB0eXBlIGhhcyBUUz0xODgiKTsKKwkJfSBlbHNlIHsKKwkJCWlmIChzdGF0ZS0+dHlwZV9mbGFncyAmIERTVF9UWVBFX0hBU19ORVdUVU5FKQorCQkJCXN0YXRlLT50eXBlX2ZsYWdzICY9IH5EU1RfVFlQRV9IQVNfTkVXVFVORTsKKwkJCXN0YXRlLT50eXBlX2ZsYWdzIHw9IERTVF9UWVBFX0hBU19UUzIwNDsKKwkJCWRwcmludGsodmVyYm9zZSwgRFNUX0lORk8sIDEsICJEU1QgdHlwZSBoYXMgVFM9MjA0Iik7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoc3RhdGUtPmJvYXJkX2luZm9bMF0gPT0gMHhiYykgeworCQkJaWYgKHN0YXRlLT50eXBlX2ZsYWdzICYgRFNUX1RZUEVfSEFTX1RTMjA0KQorCQkJCXN0YXRlLT50eXBlX2ZsYWdzICY9IH5EU1RfVFlQRV9IQVNfVFMyMDQ7CisJCQlzdGF0ZS0+dHlwZV9mbGFncyB8PSBEU1RfVFlQRV9IQVNfTkVXVFVORTsKKwkJCWRwcmludGsodmVyYm9zZSwgRFNUX0lORk8sIDEsICJEU1QgdHlwZSBoYXMgVFM9MTg4LCBEYXVnaHRlcmJvYXJkPVslZF0iLCBzdGF0ZS0+Ym9hcmRfaW5mb1sxXSk7CisKKwkJfSBlbHNlIGlmIChzdGF0ZS0+Ym9hcmRfaW5mb1swXSA9PSAweGNjKSB7CisJCQlpZiAoc3RhdGUtPnR5cGVfZmxhZ3MgJiBEU1RfVFlQRV9IQVNfTkVXVFVORSkKKwkJCQlzdGF0ZS0+dHlwZV9mbGFncyAmPSB+RFNUX1RZUEVfSEFTX05FV1RVTkU7CisJCQlzdGF0ZS0+dHlwZV9mbGFncyB8PSBEU1RfVFlQRV9IQVNfVFMyMDQ7CisJCQlkcHJpbnRrKHZlcmJvc2UsIERTVF9JTkZPLCAxLCAiRFNUIHR5cGUgaGFzIFRTPTIwNCBEYXVnaHRlcmJvYXJkPVslZF0iLCBzdGF0ZS0+Ym9hcmRfaW5mb1sxXSk7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBkc3RfZ2V0X2RldmljZV9pZChzdHJ1Y3QgZHN0X3N0YXRlICpzdGF0ZSkKIHsKIAl1OCByZXBseTsKQEAgLTg1NSwxNSArOTA1LDEyIEBACiAJc3RhdGUtPmRzdF90eXBlID0gdXNlX2RzdF90eXBlOwogCWRzdF90eXBlX2ZsYWdzX3ByaW50KHN0YXRlLT50eXBlX2ZsYWdzKTsKIAotCWlmIChzdGF0ZS0+dHlwZV9mbGFncyAmIERTVF9UWVBFX0hBU19UUzIwNCkgewotCQlkc3RfcGFja3NpemUoc3RhdGUsIDIwNCk7Ci0JfQotCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgZHN0X3Byb2JlKHN0cnVjdCBkc3Rfc3RhdGUgKnN0YXRlKQogeworCXNlbWFfaW5pdCgmc3RhdGUtPmRzdF9tdXRleCwgMSk7CiAJaWYgKChyZGNfODgyMF9yZXNldChzdGF0ZSkpIDwgMCkgewogCQlkcHJpbnRrKHZlcmJvc2UsIERTVF9FUlJPUiwgMSwgIlJEQyA4ODIwIFJFU0VUIEZhaWxlZC4iKTsKIAkJcmV0dXJuIC0xOwpAQCAtODg2LDYgKzkzMywxMyBAQAogCQlkcHJpbnRrKHZlcmJvc2UsIERTVF9JTkZPLCAxLCAiTUFDOiBVbnN1cHBvcnRlZCBjb21tYW5kIik7CiAJCXJldHVybiAwOwogCX0KKwlpZiAoKHN0YXRlLT50eXBlX2ZsYWdzICYgRFNUX1RZUEVfSEFTX01VTFRJX0ZFKSB8fCAoc3RhdGUtPnR5cGVfZmxhZ3MgJiBEU1RfVFlQRV9IQVNfRldfQlVJTEQpKSB7CisJCWlmIChkc3RfZ2V0X3R1bmVyX2luZm8oc3RhdGUpIDwgMCkKKwkJCWRwcmludGsodmVyYm9zZSwgRFNUX0lORk8sIDEsICJUdW5lcjogVW5zdXBwb3J0ZWQgY29tbWFuZCIpOworCX0KKwlpZiAoc3RhdGUtPnR5cGVfZmxhZ3MgJiBEU1RfVFlQRV9IQVNfVFMyMDQpIHsKKwkJZHN0X3BhY2tzaXplKHN0YXRlLCAyMDQpOworCX0KIAlpZiAoc3RhdGUtPnR5cGVfZmxhZ3MgJiBEU1RfVFlQRV9IQVNfRldfQlVJTEQpIHsKIAkJaWYgKGRzdF9md192ZXIoc3RhdGUpIDwgMCkgewogCQkJZHByaW50ayh2ZXJib3NlLCBEU1RfSU5GTywgMSwgIkZXOiBVbnN1cHBvcnRlZCBjb21tYW5kIik7CkBAIC05MDcsMjEgKzk2MSwyMyBAQAogaW50IGRzdF9jb21tYW5kKHN0cnVjdCBkc3Rfc3RhdGUgKnN0YXRlLCB1OCAqZGF0YSwgdTggbGVuKQogewogCXU4IHJlcGx5OworCisJZG93bigmc3RhdGUtPmRzdF9tdXRleCk7CiAJaWYgKChkc3RfY29tbV9pbml0KHN0YXRlKSkgPCAwKSB7CiAJCWRwcmludGsodmVyYm9zZSwgRFNUX05PVElDRSwgMSwgIkRTVCBDb21tdW5pY2F0aW9uIEluaXRpYWxpemF0aW9uIEZhaWxlZC4iKTsKLQkJcmV0dXJuIC0xOworCQlnb3RvIGVycm9yOwogCX0KIAlpZiAod3JpdGVfZHN0KHN0YXRlLCBkYXRhLCBsZW4pKSB7CiAJCWRwcmludGsodmVyYm9zZSwgRFNUX0lORk8sIDEsICJUcmluZyB0byByZWNvdmVyLi4gIik7CiAJCWlmICgoZHN0X2Vycm9yX3JlY292ZXJ5KHN0YXRlKSkgPCAwKSB7CiAJCQlkcHJpbnRrKHZlcmJvc2UsIERTVF9FUlJPUiwgMSwgIlJlY292ZXJ5IEZhaWxlZC4iKTsKLQkJCXJldHVybiAtMTsKKwkJCWdvdG8gZXJyb3I7CiAJCX0KLQkJcmV0dXJuIC0xOworCQlnb3RvIGVycm9yOwogCX0KIAlpZiAoKGRzdF9waW9fZGlzYWJsZShzdGF0ZSkpIDwgMCkgewogCQlkcHJpbnRrKHZlcmJvc2UsIERTVF9FUlJPUiwgMSwgIlBJTyBEaXNhYmxlIEZhaWxlZC4iKTsKLQkJcmV0dXJuIC0xOworCQlnb3RvIGVycm9yOwogCX0KIAlpZiAoc3RhdGUtPnR5cGVfZmxhZ3MgJiBEU1RfVFlQRV9IQVNfRldfMSkKIAkJdWRlbGF5KDMwMDApOwpAQCAtOTI5LDM2ICs5ODUsNDEgQEAKIAkJZHByaW50ayh2ZXJib3NlLCBEU1RfREVCVUcsIDEsICJUcnlpbmcgdG8gcmVjb3Zlci4uICIpOwogCQlpZiAoKGRzdF9lcnJvcl9yZWNvdmVyeShzdGF0ZSkpIDwgMCkgewogCQkJZHByaW50ayh2ZXJib3NlLCBEU1RfSU5GTywgMSwgIlJlY292ZXJ5IEZhaWxlZC4iKTsKLQkJCXJldHVybiAtMTsKKwkJCWdvdG8gZXJyb3I7CiAJCX0KLQkJcmV0dXJuIC0xOworCQlnb3RvIGVycm9yOwogCX0KIAlpZiAocmVwbHkgIT0gQUNLKSB7CiAJCWRwcmludGsodmVyYm9zZSwgRFNUX0lORk8sIDEsICJ3cml0ZSBub3QgYWNrbm93bGVkZ2VkIDB4JTAyeCAiLCByZXBseSk7Ci0JCXJldHVybiAtMTsKKwkJZ290byBlcnJvcjsKIAl9CiAJaWYgKGxlbiA+PSAyICYmIGRhdGFbMF0gPT0gMCAmJiAoZGF0YVsxXSA9PSAxIHx8IGRhdGFbMV0gPT0gMykpCi0JCXJldHVybiAwOworCQlnb3RvIGVycm9yOwogCWlmIChzdGF0ZS0+dHlwZV9mbGFncyAmIERTVF9UWVBFX0hBU19GV18xKQogCQl1ZGVsYXkoMzAwMCk7CiAJZWxzZQogCQl1ZGVsYXkoMjAwMCk7CiAJaWYgKCFkc3Rfd2FpdF9kc3RfcmVhZHkoc3RhdGUsIE5PX0RFTEFZKSkKLQkJcmV0dXJuIC0xOworCQlnb3RvIGVycm9yOwogCWlmIChyZWFkX2RzdChzdGF0ZSwgc3RhdGUtPnJ4YnVmZmVyLCBGSVhFRF9DT01NKSkgewogCQlkcHJpbnRrKHZlcmJvc2UsIERTVF9ERUJVRywgMSwgIlRyeWluZyB0byByZWNvdmVyLi4gIik7CiAJCWlmICgoZHN0X2Vycm9yX3JlY292ZXJ5KHN0YXRlKSkgPCAwKSB7CiAJCQlkcHJpbnRrKHZlcmJvc2UsIERTVF9JTkZPLCAxLCAiUmVjb3ZlcnkgZmFpbGVkLiIpOwotCQkJcmV0dXJuIC0xOworCQkJZ290byBlcnJvcjsKIAkJfQotCQlyZXR1cm4gLTE7CisJCWdvdG8gZXJyb3I7CiAJfQogCWlmIChzdGF0ZS0+cnhidWZmZXJbN10gIT0gZHN0X2NoZWNrX3N1bShzdGF0ZS0+cnhidWZmZXIsIDcpKSB7CiAJCWRwcmludGsodmVyYm9zZSwgRFNUX0lORk8sIDEsICJjaGVja3N1bSBmYWlsdXJlIik7Ci0JCXJldHVybiAtMTsKKwkJZ290byBlcnJvcjsKIAl9Ci0KKwl1cCgmc3RhdGUtPmRzdF9tdXRleCk7CiAJcmV0dXJuIDA7CisKK2Vycm9yOgorCXVwKCZzdGF0ZS0+ZHN0X211dGV4KTsKKwlyZXR1cm4gLUVJTzsKKwogfQogRVhQT1JUX1NZTUJPTChkc3RfY29tbWFuZCk7CiAKQEAgLTEwMTYsNyArMTA3Nyw3IEBACiAJCXJldHVybiAwOwogCXN0YXRlLT5kaXNlcV9mbGFncyAmPSB+KEhBU19MT0NLKTsKIAlpZiAoIWRzdF93YWl0X2RzdF9yZWFkeShzdGF0ZSwgTk9fREVMQVkpKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIC1FSU87CiAJaWYgKHN0YXRlLT50eXBlX2ZsYWdzICYgRFNUX1RZUEVfSEFTX05FV1RVTkUpCiAJCS8qIGhvdyB0byBnZXQgdmFyaWFibGUgbGVuZ3RoIHJlcGx5ID8/Pz8gKi8KIAkJcmV0dmFsID0gcmVhZF9kc3Qoc3RhdGUsIHN0YXRlLT5yeF90dW5hLCAxMCk7CkBAIC0xMDI0LDIyICsxMDg1LDI3IEBACiAJCXJldHZhbCA9IHJlYWRfZHN0KHN0YXRlLCAmc3RhdGUtPnJ4X3R1bmFbMl0sIEZJWEVEX0NPTU0pOwogCWlmIChyZXR2YWwgPCAwKSB7CiAJCWRwcmludGsodmVyYm9zZSwgRFNUX0RFQlVHLCAxLCAicmVhZCBub3Qgc3VjY2Vzc2Z1bCIpOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIHJldHZhbDsKIAl9CiAJaWYgKHN0YXRlLT50eXBlX2ZsYWdzICYgRFNUX1RZUEVfSEFTX05FV1RVTkUpIHsKIAkJaWYgKHN0YXRlLT5yeF90dW5hWzldICE9IGRzdF9jaGVja19zdW0oJnN0YXRlLT5yeF90dW5hWzBdLCA5KSkgewogCQkJZHByaW50ayh2ZXJib3NlLCBEU1RfSU5GTywgMSwgImNoZWNrc3VtIGZhaWx1cmUgPyAiKTsKLQkJCXJldHVybiAwOworCQkJcmV0dXJuIC1FSU87CiAJCX0KIAl9IGVsc2UgewogCQlpZiAoc3RhdGUtPnJ4X3R1bmFbOV0gIT0gZHN0X2NoZWNrX3N1bSgmc3RhdGUtPnJ4X3R1bmFbMl0sIDcpKSB7CiAJCQlkcHJpbnRrKHZlcmJvc2UsIERTVF9JTkZPLCAxLCAiY2hlY2tzdW0gZmFpbHVyZT8gIik7Ci0JCQlyZXR1cm4gMDsKKwkJCXJldHVybiAtRUlPOwogCQl9CiAJfQogCWlmIChzdGF0ZS0+cnhfdHVuYVsyXSA9PSAwICYmIHN0YXRlLT5yeF90dW5hWzNdID09IDApCiAJCXJldHVybiAwOwotCXN0YXRlLT5kZWNvZGVfZnJlcSA9ICgoc3RhdGUtPnJ4X3R1bmFbMl0gJiAweDdmKSA8PCA4KSArIHN0YXRlLT5yeF90dW5hWzNdOworCWlmIChzdGF0ZS0+ZHN0X3R5cGUgPT0gRFNUX1RZUEVfSVNfU0FUKSB7CisJCXN0YXRlLT5kZWNvZGVfZnJlcSA9ICgoc3RhdGUtPnJ4X3R1bmFbMl0gJiAweDdmKSA8PCA4KSArIHN0YXRlLT5yeF90dW5hWzNdOworCX0gZWxzZSB7CisJCXN0YXRlLT5kZWNvZGVfZnJlcSA9ICgoc3RhdGUtPnJ4X3R1bmFbMl0gJiAweDdmKSA8PCAxNikgKyAoc3RhdGUtPnJ4X3R1bmFbM10gPDwgOCkgKyBzdGF0ZS0+cnhfdHVuYVs0XTsKKwl9CisJc3RhdGUtPmRlY29kZV9mcmVxID0gc3RhdGUtPmRlY29kZV9mcmVxICogMTAwMDsKIAlzdGF0ZS0+ZGVjb2RlX2xvY2sgPSAxOwogCXN0YXRlLT5kaXNlcV9mbGFncyB8PSBIQVNfTE9DSzsKIApAQCAtMTA2MiwxMCArMTEyOCwxMCBAQAogCQkJZHN0X3NldF92b2x0YWdlKGZlLCBTRUNfVk9MVEFHRV8xMyk7CiAJfQogCXN0YXRlLT5kaXNlcV9mbGFncyAmPSB+KEhBU19MT0NLIHwgQVRURU1QVF9UVU5FKTsKLQorCWRvd24oJnN0YXRlLT5kc3RfbXV0ZXgpOwogCWlmICgoZHN0X2NvbW1faW5pdChzdGF0ZSkpIDwgMCkgewogCQlkcHJpbnRrKHZlcmJvc2UsIERTVF9ERUJVRywgMSwgIkRTVCBDb21tdW5pY2F0aW9uIGluaXRpYWxpemF0aW9uIGZhaWxlZC4iKTsKLQkJcmV0dXJuIC0xOworCQlnb3RvIGVycm9yOwogCX0KIAlpZiAoc3RhdGUtPnR5cGVfZmxhZ3MgJiBEU1RfVFlQRV9IQVNfTkVXVFVORSkgewogCQlzdGF0ZS0+dHhfdHVuYVs5XSA9IGRzdF9jaGVja19zdW0oJnN0YXRlLT50eF90dW5hWzBdLCA5KTsKQEAgLTEwNzcsMjMgKzExNDMsMjkgQEAKIAlpZiAocmV0dmFsIDwgMCkgewogCQlkc3RfcGlvX2Rpc2FibGUoc3RhdGUpOwogCQlkcHJpbnRrKHZlcmJvc2UsIERTVF9ERUJVRywgMSwgIndyaXRlIG5vdCBzdWNjZXNzZnVsIik7Ci0JCXJldHVybiByZXR2YWw7CisJCWdvdG8gd2VycjsKIAl9CiAJaWYgKChkc3RfcGlvX2Rpc2FibGUoc3RhdGUpKSA8IDApIHsKIAkJZHByaW50ayh2ZXJib3NlLCBEU1RfREVCVUcsIDEsICJEU1QgUElPIGRpc2FibGUgZmFpbGVkICEiKTsKLQkJcmV0dXJuIC0xOworCQlnb3RvIGVycm9yOwogCX0KIAlpZiAoKHJlYWRfZHN0KHN0YXRlLCAmcmVwbHksIEdFVF9BQ0spIDwgMCkpIHsKIAkJZHByaW50ayh2ZXJib3NlLCBEU1RfREVCVUcsIDEsICJyZWFkIHZlcmlmeSBub3Qgc3VjY2Vzc2Z1bC4iKTsKLQkJcmV0dXJuIC0xOworCQlnb3RvIGVycm9yOwogCX0KIAlpZiAocmVwbHkgIT0gQUNLKSB7CiAJCWRwcmludGsodmVyYm9zZSwgRFNUX0RFQlVHLCAxLCAid3JpdGUgbm90IGFja25vd2xlZGdlZCAweCUwMnggIiwgcmVwbHkpOwotCQlyZXR1cm4gMDsKKwkJZ290byBlcnJvcjsKIAl9CiAJc3RhdGUtPmRpc2VxX2ZsYWdzIHw9IEFUVEVNUFRfVFVORTsKKwlyZXR2YWwgPSBkc3RfZ2V0X3R1bmEoc3RhdGUpOword2VycjoKKwl1cCgmc3RhdGUtPmRzdF9tdXRleCk7CisJcmV0dXJuIHJldHZhbDsKIAotCXJldHVybiBkc3RfZ2V0X3R1bmEoc3RhdGUpOworZXJyb3I6CisJdXAoJnN0YXRlLT5kc3RfbXV0ZXgpOworCXJldHVybiAtRUlPOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHN0X2NhLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kc3RfY2EuYwppbmRleCA2Nzc2YTU5Li5lNjU0MWFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kc3RfY2EuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kc3RfY2EuYwpAQCAtNjksNjIgKzY5LDUzIEBACiB9CiAKIAotc3RhdGljIGludCBwdXRfY2hlY2tzdW0odTggKmNoZWNrX3N0cmluZywgaW50IGxlbmd0aCkKK3N0YXRpYyB2b2lkIHB1dF9jaGVja3N1bSh1OCAqY2hlY2tfc3RyaW5nLCBpbnQgbGVuZ3RoKQogewotCXU4IGkgPSAwLCBjaGVja3N1bSA9IDA7Ci0KLQlkcHJpbnRrKHZlcmJvc2UsIERTVF9DQV9ERUJVRywgMSwgIiA9PT09PT09PT09PT09PT09PT09PT09PT09IENoZWNrc3VtIGNhbGN1bGF0aW9uID09PT09PT09PT09PT09PT09PT09PT09PT09PSIpOwotCWRwcmludGsodmVyYm9zZSwgRFNUX0NBX0RFQlVHLCAxLCAiIFN0cmluZyBMZW5ndGg9WzB4JTAyeF0iLCBsZW5ndGgpOwotCWRwcmludGsodmVyYm9zZSwgRFNUX0NBX0RFQlVHLCAxLCAiIFN0cmluZz1bIik7Ci0KLQl3aGlsZSAoaSA8IGxlbmd0aCkgewotCQlkcHJpbnRrKHZlcmJvc2UsIERTVF9DQV9ERUJVRywgMCwgIiAlMDJ4IiwgY2hlY2tfc3RyaW5nW2ldKTsKLQkJY2hlY2tzdW0gKz0gY2hlY2tfc3RyaW5nW2ldOwotCQlpKys7Ci0JfQotCWRwcmludGsodmVyYm9zZSwgRFNUX0NBX0RFQlVHLCAwLCAiIF1cbiIpOwotCWRwcmludGsodmVyYm9zZSwgRFNUX0NBX0RFQlVHLCAxLCAiU3VtPVslMDJ4XVxuIiwgY2hlY2tzdW0pOwotCWNoZWNrX3N0cmluZ1tsZW5ndGhdID0gfmNoZWNrc3VtICsgMTsKLQlkcHJpbnRrKHZlcmJvc2UsIERTVF9DQV9ERUJVRywgMSwgIiBDaGVja3N1bT1bJTAyeF0iLCBjaGVja19zdHJpbmdbbGVuZ3RoXSk7Ci0JZHByaW50ayh2ZXJib3NlLCBEU1RfQ0FfREVCVUcsIDEsICIgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iKTsKLQotCXJldHVybiAwOworCWRwcmludGsodmVyYm9zZSwgRFNUX0NBX0RFQlVHLCAxLCAiIENvbXB1dGluZyBzdHJpbmcgY2hlY2tzdW0uIik7CisJZHByaW50ayh2ZXJib3NlLCBEU1RfQ0FfREVCVUcsIDEsICIgIC0+IHN0cmluZyBsZW5ndGggOiAweCUwMngiLCBsZW5ndGgpOworCWNoZWNrX3N0cmluZ1tsZW5ndGhdID0gZHN0X2NoZWNrX3N1bSAoY2hlY2tfc3RyaW5nLCBsZW5ndGgpOworCWRwcmludGsodmVyYm9zZSwgRFNUX0NBX0RFQlVHLCAxLCAiICAtPiBjaGVja3N1bSAgICAgIDogMHglMDJ4IiwgY2hlY2tfc3RyaW5nW2xlbmd0aF0pOwogfQogCiBzdGF0aWMgaW50IGRzdF9jaV9jb21tYW5kKHN0cnVjdCBkc3Rfc3RhdGUqIHN0YXRlLCB1OCAqIGRhdGEsIHU4ICpjYV9zdHJpbmcsIHU4IGxlbiwgaW50IHJlYWQpCiB7CiAJdTggcmVwbHk7CiAKKwlkb3duKCZzdGF0ZS0+ZHN0X211dGV4KTsKIAlkc3RfY29tbV9pbml0KHN0YXRlKTsKIAltc2xlZXAoNjUpOwogCiAJaWYgKHdyaXRlX2RzdChzdGF0ZSwgZGF0YSwgbGVuKSkgewogCQlkcHJpbnRrKHZlcmJvc2UsIERTVF9DQV9JTkZPLCAxLCAiIFdyaXRlIG5vdCBzdWNjZXNzZnVsLCB0cnlpbmcgdG8gcmVjb3ZlciIpOwogCQlkc3RfZXJyb3JfcmVjb3Zlcnkoc3RhdGUpOwotCQlyZXR1cm4gLTE7CisJCWdvdG8gZXJyb3I7CiAJfQogCWlmICgoZHN0X3Bpb19kaXNhYmxlKHN0YXRlKSkgPCAwKSB7CiAJCWRwcmludGsodmVyYm9zZSwgRFNUX0NBX0VSUk9SLCAxLCAiIERTVCBQSU8gZGlzYWJsZSBmYWlsZWQuIik7Ci0JCXJldHVybiAtMTsKKwkJZ290byBlcnJvcjsKIAl9CiAJaWYgKHJlYWRfZHN0KHN0YXRlLCAmcmVwbHksIEdFVF9BQ0spIDwgMCkgewogCQlkcHJpbnRrKHZlcmJvc2UsIERTVF9DQV9JTkZPLCAxLCAiIFJlYWQgbm90IHN1Y2Nlc3NmdWwsIHRyeWluZyB0byByZWNvdmVyIik7CiAJCWRzdF9lcnJvcl9yZWNvdmVyeShzdGF0ZSk7Ci0JCXJldHVybiAtMTsKKwkJZ290byBlcnJvcjsKIAl9CiAJaWYgKHJlYWQpIHsKIAkJaWYgKCEgZHN0X3dhaXRfZHN0X3JlYWR5KHN0YXRlLCBMT05HX0RFTEFZKSkgewogCQkJZHByaW50ayh2ZXJib3NlLCBEU1RfQ0FfTk9USUNFLCAxLCAiIDg4MjAgbm90IHJlYWR5Iik7Ci0JCQlyZXR1cm4gLTE7CisJCQlnb3RvIGVycm9yOwogCQl9CiAJCWlmIChyZWFkX2RzdChzdGF0ZSwgY2Ffc3RyaW5nLCAxMjgpIDwgMCkgewkvKglUcnkgdG8gbWFrZSB0aGlzIGR5bmFtaWMJKi8KIAkJCWRwcmludGsodmVyYm9zZSwgRFNUX0NBX0lORk8sIDEsICIgUmVhZCBub3Qgc3VjY2Vzc2Z1bCwgdHJ5aW5nIHRvIHJlY292ZXIiKTsKIAkJCWRzdF9lcnJvcl9yZWNvdmVyeShzdGF0ZSk7Ci0JCQlyZXR1cm4gLTE7CisJCQlnb3RvIGVycm9yOwogCQl9CiAJfQotCisJdXAoJnN0YXRlLT5kc3RfbXV0ZXgpOwogCXJldHVybiAwOworCitlcnJvcjoKKwl1cCgmc3RhdGUtPmRzdF9tdXRleCk7CisJcmV0dXJuIC1FSU87CiB9CiAKIApAQCAtMTY2LDcgKzE1Nyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY2FfZ2V0X3Nsb3RfY2FwcyhzdHJ1Y3QgZHN0X3N0YXRlICpzdGF0ZSwgc3RydWN0IGNhX2NhcHMgKnBfY2FfY2Fwcywgdm9pZCAqYXJnKQorc3RhdGljIGludCBjYV9nZXRfc2xvdF9jYXBzKHN0cnVjdCBkc3Rfc3RhdGUgKnN0YXRlLCBzdHJ1Y3QgY2FfY2FwcyAqcF9jYV9jYXBzLCB2b2lkIF9fdXNlciAqYXJnKQogewogCWludCBpOwogCXU4IHNsb3RfY2FwWzI1Nl07CkBAIC0xOTIsMjUgKzE4MywyNSBAQAogCXBfY2FfY2Fwcy0+ZGVzY3JfbnVtID0gc2xvdF9jYXBbN107CiAJcF9jYV9jYXBzLT5kZXNjcl90eXBlID0gMTsKIAotCWlmIChjb3B5X3RvX3VzZXIoKHN0cnVjdCBjYV9jYXBzICopYXJnLCBwX2NhX2NhcHMsIHNpemVvZiAoc3RydWN0IGNhX2NhcHMpKSkKKwlpZiAoY29weV90b191c2VyKGFyZywgcF9jYV9jYXBzLCBzaXplb2YgKHN0cnVjdCBjYV9jYXBzKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCiAJcmV0dXJuIDA7CiB9CiAKIC8qCU5lZWQgc29tZSBtb3JlIHdvcmsJKi8KLXN0YXRpYyBpbnQgY2FfZ2V0X3Nsb3RfZGVzY3Ioc3RydWN0IGRzdF9zdGF0ZSAqc3RhdGUsIHN0cnVjdCBjYV9tc2cgKnBfY2FfbWVzc2FnZSwgdm9pZCAqYXJnKQorc3RhdGljIGludCBjYV9nZXRfc2xvdF9kZXNjcihzdHJ1Y3QgZHN0X3N0YXRlICpzdGF0ZSwgc3RydWN0IGNhX21zZyAqcF9jYV9tZXNzYWdlLCB2b2lkIF9fdXNlciAqYXJnKQogewogCXJldHVybiAtRU9QTk9UU1VQUDsKIH0KIAogCi1zdGF0aWMgaW50IGNhX2dldF9zbG90X2luZm8oc3RydWN0IGRzdF9zdGF0ZSAqc3RhdGUsIHN0cnVjdCBjYV9zbG90X2luZm8gKnBfY2Ffc2xvdF9pbmZvLCB2b2lkICphcmcpCitzdGF0aWMgaW50IGNhX2dldF9zbG90X2luZm8oc3RydWN0IGRzdF9zdGF0ZSAqc3RhdGUsIHN0cnVjdCBjYV9zbG90X2luZm8gKnBfY2Ffc2xvdF9pbmZvLCB2b2lkIF9fdXNlciAqYXJnKQogewogCWludCBpOwogCXN0YXRpYyB1OCBzbG90X2NvbW1hbmRbOF0gPSB7MHgwMCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZn07CiAKLQl1OCAqc2xvdF9pbmZvID0gc3RhdGUtPnJ4YnVmZmVyOworCXU4ICpzbG90X2luZm8gPSBzdGF0ZS0+bWVzc2FnZXM7CiAKIAlwdXRfY2hlY2tzdW0oJnNsb3RfY29tbWFuZFswXSwgNyk7CiAJaWYgKChkc3RfcHV0X2NpKHN0YXRlLCBzbG90X2NvbW1hbmQsIHNpemVvZiAoc2xvdF9jb21tYW5kKSwgc2xvdF9pbmZvLCBHRVRfUkVQTFkpKSA8IDApIHsKQEAgLTIzOCwxOSArMjI5LDE5IEBACiAJfSBlbHNlCiAJCXBfY2Ffc2xvdF9pbmZvLT5mbGFncyA9IDA7CiAKLQlpZiAoY29weV90b191c2VyKChzdHJ1Y3QgY2Ffc2xvdF9pbmZvICopYXJnLCBwX2NhX3Nsb3RfaW5mbywgc2l6ZW9mIChzdHJ1Y3QgY2Ffc2xvdF9pbmZvKSkpCisJaWYgKGNvcHlfdG9fdXNlcihhcmcsIHBfY2Ffc2xvdF9pbmZvLCBzaXplb2YgKHN0cnVjdCBjYV9zbG90X2luZm8pKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlyZXR1cm4gMDsKIH0KIAogCi1zdGF0aWMgaW50IGNhX2dldF9tZXNzYWdlKHN0cnVjdCBkc3Rfc3RhdGUgKnN0YXRlLCBzdHJ1Y3QgY2FfbXNnICpwX2NhX21lc3NhZ2UsIHZvaWQgKmFyZykKK3N0YXRpYyBpbnQgY2FfZ2V0X21lc3NhZ2Uoc3RydWN0IGRzdF9zdGF0ZSAqc3RhdGUsIHN0cnVjdCBjYV9tc2cgKnBfY2FfbWVzc2FnZSwgdm9pZCBfX3VzZXIgKmFyZykKIHsKIAl1OCBpID0gMDsKIAl1MzIgY29tbWFuZCA9IDA7CiAKLQlpZiAoY29weV9mcm9tX3VzZXIocF9jYV9tZXNzYWdlLCAodm9pZCAqKWFyZywgc2l6ZW9mIChzdHJ1Y3QgY2FfbXNnKSkpCisJaWYgKGNvcHlfZnJvbV91c2VyKHBfY2FfbWVzc2FnZSwgYXJnLCBzaXplb2YgKHN0cnVjdCBjYV9tc2cpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlpZiAocF9jYV9tZXNzYWdlLT5tc2cpIHsKQEAgLTI2Niw3ICsyNTcsNyBAQAogCQlzd2l0Y2ggKGNvbW1hbmQpIHsKIAkJY2FzZSBDQV9BUFBfSU5GTzoKIAkJCW1lbWNweShwX2NhX21lc3NhZ2UtPm1zZywgc3RhdGUtPm1lc3NhZ2VzLCAxMjgpOwotCQkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCAqKWFyZywgcF9jYV9tZXNzYWdlLCBzaXplb2YgKHN0cnVjdCBjYV9tc2cpKSApCisJCQlpZiAoY29weV90b191c2VyKGFyZywgcF9jYV9tZXNzYWdlLCBzaXplb2YgKHN0cnVjdCBjYV9tc2cpKSApCiAJCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCQlicmVhazsKIAkJfQpAQCAtMzE1LDcgKzMwNiw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXUzMiBhc25fMV9kZWNvZGUodTggKmFzbl8xX2FycmF5KQorc3RhdGljIHUzMiBhc25fMV9kZWNvZGUodTggKmFzbl8xX2FycmF5KQogewogCXU4IGxlbmd0aF9maWVsZCA9IDAsIHdvcmRfY291bnQgPSAwLCBjb3VudCA9IDA7CiAJdTMyIGxlbmd0aCA9IDA7CkBAIC0zMjgsNyArMzE5LDggQEAKIAl9IGVsc2UgewogCQl3b3JkX2NvdW50ID0gbGVuZ3RoX2ZpZWxkICYgMHg3ZjsKIAkJZm9yIChjb3VudCA9IDA7IGNvdW50IDwgd29yZF9jb3VudDsgY291bnQrKykgewotCQkJbGVuZ3RoID0gKGxlbmd0aCB8IGFzbl8xX2FycmF5W2NvdW50ICsgMV0pIDw8IDg7CisJCQlsZW5ndGggPSBsZW5ndGggIDw8IDg7CisJCQlsZW5ndGggKz0gYXNuXzFfYXJyYXlbY291bnQgKyAxXTsKIAkJCWRwcmludGsodmVyYm9zZSwgRFNUX0NBX0RFQlVHLCAxLCAiIExlbmd0aD1bJTA0eF0iLCBsZW5ndGgpOwogCQl9CiAJfQpAQCAtMzk5LDEzICszOTEsMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjYV9zZW5kX21lc3NhZ2Uoc3RydWN0IGRzdF9zdGF0ZSAqc3RhdGUsIHN0cnVjdCBjYV9tc2cgKnBfY2FfbWVzc2FnZSwgdm9pZCAqYXJnKQorc3RhdGljIGludCBjYV9zZW5kX21lc3NhZ2Uoc3RydWN0IGRzdF9zdGF0ZSAqc3RhdGUsIHN0cnVjdCBjYV9tc2cgKnBfY2FfbWVzc2FnZSwgdm9pZCBfX3VzZXIgKmFyZykKIHsKIAlpbnQgaSA9IDA7CiAJdW5zaWduZWQgaW50IGNhX21lc3NhZ2VfaGVhZGVyX2xlbjsKIAogCXUzMiBjb21tYW5kID0gMDsKIAlzdHJ1Y3QgY2FfbXNnICpod19idWZmZXI7CisJaW50IHJlc3VsdCA9IDA7CiAKIAlpZiAoKGh3X2J1ZmZlciA9IChzdHJ1Y3QgY2FfbXNnICopIGttYWxsb2Moc2l6ZW9mIChzdHJ1Y3QgY2FfbXNnKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpIHsKIAkJZHByaW50ayh2ZXJib3NlLCBEU1RfQ0FfRVJST1IsIDEsICIgTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSIpOwpAQCAtNDEzLDggKzQwNiwxMSBAQAogCX0KIAlkcHJpbnRrKHZlcmJvc2UsIERTVF9DQV9ERUJVRywgMSwgIiAiKTsKIAotCWlmIChjb3B5X2Zyb21fdXNlcihwX2NhX21lc3NhZ2UsICh2b2lkICopYXJnLCBzaXplb2YgKHN0cnVjdCBjYV9tc2cpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7CisJaWYgKGNvcHlfZnJvbV91c2VyKHBfY2FfbWVzc2FnZSwgKHZvaWQgKilhcmcsIHNpemVvZiAoc3RydWN0IGNhX21zZykpKSB7CisJCXJlc3VsdCA9IC1FRkFVTFQ7CisJCWdvdG8gZnJlZV9tZW1fYW5kX2V4aXQ7CisJfQorCiAKIAlpZiAocF9jYV9tZXNzYWdlLT5tc2cpIHsKIAkJY2FfbWVzc2FnZV9oZWFkZXJfbGVuID0gcF9jYV9tZXNzYWdlLT5sZW5ndGg7CS8qCVJlc3RvcmUgaXQgYmFjayB3aGVuIHlvdSBhcmUgZG9uZQkqLwpAQCAtNDMzLDcgKzQyOSw4IEBACiAJCQlkcHJpbnRrKHZlcmJvc2UsIERTVF9DQV9ERUJVRywgMSwgIkNvbW1hbmQgPSBTRU5EX0NBX1BNVCIpOwogCQkJaWYgKChjYV9zZXRfcG10KHN0YXRlLCBwX2NhX21lc3NhZ2UsIGh3X2J1ZmZlciwgMCwgMCkpIDwgMCkgewkvLyBjb2RlIHNpbXBsaWZpY2F0aW9uIHN0YXJ0ZWQKIAkJCQlkcHJpbnRrKHZlcmJvc2UsIERTVF9DQV9FUlJPUiwgMSwgIiAtLT5DQV9QTVQgRmFpbGVkICEiKTsKLQkJCQlyZXR1cm4gLTE7CisJCQkJcmVzdWx0ID0gLTE7CisJCQkJZ290byBmcmVlX21lbV9hbmRfZXhpdDsKIAkJCX0KIAkJCWRwcmludGsodmVyYm9zZSwgRFNUX0NBX0lORk8sIDEsICIgLS0+Q0FfUE1UIFN1Y2Nlc3MgISIpOwogCQkJYnJlYWs7CkBAIC00NDIsNyArNDM5LDggQEAKIAkJCS8qICAgICAgSGF2ZSB0byBoYW5kbGUgdGhlIDIgYmFzaWMgdHlwZXMgb2YgY2FyZHMgaGVyZSAgKi8KIAkJCWlmICgoZHN0X2NoZWNrX2NhX3BtdChzdGF0ZSwgcF9jYV9tZXNzYWdlLCBod19idWZmZXIpKSA8IDApIHsKIAkJCQlkcHJpbnRrKHZlcmJvc2UsIERTVF9DQV9FUlJPUiwgMSwgIiAtLT5DQV9QTVRfUkVQTFkgRmFpbGVkICEiKTsKLQkJCQlyZXR1cm4gLTE7CisJCQkJcmVzdWx0ID0gLTE7CisJCQkJZ290byBmcmVlX21lbV9hbmRfZXhpdDsKIAkJCX0KIAkJCWRwcmludGsodmVyYm9zZSwgRFNUX0NBX0lORk8sIDEsICIgLS0+Q0FfUE1UX1JFUExZIFN1Y2Nlc3MgISIpOwogCQkJYnJlYWs7CkBAIC00NTEsMjIgKzQ0OSwyOCBAQAogCiAJCQlpZiAoKGNhX2dldF9hcHBfaW5mbyhzdGF0ZSkpIDwgMCkgewogCQkJCWRwcmludGsodmVyYm9zZSwgRFNUX0NBX0VSUk9SLCAxLCAiIC0tPkNBX0FQUF9JTkZPX0VOUVVJUlkgRmFpbGVkICEiKTsKLQkJCQlyZXR1cm4gLTE7CisJCQkJcmVzdWx0ID0gLTE7CisJCQkJZ290byBmcmVlX21lbV9hbmRfZXhpdDsKIAkJCX0KIAkJCWRwcmludGsodmVyYm9zZSwgRFNUX0NBX0lORk8sIDEsICIgLS0+Q0FfQVBQX0lORk9fRU5RVUlSWSBTdWNjZXNzICEiKTsKIAkJCWJyZWFrOwogCQl9CiAJfQotCXJldHVybiAwOworZnJlZV9tZW1fYW5kX2V4aXQ6CisJa2ZyZWUgKGh3X2J1ZmZlcik7CisKKwlyZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW50IGRzdF9jYV9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQorc3RhdGljIGludCBkc3RfY2FfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgaW9jdGxfYXJnKQogewogCXN0cnVjdCBkdmJfZGV2aWNlKiBkdmJkZXYgPSAoc3RydWN0IGR2Yl9kZXZpY2UqKSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGRzdF9zdGF0ZSogc3RhdGUgPSAoc3RydWN0IGRzdF9zdGF0ZSopIGR2YmRldi0+cHJpdjsKIAlzdHJ1Y3QgY2Ffc2xvdF9pbmZvICpwX2NhX3Nsb3RfaW5mbzsKIAlzdHJ1Y3QgY2FfY2FwcyAqcF9jYV9jYXBzOwogCXN0cnVjdCBjYV9tc2cgKnBfY2FfbWVzc2FnZTsKKwl2b2lkIF9fdXNlciAqYXJnID0gKHZvaWQgX191c2VyICopaW9jdGxfYXJnOworCWludCByZXN1bHQgPSAwOwogCiAJaWYgKChwX2NhX21lc3NhZ2UgPSAoc3RydWN0IGNhX21zZyAqKSBrbWFsbG9jKHNpemVvZiAoc3RydWN0IGNhX21zZyksIEdGUF9LRVJORUwpKSA9PSBOVUxMKSB7CiAJCWRwcmludGsodmVyYm9zZSwgRFNUX0NBX0VSUk9SLCAxLCAiIE1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUiKTsKQEAgLTQ4NiwxNCArNDkwLDE2IEBACiAJCWRwcmludGsodmVyYm9zZSwgRFNUX0NBX0lORk8sIDEsICIgU2VuZGluZyBtZXNzYWdlIik7CiAJCWlmICgoY2Ffc2VuZF9tZXNzYWdlKHN0YXRlLCBwX2NhX21lc3NhZ2UsIGFyZykpIDwgMCkgewogCQkJZHByaW50ayh2ZXJib3NlLCBEU1RfQ0FfRVJST1IsIDEsICIgLS0+Q0FfU0VORF9NU0cgRmFpbGVkICEiKTsKLQkJCXJldHVybiAtMTsKKwkJCXJlc3VsdCA9IC0xOworCQkJZ290byBmcmVlX21lbV9hbmRfZXhpdDsKIAkJfQogCQlicmVhazsKIAljYXNlIENBX0dFVF9NU0c6CiAJCWRwcmludGsodmVyYm9zZSwgRFNUX0NBX0lORk8sIDEsICIgR2V0dGluZyBtZXNzYWdlIik7CiAJCWlmICgoY2FfZ2V0X21lc3NhZ2Uoc3RhdGUsIHBfY2FfbWVzc2FnZSwgYXJnKSkgPCAwKSB7CiAJCQlkcHJpbnRrKHZlcmJvc2UsIERTVF9DQV9FUlJPUiwgMSwgIiAtLT5DQV9HRVRfTVNHIEZhaWxlZCAhIik7Ci0JCQlyZXR1cm4gLTE7CisJCQlyZXN1bHQgPSAtMTsKKwkJCWdvdG8gZnJlZV9tZW1fYW5kX2V4aXQ7CiAJCX0KIAkJZHByaW50ayh2ZXJib3NlLCBEU1RfQ0FfSU5GTywgMSwgIiAtLT5DQV9HRVRfTVNHIFN1Y2Nlc3MgISIpOwogCQlicmVhazsKQEAgLTUwNiw3ICs1MTIsOCBAQAogCQlkcHJpbnRrKHZlcmJvc2UsIERTVF9DQV9JTkZPLCAxLCAiIEdldHRpbmcgU2xvdCBpbmZvIik7CiAJCWlmICgoY2FfZ2V0X3Nsb3RfaW5mbyhzdGF0ZSwgcF9jYV9zbG90X2luZm8sIGFyZykpIDwgMCkgewogCQkJZHByaW50ayh2ZXJib3NlLCBEU1RfQ0FfRVJST1IsIDEsICIgLS0+Q0FfR0VUX1NMT1RfSU5GTyBGYWlsZWQgISIpOwotCQkJcmV0dXJuIC0xOworCQkJcmVzdWx0ID0gLTE7CisJCQlnb3RvIGZyZWVfbWVtX2FuZF9leGl0OwogCQl9CiAJCWRwcmludGsodmVyYm9zZSwgRFNUX0NBX0lORk8sIDEsICIgLS0+Q0FfR0VUX1NMT1RfSU5GTyBTdWNjZXNzICEiKTsKIAkJYnJlYWs7CkBAIC01MTQsNyArNTIxLDggQEAKIAkJZHByaW50ayh2ZXJib3NlLCBEU1RfQ0FfSU5GTywgMSwgIiBHZXR0aW5nIFNsb3QgY2FwYWJpbGl0aWVzIik7CiAJCWlmICgoY2FfZ2V0X3Nsb3RfY2FwcyhzdGF0ZSwgcF9jYV9jYXBzLCBhcmcpKSA8IDApIHsKIAkJCWRwcmludGsodmVyYm9zZSwgRFNUX0NBX0VSUk9SLCAxLCAiIC0tPkNBX0dFVF9DQVAgRmFpbGVkICEiKTsKLQkJCXJldHVybiAtMTsKKwkJCXJlc3VsdCA9IC0xOworCQkJZ290byBmcmVlX21lbV9hbmRfZXhpdDsKIAkJfQogCQlkcHJpbnRrKHZlcmJvc2UsIERTVF9DQV9JTkZPLCAxLCAiIC0tPkNBX0dFVF9DQVAgU3VjY2VzcyAhIik7CiAJCWJyZWFrOwpAQCAtNTIyLDcgKzUzMCw4IEBACiAJCWRwcmludGsodmVyYm9zZSwgRFNUX0NBX0lORk8sIDEsICIgR2V0dGluZyBkZXNjcmFtYmxlciBkZXNjcmlwdGlvbiIpOwogCQlpZiAoKGNhX2dldF9zbG90X2Rlc2NyKHN0YXRlLCBwX2NhX21lc3NhZ2UsIGFyZykpIDwgMCkgewogCQkJZHByaW50ayh2ZXJib3NlLCBEU1RfQ0FfRVJST1IsIDEsICIgLS0+Q0FfR0VUX0RFU0NSX0lORk8gRmFpbGVkICEiKTsKLQkJCXJldHVybiAtMTsKKwkJCXJlc3VsdCA9IC0xOworCQkJZ290byBmcmVlX21lbV9hbmRfZXhpdDsKIAkJfQogCQlkcHJpbnRrKHZlcmJvc2UsIERTVF9DQV9JTkZPLCAxLCAiIC0tPkNBX0dFVF9ERVNDUl9JTkZPIFN1Y2Nlc3MgISIpOwogCQlicmVhazsKQEAgLTUzMCw3ICs1MzksOCBAQAogCQlkcHJpbnRrKHZlcmJvc2UsIERTVF9DQV9JTkZPLCAxLCAiIFNldHRpbmcgZGVzY3JhbWJsZXIiKTsKIAkJaWYgKChjYV9zZXRfc2xvdF9kZXNjcigpKSA8IDApIHsKIAkJCWRwcmludGsodmVyYm9zZSwgRFNUX0NBX0VSUk9SLCAxLCAiIC0tPkNBX1NFVF9ERVNDUiBGYWlsZWQgISIpOwotCQkJcmV0dXJuIC0xOworCQkJcmVzdWx0ID0gLTE7CisJCQlnb3RvIGZyZWVfbWVtX2FuZF9leGl0OwogCQl9CiAJCWRwcmludGsodmVyYm9zZSwgRFNUX0NBX0lORk8sIDEsICIgLS0+Q0FfU0VUX0RFU0NSIFN1Y2Nlc3MgISIpOwogCQlicmVhazsKQEAgLTUzOCwxNCArNTQ4LDE5IEBACiAJCWRwcmludGsodmVyYm9zZSwgRFNUX0NBX0lORk8sIDEsICIgU2V0dGluZyBQSUQiKTsKIAkJaWYgKChjYV9zZXRfcGlkKCkpIDwgMCkgewogCQkJZHByaW50ayh2ZXJib3NlLCBEU1RfQ0FfRVJST1IsIDEsICIgLS0+Q0FfU0VUX1BJRCBGYWlsZWQgISIpOwotCQkJcmV0dXJuIC0xOworCQkJcmVzdWx0ID0gLTE7CisJCQlnb3RvIGZyZWVfbWVtX2FuZF9leGl0OwogCQl9CiAJCWRwcmludGsodmVyYm9zZSwgRFNUX0NBX0lORk8sIDEsICIgLS0+Q0FfU0VUX1BJRCBTdWNjZXNzICEiKTsKIAlkZWZhdWx0OgotCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJCXJlc3VsdCA9IC1FT1BOT1RTVVBQOwogCX07CisgZnJlZV9tZW1fYW5kX2V4aXQ6CisJa2ZyZWUgKHBfY2FfbWVzc2FnZSk7CisJa2ZyZWUgKHBfY2Ffc2xvdF9pbmZvKTsKKwlrZnJlZSAocF9jYV9jYXBzKTsKIAotCXJldHVybiAwOworCXJldHVybiByZXN1bHQ7CiB9CiAKIHN0YXRpYyBpbnQgZHN0X2NhX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCkBAIC01ODIsNyArNTk3LDcgQEAKIAogc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZHN0X2NhX2ZvcHMgPSB7CiAJLm93bmVyID0gVEhJU19NT0RVTEUsCi0JLmlvY3RsID0gKHZvaWQgKilkc3RfY2FfaW9jdGwsCisJLmlvY3RsID0gZHN0X2NhX2lvY3RsLAogCS5vcGVuID0gZHN0X2NhX29wZW4sCiAJLnJlbGVhc2UgPSBkc3RfY2FfcmVsZWFzZSwKIAkucmVhZCA9IGRzdF9jYV9yZWFkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHN0X2NvbW1vbi5oIGIvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHN0X2NvbW1vbi5oCmluZGV4IDMyODFhNmMuLjgxNTU3ZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2RzdF9jb21tb24uaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kc3RfY29tbW9uLmgKQEAgLTIyLDYgKzIyLDcgQEAKICNpZm5kZWYgRFNUX0NPTU1PTl9ICiAjZGVmaW5lIERTVF9DT01NT05fSAogCisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9kdmIvZnJvbnRlbmQuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlICJidDg3OC5oIgpAQCAtNDksNiArNTAsNyBAQAogI2RlZmluZSBEU1RfVFlQRV9IQVNfRldfQlVJTEQJNjQKICNkZWZpbmUgRFNUX1RZUEVfSEFTX09CU19SRUdTCTEyOAogI2RlZmluZSBEU1RfVFlQRV9IQVNfSU5DX0NPVU5UCTI1NgorI2RlZmluZSBEU1RfVFlQRV9IQVNfTVVMVElfRkUJNTEyCiAKIC8qCUNhcmQgY2FwYWJpbGl0eSBsaXN0CSovCiAKQEAgLTExNyw2ICsxMTksOSBAQAogCXU4IGZ3X3ZlcnNpb25bOF07CiAJdTggY2FyZF9pbmZvWzhdOwogCXU4IHZlbmRvcls4XTsKKwl1OCBib2FyZF9pbmZvWzhdOworCisJc3RydWN0IHNlbWFwaG9yZSBkc3RfbXV0ZXg7CiB9OwogCiBzdHJ1Y3QgZHN0X3R5cGVzIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2R2Yi1idDh4eC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHZiLWJ0OHh4LmMKaW5kZXggYzVjNzY3Mi4uMmUzOTgwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHZiLWJ0OHh4LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHZiLWJ0OHh4LmMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJkdmJfZnJvbnRlbmQuaCIKICNpbmNsdWRlICJkdmItYnQ4eHguaCIKICNpbmNsdWRlICJidDg3OC5oIgorI2luY2x1ZGUgImR2Yi1wbGwuaCIKIAogc3RhdGljIGludCBkZWJ1ZzsKIApAQCAtMjc5LDcgKzI4MCw3IEBACiAJZGF0YVswXSA9IChkaXYgPj4gOCkgJiAweDdmOwogCWRhdGFbMV0gPSBkaXYgJiAweGZmOwogCWRhdGFbMl0gPSAoKGRpdiA+PiAxMCkgJiAweDYwKSB8IGNmZzsKLQlkYXRhWzNdID0gY3B1bXAgfCBiYW5kX3NlbGVjdDsKKwlkYXRhWzNdID0gKGNwdW1wIDw8IDYpIHwgYmFuZF9zZWxlY3Q7CiAKIAlpMmNfdHJhbnNmZXIoY2FyZC0+aTJjX2FkYXB0ZXIsICZtc2csIDEpOwogCXJldHVybiAoZGl2ICogMTY2NjY2IC0gMzYwMDAwMDApOwpAQCAtNTIyLDkgKzUyMyw3IEBACiAJLyoKIAkgKiBSZXNldCB0aGUgZnJvbnRlbmQsIG11c3QgYmUgY2FsbGVkIGJlZm9yZSB0cnlpbmcKIAkgKiB0byBpbml0aWFsaXNlIHRoZSBNVDM1MiBvciBtdDM1Ml9hdHRhY2gKLQkgKiB3aWxsIGZhaWwuCi0JICoKLQkgKiBQcmVzdW1hYmx5IG5vdCByZXF1aXJlZCBmb3IgdGhlIE5YVDYwMDAgZnJvbnRlbmQuCisJICogd2lsbCBmYWlsLiBTYW1lIGdvZXMgZm9yIHRoZSBueHQ2MDAwIGZyb250ZW5kLgogCSAqCiAJICovCiAKQEAgLTU0NiwxNCArNTQ1LDYzIEBACiAJLnBsbF9zZXQgPSBkaWdpdHZfYWxwc190ZGVkNF9wbGxfc2V0LAogfTsKIAorc3RhdGljIGludCB0ZHZzX3R1YTYwMzRfcGxsX3NldChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzKiBwYXJhbXMpCit7CisJc3RydWN0IGR2Yl9idDh4eF9jYXJkICpjYXJkID0gKHN0cnVjdCBkdmJfYnQ4eHhfY2FyZCAqKSBmZS0+ZHZiLT5wcml2OworCXU4IGJ1Zls0XTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7IC5hZGRyID0gMHg2MSwgLmZsYWdzID0gMCwgLmJ1ZiA9IGJ1ZiwgLmxlbiA9IHNpemVvZihidWYpIH07CisJaW50IGVycjsKKworCWR2Yl9wbGxfY29uZmlndXJlKCZkdmJfcGxsX3RkdnNfdHVhNjAzNCwgYnVmLCBwYXJhbXMtPmZyZXF1ZW5jeSwgMCk7CisJZHByaW50aygiJXM6IHR1bmVyIGF0IDB4JTAyeCBieXRlczogMHglMDJ4IDB4JTAyeCAweCUwMnggMHglMDJ4XG4iLAorCQlfX0ZVTkNUSU9OX18sIG1zZy5hZGRyLCBidWZbMF0sYnVmWzFdLGJ1ZlsyXSxidWZbM10pOworCWlmICgoZXJyID0gaTJjX3RyYW5zZmVyKGNhcmQtPmkyY19hZGFwdGVyLCAmbXNnLCAxKSkgIT0gMSkgeworCSAgICAgICAgcHJpbnRrKEtFUk5fV0FSTklORyAiZHZiLWJ0OHh4OiAlcyBlcnJvciAiCisJCSAgICAgICAgIihhZGRyICUwMnggPC0gJTAyeCwgZXJyID0gJWkpXG4iLAorCQkgICAgICAgIF9fRlVOQ1RJT05fXywgYnVmWzBdLCBidWZbMV0sIGVycik7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwkJZWxzZQorCQkJcmV0dXJuIC1FUkVNT1RFSU87CisJfQorCisJLyogU2V0IHRoZSBBdXhpbGlhcnkgQnl0ZS4gKi8KKwlidWZbMl0gJj0gfjB4MjA7CisJYnVmWzJdIHw9IDB4MTg7CisJYnVmWzNdID0gMHg1MDsKKwlpMmNfdHJhbnNmZXIoY2FyZC0+aTJjX2FkYXB0ZXIsICZtc2csIDEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbGdkdDMzMHhfY29uZmlnIHRkdnNfdHVhNjAzNF9jb25maWcgPSB7CisJLmRlbW9kX2FkZHJlc3MgICAgPSAweDBlLAorCS5kZW1vZF9jaGlwICAgICAgID0gTEdEVDMzMDMsCisJLnNlcmlhbF9tcGVnICAgICAgPSAweDQwLCAvKiBUUFNFUklBTCBmb3IgMzMwMyBpbiBUT1BfQ09OVFJPTCAqLworCS5wbGxfc2V0ICAgICAgICAgID0gdGR2c190dWE2MDM0X3BsbF9zZXQsCit9OworCitzdGF0aWMgdm9pZCBsZ2R0MzMweF9yZXNldChzdHJ1Y3QgZHZiX2J0OHh4X2NhcmQgKmJ0KQoreworCS8qIFNldCBwaW4gMjcgb2YgdGhlIGxnZHQzMzAzIGNoaXAgaGlnaCB0byByZXNldCB0aGUgZnJvbnRlbmQgKi8KKworCS8qIFB1bHNlIHRoZSByZXNldCBsaW5lICovCisJYnR0dl93cml0ZV9ncGlvKGJ0LT5idHR2X25yLCAweDAwZTAwMDA3LCAweDAwMDAwMDAxKTsgLyogSGlnaCAqLworCWJ0dHZfd3JpdGVfZ3BpbyhidC0+YnR0dl9uciwgMHgwMGUwMDAwNywgMHgwMDAwMDAwMCk7IC8qIExvdyAgKi8KKwltc2xlZXAoMTAwKTsKKworCWJ0dHZfd3JpdGVfZ3BpbyhidC0+YnR0dl9uciwgMHgwMGUwMDAwNywgMHgwMDAwMDAwMSk7IC8qIEhpZ2ggKi8KKwltc2xlZXAoMTAwKTsKK30KKwogc3RhdGljIHZvaWQgZnJvbnRlbmRfaW5pdChzdHJ1Y3QgZHZiX2J0OHh4X2NhcmQgKmNhcmQsIHUzMiB0eXBlKQogewogCWludCByZXQ7CiAJc3RydWN0IGRzdF9zdGF0ZSogc3RhdGUgPSBOVUxMOwogCiAJc3dpdGNoKHR5cGUpIHsKLSNpZmRlZiBCVFRWX0RWSUNPX0RWQlRfTElURQotCWNhc2UgQlRUVl9EVklDT19EVkJUX0xJVEU6CisjaWZkZWYgQlRUVl9CT0FSRF9EVklDT19EVkJUX0xJVEUKKwljYXNlIEJUVFZfQk9BUkRfRFZJQ09fRFZCVF9MSVRFOgogCQljYXJkLT5mZSA9IG10MzUyX2F0dGFjaCgmdGhvbXNvbl9kdHQ3NTc5X2NvbmZpZywgY2FyZC0+aTJjX2FkYXB0ZXIpOwogCQlpZiAoY2FyZC0+ZmUgIT0gTlVMTCkgewogCQkJY2FyZC0+ZmUtPm9wcy0+aW5mby5mcmVxdWVuY3lfbWluID0gMTc0MDAwMDAwOwpAQCAtNTYyLDEwICs2MTAsMTkgQEAKIAkJYnJlYWs7CiAjZW5kaWYKIAotI2lmZGVmIEJUVFZfVFdJTkhBTl9WUDMwMjEKLQljYXNlIEJUVFZfVFdJTkhBTl9WUDMwMjE6CisjaWZkZWYgQlRUVl9CT0FSRF9EVklDT19GVVNJT05IRFRWXzVfTElURQorCWNhc2UgQlRUVl9CT0FSRF9EVklDT19GVVNJT05IRFRWXzVfTElURToKKwkJbGdkdDMzMHhfcmVzZXQoY2FyZCk7CisJCWNhcmQtPmZlID0gbGdkdDMzMHhfYXR0YWNoKCZ0ZHZzX3R1YTYwMzRfY29uZmlnLCBjYXJkLT5pMmNfYWRhcHRlcik7CisJCWlmIChjYXJkLT5mZSAhPSBOVUxMKQorCQkJZHByaW50ayAoImR2Yl9idDh4eDogbGdkdDMzMHggZGV0ZWN0ZWRcbiIpOworCQlicmVhazsKKyNlbmRpZgorCisjaWZkZWYgQlRUVl9CT0FSRF9UV0lOSEFOX1ZQMzAyMQorCWNhc2UgQlRUVl9CT0FSRF9UV0lOSEFOX1ZQMzAyMToKICNlbHNlCi0JY2FzZSBCVFRWX05FQlVMQV9ESUdJVFY6CisJY2FzZSBCVFRWX0JPQVJEX05FQlVMQV9ESUdJVFY6CiAjZW5kaWYKIAkJLyoKIAkJICogSXQgaXMgcG9zc2libGUgdG8gZGV0ZXJtaW5lIHRoZSBjb3JyZWN0IGZyb250ZW5kIHVzaW5nIHRoZSBJMkMgYnVzIChzZWUgdGhlIE5lYnVsYSBTREspOwpAQCAtNTczLDYgKzYzMCw3IEBACiAJCSAqLwogCiAJCS8qIE9sZCBOZWJ1bGEgKG1hcmtlZCAoYykyMDAzIG9uIGhpZ2ggcHJvZmlsZSBwY2kgY2FyZCkgaGFzIG54dDYwMDAgZGVtb2QgKi8KKwkJZGlnaXR2X2FscHNfdGRlZDRfcmVzZXQoY2FyZCk7CiAJCWNhcmQtPmZlID0gbnh0NjAwMF9hdHRhY2goJnZwMzAyMV9hbHBzX3RkZWQ0X2NvbmZpZywgY2FyZC0+aTJjX2FkYXB0ZXIpOwogCQlpZiAoY2FyZC0+ZmUgIT0gTlVMTCkgewogCQkJZHByaW50ayAoImR2Yl9idDh4eDogYW4gbnh0NjAwMCB3YXMgZGV0ZWN0ZWQgb24geW91ciBkaWdpdHYgY2FyZFxuIik7CkBAIC01ODcsMTEgKzY0NSwxMSBAQAogCQkJZHByaW50ayAoImR2Yl9idDh4eDogYW4gbXQzNTIgd2FzIGRldGVjdGVkIG9uIHlvdXIgZGlnaXR2IGNhcmRcbiIpOwogCQlicmVhazsKIAotCWNhc2UgQlRUVl9BVkRWQlRfNzYxOgorCWNhc2UgQlRUVl9CT0FSRF9BVkRWQlRfNzYxOgogCQljYXJkLT5mZSA9IHNwODg3eF9hdHRhY2goJm1pY3JvdHVuZV9tdDcyMDJkdGZfY29uZmlnLCBjYXJkLT5pMmNfYWRhcHRlcik7CiAJCWJyZWFrOwogCi0JY2FzZSBCVFRWX0FWRFZCVF83NzE6CisJY2FzZSBCVFRWX0JPQVJEX0FWRFZCVF83NzE6CiAJCWNhcmQtPmZlID0gbXQzNTJfYXR0YWNoKCZhZHZidDc3MV9zYW1zdW5nX3RkdGM5MjUxZGgwX2NvbmZpZywgY2FyZC0+aTJjX2FkYXB0ZXIpOwogCQlpZiAoY2FyZC0+ZmUgIT0gTlVMTCkgewogCQkJY2FyZC0+ZmUtPm9wcy0+aW5mby5mcmVxdWVuY3lfbWluID0gMTc0MDAwMDAwOwpAQCAtNTk5LDcgKzY1Nyw3IEBACiAJCX0KIAkJYnJlYWs7CiAKLQljYXNlIEJUVFZfVFdJTkhBTl9EU1Q6CisJY2FzZSBCVFRWX0JPQVJEX1RXSU5IQU5fRFNUOgogCQkvKglEU1QgaXMgbm90IGEgZnJvbnRlbmQgZHJpdmVyICEhIQkJKi8KIAkJc3RhdGUgPSAoc3RydWN0IGRzdF9zdGF0ZSAqKSBrbWFsbG9jKHNpemVvZiAoc3RydWN0IGRzdF9zdGF0ZSksIEdGUF9LRVJORUwpOwogCQkvKglTZXR1cCB0aGUgQ2FyZAkJCQkJKi8KQEAgLTYyMCwxMSArNjc4LDExIEBACiAJCQlyZXQgPSBkc3RfY2FfYXR0YWNoKHN0YXRlLCAmY2FyZC0+ZHZiX2FkYXB0ZXIpOwogCQlicmVhazsKIAotCWNhc2UgQlRUVl9QSU5OQUNMRVNBVDoKKwljYXNlIEJUVFZfQk9BUkRfUElOTkFDTEVTQVQ6CiAJCWNhcmQtPmZlID0gY3gyNDExMF9hdHRhY2goJnBjdHZzYXRfY29uZmlnLCBjYXJkLT5pMmNfYWRhcHRlcik7CiAJCWJyZWFrOwogCi0JY2FzZSBCVFRWX1BDX0hEVFY6CisJY2FzZSBCVFRWX0JPQVJEX1BDX0hEVFY6CiAJCWNhcmQtPmZlID0gb3I1MTIxMV9hdHRhY2goJm9yNTEyMTFfY29uZmlnLCBjYXJkLT5pMmNfYWRhcHRlcik7CiAJCWJyZWFrOwogCX0KQEAgLTc0Niw3ICs4MDQsNyBAQAogCWNhcmQtPmkyY19hZGFwdGVyID0gJnN1Yi0+Y29yZS0+aTJjX2FkYXA7CiAKIAlzd2l0Y2goc3ViLT5jb3JlLT50eXBlKSB7Ci0JY2FzZSBCVFRWX1BJTk5BQ0xFU0FUOgorCWNhc2UgQlRUVl9CT0FSRF9QSU5OQUNMRVNBVDoKIAkJY2FyZC0+Z3Bpb19tb2RlID0gMHgwNDAwYzA2MDsKIAkJLyogc2hvdWxkIGJlOiBCVDg3OF9BX0dBSU49MCxCVDg3OF9BX1BXUkROLEJUODc4X0RBX0RQTSxCVDg3OF9EQV9TQlIsCiAJCQkgICAgICBCVDg3OF9EQV9JT009MSxCVDg3OF9EQV9BUFAgdG8gZW5hYmxlIHNlcmlhbCBoaWdoc3BlZWQgbW9kZS4gKi8KQEAgLTc1NCw4ICs4MTIsOCBAQAogCQljYXJkLT5pcnFfZXJyX2lnbm9yZSA9IDA7CiAJCWJyZWFrOwogCi0jaWZkZWYgQlRUVl9EVklDT19EVkJUX0xJVEUKLQljYXNlIEJUVFZfRFZJQ09fRFZCVF9MSVRFOgorI2lmZGVmIEJUVFZfQk9BUkRfRFZJQ09fRFZCVF9MSVRFCisJY2FzZSBCVFRWX0JPQVJEX0RWSUNPX0RWQlRfTElURToKICNlbmRpZgogCQljYXJkLT5ncGlvX21vZGUgPSAweDA0MDBDMDYwOwogCQljYXJkLT5vcF9zeW5jX29yaW4gPSAwOwpAQCAtNzY1LDI2ICs4MjMsMzQgQEAKIAkJICogREFfQVBQKHBhcmFsbGVsKSAqLwogCQlicmVhazsKIAotI2lmZGVmIEJUVFZfVFdJTkhBTl9WUDMwMjEKLQljYXNlIEJUVFZfVFdJTkhBTl9WUDMwMjE6Ci0jZWxzZQotCWNhc2UgQlRUVl9ORUJVTEFfRElHSVRWOgorI2lmZGVmIEJUVFZfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl81X0xJVEUKKwljYXNlIEJUVFZfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl81X0xJVEU6CiAjZW5kaWYKLQljYXNlIEJUVFZfQVZEVkJUXzc2MToKKwkJY2FyZC0+Z3Bpb19tb2RlID0gMHgwNDAwYzA2MDsKKwkJY2FyZC0+b3Bfc3luY19vcmluID0gQlQ4NzhfUklTQ19TWU5DX01BU0s7CisJCWNhcmQtPmlycV9lcnJfaWdub3JlID0gQlQ4NzhfQUZCVVMgfCBCVDg3OF9BRkRTUjsKKwkJYnJlYWs7CisKKyNpZmRlZiBCVFRWX0JPQVJEX1RXSU5IQU5fVlAzMDIxCisJY2FzZSBCVFRWX0JPQVJEX1RXSU5IQU5fVlAzMDIxOgorI2Vsc2UKKwljYXNlIEJUVFZfQk9BUkRfTkVCVUxBX0RJR0lUVjoKKyNlbmRpZgorCWNhc2UgQlRUVl9CT0FSRF9BVkRWQlRfNzYxOgogCQljYXJkLT5ncGlvX21vZGUgPSAoMSA8PCAyNikgfCAoMSA8PCAxNCkgfCAoMSA8PCA1KTsKIAkJY2FyZC0+b3Bfc3luY19vcmluID0gMDsKIAkJY2FyZC0+aXJxX2Vycl9pZ25vcmUgPSAwOwogCQkvKiBBX1BXUkROIERBX1NCUiBEQV9BUFAgKGhpZ2ggc3BlZWQgc2VyaWFsKSAqLwogCQlicmVhazsKIAotCWNhc2UgQlRUVl9BVkRWQlRfNzcxOiAvL2Nhc2UgMHgwNzcxMTQ2MToKKwljYXNlIEJUVFZfQk9BUkRfQVZEVkJUXzc3MTogLy9jYXNlIDB4MDc3MTE0NjE6CiAJCWNhcmQtPmdwaW9fbW9kZSA9IDB4MDQwMDQwMkI7CiAJCWNhcmQtPm9wX3N5bmNfb3JpbiA9IEJUODc4X1JJU0NfU1lOQ19NQVNLOwogCQljYXJkLT5pcnFfZXJyX2lnbm9yZSA9IDA7CiAJCS8qIEFfUFdSRE4gREFfU0JSICBEQV9BUFBbMF0gUEtUUD0xMCBSSVNDX0VOQUJMRSBGSUZPX0VOQUJMRSovCiAJCWJyZWFrOwogCi0JY2FzZSBCVFRWX1RXSU5IQU5fRFNUOgorCWNhc2UgQlRUVl9CT0FSRF9UV0lOSEFOX0RTVDoKIAkJY2FyZC0+Z3Bpb19tb2RlID0gMHgyMjA0ZjJjOwogCQljYXJkLT5vcF9zeW5jX29yaW4gPSBCVDg3OF9SSVNDX1NZTkNfTUFTSzsKIAkJY2FyZC0+aXJxX2Vycl9pZ25vcmUgPSBCVDg3OF9BUEFCT1JUIHwgQlQ4NzhfQVJJUEVSUiB8CkBAIC04MDIsNyArODY4LDcgQEAKIAkJICogUklTQytGSUZPIEVOQUJMRSAqLwogCQlicmVhazsKIAotCWNhc2UgQlRUVl9QQ19IRFRWOgorCWNhc2UgQlRUVl9CT0FSRF9QQ19IRFRWOgogCQljYXJkLT5ncGlvX21vZGUgPSAweDAxMDBFQzdCOwogCQljYXJkLT5vcF9zeW5jX29yaW4gPSAwOwogCQljYXJkLT5pcnFfZXJyX2lnbm9yZSA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kdmItYnQ4eHguaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2R2Yi1idDh4eC5oCmluZGV4IDllYzhlNWIuLmNmMDM1YTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2R2Yi1idDh4eC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2R2Yi1idDh4eC5oCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAibnh0NjAwMC5oIgogI2luY2x1ZGUgImN4MjQxMTAuaCIKICNpbmNsdWRlICJvcjUxMjExLmgiCisjaW5jbHVkZSAibGdkdDMzMHguaCIKIAogc3RydWN0IGR2Yl9idDh4eF9jYXJkIHsKIAlzdHJ1Y3Qgc2VtYXBob3JlIGxvY2s7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kZW11eC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZGVtdXguaAppbmRleCA5NzE5YTNiLi43ZDdiMDA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kZW11eC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2RlbXV4LmgKQEAgLTQ4LDggKzQ4LDExIEBACiAgKiBETVhfTUFYX1NFQ0ZFRURfU0laRTogTWF4aW11bSBsZW5ndGggKGluIGJ5dGVzKSBvZiBhIHByaXZhdGUgc2VjdGlvbiBmZWVkIGZpbHRlci4KICAqLwogCisjaWZuZGVmIERNWF9NQVhfU0VDVElPTl9TSVpFCisjZGVmaW5lIERNWF9NQVhfU0VDVElPTl9TSVpFIDQwOTYKKyNlbmRpZgogI2lmbmRlZiBETVhfTUFYX1NFQ0ZFRURfU0laRQotI2RlZmluZSBETVhfTUFYX1NFQ0ZFRURfU0laRSA0MDk2CisjZGVmaW5lIERNWF9NQVhfU0VDRkVFRF9TSVpFIChETVhfTUFYX1NFQ1RJT05fU0laRSArIDE4OCkKICNlbmRpZgogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9kZW11eC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2RlbXV4LmMKaW5kZXggZGM0NzZkZC4uYjRjODk5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2RlbXV4LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2RlbXV4LmMKQEAgLTI0Niw3ICsyNDYsNyBAQAogCiAJZm9yIChuID0gMDsgc2VjLT5zZWNidWZwICsgMiA8IGxpbWl0OyBuKyspIHsKIAkJc2VjbGVuID0gc2VjdGlvbl9sZW5ndGgoc2VjLT5zZWNidWYpOwotCQlpZiAoc2VjbGVuIDw9IDAgfHwgc2VjbGVuID4gRE1YX01BWF9TRUNGRUVEX1NJWkUKKwkJaWYgKHNlY2xlbiA8PSAwIHx8IHNlY2xlbiA+IERNWF9NQVhfU0VDVElPTl9TSVpFCiAJCSAgICB8fCBzZWNsZW4gKyBzZWMtPnNlY2J1ZnAgPiBsaW1pdCkKIAkJCXJldHVybiAwOwogCQlzZWMtPnNlY2xlbiA9IHNlY2xlbjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9mcm9udGVuZC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmMKaW5kZXggYThiYzg0Mi4uNmZmYTZiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmMKQEAgLTQyLDggKzQyLDYgQEAKICNpbmNsdWRlICJkdmJfZnJvbnRlbmQuaCIKICNpbmNsdWRlICJkdmJkZXYuaCIKIAotLy8gI2RlZmluZSBERUJVR19MT0NLTE9TUyAxCi0KIHN0YXRpYyBpbnQgZHZiX2Zyb250ZW5kX2RlYnVnOwogc3RhdGljIGludCBkdmJfc2h1dGRvd25fdGltZW91dCA9IDU7CiBzdGF0aWMgaW50IGR2Yl9mb3JjZV9hdXRvX2ludmVyc2lvbjsKQEAgLTQzOCwyNSArNDM2LDYgQEAKIAkJCWlmIChzICYgRkVfSEFTX0xPQ0spCiAJCQkJY29udGludWU7CiAJCQllbHNlIHsgLyogaWYgd2UgX1dFUkVfIHR1bmVkLCBidXQgbm93IGRvbid0IGhhdmUgYSBsb2NrICovCi0jaWZkZWYgREVCVUdfTE9DS0xPU1MKLQkJCQkvKiBmaXJzdCBvZiBhbGwgdHJ5IHNldHRpbmcgdGhlIHRvbmUgYWdhaW4gaWYgaXQgd2FzIG9uIC0gdGhpcwotCQkJCSAqIHNvbWV0aW1lcyB3b3JrcyBhcm91bmQgcHJvYmxlbXMgd2l0aCBub2lzeSBwb3dlciBzdXBwbGllcyAqLwotCQkJCWlmIChmZS0+b3BzLT5zZXRfdG9uZSAmJiAoZmVwcml2LT50b25lID09IFNFQ19UT05FX09OKSkgewotCQkJCQlmZS0+b3BzLT5zZXRfdG9uZShmZSwgZmVwcml2LT50b25lKTsKLQkJCQkJbWRlbGF5KDEwMCk7Ci0JCQkJCXMgPSAwOwotCQkJCQlmZS0+b3BzLT5yZWFkX3N0YXR1cyhmZSwgJnMpOwotCQkJCQlpZiAocyAmIEZFX0hBU19MT0NLKSB7Ci0JCQkJCQlwcmludGsoIkRWQiVpOiBMb2NrIHdhcyBsb3N0LCBidXQgcmVnYWluZWQgYnkgc2V0dGluZyAiCi0JCQkJCQkgICAgICAgInRoZSB0b25lLiBUaGlzIG1heSBpbmRpY2F0ZSB5b3VyIHBvd2VyIHN1cHBseSAiCi0JCQkJCQkgICAgICAgImlzIG5vaXN5L3NsaWdodGx5IGluY29tcGF0YWJsZSB3aXRoIHRoaXMgRFZCLVMgIgotCQkJCQkJICAgICAgICJhZGFwdGVyXG4iLCBmZS0+ZHZiLT5udW0pOwotCQkJCQkJZmVwcml2LT5zdGF0ZSA9IEZFU1RBVEVfVFVORUQ7Ci0JCQkJCQljb250aW51ZTsKLQkJCQkJfQotCQkJCX0KLSNlbmRpZgotCQkJCS8qIHNvbWUgb3RoZXIgcmVhc29uIGZvciBsb3NpbmcgdGhlIGxvY2sgLSBzdGFydCB6aWd6YWdnaW5nICovCiAJCQkJZmVwcml2LT5zdGF0ZSA9IEZFU1RBVEVfWklHWkFHX0ZBU1Q7CiAJCQkJZmVwcml2LT5zdGFydGVkX2F1dG9fc3RlcCA9IGZlcHJpdi0+YXV0b19zdGVwOwogCQkJCWNoZWNrX3dyYXBwZWQgPSAwOwpAQCAtNTc3LDYgKzU1Niw0OSBAQAogCQkJCWZlcHJpdi0+dGhyZWFkX3BpZCk7CiB9CiAKK3MzMiB0aW1ldmFsX3VzZWNfZGlmZihzdHJ1Y3QgdGltZXZhbCBsYXN0dGltZSwgc3RydWN0IHRpbWV2YWwgY3VydGltZSkKK3sKKwlyZXR1cm4gKChjdXJ0aW1lLnR2X3VzZWMgPCBsYXN0dGltZS50dl91c2VjKSA/CisJCTEwMDAwMDAgLSBsYXN0dGltZS50dl91c2VjICsgY3VydGltZS50dl91c2VjIDoKKwkJY3VydGltZS50dl91c2VjIC0gbGFzdHRpbWUudHZfdXNlYyk7Cit9CitFWFBPUlRfU1lNQk9MKHRpbWV2YWxfdXNlY19kaWZmKTsKKworc3RhdGljIGlubGluZSB2b2lkIHRpbWV2YWxfdXNlY19hZGQoc3RydWN0IHRpbWV2YWwgKmN1cnRpbWUsIHUzMiBhZGRfdXNlYykKK3sKKwljdXJ0aW1lLT50dl91c2VjICs9IGFkZF91c2VjOworCWlmIChjdXJ0aW1lLT50dl91c2VjID49IDEwMDAwMDApIHsKKwkJY3VydGltZS0+dHZfdXNlYyAtPSAxMDAwMDAwOworCQljdXJ0aW1lLT50dl9zZWMrKzsKKwl9Cit9CisKKy8qCisgKiBTbGVlcCB1bnRpbCBnZXR0aW1lb2ZkYXkoKSA+IHdha2V0aW1lICsgYWRkX3VzZWMKKyAqIFRoaXMgbmVlZHMgdG8gYmUgYXMgcHJlY2lzZSBhcyBwb3NzaWJsZSwgYnV0IGFzIHRoZSBkZWxheSBpcworICogdXN1YWxseSBiZXR3ZWVuIDJtcyBhbmQgMzJtcywgaXQgaXMgZG9uZSB1c2luZyBhIHNjaGVkdWxlZCBtc2xlZXAKKyAqIGZvbGxvd2VkIGJ5IHVzbGVlcCAobm9ybWFsbHkgYSBidXN5LXdhaXQgbG9vcCkgZm9yIHRoZSByZW1haW5kZXIKKyAqLwordm9pZCBkdmJfZnJvbnRlbmRfc2xlZXBfdW50aWwoc3RydWN0IHRpbWV2YWwgKndha2V0aW1lLCB1MzIgYWRkX3VzZWMpCit7CisJc3RydWN0IHRpbWV2YWwgbGFzdHRpbWU7CisJczMyIGRlbHRhLCBuZXdkZWx0YTsKKworCXRpbWV2YWxfdXNlY19hZGQod2FrZXRpbWUsIGFkZF91c2VjKTsKKworCWRvX2dldHRpbWVvZmRheSgmbGFzdHRpbWUpOworCWRlbHRhID0gdGltZXZhbF91c2VjX2RpZmYobGFzdHRpbWUsICp3YWtldGltZSk7CisJaWYgKGRlbHRhID4gMjUwMCkgeworCQltc2xlZXAoKGRlbHRhIC0gMTUwMCkgLyAxMDAwKTsKKwkJZG9fZ2V0dGltZW9mZGF5KCZsYXN0dGltZSk7CisJCW5ld2RlbHRhID0gdGltZXZhbF91c2VjX2RpZmYobGFzdHRpbWUsICp3YWtldGltZSk7CisJCWRlbHRhID0gKG5ld2RlbHRhID4gZGVsdGEpID8gMCA6IG5ld2RlbHRhOworCX0KKwlpZiAoZGVsdGEgPiAwKQorCQl1ZGVsYXkoZGVsdGEpOworfQorRVhQT1JUX1NZTUJPTChkdmJfZnJvbnRlbmRfc2xlZXBfdW50aWwpOworCiBzdGF0aWMgaW50IGR2Yl9mcm9udGVuZF9zdGFydChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKIAlpbnQgcmV0OwpAQCAtNzI4LDYgKzc1MCw2MCBAQAogCQkJZXJyID0gZmUtPm9wcy0+ZGlzaG5ldHdvcmtfc2VuZF9sZWdhY3lfY29tbWFuZChmZSwgKHVuc2lnbmVkIGludCkgcGFyZyk7CiAJCQlmZXByaXYtPnN0YXRlID0gRkVTVEFURV9ESVNFUUM7CiAJCQlmZXByaXYtPnN0YXR1cyA9IDA7CisJCX0gZWxzZSBpZiAoZmUtPm9wcy0+c2V0X3ZvbHRhZ2UpIHsKKwkJCS8qCisJCQkgKiBOT1RFOiBUaGlzIGlzIGEgZmFsbGJhY2sgY29uZGl0aW9uLiAgU29tZSBmcm9udGVuZHMKKwkJCSAqIChzdHYwMjk5IGZvciBpbnN0YW5jZSkgdGFrZSBsb25nZXIgdGhhbiA4bXNlYyB0bworCQkJICogcmVzcG9uZCB0byBhIHNldF92b2x0YWdlIGNvbW1hbmQuICBUaG9zZSBzd2l0Y2hlcworCQkJICogbmVlZCBjdXN0b20gcm91dGluZXMgdG8gc3dpdGNoIHByb3Blcmx5LiAgRm9yIGFsbAorCQkJICogb3RoZXIgZnJvbnRlbmRzLCB0aGUgZm9sbG93aW5nIHNob3VsZSB3b3JrIG9rLgorCQkJICogRGlzaCBuZXR3b3JrIGxlZ2FjeSBzd2l0Y2hlcyAoYXMgdXNlZCBieSBEaXNoNTAwKQorCQkJICogYXJlIGNvbnRyb2xsZWQgYnkgc2VuZGluZyA5LWJpdCBjb21tYW5kIHdvcmRzCisJCQkgKiBzcGFjZWQgOG1zZWMgYXBhcnQuCisJCQkgKiB0aGUgYWN0dWFsIGNvbW1hbmQgd29yZCBpcyBzd2l0Y2gvcG9ydCBkZXBlbmRhbnQKKwkJCSAqIHNvIGl0IGlzIHVwIHRvIHRoZSB1c2Vyc3BhY2UgYXBwbGljYXRpb24gdG8gc2VuZAorCQkJICogdGhlIHJpZ2h0IGNvbW1hbmQuCisJCQkgKiBUaGUgY29tbWFuZCBtdXN0IGFsd2F5cyBzdGFydCB3aXRoIGEgJzAnIGFmdGVyCisJCQkgKiBpbml0aWFsaXphdGlvbiwgc28gcGFyZyBpcyA4IGJpdHMgYW5kIGRvZXMgbm90CisJCQkgKiBpbmNsdWRlIHRoZSBpbml0aWFsaXphdGlvbiBvciBzdGFydCBiaXQKKwkJCSAqLworCQkJdW5zaWduZWQgaW50IGNtZCA9ICgodW5zaWduZWQgaW50KSBwYXJnKSA8PCAxOworCQkJc3RydWN0IHRpbWV2YWwgbmV4dHRpbWU7CisJCQlzdHJ1Y3QgdGltZXZhbCB0dlsxMF07CisJCQlpbnQgaTsKKwkJCXU4IGxhc3QgPSAxOworCQkJaWYgKGR2Yl9mcm9udGVuZF9kZWJ1ZykKKwkJCQlwcmludGsoIiVzIHN3aXRjaCBjb21tYW5kOiAweCUwNHhcbiIsIF9fRlVOQ1RJT05fXywgY21kKTsKKwkJCWRvX2dldHRpbWVvZmRheSgmbmV4dHRpbWUpOworCQkJaWYgKGR2Yl9mcm9udGVuZF9kZWJ1ZykKKwkJCQltZW1jcHkoJnR2WzBdLCAmbmV4dHRpbWUsIHNpemVvZihzdHJ1Y3QgdGltZXZhbCkpOworCQkJLyogYmVmb3JlIHNlbmRpbmcgYSBjb21tYW5kLCBpbml0aWFsaXplIGJ5IHNlbmRpbmcKKwkJCSAqIGEgMzJtcyAxOFYgdG8gdGhlIHN3aXRjaAorCQkJICovCisJCQlmZS0+b3BzLT5zZXRfdm9sdGFnZShmZSwgU0VDX1ZPTFRBR0VfMTgpOworCQkJZHZiX2Zyb250ZW5kX3NsZWVwX3VudGlsKCZuZXh0dGltZSwgMzIwMDApOworCisJCQlmb3IgKGkgPSAwOyBpIDwgOTsgaSsrKSB7CisJCQkJaWYgKGR2Yl9mcm9udGVuZF9kZWJ1ZykKKwkJCQkJZG9fZ2V0dGltZW9mZGF5KCZ0dltpICsgMV0pOworCQkJCWlmICgoY21kICYgMHgwMSkgIT0gbGFzdCkgeworCQkJCQkvKiBzZXQgdm9sdGFnZSB0byAobGFzdCA/IDEzViA6IDE4VikgKi8KKwkJCQkJZmUtPm9wcy0+c2V0X3ZvbHRhZ2UoZmUsIChsYXN0KSA/IFNFQ19WT0xUQUdFXzEzIDogU0VDX1ZPTFRBR0VfMTgpOworCQkJCQlsYXN0ID0gKGxhc3QpID8gMCA6IDE7CisJCQkJfQorCQkJCWNtZCA9IGNtZCA+PiAxOworCQkJCWlmIChpICE9IDgpCisJCQkJCWR2Yl9mcm9udGVuZF9zbGVlcF91bnRpbCgmbmV4dHRpbWUsIDgwMDApOworCQkJfQorCQkJaWYgKGR2Yl9mcm9udGVuZF9kZWJ1ZykgeworCQkJCXByaW50aygiJXMoJWQpOiBzd2l0Y2ggZGVsYXkgKHNob3VsZCBiZSAzMmsgZm9sbG93ZWQgYnkgYWxsIDhrXG4iLAorCQkJCQlfX0ZVTkNUSU9OX18sIGZlLT5kdmItPm51bSk7CisJCQkJZm9yIChpID0gMTsgaSA8IDEwOyBpKyspCisJCQkJCXByaW50aygiJWQ6ICVkXG4iLCBpLCB0aW1ldmFsX3VzZWNfZGlmZih0dltpLTFdICwgdHZbaV0pKTsKKwkJCX0KKwkJCWVyciA9IDA7CisJCQlmZXByaXYtPnN0YXRlID0gRkVTVEFURV9ESVNFUUM7CisJCQlmZXByaXYtPnN0YXR1cyA9IDA7CiAJCX0KIAkJYnJlYWs7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9mcm9udGVuZC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmgKaW5kZXggOWMyYzFkMS4uMzQ4YzliMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmgKQEAgLTEwMSw0ICsxMDEsNyBAQAogCiBleHRlcm4gaW50IGR2Yl91bnJlZ2lzdGVyX2Zyb250ZW5kKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlKTsKIAorZXh0ZXJuIHZvaWQgZHZiX2Zyb250ZW5kX3NsZWVwX3VudGlsKHN0cnVjdCB0aW1ldmFsICp3YWtldGltZSwgdTMyIGFkZF91c2VjKTsKK2V4dGVybiBzMzIgdGltZXZhbF91c2VjX2RpZmYoc3RydWN0IHRpbWV2YWwgbGFzdHRpbWUsIHN0cnVjdCB0aW1ldmFsIGN1cnRpbWUpOworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYTgwMC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hODAwLmMKaW5kZXggZTU1MzIyZS4uNDlmNTQxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hODAwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hODAwLmMKQEAgLTQzLDExICs0Myw5IEBACiAJeyAweDAyLCAweDEzLCBLRVlfUklHSFQgfSwgICAgICAgLyogUiAvIENIIFJUTiAqLwogCXsgMHgwMiwgMHgxNywgS0VZX1BST0cyIH0sICAgICAgIC8qIFNOQVAgU0hPVCAqLwogCXsgMHgwMiwgMHgxMCwgS0VZX1BST0czIH0sICAgICAgIC8qIDE2LUNIIFBSRVYgKi8KLQl7IDB4MDIsIDB4MDMsIEtFWV9DSEFOTkVMVVAgfSwgICAvKiBDSCBVUCAqLwogCXsgMHgwMiwgMHgxZSwgS0VZX1ZPTFVNRURPV04gfSwgIC8qIFZPTCBET1dOICovCiAJeyAweDAyLCAweDBjLCBLRVlfWk9PTSB9LCAgICAgICAgLyogRlVMTCBTQ1JFRU4gKi8KIAl7IDB4MDIsIDB4MWYsIEtFWV9WT0xVTUVVUCB9LCAgICAvKiBWT0wgVVAgKi8KLQl7IDB4MDIsIDB4MDIsIEtFWV9DSEFOTkVMRE9XTiB9LCAvKiBDSCBET1dOICovCiAJeyAweDAyLCAweDE0LCBLRVlfTVVURSB9LCAgICAgICAgLyogTVVURSAqLwogCXsgMHgwMiwgMHgwOCwgS0VZX0FVRElPIH0sICAgICAgIC8qIEFVRElPICovCiAJeyAweDAyLCAweDE5LCBLRVlfUkVDT1JEIH0sICAgICAgLyogUkVDT1JEICovCkBAIC01Nyw4ICs1NSw2IEBACiAJeyAweDAyLCAweDFkLCBLRVlfQkFDSyB9LCAgICAgICAgLyogPDwgLyBSRUQgKi8KIAl7IDB4MDIsIDB4MWMsIEtFWV9GT1JXQVJEIH0sICAgICAvKiA+PiAvIFlFTExPVyAqLwogCXsgMHgwMiwgMHgwMywgS0VZX1RFWFQgfSwgICAgICAgIC8qIFRFTEVURVhUICovCi0JeyAweDAyLCAweDAxLCBLRVlfRklSU1QgfSwgICAgICAgLyogfDw8IC8gR1JFRU4gKi8KLQl7IDB4MDIsIDB4MDAsIEtFWV9MQVNUIH0sICAgICAgICAvKiA+PnwgLyBCTFVFICovCiAJeyAweDAyLCAweDA0LCBLRVlfRVBHIH0sICAgICAgICAgLyogRVBHICovCiAJeyAweDAyLCAweDE1LCBLRVlfTUVOVSB9LCAgICAgICAgLyogTUVOVSAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYnVzYi1tYi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWJ1c2ItbWIuYwppbmRleCAwMDU4NTA1Li5hYTI3MWEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYnVzYi1tYi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGlidXNiLW1iLmMKQEAgLTgyLDEzICs4MiwxNSBAQAogc3RhdGljIHN0cnVjdCBkdmJfdXNiX3Byb3BlcnRpZXMgZGlidXNiMV8xX3Byb3BlcnRpZXM7CiBzdGF0aWMgc3RydWN0IGR2Yl91c2JfcHJvcGVydGllcyBkaWJ1c2IxXzFfYW4yMjM1X3Byb3BlcnRpZXM7CiBzdGF0aWMgc3RydWN0IGR2Yl91c2JfcHJvcGVydGllcyBkaWJ1c2IyXzBiX3Byb3BlcnRpZXM7CitzdGF0aWMgc3RydWN0IGR2Yl91c2JfcHJvcGVydGllcyBhcnRlY190MV91c2IyX3Byb3BlcnRpZXM7CiAKIHN0YXRpYyBpbnQgZGlidXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAogCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCiB7CiAJaWYgKGR2Yl91c2JfZGV2aWNlX2luaXQoaW50ZiwmZGlidXNiMV8xX3Byb3BlcnRpZXMsVEhJU19NT0RVTEUsTlVMTCkgPT0gMCB8fAogCQlkdmJfdXNiX2RldmljZV9pbml0KGludGYsJmRpYnVzYjFfMV9hbjIyMzVfcHJvcGVydGllcyxUSElTX01PRFVMRSxOVUxMKSA9PSAwIHx8Ci0JCWR2Yl91c2JfZGV2aWNlX2luaXQoaW50ZiwmZGlidXNiMl8wYl9wcm9wZXJ0aWVzLFRISVNfTU9EVUxFLE5VTEwpID09IDApCisJCWR2Yl91c2JfZGV2aWNlX2luaXQoaW50ZiwmZGlidXNiMl8wYl9wcm9wZXJ0aWVzLFRISVNfTU9EVUxFLE5VTEwpID09IDAgfHwKKwkJZHZiX3VzYl9kZXZpY2VfaW5pdChpbnRmLCZhcnRlY190MV91c2IyX3Byb3BlcnRpZXMsVEhJU19NT0RVTEUsTlVMTCkgPT0gMCkKIAkJcmV0dXJuIDA7CiAKIAlyZXR1cm4gLUVJTlZBTDsKQEAgLTEyOCwxMCArMTMwLDEzIEBACiAKIC8qIDI3ICovCXsgVVNCX0RFVklDRShVU0JfVklEX0tXT1JMRCwJCVVTQl9QSURfS1dPUkxEX1ZTVFJFQU1fQ09MRCkgfSwKIAorLyogMjggKi8JeyBVU0JfREVWSUNFKFVTQl9WSURfVUxUSU1BX0VMRUNUUk9OSUMsCQlVU0JfUElEX1VMVElNQV9UVkJPWF9VU0IyX0NPTEQpIH0sCisvKiAyOSAqLwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9VTFRJTUFfRUxFQ1RST05JQywJCVVTQl9QSURfVUxUSU1BX1RWQk9YX1VTQjJfV0FSTSkgfSwKKwogLy8gI2RlZmluZSBEVkJfVVNCX0RJQlVTQl9NQl9GQVVMVFlfVVNCX0lEcwogCiAjaWZkZWYgRFZCX1VTQl9ESUJVU0JfTUJfRkFVTFRZX1VTQl9JRHMKLS8qIDI4ICovCXsgVVNCX0RFVklDRShVU0JfVklEX0FOQ0hPUiwJCVVTQl9QSURfVUxUSU1BX1RWQk9YX0FOQ0hPUl9DT0xEKSB9LAorLyogMzAgKi8JeyBVU0JfREVWSUNFKFVTQl9WSURfQU5DSE9SLAkJVVNCX1BJRF9VTFRJTUFfVFZCT1hfQU5DSE9SX0NPTEQpIH0sCiAjZW5kaWYKIAkJCXsgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CkBAIC0yNjQsNyArMjY5LDcgQEAKIAkJfSwKICNpZmRlZiBEVkJfVVNCX0RJQlVTQl9NQl9GQVVMVFlfVVNCX0lEcwogCQl7CSJBcnRlYyBUMSBVU0IxLjEgVFZCT1ggd2l0aCBBTjIyMzUgKGZhdWx0eSBVU0IgSURzKSIsCi0JCQl7ICZkaWJ1c2JfZGliMzAwMG1iX3RhYmxlWzI4XSwgTlVMTCB9LAorCQkJeyAmZGlidXNiX2RpYjMwMDBtYl90YWJsZVszMF0sIE5VTEwgfSwKIAkJCXsgTlVMTCB9LAogCQl9LAogI2VuZGlmCkBAIC0yNzMsNyArMjc4LDcgQEAKIAogc3RhdGljIHN0cnVjdCBkdmJfdXNiX3Byb3BlcnRpZXMgZGlidXNiMl8wYl9wcm9wZXJ0aWVzID0gewogCS5jYXBzID0gRFZCX1VTQl9IQVNfUElEX0ZJTFRFUiB8IERWQl9VU0JfUElEX0ZJTFRFUl9DQU5fQkVfVFVSTkVEX09GRiB8IERWQl9VU0JfSVNfQU5fSTJDX0FEQVBURVIsCi0JLnBpZF9maWx0ZXJfY291bnQgPSAzMiwKKwkucGlkX2ZpbHRlcl9jb3VudCA9IDE2LAogCiAJLnVzYl9jdHJsID0gQ1lQUkVTU19GWDIsCiAKQEAgLTMyMSw2ICszMjYsNTIgQEAKIAl9CiB9OwogCitzdGF0aWMgc3RydWN0IGR2Yl91c2JfcHJvcGVydGllcyBhcnRlY190MV91c2IyX3Byb3BlcnRpZXMgPSB7CisJLmNhcHMgPSBEVkJfVVNCX0hBU19QSURfRklMVEVSIHwgRFZCX1VTQl9QSURfRklMVEVSX0NBTl9CRV9UVVJORURfT0ZGIHwgRFZCX1VTQl9JU19BTl9JMkNfQURBUFRFUiwKKwkucGlkX2ZpbHRlcl9jb3VudCA9IDE2LAorCisJLnVzYl9jdHJsID0gQ1lQUkVTU19GWDIsCisKKwkuZmlybXdhcmUgPSAiZHZiLXVzYi1kaWJ1c2ItNi4wLjAuOC5mdyIsCisKKwkuc2l6ZV9vZl9wcml2ICAgICA9IHNpemVvZihzdHJ1Y3QgZGlidXNiX3N0YXRlKSwKKworCS5zdHJlYW1pbmdfY3RybCAgID0gZGlidXNiMl8wX3N0cmVhbWluZ19jdHJsLAorCS5waWRfZmlsdGVyICAgICAgID0gZGlidXNiX3BpZF9maWx0ZXIsCisJLnBpZF9maWx0ZXJfY3RybCAgPSBkaWJ1c2JfcGlkX2ZpbHRlcl9jdHJsLAorCS5wb3dlcl9jdHJsICAgICAgID0gZGlidXNiMl8wX3Bvd2VyX2N0cmwsCisJLmZyb250ZW5kX2F0dGFjaCAgPSBkaWJ1c2JfZGliMzAwMG1iX2Zyb250ZW5kX2F0dGFjaCwKKwkudHVuZXJfYXR0YWNoICAgICA9IGRpYnVzYl90dW5lcl9wcm9iZV9hbmRfYXR0YWNoLAorCisJLnJjX2ludGVydmFsICAgICAgPSBERUZBVUxUX1JDX0lOVEVSVkFMLAorCS5yY19rZXlfbWFwICAgICAgID0gZGlidXNiX3JjX2tleXMsCisJLnJjX2tleV9tYXBfc2l6ZSAgPSA2MywgLyogd293LCB0aGF0IGlzIHVnbHkgLi4uIEkgd2FudCB0byBsb2FkIGl0IHRvIHRoZSBkcml2ZXIgZHluYW1pY2FsbHkgKi8KKwkucmNfcXVlcnkgICAgICAgICA9IGRpYnVzYl9yY19xdWVyeSwKKworCS5pMmNfYWxnbyAgICAgICAgID0gJmRpYnVzYl9pMmNfYWxnbywKKworCS5nZW5lcmljX2J1bGtfY3RybF9lbmRwb2ludCA9IDB4MDEsCisJLyogcGFyYW1ldGVyIGZvciB0aGUgTVBFRzItZGF0YSB0cmFuc2ZlciAqLworCS51cmIgPSB7CisJCS50eXBlID0gRFZCX1VTQl9CVUxLLAorCQkuY291bnQgPSA3LAorCQkuZW5kcG9pbnQgPSAweDA2LAorCQkudSA9IHsKKwkJCS5idWxrID0geworCQkJCS5idWZmZXJzaXplID0gNDA5NiwKKwkJCX0KKwkJfQorCX0sCisKKwkubnVtX2RldmljZV9kZXNjcyA9IDEsCisJLmRldmljZXMgPSB7CisJCXsJIkFydGVjIFQxIFVTQjIuMCIsCisJCQl7ICZkaWJ1c2JfZGliMzAwMG1iX3RhYmxlWzI4XSwgTlVMTCB9LAorCQkJeyAmZGlidXNiX2RpYjMwMDBtYl90YWJsZVsyOV0sIE5VTEwgfSwKKwkJfSwKKwl9Cit9OworCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgZGlidXNiX2RyaXZlciA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gImR2Yl91c2JfZGlidXNiX21iIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGlidXNiLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYnVzYi5oCmluZGV4IDY2MTFmNjIuLjJkOTlkMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGlidXNiLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWJ1c2IuaApAQCAtMTEsNyArMTEsOSBAQAogI2lmbmRlZiBfRFZCX1VTQl9ESUJVU0JfSF8KICNkZWZpbmUgX0RWQl9VU0JfRElCVVNCX0hfCiAKLSNkZWZpbmUgRFZCX1VTQl9MT0dfUFJFRklYICJkaWJ1c2IiCisjaWZuZGVmIERWQl9VU0JfTE9HX1BSRUZJWAorICNkZWZpbmUgRFZCX1VTQl9MT0dfUFJFRklYICJkaWJ1c2IiCisjZW5kaWYKICNpbmNsdWRlICJkdmItdXNiLmgiCiAKICNpbmNsdWRlICJkaWIzMDAwLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItaWRzLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItaWRzLmgKaW5kZXggMDgxODk5Ni4uNmJlOTllNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLWlkcy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1pZHMuaApAQCAtNDMsMTAgKzQzLDE0IEBACiAjZGVmaW5lIFVTQl9QSURfQ09NUFJPX0RWQlUyMDAwX1dBUk0JCTB4ZDAwMQogI2RlZmluZSBVU0JfUElEX0NPTVBST19EVkJVMjAwMF9VTktfQ09MRAkweDAxMGMKICNkZWZpbmUgVVNCX1BJRF9DT01QUk9fRFZCVTIwMDBfVU5LX1dBUk0JMHgwMTBkCisjZGVmaW5lIFVTQl9QSURfRElCQ09NX0hPT0tfREVGQVVMVAkJCTB4MDA2NAorI2RlZmluZSBVU0JfUElEX0RJQkNPTV9IT09LX0RFRkFVTFRfUkVFTlVNCTB4MDA2NQogI2RlZmluZSBVU0JfUElEX0RJQkNPTV9NT0QzMDAwX0NPTEQJCQkweDBiYjgKICNkZWZpbmUgVVNCX1BJRF9ESUJDT01fTU9EMzAwMF9XQVJNCQkJMHgwYmI5CiAjZGVmaW5lIFVTQl9QSURfRElCQ09NX01PRDMwMDFfQ09MRAkJCTB4MGJjNgogI2RlZmluZSBVU0JfUElEX0RJQkNPTV9NT0QzMDAxX1dBUk0JCQkweDBiYzcKKyNkZWZpbmUgVVNCX1BJRF9ESUJDT01fU1RLNzcwMAkJCQkweDFlMTQKKyNkZWZpbmUgVVNCX1BJRF9ESUJDT01fU1RLNzcwMF9SRUVOVU0JCTB4MWUxNQogI2RlZmluZSBVU0JfUElEX0RJQkNPTV9BTkNIT1JfMjEzNV9DT0xECQkweDIxMzEKICNkZWZpbmUgVVNCX1BJRF9HUkFORFRFQ19EVkJUX1VTQl9DT0xECQkweDBmYTAKICNkZWZpbmUgVVNCX1BJRF9HUkFORFRFQ19EVkJUX1VTQl9XQVJNCQkweDBmYTEKQEAgLTY4LDYgKzcyLDcgQEAKICNkZWZpbmUgVVNCX1BJRF9VTFRJTUFfVFZCT1hfQU4yMjM1X1dBUk0JMHg4MTA4CiAjZGVmaW5lIFVTQl9QSURfVUxUSU1BX1RWQk9YX0FOQ0hPUl9DT0xECTB4MjIzNQogI2RlZmluZSBVU0JfUElEX1VMVElNQV9UVkJPWF9VU0IyX0NPTEQJCTB4ODEwOQorI2RlZmluZSBVU0JfUElEX1VMVElNQV9UVkJPWF9VU0IyX1dBUk0JCTB4ODEwYQogI2RlZmluZSBVU0JfUElEX1VMVElNQV9UVkJPWF9VU0IyX0ZYX0NPTEQJMHg4NjEzCiAjZGVmaW5lIFVTQl9QSURfVUxUSU1BX1RWQk9YX1VTQjJfRlhfV0FSTQkweDEwMDIKICNkZWZpbmUgVVNCX1BJRF9VTktfSFlQRVJfUEFMVEVLX0NPTEQJCTB4MDA1ZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLXVyYi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLXVyYi5jCmluZGV4IGY1Nzk5YTQuLjM2YjcwNDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi11cmIuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItdXJiLmMKQEAgLTE5Niw3ICsxOTYsOSBAQAogCQkJZHZiX3VzYl9mcmVlX3N0cmVhbV9idWZmZXJzKGQpOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KLQkJZGViX21lbSgiYnVmZmVyICVkOiAlcCAoZG1hOiAlZClcbiIsZC0+YnVmX251bSxkLT5idWZfbGlzdFtkLT5idWZfbnVtXSxkLT5kbWFfYWRkcltkLT5idWZfbnVtXSk7CisJCWRlYl9tZW0oImJ1ZmZlciAlZDogJXAgKGRtYTogJWxsdSlcbiIsCisJCQlkLT5idWZfbnVtLCBkLT5idWZfbGlzdFtkLT5idWZfbnVtXSwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpZC0+ZG1hX2FkZHJbZC0+YnVmX251bV0pOwogCQltZW1zZXQoZC0+YnVmX2xpc3RbZC0+YnVmX251bV0sMCxzaXplKTsKIAl9CiAJZGViX21lbSgiYWxsb2NhdGlvbiBzdWNjZXNzZnVsXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL0tjb25maWcKaW5kZXggYTUwYTQxZi4uOGUyNjllMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL0tjb25maWcKQEAgLTE2NCw2ICsxNjQsMTQgQEAKIAloZWxwCiAJICBBbiBBVFNDIDhWU0IgdHVuZXIgbW9kdWxlLiBTYXkgWSB3aGVuIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhpcyBmcm9udGVuZC4KIAorY29uZmlnIERWQl9OWFQyMDBYCisJdHJpc3RhdGUgIk5leHR3YXZlIE5YVDIwMDIvTlhUMjAwNCBiYXNlZCIKKwlkZXBlbmRzIG9uIERWQl9DT1JFCisJc2VsZWN0IEZXX0xPQURFUgorCWhlbHAKKwkgIEFuIEFUU0MgOFZTQiBhbmQgUUFNNjQvMjU2IHR1bmVyIG1vZHVsZS4gU2F5IFkgd2hlbiB5b3Ugd2FudAorCSAgdG8gc3VwcG9ydCB0aGlzIGZyb250ZW5kLgorCiBjb25maWcgRFZCX09SNTEyMTEKIAl0cmlzdGF0ZSAib3I1MTIxMSBiYXNlZCAocGNIRFRWIEhEMjAwMCBjYXJkKSIKIAlkZXBlbmRzIG9uIERWQl9DT1JFCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvTWFrZWZpbGUKaW5kZXggYWQ4NjU4Zi4uYTk4NzYwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9NYWtlZmlsZQpAQCAtMjYsNiArMjYsNyBAQAogb2JqLSQoQ09ORklHX0RWQl9UREExMDAyMSkgKz0gdGRhMTAwMjEubwogb2JqLSQoQ09ORklHX0RWQl9TVFYwMjk3KSArPSBzdHYwMjk3Lm8KIG9iai0kKENPTkZJR19EVkJfTlhUMjAwMikgKz0gbnh0MjAwMi5vCitvYmotJChDT05GSUdfRFZCX05YVDIwMFgpICs9IG54dDIwMHgubwogb2JqLSQoQ09ORklHX0RWQl9PUjUxMjExKSArPSBvcjUxMjExLm8KIG9iai0kKENPTkZJR19EVkJfT1I1MTEzMikgKz0gb3I1MTEzMi5vCiBvYmotJChDT05GSUdfRFZCX0JDTTM1MTApICs9IGJjbTM1MTAubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2R2Yi1wbGwuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kdmItcGxsLmMKaW5kZXggNTM2YzM1ZC4uZjg1N2I4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2R2Yi1wbGwuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZHZiLXBsbC5jCkBAIC0yMjYsNyArMjI2LDcgQEAKIEVYUE9SVF9TWU1CT0woZHZiX3BsbF90dWE2MDM0KTsKIAogLyogSW5maW5lb24gVFVBNjAzNAotICogdXNlZCBpbiBMRyBJbm5vdGVrIFREVlMtSDA2MkYKKyAqIHVzZWQgaW4gTEcgVERWUyBIMDYxRiBhbmQgTEcgVERWUyBIMDYyRgogICovCiBzdHJ1Y3QgZHZiX3BsbF9kZXNjIGR2Yl9wbGxfdGR2c190dWE2MDM0ID0gewogCS5uYW1lICA9ICJMRy9JbmZpbmVvbiBUVUE2MDM0IiwKQEAgLTI5Miw2ICsyOTIsNTggQEAKIH07CiBFWFBPUlRfU1lNQk9MKGR2Yl9wbGxfdGRlZDQpOwogCisvKiBBTFBTIFRESFUyCisgKiB1c2VkIGluIEF2ZXJUVkhEIE1DRSBBMTgwCisgKi8KK3N0cnVjdCBkdmJfcGxsX2Rlc2MgZHZiX3BsbF90ZGh1MiA9IHsKKwkubmFtZSA9ICJBTFBTIFRESFUyIiwKKwkubWluID0gNTQwMDAwMDAsCisJLm1heCA9IDg2NDAwMDAwMCwKKwkuY291bnQgPSA0LAorCS5lbnRyaWVzID0geworCQl7IDE2MjAwMDAwMCwgNDQwMDAwMDAsIDYyNTAwLCAweDg1LCAweDAxIH0sCisJCXsgNDI2MDAwMDAwLCA0NDAwMDAwMCwgNjI1MDAsIDB4ODUsIDB4MDIgfSwKKwkJeyA3ODIwMDAwMDAsIDQ0MDAwMDAwLCA2MjUwMCwgMHg4NSwgMHgwOCB9LAorCQl7IDk5OTk5OTk5OSwgNDQwMDAwMDAsIDYyNTAwLCAweDg1LCAweDg4IH0sCisJfQorfTsKK0VYUE9SVF9TWU1CT0woZHZiX3BsbF90ZGh1Mik7CisKKy8qIFBoaWxpcHMgVFVWMTIzNkQKKyAqIHVzZWQgaW4gQVRJIEhEVFYgV29uZGVyCisgKi8KK3N0cnVjdCBkdmJfcGxsX2Rlc2MgZHZiX3BsbF90dXYxMjM2ZCA9IHsKKwkubmFtZSAgPSAiUGhpbGlwcyBUVVYxMjM2RCIsCisJLm1pbiAgID0gIDU0MDAwMDAwLAorCS5tYXggICA9IDg2NDAwMDAwMCwKKwkuY291bnQgPSAzLAorCS5lbnRyaWVzID0geworCQl7IDE1NzI1MDAwMCwgNDQwMDAwMDAsIDYyNTAwLCAweGM2LCAweDQxIH0sCisJCXsgNDU0MDAwMDAwLCA0NDAwMDAwMCwgNjI1MDAsIDB4YzYsIDB4NDIgfSwKKwkJeyA5OTk5OTk5OTksIDQ0MDAwMDAwLCA2MjUwMCwgMHhjNiwgMHg0NCB9LAorCX0sCit9OworRVhQT1JUX1NZTUJPTChkdmJfcGxsX3R1djEyMzZkKTsKKworLyogU2Ftc3VuZyBUQk1WMzAxMTFJTgorICogdXNlZCBpbiBBaXIyUEMgQVRTQyAtIDJuZCBnZW5lcmF0aW9uIChueHQyMDAyKQorICovCitzdHJ1Y3QgZHZiX3BsbF9kZXNjIGR2Yl9wbGxfdGJtdjMwMTExaW4gPSB7CisJLm5hbWUgPSAiU2Ftc3VuZyBUQk1WMzAxMTFJTiIsCisJLm1pbiA9IDU0MDAwMDAwLAorCS5tYXggPSA4NjAwMDAwMDAsCisJLmNvdW50ID0gNCwKKwkuZW50cmllcyA9IHsKKwkJeyAxNzIwMDAwMDAsIDQ0MDAwMDAwLCAxNjY2NjYsIDB4YjQsIDB4MDEgfSwKKwkJeyAyMTQwMDAwMDAsIDQ0MDAwMDAwLCAxNjY2NjYsIDB4YjQsIDB4MDIgfSwKKwkJeyA0NjcwMDAwMDAsIDQ0MDAwMDAwLCAxNjY2NjYsIDB4YmMsIDB4MDIgfSwKKwkJeyA3MjEwMDAwMDAsIDQ0MDAwMDAwLCAxNjY2NjYsIDB4YmMsIDB4MDggfSwKKwkJeyA4NDEwMDAwMDAsIDQ0MDAwMDAwLCAxNjY2NjYsIDB4ZjQsIDB4MDggfSwKKwkJeyA5OTk5OTk5OTksIDQ0MDAwMDAwLCAxNjY2NjYsIDB4ZmMsIDB4MDIgfSwKKwl9Cit9OworRVhQT1JUX1NZTUJPTChkdmJfcGxsX3RibXYzMDExMWluKTsKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIGNvZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kdmItcGxsLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZHZiLXBsbC5oCmluZGV4IDIwNWIyZDEuLjQ5N2QzMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kdmItcGxsLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2R2Yi1wbGwuaApAQCAtMzYsNiArMzYsMTAgQEAKIGV4dGVybiBzdHJ1Y3QgZHZiX3BsbF9kZXNjIGR2Yl9wbGxfZm1kMTIxNm1lOwogZXh0ZXJuIHN0cnVjdCBkdmJfcGxsX2Rlc2MgZHZiX3BsbF90ZGVkNDsKIAorZXh0ZXJuIHN0cnVjdCBkdmJfcGxsX2Rlc2MgZHZiX3BsbF90dXYxMjM2ZDsKK2V4dGVybiBzdHJ1Y3QgZHZiX3BsbF9kZXNjIGR2Yl9wbGxfdGRodTI7CitleHRlcm4gc3RydWN0IGR2Yl9wbGxfZGVzYyBkdmJfcGxsX3RibXYzMDExMWluOworCiBpbnQgZHZiX3BsbF9jb25maWd1cmUoc3RydWN0IGR2Yl9wbGxfZGVzYyAqZGVzYywgdTggKmJ1ZiwKIAkJICAgICAgdTMyIGZyZXEsIGludCBiYW5kd2lkdGgpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbGdkdDMzMHguYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sZ2R0MzMweC5jCmluZGV4IDc4NTJiODMuLjZhMzNmNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sZ2R0MzMweC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sZ2R0MzMweC5jCkBAIC0yNiw2ICsyNiw4IEBACiAgKiAgIERWaUNPIEZ1c2lvbkhEVFYgMyBHb2xkLVEKICAqICAgRFZpQ08gRnVzaW9uSERUViAzIEdvbGQtVAogICogICBEVmlDTyBGdXNpb25IRFRWIDUgR29sZAorICogICBEVmlDTyBGdXNpb25IRFRWIDUgTGl0ZQorICogICBBaXIyUEMvQWlyU3RhciAyIEFUU0MgM3JkIGdlbmVyYXRpb24gKEhENTAwMCkKICAqCiAgKiBUT0RPOgogICogc2lnbmFsIHN0cmVuZ3RoIGFsd2F5cyByZXR1cm5zIDAuCkBAIC0yMjIsNiArMjI0LDExIEBACiAJCTB4NGMsIDB4MTQKIAl9OwogCisJc3RhdGljIHU4IGZsaXBfbGdkdDMzMDNfaW5pdF9kYXRhW10gPSB7CisJCTB4NGMsIDB4MTQsCisJCTB4ODcsIDB4ZjMKKwl9OworCiAJc3RydWN0IGxnZHQzMzB4X3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCWNoYXIgICpjaGlwX25hbWU7CiAJaW50ICAgIGVycjsKQEAgLTIzNCw4ICsyNDEsMTMgQEAKIAkJYnJlYWs7CiAJY2FzZSBMR0RUMzMwMzoKIAkJY2hpcF9uYW1lID0gIkxHRFQzMzAzIjsKLQkJZXJyID0gaTJjX3dyaXRlX2RlbW9kX2J5dGVzKHN0YXRlLCBsZ2R0MzMwM19pbml0X2RhdGEsCi0JCQkJCSAgICBzaXplb2YobGdkdDMzMDNfaW5pdF9kYXRhKSk7CisJCWlmIChzdGF0ZS0+Y29uZmlnLT5jbG9ja19wb2xhcml0eV9mbGlwKSB7CisJCQllcnIgPSBpMmNfd3JpdGVfZGVtb2RfYnl0ZXMoc3RhdGUsIGZsaXBfbGdkdDMzMDNfaW5pdF9kYXRhLAorCQkJCQkJICAgIHNpemVvZihmbGlwX2xnZHQzMzAzX2luaXRfZGF0YSkpOworCQl9IGVsc2UgeworCQkJZXJyID0gaTJjX3dyaXRlX2RlbW9kX2J5dGVzKHN0YXRlLCBsZ2R0MzMwM19pbml0X2RhdGEsCisJCQkJCQkgICAgc2l6ZW9mKGxnZHQzMzAzX2luaXRfZGF0YSkpOworCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWNoaXBfbmFtZSA9ICJ1bmRlZmluZWQiOwpAQCAtNzQzLDkgKzc1NSw4IEBACiAJCS5mcmVxdWVuY3lfbWluPSA1NDAwMDAwMCwKIAkJLmZyZXF1ZW5jeV9tYXg9IDg1ODAwMDAwMCwKIAkJLmZyZXF1ZW5jeV9zdGVwc2l6ZT0gNjI1MDAsCi0JCS8qIFN5bWJvbCByYXRlIGlzIGZvciBhbGwgVlNCIG1vZGVzIG5lZWQgdG8gY2hlY2sgUUFNICovCi0JCS5zeW1ib2xfcmF0ZV9taW4gICAgPSAxMDc2MjAwMCwKLQkJLnN5bWJvbF9yYXRlX21heCAgICA9IDEwNzYyMDAwLAorCQkuc3ltYm9sX3JhdGVfbWluICAgID0gNTA1Njk0MSwJLyogUUFNIDY0ICovCisJCS5zeW1ib2xfcmF0ZV9tYXggICAgPSAxMDc2MjAwMCwJLyogVlNCIDggICovCiAJCS5jYXBzID0gRkVfQ0FOX1FBTV82NCB8IEZFX0NBTl9RQU1fMjU2IHwgRkVfQ0FOXzhWU0IKIAl9LAogCS5pbml0ICAgICAgICAgICAgICAgICA9IGxnZHQzMzB4X2luaXQsCkBAIC03NjcsOSArNzc4LDggQEAKIAkJLmZyZXF1ZW5jeV9taW49IDU0MDAwMDAwLAogCQkuZnJlcXVlbmN5X21heD0gODU4MDAwMDAwLAogCQkuZnJlcXVlbmN5X3N0ZXBzaXplPSA2MjUwMCwKLQkJLyogU3ltYm9sIHJhdGUgaXMgZm9yIGFsbCBWU0IgbW9kZXMgbmVlZCB0byBjaGVjayBRQU0gKi8KLQkJLnN5bWJvbF9yYXRlX21pbiAgICA9IDEwNzYyMDAwLAotCQkuc3ltYm9sX3JhdGVfbWF4ICAgID0gMTA3NjIwMDAsCisJCS5zeW1ib2xfcmF0ZV9taW4gICAgPSA1MDU2OTQxLAkvKiBRQU0gNjQgKi8KKwkJLnN5bWJvbF9yYXRlX21heCAgICA9IDEwNzYyMDAwLAkvKiBWU0IgOCAgKi8KIAkJLmNhcHMgPSBGRV9DQU5fUUFNXzY0IHwgRkVfQ0FOX1FBTV8yNTYgfCBGRV9DQU5fOFZTQgogCX0sCiAJLmluaXQgICAgICAgICAgICAgICAgID0gbGdkdDMzMHhfaW5pdCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sZ2R0MzMweC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xnZHQzMzB4LmgKaW5kZXggZTIwOWJhMS4uMmE2NTI5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xnZHQzMzB4LmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xnZHQzMzB4LmgKQEAgLTQ3LDYgKzQ3LDEwIEBACiAKIAkvKiBOZWVkIHRvIHNldCBkZXZpY2UgcGFyYW0gZm9yIHN0YXJ0X2RtYSAqLwogCWludCAoKnNldF90c19wYXJhbXMpKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBpbnQgaXNfcHVuY3R1cmVkKTsKKworCS8qIEZsaXAgdGhlIHBvbGFyaXR5IG9mIHRoZSBtcGVnIGRhdGEgdHJhbnNmZXIgY2xvY2sgdXNpbmcgYWx0ZXJuYXRlIGluaXQgZGF0YQorCSAqIFRoaXMgb3B0aW9uIGFwcGxpZXMgT05MWSB0byBMR0RUMzMwMyAtIDA6ZGlzYWJsZWQgKGRlZmF1bHQpIDE6ZW5hYmxlZCAqLworCWludCBjbG9ja19wb2xhcml0eV9mbGlwOwogfTsKIAogZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQqIGxnZHQzMzB4X2F0dGFjaChjb25zdCBzdHJ1Y3QgbGdkdDMzMHhfY29uZmlnKiBjb25maWcsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbnh0MjAweC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL254dDIwMHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWQwOTMzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL254dDIwMHguYwpAQCAtMCwwICsxLDEyMDUgQEAKKy8qCisgKiAgICBTdXBwb3J0IGZvciBOWFQyMDAyIGFuZCBOWFQyMDA0IC0gVlNCL1FBTQorICoKKyAqICAgIENvcHlyaWdodCAoQykgMjAwNSBLaXJrIExhcHJheSAoa2lyay5sYXByYXlAZ21haWwuY29tKQorICogICAgYmFzZWQgb24gbnh0MjAwMiBieSBUYXlsb3IgSmFjb2IgPHJ0amFjb2JAZWFydGhsaW5rLm5ldD4KKyAqICAgIGFuZCBueHQyMDA0IGJ5IEplYW4tRnJhbmNvaXMgVGhpYmVydCAoamVhbmZyYW5jb2lzQHNhZ2V0di5jb20pCisgKgorICogICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorKi8KKworLyoKKyAqICAgICAgICAgICAgICAgICAgICAgIE5PVEVTIEFCT1VUIFRISVMgRFJJVkVSCisgKgorICogVGhpcyBMaW51eCBkcml2ZXIgc3VwcG9ydHM6CisgKiAgIEIyQzIvQkJUSSBUZWNobmlzYXQgQWlyMlBDIC0gQVRTQyAoTlhUMjAwMikKKyAqICAgQXZlclRWSEQgTUNFIEExODAgKE5YVDIwMDQpCisgKiAgIEFUSSBIRFRWIFdvbmRlciAoTlhUMjAwNCkKKyAqCisgKiBUaGlzIGRyaXZlciBuZWVkcyBleHRlcm5hbCBmaXJtd2FyZS4gUGxlYXNlIHVzZSB0aGUgY29tbWFuZAorICogIjxrZXJuZWxkaXI+L0RvY3VtZW50YXRpb24vZHZiL2dldF9kdmJfZmlybXdhcmUgbnh0MjAwMiIgb3IKKyAqICI8a2VybmVsZGlyPi9Eb2N1bWVudGF0aW9uL2R2Yi9nZXRfZHZiX2Zpcm13YXJlIG54dDIwMDQiIHRvCisgKiBkb3dubG9hZC9leHRyYWN0IHRoZSBhcHByb3ByaWF0ZSBmaXJtd2FyZSwgYW5kIHRoZW4gY29weSBpdCB0bworICogL3Vzci9saWIvaG90cGx1Zy9maXJtd2FyZS8gb3IgL2xpYi9maXJtd2FyZS8KKyAqIChkZXBlbmRpbmcgb24gY29uZmlndXJhdGlvbiBvZiBmaXJtd2FyZSBob3RwbHVnKS4KKyAqLworI2RlZmluZSBOWFQyMDAyX0RFRkFVTFRfRklSTVdBUkUgImR2Yi1mZS1ueHQyMDAyLmZ3IgorI2RlZmluZSBOWFQyMDA0X0RFRkFVTFRfRklSTVdBUkUgImR2Yi1mZS1ueHQyMDA0LmZ3IgorI2RlZmluZSBDUkNfQ0NJVF9NQVNLIDB4MTAyMQorCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisKKyNpbmNsdWRlICJkdmJfZnJvbnRlbmQuaCIKKyNpbmNsdWRlICJkdmItcGxsLmgiCisjaW5jbHVkZSAibnh0MjAweC5oIgorCitzdHJ1Y3Qgbnh0MjAweF9zdGF0ZSB7CisKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIqIGkyYzsKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcyBvcHM7CisJY29uc3Qgc3RydWN0IG54dDIwMHhfY29uZmlnKiBjb25maWc7CisJc3RydWN0IGR2Yl9mcm9udGVuZCBmcm9udGVuZDsKKworCS8qIGRlbW9kdWxhdG9yIHByaXZhdGUgZGF0YSAqLworCW54dF9jaGlwX3R5cGUgZGVtb2RfY2hpcDsKKwl1OCBpbml0aWFsaXNlZDoxOworfTsKKworc3RhdGljIGludCBkZWJ1ZzsKKyNkZWZpbmUgZHByaW50ayhhcmdzLi4uKSBcCisJZG8geyBcCisJCWlmIChkZWJ1ZykgcHJpbnRrKEtFUk5fREVCVUcgIm54dDIwMHg6ICIgYXJncyk7IFwKKwl9IHdoaWxlICgwKQorCitzdGF0aWMgaW50IGkyY193cml0ZWJ5dGVzIChzdHJ1Y3Qgbnh0MjAweF9zdGF0ZSogc3RhdGUsIHU4IGFkZHIsIHU4ICpidWYsIHU4IGxlbikKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsgLmFkZHIgPSBhZGRyLCAuZmxhZ3MgPSAwLCAuYnVmID0gYnVmLCAubGVuID0gbGVuIH07CisKKwlpZiAoKGVyciA9IGkyY190cmFuc2ZlciAoc3RhdGUtPmkyYywgJm1zZywgMSkpICE9IDEpIHsKKwkJcHJpbnRrIChLRVJOX1dBUk5JTkcgIm54dDIwMHg6ICVzOiBpMmMgd3JpdGUgZXJyb3IgKGFkZHIgMHglMDJ4LCBlcnIgPT0gJWkpXG4iLAorCQkJX19GVU5DVElPTl9fLCBhZGRyLCBlcnIpOworCQlyZXR1cm4gLUVSRU1PVEVJTzsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1OCBpMmNfcmVhZGJ5dGVzIChzdHJ1Y3Qgbnh0MjAweF9zdGF0ZSogc3RhdGUsIHU4IGFkZHIsIHU4KiBidWYsIHU4IGxlbikKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsgLmFkZHIgPSBhZGRyLCAuZmxhZ3MgPSBJMkNfTV9SRCwgLmJ1ZiA9IGJ1ZiwgLmxlbiA9IGxlbiB9OworCisJaWYgKChlcnIgPSBpMmNfdHJhbnNmZXIgKHN0YXRlLT5pMmMsICZtc2csIDEpKSAhPSAxKSB7CisJCXByaW50ayAoS0VSTl9XQVJOSU5HICJueHQyMDB4OiAlczogaTJjIHJlYWQgZXJyb3IgKGFkZHIgMHglMDJ4LCBlcnIgPT0gJWkpXG4iLAorCQkJX19GVU5DVElPTl9fLCBhZGRyLCBlcnIpOworCQlyZXR1cm4gLUVSRU1PVEVJTzsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbnh0MjAweF93cml0ZWJ5dGVzIChzdHJ1Y3Qgbnh0MjAweF9zdGF0ZSogc3RhdGUsIHU4IHJlZywgdTggKmJ1ZiwgdTggbGVuKQoreworCXU4IGJ1ZjIgW2xlbisxXTsKKwlpbnQgZXJyOworCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsgLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzLCAuZmxhZ3MgPSAwLCAuYnVmID0gYnVmMiwgLmxlbiA9IGxlbiArIDEgfTsKKworCWJ1ZjJbMF0gPSByZWc7CisJbWVtY3B5KCZidWYyWzFdLCBidWYsIGxlbik7CisKKwlpZiAoKGVyciA9IGkyY190cmFuc2ZlciAoc3RhdGUtPmkyYywgJm1zZywgMSkpICE9IDEpIHsKKwkJcHJpbnRrIChLRVJOX1dBUk5JTkcgIm54dDIwMHg6ICVzOiBpMmMgd3JpdGUgZXJyb3IgKGFkZHIgMHglMDJ4LCBlcnIgPT0gJWkpXG4iLAorCQkJX19GVU5DVElPTl9fLCBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzLCBlcnIpOworCQlyZXR1cm4gLUVSRU1PVEVJTzsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1OCBueHQyMDB4X3JlYWRieXRlcyAoc3RydWN0IG54dDIwMHhfc3RhdGUqIHN0YXRlLCB1OCByZWcsIHU4KiBidWYsIHU4IGxlbikKK3sKKwl1OCByZWcyIFtdID0geyByZWcgfTsKKworCXN0cnVjdCBpMmNfbXNnIG1zZyBbXSA9IHsgeyAuYWRkciA9IHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3MsIC5mbGFncyA9IDAsIC5idWYgPSByZWcyLCAubGVuID0gMSB9LAorCQkJeyAuYWRkciA9IHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3MsIC5mbGFncyA9IEkyQ19NX1JELCAuYnVmID0gYnVmLCAubGVuID0gbGVuIH0gfTsKKworCWludCBlcnI7CisKKwlpZiAoKGVyciA9IGkyY190cmFuc2ZlciAoc3RhdGUtPmkyYywgbXNnLCAyKSkgIT0gMikgeworCQlwcmludGsgKEtFUk5fV0FSTklORyAibnh0MjAweDogJXM6IGkyYyByZWFkIGVycm9yIChhZGRyIDB4JTAyeCwgZXJyID09ICVpKVxuIiwKKwkJCV9fRlVOQ1RJT05fXywgc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzcywgZXJyKTsKKwkJcmV0dXJuIC1FUkVNT1RFSU87CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdTE2IG54dDIwMHhfY3JjKHUxNiBjcmMsIHU4IGMpCit7CisJdTggaTsKKwl1MTYgaW5wdXQgPSAodTE2KSBjICYgMHhGRjsKKworCWlucHV0PDw9ODsKKwlmb3IoaT0wOyBpPDg7IGkrKykgeworCQlpZigoY3JjXmlucHV0KSAmIDB4ODAwMCkKKwkJCWNyYz0oY3JjPDwxKV5DUkNfQ0NJVF9NQVNLOworCQllbHNlCisJCQljcmM8PD0xOworCQlpbnB1dDw8PTE7CisJfQorCXJldHVybiBjcmM7Cit9CisKK3N0YXRpYyBpbnQgbnh0MjAweF93cml0ZXJlZ19tdWx0aWJ5dGUgKHN0cnVjdCBueHQyMDB4X3N0YXRlKiBzdGF0ZSwgdTggcmVnLCB1OCogZGF0YSwgdTggbGVuKQoreworCXU4IGF0dHIsIGxlbjIsIGJ1ZjsKKwlkcHJpbnRrKCIlc1xuIiwgX19GVU5DVElPTl9fKTsKKworCS8qIHNldCBtdXRsaSByZWdpc3RlciByZWdpc3RlciAqLworCW54dDIwMHhfd3JpdGVieXRlcyhzdGF0ZSwgMHgzNSwgJnJlZywgMSk7CisKKwkvKiBzZW5kIHRoZSBhY3R1YWwgZGF0YSAqLworCW54dDIwMHhfd3JpdGVieXRlcyhzdGF0ZSwgMHgzNiwgZGF0YSwgbGVuKTsKKworCXN3aXRjaCAoc3RhdGUtPmRlbW9kX2NoaXApIHsKKwkJY2FzZSBOWFQyMDAyOgorCQkJbGVuMiA9IGxlbjsKKwkJCWJ1ZiA9IDB4MDI7CisJCQlicmVhazsKKwkJY2FzZSBOWFQyMDA0OgorCQkJLyogcHJvYmFibHkgbm90IHJpZ2h0LCBidXQgZ2l2ZXMgY29ycmVjdCB2YWx1ZXMgKi8KKwkJCWF0dHIgPSAweDAyOworCQkJaWYgKHJlZyAmIDB4ODApIHsKKwkJCQlhdHRyID0gYXR0ciA8PCAxOworCQkJCWlmIChyZWcgJiAweDA0KQorCQkJCQlhdHRyID0gYXR0ciA+PiAxOworCQkJfQorCQkJLyogc2V0IHdyaXRlIGJpdCAqLworCQkJbGVuMiA9ICgoYXR0ciA8PCA0KSB8IDB4MTApIHwgbGVuOworCQkJYnVmID0gMHg4MDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlicmVhazsKKwl9CisKKwkvKiBzZXQgbXVsdGkgcmVnaXN0ZXIgbGVuZ3RoICovCisJbnh0MjAweF93cml0ZWJ5dGVzKHN0YXRlLCAweDM0LCAmbGVuMiwgMSk7CisKKwkvKiB0b2dnbGUgdGhlIG11bHRpcmVnIHdyaXRlIGJpdCAqLworCW54dDIwMHhfd3JpdGVieXRlcyhzdGF0ZSwgMHgyMSwgJmJ1ZiwgMSk7CisKKwlueHQyMDB4X3JlYWRieXRlcyhzdGF0ZSwgMHgyMSwgJmJ1ZiwgMSk7CisKKwlzd2l0Y2ggKHN0YXRlLT5kZW1vZF9jaGlwKSB7CisJCWNhc2UgTlhUMjAwMjoKKwkJCWlmICgoYnVmICYgMHgwMikgPT0gMCkKKwkJCQlyZXR1cm4gMDsKKwkJCWJyZWFrOworCQljYXNlIE5YVDIwMDQ6CisJCQlpZiAoYnVmID09IDApCisJCQkJcmV0dXJuIDA7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOworCQkJYnJlYWs7CisJfQorCisJcHJpbnRrKEtFUk5fV0FSTklORyAibnh0MjAweDogRXJyb3Igd3JpdGluZyBtdWx0aXJlZyByZWdpc3RlciAweCUwMlhcbiIscmVnKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG54dDIwMHhfcmVhZHJlZ19tdWx0aWJ5dGUgKHN0cnVjdCBueHQyMDB4X3N0YXRlKiBzdGF0ZSwgdTggcmVnLCB1OCogZGF0YSwgdTggbGVuKQoreworCWludCBpOworCXU4IGJ1ZiwgbGVuMiwgYXR0cjsKKwlkcHJpbnRrKCIlc1xuIiwgX19GVU5DVElPTl9fKTsKKworCS8qIHNldCBtdXRsaSByZWdpc3RlciByZWdpc3RlciAqLworCW54dDIwMHhfd3JpdGVieXRlcyhzdGF0ZSwgMHgzNSwgJnJlZywgMSk7CisKKwlzd2l0Y2ggKHN0YXRlLT5kZW1vZF9jaGlwKSB7CisJCWNhc2UgTlhUMjAwMjoKKwkJCS8qIHNldCBtdWx0aSByZWdpc3RlciBsZW5ndGggKi8KKwkJCWxlbjIgPSBsZW4gJiAweDgwOworCQkJbnh0MjAweF93cml0ZWJ5dGVzKHN0YXRlLCAweDM0LCAmbGVuMiwgMSk7CisKKwkJCS8qIHJlYWQgdGhlIGFjdHVhbCBkYXRhICovCisJCQlueHQyMDB4X3JlYWRieXRlcyhzdGF0ZSwgcmVnLCBkYXRhLCBsZW4pOworCQkJcmV0dXJuIDA7CisJCQlicmVhazsKKwkJY2FzZSBOWFQyMDA0OgorCQkJLyogcHJvYmFibHkgbm90IHJpZ2h0LCBidXQgZ2l2ZXMgY29ycmVjdCB2YWx1ZXMgKi8KKwkJCWF0dHIgPSAweDAyOworCQkJaWYgKHJlZyAmIDB4ODApIHsKKwkJCQlhdHRyID0gYXR0ciA8PCAxOworCQkJCWlmIChyZWcgJiAweDA0KQorCQkJCQlhdHRyID0gYXR0ciA+PiAxOworCQkJfQorCisJCQkvKiBzZXQgbXVsdGkgcmVnaXN0ZXIgbGVuZ3RoICovCisJCQlsZW4yID0gKGF0dHIgPDwgNCkgfCBsZW47CisJCQlueHQyMDB4X3dyaXRlYnl0ZXMoc3RhdGUsIDB4MzQsICZsZW4yLCAxKTsKKworCQkJLyogdG9nZ2xlIHRoZSBtdWx0aXJlZyBiaXQqLworCQkJYnVmID0gMHg4MDsKKwkJCW54dDIwMHhfd3JpdGVieXRlcyhzdGF0ZSwgMHgyMSwgJmJ1ZiwgMSk7CisKKwkJCS8qIHJlYWQgdGhlIGFjdHVhbCBkYXRhICovCisJCQlmb3IoaSA9IDA7IGkgPCBsZW47IGkrKykgeworCQkJCW54dDIwMHhfcmVhZGJ5dGVzKHN0YXRlLCAweDM2ICsgaSwgJmRhdGFbaV0sIDEpOworCQkJfQorCQkJcmV0dXJuIDA7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOworCQkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBueHQyMDB4X21pY3JvY29udHJvbGxlcl9zdG9wIChzdHJ1Y3Qgbnh0MjAweF9zdGF0ZSogc3RhdGUpCit7CisJdTggYnVmLCBzdG9wdmFsLCBjb3VudGVyID0gMDsKKwlkcHJpbnRrKCIlc1xuIiwgX19GVU5DVElPTl9fKTsKKworCS8qIHNldCBjb3JyZWN0IHN0b3AgdmFsdWUgKi8KKwlzd2l0Y2ggKHN0YXRlLT5kZW1vZF9jaGlwKSB7CisJCWNhc2UgTlhUMjAwMjoKKwkJCXN0b3B2YWwgPSAweDQwOworCQkJYnJlYWs7CisJCWNhc2UgTlhUMjAwNDoKKwkJCXN0b3B2YWwgPSAweDEwOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlzdG9wdmFsID0gMDsKKwkJCWJyZWFrOworCX0KKworCWJ1ZiA9IDB4ODA7CisJbnh0MjAweF93cml0ZWJ5dGVzKHN0YXRlLCAweDIyLCAmYnVmLCAxKTsKKworCXdoaWxlIChjb3VudGVyIDwgMjApIHsKKwkJbnh0MjAweF9yZWFkYnl0ZXMoc3RhdGUsIDB4MzEsICZidWYsIDEpOworCQlpZiAoYnVmICYgc3RvcHZhbCkKKwkJCXJldHVybjsKKwkJbXNsZWVwKDEwKTsKKwkJY291bnRlcisrOworCX0KKworCXByaW50ayhLRVJOX1dBUk5JTkcgIm54dDIwMHg6IFRpbWVvdXQgd2FpdGluZyBmb3Igbnh0MjAweCB0byBzdG9wLiBUaGlzIGlzIG9rIGFmdGVyIGZpcm13YXJlIHVwbG9hZC5cbiIpOworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgbnh0MjAweF9taWNyb2NvbnRyb2xsZXJfc3RhcnQgKHN0cnVjdCBueHQyMDB4X3N0YXRlKiBzdGF0ZSkKK3sKKwl1OCBidWY7CisJZHByaW50aygiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwlidWYgPSAweDAwOworCW54dDIwMHhfd3JpdGVieXRlcyhzdGF0ZSwgMHgyMiwgJmJ1ZiwgMSk7Cit9CisKK3N0YXRpYyB2b2lkIG54dDIwMDRfbWljcm9jb250cm9sbGVyX2luaXQgKHN0cnVjdCBueHQyMDB4X3N0YXRlKiBzdGF0ZSkKK3sKKwl1OCBidWZbOV07CisJdTggY291bnRlciA9IDA7CisJZHByaW50aygiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwlidWZbMF0gPSAweDAwOworCW54dDIwMHhfd3JpdGVieXRlcyhzdGF0ZSwgMHgyYiwgYnVmLCAxKTsKKwlidWZbMF0gPSAweDcwOworCW54dDIwMHhfd3JpdGVieXRlcyhzdGF0ZSwgMHgzNCwgYnVmLCAxKTsKKwlidWZbMF0gPSAweDA0OworCW54dDIwMHhfd3JpdGVieXRlcyhzdGF0ZSwgMHgzNSwgYnVmLCAxKTsKKwlidWZbMF0gPSAweDAxOyBidWZbMV0gPSAweDIzOyBidWZbMl0gPSAweDQ1OyBidWZbM10gPSAweDY3OyBidWZbNF0gPSAweDg5OworCWJ1Zls1XSA9IDB4QUI7IGJ1Zls2XSA9IDB4Q0Q7IGJ1Zls3XSA9IDB4RUY7IGJ1Zls4XSA9IDB4QzA7CisJbnh0MjAweF93cml0ZWJ5dGVzKHN0YXRlLCAweDM2LCBidWYsIDkpOworCWJ1ZlswXSA9IDB4ODA7CisJbnh0MjAweF93cml0ZWJ5dGVzKHN0YXRlLCAweDIxLCBidWYsIDEpOworCisJd2hpbGUgKGNvdW50ZXIgPCAyMCkgeworCQlueHQyMDB4X3JlYWRieXRlcyhzdGF0ZSwgMHgyMSwgYnVmLCAxKTsKKwkJaWYgKGJ1ZlswXSA9PSAwKQorCQkJcmV0dXJuOworCQltc2xlZXAoMTApOworCQljb3VudGVyKys7CisJfQorCisJcHJpbnRrKEtFUk5fV0FSTklORyAibnh0MjAweDogVGltZW91dCB3YWl0aW5nIGZvciBueHQyMDA0IHRvIGluaXQuXG4iKTsKKworCXJldHVybjsKK30KKworc3RhdGljIGludCBueHQyMDB4X3dyaXRldHVuZXIgKHN0cnVjdCBueHQyMDB4X3N0YXRlKiBzdGF0ZSwgdTgqIGRhdGEpCit7CisJdTggYnVmLCBjb3VudCA9IDA7CisKKwlkcHJpbnRrKCIlc1xuIiwgX19GVU5DVElPTl9fKTsKKworCWRwcmludGsoIlR1bmVyIEJ5dGVzOiAlMDJYICUwMlggJTAyWCAlMDJYXG4iLCBkYXRhWzBdLCBkYXRhWzFdLCBkYXRhWzJdLCBkYXRhWzNdKTsKKworCS8qIGlmIE5YVDIwMDQsIHdyaXRlIGRpcmVjdGx5IHRvIHR1bmVyLiBpZiBOWFQyMDAyLCB3cml0ZSB0aHJvdWdoIE5YVCBjaGlwLgorCSAqIGRpcmVjdCB3cml0ZSBpcyByZXF1aXJlZCBmb3IgUGhpbGlwcyBUVVYxMjM2RCBhbmQgQUxQUyBUREhVMiAqLworCXN3aXRjaCAoc3RhdGUtPmRlbW9kX2NoaXApIHsKKwkJY2FzZSBOWFQyMDA0OgorCQkJaWYgKGkyY193cml0ZWJ5dGVzKHN0YXRlLCBzdGF0ZS0+Y29uZmlnLT5wbGxfYWRkcmVzcywgZGF0YSwgNCkpCisJICAgICAgICAJICAgICAgICBwcmludGsoS0VSTl9XQVJOSU5HICJueHQyMDB4OiBlcnJvciB3cml0aW5nIHRvIHR1bmVyXG4iKTsKKwkJCS8qIHdhaXQgdW50aWwgd2UgaGF2ZSBhIGxvY2sgKi8KKwkJCXdoaWxlIChjb3VudCA8IDIwKSB7CisJCQkJaTJjX3JlYWRieXRlcyhzdGF0ZSwgc3RhdGUtPmNvbmZpZy0+cGxsX2FkZHJlc3MsICZidWYsIDEpOworCQkJCWlmIChidWYgJiAweDQwKQorCQkJCQlyZXR1cm4gMDsKKwkJCQltc2xlZXAoMTAwKTsKKwkJCQljb3VudCsrOworCQkJfQorCQkJcHJpbnRrKCJueHQyMDA0OiB0aW1lb3V0IHdhaXRpbmcgZm9yIHR1bmVyIGxvY2tcbiIpOworCQkJYnJlYWs7CisJCWNhc2UgTlhUMjAwMjoKKwkJCS8qIHNldCB0aGUgaTJjIHRyYW5zZmVyIHNwZWVkIHRvIHRoZSB0dW5lciAqLworCQkJYnVmID0gMHgwMzsKKwkJCW54dDIwMHhfd3JpdGVieXRlcyhzdGF0ZSwgMHgyMCwgJmJ1ZiwgMSk7CisKKwkJCS8qIHNldHVwIHRvIHRyYW5zZmVyIDQgYnl0ZXMgdmlhIGkyYyAqLworCQkJYnVmID0gMHgwNDsKKwkJCW54dDIwMHhfd3JpdGVieXRlcyhzdGF0ZSwgMHgzNCwgJmJ1ZiwgMSk7CisKKwkJCS8qIHdyaXRlIGFjdHVhbCB0dW5lciBieXRlcyAqLworCQkJbnh0MjAweF93cml0ZWJ5dGVzKHN0YXRlLCAweDM2LCBkYXRhLCA0KTsKKworCQkJLyogc2V0IHR1bmVyIGkyYyBhZGRyZXNzICovCisJCQlidWYgPSBzdGF0ZS0+Y29uZmlnLT5wbGxfYWRkcmVzczsKKwkJCW54dDIwMHhfd3JpdGVieXRlcyhzdGF0ZSwgMHgzNSwgJmJ1ZiwgMSk7CisKKwkJCS8qIHdyaXRlIFVDIE9wbW9kZSB0byBiZWdpbiB0cmFuc2ZlciAqLworCQkJYnVmID0gMHg4MDsKKwkJCW54dDIwMHhfd3JpdGVieXRlcyhzdGF0ZSwgMHgyMSwgJmJ1ZiwgMSk7CisKKwkJCXdoaWxlIChjb3VudCA8IDIwKSB7CisJCQkJbnh0MjAweF9yZWFkYnl0ZXMoc3RhdGUsIDB4MjEsICZidWYsIDEpOworCQkJCWlmICgoYnVmICYgMHg4MCk9PSAweDAwKQorCQkJCQlyZXR1cm4gMDsKKwkJCQltc2xlZXAoMTAwKTsKKwkJCQljb3VudCsrOworCQkJfQorCQkJcHJpbnRrKCJueHQyMDAyOiB0aW1lb3V0IGVycm9yIHdyaXRpbmcgdHVuZXJcbiIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbnh0MjAweF9hZ2NfcmVzZXQoc3RydWN0IG54dDIwMHhfc3RhdGUqIHN0YXRlKQoreworCXU4IGJ1ZjsKKwlkcHJpbnRrKCIlc1xuIiwgX19GVU5DVElPTl9fKTsKKworCXN3aXRjaCAoc3RhdGUtPmRlbW9kX2NoaXApIHsKKwkJY2FzZSBOWFQyMDAyOgorCQkJYnVmID0gMHgwODsKKwkJCW54dDIwMHhfd3JpdGVieXRlcyhzdGF0ZSwgMHgwOCwgJmJ1ZiwgMSk7CisJCQlidWYgPSAweDAwOworCQkJbnh0MjAweF93cml0ZWJ5dGVzKHN0YXRlLCAweDA4LCAmYnVmLCAxKTsKKwkJCWJyZWFrOworCQljYXNlIE5YVDIwMDQ6CisJCQlueHQyMDB4X3JlYWRyZWdfbXVsdGlieXRlKHN0YXRlLCAweDA4LCAmYnVmLCAxKTsKKwkJCWJ1ZiA9IDB4MDg7CisJCQlueHQyMDB4X3dyaXRlcmVnX211bHRpYnl0ZShzdGF0ZSwgMHgwOCwgJmJ1ZiwgMSk7CisJCQlidWYgPSAweDAwOworCQkJbnh0MjAweF93cml0ZXJlZ19tdWx0aWJ5dGUoc3RhdGUsIDB4MDgsICZidWYsIDEpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwl9CisJcmV0dXJuOworfQorCitzdGF0aWMgaW50IG54dDIwMDJfbG9hZF9maXJtd2FyZSAoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpCit7CisKKwlzdHJ1Y3Qgbnh0MjAweF9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwl1OCBidWZbM10sIHdyaXR0ZW4gPSAwLCBjaHVua3BvcyA9IDA7CisJdTE2IHJhbWJhc2UsIHBvc2l0aW9uLCBjcmMgPSAwOworCisJZHByaW50aygiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisJZHByaW50aygiRmlybXdhcmUgaXMgJXp1IGJ5dGVzXG4iLCBmdy0+c2l6ZSk7CisKKwkvKiBHZXQgdGhlIFJBTSBiYXNlIGZvciB0aGlzIG54dDIwMDIgKi8KKwlueHQyMDB4X3JlYWRieXRlcyhzdGF0ZSwgMHgxMCwgYnVmLCAxKTsKKworCWlmIChidWZbMF0gJiAweDEwKQorCQlyYW1iYXNlID0gMHgxMDAwOworCWVsc2UKKwkJcmFtYmFzZSA9IDB4MDAwMDsKKworCWRwcmludGsoInJhbWJhc2Ugb24gdGhpcyBueHQyMDAyIGlzICUwNFhcbiIsIHJhbWJhc2UpOworCisJLyogSG9sZCB0aGUgbWljcm8gaW4gcmVzZXQgd2hpbGUgbG9hZGluZyBmaXJtd2FyZSAqLworCWJ1ZlswXSA9IDB4ODA7CisJbnh0MjAweF93cml0ZWJ5dGVzKHN0YXRlLCAweDJCLCBidWYsIDEpOworCisJZm9yIChwb3NpdGlvbiA9IDA7IHBvc2l0aW9uIDwgZnctPnNpemU7IHBvc2l0aW9uKyspIHsKKwkJaWYgKHdyaXR0ZW4gPT0gMCkgeworCQkJY3JjID0gMDsKKwkJCWNodW5rcG9zID0gMHgyODsKKwkJCWJ1ZlswXSA9ICgocmFtYmFzZSArIHBvc2l0aW9uKSA+PiA4KTsKKwkJCWJ1ZlsxXSA9IChyYW1iYXNlICsgcG9zaXRpb24pICYgMHhGRjsKKwkJCWJ1ZlsyXSA9IDB4ODE7CisJCQkvKiB3cml0ZSBzdGFydGluZyBhZGRyZXNzICovCisJCQlueHQyMDB4X3dyaXRlYnl0ZXMoc3RhdGUsIDB4MjksIGJ1ZiwgMyk7CisJCX0KKwkJd3JpdHRlbisrOworCQljaHVua3BvcysrOworCisJCWlmICgod3JpdHRlbiAlIDQpID09IDApCisJCQlueHQyMDB4X3dyaXRlYnl0ZXMoc3RhdGUsIGNodW5rcG9zLCAmZnctPmRhdGFbcG9zaXRpb24tM10sIDQpOworCisJCWNyYyA9IG54dDIwMHhfY3JjKGNyYywgZnctPmRhdGFbcG9zaXRpb25dKTsKKworCQlpZiAoKHdyaXR0ZW4gPT0gMjU1KSB8fCAocG9zaXRpb24rMSA9PSBmdy0+c2l6ZSkpIHsKKwkJCS8qIHdyaXRlIHJlbWFpbmluZyBieXRlcyBvZiBmaXJtd2FyZSAqLworCQkJbnh0MjAweF93cml0ZWJ5dGVzKHN0YXRlLCBjaHVua3Bvcys0LSh3cml0dGVuICU0KSwKKwkJCQkmZnctPmRhdGFbcG9zaXRpb24tKHdyaXR0ZW4gJTQpICsgMV0sCisJCQkJd3JpdHRlbiAlNCk7CisJCQlidWZbMF0gPSBjcmMgPDwgODsKKwkJCWJ1ZlsxXSA9IGNyYyAmIDB4RkY7CisKKwkJCS8qIHdyaXRlIGNyYyAqLworCQkJbnh0MjAweF93cml0ZWJ5dGVzKHN0YXRlLCAweDJDLCBidWYsIDIpOworCisJCQkvKiBkbyBhIHJlYWQgdG8gc3RvcCB0aGluZ3MgKi8KKwkJCW54dDIwMHhfcmVhZGJ5dGVzKHN0YXRlLCAweDJBLCBidWYsIDEpOworCisJCQkvKiBzZXQgdHJhbnNmZXIgbW9kZSB0byBjb21wbGV0ZSAqLworCQkJYnVmWzBdID0gMHg4MDsKKwkJCW54dDIwMHhfd3JpdGVieXRlcyhzdGF0ZSwgMHgyQiwgYnVmLCAxKTsKKworCQkJd3JpdHRlbiA9IDA7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK307CisKK3N0YXRpYyBpbnQgbnh0MjAwNF9sb2FkX2Zpcm13YXJlIChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdykKK3sKKworCXN0cnVjdCBueHQyMDB4X3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXU4IGJ1ZlszXTsKKwl1MTYgcmFtYmFzZSwgcG9zaXRpb24sIGNyYz0wOworCisJZHByaW50aygiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisJZHByaW50aygiRmlybXdhcmUgaXMgJXp1IGJ5dGVzXG4iLCBmdy0+c2l6ZSk7CisKKwkvKiBzZXQgcmFtYmFzZSAqLworCXJhbWJhc2UgPSAweDEwMDA7CisKKwkvKiBob2xkIHRoZSBtaWNybyBpbiByZXNldCB3aGlsZSBsb2FkaW5nIGZpcm13YXJlICovCisJYnVmWzBdID0gMHg4MDsKKwlueHQyMDB4X3dyaXRlYnl0ZXMoc3RhdGUsIDB4MkIsIGJ1ZiwxKTsKKworCS8qIGNhbGN1bGF0ZSBmaXJtd2FyZSBDUkMgKi8KKwlmb3IgKHBvc2l0aW9uID0gMDsgcG9zaXRpb24gPCBmdy0+c2l6ZTsgcG9zaXRpb24rKykgeworCSAgICAgICAgY3JjID0gbnh0MjAweF9jcmMoY3JjLCBmdy0+ZGF0YVtwb3NpdGlvbl0pOworCX0KKworCWJ1ZlswXSA9IHJhbWJhc2UgPj4gODsKKwlidWZbMV0gPSByYW1iYXNlICYgMHhGRjsKKwlidWZbMl0gPSAweDgxOworCS8qIHdyaXRlIHN0YXJ0aW5nIGFkZHJlc3MgKi8KKwlueHQyMDB4X3dyaXRlYnl0ZXMoc3RhdGUsMHgyOSxidWYsMyk7CisKKwlmb3IgKHBvc2l0aW9uID0gMDsgcG9zaXRpb24gPCBmdy0+c2l6ZTspIHsKKwkJbnh0MjAweF93cml0ZWJ5dGVzKHN0YXRlLCAweDJDLCAmZnctPmRhdGFbcG9zaXRpb25dLAorCQkJZnctPnNpemUtcG9zaXRpb24gPiAyNTUgPyAyNTUgOiBmdy0+c2l6ZS1wb3NpdGlvbik7CisJCXBvc2l0aW9uICs9IChmdy0+c2l6ZS1wb3NpdGlvbiA+IDI1NSA/IDI1NSA6IGZ3LT5zaXplLXBvc2l0aW9uKTsKKwl9CisJYnVmWzBdID0gY3JjID4+IDg7CisJYnVmWzFdID0gY3JjICYgMHhGRjsKKworCWRwcmludGsoImZpcm13YXJlIGNyYyBpcyAweCUwMlggMHglMDJYXG4iLCBidWZbMF0sIGJ1ZlsxXSk7CisKKwkvKiB3cml0ZSBjcmMgKi8KKwlueHQyMDB4X3dyaXRlYnl0ZXMoc3RhdGUsIDB4MkMsIGJ1ZiwyKTsKKworCS8qIGRvIGEgcmVhZCB0byBzdG9wIHRoaW5ncyAqLworCW54dDIwMHhfcmVhZGJ5dGVzKHN0YXRlLCAweDJDLCBidWYsIDEpOworCisJLyogc2V0IHRyYW5zZmVyIG1vZGUgdG8gY29tcGxldGUgKi8KKwlidWZbMF0gPSAweDgwOworCW54dDIwMHhfd3JpdGVieXRlcyhzdGF0ZSwgMHgyQiwgYnVmLDEpOworCisJcmV0dXJuIDA7Cit9OworCitzdGF0aWMgaW50IG54dDIwMHhfc2V0dXBfZnJvbnRlbmRfcGFyYW1ldGVycyAoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsCisJCQkJCSAgICAgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwKQoreworCXN0cnVjdCBueHQyMDB4X3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXU4IGJ1Zls0XTsKKworCS8qIHN0b3AgdGhlIG1pY3JvIGZpcnN0ICovCisJbnh0MjAweF9taWNyb2NvbnRyb2xsZXJfc3RvcChzdGF0ZSk7CisKKwlpZiAoc3RhdGUtPmRlbW9kX2NoaXAgPT0gTlhUMjAwNCkgeworCQkvKiBtYWtlIHN1cmUgZGVtb2QgaXMgc2V0IHRvIGRpZ2l0YWwgKi8KKwkJYnVmWzBdID0gMHgwNDsKKwkJbnh0MjAweF93cml0ZWJ5dGVzKHN0YXRlLCAweDE0LCBidWYsIDEpOworCQlidWZbMF0gPSAweDAwOworCQlueHQyMDB4X3dyaXRlYnl0ZXMoc3RhdGUsIDB4MTcsIGJ1ZiwgMSk7CisJfQorCisJLyogZ2V0IHR1bmluZyBpbmZvcm1hdGlvbiAqLworCWR2Yl9wbGxfY29uZmlndXJlKHN0YXRlLT5jb25maWctPnBsbF9kZXNjLCBidWYsIHAtPmZyZXF1ZW5jeSwgMCk7CisKKwkvKiBzZXQgYWRkaXRpb25hbCBwYXJhbXMgKi8KKwlzd2l0Y2ggKHAtPnUudnNiLm1vZHVsYXRpb24pIHsKKwkJY2FzZSBRQU1fNjQ6CisJCWNhc2UgUUFNXzI1NjoKKwkJCS8qIFNldCBwdW5jdHVyZWQgY2xvY2sgZm9yIFFBTSAqLworCQkJLyogVGhpcyBpcyBqdXN0IGEgZ3Vlc3Mgc2luY2UgSSBhbSB1bmFibGUgdG8gdGVzdCBpdCAqLworCQkJaWYgKHN0YXRlLT5jb25maWctPnNldF90c19wYXJhbXMpCisJCQkJc3RhdGUtPmNvbmZpZy0+c2V0X3RzX3BhcmFtcyhmZSwgMSk7CisKKwkJCS8qIHNldCBpbnB1dCAqLworCQkJaWYgKHN0YXRlLT5jb25maWctPnNldF9wbGxfaW5wdXQpCisJCQkJc3RhdGUtPmNvbmZpZy0+c2V0X3BsbF9pbnB1dChidWYsIDEpOworCQkJYnJlYWs7CisJCWNhc2UgVlNCXzg6CisJCQkvKiBTZXQgbm9uLXB1bmN0dXJlZCBjbG9jayBmb3IgVlNCICovCisJCQlpZiAoc3RhdGUtPmNvbmZpZy0+c2V0X3RzX3BhcmFtcykKKwkJCQlzdGF0ZS0+Y29uZmlnLT5zZXRfdHNfcGFyYW1zKGZlLCAwKTsKKworCQkJLyogc2V0IGlucHV0ICovCisJCQlpZiAoc3RhdGUtPmNvbmZpZy0+c2V0X3BsbF9pbnB1dCkKKwkJCQlzdGF0ZS0+Y29uZmlnLT5zZXRfcGxsX2lucHV0KGJ1ZiwgMCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOworCQkJYnJlYWs7CisJfQorCisJLyogd3JpdGUgZnJlcXVlbmN5IGluZm9ybWF0aW9uICovCisJbnh0MjAweF93cml0ZXR1bmVyKHN0YXRlLCBidWYpOworCisJLyogcmVzZXQgdGhlIGFnYyBub3cgdGhhdCB0dW5pbmcgaGFzIGJlZW4gY29tcGxldGVkICovCisJbnh0MjAweF9hZ2NfcmVzZXQoc3RhdGUpOworCisJLyogc2V0IHRhcmdldCBwb3dlciBsZXZlbCAqLworCXN3aXRjaCAocC0+dS52c2IubW9kdWxhdGlvbikgeworCQljYXNlIFFBTV82NDoKKwkJY2FzZSBRQU1fMjU2OgorCQkJYnVmWzBdID0gMHg3NDsKKwkJCWJyZWFrOworCQljYXNlIFZTQl84OgorCQkJYnVmWzBdID0gMHg3MDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlicmVhazsKKwl9CisJbnh0MjAweF93cml0ZWJ5dGVzKHN0YXRlLCAweDQyLCBidWYsIDEpOworCisJLyogY29uZmlndXJlIHNkbSAqLworCXN3aXRjaCAoc3RhdGUtPmRlbW9kX2NoaXApIHsKKwkJY2FzZSBOWFQyMDAyOgorCQkJYnVmWzBdID0gMHg4NzsKKwkJCWJyZWFrOworCQljYXNlIE5YVDIwMDQ6CisJCQlidWZbMF0gPSAweDA3OworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWJyZWFrOworCX0KKwlueHQyMDB4X3dyaXRlYnl0ZXMoc3RhdGUsIDB4NTcsIGJ1ZiwgMSk7CisKKwkvKiB3cml0ZSBzZG0xIGlucHV0ICovCisJYnVmWzBdID0gMHgxMDsKKwlidWZbMV0gPSAweDAwOworCW54dDIwMHhfd3JpdGVieXRlcyhzdGF0ZSwgMHg1OCwgYnVmLCAyKTsKKworCS8qIHdyaXRlIHNkbXggaW5wdXQgKi8KKwlzd2l0Y2ggKHAtPnUudnNiLm1vZHVsYXRpb24pIHsKKwkJY2FzZSBRQU1fNjQ6CisJCQkJYnVmWzBdID0gMHg2ODsKKwkJCQlicmVhazsKKwkJY2FzZSBRQU1fMjU2OgorCQkJCWJ1ZlswXSA9IDB4NjQ7CisJCQkJYnJlYWs7CisJCWNhc2UgVlNCXzg6CisJCQkJYnVmWzBdID0gMHg2MDsKKwkJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCQlicmVhazsKKwl9CisJYnVmWzFdID0gMHgwMDsKKwlueHQyMDB4X3dyaXRlYnl0ZXMoc3RhdGUsIDB4NUMsIGJ1ZiwgMik7CisKKwkvKiB3cml0ZSBhZGMgcG93ZXIgbHBmIGZjICovCisJYnVmWzBdID0gMHgwNTsKKwlueHQyMDB4X3dyaXRlYnl0ZXMoc3RhdGUsIDB4NDMsIGJ1ZiwgMSk7CisKKwlpZiAoc3RhdGUtPmRlbW9kX2NoaXAgPT0gTlhUMjAwNCkgeworCQkvKiB3cml0ZSA/Pz8gKi8KKwkJYnVmWzBdID0gMHgwMDsKKwkJYnVmWzFdID0gMHgwMDsKKwkJbnh0MjAweF93cml0ZWJ5dGVzKHN0YXRlLCAweDQ2LCBidWYsIDIpOworCX0KKworCS8qIHdyaXRlIGFjY3VtdWxhdG9yMiBpbnB1dCAqLworCWJ1ZlswXSA9IDB4ODA7CisJYnVmWzFdID0gMHgwMDsKKwlueHQyMDB4X3dyaXRlYnl0ZXMoc3RhdGUsIDB4NEIsIGJ1ZiwgMik7CisKKwkvKiB3cml0ZSBrZzEgKi8KKwlidWZbMF0gPSAweDAwOworCW54dDIwMHhfd3JpdGVieXRlcyhzdGF0ZSwgMHg0RCwgYnVmLCAxKTsKKworCS8qIHdyaXRlIHNkbTEyIGxwZiBmYyAqLworCWJ1ZlswXSA9IDB4NDQ7CisJbnh0MjAweF93cml0ZWJ5dGVzKHN0YXRlLCAweDU1LCBidWYsIDEpOworCisJLyogd3JpdGUgYWdjIGNvbnRyb2wgcmVnICovCisJYnVmWzBdID0gMHgwNDsKKwlueHQyMDB4X3dyaXRlYnl0ZXMoc3RhdGUsIDB4NDEsIGJ1ZiwgMSk7CisKKwlpZiAoc3RhdGUtPmRlbW9kX2NoaXAgPT0gTlhUMjAwNCkgeworCQlueHQyMDB4X3JlYWRyZWdfbXVsdGlieXRlKHN0YXRlLCAweDgwLCBidWYsIDEpOworCQlidWZbMF0gPSAweDI0OworCQlueHQyMDB4X3dyaXRlcmVnX211bHRpYnl0ZShzdGF0ZSwgMHg4MCwgYnVmLCAxKTsKKworCQkvKiBzb2Z0IHJlc2V0PyAqLworCQlueHQyMDB4X3JlYWRyZWdfbXVsdGlieXRlKHN0YXRlLCAweDA4LCBidWYsIDEpOworCQlidWZbMF0gPSAweDEwOworCQlueHQyMDB4X3dyaXRlcmVnX211bHRpYnl0ZShzdGF0ZSwgMHgwOCwgYnVmLCAxKTsKKwkJbnh0MjAweF9yZWFkcmVnX211bHRpYnl0ZShzdGF0ZSwgMHgwOCwgYnVmLCAxKTsKKwkJYnVmWzBdID0gMHgwMDsKKwkJbnh0MjAweF93cml0ZXJlZ19tdWx0aWJ5dGUoc3RhdGUsIDB4MDgsIGJ1ZiwgMSk7CisKKwkJbnh0MjAweF9yZWFkcmVnX211bHRpYnl0ZShzdGF0ZSwgMHg4MCwgYnVmLCAxKTsKKwkJYnVmWzBdID0gMHgwNDsKKwkJbnh0MjAweF93cml0ZXJlZ19tdWx0aWJ5dGUoc3RhdGUsIDB4ODAsIGJ1ZiwgMSk7CisJCWJ1ZlswXSA9IDB4MDA7CisJCW54dDIwMHhfd3JpdGVyZWdfbXVsdGlieXRlKHN0YXRlLCAweDgxLCBidWYsIDEpOworCQlidWZbMF0gPSAweDgwOyBidWZbMV0gPSAweDAwOyBidWZbMl0gPSAweDAwOworCQlueHQyMDB4X3dyaXRlcmVnX211bHRpYnl0ZShzdGF0ZSwgMHg4MiwgYnVmLCAzKTsKKwkJbnh0MjAweF9yZWFkcmVnX211bHRpYnl0ZShzdGF0ZSwgMHg4OCwgYnVmLCAxKTsKKwkJYnVmWzBdID0gMHgxMTsKKwkJbnh0MjAweF93cml0ZXJlZ19tdWx0aWJ5dGUoc3RhdGUsIDB4ODgsIGJ1ZiwgMSk7CisJCW54dDIwMHhfcmVhZHJlZ19tdWx0aWJ5dGUoc3RhdGUsIDB4ODAsIGJ1ZiwgMSk7CisJCWJ1ZlswXSA9IDB4NDQ7CisJCW54dDIwMHhfd3JpdGVyZWdfbXVsdGlieXRlKHN0YXRlLCAweDgwLCBidWYsIDEpOworCX0KKworCS8qIHdyaXRlIGFnYyB1Y2dwMCAqLworCXN3aXRjaCAocC0+dS52c2IubW9kdWxhdGlvbikgeworCQljYXNlIFFBTV82NDoKKwkJCQlidWZbMF0gPSAweDAyOworCQkJCWJyZWFrOworCQljYXNlIFFBTV8yNTY6CisJCQkJYnVmWzBdID0gMHgwMzsKKwkJCQlicmVhazsKKwkJY2FzZSBWU0JfODoKKwkJCQlidWZbMF0gPSAweDAwOworCQkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJCXJldHVybiAtRUlOVkFMOworCQkJCWJyZWFrOworCX0KKwlueHQyMDB4X3dyaXRlYnl0ZXMoc3RhdGUsIDB4MzAsIGJ1ZiwgMSk7CisKKwkvKiB3cml0ZSBhZ2MgY29udHJvbCByZWcgKi8KKwlidWZbMF0gPSAweDAwOworCW54dDIwMHhfd3JpdGVieXRlcyhzdGF0ZSwgMHg0MSwgYnVmLCAxKTsKKworCS8qIHdyaXRlIGFjY3VtdWxhdG9yMiBpbnB1dCAqLworCWJ1ZlswXSA9IDB4ODA7CisJYnVmWzFdID0gMHgwMDsKKwlueHQyMDB4X3dyaXRlYnl0ZXMoc3RhdGUsIDB4NDksIGJ1ZiwyKTsKKwlueHQyMDB4X3dyaXRlYnl0ZXMoc3RhdGUsIDB4NEIsIGJ1ZiwyKTsKKworCS8qIHdyaXRlIGFnYyBjb250cm9sIHJlZyAqLworCWJ1ZlswXSA9IDB4MDQ7CisJbnh0MjAweF93cml0ZWJ5dGVzKHN0YXRlLCAweDQxLCBidWYsIDEpOworCisJbnh0MjAweF9taWNyb2NvbnRyb2xsZXJfc3RhcnQoc3RhdGUpOworCisJaWYgKHN0YXRlLT5kZW1vZF9jaGlwID09IE5YVDIwMDQpIHsKKwkJbnh0MjAwNF9taWNyb2NvbnRyb2xsZXJfaW5pdChzdGF0ZSk7CisKKwkJLyogPz8/PyAqLworCQlidWZbMF0gPSAweEYwOworCQlidWZbMV0gPSAweDAwOworCQlueHQyMDB4X3dyaXRlYnl0ZXMoc3RhdGUsIDB4NUMsIGJ1ZiwgMik7CisJfQorCisJLyogYWRqYWNlbnQgY2hhbm5lbCBkZXRlY3Rpb24gc2hvdWxkIGJlIGRvbmUgaGVyZSwgYnV0IEkgZG9uJ3QKKwloYXZlIGFueSBzdGF0aW9ucyB3aXRoIHRoaXMgbmVlZCBzbyBJIGNhbm5vdCB0ZXN0IGl0ICovCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBueHQyMDB4X3JlYWRfc3RhdHVzKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBmZV9zdGF0dXNfdCogc3RhdHVzKQoreworCXN0cnVjdCBueHQyMDB4X3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXU4IGxvY2s7CisJbnh0MjAweF9yZWFkYnl0ZXMoc3RhdGUsIDB4MzEsICZsb2NrLCAxKTsKKworCSpzdGF0dXMgPSAwOworCWlmIChsb2NrICYgMHgyMCkgeworCQkqc3RhdHVzIHw9IEZFX0hBU19TSUdOQUw7CisJCSpzdGF0dXMgfD0gRkVfSEFTX0NBUlJJRVI7CisJCSpzdGF0dXMgfD0gRkVfSEFTX1ZJVEVSQkk7CisJCSpzdGF0dXMgfD0gRkVfSEFTX1NZTkM7CisJCSpzdGF0dXMgfD0gRkVfSEFTX0xPQ0s7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG54dDIwMHhfcmVhZF9iZXIoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHUzMiogYmVyKQoreworCXN0cnVjdCBueHQyMDB4X3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXU4IGJbM107CisKKwlueHQyMDB4X3JlYWRyZWdfbXVsdGlieXRlKHN0YXRlLCAweEU2LCBiLCAzKTsKKworCSpiZXIgPSAoKGJbMF0gPDwgOCkgKyBiWzFdKSAqIDg7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBueHQyMDB4X3JlYWRfc2lnbmFsX3N0cmVuZ3RoKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCB1MTYqIHN0cmVuZ3RoKQoreworCXN0cnVjdCBueHQyMDB4X3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXU4IGJbMl07CisJdTE2IHRlbXAgPSAwOworCisJLyogc2V0dXAgdG8gcmVhZCBjbHVzdGVyIHZhcmlhbmNlICovCisJYlswXSA9IDB4MDA7CisJbnh0MjAweF93cml0ZWJ5dGVzKHN0YXRlLCAweEExLCBiLCAxKTsKKworCS8qIGdldCBtdWx0cmVnIHZhbCAqLworCW54dDIwMHhfcmVhZHJlZ19tdWx0aWJ5dGUoc3RhdGUsIDB4QTYsIGIsIDIpOworCisJdGVtcCA9IChiWzBdIDw8IDgpIHwgYlsxXTsKKwkqc3RyZW5ndGggPSAoKDB4N0ZGRiAtIHRlbXApICYgMHgwRkZGKSAqIDE2OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbnh0MjAweF9yZWFkX3NucihzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgdTE2KiBzbnIpCit7CisKKwlzdHJ1Y3Qgbnh0MjAweF9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwl1OCBiWzJdOworCXUxNiB0ZW1wID0gMCwgdGVtcDI7CisJdTMyIHNucmRiID0gMDsKKworCS8qIHNldHVwIHRvIHJlYWQgY2x1c3RlciB2YXJpYW5jZSAqLworCWJbMF0gPSAweDAwOworCW54dDIwMHhfd3JpdGVieXRlcyhzdGF0ZSwgMHhBMSwgYiwgMSk7CisKKwkvKiBnZXQgbXVsdHJlZyB2YWwgZnJvbSAweEE2ICovCisJbnh0MjAweF9yZWFkcmVnX211bHRpYnl0ZShzdGF0ZSwgMHhBNiwgYiwgMik7CisKKwl0ZW1wID0gKGJbMF0gPDwgOCkgfCBiWzFdOworCXRlbXAyID0gMHg3RkZGIC0gdGVtcDsKKworCS8qIHNuciB3aWxsIGJlIGluIGRiICovCisJaWYgKHRlbXAyID4gMHg3RjAwKQorCQlzbnJkYiA9IDEwMDAqMjQgKyAoIDEwMDAqKDMwLTI0KSAqICggdGVtcDIgLSAweDdGMDAgKSAvICggMHg3RkZGIC0gMHg3RjAwICkgKTsKKwllbHNlIGlmICh0ZW1wMiA+IDB4N0VDMCkKKwkJc25yZGIgPSAxMDAwKjE4ICsgKCAxMDAwKigyNC0xOCkgKiAoIHRlbXAyIC0gMHg3RUMwICkgLyAoIDB4N0YwMCAtIDB4N0VDMCApICk7CisJZWxzZSBpZiAodGVtcDIgPiAweDdDMDApCisJCXNucmRiID0gMTAwMCoxMiArICggMTAwMCooMTgtMTIpICogKCB0ZW1wMiAtIDB4N0MwMCApIC8gKCAweDdFQzAgLSAweDdDMDAgKSApOworCWVsc2UKKwkJc25yZGIgPSAxMDAwKjAgKyAoIDEwMDAqKDEyLTApICogKCB0ZW1wMiAtIDAgKSAvICggMHg3QzAwIC0gMCApICk7CisKKwkvKiB0aGUgdmFsdWUgcmVwb3J0ZWQgYmFjayBmcm9tIHRoZSBmcm9udGVuZCB3aWxsIGJlIEZGRkY9MzJkYiAwMDAwPTBkYiAqLworCSpzbnIgPSBzbnJkYiAqICgweEZGRkYvMzIwMDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbnh0MjAweF9yZWFkX3VjYmxvY2tzKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCB1MzIqIHVjYmxvY2tzKQoreworCXN0cnVjdCBueHQyMDB4X3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXU4IGJbM107CisKKwlueHQyMDB4X3JlYWRyZWdfbXVsdGlieXRlKHN0YXRlLCAweEU2LCBiLCAzKTsKKwkqdWNibG9ja3MgPSBiWzJdOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbnh0MjAweF9zbGVlcChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBueHQyMDAyX2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUpCit7CisJc3RydWN0IG54dDIwMHhfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKKwlpbnQgcmV0OworCXU4IGJ1ZlsyXTsKKworCS8qIHJlcXVlc3QgdGhlIGZpcm13YXJlLCB0aGlzIHdpbGwgYmxvY2sgdW50aWwgc29tZW9uZSB1cGxvYWRzIGl0ICovCisJcHJpbnRrKCJueHQyMDAyOiBXYWl0aW5nIGZvciBmaXJtd2FyZSB1cGxvYWQgKCVzKS4uLlxuIiwgTlhUMjAwMl9ERUZBVUxUX0ZJUk1XQVJFKTsKKwlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgTlhUMjAwMl9ERUZBVUxUX0ZJUk1XQVJFLCAmc3RhdGUtPmkyYy0+ZGV2KTsKKwlwcmludGsoIm54dDIwMDI6IFdhaXRpbmcgZm9yIGZpcm13YXJlIHVwbG9hZCgyKS4uLlxuIik7CisJaWYgKHJldCkgeworCQlwcmludGsoIm54dDIwMDI6IE5vIGZpcm13YXJlIHVwbG9hZGVkICh0aW1lb3V0IG9yIGZpbGUgbm90IGZvdW5kPylcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IG54dDIwMDJfbG9hZF9maXJtd2FyZShmZSwgZncpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKCJueHQyMDAyOiBXcml0aW5nIGZpcm13YXJlIHRvIGRldmljZSBmYWlsZWRcbiIpOworCQlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcHJpbnRrKCJueHQyMDAyOiBGaXJtd2FyZSB1cGxvYWQgY29tcGxldGVcbiIpOworCisJLyogUHV0IHRoZSBtaWNybyBpbnRvIHJlc2V0ICovCisJbnh0MjAweF9taWNyb2NvbnRyb2xsZXJfc3RvcChzdGF0ZSk7CisKKwkvKiBlbnN1cmUgdHJhbnNmZXIgaXMgY29tcGxldGUgKi8KKwlidWZbMF09MHgwMDsKKwlueHQyMDB4X3dyaXRlYnl0ZXMoc3RhdGUsIDB4MkIsIGJ1ZiwgMSk7CisKKwkvKiBQdXQgdGhlIG1pY3JvIGludG8gcmVzZXQgZm9yIHJlYWwgdGhpcyB0aW1lICovCisJbnh0MjAweF9taWNyb2NvbnRyb2xsZXJfc3RvcChzdGF0ZSk7CisKKwkvKiBzb2Z0IHJlc2V0IGV2ZXJ5dGhpbmcgKGFnYyxmcm9udGVuZCxlcSxmZWMpKi8KKwlidWZbMF0gPSAweDBGOworCW54dDIwMHhfd3JpdGVieXRlcyhzdGF0ZSwgMHgwOCwgYnVmLCAxKTsKKwlidWZbMF0gPSAweDAwOworCW54dDIwMHhfd3JpdGVieXRlcyhzdGF0ZSwgMHgwOCwgYnVmLCAxKTsKKworCS8qIHdyaXRlIGFnYyBzZG0gY29uZmlndXJlICovCisJYnVmWzBdID0gMHhGMTsKKwlueHQyMDB4X3dyaXRlYnl0ZXMoc3RhdGUsIDB4NTcsIGJ1ZiwgMSk7CisKKwkvKiB3cml0ZSBtb2Qgb3V0cHV0IGZvcm1hdCAqLworCWJ1ZlswXSA9IDB4MjA7CisJbnh0MjAweF93cml0ZWJ5dGVzKHN0YXRlLCAweDA5LCBidWYsIDEpOworCisJLyogd3JpdGUgZmVjIG1wZWcgbW9kZSAqLworCWJ1ZlswXSA9IDB4N0U7CisJYnVmWzFdID0gMHgwMDsKKwlueHQyMDB4X3dyaXRlYnl0ZXMoc3RhdGUsIDB4RTksIGJ1ZiwgMik7CisKKwkvKiB3cml0ZSBtdXggc2VsZWN0aW9uICovCisJYnVmWzBdID0gMHgwMDsKKwlueHQyMDB4X3dyaXRlYnl0ZXMoc3RhdGUsIDB4Q0MsIGJ1ZiwgMSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBueHQyMDA0X2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUpCit7CisJc3RydWN0IG54dDIwMHhfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKKwlpbnQgcmV0OworCXU4IGJ1ZlszXTsKKworCS8qID8/PyAqLworCWJ1ZlswXT0weDAwOworCW54dDIwMHhfd3JpdGVieXRlcyhzdGF0ZSwgMHgxRSwgYnVmLCAxKTsKKworCS8qIHJlcXVlc3QgdGhlIGZpcm13YXJlLCB0aGlzIHdpbGwgYmxvY2sgdW50aWwgc29tZW9uZSB1cGxvYWRzIGl0ICovCisJcHJpbnRrKCJueHQyMDA0OiBXYWl0aW5nIGZvciBmaXJtd2FyZSB1cGxvYWQgKCVzKS4uLlxuIiwgTlhUMjAwNF9ERUZBVUxUX0ZJUk1XQVJFKTsKKwlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgTlhUMjAwNF9ERUZBVUxUX0ZJUk1XQVJFLCAmc3RhdGUtPmkyYy0+ZGV2KTsKKwlwcmludGsoIm54dDIwMDQ6IFdhaXRpbmcgZm9yIGZpcm13YXJlIHVwbG9hZCgyKS4uLlxuIik7CisJaWYgKHJldCkgeworCQlwcmludGsoIm54dDIwMDQ6IE5vIGZpcm13YXJlIHVwbG9hZGVkICh0aW1lb3V0IG9yIGZpbGUgbm90IGZvdW5kPylcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IG54dDIwMDRfbG9hZF9maXJtd2FyZShmZSwgZncpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKCJueHQyMDA0OiBXcml0aW5nIGZpcm13YXJlIHRvIGRldmljZSBmYWlsZWRcbiIpOworCQlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcHJpbnRrKCJueHQyMDA0OiBGaXJtd2FyZSB1cGxvYWQgY29tcGxldGVcbiIpOworCisJLyogZW5zdXJlIHRyYW5zZmVyIGlzIGNvbXBsZXRlICovCisJYnVmWzBdID0gMHgwMTsKKwlueHQyMDB4X3dyaXRlYnl0ZXMoc3RhdGUsIDB4MTksIGJ1ZiwgMSk7CisKKwlueHQyMDA0X21pY3JvY29udHJvbGxlcl9pbml0KHN0YXRlKTsKKwlueHQyMDB4X21pY3JvY29udHJvbGxlcl9zdG9wKHN0YXRlKTsKKwlueHQyMDB4X21pY3JvY29udHJvbGxlcl9zdG9wKHN0YXRlKTsKKwlueHQyMDA0X21pY3JvY29udHJvbGxlcl9pbml0KHN0YXRlKTsKKwlueHQyMDB4X21pY3JvY29udHJvbGxlcl9zdG9wKHN0YXRlKTsKKworCS8qIHNvZnQgcmVzZXQgZXZlcnl0aGluZyAoYWdjLGZyb250ZW5kLGVxLGZlYykqLworCWJ1ZlswXSA9IDB4RkY7CisJbnh0MjAweF93cml0ZXJlZ19tdWx0aWJ5dGUoc3RhdGUsIDB4MDgsIGJ1ZiwgMSk7CisJYnVmWzBdID0gMHgwMDsKKwlueHQyMDB4X3dyaXRlcmVnX211bHRpYnl0ZShzdGF0ZSwgMHgwOCwgYnVmLCAxKTsKKworCS8qIHdyaXRlIGFnYyBzZG0gY29uZmlndXJlICovCisJYnVmWzBdID0gMHhENzsKKwlueHQyMDB4X3dyaXRlYnl0ZXMoc3RhdGUsIDB4NTcsIGJ1ZiwgMSk7CisKKwkvKiA/Pz8qLworCWJ1ZlswXSA9IDB4MDc7CisJYnVmWzFdID0gMHhmZTsKKwlueHQyMDB4X3dyaXRlYnl0ZXMoc3RhdGUsIDB4MzUsIGJ1ZiwgMik7CisJYnVmWzBdID0gMHgxMjsKKwlueHQyMDB4X3dyaXRlYnl0ZXMoc3RhdGUsIDB4MzQsIGJ1ZiwgMSk7CisJYnVmWzBdID0gMHg4MDsKKwlueHQyMDB4X3dyaXRlYnl0ZXMoc3RhdGUsIDB4MjEsIGJ1ZiwgMSk7CisKKwkvKiA/Pz8qLworCWJ1ZlswXSA9IDB4MjE7CisJbnh0MjAweF93cml0ZWJ5dGVzKHN0YXRlLCAweDBBLCBidWYsIDEpOworCisJLyogPz8/Ki8KKwlidWZbMF0gPSAweDAxOworCW54dDIwMHhfd3JpdGVyZWdfbXVsdGlieXRlKHN0YXRlLCAweDgwLCBidWYsIDEpOworCisJLyogd3JpdGUgZmVjIG1wZWcgbW9kZSAqLworCWJ1ZlswXSA9IDB4N0U7CisJYnVmWzFdID0gMHgwMDsKKwlueHQyMDB4X3dyaXRlYnl0ZXMoc3RhdGUsIDB4RTksIGJ1ZiwgMik7CisKKwkvKiB3cml0ZSBtdXggc2VsZWN0aW9uICovCisJYnVmWzBdID0gMHgwMDsKKwlueHQyMDB4X3dyaXRlYnl0ZXMoc3RhdGUsIDB4Q0MsIGJ1ZiwgMSk7CisKKwkvKiA/Pz8qLworCW54dDIwMHhfcmVhZHJlZ19tdWx0aWJ5dGUoc3RhdGUsIDB4ODAsIGJ1ZiwgMSk7CisJYnVmWzBdID0gMHgwMDsKKwlueHQyMDB4X3dyaXRlcmVnX211bHRpYnl0ZShzdGF0ZSwgMHg4MCwgYnVmLCAxKTsKKworCS8qIHNvZnQgcmVzZXQ/ICovCisJbnh0MjAweF9yZWFkcmVnX211bHRpYnl0ZShzdGF0ZSwgMHgwOCwgYnVmLCAxKTsKKwlidWZbMF0gPSAweDEwOworCW54dDIwMHhfd3JpdGVyZWdfbXVsdGlieXRlKHN0YXRlLCAweDA4LCBidWYsIDEpOworCW54dDIwMHhfcmVhZHJlZ19tdWx0aWJ5dGUoc3RhdGUsIDB4MDgsIGJ1ZiwgMSk7CisJYnVmWzBdID0gMHgwMDsKKwlueHQyMDB4X3dyaXRlcmVnX211bHRpYnl0ZShzdGF0ZSwgMHgwOCwgYnVmLCAxKTsKKworCS8qID8/PyovCisJbnh0MjAweF9yZWFkcmVnX211bHRpYnl0ZShzdGF0ZSwgMHg4MCwgYnVmLCAxKTsKKwlidWZbMF0gPSAweDAxOworCW54dDIwMHhfd3JpdGVyZWdfbXVsdGlieXRlKHN0YXRlLCAweDgwLCBidWYsIDEpOworCWJ1ZlswXSA9IDB4NzA7CisJbnh0MjAweF93cml0ZXJlZ19tdWx0aWJ5dGUoc3RhdGUsIDB4ODEsIGJ1ZiwgMSk7CisJYnVmWzBdID0gMHgzMTsgYnVmWzFdID0gMHg1RTsgYnVmWzJdID0gMHg2NjsKKwlueHQyMDB4X3dyaXRlcmVnX211bHRpYnl0ZShzdGF0ZSwgMHg4MiwgYnVmLCAzKTsKKworCW54dDIwMHhfcmVhZHJlZ19tdWx0aWJ5dGUoc3RhdGUsIDB4ODgsIGJ1ZiwgMSk7CisJYnVmWzBdID0gMHgxMTsKKwlueHQyMDB4X3dyaXRlcmVnX211bHRpYnl0ZShzdGF0ZSwgMHg4OCwgYnVmLCAxKTsKKwlueHQyMDB4X3JlYWRyZWdfbXVsdGlieXRlKHN0YXRlLCAweDgwLCBidWYsIDEpOworCWJ1ZlswXSA9IDB4NDA7CisJbnh0MjAweF93cml0ZXJlZ19tdWx0aWJ5dGUoc3RhdGUsIDB4ODAsIGJ1ZiwgMSk7CisKKwlueHQyMDB4X3JlYWRieXRlcyhzdGF0ZSwgMHgxMCwgYnVmLCAxKTsKKwlidWZbMF0gPSAweDEwOworCW54dDIwMHhfd3JpdGVieXRlcyhzdGF0ZSwgMHgxMCwgYnVmLCAxKTsKKwlueHQyMDB4X3JlYWRieXRlcyhzdGF0ZSwgMHgwQSwgYnVmLCAxKTsKKwlidWZbMF0gPSAweDIxOworCW54dDIwMHhfd3JpdGVieXRlcyhzdGF0ZSwgMHgwQSwgYnVmLCAxKTsKKworCW54dDIwMDRfbWljcm9jb250cm9sbGVyX2luaXQoc3RhdGUpOworCisJYnVmWzBdID0gMHgyMTsKKwlueHQyMDB4X3dyaXRlYnl0ZXMoc3RhdGUsIDB4MEEsIGJ1ZiwgMSk7CisJYnVmWzBdID0gMHg3RTsKKwlueHQyMDB4X3dyaXRlYnl0ZXMoc3RhdGUsIDB4RTksIGJ1ZiwgMSk7CisJYnVmWzBdID0gMHgwMDsKKwlueHQyMDB4X3dyaXRlYnl0ZXMoc3RhdGUsIDB4RUEsIGJ1ZiwgMSk7CisKKwlueHQyMDB4X3JlYWRyZWdfbXVsdGlieXRlKHN0YXRlLCAweDgwLCBidWYsIDEpOworCWJ1ZlswXSA9IDB4MDA7CisJbnh0MjAweF93cml0ZXJlZ19tdWx0aWJ5dGUoc3RhdGUsIDB4ODAsIGJ1ZiwgMSk7CisJbnh0MjAweF9yZWFkcmVnX211bHRpYnl0ZShzdGF0ZSwgMHg4MCwgYnVmLCAxKTsKKwlidWZbMF0gPSAweDAwOworCW54dDIwMHhfd3JpdGVyZWdfbXVsdGlieXRlKHN0YXRlLCAweDgwLCBidWYsIDEpOworCisJLyogc29mdCByZXNldD8gKi8KKwlueHQyMDB4X3JlYWRyZWdfbXVsdGlieXRlKHN0YXRlLCAweDA4LCBidWYsIDEpOworCWJ1ZlswXSA9IDB4MTA7CisJbnh0MjAweF93cml0ZXJlZ19tdWx0aWJ5dGUoc3RhdGUsIDB4MDgsIGJ1ZiwgMSk7CisJbnh0MjAweF9yZWFkcmVnX211bHRpYnl0ZShzdGF0ZSwgMHgwOCwgYnVmLCAxKTsKKwlidWZbMF0gPSAweDAwOworCW54dDIwMHhfd3JpdGVyZWdfbXVsdGlieXRlKHN0YXRlLCAweDA4LCBidWYsIDEpOworCisJbnh0MjAweF9yZWFkcmVnX211bHRpYnl0ZShzdGF0ZSwgMHg4MCwgYnVmLCAxKTsKKwlidWZbMF0gPSAweDA0OworCW54dDIwMHhfd3JpdGVyZWdfbXVsdGlieXRlKHN0YXRlLCAweDgwLCBidWYsIDEpOworCWJ1ZlswXSA9IDB4MDA7CisJbnh0MjAweF93cml0ZXJlZ19tdWx0aWJ5dGUoc3RhdGUsIDB4ODEsIGJ1ZiwgMSk7CisJYnVmWzBdID0gMHg4MDsgYnVmWzFdID0gMHgwMDsgYnVmWzJdID0gMHgwMDsKKwlueHQyMDB4X3dyaXRlcmVnX211bHRpYnl0ZShzdGF0ZSwgMHg4MiwgYnVmLCAzKTsKKworCW54dDIwMHhfcmVhZHJlZ19tdWx0aWJ5dGUoc3RhdGUsIDB4ODgsIGJ1ZiwgMSk7CisJYnVmWzBdID0gMHgxMTsKKwlueHQyMDB4X3dyaXRlcmVnX211bHRpYnl0ZShzdGF0ZSwgMHg4OCwgYnVmLCAxKTsKKworCW54dDIwMHhfcmVhZHJlZ19tdWx0aWJ5dGUoc3RhdGUsIDB4ODAsIGJ1ZiwgMSk7CisJYnVmWzBdID0gMHg0NDsKKwlueHQyMDB4X3dyaXRlcmVnX211bHRpYnl0ZShzdGF0ZSwgMHg4MCwgYnVmLCAxKTsKKworCS8qIGluaXRpYWxpemUgdHVuZXIgKi8KKwlueHQyMDB4X3JlYWRieXRlcyhzdGF0ZSwgMHgxMCwgYnVmLCAxKTsKKwlidWZbMF0gPSAweDEyOworCW54dDIwMHhfd3JpdGVieXRlcyhzdGF0ZSwgMHgxMCwgYnVmLCAxKTsKKwlidWZbMF0gPSAweDA0OworCW54dDIwMHhfd3JpdGVieXRlcyhzdGF0ZSwgMHgxMywgYnVmLCAxKTsKKwlidWZbMF0gPSAweDAwOworCW54dDIwMHhfd3JpdGVieXRlcyhzdGF0ZSwgMHgxNiwgYnVmLCAxKTsKKwlidWZbMF0gPSAweDA0OworCW54dDIwMHhfd3JpdGVieXRlcyhzdGF0ZSwgMHgxNCwgYnVmLCAxKTsKKwlidWZbMF0gPSAweDAwOworCW54dDIwMHhfd3JpdGVieXRlcyhzdGF0ZSwgMHgxNCwgYnVmLCAxKTsKKwlueHQyMDB4X3dyaXRlYnl0ZXMoc3RhdGUsIDB4MTcsIGJ1ZiwgMSk7CisJbnh0MjAweF93cml0ZWJ5dGVzKHN0YXRlLCAweDE0LCBidWYsIDEpOworCW54dDIwMHhfd3JpdGVieXRlcyhzdGF0ZSwgMHgxNywgYnVmLCAxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG54dDIwMHhfaW5pdChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSkKK3sKKwlzdHJ1Y3Qgbnh0MjAweF9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlpbnQgcmV0ID0gMDsKKworCWlmICghc3RhdGUtPmluaXRpYWxpc2VkKSB7CisJCXN3aXRjaCAoc3RhdGUtPmRlbW9kX2NoaXApIHsKKwkJCWNhc2UgTlhUMjAwMjoKKwkJCQlyZXQgPSBueHQyMDAyX2luaXQoZmUpOworCQkJCWJyZWFrOworCQkJY2FzZSBOWFQyMDA0OgorCQkJCXJldCA9IG54dDIwMDRfaW5pdChmZSk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXJldHVybiAtRUlOVkFMOworCQkJCWJyZWFrOworCQl9CisJCXN0YXRlLT5pbml0aWFsaXNlZCA9IDE7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbnh0MjAweF9nZXRfdHVuZV9zZXR0aW5ncyhzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgc3RydWN0IGR2Yl9mcm9udGVuZF90dW5lX3NldHRpbmdzKiBmZXNldHRpbmdzKQoreworCWZlc2V0dGluZ3MtPm1pbl9kZWxheV9tcyA9IDUwMDsKKwlmZXNldHRpbmdzLT5zdGVwX3NpemUgPSAwOworCWZlc2V0dGluZ3MtPm1heF9kcmlmdCA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG54dDIwMHhfcmVsZWFzZShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSkKK3sKKwlzdHJ1Y3Qgbnh0MjAweF9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlrZnJlZShzdGF0ZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcyBueHQyMDB4X29wczsKKworc3RydWN0IGR2Yl9mcm9udGVuZCogbnh0MjAweF9hdHRhY2goY29uc3Qgc3RydWN0IG54dDIwMHhfY29uZmlnKiBjb25maWcsCisJCQkJICAgc3RydWN0IGkyY19hZGFwdGVyKiBpMmMpCit7CisJc3RydWN0IG54dDIwMHhfc3RhdGUqIHN0YXRlID0gTlVMTDsKKwl1OCBidWYgW10gPSB7MCwwLDAsMCwwfTsKKworCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGludGVybmFsIHN0YXRlICovCisJc3RhdGUgPSAoc3RydWN0IG54dDIwMHhfc3RhdGUqKSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgbnh0MjAweF9zdGF0ZSksIEdGUF9LRVJORUwpOworCWlmIChzdGF0ZSA9PSBOVUxMKQorCQlnb3RvIGVycm9yOworCW1lbXNldChzdGF0ZSwwLHNpemVvZigqc3RhdGUpKTsKKworCS8qIHNldHVwIHRoZSBzdGF0ZSAqLworCXN0YXRlLT5jb25maWcgPSBjb25maWc7CisJc3RhdGUtPmkyYyA9IGkyYzsKKwltZW1jcHkoJnN0YXRlLT5vcHMsICZueHQyMDB4X29wcywgc2l6ZW9mKHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzKSk7CisJc3RhdGUtPmluaXRpYWxpc2VkID0gMDsKKworCS8qIHJlYWQgY2FyZCBpZCAqLworCW54dDIwMHhfcmVhZGJ5dGVzKHN0YXRlLCAweDAwLCBidWYsIDUpOworCWRwcmludGsoIk5YVCBpbmZvOiAlMDJYICUwMlggJTAyWCAlMDJYICUwMlhcbiIsCisJCWJ1ZlswXSwgYnVmWzFdLCBidWZbMl0sCWJ1ZlszXSwgYnVmWzRdKTsKKworCS8qIHNldCBkZW1vZCBjaGlwICovCisJc3dpdGNoIChidWZbMF0pIHsKKwkJY2FzZSAweDA0OgorCQkJc3RhdGUtPmRlbW9kX2NoaXAgPSBOWFQyMDAyOworCQkJcHJpbnRrKCJueHQyMDB4OiBOWFQyMDAyIERldGVjdGVkXG4iKTsKKwkJCWJyZWFrOworCQljYXNlIDB4MDU6CisJCQlzdGF0ZS0+ZGVtb2RfY2hpcCA9IE5YVDIwMDQ7CisJCQlwcmludGsoIm54dDIwMHg6IE5YVDIwMDQgRGV0ZWN0ZWRcbiIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlnb3RvIGVycm9yOworCX0KKworCS8qIG1ha2Ugc3VyZSBkZW1vZCBjaGlwIGlzIHN1cHBvcnRlZCAqLworCXN3aXRjaCAoc3RhdGUtPmRlbW9kX2NoaXApIHsKKwkJY2FzZSBOWFQyMDAyOgorCQkJaWYgKGJ1ZlswXSAhPSAweDA0KSBnb3RvIGVycm9yOwkJLyogZGV2aWNlIGlkICovCisJCQlpZiAoYnVmWzFdICE9IDB4MDIpIGdvdG8gZXJyb3I7CQkvKiBmYWIgaWQgKi8KKwkJCWlmIChidWZbMl0gIT0gMHgxMSkgZ290byBlcnJvcjsJCS8qIG1vbnRoICovCisJCQlpZiAoYnVmWzNdICE9IDB4MjApIGdvdG8gZXJyb3I7CQkvKiB5ZWFyIG1zYiAqLworCQkJaWYgKGJ1Zls0XSAhPSAweDAwKSBnb3RvIGVycm9yOwkJLyogeWVhciBsc2IgKi8KKwkJCWJyZWFrOworCQljYXNlIE5YVDIwMDQ6CisJCQlpZiAoYnVmWzBdICE9IDB4MDUpIGdvdG8gZXJyb3I7CQkvKiBkZXZpY2UgaWQgKi8KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZ290byBlcnJvcjsKKwl9CisKKwkvKiBjcmVhdGUgZHZiX2Zyb250ZW5kICovCisJc3RhdGUtPmZyb250ZW5kLm9wcyA9ICZzdGF0ZS0+b3BzOworCXN0YXRlLT5mcm9udGVuZC5kZW1vZHVsYXRvcl9wcml2ID0gc3RhdGU7CisJcmV0dXJuICZzdGF0ZS0+ZnJvbnRlbmQ7CisKK2Vycm9yOgorCWtmcmVlKHN0YXRlKTsKKwlwcmludGsoIlVua25vd24vVW5zdXBwb3J0ZWQgTlhUIGNoaXA6ICUwMlggJTAyWCAlMDJYICUwMlggJTAyWFxuIiwKKwkJYnVmWzBdLCBidWZbMV0sIGJ1ZlsyXSwgYnVmWzNdLCBidWZbNF0pOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMgbnh0MjAweF9vcHMgPSB7CisKKwkuaW5mbyA9IHsKKwkJLm5hbWUgPSAiTmV4dHdhdmUgTlhUMjAwWCBWU0IvUUFNIGZyb250ZW5kIiwKKwkJLnR5cGUgPSBGRV9BVFNDLAorCQkuZnJlcXVlbmN5X21pbiA9ICA1NDAwMDAwMCwKKwkJLmZyZXF1ZW5jeV9tYXggPSA4NjAwMDAwMDAsCisJCS5mcmVxdWVuY3lfc3RlcHNpemUgPSAxNjY2NjYsCS8qIHN0ZXBzaXplIGlzIGp1c3QgYSBndWVzcyAqLworCQkuY2FwcyA9IEZFX0NBTl9GRUNfMV8yIHwgRkVfQ0FOX0ZFQ18yXzMgfCBGRV9DQU5fRkVDXzNfNCB8CisJCQlGRV9DQU5fRkVDXzVfNiB8IEZFX0NBTl9GRUNfN184IHwgRkVfQ0FOX0ZFQ19BVVRPIHwKKwkJCUZFX0NBTl84VlNCIHwgRkVfQ0FOX1FBTV82NCB8IEZFX0NBTl9RQU1fMjU2CisJfSwKKworCS5yZWxlYXNlID0gbnh0MjAweF9yZWxlYXNlLAorCisJLmluaXQgPSBueHQyMDB4X2luaXQsCisJLnNsZWVwID0gbnh0MjAweF9zbGVlcCwKKworCS5zZXRfZnJvbnRlbmQgPSBueHQyMDB4X3NldHVwX2Zyb250ZW5kX3BhcmFtZXRlcnMsCisJLmdldF90dW5lX3NldHRpbmdzID0gbnh0MjAweF9nZXRfdHVuZV9zZXR0aW5ncywKKworCS5yZWFkX3N0YXR1cyA9IG54dDIwMHhfcmVhZF9zdGF0dXMsCisJLnJlYWRfYmVyID0gbnh0MjAweF9yZWFkX2JlciwKKwkucmVhZF9zaWduYWxfc3RyZW5ndGggPSBueHQyMDB4X3JlYWRfc2lnbmFsX3N0cmVuZ3RoLAorCS5yZWFkX3NuciA9IG54dDIwMHhfcmVhZF9zbnIsCisJLnJlYWRfdWNibG9ja3MgPSBueHQyMDB4X3JlYWRfdWNibG9ja3MsCit9OworCittb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiVHVybiBvbi9vZmYgZnJvbnRlbmQgZGVidWdnaW5nIChkZWZhdWx0Om9mZikuIik7CisKK01PRFVMRV9ERVNDUklQVElPTigiTlhUMjAwWCAoQVRTQyA4VlNCICYgSVRVLVQgSi44MyBBbm5leEIgNjQvMjU2IFFBTSkgRGVtb2R1bGF0b3IgRHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJLaXJrIExhcHJheSwgSmVhbi1GcmFuY29pcyBUaGliZXJ0LCBhbmQgVGF5bG9yIEphY29iIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK0VYUE9SVF9TWU1CT0wobnh0MjAweF9hdHRhY2gpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbnh0MjAweC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL254dDIwMHguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDlkNzBiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL254dDIwMHguaApAQCAtMCwwICsxLDYxIEBACisvKgorICogICAgU3VwcG9ydCBmb3IgTlhUMjAwMiBhbmQgTlhUMjAwNCAtIFZTQi9RQU0KKyAqCisgKiAgICBDb3B5cmlnaHQgKEMpIDIwMDUgS2lyayBMYXByYXkgKGtpcmsubGFwcmF5QGdtYWlsLmNvbSkKKyAqICAgIGJhc2VkIG9uIG54dDIwMDIgYnkgVGF5bG9yIEphY29iIDxydGphY29iQGVhcnRobGluay5uZXQ+CisgKiAgICBhbmQgbnh0MjAwNCBieSBKZWFuLUZyYW5jb2lzIFRoaWJlcnQgKGplYW5mcmFuY29pc0BzYWdldHYuY29tKQorICoKKyAqICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyovCisKKyNpZm5kZWYgTlhUMjAwWF9ICisjZGVmaW5lIE5YVDIwMFhfSAorCisjaW5jbHVkZSA8bGludXgvZHZiL2Zyb250ZW5kLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKwordHlwZWRlZiBlbnVtIG54dF9jaGlwX3QgeworCQlOWFRVTkRFRklORUQsCisJCU5YVDIwMDIsCisJCU5YVDIwMDQKK31ueHRfY2hpcF90eXBlOworCitzdHJ1Y3Qgbnh0MjAweF9jb25maWcKK3sKKwkvKiB0aGUgZGVtb2R1bGF0b3IncyBpMmMgYWRkcmVzcyAqLworCXU4IGRlbW9kX2FkZHJlc3M7CisKKwkvKiB0dW5lciBpbmZvcm1hdGlvbiAqLworCXU4IHBsbF9hZGRyZXNzOworCXN0cnVjdCBkdmJfcGxsX2Rlc2MgKnBsbF9kZXNjOworCisJLyogdXNlZCB0byBzZXQgcGxsIGlucHV0ICovCisJaW50ICgqc2V0X3BsbF9pbnB1dCkodTgqIGJ1ZiwgaW50IGlucHV0KTsKKworCS8qIG5lZWQgdG8gc2V0IGRldmljZSBwYXJhbSBmb3Igc3RhcnRfZG1hICovCisJaW50ICgqc2V0X3RzX3BhcmFtcykoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIGludCBpc19wdW5jdHVyZWQpOworfTsKKworZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQqIG54dDIwMHhfYXR0YWNoKGNvbnN0IHN0cnVjdCBueHQyMDB4X2NvbmZpZyogY29uZmlnLAorCQkJCQkgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIqIGkyYyk7CisKKyNlbmRpZiAvKiBOWFQyMDBYX0ggKi8KKworLyoKKyAqIExvY2FsIHZhcmlhYmxlczoKKyAqIGMtYmFzaWMtb2Zmc2V0OiA4CisgKiBFbmQ6CisgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9vcjUxMTMyLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvb3I1MTEzMi5jCmluZGV4IGZjNzRjNDAuLjc4YmRlZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9vcjUxMTMyLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL29yNTExMzIuYwpAQCAtNDY4LDYgKzQ2OCw3IEBACiAJdW5zaWduZWQgY2hhciBzbmRfYnVmWzJdOwogCXU4IHJjdnJfc3RhdDsKIAl1MTYgc25yX2VxdTsKKwl1MzIgc2lnbmFsX3N0cmVuZ3RoOwogCWludCB1c0s7CiAKIAlzbmRfYnVmWzBdPTB4MDQ7CkBAIC01MDMsNyArNTA0LDExIEBACiAJdXNLID0gKHJjdnJfc3RhdCAmIDB4MTApID8gMyA6IDA7CiAKICAgICAgICAgLyogVGhlIHZhbHVlIHJlcG9ydGVkIGJhY2sgZnJvbSB0aGUgZnJvbnRlbmQgd2lsbCBiZSBGRkZGPTEwMCUgMDAwMD0wJSAqLwotCSpzdHJlbmd0aCA9ICgoKDg5NTIgLSBpMjBMb2cxMChzbnJfZXF1KSAtIHVzSyoxMDApLzMrNSkqNjU1MzUpLzEwMDA7CisJc2lnbmFsX3N0cmVuZ3RoID0gKCgoODk1MiAtIGkyMExvZzEwKHNucl9lcXUpIC0gdXNLKjEwMCkvMys1KSo2NTUzNSkvMTAwMDsKKwlpZiAoc2lnbmFsX3N0cmVuZ3RoID4gMHhmZmZmKQorCQkqc3RyZW5ndGggPSAweGZmZmY7CisJZWxzZQorCQkqc3RyZW5ndGggPSBzaWduYWxfc3RyZW5ndGg7CiAJZHByaW50aygicmVhZF9zaWduYWxfc3RyZW5ndGggJWlcbiIsKnN0cmVuZ3RoKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL29yNTEyMTEuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9vcjUxMjExLmMKaW5kZXggOGE5ZGIyMy4uNTMxZjc2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL29yNTEyMTEuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvb3I1MTIxMS5jCkBAIC0zMzksNiArMzM5LDcgQEAKIAl1OCByZWNfYnVmWzJdOwogCXU4IHNuZF9idWZbNF07CiAJdTggc25yX2VxdTsKKwl1MzIgc2lnbmFsX3N0cmVuZ3RoOwogCiAJLyogU05SIGFmdGVyIEVxdWFsaXplciAqLwogCXNuZF9idWZbMF0gPSAweDA0OwpAQCAtMzU4LDggKzM1OSwxMSBAQAogCXNucl9lcXUgPSByZWNfYnVmWzBdICYgMHhmZjsKIAogCS8qIFRoZSB2YWx1ZSByZXBvcnRlZCBiYWNrIGZyb20gdGhlIGZyb250ZW5kIHdpbGwgYmUgRkZGRj0xMDAlIDAwMDA9MCUgKi8KLQkqc3RyZW5ndGggPSAoKCg1MzM0IC0gaTIwTG9nMTAoc25yX2VxdSkpLzMrNSkqNjU1MzUpLzEwMDA7Ci0KKwlzaWduYWxfc3RyZW5ndGggPSAoKCg1MzM0IC0gaTIwTG9nMTAoc25yX2VxdSkpLzMrNSkqNjU1MzUpLzEwMDA7CisJaWYgKHNpZ25hbF9zdHJlbmd0aCA+IDB4ZmZmZikKKwkJKnN0cmVuZ3RoID0gMHhmZmZmOworCWVsc2UKKwkJKnN0cmVuZ3RoID0gc2lnbmFsX3N0cmVuZ3RoOwogCWRwcmludGsoInJlYWRfc2lnbmFsX3N0cmVuZ3RoICVpXG4iLCpzdHJlbmd0aCk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwMjk5LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDI5OS5jCmluZGV4IDg4OWQ5MjUuLjI5YzQ4NjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwMjk5LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djAyOTkuYwpAQCAtNjQsOCArNjQsMTIgQEAKIAl1MzIgdHVuZXJfZnJlcXVlbmN5OwogCXUzMiBzeW1ib2xfcmF0ZTsKIAlmZV9jb2RlX3JhdGVfdCBmZWNfaW5uZXI7CisJaW50IGVycm1vZGU7CiB9OwogCisjZGVmaW5lIFNUQVRVU19CRVIgMAorI2RlZmluZSBTVEFUVVNfVUNCTE9DS1MgMQorCiBzdGF0aWMgaW50IGRlYnVnOwogc3RhdGljIGludCBkZWJ1Z19sZWdhY3lfZGlzaF9zd2l0Y2g7CiAjZGVmaW5lIGRwcmludGsoYXJncy4uLikgXApAQCAtMzgzLDM2ICszODcsNiBAQAogCX07CiB9CiAKLXN0YXRpYyBpbmxpbmUgczMyIHN0djAyOTlfY2FsY191c2VjX2RlbGF5IChzdHJ1Y3QgdGltZXZhbCBsYXN0dGltZSwgc3RydWN0IHRpbWV2YWwgY3VydGltZSkKLXsKLQlyZXR1cm4gKChjdXJ0aW1lLnR2X3VzZWMgPCBsYXN0dGltZS50dl91c2VjKSA/Ci0JCTEwMDAwMDAgLSBsYXN0dGltZS50dl91c2VjICsgY3VydGltZS50dl91c2VjIDoKLQkJY3VydGltZS50dl91c2VjIC0gbGFzdHRpbWUudHZfdXNlYyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0djAyOTlfc2xlZXBfdW50aWwgKHN0cnVjdCB0aW1ldmFsICp3YWtldGltZSwgdTMyIGFkZF91c2VjKQotewotCXN0cnVjdCB0aW1ldmFsIGxhc3R0aW1lOwotCXMzMiBkZWx0YSwgbmV3ZGVsdGE7Ci0KLQl3YWtldGltZS0+dHZfdXNlYyArPSBhZGRfdXNlYzsKLQlpZiAod2FrZXRpbWUtPnR2X3VzZWMgPj0gMTAwMDAwMCkgewotCQl3YWtldGltZS0+dHZfdXNlYyAtPSAxMDAwMDAwOwotCQl3YWtldGltZS0+dHZfc2VjKys7Ci0JfQotCi0JZG9fZ2V0dGltZW9mZGF5ICgmbGFzdHRpbWUpOwotCWRlbHRhID0gc3R2MDI5OV9jYWxjX3VzZWNfZGVsYXkgKGxhc3R0aW1lLCAqd2FrZXRpbWUpOwotCWlmIChkZWx0YSA+IDI1MDApIHsKLQkJbXNsZWVwICgoZGVsdGEgLSAxNTAwKSAvIDEwMDApOwotCQlkb19nZXR0aW1lb2ZkYXkgKCZsYXN0dGltZSk7Ci0JCW5ld2RlbHRhID0gc3R2MDI5OV9jYWxjX3VzZWNfZGVsYXkgKGxhc3R0aW1lLCAqd2FrZXRpbWUpOwotCQlkZWx0YSA9IChuZXdkZWx0YSA+IGRlbHRhKSA/IDAgOiBuZXdkZWx0YTsKLQl9Ci0JaWYgKGRlbHRhID4gMCkKLQkJdWRlbGF5IChkZWx0YSk7Ci19Ci0KIHN0YXRpYyBpbnQgc3R2MDI5OV9zZW5kX2xlZ2FjeV9kaXNoX2NtZCAoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHUzMiBjbWQpCiB7CiAJc3RydWN0IHN0djAyOTlfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CkBAIC00NDAsNyArNDE0LDcgQEAKIAkJbWVtY3B5ICgmdHZbMF0sICZuZXh0dGltZSwgc2l6ZW9mIChzdHJ1Y3QgdGltZXZhbCkpOwogCXN0djAyOTlfd3JpdGVyZWdJIChzdGF0ZSwgMHgwYywgcmVnMHgwYyB8IDB4NTApOyAvKiBzZXQgTE5CIHRvIDE4ViAqLwogCi0Jc3R2MDI5OV9zbGVlcF91bnRpbCAoJm5leHR0aW1lLCAzMjAwMCk7CisJZHZiX2Zyb250ZW5kX3NsZWVwX3VudGlsKCZuZXh0dGltZSwgMzIwMDApOwogCiAJZm9yIChpPTA7IGk8OTsgaSsrKSB7CiAJCWlmIChkZWJ1Z19sZWdhY3lfZGlzaF9zd2l0Y2gpCkBAIC00NTQsMTMgKzQyOCwxMyBAQAogCQljbWQgPSBjbWQgPj4gMTsKIAogCQlpZiAoaSAhPSA4KQotCQkJc3R2MDI5OV9zbGVlcF91bnRpbCAoJm5leHR0aW1lLCA4MDAwKTsKKwkJCWR2Yl9mcm9udGVuZF9zbGVlcF91bnRpbCgmbmV4dHRpbWUsIDgwMDApOwogCX0KIAlpZiAoZGVidWdfbGVnYWN5X2Rpc2hfc3dpdGNoKSB7CiAJCXByaW50ayAoIiVzKCVkKTogc3dpdGNoIGRlbGF5IChzaG91bGQgYmUgMzJrIGZvbGxvd2VkIGJ5IGFsbCA4a1xuIiwKIAkJCV9fRlVOQ1RJT05fXywgZmUtPmR2Yi0+bnVtKTsKLQkJZm9yIChpPTE7IGkgPCAxMDsgaSsrKQotCQkJcHJpbnRrICgiJWQ6ICVkXG4iLCBpLCBzdHYwMjk5X2NhbGNfdXNlY19kZWxheSAodHZbaS0xXSAsIHR2W2ldKSk7CisJCWZvciAoaSA9IDE7IGkgPCAxMDsgaSsrKQorCQkJcHJpbnRrICgiJWQ6ICVkXG4iLCBpLCB0aW1ldmFsX3VzZWNfZGlmZih0dltpLTFdICwgdHZbaV0pKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTUxNyw4ICs0OTEsNyBAQAogewogICAgICAgICBzdHJ1Y3Qgc3R2MDI5OV9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAotCXN0djAyOTlfd3JpdGVyZWdJKHN0YXRlLCAweDM0LCAoc3R2MDI5OV9yZWFkcmVnKHN0YXRlLCAweDM0KSAmIDB4Y2YpIHwgMHgxMCk7Ci0JbXNsZWVwKDEwMCk7CisJaWYgKHN0YXRlLT5lcnJtb2RlICE9IFNUQVRVU19CRVIpIHJldHVybiAwOwogCSpiZXIgPSAoc3R2MDI5OV9yZWFkcmVnIChzdGF0ZSwgMHgxZCkgPDwgOCkgfCBzdHYwMjk5X3JlYWRyZWcgKHN0YXRlLCAweDFlKTsKIAogCXJldHVybiAwOwpAQCAtNTU3LDkgKzUzMCw4IEBACiB7CiAgICAgICAgIHN0cnVjdCBzdHYwMjk5X3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCi0Jc3R2MDI5OV93cml0ZXJlZ0koc3RhdGUsIDB4MzQsIChzdHYwMjk5X3JlYWRyZWcoc3RhdGUsIDB4MzQpICYgMHhjZikgfCAweDMwKTsKLQltc2xlZXAoMTAwKTsKLQkqdWNibG9ja3MgPSAoc3R2MDI5OV9yZWFkcmVnIChzdGF0ZSwgMHgxZCkgPDwgOCkgfCBzdHYwMjk5X3JlYWRyZWcgKHN0YXRlLCAweDFlKTsKKwlpZiAoc3RhdGUtPmVycm1vZGUgIT0gU1RBVFVTX1VDQkxPQ0tTKSAqdWNibG9ja3MgPSAwOworCWVsc2UgKnVjYmxvY2tzID0gKHN0djAyOTlfcmVhZHJlZyAoc3RhdGUsIDB4MWQpIDw8IDgpIHwgc3R2MDI5OV9yZWFkcmVnIChzdGF0ZSwgMHgxZSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTU4MSw0OSArNTUzLDE0IEBACiAJaWYgKHN0YXRlLT5jb25maWctPmludmVydCkgaW52dmFsID0gKH5pbnZ2YWwpICYgMTsKIAlzdHYwMjk5X3dyaXRlcmVnSShzdGF0ZSwgMHgwYywgKHN0djAyOTlfcmVhZHJlZyhzdGF0ZSwgMHgwYykgJiAweGZlKSB8IGludnZhbCk7CiAKLQlpZiAoc3RhdGUtPmNvbmZpZy0+ZW5oYW5jZWRfdHVuaW5nKSB7Ci0JCS8qIGNoZWNrIGlmIHdlIHNob3VsZCBkbyBhIGZpbmV0dW5lICovCi0JCWludCBmcmVxdWVuY3lfZGVsdGEgPSBwLT5mcmVxdWVuY3kgLSBzdGF0ZS0+dHVuZXJfZnJlcXVlbmN5OwotCQlpbnQgbWlubWF4ID0gcC0+dS5xcHNrLnN5bWJvbF9yYXRlIC8gMjAwMDsKLQkJaWYgKG1pbm1heCA8IDUwMDApIG1pbm1heCA9IDUwMDA7CisJc3R2MDI5OV93cml0ZXJlZ0koc3RhdGUsIDB4MDUsIDB4YjUpOwkvKiAgZW5hYmxlIGkyYyByZXBlYXRlciBvbiBzdHYwMjk5ICAqLworCXN0YXRlLT5jb25maWctPnBsbF9zZXQoZmUsIHN0YXRlLT5pMmMsIHApOworCXN0djAyOTlfd3JpdGVyZWdJKHN0YXRlLCAweDA1LCAweDM1KTsJLyogIGRpc2FibGUgaTJjIHJlcGVhdGVyIG9uIHN0djAyOTkgICovCiAKLQkJaWYgKChmcmVxdWVuY3lfZGVsdGEgPiAtbWlubWF4KSAmJiAoZnJlcXVlbmN5X2RlbHRhIDwgbWlubWF4KSAmJiAoZnJlcXVlbmN5X2RlbHRhICE9IDApICYmCi0JCSAgICAoc3RhdGUtPmZlY19pbm5lciA9PSBwLT51LnFwc2suZmVjX2lubmVyKSAmJgotCQkgICAgKHN0YXRlLT5zeW1ib2xfcmF0ZSA9PSBwLT51LnFwc2suc3ltYm9sX3JhdGUpKSB7Ci0JCQlpbnQgRHJvdF9mcmVxID0gKGZyZXF1ZW5jeV9kZWx0YSA8PCAxNikgLyAoc3RhdGUtPmNvbmZpZy0+bWNsayAvIDEwMDApOwotCi0JCQkvLyB6YXAgdGhlIGRlcm90YXRvciByZWdpc3RlcnMgZmlyc3QKLQkJCXN0djAyOTlfd3JpdGVyZWdJKHN0YXRlLCAweDIyLCAweDAwKTsKLQkJCXN0djAyOTlfd3JpdGVyZWdJKHN0YXRlLCAweDIzLCAweDAwKTsKLQotCQkJLy8gbm93IHNldCB0aGVtIGFzIHdlIHdhbnQKLQkJCXN0djAyOTlfd3JpdGVyZWdJKHN0YXRlLCAweDIyLCBEcm90X2ZyZXEgPj4gOCk7Ci0JCQlzdHYwMjk5X3dyaXRlcmVnSShzdGF0ZSwgMHgyMywgRHJvdF9mcmVxKTsKLQkJfSBlbHNlIHsKLQkJCS8qIEEgIm5vcm1hbCIgdHVuZSBpcyByZXF1ZXN0ZWQgKi8KLQkJCXN0djAyOTlfd3JpdGVyZWdJKHN0YXRlLCAweDA1LCAweGI1KTsJLyogIGVuYWJsZSBpMmMgcmVwZWF0ZXIgb24gc3R2MDI5OSAgKi8KLQkJCXN0YXRlLT5jb25maWctPnBsbF9zZXQoZmUsIHN0YXRlLT5pMmMsIHApOwotCQkJc3R2MDI5OV93cml0ZXJlZ0koc3RhdGUsIDB4MDUsIDB4MzUpOwkvKiAgZGlzYWJsZSBpMmMgcmVwZWF0ZXIgb24gc3R2MDI5OSAgKi8KLQotCQkJc3R2MDI5OV93cml0ZXJlZ0koc3RhdGUsIDB4MzIsIDB4ODApOwotCQkJc3R2MDI5OV93cml0ZXJlZ0koc3RhdGUsIDB4MjIsIDB4MDApOwotCQkJc3R2MDI5OV93cml0ZXJlZ0koc3RhdGUsIDB4MjMsIDB4MDApOwotCQkJc3R2MDI5OV93cml0ZXJlZ0koc3RhdGUsIDB4MzIsIDB4MTkpOwotCQkJc3R2MDI5OV9zZXRfc3ltYm9scmF0ZSAoZmUsIHAtPnUucXBzay5zeW1ib2xfcmF0ZSk7Ci0JCQlzdHYwMjk5X3NldF9GRUMgKHN0YXRlLCBwLT51LnFwc2suZmVjX2lubmVyKTsKLQkJfQotCX0gZWxzZSB7Ci0JCXN0djAyOTlfd3JpdGVyZWdJKHN0YXRlLCAweDA1LCAweGI1KTsJLyogIGVuYWJsZSBpMmMgcmVwZWF0ZXIgb24gc3R2MDI5OSAgKi8KLQkJc3RhdGUtPmNvbmZpZy0+cGxsX3NldChmZSwgc3RhdGUtPmkyYywgcCk7Ci0JCXN0djAyOTlfd3JpdGVyZWdJKHN0YXRlLCAweDA1LCAweDM1KTsJLyogIGRpc2FibGUgaTJjIHJlcGVhdGVyIG9uIHN0djAyOTkgICovCi0KLQkJc3R2MDI5OV9zZXRfRkVDIChzdGF0ZSwgcC0+dS5xcHNrLmZlY19pbm5lcik7Ci0JCXN0djAyOTlfc2V0X3N5bWJvbHJhdGUgKGZlLCBwLT51LnFwc2suc3ltYm9sX3JhdGUpOwotCQlzdHYwMjk5X3dyaXRlcmVnSShzdGF0ZSwgMHgyMiwgMHgwMCk7Ci0JCXN0djAyOTlfd3JpdGVyZWdJKHN0YXRlLCAweDIzLCAweDAwKTsKLQkJc3R2MDI5OV9yZWFkcmVnIChzdGF0ZSwgMHgyMyk7Ci0JCXN0djAyOTlfd3JpdGVyZWdJKHN0YXRlLCAweDEyLCAweGI5KTsKLQl9CisJc3R2MDI5OV9zZXRfRkVDIChzdGF0ZSwgcC0+dS5xcHNrLmZlY19pbm5lcik7CisJc3R2MDI5OV9zZXRfc3ltYm9scmF0ZSAoZmUsIHAtPnUucXBzay5zeW1ib2xfcmF0ZSk7CisJc3R2MDI5OV93cml0ZXJlZ0koc3RhdGUsIDB4MjIsIDB4MDApOworCXN0djAyOTlfd3JpdGVyZWdJKHN0YXRlLCAweDIzLCAweDAwKTsKIAogCXN0YXRlLT50dW5lcl9mcmVxdWVuY3kgPSBwLT5mcmVxdWVuY3k7CiAJc3RhdGUtPmZlY19pbm5lciA9IHAtPnUucXBzay5mZWNfaW5uZXI7CkBAIC03MDgsNiArNjQ1LDcgQEAKIAlzdGF0ZS0+dHVuZXJfZnJlcXVlbmN5ID0gMDsKIAlzdGF0ZS0+c3ltYm9sX3JhdGUgPSAwOwogCXN0YXRlLT5mZWNfaW5uZXIgPSAwOworCXN0YXRlLT5lcnJtb2RlID0gU1RBVFVTX0JFUjsKIAogCS8qIGNoZWNrIGlmIHRoZSBkZW1vZCBpcyB0aGVyZSAqLwogCXN0djAyOTlfd3JpdGVyZWdJKHN0YXRlLCAweDAyLCAweDM0KTsgLyogc3RhbmRieSBvZmYgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwMjk5LmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDI5OS5oCmluZGV4IGQwYzQ0ODQuLjlhZjNkNzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwMjk5LmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djAyOTkuaApAQCAtNzMsOSArNzMsNiBAQAogCS8qIGRvZXMgdGhlIGludmVyc2lvbiByZXF1aXJlIGludmVyc2lvbj8gKi8KIAl1OCBpbnZlcnQ6MTsKIAotCS8qIFNob3VsZCB0aGUgZW5oYW5jZWQgdHVuaW5nIGNvZGUgYmUgdXNlZD8gKi8KLQl1OCBlbmhhbmNlZF90dW5pbmc6MTsKLQogCS8qIFNraXAgcmVpbml0aWFsaXNhdGlvbj8gKi8KIAl1OCBza2lwX3JlaW5pdDoxOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhMTAwNHguYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGExMDA0eC5jCmluZGV4IDM1MjljNjEuLjc5Njg3NDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGExMDA0eC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGExMDA0eC5jCkBAIC00MjAsNyArNDIwLDcgQEAKIAlzdHJ1Y3QgdGRhMTAwNHhfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAKIAl0ZGExMDA0eF93cml0ZV9ieXRlSShzdGF0ZSwgVERBMTAwNDZIX0NPTkZQTEwxLCAweGYwKTsKLQl0ZGExMDA0eF93cml0ZV9ieXRlSShzdGF0ZSwgVERBMTAwNDZIX0NPTkZQTEwyLCAxMCk7IC8vIFBMTCBNID0gMTAKKwl0ZGExMDA0eF93cml0ZV9ieXRlSShzdGF0ZSwgVERBMTAwNDZIX0NPTkZQTEwyLCAweDBhKTsgLy8gUExMIE0gPSAxMAogCWlmIChzdGF0ZS0+Y29uZmlnLT54dGFsX2ZyZXEgPT0gVERBMTAwNDZfWFRBTF80TSApIHsKIAkJZHByaW50aygiJXM6IHNldHRpbmcgdXAgUExMcyBmb3IgYSA0IE1IeiBYdGFsXG4iLCBfX0ZVTkNUSU9OX18pOwogCQl0ZGExMDA0eF93cml0ZV9ieXRlSShzdGF0ZSwgVERBMTAwNDZIX0NPTkZQTEwzLCAwKTsgLy8gUExMIFAgPSBOID0gMApAQCAtNTk3LDcgKzU5NywxMCBAQAogCS8vIEluaXQgdGhlIHR1bmVyIFBMTAogCWlmIChzdGF0ZS0+Y29uZmlnLT5wbGxfaW5pdCkgewogCQl0ZGExMDA0eF9lbmFibGVfdHVuZXJfaTJjKHN0YXRlKTsKLQkJc3RhdGUtPmNvbmZpZy0+cGxsX2luaXQoZmUpOworCQlpZiAoc3RhdGUtPmNvbmZpZy0+cGxsX2luaXQoZmUpKSB7CisJCQlwcmludGsoS0VSTl9FUlIgInRkYTEwMDR4OiBwbGwgaW5pdCBmYWlsZWRcbiIpOworCQkJcmV0dXJuIAktRUlPOworCQl9CiAJCXRkYTEwMDR4X2Rpc2FibGVfdHVuZXJfaTJjKHN0YXRlKTsKIAl9CiAKQEAgLTY2Nyw3ICs2NzAsMTAgQEAKIAogCS8vIHNldCBmcmVxdWVuY3kKIAl0ZGExMDA0eF9lbmFibGVfdHVuZXJfaTJjKHN0YXRlKTsKLQlzdGF0ZS0+Y29uZmlnLT5wbGxfc2V0KGZlLCBmZV9wYXJhbXMpOworCWlmIChzdGF0ZS0+Y29uZmlnLT5wbGxfc2V0KGZlLCBmZV9wYXJhbXMpKSB7CisJCXByaW50ayhLRVJOX0VSUiAidGRhMTAwNHg6IHBsbCBzZXQgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIAktRUlPOworCX0KIAl0ZGExMDA0eF9kaXNhYmxlX3R1bmVyX2kyYyhzdGF0ZSk7CiAKIAkvLyBIYXJkY29kZWQgdG8gdXNlIGF1dG8gYXMgbXVjaCBhcyBwb3NzaWJsZSBvbiB0aGUgVERBMTAwNDUgYXMgaXQKQEAgLTgzMiw2ICs4MzgsOCBAQAogCiAJY2FzZSBUREExMDA0WF9ERU1PRF9UREExMDA0NjoKIAkJdGRhMTAwNHhfd3JpdGVfbWFzayhzdGF0ZSwgVERBMTAwNFhfQVVUTywgMHg0MCwgMHg0MCk7CisJCW1zbGVlcCgxKTsKKwkJdGRhMTAwNHhfd3JpdGVfbWFzayhzdGF0ZSwgVERBMTAwNDZIX0FHQ19DT05GLCA0LCAxKTsKIAkJYnJlYWs7CiAJfQogCkBAIC0xMTI5LDcgKzExMzcsMTIgQEAKIAkJaWYgKHN0YXRlLT5jb25maWctPnBsbF9zbGVlcCAhPSBOVUxMKSB7CiAJCQl0ZGExMDA0eF9lbmFibGVfdHVuZXJfaTJjKHN0YXRlKTsKIAkJCXN0YXRlLT5jb25maWctPnBsbF9zbGVlcChmZSk7Ci0JCQl0ZGExMDA0eF9kaXNhYmxlX3R1bmVyX2kyYyhzdGF0ZSk7CisJCQlpZiAoc3RhdGUtPmNvbmZpZy0+aWZfZnJlcSAhPSBUREExMDA0Nl9GUkVRXzA1MikgeworCQkJCS8qIHNwZWNpYWwgaGFjayBmb3IgUGhpbGlwcyBFVVJPUEEgQmFzZWQgYm9hcmRzOgorCQkJCSAqIGtlZXAgdGhlIEkyYyBicmlkZ2Ugb3BlbiBmb3IgdHVuZXIgYWNjZXNzIGluIGFuYWxvZyBtb2RlCisJCQkJICovCisJCQkJdGRhMTAwNHhfZGlzYWJsZV90dW5lcl9pMmMoc3RhdGUpOworCQkJfQogCQl9CiAJCXRkYTEwMDR4X3dyaXRlX21hc2soc3RhdGUsIFREQTEwMDRYX0NPTkZDNCwgMSwgMSk7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvcGx1dG8yL3BsdXRvMi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvcGx1dG8yL3BsdXRvMi5jCmluZGV4IDg1YjQzN2IuLmJiZWJkMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3BsdXRvMi9wbHV0bzIuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9wbHV0bzIvcGx1dG8yLmMKQEAgLTI4NiwxNSArMjg2LDEwIEBACiAJICogICAgIGFsdGhvdWdoIG9uZSBwYWNrZXQgaGFzIGJlZW4gdHJhbnNmZXJlZC4KIAkgKi8KIAlpZiAoKG5icGFja2V0cyA9PSAwKSB8fCAobmJwYWNrZXRzID4gVFNfRE1BX1BBQ0tFVFMpKSB7Ci0JCXVuc2lnbmVkIGludCBpID0gMCwgdmFsaWQ7CisJCXVuc2lnbmVkIGludCBpID0gMDsKIAkJd2hpbGUgKHBsdXRvLT5kbWFfYnVmW2ldID09IDB4NDcpCiAJCQlpICs9IDE4ODsKLQkJdmFsaWQgPSBpIC8gMTg4OwotCQlpZiAobmJwYWNrZXRzICE9IHZhbGlkKSB7Ci0JCQlkZXZfZXJyKCZwbHV0by0+cGRldi0+ZGV2LCAibmJwYWNrZXRzPSV1IHZhbGlkPSV1XG4iLAotCQkJCQluYnBhY2tldHMsIHZhbGlkKTsKLQkJCW5icGFja2V0cyA9IHZhbGlkOwotCQl9CisJCW5icGFja2V0cyA9IGkgLyAxODg7CiAJfQogCiAJZHZiX2RteF9zd2ZpbHRlcl9wYWNrZXRzKCZwbHV0by0+ZGVtdXgsIHBsdXRvLT5kbWFfYnVmLCBuYnBhY2tldHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTAuYwppbmRleCAyMmIyMDNmLi44N2VhNTI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTAuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTAuYwpAQCAtMTU2Niw3ICsxNTY2LDcgQEAKIAkweDBlLCAweDIzLCAgIC8qIGFscGhhX3RtZyA9IDIsIGJldGFfdG1nID0gMyAqLwogCTB4MTAsIDB4M2YsICAgLy8gQUdDMiAgMHgzZAogCTB4MTEsIDB4ODQsCi0JMHgxMiwgMHhiNSwgICAvLyBMb2NrIGRldGVjdDogLTY0ICBDYXJyaWVyIGZyZXEgZGV0ZWN0Om9uCisJMHgxMiwgMHhiOSwKIAkweDE1LCAweGM5LCAgIC8vIGxvY2sgZGV0ZWN0b3IgdGhyZXNob2xkCiAJMHgxNiwgMHgwMCwKIAkweDE3LCAweDAwLApAQCAtMTY0NCw3ICsxNjQ0LDYgQEAKIAkuaW5pdHRhYiA9IGFscHNfYnNydTZfaW5pdHRhYiwKIAkubWNsayA9IDg4MDAwMDAwVUwsCiAJLmludmVydCA9IDEsCi0JLmVuaGFuY2VkX3R1bmluZyA9IDAsCiAJLnNraXBfcmVpbml0ID0gMCwKIAkubG9ja19vdXRwdXQgPSBTVFYwMjI5X0xPQ0tPVVRQVVRfMSwKIAkudm9sdDEzX29wMF9vcDEgPSBTVFYwMjk5X1ZPTFQxM19PUDEsCkBAIC0xNjY5LDcgKzE2NjgsNyBAQAogCTB4MGUsIDB4MjMsICAgLyogYWxwaGFfdG1nID0gMiwgYmV0YV90bWcgPSAzICovCiAJMHgxMCwgMHgzZiwgICAvLyBBR0MyICAweDNkCiAJMHgxMSwgMHg4NCwKLQkweDEyLCAweGI1LCAgIC8vIExvY2sgZGV0ZWN0OiAtNjQgIENhcnJpZXIgZnJlcSBkZXRlY3Q6b24KKwkweDEyLCAweGI5LAogCTB4MTUsIDB4YzksICAgLy8gbG9jayBkZXRlY3RvciB0aHJlc2hvbGQKIAkweDE2LCAweDAwLAogCTB4MTcsIDB4MDAsCkBAIC0xNzIxLDcgKzE3MjAsNiBAQAogCS5pbml0dGFiID0gYWxwc19ic2JlMV9pbml0dGFiLAogCS5tY2xrID0gODgwMDAwMDBVTCwKIAkuaW52ZXJ0ID0gMSwKLQkuZW5oYW5jZWRfdHVuaW5nID0gMCwKIAkuc2tpcF9yZWluaXQgPSAwLAogCS5taW5fZGVsYXlfbXMgPSAxMDAsCiAJLnNldF9zeW1ib2xfcmF0ZSA9IGFscHNfYnNydTZfc2V0X3N5bWJvbF9yYXRlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWF2LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtYXYuYwppbmRleCA3NjkyY2QyLi5hYTc1ZGMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtYXYuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtYXYuYwpAQCAtNDk5LDcgKzQ5OSw3IEBACiAJMHgwZSwgMHgyMywJCS8qIGFscGhhX3RtZyA9IDIsIGJldGFfdG1nID0gMyAqLwogCTB4MTAsIDB4M2YsCQkvLyBBR0MyICAweDNkCiAJMHgxMSwgMHg4NCwKLQkweDEyLCAweGI1LAkJLy8gTG9jayBkZXRlY3Q6IC02NCAgQ2FycmllciBmcmVxIGRldGVjdDpvbgorCTB4MTIsIDB4YjksCiAJMHgxNSwgMHhjOSwJCS8vIGxvY2sgZGV0ZWN0b3IgdGhyZXNob2xkCiAJMHgxNiwgMHgwMCwKIAkweDE3LCAweDAwLApAQCAtNTMxLDcgKzUzMSw2IEBACiAJLmluaXR0YWIgPSB0eXBob29uX2NpbmVyZ3kxMjAwc19pbml0dGFiLAogCS5tY2xrID0gODgwMDAwMDBVTCwKIAkuaW52ZXJ0ID0gMCwKLQkuZW5oYW5jZWRfdHVuaW5nID0gMCwKIAkuc2tpcF9yZWluaXQgPSAwLAogCS5sb2NrX291dHB1dCA9IFNUVjAyMjlfTE9DS09VVFBVVF8xLAogCS52b2x0MTNfb3AwX29wMSA9IFNUVjAyOTlfVk9MVDEzX09QMCwKQEAgLTU0Niw3ICs1NDUsNiBAQAogCS5pbml0dGFiID0gdHlwaG9vbl9jaW5lcmd5MTIwMHNfaW5pdHRhYiwKIAkubWNsayA9IDg4MDAwMDAwVUwsCiAJLmludmVydCA9IDAsCi0JLmVuaGFuY2VkX3R1bmluZyA9IDAsCiAJLnNraXBfcmVpbml0ID0gMCwKIAkubG9ja19vdXRwdXQgPSBTVFYwMjI5X0xPQ0tPVVRQVVRfMCwKIAkudm9sdDEzX29wMF9vcDEgPSBTVFYwMjk5X1ZPTFQxM19PUDAsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtY2kuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1jaS5jCmluZGV4IDUxYzMwYmEuLjc1ZmI5MmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1jaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1jaS5jCkBAIC00OTAsNyArNDkwLDcgQEAKIAkweDBlLCAweDIzLAkJLyogYWxwaGFfdG1nID0gMiwgYmV0YV90bWcgPSAzICovCiAJMHgxMCwgMHgzZiwJCS8vIEFHQzIgIDB4M2QKIAkweDExLCAweDg0LAotCTB4MTIsIDB4YjUsCQkvLyBMb2NrIGRldGVjdDogLTY0ICBDYXJyaWVyIGZyZXEgZGV0ZWN0Om9uCisJMHgxMiwgMHhiOSwKIAkweDE1LCAweGM5LAkJLy8gbG9jayBkZXRlY3RvciB0aHJlc2hvbGQKIAkweDE2LCAweDAwLAogCTB4MTcsIDB4MDAsCkBAIC01ODAsNyArNTgwLDYgQEAKIAkuaW5pdHRhYiA9IGFscHNfYnNydTZfaW5pdHRhYiwKIAkubWNsayA9IDg4MDAwMDAwVUwsCiAJLmludmVydCA9IDEsCi0JLmVuaGFuY2VkX3R1bmluZyA9IDAsCiAJLnNraXBfcmVpbml0ID0gMCwKIAkubG9ja19vdXRwdXQgPSBTVFYwMjI5X0xPQ0tPVVRQVVRfMSwKIAkudm9sdDEzX29wMF9vcDEgPSBTVFYwMjk5X1ZPTFQxM19PUDEsCkBAIC03MTAsNyArNzA5LDYgQEAKIAkuaW5pdHRhYiA9IHBoaWxpcHNfc3UxMjc4X3R0X2luaXR0YWIsCiAJLm1jbGsgPSA2NDAwMDAwMFVMLAogCS5pbnZlcnQgPSAwLAotCS5lbmhhbmNlZF90dW5pbmcgPSAxLAogCS5za2lwX3JlaW5pdCA9IDEsCiAJLmxvY2tfb3V0cHV0ID0gU1RWMDIyOV9MT0NLT1VUUFVUXzEsCiAJLnZvbHQxM19vcDBfb3AxID0gU1RWMDI5OV9WT0xUMTNfT1AxLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LXBhdGNoLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtcGF0Y2guYwppbmRleCBiMWYyMWVmLi43NTVkZjgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtcGF0Y2guYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtcGF0Y2guYwpAQCAtMzA1LDcgKzMwNSw3IEBACiAJMHgwZSwgMHgyMywgICAvKiBhbHBoYV90bWcgPSAyLCBiZXRhX3RtZyA9IDMgKi8KIAkweDEwLCAweDNmLCAgIC8vIEFHQzIgIDB4M2QKIAkweDExLCAweDg0LAotCTB4MTIsIDB4YjUsICAgLy8gTG9jayBkZXRlY3Q6IC02NCAgQ2FycmllciBmcmVxIGRldGVjdDpvbgorCTB4MTIsIDB4YjksCiAJMHgxNSwgMHhjOSwgICAvLyBsb2NrIGRldGVjdG9yIHRocmVzaG9sZAogCTB4MTYsIDB4MDAsCiAJMHgxNywgMHgwMCwKQEAgLTM3OSw3ICszNzksNiBAQAogCS5pbml0dGFiID0gYWxwc19ic3J1Nl9pbml0dGFiLAogCS5tY2xrID0gODgwMDAwMDBVTCwKIAkuaW52ZXJ0ID0gMSwKLQkuZW5oYW5jZWRfdHVuaW5nID0gMCwKIAkuc2tpcF9yZWluaXQgPSAwLAogCS5sb2NrX291dHB1dCA9IFNUVjAyMjlfTE9DS09VVFBVVF8xLAogCS52b2x0MTNfb3AwX29wMSA9IFNUVjAyOTlfVk9MVDEzX09QMSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LmMKaW5kZXggNDNkNmM4Mi4uNGZkOGJiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LmMKQEAgLTIyNiwxMiArMjI2LDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGxuYnAyMV9pbml0KHN0cnVjdCBidWRnZXQqIGJ1ZGdldCkKK3N0YXRpYyBpbnQgbG5icDIxX2luaXQoc3RydWN0IGJ1ZGdldCogYnVkZ2V0KQogewogCXU4IGJ1ZiA9IDB4MDA7CiAJc3RydWN0IGkyY19tc2cgbXNnID0geyAuYWRkciA9IDB4MDgsIC5mbGFncyA9IDAsIC5idWYgPSAmYnVmLCAubGVuID0gc2l6ZW9mKGJ1ZikgfTsKIAotCWkyY190cmFuc2ZlciAoJmJ1ZGdldC0+aTJjX2FkYXAsICZtc2csIDEpOworCWlmIChpMmNfdHJhbnNmZXIgKCZidWRnZXQtPmkyY19hZGFwLCAmbXNnLCAxKSAhPSAxKQorCQlyZXR1cm4gLUVJTzsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBhbHBzX2JzcnYyX3BsbF9zZXQoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyogcGFyYW1zKQpAQCAtMjczLDcgKzI3NSw3IEBACiAJMHgwMSwgMHgxNSwKIAkweDAyLCAweDAwLAogCTB4MDMsIDB4MDAsCi0gICAgICAgIDB4MDQsIDB4N2QsICAgLyogRjIyRlIgPSAweDdkLCBGMjIgPSBmX1ZDTyAvIDEyOCAvIDB4N2QgPSAyMiBrSHogKi8KKwkweDA0LCAweDdkLCAgIC8qIEYyMkZSID0gMHg3ZCwgRjIyID0gZl9WQ08gLyAxMjggLyAweDdkID0gMjIga0h6ICovCiAJMHgwNSwgMHgzNSwgICAvKiBJMkNUID0gMCwgU0NMVCA9IDEsIFNEQVQgPSAxICovCiAJMHgwNiwgMHg0MCwgICAvKiBEQUMgbm90IHVzZWQsIHNldCB0byBoaWdoIGltcGVuZGFuY2UgbW9kZSAqLwogCTB4MDcsIDB4MDAsICAgLyogREFDIExTQiAqLwpAQCAtMjg0LDcgKzI4Niw3IEBACiAJMHgwZSwgMHgyMywgICAvKiBhbHBoYV90bWcgPSAyLCBiZXRhX3RtZyA9IDMgKi8KIAkweDEwLCAweDNmLCAgIC8vIEFHQzIgIDB4M2QKIAkweDExLCAweDg0LAotCTB4MTIsIDB4YjUsICAgLy8gTG9jayBkZXRlY3Q6IC02NCAgQ2FycmllciBmcmVxIGRldGVjdDpvbgorCTB4MTIsIDB4YjksCiAJMHgxNSwgMHhjOSwgICAvLyBsb2NrIGRldGVjdG9yIHRocmVzaG9sZAogCTB4MTYsIDB4MDAsCiAJMHgxNywgMHgwMCwKQEAgLTM1OCw3ICszNjAsNiBAQAogCS5pbml0dGFiID0gYWxwc19ic3J1Nl9pbml0dGFiLAogCS5tY2xrID0gODgwMDAwMDBVTCwKIAkuaW52ZXJ0ID0gMSwKLQkuZW5oYW5jZWRfdHVuaW5nID0gMCwKIAkuc2tpcF9yZWluaXQgPSAwLAogCS5sb2NrX291dHB1dCA9IFNUVjAyMjlfTE9DS09VVFBVVF8xLAogCS52b2x0MTNfb3AwX29wMSA9IFNUVjAyOTlfVk9MVDEzX09QMSwKQEAgLTM2Nyw2ICszNjgsNzkgQEAKIAkucGxsX3NldCA9IGFscHNfYnNydTZfcGxsX3NldCwKIH07CiAKK3N0YXRpYyB1OCBhbHBzX2JzYmUxX2luaXR0YWJbXSA9IHsKKwkweDAxLCAweDE1LAorCTB4MDIsIDB4MzAsCisJMHgwMywgMHgwMCwKKwkweDA0LCAweDdkLCAgLyogRjIyRlIgPSAweDdkLCBGMjIgPSBmX1ZDTyAvIDEyOCAvIDB4N2QgPSAyMiBrSHogKi8KKwkweDA1LCAweDM1LCAgLyogSTJDVCA9IDAsIFNDTFQgPSAxLCBTREFUID0gMSAqLworCTB4MDYsIDB4NDAsICAvKiBEQUMgbm90IHVzZWQsIHNldCB0byBoaWdoIGltcGVuZGFuY2UgbW9kZSAqLworCTB4MDcsIDB4MDAsICAvKiBEQUMgTFNCICovCisJMHgwOCwgMHg0MCwgIC8qIERpU0VxQyBvZmYsIExOQiBwb3dlciBvbiBPUDIvTE9DSyBwaW4gb24gKi8KKwkweDA5LCAweDAwLCAgLyogRklGTyAqLworCTB4MGMsIDB4NTEsICAvKiBPUDEgY3RsID0gTm9ybWFsLCBPUDEgdmFsID0gMSAoTE5CIFBvd2VyIE9OKSAqLworCTB4MGQsIDB4ODIsICAvKiBEQyBvZmZzZXQgY29tcGVuc2F0aW9uID0gT04sIGJldGFfYWdjMSA9IDIgKi8KKwkweDBlLCAweDIzLCAgLyogYWxwaGFfdG1nID0gMiwgYmV0YV90bWcgPSAzICovCisJMHgxMCwgMHgzZiwgIC8vIEFHQzIgMHgzZAorCTB4MTEsIDB4ODQsCisJMHgxMiwgMHhiOSwKKwkweDE1LCAweGM5LCAgLy8gbG9jayBkZXRlY3RvciB0aHJlc2hvbGQKKwkweDE2LCAweDAwLAorCTB4MTcsIDB4MDAsCisJMHgxOCwgMHgwMCwKKwkweDE5LCAweDAwLAorCTB4MWEsIDB4MDAsCisJMHgxZiwgMHg1MCwKKwkweDIwLCAweDAwLAorCTB4MjEsIDB4MDAsCisJMHgyMiwgMHgwMCwKKwkweDIzLCAweDAwLAorCTB4MjgsIDB4MDAsIC8vIG91dCBpbXA6IG5vcm1hbCBvdXQgdHlwZTogcGFyYWxsZWwgRkVDIG1vZGU6MAorCTB4MjksIDB4MWUsIC8vIDEvMiB0aHJlc2hvbGQKKwkweDJhLCAweDE0LCAvLyAyLzMgdGhyZXNob2xkCisJMHgyYiwgMHgwZiwgLy8gMy80IHRocmVzaG9sZAorCTB4MmMsIDB4MDksIC8vIDUvNiB0aHJlc2hvbGQKKwkweDJkLCAweDA1LCAvLyA3LzggdGhyZXNob2xkCisJMHgyZSwgMHgwMSwKKwkweDMxLCAweDFmLCAvLyB0ZXN0IGFsbCBGRUNzCisJMHgzMiwgMHgxOSwgLy8gdml0ZXJiaSBhbmQgc3luY2hybyBzZWFyY2gKKwkweDMzLCAweGZjLCAvLyBycyBjb250cm9sCisJMHgzNCwgMHg5MywgLy8gZXJyb3IgY29udHJvbAorCTB4MGYsIDB4OTIsIC8vIDB4ODAgPSBpbnZlcnNlIEFHQworCTB4ZmYsIDB4ZmYKK307CisKK3N0YXRpYyBpbnQgYWxwc19ic2JlMV9wbGxfc2V0KHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzKiBwYXJhbXMpCit7CisJaW50IHJldDsKKwl1OCBkYXRhWzRdOworCXUzMiBkaXY7CisJc3RydWN0IGkyY19tc2cgbXNnID0geyAuYWRkciA9IDB4NjEsIC5mbGFncyA9IDAsIC5idWYgPSBkYXRhLCAubGVuID0gc2l6ZW9mKGRhdGEpIH07CisKKwlpZiAoKHBhcmFtcy0+ZnJlcXVlbmN5IDwgOTUwMDAwKSB8fCAocGFyYW1zLT5mcmVxdWVuY3kgPiAyMTUwMDAwKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkaXYgPSAocGFyYW1zLT5mcmVxdWVuY3kgKyAoMTI1IC0gMSkpIC8gMTI1OyAvLyByb3VuZCBjb3JyZWN0bHkKKwlkYXRhWzBdID0gKGRpdiA+PiA4KSAmIDB4N2Y7CisJZGF0YVsxXSA9IGRpdiAmIDB4ZmY7CisJZGF0YVsyXSA9IDB4ODAgfCAoKGRpdiAmIDB4MTgwMDApID4+IDEwKSB8IDQ7CisJZGF0YVszXSA9IChwYXJhbXMtPmZyZXF1ZW5jeSA+IDE1MzAwMDApID8gMHhFMCA6IDB4RTQ7CisKKwlyZXQgPSBpMmNfdHJhbnNmZXIoaTJjLCAmbXNnLCAxKTsKKwlyZXR1cm4gKHJldCAhPSAxKSA/IC1FSU8gOiAwOworfQorCitzdGF0aWMgc3RydWN0IHN0djAyOTlfY29uZmlnIGFscHNfYnNiZTFfY29uZmlnID0geworCS5kZW1vZF9hZGRyZXNzID0gMHg2OCwKKwkuaW5pdHRhYiA9IGFscHNfYnNiZTFfaW5pdHRhYiwKKwkubWNsayA9IDg4MDAwMDAwVUwsCisJLmludmVydCA9IDEsCisJLnNraXBfcmVpbml0ID0gMCwKKwkubWluX2RlbGF5X21zID0gMTAwLAorCS5zZXRfc3ltYm9sX3JhdGUgPSBhbHBzX2JzcnU2X3NldF9zeW1ib2xfcmF0ZSwKKwkucGxsX3NldCA9IGFscHNfYnNiZTFfcGxsX3NldCwKK307CisKIHN0YXRpYyBpbnQgYWxwc190ZGJlMl9wbGxfc2V0KHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMqIHBhcmFtcykKIHsKIAlzdHJ1Y3QgYnVkZ2V0KiBidWRnZXQgPSAoc3RydWN0IGJ1ZGdldCopIGZlLT5kdmItPnByaXY7CkBAIC01MDAsNiArNTc0LDE5IEBACiBzdGF0aWMgdm9pZCBmcm9udGVuZF9pbml0KHN0cnVjdCBidWRnZXQgKmJ1ZGdldCkKIHsKIAlzd2l0Y2goYnVkZ2V0LT5kZXYtPnBjaS0+c3Vic3lzdGVtX2RldmljZSkgeworCWNhc2UgMHgxMDE3OgorCQkvLyB0cnkgdGhlIEFMUFMgQlNCRTEgbm93CisJCWJ1ZGdldC0+ZHZiX2Zyb250ZW5kID0gc3R2MDI5OV9hdHRhY2goJmFscHNfYnNiZTFfY29uZmlnLCAmYnVkZ2V0LT5pMmNfYWRhcCk7CisJCWlmIChidWRnZXQtPmR2Yl9mcm9udGVuZCkgeworCQkJYnVkZ2V0LT5kdmJfZnJvbnRlbmQtPm9wcy0+c2V0X3ZvbHRhZ2UgPSBsbmJwMjFfc2V0X3ZvbHRhZ2U7CisJCQlidWRnZXQtPmR2Yl9mcm9udGVuZC0+b3BzLT5lbmFibGVfaGlnaF9sbmJfdm9sdGFnZSA9IGxuYnAyMV9lbmFibGVfaGlnaF9sbmJfdm9sdGFnZTsKKwkJCWlmIChsbmJwMjFfaW5pdChidWRnZXQpKSB7CisJCQkJcHJpbnRrKCIlczogTm8gTE5CUDIxIGZvdW5kIVxuIiwgX19GVU5DVElPTl9fKTsKKwkJCQlnb3RvIGVycm9yX291dDsKKwkJCX0KKwkJfQorCisJCWJyZWFrOwogCWNhc2UgMHgxMDAzOiAvLyBIYXVwcGF1Z2UvVFQgTm92YSBidWRnZXQgKHN0djAyOTkvQUxQUyBCU1JVNih0c2E1MDU5KSBPUiB2ZXMxODkzL0FMUFMgQlNSVjIoc3A1NjU5KSkKIAljYXNlIDB4MTAxMzoKIAkJLy8gdHJ5IHRoZSBBTFBTIEJTUlYyIGZpcnN0IG9mIGFsbApAQCAtNTU0LDcgKzY0MSwxMCBAQAogCQlpZiAoYnVkZ2V0LT5kdmJfZnJvbnRlbmQpIHsKIAkJCWJ1ZGdldC0+ZHZiX2Zyb250ZW5kLT5vcHMtPnNldF92b2x0YWdlID0gbG5icDIxX3NldF92b2x0YWdlOwogCQkJYnVkZ2V0LT5kdmJfZnJvbnRlbmQtPm9wcy0+ZW5hYmxlX2hpZ2hfbG5iX3ZvbHRhZ2UgPSBsbmJwMjFfZW5hYmxlX2hpZ2hfbG5iX3ZvbHRhZ2U7Ci0JCQlsbmJwMjFfaW5pdChidWRnZXQpOworCQkJaWYgKGxuYnAyMV9pbml0KGJ1ZGdldCkpIHsKKwkJCQlwcmludGsoIiVzOiBObyBMTkJQMjEgZm91bmQhXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJCWdvdG8gZXJyb3Jfb3V0OworCQkJfQogCQkJYnJlYWs7CiAJCX0KIAl9CkBAIC01NjYsMTMgKzY1NiwxNyBAQAogCQkgICAgICAgYnVkZ2V0LT5kZXYtPnBjaS0+c3Vic3lzdGVtX3ZlbmRvciwKIAkJICAgICAgIGJ1ZGdldC0+ZGV2LT5wY2ktPnN1YnN5c3RlbV9kZXZpY2UpOwogCX0gZWxzZSB7Ci0JCWlmIChkdmJfcmVnaXN0ZXJfZnJvbnRlbmQoJmJ1ZGdldC0+ZHZiX2FkYXB0ZXIsIGJ1ZGdldC0+ZHZiX2Zyb250ZW5kKSkgewotCQkJcHJpbnRrKCJidWRnZXQ6IEZyb250ZW5kIHJlZ2lzdHJhdGlvbiBmYWlsZWQhXG4iKTsKLQkJCWlmIChidWRnZXQtPmR2Yl9mcm9udGVuZC0+b3BzLT5yZWxlYXNlKQotCQkJCWJ1ZGdldC0+ZHZiX2Zyb250ZW5kLT5vcHMtPnJlbGVhc2UoYnVkZ2V0LT5kdmJfZnJvbnRlbmQpOwotCQkJYnVkZ2V0LT5kdmJfZnJvbnRlbmQgPSBOVUxMOwotCQl9CisJCWlmIChkdmJfcmVnaXN0ZXJfZnJvbnRlbmQoJmJ1ZGdldC0+ZHZiX2FkYXB0ZXIsIGJ1ZGdldC0+ZHZiX2Zyb250ZW5kKSkKKwkJCWdvdG8gZXJyb3Jfb3V0OwogCX0KKwlyZXR1cm47CisKK2Vycm9yX291dDoKKwlwcmludGsoImJ1ZGdldDogRnJvbnRlbmQgcmVnaXN0cmF0aW9uIGZhaWxlZCFcbiIpOworCWlmIChidWRnZXQtPmR2Yl9mcm9udGVuZC0+b3BzLT5yZWxlYXNlKQorCQlidWRnZXQtPmR2Yl9mcm9udGVuZC0+b3BzLT5yZWxlYXNlKGJ1ZGdldC0+ZHZiX2Zyb250ZW5kKTsKKwlidWRnZXQtPmR2Yl9mcm9udGVuZCA9IE5VTEw7CisJcmV0dXJuOwogfQogCiBzdGF0aWMgaW50IGJ1ZGdldF9hdHRhY2ggKHN0cnVjdCBzYWE3MTQ2X2RldiogZGV2LCBzdHJ1Y3Qgc2FhNzE0Nl9wY2lfZXh0ZW5zaW9uX2RhdGEgKmluZm8pCkBAIC02MTgsNiArNzEyLDcgQEAKIAogc3RhdGljIHN0cnVjdCBzYWE3MTQ2X2V4dGVuc2lvbiBidWRnZXRfZXh0ZW5zaW9uOwogCitNQUtFX0JVREdFVF9JTkZPKHR0YnMyLCAiVFQtQnVkZ2V0L1dpblRWLU5PVkEtUyBQQ0kgKHJldiBBTC9hbHBzIGJzYmUxIGxuYnAyMSBmcm9udGVuZCkiLCBCVURHRVRfVFQpOwogTUFLRV9CVURHRVRfSU5GTyh0dGJzLAkiVFQtQnVkZ2V0L1dpblRWLU5PVkEtUyAgUENJIiwJQlVER0VUX1RUKTsKIE1BS0VfQlVER0VUX0lORk8odHRiYywJIlRULUJ1ZGdldC9XaW5UVi1OT1ZBLUMgIFBDSSIsCUJVREdFVF9UVCk7CiBNQUtFX0JVREdFVF9JTkZPKHR0YnQsCSJUVC1CdWRnZXQvV2luVFYtTk9WQS1UICBQQ0kiLAlCVURHRVRfVFQpOwpAQCAtNjMwLDYgKzcyNSw3IEBACiAJTUFLRV9FWFRFTlNJT05fUENJKHR0YmMsICAweDEzYzIsIDB4MTAwNCksCiAJTUFLRV9FWFRFTlNJT05fUENJKHR0YnQsICAweDEzYzIsIDB4MTAwNSksCiAJTUFLRV9FWFRFTlNJT05fUENJKHNhdGVsLCAweDEzYzIsIDB4MTAxMyksCisJTUFLRV9FWFRFTlNJT05fUENJKHR0YnMyLCAweDEzYzIsIDB4MTAxNyksCiAJTUFLRV9FWFRFTlNJT05fUENJKHR0YnMsICAweDEzYzIsIDB4MTAxNiksCiAJTUFLRV9FWFRFTlNJT05fUENJKGZzYWNzMSwweDExMzEsIDB4NGY2MCksCiAJTUFLRV9FWFRFTlNJT05fUENJKGZzYWNzMCwweDExMzEsIDB4NGY2MSksCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHVzYi1idWRnZXQvZHZiLXR0dXNiLWJ1ZGdldC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvdHR1c2ItYnVkZ2V0L2R2Yi10dHVzYi1idWRnZXQuYwppbmRleCBkMjAwYWIwLi5mZDUzZDYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHVzYi1idWRnZXQvZHZiLXR0dXNiLWJ1ZGdldC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0dXNiLWJ1ZGdldC9kdmItdHR1c2ItYnVkZ2V0LmMKQEAgLTExOTgsNyArMTE5OCw3IEBACiAgICAgICAgIDB4MGUsIDB4MjMsICAgICAgICAgICAgIC8qIGFscGhhX3RtZyA9IDIsIGJldGFfdG1nID0gMyAqLwogICAgICAgICAweDEwLCAweDNmLCAgICAgICAgICAgICAvLyBBR0MyICAweDNkCiAgICAgICAgIDB4MTEsIDB4ODQsCi0gICAgICAgIDB4MTIsIDB4YjUsICAgICAgICAgICAgIC8vIExvY2sgZGV0ZWN0OiAtNjQgIENhcnJpZXIgZnJlcSBkZXRlY3Q6b24KKyAgICAgICAgMHgxMiwgMHhiOSwKICAgICAgICAgMHgxNSwgMHhjOSwgICAgICAgICAgICAgLy8gbG9jayBkZXRlY3RvciB0aHJlc2hvbGQKICAgICAgICAgMHgxNiwgMHgwMCwKICAgICAgICAgMHgxNywgMHgwMCwKQEAgLTEyNDAsNyArMTI0MCw3IEBACiAJMHgwZSwgMHgyMywJCS8qIGFscGhhX3RtZyA9IDIsIGJldGFfdG1nID0gMyAqLwogCTB4MTAsIDB4M2YsCQkvLyBBR0MyICAweDNkCiAJMHgxMSwgMHg4NCwKLQkweDEyLCAweGI1LAkJLy8gTG9jayBkZXRlY3Q6IC02NCAgQ2FycmllciBmcmVxIGRldGVjdDpvbgorCTB4MTIsIDB4YjksCiAJMHgxNSwgMHhjOSwJCS8vIGxvY2sgZGV0ZWN0b3IgdGhyZXNob2xkCiAJMHgxNiwgMHgwMCwKIAkweDE3LCAweDAwLApAQCAtMTMzNSw3ICsxMzM1LDYgQEAKIAkuaW5pdHRhYiA9IGFscHNfYnNydTZfaW5pdHRhYiwKIAkubWNsayA9IDg4MDAwMDAwVUwsCiAJLmludmVydCA9IDEsCi0JLmVuaGFuY2VkX3R1bmluZyA9IDAsCiAJLnNraXBfcmVpbml0ID0gMCwKIAkubG9ja19vdXRwdXQgPSBTVFYwMjI5X0xPQ0tPVVRQVVRfMSwKIAkudm9sdDEzX29wMF9vcDEgPSBTVFYwMjk5X1ZPTFQxM19PUDEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL0tjb25maWcKaW5kZXggYmJiOTg5ZC4uMTk5YjAxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vS2NvbmZpZwpAQCAtMjUsNiArMjUsMTYgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGJ0dHYuCiAKK2NvbmZpZyBWSURFT19CVDg0OF9EVkIKKwl0cmlzdGF0ZSAiRFZCL0FUU0MgU3VwcG9ydCBmb3IgYnQ4NzggYmFzZWQgVFYgY2FyZHMiCisJZGVwZW5kcyBvbiBWSURFT19CVDg0OCAmJiBEVkJfQ09SRQorCXNlbGVjdCBEVkJfQlQ4WFgKKwktLS1oZWxwLS0tCisJICBUaGlzIGFkZHMgc3VwcG9ydCBmb3IgRFZCL0FUU0MgY2FyZHMgYmFzZWQgb24gdGhlIEJUODc4IGNoaXAuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGR2Yi1idDh4eC4KKwogY29uZmlnIFZJREVPX1NBQTY1ODgKIAl0cmlzdGF0ZSAiU0FBNjU4OCBSYWRpbyBDaGlwIFJEUyBkZWNvZGVyIHN1cHBvcnQgb24gQlQ4NDggY2FyZHMiCiAJZGVwZW5kcyBvbiBWSURFT19ERVYgJiYgSTJDICYmIFZJREVPX0JUODQ4CkBAIC0yNDMsMjkgKzI1Myw3IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBtZXllLgogCi1jb25maWcgVklERU9fU0FBNzEzNAotCXRyaXN0YXRlICJQaGlsaXBzIFNBQTcxMzQgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFZJREVPX0RFViAmJiBQQ0kgJiYgSTJDICYmIFNPVU5ECi0Jc2VsZWN0IFZJREVPX0JVRgotCXNlbGVjdCBWSURFT19JUgotCXNlbGVjdCBWSURFT19UVU5FUgotCXNlbGVjdCBDUkMzMgotCS0tLWhlbHAtLS0KLQkgIFRoaXMgaXMgYSB2aWRlbzRsaW51eCBkcml2ZXIgZm9yIFBoaWxpcHMgU0FBNzEzMC83MTM0IGJhc2VkCi0JICBUViBjYXJkcy4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2FhNzEzNC4KLQotY29uZmlnIFZJREVPX1NBQTcxMzRfRFZCCi0JdHJpc3RhdGUgIkRWQiBTdXBwb3J0IGZvciBzYWE3MTM0IGJhc2VkIFRWIGNhcmRzIgotCWRlcGVuZHMgb24gVklERU9fU0FBNzEzNCAmJiBEVkJfQ09SRQotCXNlbGVjdCBWSURFT19CVUZfRFZCCi0Jc2VsZWN0IERWQl9NVDM1MgotCXNlbGVjdCBEVkJfVERBMTAwNFgKLQktLS1oZWxwLS0tCi0JICBUaGlzIGFkZHMgc3VwcG9ydCBmb3IgRFZCIGNhcmRzIGJhc2VkIG9uIHRoZQotCSAgUGhpbGlwcyBzYWE3MTM0IGNoaXAuCitzb3VyY2UgImRyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9LY29uZmlnIgogCiBjb25maWcgVklERU9fTVhCCiAJdHJpc3RhdGUgIlNpZW1lbnMtTml4ZG9yZiAnTXVsdGltZWRpYSBlWHRlbnNpb24gQm9hcmQnIgpAQCAtMzE2LDM0ICszMDQsOSBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgaGV4aXVtX2dlbWluaS4KIAotY29uZmlnIFZJREVPX0NYODgKLQl0cmlzdGF0ZSAiQ29uZXhhbnQgMjM4OHggKGJ0ODc4IHN1Y2Nlc3Nvcikgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFZJREVPX0RFViAmJiBQQ0kgJiYgSTJDICYmIEVYUEVSSU1FTlRBTAotCXNlbGVjdCBJMkNfQUxHT0JJVAotCXNlbGVjdCBGV19MT0FERVIKLQlzZWxlY3QgVklERU9fQlRDWAotCXNlbGVjdCBWSURFT19CVUYKLQlzZWxlY3QgVklERU9fVFVORVIKLQlzZWxlY3QgVklERU9fVFZFRVBST00KLQlzZWxlY3QgVklERU9fSVIKLQktLS1oZWxwLS0tCi0JICBUaGlzIGlzIGEgdmlkZW80bGludXggZHJpdmVyIGZvciBDb25leGFudCAyMzg4eCBiYXNlZAotCSAgVFYgY2FyZHMuCitzb3VyY2UgImRyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9LY29uZmlnIgogCi0JICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjeDg4MDAKLQotY29uZmlnIFZJREVPX0NYODhfRFZCCi0JdHJpc3RhdGUgIkRWQiBTdXBwb3J0IGZvciBjeDIzODh4IGJhc2VkIFRWIGNhcmRzIgotCWRlcGVuZHMgb24gVklERU9fQ1g4OCAmJiBEVkJfQ09SRQotCXNlbGVjdCBWSURFT19CVUZfRFZCCi0Jc2VsZWN0IERWQl9NVDM1MgotCXNlbGVjdCBEVkJfT1I1MTEzMgotCXNlbGVjdCBEVkJfQ1gyMjcwMgotCXNlbGVjdCBEVkJfTEdEVDMzMFgKLQktLS1oZWxwLS0tCi0JICBUaGlzIGFkZHMgc3VwcG9ydCBmb3IgRFZCL0FUU0MgY2FyZHMgYmFzZWQgb24gdGhlCi0JICBDb25uZXhhbnQgMjM4OHggY2hpcC4KK3NvdXJjZSAiZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvS2NvbmZpZyIKIAogY29uZmlnIFZJREVPX09WQ0FNQ0hJUAogCXRyaXN0YXRlICJPbW5pVmlzaW9uIENhbWVyYSBDaGlwIHN1cHBvcnQiCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS92aWRlby9NYWtlZmlsZQppbmRleCAwNDZiODJkLi4zYWM0NjU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vTWFrZWZpbGUKQEAgLTUsNyArNSw2IEBACiBidHR2LW9ianMJOj0JYnR0di1kcml2ZXIubyBidHR2LWNhcmRzLm8gYnR0di1pZi5vIFwKIAkJCWJ0dHYtcmlzYy5vIGJ0dHYtdmJpLm8gYnR0di1pMmMubyBidHR2LWdwaW8ubwogem9yYW4tb2JqcyAgICAgIDo9CXpyMzYxMjAubyB6cjM2MTIwX2kyYy5vIHpyMzYxMjBfbWVtLm8KLXJkcy1vYmpzICAgICAgICA6PQlzYWE2NTg4Lm8KIHpyMzYwNjctb2Jqcwk6PQl6b3Jhbl9wcm9jZnMubyB6b3Jhbl9kZXZpY2UubyBcCiAJCQl6b3Jhbl9kcml2ZXIubyB6b3Jhbl9jYXJkLm8KIHR1bmVyLW9ianMJOj0JdHVuZXItY29yZS5vIHR1bmVyLXNpbXBsZS5vIG10MjB4eC5vIHRkYTgyOTAubyB0ZWE1NzY3Lm8KQEAgLTE2LDcgKzE1LDcgQEAKIG9iai0kKENPTkZJR19TT1VORF9UVk1JWEVSKSArPSB0dm1peGVyLm8KIAogb2JqLSQoQ09ORklHX1ZJREVPX1pSMzYxMjApICs9IHpvcmFuLm8KLW9iai0kKENPTkZJR19WSURFT19TQUE2NTg4KSArPSByZHMubworb2JqLSQoQ09ORklHX1ZJREVPX1NBQTY1ODgpICs9IHNhYTY1ODgubwogb2JqLSQoQ09ORklHX1ZJREVPX1NBQTUyNDZBKSArPSBzYWE1MjQ2YS5vCiBvYmotJChDT05GSUdfVklERU9fU0FBNTI0OSkgKz0gc2FhNTI0OS5vCiBvYmotJChDT05GSUdfVklERU9fQ1FDQU0pICs9IGMtcWNhbS5vCkBAIC0zOSw2ICszOCw4IEBACiBvYmotJChDT05GSUdfVklERU9fTUVZRSkgKz0gbWV5ZS5vCiBvYmotJChDT05GSUdfVklERU9fU0FBNzEzNCkgKz0gc2FhNzEzNC8KIG9iai0kKENPTkZJR19WSURFT19DWDg4KSArPSBjeDg4Lworb2JqLSQoQ09ORklHX1ZJREVPX0VNMjhYWCkgKz0gZW0yOHh4Lworb2JqLSQoQ09ORklHX1ZJREVPX0VNMjhYWCkgKz0gc2FhNzExeC5vIHR2cDUxNTAubwogb2JqLSQoQ09ORklHX1ZJREVPX09WQ0FNQ0hJUCkgKz0gb3ZjYW1jaGlwLwogb2JqLSQoQ09ORklHX1ZJREVPX01YQikgKz0gc2FhNzExMS5vIHR1bmVyLm8gdGRhOTg0MC5vIHRlYTY0MTVjLm8gdGVhNjQyMC5vIG14Yi5vCiBvYmotJChDT05GSUdfVklERU9fSEVYSVVNX09SSU9OKSArPSBoZXhpdW1fb3Jpb24ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9hcnYuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXJ2LmMKaW5kZXggMDgyM2RkYS4uODgxY2RjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9hcnYuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2Fydi5jCkBAIC0yMiw3ICsyMiw2IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmZzX2ZzX2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4MzIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4MzIuYwppbmRleCA3NmMxYjYzLi5lNDA2Mzk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0ODMyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDgzMi5jCkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogCiAjaW5jbHVkZSA8bWVkaWEvYXVkaW9jaGlwLmg+Ci0jaW5jbHVkZSA8bWVkaWEvaWQuaD4KICNpbmNsdWRlICJidHR2LmgiCiAjaW5jbHVkZSAiYnQ4MzIuaCIKIApAQCAtNTQsMzYgKzUzLDM2IEBACiBzdGF0aWMgc3RydWN0IGkyY19jbGllbnQgY2xpZW50X3RlbXBsYXRlOwogCiBzdHJ1Y3QgYnQ4MzIgewotICAgICAgICBzdHJ1Y3QgaTJjX2NsaWVudCBjbGllbnQ7CisJc3RydWN0IGkyY19jbGllbnQgY2xpZW50OwogfTsKIAogaW50IGJ0ODMyX2hleGR1bXAoc3RydWN0IGkyY19jbGllbnQgKmkyY19jbGllbnRfcywgdW5zaWduZWQgY2hhciAqYnVmKQogewogCWludCBpLHJjOwogCWJ1ZlswXT0weDgwOyAvLyBzdGFydCBhdCByZWdpc3RlciAwIHdpdGggYXV0by1pbmNyZW1lbnQKLSAgICAgICAgaWYgKDEgIT0gKHJjID0gaTJjX21hc3Rlcl9zZW5kKGkyY19jbGllbnRfcyxidWYsMSkpKQotICAgICAgICAgICAgICAgIHByaW50aygiYnQ4MzI6IGkyYyBpL28gZXJyb3I6IHJjID09ICVkIChzaG91bGQgYmUgMSlcbiIscmMpOworCWlmICgxICE9IChyYyA9IGkyY19tYXN0ZXJfc2VuZChpMmNfY2xpZW50X3MsYnVmLDEpKSkKKwkJcHJpbnRrKCJidDgzMjogaTJjIGkvbyBlcnJvcjogcmMgPT0gJWQgKHNob3VsZCBiZSAxKVxuIixyYyk7CiAKLSAgICAgICAgZm9yKGk9MDtpPDY1O2krKykKLSAgICAgICAgICAgICAgICBidWZbaV09MDsKLSAgICAgICAgaWYgKDY1ICE9IChyYz1pMmNfbWFzdGVyX3JlY3YoaTJjX2NsaWVudF9zLGJ1Ziw2NSkpKQotICAgICAgICAgICAgICAgIHByaW50aygiYnQ4MzI6IGkyYyBpL28gZXJyb3I6IHJjID09ICVkIChzaG91bGQgYmUgNjUpXG4iLHJjKTsKKwlmb3IoaT0wO2k8NjU7aSsrKQorCQlidWZbaV09MDsKKwlpZiAoNjUgIT0gKHJjPWkyY19tYXN0ZXJfcmVjdihpMmNfY2xpZW50X3MsYnVmLDY1KSkpCisJCXByaW50aygiYnQ4MzI6IGkyYyBpL28gZXJyb3I6IHJjID09ICVkIChzaG91bGQgYmUgNjUpXG4iLHJjKTsKIAotICAgICAgICAvLyBOb3RlOiBPbiBSRUFEIHRoZSBmaXJzdCBieXRlIGlzIHRoZSBjdXJyZW50IGluZGV4Ci0gICAgICAgIC8vICAoZS5nLiAweDgwLCB3aGF0IHdlIGp1c3Qgd3JvdGUpCisJLy8gTm90ZTogT24gUkVBRCB0aGUgZmlyc3QgYnl0ZSBpcyB0aGUgY3VycmVudCBpbmRleAorCS8vICAoZS5nLiAweDgwLCB3aGF0IHdlIGp1c3Qgd3JvdGUpCiAKLSAgICAgICAgaWYoMSkgewotICAgICAgICAgICAgICAgIGludCBpOwotICAgICAgICAgICAgICAgIHByaW50aygiQlQ4MzIgaGV4ZHVtcDpcbiIpOwotICAgICAgICAgICAgICAgIGZvcihpPTE7aTw2NTtpKyspIHsKKwlpZigxKSB7CisJCWludCBpOworCQlwcmludGsoIkJUODMyIGhleGR1bXA6XG4iKTsKKwkJZm9yKGk9MTtpPDY1O2krKykgewogCQkJaWYoaSE9MSkgewogCQkJICBpZigoKGktMSklOCk9PTApIHByaW50aygiICIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICBpZigoKGktMSklMTYpPT0wKSBwcmludGsoIlxuIik7CisJCQkgIGlmKCgoaS0xKSUxNik9PTApIHByaW50aygiXG4iKTsKIAkJCX0KLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiICUwMngiLGJ1ZltpXSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHByaW50aygiXG4iKTsKLSAgICAgICAgfQorCQkJcHJpbnRrKCIgJTAyeCIsYnVmW2ldKTsKKwkJfQorCQlwcmludGsoIlxuIik7CisJfQogCXJldHVybiAwOwogfQogCkBAIC0xMDIsMTMgKzEwMSwxMyBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLSAgICAgICAgcHJpbnRrKCJXcml0ZSAwIHRwIFZQU1RBVFVTXG4iKTsKLSAgICAgICAgYnVmWzBdPUJUODMyX1ZQX1NUQVRVUzsgLy8gUmVnLjUyCi0gICAgICAgIGJ1ZlsxXT0gMHgwMDsKLSAgICAgICAgaWYgKDIgIT0gKHJjID0gaTJjX21hc3Rlcl9zZW5kKGkyY19jbGllbnRfcyxidWYsMikpKQotICAgICAgICAgICAgICAgIHByaW50aygiYnQ4MzI6IGkyYyBpL28gZXJyb3IgVlBTOiByYyA9PSAlZCAoc2hvdWxkIGJlIDIpXG4iLHJjKTsKKwlwcmludGsoIldyaXRlIDAgdHAgVlBTVEFUVVNcbiIpOworCWJ1ZlswXT1CVDgzMl9WUF9TVEFUVVM7IC8vIFJlZy41MgorCWJ1ZlsxXT0gMHgwMDsKKwlpZiAoMiAhPSAocmMgPSBpMmNfbWFzdGVyX3NlbmQoaTJjX2NsaWVudF9zLGJ1ZiwyKSkpCisJCXByaW50aygiYnQ4MzI6IGkyYyBpL28gZXJyb3IgVlBTOiByYyA9PSAlZCAoc2hvdWxkIGJlIDIpXG4iLHJjKTsKIAotICAgICAgICBidDgzMl9oZXhkdW1wKGkyY19jbGllbnRfcyxidWYpOworCWJ0ODMyX2hleGR1bXAoaTJjX2NsaWVudF9zLGJ1Zik7CiAKIAogCS8vIExlYXZlIGxvdyBwb3dlciBtb2RlOgpAQCAtMTE2LDE3ICsxMTUsMTcgQEAKIAlidWZbMF09QlQ4MzJfQ0FNX1NFVFVQMDsgLy8weDM5IDU3CiAJYnVmWzFdPTB4MDg7CiAJaWYgKDIgIT0gKHJjID0gaTJjX21hc3Rlcl9zZW5kKGkyY19jbGllbnRfcyxidWYsMikpKQotICAgICAgICAgICAgICAgIHByaW50aygiYnQ4MzI6IGkyYyBpL28gZXJyb3IgTExQTTogcmMgPT0gJWQgKHNob3VsZCBiZSAyKVxuIixyYyk7CisJCXByaW50aygiYnQ4MzI6IGkyYyBpL28gZXJyb3IgTExQTTogcmMgPT0gJWQgKHNob3VsZCBiZSAyKVxuIixyYyk7CiAKLSAgICAgICAgYnQ4MzJfaGV4ZHVtcChpMmNfY2xpZW50X3MsYnVmKTsKKwlidDgzMl9oZXhkdW1wKGkyY19jbGllbnRfcyxidWYpOwogCiAJcHJpbnRrKCJXcml0ZSAwIHRwIFZQU1RBVFVTXG4iKTsKLSAgICAgICAgYnVmWzBdPUJUODMyX1ZQX1NUQVRVUzsgLy8gUmVnLjUyCi0gICAgICAgIGJ1ZlsxXT0gMHgwMDsKLSAgICAgICAgaWYgKDIgIT0gKHJjID0gaTJjX21hc3Rlcl9zZW5kKGkyY19jbGllbnRfcyxidWYsMikpKQotICAgICAgICAgICAgICAgIHByaW50aygiYnQ4MzI6IGkyYyBpL28gZXJyb3IgVlBTOiByYyA9PSAlZCAoc2hvdWxkIGJlIDIpXG4iLHJjKTsKKwlidWZbMF09QlQ4MzJfVlBfU1RBVFVTOyAvLyBSZWcuNTIKKwlidWZbMV09IDB4MDA7CisJaWYgKDIgIT0gKHJjID0gaTJjX21hc3Rlcl9zZW5kKGkyY19jbGllbnRfcyxidWYsMikpKQorCQlwcmludGsoImJ0ODMyOiBpMmMgaS9vIGVycm9yIFZQUzogcmMgPT0gJWQgKHNob3VsZCBiZSAyKVxuIixyYyk7CiAKLSAgICAgICAgYnQ4MzJfaGV4ZHVtcChpMmNfY2xpZW50X3MsYnVmKTsKKwlidDgzMl9oZXhkdW1wKGkyY19jbGllbnRfcyxidWYpOwogCiAKIAkvLyBFbmFibGUgT3V0cHV0CkBAIC0xMzQsMjIgKzEzMywyMiBAQAogCWJ1ZlswXT1CVDgzMl9WUF9DT05UUk9MMTsgLy8gUmVnLjQwCiAJYnVmWzFdPSAweDI3ICYgKH4weDAxKTsgLy8gRGVmYXVsdCB8ICFza2lwCiAJaWYgKDIgIT0gKHJjID0gaTJjX21hc3Rlcl9zZW5kKGkyY19jbGllbnRfcyxidWYsMikpKQotICAgICAgICAgICAgICAgIHByaW50aygiYnQ4MzI6IGkyYyBpL28gZXJyb3IgRU86IHJjID09ICVkIChzaG91bGQgYmUgMilcbiIscmMpOworCQlwcmludGsoImJ0ODMyOiBpMmMgaS9vIGVycm9yIEVPOiByYyA9PSAlZCAoc2hvdWxkIGJlIDIpXG4iLHJjKTsKIAotICAgICAgICBidDgzMl9oZXhkdW1wKGkyY19jbGllbnRfcyxidWYpOworCWJ0ODMyX2hleGR1bXAoaTJjX2NsaWVudF9zLGJ1Zik7CiAKIAogCS8vIGZvciB0ZXN0aW5nIChldmVuIHdvcmtzIHdoZW4gbm8gY2FtZXJhIGF0dGFjaGVkKQogCXByaW50aygiYnQ4MzI6ICoqKiBHZW5lcmF0ZSBOVFNDIE0gQmFycyAqKioqKlxuIik7CiAJYnVmWzBdPUJUODMyX1ZQX1RFU1RDT05UUk9MMDsgLy8gUmVnLiA0MgogCWJ1ZlsxXT0zOyAvLyBHZW5lcmF0ZSBOVFNDIFN5c3RlbSBNIGJhcnMsIEdlbmVyYXRlIEZyYW1lIHRpbWluZyBpbnRlcm5hbGx5Ci0gICAgICAgIGlmICgyICE9IChyYyA9IGkyY19tYXN0ZXJfc2VuZChpMmNfY2xpZW50X3MsYnVmLDIpKSkKLSAgICAgICAgICAgICAgICBwcmludGsoImJ0ODMyOiBpMmMgaS9vIGVycm9yIE1CQVI6IHJjID09ICVkIChzaG91bGQgYmUgMilcbiIscmMpOworCWlmICgyICE9IChyYyA9IGkyY19tYXN0ZXJfc2VuZChpMmNfY2xpZW50X3MsYnVmLDIpKSkKKwkJcHJpbnRrKCJidDgzMjogaTJjIGkvbyBlcnJvciBNQkFSOiByYyA9PSAlZCAoc2hvdWxkIGJlIDIpXG4iLHJjKTsKIAogCXByaW50aygiQnQ4MzI6IENhbWVyYSBQcmVzZW50OiAlc1xuIiwKIAkJKGJ1ZlsxK0JUODMyX0NBTV9TVEFUVVNdICYgQlQ4MzJfNTZfQ0FNRVJBX1BSRVNFTlQpID8gInllcyI6Im5vIik7CiAKLSAgICAgICAgYnQ4MzJfaGV4ZHVtcChpMmNfY2xpZW50X3MsYnVmKTsKKwlidDgzMl9oZXhkdW1wKGkyY19jbGllbnRfcyxidWYpOwogCWtmcmVlKGJ1Zik7CiAJcmV0dXJuIDE7CiB9CkBAIC0xNjIsMTcgKzE2MSwxNyBAQAogCiAJcHJpbnRrKCJidDgzMl9hdHRhY2hcbiIpOwogCi0gICAgICAgIGNsaWVudF90ZW1wbGF0ZS5hZGFwdGVyID0gYWRhcDsKLSAgICAgICAgY2xpZW50X3RlbXBsYXRlLmFkZHIgICAgPSBhZGRyOworCWNsaWVudF90ZW1wbGF0ZS5hZGFwdGVyID0gYWRhcDsKKwljbGllbnRfdGVtcGxhdGUuYWRkciAgICA9IGFkZHI7CiAKLSAgICAgICAgcHJpbnRrKCJidDgzMjogY2hpcCBmb3VuZCBAIDB4JXhcbiIsIGFkZHI8PDEpOworCXByaW50aygiYnQ4MzI6IGNoaXAgZm91bmQgQCAweCV4XG4iLCBhZGRyPDwxKTsKIAotICAgICAgICBpZiAoTlVMTCA9PSAodCA9IGttYWxsb2Moc2l6ZW9mKCp0KSwgR0ZQX0tFUk5FTCkpKQotICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOworCWlmIChOVUxMID09ICh0ID0ga21hbGxvYyhzaXplb2YoKnQpLCBHRlBfS0VSTkVMKSkpCisJCXJldHVybiAtRU5PTUVNOwogCW1lbXNldCh0LDAsc2l6ZW9mKCp0KSk7CiAJdC0+Y2xpZW50ID0gY2xpZW50X3RlbXBsYXRlOwotICAgICAgICBpMmNfc2V0X2NsaWVudGRhdGEoJnQtPmNsaWVudCwgdCk7Ci0gICAgICAgIGkyY19hdHRhY2hfY2xpZW50KCZ0LT5jbGllbnQpOworCWkyY19zZXRfY2xpZW50ZGF0YSgmdC0+Y2xpZW50LCB0KTsKKwlpMmNfYXR0YWNoX2NsaWVudCgmdC0+Y2xpZW50KTsKIAogCWlmKCEgYnQ4MzJfaW5pdCgmdC0+Y2xpZW50KSkgewogCQlidDgzMl9kZXRhY2goJnQtPmNsaWVudCk7CkBAIC0yMTEsNyArMjEwLDcgQEAKIAogCXByaW50aygiYnQ4MzI6IGNvbW1hbmQgJXhcbiIsY21kKTsKIAotICAgICAgICBzd2l0Y2ggKGNtZCkgeworCXN3aXRjaCAoY21kKSB7CiAJCWNhc2UgQlQ4MzJfSEVYRFVNUDogewogCQkJdW5zaWduZWQgY2hhciAqYnVmOwogCQkJYnVmPWttYWxsb2MoNjUsR0ZQX0tFUk5FTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0ODMyLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0ODMyLmgKaW5kZXggOWI2YThkMi4uMWNlOGZhNzFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0ODMyLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDgzMi5oCkBAIC0yMzMsOCArMjMzLDggQEAKIC8qIGZyb20gd2ViOgogIFZpZGVvIFNhbXBsaW5nCiBEaWdpdGFsIHZpZGVvIGlzIGEgc2FtcGxlZCBmb3JtIG9mIGFuYWxvZyB2aWRlby4gVGhlIG1vc3QgY29tbW9uIHNhbXBsaW5nIHNjaGVtZXMgaW4gdXNlIHRvZGF5IGFyZToKLSAgICAgICAgICAgICAgICAgIFBpeGVsIENsb2NrICAgSG9yaXogICAgSG9yaXogICAgVmVydAotICAgICAgICAgICAgICAgICAgIFJhdGUgICAgICAgICBUb3RhbCAgICBBY3RpdmUKKwkJICBQaXhlbCBDbG9jayAgIEhvcml6ICAgIEhvcml6ICAgIFZlcnQKKwkJICAgUmF0ZSAgICAgICAgIFRvdGFsICAgIEFjdGl2ZQogTlRTQyBzcXVhcmUgcGl4ZWwgIDEyLjI3IE1IeiAgICA3ODAgICAgICA2NDAgICAgICA1MjUKIE5UU0MgQ0NJUi02MDEgICAgICAxMy41ICBNSHogICAgODU4ICAgICAgNzIwICAgICAgNTI1CiBOVFNDIDRGU2MgICAgICAgICAgMTQuMzIgTUh6ICAgIDkxMCAgICAgIDc2OCAgICAgIDUyNQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idHR2LWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0dHYtY2FyZHMuYwppbmRleCAwODgxYTE3Li4zNDEzYmFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0dHYtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0dHYtY2FyZHMuYwpAQCAtNiw3ICs2LDcgQEAKICAgICBsaWtlIHRoZSBiaWcgdHZjYXJkcyBhcnJheSBmb3IgdGhlIG1vc3QgcGFydAogCiAgICAgQ29weXJpZ2h0IChDKSAxOTk2LDk3LDk4IFJhbHBoICBNZXR6bGVyIChyamttQHRocC51bmkta29lbG4uZGUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAmIE1hcmN1cyBNZXR6bGVyIChtb2NtQHRocC51bmkta29lbG4uZGUpCisJCQkgICAmIE1hcmN1cyBNZXR6bGVyIChtb2NtQHRocC51bmkta29lbG4uZGUpCiAgICAgKGMpIDE5OTktMjAwMSBHZXJkIEtub3JyIDxrcmF4ZWxAZ29sZGJhY2guaW4tYmVybGluLmRlPgogCiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTE0NSwxNjIgKzE0NSwxNjMgQEAKIAlpbnQgY2FyZG5yOwogCWNoYXIgKm5hbWU7CiB9IGNhcmRzW10gX19kZXZpbml0ZGF0YSA9IHsKLQl7IDB4MTNlYjAwNzAsIEJUVFZfSEFVUFBBVUdFODc4LCAgIkhhdXBwYXVnZSBXaW5UViIgfSwKLQl7IDB4MzkwMDAwNzAsIEJUVFZfSEFVUFBBVUdFODc4LCAgIkhhdXBwYXVnZSBXaW5UVi1EIiB9LAotCXsgMHg0NTAwMDA3MCwgQlRUVl9IQVVQUEFVR0VQVlIsICAiSGF1cHBhdWdlIFdpblRWL1BWUiIgfSwKLQl7IDB4ZmYwMDAwNzAsIEJUVFZfT1NQUkVZMXgwLCAgICAgIk9zcHJleS0xMDAiIH0sCi0JeyAweGZmMDEwMDcwLCBCVFRWX09TUFJFWTJ4MF9TVklELCJPc3ByZXktMjAwIiB9LAotCXsgMHhmZjAyMDA3MCwgQlRUVl9PU1BSRVk1MDAsICAgICAiT3NwcmV5LTUwMCIgfSwKLQl7IDB4ZmYwMzAwNzAsIEJUVFZfT1NQUkVZMjAwMCwgICAgIk9zcHJleS0yMDAwIiB9LAotCXsgMHhmZjA0MDA3MCwgQlRUVl9PU1BSRVk1NDAsICAgICAiT3NwcmV5LTU0MCIgfSwKKwl7IDB4MTNlYjAwNzAsIEJUVFZfQk9BUkRfSEFVUFBBVUdFODc4LCAgIkhhdXBwYXVnZSBXaW5UViIgfSwKKwl7IDB4MzkwMDAwNzAsIEJUVFZfQk9BUkRfSEFVUFBBVUdFODc4LCAgIkhhdXBwYXVnZSBXaW5UVi1EIiB9LAorCXsgMHg0NTAwMDA3MCwgQlRUVl9CT0FSRF9IQVVQUEFVR0VQVlIsICAiSGF1cHBhdWdlIFdpblRWL1BWUiIgfSwKKwl7IDB4ZmYwMDAwNzAsIEJUVFZfQk9BUkRfT1NQUkVZMXgwLCAgICAgIk9zcHJleS0xMDAiIH0sCisJeyAweGZmMDEwMDcwLCBCVFRWX0JPQVJEX09TUFJFWTJ4MF9TVklELCJPc3ByZXktMjAwIiB9LAorCXsgMHhmZjAyMDA3MCwgQlRUVl9CT0FSRF9PU1BSRVk1MDAsICAgICAiT3NwcmV5LTUwMCIgfSwKKwl7IDB4ZmYwMzAwNzAsIEJUVFZfQk9BUkRfT1NQUkVZMjAwMCwgICAgIk9zcHJleS0yMDAwIiB9LAorCXsgMHhmZjA0MDA3MCwgQlRUVl9CT0FSRF9PU1BSRVk1NDAsICAgICAiT3NwcmV5LTU0MCIgfSwKKwl7IDB4ZmYwNzAwNzAsIEJUVFZfQk9BUkRfT1NQUkVZNDQwLCAgICAgIk9zcHJleS00NDAiIH0sCiAKLQl7IDB4MDAwMTEwMDIsIEJUVFZfQVRJX1RWV09OREVSLCAgIkFUSSBUViBXb25kZXIiIH0sCi0JeyAweDAwMDMxMDAyLCBCVFRWX0FUSV9UVldPTkRFUlZFLCJBVEkgVFYgV29uZGVyL1ZFIiB9LAorCXsgMHgwMDAxMTAwMiwgQlRUVl9CT0FSRF9BVElfVFZXT05ERVIsICAiQVRJIFRWIFdvbmRlciIgfSwKKwl7IDB4MDAwMzEwMDIsIEJUVFZfQk9BUkRfQVRJX1RWV09OREVSVkUsIkFUSSBUViBXb25kZXIvVkUiIH0sCiAKLQl7IDB4NjYwNjEwN2QsIEJUVFZfV0lORkFTVDIwMDAsICAgIkxlYWR0ZWsgV2luRmFzdCBUViAyMDAwIiB9LAotCXsgMHg2NjA3MTA3ZCwgQlRUVl9XSU5GQVNUVkMxMDAsICAiTGVhZHRlayBXaW5GYXN0IFZDIDEwMCIgfSwKLQl7IDB4NjYwOTEwN2QsIEJUVFZfV0lORkFTVDIwMDAsICAgIkxlYWR0ZWsgVFYgMjAwMCBYUCIgfSwKLQl7IDB4MjYzNjEwYjQsIEJUVFZfU1RCMiwgICAgICAgICAgIlNUQiBUViBQQ0kgRk0sIEdhdGV3YXkgUC9OIDYwMDA3MDQiIH0sCi0JeyAweDI2NDUxMGI0LCBCVFRWX1NUQjIsICAgICAgICAgICJTVEIgVFYgUENJIEZNLCBHYXRld2F5IFAvTiA2MDAwNzA0IiB9LAotIAl7IDB4NDAyMDEwZmMsIEJUVFZfR1ZCQ1RWM1BDSSwgICAgIkktTyBEYXRhIENvLiBHVi1CQ1RWMy9QQ0kiIH0sCi0JeyAweDQwNTAxMGZjLCBCVFRWX0dWQkNUVjRQQ0ksICAgICJJLU8gRGF0YSBDby4gR1YtQkNUVjQvUENJIiB9LAotCXsgMHg0MDcwMTBmYywgQlRUVl9HVkJDVFY1UENJLCAgICAiSS1PIERhdGEgQ28uIEdWLUJDVFY1L1BDSSIgfSwKLSAJeyAweGQwMTgxMGZjLCBCVFRWX0dWQkNUVjVQQ0ksICAgICJJLU8gRGF0YSBDby4gR1YtQkNUVjUvUENJIiB9LAorCXsgMHg2NjA2MTA3ZCwgQlRUVl9CT0FSRF9XSU5GQVNUMjAwMCwgICAiTGVhZHRlayBXaW5GYXN0IFRWIDIwMDAiIH0sCisJeyAweDY2MDcxMDdkLCBCVFRWX0JPQVJEX1dJTkZBU1RWQzEwMCwgICJMZWFkdGVrIFdpbkZhc3QgVkMgMTAwIiB9LAorCXsgMHg2NjA5MTA3ZCwgQlRUVl9CT0FSRF9XSU5GQVNUMjAwMCwgICAiTGVhZHRlayBUViAyMDAwIFhQIiB9LAorCXsgMHgyNjM2MTBiNCwgQlRUVl9CT0FSRF9TVEIyLCAgICAgICAgICAiU1RCIFRWIFBDSSBGTSwgR2F0ZXdheSBQL04gNjAwMDcwNCIgfSwKKwl7IDB4MjY0NTEwYjQsIEJUVFZfQk9BUkRfU1RCMiwgICAgICAgICAgIlNUQiBUViBQQ0kgRk0sIEdhdGV3YXkgUC9OIDYwMDA3MDQiIH0sCisJeyAweDQwMjAxMGZjLCBCVFRWX0JPQVJEX0dWQkNUVjNQQ0ksICAgICJJLU8gRGF0YSBDby4gR1YtQkNUVjMvUENJIiB9LAorCXsgMHg0MDUwMTBmYywgQlRUVl9CT0FSRF9HVkJDVFY0UENJLCAgICAiSS1PIERhdGEgQ28uIEdWLUJDVFY0L1BDSSIgfSwKKwl7IDB4NDA3MDEwZmMsIEJUVFZfQk9BUkRfR1ZCQ1RWNVBDSSwgICAgIkktTyBEYXRhIENvLiBHVi1CQ1RWNS9QQ0kiIH0sCisJeyAweGQwMTgxMGZjLCBCVFRWX0JPQVJEX0dWQkNUVjVQQ0ksICAgICJJLU8gRGF0YSBDby4gR1YtQkNUVjUvUENJIiB9LAogCi0JeyAweDAwMTIxMWJkLCBCVFRWX1BJTk5BQ0xFLCAgICAgICJQaW5uYWNsZSBQQ1RWIiB9LAorCXsgMHgwMDEyMTFiZCwgQlRUVl9CT0FSRF9QSU5OQUNMRSwgICAgICAiUGlubmFjbGUgUENUViIgfSwKIAkvKiBzb21lIGNhcmRzIHNoaXAgd2l0aCBieXRlc3dhcHBlZCBJRHMgLi4uICovCi0JeyAweDEyMDBiZDExLCBCVFRWX1BJTk5BQ0xFLCAgICAgICJQaW5uYWNsZSBQQ1RWIFtic3dhcF0iIH0sCi0JeyAweGZmMDBiZDExLCBCVFRWX1BJTk5BQ0xFLCAgICAgICJQaW5uYWNsZSBQQ1RWIFtic3dhcF0iIH0sCisJeyAweDEyMDBiZDExLCBCVFRWX0JPQVJEX1BJTk5BQ0xFLCAgICAgICJQaW5uYWNsZSBQQ1RWIFtic3dhcF0iIH0sCisJeyAweGZmMDBiZDExLCBCVFRWX0JPQVJEX1BJTk5BQ0xFLCAgICAgICJQaW5uYWNsZSBQQ1RWIFtic3dhcF0iIH0sCiAJLyogdGhpcyBzZWVtcyB0byBoYXBwZW4gYXMgd2VsbCAuLi4gKi8KLQl7IDB4ZmYxMjExYmQsIEJUVFZfUElOTkFDTEUsICAgICAgIlBpbm5hY2xlIFBDVFYiIH0sCisJeyAweGZmMTIxMWJkLCBCVFRWX0JPQVJEX1BJTk5BQ0xFLCAgICAgICJQaW5uYWNsZSBQQ1RWIiB9LAogCi0JeyAweDMwMDAxMjFhLCBCVFRWX1ZPT0RPT1RWX0ZNLCAgICIzRGZ4IFZvb2Rvb1RWIEZNLyBWb29kb29UViAyMDAiIH0sCi0JeyAweDI2MzcxMGI0LCBCVFRWX1ZPT0RPT1RWX0ZNLCAgICIzRGZ4IFZvb2Rvb1RWIEZNLyBWb29kb29UViAyMDAiIH0sCi0JeyAweDMwNjAxMjFhLCBCVFRWX1NUQjIsCSAgIjNEZnggVm9vZG9vVFYgMTAwLyBTVEIgT0VNIiB9LAorCXsgMHgzMDAwMTIxYSwgQlRUVl9CT0FSRF9WT09ET09UVl9GTSwgICAiM0RmeCBWb29kb29UViBGTS8gVm9vZG9vVFYgMjAwIiB9LAorCXsgMHgyNjM3MTBiNCwgQlRUVl9CT0FSRF9WT09ET09UVl9GTSwgICAiM0RmeCBWb29kb29UViBGTS8gVm9vZG9vVFYgMjAwIiB9LAorCXsgMHgzMDYwMTIxYSwgQlRUVl9CT0FSRF9TVEIyLAkgICIzRGZ4IFZvb2Rvb1RWIDEwMC8gU1RCIE9FTSIgfSwKIAotCXsgMHgzMDAwMTQ0ZiwgQlRUVl9NQUdJQ1RWSUVXMDYzLCAiKEFza2V5IE1hZ2ljL290aGVycykgVFZpZXc5OSBDUEgwNngiIH0sCi0JeyAweGEwMDUxNDRmLCBCVFRWX01BR0lDVFZJRVcwNjMsICJDUEgwNlggVFZpZXc5OS1DYXJkIiB9LAotCXsgMHgzMDAyMTQ0ZiwgQlRUVl9NQUdJQ1RWSUVXMDYxLCAiKEFza2V5IE1hZ2ljL290aGVycykgVFZpZXc5OSBDUEgwNXgiIH0sCi0JeyAweDMwMDUxNDRmLCBCVFRWX01BR0lDVFZJRVcwNjEsICIoQXNrZXkgTWFnaWMvb3RoZXJzKSBUVmlldzk5IENQSDA2MS8wNkwgKFQxL0xDKSIgfSwKLQl7IDB4NTAwMDE0NGYsIEJUVFZfTUFHSUNUVklFVzA2MSwgIkFza2V5IENQSDA1MCIgfSwKLQl7IDB4MzAwMDE0ZmYsIEJUVFZfTUFHSUNUVklFVzA2MSwgIlRWaWV3IDk5IChDUEgwNjEpIiB9LAotCXsgMHgzMDAyMTRmZiwgQlRUVl9QSE9FQkVfVFZNQVMsICAiUGhvZWJlIFRWIE1hc3RlciAoQ1BIMDYwKSIgfSwKKwl7IDB4MzAwMDE0NGYsIEJUVFZfQk9BUkRfTUFHSUNUVklFVzA2MywgIihBc2tleSBNYWdpYy9vdGhlcnMpIFRWaWV3OTkgQ1BIMDZ4IiB9LAorCXsgMHhhMDA1MTQ0ZiwgQlRUVl9CT0FSRF9NQUdJQ1RWSUVXMDYzLCAiQ1BIMDZYIFRWaWV3OTktQ2FyZCIgfSwKKwl7IDB4MzAwMjE0NGYsIEJUVFZfQk9BUkRfTUFHSUNUVklFVzA2MSwgIihBc2tleSBNYWdpYy9vdGhlcnMpIFRWaWV3OTkgQ1BIMDV4IiB9LAorCXsgMHgzMDA1MTQ0ZiwgQlRUVl9CT0FSRF9NQUdJQ1RWSUVXMDYxLCAiKEFza2V5IE1hZ2ljL290aGVycykgVFZpZXc5OSBDUEgwNjEvMDZMIChUMS9MQykiIH0sCisJeyAweDUwMDAxNDRmLCBCVFRWX0JPQVJEX01BR0lDVFZJRVcwNjEsICJBc2tleSBDUEgwNTAiIH0sCisJeyAweDMwMDAxNGZmLCBCVFRWX0JPQVJEX01BR0lDVFZJRVcwNjEsICJUVmlldyA5OSAoQ1BIMDYxKSIgfSwKKwl7IDB4MzAwMjE0ZmYsIEJUVFZfQk9BUkRfUEhPRUJFX1RWTUFTLCAgIlBob2ViZSBUViBNYXN0ZXIgKENQSDA2MCkiIH0sCiAKLQl7IDB4MDAwMTE0NjEsIEJUVFZfQVZQSE9ORTk4LCAgICAgIkFWZXJNZWRpYSBUVlBob25lOTgiIH0sCi0JeyAweDAwMDIxNDYxLCBCVFRWX0FWRVJNRURJQTk4LCAgICJBVmVybWVkaWEgVFZDYXB0dXJlIDk4IiB9LAotCXsgMHgwMDAzMTQ2MSwgQlRUVl9BVlBIT05FOTgsICAgICAiQVZlck1lZGlhIFRWUGhvbmU5OCIgfSwKLQl7IDB4MDAwNDE0NjEsIEJUVFZfQVZFUk1FRElBOTgsICAgIkFWZXJNZWRpYSBUVkNhcHR1cmUgOTgiIH0sCi0JeyAweDAzMDAxNDYxLCBCVFRWX0FWRVJNRURJQTk4LCAgICJWRE9NQVRFIFRWIFRVTkVSIENBUkQiIH0sCisJeyAweDAwMDExNDYxLCBCVFRWX0JPQVJEX0FWUEhPTkU5OCwgICAgICJBVmVyTWVkaWEgVFZQaG9uZTk4IiB9LAorCXsgMHgwMDAyMTQ2MSwgQlRUVl9CT0FSRF9BVkVSTUVESUE5OCwgICAiQVZlcm1lZGlhIFRWQ2FwdHVyZSA5OCIgfSwKKwl7IDB4MDAwMzE0NjEsIEJUVFZfQk9BUkRfQVZQSE9ORTk4LCAgICAgIkFWZXJNZWRpYSBUVlBob25lOTgiIH0sCisJeyAweDAwMDQxNDYxLCBCVFRWX0JPQVJEX0FWRVJNRURJQTk4LCAgICJBVmVyTWVkaWEgVFZDYXB0dXJlIDk4IiB9LAorCXsgMHgwMzAwMTQ2MSwgQlRUVl9CT0FSRF9BVkVSTUVESUE5OCwgICAiVkRPTUFURSBUViBUVU5FUiBDQVJEIiB9LAogCi0JeyAweDExMTcxNTNiLCBCVFRWX1RFUlJBVFZBTFVFLCAgICJUZXJyYXRlYyBUVmFsdWUgKFBoaWxpcHMgUEFMIEIvRykiIH0sCi0JeyAweDExMTgxNTNiLCBCVFRWX1RFUlJBVFZBTFVFLCAgICJUZXJyYXRlYyBUVmFsdWUgKFRlbWljIFBBTCBCL0cpIiB9LAotCXsgMHgxMTE5MTUzYiwgQlRUVl9URVJSQVRWQUxVRSwgICAiVGVycmF0ZWMgVFZhbHVlIChQaGlsaXBzIFBBTCBJKSIgfSwKLQl7IDB4MTExYTE1M2IsIEJUVFZfVEVSUkFUVkFMVUUsICAgIlRlcnJhdGVjIFRWYWx1ZSAoVGVtaWMgUEFMIEkpIiB9LAorCXsgMHgxMTE3MTUzYiwgQlRUVl9CT0FSRF9URVJSQVRWQUxVRSwgICAiVGVycmF0ZWMgVFZhbHVlIChQaGlsaXBzIFBBTCBCL0cpIiB9LAorCXsgMHgxMTE4MTUzYiwgQlRUVl9CT0FSRF9URVJSQVRWQUxVRSwgICAiVGVycmF0ZWMgVFZhbHVlIChUZW1pYyBQQUwgQi9HKSIgfSwKKwl7IDB4MTExOTE1M2IsIEJUVFZfQk9BUkRfVEVSUkFUVkFMVUUsICAgIlRlcnJhdGVjIFRWYWx1ZSAoUGhpbGlwcyBQQUwgSSkiIH0sCisJeyAweDExMWExNTNiLCBCVFRWX0JPQVJEX1RFUlJBVFZBTFVFLCAgICJUZXJyYXRlYyBUVmFsdWUgKFRlbWljIFBBTCBJKSIgfSwKIAotCXsgMHgxMTIzMTUzYiwgQlRUVl9URVJSQVRWUkFESU8sICAiVGVycmF0ZWMgVFYgUmFkaW8rIiB9LAotCXsgMHgxMTI3MTUzYiwgQlRUVl9URVJSQVRWLCAgICAgICAiVGVycmF0ZWMgVFYrIChWMS4wNSkiICAgIH0sCisJeyAweDExMjMxNTNiLCBCVFRWX0JPQVJEX1RFUlJBVFZSQURJTywgICJUZXJyYXRlYyBUViBSYWRpbysiIH0sCisJeyAweDExMjcxNTNiLCBCVFRWX0JPQVJEX1RFUlJBVFYsICAgICAgICJUZXJyYXRlYyBUVisgKFYxLjA1KSIgICAgfSwKIAkvKiBjbGFzaGVzIHdpdGggRmx5VmlkZW8KLQkgKnsgMHgxODUyMTg1MiwgQlRUVl9URVJSQVRWLCAgICAgIlRlcnJhdGVjIFRWKyAoVjEuMTApIiAgICB9LCAqLwotCXsgMHgxMTM0MTUzYiwgQlRUVl9URVJSQVRWQUxVRSwgICAiVGVycmF0ZWMgVFZhbHVlIChMUjEwMikiIH0sCi0JeyAweDExMzUxNTNiLCBCVFRWX1RFUlJBVFZBTFVFUiwgICJUZXJyYXRlYyBUVmFsdWUgUmFkaW8iIH0sIC8qIExSMTAyICovCi0JeyAweDUwMTgxNTNiLCBCVFRWX1RFUlJBVFZBTFVFLCAgICJUZXJyYXRlYyBUVmFsdWUiIH0sICAgICAgIC8qID8/ICovCi0JeyAweGZmM2IxNTNiLCBCVFRWX1RFUlJBVFZBTFVFUiwgICJUZXJyYXRlYyBUVmFsdWUgUmFkaW8iIH0sIC8qID8/ICovCisJICp7IDB4MTg1MjE4NTIsIEJUVFZfQk9BUkRfVEVSUkFUViwgICAgICJUZXJyYXRlYyBUVisgKFYxLjEwKSIgICAgfSwgKi8KKwl7IDB4MTEzNDE1M2IsIEJUVFZfQk9BUkRfVEVSUkFUVkFMVUUsICAgIlRlcnJhdGVjIFRWYWx1ZSAoTFIxMDIpIiB9LAorCXsgMHgxMTM1MTUzYiwgQlRUVl9CT0FSRF9URVJSQVRWQUxVRVIsICAiVGVycmF0ZWMgVFZhbHVlIFJhZGlvIiB9LCAvKiBMUjEwMiAqLworCXsgMHg1MDE4MTUzYiwgQlRUVl9CT0FSRF9URVJSQVRWQUxVRSwgICAiVGVycmF0ZWMgVFZhbHVlIiB9LCAgICAgICAvKiA/PyAqLworCXsgMHhmZjNiMTUzYiwgQlRUVl9CT0FSRF9URVJSQVRWQUxVRVIsICAiVGVycmF0ZWMgVFZhbHVlIFJhZGlvIiB9LCAvKiA/PyAqLwogCi0JeyAweDQwMDAxNWIwLCBCVFRWX1pPTFRSSVhfR0VOSUUsICJab2x0cml4IEdlbmllIFRWIiB9LAotCXsgMHg0MDBhMTViMCwgQlRUVl9aT0xUUklYX0dFTklFLCAiWm9sdHJpeCBHZW5pZSBUViIgfSwKLQl7IDB4NDAwZDE1YjAsIEJUVFZfWk9MVFJJWF9HRU5JRSwgIlpvbHRyaXggR2VuaWUgVFYgLyBSYWRpbyIgfSwKLQl7IDB4NDAxMDE1YjAsIEJUVFZfWk9MVFJJWF9HRU5JRSwgIlpvbHRyaXggR2VuaWUgVFYgLyBSYWRpbyIgfSwKLQl7IDB4NDAxNjE1YjAsIEJUVFZfWk9MVFJJWF9HRU5JRSwgIlpvbHRyaXggR2VuaWUgVFYgLyBSYWRpbyIgfSwKKwl7IDB4NDAwMDE1YjAsIEJUVFZfQk9BUkRfWk9MVFJJWF9HRU5JRSwgIlpvbHRyaXggR2VuaWUgVFYiIH0sCisJeyAweDQwMGExNWIwLCBCVFRWX0JPQVJEX1pPTFRSSVhfR0VOSUUsICJab2x0cml4IEdlbmllIFRWIiB9LAorCXsgMHg0MDBkMTViMCwgQlRUVl9CT0FSRF9aT0xUUklYX0dFTklFLCAiWm9sdHJpeCBHZW5pZSBUViAvIFJhZGlvIiB9LAorCXsgMHg0MDEwMTViMCwgQlRUVl9CT0FSRF9aT0xUUklYX0dFTklFLCAiWm9sdHJpeCBHZW5pZSBUViAvIFJhZGlvIiB9LAorCXsgMHg0MDE2MTViMCwgQlRUVl9CT0FSRF9aT0xUUklYX0dFTklFLCAiWm9sdHJpeCBHZW5pZSBUViAvIFJhZGlvIiB9LAogCi0JeyAweDE0MzBhYTAwLCBCVFRWX1BWMTQzLCAgICAgICAgICJQcm92aWRlbyBQVjE0M0EiIH0sCi0JeyAweDE0MzFhYTAwLCBCVFRWX1BWMTQzLCAgICAgICAgICJQcm92aWRlbyBQVjE0M0IiIH0sCi0JeyAweDE0MzJhYTAwLCBCVFRWX1BWMTQzLCAgICAgICAgICJQcm92aWRlbyBQVjE0M0MiIH0sCi0JeyAweDE0MzNhYTAwLCBCVFRWX1BWMTQzLCAgICAgICAgICJQcm92aWRlbyBQVjE0M0QiIH0sCi0JeyAweDE0MzNhYTAzLCBCVFRWX1BWMTQzLCAgICAgICAgICJTZWN1cml0eSBFeWVzIiB9LAorCXsgMHgxNDMwYWEwMCwgQlRUVl9CT0FSRF9QVjE0MywgICAgICAgICAiUHJvdmlkZW8gUFYxNDNBIiB9LAorCXsgMHgxNDMxYWEwMCwgQlRUVl9CT0FSRF9QVjE0MywgICAgICAgICAiUHJvdmlkZW8gUFYxNDNCIiB9LAorCXsgMHgxNDMyYWEwMCwgQlRUVl9CT0FSRF9QVjE0MywgICAgICAgICAiUHJvdmlkZW8gUFYxNDNDIiB9LAorCXsgMHgxNDMzYWEwMCwgQlRUVl9CT0FSRF9QVjE0MywgICAgICAgICAiUHJvdmlkZW8gUFYxNDNEIiB9LAorCXsgMHgxNDMzYWEwMywgQlRUVl9CT0FSRF9QVjE0MywgICAgICAgICAiU2VjdXJpdHkgRXllcyIgfSwKIAotCXsgMHgxNDYwYWEwMCwgQlRUVl9QVjE1MCwgICAgICAgICAiUHJvdmlkZW8gUFYxNTBBLTEiIH0sCi0JeyAweDE0NjFhYTAxLCBCVFRWX1BWMTUwLCAgICAgICAgICJQcm92aWRlbyBQVjE1MEEtMiIgfSwKLQl7IDB4MTQ2MmFhMDIsIEJUVFZfUFYxNTAsICAgICAgICAgIlByb3ZpZGVvIFBWMTUwQS0zIiB9LAotCXsgMHgxNDYzYWEwMywgQlRUVl9QVjE1MCwgICAgICAgICAiUHJvdmlkZW8gUFYxNTBBLTQiIH0sCisJeyAweDE0NjBhYTAwLCBCVFRWX0JPQVJEX1BWMTUwLCAgICAgICAgICJQcm92aWRlbyBQVjE1MEEtMSIgfSwKKwl7IDB4MTQ2MWFhMDEsIEJUVFZfQk9BUkRfUFYxNTAsICAgICAgICAgIlByb3ZpZGVvIFBWMTUwQS0yIiB9LAorCXsgMHgxNDYyYWEwMiwgQlRUVl9CT0FSRF9QVjE1MCwgICAgICAgICAiUHJvdmlkZW8gUFYxNTBBLTMiIH0sCisJeyAweDE0NjNhYTAzLCBCVFRWX0JPQVJEX1BWMTUwLCAgICAgICAgICJQcm92aWRlbyBQVjE1MEEtNCIgfSwKIAotCXsgMHgxNDY0YWEwNCwgQlRUVl9QVjE1MCwgICAgICAgICAiUHJvdmlkZW8gUFYxNTBCLTEiIH0sCi0JeyAweDE0NjVhYTA1LCBCVFRWX1BWMTUwLCAgICAgICAgICJQcm92aWRlbyBQVjE1MEItMiIgfSwKLQl7IDB4MTQ2NmFhMDYsIEJUVFZfUFYxNTAsICAgICAgICAgIlByb3ZpZGVvIFBWMTUwQi0zIiB9LAotCXsgMHgxNDY3YWEwNywgQlRUVl9QVjE1MCwgICAgICAgICAiUHJvdmlkZW8gUFYxNTBCLTQiIH0sCisJeyAweDE0NjRhYTA0LCBCVFRWX0JPQVJEX1BWMTUwLCAgICAgICAgICJQcm92aWRlbyBQVjE1MEItMSIgfSwKKwl7IDB4MTQ2NWFhMDUsIEJUVFZfQk9BUkRfUFYxNTAsICAgICAgICAgIlByb3ZpZGVvIFBWMTUwQi0yIiB9LAorCXsgMHgxNDY2YWEwNiwgQlRUVl9CT0FSRF9QVjE1MCwgICAgICAgICAiUHJvdmlkZW8gUFYxNTBCLTMiIH0sCisJeyAweDE0NjdhYTA3LCBCVFRWX0JPQVJEX1BWMTUwLCAgICAgICAgICJQcm92aWRlbyBQVjE1MEItNCIgfSwKIAotCXsgMHhhMTMyZmYwMCwgQlRUVl9JVkMxMDAsICAgICAgICAiSVZDLTEwMCIgIH0sCi0JeyAweGExNTUwMDAwLCBCVFRWX0lWQzIwMCwgICAgICAgICJJVkMtMjAwIiAgfSwKLQl7IDB4YTE1NTAwMDEsIEJUVFZfSVZDMjAwLCAgICAgICAgIklWQy0yMDAiICB9LAotCXsgMHhhMTU1MDAwMiwgQlRUVl9JVkMyMDAsICAgICAgICAiSVZDLTIwMCIgIH0sCi0JeyAweGExNTUwMDAzLCBCVFRWX0lWQzIwMCwgICAgICAgICJJVkMtMjAwIiAgfSwKLQl7IDB4YTE1NTAxMDAsIEJUVFZfSVZDMjAwLCAgICAgICAgIklWQy0yMDBHIiB9LAotCXsgMHhhMTU1MDEwMSwgQlRUVl9JVkMyMDAsICAgICAgICAiSVZDLTIwMEciIH0sCi0JeyAweGExNTUwMTAyLCBCVFRWX0lWQzIwMCwgICAgICAgICJJVkMtMjAwRyIgfSwKLQl7IDB4YTE1NTAxMDMsIEJUVFZfSVZDMjAwLCAgICAgICAgIklWQy0yMDBHIiB9LAotCXsgMHhhMTgyZmYwMCwgQlRUVl9JVkMxMjAsICAgICAgICAiSVZDLTEyMEciIH0sCi0JeyAweGExODJmZjAxLCBCVFRWX0lWQzEyMCwgICAgICAgICJJVkMtMTIwRyIgfSwKLQl7IDB4YTE4MmZmMDIsIEJUVFZfSVZDMTIwLCAgICAgICAgIklWQy0xMjBHIiB9LAotCXsgMHhhMTgyZmYwMywgQlRUVl9JVkMxMjAsICAgICAgICAiSVZDLTEyMEciIH0sCi0JeyAweGExODJmZjA0LCBCVFRWX0lWQzEyMCwgICAgICAgICJJVkMtMTIwRyIgfSwKLQl7IDB4YTE4MmZmMDUsIEJUVFZfSVZDMTIwLCAgICAgICAgIklWQy0xMjBHIiB9LAotCXsgMHhhMTgyZmYwNiwgQlRUVl9JVkMxMjAsICAgICAgICAiSVZDLTEyMEciIH0sCi0JeyAweGExODJmZjA3LCBCVFRWX0lWQzEyMCwgICAgICAgICJJVkMtMTIwRyIgfSwKLQl7IDB4YTE4MmZmMDgsIEJUVFZfSVZDMTIwLCAgICAgICAgIklWQy0xMjBHIiB9LAotCXsgMHhhMTgyZmYwOSwgQlRUVl9JVkMxMjAsICAgICAgICAiSVZDLTEyMEciIH0sCi0JeyAweGExODJmZjBhLCBCVFRWX0lWQzEyMCwgICAgICAgICJJVkMtMTIwRyIgfSwKLQl7IDB4YTE4MmZmMGIsIEJUVFZfSVZDMTIwLCAgICAgICAgIklWQy0xMjBHIiB9LAotCXsgMHhhMTgyZmYwYywgQlRUVl9JVkMxMjAsICAgICAgICAiSVZDLTEyMEciIH0sCi0JeyAweGExODJmZjBkLCBCVFRWX0lWQzEyMCwgICAgICAgICJJVkMtMTIwRyIgfSwKLQl7IDB4YTE4MmZmMGUsIEJUVFZfSVZDMTIwLCAgICAgICAgIklWQy0xMjBHIiB9LAotCXsgMHhhMTgyZmYwZiwgQlRUVl9JVkMxMjAsICAgICAgICAiSVZDLTEyMEciIH0sCisJeyAweGExMzJmZjAwLCBCVFRWX0JPQVJEX0lWQzEwMCwgICAgICAgICJJVkMtMTAwIiAgfSwKKwl7IDB4YTE1NTAwMDAsIEJUVFZfQk9BUkRfSVZDMjAwLCAgICAgICAgIklWQy0yMDAiICB9LAorCXsgMHhhMTU1MDAwMSwgQlRUVl9CT0FSRF9JVkMyMDAsICAgICAgICAiSVZDLTIwMCIgIH0sCisJeyAweGExNTUwMDAyLCBCVFRWX0JPQVJEX0lWQzIwMCwgICAgICAgICJJVkMtMjAwIiAgfSwKKwl7IDB4YTE1NTAwMDMsIEJUVFZfQk9BUkRfSVZDMjAwLCAgICAgICAgIklWQy0yMDAiICB9LAorCXsgMHhhMTU1MDEwMCwgQlRUVl9CT0FSRF9JVkMyMDAsICAgICAgICAiSVZDLTIwMEciIH0sCisJeyAweGExNTUwMTAxLCBCVFRWX0JPQVJEX0lWQzIwMCwgICAgICAgICJJVkMtMjAwRyIgfSwKKwl7IDB4YTE1NTAxMDIsIEJUVFZfQk9BUkRfSVZDMjAwLCAgICAgICAgIklWQy0yMDBHIiB9LAorCXsgMHhhMTU1MDEwMywgQlRUVl9CT0FSRF9JVkMyMDAsICAgICAgICAiSVZDLTIwMEciIH0sCisJeyAweGExODJmZjAwLCBCVFRWX0JPQVJEX0lWQzEyMCwgICAgICAgICJJVkMtMTIwRyIgfSwKKwl7IDB4YTE4MmZmMDEsIEJUVFZfQk9BUkRfSVZDMTIwLCAgICAgICAgIklWQy0xMjBHIiB9LAorCXsgMHhhMTgyZmYwMiwgQlRUVl9CT0FSRF9JVkMxMjAsICAgICAgICAiSVZDLTEyMEciIH0sCisJeyAweGExODJmZjAzLCBCVFRWX0JPQVJEX0lWQzEyMCwgICAgICAgICJJVkMtMTIwRyIgfSwKKwl7IDB4YTE4MmZmMDQsIEJUVFZfQk9BUkRfSVZDMTIwLCAgICAgICAgIklWQy0xMjBHIiB9LAorCXsgMHhhMTgyZmYwNSwgQlRUVl9CT0FSRF9JVkMxMjAsICAgICAgICAiSVZDLTEyMEciIH0sCisJeyAweGExODJmZjA2LCBCVFRWX0JPQVJEX0lWQzEyMCwgICAgICAgICJJVkMtMTIwRyIgfSwKKwl7IDB4YTE4MmZmMDcsIEJUVFZfQk9BUkRfSVZDMTIwLCAgICAgICAgIklWQy0xMjBHIiB9LAorCXsgMHhhMTgyZmYwOCwgQlRUVl9CT0FSRF9JVkMxMjAsICAgICAgICAiSVZDLTEyMEciIH0sCisJeyAweGExODJmZjA5LCBCVFRWX0JPQVJEX0lWQzEyMCwgICAgICAgICJJVkMtMTIwRyIgfSwKKwl7IDB4YTE4MmZmMGEsIEJUVFZfQk9BUkRfSVZDMTIwLCAgICAgICAgIklWQy0xMjBHIiB9LAorCXsgMHhhMTgyZmYwYiwgQlRUVl9CT0FSRF9JVkMxMjAsICAgICAgICAiSVZDLTEyMEciIH0sCisJeyAweGExODJmZjBjLCBCVFRWX0JPQVJEX0lWQzEyMCwgICAgICAgICJJVkMtMTIwRyIgfSwKKwl7IDB4YTE4MmZmMGQsIEJUVFZfQk9BUkRfSVZDMTIwLCAgICAgICAgIklWQy0xMjBHIiB9LAorCXsgMHhhMTgyZmYwZSwgQlRUVl9CT0FSRF9JVkMxMjAsICAgICAgICAiSVZDLTEyMEciIH0sCisJeyAweGExODJmZjBmLCBCVFRWX0JPQVJEX0lWQzEyMCwgICAgICAgICJJVkMtMTIwRyIgfSwKIAotCXsgMHg0MTQyNDM0NCwgQlRUVl9HUkFORFRFQywgICAgICAiR3JhbmRUZWMgTXVsdGkgQ2FwdHVyZSIgfSwKLQl7IDB4MDEwMjAzMDQsIEJUVFZfWEdVQVJELCAgICAgICAgIkdyYW5kdGVjIEdyYW5kIFgtR3VhcmQiIH0sCisJeyAweDQxNDI0MzQ0LCBCVFRWX0JPQVJEX0dSQU5EVEVDLCAgICAgICJHcmFuZFRlYyBNdWx0aSBDYXB0dXJlIiB9LAorCXsgMHgwMTAyMDMwNCwgQlRUVl9CT0FSRF9YR1VBUkQsICAgICAgICAiR3JhbmR0ZWMgR3JhbmQgWC1HdWFyZCIgfSwKIAotCXsgMHgxODUwMTg1MSwgQlRUVl9DSFJPTk9TX1ZTMiwgICAiRmx5VmlkZW8gOTggKExSNTApLyBDaHJvbm9zIFZpZGVvIFNodXR0bGUgSUkiIH0sCi0JeyAweGEwNTAxODUxLCBCVFRWX0NIUk9OT1NfVlMyLCAgICJGbHlWaWRlbyA5OCAoTFI1MCkvIENocm9ub3MgVmlkZW8gU2h1dHRsZSBJSSIgfSwKLQl7IDB4MTg1MTE4NTEsIEJUVFZfRkxZVklERU85OEVaLCAgIkZseVZpZGVvIDk4RVogKExSNTEpLyBDeWJlck1haWwgQVYiIH0sCi0JeyAweDE4NTIxODUyLCBCVFRWX1RZUEhPT05fVFZJRVcsICJGbHlWaWRlbyA5OEZNIChMUjUwKS8gVHlwaG9vbiBUVmlldyBUVi9GTSBUdW5lciIgfSwKLQl7IDB4NDFhMGEwNTEsIEJUVFZfRkxZVklERU9fOThGTSwgIkxpZmV2aWV3IEZseVZpZGVvIDk4IExSNTAgUmV2IFEiIH0sCi0JeyAweDE4NTAxZjdmLCBCVFRWX0ZMWVZJREVPXzk4LCAgICJMaWZldmlldyBGbHl2aWRlbyA5OCIgfSwKKwl7IDB4MTg1MDE4NTEsIEJUVFZfQk9BUkRfQ0hST05PU19WUzIsICAgIkZseVZpZGVvIDk4IChMUjUwKS8gQ2hyb25vcyBWaWRlbyBTaHV0dGxlIElJIiB9LAorCXsgMHhhMDUwMTg1MSwgQlRUVl9CT0FSRF9DSFJPTk9TX1ZTMiwgICAiRmx5VmlkZW8gOTggKExSNTApLyBDaHJvbm9zIFZpZGVvIFNodXR0bGUgSUkiIH0sCisJeyAweDE4NTExODUxLCBCVFRWX0JPQVJEX0ZMWVZJREVPOThFWiwgICJGbHlWaWRlbyA5OEVaIChMUjUxKS8gQ3liZXJNYWlsIEFWIiB9LAorCXsgMHgxODUyMTg1MiwgQlRUVl9CT0FSRF9UWVBIT09OX1RWSUVXLCAiRmx5VmlkZW8gOThGTSAoTFI1MCkvIFR5cGhvb24gVFZpZXcgVFYvRk0gVHVuZXIiIH0sCisJeyAweDQxYTBhMDUxLCBCVFRWX0JPQVJEX0ZMWVZJREVPXzk4Rk0sICJMaWZldmlldyBGbHlWaWRlbyA5OCBMUjUwIFJldiBRIiB9LAorCXsgMHgxODUwMWY3ZiwgQlRUVl9CT0FSRF9GTFlWSURFT185OCwgICAiTGlmZXZpZXcgRmx5dmlkZW8gOTgiIH0sCiAKLSAgICAJeyAweDAxMDExNWNiLCBCVFRWX0dNVjEsICAgICAgICAgICJBRyBHTVYxIiB9LAotCXsgMHgwMTAxMTRjNywgQlRUVl9NT0RURUNfMjA1LCAgICAiTW9kdWxhciBUZWNobm9sb2d5IE1NMjAxL01NMjAyL01NMjA1L01NMjEwL01NMjE1IFBDVFYiIH0sCisgICAgCXsgMHgwMTAxMTVjYiwgQlRUVl9CT0FSRF9HTVYxLCAgICAgICAgICAiQUcgR01WMSIgfSwKKwl7IDB4MDEwMTE0YzcsIEJUVFZfQk9BUkRfTU9EVEVDXzIwNSwgICAgIk1vZHVsYXIgVGVjaG5vbG9neSBNTTIwMS9NTTIwMi9NTTIwNS9NTTIxMC9NTTIxNSBQQ1RWIiB9LAogCi0JeyAweDEwYjQyNjM2LCBCVFRWX0hBVVBQQVVHRTg3OCwgICJTVEIgPz8/IiB9LAotCXsgMHgyMTdkNjYwNiwgQlRUVl9XSU5GQVNUMjAwMCwgICAiTGVhZHRlayBXaW5GYXN0IFRWIDIwMDAiIH0sCi0JeyAweGZmZjZmNmZmLCBCVFRWX1dJTkZBU1QyMDAwLCAgICJMZWFkdGVrIFdpbkZhc3QgVFYgMjAwMCIgfSwKLQl7IDB4MDMxMTYwMDAsIEJUVFZfU0VOU09SQVkzMTEsICAgIlNlbnNvcmF5IDMxMSIgfSwKLQl7IDB4MDA3OTBlMTEsIEJUVFZfV0lORFZSLCAgICAgICAgIkNhbm9wdXMgV2luRFZSIFBDSSIgfSwKLQl7IDB4YTBmY2ExYTAsIEJUVFZfWk9MVFJJWCwgICAgICAgIkZhY2UgdG8gRmFjZSBUdm1heCIgfSwKLQl7IDB4MjAwMDcwNjMsIEJUVFZfUENfSERUViwgICAgICAgInBjSERUViBIRC0yMDAwIFRWIn0sCi0JeyAweDgyYjJhYTZhLCBCVFRWX1NJTVVTX0dWQzExMDAsICJTSU1VUyBHVkMxMTAwIiB9LAotCXsgMHgxNDZjYWEwYywgQlRUVl9QVjk1MSwgICAgICAgICAiaXR1bmVyIHNwZWN0cmE4IiB9LAotIAl7IDB4MjAwYTEyOTUsIEJUVFZfUFhDMjAwLCAgICAgICAgIkltYWdlTmF0aW9uIFBYQzIwMEEiIH0sCisJeyAweDEwYjQyNjM2LCBCVFRWX0JPQVJEX0hBVVBQQVVHRTg3OCwgICJTVEIgPz8/IiB9LAorCXsgMHgyMTdkNjYwNiwgQlRUVl9CT0FSRF9XSU5GQVNUMjAwMCwgICAiTGVhZHRlayBXaW5GYXN0IFRWIDIwMDAiIH0sCisJeyAweGZmZjZmNmZmLCBCVFRWX0JPQVJEX1dJTkZBU1QyMDAwLCAgICJMZWFkdGVrIFdpbkZhc3QgVFYgMjAwMCIgfSwKKwl7IDB4MDMxMTYwMDAsIEJUVFZfQk9BUkRfU0VOU09SQVkzMTEsICAgIlNlbnNvcmF5IDMxMSIgfSwKKwl7IDB4MDA3OTBlMTEsIEJUVFZfQk9BUkRfV0lORFZSLCAgICAgICAgIkNhbm9wdXMgV2luRFZSIFBDSSIgfSwKKwl7IDB4YTBmY2ExYTAsIEJUVFZfQk9BUkRfWk9MVFJJWCwgICAgICAgIkZhY2UgdG8gRmFjZSBUdm1heCIgfSwKKwl7IDB4MjAwMDcwNjMsIEJUVFZfQk9BUkRfUENfSERUViwgICAgICAgInBjSERUViBIRC0yMDAwIFRWIn0sCisJeyAweDgyYjJhYTZhLCBCVFRWX0JPQVJEX1NJTVVTX0dWQzExMDAsICJTSU1VUyBHVkMxMTAwIiB9LAorCXsgMHgxNDZjYWEwYywgQlRUVl9CT0FSRF9QVjk1MSwgICAgICAgICAiaXR1bmVyIHNwZWN0cmE4IiB9LAorCXsgMHgyMDBhMTI5NSwgQlRUVl9CT0FSRF9QWEMyMDAsICAgICAgICAiSW1hZ2VOYXRpb24gUFhDMjAwQSIgfSwKIAotCXsgMHg0MDExMTU1NCwgQlRUVl9QVl9CVDg3OFBfOUIsICAiUHJvbGluayBQaXhlbHZpZXcgUFYtQlQiIH0sCi0JeyAweDE3ZGUwYTAxLCBCVFRWX0tXT1JMRCwgICAgICAgICJNZWNlciBUVi9GTS9WaWRlbyBUdW5lciIgfSwKKwl7IDB4NDAxMTE1NTQsIEJUVFZfQk9BUkRfUFZfQlQ4NzhQXzlCLCAgIlByb2xpbmsgUGl4ZWx2aWV3IFBWLUJUIiB9LAorCXsgMHgxN2RlMGEwMSwgQlRUVl9CT0FSRF9LV09STEQsICAgICAgICAiTWVjZXIgVFYvRk0vVmlkZW8gVHVuZXIiIH0sCiAKLQl7IDB4MDEwNTE4MDUsIEJUVFZfUElDT0xPX1RFVFJBX0NISVAsICJQaWNvbG8gVGV0cmEgQ2hpcCAjMSIgfSwKLQl7IDB4MDEwNjE4MDUsIEJUVFZfUElDT0xPX1RFVFJBX0NISVAsICJQaWNvbG8gVGV0cmEgQ2hpcCAjMiIgfSwKLQl7IDB4MDEwNzE4MDUsIEJUVFZfUElDT0xPX1RFVFJBX0NISVAsICJQaWNvbG8gVGV0cmEgQ2hpcCAjMyIgfSwKLQl7IDB4MDEwODE4MDUsIEJUVFZfUElDT0xPX1RFVFJBX0NISVAsICJQaWNvbG8gVGV0cmEgQ2hpcCAjNCIgfSwKKwl7IDB4MDEwNTE4MDUsIEJUVFZfQk9BUkRfUElDT0xPX1RFVFJBX0NISVAsICJQaWNvbG8gVGV0cmEgQ2hpcCAjMSIgfSwKKwl7IDB4MDEwNjE4MDUsIEJUVFZfQk9BUkRfUElDT0xPX1RFVFJBX0NISVAsICJQaWNvbG8gVGV0cmEgQ2hpcCAjMiIgfSwKKwl7IDB4MDEwNzE4MDUsIEJUVFZfQk9BUkRfUElDT0xPX1RFVFJBX0NISVAsICJQaWNvbG8gVGV0cmEgQ2hpcCAjMyIgfSwKKwl7IDB4MDEwODE4MDUsIEJUVFZfQk9BUkRfUElDT0xPX1RFVFJBX0NISVAsICJQaWNvbG8gVGV0cmEgQ2hpcCAjNCIgfSwKIAotCXsgMHgxNTQwOTUxMSwgQlRUVl9BQ09SUF9ZODc4RiwgIkFjb3JwIFk4NzhGIiB9LAorCXsgMHgxNTQwOTUxMSwgQlRUVl9CT0FSRF9BQ09SUF9ZODc4RiwgIkFjb3JwIFk4NzhGIiB9LAogCiAJLyogbGlrZWx5IGJyb2tlbiwgdmVuZG9yIGlkIGRvZXNuJ3QgbWF0Y2ggdGhlIG90aGVyIG1hZ2ljIHZpZXdzIC4uLgotCSAqIHsgMHhhMGZjYTA0ZiwgQlRUVl9NQUdJQ1RWSUVXMDYzLCAiR3VpbGxlbW90IE1heGkgVFYgVmlkZW8gMyIgfSwgKi8KKwkgKiB7IDB4YTBmY2EwNGYsIEJUVFZfQk9BUkRfTUFHSUNUVklFVzA2MywgIkd1aWxsZW1vdCBNYXhpIFRWIFZpZGVvIDMiIH0sICovCiAKIAkvKiBEVkIgY2FyZHMgKHVzaW5nIHBjaSBmdW5jdGlvbiAuMSBmb3IgbXBlZyBkYXRhIHhmZXIpICovCi0JeyAweDAxMDEwMDcxLCBCVFRWX05FQlVMQV9ESUdJVFYsICJOZWJ1bGEgRWxlY3Ryb25pY3MgRGlnaVRWIiB9LAotCXsgMHgwNzYxMTQ2MSwgQlRUVl9BVkRWQlRfNzYxLCAgICAiQXZlck1lZGlhIEF2ZXJUViBEVkItVCA3NjEiIH0sCi0JeyAweDAwMWMxMWJkLCBCVFRWX1BJTk5BQ0xFU0FULCAgICJQaW5uYWNsZSBQQ1RWIFNhdCIgfSwKLQl7IDB4MDAyNjExYmQsIEJUVFZfVFdJTkhBTl9EU1QsICAgIlBpbm5hY2xlIFBDVFYgU0FUIENJIiB9LAotCXsgMHgwMDAxMTgyMiwgQlRUVl9UV0lOSEFOX0RTVCwgICAiVHdpbmhhbiBWaXNpb25QbHVzIERWQiIgfSwKLQl7IDB4ZmMwMDI3MGYsIEJUVFZfVFdJTkhBTl9EU1QsICAgIkNoYWluVGVjaCBkaWdpdG9wIERTVC0xMDAwIERWQi1TIiB9LAotCXsgMHgwNzcxMTQ2MSwgQlRUVl9BVkRWQlRfNzcxLCAgICAiQVZlcm1lZGlhIEF2ZXJUViBEVkItVCA3NzEiIH0sCi0JeyAweGRiMTAxOGFjLCBCVFRWX0RWSUNPX0RWQlRfTElURSwgICAgIkRWaUNPIEZ1c2lvbkhEVFYgRFZCLVQgTGl0ZSIgfSwKLQl7IDB4ZDUwMDE4YWMsIEJUVFZfRFZJQ09fRlVTSU9OSERUVl81X0xJVEUsICAgICJEVmlDTyBGdXNpb25IRFRWIDUgTGl0ZSIgfSwKKwl7IDB4MDEwMTAwNzEsIEJUVFZfQk9BUkRfTkVCVUxBX0RJR0lUViwgIk5lYnVsYSBFbGVjdHJvbmljcyBEaWdpVFYiIH0sCisJeyAweDA3NjExNDYxLCBCVFRWX0JPQVJEX0FWRFZCVF83NjEsICAgICJBdmVyTWVkaWEgQXZlclRWIERWQi1UIDc2MSIgfSwKKwl7IDB4MDAxYzExYmQsIEJUVFZfQk9BUkRfUElOTkFDTEVTQVQsICAgIlBpbm5hY2xlIFBDVFYgU2F0IiB9LAorCXsgMHgwMDI2MTFiZCwgQlRUVl9CT0FSRF9UV0lOSEFOX0RTVCwgICAiUGlubmFjbGUgUENUViBTQVQgQ0kiIH0sCisJeyAweDAwMDExODIyLCBCVFRWX0JPQVJEX1RXSU5IQU5fRFNULCAgICJUd2luaGFuIFZpc2lvblBsdXMgRFZCIiB9LAorCXsgMHhmYzAwMjcwZiwgQlRUVl9CT0FSRF9UV0lOSEFOX0RTVCwgICAiQ2hhaW5UZWNoIGRpZ2l0b3AgRFNULTEwMDAgRFZCLVMiIH0sCisJeyAweDA3NzExNDYxLCBCVFRWX0JPQVJEX0FWRFZCVF83NzEsICAgICJBVmVybWVkaWEgQXZlclRWIERWQi1UIDc3MSIgfSwKKwl7IDB4ZGIxMDE4YWMsIEJUVFZfQk9BUkRfRFZJQ09fRFZCVF9MSVRFLCAgICAiRFZpQ08gRnVzaW9uSERUViBEVkItVCBMaXRlIiB9LAorCXsgMHhkNTAwMThhYywgQlRUVl9CT0FSRF9EVklDT19GVVNJT05IRFRWXzVfTElURSwgICAgIkRWaUNPIEZ1c2lvbkhEVFYgNSBMaXRlIiB9LAogCiAJeyAwLCAtMSwgTlVMTCB9CiB9OwpAQCAtMzA5LDIxMTYgKzMxMCwyNDk0IEBACiAvKiBhcnJheSB3aXRoIGRlc2NyaXB0aW9uIGZvciBidDg0OCAvIGJ0ODc4IHR2L2dyYWJiZXIgY2FyZHMgICAgICAgICAgICAgICAqLwogCiBzdHJ1Y3QgdHZjYXJkIGJ0dHZfdHZjYXJkc1tdID0gewotewotLyogLS0tLSBjYXJkIDB4MDAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCS5uYW1lCQk9ICIgKioqIFVOS05PV04vR0VORVJJQyAqKiogIiwKLQkudmlkZW9faW5wdXRzCT0gNCwKLQkuYXVkaW9faW5wdXRzCT0gMSwKLQkudHVuZXIJCT0gMCwKLQkuc3ZocwkJPSAyLAotCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAwfSwKLQkudHVuZXJfdHlwZQk9IC0xLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLX0sewotCS5uYW1lCQk9ICJNSVJPIFBDVFYiLAotCS52aWRlb19pbnB1dHMJPSA0LAotCS5hdWRpb19pbnB1dHMJPSAxLAotCS50dW5lcgkJPSAwLAotCS5zdmhzCQk9IDIsCi0JLmdwaW9tYXNrCT0gMTUsCi0JLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LAotCS5hdWRpb211eAk9IHsgMiwgMCwgMCwgMCwgMTB9LAotCS5uZWVkc190dmF1ZGlvCT0gMSwKLQkudHVuZXJfdHlwZQk9IC0xLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLX0sewotCS5uYW1lCQk9ICJIYXVwcGF1Z2UgKGJ0ODQ4KSIsCi0JLnZpZGVvX2lucHV0cwk9IDQsCi0JLmF1ZGlvX2lucHV0cwk9IDEsCi0JLnR1bmVyCQk9IDAsCi0JLnN2aHMJCT0gMiwKLQkuZ3Bpb21hc2sJPSA3LAotCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxfSwKLQkuYXVkaW9tdXgJPSB7IDAsIDEsIDIsIDMsIDR9LAotCS5uZWVkc190dmF1ZGlvCT0gMSwKLQkudHVuZXJfdHlwZQk9IC0xLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLX0sewotCS5uYW1lCQk9ICJTVEIsIEdhdGV3YXkgUC9OIDYwMDA2OTkgKGJ0ODQ4KSIsCi0JLnZpZGVvX2lucHV0cwk9IDMsCi0JLmF1ZGlvX2lucHV0cwk9IDEsCi0JLnR1bmVyCQk9IDAsCi0JLnN2aHMJCT0gMiwKLQkuZ3Bpb21hc2sJPSA3LAotCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxfSwKLQkuYXVkaW9tdXgJPSB7IDQsIDAsIDIsIDMsIDF9LAotCS5ub19tc3AzNHh4CT0gMSwKLQkubmVlZHNfdHZhdWRpbwk9IDEsCi0JLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19OVFNDLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JLmhhc19yYWRpbyAgICAgID0gMSwKLX0seworCS8qIC0tLS0gY2FyZCAweDAwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwlbQlRUVl9CT0FSRF9VTktOT1dOXSA9IHsKKwkJLm5hbWUJCT0gIiAqKiogVU5LTk9XTi9HRU5FUklDICoqKiAiLAorCQkudmlkZW9faW5wdXRzCT0gNCwKKwkJLmF1ZGlvX2lucHV0cwk9IDEsCisJCS50dW5lcgkJPSAwLAorCQkuc3ZocwkJPSAyLAorCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMH0sCisJCS50dW5lcl90eXBlCT0gLTEsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwl9LAorCVtCVFRWX0JPQVJEX01JUk9dID0geworCQkubmFtZQkJPSAiTUlSTyBQQ1RWIiwKKwkJLnZpZGVvX2lucHV0cwk9IDQsCisJCS5hdWRpb19pbnB1dHMJPSAxLAorCQkudHVuZXIJCT0gMCwKKwkJLnN2aHMJCT0gMiwKKwkJLmdwaW9tYXNrCT0gMTUsCisJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxfSwKKwkJLmF1ZGlvbXV4CT0geyAyLCAwLCAwLCAwLCAxMH0sCisJCS5uZWVkc190dmF1ZGlvCT0gMSwKKwkJLnR1bmVyX3R5cGUJPSAtMSwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCX0sCisJW0JUVFZfQk9BUkRfSEFVUFBBVUdFXSA9IHsKKwkJLm5hbWUJCT0gIkhhdXBwYXVnZSAoYnQ4NDgpIiwKKwkJLnZpZGVvX2lucHV0cwk9IDQsCisJCS5hdWRpb19pbnB1dHMJPSAxLAorCQkudHVuZXIJCT0gMCwKKwkJLnN2aHMJCT0gMiwKKwkJLmdwaW9tYXNrCT0gNywKKwkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LAorCQkuYXVkaW9tdXgJPSB7IDAsIDEsIDIsIDMsIDR9LAorCQkubmVlZHNfdHZhdWRpbwk9IDEsCisJCS50dW5lcl90eXBlCT0gLTEsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwl9LAorCVtCVFRWX0JPQVJEX1NUQl0gPSB7CisJCS5uYW1lCQk9ICJTVEIsIEdhdGV3YXkgUC9OIDYwMDA2OTkgKGJ0ODQ4KSIsCisJCS52aWRlb19pbnB1dHMJPSAzLAorCQkuYXVkaW9faW5wdXRzCT0gMSwKKwkJLnR1bmVyCQk9IDAsCisJCS5zdmhzCQk9IDIsCisJCS5ncGlvbWFzawk9IDcsCisJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxfSwKKwkJLmF1ZGlvbXV4CT0geyA0LCAwLCAyLCAzLCAxfSwKKwkJLm5vX21zcDM0eHgJPSAxLAorCQkubmVlZHNfdHZhdWRpbwk9IDEsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfTlRTQywKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCisJCS5oYXNfcmFkaW8gICAgICA9IDEsCisJfSwKIAotLyogLS0tLSBjYXJkIDB4MDQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCS5uYW1lCQk9ICJJbnRlbCBDcmVhdGUgYW5kIFNoYXJlIFBDSS8gU21hcnQgVmlkZW8gUmVjb3JkZXIgSUlJIiwKLQkudmlkZW9faW5wdXRzCT0gNCwKLQkuYXVkaW9faW5wdXRzCT0gMCwKLQkudHVuZXIJCT0gLTEsCi0JLnN2aHMJCT0gMiwKLQkuZ3Bpb21hc2sJPSAwLAotCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxfSwKLQkuYXVkaW9tdXgJPSB7IDAgfSwKLQkubmVlZHNfdHZhdWRpbwk9IDAsCi0JLnR1bmVyX3R5cGUJPSA0LAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLX0sewotCS5uYW1lCQk9ICJEaWFtb25kIERUVjIwMDAiLAotCS52aWRlb19pbnB1dHMJPSA0LAotCS5hdWRpb19pbnB1dHMJPSAxLAotCS50dW5lcgkJPSAwLAotCS5zdmhzCQk9IDIsCi0JLmdwaW9tYXNrCT0gMywKLQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMH0sCi0JLmF1ZGlvbXV4CT0geyAwLCAxLCAwLCAxLCAzfSwKLQkubmVlZHNfdHZhdWRpbwk9IDEsCi0JLnR1bmVyX3R5cGUJPSAtMSwKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi19LHsKLQkubmFtZQkJPSAiQVZlck1lZGlhIFRWUGhvbmUiLAotCS52aWRlb19pbnB1dHMJPSAzLAotCS5hdWRpb19pbnB1dHMJPSAxLAotCS50dW5lcgkJPSAwLAotCS5zdmhzCQk9IDMsCi0JLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LAotCS5ncGlvbWFzawk9IDB4MGYsCi0JLmF1ZGlvbXV4CT0geyAweDBjLCAweDA0LCAweDA4LCAweDA0LCAwfSwKLQkvKiAgICAgICAgICAgICAgICAweDA0IGZvciBzb21lIGNhcmRzID8/ICovCi0JLm5lZWRzX3R2YXVkaW8JPSAxLAotCS50dW5lcl90eXBlCT0gLTEsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCS5hdWRpb19ob29rCT0gYXZlcm1lZGlhX3R2cGhvbmVfYXVkaW8sCi0JLmhhc19yZW1vdGUgICAgID0gMSwKLX0sewotCS5uYW1lCQk9ICJNQVRSSVgtVmlzaW9uIE1WLURlbHRhIiwKLQkudmlkZW9faW5wdXRzCT0gNSwKLQkuYXVkaW9faW5wdXRzCT0gMSwKLQkudHVuZXIJCT0gLTEsCi0JLnN2aHMJCT0gMywKLQkuZ3Bpb21hc2sJPSAwLAotCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAwLCAwfSwKLQkuYXVkaW9tdXgJPSB7MCB9LAotCS5uZWVkc190dmF1ZGlvCT0gMSwKLQkudHVuZXJfdHlwZQk9IC0xLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLX0seworCS8qIC0tLS0gY2FyZCAweDA0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwlbQlRUVl9CT0FSRF9JTlRFTF0gPSB7CisJCS5uYW1lCQk9ICJJbnRlbCBDcmVhdGUgYW5kIFNoYXJlIFBDSS8gU21hcnQgVmlkZW8gUmVjb3JkZXIgSUlJIiwKKwkJLnZpZGVvX2lucHV0cwk9IDQsCisJCS5hdWRpb19pbnB1dHMJPSAwLAorCQkudHVuZXIJCT0gLTEsCisJCS5zdmhzCQk9IDIsCisJCS5ncGlvbWFzawk9IDAsCisJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxfSwKKwkJLmF1ZGlvbXV4CT0geyAwIH0sCisJCS5uZWVkc190dmF1ZGlvCT0gMCwKKwkJLnR1bmVyX3R5cGUJPSA0LAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJfSwKKwlbQlRUVl9CT0FSRF9ESUFNT05EXSA9IHsKKwkJLm5hbWUJCT0gIkRpYW1vbmQgRFRWMjAwMCIsCisJCS52aWRlb19pbnB1dHMJPSA0LAorCQkuYXVkaW9faW5wdXRzCT0gMSwKKwkJLnR1bmVyCQk9IDAsCisJCS5zdmhzCQk9IDIsCisJCS5ncGlvbWFzawk9IDMsCisJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAwfSwKKwkJLmF1ZGlvbXV4CT0geyAwLCAxLCAwLCAxLCAzfSwKKwkJLm5lZWRzX3R2YXVkaW8JPSAxLAorCQkudHVuZXJfdHlwZQk9IC0xLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJfSwKKwlbQlRUVl9CT0FSRF9BVkVSTUVESUFdID0geworCQkubmFtZQkJPSAiQVZlck1lZGlhIFRWUGhvbmUiLAorCQkudmlkZW9faW5wdXRzCT0gMywKKwkJLmF1ZGlvX2lucHV0cwk9IDEsCisJCS50dW5lcgkJPSAwLAorCQkuc3ZocwkJPSAzLAorCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMX0sCisJCS5ncGlvbWFzawk9IDB4MGYsCisJCS5hdWRpb211eAk9IHsgMHgwYywgMHgwNCwgMHgwOCwgMHgwNCwgMH0sCisJCS8qICAgICAgICAgICAgICAgIDB4MDQgZm9yIHNvbWUgY2FyZHMgPz8gKi8KKwkJLm5lZWRzX3R2YXVkaW8JPSAxLAorCQkudHVuZXJfdHlwZQk9IC0xLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5hdWRpb19ob29rCT0gYXZlcm1lZGlhX3R2cGhvbmVfYXVkaW8sCisJCS5oYXNfcmVtb3RlICAgICA9IDEsCisJfSwKKwlbQlRUVl9CT0FSRF9NQVRSSVhfVklTSU9OXSA9IHsKKwkJLm5hbWUJCT0gIk1BVFJJWC1WaXNpb24gTVYtRGVsdGEiLAorCQkudmlkZW9faW5wdXRzCT0gNSwKKwkJLmF1ZGlvX2lucHV0cwk9IDEsCisJCS50dW5lcgkJPSAtMSwKKwkJLnN2aHMJCT0gMywKKwkJLmdwaW9tYXNrCT0gMCwKKwkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDAsIDB9LAorCQkuYXVkaW9tdXgJPSB7MCB9LAorCQkubmVlZHNfdHZhdWRpbwk9IDEsCisJCS50dW5lcl90eXBlCT0gLTEsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwl9LAogCi0vKiAtLS0tIGNhcmQgMHgwOCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0JLm5hbWUJCT0gIkxpZmV2aWV3IEZseVZpZGVvIElJIChCdDg0OCkgTFIyNiAvIE1BWEkgVFYgVmlkZW8gUENJMiBMUjI2IiwKLQkudmlkZW9faW5wdXRzCT0gNCwKLQkuYXVkaW9faW5wdXRzCT0gMSwKLQkudHVuZXIJCT0gMCwKLQkuc3ZocwkJPSAyLAotCS5ncGlvbWFzawk9IDB4YzAwLAotCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxfSwKLQkuYXVkaW9tdXgJPSB7IDAsIDB4YzAwLCAweDgwMCwgMHg0MDAsIDB4YzAwLCAwfSwKLQkubmVlZHNfdHZhdWRpbwk9IDEsCi0JLnBsbAkJPSBQTExfMjgsCi0JLnR1bmVyX3R5cGUJPSAtMSwKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi19LHsKLQkubmFtZQkJPSAiSU1TL0lYbWljcm8gVHVyYm9UViIsCi0JLnZpZGVvX2lucHV0cwk9IDMsCi0JLmF1ZGlvX2lucHV0cwk9IDEsCi0JLnR1bmVyCQk9IDAsCi0JLnN2aHMJCT0gMiwKLQkuZ3Bpb21hc2sJPSAzLAotCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxfSwKLQkuYXVkaW9tdXgJPSB7IDEsIDEsIDIsIDMsIDB9LAotCS5uZWVkc190dmF1ZGlvCT0gMCwKLQkucGxsCQk9IFBMTF8yOCwKLQkudHVuZXJfdHlwZQk9IFRVTkVSX1RFTUlDX1BBTCwKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi19LHsKLQkubmFtZQkJPSAiSGF1cHBhdWdlIChidDg3OCkiLAotCS52aWRlb19pbnB1dHMJPSA0LAotCS5hdWRpb19pbnB1dHMJPSAxLAotCS50dW5lcgkJPSAwLAotCS5zdmhzCQk9IDIsCi0JLmdwaW9tYXNrCT0gMHgwZiwgLyogb2xkOiA3ICovCi0JLm11eHNlbAkJPSB7IDIsIDAsIDEsIDF9LAotCS5hdWRpb211eAk9IHsgMCwgMSwgMiwgMywgNH0sCi0JLm5lZWRzX3R2YXVkaW8JPSAxLAotCS5wbGwJCT0gUExMXzI4LAotCS50dW5lcl90eXBlCT0gLTEsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotfSx7Ci0JLm5hbWUJCT0gIk1JUk8gUENUViBwcm8iLAotCS52aWRlb19pbnB1dHMJPSAzLAotCS5hdWRpb19pbnB1dHMJPSAxLAotCS50dW5lcgkJPSAwLAotCS5zdmhzCQk9IDIsCi0JLmdwaW9tYXNrCT0gMHgzMDE0ZiwKLQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMX0sCi0JLmF1ZGlvbXV4CT0geyAweDIwMDAxLDB4MTAwMDEsIDAsIDAsMTB9LAotCS5uZWVkc190dmF1ZGlvCT0gMSwKLQkudHVuZXJfdHlwZQk9IC0xLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLX0seworCS8qIC0tLS0gY2FyZCAweDA4IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwlbQlRUVl9CT0FSRF9GTFlWSURFT10gPSB7CisJCS5uYW1lCQk9ICJMaWZldmlldyBGbHlWaWRlbyBJSSAoQnQ4NDgpIExSMjYgLyBNQVhJIFRWIFZpZGVvIFBDSTIgTFIyNiIsCisJCS52aWRlb19pbnB1dHMJPSA0LAorCQkuYXVkaW9faW5wdXRzCT0gMSwKKwkJLnR1bmVyCQk9IDAsCisJCS5zdmhzCQk9IDIsCisJCS5ncGlvbWFzawk9IDB4YzAwLAorCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMX0sCisJCS5hdWRpb211eAk9IHsgMCwgMHhjMDAsIDB4ODAwLCAweDQwMCwgMHhjMDAsIDB9LAorCQkubmVlZHNfdHZhdWRpbwk9IDEsCisJCS5wbGwJCT0gUExMXzI4LAorCQkudHVuZXJfdHlwZQk9IC0xLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJfSwKKwlbQlRUVl9CT0FSRF9UVVJCT1RWXSA9IHsKKwkJLm5hbWUJCT0gIklNUy9JWG1pY3JvIFR1cmJvVFYiLAorCQkudmlkZW9faW5wdXRzCT0gMywKKwkJLmF1ZGlvX2lucHV0cwk9IDEsCisJCS50dW5lcgkJPSAwLAorCQkuc3ZocwkJPSAyLAorCQkuZ3Bpb21hc2sJPSAzLAorCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMX0sCisJCS5hdWRpb211eAk9IHsgMSwgMSwgMiwgMywgMH0sCisJCS5uZWVkc190dmF1ZGlvCT0gMCwKKwkJLnBsbAkJPSBQTExfMjgsCisJCS50dW5lcl90eXBlCT0gVFVORVJfVEVNSUNfUEFMLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJfSwKKwlbQlRUVl9CT0FSRF9IQVVQUEFVR0U4NzhdID0geworCQkubmFtZQkJPSAiSGF1cHBhdWdlIChidDg3OCkiLAorCQkudmlkZW9faW5wdXRzCT0gNCwKKwkJLmF1ZGlvX2lucHV0cwk9IDEsCisJCS50dW5lcgkJPSAwLAorCQkuc3ZocwkJPSAyLAorCQkuZ3Bpb21hc2sJPSAweDBmLCAvKiBvbGQ6IDcgKi8KKwkJLm11eHNlbAkJPSB7IDIsIDAsIDEsIDF9LAorCQkuYXVkaW9tdXgJPSB7IDAsIDEsIDIsIDMsIDR9LAorCQkubmVlZHNfdHZhdWRpbwk9IDEsCisJCS5wbGwJCT0gUExMXzI4LAorCQkudHVuZXJfdHlwZQk9IC0xLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJfSwKKwlbQlRUVl9CT0FSRF9NSVJPUFJPXSA9IHsKKwkJLm5hbWUJCT0gIk1JUk8gUENUViBwcm8iLAorCQkudmlkZW9faW5wdXRzCT0gMywKKwkJLmF1ZGlvX2lucHV0cwk9IDEsCisJCS50dW5lcgkJPSAwLAorCQkuc3ZocwkJPSAyLAorCQkuZ3Bpb21hc2sJPSAweDMwMTRmLAorCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMX0sCisJCS5hdWRpb211eAk9IHsgMHgyMDAwMSwweDEwMDAxLCAwLCAwLDEwfSwKKwkJLm5lZWRzX3R2YXVkaW8JPSAxLAorCQkudHVuZXJfdHlwZQk9IC0xLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJfSwKIAotLyogLS0tLSBjYXJkIDB4MGMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCS5uYW1lCQk9ICJBRFMgVGVjaG5vbG9naWVzIENoYW5uZWwgU3VyZmVyIFRWIChidDg0OCkiLAotCS52aWRlb19pbnB1dHMJPSAzLAotCS5hdWRpb19pbnB1dHMJPSAxLAotCS50dW5lcgkJPSAwLAotCS5zdmhzCQk9IDIsCi0JLmdwaW9tYXNrCT0gMTUsCi0JLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LAotCS5hdWRpb211eAk9IHsgMTMsIDE0LCAxMSwgNywgMCwgMH0sCi0JLm5lZWRzX3R2YXVkaW8JPSAxLAotCS50dW5lcl90eXBlCT0gLTEsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotfSx7Ci0JLm5hbWUJCT0gIkFWZXJNZWRpYSBUVkNhcHR1cmUgOTgiLAotCS52aWRlb19pbnB1dHMJPSAzLAotCS5hdWRpb19pbnB1dHMJPSA0LAotCS50dW5lcgkJPSAwLAotCS5zdmhzCQk9IDIsCi0JLmdwaW9tYXNrCT0gMTUsCi0JLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LAotCS5hdWRpb211eAk9IHsgMTMsIDE0LCAxMSwgNywgMCwgMH0sCi0JLm5lZWRzX3R2YXVkaW8JPSAxLAotCS5tc3AzNHh4X2FsdCAgICA9IDEsCi0JLnBsbAkJPSBQTExfMjgsCi0JLnR1bmVyX3R5cGUJPSBUVU5FUl9QSElMSVBTX1BBTCwKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JLmF1ZGlvX2hvb2sgICAgID0gYXZlcm1lZGlhX3R2X3N0ZXJlb19hdWRpbywKLX0sewotCS5uYW1lCQk9ICJBaW1zbGFiIFZpZGVvIEhpZ2h3YXkgWHRyZW1lIChWSFgpIiwKLQkudmlkZW9faW5wdXRzCT0gMywKLQkuYXVkaW9faW5wdXRzCT0gMSwKLQkudHVuZXIJCT0gMCwKLQkuc3ZocwkJPSAyLAotCS5ncGlvbWFzawk9IDcsCi0JLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LAotCS5hdWRpb211eAk9IHsgMCwgMiwgMSwgMywgNH0sIC8qIG9sZDogeyAwLCAxLCAyLCAzLCA0fSAqLwotCS5uZWVkc190dmF1ZGlvCT0gMSwKLQkucGxsCQk9IFBMTF8yOCwKLQkudHVuZXJfdHlwZQk9IC0xLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLX0sewotCS5uYW1lCQk9ICJab2x0cml4IFRWLU1heCIsCi0JLnZpZGVvX2lucHV0cwk9IDMsCi0JLmF1ZGlvX2lucHV0cwk9IDEsCi0JLnR1bmVyCQk9IDAsCi0JLnN2aHMJCT0gMiwKLQkuZ3Bpb21hc2sJPSAxNSwKLQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMX0sCi0JLmF1ZGlvbXV4CT0gezAgLCAwLCAxICwgMCwgMTB9LAotCS5uZWVkc190dmF1ZGlvCT0gMSwKLQkudHVuZXJfdHlwZQk9IC0xLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLX0seworCS8qIC0tLS0gY2FyZCAweDBjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwlbQlRUVl9CT0FSRF9BRFNURUNIX1RWXSA9IHsKKwkJLm5hbWUJCT0gIkFEUyBUZWNobm9sb2dpZXMgQ2hhbm5lbCBTdXJmZXIgVFYgKGJ0ODQ4KSIsCisJCS52aWRlb19pbnB1dHMJPSAzLAorCQkuYXVkaW9faW5wdXRzCT0gMSwKKwkJLnR1bmVyCQk9IDAsCisJCS5zdmhzCQk9IDIsCisJCS5ncGlvbWFzawk9IDE1LAorCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMX0sCisJCS5hdWRpb211eAk9IHsgMTMsIDE0LCAxMSwgNywgMCwgMH0sCisJCS5uZWVkc190dmF1ZGlvCT0gMSwKKwkJLnR1bmVyX3R5cGUJPSAtMSwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCX0sCisJW0JUVFZfQk9BUkRfQVZFUk1FRElBOThdID0geworCQkubmFtZQkJPSAiQVZlck1lZGlhIFRWQ2FwdHVyZSA5OCIsCisJCS52aWRlb19pbnB1dHMJPSAzLAorCQkuYXVkaW9faW5wdXRzCT0gNCwKKwkJLnR1bmVyCQk9IDAsCisJCS5zdmhzCQk9IDIsCisJCS5ncGlvbWFzawk9IDE1LAorCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMX0sCisJCS5hdWRpb211eAk9IHsgMTMsIDE0LCAxMSwgNywgMCwgMH0sCisJCS5uZWVkc190dmF1ZGlvCT0gMSwKKwkJLm1zcDM0eHhfYWx0ICAgID0gMSwKKwkJLnBsbAkJPSBQTExfMjgsCisJCS50dW5lcl90eXBlCT0gVFVORVJfUEhJTElQU19QQUwsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLmF1ZGlvX2hvb2sgICAgID0gYXZlcm1lZGlhX3R2X3N0ZXJlb19hdWRpbywKKwkJLm5vX2dwaW9pcnEgICAgID0gMSwKKwl9LAorCVtCVFRWX0JPQVJEX1ZIWF0gPSB7CisJCS5uYW1lCQk9ICJBaW1zbGFiIFZpZGVvIEhpZ2h3YXkgWHRyZW1lIChWSFgpIiwKKwkJLnZpZGVvX2lucHV0cwk9IDMsCisJCS5hdWRpb19pbnB1dHMJPSAxLAorCQkudHVuZXIJCT0gMCwKKwkJLnN2aHMJCT0gMiwKKwkJLmdwaW9tYXNrCT0gNywKKwkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LAorCQkuYXVkaW9tdXgJPSB7IDAsIDIsIDEsIDMsIDR9LCAvKiBvbGQ6IHsgMCwgMSwgMiwgMywgNH0gKi8KKwkJLm5lZWRzX3R2YXVkaW8JPSAxLAorCQkucGxsCQk9IFBMTF8yOCwKKwkJLnR1bmVyX3R5cGUJPSAtMSwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCX0sCisJW0JUVFZfQk9BUkRfWk9MVFJJWF0gPSB7CisJCS5uYW1lCQk9ICJab2x0cml4IFRWLU1heCIsCisJCS52aWRlb19pbnB1dHMJPSAzLAorCQkuYXVkaW9faW5wdXRzCT0gMSwKKwkJLnR1bmVyCQk9IDAsCisJCS5zdmhzCQk9IDIsCisJCS5ncGlvbWFzawk9IDE1LAorCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMX0sCisJCS5hdWRpb211eAk9IHswICwgMCwgMSAsIDAsIDEwfSwKKwkJLm5lZWRzX3R2YXVkaW8JPSAxLAorCQkudHVuZXJfdHlwZQk9IC0xLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJfSwKIAotLyogLS0tLSBjYXJkIDB4MTAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCS5uYW1lCQk9ICJQcm9saW5rIFBpeGVsdmlldyBQbGF5VFYgKGJ0ODc4KSIsCi0JLnZpZGVvX2lucHV0cwk9IDMsCi0JLmF1ZGlvX2lucHV0cwk9IDEsCi0JLnR1bmVyCQk9IDAsCi0JLnN2aHMJCT0gMiwKLQkuZ3Bpb21hc2sJPSAweDAxZmUwMCwKLQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMX0sCi0JLyogMjAwMy0xMC0yMCBieSAiQW50b24gQS4gQXJhcG92IiA8YXJhcG92QG1haWwucnU+ICovCi0JLmF1ZGlvbXV4ICAgICAgID0geyAweDAwMWUwMCwgMCwgMHgwMTgwMDAsIDB4MDE0MDAwLCAweDAwMjAwMCwgMCB9LAotCS5uZWVkc190dmF1ZGlvCT0gMSwKLQkucGxsCQk9IFBMTF8yOCwKLQkudHVuZXJfdHlwZQk9IC0xLAotfSx7Ci0JLm5hbWUJCT0gIkxlYWR0ZWsgV2luVmlldyA2MDEiLAotCS52aWRlb19pbnB1dHMJPSAzLAotCS5hdWRpb19pbnB1dHMJPSAxLAotCS50dW5lcgkJPSAwLAotCS5zdmhzCQk9IDIsCi0JLmdwaW9tYXNrCT0gMHg4MzAwZjgsCi0JLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEsMH0sCi0JLmF1ZGlvbXV4CT0geyAweDRmYTAwNywweGNmYTAwNywweGNmYTAwNywweGNmYTAwNywweGNmYTAwNywweGNmYTAwN30sCi0JLm5lZWRzX3R2YXVkaW8JPSAxLAotCS50dW5lcl90eXBlCT0gLTEsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCS5hdWRpb19ob29rCT0gd2ludmlld19hdWRpbywKLQkuaGFzX3JhZGlvCT0gMSwKLX0sewotCS5uYW1lCQk9ICJBVkVDIEludGVyY2FwdHVyZSIsCi0JLnZpZGVvX2lucHV0cwk9IDMsCi0JLmF1ZGlvX2lucHV0cwk9IDIsCi0JLnR1bmVyCQk9IDAsCi0JLnN2aHMJCT0gMiwKLQkuZ3Bpb21hc2sJPSAwLAotCS5tdXhzZWwJCT0gezIsIDMsIDEsIDF9LAotCS5hdWRpb211eAk9IHsxLCAwLCAwLCAwLCAwfSwKLQkubmVlZHNfdHZhdWRpbwk9IDEsCi0JLnR1bmVyX3R5cGUJPSAtMSwKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi19LHsKLQkubmFtZQkJPSAiTGlmZXZpZXcgRmx5VmlkZW8gSUkgRVogL0ZseUtpdCBMUjM4IEJ0ODQ4IChjYXB0dXJlIG9ubHkpIiwKLQkudmlkZW9faW5wdXRzCT0gNCwKLQkuYXVkaW9faW5wdXRzCT0gMSwKLQkudHVuZXIJCT0gLTEsCi0JLnN2aHMJCT0gLTEsCi0JLmdwaW9tYXNrCT0gMHg4ZGZmMDAsCi0JLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LAotCS5hdWRpb211eAk9IHsgMCB9LAotCS5ub19tc3AzNHh4CT0gMSwKLQkudHVuZXJfdHlwZQk9IC0xLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLX0seworCS8qIC0tLS0gY2FyZCAweDEwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwlbQlRUVl9CT0FSRF9QSVhWSUVXUExBWVRWXSA9IHsKKwkJLm5hbWUJCT0gIlByb2xpbmsgUGl4ZWx2aWV3IFBsYXlUViAoYnQ4NzgpIiwKKwkJLnZpZGVvX2lucHV0cwk9IDMsCisJCS5hdWRpb19pbnB1dHMJPSAxLAorCQkudHVuZXIJCT0gMCwKKwkJLnN2aHMJCT0gMiwKKwkJLmdwaW9tYXNrCT0gMHgwMWZlMDAsCisJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxfSwKKwkjaWYgMAorCQkvKiBvbGQgKi8KKwkJLmF1ZGlvbXV4CT0geyAweDAxYzAwMCwgMCwgMHgwMTgwMDAsIDB4MDE0MDAwLCAweDAwMjAwMCwgMCB9LAorCSNlbHNlCisJCS8qIDIwMDMtMTAtMjAgYnkgIkFudG9uIEEuIEFyYXBvdiIgPGFyYXBvdkBtYWlsLnJ1PiAqLworCQkuYXVkaW9tdXggICAgICAgPSB7IDB4MDAxZTAwLCAwLCAweDAxODAwMCwgMHgwMTQwMDAsIDB4MDAyMDAwLCAwIH0sCisJI2VuZGlmCisJCS5uZWVkc190dmF1ZGlvCT0gMSwKKwkJLnBsbAkJPSBQTExfMjgsCisJCS50dW5lcl90eXBlCT0gLTEsCisJfSwKKwlbQlRUVl9CT0FSRF9XSU5WSUVXXzYwMV0gPSB7CisJCS5uYW1lCQk9ICJMZWFkdGVrIFdpblZpZXcgNjAxIiwKKwkJLnZpZGVvX2lucHV0cwk9IDMsCisJCS5hdWRpb19pbnB1dHMJPSAxLAorCQkudHVuZXIJCT0gMCwKKwkJLnN2aHMJCT0gMiwKKwkJLmdwaW9tYXNrCT0gMHg4MzAwZjgsCisJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxLDB9LAorCQkuYXVkaW9tdXgJPSB7IDB4NGZhMDA3LDB4Y2ZhMDA3LDB4Y2ZhMDA3LDB4Y2ZhMDA3LDB4Y2ZhMDA3LDB4Y2ZhMDA3fSwKKwkJLm5lZWRzX3R2YXVkaW8JPSAxLAorCQkudHVuZXJfdHlwZQk9IC0xLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5hdWRpb19ob29rCT0gd2ludmlld19hdWRpbywKKwkJLmhhc19yYWRpbwk9IDEsCisJfSwKKwlbQlRUVl9CT0FSRF9BVkVDX0lOVEVSQ0FQXSA9IHsKKwkJLm5hbWUJCT0gIkFWRUMgSW50ZXJjYXB0dXJlIiwKKwkJLnZpZGVvX2lucHV0cwk9IDMsCisJCS5hdWRpb19pbnB1dHMJPSAyLAorCQkudHVuZXIJCT0gMCwKKwkJLnN2aHMJCT0gMiwKKwkJLmdwaW9tYXNrCT0gMCwKKwkJLm11eHNlbAkJPSB7MiwgMywgMSwgMX0sCisJCS5hdWRpb211eAk9IHsxLCAwLCAwLCAwLCAwfSwKKwkJLm5lZWRzX3R2YXVkaW8JPSAxLAorCQkudHVuZXJfdHlwZQk9IC0xLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJfSwKKwlbQlRUVl9CT0FSRF9MSUZFX0ZMWUtJVF0gPSB7CisJCS5uYW1lCQk9ICJMaWZldmlldyBGbHlWaWRlbyBJSSBFWiAvRmx5S2l0IExSMzggQnQ4NDggKGNhcHR1cmUgb25seSkiLAorCQkudmlkZW9faW5wdXRzCT0gNCwKKwkJLmF1ZGlvX2lucHV0cwk9IDEsCisJCS50dW5lcgkJPSAtMSwKKwkJLnN2aHMJCT0gLTEsCisJCS5ncGlvbWFzawk9IDB4OGRmZjAwLAorCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMX0sCisJCS5hdWRpb211eAk9IHsgMCB9LAorCQkubm9fbXNwMzR4eAk9IDEsCisJCS50dW5lcl90eXBlCT0gLTEsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwl9LAogCi0vKiAtLS0tIGNhcmQgMHgxNCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0JLm5hbWUJCT0gIkNFSSBSYWZmbGVzIENhcmQiLAotCS52aWRlb19pbnB1dHMJPSAzLAotCS5hdWRpb19pbnB1dHMJPSAzLAotCS50dW5lcgkJPSAwLAotCS5zdmhzCQk9IDIsCi0JLm11eHNlbAkJPSB7MiwgMywgMSwgMX0sCi0JLnR1bmVyX3R5cGUJPSAtMSwKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi19LHsKLQkubmFtZQkJPSAiTGlmZXZpZXcgRmx5VmlkZW8gOTgvIEx1Y2t5IFN0YXIgSW1hZ2UgV29ybGQgQ29uZmVyZW5jZVRWIExSNTAiLAotCS52aWRlb19pbnB1dHMJPSA0LAotCS5hdWRpb19pbnB1dHMJPSAyLCAgLyogdHVuZXIsIGxpbmUgaW4gKi8KLQkudHVuZXIJCT0gMCwKLQkuc3ZocwkJPSAyLAotCS5ncGlvbWFzawk9IDB4MTgwMCwKLQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMX0sCi0JLmF1ZGlvbXV4CT0geyAwLCAweDgwMCwgMHgxMDAwLCAweDEwMDAsIDB4MTgwMH0sCi0JLnBsbAkJPSBQTExfMjgsCi0JLnR1bmVyX3R5cGUJPSBUVU5FUl9QSElMSVBTX1BBTF9JLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLX0sewotCS5uYW1lCQk9ICJBc2tleSBDUEgwNTAvIFBob2ViZSBUdiBNYXN0ZXIgKyBGTSIsCi0JLnZpZGVvX2lucHV0cwk9IDMsCi0JLmF1ZGlvX2lucHV0cwk9IDEsCi0JLnR1bmVyCQk9IDAsCi0JLnN2aHMJCT0gMiwKLQkuZ3Bpb21hc2sJPSAweGMwMCwKLQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMX0sCi0JLmF1ZGlvbXV4CT0gezAsIDEsIDB4ODAwLCAweDQwMCwgMHhjMDAsIDB9LAotCS5uZWVkc190dmF1ZGlvCT0gMSwKLQkucGxsCQk9IFBMTF8yOCwKLQkudHVuZXJfdHlwZQk9IC0xLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLX0sewotCS5uYW1lCQk9ICJNb2R1bGFyIFRlY2hub2xvZ3kgTU0yMDEvTU0yMDIvTU0yMDUvTU0yMTAvTU0yMTUgUENUViwgYnQ4NzgiLAotCS52aWRlb19pbnB1dHMJPSAzLAotCS5hdWRpb19pbnB1dHMJPSAxLAotCS50dW5lcgkJPSAwLAotCS5zdmhzCQk9IC0xLAotCS5ncGlvbWFzawk9IDcsCi0JLm11eHNlbAkJPSB7IDIsIDMsIC0xIH0sCi0JLmRpZ2l0YWxfbW9kZSAgID0gRElHSVRBTF9NT0RFX0NBTUVSQSwKLQkuYXVkaW9tdXgJPSB7IDAsIDAsIDAsIDAsIDAgfSwKLQkubm9fbXNwMzR4eAk9IDEsCi0JLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FMUFNfVFNCQjVfUEFMX0ksCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotfSx7CisJLyogLS0tLSBjYXJkIDB4MTQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCVtCVFRWX0JPQVJEX0NFSV9SQUZGTEVTXSA9IHsKKwkJLm5hbWUJCT0gIkNFSSBSYWZmbGVzIENhcmQiLAorCQkudmlkZW9faW5wdXRzCT0gMywKKwkJLmF1ZGlvX2lucHV0cwk9IDMsCisJCS50dW5lcgkJPSAwLAorCQkuc3ZocwkJPSAyLAorCQkubXV4c2VsCQk9IHsyLCAzLCAxLCAxfSwKKwkJLnR1bmVyX3R5cGUJPSAtMSwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCX0sCisJW0JUVFZfQk9BUkRfQ09ORkVSRU5DRVRWXSA9IHsKKwkJLm5hbWUJCT0gIkxpZmV2aWV3IEZseVZpZGVvIDk4LyBMdWNreSBTdGFyIEltYWdlIFdvcmxkIENvbmZlcmVuY2VUViBMUjUwIiwKKwkJLnZpZGVvX2lucHV0cwk9IDQsCisJCS5hdWRpb19pbnB1dHMJPSAyLCAgLyogdHVuZXIsIGxpbmUgaW4gKi8KKwkJLnR1bmVyCQk9IDAsCisJCS5zdmhzCQk9IDIsCisJCS5ncGlvbWFzawk9IDB4MTgwMCwKKwkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LAorCQkuYXVkaW9tdXgJPSB7IDAsIDB4ODAwLCAweDEwMDAsIDB4MTAwMCwgMHgxODAwfSwKKwkJLnBsbAkJPSBQTExfMjgsCisJCS50dW5lcl90eXBlCT0gVFVORVJfUEhJTElQU19QQUxfSSwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCX0sCisJW0JUVFZfQk9BUkRfUEhPRUJFX1RWTUFTXSA9IHsKKwkJLm5hbWUJCT0gIkFza2V5IENQSDA1MC8gUGhvZWJlIFR2IE1hc3RlciArIEZNIiwKKwkJLnZpZGVvX2lucHV0cwk9IDMsCisJCS5hdWRpb19pbnB1dHMJPSAxLAorCQkudHVuZXIJCT0gMCwKKwkJLnN2aHMJCT0gMiwKKwkJLmdwaW9tYXNrCT0gMHhjMDAsCisJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxfSwKKwkJLmF1ZGlvbXV4CT0gezAsIDEsIDB4ODAwLCAweDQwMCwgMHhjMDAsIDB9LAorCQkubmVlZHNfdHZhdWRpbwk9IDEsCisJCS5wbGwJCT0gUExMXzI4LAorCQkudHVuZXJfdHlwZQk9IC0xLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJfSwKKwlbQlRUVl9CT0FSRF9NT0RURUNfMjA1XSA9IHsKKwkJLm5hbWUJCT0gIk1vZHVsYXIgVGVjaG5vbG9neSBNTTIwMS9NTTIwMi9NTTIwNS9NTTIxMC9NTTIxNSBQQ1RWLCBidDg3OCIsCisJCS52aWRlb19pbnB1dHMJPSAzLAorCQkuYXVkaW9faW5wdXRzCT0gMSwKKwkJLnR1bmVyCQk9IDAsCisJCS5zdmhzCQk9IC0xLAorCQkuZ3Bpb21hc2sJPSA3LAorCQkubXV4c2VsCQk9IHsgMiwgMywgLTEgfSwKKwkJLmRpZ2l0YWxfbW9kZSAgID0gRElHSVRBTF9NT0RFX0NBTUVSQSwKKwkJLmF1ZGlvbXV4CT0geyAwLCAwLCAwLCAwLCAwIH0sCisJCS5ub19tc3AzNHh4CT0gMSwKKwkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BTFBTX1RTQkI1X1BBTF9JLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJfSwKIAotLyogLS0tLSBjYXJkIDB4MTggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCS5uYW1lCQk9ICJBc2tleSBDUEgwNVgvMDZYIChidDg3OCkgW21hbnkgdmVuZG9yc10iLAotCS52aWRlb19pbnB1dHMJPSAzLAotCS5hdWRpb19pbnB1dHMJPSAxLAotCS50dW5lcgkJPSAwLAotCS5zdmhzCQk9IDIsCi0JLmdwaW9tYXNrCT0gMHhlMDAsCi0JLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LAotCS5hdWRpb211eAk9IHsweDQwMCwgMHg0MDAsIDB4NDAwLCAweDQwMCwgMHhjMDB9LAotCS5uZWVkc190dmF1ZGlvCT0gMSwKLQkucGxsCQk9IFBMTF8yOCwKLQkudHVuZXJfdHlwZQk9IC0xLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkuaGFzX3JlbW90ZSAgICAgPSAxLAotfSx7Ci0JLm5hbWUgICAgICAgICAgID0gIlRlcnJhdGVjIFRlcnJhVFYrIFZlcnNpb24gMS4wIChCdDg0OCkvIFRlcnJhIFRWYWx1ZSBWZXJzaW9uIDEuMC8gVm9iaXMgVFYtQm9vc3RhciIsCi0JLnZpZGVvX2lucHV0cwk9IDMsCi0JLmF1ZGlvX2lucHV0cwk9IDEsCi0JLnR1bmVyCQk9IDAsCi0JLnN2aHMJCT0gMiwKLQkuZ3Bpb21hc2sgICAgICAgPSAweDFmMGZmZiwKLQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMX0sCi0JLmF1ZGlvbXV4ICAgICAgID0geyAweDIwMDAwLCAweDMwMDAwLCAweDEwMDAwLCAwLCAweDQwMDAwfSwKLQkubmVlZHNfdHZhdWRpbwk9IDAsCi0JLnR1bmVyX3R5cGUJPSBUVU5FUl9QSElMSVBTX1BBTCwKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JLmF1ZGlvX2hvb2sgICAgID0gdGVycmF0dl9hdWRpbywKLX0sewotCS5uYW1lCQk9ICJIYXVwcGF1Z2UgV2luQ2FtIG5ld2VyIChidDg3OCkiLAotCS52aWRlb19pbnB1dHMJPSA0LAotCS5hdWRpb19pbnB1dHMJPSAxLAotCS50dW5lcgkJPSAwLAotCS5zdmhzCQk9IDMsCi0JLmdwaW9tYXNrCT0gNywKLQkubXV4c2VsCQk9IHsgMiwgMCwgMSwgMX0sCi0JLmF1ZGlvbXV4CT0geyAwLCAxLCAyLCAzLCA0fSwKLQkubmVlZHNfdHZhdWRpbwk9IDEsCi0JLnR1bmVyX3R5cGUJPSAtMSwKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi19LHsKLQkubmFtZQkJPSAiTGlmZXZpZXcgRmx5VmlkZW8gOTgvIE1BWEkgVFYgVmlkZW8gUENJMiBMUjUwIiwKLQkudmlkZW9faW5wdXRzCT0gNCwKLQkuYXVkaW9faW5wdXRzCT0gMiwKLQkudHVuZXIJCT0gMCwKLQkuc3ZocwkJPSAyLAotCS5ncGlvbWFzawk9IDB4MTgwMCwKLQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMX0sCi0JLmF1ZGlvbXV4CT0geyAwLCAweDgwMCwgMHgxMDAwLCAweDEwMDAsIDB4MTgwMH0sCi0JLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCS50dW5lcl90eXBlCT0gVFVORVJfUEhJTElQU19TRUNBTSwKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi19LHsKKwkvKiAtLS0tIGNhcmQgMHgxOCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJW0JUVFZfQk9BUkRfTUFHSUNUVklFVzA2MV0gPSB7CisJCS5uYW1lCQk9ICJBc2tleSBDUEgwNVgvMDZYIChidDg3OCkgW21hbnkgdmVuZG9yc10iLAorCQkudmlkZW9faW5wdXRzCT0gMywKKwkJLmF1ZGlvX2lucHV0cwk9IDEsCisJCS50dW5lcgkJPSAwLAorCQkuc3ZocwkJPSAyLAorCQkuZ3Bpb21hc2sJPSAweGUwMCwKKwkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LAorCQkuYXVkaW9tdXgJPSB7MHg0MDAsIDB4NDAwLCAweDQwMCwgMHg0MDAsIDB4YzAwfSwKKwkJLm5lZWRzX3R2YXVkaW8JPSAxLAorCQkucGxsCQk9IFBMTF8yOCwKKwkJLnR1bmVyX3R5cGUJPSAtMSwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkuaGFzX3JlbW90ZSAgICAgPSAxLAorCX0sCisJW0JUVFZfQk9BUkRfVk9CSVNfQk9PU1RBUl0gPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJUZXJyYXRlYyBUZXJyYVRWKyBWZXJzaW9uIDEuMCAoQnQ4NDgpLyBUZXJyYSBUVmFsdWUgVmVyc2lvbiAxLjAvIFZvYmlzIFRWLUJvb3N0YXIiLAorCQkudmlkZW9faW5wdXRzCT0gMywKKwkJLmF1ZGlvX2lucHV0cwk9IDEsCisJCS50dW5lcgkJPSAwLAorCQkuc3ZocwkJPSAyLAorCQkuZ3Bpb21hc2sgICAgICAgPSAweDFmMGZmZiwKKwkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LAorCQkuYXVkaW9tdXggICAgICAgPSB7IDB4MjAwMDAsIDB4MzAwMDAsIDB4MTAwMDAsIDAsIDB4NDAwMDB9LAorCQkubmVlZHNfdHZhdWRpbwk9IDAsCisJCS50dW5lcl90eXBlCT0gVFVORVJfUEhJTElQU19QQUwsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLmF1ZGlvX2hvb2sgICAgID0gdGVycmF0dl9hdWRpbywKKwl9LAorCVtCVFRWX0JPQVJEX0hBVVBQQVVHX1dDQU1dID0geworCQkubmFtZQkJPSAiSGF1cHBhdWdlIFdpbkNhbSBuZXdlciAoYnQ4NzgpIiwKKwkJLnZpZGVvX2lucHV0cwk9IDQsCisJCS5hdWRpb19pbnB1dHMJPSAxLAorCQkudHVuZXIJCT0gMCwKKwkJLnN2aHMJCT0gMywKKwkJLmdwaW9tYXNrCT0gNywKKwkJLm11eHNlbAkJPSB7IDIsIDAsIDEsIDF9LAorCQkuYXVkaW9tdXgJPSB7IDAsIDEsIDIsIDMsIDR9LAorCQkubmVlZHNfdHZhdWRpbwk9IDEsCisJCS50dW5lcl90eXBlCT0gLTEsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwl9LAorCVtCVFRWX0JPQVJEX01BWEldID0geworCQkubmFtZQkJPSAiTGlmZXZpZXcgRmx5VmlkZW8gOTgvIE1BWEkgVFYgVmlkZW8gUENJMiBMUjUwIiwKKwkJLnZpZGVvX2lucHV0cwk9IDQsCisJCS5hdWRpb19pbnB1dHMJPSAyLAorCQkudHVuZXIJCT0gMCwKKwkJLnN2aHMJCT0gMiwKKwkJLmdwaW9tYXNrCT0gMHgxODAwLAorCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMX0sCisJCS5hdWRpb211eAk9IHsgMCwgMHg4MDAsIDB4MTAwMCwgMHgxMDAwLCAweDE4MDB9LAorCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCisJCS50dW5lcl90eXBlCT0gVFVORVJfUEhJTElQU19TRUNBTSwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCX0sCiAKLS8qIC0tLS0gY2FyZCAweDFjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQkubmFtZSAgICAgICAgICAgPSAiVGVycmF0ZWMgVGVycmFUVisgVmVyc2lvbiAxLjEgKGJ0ODc4KSIsCi0JLnZpZGVvX2lucHV0cwk9IDMsCi0JLmF1ZGlvX2lucHV0cwk9IDEsCi0JLnR1bmVyCQk9IDAsCi0JLnN2aHMJCT0gMiwKLQkuZ3Bpb21hc2sJPSAweDFmMGZmZiwKLQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMX0sCi0JLmF1ZGlvbXV4CT0geyAweDIwMDAwLCAweDMwMDAwLCAweDEwMDAwLCAweDAwMDAwLCAweDQwMDAwfSwKLQkubmVlZHNfdHZhdWRpbwk9IDAsCi0JLnR1bmVyX3R5cGUJPSBUVU5FUl9QSElMSVBTX1BBTCwKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JLmF1ZGlvX2hvb2sJPSB0ZXJyYXR2X2F1ZGlvLAotCS8qIEdQSU8gd2lyaW5nOgotCUV4dGVybmFsIDIwIHBpbiBjb25uZWN0b3IgKGZvciBBY3RpdmUgUmFkaW8gVXBncmFkZSBib2FyZCkKLQlncGlvMDA6IGkyYy1zZGEKLQlncGlvMDE6IGkyYy1zY2wKLQlncGlvMDI6IG9tNTYxMC1kYXRhCi0JZ3BpbzAzOiBvbTU2MTAtY2xrCi0JZ3BpbzA0OiBvbTU2MTAtd3JlCi0JZ3BpbzA1OiBvbTU2MTAtc3RlcmVvCi0JZ3BpbzA2OiByZHM2NTg4LWRhdm4KLQlncGlvMDc6IFBpbiA3IG4uYy4KLQlncGlvMDg6IG5JT1cKLQlncGlvMDkrMTA6IG5JT1IsIG5TRUwgPz8gKGJ0ODc4KQotCQlncGlvMDk6IG5JT1IgKGJ0ODQ4KQotCQlncGlvMTA6IG5TRUwgKGJ0ODQ4KQotCVNvdW5kIFJvdXRpbmc6Ci0JZ3BpbzE2OiB1Mi1BMCAoMXN0IDQwNTJidCkKLQlncGlvMTc6IHUyLUExCi0JZ3BpbzE4OiB1Mi1uRU4KLQlncGlvMTk6IHU0LUEwICgybmQgNDA1MikKLQlncGlvMjA6IHU0LUExCi0JCXU0LW5FTiAtIEdORAotCUJ0c3B5OgotCQkwMDAwMCA6IENkcm9tIChpbnRlcm5hbCBhdWRpbyBpbnB1dCkKLQkJMTAwMDAgOiBleHQuIFZpZGVvIGF1ZGlvIGlucHV0Ci0JCTIwMDAwIDogVFYgTW9ubwotCQlhMDAwMCA6IFRWIE1vbm8vMgotCTFhMDAwMCA6IFRWIFN0ZXJlbwotCQkzMDAwMCA6IFJhZGlvCi0JCTQwMDAwIDogTXV0ZQotKi8KLQotfSx7Ci0JLyogSmFubmlrIEZyaXRzY2ggPGphbm5pa0B0ZWNoZmFrLnVuaS1iaWVsZWZlbGQuZGU+ICovCi0JLm5hbWUJCT0gIkltYWdlbmF0aW9uIFBYQzIwMCIsCi0JLnZpZGVvX2lucHV0cwk9IDUsCi0JLmF1ZGlvX2lucHV0cwk9IDEsCi0JLnR1bmVyCQk9IC0xLAotCS5zdmhzCQk9IDEsIC8qIHdhczogNCAqLwotCS5ncGlvbWFzawk9IDAsCi0JLm11eHNlbAkJPSB7IDIsIDMsIDEsIDAsIDB9LAotCS5hdWRpb211eAk9IHsgMCB9LAotCS5uZWVkc190dmF1ZGlvCT0gMSwKLQkudHVuZXJfdHlwZQk9IC0xLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkubXV4c2VsX2hvb2sgICAgPSBQWEMyMDBfbXV4c2VsLAotCi19LHsKLQkubmFtZQkJPSAiTGlmZXZpZXcgRmx5VmlkZW8gOTggTFI1MCIsCi0JLnZpZGVvX2lucHV0cwk9IDQsCi0JLmF1ZGlvX2lucHV0cwk9IDEsCi0JLnR1bmVyCQk9IDAsCi0JLnN2aHMJCT0gMiwKLQkuZ3Bpb21hc2sJPSAweDE4MDAsICAvKiAweDhkZmUwMCAqLwotCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxfSwKLQkuYXVkaW9tdXgJPSB7IDAsIDB4MDgwMCwgMHgxMDAwLCAweDEwMDAsIDB4MTgwMCwgMCB9LAotCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKLQkudHVuZXJfdHlwZQk9IC0xLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLX0sewotCS5uYW1lCQk9ICJGb3JtYWMgaVByb1RWLCBGb3JtYWMgUHJvVFYgSSAoYnQ4NDgpIiwKLQkudmlkZW9faW5wdXRzCT0gNCwKLQkuYXVkaW9faW5wdXRzCT0gMSwKLQkudHVuZXIJCT0gMCwKLQkuc3ZocwkJPSAzLAotCS5ncGlvbWFzawk9IDEsCi0JLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LAotCS5hdWRpb211eAk9IHsgMSwgMCwgMCwgMCwgMCB9LAotCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKLQkudHVuZXJfdHlwZQk9IFRVTkVSX1BISUxJUFNfUEFMLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLX0sewotCi0vKiAtLS0tIGNhcmQgMHgyMCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0JLm5hbWUJCT0gIkludGVsIENyZWF0ZSBhbmQgU2hhcmUgUENJLyBTbWFydCBWaWRlbyBSZWNvcmRlciBJSUkiLAotCS52aWRlb19pbnB1dHMJPSA0LAotCS5hdWRpb19pbnB1dHMJPSAwLAotCS50dW5lcgkJPSAtMSwKLQkuc3ZocwkJPSAyLAotCS5ncGlvbWFzawk9IDAsCi0JLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LAotCS5hdWRpb211eAk9IHsgMCB9LAotCS5uZWVkc190dmF1ZGlvCT0gMCwKLQkudHVuZXJfdHlwZQk9IDQsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotfSx7Ci0JLm5hbWUgICAgICAgICAgID0gIlRlcnJhdGVjIFRlcnJhVFZhbHVlIFZlcnNpb24gQnQ4NzgiLAotCS52aWRlb19pbnB1dHMJPSAzLAotCS5hdWRpb19pbnB1dHMJPSAxLAotCS50dW5lcgkJPSAwLAotCS5zdmhzCQk9IDIsCi0JLmdwaW9tYXNrCT0gMHhmZmZmMDAsCi0JLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LAotCS5hdWRpb211eAk9IHsgMHg1MDAsIDAsIDB4MzAwLCAweDkwMCwgMHg5MDB9LAotCS5uZWVkc190dmF1ZGlvCT0gMSwKLQkucGxsCQk9IFBMTF8yOCwKLQkudHVuZXJfdHlwZQk9IFRVTkVSX1BISUxJUFNfUEFMLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLX0sewotCS5uYW1lCQk9ICJMZWFkdGVrIFdpbkZhc3QgMjAwMC8gV2luRmFzdCAyMDAwIFhQIiwKLQkudmlkZW9faW5wdXRzCT0gNCwKLQkuYXVkaW9faW5wdXRzCT0gMSwKLQkudHVuZXIJCT0gMCwKLQkuc3ZocwkJPSAyLAotCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxLCAwfSwgLyogVFYsIENWaWQsIFNWaWQsIENWaWQgb3ZlciBTVmlkIGNvbm5lY3RvciAqLwotCS8qIEFsZXhhbmRlciBWYXJha2luIDxhdmFyYWtpbkBob3RtYWlsLmNvbT4gW3N0ZXJlbyB2ZXJzaW9uXSAqLwotCS5ncGlvbWFzawk9IDB4YjMzMDAwLAotCS5hdWRpb211eAk9IHsgMHgxMjIwMDAsMHgxMDAwLDB4MDAwMCwweDYyMDAwMCwweDgwMDAwMCB9LAotCS8qIEF1ZGlvIFJvdXRpbmcgZm9yICJXaW5GYXN0IDIwMDAgWFAiIChubyB0diBzdGVyZW8gISkKLQkJZ3BpbzIzIC0tIGhlZjQwNTI6bkVuYWJsZSAoMHg4MDAwMDApCi0JCWdwaW8xMiAtLSBoZWY0MDUyOkExCi0JCWdwaW8xMyAtLSBoZWY0MDUyOkEwCi0JMHgwMDAwOiBleHRlcm5hbCBhdWRpbwotCTB4MTAwMDogRk0KLQkweDIwMDA6IFRWCi0JMHgzMDAwOiBuLmMuCi0JTm90ZTogVGhlcmUgZXhpc3RzIGFub3RoZXIgdmFyaWFudCAiV2luZmFzdCAyMDAwIiB3aXRoIHR2IHN0ZXJlbyAhPwotCU5vdGU6IGVlcHJvbSBvbmx5IGNvbnRhaW5zIEZGIGFuZCBwY2kgc3Vic3lzdGVtIGlkIDEwN2Q6NjYwNgorCS8qIC0tLS0gY2FyZCAweDFjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwlbQlRUVl9CT0FSRF9URVJSQVRWXSA9IHsKKwkJLm5hbWUgICAgICAgICAgID0gIlRlcnJhdGVjIFRlcnJhVFYrIFZlcnNpb24gMS4xIChidDg3OCkiLAorCQkudmlkZW9faW5wdXRzCT0gMywKKwkJLmF1ZGlvX2lucHV0cwk9IDEsCisJCS50dW5lcgkJPSAwLAorCQkuc3ZocwkJPSAyLAorCQkuZ3Bpb21hc2sJPSAweDFmMGZmZiwKKwkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LAorCQkuYXVkaW9tdXgJPSB7IDB4MjAwMDAsIDB4MzAwMDAsIDB4MTAwMDAsIDB4MDAwMDAsIDB4NDAwMDB9LAorCQkubmVlZHNfdHZhdWRpbwk9IDAsCisJCS50dW5lcl90eXBlCT0gVFVORVJfUEhJTElQU19QQUwsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLmF1ZGlvX2hvb2sJPSB0ZXJyYXR2X2F1ZGlvLAorCQkvKiBHUElPIHdpcmluZzoKKwkJRXh0ZXJuYWwgMjAgcGluIGNvbm5lY3RvciAoZm9yIEFjdGl2ZSBSYWRpbyBVcGdyYWRlIGJvYXJkKQorCQlncGlvMDA6IGkyYy1zZGEKKwkJZ3BpbzAxOiBpMmMtc2NsCisJCWdwaW8wMjogb201NjEwLWRhdGEKKwkJZ3BpbzAzOiBvbTU2MTAtY2xrCisJCWdwaW8wNDogb201NjEwLXdyZQorCQlncGlvMDU6IG9tNTYxMC1zdGVyZW8KKwkJZ3BpbzA2OiByZHM2NTg4LWRhdm4KKwkJZ3BpbzA3OiBQaW4gNyBuLmMuCisJCWdwaW8wODogbklPVworCQlncGlvMDkrMTA6IG5JT1IsIG5TRUwgPz8gKGJ0ODc4KQorCQkJZ3BpbzA5OiBuSU9SIChidDg0OCkKKwkJCWdwaW8xMDogblNFTCAoYnQ4NDgpCisJCVNvdW5kIFJvdXRpbmc6CisJCWdwaW8xNjogdTItQTAgKDFzdCA0MDUyYnQpCisJCWdwaW8xNzogdTItQTEKKwkJZ3BpbzE4OiB1Mi1uRU4KKwkJZ3BpbzE5OiB1NC1BMCAoMm5kIDQwNTIpCisJCWdwaW8yMDogdTQtQTEKKwkJCXU0LW5FTiAtIEdORAorCQlCdHNweToKKwkJCTAwMDAwIDogQ2Ryb20gKGludGVybmFsIGF1ZGlvIGlucHV0KQorCQkJMTAwMDAgOiBleHQuIFZpZGVvIGF1ZGlvIGlucHV0CisJCQkyMDAwMCA6IFRWIE1vbm8KKwkJCWEwMDAwIDogVFYgTW9uby8yCisJCTFhMDAwMCA6IFRWIFN0ZXJlbworCQkJMzAwMDAgOiBSYWRpbworCQkJNDAwMDAgOiBNdXRlCiAJKi8KLQkubmVlZHNfdHZhdWRpbwk9IDAsCi0JLnBsbAkJPSBQTExfMjgsCi0JLmhhc19yYWRpbwk9IDEsCi0JLnR1bmVyX3R5cGUJPSA1LCAvKiBkZWZhdWx0IGZvciBub3csIGdwaW8gcmVhZHMgQkZGRjA2IGZvciBQYWwgYmcrZGsgKi8KLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JLmF1ZGlvX2hvb2sJPSB3aW5mYXN0MjAwMF9hdWRpbywKLQkuaGFzX3JlbW90ZSAgICAgPSAxLAotfSx7Ci0JLm5hbWUJCT0gIkxpZmV2aWV3IEZseVZpZGVvIDk4IExSNTAgLyBDaHJvbm9zIFZpZGVvIFNodXR0bGUgSUkiLAotCS52aWRlb19pbnB1dHMJPSA0LAotCS5hdWRpb19pbnB1dHMJPSAzLAotCS50dW5lcgkJPSAwLAotCS5zdmhzCQk9IDIsCi0JLmdwaW9tYXNrCT0gMHgxODAwLAotCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxfSwKLQkuYXVkaW9tdXgJPSB7IDAsIDB4ODAwLCAweDEwMDAsIDB4MTAwMCwgMHgxODAwfSwKLQkucGxsCQk9IFBMTF8yOCwKLQkudHVuZXJfdHlwZQk9IC0xLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLX0sewogCi0vKiAtLS0tIGNhcmQgMHgyNCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0JLm5hbWUJCT0gIkxpZmV2aWV3IEZseVZpZGVvIDk4Rk0gTFI1MCAvIFR5cGhvb24gVFZpZXcgVFYvRk0gVHVuZXIiLAotCS52aWRlb19pbnB1dHMJPSA0LAotCS5hdWRpb19pbnB1dHMJPSAzLAotCS50dW5lcgkJPSAwLAotCS5zdmhzCQk9IDIsCi0JLmdwaW9tYXNrCT0gMHgxODAwLAotCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxfSwKLQkuYXVkaW9tdXgJPSB7IDAsIDB4ODAwLCAweDEwMDAsIDB4MTAwMCwgMHgxODAwLCAwIH0sCi0JLnBsbAkJPSBQTExfMjgsCi0JLnR1bmVyX3R5cGUJPSAtMSwKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JLmhhc19yYWRpbwk9IDEsCi19LHsKLQkubmFtZQkJPSAiUHJvbGluayBQaXhlbFZpZXcgUGxheVRWIHBybyIsCi0JLnZpZGVvX2lucHV0cwk9IDMsCi0JLmF1ZGlvX2lucHV0cwk9IDEsCi0JLnR1bmVyCQk9IDAsCi0JLnN2aHMJCT0gMiwKLQkuZ3Bpb21hc2sJPSAweGZmLAotCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCi0JLmF1ZGlvbXV4CT0geyAweDIxLCAweDIwLCAweDI0LCAweDJjLCAweDI5LCAweDI5IH0sCi0JLm5vX21zcDM0eHgJPSAxLAotCS5wbGwJCT0gUExMXzI4LAotCS50dW5lcl90eXBlCT0gLTEsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotfSx7Ci0JLm5hbWUJCT0gIkFza2V5IENQSDA2WCBUVmlldzk5IiwKLQkudmlkZW9faW5wdXRzCT0gNCwKLQkuYXVkaW9faW5wdXRzCT0gMSwKLQkudHVuZXIJCT0gMCwKLQkuc3ZocwkJPSAyLAotCS5ncGlvbWFzawk9IDB4NTUxZTAwLAotCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAwfSwKLQkuYXVkaW9tdXgJPSB7IDB4NTUxNDAwLCAweDU1MTIwMCwgMCwgMCwgMHg1NTFjMDAsIDB4NTUxMjAwIH0sCi0JLm5lZWRzX3R2YXVkaW8JPSAxLAotCS5wbGwJCT0gUExMXzI4LAotCS50dW5lcl90eXBlCT0gMSwKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JLmhhc19yZW1vdGUgICAgID0gMSwKLX0sewotCS5uYW1lCQk9ICJQaW5uYWNsZSBQQ1RWIFN0dWRpby9SYXZlIiwKLQkudmlkZW9faW5wdXRzCT0gMywKLQkuYXVkaW9faW5wdXRzCT0gMSwKLQkudHVuZXIJCT0gMCwKLQkuc3ZocwkJPSAyLAotCS5ncGlvbWFzawk9IDB4MDMwMDBGLAotCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxfSwKLQkuYXVkaW9tdXgJPSB7IDIsIDB4ZDAwMDEsIDAsIDAsIDF9LAotCS5uZWVkc190dmF1ZGlvCT0gMCwKLQkucGxsCQk9IFBMTF8yOCwKLQkudHVuZXJfdHlwZQk9IC0xLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLX0seworCX0sCisJW0JUVFZfQk9BUkRfUFhDMjAwXSA9IHsKKwkJLyogSmFubmlrIEZyaXRzY2ggPGphbm5pa0B0ZWNoZmFrLnVuaS1iaWVsZWZlbGQuZGU+ICovCisJCS5uYW1lCQk9ICJJbWFnZW5hdGlvbiBQWEMyMDAiLAorCQkudmlkZW9faW5wdXRzCT0gNSwKKwkJLmF1ZGlvX2lucHV0cwk9IDEsCisJCS50dW5lcgkJPSAtMSwKKwkJLnN2aHMJCT0gMSwgLyogd2FzOiA0ICovCisJCS5ncGlvbWFzawk9IDAsCisJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAwLCAwfSwKKwkJLmF1ZGlvbXV4CT0geyAwIH0sCisJCS5uZWVkc190dmF1ZGlvCT0gMSwKKwkJLnR1bmVyX3R5cGUJPSAtMSwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkubXV4c2VsX2hvb2sgICAgPSBQWEMyMDBfbXV4c2VsLAogCi0vKiAtLS0tIGNhcmQgMHgyOCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0JLm5hbWUJCT0gIlNUQiBUViBQQ0kgRk0sIEdhdGV3YXkgUC9OIDYwMDA3MDQgKGJ0ODc4KSwgM0RmeCBWb29kb29UViAxMDAiLAotCS52aWRlb19pbnB1dHMJPSAzLAotCS5hdWRpb19pbnB1dHMJPSAxLAotCS50dW5lcgkJPSAwLAotCS5zdmhzCQk9IDIsCi0JLmdwaW9tYXNrCT0gNywKLQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMX0sCi0JLmF1ZGlvbXV4CT0geyA0LCAwLCAyLCAzLCAxfSwKLQkubm9fbXNwMzR4eAk9IDEsCi0JLm5lZWRzX3R2YXVkaW8JPSAxLAotCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfTlRTQywKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCS5oYXNfcmFkaW8gICAgICA9IDEsCi19LHsKLQkubmFtZQkJPSAiQVZlck1lZGlhIFRWUGhvbmUgOTgiLAotCS52aWRlb19pbnB1dHMJPSAzLAotCS5hdWRpb19pbnB1dHMJPSA0LAotCS50dW5lcgkJPSAwLAotCS5zdmhzCQk9IDIsCi0JLmdwaW9tYXNrCT0gMTUsCi0JLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LAotCS5hdWRpb211eAk9IHsgMTMsIDQsIDExLCA3LCAwLCAwfSwKLQkubmVlZHNfdHZhdWRpbwk9IDEsCi0JLnBsbAkJPSBQTExfMjgsCi0JLnR1bmVyX3R5cGUJPSAtMSwKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JLmhhc19yYWRpbwk9IDEsCi0JLmF1ZGlvX2hvb2sJPSBhdmVybWVkaWFfdHZwaG9uZV9hdWRpbywKLX0sewotCS5uYW1lCQk9ICJQcm9WaWRlbyBQVjk1MSIsIC8qIHBpYzE2YzU0ICovCi0JLnZpZGVvX2lucHV0cwk9IDMsCi0JLmF1ZGlvX2lucHV0cwk9IDEsCi0JLnR1bmVyCQk9IDAsCi0JLnN2aHMJCT0gMiwKLQkuZ3Bpb21hc2sJPSAwLAotCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxfSwKLQkuYXVkaW9tdXgJPSB7IDAsIDAsIDAsIDAsIDB9LAotCS5uZWVkc190dmF1ZGlvCT0gMSwKLQkubm9fbXNwMzR4eAk9IDEsCi0JLnBsbAkJPSBQTExfMjgsCi0JLnR1bmVyX3R5cGUJPSAxLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLX0sewotCS5uYW1lCQk9ICJMaXR0bGUgT25BaXIgVFYiLAotCS52aWRlb19pbnB1dHMJPSAzLAotCS5hdWRpb19pbnB1dHMJPSAxLAotCS50dW5lcgkJPSAwLAotCS5zdmhzCQk9IDIsCi0JLmdwaW9tYXNrCT0gMHhlMDBiLAotCS5tdXhzZWwJCT0gezIsIDMsIDEsIDF9LAotCS5hdWRpb211eAk9IHsweGZmOWZmNiwgMHhmZjlmZjYsIDB4ZmYxZmY3LCAwLCAweGZmM2ZmY30sCi0JLm5vX21zcDM0eHgJPSAxLAotCS50dW5lcl90eXBlCT0gLTEsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotfSx7CisJfSwKKwlbQlRUVl9CT0FSRF9GTFlWSURFT185OF0gPSB7CisJCS5uYW1lCQk9ICJMaWZldmlldyBGbHlWaWRlbyA5OCBMUjUwIiwKKwkJLnZpZGVvX2lucHV0cwk9IDQsCisJCS5hdWRpb19pbnB1dHMJPSAxLAorCQkudHVuZXIJCT0gMCwKKwkJLnN2aHMJCT0gMiwKKwkJLmdwaW9tYXNrCT0gMHgxODAwLCAgLyogMHg4ZGZlMDAgKi8KKwkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LAorCQkuYXVkaW9tdXgJPSB7IDAsIDB4MDgwMCwgMHgxMDAwLCAweDEwMDAsIDB4MTgwMCwgMCB9LAorCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCisJCS50dW5lcl90eXBlCT0gLTEsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwl9LAorCVtCVFRWX0JPQVJEX0lQUk9UVl0gPSB7CisJCS5uYW1lCQk9ICJGb3JtYWMgaVByb1RWLCBGb3JtYWMgUHJvVFYgSSAoYnQ4NDgpIiwKKwkJLnZpZGVvX2lucHV0cwk9IDQsCisJCS5hdWRpb19pbnB1dHMJPSAxLAorCQkudHVuZXIJCT0gMCwKKwkJLnN2aHMJCT0gMywKKwkJLmdwaW9tYXNrCT0gMSwKKwkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LAorCQkuYXVkaW9tdXgJPSB7IDEsIDAsIDAsIDAsIDAgfSwKKwkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAorCQkudHVuZXJfdHlwZQk9IFRVTkVSX1BISUxJUFNfUEFMLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJfSwKIAotLyogLS0tLSBjYXJkIDB4MmMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCS5uYW1lCQk9ICJTaWdtYSBUVklJLUZNIiwKLQkudmlkZW9faW5wdXRzCT0gMiwKLQkuYXVkaW9faW5wdXRzCT0gMSwKLQkudHVuZXIJCT0gMCwKLQkuc3ZocwkJPSAtMSwKLQkuZ3Bpb21hc2sJPSAzLAotCS5tdXhzZWwJCT0gezIsIDMsIDEsIDF9LAotCS5hdWRpb211eAk9IHsxLCAxLCAwLCAyLCAzfSwKLQkubm9fbXNwMzR4eAk9IDEsCi0JLnBsbAkJPSBQTExfTk9ORSwKLQkudHVuZXJfdHlwZQk9IC0xLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLX0sewotCS5uYW1lCQk9ICJNQVRSSVgtVmlzaW9uIE1WLURlbHRhIDIiLAotCS52aWRlb19pbnB1dHMJPSA1LAotCS5hdWRpb19pbnB1dHMJPSAxLAotCS50dW5lcgkJPSAtMSwKLQkuc3ZocwkJPSAzLAotCS5ncGlvbWFzawk9IDAsCi0JLm11eHNlbAkJPSB7IDIsIDMsIDEsIDAsIDB9LAotCS5hdWRpb211eAk9IHswIH0sCi0JLm5vX21zcDM0eHgJPSAxLAotCS5wbGwJCT0gUExMXzI4LAotCS50dW5lcl90eXBlCT0gLTEsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotfSx7Ci0JLm5hbWUJCT0gIlpvbHRyaXggR2VuaWUgVFYvRk0iLAotCS52aWRlb19pbnB1dHMJPSAzLAotCS5hdWRpb19pbnB1dHMJPSAxLAotCS50dW5lcgkJPSAwLAotCS5zdmhzCQk9IDIsCi0JLmdwaW9tYXNrCT0gMHhiY2YwM2YsCi0JLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LAotCS5hdWRpb211eAk9IHsgMHhiYzgwM2YsIDB4YmM5MDNmLCAweGJjYjAzZiwgMCwgMHhiY2IwM2Z9LAotCS5ub19tc3AzNHh4CT0gMSwKLQkucGxsCQk9IFBMTF8yOCwKLQkudHVuZXJfdHlwZQk9IDIxLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLX0sewotCS5uYW1lCQk9ICJUZXJyYXRlYyBUVi9SYWRpbysiLAotCS52aWRlb19pbnB1dHMJPSAzLAotCS5hdWRpb19pbnB1dHMJPSAxLAotCS50dW5lcgkJPSAwLAotCS5zdmhzCQk9IDIsCi0JLmdwaW9tYXNrCT0gMHg3MDAwMCwKLQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMX0sCi0JLmF1ZGlvbXV4CT0geyAweDIwMDAwLCAweDMwMDAwLCAweDEwMDAwLCAwLCAweDQwMDAwLCAweDIwMDAwIH0sCi0JLm5lZWRzX3R2YXVkaW8JPSAxLAotCS5ub19tc3AzNHh4CT0gMSwKLQkucGxsCQk9IFBMTF8zNSwKLQkudHVuZXJfdHlwZQk9IDEsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCS5oYXNfcmFkaW8JPSAxLAotfSx7CisJLyogLS0tLSBjYXJkIDB4MjAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCVtCVFRWX0JPQVJEX0lOVEVMX0NfU19QQ0ldID0geworCQkubmFtZQkJPSAiSW50ZWwgQ3JlYXRlIGFuZCBTaGFyZSBQQ0kvIFNtYXJ0IFZpZGVvIFJlY29yZGVyIElJSSIsCisJCS52aWRlb19pbnB1dHMJPSA0LAorCQkuYXVkaW9faW5wdXRzCT0gMCwKKwkJLnR1bmVyCQk9IC0xLAorCQkuc3ZocwkJPSAyLAorCQkuZ3Bpb21hc2sJPSAwLAorCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMX0sCisJCS5hdWRpb211eAk9IHsgMCB9LAorCQkubmVlZHNfdHZhdWRpbwk9IDAsCisJCS50dW5lcl90eXBlCT0gNCwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCX0sCisJW0JUVFZfQk9BUkRfVEVSUkFUVkFMVUVdID0geworCQkubmFtZSAgICAgICAgICAgPSAiVGVycmF0ZWMgVGVycmFUVmFsdWUgVmVyc2lvbiBCdDg3OCIsCisJCS52aWRlb19pbnB1dHMJPSAzLAorCQkuYXVkaW9faW5wdXRzCT0gMSwKKwkJLnR1bmVyCQk9IDAsCisJCS5zdmhzCQk9IDIsCisJCS5ncGlvbWFzawk9IDB4ZmZmZjAwLAorCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMX0sCisJCS5hdWRpb211eAk9IHsgMHg1MDAsIDAsIDB4MzAwLCAweDkwMCwgMHg5MDB9LAorCQkubmVlZHNfdHZhdWRpbwk9IDEsCisJCS5wbGwJCT0gUExMXzI4LAorCQkudHVuZXJfdHlwZQk9IFRVTkVSX1BISUxJUFNfUEFMLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJfSwKKwlbQlRUVl9CT0FSRF9XSU5GQVNUMjAwMF0gPSB7CisJCS5uYW1lCQk9ICJMZWFkdGVrIFdpbkZhc3QgMjAwMC8gV2luRmFzdCAyMDAwIFhQIiwKKwkJLnZpZGVvX2lucHV0cwk9IDQsCisJCS5hdWRpb19pbnB1dHMJPSAxLAorCQkudHVuZXIJCT0gMCwKKwkJLnN2aHMJCT0gMiwKKwkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEsIDB9LCAvKiBUViwgQ1ZpZCwgU1ZpZCwgQ1ZpZCBvdmVyIFNWaWQgY29ubmVjdG9yICovCisJI2lmIDAKKwkJLmdwaW9tYXNrCT0gMHhjMzMwMDAsCisJCS5hdWRpb211eAk9IHsgMHg0MjIwMDAsMHgxMDAwLDB4MDAwMCwweDYyMDAwMCwweDgwMDAwMCB9LAorCSNlbHNlCisJCS8qIEFsZXhhbmRlciBWYXJha2luIDxhdmFyYWtpbkBob3RtYWlsLmNvbT4gW3N0ZXJlbyB2ZXJzaW9uXSAqLworCQkuZ3Bpb21hc2sJPSAweGIzMzAwMCwKKwkJLmF1ZGlvbXV4CT0geyAweDEyMjAwMCwweDEwMDAsMHgwMDAwLDB4NjIwMDAwLDB4ODAwMDAwIH0sCisJI2VuZGlmCisJCS8qIEF1ZGlvIFJvdXRpbmcgZm9yICJXaW5GYXN0IDIwMDAgWFAiIChubyB0diBzdGVyZW8gISkKKwkJCWdwaW8yMyAtLSBoZWY0MDUyOm5FbmFibGUgKDB4ODAwMDAwKQorCQkJZ3BpbzEyIC0tIGhlZjQwNTI6QTEKKwkJCWdwaW8xMyAtLSBoZWY0MDUyOkEwCisJCTB4MDAwMDogZXh0ZXJuYWwgYXVkaW8KKwkJMHgxMDAwOiBGTQorCQkweDIwMDA6IFRWCisJCTB4MzAwMDogbi5jLgorCQlOb3RlOiBUaGVyZSBleGlzdHMgYW5vdGhlciB2YXJpYW50ICJXaW5mYXN0IDIwMDAiIHdpdGggdHYgc3RlcmVvICE/CisJCU5vdGU6IGVlcHJvbSBvbmx5IGNvbnRhaW5zIEZGIGFuZCBwY2kgc3Vic3lzdGVtIGlkIDEwN2Q6NjYwNgorCQkqLworCQkubmVlZHNfdHZhdWRpbwk9IDAsCisJCS5wbGwJCT0gUExMXzI4LAorCQkuaGFzX3JhZGlvCT0gMSwKKwkJLnR1bmVyX3R5cGUJPSA1LCAvKiBkZWZhdWx0IGZvciBub3csIGdwaW8gcmVhZHMgQkZGRjA2IGZvciBQYWwgYmcrZGsgKi8KKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkuYXVkaW9faG9vawk9IHdpbmZhc3QyMDAwX2F1ZGlvLAorCQkuaGFzX3JlbW90ZSAgICAgPSAxLAorCX0sCisJW0JUVFZfQk9BUkRfQ0hST05PU19WUzJdID0geworCQkubmFtZQkJPSAiTGlmZXZpZXcgRmx5VmlkZW8gOTggTFI1MCAvIENocm9ub3MgVmlkZW8gU2h1dHRsZSBJSSIsCisJCS52aWRlb19pbnB1dHMJPSA0LAorCQkuYXVkaW9faW5wdXRzCT0gMywKKwkJLnR1bmVyCQk9IDAsCisJCS5zdmhzCQk9IDIsCisJCS5ncGlvbWFzawk9IDB4MTgwMCwKKwkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LAorCQkuYXVkaW9tdXgJPSB7IDAsIDB4ODAwLCAweDEwMDAsIDB4MTAwMCwgMHgxODAwfSwKKwkJLnBsbAkJPSBQTExfMjgsCisJCS50dW5lcl90eXBlCT0gLTEsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwl9LAogCi0vKiAtLS0tIGNhcmQgMHgzMCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0JLm5hbWUJCT0gIkFza2V5IENQSDAzeC8gRHluYWxpbmsgTWFnaWMgVFZpZXciLAotCS52aWRlb19pbnB1dHMJPSAzLAotCS5hdWRpb19pbnB1dHMJPSAxLAotCS50dW5lcgkJPSAwLAotCS5zdmhzCQk9IDIsCi0JLmdwaW9tYXNrCT0gMTUsCi0JLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LAotCS5hdWRpb211eAk9IHsyLDAsMCwwLDF9LAotCS5uZWVkc190dmF1ZGlvCT0gMSwKLQkucGxsCQk9IFBMTF8yOCwKLQkudHVuZXJfdHlwZQk9IC0xLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLX0sewotCS5uYW1lCQk9ICJJT0RBVEEgR1YtQkNUVjMvUENJIiwKLQkudmlkZW9faW5wdXRzCT0gMywKLQkuYXVkaW9faW5wdXRzCT0gMSwKLQkudHVuZXIJCT0gMCwKLQkuc3ZocwkJPSAyLAotCS5ncGlvbWFzawk9IDB4MDEwZjAwLAotCS5tdXhzZWwJCT0gezIsIDMsIDAsIDB9LAotCS5hdWRpb211eAk9IHsweDEwMDAwLCAwLCAweDEwMDAwLCAwLCAwLCAwfSwKLQkubm9fbXNwMzR4eAk9IDEsCi0JLnBsbAkJPSBQTExfMjgsCi0JLnR1bmVyX3R5cGUJPSBUVU5FUl9BTFBTX1RTSEM2X05UU0MsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCS5hdWRpb19ob29rCT0gZ3ZiY3R2M3BjaV9hdWRpbywKLX0sewotCS5uYW1lCQk9ICJQcm9saW5rIFBWLUJUODc4UCs0RSAvIFBpeGVsVmlldyBQbGF5VFYgUEFLIC8gTGVuY28gTVhUVi05NTc4IENQIiwKLQkudmlkZW9faW5wdXRzCT0gNSwKLQkuYXVkaW9faW5wdXRzCT0gMSwKLQkudHVuZXIJCT0gMCwKLQkuc3ZocwkJPSAzLAotCS5ncGlvbWFzawk9IDB4QUEwMDAwLAotCS5tdXhzZWwJCT0geyAyLDMsMSwxLC0xIH0sCi0JLmRpZ2l0YWxfbW9kZSAgID0gRElHSVRBTF9NT0RFX0NBTUVSQSwKLQkuYXVkaW9tdXgJPSB7IDB4MjAwMDAsIDAsIDB4ODAwMDAsIDB4ODAwMDAsIDB4YTgwMDAsIDB4NDYwMDAgIH0sCi0JLm5vX21zcDM0eHgJPSAxLAotCS5wbGwJCT0gUExMXzI4LAotCS50dW5lcl90eXBlCT0gVFVORVJfUEhJTElQU19QQUxfSSwKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JLmhhc19yZW1vdGUJPSAxLAotCS8qIEdQSU8gd2lyaW5nOiAoZGlmZmVyZW50IGZyb20gUmV2LjRDICEpCi0JCUdQSU8xNzogVTQuQTAgKGZpcnN0IGhlZjQwNTJidCkKLQkJR1BJTzE5OiBVNC5BMQotCQlHUElPMjA6IFU1LkExIChzZWNvbmQgaGVmNDA1MmJ0KQotCQlHUElPMjE6IFU0Lm5FTgotCQlHUElPMjI6IEJUODMyIFJlc2V0IExpbmUKLQkJR1BJTzIzOiBBNSxBMCwgVTUsbkVOCi0JTm90ZTogQXQgaTJjPTB4OGEgaXMgYSBCdDgzMiBjaGlwLCB3aGljaCBjaGFuZ2VzIHRvIDB4ODggYWZ0ZXIgYmVpbmcgcmVzZXQgdmlhIEdQSU8yMgorCS8qIC0tLS0gY2FyZCAweDI0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwlbQlRUVl9CT0FSRF9UWVBIT09OX1RWSUVXXSA9IHsKKwkJLm5hbWUJCT0gIkxpZmV2aWV3IEZseVZpZGVvIDk4Rk0gTFI1MCAvIFR5cGhvb24gVFZpZXcgVFYvRk0gVHVuZXIiLAorCQkudmlkZW9faW5wdXRzCT0gNCwKKwkJLmF1ZGlvX2lucHV0cwk9IDMsCisJCS50dW5lcgkJPSAwLAorCQkuc3ZocwkJPSAyLAorCQkuZ3Bpb21hc2sJPSAweDE4MDAsCisJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxfSwKKwkJLmF1ZGlvbXV4CT0geyAwLCAweDgwMCwgMHgxMDAwLCAweDEwMDAsIDB4MTgwMCwgMCB9LAorCQkucGxsCQk9IFBMTF8yOCwKKwkJLnR1bmVyX3R5cGUJPSAtMSwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkuaGFzX3JhZGlvCT0gMSwKKwl9LAorCVtCVFRWX0JPQVJEX1BYRUxWV1BMVFZQUk9dID0geworCQkubmFtZQkJPSAiUHJvbGluayBQaXhlbFZpZXcgUGxheVRWIHBybyIsCisJCS52aWRlb19pbnB1dHMJPSAzLAorCQkuYXVkaW9faW5wdXRzCT0gMSwKKwkJLnR1bmVyCQk9IDAsCisJCS5zdmhzCQk9IDIsCisJCS5ncGlvbWFzawk9IDB4ZmYsCisJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCisJCS5hdWRpb211eAk9IHsgMHgyMSwgMHgyMCwgMHgyNCwgMHgyYywgMHgyOSwgMHgyOSB9LAorCQkubm9fbXNwMzR4eAk9IDEsCisJCS5wbGwJCT0gUExMXzI4LAorCQkudHVuZXJfdHlwZQk9IC0xLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJfSwKKwlbQlRUVl9CT0FSRF9NQUdJQ1RWSUVXMDYzXSA9IHsKKwkJLm5hbWUJCT0gIkFza2V5IENQSDA2WCBUVmlldzk5IiwKKwkJLnZpZGVvX2lucHV0cwk9IDQsCisJCS5hdWRpb19pbnB1dHMJPSAxLAorCQkudHVuZXIJCT0gMCwKKwkJLnN2aHMJCT0gMiwKKwkJLmdwaW9tYXNrCT0gMHg1NTFlMDAsCisJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAwfSwKKwkJLmF1ZGlvbXV4CT0geyAweDU1MTQwMCwgMHg1NTEyMDAsIDAsIDAsIDB4NTUxYzAwLCAweDU1MTIwMCB9LAorCQkubmVlZHNfdHZhdWRpbwk9IDEsCisJCS5wbGwJCT0gUExMXzI4LAorCQkudHVuZXJfdHlwZQk9IDEsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLmhhc19yZW1vdGUgICAgID0gMSwKKwl9LAorCVtCVFRWX0JPQVJEX1BJTk5BQ0xFXSA9IHsKKwkJLm5hbWUJCT0gIlBpbm5hY2xlIFBDVFYgU3R1ZGlvL1JhdmUiLAorCQkudmlkZW9faW5wdXRzCT0gMywKKwkJLmF1ZGlvX2lucHV0cwk9IDEsCisJCS50dW5lcgkJPSAwLAorCQkuc3ZocwkJPSAyLAorCQkuZ3Bpb21hc2sJPSAweDAzMDAwRiwKKwkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LAorCQkuYXVkaW9tdXgJPSB7IDIsIDB4ZDAwMDEsIDAsIDAsIDF9LAorCQkubmVlZHNfdHZhdWRpbwk9IDAsCisJCS5wbGwJCT0gUExMXzI4LAorCQkudHVuZXJfdHlwZQk9IC0xLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJfSwKKworCS8qIC0tLS0gY2FyZCAweDI4IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwlbQlRUVl9CT0FSRF9TVEIyXSA9IHsKKwkJLm5hbWUJCT0gIlNUQiBUViBQQ0kgRk0sIEdhdGV3YXkgUC9OIDYwMDA3MDQgKGJ0ODc4KSwgM0RmeCBWb29kb29UViAxMDAiLAorCQkudmlkZW9faW5wdXRzCT0gMywKKwkJLmF1ZGlvX2lucHV0cwk9IDEsCisJCS50dW5lcgkJPSAwLAorCQkuc3ZocwkJPSAyLAorCQkuZ3Bpb21hc2sJPSA3LAorCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMX0sCisJCS5hdWRpb211eAk9IHsgNCwgMCwgMiwgMywgMX0sCisJCS5ub19tc3AzNHh4CT0gMSwKKwkJLm5lZWRzX3R2YXVkaW8JPSAxLAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX05UU0MsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAorCQkuaGFzX3JhZGlvICAgICAgPSAxLAorCX0sCisJW0JUVFZfQk9BUkRfQVZQSE9ORTk4XSA9IHsKKwkJLm5hbWUJCT0gIkFWZXJNZWRpYSBUVlBob25lIDk4IiwKKwkJLnZpZGVvX2lucHV0cwk9IDMsCisJCS5hdWRpb19pbnB1dHMJPSA0LAorCQkudHVuZXIJCT0gMCwKKwkJLnN2aHMJCT0gMiwKKwkJLmdwaW9tYXNrCT0gMTUsCisJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxfSwKKwkJLmF1ZGlvbXV4CT0geyAxMywgNCwgMTEsIDcsIDAsIDB9LAorCQkubmVlZHNfdHZhdWRpbwk9IDEsCisJCS5wbGwJCT0gUExMXzI4LAorCQkudHVuZXJfdHlwZQk9IC0xLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5oYXNfcmFkaW8JPSAxLAorCQkuYXVkaW9faG9vawk9IGF2ZXJtZWRpYV90dnBob25lX2F1ZGlvLAorCX0sCisJW0JUVFZfQk9BUkRfUFY5NTFdID0geworCQkubmFtZQkJPSAiUHJvVmlkZW8gUFY5NTEiLCAvKiBwaWMxNmM1NCAqLworCQkudmlkZW9faW5wdXRzCT0gMywKKwkJLmF1ZGlvX2lucHV0cwk9IDEsCisJCS50dW5lcgkJPSAwLAorCQkuc3ZocwkJPSAyLAorCQkuZ3Bpb21hc2sJPSAwLAorCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMX0sCisJCS5hdWRpb211eAk9IHsgMCwgMCwgMCwgMCwgMH0sCisJCS5uZWVkc190dmF1ZGlvCT0gMSwKKwkJLm5vX21zcDM0eHgJPSAxLAorCQkucGxsCQk9IFBMTF8yOCwKKwkJLnR1bmVyX3R5cGUJPSAxLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJfSwKKwlbQlRUVl9CT0FSRF9PTkFJUl9UVl0gPSB7CisJCS5uYW1lCQk9ICJMaXR0bGUgT25BaXIgVFYiLAorCQkudmlkZW9faW5wdXRzCT0gMywKKwkJLmF1ZGlvX2lucHV0cwk9IDEsCisJCS50dW5lcgkJPSAwLAorCQkuc3ZocwkJPSAyLAorCQkuZ3Bpb21hc2sJPSAweGUwMGIsCisJCS5tdXhzZWwJCT0gezIsIDMsIDEsIDF9LAorCQkuYXVkaW9tdXgJPSB7MHhmZjlmZjYsIDB4ZmY5ZmY2LCAweGZmMWZmNywgMCwgMHhmZjNmZmN9LAorCQkubm9fbXNwMzR4eAk9IDEsCisJCS50dW5lcl90eXBlCT0gLTEsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwl9LAorCisJLyogLS0tLSBjYXJkIDB4MmMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCVtCVFRWX0JPQVJEX1NJR01BX1RWSUlfRk1dID0geworCQkubmFtZQkJPSAiU2lnbWEgVFZJSS1GTSIsCisJCS52aWRlb19pbnB1dHMJPSAyLAorCQkuYXVkaW9faW5wdXRzCT0gMSwKKwkJLnR1bmVyCQk9IDAsCisJCS5zdmhzCQk9IC0xLAorCQkuZ3Bpb21hc2sJPSAzLAorCQkubXV4c2VsCQk9IHsyLCAzLCAxLCAxfSwKKwkJLmF1ZGlvbXV4CT0gezEsIDEsIDAsIDIsIDN9LAorCQkubm9fbXNwMzR4eAk9IDEsCisJCS5wbGwJCT0gUExMX05PTkUsCisJCS50dW5lcl90eXBlCT0gLTEsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwl9LAorCVtCVFRWX0JPQVJEX01BVFJJWF9WSVNJT04yXSA9IHsKKwkJLm5hbWUJCT0gIk1BVFJJWC1WaXNpb24gTVYtRGVsdGEgMiIsCisJCS52aWRlb19pbnB1dHMJPSA1LAorCQkuYXVkaW9faW5wdXRzCT0gMSwKKwkJLnR1bmVyCQk9IC0xLAorCQkuc3ZocwkJPSAzLAorCQkuZ3Bpb21hc2sJPSAwLAorCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMCwgMH0sCisJCS5hdWRpb211eAk9IHswIH0sCisJCS5ub19tc3AzNHh4CT0gMSwKKwkJLnBsbAkJPSBQTExfMjgsCisJCS50dW5lcl90eXBlCT0gLTEsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwl9LAorCVtCVFRWX0JPQVJEX1pPTFRSSVhfR0VOSUVdID0geworCQkubmFtZQkJPSAiWm9sdHJpeCBHZW5pZSBUVi9GTSIsCisJCS52aWRlb19pbnB1dHMJPSAzLAorCQkuYXVkaW9faW5wdXRzCT0gMSwKKwkJLnR1bmVyCQk9IDAsCisJCS5zdmhzCQk9IDIsCisJCS5ncGlvbWFzawk9IDB4YmNmMDNmLAorCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMX0sCisJCS5hdWRpb211eAk9IHsgMHhiYzgwM2YsIDB4YmM5MDNmLCAweGJjYjAzZiwgMCwgMHhiY2IwM2Z9LAorCQkubm9fbXNwMzR4eAk9IDEsCisJCS5wbGwJCT0gUExMXzI4LAorCQkudHVuZXJfdHlwZQk9IDIxLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJfSwKKwlbQlRUVl9CT0FSRF9URVJSQVRWUkFESU9dID0geworCQkubmFtZQkJPSAiVGVycmF0ZWMgVFYvUmFkaW8rIiwKKwkJLnZpZGVvX2lucHV0cwk9IDMsCisJCS5hdWRpb19pbnB1dHMJPSAxLAorCQkudHVuZXIJCT0gMCwKKwkJLnN2aHMJCT0gMiwKKwkJLmdwaW9tYXNrCT0gMHg3MDAwMCwKKwkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LAorCQkuYXVkaW9tdXgJPSB7IDB4MjAwMDAsIDB4MzAwMDAsIDB4MTAwMDAsIDAsIDB4NDAwMDAsIDB4MjAwMDAgfSwKKwkJLm5lZWRzX3R2YXVkaW8JPSAxLAorCQkubm9fbXNwMzR4eAk9IDEsCisJCS5wbGwJCT0gUExMXzM1LAorCQkudHVuZXJfdHlwZQk9IDEsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLmhhc19yYWRpbwk9IDEsCisJfSwKKworCS8qIC0tLS0gY2FyZCAweDMwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwlbQlRUVl9CT0FSRF9EWU5BTElOS10gPSB7CisJCS5uYW1lCQk9ICJBc2tleSBDUEgwM3gvIER5bmFsaW5rIE1hZ2ljIFRWaWV3IiwKKwkJLnZpZGVvX2lucHV0cwk9IDMsCisJCS5hdWRpb19pbnB1dHMJPSAxLAorCQkudHVuZXIJCT0gMCwKKwkJLnN2aHMJCT0gMiwKKwkJLmdwaW9tYXNrCT0gMTUsCisJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxfSwKKwkJLmF1ZGlvbXV4CT0gezIsMCwwLDAsMX0sCisJCS5uZWVkc190dmF1ZGlvCT0gMSwKKwkJLnBsbAkJPSBQTExfMjgsCisJCS50dW5lcl90eXBlCT0gLTEsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwl9LAorCVtCVFRWX0JPQVJEX0dWQkNUVjNQQ0ldID0geworCQkubmFtZQkJPSAiSU9EQVRBIEdWLUJDVFYzL1BDSSIsCisJCS52aWRlb19pbnB1dHMJPSAzLAorCQkuYXVkaW9faW5wdXRzCT0gMSwKKwkJLnR1bmVyCQk9IDAsCisJCS5zdmhzCQk9IDIsCisJCS5ncGlvbWFzawk9IDB4MDEwZjAwLAorCQkubXV4c2VsCQk9IHsyLCAzLCAwLCAwfSwKKwkJLmF1ZGlvbXV4CT0gezB4MTAwMDAsIDAsIDB4MTAwMDAsIDAsIDAsIDB9LAorCQkubm9fbXNwMzR4eAk9IDEsCisJCS5wbGwJCT0gUExMXzI4LAorCQkudHVuZXJfdHlwZQk9IFRVTkVSX0FMUFNfVFNIQzZfTlRTQywKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkuYXVkaW9faG9vawk9IGd2YmN0djNwY2lfYXVkaW8sCisJfSwKKwlbQlRUVl9CT0FSRF9QWEVMVldQTFRWUEFLXSA9IHsKKwkJLm5hbWUJCT0gIlByb2xpbmsgUFYtQlQ4NzhQKzRFIC8gUGl4ZWxWaWV3IFBsYXlUViBQQUsgLyBMZW5jbyBNWFRWLTk1NzggQ1AiLAorCQkudmlkZW9faW5wdXRzCT0gNSwKKwkJLmF1ZGlvX2lucHV0cwk9IDEsCisJCS50dW5lcgkJPSAwLAorCQkuc3ZocwkJPSAzLAorCQkuZ3Bpb21hc2sJPSAweEFBMDAwMCwKKwkJLm11eHNlbAkJPSB7IDIsMywxLDEsLTEgfSwKKwkJLmRpZ2l0YWxfbW9kZSAgID0gRElHSVRBTF9NT0RFX0NBTUVSQSwKKwkJLmF1ZGlvbXV4CT0geyAweDIwMDAwLCAwLCAweDgwMDAwLCAweDgwMDAwLCAweGE4MDAwLCAweDQ2MDAwICB9LAorCQkubm9fbXNwMzR4eAk9IDEsCisJCS5wbGwJCT0gUExMXzI4LAorCQkudHVuZXJfdHlwZQk9IFRVTkVSX1BISUxJUFNfUEFMX0ksCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLmhhc19yZW1vdGUJPSAxLAorCQkvKiBHUElPIHdpcmluZzogKGRpZmZlcmVudCBmcm9tIFJldi40QyAhKQorCQkJR1BJTzE3OiBVNC5BMCAoZmlyc3QgaGVmNDA1MmJ0KQorCQkJR1BJTzE5OiBVNC5BMQorCQkJR1BJTzIwOiBVNS5BMSAoc2Vjb25kIGhlZjQwNTJidCkKKwkJCUdQSU8yMTogVTQubkVOCisJCQlHUElPMjI6IEJUODMyIFJlc2V0IExpbmUKKwkJCUdQSU8yMzogQTUsQTAsIFU1LG5FTgorCQlOb3RlOiBBdCBpMmM9MHg4YSBpcyBhIEJ0ODMyIGNoaXAsIHdoaWNoIGNoYW5nZXMgdG8gMHg4OCBhZnRlciBiZWluZyByZXNldCB2aWEgR1BJTzIyCisJCSovCisJfSwKKwlbQlRUVl9CT0FSRF9FQUdMRV0gPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJFYWdsZSBXaXJlbGVzcyBDYXByaWNvcm4yIChidDg3OEEpIiwKKwkJLnZpZGVvX2lucHV0cyAgID0gNCwKKwkJLmF1ZGlvX2lucHV0cyAgID0gMSwKKwkJLnR1bmVyICAgICAgICAgID0gMCwKKwkJLnN2aHMgICAgICAgICAgID0gMiwKKwkJLmdwaW9tYXNrICAgICAgID0gNywKKwkJLm11eHNlbCAgICAgICAgID0geyAyLCAwLCAxLCAxfSwKKwkJLmF1ZGlvbXV4ICAgICAgID0geyAwLCAxLCAyLCAzLCA0fSwKKwkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAorCQkudHVuZXJfdHlwZSAgICAgPSAtMSAvKiBUVU5FUl9BTFBTX1RNREgyX05UU0MgKi8sCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwl9LAorCisJLyogLS0tLSBjYXJkIDB4MzQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCVtCVFRWX0JPQVJEX1BJTk5BQ0xFUFJPXSA9IHsKKwkJLyogRGF2aWQgSMOkcmRlbWFuIDxkYXZpZEAyZ2VuLmNvbT4gKi8KKwkJLm5hbWUgICAgICAgICAgID0gIlBpbm5hY2xlIFBDVFYgU3R1ZGlvIFBybyIsCisJCS52aWRlb19pbnB1dHMgICA9IDQsCisJCS5hdWRpb19pbnB1dHMgICA9IDEsCisJCS50dW5lciAgICAgICAgICA9IDAsCisJCS5zdmhzICAgICAgICAgICA9IDMsCisJCS5ncGlvbWFzayAgICAgICA9IDB4MDMwMDBGLAorCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMX0sCisJCS5hdWRpb211eAk9IHsgMSwgMHhkMDAwMSwgMCwgMCwgMTB9LAorCQkJCS8qIHNvdW5kIHBhdGggKDUgc291cmNlcyk6CisJCQkJTVVYMSAobWFzayAweDAzKSwgRW5hYmxlIFBpbiAweDA4ICgwPWVuYWJsZSwgMT1kaXNhYmxlKQorCQkJCQkwPSBleHQuIEF1ZGlvIElOCisJCQkJCTE9IGZyb20gTVVYMgorCQkJCQkyPSBNb25vIFRWIHNvdW5kIGZyb20gVHVuZXIKKwkJCQkJMz0gbm90IGNvbm5lY3RlZAorCQkJCU1VWDIgKG1hc2sgMHgzMDAwMCk6CisJCQkJCTAsMiwzPSBmcm9tIE1TUDM0eHgKKwkJCQkJMT0gRk0gc3RlcmVvIFJhZGlvIGZyb20gVHVuZXIgKi8KKwkJLm5lZWRzX3R2YXVkaW8gID0gMCwKKwkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAorCQkudHVuZXJfdHlwZSAgICAgPSAtMSwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCX0sCisJW0JUVFZfQk9BUkRfVFZJRVdfUkRTX0ZNXSA9IHsKKwkJLyogQ2xhYXMgTGFuZ2JlaG4gPGNsYWFzQGJpZ2Zvb3QuY29tPiwKKwkJU3ZlbiBHcm90aGtsYWdzIDxzdmVuQHVwYi5kZT4gKi8KKwkJLm5hbWUJCT0gIlR5cGhvb24gVFZpZXcgUkRTICsgRk0gU3RlcmVvIC8gS05DMSBUViBTdGF0aW9uIFJEUyIsCisJCS52aWRlb19pbnB1dHMJPSA0LAorCQkuYXVkaW9faW5wdXRzCT0gMywKKwkJLnR1bmVyCQk9IDAsCisJCS5zdmhzCQk9IDIsCisJCS5ncGlvbWFzawk9IDB4MWMsCisJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxfSwKKwkJLmF1ZGlvbXV4CT0geyAwLCAwLCAweDEwLCA4LCA0IH0sCisJCS5uZWVkc190dmF1ZGlvCT0gMSwKKwkJLnBsbAkJPSBQTExfMjgsCisJCS50dW5lcl90eXBlCT0gVFVORVJfUEhJTElQU19QQUwsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLmhhc19yYWRpbwk9IDEsCisJfSwKKwlbQlRUVl9CT0FSRF9MSUZFVEVDXzk0MTVdID0geworCQkvKiBUaW0gUvZzdGVybXVuZHQgPHJvc3Rlcm1AdW5pLW11ZW5zdGVyLmRlPgorCQlpbiBkZS5jb21wLm9zLnVuaXgubGludXguaGFyZHdhcmU6CisJCQlvcHRpb25zIGJ0dHYgY2FyZD0wIHBsbD0xIHJhZGlvPTEgZ3Bpb21hc2s9MHgxOGUwCisJCQlhdWRpb211eD0weDQ0YzcxZiwweDQ0ZDcxZiwwLDB4NDRkNzFmLDB4NDRkZmZmCisJCQlvcHRpb25zIHR1bmVyIHR5cGU9NSAqLworCQkubmFtZQkJPSAiTGlmZXZpZXcgRmx5VmlkZW8gMjAwMCAvRmx5VmlkZW8gQTIvIExpZmV0ZWMgTFQgOTQxNSBUViBbTFI5MF0iLAorCQkudmlkZW9faW5wdXRzCT0gNCwKKwkJLmF1ZGlvX2lucHV0cwk9IDEsCisJCS50dW5lcgkJPSAwLAorCQkuc3ZocwkJPSAyLAorCQkuZ3Bpb21hc2sJPSAweDE4ZTAsCisJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxfSwKKwkJLmF1ZGlvbXV4CT0geyAweDAwMDAsMHgwODAwLDB4MTAwMCwweDEwMDAsMHgxOGUwIH0sCisJCQkvKiBGb3IgY2FyZHMgd2l0aCB0ZGE5ODIwL3RkYTk4MjE6CisJCQkJMHgwMDAwOiBUdW5lciBub3JtYWwgc3RlcmVvCisJCQkJMHgwMDgwOiBUdW5lciBBMiBTQVAgKHNlY29uZCBhdWRpbyBwcm9ncmFtID0gWndlaWthbmFsdG9uKQorCQkJCTB4MDg4MDogVHVuZXIgQTIgc3RlcmVvICovCisJCS5wbGwJCT0gUExMXzI4LAorCQkudHVuZXJfdHlwZQk9IC0xLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJfSwKKwlbQlRUVl9CT0FSRF9CRVNUQlVZX0VBU1lUVl0gPSB7CisJCS8qIE1pZ3VlbCBBbmdlbCBBbHZhcmV6IDxtYWFjcnV6QG5hdmVnYWxpYS5jb20+CisJCW9sZCBFYXN5IFRWIEJUODQ4IHZlcnNpb24gKG1vZGVsIENQSDAzMSkgKi8KKwkJLm5hbWUgICAgICAgICAgID0gIkFza2V5IENQSDAzMS8gQkVTVEJVWSBFYXN5IFRWIiwKKwkJLnZpZGVvX2lucHV0cwk9IDQsCisJCS5hdWRpb19pbnB1dHMgICA9IDEsCisJCS50dW5lciAgICAgICAgICA9IDAsCisJCS5zdmhzICAgICAgICAgICA9IDIsCisJCS5ncGlvbWFzayAgICAgICA9IDB4RiwKKwkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAwfSwKKwkJLmF1ZGlvbXV4ICAgICAgID0geyAyLCAwLCAwLCAwLCAxMH0sCisJCS5uZWVkc190dmF1ZGlvICA9IDAsCisJCS5wbGwJCT0gUExMXzI4LAorCQkudHVuZXJfdHlwZQk9IFRVTkVSX1RFTUlDX1BBTCwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCX0sCisKKwkvKiAtLS0tIGNhcmQgMHgzOCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJW0JUVFZfQk9BUkRfRkxZVklERU9fOThGTV0gPSB7CisJCS8qIEdvcmRvbiBIZXlkb24gPGdqaGV5ZG9uQGJpZ2Zvb3QuY29tICgnOTgpICovCisJCS5uYW1lICAgICAgICAgICA9ICJMaWZldmlldyBGbHlWaWRlbyA5OEZNIExSNTAiLAorCQkudmlkZW9faW5wdXRzICAgPSA0LAorCQkuYXVkaW9faW5wdXRzICAgPSAzLAorCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkuc3ZocyAgICAgICAgICAgPSAyLAorCQkuZ3Bpb21hc2sgICAgICAgPSAweDE4MDAsCisJCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMX0sCisJCS5hdWRpb211eCAgICAgICA9IHsgMCwgMHg4MDAsIDB4MTAwMCwgMHgxMDAwLCAweDE4MDAsIDAgfSwKKwkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAorCQkudHVuZXJfdHlwZSAgICAgPSA1LAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJfSwKKwkJLyogVGhpcyBpcyB0aGUgdWx0aW1hdGUgY2hlYXBvIGNhcHR1cmUgY2FyZAorCQkqIGp1c3QgYSBCVDg0OEEgb24gYSBzbWFsbCBQQ0IhCisJCSogU3RldmUgSG9zZ29vZCA8c3RldmVAZXF1aWluZXQuY29tPiAqLworCVtCVFRWX0JPQVJEX0dSQU5EVEVDXSA9IHsKKwkJLm5hbWUgICAgICAgICAgID0gIkdyYW5kVGVjICdHcmFuZCBWaWRlbyBDYXB0dXJlJyAoQnQ4NDgpIiwKKwkJLnZpZGVvX2lucHV0cyAgID0gMiwKKwkJLmF1ZGlvX2lucHV0cyAgID0gMCwKKwkJLnR1bmVyICAgICAgICAgID0gLTEsCisJCS5zdmhzICAgICAgICAgICA9IDEsCisJCS5ncGlvbWFzayAgICAgICA9IDAsCisJCS5tdXhzZWwgICAgICAgICA9IHsgMywgMSB9LAorCQkuYXVkaW9tdXggICAgICAgPSB7IDAgfSwKKwkJLm5lZWRzX3R2YXVkaW8gID0gMCwKKwkJLm5vX21zcDM0eHggICAgID0gMSwKKwkJLnBsbCAgICAgICAgICAgID0gUExMXzM1LAorCQkudHVuZXJfdHlwZSAgICAgPSAtMSwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCX0sCisJW0JUVFZfQk9BUkRfQVNLRVlfQ1BIMDYwXSA9IHsKKwkJLyogRGFuaWVsIEhlcnJpbmd0b24gPGRhbmllbC5oZXJyaW5ndG9uQGhvbWUuY29tPiAqLworCQkubmFtZSAgICAgICAgICAgPSAiQXNrZXkgQ1BIMDYwLyBQaG9lYmUgVFYgTWFzdGVyIE9ubHkgKE5vIEZNKSIsCisJCS52aWRlb19pbnB1dHMgICA9IDMsCisJCS5hdWRpb19pbnB1dHMgICA9IDEsCisJCS50dW5lciAgICAgICAgICA9IDAsCisJCS5zdmhzICAgICAgICAgICA9IDIsCisJCS5ncGlvbWFzayAgICAgICA9IDB4ZTAwLAorCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDF9LAorCQkuYXVkaW9tdXggICAgICAgPSB7IDB4NDAwLCAweDQwMCwgMHg0MDAsIDB4NDAwLCAweDgwMCwgMHg0MDAgfSwKKwkJLm5lZWRzX3R2YXVkaW8gID0gMSwKKwkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9URU1JQ180MDM2Rlk1X05UU0MsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwl9LAorCVtCVFRWX0JPQVJEX0FTS0VZX0NQSDAzWF0gPSB7CisJCS8qIE1hdHRpIE1vdHR1cyA8bW90dHVzQHBoeXNpYy51dC5lZT4gKi8KKwkJLm5hbWUJCT0gIkFza2V5IENQSDAzeCBUViBDYXB0dXJlciIsCisJCS52aWRlb19pbnB1dHMJPSA0LAorCQkuYXVkaW9faW5wdXRzCT0gMSwKKwkJLnR1bmVyCQk9IDAsCisJCS5zdmhzCQk9IDIsCisJCS5ncGlvbWFzayAgICAgICA9IDB4MDMwMDBGLAorCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMH0sCisJCS5hdWRpb211eCAgICAgICA9IHsgMiwwLDAsMCwxIH0sCisJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKKwkJLnR1bmVyX3R5cGUJPSAwLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJfSwKKworCS8qIC0tLS0gY2FyZCAweDNjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwlbQlRUVl9CT0FSRF9NTTEwMFBDVFZdID0geworCQkvKiBQaGlsaXAgQmx1bmRlbGwgPHBoaWxiQGdudS5vcmc+ICovCisJCS5uYW1lICAgICAgICAgICA9ICJNb2R1bGFyIFRlY2hub2xvZ3kgTU0xMDBQQ1RWIiwKKwkJLnZpZGVvX2lucHV0cyAgID0gMiwKKwkJLmF1ZGlvX2lucHV0cyAgID0gMiwKKwkJLnR1bmVyCQk9IDAsCisJCS5zdmhzCQk9IC0xLAorCQkuZ3Bpb21hc2sgICAgICAgPSAxMSwKKwkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAxfSwKKwkJLmF1ZGlvbXV4ICAgICAgID0geyAyLCAwLCAwLCAxLCA4fSwKKwkJLnBsbCAgICAgICAgICAgID0gUExMXzM1LAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9URU1JQ19QQUwsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwl9LAorCVtCVFRWX0JPQVJEX0dNVjFdID0geworCQkvKiBBZHJpYW4gQ294IDxhZHJpYW5AaHVtYm9sZHQuY28udWsgKi8KKwkJLm5hbWUJCT0gIkFHIEVsZWN0cm9uaWNzIEdNVjEiLAorCQkudmlkZW9faW5wdXRzICAgPSAyLAorCQkuYXVkaW9faW5wdXRzICAgPSAwLAorCQkudHVuZXIJCT0gLTEsCisJCS5zdmhzCQk9IDEsCisJCS5ncGlvbWFzayAgICAgICA9IDB4RiwKKwkJLm11eHNlbAkJPSB7IDIsIDJ9LAorCQkuYXVkaW9tdXggICAgICAgPSB7IH0sCisJCS5ub19tc3AzNHh4ICAgICA9IDEsCisJCS5uZWVkc190dmF1ZGlvICA9IDAsCisJCS5wbGwJCT0gUExMXzI4LAorCQkudHVuZXJfdHlwZSAgICAgPSAtMSwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCX0sCisJW0JUVFZfQk9BUkRfQkVTVEJVWV9FQVNZVFYyXSA9IHsKKwkJLyogTWlndWVsIEFuZ2VsIEFsdmFyZXogPG1hYWNydXpAbmF2ZWdhbGlhLmNvbT4KKwkJbmV3IEVhc3kgVFYgQlQ4NzggdmVyc2lvbiAobW9kZWwgQ1BIMDYxKQorCQlzcGVjaWFsIHRoYW5rcyB0byBJbmZvcm1hdGljYSBNaWVyZXMgZm9yIHByb3ZpZGluZyB0aGUgY2FyZCAqLworCQkubmFtZSAgICAgICAgICAgPSAiQXNrZXkgQ1BIMDYxLyBCRVNUQlVZIEVhc3kgVFYgKGJ0ODc4KSIsCisJCS52aWRlb19pbnB1dHMJPSAzLAorCQkuYXVkaW9faW5wdXRzICAgPSAyLAorCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkuc3ZocyAgICAgICAgICAgPSAyLAorCQkuZ3Bpb21hc2sgICAgICAgPSAweEZGLAorCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDB9LAorCQkuYXVkaW9tdXggICAgICAgPSB7IDEsIDAsIDQsIDQsIDl9LAorCQkubmVlZHNfdHZhdWRpbyAgPSAwLAorCQkucGxsCQk9IFBMTF8yOCwKKwkJLnR1bmVyX3R5cGUJPSBUVU5FUl9QSElMSVBTX1BBTCwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCX0sCisJW0JUVFZfQk9BUkRfQVRJX1RWV09OREVSXSA9IHsKKwkJLyogTHVrYXMgR2ViYXVlciA8Z2VieUB2b2xueS5jej4gKi8KKwkJLm5hbWUJCT0gIkFUSSBUVi1Xb25kZXIiLAorCQkudmlkZW9faW5wdXRzCT0gMywKKwkJLmF1ZGlvX2lucHV0cwk9IDEsCisJCS50dW5lcgkJPSAwLAorCQkuc3ZocwkJPSAyLAorCQkuZ3Bpb21hc2sJPSAweGYwM2YsCisJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAwIH0sCisJCS5hdWRpb211eAk9IHsgMHhiZmZlLCAwLCAweGJmZmYsIDAsIDB4YmZmZX0sCisJCS5wbGwJCT0gUExMXzI4LAorCQkudHVuZXJfdHlwZQk9IFRVTkVSX1RFTUlDXzQwMDZGTjVfTVVMVElfUEFMLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJfSwKKworCS8qIC0tLS0gY2FyZCAweDQwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwlbQlRUVl9CT0FSRF9BVElfVFZXT05ERVJWRV0gPSB7CisJCS8qIEx1a2FzIEdlYmF1ZXIgPGdlYnlAdm9sbnkuY3o+ICovCisJCS5uYW1lCQk9ICJBVEkgVFYtV29uZGVyIFZFIiwKKwkJLnZpZGVvX2lucHV0cwk9IDIsCisJCS5hdWRpb19pbnB1dHMJPSAxLAorCQkudHVuZXIJCT0gMCwKKwkJLnN2aHMJCT0gLTEsCisJCS5ncGlvbWFzawk9IDEsCisJCS5tdXhzZWwJCT0geyAyLCAzLCAwLCAxfSwKKwkJLmF1ZGlvbXV4CT0geyAwLCAwLCAxLCAwLCAwfSwKKwkJLm5vX21zcDM0eHgJPSAxLAorCQkucGxsCQk9IFBMTF8yOCwKKwkJLnR1bmVyX3R5cGUJPSBUVU5FUl9URU1JQ180MDA2Rk41X01VTFRJX1BBTCwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCX0sCisJW0JUVFZfQk9BUkRfRkxZVklERU8yMDAwXSA9IHsKKwkJLyogRGVlSmF5IDxkZWVqYXlAd2VzdGVsOTAwLm5ldCAoMjAwMFMpICovCisJCS5uYW1lICAgICAgICAgICA9ICJMaWZldmlldyBGbHlWaWRlbyAyMDAwUyBMUjkwIiwKKwkJLnZpZGVvX2lucHV0cyAgID0gMywKKwkJLmF1ZGlvX2lucHV0cyAgID0gMywKKwkJLnR1bmVyICAgICAgICAgID0gMCwKKwkJLnN2aHMgICAgICAgICAgID0gMiwKKwkJLmdwaW9tYXNrCT0gMHgxOGUwLAorCQkubXV4c2VsCQk9IHsgMiwgMywgMCwgMX0sCisJCQkJLyogUmFkaW8gY2hhbmdlZCBmcm9tIDFlODAgdG8gMHg4MDAgdG8gbWFrZQorCQkJCUZseVZpZGVvMjAwMFMgaW4gLmh1IGhhcHB5IChnbSkqLworCQkJCS8qIC1kay0/Pz86IHNldCBtdXRlPTB4MTgwMCBmb3IgdGRhOTg3NGggZGF1Z2h0ZXJib2FyZCAqLworCQkuYXVkaW9tdXgJPSB7IDB4MDAwMCwweDA4MDAsMHgxMDAwLDB4MTAwMCwweDE4MDAsIDB4MTA4MCB9LAorCQkuYXVkaW9faG9vawk9IGZ2MjAwMHNfYXVkaW8sCisJCS5ub19tc3AzNHh4CT0gMSwKKwkJLm5vX3RkYTk4NzUJPSAxLAorCQkubmVlZHNfdHZhdWRpbyAgPSAxLAorCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCisJCS50dW5lcl90eXBlICAgICA9IDUsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwl9LAorCVtCVFRWX0JPQVJEX1RFUlJBVFZBTFVFUl0gPSB7CisJCS5uYW1lCQk9ICJUZXJyYXRlYyBUVmFsdWVSYWRpbyIsCisJCS52aWRlb19pbnB1dHMJPSAzLAorCQkuYXVkaW9faW5wdXRzCT0gMSwKKwkJLnR1bmVyCQk9IDAsCisJCS5zdmhzCQk9IDIsCisJCS5ncGlvbWFzawk9IDB4ZmZmZjAwLAorCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMX0sCisJCS5hdWRpb211eAk9IHsgMHg1MDAsIDB4NTAwLCAweDMwMCwgMHg5MDAsIDB4OTAwfSwKKwkJLm5lZWRzX3R2YXVkaW8JPSAxLAorCQkucGxsCQk9IFBMTF8yOCwKKwkJLnR1bmVyX3R5cGUJPSBUVU5FUl9QSElMSVBTX1BBTCwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkuaGFzX3JhZGlvCT0gMSwKKwl9LAorCVtCVFRWX0JPQVJEX0dWQkNUVjRQQ0ldID0geworCQkvKiBUQU5BS0EgS2VpIDxwZWcwMDYyNUBuaWZ0eS5jb20+ICovCisJCS5uYW1lICAgICAgICAgICA9ICJJT0RBVEEgR1YtQkNUVjQvUENJIiwKKwkJLnZpZGVvX2lucHV0cyAgID0gMywKKwkJLmF1ZGlvX2lucHV0cyAgID0gMSwKKwkJLnR1bmVyICAgICAgICAgID0gMCwKKwkJLnN2aHMgICAgICAgICAgID0gMiwKKwkJLmdwaW9tYXNrICAgICAgID0gMHgwMTBmMDAsCisJCS5tdXhzZWwgICAgICAgICA9IHsyLCAzLCAwLCAwfSwKKwkJLmF1ZGlvbXV4ICAgICAgID0gezB4MTAwMDAsIDAsIDB4MTAwMDAsIDAsIDAsIDB9LAorCQkubm9fbXNwMzR4eCAgICAgPSAxLAorCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1NIQVJQXzJVNUpGNTU0MF9OVFNDLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5hdWRpb19ob29rICAgICA9IGd2YmN0djNwY2lfYXVkaW8sCisJfSwKKworCS8qIC0tLS0gY2FyZCAweDQ0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwlbQlRUVl9CT0FSRF9WT09ET09UVl9GTV0gPSB7CisJCS5uYW1lICAgICAgICAgICA9ICIzRGZ4IFZvb2Rvb1RWIEZNIChFdXJvKSwgVm9vZG9vVFYgMjAwIChVU0EpIiwKKwkJLyogdHJ5ICJpbnNtb2QgbXNwMzQwMCBzaW1wbGU9MCIgaWYgeW91IGhhdmUKKwkJKiBzb3VuZCBwcm9ibGVtcyB3aXRoIHRoaXMgY2FyZC4gKi8KKwkJLnZpZGVvX2lucHV0cyAgID0gNCwKKwkJLmF1ZGlvX2lucHV0cyAgID0gMSwKKwkJLnR1bmVyICAgICAgICAgID0gMCwKKwkJLnN2aHMgICAgICAgICAgID0gLTEsCisJCS5ncGlvbWFzayAgICAgICA9IDB4NGY4YTAwLAorCQkvKiAweDEwMDAwMDogMT1NU1AgZW5hYmxlZCAoMD1kaXNhYmxlIGFnYWluKQorCQkqIDB4MDEwMDAwOiBDb25uZWN0ZWQgdG8gIlMwIiBvbiB0ZGE5ODgwICgwPVBhbC9CRywgMT1OVFNDKSAqLworCQkuYXVkaW9tdXggICAgICAgPSB7MHg5NDdmZmYsIDB4OTg3ZmZmLDB4OTQ3ZmZmLDB4OTQ3ZmZmLCAweDk0N2ZmZn0sCisJCS8qIHR2dHVuZXIsIHJhZGlvLCAgIGV4dGVybmFsLGludGVybmFsLCBtdXRlLCAgc3RlcmVvCisJCSogdHVuZXIsIENvbXBvc2l0LCBTVmlkLCBDb21wb3NpdC1vbi1TdmlkLWFkYXB0ZXIgKi8KKwkJLm11eHNlbCAgICAgICAgID0geyAyLCAzICwwICwxfSwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfTVQyMDMyLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5wbGwJCT0gUExMXzI4LAorCQkuaGFzX3JhZGlvCT0gMSwKKwl9LAorCVtCVFRWX0JPQVJEX0FJTU1TXSA9IHsKKwkJLyogUGhpbGlwIEJsdW5kZWxsIDxwYkBuZXh1cy5jby51az4gKi8KKwkJLm5hbWUgICAgICAgICAgID0gIkFjdGl2ZSBJbWFnaW5nIEFJTU1TIiwKKwkJLnZpZGVvX2lucHV0cyAgID0gMSwKKwkJLmF1ZGlvX2lucHV0cyAgID0gMCwKKwkJLnR1bmVyICAgICAgICAgID0gLTEsCisJCS50dW5lcl90eXBlICAgICA9IC0xLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKKwkJLm11eHNlbCAgICAgICAgID0geyAyIH0sCisJCS5ncGlvbWFzayAgICAgICA9IDAKKwl9LAorCVtCVFRWX0JPQVJEX1BWX0JUODc4UF9QTFVTXSA9IHsKKwkJLyogVG9tYXN6IFB5cmEgPGhlbGxmaXJlQHNlZGV6LmlxLnBsPiAqLworCQkubmFtZSAgICAgICAgICAgPSAiUHJvbGluayBQaXhlbHZpZXcgUFYtQlQ4NzhQKyAoUmV2LjRDLDhFKSIsCisJCS52aWRlb19pbnB1dHMgICA9IDMsCisJCS5hdWRpb19pbnB1dHMgICA9IDQsCisJCS50dW5lciAgICAgICAgICA9IDAsCisJCS5zdmhzICAgICAgICAgICA9IDIsCisJCS5ncGlvbWFzayAgICAgICA9IDE1LAorCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDF9LAorCQkuYXVkaW9tdXggICAgICAgPSB7IDAsIDAsIDExLCA3LCAxMywgMH0sIC8qIFRWIGFuZCBSYWRpbyB3aXRoIHNhbWUgR1BJTyAhICovCisJCS5uZWVkc190dmF1ZGlvICA9IDEsCisJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKKwkJLnR1bmVyX3R5cGUgICAgID0gMjUsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLmhhc19yZW1vdGUgICAgID0gMSwKKwkJLyogR1BJTyB3aXJpbmc6CisJCQlHUElPMDogVTQuQTAgKGhlZjQwNTJidCkKKwkJCUdQSU8xOiBVNC5BMQorCQkJR1BJTzI6IFU0LkExIChzZWNvbmQgaGVmNDA1MmJ0KQorCQkJR1BJTzM6IFU0Lm5FTiwgVTUuQTAsIEE1Lm5FTgorCQkJR1BJTzgtMTU6IHZyZDg2NmIgPworCQkqLworCX0sCisJW0JUVFZfQk9BUkRfRkxZVklERU85OEVaXSA9IHsKKwkJLm5hbWUJCT0gIkxpZmV2aWV3IEZseVZpZGVvIDk4RVogKGNhcHR1cmUgb25seSkgTFI1MSIsCisJCS52aWRlb19pbnB1dHMJPSA0LAorCQkuYXVkaW9faW5wdXRzICAgPSAwLAorCQkudHVuZXIJCT0gLTEsCisJCS5zdmhzCQk9IDIsCisJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxfSwgLyogQVYxLCBBVjIsIFNWSFMsIENWaWQgYWRhcHRlciBvbiBTVkhTICovCisJCS5wbGwJCT0gUExMXzI4LAorCQkubm9fbXNwMzR4eAk9IDEsCisJCS50dW5lcl90eXBlCT0gVU5TRVQsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwl9LAorCisJLyogLS0tLSBjYXJkIDB4NDggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCVtCVFRWX0JPQVJEX1BWX0JUODc4UF85Ql0gPSB7CisJCS8qIERhcml1c3ogS293YWxld3NraSA8ZGFyZWtrQGF1dG9tZXgucGw+ICovCisJCS5uYW1lCQk9ICJQcm9saW5rIFBpeGVsdmlldyBQVi1CVDg3OFArOUIgKFBsYXlUViBQcm8gcmV2LjlCIEZNK05JQ0FNKSIsCisJCS52aWRlb19pbnB1dHMJPSA0LAorCQkuYXVkaW9faW5wdXRzCT0gMSwKKwkJLnR1bmVyCQk9IDAsCisJCS5zdmhzCQk9IDIsCisJCS5ncGlvbWFzawk9IDB4M2YsCisJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCisJCS5hdWRpb211eAk9IHsgMHgwMSwgMHgwMCwgMHgwMywgMHgwMywgMHgwOSwgMHgwMiB9LAorCQkubmVlZHNfdHZhdWRpbyAgPSAxLAorCQkubm9fbXNwMzR4eAk9IDEsCisJCS5ub190ZGE5ODc1CT0gMSwKKwkJLnBsbAkJPSBQTExfMjgsCisJCS50dW5lcl90eXBlCT0gNSwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkuYXVkaW9faG9vawk9IHB2YnQ4NzhwOWJfYXVkaW8sIC8qIE5vdGU6IG5vdCBhbGwgY2FyZHMgaGF2ZSBzdGVyZW8gKi8KKwkJLmhhc19yYWRpbwk9IDEsICAvKiBOb3RlOiBub3QgYWxsIGNhcmRzIGhhdmUgcmFkaW8gKi8KKwkJLmhhc19yZW1vdGUgICAgID0gMSwKKwkJLyogR1BJTyB3aXJpbmc6CisJCQlHUElPMDogQTAgaGVmNDA1MgorCQkJR1BJTzE6IEExIGhlZjQwNTIKKwkJCUdQSU8zOiBuRU4gaGVmNDA1MgorCQkJR1BJTzgtMTU6IHZyZDg2NmIKKwkJCUdQSU8yMCwyMiwyMzogUjMwLFIyOSxSMjgKKwkJKi8KKwl9LAorCVtCVFRWX0JPQVJEX1NFTlNPUkFZMzExXSA9IHsKKwkJLyogQ2xheSBLdW56IDxja3VuekBtYWlsLmFyYy5uYXNhLmdvdj4gKi8KKwkJLyogeW91IG11c3QganVtcGVyIEpQNSBmb3IgdGhlIGNhcmQgdG8gd29yayAqLworCQkubmFtZSAgICAgICAgICAgPSAiU2Vuc29yYXkgMzExIiwKKwkJLnZpZGVvX2lucHV0cyAgID0gNSwKKwkJLmF1ZGlvX2lucHV0cyAgID0gMCwKKwkJLnR1bmVyICAgICAgICAgID0gLTEsCisJCS5zdmhzICAgICAgICAgICA9IDQsCisJCS5ncGlvbWFzayAgICAgICA9IDAsCisJCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMCwgMH0sCisJCS5hdWRpb211eCAgICAgICA9IHsgMCB9LAorCQkubmVlZHNfdHZhdWRpbyAgPSAwLAorCQkudHVuZXJfdHlwZSAgICAgPSAtMSwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCX0sCisJW0JUVFZfQk9BUkRfUlY2MDVdID0geworCQkvKiBNaWd1ZWwgRnJlaXRhcyA8bWlndWVsQGNldHVjLnB1Yy1yaW8uYnI+ICovCisJCS5uYW1lICAgICAgICAgICA9ICJSZW1vdGVWaXNpb24gTVggKFJWNjA1KSIsCisJCS52aWRlb19pbnB1dHMgICA9IDE2LAorCQkuYXVkaW9faW5wdXRzICAgPSAwLAorCQkudHVuZXIgICAgICAgICAgPSAtMSwKKwkJLnN2aHMgICAgICAgICAgID0gLTEsCisJCS5ncGlvbWFzayAgICAgICA9IDB4MDAsCisJCS5ncGlvbWFzazIgICAgICA9IDB4MDdmZiwKKwkJLm11eHNlbCAgICAgICAgID0geyAweDMzLCAweDEzLCAweDIzLCAweDQzLCAweGYzLCAweDczLCAweGUzLCAweDAzLAorCQkJCTB4ZDMsIDB4YjMsIDB4YzMsIDB4NjMsIDB4OTMsIDB4NTMsIDB4ODMsIDB4YTMgfSwKKwkJLm5vX21zcDM0eHggICAgID0gMSwKKwkJLm5vX3RkYTk4NzUgICAgID0gMSwKKwkJLnR1bmVyX3R5cGUgICAgID0gLTEsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLm11eHNlbF9ob29rICAgID0gcnY2MDVfbXV4c2VsLAorCX0sCisJW0JUVFZfQk9BUkRfUE9XRVJDTFJfTVRWODc4XSA9IHsKKwkJLm5hbWUgICAgICAgICAgID0gIlBvd2VyY29sb3IgTVRWODc4LyBNVFY4NzhSLyBNVFY4NzhGIiwKKwkJLnZpZGVvX2lucHV0cyAgID0gMywKKwkJLmF1ZGlvX2lucHV0cyAgID0gMiwKKwkJLnR1bmVyCQk9IDAsCisJCS5zdmhzICAgICAgICAgICA9IDIsCisJCS5ncGlvbWFzayAgICAgICA9IDB4MUM4MDBGLCAgLyogQml0MC0yOiBBdWRpbyBzZWxlY3QsIDgtMTI6cmVtb3RlIGNvbnRyb2wgMTQ6cmVtb3RlIHZhbGlkIDE1OnJlbW90ZSByZXNldCAqLworCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDEsIDEsIH0sCisJCS5hdWRpb211eCAgICAgICA9IHsgMCwgMSwgMiwgMiwgNCB9LAorCQkubmVlZHNfdHZhdWRpbyAgPSAwLAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1BBTCwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkucGxsCQk9IFBMTF8yOCwKKwkJLmhhc19yYWRpbwk9IDEsCisJfSwKKworCS8qIC0tLS0gY2FyZCAweDRjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwlbQlRUVl9CT0FSRF9XSU5EVlJdID0geworCQkvKiBNYXNha2kgU3V6dWtpIDxtYXNha2lAYnRyZWUub3JnPiAqLworCQkubmFtZSAgICAgICAgICAgPSAiQ2Fub3B1cyBXaW5EVlIgUENJIChDT01QQVEgUHJlc2FyaW8gMzUyNEpQLCA1MTEySlApIiwKKwkJLnZpZGVvX2lucHV0cyAgID0gMywKKwkJLmF1ZGlvX2lucHV0cyAgID0gMSwKKwkJLnR1bmVyICAgICAgICAgID0gMCwKKwkJLnN2aHMgICAgICAgICAgID0gMiwKKwkJLmdwaW9tYXNrICAgICAgID0gMHgxNDAwMDcsCisJCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMSB9LAorCQkuYXVkaW9tdXggICAgICAgPSB7IDAsIDEsIDIsIDMsIDQsIDAgfSwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19OVFNDLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5hdWRpb19ob29rICAgICA9IHdpbmR2cl9hdWRpbywKKwl9LAorCVtCVFRWX0JPQVJEX0dSQU5EVEVDX01VTFRJXSA9IHsKKwkJLm5hbWUgICAgICAgICAgID0gIkdyYW5kVGVjIE11bHRpIENhcHR1cmUgQ2FyZCAoQnQ4NzgpIiwKKwkJLnZpZGVvX2lucHV0cyAgID0gNCwKKwkJLmF1ZGlvX2lucHV0cyAgID0gMCwKKwkJLnR1bmVyICAgICAgICAgID0gLTEsCisJCS5zdmhzICAgICAgICAgICA9IC0xLAorCQkuZ3Bpb21hc2sgICAgICAgPSAwLAorCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDAgfSwKKwkJLmF1ZGlvbXV4ICAgICAgID0geyAwIH0sCisJCS5uZWVkc190dmF1ZGlvICA9IDAsCisJCS5ub19tc3AzNHh4ICAgICA9IDEsCisJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKKwkJLnR1bmVyX3R5cGUgICAgID0gLTEsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwl9LAorCVtCVFRWX0JPQVJEX0tXT1JMRF0gPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJKZXR3YXkgVFYvQ2FwdHVyZSBKVy1UVjg3OC1GQkssIEt3b3JsZCBLVy1UVjg3OFJGIiwKKwkJLnZpZGVvX2lucHV0cyAgID0gNCwKKwkJLmF1ZGlvX2lucHV0cyAgID0gMywKKwkJLnR1bmVyICAgICAgICAgID0gMCwKKwkJLnN2aHMgICAgICAgICAgID0gMiwKKwkJLmdwaW9tYXNrICAgICAgID0gNywKKwkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAxIH0sICAgLyogVHVuZXIsIFNWaWQsIFNWSFMsIFNWaWQgdG8gU1ZIUyBjb25uZWN0b3IgKi8KKwkJLmF1ZGlvbXV4ICAgICAgID0geyAwICwwICw0LCA0LDQsNH0sLyogWWVzLCB0aGlzIHR1bmVyIHVzZXMgdGhlIHNhbWUgYXVkaW8gb3V0cHV0IGZvciBUViBhbmQgRk0gcmFkaW8hCisJCQkJCQkqIFRoaXMgY2FyZCBsYWNrcyBleHRlcm5hbCBBdWRpbyBJbiwgc28gd2UgbXV0ZSBpdCBvbiBFeHQuICYgSW50LgorCQkJCQkJKiBUaGUgUENCIGNhbiB0YWtlIGEgc2J4MTYzNy9zYngxNjczLCB3aXJpbmcgdW5rbm93bi4KKwkJCQkJCSogVGhpcyBjYXJkIGxhY2tzIFBDSSBzdWJzeXN0ZW0gSUQsIHNpZ2guCisJCQkJCQkqIGF1ZGlvbXV4PTE6IGxvd2VyIHZvbHVtZSwgMiszOiBtdXRlCisJCQkJCQkqIGJ0d2luY2FwIHVzZXMgMHg4MDAwMC8weDgwMDAzCisJCQkJCQkqLworCQkubmVlZHNfdHZhdWRpbyAgPSAwLAorCQkubm9fbXNwMzR4eCAgICAgPSAxLAorCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCisJCS50dW5lcl90eXBlICAgICA9IDUsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLyogU2Ftc3VuZyBUQ1BBOTA5NVBDMjdBIChCRytESyksIHBoaWxpcHMgY29tcGF0aWJsZSwgdy9GTSwgc3RlcmVvIGFuZAorCQlyYWRpbyBzaWduYWwgc3RyZW5ndGggaW5kaWNhdG9ycyB3b3JrIGZpbmUuICovCisJCS5oYXNfcmFkaW8JPSAxLAorCQkvKiBHUElPIEluZm86CisJCQlHUElPMCwxOiAgIEhFRjQwNTIgQTAsQTEKKwkJCUdQSU8yOiAgICAgSEVGNDA1MiBuRU5BQkxFCisJCQlHUElPMy03OiAgIG4uYy4KKwkJCUdQSU84LTEzOiAgSVJEQzM1NyBkYXRhMC01IChkYXRhNiBuLmMuID8pIFtjaGlwIG5vdCBwcmVzZW50IG9uIG15IGNhcmRdCisJCQlHUElPMTQsMTU6ID8/CisJCQlHUElPMTYtMjE6IG4uYy4KKwkJCUdQSU8yMiwyMzogPz8KKwkJCT8/ICAgICAgIDogbXR1OGI1NmVwIG1pY3JvY29udHJvbGxlciBmb3IgSVIgKEdQSU8gd2lyaW5nIHVua25vd24pKi8KKwl9LAorCVtCVFRWX0JPQVJEX0RTUF9UQ1ZJREVPXSA9IHsKKwkJLyogQXJ0aHVyIFRldHpsYWZmLURlYXMsIERTUCBEZXNpZ24gTHRkIDxzb2Z0d2FyZUBkc3BkZXNpZ24uY29tPiAqLworCQkubmFtZSAgICAgICAgICAgPSAiRFNQIERlc2lnbiBUQ1ZJREVPIiwKKwkJLnZpZGVvX2lucHV0cyAgID0gNCwKKwkJLnN2aHMgICAgICAgICAgID0gLTEsCisJCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMH0sCisJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKKwkJLnR1bmVyX3R5cGUgICAgID0gLTEsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwl9LAorCisJCS8qIC0tLS0gY2FyZCAweDUwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwlbQlRUVl9CT0FSRF9IQVVQUEFVR0VQVlJdID0geworCQkubmFtZSAgICAgICAgICAgPSAiSGF1cHBhdWdlIFdpblRWIFBWUiIsCisJCS52aWRlb19pbnB1dHMgICA9IDQsCisJCS5hdWRpb19pbnB1dHMgICA9IDEsCisJCS50dW5lciAgICAgICAgICA9IDAsCisJCS5zdmhzICAgICAgICAgICA9IDIsCisJCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMCwgMSwgMX0sCisJCS5uZWVkc190dmF1ZGlvICA9IDEsCisJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKKwkJLnR1bmVyX3R5cGUgICAgID0gLTEsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKworCQkuZ3Bpb21hc2sgICAgICAgPSA3LAorCQkuYXVkaW9tdXggICAgICAgPSB7N30sCisJfSwKKwlbQlRUVl9CT0FSRF9HVkJDVFY1UENJXSA9IHsKKwkJLm5hbWUgICAgICAgICAgID0gIklPREFUQSBHVi1CQ1RWNS9QQ0kiLAorCQkudmlkZW9faW5wdXRzICAgPSAzLAorCQkuYXVkaW9faW5wdXRzICAgPSAxLAorCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkuc3ZocyAgICAgICAgICAgPSAyLAorCQkuZ3Bpb21hc2sgICAgICAgPSAweDBmMGY4MCwKKwkJLm11eHNlbCAgICAgICAgID0gezIsIDMsIDEsIDB9LAorCQkuYXVkaW9tdXggICAgICAgPSB7MHgwMzAwMDAsIDB4MDEwMDAwLCAwLCAwLCAweDAyMDAwMCwgMH0sCisJCS5ub19tc3AzNHh4ICAgICA9IDEsCisJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19OVFNDX00sCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLmF1ZGlvX2hvb2sgICAgID0gZ3ZiY3R2NXBjaV9hdWRpbywKKwkJLmhhc19yYWRpbyAgICAgID0gMSwKKwl9LAorCVtCVFRWX0JPQVJEX09TUFJFWTF4MF0gPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJPc3ByZXkgMTAwLzE1MCAoODc4KSIsIC8qIDB4MSgyfDMpLTQ1QzYtQzEgKi8KKwkJLnZpZGVvX2lucHV0cyAgID0gNCwgICAgICAgICAgICAgICAgICAvKiBpZC1pbnB1dHMtY2xvY2sgKi8KKwkJLmF1ZGlvX2lucHV0cyAgID0gMCwKKwkJLnR1bmVyICAgICAgICAgID0gLTEsCisJCS5zdmhzICAgICAgICAgICA9IDMsCisJCS5tdXhzZWwgICAgICAgICA9IHsgMywgMiwgMCwgMSB9LAorCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCisJCS50dW5lcl90eXBlICAgICA9IC0xLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5ub19tc3AzNHh4ICAgICA9IDEsCisJCS5ub190ZGE5ODc1ICAgICA9IDEsCisJCS5ub190ZGE3NDMyICAgICA9IDEsCisJfSwKKwlbQlRUVl9CT0FSRF9PU1BSRVkxeDBfODQ4XSA9IHsKKwkJLm5hbWUgICAgICAgICAgID0gIk9zcHJleSAxMDAvMTUwICg4NDgpIiwgLyogMHgwNC01NEMwLUMxICYgb2xkZXIgYm9hcmRzICovCisJCS52aWRlb19pbnB1dHMgICA9IDMsCisJCS5hdWRpb19pbnB1dHMgICA9IDAsCisJCS50dW5lciAgICAgICAgICA9IC0xLAorCQkuc3ZocyAgICAgICAgICAgPSAyLAorCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEgfSwKKwkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAorCQkudHVuZXJfdHlwZSAgICAgPSAtMSwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkubm9fbXNwMzR4eCAgICAgPSAxLAorCQkubm9fdGRhOTg3NSAgICAgPSAxLAorCQkubm9fdGRhNzQzMiAgICAgPSAxLAorCX0sCisKKwkJLyogLS0tLSBjYXJkIDB4NTQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCVtCVFRWX0JPQVJEX09TUFJFWTEwMV84NDhdID0geworCQkubmFtZSAgICAgICAgICAgPSAiT3NwcmV5IDEwMSAoODQ4KSIsIC8qIDB4MDUtNDBDMC1DMSAqLworCQkudmlkZW9faW5wdXRzICAgPSAyLAorCQkuYXVkaW9faW5wdXRzICAgPSAwLAorCQkudHVuZXIgICAgICAgICAgPSAtMSwKKwkJLnN2aHMgICAgICAgICAgID0gMSwKKwkJLm11eHNlbCAgICAgICAgID0geyAzLCAxIH0sCisJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKKwkJLnR1bmVyX3R5cGUgICAgID0gLTEsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLm5vX21zcDM0eHggICAgID0gMSwKKwkJLm5vX3RkYTk4NzUgICAgID0gMSwKKwkJLm5vX3RkYTc0MzIgICAgID0gMSwKKwl9LAorCVtCVFRWX0JPQVJEX09TUFJFWTF4MV0gPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJPc3ByZXkgMTAxLzE1MSIsICAgICAgIC8qIDB4MSg0fDUpLTAwMDQtQzQgKi8KKwkJLnZpZGVvX2lucHV0cyAgID0gMSwKKwkJLmF1ZGlvX2lucHV0cyAgID0gMCwKKwkJLnR1bmVyICAgICAgICAgID0gLTEsCisJCS5zdmhzICAgICAgICAgICA9IC0xLAorCQkubXV4c2VsICAgICAgICAgPSB7IDAgfSwKKwkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAorCQkudHVuZXJfdHlwZSAgICAgPSAtMSwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkubm9fbXNwMzR4eCAgICAgPSAxLAorCQkubm9fdGRhOTg3NSAgICAgPSAxLAorCQkubm9fdGRhNzQzMiAgICAgPSAxLAorCX0sCisJW0JUVFZfQk9BUkRfT1NQUkVZMXgxX1NWSURdID0geworCQkubmFtZSAgICAgICAgICAgPSAiT3NwcmV5IDEwMS8xNTEgdy8gc3ZpZCIsICAvKiAweCgxNnwxN3wyMCktMDBDNC1DMSAqLworCQkudmlkZW9faW5wdXRzICAgPSAyLAorCQkuYXVkaW9faW5wdXRzICAgPSAwLAorCQkudHVuZXIgICAgICAgICAgPSAtMSwKKwkJLnN2aHMgICAgICAgICAgID0gMSwKKwkJLm11eHNlbCAgICAgICAgID0geyAwLCAxIH0sCisJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKKwkJLnR1bmVyX3R5cGUgICAgID0gLTEsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLm5vX21zcDM0eHggICAgID0gMSwKKwkJLm5vX3RkYTk4NzUgICAgID0gMSwKKwkJLm5vX3RkYTc0MzIgICAgID0gMSwKKwl9LAorCVtCVFRWX0JPQVJEX09TUFJFWTJ4eF0gPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJPc3ByZXkgMjAwLzIwMS8yNTAvMjUxIiwgIC8qIDB4MSg4fDl8RXxGKS0wMDA0LUM0ICovCisJCS52aWRlb19pbnB1dHMgICA9IDEsCisJCS5hdWRpb19pbnB1dHMgICA9IDEsCisJCS50dW5lciAgICAgICAgICA9IC0xLAorCQkuc3ZocyAgICAgICAgICAgPSAtMSwKKwkJLm11eHNlbCAgICAgICAgID0geyAwIH0sCisJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKKwkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkubm9fbXNwMzR4eCAgICAgPSAxLAorCQkubm9fdGRhOTg3NSAgICAgPSAxLAorCQkubm9fdGRhNzQzMiAgICAgPSAxLAorCX0sCisKKwkJLyogLS0tLSBjYXJkIDB4NTggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCVtCVFRWX0JPQVJEX09TUFJFWTJ4MF9TVklEXSA9IHsKKwkJLm5hbWUgICAgICAgICAgID0gIk9zcHJleSAyMDAvMjUwIiwgICAvKiAweDEoQXxCKS0wMEM0LUMxICovCisJCS52aWRlb19pbnB1dHMgICA9IDIsCisJCS5hdWRpb19pbnB1dHMgICA9IDEsCisJCS50dW5lciAgICAgICAgICA9IC0xLAorCQkuc3ZocyAgICAgICAgICAgPSAxLAorCQkubXV4c2VsICAgICAgICAgPSB7IDAsIDEgfSwKKwkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAorCQkudHVuZXJfdHlwZQk9IFVOU0VULAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5ub19tc3AzNHh4ICAgICA9IDEsCisJCS5ub190ZGE5ODc1ICAgICA9IDEsCisJCS5ub190ZGE3NDMyICAgICA9IDEsCisJfSwKKwlbQlRUVl9CT0FSRF9PU1BSRVkyeDBdID0geworCQkubmFtZSAgICAgICAgICAgPSAiT3NwcmV5IDIxMC8yMjAiLCAgIC8qIDB4MShBfEIpLTA0QzAtQzEgKi8KKwkJLnZpZGVvX2lucHV0cyAgID0gMiwKKwkJLmF1ZGlvX2lucHV0cyAgID0gMSwKKwkJLnR1bmVyICAgICAgICAgID0gLTEsCisJCS5zdmhzICAgICAgICAgICA9IDEsCisJCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMyB9LAorCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCisJCS50dW5lcl90eXBlCT0gVU5TRVQsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLm5vX21zcDM0eHggICAgID0gMSwKKwkJLm5vX3RkYTk4NzUgICAgID0gMSwKKwkJLm5vX3RkYTc0MzIgICAgID0gMSwKKwl9LAorCVtCVFRWX0JPQVJEX09TUFJFWTUwMF0gPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJPc3ByZXkgNTAwIiwgICAvKiA1MDAgKi8KKwkJLnZpZGVvX2lucHV0cyAgID0gMiwKKwkJLmF1ZGlvX2lucHV0cyAgID0gMSwKKwkJLnR1bmVyICAgICAgICAgID0gLTEsCisJCS5zdmhzICAgICAgICAgICA9IDEsCisJCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMyB9LAorCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCisJCS50dW5lcl90eXBlICAgICA9IC0xLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5ub19tc3AzNHh4ICAgICA9IDEsCisJCS5ub190ZGE5ODc1ICAgICA9IDEsCisJCS5ub190ZGE3NDMyICAgICA9IDEsCisJfSwKKwlbQlRUVl9CT0FSRF9PU1BSRVk1NDBdID0geworCQkubmFtZSAgICAgICAgICAgPSAiT3NwcmV5IDU0MCIsICAgLyogNTQwICovCisJCS52aWRlb19pbnB1dHMgICA9IDQsCisJCS5hdWRpb19pbnB1dHMgICA9IDEsCisJCS50dW5lciAgICAgICAgICA9IC0xLAorCSNpZiAwIC8qIFRPRE8gLi4uICovCisJCS5zdmhzICAgICAgICAgICA9IE9TUFJFWTU0MF9TVklEX0FOQUxPRywKKwkJLm11eHNlbCAgICAgICAgID0geyAgICAgICBbT1NQUkVZNTQwX0NPTVBfQU5BTE9HXSA9IDIsCisJCQkJCVtPU1BSRVk1NDBfU1ZJRF9BTkFMT0ddID0gMywgfSwKKwkjZW5kaWYKKwkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAorCQkudHVuZXJfdHlwZSAgICAgPSAtMSwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkubm9fbXNwMzR4eCAgICAgPSAxLAorCQkubm9fdGRhOTg3NSAgICAgPSAxLAorCQkubm9fdGRhNzQzMiAgICAgPSAxLAorCSNpZiAwIC8qIFRPRE8gLi4uICovCisJCS5tdXhzZWxfaG9vayAgICA9IG9zcHJleV81NDBfbXV4c2VsLAorCQkucGljdHVyZV9ob29rICAgPSBvc3ByZXlfNTQwX3NldF9waWN0dXJlLAorCSNlbmRpZgorCX0sCisKKwkJLyogLS0tLSBjYXJkIDB4NUMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCVtCVFRWX0JPQVJEX09TUFJFWTIwMDBdID0geworCQkubmFtZSAgICAgICAgICAgPSAiT3NwcmV5IDIwMDAiLCAgLyogMjAwMCAqLworCQkudmlkZW9faW5wdXRzICAgPSAyLAorCQkuYXVkaW9faW5wdXRzICAgPSAxLAorCQkudHVuZXIgICAgICAgICAgPSAtMSwKKwkJLnN2aHMgICAgICAgICAgID0gMSwKKwkJLm11eHNlbCAgICAgICAgID0geyAyLCAzIH0sCisJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKKwkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkubm9fbXNwMzR4eCAgICAgPSAxLAorCQkubm9fdGRhOTg3NSAgICAgPSAxLAorCQkubm9fdGRhNzQzMiAgICAgPSAxLCAgICAgIC8qIG11c3QgYXZvaWQsIGNvbmZsaWN0cyB3aXRoIHRoZSBidDg2MCAqLworCX0sCisJW0JUVFZfQk9BUkRfSURTX0VBR0xFXSA9IHsKKwkJLyogTSBHIEJlcmJlcmljaCA8YmVyYmVyaWNAZm9yd2lzcy51bmktcGFzc2F1LmRlPiAqLworCQkubmFtZSAgICAgICAgICAgPSAiSURTIEVhZ2xlIiwKKwkJLnZpZGVvX2lucHV0cyAgID0gNCwKKwkJLmF1ZGlvX2lucHV0cyAgID0gMCwKKwkJLnR1bmVyICAgICAgICAgID0gLTEsCisJCS50dW5lcl90eXBlICAgICA9IC0xLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5zdmhzICAgICAgICAgICA9IC0xLAorCQkuZ3Bpb21hc2sgICAgICAgPSAwLAorCQkubXV4c2VsICAgICAgICAgPSB7IDAsIDEsIDIsIDMgfSwKKwkJLm11eHNlbF9ob29rICAgID0gZWFnbGVfbXV4c2VsLAorCQkubm9fbXNwMzR4eCAgICAgPSAxLAorCQkubm9fdGRhOTg3NSAgICAgPSAxLAorCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCisJfSwKKwlbQlRUVl9CT0FSRF9QSU5OQUNMRVNBVF0gPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJQaW5uYWNsZSBQQ1RWIFNhdCIsCisJCS52aWRlb19pbnB1dHMgICA9IDIsCisJCS5hdWRpb19pbnB1dHMgICA9IDAsCisJCS5zdmhzICAgICAgICAgICA9IDEsCisJCS50dW5lciAgICAgICAgICA9IC0xLAorCQkudHVuZXJfdHlwZSAgICAgPSAtMSwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkubm9fbXNwMzR4eCAgICAgPSAxLAorCQkubm9fdGRhOTg3NSAgICAgPSAxLAorCQkubm9fdGRhNzQzMiAgICAgPSAxLAorCQkubXV4c2VsICAgICAgICAgPSB7IDMsIDAsIDEsIDJ9LAorCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCisJCS5ub19ncGlvaXJxICAgICA9IDEsCisJCS5oYXNfZHZiICAgICAgICA9IDEsCisJfSwKKwlbQlRUVl9CT0FSRF9GT1JNQUNfUFJPVFZdID0geworCQkubmFtZSAgICAgICAgICAgPSAiRm9ybWFjIFByb1RWIElJIChidDg3OCkiLAorCQkudmlkZW9faW5wdXRzICAgPSA0LAorCQkuYXVkaW9faW5wdXRzICAgPSAxLAorCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkuc3ZocyAgICAgICAgICAgPSAzLAorCQkuZ3Bpb21hc2sgICAgICAgPSAyLAorCQkvKiBUViwgQ29tcDEsIENvbXBvc2l0ZSBvdmVyIFNWSUQgY29uLCBTVklEICovCisJCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMX0sCisJCS5hdWRpb211eCAgICAgICA9IHsgMiwgMiwgMCwgMCwgMCB9LAorCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCisJCS5oYXNfcmFkaW8gICAgICA9IDEsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfUEFMLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJLyogc291bmQgcm91dGluZzoKKwkJR1BJTz0weDAwLDB4MDEsMHgwMzogbXV0ZSAoPykKKwkJMHgwMjogYm90aCBUViBhbmQgcmFkaW8gKHR1bmVyOiBGTTEyMTYvSSkKKwkJVGhlIGNhcmQgaGFzIG9uYm9hcmQgYXVkaW8gY29ubmVjdG9ycyBsYWJlbGVkICJjZHJvbSIgYW5kICJib2FyZCIsCisJCW5vdCBzb2xkZXJlZCBoZXJlLCB0aG91Z2ggdW5rbm93biB3aXJpbmcuCisJCUNhcmQgbGFja3M6IGV4dGVybmFsIGF1ZGlvIGluLCBwY2kgc3Vic3lzdGVtIGlkLgogCSovCi19LHsKLQkubmFtZSAgICAgICAgICAgPSAiRWFnbGUgV2lyZWxlc3MgQ2Fwcmljb3JuMiAoYnQ4NzhBKSIsCi0JLnZpZGVvX2lucHV0cyAgID0gNCwKLQkuYXVkaW9faW5wdXRzICAgPSAxLAotCS50dW5lciAgICAgICAgICA9IDAsCi0JLnN2aHMgICAgICAgICAgID0gMiwKLQkuZ3Bpb21hc2sgICAgICAgPSA3LAotCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMCwgMSwgMX0sCi0JLmF1ZGlvbXV4ICAgICAgID0geyAwLCAxLCAyLCAzLCA0fSwKLQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JLnR1bmVyX3R5cGUgICAgID0gLTEgLyogVFVORVJfQUxQU19UTURIMl9OVFNDICovLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLX0seworCX0sCiAKLS8qIC0tLS0gY2FyZCAweDM0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQkvKiBEYXZpZCBI5HJkZW1hbiA8ZGF2aWRAMmdlbi5jb20+ICovCi0JLm5hbWUgICAgICAgICAgID0gIlBpbm5hY2xlIFBDVFYgU3R1ZGlvIFBybyIsCi0JLnZpZGVvX2lucHV0cyAgID0gNCwKLQkuYXVkaW9faW5wdXRzICAgPSAxLAotCS50dW5lciAgICAgICAgICA9IDAsCi0JLnN2aHMgICAgICAgICAgID0gMywKLQkuZ3Bpb21hc2sgICAgICAgPSAweDAzMDAwRiwKLQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMX0sCi0JLmF1ZGlvbXV4CT0geyAxLCAweGQwMDAxLCAwLCAwLCAxMH0sCi0JCQkvKiBzb3VuZCBwYXRoICg1IHNvdXJjZXMpOgotCQkJTVVYMSAobWFzayAweDAzKSwgRW5hYmxlIFBpbiAweDA4ICgwPWVuYWJsZSwgMT1kaXNhYmxlKQotCQkJCTA9IGV4dC4gQXVkaW8gSU4KLQkJCQkxPSBmcm9tIE1VWDIKLQkJCQkyPSBNb25vIFRWIHNvdW5kIGZyb20gVHVuZXIKLQkJCQkzPSBub3QgY29ubmVjdGVkCi0JCQlNVVgyIChtYXNrIDB4MzAwMDApOgotCQkJCTAsMiwzPSBmcm9tIE1TUDM0eHgKLQkJCQkxPSBGTSBzdGVyZW8gUmFkaW8gZnJvbSBUdW5lciAqLwotCS5uZWVkc190dmF1ZGlvICA9IDAsCi0JLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCS50dW5lcl90eXBlICAgICA9IC0xLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLX0sewotCS8qIENsYWFzIExhbmdiZWhuIDxjbGFhc0BiaWdmb290LmNvbT4sCi0JU3ZlbiBHcm90aGtsYWdzIDxzdmVuQHVwYi5kZT4gKi8KLQkubmFtZQkJPSAiVHlwaG9vbiBUVmlldyBSRFMgKyBGTSBTdGVyZW8gLyBLTkMxIFRWIFN0YXRpb24gUkRTIiwKLQkudmlkZW9faW5wdXRzCT0gNCwKLQkuYXVkaW9faW5wdXRzCT0gMywKLQkudHVuZXIJCT0gMCwKLQkuc3ZocwkJPSAyLAotCS5ncGlvbWFzawk9IDB4MWMsCi0JLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LAotCS5hdWRpb211eAk9IHsgMCwgMCwgMHgxMCwgOCwgNCB9LAotCS5uZWVkc190dmF1ZGlvCT0gMSwKLQkucGxsCQk9IFBMTF8yOCwKLQkudHVuZXJfdHlwZQk9IFRVTkVSX1BISUxJUFNfUEFMLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkuaGFzX3JhZGlvCT0gMSwKLX0sewotCS8qIFRpbSBS9nN0ZXJtdW5kdCA8cm9zdGVybUB1bmktbXVlbnN0ZXIuZGU+Ci0JaW4gZGUuY29tcC5vcy51bml4LmxpbnV4LmhhcmR3YXJlOgotCQlvcHRpb25zIGJ0dHYgY2FyZD0wIHBsbD0xIHJhZGlvPTEgZ3Bpb21hc2s9MHgxOGUwCi0JCWF1ZGlvbXV4PTB4NDRjNzFmLDB4NDRkNzFmLDAsMHg0NGQ3MWYsMHg0NGRmZmYKLQkJb3B0aW9ucyB0dW5lciB0eXBlPTUgKi8KLQkubmFtZQkJPSAiTGlmZXZpZXcgRmx5VmlkZW8gMjAwMCAvRmx5VmlkZW8gQTIvIExpZmV0ZWMgTFQgOTQxNSBUViBbTFI5MF0iLAotCS52aWRlb19pbnB1dHMJPSA0LAotCS5hdWRpb19pbnB1dHMJPSAxLAotCS50dW5lcgkJPSAwLAotCS5zdmhzCQk9IDIsCi0JLmdwaW9tYXNrCT0gMHgxOGUwLAotCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxfSwKLQkuYXVkaW9tdXgJPSB7IDB4MDAwMCwweDA4MDAsMHgxMDAwLDB4MTAwMCwweDE4ZTAgfSwKLQkJLyogRm9yIGNhcmRzIHdpdGggdGRhOTgyMC90ZGE5ODIxOgotCQkJMHgwMDAwOiBUdW5lciBub3JtYWwgc3RlcmVvCi0JCQkweDAwODA6IFR1bmVyIEEyIFNBUCAoc2Vjb25kIGF1ZGlvIHByb2dyYW0gPSBad2Vpa2FuYWx0b24pCi0JCQkweDA4ODA6IFR1bmVyIEEyIHN0ZXJlbyAqLwotCS5wbGwJCT0gUExMXzI4LAotCS50dW5lcl90eXBlCT0gLTEsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotfSx7Ci0JLyogTWlndWVsIEFuZ2VsIEFsdmFyZXogPG1hYWNydXpAbmF2ZWdhbGlhLmNvbT4KLQlvbGQgRWFzeSBUViBCVDg0OCB2ZXJzaW9uIChtb2RlbCBDUEgwMzEpICovCi0JLm5hbWUgICAgICAgICAgID0gIkFza2V5IENQSDAzMS8gQkVTVEJVWSBFYXN5IFRWIiwKLQkudmlkZW9faW5wdXRzCT0gNCwKLQkuYXVkaW9faW5wdXRzICAgPSAxLAotCS50dW5lciAgICAgICAgICA9IDAsCi0JLnN2aHMgICAgICAgICAgID0gMiwKLQkuZ3Bpb21hc2sgICAgICAgPSAweEYsCi0JLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAwfSwKLQkuYXVkaW9tdXggICAgICAgPSB7IDIsIDAsIDAsIDAsIDEwfSwKLQkubmVlZHNfdHZhdWRpbyAgPSAwLAotCS5wbGwJCT0gUExMXzI4LAotCS50dW5lcl90eXBlCT0gVFVORVJfVEVNSUNfUEFMLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLX0seworCQkvKiAtLS0tIGNhcmQgMHg2MCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJW0JUVFZfQk9BUkRfTUFDSFRWXSA9IHsKKwkJLm5hbWUgICAgICAgICAgID0gIk1hY2hUViIsCisJCS52aWRlb19pbnB1dHMgICA9IDMsCisJCS5hdWRpb19pbnB1dHMgICA9IDEsCisJCS50dW5lciAgICAgICAgICA9IDAsCisJCS5zdmhzICAgICAgICAgICA9IC0xLAorCQkuZ3Bpb21hc2sgICAgICAgPSA3LAorCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDF9LAorCQkuYXVkaW9tdXggICAgICAgPSB7IDAsIDEsIDIsIDMsIDR9LAorCQkubmVlZHNfdHZhdWRpbyAgPSAxLAorCQkudHVuZXJfdHlwZSAgICAgPSA1LAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKKwl9LAorCVtCVFRWX0JPQVJEX0VVUkVTWVNfUElDT0xPXSA9IHsKKwkJLm5hbWUgICAgICAgICAgID0gIkV1cmVzeXMgUGljb2xvIiwKKwkJLnZpZGVvX2lucHV0cyAgID0gMywKKwkJLmF1ZGlvX2lucHV0cyAgID0gMCwKKwkJLnR1bmVyICAgICAgICAgID0gLTEsCisJCS5zdmhzICAgICAgICAgICA9IDIsCisJCS5ncGlvbWFzayAgICAgICA9IDAsCisJCS5ub19tc3AzNHh4ICAgICA9IDEsCisJCS5ub190ZGE5ODc1ICAgICA9IDEsCisJCS5ub190ZGE3NDMyICAgICA9IDEsCisJCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMCwgMX0sCisJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKKwkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwl9LAorCVtCVFRWX0JPQVJEX1BWMTUwXSA9IHsKKwkJLyogTHVjIFZhbiBIb2V5bGFuZHQgPGx1Y0BlLW1hZ2ljLmJlPiAqLworCQkubmFtZSAgICAgICAgICAgPSAiUHJvVmlkZW8gUFYxNTAiLCAvKiAweDRmICovCisJCS52aWRlb19pbnB1dHMgICA9IDIsCisJCS5hdWRpb19pbnB1dHMgICA9IDAsCisJCS50dW5lciAgICAgICAgICA9IC0xLAorCQkuc3ZocyAgICAgICAgICAgPSAtMSwKKwkJLmdwaW9tYXNrICAgICAgID0gMCwKKwkJLm11eHNlbCAgICAgICAgID0geyAyLCAzIH0sCisJCS5hdWRpb211eCAgICAgICA9IHsgMCB9LAorCQkubmVlZHNfdHZhdWRpbyAgPSAwLAorCQkubm9fbXNwMzR4eCAgICAgPSAxLAorCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCisJCS50dW5lcl90eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJfSwKKwlbQlRUVl9CT0FSRF9BRF9UVks1MDNdID0geworCQkvKiBIaXJvc2hpIFRha2VrYXdhIDxzaWFuQGJpZy5vci5qcD4gKi8KKwkJLyogVGhpcyBjYXJkIGxhY2tzIHN1YnN5c3RlbSBJRCAqLworCQkubmFtZSAgICAgICAgICAgPSAiQUQtVFZLNTAzIiwgLyogMHg2MyAqLworCQkudmlkZW9faW5wdXRzICAgPSA0LAorCQkuYXVkaW9faW5wdXRzICAgPSAxLAorCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkuc3ZocyAgICAgICAgICAgPSAyLAorCQkuZ3Bpb21hc2sgICAgICAgPSAweDAwMWU4MDA3LAorCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDAgfSwKKwkJLyogICAgICAgICAgICAgICAgICBUdW5lciwgUmFkaW8sIGV4dGVybmFsLCBpbnRlcm5hbCwgb2ZmLCAgb24gKi8KKwkJLmF1ZGlvbXV4ICAgICAgID0geyAweDA4LCAgMHgwZiwgIDB4MGEsICAgICAweDA4LCAgICAgMHgwZiwgMHgwOCB9LAorCQkubmVlZHNfdHZhdWRpbyAgPSAwLAorCQkubm9fbXNwMzR4eCAgICAgPSAxLAorCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCisJCS50dW5lcl90eXBlICAgICA9IDIsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLmF1ZGlvX2hvb2sJPSBhZHR2azUwM19hdWRpbywKKwl9LAogCi0vKiAtLS0tIGNhcmQgMHgzOCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0JLyogR29yZG9uIEhleWRvbiA8Z2poZXlkb25AYmlnZm9vdC5jb20gKCc5OCkgKi8KLQkubmFtZSAgICAgICAgICAgPSAiTGlmZXZpZXcgRmx5VmlkZW8gOThGTSBMUjUwIiwKLQkudmlkZW9faW5wdXRzICAgPSA0LAotCS5hdWRpb19pbnB1dHMgICA9IDMsCi0JLnR1bmVyICAgICAgICAgID0gMCwKLQkuc3ZocyAgICAgICAgICAgPSAyLAotCS5ncGlvbWFzayAgICAgICA9IDB4MTgwMCwKLQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDF9LAotCS5hdWRpb211eCAgICAgICA9IHsgMCwgMHg4MDAsIDB4MTAwMCwgMHgxMDAwLCAweDE4MDAsIDAgfSwKLQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JLnR1bmVyX3R5cGUgICAgID0gNSwKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi19LHsKLQkvKiBUaGlzIGlzIHRoZSB1bHRpbWF0ZSBjaGVhcG8gY2FwdHVyZSBjYXJkCi0JKiBqdXN0IGEgQlQ4NDhBIG9uIGEgc21hbGwgUENCIQotCSogU3RldmUgSG9zZ29vZCA8c3RldmVAZXF1aWluZXQuY29tPiAqLwotCS5uYW1lICAgICAgICAgICA9ICJHcmFuZFRlYyAnR3JhbmQgVmlkZW8gQ2FwdHVyZScgKEJ0ODQ4KSIsCi0JLnZpZGVvX2lucHV0cyAgID0gMiwKLQkuYXVkaW9faW5wdXRzICAgPSAwLAotCS50dW5lciAgICAgICAgICA9IC0xLAotCS5zdmhzICAgICAgICAgICA9IDEsCi0JLmdwaW9tYXNrICAgICAgID0gMCwKLQkubXV4c2VsICAgICAgICAgPSB7IDMsIDEgfSwKLQkuYXVkaW9tdXggICAgICAgPSB7IDAgfSwKLQkubmVlZHNfdHZhdWRpbyAgPSAwLAotCS5ub19tc3AzNHh4ICAgICA9IDEsCi0JLnBsbCAgICAgICAgICAgID0gUExMXzM1LAotCS50dW5lcl90eXBlICAgICA9IC0xLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLX0sewotCS8qIERhbmllbCBIZXJyaW5ndG9uIDxkYW5pZWwuaGVycmluZ3RvbkBob21lLmNvbT4gKi8KLQkubmFtZSAgICAgICAgICAgPSAiQXNrZXkgQ1BIMDYwLyBQaG9lYmUgVFYgTWFzdGVyIE9ubHkgKE5vIEZNKSIsCi0JLnZpZGVvX2lucHV0cyAgID0gMywKLQkuYXVkaW9faW5wdXRzICAgPSAxLAotCS50dW5lciAgICAgICAgICA9IDAsCi0JLnN2aHMgICAgICAgICAgID0gMiwKLQkuZ3Bpb21hc2sgICAgICAgPSAweGUwMCwKLQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDF9LAotCS5hdWRpb211eCAgICAgICA9IHsgMHg0MDAsIDB4NDAwLCAweDQwMCwgMHg0MDAsIDB4ODAwLCAweDQwMCB9LAotCS5uZWVkc190dmF1ZGlvICA9IDEsCi0JLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1RFTUlDXzQwMzZGWTVfTlRTQywKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi19LHsKLQkvKiBNYXR0aSBNb3R0dXMgPG1vdHR1c0BwaHlzaWMudXQuZWU+ICovCi0JLm5hbWUJCT0gIkFza2V5IENQSDAzeCBUViBDYXB0dXJlciIsCi0JLnZpZGVvX2lucHV0cwk9IDQsCi0JLmF1ZGlvX2lucHV0cwk9IDEsCi0JLnR1bmVyCQk9IDAsCi0JLnN2aHMJCT0gMiwKLQkuZ3Bpb21hc2sgICAgICAgPSAweDAzMDAwRiwKLQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMH0sCi0JLmF1ZGlvbXV4ICAgICAgID0geyAyLDAsMCwwLDEgfSwKLQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JLnR1bmVyX3R5cGUJPSAwLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLX0seworCQkvKiAtLS0tIGNhcmQgMHg2NCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJW0JUVFZfQk9BUkRfSEVSQ1VMRVNfU01fVFZdID0geworCQkubmFtZSAgICAgICAgICAgPSAiSGVyY3VsZXMgU21hcnQgVFYgU3RlcmVvIiwKKwkJLnZpZGVvX2lucHV0cyAgID0gNCwKKwkJLmF1ZGlvX2lucHV0cyAgID0gMSwKKwkJLnR1bmVyICAgICAgICAgID0gMCwKKwkJLnN2aHMgICAgICAgICAgID0gMiwKKwkJLmdwaW9tYXNrICAgICAgID0gMHgwMCwKKwkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAxIH0sCisJCS5uZWVkc190dmF1ZGlvICA9IDEsCisJCS5ub19tc3AzNHh4ICAgICA9IDEsCisJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKKwkJLnR1bmVyX3R5cGUgICAgID0gNSwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkvKiBOb3RlczoKKwkJLSBjYXJkIGxhY2tzIHN1YnN5c3RlbSBJRAorCQktIHN0ZXJlbyB2YXJpYW50IHcvIGRhdWdodGVyIGJvYXJkIHdpdGggdGRhOTg3NGEgQDB4YjAKKwkJLSBBdWRpbyBSb3V0aW5nOgorCQkJYWx3YXlzIGZyb20gdGRhOTg3NCBpbmRlcGVuZGVudCBvZiBHUElPICg/KQorCQkJZXh0ZXJuYWwgbGluZSBpbjogdW5rbm93bgorCQktIE90aGVyIGNoaXBzOiBlbTc4cDE1NmVscCBAIDB4OTYgKHByb2JhYmx5IElSIHJlbW90ZSBjb250cm9sKQorCQkJaGVmNDA1MyAoaW5zdGVhZCA0MDUyKSBmb3IgdW5rbm93biBmdW5jdGlvbgorCQkqLworCX0sCisJW0JUVFZfQk9BUkRfUEFDRVRWXSA9IHsKKwkJLm5hbWUgICAgICAgICAgID0gIlBhY2UgVFYgJiBSYWRpbyBDYXJkIiwKKwkJLnZpZGVvX2lucHV0cyAgID0gNCwKKwkJLmF1ZGlvX2lucHV0cyAgID0gMSwKKwkJLnR1bmVyICAgICAgICAgID0gMCwKKwkJLnN2aHMgICAgICAgICAgID0gMiwKKwkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAxfSwgLyogVHVuZXIsIENWaWQsIFNWaWQsIENWaWQgb3ZlciBTVmlkIGNvbm5lY3RvciAqLworCQkuZ3Bpb21hc2sgICAgICAgPSAwLAorCQkubm9fdGRhOTg3NSAgICAgPSAxLAorCQkubm9fdGRhNzQzMiAgICAgPSAxLAorCQkudHVuZXJfdHlwZSAgICAgPSAxLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5oYXNfcmFkaW8gICAgICA9IDEsCisJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKKwkJLyogQnQ4NzgsIEJ0ODMyLCBGSTEyNDYgdHVuZXI7IG5vIHBjaSBzdWJzeXN0ZW0gaWQKKwkJb25seSBpbnRlcm5hbCBsaW5lIG91dDogKDRwaW4gaGVhZGVyKSBSR0dMCisJCVJhZGlvIG11c3QgYmUgZGVjb2RlZCBieSBtc3AzNDEwZCAobm90IHJvdXRlZCB0aHJvdWdoKSovCisJCS8qCisJCS5kaWdpdGFsX21vZGUgICA9IERJR0lUQUxfTU9ERV9DQU1FUkEsICB0b2RvIQorCQkqLworCX0sCisJW0JUVFZfQk9BUkRfSVZDMjAwXSA9IHsKKwkJLyogQ2hyaXMgV2lsbGluZyA8Y2hyaXNAdmlzbGFiLnVzeWQuZWR1LmF1PiAqLworCQkubmFtZSAgICAgICAgICAgPSAiSVZDLTIwMCIsCisJCS52aWRlb19pbnB1dHMgICA9IDEsCisJCS5hdWRpb19pbnB1dHMgICA9IDAsCisJCS50dW5lciAgICAgICAgICA9IC0xLAorCQkudHVuZXJfdHlwZSAgICAgPSAtMSwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkuc3ZocyAgICAgICAgICAgPSAtMSwKKwkJLmdwaW9tYXNrICAgICAgID0gMHhkZiwKKwkJLm11eHNlbCAgICAgICAgID0geyAyIH0sCisJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKKwl9LAorCVtCVFRWX0JPQVJEX1hHVUFSRF0gPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJHcmFuZCBYLUd1YXJkIC8gVHJ1c3QgODE0UENJIiwKKwkJLnZpZGVvX2lucHV0cyAgID0gMTYsCisJCS5hdWRpb19pbnB1dHMgICA9IDAsCisJCS50dW5lciAgICAgICAgICA9IC0xLAorCQkuc3ZocyAgICAgICAgICAgPSAtMSwKKwkJLnR1bmVyX3R5cGUgICAgID0gNCwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkuZ3Bpb21hc2syICAgICAgPSAweGZmLAorCQkubXV4c2VsICAgICAgICAgPSB7IDIsMiwyLDIsIDMsMywzLDMsIDEsMSwxLDEsIDAsMCwwLDAgfSwKKwkJLm11eHNlbF9ob29rICAgID0geGd1YXJkX211eHNlbCwKKwkJLm5vX21zcDM0eHggICAgID0gMSwKKwkJLm5vX3RkYTk4NzUgICAgID0gMSwKKwkJLm5vX3RkYTc0MzIgICAgID0gMSwKKwkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAorCX0sCiAKLS8qIC0tLS0gY2FyZCAweDNjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQkvKiBQaGlsaXAgQmx1bmRlbGwgPHBoaWxiQGdudS5vcmc+ICovCi0JLm5hbWUgICAgICAgICAgID0gIk1vZHVsYXIgVGVjaG5vbG9neSBNTTEwMFBDVFYiLAotCS52aWRlb19pbnB1dHMgICA9IDIsCi0JLmF1ZGlvX2lucHV0cyAgID0gMiwKLQkudHVuZXIJCT0gMCwKLQkuc3ZocwkJPSAtMSwKLQkuZ3Bpb21hc2sgICAgICAgPSAxMSwKLQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDF9LAotCS5hdWRpb211eCAgICAgICA9IHsgMiwgMCwgMCwgMSwgOH0sCi0JLnBsbCAgICAgICAgICAgID0gUExMXzM1LAotCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1RFTUlDX1BBTCwKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi19LHsKLQkvKiBBZHJpYW4gQ294IDxhZHJpYW5AaHVtYm9sZHQuY28udWsgKi8KLQkubmFtZQkgICAgICAgID0gIkFHIEVsZWN0cm9uaWNzIEdNVjEiLAotCS52aWRlb19pbnB1dHMgICA9IDIsCi0JLmF1ZGlvX2lucHV0cyAgID0gMCwKLQkudHVuZXIJICAgICAgICA9IC0xLAotCS5zdmhzCSAgICAgICAgPSAxLAotCS5ncGlvbWFzayAgICAgICA9IDB4RiwKLQkubXV4c2VsCSAgICAgICAgPSB7IDIsIDJ9LAotCS5hdWRpb211eCAgICAgICA9IHsgfSwKLQkubm9fbXNwMzR4eCAgICAgPSAxLAotCS5uZWVkc190dmF1ZGlvICA9IDAsCi0JLnBsbAkgICAgICAgID0gUExMXzI4LAotCS50dW5lcl90eXBlICAgICA9IC0xLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLX0sewotCS8qIE1pZ3VlbCBBbmdlbCBBbHZhcmV6IDxtYWFjcnV6QG5hdmVnYWxpYS5jb20+Ci0JbmV3IEVhc3kgVFYgQlQ4NzggdmVyc2lvbiAobW9kZWwgQ1BIMDYxKQotCXNwZWNpYWwgdGhhbmtzIHRvIEluZm9ybWF0aWNhIE1pZXJlcyBmb3IgcHJvdmlkaW5nIHRoZSBjYXJkICovCi0JLm5hbWUgICAgICAgICAgID0gIkFza2V5IENQSDA2MS8gQkVTVEJVWSBFYXN5IFRWIChidDg3OCkiLAotCS52aWRlb19pbnB1dHMJPSAzLAotCS5hdWRpb19pbnB1dHMgICA9IDIsCi0JLnR1bmVyICAgICAgICAgID0gMCwKLQkuc3ZocyAgICAgICAgICAgPSAyLAotCS5ncGlvbWFzayAgICAgICA9IDB4RkYsCi0JLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAwfSwKLQkuYXVkaW9tdXggICAgICAgPSB7IDEsIDAsIDQsIDQsIDl9LAotCS5uZWVkc190dmF1ZGlvICA9IDAsCi0JLnBsbAkJPSBQTExfMjgsCi0JLnR1bmVyX3R5cGUJPSBUVU5FUl9QSElMSVBTX1BBTCwKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi19LHsKLQkvKiBMdWthcyBHZWJhdWVyIDxnZWJ5QHZvbG55LmN6PiAqLwotCS5uYW1lCQk9ICJBVEkgVFYtV29uZGVyIiwKLQkudmlkZW9faW5wdXRzCT0gMywKLQkuYXVkaW9faW5wdXRzCT0gMSwKLQkudHVuZXIJCT0gMCwKLQkuc3ZocwkJPSAyLAotCS5ncGlvbWFzawk9IDB4ZjAzZiwKLQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMCB9LAotCS5hdWRpb211eAk9IHsgMHhiZmZlLCAwLCAweGJmZmYsIDAsIDB4YmZmZX0sCi0JLnBsbAkJPSBQTExfMjgsCi0JLnR1bmVyX3R5cGUJPSBUVU5FUl9URU1JQ180MDA2Rk41X01VTFRJX1BBTCwKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi19LHsKKwkJLyogLS0tLSBjYXJkIDB4NjggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCVtCVFRWX0JPQVJEX05FQlVMQV9ESUdJVFZdID0geworCQkubmFtZSAgICAgICAgICAgPSAiTmVidWxhIEVsZWN0cm9uaWNzIERpZ2lUViIsCisJCS52aWRlb19pbnB1dHMgICA9IDEsCisJCS50dW5lciAgICAgICAgICA9IC0xLAorCQkuc3ZocyAgICAgICAgICAgPSAtMSwKKwkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAwfSwKKwkJLm5vX21zcDM0eHggICAgID0gMSwKKwkJLm5vX3RkYTk4NzUgICAgID0gMSwKKwkJLm5vX3RkYTc0MzIgICAgID0gMSwKKwkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAorCQkudHVuZXJfdHlwZSAgICAgPSAtMSwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkuaGFzX2R2YiAgICAgICAgPSAxLAorCQkubm9fZ3Bpb2lycSAgICAgPSAxLAorCX0sCisJW0JUVFZfQk9BUkRfUFYxNDNdID0geworCQkvKiBKb3JnZSBCb25jb21wdGUgLSBEVEkyIDxqb3JnZUBkdGkyLm5ldD4gKi8KKwkJLm5hbWUgICAgICAgICAgID0gIlByb1ZpZGVvIFBWMTQzIiwKKwkJLnZpZGVvX2lucHV0cyAgID0gNCwKKwkJLmF1ZGlvX2lucHV0cyAgID0gMCwKKwkJLnR1bmVyICAgICAgICAgID0gLTEsCisJCS5zdmhzICAgICAgICAgICA9IC0xLAorCQkuZ3Bpb21hc2sgICAgICAgPSAwLAorCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDAgfSwKKwkJLmF1ZGlvbXV4ICAgICAgID0geyAwIH0sCisJCS5uZWVkc190dmF1ZGlvICA9IDAsCisJCS5ub19tc3AzNHh4ICAgICA9IDEsCisJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKKwkJLnR1bmVyX3R5cGUgICAgID0gLTEsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwl9LAorCVtCVFRWX0JPQVJEX1ZEMDA5WDFfTUlOSURJTl0gPSB7CisJCS8qIE0uS2xhaHJAcGh5dGVjLmRlICovCisJCS5uYW1lICAgICAgICAgICA9ICJQSFlURUMgVkQtMDA5LVgxIE1pbmlESU4gKGJ0ODc4KSIsCisJCS52aWRlb19pbnB1dHMgICA9IDQsCisJCS5hdWRpb19pbnB1dHMgICA9IDAsCisJCS50dW5lciAgICAgICAgICA9IC0xLCAvKiBjYXJkIGhhcyBubyB0dW5lciAqLworCQkuc3ZocyAgICAgICAgICAgPSAzLAorCQkuZ3Bpb21hc2sgICAgICAgPSAweDAwLAorCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDB9LAorCQkuYXVkaW9tdXggICAgICAgPSB7IDAsIDAsIDAsIDAsIDAsIDAgfSwgLyogY2FyZCBoYXMgbm8gYXVkaW8gKi8KKwkJLm5lZWRzX3R2YXVkaW8gID0gMSwKKwkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAorCQkudHVuZXJfdHlwZSAgICAgPSAtMSwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCX0sCisJW0JUVFZfQk9BUkRfVkQwMDlYMV9DT01CSV0gPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJQSFlURUMgVkQtMDA5LVgxIENvbWJpIChidDg3OCkiLAorCQkudmlkZW9faW5wdXRzICAgPSA0LAorCQkuYXVkaW9faW5wdXRzICAgPSAwLAorCQkudHVuZXIgICAgICAgICAgPSAtMSwgLyogY2FyZCBoYXMgbm8gdHVuZXIgKi8KKwkJLnN2aHMgICAgICAgICAgID0gMywKKwkJLmdwaW9tYXNrICAgICAgID0gMHgwMCwKKwkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAxfSwKKwkJLmF1ZGlvbXV4ICAgICAgID0geyAwLCAwLCAwLCAwLCAwLCAwIH0sIC8qIGNhcmQgaGFzIG5vIGF1ZGlvICovCisJCS5uZWVkc190dmF1ZGlvICA9IDEsCisJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKKwkJLnR1bmVyX3R5cGUgICAgID0gLTEsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwl9LAogCi0vKiAtLS0tIGNhcmQgMHg0MCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0JLyogTHVrYXMgR2ViYXVlciA8Z2VieUB2b2xueS5jej4gKi8KLQkubmFtZQkJPSAiQVRJIFRWLVdvbmRlciBWRSIsCi0JLnZpZGVvX2lucHV0cwk9IDIsCi0JLmF1ZGlvX2lucHV0cwk9IDEsCi0JLnR1bmVyCQk9IDAsCi0JLnN2aHMJCT0gLTEsCi0JLmdwaW9tYXNrCT0gMSwKLQkubXV4c2VsCQk9IHsgMiwgMywgMCwgMX0sCi0JLmF1ZGlvbXV4CT0geyAwLCAwLCAxLCAwLCAwfSwKLQkubm9fbXNwMzR4eAk9IDEsCi0JLnBsbAkJPSBQTExfMjgsCi0JLnR1bmVyX3R5cGUJPSBUVU5FUl9URU1JQ180MDA2Rk41X01VTFRJX1BBTCwKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi19LHsKLQkvKiBEZWVKYXkgPGRlZWpheUB3ZXN0ZWw5MDAubmV0ICgyMDAwUykgKi8KLQkubmFtZSAgICAgICAgICAgPSAiTGlmZXZpZXcgRmx5VmlkZW8gMjAwMFMgTFI5MCIsCi0JLnZpZGVvX2lucHV0cyAgID0gMywKLQkuYXVkaW9faW5wdXRzICAgPSAzLAotCS50dW5lciAgICAgICAgICA9IDAsCi0JLnN2aHMgICAgICAgICAgID0gMiwKLQkuZ3Bpb21hc2sJPSAweDE4ZTAsCi0JLm11eHNlbAkJPSB7IDIsIDMsIDAsIDF9LAotCQkJLyogUmFkaW8gY2hhbmdlZCBmcm9tIDFlODAgdG8gMHg4MDAgdG8gbWFrZQotCQkJRmx5VmlkZW8yMDAwUyBpbiAuaHUgaGFwcHkgKGdtKSovCi0JCQkvKiAtZGstPz8/OiBzZXQgbXV0ZT0weDE4MDAgZm9yIHRkYTk4NzRoIGRhdWdodGVyYm9hcmQgKi8KLQkuYXVkaW9tdXgJPSB7IDB4MDAwMCwweDA4MDAsMHgxMDAwLDB4MTAwMCwweDE4MDAsIDB4MTA4MCB9LAotCS5hdWRpb19ob29rCT0gZnYyMDAwc19hdWRpbywKLQkubm9fbXNwMzR4eAk9IDEsCi0JLm5vX3RkYTk4NzUJPSAxLAotCS5uZWVkc190dmF1ZGlvICA9IDEsCi0JLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCS50dW5lcl90eXBlICAgICA9IDUsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotfSx7Ci0JLm5hbWUJCT0gIlRlcnJhdGVjIFRWYWx1ZVJhZGlvIiwKLQkudmlkZW9faW5wdXRzCT0gMywKLQkuYXVkaW9faW5wdXRzCT0gMSwKLQkudHVuZXIJCT0gMCwKLQkuc3ZocwkJPSAyLAotCS5ncGlvbWFzawk9IDB4ZmZmZjAwLAotCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxfSwKLQkuYXVkaW9tdXgJPSB7IDB4NTAwLCAweDUwMCwgMHgzMDAsIDB4OTAwLCAweDkwMH0sCi0JLm5lZWRzX3R2YXVkaW8JPSAxLAotCS5wbGwJCT0gUExMXzI4LAotCS50dW5lcl90eXBlCT0gVFVORVJfUEhJTElQU19QQUwsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCS5oYXNfcmFkaW8JPSAxLAotfSx7Ci0JLyogVEFOQUtBIEtlaSA8cGVnMDA2MjVAbmlmdHkuY29tPiAqLwotCS5uYW1lICAgICAgICAgICA9ICJJT0RBVEEgR1YtQkNUVjQvUENJIiwKLQkudmlkZW9faW5wdXRzICAgPSAzLAotCS5hdWRpb19pbnB1dHMgICA9IDEsCi0JLnR1bmVyICAgICAgICAgID0gMCwKLQkuc3ZocyAgICAgICAgICAgPSAyLAotCS5ncGlvbWFzayAgICAgICA9IDB4MDEwZjAwLAotCS5tdXhzZWwgICAgICAgICA9IHsyLCAzLCAwLCAwfSwKLQkuYXVkaW9tdXggICAgICAgPSB7MHgxMDAwMCwgMCwgMHgxMDAwMCwgMCwgMCwgMH0sCi0JLm5vX21zcDM0eHggICAgID0gMSwKLQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JLnR1bmVyX3R5cGUgICAgID0gVFVORVJfU0hBUlBfMlU1SkY1NTQwX05UU0MsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCS5hdWRpb19ob29rICAgICA9IGd2YmN0djNwY2lfYXVkaW8sCi19LHsKKwkJLyogLS0tLSBjYXJkIDB4NmMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCVtCVFRWX0JPQVJEX1ZEMDA5X01JTklESU5dID0geworCQkubmFtZSAgICAgICAgICAgPSAiUEhZVEVDIFZELTAwOSBNaW5pRElOIChidDg3OCkiLAorCQkudmlkZW9faW5wdXRzICAgPSAxMCwKKwkJLmF1ZGlvX2lucHV0cyAgID0gMCwKKwkJLnR1bmVyICAgICAgICAgID0gLTEsIC8qIGNhcmQgaGFzIG5vIHR1bmVyICovCisJCS5zdmhzICAgICAgICAgICA9IDksCisJCS5ncGlvbWFzayAgICAgICA9IDB4MDAsCisJCS5ncGlvbWFzazIgICAgICA9IDB4MDMsIC8qIGdwaW9tYXNrMiBkZWZpbmVzIHRoZSBiaXRzIHVzZWQgdG8gc3dpdGNoIGF1ZGlvCisJCQkJCXZpYSB0aGUgdXBwZXIgbmliYmxlIG9mIG11eHNlbC4gaGVyZTogdXNlZCBmb3IKKwkJCQkJeHRlcm5hbCB2aWRlby1tdXggKi8KKwkJLm11eHNlbCAgICAgICAgID0geyAweDAyLCAweDEyLCAweDIyLCAweDMyLCAweDAzLCAweDEzLCAweDIzLCAweDMzLCAweDAxLCAweDAwIH0sCisJCS5hdWRpb211eCAgICAgICA9IHsgMCwgMCwgMCwgMCwgMCwgMCB9LCAvKiBjYXJkIGhhcyBubyBhdWRpbyAqLworCQkubmVlZHNfdHZhdWRpbyAgPSAxLAorCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCisJCS50dW5lcl90eXBlICAgICA9IC0xLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJfSwKKwlbQlRUVl9CT0FSRF9WRDAwOV9DT01CSV0gPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJQSFlURUMgVkQtMDA5IENvbWJpIChidDg3OCkiLAorCQkudmlkZW9faW5wdXRzICAgPSAxMCwKKwkJLmF1ZGlvX2lucHV0cyAgID0gMCwKKwkJLnR1bmVyICAgICAgICAgID0gLTEsIC8qIGNhcmQgaGFzIG5vIHR1bmVyICovCisJCS5zdmhzICAgICAgICAgICA9IDksCisJCS5ncGlvbWFzayAgICAgICA9IDB4MDAsCisJCS5ncGlvbWFzazIgICAgICA9IDB4MDMsIC8qIGdwaW9tYXNrMiBkZWZpbmVzIHRoZSBiaXRzIHVzZWQgdG8gc3dpdGNoIGF1ZGlvCisJCQkJCXZpYSB0aGUgdXBwZXIgbmliYmxlIG9mIG11eHNlbC4gaGVyZTogdXNlZCBmb3IKKwkJCQkJeHRlcm5hbCB2aWRlby1tdXggKi8KKwkJLm11eHNlbCAgICAgICAgID0geyAweDAyLCAweDEyLCAweDIyLCAweDMyLCAweDAzLCAweDEzLCAweDIzLCAweDMzLCAweDAxLCAweDAxIH0sCisJCS5hdWRpb211eCAgICAgICA9IHsgMCwgMCwgMCwgMCwgMCwgMCB9LCAvKiBjYXJkIGhhcyBubyBhdWRpbyAqLworCQkubmVlZHNfdHZhdWRpbyAgPSAxLAorCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCisJCS50dW5lcl90eXBlICAgICA9IC0xLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJfSwKKwlbQlRUVl9CT0FSRF9JVkMxMDBdID0geworCQkubmFtZSAgICAgICAgICAgPSAiSVZDLTEwMCIsCisJCS52aWRlb19pbnB1dHMgICA9IDQsCisJCS5hdWRpb19pbnB1dHMgICA9IDAsCisJCS50dW5lciAgICAgICAgICA9IC0xLAorCQkudHVuZXJfdHlwZSAgICAgPSAtMSwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkuc3ZocyAgICAgICAgICAgPSAtMSwKKwkJLmdwaW9tYXNrICAgICAgID0gMHhkZiwKKwkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAwIH0sCisJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKKwl9LAorCVtCVFRWX0JPQVJEX0lWQzEyMF0gPSB7CisJCS8qIElWQy0xMjBHIC0gQWxhbiBHYXJmaWVsZCA8YWxhbkBmcm9tb3JiaXQuY29tPiAqLworCQkubmFtZSAgICAgICAgICAgPSAiSVZDLTEyMEciLAorCQkudmlkZW9faW5wdXRzICAgPSAxNiwKKwkJLmF1ZGlvX2lucHV0cyAgID0gMCwgICAgLyogY2FyZCBoYXMgbm8gYXVkaW8gKi8KKwkJLnR1bmVyICAgICAgICAgID0gLTEsICAgLyogY2FyZCBoYXMgbm8gdHVuZXIgKi8KKwkJLnR1bmVyX3R5cGUgICAgID0gLTEsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLnN2aHMgICAgICAgICAgID0gLTEsICAgLyogY2FyZCBoYXMgbm8gc3ZocyAqLworCQkubmVlZHNfdHZhdWRpbyAgPSAwLAorCQkubm9fbXNwMzR4eCAgICAgPSAxLAorCQkubm9fdGRhOTg3NSAgICAgPSAxLAorCQkubm9fdGRhNzQzMiAgICAgPSAxLAorCQkuZ3Bpb21hc2sgICAgICAgPSAweDAwLAorCQkubXV4c2VsICAgICAgICAgPSB7IDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsIDB4MDgsCisJCQkJMHgwOSwgMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHgwZSwgMHgwZiwgMHgxMCB9LAorCQkubXV4c2VsX2hvb2sgICAgPSBpdmMxMjBfbXV4c2VsLAorCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCisJfSwKIAotLyogLS0tLSBjYXJkIDB4NDQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCS5uYW1lICAgICAgICAgICA9ICIzRGZ4IFZvb2Rvb1RWIEZNIChFdXJvKSwgVm9vZG9vVFYgMjAwIChVU0EpIiwKLQkvKiB0cnkgImluc21vZCBtc3AzNDAwIHNpbXBsZT0wIiBpZiB5b3UgaGF2ZQotCSogc291bmQgcHJvYmxlbXMgd2l0aCB0aGlzIGNhcmQuICovCi0JLnZpZGVvX2lucHV0cyAgID0gNCwKLQkuYXVkaW9faW5wdXRzICAgPSAxLAotCS50dW5lciAgICAgICAgICA9IDAsCi0JLnN2aHMgICAgICAgICAgID0gLTEsCi0JLmdwaW9tYXNrICAgICAgID0gMHg0ZjhhMDAsCi0JLyogMHgxMDAwMDA6IDE9TVNQIGVuYWJsZWQgKDA9ZGlzYWJsZSBhZ2FpbikKLQkqIDB4MDEwMDAwOiBDb25uZWN0ZWQgdG8gIlMwIiBvbiB0ZGE5ODgwICgwPVBhbC9CRywgMT1OVFNDKSAqLwotCS5hdWRpb211eCAgICAgICA9IHsweDk0N2ZmZiwgMHg5ODdmZmYsMHg5NDdmZmYsMHg5NDdmZmYsIDB4OTQ3ZmZmfSwKLQkvKiB0dnR1bmVyLCByYWRpbywgICBleHRlcm5hbCxpbnRlcm5hbCwgbXV0ZSwgIHN0ZXJlbwotCSogdHVuZXIsIENvbXBvc2l0LCBTVmlkLCBDb21wb3NpdC1vbi1TdmlkLWFkYXB0ZXIgKi8KLQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMgLDAgLDF9LAotCS50dW5lcl90eXBlICAgICA9IFRVTkVSX01UMjAzMiwKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JLnBsbAkJPSBQTExfMjgsCi0JLmhhc19yYWRpbwk9IDEsCi19LHsKLQkvKiBQaGlsaXAgQmx1bmRlbGwgPHBiQG5leHVzLmNvLnVrPiAqLwotCS5uYW1lICAgICAgICAgICA9ICJBY3RpdmUgSW1hZ2luZyBBSU1NUyIsCi0JLnZpZGVvX2lucHV0cyAgID0gMSwKLQkuYXVkaW9faW5wdXRzICAgPSAwLAotCS50dW5lciAgICAgICAgICA9IC0xLAotCS50dW5lcl90eXBlICAgICA9IC0xLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JLm11eHNlbCAgICAgICAgID0geyAyIH0sCi0JLmdwaW9tYXNrICAgICAgID0gMAotfSx7Ci0JLyogVG9tYXN6IFB5cmEgPGhlbGxmaXJlQHNlZGV6LmlxLnBsPiAqLwotCS5uYW1lICAgICAgICAgICA9ICJQcm9saW5rIFBpeGVsdmlldyBQVi1CVDg3OFArIChSZXYuNEMsOEUpIiwKLQkudmlkZW9faW5wdXRzICAgPSAzLAotCS5hdWRpb19pbnB1dHMgICA9IDQsCi0JLnR1bmVyICAgICAgICAgID0gMCwKLQkuc3ZocyAgICAgICAgICAgPSAyLAotCS5ncGlvbWFzayAgICAgICA9IDE1LAotCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMX0sCi0JLmF1ZGlvbXV4ICAgICAgID0geyAwLCAwLCAxMSwgNywgMTMsIDB9LCAvKiBUViBhbmQgUmFkaW8gd2l0aCBzYW1lIEdQSU8gISAqLwotCS5uZWVkc190dmF1ZGlvICA9IDEsCi0JLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCS50dW5lcl90eXBlICAgICA9IDI1LAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkuaGFzX3JlbW90ZSAgICAgPSAxLAotCS8qIEdQSU8gd2lyaW5nOgotCQlHUElPMDogVTQuQTAgKGhlZjQwNTJidCkKLQkJR1BJTzE6IFU0LkExCi0JCUdQSU8yOiBVNC5BMSAoc2Vjb25kIGhlZjQwNTJidCkKLQkJR1BJTzM6IFU0Lm5FTiwgVTUuQTAsIEE1Lm5FTgotCQlHUElPOC0xNTogdnJkODY2YiA/Ci0JKi8KLX0sewotCS5uYW1lCQk9ICJMaWZldmlldyBGbHlWaWRlbyA5OEVaIChjYXB0dXJlIG9ubHkpIExSNTEiLAotCS52aWRlb19pbnB1dHMJPSA0LAotCS5hdWRpb19pbnB1dHMgICA9IDAsCi0JLnR1bmVyCQk9IC0xLAotCS5zdmhzCQk9IDIsCi0JLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LCAvKiBBVjEsIEFWMiwgU1ZIUywgQ1ZpZCBhZGFwdGVyIG9uIFNWSFMgKi8KLQkucGxsCQk9IFBMTF8yOCwKLQkubm9fbXNwMzR4eAk9IDEsCi0JLnR1bmVyX3R5cGUJPSBVTlNFVCwKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi19LHsKKwkJLyogLS0tLSBjYXJkIDB4NzAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCVtCVFRWX0JPQVJEX1BDX0hEVFZdID0geworCQkubmFtZSAgICAgICAgICAgPSAicGNIRFRWIEhELTIwMDAgVFYiLAorCQkudmlkZW9faW5wdXRzICAgPSA0LAorCQkuYXVkaW9faW5wdXRzICAgPSAxLAorCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkuc3ZocyAgICAgICAgICAgPSAyLAorCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDB9LAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX0FUU0MsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLmhhc19kdmIgICAgICAgID0gMSwKKwl9LAorCVtCVFRWX0JPQVJEX1RXSU5IQU5fRFNUXSA9IHsKKwkJLm5hbWUgICAgICAgICAgID0gIlR3aW5oYW4gRFNUICsgY2xvbmVzIiwKKwkJLm5vX21zcDM0eHggICAgID0gMSwKKwkJLm5vX3RkYTk4NzUgICAgID0gMSwKKwkJLm5vX3RkYTc0MzIgICAgID0gMSwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5ub192aWRlbyAgICAgICA9IDEsCisJCS5oYXNfZHZiICAgICAgICA9IDEsCisJfSwKKwlbQlRUVl9CT0FSRF9XSU5GQVNUVkMxMDBdID0geworCQkubmFtZSAgICAgICAgICAgPSAiV2luZmFzdCBWQzEwMCIsCisJCS52aWRlb19pbnB1dHMgICA9IDMsCisJCS5hdWRpb19pbnB1dHMgICA9IDAsCisJCS5zdmhzICAgICAgICAgICA9IDEsCisJCS50dW5lciAgICAgICAgICA9IC0xLAorCQkubXV4c2VsICAgICAgICAgPSB7IDMsIDEsIDEsIDN9LCAvKiBWaWQgSW4sIFNWaWQgSW4sIFZpZCBvdmVyIFNWaWQgaW4gY29ubmVjdG9yICovCisJCS5ub19tc3AzNHh4ICAgICA9IDEsCisJCS5ub190ZGE5ODc1ICAgICA9IDEsCisJCS5ub190ZGE3NDMyICAgICA9IDEsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCisJfSwKKwlbQlRUVl9CT0FSRF9URVY1NjBdID0geworCQkubmFtZSAgICAgICAgICAgPSAiVGVwcHJvIFRFVi01NjAvSW50ZXJWaXNpb24gSVYtNTYwIiwKKwkJLnZpZGVvX2lucHV0cyAgID0gMywKKwkJLmF1ZGlvX2lucHV0cyAgID0gMSwKKwkJLnR1bmVyICAgICAgICAgID0gMCwKKwkJLnN2aHMgICAgICAgICAgID0gMiwKKwkJLmdwaW9tYXNrICAgICAgID0gMywKKwkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAxfSwKKwkJLmF1ZGlvbXV4ICAgICAgID0geyAxLCAxLCAxLCAxLCAwfSwKKwkJLm5lZWRzX3R2YXVkaW8gID0gMSwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19QQUwsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLnBsbCAgICAgICAgICAgID0gUExMXzM1LAorCX0sCiAKLS8qIC0tLS0gY2FyZCAweDQ4IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQkvKiBEYXJpdXN6IEtvd2FsZXdza2kgPGRhcmVra0BhdXRvbWV4LnBsPiAqLwotCS5uYW1lCQk9ICJQcm9saW5rIFBpeGVsdmlldyBQVi1CVDg3OFArOUIgKFBsYXlUViBQcm8gcmV2LjlCIEZNK05JQ0FNKSIsCi0JLnZpZGVvX2lucHV0cwk9IDQsCi0JLmF1ZGlvX2lucHV0cwk9IDEsCi0JLnR1bmVyCQk9IDAsCi0JLnN2aHMJCT0gMiwKLQkuZ3Bpb21hc2sJPSAweDNmLAotCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCi0JLmF1ZGlvbXV4CT0geyAweDAxLCAweDAwLCAweDAzLCAweDAzLCAweDA5LCAweDAyIH0sCi0JLm5lZWRzX3R2YXVkaW8gID0gMSwKLQkubm9fbXNwMzR4eAk9IDEsCi0JLm5vX3RkYTk4NzUJPSAxLAotCS5wbGwJCT0gUExMXzI4LAotCS50dW5lcl90eXBlCT0gNSwKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JLmF1ZGlvX2hvb2sJPSBwdmJ0ODc4cDliX2F1ZGlvLCAvKiBOb3RlOiBub3QgYWxsIGNhcmRzIGhhdmUgc3RlcmVvICovCi0JLmhhc19yYWRpbwk9IDEsICAvKiBOb3RlOiBub3QgYWxsIGNhcmRzIGhhdmUgcmFkaW8gKi8KLQkuaGFzX3JlbW90ZSAgICAgPSAxLAotCS8qIEdQSU8gd2lyaW5nOgotCQlHUElPMDogQTAgaGVmNDA1MgotCQlHUElPMTogQTEgaGVmNDA1MgotCQlHUElPMzogbkVOIGhlZjQwNTIKLQkJR1BJTzgtMTU6IHZyZDg2NmIKLQkJR1BJTzIwLDIyLDIzOiBSMzAsUjI5LFIyOAotCSovCi19LHsKLQkvKiBDbGF5IEt1bnogPGNrdW56QG1haWwuYXJjLm5hc2EuZ292PiAqLwotCS8qIHlvdSBtdXN0IGp1bXBlciBKUDUgZm9yIHRoZSBjYXJkIHRvIHdvcmsgKi8KLQkubmFtZSAgICAgICAgICAgPSAiU2Vuc29yYXkgMzExIiwKLQkudmlkZW9faW5wdXRzICAgPSA1LAotCS5hdWRpb19pbnB1dHMgICA9IDAsCi0JLnR1bmVyICAgICAgICAgID0gLTEsCi0JLnN2aHMgICAgICAgICAgID0gNCwKLQkuZ3Bpb21hc2sgICAgICAgPSAwLAotCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMCwgMH0sCi0JLmF1ZGlvbXV4ICAgICAgID0geyAwIH0sCi0JLm5lZWRzX3R2YXVkaW8gID0gMCwKLQkudHVuZXJfdHlwZSAgICAgPSAtMSwKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi19LHsKLQkvKiBNaWd1ZWwgRnJlaXRhcyA8bWlndWVsQGNldHVjLnB1Yy1yaW8uYnI+ICovCi0JLm5hbWUgICAgICAgICAgID0gIlJlbW90ZVZpc2lvbiBNWCAoUlY2MDUpIiwKLQkudmlkZW9faW5wdXRzICAgPSAxNiwKLQkuYXVkaW9faW5wdXRzICAgPSAwLAotCS50dW5lciAgICAgICAgICA9IC0xLAotCS5zdmhzICAgICAgICAgICA9IC0xLAotCS5ncGlvbWFzayAgICAgICA9IDB4MDAsCi0JLmdwaW9tYXNrMiAgICAgID0gMHgwN2ZmLAotCS5tdXhzZWwgICAgICAgICA9IHsgMHgzMywgMHgxMywgMHgyMywgMHg0MywgMHhmMywgMHg3MywgMHhlMywgMHgwMywKLQkJCTB4ZDMsIDB4YjMsIDB4YzMsIDB4NjMsIDB4OTMsIDB4NTMsIDB4ODMsIDB4YTMgfSwKLQkubm9fbXNwMzR4eCAgICAgPSAxLAotCS5ub190ZGE5ODc1ICAgICA9IDEsCi0JLnR1bmVyX3R5cGUgICAgID0gLTEsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCS5tdXhzZWxfaG9vayAgICA9IHJ2NjA1X211eHNlbCwKLX0sewotCS5uYW1lICAgICAgICAgICA9ICJQb3dlcmNvbG9yIE1UVjg3OC8gTVRWODc4Ui8gTVRWODc4RiIsCi0JLnZpZGVvX2lucHV0cyAgID0gMywKLQkuYXVkaW9faW5wdXRzICAgPSAyLAotCS50dW5lcgkJPSAwLAotCS5zdmhzICAgICAgICAgICA9IDIsCi0JLmdwaW9tYXNrICAgICAgID0gMHgxQzgwMEYsICAvKiBCaXQwLTI6IEF1ZGlvIHNlbGVjdCwgOC0xMjpyZW1vdGUgY29udHJvbCAxNDpyZW1vdGUgdmFsaWQgMTU6cmVtb3RlIHJlc2V0ICovCi0JLm11eHNlbCAgICAgICAgID0geyAyLCAxLCAxLCB9LAotCS5hdWRpb211eCAgICAgICA9IHsgMCwgMSwgMiwgMiwgNCB9LAotCS5uZWVkc190dmF1ZGlvICA9IDAsCi0JLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19QQUwsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCS5wbGwJCT0gUExMXzI4LAotCS5oYXNfcmFkaW8JPSAxLAotfSx7CisJCS8qIC0tLS0gY2FyZCAweDc0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwlbQlRUVl9CT0FSRF9TSU1VU19HVkMxMTAwXSA9IHsKKwkJLm5hbWUgICAgICAgICAgID0gIlNJTVVTIEdWQzExMDAiLAorCQkudmlkZW9faW5wdXRzICAgPSA0LAorCQkuYXVkaW9faW5wdXRzICAgPSAwLAorCQkudHVuZXIgICAgICAgICAgPSAtMSwKKwkJLnN2aHMgICAgICAgICAgID0gLTEsCisJCS50dW5lcl90eXBlICAgICA9IC0xLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKKwkJLm11eHNlbCAgICAgICAgID0geyAyLCAyLCAyLCAyfSwKKwkJLmdwaW9tYXNrICAgICAgID0gMHgzRiwKKwkJLm11eHNlbF9ob29rICAgID0gZ3ZjMTEwMF9tdXhzZWwsCisJfSwKKwlbQlRUVl9CT0FSRF9OR1NUVl9QTFVTXSA9IHsKKwkJLyogQ2FybG9zIFNpbHZhIHIzcGVrQHIzcGVrLmhvbWVsaW51eC5vcmcgfHwgY2FyZCAweDc1ICovCisJCS5uYW1lICAgICAgICAgICA9ICJOR1MgTkdTVFYrIiwKKwkJLnZpZGVvX2lucHV0cyAgID0gMywKKwkJLnR1bmVyICAgICAgICAgID0gMCwKKwkJLnN2aHMgICAgICAgICAgID0gMiwKKwkJLmdwaW9tYXNrICAgICAgID0gMHgwMDgwMDcsCisJCS5tdXhzZWwgICAgICAgICA9IHsyLCAzLCAwLCAwfSwKKwkJLmF1ZGlvbXV4ICAgICAgID0gezAsIDAsIDAsIDAsIDB4MDAwMDAzLCAwfSwKKwkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1BBTCwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkuaGFzX3JlbW90ZSAgICAgPSAxLAorCX0sCisJW0JUVFZfQk9BUkRfTE1MQlQ0XSA9IHsKKwkJLyogaHR0cDovL2xpbnV4bWVkaWFsYWJzLmNvbSAqLworCQkubmFtZSAgICAgICAgICAgPSAiTE1MQlQ0IiwKKwkJLnZpZGVvX2lucHV0cyAgID0gNCwgLyogSU4xLElOMixJTjMsSU40ICovCisJCS5hdWRpb19pbnB1dHMgICA9IDAsCisJCS50dW5lciAgICAgICAgICA9IC0xLAorCQkuc3ZocyAgICAgICAgICAgPSAtMSwKKwkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAwIH0sCisJCS5ub19tc3AzNHh4ICAgICA9IDEsCisJCS5ub190ZGE5ODc1ICAgICA9IDEsCisJCS5ub190ZGE3NDMyICAgICA9IDEsCisJCS5uZWVkc190dmF1ZGlvICA9IDAsCisJCS50dW5lcl90eXBlICAgICA9IC0xLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJfSwKKwlbQlRUVl9CT0FSRF9URUtSQU1fTTIwNV0gPSB7CisJCS8qIEhlbG1yb29zIEhhcnJpIDxoYXJyaS5oZWxtcm9vc0BwcC5pbmV0LmZpPiAqLworCQkubmFtZSAgICAgICAgICAgPSAiVGVrcmFtIE0yMDUgUFJPIiwKKwkJLnZpZGVvX2lucHV0cyAgID0gMywKKwkJLmF1ZGlvX2lucHV0cyAgID0gMSwKKwkJLnR1bmVyICAgICAgICAgID0gMCwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19QQUwsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLnN2aHMgICAgICAgICAgID0gMiwKKwkJLm5lZWRzX3R2YXVkaW8gID0gMCwKKwkJLmdwaW9tYXNrICAgICAgID0gMHg2OCwKKwkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxfSwKKwkJLmF1ZGlvbXV4ICAgICAgID0geyAweDY4LCAweDY4LCAweDYxLCAweDYxLCAweDAwIH0sCisJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKKwl9LAogCi0vKiAtLS0tIGNhcmQgMHg0YyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0JLyogTWFzYWtpIFN1enVraSA8bWFzYWtpQGJ0cmVlLm9yZz4gKi8KLQkubmFtZSAgICAgICAgICAgPSAiQ2Fub3B1cyBXaW5EVlIgUENJIChDT01QQVEgUHJlc2FyaW8gMzUyNEpQLCA1MTEySlApIiwKLQkudmlkZW9faW5wdXRzICAgPSAzLAotCS5hdWRpb19pbnB1dHMgICA9IDEsCi0JLnR1bmVyICAgICAgICAgID0gMCwKLQkuc3ZocyAgICAgICAgICAgPSAyLAotCS5ncGlvbWFzayAgICAgICA9IDB4MTQwMDA3LAotCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMSB9LAotCS5hdWRpb211eCAgICAgICA9IHsgMCwgMSwgMiwgMywgNCwgMCB9LAotCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfTlRTQywKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JLmF1ZGlvX2hvb2sgICAgID0gd2luZHZyX2F1ZGlvLAotfSx7Ci0JLm5hbWUgICAgICAgICAgID0gIkdyYW5kVGVjIE11bHRpIENhcHR1cmUgQ2FyZCAoQnQ4NzgpIiwKLQkudmlkZW9faW5wdXRzICAgPSA0LAotCS5hdWRpb19pbnB1dHMgICA9IDAsCi0JLnR1bmVyICAgICAgICAgID0gLTEsCi0JLnN2aHMgICAgICAgICAgID0gLTEsCi0JLmdwaW9tYXNrICAgICAgID0gMCwKLQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDAgfSwKLQkuYXVkaW9tdXggICAgICAgPSB7IDAgfSwKLQkubmVlZHNfdHZhdWRpbyAgPSAwLAotCS5ub19tc3AzNHh4ICAgICA9IDEsCi0JLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCS50dW5lcl90eXBlICAgICA9IC0xLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLX0sewotCS5uYW1lICAgICAgICAgICA9ICJKZXR3YXkgVFYvQ2FwdHVyZSBKVy1UVjg3OC1GQkssIEt3b3JsZCBLVy1UVjg3OFJGIiwKLQkudmlkZW9faW5wdXRzICAgPSA0LAotCS5hdWRpb19pbnB1dHMgICA9IDMsCi0JLnR1bmVyICAgICAgICAgID0gMCwKLQkuc3ZocyAgICAgICAgICAgPSAyLAotCS5ncGlvbWFzayAgICAgICA9IDcsCi0JLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAxIH0sICAgLyogVHVuZXIsIFNWaWQsIFNWSFMsIFNWaWQgdG8gU1ZIUyBjb25uZWN0b3IgKi8KLQkuYXVkaW9tdXggICAgICAgPSB7IDAgLDAgLDQsIDQsNCw0fSwvKiBZZXMsIHRoaXMgdHVuZXIgdXNlcyB0aGUgc2FtZSBhdWRpbyBvdXRwdXQgZm9yIFRWIGFuZCBGTSByYWRpbyEKLQkJCQkJKiBUaGlzIGNhcmQgbGFja3MgZXh0ZXJuYWwgQXVkaW8gSW4sIHNvIHdlIG11dGUgaXQgb24gRXh0LiAmIEludC4KLQkJCQkJKiBUaGUgUENCIGNhbiB0YWtlIGEgc2J4MTYzNy9zYngxNjczLCB3aXJpbmcgdW5rbm93bi4KLQkJCQkJKiBUaGlzIGNhcmQgbGFja3MgUENJIHN1YnN5c3RlbSBJRCwgc2lnaC4KLQkJCQkJKiBhdWRpb211eD0xOiBsb3dlciB2b2x1bWUsIDIrMzogbXV0ZQotCQkJCQkqIGJ0d2luY2FwIHVzZXMgMHg4MDAwMC8weDgwMDAzCi0JCQkJCSovCi0JLm5lZWRzX3R2YXVkaW8gID0gMCwKLQkubm9fbXNwMzR4eCAgICAgPSAxLAotCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKLQkudHVuZXJfdHlwZSAgICAgPSA1LAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkvKiBTYW1zdW5nIFRDUEE5MDk1UEMyN0EgKEJHK0RLKSwgcGhpbGlwcyBjb21wYXRpYmxlLCB3L0ZNLCBzdGVyZW8gYW5kCi0JcmFkaW8gc2lnbmFsIHN0cmVuZ3RoIGluZGljYXRvcnMgd29yayBmaW5lLiAqLwotCS5oYXNfcmFkaW8JPSAxLAotCS8qIEdQSU8gSW5mbzoKLQkJR1BJTzAsMTogICBIRUY0MDUyIEEwLEExCi0JCUdQSU8yOiAgICAgSEVGNDA1MiBuRU5BQkxFCi0JCUdQSU8zLTc6ICAgbi5jLgotCQlHUElPOC0xMzogIElSREMzNTcgZGF0YTAtNSAoZGF0YTYgbi5jLiA/KSBbY2hpcCBub3QgcHJlc2VudCBvbiBteSBjYXJkXQotCQlHUElPMTQsMTU6ID8/Ci0JCUdQSU8xNi0yMTogbi5jLgotCQlHUElPMjIsMjM6ID8/Ci0JCT8/ICAgICAgIDogbXR1OGI1NmVwIG1pY3JvY29udHJvbGxlciBmb3IgSVIgKEdQSU8gd2lyaW5nIHVua25vd24pKi8KLX0sewotCS8qIEFydGh1ciBUZXR6bGFmZi1EZWFzLCBEU1AgRGVzaWduIEx0ZCA8c29mdHdhcmVAZHNwZGVzaWduLmNvbT4gKi8KLQkubmFtZSAgICAgICAgICAgPSAiRFNQIERlc2lnbiBUQ1ZJREVPIiwKLQkudmlkZW9faW5wdXRzICAgPSA0LAotCS5zdmhzICAgICAgICAgICA9IC0xLAotCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMH0sCi0JLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCS50dW5lcl90eXBlICAgICA9IC0xLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLX0seworCQkvKiAtLS0tIGNhcmQgMHg3OCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJW0JUVFZfQk9BUkRfQ09OVFZGTUldID0geworCQkvKiBKYXZpZXIgQ2VuZGFuIEFyZXMgPGpjZW5kYW5AbHljb3MuZXM+ICovCisJCS8qIGJ0ODc4IFRWICsgRk0gd2l0aG91dCBzdWJzeXN0ZW0gSUQgKi8KKwkJLm5hbWUgICAgICAgICAgID0gIkNvbmNlcHRyb25pYyBDT05UVkZNaSIsCisJCS52aWRlb19pbnB1dHMgICA9IDMsCisJCS5hdWRpb19pbnB1dHMgICA9IDEsCisJCS50dW5lciAgICAgICAgICA9IDAsCisJCS5zdmhzICAgICAgICAgICA9IDIsCisJCS5ncGlvbWFzayAgICAgICA9IDB4MDA4MDA3LAorCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDEgfSwKKwkJLmF1ZGlvbXV4ICAgICAgID0geyAwLCAxLCAyLCAyLCAzIH0sCisJCS5uZWVkc190dmF1ZGlvICA9IDAsCisJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19QQUwsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLmhhc19yZW1vdGUgICAgID0gMSwKKwkJLmhhc19yYWRpbyAgICAgID0gMSwKKwl9LAorCVtCVFRWX0JPQVJEX1BJQ09MT19URVRSQV9DSElQXSA9IHsKKwkJLypFcmljIERFQklFRiA8ZGViaWVmQHRlbGVtc2EuY29tPiovCisJCS8qRVVSRVNZUyBQaWNvbG8gVGV0cmEgOiA0IENvbmV4YW50IEZ1c2lvbiA4NzhBLCBubyBhdWRpbywgdmlkZW8gaW5wdXQgc2V0IHdpdGggYW5hbG9nIG11bHRpcGxleGVycyBHUElPIGNvbnRyb2xlZCovCisJCS8qIGFkZHMgcGljb2xvX3RldHJhX211eHNlbCgpLCBwaWNvbG9fdGV0cmFfaW5pdCgpLCB0aGUgZm9sb3dpbmcgZGVjbGFyYXRpb24gc3RydWN1cmUsIGFuZCAjZGVmaW5lIEJUVFZfQk9BUkRfUElDT0xPX1RFVFJBX0NISVAqLworCQkvKjB4NzkgaW4gYnR0di5oKi8KKwkJLm5hbWUgICAgICAgICAgID0gIkV1cmVzeXMgUGljb2xvIFRldHJhIiwKKwkJLnZpZGVvX2lucHV0cyAgID0gNCwKKwkJLmF1ZGlvX2lucHV0cyAgID0gMCwKKwkJLnR1bmVyICAgICAgICAgID0gLTEsCisJCS5zdmhzICAgICAgICAgICA9IC0xLAorCQkuZ3Bpb21hc2sgICAgICAgPSAwLAorCQkuZ3Bpb21hc2syICAgICAgPSAweDNDPDwxNiwvKlNldCB0aGUgR1BJT1sxOF0tPkdQSU9bMjFdIGFzIG91dHB1dCBwaW4uPT0+IGRyaXZlIHRoZSB2aWRlbyBpbnB1dHMgdGhyb3VnaCBhbmFsb2cgbXVsdGlwbGV4ZXJzKi8KKwkJLm5vX21zcDM0eHggICAgID0gMSwKKwkJLm5vX3RkYTk4NzUgICAgID0gMSwKKwkJLm5vX3RkYTc0MzIgICAgID0gMSwKKwkJLm11eHNlbCAgICAgICAgID0gezIsMiwyLDJ9LC8qODc4QSBpbnB1dCBpcyBhbHdheXMgTVVYMCwgc2VlIGFib3ZlLiovCisJCS5hdWRpb211eCAgICAgICA9IHsgMCwgMCwgMCwgMCwgMCwgMCB9LCAvKiBjYXJkIGhhcyBubyBhdWRpbyAqLworCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCisJCS5uZWVkc190dmF1ZGlvICA9IDAsCisJCS5tdXhzZWxfaG9vayAgICA9IHBpY29sb190ZXRyYV9tdXhzZWwsLypSZXF1aXJlZCBhcyBpdCBkb2Vzbid0IGZvbGxvdyB0aGUgY2xhc3NpYyBpbnB1dCBzZWxlY3Rpb24gcG9saWN5Ki8KKwkJLnR1bmVyX3R5cGUgICAgID0gLTEsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwl9LAorCVtCVFRWX0JPQVJEX1NQSVJJVF9UVl0gPSB7CisJCS8qIFNwaXJpdCBUViBUdW5lciBmcm9tIGh0dHA6Ly9zcGlyaXRtb2RlbXMuY29tLmF1ICovCisJCS8qIFN0YWZmb3JkIEdvb2RzZWxsIDxzdXJnZUBnb2xpYXRoLmhvbWV1bml4Lm9yZz4gKi8KKwkJLm5hbWUgICAgICAgICAgID0gIlNwaXJpdCBUViBUdW5lciIsCisJCS52aWRlb19pbnB1dHMgICA9IDMsCisJCS5hdWRpb19pbnB1dHMgICA9IDEsCisJCS50dW5lciAgICAgICAgICA9IDAsCisJCS5zdmhzICAgICAgICAgICA9IDIsCisJCS5ncGlvbWFzayAgICAgICA9IDB4MDAwMDAwMGYsCisJCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMSwgMSB9LAorCQkuYXVkaW9tdXggICAgICAgPSB7IDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9URU1JQ19QQUwsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLm5vX21zcDM0eHggICAgID0gMSwKKwkJLm5vX3RkYTk4NzUgICAgID0gMSwKKwl9LAorCVtCVFRWX0JPQVJEX0FWRFZCVF83NzFdID0geworCQkvKiBXb2xmcmFtIEpvb3N0IDx3b2pvQGZyb2thc2Nod2VpLmRlPiAqLworCQkubmFtZSAgICAgICAgICAgPSAiQVZlck1lZGlhIEFWZXJUViBEVkItVCA3NzEiLAorCQkudmlkZW9faW5wdXRzICAgPSAyLAorCQkuc3ZocyAgICAgICAgICAgPSAxLAorCQkudHVuZXIgICAgICAgICAgPSAtMSwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5tdXhzZWwgICAgICAgICA9IHsgMyAsIDMgfSwKKwkJLm5vX21zcDM0eHggICAgID0gMSwKKwkJLm5vX3RkYTk4NzUgICAgID0gMSwKKwkJLm5vX3RkYTc0MzIgICAgID0gMSwKKwkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAorCQkuaGFzX2R2YiAgICAgICAgPSAxLAorCQkubm9fZ3Bpb2lycSAgICAgPSAxLAorCQkuaGFzX3JlbW90ZSAgICAgPSAxLAorCX0sCisJCS8qIC0tLS0gY2FyZCAweDdjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwlbQlRUVl9CT0FSRF9BVkRWQlRfNzYxXSA9IHsKKwkJLyogTWF0dCBKZXNzb24gPGR2YkBqZXNzb24uZWNsaXBzZS5jby51az4gKi8KKwkJLyogQmFzZWQgb24gdGhlIE5lYnVsYSBjYXJkIGRhdGEgLSBhZGRlZCByZW1vdGUgYW5kIG5ldyBjYXJkIG51bWJlciAtIEJUVFZfQk9BUkRfQVZEVkJUXzc2MSwgc2VlIGFsc28gaXIta2JkLWdwaW8uYyAqLworCQkubmFtZSAgICAgICAgICAgPSAiQXZlck1lZGlhIEF2ZXJUViBEVkItVCA3NjEiLAorCQkudmlkZW9faW5wdXRzICAgPSAyLAorCQkudHVuZXIgICAgICAgICAgPSAtMSwKKwkJLnN2aHMgICAgICAgICAgID0gMSwKKwkJLm11eHNlbCAgICAgICAgID0geyAzLCAxLCAyLCAwfSwgLyogQ29tcDAsIFMtVmlkZW8sID8sID8gKi8KKwkJLm5vX21zcDM0eHggICAgID0gMSwKKwkJLm5vX3RkYTk4NzUgICAgID0gMSwKKwkJLm5vX3RkYTc0MzIgICAgID0gMSwKKwkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAorCQkudHVuZXJfdHlwZSAgICAgPSAtMSwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkuaGFzX2R2YiAgICAgICAgPSAxLAorCQkubm9fZ3Bpb2lycSAgICAgPSAxLAorCQkuaGFzX3JlbW90ZSAgICAgPSAxLAorCX0sCisJW0JUVFZfQk9BUkRfTUFUUklYX1ZJU0lPTlNRXSA9IHsKKwkJLyogYW5kcmUuc2Nod2FyekBtYXRyaXgtdmlzaW9uLmRlICovCisJCS5uYW1lICAgICAgICAgICAgID0gIk1BVFJJWCBWaXNpb24gU2lnbWEtU1EiLAorCQkudmlkZW9faW5wdXRzICAgICA9IDE2LAorCQkuYXVkaW9faW5wdXRzICAgICA9IDAsCisJCS50dW5lciAgICAgICAgICAgID0gLTEsCisJCS5zdmhzICAgICAgICAgICAgID0gLTEsCisJCS5ncGlvbWFzayAgICAgICAgID0gMHgwLAorCQkubXV4c2VsICAgICAgICAgICA9IHsgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwKKwkJCQkzLCAzLCAzLCAzLCAzLCAzLCAzLCAzIH0sCisJCS5tdXhzZWxfaG9vayAgICAgID0gc2lnbWFTUV9tdXhzZWwsCisJCS5hdWRpb211eCAgICAgICAgID0geyAwIH0sCisJCS5ub19tc3AzNHh4ICAgICAgID0gMSwKKwkJLnBsbCAgICAgICAgICAgICAgPSBQTExfMjgsCisJCS50dW5lcl90eXBlICAgICAgID0gLTEsCisJCS50dW5lcl9hZGRyCSAgPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCX0sCisJW0JUVFZfQk9BUkRfTUFUUklYX1ZJU0lPTlNMQ10gPSB7CisJCS8qIGFuZHJlLnNjaHdhcnpAbWF0cml4LXZpc2lvbi5kZSAqLworCQkubmFtZSAgICAgICAgICAgICA9ICJNQVRSSVggVmlzaW9uIFNpZ21hLVNMQyIsCisJCS52aWRlb19pbnB1dHMgICAgID0gNCwKKwkJLmF1ZGlvX2lucHV0cyAgICAgPSAwLAorCQkudHVuZXIgICAgICAgICAgICA9IC0xLAorCQkuc3ZocyAgICAgICAgICAgICA9IC0xLAorCQkuZ3Bpb21hc2sgICAgICAgICA9IDB4MCwKKwkJLm11eHNlbCAgICAgICAgICAgPSB7IDIsIDIsIDIsIDIgfSwKKwkJLm11eHNlbF9ob29rICAgICAgPSBzaWdtYVNMQ19tdXhzZWwsCisJCS5hdWRpb211eCAgICAgICAgID0geyAwIH0sCisJCS5ub19tc3AzNHh4ICAgICAgID0gMSwKKwkJLnBsbCAgICAgICAgICAgICAgPSBQTExfMjgsCisJCS50dW5lcl90eXBlICAgICAgID0gLTEsCisJCS50dW5lcl9hZGRyCSAgPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCX0sCisJCS8qIEJUVFZfQk9BUkRfQVBBQ19WSUVXQ09NUCAqLworCVtCVFRWX0JPQVJEX0FQQUNfVklFV0NPTVBdID0geworCQkvKiBBdHRpbGEgS29uZG9yb3MgPGF0dGlsYS5rb25kb3Jvc0BjaGVsbG8uaHU+ICovCisJCS8qIGJ0ODc4IFRWICsgRk0gMHgwMDAwMDAwMCBzdWJzeXN0ZW0gSUQgKi8KKwkJLm5hbWUgICAgICAgICAgID0gIkFQQUMgVmlld2NvbXAgODc4KEFNQVgpIiwKKwkJLnZpZGVvX2lucHV0cyAgID0gMiwKKwkJLmF1ZGlvX2lucHV0cyAgID0gMSwKKwkJLnR1bmVyICAgICAgICAgID0gMCwKKwkJLnN2aHMgICAgICAgICAgID0gLTEsCisJCS5ncGlvbWFzayAgICAgICA9IDB4RkYsCisJCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMX0sCisJCS5hdWRpb211eCAgICAgICA9IHsgMiwgMCwgMCwgMCwgMTB9LAorCQkubmVlZHNfdHZhdWRpbyAgPSAwLAorCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfUEFMLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5oYXNfcmVtb3RlICAgICA9IDEsICAgLyogbWluaXJlbW90ZSB3b3Jrcywgc2VlIGlyLWtiZC1ncGlvLmMgKi8KKwkJLmhhc19yYWRpbyAgICAgID0gMSwgICAvKiBub3QgZXZlcnkgY2FyZCBoYXMgcmFkaW8gKi8KKwl9LAogCi0JLyogLS0tLSBjYXJkIDB4NTAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCS5uYW1lICAgICAgICAgICA9ICJIYXVwcGF1Z2UgV2luVFYgUFZSIiwKLQkudmlkZW9faW5wdXRzICAgPSA0LAotCS5hdWRpb19pbnB1dHMgICA9IDEsCi0JLnR1bmVyICAgICAgICAgID0gMCwKLQkuc3ZocyAgICAgICAgICAgPSAyLAotCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMCwgMSwgMX0sCi0JLm5lZWRzX3R2YXVkaW8gID0gMSwKLQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JLnR1bmVyX3R5cGUgICAgID0gLTEsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkvKiAtLS0tIGNhcmQgMHg4MCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJW0JUVFZfQk9BUkRfRFZJQ09fRFZCVF9MSVRFXSA9IHsKKwkJLyogQ2hyaXMgUGFzY29lIDxjLnBhc2NvZUBpdGVlLnVxLmVkdS5hdT4gKi8KKwkJLm5hbWUgICAgICAgICAgID0gIkRWaUNPIEZ1c2lvbkhEVFYgRFZCLVQgTGl0ZSIsCisJCS50dW5lciAgICAgICAgICA9IC0xLAorCQkubm9fbXNwMzR4eCAgICAgPSAxLAorCQkubm9fdGRhOTg3NSAgICAgPSAxLAorCQkubm9fdGRhNzQzMiAgICAgPSAxLAorCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCisJCS5ub192aWRlbyAgICAgICA9IDEsCisJCS5oYXNfZHZiICAgICAgICA9IDEsCisJCS50dW5lcl90eXBlICAgICA9IC0xLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJfSwKKwlbQlRUVl9CT0FSRF9WR0VBUl9NWVZDRF0gPSB7CisJCS8qIFN0ZXZlbiA8cGhvdG9uMzhAcGNob21lLmNvbS50dz4gKi8KKwkJLm5hbWUgICAgICAgICAgID0gIlYtR2VhciBNeVZDRCIsCisJCS52aWRlb19pbnB1dHMgICA9IDMsCisJCS5hdWRpb19pbnB1dHMgICA9IDEsCisJCS50dW5lciAgICAgICAgICA9IDAsCisJCS5zdmhzICAgICAgICAgICA9IDIsCisJCS5ncGlvbWFzayAgICAgICA9IDB4M2YsCisJCS5tdXhzZWwgICAgICAgICA9IHsyLCAzLCAxLCAwfSwKKwkJLmF1ZGlvbXV4ICAgICAgID0gezB4MzEsIDB4MzEsIDB4MzEsIDB4MzEsIDB4MzEsIDB4MzF9LAorCQkubm9fbXNwMzR4eCAgICAgPSAxLAorCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfTlRTQ19NLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5oYXNfcmFkaW8gICAgICA9IDAsCisJI2lmIDAKKwkJLmhhc19yZW1vdGUgICAgID0gMSwKKwkjZW5kaWYKKwl9LAorCVtCVFRWX0JPQVJEX1NVUEVSX1RWXSA9IHsKKwkJLyogUmljayBDIDxjcnlwdGRyYWdvb25AZ21haWwuY29tPiAqLworCQkubmFtZSAgICAgICAgICAgPSAiU3VwZXIgVFYgVHVuZXIiLAorCQkudmlkZW9faW5wdXRzICAgPSA0LAorCQkuYXVkaW9faW5wdXRzICAgPSAxLAorCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkuc3ZocyAgICAgICAgICAgPSAyLAorCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDB9LAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX05UU0MsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLmdwaW9tYXNrICAgICAgID0gMHgwMDgwMDcsCisJCS5hdWRpb211eCAgICAgICA9IHsgMCwgMHgwMDAwMDEsMCwwLCAwfSwKKwkJLm5lZWRzX3R2YXVkaW8gID0gMSwKKwkJLmhhc19yYWRpbyAgICAgID0gMSwKKwl9LAorCVtCVFRWX0JPQVJEX1RJQkVUX0NTMTZdID0geworCQkvKiBDaHJpcyBGYW5uaW5nIDx2aWRlbzRsaW51eEBoYXlkb24ubmV0PiAqLworCQkubmFtZSAgICAgICAgICAgPSAiVGliZXQgU3lzdGVtcyAnUHJvZ3Jlc3MgRFZSJyBDUzE2IiwKKwkJLnZpZGVvX2lucHV0cyAgID0gMTYsCisJCS5hdWRpb19pbnB1dHMgICA9IDAsCisJCS50dW5lciAgICAgICAgICA9IC0xLAorCQkuc3ZocyAgICAgICAgICAgPSAtMSwKKwkJLm11eHNlbCAgICAgICAgID0geyAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyIH0sCisJCS5wbGwJCT0gUExMXzI4LAorCQkubm9fbXNwMzR4eCAgICAgPSAxLAorCQkubm9fdGRhOTg3NSAgICAgPSAxLAorCQkubm9fdGRhNzQzMgk9IDEsCisJCS50dW5lcl90eXBlICAgICA9IC0xLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5tdXhzZWxfaG9vayAgICA9IHRpYmV0Q1MxNl9tdXhzZWwsCisJfSwKKwlbQlRUVl9CT0FSRF9LT0RJQ09NXzQ0MDBSXSA9IHsKKwkJLyogQmlsbCBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+ICovCisJCS8qCisJCSogTm90ZSB0aGF0LCBiZWNhdXNlIG9mIHRoZSBjYXJkJ3Mgd2lyaW5nLCB0aGUgIm1hc3RlciIKKwkJKiBCVDg3OEEgY2hpcCAoaS5lLiB0aGUgb25lIHdoaWNoIGNvbnRyb2xzIHRoZSBhbmFsb2cgc3dpdGNoCisJCSogYW5kIG11c3QgdXNlIHRoaXMgY2FyZCB0eXBlKSBpcyB0aGUgMm5kIG9uZSBkZXRlY3RlZC4gIFRoZQorCQkqIG90aGVyIDMgY2hpcHMgc2hvdWxkIHVzZSBjYXJkIHR5cGUgMHg4NSwgd2hvc2UgZGVzY3JpcHRpb24KKwkJKiBmb2xsb3dzIHRoaXMgb25lLiAgVGhlcmUgaXMgYSBFRVBST00gb24gdGhlIGNhcmQgKHdoaWNoIGlzCisJCSogY29ubmVjdGVkIHRvIHRoZSBJMkMgb2Ygb25lIG9mIHRob3NlIG90aGVyIGNoaXBzKSwgYnV0IGlzCisJCSogbm90IGN1cnJlbnRseSBoYW5kbGVkLiAgVGhlcmUgaXMgYWxzbyBhIGZhY2lsaXR5IGZvciBhCisJCSogIm1vbml0b3IiLCB3aGljaCBpcyBhbHNvIG5vdCBjdXJyZW50bHkgaW1wbGVtZW50ZWQuCisJCSovCisJCS5uYW1lICAgICAgICAgICA9ICJLb2RpY29tIDQ0MDBSIChtYXN0ZXIpIiwKKwkJLnZpZGVvX2lucHV0cwk9IDE2LAorCQkuYXVkaW9faW5wdXRzCT0gMCwKKwkJLnR1bmVyCQk9IC0xLAorCQkudHVuZXJfdHlwZQk9IC0xLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5zdmhzCQk9IC0xLAorCQkvKiBHUElPIGJpdHMgMC05IHVzZWQgZm9yIGFuYWxvZyBzd2l0Y2g6CisJCSogICAwMCAtIDAzOgljYW1lcmEgc2VsZWN0b3IKKwkJKiAgIDA0IC0gMDY6CWNoYW5uZWwgKGNvbnRyb2xsZXIpIHNlbGVjdG9yCisJCSogICAwNzoJZGF0YSAoMS0+b24sIDAtPm9mZikKKwkJKiAgIDA4OglzdHJvYmUKKwkJKiAgIDA5OglyZXNldAorCQkqIGJpdCAxNiBpcyBpbnB1dCBmcm9tIHN5bmMgc2VwYXJhdG9yIGZvciB0aGUgY2hhbm5lbAorCQkqLworCQkuZ3Bpb21hc2sJPSAweDAwMDNmZiwKKwkJLm5vX2dwaW9pcnEgICAgID0gMSwKKwkJLm11eHNlbAkJPSB7IDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMgfSwKKwkJLnBsbAkJPSBQTExfMjgsCisJCS5ub19tc3AzNHh4CT0gMSwKKwkJLm5vX3RkYTc0MzIJPSAxLAorCQkubm9fdGRhOTg3NQk9IDEsCisJCS5tdXhzZWxfaG9vawk9IGtvZGljb200NDAwcl9tdXhzZWwsCisJfSwKKwlbQlRUVl9CT0FSRF9LT0RJQ09NXzQ0MDBSX1NMXSA9IHsKKwkJLyogQmlsbCBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+ICovCisJCS8qIE5vdGUgdGhhdCwgZm9yIHJlYXNvbnMgdW5rbm93biwgdGhlICJtYXN0ZXIiIEJUODc4QSBjaGlwIChpLmUuIHRoZQorCQkqIG9uZSB3aGljaCBjb250cm9scyB0aGUgYW5hbG9nIHN3aXRjaCwgYW5kIG11c3QgdXNlIHRoZSBjYXJkIHR5cGUpCisJCSogaXMgdGhlIDJuZCBvbmUgZGV0ZWN0ZWQuICBUaGUgb3RoZXIgMyBjaGlwcyBzaG91bGQgdXNlIHRoaXMgY2FyZAorCQkqIHR5cGUKKwkJKi8KKwkJLm5hbWUJCT0gIktvZGljb20gNDQwMFIgKHNsYXZlKSIsCisJCS52aWRlb19pbnB1dHMJPSAxNiwKKwkJLmF1ZGlvX2lucHV0cwk9IDAsCisJCS50dW5lcgkJPSAtMSwKKwkJLnR1bmVyX3R5cGUJPSAtMSwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkuc3ZocwkJPSAtMSwKKwkJLmdwaW9tYXNrCT0gMHgwMTAwMDAsCisJCS5ub19ncGlvaXJxICAgICA9IDEsCisJCS5tdXhzZWwJCT0geyAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzIH0sCisJCS5wbGwJCT0gUExMXzI4LAorCQkubm9fbXNwMzR4eAk9IDEsCisJCS5ub190ZGE3NDMyCT0gMSwKKwkJLm5vX3RkYTk4NzUJPSAxLAorCQkubXV4c2VsX2hvb2sJPSBrb2RpY29tNDQwMHJfbXV4c2VsLAorCX0sCisJCS8qIC0tLS0gY2FyZCAweDg2LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCVtCVFRWX0JPQVJEX0FETElOS19SVFYyNF0gPSB7CisJCS8qIE1pY2hhZWwgSGVuc29uIDxtaGVuc29uQGNsYXJpdHl2aS5jb20+ICovCisJCS8qIEFkbGluayBSVFYyNCB3aXRoIHNwZWNpYWwgdW5sb2NrIGNvZGVzICovCisJCS5uYW1lICAgICAgICAgICA9ICJBZGxpbmsgUlRWMjQiLAorCQkudmlkZW9faW5wdXRzICAgPSA0LAorCQkuYXVkaW9faW5wdXRzICAgPSAxLAorCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkuc3ZocyAgICAgICAgICAgPSAyLAorCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDB9LAorCQkudHVuZXJfdHlwZSAgICAgPSAtMSwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCisJfSwKKwkJLyogLS0tLSBjYXJkIDB4ODctLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJW0JUVFZfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl81X0xJVEVdID0geworCQkvKiBNaWNoYWVsIEtydWZreSA8bWtydWZreUBtMWsubmV0PiAqLworCQkubmFtZSAgICAgICAgICAgPSAiRFZpQ08gRnVzaW9uSERUViA1IExpdGUiLAorCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9MR19URFZTX0gwNjJGLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS52aWRlb19pbnB1dHMgICA9IDMsCisJCS5hdWRpb19pbnB1dHMgICA9IDEsCisJCS5zdmhzICAgICAgICAgICA9IDIsCisJCS5tdXhzZWwJCT0geyAyLCAzLCAxIH0sCisJCS5ncGlvbWFzayAgICAgICA9IDB4MDBlMDAwMDcsCisJCS5hdWRpb211eCAgICAgICA9IHsgMHgwMDQwMDAwNSwgMCwgMHgwMDAwMDAwMSwgMCwgMHgwMGMwMDAwNywgMCB9LAorCQkubm9fbXNwMzR4eCAgICAgPSAxLAorCQkubm9fdGRhOTg3NSAgICAgPSAxLAorCQkubm9fdGRhNzQzMiAgICAgPSAxLAorCQkuaGFzX2R2YiAgICAgICAgPSAxLAorCX0sCisJCS8qIC0tLS0gY2FyZCAweDg4LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCVtCVFRWX0JPQVJEX0FDT1JQX1k4NzhGXSA9IHsKKwkJLyogTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQGJydHVyYm8uY29tLmJyPiAqLworCQkubmFtZQkJPSAiQWNvcnAgWTg3OEYiLAorCQkudmlkZW9faW5wdXRzCT0gMywKKwkJLmF1ZGlvX2lucHV0cwk9IDEsCisJCS50dW5lcgkJPSAwLAorCQkuc3ZocwkJPSAyLAorCQkuZ3Bpb21hc2sJPSAweDAxZmUwMCwKKwkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LAorCQkuYXVkaW9tdXggICAgICAgPSB7IDB4MDAxZTAwLCAwLCAweDAxODAwMCwgMHgwMTQwMDAsIDB4MDAyMDAwLCAwIH0sCisJCS5uZWVkc190dmF1ZGlvCT0gMSwKKwkJLnBsbAkJPSBQTExfMjgsCisJCS50dW5lcl90eXBlCT0gVFVORVJfWU1FQ19UVkY2NlQ1X0JfREZGLAorCQkudHVuZXJfYWRkcgk9IDB4YzEgPj4xLAorCQkucmFkaW9fYWRkciAgICAgPSAweGMxID4+MSwKKwkJLmhhc19yYWRpbwk9IDEsCisJfSwKKwkJLyogLS0tLSBjYXJkIDB4ODkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCVtCVFRWX0JPQVJEX0NPTkNFUFRST05JQ19DVFZGTUkyXSA9IHsKKwkJLm5hbWUgICAgICAgICAgID0gIkNvbmNlcHRyb25pYyBDVFZGTWkgdjIiLAorCQkudmlkZW9faW5wdXRzICAgPSAzLAorCQkuYXVkaW9faW5wdXRzICAgPSAxLAorCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkuc3ZocyAgICAgICAgICAgPSAyLAorCQkuZ3Bpb21hc2sgICAgICAgPSAweDAwMWMwMDA3LAorCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDEgfSwKKwkJLmF1ZGlvbXV4ICAgICAgID0geyAwLCAxLCAyLCAyLCAzIH0sCisJCS5uZWVkc190dmF1ZGlvICA9IDAsCisJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfVEVOQV85NTMzX0RJLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5oYXNfcmVtb3RlICAgICA9IDEsCisJCS5oYXNfcmFkaW8gICAgICA9IDEsCisJfSwKKwkJLyogLS0tLSBjYXJkIDB4OGEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCVtCVFRWX0JPQVJEX1BWX0JUODc4UF8yRV0gPSB7CisJCS5uYW1lICAgICAgICAgID0gIlByb2xpbmsgUGl4ZWx2aWV3IFBWLUJUODc4UCsgKFJldi4yRSkiLAorCQkudmlkZW9faW5wdXRzICA9IDUsCisJCS5hdWRpb19pbnB1dHMgID0gMSwKKwkJLnR1bmVyICAgICAgICAgPSAwLAorCQkuc3ZocyAgICAgICAgICA9IDMsCisJCS5ncGlvbWFzayAgICAgID0gMHgwMWZlMDAsCisJCS5tdXhzZWwgICAgICAgID0geyAyLDMsMSwxLC0xIH0sCisJCS5kaWdpdGFsX21vZGUgID0gRElHSVRBTF9NT0RFX0NBTUVSQSwKKwkJLmF1ZGlvbXV4ICAgICAgPSB7IDB4MDA0MDAsIDB4MTA0MDAsIDB4MDQ0MDAsIDB4ODAwMDAsIDB4MTI0MDAsIDB4NDYwMDAgIH0sCisJCS5ub19tc3AzNHh4ICAgID0gMSwKKwkJLnBsbCAgICAgICAgICAgPSBQTExfMjgsCisJCS50dW5lcl90eXBlICAgID0gVFVORVJfTEdfUEFMX0ZNLAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5oYXNfcmVtb3RlICAgID0gMSwKKwl9LAorCQkvKiAtLS0tIGNhcmQgMHg4YiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJW0JUVFZfQk9BUkRfUFZfTTQ5MDBdID0geworCQkvKiBT6XJnaW8gRm9ydGllciA8c2VyZ2lvZm9ydGllckB5YWhvby5jb20uYnI+ICovCisJCS5uYW1lICAgICAgICAgICA9ICJQcm9saW5rIFBpeGVsVmlldyBQbGF5VFYgTVBFRzIgUFYtTTQ5MDAiLAorCQkudmlkZW9faW5wdXRzICAgPSAzLAorCQkuYXVkaW9faW5wdXRzICAgPSAxLAorCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkuc3ZocyAgICAgICAgICAgPSAyLAorCQkuZ3Bpb21hc2sgICAgICAgPSAweDNmLAorCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDEgfSwKKwkJLmF1ZGlvbXV4ICAgICAgID0geyAweDIxLCAweDIwLCAweDI0LCAweDJjLCAweDI5LCAweDI5IH0sCisJCS5ub19tc3AzNHh4ICAgICA9IDEsCisJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfWU1FQ19UVkZfNTUzM01GLAorCQkudHVuZXJfYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkuaGFzX3JhZGlvICAgICAgPSAxLAorCQkuaGFzX3JlbW90ZSAgICAgPSAxLAorCX0sCisJCS8qIC0tLS0gY2FyZCAweDhjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwlbQlRUVl9CT0FSRF9PU1BSRVk0NDBdICA9IHsKKwkJLm5hbWUgICAgICAgICAgID0gIk9zcHJleSA0NDAiLAorCQkudmlkZW9faW5wdXRzICAgPSAxLAorCQkuYXVkaW9faW5wdXRzICAgPSAxLAorCQkudHVuZXIgICAgICAgICAgPSAtMSwKKwkJLnN2aHMgICAgICAgICAgID0gMSwKKwkJLm11eHNlbCAgICAgICAgID0geyAyIH0sCisJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKKwkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl9hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5ub19tc3AzNHh4ICAgICA9IDEsCisJCS5ub190ZGE5ODc1ICAgICA9IDEsCisJCS5ub190ZGE3NDMyICAgICA9IDEsCisJfSwKKwkJLyogLS0tLSBjYXJkIDB4OGQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCVtCVFRWX0JPQVJEX0FTT1VORF9TS1lFWUVdID0geworCQkubmFtZQkJPSAiQXNvdW5kIFNreWV5ZSBQQ1RWIiwKKwkJLnZpZGVvX2lucHV0cwk9IDMsCisJCS5hdWRpb19pbnB1dHMJPSAxLAorCQkudHVuZXIJCT0gMCwKKwkJLnN2aHMJCT0gMiwKKwkJLmdwaW9tYXNrCT0gMTUsCisJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxfSwKKwkJLmF1ZGlvbXV4CT0gezIsMCwwLDAsMX0sCisJCS5uZWVkc190dmF1ZGlvCT0gMSwKKwkJLnBsbAkJPSBQTExfMjgsCisJCS50dW5lcl90eXBlCT0gMiwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCX0sCiAKLQkuZ3Bpb21hc2sgICAgICAgPSA3LAotCS5hdWRpb211eCAgICAgICA9IHs3fSwKLX0sewotCS5uYW1lICAgICAgICAgICA9ICJJT0RBVEEgR1YtQkNUVjUvUENJIiwKLQkudmlkZW9faW5wdXRzICAgPSAzLAotCS5hdWRpb19pbnB1dHMgICA9IDEsCi0JLnR1bmVyICAgICAgICAgID0gMCwKLQkuc3ZocyAgICAgICAgICAgPSAyLAotCS5ncGlvbWFzayAgICAgICA9IDB4MGYwZjgwLAotCS5tdXhzZWwgICAgICAgICA9IHsyLCAzLCAxLCAwfSwKLQkuYXVkaW9tdXggICAgICAgPSB7MHgwMzAwMDAsIDB4MDEwMDAwLCAwLCAwLCAweDAyMDAwMCwgMH0sCi0JLm5vX21zcDM0eHggICAgID0gMSwKLQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19OVFNDX00sCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCS5hdWRpb19ob29rICAgICA9IGd2YmN0djVwY2lfYXVkaW8sCi0JLmhhc19yYWRpbyAgICAgID0gMSwKLX0sewotCS5uYW1lICAgICAgICAgICA9ICJPc3ByZXkgMTAwLzE1MCAoODc4KSIsIC8qIDB4MSgyfDMpLTQ1QzYtQzEgKi8KLQkudmlkZW9faW5wdXRzICAgPSA0LCAgICAgICAgICAgICAgICAgIC8qIGlkLWlucHV0cy1jbG9jayAqLwotCS5hdWRpb19pbnB1dHMgICA9IDAsCi0JLnR1bmVyICAgICAgICAgID0gLTEsCi0JLnN2aHMgICAgICAgICAgID0gMywKLQkubXV4c2VsICAgICAgICAgPSB7IDMsIDIsIDAsIDEgfSwKLQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JLnR1bmVyX3R5cGUgICAgID0gLTEsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCS5ub19tc3AzNHh4ICAgICA9IDEsCi0JLm5vX3RkYTk4NzUgICAgID0gMSwKLQkubm9fdGRhNzQzMiAgICAgPSAxLAotfSx7Ci0JLm5hbWUgICAgICAgICAgID0gIk9zcHJleSAxMDAvMTUwICg4NDgpIiwgLyogMHgwNC01NEMwLUMxICYgb2xkZXIgYm9hcmRzICovCi0JLnZpZGVvX2lucHV0cyAgID0gMywKLQkuYXVkaW9faW5wdXRzICAgPSAwLAotCS50dW5lciAgICAgICAgICA9IC0xLAotCS5zdmhzICAgICAgICAgICA9IDIsCi0JLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxIH0sCi0JLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCS50dW5lcl90eXBlICAgICA9IC0xLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkubm9fbXNwMzR4eCAgICAgPSAxLAotCS5ub190ZGE5ODc1ICAgICA9IDEsCi0JLm5vX3RkYTc0MzIgICAgID0gMSwKLX0sewotCi0JLyogLS0tLSBjYXJkIDB4NTQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCS5uYW1lICAgICAgICAgICA9ICJPc3ByZXkgMTAxICg4NDgpIiwgLyogMHgwNS00MEMwLUMxICovCi0JLnZpZGVvX2lucHV0cyAgID0gMiwKLQkuYXVkaW9faW5wdXRzICAgPSAwLAotCS50dW5lciAgICAgICAgICA9IC0xLAotCS5zdmhzICAgICAgICAgICA9IDEsCi0JLm11eHNlbCAgICAgICAgID0geyAzLCAxIH0sCi0JLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCS50dW5lcl90eXBlICAgICA9IC0xLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkubm9fbXNwMzR4eCAgICAgPSAxLAotCS5ub190ZGE5ODc1ICAgICA9IDEsCi0JLm5vX3RkYTc0MzIgICAgID0gMSwKLX0sewotCS5uYW1lICAgICAgICAgICA9ICJPc3ByZXkgMTAxLzE1MSIsICAgICAgIC8qIDB4MSg0fDUpLTAwMDQtQzQgKi8KLQkudmlkZW9faW5wdXRzICAgPSAxLAotCS5hdWRpb19pbnB1dHMgICA9IDAsCi0JLnR1bmVyICAgICAgICAgID0gLTEsCi0JLnN2aHMgICAgICAgICAgID0gLTEsCi0JLm11eHNlbCAgICAgICAgID0geyAwIH0sCi0JLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCS50dW5lcl90eXBlICAgICA9IC0xLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkubm9fbXNwMzR4eCAgICAgPSAxLAotCS5ub190ZGE5ODc1ICAgICA9IDEsCi0JLm5vX3RkYTc0MzIgICAgID0gMSwKLX0sewotCS5uYW1lICAgICAgICAgICA9ICJPc3ByZXkgMTAxLzE1MSB3LyBzdmlkIiwgIC8qIDB4KDE2fDE3fDIwKS0wMEM0LUMxICovCi0JLnZpZGVvX2lucHV0cyAgID0gMiwKLQkuYXVkaW9faW5wdXRzICAgPSAwLAotCS50dW5lciAgICAgICAgICA9IC0xLAotCS5zdmhzICAgICAgICAgICA9IDEsCi0JLm11eHNlbCAgICAgICAgID0geyAwLCAxIH0sCi0JLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCS50dW5lcl90eXBlICAgICA9IC0xLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkubm9fbXNwMzR4eCAgICAgPSAxLAotCS5ub190ZGE5ODc1ICAgICA9IDEsCi0JLm5vX3RkYTc0MzIgICAgID0gMSwKLX0sewotCS5uYW1lICAgICAgICAgICA9ICJPc3ByZXkgMjAwLzIwMS8yNTAvMjUxIiwgIC8qIDB4MSg4fDl8RXxGKS0wMDA0LUM0ICovCi0JLnZpZGVvX2lucHV0cyAgID0gMSwKLQkuYXVkaW9faW5wdXRzICAgPSAxLAotCS50dW5lciAgICAgICAgICA9IC0xLAotCS5zdmhzICAgICAgICAgICA9IC0xLAotCS5tdXhzZWwgICAgICAgICA9IHsgMCB9LAotCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKLQkudHVuZXJfdHlwZQk9IFVOU0VULAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkubm9fbXNwMzR4eCAgICAgPSAxLAotCS5ub190ZGE5ODc1ICAgICA9IDEsCi0JLm5vX3RkYTc0MzIgICAgID0gMSwKLX0sewotCi0JLyogLS0tLSBjYXJkIDB4NTggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCS5uYW1lICAgICAgICAgICA9ICJPc3ByZXkgMjAwLzI1MCIsICAgLyogMHgxKEF8QiktMDBDNC1DMSAqLwotCS52aWRlb19pbnB1dHMgICA9IDIsCi0JLmF1ZGlvX2lucHV0cyAgID0gMSwKLQkudHVuZXIgICAgICAgICAgPSAtMSwKLQkuc3ZocyAgICAgICAgICAgPSAxLAotCS5tdXhzZWwgICAgICAgICA9IHsgMCwgMSB9LAotCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKLQkudHVuZXJfdHlwZQk9IFVOU0VULAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkubm9fbXNwMzR4eCAgICAgPSAxLAotCS5ub190ZGE5ODc1ICAgICA9IDEsCi0JLm5vX3RkYTc0MzIgICAgID0gMSwKLX0sewotCS5uYW1lICAgICAgICAgICA9ICJPc3ByZXkgMjEwLzIyMCIsICAgLyogMHgxKEF8QiktMDRDMC1DMSAqLwotCS52aWRlb19pbnB1dHMgICA9IDIsCi0JLmF1ZGlvX2lucHV0cyAgID0gMSwKLQkudHVuZXIgICAgICAgICAgPSAtMSwKLQkuc3ZocyAgICAgICAgICAgPSAxLAotCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMyB9LAotCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKLQkudHVuZXJfdHlwZQk9IFVOU0VULAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkubm9fbXNwMzR4eCAgICAgPSAxLAotCS5ub190ZGE5ODc1ICAgICA9IDEsCi0JLm5vX3RkYTc0MzIgICAgID0gMSwKLX0sewotCS5uYW1lICAgICAgICAgICA9ICJPc3ByZXkgNTAwIiwgICAvKiA1MDAgKi8KLQkudmlkZW9faW5wdXRzICAgPSAyLAotCS5hdWRpb19pbnB1dHMgICA9IDEsCi0JLnR1bmVyICAgICAgICAgID0gLTEsCi0JLnN2aHMgICAgICAgICAgID0gMSwKLQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMgfSwKLQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JLnR1bmVyX3R5cGUgICAgID0gLTEsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCS5ub19tc3AzNHh4ICAgICA9IDEsCi0JLm5vX3RkYTk4NzUgICAgID0gMSwKLQkubm9fdGRhNzQzMiAgICAgPSAxLAotfSx7Ci0JLm5hbWUgICAgICAgICAgID0gIk9zcHJleSA1NDAiLCAgIC8qIDU0MCAqLwotCS52aWRlb19pbnB1dHMgICA9IDQsCi0JLmF1ZGlvX2lucHV0cyAgID0gMSwKLQkudHVuZXIgICAgICAgICAgPSAtMSwKLQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JLnR1bmVyX3R5cGUgICAgID0gLTEsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCS5ub19tc3AzNHh4ICAgICA9IDEsCi0JLm5vX3RkYTk4NzUgICAgID0gMSwKLQkubm9fdGRhNzQzMiAgICAgPSAxLAotfSx7Ci0KLQkvKiAtLS0tIGNhcmQgMHg1QyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0JLm5hbWUgICAgICAgICAgID0gIk9zcHJleSAyMDAwIiwgIC8qIDIwMDAgKi8KLQkudmlkZW9faW5wdXRzICAgPSAyLAotCS5hdWRpb19pbnB1dHMgICA9IDEsCi0JLnR1bmVyICAgICAgICAgID0gLTEsCi0JLnN2aHMgICAgICAgICAgID0gMSwKLQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMgfSwKLQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JLnR1bmVyX3R5cGUJPSBVTlNFVCwKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JLm5vX21zcDM0eHggICAgID0gMSwKLQkubm9fdGRhOTg3NSAgICAgPSAxLAotCS5ub190ZGE3NDMyICAgICA9IDEsICAgICAgLyogbXVzdCBhdm9pZCwgY29uZmxpY3RzIHdpdGggdGhlIGJ0ODYwICovCi19LHsKLQkvKiBNIEcgQmVyYmVyaWNoIDxiZXJiZXJpY0Bmb3J3aXNzLnVuaS1wYXNzYXUuZGU+ICovCi0JLm5hbWUgICAgICAgICAgID0gIklEUyBFYWdsZSIsCi0JLnZpZGVvX2lucHV0cyAgID0gNCwKLQkuYXVkaW9faW5wdXRzICAgPSAwLAotCS50dW5lciAgICAgICAgICA9IC0xLAotCS50dW5lcl90eXBlICAgICA9IC0xLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkuc3ZocyAgICAgICAgICAgPSAtMSwKLQkuZ3Bpb21hc2sgICAgICAgPSAwLAotCS5tdXhzZWwgICAgICAgICA9IHsgMCwgMSwgMiwgMyB9LAotCS5tdXhzZWxfaG9vayAgICA9IGVhZ2xlX211eHNlbCwKLQkubm9fbXNwMzR4eCAgICAgPSAxLAotCS5ub190ZGE5ODc1ICAgICA9IDEsCi0JLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotfSx7Ci0JLm5hbWUgICAgICAgICAgID0gIlBpbm5hY2xlIFBDVFYgU2F0IiwKLQkudmlkZW9faW5wdXRzICAgPSAyLAotCS5hdWRpb19pbnB1dHMgICA9IDAsCi0JLnN2aHMgICAgICAgICAgID0gMSwKLQkudHVuZXIgICAgICAgICAgPSAtMSwKLQkudHVuZXJfdHlwZSAgICAgPSAtMSwKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JLm5vX21zcDM0eHggICAgID0gMSwKLQkubm9fdGRhOTg3NSAgICAgPSAxLAotCS5ub190ZGE3NDMyICAgICA9IDEsCi0JLmdwaW9tYXNrICAgICAgID0gMHgwMSwKLQkuYXVkaW9tdXggICAgICAgPSB7IDAsIDAsIDAsIDAsIDEgfSwKLQkubXV4c2VsICAgICAgICAgPSB7IDMsIDAsIDEsIDJ9LAotCS5uZWVkc190dmF1ZGlvICA9IDAsCi0JLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCS5ub19ncGlvaXJxICAgICA9IDEsCi0JLmhhc19kdmIgICAgICAgID0gMSwKLX0sewotCS5uYW1lICAgICAgICAgICA9ICJGb3JtYWMgUHJvVFYgSUkgKGJ0ODc4KSIsCi0JLnZpZGVvX2lucHV0cyAgID0gNCwKLQkuYXVkaW9faW5wdXRzICAgPSAxLAotCS50dW5lciAgICAgICAgICA9IDAsCi0JLnN2aHMgICAgICAgICAgID0gMywKLQkuZ3Bpb21hc2sgICAgICAgPSAyLAotCS8qIFRWLCBDb21wMSwgQ29tcG9zaXRlIG92ZXIgU1ZJRCBjb24sIFNWSUQgKi8KLQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDF9LAotCS5hdWRpb211eCAgICAgICA9IHsgMiwgMiwgMCwgMCwgMCB9LAotCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKLQkuaGFzX3JhZGlvICAgICAgPSAxLAotCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfUEFMLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLS8qIHNvdW5kIHJvdXRpbmc6Ci0JR1BJTz0weDAwLDB4MDEsMHgwMzogbXV0ZSAoPykKLQkweDAyOiBib3RoIFRWIGFuZCByYWRpbyAodHVuZXI6IEZNMTIxNi9JKQotCVRoZSBjYXJkIGhhcyBvbmJvYXJkIGF1ZGlvIGNvbm5lY3RvcnMgbGFiZWxlZCAiY2Ryb20iIGFuZCAiYm9hcmQiLAotCW5vdCBzb2xkZXJlZCBoZXJlLCB0aG91Z2ggdW5rbm93biB3aXJpbmcuCi0JQ2FyZCBsYWNrczogZXh0ZXJuYWwgYXVkaW8gaW4sIHBjaSBzdWJzeXN0ZW0gaWQuCi0qLwotfSx7Ci0KLQkvKiAtLS0tIGNhcmQgMHg2MCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0JLm5hbWUgICAgICAgICAgID0gIk1hY2hUViIsCi0JLnZpZGVvX2lucHV0cyAgID0gMywKLQkuYXVkaW9faW5wdXRzICAgPSAxLAotCS50dW5lciAgICAgICAgICA9IDAsCi0JLnN2aHMgICAgICAgICAgID0gLTEsCi0JLmdwaW9tYXNrICAgICAgID0gNywKLQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDF9LAotCS5hdWRpb211eCAgICAgICA9IHsgMCwgMSwgMiwgMywgNH0sCi0JLm5lZWRzX3R2YXVkaW8gID0gMSwKLQkudHVuZXJfdHlwZSAgICAgPSA1LAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkucGxsICAgICAgICAgICAgPSAxLAotfSx7Ci0JLm5hbWUgICAgICAgICAgID0gIkV1cmVzeXMgUGljb2xvIiwKLQkudmlkZW9faW5wdXRzICAgPSAzLAotCS5hdWRpb19pbnB1dHMgICA9IDAsCi0JLnR1bmVyICAgICAgICAgID0gLTEsCi0JLnN2aHMgICAgICAgICAgID0gMiwKLQkuZ3Bpb21hc2sgICAgICAgPSAwLAotCS5ub19tc3AzNHh4ICAgICA9IDEsCi0JLm5vX3RkYTk4NzUgICAgID0gMSwKLQkubm9fdGRhNzQzMiAgICAgPSAxLAotCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMCwgMX0sCi0JLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCS50dW5lcl90eXBlICAgICA9IFVOU0VULAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLX0sewotCS8qIEx1YyBWYW4gSG9leWxhbmR0IDxsdWNAZS1tYWdpYy5iZT4gKi8KLQkubmFtZSAgICAgICAgICAgPSAiUHJvVmlkZW8gUFYxNTAiLCAvKiAweDRmICovCi0JLnZpZGVvX2lucHV0cyAgID0gMiwKLQkuYXVkaW9faW5wdXRzICAgPSAwLAotCS50dW5lciAgICAgICAgICA9IC0xLAotCS5zdmhzICAgICAgICAgICA9IC0xLAotCS5ncGlvbWFzayAgICAgICA9IDAsCi0JLm11eHNlbCAgICAgICAgID0geyAyLCAzIH0sCi0JLmF1ZGlvbXV4ICAgICAgID0geyAwIH0sCi0JLm5lZWRzX3R2YXVkaW8gID0gMCwKLQkubm9fbXNwMzR4eCAgICAgPSAxLAotCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKLQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi19LHsKLQkvKiBIaXJvc2hpIFRha2VrYXdhIDxzaWFuQGJpZy5vci5qcD4gKi8KLQkvKiBUaGlzIGNhcmQgbGFja3Mgc3Vic3lzdGVtIElEICovCi0JLm5hbWUgICAgICAgICAgID0gIkFELVRWSzUwMyIsIC8qIDB4NjMgKi8KLQkudmlkZW9faW5wdXRzICAgPSA0LAotCS5hdWRpb19pbnB1dHMgICA9IDEsCi0JLnR1bmVyICAgICAgICAgID0gMCwKLQkuc3ZocyAgICAgICAgICAgPSAyLAotCS5ncGlvbWFzayAgICAgICA9IDB4MDAxZTgwMDcsCi0JLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAwIH0sCi0JLyogICAgICAgICAgICAgICAgICBUdW5lciwgUmFkaW8sIGV4dGVybmFsLCBpbnRlcm5hbCwgb2ZmLCAgb24gKi8KLQkuYXVkaW9tdXggICAgICAgPSB7IDB4MDgsICAweDBmLCAgMHgwYSwgICAgIDB4MDgsICAgICAweDBmLCAweDA4IH0sCi0JLm5lZWRzX3R2YXVkaW8gID0gMCwKLQkubm9fbXNwMzR4eCAgICAgPSAxLAotCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKLQkudHVuZXJfdHlwZSAgICAgPSAyLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkuYXVkaW9faG9vawk9IGFkdHZrNTAzX2F1ZGlvLAotfSx7Ci0KLQkvKiAtLS0tIGNhcmQgMHg2NCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0JLm5hbWUgICAgICAgICAgID0gIkhlcmN1bGVzIFNtYXJ0IFRWIFN0ZXJlbyIsCi0JLnZpZGVvX2lucHV0cyAgID0gNCwKLQkuYXVkaW9faW5wdXRzICAgPSAxLAotCS50dW5lciAgICAgICAgICA9IDAsCi0JLnN2aHMgICAgICAgICAgID0gMiwKLQkuZ3Bpb21hc2sgICAgICAgPSAweDAwLAotCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMSB9LAotCS5uZWVkc190dmF1ZGlvICA9IDEsCi0JLm5vX21zcDM0eHggICAgID0gMSwKLQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JLnR1bmVyX3R5cGUgICAgID0gNSwKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JLyogTm90ZXM6Ci0JLSBjYXJkIGxhY2tzIHN1YnN5c3RlbSBJRAotCS0gc3RlcmVvIHZhcmlhbnQgdy8gZGF1Z2h0ZXIgYm9hcmQgd2l0aCB0ZGE5ODc0YSBAMHhiMAotCS0gQXVkaW8gUm91dGluZzoKLQkJYWx3YXlzIGZyb20gdGRhOTg3NCBpbmRlcGVuZGVudCBvZiBHUElPICg/KQotCQlleHRlcm5hbCBsaW5lIGluOiB1bmtub3duCi0JLSBPdGhlciBjaGlwczogZW03OHAxNTZlbHAgQCAweDk2IChwcm9iYWJseSBJUiByZW1vdGUgY29udHJvbCkKLQkJaGVmNDA1MyAoaW5zdGVhZCA0MDUyKSBmb3IgdW5rbm93biBmdW5jdGlvbgotCSovCi19LHsKLQkubmFtZSAgICAgICAgICAgPSAiUGFjZSBUViAmIFJhZGlvIENhcmQiLAotCS52aWRlb19pbnB1dHMgICA9IDQsCi0JLmF1ZGlvX2lucHV0cyAgID0gMSwKLQkudHVuZXIgICAgICAgICAgPSAwLAotCS5zdmhzICAgICAgICAgICA9IDIsCi0JLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAxfSwgLyogVHVuZXIsIENWaWQsIFNWaWQsIENWaWQgb3ZlciBTVmlkIGNvbm5lY3RvciAqLwotCS5ncGlvbWFzayAgICAgICA9IDAsCi0JLm5vX3RkYTk4NzUgICAgID0gMSwKLQkubm9fdGRhNzQzMiAgICAgPSAxLAotCS50dW5lcl90eXBlICAgICA9IDEsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCS5oYXNfcmFkaW8gICAgICA9IDEsCi0JLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCS8qIEJ0ODc4LCBCdDgzMiwgRkkxMjQ2IHR1bmVyOyBubyBwY2kgc3Vic3lzdGVtIGlkCi0Jb25seSBpbnRlcm5hbCBsaW5lIG91dDogKDRwaW4gaGVhZGVyKSBSR0dMCi0JUmFkaW8gbXVzdCBiZSBkZWNvZGVkIGJ5IG1zcDM0MTBkIChub3Qgcm91dGVkIHRocm91Z2gpKi8KLQkvKgotCS5kaWdpdGFsX21vZGUgICA9IERJR0lUQUxfTU9ERV9DQU1FUkEsICB0b2RvIQotCSovCi19LHsKLQkvKiBDaHJpcyBXaWxsaW5nIDxjaHJpc0B2aXNsYWIudXN5ZC5lZHUuYXU+ICovCi0JLm5hbWUgICAgICAgICAgID0gIklWQy0yMDAiLAotCS52aWRlb19pbnB1dHMgICA9IDEsCi0JLmF1ZGlvX2lucHV0cyAgID0gMCwKLQkudHVuZXIgICAgICAgICAgPSAtMSwKLQkudHVuZXJfdHlwZSAgICAgPSAtMSwKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JLnN2aHMgICAgICAgICAgID0gLTEsCi0JLmdwaW9tYXNrICAgICAgID0gMHhkZiwKLQkubXV4c2VsICAgICAgICAgPSB7IDIgfSwKLQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi19LHsKLQkubmFtZSAgICAgICAgICAgPSAiR3JhbmQgWC1HdWFyZCAvIFRydXN0IDgxNFBDSSIsCi0JLnZpZGVvX2lucHV0cyAgID0gMTYsCi0JLmF1ZGlvX2lucHV0cyAgID0gMCwKLQkudHVuZXIgICAgICAgICAgPSAtMSwKLQkuc3ZocyAgICAgICAgICAgPSAtMSwKLQkudHVuZXJfdHlwZSAgICAgPSA0LAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkuZ3Bpb21hc2syICAgICAgPSAweGZmLAotCS5tdXhzZWwgICAgICAgICA9IHsgMiwyLDIsMiwgMywzLDMsMywgMSwxLDEsMSwgMCwwLDAsMCB9LAotCS5tdXhzZWxfaG9vayAgICA9IHhndWFyZF9tdXhzZWwsCi0JLm5vX21zcDM0eHggICAgID0gMSwKLQkubm9fdGRhOTg3NSAgICAgPSAxLAotCS5ub190ZGE3NDMyICAgICA9IDEsCi0JLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotfSx7Ci0KLQkvKiAtLS0tIGNhcmQgMHg2OCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0JLm5hbWUgICAgICAgICAgID0gIk5lYnVsYSBFbGVjdHJvbmljcyBEaWdpVFYiLAotCS52aWRlb19pbnB1dHMgICA9IDEsCi0JLnR1bmVyICAgICAgICAgID0gLTEsCi0JLnN2aHMgICAgICAgICAgID0gLTEsCi0JLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAwfSwKLQkubm9fbXNwMzR4eCAgICAgPSAxLAotCS5ub190ZGE5ODc1ICAgICA9IDEsCi0JLm5vX3RkYTc0MzIgICAgID0gMSwKLQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JLnR1bmVyX3R5cGUgICAgID0gLTEsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCS5oYXNfZHZiICAgICAgICA9IDEsCi0JLm5vX2dwaW9pcnEgICAgID0gMSwKLX0sewotCS8qIEpvcmdlIEJvbmNvbXB0ZSAtIERUSTIgPGpvcmdlQGR0aTIubmV0PiAqLwotCS5uYW1lICAgICAgICAgICA9ICJQcm9WaWRlbyBQVjE0MyIsCi0JLnZpZGVvX2lucHV0cyAgID0gNCwKLQkuYXVkaW9faW5wdXRzICAgPSAwLAotCS50dW5lciAgICAgICAgICA9IC0xLAotCS5zdmhzICAgICAgICAgICA9IC0xLAotCS5ncGlvbWFzayAgICAgICA9IDAsCi0JLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAwIH0sCi0JLmF1ZGlvbXV4ICAgICAgID0geyAwIH0sCi0JLm5lZWRzX3R2YXVkaW8gID0gMCwKLQkubm9fbXNwMzR4eCAgICAgPSAxLAotCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKLQkudHVuZXJfdHlwZSAgICAgPSAtMSwKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi19LHsKLQkvKiBNLktsYWhyQHBoeXRlYy5kZSAqLwotCS5uYW1lICAgICAgICAgICA9ICJQSFlURUMgVkQtMDA5LVgxIE1pbmlESU4gKGJ0ODc4KSIsCi0JLnZpZGVvX2lucHV0cyAgID0gNCwKLQkuYXVkaW9faW5wdXRzICAgPSAwLAotCS50dW5lciAgICAgICAgICA9IC0xLCAvKiBjYXJkIGhhcyBubyB0dW5lciAqLwotCS5zdmhzICAgICAgICAgICA9IDMsCi0JLmdwaW9tYXNrICAgICAgID0gMHgwMCwKLQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDB9LAotCS5hdWRpb211eCAgICAgICA9IHsgMCwgMCwgMCwgMCwgMCwgMCB9LCAvKiBjYXJkIGhhcyBubyBhdWRpbyAqLwotCS5uZWVkc190dmF1ZGlvICA9IDEsCi0JLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCS50dW5lcl90eXBlICAgICA9IC0xLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLX0sewotCS5uYW1lICAgICAgICAgICA9ICJQSFlURUMgVkQtMDA5LVgxIENvbWJpIChidDg3OCkiLAotCS52aWRlb19pbnB1dHMgICA9IDQsCi0JLmF1ZGlvX2lucHV0cyAgID0gMCwKLQkudHVuZXIgICAgICAgICAgPSAtMSwgLyogY2FyZCBoYXMgbm8gdHVuZXIgKi8KLQkuc3ZocyAgICAgICAgICAgPSAzLAotCS5ncGlvbWFzayAgICAgICA9IDB4MDAsCi0JLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAxfSwKLQkuYXVkaW9tdXggICAgICAgPSB7IDAsIDAsIDAsIDAsIDAsIDAgfSwgLyogY2FyZCBoYXMgbm8gYXVkaW8gKi8KLQkubmVlZHNfdHZhdWRpbyAgPSAxLAotCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKLQkudHVuZXJfdHlwZSAgICAgPSAtMSwKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi19LHsKLQotCS8qIC0tLS0gY2FyZCAweDZjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQkubmFtZSAgICAgICAgICAgPSAiUEhZVEVDIFZELTAwOSBNaW5pRElOIChidDg3OCkiLAotCS52aWRlb19pbnB1dHMgICA9IDEwLAotCS5hdWRpb19pbnB1dHMgICA9IDAsCi0JLnR1bmVyICAgICAgICAgID0gLTEsIC8qIGNhcmQgaGFzIG5vIHR1bmVyICovCi0JLnN2aHMgICAgICAgICAgID0gOSwKLQkuZ3Bpb21hc2sgICAgICAgPSAweDAwLAotCS5ncGlvbWFzazIgICAgICA9IDB4MDMsIC8qIGdwaW9tYXNrMiBkZWZpbmVzIHRoZSBiaXRzIHVzZWQgdG8gc3dpdGNoIGF1ZGlvCi0JCQkJdmlhIHRoZSB1cHBlciBuaWJibGUgb2YgbXV4c2VsLiBoZXJlOiB1c2VkIGZvcgotCQkJCXh0ZXJuYWwgdmlkZW8tbXV4ICovCi0JLm11eHNlbCAgICAgICAgID0geyAweDAyLCAweDEyLCAweDIyLCAweDMyLCAweDAzLCAweDEzLCAweDIzLCAweDMzLCAweDAxLCAweDAwIH0sCi0JLmF1ZGlvbXV4ICAgICAgID0geyAwLCAwLCAwLCAwLCAwLCAwIH0sIC8qIGNhcmQgaGFzIG5vIGF1ZGlvICovCi0JLm5lZWRzX3R2YXVkaW8gID0gMSwKLQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JLnR1bmVyX3R5cGUgICAgID0gLTEsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotfSx7Ci0JLm5hbWUgICAgICAgICAgID0gIlBIWVRFQyBWRC0wMDkgQ29tYmkgKGJ0ODc4KSIsCi0JLnZpZGVvX2lucHV0cyAgID0gMTAsCi0JLmF1ZGlvX2lucHV0cyAgID0gMCwKLQkudHVuZXIgICAgICAgICAgPSAtMSwgLyogY2FyZCBoYXMgbm8gdHVuZXIgKi8KLQkuc3ZocyAgICAgICAgICAgPSA5LAotCS5ncGlvbWFzayAgICAgICA9IDB4MDAsCi0JLmdwaW9tYXNrMiAgICAgID0gMHgwMywgLyogZ3Bpb21hc2syIGRlZmluZXMgdGhlIGJpdHMgdXNlZCB0byBzd2l0Y2ggYXVkaW8KLQkJCQl2aWEgdGhlIHVwcGVyIG5pYmJsZSBvZiBtdXhzZWwuIGhlcmU6IHVzZWQgZm9yCi0JCQkJeHRlcm5hbCB2aWRlby1tdXggKi8KLQkubXV4c2VsICAgICAgICAgPSB7IDB4MDIsIDB4MTIsIDB4MjIsIDB4MzIsIDB4MDMsIDB4MTMsIDB4MjMsIDB4MzMsIDB4MDEsIDB4MDEgfSwKLQkuYXVkaW9tdXggICAgICAgPSB7IDAsIDAsIDAsIDAsIDAsIDAgfSwgLyogY2FyZCBoYXMgbm8gYXVkaW8gKi8KLQkubmVlZHNfdHZhdWRpbyAgPSAxLAotCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKLQkudHVuZXJfdHlwZSAgICAgPSAtMSwKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi19LHsKLQkubmFtZSAgICAgICAgICAgPSAiSVZDLTEwMCIsCi0JLnZpZGVvX2lucHV0cyAgID0gNCwKLQkuYXVkaW9faW5wdXRzICAgPSAwLAotCS50dW5lciAgICAgICAgICA9IC0xLAotCS50dW5lcl90eXBlICAgICA9IC0xLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkuc3ZocyAgICAgICAgICAgPSAtMSwKLQkuZ3Bpb21hc2sgICAgICAgPSAweGRmLAotCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMCB9LAotCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKLX0sewotCS8qIElWQy0xMjBHIC0gQWxhbiBHYXJmaWVsZCA8YWxhbkBmcm9tb3JiaXQuY29tPiAqLwotCS5uYW1lICAgICAgICAgICA9ICJJVkMtMTIwRyIsCi0JLnZpZGVvX2lucHV0cyAgID0gMTYsCi0JLmF1ZGlvX2lucHV0cyAgID0gMCwgICAgLyogY2FyZCBoYXMgbm8gYXVkaW8gKi8KLQkudHVuZXIgICAgICAgICAgPSAtMSwgICAvKiBjYXJkIGhhcyBubyB0dW5lciAqLwotCS50dW5lcl90eXBlICAgICA9IC0xLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkuc3ZocyAgICAgICAgICAgPSAtMSwgICAvKiBjYXJkIGhhcyBubyBzdmhzICovCi0JLm5lZWRzX3R2YXVkaW8gID0gMCwKLQkubm9fbXNwMzR4eCAgICAgPSAxLAotCS5ub190ZGE5ODc1ICAgICA9IDEsCi0JLm5vX3RkYTc0MzIgICAgID0gMSwKLQkuZ3Bpb21hc2sgICAgICAgPSAweDAwLAotCS5tdXhzZWwgICAgICAgICA9IHsgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywgMHgwOCwKLQkJCTB4MDksIDB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYsIDB4MTAgfSwKLQkubXV4c2VsX2hvb2sgICAgPSBpdmMxMjBfbXV4c2VsLAotCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKLX0sewotCi0JLyogLS0tLSBjYXJkIDB4NzAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCS5uYW1lICAgICAgICAgICA9ICJwY0hEVFYgSEQtMjAwMCBUViIsCi0JLnZpZGVvX2lucHV0cyAgID0gNCwKLQkuYXVkaW9faW5wdXRzICAgPSAxLAotCS50dW5lciAgICAgICAgICA9IDAsCi0JLnN2aHMgICAgICAgICAgID0gMiwKLQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDB9LAotCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfQVRTQywKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JLmhhc19kdmIgICAgICAgID0gMSwKLX0sewotCS5uYW1lICAgICAgICAgICA9ICJUd2luaGFuIERTVCArIGNsb25lcyIsCi0JLm5vX21zcDM0eHggICAgID0gMSwKLQkubm9fdGRhOTg3NSAgICAgPSAxLAotCS5ub190ZGE3NDMyICAgICA9IDEsCi0JLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkubm9fdmlkZW8gICAgICAgPSAxLAotCS5oYXNfZHZiICAgICAgICA9IDEsCi19LHsKLQkubmFtZSAgICAgICAgICAgPSAiV2luZmFzdCBWQzEwMCIsCi0JLnZpZGVvX2lucHV0cyAgID0gMywKLQkuYXVkaW9faW5wdXRzICAgPSAwLAotCS5zdmhzICAgICAgICAgICA9IDEsCi0JLnR1bmVyICAgICAgICAgID0gLTEsCi0JLm11eHNlbCAgICAgICAgID0geyAzLCAxLCAxLCAzfSwgLyogVmlkIEluLCBTVmlkIEluLCBWaWQgb3ZlciBTVmlkIGluIGNvbm5lY3RvciAqLwotCS5ub19tc3AzNHh4ICAgICA9IDEsCi0JLm5vX3RkYTk4NzUgICAgID0gMSwKLQkubm9fdGRhNzQzMiAgICAgPSAxLAotCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotfSx7Ci0JLm5hbWUgICAgICAgICAgID0gIlRlcHBybyBURVYtNTYwL0ludGVyVmlzaW9uIElWLTU2MCIsCi0JLnZpZGVvX2lucHV0cyAgID0gMywKLQkuYXVkaW9faW5wdXRzICAgPSAxLAotCS50dW5lciAgICAgICAgICA9IDAsCi0JLnN2aHMgICAgICAgICAgID0gMiwKLQkuZ3Bpb21hc2sgICAgICAgPSAzLAotCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMX0sCi0JLmF1ZGlvbXV4ICAgICAgID0geyAxLCAxLCAxLCAxLCAwfSwKLQkubmVlZHNfdHZhdWRpbyAgPSAxLAotCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfUEFMLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkucGxsICAgICAgICAgICAgPSBQTExfMzUsCi19LHsKLQotCS8qIC0tLS0gY2FyZCAweDc0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQkubmFtZSAgICAgICAgICAgPSAiU0lNVVMgR1ZDMTEwMCIsCi0JLnZpZGVvX2lucHV0cyAgID0gNCwKLQkuYXVkaW9faW5wdXRzICAgPSAwLAotCS50dW5lciAgICAgICAgICA9IC0xLAotCS5zdmhzICAgICAgICAgICA9IC0xLAotCS50dW5lcl90eXBlICAgICA9IC0xLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JLm11eHNlbCAgICAgICAgID0geyAyLCAyLCAyLCAyfSwKLQkuZ3Bpb21hc2sgICAgICAgPSAweDNGLAotCS5tdXhzZWxfaG9vayAgICA9IGd2YzExMDBfbXV4c2VsLAotfSx7Ci0JLyogQ2FybG9zIFNpbHZhIHIzcGVrQHIzcGVrLmhvbWVsaW51eC5vcmcgfHwgY2FyZCAweDc1ICovCi0JLm5hbWUgICAgICAgICAgID0gIk5HUyBOR1NUVisiLAotCS52aWRlb19pbnB1dHMgICA9IDMsCi0JLnR1bmVyICAgICAgICAgID0gMCwKLQkuc3ZocyAgICAgICAgICAgPSAyLAotCS5ncGlvbWFzayAgICAgICA9IDB4MDA4MDA3LAotCS5tdXhzZWwgICAgICAgICA9IHsyLCAzLCAwLCAwfSwKLQkuYXVkaW9tdXggICAgICAgPSB7MCwgMCwgMCwgMCwgMHgwMDAwMDMsIDB9LAotCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKLQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1BBTCwKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JLmhhc19yZW1vdGUgICAgID0gMSwKLX0sewotCS8qIGh0dHA6Ly9saW51eG1lZGlhbGFicy5jb20gKi8KLQkubmFtZSAgICAgICAgICAgPSAiTE1MQlQ0IiwKLQkudmlkZW9faW5wdXRzICAgPSA0LCAvKiBJTjEsSU4yLElOMyxJTjQgKi8KLQkuYXVkaW9faW5wdXRzICAgPSAwLAotCS50dW5lciAgICAgICAgICA9IC0xLAotCS5zdmhzICAgICAgICAgICA9IC0xLAotCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMCB9LAotCS5ub19tc3AzNHh4ICAgICA9IDEsCi0JLm5vX3RkYTk4NzUgICAgID0gMSwKLQkubm9fdGRhNzQzMiAgICAgPSAxLAotCS5uZWVkc190dmF1ZGlvICA9IDAsCi0JLnR1bmVyX3R5cGUgICAgID0gLTEsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotfSx7Ci0JLyogSGVsbXJvb3MgSGFycmkgPGhhcnJpLmhlbG1yb29zQHBwLmluZXQuZmk+ICovCi0JLm5hbWUgICAgICAgICAgID0gIlRla3JhbSBNMjA1IFBSTyIsCi0JLnZpZGVvX2lucHV0cyAgID0gMywKLQkuYXVkaW9faW5wdXRzICAgPSAxLAotCS50dW5lciAgICAgICAgICA9IDAsCi0JLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19QQUwsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCS5zdmhzICAgICAgICAgICA9IDIsCi0JLm5lZWRzX3R2YXVkaW8gID0gMCwKLQkuZ3Bpb21hc2sgICAgICAgPSAweDY4LAotCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMX0sCi0JLmF1ZGlvbXV4ICAgICAgID0geyAweDY4LCAweDY4LCAweDYxLCAweDYxLCAweDAwIH0sCi0JLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotfSx7Ci0KLQkvKiAtLS0tIGNhcmQgMHg3OCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0JLyogSmF2aWVyIENlbmRhbiBBcmVzIDxqY2VuZGFuQGx5Y29zLmVzPiAqLwotCS8qIGJ0ODc4IFRWICsgRk0gd2l0aG91dCBzdWJzeXN0ZW0gSUQgKi8KLQkubmFtZSAgICAgICAgICAgPSAiQ29uY2VwdHJvbmljIENPTlRWRk1pIiwKLQkudmlkZW9faW5wdXRzICAgPSAzLAotCS5hdWRpb19pbnB1dHMgICA9IDEsCi0JLnR1bmVyICAgICAgICAgID0gMCwKLQkuc3ZocyAgICAgICAgICAgPSAyLAotCS5ncGlvbWFzayAgICAgICA9IDB4MDA4MDA3LAotCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMSB9LAotCS5hdWRpb211eCAgICAgICA9IHsgMCwgMSwgMiwgMiwgMyB9LAotCS5uZWVkc190dmF1ZGlvICA9IDAsCi0JLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfUEFMLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkuaGFzX3JlbW90ZSAgICAgPSAxLAotCS5oYXNfcmFkaW8gICAgICA9IDEsCi19LHsKLQkvKkVyaWMgREVCSUVGIDxkZWJpZWZAdGVsZW1zYS5jb20+Ki8KLQkvKkVVUkVTWVMgUGljb2xvIFRldHJhIDogNCBDb25leGFudCBGdXNpb24gODc4QSwgbm8gYXVkaW8sIHZpZGVvIGlucHV0IHNldCB3aXRoIGFuYWxvZyBtdWx0aXBsZXhlcnMgR1BJTyBjb250cm9sZWQqLwotCS8qIGFkZHMgcGljb2xvX3RldHJhX211eHNlbCgpLCBwaWNvbG9fdGV0cmFfaW5pdCgpLCB0aGUgZm9sb3dpbmcgZGVjbGFyYXRpb24gc3RydWN1cmUsIGFuZCAjZGVmaW5lIEJUVFZfUElDT0xPX1RFVFJBX0NISVAqLwotCS8qMHg3OSBpbiBidHR2LmgqLwotCS5uYW1lICAgICAgICAgICA9ICJFdXJlc3lzIFBpY29sbyBUZXRyYSIsCi0JLnZpZGVvX2lucHV0cyAgID0gNCwKLQkuYXVkaW9faW5wdXRzICAgPSAwLAotCS50dW5lciAgICAgICAgICA9IC0xLAotCS5zdmhzICAgICAgICAgICA9IC0xLAotCS5ncGlvbWFzayAgICAgICA9IDAsCi0JLmdwaW9tYXNrMiAgICAgID0gMHgzQzw8MTYsLypTZXQgdGhlIEdQSU9bMThdLT5HUElPWzIxXSBhcyBvdXRwdXQgcGluLj09PiBkcml2ZSB0aGUgdmlkZW8gaW5wdXRzIHRocm91Z2ggYW5hbG9nIG11bHRpcGxleGVycyovCi0JLm5vX21zcDM0eHggICAgID0gMSwKLQkubm9fdGRhOTg3NSAgICAgPSAxLAotCS5ub190ZGE3NDMyICAgICA9IDEsCi0JLm11eHNlbCAgICAgICAgID0gezIsMiwyLDJ9LC8qODc4QSBpbnB1dCBpcyBhbHdheXMgTVVYMCwgc2VlIGFib3ZlLiovCi0JLmF1ZGlvbXV4ICAgICAgID0geyAwLCAwLCAwLCAwLCAwLCAwIH0sIC8qIGNhcmQgaGFzIG5vIGF1ZGlvICovCi0JLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCS5uZWVkc190dmF1ZGlvICA9IDAsCi0JLm11eHNlbF9ob29rICAgID0gcGljb2xvX3RldHJhX211eHNlbCwvKlJlcXVpcmVkIGFzIGl0IGRvZXNuJ3QgZm9sbG93IHRoZSBjbGFzc2ljIGlucHV0IHNlbGVjdGlvbiBwb2xpY3kqLwotCS50dW5lcl90eXBlICAgICA9IC0xLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLX0sewotCS8qIFNwaXJpdCBUViBUdW5lciBmcm9tIGh0dHA6Ly9zcGlyaXRtb2RlbXMuY29tLmF1ICovCi0JLyogU3RhZmZvcmQgR29vZHNlbGwgPHN1cmdlQGdvbGlhdGguaG9tZXVuaXgub3JnPiAqLwotCS5uYW1lICAgICAgICAgICA9ICJTcGlyaXQgVFYgVHVuZXIiLAotCS52aWRlb19pbnB1dHMgICA9IDMsCi0JLmF1ZGlvX2lucHV0cyAgID0gMSwKLQkudHVuZXIgICAgICAgICAgPSAwLAotCS5zdmhzICAgICAgICAgICA9IDIsCi0JLmdwaW9tYXNrICAgICAgID0gMHgwMDAwMDAwZiwKLQkubXV4c2VsICAgICAgICAgPSB7IDIsIDEsIDEgfSwKLQkuYXVkaW9tdXggICAgICAgPSB7IDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LAotCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1RFTUlDX1BBTCwKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JLm5vX21zcDM0eHggICAgID0gMSwKLQkubm9fdGRhOTg3NSAgICAgPSAxLAotfSx7Ci0JLyogV29sZnJhbSBKb29zdCA8d29qb0Bmcm9rYXNjaHdlaS5kZT4gKi8KLQkubmFtZSAgICAgICAgICAgPSAiQVZlck1lZGlhIEFWZXJUViBEVkItVCA3NzEiLAotCS52aWRlb19pbnB1dHMgICA9IDIsCi0JLnN2aHMgICAgICAgICAgID0gMSwKLQkudHVuZXIgICAgICAgICAgPSAtMSwKLQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCS5tdXhzZWwgICAgICAgICA9IHsgMyAsIDMgfSwKLQkubm9fbXNwMzR4eCAgICAgPSAxLAotCS5ub190ZGE5ODc1ICAgICA9IDEsCi0JLm5vX3RkYTc0MzIgICAgID0gMSwKLQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JLmhhc19kdmIgICAgICAgID0gMSwKLQkubm9fZ3Bpb2lycSAgICAgPSAxLAotCS5oYXNfcmVtb3RlICAgICA9IDEsCi19LHsKLQkvKiAtLS0tIGNhcmQgMHg3YyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0JLyogTWF0dCBKZXNzb24gPGR2YkBqZXNzb24uZWNsaXBzZS5jby51az4gKi8KLQkvKiBCYXNlZCBvbiB0aGUgTmVidWxhIGNhcmQgZGF0YSAtIGFkZGVkIHJlbW90ZSBhbmQgbmV3IGNhcmQgbnVtYmVyIC0gQlRUVl9BVkRWQlRfNzYxLCBzZWUgYWxzbyBpci1rYmQtZ3Bpby5jICovCi0JLm5hbWUgICAgICAgICAgID0gIkF2ZXJNZWRpYSBBdmVyVFYgRFZCLVQgNzYxIiwKLQkudmlkZW9faW5wdXRzICAgPSAyLAotCS50dW5lciAgICAgICAgICA9IC0xLAotCS5zdmhzICAgICAgICAgICA9IDEsCi0JLm11eHNlbCAgICAgICAgID0geyAzLCAxLCAyLCAwfSwgLyogQ29tcDAsIFMtVmlkZW8sID8sID8gKi8KLQkubm9fbXNwMzR4eCAgICAgPSAxLAotCS5ub190ZGE5ODc1ICAgICA9IDEsCi0JLm5vX3RkYTc0MzIgICAgID0gMSwKLQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JLnR1bmVyX3R5cGUgICAgID0gLTEsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCS5oYXNfZHZiICAgICAgICA9IDEsCi0JLm5vX2dwaW9pcnEgICAgID0gMSwKLQkuaGFzX3JlbW90ZSAgICAgPSAxLAotfSx7Ci0JLyogYW5kcmUuc2Nod2FyekBtYXRyaXgtdmlzaW9uLmRlICovCi0JLm5hbWUgICAgICAgICAgICAgPSAiTUFUUklYIFZpc2lvbiBTaWdtYS1TUSIsCi0JLnZpZGVvX2lucHV0cyAgICAgPSAxNiwKLQkuYXVkaW9faW5wdXRzICAgICA9IDAsCi0JLnR1bmVyICAgICAgICAgICAgPSAtMSwKLQkuc3ZocyAgICAgICAgICAgICA9IC0xLAotCS5ncGlvbWFzayAgICAgICAgID0gMHgwLAotCS5tdXhzZWwgICAgICAgICAgID0geyAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLAotCQkJMywgMywgMywgMywgMywgMywgMywgMyB9LAotCS5tdXhzZWxfaG9vayAgICAgID0gc2lnbWFTUV9tdXhzZWwsCi0JLmF1ZGlvbXV4ICAgICAgICAgPSB7IDAgfSwKLQkubm9fbXNwMzR4eCAgICAgICA9IDEsCi0JLnBsbCAgICAgICAgICAgICAgPSBQTExfMjgsCi0JLnR1bmVyX3R5cGUgICAgICAgPSAtMSwKLQkudHVuZXJfYWRkcgkgID0gQUREUl9VTlNFVCwKLX0sewotCS8qIGFuZHJlLnNjaHdhcnpAbWF0cml4LXZpc2lvbi5kZSAqLwotCS5uYW1lICAgICAgICAgICAgID0gIk1BVFJJWCBWaXNpb24gU2lnbWEtU0xDIiwKLQkudmlkZW9faW5wdXRzICAgICA9IDQsCi0JLmF1ZGlvX2lucHV0cyAgICAgPSAwLAotCS50dW5lciAgICAgICAgICAgID0gLTEsCi0JLnN2aHMgICAgICAgICAgICAgPSAtMSwKLQkuZ3Bpb21hc2sgICAgICAgICA9IDB4MCwKLQkubXV4c2VsICAgICAgICAgICA9IHsgMiwgMiwgMiwgMiB9LAotCS5tdXhzZWxfaG9vayAgICAgID0gc2lnbWFTTENfbXV4c2VsLAotCS5hdWRpb211eCAgICAgICAgID0geyAwIH0sCi0JLm5vX21zcDM0eHggICAgICAgPSAxLAotCS5wbGwgICAgICAgICAgICAgID0gUExMXzI4LAotCS50dW5lcl90eXBlICAgICAgID0gLTEsCi0JLnR1bmVyX2FkZHIJICA9IEFERFJfVU5TRVQsCi19LHsKLQkvKiBCVFRWX0FQQUNfVklFV0NPTVAgKi8KLQkvKiBBdHRpbGEgS29uZG9yb3MgPGF0dGlsYS5rb25kb3Jvc0BjaGVsbG8uaHU+ICovCi0JLyogYnQ4NzggVFYgKyBGTSAweDAwMDAwMDAwIHN1YnN5c3RlbSBJRCAqLwotCS5uYW1lICAgICAgICAgICA9ICJBUEFDIFZpZXdjb21wIDg3OChBTUFYKSIsCi0JLnZpZGVvX2lucHV0cyAgID0gMiwKLQkuYXVkaW9faW5wdXRzICAgPSAxLAotCS50dW5lciAgICAgICAgICA9IDAsCi0JLnN2aHMgICAgICAgICAgID0gLTEsCi0JLmdwaW9tYXNrICAgICAgID0gMHhGRiwKLQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDF9LAotCS5hdWRpb211eCAgICAgICA9IHsgMiwgMCwgMCwgMCwgMTB9LAotCS5uZWVkc190dmF1ZGlvICA9IDAsCi0JLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfUEFMLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkuaGFzX3JlbW90ZSAgICAgPSAxLCAgIC8qIG1pbmlyZW1vdGUgd29ya3MsIHNlZSBpci1rYmQtZ3Bpby5jICovCi0JLmhhc19yYWRpbyAgICAgID0gMSwgICAvKiBub3QgZXZlcnkgY2FyZCBoYXMgcmFkaW8gKi8KLX0sewotCi0JLyogLS0tLSBjYXJkIDB4ODAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCS8qIENocmlzIFBhc2NvZSA8Yy5wYXNjb2VAaXRlZS51cS5lZHUuYXU+ICovCi0JLm5hbWUgICAgICAgICAgID0gIkRWaUNPIEZ1c2lvbkhEVFYgRFZCLVQgTGl0ZSIsCi0JLnR1bmVyICAgICAgICAgID0gLTEsCi0JLm5vX21zcDM0eHggICAgID0gMSwKLQkubm9fdGRhOTg3NSAgICAgPSAxLAotCS5ub190ZGE3NDMyICAgICA9IDEsCi0JLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCS5ub192aWRlbyAgICAgICA9IDEsCi0JLmhhc19kdmIgICAgICAgID0gMSwKLQkudHVuZXJfdHlwZSAgICAgPSAtMSwKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi19LHsKLQkvKiBTdGV2ZW4gPHBob3RvbjM4QHBjaG9tZS5jb20udHc+ICovCi0JLm5hbWUgICAgICAgICAgID0gIlYtR2VhciBNeVZDRCIsCi0JLnZpZGVvX2lucHV0cyAgID0gMywKLQkuYXVkaW9faW5wdXRzICAgPSAxLAotCS50dW5lciAgICAgICAgICA9IDAsCi0JLnN2aHMgICAgICAgICAgID0gMiwKLQkuZ3Bpb21hc2sgICAgICAgPSAweDNmLAotCS5tdXhzZWwgICAgICAgICA9IHsyLCAzLCAxLCAwfSwKLQkuYXVkaW9tdXggICAgICAgPSB7MHgzMSwgMHgzMSwgMHgzMSwgMHgzMSwgMHgzMSwgMHgzMX0sCi0JLm5vX21zcDM0eHggICAgID0gMSwKLQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19OVFNDX00sCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCS5oYXNfcmFkaW8gICAgICA9IDAsCi19LHsKLQkvKiBSaWNrIEMgPGNyeXB0ZHJhZ29vbkBnbWFpbC5jb20+ICovCi0JLm5hbWUgICAgICAgICAgID0gIlN1cGVyIFRWIFR1bmVyIiwKLQkudmlkZW9faW5wdXRzICAgPSA0LAotCS5hdWRpb19pbnB1dHMgICA9IDEsCi0JLnR1bmVyICAgICAgICAgID0gMCwKLQkuc3ZocyAgICAgICAgICAgPSAyLAotCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMH0sCi0JLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19OVFNDLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkuZ3Bpb21hc2sgICAgICAgPSAweDAwODAwNywKLQkuYXVkaW9tdXggICAgICAgPSB7IDAsIDB4MDAwMDAxLDAsMCwgMH0sCi0JLm5lZWRzX3R2YXVkaW8gID0gMSwKLQkuaGFzX3JhZGlvICAgICAgPSAxLAotfSx7Ci0JLyogQ2hyaXMgRmFubmluZyA8dmlkZW80bGludXhAaGF5ZG9uLm5ldD4gKi8KLQkubmFtZSAgICAgICAgICAgPSAiVGliZXQgU3lzdGVtcyAnUHJvZ3Jlc3MgRFZSJyBDUzE2IiwKLQkudmlkZW9faW5wdXRzICAgPSAxNiwKLQkuYXVkaW9faW5wdXRzICAgPSAwLAotCS50dW5lciAgICAgICAgICA9IC0xLAotCS5zdmhzICAgICAgICAgICA9IC0xLAotCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiB9LAotCS5wbGwJCT0gUExMXzI4LAotCS5ub19tc3AzNHh4ICAgICA9IDEsCi0JLm5vX3RkYTk4NzUgICAgID0gMSwKLQkubm9fdGRhNzQzMgk9IDEsCi0JLnR1bmVyX3R5cGUgICAgID0gLTEsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCS5tdXhzZWxfaG9vayAgICA9IHRpYmV0Q1MxNl9tdXhzZWwsCi19LAotewotCS8qIEJpbGwgQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPiAqLwotCS8qCi0JKiBOb3RlIHRoYXQsIGJlY2F1c2Ugb2YgdGhlIGNhcmQncyB3aXJpbmcsIHRoZSAibWFzdGVyIgotCSogQlQ4NzhBIGNoaXAgKGkuZS4gdGhlIG9uZSB3aGljaCBjb250cm9scyB0aGUgYW5hbG9nIHN3aXRjaAotCSogYW5kIG11c3QgdXNlIHRoaXMgY2FyZCB0eXBlKSBpcyB0aGUgMm5kIG9uZSBkZXRlY3RlZC4gIFRoZQotCSogb3RoZXIgMyBjaGlwcyBzaG91bGQgdXNlIGNhcmQgdHlwZSAweDg1LCB3aG9zZSBkZXNjcmlwdGlvbgotCSogZm9sbG93cyB0aGlzIG9uZS4gIFRoZXJlIGlzIGEgRUVQUk9NIG9uIHRoZSBjYXJkICh3aGljaCBpcwotCSogY29ubmVjdGVkIHRvIHRoZSBJMkMgb2Ygb25lIG9mIHRob3NlIG90aGVyIGNoaXBzKSwgYnV0IGlzCi0JKiBub3QgY3VycmVudGx5IGhhbmRsZWQuICBUaGVyZSBpcyBhbHNvIGEgZmFjaWxpdHkgZm9yIGEKLQkqICJtb25pdG9yIiwgd2hpY2ggaXMgYWxzbyBub3QgY3VycmVudGx5IGltcGxlbWVudGVkLgotCSovCi0JLm5hbWUgICAgICAgICAgID0gIktvZGljb20gNDQwMFIgKG1hc3RlcikiLAotCS52aWRlb19pbnB1dHMJPSAxNiwKLQkuYXVkaW9faW5wdXRzCT0gMCwKLQkudHVuZXIJCT0gLTEsCi0JLnR1bmVyX3R5cGUJPSAtMSwKLQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JLnN2aHMJCT0gLTEsCi0JLyogR1BJTyBiaXRzIDAtOSB1c2VkIGZvciBhbmFsb2cgc3dpdGNoOgotCSogICAwMCAtIDAzOgljYW1lcmEgc2VsZWN0b3IKLQkqICAgMDQgLSAwNjoJY2hhbm5lbCAoY29udHJvbGxlcikgc2VsZWN0b3IKLQkqICAgMDc6CWRhdGEgKDEtPm9uLCAwLT5vZmYpCi0JKiAgIDA4OglzdHJvYmUKLQkqICAgMDk6CXJlc2V0Ci0JKiBiaXQgMTYgaXMgaW5wdXQgZnJvbSBzeW5jIHNlcGFyYXRvciBmb3IgdGhlIGNoYW5uZWwKLQkqLwotCS5ncGlvbWFzawk9IDB4MDAwM2ZmLAotCS5ub19ncGlvaXJxICAgICA9IDEsCi0JLm11eHNlbAkJPSB7IDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMgfSwKLQkucGxsCQk9IFBMTF8yOCwKLQkubm9fbXNwMzR4eAk9IDEsCi0JLm5vX3RkYTc0MzIJPSAxLAotCS5ub190ZGE5ODc1CT0gMSwKLQkubXV4c2VsX2hvb2sJPSBrb2RpY29tNDQwMHJfbXV4c2VsLAotfSwKLXsKLQkvKiBCaWxsIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4gKi8KLQkvKiBOb3RlIHRoYXQsIGZvciByZWFzb25zIHVua25vd24sIHRoZSAibWFzdGVyIiBCVDg3OEEgY2hpcCAoaS5lLiB0aGUKLQkqIG9uZSB3aGljaCBjb250cm9scyB0aGUgYW5hbG9nIHN3aXRjaCwgYW5kIG11c3QgdXNlIHRoZSBjYXJkIHR5cGUpCi0JKiBpcyB0aGUgMm5kIG9uZSBkZXRlY3RlZC4gIFRoZSBvdGhlciAzIGNoaXBzIHNob3VsZCB1c2UgdGhpcyBjYXJkCi0JKiB0eXBlCi0JKi8KLQkubmFtZQkJPSAiS29kaWNvbSA0NDAwUiAoc2xhdmUpIiwKLQkudmlkZW9faW5wdXRzCT0gMTYsCi0JLmF1ZGlvX2lucHV0cwk9IDAsCi0JLnR1bmVyCQk9IC0xLAotCS50dW5lcl90eXBlCT0gLTEsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCS5zdmhzCQk9IC0xLAotCS5ncGlvbWFzawk9IDB4MDEwMDAwLAotCS5ub19ncGlvaXJxICAgICA9IDEsCi0JLm11eHNlbAkJPSB7IDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMgfSwKLQkucGxsCQk9IFBMTF8yOCwKLQkubm9fbXNwMzR4eAk9IDEsCi0JLm5vX3RkYTc0MzIJPSAxLAotCS5ub190ZGE5ODc1CT0gMSwKLQkubXV4c2VsX2hvb2sJPSBrb2RpY29tNDQwMHJfbXV4c2VsLAotfSwKLXsKLQkvKiAtLS0tIGNhcmQgMHg4Ni0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQkvKiBNaWNoYWVsIEhlbnNvbiA8bWhlbnNvbkBjbGFyaXR5dmkuY29tPiAqLwotCS8qIEFkbGluayBSVFYyNCB3aXRoIHNwZWNpYWwgdW5sb2NrIGNvZGVzICovCi0JLm5hbWUgICAgICAgICAgID0gIkFkbGluayBSVFYyNCIsCi0JLnZpZGVvX2lucHV0cyAgID0gNCwKLQkuYXVkaW9faW5wdXRzICAgPSAxLAotCS50dW5lciAgICAgICAgICA9IDAsCi0JLnN2aHMgICAgICAgICAgID0gMiwKLQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDB9LAotCS50dW5lcl90eXBlICAgICA9IC0xLAotCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi19LAotewotCS8qIC0tLS0gY2FyZCAweDg3LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCS8qIE1pY2hhZWwgS3J1Zmt5IDxta3J1Zmt5QG0xay5uZXQ+ICovCi0JLm5hbWUgICAgICAgICAgID0gIkRWaUNPIEZ1c2lvbkhEVFYgNSBMaXRlIiwKLQkudHVuZXIgICAgICAgICAgPSAwLAotCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0xHX1REVlNfSDA2MkYsCi0JLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCS52aWRlb19pbnB1dHMgICA9IDMsCi0JLmF1ZGlvX2lucHV0cyAgID0gMSwKLQkuc3ZocyAgICAgICAgICAgPSAyLAotCS5tdXhzZWwJCT0geyAyLCAzLCAxIH0sCi0JLmdwaW9tYXNrICAgICAgID0gMHgwMGUwMDAwNywKLQkuYXVkaW9tdXggICAgICAgPSB7IDB4MDA0MDAwMDUsIDAsIDB4MDAwMDAwMDEsIDAsIDB4MDBjMDAwMDcsIDAgfSwKLQkubm9fbXNwMzR4eCAgICAgPSAxLAotCS5ub190ZGE5ODc1ICAgICA9IDEsCi0JLm5vX3RkYTc0MzIgICAgID0gMSwKLX0sewotCS8qIC0tLS0gY2FyZCAweDg4LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCS8qIE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkBicnR1cmJvLmNvbS5icj4gKi8KLQkubmFtZQkJPSAiQWNvcnAgWTg3OEYiLAotCS52aWRlb19pbnB1dHMJPSAzLAotCS5hdWRpb19pbnB1dHMJPSAxLAotCS50dW5lcgkJPSAwLAotCS5zdmhzCQk9IDIsCi0JLmdwaW9tYXNrCT0gMHgwMWZlMDAsCi0JLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LAotCS5hdWRpb211eCAgICAgICA9IHsgMHgwMDFlMDAsIDAsIDB4MDE4MDAwLCAweDAxNDAwMCwgMHgwMDIwMDAsIDAgfSwKLQkubmVlZHNfdHZhdWRpbwk9IDEsCi0JLnBsbAkJPSBQTExfMjgsCi0JLnR1bmVyX3R5cGUJPSBUVU5FUl9ZTUVDX1RWRjY2VDVfQl9ERkYsCi0JLnR1bmVyX2FkZHIJPSAweGMxID4+MSwKLQkuaGFzX3JhZGlvCT0gMSwKLX19OworfTsKIAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBidHR2X251bV90dmNhcmRzID0gQVJSQVlfU0laRShidHR2X3R2Y2FyZHMpOwogCkBAIC0yNDYxLDcgKzI4NDAsNyBAQAogCQkJICAgICAgIGJ0di0+Yy5uciwgYnR2LT5jYXJkaWQgJiAweGZmZmYsCiAJCQkgICAgICAgKGJ0di0+Y2FyZGlkID4+IDE2KSAmIDB4ZmZmZik7CiAJCQlwcmludGsoS0VSTl9ERUJVRyAicGxlYXNlIG1haWwgaWQsIGJvYXJkIG5hbWUgYW5kICIKLQkJCSAgICAgICAidGhlIGNvcnJlY3QgY2FyZD0gaW5zbW9kIG9wdGlvbiB0byBrcmF4ZWxAYnl0ZXNleC5vcmdcbiIpOworCQkJICAgICAgICJ0aGUgY29ycmVjdCBjYXJkPSBpbnNtb2Qgb3B0aW9uIHRvIHZpZGVvNGxpbnV4LWxpc3RAcmVkaGF0LmNvbVxuIik7CiAJCX0KIAl9CiAKQEAgLTI1MTAsMTEgKzI4ODksMTEgQEAKIAlpbnQgdHlwZSA9IC0xOwogCiAJaWYgKDAgPT0gc3RybmNtcChlZXByb21fZGF0YSwiR0VUIE1NMjB4UENUViIsMTMpKQotCQl0eXBlID0gQlRUVl9NT0RURUNfMjA1OworCQl0eXBlID0gQlRUVl9CT0FSRF9NT0RURUNfMjA1OwogCWVsc2UgaWYgKDAgPT0gc3RybmNtcChlZXByb21fZGF0YSsyMCwiUGljb2xvIiw3KSkKLQkJdHlwZSA9IEJUVFZfRVVSRVNZU19QSUNPTE87CisJCXR5cGUgPSBCVFRWX0JPQVJEX0VVUkVTWVNfUElDT0xPOwogCWVsc2UgaWYgKGVlcHJvbV9kYXRhWzBdID09IDB4ODQgJiYgZWVwcm9tX2RhdGFbMl09PSAwKQotICAgICAgICAgICAgICAgIHR5cGUgPSBCVFRWX0hBVVBQQVVHRTsgLyogb2xkIGJ0ODQ4ICovCisJCXR5cGUgPSBCVFRWX0JPQVJEX0hBVVBQQVVHRTsgLyogb2xkIGJ0ODQ4ICovCiAKIAlpZiAoLTEgIT0gdHlwZSkgewogCQlidHYtPmMudHlwZSA9IHR5cGU7CkBAIC0yNTQ4LDcgKzI5MjcsNyBAQAogCXN3aXRjaCh0dHlwZSkgewogCWNhc2UgMHgwOiB0dW5lcj0yOyAvKiBOVFNDLCBlLmcuIFRQSThOU1IxMVAgKi8KIAkJYnJlYWs7Ci0gICAgICAgIGNhc2UgMHgyOiB0dW5lcj0zOTsvKiBMRyBOVFNDIChuZXdlciBUQVBDIHNlcmllcykgVEFQQy1INzAxUCAqLworCWNhc2UgMHgyOiB0dW5lcj0zOTsvKiBMRyBOVFNDIChuZXdlciBUQVBDIHNlcmllcykgVEFQQy1INzAxUCAqLwogCQlicmVhazsKIAljYXNlIDB4NDogdHVuZXI9NTsgLyogUGhpbGlwcyBQQUwgVFBJOFBTQjAyUCwgVFBJOFBTQjEyUCwgVFBJOFBTQjEyRCBvciBGSTEyMTYsIEZNMTIxNiAqLwogCQlicmVhazsKQEAgLTI1NjQsNyArMjk0Myw3IEBACiAJaGFzX3JhZGlvCSAgICA9ICAgZ3BpbyAmIDB4NDAwMDAwOwogCS8qICAgdW5rbm93biAgICAgICAgICAgICAgICAgICAweDIwMDAwMDsKIAkgKiAgIHVua25vd24yICAgICAgICAgICAgICAgICAgMHgxMDAwMDA7ICovCi0gICAgICAgIGlzX2NhcHR1cmVfb25seSAgICAgPSAhKGdwaW8gJiAweDAwODAwMCk7IC8qIEdQSU8xNSAqLworCWlzX2NhcHR1cmVfb25seSAgICAgPSAhKGdwaW8gJiAweDAwODAwMCk7IC8qIEdQSU8xNSAqLwogCWhhc190ZGE5ODIwX3RkYTk4MjEgPSAhKGdwaW8gJiAweDAwNDAwMCk7CiAJaXNfbHI5MCAgICAgICAgICAgICA9ICEoZ3BpbyAmIDB4MDAyMDAwKTsgLyogZWxzZSBMUjI2L0xSNTAgKExSMzgvTFI1MSBmLiBjYXB0dXJlIG9ubHkpICovCiAJLyoKQEAgLTI2MDEsNyArMjk4MCw3IEBACiAJY2hhciAqaW5mbzsKIAogCWdwaW9faW5vdXQoMHhmZmZmZmYsIDApOwotICAgICAgICBncGlvID0gZ3Bpb19yZWFkKCk7CisJZ3BpbyA9IGdwaW9fcmVhZCgpOwogCWlkICAgPSAoKGdwaW8+PjEwKSAmIDYzKSAtMTsKIAltc3AgID0gYnR0dl9JMkNSZWFkKGJ0diwgSTJDX01TUDM0MDAsICJNU1AzNHh4Iik7CiAJaWYgKGlkIDwgMzIpIHsKQEAgLTI2MjAsMTAgKzI5OTksMTAgQEAKIAkJCWJ0di0+aGFzX3JhZGlvID0gMDsKIAkJfQogCQlpZiAoLTEgIT0gbXNwKSB7Ci0JCQlpZiAoYnR2LT5jLnR5cGUgPT0gQlRUVl9NSVJPKQotCQkJCWJ0di0+Yy50eXBlID0gQlRUVl9NSVJPUFJPOwotCQkJaWYgKGJ0di0+Yy50eXBlID09IEJUVFZfUElOTkFDTEUpCi0JCQkJYnR2LT5jLnR5cGUgPSBCVFRWX1BJTk5BQ0xFUFJPOworCQkJaWYgKGJ0di0+Yy50eXBlID09IEJUVFZfQk9BUkRfTUlSTykKKwkJCQlidHYtPmMudHlwZSA9IEJUVFZfQk9BUkRfTUlST1BSTzsKKwkJCWlmIChidHYtPmMudHlwZSA9PSBCVFRWX0JPQVJEX1BJTk5BQ0xFKQorCQkJCWJ0di0+Yy50eXBlID0gQlRUVl9CT0FSRF9QSU5OQUNMRVBSTzsKIAkJfQogCQlwcmludGsoS0VSTl9JTkZPCiAJCSAgICAgICAiYnR0diVkOiBtaXJvOiBpZD0lZCB0dW5lcj0lZCByYWRpbz0lcyBzdGVyZW89JXNcbiIsCkBAIC0yNjY0LDcgKzMwNDMsNyBAQAogCQkJYnJlYWs7CiAJCX0KIAkJaWYgKC0xICE9IG1zcCkKLQkJCWJ0di0+Yy50eXBlID0gQlRUVl9QSU5OQUNMRVBSTzsKKwkJCWJ0di0+Yy50eXBlID0gQlRUVl9CT0FSRF9QSU5OQUNMRVBSTzsKIAkJcHJpbnRrKEtFUk5fSU5GTwogCQkgICAgICAgImJ0dHYlZDogcGlubmFjbGUvbXQ6IGlkPSVkIGluZm89XCIlc1wiIHJhZGlvPSVzXG4iLAogCQkgICAgICAgYnR2LT5jLm5yLCBpZCwgaW5mbywgYnR2LT5oYXNfcmFkaW8gPyAieWVzIiA6ICJubyIpOwpAQCAtMjcxMiw3ICszMDkxLDcgQEAKIAogc3RhdGljIHZvaWQgZ3ZjMTEwMF9tdXhzZWwoc3RydWN0IGJ0dHYgKmJ0diwgdW5zaWduZWQgaW50IGlucHV0KQogewotICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1hc2tzW10gPSB7MHgzMCwgMHgwMSwgMHgxMiwgMHgyM307CisJc3RhdGljIGNvbnN0IGludCBtYXNrc1tdID0gezB4MzAsIDB4MDEsIDB4MTIsIDB4MjN9OwogCWdwaW9fd3JpdGUobWFza3NbaW5wdXQlNF0pOwogfQogCkBAIC0yNzc4LDI2ICszMTU3LDI3IEBACiB2b2lkIF9fZGV2aW5pdCBidHR2X2luaXRfY2FyZDEoc3RydWN0IGJ0dHYgKmJ0dikKIHsKIAlzd2l0Y2ggKGJ0di0+Yy50eXBlKSB7Ci0JY2FzZSBCVFRWX0hBVVBQQVVHRToKLQljYXNlIEJUVFZfSEFVUFBBVUdFODc4OgotICAgICAgICAgICAgICAgIGJvb3RfbXNwMzR4eChidHYsNSk7CisJY2FzZSBCVFRWX0JPQVJEX0hBVVBQQVVHRToKKwljYXNlIEJUVFZfQk9BUkRfSEFVUFBBVUdFODc4OgorCQlib290X21zcDM0eHgoYnR2LDUpOwogCQlicmVhazsKLQljYXNlIEJUVFZfVk9PRE9PVFZfRk06Ci0gICAgICAgICAgICAgICAgYm9vdF9tc3AzNHh4KGJ0diwyMCk7CisJY2FzZSBCVFRWX0JPQVJEX1ZPT0RPT1RWX0ZNOgorCQlib290X21zcDM0eHgoYnR2LDIwKTsKIAkJYnJlYWs7Ci0JY2FzZSBCVFRWX0FWRVJNRURJQTk4OgorCWNhc2UgQlRUVl9CT0FSRF9BVkVSTUVESUE5ODoKIAkJYm9vdF9tc3AzNHh4KGJ0diwxMSk7CiAJCWJyZWFrOwotCWNhc2UgQlRUVl9IQVVQUEFVR0VQVlI6CisJY2FzZSBCVFRWX0JPQVJEX0hBVVBQQVVHRVBWUjoKIAkJcHZyX2Jvb3QoYnR2KTsKIAkJYnJlYWs7Ci0JY2FzZSBCVFRWX1RXSU5IQU5fRFNUOgotCWNhc2UgQlRUVl9BVkRWQlRfNzcxOgorCWNhc2UgQlRUVl9CT0FSRF9UV0lOSEFOX0RTVDoKKwljYXNlIEJUVFZfQk9BUkRfQVZEVkJUXzc3MToKKwljYXNlIEJUVFZfQk9BUkRfUElOTkFDTEVTQVQ6CiAJCWJ0di0+dXNlX2kyY19odyA9IDE7CiAJCWJyZWFrOwotICAgICAgICBjYXNlIEJUVFZfQURMSU5LX1JUVjI0OgotICAgICAgICAgICAgICAgIGluaXRfUlRWMjQoIGJ0diApOwotICAgICAgICAgICAgICAgIGJyZWFrOworCWNhc2UgQlRUVl9CT0FSRF9BRExJTktfUlRWMjQ6CisJCWluaXRfUlRWMjQoIGJ0diApOworCQlicmVhazsKIAogCX0KIAlpZiAoIWJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0uaGFzX2R2YikKQEAgLTI4MTAsNTMgKzMxOTAsNTMgQEAKIAlpbnQgdGRhOTg4NzsKIAlpbnQgYWRkcj1BRERSX1VOU0VUOwogCi0gICAgICAgIGJ0di0+dHVuZXJfdHlwZSA9IC0xOworCWJ0di0+dHVuZXJfdHlwZSA9IC0xOwogCi0JaWYgKEJUVFZfVU5LTk9XTiA9PSBidHYtPmMudHlwZSkgeworCWlmIChCVFRWX0JPQVJEX1VOS05PV04gPT0gYnR2LT5jLnR5cGUpIHsKIAkJYnR0dl9yZWFkZWUoYnR2LGVlcHJvbV9kYXRhLDB4YTApOwogCQlpZGVudGlmeV9ieV9lZXByb20oYnR2LGVlcHJvbV9kYXRhKTsKIAl9CiAKIAlzd2l0Y2ggKGJ0di0+Yy50eXBlKSB7Ci0JY2FzZSBCVFRWX01JUk86Ci0JY2FzZSBCVFRWX01JUk9QUk86Ci0JY2FzZSBCVFRWX1BJTk5BQ0xFOgotCWNhc2UgQlRUVl9QSU5OQUNMRVBSTzoKKwljYXNlIEJUVFZfQk9BUkRfTUlSTzoKKwljYXNlIEJUVFZfQk9BUkRfTUlST1BSTzoKKwljYXNlIEJUVFZfQk9BUkRfUElOTkFDTEU6CisJY2FzZSBCVFRWX0JPQVJEX1BJTk5BQ0xFUFJPOgogCQkvKiBtaXJvL3Bpbm5hY2xlICovCiAJCW1pcm9fcGlubmFjbGVfZ3BpbyhidHYpOwogCQlicmVhazsKLQljYXNlIEJUVFZfRkxZVklERU9fOTg6Ci0JY2FzZSBCVFRWX01BWEk6Ci0JY2FzZSBCVFRWX0xJRkVfRkxZS0lUOgotCWNhc2UgQlRUVl9GTFlWSURFTzoKLQljYXNlIEJUVFZfVFlQSE9PTl9UVklFVzoKLQljYXNlIEJUVFZfQ0hST05PU19WUzI6Ci0JY2FzZSBCVFRWX0ZMWVZJREVPXzk4Rk06Ci0JY2FzZSBCVFRWX0ZMWVZJREVPMjAwMDoKLQljYXNlIEJUVFZfRkxZVklERU85OEVaOgotCWNhc2UgQlRUVl9DT05GRVJFTkNFVFY6Ci0JY2FzZSBCVFRWX0xJRkVURUNfOTQxNToKKwljYXNlIEJUVFZfQk9BUkRfRkxZVklERU9fOTg6CisJY2FzZSBCVFRWX0JPQVJEX01BWEk6CisJY2FzZSBCVFRWX0JPQVJEX0xJRkVfRkxZS0lUOgorCWNhc2UgQlRUVl9CT0FSRF9GTFlWSURFTzoKKwljYXNlIEJUVFZfQk9BUkRfVFlQSE9PTl9UVklFVzoKKwljYXNlIEJUVFZfQk9BUkRfQ0hST05PU19WUzI6CisJY2FzZSBCVFRWX0JPQVJEX0ZMWVZJREVPXzk4Rk06CisJY2FzZSBCVFRWX0JPQVJEX0ZMWVZJREVPMjAwMDoKKwljYXNlIEJUVFZfQk9BUkRfRkxZVklERU85OEVaOgorCWNhc2UgQlRUVl9CT0FSRF9DT05GRVJFTkNFVFY6CisJY2FzZSBCVFRWX0JPQVJEX0xJRkVURUNfOTQxNToKIAkJZmx5dmlkZW9fZ3BpbyhidHYpOwogCQlicmVhazsKLQljYXNlIEJUVFZfSEFVUFBBVUdFOgotCWNhc2UgQlRUVl9IQVVQUEFVR0U4Nzg6Ci0JY2FzZSBCVFRWX0hBVVBQQVVHRVBWUjoKKwljYXNlIEJUVFZfQk9BUkRfSEFVUFBBVUdFOgorCWNhc2UgQlRUVl9CT0FSRF9IQVVQUEFVR0U4Nzg6CisJY2FzZSBCVFRWX0JPQVJEX0hBVVBQQVVHRVBWUjoKIAkJLyogcGljayB1cCBzb21lIGNvbmZpZyBpbmZvcyBmcm9tIHRoZSBlZXByb20gKi8KIAkJYnR0dl9yZWFkZWUoYnR2LGVlcHJvbV9kYXRhLDB4YTApOwotICAgICAgICAgICAgICAgIGhhdXBwYXVnZV9lZXByb20oYnR2KTsKKwkJaGF1cHBhdWdlX2VlcHJvbShidHYpOwogCQlicmVhazsKLQljYXNlIEJUVFZfQVZFUk1FRElBOTg6Ci0JY2FzZSBCVFRWX0FWUEhPTkU5ODoKKwljYXNlIEJUVFZfQk9BUkRfQVZFUk1FRElBOTg6CisJY2FzZSBCVFRWX0JPQVJEX0FWUEhPTkU5ODoKIAkJYnR0dl9yZWFkZWUoYnR2LGVlcHJvbV9kYXRhLDB4YTApOwogCQlhdmVybWVkaWFfZWVwcm9tKGJ0dik7CiAJCWJyZWFrOwotCWNhc2UgQlRUVl9QWEMyMDA6CisJY2FzZSBCVFRWX0JPQVJEX1BYQzIwMDoKIAkJaW5pdF9QWEMyMDAoYnR2KTsKIAkJYnJlYWs7Ci0JY2FzZSBCVFRWX1BJQ09MT19URVRSQV9DSElQOgorCWNhc2UgQlRUVl9CT0FSRF9QSUNPTE9fVEVUUkFfQ0hJUDoKIAkJcGljb2xvX3RldHJhX2luaXQoYnR2KTsKIAkJYnJlYWs7Ci0JY2FzZSBCVFRWX1ZIWDoKKwljYXNlIEJUVFZfQk9BUkRfVkhYOgogCQlidHYtPmhhc19yYWRpbyAgICA9IDE7CiAJCWJ0di0+aGFzX21hdGNoYm94ID0gMTsKIAkJYnR2LT5tYm94X3dlICAgICAgPSAweDIwOwpAQCAtMjg2NSw1OCArMzI0NSw1OCBAQAogCQlidHYtPm1ib3hfZGF0YSAgICA9IDB4MTA7CiAJCWJ0di0+bWJveF9tYXNrICAgID0gMHgzODsKIAkJYnJlYWs7Ci0JY2FzZSBCVFRWX1ZPQklTX0JPT1NUQVI6Ci0JY2FzZSBCVFRWX1RFUlJBVFY6CisJY2FzZSBCVFRWX0JPQVJEX1ZPQklTX0JPT1NUQVI6CisJY2FzZSBCVFRWX0JPQVJEX1RFUlJBVFY6CiAJCXRlcnJhdGVjX2FjdGl2ZV9yYWRpb191cGdyYWRlKGJ0dik7CiAJCWJyZWFrOwotCWNhc2UgQlRUVl9NQUdJQ1RWSUVXMDYxOgorCWNhc2UgQlRUVl9CT0FSRF9NQUdJQ1RWSUVXMDYxOgogCQlpZiAoYnR2LT5jYXJkaWQgPT0gMHgzMDAyMTQ0ZikgewogCQkJYnR2LT5oYXNfcmFkaW89MTsKIAkJCXByaW50aygiYnR0diVkOiByYWRpbyBkZXRlY3RlZCBieSBzdWJzeXN0ZW0gaWQgKENQSDA1eClcbiIsYnR2LT5jLm5yKTsKIAkJfQogCQlicmVhazsKLSAgICAgICBjYXNlIEJUVFZfU1RCMjoKLSAgICAgICAgICAgICAgICBpZiAoYnR2LT5jYXJkaWQgPT0gMHgzMDYwMTIxYSkgeworICAgICAgIGNhc2UgQlRUVl9CT0FSRF9TVEIyOgorCQlpZiAoYnR2LT5jYXJkaWQgPT0gMHgzMDYwMTIxYSkgewogCQkJLyogRml4IHVwIGVudHJ5IGZvciAzREZYIFZvb2Rvb1RWIDEwMCwKIAkJCSAgIHdoaWNoIGlzIGFuIE9FTSBTVEIgY2FyZCB2YXJpYW50LiAqLwogCQkJYnR2LT5oYXNfcmFkaW89MDsKIAkJCWJ0di0+dHVuZXJfdHlwZT1UVU5FUl9URU1JQ19OVFNDOwogCQl9CiAJCWJyZWFrOwotCWNhc2UgQlRUVl9PU1BSRVkxeDA6Ci0JY2FzZSBCVFRWX09TUFJFWTF4MF84NDg6Ci0JY2FzZSBCVFRWX09TUFJFWTEwMV84NDg6Ci0JY2FzZSBCVFRWX09TUFJFWTF4MToKLQljYXNlIEJUVFZfT1NQUkVZMXgxX1NWSUQ6Ci0JY2FzZSBCVFRWX09TUFJFWTJ4eDoKLQljYXNlIEJUVFZfT1NQUkVZMngwX1NWSUQ6Ci0JY2FzZSBCVFRWX09TUFJFWTJ4MDoKLQljYXNlIEJUVFZfT1NQUkVZNTAwOgotCWNhc2UgQlRUVl9PU1BSRVk1NDA6Ci0JY2FzZSBCVFRWX09TUFJFWTIwMDA6CisJY2FzZSBCVFRWX0JPQVJEX09TUFJFWTF4MDoKKwljYXNlIEJUVFZfQk9BUkRfT1NQUkVZMXgwXzg0ODoKKwljYXNlIEJUVFZfQk9BUkRfT1NQUkVZMTAxXzg0ODoKKwljYXNlIEJUVFZfQk9BUkRfT1NQUkVZMXgxOgorCWNhc2UgQlRUVl9CT0FSRF9PU1BSRVkxeDFfU1ZJRDoKKwljYXNlIEJUVFZfQk9BUkRfT1NQUkVZMnh4OgorCWNhc2UgQlRUVl9CT0FSRF9PU1BSRVkyeDBfU1ZJRDoKKwljYXNlIEJUVFZfQk9BUkRfT1NQUkVZMngwOgorCWNhc2UgQlRUVl9CT0FSRF9PU1BSRVk1MDA6CisJY2FzZSBCVFRWX0JPQVJEX09TUFJFWTU0MDoKKwljYXNlIEJUVFZfQk9BUkRfT1NQUkVZMjAwMDoKIAkJYnR0dl9yZWFkZWUoYnR2LGVlcHJvbV9kYXRhLDB4YTApOwotICAgICAgICAgICAgICAgIG9zcHJleV9lZXByb20oYnR2KTsKKwkJb3NwcmV5X2VlcHJvbShidHYpOwogCQlicmVhazsKLQljYXNlIEJUVFZfSURTX0VBR0xFOgorCWNhc2UgQlRUVl9CT0FSRF9JRFNfRUFHTEU6CiAJCWluaXRfaWRzX2VhZ2xlKGJ0dik7CiAJCWJyZWFrOwotCWNhc2UgQlRUVl9NT0RURUNfMjA1OgorCWNhc2UgQlRUVl9CT0FSRF9NT0RURUNfMjA1OgogCQlidHR2X3JlYWRlZShidHYsZWVwcm9tX2RhdGEsMHhhMCk7CiAJCW1vZHRlY19lZXByb20oYnR2KTsKIAkJYnJlYWs7Ci0JY2FzZSBCVFRWX0xNTEJUNDoKKwljYXNlIEJUVFZfQk9BUkRfTE1MQlQ0OgogCQlpbml0X2xtbGJ0NHgoYnR2KTsKIAkJYnJlYWs7Ci0JY2FzZSBCVFRWX1RJQkVUX0NTMTY6CisJY2FzZSBCVFRWX0JPQVJEX1RJQkVUX0NTMTY6CiAJCXRpYmV0Q1MxNl9pbml0KGJ0dik7CiAJCWJyZWFrOwotCWNhc2UgQlRUVl9LT0RJQ09NXzQ0MDBSOgorCWNhc2UgQlRUVl9CT0FSRF9LT0RJQ09NXzQ0MDBSOgogCQlrb2RpY29tNDQwMHJfaW5pdChidHYpOwogCQlicmVhazsKIAl9CiAKIAkvKiBwbGwgY29uZmlndXJhdGlvbiAqLwotICAgICAgICBpZiAoIShidHYtPmlkPT04NDggJiYgYnR2LT5yZXZpc2lvbj09MHgxMSkpIHsKKwlpZiAoIShidHYtPmlkPT04NDggJiYgYnR2LT5yZXZpc2lvbj09MHgxMSkpIHsKIAkJLyogZGVmYXVsdHMgZnJvbSBjYXJkIGxpc3QgKi8KIAkJaWYgKFBMTF8yOCA9PSBidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLnBsbCkgewogCQkJYnR2LT5wbGwucGxsX2lmcmVxPTI4NjM2MzYzOwpAQCAtMjkyNywyNiArMzMwNywyNiBAQAogCQkJYnR2LT5wbGwucGxsX2NyeXN0YWw9QlQ4NDhfSUZPUk1fWFQxOwogCQl9CiAJCS8qIGluc21vZCBvcHRpb25zIGNhbiBvdmVycmlkZSAqLwotICAgICAgICAgICAgICAgIHN3aXRjaCAocGxsW2J0di0+Yy5ucl0pIHsKLSAgICAgICAgICAgICAgICBjYXNlIDA6IC8qIG5vbmUgKi8KKwkJc3dpdGNoIChwbGxbYnR2LT5jLm5yXSkgeworCQljYXNlIDA6IC8qIG5vbmUgKi8KIAkJCWJ0di0+cGxsLnBsbF9jcnlzdGFsID0gMDsKIAkJCWJ0di0+cGxsLnBsbF9pZnJlcSAgID0gMDsKIAkJCWJ0di0+cGxsLnBsbF9vZnJlcSAgID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgMTogLyogMjggTUh6ICovCisJCQlicmVhazsKKwkJY2FzZSAxOiAvKiAyOCBNSHogKi8KIAkJY2FzZSAyODoKLSAgICAgICAgICAgICAgICAgICAgICAgIGJ0di0+cGxsLnBsbF9pZnJlcSAgID0gMjg2MzYzNjM7CisJCQlidHYtPnBsbC5wbGxfaWZyZXEgICA9IDI4NjM2MzYzOwogCQkJYnR2LT5wbGwucGxsX29mcmVxICAgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgYnR2LT5wbGwucGxsX2NyeXN0YWwgPSBCVDg0OF9JRk9STV9YVDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIDI6IC8qIDM1IE1IeiAqLworCQkJYnR2LT5wbGwucGxsX2NyeXN0YWwgPSBCVDg0OF9JRk9STV9YVDA7CisJCQlicmVhazsKKwkJY2FzZSAyOiAvKiAzNSBNSHogKi8KIAkJY2FzZSAzNToKLSAgICAgICAgICAgICAgICAgICAgICAgIGJ0di0+cGxsLnBsbF9pZnJlcSAgID0gMzU0Njg5NTA7CisJCQlidHYtPnBsbC5wbGxfaWZyZXEgICA9IDM1NDY4OTUwOwogCQkJYnR2LT5wbGwucGxsX29mcmVxICAgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgYnR2LT5wbGwucGxsX2NyeXN0YWwgPSBCVDg0OF9JRk9STV9YVDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0KKwkJCWJ0di0+cGxsLnBsbF9jcnlzdGFsID0gQlQ4NDhfSUZPUk1fWFQxOworCQkJYnJlYWs7CisJCX0KKwl9CiAJYnR2LT5wbGwucGxsX2N1cnJlbnQgPSAtMTsKIAogCS8qIHR1bmVyIGNvbmZpZ3VyYXRpb24gKGZyb20gY2FyZCBsaXN0IC8gYXV0b2RldGVjdCAvIGluc21vZCBvcHRpb24pICovCkBAIC0yOTU1LDIzICszMzM1LDI2IEBACiAKIAlpZiAoVU5TRVQgIT0gYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS50dW5lcl90eXBlKQogCQlpZihVTlNFVCA9PSBidHYtPnR1bmVyX3R5cGUpCi0gICAgICAgIAkgICAgICAgCWJ0di0+dHVuZXJfdHlwZSA9IGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0udHVuZXJfdHlwZTsKKwkJCWJ0di0+dHVuZXJfdHlwZSA9IGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0udHVuZXJfdHlwZTsKIAlpZiAoVU5TRVQgIT0gdHVuZXJbYnR2LT5jLm5yXSkKIAkJYnR2LT50dW5lcl90eXBlID0gdHVuZXJbYnR2LT5jLm5yXTsKIAlwcmludGsoImJ0dHYlZDogdXNpbmcgdHVuZXI9JWRcbiIsYnR2LT5jLm5yLGJ0di0+dHVuZXJfdHlwZSk7Ci0JaWYgKGJ0di0+cGlubmFjbGVfaWQgIT0gVU5TRVQpCi0JCWJ0dHZfY2FsbF9pMmNfY2xpZW50cyhidHYsIEFVRENfQ09ORklHX1BJTk5BQ0xFLAotCQkJCSAgICAgICZidHYtPnBpbm5hY2xlX2lkKTsKLQlpZiAoYnR2LT50dW5lcl90eXBlICE9IFVOU0VUKSB7Ci0JICAgICAgICBzdHJ1Y3QgdHVuZXJfc2V0dXAgdHVuX3NldHVwOwogCi0JICAgICAgICB0dW5fc2V0dXAubW9kZV9tYXNrID0gVF9SQURJTyB8IFRfQU5BTE9HX1RWIHwgVF9ESUdJVEFMX1RWOworCWlmIChidHYtPnR1bmVyX3R5cGUgIT0gVU5TRVQpIHsKKwkJc3RydWN0IHR1bmVyX3NldHVwIHR1bl9zZXR1cDsKKworCQl0dW5fc2V0dXAubW9kZV9tYXNrID0gVF9BTkFMT0dfVFYgfCBUX0RJR0lUQUxfVFY7CiAJCXR1bl9zZXR1cC50eXBlID0gYnR2LT50dW5lcl90eXBlOwogCQl0dW5fc2V0dXAuYWRkciA9IGFkZHI7CiAKIAkJYnR0dl9jYWxsX2kyY19jbGllbnRzKGJ0diwgVFVORVJfU0VUX1RZUEVfQUREUiwgJnR1bl9zZXR1cCk7CiAJfQogCisJaWYgKGJ0di0+cGlubmFjbGVfaWQgIT0gVU5TRVQpIHsKKwkJYnR0dl9jYWxsX2kyY19jbGllbnRzKGJ0diwgQVVEQ19DT05GSUdfUElOTkFDTEUsCisJCQkJCQkJJmJ0di0+cGlubmFjbGVfaWQpOworCX0KKwogCWJ0di0+c3ZocyA9IGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0uc3ZoczsKIAlpZiAoc3Zoc1tidHYtPmMubnJdICE9IFVOU0VUKQogCQlidHYtPnN2aHMgPSBzdmhzW2J0di0+Yy5ucl07CkBAIC0yOTgyLDggKzMzNjUsOCBAQAogCQlidHYtPmhhc19yYWRpbz0xOwogCWlmIChidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLmhhc19yZW1vdGUpCiAJCWJ0di0+aGFzX3JlbW90ZT0xOwotCWlmIChidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLm5vX2dwaW9pcnEpCi0JCWJ0di0+Z3Bpb2lycT0wOworCWlmICghYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5ub19ncGlvaXJxKQorCQlidHYtPmdwaW9pcnE9MTsKIAlpZiAoYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5hdWRpb19ob29rKQogCQlidHYtPmF1ZGlvX2hvb2s9YnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5hdWRpb19ob29rOwogCkBAIC0zMDI0LDYgKzM0MDcsOSBAQAogCWlmICgwID09IHRkYTk4ODcgJiYgMCA9PSBidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLmhhc19kdmIgJiYKIAkgICAgYnR0dl9JMkNSZWFkKGJ0diwgSTJDX1REQTk4ODcsICJUREE5ODg3IikgPj0wKQogCQl0ZGE5ODg3ID0gMTsKKwkvKiBIeWJyaWQgRFZCIGNhcmQsIERPRVMgaGF2ZSBhIHRkYTk4ODcgKi8KKwlpZiAoYnR2LT5jLnR5cGUgPT0gQlRUVl9CT0FSRF9EVklDT19GVVNJT05IRFRWXzVfTElURSkKKwkJdGRhOTg4NyA9IDE7CiAJaWYoKGJ0di0+dHVuZXJfdHlwZSA9PSBUVU5FUl9QSElMSVBTX0ZNMTIxNk1FX01LMykgfHwKIAkgICAoYnR2LT50dW5lcl90eXBlID09IFRVTkVSX1BISUxJUFNfRk0xMjM2X01LMykgfHwKIAkgICAoYnR2LT50dW5lcl90eXBlID09IFRVTkVSX1BISUxJUFNfRk0xMjU2X0lIMykgfHwKQEAgLTMwNDUsMTEgKzM0MzEsMTEgQEAKIAl9IGVsc2UgaWYgKHN0cm5jbXAoJihlZXByb21fZGF0YVsweDFlXSksIkFscHMgVFNCQjUiLDEwKSA9PTApIHsKIAkJYnR2LT50dW5lcl90eXBlPVRVTkVSX0FMUFNfVFNCQjVfUEFMX0k7CiAJCXByaW50aygiYnR0diVkOiBNb2R0ZWM6IFR1bmVyIGF1dG9kZXRlY3RlZCBieSBlZXByb206ICVzXG4iLAotICAgICAgICAgICAgICAgICAgICAgICBidHYtPmMubnIsJmVlcHJvbV9kYXRhWzB4MWVdKTsKLSAgICAgICAgfSBlbHNlIGlmIChzdHJuY21wKCYoZWVwcm9tX2RhdGFbMHgxZV0pLCJQaGlsaXBzIEZNMTI0NiIsMTQpID09MCkgewotICAgICAgICAgICAgICAgIGJ0di0+dHVuZXJfdHlwZT1UVU5FUl9QSElMSVBTX05UU0M7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKCJidHR2JWQ6IE1vZHRlYzogVHVuZXIgYXV0b2RldGVjdGVkIGJ5IGVlcHJvbTogJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgIGJ0di0+Yy5uciwmZWVwcm9tX2RhdGFbMHgxZV0pOworCQkgICAgICAgYnR2LT5jLm5yLCZlZXByb21fZGF0YVsweDFlXSk7CisJfSBlbHNlIGlmIChzdHJuY21wKCYoZWVwcm9tX2RhdGFbMHgxZV0pLCJQaGlsaXBzIEZNMTI0NiIsMTQpID09MCkgeworCQlidHYtPnR1bmVyX3R5cGU9VFVORVJfUEhJTElQU19OVFNDOworCQlwcmludGsoImJ0dHYlZDogTW9kdGVjOiBUdW5lciBhdXRvZGV0ZWN0ZWQgYnkgZWVwcm9tOiAlc1xuIiwKKwkJICAgICAgIGJ0di0+Yy5uciwmZWVwcm9tX2RhdGFbMHgxZV0pOwogCX0gZWxzZSB7CiAJCXByaW50aygiYnR0diVkOiBNb2R0ZWM6IFVua25vd24gVHVuZXJTdHJpbmc6ICVzXG4iLAogCQkgICAgICAgYnR2LT5jLm5yLCZlZXByb21fZGF0YVsweDFlXSk7CkBAIC0zMTE0LDcgKzM1MDAsNyBAQAogc3RhdGljIGludCBfX2RldmluaXQgcHZyX2FsdGVyYV9sb2FkKHN0cnVjdCBidHR2ICpidHYsIHU4ICptaWNybywgdTMyIG1pY3JvbGVuKQogewogCXUzMiBuOwotICAJdTggYml0czsKKwl1OCBiaXRzOwogCWludCBpOwogCiAJZ3Bpb19pbm91dCgweGZmZmZmZixCVFRWX0FMVF9EQVRBfEJUVFZfQUxUX0RDTEt8QlRUVl9BTFRfTkNPTkZJRyk7CkBAIC0zMTUwLDE5ICszNTM2LDE5IEBACiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHB2cl9ib290KHN0cnVjdCBidHR2ICpidHYpCiB7Ci0gICAgICAgIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZndfZW50cnk7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmd19lbnRyeTsKIAlpbnQgcmM7CiAKIAlyYyA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3X2VudHJ5LCAiaGN3YW1jLnJiZiIsICZidHYtPmMucGNpLT5kZXYpOwogCWlmIChyYyAhPSAwKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImJ0dHYlZDogbm8gYWx0ZXJhIGZpcm13YXJlIFt2aWEgaG90cGx1Z11cbiIsCiAJCSAgICAgICBidHYtPmMubnIpOwotICAgICAgICAgICAgICAgIHJldHVybiByYzsKLSAgICAgICAgfQorCQlyZXR1cm4gcmM7CisJfQogCXJjID0gcHZyX2FsdGVyYV9sb2FkKGJ0diwgZndfZW50cnktPmRhdGEsIGZ3X2VudHJ5LT5zaXplKTsKIAlwcmludGsoS0VSTl9JTkZPICJidHR2JWQ6IGFsdGVyYSBmaXJtd2FyZSB1cGxvYWQgJXNcbiIsCiAJICAgICAgIGJ0di0+Yy5uciwgKHJjIDwgMCkgPyAiZmFpbGVkIiA6ICJvayIpOwotICAgICAgICByZWxlYXNlX2Zpcm13YXJlKGZ3X2VudHJ5KTsKKwlyZWxlYXNlX2Zpcm13YXJlKGZ3X2VudHJ5KTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTMxNzYsMzMgKzM1NjIsMzMgQEAKICAgICAgICB1bnNpZ25lZCBsb25nIHNlcmlhbCA9IDA7CiAKICAgICAgICBpZiAoYnR2LT5jLnR5cGUgPT0gMCkgewotICAgICAgICAgICAgICAgLyogdGhpcyBtaWdodCBiZSBhbiBhbnRpcXVlLi4uIGNoZWNrIGZvciBNTUFDIGxhYmVsIGluIGVlcHJvbSAqLwotICAgICAgICAgICAgICAgaWYgKChlZVswXT09J00nKSAmJiAoZWVbMV09PSdNJykgJiYgKGVlWzJdPT0nQScpICYmIChlZVszXT09J0MnKSkgewotICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGNoZWNrc3VtID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0wOyBpPDIxOyBpKyspCisJICAgICAgIC8qIHRoaXMgbWlnaHQgYmUgYW4gYW50aXF1ZS4uLiBjaGVjayBmb3IgTU1BQyBsYWJlbCBpbiBlZXByb20gKi8KKwkgICAgICAgaWYgKChlZVswXT09J00nKSAmJiAoZWVbMV09PSdNJykgJiYgKGVlWzJdPT0nQScpICYmIChlZVszXT09J0MnKSkgeworCQkgICAgICAgdW5zaWduZWQgY2hhciBjaGVja3N1bSA9IDA7CisJCSAgICAgICBmb3IgKGkgPTA7IGk8MjE7IGkrKykKIAkJCSAgICAgICBjaGVja3N1bSArPSBlZVtpXTsKLSAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoZWNrc3VtICE9IGVlWzIxXSkKKwkJICAgICAgIGlmIChjaGVja3N1bSAhPSBlZVsyMV0pCiAJCQkgICAgICAgcmV0dXJuOwotCQkgICAgICAgYnR2LT5jLnR5cGUgPSBCVFRWX09TUFJFWTF4MF84NDg7CisJCSAgICAgICBidHYtPmMudHlwZSA9IEJUVFZfQk9BUkRfT1NQUkVZMXgwXzg0ODsKIAkJICAgICAgIGZvciAoaSA9IDEyOyBpIDwgMjE7IGkrKykKIAkJCSAgICAgICBzZXJpYWwgKj0gMTAsIHNlcmlhbCArPSBlZVtpXSAtICcwJzsKLSAgICAgICAgICAgICAgIH0KKwkgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAJICAgICAgIHVuc2lnbmVkIHNob3J0IHR5cGU7Ci0gICAgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gNCoxNjsKKwkgICAgICAgaW50IG9mZnNldCA9IDQqMTY7CiAKLSAgICAgICAgICAgICAgIGZvcig7IG9mZnNldCA8IDgqMTY7IG9mZnNldCArPSAxNikgewotICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBjaGVja3N1bSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgIC8qIHZlcmlmeSB0aGUgY2hlY2tzdW0gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgZm9yKGkgPSAwOyBpPDE0OyBpKyspIGNoZWNrc3VtICs9IGVlW2krb2Zmc2V0XTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja3N1bSA9IH5jaGVja3N1bTsgIC8qIG5vIGlkZWEgd2h5ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgoKGNoZWNrc3VtPj44KSYweDBGRikgPT0gZWVbb2Zmc2V0KzE0XSkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjaGVja3N1bSAmIDB4MEZGKSA9PSBlZVtvZmZzZXQrMTVdKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICB9CisJICAgICAgIGZvcig7IG9mZnNldCA8IDgqMTY7IG9mZnNldCArPSAxNikgeworCQkgICAgICAgdW5zaWduZWQgc2hvcnQgY2hlY2tzdW0gPSAwOworCQkgICAgICAgLyogdmVyaWZ5IHRoZSBjaGVja3N1bSAqLworCQkgICAgICAgZm9yKGkgPSAwOyBpPDE0OyBpKyspIGNoZWNrc3VtICs9IGVlW2krb2Zmc2V0XTsKKwkJCSAgICAgICBjaGVja3N1bSA9IH5jaGVja3N1bTsgIC8qIG5vIGlkZWEgd2h5ICovCisJCQkgICAgICAgaWYgKCgoKGNoZWNrc3VtPj44KSYweDBGRikgPT0gZWVbb2Zmc2V0KzE0XSkgJiYKKwkJCQkgICAoKGNoZWNrc3VtICYgMHgwRkYpID09IGVlW29mZnNldCsxNV0pKSB7CisJCQkgICAgICAgYnJlYWs7CisJCSAgICAgICB9CisJICAgICAgIH0KIAotICAgICAgICAgICAgICAgaWYgKG9mZnNldCA+PSA4KjE2KQorCSAgICAgICBpZiAob2Zmc2V0ID49IDgqMTYpCiAJCSAgICAgICByZXR1cm47CiAKIAkgICAgICAgLyogZm91bmQgYSB2YWxpZCBkZXNjcmlwdG9yICovCkBAIC0zMjEyLDQ3ICszNTk4LDQ3IEBACiAKIAkgICAgICAgLyogODQ4IGJhc2VkICovCiAJICAgICAgIGNhc2UgMHgwMDA0OgotCQkgICAgICAgYnR2LT5jLnR5cGUgPSBCVFRWX09TUFJFWTF4MF84NDg7CisJCSAgICAgICBidHYtPmMudHlwZSA9IEJUVFZfQk9BUkRfT1NQUkVZMXgwXzg0ODsKIAkJICAgICAgIGJyZWFrOwogCSAgICAgICBjYXNlIDB4MDAwNToKLQkJICAgICAgIGJ0di0+Yy50eXBlID0gQlRUVl9PU1BSRVkxMDFfODQ4OworCQkgICAgICAgYnR2LT5jLnR5cGUgPSBCVFRWX0JPQVJEX09TUFJFWTEwMV84NDg7CiAJCSAgICAgICBicmVhazsKIAotICAgICAgICAgICAgICAgLyogODc4IGJhc2VkICovCisJICAgICAgIC8qIDg3OCBiYXNlZCAqLwogCSAgICAgICBjYXNlIDB4MDAxMjoKIAkgICAgICAgY2FzZSAweDAwMTM6Ci0JCSAgICAgICBidHYtPmMudHlwZSA9IEJUVFZfT1NQUkVZMXgwOworCQkgICAgICAgYnR2LT5jLnR5cGUgPSBCVFRWX0JPQVJEX09TUFJFWTF4MDsKIAkJICAgICAgIGJyZWFrOwogCSAgICAgICBjYXNlIDB4MDAxNDoKIAkgICAgICAgY2FzZSAweDAwMTU6Ci0JCSAgICAgICBidHYtPmMudHlwZSA9IEJUVFZfT1NQUkVZMXgxOworCQkgICAgICAgYnR2LT5jLnR5cGUgPSBCVFRWX0JPQVJEX09TUFJFWTF4MTsKIAkJICAgICAgIGJyZWFrOwogCSAgICAgICBjYXNlIDB4MDAxNjoKIAkgICAgICAgY2FzZSAweDAwMTc6CiAJICAgICAgIGNhc2UgMHgwMDIwOgotCQkgICAgICAgYnR2LT5jLnR5cGUgPSBCVFRWX09TUFJFWTF4MV9TVklEOworCQkgICAgICAgYnR2LT5jLnR5cGUgPSBCVFRWX0JPQVJEX09TUFJFWTF4MV9TVklEOwogCQkgICAgICAgYnJlYWs7CiAJICAgICAgIGNhc2UgMHgwMDE4OgogCSAgICAgICBjYXNlIDB4MDAxOToKIAkgICAgICAgY2FzZSAweDAwMUU6CiAJICAgICAgIGNhc2UgMHgwMDFGOgotCQkgICAgICAgYnR2LT5jLnR5cGUgPSBCVFRWX09TUFJFWTJ4eDsKKwkJICAgICAgIGJ0di0+Yy50eXBlID0gQlRUVl9CT0FSRF9PU1BSRVkyeHg7CiAJCSAgICAgICBicmVhazsKIAkgICAgICAgY2FzZSAweDAwMUE6CiAJICAgICAgIGNhc2UgMHgwMDFCOgotCQkgICAgICAgYnR2LT5jLnR5cGUgPSBCVFRWX09TUFJFWTJ4MF9TVklEOworCQkgICAgICAgYnR2LT5jLnR5cGUgPSBCVFRWX0JPQVJEX09TUFJFWTJ4MF9TVklEOwogCQkgICAgICAgYnJlYWs7CiAJICAgICAgIGNhc2UgMHgwMDQwOgotCQkgICAgICAgYnR2LT5jLnR5cGUgPSBCVFRWX09TUFJFWTUwMDsKKwkJICAgICAgIGJ0di0+Yy50eXBlID0gQlRUVl9CT0FSRF9PU1BSRVk1MDA7CiAJCSAgICAgICBicmVhazsKIAkgICAgICAgY2FzZSAweDAwNTA6CiAJICAgICAgIGNhc2UgMHgwMDU2OgotCQkgICAgICAgYnR2LT5jLnR5cGUgPSBCVFRWX09TUFJFWTU0MDsKKwkJICAgICAgIGJ0di0+Yy50eXBlID0gQlRUVl9CT0FSRF9PU1BSRVk1NDA7CiAJCSAgICAgICAvKiBidHR2X29zcHJleV81NDBfaW5pdChidHYpOyAqLwogCQkgICAgICAgYnJlYWs7CiAJICAgICAgIGNhc2UgMHgwMDYwOgogCSAgICAgICBjYXNlIDB4MDA3MDoKLQkJICAgICAgIGJ0di0+Yy50eXBlID0gQlRUVl9PU1BSRVkyeDA7CisJCSAgICAgICBidHYtPmMudHlwZSA9IEJUVFZfQk9BUkRfT1NQUkVZMngwOwogCQkgICAgICAgLyogZW5hYmxlIG91dHB1dCBvbiBzZWxlY3QgY29udHJvbCBsaW5lcyAqLwogCQkgICAgICAgZ3Bpb19pbm91dCgweGZmZmZmZiwweDAwMDMwMyk7CiAJCSAgICAgICBicmVhazsKQEAgLTMyNzQsMjcgKzM2NjAsMjcgQEAKIC8qIEFWZXJtZWRpYSBzcGVjaWZpYyBzdHVmZiwgZnJvbSAgYmt0cl9jYXJkLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKIHN0YXRpYyBpbnQgdHVuZXJfMF90YWJsZVtdID0gewotICAgICAgICBUVU5FUl9QSElMSVBTX05UU0MsICBUVU5FUl9QSElMSVBTX1BBTCAvKiBQQUwtQkcqLywKLSAgICAgICAgVFVORVJfUEhJTElQU19QQUwsICAgVFVORVJfUEhJTElQU19QQUwgLyogUEFMLUkqLywKLSAgICAgICAgVFVORVJfUEhJTElQU19QQUwsICAgVFVORVJfUEhJTElQU19QQUwsCi0gICAgICAgIFRVTkVSX1BISUxJUFNfU0VDQU0sIFRVTkVSX1BISUxJUFNfU0VDQU0sCi0gICAgICAgIFRVTkVSX1BISUxJUFNfU0VDQU0sIFRVTkVSX1BISUxJUFNfUEFMLAorCVRVTkVSX1BISUxJUFNfTlRTQywgIFRVTkVSX1BISUxJUFNfUEFMIC8qIFBBTC1CRyovLAorCVRVTkVSX1BISUxJUFNfUEFMLCAgIFRVTkVSX1BISUxJUFNfUEFMIC8qIFBBTC1JKi8sCisJVFVORVJfUEhJTElQU19QQUwsICAgVFVORVJfUEhJTElQU19QQUwsCisJVFVORVJfUEhJTElQU19TRUNBTSwgVFVORVJfUEhJTElQU19TRUNBTSwKKwlUVU5FUl9QSElMSVBTX1NFQ0FNLCBUVU5FUl9QSElMSVBTX1BBTCwKIAlUVU5FUl9QSElMSVBTX0ZNMTIxNk1FX01LMyB9OwogCiBzdGF0aWMgaW50IHR1bmVyXzFfdGFibGVbXSA9IHsKLSAgICAgICAgVFVORVJfVEVNSUNfTlRTQywgIFRVTkVSX1RFTUlDX1BBTCwKKwlUVU5FUl9URU1JQ19OVFNDLCAgVFVORVJfVEVNSUNfUEFMLAogCVRVTkVSX1RFTUlDX1BBTCwgICBUVU5FUl9URU1JQ19QQUwsCiAJVFVORVJfVEVNSUNfUEFMLCAgIFRVTkVSX1RFTUlDX1BBTCwKLSAgICAgICAgVFVORVJfVEVNSUNfNDAxMkZZNSwgVFVORVJfVEVNSUNfNDAxMkZZNSwgLyogVFVORVJfVEVNSUNfU0VDQU0gKi8KLSAgICAgICAgVFVORVJfVEVNSUNfNDAxMkZZNSwgVFVORVJfVEVNSUNfUEFMfTsKKwlUVU5FUl9URU1JQ180MDEyRlk1LCBUVU5FUl9URU1JQ180MDEyRlk1LCAvKiBUVU5FUl9URU1JQ19TRUNBTSAqLworCVRVTkVSX1RFTUlDXzQwMTJGWTUsIFRVTkVSX1RFTUlDX1BBTH07CiAKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBhdmVybWVkaWFfZWVwcm9tKHN0cnVjdCBidHR2ICpidHYpCiB7Ci0gICAgICAgIGludCB0dW5lcl9tYWtlLHR1bmVyX3R2X2ZtLHR1bmVyX2Zvcm1hdCx0dW5lcj0wOworCWludCB0dW5lcl9tYWtlLHR1bmVyX3R2X2ZtLHR1bmVyX2Zvcm1hdCx0dW5lcj0wOwogCiAJdHVuZXJfbWFrZSAgICAgID0gKGVlcHJvbV9kYXRhWzB4NDFdICYgMHg3KTsKLSAgICAgICAgdHVuZXJfdHZfZm0gICAgID0gKGVlcHJvbV9kYXRhWzB4NDFdICYgMHgxOCkgPj4gMzsKLSAgICAgICAgdHVuZXJfZm9ybWF0ICAgID0gKGVlcHJvbV9kYXRhWzB4NDJdICYgMHhmMCkgPj4gNDsKKwl0dW5lcl90dl9mbSAgICAgPSAoZWVwcm9tX2RhdGFbMHg0MV0gJiAweDE4KSA+PiAzOworCXR1bmVyX2Zvcm1hdCAgICA9IChlZXByb21fZGF0YVsweDQyXSAmIDB4ZjApID4+IDQ7CiAJYnR2LT5oYXNfcmVtb3RlID0gKGVlcHJvbV9kYXRhWzB4NDJdICYgMHgwMSk7CiAKIAlpZiAodHVuZXJfbWFrZSA9PSAwIHx8IHR1bmVyX21ha2UgPT0gMikKQEAgLTMzMjUsMTMgKzM3MTEsMTMgQEAKIHsKIAkvKiBmaXggdXAgb3VyIGNhcmQgZW50cnkgKi8KIAlpZihub3JtPT1WSURFT19NT0RFX05UU0MpIHsKLQkJYnR0dl90dmNhcmRzW0JUVFZfVk9PRE9PVFZfRk1dLmF1ZGlvbXV4WzBdPTB4OTU3ZmZmOwotCQlidHR2X3R2Y2FyZHNbQlRUVl9WT09ET09UVl9GTV0uYXVkaW9tdXhbNF09MHg5NTdmZmY7CisJCWJ0dHZfdHZjYXJkc1tCVFRWX0JPQVJEX1ZPT0RPT1RWX0ZNXS5hdWRpb211eFswXT0weDk1N2ZmZjsKKwkJYnR0dl90dmNhcmRzW0JUVFZfQk9BUkRfVk9PRE9PVFZfRk1dLmF1ZGlvbXV4WzRdPTB4OTU3ZmZmOwogCQlkcHJpbnRrKCJidHR2X3RkYTk4ODBfc2V0bm9ybSB0byBOVFNDXG4iKTsKIAl9CiAJZWxzZSB7Ci0JICAgICAgICBidHR2X3R2Y2FyZHNbQlRUVl9WT09ET09UVl9GTV0uYXVkaW9tdXhbMF09MHg5NDdmZmY7Ci0gICAgICAgICAgICAgICAgYnR0dl90dmNhcmRzW0JUVFZfVk9PRE9PVFZfRk1dLmF1ZGlvbXV4WzRdPTB4OTQ3ZmZmOworCQlidHR2X3R2Y2FyZHNbQlRUVl9CT0FSRF9WT09ET09UVl9GTV0uYXVkaW9tdXhbMF09MHg5NDdmZmY7CisJCWJ0dHZfdHZjYXJkc1tCVFRWX0JPQVJEX1ZPT0RPT1RWX0ZNXS5hdWRpb211eFs0XT0weDk0N2ZmZjsKIAkJZHByaW50aygiYnR0dl90ZGE5ODgwX3NldG5vcm0gdG8gUEFMXG4iKTsKIAl9CiAJLyogc2V0IEdQSU8gYWNjb3JkaW5nICovCkBAIC0zMzQyLDcgKzM3MjgsNyBAQAogCiAvKgogICogcmVzZXQvZW5hYmxlIHRoZSBNU1Agb24gc29tZSBIYXVwcGF1Z2UgY2FyZHMKLSAqIFRoYW5rcyB0byBLefZzdGkgTeRsa2tpIChrbWFsa2tpQGNjLmh1dC5maSkhCisgKiBUaGFua3MgdG8gS3nDtnN0aSBNw6Rsa2tpIChrbWFsa2tpQGNjLmh1dC5maSkhCiAgKgogICogSGF1cHBhdWdlOiAgcGluICA1CiAgKiBWb29kb286ICAgICBwaW4gMjAKQEAgLTMzNTMsNyArMzczOSw3IEBACiAKIAlncGlvX2lub3V0KG1hc2ssbWFzayk7CiAJZ3Bpb19iaXRzKG1hc2ssMCk7Ci0gICAgICAgIHVkZWxheSgyNTAwKTsKKwl1ZGVsYXkoMjUwMCk7CiAJZ3Bpb19iaXRzKG1hc2ssbWFzayk7CiAKIAlpZiAoYnR0dl9ncGlvKQpAQCAtMzQyOSw3ICszODE1LDcgQEAKIAl1ZGVsYXkoMTApOwogCWdwaW9fd3JpdGUoMTw8Mik7CiAKLSAgICAgICAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodmFscyk7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHZhbHMpOyBpKyspIHsKIAkJdG1wPWJ0dHZfSTJDV3JpdGUoYnR2LDB4MUUsMCx2YWxzW2ldLDEpOwogCQlpZiAodG1wICE9IC0xKSB7CiAJCQlwcmludGsoS0VSTl9JTkZPCkBAIC0zODcyLDMwICs0MjU4LDMwIEBACiBzdGF0aWMgdm9pZAogbHQ5NDE1X2F1ZGlvKHN0cnVjdCBidHR2ICpidHYsIHN0cnVjdCB2aWRlb19hdWRpbyAqdiwgaW50IHNldCkKIHsKLSAgICAgICAgaW50IHZhbCA9IDA7CisJaW50IHZhbCA9IDA7CiAKLSAgICAgICAgaWYgKGdwaW9fcmVhZCgpICYgMHg0MDAwKSB7CisJaWYgKGdwaW9fcmVhZCgpICYgMHg0MDAwKSB7CiAJCXYtPm1vZGUgPSBWSURFT19TT1VORF9NT05POwogCQlyZXR1cm47CiAJfQogCi0gICAgICAgIGlmIChzZXQpIHsKLSAgICAgICAgICAgICAgICBpZiAodi0+bW9kZSAmIFZJREVPX1NPVU5EX0xBTkcyKSAgLyogQTIgU0FQICovCi0gICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSAweDAwODA7CisJaWYgKHNldCkgeworCQlpZiAodi0+bW9kZSAmIFZJREVPX1NPVU5EX0xBTkcyKSAgLyogQTIgU0FQICovCisJCQl2YWwgPSAweDAwODA7CiAJCWlmICh2LT5tb2RlICYgVklERU9fU09VTkRfU1RFUkVPKSAvKiBBMiBzdGVyZW8gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IDB4MDg4MDsKLSAgICAgICAgICAgICAgICBpZiAoKHYtPm1vZGUgJiBWSURFT19TT1VORF9MQU5HMSkgfHwKKwkJCXZhbCA9IDB4MDg4MDsKKwkJaWYgKCh2LT5tb2RlICYgVklERU9fU09VTkRfTEFORzEpIHx8CiAJCSAgICAodi0+bW9kZSAmIFZJREVPX1NPVU5EX01PTk8pKQogCQkJdmFsID0gMDsKIAkJZ3Bpb19iaXRzKDB4MDg4MCwgdmFsKTsKLSAgICAgICAgICAgICAgICBpZiAoYnR0dl9ncGlvKQotICAgICAgICAgICAgICAgICAgICAgICAgYnR0dl9ncGlvX3RyYWNraW5nKGJ0diwibHQ5NDE1Iik7Ci0gICAgICAgIH0gZWxzZSB7CisJCWlmIChidHR2X2dwaW8pCisJCQlidHR2X2dwaW9fdHJhY2tpbmcoYnR2LCJsdDk0MTUiKTsKKwl9IGVsc2UgewogCQkvKiBhdXRvZGV0ZWN0IGRvZXNuJ3Qgd29yayB3aXRoIHRoaXMgY2FyZCA6LSggKi8KLSAgICAgICAgICAgICAgICB2LT5tb2RlID0gVklERU9fU09VTkRfTU9OTyB8IFZJREVPX1NPVU5EX1NURVJFTyB8CisJCXYtPm1vZGUgPSBWSURFT19TT1VORF9NT05PIHwgVklERU9fU09VTkRfU1RFUkVPIHwKIAkJCVZJREVPX1NPVU5EX0xBTkcxIHwgVklERU9fU09VTkRfTEFORzI7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisJCXJldHVybjsKKwl9CiB9CiAKIC8qIFREQTk4MjEgb24gVGVycmFUVisgQnQ4NDgsIEJ0ODc4ICovCkBAIC00MDE4LDI2ICs0NDA0LDI2IEBACiBzdGF0aWMgdm9pZAogd2luZHZyX2F1ZGlvKHN0cnVjdCBidHR2ICpidHYsIHN0cnVjdCB2aWRlb19hdWRpbyAqdiwgaW50IHNldCkKIHsKLSAgICAgICAgdW5zaWduZWQgbG9uZyB2YWwgPSAwOworCXVuc2lnbmVkIGxvbmcgdmFsID0gMDsKIAotICAgICAgICBpZiAoc2V0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKHYtPm1vZGUgJiBWSURFT19TT1VORF9NT05PKQotICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gMHgwNDAwMDA7Ci0gICAgICAgICAgICAgICAgaWYgKHYtPm1vZGUgJiBWSURFT19TT1VORF9MQU5HMSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IDA7Ci0gICAgICAgICAgICAgICAgaWYgKHYtPm1vZGUgJiBWSURFT19TT1VORF9MQU5HMikKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IDB4MTAwMDAwOwotICAgICAgICAgICAgICAgIGlmICh2LT5tb2RlICYgVklERU9fU09VTkRfU1RFUkVPKQotICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gMDsKLSAgICAgICAgICAgICAgICBpZiAodmFsKSB7CisJaWYgKHNldCkgeworCQlpZiAodi0+bW9kZSAmIFZJREVPX1NPVU5EX01PTk8pCisJCQl2YWwgPSAweDA0MDAwMDsKKwkJaWYgKHYtPm1vZGUgJiBWSURFT19TT1VORF9MQU5HMSkKKwkJCXZhbCA9IDA7CisJCWlmICh2LT5tb2RlICYgVklERU9fU09VTkRfTEFORzIpCisJCQl2YWwgPSAweDEwMDAwMDsKKwkJaWYgKHYtPm1vZGUgJiBWSURFT19TT1VORF9TVEVSRU8pCisJCQl2YWwgPSAwOworCQlpZiAodmFsKSB7CiAJCQlncGlvX2JpdHMoMHgxNDAwMDAsIHZhbCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnR0dl9ncGlvKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidHR2X2dwaW9fdHJhY2tpbmcoYnR2LCJ3aW5kdnIiKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdi0+bW9kZSA9IFZJREVPX1NPVU5EX01PTk8gfCBWSURFT19TT1VORF9TVEVSRU8gfAotICAgICAgICAgICAgICAgICAgICAgICAgICBWSURFT19TT1VORF9MQU5HMSB8IFZJREVPX1NPVU5EX0xBTkcyOwotICAgICAgICB9CisJCQlpZiAoYnR0dl9ncGlvKQorCQkJCWJ0dHZfZ3Bpb190cmFja2luZyhidHYsIndpbmR2ciIpOworCQl9CisJfSBlbHNlIHsKKwkJdi0+bW9kZSA9IFZJREVPX1NPVU5EX01PTk8gfCBWSURFT19TT1VORF9TVEVSRU8gfAorCQkJICBWSURFT19TT1VORF9MQU5HMSB8IFZJREVPX1NPVU5EX0xBTkcyOworCX0KIH0KIAogLyoKQEAgLTQyODAsMTAgKzQ2NjYsMTAgQEAKIHN0YXRpYyB2b2lkIHhndWFyZF9tdXhzZWwoc3RydWN0IGJ0dHYgKmJ0diwgdW5zaWduZWQgaW50IGlucHV0KQogewogCXN0YXRpYyBjb25zdCBpbnQgbWFza3NbXSA9IHsKLSAgICAgICAgICAgICAgICBFTkIwLCBFTkIwfElOMDAsIEVOQjB8SU4xMCwgRU5CMHxJTjAwfElOMTAsCi0gICAgICAgICAgICAgICAgRU5BMCwgRU5BMHxJTjAwLCBFTkEwfElOMTAsIEVOQTB8SU4wMHxJTjEwLAotICAgICAgICAgICAgICAgIEVOQjEsIEVOQjF8SU4wMSwgRU5CMXxJTjExLCBFTkIxfElOMDF8SU4xMSwKLSAgICAgICAgICAgICAgICBFTkExLCBFTkExfElOMDEsIEVOQTF8SU4xMSwgRU5BMXxJTjAxfElOMTEsCisJCUVOQjAsIEVOQjB8SU4wMCwgRU5CMHxJTjEwLCBFTkIwfElOMDB8SU4xMCwKKwkJRU5BMCwgRU5BMHxJTjAwLCBFTkEwfElOMTAsIEVOQTB8SU4wMHxJTjEwLAorCQlFTkIxLCBFTkIxfElOMDEsIEVOQjF8SU4xMSwgRU5CMXxJTjAxfElOMTEsCisJCUVOQTEsIEVOQTF8SU4wMSwgRU5BMXxJTjExLCBFTkExfElOMDF8SU4xMSwKIAl9OwogCWdwaW9fd3JpdGUobWFza3NbaW5wdXQlMTZdKTsKIH0KQEAgLTQzODgsMTAgKzQ3NzQsMTAgQEAKIAogc3RhdGljIHZvaWQgUFhDMjAwX211eHNlbChzdHJ1Y3QgYnR0diAqYnR2LCB1bnNpZ25lZCBpbnQgaW5wdXQpCiB7Ci0gICAgICAgIGludCByYzsKKwlpbnQgcmM7CiAJbG9uZyBtdXg7CiAJaW50IGJpdG1hc2s7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgYnVmWzJdOworCXVuc2lnbmVkIGNoYXIgYnVmWzJdOwogCiAJLyogUmVhZCBQSUMgY29uZmlnIHRvIGRldGVybWluZSBpZiB0aGlzIGlzIGEgUFhDMjAwRiAqLwogCS8qIFBYX0kyQ19DTURfQ0ZHKi8KQEAgLTQ0MjEsMTQgKzQ4MDcsMTQgQEAKIAkvKiBiaXRtYXNrPTB4MzBmOyAqLwogCWJpdG1hc2s9MHgzMDI7CiAJLyogY2hlY2sgd2hldGhlciB3ZSBoYXZlIGEgUFhDMjAwQSAqLwotIAlpZiAoYnR2LT5jYXJkaWQgPT0gUFhfUFhDMjAwQV9DQVJESUQpICB7CisJaWYgKGJ0di0+Y2FyZGlkID09IFBYX1BYQzIwMEFfQ0FSRElEKSAgewogCSAgIGJpdG1hc2sgXj0gMHgxODA7IC8qIHVzZSA3IGFuZCA5LCBub3QgOCBhbmQgOSAqLwogCSAgIGJpdG1hc2sgfD0gNzw8NDsgLyogdGhlIERBQyAqLwogCX0KIAlidHdyaXRlKGJpdG1hc2ssIEJUODQ4X0dQSU9fT1VUX0VOKTsKIAogCWJpdG1hc2sgPSBidHJlYWQoQlQ4NDhfR1BJT19EQVRBKTsKLSAJaWYgKGJ0di0+Y2FyZGlkID09IFBYX1BYQzIwMEFfQ0FSRElEKQorCWlmIChidHYtPmNhcmRpZCA9PSBQWF9QWEMyMDBBX0NBUkRJRCkKIAkgIGJpdG1hc2sgPSAoYml0bWFzayAmIH4weDI4MCkgfCAoKG11eCAmIDIpIDw8IDgpIHwgKChtdXggJiAxKSA8PCA3KTsKIAllbHNlIC8qIG9sZGVyIGRldmljZSAqLwogCSAgYml0bWFzayA9IChiaXRtYXNrICYgfjB4MzAwKSB8ICgobXV4ICYgMykgPDwgOCk7CkBAIC00NDQxLDcgKzQ4MjcsNyBAQAogCSAqCiAJICogbmVlZGVkIGJlY2F1c2UgYnR0di1kcml2ZXIgc2V0cyBtdXggYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbgogCSAqLwotIAlpZiAoYnR2LT5jYXJkaWQgPT0gUFhfUFhDMjAwQV9DQVJESUQpCisJaWYgKGJ0di0+Y2FyZGlkID09IFBYX1BYQzIwMEFfQ0FSRElEKQogCSAgYnRhb3IoMjw8NSwgfkJUODQ4X0lGT1JNX01VWFNFTCwgQlQ4NDhfSUZPUk0pOwogCWVsc2UgLyogb2xkZXIgZGV2aWNlICovCiAJICBidGFuZCh+QlQ4NDhfSUZPUk1fTVVYU0VMLEJUODQ4X0lGT1JNKTsKQEAgLTQ0ODUsMTAgKzQ4NzEsOSBAQAogCX0KIAlpZiAoVU5TRVQgIT0gbGF0ZW5jeSkKIAkJcHJpbnRrKEtFUk5fSU5GTyAiYnR0djogcGNpIGxhdGVuY3kgZml4dXAgWyVkXVxuIixsYXRlbmN5KTsKLQotCXdoaWxlICgoZGV2ID0gcGNpX2ZpbmRfZGV2aWNlKFBDSV9WRU5ET1JfSURfSU5URUwsCisJd2hpbGUgKChkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0lOVEVMLAogCQkJCSAgICAgIFBDSV9ERVZJQ0VfSURfSU5URUxfODI0NDEsIGRldikpKSB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBiOworCQl1bnNpZ25lZCBjaGFyIGI7CiAJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgMHg1MywgJmIpOwogCQlpZiAoYnR0dl9kZWJ1ZykKIAkJCXByaW50ayhLRVJOX0lORk8gImJ0dHY6IEhvc3QgYnJpZGdlOiA4MjQ0MUZYIE5hdG9tYSwgIgpAQCAtNDQ5OCw3ICs0ODgzLDcgQEAKIAogaW50IF9fZGV2aW5pdCBidHR2X2hhbmRsZV9jaGlwc2V0KHN0cnVjdCBidHR2ICpidHYpCiB7Ci0gCXVuc2lnbmVkIGNoYXIgY29tbWFuZDsKKwl1bnNpZ25lZCBjaGFyIGNvbW1hbmQ7CiAKIAlpZiAoIXRyaXRvbjEgJiYgIXZzZnggJiYgVU5TRVQgPT0gbGF0ZW5jeSkKIAkJcmV0dXJuIDA7CkBAIC00NTE5LDEzICs0OTA0LDEzIEBACiAJCQlidHYtPnRyaXRvbjEgPSBCVDg0OF9JTlRfRVRCRjsKIAl9IGVsc2UgewogCQkvKiBidDg3OCBoYXMgYSBiaXQgaW4gdGhlIHBjaSBjb25maWcgc3BhY2UgZm9yIGl0ICovCi0gICAgICAgICAgICAgICAgcGNpX3JlYWRfY29uZmlnX2J5dGUoYnR2LT5jLnBjaSwgQlQ4NzhfREVWQ1RSTCwgJmNvbW1hbmQpOworCQlwY2lfcmVhZF9jb25maWdfYnl0ZShidHYtPmMucGNpLCBCVDg3OF9ERVZDVFJMLCAmY29tbWFuZCk7CiAJCWlmICh0cml0b24xKQogCQkJY29tbWFuZCB8PSBCVDg3OF9FTl9UQkZYOwogCQlpZiAodnNmeCkKIAkJCWNvbW1hbmQgfD0gQlQ4NzhfRU5fVlNGWDsKLSAgICAgICAgICAgICAgICBwY2lfd3JpdGVfY29uZmlnX2J5dGUoYnR2LT5jLnBjaSwgQlQ4NzhfREVWQ1RSTCwgY29tbWFuZCk7Ci0gICAgICAgIH0KKwkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGJ0di0+Yy5wY2ksIEJUODc4X0RFVkNUUkwsIGNvbW1hbmQpOworCX0KIAlpZiAoVU5TRVQgIT0gbGF0ZW5jeSkKIAkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGJ0di0+Yy5wY2ksIFBDSV9MQVRFTkNZX1RJTUVSLCBsYXRlbmN5KTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnR0di1kcml2ZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnR0di1kcml2ZXIuYwppbmRleCBkNTM4YTk5NC4uMDAwNTc0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idHR2LWRyaXZlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnR0di1kcml2ZXIuYwpAQCAtMyw3ICszLDcgQEAKICAgICBidHR2IC0gQnQ4NDggZnJhbWUgZ3JhYmJlciBkcml2ZXIKIAogICAgIENvcHlyaWdodCAoQykgMTk5Niw5Nyw5OCBSYWxwaCAgTWV0emxlciA8cmprbUB0aHAudW5pLWtvZWxuLmRlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBNYXJjdXMgTWV0emxlciA8bW9jbUB0aHAudW5pLWtvZWxuLmRlPgorCQkJICAgJiBNYXJjdXMgTWV0emxlciA8bW9jbUB0aHAudW5pLWtvZWxuLmRlPgogICAgIChjKSAxOTk5LTIwMDIgR2VyZCBLbm9yciA8a3JheGVsQGJ5dGVzZXgub3JnPgogCiAgICAgc29tZSB2NGwyIGNvZGUgbGluZXMgYXJlIHRha2VuIGZyb20gSnVzdGluJ3MgYnR0djIgZHJpdmVyIHdoaWNoIGlzCkBAIC0xOTIsOCArMTkyLDggQEAKIAogY29uc3Qgc3RydWN0IGJ0dHZfdHZub3JtIGJ0dHZfdHZub3Jtc1tdID0gewogCS8qIFBBTC1CREdISSAqLwotICAgICAgICAvKiBtYXguIGFjdGl2ZSB2aWRlbyBpcyBhY3R1YWxseSA5MjIsIGJ1dCA5MjQgaXMgZGl2aXNpYmxlIGJ5IDQgYW5kIDMhICovCi0gCS8qIGFjdHVhbGx5LCBtYXggYWN0aXZlIFBBTCB3aXRoIEhTQ0FMRT0wIGlzIDk0OCwgTlRTQyBpcyA3NjggLSBuaWwgKi8KKwkvKiBtYXguIGFjdGl2ZSB2aWRlbyBpcyBhY3R1YWxseSA5MjIsIGJ1dCA5MjQgaXMgZGl2aXNpYmxlIGJ5IDQgYW5kIDMhICovCisJLyogYWN0dWFsbHksIG1heCBhY3RpdmUgUEFMIHdpdGggSFNDQUxFPTAgaXMgOTQ4LCBOVFNDIGlzIDc2OCAtIG5pbCAqLwogCXsKIAkJLnY0bDJfaWQgICAgICAgID0gVjRMMl9TVERfUEFMLAogCQkubmFtZSAgICAgICAgICAgPSAiUEFMIiwKQEAgLTgwNiw5ICs4MDYsOSBAQAogCQkJYnR2LT5jLm5yLHRhYmxlX2lkeCk7CiAKIAkJLyogdGltaW5nIGNoYW5nZS4uLnJlc2V0IHRpbWluZyBnZW5lcmF0b3IgYWRkcmVzcyAqLwotICAgICAgIAkJYnR3cml0ZSgweDAwLCBCVDg0OF9UR0NUUkwpOwotICAgICAgIAkJYnR3cml0ZSgweDAyLCBCVDg0OF9UR0NUUkwpOwotICAgICAgIAkJYnR3cml0ZSgweDAwLCBCVDg0OF9UR0NUUkwpOworCQlidHdyaXRlKDB4MDAsIEJUODQ4X1RHQ1RSTCk7CisJCWJ0d3JpdGUoMHgwMiwgQlQ4NDhfVEdDVFJMKTsKKwkJYnR3cml0ZSgweDAwLCBCVDg0OF9UR0NUUkwpOwogCiAJCWxlbj1TUkFNX1RhYmxlW3RhYmxlX2lkeF1bMF07CiAJCWZvcihpID0gMTsgaSA8PSBsZW47IGkrKykKQEAgLTg0Nyw3ICs4NDcsNyBAQAogCiAJLyogLTEyOCB0byAxMjcgKi8KIAl2YWx1ZSA9IChodWUgPj4gOCkgLSAxMjg7Ci0gICAgICAgIGJ0d3JpdGUodmFsdWUgJiAweGZmLCBCVDg0OF9IVUUpOworCWJ0d3JpdGUodmFsdWUgJiAweGZmLCBCVDg0OF9IVUUpOwogfQogCiBzdGF0aWMgdm9pZCBidDg0OF9jb250cmFzdChzdHJ1Y3QgYnR0diAqYnR2LCBpbnQgY29udCkKQEAgLTg1OSw5ICs4NTksOSBAQAogCS8qIDAtNTExICovCiAJdmFsdWUgPSAoY29udCAgPj4gNyk7CiAJaGliaXQgPSAodmFsdWUgPj4gNikgJiA0OwotICAgICAgICBidHdyaXRlKHZhbHVlICYgMHhmZiwgQlQ4NDhfQ09OVFJBU1RfTE8pOwotICAgICAgICBidGFvcihoaWJpdCwgfjQsIEJUODQ4X0VfQ09OVFJPTCk7Ci0gICAgICAgIGJ0YW9yKGhpYml0LCB+NCwgQlQ4NDhfT19DT05UUk9MKTsKKwlidHdyaXRlKHZhbHVlICYgMHhmZiwgQlQ4NDhfQ09OVFJBU1RfTE8pOworCWJ0YW9yKGhpYml0LCB+NCwgQlQ4NDhfRV9DT05UUk9MKTsKKwlidGFvcihoaWJpdCwgfjQsIEJUODQ4X09fQ09OVFJPTCk7CiB9CiAKIHN0YXRpYyB2b2lkIGJ0ODQ4X3NhdChzdHJ1Y3QgYnR0diAqYnR2LCBpbnQgY29sb3IpCkBAIC04NzMsMTIgKzg3MywxMiBAQAogCS8qIDAtNTExIGZvciB0aGUgY29sb3IgKi8KIAl2YWxfdSAgID0gKChjb2xvciAqIGJ0di0+b3B0X3V2X3JhdGlvKSAvIDUwKSA+PiA3OwogCXZhbF92ICAgPSAoKChjb2xvciAqICgxMDAgLSBidHYtPm9wdF91dl9yYXRpbykgLyA1MCkgPj43KSoxODBMKS8yNTQ7Ci0gICAgICAgIGhpYml0cyAgPSAodmFsX3UgPj4gNykgJiAyOworCWhpYml0cyAgPSAodmFsX3UgPj4gNykgJiAyOwogCWhpYml0cyB8PSAodmFsX3YgPj4gOCkgJiAxOwotICAgICAgICBidHdyaXRlKHZhbF91ICYgMHhmZiwgQlQ4NDhfU0FUX1VfTE8pOwotICAgICAgICBidHdyaXRlKHZhbF92ICYgMHhmZiwgQlQ4NDhfU0FUX1ZfTE8pOwotICAgICAgICBidGFvcihoaWJpdHMsIH4zLCBCVDg0OF9FX0NPTlRST0wpOwotICAgICAgICBidGFvcihoaWJpdHMsIH4zLCBCVDg0OF9PX0NPTlRST0wpOworCWJ0d3JpdGUodmFsX3UgJiAweGZmLCBCVDg0OF9TQVRfVV9MTyk7CisJYnR3cml0ZSh2YWxfdiAmIDB4ZmYsIEJUODQ4X1NBVF9WX0xPKTsKKwlidGFvcihoaWJpdHMsIH4zLCBCVDg0OF9FX0NPTlRST0wpOworCWJ0YW9yKGhpYml0cywgfjMsIEJUODQ4X09fQ09OVFJPTCk7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC04OTEsNyArODkxLDcgQEAKIAlpZiAoaW5wdXQgPj0gYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS52aWRlb19pbnB1dHMpCiAJCXJldHVybiAtRUlOVkFMOwogCi0gICAgICAgIC8qIG5lZWRlZCBieSBSZW1vdGVWaWRlbyBNWCAqLworCS8qIG5lZWRlZCBieSBSZW1vdGVWaWRlbyBNWCAqLwogCW1hc2syID0gYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5ncGlvbWFzazI7CiAJaWYgKG1hc2syKQogCQlncGlvX2lub3V0KG1hc2syLG1hc2syKTsKQEAgLTk2NCw3ICs5NjQsNyBAQAogCWMubm9ybSAgICA9IGJ0di0+dHZub3JtOwogCWMuY2hhbm5lbCA9IGJ0di0+aW5wdXQ7CiAJYnR0dl9jYWxsX2kyY19jbGllbnRzKGJ0dixWSURJT0NTQ0hBTiwmYyk7Ci0JaWYgKGJ0di0+Yy50eXBlID09IEJUVFZfVk9PRE9PVFZfRk0pCisJaWYgKGJ0di0+Yy50eXBlID09IEJUVFZfQk9BUkRfVk9PRE9PVFZfRk0pCiAJCWJ0dHZfdGRhOTg4MF9zZXRub3JtKGJ0dixjLm5vcm0pOwogfQogCkBAIC05ODgsNyArOTg4LDcgQEAKIAlidDg0OEFfc2V0X3RpbWluZyhidHYpOwogCiAJc3dpdGNoIChidHYtPmMudHlwZSkgewotCWNhc2UgQlRUVl9WT09ET09UVl9GTToKKwljYXNlIEJUVFZfQk9BUkRfVk9PRE9PVFZfRk06CiAJCWJ0dHZfdGRhOTg4MF9zZXRub3JtKGJ0dixub3JtKTsKIAkJYnJlYWs7CiAJfQpAQCAtMTA1NSwyMiArMTA1NSwyMiBAQAogCWJ0d3JpdGUoQlQ4NDhfQ09MT1JfQ1RMX0dBTU1BLCBCVDg0OF9DT0xPUl9DVEwpOwogCWJ0d3JpdGUoQlQ4NDhfSUZPUk1fWFRBVVRPIHwgQlQ4NDhfSUZPUk1fQVVUTywgQlQ4NDhfSUZPUk0pOwogCi0gICAgICAgIC8qIHNldCBwbGFuYXIgYW5kIHBhY2tlZCBtb2RlIHRyaWdnZXIgcG9pbnRzIGFuZCAgICAgICAgICovCi0gICAgICAgIC8qIHNldCByaXNpbmcgZWRnZSBvZiBpbnZlcnRlZCBHUElOVFIgcGluIGFzIGlycSB0cmlnZ2VyICovCi0gICAgICAgIGJ0d3JpdGUoQlQ4NDhfR1BJT19ETUFfQ1RMX1BLVFBfMzJ8Ci0gICAgICAgICAgICAgICAgQlQ4NDhfR1BJT19ETUFfQ1RMX1BMVFAxXzE2fAotICAgICAgICAgICAgICAgIEJUODQ4X0dQSU9fRE1BX0NUTF9QTFRQMjNfMTZ8Ci0gICAgICAgICAgICAgICAgQlQ4NDhfR1BJT19ETUFfQ1RMX0dQSU5UQ3wKLSAgICAgICAgICAgICAgICBCVDg0OF9HUElPX0RNQV9DVExfR1BJTlRJLAotICAgICAgICAgICAgICAgIEJUODQ4X0dQSU9fRE1BX0NUTCk7CisJLyogc2V0IHBsYW5hciBhbmQgcGFja2VkIG1vZGUgdHJpZ2dlciBwb2ludHMgYW5kICAgICAgICAgKi8KKwkvKiBzZXQgcmlzaW5nIGVkZ2Ugb2YgaW52ZXJ0ZWQgR1BJTlRSIHBpbiBhcyBpcnEgdHJpZ2dlciAqLworCWJ0d3JpdGUoQlQ4NDhfR1BJT19ETUFfQ1RMX1BLVFBfMzJ8CisJCUJUODQ4X0dQSU9fRE1BX0NUTF9QTFRQMV8xNnwKKwkJQlQ4NDhfR1BJT19ETUFfQ1RMX1BMVFAyM18xNnwKKwkJQlQ4NDhfR1BJT19ETUFfQ1RMX0dQSU5UQ3wKKwkJQlQ4NDhfR1BJT19ETUFfQ1RMX0dQSU5USSwKKwkJQlQ4NDhfR1BJT19ETUFfQ1RMKTsKIAogCXZhbCA9IGJ0di0+b3B0X2Nocm9tYV9hZ2MgPyBCVDg0OF9TQ0xPT1BfQ0FHQyA6IDA7Ci0gICAgICAgIGJ0d3JpdGUodmFsLCBCVDg0OF9FX1NDTE9PUCk7Ci0gICAgICAgIGJ0d3JpdGUodmFsLCBCVDg0OF9PX1NDTE9PUCk7CisJYnR3cml0ZSh2YWwsIEJUODQ4X0VfU0NMT09QKTsKKwlidHdyaXRlKHZhbCwgQlQ4NDhfT19TQ0xPT1ApOwogCi0gICAgICAgIGJ0d3JpdGUoMHgyMCwgQlQ4NDhfRV9WU0NBTEVfSEkpOwotICAgICAgICBidHdyaXRlKDB4MjAsIEJUODQ4X09fVlNDQUxFX0hJKTsKLSAgICAgICAgYnR3cml0ZShCVDg0OF9BRENfUkVTRVJWRUQgfCAoYnR2LT5vcHRfYWRjX2NydXNoID8gQlQ4NDhfQURDX0NSVVNIIDogMCksCisJYnR3cml0ZSgweDIwLCBCVDg0OF9FX1ZTQ0FMRV9ISSk7CisJYnR3cml0ZSgweDIwLCBCVDg0OF9PX1ZTQ0FMRV9ISSk7CisJYnR3cml0ZShCVDg0OF9BRENfUkVTRVJWRUQgfCAoYnR2LT5vcHRfYWRjX2NydXNoID8gQlQ4NDhfQURDX0NSVVNIIDogMCksCiAJCUJUODQ4X0FEQyk7CiAKIAlidHdyaXRlKHdoaXRlY3J1c2hfdXBwZXIsIEJUODQ4X1dDX1VQKTsKQEAgLTEwODksNyArMTA4OSw3IEBACiAJYnQ4NDhfY29udHJhc3QoYnR2LCBidHYtPmNvbnRyYXN0KTsKIAlidDg0OF9zYXQoYnR2LCAgICAgIGJ0di0+c2F0dXJhdGlvbik7CiAKLSAgICAgICAgLyogaW50ZXJydXB0ICovCisJLyogaW50ZXJydXB0ICovCiAJaW5pdF9pcnFyZWcoYnR2KTsKIH0KIApAQCAtMTEwNSw3ICsxMTA1LDcgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZidHYtPnNfbG9jayxmbGFncyk7CiAKIAlpbml0X2J0ODQ4KGJ0dik7Ci0gICAgICAgIGJ0di0+cGxsLnBsbF9jdXJyZW50ID0gLTE7CisJYnR2LT5wbGwucGxsX2N1cnJlbnQgPSAtMTsKIAlzZXRfaW5wdXQoYnR2LGJ0di0+aW5wdXQpOwogfQogCkBAIC0xMzk4LDcgKzEzOTgsNyBAQAogLyogdmlkZW80bGludXggKDEpIGludGVyZmFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAogc3RhdGljIGludCBidHR2X3ByZXBhcmVfYnVmZmVyKHN0cnVjdCBidHR2ICpidHYsIHN0cnVjdCBidHR2X2J1ZmZlciAqYnVmLAotIAkJCSAgICAgICBjb25zdCBzdHJ1Y3QgYnR0dl9mb3JtYXQgKmZtdCwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgYnR0dl9mb3JtYXQgKmZtdCwKIAkJCSAgICAgICB1bnNpZ25lZCBpbnQgd2lkdGgsIHVuc2lnbmVkIGludCBoZWlnaHQsCiAJCQkgICAgICAgZW51bSB2NGwyX2ZpZWxkIGZpZWxkKQogewpAQCAtMTUyMSw4ICsxNTIxLDggQEAKIHN0YXRpYyBpbnQgYnR0dl9jb21tb25faW9jdGxzKHN0cnVjdCBidHR2ICpidHYsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKIHsKIAlzd2l0Y2ggKGNtZCkgewotICAgICAgICBjYXNlIEJUVFZfVkVSU0lPTjoKLSAgICAgICAgICAgICAgICByZXR1cm4gQlRUVl9WRVJTSU9OX0NPREU7CisJY2FzZSBCVFRWX1ZFUlNJT046CisJCXJldHVybiBCVFRWX1ZFUlNJT05fQ09ERTsKIAogCS8qICoqKiAgdjRsMSAgKioqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwogCWNhc2UgVklESU9DR0ZSRVE6CkBAIC0xNTc2LDMyICsxNTc2LDMyIEBACiAJCXJldHVybiAwOwogCX0KIAotICAgICAgICBjYXNlIFZJRElPQ0dDSEFOOgotICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3RydWN0IHZpZGVvX2NoYW5uZWwgKnYgPSBhcmc7CisJY2FzZSBWSURJT0NHQ0hBTjoKKwl7CisJCXN0cnVjdCB2aWRlb19jaGFubmVsICp2ID0gYXJnOwogCQl1bnNpZ25lZCBpbnQgY2hhbm5lbCA9IHYtPmNoYW5uZWw7CiAKLSAgICAgICAgICAgICAgICBpZiAoY2hhbm5lbCA+PSBidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLnZpZGVvX2lucHV0cykKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwotICAgICAgICAgICAgICAgIHYtPnR1bmVycz0wOwotICAgICAgICAgICAgICAgIHYtPmZsYWdzID0gVklERU9fVkNfQVVESU87Ci0gICAgICAgICAgICAgICAgdi0+dHlwZSA9IFZJREVPX1RZUEVfQ0FNRVJBOwotICAgICAgICAgICAgICAgIHYtPm5vcm0gPSBidHYtPnR2bm9ybTsKKwkJaWYgKGNoYW5uZWwgPj0gYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS52aWRlb19pbnB1dHMpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJdi0+dHVuZXJzPTA7CisJCXYtPmZsYWdzID0gVklERU9fVkNfQVVESU87CisJCXYtPnR5cGUgPSBWSURFT19UWVBFX0NBTUVSQTsKKwkJdi0+bm9ybSA9IGJ0di0+dHZub3JtOwogCQlpZiAoY2hhbm5lbCA9PSBidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLnR1bmVyKSAgewotICAgICAgICAgICAgICAgICAgICAgICAgc3RyY3B5KHYtPm5hbWUsIlRlbGV2aXNpb24iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHYtPmZsYWdzfD1WSURFT19WQ19UVU5FUjsKLSAgICAgICAgICAgICAgICAgICAgICAgIHYtPnR5cGU9VklERU9fVFlQRV9UVjsKLSAgICAgICAgICAgICAgICAgICAgICAgIHYtPnR1bmVycz0xOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hhbm5lbCA9PSBidHYtPnN2aHMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNweSh2LT5uYW1lLCJTLVZpZGVvIik7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNwcmludGYodi0+bmFtZSwiQ29tcG9zaXRlJWQiLGNoYW5uZWwpOworCQkJc3RyY3B5KHYtPm5hbWUsIlRlbGV2aXNpb24iKTsKKwkJCXYtPmZsYWdzfD1WSURFT19WQ19UVU5FUjsKKwkJCXYtPnR5cGU9VklERU9fVFlQRV9UVjsKKwkJCXYtPnR1bmVycz0xOworCQl9IGVsc2UgaWYgKGNoYW5uZWwgPT0gYnR2LT5zdmhzKSB7CisJCQlzdHJjcHkodi0+bmFtZSwiUy1WaWRlbyIpOworCQl9IGVsc2UgeworCQkJc3ByaW50Zih2LT5uYW1lLCJDb21wb3NpdGUlZCIsY2hhbm5lbCk7CiAJCX0KIAkJcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBWSURJT0NTQ0hBTjoKLSAgICAgICAgewotICAgICAgICAgICAgICAgIHN0cnVjdCB2aWRlb19jaGFubmVsICp2ID0gYXJnOworCX0KKwljYXNlIFZJRElPQ1NDSEFOOgorCXsKKwkJc3RydWN0IHZpZGVvX2NoYW5uZWwgKnYgPSBhcmc7CiAJCXVuc2lnbmVkIGludCBjaGFubmVsID0gdi0+Y2hhbm5lbDsKIAogCQlpZiAoY2hhbm5lbCA+PSBidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLnZpZGVvX2lucHV0cykKQEAgLTE2MjMsNyArMTYyMyw3IEBACiAJCXJldHVybiAwOwogCX0KIAotICAgICAgICBjYXNlIFZJRElPQ0dBVURJTzoKKwljYXNlIFZJRElPQ0dBVURJTzoKIAl7CiAJCXN0cnVjdCB2aWRlb19hdWRpbyAqdiA9IGFyZzsKIApAQCAtMTcyOCw3ICsxNzI4LDcgQEAKIAkJfSBlbHNlIGlmIChpLT5pbmRleCA9PSBidHYtPnN2aHMpIHsKIAkJCXNwcmludGYoaS0+bmFtZSwgIlMtVmlkZW8iKTsKIAkJfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNwcmludGYoaS0+bmFtZSwiQ29tcG9zaXRlJWQiLGktPmluZGV4KTsKKwkJCXNwcmludGYoaS0+bmFtZSwiQ29tcG9zaXRlJWQiLGktPmluZGV4KTsKIAkJfQogCQlpZiAoaS0+aW5kZXggPT0gYnR2LT5pbnB1dCkgewogCQkJX191MzIgZHN0YXR1cyA9IGJ0cmVhZChCVDg0OF9EU1RBVFVTKTsKQEAgLTE4NTEsNiArMTg1MSwxMSBAQAogCQl1cCgmYnR2LT5sb2NrKTsKIAkJcmV0dXJuIDA7CiAJfQorCWNhc2UgVklESU9DX0xPR19TVEFUVVM6CisJeworCQlidHR2X2NhbGxfaTJjX2NsaWVudHMoYnR2LCBWSURJT0NfTE9HX1NUQVRVUywgMCk7CisJCXJldHVybiAwOworCX0KIAogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU5PSU9DVExDTUQ7CkBAIC0yMTYzLDcgKzIxNjgsNyBAQAogCQlpZiAoMCAhPSByZXR2YWwpCiAJCQlyZXR1cm4gcmV0dmFsOwogCQlpZiAobG9ja2VkX2J0cmVzKGZoLT5idHYsIFJFU09VUkNFX1ZCSSkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVCVVNZOworCQkJcmV0dXJuIC1FQlVTWTsKIAkJYnR0dl92YmlfdHJ5X2ZtdChmaCxmKTsKIAkJYnR0dl92Ymlfc2V0bGluZXMoZmgsYnR2LGYtPmZtdC52YmkuY291bnRbMF0pOwogCQlidHR2X3ZiaV9nZXRfZm10KGZoLGYpOwpAQCAtMjIwMSw5ICsyMjA2LDkgQEAKIAkJYnR0dl9yZWluaXRfYnQ4NDgoYnR2KTsKIAogCXN3aXRjaCAoY21kKSB7Ci0gICAgICAgIGNhc2UgVklESU9DU0ZSRVE6Ci0gICAgICAgIGNhc2UgVklESU9DU1RVTkVSOgotICAgICAgICBjYXNlIFZJRElPQ1NDSEFOOgorCWNhc2UgVklESU9DU0ZSRVE6CisJY2FzZSBWSURJT0NTVFVORVI6CisJY2FzZSBWSURJT0NTQ0hBTjoKIAljYXNlIFZJRElPQ19TX0NUUkw6CiAJY2FzZSBWSURJT0NfU19TVEQ6CiAJY2FzZSBWSURJT0NfU19JTlBVVDoKQEAgLTIyMTksMTAgKzIyMjQsMTAgQEAKIAkvKiAqKiogIHY0bDEgICoqKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KIAljYXNlIFZJRElPQ0dDQVA6CiAJewotICAgICAgICAgICAgICAgIHN0cnVjdCB2aWRlb19jYXBhYmlsaXR5ICpjYXAgPSBhcmc7CisJCXN0cnVjdCB2aWRlb19jYXBhYmlsaXR5ICpjYXAgPSBhcmc7CiAKIAkJbWVtc2V0KGNhcCwwLHNpemVvZigqY2FwKSk7Ci0gICAgICAgICAgICAgICAgc3RyY3B5KGNhcC0+bmFtZSxidHYtPnZpZGVvX2Rldi0+bmFtZSk7CisJCXN0cmNweShjYXAtPm5hbWUsYnR2LT52aWRlb19kZXYtPm5hbWUpOwogCQlpZiAoVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRSA9PSBmaC0+dHlwZSkgewogCQkJLyogdmJpICovCiAJCQljYXAtPnR5cGUgPSBWSURfVFlQRV9UVU5FUnxWSURfVFlQRV9URUxFVEVYVDsKQEAgLTIyNDIsNyArMjI0Nyw3IEBACiAJCX0KIAkJY2FwLT5jaGFubmVscyAgPSBidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLnZpZGVvX2lucHV0czsKIAkJY2FwLT5hdWRpb3MgICAgPSBidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLmF1ZGlvX2lucHV0czsKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKKwkJcmV0dXJuIDA7CiAJfQogCiAJY2FzZSBWSURJT0NHUElDVDoKQEAgLTIyOTEsNyArMjI5Niw3IEBACiAJCWJ0ODQ4X2h1ZShidHYscGljLT5odWUpOwogCQlidDg0OF9zYXQoYnR2LHBpYy0+Y29sb3VyKTsKIAkJdXAoJmZoLT5jYXAubG9jayk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7CisJCXJldHVybiAwOwogCX0KIAogCWNhc2UgVklESU9DR1dJTjoKQEAgLTIzNTIsOCArMjM1Nyw4IEBACiAJCXVuc2lnbmVkIGxvbmcgZW5kOwogCiAJCWlmKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pICYmCi0gICAgICAgICAgICAgICAgICAgIWNhcGFibGUoQ0FQX1NZU19SQVdJTykpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVQRVJNOworCQkgICAhY2FwYWJsZShDQVBfU1lTX1JBV0lPKSkKKwkJCXJldHVybiAtRVBFUk07CiAJCWVuZCA9ICh1bnNpZ25lZCBsb25nKWZidWYtPmJhc2UgKwogCQkJZmJ1Zi0+aGVpZ2h0ICogZmJ1Zi0+Ynl0ZXNwZXJsaW5lOwogCQlkb3duKCZmaC0+Y2FwLmxvY2spOwpAQCAtMjQyNyw3ICsyNDMyLDcgQEAKIAkJfQogCiAJCS8qIHN3aXRjaCBvdmVyICovCi0JICAgICAgICByZXR2YWwgPSBidHR2X3N3aXRjaF9vdmVybGF5KGJ0dixmaCxuZXcpOworCQlyZXR2YWwgPSBidHR2X3N3aXRjaF9vdmVybGF5KGJ0dixmaCxuZXcpOwogCQl1cCgmZmgtPmNhcC5sb2NrKTsKIAkJcmV0dXJuIHJldHZhbDsKIAl9CkBAIC0yNTY2LDEzICsyNTcxLDEzIEBACiAJCXJldHVybiAwOwogCX0KIAotICAgICAgICBjYXNlIEJUVFZfVkVSU0lPTjoKLSAgICAgICAgY2FzZSBWSURJT0NHRlJFUToKLSAgICAgICAgY2FzZSBWSURJT0NTRlJFUToKLSAgICAgICAgY2FzZSBWSURJT0NHVFVORVI6Ci0gICAgICAgIGNhc2UgVklESU9DU1RVTkVSOgotICAgICAgICBjYXNlIFZJRElPQ0dDSEFOOgotICAgICAgICBjYXNlIFZJRElPQ1NDSEFOOgorCWNhc2UgQlRUVl9WRVJTSU9OOgorCWNhc2UgVklESU9DR0ZSRVE6CisJY2FzZSBWSURJT0NTRlJFUToKKwljYXNlIFZJRElPQ0dUVU5FUjoKKwljYXNlIFZJRElPQ1NUVU5FUjoKKwljYXNlIFZJRElPQ0dDSEFOOgorCWNhc2UgVklESU9DU0NIQU46CiAJY2FzZSBWSURJT0NHQVVESU86CiAJY2FzZSBWSURJT0NTQVVESU86CiAJCXJldHVybiBidHR2X2NvbW1vbl9pb2N0bHMoYnR2LGNtZCxhcmcpOwpAQCAtMjU4NCw4ICsyNTg5LDggQEAKIAogCQlpZiAoMCA9PSB2NGwyKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0gICAgICAgICAgICAgICAgc3RyY3B5KGNhcC0+ZHJpdmVyLCJidHR2Iik7Ci0gICAgICAgICAgICAgICAgc3RybGNweShjYXAtPmNhcmQsYnR2LT52aWRlb19kZXYtPm5hbWUsc2l6ZW9mKGNhcC0+Y2FyZCkpOworCQlzdHJjcHkoY2FwLT5kcml2ZXIsImJ0dHYiKTsKKwkJc3RybGNweShjYXAtPmNhcmQsYnR2LT52aWRlb19kZXYtPm5hbWUsc2l6ZW9mKGNhcC0+Y2FyZCkpOwogCQlzcHJpbnRmKGNhcC0+YnVzX2luZm8sIlBDSTolcyIscGNpX25hbWUoYnR2LT5jLnBjaSkpOwogCQljYXAtPnZlcnNpb24gPSBCVFRWX1ZFUlNJT05fQ09ERTsKIAkJY2FwLT5jYXBhYmlsaXRpZXMgPQpAQCAtMjg1Niw2ICsyODYxLDcgQEAKIAljYXNlIFZJRElPQ19TX1RVTkVSOgogCWNhc2UgVklESU9DX0dfRlJFUVVFTkNZOgogCWNhc2UgVklESU9DX1NfRlJFUVVFTkNZOgorCWNhc2UgVklESU9DX0xPR19TVEFUVVM6CiAJCXJldHVybiBidHR2X2NvbW1vbl9pb2N0bHMoYnR2LGNtZCxhcmcpOwogCiAJZGVmYXVsdDoKQEAgLTMwOTEsNyArMzA5Nyw3IEBACiB7CiAJLm5hbWUgICAgID0gIlVOU0VUIiwKIAkudHlwZSAgICAgPSBWSURfVFlQRV9DQVBUVVJFfFZJRF9UWVBFX1RVTkVSfAotCSAgICAgICAgICAgIFZJRF9UWVBFX0NMSVBQSU5HfFZJRF9UWVBFX1NDQUxFUywKKwkJICAgIFZJRF9UWVBFX0NMSVBQSU5HfFZJRF9UWVBFX1NDQUxFUywKIAkuaGFyZHdhcmUgPSBWSURfSEFSRFdBUkVfQlQ4NDgsCiAJLmZvcHMgICAgID0gJmJ0dHZfZm9wcywKIAkubWlub3IgICAgPSAtMSwKQEAgLTMxMzcsNyArMzE0Myw3IEBACiAJYXVkaW9fbXV4KGJ0dixBVURJT19SQURJTyk7CiAKIAl1cCgmYnR2LT5sb2NrKTsKLSAgICAgICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgcmFkaW9fcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKQEAgLTMxNjAsMzQgKzMxNjYsMzQgQEAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgVklESU9DR0NBUDoKIAl7Ci0gICAgICAgICAgICAgICAgc3RydWN0IHZpZGVvX2NhcGFiaWxpdHkgKmNhcCA9IGFyZzsKKwkJc3RydWN0IHZpZGVvX2NhcGFiaWxpdHkgKmNhcCA9IGFyZzsKIAogCQltZW1zZXQoY2FwLDAsc2l6ZW9mKCpjYXApKTsKLSAgICAgICAgICAgICAgICBzdHJjcHkoY2FwLT5uYW1lLGJ0di0+cmFkaW9fZGV2LT5uYW1lKTsKLSAgICAgICAgICAgICAgICBjYXAtPnR5cGUgPSBWSURfVFlQRV9UVU5FUjsKKwkJc3RyY3B5KGNhcC0+bmFtZSxidHYtPnJhZGlvX2Rldi0+bmFtZSk7CisJCWNhcC0+dHlwZSA9IFZJRF9UWVBFX1RVTkVSOwogCQljYXAtPmNoYW5uZWxzID0gMTsKIAkJY2FwLT5hdWRpb3MgPSAxOwotICAgICAgICAgICAgICAgIHJldHVybiAwOworCQlyZXR1cm4gMDsKIAl9CiAKLSAgICAgICAgY2FzZSBWSURJT0NHVFVORVI6Ci0gICAgICAgIHsKLSAgICAgICAgICAgICAgICBzdHJ1Y3QgdmlkZW9fdHVuZXIgKnYgPSBhcmc7CisJY2FzZSBWSURJT0NHVFVORVI6CisJeworCQlzdHJ1Y3QgdmlkZW9fdHVuZXIgKnYgPSBhcmc7CiAKLSAgICAgICAgICAgICAgICBpZih2LT50dW5lcikKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworCQlpZih2LT50dW5lcikKKwkJCXJldHVybiAtRUlOVkFMOwogCQltZW1zZXQodiwwLHNpemVvZigqdikpOwotICAgICAgICAgICAgICAgIHN0cmNweSh2LT5uYW1lLCAiUmFkaW8iKTsKLSAgICAgICAgICAgICAgICBidHR2X2NhbGxfaTJjX2NsaWVudHMoYnR2LGNtZCx2KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFZJRElPQ1NUVU5FUjoKKwkJc3RyY3B5KHYtPm5hbWUsICJSYWRpbyIpOworCQlidHR2X2NhbGxfaTJjX2NsaWVudHMoYnR2LGNtZCx2KTsKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgVklESU9DU1RVTkVSOgogCQkvKiBub3RoaW5nIHRvIGRvICovCiAJCXJldHVybiAwOwogCiAJY2FzZSBCVFRWX1ZFUlNJT046Ci0gICAgICAgIGNhc2UgVklESU9DR0ZSRVE6Ci0gICAgICAgIGNhc2UgVklESU9DU0ZSRVE6CisJY2FzZSBWSURJT0NHRlJFUToKKwljYXNlIFZJRElPQ1NGUkVROgogCWNhc2UgVklESU9DR0FVRElPOgogCWNhc2UgVklESU9DU0FVRElPOgogCQlyZXR1cm4gYnR0dl9jb21tb25faW9jdGxzKGJ0dixjbWQsYXJnKTsKQEAgLTM2OTMsNyArMzY5OSw3IEBACiAJCX0KIAogCQlpZiAoYXN0YXQmQlQ4NDhfSU5UX1ZTWU5DKQotICAgICAgICAgICAgICAgICAgICAgICAgYnR2LT5maWVsZF9jb3VudCsrOworCQkJYnR2LT5maWVsZF9jb3VudCsrOwogCiAJCWlmIChhc3RhdCAmIEJUODQ4X0lOVF9HUElOVCkgewogCQkJd2FrZV91cCgmYnR2LT5ncGlvcSk7CkBAIC0zNzA1LDEzICszNzExLDEzIEBACiAJCQl3YWtlX3VwKCZidHYtPmkyY19xdWV1ZSk7CiAJCX0KIAotICAgICAgICAgICAgICAgIGlmICgoYXN0YXQgJiBCVDg0OF9JTlRfUklTQ0kpICAmJiAgKHN0YXQgJiAoNDw8MjgpKSkKKwkJaWYgKChhc3RhdCAmIEJUODQ4X0lOVF9SSVNDSSkgICYmICAoc3RhdCAmICg0PDwyOCkpKQogCQkJYnR0dl9pcnFfc3dpdGNoX3ZiaShidHYpOwogCi0gICAgICAgICAgICAgICAgaWYgKChhc3RhdCAmIEJUODQ4X0lOVF9SSVNDSSkgICYmICAoc3RhdCAmICgyPDwyOCkpKQorCQlpZiAoKGFzdGF0ICYgQlQ4NDhfSU5UX1JJU0NJKSAgJiYgIChzdGF0ICYgKDI8PDI4KSkpCiAJCQlidHR2X2lycV93YWtldXBfdG9wKGJ0dik7CiAKLSAgICAgICAgICAgICAgICBpZiAoKGFzdGF0ICYgQlQ4NDhfSU5UX1JJU0NJKSAgJiYgIChzdGF0ICYgKDE8PDI4KSkpCisJCWlmICgoYXN0YXQgJiBCVDg0OF9JTlRfUklTQ0kpICAmJiAgKHN0YXQgJiAoMTw8MjgpKSkKIAkJCWJ0dHZfaXJxX3N3aXRjaF92aWRlbyhidHYpOwogCiAJCWlmICgoYXN0YXQgJiBCVDg0OF9JTlRfSExPQ0spICAmJiAgYnR2LT5vcHRfYXV0b211dGUpCkBAIC0zNzM2LDEwICszNzQyLDIyIEBACiAKIAkJY291bnQrKzsKIAkJaWYgKGNvdW50ID4gNCkgewotCQkJYnR3cml0ZSgwLCBCVDg0OF9JTlRfTUFTSyk7Ci0JCQlwcmludGsoS0VSTl9FUlIKLQkJCSAgICAgICAiYnR0diVkOiBJUlEgbG9ja3VwLCBjbGVhcmVkIGludCBtYXNrIFsiLCBidHYtPmMubnIpOworCisJCQlpZiAoY291bnQgPiA4IHx8ICEoYXN0YXQgJiBCVDg0OF9JTlRfR1BJTlQpKSB7CisJCQkJYnR3cml0ZSgwLCBCVDg0OF9JTlRfTUFTSyk7CisKKwkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkJICAgImJ0dHYlZDogSVJRIGxvY2t1cCwgY2xlYXJlZCBpbnQgbWFzayBbIiwgYnR2LT5jLm5yKTsKKwkJCX0gZWxzZSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJCSAgICJidHR2JWQ6IElSUSBsb2NrdXAsIGNsZWFyaW5nIEdQSU5UIGZyb20gaW50IG1hc2sgWyIsIGJ0di0+Yy5ucik7CisKKwkJCQlidHdyaXRlKGJ0cmVhZChCVDg0OF9JTlRfTUFTSykgJiAoLTEgXiBCVDg0OF9JTlRfR1BJTlQpLAorCQkJCQkJQlQ4NDhfSU5UX01BU0spOworCQkJfTsKKwogCQkJYnR0dl9wcmludF9pcnFiaXRzKHN0YXQsYXN0YXQpOworCiAJCQlwcmludGsoIl1cbiIpOwogCQl9CiAJfQpAQCAtMzgwOCw3ICszODI2LDcgQEAKIAogCS8qIHZpZGVvICovCiAJYnR2LT52aWRlb19kZXYgPSB2ZGV2X2luaXQoYnR2LCAmYnR0dl92aWRlb190ZW1wbGF0ZSwgInZpZGVvIik7Ci0gICAgICAgIGlmIChOVUxMID09IGJ0di0+dmlkZW9fZGV2KQorCWlmIChOVUxMID09IGJ0di0+dmlkZW9fZGV2KQogCQlnb3RvIGVycjsKIAlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKGJ0di0+dmlkZW9fZGV2LFZGTF9UWVBFX0dSQUJCRVIsdmlkZW9fbnIpPDApCiAJCWdvdG8gZXJyOwpAQCAtMzgxOCwxOCArMzgzNiwxOCBAQAogCiAJLyogdmJpICovCiAJYnR2LT52YmlfZGV2ID0gdmRldl9pbml0KGJ0diwgJmJ0dHZfdmJpX3RlbXBsYXRlLCAidmJpIik7Ci0gICAgICAgIGlmIChOVUxMID09IGJ0di0+dmJpX2RldikKKwlpZiAoTlVMTCA9PSBidHYtPnZiaV9kZXYpCiAJCWdvdG8gZXJyOwotICAgICAgICBpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKGJ0di0+dmJpX2RldixWRkxfVFlQRV9WQkksdmJpX25yKTwwKQorCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoYnR2LT52YmlfZGV2LFZGTF9UWVBFX1ZCSSx2YmlfbnIpPDApCiAJCWdvdG8gZXJyOwogCXByaW50ayhLRVJOX0lORk8gImJ0dHYlZDogcmVnaXN0ZXJlZCBkZXZpY2UgdmJpJWRcbiIsCiAJICAgICAgIGJ0di0+Yy5ucixidHYtPnZiaV9kZXYtPm1pbm9yICYgMHgxZik7CiAKLSAgICAgICAgaWYgKCFidHYtPmhhc19yYWRpbykKKwlpZiAoIWJ0di0+aGFzX3JhZGlvKQogCQlyZXR1cm4gMDsKIAkvKiByYWRpbyAqLwogCWJ0di0+cmFkaW9fZGV2ID0gdmRldl9pbml0KGJ0diwgJnJhZGlvX3RlbXBsYXRlLCAicmFkaW8iKTsKLSAgICAgICAgaWYgKE5VTEwgPT0gYnR2LT5yYWRpb19kZXYpCisJaWYgKE5VTEwgPT0gYnR2LT5yYWRpb19kZXYpCiAJCWdvdG8gZXJyOwogCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoYnR2LT5yYWRpb19kZXYsIFZGTF9UWVBFX1JBRElPLHJhZGlvX25yKTwwKQogCQlnb3RvIGVycjsKQEAgLTM4NTAsMTEgKzM4NjgsMTEgQEAKIHN0YXRpYyB2b2lkIHBjaV9zZXRfY29tbWFuZChzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogI2lmIGRlZmluZWQoX19wb3dlcnBjX18pCi0gICAgICAgIHVuc2lnbmVkIGludCBjbWQ7CisJdW5zaWduZWQgaW50IGNtZDsKIAotICAgICAgICBwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBQQ0lfQ09NTUFORCwgJmNtZCk7Ci0gICAgICAgIGNtZCA9IChjbWQgfCBQQ0lfQ09NTUFORF9NRU1PUlkgKTsKLSAgICAgICAgcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIFBDSV9DT01NQU5ELCBjbWQpOworCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIFBDSV9DT01NQU5ELCAmY21kKTsKKwljbWQgPSAoY21kIHwgUENJX0NPTU1BTkRfTUVNT1JZICk7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIFBDSV9DT01NQU5ELCBjbWQpOwogI2VuZGlmCiB9CiAKQEAgLTM4NjgsNjMgKzM4ODYsNjIgQEAKIAlpZiAoYnR0dl9udW0gPT0gQlRUVl9NQVgpCiAJCXJldHVybiAtRU5PTUVNOwogCXByaW50ayhLRVJOX0lORk8gImJ0dHY6IEJ0OHh4IGNhcmQgZm91bmQgKCVkKS5cbiIsIGJ0dHZfbnVtKTsKLSAgICAgICAgYnR2PSZidHR2c1tidHR2X251bV07CisJYnR2PSZidHR2c1tidHR2X251bV07CiAJbWVtc2V0KGJ0diwwLHNpemVvZigqYnR2KSk7CiAJYnR2LT5jLm5yICA9IGJ0dHZfbnVtOwogCXNwcmludGYoYnR2LT5jLm5hbWUsImJ0dHYlZCIsYnR2LT5jLm5yKTsKIAogCS8qIGluaXRpYWxpemUgc3RydWN0cyAvIGZpbGwgaW4gZGVmYXVsdHMgKi8KLSAgICAgICAgaW5pdF9NVVRFWCgmYnR2LT5sb2NrKTsKLSAgICAgICAgaW5pdF9NVVRFWCgmYnR2LT5yZXNsb2NrKTsKLSAgICAgICAgc3Bpbl9sb2NrX2luaXQoJmJ0di0+c19sb2NrKTsKLSAgICAgICAgc3Bpbl9sb2NrX2luaXQoJmJ0di0+Z3Bpb19sb2NrKTsKLSAgICAgICAgaW5pdF93YWl0cXVldWVfaGVhZCgmYnR2LT5ncGlvcSk7Ci0gICAgICAgIGluaXRfd2FpdHF1ZXVlX2hlYWQoJmJ0di0+aTJjX3F1ZXVlKTsKLSAgICAgICAgSU5JVF9MSVNUX0hFQUQoJmJ0di0+Yy5zdWJzKTsKLSAgICAgICAgSU5JVF9MSVNUX0hFQUQoJmJ0di0+Y2FwdHVyZSk7Ci0gICAgICAgIElOSVRfTElTVF9IRUFEKCZidHYtPnZjYXB0dXJlKTsKKwlpbml0X01VVEVYKCZidHYtPmxvY2spOworCWluaXRfTVVURVgoJmJ0di0+cmVzbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmJ0di0+c19sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmYnR2LT5ncGlvX2xvY2spOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmJ0di0+Z3Bpb3EpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmJ0di0+aTJjX3F1ZXVlKTsKKwlJTklUX0xJU1RfSEVBRCgmYnR2LT5jLnN1YnMpOworCUlOSVRfTElTVF9IRUFEKCZidHYtPmNhcHR1cmUpOworCUlOSVRfTElTVF9IRUFEKCZidHYtPnZjYXB0dXJlKTsKIAl2NGwyX3ByaW9faW5pdCgmYnR2LT5wcmlvKTsKIAogCWluaXRfdGltZXIoJmJ0di0+dGltZW91dCk7CiAJYnR2LT50aW1lb3V0LmZ1bmN0aW9uID0gYnR0dl9pcnFfdGltZW91dDsKIAlidHYtPnRpbWVvdXQuZGF0YSAgICAgPSAodW5zaWduZWQgbG9uZylidHY7CiAKLSAgICAgICAgYnR2LT5pMmNfcmMgPSAtMTsKLSAgICAgICAgYnR2LT50dW5lcl90eXBlICA9IFVOU0VUOwotICAgICAgICBidHYtPnBpbm5hY2xlX2lkID0gVU5TRVQ7CisJYnR2LT5pMmNfcmMgPSAtMTsKKwlidHYtPnR1bmVyX3R5cGUgID0gVU5TRVQ7CisJYnR2LT5waW5uYWNsZV9pZCA9IFVOU0VUOwogCWJ0di0+bmV3X2lucHV0ICAgPSBVTlNFVDsKLQlidHYtPmdwaW9pcnEgICAgID0gMTsKIAlidHYtPmhhc19yYWRpbz1yYWRpb1tidHYtPmMubnJdOwogCiAJLyogcGNpIHN0dWZmIChpbml0LCBnZXQgaXJxL21taW8sIC4uLiAqLwogCWJ0di0+Yy5wY2kgPSBkZXY7Ci0gICAgICAgIGJ0di0+aWQgID0gZGV2LT5kZXZpY2U7CisJYnR2LT5pZCAgPSBkZXYtPmRldmljZTsKIAlpZiAocGNpX2VuYWJsZV9kZXZpY2UoZGV2KSkgewotICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX1dBUk5JTkcgImJ0dHYlZDogQ2FuJ3QgZW5hYmxlIGRldmljZS5cbiIsCisJCXByaW50ayhLRVJOX1dBUk5JTkcgImJ0dHYlZDogQ2FuJ3QgZW5hYmxlIGRldmljZS5cbiIsCiAJCSAgICAgICBidHYtPmMubnIpOwogCQlyZXR1cm4gLUVJTzsKIAl9Ci0gICAgICAgIGlmIChwY2lfc2V0X2RtYV9tYXNrKGRldiwgRE1BXzMyQklUX01BU0spKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fV0FSTklORyAiYnR0diVkOiBObyBzdWl0YWJsZSBETUEgYXZhaWxhYmxlLlxuIiwKKwlpZiAocGNpX3NldF9kbWFfbWFzayhkZXYsIERNQV8zMkJJVF9NQVNLKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJidHR2JWQ6IE5vIHN1aXRhYmxlIERNQSBhdmFpbGFibGUuXG4iLAogCQkgICAgICAgYnR2LT5jLm5yKTsKIAkJcmV0dXJuIC1FSU87Ci0gICAgICAgIH0KKwl9CiAJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocGNpX3Jlc291cmNlX3N0YXJ0KGRldiwwKSwKIAkJCQlwY2lfcmVzb3VyY2VfbGVuKGRldiwwKSwKIAkJCQlidHYtPmMubmFtZSkpIHsKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9XQVJOSU5HICJidHR2JWQ6IGNhbid0IHJlcXVlc3QgaW9tZW0gKDB4JWx4KS5cbiIsCisJCXByaW50ayhLRVJOX1dBUk5JTkcgImJ0dHYlZDogY2FuJ3QgcmVxdWVzdCBpb21lbSAoMHglbHgpLlxuIiwKIAkJICAgICAgIGJ0di0+Yy5uciwgcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwwKSk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQotICAgICAgICBwY2lfc2V0X21hc3RlcihkZXYpOworCXBjaV9zZXRfbWFzdGVyKGRldik7CiAJcGNpX3NldF9jb21tYW5kKGRldik7CiAJcGNpX3NldF9kcnZkYXRhKGRldixidHYpOwogCi0gICAgICAgIHBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgUENJX0NMQVNTX1JFVklTSU9OLCAmYnR2LT5yZXZpc2lvbik7Ci0gICAgICAgIHBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgUENJX0xBVEVOQ1lfVElNRVIsICZsYXQpOwotICAgICAgICBwcmludGsoS0VSTl9JTkZPICJidHR2JWQ6IEJ0JWQgKHJldiAlZCkgYXQgJXMsICIsCi0gICAgICAgICAgICAgICBidHR2X251bSxidHYtPmlkLCBidHYtPnJldmlzaW9uLCBwY2lfbmFtZShkZXYpKTsKLSAgICAgICAgcHJpbnRrKCJpcnE6ICVkLCBsYXRlbmN5OiAlZCwgbW1pbzogMHglbHhcbiIsCisJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBQQ0lfQ0xBU1NfUkVWSVNJT04sICZidHYtPnJldmlzaW9uKTsKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIFBDSV9MQVRFTkNZX1RJTUVSLCAmbGF0KTsKKwlwcmludGsoS0VSTl9JTkZPICJidHR2JWQ6IEJ0JWQgKHJldiAlZCkgYXQgJXMsICIsCisJICAgICAgIGJ0dHZfbnVtLGJ0di0+aWQsIGJ0di0+cmV2aXNpb24sIHBjaV9uYW1lKGRldikpOworCXByaW50aygiaXJxOiAlZCwgbGF0ZW5jeTogJWQsIG1taW86IDB4JWx4XG4iLAogCSAgICAgICBidHYtPmMucGNpLT5pcnEsIGxhdCwgcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwwKSk7CiAJc2NoZWR1bGUoKTsKIApAQCAtMzkzNSwyMyArMzk1MiwyMyBAQAogCQlnb3RvIGZhaWwxOwogCX0KIAotICAgICAgICAvKiBpZGVudGlmeSBjYXJkICovCisJLyogaWRlbnRpZnkgY2FyZCAqLwogCWJ0dHZfaWRjYXJkKGJ0dik7CiAKLSAgICAgICAgLyogZGlzYWJsZSBpcnFzLCByZWdpc3RlciBpcnEgaGFuZGxlciAqLworCS8qIGRpc2FibGUgaXJxcywgcmVnaXN0ZXIgaXJxIGhhbmRsZXIgKi8KIAlidHdyaXRlKDAsIEJUODQ4X0lOVF9NQVNLKTsKLSAgICAgICAgcmVzdWx0ID0gcmVxdWVzdF9pcnEoYnR2LT5jLnBjaS0+aXJxLCBidHR2X2lycSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0FfU0hJUlEgfCBTQV9JTlRFUlJVUFQsYnR2LT5jLm5hbWUsKHZvaWQgKilidHYpOwotICAgICAgICBpZiAocmVzdWx0IDwgMCkgewotICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiYnR0diVkOiBjYW4ndCBnZXQgSVJRICVkXG4iLAorCXJlc3VsdCA9IHJlcXVlc3RfaXJxKGJ0di0+Yy5wY2ktPmlycSwgYnR0dl9pcnEsCisJCQkgICAgIFNBX1NISVJRIHwgU0FfSU5URVJSVVBULGJ0di0+Yy5uYW1lLCh2b2lkICopYnR2KTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgImJ0dHYlZDogY2FuJ3QgZ2V0IElSUSAlZFxuIiwKIAkJICAgICAgIGJ0dHZfbnVtLGJ0di0+Yy5wY2ktPmlycSk7CiAJCWdvdG8gZmFpbDE7Ci0gICAgICAgIH0KKwl9CiAKIAlpZiAoMCAhPSBidHR2X2hhbmRsZV9jaGlwc2V0KGJ0dikpIHsKIAkJcmVzdWx0ID0gLUVJTzsKIAkJZ290byBmYWlsMjsKLSAgICAgICAgfQorCX0KIAogCS8qIGluaXQgb3B0aW9ucyBmcm9tIGluc21vZCBhcmdzICovCiAJYnR2LT5vcHRfY29tYmZpbHRlciA9IGNvbWJmaWx0ZXI7CkBAIC0zOTc3LDI5ICszOTk0LDI5IEBACiAJYnR2LT5pbnB1dCA9IDA7CiAKIAkvKiBpbml0aWFsaXplIGhhcmR3YXJlICovCi0gICAgICAgIGlmIChidHR2X2dwaW8pCi0gICAgICAgICAgICAgICAgYnR0dl9ncGlvX3RyYWNraW5nKGJ0diwicHJlLWluaXQiKTsKKwlpZiAoYnR0dl9ncGlvKQorCQlidHR2X2dwaW9fdHJhY2tpbmcoYnR2LCJwcmUtaW5pdCIpOwogCiAJYnR0dl9yaXNjX2luaXRfbWFpbihidHYpOwogCWluaXRfYnQ4NDgoYnR2KTsKIAogCS8qIGdwaW8gKi8KLSAgICAgICAgYnR3cml0ZSgweDAwLCBCVDg0OF9HUElPX1JFR19JTlApOwotICAgICAgICBidHdyaXRlKDB4MDAsIEJUODQ4X0dQSU9fT1VUX0VOKTsKLSAgICAgICAgaWYgKGJ0dHZfdmVyYm9zZSkKLSAgICAgICAgICAgICAgICBidHR2X2dwaW9fdHJhY2tpbmcoYnR2LCJpbml0Iik7CisJYnR3cml0ZSgweDAwLCBCVDg0OF9HUElPX1JFR19JTlApOworCWJ0d3JpdGUoMHgwMCwgQlQ4NDhfR1BJT19PVVRfRU4pOworCWlmIChidHR2X3ZlcmJvc2UpCisJCWJ0dHZfZ3Bpb190cmFja2luZyhidHYsImluaXQiKTsKIAotICAgICAgICAvKiBuZWVkcyB0byBiZSBkb25lIGJlZm9yZSBpMmMgaXMgcmVnaXN0ZXJlZCAqLwotICAgICAgICBidHR2X2luaXRfY2FyZDEoYnR2KTsKKwkvKiBuZWVkcyB0byBiZSBkb25lIGJlZm9yZSBpMmMgaXMgcmVnaXN0ZXJlZCAqLworCWJ0dHZfaW5pdF9jYXJkMShidHYpOwogCi0gICAgICAgIC8qIHJlZ2lzdGVyIGkyYyArIGdwaW8gKi8KLSAgICAgICAgaW5pdF9idHR2X2kyYyhidHYpOworCS8qIHJlZ2lzdGVyIGkyYyArIGdwaW8gKi8KKwlpbml0X2J0dHZfaTJjKGJ0dik7CiAKLSAgICAgICAgLyogc29tZSBjYXJkLXNwZWNpZmljIHN0dWZmIChuZWVkcyB3b3JraW5nIGkyYykgKi8KLSAgICAgICAgYnR0dl9pbml0X2NhcmQyKGJ0dik7CisJLyogc29tZSBjYXJkLXNwZWNpZmljIHN0dWZmIChuZWVkcyB3b3JraW5nIGkyYykgKi8KKwlidHR2X2luaXRfY2FyZDIoYnR2KTsKIAlpbml0X2lycXJlZyhidHYpOwogCi0gICAgICAgIC8qIHJlZ2lzdGVyIHZpZGVvNGxpbnV4ICsgaW5wdXQgKi8KKwkvKiByZWdpc3RlciB2aWRlbzRsaW51eCArIGlucHV0ICovCiAJaWYgKCFidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLm5vX3ZpZGVvKSB7CiAJCWJ0dHZfcmVnaXN0ZXJfdmlkZW8oYnR2KTsKIAkJYnQ4NDhfYnJpZ2h0KGJ0diwzMjc2OCk7CkBAIC00MDE4LDEwICs0MDM1LDEwIEBACiAKIAkvKiBldmVyeXRoaW5nIGlzIGZpbmUgKi8KIAlidHR2X251bSsrOwotICAgICAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIAogIGZhaWwyOgotICAgICAgICBmcmVlX2lycShidHYtPmMucGNpLT5pcnEsYnR2KTsKKwlmcmVlX2lycShidHYtPmMucGNpLT5pcnEsYnR2KTsKIAogIGZhaWwxOgogCWlmIChidHYtPmJ0ODQ4X21taW8pCkBAIC00MDM0LDEyICs0MDUxLDEyIEBACiAKIHN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBidHR2X3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldikKIHsKLSAgICAgICAgc3RydWN0IGJ0dHYgKmJ0diA9IHBjaV9nZXRfZHJ2ZGF0YShwY2lfZGV2KTsKKwlzdHJ1Y3QgYnR0diAqYnR2ID0gcGNpX2dldF9kcnZkYXRhKHBjaV9kZXYpOwogCiAJaWYgKGJ0dHZfdmVyYm9zZSkKIAkJcHJpbnRrKCJidHR2JWQ6IHVubG9hZGluZ1xuIixidHYtPmMubnIpOwogCi0gICAgICAgIC8qIHNodXRkb3duIGV2ZXJ5dGhpbmcgKERNQStJUlFzKSAqLworCS8qIHNodXRkb3duIGV2ZXJ5dGhpbmcgKERNQStJUlFzKSAqLwogCWJ0YW5kKH4xNSwgQlQ4NDhfR1BJT19ETUFfQ1RMKTsKIAlidHdyaXRlKDAsIEJUODQ4X0lOVF9NQVNLKTsKIAlidHdyaXRlKH4weDAsIEJUODQ4X0lOVF9TVEFUKTsKQEAgLTQwNTIsNyArNDA2OSw3IEBACiAJd2FrZV91cCgmYnR2LT5ncGlvcSk7CiAJYnR0dl9zdWJfZGVsX2RldmljZXMoJmJ0di0+Yyk7CiAKLSAgICAgICAgLyogdW5yZWdpc3RlciBpMmNfYnVzICsgaW5wdXQgKi8KKwkvKiB1bnJlZ2lzdGVyIGkyY19idXMgKyBpbnB1dCAqLwogCWZpbmlfYnR0dl9pMmMoYnR2KTsKIAogCS8qIHVucmVnaXN0ZXIgdmlkZW80bGludXggKi8KQEAgLTQwNjIsMTggKzQwNzksMTggQEAKIAlidGN4X3Jpc2NtZW1fZnJlZShidHYtPmMucGNpLCZidHYtPm1haW4pOwogCiAJLyogZnJlZSByZXNzb3VyY2VzICovCi0gICAgICAgIGZyZWVfaXJxKGJ0di0+Yy5wY2ktPmlycSxidHYpOworCWZyZWVfaXJxKGJ0di0+Yy5wY2ktPmlycSxidHYpOwogCWlvdW5tYXAoYnR2LT5idDg0OF9tbWlvKTsKLSAgICAgICAgcmVsZWFzZV9tZW1fcmVnaW9uKHBjaV9yZXNvdXJjZV9zdGFydChidHYtPmMucGNpLDApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNpX3Jlc291cmNlX2xlbihidHYtPmMucGNpLDApKTsKKwlyZWxlYXNlX21lbV9yZWdpb24ocGNpX3Jlc291cmNlX3N0YXJ0KGJ0di0+Yy5wY2ksMCksCisJCQkgICBwY2lfcmVzb3VyY2VfbGVuKGJ0di0+Yy5wY2ksMCkpOwogCiAJcGNpX3NldF9kcnZkYXRhKHBjaV9kZXYsIE5VTEwpOwotICAgICAgICByZXR1cm47CisJcmV0dXJuOwogfQogCiBzdGF0aWMgaW50IGJ0dHZfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotICAgICAgICBzdHJ1Y3QgYnR0diAqYnR2ID0gcGNpX2dldF9kcnZkYXRhKHBjaV9kZXYpOworCXN0cnVjdCBidHR2ICpidHYgPSBwY2lfZ2V0X2RydmRhdGEocGNpX2Rldik7CiAJc3RydWN0IGJ0dHZfYnVmZmVyX3NldCBpZGxlOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTQxMDgsNyArNDEyNSw3IEBACiAKIHN0YXRpYyBpbnQgYnR0dl9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYpCiB7Ci0gICAgICAgIHN0cnVjdCBidHR2ICpidHYgPSBwY2lfZ2V0X2RydmRhdGEocGNpX2Rldik7CisJc3RydWN0IGJ0dHYgKmJ0diA9IHBjaV9nZXRfZHJ2ZGF0YShwY2lfZGV2KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBlcnI7CiAKQEAgLTQxNTMsMjQgKzQxNzAsMjQgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGJ0dHZfcGNpX3RibFtdID0gewotICAgICAgICB7UENJX1ZFTkRPUl9JRF9CUk9PS1RSRUUsIFBDSV9ERVZJQ0VfSURfQlQ4NDgsCi0gICAgICAgICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9CUk9PS1RSRUUsIFBDSV9ERVZJQ0VfSURfQlQ4NDgsCisJIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAogCXtQQ0lfVkVORE9SX0lEX0JST09LVFJFRSwgUENJX0RFVklDRV9JRF9CVDg0OSwKLSAgICAgICAgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCSBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKIAl7UENJX1ZFTkRPUl9JRF9CUk9PS1RSRUUsIFBDSV9ERVZJQ0VfSURfQlQ4NzgsCi0gICAgICAgICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwkgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCiAJe1BDSV9WRU5ET1JfSURfQlJPT0tUUkVFLCBQQ0lfREVWSUNFX0lEX0JUODc5LAotICAgICAgICAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCi0gICAgICAgIHswLH0KKwkgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJezAsfQogfTsKIAogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGJ0dHZfcGNpX3RibCk7CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBidHR2X3BjaV9kcml2ZXIgPSB7Ci0gICAgICAgIC5uYW1lICAgICA9ICJidHR2IiwKLSAgICAgICAgLmlkX3RhYmxlID0gYnR0dl9wY2lfdGJsLAotICAgICAgICAucHJvYmUgICAgPSBidHR2X3Byb2JlLAotICAgICAgICAucmVtb3ZlICAgPSBfX2RldmV4aXRfcChidHR2X3JlbW92ZSksCisJLm5hbWUgICAgID0gImJ0dHYiLAorCS5pZF90YWJsZSA9IGJ0dHZfcGNpX3RibCwKKwkucHJvYmUgICAgPSBidHR2X3Byb2JlLAorCS5yZW1vdmUgICA9IF9fZGV2ZXhpdF9wKGJ0dHZfcmVtb3ZlKSwKIAkuc3VzcGVuZCAgPSBidHR2X3N1c3BlbmQsCiAJLnJlc3VtZSAgID0gYnR0dl9yZXN1bWUsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idHR2LWdwaW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnR0di1ncGlvLmMKaW5kZXggNmIyODBjMC4uNTc1Y2U4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idHR2LWdwaW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0dHYtZ3Bpby5jCkBAIC03LDcgKzcsNyBAQAogCiAKICAgICBDb3B5cmlnaHQgKEMpIDE5OTYsOTcsOTggUmFscGggIE1ldHpsZXIgKHJqa21AdGhwLnVuaS1rb2Vsbi5kZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICYgTWFyY3VzIE1ldHpsZXIgKG1vY21AdGhwLnVuaS1rb2Vsbi5kZSkKKwkJCSAgICYgTWFyY3VzIE1ldHpsZXIgKG1vY21AdGhwLnVuaS1rb2Vsbi5kZSkKICAgICAoYykgMTk5OS0yMDAzIEdlcmQgS25vcnIgPGtyYXhlbEBieXRlc2V4Lm9yZz4KIAogICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0dHYtaTJjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0dHYtaTJjLmMKaW5kZXggZTY4NGRmMy4uNzc2MTllYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idHR2LWkyYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnR0di1pMmMuYwpAQCAtNSw3ICs1LDcgQEAKICAgICBidHR2IC0gQnQ4NDggZnJhbWUgZ3JhYmJlciBkcml2ZXIKIAogICAgIENvcHlyaWdodCAoQykgMTk5Niw5Nyw5OCBSYWxwaCAgTWV0emxlciAocmprbUB0aHAudW5pLWtvZWxuLmRlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBNYXJjdXMgTWV0emxlciAobW9jbUB0aHAudW5pLWtvZWxuLmRlKQorCQkJICAgJiBNYXJjdXMgTWV0emxlciAobW9jbUB0aHAudW5pLWtvZWxuLmRlKQogICAgIChjKSAxOTk5LTIwMDMgR2VyZCBLbm9yciA8a3JheGVsQGJ5dGVzZXgub3JnPgogCiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTIzNyw3ICsyMzcsNyBAQAogIGVycjoKIAlpZiAoaTJjX2RlYnVnKQogCQlwcmludGsoIiBFUlI6ICVkXG4iLHJldHZhbCk7Ci0gICAgICAgCXJldHVybiByZXR2YWw7CisJcmV0dXJuIHJldHZhbDsKIH0KIAogc3RhdGljIGludCBidHR2X2kyY194ZmVyKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsIHN0cnVjdCBpMmNfbXNnICptc2dzLCBpbnQgbnVtKQpAQCAtMjkwLDcgKzI5MCwxMyBAQAogCiBzdGF0aWMgaW50IGF0dGFjaF9pbmZvcm0oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLSAgICAgICAgc3RydWN0IGJ0dHYgKmJ0diA9IGkyY19nZXRfYWRhcGRhdGEoY2xpZW50LT5hZGFwdGVyKTsKKwlzdHJ1Y3QgYnR0diAqYnR2ID0gaTJjX2dldF9hZGFwZGF0YShjbGllbnQtPmFkYXB0ZXIpOworCWludCBhZGRyPUFERFJfVU5TRVQ7CisKKworCWlmIChBRERSX1VOU0VUICE9IGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0udHVuZXJfYWRkcikKKwkJYWRkciA9IGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0udHVuZXJfYWRkcjsKKwogCiAJaWYgKGJ0dHZfZGVidWcpCiAJCXByaW50ayhLRVJOX0RFQlVHICJidHR2JWQ6ICVzIGkyYyBhdHRhY2ggW2FkZHI9MHgleCxjbGllbnQ9JXNdXG4iLApAQCAtMzAwLDE5ICszMDYsMjAgQEAKIAkJcmV0dXJuIDA7CiAKIAlpZiAoYnR2LT50dW5lcl90eXBlICE9IFVOU0VUKSB7Ci0JICAgICAgICBzdHJ1Y3QgdHVuZXJfc2V0dXAgdHVuX3NldHVwOworCQlzdHJ1Y3QgdHVuZXJfc2V0dXAgdHVuX3NldHVwOwogCi0JICAgICAgICB0dW5fc2V0dXAubW9kZV9tYXNrID0gVF9SQURJTyB8IFRfQU5BTE9HX1RWIHwgVF9ESUdJVEFMX1RWOwotCQl0dW5fc2V0dXAudHlwZSA9IGJ0di0+dHVuZXJfdHlwZTsKLQkJdHVuX3NldHVwLmFkZHIgPSBBRERSX1VOU0VUOworCQlpZiAoKGFkZHI9PUFERFJfVU5TRVQpIHx8CisJCQkJKGFkZHI9PWNsaWVudC0+YWRkcikpIHsKIAotCQljbGllbnQtPmRyaXZlci0+Y29tbWFuZCAoY2xpZW50LCBUVU5FUl9TRVRfVFlQRV9BRERSLCAmdHVuX3NldHVwKTsKKwkJCXR1bl9zZXR1cC5tb2RlX21hc2sgPSBUX0FOQUxPR19UViB8IFRfRElHSVRBTF9UViB8IFRfUkFESU87CisJCQl0dW5fc2V0dXAudHlwZSA9IGJ0di0+dHVuZXJfdHlwZTsKKwkJCXR1bl9zZXR1cC5hZGRyID0gYWRkcjsKKwkJCWJ0dHZfY2FsbF9pMmNfY2xpZW50cyhidHYsIFRVTkVSX1NFVF9UWVBFX0FERFIsICZ0dW5fc2V0dXApOworCQl9CisKIAl9CiAKLQlpZiAoYnR2LT5waW5uYWNsZV9pZCAhPSBVTlNFVCkKLQkJY2xpZW50LT5kcml2ZXItPmNvbW1hbmQoY2xpZW50LEFVRENfQ09ORklHX1BJTk5BQ0xFLAotCQkJCSAgICAgICZidHYtPnBpbm5hY2xlX2lkKTsKLSAgICAgICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiB9CiAKIHZvaWQgYnR0dl9jYWxsX2kyY19jbGllbnRzKHN0cnVjdCBidHR2ICpidHYsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKQEAgLTMzMCw0MyArMzM3LDQzIEBACiAvKiByZWFkIEkyQyAqLwogaW50IGJ0dHZfSTJDUmVhZChzdHJ1Y3QgYnR0diAqYnR2LCB1bnNpZ25lZCBjaGFyIGFkZHIsIGNoYXIgKnByb2JlX2ZvcikKIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBidWZmZXIgPSAwOworCXVuc2lnbmVkIGNoYXIgYnVmZmVyID0gMDsKIAogCWlmICgwICE9IGJ0di0+aTJjX3JjKQogCQlyZXR1cm4gLTE7CiAJaWYgKGJ0dHZfdmVyYm9zZSAmJiBOVUxMICE9IHByb2JlX2ZvcikKIAkJcHJpbnRrKEtFUk5fSU5GTyAiYnR0diVkOiBpMmM6IGNoZWNraW5nIGZvciAlcyBAIDB4JTAyeC4uLiAiLAogCQkgICAgICAgYnR2LT5jLm5yLHByb2JlX2ZvcixhZGRyKTsKLSAgICAgICAgYnR2LT5pMmNfY2xpZW50LmFkZHIgPSBhZGRyID4+IDE7Ci0gICAgICAgIGlmICgxICE9IGkyY19tYXN0ZXJfcmVjdigmYnR2LT5pMmNfY2xpZW50LCAmYnVmZmVyLCAxKSkgeworCWJ0di0+aTJjX2NsaWVudC5hZGRyID0gYWRkciA+PiAxOworCWlmICgxICE9IGkyY19tYXN0ZXJfcmVjdigmYnR2LT5pMmNfY2xpZW50LCAmYnVmZmVyLCAxKSkgewogCQlpZiAoTlVMTCAhPSBwcm9iZV9mb3IpIHsKIAkJCWlmIChidHR2X3ZlcmJvc2UpCiAJCQkJcHJpbnRrKCJub3QgZm91bmRcbiIpOwogCQl9IGVsc2UKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgImJ0dHYlZDogaTJjIHJlYWQgMHgleDogZXJyb3JcbiIsCiAJCQkgICAgICAgYnR2LT5jLm5yLGFkZHIpOwotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKwkJcmV0dXJuIC0xOwogCX0KIAlpZiAoYnR0dl92ZXJib3NlICYmIE5VTEwgIT0gcHJvYmVfZm9yKQogCQlwcmludGsoImZvdW5kXG4iKTsKLSAgICAgICAgcmV0dXJuIGJ1ZmZlcjsKKwlyZXR1cm4gYnVmZmVyOwogfQogCiAvKiB3cml0ZSBJMkMgKi8KIGludCBidHR2X0kyQ1dyaXRlKHN0cnVjdCBidHR2ICpidHYsIHVuc2lnbmVkIGNoYXIgYWRkciwgdW5zaWduZWQgY2hhciBiMSwKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBiMiwgaW50IGJvdGgpCisJCSAgICB1bnNpZ25lZCBjaGFyIGIyLCBpbnQgYm90aCkKIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBidWZmZXJbMl07Ci0gICAgICAgIGludCBieXRlcyA9IGJvdGggPyAyIDogMTsKKwl1bnNpZ25lZCBjaGFyIGJ1ZmZlclsyXTsKKwlpbnQgYnl0ZXMgPSBib3RoID8gMiA6IDE7CiAKIAlpZiAoMCAhPSBidHYtPmkyY19yYykKIAkJcmV0dXJuIC0xOwotICAgICAgICBidHYtPmkyY19jbGllbnQuYWRkciA9IGFkZHIgPj4gMTsKLSAgICAgICAgYnVmZmVyWzBdID0gYjE7Ci0gICAgICAgIGJ1ZmZlclsxXSA9IGIyOwotICAgICAgICBpZiAoYnl0ZXMgIT0gaTJjX21hc3Rlcl9zZW5kKCZidHYtPmkyY19jbGllbnQsIGJ1ZmZlciwgYnl0ZXMpKQorCWJ0di0+aTJjX2NsaWVudC5hZGRyID0gYWRkciA+PiAxOworCWJ1ZmZlclswXSA9IGIxOworCWJ1ZmZlclsxXSA9IGIyOworCWlmIChieXRlcyAhPSBpMmNfbWFzdGVyX3NlbmQoJmJ0di0+aTJjX2NsaWVudCwgYnVmZmVyLCBieXRlcykpCiAJCXJldHVybiAtMTsKLSAgICAgICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiB9CiAKIC8qIHJlYWQgRUVQUk9NIGNvbnRlbnQgKi8KQEAgLTQzMSw4ICs0MzgsOCBAQAogCQkgImJ0JWQgIyVkIFslc10iLCBidHYtPmlkLCBidHYtPmMubnIsCiAJCSBidHYtPnVzZV9pMmNfaHcgPyAiaHciIDogInN3Iik7CiAKLSAgICAgICAgaTJjX3NldF9hZGFwZGF0YSgmYnR2LT5jLmkyY19hZGFwLCBidHYpOwotICAgICAgICBidHYtPmkyY19jbGllbnQuYWRhcHRlciA9ICZidHYtPmMuaTJjX2FkYXA7CisJaTJjX3NldF9hZGFwZGF0YSgmYnR2LT5jLmkyY19hZGFwLCBidHYpOworCWJ0di0+aTJjX2NsaWVudC5hZGFwdGVyID0gJmJ0di0+Yy5pMmNfYWRhcDsKIAogI2lmZGVmIEkyQ19DTEFTU19UVl9BTkFMT0cKIAlpZiAoYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5ub192aWRlbykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnR0di1pZi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9idHR2LWlmLmMKaW5kZXggZThhYWRhNy4uMTliNTY0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idHR2LWlmLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idHR2LWlmLmMKQEAgLTEsMTMgKzEsMTMgQEAKIC8qCiAKICAgICBidHR2LWlmLmMgIC0tICBvbGQgZ3BpbyBpbnRlcmZhY2UgdG8gb3RoZXIga2VybmVsIG1vZHVsZXMKLSAgICAgICAgICAgICAgICAgICBkb24ndCB1c2UgaW4gbmV3IGNvZGUsIHdpbGwgZ28gYXdheSBpbiAyLjcKKwkJICAgZG9uJ3QgdXNlIGluIG5ldyBjb2RlLCB3aWxsIGdvIGF3YXkgaW4gMi43CiAJCSAgIGhhdmUgYSBsb29rIGF0IGJ0dHYtZ3Bpby5jIGluc3RlYWQuCiAKICAgICBidHR2IC0gQnQ4NDggZnJhbWUgZ3JhYmJlciBkcml2ZXIKIAogICAgIENvcHlyaWdodCAoQykgMTk5Niw5Nyw5OCBSYWxwaCAgTWV0emxlciAocmprbUB0aHAudW5pLWtvZWxuLmRlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBNYXJjdXMgTWV0emxlciAobW9jbUB0aHAudW5pLWtvZWxuLmRlKQorCQkJICAgJiBNYXJjdXMgTWV0emxlciAobW9jbUB0aHAudW5pLWtvZWxuLmRlKQogICAgIChjKSAxOTk5LTIwMDMgR2VyZCBLbm9yciA8a3JheGVsQGJ5dGVzZXgub3JnPgogCiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnR0di1yaXNjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0dHYtcmlzYy5jCmluZGV4IGE1ZWQ5OWI4Li5iNDBlOTczIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0dHYtcmlzYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnR0di1yaXNjLmMKQEAgLTc0LDI3ICs3NCwyNyBAQAogCQl9CiAJCWlmIChicGwgPD0gc2dfZG1hX2xlbihzZyktb2Zmc2V0KSB7CiAJCQkvKiBmaXRzIGludG8gY3VycmVudCBjaHVuayAqLwotICAgICAgICAgICAgICAgICAgICAgICAgKihycCsrKT1jcHVfdG9fbGUzMihCVDg0OF9SSVNDX1dSSVRFfEJUODQ4X1JJU0NfU09MfAorCQkJKihycCsrKT1jcHVfdG9fbGUzMihCVDg0OF9SSVNDX1dSSVRFfEJUODQ4X1JJU0NfU09MfAogCQkJCQkgICAgQlQ4NDhfUklTQ19FT0x8YnBsKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICoocnArKyk9Y3B1X3RvX2xlMzIoc2dfZG1hX2FkZHJlc3Moc2cpK29mZnNldCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQrPWJwbDsKKwkJCSoocnArKyk9Y3B1X3RvX2xlMzIoc2dfZG1hX2FkZHJlc3Moc2cpK29mZnNldCk7CisJCQlvZmZzZXQrPWJwbDsKIAkJfSBlbHNlIHsKIAkJCS8qIHNjYW5saW5lIG5lZWRzIHRvIGJlIHNwbGl0dGVkICovCi0gICAgICAgICAgICAgICAgICAgICAgICB0b2RvID0gYnBsOwotICAgICAgICAgICAgICAgICAgICAgICAgKihycCsrKT1jcHVfdG9fbGUzMihCVDg0OF9SSVNDX1dSSVRFfEJUODQ4X1JJU0NfU09MfAorCQkJdG9kbyA9IGJwbDsKKwkJCSoocnArKyk9Y3B1X3RvX2xlMzIoQlQ4NDhfUklTQ19XUklURXxCVDg0OF9SSVNDX1NPTHwKIAkJCQkJICAgIChzZ19kbWFfbGVuKHNnKS1vZmZzZXQpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICoocnArKyk9Y3B1X3RvX2xlMzIoc2dfZG1hX2FkZHJlc3Moc2cpK29mZnNldCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0b2RvIC09IChzZ19kbWFfbGVuKHNnKS1vZmZzZXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNnKys7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAodG9kbyA+IHNnX2RtYV9sZW4oc2cpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoocnArKyk9Y3B1X3RvX2xlMzIoQlQ4NDhfUklTQ19XUklURXwKKwkJCSoocnArKyk9Y3B1X3RvX2xlMzIoc2dfZG1hX2FkZHJlc3Moc2cpK29mZnNldCk7CisJCQl0b2RvIC09IChzZ19kbWFfbGVuKHNnKS1vZmZzZXQpOworCQkJb2Zmc2V0ID0gMDsKKwkJCXNnKys7CisJCQl3aGlsZSAodG9kbyA+IHNnX2RtYV9sZW4oc2cpKSB7CisJCQkJKihycCsrKT1jcHVfdG9fbGUzMihCVDg0OF9SSVNDX1dSSVRFfAogCQkJCQkJICAgIHNnX2RtYV9sZW4oc2cpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihycCsrKT1jcHVfdG9fbGUzMihzZ19kbWFfYWRkcmVzcyhzZykpOworCQkJCSoocnArKyk9Y3B1X3RvX2xlMzIoc2dfZG1hX2FkZHJlc3Moc2cpKTsKIAkJCQl0b2RvIC09IHNnX2RtYV9sZW4oc2cpOwogCQkJCXNnKys7CiAJCQl9Ci0gICAgICAgICAgICAgICAgICAgICAgICAqKHJwKyspPWNwdV90b19sZTMyKEJUODQ4X1JJU0NfV1JJVEV8QlQ4NDhfUklTQ19FT0x8CisJCQkqKHJwKyspPWNwdV90b19sZTMyKEJUODQ4X1JJU0NfV1JJVEV8QlQ4NDhfUklTQ19FT0x8CiAJCQkJCSAgICB0b2RvKTsKIAkJCSoocnArKyk9Y3B1X3RvX2xlMzIoc2dfZG1hX2FkZHJlc3Moc2cpKTsKIAkJCW9mZnNldCArPSB0b2RvOwpAQCAtMjAxLDggKzIwMSw4IEBACiAJCQkJcmkgfD0gQlQ4NDhfUklTQ19FT0w7CiAKIAkJCS8qIHdyaXRlIHJpc2MgaW5zdHJ1Y3Rpb24gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICoocnArKyk9Y3B1X3RvX2xlMzIocmkgfCB5bGVuKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICoocnArKyk9Y3B1X3RvX2xlMzIoKCh5bGVuID4+IGhzaGlmdCkgPDwgMTYpIHwKKwkJCSoocnArKyk9Y3B1X3RvX2xlMzIocmkgfCB5bGVuKTsKKwkJCSoocnArKyk9Y3B1X3RvX2xlMzIoKCh5bGVuID4+IGhzaGlmdCkgPDwgMTYpIHwKIAkJCQkJICAgICh5bGVuID4+IGhzaGlmdCkpOwogCQkJKihycCsrKT1jcHVfdG9fbGUzMihzZ19kbWFfYWRkcmVzcyh5c2cpK3lvZmZzZXQpOwogCQkJeW9mZnNldCArPSB5bGVuOwpAQCAtMzE5LDcgKzMxOSw3IEBACiAJICAgICAgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgaW50ZXJsZWF2ZWQsIGludCBub3JtKQogewogCWNvbnN0IHN0cnVjdCBidHR2X3R2bm9ybSAqdHZub3JtID0gJmJ0dHZfdHZub3Jtc1tub3JtXTsKLSAgICAgICAgdTMyIHhzZiwgc3I7CisJdTMyIHhzZiwgc3I7CiAJaW50IHZkZWxheTsKIAogCWludCBzd2lkdGggICAgICAgPSB0dm5vcm0tPnN3aWR0aDsKQEAgLTMzNCw1MiArMzM0LDUyIEBACiAKIAl2ZGVsYXkgPSB0dm5vcm0tPnZkZWxheTsKIAotICAgICAgICB4c2YgPSAod2lkdGgqc2NhbGVkdHdpZHRoKS9zd2lkdGg7Ci0gICAgICAgIGdlby0+aHNjYWxlID0gICgodG90YWx3aWR0aCo0MDk2VUwpL3hzZi00MDk2KTsKLSAgICAgICAgZ2VvLT5oZGVsYXkgPSAgdHZub3JtLT5oZGVsYXl4MTsKLSAgICAgICAgZ2VvLT5oZGVsYXkgPSAgKGdlby0+aGRlbGF5KndpZHRoKS9zd2lkdGg7Ci0gICAgICAgIGdlby0+aGRlbGF5ICY9IDB4M2ZlOwotICAgICAgICBzciA9ICgodHZub3JtLT5zaGVpZ2h0ID4+IChpbnRlcmxlYXZlZD8wOjEpKSo1MTIpL2hlaWdodCAtIDUxMjsKLSAgICAgICAgZ2VvLT52c2NhbGUgPSAgKDB4MTAwMDBVTC1zcikgJiAweDFmZmY7Ci0gICAgICAgIGdlby0+Y3JvcCAgID0gICgod2lkdGg+PjgpJjB4MDMpIHwgKChnZW8tPmhkZWxheT4+NikmMHgwYykgfAotICAgICAgICAgICAgICAgICgodHZub3JtLT5zaGVpZ2h0Pj40KSYweDMwKSB8ICgodmRlbGF5Pj4yKSYweGMwKTsKLSAgICAgICAgZ2VvLT52c2NhbGUgfD0gaW50ZXJsZWF2ZWQgPyAoQlQ4NDhfVlNDQUxFX0lOVDw8OCkgOiAwOwotICAgICAgICBnZW8tPnZkZWxheSAgPSAgdmRlbGF5OwotICAgICAgICBnZW8tPndpZHRoICAgPSAgd2lkdGg7Ci0gICAgICAgIGdlby0+c2hlaWdodCA9ICB0dm5vcm0tPnNoZWlnaHQ7CisJeHNmID0gKHdpZHRoKnNjYWxlZHR3aWR0aCkvc3dpZHRoOworCWdlby0+aHNjYWxlID0gICgodG90YWx3aWR0aCo0MDk2VUwpL3hzZi00MDk2KTsKKwlnZW8tPmhkZWxheSA9ICB0dm5vcm0tPmhkZWxheXgxOworCWdlby0+aGRlbGF5ID0gIChnZW8tPmhkZWxheSp3aWR0aCkvc3dpZHRoOworCWdlby0+aGRlbGF5ICY9IDB4M2ZlOworCXNyID0gKCh0dm5vcm0tPnNoZWlnaHQgPj4gKGludGVybGVhdmVkPzA6MSkpKjUxMikvaGVpZ2h0IC0gNTEyOworCWdlby0+dnNjYWxlID0gICgweDEwMDAwVUwtc3IpICYgMHgxZmZmOworCWdlby0+Y3JvcCAgID0gICgod2lkdGg+PjgpJjB4MDMpIHwgKChnZW8tPmhkZWxheT4+NikmMHgwYykgfAorCQkoKHR2bm9ybS0+c2hlaWdodD4+NCkmMHgzMCkgfCAoKHZkZWxheT4+MikmMHhjMCk7CisJZ2VvLT52c2NhbGUgfD0gaW50ZXJsZWF2ZWQgPyAoQlQ4NDhfVlNDQUxFX0lOVDw8OCkgOiAwOworCWdlby0+dmRlbGF5ICA9ICB2ZGVsYXk7CisJZ2VvLT53aWR0aCAgID0gIHdpZHRoOworCWdlby0+c2hlaWdodCA9ICB0dm5vcm0tPnNoZWlnaHQ7CiAJZ2VvLT52dG90YWwgID0gIHR2bm9ybS0+dnRvdGFsOwogCi0gICAgICAgIGlmIChidHYtPm9wdF9jb21iZmlsdGVyKSB7Ci0gICAgICAgICAgICAgICAgZ2VvLT52dGMgID0gKHdpZHRoIDwgMTkzKSA/IDIgOiAoKHdpZHRoIDwgMzg1KSA/IDEgOiAwKTsKLSAgICAgICAgICAgICAgICBnZW8tPmNvbWIgPSAod2lkdGggPCA3NjkpID8gMSA6IDA7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZ2VvLT52dGMgID0gMDsKLSAgICAgICAgICAgICAgICBnZW8tPmNvbWIgPSAwOwotICAgICAgICB9CisJaWYgKGJ0di0+b3B0X2NvbWJmaWx0ZXIpIHsKKwkJZ2VvLT52dGMgID0gKHdpZHRoIDwgMTkzKSA/IDIgOiAoKHdpZHRoIDwgMzg1KSA/IDEgOiAwKTsKKwkJZ2VvLT5jb21iID0gKHdpZHRoIDwgNzY5KSA/IDEgOiAwOworCX0gZWxzZSB7CisJCWdlby0+dnRjICA9IDA7CisJCWdlby0+Y29tYiA9IDA7CisJfQogfQogCiBzdGF0aWMgdm9pZAogYnR0dl9hcHBseV9nZW8oc3RydWN0IGJ0dHYgKmJ0diwgc3RydWN0IGJ0dHZfZ2VvbWV0cnkgKmdlbywgaW50IG9kZCkKIHsKLSAgICAgICAgaW50IG9mZiA9IG9kZCA/IDB4ODAgOiAweDAwOworCWludCBvZmYgPSBvZGQgPyAweDgwIDogMHgwMDsKIAogCWlmIChnZW8tPmNvbWIpCiAJCWJ0b3IoQlQ4NDhfVlNDQUxFX0NPTUIsIEJUODQ4X0VfVlNDQUxFX0hJK29mZik7CiAJZWxzZQogCQlidGFuZCh+QlQ4NDhfVlNDQUxFX0NPTUIsIEJUODQ4X0VfVlNDQUxFX0hJK29mZik7CiAKLSAgICAgICAgYnR3cml0ZShnZW8tPnZ0YywgICAgICAgICAgICAgQlQ4NDhfRV9WVEMrb2ZmKTsKLSAgICAgICAgYnR3cml0ZShnZW8tPmhzY2FsZSA+PiA4LCAgICAgQlQ4NDhfRV9IU0NBTEVfSEkrb2ZmKTsKLSAgICAgICAgYnR3cml0ZShnZW8tPmhzY2FsZSAmIDB4ZmYsICAgQlQ4NDhfRV9IU0NBTEVfTE8rb2ZmKTsKLSAgICAgICAgYnRhb3IoKGdlby0+dnNjYWxlPj44KSwgMHhlMCwgQlQ4NDhfRV9WU0NBTEVfSEkrb2ZmKTsKLSAgICAgICAgYnR3cml0ZShnZW8tPnZzY2FsZSAmIDB4ZmYsICAgQlQ4NDhfRV9WU0NBTEVfTE8rb2ZmKTsKLSAgICAgICAgYnR3cml0ZShnZW8tPndpZHRoICYgMHhmZiwgICAgQlQ4NDhfRV9IQUNUSVZFX0xPK29mZik7Ci0gICAgICAgIGJ0d3JpdGUoZ2VvLT5oZGVsYXkgJiAweGZmLCAgIEJUODQ4X0VfSERFTEFZX0xPK29mZik7Ci0gICAgICAgIGJ0d3JpdGUoZ2VvLT5zaGVpZ2h0ICYgMHhmZiwgIEJUODQ4X0VfVkFDVElWRV9MTytvZmYpOwotICAgICAgICBidHdyaXRlKGdlby0+dmRlbGF5ICYgMHhmZiwgICBCVDg0OF9FX1ZERUxBWV9MTytvZmYpOwotICAgICAgICBidHdyaXRlKGdlby0+Y3JvcCwgICAgICAgICAgICBCVDg0OF9FX0NST1Arb2ZmKTsKKwlidHdyaXRlKGdlby0+dnRjLCAgICAgICAgICAgICBCVDg0OF9FX1ZUQytvZmYpOworCWJ0d3JpdGUoZ2VvLT5oc2NhbGUgPj4gOCwgICAgIEJUODQ4X0VfSFNDQUxFX0hJK29mZik7CisJYnR3cml0ZShnZW8tPmhzY2FsZSAmIDB4ZmYsICAgQlQ4NDhfRV9IU0NBTEVfTE8rb2ZmKTsKKwlidGFvcigoZ2VvLT52c2NhbGU+PjgpLCAweGUwLCBCVDg0OF9FX1ZTQ0FMRV9ISStvZmYpOworCWJ0d3JpdGUoZ2VvLT52c2NhbGUgJiAweGZmLCAgIEJUODQ4X0VfVlNDQUxFX0xPK29mZik7CisJYnR3cml0ZShnZW8tPndpZHRoICYgMHhmZiwgICAgQlQ4NDhfRV9IQUNUSVZFX0xPK29mZik7CisJYnR3cml0ZShnZW8tPmhkZWxheSAmIDB4ZmYsICAgQlQ4NDhfRV9IREVMQVlfTE8rb2ZmKTsKKwlidHdyaXRlKGdlby0+c2hlaWdodCAmIDB4ZmYsICBCVDg0OF9FX1ZBQ1RJVkVfTE8rb2ZmKTsKKwlidHdyaXRlKGdlby0+dmRlbGF5ICYgMHhmZiwgICBCVDg0OF9FX1ZERUxBWV9MTytvZmYpOworCWJ0d3JpdGUoZ2VvLT5jcm9wLCAgICAgICAgICAgIEJUODQ4X0VfQ1JPUCtvZmYpOwogCWJ0d3JpdGUoZ2VvLT52dG90YWw+PjgsICAgICAgIEJUODQ4X1ZUT1RBTF9ISSk7Ci0gICAgICAgIGJ0d3JpdGUoZ2VvLT52dG90YWwgJiAweGZmLCAgIEJUODQ4X1ZUT1RBTF9MTyk7CisJYnR3cml0ZShnZW8tPnZ0b3RhbCAmIDB4ZmYsICAgQlQ4NDhfVlRPVEFMX0xPKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtNDIwLDcgKzQyMCw3IEBACiAJfSBlbHNlIHsKIAkJZGVsX3RpbWVyKCZidHYtPnRpbWVvdXQpOwogCX0KLSAgICAgICAgYnR2LT5tYWluLmNwdVtSSVNDX1NMT1RfTE9PUF0gPSBjcHVfdG9fbGUzMihjbWQpOworCWJ0di0+bWFpbi5jcHVbUklTQ19TTE9UX0xPT1BdID0gY3B1X3RvX2xlMzIoY21kKTsKIAogCWJ0YW9yKGNhcGN0bCwgfjB4MGYsIEJUODQ4X0NBUF9DVEwpOwogCWlmIChjYXBjdGwpIHsKQEAgLTQzMiw3ICs0MzIsNyBAQAogCX0gZWxzZSB7CiAJCWlmICghYnR2LT5kbWFfb24pCiAJCQlyZXR1cm47Ci0gICAgICAgICAgICAgICAgYnRhbmQofjMsIEJUODQ4X0dQSU9fRE1BX0NUTCk7CisJCWJ0YW5kKH4zLCBCVDg0OF9HUElPX0RNQV9DVEwpOwogCQlidHYtPmRtYV9vbiA9IDA7CiAJfQogCXJldHVybjsKQEAgLTQ2MCwxOSArNDYwLDE5IEBACiAJYnR2LT5tYWluLmNwdVs2XSA9IGNwdV90b19sZTMyKEJUODQ4X1JJU0NfSlVNUCk7CiAJYnR2LT5tYWluLmNwdVs3XSA9IGNwdV90b19sZTMyKGJ0di0+bWFpbi5kbWEgKyAoODw8MikpOwogCi0gICAgICAgIGJ0di0+bWFpbi5jcHVbOF0gPSBjcHVfdG9fbGUzMihCVDg0OF9SSVNDX1NZTkMgfCBCVDg0OF9SSVNDX1JFU1lOQyB8CisJYnR2LT5tYWluLmNwdVs4XSA9IGNwdV90b19sZTMyKEJUODQ4X1JJU0NfU1lOQyB8IEJUODQ4X1JJU0NfUkVTWU5DIHwKIAkJCQkgICAgICAgQlQ4NDhfRklGT19TVEFUVVNfVlJPKTsKLSAgICAgICAgYnR2LT5tYWluLmNwdVs5XSA9IGNwdV90b19sZTMyKDApOworCWJ0di0+bWFpbi5jcHVbOV0gPSBjcHVfdG9fbGUzMigwKTsKIAogCS8qIGJvdHRvbSBmaWVsZCAqLwotICAgICAgICBidHYtPm1haW4uY3B1WzEwXSA9IGNwdV90b19sZTMyKEJUODQ4X1JJU0NfSlVNUCk7CisJYnR2LT5tYWluLmNwdVsxMF0gPSBjcHVfdG9fbGUzMihCVDg0OF9SSVNDX0pVTVApOwogCWJ0di0+bWFpbi5jcHVbMTFdID0gY3B1X3RvX2xlMzIoYnR2LT5tYWluLmRtYSArICgxMjw8MikpOwotICAgICAgICBidHYtPm1haW4uY3B1WzEyXSA9IGNwdV90b19sZTMyKEJUODQ4X1JJU0NfSlVNUCk7CisJYnR2LT5tYWluLmNwdVsxMl0gPSBjcHVfdG9fbGUzMihCVDg0OF9SSVNDX0pVTVApOwogCWJ0di0+bWFpbi5jcHVbMTNdID0gY3B1X3RvX2xlMzIoYnR2LT5tYWluLmRtYSArICgxNDw8MikpOwogCiAJLyoganVtcCBiYWNrIHRvIHRvcCBmaWVsZCAqLwogCWJ0di0+bWFpbi5jcHVbMTRdID0gY3B1X3RvX2xlMzIoQlQ4NDhfUklTQ19KVU1QKTsKLSAgICAgICAgYnR2LT5tYWluLmNwdVsxNV0gPSBjcHVfdG9fbGUzMihidHYtPm1haW4uZG1hICsgKDA8PDIpKTsKKwlidHYtPm1haW4uY3B1WzE1XSA9IGNwdV90b19sZTMyKGJ0di0+bWFpbi5kbWEgKyAoMDw8MikpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0dHYuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnR0di5oCmluZGV4IGQyNTRlOTAuLjEyNGVhNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnR0di5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnR0di5oCkBAIC0yMCwxMjMgKzIwLDE0OCBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogZXhwb3J0ZWQgYnkgYnR0di1jYXJkcy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCi0jZGVmaW5lIEJUVFZfVU5LTk9XTiAgICAgICAweDAwCi0jZGVmaW5lIEJUVFZfTUlSTyAgICAgICAgICAweDAxCi0jZGVmaW5lIEJUVFZfSEFVUFBBVUdFICAgICAweDAyCi0jZGVmaW5lIEJUVFZfU1RCICAgICAgICAgICAweDAzCi0jZGVmaW5lIEJUVFZfSU5URUwgICAgICAgICAweDA0Ci0jZGVmaW5lIEJUVFZfRElBTU9ORCAgICAgICAweDA1Ci0jZGVmaW5lIEJUVFZfQVZFUk1FRElBICAgICAweDA2Ci0jZGVmaW5lIEJUVFZfTUFUUklYX1ZJU0lPTiAweDA3Ci0jZGVmaW5lIEJUVFZfRkxZVklERU8gICAgICAweDA4Ci0jZGVmaW5lIEJUVFZfVFVSQk9UViAgICAgICAweDA5Ci0jZGVmaW5lIEJUVFZfSEFVUFBBVUdFODc4ICAweDBhCi0jZGVmaW5lIEJUVFZfTUlST1BSTyAgICAgICAweDBiCi0jZGVmaW5lIEJUVFZfQURTVEVDSF9UViAgICAweDBjCi0jZGVmaW5lIEJUVFZfQVZFUk1FRElBOTggICAweDBkCi0jZGVmaW5lIEJUVFZfVkhYICAgICAgICAgICAweDBlCi0jZGVmaW5lIEJUVFZfWk9MVFJJWCAgICAgICAweDBmCi0jZGVmaW5lIEJUVFZfUElYVklFV1BMQVlUViAweDEwCi0jZGVmaW5lIEJUVFZfV0lOVklFV182MDEgICAweDExCi0jZGVmaW5lIEJUVFZfQVZFQ19JTlRFUkNBUCAweDEyCi0jZGVmaW5lIEJUVFZfTElGRV9GTFlLSVQgICAweDEzCi0jZGVmaW5lIEJUVFZfQ0VJX1JBRkZMRVMgICAweDE0Ci0jZGVmaW5lIEJUVFZfQ09ORkVSRU5DRVRWICAweDE1Ci0jZGVmaW5lIEJUVFZfUEhPRUJFX1RWTUFTICAweDE2Ci0jZGVmaW5lIEJUVFZfTU9EVEVDXzIwNSAgICAweDE3Ci0jZGVmaW5lIEJUVFZfTUFHSUNUVklFVzA2MSAweDE4Ci0jZGVmaW5lIEJUVFZfVk9CSVNfQk9PU1RBUiAweDE5Ci0jZGVmaW5lIEJUVFZfSEFVUFBBVUdfV0NBTSAweDFhCi0jZGVmaW5lIEJUVFZfTUFYSSAgICAgICAgICAweDFiCi0jZGVmaW5lIEJUVFZfVEVSUkFUViAgICAgICAweDFjCi0jZGVmaW5lIEJUVFZfUFhDMjAwICAgICAgICAweDFkCi0jZGVmaW5lIEJUVFZfRkxZVklERU9fOTggICAweDFlCi0jZGVmaW5lIEJUVFZfSVBST1RWICAgICAgICAweDFmCi0jZGVmaW5lIEJUVFZfSU5URUxfQ19TX1BDSSAweDIwCi0jZGVmaW5lIEJUVFZfVEVSUkFUVkFMVUUgICAweDIxCi0jZGVmaW5lIEJUVFZfV0lORkFTVDIwMDAgICAweDIyCi0jZGVmaW5lIEJUVFZfQ0hST05PU19WUzIgICAweDIzCi0jZGVmaW5lIEJUVFZfVFlQSE9PTl9UVklFVyAweDI0Ci0jZGVmaW5lIEJUVFZfUFhFTFZXUExUVlBSTyAweDI1Ci0jZGVmaW5lIEJUVFZfTUFHSUNUVklFVzA2MyAweDI2Ci0jZGVmaW5lIEJUVFZfUElOTkFDTEUgICAgICAweDI3Ci0jZGVmaW5lIEJUVFZfU1RCMiAgICAgICAgICAweDI4Ci0jZGVmaW5lIEJUVFZfQVZQSE9ORTk4ICAgICAweDI5Ci0jZGVmaW5lIEJUVFZfUFY5NTEgICAgICAgICAweDJhCi0jZGVmaW5lIEJUVFZfT05BSVJfVFYgICAgICAweDJiCi0jZGVmaW5lIEJUVFZfU0lHTUFfVFZJSV9GTSAweDJjCi0jZGVmaW5lIEJUVFZfTUFUUklYX1ZJU0lPTjIgMHgyZAotI2RlZmluZSBCVFRWX1pPTFRSSVhfR0VOSUUgMHgyZQotI2RlZmluZSBCVFRWX1RFUlJBVFZSQURJTyAgMHgyZgotI2RlZmluZSBCVFRWX0RZTkFMSU5LICAgICAgMHgzMAotI2RlZmluZSBCVFRWX0dWQkNUVjNQQ0kgICAgMHgzMQotI2RlZmluZSBCVFRWX1BYRUxWV1BMVFZQQUsgMHgzMgotI2RlZmluZSBCVFRWX0VBR0xFICAgICAgICAgMHgzMwotI2RlZmluZSBCVFRWX1BJTk5BQ0xFUFJPICAgMHgzNAotI2RlZmluZSBCVFRWX1RWSUVXX1JEU19GTSAgMHgzNQotI2RlZmluZSBCVFRWX0xJRkVURUNfOTQxNSAgMHgzNgotI2RlZmluZSBCVFRWX0JFU1RCVVlfRUFTWVRWIDB4MzcKLSNkZWZpbmUgQlRUVl9GTFlWSURFT185OEZNIDB4MzgKLSNkZWZpbmUgQlRUVl9HTVYxICAgICAgICAgIDB4M2QKLSNkZWZpbmUgQlRUVl9CRVNUQlVZX0VBU1lUVjIgMHgzZQotI2RlZmluZSBCVFRWX0FUSV9UVldPTkRFUiAgMHgzZgotI2RlZmluZSBCVFRWX0FUSV9UVldPTkRFUlZFIDB4NDAKLSNkZWZpbmUgQlRUVl9GTFlWSURFTzIwMDAgICAweDQxCi0jZGVmaW5lIEJUVFZfVEVSUkFUVkFMVUVSICAgMHg0MgotI2RlZmluZSBCVFRWX0dWQkNUVjRQQ0kgICAgIDB4NDMKLSNkZWZpbmUgQlRUVl9WT09ET09UVl9GTSAgICAweDQ0Ci0jZGVmaW5lIEJUVFZfQUlNTVMgICAgICAgICAgMHg0NQotI2RlZmluZSBCVFRWX1BWX0JUODc4UF9QTFVTIDB4NDYKLSNkZWZpbmUgQlRUVl9GTFlWSURFTzk4RVogICAweDQ3Ci0jZGVmaW5lIEJUVFZfUFZfQlQ4NzhQXzlCICAgMHg0OAotI2RlZmluZSBCVFRWX1NFTlNPUkFZMzExICAgIDB4NDkKLSNkZWZpbmUgQlRUVl9SVjYwNSAgICAgICAgICAweDRhCi0jZGVmaW5lIEJUVFZfV0lORFZSICAgICAgICAgMHg0YwotI2RlZmluZSBCVFRWX0dSQU5EVEVDICAgICAgIDB4NGQKLSNkZWZpbmUgQlRUVl9LV09STEQgICAgICAgICAweDRlCi0jZGVmaW5lIEJUVFZfSEFVUFBBVUdFUFZSICAgMHg1MAotI2RlZmluZSBCVFRWX0dWQkNUVjVQQ0kgICAgIDB4NTEKLSNkZWZpbmUgQlRUVl9PU1BSRVkxeDAgICAgICAweDUyCi0jZGVmaW5lIEJUVFZfT1NQUkVZMXgwXzg0OCAgMHg1MwotI2RlZmluZSBCVFRWX09TUFJFWTEwMV84NDggIDB4NTQKLSNkZWZpbmUgQlRUVl9PU1BSRVkxeDEgICAgICAweDU1Ci0jZGVmaW5lIEJUVFZfT1NQUkVZMXgxX1NWSUQgMHg1NgotI2RlZmluZSBCVFRWX09TUFJFWTJ4eCAgICAgIDB4NTcKLSNkZWZpbmUgQlRUVl9PU1BSRVkyeDBfU1ZJRCAweDU4Ci0jZGVmaW5lIEJUVFZfT1NQUkVZMngwICAgICAgMHg1OQotI2RlZmluZSBCVFRWX09TUFJFWTUwMCAgICAgIDB4NWEKLSNkZWZpbmUgQlRUVl9PU1BSRVk1NDAgICAgICAweDViCi0jZGVmaW5lIEJUVFZfT1NQUkVZMjAwMCAgICAgMHg1YwotI2RlZmluZSBCVFRWX0lEU19FQUdMRSAgICAgIDB4NWQKLSNkZWZpbmUgQlRUVl9QSU5OQUNMRVNBVCAgICAweDVlCi0jZGVmaW5lIEJUVFZfRk9STUFDX1BST1RWICAgMHg1ZgotI2RlZmluZSBCVFRWX0VVUkVTWVNfUElDT0xPIDB4NjEKLSNkZWZpbmUgQlRUVl9QVjE1MCAgICAgICAgICAweDYyCi0jZGVmaW5lIEJUVFZfQURfVFZLNTAzICAgICAgMHg2MwotI2RlZmluZSBCVFRWX0lWQzIwMCAgICAgICAgIDB4NjYKLSNkZWZpbmUgQlRUVl9YR1VBUkQgICAgICAgICAweDY3Ci0jZGVmaW5lIEJUVFZfTkVCVUxBX0RJR0lUViAgMHg2OAotI2RlZmluZSBCVFRWX1BWMTQzICAgICAgICAgIDB4NjkKLSNkZWZpbmUgQlRUVl9JVkMxMDAgICAgICAgICAweDZlCi0jZGVmaW5lIEJUVFZfSVZDMTIwICAgICAgICAgMHg2ZgotI2RlZmluZSBCVFRWX1BDX0hEVFYgICAgICAgIDB4NzAKLSNkZWZpbmUgQlRUVl9UV0lOSEFOX0RTVCAgICAweDcxCi0jZGVmaW5lIEJUVFZfV0lORkFTVFZDMTAwICAgMHg3MgotI2RlZmluZSBCVFRWX1NJTVVTX0dWQzExMDAgIDB4NzQKLSNkZWZpbmUgQlRUVl9OR1NUVl9QTFVTICAgICAweDc1Ci0jZGVmaW5lIEJUVFZfTE1MQlQ0ICAgICAgICAgMHg3NgotI2RlZmluZSBCVFRWX1BJQ09MT19URVRSQV9DSElQIDB4NzkKLSNkZWZpbmUgQlRUVl9BVkRWQlRfNzcxICAgICAweDdiCi0jZGVmaW5lIEJUVFZfQVZEVkJUXzc2MSAgICAgMHg3YwotI2RlZmluZSBCVFRWX01BVFJJWF9WSVNJT05TUSAgMHg3ZAotI2RlZmluZSBCVFRWX01BVFJJWF9WSVNJT05TTEMgMHg3ZQotI2RlZmluZSBCVFRWX0FQQUNfVklFV0NPTVAgIDB4N2YKLSNkZWZpbmUgQlRUVl9EVklDT19EVkJUX0xJVEUgIDB4ODAKLSNkZWZpbmUgQlRUVl9USUJFVF9DUzE2ICAweDgzCi0jZGVmaW5lIEJUVFZfS09ESUNPTV80NDAwUiAgMHg4NAotI2RlZmluZSBCVFRWX0FETElOS19SVFYyNCAgIDB4ODYKLSNkZWZpbmUgQlRUVl9EVklDT19GVVNJT05IRFRWXzVfTElURSAweDg3Ci0jZGVmaW5lIEJUVFZfQUNPUlBfWTg3OEYgICAweDg4CisjZGVmaW5lIEJUVFZfQk9BUkRfVU5LTk9XTiAgICAgICAgICAgICAgICAgMHgwMAorI2RlZmluZSBCVFRWX0JPQVJEX01JUk8gICAgICAgICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgQlRUVl9CT0FSRF9IQVVQUEFVR0UgICAgICAgICAgICAgICAweDAyCisjZGVmaW5lIEJUVFZfQk9BUkRfU1RCICAgICAgICAgICAgICAgICAgICAgMHgwMworI2RlZmluZSBCVFRWX0JPQVJEX0lOVEVMICAgICAgICAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgQlRUVl9CT0FSRF9ESUFNT05EICAgICAgICAgICAgICAgICAweDA1CisjZGVmaW5lIEJUVFZfQk9BUkRfQVZFUk1FRElBICAgICAgICAgICAgICAgMHgwNgorI2RlZmluZSBCVFRWX0JPQVJEX01BVFJJWF9WSVNJT04gICAgICAgICAgIDB4MDcKKyNkZWZpbmUgQlRUVl9CT0FSRF9GTFlWSURFTyAgICAgICAgICAgICAgICAweDA4CisjZGVmaW5lIEJUVFZfQk9BUkRfVFVSQk9UViAgICAgICAgICAgICAgICAgMHgwOQorI2RlZmluZSBCVFRWX0JPQVJEX0hBVVBQQVVHRTg3OCAgICAgICAgICAgIDB4MGEKKyNkZWZpbmUgQlRUVl9CT0FSRF9NSVJPUFJPICAgICAgICAgICAgICAgICAweDBiCisjZGVmaW5lIEJUVFZfQk9BUkRfQURTVEVDSF9UViAgICAgICAgICAgICAgMHgwYworI2RlZmluZSBCVFRWX0JPQVJEX0FWRVJNRURJQTk4ICAgICAgICAgICAgIDB4MGQKKyNkZWZpbmUgQlRUVl9CT0FSRF9WSFggICAgICAgICAgICAgICAgICAgICAweDBlCisjZGVmaW5lIEJUVFZfQk9BUkRfWk9MVFJJWCAgICAgICAgICAgICAgICAgMHgwZgorI2RlZmluZSBCVFRWX0JPQVJEX1BJWFZJRVdQTEFZVFYgICAgICAgICAgIDB4MTAKKyNkZWZpbmUgQlRUVl9CT0FSRF9XSU5WSUVXXzYwMSAgICAgICAgICAgICAweDExCisjZGVmaW5lIEJUVFZfQk9BUkRfQVZFQ19JTlRFUkNBUCAgICAgICAgICAgMHgxMgorI2RlZmluZSBCVFRWX0JPQVJEX0xJRkVfRkxZS0lUICAgICAgICAgICAgIDB4MTMKKyNkZWZpbmUgQlRUVl9CT0FSRF9DRUlfUkFGRkxFUyAgICAgICAgICAgICAweDE0CisjZGVmaW5lIEJUVFZfQk9BUkRfQ09ORkVSRU5DRVRWICAgICAgICAgICAgMHgxNQorI2RlZmluZSBCVFRWX0JPQVJEX1BIT0VCRV9UVk1BUyAgICAgICAgICAgIDB4MTYKKyNkZWZpbmUgQlRUVl9CT0FSRF9NT0RURUNfMjA1ICAgICAgICAgICAgICAweDE3CisjZGVmaW5lIEJUVFZfQk9BUkRfTUFHSUNUVklFVzA2MSAgICAgICAgICAgMHgxOAorI2RlZmluZSBCVFRWX0JPQVJEX1ZPQklTX0JPT1NUQVIgICAgICAgICAgIDB4MTkKKyNkZWZpbmUgQlRUVl9CT0FSRF9IQVVQUEFVR19XQ0FNICAgICAgICAgICAweDFhCisjZGVmaW5lIEJUVFZfQk9BUkRfTUFYSSAgICAgICAgICAgICAgICAgICAgMHgxYgorI2RlZmluZSBCVFRWX0JPQVJEX1RFUlJBVFYgICAgICAgICAgICAgICAgIDB4MWMKKyNkZWZpbmUgQlRUVl9CT0FSRF9QWEMyMDAgICAgICAgICAgICAgICAgICAweDFkCisjZGVmaW5lIEJUVFZfQk9BUkRfRkxZVklERU9fOTggICAgICAgICAgICAgMHgxZQorI2RlZmluZSBCVFRWX0JPQVJEX0lQUk9UViAgICAgICAgICAgICAgICAgIDB4MWYKKyNkZWZpbmUgQlRUVl9CT0FSRF9JTlRFTF9DX1NfUENJICAgICAgICAgICAweDIwCisjZGVmaW5lIEJUVFZfQk9BUkRfVEVSUkFUVkFMVUUgICAgICAgICAgICAgMHgyMQorI2RlZmluZSBCVFRWX0JPQVJEX1dJTkZBU1QyMDAwICAgICAgICAgICAgIDB4MjIKKyNkZWZpbmUgQlRUVl9CT0FSRF9DSFJPTk9TX1ZTMiAgICAgICAgICAgICAweDIzCisjZGVmaW5lIEJUVFZfQk9BUkRfVFlQSE9PTl9UVklFVyAgICAgICAgICAgMHgyNAorI2RlZmluZSBCVFRWX0JPQVJEX1BYRUxWV1BMVFZQUk8gICAgICAgICAgIDB4MjUKKyNkZWZpbmUgQlRUVl9CT0FSRF9NQUdJQ1RWSUVXMDYzICAgICAgICAgICAweDI2CisjZGVmaW5lIEJUVFZfQk9BUkRfUElOTkFDTEUgICAgICAgICAgICAgICAgMHgyNworI2RlZmluZSBCVFRWX0JPQVJEX1NUQjIgICAgICAgICAgICAgICAgICAgIDB4MjgKKyNkZWZpbmUgQlRUVl9CT0FSRF9BVlBIT05FOTggICAgICAgICAgICAgICAweDI5CisjZGVmaW5lIEJUVFZfQk9BUkRfUFY5NTEgICAgICAgICAgICAgICAgICAgMHgyYQorI2RlZmluZSBCVFRWX0JPQVJEX09OQUlSX1RWICAgICAgICAgICAgICAgIDB4MmIKKyNkZWZpbmUgQlRUVl9CT0FSRF9TSUdNQV9UVklJX0ZNICAgICAgICAgICAweDJjCisjZGVmaW5lIEJUVFZfQk9BUkRfTUFUUklYX1ZJU0lPTjIgICAgICAgICAgMHgyZAorI2RlZmluZSBCVFRWX0JPQVJEX1pPTFRSSVhfR0VOSUUgICAgICAgICAgIDB4MmUKKyNkZWZpbmUgQlRUVl9CT0FSRF9URVJSQVRWUkFESU8gICAgICAgICAgICAweDJmCisjZGVmaW5lIEJUVFZfQk9BUkRfRFlOQUxJTksgICAgICAgICAgICAgICAgMHgzMAorI2RlZmluZSBCVFRWX0JPQVJEX0dWQkNUVjNQQ0kgICAgICAgICAgICAgIDB4MzEKKyNkZWZpbmUgQlRUVl9CT0FSRF9QWEVMVldQTFRWUEFLICAgICAgICAgICAweDMyCisjZGVmaW5lIEJUVFZfQk9BUkRfRUFHTEUgICAgICAgICAgICAgICAgICAgMHgzMworI2RlZmluZSBCVFRWX0JPQVJEX1BJTk5BQ0xFUFJPICAgICAgICAgICAgIDB4MzQKKyNkZWZpbmUgQlRUVl9CT0FSRF9UVklFV19SRFNfRk0gICAgICAgICAgICAweDM1CisjZGVmaW5lIEJUVFZfQk9BUkRfTElGRVRFQ185NDE1ICAgICAgICAgICAgMHgzNgorI2RlZmluZSBCVFRWX0JPQVJEX0JFU1RCVVlfRUFTWVRWICAgICAgICAgIDB4MzcKKyNkZWZpbmUgQlRUVl9CT0FSRF9GTFlWSURFT185OEZNICAgICAgICAgICAweDM4CisjZGVmaW5lIEJUVFZfQk9BUkRfR1JBTkRURUMgICAgICAgICAgICAgICAgMHgzOQorI2RlZmluZSBCVFRWX0JPQVJEX0FTS0VZX0NQSDA2MCAgICAgICAgICAgIDB4M2EKKyNkZWZpbmUgQlRUVl9CT0FSRF9BU0tFWV9DUEgwM1ggICAgICAgICAgICAweDNiCisjZGVmaW5lIEJUVFZfQk9BUkRfTU0xMDBQQ1RWICAgICAgICAgICAgICAgMHgzYworI2RlZmluZSBCVFRWX0JPQVJEX0dNVjEgICAgICAgICAgICAgICAgICAgIDB4M2QKKyNkZWZpbmUgQlRUVl9CT0FSRF9CRVNUQlVZX0VBU1lUVjIgICAgICAgICAweDNlCisjZGVmaW5lIEJUVFZfQk9BUkRfQVRJX1RWV09OREVSICAgICAgICAgICAgMHgzZgorI2RlZmluZSBCVFRWX0JPQVJEX0FUSV9UVldPTkRFUlZFICAgICAgICAgIDB4NDAKKyNkZWZpbmUgQlRUVl9CT0FSRF9GTFlWSURFTzIwMDAgICAgICAgICAgICAweDQxCisjZGVmaW5lIEJUVFZfQk9BUkRfVEVSUkFUVkFMVUVSICAgICAgICAgICAgMHg0MgorI2RlZmluZSBCVFRWX0JPQVJEX0dWQkNUVjRQQ0kgICAgICAgICAgICAgIDB4NDMKKyNkZWZpbmUgQlRUVl9CT0FSRF9WT09ET09UVl9GTSAgICAgICAgICAgICAweDQ0CisjZGVmaW5lIEJUVFZfQk9BUkRfQUlNTVMgICAgICAgICAgICAgICAgICAgMHg0NQorI2RlZmluZSBCVFRWX0JPQVJEX1BWX0JUODc4UF9QTFVTICAgICAgICAgIDB4NDYKKyNkZWZpbmUgQlRUVl9CT0FSRF9GTFlWSURFTzk4RVogICAgICAgICAgICAweDQ3CisjZGVmaW5lIEJUVFZfQk9BUkRfUFZfQlQ4NzhQXzlCICAgICAgICAgICAgMHg0OAorI2RlZmluZSBCVFRWX0JPQVJEX1NFTlNPUkFZMzExICAgICAgICAgICAgIDB4NDkKKyNkZWZpbmUgQlRUVl9CT0FSRF9SVjYwNSAgICAgICAgICAgICAgICAgICAweDRhCisjZGVmaW5lIEJUVFZfQk9BUkRfUE9XRVJDTFJfTVRWODc4ICAgICAgICAgMHg0YgorI2RlZmluZSBCVFRWX0JPQVJEX1dJTkRWUiAgICAgICAgICAgICAgICAgIDB4NGMKKyNkZWZpbmUgQlRUVl9CT0FSRF9HUkFORFRFQ19NVUxUSSAgICAgICAgICAweDRkCisjZGVmaW5lIEJUVFZfQk9BUkRfS1dPUkxEICAgICAgICAgICAgICAgICAgMHg0ZQorI2RlZmluZSBCVFRWX0JPQVJEX0RTUF9UQ1ZJREVPICAgICAgICAgICAgIDB4NGYKKyNkZWZpbmUgQlRUVl9CT0FSRF9IQVVQUEFVR0VQVlIgICAgICAgICAgICAweDUwCisjZGVmaW5lIEJUVFZfQk9BUkRfR1ZCQ1RWNVBDSSAgICAgICAgICAgICAgMHg1MQorI2RlZmluZSBCVFRWX0JPQVJEX09TUFJFWTF4MCAgICAgICAgICAgICAgIDB4NTIKKyNkZWZpbmUgQlRUVl9CT0FSRF9PU1BSRVkxeDBfODQ4ICAgICAgICAgICAweDUzCisjZGVmaW5lIEJUVFZfQk9BUkRfT1NQUkVZMTAxXzg0OCAgICAgICAgICAgMHg1NAorI2RlZmluZSBCVFRWX0JPQVJEX09TUFJFWTF4MSAgICAgICAgICAgICAgIDB4NTUKKyNkZWZpbmUgQlRUVl9CT0FSRF9PU1BSRVkxeDFfU1ZJRCAgICAgICAgICAweDU2CisjZGVmaW5lIEJUVFZfQk9BUkRfT1NQUkVZMnh4ICAgICAgICAgICAgICAgMHg1NworI2RlZmluZSBCVFRWX0JPQVJEX09TUFJFWTJ4MF9TVklEICAgICAgICAgIDB4NTgKKyNkZWZpbmUgQlRUVl9CT0FSRF9PU1BSRVkyeDAgICAgICAgICAgICAgICAweDU5CisjZGVmaW5lIEJUVFZfQk9BUkRfT1NQUkVZNTAwICAgICAgICAgICAgICAgMHg1YQorI2RlZmluZSBCVFRWX0JPQVJEX09TUFJFWTU0MCAgICAgICAgICAgICAgIDB4NWIKKyNkZWZpbmUgQlRUVl9CT0FSRF9PU1BSRVkyMDAwICAgICAgICAgICAgICAweDVjCisjZGVmaW5lIEJUVFZfQk9BUkRfSURTX0VBR0xFICAgICAgICAgICAgICAgMHg1ZAorI2RlZmluZSBCVFRWX0JPQVJEX1BJTk5BQ0xFU0FUICAgICAgICAgICAgIDB4NWUKKyNkZWZpbmUgQlRUVl9CT0FSRF9GT1JNQUNfUFJPVFYgICAgICAgICAgICAweDVmCisjZGVmaW5lIEJUVFZfQk9BUkRfTUFDSFRWICAgICAgICAgICAgICAgICAgMHg2MAorI2RlZmluZSBCVFRWX0JPQVJEX0VVUkVTWVNfUElDT0xPICAgICAgICAgIDB4NjEKKyNkZWZpbmUgQlRUVl9CT0FSRF9QVjE1MCAgICAgICAgICAgICAgICAgICAweDYyCisjZGVmaW5lIEJUVFZfQk9BUkRfQURfVFZLNTAzICAgICAgICAgICAgICAgMHg2MworI2RlZmluZSBCVFRWX0JPQVJEX0hFUkNVTEVTX1NNX1RWICAgICAgICAgIDB4NjQKKyNkZWZpbmUgQlRUVl9CT0FSRF9QQUNFVFYgICAgICAgICAgICAgICAgICAweDY1CisjZGVmaW5lIEJUVFZfQk9BUkRfSVZDMjAwICAgICAgICAgICAgICAgICAgMHg2NgorI2RlZmluZSBCVFRWX0JPQVJEX1hHVUFSRCAgICAgICAgICAgICAgICAgIDB4NjcKKyNkZWZpbmUgQlRUVl9CT0FSRF9ORUJVTEFfRElHSVRWICAgICAgICAgICAweDY4CisjZGVmaW5lIEJUVFZfQk9BUkRfUFYxNDMgICAgICAgICAgICAgICAgICAgMHg2OQorI2RlZmluZSBCVFRWX0JPQVJEX1ZEMDA5WDFfTUlOSURJTiAgICAgICAgIDB4NmEKKyNkZWZpbmUgQlRUVl9CT0FSRF9WRDAwOVgxX0NPTUJJICAgICAgICAgICAweDZiCisjZGVmaW5lIEJUVFZfQk9BUkRfVkQwMDlfTUlOSURJTiAgICAgICAgICAgMHg2YworI2RlZmluZSBCVFRWX0JPQVJEX1ZEMDA5X0NPTUJJICAgICAgICAgICAgIDB4NmQKKyNkZWZpbmUgQlRUVl9CT0FSRF9JVkMxMDAgICAgICAgICAgICAgICAgICAweDZlCisjZGVmaW5lIEJUVFZfQk9BUkRfSVZDMTIwICAgICAgICAgICAgICAgICAgMHg2ZgorI2RlZmluZSBCVFRWX0JPQVJEX1BDX0hEVFYgICAgICAgICAgICAgICAgIDB4NzAKKyNkZWZpbmUgQlRUVl9CT0FSRF9UV0lOSEFOX0RTVCAgICAgICAgICAgICAweDcxCisjZGVmaW5lIEJUVFZfQk9BUkRfV0lORkFTVFZDMTAwICAgICAgICAgICAgMHg3MgorI2RlZmluZSBCVFRWX0JPQVJEX1RFVjU2MCAgICAgICAgICAgICAgICAgIDB4NzMKKyNkZWZpbmUgQlRUVl9CT0FSRF9TSU1VU19HVkMxMTAwICAgICAgICAgICAweDc0CisjZGVmaW5lIEJUVFZfQk9BUkRfTkdTVFZfUExVUyAgICAgICAgICAgICAgMHg3NQorI2RlZmluZSBCVFRWX0JPQVJEX0xNTEJUNCAgICAgICAgICAgICAgICAgIDB4NzYKKyNkZWZpbmUgQlRUVl9CT0FSRF9URUtSQU1fTTIwNSAgICAgICAgICAgICAweDc3CisjZGVmaW5lIEJUVFZfQk9BUkRfQ09OVFZGTUkgICAgICAgICAgICAgICAgMHg3OAorI2RlZmluZSBCVFRWX0JPQVJEX1BJQ09MT19URVRSQV9DSElQICAgICAgIDB4NzkKKyNkZWZpbmUgQlRUVl9CT0FSRF9TUElSSVRfVFYgICAgICAgICAgICAgICAweDdhCisjZGVmaW5lIEJUVFZfQk9BUkRfQVZEVkJUXzc3MSAgICAgICAgICAgICAgMHg3YgorI2RlZmluZSBCVFRWX0JPQVJEX0FWRFZCVF83NjEgICAgICAgICAgICAgIDB4N2MKKyNkZWZpbmUgQlRUVl9CT0FSRF9NQVRSSVhfVklTSU9OU1EgICAgICAgICAweDdkCisjZGVmaW5lIEJUVFZfQk9BUkRfTUFUUklYX1ZJU0lPTlNMQyAgICAgICAgMHg3ZQorI2RlZmluZSBCVFRWX0JPQVJEX0FQQUNfVklFV0NPTVAgICAgICAgICAgIDB4N2YKKyNkZWZpbmUgQlRUVl9CT0FSRF9EVklDT19EVkJUX0xJVEUgICAgICAgICAweDgwCisjZGVmaW5lIEJUVFZfQk9BUkRfVkdFQVJfTVlWQ0QgICAgICAgICAgICAgMHg4MQorI2RlZmluZSBCVFRWX0JPQVJEX1NVUEVSX1RWICAgICAgICAgICAgICAgIDB4ODIKKyNkZWZpbmUgQlRUVl9CT0FSRF9USUJFVF9DUzE2ICAgICAgICAgICAgICAweDgzCisjZGVmaW5lIEJUVFZfQk9BUkRfS09ESUNPTV80NDAwUiAgICAgICAgICAgMHg4NAorI2RlZmluZSBCVFRWX0JPQVJEX0tPRElDT01fNDQwMFJfU0wgICAgICAgIDB4ODUKKyNkZWZpbmUgQlRUVl9CT0FSRF9BRExJTktfUlRWMjQgICAgICAgICAgICAweDg2CisjZGVmaW5lIEJUVFZfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl81X0xJVEUgMHg4NworI2RlZmluZSBCVFRWX0JPQVJEX0FDT1JQX1k4NzhGICAgICAgICAgICAgIDB4ODgKKyNkZWZpbmUgQlRUVl9CT0FSRF9DT05DRVBUUk9OSUNfQ1RWRk1JMiAgICAweDg5CisjZGVmaW5lIEJUVFZfQk9BUkRfUFZfQlQ4NzhQXzJFICAgICAgICAgICAgMHg4YQorI2RlZmluZSBCVFRWX0JPQVJEX1BWX000OTAwICAgICAgICAgICAgICAgIDB4OGIKKyNkZWZpbmUgQlRUVl9CT0FSRF9PU1BSRVk0NDAgICAgICAgICAgICAgICAweDhjCisjZGVmaW5lIEJUVFZfQk9BUkRfQVNPVU5EX1NLWUVZRQkgICAweDhkCiAKIC8qIGkyYyBhZGRyZXNzIGxpc3QgKi8KICNkZWZpbmUgSTJDX1RTQTU1MjIgICAgICAgIDB4YzIKQEAgLTE3Nyw3ICsyMDIsNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQgICAgIHN1YnM7ICAgICAvKiBzdHJ1Y3QgYnR0dl9zdWJfZGV2aWNlICovCiAKIAkvKiBkZXZpY2UgY29uZmlnICovCi0gICAgICAgIHVuc2lnbmVkIGludCAgICAgICAgIG5yOyAgICAgICAvKiBkZXYgbnIgKGZvciBwcmludGsoImJ0dHYlZDogLi4uIik7ICAqLworCXVuc2lnbmVkIGludCAgICAgICAgIG5yOyAgICAgICAvKiBkZXYgbnIgKGZvciBwcmludGsoImJ0dHYlZDogLi4uIik7ICAqLwogCXVuc2lnbmVkIGludCAgICAgICAgIHR5cGU7ICAgICAvKiBjYXJkIHR5cGUgKHBvaW50ZXIgaW50byB0dmNhcmRzW10pICAqLwogCWNoYXIgICAgICAgICAgICAgICAgIG5hbWVbOF07ICAvKiBkZXYgbmFtZSAqLwogfTsKQEAgLTE4NiwxNiArMjExLDE2IEBACiAKIHN0cnVjdCB0dmNhcmQKIHsKLSAgICAgICAgY2hhciAqbmFtZTsKLSAgICAgICAgdW5zaWduZWQgaW50IHZpZGVvX2lucHV0czsKLSAgICAgICAgdW5zaWduZWQgaW50IGF1ZGlvX2lucHV0czsKLSAgICAgICAgdW5zaWduZWQgaW50IHR1bmVyOwotICAgICAgICB1bnNpZ25lZCBpbnQgc3ZoczsKKwljaGFyICpuYW1lOworCXVuc2lnbmVkIGludCB2aWRlb19pbnB1dHM7CisJdW5zaWduZWQgaW50IGF1ZGlvX2lucHV0czsKKwl1bnNpZ25lZCBpbnQgdHVuZXI7CisJdW5zaWduZWQgaW50IHN2aHM7CiAJdW5zaWduZWQgaW50IGRpZ2l0YWxfbW9kZTsgLy8gRElHSVRBTF9NT0RFX0NBTUVSQSBvciBESUdJVEFMX01PREVfVklERU8KLSAgICAgICAgdTMyIGdwaW9tYXNrOwotICAgICAgICB1MzIgbXV4c2VsWzE2XTsKLSAgICAgICAgdTMyIGF1ZGlvbXV4WzZdOyAvKiBUdW5lciwgUmFkaW8sIGV4dGVybmFsLCBpbnRlcm5hbCwgbXV0ZSwgc3RlcmVvICovCi0gICAgICAgIHUzMiBncGlvbWFzazI7ICAgLyogR1BJTyBNVVggbWFzayAqLworCXUzMiBncGlvbWFzazsKKwl1MzIgbXV4c2VsWzE2XTsKKwl1MzIgYXVkaW9tdXhbNl07IC8qIFR1bmVyLCBSYWRpbywgZXh0ZXJuYWwsIGludGVybmFsLCBtdXRlLCBzdGVyZW8gKi8KKwl1MzIgZ3Bpb21hc2syOyAgIC8qIEdQSU8gTVVYIG1hc2sgKi8KIAogCS8qIGkyYyBhdWRpbyBmbGFncyAqLwogCXVuc2lnbmVkIGludCBub19tc3AzNHh4OjE7CkBAIC0yMTgsNiArMjQzLDcgQEAKIAogCXVuc2lnbmVkIGludCB0dW5lcl90eXBlOwogCXVuc2lnbmVkIGludCB0dW5lcl9hZGRyOworCXVuc2lnbmVkIGludCByYWRpb19hZGRyOwogCiAJdW5zaWduZWQgaW50IGhhc19yYWRpbzsKIAl2b2lkICgqYXVkaW9faG9vaykoc3RydWN0IGJ0dHYgKmJ0diwgc3RydWN0IHZpZGVvX2F1ZGlvICp2LCBpbnQgc2V0KTsKQEAgLTI0Niw3ICsyNzIsNyBAQAogICAgaW50ZXJmYWNlIGJlbG93IGZvciBuZXcgY29kZSAqLwogCiAvKiByZXR1cm5zIGNhcmQgdHlwZSArIGNhcmQgSUQgKGZvciBidDg3OC1iYXNlZCBvbmVzKQotICAgZm9yIHBvc3NpYmxlIHZhbHVlcyBzZWUgbGluZXMgYmVsb3cgYmVnaW5uaW5nIHdpdGggI2RlZmluZSBCVFRWX1VOS05PV04KKyAgIGZvciBwb3NzaWJsZSB2YWx1ZXMgc2VlIGxpbmVzIGJlbG93IGJlZ2lubmluZyB3aXRoICNkZWZpbmUgQlRUVl9CT0FSRF9VTktOT1dOCiAgICByZXR1cm5zIG5lZ2F0aXZlIHZhbHVlIGlmIGVycm9yIG9jY3VycmVkCiAqLwogZXh0ZXJuIGludCBidHR2X2dldF9jYXJkaW5mbyh1bnNpZ25lZCBpbnQgY2FyZCwgaW50ICp0eXBlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idHR2cC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9idHR2cC5oCmluZGV4IGUwZTdjN2EuLjM4NmY1NDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnR0dnAuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0dHZwLmgKQEAgLTc3LDE0ICs3NywxNCBAQAogc3RydWN0IGJ0dHZfdHZub3JtIHsKIAlpbnQgICB2NGwyX2lkOwogCWNoYXIgICpuYW1lOwotICAgICAgICB1MzIgICBGc2M7Ci0gICAgICAgIHUxNiAgIHN3aWR0aCwgc2hlaWdodDsgLyogc2NhbGVkIHN0YW5kYXJkIHdpZHRoLCBoZWlnaHQgKi8KKwl1MzIgICBGc2M7CisJdTE2ICAgc3dpZHRoLCBzaGVpZ2h0OyAvKiBzY2FsZWQgc3RhbmRhcmQgd2lkdGgsIGhlaWdodCAqLwogCXUxNiAgIHRvdGFsd2lkdGg7CiAJdTggICAgYWRlbGF5LCBiZGVsYXksIGlmb3JtOwogCXUzMiAgIHNjYWxlZHR3aWR0aDsKIAl1MTYgICBoZGVsYXl4MSwgaGFjdGl2ZXgxOwogCXUxNiAgIHZkZWxheTsKLSAgICAgICAgdTggICAgdmJpcGFjazsKKwl1OCAgICB2YmlwYWNrOwogCXUxNiAgIHZ0b3RhbDsKIAlpbnQgICBzcmFtOwogfTsKQEAgLTI2Nyw4ICsyNjcsOCBAQAogCiAJLyogY2FyZCBjb25maWd1cmF0aW9uIGluZm8gKi8KIAl1bnNpZ25lZCBpbnQgY2FyZGlkOyAgIC8qIHBjaSBzdWJzeXN0ZW0gaWQgKGJ0ODc4IGJhc2VkIG9uZXMpICovCi0gICAgICAgIHVuc2lnbmVkIGludCB0dW5lcl90eXBlOyAgLyogdHVuZXIgY2hpcCB0eXBlICovCi0gICAgICAgIHVuc2lnbmVkIGludCBwaW5uYWNsZV9pZDsKKwl1bnNpZ25lZCBpbnQgdHVuZXJfdHlwZTsgIC8qIHR1bmVyIGNoaXAgdHlwZSAqLworCXVuc2lnbmVkIGludCBwaW5uYWNsZV9pZDsKIAl1bnNpZ25lZCBpbnQgc3ZoczsKIAlzdHJ1Y3QgYnR0dl9wbGxfaW5mbyBwbGw7CiAJaW50IHRyaXRvbjE7CkBAIC0zMDEsOSArMzAxLDkgQEAKIAogCS8qIGxvY2tpbmcgKi8KIAlzcGlubG9ja190IHNfbG9jazsKLSAgICAgICAgc3RydWN0IHNlbWFwaG9yZSBsb2NrOworCXN0cnVjdCBzZW1hcGhvcmUgbG9jazsKIAlpbnQgcmVzb3VyY2VzOwotICAgICAgICBzdHJ1Y3Qgc2VtYXBob3JlIHJlc2xvY2s7CisJc3RydWN0IHNlbWFwaG9yZSByZXNsb2NrOwogI2lmZGVmIFZJRElPQ19HX1BSSU9SSVRZCiAJc3RydWN0IHY0bDJfcHJpb19zdGF0ZSBwcmlvOwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NzNTNsMzJhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NzNTNsMzJhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzgwYjM1MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3M1M2wzMmEuYwpAQCAtMCwwICsxLDI0MCBAQAorLyoKKyAqIGNzNTNsMzJhIChBZGFwdGVjIEFWQy0yMDEwIGFuZCBBVkMtMjQxMCkgaTJjIGl2dHYgZHJpdmVyLgorICogQ29weXJpZ2h0IChDKSAyMDA1ICBNYXJ0aW4gVmF1Z2hhbgorICoKKyAqIEF1ZGlvIHNvdXJjZSBzd2l0Y2hpbmcgZm9yIEFkYXB0ZWMgQVZDLTI0MTAgYWRkZWQgYnkgVHJldiBKYWNrc29uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLWlkLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KKyNpbmNsdWRlIDxtZWRpYS9hdWRpb2NoaXAuaD4KKworTU9EVUxFX0RFU0NSSVBUSU9OKCJpMmMgZGV2aWNlIGRyaXZlciBmb3IgY3M1M2wzMmEgQXVkaW8gQURDIik7CitNT0RVTEVfQVVUSE9SKCJNYXJ0aW4gVmF1Z2hhbiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitzdGF0aWMgaW50IGRlYnVnID0gMDsKKworbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCAwNjQ0KTsKKworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnZ2luZyBtZXNzYWdlc1xuXHRcdFx0MD1PZmYgKGRlZmF1bHQpLCAxPU9uIik7CisKKyNkZWZpbmUgY3M1M2wzMmFfZGJnKGZtdCwgYXJnLi4uKSBcCisJZG8geyBcCisJCWlmIChkZWJ1ZykgXAorCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXMgZGVidWcgJWQtJTA0eDogIiBmbXQsIGNsaWVudC0+ZHJpdmVyLT5uYW1lLCBcCisJCQkgICAgICAgaTJjX2FkYXB0ZXJfaWQoY2xpZW50LT5hZGFwdGVyKSwgY2xpZW50LT5hZGRyICwgIyMgYXJnKTsgXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgY3M1M2wzMmFfZXJyKGZtdCwgYXJnLi4uKSBkbyB7IFwKKwlwcmludGsoS0VSTl9FUlIgIiVzICVkLSUwNHg6ICIgZm10LCBjbGllbnQtPmRyaXZlci0+bmFtZSwgXAorCQlpMmNfYWRhcHRlcl9pZChjbGllbnQtPmFkYXB0ZXIpLCBjbGllbnQtPmFkZHIgLCAjIyBhcmcpOyB9IHdoaWxlICgwKQorI2RlZmluZSBjczUzbDMyYV9pbmZvKGZtdCwgYXJnLi4uKSBkbyB7IFwKKwlwcmludGsoS0VSTl9JTkZPICIlcyAlZC0lMDR4OiAiIGZtdCwgY2xpZW50LT5kcml2ZXItPm5hbWUsIFwKKwkJaTJjX2FkYXB0ZXJfaWQoY2xpZW50LT5hZGFwdGVyKSwgY2xpZW50LT5hZGRyICwgIyMgYXJnKTsgfSB3aGlsZSAoMCkKKworc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHgyMiA+PiAxLCBJMkNfQ0xJRU5UX0VORCB9OworCisKK0kyQ19DTElFTlRfSU5TTU9EOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW50IGNzNTNsMzJhX3dyaXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTggdmFsdWUpCit7CisJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWcsIHZhbHVlKTsKK30KKworc3RhdGljIGludCBjczUzbDMyYV9yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZykKK3sKKwlyZXR1cm4gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgcmVnKTsKK30KKworc3RhdGljIGludCBjczUzbDMyYV9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGludCBjbWQsCisJCQkgICAgdm9pZCAqYXJnKQoreworCWludCAqaW5wdXQgPSBhcmc7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgQVVEQ19TRVRfSU5QVVQ6CisJCXN3aXRjaCAoKmlucHV0KSB7CisJCWNhc2UgQVVESU9fVFVORVI6CisJCQljczUzbDMyYV93cml0ZShjbGllbnQsIDB4MDEsIDB4MDEpOworCQkJYnJlYWs7CisJCWNhc2UgQVVESU9fRVhURVJOOgorCQkJY3M1M2wzMmFfd3JpdGUoY2xpZW50LCAweDAxLCAweDIxKTsKKwkJCWJyZWFrOworCQljYXNlIEFVRElPX01VVEU6CisJCQljczUzbDMyYV93cml0ZShjbGllbnQsIDB4MDMsIDB4RjApOworCQkJYnJlYWs7CisJCWNhc2UgQVVESU9fVU5NVVRFOgorCQkJY3M1M2wzMmFfd3JpdGUoY2xpZW50LCAweDAzLCAweDMwKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJY3M1M2wzMmFfZXJyKCJJbnZhbGlkIGlucHV0ICVkLlxuIiwgKmlucHV0KTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWJyZWFrOworCisJY2FzZSBWSURJT0NfU19DVFJMOgorCQl7CisJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsID0gYXJnOworCisJCQlpZiAoY3RybC0+aWQgIT0gVjRMMl9DSURfQVVESU9fVk9MVU1FKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJaWYgKGN0cmwtPnZhbHVlID4gMTIgfHwgY3RybC0+dmFsdWUgPCAtOTApCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQljczUzbDMyYV93cml0ZShjbGllbnQsIDB4MDQsICh1OCkgY3RybC0+dmFsdWUpOworCQkJY3M1M2wzMmFfd3JpdGUoY2xpZW50LCAweDA1LCAodTgpIGN0cmwtPnZhbHVlKTsKKwkJCWJyZWFrOworCQl9CisKKwljYXNlIFZJRElPQ19MT0dfU1RBVFVTOgorCQl7CisJCQl1OCB2ID0gY3M1M2wzMmFfcmVhZChjbGllbnQsIDB4MDEpOworCQkJdTggbSA9IGNzNTNsMzJhX3JlYWQoY2xpZW50LCAweDAzKTsKKworCQkJY3M1M2wzMmFfaW5mbygiSW5wdXQ6ICVzJXNcbiIsCisJCQkJICAgICAgdiA9PSAweDIxID8gImV4dGVybmFsIGxpbmUgaW4iIDogInR1bmVyIiwKKwkJCQkgICAgICAobSAmIDB4QzApID8gIiAobXV0ZWQpIiA6ICIiKTsKKwkJCWJyZWFrOworCQl9CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIGkyYyBpbXBsZW1lbnRhdGlvbiAqLworCisvKgorICogR2VuZXJpYyBpMmMgcHJvYmUKKyAqIGNvbmNlcm5pbmcgdGhlIGFkZHJlc3NlczogaTJjIHdhbnRzIDcgYml0ICh3aXRob3V0IHRoZSByL3cgYml0KSwgc28gJz4+MScKKyAqLworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaTJjX2RyaXZlcjsKKworc3RhdGljIGludCBjczUzbDMyYV9hdHRhY2goc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkcmVzcywgaW50IGtpbmQpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKKwlpbnQgaTsKKworCS8qIENoZWNrIGlmIHRoZSBhZGFwdGVyIHN1cHBvcnRzIHRoZSBuZWVkZWQgZmVhdHVyZXMgKi8KKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCisJCXJldHVybiAwOworCisJY2xpZW50ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGkyY19jbGllbnQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY2xpZW50ID09IDApCisJCXJldHVybiAtRU5PTUVNOworCisJbWVtc2V0KGNsaWVudCwgMCwgc2l6ZW9mKHN0cnVjdCBpMmNfY2xpZW50KSk7CisJY2xpZW50LT5hZGRyID0gYWRkcmVzczsKKwljbGllbnQtPmFkYXB0ZXIgPSBhZGFwdGVyOworCWNsaWVudC0+ZHJpdmVyID0gJmkyY19kcml2ZXI7CisJY2xpZW50LT5mbGFncyA9IEkyQ19DTElFTlRfQUxMT1dfVVNFOworCXNucHJpbnRmKGNsaWVudC0+bmFtZSwgc2l6ZW9mKGNsaWVudC0+bmFtZSkgLSAxLCAiY3M1M2wzMmEiKTsKKworCWNzNTNsMzJhX2luZm8oImNoaXAgZm91bmQgQCAweCV4ICglcylcbiIsIGFkZHJlc3MgPDwgMSwgYWRhcHRlci0+bmFtZSk7CisKKwlmb3IgKGkgPSAxOyBpIDw9IDc7IGkrKykgeworCQl1OCB2ID0gY3M1M2wzMmFfcmVhZChjbGllbnQsIGkpOworCisJCWNzNTNsMzJhX2RiZygiUmVhZCBSZWcgJWQgJTAyeFxuIiwgaSwgdik7CisJfQorCisJLyogU2V0IGNzNTNsMzJhIGludGVybmFsIHJlZ2lzdGVyIGZvciBBZGFwdGVjIDIwMTAvMjQxMCBzZXR1cCAqLworCisJY3M1M2wzMmFfd3JpdGUoY2xpZW50LCAweDAxLCAodTgpIDB4MjEpOworCWNzNTNsMzJhX3dyaXRlKGNsaWVudCwgMHgwMiwgKHU4KSAweDI5KTsKKwljczUzbDMyYV93cml0ZShjbGllbnQsIDB4MDMsICh1OCkgMHgzMCk7CisJY3M1M2wzMmFfd3JpdGUoY2xpZW50LCAweDA0LCAodTgpIDB4MDApOworCWNzNTNsMzJhX3dyaXRlKGNsaWVudCwgMHgwNSwgKHU4KSAweDAwKTsKKwljczUzbDMyYV93cml0ZShjbGllbnQsIDB4MDYsICh1OCkgMHgwMCk7CisJY3M1M2wzMmFfd3JpdGUoY2xpZW50LCAweDA3LCAodTgpIDB4MDApOworCisJLyogRGlzcGxheSByZXN1bHRzLCBzaG91bGQgYmUgMHgyMSwweDI5LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCAqLworCisJZm9yIChpID0gMTsgaSA8PSA3OyBpKyspIHsKKwkJdTggdiA9IGNzNTNsMzJhX3JlYWQoY2xpZW50LCBpKTsKKworCQljczUzbDMyYV9kYmcoIlJlYWQgUmVnICVkICUwMnhcbiIsIGksIHYpOworCX0KKworCWkyY19hdHRhY2hfY2xpZW50KGNsaWVudCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjczUzbDMyYV9wcm9iZShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisjaWZkZWYgSTJDX0NMQVNTX1RWX0FOQUxPRworCWlmIChhZGFwdGVyLT5jbGFzcyAmIEkyQ19DTEFTU19UVl9BTkFMT0cpCisjZWxzZQorCWlmIChhZGFwdGVyLT5pZCA9PSBJMkNfSFdfQl9CVDg0OCkKKyNlbmRpZgorCQlyZXR1cm4gaTJjX3Byb2JlKGFkYXB0ZXIsICZhZGRyX2RhdGEsIGNzNTNsMzJhX2F0dGFjaCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3M1M2wzMmFfZGV0YWNoKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJaW50IGVycjsKKworCWVyciA9IGkyY19kZXRhY2hfY2xpZW50KGNsaWVudCk7CisJaWYgKGVycikgeworCQlyZXR1cm4gZXJyOworCX0KKwlrZnJlZShjbGllbnQpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIGkyYyBpbXBsZW1lbnRhdGlvbiAqLworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGkyY19kcml2ZXIgPSB7CisJLm5hbWUgPSAiY3M1M2wzMmEiLAorCS5pZCA9IEkyQ19EUklWRVJJRF9DUzUzTDMyQSwKKwkuZmxhZ3MgPSBJMkNfREZfTk9USUZZLAorCS5hdHRhY2hfYWRhcHRlciA9IGNzNTNsMzJhX3Byb2JlLAorCS5kZXRhY2hfY2xpZW50ID0gY3M1M2wzMmFfZGV0YWNoLAorCS5jb21tYW5kID0gY3M1M2wzMmFfY29tbWFuZCwKKwkub3duZXIgPSBUSElTX01PRFVMRSwKK307CisKKworc3RhdGljIGludCBfX2luaXQgY3M1M2wzMmFfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJmkyY19kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgY3M1M2wzMmFfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwlpMmNfZGVsX2RyaXZlcigmaTJjX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGNzNTNsMzJhX2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGNzNTNsMzJhX2NsZWFudXBfbW9kdWxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE4MThiNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9LY29uZmlnCkBAIC0wLDAgKzEsOTEgQEAKK2NvbmZpZyBWSURFT19DWDg4CisJdHJpc3RhdGUgIkNvbmV4YW50IDIzODh4IChidDg3OCBzdWNjZXNzb3IpIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBWSURFT19ERVYgJiYgUENJICYmIEkyQworCXNlbGVjdCBJMkNfQUxHT0JJVAorCXNlbGVjdCBGV19MT0FERVIKKwlzZWxlY3QgVklERU9fQlRDWAorCXNlbGVjdCBWSURFT19CVUYKKwlzZWxlY3QgVklERU9fVFVORVIKKwlzZWxlY3QgVklERU9fVFZFRVBST00KKwlzZWxlY3QgVklERU9fSVIKKwktLS1oZWxwLS0tCisJICBUaGlzIGlzIGEgdmlkZW80bGludXggZHJpdmVyIGZvciBDb25leGFudCAyMzg4eCBiYXNlZAorCSAgVFYgY2FyZHMuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGN4ODgwMAorCitjb25maWcgVklERU9fQ1g4OF9EVkIKKwl0cmlzdGF0ZSAiRFZCL0FUU0MgU3VwcG9ydCBmb3IgY3gyMzg4eCBiYXNlZCBUViBjYXJkcyIKKwlkZXBlbmRzIG9uIFZJREVPX0NYODggJiYgRFZCX0NPUkUKKwlzZWxlY3QgVklERU9fQlVGX0RWQgorCS0tLWhlbHAtLS0KKwkgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciBEVkIvQVRTQyBjYXJkcyBiYXNlZCBvbiB0aGUKKwkgIENvbm5leGFudCAyMzg4eCBjaGlwLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjeDg4LWR2Yi4KKworCSAgWW91IG11c3QgYWxzbyBzZWxlY3Qgb25lIG9yIG1vcmUgRFZCL0FUU0MgZGVtb2R1bGF0b3JzLgorCSAgSWYgeW91IGFyZSB1bnN1cmUgd2hpY2ggeW91IG5lZWQsIGNob29zZSBhbGwgb2YgdGhlbS4KKworY29uZmlnIFZJREVPX0NYODhfRFZCX0FMTF9GUk9OVEVORFMKKwlib29sICJCdWlsZCBhbGwgc3VwcG9ydGVkIGZyb250ZW5kcyBmb3IgY3gyMzg4eCBiYXNlZCBUViBjYXJkcyIKKwlkZWZhdWx0IHkKKwlkZXBlbmRzIG9uIFZJREVPX0NYODhfRFZCCisJc2VsZWN0IERWQl9NVDM1MgorCXNlbGVjdCBEVkJfT1I1MTEzMgorCXNlbGVjdCBEVkJfQ1gyMjcwMgorCXNlbGVjdCBEVkJfTEdEVDMzMFgKKwlzZWxlY3QgRFZCX05YVDIwMFgKKwktLS1oZWxwLS0tCisJICBUaGlzIGJ1aWxkcyBjeDg4LWR2YiB3aXRoIGFsbCBjdXJyZW50bHkgc3VwcG9ydGVkIGZyb250ZW5kCisJICBkZW1vZHVsYXRvcnMuICBJZiB5b3Ugd2lzaCB0byB0d2VhayB5b3VyIGNvbmZpZ3VyYXRpb24sIGFuZAorCSAgb25seSBpbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBoYXJkd2FyZSB0aGF0IHlvdSBuZWVkLCBjaG9vc2UgTiBoZXJlLgorCisJICBJZiB5b3UgYXJlIHVuc3VyZSwgY2hvb3NlIFkuCisKK2NvbmZpZyBWSURFT19DWDg4X0RWQl9NVDM1MgorCXRyaXN0YXRlICJaYXJsaW5rIE1UMzUyIERWQi1UIFN1cHBvcnQiCisJZGVmYXVsdCBtCisJZGVwZW5kcyBvbiBWSURFT19DWDg4X0RWQiAmJiAhVklERU9fQ1g4OF9EVkJfQUxMX0ZST05URU5EUworCXNlbGVjdCBEVkJfTVQzNTIKKwktLS1oZWxwLS0tCisJICBUaGlzIGFkZHMgRFZCLVQgc3VwcG9ydCBmb3IgY2FyZHMgYmFzZWQgb24gdGhlCisJICBDb25uZXhhbnQgMjM4OHggY2hpcCBhbmQgdGhlIE1UMzUyIGRlbW9kdWxhdG9yLgorCitjb25maWcgVklERU9fQ1g4OF9EVkJfT1I1MTEzMgorCXRyaXN0YXRlICJPUjUxMTMyIEFUU0MgU3VwcG9ydCIKKwlkZWZhdWx0IG0KKwlkZXBlbmRzIG9uIFZJREVPX0NYODhfRFZCICYmICFWSURFT19DWDg4X0RWQl9BTExfRlJPTlRFTkRTCisJc2VsZWN0IERWQl9PUjUxMTMyCisJLS0taGVscC0tLQorCSAgVGhpcyBhZGRzIEFUU0MgOFZTQiBhbmQgUUFNNjQvMjU2IHN1cHBvcnQgZm9yIGNhcmRzIGJhc2VkIG9uIHRoZQorCSAgQ29ubmV4YW50IDIzODh4IGNoaXAgYW5kIHRoZSBPUjUxMTMyIGRlbW9kdWxhdG9yLgorCitjb25maWcgVklERU9fQ1g4OF9EVkJfQ1gyMjcwMgorCXRyaXN0YXRlICJDb25leGFudCBDWDIyNzAyIERWQi1UIFN1cHBvcnQiCisJZGVmYXVsdCBtCisJZGVwZW5kcyBvbiBWSURFT19DWDg4X0RWQiAmJiAhVklERU9fQ1g4OF9EVkJfQUxMX0ZST05URU5EUworCXNlbGVjdCBEVkJfQ1gyMjcwMgorCS0tLWhlbHAtLS0KKwkgIFRoaXMgYWRkcyBEVkItVCBzdXBwb3J0IGZvciBjYXJkcyBiYXNlZCBvbiB0aGUKKwkgIENvbm5leGFudCAyMzg4eCBjaGlwIGFuZCB0aGUgQ1gyMjcwMiBkZW1vZHVsYXRvci4KKworY29uZmlnIFZJREVPX0NYODhfRFZCX0xHRFQzMzBYCisJdHJpc3RhdGUgIkxHIEVsZWN0cm9uaWNzIERUMzMwMi9EVDMzMDMgQVRTQyBTdXBwb3J0IgorCWRlZmF1bHQgbQorCWRlcGVuZHMgb24gVklERU9fQ1g4OF9EVkIgJiYgIVZJREVPX0NYODhfRFZCX0FMTF9GUk9OVEVORFMKKwlzZWxlY3QgRFZCX0xHRFQzMzBYCisJLS0taGVscC0tLQorCSAgVGhpcyBhZGRzIEFUU0MgOFZTQiBhbmQgUUFNNjQvMjU2IHN1cHBvcnQgZm9yIGNhcmRzIGJhc2VkIG9uIHRoZQorCSAgQ29ubmV4YW50IDIzODh4IGNoaXAgYW5kIHRoZSBMR0RUMzMwMi9MR0RUMzMwMyBkZW1vZHVsYXRvci4KKworY29uZmlnIFZJREVPX0NYODhfRFZCX05YVDIwMFgKKwl0cmlzdGF0ZSAiTlhUMjAwMi9OWFQyMDA0IEFUU0MgU3VwcG9ydCIKKwlkZWZhdWx0IG0KKwlkZXBlbmRzIG9uIFZJREVPX0NYODhfRFZCICYmICFWSURFT19DWDg4X0RWQl9BTExfRlJPTlRFTkRTCisJc2VsZWN0IERWQl9OWFQyMDBYCisJLS0taGVscC0tLQorCSAgVGhpcyBhZGRzIEFUU0MgOFZTQiBhbmQgUUFNNjQvMjU2IHN1cHBvcnQgZm9yIGNhcmRzIGJhc2VkIG9uIHRoZQorCSAgQ29ubmV4YW50IDIzODh4IGNoaXAgYW5kIHRoZSBOWFQyMDAyL05YVDIwMDQgZGVtb2R1bGF0b3IuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvTWFrZWZpbGUKaW5kZXggMTA3ZTQ4Ni4uMGRmNDBiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9NYWtlZmlsZQpAQCAtOSw2ICs5LDkgQEAKIEVYVFJBX0NGTEFHUyArPSAtSSQoc3JjKS8uLgogRVhUUkFfQ0ZMQUdTICs9IC1JJChzcmN0cmVlKS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZQogRVhUUkFfQ0ZMQUdTICs9IC1JJChzcmN0cmVlKS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMKK2lmbmVxICgkKENPTkZJR19WSURFT19CVUZfRFZCKSxuKQorIEVYVFJBX0NGTEFHUyArPSAtREhBVkVfVklERU9fQlVGX0RWQj0xCitlbmRpZgogaWZuZXEgKCQoQ09ORklHX0RWQl9DWDIyNzAyKSxuKQogIEVYVFJBX0NGTEFHUyArPSAtREhBVkVfQ1gyMjcwMj0xCiBlbmRpZgpAQCAtMjEsMyArMjQsNiBAQAogaWZuZXEgKCQoQ09ORklHX0RWQl9NVDM1MiksbikKICBFWFRSQV9DRkxBR1MgKz0gLURIQVZFX01UMzUyPTEKIGVuZGlmCitpZm5lcSAoJChDT05GSUdfRFZCX05YVDIwMFgpLG4pCisgRVhUUkFfQ0ZMQUdTICs9IC1ESEFWRV9OWFQyMDBYPTEKK2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1ibGFja2JpcmQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWJsYWNrYmlyZC5jCmluZGV4IDBjMGM1OWUuLjRhZTNmNzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWJsYWNrYmlyZC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWJsYWNrYmlyZC5jCkBAIC0zOCw3ICszOCw3IEBACiBNT0RVTEVfQVVUSE9SKCJHZXJkIEtub3JyIDxrcmF4ZWxAYnl0ZXNleC5vcmc+IFtTdVNFIExhYnNdIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgbXBlZ2J1ZnMgPSA4Oworc3RhdGljIHVuc2lnbmVkIGludCBtcGVnYnVmcyA9IDMyOwogbW9kdWxlX3BhcmFtKG1wZWdidWZzLGludCwwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MobXBlZ2J1ZnMsIm51bWJlciBvZiBtcGVnIGJ1ZmZlcnMsIHJhbmdlIDItMzIiKTsKIApAQCAtNDM2LDcgKzQzNiw3IEBACiAKIHN0YXRpYyBpbnQgbWVtb3J5X3JlYWQoc3RydWN0IGN4ODhfY29yZSAqY29yZSwgdTMyIGFkZHJlc3MsIHUzMiAqdmFsdWUpCiB7Ci0gICAgICAgIGludCByZXR2YWw7CisJaW50IHJldHZhbDsKIAl1MzIgdmFsOwogCiAJLyogV2FybmluZzogYWRkcmVzcyBpcyBkd29yZCBhZGRyZXNzICg0IGJ5dGVzKSAqLwpAQCAtNjA1LDExICs2MDUsMTEgQEAKIAl1MzIgKmRhdGFwdHI7CiAKIAlyZXR2YWwgID0gcmVnaXN0ZXJfd3JpdGUoZGV2LT5jb3JlLCBJVlRWX1JFR19WUFUsIDB4RkZGRkZGRUQpOwotICAgICAgICByZXR2YWwgfD0gcmVnaXN0ZXJfd3JpdGUoZGV2LT5jb3JlLCBJVlRWX1JFR19IV19CTE9DS1MsIElWVFZfQ01EX0hXX0JMT0NLU19SU1QpOwotICAgICAgICByZXR2YWwgfD0gcmVnaXN0ZXJfd3JpdGUoZGV2LT5jb3JlLCBJVlRWX1JFR19FTkNfU0RSQU1fUkVGUkVTSCwgMHg4MDAwMDY0MCk7Ci0gICAgICAgIHJldHZhbCB8PSByZWdpc3Rlcl93cml0ZShkZXYtPmNvcmUsIElWVFZfUkVHX0VOQ19TRFJBTV9QUkVDSEFSR0UsIDB4MUEpOworCXJldHZhbCB8PSByZWdpc3Rlcl93cml0ZShkZXYtPmNvcmUsIElWVFZfUkVHX0hXX0JMT0NLUywgSVZUVl9DTURfSFdfQkxPQ0tTX1JTVCk7CisJcmV0dmFsIHw9IHJlZ2lzdGVyX3dyaXRlKGRldi0+Y29yZSwgSVZUVl9SRUdfRU5DX1NEUkFNX1JFRlJFU0gsIDB4ODAwMDA2NDApOworCXJldHZhbCB8PSByZWdpc3Rlcl93cml0ZShkZXYtPmNvcmUsIElWVFZfUkVHX0VOQ19TRFJBTV9QUkVDSEFSR0UsIDB4MUEpOwogCW1zbGVlcCgxKTsKLSAgICAgICAgcmV0dmFsIHw9IHJlZ2lzdGVyX3dyaXRlKGRldi0+Y29yZSwgSVZUVl9SRUdfQVBVLCAwKTsKKwlyZXR2YWwgfD0gcmVnaXN0ZXJfd3JpdGUoZGV2LT5jb3JlLCBJVlRWX1JFR19BUFUsIDApOwogCiAJaWYgKHJldHZhbCA8IDApCiAJCWRwcmludGsoMCwgIkVycm9yIHdpdGggcmVnaXN0ZXJfd3JpdGVcbiIpOwpAQCAtNjU3LDEzICs2NTcsMTMgQEAKIAlyZWxlYXNlX2Zpcm13YXJlKGZpcm13YXJlKTsKIAlkcHJpbnRrKDAsICJGaXJtd2FyZSB1cGxvYWQgc3VjY2Vzc2Z1bC5cbiIpOwogCi0gICAgICAgIHJldHZhbCB8PSByZWdpc3Rlcl93cml0ZShkZXYtPmNvcmUsIElWVFZfUkVHX0hXX0JMT0NLUywgSVZUVl9DTURfSFdfQkxPQ0tTX1JTVCk7Ci0gICAgICAgIHJldHZhbCB8PSByZWdpc3Rlcl9yZWFkKGRldi0+Y29yZSwgSVZUVl9SRUdfU1BVLCAmdmFsdWUpOwotICAgICAgICByZXR2YWwgfD0gcmVnaXN0ZXJfd3JpdGUoZGV2LT5jb3JlLCBJVlRWX1JFR19TUFUsIHZhbHVlICYgMHhGRkZGRkZGRSk7CisJcmV0dmFsIHw9IHJlZ2lzdGVyX3dyaXRlKGRldi0+Y29yZSwgSVZUVl9SRUdfSFdfQkxPQ0tTLCBJVlRWX0NNRF9IV19CTE9DS1NfUlNUKTsKKwlyZXR2YWwgfD0gcmVnaXN0ZXJfcmVhZChkZXYtPmNvcmUsIElWVFZfUkVHX1NQVSwgJnZhbHVlKTsKKwlyZXR2YWwgfD0gcmVnaXN0ZXJfd3JpdGUoZGV2LT5jb3JlLCBJVlRWX1JFR19TUFUsIHZhbHVlICYgMHhGRkZGRkZGRSk7CiAJbXNsZWVwKDEpOwogCiAJcmV0dmFsIHw9IHJlZ2lzdGVyX3JlYWQoZGV2LT5jb3JlLCBJVlRWX1JFR19WUFUsICZ2YWx1ZSk7Ci0gICAgICAgIHJldHZhbCB8PSByZWdpc3Rlcl93cml0ZShkZXYtPmNvcmUsIElWVFZfUkVHX1ZQVSwgdmFsdWUgJiAweEZGRkZGRkU4KTsKKwlyZXR2YWwgfD0gcmVnaXN0ZXJfd3JpdGUoZGV2LT5jb3JlLCBJVlRWX1JFR19WUFUsIHZhbHVlICYgMHhGRkZGRkZFOCk7CiAKIAlpZiAocmV0dmFsIDwgMCkKIAkJZHByaW50aygwLCAiRXJyb3Igd2l0aCByZWdpc3Rlcl93cml0ZVxuIik7CkBAIC02ODMsODQgKzY4Myw1NjAgQEAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqREI6ICJEaXJlY3RCdXJuIgogKi8KLXN0YXRpYyB2b2lkIGJsYWNrYmlyZF9jb2RlY19zZXR0aW5ncyhzdHJ1Y3QgY3g4ODAyX2RldiAqZGV2KQorCitzdGF0aWMgc3RydWN0IGJsYWNrYmlyZF9kbnIgZGVmYXVsdF9kbnJfcGFyYW1zID0geworCS5tb2RlICAgICA9IEJMQUNLQklSRF9ETlJfQklUU19NQU5VQUwsCisJLnR5cGUgICAgID0gQkxBQ0tCSVJEX01FRElBTl9GSUxURVJfRElTQUJMRUQsCisJLnNwYXRpYWwgID0gMCwKKwkudGVtcG9yYWwgPSAwCit9Oworc3RhdGljIHN0cnVjdCB2NGwyX21wZWdfY29tcHJlc3Npb24gZGVmYXVsdF9tcGVnX3BhcmFtcyA9IHsKKwkuc3RfdHlwZSAgICAgICAgICA9IFY0TDJfTVBFR19QU18yLAorCS5zdF9iaXRyYXRlICAgICAgID0geworCQkubW9kZSAgICAgPSBWNEwyX0JJVFJBVEVfQ0JSLAorCQkubWluICAgICAgPSAwLAorCQkudGFyZ2V0ICAgPSAwLAorCQkubWF4ICAgICAgPSAwCisJfSwKKwkudHNfcGlkX3BtdCAgICAgICA9IDE2LAorCS50c19waWRfYXVkaW8gICAgID0gMjYwLAorCS50c19waWRfdmlkZW8gICAgID0gMjU2LAorCS50c19waWRfcGNyICAgICAgID0gMjU5LAorCS5wc19zaXplICAgICAgICAgID0gMCwKKwkuYXVfdHlwZSAgICAgICAgICA9IFY0TDJfTVBFR19BVV8yX0lJLAorCS5hdV9iaXRyYXRlICAgICAgID0geworCQkubW9kZSAgICAgPSBWNEwyX0JJVFJBVEVfQ0JSLAorCQkubWluICAgICAgPSAyMjQsCisJCS50YXJnZXQgICA9IDIyNCwKKwkJLm1heCAgICAgID0gMjI0CisJfSwKKwkuYXVfc2FtcGxlX3JhdGUgICAgPSA0NDEwMCwKKwkuYXVfcGVzaWQgICAgICAgICAgPSAwLAorCS52aV90eXBlICAgICAgICAgICA9IFY0TDJfTVBFR19WSV8yLAorCS52aV9hc3BlY3RfcmF0aW8gICA9IFY0TDJfTVBFR19BU1BFQ1RfNF8zLAorCS52aV9iaXRyYXRlICAgICAgICA9IHsKKwkJLm1vZGUgICAgICA9IFY0TDJfQklUUkFURV9DQlIsCisJCS5taW4gICAgICAgPSA0MDAwLAorCQkudGFyZ2V0ICAgID0gNDUwMCwKKwkJLm1heCAgICAgICA9IDYwMDAKKwl9LAorCS52aV9mcmFtZV9yYXRlICAgICA9IDI1LAorCS52aV9mcmFtZXNfcGVyX2dvcCA9IDE1LAorCS52aV9iZnJhbWVzX2NvdW50ICA9IDIsCisJLnZpX3Blc2lkICAgICAgICAgID0gMCwKKwkuY2xvc2VkX2dvcHMgICAgICAgPSAwLAorCS5wdWxsZG93biAgICAgICAgICA9IDAKK307CisKK3N0YXRpYyBlbnVtIGJsYWNrYmlyZF9zdHJlYW1fdHlwZSBtcGVnX3N0cmVhbV90eXBlc1tdID0geworCVtWNEwyX01QRUdfU1NfMV0gICA9IEJMQUNLQklSRF9TVFJFQU1fTVBFRzEsCisJW1Y0TDJfTVBFR19QU18yXSAgID0gQkxBQ0tCSVJEX1NUUkVBTV9QUk9HUkFNLAorCVtWNEwyX01QRUdfVFNfMl0gICA9IEJMQUNLQklSRF9TVFJFQU1fVFJBTlNQT1JULAorCVtWNEwyX01QRUdfUFNfRFZEXSA9IEJMQUNLQklSRF9TVFJFQU1fRFZELAorfTsKK3N0YXRpYyBlbnVtIGJsYWNrYmlyZF9hc3BlY3RfcmF0aW8gbXBlZ19zdHJlYW1fcmF0aW9zW10gPSB7CisJW1Y0TDJfTVBFR19BU1BFQ1RfU1FVQVJFXSA9IEJMQUNLQklSRF9BU1BFQ1RfUkFUSU9fMV8xX1NRVUFSRSwKKwlbVjRMMl9NUEVHX0FTUEVDVF80XzNdICAgID0gQkxBQ0tCSVJEX0FTUEVDVF9SQVRJT180XzMsCisJW1Y0TDJfTVBFR19BU1BFQ1RfMTZfOV0gICA9IEJMQUNLQklSRF9BU1BFQ1RfUkFUSU9fMTZfOSwKKwlbVjRMMl9NUEVHX0FTUEVDVF8xXzIyMV0gID0gQkxBQ0tCSVJEX0FTUEVDVF9SQVRJT18yMjFfMTAwLAorfTsKK3N0YXRpYyBlbnVtIGJsYWNrYmlyZF92aWRlb19iaXRyYXRlX3R5cGUgbXBlZ192aWRlb19iaXRyYXRlc1tdID0geworCVtWNEwyX0JJVFJBVEVfTk9ORV0gPSBCTEFDS0JJUkRfVklERU9fQ0JSLAorCVtWNEwyX0JJVFJBVEVfQ0JSXSAgPSBCTEFDS0JJUkRfVklERU9fQ0JSLAorCVtWNEwyX0JJVFJBVEVfVkJSXSAgPSBCTEFDS0JJUkRfVklERU9fVkJSLAorfTsKKy8qIGZpbmQgdGhlIGJlc3QgbGF5ZXIgSS9JSSBiaXRyYXRlIHRvIGZpdCBhIGdpdmVuIG51bWVyaWMgdmFsdWUgKi8KK3N0cnVjdCBiaXRyYXRlX2JpdHMgeworCXUzMiBiaXRzOyAvKiBsYXllciBiaXRzIGZvciB0aGUgYmVzdCBmaXQgKi8KKwl1MzIgcmF0ZTsgLyogYWN0dWFsIG51bWVyaWMgdmFsdWUgZm9yIHRoZSBsYXllciBiZXN0IGZpdCAqLworfTsKK3N0cnVjdCBiaXRyYXRlX2FwcHJveGltYXRpb24geworCXUzMiAgICAgICAgICAgICAgICAgdGFyZ2V0OyAgIC8qIG51bWVyaWMgdmFsdWUgb2YgdGhlIHJhdGUgd2Ugd2FudCAqLworCXN0cnVjdCBiaXRyYXRlX2JpdHMgbGF5ZXJbMl07Cit9Oworc3RhdGljIHN0cnVjdCBiaXRyYXRlX2FwcHJveGltYXRpb24gbXBlZ19hdWRpb19iaXRyYXRlc1tdID0geworCS8qIHRhcmdldCAgbGF5ZXJbMF0uYml0cyAgICAgICAgICAgbGF5ZXJbMF0ucmF0ZSAgICAgICBsYXllclsxXS5iaXRzICAgICAgICAgICBsYXllclsxXS5yYXRlICovCisJeyAgIDAsIHsgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgICAwLCB9LCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAgIDAsIH0sIH0sIH0sCisJeyAgMzIsIHsgeyBCTEFDS0JJUkRfQVVESU9fQklUU19MQVlFUl8xXzMyICwgIDMyLCB9LCB7IEJMQUNLQklSRF9BVURJT19CSVRTX0xBWUVSXzJfMzIgLCAgMzIsIH0sIH0sIH0sCisJeyAgNDgsIHsgeyBCTEFDS0JJUkRfQVVESU9fQklUU19MQVlFUl8xXzY0ICwgIDY0LCB9LCB7IEJMQUNLQklSRF9BVURJT19CSVRTX0xBWUVSXzJfNDggLCAgNDgsIH0sIH0sIH0sCisJeyAgNTYsIHsgeyBCTEFDS0JJUkRfQVVESU9fQklUU19MQVlFUl8xXzY0ICwgIDY0LCB9LCB7IEJMQUNLQklSRF9BVURJT19CSVRTX0xBWUVSXzJfNTYgLCAgNTYsIH0sIH0sIH0sCisJeyAgNjQsIHsgeyBCTEFDS0JJUkRfQVVESU9fQklUU19MQVlFUl8xXzY0ICwgIDY0LCB9LCB7IEJMQUNLQklSRF9BVURJT19CSVRTX0xBWUVSXzJfNjQgLCAgNjQsIH0sIH0sIH0sCisJeyAgODAsIHsgeyBCTEFDS0JJUkRfQVVESU9fQklUU19MQVlFUl8xXzk2ICwgIDk2LCB9LCB7IEJMQUNLQklSRF9BVURJT19CSVRTX0xBWUVSXzJfODAgLCAgODAsIH0sIH0sIH0sCisJeyAgOTYsIHsgeyBCTEFDS0JJUkRfQVVESU9fQklUU19MQVlFUl8xXzk2ICwgIDk2LCB9LCB7IEJMQUNLQklSRF9BVURJT19CSVRTX0xBWUVSXzJfOTYgLCAgOTYsIH0sIH0sIH0sCisJeyAxMTIsIHsgeyBCTEFDS0JJUkRfQVVESU9fQklUU19MQVlFUl8xXzEyOCwgMTI4LCB9LCB7IEJMQUNLQklSRF9BVURJT19CSVRTX0xBWUVSXzJfMTEyLCAxMTIsIH0sIH0sIH0sCisJeyAxMjgsIHsgeyBCTEFDS0JJUkRfQVVESU9fQklUU19MQVlFUl8xXzEyOCwgMTI4LCB9LCB7IEJMQUNLQklSRF9BVURJT19CSVRTX0xBWUVSXzJfMTI4LCAxMjgsIH0sIH0sIH0sCisJeyAxNjAsIHsgeyBCTEFDS0JJUkRfQVVESU9fQklUU19MQVlFUl8xXzE2MCwgMTYwLCB9LCB7IEJMQUNLQklSRF9BVURJT19CSVRTX0xBWUVSXzJfMTYwLCAxNjAsIH0sIH0sIH0sCisJeyAxOTIsIHsgeyBCTEFDS0JJUkRfQVVESU9fQklUU19MQVlFUl8xXzE5MiwgMTkyLCB9LCB7IEJMQUNLQklSRF9BVURJT19CSVRTX0xBWUVSXzJfMTkyLCAxOTIsIH0sIH0sIH0sCisJeyAyMjQsIHsgeyBCTEFDS0JJUkRfQVVESU9fQklUU19MQVlFUl8xXzIyNCwgMjI0LCB9LCB7IEJMQUNLQklSRF9BVURJT19CSVRTX0xBWUVSXzJfMjI0LCAyMjQsIH0sIH0sIH0sCisJeyAyNTYsIHsgeyBCTEFDS0JJUkRfQVVESU9fQklUU19MQVlFUl8xXzI1NiwgMjU2LCB9LCB7IEJMQUNLQklSRF9BVURJT19CSVRTX0xBWUVSXzJfMjU2LCAyNTYsIH0sIH0sIH0sCisJeyAyODgsIHsgeyBCTEFDS0JJUkRfQVVESU9fQklUU19MQVlFUl8xXzI4OCwgMjg4LCB9LCB7IEJMQUNLQklSRF9BVURJT19CSVRTX0xBWUVSXzJfMzIwLCAzMjAsIH0sIH0sIH0sCisJeyAzMjAsIHsgeyBCTEFDS0JJUkRfQVVESU9fQklUU19MQVlFUl8xXzMyMCwgMzIwLCB9LCB7IEJMQUNLQklSRF9BVURJT19CSVRTX0xBWUVSXzJfMzIwLCAzMjAsIH0sIH0sIH0sCisJeyAzNTIsIHsgeyBCTEFDS0JJUkRfQVVESU9fQklUU19MQVlFUl8xXzM1MiwgMzUyLCB9LCB7IEJMQUNLQklSRF9BVURJT19CSVRTX0xBWUVSXzJfMzg0LCAzODQsIH0sIH0sIH0sCisJeyAzODQsIHsgeyBCTEFDS0JJUkRfQVVESU9fQklUU19MQVlFUl8xXzM4NCwgMzg0LCB9LCB7IEJMQUNLQklSRF9BVURJT19CSVRTX0xBWUVSXzJfMzg0LCAzODQsIH0sIH0sIH0sCisJeyA0MTYsIHsgeyBCTEFDS0JJUkRfQVVESU9fQklUU19MQVlFUl8xXzQxNiwgNDE2LCB9LCB7IEJMQUNLQklSRF9BVURJT19CSVRTX0xBWUVSXzJfMzg0LCAzODQsIH0sIH0sIH0sCisJeyA0NDgsIHsgeyBCTEFDS0JJUkRfQVVESU9fQklUU19MQVlFUl8xXzQ0OCwgNDQ4LCB9LCB7IEJMQUNLQklSRF9BVURJT19CSVRTX0xBWUVSXzJfMzg0LCAzODQsIH0sIH0sIH0sCit9Oworc3RhdGljIGNvbnN0IGludCBCSVRSQVRFU19TSVpFID0gQVJSQVlfU0laRShtcGVnX2F1ZGlvX2JpdHJhdGVzKTsKKworc3RhdGljIHZvaWQgYmxhY2tiaXJkX3NldF9kZWZhdWx0X3BhcmFtcyhzdHJ1Y3QgY3g4ODAyX2RldiAqZGV2KQogewotCWludCBiaXRyYXRlX21vZGUgPSAxOwotCWludCBiaXRyYXRlID0gNzUwMDAwMDsKLQlpbnQgYml0cmF0ZV9wZWFrID0gNzUwMDAwMDsKLQliaXRyYXRlX21vZGUgPSBCTEFDS0JJUkRfVklERU9fQ0JSOwotCWJpdHJhdGUgPSA0MDAwKjEwMjQ7Ci0JYml0cmF0ZV9wZWFrID0gNDAwMCoxMDI0OworCXN0cnVjdCB2NGwyX21wZWdfY29tcHJlc3Npb24gKnBhcmFtcyA9ICZkZXYtPnBhcmFtczsKKwl1MzIgYXVfcGFyYW1zOwogCiAJLyogYXNzaWduIHN0cmVhbSB0eXBlICovCi0JYmxhY2tiaXJkX2FwaV9jbWQoZGV2LCBCTEFDS0JJUkRfQVBJX1NFVF9TVFJFQU1fVFlQRSwgMSwgMCwgQkxBQ0tCSVJEX1NUUkVBTV9QUk9HUkFNKTsKLQotCS8qIGFzc2lnbiBvdXRwdXQgcG9ydCAqLwotCWJsYWNrYmlyZF9hcGlfY21kKGRldiwgQkxBQ0tCSVJEX0FQSV9TRVRfT1VUUFVUX1BPUlQsIDEsIDAsIEJMQUNLQklSRF9PVVRQVVRfUE9SVF9TVFJFQU1JTkcpOyAvKiBIb3N0ICovCisJaWYoIHBhcmFtcy0+c3RfdHlwZSA+PSBBUlJBWV9TSVpFKG1wZWdfc3RyZWFtX3R5cGVzKSApCisJCXBhcmFtcy0+c3RfdHlwZSA9IFY0TDJfTVBFR19QU18yOworCWlmKCBwYXJhbXMtPnN0X3R5cGUgPT0gVjRMMl9NUEVHX1NTXzEgKQorCQlwYXJhbXMtPnZpX3R5cGUgPSBWNEwyX01QRUdfVklfMTsKKwllbHNlCisJCXBhcmFtcy0+dmlfdHlwZSA9IFY0TDJfTVBFR19WSV8yOworCWJsYWNrYmlyZF9hcGlfY21kKGRldiwgQkxBQ0tCSVJEX0FQSV9TRVRfU1RSRUFNX1RZUEUsIDEsIDAsIG1wZWdfc3RyZWFtX3R5cGVzW3BhcmFtcy0+c3RfdHlwZV0pOwogCiAJLyogYXNzaWduIGZyYW1lcmF0ZSAqLwotCWJsYWNrYmlyZF9hcGlfY21kKGRldiwgQkxBQ0tCSVJEX0FQSV9TRVRfRlJBTUVSQVRFLCAxLCAwLCBCTEFDS0JJUkRfRlJBTUVSQVRFX1BBTF8yNSk7Ci0KLQkvKiBhc3NpZ24gZnJhbWUgc2l6ZSAqLwotCWJsYWNrYmlyZF9hcGlfY21kKGRldiwgQkxBQ0tCSVJEX0FQSV9TRVRfUkVTT0xVVElPTiwgMiwgMCwKLQkJCSAgZGV2LT5oZWlnaHQsIGRldi0+d2lkdGgpOworCWlmKCBwYXJhbXMtPnZpX2ZyYW1lX3JhdGUgPD0gMjUgKQorCXsKKwkJcGFyYW1zLT52aV9mcmFtZV9yYXRlID0gMjU7CisJCWJsYWNrYmlyZF9hcGlfY21kKGRldiwgQkxBQ0tCSVJEX0FQSV9TRVRfRlJBTUVSQVRFLCAxLCAwLCBCTEFDS0JJUkRfRlJBTUVSQVRFX1BBTF8yNSk7CisJfQorCWVsc2UKKwl7CisJCXBhcmFtcy0+dmlfZnJhbWVfcmF0ZSA9IDMwOworCQlibGFja2JpcmRfYXBpX2NtZChkZXYsIEJMQUNLQklSRF9BUElfU0VUX0ZSQU1FUkFURSwgMSwgMCwgQkxBQ0tCSVJEX0ZSQU1FUkFURV9OVFNDXzMwKTsKKwl9CiAKIAkvKiBhc3NpZ24gYXNwZWN0IHJhdGlvICovCi0JYmxhY2tiaXJkX2FwaV9jbWQoZGV2LCBCTEFDS0JJUkRfQVBJX1NFVF9BU1BFQ1RfUkFUSU8sIDEsIDAsIEJMQUNLQklSRF9BU1BFQ1RfUkFUSU9fNF8zKTsKLQotCS8qIGFzc2lnbiBiaXRyYXRlcyAqLwotCWJsYWNrYmlyZF9hcGlfY21kKGRldiwgQkxBQ0tCSVJEX0FQSV9TRVRfVklERU9fQklUUkFURSwgNSwgMCwKLQkJCSBiaXRyYXRlX21vZGUsICAgICAgICAgLyogbW9kZSAqLwotCQkJIGJpdHJhdGUsICAgICAgICAgICAgICAvKiBicHMgKi8KLQkJCSBiaXRyYXRlX3BlYWsgLyBCTEFDS0JJUkRfUEVBS19SQVRFX0RJVklTT1IsICAgLyogcGVhay80MDAgKi8KLQkJCSBCTEFDS0JJUkRfTVVYX1JBVEVfREVGQVVMVCAvKiwgMHg3MCovKTsgICAgICAgICAgICAgLyogZW5jb2RpbmcgYnVmZmVyLCBja2VubmVkeSAqLworCWlmKCBwYXJhbXMtPnZpX2FzcGVjdF9yYXRpbyA+PSBBUlJBWV9TSVpFKG1wZWdfc3RyZWFtX3JhdGlvcykgKQorCQlwYXJhbXMtPnZpX2FzcGVjdF9yYXRpbyA9IFY0TDJfTVBFR19BU1BFQ1RfNF8zOworCWJsYWNrYmlyZF9hcGlfY21kKGRldiwgQkxBQ0tCSVJEX0FQSV9TRVRfQVNQRUNUX1JBVElPLCAxLCAwLCBtcGVnX3N0cmVhbV9yYXRpb3NbcGFyYW1zLT52aV9hc3BlY3RfcmF0aW9dKTsKIAogCS8qIGFzc2lnbiBnb3AgcHJvcGVydGllcyAqLwotCWJsYWNrYmlyZF9hcGlfY21kKGRldiwgQkxBQ0tCSVJEX0FQSV9TRVRfR09QX1NUUlVDVFVSRSwgMiwgMCwgMTUsIDMpOworCWJsYWNrYmlyZF9hcGlfY21kKGRldiwgQkxBQ0tCSVJEX0FQSV9TRVRfR09QX1NUUlVDVFVSRSwgMiwgMCwgcGFyYW1zLT52aV9mcmFtZXNfcGVyX2dvcCwgcGFyYW1zLT52aV9iZnJhbWVzX2NvdW50KzEpOworCisJLyogYXNzaWduIGdvcCBjbG9zdXJlICovCisJYmxhY2tiaXJkX2FwaV9jbWQoZGV2LCBCTEFDS0JJUkRfQVBJX1NFVF9HT1BfQ0xPU1VSRSwgMSwgMCwgcGFyYW1zLT5jbG9zZWRfZ29wcyk7CiAKIAkvKiBhc3NpZ24gMyAyIHB1bGxkb3duICovCi0JYmxhY2tiaXJkX2FwaV9jbWQoZGV2LCBCTEFDS0JJUkRfQVBJX1NFVF8zXzJfUFVMTERPV04sIDEsIDAsIEJMQUNLQklSRF8zXzJfUFVMTERPV05fRElTQUJMRUQpOworCWJsYWNrYmlyZF9hcGlfY21kKGRldiwgQkxBQ0tCSVJEX0FQSV9TRVRfM18yX1BVTExET1dOLCAxLCAwLCBwYXJhbXMtPnB1bGxkb3duKTsKKworCS8qIG1ha2Ugc3VyZSB0aGUgcGFyYW1zIGFyZSB3aXRoaW4gYm91bmRzICovCisJaWYoIHBhcmFtcy0+c3RfYml0cmF0ZS5tb2RlID49IEFSUkFZX1NJWkUobXBlZ192aWRlb19iaXRyYXRlcykgKQorCQlwYXJhbXMtPnZpX2JpdHJhdGUubW9kZSA9IFY0TDJfQklUUkFURV9OT05FOworCWlmKCBwYXJhbXMtPnZpX2JpdHJhdGUubW9kZSA+PSBBUlJBWV9TSVpFKG1wZWdfdmlkZW9fYml0cmF0ZXMpICkKKwkJcGFyYW1zLT52aV9iaXRyYXRlLm1vZGUgPSBWNEwyX0JJVFJBVEVfTk9ORTsKKwlpZiggcGFyYW1zLT5hdV9iaXRyYXRlLm1vZGUgPj0gQVJSQVlfU0laRShtcGVnX3ZpZGVvX2JpdHJhdGVzKSApCisJCXBhcmFtcy0+YXVfYml0cmF0ZS5tb2RlID0gVjRMMl9CSVRSQVRFX05PTkU7CiAKIAkvKiBhc3NpZ24gYXVkaW8gcHJvcGVydGllcyAqLwogCS8qIG5vdGU6IGl0J3Mgbm90IG5lY2Vzc2FyeSB0byBzZXQgdGhlIHNhbXBsZXJhdGUsIHRoZSBtcGVnIGVuY29kZXIgc2VlbXMgdG8gYXV0b2RldGVjdC9hZGp1c3QgKi8KLQkvKiBibGFja2JpcmRfYXBpX2NtZChkZXYsIElWVFZfQVBJX0FTU0lHTl9BVURJT19QUk9QRVJUSUVTLCAxLCAwLCAoMjw8MikgfCAoODw8NCkpOwotCSAgIGJsYWNrYmlyZF9hcGlfY21kKGRldiwgSVZUVl9BUElfQVNTSUdOX0FVRElPX1BST1BFUlRJRVMsIDEsIDAsIDAgfCAoMiA8PCAyKSB8ICgxNCA8PCA0KSk7ICovCi0JYmxhY2tiaXJkX2FwaV9jbWQoZGV2LCBCTEFDS0JJUkRfQVBJX1NFVF9BVURJT19QQVJBTVMsIDEsIDAsCi0JCQlCTEFDS0JJUkRfQVVESU9fQklUU180NDEwMEhaIHwKLQkJCUJMQUNLQklSRF9BVURJT19CSVRTX0xBWUVSXzIgfAotCQkJQkxBQ0tCSVJEX0FVRElPX0JJVFNfTEFZRVJfMl8yMjQgfAotCQkJQkxBQ0tCSVJEX0FVRElPX0JJVFNfU1RFUkVPIHwKKwlhdV9wYXJhbXMgPSBCTEFDS0JJUkRfQVVESU9fQklUU19TVEVSRU8gfAogCQkJLyogQkxBQ0tCSVJEX0FVRElPX0JJVFNfQk9VTkRfNCB8ICovCiAJCQlCTEFDS0JJUkRfQVVESU9fQklUU19FTVBIQVNJU19OT05FIHwKIAkJCUJMQUNLQklSRF9BVURJT19CSVRTX0NSQ19PRkYgfAogCQkJQkxBQ0tCSVJEX0FVRElPX0JJVFNfQ09QWVJJR0hUX09GRiB8Ci0JCQlCTEFDS0JJUkRfQVVESU9fQklUU19DT1BZCi0JCSk7CisJCQlCTEFDS0JJUkRfQVVESU9fQklUU19DT1BZIHwKKwkJCTA7CisJaWYoIHBhcmFtcy0+YXVfc2FtcGxlX3JhdGUgPD0gMzIwMDAgKQorCXsKKwkJcGFyYW1zLT5hdV9zYW1wbGVfcmF0ZSA9IDMyMDAwOworCQlhdV9wYXJhbXMgfD0gQkxBQ0tCSVJEX0FVRElPX0JJVFNfMzIwMDBIWjsKKwl9CisJZWxzZSBpZiggcGFyYW1zLT5hdV9zYW1wbGVfcmF0ZSA8PSA0NDEwMCApCisJeworCQlwYXJhbXMtPmF1X3NhbXBsZV9yYXRlID0gNDQxMDA7CisJCWF1X3BhcmFtcyB8PSBCTEFDS0JJUkRfQVVESU9fQklUU180NDEwMEhaOworCX0KKwllbHNlCisJeworCQlwYXJhbXMtPmF1X3NhbXBsZV9yYXRlID0gNDgwMDA7CisJCWF1X3BhcmFtcyB8PSBCTEFDS0JJUkRfQVVESU9fQklUU180ODAwMEhaOworCX0KKwlpZiggcGFyYW1zLT5hdV90eXBlID09IFY0TDJfTVBFR19BVV8yX0kgKQorCXsKKwkJYXVfcGFyYW1zIHw9IEJMQUNLQklSRF9BVURJT19CSVRTX0xBWUVSXzE7CisJfQorCWVsc2UKKwl7CisJCS8qIFRPRE86IHRyeSB0byBoYW5kbGUgdGhlIG90aGVyIGZvcm1hdHMgbW9yZSBncmFjZWZ1bGx5ICovCisJCXBhcmFtcy0+YXVfdHlwZSA9IFY0TDJfTVBFR19BVV8yX0lJOworCQlhdV9wYXJhbXMgfD0gQkxBQ0tCSVJEX0FVRElPX0JJVFNfTEFZRVJfMjsKKwl9CisJaWYoIHBhcmFtcy0+YXVfYml0cmF0ZS5tb2RlICkKKwl7CisJCWludCBsYXllcjsKKworCQlpZiggcGFyYW1zLT5hdV9iaXRyYXRlLm1vZGUgPT0gVjRMMl9CSVRSQVRFX0NCUiApCisJCQlwYXJhbXMtPmF1X2JpdHJhdGUubWF4ID0gcGFyYW1zLT52aV9iaXRyYXRlLnRhcmdldDsKKwkJZWxzZQorCQkJcGFyYW1zLT5hdV9iaXRyYXRlLnRhcmdldCA9IHBhcmFtcy0+dmlfYml0cmF0ZS5tYXg7CisKKwkJbGF5ZXIgPSBwYXJhbXMtPmF1X3R5cGU7CisJCWlmKCBwYXJhbXMtPmF1X2JpdHJhdGUudGFyZ2V0ID09IDAgKQorCQl7CisJCQkvKiBUT0RPOiB1c2UgdGhlIG1pbmltdW0gcG9zc2libGUgYml0cmF0ZSBpbnN0ZWFkIG9mIDAgPyAqLworCQkJYXVfcGFyYW1zIHw9IDA7CisJCX0KKwkJZWxzZSBpZiggcGFyYW1zLT5hdV9iaXRyYXRlLnRhcmdldCA+PQorCQkJIG1wZWdfYXVkaW9fYml0cmF0ZXNbQklUUkFURVNfU0laRS0xXS5sYXllcltsYXllcl0ucmF0ZSApCisJCXsKKwkJCS8qIGNsYW1wIHRoZSBiaXRyYXRlIHRvIHRoZSBtYXggc3VwcG9ydGVkIGJ5IHRoZSBzdGFuZGFyZCAqLworCQkJcGFyYW1zLT5hdV9iaXRyYXRlLnRhcmdldCA9IG1wZWdfYXVkaW9fYml0cmF0ZXNbQklUUkFURVNfU0laRS0xXS5sYXllcltsYXllcl0ucmF0ZTsKKwkJCXBhcmFtcy0+YXVfYml0cmF0ZS5tYXggPSBwYXJhbXMtPmF1X2JpdHJhdGUudGFyZ2V0OworCQkJYXVfcGFyYW1zIHw9IG1wZWdfYXVkaW9fYml0cmF0ZXNbQklUUkFURVNfU0laRS0xXS5sYXllcltsYXllcl0uYml0czsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qIHJvdW5kIHVwIHRvIHRoZSBuZWFyZXN0IHN1cHBvcnRlZCBiaXRyYXRlICovCisJCQlpbnQgaTsKKwkJCWZvcihpID0gMTsgaSA8IEJJVFJBVEVTX1NJWkU7IGkrKykKKwkJCXsKKwkJCQlpZiggcGFyYW1zLT5hdV9iaXRyYXRlLnRhcmdldCA+IG1wZWdfYXVkaW9fYml0cmF0ZXNbaS0xXS5sYXllcltsYXllcl0ucmF0ZSAmJgorCQkJCSAgICBwYXJhbXMtPmF1X2JpdHJhdGUudGFyZ2V0IDw9IG1wZWdfYXVkaW9fYml0cmF0ZXNbaV0ubGF5ZXJbbGF5ZXJdLnJhdGUgKQorCQkJCXsKKwkJCQkJcGFyYW1zLT5hdV9iaXRyYXRlLnRhcmdldCA9IG1wZWdfYXVkaW9fYml0cmF0ZXNbaV0ubGF5ZXJbbGF5ZXJdLnJhdGU7CisJCQkJCXBhcmFtcy0+YXVfYml0cmF0ZS5tYXggPSBwYXJhbXMtPmF1X2JpdHJhdGUudGFyZ2V0OworCQkJCQlhdV9wYXJhbXMgfD0gbXBlZ19hdWRpb19iaXRyYXRlc1tpXS5sYXllcltsYXllcl0uYml0czsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisJfQorCWVsc2UKKwl7CisJCS8qIFRPRE86ID8/PyAqLworCQlwYXJhbXMtPmF1X2JpdHJhdGUudGFyZ2V0ID0gcGFyYW1zLT5hdV9iaXRyYXRlLm1heCA9IDA7CisJCWF1X3BhcmFtcyB8PSAwOworCX0KKwlibGFja2JpcmRfYXBpX2NtZChkZXYsIEJMQUNLQklSRF9BUElfU0VUX0FVRElPX1BBUkFNUywgMSwgMCwgYXVfcGFyYW1zICk7CisKKwkvKiBhc3NpZ24gYml0cmF0ZXMgKi8KKwlpZiggcGFyYW1zLT52aV9iaXRyYXRlLm1vZGUgKQorCXsKKwkJLyogYml0cmF0ZSBpcyBzZXQsIGxldCdzIGZpZ3VyZSBvdXQgdGhlIGNici92YnIgbWVzcyAqLworCQlpZiggcGFyYW1zLT52aV9iaXRyYXRlLm1heCA8IHBhcmFtcy0+dmlfYml0cmF0ZS50YXJnZXQgKQorCQl7CisJCQlpZiggcGFyYW1zLT52aV9iaXRyYXRlLm1vZGUgPT0gVjRMMl9CSVRSQVRFX0NCUiApCisJCQkJcGFyYW1zLT52aV9iaXRyYXRlLm1heCA9IHBhcmFtcy0+dmlfYml0cmF0ZS50YXJnZXQ7CisJCQllbHNlCisJCQkJcGFyYW1zLT52aV9iaXRyYXRlLnRhcmdldCA9IHBhcmFtcy0+dmlfYml0cmF0ZS5tYXg7CisJCX0KKwl9CisJZWxzZQorCXsKKwkJaWYoIHBhcmFtcy0+c3RfYml0cmF0ZS5tYXggPCBwYXJhbXMtPnN0X2JpdHJhdGUudGFyZ2V0ICkKKwkJeworCQkJaWYoIHBhcmFtcy0+c3RfYml0cmF0ZS5tb2RlID09IFY0TDJfQklUUkFURV9WQlIgKQorCQkJCXBhcmFtcy0+c3RfYml0cmF0ZS50YXJnZXQgPSBwYXJhbXMtPnN0X2JpdHJhdGUubWF4OworCQkJZWxzZQorCQkJCXBhcmFtcy0+c3RfYml0cmF0ZS5tYXggPSBwYXJhbXMtPnN0X2JpdHJhdGUudGFyZ2V0OworCQl9CisJCS8qIGNhbGN1bGF0ZSB2aV9iaXRyYXRlID0gc3RfYml0cmF0ZSAtIGF1X2JpdHJhdGUgKi8KKwkJcGFyYW1zLT52aV9iaXRyYXRlLm1heCA9IHBhcmFtcy0+c3RfYml0cmF0ZS5tYXggLSBwYXJhbXMtPmF1X2JpdHJhdGUubWF4OworCQlwYXJhbXMtPnZpX2JpdHJhdGUudGFyZ2V0ID0gcGFyYW1zLT5zdF9iaXRyYXRlLnRhcmdldCAtIHBhcmFtcy0+YXVfYml0cmF0ZS50YXJnZXQ7CisJfQorCWJsYWNrYmlyZF9hcGlfY21kKGRldiwgQkxBQ0tCSVJEX0FQSV9TRVRfVklERU9fQklUUkFURSwgNCwgMCwKKwkJCQltcGVnX3ZpZGVvX2JpdHJhdGVzW3BhcmFtcy0+dmlfYml0cmF0ZS5tb2RlXSwKKwkJCQlwYXJhbXMtPnZpX2JpdHJhdGUudGFyZ2V0ICogMTAwMCwgLyoga2JwcyAtPiBicHMgKi8KKwkJCQlwYXJhbXMtPnZpX2JpdHJhdGUubWF4ICogMTAwMCAvIEJMQUNLQklSRF9QRUFLX1JBVEVfRElWSVNPUiwgLyogcGVhay80MDAgKi8KKwkJCQlCTEFDS0JJUkRfTVVYX1JBVEVfREVGQVVMVCAvKiwgMHg3MCovKTsgLyogZW5jb2RpbmcgYnVmZmVyLCBja2VubmVkeSAqLworCisJLyogVE9ETzogaW1wbGVtZW50IHRoZSBzdHJlYW0gSUQgc3R1ZmY6CisJCXRzX3BpZF9wbXQsIHRzX3BpZF9hdWRpbywgdHNfcGlkX3ZpZGVvLCB0c19waWRfcGNyLAorCQlwc19zaXplLCBhdV9wZXNpZCwgdmlfcGVzaWQKKwkqLworfQorI2RlZmluZSBDSEVDS19QQVJBTSggbmFtZSApICggZGV2LT5wYXJhbXMubmFtZSAhPSBwYXJhbXMtPm5hbWUgKQorI2RlZmluZSBJRl9QQVJBTSggbmFtZSApIGlmKCBDSEVDS19QQVJBTSggbmFtZSApICkKKyNkZWZpbmUgVVBEQVRFX1BBUkFNKCBuYW1lICkgZGV2LT5wYXJhbXMubmFtZSA9IHBhcmFtcy0+bmFtZQordm9pZCBibGFja2JpcmRfc2V0X3BhcmFtcyhzdHJ1Y3QgY3g4ODAyX2RldiAqZGV2LCBzdHJ1Y3QgdjRsMl9tcGVnX2NvbXByZXNzaW9uICpwYXJhbXMpCit7CisJdTMyIGF1X3BhcmFtczsKKworCS8qIGFzc2lnbiBzdHJlYW0gdHlwZSAqLworCWlmKCBwYXJhbXMtPnN0X3R5cGUgPj0gQVJSQVlfU0laRShtcGVnX3N0cmVhbV90eXBlcykgKQorCQlwYXJhbXMtPnN0X3R5cGUgPSBWNEwyX01QRUdfUFNfMjsKKwlpZiggcGFyYW1zLT5zdF90eXBlID09IFY0TDJfTVBFR19TU18xICkKKwkJcGFyYW1zLT52aV90eXBlID0gVjRMMl9NUEVHX1ZJXzE7CisJZWxzZQorCQlwYXJhbXMtPnZpX3R5cGUgPSBWNEwyX01QRUdfVklfMjsKKwlpZiggQ0hFQ0tfUEFSQU0oIHN0X3R5cGUgKSB8fCBDSEVDS19QQVJBTSggdmlfdHlwZSApICkKKwl7CisJCVVQREFURV9QQVJBTSggc3RfdHlwZSApOworCQlVUERBVEVfUEFSQU0oIHZpX3R5cGUgKTsKKwkJYmxhY2tiaXJkX2FwaV9jbWQoZGV2LCBCTEFDS0JJUkRfQVBJX1NFVF9TVFJFQU1fVFlQRSwgMSwgMCwgbXBlZ19zdHJlYW1fdHlwZXNbcGFyYW1zLT5zdF90eXBlXSk7CisJfQorCisJLyogYXNzaWduIGZyYW1lcmF0ZSAqLworCWlmKCBwYXJhbXMtPnZpX2ZyYW1lX3JhdGUgPD0gMjUgKQorCQlwYXJhbXMtPnZpX2ZyYW1lX3JhdGUgPSAyNTsKKwllbHNlCisJCXBhcmFtcy0+dmlfZnJhbWVfcmF0ZSA9IDMwOworCUlGX1BBUkFNKCB2aV9mcmFtZV9yYXRlICkKKwl7CisJCVVQREFURV9QQVJBTSggdmlfZnJhbWVfcmF0ZSApOworCQlpZiggcGFyYW1zLT52aV9mcmFtZV9yYXRlID09IDI1ICkKKwkJCWJsYWNrYmlyZF9hcGlfY21kKGRldiwgQkxBQ0tCSVJEX0FQSV9TRVRfRlJBTUVSQVRFLCAxLCAwLCBCTEFDS0JJUkRfRlJBTUVSQVRFX1BBTF8yNSk7CisJCWVsc2UKKwkJCWJsYWNrYmlyZF9hcGlfY21kKGRldiwgQkxBQ0tCSVJEX0FQSV9TRVRfRlJBTUVSQVRFLCAxLCAwLCBCTEFDS0JJUkRfRlJBTUVSQVRFX05UU0NfMzApOworCX0KKworCS8qIGFzc2lnbiBhc3BlY3QgcmF0aW8gKi8KKwlpZiggcGFyYW1zLT52aV9hc3BlY3RfcmF0aW8gPj0gQVJSQVlfU0laRShtcGVnX3N0cmVhbV9yYXRpb3MpICkKKwkJcGFyYW1zLT52aV9hc3BlY3RfcmF0aW8gPSBWNEwyX01QRUdfQVNQRUNUXzRfMzsKKwlJRl9QQVJBTSggdmlfYXNwZWN0X3JhdGlvICkKKwl7CisJCVVQREFURV9QQVJBTSggdmlfYXNwZWN0X3JhdGlvICk7CisJCWJsYWNrYmlyZF9hcGlfY21kKGRldiwgQkxBQ0tCSVJEX0FQSV9TRVRfQVNQRUNUX1JBVElPLCAxLCAwLCBtcGVnX3N0cmVhbV9yYXRpb3NbcGFyYW1zLT52aV9hc3BlY3RfcmF0aW9dKTsKKwl9CisKKwkvKiBhc3NpZ24gZ29wIHByb3BlcnRpZXMgKi8KKwlpZiggQ0hFQ0tfUEFSQU0oIHZpX2ZyYW1lc19wZXJfZ29wICkgfHwgQ0hFQ0tfUEFSQU0oIHZpX2JmcmFtZXNfY291bnQgKSApCisJeworCQlVUERBVEVfUEFSQU0oIHZpX2ZyYW1lc19wZXJfZ29wICk7CisJCVVQREFURV9QQVJBTSggdmlfYmZyYW1lc19jb3VudCApOworCQlibGFja2JpcmRfYXBpX2NtZChkZXYsIEJMQUNLQklSRF9BUElfU0VUX0dPUF9TVFJVQ1RVUkUsIDIsIDAsIHBhcmFtcy0+dmlfZnJhbWVzX3Blcl9nb3AsIHBhcmFtcy0+dmlfYmZyYW1lc19jb3VudCsxKTsKKwl9CiAKIAkvKiBhc3NpZ24gZ29wIGNsb3N1cmUgKi8KLQlibGFja2JpcmRfYXBpX2NtZChkZXYsIEJMQUNLQklSRF9BUElfU0VUX0dPUF9DTE9TVVJFLCAxLCAwLCBCTEFDS0JJUkRfR09QX0NMT1NVUkVfT0ZGKTsKKwlJRl9QQVJBTSggY2xvc2VkX2dvcHMgKQorCXsKKwkJVVBEQVRFX1BBUkFNKCBjbG9zZWRfZ29wcyApOworCQlibGFja2JpcmRfYXBpX2NtZChkZXYsIEJMQUNLQklSRF9BUElfU0VUX0dPUF9DTE9TVVJFLCAxLCAwLCBwYXJhbXMtPmNsb3NlZF9nb3BzKTsKKwl9CiAKKwkvKiBhc3NpZ24gMyAyIHB1bGxkb3duICovCisJSUZfUEFSQU0oIHB1bGxkb3duICkKKwl7CisJCVVQREFURV9QQVJBTSggcHVsbGRvd24gKTsKKwkJYmxhY2tiaXJkX2FwaV9jbWQoZGV2LCBCTEFDS0JJUkRfQVBJX1NFVF8zXzJfUFVMTERPV04sIDEsIDAsIHBhcmFtcy0+cHVsbGRvd24pOworCX0KIAorCS8qIG1ha2Ugc3VyZSB0aGUgcGFyYW1zIGFyZSB3aXRoaW4gYm91bmRzICovCisJaWYoIHBhcmFtcy0+c3RfYml0cmF0ZS5tb2RlID49IEFSUkFZX1NJWkUobXBlZ192aWRlb19iaXRyYXRlcykgKQorCQlwYXJhbXMtPnZpX2JpdHJhdGUubW9kZSA9IFY0TDJfQklUUkFURV9OT05FOworCWlmKCBwYXJhbXMtPnZpX2JpdHJhdGUubW9kZSA+PSBBUlJBWV9TSVpFKG1wZWdfdmlkZW9fYml0cmF0ZXMpICkKKwkJcGFyYW1zLT52aV9iaXRyYXRlLm1vZGUgPSBWNEwyX0JJVFJBVEVfTk9ORTsKKwlpZiggcGFyYW1zLT5hdV9iaXRyYXRlLm1vZGUgPj0gQVJSQVlfU0laRShtcGVnX3ZpZGVvX2JpdHJhdGVzKSApCisJCXBhcmFtcy0+YXVfYml0cmF0ZS5tb2RlID0gVjRMMl9CSVRSQVRFX05PTkU7CisKKwkvKiBhc3NpZ24gYXVkaW8gcHJvcGVydGllcyAqLworCS8qIG5vdGU6IGl0J3Mgbm90IG5lY2Vzc2FyeSB0byBzZXQgdGhlIHNhbXBsZXJhdGUsIHRoZSBtcGVnIGVuY29kZXIgc2VlbXMgdG8gYXV0b2RldGVjdC9hZGp1c3QgKi8KKwlhdV9wYXJhbXMgPSBCTEFDS0JJUkRfQVVESU9fQklUU19TVEVSRU8gfAorCQkJLyogQkxBQ0tCSVJEX0FVRElPX0JJVFNfQk9VTkRfNCB8ICovCisJQkxBQ0tCSVJEX0FVRElPX0JJVFNfRU1QSEFTSVNfTk9ORSB8CisJCUJMQUNLQklSRF9BVURJT19CSVRTX0NSQ19PRkYgfAorCQlCTEFDS0JJUkRfQVVESU9fQklUU19DT1BZUklHSFRfT0ZGIHwKKwkJQkxBQ0tCSVJEX0FVRElPX0JJVFNfQ09QWSB8CisJCTA7CisJaWYoIHBhcmFtcy0+YXVfc2FtcGxlX3JhdGUgPCAzMjAwMCApCisJeworCQlwYXJhbXMtPmF1X3NhbXBsZV9yYXRlID0gMzIwMDA7CisJCWF1X3BhcmFtcyB8PSBCTEFDS0JJUkRfQVVESU9fQklUU18zMjAwMEhaOworCX0KKwllbHNlIGlmKCBwYXJhbXMtPmF1X3NhbXBsZV9yYXRlIDwgNDQxMDAgKQorCXsKKwkJcGFyYW1zLT5hdV9zYW1wbGVfcmF0ZSA9IDQ0MTAwOworCQlhdV9wYXJhbXMgfD0gQkxBQ0tCSVJEX0FVRElPX0JJVFNfNDQxMDBIWjsKKwl9CisJZWxzZQorCXsKKwkJcGFyYW1zLT5hdV9zYW1wbGVfcmF0ZSA9IDQ4MDAwOworCQlhdV9wYXJhbXMgfD0gQkxBQ0tCSVJEX0FVRElPX0JJVFNfNDgwMDBIWjsKKwl9CisJaWYoIHBhcmFtcy0+YXVfdHlwZSA9PSBWNEwyX01QRUdfQVVfMl9JICkKKwl7CisJCWF1X3BhcmFtcyB8PSBCTEFDS0JJUkRfQVVESU9fQklUU19MQVlFUl8xOworCX0KKwllbHNlCisJeworCQkvKiBUT0RPOiB0cnkgdG8gaGFuZGxlIHRoZSBvdGhlciBmb3JtYXRzIG1vcmUgZ3JhY2VmdWxseSAqLworCQlwYXJhbXMtPmF1X3R5cGUgPSBWNEwyX01QRUdfQVVfMl9JSTsKKwkJYXVfcGFyYW1zIHw9IEJMQUNLQklSRF9BVURJT19CSVRTX0xBWUVSXzI7CisJfQorCWlmKCBwYXJhbXMtPmF1X2JpdHJhdGUubW9kZSApCisJeworCQlpbnQgbGF5ZXI7CisKKwkJaWYoIHBhcmFtcy0+YXVfYml0cmF0ZS5tb2RlID09IFY0TDJfQklUUkFURV9DQlIgKQorCQkJcGFyYW1zLT5hdV9iaXRyYXRlLm1heCA9IHBhcmFtcy0+dmlfYml0cmF0ZS50YXJnZXQ7CisJCWVsc2UKKwkJCXBhcmFtcy0+YXVfYml0cmF0ZS50YXJnZXQgPSBwYXJhbXMtPnZpX2JpdHJhdGUubWF4OworCisJCWxheWVyID0gcGFyYW1zLT5hdV90eXBlOworCQlpZiggcGFyYW1zLT5hdV9iaXRyYXRlLnRhcmdldCA9PSAwICkKKwkJeworCQkJLyogVE9ETzogdXNlIHRoZSBtaW5pbXVtIHBvc3NpYmxlIGJpdHJhdGUgaW5zdGVhZCBvZiAwID8gKi8KKwkJCWF1X3BhcmFtcyB8PSAwOworCQl9CisJCWVsc2UgaWYoIHBhcmFtcy0+YXVfYml0cmF0ZS50YXJnZXQgPj0KKwkJCSBtcGVnX2F1ZGlvX2JpdHJhdGVzW0JJVFJBVEVTX1NJWkUtMV0ubGF5ZXJbbGF5ZXJdLnJhdGUgKQorCQl7CisJCQkvKiBjbGFtcCB0aGUgYml0cmF0ZSB0byB0aGUgbWF4IHN1cHBvcnRlZCBieSB0aGUgc3RhbmRhcmQgKi8KKwkJCXBhcmFtcy0+YXVfYml0cmF0ZS50YXJnZXQgPSBtcGVnX2F1ZGlvX2JpdHJhdGVzW0JJVFJBVEVTX1NJWkUtMV0ubGF5ZXJbbGF5ZXJdLnJhdGU7CisJCQlwYXJhbXMtPmF1X2JpdHJhdGUubWF4ID0gcGFyYW1zLT5hdV9iaXRyYXRlLnRhcmdldDsKKwkJCWF1X3BhcmFtcyB8PSBtcGVnX2F1ZGlvX2JpdHJhdGVzW0JJVFJBVEVTX1NJWkUtMV0ubGF5ZXJbbGF5ZXJdLmJpdHM7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKiByb3VuZCB1cCB0byB0aGUgbmVhcmVzdCBzdXBwb3J0ZWQgYml0cmF0ZSAqLworCQkJaW50IGk7CisJCQlmb3IoaSA9IDE7IGkgPCBCSVRSQVRFU19TSVpFOyBpKyspCisJCQl7CisJCQkJaWYoIHBhcmFtcy0+YXVfYml0cmF0ZS50YXJnZXQgPiBtcGVnX2F1ZGlvX2JpdHJhdGVzW2ktMV0ubGF5ZXJbbGF5ZXJdLnJhdGUgJiYKKwkJCQkgICAgcGFyYW1zLT5hdV9iaXRyYXRlLnRhcmdldCA8PSBtcGVnX2F1ZGlvX2JpdHJhdGVzW2ldLmxheWVyW2xheWVyXS5yYXRlICkKKwkJCQl7CisJCQkJCXBhcmFtcy0+YXVfYml0cmF0ZS50YXJnZXQgPSBtcGVnX2F1ZGlvX2JpdHJhdGVzW2ldLmxheWVyW2xheWVyXS5yYXRlOworCQkJCQlwYXJhbXMtPmF1X2JpdHJhdGUubWF4ID0gcGFyYW1zLT5hdV9iaXRyYXRlLnRhcmdldDsKKwkJCQkJYXVfcGFyYW1zIHw9IG1wZWdfYXVkaW9fYml0cmF0ZXNbaV0ubGF5ZXJbbGF5ZXJdLmJpdHM7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwllbHNlCisJeworCQkvKiBUT0RPOiA/Pz8gKi8KKwkJcGFyYW1zLT5hdV9iaXRyYXRlLnRhcmdldCA9IHBhcmFtcy0+YXVfYml0cmF0ZS5tYXggPSAwOworCQlhdV9wYXJhbXMgfD0gMDsKKwl9CisJaWYoIENIRUNLX1BBUkFNKCBhdV90eXBlICkgfHwgQ0hFQ0tfUEFSQU0oIGF1X3NhbXBsZV9yYXRlICkKKwkJfHwgQ0hFQ0tfUEFSQU0oIGF1X2JpdHJhdGUubW9kZSApIHx8IENIRUNLX1BBUkFNKCBhdV9iaXRyYXRlLm1heCApCisJCXx8IENIRUNLX1BBUkFNKCBhdV9iaXRyYXRlLnRhcmdldCApCisJKQorCXsKKwkJVVBEQVRFX1BBUkFNKCBhdV90eXBlICk7CisJCVVQREFURV9QQVJBTSggYXVfc2FtcGxlX3JhdGUgKTsKKwkJVVBEQVRFX1BBUkFNKCBhdV9iaXRyYXRlICk7CisJCWJsYWNrYmlyZF9hcGlfY21kKGRldiwgQkxBQ0tCSVJEX0FQSV9TRVRfQVVESU9fUEFSQU1TLCAxLCAwLCBhdV9wYXJhbXMgKTsKKwl9CisKKwkvKiBhc3NpZ24gYml0cmF0ZXMgKi8KKwlpZiggcGFyYW1zLT52aV9iaXRyYXRlLm1vZGUgKQorCXsKKwkJLyogYml0cmF0ZSBpcyBzZXQsIGxldCdzIGZpZ3VyZSBvdXQgdGhlIGNici92YnIgbWVzcyAqLworCQlpZiggcGFyYW1zLT52aV9iaXRyYXRlLm1heCA8IHBhcmFtcy0+dmlfYml0cmF0ZS50YXJnZXQgKQorCQl7CisJCQlpZiggcGFyYW1zLT52aV9iaXRyYXRlLm1vZGUgPT0gVjRMMl9CSVRSQVRFX0NCUiApCisJCQkJcGFyYW1zLT52aV9iaXRyYXRlLm1heCA9IHBhcmFtcy0+dmlfYml0cmF0ZS50YXJnZXQ7CisJCQllbHNlCisJCQkJcGFyYW1zLT52aV9iaXRyYXRlLnRhcmdldCA9IHBhcmFtcy0+dmlfYml0cmF0ZS5tYXg7CisJCX0KKwl9CisJZWxzZQorCXsKKwkJaWYoIHBhcmFtcy0+c3RfYml0cmF0ZS5tYXggPCBwYXJhbXMtPnN0X2JpdHJhdGUudGFyZ2V0ICkKKwkJeworCQkJaWYoIHBhcmFtcy0+c3RfYml0cmF0ZS5tb2RlID09IFY0TDJfQklUUkFURV9WQlIgKQorCQkJCXBhcmFtcy0+c3RfYml0cmF0ZS50YXJnZXQgPSBwYXJhbXMtPnN0X2JpdHJhdGUubWF4OworCQkJZWxzZQorCQkJCXBhcmFtcy0+c3RfYml0cmF0ZS5tYXggPSBwYXJhbXMtPnN0X2JpdHJhdGUudGFyZ2V0OworCQl9CisJCS8qIGNhbGN1bGF0ZSB2aV9iaXRyYXRlID0gc3RfYml0cmF0ZSAtIGF1X2JpdHJhdGUgKi8KKwkJcGFyYW1zLT52aV9iaXRyYXRlLm1heCA9IHBhcmFtcy0+c3RfYml0cmF0ZS5tYXggLSBwYXJhbXMtPmF1X2JpdHJhdGUubWF4OworCQlwYXJhbXMtPnZpX2JpdHJhdGUudGFyZ2V0ID0gcGFyYW1zLT5zdF9iaXRyYXRlLnRhcmdldCAtIHBhcmFtcy0+YXVfYml0cmF0ZS50YXJnZXQ7CisJfQorCVVQREFURV9QQVJBTSggc3RfYml0cmF0ZSApOworCWlmKCBDSEVDS19QQVJBTSggdmlfYml0cmF0ZS5tb2RlICkgfHwgQ0hFQ0tfUEFSQU0oIHZpX2JpdHJhdGUubWF4ICkKKwkJfHwgQ0hFQ0tfUEFSQU0oIHZpX2JpdHJhdGUudGFyZ2V0ICkKKwkpCisJeworCQlVUERBVEVfUEFSQU0oIHZpX2JpdHJhdGUgKTsKKwkJYmxhY2tiaXJkX2FwaV9jbWQoZGV2LCBCTEFDS0JJUkRfQVBJX1NFVF9WSURFT19CSVRSQVRFLCA0LCAwLAorCQkJCW1wZWdfdmlkZW9fYml0cmF0ZXNbcGFyYW1zLT52aV9iaXRyYXRlLm1vZGVdLAorCQkJCXBhcmFtcy0+dmlfYml0cmF0ZS50YXJnZXQgKiAxMDAwLCAvKiBrYnBzIC0+IGJwcyAqLworCQkJCXBhcmFtcy0+dmlfYml0cmF0ZS5tYXggKiAxMDAwIC8gQkxBQ0tCSVJEX1BFQUtfUkFURV9ESVZJU09SLCAvKiBwZWFrLzQwMCAqLworCQkJCUJMQUNLQklSRF9NVVhfUkFURV9ERUZBVUxUIC8qLCAweDcwKi8pOyAvKiBlbmNvZGluZyBidWZmZXIsIGNrZW5uZWR5ICovCisJfQorCisJLyogVE9ETzogaW1wbGVtZW50IHRoZSBzdHJlYW0gSUQgc3R1ZmY6CisJCXRzX3BpZF9wbXQsIHRzX3BpZF9hdWRpbywgdHNfcGlkX3ZpZGVvLCB0c19waWRfcGNyLAorCQlwc19zaXplLCBhdV9wZXNpZCwgdmlfcGVzaWQKKwkqLworCVVQREFURV9QQVJBTSggdHNfcGlkX3BtdCApOworCVVQREFURV9QQVJBTSggdHNfcGlkX2F1ZGlvICk7CisJVVBEQVRFX1BBUkFNKCB0c19waWRfdmlkZW8gKTsKKwlVUERBVEVfUEFSQU0oIHRzX3BpZF9wY3IgKTsKKwlVUERBVEVfUEFSQU0oIHBzX3NpemUgKTsKKwlVUERBVEVfUEFSQU0oIGF1X3Blc2lkICk7CisJVVBEQVRFX1BBUkFNKCB2aV9wZXNpZCApOworfQorCitzdGF0aWMgdm9pZCBibGFja2JpcmRfc2V0X2RlZmF1bHRfZG5yX3BhcmFtcyhzdHJ1Y3QgY3g4ODAyX2RldiAqZGV2KQorewogCS8qIGFzc2lnbiBkbnIgZmlsdGVyIG1vZGUgKi8KKwlpZiggZGV2LT5kbnJfcGFyYW1zLm1vZGUgPiBCTEFDS0JJUkRfRE5SX0JJVFNfQVVUTyApCisJCWRldi0+ZG5yX3BhcmFtcy5tb2RlID0gQkxBQ0tCSVJEX0ROUl9CSVRTX01BTlVBTDsKKwlpZiggZGV2LT5kbnJfcGFyYW1zLnR5cGUgPiBCTEFDS0JJUkRfTUVESUFOX0ZJTFRFUl9ESUFHT05BTCApCisJCWRldi0+ZG5yX3BhcmFtcy50eXBlID0gQkxBQ0tCSVJEX01FRElBTl9GSUxURVJfRElTQUJMRUQ7CiAJYmxhY2tiaXJkX2FwaV9jbWQoZGV2LCBCTEFDS0JJUkRfQVBJX1NFVF9ETlJfTU9ERSwgMiwgMCwKLQkJCUJMQUNLQklSRF9ETlJfQklUU19NQU5VQUwsCi0JCQlCTEFDS0JJUkRfTUVESUFOX0ZJTFRFUl9ESVNBQkxFRAotCQkpOworCQkJCWRldi0+ZG5yX3BhcmFtcy5tb2RlLAorCQkJCWRldi0+ZG5yX3BhcmFtcy50eXBlCisJCQkpOwogCiAJLyogYXNzaWduIGRuciBmaWx0ZXIgcHJvcHMqLwotCWJsYWNrYmlyZF9hcGlfY21kKGRldiwgQkxBQ0tCSVJEX0FQSV9TRVRfTUFOVUFMX0ROUiwgMiwgMCwgMCwgMCk7CisJaWYoIGRldi0+ZG5yX3BhcmFtcy5zcGF0aWFsID4gMTUgKQorCQlkZXYtPmRucl9wYXJhbXMuc3BhdGlhbCA9IDE1OworCWlmKCBkZXYtPmRucl9wYXJhbXMudGVtcG9yYWwgPiAzMSApCisJCWRldi0+ZG5yX3BhcmFtcy50ZW1wb3JhbCA9IDMxOworCWJsYWNrYmlyZF9hcGlfY21kKGRldiwgQkxBQ0tCSVJEX0FQSV9TRVRfTUFOVUFMX0ROUiwgMiwgMCwKKwkJCQlkZXYtPmRucl9wYXJhbXMuc3BhdGlhbCwKKwkJCQlkZXYtPmRucl9wYXJhbXMudGVtcG9yYWwKKwkJCSk7Cit9CisjZGVmaW5lIENIRUNLX0ROUl9QQVJBTSggbmFtZSApICggZGV2LT5kbnJfcGFyYW1zLm5hbWUgIT0gZG5yX3BhcmFtcy0+bmFtZSApCisjZGVmaW5lIFVQREFURV9ETlJfUEFSQU0oIG5hbWUgKSBkZXYtPmRucl9wYXJhbXMubmFtZSA9IGRucl9wYXJhbXMtPm5hbWUKK3ZvaWQgYmxhY2tiaXJkX3NldF9kbnJfcGFyYW1zKHN0cnVjdCBjeDg4MDJfZGV2ICpkZXYsIHN0cnVjdCBibGFja2JpcmRfZG5yKiBkbnJfcGFyYW1zKQoreworCS8qIGFzc2lnbiBkbnIgZmlsdGVyIG1vZGUgKi8KKwkvKiBjbGFtcCB2YWx1ZXMgKi8KKwlpZiggZG5yX3BhcmFtcy0+bW9kZSA+IEJMQUNLQklSRF9ETlJfQklUU19BVVRPICkKKwkJZG5yX3BhcmFtcy0+bW9kZSA9IEJMQUNLQklSRF9ETlJfQklUU19NQU5VQUw7CisJaWYoIGRucl9wYXJhbXMtPnR5cGUgPiBCTEFDS0JJUkRfTUVESUFOX0ZJTFRFUl9ESUFHT05BTCApCisJCWRucl9wYXJhbXMtPnR5cGUgPSBCTEFDS0JJUkRfTUVESUFOX0ZJTFRFUl9ESVNBQkxFRDsKKwkvKiBjaGVjayBpZiB0aGUgcGFyYW1zIGFjdHVhbGx5IGNoYW5nZWQgKi8KKwlpZiggQ0hFQ0tfRE5SX1BBUkFNKCBtb2RlICkgfHwgQ0hFQ0tfRE5SX1BBUkFNKCB0eXBlICkgKQorCXsKKwkJVVBEQVRFX0ROUl9QQVJBTSggbW9kZSApOworCQlVUERBVEVfRE5SX1BBUkFNKCB0eXBlICk7CisJCWJsYWNrYmlyZF9hcGlfY21kKGRldiwgQkxBQ0tCSVJEX0FQSV9TRVRfRE5SX01PREUsIDIsIDAsIGRucl9wYXJhbXMtPm1vZGUsIGRucl9wYXJhbXMtPnR5cGUpOworCX0KKworCS8qIGFzc2lnbiBkbnIgZmlsdGVyIHByb3BzKi8KKwlpZiggZG5yX3BhcmFtcy0+c3BhdGlhbCA+IDE1ICkKKwkJZG5yX3BhcmFtcy0+c3BhdGlhbCA9IDE1OworCWlmKCBkbnJfcGFyYW1zLT50ZW1wb3JhbCA+IDMxICkKKwkJZG5yX3BhcmFtcy0+dGVtcG9yYWwgPSAzMTsKKwlpZiggQ0hFQ0tfRE5SX1BBUkFNKCBzcGF0aWFsICkgfHwgQ0hFQ0tfRE5SX1BBUkFNKCB0ZW1wb3JhbCApICkKKwl7CisJCVVQREFURV9ETlJfUEFSQU0oIHNwYXRpYWwgKTsKKwkJVVBEQVRFX0ROUl9QQVJBTSggdGVtcG9yYWwgKTsKKwkJYmxhY2tiaXJkX2FwaV9jbWQoZGV2LCBCTEFDS0JJUkRfQVBJX1NFVF9NQU5VQUxfRE5SLCAyLCAwLCBkbnJfcGFyYW1zLT5zcGF0aWFsLCBkbnJfcGFyYW1zLT50ZW1wb3JhbCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBibGFja2JpcmRfY29kZWNfc2V0dGluZ3Moc3RydWN0IGN4ODgwMl9kZXYgKmRldikKK3sKKworCS8qIGFzc2lnbiBvdXRwdXQgcG9ydCAqLworCWJsYWNrYmlyZF9hcGlfY21kKGRldiwgQkxBQ0tCSVJEX0FQSV9TRVRfT1VUUFVUX1BPUlQsIDEsIDAsIEJMQUNLQklSRF9PVVRQVVRfUE9SVF9TVFJFQU1JTkcpOyAvKiBIb3N0ICovCisKKwkvKiBhc3NpZ24gZnJhbWUgc2l6ZSAqLworCWJsYWNrYmlyZF9hcGlfY21kKGRldiwgQkxBQ0tCSVJEX0FQSV9TRVRfUkVTT0xVVElPTiwgMiwgMCwKKwkJCQlkZXYtPmhlaWdodCwgZGV2LT53aWR0aCk7CiAKIAkvKiBhc3NpZ24gY29yaW5nIGxldmVscyAobHVtYV9oLCBsdW1hX2wsIGNocm9tYV9oLCBjaHJvbWFfbCkgKi8KIAlibGFja2JpcmRfYXBpX2NtZChkZXYsIEJMQUNLQklSRF9BUElfU0VUX0ROUl9NRURJQU4sIDQsIDAsIDAsIDI1NSwgMCwgMjU1KTsKIAogCS8qIGFzc2lnbiBzcGF0aWFsIGZpbHRlciB0eXBlOiBsdW1hX3Q6IGhvcml6X29ubHksIGNocm9tYV90OiBob3Jpel9vbmx5ICovCiAJYmxhY2tiaXJkX2FwaV9jbWQoZGV2LCBCTEFDS0JJUkRfQVBJX1NFVF9TUEFUSUFMX0ZJTFRFUiwgMiwgMCwKLQkJCUJMQUNLQklSRF9TUEFUSUFMX0ZJTFRFUl9MVU1BXzFEX0hPUklaLAotCQkJQkxBQ0tCSVJEX1NQQVRJQUxfRklMVEVSX0NIUk9NQV8xRF9IT1JJWgotCQkpOworCQkJCUJMQUNLQklSRF9TUEFUSUFMX0ZJTFRFUl9MVU1BXzFEX0hPUklaLAorCQkJCUJMQUNLQklSRF9TUEFUSUFMX0ZJTFRFUl9DSFJPTUFfMURfSE9SSVoKKwkJCSk7CiAKIAkvKiBhc3NpZ24gZnJhbWUgZHJvcCByYXRlICovCiAJLyogYmxhY2tiaXJkX2FwaV9jbWQoZGV2LCBJVlRWX0FQSV9BU1NJR05fRlJBTUVfRFJPUF9SQVRFLCAxLCAwLCAwKTsgKi8KKworCWJsYWNrYmlyZF9zZXRfZGVmYXVsdF9wYXJhbXMoZGV2KTsKKwlibGFja2JpcmRfc2V0X2RlZmF1bHRfZG5yX3BhcmFtcyhkZXYpOwogfQogCiBzdGF0aWMgaW50IGJsYWNrYmlyZF9pbml0aWFsaXplX2NvZGVjKHN0cnVjdCBjeDg4MDJfZGV2ICpkZXYpCkBAIC04NTEsMTUgKzEzMjcsMTAgQEAKIAlzdHJ1Y3QgY3g4ODAyX2ZoICpmaCA9IHEtPnByaXZfZGF0YTsKIAogCWZoLT5kZXYtPnRzX3BhY2tldF9zaXplICA9IDE4OCAqIDQ7IC8qIHdhczogNTEyICovCi0JZmgtPmRldi0+dHNfcGFja2V0X2NvdW50ID0gMzI7IC8qIHdhczogMTAwICovCisJZmgtPmRldi0+dHNfcGFja2V0X2NvdW50ID0gbXBlZ2J1ZnM7IC8qIHdhczogMTAwICovCiAKIAkqc2l6ZSA9IGZoLT5kZXYtPnRzX3BhY2tldF9zaXplICogZmgtPmRldi0+dHNfcGFja2V0X2NvdW50OwotCWlmICgwID09ICpjb3VudCkKLQkJKmNvdW50ID0gbXBlZ2J1ZnM7Ci0JaWYgKCpjb3VudCA8IDIpCi0JCSpjb3VudCA9IDI7Ci0JaWYgKCpjb3VudCA+IDMyKQotCQkqY291bnQgPSAzMjsKKwkqY291bnQgPSBmaC0+ZGV2LT50c19wYWNrZXRfY291bnQ7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTg2OCw3ICsxMzM5LDcgQEAKIAkgICAgICAgZW51bSB2NGwyX2ZpZWxkIGZpZWxkKQogewogCXN0cnVjdCBjeDg4MDJfZmggKmZoID0gcS0+cHJpdl9kYXRhOwotCXJldHVybiBjeDg4MDJfYnVmX3ByZXBhcmUoZmgtPmRldiwgKHN0cnVjdCBjeDg4X2J1ZmZlciopdmIpOworCXJldHVybiBjeDg4MDJfYnVmX3ByZXBhcmUoZmgtPmRldiwgKHN0cnVjdCBjeDg4X2J1ZmZlciopdmIsIGZpZWxkKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTkyMCw4ICsxMzkxLDYgQEAKIAkJCVY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUgfAogCQkJVjRMMl9DQVBfUkVBRFdSSVRFICAgICB8CiAJCQlWNEwyX0NBUF9TVFJFQU1JTkcgICAgIHwKLQkJCVY0TDJfQ0FQX1ZCSV9DQVBUVVJFICAgfAotCQkJVjRMMl9DQVBfVklERU9fT1ZFUkxBWSB8CiAJCQkwOwogCQlpZiAoVU5TRVQgIT0gY29yZS0+dHVuZXJfdHlwZSkKIAkJCWNhcC0+Y2FwYWJpbGl0aWVzIHw9IFY0TDJfQ0FQX1RVTkVSOwpAQCAtOTQxLDI3ICsxNDEwLDUyIEBACiAKIAkJbWVtc2V0KGYsMCxzaXplb2YoKmYpKTsKIAkJZi0+aW5kZXggPSBpbmRleDsKLQkJc3RybGNweShmLT5kZXNjcmlwdGlvbiwgIk1QRUcgVFMiLCBzaXplb2YoZi0+ZGVzY3JpcHRpb24pKTsKKwkJc3RybGNweShmLT5kZXNjcmlwdGlvbiwgIk1QRUciLCBzaXplb2YoZi0+ZGVzY3JpcHRpb24pKTsKIAkJZi0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKIAkJZi0+cGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfTVBFRzsKIAkJcmV0dXJuIDA7CiAJfQogCWNhc2UgVklESU9DX0dfRk1UOgotCWNhc2UgVklESU9DX1NfRk1UOgotCWNhc2UgVklESU9DX1RSWV9GTVQ6CiAJewotCQkvKiBGSVhNRSAtLSBxdWljayduJ2RpcnR5IGZvciBleGFjdGx5IG9uZSBzaXplIC4uLiAqLwogCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYgPSBhcmc7CiAKIAkJbWVtc2V0KGYsMCxzaXplb2YoKmYpKTsKIAkJZi0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwkJZi0+Zm10LnBpeC5waXhlbGZvcm1hdCAgPSBWNEwyX1BJWF9GTVRfTVBFRzsKKwkJZi0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPSAwOworCQlmLT5mbXQucGl4LnNpemVpbWFnZSAgICA9IGRldi0+dHNfcGFja2V0X3NpemUgKiBkZXYtPnRzX3BhY2tldF9jb3VudDsgLyogMTg4ICogNCAqIDEwMjQ7ICovCisJCWYtPmZtdC5waXguY29sb3JzcGFjZSAgID0gMDsKIAkJZi0+Zm10LnBpeC53aWR0aCAgICAgICAgPSBkZXYtPndpZHRoOwogCQlmLT5mbXQucGl4LmhlaWdodCAgICAgICA9IGRldi0+aGVpZ2h0OworCQlmLT5mbXQucGl4LmZpZWxkICAgICAgICA9IGZoLT5tcGVncS5maWVsZDsKKwkJZHByaW50aygwLCJWSURJT0NfR19GTVQ6IHc6ICVkLCBoOiAlZCwgZjogJWRcbiIsCisJCQlkZXYtPndpZHRoLCBkZXYtPmhlaWdodCwgZmgtPm1wZWdxLmZpZWxkICk7CisJCXJldHVybiAwOworCX0KKwljYXNlIFZJRElPQ19UUllfRk1UOgorCXsKKwkJc3RydWN0IHY0bDJfZm9ybWF0ICpmID0gYXJnOworCisJCWYtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CiAJCWYtPmZtdC5waXgucGl4ZWxmb3JtYXQgID0gVjRMMl9QSVhfRk1UX01QRUc7Ci0JCWYtPmZtdC5waXguZmllbGQgICAgICAgID0gVjRMMl9GSUVMRF9OT05FOwogCQlmLT5mbXQucGl4LmJ5dGVzcGVybGluZSA9IDA7Ci0JCWYtPmZtdC5waXguc2l6ZWltYWdlICAgID0gMTg4ICogNCAqIDEwMjQ7IC8qIDEwMjQgKiA1MTIgKi8gLyogRklYTUU6IEJVRkZFUl9TSVpFICovOworCQlmLT5mbXQucGl4LnNpemVpbWFnZSAgICA9IGRldi0+dHNfcGFja2V0X3NpemUgKiBkZXYtPnRzX3BhY2tldF9jb3VudDsgLyogMTg4ICogNCAqIDEwMjQ7ICovOwogCQlmLT5mbXQucGl4LmNvbG9yc3BhY2UgICA9IDA7CisJCWRwcmludGsoMCwiVklESU9DX1RSWV9GTVQ6IHc6ICVkLCBoOiAlZCwgZjogJWRcbiIsCisJCQlkZXYtPndpZHRoLCBkZXYtPmhlaWdodCwgZmgtPm1wZWdxLmZpZWxkICk7CisJCXJldHVybiAwOworCX0KKwljYXNlIFZJRElPQ19TX0ZNVDoKKwl7CisJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZiA9IGFyZzsKKworCQlmLT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCQlmLT5mbXQucGl4LnBpeGVsZm9ybWF0ICA9IFY0TDJfUElYX0ZNVF9NUEVHOworCQlmLT5mbXQucGl4LmJ5dGVzcGVybGluZSA9IDA7CisJCWYtPmZtdC5waXguc2l6ZWltYWdlICAgID0gZGV2LT50c19wYWNrZXRfc2l6ZSAqIGRldi0+dHNfcGFja2V0X2NvdW50OyAvKiAxODggKiA0ICogMTAyNDsgKi87CisJCWYtPmZtdC5waXguY29sb3JzcGFjZSAgID0gMDsKKwkJZHByaW50aygwLCJWSURJT0NfU19GTVQ6IHc6ICVkLCBoOiAlZCwgZjogJWRcbiIsCisJCQlmLT5mbXQucGl4LndpZHRoLCBmLT5mbXQucGl4LmhlaWdodCwgZi0+Zm10LnBpeC5maWVsZCApOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTk4NSw2ICsxNDc5LDIyIEBACiAJY2FzZSBWSURJT0NfU1RSRUFNT0ZGOgogCQlyZXR1cm4gdmlkZW9idWZfc3RyZWFtb2ZmKCZmaC0+bXBlZ3EpOwogCisJLyogLS0tIG1wZWcgY29tcHJlc3Npb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwljYXNlIFZJRElPQ19HX01QRUdDT01QOgorCXsKKwkJc3RydWN0IHY0bDJfbXBlZ19jb21wcmVzc2lvbiAqZiA9IGFyZzsKKworCQltZW1jcHkoZiwmZGV2LT5wYXJhbXMsc2l6ZW9mKCpmKSk7CisJCXJldHVybiAwOworCX0KKwljYXNlIFZJRElPQ19TX01QRUdDT01QOgorCXsKKwkJc3RydWN0IHY0bDJfbXBlZ19jb21wcmVzc2lvbiAqZiA9IGFyZzsKKworCQlibGFja2JpcmRfc2V0X3BhcmFtcyhkZXYsIGYpOworCQlyZXR1cm4gMDsKKwl9CisKIAlkZWZhdWx0OgogCQlyZXR1cm4gY3g4OF9kb19pb2N0bCggaW5vZGUsIGZpbGUsIDAsIGRldi0+Y29yZSwgY21kLCBhcmcsIGN4ODhfaW9jdGxfaG9vayApOwogCX0KQEAgLTEwMzQsMTYgKzE1NDQsMTcgQEAKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBmaDsKIAlmaC0+ZGV2ICAgICAgPSBkZXY7CiAKLQkvKiBGSVhNRTogbG9ja2luZyBhZ2FpbnN0IG90aGVyIHZpZGVvIGRldmljZSAqLwotCWN4ODhfc2V0X3NjYWxlKGRldi0+Y29yZSwgZGV2LT53aWR0aCwgZGV2LT5oZWlnaHQsCi0JCSAgICAgICBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQpOwotCiAJdmlkZW9idWZfcXVldWVfaW5pdCgmZmgtPm1wZWdxLCAmYmxhY2tiaXJkX3FvcHMsCiAJCQkgICAgZGV2LT5wY2ksICZkZXYtPnNsb2NrLAogCQkJICAgIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSwKLQkJCSAgICBWNEwyX0ZJRUxEX1RPUCwKKwkJCSAgICBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQsCiAJCQkgICAgc2l6ZW9mKHN0cnVjdCBjeDg4X2J1ZmZlciksCiAJCQkgICAgZmgpOworCisJLyogRklYTUU6IGxvY2tpbmcgYWdhaW5zdCBvdGhlciB2aWRlbyBkZXZpY2UgKi8KKwljeDg4X3NldF9zY2FsZShkZXYtPmNvcmUsIGRldi0+d2lkdGgsIGRldi0+aGVpZ2h0LAorCQkJZmgtPm1wZWdxLmZpZWxkKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0xMTczLDYgKzE2ODQsOCBAQAogCWRldi0+Y29yZSA9IGNvcmU7CiAJZGV2LT53aWR0aCA9IDcyMDsKIAlkZXYtPmhlaWdodCA9IDU3NjsKKwltZW1jcHkoJmRldi0+cGFyYW1zLCZkZWZhdWx0X21wZWdfcGFyYW1zLHNpemVvZihkZWZhdWx0X21wZWdfcGFyYW1zKSk7CisJbWVtY3B5KCZkZXYtPmRucl9wYXJhbXMsJmRlZmF1bHRfZG5yX3BhcmFtcyxzaXplb2YoZGVmYXVsdF9kbnJfcGFyYW1zKSk7CiAKIAllcnIgPSBjeDg4MDJfaW5pdF9jb21tb24oZGV2KTsKIAlpZiAoMCAhPSBlcnIpCkBAIC0xMTk5LDcgKzE3MTIsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2RldmV4aXQgYmxhY2tiaXJkX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldikKIHsKLSAgICAgICAgc3RydWN0IGN4ODgwMl9kZXYgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwY2lfZGV2KTsKKwlzdHJ1Y3QgY3g4ODAyX2RldiAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBjaV9kZXYpOwogCiAJLyogYmxhY2tiaXJkICovCiAJYmxhY2tiaXJkX3VucmVnaXN0ZXJfdmlkZW8oZGV2KTsKQEAgLTEyMTUsOCArMTcyOCw4IEBACiAJewogCQkudmVuZG9yICAgICAgID0gMHgxNGYxLAogCQkuZGV2aWNlICAgICAgID0gMHg4ODAyLAotICAgICAgICAgICAgICAgIC5zdWJ2ZW5kb3IgICAgPSBQQ0lfQU5ZX0lELAotICAgICAgICAgICAgICAgIC5zdWJkZXZpY2UgICAgPSBQQ0lfQU5ZX0lELAorCQkuc3VidmVuZG9yICAgID0gUENJX0FOWV9JRCwKKwkJLnN1YmRldmljZSAgICA9IFBDSV9BTllfSUQsCiAJfSx7CiAJCS8qIC0tLSBlbmQgb2YgbGlzdCAtLS0gKi8KIAl9CkBAIC0xMjI0LDEwICsxNzM3LDEwIEBACiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgY3g4ODAyX3BjaV90YmwpOwogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYmxhY2tiaXJkX3BjaV9kcml2ZXIgPSB7Ci0gICAgICAgIC5uYW1lICAgICA9ICJjeDg4LWJsYWNrYmlyZCIsCi0gICAgICAgIC5pZF90YWJsZSA9IGN4ODgwMl9wY2lfdGJsLAotICAgICAgICAucHJvYmUgICAgPSBibGFja2JpcmRfcHJvYmUsCi0gICAgICAgIC5yZW1vdmUgICA9IF9fZGV2ZXhpdF9wKGJsYWNrYmlyZF9yZW1vdmUpLAorCS5uYW1lICAgICA9ICJjeDg4LWJsYWNrYmlyZCIsCisJLmlkX3RhYmxlID0gY3g4ODAyX3BjaV90YmwsCisJLnByb2JlICAgID0gYmxhY2tiaXJkX3Byb2JlLAorCS5yZW1vdmUgICA9IF9fZGV2ZXhpdF9wKGJsYWNrYmlyZF9yZW1vdmUpLAogCS5zdXNwZW5kICA9IGN4ODgwMl9zdXNwZW5kX2NvbW1vbiwKIAkucmVzdW1lICAgPSBjeDg4MDJfcmVzdW1lX2NvbW1vbiwKIH07CkBAIC0xMjU3LDYgKzE3NzAsOCBAQAogCiBFWFBPUlRfU1lNQk9MKGN4ODhfaW9jdGxfaG9vayk7CiBFWFBPUlRfU1lNQk9MKGN4ODhfaW9jdGxfdHJhbnNsYXRvcik7CitFWFBPUlRfU1lNQk9MKGJsYWNrYmlyZF9zZXRfcGFyYW1zKTsKK0VYUE9SVF9TWU1CT0woYmxhY2tiaXJkX3NldF9kbnJfcGFyYW1zKTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jYXJkcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY2FyZHMuYwppbmRleCA0ZGE5MWQ1Li5mMjI2ODYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNhcmRzLmMKQEAgLTEyNiwyNyArMTI2LDI3IEBACiAJCS5pbnB1dCAgICAgICAgICA9IHt7CiAJCQkudHlwZSAgID0gQ1g4OF9WTVVYX1RFTEVWSVNJT04sCiAJCQkudm11eCAgID0gMCwKLSAgICAgICAgICAgICAgICAgICAgICAgIC5ncGlvMCAgPSAweDAzZmYsCisJCQkuZ3BpbzAgID0gMHgwM2ZmLAogCQl9LHsKIAkJCS50eXBlICAgPSBDWDg4X1ZNVVhfQ09NUE9TSVRFMSwKIAkJCS52bXV4ICAgPSAxLAotICAgICAgICAgICAgICAgICAgICAgICAgLmdwaW8wICA9IDB4MDNmZSwKKwkJCS5ncGlvMCAgPSAweDAzZmUsCiAJCX0sewogCQkJLnR5cGUgICA9IENYODhfVk1VWF9TVklERU8sCiAJCQkudm11eCAgID0gMiwKLSAgICAgICAgICAgICAgICAgICAgICAgIC5ncGlvMCAgPSAweDAzZmUsCisJCQkuZ3BpbzAgID0gMHgwM2ZlLAogCQl9fSwKIAl9LAotICAgICAgICBbQ1g4OF9CT0FSRF9XSU5GQVNUMjAwMFhQX0VYUEVSVF0gPSB7Ci0gICAgICAgICAgICAgICAgLm5hbWUgICAgICAgICAgID0gIkxlYWR0ZWsgV2luZmFzdCAyMDAwWFAgRXhwZXJ0IiwKLSAgICAgICAgICAgICAgICAudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTXzRJTjEsCisJW0NYODhfQk9BUkRfV0lORkFTVDIwMDBYUF9FWFBFUlRdID0geworCQkubmFtZSAgICAgICAgICAgPSAiTGVhZHRlayBXaW5mYXN0IDIwMDBYUCBFeHBlcnQiLAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTXzRJTjEsCiAJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCiAJCS5yYWRpb19hZGRyCT0gQUREUl9VTlNFVCwKIAkJLnRkYTk4ODdfY29uZiAgID0gVERBOTg4N19QUkVTRU5ULAotICAgICAgICAgICAgICAgIC5pbnB1dCAgICAgICAgICA9IHt7Ci0gICAgICAgICAgICAgICAgICAgICAgICAudHlwZSAgID0gQ1g4OF9WTVVYX1RFTEVWSVNJT04sCi0gICAgICAgICAgICAgICAgICAgICAgICAudm11eCAgID0gMCwKKwkJLmlucHV0ICAgICAgICAgID0ge3sKKwkJCS50eXBlICAgPSBDWDg4X1ZNVVhfVEVMRVZJU0lPTiwKKwkJCS52bXV4ICAgPSAwLAogCQkJLmdwaW8wCT0gMHgwMEY1ZTcwMCwKIAkJCS5ncGlvMSAgPSAweDAwMDAzMDA0LAogCQkJLmdwaW8yICA9IDB4MDBGNWU3MDAsCkBAIC0xNjUsMTYgKzE2NSwxNiBAQAogCQkJLmdwaW8xICA9IDB4MDAwMDMwMDQsCiAJCQkuZ3BpbzIgID0gMHgwMEY1YzcwMCwKIAkJCS5ncGlvMyAgPSAweDAyMDAwMDAwLAotICAgICAgICAgICAgICAgIH19LAotICAgICAgICAgICAgICAgIC5yYWRpbyA9IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC50eXBlICAgPSBDWDg4X1JBRElPLAorCQl9fSwKKwkJLnJhZGlvID0geworCQkJLnR5cGUgICA9IENYODhfUkFESU8sCiAJCQkuZ3BpbzAJPSAweDAwRjVkNzAwLAogCQkJLmdwaW8xICA9IDB4MDAwMDMwMDQsCiAJCQkuZ3BpbzIgID0gMHgwMEY1ZDcwMCwKIAkJCS5ncGlvMyAgPSAweDAyMDAwMDAwLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgIH0sCi0JW0NYODhfQk9BUkRfQVZFUlRWXzMwM10gPSB7CisJCX0sCisJfSwKKwlbQ1g4OF9CT0FSRF9BVkVSVFZfU1RVRElPXzMwM10gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJBdmVyVFYgU3R1ZGlvIDMwMyAoTTEyNikiLAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX0ZNMTIxNk1FX01LMywKIAkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCkBAIC0yMDYsNyArMjA2LDcgQEAKIAkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKIAkJLnJhZGlvX2FkZHIJPSBBRERSX1VOU0VULAotCQkudGRhOTg4N19jb25mCT0gVERBOTg4N19QUkVTRU5ULAorCQkudGRhOTg4N19jb25mCT0gVERBOTg4N19QUkVTRU5UIHwgVERBOTg4N19JTlRFUkNBUlJJRVJfTlRTQywKIAkJLmlucHV0ICAgICAgICAgID0ge3sKIAkJCS50eXBlICAgPSBDWDg4X1ZNVVhfVEVMRVZJU0lPTiwKIAkJCS52bXV4ICAgPSAwLApAQCAtMjE0LDMyICsyMTQsMzIgQEAKIAkJCS5ncGlvMSAgPSAweDAwMDA4MGMwLAogCQkJLmdwaW8yICA9IDB4MDAwMGZmNDAsCiAJCX0sewotICAgICAgICAgICAgICAgICAgICAgICAgLnR5cGUgICA9IENYODhfVk1VWF9DT01QT1NJVEUxLAotICAgICAgICAgICAgICAgICAgICAgICAgLnZtdXggICA9IDEsCisJCQkudHlwZSAgID0gQ1g4OF9WTVVYX0NPTVBPU0lURTEsCisJCQkudm11eCAgID0gMSwKIAkJCS5ncGlvMCAgPSAweDAwMDA0MGJmLAogCQkJLmdwaW8xICA9IDB4MDAwMDgwYzAsCiAJCQkuZ3BpbzIgID0gMHgwMDAwZmY0MCwKIAkJfSx7Ci0gICAgICAgICAgICAgICAgICAgICAgICAudHlwZSAgID0gQ1g4OF9WTVVYX1NWSURFTywKLSAgICAgICAgICAgICAgICAgICAgICAgIC52bXV4ICAgPSAyLAorCQkJLnR5cGUgICA9IENYODhfVk1VWF9TVklERU8sCisJCQkudm11eCAgID0gMiwKIAkJCS5ncGlvMCAgPSAweDAwMDA0MGJmLAogCQkJLmdwaW8xICA9IDB4MDAwMDgwYzAsCiAJCQkuZ3BpbzIgID0gMHgwMDAwZmY0MCwKLSAgICAgICAgICAgICAgICB9fSwKLSAgICAgICAgICAgICAgICAucmFkaW8gPSB7CisJCX19LAorCQkucmFkaW8gPSB7CiAJCQkgLnR5cGUgICA9IENYODhfUkFESU8sCi0gICAgICAgICAgICAgICAgfSwKKwkJfSwKIAl9LAogCVtDWDg4X0JPQVJEX1dJTkZBU1RfRFYyMDAwXSA9IHsKLSAgICAgICAgICAgICAgICAubmFtZSAgICAgICAgICAgPSAiTGVhZHRlayBXaW5mYXN0IERWMjAwMCIsCi0gICAgICAgICAgICAgICAgLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19GTTEyMTZNRV9NSzMsCisJCS5uYW1lICAgICAgICAgICA9ICJMZWFkdGVrIFdpbmZhc3QgRFYyMDAwIiwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19GTTEyMTZNRV9NSzMsCiAJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCiAJCS5yYWRpb19hZGRyCT0gQUREUl9VTlNFVCwKIAkJLnRkYTk4ODdfY29uZiAgID0gVERBOTg4N19QUkVTRU5ULAotICAgICAgICAgICAgICAgIC5pbnB1dCAgICAgICAgICA9IHt7Ci0gICAgICAgICAgICAgICAgICAgICAgICAudHlwZSAgID0gQ1g4OF9WTVVYX1RFTEVWSVNJT04sCi0gICAgICAgICAgICAgICAgICAgICAgICAudm11eCAgID0gMCwKKwkJLmlucHV0ICAgICAgICAgID0ge3sKKwkJCS50eXBlICAgPSBDWDg4X1ZNVVhfVEVMRVZJU0lPTiwKKwkJCS52bXV4ICAgPSAwLAogCQkJLmdwaW8wICA9IDB4MDAzNWU3MDAsCiAJCQkuZ3BpbzEgID0gMHgwMDAwMzAwNCwKIAkJCS5ncGlvMiAgPSAweDAwMzVlNzAwLApAQCAtMjYwLDE0ICsyNjAsMTQgQEAKIAkJCS5ncGlvMiAgPSAweDAyMDAwMDAwLAogCQkJLmdwaW8zICA9IDB4MDIwMDAwMDAsCiAJCX19LAotICAgICAgICAgICAgICAgIC5yYWRpbyA9IHsKKwkJLnJhZGlvID0gewogCQkJLnR5cGUgICA9IENYODhfUkFESU8sCiAJCQkuZ3BpbzAgID0gMHgwMDM1ZDcwMCwKIAkJCS5ncGlvMSAgPSAweDAwMDA3MDA0LAogCQkJLmdwaW8yICA9IDB4MDAzNWQ3MDAsCiAJCQkuZ3BpbzMgID0gMHgwMjAwMDAwMCwKIAkJIH0sCi0gICAgICAgIH0sCisJfSwKIAlbQ1g4OF9CT0FSRF9MRUFEVEVLX1BWUjIwMDBdID0gewogCQkvLyBncGlvIHZhbHVlcyBmb3IgUEFMIHZlcnNpb24gZnJvbSByZWdzcHkgYnkgRFNjYWxlcgogCQkubmFtZSAgICAgICAgICAgPSAiTGVhZHRlayBQVlIgMjAwMCIsCkBAIC0yOTYsMjUgKzI5NiwyNSBAQAogCQkuYmxhY2tiaXJkID0gMSwKIAl9LAogCVtDWDg4X0JPQVJEX0lPREFUQV9HVlZDUDNQQ0ldID0gewotIAkJLm5hbWUJCT0gIklPREFUQSBHVi1WQ1AzL1BDSSIsCisJCS5uYW1lCQk9ICJJT0RBVEEgR1YtVkNQMy9QQ0kiLAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCi0gCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKKwkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKIAkJLnJhZGlvX2FkZHIJPSBBRERSX1VOU0VULAogCQkuaW5wdXQgICAgICAgICAgPSB7ewotIAkJCS50eXBlICAgPSBDWDg4X1ZNVVhfQ09NUE9TSVRFMSwKLSAJCQkudm11eCAgID0gMCwKLSAJCX0sewotIAkJCS50eXBlICAgPSBDWDg4X1ZNVVhfQ09NUE9TSVRFMiwKLSAJCQkudm11eCAgID0gMSwKLSAJCX0sewotIAkJCS50eXBlICAgPSBDWDg4X1ZNVVhfU1ZJREVPLAotIAkJCS52bXV4ICAgPSAyLAotIAkJfX0sCi0gCX0sCisJCQkudHlwZSAgID0gQ1g4OF9WTVVYX0NPTVBPU0lURTEsCisJCQkudm11eCAgID0gMCwKKwkJfSx7CisJCQkudHlwZSAgID0gQ1g4OF9WTVVYX0NPTVBPU0lURTIsCisJCQkudm11eCAgID0gMSwKKwkJfSx7CisJCQkudHlwZSAgID0gQ1g4OF9WTVVYX1NWSURFTywKKwkJCS52bXV4ICAgPSAyLAorCQl9fSwKKwl9LAogCVtDWDg4X0JPQVJEX1BST0xJTktfUExBWVRWUFZSXSA9IHsKLSAgICAgICAgICAgICAgICAubmFtZSAgICAgICAgICAgPSAiUHJvbGluayBQbGF5VFYgUFZSIiwKLSAgICAgICAgICAgICAgICAudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX0ZNMTIzNl9NSzMsCisJCS5uYW1lICAgICAgICAgICA9ICJQcm9saW5rIFBsYXlUViBQVlIiLAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX0ZNMTIzNl9NSzMsCiAJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCiAJCS5yYWRpb19hZGRyCT0gQUREUl9VTlNFVCwKQEAgLTM0OCwxNSArMzQ4LDE1IEBACiAJCQkudHlwZSAgID0gQ1g4OF9WTVVYX1RFTEVWSVNJT04sCiAJCQkudm11eCAgID0gMCwKIAkJCS5ncGlvMCAgPSAweDAwMDBmZGU2LAotIAkJfSx7CisJCX0sewogCQkJLnR5cGUgICA9IENYODhfVk1VWF9TVklERU8sCiAJCQkudm11eCAgID0gMiwKIAkJCS5ncGlvMCAgPSAweDAwMDBmZGU2LCAvLyAweDAwMDBmZGE2IEwsUiBSQ0EgYXVkaW8gaW4/CiAJCX19LAotICAgICAgICAgICAgICAgIC5yYWRpbyA9IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC50eXBlICAgPSBDWDg4X1JBRElPLAorCQkucmFkaW8gPSB7CisJCQkudHlwZSAgID0gQ1g4OF9SQURJTywKIAkJCS5ncGlvMCAgPSAweDAwMDBmZGUyLAotICAgICAgICAgICAgICAgIH0sCisJCX0sCiAJCS5ibGFja2JpcmQgPSAxLAogCX0sCiAJW0NYODhfQk9BUkRfTVNJX1RWQU5ZV0hFUkVdID0gewpAQCAtMzcyLDM0ICszNzIsMzQgQEAKIAkJCS5ncGlvMCAgPSAweDAwMDAwZmJmLAogCQkJLmdwaW8yICA9IDB4MDAwMGZjMDgsCiAJCX0sewotICAJCQkudHlwZSAgID0gQ1g4OF9WTVVYX0NPTVBPU0lURTEsCi0gIAkJCS52bXV4ICAgPSAxLAorCQkJLnR5cGUgICA9IENYODhfVk1VWF9DT01QT1NJVEUxLAorCQkJLnZtdXggICA9IDEsCiAJCQkuZ3BpbzAgID0gMHgwMDAwMGZiZiwKIAkJCS5ncGlvMiAgPSAweDAwMDBmYzY4LAogCQl9LHsKLSAgCQkJLnR5cGUgICA9IENYODhfVk1VWF9TVklERU8sCi0gIAkJCS52bXV4ICAgPSAyLAorCQkJLnR5cGUgICA9IENYODhfVk1VWF9TVklERU8sCisJCQkudm11eCAgID0gMiwKIAkJCS5ncGlvMCAgPSAweDAwMDAwZmJmLAogCQkJLmdwaW8yICA9IDB4MDAwMGZjNjgsCi0gIAkJfX0sCisJCX19LAogCX0sCi0gICAgICAgIFtDWDg4X0JPQVJEX0tXT1JMRF9EVkJfVF0gPSB7Ci0gICAgICAgICAgICAgICAgLm5hbWUgICAgICAgICAgID0gIktXb3JsZC9WU3RyZWFtIFhQZXJ0IERWQi1UIiwKKwlbQ1g4OF9CT0FSRF9LV09STERfRFZCX1RdID0geworCQkubmFtZSAgICAgICAgICAgPSAiS1dvcmxkL1ZTdHJlYW0gWFBlcnQgRFZCLVQiLAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCiAJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCiAJCS5yYWRpb19hZGRyCT0gQUREUl9VTlNFVCwKLSAgICAgICAgICAgICAgICAuaW5wdXQgICAgICAgICAgPSB7ewotICAgICAgICAgICAgICAgICAgICAgICAgLnR5cGUgICA9IENYODhfVk1VWF9DT01QT1NJVEUxLAotICAgICAgICAgICAgICAgICAgICAgICAgLnZtdXggICA9IDEsCisJCS5pbnB1dCAgICAgICAgICA9IHt7CisJCQkudHlwZSAgID0gQ1g4OF9WTVVYX0NPTVBPU0lURTEsCisJCQkudm11eCAgID0gMSwKIAkJCS5ncGlvMCAgPSAweDA3MDAsCiAJCQkuZ3BpbzIgID0gMHgwMTAxLAotICAgICAgICAgICAgICAgIH0sewotICAgICAgICAgICAgICAgICAgICAgICAgLnR5cGUgICA9IENYODhfVk1VWF9TVklERU8sCi0gICAgICAgICAgICAgICAgICAgICAgICAudm11eCAgID0gMiwKKwkJfSx7CisJCQkudHlwZSAgID0gQ1g4OF9WTVVYX1NWSURFTywKKwkJCS52bXV4ICAgPSAyLAogCQkJLmdwaW8wICA9IDB4MDcwMCwKIAkJCS5ncGlvMiAgPSAweDAxMDEsCi0gICAgICAgICAgICAgICAgfX0sCisJCX19LAogCQkuZHZiICAgICAgICAgICAgPSAxLAogCX0sCiAJW0NYODhfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl9EVkJfVDFdID0gewpAQCAtNDI1LDI3ICs0MjUsMjcgQEAKIAkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKIAkJLnJhZGlvX2FkZHIJPSBBRERSX1VOU0VULAotICAgICAgICAgICAgICAgIC5pbnB1dCAgICAgICAgICA9IHt7Ci0gICAgICAgICAgICAgICAgICAgICAgICAudHlwZSAgID0gQ1g4OF9WTVVYX1RFTEVWSVNJT04sCi0gICAgICAgICAgICAgICAgICAgICAgICAudm11eCAgID0gMCwKLSAgICAgICAgICAgICAgICAgICAgICAgIC5ncGlvMCAgPSAweDA3ZjgsCisJCS5pbnB1dCAgICAgICAgICA9IHt7CisJCQkudHlwZSAgID0gQ1g4OF9WTVVYX1RFTEVWSVNJT04sCisJCQkudm11eCAgID0gMCwKKwkJCS5ncGlvMCAgPSAweDA3ZjgsCiAJCX0sewogCQkJLnR5cGUgICA9IENYODhfVk1VWF9ERUJVRywKIAkJCS52bXV4ICAgPSAwLAogCQkJLmdwaW8wICA9IDB4MDdmOSwgIC8vIG1vbm8gZnJvbSB0dW5lciBjaGlwCi0gICAgICAgICAgICAgICAgfSx7Ci0gICAgICAgICAgICAgICAgICAgICAgICAudHlwZSAgID0gQ1g4OF9WTVVYX0NPTVBPU0lURTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAudm11eCAgID0gMSwKLSAgICAgICAgICAgICAgICAgICAgICAgIC5ncGlvMCAgPSAweDAwMDAwN2ZhLAotICAgICAgICAgICAgICAgIH0sewotICAgICAgICAgICAgICAgICAgICAgICAgLnR5cGUgICA9IENYODhfVk1VWF9TVklERU8sCi0gICAgICAgICAgICAgICAgICAgICAgICAudm11eCAgID0gMiwKLSAgICAgICAgICAgICAgICAgICAgICAgIC5ncGlvMCAgPSAweDAwMDAwN2ZhLAotICAgICAgICAgICAgICAgIH19LAotICAgICAgICAgICAgICAgIC5yYWRpbyA9IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC50eXBlICAgPSBDWDg4X1JBRElPLAotICAgICAgICAgICAgICAgICAgICAgICAgLmdwaW8wICA9IDB4MDAwMDA3ZjgsCi0gICAgICAgICAgICAgICAgfSwKKwkJfSx7CisJCQkudHlwZSAgID0gQ1g4OF9WTVVYX0NPTVBPU0lURTEsCisJCQkudm11eCAgID0gMSwKKwkJCS5ncGlvMCAgPSAweDAwMDAwN2ZhLAorCQl9LHsKKwkJCS50eXBlICAgPSBDWDg4X1ZNVVhfU1ZJREVPLAorCQkJLnZtdXggICA9IDIsCisJCQkuZ3BpbzAgID0gMHgwMDAwMDdmYSwKKwkJfX0sCisJCS5yYWRpbyA9IHsKKwkJCS50eXBlICAgPSBDWDg4X1JBRElPLAorCQkJLmdwaW8wICA9IDB4MDAwMDA3ZjgsCisJCX0sCiAJfSwKIAlbQ1g4OF9CT0FSRF9EVklDT19GVVNJT05IRFRWXzNfR09MRF9RXSA9IHsKIAkJLm5hbWUJCT0gIkRWaUNPIEZ1c2lvbkhEVFYgMyBHb2xkLVEiLApAQCAtNDg5LDI4ICs0ODksMjggQEAKIAkJfX0sCiAJCS5kdmIgICAgICAgICAgICA9IDEsCiAJfSwKLSAgICAgICAgW0NYODhfQk9BUkRfSEFVUFBBVUdFX0RWQl9UMV0gPSB7CisJW0NYODhfQk9BUkRfSEFVUFBBVUdFX0RWQl9UMV0gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJIYXVwcGF1Z2UgTm92YS1UIERWQi1UIiwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAogCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAogCQkucmFkaW9fYWRkcgk9IEFERFJfVU5TRVQsCiAJCS5pbnB1dCAgICAgICAgICA9IHt7Ci0gICAgICAgICAgICAgICAgICAgICAgICAudHlwZSAgID0gQ1g4OF9WTVVYX0RWQiwKLSAgICAgICAgICAgICAgICAgICAgICAgIC52bXV4ICAgPSAwLAotICAgICAgICAgICAgICAgIH19LAorCQkJLnR5cGUgICA9IENYODhfVk1VWF9EVkIsCisJCQkudm11eCAgID0gMCwKKwkJfX0sCiAJCS5kdmIgICAgICAgICAgICA9IDEsCiAJfSwKLSAgICAgICAgW0NYODhfQk9BUkRfQ09ORVhBTlRfRFZCX1QxXSA9IHsKKwlbQ1g4OF9CT0FSRF9DT05FWEFOVF9EVkJfVDFdID0gewogCQkubmFtZSAgICAgICAgICAgPSAiQ29uZXhhbnQgRFZCLVQgcmVmZXJlbmNlIGRlc2lnbiIsCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKIAkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKIAkJLnJhZGlvX2FkZHIJPSBBRERSX1VOU0VULAotICAgICAgICAgICAgICAgIC5pbnB1dCAgICAgICAgICA9IHt7Ci0gICAgICAgICAgICAgICAgICAgICAgICAudHlwZSAgID0gQ1g4OF9WTVVYX0RWQiwKLSAgICAgICAgICAgICAgICAgICAgICAgIC52bXV4ICAgPSAwLAotICAgICAgICAgICAgICAgIH19LAorCQkuaW5wdXQgICAgICAgICAgPSB7eworCQkJLnR5cGUgICA9IENYODhfVk1VWF9EVkIsCisJCQkudm11eCAgID0gMCwKKwkJfX0sCiAJCS5kdmIgICAgICAgICAgICA9IDEsCiAJfSwKIAlbQ1g4OF9CT0FSRF9QUk9WSURFT19QVjI1OV0gPSB7CkBAIC01NDMsMTIgKzU0MywxMiBAQAogCQkuZHZiICAgICAgICAgICAgPSAxLAogCX0sCiAJW0NYODhfQk9BUkRfRE5UVl9MSVZFX0RWQl9UXSA9IHsKLQkJLm5hbWUJICAgICAgICA9ICJkaWdpdGFsbm93IEROVFYgTGl2ZSEgRFZCLVQiLAorCQkubmFtZQkJPSAiZGlnaXRhbG5vdyBETlRWIExpdmUhIERWQi1UIiwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAogCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAogCQkucmFkaW9fYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5pbnB1dAkgICAgICAgID0ge3sKKwkJLmlucHV0CQk9IHt7CiAJCQkudHlwZSAgID0gQ1g4OF9WTVVYX0NPTVBPU0lURTEsCiAJCQkudm11eCAgID0gMSwKIAkJCS5ncGlvMCAgPSAweDAwMDAwNzAwLApAQCAtNzA1LDQ0ICs3MDUsNDQgQEAKIAkJCSAuZ3BpbzAgPSAweGJmNjAsCiAJCSB9LAogCX0sCi0gICAgICAgIFtDWDg4X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfM19HT0xEX1RdID0geworCVtDWDg4X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfM19HT0xEX1RdID0gewogCQkubmFtZSAgICAgICAgICAgPSAiRFZpQ08gRnVzaW9uSERUViAzIEdvbGQtVCIsCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1RIT01TT05fRFRUNzYxMSwKIAkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKIAkJLnJhZGlvX2FkZHIJPSBBRERSX1VOU0VULAogCQkuaW5wdXQgICAgICAgICAgPSB7ewotICAgICAgICAgICAgICAgICAgICAgICAgLnR5cGUgICA9IENYODhfVk1VWF9URUxFVklTSU9OLAotICAgICAgICAgICAgICAgICAgICAgICAgLnZtdXggICA9IDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAuZ3BpbzAgID0gMHg5N2VkLAotICAgICAgICAgICAgICAgIH0sewotICAgICAgICAgICAgICAgICAgICAgICAgLnR5cGUgICA9IENYODhfVk1VWF9DT01QT1NJVEUxLAotICAgICAgICAgICAgICAgICAgICAgICAgLnZtdXggICA9IDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAuZ3BpbzAgID0gMHg5N2U5LAotICAgICAgICAgICAgICAgIH0sewotICAgICAgICAgICAgICAgICAgICAgICAgLnR5cGUgICA9IENYODhfVk1VWF9TVklERU8sCi0gICAgICAgICAgICAgICAgICAgICAgICAudm11eCAgID0gMiwKLSAgICAgICAgICAgICAgICAgICAgICAgIC5ncGlvMCAgPSAweDk3ZTksCi0gICAgICAgICAgICAgICAgfX0sCisJCQkudHlwZSAgID0gQ1g4OF9WTVVYX1RFTEVWSVNJT04sCisJCQkudm11eCAgID0gMCwKKwkJCS5ncGlvMCAgPSAweDk3ZWQsCisJCX0seworCQkJLnR5cGUgICA9IENYODhfVk1VWF9DT01QT1NJVEUxLAorCQkJLnZtdXggICA9IDEsCisJCQkuZ3BpbzAgID0gMHg5N2U5LAorCQl9LHsKKwkJCS50eXBlICAgPSBDWDg4X1ZNVVhfU1ZJREVPLAorCQkJLnZtdXggICA9IDIsCisJCQkuZ3BpbzAgID0gMHg5N2U5LAorCQl9fSwKIAkJLmR2YiAgICAgICAgICAgID0gMSwKLSAgICAgICAgfSwKLSAgICAgICAgW0NYODhfQk9BUkRfQURTVEVDSF9EVkJfVF9QQ0ldID0gewotICAgICAgICAgICAgICAgIC5uYW1lICAgICAgICAgICA9ICJBRFMgVGVjaCBJbnN0YW50IFRWIERWQi1UIFBDSSIsCisJfSwKKwlbQ1g4OF9CT0FSRF9BRFNURUNIX0RWQl9UX1BDSV0gPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJBRFMgVGVjaCBJbnN0YW50IFRWIERWQi1UIFBDSSIsCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKIAkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKIAkJLnJhZGlvX2FkZHIJPSBBRERSX1VOU0VULAogCQkuaW5wdXQgICAgICAgICAgPSB7ewotICAgICAgICAgICAgICAgICAgICAgICAgLnR5cGUgICA9IENYODhfVk1VWF9DT01QT1NJVEUxLAotICAgICAgICAgICAgICAgICAgICAgICAgLnZtdXggICA9IDEsCisJCQkudHlwZSAgID0gQ1g4OF9WTVVYX0NPTVBPU0lURTEsCisJCQkudm11eCAgID0gMSwKIAkJCS5ncGlvMCAgPSAweDA3MDAsCiAJCQkuZ3BpbzIgID0gMHgwMTAxLAotICAgICAgICAgICAgICAgIH0sewotICAgICAgICAgICAgICAgICAgICAgICAgLnR5cGUgICA9IENYODhfVk1VWF9TVklERU8sCi0gICAgICAgICAgICAgICAgICAgICAgICAudm11eCAgID0gMiwKKwkJfSx7CisJCQkudHlwZSAgID0gQ1g4OF9WTVVYX1NWSURFTywKKwkJCS52bXV4ICAgPSAyLAogCQkJLmdwaW8wICA9IDB4MDcwMCwKIAkJCS5ncGlvMiAgPSAweDAxMDEsCi0gICAgICAgICAgICAgICAgfX0sCisJCX19LAogCQkuZHZiICAgICAgICAgICAgPSAxLAogCX0sCiAJW0NYODhfQk9BUkRfVEVSUkFURUNfQ0lORVJHWV8xNDAwX0RWQl9UMV0gPSB7CkBAIC03NjIsMjAgKzc2MiwxMzkgQEAKIAkJLnJhZGlvX2FkZHIJPSBBRERSX1VOU0VULAogCQkudGRhOTg4N19jb25mICAgPSBUREE5ODg3X1BSRVNFTlQsCiAJCS5pbnB1dCAgICAgICAgICA9IHt7Ci0gICAgICAgICAgICAgICAgICAgICAgICAudHlwZSAgID0gQ1g4OF9WTVVYX1RFTEVWSVNJT04sCi0gICAgICAgICAgICAgICAgICAgICAgICAudm11eCAgID0gMCwKLSAgICAgICAgICAgICAgICAgICAgICAgIC5ncGlvMCAgPSAweDg3ZmQsCi0gICAgICAgICAgICAgICAgfSx7Ci0gICAgICAgICAgICAgICAgICAgICAgICAudHlwZSAgID0gQ1g4OF9WTVVYX0NPTVBPU0lURTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAudm11eCAgID0gMSwKLSAgICAgICAgICAgICAgICAgICAgICAgIC5ncGlvMCAgPSAweDg3ZjksCi0gICAgICAgICAgICAgICAgfSx7Ci0gICAgICAgICAgICAgICAgICAgICAgICAudHlwZSAgID0gQ1g4OF9WTVVYX1NWSURFTywKLSAgICAgICAgICAgICAgICAgICAgICAgIC52bXV4ICAgPSAyLAotICAgICAgICAgICAgICAgICAgICAgICAgLmdwaW8wICA9IDB4ODdmOSwKLSAgICAgICAgICAgICAgICB9fSwKKwkJCS50eXBlICAgPSBDWDg4X1ZNVVhfVEVMRVZJU0lPTiwKKwkJCS52bXV4ICAgPSAwLAorCQkJLmdwaW8wICA9IDB4ODdmZCwKKwkJfSx7CisJCQkudHlwZSAgID0gQ1g4OF9WTVVYX0NPTVBPU0lURTEsCisJCQkudm11eCAgID0gMSwKKwkJCS5ncGlvMCAgPSAweDg3ZjksCisJCX0seworCQkJLnR5cGUgICA9IENYODhfVk1VWF9TVklERU8sCisJCQkudm11eCAgID0gMiwKKwkJCS5ncGlvMCAgPSAweDg3ZjksCisJCX19LAogCQkuZHZiICAgICAgICAgICAgPSAxLAogCX0sCisJW0NYODhfQk9BUkRfQVZFUk1FRElBX1VMVFJBVFZfTUNfNTUwXSA9IHsKKwkJLm5hbWUgICAgICAgICAgID0gIkF2ZXJNZWRpYSBVbHRyYVRWIE1lZGlhIENlbnRlciBQQ0kgNTUwIiwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19GTTEyMzZfTUszLAorCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLnRkYTk4ODdfY29uZiAgID0gVERBOTg4N19QUkVTRU5ULAorCQkuYmxhY2tiaXJkICAgICAgPSAxLAorCQkuaW5wdXQgICAgICAgICAgPSB7eworCQkJLnR5cGUgICA9IENYODhfVk1VWF9DT01QT1NJVEUxLAorCQkJLnZtdXggICA9IDAsCisJCQkuZ3BpbzAgID0gMHgwMDAwY2Q3MywKKwkJfSx7CisJCQkudHlwZSAgID0gQ1g4OF9WTVVYX1NWSURFTywKKwkJCS52bXV4ICAgPSAxLAorCQkJLmdwaW8wICA9IDB4MDAwMGNkNzMsCisJCX0seworCQkJLnR5cGUgICA9IENYODhfVk1VWF9URUxFVklTSU9OLAorCQkJLnZtdXggICA9IDMsCisJCQkuZ3BpbzAgID0gMHgwMDAwY2RiMywKKwkJfX0sCisJCS5yYWRpbyA9IHsKKwkJCS50eXBlICAgPSBDWDg4X1JBRElPLAorCQkJLnZtdXggICA9IDIsCisJCQkuZ3BpbzAgID0gMHgwMDAwY2RmMywKKwkJfSwKKwl9LAorCVtDWDg4X0JPQVJEX0tXT1JMRF9WU1RSRUFNX0VYUEVSVF9EVkRdID0geworCQkgLyogQWxleGFuZGVyIFdvbGQgPGF3b2xkQGJpZ2Zvb3QuY29tPiAqLworCQkgLm5hbWUgICAgICAgICAgID0gIkt3b3JsZCBWLVN0cmVhbSBYcGVydCBEVkQiLAorCQkgLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCisJCSAuaW5wdXQgICAgICAgICAgPSB7eworCQkJIC50eXBlICAgPSBDWDg4X1ZNVVhfQ09NUE9TSVRFMSwKKwkJCSAudm11eCAgID0gMSwKKwkJCSAuZ3BpbzAgID0gMHgwMzAwMDAwMCwKKwkJCSAuZ3BpbzEgID0gMHgwMTAwMDAwMCwKKwkJCSAuZ3BpbzIgID0gMHgwMjAwMDAwMCwKKwkJCSAuZ3BpbzMgID0gMHgwMDEwMDAwMCwKKwkJIH0seworCQkJIC50eXBlICAgPSBDWDg4X1ZNVVhfU1ZJREVPLAorCQkJIC52bXV4ICAgPSAyLAorCQkJIC5ncGlvMCAgPSAweDAzMDAwMDAwLAorCQkJIC5ncGlvMSAgPSAweDAxMDAwMDAwLAorCQkJIC5ncGlvMiAgPSAweDAyMDAwMDAwLAorCQkJIC5ncGlvMyAgPSAweDAwMTAwMDAwLAorCQkgfX0sCisJfSwKKwlbQ1g4OF9CT0FSRF9BVElfSERUVldPTkRFUl0gPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJBVEkgSERUViBXb25kZXIiLAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1RVVjEyMzZELAorCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkcgk9IEFERFJfVU5TRVQsCisJCS5pbnB1dCAgICAgICAgICA9IHt7CisJCQkudHlwZSAgID0gQ1g4OF9WTVVYX1RFTEVWSVNJT04sCisJCQkudm11eCAgID0gMCwKKwkJCS5ncGlvMCAgPSAweDAwMDAwZmY3LAorCQkJLmdwaW8xICA9IDB4MDAwMDAwZmYsCisJCQkuZ3BpbzIgID0gMHgwMDAwMDAwMSwKKwkJCS5ncGlvMyAgPSAweDAwMDAwMDAwLAorCQl9LHsKKwkJCS50eXBlICAgPSBDWDg4X1ZNVVhfQ09NUE9TSVRFMSwKKwkJCS52bXV4ICAgPSAxLAorCQkJLmdwaW8wICA9IDB4MDAwMDBmZmUsCisJCQkuZ3BpbzEgID0gMHgwMDAwMDBmZiwKKwkJCS5ncGlvMiAgPSAweDAwMDAwMDAxLAorCQkJLmdwaW8zICA9IDB4MDAwMDAwMDAsCisJCX0seworCQkJLnR5cGUgICA9IENYODhfVk1VWF9TVklERU8sCisJCQkudm11eCAgID0gMiwKKwkJCS5ncGlvMCAgPSAweDAwMDAwZmZlLAorCQkJLmdwaW8xICA9IDB4MDAwMDAwZmYsCisJCQkuZ3BpbzIgID0gMHgwMDAwMDAwMSwKKwkJCS5ncGlvMyAgPSAweDAwMDAwMDAwLAorCQl9fSwKKwkJLmR2YiAgICAgICAgICAgID0gMSwKKwl9LAorCVtDWDg4X0JPQVJEX1dJTkZBU1RfRFRWMTAwMF0gPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJXaW5GYXN0IERUVjEwMDAtVCIsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKKwkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIJPSBBRERSX1VOU0VULAorCQkuaW5wdXQgICAgICAgICAgPSB7eworCQkJLnR5cGUgICA9IENYODhfVk1VWF9EVkIsCisJCQkudm11eCAgID0gMCwKKwkJfX0sCisJCS5kdmIgICAgICAgICAgICA9IDEsCisJfSwKKwlbQ1g4OF9CT0FSRF9BVkVSVFZfMzAzXSA9IHsKKwkJLm5hbWUgICAgICAgICAgID0gIkFWZXJUViAzMDMgKE0xMjYpIiwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19GTTEyMTZNRV9NSzMsCisJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnRkYTk4ODdfY29uZiAgID0gVERBOTg4N19QUkVTRU5ULAorCQkuaW5wdXQgICAgICAgICAgPSB7eworCQkJLnR5cGUgICA9IENYODhfVk1VWF9URUxFVklTSU9OLAorCQkJLnZtdXggICA9IDAsCisJCQkuZ3BpbzAgID0gMHgwMGZmLAorCQkJLmdwaW8xICA9IDB4ZTA5ZiwKKwkJCS5ncGlvMiAgPSAweDAwMTAsCisJCQkuZ3BpbzMgID0gMHgwMDAwLAorCQl9LHsKKwkJCS50eXBlICAgPSBDWDg4X1ZNVVhfQ09NUE9TSVRFMSwKKwkJCS52bXV4ICAgPSAxLAorCQkJLmdwaW8wICA9IDB4MDBmZiwKKwkJCS5ncGlvMSAgPSAweGUwNWYsCisJCQkuZ3BpbzIgID0gMHgwMDEwLAorCQkJLmdwaW8zICA9IDB4MDAwMCwKKwkJfSx7CisJCQkudHlwZSAgID0gQ1g4OF9WTVVYX1NWSURFTywKKwkJCS52bXV4ICAgPSAyLAorCQkJLmdwaW8wICA9IDB4MDBmZiwKKwkJCS5ncGlvMSAgPSAweGUwNWYsCisJCQkuZ3BpbzIgID0gMHgwMDEwLAorCQkJLmdwaW8zICA9IDB4MDAwMCwKKwkJfX0sCisJfSwKIH07CiBjb25zdCB1bnNpZ25lZCBpbnQgY3g4OF9iY291bnQgPSBBUlJBWV9TSVpFKGN4ODhfYm9hcmRzKTsKIApAQCAtODA0LDQxICs5MjMsNDEgQEAKIAkJLnN1YmRldmljZSA9IDB4MDBmOCwKIAkJLmNhcmQgICAgICA9IENYODhfQk9BUkRfQVRJX1dPTkRFUl9QUk8sCiAJfSx7Ci0gICAgICAgICAgICAgICAgLnN1YnZlbmRvciA9IDB4MTA3ZCwKLSAgICAgICAgICAgICAgICAuc3ViZGV2aWNlID0gMHg2NjExLAotICAgICAgICAgICAgICAgIC5jYXJkICAgICAgPSBDWDg4X0JPQVJEX1dJTkZBU1QyMDAwWFBfRVhQRVJULAotCX0sewotICAgICAgICAgICAgICAgIC5zdWJ2ZW5kb3IgPSAweDEwN2QsCi0gICAgICAgICAgICAgICAgLnN1YmRldmljZSA9IDB4NjYxMywJLyogTlRTQyAqLwotICAgICAgICAgICAgICAgIC5jYXJkICAgICAgPSBDWDg4X0JPQVJEX1dJTkZBU1QyMDAwWFBfRVhQRVJULAorCQkuc3VidmVuZG9yID0gMHgxMDdkLAorCQkuc3ViZGV2aWNlID0gMHg2NjExLAorCQkuY2FyZCAgICAgID0gQ1g4OF9CT0FSRF9XSU5GQVNUMjAwMFhQX0VYUEVSVCwKIAl9LHsKIAkJLnN1YnZlbmRvciA9IDB4MTA3ZCwKLSAgICAgICAgICAgICAgICAuc3ViZGV2aWNlID0gMHg2NjIwLAotICAgICAgICAgICAgICAgIC5jYXJkICAgICAgPSBDWDg4X0JPQVJEX1dJTkZBU1RfRFYyMDAwLAotICAgICAgICB9LHsKLSAgICAgICAgICAgICAgICAuc3VidmVuZG9yID0gMHgxMDdkLAotICAgICAgICAgICAgICAgIC5zdWJkZXZpY2UgPSAweDY2M2IsCi0gICAgICAgICAgICAgICAgLmNhcmQgICAgICA9IENYODhfQk9BUkRfTEVBRFRFS19QVlIyMDAwLAotICAgICAgICB9LHsKLSAgICAgICAgICAgICAgICAuc3VidmVuZG9yID0gMHgxMDdkLAotICAgICAgICAgICAgICAgIC5zdWJkZXZpY2UgPSAweDY2M0MsCi0gICAgICAgICAgICAgICAgLmNhcmQgICAgICA9IENYODhfQk9BUkRfTEVBRFRFS19QVlIyMDAwLAotICAgICAgICB9LHsKKwkJLnN1YmRldmljZSA9IDB4NjYxMywJLyogTlRTQyAqLworCQkuY2FyZCAgICAgID0gQ1g4OF9CT0FSRF9XSU5GQVNUMjAwMFhQX0VYUEVSVCwKKwl9LHsKKwkJLnN1YnZlbmRvciA9IDB4MTA3ZCwKKwkJLnN1YmRldmljZSA9IDB4NjYyMCwKKwkJLmNhcmQgICAgICA9IENYODhfQk9BUkRfV0lORkFTVF9EVjIwMDAsCisJfSx7CisJCS5zdWJ2ZW5kb3IgPSAweDEwN2QsCisJCS5zdWJkZXZpY2UgPSAweDY2M2IsCisJCS5jYXJkICAgICAgPSBDWDg4X0JPQVJEX0xFQURURUtfUFZSMjAwMCwKKwl9LHsKKwkJLnN1YnZlbmRvciA9IDB4MTA3ZCwKKwkJLnN1YmRldmljZSA9IDB4NjYzQywKKwkJLmNhcmQgICAgICA9IENYODhfQk9BUkRfTEVBRFRFS19QVlIyMDAwLAorCX0sewogCQkuc3VidmVuZG9yID0gMHgxNDYxLAogCQkuc3ViZGV2aWNlID0gMHgwMDBiLAotCQkuY2FyZCAgICAgID0gQ1g4OF9CT0FSRF9BVkVSVFZfMzAzLAorCQkuY2FyZCAgICAgID0gQ1g4OF9CT0FSRF9BVkVSVFZfU1RVRElPXzMwMywKIAl9LHsKIAkJLnN1YnZlbmRvciA9IDB4MTQ2MiwKIAkJLnN1YmRldmljZSA9IDB4ODYwNiwKIAkJLmNhcmQgICAgICA9IENYODhfQk9BUkRfTVNJX1RWQU5ZV0hFUkVfTUFTVEVSLAogCX0sewotIAkJLnN1YnZlbmRvciA9IDB4MTBmYywKLSAJCS5zdWJkZXZpY2UgPSAweGQwMDMsCi0gCQkuY2FyZCAgICAgID0gQ1g4OF9CT0FSRF9JT0RBVEFfR1ZWQ1AzUENJLAorCQkuc3VidmVuZG9yID0gMHgxMGZjLAorCQkuc3ViZGV2aWNlID0gMHhkMDAzLAorCQkuY2FyZCAgICAgID0gQ1g4OF9CT0FSRF9JT0RBVEFfR1ZWQ1AzUENJLAogCX0sewotIAkJLnN1YnZlbmRvciA9IDB4MTA0MywKLSAJCS5zdWJkZXZpY2UgPSAweDQ4MjMsICAvKiB3aXRoIG1wZWcgZW5jb2RlciAqLwotIAkJLmNhcmQgICAgICA9IENYODhfQk9BUkRfQVNVU19QVlJfNDE2LAorCQkuc3VidmVuZG9yID0gMHgxMDQzLAorCQkuc3ViZGV2aWNlID0gMHg0ODIzLCAgLyogd2l0aCBtcGVnIGVuY29kZXIgKi8KKwkJLmNhcmQgICAgICA9IENYODhfQk9BUkRfQVNVU19QVlJfNDE2LAogCX0sewogCQkuc3VidmVuZG9yID0gMHgxN2RlLAogCQkuc3ViZGV2aWNlID0gMHgwOGE2LApAQCAtODUyLDQzICs5NzEsNDMgQEAKIAkJLnN1YmRldmljZSA9IDB4ZDgyMCwKIAkJLmNhcmQgICAgICA9IENYODhfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl8zX0dPTERfVCwKIAl9LHsKLQkJLnN1YnZlbmRvciA9IDB4MThBQywKLQkJLnN1YmRldmljZSA9IDB4REIwMCwKKwkJLnN1YnZlbmRvciA9IDB4MThhYywKKwkJLnN1YmRldmljZSA9IDB4ZGIwMCwKIAkJLmNhcmQgICAgICA9IENYODhfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl9EVkJfVDEsCi0gCX0seworCX0sewogCQkuc3VidmVuZG9yID0gMHgwMDcwLAogCQkuc3ViZGV2aWNlID0gMHg5MDAyLAogCQkuY2FyZCAgICAgID0gQ1g4OF9CT0FSRF9IQVVQUEFVR0VfRFZCX1QxLAotIAl9LHsKKwl9LHsKIAkJLnN1YnZlbmRvciA9IDB4MTRmMSwKIAkJLnN1YmRldmljZSA9IDB4MDE4NywKIAkJLmNhcmQgICAgICA9IENYODhfQk9BUkRfQ09ORVhBTlRfRFZCX1QxLAotIAl9LHsKKwl9LHsKIAkJLnN1YnZlbmRvciA9IDB4MTU0MCwKIAkJLnN1YmRldmljZSA9IDB4MjU4MCwKIAkJLmNhcmQgICAgICA9IENYODhfQk9BUkRfUFJPVklERU9fUFYyNTksCiAJfSx7Ci0JCS5zdWJ2ZW5kb3IgPSAweDE4QUMsCi0JCS5zdWJkZXZpY2UgPSAweERCMTAsCisJCS5zdWJ2ZW5kb3IgPSAweDE4YWMsCisJCS5zdWJkZXZpY2UgPSAweGRiMTAsCiAJCS5jYXJkICAgICAgPSBDWDg4X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfRFZCX1RfUExVUywKIAl9LHsKLSAgICAgICAgICAgICAgICAuc3VidmVuZG9yID0gMHgxNTU0LAotICAgICAgICAgICAgICAgIC5zdWJkZXZpY2UgPSAweDQ4MTEsCi0gICAgICAgICAgICAgICAgLmNhcmQgICAgICA9IENYODhfQk9BUkRfUElYRUxWSUVXLAorCQkuc3VidmVuZG9yID0gMHgxNTU0LAorCQkuc3ViZGV2aWNlID0gMHg0ODExLAorCQkuY2FyZCAgICAgID0gQ1g4OF9CT0FSRF9QSVhFTFZJRVcsCiAJfSx7CiAJCS5zdWJ2ZW5kb3IgPSAweDcwNjMsCiAJCS5zdWJkZXZpY2UgPSAweDMwMDAsIC8qIEhELTMwMDAgY2FyZCAqLwogCQkuY2FyZCAgICAgID0gQ1g4OF9CT0FSRF9QQ0hEVFZfSEQzMDAwLAogCX0sewotCQkuc3VidmVuZG9yID0gMHgxN0RFLAotCQkuc3ViZGV2aWNlID0gMHhBOEE2LAorCQkuc3VidmVuZG9yID0gMHgxN2RlLAorCQkuc3ViZGV2aWNlID0gMHhhOGE2LAogCQkuY2FyZCAgICAgID0gQ1g4OF9CT0FSRF9ETlRWX0xJVkVfRFZCX1QsCiAJfSx7CiAJCS5zdWJ2ZW5kb3IgPSAweDAwNzAsCiAJCS5zdWJkZXZpY2UgPSAweDI4MDEsCiAJCS5jYXJkICAgICAgPSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9ST1NMWU4sCiAJfSx7Ci0JCS5zdWJ2ZW5kb3IgPSAweDE0RjEsCisJCS5zdWJ2ZW5kb3IgPSAweDE0ZjEsCiAJCS5zdWJkZXZpY2UgPSAweDAzNDIsCiAJCS5jYXJkICAgICAgPSBDWDg4X0JPQVJEX0RJR0lUQUxMT0dJQ19NRUMsCiAJfSx7CkBAIC04OTksMTQgKzEwMTgsMzAgQEAKIAkJLnN1YnZlbmRvciA9IDB4MTQyMSwKIAkJLnN1YmRldmljZSA9IDB4MDMzNCwKIAkJLmNhcmQgICAgICA9IENYODhfQk9BUkRfQURTVEVDSF9EVkJfVF9QQ0ksCi0gCX0seworCX0sewogCQkuc3VidmVuZG9yID0gMHgxNTNiLAogCQkuc3ViZGV2aWNlID0gMHgxMTY2LAogCQkuY2FyZCAgICAgID0gQ1g4OF9CT0FSRF9URVJSQVRFQ19DSU5FUkdZXzE0MDBfRFZCX1QxLAotIAl9LHsKKwl9LHsKIAkJLnN1YnZlbmRvciA9IDB4MThhYywKIAkJLnN1YmRldmljZSA9IDB4ZDUwMCwKIAkJLmNhcmQgICAgICA9IENYODhfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl81X0dPTEQsCisJfSx7CisJCS5zdWJ2ZW5kb3IgPSAweDE0NjEsCisJCS5zdWJkZXZpY2UgPSAweDgwMTEsCisJCS5jYXJkICAgICAgPSBDWDg4X0JPQVJEX0FWRVJNRURJQV9VTFRSQVRWX01DXzU1MCwKKwl9LHsKKwkJLnN1YnZlbmRvciA9IFBDSV9WRU5ET1JfSURfQVRJLAorCQkuc3ViZGV2aWNlID0gMHhhMTAxLAorCQkuY2FyZCAgICAgID0gQ1g4OF9CT0FSRF9BVElfSERUVldPTkRFUiwKKwl9LHsKKwkJLnN1YnZlbmRvciA9IDB4MTA3ZCwKKwkJLnN1YmRldmljZSA9IDB4NjY1ZiwKKwkJLmNhcmQgICAgICA9IENYODhfQk9BUkRfV0lORkFTVF9EVFYxMDAwLAorCX0seworCQkuc3VidmVuZG9yID0gMHgxNDYxLAorCQkuc3ViZGV2aWNlID0gMHgwMDBhLAorCQkuY2FyZCAgICAgID0gQ1g4OF9CT0FSRF9BVkVSVFZfMzAzLAogCX0sCiB9OwogY29uc3QgdW5zaWduZWQgaW50IGN4ODhfaWRjb3VudCA9IEFSUkFZX1NJWkUoY3g4OF9zdWJpZHMpOwpAQCAtMTEwOCw2ICsxMjQzLDE5IEBACiAJCWN4X2NsZWFyKE1PX0dQMF9JTywgMHgwMDAwMDAwNyk7CiAJCWN4X3NldChNT19HUDJfSU8sIDB4MDAwMDAxMDEpOwogCQlicmVhazsKKwljYXNlIENYODhfQk9BUkRfQVRJX0hEVFZXT05ERVI6CisJCWlmICgwID09IGNvcmUtPmkyY19yYykgeworCQkJLyogZW5hYmxlIHR1bmVyICovCisJCQlpbnQgaTsKKwkJCXU4IGJ1ZmZlciBbXSA9IHsgMHgxMCwweDEyLDB4MTMsMHgwNCwweDE2LDB4MDAsMHgxNCwweDA0LDB4MDE3LDB4MDAgfTsKKwkJCWNvcmUtPmkyY19jbGllbnQuYWRkciA9IDB4MGE7CisKKwkJCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspCisJCQkJaWYgKDIgIT0gaTJjX21hc3Rlcl9zZW5kKCZjb3JlLT5pMmNfY2xpZW50LCZidWZmZXJbaSoyXSwyKSkKKwkJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFVuYWJsZSB0byBlbmFibGUgdHVuZXIoJWkpLlxuIiwKKwkJCQkJCWNvcmUtPm5hbWUsIGkpOworCQl9CisJCWJyZWFrOwogCX0KIAlpZiAoY3g4OF9ib2FyZHNbY29yZS0+Ym9hcmRdLnJhZGlvLnR5cGUgPT0gQ1g4OF9SQURJTykKIAkJY29yZS0+aGFzX3JhZGlvID0gMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNvcmUuYwppbmRleCBkYzVjNWMxLi5lYjgwNmFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY29yZS5jCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogCiAjaW5jbHVkZSAiY3g4OC5oIgogCkBAIC0xNTMsMjYgKzE1MywyNiBAQAogCQl9CiAJCWlmIChicGwgPD0gc2dfZG1hX2xlbihzZyktb2Zmc2V0KSB7CiAJCQkvKiBmaXRzIGludG8gY3VycmVudCBjaHVuayAqLwotICAgICAgICAgICAgICAgICAgICAgICAgKihycCsrKT1jcHVfdG9fbGUzMihSSVNDX1dSSVRFfFJJU0NfU09MfFJJU0NfRU9MfGJwbCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAqKHJwKyspPWNwdV90b19sZTMyKHNnX2RtYV9hZGRyZXNzKHNnKStvZmZzZXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0Kz1icGw7CisJCQkqKHJwKyspPWNwdV90b19sZTMyKFJJU0NfV1JJVEV8UklTQ19TT0x8UklTQ19FT0x8YnBsKTsKKwkJCSoocnArKyk9Y3B1X3RvX2xlMzIoc2dfZG1hX2FkZHJlc3Moc2cpK29mZnNldCk7CisJCQlvZmZzZXQrPWJwbDsKIAkJfSBlbHNlIHsKIAkJCS8qIHNjYW5saW5lIG5lZWRzIHRvIGJlIHNwbGl0dGVkICovCi0gICAgICAgICAgICAgICAgICAgICAgICB0b2RvID0gYnBsOwotICAgICAgICAgICAgICAgICAgICAgICAgKihycCsrKT1jcHVfdG9fbGUzMihSSVNDX1dSSVRFfFJJU0NfU09MfAorCQkJdG9kbyA9IGJwbDsKKwkJCSoocnArKyk9Y3B1X3RvX2xlMzIoUklTQ19XUklURXxSSVNDX1NPTHwKIAkJCQkJICAgIChzZ19kbWFfbGVuKHNnKS1vZmZzZXQpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICoocnArKyk9Y3B1X3RvX2xlMzIoc2dfZG1hX2FkZHJlc3Moc2cpK29mZnNldCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0b2RvIC09IChzZ19kbWFfbGVuKHNnKS1vZmZzZXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNnKys7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAodG9kbyA+IHNnX2RtYV9sZW4oc2cpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoocnArKyk9Y3B1X3RvX2xlMzIoUklTQ19XUklURXwKKwkJCSoocnArKyk9Y3B1X3RvX2xlMzIoc2dfZG1hX2FkZHJlc3Moc2cpK29mZnNldCk7CisJCQl0b2RvIC09IChzZ19kbWFfbGVuKHNnKS1vZmZzZXQpOworCQkJb2Zmc2V0ID0gMDsKKwkJCXNnKys7CisJCQl3aGlsZSAodG9kbyA+IHNnX2RtYV9sZW4oc2cpKSB7CisJCQkJKihycCsrKT1jcHVfdG9fbGUzMihSSVNDX1dSSVRFfAogCQkJCQkJICAgIHNnX2RtYV9sZW4oc2cpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihycCsrKT1jcHVfdG9fbGUzMihzZ19kbWFfYWRkcmVzcyhzZykpOworCQkJCSoocnArKyk9Y3B1X3RvX2xlMzIoc2dfZG1hX2FkZHJlc3Moc2cpKTsKIAkJCQl0b2RvIC09IHNnX2RtYV9sZW4oc2cpOwogCQkJCXNnKys7CiAJCQl9Ci0gICAgICAgICAgICAgICAgICAgICAgICAqKHJwKyspPWNwdV90b19sZTMyKFJJU0NfV1JJVEV8UklTQ19FT0x8dG9kbyk7CisJCQkqKHJwKyspPWNwdV90b19sZTMyKFJJU0NfV1JJVEV8UklTQ19FT0x8dG9kbyk7CiAJCQkqKHJwKyspPWNwdV90b19sZTMyKHNnX2RtYV9hZGRyZXNzKHNnKSk7CiAJCQlvZmZzZXQgKz0gdG9kbzsKIAkJfQpAQCAtMzA5LDcgKzMwOSw3IEBACiAJCS5uYW1lICAgICAgID0gInZpZGVvIHkgLyBwYWNrZWQiLAogCQkuY21kc19zdGFydCA9IDB4MTgwMDQwLAogCQkuY3RybF9zdGFydCA9IDB4MTgwNDAwLAotCSAgICAgICAgLmNkdCAgICAgICAgPSAweDE4MDQwMCArIDY0LAorCQkuY2R0ICAgICAgICA9IDB4MTgwNDAwICsgNjQsCiAJCS5maWZvX3N0YXJ0ID0gMHgxODBjMDAsCiAJCS5maWZvX3NpemUgID0gMHgwMDI4MDAsCiAJCS5wdHIxX3JlZyAgID0gTU9fRE1BMjFfUFRSMSwKQEAgLTMyMSw3ICszMjEsNyBAQAogCQkubmFtZSAgICAgICA9ICJ2aWRlbyB1IiwKIAkJLmNtZHNfc3RhcnQgPSAweDE4MDA4MCwKIAkJLmN0cmxfc3RhcnQgPSAweDE4MDRhMCwKLQkgICAgICAgIC5jZHQgICAgICAgID0gMHgxODA0YTAgKyA2NCwKKwkJLmNkdCAgICAgICAgPSAweDE4MDRhMCArIDY0LAogCQkuZmlmb19zdGFydCA9IDB4MTgzNDAwLAogCQkuZmlmb19zaXplICA9IDB4MDAwODAwLAogCQkucHRyMV9yZWcgICA9IE1PX0RNQTIyX1BUUjEsCkBAIC0zMzMsNyArMzMzLDcgQEAKIAkJLm5hbWUgICAgICAgPSAidmlkZW8gdiIsCiAJCS5jbWRzX3N0YXJ0ID0gMHgxODAwYzAsCiAJCS5jdHJsX3N0YXJ0ID0gMHgxODA1NDAsCi0JICAgICAgICAuY2R0ICAgICAgICA9IDB4MTgwNTQwICsgNjQsCisJCS5jZHQgICAgICAgID0gMHgxODA1NDAgKyA2NCwKIAkJLmZpZm9fc3RhcnQgPSAweDE4M2MwMCwKIAkJLmZpZm9fc2l6ZSAgPSAweDAwMDgwMCwKIAkJLnB0cjFfcmVnICAgPSBNT19ETUEyM19QVFIxLApAQCAtMzQ1LDcgKzM0NSw3IEBACiAJCS5uYW1lICAgICAgID0gInZiaSIsCiAJCS5jbWRzX3N0YXJ0ID0gMHgxODAxMDAsCiAJCS5jdHJsX3N0YXJ0ID0gMHgxODA1ZTAsCi0JICAgICAgICAuY2R0ICAgICAgICA9IDB4MTgwNWUwICsgNjQsCisJCS5jZHQgICAgICAgID0gMHgxODA1ZTAgKyA2NCwKIAkJLmZpZm9fc3RhcnQgPSAweDE4NDQwMCwKIAkJLmZpZm9fc2l6ZSAgPSAweDAwMTAwMCwKIAkJLnB0cjFfcmVnICAgPSBNT19ETUEyNF9QVFIxLApAQCAtMzU3LDcgKzM1Nyw3IEBACiAJCS5uYW1lICAgICAgID0gImF1ZGlvIGZyb20iLAogCQkuY21kc19zdGFydCA9IDB4MTgwMTQwLAogCQkuY3RybF9zdGFydCA9IDB4MTgwNjgwLAotCSAgICAgICAgLmNkdCAgICAgICAgPSAweDE4MDY4MCArIDY0LAorCQkuY2R0ICAgICAgICA9IDB4MTgwNjgwICsgNjQsCiAJCS5maWZvX3N0YXJ0ID0gMHgxODU0MDAsCiAJCS5maWZvX3NpemUgID0gMHgwMDAyMDAsCiAJCS5wdHIxX3JlZyAgID0gTU9fRE1BMjVfUFRSMSwKQEAgLTM2OSw3ICszNjksNyBAQAogCQkubmFtZSAgICAgICA9ICJhdWRpbyB0byIsCiAJCS5jbWRzX3N0YXJ0ID0gMHgxODAxODAsCiAJCS5jdHJsX3N0YXJ0ID0gMHgxODA3MjAsCi0JICAgICAgICAuY2R0ICAgICAgICA9IDB4MTgwNjgwICsgNjQsICAvKiBzYW1lIGFzIGF1ZGlvIElOICovCisJCS5jZHQgICAgICAgID0gMHgxODA2ODAgKyA2NCwgIC8qIHNhbWUgYXMgYXVkaW8gSU4gKi8KIAkJLmZpZm9fc3RhcnQgPSAweDE4NTQwMCwgICAgICAgLyogc2FtZSBhcyBhdWRpbyBJTiAqLwogCQkuZmlmb19zaXplICA9IDB4MDAwMjAwLCAgICAgICAvKiBzYW1lIGFzIGF1ZGlvIElOICovCiAJCS5wdHIxX3JlZyAgID0gTU9fRE1BMjZfUFRSMSwKQEAgLTQzMSw3ICs0MzEsNyBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBkZWJ1ZyBoZWxwZXIgY29kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAotaW50IGN4ODhfcmlzY19kZWNvZGUodTMyIHJpc2MpCitzdGF0aWMgaW50IGN4ODhfcmlzY19kZWNvZGUodTMyIHJpc2MpCiB7CiAJc3RhdGljIGNoYXIgKmluc3RyWzE2XSA9IHsKIAkJWyBSSVNDX1NZTkMgICAgPj4gMjggXSA9ICJzeW5jIiwKQEAgLTg0NSwxOSArODQ1LDE5IEBACiAJCXJldHVybiAwOwogCiAJaWYgKFY0TDJfU1REX1BBTF9CRyAmIG5vcm0tPmlkKSB7Ci0JCWNvcmUtPnR2YXVkaW8gPSBuaWNhbSA/IFdXX05JQ0FNX0JHREtMIDogV1dfQTJfQkc7CisJCWNvcmUtPnR2YXVkaW8gPSBXV19CRzsKIAogCX0gZWxzZSBpZiAoVjRMMl9TVERfUEFMX0RLICYgbm9ybS0+aWQpIHsKLQkJY29yZS0+dHZhdWRpbyA9IG5pY2FtID8gV1dfTklDQU1fQkdES0wgOiBXV19BMl9ESzsKKwkJY29yZS0+dHZhdWRpbyA9IFdXX0RLOwogCiAJfSBlbHNlIGlmIChWNEwyX1NURF9QQUxfSSAmIG5vcm0tPmlkKSB7Ci0JCWNvcmUtPnR2YXVkaW8gPSBXV19OSUNBTV9JOworCQljb3JlLT50dmF1ZGlvID0gV1dfSTsKIAogCX0gZWxzZSBpZiAoVjRMMl9TVERfU0VDQU1fTCAmIG5vcm0tPmlkKSB7Ci0JCWNvcmUtPnR2YXVkaW8gPSBXV19TWVNURU1fTF9BTTsKKwkJY29yZS0+dHZhdWRpbyA9IFdXX0w7CiAKIAl9IGVsc2UgaWYgKFY0TDJfU1REX1NFQ0FNX0RLICYgbm9ybS0+aWQpIHsKLQkJY29yZS0+dHZhdWRpbyA9IFdXX0EyX0RLOworCQljb3JlLT50dmF1ZGlvID0gV1dfREs7CiAKIAl9IGVsc2UgaWYgKChWNEwyX1NURF9OVFNDX00gJiBub3JtLT5pZCkgfHwKIAkJICAgKFY0TDJfU1REX1BBTF9NICAmIG5vcm0tPmlkKSkgewpAQCAtMTEzNyw3ICsxMTM3LDcgQEAKIAlpZiAoIWNvcmUtPnJhZGlvX2FkZHIpCiAJCWNvcmUtPnJhZGlvX2FkZHIgPSBjeDg4X2JvYXJkc1tjb3JlLT5ib2FyZF0ucmFkaW9fYWRkcjsKIAotICAgICAgICBwcmludGsoS0VSTl9JTkZPICJUViB0dW5lciAlZCBhdCAweCUwMngsIFJhZGlvIHR1bmVyICVkIGF0IDB4JTAyeFxuIiwKKwlwcmludGsoS0VSTl9JTkZPICJUViB0dW5lciAlZCBhdCAweCUwMngsIFJhZGlvIHR1bmVyICVkIGF0IDB4JTAyeFxuIiwKIAkJY29yZS0+dHVuZXJfdHlwZSwgY29yZS0+dHVuZXJfYWRkcjw8MSwKIAkJY29yZS0+cmFkaW9fdHlwZSwgY29yZS0+cmFkaW9fYWRkcjw8MSk7CiAKQEAgLTExNDYsNiArMTE0Niw3IEBACiAJLyogaW5pdCBoYXJkd2FyZSAqLwogCWN4ODhfcmVzZXQoY29yZSk7CiAJY3g4OF9pMmNfaW5pdChjb3JlLHBjaSk7CisJY3g4OF9jYWxsX2kyY19jbGllbnRzIChjb3JlLCBUVU5FUl9TRVRfU1RBTkRCWSwgTlVMTCk7CiAJY3g4OF9jYXJkX3NldHVwKGNvcmUpOwogCWN4ODhfaXJfaW5pdChjb3JlLHBjaSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWR2Yi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtZHZiLmMKaW5kZXggNDMzNDc0NC4uOWNjZTkxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtZHZiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtZHZiLmMKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgogCi0KICNpbmNsdWRlICJjeDg4LmgiCiAjaW5jbHVkZSAiZHZiLXBsbC5oIgogCkBAIC00Niw2ICs0NSw5IEBACiAjaWZkZWYgSEFWRV9MR0RUMzMwWAogIyBpbmNsdWRlICJsZ2R0MzMweC5oIgogI2VuZGlmCisjaWZkZWYgSEFWRV9OWFQyMDBYCisjIGluY2x1ZGUgIm54dDIwMHguaCIKKyNlbmRpZgogCiBNT0RVTEVfREVTQ1JJUFRJT04oImRyaXZlciBmb3IgY3gyMzg4eCBiYXNlZCBEVkIgY2FyZHMiKTsKIE1PRFVMRV9BVVRIT1IoIkNocmlzIFBhc2NvZSA8Yy5wYXNjb2VAaXRlZS51cS5lZHUuYXU+Iik7CkBAIC03OCw3ICs4MCw3IEBACiAJCQkgICBlbnVtIHY0bDJfZmllbGQgZmllbGQpCiB7CiAJc3RydWN0IGN4ODgwMl9kZXYgKmRldiA9IHEtPnByaXZfZGF0YTsKLQlyZXR1cm4gY3g4ODAyX2J1Zl9wcmVwYXJlKGRldiwgKHN0cnVjdCBjeDg4X2J1ZmZlciopdmIpOworCXJldHVybiBjeDg4MDJfYnVmX3ByZXBhcmUoZGV2LCAoc3RydWN0IGN4ODhfYnVmZmVyKil2YixmaWVsZCk7CiB9CiAKIHN0YXRpYyB2b2lkIGR2Yl9idWZfcXVldWUoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLCBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YikKQEAgLTEyOSw3ICsxMzEsNyBAQAogCXN0YXRpYyB1OCByZXNldCBbXSAgICAgICAgID0geyAweDUwLCAweDgwIH07CiAJc3RhdGljIHU4IGFkY19jdGxfMV9jZmcgW10gPSB7IDB4OEUsIDB4NDAgfTsKIAlzdGF0aWMgdTggYWdjX2NmZyBbXSAgICAgICA9IHsgMHg2NywgMHgxMCwgMHgyMywgMHgwMCwgMHhGRiwgMHhGRiwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgMHhGRiwgMHgwMCwgMHg0MCwgMHg0MCB9OworCQkJCSAgICAgICAweDAwLCAweEZGLCAweDAwLCAweDQwLCAweDQwIH07CiAJc3RhdGljIHU4IGRudHZfZXh0cmFbXSAgICAgPSB7IDB4QjUsIDB4N0EgfTsKIAlzdGF0aWMgdTggY2FwdF9yYW5nZV9jZmdbXSA9IHsgMHg3NSwgMHgzMiB9OwogCkBAIC0yODUsNiArMjg3LDMzIEBACiB9OwogI2VuZGlmCiAKKyNpZmRlZiBIQVZFX05YVDIwMFgKK3N0YXRpYyBpbnQgbnh0MjAweF9zZXRfdHNfcGFyYW0oc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsCisJCQkJaW50IGlzX3B1bmN0dXJlZCkKK3sKKwlzdHJ1Y3QgY3g4ODAyX2RldiAqZGV2PSBmZS0+ZHZiLT5wcml2OworCWRldi0+dHNfZ2VuX2NudHJsID0gaXNfcHVuY3R1cmVkID8gMHgwNCA6IDB4MDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbnh0MjAweF9zZXRfcGxsX2lucHV0KHU4KiBidWYsIGludCBpbnB1dCkKK3sKKwlpZiAoaW5wdXQpCisJCWJ1ZlszXSB8PSAweDA4OworCWVsc2UKKwkJYnVmWzNdICY9IH4weDA4OworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IG54dDIwMHhfY29uZmlnIGF0aV9oZHR2d29uZGVyID0geworCS5kZW1vZF9hZGRyZXNzICAgID0gMHgwYSwKKwkucGxsX2FkZHJlc3MgICAgICA9IDB4NjEsCisJLnBsbF9kZXNjICAgICAgICAgPSAmZHZiX3BsbF90dXYxMjM2ZCwKKwkuc2V0X3BsbF9pbnB1dCAgICA9IG54dDIwMHhfc2V0X3BsbF9pbnB1dCwKKwkuc2V0X3RzX3BhcmFtcyAgICA9IG54dDIwMHhfc2V0X3RzX3BhcmFtLAorfTsKKyNlbmRpZgorCiBzdGF0aWMgaW50IGR2Yl9yZWdpc3RlcihzdHJ1Y3QgY3g4ODAyX2RldiAqZGV2KQogewogCS8qIGluaXQgc3RydWN0IHZpZGVvYnVmX2R2YiAqLwpAQCAtMzAwLDYgKzMyOSw3IEBACiAJCWJyZWFrOwogCWNhc2UgQ1g4OF9CT0FSRF9URVJSQVRFQ19DSU5FUkdZXzE0MDBfRFZCX1QxOgogCWNhc2UgQ1g4OF9CT0FSRF9DT05FWEFOVF9EVkJfVDE6CisJY2FzZSBDWDg4X0JPQVJEX1dJTkZBU1RfRFRWMTAwMDoKIAkJZGV2LT5kdmIuZnJvbnRlbmQgPSBjeDIyNzAyX2F0dGFjaCgmY29ubmV4YW50X3JlZmJvYXJkX2NvbmZpZywKIAkJCQkJCSAgICZkZXYtPmNvcmUtPmkyY19hZGFwKTsKIAkJYnJlYWs7CkBAIC0zODUsNiArNDE1LDEyIEBACiAJCX0KIAkJYnJlYWs7CiAjZW5kaWYKKyNpZmRlZiBIQVZFX05YVDIwMFgKKwljYXNlIENYODhfQk9BUkRfQVRJX0hEVFZXT05ERVI6CisJCWRldi0+ZHZiLmZyb250ZW5kID0gbnh0MjAweF9hdHRhY2goJmF0aV9oZHR2d29uZGVyLAorCQkJCQkJICZkZXYtPmNvcmUtPmkyY19hZGFwKTsKKwkJYnJlYWs7CisjZW5kaWYKIAlkZWZhdWx0OgogCQlwcmludGsoIiVzOiBUaGUgZnJvbnRlbmQgb2YgeW91ciBEVkIvQVRTQyBjYXJkIGlzbid0IHN1cHBvcnRlZCB5ZXRcbiIsCiAJCSAgICAgICBkZXYtPmNvcmUtPm5hbWUpOwpAQCAtNDAzLDYgKzQzOSw5IEBACiAJLyogUHV0IHRoZSBhbmFsb2cgZGVjb2RlciBpbiBzdGFuZGJ5IHRvIGtlZXAgaXQgcXVpZXQgKi8KIAljeDg4X2NhbGxfaTJjX2NsaWVudHMgKGRldi0+Y29yZSwgVFVORVJfU0VUX1NUQU5EQlksIE5VTEwpOwogCisJLyogUHV0IHRoZSBhbmFsb2cgZGVjb2RlciBpbiBzdGFuZGJ5IHRvIGtlZXAgaXQgcXVpZXQgKi8KKwljeDg4X2NhbGxfaTJjX2NsaWVudHMgKGRldi0+Y29yZSwgVFVORVJfU0VUX1NUQU5EQlksIE5VTEwpOworCiAJLyogcmVnaXN0ZXIgZXZlcnl0aGluZyAqLwogCXJldHVybiB2aWRlb2J1Zl9kdmJfcmVnaXN0ZXIoJmRldi0+ZHZiLCBUSElTX01PRFVMRSwgZGV2KTsKIH0KQEAgLTQ2MSw3ICs1MDAsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2RldmV4aXQgZHZiX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldikKIHsKLSAgICAgICAgc3RydWN0IGN4ODgwMl9kZXYgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwY2lfZGV2KTsKKwlzdHJ1Y3QgY3g4ODAyX2RldiAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBjaV9kZXYpOwogCiAJLyogZHZiICovCiAJdmlkZW9idWZfZHZiX3VucmVnaXN0ZXIoJmRldi0+ZHZiKTsKQEAgLTQ3Niw4ICs1MTUsOCBAQAogCXsKIAkJLnZlbmRvciAgICAgICA9IDB4MTRmMSwKIAkJLmRldmljZSAgICAgICA9IDB4ODgwMiwKLSAgICAgICAgICAgICAgICAuc3VidmVuZG9yICAgID0gUENJX0FOWV9JRCwKLSAgICAgICAgICAgICAgICAuc3ViZGV2aWNlICAgID0gUENJX0FOWV9JRCwKKwkJLnN1YnZlbmRvciAgICA9IFBDSV9BTllfSUQsCisJCS5zdWJkZXZpY2UgICAgPSBQQ0lfQU5ZX0lELAogCX0sewogCQkvKiAtLS0gZW5kIG9mIGxpc3QgLS0tICovCiAJfQpAQCAtNDg1LDEwICs1MjQsMTAgQEAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBjeDg4MDJfcGNpX3RibCk7CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkdmJfcGNpX2RyaXZlciA9IHsKLSAgICAgICAgLm5hbWUgICAgID0gImN4ODgtZHZiIiwKLSAgICAgICAgLmlkX3RhYmxlID0gY3g4ODAyX3BjaV90YmwsCi0gICAgICAgIC5wcm9iZSAgICA9IGR2Yl9wcm9iZSwKLSAgICAgICAgLnJlbW92ZSAgID0gX19kZXZleGl0X3AoZHZiX3JlbW92ZSksCisJLm5hbWUgICAgID0gImN4ODgtZHZiIiwKKwkuaWRfdGFibGUgPSBjeDg4MDJfcGNpX3RibCwKKwkucHJvYmUgICAgPSBkdmJfcHJvYmUsCisJLnJlbW92ZSAgID0gX19kZXZleGl0X3AoZHZiX3JlbW92ZSksCiAJLnN1c3BlbmQgID0gY3g4ODAyX3N1c3BlbmRfY29tbW9uLAogCS5yZXN1bWUgICA9IGN4ODgwMl9yZXN1bWVfY29tbW9uLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWkyYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtaTJjLmMKaW5kZXggNzYxY2ViZC4uOTc5MGQ0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtaTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtaTJjLmMKQEAgLTMsNyArMyw3IEBACiAgICAgY3g4OC1pMmMuYyAgLS0gIGFsbCB0aGUgaTJjIGNvZGUgaXMgaGVyZQogCiAgICAgQ29weXJpZ2h0IChDKSAxOTk2LDk3LDk4IFJhbHBoICBNZXR6bGVyIChyamttQHRocC51bmkta29lbG4uZGUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAmIE1hcmN1cyBNZXR6bGVyIChtb2NtQHRocC51bmkta29lbG4uZGUpCisJCQkgICAmIE1hcmN1cyBNZXR6bGVyIChtb2NtQHRocC51bmkta29lbG4uZGUpCiAgICAgKGMpIDIwMDIgWXVyaWogU3lzb2V2IDx5dXJpakBuYXR1cmVzb2Z0Lm5ldD4KICAgICAoYykgMTk5OS0yMDAzIEdlcmQgS25vcnIgPGtyYXhlbEBieXRlc2V4Lm9yZz4KIApAQCAtOTAsNyArOTAsNyBAQAogCiBzdGF0aWMgaW50IGF0dGFjaF9pbmZvcm0oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLSAgICAgICAgc3RydWN0IHR1bmVyX3NldHVwIHR1bl9zZXR1cDsKKwlzdHJ1Y3QgdHVuZXJfc2V0dXAgdHVuX3NldHVwOwogCXN0cnVjdCBjeDg4X2NvcmUgKmNvcmUgPSBpMmNfZ2V0X2FkYXBkYXRhKGNsaWVudC0+YWRhcHRlcik7CiAKIAlkcHJpbnRrKDEsICIlcyBpMmMgYXR0YWNoIFthZGRyPTB4JXgsY2xpZW50PSVzXVxuIiwKQEAgLTk4LDcgKzk4LDcgQEAKIAlpZiAoIWNsaWVudC0+ZHJpdmVyLT5jb21tYW5kKQogCQlyZXR1cm4gMDsKIAotICAgICAgICBpZiAoY29yZS0+cmFkaW9fdHlwZSAhPSBVTlNFVCkgeworCWlmIChjb3JlLT5yYWRpb190eXBlICE9IFVOU0VUKSB7CiAJCWlmICgoY29yZS0+cmFkaW9fYWRkcj09QUREUl9VTlNFVCl8fChjb3JlLT5yYWRpb19hZGRyPT1jbGllbnQtPmFkZHIpKSB7CiAJCQl0dW5fc2V0dXAubW9kZV9tYXNrID0gVF9SQURJTzsKIAkJCXR1bl9zZXR1cC50eXBlID0gY29yZS0+cmFkaW9fdHlwZTsKQEAgLTEwNiw4ICsxMDYsOCBAQAogCiAJCQljbGllbnQtPmRyaXZlci0+Y29tbWFuZCAoY2xpZW50LCBUVU5FUl9TRVRfVFlQRV9BRERSLCAmdHVuX3NldHVwKTsKIAkJfQotICAgICAgICB9Ci0gICAgICAgIGlmIChjb3JlLT50dW5lcl90eXBlICE9IFVOU0VUKSB7CisJfQorCWlmIChjb3JlLT50dW5lcl90eXBlICE9IFVOU0VUKSB7CiAJCWlmICgoY29yZS0+dHVuZXJfYWRkcj09QUREUl9VTlNFVCl8fChjb3JlLT50dW5lcl9hZGRyPT1jbGllbnQtPmFkZHIpKSB7CiAKIAkJCXR1bl9zZXR1cC5tb2RlX21hc2sgPSBUX0FOQUxPR19UVjsKQEAgLTExNiw3ICsxMTYsNyBAQAogCiAJCQljbGllbnQtPmRyaXZlci0+Y29tbWFuZCAoY2xpZW50LFRVTkVSX1NFVF9UWVBFX0FERFIsICZ0dW5fc2V0dXApOwogCQl9Ci0gICAgICAgIH0KKwl9CiAKIAlpZiAoY29yZS0+dGRhOTg4N19jb25mKQogCQljbGllbnQtPmRyaXZlci0+Y29tbWFuZChjbGllbnQsIFREQTk4ODdfU0VUX0NPTkZJRywgJmNvcmUtPnRkYTk4ODdfY29uZik7CkBAIC0xNTksNyArMTU5LDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudCBjeDg4MDBfaTJjX2NsaWVudF90ZW1wbGF0ZSA9IHsKLSAgICAgICAgLm5hbWUJPSAiY3g4OHh4IGludGVybmFsIiwKKwkubmFtZQk9ICJjeDg4eHggaW50ZXJuYWwiLAogfTsKIAogc3RhdGljIGNoYXIgKmkyY19kZXZzWzEyOF0gPSB7CkBAIC0yMDIsMTAgKzIwMiwxMCBAQAogCiAJY29yZS0+aTJjX2FkYXAuZGV2LnBhcmVudCA9ICZwY2ktPmRldjsKIAlzdHJsY3B5KGNvcmUtPmkyY19hZGFwLm5hbWUsY29yZS0+bmFtZSxzaXplb2YoY29yZS0+aTJjX2FkYXAubmFtZSkpOwotICAgICAgICBjb3JlLT5pMmNfYWxnby5kYXRhID0gY29yZTsKLSAgICAgICAgaTJjX3NldF9hZGFwZGF0YSgmY29yZS0+aTJjX2FkYXAsY29yZSk7Ci0gICAgICAgIGNvcmUtPmkyY19hZGFwLmFsZ29fZGF0YSA9ICZjb3JlLT5pMmNfYWxnbzsKLSAgICAgICAgY29yZS0+aTJjX2NsaWVudC5hZGFwdGVyID0gJmNvcmUtPmkyY19hZGFwOworCWNvcmUtPmkyY19hbGdvLmRhdGEgPSBjb3JlOworCWkyY19zZXRfYWRhcGRhdGEoJmNvcmUtPmkyY19hZGFwLGNvcmUpOworCWNvcmUtPmkyY19hZGFwLmFsZ29fZGF0YSA9ICZjb3JlLT5pMmNfYWxnbzsKKwljb3JlLT5pMmNfY2xpZW50LmFkYXB0ZXIgPSAmY29yZS0+aTJjX2FkYXA7CiAKIAljeDg4MDBfYml0X3NldHNjbChjb3JlLDEpOwogCWN4ODgwMF9iaXRfc2V0c2RhKGNvcmUsMSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1pbnB1dC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtaW5wdXQuYwppbmRleCBjMjdmZTRjMy4uMzhiMTJlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtaW5wdXQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1pbnB1dC5jCkBAIC01NTMsNyArNTUzLDcgQEAKIAogCQlpZiAoKGlyY29kZSAmIDB4ZmZmZikgIT0gMHhlYjA0KSB7IC8qIHdyb25nIGFkZHJlc3MgKi8KIAkJCWlyX2RwcmludGsoInB1bHNlIGRpc3RhbmNlIGRlY29kZWQgd3JvbmcgYWRkcmVzc1xuIik7Ci0gCQkJYnJlYWs7CisJCQlicmVhazsKIAkJfQogCiAJCWlmICgoKH5pcmNvZGUgPj4gMjQpICYgMHhmZikgIT0gKChpcmNvZGUgPj4gMTYpICYgMHhmZikpIHsgLyogd3JvbmcgY2hlY2tzdW0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LW1wZWcuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LW1wZWcuYwppbmRleCBlZTIzMDBlLi4zNWU2ZDBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1tcGVnLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtbXBlZy5jCkBAIC01NCw3ICs1NCw3IEBACiB7CiAJc3RydWN0IGN4ODhfY29yZSAqY29yZSA9IGRldi0+Y29yZTsKIAotCWRwcmludGsoMCwgImN4ODgwMl9zdGFydF9kbWEgJWRcbiIsIGJ1Zi0+dmIud2lkdGgpOworCWRwcmludGsoMCwgImN4ODgwMl9zdGFydF9kbWEgdzogJWQsIGg6ICVkLCBmOiAlZFxuIiwgZGV2LT53aWR0aCwgZGV2LT5oZWlnaHQsIGJ1Zi0+dmIuZmllbGQpOwogCiAJLyogc2V0dXAgZmlmbyArIGZvcm1hdCAqLwogCWN4ODhfc3JhbV9jaGFubmVsX3NldHVwKGNvcmUsICZjeDg4X3NyYW1fY2hhbm5lbHNbU1JBTV9DSDI4XSwKQEAgLTE1OCw3ICsxNTgsOCBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotaW50IGN4ODgwMl9idWZfcHJlcGFyZShzdHJ1Y3QgY3g4ODAyX2RldiAqZGV2LCBzdHJ1Y3QgY3g4OF9idWZmZXIgKmJ1ZikKK2ludCBjeDg4MDJfYnVmX3ByZXBhcmUoc3RydWN0IGN4ODgwMl9kZXYgKmRldiwgc3RydWN0IGN4ODhfYnVmZmVyICpidWYsCisJCQllbnVtIHY0bDJfZmllbGQgZmllbGQpCiB7CiAJaW50IHNpemUgPSBkZXYtPnRzX3BhY2tldF9zaXplICogZGV2LT50c19wYWNrZXRfY291bnQ7CiAJaW50IHJjOwpAQCAtMTcxLDcgKzE3Miw3IEBACiAJCWJ1Zi0+dmIud2lkdGggID0gZGV2LT50c19wYWNrZXRfc2l6ZTsKIAkJYnVmLT52Yi5oZWlnaHQgPSBkZXYtPnRzX3BhY2tldF9jb3VudDsKIAkJYnVmLT52Yi5zaXplICAgPSBzaXplOwotCQlidWYtPnZiLmZpZWxkICA9IFY0TDJfRklFTERfVE9QOworCQlidWYtPnZiLmZpZWxkICA9IGZpZWxkIC8qVjRMMl9GSUVMRF9UT1AqLzsKIAogCQlpZiAoMCAhPSAocmMgPSB2aWRlb2J1Zl9pb2xvY2soZGV2LT5wY2ksJmJ1Zi0+dmIsTlVMTCkpKQogCQkJZ290byBmYWlsOwpAQCAtMzE1LDE0ICszMTYsMTQgQEAKIAkJc3Bpbl91bmxvY2soJmRldi0+c2xvY2spOwogCX0KIAotICAgICAgICAvKiBvdGhlciBnZW5lcmFsIGVycm9ycyAqLwotICAgICAgICBpZiAoc3RhdHVzICYgMHgxZjAxMDApIHsKKwkvKiBvdGhlciBnZW5lcmFsIGVycm9ycyAqLworCWlmIChzdGF0dXMgJiAweDFmMDEwMCkgewogCQlkcHJpbnRrKCAwLCAiZ2VuZXJhbCBlcnJvcnM6IDB4JTA4eFxuIiwgc3RhdHVzICYgMHgxZjAxMDAgKTsKLSAgICAgICAgICAgICAgICBzcGluX2xvY2soJmRldi0+c2xvY2spOworCQlzcGluX2xvY2soJmRldi0+c2xvY2spOwogCQljeDg4MDJfc3RvcF9kbWEoZGV2KTsKLSAgICAgICAgICAgICAgICBjeDg4MDJfcmVzdGFydF9xdWV1ZShkZXYsJmRldi0+bXBlZ3EpOwotICAgICAgICAgICAgICAgIHNwaW5fdW5sb2NrKCZkZXYtPnNsb2NrKTsKLSAgICAgICAgfQorCQljeDg4MDJfcmVzdGFydF9xdWV1ZShkZXYsJmRldi0+bXBlZ3EpOworCQlzcGluX3VubG9jaygmZGV2LT5zbG9jayk7CisJfQogfQogCiAjZGVmaW5lIE1BWF9JUlFfTE9PUCAxMApAQCAtMzc4LDggKzM3OSw4IEBACiAJfQogCiAJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LT5wY2ksIFBDSV9DTEFTU19SRVZJU0lPTiwgJmRldi0+cGNpX3Jldik7Ci0gICAgICAgIHBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldi0+cGNpLCBQQ0lfTEFURU5DWV9USU1FUiwgICZkZXYtPnBjaV9sYXQpOwotICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlcy8yOiBmb3VuZCBhdCAlcywgcmV2OiAlZCwgaXJxOiAlZCwgIgorCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldi0+cGNpLCBQQ0lfTEFURU5DWV9USU1FUiwgICZkZXYtPnBjaV9sYXQpOworCXByaW50ayhLRVJOX0lORk8gIiVzLzI6IGZvdW5kIGF0ICVzLCByZXY6ICVkLCBpcnE6ICVkLCAiCiAJICAgICAgICJsYXRlbmN5OiAlZCwgbW1pbzogMHglbHhcbiIsIGRldi0+Y29yZS0+bmFtZSwKIAkgICAgICAgcGNpX25hbWUoZGV2LT5wY2kpLCBkZXYtPnBjaV9yZXYsIGRldi0+cGNpLT5pcnEsCiAJICAgICAgIGRldi0+cGNpX2xhdCxwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LT5wY2ksMCkpOwpAQCAtNDI5LDcgKzQzMCw3IEBACiAKIGludCBjeDg4MDJfc3VzcGVuZF9jb21tb24oc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLSAgICAgICAgc3RydWN0IGN4ODgwMl9kZXYgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwY2lfZGV2KTsKKwlzdHJ1Y3QgY3g4ODAyX2RldiAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBjaV9kZXYpOwogCXN0cnVjdCBjeDg4X2NvcmUgKmNvcmUgPSBkZXYtPmNvcmU7CiAKIAkvKiBzdG9wIG1wZWcgZG1hICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1yZWcuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXJlZy5oCmluZGV4IDBhM2E2MmYuLmQzYmY1YjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXJlZy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXJlZy5oCkBAIC0zLDkgKzMsOSBAQAogICAgIGN4ODh4LWh3LmggLSBDWDIzODh4IHJlZ2lzdGVyIG9mZnNldHMKIAogICAgIENvcHlyaWdodCAoQykgMTk5Niw5Nyw5OCBSYWxwaCBNZXR6bGVyIChyamttQHRocC51bmkta29lbG4uZGUpCi0gICAgICAgICAgICAgICAgICAyMDAxIE1pY2hhZWwgRXNraW4KLSAgICAgICAgICAgICAgICAgIDIwMDIgWXVyaWogU3lzb2V2IDx5dXJpakBuYXR1cmVzb2Z0Lm5ldD4KLSAgICAgICAgICAgICAgICAgIDIwMDMgR2VyZCBLbm9yciA8a3JheGVsQGJ5dGVzZXgub3JnPgorCQkgIDIwMDEgTWljaGFlbCBFc2tpbgorCQkgIDIwMDIgWXVyaWogU3lzb2V2IDx5dXJpakBuYXR1cmVzb2Z0Lm5ldD4KKwkJICAyMDAzIEdlcmQgS25vcnIgPGtyYXhlbEBieXRlc2V4Lm9yZz4KIAogICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTcyOCwxMyArNzI4LDEzIEBACiAjZGVmaW5lIENvbG9yRm9ybWF0R2FtbWEgICAgICAgICAweDEwMDAKIAogI2RlZmluZSBJbnRlcmxhY2VkCQkgMHgxCi0jZGVmaW5lIE5vbkludGVybGFjZWQJIAkgMHgwCisjZGVmaW5lIE5vbkludGVybGFjZWQJCSAweDAKIAogI2RlZmluZSBGaWVsZEV2ZW4JCSAweDEKICNkZWZpbmUgRmllbGRPZGQJCSAweDAKIAotI2RlZmluZSBUR1JlYWRXcml0ZU1vZGUJIAkgMHgwCi0jZGVmaW5lIFRHRW5hYmxlTW9kZQkgCSAweDEKKyNkZWZpbmUgVEdSZWFkV3JpdGVNb2RlCQkgMHgwCisjZGVmaW5lIFRHRW5hYmxlTW9kZQkJIDB4MQogCiAjZGVmaW5lIERWX0NiQWxpZ24JCSAweDAKICNkZWZpbmUgRFZfWTBBbGlnbgkJIDB4MQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdHZhdWRpby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdHZhdWRpby5jCmluZGV4IDI3NjVhY2UuLjZkOWJlYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXR2YXVkaW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC10dmF1ZGlvLmMKQEAgLTU3LDM5ICs1NywzOCBAQAogI2luY2x1ZGUgImN4ODguaCIKIAogc3RhdGljIHVuc2lnbmVkIGludCBhdWRpb19kZWJ1ZyA9IDA7Ci1tb2R1bGVfcGFyYW0oYXVkaW9fZGVidWcsaW50LDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhhdWRpb19kZWJ1ZywiZW5hYmxlIGRlYnVnIG1lc3NhZ2VzIFthdWRpb10iKTsKK21vZHVsZV9wYXJhbShhdWRpb19kZWJ1ZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoYXVkaW9fZGVidWcsICJlbmFibGUgZGVidWcgbWVzc2FnZXMgW2F1ZGlvXSIpOwogCiAjZGVmaW5lIGRwcmludGsoZm10LCBhcmcuLi4pCWlmIChhdWRpb19kZWJ1ZykgXAogCXByaW50ayhLRVJOX0RFQlVHICIlcy8wOiAiIGZtdCwgY29yZS0+bmFtZSAsICMjIGFyZykKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIGNoYXIgKmF1ZF9jdGxfbmFtZXNbNjRdID0KLXsKLQlbIEVOX0JUU0NfRk9SQ0VfTU9OTyAgICAgICBdID0gIkJUU0NfRk9SQ0VfTU9OTyIsCi0JWyBFTl9CVFNDX0ZPUkNFX1NURVJFTyAgICAgXSA9ICJCVFNDX0ZPUkNFX1NURVJFTyIsCi0JWyBFTl9CVFNDX0ZPUkNFX1NBUCAgICAgICAgXSA9ICJCVFNDX0ZPUkNFX1NBUCIsCi0JWyBFTl9CVFNDX0FVVE9fU1RFUkVPICAgICAgXSA9ICJCVFNDX0FVVE9fU1RFUkVPIiwKLQlbIEVOX0JUU0NfQVVUT19TQVAgICAgICAgICBdID0gIkJUU0NfQVVUT19TQVAiLAotCVsgRU5fQTJfRk9SQ0VfTU9OTzEgICAgICAgIF0gPSAiQTJfRk9SQ0VfTU9OTzEiLAotCVsgRU5fQTJfRk9SQ0VfTU9OTzIgICAgICAgIF0gPSAiQTJfRk9SQ0VfTU9OTzIiLAotCVsgRU5fQTJfRk9SQ0VfU1RFUkVPICAgICAgIF0gPSAiQTJfRk9SQ0VfU1RFUkVPIiwKLQlbIEVOX0EyX0FVVE9fTU9OTzIgICAgICAgICBdID0gIkEyX0FVVE9fTU9OTzIiLAotCVsgRU5fQTJfQVVUT19TVEVSRU8gICAgICAgIF0gPSAiQTJfQVVUT19TVEVSRU8iLAotCVsgRU5fRUlBSl9GT1JDRV9NT05PMSAgICAgIF0gPSAiRUlBSl9GT1JDRV9NT05PMSIsCi0JWyBFTl9FSUFKX0ZPUkNFX01PTk8yICAgICAgXSA9ICJFSUFKX0ZPUkNFX01PTk8yIiwKLQlbIEVOX0VJQUpfRk9SQ0VfU1RFUkVPICAgICBdID0gIkVJQUpfRk9SQ0VfU1RFUkVPIiwKLQlbIEVOX0VJQUpfQVVUT19NT05PMiAgICAgICBdID0gIkVJQUpfQVVUT19NT05PMiIsCi0JWyBFTl9FSUFKX0FVVE9fU1RFUkVPICAgICAgXSA9ICJFSUFKX0FVVE9fU1RFUkVPIiwKLQlbIEVOX05JQ0FNX0ZPUkNFX01PTk8xICAgICBdID0gIk5JQ0FNX0ZPUkNFX01PTk8xIiwKLQlbIEVOX05JQ0FNX0ZPUkNFX01PTk8yICAgICBdID0gIk5JQ0FNX0ZPUkNFX01PTk8yIiwKLQlbIEVOX05JQ0FNX0ZPUkNFX1NURVJFTyAgICBdID0gIk5JQ0FNX0ZPUkNFX1NURVJFTyIsCi0JWyBFTl9OSUNBTV9BVVRPX01PTk8yICAgICAgXSA9ICJOSUNBTV9BVVRPX01PTk8yIiwKLQlbIEVOX05JQ0FNX0FVVE9fU1RFUkVPICAgICBdID0gIk5JQ0FNX0FVVE9fU1RFUkVPIiwKLQlbIEVOX0ZNUkFESU9fRk9SQ0VfTU9OTyAgICBdID0gIkZNUkFESU9fRk9SQ0VfTU9OTyIsCi0JWyBFTl9GTVJBRElPX0ZPUkNFX1NURVJFTyAgXSA9ICJGTVJBRElPX0ZPUkNFX1NURVJFTyIsCi0JWyBFTl9GTVJBRElPX0FVVE9fU1RFUkVPICAgXSA9ICJGTVJBRElPX0FVVE9fU1RFUkVPIiwKK3N0YXRpYyBjaGFyICphdWRfY3RsX25hbWVzWzY0XSA9IHsKKwlbRU5fQlRTQ19GT1JDRV9NT05PXSA9ICJCVFNDX0ZPUkNFX01PTk8iLAorCVtFTl9CVFNDX0ZPUkNFX1NURVJFT10gPSAiQlRTQ19GT1JDRV9TVEVSRU8iLAorCVtFTl9CVFNDX0ZPUkNFX1NBUF0gPSAiQlRTQ19GT1JDRV9TQVAiLAorCVtFTl9CVFNDX0FVVE9fU1RFUkVPXSA9ICJCVFNDX0FVVE9fU1RFUkVPIiwKKwlbRU5fQlRTQ19BVVRPX1NBUF0gPSAiQlRTQ19BVVRPX1NBUCIsCisJW0VOX0EyX0ZPUkNFX01PTk8xXSA9ICJBMl9GT1JDRV9NT05PMSIsCisJW0VOX0EyX0ZPUkNFX01PTk8yXSA9ICJBMl9GT1JDRV9NT05PMiIsCisJW0VOX0EyX0ZPUkNFX1NURVJFT10gPSAiQTJfRk9SQ0VfU1RFUkVPIiwKKwlbRU5fQTJfQVVUT19NT05PMl0gPSAiQTJfQVVUT19NT05PMiIsCisJW0VOX0EyX0FVVE9fU1RFUkVPXSA9ICJBMl9BVVRPX1NURVJFTyIsCisJW0VOX0VJQUpfRk9SQ0VfTU9OTzFdID0gIkVJQUpfRk9SQ0VfTU9OTzEiLAorCVtFTl9FSUFKX0ZPUkNFX01PTk8yXSA9ICJFSUFKX0ZPUkNFX01PTk8yIiwKKwlbRU5fRUlBSl9GT1JDRV9TVEVSRU9dID0gIkVJQUpfRk9SQ0VfU1RFUkVPIiwKKwlbRU5fRUlBSl9BVVRPX01PTk8yXSA9ICJFSUFKX0FVVE9fTU9OTzIiLAorCVtFTl9FSUFKX0FVVE9fU1RFUkVPXSA9ICJFSUFKX0FVVE9fU1RFUkVPIiwKKwlbRU5fTklDQU1fRk9SQ0VfTU9OTzFdID0gIk5JQ0FNX0ZPUkNFX01PTk8xIiwKKwlbRU5fTklDQU1fRk9SQ0VfTU9OTzJdID0gIk5JQ0FNX0ZPUkNFX01PTk8yIiwKKwlbRU5fTklDQU1fRk9SQ0VfU1RFUkVPXSA9ICJOSUNBTV9GT1JDRV9TVEVSRU8iLAorCVtFTl9OSUNBTV9BVVRPX01PTk8yXSA9ICJOSUNBTV9BVVRPX01PTk8yIiwKKwlbRU5fTklDQU1fQVVUT19TVEVSRU9dID0gIk5JQ0FNX0FVVE9fU1RFUkVPIiwKKwlbRU5fRk1SQURJT19GT1JDRV9NT05PXSA9ICJGTVJBRElPX0ZPUkNFX01PTk8iLAorCVtFTl9GTVJBRElPX0ZPUkNFX1NURVJFT10gPSAiRk1SQURJT19GT1JDRV9TVEVSRU8iLAorCVtFTl9GTVJBRElPX0FVVE9fU1RFUkVPXSA9ICJGTVJBRElPX0FVVE9fU1RFUkVPIiwKIH07CiAKIHN0cnVjdCBybGlzdCB7CkBAIC05Nyw4ICs5Niw3IEBACiAJdTMyIHZhbDsKIH07CiAKLXN0YXRpYyB2b2lkIHNldF9hdWRpb19yZWdpc3RlcnMoc3RydWN0IGN4ODhfY29yZSAqY29yZSwKLQkJCQljb25zdCBzdHJ1Y3Qgcmxpc3QgKmwpCitzdGF0aWMgdm9pZCBzZXRfYXVkaW9fcmVnaXN0ZXJzKHN0cnVjdCBjeDg4X2NvcmUgKmNvcmUsIGNvbnN0IHN0cnVjdCBybGlzdCAqbCkKIHsKIAlpbnQgaTsKIApAQCAtMTE5LDE3ICsxMTcsMTggQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIHNldF9hdWRpb19zdGFydChzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlLAotCQkJdTMyIG1vZGUpCitzdGF0aWMgdm9pZCBzZXRfYXVkaW9fc3RhcnQoc3RydWN0IGN4ODhfY29yZSAqY29yZSwgdTMyIG1vZGUpCiB7CiAJLy8gbXV0ZQotCWN4X3dyaXRlKEFVRF9WT0xfQ1RMLCAgICAgICAoMSA8PCA2KSk7CisJY3hfd3JpdGUoQVVEX1ZPTF9DVEwsICgxIDw8IDYpKTsKIAogCS8vIHN0YXJ0IHByb2dyYW1taW5nCi0JY3hfd3JpdGUoQVVEX0NUTCwgICAgICAgICAgIDB4MDAwMCk7Ci0JY3hfd3JpdGUoQVVEX0lOSVQsICAgICAgICAgIG1vZGUpOwotCWN4X3dyaXRlKEFVRF9JTklUX0xELCAgICAgICAweDAwMDEpOwotCWN4X3dyaXRlKEFVRF9TT0ZUX1JFU0VULCAgICAweDAwMDEpOworCWN4X3dyaXRlKE1PX0FVRF9ETUFDTlRSTCwgMHgwMDAwKTsKKwltc2xlZXAoMTAwKTsKKwkvL2N4X3dyaXRlKEFVRF9DVEwsIDB4MDAwMCk7CisJY3hfd3JpdGUoQVVEX0lOSVQsIG1vZGUpOworCWN4X3dyaXRlKEFVRF9JTklUX0xELCAweDAwMDEpOworCWN4X3dyaXRlKEFVRF9TT0ZUX1JFU0VULCAweDAwMDEpOwogfQogCiBzdGF0aWMgdm9pZCBzZXRfYXVkaW9fZmluaXNoKHN0cnVjdCBjeDg4X2NvcmUgKmNvcmUsIHUzMiBjdGwpCkBAIC0xNDgsMTIgKzE0NywxMyBAQAogCQljeF93cml0ZShBVURfSTJTQ05UTCwgMCk7CiAJCS8vY3hfd3JpdGUoQVVEX0FQQl9JTl9SQVRFX0FESiwgMCk7CiAJfSBlbHNlIHsKLQljdGwgfD0gRU5fREFDX0VOQUJMRTsKLQljeF93cml0ZShBVURfQ1RMLCBjdGwpOworCQljdGwgfD0gRU5fREFDX0VOQUJMRTsKKwkJY3hfd3JpdGUoQVVEX0NUTCwgY3RsKTsKIAl9CiAKIAkvKiBmaW5pc2ggcHJvZ3JhbW1pbmcgKi8KIAljeF93cml0ZShBVURfU09GVF9SRVNFVCwgMHgwMDAwKTsKKwljeF93cml0ZShNT19BVURfRE1BQ05UUkwsIDB4MDAwMyk7CiAKIAkvKiB1bm11dGUgKi8KIAl2b2x1bWUgPSBjeF9zcmVhZChTSEFET1dfQVVEX1ZPTF9DVEwpOwpAQCAtMTYyLDQ4NiArMTYyLDQ2MyBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgdm9pZCBzZXRfYXVkaW9fc3RhbmRhcmRfQlRTQyhzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlLCB1bnNpZ25lZCBpbnQgc2FwLCB1MzIgbW9kZSkKK3N0YXRpYyB2b2lkIHNldF9hdWRpb19zdGFuZGFyZF9CVFNDKHN0cnVjdCBjeDg4X2NvcmUgKmNvcmUsIHVuc2lnbmVkIGludCBzYXAsCisJCQkJICAgIHUzMiBtb2RlKQogewogCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgcmxpc3QgYnRzY1tdID0gewotCXsgQVVEX0FGRV8xMkRCX0VOLCAgICAgICAgICAgICAweDAwMDAwMDAxIH0sCi0JCXsgQVVEX09VVDFfU0VMLCAgICAgICAgICAgICAgICAweDAwMDAwMDEzIH0sCi0JCXsgQVVEX09VVDFfU0hJRlQsICAgICAgICAgICAgICAweDAwMDAwMDAwIH0sCi0JCXsgQVVEX1BPTFkwX0REU19DT05TVEFOVCwgICAgICAweDAwMTIwMTBjIH0sCi0JCXsgQVVEX0RNRF9SQV9ERFMsICAgICAgICAgICAgICAweDAwYzNlN2FhIH0sCi0JCXsgQVVEX0RCWF9JTl9HQUlOLCAgICAgICAgICAgICAweDAwMDA0NzM0IH0sCi0JCXsgQVVEX0RCWF9XQkVfR0FJTiwgICAgICAgICAgICAweDAwMDA0NjQwIH0sCi0JCXsgQVVEX0RCWF9TRV9HQUlOLCAgICAgICAgICAgICAweDAwMDA4ZDMxIH0sCi0JCXsgQVVEX0RDT0NfMF9TUkMsICAgICAgICAgICAgICAweDAwMDAwMDFhIH0sCi0JCXsgQVVEX0lJUjFfNF9TRUwsICAgICAgICAgICAgICAweDAwMDAwMDIxIH0sCi0JCXsgQVVEX0RDT0NfUEFTU19JTiwgICAgICAgICAgICAweDAwMDAwMDAzIH0sCi0JCXsgQVVEX0RDT0NfMF9TSElGVF9JTjAsICAgICAgICAweDAwMDAwMDBhIH0sCi0JCXsgQVVEX0RDT0NfMF9TSElGVF9JTjEsICAgICAgICAweDAwMDAwMDA4IH0sCi0JCXsgQVVEX0RDT0NfMV9TSElGVF9JTjAsICAgICAgICAweDAwMDAwMDBhIH0sCi0JCXsgQVVEX0RDT0NfMV9TSElGVF9JTjEsICAgICAgICAweDAwMDAwMDA4IH0sCi0JCXsgQVVEX0ROMF9GUkVRLCAgICAgICAgICAgICAgICAweDAwMDAyODNiIH0sCi0JCXsgQVVEX0ROMl9TUkNfU0VMLCAgICAgICAgICAgICAweDAwMDAwMDA4IH0sCi0JCXsgQVVEX0ROMl9GUkVRLCAgICAgICAgICAgICAgICAweDAwMDAzMDAwIH0sCi0JCXsgQVVEX0ROMl9BRkMsICAgICAgICAgICAgICAgICAweDAwMDAwMDAyIH0sCi0JCXsgQVVEX0ROMl9TSEZULCAgICAgICAgICAgICAgICAweDAwMDAwMDAwIH0sCi0JCXsgQVVEX0lJUjJfMl9TRUwsICAgICAgICAgICAgICAweDAwMDAwMDIwIH0sCi0JCXsgQVVEX0lJUjJfMl9TSElGVCwgICAgICAgICAgICAweDAwMDAwMDAwIH0sCi0JCXsgQVVEX0lJUjJfM19TRUwsICAgICAgICAgICAgICAweDAwMDAwMDFmIH0sCi0JCXsgQVVEX0lJUjJfM19TSElGVCwgICAgICAgICAgICAweDAwMDAwMDAwIH0sCi0JCXsgQVVEX0NSREMxX1NSQ19TRUwsICAgICAgICAgICAweDAwMDAwM2NlIH0sCi0JCXsgQVVEX0NSREMxX1NISUZULCAgICAgICAgICAgICAweDAwMDAwMDAwIH0sCi0JCXsgQVVEX0NPUkRJQ19TSElGVF8xLCAgICAgICAgICAweDAwMDAwMDA3IH0sCi0JCXsgQVVEX0RDT0NfMV9TUkMsICAgICAgICAgICAgICAweDAwMDAwMDFiIH0sCi0JCXsgQVVEX0RDT0MxX1NISUZULCAgICAgICAgICAgICAweDAwMDAwMDAwIH0sCi0JCXsgQVVEX1JEU0lfU0VMLCAgICAgICAgICAgICAgICAweDAwMDAwMDA4IH0sCi0JCXsgQVVEX1JEU1FfU0VMLCAgICAgICAgICAgICAgICAweDAwMDAwMDA4IH0sCi0JCXsgQVVEX1JEU0lfU0hJRlQsICAgICAgICAgICAgICAweDAwMDAwMDAwIH0sCi0JCXsgQVVEX1JEU1FfU0hJRlQsICAgICAgICAgICAgICAweDAwMDAwMDAwIH0sCi0JCXsgQVVEX1BPTFlQSDgwU0NBTEVGQUMsICAgICAgICAweDAwMDAwMDAzIH0sCisJCXtBVURfQUZFXzEyREJfRU4sIDB4MDAwMDAwMDF9LAorCQl7QVVEX09VVDFfU0VMLCAweDAwMDAwMDEzfSwKKwkJe0FVRF9PVVQxX1NISUZULCAweDAwMDAwMDAwfSwKKwkJe0FVRF9QT0xZMF9ERFNfQ09OU1RBTlQsIDB4MDAxMjAxMGN9LAorCQl7QVVEX0RNRF9SQV9ERFMsIDB4MDBjM2U3YWF9LAorCQl7QVVEX0RCWF9JTl9HQUlOLCAweDAwMDA0NzM0fSwKKwkJe0FVRF9EQlhfV0JFX0dBSU4sIDB4MDAwMDQ2NDB9LAorCQl7QVVEX0RCWF9TRV9HQUlOLCAweDAwMDA4ZDMxfSwKKwkJe0FVRF9EQ09DXzBfU1JDLCAweDAwMDAwMDFhfSwKKwkJe0FVRF9JSVIxXzRfU0VMLCAweDAwMDAwMDIxfSwKKwkJe0FVRF9EQ09DX1BBU1NfSU4sIDB4MDAwMDAwMDN9LAorCQl7QVVEX0RDT0NfMF9TSElGVF9JTjAsIDB4MDAwMDAwMGF9LAorCQl7QVVEX0RDT0NfMF9TSElGVF9JTjEsIDB4MDAwMDAwMDh9LAorCQl7QVVEX0RDT0NfMV9TSElGVF9JTjAsIDB4MDAwMDAwMGF9LAorCQl7QVVEX0RDT0NfMV9TSElGVF9JTjEsIDB4MDAwMDAwMDh9LAorCQl7QVVEX0ROMF9GUkVRLCAweDAwMDAyODNifSwKKwkJe0FVRF9ETjJfU1JDX1NFTCwgMHgwMDAwMDAwOH0sCisJCXtBVURfRE4yX0ZSRVEsIDB4MDAwMDMwMDB9LAorCQl7QVVEX0ROMl9BRkMsIDB4MDAwMDAwMDJ9LAorCQl7QVVEX0ROMl9TSEZULCAweDAwMDAwMDAwfSwKKwkJe0FVRF9JSVIyXzJfU0VMLCAweDAwMDAwMDIwfSwKKwkJe0FVRF9JSVIyXzJfU0hJRlQsIDB4MDAwMDAwMDB9LAorCQl7QVVEX0lJUjJfM19TRUwsIDB4MDAwMDAwMWZ9LAorCQl7QVVEX0lJUjJfM19TSElGVCwgMHgwMDAwMDAwMH0sCisJCXtBVURfQ1JEQzFfU1JDX1NFTCwgMHgwMDAwMDNjZX0sCisJCXtBVURfQ1JEQzFfU0hJRlQsIDB4MDAwMDAwMDB9LAorCQl7QVVEX0NPUkRJQ19TSElGVF8xLCAweDAwMDAwMDA3fSwKKwkJe0FVRF9EQ09DXzFfU1JDLCAweDAwMDAwMDFifSwKKwkJe0FVRF9EQ09DMV9TSElGVCwgMHgwMDAwMDAwMH0sCisJCXtBVURfUkRTSV9TRUwsIDB4MDAwMDAwMDh9LAorCQl7QVVEX1JEU1FfU0VMLCAweDAwMDAwMDA4fSwKKwkJe0FVRF9SRFNJX1NISUZULCAweDAwMDAwMDAwfSwKKwkJe0FVRF9SRFNRX1NISUZULCAweDAwMDAwMDAwfSwKKwkJe0FVRF9QT0xZUEg4MFNDQUxFRkFDLCAweDAwMDAwMDAzfSwKIAkJeyAvKiBlbmQgb2YgbGlzdCAqLyB9LAogCX07CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBybGlzdCBidHNjX3NhcFtdID0gewotCXsgQVVEX0FGRV8xMkRCX0VOLCAgICAgICAgICAgICAweDAwMDAwMDAxIH0sCi0JCXsgQVVEX0RCWF9JTl9HQUlOLCAgICAgICAgICAgICAweDAwMDA3MjAwIH0sCi0JCXsgQVVEX0RCWF9XQkVfR0FJTiwgICAgICAgICAgICAweDAwMDA2MjAwIH0sCi0JCXsgQVVEX0RCWF9TRV9HQUlOLCAgICAgICAgICAgICAweDAwMDA2MjAwIH0sCi0JCXsgQVVEX0lJUjFfMV9TRUwsICAgICAgICAgICAgICAweDAwMDAwMDAwIH0sCi0JCXsgQVVEX0lJUjFfM19TRUwsICAgICAgICAgICAgICAweDAwMDAwMDAxIH0sCi0JCXsgQVVEX0ROMV9TUkNfU0VMLCAgICAgICAgICAgICAweDAwMDAwMDA3IH0sCi0JCXsgQVVEX0lJUjFfNF9TSElGVCwgICAgICAgICAgICAweDAwMDAwMDA2IH0sCi0JCXsgQVVEX0lJUjJfMV9TSElGVCwgICAgICAgICAgICAweDAwMDAwMDAwIH0sCi0JCXsgQVVEX0lJUjJfMl9TSElGVCwgICAgICAgICAgICAweDAwMDAwMDAwIH0sCi0JCXsgQVVEX0lJUjNfMF9TSElGVCwgICAgICAgICAgICAweDAwMDAwMDAwIH0sCi0JCXsgQVVEX0lJUjNfMV9TSElGVCwgICAgICAgICAgICAweDAwMDAwMDAwIH0sCi0JCXsgQVVEX0lJUjNfMF9TRUwsICAgICAgICAgICAgICAweDAwMDAwMDBkIH0sCi0JCXsgQVVEX0lJUjNfMV9TRUwsICAgICAgICAgICAgICAweDAwMDAwMDBlIH0sCi0JCXsgQVVEX0RFRU1QSDFfU1JDX1NFTCwgICAgICAgICAweDAwMDAwMDE0IH0sCi0JCXsgQVVEX0RFRU1QSDFfU0hJRlQsICAgICAgICAgICAweDAwMDAwMDAwIH0sCi0JCXsgQVVEX0RFRU1QSDFfRzAsICAgICAgICAgICAgICAweDAwMDA0MDAwIH0sCi0JCXsgQVVEX0RFRU1QSDFfQTAsICAgICAgICAgICAgICAweDAwMDAwMDAwIH0sCi0JCXsgQVVEX0RFRU1QSDFfQjAsICAgICAgICAgICAgICAweDAwMDAwMDAwIH0sCi0JCXsgQVVEX0RFRU1QSDFfQTEsICAgICAgICAgICAgICAweDAwMDAwMDAwIH0sCi0JCXsgQVVEX0RFRU1QSDFfQjEsICAgICAgICAgICAgICAweDAwMDAwMDAwIH0sCi0JCXsgQVVEX09VVDBfU0VMLCAgICAgICAgICAgICAgICAweDAwMDAwMDNmIH0sCi0JCXsgQVVEX09VVDFfU0VMLCAgICAgICAgICAgICAgICAweDAwMDAwMDNmIH0sCi0JCXsgQVVEX0ROMV9BRkMsICAgICAgICAgICAgICAgICAweDAwMDAwMDAyIH0sCi0JCXsgQVVEX0RDT0NfMF9TSElGVF9JTjAsICAgICAgICAweDAwMDAwMDBhIH0sCi0JCXsgQVVEX0RDT0NfMF9TSElGVF9JTjEsICAgICAgICAweDAwMDAwMDA4IH0sCi0JCXsgQVVEX0RDT0NfMV9TSElGVF9JTjAsICAgICAgICAweDAwMDAwMDBhIH0sCi0JCXsgQVVEX0RDT0NfMV9TSElGVF9JTjEsICAgICAgICAweDAwMDAwMDA4IH0sCi0JCXsgQVVEX0lJUjFfMF9TRUwsICAgICAgICAgICAgICAweDAwMDAwMDFkIH0sCi0JCXsgQVVEX0lJUjFfMl9TRUwsICAgICAgICAgICAgICAweDAwMDAwMDFlIH0sCi0JCXsgQVVEX0lJUjJfMV9TRUwsICAgICAgICAgICAgICAweDAwMDAwMDAyIH0sCi0JCXsgQVVEX0lJUjJfMl9TRUwsICAgICAgICAgICAgICAweDAwMDAwMDA0IH0sCi0JCXsgQVVEX0lJUjNfMl9TRUwsICAgICAgICAgICAgICAweDAwMDAwMDBmIH0sCi0JCXsgQVVEX0RDT0MyX1NISUZULCAgICAgICAgICAgICAweDAwMDAwMDAxIH0sCi0JCXsgQVVEX0lJUjNfMl9TSElGVCwgICAgICAgICAgICAweDAwMDAwMDAxIH0sCi0JCXsgQVVEX0RFRU1QSDBfU1JDX1NFTCwgICAgICAgICAweDAwMDAwMDE0IH0sCi0JCXsgQVVEX0NPUkRJQ19TSElGVF8xLCAgICAgICAgICAweDAwMDAwMDA2IH0sCi0JCXsgQVVEX1BPTFkwX0REU19DT05TVEFOVCwgICAgICAweDAwMGU0ZGIyIH0sCi0JCXsgQVVEX0RNRF9SQV9ERFMsICAgICAgICAgICAgICAweDAwZjY5NmU2IH0sCi0JCXsgQVVEX0lJUjJfM19TRUwsICAgICAgICAgICAgICAweDAwMDAwMDI1IH0sCi0JCXsgQVVEX0lJUjFfNF9TRUwsICAgICAgICAgICAgICAweDAwMDAwMDIxIH0sCi0JCXsgQVVEX0ROMV9GUkVRLCAgICAgICAgICAgICAgICAweDAwMDBjOTY1IH0sCi0JCXsgQVVEX0RDT0NfUEFTU19JTiwgICAgICAgICAgICAweDAwMDAwMDAzIH0sCi0JCXsgQVVEX0RDT0NfMF9TUkMsICAgICAgICAgICAgICAweDAwMDAwMDFhIH0sCi0JCXsgQVVEX0RDT0NfMV9TUkMsICAgICAgICAgICAgICAweDAwMDAwMDFiIH0sCi0JCXsgQVVEX0RDT0MxX1NISUZULCAgICAgICAgICAgICAweDAwMDAwMDAwIH0sCi0JCXsgQVVEX1JEU0lfU0VMLCAgICAgICAgICAgICAgICAweDAwMDAwMDA5IH0sCi0JCXsgQVVEX1JEU1FfU0VMLCAgICAgICAgICAgICAgICAweDAwMDAwMDA5IH0sCi0JCXsgQVVEX1JEU0lfU0hJRlQsICAgICAgICAgICAgICAweDAwMDAwMDAwIH0sCi0JCXsgQVVEX1JEU1FfU0hJRlQsICAgICAgICAgICAgICAweDAwMDAwMDAwIH0sCi0JCXsgQVVEX1BPTFlQSDgwU0NBTEVGQUMsICAgICAgICAweDAwMDAwMDAzIH0sCisJCXtBVURfQUZFXzEyREJfRU4sIDB4MDAwMDAwMDF9LAorCQl7QVVEX0RCWF9JTl9HQUlOLCAweDAwMDA3MjAwfSwKKwkJe0FVRF9EQlhfV0JFX0dBSU4sIDB4MDAwMDYyMDB9LAorCQl7QVVEX0RCWF9TRV9HQUlOLCAweDAwMDA2MjAwfSwKKwkJe0FVRF9JSVIxXzFfU0VMLCAweDAwMDAwMDAwfSwKKwkJe0FVRF9JSVIxXzNfU0VMLCAweDAwMDAwMDAxfSwKKwkJe0FVRF9ETjFfU1JDX1NFTCwgMHgwMDAwMDAwN30sCisJCXtBVURfSUlSMV80X1NISUZULCAweDAwMDAwMDA2fSwKKwkJe0FVRF9JSVIyXzFfU0hJRlQsIDB4MDAwMDAwMDB9LAorCQl7QVVEX0lJUjJfMl9TSElGVCwgMHgwMDAwMDAwMH0sCisJCXtBVURfSUlSM18wX1NISUZULCAweDAwMDAwMDAwfSwKKwkJe0FVRF9JSVIzXzFfU0hJRlQsIDB4MDAwMDAwMDB9LAorCQl7QVVEX0lJUjNfMF9TRUwsIDB4MDAwMDAwMGR9LAorCQl7QVVEX0lJUjNfMV9TRUwsIDB4MDAwMDAwMGV9LAorCQl7QVVEX0RFRU1QSDFfU1JDX1NFTCwgMHgwMDAwMDAxNH0sCisJCXtBVURfREVFTVBIMV9TSElGVCwgMHgwMDAwMDAwMH0sCisJCXtBVURfREVFTVBIMV9HMCwgMHgwMDAwNDAwMH0sCisJCXtBVURfREVFTVBIMV9BMCwgMHgwMDAwMDAwMH0sCisJCXtBVURfREVFTVBIMV9CMCwgMHgwMDAwMDAwMH0sCisJCXtBVURfREVFTVBIMV9BMSwgMHgwMDAwMDAwMH0sCisJCXtBVURfREVFTVBIMV9CMSwgMHgwMDAwMDAwMH0sCisJCXtBVURfT1VUMF9TRUwsIDB4MDAwMDAwM2Z9LAorCQl7QVVEX09VVDFfU0VMLCAweDAwMDAwMDNmfSwKKwkJe0FVRF9ETjFfQUZDLCAweDAwMDAwMDAyfSwKKwkJe0FVRF9EQ09DXzBfU0hJRlRfSU4wLCAweDAwMDAwMDBhfSwKKwkJe0FVRF9EQ09DXzBfU0hJRlRfSU4xLCAweDAwMDAwMDA4fSwKKwkJe0FVRF9EQ09DXzFfU0hJRlRfSU4wLCAweDAwMDAwMDBhfSwKKwkJe0FVRF9EQ09DXzFfU0hJRlRfSU4xLCAweDAwMDAwMDA4fSwKKwkJe0FVRF9JSVIxXzBfU0VMLCAweDAwMDAwMDFkfSwKKwkJe0FVRF9JSVIxXzJfU0VMLCAweDAwMDAwMDFlfSwKKwkJe0FVRF9JSVIyXzFfU0VMLCAweDAwMDAwMDAyfSwKKwkJe0FVRF9JSVIyXzJfU0VMLCAweDAwMDAwMDA0fSwKKwkJe0FVRF9JSVIzXzJfU0VMLCAweDAwMDAwMDBmfSwKKwkJe0FVRF9EQ09DMl9TSElGVCwgMHgwMDAwMDAwMX0sCisJCXtBVURfSUlSM18yX1NISUZULCAweDAwMDAwMDAxfSwKKwkJe0FVRF9ERUVNUEgwX1NSQ19TRUwsIDB4MDAwMDAwMTR9LAorCQl7QVVEX0NPUkRJQ19TSElGVF8xLCAweDAwMDAwMDA2fSwKKwkJe0FVRF9QT0xZMF9ERFNfQ09OU1RBTlQsIDB4MDAwZTRkYjJ9LAorCQl7QVVEX0RNRF9SQV9ERFMsIDB4MDBmNjk2ZTZ9LAorCQl7QVVEX0lJUjJfM19TRUwsIDB4MDAwMDAwMjV9LAorCQl7QVVEX0lJUjFfNF9TRUwsIDB4MDAwMDAwMjF9LAorCQl7QVVEX0ROMV9GUkVRLCAweDAwMDBjOTY1fSwKKwkJe0FVRF9EQ09DX1BBU1NfSU4sIDB4MDAwMDAwMDN9LAorCQl7QVVEX0RDT0NfMF9TUkMsIDB4MDAwMDAwMWF9LAorCQl7QVVEX0RDT0NfMV9TUkMsIDB4MDAwMDAwMWJ9LAorCQl7QVVEX0RDT0MxX1NISUZULCAweDAwMDAwMDAwfSwKKwkJe0FVRF9SRFNJX1NFTCwgMHgwMDAwMDAwOX0sCisJCXtBVURfUkRTUV9TRUwsIDB4MDAwMDAwMDl9LAorCQl7QVVEX1JEU0lfU0hJRlQsIDB4MDAwMDAwMDB9LAorCQl7QVVEX1JEU1FfU0hJRlQsIDB4MDAwMDAwMDB9LAorCQl7QVVEX1BPTFlQSDgwU0NBTEVGQUMsIDB4MDAwMDAwMDN9LAogCQl7IC8qIGVuZCBvZiBsaXN0ICovIH0sCiAJfTsKIAogCW1vZGUgfD0gRU5fRk1SQURJT19FTl9SRFM7CiAKIAlpZiAoc2FwKSB7Ci0JCWRwcmludGsoIiVzIFNBUCAoc3RhdHVzOiB1bmtub3duKVxuIixfX0ZVTkNUSU9OX18pOwotCXNldF9hdWRpb19zdGFydChjb3JlLCBTRUxfU0FQKTsKKwkJZHByaW50aygiJXMgU0FQIChzdGF0dXM6IHVua25vd24pXG4iLCBfX0ZVTkNUSU9OX18pOworCQlzZXRfYXVkaW9fc3RhcnQoY29yZSwgU0VMX1NBUCk7CiAJCXNldF9hdWRpb19yZWdpc3RlcnMoY29yZSwgYnRzY19zYXApOwogCQlzZXRfYXVkaW9fZmluaXNoKGNvcmUsIG1vZGUpOwogCX0gZWxzZSB7Ci0JCWRwcmludGsoIiVzIChzdGF0dXM6IGtub3duLWdvb2QpXG4iLF9fRlVOQ1RJT05fXyk7Ci0Jc2V0X2F1ZGlvX3N0YXJ0KGNvcmUsIFNFTF9CVFNDKTsKKwkJZHByaW50aygiJXMgKHN0YXR1czoga25vd24tZ29vZClcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXNldF9hdWRpb19zdGFydChjb3JlLCBTRUxfQlRTQyk7CiAJCXNldF9hdWRpb19yZWdpc3RlcnMoY29yZSwgYnRzYyk7CiAJCXNldF9hdWRpb19maW5pc2goY29yZSwgbW9kZSk7CiAJfQogfQogCi0KLXN0YXRpYyB2b2lkIHNldF9hdWRpb19zdGFuZGFyZF9OSUNBTV9MKHN0cnVjdCBjeDg4X2NvcmUgKmNvcmUsIGludCBzdGVyZW8pCitzdGF0aWMgdm9pZCBzZXRfYXVkaW9fc3RhbmRhcmRfTklDQU0oc3RydWN0IGN4ODhfY29yZSAqY29yZSwgdTMyIG1vZGUpCiB7Ci0JLyogVGhpcyBpcyBwcm9iYWJseSB3ZWlyZC4uCi0JKiBMZXQncyBvcGVyYXRlIGFuZCBmaW5kIG91dC4gKi8KLQotCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgcmxpc3QgbmljYW1fbF9tb25vW10gPSB7Ci0JCXsgQVVEX0VSUkxPR1BFUklPRF9SLCAgICAgMHgwMDAwMDA2NCB9LAotCQl7IEFVRF9FUlJJTlRSUFRUSFNITEQxX1IsIDB4MDAwMDBGRkYgfSwKLQkJeyBBVURfRVJSSU5UUlBUVEhTSExEMl9SLCAweDAwMDAwMDFGIH0sCi0JCXsgQVVEX0VSUklOVFJQVFRIU0hMRDNfUiwgMHgwMDAwMDAwRiB9LAotCi0JCXsgQVVEX1BERl9ERFNfQ05TVF9CWVRFMiwgMHg0OCB9LAotCQl7IEFVRF9QREZfRERTX0NOU1RfQllURTEsIDB4M0QgfSwKLQkJeyBBVURfUUFNX01PREUsICAgICAgICAgICAweDAwIH0sCi0JCXsgQVVEX1BERl9ERFNfQ05TVF9CWVRFMCwgMHhmNSB9LAotCQl7IEFVRF9QSEFDQ19GUkVRXzhNU0IsICAgIDB4M2EgfSwKLQkJeyBBVURfUEhBQ0NfRlJFUV84TFNCLCAgICAweDRhIH0sCi0KLQkJeyBBVURfREVFTVBIR0FJTl9SLCAweDY2ODAgfSwKLQkJeyBBVURfREVFTVBITlVNRVIxX1IsIDB4MzUzREUgfSwKLQkJeyBBVURfREVFTVBITlVNRVIyX1IsIDB4MUIxIH0sCi0JCXsgQVVEX0RFRU1QSERFTk9NMV9SLCAweDBGM0QwIH0sCi0JCXsgQVVEX0RFRU1QSERFTk9NMl9SLCAweDAgfSwKLQkJeyBBVURfRk1fTU9ERV9FTkFCTEUsIDB4NyB9LAotCQl7IEFVRF9QT0xZUEg4MFNDQUxFRkFDLCAweDMgfSwKLQkJeyBBVURfQUZFXzEyREJfRU4sIDB4MSB9LAotCQl7IEFBR0NfR0FJTiwgMHgwIH0sCi0JCXsgQUFHQ19IWVNULCAweDE4IH0sCi0JCXsgQUFHQ19ERUYsIDB4MjAgfSwKLQkJeyBBVURfRE4wX0ZSRVEsIDB4MCB9LAotCQl7IEFVRF9QT0xZMF9ERFNfQ09OU1RBTlQsIDB4MEU0REIyIH0sCi0JCXsgQVVEX0RDT0NfMF9TUkMsIDB4MjEgfSwKLQkJeyBBVURfSUlSMV8wX1NFTCwgMHgwIH0sCi0JCXsgQVVEX0lJUjFfMF9TSElGVCwgMHg3IH0sCi0JCXsgQVVEX0lJUjFfMV9TRUwsIDB4MiB9LAotCQl7IEFVRF9JSVIxXzFfU0hJRlQsIDB4MCB9LAotCQl7IEFVRF9EQ09DXzFfU1JDLCAweDMgfSwKLQkJeyBBVURfRENPQzFfU0hJRlQsIDB4MCB9LAotCQl7IEFVRF9EQ09DX1BBU1NfSU4sIDB4MCB9LAotCQl7IEFVRF9JSVIxXzJfU0VMLCAweDIzIH0sCi0JCXsgQVVEX0lJUjFfMl9TSElGVCwgMHgwIH0sCi0JCXsgQVVEX0lJUjFfM19TRUwsIDB4NCB9LAotCQl7IEFVRF9JSVIxXzNfU0hJRlQsIDB4NyB9LAotCQl7IEFVRF9JSVIxXzRfU0VMLCAweDUgfSwKLQkJeyBBVURfSUlSMV80X1NISUZULCAweDcgfSwKLQkJeyBBVURfSUlSM18wX1NFTCwgMHg3IH0sCi0JCXsgQVVEX0lJUjNfMF9TSElGVCwgMHgwIH0sCi0JCXsgQVVEX0RFRU1QSDBfU1JDX1NFTCwgMHgxMSB9LAotCQl7IEFVRF9ERUVNUEgwX1NISUZULCAweDAgfSwKLQkJeyBBVURfREVFTVBIMF9HMCwgMHg3MDAwIH0sCi0JCXsgQVVEX0RFRU1QSDBfQTAsIDB4MCB9LAotCQl7IEFVRF9ERUVNUEgwX0IwLCAweDAgfSwKLQkJeyBBVURfREVFTVBIMF9BMSwgMHgwIH0sCi0JCXsgQVVEX0RFRU1QSDBfQjEsIDB4MCB9LAotCQl7IEFVRF9ERUVNUEgxX1NSQ19TRUwsIDB4MTEgfSwKLQkJeyBBVURfREVFTVBIMV9TSElGVCwgMHgwIH0sCi0JCXsgQVVEX0RFRU1QSDFfRzAsIDB4NzAwMCB9LAotCQl7IEFVRF9ERUVNUEgxX0EwLCAweDAgfSwKLQkJeyBBVURfREVFTVBIMV9CMCwgMHgwIH0sCi0JCXsgQVVEX0RFRU1QSDFfQTEsIDB4MCB9LAotCQl7IEFVRF9ERUVNUEgxX0IxLCAweDAgfSwKLQkJeyBBVURfT1VUMF9TRUwsIDB4M0YgfSwKLQkJeyBBVURfT1VUMV9TRUwsIDB4M0YgfSwKLQkJeyBBVURfRE1EX1JBX0REUywgMHgwRjVDMjg1IH0sCi0JCXsgQVVEX1BMTF9JTlQsIDB4MUUgfSwKLQkJeyBBVURfUExMX0REUywgMHgwIH0sCi0JCXsgQVVEX1BMTF9GUkFDLCAweDBFNTQyIH0sCi0KLQkJLy8gc2V0dXAgUUFNIHJlZ2lzdGVycwotCQl7IEFVRF9SQVRFX0FESjEsICAgICAgMHgwMDAwMDEwMCB9LAotCQl7IEFVRF9SQVRFX0FESjIsICAgICAgMHgwMDAwMDIwMCB9LAotCQl7IEFVRF9SQVRFX0FESjMsICAgICAgMHgwMDAwMDMwMCB9LAotCQl7IEFVRF9SQVRFX0FESjQsICAgICAgMHgwMDAwMDQwMCB9LAotCQl7IEFVRF9SQVRFX0FESjUsICAgICAgMHgwMDAwMDUwMCB9LAotCQl7IEFVRF9SQVRFX1RIUkVTX0RNRCwgMHgwMDAwMDBDMCB9LAotCQl7IC8qIGVuZCBvZiBsaXN0ICovIH0sCi0JfTsKLQogCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgcmxpc3QgbmljYW1fbFtdID0gewotCQkvLyBzZXR1cCBRQU0gcmVnaXN0ZXJzCi0JCXsgQVVEX1JBVEVfQURKMSwgMHgwMDAwMDA2MCB9LAotCQl7IEFVRF9SQVRFX0FESjIsIDB4MDAwMDAwRjkgfSwKLQkJeyBBVURfUkFURV9BREozLCAweDAwMDAwMUNDIH0sCi0JCXsgQVVEX1JBVEVfQURKNCwgMHgwMDAwMDJCMyB9LAotCQl7IEFVRF9SQVRFX0FESjUsIDB4MDAwMDA3MjYgfSwKLQkJeyBBVURfREVFTVBIREVOT00xX1IsIDB4MDAwMEYzRDAgfSwKLQkJeyBBVURfREVFTVBIREVOT00yX1IsIDB4MDAwMDAwMDAgfSwKLQkJeyBBVURfRVJSTE9HUEVSSU9EX1IsIDB4MDAwMDAwNjQgfSwKLQkJeyBBVURfRVJSSU5UUlBUVEhTSExEMV9SLCAweDAwMDAwRkZGIH0sCi0JCXsgQVVEX0VSUklOVFJQVFRIU0hMRDJfUiwgMHgwMDAwMDAxRiB9LAotCQl7IEFVRF9FUlJJTlRSUFRUSFNITEQzX1IsIDB4MDAwMDAwMEYgfSwKLQkJeyBBVURfUE9MWVBIODBTQ0FMRUZBQywgMHgwMDAwMDAwMyB9LAotCQl7IEFVRF9ETURfUkFfRERTLCAweDAwQzAwMDAwIH0sCi0JCXsgQVVEX1BMTF9JTlQsIDB4MDAwMDAwMUUgfSwKLQkJeyBBVURfUExMX0REUywgMHgwMDAwMDAwMCB9LAotCQl7IEFVRF9QTExfRlJBQywgMHgwMDAwRTU0MiB9LAotCQl7IEFVRF9TVEFSVF9USU1FUiwgMHgwMDAwMDAwMCB9LAotCQl7IEFVRF9ERUVNUEhOVU1FUjFfUiwgMHgwMDAzNTNERSB9LAotCQl7IEFVRF9ERUVNUEhOVU1FUjJfUiwgMHgwMDAwMDFCMSB9LAotCQl7IEFVRF9QREZfRERTX0NOU1RfQllURTIsIDB4MDYgfSwKLQkJeyBBVURfUERGX0REU19DTlNUX0JZVEUxLCAweDgyIH0sCi0JCXsgQVVEX1FBTV9NT0RFLCAweDA1IH0sCi0JCXsgQVVEX1BERl9ERFNfQ05TVF9CWVRFMCwgMHgxMiB9LAotCQl7IEFVRF9QSEFDQ19GUkVRXzhNU0IsIDB4MzQgfSwKLQkJeyBBVURfUEhBQ0NfRlJFUV84TFNCLCAweDRDIH0sCi0JCXsgQVVEX0RFRU1QSEdBSU5fUiwgMHgwMDAwNjY4MCB9LAotCQl7IEFVRF9SQVRFX1RIUkVTX0RNRCwgMHgwMDAwMDBDMCAgfSwKKwkJe0FVRF9BRkVfMTJEQl9FTiwgMHgwMDAwMDAwMX0sCisJCXtBVURfUkFURV9BREoxLCAweDAwMDAwMDYwfSwKKwkJe0FVRF9SQVRFX0FESjIsIDB4MDAwMDAwRjl9LAorCQl7QVVEX1JBVEVfQURKMywgMHgwMDAwMDFDQ30sCisJCXtBVURfUkFURV9BREo0LCAweDAwMDAwMkIzfSwKKwkJe0FVRF9SQVRFX0FESjUsIDB4MDAwMDA3MjZ9LAorCQl7QVVEX0RFRU1QSERFTk9NMV9SLCAweDAwMDBGM0QwfSwKKwkJe0FVRF9ERUVNUEhERU5PTTJfUiwgMHgwMDAwMDAwMH0sCisJCXtBVURfRVJSTE9HUEVSSU9EX1IsIDB4MDAwMDAwNjR9LAorCQl7QVVEX0VSUklOVFJQVFRIU0hMRDFfUiwgMHgwMDAwMEZGRn0sCisJCXtBVURfRVJSSU5UUlBUVEhTSExEMl9SLCAweDAwMDAwMDFGfSwKKwkJe0FVRF9FUlJJTlRSUFRUSFNITEQzX1IsIDB4MDAwMDAwMEZ9LAorCQl7QVVEX1BPTFlQSDgwU0NBTEVGQUMsIDB4MDAwMDAwMDN9LAorCQl7QVVEX0RNRF9SQV9ERFMsIDB4MDBDMDAwMDB9LAorCQl7QVVEX1BMTF9JTlQsIDB4MDAwMDAwMUV9LAorCQl7QVVEX1BMTF9ERFMsIDB4MDAwMDAwMDB9LAorCQl7QVVEX1BMTF9GUkFDLCAweDAwMDBFNTQyfSwKKwkJe0FVRF9TVEFSVF9USU1FUiwgMHgwMDAwMDAwMH0sCisJCXtBVURfREVFTVBITlVNRVIxX1IsIDB4MDAwMzUzREV9LAorCQl7QVVEX0RFRU1QSE5VTUVSMl9SLCAweDAwMDAwMUIxfSwKKwkJe0FVRF9QREZfRERTX0NOU1RfQllURTIsIDB4MDZ9LAorCQl7QVVEX1BERl9ERFNfQ05TVF9CWVRFMSwgMHg4Mn0sCisJCXtBVURfUERGX0REU19DTlNUX0JZVEUwLCAweDEyfSwKKwkJe0FVRF9RQU1fTU9ERSwgMHgwNX0sCisJCXtBVURfUEhBQ0NfRlJFUV84TVNCLCAweDM0fSwKKwkJe0FVRF9QSEFDQ19GUkVRXzhMU0IsIDB4NEN9LAorCQl7QVVEX0RFRU1QSEdBSU5fUiwgMHgwMDAwNjY4MH0sCisJCXtBVURfUkFURV9USFJFU19ETUQsIDB4MDAwMDAwQzB9LAogCQl7IC8qIGVuZCBvZiBsaXN0ICovIH0sCi0JfSA7Ci0JZHByaW50aygiJXMgKHN0YXR1czogZGV2ZWwpLCBzdGVyZW8gOiAlZFxuIixfX0ZVTkNUSU9OX18sc3RlcmVvKTsKLQotCWlmICghc3RlcmVvKSB7Ci0JLyogQU0gTW9ubyAqLwotCQlzZXRfYXVkaW9fc3RhcnQoY29yZSwgU0VMX0EyKTsKLQkJc2V0X2F1ZGlvX3JlZ2lzdGVycyhjb3JlLCBuaWNhbV9sX21vbm8pOwotCXNldF9hdWRpb19maW5pc2goY29yZSwgRU5fQTJfRk9SQ0VfTU9OTzEpOwotCX0gZWxzZSB7Ci0JLyogTmljYW0gU3RlcmVvICovCi0JCXNldF9hdWRpb19zdGFydChjb3JlLCBTRUxfTklDQU0pOwotCQlzZXRfYXVkaW9fcmVnaXN0ZXJzKGNvcmUsIG5pY2FtX2wpOwotCXNldF9hdWRpb19maW5pc2goY29yZSwgMHgxOTI0KTsgLyogRklYTUUgKi8KLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIHNldF9hdWRpb19zdGFuZGFyZF9QQUxfSShzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlLCBpbnQgc3RlcmVvKQotewotICAgICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgcmxpc3QgcGFsX2lfZm1fbW9ub1tdID0gewotCXtBVURfRVJSTE9HUEVSSU9EX1IsICAgICAgIDB4MDAwMDAwNjR9LAotCXtBVURfRVJSSU5UUlBUVEhTSExEMV9SLCAgIDB4MDAwMDBmZmZ9LAotCXtBVURfRVJSSU5UUlBUVEhTSExEMl9SLCAgIDB4MDAwMDAwMWZ9LAotCXtBVURfRVJSSU5UUlBUVEhTSExEM19SLCAgIDB4MDAwMDAwMGZ9LAotCXtBVURfUERGX0REU19DTlNUX0JZVEUyLCAgIDB4MDZ9LAotCXtBVURfUERGX0REU19DTlNUX0JZVEUxLCAgIDB4ODJ9LAotCXtBVURfUERGX0REU19DTlNUX0JZVEUwLCAgIDB4MTJ9LAotCXtBVURfUUFNX01PREUsICAgICAgICAgICAgIDB4MDV9LAotCXtBVURfUEhBQ0NfRlJFUV84TVNCLCAgICAgIDB4M2F9LAotCXtBVURfUEhBQ0NfRlJFUV84TFNCLCAgICAgIDB4OTN9LAotCXtBVURfRE1EX1JBX0REUywgICAgICAgICAgIDB4MDAyYTRmMmZ9LAotCXtBVURfUExMX0lOVCwgICAgICAgICAgICAgIDB4MDAwMDAwMWV9LAotCXtBVURfUExMX0REUywgICAgICAgICAgICAgIDB4MDAwMDAwMDR9LAotCXtBVURfUExMX0ZSQUMsICAgICAgICAgICAgIDB4MDAwMGU1NDJ9LAotCXtBVURfUkFURV9BREoxLCAgICAgICAgICAgIDB4MDAwMDAxMDB9LAotCXtBVURfUkFURV9BREoyLCAgICAgICAgICAgIDB4MDAwMDAyMDB9LAotCXtBVURfUkFURV9BREozLCAgICAgICAgICAgIDB4MDAwMDAzMDB9LAotCXtBVURfUkFURV9BREo0LCAgICAgICAgICAgIDB4MDAwMDA0MDB9LAotCXtBVURfUkFURV9BREo1LCAgICAgICAgICAgIDB4MDAwMDA1MDB9LAotCXtBVURfVEhSX0ZSLCAgICAgICAgICAgICAgIDB4MDAwMDAwMDB9LAotCXtBVURfUElMT1RfQlFEXzFfSzAsICAgICAgIDB4MDAwMDc1NWJ9LAotCXtBVURfUElMT1RfQlFEXzFfSzEsICAgICAgIDB4MDA1NTEzNDB9LAotCXtBVURfUElMT1RfQlFEXzFfSzIsICAgICAgIDB4MDA2ZDMwYmV9LAotCXtBVURfUElMT1RfQlFEXzFfSzMsICAgICAgIDB4ZmZkMzk0YWZ9LAotCXtBVURfUElMT1RfQlFEXzFfSzQsICAgICAgIDB4MDA0MDAwMDB9LAotCXtBVURfUElMT1RfQlFEXzJfSzAsICAgICAgIDB4MDAwNDAwMDB9LAotCXtBVURfUElMT1RfQlFEXzJfSzEsICAgICAgIDB4MDAyYTQ4NDF9LAotCXtBVURfUElMT1RfQlFEXzJfSzIsICAgICAgIDB4MDA0MDAwMDB9LAotCXtBVURfUElMT1RfQlFEXzJfSzMsICAgICAgIDB4MDAwMDAwMDB9LAotCXtBVURfUElMT1RfQlFEXzJfSzQsICAgICAgIDB4MDAwMDAwMDB9LAotCXtBVURfTU9ERV9DSEdfVElNRVIsICAgICAgIDB4MDAwMDAwNjB9LAotCXtBVURfQUZFXzEyREJfRU4sICAgICAgICAgIDB4MDAwMDAwMDF9LAotCXtBQUdDX0hZU1QsICAgICAgICAgICAgICAgIDB4MDAwMDAwMGF9LAotCXtBVURfQ09SRElDX1NISUZUXzAsICAgICAgIDB4MDAwMDAwMDd9LAotCXtBVURfQ09SRElDX1NISUZUXzEsICAgICAgIDB4MDAwMDAwMDd9LAotCXtBVURfQzFfVVBfVEhSLCAgICAgICAgICAgIDB4MDAwMDcwMDB9LAotCXtBVURfQzFfTE9fVEhSLCAgICAgICAgICAgIDB4MDAwMDU0MDB9LAotCXtBVURfQzJfVVBfVEhSLCAgICAgICAgICAgIDB4MDAwMDU0MDB9LAotCXtBVURfQzJfTE9fVEhSLCAgICAgICAgICAgIDB4MDAwMDMwMDB9LAotCXtBVURfRENPQ18wX1NSQywgICAgICAgICAgIDB4MDAwMDAwMWF9LAotCXtBVURfRENPQzBfU0hJRlQsICAgICAgICAgIDB4MDAwMDAwMDB9LAotCXtBVURfRENPQ18wX1NISUZUX0lOMCwgICAgIDB4MDAwMDAwMGF9LAotCXtBVURfRENPQ18wX1NISUZUX0lOMSwgICAgIDB4MDAwMDAwMDh9LAotCXtBVURfRENPQ19QQVNTX0lOLCAgICAgICAgIDB4MDAwMDAwMDN9LAotCXtBVURfSUlSM18wX1NFTCwgICAgICAgICAgIDB4MDAwMDAwMjF9LAotCXtBVURfRE4yX0FGQywgICAgICAgICAgICAgIDB4MDAwMDAwMDJ9LAotCXtBVURfRENPQ18xX1NSQywgICAgICAgICAgIDB4MDAwMDAwMWJ9LAotCXtBVURfRENPQzFfU0hJRlQsICAgICAgICAgIDB4MDAwMDAwMDB9LAotCXtBVURfRENPQ18xX1NISUZUX0lOMCwgICAgIDB4MDAwMDAwMGF9LAotCXtBVURfRENPQ18xX1NISUZUX0lOMSwgICAgIDB4MDAwMDAwMDh9LAotCXtBVURfSUlSM18xX1NFTCwgICAgICAgICAgIDB4MDAwMDAwMjN9LAotCXtBVURfRE4wX0ZSRVEsICAgICAgICAgICAgIDB4MDAwMDM1YTN9LAotCXtBVURfRE4yX0ZSRVEsICAgICAgICAgICAgIDB4MDAwMDI5Yzd9LAotCXtBVURfQ1JEQzBfU1JDX1NFTCwgICAgICAgIDB4MDAwMDA1MTF9LAotCXtBVURfSUlSMV8wX1NFTCwgICAgICAgICAgIDB4MDAwMDAwMDF9LAotCXtBVURfSUlSMV8xX1NFTCwgICAgICAgICAgIDB4MDAwMDAwMDB9LAotCXtBVURfSUlSM18yX1NFTCwgICAgICAgICAgIDB4MDAwMDAwMDN9LAotCXtBVURfSUlSM18yX1NISUZULCAgICAgICAgIDB4MDAwMDAwMDB9LAotCXtBVURfSUlSM18wX1NFTCwgICAgICAgICAgIDB4MDAwMDAwMDJ9LAotCXtBVURfSUlSMl8wX1NFTCwgICAgICAgICAgIDB4MDAwMDAwMjF9LAotCXtBVURfSUlSMl8wX1NISUZULCAgICAgICAgIDB4MDAwMDAwMDJ9LAotCXtBVURfREVFTVBIMF9TUkNfU0VMLCAgICAgIDB4MDAwMDAwMGJ9LAotCXtBVURfREVFTVBIMV9TUkNfU0VMLCAgICAgIDB4MDAwMDAwMGJ9LAotCXtBVURfUE9MWVBIODBTQ0FMRUZBQywgICAgIDB4MDAwMDAwMDF9LAotCXtBVURfU1RBUlRfVElNRVIsICAgICAgICAgIDB4MDAwMDAwMDB9LAotCXsgLyogZW5kIG9mIGxpc3QgKi8gfSwKLSAgICAgICB9OwotCi0gICAgICAgc3RhdGljIGNvbnN0IHN0cnVjdCBybGlzdCBwYWxfaV9uaWNhbVtdID0gewotCXsgQVVEX1JBVEVfQURKMSwgICAgICAgICAgIDB4MDAwMDAwMTAgfSwKLQl7IEFVRF9SQVRFX0FESjIsICAgICAgICAgICAweDAwMDAwMDQwIH0sCi0JeyBBVURfUkFURV9BREozLCAgICAgICAgICAgMHgwMDAwMDEwMCB9LAotCXsgQVVEX1JBVEVfQURKNCwgICAgICAgICAgIDB4MDAwMDA0MDAgfSwKLQl7IEFVRF9SQVRFX0FESjUsICAgICAgICAgICAweDAwMDAxMDAwIH0sCi0JLy8gICAgIHsgQVVEX0RNRF9SQV9ERFMsICAgICAgICAgIDB4MDBjMGQ1Y2UgfSwKLQl7IEFVRF9ERUVNUEhHQUlOX1IsICAgICAgICAweDAwMDAyM2MyIH0sCi0JeyBBVURfREVFTVBITlVNRVIxX1IsICAgICAgMHgwMDAyYTdiYyB9LAotCXsgQVVEX0RFRU1QSE5VTUVSMl9SLCAgICAgIDB4MDAwMzAyM2UgfSwKLQl7IEFVRF9ERUVNUEhERU5PTTFfUiwgICAgICAweDAwMDBmM2QwIH0sCi0JeyBBVURfREVFTVBIREVOT00yX1IsICAgICAgMHgwMDAwMDAwMCB9LAotCXsgQVVEX0RFRU1QSERFTk9NMl9SLCAgICAgIDB4MDAwMDAwMDAgfSwKLQl7IEFVRF9FUlJMT0dQRVJJT0RfUiwgICAgICAweDAwMDAwZmZmIH0sCi0JeyBBVURfRVJSSU5UUlBUVEhTSExEMV9SLCAgMHgwMDAwMDNmZiB9LAotCXsgQVVEX0VSUklOVFJQVFRIU0hMRDJfUiwgIDB4MDAwMDAwZmYgfSwKLQl7IEFVRF9FUlJJTlRSUFRUSFNITEQzX1IsICAweDAwMDAwMDNmIH0sCi0JeyBBVURfUE9MWVBIODBTQ0FMRUZBQywgICAgMHgwMDAwMDAwMyB9LAotCXsgQVVEX1BERl9ERFNfQ05TVF9CWVRFMiwgIDB4MDYgfSwKLQl7IEFVRF9QREZfRERTX0NOU1RfQllURTEsICAweDgyIH0sCi0JeyBBVURfUERGX0REU19DTlNUX0JZVEUwLCAgMHgxNiB9LAotCXsgQVVEX1FBTV9NT0RFLCAgICAgICAgICAgIDB4MDUgfSwKLQl7IEFVRF9QREZfRERTX0NOU1RfQllURTAsICAweDEyIH0sCi0JeyBBVURfUEhBQ0NfRlJFUV84TVNCLCAgICAgMHgzYSB9LAotCXsgQVVEX1BIQUNDX0ZSRVFfOExTQiwgICAgIDB4OTMgfSwKLQl7IC8qIGVuZCBvZiBsaXN0ICovIH0sCiAJfTsKIAotCWRwcmludGsoIiVzIChzdGF0dXM6IGRldmVsKSwgc3RlcmVvIDogJWRcbiIsX19GVU5DVElPTl9fLHN0ZXJlbyk7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBybGlzdCBuaWNhbV9iZ2RraV9jb21tb25bXSA9IHsKKwkJe0FVRF9BRkVfMTJEQl9FTiwgMHgwMDAwMDAwMX0sCisJCXtBVURfUkFURV9BREoxLCAweDAwMDAwMDEwfSwKKwkJe0FVRF9SQVRFX0FESjIsIDB4MDAwMDAwNDB9LAorCQl7QVVEX1JBVEVfQURKMywgMHgwMDAwMDEwMH0sCisJCXtBVURfUkFURV9BREo0LCAweDAwMDAwNDAwfSwKKwkJe0FVRF9SQVRFX0FESjUsIDB4MDAwMDEwMDB9LAorCQkvL3sgQVVEX0RNRF9SQV9ERFMsICAgICAgICAweDAwYzBkNWNlIH0sCisJCXtBVURfRVJSTE9HUEVSSU9EX1IsIDB4MDAwMDBmZmZ9LAorCQl7QVVEX0VSUklOVFJQVFRIU0hMRDFfUiwgMHgwMDAwMDNmZn0sCisJCXtBVURfRVJSSU5UUlBUVEhTSExEMl9SLCAweDAwMDAwMGZmfSwKKwkJe0FVRF9FUlJJTlRSUFRUSFNITEQzX1IsIDB4MDAwMDAwM2Z9LAorCQl7QVVEX1BPTFlQSDgwU0NBTEVGQUMsIDB4MDAwMDAwMDN9LAorCQl7QVVEX0RFRU1QSEdBSU5fUiwgMHgwMDAwMjNjMn0sCisJCXtBVURfREVFTVBITlVNRVIxX1IsIDB4MDAwMmE3YmN9LAorCQl7QVVEX0RFRU1QSE5VTUVSMl9SLCAweDAwMDMwMjNlfSwKKwkJe0FVRF9ERUVNUEhERU5PTTFfUiwgMHgwMDAwZjNkMH0sCisJCXtBVURfREVFTVBIREVOT00yX1IsIDB4MDAwMDAwMDB9LAorCQl7QVVEX1BERl9ERFNfQ05TVF9CWVRFMiwgMHgwNn0sCisJCXtBVURfUERGX0REU19DTlNUX0JZVEUxLCAweDgyfSwKKwkJe0FVRF9RQU1fTU9ERSwgMHgwNX0sCisJCXsgLyogZW5kIG9mIGxpc3QgKi8gfSwKKwl9OwogCi0JaWYgKCFzdGVyZW8pIHsKLQkvKiBGTSBNb25vICovCi0Jc2V0X2F1ZGlvX3N0YXJ0KGNvcmUsIFNFTF9BMik7Ci0JCXNldF9hdWRpb19yZWdpc3RlcnMoY29yZSwgcGFsX2lfZm1fbW9ubyk7Ci0JCXNldF9hdWRpb19maW5pc2goY29yZSwgRU5fRE1UUlhfU1VNRElGRiB8IEVOX0EyX0ZPUkNFX01PTk8xKTsKLQl9IGVsc2UgewotCS8qIE5pY2FtIFN0ZXJlbyAqLwotCXNldF9hdWRpb19zdGFydChjb3JlLCBTRUxfTklDQU0pOwotCQlzZXRfYXVkaW9fcmVnaXN0ZXJzKGNvcmUsIHBhbF9pX25pY2FtKTsKLQkJc2V0X2F1ZGlvX2ZpbmlzaChjb3JlLCBFTl9ETVRSWF9MUiB8IEVOX0RNVFJYX0JZUEFTUyB8IEVOX05JQ0FNX0FVVE9fU1RFUkVPKTsKLQl9CisJc3RhdGljIGNvbnN0IHN0cnVjdCBybGlzdCBuaWNhbV9pW10gPSB7CisJCXtBVURfUERGX0REU19DTlNUX0JZVEUwLCAweDEyfSwKKwkJe0FVRF9QSEFDQ19GUkVRXzhNU0IsIDB4M2F9LAorCQl7QVVEX1BIQUNDX0ZSRVFfOExTQiwgMHg5M30sCisJCXsgLyogZW5kIG9mIGxpc3QgKi8gfSwKKwl9OworCisJc3RhdGljIGNvbnN0IHN0cnVjdCBybGlzdCBuaWNhbV9kZWZhdWx0W10gPSB7CisJCXtBVURfUERGX0REU19DTlNUX0JZVEUwLCAweDE2fSwKKwkJe0FVRF9QSEFDQ19GUkVRXzhNU0IsIDB4MzR9LAorCQl7QVVEX1BIQUNDX0ZSRVFfOExTQiwgMHg0Y30sCisJCXsgLyogZW5kIG9mIGxpc3QgKi8gfSwKKwl9OworCisJc2V0X2F1ZGlvX3N0YXJ0KGNvcmUsU0VMX05JQ0FNKTsKKwlzd2l0Y2ggKGNvcmUtPnR2YXVkaW8pIHsKKwljYXNlIFdXX0w6CisJCWRwcmludGsoIiVzIFNFQ0FNLUwgTklDQU0gKHN0YXR1czogZGV2ZWwpXG4iLCBfX0ZVTkNUSU9OX18pOworCQlzZXRfYXVkaW9fcmVnaXN0ZXJzKGNvcmUsIG5pY2FtX2wpOworCQlicmVhazsKKwljYXNlIFdXX0k6CisJCWRwcmludGsoIiVzIFBBTC1JIE5JQ0FNIChzdGF0dXM6IGRldmVsKVxuIiwgX19GVU5DVElPTl9fKTsKKwkJc2V0X2F1ZGlvX3JlZ2lzdGVycyhjb3JlLCBuaWNhbV9iZ2RraV9jb21tb24pOworCQlzZXRfYXVkaW9fcmVnaXN0ZXJzKGNvcmUsIG5pY2FtX2kpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkcHJpbnRrKCIlcyBQQUwtQkdESyBOSUNBTSAoc3RhdHVzOiB1bmtub3duKVxuIiwgX19GVU5DVElPTl9fKTsKKwkJc2V0X2F1ZGlvX3JlZ2lzdGVycyhjb3JlLCBuaWNhbV9iZ2RraV9jb21tb24pOworCQlzZXRfYXVkaW9fcmVnaXN0ZXJzKGNvcmUsIG5pY2FtX2RlZmF1bHQpOworCQlicmVhazsKKwl9OworCisJbW9kZSB8PSBFTl9ETVRSWF9MUiB8IEVOX0RNVFJYX0JZUEFTUzsKKwlzZXRfYXVkaW9fZmluaXNoKGNvcmUsIG1vZGUpOwogfQogCiBzdGF0aWMgdm9pZCBzZXRfYXVkaW9fc3RhbmRhcmRfQTIoc3RydWN0IGN4ODhfY29yZSAqY29yZSwgdTMyIG1vZGUpCiB7Ci0Jc3RhdGljIGNvbnN0IHN0cnVjdCBybGlzdCBhMl9jb21tb25bXSA9IHsKLQl7QVVEX0VSUkxPR1BFUklPRF9SLCAgICAgICAgICAgIDB4MDAwMDAwNjR9LAotCXtBVURfRVJSSU5UUlBUVEhTSExEMV9SLCAgICAgICAgMHgwMDAwMGZmZn0sCi0Je0FVRF9FUlJJTlRSUFRUSFNITEQyX1IsICAgICAgICAweDAwMDAwMDFmfSwKLQl7QVVEX0VSUklOVFJQVFRIU0hMRDNfUiwgICAgICAgIDB4MDAwMDAwMGZ9LAotCXtBVURfUERGX0REU19DTlNUX0JZVEUyLCAgICAgICAgMHgwNn0sCi0Je0FVRF9QREZfRERTX0NOU1RfQllURTEsICAgICAgICAweDgyfSwKLQl7QVVEX1BERl9ERFNfQ05TVF9CWVRFMCwgICAgICAgIDB4MTJ9LAotCXtBVURfUUFNX01PREUsICAgICAgICAgICAgICAgICAgMHgwNX0sCi0Je0FVRF9QSEFDQ19GUkVRXzhNU0IsICAgICAgICAgICAweDM0fSwKLQl7QVVEX1BIQUNDX0ZSRVFfOExTQiwgICAgICAgICAgIDB4NGN9LAotCXtBVURfUkFURV9BREoxLCAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMH0sCi0Je0FVRF9SQVRFX0FESjIsICAgICAgICAgICAgICAgICAweDAwMDAwMjAwfSwKLQl7QVVEX1JBVEVfQURKMywgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDB9LAotCXtBVURfUkFURV9BREo0LCAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMH0sCi0Je0FVRF9SQVRFX0FESjUsICAgICAgICAgICAgICAgICAweDAwMDAwNTAwfSwKLQl7QVVEX1RIUl9GUiwgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDB9LAotCXtBQUdDX0hZU1QsICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxYX0sCi0Je0FVRF9QSUxPVF9CUURfMV9LMCwgICAgICAgICAgICAweDAwMDA3NTVifSwKLQl7QVVEX1BJTE9UX0JRRF8xX0sxLCAgICAgICAgICAgIDB4MDA1NTEzNDB9LAotCXtBVURfUElMT1RfQlFEXzFfSzIsICAgICAgICAgICAgMHgwMDZkMzBiZX0sCi0Je0FVRF9QSUxPVF9CUURfMV9LMywgICAgICAgICAgICAweGZmZDM5NGFmfSwKLQl7QVVEX1BJTE9UX0JRRF8xX0s0LCAgICAgICAgICAgIDB4MDA0MDAwMDB9LAotCXtBVURfUElMT1RfQlFEXzJfSzAsICAgICAgICAgICAgMHgwMDA0MDAwMH0sCi0Je0FVRF9QSUxPVF9CUURfMl9LMSwgICAgICAgICAgICAweDAwMmE0ODQxfSwKLQl7QVVEX1BJTE9UX0JRRF8yX0syLCAgICAgICAgICAgIDB4MDA0MDAwMDB9LAotCXtBVURfUElMT1RfQlFEXzJfSzMsICAgICAgICAgICAgMHgwMDAwMDAwMH0sCi0Je0FVRF9QSUxPVF9CUURfMl9LNCwgICAgICAgICAgICAweDAwMDAwMDAwfSwKLQl7QVVEX01PREVfQ0hHX1RJTUVSLCAgICAgICAgICAgIDB4MDAwMDAwNDB9LAotCXtBVURfQUZFXzEyREJfRU4sICAgICAgICAgICAgICAgMHgwMDAwMDAwMX0sCi0Je0FVRF9DT1JESUNfU0hJRlRfMCwgICAgICAgICAgICAweDAwMDAwMDA3fSwKLQl7QVVEX0NPUkRJQ19TSElGVF8xLCAgICAgICAgICAgIDB4MDAwMDAwMDd9LAotCXtBVURfREVFTVBIMF9HMCwgICAgICAgICAgICAgICAgMHgwMDAwMDM4MH0sCi0Je0FVRF9ERUVNUEgxX0cwLCAgICAgICAgICAgICAgICAweDAwMDAwMzgwfSwKLQl7QVVEX0RDT0NfMF9TUkMsICAgICAgICAgICAgICAgIDB4MDAwMDAwMWF9LAotCXtBVURfRENPQzBfU0hJRlQsICAgICAgICAgICAgICAgMHgwMDAwMDAwMH0sCi0Je0FVRF9EQ09DXzBfU0hJRlRfSU4wLCAgICAgICAgICAweDAwMDAwMDBhfSwKLQl7QVVEX0RDT0NfMF9TSElGVF9JTjEsICAgICAgICAgIDB4MDAwMDAwMDh9LAotCXtBVURfRENPQ19QQVNTX0lOLCAgICAgICAgICAgICAgMHgwMDAwMDAwM30sCi0Je0FVRF9JSVIzXzBfU0VMLCAgICAgICAgICAgICAgICAweDAwMDAwMDIxfSwKLQl7QVVEX0ROMl9BRkMsICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDJ9LAotCXtBVURfRENPQ18xX1NSQywgICAgICAgICAgICAgICAgMHgwMDAwMDAxYn0sCi0Je0FVRF9EQ09DMV9TSElGVCwgICAgICAgICAgICAgICAweDAwMDAwMDAwfSwKLQl7QVVEX0RDT0NfMV9TSElGVF9JTjAsICAgICAgICAgIDB4MDAwMDAwMGF9LAotCXtBVURfRENPQ18xX1NISUZUX0lOMSwgICAgICAgICAgMHgwMDAwMDAwOH0sCi0Je0FVRF9JSVIzXzFfU0VMLCAgICAgICAgICAgICAgICAweDAwMDAwMDIzfSwKLQl7QVVEX1JEU0lfU0VMLCAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTd9LAotCXtBVURfUkRTSV9TSElGVCwgICAgICAgICAgICAgICAgMHgwMDAwMDAwMH0sCi0Je0FVRF9SRFNRX1NFTCwgICAgICAgICAgICAgICAgICAweDAwMDAwMDE3fSwKLQl7QVVEX1JEU1FfU0hJRlQsICAgICAgICAgICAgICAgIDB4MDAwMDAwMDB9LAotCXtBVURfUExMX0lOVCwgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxZX0sCi0Je0FVRF9QTExfRERTLCAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwfSwKLQl7QVVEX1BMTF9GUkFDLCAgICAgICAgICAgICAgICAgIDB4MDAwMGU1NDJ9LAotCXtBVURfUE9MWVBIODBTQ0FMRUZBQywgICAgICAgICAgMHgwMDAwMDAwMX0sCi0Je0FVRF9TVEFSVF9USU1FUiwgICAgICAgICAgICAgICAweDAwMDAwMDAwfSwKLQl7IC8qIGVuZCBvZiBsaXN0ICovIH0sCisJc3RhdGljIGNvbnN0IHN0cnVjdCBybGlzdCBhMl9iZ2RrX2NvbW1vbltdID0geworCQl7QVVEX0VSUkxPR1BFUklPRF9SLCAweDAwMDAwMDY0fSwKKwkJe0FVRF9FUlJJTlRSUFRUSFNITEQxX1IsIDB4MDAwMDBmZmZ9LAorCQl7QVVEX0VSUklOVFJQVFRIU0hMRDJfUiwgMHgwMDAwMDAxZn0sCisJCXtBVURfRVJSSU5UUlBUVEhTSExEM19SLCAweDAwMDAwMDBmfSwKKwkJe0FVRF9QREZfRERTX0NOU1RfQllURTIsIDB4MDZ9LAorCQl7QVVEX1BERl9ERFNfQ05TVF9CWVRFMSwgMHg4Mn0sCisJCXtBVURfUERGX0REU19DTlNUX0JZVEUwLCAweDEyfSwKKwkJe0FVRF9RQU1fTU9ERSwgMHgwNX0sCisJCXtBVURfUEhBQ0NfRlJFUV84TVNCLCAweDM0fSwKKwkJe0FVRF9QSEFDQ19GUkVRXzhMU0IsIDB4NGN9LAorCQl7QVVEX1JBVEVfQURKMSwgMHgwMDAwMDEwMH0sCisJCXtBVURfUkFURV9BREoyLCAweDAwMDAwMjAwfSwKKwkJe0FVRF9SQVRFX0FESjMsIDB4MDAwMDAzMDB9LAorCQl7QVVEX1JBVEVfQURKNCwgMHgwMDAwMDQwMH0sCisJCXtBVURfUkFURV9BREo1LCAweDAwMDAwNTAwfSwKKwkJe0FVRF9USFJfRlIsIDB4MDAwMDAwMDB9LAorCQl7QUFHQ19IWVNULCAweDAwMDAwMDFhfSwKKwkJe0FVRF9QSUxPVF9CUURfMV9LMCwgMHgwMDAwNzU1Yn0sCisJCXtBVURfUElMT1RfQlFEXzFfSzEsIDB4MDA1NTEzNDB9LAorCQl7QVVEX1BJTE9UX0JRRF8xX0syLCAweDAwNmQzMGJlfSwKKwkJe0FVRF9QSUxPVF9CUURfMV9LMywgMHhmZmQzOTRhZn0sCisJCXtBVURfUElMT1RfQlFEXzFfSzQsIDB4MDA0MDAwMDB9LAorCQl7QVVEX1BJTE9UX0JRRF8yX0swLCAweDAwMDQwMDAwfSwKKwkJe0FVRF9QSUxPVF9CUURfMl9LMSwgMHgwMDJhNDg0MX0sCisJCXtBVURfUElMT1RfQlFEXzJfSzIsIDB4MDA0MDAwMDB9LAorCQl7QVVEX1BJTE9UX0JRRF8yX0szLCAweDAwMDAwMDAwfSwKKwkJe0FVRF9QSUxPVF9CUURfMl9LNCwgMHgwMDAwMDAwMH0sCisJCXtBVURfTU9ERV9DSEdfVElNRVIsIDB4MDAwMDAwNDB9LAorCQl7QVVEX0FGRV8xMkRCX0VOLCAweDAwMDAwMDAxfSwKKwkJe0FVRF9DT1JESUNfU0hJRlRfMCwgMHgwMDAwMDAwN30sCisJCXtBVURfQ09SRElDX1NISUZUXzEsIDB4MDAwMDAwMDd9LAorCQl7QVVEX0RFRU1QSDBfRzAsIDB4MDAwMDAzODB9LAorCQl7QVVEX0RFRU1QSDFfRzAsIDB4MDAwMDAzODB9LAorCQl7QVVEX0RDT0NfMF9TUkMsIDB4MDAwMDAwMWF9LAorCQl7QVVEX0RDT0MwX1NISUZULCAweDAwMDAwMDAwfSwKKwkJe0FVRF9EQ09DXzBfU0hJRlRfSU4wLCAweDAwMDAwMDBhfSwKKwkJe0FVRF9EQ09DXzBfU0hJRlRfSU4xLCAweDAwMDAwMDA4fSwKKwkJe0FVRF9EQ09DX1BBU1NfSU4sIDB4MDAwMDAwMDN9LAorCQl7QVVEX0lJUjNfMF9TRUwsIDB4MDAwMDAwMjF9LAorCQl7QVVEX0ROMl9BRkMsIDB4MDAwMDAwMDJ9LAorCQl7QVVEX0RDT0NfMV9TUkMsIDB4MDAwMDAwMWJ9LAorCQl7QVVEX0RDT0MxX1NISUZULCAweDAwMDAwMDAwfSwKKwkJe0FVRF9EQ09DXzFfU0hJRlRfSU4wLCAweDAwMDAwMDBhfSwKKwkJe0FVRF9EQ09DXzFfU0hJRlRfSU4xLCAweDAwMDAwMDA4fSwKKwkJe0FVRF9JSVIzXzFfU0VMLCAweDAwMDAwMDIzfSwKKwkJe0FVRF9SRFNJX1NFTCwgMHgwMDAwMDAxN30sCisJCXtBVURfUkRTSV9TSElGVCwgMHgwMDAwMDAwMH0sCisJCXtBVURfUkRTUV9TRUwsIDB4MDAwMDAwMTd9LAorCQl7QVVEX1JEU1FfU0hJRlQsIDB4MDAwMDAwMDB9LAorCQl7QVVEX1BMTF9JTlQsIDB4MDAwMDAwMWV9LAorCQl7QVVEX1BMTF9ERFMsIDB4MDAwMDAwMDB9LAorCQl7QVVEX1BMTF9GUkFDLCAweDAwMDBlNTQyfSwKKwkJe0FVRF9QT0xZUEg4MFNDQUxFRkFDLCAweDAwMDAwMDAxfSwKKwkJe0FVRF9TVEFSVF9USU1FUiwgMHgwMDAwMDAwMH0sCisJCXsgLyogZW5kIG9mIGxpc3QgKi8gfSwKIAl9OwogCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBybGlzdCBhMl9iZ1tdID0gewotCXtBVURfRE1EX1JBX0REUywgICAgICAgICAgICAgICAgMHgwMDJhNGYyZn0sCi0Je0FVRF9DMV9VUF9USFIsICAgICAgICAgICAgICAgICAweDAwMDA3MDAwfSwKLQl7QVVEX0MxX0xPX1RIUiwgICAgICAgICAgICAgICAgIDB4MDAwMDU0MDB9LAotCXtBVURfQzJfVVBfVEhSLCAgICAgICAgICAgICAgICAgMHgwMDAwNTQwMH0sCi0Je0FVRF9DMl9MT19USFIsICAgICAgICAgICAgICAgICAweDAwMDAzMDAwfSwKKwkJe0FVRF9ETURfUkFfRERTLCAweDAwMmE0ZjJmfSwKKwkJe0FVRF9DMV9VUF9USFIsIDB4MDAwMDcwMDB9LAorCQl7QVVEX0MxX0xPX1RIUiwgMHgwMDAwNTQwMH0sCisJCXtBVURfQzJfVVBfVEhSLCAweDAwMDA1NDAwfSwKKwkJe0FVRF9DMl9MT19USFIsIDB4MDAwMDMwMDB9LAogCQl7IC8qIGVuZCBvZiBsaXN0ICovIH0sCiAJfTsKIAogCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgcmxpc3QgYTJfZGtbXSA9IHsKLQl7QVVEX0RNRF9SQV9ERFMsICAgICAgICAgICAgICAgIDB4MDAyYTRmMmZ9LAotCXtBVURfQzFfVVBfVEhSLCAgICAgICAgICAgICAgICAgMHgwMDAwNzAwMH0sCi0Je0FVRF9DMV9MT19USFIsICAgICAgICAgICAgICAgICAweDAwMDA1NDAwfSwKLQl7QVVEX0MyX1VQX1RIUiwgICAgICAgICAgICAgICAgIDB4MDAwMDU0MDB9LAotCXtBVURfQzJfTE9fVEhSLCAgICAgICAgICAgICAgICAgMHgwMDAwMzAwMH0sCi0Je0FVRF9ETjBfRlJFUSwgICAgICAgICAgICAgICAgICAweDAwMDAzYTFjfSwKLQl7QVVEX0ROMl9GUkVRLCAgICAgICAgICAgICAgICAgIDB4MDAwMGQyZTB9LAorCQl7QVVEX0RNRF9SQV9ERFMsIDB4MDAyYTRmMmZ9LAorCQl7QVVEX0MxX1VQX1RIUiwgMHgwMDAwNzAwMH0sCisJCXtBVURfQzFfTE9fVEhSLCAweDAwMDA1NDAwfSwKKwkJe0FVRF9DMl9VUF9USFIsIDB4MDAwMDU0MDB9LAorCQl7QVVEX0MyX0xPX1RIUiwgMHgwMDAwMzAwMH0sCisJCXtBVURfRE4wX0ZSRVEsIDB4MDAwMDNhMWN9LAorCQl7QVVEX0ROMl9GUkVRLCAweDAwMDBkMmUwfSwKIAkJeyAvKiBlbmQgb2YgbGlzdCAqLyB9LAogCX07Ci0vKiB1bmtub3duLCBwcm9iYWJseSBOVFNDLU0gKi8KLQlzdGF0aWMgY29uc3Qgc3RydWN0IHJsaXN0IGEyX21bXSA9IHsKLQl7QVVEX0RNRF9SQV9ERFMsICAgICAgICAgICAgICAgIDB4MDAyYTA0MjV9LAotCXtBVURfQzFfVVBfVEhSLCAgICAgICAgICAgICAgICAgMHgwMDAwM2MwMH0sCi0Je0FVRF9DMV9MT19USFIsICAgICAgICAgICAgICAgICAweDAwMDAzMDAwfSwKLQl7QVVEX0MyX1VQX1RIUiwgICAgICAgICAgICAgICAgIDB4MDAwMDYwMDB9LAotCXtBVURfQzJfTE9fVEhSLCAgICAgICAgICAgICAgICAgMHgwMDAwM2MwMH0sCi0Je0FVRF9ERUVNUEgwX0EwLCAgICAgICAgICAgICAgICAweDAwMDA3YTgwfSwKLQl7QVVEX0RFRU1QSDFfQTAsICAgICAgICAgICAgICAgIDB4MDAwMDdhODB9LAotCXtBVURfREVFTVBIMF9HMCwgICAgICAgICAgICAgICAgMHgwMDAwMTIwMH0sCi0Je0FVRF9ERUVNUEgxX0cwLCAgICAgICAgICAgICAgICAweDAwMDAxMjAwfSwKLQl7QVVEX0ROMF9GUkVRLCAgICAgICAgICAgICAgICAgIDB4MDAwMDI4M2J9LAotCXtBVURfRE4xX0ZSRVEsICAgICAgICAgICAgICAgICAgMHgwMDAwMzQxOH0sCi0Je0FVRF9ETjJfRlJFUSwgICAgICAgICAgICAgICAgICAweDAwMDAyOWM3fSwKLQl7QVVEX1BPTFkwX0REU19DT05TVEFOVCwgICAgICAgIDB4MDAwYTc1NDB9LAorCisJc3RhdGljIGNvbnN0IHN0cnVjdCBybGlzdCBhMV9pW10gPSB7CisJCXtBVURfRVJSTE9HUEVSSU9EX1IsIDB4MDAwMDAwNjR9LAorCQl7QVVEX0VSUklOVFJQVFRIU0hMRDFfUiwgMHgwMDAwMGZmZn0sCisJCXtBVURfRVJSSU5UUlBUVEhTSExEMl9SLCAweDAwMDAwMDFmfSwKKwkJe0FVRF9FUlJJTlRSUFRUSFNITEQzX1IsIDB4MDAwMDAwMGZ9LAorCQl7QVVEX1BERl9ERFNfQ05TVF9CWVRFMiwgMHgwNn0sCisJCXtBVURfUERGX0REU19DTlNUX0JZVEUxLCAweDgyfSwKKwkJe0FVRF9QREZfRERTX0NOU1RfQllURTAsIDB4MTJ9LAorCQl7QVVEX1FBTV9NT0RFLCAweDA1fSwKKwkJe0FVRF9QSEFDQ19GUkVRXzhNU0IsIDB4M2F9LAorCQl7QVVEX1BIQUNDX0ZSRVFfOExTQiwgMHg5M30sCisJCXtBVURfRE1EX1JBX0REUywgMHgwMDJhNGYyZn0sCisJCXtBVURfUExMX0lOVCwgMHgwMDAwMDAxZX0sCisJCXtBVURfUExMX0REUywgMHgwMDAwMDAwNH0sCisJCXtBVURfUExMX0ZSQUMsIDB4MDAwMGU1NDJ9LAorCQl7QVVEX1JBVEVfQURKMSwgMHgwMDAwMDEwMH0sCisJCXtBVURfUkFURV9BREoyLCAweDAwMDAwMjAwfSwKKwkJe0FVRF9SQVRFX0FESjMsIDB4MDAwMDAzMDB9LAorCQl7QVVEX1JBVEVfQURKNCwgMHgwMDAwMDQwMH0sCisJCXtBVURfUkFURV9BREo1LCAweDAwMDAwNTAwfSwKKwkJe0FVRF9USFJfRlIsIDB4MDAwMDAwMDB9LAorCQl7QVVEX1BJTE9UX0JRRF8xX0swLCAweDAwMDA3NTVifSwKKwkJe0FVRF9QSUxPVF9CUURfMV9LMSwgMHgwMDU1MTM0MH0sCisJCXtBVURfUElMT1RfQlFEXzFfSzIsIDB4MDA2ZDMwYmV9LAorCQl7QVVEX1BJTE9UX0JRRF8xX0szLCAweGZmZDM5NGFmfSwKKwkJe0FVRF9QSUxPVF9CUURfMV9LNCwgMHgwMDQwMDAwMH0sCisJCXtBVURfUElMT1RfQlFEXzJfSzAsIDB4MDAwNDAwMDB9LAorCQl7QVVEX1BJTE9UX0JRRF8yX0sxLCAweDAwMmE0ODQxfSwKKwkJe0FVRF9QSUxPVF9CUURfMl9LMiwgMHgwMDQwMDAwMH0sCisJCXtBVURfUElMT1RfQlFEXzJfSzMsIDB4MDAwMDAwMDB9LAorCQl7QVVEX1BJTE9UX0JRRF8yX0s0LCAweDAwMDAwMDAwfSwKKwkJe0FVRF9NT0RFX0NIR19USU1FUiwgMHgwMDAwMDA2MH0sCisJCXtBVURfQUZFXzEyREJfRU4sIDB4MDAwMDAwMDF9LAorCQl7QUFHQ19IWVNULCAweDAwMDAwMDBhfSwKKwkJe0FVRF9DT1JESUNfU0hJRlRfMCwgMHgwMDAwMDAwN30sCisJCXtBVURfQ09SRElDX1NISUZUXzEsIDB4MDAwMDAwMDd9LAorCQl7QVVEX0MxX1VQX1RIUiwgMHgwMDAwNzAwMH0sCisJCXtBVURfQzFfTE9fVEhSLCAweDAwMDA1NDAwfSwKKwkJe0FVRF9DMl9VUF9USFIsIDB4MDAwMDU0MDB9LAorCQl7QVVEX0MyX0xPX1RIUiwgMHgwMDAwMzAwMH0sCisJCXtBVURfRENPQ18wX1NSQywgMHgwMDAwMDAxYX0sCisJCXtBVURfRENPQzBfU0hJRlQsIDB4MDAwMDAwMDB9LAorCQl7QVVEX0RDT0NfMF9TSElGVF9JTjAsIDB4MDAwMDAwMGF9LAorCQl7QVVEX0RDT0NfMF9TSElGVF9JTjEsIDB4MDAwMDAwMDh9LAorCQl7QVVEX0RDT0NfUEFTU19JTiwgMHgwMDAwMDAwM30sCisJCXtBVURfSUlSM18wX1NFTCwgMHgwMDAwMDAyMX0sCisJCXtBVURfRE4yX0FGQywgMHgwMDAwMDAwMn0sCisJCXtBVURfRENPQ18xX1NSQywgMHgwMDAwMDAxYn0sCisJCXtBVURfRENPQzFfU0hJRlQsIDB4MDAwMDAwMDB9LAorCQl7QVVEX0RDT0NfMV9TSElGVF9JTjAsIDB4MDAwMDAwMGF9LAorCQl7QVVEX0RDT0NfMV9TSElGVF9JTjEsIDB4MDAwMDAwMDh9LAorCQl7QVVEX0lJUjNfMV9TRUwsIDB4MDAwMDAwMjN9LAorCQl7QVVEX0ROMF9GUkVRLCAweDAwMDAzNWEzfSwKKwkJe0FVRF9ETjJfRlJFUSwgMHgwMDAwMjljN30sCisJCXtBVURfQ1JEQzBfU1JDX1NFTCwgMHgwMDAwMDUxMX0sCisJCXtBVURfSUlSMV8wX1NFTCwgMHgwMDAwMDAwMX0sCisJCXtBVURfSUlSMV8xX1NFTCwgMHgwMDAwMDAwMH0sCisJCXtBVURfSUlSM18yX1NFTCwgMHgwMDAwMDAwM30sCisJCXtBVURfSUlSM18yX1NISUZULCAweDAwMDAwMDAwfSwKKwkJe0FVRF9JSVIzXzBfU0VMLCAweDAwMDAwMDAyfSwKKwkJe0FVRF9JSVIyXzBfU0VMLCAweDAwMDAwMDIxfSwKKwkJe0FVRF9JSVIyXzBfU0hJRlQsIDB4MDAwMDAwMDJ9LAorCQl7QVVEX0RFRU1QSDBfU1JDX1NFTCwgMHgwMDAwMDAwYn0sCisJCXtBVURfREVFTVBIMV9TUkNfU0VMLCAweDAwMDAwMDBifSwKKwkJe0FVRF9QT0xZUEg4MFNDQUxFRkFDLCAweDAwMDAwMDAxfSwKKwkJe0FVRF9TVEFSVF9USU1FUiwgMHgwMDAwMDAwMH0sCisJCXsgLyogZW5kIG9mIGxpc3QgKi8gfSwKKwl9OworCisJc3RhdGljIGNvbnN0IHN0cnVjdCBybGlzdCBhbV9sW10gPSB7CisJCXtBVURfRVJSTE9HUEVSSU9EX1IsIDB4MDAwMDAwNjR9LAorCQl7QVVEX0VSUklOVFJQVFRIU0hMRDFfUiwgMHgwMDAwMEZGRn0sCisJCXtBVURfRVJSSU5UUlBUVEhTSExEMl9SLCAweDAwMDAwMDFGfSwKKwkJe0FVRF9FUlJJTlRSUFRUSFNITEQzX1IsIDB4MDAwMDAwMEZ9LAorCQl7QVVEX1BERl9ERFNfQ05TVF9CWVRFMiwgMHg0OH0sCisJCXtBVURfUERGX0REU19DTlNUX0JZVEUxLCAweDNEfSwKKwkJe0FVRF9RQU1fTU9ERSwgMHgwMH0sCisJCXtBVURfUERGX0REU19DTlNUX0JZVEUwLCAweGY1fSwKKwkJe0FVRF9QSEFDQ19GUkVRXzhNU0IsIDB4M2F9LAorCQl7QVVEX1BIQUNDX0ZSRVFfOExTQiwgMHg0YX0sCisJCXtBVURfREVFTVBIR0FJTl9SLCAweDAwMDA2NjgwfSwKKwkJe0FVRF9ERUVNUEhOVU1FUjFfUiwgMHgwMDAzNTNERX0sCisJCXtBVURfREVFTVBITlVNRVIyX1IsIDB4MDAwMDAxQjF9LAorCQl7QVVEX0RFRU1QSERFTk9NMV9SLCAweDAwMDBGM0QwfSwKKwkJe0FVRF9ERUVNUEhERU5PTTJfUiwgMHgwMDAwMDAwMH0sCisJCXtBVURfRk1fTU9ERV9FTkFCTEUsIDB4MDAwMDAwMDd9LAorCQl7QVVEX1BPTFlQSDgwU0NBTEVGQUMsIDB4MDAwMDAwMDN9LAorCQl7QVVEX0FGRV8xMkRCX0VOLCAweDAwMDAwMDAxfSwKKwkJe0FBR0NfR0FJTiwgMHgwMDAwMDAwMH0sCisJCXtBQUdDX0hZU1QsIDB4MDAwMDAwMTh9LAorCQl7QUFHQ19ERUYsIDB4MDAwMDAwMjB9LAorCQl7QVVEX0ROMF9GUkVRLCAweDAwMDAwMDAwfSwKKwkJe0FVRF9QT0xZMF9ERFNfQ09OU1RBTlQsIDB4MDAwRTREQjJ9LAorCQl7QVVEX0RDT0NfMF9TUkMsIDB4MDAwMDAwMjF9LAorCQl7QVVEX0lJUjFfMF9TRUwsIDB4MDAwMDAwMDB9LAorCQl7QVVEX0lJUjFfMF9TSElGVCwgMHgwMDAwMDAwN30sCisJCXtBVURfSUlSMV8xX1NFTCwgMHgwMDAwMDAwMn0sCisJCXtBVURfSUlSMV8xX1NISUZULCAweDAwMDAwMDAwfSwKKwkJe0FVRF9EQ09DXzFfU1JDLCAweDAwMDAwMDAzfSwKKwkJe0FVRF9EQ09DMV9TSElGVCwgMHgwMDAwMDAwMH0sCisJCXtBVURfRENPQ19QQVNTX0lOLCAweDAwMDAwMDAwfSwKKwkJe0FVRF9JSVIxXzJfU0VMLCAweDAwMDAwMDIzfSwKKwkJe0FVRF9JSVIxXzJfU0hJRlQsIDB4MDAwMDAwMDB9LAorCQl7QVVEX0lJUjFfM19TRUwsIDB4MDAwMDAwMDR9LAorCQl7QVVEX0lJUjFfM19TSElGVCwgMHgwMDAwMDAwN30sCisJCXtBVURfSUlSMV80X1NFTCwgMHgwMDAwMDAwNX0sCisJCXtBVURfSUlSMV80X1NISUZULCAweDAwMDAwMDA3fSwKKwkJe0FVRF9JSVIzXzBfU0VMLCAweDAwMDAwMDA3fSwKKwkJe0FVRF9JSVIzXzBfU0hJRlQsIDB4MDAwMDAwMDB9LAorCQl7QVVEX0RFRU1QSDBfU1JDX1NFTCwgMHgwMDAwMDAxMX0sCisJCXtBVURfREVFTVBIMF9TSElGVCwgMHgwMDAwMDAwMH0sCisJCXtBVURfREVFTVBIMF9HMCwgMHgwMDAwNzAwMH0sCisJCXtBVURfREVFTVBIMF9BMCwgMHgwMDAwMDAwMH0sCisJCXtBVURfREVFTVBIMF9CMCwgMHgwMDAwMDAwMH0sCisJCXtBVURfREVFTVBIMF9BMSwgMHgwMDAwMDAwMH0sCisJCXtBVURfREVFTVBIMF9CMSwgMHgwMDAwMDAwMH0sCisJCXtBVURfREVFTVBIMV9TUkNfU0VMLCAweDAwMDAwMDExfSwKKwkJe0FVRF9ERUVNUEgxX1NISUZULCAweDAwMDAwMDAwfSwKKwkJe0FVRF9ERUVNUEgxX0cwLCAweDAwMDA3MDAwfSwKKwkJe0FVRF9ERUVNUEgxX0EwLCAweDAwMDAwMDAwfSwKKwkJe0FVRF9ERUVNUEgxX0IwLCAweDAwMDAwMDAwfSwKKwkJe0FVRF9ERUVNUEgxX0ExLCAweDAwMDAwMDAwfSwKKwkJe0FVRF9ERUVNUEgxX0IxLCAweDAwMDAwMDAwfSwKKwkJe0FVRF9PVVQwX1NFTCwgMHgwMDAwMDAzRn0sCisJCXtBVURfT1VUMV9TRUwsIDB4MDAwMDAwM0Z9LAorCQl7QVVEX0RNRF9SQV9ERFMsIDB4MDBGNUMyODV9LAorCQl7QVVEX1BMTF9JTlQsIDB4MDAwMDAwMUV9LAorCQl7QVVEX1BMTF9ERFMsIDB4MDAwMDAwMDB9LAorCQl7QVVEX1BMTF9GUkFDLCAweDAwMDBFNTQyfSwKKwkJe0FVRF9SQVRFX0FESjEsIDB4MDAwMDAxMDB9LAorCQl7QVVEX1JBVEVfQURKMiwgMHgwMDAwMDIwMH0sCisJCXtBVURfUkFURV9BREozLCAweDAwMDAwMzAwfSwKKwkJe0FVRF9SQVRFX0FESjQsIDB4MDAwMDA0MDB9LAorCQl7QVVEX1JBVEVfQURKNSwgMHgwMDAwMDUwMH0sCisJCXtBVURfUkFURV9USFJFU19ETUQsIDB4MDAwMDAwQzB9LAogCQl7IC8qIGVuZCBvZiBsaXN0ICovIH0sCiAJfTsKIAogCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgcmxpc3QgYTJfZGVlbXBoNTBbXSA9IHsKLQl7QVVEX0RFRU1QSDBfRzAsICAgICAgICAgICAgICAgIDB4MDAwMDAzODB9LAotCXtBVURfREVFTVBIMV9HMCwgICAgICAgICAgICAgICAgMHgwMDAwMDM4MH0sCi0Je0FVRF9ERUVNUEhHQUlOX1IsICAgICAgICAgICAgICAweDAwMDAxMWUxfSwKLQl7QVVEX0RFRU1QSE5VTUVSMV9SLCAgICAgICAgICAgIDB4MDAwMmE3YmN9LAotCXtBVURfREVFTVBITlVNRVIyX1IsICAgICAgICAgICAgMHgwMDAzMDIzY30sCi0JeyAvKiBlbmQgb2YgbGlzdCAqLyB9LAotCX07Ci0KLQlzdGF0aWMgY29uc3Qgc3RydWN0IHJsaXN0IGEyX2RlZW1waDc1W10gPSB7Ci0Je0FVRF9ERUVNUEgwX0cwLCAgICAgICAgICAgICAgICAweDAwMDAwNDgwfSwKLQl7QVVEX0RFRU1QSDFfRzAsICAgICAgICAgICAgICAgIDB4MDAwMDA0ODB9LAotCXtBVURfREVFTVBIR0FJTl9SLCAgICAgICAgICAgICAgMHgwMDAwOTAwMH0sCi0Je0FVRF9ERUVNUEhOVU1FUjFfUiwgICAgICAgICAgICAweDAwMDM1M2RlfSwKLQl7QVVEX0RFRU1QSE5VTUVSMl9SLCAgICAgICAgICAgIDB4MDAwMDAxYjF9LAorCQl7QVVEX0RFRU1QSDBfRzAsIDB4MDAwMDAzODB9LAorCQl7QVVEX0RFRU1QSDFfRzAsIDB4MDAwMDAzODB9LAorCQl7QVVEX0RFRU1QSEdBSU5fUiwgMHgwMDAwMTFlMX0sCisJCXtBVURfREVFTVBITlVNRVIxX1IsIDB4MDAwMmE3YmN9LAorCQl7QVVEX0RFRU1QSE5VTUVSMl9SLCAweDAwMDMwMjNjfSwKIAkJeyAvKiBlbmQgb2YgbGlzdCAqLyB9LAogCX07CiAKIAlzZXRfYXVkaW9fc3RhcnQoY29yZSwgU0VMX0EyKTsKLQlzZXRfYXVkaW9fcmVnaXN0ZXJzKGNvcmUsIGEyX2NvbW1vbik7CiAJc3dpdGNoIChjb3JlLT50dmF1ZGlvKSB7Ci0JY2FzZSBXV19BMl9CRzoKLQkJZHByaW50aygiJXMgUEFMLUJHIEEyIChzdGF0dXM6IGtub3duLWdvb2QpXG4iLF9fRlVOQ1RJT05fXyk7Ci0Jc2V0X2F1ZGlvX3JlZ2lzdGVycyhjb3JlLCBhMl9iZyk7Ci0Jc2V0X2F1ZGlvX3JlZ2lzdGVycyhjb3JlLCBhMl9kZWVtcGg1MCk7CisJY2FzZSBXV19CRzoKKwkJZHByaW50aygiJXMgUEFMLUJHIEExLzIgKHN0YXR1czoga25vd24tZ29vZClcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXNldF9hdWRpb19yZWdpc3RlcnMoY29yZSwgYTJfYmdka19jb21tb24pOworCQlzZXRfYXVkaW9fcmVnaXN0ZXJzKGNvcmUsIGEyX2JnKTsKKwkJc2V0X2F1ZGlvX3JlZ2lzdGVycyhjb3JlLCBhMl9kZWVtcGg1MCk7CiAJCWJyZWFrOwotCWNhc2UgV1dfQTJfREs6Ci0JCWRwcmludGsoIiVzIFBBTC1ESyBBMiAoc3RhdHVzOiBrbm93bi1nb29kKVxuIixfX0ZVTkNUSU9OX18pOwotCXNldF9hdWRpb19yZWdpc3RlcnMoY29yZSwgYTJfZGspOwotCXNldF9hdWRpb19yZWdpc3RlcnMoY29yZSwgYTJfZGVlbXBoNTApOworCWNhc2UgV1dfREs6CisJCWRwcmludGsoIiVzIFBBTC1ESyBBMS8yIChzdGF0dXM6IGtub3duLWdvb2QpXG4iLCBfX0ZVTkNUSU9OX18pOworCQlzZXRfYXVkaW9fcmVnaXN0ZXJzKGNvcmUsIGEyX2JnZGtfY29tbW9uKTsKKwkJc2V0X2F1ZGlvX3JlZ2lzdGVycyhjb3JlLCBhMl9kayk7CisJCXNldF9hdWRpb19yZWdpc3RlcnMoY29yZSwgYTJfZGVlbXBoNTApOwogCQlicmVhazsKLQljYXNlIFdXX0EyX006Ci0JCWRwcmludGsoIiVzIE5UU0MtTSBBMiAoc3RhdHVzOiB1bmtub3duKVxuIixfX0ZVTkNUSU9OX18pOwotCXNldF9hdWRpb19yZWdpc3RlcnMoY29yZSwgYTJfbSk7Ci0Jc2V0X2F1ZGlvX3JlZ2lzdGVycyhjb3JlLCBhMl9kZWVtcGg3NSk7CisJY2FzZSBXV19JOgorCQlkcHJpbnRrKCIlcyBQQUwtSSBBMSAoc3RhdHVzOiBrbm93bi1nb29kKVxuIiwgX19GVU5DVElPTl9fKTsKKwkJc2V0X2F1ZGlvX3JlZ2lzdGVycyhjb3JlLCBhMV9pKTsKKwkJc2V0X2F1ZGlvX3JlZ2lzdGVycyhjb3JlLCBhMl9kZWVtcGg1MCk7CisJCWJyZWFrOworCWNhc2UgV1dfTDoKKwkJZHByaW50aygiJXMgQU0tTCAoc3RhdHVzOiBkZXZlbClcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXNldF9hdWRpb19yZWdpc3RlcnMoY29yZSwgYW1fbCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRwcmludGsoIiVzIFdhcm5pbmc6IHdyb25nIHZhbHVlXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CiAJCWJyZWFrOwogCX07CiAKQEAgLTY1Niw3MSArNjMzLDcxIEBACiAKIAkJeyAvKiBlbmQgb2YgbGlzdCAqLyB9LAogCX07Ci0JZHByaW50aygiJXMgKHN0YXR1czogdW5rbm93bilcbiIsX19GVU5DVElPTl9fKTsKKwlkcHJpbnRrKCIlcyAoc3RhdHVzOiB1bmtub3duKVxuIiwgX19GVU5DVElPTl9fKTsKIAogCXNldF9hdWRpb19zdGFydChjb3JlLCBTRUxfRUlBSik7CiAJc2V0X2F1ZGlvX3JlZ2lzdGVycyhjb3JlLCBlaWFqKTsKIAlzZXRfYXVkaW9fZmluaXNoKGNvcmUsIEVOX0VJQUpfQVVUT19TVEVSRU8pOwogfQogCi1zdGF0aWMgdm9pZCBzZXRfYXVkaW9fc3RhbmRhcmRfRk0oc3RydWN0IGN4ODhfY29yZSAqY29yZSwgZW51bSBjeDg4X2RlZW1waF90eXBlIGRlZW1waCkKK3N0YXRpYyB2b2lkIHNldF9hdWRpb19zdGFuZGFyZF9GTShzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlLAorCQkJCSAgZW51bSBjeDg4X2RlZW1waF90eXBlIGRlZW1waCkKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IHJsaXN0IGZtX2RlZW1waF81MFtdID0gewotCQl7IEFVRF9ERUVNUEgwX0cwLAkweDBDNDUgfSwKLQkJeyBBVURfREVFTVBIMF9BMCwJMHg2MjYyIH0sCi0JCXsgQVVEX0RFRU1QSDBfQjAsCTB4MUMyOSB9LAotCQl7IEFVRF9ERUVNUEgwX0ExLAkweDNGQzY2fSwKLQkJeyBBVURfREVFTVBIMF9CMSwJMHgzOTlBIH0sCisJCXtBVURfREVFTVBIMF9HMCwgMHgwQzQ1fSwKKwkJe0FVRF9ERUVNUEgwX0EwLCAweDYyNjJ9LAorCQl7QVVEX0RFRU1QSDBfQjAsIDB4MUMyOX0sCisJCXtBVURfREVFTVBIMF9BMSwgMHgzRkM2Nn0sCisJCXtBVURfREVFTVBIMF9CMSwgMHgzOTlBfSwKIAotCQl7IEFVRF9ERUVNUEgxX0cwLAkweDBEODAgfSwKLQkJeyBBVURfREVFTVBIMV9BMCwJMHg2MjYyIH0sCi0JCXsgQVVEX0RFRU1QSDFfQjAsCTB4MUMyOSB9LAotCQl7IEFVRF9ERUVNUEgxX0ExLAkweDNGQzY2fSwKLQkJeyBBVURfREVFTVBIMV9CMSwJMHgzOTlBfSwKKwkJe0FVRF9ERUVNUEgxX0cwLCAweDBEODB9LAorCQl7QVVEX0RFRU1QSDFfQTAsIDB4NjI2Mn0sCisJCXtBVURfREVFTVBIMV9CMCwgMHgxQzI5fSwKKwkJe0FVRF9ERUVNUEgxX0ExLCAweDNGQzY2fSwKKwkJe0FVRF9ERUVNUEgxX0IxLCAweDM5OUF9LAogCi0JCXsgQVVEX1BPTFlQSDgwU0NBTEVGQUMsCTB4MDAwM30sCisJCXtBVURfUE9MWVBIODBTQ0FMRUZBQywgMHgwMDAzfSwKIAkJeyAvKiBlbmQgb2YgbGlzdCAqLyB9LAogCX07CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBybGlzdCBmbV9kZWVtcGhfNzVbXSA9IHsKLQkJeyBBVURfREVFTVBIMF9HMCwJMHgwOTFCIH0sCi0JCXsgQVVEX0RFRU1QSDBfQTAsCTB4NkI2OCB9LAotCQl7IEFVRF9ERUVNUEgwX0IwLAkweDExRUMgfSwKLQkJeyBBVURfREVFTVBIMF9BMSwJMHgzRkM2Nn0sCi0JCXsgQVVEX0RFRU1QSDBfQjEsCTB4Mzk5QSB9LAorCQl7QVVEX0RFRU1QSDBfRzAsIDB4MDkxQn0sCisJCXtBVURfREVFTVBIMF9BMCwgMHg2QjY4fSwKKwkJe0FVRF9ERUVNUEgwX0IwLCAweDExRUN9LAorCQl7QVVEX0RFRU1QSDBfQTEsIDB4M0ZDNjZ9LAorCQl7QVVEX0RFRU1QSDBfQjEsIDB4Mzk5QX0sCiAKLQkJeyBBVURfREVFTVBIMV9HMCwJMHgwQUEwIH0sCi0JCXsgQVVEX0RFRU1QSDFfQTAsCTB4NkI2OCB9LAotCQl7IEFVRF9ERUVNUEgxX0IwLAkweDExRUMgfSwKLQkJeyBBVURfREVFTVBIMV9BMSwJMHgzRkM2Nn0sCi0JCXsgQVVEX0RFRU1QSDFfQjEsCTB4Mzk5QX0sCisJCXtBVURfREVFTVBIMV9HMCwgMHgwQUEwfSwKKwkJe0FVRF9ERUVNUEgxX0EwLCAweDZCNjh9LAorCQl7QVVEX0RFRU1QSDFfQjAsIDB4MTFFQ30sCisJCXtBVURfREVFTVBIMV9BMSwgMHgzRkM2Nn0sCisJCXtBVURfREVFTVBIMV9CMSwgMHgzOTlBfSwKIAotCQl7IEFVRF9QT0xZUEg4MFNDQUxFRkFDLAkweDAwMDN9LAorCQl7QVVEX1BPTFlQSDgwU0NBTEVGQUMsIDB4MDAwM30sCiAJCXsgLyogZW5kIG9mIGxpc3QgKi8gfSwKIAl9OwogCiAJLyogSXQgaXMgZW5vdWdoIHRvIGxlYXZlIGRlZmF1bHQgdmFsdWVzPyAqLwogCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgcmxpc3QgZm1fbm9fZGVlbXBoW10gPSB7CiAKLQkJeyBBVURfUE9MWVBIODBTQ0FMRUZBQywJMHgwMDAzfSwKKwkJe0FVRF9QT0xZUEg4MFNDQUxFRkFDLCAweDAwMDN9LAogCQl7IC8qIGVuZCBvZiBsaXN0ICovIH0sCiAJfTsKIAotCWRwcmludGsoIiVzIChzdGF0dXM6IHVua25vd24pXG4iLF9fRlVOQ1RJT05fXyk7CisJZHByaW50aygiJXMgKHN0YXR1czogdW5rbm93bilcbiIsIF9fRlVOQ1RJT05fXyk7CiAJc2V0X2F1ZGlvX3N0YXJ0KGNvcmUsIFNFTF9GTVJBRElPKTsKIAotCXN3aXRjaCAoZGVlbXBoKQotCXsKLQkJY2FzZSBGTV9OT19ERUVNUEg6Ci0JCQlzZXRfYXVkaW9fcmVnaXN0ZXJzKGNvcmUsIGZtX25vX2RlZW1waCk7Ci0JCQlicmVhazsKKwlzd2l0Y2ggKGRlZW1waCkgeworCWNhc2UgRk1fTk9fREVFTVBIOgorCQlzZXRfYXVkaW9fcmVnaXN0ZXJzKGNvcmUsIGZtX25vX2RlZW1waCk7CisJCWJyZWFrOwogCi0JCWNhc2UgRk1fREVFTVBIXzUwOgotCQkJc2V0X2F1ZGlvX3JlZ2lzdGVycyhjb3JlLCBmbV9kZWVtcGhfNTApOwotCQkJYnJlYWs7CisJY2FzZSBGTV9ERUVNUEhfNTA6CisJCXNldF9hdWRpb19yZWdpc3RlcnMoY29yZSwgZm1fZGVlbXBoXzUwKTsKKwkJYnJlYWs7CiAKLQkJY2FzZSBGTV9ERUVNUEhfNzU6Ci0JCQlzZXRfYXVkaW9fcmVnaXN0ZXJzKGNvcmUsIGZtX2RlZW1waF83NSk7Ci0JCQlicmVhazsKKwljYXNlIEZNX0RFRU1QSF83NToKKwkJc2V0X2F1ZGlvX3JlZ2lzdGVycyhjb3JlLCBmbV9kZWVtcGhfNzUpOworCQlicmVhazsKIAl9CiAKIAlzZXRfYXVkaW9fZmluaXNoKGNvcmUsIEVOX0ZNUkFESU9fQVVUT19TVEVSRU8pOwpAQCAtNzI4LDM2ICs3MDUsNjQgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAoraW50IGN4ODhfZGV0ZWN0X25pY2FtKHN0cnVjdCBjeDg4X2NvcmUgKmNvcmUpCit7CisJaW50IGksIGogPSAwOworCisJZHByaW50aygic3RhcnQgbmljYW0gYXV0b2RldGVjdC5cbiIpOworCisJZm9yIChpID0gMDsgaSA8IDY7IGkrKykgeworCQkvKiBpZiBiaXQxPTEgdGhlbiBuaWNhbSBpcyBkZXRlY3RlZCAqLworCQlqICs9ICgoY3hfcmVhZChBVURfTklDQU1fU1RBVFVTMikgJiAweDAyKSA+PiAxKTsKKworCQkvKiAzeCBkZXRlY3RlZDogYWJzb2x1dGx5IHN1cmUgbm93ICovCisJCWlmIChqID09IDMpIHsKKwkJCWRwcmludGsoIm5pY2FtIGlzIGRldGVjdGVkLlxuIik7CisJCQlyZXR1cm4gMTsKKwkJfQorCisJCS8qIHdhaXQgYSBsaXR0bGUgYml0IGZvciBuZXh0IHJlYWRpbmcgc3RhdHVzICovCisJCW1zbGVlcCgxMCk7CisJfQorCisJZHByaW50aygibmljYW0gaXMgbm90IGRldGVjdGVkLlxuIik7CisJcmV0dXJuIDA7Cit9CisKIHZvaWQgY3g4OF9zZXRfdHZhdWRpbyhzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlKQogewogCXN3aXRjaCAoY29yZS0+dHZhdWRpbykgewogCWNhc2UgV1dfQlRTQzoKIAkJc2V0X2F1ZGlvX3N0YW5kYXJkX0JUU0MoY29yZSwgMCwgRU5fQlRTQ19BVVRPX1NURVJFTyk7CiAJCWJyZWFrOwotCWNhc2UgV1dfTklDQU1fQkdES0w6Ci0JCXNldF9hdWRpb19zdGFuZGFyZF9OSUNBTV9MKGNvcmUsMCk7Ci0JCWJyZWFrOwotCWNhc2UgV1dfTklDQU1fSToKLQkJc2V0X2F1ZGlvX3N0YW5kYXJkX1BBTF9JKGNvcmUsMCk7Ci0JCWJyZWFrOwotCWNhc2UgV1dfQTJfQkc6Ci0JY2FzZSBXV19BMl9ESzoKLQljYXNlIFdXX0EyX006Ci0Jc2V0X2F1ZGlvX3N0YW5kYXJkX0EyKGNvcmUsIEVOX0EyX0ZPUkNFX01PTk8xKTsKKwljYXNlIFdXX0JHOgorCWNhc2UgV1dfREs6CisJY2FzZSBXV19JOgorCWNhc2UgV1dfTDoKKwkJLyogcHJlcGFyZSBhbGwgZHNwIHJlZ2lzdGVycyAqLworCQlzZXRfYXVkaW9fc3RhbmRhcmRfQTIoY29yZSwgRU5fQTJfRk9SQ0VfTU9OTzEpOworCisJCS8qIHNldCBuaWNhbSBtb2RlIC0gb3RoZXJ3aXNlCisJCSAgIEFVRF9OSUNBTV9TVEFUVVMyIGNvbnRhaW5zIHdyb25nIHZhbHVlcyAqLworCQlzZXRfYXVkaW9fc3RhbmRhcmRfTklDQU0oY29yZSwgRU5fTklDQU1fQVVUT19TVEVSRU8pOworCQlpZiAoMCA9PSBjeDg4X2RldGVjdF9uaWNhbShjb3JlKSkgeworCQkJLyogZmFsbCBiYWNrIHRvIGZtIC8gYW0gbW9ubyAqLworCQkJc2V0X2F1ZGlvX3N0YW5kYXJkX0EyKGNvcmUsIEVOX0EyX0ZPUkNFX01PTk8xKTsKKwkJCWNvcmUtPnVzZV9uaWNhbSA9IDA7CisJCX0gZWxzZSB7CisJCQljb3JlLT51c2VfbmljYW0gPSAxOworCQl9CiAJCWJyZWFrOwogCWNhc2UgV1dfRUlBSjoKIAkJc2V0X2F1ZGlvX3N0YW5kYXJkX0VJQUooY29yZSk7CiAJCWJyZWFrOwogCWNhc2UgV1dfRk06Ci0JCXNldF9hdWRpb19zdGFuZGFyZF9GTShjb3JlLEZNX05PX0RFRU1QSCk7Ci0JCWJyZWFrOwotCWNhc2UgV1dfU1lTVEVNX0xfQU06Ci0JCXNldF9hdWRpb19zdGFuZGFyZF9OSUNBTV9MKGNvcmUsIDEpOworCQlzZXRfYXVkaW9fc3RhbmRhcmRfRk0oY29yZSwgRk1fTk9fREVFTVBIKTsKIAkJYnJlYWs7CiAJY2FzZSBXV19OT05FOgogCWRlZmF1bHQ6CiAJCXByaW50aygiJXMvMDogdW5rbm93biB0diBhdWRpbyBtb2RlIFslZF1cbiIsCi0JCWNvcmUtPm5hbWUsIGNvcmUtPnR2YXVkaW8pOworCQkgICAgICAgY29yZS0+bmFtZSwgY29yZS0+dHZhdWRpbyk7CiAJCWJyZWFrOwogCX0KIAlyZXR1cm47CkBAIC03NjYsMjQgKzc3MSwxNiBAQAogdm9pZCBjeDg4X25ld3N0YXRpb24oc3RydWN0IGN4ODhfY29yZSAqY29yZSkKIHsKIAljb3JlLT5hdWRpb21vZGVfbWFudWFsID0gVU5TRVQ7Ci0KLQlzd2l0Y2ggKGNvcmUtPnR2YXVkaW8pIHsKLQljYXNlIFdXX1NZU1RFTV9MX0FNOgotCQkvKiB0cnkgbmljYW0gLi4uICovCi0JCWNvcmUtPmF1ZGlvbW9kZV9jdXJyZW50ID0gVjRMMl9UVU5FUl9NT0RFX1NURVJFTzsKLQkJc2V0X2F1ZGlvX3N0YW5kYXJkX05JQ0FNX0woY29yZSwgMSk7Ci0JCWJyZWFrOwotCX0KIH0KIAogdm9pZCBjeDg4X2dldF9zdGVyZW8oc3RydWN0IGN4ODhfY29yZSAqY29yZSwgc3RydWN0IHY0bDJfdHVuZXIgKnQpCiB7Ci0Jc3RhdGljIGNoYXIgKm1bXSA9IHsic3RlcmVvIiwgImR1YWwgbW9ubyIsICJtb25vIiwgInNhcCJ9OwotCXN0YXRpYyBjaGFyICpwW10gPSB7Im5vIHBpbG90IiwgInBpbG90IGMxIiwgInBpbG90IGMyIiwgIj8ifTsKLQl1MzIgcmVnLG1vZGUscGlsb3Q7CisJc3RhdGljIGNoYXIgKm1bXSA9IHsgInN0ZXJlbyIsICJkdWFsIG1vbm8iLCAibW9ubyIsICJzYXAiIH07CisJc3RhdGljIGNoYXIgKnBbXSA9IHsgIm5vIHBpbG90IiwgInBpbG90IGMxIiwgInBpbG90IGMyIiwgIj8iIH07CisJdTMyIHJlZywgbW9kZSwgcGlsb3Q7CiAKLQlyZWcgICA9IGN4X3JlYWQoQVVEX1NUQVRVUyk7Ci0JbW9kZSAgPSByZWcgJiAweDAzOworCXJlZyA9IGN4X3JlYWQoQVVEX1NUQVRVUyk7CisJbW9kZSA9IHJlZyAmIDB4MDM7CiAJcGlsb3QgPSAocmVnID4+IDIpICYgMHgwMzsKIAogCWlmIChjb3JlLT5hc3RhdCAhPSByZWcpCkBAIC04MDAsMTQgKzc5NywxMyBAQAogCiAjIGlmIDAKIAl0LT5jYXBhYmlsaXR5ID0gVjRMMl9UVU5FUl9DQVBfU1RFUkVPIHwgVjRMMl9UVU5FUl9DQVBfU0FQIHwKLQkJVjRMMl9UVU5FUl9DQVBfTEFORzEgfCBWNEwyX1RVTkVSX0NBUF9MQU5HMjsKKwkgICAgVjRMMl9UVU5FUl9DQVBfTEFORzEgfCBWNEwyX1RVTkVSX0NBUF9MQU5HMjsKIAl0LT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfTU9OTzsKLQl0LT5hdWRtb2RlICAgID0gVjRMMl9UVU5FUl9NT0RFX01PTk87CisJdC0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9NT05POwogCiAJc3dpdGNoIChjb3JlLT50dmF1ZGlvKSB7CiAJY2FzZSBXV19CVFNDOgotCQl0LT5jYXBhYmlsaXR5ID0gVjRMMl9UVU5FUl9DQVBfU1RFUkVPIHwKLQkJCVY0TDJfVFVORVJfQ0FQX1NBUDsKKwkJdC0+Y2FwYWJpbGl0eSA9IFY0TDJfVFVORVJfQ0FQX1NURVJFTyB8IFY0TDJfVFVORVJfQ0FQX1NBUDsKIAkJdC0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX1NURVJFTzsKIAkJaWYgKDEgPT0gcGlsb3QpIHsKIAkJCS8qIFNBUCAqLwpAQCAtODE5LDEzICs4MTUsMTUgQEAKIAljYXNlIFdXX0EyX006CiAJCWlmICgxID09IHBpbG90KSB7CiAJCQkvKiBzdGVyZW8gKi8KLQkJCXQtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05PIHwgVjRMMl9UVU5FUl9TVUJfU1RFUkVPOworCQkJdC0+cnhzdWJjaGFucyA9CisJCQkgICAgVjRMMl9UVU5FUl9TVUJfTU9OTyB8IFY0TDJfVFVORVJfU1VCX1NURVJFTzsKIAkJCWlmICgwID09IG1vZGUpCiAJCQkJdC0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9TVEVSRU87CiAJCX0KIAkJaWYgKDIgPT0gcGlsb3QpIHsKIAkJCS8qIGR1YWwgbGFuZ3VhZ2UgLS0gRklYTUUgKi8KLQkJCXQtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9MQU5HMSB8IFY0TDJfVFVORVJfU1VCX0xBTkcyOworCQkJdC0+cnhzdWJjaGFucyA9CisJCQkgICAgVjRMMl9UVU5FUl9TVUJfTEFORzEgfCBWNEwyX1RVTkVSX1NVQl9MQU5HMjsKIAkJCXQtPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfTEFORzE7CiAJCX0KIAkJYnJlYWs7CkBAIC04NDAsNyArODM4LDcgQEAKIAkJCXQtPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOwogCQkJdC0+cnhzdWJjaGFucyB8PSBWNEwyX1RVTkVSX1NVQl9TVEVSRU87CiAJCX0KLQkJYnJlYWsgOworCQlicmVhazsKIAlkZWZhdWx0OgogCQkvKiBub3RoaW5nICovCiAJCWJyZWFrOwpAQCAtODUxLDcgKzg0OSw3IEBACiAKIHZvaWQgY3g4OF9zZXRfc3RlcmVvKHN0cnVjdCBjeDg4X2NvcmUgKmNvcmUsIHUzMiBtb2RlLCBpbnQgbWFudWFsKQogewotCXUzMiBjdGwgID0gVU5TRVQ7CisJdTMyIGN0bCA9IFVOU0VUOwogCXUzMiBtYXNrID0gVU5TRVQ7CiAKIAlpZiAobWFudWFsKSB7CkBAIC04NzksNjggKzg3Nyw1OCBAQAogCQkJYnJlYWs7CiAJCX0KIAkJYnJlYWs7Ci0JY2FzZSBXV19BMl9CRzoKLQljYXNlIFdXX0EyX0RLOgotCWNhc2UgV1dfQTJfTToKLQkJc3dpdGNoIChtb2RlKSB7Ci0JCWNhc2UgVjRMMl9UVU5FUl9NT0RFX01PTk86Ci0JCWNhc2UgVjRMMl9UVU5FUl9NT0RFX0xBTkcxOgotCQlzZXRfYXVkaW9fc3RhbmRhcmRfQTIoY29yZSwgRU5fQTJfRk9SQ0VfTU9OTzEpOwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9UVU5FUl9NT0RFX0xBTkcyOgotCQlzZXRfYXVkaW9fc3RhbmRhcmRfQTIoY29yZSwgRU5fQTJfRk9SQ0VfTU9OTzIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9UVU5FUl9NT0RFX1NURVJFTzoKLQkJc2V0X2F1ZGlvX3N0YW5kYXJkX0EyKGNvcmUsIEVOX0EyX0ZPUkNFX1NURVJFTyk7Ci0JCQlicmVhazsKLQkJfQotCQlicmVhazsKLQljYXNlIFdXX05JQ0FNX0JHREtMOgotCQlzd2l0Y2ggKG1vZGUpIHsKLQkJY2FzZSBWNEwyX1RVTkVSX01PREVfTU9OTzoKLQkJCWN0bCAgPSBFTl9OSUNBTV9GT1JDRV9NT05PMTsKLQkJCW1hc2sgPSAweDNmOwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9UVU5FUl9NT0RFX0xBTkcxOgotCQkJY3RsICA9IEVOX05JQ0FNX0FVVE9fTU9OTzI7Ci0JCQltYXNrID0gMHgzZjsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfVFVORVJfTU9ERV9TVEVSRU86Ci0JCQljdGwgID0gRU5fTklDQU1fRk9SQ0VfU1RFUkVPIHwgRU5fRE1UUlhfTFI7Ci0JCQltYXNrID0gMHg5M2Y7Ci0JCQlicmVhazsKLQkJfQotCQlicmVhazsKLQljYXNlIFdXX1NZU1RFTV9MX0FNOgotCQlzd2l0Y2ggKG1vZGUpIHsKLQkJY2FzZSBWNEwyX1RVTkVSX01PREVfTU9OTzoKLQkJY2FzZSBWNEwyX1RVTkVSX01PREVfTEFORzE6ICAvKiBGSVhNRSAqLwotCQkJc2V0X2F1ZGlvX3N0YW5kYXJkX05JQ0FNX0woY29yZSwgMCk7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOgotCQkJc2V0X2F1ZGlvX3N0YW5kYXJkX05JQ0FNX0woY29yZSwgMSk7Ci0JCQlicmVhazsKLQkJfQotCQlicmVhazsKLQljYXNlIFdXX05JQ0FNX0k6Ci0JCXN3aXRjaCAobW9kZSkgewotCQljYXNlIFY0TDJfVFVORVJfTU9ERV9NT05POgotCQljYXNlIFY0TDJfVFVORVJfTU9ERV9MQU5HMToKLQkJCXNldF9hdWRpb19zdGFuZGFyZF9QQUxfSShjb3JlLCAwKTsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfVFVORVJfTU9ERV9TVEVSRU86Ci0JCQlzZXRfYXVkaW9fc3RhbmRhcmRfUEFMX0koY29yZSwgMSk7Ci0JCQlicmVhazsKKwljYXNlIFdXX0JHOgorCWNhc2UgV1dfREs6CisJY2FzZSBXV19JOgorCWNhc2UgV1dfTDoKKwkJaWYgKDEgPT0gY29yZS0+dXNlX25pY2FtKSB7CisJCQlzd2l0Y2ggKG1vZGUpIHsKKwkJCWNhc2UgVjRMMl9UVU5FUl9NT0RFX01PTk86CisJCQljYXNlIFY0TDJfVFVORVJfTU9ERV9MQU5HMToKKwkJCQlzZXRfYXVkaW9fc3RhbmRhcmRfTklDQU0oY29yZSwKKwkJCQkJCQkgRU5fTklDQU1fRk9SQ0VfTU9OTzEpOworCQkJCWJyZWFrOworCQkJY2FzZSBWNEwyX1RVTkVSX01PREVfTEFORzI6CisJCQkJc2V0X2F1ZGlvX3N0YW5kYXJkX05JQ0FNKGNvcmUsCisJCQkJCQkJIEVOX05JQ0FNX0ZPUkNFX01PTk8yKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgVjRMMl9UVU5FUl9NT0RFX1NURVJFTzoKKwkJCQlzZXRfYXVkaW9fc3RhbmRhcmRfTklDQU0oY29yZSwKKwkJCQkJCQkgRU5fTklDQU1fRk9SQ0VfU1RFUkVPKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmICgoY29yZS0+dHZhdWRpbyA9PSBXV19JKSB8fCAoY29yZS0+dHZhdWRpbyA9PSBXV19MKSkgeworCQkJCS8qIGZhbGwgYmFjayB0byBmbSAvIGFtIG1vbm8gKi8KKwkJCQlzZXRfYXVkaW9fc3RhbmRhcmRfQTIoY29yZSwgRU5fQTJfRk9SQ0VfTU9OTzEpOworCQkJfSBlbHNlIHsKKwkJCQkvKiBUT0RPOiBBZGQgQTIgYXV0b2RlY3Rpb24gKi8KKwkJCQlzd2l0Y2ggKG1vZGUpIHsKKwkJCQljYXNlIFY0TDJfVFVORVJfTU9ERV9NT05POgorCQkJCWNhc2UgVjRMMl9UVU5FUl9NT0RFX0xBTkcxOgorCQkJCQlzZXRfYXVkaW9fc3RhbmRhcmRfQTIoY29yZSwKKwkJCQkJCQkgICAgICBFTl9BMl9GT1JDRV9NT05PMSk7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgVjRMMl9UVU5FUl9NT0RFX0xBTkcyOgorCQkJCQlzZXRfYXVkaW9fc3RhbmRhcmRfQTIoY29yZSwKKwkJCQkJCQkgICAgICBFTl9BMl9GT1JDRV9NT05PMik7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgVjRMMl9UVU5FUl9NT0RFX1NURVJFTzoKKwkJCQkJc2V0X2F1ZGlvX3N0YW5kYXJkX0EyKGNvcmUsCisJCQkJCQkJICAgICAgRU5fQTJfRk9SQ0VfU1RFUkVPKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQogCQl9CiAJCWJyZWFrOwogCWNhc2UgV1dfRk06CiAJCXN3aXRjaCAobW9kZSkgewogCQljYXNlIFY0TDJfVFVORVJfTU9ERV9NT05POgotCQkJY3RsICA9IEVOX0ZNUkFESU9fRk9SQ0VfTU9OTzsKKwkJCWN0bCA9IEVOX0ZNUkFESU9fRk9SQ0VfTU9OTzsKIAkJCW1hc2sgPSAweDNmOwogCQkJYnJlYWs7CiAJCWNhc2UgVjRMMl9UVU5FUl9NT0RFX1NURVJFTzoKLQkJCWN0bCAgPSBFTl9GTVJBRElPX0FVVE9fU1RFUkVPOworCQkJY3RsID0gRU5fRk1SQURJT19BVVRPX1NURVJFTzsKIAkJCW1hc2sgPSAweDNmOwogCQkJYnJlYWs7CiAJCX0KQEAgLTk3MCw4ICs5NTgsOCBAQAogCQkJYnJlYWs7CiAKIAkJLyoganVzdCBtb25pdG9yIHRoZSBhdWRpbyBzdGF0dXMgZm9yIG5vdyAuLi4gKi8KLQkJbWVtc2V0KCZ0LDAsc2l6ZW9mKHQpKTsKLQkJY3g4OF9nZXRfc3RlcmVvKGNvcmUsJnQpOworCQltZW1zZXQoJnQsIDAsIHNpemVvZih0KSk7CisJCWN4ODhfZ2V0X3N0ZXJlbyhjb3JlLCAmdCk7CiAKIAkJaWYgKFVOU0VUICE9IGNvcmUtPmF1ZGlvbW9kZV9tYW51YWwpCiAJCQkvKiBtYW51YWxseSBzZXQsIGRvbid0IGRvIGFueXRoaW5nLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXZpZGVvLmMKaW5kZXggM2RiYzA3NC4uMjRhNDhmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC12aWRlby5jCkBAIC0zNCw2ICszNCw5IEBACiAKICNpbmNsdWRlICJjeDg4LmgiCiAKKy8qIEluY2x1ZGUgVjRMMSBzcGVjaWZpYyBmdW5jdGlvbnMuIFNob3VsZCBiZSByZW1vdmVkIHNvb24gKi8KKyNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgorCiBNT0RVTEVfREVTQ1JJUFRJT04oInY0bDIgZHJpdmVyIG1vZHVsZSBmb3IgY3gyMzg4eCBiYXNlZCBUViBjYXJkcyIpOwogTU9EVUxFX0FVVEhPUigiR2VyZCBLbm9yciA8a3JheGVsQGJ5dGVzZXgub3JnPiBbU3VTRSBMYWJzXSIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpAQCAtMTAwLDcgKzEwMyw3IEBACiAJCS5pZCAgICAgICAgPSBWNEwyX1NURF9QQUxfSSwKIAkJLmN4aWZvcm1hdCA9IFZpZGVvRm9ybWF0UEFMLAogCQkuY3hvZm9ybWF0ID0gMHgxODFmMDAwOCwKLSAgICAgICAgfSx7CisJfSx7CiAJCS5uYW1lICAgICAgPSAiUEFMLU0iLAogCQkuaWQgICAgICAgID0gVjRMMl9TVERfUEFMX00sCiAJCS5jeGlmb3JtYXQgPSBWaWRlb0Zvcm1hdFBBTE0sCkBAIC00NzAsNyArNDczLDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkICppdGVtOwogCiAJaWYgKCFsaXN0X2VtcHR5KCZxLT5hY3RpdmUpKSB7Ci0JICAgICAgICBidWYgPSBsaXN0X2VudHJ5KHEtPmFjdGl2ZS5uZXh0LCBzdHJ1Y3QgY3g4OF9idWZmZXIsIHZiLnF1ZXVlKTsKKwkJYnVmID0gbGlzdF9lbnRyeShxLT5hY3RpdmUubmV4dCwgc3RydWN0IGN4ODhfYnVmZmVyLCB2Yi5xdWV1ZSk7CiAJCWRwcmludGsoMiwicmVzdGFydF9xdWV1ZSBbJXAvJWRdOiByZXN0YXJ0IGRtYVxuIiwKIAkJCWJ1ZiwgYnVmLT52Yi5pKTsKIAkJc3RhcnRfdmlkZW9fZG1hKGRldiwgcSwgYnVmKTsKQEAgLTQ4Niw3ICs0ODksNyBAQAogCWZvciAoOzspIHsKIAkJaWYgKGxpc3RfZW1wdHkoJnEtPnF1ZXVlZCkpCiAJCQlyZXR1cm4gMDsKLQkgICAgICAgIGJ1ZiA9IGxpc3RfZW50cnkocS0+cXVldWVkLm5leHQsIHN0cnVjdCBjeDg4X2J1ZmZlciwgdmIucXVldWUpOworCQlidWYgPSBsaXN0X2VudHJ5KHEtPnF1ZXVlZC5uZXh0LCBzdHJ1Y3QgY3g4OF9idWZmZXIsIHZiLnF1ZXVlKTsKIAkJaWYgKE5VTEwgPT0gcHJldikgewogCQkJbGlzdF9kZWwoJmJ1Zi0+dmIucXVldWUpOwogCQkJbGlzdF9hZGRfdGFpbCgmYnVmLT52Yi5xdWV1ZSwmcS0+YWN0aXZlKTsKQEAgLTc4MywxMSArNzg2LDExIEBACiAJCWN4ODhfY2FsbF9pMmNfY2xpZW50cyhjb3JlLEFVRENfU0VUX1JBRElPLE5VTEwpOwogCX0KIAotICAgICAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHNzaXplX3QKLXZpZGVvX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgKmRhdGEsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQordmlkZW9fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmRhdGEsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewogCXN0cnVjdCBjeDg4MDBfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCkBAIC05MjIsNyArOTI1LDcgQEAKIHsKIAkvKiBzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlID0gZGV2LT5jb3JlOyAqLwogCXN0cnVjdCBjeDg4X2N0cmwgKmMgPSBOVUxMOwotICAgICAgICB1MzIgdl9zYXRfdmFsdWU7CisJdTMyIHZfc2F0X3ZhbHVlOwogCXUzMiB2YWx1ZTsKIAlpbnQgaTsKIApAQCAtMTE4Nyw3ICsxMTkwLDcgQEAKIAkJc3RydWN0IHY0bDJfZm9ybWF0ICpmID0gYXJnOwogCQlyZXR1cm4gY3g4ODAwX3RyeV9mbXQoZGV2LGZoLGYpOwogCX0KLQorI2lmZGVmIEhBVkVfVjRMMQogCS8qIC0tLSBzdHJlYW1pbmcgY2FwdHVyZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAJY2FzZSBWSURJT0NHTUJVRjoKIAl7CkBAIC0xMjEzLDYgKzEyMTYsNyBAQAogCQl9CiAJCXJldHVybiAwOwogCX0KKyNlbmRpZgogCWNhc2UgVklESU9DX1JFUUJVRlM6CiAJCXJldHVybiB2aWRlb2J1Zl9yZXFidWZzKGdldF9xdWV1ZShmaCksIGFyZyk7CiAKQEAgLTEyNDQsNyArMTI0OCw2IEBACiAJCXJlc19mcmVlKGRldixmaCxyZXMpOwogCQlyZXR1cm4gMDsKIAl9Ci0KIAlkZWZhdWx0OgogCQlyZXR1cm4gY3g4OF9kb19pb2N0bCggaW5vZGUsIGZpbGUsIGZoLT5yYWRpbywgY29yZSwgY21kLCBhcmcsIHZpZGVvX2RvX2lvY3RsICk7CiAJfQpAQCAtMTI1MiwxNSArMTI1NSwxMyBAQAogfQogCiBpbnQgY3g4OF9kb19pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IHJhZGlvLAotICAgICAgICAgICAgICAgICAgc3RydWN0IGN4ODhfY29yZSAqY29yZSwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnLCB2NGwyX2tpb2N0bCBkcml2ZXJfaW9jdGwpCisJCSAgc3RydWN0IGN4ODhfY29yZSAqY29yZSwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnLCB2NGwyX2tpb2N0bCBkcml2ZXJfaW9jdGwpCiB7CiAJaW50IGVycjsKIAorCWRwcmludGsoIDEsICJDT1JFIElPQ1RMOiAweCV4XG4iLCBjbWQgKTsKIAlpZiAodmlkZW9fZGVidWcgPiAxKQogCQljeDg4X3ByaW50X2lvY3RsKGNvcmUtPm5hbWUsY21kKTsKLQlwcmludGsoIEtFUk5fSU5GTyAiQ09SRSBJT0NUTDogMHgleFxuIiwgY21kICk7Ci0JY3g4OF9wcmludF9pb2N0bChjb3JlLT5uYW1lLGNtZCk7Ci0JZHByaW50ayggMSwgIkNPUkUgSU9DVEw6IDB4JXhcbiIsIGNtZCApOwogCiAJc3dpdGNoIChjbWQpIHsKIAkvKiAtLS0tLS0tLS0tIHR2IG5vcm1zIC0tLS0tLS0tLS0gKi8KQEAgLTE0MDEsNyArMTQwMiw3IEBACiAKIAkJY3g4OF9nZXRfc3RlcmVvKGNvcmUgLHQpOwogCQlyZWcgPSBjeF9yZWFkKE1PX0RFVklDRV9TVEFUVVMpOwotICAgICAgICAgICAgICAgIHQtPnNpZ25hbCA9IChyZWcgJiAoMTw8NSkpID8gMHhmZmZmIDogMHgwMDAwOworCQl0LT5zaWduYWwgPSAocmVnICYgKDE8PDUpKSA/IDB4ZmZmZiA6IDB4MDAwMDsKIAkJcmV0dXJuIDA7CiAJfQogCWNhc2UgVklESU9DX1NfVFVORVI6CkBAIC0xNDg4LDcgKzE0ODksNyBAQAogCQlzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICpjYXAgPSBhcmc7CiAKIAkJbWVtc2V0KGNhcCwwLHNpemVvZigqY2FwKSk7Ci0gICAgICAgICAgICAgICAgc3RyY3B5KGNhcC0+ZHJpdmVyLCAiY3g4ODAwIik7CisJCXN0cmNweShjYXAtPmRyaXZlciwgImN4ODgwMCIpOwogCQlzdHJsY3B5KGNhcC0+Y2FyZCwgY3g4OF9ib2FyZHNbY29yZS0+Ym9hcmRdLm5hbWUsCiAJCQlzaXplb2YoY2FwLT5jYXJkKSk7CiAJCXNwcmludGYoY2FwLT5idXNfaW5mbywiUENJOiVzIiwgcGNpX25hbWUoZGV2LT5wY2kpKTsKQEAgLTE1MDUsNiArMTUwNiw3IEBACiAKIAkJbWVtc2V0KHQsMCxzaXplb2YoKnQpKTsKIAkJc3RyY3B5KHQtPm5hbWUsICJSYWRpbyIpOworCQl0LT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKIAogCQljeDg4X2NhbGxfaTJjX2NsaWVudHMoY29yZSxWSURJT0NfR19UVU5FUix0KTsKIAkJcmV0dXJuIDA7CkBAIC0xNTM5LDYgKzE1NDEsNyBAQAogCQkqaWQgPSAwOwogCQlyZXR1cm4gMDsKIAl9CisjaWZkZWYgSEFWRV9WNEwxCiAJY2FzZSBWSURJT0NTVFVORVI6CiAJewogCQlzdHJ1Y3QgdmlkZW9fdHVuZXIgKnYgPSBhcmc7CkBAIC0xNTQ5LDYgKzE1NTIsNyBAQAogCQljeDg4X2NhbGxfaTJjX2NsaWVudHMoY29yZSxWSURJT0NTVFVORVIsdik7CiAJCXJldHVybiAwOwogCX0KKyNlbmRpZgogCWNhc2UgVklESU9DX1NfVFVORVI6CiAJewogCQlzdHJ1Y3QgdjRsMl90dW5lciAqdCA9IGFyZzsKQEAgLTE4MjksOCArMTgzMyw4IEBACiAKIAkvKiBwcmludCBwY2kgaW5mbyAqLwogCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBjaV9kZXYsIFBDSV9DTEFTU19SRVZJU0lPTiwgJmRldi0+cGNpX3Jldik7Ci0gICAgICAgIHBjaV9yZWFkX2NvbmZpZ19ieXRlKHBjaV9kZXYsIFBDSV9MQVRFTkNZX1RJTUVSLCAgJmRldi0+cGNpX2xhdCk7Ci0gICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzLzA6IGZvdW5kIGF0ICVzLCByZXY6ICVkLCBpcnE6ICVkLCAiCisJcGNpX3JlYWRfY29uZmlnX2J5dGUocGNpX2RldiwgUENJX0xBVEVOQ1lfVElNRVIsICAmZGV2LT5wY2lfbGF0KTsKKwlwcmludGsoS0VSTl9JTkZPICIlcy8wOiBmb3VuZCBhdCAlcywgcmV2OiAlZCwgaXJxOiAlZCwgIgogCSAgICAgICAibGF0ZW5jeTogJWQsIG1taW86IDB4JWx4XG4iLCBjb3JlLT5uYW1lLAogCSAgICAgICBwY2lfbmFtZShwY2lfZGV2KSwgZGV2LT5wY2lfcmV2LCBwY2lfZGV2LT5pcnEsCiAJICAgICAgIGRldi0+cGNpX2xhdCxwY2lfcmVzb3VyY2Vfc3RhcnQocGNpX2RldiwwKSk7CkBAIC0xOTQ2LDcgKzE5NTAsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2RldmV4aXQgY3g4ODAwX2ZpbmlkZXYoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYpCiB7Ci0gICAgICAgIHN0cnVjdCBjeDg4MDBfZGV2ICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGNpX2Rldik7CisJc3RydWN0IGN4ODgwMF9kZXYgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwY2lfZGV2KTsKIAlzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlID0gZGV2LT5jb3JlOwogCiAJLyogc3RvcCB0aHJlYWQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC5oCmluZGV4IGY0OGRkNDMuLmIxOWQzYTllIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LmgKQEAgLTIyLDcgKzIyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMtYWxnby1iaXQuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogI2luY2x1ZGUgPGxpbnV4L2tkZXZfdC5oPgogCiAjaW5jbHVkZSA8bWVkaWEvdHVuZXIuaD4KQEAgLTE0OCw3ICsxNDgsNyBAQAogI2RlZmluZSBDWDg4X0JPQVJEX1BJWEVMVklFVyAgICAgICAgICAgICAgICAzCiAjZGVmaW5lIENYODhfQk9BUkRfQVRJX1dPTkRFUl9QUk8gICAgICAgICAgIDQKICNkZWZpbmUgQ1g4OF9CT0FSRF9XSU5GQVNUMjAwMFhQX0VYUEVSVCAgICAgNQotI2RlZmluZSBDWDg4X0JPQVJEX0FWRVJUVl8zMDMgICAgICAgICAgICAgICA2CisjZGVmaW5lIENYODhfQk9BUkRfQVZFUlRWX1NUVURJT18zMDMgICAgICAgIDYKICNkZWZpbmUgQ1g4OF9CT0FSRF9NU0lfVFZBTllXSEVSRV9NQVNURVIgICAgNwogI2RlZmluZSBDWDg4X0JPQVJEX1dJTkZBU1RfRFYyMDAwICAgICAgICAgICA4CiAjZGVmaW5lIENYODhfQk9BUkRfTEVBRFRFS19QVlIyMDAwICAgICAgICAgIDkKQEAgLTE3NCw2ICsxNzQsMTEgQEAKICNkZWZpbmUgQ1g4OF9CT0FSRF9BRFNURUNIX0RWQl9UX1BDSSAgICAgICAgICAyOQogI2RlZmluZSBDWDg4X0JPQVJEX1RFUlJBVEVDX0NJTkVSR1lfMTQwMF9EVkJfVDEgIDMwCiAjZGVmaW5lIENYODhfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl81X0dPTEQgMzEKKyNkZWZpbmUgQ1g4OF9CT0FSRF9BVkVSTUVESUFfVUxUUkFUVl9NQ181NTAgMzIKKyNkZWZpbmUgQ1g4OF9CT0FSRF9LV09STERfVlNUUkVBTV9FWFBFUlRfRFZEIDMzCisjZGVmaW5lIENYODhfQk9BUkRfQVRJX0hEVFZXT05ERVIgICAgICAgICAgMzQKKyNkZWZpbmUgQ1g4OF9CT0FSRF9XSU5GQVNUX0RUVjEwMDAgICAgICAgICAzNQorI2RlZmluZSBDWDg4X0JPQVJEX0FWRVJUVl8zMDMgICAgICAgICAgICAgIDM2CiAKIGVudW0gY3g4OF9pdHlwZSB7CiAJQ1g4OF9WTVVYX0NPTVBPU0lURTEgPSAxLApAQCAtMjAzLDggKzIwOCw4IEBACiAJaW50ICAgICAgICAgICAgICAgICAgICAgdGRhOTg4N19jb25mOwogCXN0cnVjdCBjeDg4X2lucHV0ICAgICAgIGlucHV0W01BWF9DWDg4X0lOUFVUXTsKIAlzdHJ1Y3QgY3g4OF9pbnB1dCAgICAgICByYWRpbzsKLQlpbnQgICAgICAgICAgICAgICAgICAgICBibGFja2JpcmQ6MTsKLQlpbnQgICAgICAgICAgICAgICAgICAgICBkdmI6MTsKKwl1bnNpZ25lZCBpbnQgICAgICAgICAgICBibGFja2JpcmQ6MTsKKwl1bnNpZ25lZCBpbnQgICAgICAgICAgICBkdmI6MTsKIH07CiAKIHN0cnVjdCBjeDg4X3N1YmlkIHsKQEAgLTI1NSw4ICsyNjAsOCBAQAogCS8qIHBjaSBzdHVmZiAqLwogCWludCAgICAgICAgICAgICAgICAgICAgICAgIHBjaV9idXM7CiAJaW50ICAgICAgICAgICAgICAgICAgICAgICAgcGNpX3Nsb3Q7Ci0gICAgICAgIHUzMiAgICAgICAgICAgICAgICAgICAgICAgIF9faW9tZW0gKmxtbWlvOwotICAgICAgICB1OCAgICAgICAgICAgICAgICAgICAgICAgICBfX2lvbWVtICpibW1pbzsKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICBfX2lvbWVtICpsbW1pbzsKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgICBfX2lvbWVtICpibW1pbzsKIAl1MzIgICAgICAgICAgICAgICAgICAgICAgICBzaGFkb3dbU0hBRE9XX01BWF07CiAJaW50ICAgICAgICAgICAgICAgICAgICAgICAgcGNpX2lycW1hc2s7CiAKQEAgLTI4Nyw2ICsyOTIsNyBAQAogCXUzMiAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvbW9kZV9jdXJyZW50OwogCXUzMiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0OwogCXUzMiAgICAgICAgICAgICAgICAgICAgICAgIGFzdGF0OworCXUzMgkJCSAgIHVzZV9uaWNhbTsKIAogCS8qIElSIHJlbW90ZSBjb250cm9sIHN0YXRlICovCiAJc3RydWN0IGN4ODhfSVIgICAgICAgICAgICAgKmlyOwpAQCAtMzcwLDYgKzM3NiwxNCBAQAogCWludCAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOwogfTsKIAorLyogVE9ETzogbW92ZSB0aGlzIHRvIHN0cnVjdCB2NGwyX21wZWdfY29tcHJlc3Npb24gPyAqLworc3RydWN0IGJsYWNrYmlyZF9kbnIgeworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgbW9kZTsKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgIHR5cGU7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICBzcGF0aWFsOworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgdGVtcG9yYWw7Cit9OworCiBzdHJ1Y3QgY3g4ODAyX2RldiB7CiAJc3RydWN0IGN4ODhfY29yZSAgICAgICAgICAgKmNvcmU7CiAJc3BpbmxvY2tfdCAgICAgICAgICAgICAgICAgc2xvY2s7CkBAIC00MDAsNiArNDE0LDEwIEBACiAKIAkvKiBmb3Igc3dpdGNoaW5nIG1vZHVsYXRpb24gdHlwZXMgKi8KIAl1bnNpZ25lZCBjaGFyICAgICAgICAgICAgICB0c19nZW5fY250cmw7CisKKwkvKiBtcGVnIHBhcmFtcyAqLworCXN0cnVjdCB2NGwyX21wZWdfY29tcHJlc3Npb24gcGFyYW1zOworCXN0cnVjdCBibGFja2JpcmRfZG5yICAgICAgIGRucl9wYXJhbXM7CiB9OwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtNTE0LDIyICs1MzIsMjAgQEAKIAogI2RlZmluZSBXV19OT05FCQkgMQogI2RlZmluZSBXV19CVFNDCQkgMgotI2RlZmluZSBXV19OSUNBTV9JCSAzCi0jZGVmaW5lIFdXX05JQ0FNX0JHREtMCSA0Ci0jZGVmaW5lIFdXX0ExCQkgNQotI2RlZmluZSBXV19BMl9CRwkgNgotI2RlZmluZSBXV19BMl9ESwkgNwotI2RlZmluZSBXV19BMl9NCQkgOAotI2RlZmluZSBXV19FSUFKCQkgOQotI2RlZmluZSBXV19TWVNURU1fTF9BTQkxMAotI2RlZmluZSBXV19JMlNQVAkxMQotI2RlZmluZSBXV19GTQkJMTIKKyNkZWZpbmUgV1dfQkcJCSAzCisjZGVmaW5lIFdXX0RLCQkgNAorI2RlZmluZSBXV19JCQkgNQorI2RlZmluZSBXV19MCQkgNgorI2RlZmluZSBXV19FSUFKCQkgNworI2RlZmluZSBXV19JMlNQVAkgOAorI2RlZmluZSBXV19GTQkJIDkKIAogdm9pZCBjeDg4X3NldF90dmF1ZGlvKHN0cnVjdCBjeDg4X2NvcmUgKmNvcmUpOwogdm9pZCBjeDg4X25ld3N0YXRpb24oc3RydWN0IGN4ODhfY29yZSAqY29yZSk7CiB2b2lkIGN4ODhfZ2V0X3N0ZXJlbyhzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlLCBzdHJ1Y3QgdjRsMl90dW5lciAqdCk7CiB2b2lkIGN4ODhfc2V0X3N0ZXJlbyhzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlLCB1MzIgbW9kZSwgaW50IG1hbnVhbCk7CiBpbnQgY3g4OF9hdWRpb190aHJlYWQodm9pZCAqZGF0YSk7CitpbnQgY3g4OF9kZXRlY3RfbmljYW0oc3RydWN0IGN4ODhfY29yZSAqY29yZSk7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBjeDg4LWlucHV0LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtNTQxLDcgKzU1Nyw4IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogY3g4OC1tcGVnLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAotaW50IGN4ODgwMl9idWZfcHJlcGFyZShzdHJ1Y3QgY3g4ODAyX2RldiAqZGV2LCBzdHJ1Y3QgY3g4OF9idWZmZXIgKmJ1Zik7CitpbnQgY3g4ODAyX2J1Zl9wcmVwYXJlKHN0cnVjdCBjeDg4MDJfZGV2ICpkZXYsIHN0cnVjdCBjeDg4X2J1ZmZlciAqYnVmLAorCQkJZW51bSB2NGwyX2ZpZWxkIGZpZWxkKTsKIHZvaWQgY3g4ODAyX2J1Zl9xdWV1ZShzdHJ1Y3QgY3g4ODAyX2RldiAqZGV2LCBzdHJ1Y3QgY3g4OF9idWZmZXIgKmJ1Zik7CiB2b2lkIGN4ODgwMl9jYW5jZWxfYnVmZmVycyhzdHJ1Y3QgY3g4ODAyX2RldiAqZGV2KTsKIApAQCAtNTYyLDYgKzU3OSwxMCBAQAogZXh0ZXJuIGludCAoKmN4ODhfaW9jdGxfaG9vaykoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCiAJCQkJdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgKCpjeDg4X2lvY3RsX3RyYW5zbGF0b3IpKHVuc2lnbmVkIGludCBjbWQpOwordm9pZCBibGFja2JpcmRfc2V0X3BhcmFtcyhzdHJ1Y3QgY3g4ODAyX2RldiAqZGV2LAorCQkJCXN0cnVjdCB2NGwyX21wZWdfY29tcHJlc3Npb24gKnBhcmFtcyk7Cit2b2lkIGJsYWNrYmlyZF9zZXRfZG5yX3BhcmFtcyhzdHJ1Y3QgY3g4ODAyX2RldiAqZGV2LAorCQkJCXN0cnVjdCBibGFja2JpcmRfZG5yKiBkbnJfcGFyYW1zKTsKIAogLyoKICAqIExvY2FsIHZhcmlhYmxlczoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4NWZkMDEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9LY29uZmlnCkBAIC0wLDAgKzEsMTIgQEAKK2NvbmZpZyBWSURFT19FTTI4WFgKKwl0cmlzdGF0ZSAiRW1waWEgRU0yODAwLzI4MjAvMjg0MCBVU0IgdmlkZW8gY2FwdHVyZSBzdXBwb3J0IgorCWRlcGVuZHMgb24gVklERU9fREVWICYmIFVTQiAmJiBJMkMKKwlzZWxlY3QgVklERU9fQlVGCisJc2VsZWN0IFZJREVPX1RVTkVSCisJc2VsZWN0IFZJREVPX1RWRUVQUk9NCisJc2VsZWN0IFZJREVPX0lSCisJLS0taGVscC0tLQorCSAgVGhpcyBpcyBhIHZpZGVvNGxpbnV4IGRyaXZlciBmb3IgRW1waWEgMjh4eCBiYXNlZCBUViBjYXJkcy4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZW0yOHh4CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhNDU3YTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9NYWtlZmlsZQpAQCAtMCwwICsxLDYgQEAKK2VtMjh4eC1vYmpzICAgICA6PSBlbTI4eHgtdmlkZW8ubyBlbTI4eHgtaTJjLm8gZW0yOHh4LWNhcmRzLm8gZW0yOHh4LWNvcmUubyBcCisJCSAgIGVtMjh4eC1pbnB1dC5vCisKK29iai0kKENPTkZJR19WSURFT19FTTI4WFgpICs9IGVtMjh4eC5vCisKK0VYVFJBX0NGTEFHUyArPSAtSSQoc3JjKS8uLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtY2FyZHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Nzc3OWU2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWNhcmRzLmMKQEAgLTAsMCArMSwyOTIgQEAKKy8qCisgICBlbTI4eHgtY2FyZHMuYyAtIGRyaXZlciBmb3IgRW1waWEgRU0yODAwL0VNMjgyMC8yODQwIFVTQiB2aWRlbyBjYXB0dXJlIGRldmljZXMKKworICAgQ29weXJpZ2h0IChDKSAyMDA1IEx1ZG92aWNvIENhdmVkb24gPGNhdmVkb25Ac3NzdXAuaXQ+CisJCSAgICAgIE1hcmt1cyBSZWNoYmVyZ2VyIDxtcmVjaGJlcmdlckBnbWFpbC5jb20+CisJCSAgICAgIE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkBicnR1cmJvLmNvbS5icj4KKwkJICAgICAgU2FzY2hhIFNvbW1lciA8c2FzY2hhc29tbWVyQGZyZWVuZXQuZGU+CisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPG1lZGlhL3R1bmVyLmg+CisjaW5jbHVkZSA8bWVkaWEvYXVkaW9jaGlwLmg+CisjaW5jbHVkZSA8bWVkaWEvdHZlZXByb20uaD4KKyNpbmNsdWRlICJtc3AzNDAwLmgiCisKKyNpbmNsdWRlICJlbTI4eHguaCIKKworc3RydWN0IGVtMjh4eF9ib2FyZCBlbTI4eHhfYm9hcmRzW10gPSB7CisJW0VNMjgwMF9CT0FSRF9VTktOT1dOXSA9IHsKKwkJLm5hbWUgICAgICAgICA9ICJVbmtub3duIEVNMjgwMCB2aWRlbyBncmFiYmVyIiwKKwkJLmlzX2VtMjgwMCAgICA9IDEsCisJCS52Y2hhbm5lbHMgICAgPSAyLAorCQkubm9ybSAgICAgICAgID0gVklERU9fTU9ERV9QQUwsCisJCS50ZGE5ODg3X2NvbmYgPSBUREE5ODg3X1BSRVNFTlQsCisJCS5oYXNfdHVuZXIgICAgPSAxLAorCQkuZGVjb2RlciAgICAgID0gRU0yOFhYX1NBQTcxMTMsCisJCS5pbnB1dCAgICAgICAgICAgPSB7eworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfQ09NUE9TSVRFMSwKKwkJCS52bXV4ICAgICA9IDAsCisJCQkuYW11eCAgICAgPSAxLAorCQl9LHsKKwkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1NWSURFTywKKwkJCS52bXV4ICAgICA9IDksCisJCQkuYW11eCAgICAgPSAxLAorCQl9fSwKKwl9LAorCVtFTTI4MjBfQk9BUkRfVU5LTk9XTl0gPSB7CisJCS5uYW1lICAgICAgICAgPSAiVW5rbm93biBFTTI4MjAvMjg0MCB2aWRlbyBncmFiYmVyIiwKKwkJLmlzX2VtMjgwMCAgICA9IDAsCisJCS52Y2hhbm5lbHMgICAgPSAyLAorCQkubm9ybSAgICAgICAgID0gVklERU9fTU9ERV9QQUwsCisJCS50ZGE5ODg3X2NvbmYgPSBUREE5ODg3X1BSRVNFTlQsCisJCS5oYXNfdHVuZXIgICAgPSAxLAorCQkuZGVjb2RlciAgICAgID0gRU0yOFhYX1NBQTcxMTMsCisJCS5pbnB1dCAgICAgICAgICAgPSB7eworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfQ09NUE9TSVRFMSwKKwkJCS52bXV4ICAgICA9IDAsCisJCQkuYW11eCAgICAgPSAxLAorCQl9LHsKKwkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1NWSURFTywKKwkJCS52bXV4ICAgICA9IDksCisJCQkuYW11eCAgICAgPSAxLAorCQl9fSwKKwl9LAorCVtFTTI4MjBfQk9BUkRfVEVSUkFURUNfQ0lORVJHWV8yNTBdID0geworCQkubmFtZSAgICAgICAgID0gIlRlcnJhdGVjIENpbmVyZ3kgMjUwIFVTQiIsCisJCS52Y2hhbm5lbHMgICAgPSAzLAorCQkubm9ybSAgICAgICAgID0gVklERU9fTU9ERV9QQUwsCisJCS50dW5lcl90eXBlICAgPSBUVU5FUl9MR19QQUxfTkVXX1RBUEMsCisJCS50ZGE5ODg3X2NvbmYgPSBUREE5ODg3X1BSRVNFTlQsCisJCS5oYXNfdHVuZXIgICAgPSAxLAorCQkuZGVjb2RlciAgICAgID0gRU0yOFhYX1NBQTcxMTMsCisJCS5pbnB1dCAgICAgICAgICA9IHt7CisJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9URUxFVklTSU9OLAorCQkJLnZtdXggICAgID0gMiwKKwkJCS5hbXV4ICAgICA9IDAsCisJCX0seworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfQ09NUE9TSVRFMSwKKwkJCS52bXV4ICAgICA9IDAsCisJCQkuYW11eCAgICAgPSAxLAorCQl9LHsKKwkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1NWSURFTywKKwkJCS52bXV4ICAgICA9IDksCisJCQkuYW11eCAgICAgPSAxLAorCQl9fSwKKwl9LAorCVtFTTI4MjBfQk9BUkRfUElOTkFDTEVfVVNCXzJdID0geworCQkubmFtZSAgICAgICAgID0gIlBpbm5hY2xlIFBDVFYgVVNCIDIiLAorCQkudmNoYW5uZWxzICAgID0gMywKKwkJLm5vcm0gICAgICAgICA9IFZJREVPX01PREVfUEFMLAorCQkudHVuZXJfdHlwZSAgID0gVFVORVJfTEdfUEFMX05FV19UQVBDLAorCQkudGRhOTg4N19jb25mID0gVERBOTg4N19QUkVTRU5ULAorCQkuaGFzX3R1bmVyICAgID0gMSwKKwkJLmRlY29kZXIgICAgICA9IEVNMjhYWF9TQUE3MTEzLAorCQkuaW5wdXQgICAgICAgICAgPSB7eworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfVEVMRVZJU0lPTiwKKwkJCS52bXV4ICAgICA9IDIsCisJCQkuYW11eCAgICAgPSAwLAorCQl9LHsKKwkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX0NPTVBPU0lURTEsCisJCQkudm11eCAgICAgPSAwLAorCQkJLmFtdXggICAgID0gMSwKKwkJfSx7CisJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9TVklERU8sCisJCQkudm11eCAgICAgPSA5LAorCQkJLmFtdXggICAgID0gMSwKKwkJfX0sCisJfSwKKwlbRU0yODIwX0JPQVJEX0hBVVBQQVVHRV9XSU5UVl9VU0JfMl0gPSB7CisJCS5uYW1lICAgICAgICAgPSAiSGF1cHBhdWdlIFdpblRWIFVTQiAyIiwKKwkJLnZjaGFubmVscyAgICA9IDMsCisJCS5ub3JtICAgICAgICAgPSBWSURFT19NT0RFX05UU0MsCisJCS50dW5lcl90eXBlICAgPSBUVU5FUl9QSElMSVBTX0ZNMTIzNl9NSzMsCisJCS50ZGE5ODg3X2NvbmYgPSBUREE5ODg3X1BSRVNFTlR8VERBOTg4N19QT1JUMV9BQ1RJVkV8VERBOTg4N19QT1JUMl9BQ1RJVkUsCisJCS5oYXNfdHVuZXIgICAgPSAxLAorCQkuZGVjb2RlciAgICAgID0gRU0yOFhYX1RWUDUxNTAsCisJCS5oYXNfbXNwMzR4eCAgPSAxLAorCQkvKkZJWE1FOiBTLVZpZGVvIG5vdCB0ZXN0ZWQgKi8KKwkJLmlucHV0ICAgICAgICAgID0ge3sKKwkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1RFTEVWSVNJT04sCisJCQkudm11eCAgICAgPSAwLAorCQkJLmFtdXggICAgID0gNiwKKwkJfSx7CisJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9TVklERU8sCisJCQkudm11eCAgICAgPSAyLAorCQkJLmFtdXggICAgID0gMSwKKwkJfX0sCisJfSwKKwlbRU0yODIwX0JPQVJEX01TSV9WT1hfVVNCXzJdID0geworCQkubmFtZQkJPSAiTVNJIFZPWCBVU0IgMi4wIiwKKwkJLnZjaGFubmVscwk9IDMsCisJCS5ub3JtCQk9IFZJREVPX01PREVfUEFMLAorCQkudHVuZXJfdHlwZQk9IFRVTkVSX0xHX1BBTF9ORVdfVEFQQywKKwkJLnRkYTk4ODdfY29uZgk9IFREQTk4ODdfUFJFU0VOVHxUREE5ODg3X1BPUlQxX0FDVElWRXxUREE5ODg3X1BPUlQyX0FDVElWRSwKKwkJLmhhc190dW5lcgk9IDEsCisJCS5kZWNvZGVyICAgICAgICA9IEVNMjhYWF9TQUE3MTE0LAorCQkuaW5wdXQgICAgICAgICAgPSB7eworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfVEVMRVZJU0lPTiwKKwkJCS52bXV4ICAgICA9IDQsCisJCQkuYW11eCAgICAgPSAwLAorCQl9LHsKKwkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX0NPTVBPU0lURTEsCisJCQkudm11eCAgICAgPSAwLAorCQkJLmFtdXggICAgID0gMSwKKwkJfSx7CisJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9TVklERU8sCisJCQkudm11eCAgICAgPSA5LAorCQkJLmFtdXggICAgID0gMSwKKwkJfX0sCisJfSwKKwlbRU0yODAwX0JPQVJEX1RFUlJBVEVDX0NJTkVSR1lfMjAwXSA9IHsKKwkJLm5hbWUgICAgICAgICA9ICJUZXJyYXRlYyBDaW5lcmd5IDIwMCBVU0IiLAorCQkuaXNfZW0yODAwICAgID0gMSwKKwkJLnZjaGFubmVscyAgICA9IDMsCisJCS5ub3JtICAgICAgICAgPSBWSURFT19NT0RFX1BBTCwKKwkJLnR1bmVyX3R5cGUgICA9IFRVTkVSX0xHX1BBTF9ORVdfVEFQQywKKwkJLnRkYTk4ODdfY29uZiA9IFREQTk4ODdfUFJFU0VOVCwKKwkJLmhhc190dW5lciAgICA9IDEsCisJCS5kZWNvZGVyICAgICAgPSBFTTI4WFhfU0FBNzExMywKKwkJLmlucHV0ICAgICAgICAgID0ge3sKKwkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1RFTEVWSVNJT04sCisJCQkudm11eCAgICAgPSAyLAorCQkJLmFtdXggICAgID0gMCwKKwkJfSx7CisJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9DT01QT1NJVEUxLAorCQkJLnZtdXggICAgID0gMCwKKwkJCS5hbXV4ICAgICA9IDEsCisJCX0seworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfU1ZJREVPLAorCQkJLnZtdXggICAgID0gOSwKKwkJCS5hbXV4ICAgICA9IDEsCisJCX19LAorCX0sCisJW0VNMjgwMF9CT0FSRF9MRUFEVEVLX1dJTkZBU1RfVVNCSUldID0geworCQkubmFtZSAgICAgICAgID0gIkxlYWR0ZWsgV2luZmFzdCBVU0IgSUkiLAorCQkuaXNfZW0yODAwICAgID0gMSwKKwkJLnZjaGFubmVscyAgICA9IDMsCisJCS5ub3JtICAgICAgICAgPSBWSURFT19NT0RFX1BBTCwKKwkJLnR1bmVyX3R5cGUgICA9IFRVTkVSX0xHX1BBTF9ORVdfVEFQQywKKwkJLnRkYTk4ODdfY29uZiA9IFREQTk4ODdfUFJFU0VOVCwKKwkJLmhhc190dW5lciAgICA9IDEsCisJCS5kZWNvZGVyICAgICAgPSBFTTI4WFhfU0FBNzExMywKKwkJLmlucHV0ICAgICAgICAgID0ge3sKKwkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1RFTEVWSVNJT04sCisJCQkudm11eCAgICAgPSAyLAorCQkJLmFtdXggICAgID0gMCwKKwkJfSx7CisJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9DT01QT1NJVEUxLAorCQkJLnZtdXggICAgID0gMCwKKwkJCS5hbXV4ICAgICA9IDEsCisJCX0seworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfU1ZJREVPLAorCQkJLnZtdXggICAgID0gOSwKKwkJCS5hbXV4ICAgICA9IDEsCisJCX19LAorCX0sCisJW0VNMjgwMF9CT0FSRF9LV09STERfVVNCMjgwMF0gPSB7CisJCS5uYW1lICAgICAgICAgPSAiS3dvcmxkIFVTQjI4MDAiLAorCQkuaXNfZW0yODAwICAgID0gMSwKKwkJLnZjaGFubmVscyAgICA9IDMsCisJCS5ub3JtICAgICAgICAgPSBWSURFT19NT0RFX1BBTCwKKwkJLnR1bmVyX3R5cGUgICA9IFRVTkVSX1BISUxJUFNfQVRTQywKKwkJLnRkYTk4ODdfY29uZiA9IFREQTk4ODdfUFJFU0VOVCwKKwkJLmhhc190dW5lciAgICA9IDEsCisJCS5kZWNvZGVyICAgICAgPSBFTTI4WFhfU0FBNzExMywKKwkJLmlucHV0ICAgICAgICAgID0ge3sKKwkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1RFTEVWSVNJT04sCisJCQkudm11eCAgICAgPSAyLAorCQkJLmFtdXggICAgID0gMCwKKwkJfSx7CisJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9DT01QT1NJVEUxLAorCQkJLnZtdXggICAgID0gMCwKKwkJCS5hbXV4ICAgICA9IDEsCisJCX0seworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfU1ZJREVPLAorCQkJLnZtdXggICAgID0gOSwKKwkJCS5hbXV4ICAgICA9IDEsCisJCX19LAorCX0sCisJW0VNMjgyMF9CT0FSRF9QSU5OQUNMRV9EVkNfOTBdID0geworCQkubmFtZSAgICAgICAgID0gIlBpbm5hY2xlIERhenpsZSBEVkMgOTAiLAorCQkudmNoYW5uZWxzICAgID0gMywKKwkJLm5vcm0gICAgICAgICA9IFZJREVPX01PREVfUEFMLAorCQkuaGFzX3R1bmVyICAgID0gMCwKKwkJLmRlY29kZXIgICAgICA9IEVNMjhYWF9TQUE3MTEzLAorCQkuaW5wdXQgICAgICAgICAgPSB7eworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfQ09NUE9TSVRFMSwKKwkJCS52bXV4ICAgICA9IDAsCisJCQkuYW11eCAgICAgPSAxLAorCQl9LHsKKwkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1NWSURFTywKKwkJCS52bXV4ICAgICA9IDksCisJCQkuYW11eCAgICAgPSAxLAorCQl9fSwKKwl9LAorfTsKK2NvbnN0IHVuc2lnbmVkIGludCBlbTI4eHhfYmNvdW50ID0gQVJSQVlfU0laRShlbTI4eHhfYm9hcmRzKTsKKworLyogdGFibGUgb2YgZGV2aWNlcyB0aGF0IHdvcmsgd2l0aCB0aGlzIGRyaXZlciAqLworc3RydWN0IHVzYl9kZXZpY2VfaWQgZW0yOHh4X2lkX3RhYmxlIFtdID0geworCXsgVVNCX0RFVklDRSgweGViMWEsIDB4MjgwMCksIC5kcml2ZXJfaW5mbyA9IEVNMjgwMF9CT0FSRF9VTktOT1dOIH0sCisJeyBVU0JfREVWSUNFKDB4ZWIxYSwgMHgyODIwKSwgLmRyaXZlcl9pbmZvID0gRU0yODIwX0JPQVJEX01TSV9WT1hfVVNCXzIgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwY2NkLCAweDAwMzYpLCAuZHJpdmVyX2luZm8gPSBFTTI4MjBfQk9BUkRfVEVSUkFURUNfQ0lORVJHWV8yNTAgfSwKKwl7IFVTQl9ERVZJQ0UoMHgyMzA0LCAweDAyMDgpLCAuZHJpdmVyX2luZm8gPSBFTTI4MjBfQk9BUkRfUElOTkFDTEVfVVNCXzIgfSwKKwl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDQyMDApLCAuZHJpdmVyX2luZm8gPSBFTTI4MjBfQk9BUkRfSEFVUFBBVUdFX1dJTlRWX1VTQl8yIH0sCisJeyBVU0JfREVWSUNFKDB4MjMwNCwgMHgwMjA3KSwgLmRyaXZlcl9pbmZvID0gRU0yODIwX0JPQVJEX1BJTk5BQ0xFX0RWQ185MCB9LAorCXsgfSwKK307CisKK3ZvaWQgZW0yOHh4X2NhcmRfc2V0dXAoc3RydWN0IGVtMjh4eCAqZGV2KQoreworCS8qIHJlcXVlc3Qgc29tZSBtb2R1bGVzICovCisJaWYgKGRldi0+bW9kZWwgPT0gRU0yODIwX0JPQVJEX0hBVVBQQVVHRV9XSU5UVl9VU0JfMikgeworCQlzdHJ1Y3QgdHZlZXByb20gdHY7CisJCXN0cnVjdCB2NGwyX2F1ZGlvb3V0IGFvOworI2lmZGVmIENPTkZJR19NT0RVTEVTCisJCXJlcXVlc3RfbW9kdWxlKCJ0dmVlcHJvbSIpOworCQlyZXF1ZXN0X21vZHVsZSgiaXIta2JkLWkyYyIpOworCQlyZXF1ZXN0X21vZHVsZSgibXNwMzQwMCIpOworI2VuZGlmCisJCS8qIENhbGwgZmlyc3QgVFZlZXByb20gKi8KKworCQlkZXYtPmkyY19jbGllbnQuYWRkciA9IDB4YTAgPj4gMTsKKwkJdHZlZXByb21faGF1cHBhdWdlX2FuYWxvZygmZGV2LT5pMmNfY2xpZW50LCAmdHYsIGRldi0+ZWVkYXRhKTsKKworCQlkZXYtPnR1bmVyX3R5cGU9IHR2LnR1bmVyX3R5cGU7CisJCWlmICh0di5hdWRpb19wcm9jZXNzb3IgPT0gQVVESU9fQ0hJUF9NU1AzNFhYKSB7CisJCQlkZXYtPmhhc19tc3AzNHh4PTE7CisJCQltZW1zZXQgKCZhbywwLHNpemVvZihhbykpOworCisJCQlhby5pbmRleD0yOworCQkJYW8ubW9kZT1WNEwyX0FVRE1PREVfMzJCSVRTOworCQkJZW0yOHh4X2kyY19jYWxsX2NsaWVudHMoZGV2LCBWSURJT0NfU19BVURPVVQsICZhbyk7CisJCX0gZWxzZQorCQkJZGV2LT5oYXNfbXNwMzR4eD0wOworCX0KK30KKworRVhQT1JUX1NZTUJPTChlbTI4eHhfYm9hcmRzKTsKK0VYUE9SVF9TWU1CT0woZW0yOHh4X2Jjb3VudCk7CitFWFBPUlRfU1lNQk9MKGVtMjh4eF9pZF90YWJsZSk7CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgZW0yOHh4X2lkX3RhYmxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtY29yZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1NGJjMDEyNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1jb3JlLmMKQEAgLTAsMCArMSw4MTcgQEAKKy8qCisgICBlbTI4eHgtY29yZS5jIC0gZHJpdmVyIGZvciBFbXBpYSBFTTI4MDAvRU0yODIwLzI4NDAgVVNCIHZpZGVvIGNhcHR1cmUgZGV2aWNlcworCisgICBDb3B5cmlnaHQgKEMpIDIwMDUgTHVkb3ZpY28gQ2F2ZWRvbiA8Y2F2ZWRvbkBzc3N1cC5pdD4KKwkJICAgICAgTWFya3VzIFJlY2hiZXJnZXIgPG1yZWNoYmVyZ2VyQGdtYWlsLmNvbT4KKwkJICAgICAgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQGJydHVyYm8uY29tLmJyPgorCQkgICAgICBTYXNjaGEgU29tbWVyIDxzYXNjaGFzb21tZXJAZnJlZW5ldC5kZT4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKworI2luY2x1ZGUgImVtMjh4eC5oIgorCisvKiAjZGVmaW5lIEVOQUJMRV9ERUJVR19JU09DX0ZSQU1FUyAqLworCit1bnNpZ25lZCBpbnQgY29yZV9kZWJ1ZzsKK21vZHVsZV9wYXJhbShjb3JlX2RlYnVnLGludCwwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoY29yZV9kZWJ1ZywiZW5hYmxlIGRlYnVnIG1lc3NhZ2VzIFtjb3JlXSIpOworCisjZGVmaW5lIGVtMjh4eF9jb3JlZGJnKGZtdCwgYXJnLi4uKSBkbyB7XAorCWlmIChjb3JlX2RlYnVnKSBcCisJCXByaW50ayhLRVJOX0lORk8gIiVzICVzIDoiZm10LCBcCisJCQkgZGV2LT5uYW1lLCBfX0ZVTkNUSU9OX18gLCAjI2FyZyk7IH0gd2hpbGUgKDApCisKK3Vuc2lnbmVkIGludCByZWdfZGVidWc7Cittb2R1bGVfcGFyYW0ocmVnX2RlYnVnLGludCwwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MocmVnX2RlYnVnLCJlbmFibGUgZGVidWcgbWVzc2FnZXMgW1VSQiByZWddIik7CisKKyNkZWZpbmUgZW0yOHh4X3JlZ2RiZyhmbXQsIGFyZy4uLikgZG8ge1wKKwlpZiAocmVnX2RlYnVnKSBcCisJCXByaW50ayhLRVJOX0lORk8gIiVzICVzIDoiZm10LCBcCisJCQkgZGV2LT5uYW1lLCBfX0ZVTkNUSU9OX18gLCAjI2FyZyk7IH0gd2hpbGUgKDApCisKK3Vuc2lnbmVkIGludCBpc29jX2RlYnVnOworbW9kdWxlX3BhcmFtKGlzb2NfZGVidWcsaW50LDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhpc29jX2RlYnVnLCJlbmFibGUgZGVidWcgbWVzc2FnZXMgW2lzb2MgdHJhbnNmZXJzXSIpOworCisjZGVmaW5lIGVtMjh4eF9pc29jZGJnKGZtdCwgYXJnLi4uKSBkbyB7XAorCWlmIChpc29jX2RlYnVnKSBcCisJCXByaW50ayhLRVJOX0lORk8gIiVzICVzIDoiZm10LCBcCisJCQkgZGV2LT5uYW1lLCBfX0ZVTkNUSU9OX18gLCAjI2FyZyk7IH0gd2hpbGUgKDApCisKK3N0YXRpYyBpbnQgYWx0ID0gRU0yOFhYX1BJTk9VVDsKK21vZHVsZV9wYXJhbShhbHQsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGFsdCwgImFsdGVybmF0ZSBzZXR0aW5nIHRvIHVzZSBmb3IgdmlkZW8gZW5kcG9pbnQiKTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBkZWJ1ZyBoZWxwIGZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworc3RhdGljIGNvbnN0IGNoYXIgKnY0bDFfaW9jdGxzW10gPSB7CisJIjAiLCAiQ0dBUCIsICJHQ0hBTiIsICJTQ0hBTiIsICJHVFVORVIiLCAiU1RVTkVSIiwgIkdQSUNUIiwgIlNQSUNUIiwKKwkiQ0NBUFRVUkUiLCAiR1dJTiIsICJTV0lOIiwgIkdGQlVGIiwgIlNGQlVGIiwgIktFWSIsICJHRlJFUSIsCisJIlNGUkVRIiwgIkdBVURJTyIsICJTQVVESU8iLCAiU1lOQyIsICJNQ0FQVFVSRSIsICJHTUJVRiIsICJHVU5JVCIsCisJIkdDQVBUVVJFIiwgIlNDQVBUVVJFIiwgIlNQTEFZTU9ERSIsICJTV1JJVEVNT0RFIiwgIkdQTEFZSU5GTyIsCisJIlNNSUNST0NPREUiLCAiR1ZCSUZNVCIsICJTVkJJRk1UIiB9OworI2RlZmluZSBWNEwxX0lPQ1RMUyBBUlJBWV9TSVpFKHY0bDFfaW9jdGxzKQorCitzdGF0aWMgY29uc3QgY2hhciAqdjRsMl9pb2N0bHNbXSA9IHsKKwkiUVVFUllDQVAiLCAiMSIsICJFTlVNX1BJWEZNVCIsICJFTlVNX0ZCVUZGTVQiLCAiR19GTVQiLCAiU19GTVQiLAorCSJHX0NPTVAiLCAiU19DT01QIiwgIlJFUUJVRlMiLCAiUVVFUllCVUYiLCAiR19GQlVGIiwgIlNfRkJVRiIsCisJIkdfV0lOIiwgIlNfV0lOIiwgIlBSRVZJRVciLCAiUUJVRiIsICIxNiIsICJEUUJVRiIsICJTVFJFQU1PTiIsCisJIlNUUkVBTU9GRiIsICJHX1BFUkYiLCAiR19QQVJNIiwgIlNfUEFSTSIsICJHX1NURCIsICJTX1NURCIsCisJIkVOVU1TVEQiLCAiRU5VTUlOUFVUIiwgIkdfQ1RSTCIsICJTX0NUUkwiLCAiR19UVU5FUiIsICJTX1RVTkVSIiwKKwkiR19GUkVRIiwgIlNfRlJFUSIsICJHX0FVRElPIiwgIlNfQVVESU8iLCAiMzUiLCAiUVVFUllDVFJMIiwKKwkiUVVFUllNRU5VIiwgIkdfSU5QVVQiLCAiU19JTlBVVCIsICJFTlVNQ1ZUIiwgIjQxIiwgIjQyIiwgIjQzIiwKKwkiNDQiLCAiNDUiLCAgIkdfT1VUUFVUIiwgIlNfT1VUUFVUIiwgIkVOVU1PVVRQVVQiLCAiR19BVURPVVQiLAorCSJTX0FVRE9VVCIsICJFTlVNRlgiLCAiR19FRkZFQ1QiLCAiU19FRkZFQ1QiLCAiR19NT0RVTEFUT1IiLAorCSJTX01PRFVMQVRPUiIKK307CisjZGVmaW5lIFY0TDJfSU9DVExTIEFSUkFZX1NJWkUodjRsMl9pb2N0bHMpCisKK3ZvaWQgZW0yOHh4X3ByaW50X2lvY3RsKGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBjbWQpCit7CisJY2hhciAqZGlyOworCisJc3dpdGNoIChfSU9DX0RJUihjbWQpKSB7CisJY2FzZSBfSU9DX05PTkU6ICAgICAgICAgICAgICBkaXIgPSAiLS0iOyBicmVhazsKKwljYXNlIF9JT0NfUkVBRDogICAgICAgICAgICAgIGRpciA9ICJyLSI7IGJyZWFrOworCWNhc2UgX0lPQ19XUklURTogICAgICAgICAgICAgZGlyID0gIi13IjsgYnJlYWs7CisJY2FzZSBfSU9DX1JFQUQgfCBfSU9DX1dSSVRFOiBkaXIgPSAicnciOyBicmVhazsKKwlkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgIGRpciA9ICI/PyI7IGJyZWFrOworCX0KKwlzd2l0Y2ggKF9JT0NfVFlQRShjbWQpKSB7CisJY2FzZSAndic6CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogaW9jdGwgMHglMDh4ICh2NGwxLCAlcywgVklESU9DJXMpXG4iLAorCQkgICAgICAgbmFtZSwgY21kLCBkaXIsIChfSU9DX05SKGNtZCkgPCBWNEwxX0lPQ1RMUykgPworCQkgICAgICAgdjRsMV9pb2N0bHNbX0lPQ19OUihjbWQpXSA6ICI/Pz8iKTsKKwkJYnJlYWs7CisJY2FzZSAnVic6CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogaW9jdGwgMHglMDh4ICh2NGwyLCAlcywgVklESU9DXyVzKVxuIiwKKwkJICAgICAgIG5hbWUsIGNtZCwgZGlyLCAoX0lPQ19OUihjbWQpIDwgVjRMMl9JT0NUTFMpID8KKwkJICAgICAgIHY0bDJfaW9jdGxzW19JT0NfTlIoY21kKV0gOiAiPz8/Iik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogaW9jdGwgMHglMDh4ICg/Pz8sICVzLCAjJWQpXG4iLAorCQkgICAgICAgbmFtZSwgY21kLCBkaXIsIF9JT0NfTlIoY21kKSk7CisJfQorfQorCitzdGF0aWMgdm9pZCAqcnZtYWxsb2Moc2l6ZV90IHNpemUpCit7CisJdm9pZCAqbWVtOworCXVuc2lnbmVkIGxvbmcgYWRyOworCisJc2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7CisKKwltZW0gPSB2bWFsbG9jXzMyKCh1bnNpZ25lZCBsb25nKXNpemUpOworCWlmICghbWVtKQorCQlyZXR1cm4gTlVMTDsKKworCW1lbXNldChtZW0sIDAsIHNpemUpOworCisJYWRyID0gKHVuc2lnbmVkIGxvbmcpbWVtOworCXdoaWxlIChzaXplID4gMCkgeworCQlTZXRQYWdlUmVzZXJ2ZWQodm1hbGxvY190b19wYWdlKCh2b2lkICopYWRyKSk7CisJCWFkciArPSBQQUdFX1NJWkU7CisJCXNpemUgLT0gUEFHRV9TSVpFOworCX0KKworCXJldHVybiBtZW07Cit9CisKK3N0YXRpYyB2b2lkIHJ2ZnJlZSh2b2lkICptZW0sIHNpemVfdCBzaXplKQoreworCXVuc2lnbmVkIGxvbmcgYWRyOworCisJaWYgKCFtZW0pCisJCXJldHVybjsKKworCXNpemUgPSBQQUdFX0FMSUdOKHNpemUpOworCisJYWRyID0gKHVuc2lnbmVkIGxvbmcpbWVtOworCXdoaWxlIChzaXplID4gMCkgeworCQlDbGVhclBhZ2VSZXNlcnZlZCh2bWFsbG9jX3RvX3BhZ2UoKHZvaWQgKilhZHIpKTsKKwkJYWRyICs9IFBBR0VfU0laRTsKKwkJc2l6ZSAtPSBQQUdFX1NJWkU7CisJfQorCisJdmZyZWUobWVtKTsKK30KKworLyoKKyAqIGVtMjh4eF9yZXF1ZXN0X2J1ZmZlcnMoKQorICogYWxsb2NhdGUgYSBudW1iZXIgb2YgYnVmZmVycworICovCit1MzIgZW0yOHh4X3JlcXVlc3RfYnVmZmVycyhzdHJ1Y3QgZW0yOHh4ICpkZXYsIHUzMiBjb3VudCkKK3sKKwljb25zdCBzaXplX3QgaW1hZ2VzaXplID0gUEFHRV9BTElHTihkZXYtPmZyYW1lX3NpemUpOwkvKm5lZWRzIHRvIGJlIHBhZ2UgYWxpZ25lZCBjYXVzZSB0aGUgYnVmZmVycyBjYW4gYmUgbWFwcGVkIGluZGl2aWR1YWxseSEgKi8KKwl2b2lkICpidWZmID0gTlVMTDsKKwl1MzIgaTsKKwllbTI4eHhfY29yZWRiZygicmVxdWVzdGVkICVpIGJ1ZmZlcnMgd2l0aCBzaXplICVpIiwgY291bnQsIGltYWdlc2l6ZSk7CisJaWYgKGNvdW50ID4gRU0yOFhYX05VTV9GUkFNRVMpCisJCWNvdW50ID0gRU0yOFhYX05VTV9GUkFNRVM7CisKKwlkZXYtPm51bV9mcmFtZXMgPSBjb3VudDsKKwl3aGlsZSAoZGV2LT5udW1fZnJhbWVzID4gMCkgeworCQlpZiAoKGJ1ZmYgPSBydm1hbGxvYyhkZXYtPm51bV9mcmFtZXMgKiBpbWFnZXNpemUpKSkKKwkJCWJyZWFrOworCQlkZXYtPm51bV9mcmFtZXMtLTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5udW1fZnJhbWVzOyBpKyspIHsKKwkJZGV2LT5mcmFtZVtpXS5idWZtZW0gPSBidWZmICsgaSAqIGltYWdlc2l6ZTsKKwkJZGV2LT5mcmFtZVtpXS5idWYuaW5kZXggPSBpOworCQlkZXYtPmZyYW1lW2ldLmJ1Zi5tLm9mZnNldCA9IGkgKiBpbWFnZXNpemU7CisJCWRldi0+ZnJhbWVbaV0uYnVmLmxlbmd0aCA9IGRldi0+ZnJhbWVfc2l6ZTsKKwkJZGV2LT5mcmFtZVtpXS5idWYudHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwkJZGV2LT5mcmFtZVtpXS5idWYuc2VxdWVuY2UgPSAwOworCQlkZXYtPmZyYW1lW2ldLmJ1Zi5maWVsZCA9IFY0TDJfRklFTERfTk9ORTsKKwkJZGV2LT5mcmFtZVtpXS5idWYubWVtb3J5ID0gVjRMMl9NRU1PUllfTU1BUDsKKwkJZGV2LT5mcmFtZVtpXS5idWYuZmxhZ3MgPSAwOworCX0KKwlyZXR1cm4gZGV2LT5udW1fZnJhbWVzOworfQorCisvKgorICogZW0yOHh4X3F1ZXVlX3VudXNlZGZyYW1lcygpCisgKiBhZGQgYWxsIGZyYW1lcyB0aGF0IGFyZSBub3QgY3VycmVudGx5IGluIHVzZSB0byB0aGUgaW5idWZmZXIgcXVldWUKKyAqLwordm9pZCBlbTI4eHhfcXVldWVfdW51c2VkZnJhbWVzKHN0cnVjdCBlbTI4eHggKmRldikKK3sKKwl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7CisJdTMyIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5udW1fZnJhbWVzOyBpKyspCisJCWlmIChkZXYtPmZyYW1lW2ldLnN0YXRlID09IEZfVU5VU0VEKSB7CisJCQlkZXYtPmZyYW1lW2ldLnN0YXRlID0gRl9RVUVVRUQ7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5xdWV1ZV9sb2NrLCBsb2NrX2ZsYWdzKTsKKwkJCWxpc3RfYWRkX3RhaWwoJmRldi0+ZnJhbWVbaV0uZnJhbWUsICZkZXYtPmlucXVldWUpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5xdWV1ZV9sb2NrLCBsb2NrX2ZsYWdzKTsKKwkJfQorfQorCisvKgorICogZW0yOHh4X3JlbGVhc2VfYnVmZmVycygpCisgKiBmcmVlIGZyYW1lIGJ1ZmZlcnMKKyAqLwordm9pZCBlbTI4eHhfcmVsZWFzZV9idWZmZXJzKHN0cnVjdCBlbTI4eHggKmRldikKK3sKKwlpZiAoZGV2LT5udW1fZnJhbWVzKSB7CisJCXJ2ZnJlZShkZXYtPmZyYW1lWzBdLmJ1Zm1lbSwKKwkJICAgICAgIGRldi0+bnVtX2ZyYW1lcyAqIFBBR0VfQUxJR04oZGV2LT5mcmFtZVswXS5idWYubGVuZ3RoKSk7CisJCWRldi0+bnVtX2ZyYW1lcyA9IDA7CisJfQorfQorCisvKgorICogZW0yOHh4X3JlYWRfcmVnX3JlcSgpCisgKiByZWFkcyBkYXRhIGZyb20gdGhlIHVzYiBkZXZpY2Ugc3BlY2lmeWluZyBiUmVxdWVzdAorICovCitpbnQgZW0yOHh4X3JlYWRfcmVnX3JlcV9sZW4oc3RydWN0IGVtMjh4eCAqZGV2LCB1OCByZXEsIHUxNiByZWcsCisJCQkJICAgY2hhciAqYnVmLCBpbnQgbGVuKQoreworCWludCByZXQsIGJ5dGU7CisKKwllbTI4eHhfcmVnZGJnKCJyZXE9JTAyeCwgcmVnPSUwMnggIiwgcmVxLCByZWcpOworCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldi0+dWRldiwgdXNiX3JjdmN0cmxwaXBlKGRldi0+dWRldiwgMCksIHJlcSwKKwkJCSAgICAgIFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAorCQkJICAgICAgMHgwMDAwLCByZWcsIGJ1ZiwgbGVuLCBIWik7CisKKwlpZiAocmVnX2RlYnVnKXsKKwkJcHJpbnRrKHJldCA8IDAgPyAiIGZhaWxlZCFcbiIgOiAiJTAyeCB2YWx1ZXM6ICIsIHJldCk7CisJCWZvciAoYnl0ZSA9IDA7IGJ5dGUgPCBsZW47IGJ5dGUrKykgeworCQkJcHJpbnRrKCIgJTAyeCIsIGJ1ZltieXRlXSk7CisJCX0KKwkJcHJpbnRrKCJcbiIpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBlbTI4eHhfcmVhZF9yZWdfcmVxKCkKKyAqIHJlYWRzIGRhdGEgZnJvbSB0aGUgdXNiIGRldmljZSBzcGVjaWZ5aW5nIGJSZXF1ZXN0CisgKi8KK2ludCBlbTI4eHhfcmVhZF9yZWdfcmVxKHN0cnVjdCBlbTI4eHggKmRldiwgdTggcmVxLCB1MTYgcmVnKQoreworCXU4IHZhbDsKKwlpbnQgcmV0OworCisJZW0yOHh4X3JlZ2RiZygicmVxPSUwMngsIHJlZz0lMDJ4OiIsIHJlcSwgcmVnKTsKKworCXJldCA9IHVzYl9jb250cm9sX21zZyhkZXYtPnVkZXYsIHVzYl9yY3ZjdHJscGlwZShkZXYtPnVkZXYsIDApLCByZXEsCisJCQkgICAgICBVU0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCSAgICAgIDB4MDAwMCwgcmVnLCAmdmFsLCAxLCBIWik7CisKKwlpZiAocmVnX2RlYnVnKQorCQlwcmludGsocmV0IDwgMCA/ICIgZmFpbGVkIVxuIiA6ICIlMDJ4XG4iLCB2YWwpOworCisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gdmFsOworfQorCitpbnQgZW0yOHh4X3JlYWRfcmVnKHN0cnVjdCBlbTI4eHggKmRldiwgdTE2IHJlZykKK3sKKwlyZXR1cm4gZW0yOHh4X3JlYWRfcmVnX3JlcShkZXYsIFVTQl9SRVFfR0VUX1NUQVRVUywgcmVnKTsKK30KKworLyoKKyAqIGVtMjh4eF93cml0ZV9yZWdzX3JlcSgpCisgKiBzZW5kcyBkYXRhIHRvIHRoZSB1c2IgZGV2aWNlLCBzcGVjaWZ5aW5nIGJSZXF1ZXN0CisgKi8KK2ludCBlbTI4eHhfd3JpdGVfcmVnc19yZXEoc3RydWN0IGVtMjh4eCAqZGV2LCB1OCByZXEsIHUxNiByZWcsIGNoYXIgKmJ1ZiwKKwkJCQkgaW50IGxlbikKK3sKKwlpbnQgcmV0OworCisJLyp1c2JfY29udHJvbF9tc2cgc2VlbXMgdG8gZXhwZWN0IGEga21hbGxvY2VkIGJ1ZmZlciAqLworCXVuc2lnbmVkIGNoYXIgKmJ1ZnMgPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CisKKwllbTI4eHhfcmVnZGJnKCJyZXE9JTAyeCByZWc9JTAyeDoiLCByZXEsIHJlZyk7CisKKwlpZiAocmVnX2RlYnVnKSB7CisJCWludCBpOworCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpCisJCQlwcmludGsgKCIgJTAyeCIsICh1bnNpZ25lZCBjaGFyKWJ1ZltpXSk7CisJCXByaW50ayAoIlxuIik7CisJfQorCisJaWYgKCFidWZzKQorCQlyZXR1cm4gLUVOT01FTTsKKwltZW1jcHkoYnVmcywgYnVmLCBsZW4pOworCXJldCA9IHVzYl9jb250cm9sX21zZyhkZXYtPnVkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYtPnVkZXYsIDApLCByZXEsCisJCQkgICAgICBVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkgICAgICAweDAwMDAsIHJlZywgYnVmcywgbGVuLCBIWik7CisJbWRlbGF5KDUpOwkJLyogRklYTUU6IG1hZ2ljIG51bWJlciAqLworCWtmcmVlKGJ1ZnMpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBlbTI4eHhfd3JpdGVfcmVncyhzdHJ1Y3QgZW0yOHh4ICpkZXYsIHUxNiByZWcsIGNoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKwlyZXR1cm4gZW0yOHh4X3dyaXRlX3JlZ3NfcmVxKGRldiwgVVNCX1JFUV9HRVRfU1RBVFVTLCByZWcsIGJ1ZiwgbGVuKTsKK30KKworLyoKKyAqIGVtMjh4eF93cml0ZV9yZWdfYml0cygpCisgKiBzZXRzIG9ubHkgc29tZSBiaXRzIChzcGVjaWZpZWQgYnkgYml0bWFzaykgb2YgYSByZWdpc3RlciwgYnkgZmlyc3QgcmVhZGluZworICogdGhlIGFjdHVhbCB2YWx1ZQorICovCitpbnQgZW0yOHh4X3dyaXRlX3JlZ19iaXRzKHN0cnVjdCBlbTI4eHggKmRldiwgdTE2IHJlZywgdTggdmFsLAorCQkJCSB1OCBiaXRtYXNrKQoreworCWludCBvbGR2YWw7CisJdTggbmV3dmFsOworCWlmICgob2xkdmFsID0gZW0yOHh4X3JlYWRfcmVnKGRldiwgcmVnKSkgPCAwKQorCQlyZXR1cm4gb2xkdmFsOworCW5ld3ZhbCA9ICgoKHU4KSBvbGR2YWwpICYgfmJpdG1hc2spIHwgKHZhbCAmIGJpdG1hc2spOworCXJldHVybiBlbTI4eHhfd3JpdGVfcmVncyhkZXYsIHJlZywgJm5ld3ZhbCwgMSk7Cit9CisKKy8qCisgKiBlbTI4eHhfd3JpdGVfYWM5NygpCisgKiB3cml0ZSBhIDE2IGJpdCB2YWx1ZSB0byB0aGUgc3BlY2lmaWVkIEFDOTcgYWRkcmVzcyAoTFNCIGZpcnN0ISkKKyAqLworaW50IGVtMjh4eF93cml0ZV9hYzk3KHN0cnVjdCBlbTI4eHggKmRldiwgdTggcmVnLCB1OCAqIHZhbCkKK3sKKwlpbnQgcmV0OworCXU4IGFkZHIgPSByZWcgJiAweDdmOworCWlmICgocmV0ID0gZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBBQzk3TFNCX1JFRywgdmFsLCAyKSkgPCAwKQorCQlyZXR1cm4gcmV0OworCWlmICgocmV0ID0gZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBBQzk3QUREUl9SRUcsICZhZGRyLCAxKSkgPCAwKQorCQlyZXR1cm4gcmV0OworCWlmICgocmV0ID0gZW0yOHh4X3JlYWRfcmVnKGRldiwgQUM5N0JVU1lfUkVHKSkgPCAwKQorCQlyZXR1cm4gcmV0OworCWVsc2UgaWYgKCgodTgpIHJldCkgJiAweDAxKSB7CisJCWVtMjh4eF93YXJuICgiQUM5NyBjb21tYW5kIHN0aWxsIGJlaW5nIGV4ZWN0dXRlZDogbm90IGhhbmRsZWQgcHJvcGVybHkhXG4iKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCBlbTI4eHhfYXVkaW9fYW5hbG9nX3NldChzdHJ1Y3QgZW0yOHh4ICpkZXYpCit7CisJY2hhciBzWzJdID0geyAweDAwLCAweDAwIH07CisJc1swXSB8PSAweDFmIC0gZGV2LT52b2x1bWU7CisJc1sxXSB8PSAweDFmIC0gZGV2LT52b2x1bWU7CisJaWYgKGRldi0+bXV0ZSkKKwkJc1sxXSB8PSAweDgwOworCXJldHVybiBlbTI4eHhfd3JpdGVfYWM5NyhkZXYsIE1BU1RFUl9BQzk3LCBzKTsKK30KKworCitpbnQgZW0yOHh4X2NvbG9ybGV2ZWxzX3NldF9kZWZhdWx0KHN0cnVjdCBlbTI4eHggKmRldikKK3sKKwllbTI4eHhfd3JpdGVfcmVncyhkZXYsIFlHQUlOX1JFRywgIlx4MTAiLCAxKTsJLyogY29udHJhc3QgKi8KKwllbTI4eHhfd3JpdGVfcmVncyhkZXYsIFlPRkZTRVRfUkVHLCAiXHgwMCIsIDEpOwkvKiBicmlnaHRuZXNzICovCisJZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBVVkdBSU5fUkVHLCAiXHgxMCIsIDEpOwkvKiBzYXR1cmF0aW9uICovCisJZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBVT0ZGU0VUX1JFRywgIlx4MDAiLCAxKTsKKwllbTI4eHhfd3JpdGVfcmVncyhkZXYsIFZPRkZTRVRfUkVHLCAiXHgwMCIsIDEpOworCWVtMjh4eF93cml0ZV9yZWdzKGRldiwgU0hBUlBORVNTX1JFRywgIlx4MDAiLCAxKTsKKworCWVtMjh4eF93cml0ZV9yZWdzKGRldiwgR0FNTUFfUkVHLCAiXHgyMCIsIDEpOworCWVtMjh4eF93cml0ZV9yZWdzKGRldiwgUkdBSU5fUkVHLCAiXHgyMCIsIDEpOworCWVtMjh4eF93cml0ZV9yZWdzKGRldiwgR0dBSU5fUkVHLCAiXHgyMCIsIDEpOworCWVtMjh4eF93cml0ZV9yZWdzKGRldiwgQkdBSU5fUkVHLCAiXHgyMCIsIDEpOworCWVtMjh4eF93cml0ZV9yZWdzKGRldiwgUk9GRlNFVF9SRUcsICJceDAwIiwgMSk7CisJZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBHT0ZGU0VUX1JFRywgIlx4MDAiLCAxKTsKKwlyZXR1cm4gZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBCT0ZGU0VUX1JFRywgIlx4MDAiLCAxKTsKK30KKworaW50IGVtMjh4eF9jYXB0dXJlX3N0YXJ0KHN0cnVjdCBlbTI4eHggKmRldiwgaW50IHN0YXJ0KQoreworCWludCByZXQ7CisJLyogRklYTUU6IHdoaWNoIGlzIHRoZSBiZXN0IG9yZGVyPyAqLworCS8qIHZpZGVvIHJlZ2lzdGVycyBhcmUgc2FtcGxlZCBieSBWUkVGICovCisJaWYgKChyZXQgPSBlbTI4eHhfd3JpdGVfcmVnX2JpdHMoZGV2LCBVU0JTVVNQX1JFRywgc3RhcnQgPyAweDEwIDogMHgwMCwKKwkJCQkJICAweDEwKSkgPCAwKQorCQlyZXR1cm4gcmV0OworCS8qIGVuYWJsZSB2aWRlbyBjYXB0dXJlICovCisJcmV0dXJuIGVtMjh4eF93cml0ZV9yZWdzKGRldiwgVklORU5BQkxFX1JFRywgc3RhcnQgPyAiXHg2NyIgOiAiXHgyNyIsIDEpOworfQorCitpbnQgZW0yOHh4X291dGZtdF9zZXRfeXV2NDIyKHN0cnVjdCBlbTI4eHggKmRldikKK3sKKwllbTI4eHhfd3JpdGVfcmVncyhkZXYsIE9VVEZNVF9SRUcsICJceDM0IiwgMSk7CisJZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBWSU5NT0RFX1JFRywgIlx4MTAiLCAxKTsKKwlyZXR1cm4gZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBWSU5DVFJMX1JFRywgIlx4MTEiLCAxKTsKK30KKworaW50IGVtMjh4eF9hY2N1bXVsYXRvcl9zZXQoc3RydWN0IGVtMjh4eCAqZGV2LCB1OCB4bWluLCB1OCB4bWF4LCB1OCB5bWluLAorCQkJCSAgdTggeW1heCkKK3sKKwllbTI4eHhfY29yZWRiZygiZW0yOHh4IFNjYWxlOiAoJWQsJWQpLSglZCwlZClcbiIsIHhtaW4sIHltaW4sIHhtYXgsIHltYXgpOworCisJZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBYTUlOX1JFRywgJnhtaW4sIDEpOworCWVtMjh4eF93cml0ZV9yZWdzKGRldiwgWE1BWF9SRUcsICZ4bWF4LCAxKTsKKwllbTI4eHhfd3JpdGVfcmVncyhkZXYsIFlNSU5fUkVHLCAmeW1pbiwgMSk7CisJcmV0dXJuIGVtMjh4eF93cml0ZV9yZWdzKGRldiwgWU1BWF9SRUcsICZ5bWF4LCAxKTsKK30KKworaW50IGVtMjh4eF9jYXB0dXJlX2FyZWFfc2V0KHN0cnVjdCBlbTI4eHggKmRldiwgdTggaHN0YXJ0LCB1OCB2c3RhcnQsCisJCQkJICAgdTE2IHdpZHRoLCB1MTYgaGVpZ2h0KQoreworCXU4IGN3aWR0aCA9IHdpZHRoOworCXU4IGNoZWlnaHQgPSBoZWlnaHQ7CisJdTggb3ZlcmZsb3cgPSAoaGVpZ2h0ID4+IDcgJiAweDAyKSB8ICh3aWR0aCA+PiA4ICYgMHgwMSk7CisKKwllbTI4eHhfY29yZWRiZygiZW0yOHh4IEFyZWEgU2V0OiAoJWQsJWQpXG4iLCAod2lkdGggfCAob3ZlcmZsb3cgJiAyKSA8PCA3KSwKKwkJCShoZWlnaHQgfCAob3ZlcmZsb3cgJiAxKSA8PCA4KSk7CisKKwllbTI4eHhfd3JpdGVfcmVncyhkZXYsIEhTVEFSVF9SRUcsICZoc3RhcnQsIDEpOworCWVtMjh4eF93cml0ZV9yZWdzKGRldiwgVlNUQVJUX1JFRywgJnZzdGFydCwgMSk7CisJZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBDV0lEVEhfUkVHLCAmY3dpZHRoLCAxKTsKKwllbTI4eHhfd3JpdGVfcmVncyhkZXYsIENIRUlHSFRfUkVHLCAmY2hlaWdodCwgMSk7CisJcmV0dXJuIGVtMjh4eF93cml0ZV9yZWdzKGRldiwgT0ZMT1dfUkVHLCAmb3ZlcmZsb3csIDEpOworfQorCitpbnQgZW0yOHh4X3NjYWxlcl9zZXQoc3RydWN0IGVtMjh4eCAqZGV2LCB1MTYgaCwgdTE2IHYpCit7CisJdTggbW9kZTsKKwkvKiB0aGUgZW0yODAwIHNjYWxlciBvbmx5IHN1cHBvcnRzIHNjYWxpbmcgZG93biB0byA1MCUgKi8KKwlpZihkZXYtPmlzX2VtMjgwMCkKKwkJbW9kZSA9ICh2ID8gMHgyMCA6IDB4MDApIHwgKGggPyAweDEwIDogMHgwMCk7CisJZWxzZSB7CisJCXU4IGJ1ZlsyXTsKKwkJYnVmWzBdID0gaDsKKwkJYnVmWzFdID0gaCA+PiA4OworCQllbTI4eHhfd3JpdGVfcmVncyhkZXYsIEhTQ0FMRUxPV19SRUcsIChjaGFyICopYnVmLCAyKTsKKwkJYnVmWzBdID0gdjsKKwkJYnVmWzFdID0gdiA+PiA4OworCQllbTI4eHhfd3JpdGVfcmVncyhkZXYsIFZTQ0FMRUxPV19SRUcsIChjaGFyICopYnVmLCAyKTsKKwkJLyogaXQgc2VlbXMgdGhhdCBib3RoIEggYW5kIFYgc2NhbGVycyBtdXN0IGJlIGFjdGl2ZSB0byB3b3JrIGNvcnJlY3RseSAqLworCQltb2RlID0gKGggfHwgdik/IDB4MzA6IDB4MDA7CisJfQorCXJldHVybiBlbTI4eHhfd3JpdGVfcmVnX2JpdHMoZGV2LCBDT01QUl9SRUcsIG1vZGUsIDB4MzApOworfQorCisvKiBGSVhNRTogdGhpcyBvbmx5IGZ1bmN0aW9uIHJlYWQgdmFsdWVzIGZyb20gZGV2ICovCitpbnQgZW0yOHh4X3Jlc29sdXRpb25fc2V0KHN0cnVjdCBlbTI4eHggKmRldikKK3sKKwlpbnQgd2lkdGgsIGhlaWdodDsKKwl3aWR0aCA9IG5vcm1fbWF4dyhkZXYpOworCWhlaWdodCA9IG5vcm1fbWF4aChkZXYpID4+IDE7CisKKwllbTI4eHhfb3V0Zm10X3NldF95dXY0MjIoZGV2KTsKKwllbTI4eHhfYWNjdW11bGF0b3Jfc2V0KGRldiwgMSwgKHdpZHRoIC0gNCkgPj4gMiwgMSwgKGhlaWdodCAtIDQpID4+IDIpOworCWVtMjh4eF9jYXB0dXJlX2FyZWFfc2V0KGRldiwgMCwgMCwgd2lkdGggPj4gMiwgaGVpZ2h0ID4+IDIpOworCXJldHVybiBlbTI4eHhfc2NhbGVyX3NldChkZXYsIGRldi0+aHNjYWxlLCBkZXYtPnZzY2FsZSk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKiogaXNvYyB0cmFuc2ZlciBoYW5kbGluZyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZkZWYgRU5BQkxFX0RFQlVHX0lTT0NfRlJBTUVTCitzdGF0aWMgdm9pZCBlbTI4eHhfaXNvY19kdW1wKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaW50IGxlbiA9IDA7CisJaW50IG50cmFucyA9IDA7CisJaW50IGk7CisKKwlwcmludGsoS0VSTl9ERUJVRyAiaXNvY0lycTogc2Y9JWQgbnA9JWQgZWM9JXhcbiIsCisJICAgICAgIHVyYi0+c3RhcnRfZnJhbWUsIHVyYi0+bnVtYmVyX29mX3BhY2tldHMsCisJICAgICAgIHVyYi0+ZXJyb3JfY291bnQpOworCWZvciAoaSA9IDA7IGkgPCB1cmItPm51bWJlcl9vZl9wYWNrZXRzOyBpKyspIHsKKwkJdW5zaWduZWQgY2hhciAqYnVmID0KKwkJCQl1cmItPnRyYW5zZmVyX2J1ZmZlciArCisJCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5vZmZzZXQ7CisJCWludCBhbGVuID0gdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoOworCQlpZiAoYWxlbiA+IDApIHsKKwkJCWlmIChidWZbMF0gPT0gMHg4OCkgeworCQkJCW50cmFucysrOworCQkJCWxlbiArPSBhbGVuOworCQkJfSBlbHNlIGlmIChidWZbMF0gPT0gMHgyMikgeworCQkJCXByaW50ayhLRVJOX0RFQlVHCisJCQkJCQkiPSBsPSVkIG50PSVkIGJwcD0lZFxuIiwKKwkJCQlsZW4gLSA0ICogbnRyYW5zLCBudHJhbnMsCisJCQkJbnRyYW5zID09IDAgPyAwIDogbGVuIC8gbnRyYW5zKTsKKwkJCQludHJhbnMgPSAxOworCQkJCWxlbiA9IGFsZW47CisJCQl9IGVsc2UKKwkJCQlwcmludGsoS0VSTl9ERUJVRyAiIVxuIik7CisJCX0KKwkJcHJpbnRrKEtFUk5fREVCVUcgIiAgIG49JWQgcz0lZCBhbD0lZCAleFxuIiwgaSwKKwkJICAgICAgIHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzLAorCQkgICAgICAgdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoLAorCQkgICAgICAgKHVuc2lnbmVkIGludCkKKwkJCQkgICAgICAgKigodW5zaWduZWQgY2hhciAqKSh1cmItPnRyYW5zZmVyX2J1ZmZlciArCisJCQkJICAgICAgIHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uCisJCQkJICAgICAgIG9mZnNldCkpKTsKKwl9Cit9CisjZW5kaWYKKworc3RhdGljIGlubGluZSBpbnQgZW0yOHh4X2lzb2NfdmlkZW8oc3RydWN0IGVtMjh4eCAqZGV2LHN0cnVjdCBlbTI4eHhfZnJhbWVfdCAqKmYsCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgKmxvY2tfZmxhZ3MsIHVuc2lnbmVkIGNoYXIgYnVmKQoreworCWlmICghKGJ1ZiAmIDB4MDEpKSB7CisJCWlmICgoKmYpLT5zdGF0ZSA9PSBGX0dSQUJCSU5HKSB7CisJCQkvKnByZXZpb3VzIGZyYW1lIGlzIGluY29tcGxldGUgKi8KKwkJCWlmICgoKmYpLT5maWVsZGJ5dGVzdXNlZCA8IGRldi0+ZmllbGRfc2l6ZSkgeworCQkJCSgqZiktPnN0YXRlID0gRl9FUlJPUjsKKwkJCQllbTI4eHhfaXNvY2RiZyAoImRyb3BwaW5nIGluY29tcGxldGUgYm90dG9tIGZpZWxkICglaSBtaXNzaW5nIGJ5dGVzKSIsCisJCQkJCSBkZXYtPmZpZWxkX3NpemUtKCpmKS0+ZmllbGRieXRlc3VzZWQpOworCQkJfSBlbHNlIHsKKwkJCQkoKmYpLT5zdGF0ZSA9IEZfRE9ORTsKKwkJCQkoKmYpLT5idWYuYnl0ZXN1c2VkID0gZGV2LT5mcmFtZV9zaXplOworCQkJfQorCQl9CisJCWlmICgoKmYpLT5zdGF0ZSA9PSBGX0RPTkUgfHwgKCpmKS0+c3RhdGUgPT0gRl9FUlJPUikgeworCQkJLyogbW92ZSBjdXJyZW50IGZyYW1lIHRvIG91dHF1ZXVlIGFuZCBnZXQgbmV4dCBmcmVlIGJ1ZmZlciBmcm9tIGlucXVldWUgKi8KKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPiBxdWV1ZV9sb2NrLCAqbG9ja19mbGFncyk7CisJCQlsaXN0X21vdmVfdGFpbCgmKCpmKS0+ZnJhbWUsICZkZXYtPm91dHF1ZXVlKTsKKwkJCWlmICghbGlzdF9lbXB0eSgmZGV2LT5pbnF1ZXVlKSkKKwkJCQkoKmYpID0gbGlzdF9lbnRyeShkZXYtPiBpbnF1ZXVlLm5leHQsCisJCQlzdHJ1Y3QgZW0yOHh4X2ZyYW1lX3QsZnJhbWUpOworCQkJZWxzZQorCQkJCSgqZikgPSBOVUxMOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5xdWV1ZV9sb2NrLCpsb2NrX2ZsYWdzKTsKKwkJfQorCQlpZiAoISgqZikpIHsKKwkJCWVtMjh4eF9pc29jZGJnICgibmV3IGZyYW1lIGJ1dCBubyBidWZmZXIgaXMgZnJlZSIpOworCQkJcmV0dXJuIC0xOworCQl9CisJCWRvX2dldHRpbWVvZmRheSgmKCpmKS0+YnVmLnRpbWVzdGFtcCk7CisJCSgqZiktPmJ1Zi5zZXF1ZW5jZSA9ICsrZGV2LT5mcmFtZV9jb3VudDsKKwkJKCpmKS0+YnVmLmZpZWxkID0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOworCQkoKmYpLT5zdGF0ZSA9IEZfR1JBQkJJTkc7CisJCSgqZiktPmJ1Zi5ieXRlc3VzZWQgPSAwOworCQkoKmYpLT50b3BfZmllbGQgPSAxOworCQkoKmYpLT5maWVsZGJ5dGVzdXNlZCA9IDA7CisJfSBlbHNlIHsKKwkJCQkJLyogYWNxdWlyaW5nIGJvdHRvbSBmaWVsZCAqLworCQlpZiAoKCpmKS0+c3RhdGUgPT0gRl9HUkFCQklORykgeworCQkJaWYgKCEoKmYpLT50b3BfZmllbGQpIHsKKwkJCQkoKmYpLT5zdGF0ZSA9IEZfRVJST1I7CisJCQkJZW0yOHh4X2lzb2NkYmcgKCJ1bmV4cGVjdGVkIGJlZ2luIG9mIGJvdHRvbSBmaWVsZDsgZGlzY2FyZGluZyBpdCIpOworCQkJfSBlbHNlIGlmICgoKmYpLT4gZmllbGRieXRlc3VzZWQgPCBkZXYtPmZpZWxkX3NpemUgLSAxNzIpIHsKKwkJCQkoKmYpLT5zdGF0ZSA9IEZfRVJST1I7CisJCQkJZW0yOHh4X2lzb2NkYmcgKCJkcm9wcGluZyBpbmNvbXBsZXRlIHRvcCBmaWVsZCAoJWkgbWlzc2luZyBieXRlcykiLAorCQkJCQkgZGV2LT5maWVsZF9zaXplLSgqZiktPmZpZWxkYnl0ZXN1c2VkKTsKKwkJCX0gZWxzZSB7CisJCQkJKCpmKS0+dG9wX2ZpZWxkID0gMDsKKwkJCQkoKmYpLT5maWVsZGJ5dGVzdXNlZCA9IDA7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGVtMjh4eF9pc29jX3ZpZGVvX2NvcHkoc3RydWN0IGVtMjh4eCAqZGV2LAorCQkJCQkgIHN0cnVjdCBlbTI4eHhfZnJhbWVfdCAqKmYsIHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKwl2b2lkICpmaWVsZHN0YXJ0LCAqc3RhcnR3cml0ZSwgKnN0YXJ0cmVhZDsKKwlpbnQgbGluZXNkb25lLCBjdXJybGluZWRvbmUsIG9mZnNldCwgbGVuY29weSxyZW1haW47CisKKwlpZihkZXYtPmZyYW1lX3NpemUgIT0gKCpmKS0+YnVmLmxlbmd0aCl7CisJCWVtMjh4eF9lcnIoImZyYW1lX3NpemUgJWkgYW5kIGJ1Zi5sZW5ndGggJWkgYXJlIGRpZmZlcmVudCEhIVxuIixkZXYtPmZyYW1lX3NpemUsKCpmKS0+YnVmLmxlbmd0aCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoKCpmKS0+ZmllbGRieXRlc3VzZWQgKyBsZW4gPiBkZXYtPmZpZWxkX3NpemUpCisJCWxlbiA9ZGV2LT5maWVsZF9zaXplIC0gKCpmKS0+ZmllbGRieXRlc3VzZWQ7CisKKwlpZiAoYnVmWzBdICE9IDB4ODggJiYgYnVmWzBdICE9IDB4MjIpIHsKKwkJZW0yOHh4X2lzb2NkYmcoImZyYW1lIGlzIG5vdCBjb21wbGV0ZVxuIik7CisJCXN0YXJ0cmVhZCA9IGJ1ZjsKKwkJbGVuKz00OworCX0gZWxzZQorCQlzdGFydHJlYWQgPSBidWYgKyA0OworCisJcmVtYWluID0gbGVuOworCisJaWYgKCgqZiktPnRvcF9maWVsZCkKKwkJZmllbGRzdGFydCA9ICgqZiktPmJ1Zm1lbTsKKwllbHNlCisJCWZpZWxkc3RhcnQgPSAoKmYpLT5idWZtZW0gKyBkZXYtPmJ5dGVzcGVybGluZTsKKworCWxpbmVzZG9uZSA9ICgqZiktPmZpZWxkYnl0ZXN1c2VkIC8gZGV2LT5ieXRlc3BlcmxpbmU7CisJY3VycmxpbmVkb25lID0gKCpmKS0+ZmllbGRieXRlc3VzZWQgJSBkZXYtPmJ5dGVzcGVybGluZTsKKwlvZmZzZXQgPSBsaW5lc2RvbmUgKiBkZXYtPmJ5dGVzcGVybGluZSAqIDIgKyBjdXJybGluZWRvbmU7CisJc3RhcnR3cml0ZSA9IGZpZWxkc3RhcnQgKyBvZmZzZXQ7CisJbGVuY29weSA9IGRldi0+Ynl0ZXNwZXJsaW5lIC0gY3VycmxpbmVkb25lOworCWxlbmNvcHkgPSBsZW5jb3B5ID4gcmVtYWluID8gcmVtYWluIDogbGVuY29weTsKKworCW1lbWNweShzdGFydHdyaXRlLCBzdGFydHJlYWQsIGxlbmNvcHkpOworCXJlbWFpbiAtPSBsZW5jb3B5OworCisJd2hpbGUgKHJlbWFpbiA+IDApIHsKKwkJc3RhcnR3cml0ZSArPSBsZW5jb3B5ICsgZGV2LT5ieXRlc3BlcmxpbmU7CisJCXN0YXJ0cmVhZCArPSBsZW5jb3B5OworCQlpZiAoZGV2LT5ieXRlc3BlcmxpbmUgPiByZW1haW4pCisJCQlsZW5jb3B5ID0gcmVtYWluOworCQllbHNlCisJCQlsZW5jb3B5ID0gZGV2LT5ieXRlc3BlcmxpbmU7CisKKwkJbWVtY3B5KHN0YXJ0d3JpdGUsIHN0YXJ0cmVhZCwgbGVuY29weSk7CisJCXJlbWFpbiAtPSBsZW5jb3B5OworCX0KKworCSgqZiktPmZpZWxkYnl0ZXN1c2VkICs9IGxlbjsKK30KKworLyoKKyAqIGVtMjh4eF9pc29JcnEoKQorICogaGFuZGxlcyB0aGUgaW5jb21pbmcgaXNvYyB1cmJzIGFuZCBmaWxscyB0aGUgZnJhbWVzIGZyb20gb3VyIGlucXVldWUKKyAqLwordm9pZCBlbTI4eHhfaXNvY0lycShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBlbTI4eHggKmRldiA9IHVyYi0+Y29udGV4dDsKKwlpbnQgaSwgc3RhdHVzOworCXN0cnVjdCBlbTI4eHhfZnJhbWVfdCAqKmY7CisJdW5zaWduZWQgbG9uZyBsb2NrX2ZsYWdzOworCisJaWYgKCFkZXYpCisJCXJldHVybjsKKyNpZmRlZiBFTkFCTEVfREVCVUdfSVNPQ19GUkFNRVMKKwlpZiAoaXNvY19kZWJ1Zz4xKQorCQllbTI4eHhfaXNvY19kdW1wKHVyYiwgcmVncyk7CisjZW5kaWYKKworCWlmICh1cmItPnN0YXR1cyA9PSAtRU5PRU5UKQorCQlyZXR1cm47CisKKwlmID0gJmRldi0+ZnJhbWVfY3VycmVudDsKKworCWlmIChkZXYtPnN0cmVhbSA9PSBTVFJFQU1fSU5URVJSVVBUKSB7CisJCWRldi0+c3RyZWFtID0gU1RSRUFNX09GRjsKKwkJaWYgKCgqZikpCisJCQkoKmYpLT5zdGF0ZSA9IEZfUVVFVUVEOworCQllbTI4eHhfaXNvY2RiZygic3RyZWFtIGludGVycnVwdGVkIik7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZGV2LT53YWl0X3N0cmVhbSk7CisJfQorCisJaWYgKChkZXYtPnN0YXRlICYgREVWX0RJU0NPTk5FQ1RFRCkgfHwgKGRldi0+c3RhdGUgJiBERVZfTUlTQ09ORklHVVJFRCkpCisJCXJldHVybjsKKworCWlmIChkZXYtPnN0cmVhbSA9PSBTVFJFQU1fT04gJiYgIWxpc3RfZW1wdHkoJmRldi0+aW5xdWV1ZSkpIHsKKwkJaWYgKCEoKmYpKQorCQkJKCpmKSA9IGxpc3RfZW50cnkoZGV2LT5pbnF1ZXVlLm5leHQsCisJCXN0cnVjdCBlbTI4eHhfZnJhbWVfdCwgZnJhbWUpOworCisJCWZvciAoaSA9IDA7IGkgPCB1cmItPm51bWJlcl9vZl9wYWNrZXRzOyBpKyspIHsKKwkJCXVuc2lnbmVkIGNoYXIgKmJ1ZiA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyICsKKwkJCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5vZmZzZXQ7CisJCQlpbnQgbGVuID0gdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoIC0gNDsKKworCQkJaWYgKHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzKSB7CisJCQkJZW0yOHh4X2lzb2NkYmcoImRhdGEgZXJyb3I6IFslZF0gbGVuPSVkLCBzdGF0dXM9JWQiLCBpLAorCQkJCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGgsCisJCQkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzKTsKKwkJCQlpZiAodXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXMgIT0gLUVQUk9UTykKKwkJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAodXJiLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoIDw9IDApIHsKKwkJCQllbTI4eHhfaXNvY2RiZygicGFja2V0ICVkIGlzIGVtcHR5IixpKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICh1cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGggPgorCQkJCQkJIGRldi0+bWF4X3BrdF9zaXplKSB7CisJCQkJZW0yOHh4X2lzb2NkYmcoInBhY2tldCBiaWdnZXIgdGhhbiBwYWNrZXQgc2l6ZSIpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJLypuZXcgZnJhbWUgKi8KKwkJCWlmIChidWZbMF0gPT0gMHgyMiAmJiBidWZbMV0gPT0gMHg1YSkgeworCQkJCWVtMjh4eF9pc29jZGJnKCJWaWRlbyBmcmFtZSwgbGVuZ3RoPSVpISIsbGVuKTsKKworCQkJCWlmIChlbTI4eHhfaXNvY192aWRlbyhkZXYsZiwmbG9ja19mbGFncyxidWZbMl0pKQorCQkJCWJyZWFrOworCQkJfSBlbHNlIGlmIChidWZbMF09PTB4MzMgJiYgYnVmWzFdPT0weDk1ICYmIGJ1ZlsyXT09MHgwMCkgeworCQkJCWVtMjh4eF9pc29jZGJnKCJWQkkgSEVBREVSISEhIik7CisJCQl9CisKKwkJCS8qIGFjdHVhbCBjb3B5aW5nICovCisJCQlpZiAoKCpmKS0+c3RhdGUgPT0gRl9HUkFCQklORykgeworCQkJCWVtMjh4eF9pc29jX3ZpZGVvX2NvcHkoZGV2LGYsYnVmLCBsZW4pOworCQkJfQorCQl9CisJfQorCisJZm9yIChpID0gMDsgaSA8IHVyYi0+bnVtYmVyX29mX3BhY2tldHM7IGkrKykgeworCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1cyA9IDA7CisJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aCA9IDA7CisJfQorCisJdXJiLT5zdGF0dXMgPSAwOworCWlmICgoc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKSkpIHsKKwkJZW0yOHh4X2VycmRldigicmVzdWJtaXQgb2YgdXJiIGZhaWxlZCAoZXJyb3I9JWkpXG4iLCBzdGF0dXMpOworCQlkZXYtPnN0YXRlIHw9IERFVl9NSVNDT05GSUdVUkVEOworCX0KKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJmRldi0+d2FpdF9mcmFtZSk7CisJcmV0dXJuOworfQorCisvKgorICogZW0yOHh4X3VuaW5pdF9pc29jKCkKKyAqIGRlYWxsb2NhdGVzIHRoZSBidWZmZXJzIGFuZCB1cmJzIGFsbG9jYXRlZCBkdXJpbmcgZW0yOHh4X2luaXRfaW9zYygpCisgKi8KK3ZvaWQgZW0yOHh4X3VuaW5pdF9pc29jKHN0cnVjdCBlbTI4eHggKmRldikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBFTTI4WFhfTlVNX0JVRlM7IGkrKykgeworCQlpZiAoZGV2LT51cmJbaV0pIHsKKwkJCXVzYl9raWxsX3VyYihkZXYtPnVyYltpXSk7CisJCQlpZiAoZGV2LT50cmFuc2Zlcl9idWZmZXJbaV0peworCQkJCXVzYl9idWZmZXJfZnJlZShkZXYtPnVkZXYsKEVNMjhYWF9OVU1fUEFDS0VUUypkZXYtPm1heF9wa3Rfc2l6ZSksZGV2LT50cmFuc2Zlcl9idWZmZXJbaV0sZGV2LT51cmJbaV0tPnRyYW5zZmVyX2RtYSk7CisJCQl9CisJCQl1c2JfZnJlZV91cmIoZGV2LT51cmJbaV0pOworCQl9CisJCWRldi0+dXJiW2ldID0gTlVMTDsKKwkJZGV2LT50cmFuc2Zlcl9idWZmZXJbaV0gPSBOVUxMOworCX0KKwllbTI4eHhfY2FwdHVyZV9zdGFydChkZXYsIDApOworfQorCisvKgorICogZW0yOHh4X2luaXRfaXNvYygpCisgKiBhbGxvY2F0ZXMgdHJhbnNmZXIgYnVmZmVycyBhbmQgc3VibWl0cyB0aGUgdXJicyBmb3IgaXNvYyB0cmFuc2ZlcgorICovCitpbnQgZW0yOHh4X2luaXRfaXNvYyhzdHJ1Y3QgZW0yOHh4ICpkZXYpCit7CisJLyogY2hhbmdlIGludGVyZmFjZSB0byAzIHdoaWNoIGFsbG93ZXMgdGhlIGJpZ2dlc3QgcGFja2V0IHNpemVzICovCisJaW50IGksIGVyckNvZGU7CisJY29uc3QgaW50IHNiX3NpemUgPSBFTTI4WFhfTlVNX1BBQ0tFVFMgKiBkZXYtPm1heF9wa3Rfc2l6ZTsKKworCS8qIHJlc2V0IHN0cmVhbWluZyB2YXJzICovCisJZGV2LT5mcmFtZV9jdXJyZW50ID0gTlVMTDsKKwlkZXYtPmZyYW1lX2NvdW50ID0gMDsKKworCS8qIGFsbG9jYXRlIHVyYnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgRU0yOFhYX05VTV9CVUZTOyBpKyspIHsKKwkJc3RydWN0IHVyYiAqdXJiOworCQlpbnQgaiwgazsKKwkJLyogYWxsb2NhdGUgdHJhbnNmZXIgYnVmZmVyICovCisJCXVyYiA9IHVzYl9hbGxvY191cmIoRU0yOFhYX05VTV9QQUNLRVRTLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCF1cmIpeworCQkJZW0yOHh4X2VycmRldigiY2Fubm90IGFsbG9jIHVyYiAlaVxuIiwgaSk7CisJCQllbTI4eHhfdW5pbml0X2lzb2MoZGV2KTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCWRldi0+dHJhbnNmZXJfYnVmZmVyW2ldID0gdXNiX2J1ZmZlcl9hbGxvYyhkZXYtPnVkZXYsIHNiX3NpemUsIEdGUF9LRVJORUwsJnVyYi0+dHJhbnNmZXJfZG1hKTsKKwkJaWYgKCFkZXYtPnRyYW5zZmVyX2J1ZmZlcltpXSkgeworCQkJZW0yOHh4X2VycmRldgorCQkJCQkoInVuYWJsZSB0byBhbGxvY2F0ZSAlaSBieXRlcyBmb3IgdHJhbnNmZXIgYnVmZmVyICVpXG4iLAorCQkJCQkgc2Jfc2l6ZSwgaSk7CisJCQllbTI4eHhfdW5pbml0X2lzb2MoZGV2KTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCW1lbXNldChkZXYtPnRyYW5zZmVyX2J1ZmZlcltpXSwgMCwgc2Jfc2l6ZSk7CisJCXVyYi0+ZGV2ID0gZGV2LT51ZGV2OworCQl1cmItPmNvbnRleHQgPSBkZXY7CisJCXVyYi0+cGlwZSA9IHVzYl9yY3Zpc29jcGlwZShkZXYtPnVkZXYsIDB4ODIpOworCQl1cmItPnRyYW5zZmVyX2ZsYWdzID0gVVJCX0lTT19BU0FQOworCQl1cmItPmludGVydmFsID0gMTsKKwkJdXJiLT50cmFuc2Zlcl9idWZmZXIgPSBkZXYtPnRyYW5zZmVyX2J1ZmZlcltpXTsKKwkJdXJiLT5jb21wbGV0ZSA9IGVtMjh4eF9pc29jSXJxOworCQl1cmItPm51bWJlcl9vZl9wYWNrZXRzID0gRU0yOFhYX05VTV9QQUNLRVRTOworCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBzYl9zaXplOworCQlmb3IgKGogPSBrID0gMDsgaiA8IEVNMjhYWF9OVU1fUEFDS0VUUzsKKwkJCQlqKyssIGsgKz0gZGV2LT5tYXhfcGt0X3NpemUpIHsKKwkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2Nbal0ub2Zmc2V0ID0gazsKKwkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2Nbal0ubGVuZ3RoID0KKwkJCQlkZXYtPm1heF9wa3Rfc2l6ZTsKKwkJfQorCQlkZXYtPnVyYltpXSA9IHVyYjsKKwl9CisKKwkvKiBzdWJtaXQgdXJicyAqLworCWZvciAoaSA9IDA7IGkgPCBFTTI4WFhfTlVNX0JVRlM7IGkrKykgeworCQllcnJDb2RlID0gdXNiX3N1Ym1pdF91cmIoZGV2LT51cmJbaV0sIEdGUF9LRVJORUwpOworCQlpZiAoZXJyQ29kZSkgeworCQkJZW0yOHh4X2VycmRldigic3VibWl0IG9mIHVyYiAlaSBmYWlsZWQgKGVycm9yPSVpKVxuIiwgaSwKKwkJCQkgICAgICBlcnJDb2RlKTsKKwkJCWVtMjh4eF91bmluaXRfaXNvYyhkZXYpOworCQkJcmV0dXJuIGVyckNvZGU7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IGVtMjh4eF9zZXRfYWx0ZXJuYXRlKHN0cnVjdCBlbTI4eHggKmRldikKK3sKKwlpbnQgZXJyQ29kZSwgcHJldl9hbHQgPSBkZXYtPmFsdDsKKwlkZXYtPmFsdCA9IGFsdDsKKwlpZiAoZGV2LT5hbHQgPT0gMCkgeworCQlpbnQgaTsKKwkJZm9yKGk9MDtpPCBkZXYtPm51bV9hbHQ7IGkrKykKKwkJCWlmKGRldi0+YWx0X21heF9wa3Rfc2l6ZVtpXT5kZXYtPmFsdF9tYXhfcGt0X3NpemVbZGV2LT5hbHRdKQorCQkJCWRldi0+YWx0PWk7CisJfQorCisJaWYgKGRldi0+YWx0ICE9IHByZXZfYWx0KSB7CisJCWRldi0+bWF4X3BrdF9zaXplID0gZGV2LT5hbHRfbWF4X3BrdF9zaXplW2Rldi0+YWx0XTsKKwkJZW0yOHh4X2NvcmVkYmcoInNldHRpbmcgYWx0ZXJuYXRlICVkIHdpdGggd01heFBhY2tldFNpemU9JXVcbiIsIGRldi0+YWx0LAorCQkgICAgICAgZGV2LT5tYXhfcGt0X3NpemUpOworCQllcnJDb2RlID0gdXNiX3NldF9pbnRlcmZhY2UoZGV2LT51ZGV2LCAwLCBkZXYtPmFsdCk7CisJCWlmIChlcnJDb2RlIDwgMCkgeworCQkJZW0yOHh4X2VycmRldiAoImNhbm5vdCBjaGFuZ2UgYWx0ZXJuYXRlIG51bWJlciB0byAlZCAoZXJyb3I9JWkpXG4iLAorCQkJCQkJCWRldi0+YWx0LCBlcnJDb2RlKTsKKwkJCXJldHVybiBlcnJDb2RlOworCQl9CisJfQorCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWkyYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWkyYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzMmQ5ODUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtaTJjLmMKQEAgLTAsMCArMSw1ODYgQEAKKy8qCisgICBlbTI4eHgtaTJjLmMgLSBkcml2ZXIgZm9yIEVtcGlhIEVNMjgwMC9FTTI4MjAvMjg0MCBVU0IgdmlkZW8gY2FwdHVyZSBkZXZpY2VzCisKKyAgIENvcHlyaWdodCAoQykgMjAwNSBMdWRvdmljbyBDYXZlZG9uIDxjYXZlZG9uQHNzc3VwLml0PgorCQkgICAgICBNYXJrdXMgUmVjaGJlcmdlciA8bXJlY2hiZXJnZXJAZ21haWwuY29tPgorCQkgICAgICBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAYnJ0dXJiby5jb20uYnI+CisJCSAgICAgIFNhc2NoYSBTb21tZXIgPHNhc2NoYXNvbW1lckBmcmVlbmV0LmRlPgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb19kZWNvZGVyLmg+CisKKyNpbmNsdWRlICJlbTI4eHguaCIKKyNpbmNsdWRlIDxtZWRpYS90dW5lci5oPgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgdW5zaWduZWQgaW50IGkyY19zY2FuID0gMDsKK21vZHVsZV9wYXJhbShpMmNfc2NhbiwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoaTJjX3NjYW4sICJzY2FuIGkyYyBidXMgYXQgaW5zbW9kIHRpbWUiKTsKKworc3RhdGljIHVuc2lnbmVkIGludCBpMmNfZGVidWcgPSAwOworbW9kdWxlX3BhcmFtKGkyY19kZWJ1ZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoaTJjX2RlYnVnLCAiZW5hYmxlIGRlYnVnIG1lc3NhZ2VzIFtpMmNdIik7CisKKyNkZWZpbmUgZHByaW50azEobHZsLGZtdCwgYXJncy4uLikgaWYgKGkyY19kZWJ1Zz49bHZsKSBkbyB7XAorCQkJcHJpbnRrKGZtdCAsICMjYXJncyk7IH0gd2hpbGUgKDApCisjZGVmaW5lIGRwcmludGsyKGx2bCxmbXQsIGFyZ3MuLi4pIGlmIChpMmNfZGVidWc+PWx2bCkgZG97IFwKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlcyBhdCAlczogIiBmbXQsIFwKKwkJCWRldi0+bmFtZSwgX19GVU5DVElPTl9fICwgIyNhcmdzKTsgfSB3aGlsZSAoMCkKKworLyoKKyAqIGVtMjgwMF9pMmNfc2VuZF9tYXg0KCkKKyAqIHNlbmQgdXAgdG8gNCBieXRlcyB0byB0aGUgaTJjIGRldmljZQorICovCitzdGF0aWMgaW50IGVtMjgwMF9pMmNfc2VuZF9tYXg0KHN0cnVjdCBlbTI4eHggKmRldiwgdW5zaWduZWQgY2hhciBhZGRyLAorCQkJCWNoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKwlpbnQgcmV0OworCWludCB3cml0ZV90aW1lb3V0OworCXVuc2lnbmVkIGNoYXIgYjJbNl07CisJQlVHX09OKGxlbiA8IDEgfHwgbGVuID4gNCk7CisJYjJbNV0gPSAweDgwICsgbGVuIC0gMTsKKwliMls0XSA9IGFkZHI7CisJYjJbM10gPSBidWZbMF07CisJaWYgKGxlbiA+IDEpCisJCWIyWzJdID0gYnVmWzFdOworCWlmIChsZW4gPiAyKQorCQliMlsxXSA9IGJ1ZlsyXTsKKwlpZiAobGVuID4gMykKKwkJYjJbMF0gPSBidWZbM107CisKKwlyZXQgPSBkZXYtPmVtMjh4eF93cml0ZV9yZWdzKGRldiwgNCAtIGxlbiwgJmIyWzQgLSBsZW5dLCAyICsgbGVuKTsKKwlpZiAocmV0ICE9IDIgKyBsZW4pIHsKKwkJZW0yOHh4X3dhcm4oIndyaXR0aW5nIHRvIGkyYyBkZXZpY2UgZmFpbGVkIChlcnJvcj0laSlcbiIsIHJldCk7CisJCXJldHVybiAtRUlPOworCX0KKwlmb3IgKHdyaXRlX3RpbWVvdXQgPSBFTTI4MDBfSTJDX1dSSVRFX1RJTUVPVVQ7IHdyaXRlX3RpbWVvdXQgPiAwOworCSAgICAgd3JpdGVfdGltZW91dCAtPSA1KSB7CisJCXJldCA9IGRldi0+ZW0yOHh4X3JlYWRfcmVnKGRldiwgMHgwNSk7CisJCWlmIChyZXQgPT0gMHg4MCArIGxlbiAtIDEpCisJCQlyZXR1cm4gbGVuOworCQltZGVsYXkoNSk7CisJfQorCWVtMjh4eF93YXJuKCJpMmMgd3JpdGUgdGltZWQgb3V0XG4iKTsKKwlyZXR1cm4gLUVJTzsKK30KKworLyoKKyAqIGVtMjgwMF9pMmNfc2VuZF9ieXRlcygpCisgKi8KK3N0YXRpYyBpbnQgZW0yODAwX2kyY19zZW5kX2J5dGVzKHZvaWQgKmRhdGEsIHVuc2lnbmVkIGNoYXIgYWRkciwgY2hhciAqYnVmLAorCQkJCSBzaG9ydCBsZW4pCit7CisJY2hhciAqYnVmUHRyID0gYnVmOworCWludCByZXQ7CisJaW50IHdyY291bnQgPSAwOworCWludCBjb3VudDsKKwlpbnQgbWF4TGVuID0gNDsKKwlzdHJ1Y3QgZW0yOHh4ICpkZXYgPSAoc3RydWN0IGVtMjh4eCAqKWRhdGE7CisJd2hpbGUgKGxlbiA+IDApIHsKKwkJY291bnQgPSAobGVuID4gbWF4TGVuKSA/IG1heExlbiA6IGxlbjsKKwkJcmV0ID0gZW0yODAwX2kyY19zZW5kX21heDQoZGV2LCBhZGRyLCBidWZQdHIsIGNvdW50KTsKKwkJaWYgKHJldCA+IDApIHsKKwkJCWxlbiAtPSBjb3VudDsKKwkJCWJ1ZlB0ciArPSBjb3VudDsKKwkJCXdyY291bnQgKz0gY291bnQ7CisJCX0gZWxzZQorCQkJcmV0dXJuIChyZXQgPCAwKSA/IHJldCA6IC1FRkFVTFQ7CisJfQorCXJldHVybiB3cmNvdW50OworfQorCisvKgorICogZW0yODAwX2kyY19jaGVja19mb3JfZGV2aWNlKCkKKyAqIGNoZWNrIGlmIHRoZXJlIGlzIGEgaTJjX2RldmljZSBhdCB0aGUgc3VwcGxpZWQgYWRkcmVzcworICovCitzdGF0aWMgaW50IGVtMjgwMF9pMmNfY2hlY2tfZm9yX2RldmljZShzdHJ1Y3QgZW0yOHh4ICpkZXYsIHVuc2lnbmVkIGNoYXIgYWRkcikKK3sKKwljaGFyIG1zZzsKKwlpbnQgcmV0OworCWludCB3cml0ZV90aW1lb3V0OworCW1zZyA9IGFkZHI7CisJcmV0ID0gZGV2LT5lbTI4eHhfd3JpdGVfcmVncyhkZXYsIDB4MDQsICZtc2csIDEpOworCWlmIChyZXQgPCAwKSB7CisJCWVtMjh4eF93YXJuKCJzZXR0aW5nIGkyYyBkZXZpY2UgYWRkcmVzcyBmYWlsZWQgKGVycm9yPSVpKVxuIiwKKwkJCSAgICByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwltc2cgPSAweDg0OworCXJldCA9IGRldi0+ZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCAweDA1LCAmbXNnLCAxKTsKKwlpZiAocmV0IDwgMCkgeworCQllbTI4eHhfd2FybigicHJlcGFyaW5nIGkyYyByZWFkIGZhaWxlZCAoZXJyb3I9JWkpXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwlmb3IgKHdyaXRlX3RpbWVvdXQgPSBFTTI4MDBfSTJDX1dSSVRFX1RJTUVPVVQ7IHdyaXRlX3RpbWVvdXQgPiAwOworCSAgICAgd3JpdGVfdGltZW91dCAtPSA1KSB7CisJCXVuc2lnbmVkIG1zZyA9IGRldi0+ZW0yOHh4X3JlYWRfcmVnKGRldiwgMHg1KTsKKwkJaWYgKG1zZyA9PSAweDk0KQorCQkJcmV0dXJuIC1FTk9ERVY7CisJCWVsc2UgaWYgKG1zZyA9PSAweDg0KQorCQkJcmV0dXJuIDA7CisJCW1kZWxheSg1KTsKKwl9CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKKy8qCisgKiBlbTI4MDBfaTJjX3JlY3ZfYnl0ZXMoKQorICogcmVhZCBmcm9tIHRoZSBpMmMgZGV2aWNlCisgKi8KK3N0YXRpYyBpbnQgZW0yODAwX2kyY19yZWN2X2J5dGVzKHN0cnVjdCBlbTI4eHggKmRldiwgdW5zaWduZWQgY2hhciBhZGRyLAorCQkJCSBjaGFyICpidWYsIGludCBsZW4pCit7CisJaW50IHJldDsKKwkvKiBjaGVjayBmb3IgdGhlIGRldmljZSBhbmQgc2V0IGkyYyByZWFkIGFkZHJlc3MgKi8KKwlyZXQgPSBlbTI4MDBfaTJjX2NoZWNrX2Zvcl9kZXZpY2UoZGV2LCBhZGRyKTsKKwlpZiAocmV0KSB7CisJCWVtMjh4eF93YXJuCisJCSAgICAoInByZXBhcmluZyByZWFkIGF0IGkyYyBhZGRyZXNzIDB4JXggZmFpbGVkIChlcnJvcj0laSlcbiIsCisJCSAgICAgYWRkciwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcmV0ID0gZGV2LT5lbTI4eHhfcmVhZF9yZWdfcmVxX2xlbihkZXYsIDB4MCwgMHgzLCBidWYsIGxlbik7CisJaWYgKHJldCA8IDApIHsKKwkJZW0yOHh4X3dhcm4oInJlYWRpbmcgZnJvbSBpMmMgZGV2aWNlIGF0IDB4JXggZmFpbGVkIChlcnJvcj0laSkiLAorCQkJICAgIGFkZHIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBlbTI4eHhfaTJjX3NlbmRfYnl0ZXMoKQorICogdW50ZXN0ZWQgZm9yIG1vcmUgdGhhbiA0IGJ5dGVzCisgKi8KK3N0YXRpYyBpbnQgZW0yOHh4X2kyY19zZW5kX2J5dGVzKHZvaWQgKmRhdGEsIHVuc2lnbmVkIGNoYXIgYWRkciwgY2hhciAqYnVmLAorCQkJCSBzaG9ydCBsZW4sIGludCBzdG9wKQoreworCWludCB3cmNvdW50ID0gMDsKKwlzdHJ1Y3QgZW0yOHh4ICpkZXYgPSAoc3RydWN0IGVtMjh4eCAqKWRhdGE7CisKKwl3cmNvdW50ID0gZGV2LT5lbTI4eHhfd3JpdGVfcmVnc19yZXEoZGV2LCBzdG9wID8gMiA6IDMsIGFkZHIsIGJ1ZiwgbGVuKTsKKworCXJldHVybiB3cmNvdW50OworfQorCisvKgorICogZW0yOHh4X2kyY19yZWN2X2J5dGVzKCkKKyAqIHJlYWQgYSBieXRlIGZyb20gdGhlIGkyYyBkZXZpY2UKKyAqLworc3RhdGljIGludCBlbTI4eHhfaTJjX3JlY3ZfYnl0ZXMoc3RydWN0IGVtMjh4eCAqZGV2LCB1bnNpZ25lZCBjaGFyIGFkZHIsCisJCQkJIGNoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKwlpbnQgcmV0OworCXJldCA9IGRldi0+ZW0yOHh4X3JlYWRfcmVnX3JlcV9sZW4oZGV2LCAyLCBhZGRyLCBidWYsIGxlbik7CisJaWYgKHJldCA8IDApIHsKKwkJZW0yOHh4X3dhcm4oInJlYWRpbmcgaTJjIGRldmljZSBmYWlsZWQgKGVycm9yPSVpKVxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJaWYgKGRldi0+ZW0yOHh4X3JlYWRfcmVnKGRldiwgMHg1KSAhPSAwKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogZW0yOHh4X2kyY19jaGVja19mb3JfZGV2aWNlKCkKKyAqIGNoZWNrIGlmIHRoZXJlIGlzIGEgaTJjX2RldmljZSBhdCB0aGUgc3VwcGxpZWQgYWRkcmVzcworICovCitzdGF0aWMgaW50IGVtMjh4eF9pMmNfY2hlY2tfZm9yX2RldmljZShzdHJ1Y3QgZW0yOHh4ICpkZXYsIHVuc2lnbmVkIGNoYXIgYWRkcikKK3sKKwljaGFyIG1zZzsKKwlpbnQgcmV0OworCW1zZyA9IGFkZHI7CisKKwlyZXQgPSBkZXYtPmVtMjh4eF9yZWFkX3JlZ19yZXEoZGV2LCAyLCBhZGRyKTsKKwlpZiAocmV0IDwgMCkgeworCQllbTI4eHhfd2FybigicmVhZGluZyBmcm9tIGkyYyBkZXZpY2UgZmFpbGVkIChlcnJvcj0laSlcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCWlmIChkZXYtPmVtMjh4eF9yZWFkX3JlZyhkZXYsIDB4NSkgIT0gMCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBlbTI4eHhfaTJjX3hmZXIoKQorICogdGhlIG1haW4gaTJjIHRyYW5zZmVyIGZ1bmN0aW9uCisgKi8KK3N0YXRpYyBpbnQgZW0yOHh4X2kyY194ZmVyKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsCisJCQkgICBzdHJ1Y3QgaTJjX21zZyBtc2dzW10sIGludCBudW0pCit7CisJc3RydWN0IGVtMjh4eCAqZGV2ID0gaTJjX2FkYXAtPmFsZ29fZGF0YTsKKwlpbnQgYWRkciwgcmMsIGksIGJ5dGU7CisKKwlpZiAobnVtIDw9IDApCisJCXJldHVybiAwOworCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgeworCQlhZGRyID0gbXNnc1tpXS5hZGRyIDw8IDE7CisJCWRwcmludGsyKDIsIiVzICVzIGFkZHI9JXggbGVuPSVkOiIsCisJCQkgKG1zZ3NbaV0uZmxhZ3MgJiBJMkNfTV9SRCkgPyAicmVhZCIgOiAid3JpdGUiLAorCQkJIGkgPT0gbnVtIC0gMSA/ICJzdG9wIiA6ICJub25zdG9wIiwgYWRkciwgbXNnc1tpXS5sZW4pOworCQlpZiAoIW1zZ3NbaV0ubGVuKSB7CS8qIG5vIGxlbjogY2hlY2sgb25seSBmb3IgZGV2aWNlIHByZXNlbmNlICovCisJCQlpZiAoZGV2LT5pc19lbTI4MDApCisJCQkJcmMgPSBlbTI4MDBfaTJjX2NoZWNrX2Zvcl9kZXZpY2UoZGV2LCBhZGRyKTsKKwkJCWVsc2UKKwkJCQlyYyA9IGVtMjh4eF9pMmNfY2hlY2tfZm9yX2RldmljZShkZXYsIGFkZHIpOworCQkJaWYgKHJjIDwgMCkgeworCQkJCWRwcmludGsyKDIsIiBubyBkZXZpY2VcbiIpOworCQkJCXJldHVybiByYzsKKwkJCX0KKworCQl9IGVsc2UgaWYgKG1zZ3NbaV0uZmxhZ3MgJiBJMkNfTV9SRCkgeworCQkJLyogcmVhZCBieXRlcyAqLworCQkJaWYgKGRldi0+aXNfZW0yODAwKQorCQkJCXJjID0gZW0yODAwX2kyY19yZWN2X2J5dGVzKGRldiwgYWRkciwKKwkJCQkJCQkgICBtc2dzW2ldLmJ1ZiwKKwkJCQkJCQkgICBtc2dzW2ldLmxlbik7CisJCQllbHNlCisJCQkJcmMgPSBlbTI4eHhfaTJjX3JlY3ZfYnl0ZXMoZGV2LCBhZGRyLAorCQkJCQkJCSAgIG1zZ3NbaV0uYnVmLAorCQkJCQkJCSAgIG1zZ3NbaV0ubGVuKTsKKwkJCWlmIChpMmNfZGVidWc+PTIpIHsKKwkJCQlmb3IgKGJ5dGUgPSAwOyBieXRlIDwgbXNnc1tpXS5sZW47IGJ5dGUrKykgeworCQkJCQlwcmludGsoIiAlMDJ4IiwgbXNnc1tpXS5idWZbYnl0ZV0pOworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qIHdyaXRlIGJ5dGVzICovCisJCQlpZiAoaTJjX2RlYnVnPj0yKSB7CisJCQkJZm9yIChieXRlID0gMDsgYnl0ZSA8IG1zZ3NbaV0ubGVuOyBieXRlKyspCisJCQkJCXByaW50aygiICUwMngiLCBtc2dzW2ldLmJ1ZltieXRlXSk7CisJCQl9CisJCQlpZiAoZGV2LT5pc19lbTI4MDApCisJCQkJcmMgPSBlbTI4MDBfaTJjX3NlbmRfYnl0ZXMoZGV2LCBhZGRyLAorCQkJCQkJCSAgIG1zZ3NbaV0uYnVmLAorCQkJCQkJCSAgIG1zZ3NbaV0ubGVuKTsKKwkJCWVsc2UKKwkJCQlyYyA9IGVtMjh4eF9pMmNfc2VuZF9ieXRlcyhkZXYsIGFkZHIsCisJCQkJCQkJICAgbXNnc1tpXS5idWYsCisJCQkJCQkJICAgbXNnc1tpXS5sZW4sCisJCQkJCQkJICAgaSA9PSBudW0gLSAxKTsKKwkJCWlmIChyYyA8IDApCisJCQkJZ290byBlcnI7CisJCX0KKwkJaWYgKGkyY19kZWJ1Zz49MikKKwkJCXByaW50aygiXG4iKTsKKwl9CisKKwlyZXR1cm4gbnVtOworICAgICAgZXJyOgorCWRwcmludGsyKDIsIiBFUlJPUjogJWlcbiIsIHJjKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgZW0yOHh4X2kyY19lZXByb20oc3RydWN0IGVtMjh4eCAqZGV2LCB1bnNpZ25lZCBjaGFyICplZWRhdGEsIGludCBsZW4pCit7CisJdW5zaWduZWQgY2hhciBidWYsICpwID0gZWVkYXRhOworCXN0cnVjdCBlbTI4eHhfZWVwcm9tICplbV9lZXByb20gPSAodm9pZCAqKWVlZGF0YTsKKwlpbnQgaSwgZXJyLCBzaXplID0gbGVuLCBibG9jazsKKworCWRldi0+aTJjX2NsaWVudC5hZGRyID0gMHhhMCA+PiAxOworCisJLyogQ2hlY2sgaWYgYm9hcmQgaGFzIGVlcHJvbSAqLworCWVyciA9IGkyY19tYXN0ZXJfcmVjdigmZGV2LT5pMmNfY2xpZW50LCAmYnVmLCAwKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIC0xOworCisJYnVmID0gMDsKKwlpZiAoMSAhPSAoZXJyID0gaTJjX21hc3Rlcl9zZW5kKCZkZXYtPmkyY19jbGllbnQsICZidWYsIDEpKSkgeworCQlwcmludGsoS0VSTl9JTkZPICIlczogSHVoLCBubyBlZXByb20gcHJlc2VudCAoZXJyPSVkKT9cbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisJCXJldHVybiAtMTsKKwl9CisJd2hpbGUgKHNpemUgPiAwKSB7CisJCWlmIChzaXplID4gMTYpCisJCQlibG9jayA9IDE2OworCQllbHNlCisJCQlibG9jayA9IHNpemU7CisKKwkJaWYgKGJsb2NrICE9CisJCSAgICAoZXJyID0gaTJjX21hc3Rlcl9yZWN2KCZkZXYtPmkyY19jbGllbnQsIHAsIGJsb2NrKSkpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSAgICAgICAiJXM6IGkyYyBlZXByb20gcmVhZCBlcnJvciAoZXJyPSVkKVxuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJc2l6ZSAtPSBibG9jazsKKwkJcCArPSBibG9jazsKKwl9CisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCWlmICgwID09IChpICUgMTYpKQorCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGkyYyBlZXByb20gJTAyeDoiLCBkZXYtPm5hbWUsIGkpOworCQlwcmludGsoIiAlMDJ4IiwgZWVkYXRhW2ldKTsKKwkJaWYgKDE1ID09IChpICUgMTYpKQorCQkJcHJpbnRrKCJcbiIpOworCX0KKworCXByaW50ayhLRVJOX0lORk8gIkVFUFJPTSBJRD0gMHglMDh4XG4iLCBlbV9lZXByb20tPmlkKTsKKwlwcmludGsoS0VSTl9JTkZPICJWZW5kb3IvUHJvZHVjdCBJRD0gJTA0eDolMDR4XG4iLCBlbV9lZXByb20tPnZlbmRvcl9JRCwKKwkgICAgICAgZW1fZWVwcm9tLT5wcm9kdWN0X0lEKTsKKworCXN3aXRjaCAoZW1fZWVwcm9tLT5jaGlwX2NvbmYgPj4gNCAmIDB4MykgeworCWNhc2UgMDoKKwkJcHJpbnRrKEtFUk5fSU5GTyAiTm8gYXVkaW8gb24gYm9hcmQuXG4iKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlwcmludGsoS0VSTl9JTkZPICJBQzk3IGF1ZGlvICg1IHNhbXBsZSByYXRlcylcbiIpOworCQlicmVhazsKKwljYXNlIDI6CisJCXByaW50ayhLRVJOX0lORk8gIkkyUyBhdWRpbywgc2FtcGxlIHJhdGU9MzJrXG4iKTsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlwcmludGsoS0VSTl9JTkZPICJJMlMgYXVkaW8sIDMgc2FtcGxlIHJhdGVzXG4iKTsKKwkJYnJlYWs7CisJfQorCisJaWYgKGVtX2VlcHJvbS0+Y2hpcF9jb25mICYgMSA8PCAzKQorCQlwcmludGsoS0VSTl9JTkZPICJVU0IgUmVtb3RlIHdha2V1cCBjYXBhYmxlXG4iKTsKKworCWlmIChlbV9lZXByb20tPmNoaXBfY29uZiAmIDEgPDwgMikKKwkJcHJpbnRrKEtFUk5fSU5GTyAiVVNCIFNlbGYgcG93ZXIgY2FwYWJsZVxuIik7CisKKwlzd2l0Y2ggKGVtX2VlcHJvbS0+Y2hpcF9jb25mICYgMHgzKSB7CisJY2FzZSAwOgorCQlwcmludGsoS0VSTl9JTkZPICI1MDBtQSBtYXggcG93ZXJcbiIpOworCQlicmVhazsKKwljYXNlIDE6CisJCXByaW50ayhLRVJOX0lORk8gIjQwMG1BIG1heCBwb3dlclxuIik7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcHJpbnRrKEtFUk5fSU5GTyAiMzAwbUEgbWF4IHBvd2VyXG4iKTsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlwcmludGsoS0VSTl9JTkZPICIyMDBtQSBtYXggcG93ZXJcbiIpOworCQlicmVhazsKKwl9CisJcHJpbnRrKEtFUk5fSU5GTyAiVGFibGUgYXQgMHglMDJ4LCBzdHJpbmdzPTB4JTA0eCwgMHglMDR4LCAweCUwNHhcbiIsCisJCQkJZW1fZWVwcm9tLT5zdHJpbmdfaWR4X3RhYmxlLGVtX2VlcHJvbS0+c3RyaW5nMSwKKwkJCQllbV9lZXByb20tPnN0cmluZzIsZW1fZWVwcm9tLT5zdHJpbmczKTsKKworCXJldHVybiAwOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICogYWxnb19jb250cm9sKCkKKyAqLworc3RhdGljIGludCBhbGdvX2NvbnRyb2woc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLAorCQkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBmdW5jdGlvbmFsaXR5KCkKKyAqLworc3RhdGljIHUzMiBmdW5jdGlvbmFsaXR5KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCkKK3sKKwlyZXR1cm4gSTJDX0ZVTkNfU01CVVNfRU1VTDsKK30KKworI2lmbmRlZiBJMkNfUEVDCitzdGF0aWMgdm9pZCBpbmNfdXNlKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCkKK3sKKwlNT0RfSU5DX1VTRV9DT1VOVDsKK30KKworc3RhdGljIHZvaWQgZGVjX3VzZShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXApCit7CisJTU9EX0RFQ19VU0VfQ09VTlQ7Cit9CisjZW5kaWYKKworc3RhdGljIGludCBlbTI4eHhfc2V0X3R1bmVyKGludCBjaGVja19lZXByb20sIHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IGVtMjh4eCAqZGV2ID0gY2xpZW50LT5hZGFwdGVyLT5hbGdvX2RhdGE7CisJc3RydWN0IHR1bmVyX3NldHVwIHR1bl9zZXR1cDsKKworCWlmIChkZXYtPmhhc190dW5lcikgeworCQl0dW5fc2V0dXAubW9kZV9tYXNrID0gVF9BTkFMT0dfVFYgfCBUX1JBRElPOworCQl0dW5fc2V0dXAudHlwZSA9IGRldi0+dHVuZXJfdHlwZTsKKwkJdHVuX3NldHVwLmFkZHIgPSBkZXYtPnR1bmVyX2FkZHI7CisKKwkJZW0yOHh4X2kyY19jYWxsX2NsaWVudHMoZGV2LCBUVU5FUl9TRVRfVFlQRV9BRERSLCAmdHVuX3NldHVwKTsKKwl9CisKKwlyZXR1cm4gKDApOworfQorCisvKgorICogYXR0YWNoX2luZm9ybSgpCisgKiBnZXRzIGNhbGxlZCB3aGVuIGEgZGV2aWNlIGF0dGFjaGVzIHRvIHRoZSBpMmMgYnVzCisgKiBkb2VzIHNvbWUgYmFzaWMgY29uZmlndXJhdGlvbgorICovCitzdGF0aWMgaW50IGF0dGFjaF9pbmZvcm0oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgZW0yOHh4ICpkZXYgPSBjbGllbnQtPmFkYXB0ZXItPmFsZ29fZGF0YTsKKworCXN3aXRjaCAoY2xpZW50LT5hZGRyIDw8IDEpIHsKKwkJY2FzZSAweDg2OgorCQkJZW0yOHh4X2kyY19jYWxsX2NsaWVudHMoZGV2LCBUREE5ODg3X1NFVF9DT05GSUcsICZkZXYtPnRkYTk4ODdfY29uZik7CisJCQlicmVhazsKKwkJY2FzZSAweDQyOgorCQkJZHByaW50azEoMSwiYXR0YWNoX2luZm9ybTogc2FhNzExNCBkZXRlY3RlZC5cbiIpOworCQkJYnJlYWs7CisJCWNhc2UgMHg0YToKKwkJCWRwcmludGsxKDEsImF0dGFjaF9pbmZvcm06IHNhYTcxMTMgZGV0ZWN0ZWQuXG4iKTsKKwkJCWJyZWFrOworCQljYXNlIDB4YTA6CisJCQlkcHJpbnRrMSgxLCJhdHRhY2hfaW5mb3JtOiBlZXByb20gZGV0ZWN0ZWQuXG4iKTsKKwkJCWJyZWFrOworCQljYXNlIDB4NjA6CisJCWNhc2UgMHg4ZToKKwkJeworCQkJc3RydWN0IElSX2kyYyAqaXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwkJCWRwcmludGsxKDEsImF0dGFjaF9pbmZvcm06IElSIGRldGVjdGVkICglcykuXG4iLGlyLT5waHlzKTsKKwkJCWVtMjh4eF9zZXRfaXIoZGV2LGlyKTsKKwkJCWJyZWFrOworCQl9CisJCWNhc2UgMHg4MDoKKwkJY2FzZSAweDg4OgorCQkJZHByaW50azEoMSwiYXR0YWNoX2luZm9ybTogbXNwMzR4eCBkZXRlY3RlZC5cbiIpOworCQkJYnJlYWs7CisJCWNhc2UgMHhiODoKKwkJY2FzZSAweGJhOgorCQkJZHByaW50azEoMSwiYXR0YWNoX2luZm9ybTogdHZwNTE1MCBkZXRlY3RlZC5cbiIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlkcHJpbnRrMSgxLCJhdHRhY2ggaW5mb3JtOiBkZXRlY3RlZCBJMkMgYWRkcmVzcyAleFxuIiwgY2xpZW50LT5hZGRyIDw8IDEpOworCQkJZGV2LT50dW5lcl9hZGRyID0gY2xpZW50LT5hZGRyOworCQkJZW0yOHh4X3NldF90dW5lcigtMSwgY2xpZW50KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpMmNfYWxnb3JpdGhtIGVtMjh4eF9hbGdvID0geworCS5tYXN0ZXJfeGZlciAgID0gZW0yOHh4X2kyY194ZmVyLAorCS5hbGdvX2NvbnRyb2wgID0gYWxnb19jb250cm9sLAorCS5mdW5jdGlvbmFsaXR5ID0gZnVuY3Rpb25hbGl0eSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2FkYXB0ZXIgZW0yOHh4X2FkYXBfdGVtcGxhdGUgPSB7CisjaWZkZWYgSTJDX1BFQworCS5vd25lciA9IFRISVNfTU9EVUxFLAorI2Vsc2UKKwkuaW5jX3VzZSA9IGluY191c2UsCisJLmRlY191c2UgPSBkZWNfdXNlLAorI2VuZGlmCisjaWZkZWYgSTJDX0NMQVNTX1RWX0FOQUxPRworCS5jbGFzcyA9IEkyQ19DTEFTU19UVl9BTkFMT0csCisjZW5kaWYKKwkubmFtZSA9ICJlbTI4eHgiLAorCS5pZCA9IEkyQ19IV19CX0VNMjhYWCwKKwkuYWxnbyA9ICZlbTI4eHhfYWxnbywKKwkuY2xpZW50X3JlZ2lzdGVyID0gYXR0YWNoX2luZm9ybSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudCBlbTI4eHhfY2xpZW50X3RlbXBsYXRlID0geworCS5uYW1lID0gImVtMjh4eCBpbnRlcm5hbCIsCisJLmZsYWdzID0gSTJDX0NMSUVOVF9BTExPV19VU0UsCit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICogaTJjX2RldnMKKyAqIGluY29tcGxldGUgbGlzdCBvZiBrbm93biBkZXZpY2VzCisgKi8KK3N0YXRpYyBjaGFyICppMmNfZGV2c1sxMjhdID0geworCVsweDRhID4+IDFdID0gInNhYTcxMTNoIiwKKwlbMHg2MCA+PiAxXSA9ICJyZW1vdGUgSVIgc2Vuc29yIiwKKwlbMHg4ZSA+PiAxXSA9ICJyZW1vdGUgSVIgc2Vuc29yIiwKKwlbMHg4NiA+PiAxXSA9ICJ0ZGE5ODg3IiwKKwlbMHg4MCA+PiAxXSA9ICJtc3AzNHh4IiwKKwlbMHg4OCA+PiAxXSA9ICJtc3AzNHh4IiwKKwlbMHhhMCA+PiAxXSA9ICJlZXByb20iLAorCVsweGI4ID4+IDFdID0gInR2cDUxNTBhIiwKKwlbMHhiYSA+PiAxXSA9ICJ0dnA1MTUwYSIsCisJWzB4YzAgPj4gMV0gPSAidHVuZXIgKGFuYWxvZykiLAorCVsweGMyID4+IDFdID0gInR1bmVyIChhbmFsb2cpIiwKKwlbMHhjNCA+PiAxXSA9ICJ0dW5lciAoYW5hbG9nKSIsCisJWzB4YzYgPj4gMV0gPSAidHVuZXIgKGFuYWxvZykiLAorfTsKKworLyoKKyAqIGRvX2kyY19zY2FuKCkKKyAqIGNoZWNrIGkyYyBhZGRyZXNzIHJhbmdlIGZvciBkZXZpY2VzCisgKi8KK3N0YXRpYyB2b2lkIGRvX2kyY19zY2FuKGNoYXIgKm5hbWUsIHN0cnVjdCBpMmNfY2xpZW50ICpjKQoreworCXVuc2lnbmVkIGNoYXIgYnVmOworCWludCBpLCByYzsKKworCWZvciAoaSA9IDA7IGkgPCAxMjg7IGkrKykgeworCQljLT5hZGRyID0gaTsKKwkJcmMgPSBpMmNfbWFzdGVyX3JlY3YoYywgJmJ1ZiwgMCk7CisJCWlmIChyYyA8IDApCisJCQljb250aW51ZTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGZvdW5kIGkyYyBkZXZpY2UgQCAweCV4IFslc11cbiIsIG5hbWUsCisJCSAgICAgICBpIDw8IDEsIGkyY19kZXZzW2ldID8gaTJjX2RldnNbaV0gOiAiPz8/Iik7CisJfQorfQorCisvKgorICogZW0yOHh4X2kyY19jYWxsX2NsaWVudHMoKQorICogc2VuZCBjb21tYW5kcyB0byBhbGwgYXR0YWNoZWQgaTJjIGRldmljZXMKKyAqLwordm9pZCBlbTI4eHhfaTJjX2NhbGxfY2xpZW50cyhzdHJ1Y3QgZW0yOHh4ICpkZXYsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKK3sKKwlCVUdfT04oTlVMTCA9PSBkZXYtPmkyY19hZGFwLmFsZ29fZGF0YSk7CisJaTJjX2NsaWVudHNfY29tbWFuZCgmZGV2LT5pMmNfYWRhcCwgY21kLCBhcmcpOworfQorCisvKgorICogZW0yOHh4X2kyY19yZWdpc3RlcigpCisgKiByZWdpc3RlciBpMmMgYnVzCisgKi8KK2ludCBlbTI4eHhfaTJjX3JlZ2lzdGVyKHN0cnVjdCBlbTI4eHggKmRldikKK3sKKwlCVUdfT04oIWRldi0+ZW0yOHh4X3dyaXRlX3JlZ3MgfHwgIWRldi0+ZW0yOHh4X3JlYWRfcmVnKTsKKwlCVUdfT04oIWRldi0+ZW0yOHh4X3dyaXRlX3JlZ3NfcmVxIHx8ICFkZXYtPmVtMjh4eF9yZWFkX3JlZ19yZXEpOworCWRldi0+aTJjX2FkYXAgPSBlbTI4eHhfYWRhcF90ZW1wbGF0ZTsKKwlkZXYtPmkyY19hZGFwLmRldi5wYXJlbnQgPSAmZGV2LT51ZGV2LT5kZXY7CisJc3RyY3B5KGRldi0+aTJjX2FkYXAubmFtZSwgZGV2LT5uYW1lKTsKKwlkZXYtPmkyY19hZGFwLmFsZ29fZGF0YSA9IGRldjsKKwlpMmNfYWRkX2FkYXB0ZXIoJmRldi0+aTJjX2FkYXApOworCisJZGV2LT5pMmNfY2xpZW50ID0gZW0yOHh4X2NsaWVudF90ZW1wbGF0ZTsKKwlkZXYtPmkyY19jbGllbnQuYWRhcHRlciA9ICZkZXYtPmkyY19hZGFwOworCisJZW0yOHh4X2kyY19lZXByb20oZGV2LCBkZXYtPmVlZGF0YSwgc2l6ZW9mKGRldi0+ZWVkYXRhKSk7CisKKwlpZiAoaTJjX3NjYW4pCisJCWRvX2kyY19zY2FuKGRldi0+bmFtZSwgJmRldi0+aTJjX2NsaWVudCk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBlbTI4eHhfaTJjX3VucmVnaXN0ZXIoKQorICogdW5yZWdpc3RlciBpMmNfYnVzCisgKi8KK2ludCBlbTI4eHhfaTJjX3VucmVnaXN0ZXIoc3RydWN0IGVtMjh4eCAqZGV2KQoreworCWkyY19kZWxfYWRhcHRlcigmZGV2LT5pMmNfYWRhcCk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtaW5wdXQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1pbnB1dC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyYzQ5ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtaW5wdXQuYwpAQCAtMCwwICsxLDE4NCBAQAorLyoKKyAgaGFuZGxlIGVtMjh4eCBJUiByZW1vdGVzIHZpYSBsaW51eCBrZXJuZWwgaW5wdXQgbGF5ZXIuCisKKyAgIENvcHlyaWdodCAoQykgMjAwNSBMdWRvdmljbyBDYXZlZG9uIDxjYXZlZG9uQHNzc3VwLml0PgorCQkgICAgICBNYXJrdXMgUmVjaGJlcmdlciA8bXJlY2hiZXJnZXJAZ21haWwuY29tPgorCQkgICAgICBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAYnJ0dXJiby5jb20uYnI+CisJCSAgICAgIFNhc2NoYSBTb21tZXIgPHNhc2NoYXNvbW1lckBmcmVlbmV0LmRlPgorCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKworI2luY2x1ZGUgImVtMjh4eC5oIgorCitzdGF0aWMgdW5zaWduZWQgaW50IGRpc2FibGVfaXIgPSAwOworbW9kdWxlX3BhcmFtKGRpc2FibGVfaXIsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRpc2FibGVfaXIsImRpc2FibGUgaW5mcmFyZWQgcmVtb3RlIHN1cHBvcnQiKTsKKworc3RhdGljIHVuc2lnbmVkIGludCBpcl9kZWJ1ZyA9IDA7Cittb2R1bGVfcGFyYW0oaXJfZGVidWcsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGlyX2RlYnVnLCJlbmFibGUgZGVidWcgbWVzc2FnZXMgW0lSXSIpOworCisjZGVmaW5lIGRwcmludGsoZm10LCBhcmcuLi4pCWlmIChpcl9kZWJ1ZykgXAorCXByaW50ayhLRVJOX0RFQlVHICIlcy9pcjogIiBmbXQsIGlyLT5jLm5hbWUgLCAjIyBhcmcpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2VtX3RlcnJhdGVjW0lSX0tFWVRBQl9TSVpFXSA9IHsKKwlbIDB4MDEgXSA9IEtFWV9DSEFOTkVMLAorCVsgMHgwMiBdID0gS0VZX1NFTEVDVCwKKwlbIDB4MDMgXSA9IEtFWV9NVVRFLAorCVsgMHgwNCBdID0gS0VZX1BPV0VSLAorCVsgMHgwNSBdID0gS0VZX0tQMSwKKwlbIDB4MDYgXSA9IEtFWV9LUDIsCisJWyAweDA3IF0gPSBLRVlfS1AzLAorCVsgMHgwOCBdID0gS0VZX0NIQU5ORUxVUCwKKwlbIDB4MDkgXSA9IEtFWV9LUDQsCisJWyAweDBhIF0gPSBLRVlfS1A1LAorCVsgMHgwYiBdID0gS0VZX0tQNiwKKwlbIDB4MGMgXSA9IEtFWV9DSEFOTkVMRE9XTiwKKwlbIDB4MGQgXSA9IEtFWV9LUDcsCisJWyAweDBlIF0gPSBLRVlfS1A4LAorCVsgMHgwZiBdID0gS0VZX0tQOSwKKwlbIDB4MTAgXSA9IEtFWV9WT0xVTUVVUCwKKwlbIDB4MTEgXSA9IEtFWV9LUDAsCisJWyAweDEyIF0gPSBLRVlfTUVOVSwKKwlbIDB4MTMgXSA9IEtFWV9QUklOVCwKKwlbIDB4MTQgXSA9IEtFWV9WT0xVTUVET1dOLAorCVsgMHgxNiBdID0gS0VZX1BBVVNFLAorCVsgMHgxOCBdID0gS0VZX1JFQ09SRCwKKwlbIDB4MTkgXSA9IEtFWV9SRVdJTkQsCisJWyAweDFhIF0gPSBLRVlfUExBWSwKKwlbIDB4MWIgXSA9IEtFWV9GT1JXQVJELAorCVsgMHgxYyBdID0gS0VZX0JBQ0tTUEFDRSwKKwlbIDB4MWUgXSA9IEtFWV9TVE9QLAorCVsgMHg0MCBdID0gS0VZX1pPT00sCit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW50IGdldF9rZXlfdGVycmF0ZWMoc3RydWN0IElSX2kyYyAqaXIsIHUzMiAqaXJfa2V5LCB1MzIgKmlyX3JhdykKK3sKKwl1bnNpZ25lZCBjaGFyIGI7CisKKwkvKiBwb2xsIElSIGNoaXAgKi8KKwlpZiAoMSAhPSBpMmNfbWFzdGVyX3JlY3YoJmlyLT5jLCZiLDEpKSB7CisJCWRwcmludGsoInJlYWQgZXJyb3JcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwkvKiBpdCBzZWVtcyB0aGF0IDB4RkUgaW5kaWNhdGVzIHRoYXQgYSBidXR0b24gaXMgc3RpbGwgaG9sZAorCSAgIGRvd24sIHdoaWxlIDB4ZmYgaW5kaWNhdGVzIHRoYXQgbm8gYnV0dG9uIGlzIGhvbGQKKwkgICBkb3duLiAweGZlIHNlcXVlbmNlcyBhcmUgc29tZXRpbWVzIGludGVycnVwdGVkIGJ5IDB4RkYgKi8KKworCWRwcmludGsoImtleSAlMDJ4XG4iLCBiKTsKKworCWlmIChiID09IDB4ZmYpCisJCXJldHVybiAwOworCisJaWYgKGIgPT0gMHhmZSkKKwkJLyoga2VlcCBvbGQgZGF0YSAqLworCQlyZXR1cm4gMTsKKworCSppcl9rZXkgPSBiOworCSppcl9yYXcgPSBiOworCXJldHVybiAxOworfQorCisKK3N0YXRpYyBpbnQgZ2V0X2tleV9lbV9oYXVwKHN0cnVjdCBJUl9pMmMgKmlyLCB1MzIgKmlyX2tleSwgdTMyICppcl9yYXcpCit7CisJdW5zaWduZWQgY2hhciBidWZbMl07CisJdW5zaWduZWQgY2hhciBjb2RlOworCisJLyogcG9sbCBJUiBjaGlwICovCisJaWYgKDIgIT0gaTJjX21hc3Rlcl9yZWN2KCZpci0+YyxidWYsMikpCisJCXJldHVybiAtRUlPOworCisJLyogRG9lcyBlbGltaW5hdGUgcmVwZWF0ZWQgcGFyaXR5IGNvZGUgKi8KKwlpZiAoYnVmWzFdPT0weGZmKQorCQlyZXR1cm4gMDsKKworCS8qIGF2b2lkIGZhc3QgcmVhcGVhdGluZyAqLworCWlmIChidWZbMV09PWlyLT5vbGQpCisJCXJldHVybiAwOworCWlyLT5vbGQ9YnVmWzFdOworCisJLyogUmVhcnJhbmdlcyBiaXRzIHRvIHRoZSByaWdodCBvcmRlciAqLworCWNvZGU9ICAgICgoYnVmWzBdJjB4MDEpPDw1KSB8IC8qIDAwMTAgMDAwMCAqLworCQkgKChidWZbMF0mMHgwMik8PDMpIHwgLyogMDAwMSAwMDAwICovCisJCSAoKGJ1ZlswXSYweDA0KTw8MSkgfCAvKiAwMDAwIDEwMDAgKi8KKwkJICgoYnVmWzBdJjB4MDgpPj4xKSB8IC8qIDAwMDAgMDEwMCAqLworCQkgKChidWZbMF0mMHgxMCk+PjMpIHwgLyogMDAwMCAwMDEwICovCisJCSAoKGJ1ZlswXSYweDIwKT4+NSk7ICAvKiAwMDAwIDAwMDEgKi8KKworCWRwcmludGsoImlyIGhhdXBwYXVnZSAoZW0yODQwKTogY29kZT0weCUwMnggKHJjdj0weCUwMngpXG4iLGNvZGUsYnVmWzBdKTsKKworCS8qIHJldHVybiBrZXkgKi8KKwkqaXJfa2V5ID0gY29kZTsKKwkqaXJfcmF3ID0gY29kZTsKKwlyZXR1cm4gMTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KK3ZvaWQgZW0yOHh4X3NldF9pcihzdHJ1Y3QgZW0yOHh4ICogZGV2LHN0cnVjdCBJUl9pMmMgKmlyKQoreworCWlmIChkaXNhYmxlX2lyKSB7CisJCWlyLT5nZXRfa2V5PU5VTEw7CisJCXJldHVybiA7CisJfQorCisJLyogZGV0ZWN0ICYgY29uZmlndXJlICovCisJc3dpdGNoIChkZXYtPm1vZGVsKSB7CisJY2FzZSAoRU0yODAwX0JPQVJEX1VOS05PV04pOgorCQlicmVhazsKKwljYXNlIChFTTI4MjBfQk9BUkRfVU5LTk9XTik6CisJCWJyZWFrOworCWNhc2UgKEVNMjgwMF9CT0FSRF9URVJSQVRFQ19DSU5FUkdZXzIwMCk6CisJY2FzZSAoRU0yODIwX0JPQVJEX1RFUlJBVEVDX0NJTkVSR1lfMjUwKToKKwkJaXItPmlyX2NvZGVzID0gaXJfY29kZXNfZW1fdGVycmF0ZWM7CisJCWlyLT5nZXRfa2V5ID0gZ2V0X2tleV90ZXJyYXRlYzsKKwkJc25wcmludGYoaXItPmMubmFtZSwgc2l6ZW9mKGlyLT5jLm5hbWUpLCAiaTJjIElSIChFTTI4WFggVGVycmF0ZWMpIik7CisJCWJyZWFrOworCWNhc2UgKEVNMjgyMF9CT0FSRF9QSU5OQUNMRV9VU0JfMik6CisJCWJyZWFrOworCWNhc2UgKEVNMjgyMF9CT0FSRF9IQVVQUEFVR0VfV0lOVFZfVVNCXzIpOgorCQlpci0+aXJfY29kZXMgPSBpcl9jb2Rlc19oYXVwcGF1Z2VfbmV3OworCQlpci0+Z2V0X2tleSA9IGdldF9rZXlfZW1faGF1cDsKKwkJc25wcmludGYoaXItPmMubmFtZSwgc2l6ZW9mKGlyLT5jLm5hbWUpLCAiaTJjIElSIChFTTI4NDAgSGF1cHBhdWdlKSIpOworCQlicmVhazsKKwljYXNlIChFTTI4MjBfQk9BUkRfTVNJX1ZPWF9VU0JfMik6CisJCWJyZWFrOworCWNhc2UgKEVNMjgwMF9CT0FSRF9MRUFEVEVLX1dJTkZBU1RfVVNCSUkpOgorCQlicmVhazsKKwljYXNlIChFTTI4MDBfQk9BUkRfS1dPUkxEX1VTQjI4MDApOgorCQlicmVhazsKKwl9Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIExvY2FsIHZhcmlhYmxlczoKKyAqIGMtYmFzaWMtb2Zmc2V0OiA4CisgKiBFbmQ6CisgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC12aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LXZpZGVvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdjMTgyNmI5MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC12aWRlby5jCkBAIC0wLDAgKzEsMTkzMyBAQAorLyoKKyAgIGVtMjh4eC12aWRlby5jIC0gZHJpdmVyIGZvciBFbXBpYSBFTTI4MDAvRU0yODIwLzI4NDAgVVNCIHZpZGVvIGNhcHR1cmUgZGV2aWNlcworCisgICBDb3B5cmlnaHQgKEMpIDIwMDUgTHVkb3ZpY28gQ2F2ZWRvbiA8Y2F2ZWRvbkBzc3N1cC5pdD4KKwkJICAgICAgTWFya3VzIFJlY2hiZXJnZXIgPG1yZWNoYmVyZ2VyQGdtYWlsLmNvbT4KKwkJICAgICAgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQGJydHVyYm8uY29tLmJyPgorCQkgICAgICBTYXNjaGEgU29tbWVyIDxzYXNjaGFzb21tZXJAZnJlZW5ldC5kZT4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9fZGVjb2Rlci5oPgorCisjaW5jbHVkZSAiZW0yOHh4LmgiCisjaW5jbHVkZSA8bWVkaWEvdHVuZXIuaD4KKworI2RlZmluZSBEUklWRVJfQVVUSE9SICJMdWRvdmljbyBDYXZlZG9uIDxjYXZlZG9uQHNzc3VwLml0PiwgIiBcCisJCSAgICAgICJNYXJrdXMgUmVjaGJlcmdlciA8bXJlY2hiZXJnZXJAZ21haWwuY29tPiwgIiBcCisJCSAgICAgICJNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAYnJ0dXJiby5jb20uYnI+LCAiIFwKKwkJICAgICAgIlNhc2NoYSBTb21tZXIgPHNhc2NoYXNvbW1lckBmcmVlbmV0LmRlPiIKKworI2RlZmluZSBEUklWRVJfTkFNRSAgICAgICAgICJlbTI4eHgiCisjZGVmaW5lIERSSVZFUl9ERVNDICAgICAgICAgIkVtcGlhIGVtMjh4eCBiYXNlZCBVU0IgdmlkZW8gZGV2aWNlIGRyaXZlciIKKyNkZWZpbmUgRU0yOFhYX1ZFUlNJT05fQ09ERSAgS0VSTkVMX1ZFUlNJT04oMCwgMCwgMSkKKworI2RlZmluZSBlbTI4eHhfdmlkZW9kYmcoZm10LCBhcmcuLi4pIGRvIHtcCisJaWYgKHZpZGVvX2RlYnVnKSBcCisJCXByaW50ayhLRVJOX0lORk8gIiVzICVzIDoiZm10LCBcCisJCQkgZGV2LT5uYW1lLCBfX0ZVTkNUSU9OX18gLCAjI2FyZyk7IH0gd2hpbGUgKDApCisKK01PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitzdGF0aWMgTElTVF9IRUFEKGVtMjh4eF9kZXZsaXN0KTsKKworc3RhdGljIHVuc2lnbmVkIGludCBjYXJkW10gICAgID0ge1swIC4uLiAoRU0yOFhYX01BWEJPQVJEUyAtIDEpXSA9IFVOU0VUIH07Cittb2R1bGVfcGFyYW1fYXJyYXkoY2FyZCwgIGludCwgTlVMTCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGNhcmQsImNhcmQgdHlwZSIpOworCitzdGF0aWMgaW50IHR1bmVyID0gLTE7Cittb2R1bGVfcGFyYW0odHVuZXIsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHR1bmVyLCAidHVuZXIgdHlwZSIpOworCitzdGF0aWMgdW5zaWduZWQgaW50IHZpZGVvX2RlYnVnID0gMDsKK21vZHVsZV9wYXJhbSh2aWRlb19kZWJ1ZyxpbnQsMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHZpZGVvX2RlYnVnLCJlbmFibGUgZGVidWcgbWVzc2FnZXMgW3ZpZGVvXSIpOworCisvKiBzdXBwb3J0ZWQgdHYgbm9ybXMgKi8KK3N0YXRpYyBzdHJ1Y3QgZW0yOHh4X3R2bm9ybSB0dm5vcm1zW10gPSB7CisJeworCQkubmFtZSA9ICJQQUwiLAorCQkuaWQgPSBWNEwyX1NURF9QQUwsCisJCS5tb2RlID0gVklERU9fTU9ERV9QQUwsCisJIH0sIHsKKwkJLm5hbWUgPSAiTlRTQyIsCisJCS5pZCA9IFY0TDJfU1REX05UU0MsCisJCS5tb2RlID0gVklERU9fTU9ERV9OVFNDLAorCX0sIHsKKwkJIC5uYW1lID0gIlNFQ0FNIiwKKwkJIC5pZCA9IFY0TDJfU1REX1NFQ0FNLAorCQkgLm1vZGUgPSBWSURFT19NT0RFX1NFQ0FNLAorCX0sIHsKKwkJLm5hbWUgPSAiUEFMLU0iLAorCQkuaWQgPSBWNEwyX1NURF9QQUxfTSwKKwkJLm1vZGUgPSBWSURFT19NT0RFX1BBTCwKKwl9Cit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzYWE3MTE0X2kyY19pbml0W10gPSB7CisJMHgwMCwweDAwLDB4MDEsMHgwOCwweDAyLDB4YzQsMHgwMywweDMwLDB4MDQsMHg5MCwweDA1LDB4OTAsMHgwNiwweGViLDB4MDcsMHhlMCwKKwkweDA4LDB4ODgsMHgwOSwweDQwLDB4MGEsMHg4MCwweDBiLDB4NDQsMHgwYywweDQwLDB4MGQsMHgwMCwweDBlLDB4ODEsMHgwZiwweDJhLAorCTB4MTAsMHgwNiwweDExLDB4MDAsMHgxMiwweGM4LDB4MTMsMHg4MCwweDE0LDB4MDAsMHgxNSwweDExLDB4MTYsMHgwMSwweDE3LDB4NDIsCisJMHgxOCwweDQwLDB4MTksMHg4MCwweDQwLDB4MDAsMHg0MSwweGZmLDB4NDIsMHhmZiwweDQzLDB4ZmYsMHg0NCwweGZmLDB4NDUsMHhmZiwKKwkweDQ2LDB4ZmYsMHg0NywweGZmLDB4NDgsMHhmZiwweDQ5LDB4ZmYsMHg0YSwweGZmLDB4NGIsMHhmZiwweDRjLDB4ZmYsMHg0ZCwweGZmLAorCTB4NGUsMHhmZiwweDRmLDB4ZmYsMHg1MCwweGZmLDB4NTEsMHhmZiwweDUyLDB4ZmYsMHg1MywweGZmLDB4NTQsMHg1ZiwweDU1LDB4ZmYsCisJMHg1NiwweGZmLDB4NTcsMHhmZiwweDU4LDB4MDAsMHg1OSwweDQ3LDB4NWEsMHgwMywweDViLDB4MDMsMHg1ZCwweDNlLDB4NWUsMHgwMCwKKwkweDgwLDB4MWMsMHg4MywweDAxLDB4ODQsMHhhNSwweDg1LDB4MTAsMHg4NiwweDQ1LDB4ODcsMHg0MSwweDg4LDB4ZjAsMHg4OCwweDAwLAorCTB4ODgsMHhmMCwweDkwLDB4MDAsMHg5MSwweDA4LDB4OTIsMHgwMCwweDkzLDB4ODAsMHg5NCwweDA4LDB4OTUsMHgwMCwweDk2LDB4YzAsCisJMHg5NywweDAyLDB4OTgsMHgxMywweDk5LDB4MDAsMHg5YSwweDM4LDB4OWIsMHgwMSwweDljLDB4ODAsMHg5ZCwweDAyLDB4OWUsMHgwNiwKKwkweDlmLDB4MDEsMHhhMCwweDAxLDB4YTEsMHgwMCwweGEyLDB4MDAsMHhhNCwweDgwLDB4YTUsMHgzNiwweGE2LDB4MzYsMHhhOCwweDY3LAorCTB4YTksMHgwNCwweGFhLDB4MDAsMHhhYywweDMzLDB4YWQsMHgwMiwweGFlLDB4MDAsMHhiMCwweGNkLDB4YjEsMHgwNCwweGIyLDB4Y2QsCisJMHhiMywweDA0LDB4YjQsMHgwMSwweGI4LDB4MDAsMHhiOSwweDAwLDB4YmEsMHgwMCwweGJiLDB4MDAsMHhiYywweDAwLDB4YmQsMHgwMCwKKwkweGJlLDB4MDAsMHhiZiwweDAwCit9OworCisjZGVmaW5lIFRWTk9STVMgQVJSQVlfU0laRSh0dm5vcm1zKQorCisvKiBzdXBwb3J0ZWQgY29udHJvbHMgKi8KK3N0YXRpYyBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgZW0yOHh4X3FjdHJsW10gPSB7CisJeworCQkuaWQgPSBWNEwyX0NJRF9CUklHSFRORVNTLAorCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1lID0gIkJyaWdodG5lc3MiLAorCQkubWluaW11bSA9IC0xMjgsCisJCS5tYXhpbXVtID0gMTI3LAorCQkuc3RlcCA9IDEsCisJCS5kZWZhdWx0X3ZhbHVlID0gMCwKKwkJLmZsYWdzID0gMCwKKwl9LHsKKwkJLmlkID0gVjRMMl9DSURfQ09OVFJBU1QsCisJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUgPSAiQ29udHJhc3QiLAorCQkubWluaW11bSA9IDB4MCwKKwkJLm1heGltdW0gPSAweDFmLAorCQkuc3RlcCA9IDB4MSwKKwkJLmRlZmF1bHRfdmFsdWUgPSAweDEwLAorCQkuZmxhZ3MgPSAwLAorCX0seworCQkuaWQgPSBWNEwyX0NJRF9TQVRVUkFUSU9OLAorCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1lID0gIlNhdHVyYXRpb24iLAorCQkubWluaW11bSA9IDB4MCwKKwkJLm1heGltdW0gPSAweDFmLAorCQkuc3RlcCA9IDB4MSwKKwkJLmRlZmF1bHRfdmFsdWUgPSAweDEwLAorCQkuZmxhZ3MgPSAwLAorCX0seworCQkuaWQgPSBWNEwyX0NJRF9BVURJT19WT0xVTUUsCisJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUgPSAiVm9sdW1lIiwKKwkJLm1pbmltdW0gPSAweDAsCisJCS5tYXhpbXVtID0gMHgxZiwKKwkJLnN0ZXAgPSAweDEsCisJCS5kZWZhdWx0X3ZhbHVlID0gMHgxZiwKKwkJLmZsYWdzID0gMCwKKwl9LHsKKwkJLmlkID0gVjRMMl9DSURfQVVESU9fTVVURSwKKwkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAorCQkubmFtZSA9ICJNdXRlIiwKKwkJLm1pbmltdW0gPSAwLAorCQkubWF4aW11bSA9IDEsCisJCS5zdGVwID0gMSwKKwkJLmRlZmF1bHRfdmFsdWUgPSAxLAorCQkuZmxhZ3MgPSAwLAorCX0seworCQkuaWQgPSBWNEwyX0NJRF9SRURfQkFMQU5DRSwKKwkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZSA9ICJSZWQgY2hyb21hIGJhbGFuY2UiLAorCQkubWluaW11bSA9IC0xMjgsCisJCS5tYXhpbXVtID0gMTI3LAorCQkuc3RlcCA9IDEsCisJCS5kZWZhdWx0X3ZhbHVlID0gMCwKKwkJLmZsYWdzID0gMCwKKwl9LHsKKwkJLmlkID0gVjRMMl9DSURfQkxVRV9CQUxBTkNFLAorCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1lID0gIkJsdWUgY2hyb21hIGJhbGFuY2UiLAorCQkubWluaW11bSA9IC0xMjgsCisJCS5tYXhpbXVtID0gMTI3LAorCQkuc3RlcCA9IDEsCisJCS5kZWZhdWx0X3ZhbHVlID0gMCwKKwkJLmZsYWdzID0gMCwKKwl9LHsKKwkJLmlkID0gVjRMMl9DSURfR0FNTUEsCisJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUgPSAiR2FtbWEiLAorCQkubWluaW11bSA9IDB4MCwKKwkJLm1heGltdW0gPSAweDNmLAorCQkuc3RlcCA9IDB4MSwKKwkJLmRlZmF1bHRfdmFsdWUgPSAweDIwLAorCQkuZmxhZ3MgPSAwLAorCSB9Cit9OworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgZW0yOHh4X3VzYl9kcml2ZXI7CisKK3N0YXRpYyBERUNMQVJFX01VVEVYKGVtMjh4eF9zeXNmc19sb2NrKTsKK3N0YXRpYyBERUNMQVJFX1JXU0VNKGVtMjh4eF9kaXNjb25uZWN0KTsKKworLyoqKioqKioqKioqKioqKioqKioqKiAgdjRsMiBpbnRlcmZhY2UgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGt2aXJ0X3RvX3BhKHVuc2lnbmVkIGxvbmcgYWRyKQoreworCXVuc2lnbmVkIGxvbmcga3ZhLCByZXQ7CisKKwlrdmEgPSAodW5zaWduZWQgbG9uZylwYWdlX2FkZHJlc3Modm1hbGxvY190b19wYWdlKCh2b2lkICopYWRyKSk7CisJa3ZhIHw9IGFkciAmIChQQUdFX1NJWkUgLSAxKTsKKwlyZXQgPSBfX3BhKGt2YSk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIGVtMjh4eF9jb25maWcoKQorICogaW5pdHMgcmVnaXN0ZXJzIHdpdGggc2FuZSBkZWZhdWx0cworICovCitzdGF0aWMgaW50IGVtMjh4eF9jb25maWcoc3RydWN0IGVtMjh4eCAqZGV2KQoreworCisJLyogU2V0cyBJMkMgc3BlZWQgdG8gMTAwIEtIeiAqLworCWVtMjh4eF93cml0ZV9yZWdzX3JlcShkZXYsIDB4MDAsIDB4MDYsICJceDQwIiwgMSk7CisKKwkvKiBlbmFibGUgdmJpIGNhcHR1cmluZyAqLworCWVtMjh4eF9hdWRpb191c2JfbXV0ZShkZXYsIDEpOworCWRldi0+bXV0ZSA9IDE7CQkvKiBtYXliZSBub3QgdGhlIHJpZ2h0IHBsYWNlLi4uICovCisJZGV2LT52b2x1bWUgPSAweDFmOworCWVtMjh4eF9hdWRpb19hbmFsb2dfc2V0KGRldik7CisJZW0yOHh4X2F1ZGlvX2FuYWxvZ19zZXR1cChkZXYpOworCWVtMjh4eF9vdXRmbXRfc2V0X3l1djQyMihkZXYpOworCWVtMjh4eF9jb2xvcmxldmVsc19zZXRfZGVmYXVsdChkZXYpOworCWVtMjh4eF9jb21wcmVzc2lvbl9kaXNhYmxlKGRldik7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIGVtMjh4eF9jb25maWdfaTJjKCkKKyAqIGNvbmZpZ3VyZSBpMmMgYXR0YWNoZWQgZGV2aWNlcworICovCit2b2lkIGVtMjh4eF9jb25maWdfaTJjKHN0cnVjdCBlbTI4eHggKmRldikKK3sKKwlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgZjsKKwlzdHJ1Y3QgdmlkZW9fZGVjb2Rlcl9pbml0IGVtMjh4eF92ZGkgPSB7LmRhdGEgPSBOVUxMIH07CisKKworCS8qIGNvbmZpZ3VyZSBkZWNvZGVyICovCisJaWYoZGV2LT5tb2RlbCA9PSBFTTI4MjBfQk9BUkRfTVNJX1ZPWF9VU0JfMil7CisJCWVtMjh4eF92ZGkuZGF0YT1zYWE3MTE0X2kyY19pbml0OworCQllbTI4eHhfdmRpLmxlbj1zaXplb2Yoc2FhNzExNF9pMmNfaW5pdCk7CisJfQorCisKKwllbTI4eHhfaTJjX2NhbGxfY2xpZW50cyhkZXYsIERFQ09ERVJfSU5JVCwgJmVtMjh4eF92ZGkpOworCWVtMjh4eF9pMmNfY2FsbF9jbGllbnRzKGRldiwgREVDT0RFUl9TRVRfSU5QVVQsICZkZXYtPmN0bF9pbnB1dCk7CisvKgllbTI4eHhfaTJjX2NhbGxfY2xpZW50cyhkZXYsREVDT0RFUl9TRVRfUElDVFVSRSwgJmRldi0+dnBpYyk7ICovCisvKgllbTI4eHhfaTJjX2NhbGxfY2xpZW50cyhkZXYsREVDT0RFUl9TRVRfTk9STSwmZGV2LT50dm5vcm0tPmlkKTsgKi8KKy8qCWVtMjh4eF9pMmNfY2FsbF9jbGllbnRzKGRldixERUNPREVSX0VOQUJMRV9PVVRQVVQsJm91dHB1dCk7ICovCisvKgllbTI4eHhfaTJjX2NhbGxfY2xpZW50cyhkZXYsREVDT0RFUl9EVU1QLCBOVUxMKTsgKi8KKworCS8qIGNvbmZpZ3VyZSB0dW5lciAqLworCWYudHVuZXIgPSAwOworCWYudHlwZSA9IFY0TDJfVFVORVJfQU5BTE9HX1RWOworCWYuZnJlcXVlbmN5ID0gOTA3NjsJLyogRklYTUU6cmVtb3ZlIG1hZ2ljIG51bWJlciAqLworCWRldi0+Y3RsX2ZyZXEgPSBmLmZyZXF1ZW5jeTsKKwllbTI4eHhfaTJjX2NhbGxfY2xpZW50cyhkZXYsIFZJRElPQ19TX0ZSRVFVRU5DWSwgJmYpOworCisJLyogY29uZmlndXJlIHRkYTk4ODcgKi8KKworCisvKgllbTI4eHhfaTJjX2NhbGxfY2xpZW50cyhkZXYsVklESU9DX1NfU1RELCZkZXYtPnR2bm9ybS0+aWQpOyAqLworfQorCisvKgorICogZW0yOHh4X2VtcHR5X2ZyYW1lcXVldWVzKCkKKyAqIHByZXBhcmUgcXVldWVzIGZvciBpbmNvbWluZyBhbmQgb3V0Z29pbmcgZnJhbWVzCisgKi8KK3N0YXRpYyB2b2lkIGVtMjh4eF9lbXB0eV9mcmFtZXF1ZXVlcyhzdHJ1Y3QgZW0yOHh4ICpkZXYpCit7CisJdTMyIGk7CisKKwlJTklUX0xJU1RfSEVBRCgmZGV2LT5pbnF1ZXVlKTsKKwlJTklUX0xJU1RfSEVBRCgmZGV2LT5vdXRxdWV1ZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgRU0yOFhYX05VTV9GUkFNRVM7IGkrKykgeworCQlkZXYtPmZyYW1lW2ldLnN0YXRlID0gRl9VTlVTRUQ7CisJCWRldi0+ZnJhbWVbaV0uYnVmLmJ5dGVzdXNlZCA9IDA7CisJfQorfQorCitzdGF0aWMgdm9pZCB2aWRlb19tdXgoc3RydWN0IGVtMjh4eCAqZGV2LCBpbnQgaW5kZXgpCit7CisJaW50IGlucHV0LCBhaW5wdXQ7CisKKwlpbnB1dCA9IElOUFVUKGluZGV4KS0+dm11eDsKKwlkZXYtPmN0bF9pbnB1dCA9IGluZGV4OworCWRldi0+Y3RsX2FpbnB1dCA9IElOUFVUKGluZGV4KS0+YW11eDsKKworCWVtMjh4eF9pMmNfY2FsbF9jbGllbnRzKGRldiwgREVDT0RFUl9TRVRfSU5QVVQsICZpbnB1dCk7CisKKworCWVtMjh4eF92aWRlb2RiZygiU2V0dGluZyBpbnB1dCBpbmRleD0lZCwgdm11eD0lZCwgYW11eD0lZFxuIixpbmRleCxpbnB1dCxkZXYtPmN0bF9haW5wdXQpOworCisJaWYgKGRldi0+aGFzX21zcDM0eHgpIHsKKwkJZW0yOHh4X2kyY19jYWxsX2NsaWVudHMoZGV2LCBWSURJT0NfU19BVURJTywgJmRldi0+Y3RsX2FpbnB1dCk7CisJCWFpbnB1dCA9IEVNMjhYWF9BVURJT19TUkNfVFVORVI7CisJCWVtMjh4eF9hdWRpb19zb3VyY2UoZGV2LCBhaW5wdXQpOworCX0gZWxzZSB7CisJCXN3aXRjaCAoZGV2LT5jdGxfYWlucHV0KSB7CisJCWNhc2UgMDoKKwkJCWFpbnB1dCA9IEVNMjhYWF9BVURJT19TUkNfVFVORVI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWFpbnB1dCA9IEVNMjhYWF9BVURJT19TUkNfTElORTsKKwkJfQorCQllbTI4eHhfYXVkaW9fc291cmNlKGRldiwgYWlucHV0KTsKKwl9Cit9CisKKy8qCisgKiBlbTI4eHhfdjRsMl9vcGVuKCkKKyAqIGluaXRzIHRoZSBkZXZpY2UgYW5kIHN0YXJ0cyBpc29jIHRyYW5zZmVyCisgKi8KK3N0YXRpYyBpbnQgZW0yOHh4X3Y0bDJfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlpbnQgbWlub3IgPSBpbWlub3IoaW5vZGUpOworCWludCBlcnJDb2RlID0gMDsKKwlzdHJ1Y3QgZW0yOHh4ICpoLCpkZXYgPSBOVUxMOworCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7CisKKwlsaXN0X2Zvcl9lYWNoKGxpc3QsJmVtMjh4eF9kZXZsaXN0KSB7CisJCWggPSBsaXN0X2VudHJ5KGxpc3QsIHN0cnVjdCBlbTI4eHgsIGRldmxpc3QpOworCQlpZiAoaC0+dmRldi0+bWlub3IgPT0gbWlub3IpIHsKKwkJCWRldiAgPSBoOworCQl9CisJfQorCisJZmlscC0+cHJpdmF0ZV9kYXRhPWRldjsKKworCisJZW0yOHh4X3ZpZGVvZGJnKCJ1c2Vycz0lZFxuIiwgZGV2LT51c2Vycyk7CisKKwlpZiAoIWRvd25fcmVhZF90cnlsb2NrKCZlbTI4eHhfZGlzY29ubmVjdCkpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKKwlpZiAoZGV2LT51c2VycykgeworCQllbTI4eHhfd2FybigidGhpcyBkcml2ZXIgY2FuIGJlIG9wZW5lZCBvbmx5IG9uY2VcbiIpOworCQl1cF9yZWFkKCZlbTI4eHhfZGlzY29ubmVjdCk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisvKglpZihkZXYtPnZiaV9kZXYtPm1pbm9yID09IG1pbm9yKXsKKwkJZGV2LT50eXBlPVY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkU7CisJfSovCisJaWYgKGRldi0+dmRldi0+bWlub3IgPT0gbWlub3IpIHsKKwkJZGV2LT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCX0KKworCWluaXRfTVVURVgoJmRldi0+ZmlsZW9wX2xvY2spOwkvKiB0byAxID09IGF2YWlsYWJsZSAqLworCXNwaW5fbG9ja19pbml0KCZkZXYtPnF1ZXVlX2xvY2spOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRldi0+d2FpdF9mcmFtZSk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmZGV2LT53YWl0X3N0cmVhbSk7CisKKwlkb3duKCZkZXYtPmxvY2spOworCisJZW0yOHh4X3NldF9hbHRlcm5hdGUoZGV2KTsKKworCWRldi0+d2lkdGggPSBub3JtX21heHcoZGV2KTsKKwlkZXYtPmhlaWdodCA9IG5vcm1fbWF4aChkZXYpOworCWRldi0+ZnJhbWVfc2l6ZSA9IGRldi0+d2lkdGggKiBkZXYtPmhlaWdodCAqIDI7CisJZGV2LT5maWVsZF9zaXplID0gZGV2LT5mcmFtZV9zaXplID4+IDE7CS8qYm90aF9maWxlZHMgPyBkZXYtPmZyYW1lX3NpemU+PjEgOiBkZXYtPmZyYW1lX3NpemU7ICovCisJZGV2LT5ieXRlc3BlcmxpbmUgPSBkZXYtPndpZHRoICogMjsKKwlkZXYtPmhzY2FsZSA9IDA7CisJZGV2LT52c2NhbGUgPSAwOworCisJZW0yOHh4X2NhcHR1cmVfc3RhcnQoZGV2LCAxKTsKKwllbTI4eHhfcmVzb2x1dGlvbl9zZXQoZGV2KTsKKworCS8qIHN0YXJ0IHRoZSB0cmFuc2ZlciAqLworCWVyckNvZGUgPSBlbTI4eHhfaW5pdF9pc29jKGRldik7CisJaWYgKGVyckNvZGUpCisJCWdvdG8gZXJyOworCisJZGV2LT51c2VycysrOworCWZpbHAtPnByaXZhdGVfZGF0YSA9IGRldjsKKwlkZXYtPmlvID0gSU9fTk9ORTsKKwlkZXYtPnN0cmVhbSA9IFNUUkVBTV9PRkY7CisJZGV2LT5udW1fZnJhbWVzID0gMDsKKworCS8qIHByZXBhcmUgcXVldWVzICovCisJZW0yOHh4X2VtcHR5X2ZyYW1lcXVldWVzKGRldik7CisKKwlkZXYtPnN0YXRlIHw9IERFVl9JTklUSUFMSVpFRDsKKworCXZpZGVvX211eChkZXYsIDApOworCisgICAgICBlcnI6CisJdXAoJmRldi0+bG9jayk7CisJdXBfcmVhZCgmZW0yOHh4X2Rpc2Nvbm5lY3QpOworCXJldHVybiBlcnJDb2RlOworfQorCisvKgorICogZW0yOHh4X3JlYWxlYXNlX3Jlc291cmNlcygpCisgKiB1bnJlZ2lzdGVycyB0aGUgdjRsMixpMmMgYW5kIHVzYiBkZXZpY2VzCisgKiBjYWxsZWQgd2hlbiB0aGUgZGV2aWNlIGdldHMgZGlzY29uZWN0ZWQgb3IgYXQgbW9kdWxlIHVubG9hZAorKi8KK3N0YXRpYyB2b2lkIGVtMjh4eF9yZWxlYXNlX3Jlc291cmNlcyhzdHJ1Y3QgZW0yOHh4ICpkZXYpCit7CisJZG93bigmZW0yOHh4X3N5c2ZzX2xvY2spOworCisJZW0yOHh4X2luZm8oIlY0TDIgZGV2aWNlIC9kZXYvdmlkZW8lZCBkZXJlZ2lzdGVyZWRcbiIsCisJCSAgICBkZXYtPnZkZXYtPm1pbm9yKTsKKwlsaXN0X2RlbCgmZGV2LT5kZXZsaXN0KTsKKwl2aWRlb191bnJlZ2lzdGVyX2RldmljZShkZXYtPnZkZXYpOworLyoJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoZGV2LT52YmlfZGV2KTsgKi8KKwllbTI4eHhfaTJjX3VucmVnaXN0ZXIoZGV2KTsKKwl1c2JfcHV0X2RldihkZXYtPnVkZXYpOworCXVwKCZlbTI4eHhfc3lzZnNfbG9jayk7Cit9CisKKy8qCisgKiBlbTI4eHhfdjRsMl9jbG9zZSgpCisgKiBzdG9wcyBzdHJlYW1pbmcgYW5kIGRlYWxsb2NhdGVzIGFsbCByZXNvdXJjZXMgYWxsb2NhdGVkIGJ5IHRoZSB2NGwyIGNhbGxzIGFuZCBpb2N0bHMKKyAqLworc3RhdGljIGludCBlbTI4eHhfdjRsMl9jbG9zZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlpbnQgZXJyQ29kZTsKKwlzdHJ1Y3QgZW0yOHh4ICpkZXY9ZmlscC0+cHJpdmF0ZV9kYXRhOworCisJZW0yOHh4X3ZpZGVvZGJnKCJ1c2Vycz0lZFxuIiwgZGV2LT51c2Vycyk7CisKKwlkb3duKCZkZXYtPmxvY2spOworCisJZW0yOHh4X3VuaW5pdF9pc29jKGRldik7CisKKwllbTI4eHhfcmVsZWFzZV9idWZmZXJzKGRldik7CisKKwkvKiB0aGUgZGV2aWNlIGlzIGFscmVhZHkgZGlzY29ubmVjdCwgZnJlZSB0aGUgcmVtYWluaW5nIHJlc291cmNlcyAqLworCWlmIChkZXYtPnN0YXRlICYgREVWX0RJU0NPTk5FQ1RFRCkgeworCQllbTI4eHhfcmVsZWFzZV9yZXNvdXJjZXMoZGV2KTsKKwkJdXAoJmRldi0+bG9jayk7CisJCWtmcmVlKGRldik7CisJCXJldHVybiAwOworCX0KKworCS8qIHNldCBhbHRlcm5hdGUgMCAqLworCWRldi0+YWx0ID0gMDsKKwllbTI4eHhfdmlkZW9kYmcoInNldHRpbmcgYWx0ZXJuYXRlIDBcbiIpOworCWVyckNvZGUgPSB1c2Jfc2V0X2ludGVyZmFjZShkZXYtPnVkZXYsIDAsIDApOworCWlmIChlcnJDb2RlIDwgMCkgeworCQllbTI4eHhfZXJyZGV2ICgiY2Fubm90IGNoYW5nZSBhbHRlcm5hdGUgbnVtYmVyIHRvIDAgKGVycm9yPSVpKVxuIiwKKwkJICAgICBlcnJDb2RlKTsKKwl9CisKKwlkZXYtPnVzZXJzLS07CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlX25yKCZkZXYtPm9wZW4sIDEpOworCXVwKCZkZXYtPmxvY2spOworCXJldHVybiAwOworfQorCisvKgorICogZW0yOHh4X3Y0bDJfcmVhZCgpCisgKiB3aWxsIGFsbG9jYXRlIGJ1ZmZlcnMgd2hlbiBjYWxsZWQgZm9yIHRoZSBmaXJzdCB0aW1lCisgKi8KK3N0YXRpYyBzc2l6ZV90CitlbTI4eHhfdjRsMl9yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqIGJ1Ziwgc2l6ZV90IGNvdW50LAorCQkgbG9mZl90ICogZl9wb3MpCit7CisJc3RydWN0IGVtMjh4eF9mcmFtZV90ICpmLCAqaTsKKwl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7CisJaW50IHJldCA9IDA7CisJc3RydWN0IGVtMjh4eCAqZGV2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCisJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmZGV2LT5maWxlb3BfbG9jaykpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKKwlpZiAoZGV2LT5zdGF0ZSAmIERFVl9ESVNDT05ORUNURUQpIHsKKwkJZW0yOHh4X3ZpZGVvZGJnKCJkZXZpY2Ugbm90IHByZXNlbnRcbiIpOworCQl1cCgmZGV2LT5maWxlb3BfbG9jayk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmIChkZXYtPnN0YXRlICYgREVWX01JU0NPTkZJR1VSRUQpIHsKKwkJZW0yOHh4X3ZpZGVvZGJnKCJkZXZpY2UgbWlzY29uZmlndXJlZDsgY2xvc2UgYW5kIG9wZW4gaXQgYWdhaW5cbiIpOworCQl1cCgmZGV2LT5maWxlb3BfbG9jayk7CisJCXJldHVybiAtRUlPOworCX0KKworCWlmIChkZXYtPmlvID09IElPX01NQVApIHsKKwkJZW0yOHh4X3ZpZGVvZGJnICgiSU8gbWV0aG9kIGlzIHNldCB0byBtbWFwOyBjbG9zZSBhbmQgb3BlbiIKKwkJCQkiIHRoZSBkZXZpY2UgYWdhaW4gdG8gY2hvb3NlIHRoZSByZWFkIG1ldGhvZFxuIik7CisJCXVwKCZkZXYtPmZpbGVvcF9sb2NrKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGRldi0+aW8gPT0gSU9fTk9ORSkgeworCQlpZiAoIWVtMjh4eF9yZXF1ZXN0X2J1ZmZlcnMoZGV2LCBFTTI4WFhfTlVNX1JFQURfRlJBTUVTKSkgeworCQkJZW0yOHh4X2VycmRldigicmVhZCBmYWlsZWQsIG5vdCBlbm91Z2ggbWVtb3J5XG4iKTsKKwkJCXVwKCZkZXYtPmZpbGVvcF9sb2NrKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCWRldi0+aW8gPSBJT19SRUFEOworCQlkZXYtPnN0cmVhbSA9IFNUUkVBTV9PTjsKKwkJZW0yOHh4X3F1ZXVlX3VudXNlZGZyYW1lcyhkZXYpOworCX0KKworCWlmICghY291bnQpIHsKKwkJdXAoJmRldi0+ZmlsZW9wX2xvY2spOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAobGlzdF9lbXB0eSgmZGV2LT5vdXRxdWV1ZSkpIHsKKwkJaWYgKGZpbHAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7CisJCQl1cCgmZGV2LT5maWxlb3BfbG9jayk7CisJCQlyZXR1cm4gLUVBR0FJTjsKKwkJfQorCQlyZXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUKKwkJICAgIChkZXYtPndhaXRfZnJhbWUsCisJCSAgICAgKCFsaXN0X2VtcHR5KCZkZXYtPm91dHF1ZXVlKSkgfHwKKwkJICAgICAoZGV2LT5zdGF0ZSAmIERFVl9ESVNDT05ORUNURUQpKTsKKwkJaWYgKHJldCkgeworCQkJdXAoJmRldi0+ZmlsZW9wX2xvY2spOworCQkJcmV0dXJuIHJldDsKKwkJfQorCQlpZiAoZGV2LT5zdGF0ZSAmIERFVl9ESVNDT05ORUNURUQpIHsKKwkJCXVwKCZkZXYtPmZpbGVvcF9sb2NrKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisJfQorCisJZiA9IGxpc3RfZW50cnkoZGV2LT5vdXRxdWV1ZS5wcmV2LCBzdHJ1Y3QgZW0yOHh4X2ZyYW1lX3QsIGZyYW1lKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnF1ZXVlX2xvY2ssIGxvY2tfZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoaSwgJmRldi0+b3V0cXVldWUsIGZyYW1lKQorCSAgICBpLT5zdGF0ZSA9IEZfVU5VU0VEOworCUlOSVRfTElTVF9IRUFEKCZkZXYtPm91dHF1ZXVlKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnF1ZXVlX2xvY2ssIGxvY2tfZmxhZ3MpOworCisJZW0yOHh4X3F1ZXVlX3VudXNlZGZyYW1lcyhkZXYpOworCisJaWYgKGNvdW50ID4gZi0+YnVmLmxlbmd0aCkKKwkJY291bnQgPSBmLT5idWYubGVuZ3RoOworCisJaWYgKGNvcHlfdG9fdXNlcihidWYsIGYtPmJ1Zm1lbSwgY291bnQpKSB7CisJCXVwKCZkZXYtPmZpbGVvcF9sb2NrKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCSpmX3BvcyArPSBjb3VudDsKKworCXVwKCZkZXYtPmZpbGVvcF9sb2NrKTsKKworCXJldHVybiBjb3VudDsKK30KKworLyoKKyAqIGVtMjh4eF92NGwyX3BvbGwoKQorICogd2lsbCBhbGxvY2F0ZSBidWZmZXJzIHdoZW4gY2FsbGVkIGZvciB0aGUgZmlyc3QgdGltZQorICovCitzdGF0aWMgdW5zaWduZWQgaW50IGVtMjh4eF92NGwyX3BvbGwoc3RydWN0IGZpbGUgKmZpbHAsIHBvbGxfdGFibGUgKiB3YWl0KQoreworCXVuc2lnbmVkIGludCBtYXNrID0gMDsKKwlzdHJ1Y3QgZW0yOHh4ICpkZXYgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisKKwlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZkZXYtPmZpbGVvcF9sb2NrKSkKKwkJcmV0dXJuIFBPTExFUlI7CisKKwlpZiAoZGV2LT5zdGF0ZSAmIERFVl9ESVNDT05ORUNURUQpIHsKKwkJZW0yOHh4X3ZpZGVvZGJnKCJkZXZpY2Ugbm90IHByZXNlbnRcbiIpOworCX0gZWxzZSBpZiAoZGV2LT5zdGF0ZSAmIERFVl9NSVNDT05GSUdVUkVEKSB7CisJCWVtMjh4eF92aWRlb2RiZygiZGV2aWNlIGlzIG1pc2NvbmZpZ3VyZWQ7IGNsb3NlIGFuZCBvcGVuIGl0IGFnYWluXG4iKTsKKwl9IGVsc2UgeworCQlpZiAoZGV2LT5pbyA9PSBJT19OT05FKSB7CisJCQlpZiAoIWVtMjh4eF9yZXF1ZXN0X2J1ZmZlcnMKKwkJCSAgICAoZGV2LCBFTTI4WFhfTlVNX1JFQURfRlJBTUVTKSkgeworCQkJCWVtMjh4eF93YXJuCisJCQkJICAgICgicG9sbCgpIGZhaWxlZCwgbm90IGVub3VnaCBtZW1vcnlcbiIpOworCQkJfSBlbHNlIHsKKwkJCQlkZXYtPmlvID0gSU9fUkVBRDsKKwkJCQlkZXYtPnN0cmVhbSA9IFNUUkVBTV9PTjsKKwkJCX0KKwkJfQorCisJCWlmIChkZXYtPmlvID09IElPX1JFQUQpIHsKKwkJCWVtMjh4eF9xdWV1ZV91bnVzZWRmcmFtZXMoZGV2KTsKKwkJCXBvbGxfd2FpdChmaWxwLCAmZGV2LT53YWl0X2ZyYW1lLCB3YWl0KTsKKworCQkJaWYgKCFsaXN0X2VtcHR5KCZkZXYtPm91dHF1ZXVlKSkKKwkJCQltYXNrIHw9IFBPTExJTiB8IFBPTExSRE5PUk07CisKKwkJCXVwKCZkZXYtPmZpbGVvcF9sb2NrKTsKKworCQkJcmV0dXJuIG1hc2s7CisJCX0KKwl9CisKKwl1cCgmZGV2LT5maWxlb3BfbG9jayk7CisJcmV0dXJuIFBPTExFUlI7Cit9CisKKy8qCisgKiBlbTI4eHhfdm1fb3BlbigpCisgKi8KK3N0YXRpYyB2b2lkIGVtMjh4eF92bV9vcGVuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXN0cnVjdCBlbTI4eHhfZnJhbWVfdCAqZiA9IHZtYS0+dm1fcHJpdmF0ZV9kYXRhOworCWYtPnZtYV91c2VfY291bnQrKzsKK30KKworLyoKKyAqIGVtMjh4eF92bV9jbG9zZSgpCisgKi8KK3N0YXRpYyB2b2lkIGVtMjh4eF92bV9jbG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwkvKiBOT1RFOiBidWZmZXJzIGFyZSBub3QgZnJlZWQgaGVyZSAqLworCXN0cnVjdCBlbTI4eHhfZnJhbWVfdCAqZiA9IHZtYS0+dm1fcHJpdmF0ZV9kYXRhOworCWYtPnZtYV91c2VfY291bnQtLTsKK30KKworc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBlbTI4eHhfdm1fb3BzID0geworCS5vcGVuID0gZW0yOHh4X3ZtX29wZW4sCisJLmNsb3NlID0gZW0yOHh4X3ZtX2Nsb3NlLAorfTsKKworLyoKKyAqIGVtMjh4eF92NGwyX21tYXAoKQorICovCitzdGF0aWMgaW50IGVtMjh4eF92NGwyX21tYXAoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCwKKwkgICAgc3RhcnQgPSB2bWEtPnZtX3N0YXJ0LCBwb3MsIHBhZ2U7CisJdTMyIGk7CisKKwlzdHJ1Y3QgZW0yOHh4ICpkZXYgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisKKwlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZkZXYtPmZpbGVvcF9sb2NrKSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCWlmIChkZXYtPnN0YXRlICYgREVWX0RJU0NPTk5FQ1RFRCkgeworCQllbTI4eHhfdmlkZW9kYmcoIm1tYXA6IGRldmljZSBub3QgcHJlc2VudFxuIik7CisJCXVwKCZkZXYtPmZpbGVvcF9sb2NrKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKGRldi0+c3RhdGUgJiBERVZfTUlTQ09ORklHVVJFRCkgeworCQllbTI4eHhfdmlkZW9kYmcgKCJtbWFwOiBEZXZpY2UgaXMgbWlzY29uZmlndXJlZDsgY2xvc2UgYW5kICIKKwkJCQkJCSJvcGVuIGl0IGFnYWluXG4iKTsKKwkJdXAoJmRldi0+ZmlsZW9wX2xvY2spOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlpZiAoZGV2LT5pbyAhPSBJT19NTUFQIHx8ICEodm1hLT52bV9mbGFncyAmIFZNX1dSSVRFKSB8fAorCSAgICBzaXplICE9IFBBR0VfQUxJR04oZGV2LT5mcmFtZVswXS5idWYubGVuZ3RoKSkgeworCQl1cCgmZGV2LT5maWxlb3BfbG9jayk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBkZXYtPm51bV9mcmFtZXM7IGkrKykgeworCQlpZiAoKGRldi0+ZnJhbWVbaV0uYnVmLm0ub2Zmc2V0ID4+IFBBR0VfU0hJRlQpID09IHZtYS0+dm1fcGdvZmYpCisJCQlicmVhazsKKwl9CisJaWYgKGkgPT0gZGV2LT5udW1fZnJhbWVzKSB7CisJCWVtMjh4eF92aWRlb2RiZygibW1hcDogdXNlciBzdXBwbGllZCBtYXBwaW5nIGFkZHJlc3MgaXMgb3V0IG9mIHJhbmdlXG4iKTsKKwkJdXAoJmRldi0+ZmlsZW9wX2xvY2spOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBWTV9JTyBpcyBldmVudHVhbGx5IGdvaW5nIHRvIHJlcGxhY2UgUGFnZVJlc2VydmVkIGFsdG9nZXRoZXIgKi8KKwl2bWEtPnZtX2ZsYWdzIHw9IFZNX0lPOworCXZtYS0+dm1fZmxhZ3MgfD0gVk1fUkVTRVJWRUQ7CS8qIGF2b2lkIHRvIHN3YXAgb3V0IHRoaXMgVk1BICovCisKKwlwb3MgPSAodW5zaWduZWQgbG9uZylkZXYtPmZyYW1lW2ldLmJ1Zm1lbTsKKwl3aGlsZSAoc2l6ZSA+IDApIHsJLyogc2l6ZSBpcyBwYWdlLWFsaWduZWQgKi8KKwkJcGFnZSA9IHZtYWxsb2NfdG9fcGZuKCh2b2lkICopcG9zKTsKKwkJaWYgKHJlbWFwX3Bmbl9yYW5nZSh2bWEsIHN0YXJ0LCBwYWdlLCBQQUdFX1NJWkUsCisJCQkJICAgIHZtYS0+dm1fcGFnZV9wcm90KSkgeworCQkJZW0yOHh4X3ZpZGVvZGJnKCJtbWFwOiByZW5hbWUgcGFnZSBtYXAgZmFpbGVkXG4iKTsKKwkJCXVwKCZkZXYtPmZpbGVvcF9sb2NrKTsKKwkJCXJldHVybiAtRUFHQUlOOworCQl9CisJCXN0YXJ0ICs9IFBBR0VfU0laRTsKKwkJcG9zICs9IFBBR0VfU0laRTsKKwkJc2l6ZSAtPSBQQUdFX1NJWkU7CisJfQorCisJdm1hLT52bV9vcHMgPSAmZW0yOHh4X3ZtX29wczsKKwl2bWEtPnZtX3ByaXZhdGVfZGF0YSA9ICZkZXYtPmZyYW1lW2ldOworCisJZW0yOHh4X3ZtX29wZW4odm1hKTsKKwl1cCgmZGV2LT5maWxlb3BfbG9jayk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBlbTI4eHhfZ2V0X2N0cmwoKQorICogcmV0dXJuIHRoZSBjdXJyZW50IHNhdHVyYXRpb24sIGJyaWdodG5lc3Mgb3IgY29udHJhc3QsIG11dGUgc3RhdGUKKyAqLworc3RhdGljIGludCBlbTI4eHhfZ2V0X2N0cmwoc3RydWN0IGVtMjh4eCAqZGV2LCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQoreworCXMzMiB0bXA7CisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJY3RybC0+dmFsdWUgPSBkZXYtPm11dGU7CisJCXJldHVybiAwOworCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgorCQljdHJsLT52YWx1ZSA9IGRldi0+dm9sdW1lOworCQlyZXR1cm4gMDsKKwljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CisJCWlmICgodG1wID0gZW0yOHh4X2JyaWdodG5lc3NfZ2V0KGRldikpIDwgMCkKKwkJCXJldHVybiAtRUlPOworCQljdHJsLT52YWx1ZSA9IChzMzIpICgoczgpIHRtcCk7CS8qIEZJWE1FOiBjbGVuYWVyIHdheSB0byBleHRlbmQgc2lnbj8gKi8KKwkJcmV0dXJuIDA7CisJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKKwkJaWYgKChjdHJsLT52YWx1ZSA9IGVtMjh4eF9jb250cmFzdF9nZXQoZGV2KSkgPCAwKQorCQkJcmV0dXJuIC1FSU87CisJCXJldHVybiAwOworCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKKwkJaWYgKChjdHJsLT52YWx1ZSA9IGVtMjh4eF9zYXR1cmF0aW9uX2dldChkZXYpKSA8IDApCisJCQlyZXR1cm4gLUVJTzsKKwkJcmV0dXJuIDA7CisJY2FzZSBWNEwyX0NJRF9SRURfQkFMQU5DRToKKwkJaWYgKCh0bXAgPSBlbTI4eHhfdl9iYWxhbmNlX2dldChkZXYpKSA8IDApCisJCQlyZXR1cm4gLUVJTzsKKwkJY3RybC0+dmFsdWUgPSAoczMyKSAoKHM4KSB0bXApOwkvKiBGSVhNRTogY2xlbmFlciB3YXkgdG8gZXh0ZW5kIHNpZ24/ICovCisJCXJldHVybiAwOworCWNhc2UgVjRMMl9DSURfQkxVRV9CQUxBTkNFOgorCQlpZiAoKHRtcCA9IGVtMjh4eF91X2JhbGFuY2VfZ2V0KGRldikpIDwgMCkKKwkJCXJldHVybiAtRUlPOworCQljdHJsLT52YWx1ZSA9IChzMzIpICgoczgpIHRtcCk7CS8qIEZJWE1FOiBjbGVuYWVyIHdheSB0byBleHRlbmQgc2lnbj8gKi8KKwkJcmV0dXJuIDA7CisJY2FzZSBWNEwyX0NJRF9HQU1NQToKKwkJaWYgKChjdHJsLT52YWx1ZSA9IGVtMjh4eF9nYW1tYV9nZXQoZGV2KSkgPCAwKQorCQkJcmV0dXJuIC1FSU87CisJCXJldHVybiAwOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KK30KKworLyoKKyAqIGVtMjh4eF9zZXRfY3RybCgpCisgKiBtdXRlIG9yIHNldCBuZXcgc2F0dXJhdGlvbiwgYnJpZ2h0bmVzcyBvciBjb250cmFzdAorICovCitzdGF0aWMgaW50IGVtMjh4eF9zZXRfY3RybChzdHJ1Y3QgZW0yOHh4ICpkZXYsIGNvbnN0IHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJaWYgKGN0cmwtPnZhbHVlICE9IGRldi0+bXV0ZSkgeworCQkJZGV2LT5tdXRlID0gY3RybC0+dmFsdWU7CisJCQllbTI4eHhfYXVkaW9fdXNiX211dGUoZGV2LCBjdHJsLT52YWx1ZSk7CisJCQlyZXR1cm4gZW0yOHh4X2F1ZGlvX2FuYWxvZ19zZXQoZGV2KTsKKwkJfQorCQlyZXR1cm4gMDsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKKwkJZGV2LT52b2x1bWUgPSBjdHJsLT52YWx1ZTsKKwkJcmV0dXJuIGVtMjh4eF9hdWRpb19hbmFsb2dfc2V0KGRldik7CisJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgorCQlyZXR1cm4gZW0yOHh4X2JyaWdodG5lc3Nfc2V0KGRldiwgY3RybC0+dmFsdWUpOworCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6CisJCXJldHVybiBlbTI4eHhfY29udHJhc3Rfc2V0KGRldiwgY3RybC0+dmFsdWUpOworCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKKwkJcmV0dXJuIGVtMjh4eF9zYXR1cmF0aW9uX3NldChkZXYsIGN0cmwtPnZhbHVlKTsKKwljYXNlIFY0TDJfQ0lEX1JFRF9CQUxBTkNFOgorCQlyZXR1cm4gZW0yOHh4X3ZfYmFsYW5jZV9zZXQoZGV2LCBjdHJsLT52YWx1ZSk7CisJY2FzZSBWNEwyX0NJRF9CTFVFX0JBTEFOQ0U6CisJCXJldHVybiBlbTI4eHhfdV9iYWxhbmNlX3NldChkZXYsIGN0cmwtPnZhbHVlKTsKKwljYXNlIFY0TDJfQ0lEX0dBTU1BOgorCQlyZXR1cm4gZW0yOHh4X2dhbW1hX3NldChkZXYsIGN0cmwtPnZhbHVlKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9Cit9CisKKy8qCisgKiBlbTI4eHhfc3RyZWFtX2ludGVycnVwdCgpCisgKiBzdG9wcyBzdHJlYW1pbmcKKyAqLworc3RhdGljIGludCBlbTI4eHhfc3RyZWFtX2ludGVycnVwdChzdHJ1Y3QgZW0yOHh4ICpkZXYpCit7CisJaW50IHJldCA9IDA7CisKKwkvKiBzdG9wIHJlYWRpbmcgZnJvbSB0aGUgZGV2aWNlICovCisKKwlkZXYtPnN0cmVhbSA9IFNUUkVBTV9JTlRFUlJVUFQ7CisJcmV0ID0gd2FpdF9ldmVudF90aW1lb3V0KGRldi0+d2FpdF9zdHJlYW0sCisJCQkJIChkZXYtPnN0cmVhbSA9PSBTVFJFQU1fT0ZGKSB8fAorCQkJCSAoZGV2LT5zdGF0ZSAmIERFVl9ESVNDT05ORUNURUQpLAorCQkJCSBFTTI4WFhfVVJCX1RJTUVPVVQpOworCWlmIChkZXYtPnN0YXRlICYgREVWX0RJU0NPTk5FQ1RFRCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJZWxzZSBpZiAocmV0KSB7CisJCWRldi0+c3RhdGUgfD0gREVWX01JU0NPTkZJR1VSRUQ7CisJCWVtMjh4eF92aWRlb2RiZygiZGV2aWNlIGlzIG1pc2NvbmZpZ3VyZWQ7IGNsb3NlIGFuZCAiCisJCQkib3BlbiAvZGV2L3ZpZGVvJWQgYWdhaW5cbiIsIGRldi0+dmRldi0+bWlub3IpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGVtMjh4eF9zZXRfbm9ybShzdHJ1Y3QgZW0yOHh4ICpkZXYsIGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKwl1bnNpZ25lZCBpbnQgaHNjYWxlLCB2c2NhbGU7CisJdW5zaWduZWQgaW50IG1heGgsIG1heHc7CisKKwltYXh3ID0gbm9ybV9tYXh3KGRldik7CisJbWF4aCA9IG5vcm1fbWF4aChkZXYpOworCisJLyogd2lkdGggbXVzdCBldmVuIGJlY2F1c2Ugb2YgdGhlIFlVWVYgZm9ybWF0ICovCisJLyogaGVpZ2h0IG11c3QgYmUgZXZlbiBiZWNhdXNlIG9mIGludGVybGFjaW5nICovCisJaGVpZ2h0ICY9IDB4ZmZmZTsKKwl3aWR0aCAmPSAweGZmZmU7CisKKwlpZiAoaGVpZ2h0IDwgMzIpCisJCWhlaWdodCA9IDMyOworCWlmIChoZWlnaHQgPiBtYXhoKQorCQloZWlnaHQgPSBtYXhoOworCWlmICh3aWR0aCA8IDQ4KQorCQl3aWR0aCA9IDQ4OworCWlmICh3aWR0aCA+IG1heHcpCisJCXdpZHRoID0gbWF4dzsKKworCWlmICgoaHNjYWxlID0gKCgodW5zaWduZWQgbG9uZyltYXh3KSA8PCAxMikgLyB3aWR0aCAtIDQwOTZMKSA+PSAweDQwMDApCisJCWhzY2FsZSA9IDB4M2ZmZjsKKwl3aWR0aCA9ICgoKHVuc2lnbmVkIGxvbmcpbWF4dykgPDwgMTIpIC8gKGhzY2FsZSArIDQwOTZMKTsKKworCWlmICgodnNjYWxlID0gKCgodW5zaWduZWQgbG9uZyltYXhoKSA8PCAxMikgLyBoZWlnaHQgLSA0MDk2TCkgPj0gMHg0MDAwKQorCQl2c2NhbGUgPSAweDNmZmY7CisJaGVpZ2h0ID0gKCgodW5zaWduZWQgbG9uZyltYXhoKSA8PCAxMikgLyAodnNjYWxlICsgNDA5NkwpOworCisJLyogc2V0IG5ldyBpbWFnZSBzaXplICovCisJZGV2LT53aWR0aCA9IHdpZHRoOworCWRldi0+aGVpZ2h0ID0gaGVpZ2h0OworCWRldi0+ZnJhbWVfc2l6ZSA9IGRldi0+d2lkdGggKiBkZXYtPmhlaWdodCAqIDI7CisJZGV2LT5maWVsZF9zaXplID0gZGV2LT5mcmFtZV9zaXplID4+IDE7CS8qYm90aF9maWxlZHMgPyBkZXYtPmZyYW1lX3NpemU+PjEgOiBkZXYtPmZyYW1lX3NpemU7ICovCisJZGV2LT5ieXRlc3BlcmxpbmUgPSBkZXYtPndpZHRoICogMjsKKwlkZXYtPmhzY2FsZSA9IGhzY2FsZTsKKwlkZXYtPnZzY2FsZSA9IHZzY2FsZTsKKworCWVtMjh4eF9yZXNvbHV0aW9uX3NldChkZXYpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBlbTI4eHhfdjRsMl9kb19pb2N0bCgpCisgKiBUaGlzIGZ1bmN0aW9uIGlzIF9ub3RfIGNhbGxlZCBkaXJlY3RseSwgYnV0IGZyb20KKyAqIGVtMjh4eF92NGwyX2lvY3RsLiBVc2Vyc3BhY2UKKyAqIGNvcHlpbmcgaXMgZG9uZSBhbHJlYWR5LCBhcmcgaXMgYSBrZXJuZWwgcG9pbnRlci4KKyAqLworc3RhdGljIGludCBlbTI4eHhfZG9faW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCisJCQkgICBzdHJ1Y3QgZW0yOHh4ICpkZXYsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZywKKwkJCSAgIHY0bDJfa2lvY3RsIGRyaXZlcl9pb2N0bCkKK3sKKwlpbnQgcmV0OworCisJc3dpdGNoIChjbWQpIHsKKwkJLyogLS0tLS0tLS0tLSB0diBub3JtcyAtLS0tLS0tLS0tICovCisJY2FzZSBWSURJT0NfRU5VTVNURDoKKwkJeworCQkJc3RydWN0IHY0bDJfc3RhbmRhcmQgKmUgPSBhcmc7CisJCQl1bnNpZ25lZCBpbnQgaTsKKworCQkJaSA9IGUtPmluZGV4OworCQkJaWYgKGkgPj0gVFZOT1JNUykKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCXJldCA9IHY0bDJfdmlkZW9fc3RkX2NvbnN0cnVjdChlLCB0dm5vcm1zW2UtPmluZGV4XS5pZCwKKwkJCQkJCSAgICAgICB0dm5vcm1zW2UtPmluZGV4XS5uYW1lKTsKKwkJCWUtPmluZGV4ID0gaTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCXJldHVybiByZXQ7CisJCQlyZXR1cm4gMDsKKwkJfQorCWNhc2UgVklESU9DX0dfU1REOgorCQl7CisJCQl2NGwyX3N0ZF9pZCAqaWQgPSBhcmc7CisKKwkJCSppZCA9IGRldi0+dHZub3JtLT5pZDsKKwkJCXJldHVybiAwOworCQl9CisJY2FzZSBWSURJT0NfU19TVEQ6CisJCXsKKwkJCXY0bDJfc3RkX2lkICppZCA9IGFyZzsKKwkJCXVuc2lnbmVkIGludCBpOworCisJCQlmb3IgKGkgPSAwOyBpIDwgVFZOT1JNUzsgaSsrKQorCQkJCWlmICgqaWQgPT0gdHZub3Jtc1tpXS5pZCkKKwkJCQkJYnJlYWs7CisJCQlpZiAoaSA9PSBUVk5PUk1TKQorCQkJCWZvciAoaSA9IDA7IGkgPCBUVk5PUk1TOyBpKyspCisJCQkJCWlmICgqaWQgJiB0dm5vcm1zW2ldLmlkKQorCQkJCQkJYnJlYWs7CisJCQlpZiAoaSA9PSBUVk5PUk1TKQorCQkJCXJldHVybiAtRUlOVkFMOworCisJCQlkb3duKCZkZXYtPmxvY2spOworCQkJZGV2LT50dm5vcm0gPSAmdHZub3Jtc1tpXTsKKworCQkJZW0yOHh4X3NldF9ub3JtKGRldiwgZGV2LT53aWR0aCwgZGV2LT5oZWlnaHQpOworCisvKgorCQlkZXYtPndpZHRoPW5vcm1fbWF4dyhkZXYpOworCQlkZXYtPmhlaWdodD1ub3JtX21heGgoZGV2KTsKKwkJZGV2LT5mcmFtZV9zaXplPWRldi0+d2lkdGgqZGV2LT5oZWlnaHQqMjsKKwkJZGV2LT5maWVsZF9zaXplPWRldi0+ZnJhbWVfc2l6ZT4+MTsKKwkJZGV2LT5ieXRlc3BlcmxpbmU9ZGV2LT53aWR0aCoyOworCQlkZXYtPmhzY2FsZT0wOworCQlkZXYtPnZzY2FsZT0wOworCisJCWVtMjh4eF9yZXNvbHV0aW9uX3NldChkZXYpOworKi8KKy8qCisJCWVtMjh4eF91bmluaXRfaXNvYyhkZXYpOworCQllbTI4eHhfc2V0X2FsdGVybmF0ZShkZXYpOworCQllbTI4eHhfY2FwdHVyZV9zdGFydChkZXYsIDEpOworCQllbTI4eHhfcmVzb2x1dGlvbl9zZXQoZGV2KTsKKwkJZW0yOHh4X2luaXRfaXNvYyhkZXYpOworKi8KKwkJCWVtMjh4eF9pMmNfY2FsbF9jbGllbnRzKGRldiwgREVDT0RFUl9TRVRfTk9STSwKKwkJCQkJCSZ0dm5vcm1zW2ldLm1vZGUpOworCQkJZW0yOHh4X2kyY19jYWxsX2NsaWVudHMoZGV2LCBWSURJT0NfU19TVEQsCisJCQkJCQkmZGV2LT50dm5vcm0tPmlkKTsKKworCQkJdXAoJmRldi0+bG9jayk7CisKKwkJCXJldHVybiAwOworCQl9CisKKwkJLyogLS0tLS0tIGlucHV0IHN3aXRjaGluZyAtLS0tLS0tLS0tICovCisJY2FzZSBWSURJT0NfRU5VTUlOUFVUOgorCQl7CisJCQlzdHJ1Y3QgdjRsMl9pbnB1dCAqaSA9IGFyZzsKKwkJCXVuc2lnbmVkIGludCBuOworCQkJc3RhdGljIGNvbnN0IGNoYXIgKmluYW1lW10gPSB7CisJCQkJW0VNMjhYWF9WTVVYX0NPTVBPU0lURTFdID0gIkNvbXBvc2l0ZTEiLAorCQkJCVtFTTI4WFhfVk1VWF9DT01QT1NJVEUyXSA9ICJDb21wb3NpdGUyIiwKKwkJCQlbRU0yOFhYX1ZNVVhfQ09NUE9TSVRFM10gPSAiQ29tcG9zaXRlMyIsCisJCQkJW0VNMjhYWF9WTVVYX0NPTVBPU0lURTRdID0gIkNvbXBvc2l0ZTQiLAorCQkJCVtFTTI4WFhfVk1VWF9TVklERU9dID0gIlMtVmlkZW8iLAorCQkJCVtFTTI4WFhfVk1VWF9URUxFVklTSU9OXSA9ICJUZWxldmlzaW9uIiwKKwkJCQlbRU0yOFhYX1ZNVVhfQ0FCTEVdID0gIkNhYmxlIFRWIiwKKwkJCQlbRU0yOFhYX1ZNVVhfRFZCXSA9ICJEVkIiLAorCQkJCVtFTTI4WFhfVk1VWF9ERUJVR10gPSAiZm9yIGRlYnVnIG9ubHkiLAorCQkJfTsKKworCQkJbiA9IGktPmluZGV4OworCQkJaWYgKG4gPj0gTUFYX0VNMjhYWF9JTlBVVCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWlmICgwID09IElOUFVUKG4pLT50eXBlKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJbWVtc2V0KGksIDAsIHNpemVvZigqaSkpOworCQkJaS0+aW5kZXggPSBuOworCQkJaS0+dHlwZSA9IFY0TDJfSU5QVVRfVFlQRV9DQU1FUkE7CisJCQlzdHJjcHkoaS0+bmFtZSwgaW5hbWVbSU5QVVQobiktPnR5cGVdKTsKKwkJCWlmICgoRU0yOFhYX1ZNVVhfVEVMRVZJU0lPTiA9PSBJTlBVVChuKS0+dHlwZSkgfHwKKwkJCSAgICAoRU0yOFhYX1ZNVVhfQ0FCTEUgPT0gSU5QVVQobiktPnR5cGUpKQorCQkJCWktPnR5cGUgPSBWNEwyX0lOUFVUX1RZUEVfVFVORVI7CisJCQlmb3IgKG4gPSAwOyBuIDwgQVJSQVlfU0laRSh0dm5vcm1zKTsgbisrKQorCQkJCWktPnN0ZCB8PSB0dm5vcm1zW25dLmlkOworCQkJcmV0dXJuIDA7CisJCX0KKworCWNhc2UgVklESU9DX0dfSU5QVVQ6CisJCXsKKwkJCWludCAqaSA9IGFyZzsKKwkJCSppID0gZGV2LT5jdGxfaW5wdXQ7CisKKwkJCXJldHVybiAwOworCQl9CisKKwljYXNlIFZJRElPQ19TX0lOUFVUOgorCQl7CisJCQlpbnQgKmluZGV4ID0gYXJnOworCisJCQlpZiAoKmluZGV4ID49IE1BWF9FTTI4WFhfSU5QVVQpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlpZiAoMCA9PSBJTlBVVCgqaW5kZXgpLT50eXBlKQorCQkJCXJldHVybiAtRUlOVkFMOworCisJCQlkb3duKCZkZXYtPmxvY2spOworCQkJdmlkZW9fbXV4KGRldiwgKmluZGV4KTsKKwkJCXVwKCZkZXYtPmxvY2spOworCisJCQlyZXR1cm4gMDsKKwkJfQorCisJY2FzZSBWSURJT0NfR19BVURJTzoKKwkJeworCQkJc3RydWN0IHY0bDJfYXVkaW8gKmEgPSBhcmc7CisJCQl1bnNpZ25lZCBpbnQgaW5kZXggPSBhLT5pbmRleDsKKworCQkJaWYgKGEtPmluZGV4ID4gMSkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCW1lbXNldChhLCAwLCBzaXplb2YoKmEpKTsKKwkJCWluZGV4ID0gZGV2LT5jdGxfYWlucHV0OworCisJCQlpZiAoaW5kZXggPT0gMCkgeworCQkJCXN0cmNweShhLT5uYW1lLCAiVGVsZXZpc2lvbiIpOworCQkJfSBlbHNlIHsKKwkJCQlzdHJjcHkoYS0+bmFtZSwgIkxpbmUgSW4iKTsKKwkJCX0KKwkJCWEtPmNhcGFiaWxpdHkgPSBWNEwyX0FVRENBUF9TVEVSRU87CisJCQlhLT5pbmRleCA9IGluZGV4OworCQkJcmV0dXJuIDA7CisJCX0KKworCWNhc2UgVklESU9DX1NfQVVESU86CisJCXsKKwkJCXN0cnVjdCB2NGwyX2F1ZGlvICphID0gYXJnOworCQkJaWYgKGEtPmluZGV4ICE9IGRldi0+Y3RsX2FpbnB1dCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKworCQkJcmV0dXJuIDA7CisJCX0KKworCQkvKiAtLS0gY29udHJvbHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCWNhc2UgVklESU9DX1FVRVJZQ1RSTDoKKwkJeworCQkJc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYyA9IGFyZzsKKwkJCXU4IGksIG47CisJCQluID0gc2l6ZW9mKGVtMjh4eF9xY3RybCkgLyBzaXplb2YoZW0yOHh4X3FjdHJsWzBdKTsKKwkJCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisJCQkJaWYgKHFjLT5pZCAmJiBxYy0+aWQgPT0gZW0yOHh4X3FjdHJsW2ldLmlkKSB7CisJCQkJCW1lbWNweShxYywgJihlbTI4eHhfcWN0cmxbaV0pLAorCQkJCQkgICAgICAgc2l6ZW9mKCpxYykpOworCQkJCQlyZXR1cm4gMDsKKwkJCQl9CisKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwljYXNlIFZJRElPQ19HX0NUUkw6CisJCXsKKwkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwgPSBhcmc7CisKKworCQkJcmV0dXJuIGVtMjh4eF9nZXRfY3RybChkZXYsIGN0cmwpOworCQl9CisKKwljYXNlIFZJRElPQ19TX0NUUkxfT0xEOgkvKiA/Pz8gKi8KKwljYXNlIFZJRElPQ19TX0NUUkw6CisJCXsKKwkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwgPSBhcmc7CisJCQl1OCBpLCBuOworCisKKwkJCW4gPSBzaXplb2YoZW0yOHh4X3FjdHJsKSAvIHNpemVvZihlbTI4eHhfcWN0cmxbMF0pOworCQkJZm9yIChpID0gMDsgaSA8IG47IGkrKykKKwkJCQlpZiAoY3RybC0+aWQgPT0gZW0yOHh4X3FjdHJsW2ldLmlkKSB7CisJCQkJCWlmIChjdHJsLT52YWx1ZSA8CisJCQkJCSAgICBlbTI4eHhfcWN0cmxbaV0ubWluaW11bQorCQkJCQkgICAgfHwgY3RybC0+dmFsdWUgPgorCQkJCQkgICAgZW0yOHh4X3FjdHJsW2ldLm1heGltdW0pCisJCQkJCQlyZXR1cm4gLUVSQU5HRTsKKworCQkJCQlyZXR1cm4gZW0yOHh4X3NldF9jdHJsKGRldiwgY3RybCk7CisJCQkJfQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQkvKiAtLS0gdHVuZXIgaW9jdGxzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCWNhc2UgVklESU9DX0dfVFVORVI6CisJCXsKKwkJCXN0cnVjdCB2NGwyX3R1bmVyICp0ID0gYXJnOworCQkJaW50IHN0YXR1cyA9IDA7CisKKwkJCWlmICgwICE9IHQtPmluZGV4KQorCQkJCXJldHVybiAtRUlOVkFMOworCisJCQltZW1zZXQodCwgMCwgc2l6ZW9mKCp0KSk7CisJCQlzdHJjcHkodC0+bmFtZSwgIlR1bmVyIik7CisJCQl0LT50eXBlID0gVjRMMl9UVU5FUl9BTkFMT0dfVFY7CisJCQl0LT5jYXBhYmlsaXR5ID0gVjRMMl9UVU5FUl9DQVBfTk9STTsKKwkJCXQtPnJhbmdlaGlnaCA9IDB4ZmZmZmZmZmZVTDsJLyogRklYTUU6IHNldCBjb3JyZWN0IHJhbmdlICovCisvKgkJdC0+c2lnbmFsID0gMHhmZmZmOyovCisvKgkJZW0yOHh4X2kyY19jYWxsX2NsaWVudHMoZGV2LFZJRElPQ19HX1RVTkVSLHQpOyovCisJCQkvKiBObyB3YXkgdG8gZ2V0IHNpZ25hbCBzdHJlbmd0aD8gKi8KKwkJCWRvd24oJmRldi0+bG9jayk7CisJCQllbTI4eHhfaTJjX2NhbGxfY2xpZW50cyhkZXYsIERFQ09ERVJfR0VUX1NUQVRVUywKKwkJCQkJCSZzdGF0dXMpOworCQkJdXAoJmRldi0+bG9jayk7CisJCQl0LT5zaWduYWwgPQorCQkJICAgIChzdGF0dXMgJiBERUNPREVSX1NUQVRVU19HT09EKSAhPSAwID8gMHhmZmZmIDogMDsKKworCQkJZW0yOHh4X3ZpZGVvZGJnKCJWSURJT19HX1RVTkVSOiBzaWduYWw9JXgsIGFmYz0leFxuIiwgdC0+c2lnbmFsLAorCQkJCSB0LT5hZmMpOworCQkJcmV0dXJuIDA7CisJCX0KKwljYXNlIFZJRElPQ19TX1RVTkVSOgorCQl7CisJCQlzdHJ1Y3QgdjRsMl90dW5lciAqdCA9IGFyZzsKKwkJCWludCBzdGF0dXMgPSAwOworCisJCQlpZiAoMCAhPSB0LT5pbmRleCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCW1lbXNldCh0LCAwLCBzaXplb2YoKnQpKTsKKwkJCXN0cmNweSh0LT5uYW1lLCAiVHVuZXIiKTsKKwkJCXQtPnR5cGUgPSBWNEwyX1RVTkVSX0FOQUxPR19UVjsKKwkJCXQtPmNhcGFiaWxpdHkgPSBWNEwyX1RVTkVSX0NBUF9OT1JNOworCQkJdC0+cmFuZ2VoaWdoID0gMHhmZmZmZmZmZlVMOwkvKiBGSVhNRTogc2V0IGNvcnJlY3QgcmFuZ2UgKi8KKy8qCQl0LT5zaWduYWwgPSAweGZmZmY7ICovCisJCQkvKiBObyB3YXkgdG8gZ2V0IHNpZ25hbCBzdHJlbmd0aD8gKi8KKwkJCWRvd24oJmRldi0+bG9jayk7CisJCQllbTI4eHhfaTJjX2NhbGxfY2xpZW50cyhkZXYsIERFQ09ERVJfR0VUX1NUQVRVUywKKwkJCQkJCSZzdGF0dXMpOworCQkJdXAoJmRldi0+bG9jayk7CisJCQl0LT5zaWduYWwgPQorCQkJICAgIChzdGF0dXMgJiBERUNPREVSX1NUQVRVU19HT09EKSAhPSAwID8gMHhmZmZmIDogMDsKKworCQkJZW0yOHh4X3ZpZGVvZGJnKCJWSURJT19TX1RVTkVSOiBzaWduYWw9JXgsIGFmYz0leFxuIiwKKwkJCQkgdC0+c2lnbmFsLCB0LT5hZmMpOworCQkJcmV0dXJuIDA7CisJCX0KKwljYXNlIFZJRElPQ19HX0ZSRVFVRU5DWToKKwkJeworCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmID0gYXJnOworCisJCQltZW1zZXQoZiwgMCwgc2l6ZW9mKCpmKSk7CisJCQlmLT50eXBlID0gVjRMMl9UVU5FUl9BTkFMT0dfVFY7CisJCQlmLT5mcmVxdWVuY3kgPSBkZXYtPmN0bF9mcmVxOworCisJCQlyZXR1cm4gMDsKKwkJfQorCWNhc2UgVklESU9DX1NfRlJFUVVFTkNZOgorCQl7CisJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYgPSBhcmc7CisKKwkJCWlmICgwICE9IGYtPnR1bmVyKQorCQkJCXJldHVybiAtRUlOVkFMOworCisJCQlpZiAoVjRMMl9UVU5FUl9BTkFMT0dfVFYgIT0gZi0+dHlwZSkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKworCQkJZG93bigmZGV2LT5sb2NrKTsKKwkJCWRldi0+Y3RsX2ZyZXEgPSBmLT5mcmVxdWVuY3k7CisJCQllbTI4eHhfaTJjX2NhbGxfY2xpZW50cyhkZXYsIFZJRElPQ19TX0ZSRVFVRU5DWSwgZik7CisJCQl1cCgmZGV2LT5sb2NrKTsKKwkJCXJldHVybiAwOworCQl9CisKKwljYXNlIFZJRElPQ19DUk9QQ0FQOgorCQl7CisJCQlzdHJ1Y3QgdjRsMl9jcm9wY2FwICpjYyA9IGFyZzsKKworCQkJaWYgKGNjLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWNjLT5ib3VuZHMubGVmdCA9IDA7CisJCQljYy0+Ym91bmRzLnRvcCA9IDA7CisJCQljYy0+Ym91bmRzLndpZHRoID0gZGV2LT53aWR0aDsKKwkJCWNjLT5ib3VuZHMuaGVpZ2h0ID0gZGV2LT5oZWlnaHQ7CisJCQljYy0+ZGVmcmVjdCA9IGNjLT5ib3VuZHM7CisJCQljYy0+cGl4ZWxhc3BlY3QubnVtZXJhdG9yID0gNTQ7CS8qIDQ6MyBGSVhNRTogcmVtb3ZlIG1hZ2ljIG51bWJlcnMgKi8KKwkJCWNjLT5waXhlbGFzcGVjdC5kZW5vbWluYXRvciA9IDU5OworCQkJcmV0dXJuIDA7CisJCX0KKwljYXNlIFZJRElPQ19TVFJFQU1PTjoKKwkJeworCQkJaW50ICp0eXBlID0gYXJnOworCisJCQlpZiAoKnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFCisJCQkgICAgfHwgZGV2LT5pbyAhPSBJT19NTUFQKQorCQkJCXJldHVybiAtRUlOVkFMOworCisJCQlpZiAobGlzdF9lbXB0eSgmZGV2LT5pbnF1ZXVlKSkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKworCQkJZGV2LT5zdHJlYW0gPSBTVFJFQU1fT047CS8qIEZJWE1FOiBTdGFydCB2aWRlbyBjYXB0dXJlIGhlcmU/ICovCisKKwkJCWVtMjh4eF92aWRlb2RiZygiVklESU9DX1NUUkVBTU9OOiBzdGFydGluZyBzdHJlYW1cbiIpOworCisJCQlyZXR1cm4gMDsKKwkJfQorCWNhc2UgVklESU9DX1NUUkVBTU9GRjoKKwkJeworCQkJaW50ICp0eXBlID0gYXJnOworCQkJaW50IHJldDsKKworCQkJaWYgKCp0eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRQorCQkJICAgIHx8IGRldi0+aW8gIT0gSU9fTU1BUCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKworCQkJaWYgKGRldi0+c3RyZWFtID09IFNUUkVBTV9PTikgeworCQkJCWVtMjh4eF92aWRlb2RiZyAoIlZJRElPQ19TVFJFQU1PRkY6IGludGVycnVwdGluZyBzdHJlYW1cbiIpOworCQkJCWlmICgocmV0ID0gZW0yOHh4X3N0cmVhbV9pbnRlcnJ1cHQoZGV2KSkpCisJCQkJCXJldHVybiByZXQ7CisJCQl9CisJCQllbTI4eHhfZW1wdHlfZnJhbWVxdWV1ZXMoZGV2KTsKKworCQkJcmV0dXJuIDA7CisJCX0KKwlkZWZhdWx0OgorCQlyZXR1cm4gdjRsX2NvbXBhdF90cmFuc2xhdGVfaW9jdGwoaW5vZGUsIGZpbHAsIGNtZCwgYXJnLAorCQkJCQkJICBkcml2ZXJfaW9jdGwpOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIGVtMjh4eF92NGwyX2RvX2lvY3RsKCkKKyAqIFRoaXMgZnVuY3Rpb24gaXMgX25vdF8gY2FsbGVkIGRpcmVjdGx5LCBidXQgZnJvbQorICogZW0yOHh4X3Y0bDJfaW9jdGwuIFVzZXJzcGFjZQorICogY29weWluZyBpcyBkb25lIGFscmVhZHksIGFyZyBpcyBhIGtlcm5lbCBwb2ludGVyLgorICovCitzdGF0aWMgaW50IGVtMjh4eF92aWRlb19kb19pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKKwkJCQkgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQoreworCXN0cnVjdCBlbTI4eHggKmRldiA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKworCWlmICghZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmICh2aWRlb19kZWJ1ZyA+IDEpCisJCWVtMjh4eF9wcmludF9pb2N0bChkZXYtPm5hbWUsY21kKTsKKworCXN3aXRjaCAoY21kKSB7CisKKwkJLyogLS0tIGNhcGFiaWxpdGllcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwljYXNlIFZJRElPQ19RVUVSWUNBUDoKKwkJeworCQkJc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqY2FwID0gYXJnOworCisJCQltZW1zZXQoY2FwLCAwLCBzaXplb2YoKmNhcCkpOworCQkJc3RybGNweShjYXAtPmRyaXZlciwgImVtMjh4eCIsIHNpemVvZihjYXAtPmRyaXZlcikpOworCQkJc3RybGNweShjYXAtPmNhcmQsIGVtMjh4eF9ib2FyZHNbZGV2LT5tb2RlbF0ubmFtZSwKKwkJCQlzaXplb2YoY2FwLT5jYXJkKSk7CisJCQlzdHJsY3B5KGNhcC0+YnVzX2luZm8sIGRldi0+dWRldi0+ZGV2LmJ1c19pZCwKKwkJCQlzaXplb2YoY2FwLT5idXNfaW5mbykpOworCQkJY2FwLT52ZXJzaW9uID0gRU0yOFhYX1ZFUlNJT05fQ09ERTsKKwkJCWNhcC0+Y2FwYWJpbGl0aWVzID0KKwkJCSAgICBWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwKKwkJCSAgICBWNEwyX0NBUF9BVURJTyB8CisJCQkgICAgVjRMMl9DQVBfUkVBRFdSSVRFIHwgVjRMMl9DQVBfU1RSRUFNSU5HOworCQkJaWYgKGRldi0+aGFzX3R1bmVyKQorCQkJCWNhcC0+Y2FwYWJpbGl0aWVzIHw9IFY0TDJfQ0FQX1RVTkVSOworCQkJcmV0dXJuIDA7CisJCX0KKworCQkvKiAtLS0gY2FwdHVyZSBpb2N0bHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCWNhc2UgVklESU9DX0VOVU1fRk1UOgorCQl7CisJCQlzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmbXRkID0gYXJnOworCisJCQlpZiAoZm10ZC0+aW5kZXggIT0gMCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCW1lbXNldChmbXRkLCAwLCBzaXplb2YoKmZtdGQpKTsKKwkJCWZtdGQtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisJCQlzdHJjcHkoZm10ZC0+ZGVzY3JpcHRpb24sICJQYWNrZWQgWVVZMiIpOworCQkJZm10ZC0+cGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfWVVZVjsKKwkJCW1lbXNldChmbXRkLT5yZXNlcnZlZCwgMCwgc2l6ZW9mKGZtdGQtPnJlc2VydmVkKSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJY2FzZSBWSURJT0NfR19GTVQ6CisJCXsKKwkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZm9ybWF0ID0gYXJnOworCisJCQllbTI4eHhfdmlkZW9kYmcoIlZJRElPQ19HX0ZNVDogdHlwZT0lc1xuIiwKKwkJCQkgZm9ybWF0LT50eXBlID09CisJCQkJIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSA/CisJCQkJICJWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUiIDogZm9ybWF0LT50eXBlID09CisJCQkJIFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkUgPworCQkJCSAiVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRSAiIDoKKwkJCQkgIm5vdCBzdXBwb3J0ZWQiKTsKKworCQkJaWYgKGZvcm1hdC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJCWZvcm1hdC0+Zm10LnBpeC53aWR0aCA9IGRldi0+d2lkdGg7CisJCQlmb3JtYXQtPmZtdC5waXguaGVpZ2h0ID0gZGV2LT5oZWlnaHQ7CisJCQlmb3JtYXQtPmZtdC5waXgucGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfWVVZVjsKKwkJCWZvcm1hdC0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPSBkZXYtPmJ5dGVzcGVybGluZTsKKwkJCWZvcm1hdC0+Zm10LnBpeC5zaXplaW1hZ2UgPSBkZXYtPmZyYW1lX3NpemU7CisJCQlmb3JtYXQtPmZtdC5waXguY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TTVBURTE3ME07CisJCQlmb3JtYXQtPmZtdC5waXguZmllbGQgPSBkZXYtPmludGVybGFjZWQgPyBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQgOiBWNEwyX0ZJRUxEX1RPUDsJLyogRklYTUU6IFRPUD8gTk9ORT8gQk9UVE9NPyBBTFRFTkFURT8gKi8KKworCQkJZW0yOHh4X3ZpZGVvZGJnKCJWSURJT0NfR19GTVQ6ICVkeCVkXG4iLCBkZXYtPndpZHRoLAorCQkJCSBkZXYtPmhlaWdodCk7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJY2FzZSBWSURJT0NfVFJZX0ZNVDoKKwljYXNlIFZJRElPQ19TX0ZNVDoKKwkJeworCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmb3JtYXQgPSBhcmc7CisJCQl1MzIgaTsKKwkJCWludCByZXQgPSAwOworCQkJaW50IHdpZHRoID0gZm9ybWF0LT5mbXQucGl4LndpZHRoOworCQkJaW50IGhlaWdodCA9IGZvcm1hdC0+Zm10LnBpeC5oZWlnaHQ7CisJCQl1bnNpZ25lZCBpbnQgaHNjYWxlLCB2c2NhbGU7CisJCQl1bnNpZ25lZCBpbnQgbWF4aCwgbWF4dzsKKworCQkJbWF4dyA9IG5vcm1fbWF4dyhkZXYpOworCQkJbWF4aCA9IG5vcm1fbWF4aChkZXYpOworCisvKgkJaW50IGJvdGhfZmllbGRzOyAqLworCisJCQllbTI4eHhfdmlkZW9kYmcoIiVzOiB0eXBlPSVzXG4iLAorCQkJCSBjbWQgPT0KKwkJCQkgVklESU9DX1RSWV9GTVQgPyAiVklESU9DX1RSWV9GTVQiIDoKKwkJCQkgIlZJRElPQ19TX0ZNVCIsCisJCQkJIGZvcm1hdC0+dHlwZSA9PQorCQkJCSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgPworCQkJCSAiVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFIiA6IGZvcm1hdC0+dHlwZSA9PQorCQkJCSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFID8KKwkJCQkgIlY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkUgIiA6CisJCQkJICJub3Qgc3VwcG9ydGVkIik7CisKKwkJCWlmIChmb3JtYXQtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQkJCXJldHVybiAtRUlOVkFMOworCisJCQllbTI4eHhfdmlkZW9kYmcoIiVzOiByZXF1ZXN0ZWQgJWR4JWRcbiIsCisJCQkJIGNtZCA9PQorCQkJCSBWSURJT0NfVFJZX0ZNVCA/ICJWSURJT0NfVFJZX0ZNVCIgOgorCQkJCSAiVklESU9DX1NfRk1UIiwgZm9ybWF0LT5mbXQucGl4LndpZHRoLAorCQkJCSBmb3JtYXQtPmZtdC5waXguaGVpZ2h0KTsKKworCQkJLyogRklYTUU6IE1vdmUgc29tZSBjb2RlIGF3YXkgZnJvbSBoZXJlICovCisJCQkvKiB3aWR0aCBtdXN0IGV2ZW4gYmVjYXVzZSBvZiB0aGUgWVVZViBmb3JtYXQgKi8KKwkJCS8qIGhlaWdodCBtdXN0IGJlIGV2ZW4gYmVjYXVzZSBvZiBpbnRlcmxhY2luZyAqLworCQkJaGVpZ2h0ICY9IDB4ZmZmZTsKKwkJCXdpZHRoICY9IDB4ZmZmZTsKKworCQkJaWYgKGhlaWdodCA8IDMyKQorCQkJCWhlaWdodCA9IDMyOworCQkJaWYgKGhlaWdodCA+IG1heGgpCisJCQkJaGVpZ2h0ID0gbWF4aDsKKwkJCWlmICh3aWR0aCA8IDQ4KQorCQkJCXdpZHRoID0gNDg7CisJCQlpZiAod2lkdGggPiBtYXh3KQorCQkJCXdpZHRoID0gbWF4dzsKKworCQkJaWYoZGV2LT5pc19lbTI4MDApeworCQkJCS8qIHRoZSBlbTI4MDAgY2FuIG9ubHkgc2NhbGUgZG93biB0byA1MCUgKi8KKwkJCQlpZihoZWlnaHQgJSAobWF4aCAvIDIpKQorCQkJCQloZWlnaHQ9bWF4aDsKKwkJCQlpZih3aWR0aCAlIChtYXh3IC8gMikpCisJCQkJCXdpZHRoPW1heHc7CisJCQkJLyogYWNjb3JkaW5nIHRvIGVtcGlhdGVjaCBzdXBwb3J0ICovCisJCQkJLyogdGhlIE1heFBhY2tldFNpemUgaXMgdG8gc21hbGwgdG8gc3VwcG9ydCAqLworCQkJCS8qIGZyYW1lc2l6ZXMgbGFyZ2VyIHRoYW4gNjQweDQ4MCBAIDMwIGZwcyAqLworCQkJCS8qIG9yIDY0MHg1NzYgQCAyNSBmcHMuIEFzIHRoaXMgd291bGQgY3V0ICovCisJCQkJLyogb2YgYSBwYXJ0IG9mIHRoZSBpbWFnZSB3ZSBwcmVmZXIgKi8KKwkJCQkvKiAzNjB4NTc2IG9yIDM2MHg0ODAgZm9yIG5vdyAqLworCQkJCWlmKHdpZHRoID09IG1heHcgJiYgaGVpZ2h0ID09IG1heGgpCisJCQkJCXdpZHRoIC89IDI7CisJCQl9CisKKwkJCWlmICgoaHNjYWxlID0KKwkJCSAgICAgKCgodW5zaWduZWQgbG9uZyltYXh3KSA8PCAxMikgLyB3aWR0aCAtIDQwOTZMKSA+PQorCQkJICAgIDB4NDAwMCkKKwkJCQloc2NhbGUgPSAweDNmZmY7CisJCQl3aWR0aCA9CisJCQkgICAgKCgodW5zaWduZWQgbG9uZyltYXh3KSA8PCAxMikgLyAoaHNjYWxlICsgNDA5NkwpOworCisJCQlpZiAoKHZzY2FsZSA9CisJCQkgICAgICgoKHVuc2lnbmVkIGxvbmcpbWF4aCkgPDwgMTIpIC8gaGVpZ2h0IC0gNDA5NkwpID49CisJCQkgICAgMHg0MDAwKQorCQkJCXZzY2FsZSA9IDB4M2ZmZjsKKwkJCWhlaWdodCA9CisJCQkgICAgKCgodW5zaWduZWQgbG9uZyltYXhoKSA8PCAxMikgLyAodnNjYWxlICsgNDA5NkwpOworCisJCQlmb3JtYXQtPmZtdC5waXgud2lkdGggPSB3aWR0aDsKKwkJCWZvcm1hdC0+Zm10LnBpeC5oZWlnaHQgPSBoZWlnaHQ7CisJCQlmb3JtYXQtPmZtdC5waXgucGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfWVVZVjsKKwkJCWZvcm1hdC0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPSB3aWR0aCAqIDI7CisJCQlmb3JtYXQtPmZtdC5waXguc2l6ZWltYWdlID0gd2lkdGggKiAyICogaGVpZ2h0OworCQkJZm9ybWF0LT5mbXQucGl4LmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU01QVEUxNzBNOworCQkJZm9ybWF0LT5mbXQucGl4LmZpZWxkID0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOworCisJCQllbTI4eHhfdmlkZW9kYmcoIiVzOiByZXR1cm5lZCAlZHglZCAoJWQsICVkKVxuIiwKKwkJCQkgY21kID09CisJCQkJIFZJRElPQ19UUllfRk1UID8gIlZJRElPQ19UUllfRk1UIiA6CisJCQkJICJWSURJT0NfU19GTVQiLCBmb3JtYXQtPmZtdC5waXgud2lkdGgsCisJCQkJIGZvcm1hdC0+Zm10LnBpeC5oZWlnaHQsIGhzY2FsZSwgdnNjYWxlKTsKKworCQkJaWYgKGNtZCA9PSBWSURJT0NfVFJZX0ZNVCkKKwkJCQlyZXR1cm4gMDsKKworCQkJZm9yIChpID0gMDsgaSA8IGRldi0+bnVtX2ZyYW1lczsgaSsrKQorCQkJCWlmIChkZXYtPmZyYW1lW2ldLnZtYV91c2VfY291bnQpIHsKKwkJCQkJZW0yOHh4X3ZpZGVvZGJnKCJWSURJT0NfU19GTVQgZmFpbGVkLiAiCisJCQkJCQkiVW5tYXAgdGhlIGJ1ZmZlcnMgZmlyc3QuXG4iKTsKKwkJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQkJfQorCisJCQkvKiBzdG9wIGlvIGluIGNhc2UgaXQgaXMgYWxyZWFkeSBpbiBwcm9ncmVzcyAqLworCQkJaWYgKGRldi0+c3RyZWFtID09IFNUUkVBTV9PTikgeworCQkJCWVtMjh4eF92aWRlb2RiZygiVklESU9DX1NFVF9GTVQ6IGludGVydXB0aW5nIHN0cmVhbVxuIik7CisJCQkJaWYgKChyZXQgPSBlbTI4eHhfc3RyZWFtX2ludGVycnVwdChkZXYpKSkKKwkJCQkJcmV0dXJuIHJldDsKKwkJCX0KKworCQkJZW0yOHh4X3JlbGVhc2VfYnVmZmVycyhkZXYpOworCQkJZGV2LT5pbyA9IElPX05PTkU7CisKKwkJCS8qIHNldCBuZXcgaW1hZ2Ugc2l6ZSAqLworCQkJZGV2LT53aWR0aCA9IHdpZHRoOworCQkJZGV2LT5oZWlnaHQgPSBoZWlnaHQ7CisJCQlkZXYtPmZyYW1lX3NpemUgPSBkZXYtPndpZHRoICogZGV2LT5oZWlnaHQgKiAyOworCQkJZGV2LT5maWVsZF9zaXplID0gZGV2LT5mcmFtZV9zaXplID4+IDE7CS8qYm90aF9maWxlZHMgPyBkZXYtPmZyYW1lX3NpemU+PjEgOiBkZXYtPmZyYW1lX3NpemU7ICovCisJCQlkZXYtPmJ5dGVzcGVybGluZSA9IGRldi0+d2lkdGggKiAyOworCQkJZGV2LT5oc2NhbGUgPSBoc2NhbGU7CisJCQlkZXYtPnZzY2FsZSA9IHZzY2FsZTsKKy8qCQkJZGV2LT5ib3RoX2ZpbGVkcyA9IGJvdGhfZmlsZWRzOyAqLworCQkJZW0yOHh4X3VuaW5pdF9pc29jKGRldik7CisJCQllbTI4eHhfc2V0X2FsdGVybmF0ZShkZXYpOworCQkJZW0yOHh4X2NhcHR1cmVfc3RhcnQoZGV2LCAxKTsKKwkJCWVtMjh4eF9yZXNvbHV0aW9uX3NldChkZXYpOworCQkJZW0yOHh4X2luaXRfaXNvYyhkZXYpOworCisJCQlyZXR1cm4gMDsKKwkJfQorCisJCS8qIC0tLSBzdHJlYW1pbmcgY2FwdHVyZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJY2FzZSBWSURJT0NfUkVRQlVGUzoKKwkJeworCQkJc3RydWN0IHY0bDJfcmVxdWVzdGJ1ZmZlcnMgKnJiID0gYXJnOworCQkJdTMyIGk7CisJCQlpbnQgcmV0OworCisJCQlpZiAocmItPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFIHx8CisJCQkgICAgcmItPm1lbW9yeSAhPSBWNEwyX01FTU9SWV9NTUFQKQorCQkJCXJldHVybiAtRUlOVkFMOworCisJCQlpZiAoZGV2LT5pbyA9PSBJT19SRUFEKSB7CisJCQkJZW0yOHh4X3ZpZGVvZGJnICgibWV0aG9kIGlzIHNldCB0byByZWFkOyIKKwkJCQkJIiBjbG9zZSBhbmQgb3BlbiB0aGUgZGV2aWNlIGFnYWluIHRvIgorCQkJCQkiIGNob29zZSB0aGUgbW1hcCBJL08gbWV0aG9kXG4iKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKworCQkJZm9yIChpID0gMDsgaSA8IGRldi0+bnVtX2ZyYW1lczsgaSsrKQorCQkJCWlmIChkZXYtPmZyYW1lW2ldLnZtYV91c2VfY291bnQpIHsKKwkJCQkJZW0yOHh4X3ZpZGVvZGJnICgiVklESU9DX1JFUUJVRlMgZmFpbGVkOyBwcmV2aW91cyBidWZmZXJzIGFyZSBzdGlsbCBtYXBwZWRcbiIpOworCQkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCQl9CisKKwkJCWlmIChkZXYtPnN0cmVhbSA9PSBTVFJFQU1fT04pIHsKKwkJCQllbTI4eHhfdmlkZW9kYmcoIlZJRElPQ19SRVFCVUZTOiBpbnRlcnJ1cHRpbmcgc3RyZWFtXG4iKTsKKwkJCQlpZiAoKHJldCA9IGVtMjh4eF9zdHJlYW1faW50ZXJydXB0KGRldikpKQorCQkJCQlyZXR1cm4gcmV0OworCQkJfQorCisJCQllbTI4eHhfZW1wdHlfZnJhbWVxdWV1ZXMoZGV2KTsKKworCQkJZW0yOHh4X3JlbGVhc2VfYnVmZmVycyhkZXYpOworCQkJaWYgKHJiLT5jb3VudCkKKwkJCQlyYi0+Y291bnQgPQorCQkJCSAgICBlbTI4eHhfcmVxdWVzdF9idWZmZXJzKGRldiwgcmItPmNvdW50KTsKKworCQkJZGV2LT5mcmFtZV9jdXJyZW50ID0gTlVMTDsKKworCQkJZW0yOHh4X3ZpZGVvZGJnICgiVklESU9DX1JFUUJVRlM6IHNldHRpbmcgaW8gbWV0aG9kIHRvIG1tYXA6IG51bSBidWZzICVpXG4iLAorCQkJCQkJICAgICByYi0+Y291bnQpOworCQkJZGV2LT5pbyA9IHJiLT5jb3VudCA/IElPX01NQVAgOiBJT19OT05FOworCQkJcmV0dXJuIDA7CisJCX0KKworCWNhc2UgVklESU9DX1FVRVJZQlVGOgorCQl7CisJCQlzdHJ1Y3QgdjRsMl9idWZmZXIgKmIgPSBhcmc7CisKKwkJCWlmIChiLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSB8fAorCQkJICAgIGItPmluZGV4ID49IGRldi0+bnVtX2ZyYW1lcyB8fCBkZXYtPmlvICE9IElPX01NQVApCisJCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJCW1lbWNweShiLCAmZGV2LT5mcmFtZVtiLT5pbmRleF0uYnVmLCBzaXplb2YoKmIpKTsKKworCQkJaWYgKGRldi0+ZnJhbWVbYi0+aW5kZXhdLnZtYV91c2VfY291bnQpIHsKKwkJCQliLT5mbGFncyB8PSBWNEwyX0JVRl9GTEFHX01BUFBFRDsKKwkJCX0KKwkJCWlmIChkZXYtPmZyYW1lW2ItPmluZGV4XS5zdGF0ZSA9PSBGX0RPTkUpCisJCQkJYi0+ZmxhZ3MgfD0gVjRMMl9CVUZfRkxBR19ET05FOworCQkJZWxzZSBpZiAoZGV2LT5mcmFtZVtiLT5pbmRleF0uc3RhdGUgIT0gRl9VTlVTRUQpCisJCQkJYi0+ZmxhZ3MgfD0gVjRMMl9CVUZfRkxBR19RVUVVRUQ7CisJCQlyZXR1cm4gMDsKKwkJfQorCWNhc2UgVklESU9DX1FCVUY6CisJCXsKKwkJCXN0cnVjdCB2NGwyX2J1ZmZlciAqYiA9IGFyZzsKKwkJCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKKworCQkJaWYgKGItPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFIHx8CisJCQkgICAgYi0+aW5kZXggPj0gZGV2LT5udW1fZnJhbWVzIHx8IGRldi0+aW8gIT0gSU9fTU1BUCkgeworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCisJCQlpZiAoZGV2LT5mcmFtZVtiLT5pbmRleF0uc3RhdGUgIT0gRl9VTlVTRUQpIHsKKwkJCQlyZXR1cm4gLUVBR0FJTjsKKwkJCX0KKwkJCWRldi0+ZnJhbWVbYi0+aW5kZXhdLnN0YXRlID0gRl9RVUVVRUQ7CisKKwkJCS8qIGFkZCBmcmFtZSB0byBmaWZvICovCisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5xdWV1ZV9sb2NrLCBsb2NrX2ZsYWdzKTsKKwkJCWxpc3RfYWRkX3RhaWwoJmRldi0+ZnJhbWVbYi0+aW5kZXhdLmZyYW1lLAorCQkJCSAgICAgICZkZXYtPmlucXVldWUpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5xdWV1ZV9sb2NrLCBsb2NrX2ZsYWdzKTsKKworCQkJcmV0dXJuIDA7CisJCX0KKwljYXNlIFZJRElPQ19EUUJVRjoKKwkJeworCQkJc3RydWN0IHY0bDJfYnVmZmVyICpiID0gYXJnOworCQkJc3RydWN0IGVtMjh4eF9mcmFtZV90ICpmOworCQkJdW5zaWduZWQgbG9uZyBsb2NrX2ZsYWdzOworCQkJaW50IHJldCA9IDA7CisKKwkJCWlmIChiLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRQorCQkJICAgIHx8IGRldi0+aW8gIT0gSU9fTU1BUCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKworCQkJaWYgKGxpc3RfZW1wdHkoJmRldi0+b3V0cXVldWUpKSB7CisJCQkJaWYgKGRldi0+c3RyZWFtID09IFNUUkVBTV9PRkYpCisJCQkJCXJldHVybiAtRUlOVkFMOworCQkJCWlmIChmaWxwLT5mX2ZsYWdzICYgT19OT05CTE9DSykKKwkJCQkJcmV0dXJuIC1FQUdBSU47CisJCQkJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlCisJCQkJICAgIChkZXYtPndhaXRfZnJhbWUsCisJCQkJICAgICAoIWxpc3RfZW1wdHkoJmRldi0+b3V0cXVldWUpKSB8fAorCQkJCSAgICAgKGRldi0+c3RhdGUgJiBERVZfRElTQ09OTkVDVEVEKSk7CisJCQkJaWYgKHJldCkKKwkJCQkJcmV0dXJuIHJldDsKKwkJCQlpZiAoZGV2LT5zdGF0ZSAmIERFVl9ESVNDT05ORUNURUQpCisJCQkJCXJldHVybiAtRU5PREVWOworCQkJfQorCisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5xdWV1ZV9sb2NrLCBsb2NrX2ZsYWdzKTsKKwkJCWYgPSBsaXN0X2VudHJ5KGRldi0+b3V0cXVldWUubmV4dCwKKwkJCQkgICAgICAgc3RydWN0IGVtMjh4eF9mcmFtZV90LCBmcmFtZSk7CisJCQlsaXN0X2RlbChkZXYtPm91dHF1ZXVlLm5leHQpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5xdWV1ZV9sb2NrLCBsb2NrX2ZsYWdzKTsKKworCQkJZi0+c3RhdGUgPSBGX1VOVVNFRDsKKwkJCW1lbWNweShiLCAmZi0+YnVmLCBzaXplb2YoKmIpKTsKKworCQkJaWYgKGYtPnZtYV91c2VfY291bnQpCisJCQkJYi0+ZmxhZ3MgfD0gVjRMMl9CVUZfRkxBR19NQVBQRUQ7CisKKwkJCXJldHVybiAwOworCQl9CisJZGVmYXVsdDoKKwkJcmV0dXJuIGVtMjh4eF9kb19pb2N0bChpbm9kZSwgZmlscCwgZGV2LCBjbWQsIGFyZywKKwkJCQkgICAgICAgZW0yOHh4X3ZpZGVvX2RvX2lvY3RsKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBlbTI4eHhfdjRsMl9pb2N0bCgpCisgKiBoYW5kbGUgdjRsMiBpb2N0bCB0aGUgbWFpbiBhY3Rpb24gaGFwcGVucyBpbiBlbTI4eHhfdjRsMl9kb19pb2N0bCgpCisgKi8KK3N0YXRpYyBpbnQgZW0yOHh4X3Y0bDJfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCisJCQkgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBlbTI4eHggKmRldiA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKworCWlmIChkb3duX2ludGVycnVwdGlibGUoJmRldi0+ZmlsZW9wX2xvY2spKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCisJaWYgKGRldi0+c3RhdGUgJiBERVZfRElTQ09OTkVDVEVEKSB7CisJCWVtMjh4eF9lcnJkZXYoInY0bDIgaW9jdGw6IGRldmljZSBub3QgcHJlc2VudFxuIik7CisJCXVwKCZkZXYtPmZpbGVvcF9sb2NrKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKGRldi0+c3RhdGUgJiBERVZfTUlTQ09ORklHVVJFRCkgeworCQllbTI4eHhfZXJyZGV2CisJCSAgICAoInY0bDIgaW9jdGw6IGRldmljZSBpcyBtaXNjb25maWd1cmVkOyBjbG9zZSBhbmQgb3BlbiBpdCBhZ2FpblxuIik7CisJCXVwKCZkZXYtPmZpbGVvcF9sb2NrKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJcmV0ID0gdmlkZW9fdXNlcmNvcHkoaW5vZGUsIGZpbHAsIGNtZCwgYXJnLCBlbTI4eHhfdmlkZW9fZG9faW9jdGwpOworCisJdXAoJmRldi0+ZmlsZW9wX2xvY2spOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZW0yOHh4X3Y0bF9mb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5vcGVuID0gZW0yOHh4X3Y0bDJfb3BlbiwKKwkucmVsZWFzZSA9IGVtMjh4eF92NGwyX2Nsb3NlLAorCS5pb2N0bCA9IGVtMjh4eF92NGwyX2lvY3RsLAorCS5yZWFkID0gZW0yOHh4X3Y0bDJfcmVhZCwKKwkucG9sbCA9IGVtMjh4eF92NGwyX3BvbGwsCisJLm1tYXAgPSBlbTI4eHhfdjRsMl9tbWFwLAorCS5sbHNlZWsgPSBub19sbHNlZWssCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogdXNiIGludGVyZmFjZSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIGVtMjh4eF9pbml0X2RldigpCisgKiBhbGxvY2F0ZXMgYW5kIGluaXRzIHRoZSBkZXZpY2Ugc3RydWN0cywgcmVnaXN0ZXJzIGkyYyBidXMgYW5kIHY0bCBkZXZpY2UKKyAqLworc3RhdGljIGludCBlbTI4eHhfaW5pdF9kZXYoc3RydWN0IGVtMjh4eCAqKmRldmhhbmRsZSwgc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsCisJCQkgICBpbnQgbWlub3IsIGludCBtb2RlbCkKK3sKKwlzdHJ1Y3QgZW0yOHh4ICpkZXYgPSAqZGV2aGFuZGxlOworCWludCByZXR2YWwgPSAtRU5PTUVNOworCWludCBlcnJDb2RlLCBpOworCXVuc2lnbmVkIGludCBtYXhoLCBtYXh3OworCisJZGV2LT51ZGV2ID0gdWRldjsKKwlkZXYtPm1vZGVsID0gbW9kZWw7CisJaW5pdF9NVVRFWCgmZGV2LT5sb2NrKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkZXYtPm9wZW4pOworCisJZGV2LT5lbTI4eHhfd3JpdGVfcmVncyA9IGVtMjh4eF93cml0ZV9yZWdzOworCWRldi0+ZW0yOHh4X3JlYWRfcmVnID0gZW0yOHh4X3JlYWRfcmVnOworCWRldi0+ZW0yOHh4X3JlYWRfcmVnX3JlcV9sZW4gPSBlbTI4eHhfcmVhZF9yZWdfcmVxX2xlbjsKKwlkZXYtPmVtMjh4eF93cml0ZV9yZWdzX3JlcSA9IGVtMjh4eF93cml0ZV9yZWdzX3JlcTsKKwlkZXYtPmVtMjh4eF9yZWFkX3JlZ19yZXEgPSBlbTI4eHhfcmVhZF9yZWdfcmVxOworCWRldi0+aXNfZW0yODAwID0gZW0yOHh4X2JvYXJkc1ttb2RlbF0uaXNfZW0yODAwOworCWRldi0+aGFzX3R1bmVyID0gZW0yOHh4X2JvYXJkc1ttb2RlbF0uaGFzX3R1bmVyOworCWRldi0+aGFzX21zcDM0eHggPSBlbTI4eHhfYm9hcmRzW21vZGVsXS5oYXNfbXNwMzR4eDsKKwlkZXYtPnRkYTk4ODdfY29uZiA9IGVtMjh4eF9ib2FyZHNbbW9kZWxdLnRkYTk4ODdfY29uZjsKKwlkZXYtPmRlY29kZXIgPSBlbTI4eHhfYm9hcmRzW21vZGVsXS5kZWNvZGVyOworCisJaWYgKHR1bmVyID49IDApCisJCWRldi0+dHVuZXJfdHlwZSA9IHR1bmVyOworCWVsc2UKKwkJZGV2LT50dW5lcl90eXBlID0gZW0yOHh4X2JvYXJkc1ttb2RlbF0udHVuZXJfdHlwZTsKKworCWRldi0+dmlkZW9faW5wdXRzID0gZW0yOHh4X2JvYXJkc1ttb2RlbF0udmNoYW5uZWxzOworCisJZm9yIChpID0gMDsgaSA8IFRWTk9STVM7IGkrKykKKwkJaWYgKGVtMjh4eF9ib2FyZHNbbW9kZWxdLm5vcm0gPT0gdHZub3Jtc1tpXS5tb2RlKQorCQkJYnJlYWs7CisJaWYgKGkgPT0gVFZOT1JNUykKKwkJaSA9IDA7CisKKwlkZXYtPnR2bm9ybSA9ICZ0dm5vcm1zW2ldOwkvKiBzZXQgZGVmYXVsdCBub3JtICovCisKKwllbTI4eHhfdmlkZW9kYmcoInR2bm9ybT0lc1xuIiwgZGV2LT50dm5vcm0tPm5hbWUpOworCisJbWF4dyA9IG5vcm1fbWF4dyhkZXYpOworCW1heGggPSBub3JtX21heGgoZGV2KTsKKworCS8qIHNldCBkZWZhdWx0IGltYWdlIHNpemUgKi8KKwlkZXYtPndpZHRoID0gbWF4dzsKKwlkZXYtPmhlaWdodCA9IG1heGg7CisJZGV2LT5pbnRlcmxhY2VkID0gRU0yOFhYX0lOVEVSTEFDRURfREVGQVVMVDsKKwlkZXYtPmZpZWxkX3NpemUgPSBkZXYtPndpZHRoICogZGV2LT5oZWlnaHQ7CisJZGV2LT5mcmFtZV9zaXplID0KKwkgICAgZGV2LT5pbnRlcmxhY2VkID8gZGV2LT5maWVsZF9zaXplIDw8IDEgOiBkZXYtPmZpZWxkX3NpemU7CisJZGV2LT5ieXRlc3BlcmxpbmUgPSBkZXYtPndpZHRoICogMjsKKwlkZXYtPmhzY2FsZSA9IDA7CisJZGV2LT52c2NhbGUgPSAwOworCWRldi0+Y3RsX2lucHV0ID0gMjsKKworCS8qIHNldHVwIHZpZGVvIHBpY3R1cmUgc2V0dGluZ3MgZm9yIHNhYTcxMTNoICovCisJbWVtc2V0KCZkZXYtPnZwaWMsIDAsIHNpemVvZihkZXYtPnZwaWMpKTsKKwlkZXYtPnZwaWMuY29sb3VyID0gMTI4IDw8IDg7CisJZGV2LT52cGljLmh1ZSA9IDEyOCA8PCA4OworCWRldi0+dnBpYy5icmlnaHRuZXNzID0gMTI4IDw8IDg7CisJZGV2LT52cGljLmNvbnRyYXN0ID0gMTkyIDw8IDg7CisJZGV2LT52cGljLndoaXRlbmVzcyA9IDEyOCA8PCA4OwkvKiBUaGlzIG9uZSBpc24ndCB1c2VkICovCisJZGV2LT52cGljLmRlcHRoID0gMTY7CisJZGV2LT52cGljLnBhbGV0dGUgPSBWSURFT19QQUxFVFRFX1lVVjQyMjsKKworI2lmZGVmIENPTkZJR19NT0RVTEVTCisJLyogcmVxdWVzdCBzb21lIG1vZHVsZXMgKi8KKwlpZiAoZGV2LT5kZWNvZGVyID09IEVNMjhYWF9TQUE3MTEzIHx8IGRldi0+ZGVjb2RlciA9PSBFTTI4WFhfU0FBNzExNCkKKwkJcmVxdWVzdF9tb2R1bGUoInNhYTcxMXgiKTsKKwlpZiAoZGV2LT5kZWNvZGVyID09IEVNMjhYWF9UVlA1MTUwKQorCQlyZXF1ZXN0X21vZHVsZSgidHZwNTE1MCIpOworCWlmIChkZXYtPmhhc190dW5lcikKKwkJcmVxdWVzdF9tb2R1bGUoInR1bmVyIik7CisJaWYgKGRldi0+dGRhOTg4N19jb25mKQorCQlyZXF1ZXN0X21vZHVsZSgidGRhOTg4NyIpOworI2VuZGlmCisJZXJyQ29kZSA9IGVtMjh4eF9jb25maWcoZGV2KTsKKwlpZiAoZXJyQ29kZSkgeworCQllbTI4eHhfZXJyZGV2KCJlcnJvciBjb25maWd1cmluZyBkZXZpY2VcbiIpOworCQlrZnJlZShkZXYpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlkb3duKCZkZXYtPmxvY2spOworCS8qIHJlZ2lzdGVyIGkyYyBidXMgKi8KKwllbTI4eHhfaTJjX3JlZ2lzdGVyKGRldik7CisKKwkvKiBEbyBib2FyZCBzcGVjaWZpYyBpbml0IGFuZCBlZXByb20gcmVhZGluZyAqLworCWVtMjh4eF9jYXJkX3NldHVwKGRldik7CisKKwkvKiBjb25maWd1cmUgdGhlIGRldmljZSAqLworCWVtMjh4eF9jb25maWdfaTJjKGRldik7CisKKwl1cCgmZGV2LT5sb2NrKTsKKworCWVyckNvZGUgPSBlbTI4eHhfY29uZmlnKGRldik7CisKKyNpZmRlZiBDT05GSUdfTU9EVUxFUworCWlmIChkZXYtPmhhc19tc3AzNHh4KQorCQlyZXF1ZXN0X21vZHVsZSgibXNwMzQwMCIpOworI2VuZGlmCisJLyogYWxsb2NhdGUgYW5kIGZpbGwgdjRsMiBkZXZpY2Ugc3RydWN0ICovCisJZGV2LT52ZGV2ID0gdmlkZW9fZGV2aWNlX2FsbG9jKCk7CisJaWYgKE5VTEwgPT0gZGV2LT52ZGV2KSB7CisJCWVtMjh4eF9lcnJkZXYoImNhbm5vdCBhbGxvY2F0ZSB2aWRlb19kZXZpY2UuXG4iKTsKKwkJa2ZyZWUoZGV2KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZGV2LT52ZGV2LT50eXBlID0gVklEX1RZUEVfQ0FQVFVSRTsKKwlpZiAoZGV2LT5oYXNfdHVuZXIpCisJCWRldi0+dmRldi0+dHlwZSB8PSBWSURfVFlQRV9UVU5FUjsKKwlkZXYtPnZkZXYtPmhhcmR3YXJlID0gMDsKKwlkZXYtPnZkZXYtPmZvcHMgPSAmZW0yOHh4X3Y0bF9mb3BzOworCWRldi0+dmRldi0+bWlub3IgPSAtMTsKKwlkZXYtPnZkZXYtPmRldiA9ICZkZXYtPnVkZXYtPmRldjsKKwlkZXYtPnZkZXYtPnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZTsKKwlzbnByaW50ZihkZXYtPnZkZXYtPm5hbWUsIHNpemVvZihkZXYtPnZkZXYtPm5hbWUpLCAiJXMiLAorCQkgImVtMjh4eCB2aWRlbyIpOworCWxpc3RfYWRkX3RhaWwoJmRldi0+ZGV2bGlzdCwmZW0yOHh4X2Rldmxpc3QpOworCisJLyogcmVnaXN0ZXIgdjRsMiBkZXZpY2UgKi8KKwlkb3duKCZkZXYtPmxvY2spOworCWlmICgocmV0dmFsID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKGRldi0+dmRldiwgVkZMX1RZUEVfR1JBQkJFUiwgLTEpKSkgeworCQllbTI4eHhfZXJyZGV2KCJ1bmFibGUgdG8gcmVnaXN0ZXIgdmlkZW8gZGV2aWNlIChlcnJvcj0laSkuXG4iLAorCQkJICAgICAgcmV0dmFsKTsKKwkJdXAoJmRldi0+bG9jayk7CisJCWxpc3RfZGVsKCZkZXYtPmRldmxpc3QpOworCQl2aWRlb19kZXZpY2VfcmVsZWFzZShkZXYtPnZkZXYpOworCQlrZnJlZShkZXYpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJaWYgKGRldi0+aGFzX21zcDM0eHgpIHsKKwkJLyogU2VuZCBhIHJlc2V0IHRvIG90aGVyIGNoaXBzIHZpYSBncGlvICovCisJCWVtMjh4eF93cml0ZV9yZWdzX3JlcShkZXYsIDB4MDAsIDB4MDgsICJceGY3IiwgMSk7CisJCXVkZWxheSgyNTAwKTsKKwkJZW0yOHh4X3dyaXRlX3JlZ3NfcmVxKGRldiwgMHgwMCwgMHgwOCwgIlx4ZmYiLCAxKTsKKwkJdWRlbGF5KDI1MDApOworCisJfQorCXZpZGVvX211eChkZXYsIDApOworCisJdXAoJmRldi0+bG9jayk7CisKKwllbTI4eHhfaW5mbygiVjRMMiBkZXZpY2UgcmVnaXN0ZXJlZCBhcyAvZGV2L3ZpZGVvJWRcbiIsCisJCSAgICBkZXYtPnZkZXYtPm1pbm9yKTsKKworCXJldHVybiAwOworfQorCisvKgorICogZW0yOHh4X3VzYl9wcm9iZSgpCisgKiBjaGVja3MgZm9yIHN1cHBvcnRlZCBkZXZpY2VzCisgKi8KK3N0YXRpYyBpbnQgZW0yOHh4X3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLAorCQkJICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVuZHBvaW50OworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICp1aWY7CisJc3RydWN0IGVtMjh4eCAqZGV2ID0gTlVMTDsKKwlpbnQgcmV0dmFsID0gLUVOT0RFVjsKKwlpbnQgbW9kZWwsaSxucixpZm51bTsKKworCXVkZXYgPSB1c2JfZ2V0X2RldihpbnRlcmZhY2VfdG9fdXNiZGV2KGludGVyZmFjZSkpOworCWlmbnVtID0gaW50ZXJmYWNlLT5hbHRzZXR0aW5nWzBdLmRlc2MuYkludGVyZmFjZU51bWJlcjsKKworCisJLyogRG9uJ3QgcmVnaXN0ZXIgYXVkaW8gaW50ZXJmYWNlcyAqLworCWlmIChpbnRlcmZhY2UtPmFsdHNldHRpbmdbMF0uZGVzYy5iSW50ZXJmYWNlQ2xhc3MgPT0gVVNCX0NMQVNTX0FVRElPKSB7CisJCWVtMjh4eF9lcnIoRFJJVkVSX05BTUUgIiBhdWRpbyBkZXZpY2UgKCUwNHg6JTA0eCk6IGludGVyZmFjZSAlaSwgY2xhc3MgJWlcbiIsCisJCQkJdWRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcix1ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCwKKwkJCQlpZm51bSwKKwkJCQlpbnRlcmZhY2UtPmFsdHNldHRpbmdbMF0uZGVzYy5iSW50ZXJmYWNlQ2xhc3MpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwllbTI4eHhfZXJyKERSSVZFUl9OQU1FICIgbmV3IHZpZGVvIGRldmljZSAoJTA0eDolMDR4KTogaW50ZXJmYWNlICVpLCBjbGFzcyAlaVxuIiwKKwkJCXVkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IsdWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QsCisJCQlpZm51bSwKKwkJCWludGVyZmFjZS0+YWx0c2V0dGluZ1swXS5kZXNjLmJJbnRlcmZhY2VDbGFzcyk7CisKKwllbmRwb2ludCA9ICZpbnRlcmZhY2UtPmN1cl9hbHRzZXR0aW5nLT5lbmRwb2ludFsxXS5kZXNjOworCisJLyogY2hlY2sgaWYgdGhlIHRoZSBkZXZpY2UgaGFzIHRoZSBpc28gaW4gZW5kcG9pbnQgYXQgdGhlIGNvcnJlY3QgcGxhY2UgKi8KKwlpZiAoKGVuZHBvaW50LT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykgIT0KKwkgICAgVVNCX0VORFBPSU5UX1hGRVJfSVNPQykgeworCQllbTI4eHhfZXJyKERSSVZFUl9OQU1FICIgcHJvYmluZyBlcnJvcjogZW5kcG9pbnQgaXMgbm9uLUlTTyBlbmRwb2ludCFcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJaWYgKChlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9FTkRQT0lOVF9ESVJfTUFTSykgPT0gVVNCX0RJUl9PVVQpIHsKKwkJZW0yOHh4X2VycihEUklWRVJfTkFNRSAiIHByb2JpbmcgZXJyb3I6IGVuZHBvaW50IGlzIElTTyBPVVQgZW5kcG9pbnQhXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJbW9kZWw9aWQtPmRyaXZlcl9pbmZvOworCW5yPWludGVyZmFjZS0+bWlub3I7CisKKwlpZiAobnI+RU0yOFhYX01BWEJPQVJEUykgeworCQlwcmludGsgKERSSVZFUl9OQU1FICI6IFN1cHBvcnRzIG9ubHkgJWkgZW0yOHh4IGJvYXJkcy5cbiIsRU0yOFhYX01BWEJPQVJEUyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3Igb3VyIGRldmljZSBzdGF0ZSBhbmQgaW5pdGlhbGl6ZSBpdCAqLworCWRldiA9IGttYWxsb2Moc2l6ZW9mKCpkZXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoZGV2ID09IE5VTEwpIHsKKwkJZW0yOHh4X2VycihEUklWRVJfTkFNRSAiOiBvdXQgb2YgbWVtb3J5IVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwltZW1zZXQoZGV2LCAwLCBzaXplb2YoKmRldikpOworCisJLyogY29tcHV0ZSBhbHRlcm5hdGUgbWF4IHBhY2tldCBzaXplcyAqLworCXVpZiA9IHVkZXYtPmFjdGNvbmZpZy0+aW50ZXJmYWNlWzBdOworCisJZGV2LT5udW1fYWx0PXVpZi0+bnVtX2FsdHNldHRpbmc7CisJcHJpbnRrKERSSVZFUl9OQU1FICI6IEFsdGVybmF0ZSBzZXR0aW5nczogJWlcbiIsZGV2LT5udW1fYWx0KTsKKy8vCWRldi0+YWx0X21heF9wa3Rfc2l6ZSA9IGttYWxsb2Moc2l6ZW9mKCpkZXYtPmFsdF9tYXhfcGt0X3NpemUpKgorCWRldi0+YWx0X21heF9wa3Rfc2l6ZSA9IGttYWxsb2MoMzIqCisJCQkJCQlkZXYtPm51bV9hbHQsR0ZQX0tFUk5FTCk7CisJaWYgKGRldi0+YWx0X21heF9wa3Rfc2l6ZSA9PSBOVUxMKSB7CisJCWVtMjh4eF9lcnIoRFJJVkVSX05BTUUgIjogb3V0IG9mIG1lbW9yeSFcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5udW1fYWx0IDsgaSsrKSB7CisJCXUxNiB0bXAgPSBsZTE2X3RvX2NwdSh1aWYtPmFsdHNldHRpbmdbaV0uZW5kcG9pbnRbMV0uZGVzYy4KKwkJCQkJCQl3TWF4UGFja2V0U2l6ZSk7CisJCWRldi0+YWx0X21heF9wa3Rfc2l6ZVtpXSA9CisJCSAgICAodG1wICYgMHgwN2ZmKSAqICgoKHRtcCAmIDB4MTgwMCkgPj4gMTEpICsgMSk7CisJCXByaW50ayhEUklWRVJfTkFNRSAiOiBBbHRlcm5hdGUgc2V0dGluZyAlaSwgbWF4IHNpemU9ICVpXG4iLGksCisJCQkJCQkJZGV2LT5hbHRfbWF4X3BrdF9zaXplW2ldKTsKKwl9CisKKwlzbnByaW50ZihkZXYtPm5hbWUsIDI5LCAiZW0yOHh4ICMlZCIsIG5yKTsKKworCWlmICgoY2FyZFtucl0+PTApJiYoY2FyZFtucl08ZW0yOHh4X2Jjb3VudCkpCisJCW1vZGVsPWNhcmRbbnJdOworCisJaWYgKChtb2RlbD09RU0yODAwX0JPQVJEX1VOS05PV04pfHwobW9kZWw9PUVNMjgyMF9CT0FSRF9VTktOT1dOKSkgeworCQlwcmludGsoICIlczogWW91ciBib2FyZCBoYXMgbm8gZWVwcm9tIGluc2lkZSBpdCBhbmQgdGh1cyBjYW4ndFxuIgorCQkJIiVzOiBiZSBhdXRvZGV0ZWN0ZWQuICBQbGVhc2UgcGFzcyBjYXJkPTxuPiBpbnNtb2Qgb3B0aW9uIHRvXG4iCisJCQkiJXM6IHdvcmthcm91bmQgdGhhdC4gIFJlZGlyZWN0IGNvbXBsYWludHMgdG8gdGhlIHZlbmRvciBvZlxuIgorCQkJIiVzOiB0aGUgVFYgY2FyZC4gIEJlc3QgcmVnYXJkcyxcbiIKKwkJCSIlczogICAgICAgICAtLSB0dXhcbiIsCisJCQlkZXYtPm5hbWUsZGV2LT5uYW1lLGRldi0+bmFtZSxkZXYtPm5hbWUsZGV2LT5uYW1lKTsKKwkJcHJpbnRrKCIlczogSGVyZSBpcyBhIGxpc3Qgb2YgdmFsaWQgY2hvaWNlcyBmb3IgdGhlIGNhcmQ9PG4+IGluc21vZCBvcHRpb246XG4iLAorCQkJZGV2LT5uYW1lKTsKKwkJZm9yIChpID0gMDsgaSA8IGVtMjh4eF9iY291bnQ7IGkrKykgeworCQkJcHJpbnRrKCIlczogICAgY2FyZD0lZCAtPiAlc1xuIiwKKwkJCQlkZXYtPm5hbWUsIGksIGVtMjh4eF9ib2FyZHNbaV0ubmFtZSk7CisJCX0KKwl9CisKKwkvKiBhbGxvY2F0ZSBkZXZpY2Ugc3RydWN0ICovCisJcmV0dmFsID0gZW0yOHh4X2luaXRfZGV2KCZkZXYsIHVkZXYsIG5yLCBtb2RlbCk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWVtMjh4eF9pbmZvKCJGb3VuZCAlc1xuIiwgZW0yOHh4X2JvYXJkc1ttb2RlbF0ubmFtZSk7CisKKwkvKiBzYXZlIG91ciBkYXRhIHBvaW50ZXIgaW4gdGhpcyBpbnRlcmZhY2UgZGV2aWNlICovCisJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIGRldik7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBlbTI4eHhfdXNiX2Rpc2Nvbm5lY3QoKQorICogY2FsbGVkIHdoZW4gdGhlIGRldmljZSBnZXRzIGRpY29uZW5jdGVkCisgKiB2aWRlbyBkZXZpY2Ugd2lsbCBiZSB1bnJlZ2lzdGVyZWQgb24gdjRsMl9jbG9zZSBpbiBjYXNlIGl0IGlzIHN0aWxsIG9wZW4KKyAqLworc3RhdGljIHZvaWQgZW0yOHh4X3VzYl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCit7CisJc3RydWN0IGVtMjh4eCAqZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKKworCWlmICghZGV2KQorCQlyZXR1cm47CisKKwlkb3duX3dyaXRlKCZlbTI4eHhfZGlzY29ubmVjdCk7CisKKwlkb3duKCZkZXYtPmxvY2spOworCisJZW0yOHh4X2luZm8oImRpc2Nvbm5lY3RpbmcgJXNcbiIsIGRldi0+dmRldi0+bmFtZSk7CisKKwl3YWtlX3VwX2ludGVycnVwdGlibGVfYWxsKCZkZXYtPm9wZW4pOworCisJaWYgKGRldi0+dXNlcnMpIHsKKwkJZW0yOHh4X3dhcm4KKwkJICAgICgiZGV2aWNlIC9kZXYvdmlkZW8lZCBpcyBvcGVuISBEZXJlZ2lzdHJhdGlvbiBhbmQgbWVtb3J5ICIKKwkJICAgICAiZGVhbGxvY2F0aW9uIGFyZSBkZWZlcnJlZCBvbiBjbG9zZS5cbiIsIGRldi0+dmRldi0+bWlub3IpOworCQlkZXYtPnN0YXRlIHw9IERFVl9NSVNDT05GSUdVUkVEOworCQllbTI4eHhfdW5pbml0X2lzb2MoZGV2KTsKKwkJZGV2LT5zdGF0ZSB8PSBERVZfRElTQ09OTkVDVEVEOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmRldi0+d2FpdF9mcmFtZSk7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZGV2LT53YWl0X3N0cmVhbSk7CisJfSBlbHNlIHsKKwkJZGV2LT5zdGF0ZSB8PSBERVZfRElTQ09OTkVDVEVEOworCQllbTI4eHhfcmVsZWFzZV9yZXNvdXJjZXMoZGV2KTsKKwl9CisKKwl1cCgmZGV2LT5sb2NrKTsKKworCWlmICghZGV2LT51c2VycykgeworCQlrZnJlZShkZXYtPmFsdF9tYXhfcGt0X3NpemUpOworCQlrZnJlZShkZXYpOworCX0KKworCXVwX3dyaXRlKCZlbTI4eHhfZGlzY29ubmVjdCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBlbTI4eHhfdXNiX2RyaXZlciA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkubmFtZSA9ICJlbTI4eHgiLAorCS5wcm9iZSA9IGVtMjh4eF91c2JfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPSBlbTI4eHhfdXNiX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0gZW0yOHh4X2lkX3RhYmxlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgZW0yOHh4X21vZHVsZV9pbml0KHZvaWQpCit7CisJaW50IHJlc3VsdDsKKworCXByaW50ayhLRVJOX0lORk8gRFJJVkVSX05BTUUgIiB2NGwyIGRyaXZlciB2ZXJzaW9uICVkLiVkLiVkIGxvYWRlZFxuIiwKKwkgICAgICAgKEVNMjhYWF9WRVJTSU9OX0NPREUgPj4gMTYpICYgMHhmZiwKKwkgICAgICAgKEVNMjhYWF9WRVJTSU9OX0NPREUgPj4gOCkgJiAweGZmLCBFTTI4WFhfVkVSU0lPTl9DT0RFICYgMHhmZik7CisjaWZkZWYgU05BUFNIT1QKKwlwcmludGsoS0VSTl9JTkZPIERSSVZFUl9OQU1FICIgc25hcHNob3QgZGF0ZSAlMDRkLSUwMmQtJTAyZFxuIiwKKwkgICAgICAgU05BUFNIT1QgLyAxMDAwMCwgKFNOQVBTSE9UIC8gMTAwKSAlIDEwMCwgU05BUFNIT1QgJSAxMDApOworI2VuZGlmCisKKwkvKiByZWdpc3RlciB0aGlzIGRyaXZlciB3aXRoIHRoZSBVU0Igc3Vic3lzdGVtICovCisJcmVzdWx0ID0gdXNiX3JlZ2lzdGVyKCZlbTI4eHhfdXNiX2RyaXZlcik7CisJaWYgKHJlc3VsdCkKKwkJZW0yOHh4X2VycihEUklWRVJfTkFNRQorCQkJICAgIiB1c2JfcmVnaXN0ZXIgZmFpbGVkLiBFcnJvciBudW1iZXIgJWQuXG4iLCByZXN1bHQpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGVtMjh4eF9tb2R1bGVfZXhpdCh2b2lkKQoreworCS8qIGRlcmVnaXN0ZXIgdGhpcyBkcml2ZXIgd2l0aCB0aGUgVVNCIHN1YnN5c3RlbSAqLworCXVzYl9kZXJlZ2lzdGVyKCZlbTI4eHhfdXNiX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGVtMjh4eF9tb2R1bGVfaW5pdCk7Cittb2R1bGVfZXhpdChlbTI4eHhfbW9kdWxlX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzdhNDFjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LmgKQEAgLTAsMCArMSw1MTMgQEAKKy8qCisgICBlbTI4eHgtY2FyZHMuYyAtIGRyaXZlciBmb3IgRW1waWEgRU0yODAwL0VNMjgyMC8yODQwIFVTQiB2aWRlbyBjYXB0dXJlIGRldmljZXMKKworICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBSZWNoYmVyZ2VyIDxtcmVjaGJlcmdlckBnbWFpbC5jb20+CisJCSAgICAgIEx1ZG92aWNvIENhdmVkb24gPGNhdmVkb25Ac3NzdXAuaXQ+CisJCSAgICAgIE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkBicnR1cmJvLmNvbS5icj4KKworICAgQmFzZWQgb24gdGhlIGVtMjgwMCBkcml2ZXIgZnJvbSBTYXNjaGEgU29tbWVyIDxzYXNjaGFzb21tZXJAZnJlZW5ldC5kZT4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWZuZGVmIF9FTTI4WFhfSAorI2RlZmluZSBfRU0yOFhYX0gKKworI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bWVkaWEvaXIta2JkLWkyYy5oPgorCisvKiBCb2FyZHMgc3VwcG9ydGVkIGJ5IGRyaXZlciAqLworCisjZGVmaW5lIEVNMjgwMF9CT0FSRF9VTktOT1dOCQkJMAorI2RlZmluZSBFTTI4MjBfQk9BUkRfVU5LTk9XTgkJCTEKKyNkZWZpbmUgRU0yODIwX0JPQVJEX1RFUlJBVEVDX0NJTkVSR1lfMjUwCTIKKyNkZWZpbmUgRU0yODIwX0JPQVJEX1BJTk5BQ0xFX1VTQl8yCQkzCisjZGVmaW5lIEVNMjgyMF9CT0FSRF9IQVVQUEFVR0VfV0lOVFZfVVNCXzIgICAgICA0CisjZGVmaW5lIEVNMjgyMF9CT0FSRF9NU0lfVk9YX1VTQl8yICAgICAgICAgICAgICA1CisjZGVmaW5lIEVNMjgwMF9CT0FSRF9URVJSQVRFQ19DSU5FUkdZXzIwMCAgICAgICA2CisjZGVmaW5lIEVNMjgwMF9CT0FSRF9MRUFEVEVLX1dJTkZBU1RfVVNCSUkgICAgICA3CisjZGVmaW5lIEVNMjgwMF9CT0FSRF9LV09STERfVVNCMjgwMCAgICAgICAgICAgICA4CisjZGVmaW5lIEVNMjgyMF9CT0FSRF9QSU5OQUNMRV9EVkNfOTAJCTkKKworI2RlZmluZSBVTlNFVCAtMQorCisvKiBtYXhpbXVtIG51bWJlciBvZiBlbTI4eHggYm9hcmRzICovCisjZGVmaW5lIEVNMjhYWF9NQVhCT0FSRFMgMSAvKkZJWE1FOiBzaG91bGQgYmUgYmlnZ2VyICovCisKKy8qIG1heGltdW0gbnVtYmVyIG9mIGZyYW1lcyB0aGF0IGNhbiBiZSBxdWV1ZWQgKi8KKyNkZWZpbmUgRU0yOFhYX05VTV9GUkFNRVMgNQorLyogbnVtYmVyIG9mIGZyYW1lcyB0aGF0IGdldCB1c2VkIGZvciB2NGwyX3JlYWQoKSAqLworI2RlZmluZSBFTTI4WFhfTlVNX1JFQURfRlJBTUVTIDIKKworLyogbnVtYmVyIG9mIGJ1ZmZlcnMgZm9yIGlzb2MgdHJhbnNmZXJzICovCisjZGVmaW5lIEVNMjhYWF9OVU1fQlVGUyA1CisKKy8qIG51bWJlciBvZiBwYWNrZXRzIGZvciBlYWNoIGJ1ZmZlcgorICAgd2luZG93cyByZXF1ZXN0cyBvbmx5IDQwIHBhY2tldHMgLi4gc28gd2UgYmV0dGVyIGRvIHRoZSBzYW1lCisgICB0aGlzIGlzIHdoYXQgSSBmb3VuZCBvdXQgZm9yIGFsbCBhbHRlcm5hdGUgbnVtYmVycyB0aGVyZSEKKyAqLworI2RlZmluZSBFTTI4WFhfTlVNX1BBQ0tFVFMgNDAKKworLyogZGVmYXVsdCBhbHRlcm5hdGU7IDAgbWVhbnMgY2hvb3NlIHRoZSBiZXN0ICovCisjZGVmaW5lIEVNMjhYWF9QSU5PVVQgMAorCisjZGVmaW5lIEVNMjhYWF9JTlRFUkxBQ0VEX0RFRkFVTFQgMQorCisvKgorI2RlZmluZSAodXNlIHVzYnZpZXcgaWYgeW91IHdhbnQgdG8gZ2V0IHRoZSBvdGhlciBhbHRlcm5hdGUgbnVtYmVyIGluZm9zKQorI2RlZmluZQorI2RlZmluZSBhbHRlcm5hdGUgbnVtYmVyIDIKKyNkZWZpbmUgCQkJRW5kcG9pbnQgQWRkcmVzczogODIKKwkJCURpcmVjdGlvbjogaW4KKwkJCUF0dHJpYnV0ZTogMQorCQkJVHlwZTogSXNvYworCQkJTWF4IFBhY2tldCBTaXplOiAxNDQ4CisJCQlJbnRlcnZhbDogMTI1dXMKKworICBhbHRlcm5hdGUgbnVtYmVyIDcKKworCQkJRW5kcG9pbnQgQWRkcmVzczogODIKKwkJCURpcmVjdGlvbjogaW4KKwkJCUF0dHJpYnV0ZTogMQorCQkJVHlwZTogSXNvYworCQkJTWF4IFBhY2tldCBTaXplOiAzMDcyCisJCQlJbnRlcnZhbDogMTI1dXMKKyovCisKKy8qIHRpbWUgdG8gd2FpdCB3aGVuIHN0b3BwaW5nIHRoZSBpc29jIHRyYW5zZmVyICovCisjZGVmaW5lIEVNMjhYWF9VUkJfVElNRU9VVCAgICAgICBtc2Vjc190b19qaWZmaWVzKEVNMjhYWF9OVU1fQlVGUyAqIEVNMjhYWF9OVU1fUEFDS0VUUykKKworLyogdGltZSBpbiBtc2VjcyB0byB3YWl0IGZvciBpMmMgd3JpdGVzIHRvIGZpbmlzaCAqLworI2RlZmluZSBFTTI4MDBfSTJDX1dSSVRFX1RJTUVPVVQgMjAKKworLyogdGhlIHZhcmlvdXMgZnJhbWUgc3RhdGVzICovCitlbnVtIGVtMjh4eF9mcmFtZV9zdGF0ZSB7CisJRl9VTlVTRUQgPSAwLAorCUZfUVVFVUVELAorCUZfR1JBQkJJTkcsCisJRl9ET05FLAorCUZfRVJST1IsCit9OworCisvKiBzdHJlYW0gc3RhdGVzICovCitlbnVtIGVtMjh4eF9zdHJlYW1fc3RhdGUgeworCVNUUkVBTV9PRkYsCisJU1RSRUFNX0lOVEVSUlVQVCwKKwlTVFJFQU1fT04sCit9OworCisvKiBmcmFtZXMgKi8KK3N0cnVjdCBlbTI4eHhfZnJhbWVfdCB7CisJdm9pZCAqYnVmbWVtOworCXN0cnVjdCB2NGwyX2J1ZmZlciBidWY7CisJZW51bSBlbTI4eHhfZnJhbWVfc3RhdGUgc3RhdGU7CisJc3RydWN0IGxpc3RfaGVhZCBmcmFtZTsKKwl1bnNpZ25lZCBsb25nIHZtYV91c2VfY291bnQ7CisJaW50IHRvcF9maWVsZDsKKwlpbnQgZmllbGRieXRlc3VzZWQ7Cit9OworCisvKiBpbyBtZXRob2RzICovCitlbnVtIGVtMjh4eF9pb19tZXRob2QgeworCUlPX05PTkUsCisJSU9fUkVBRCwKKwlJT19NTUFQLAorfTsKKworLyogaW5wdXRzICovCisKKyNkZWZpbmUgTUFYX0VNMjhYWF9JTlBVVCA0CitlbnVtIGVudW0yOHh4X2l0eXBlIHsKKwlFTTI4WFhfVk1VWF9DT01QT1NJVEUxID0gMSwKKwlFTTI4WFhfVk1VWF9DT01QT1NJVEUyLAorCUVNMjhYWF9WTVVYX0NPTVBPU0lURTMsCisJRU0yOFhYX1ZNVVhfQ09NUE9TSVRFNCwKKwlFTTI4WFhfVk1VWF9TVklERU8sCisJRU0yOFhYX1ZNVVhfVEVMRVZJU0lPTiwKKwlFTTI4WFhfVk1VWF9DQUJMRSwKKwlFTTI4WFhfVk1VWF9EVkIsCisJRU0yOFhYX1ZNVVhfREVCVUcsCisJRU0yOFhYX1JBRElPLAorfTsKKworc3RydWN0IGVtMjh4eF9pbnB1dCB7CisJZW51bSBlbnVtMjh4eF9pdHlwZSB0eXBlOworCXVuc2lnbmVkIGludCB2bXV4OworCXVuc2lnbmVkIGludCBhbXV4OworfTsKKworI2RlZmluZSBJTlBVVChucikgKCZlbTI4eHhfYm9hcmRzW2Rldi0+bW9kZWxdLmlucHV0W25yXSkKKworZW51bSBlbTI4eHhfZGVjb2RlciB7CisJRU0yOFhYX1RWUDUxNTAsCisJRU0yOFhYX1NBQTcxMTMsCisJRU0yOFhYX1NBQTcxMTQKK307CisKK3N0cnVjdCBlbTI4eHhfYm9hcmQgeworCWNoYXIgKm5hbWU7CisJaW50IHZjaGFubmVsczsKKwlpbnQgbm9ybTsKKwlpbnQgdHVuZXJfdHlwZTsKKworCS8qIGkyYyBmbGFncyAqLworCXVuc2lnbmVkIGludCBpc19lbTI4MDA7CisJdW5zaWduZWQgaW50IHRkYTk4ODdfY29uZjsKKworCXVuc2lnbmVkIGludCBoYXNfdHVuZXI6MTsKKwl1bnNpZ25lZCBpbnQgaGFzX21zcDM0eHg6MTsKKworCWVudW0gZW0yOHh4X2RlY29kZXIgZGVjb2RlcjsKKworCXN0cnVjdCBlbTI4eHhfaW5wdXQgICAgICAgaW5wdXRbTUFYX0VNMjhYWF9JTlBVVF07Cit9OworCitzdHJ1Y3QgZW0yOHh4X2VlcHJvbSB7CisJdTMyIGlkOwkJCS8qIDB4OTU2N2ViMWEgKi8KKwl1MTYgdmVuZG9yX0lEOworCXUxNiBwcm9kdWN0X0lEOworCisJdTE2IGNoaXBfY29uZjsKKworCXUxNiBib2FyZF9jb25mOworCisJdTE2IHN0cmluZzEsIHN0cmluZzIsIHN0cmluZzM7CisKKwl1OCBzdHJpbmdfaWR4X3RhYmxlOworfTsKKworLyogZGV2aWNlIHN0YXRlcyAqLworZW51bSBlbTI4eHhfZGV2X3N0YXRlIHsKKwlERVZfSU5JVElBTElaRUQgPSAweDAxLAorCURFVl9ESVNDT05ORUNURUQgPSAweDAyLAorCURFVl9NSVNDT05GSUdVUkVEID0gMHgwNCwKK307CisKKy8qIHR2bm9ybXMgKi8KK3N0cnVjdCBlbTI4eHhfdHZub3JtIHsKKwljaGFyICpuYW1lOworCXY0bDJfc3RkX2lkIGlkOworCS8qIG1vZGUgZm9yIHNhYTcxMTNoICovCisJaW50IG1vZGU7Cit9OworCisvKiBtYWluIGRldmljZSBzdHJ1Y3QgKi8KK3N0cnVjdCBlbTI4eHggeworCS8qIGdlbmVyaWMgZGV2aWNlIHByb3BlcnRpZXMgKi8KKwljaGFyIG5hbWVbMzBdOwkJLyogbmFtZSAoaW5jbHVkaW5nIG1pbm9yKSBvZiB0aGUgZGV2aWNlICovCisJaW50IG1vZGVsOwkJLyogaW5kZXggaW4gdGhlIGRldmljZV9kYXRhIHN0cnVjdCAqLworCXVuc2lnbmVkIGludCBpc19lbTI4MDA7CisJaW50IHZpZGVvX2lucHV0czsJLyogbnVtYmVyIG9mIHZpZGVvIGlucHV0cyAqLworCXN0cnVjdCBsaXN0X2hlYWQJZGV2bGlzdDsKKwl1bnNpZ25lZCBpbnQgaGFzX3R1bmVyOjE7CisJdW5zaWduZWQgaW50IGhhc19tc3AzNHh4OjE7CisJdW5zaWduZWQgaW50IGhhc190ZGE5ODg3OjE7CisKKwllbnVtIGVtMjh4eF9kZWNvZGVyIGRlY29kZXI7CisKKwlpbnQgdHVuZXJfdHlwZTsJCS8qIHR5cGUgb2YgdGhlIHR1bmVyICovCisJaW50IHR1bmVyX2FkZHI7CQkvKiB0dW5lciBhZGRyZXNzICovCisJaW50IHRkYTk4ODdfY29uZjsKKwkvKiBpMmMgaS9vICovCisJc3RydWN0IGkyY19hZGFwdGVyIGkyY19hZGFwOworCXN0cnVjdCBpMmNfY2xpZW50IGkyY19jbGllbnQ7CisJLyogdmlkZW8gZm9yIGxpbnV4ICovCisJaW50IHVzZXJzOwkJLyogdXNlciBjb3VudCBmb3IgZXhjbHVzaXZlIHVzZSAqLworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXY7CS8qIHZpZGVvIGZvciBsaW51eCBkZXZpY2Ugc3RydWN0ICovCisJc3RydWN0IHZpZGVvX3BpY3R1cmUgdnBpYzsJLyogcGljdHVyZSBzZXR0aW5ncyBvbmx5IHVzZWQgdG8gaW5pdCBzYWE3MTEzaCAqLworCXN0cnVjdCBlbTI4eHhfdHZub3JtICp0dm5vcm07CS8qIHNlbGVjdGVkIHR2IG5vcm0gKi8KKwlpbnQgY3RsX2ZyZXE7CQkvKiBzZWxlY3RlZCBmcmVxdWVuY3kgKi8KKwl1bnNpZ25lZCBpbnQgY3RsX2lucHV0OwkvKiBzZWxlY3RlZCBpbnB1dCAqLworCXVuc2lnbmVkIGludCBjdGxfYWlucHV0OwkvKiBzbGVjdGVkIGF1ZGlvIGlucHV0ICovCisJaW50IG11dGU7CisJaW50IHZvbHVtZTsKKwkvKiBmcmFtZSBwcm9wZXJ0aWVzICovCisJc3RydWN0IGVtMjh4eF9mcmFtZV90IGZyYW1lW0VNMjhYWF9OVU1fRlJBTUVTXTsJLyogbGlzdCBvZiBmcmFtZXMgKi8KKwlpbnQgbnVtX2ZyYW1lczsJCS8qIG51bWJlciBvZiBmcmFtZXMgY3VycmVudGx5IGluIHVzZSAqLworCXVuc2lnbmVkIGludCBmcmFtZV9jb3VudDsJLyogdG90YWwgbnVtYmVyIG9mIHRyYW5zZmVyZWQgZnJhbWVzICovCisJc3RydWN0IGVtMjh4eF9mcmFtZV90ICpmcmFtZV9jdXJyZW50OwkvKiB0aGUgZnJhbWUgdGhhdCBpcyBiZWluZyBmaWxsZWQgKi8KKwlpbnQgd2lkdGg7CQkvKiBjdXJyZW50IGZyYW1lIHdpZHRoICovCisJaW50IGhlaWdodDsJCS8qIGN1cnJlbnQgZnJhbWUgaGVpZ2h0ICovCisJaW50IGZyYW1lX3NpemU7CQkvKiBjdXJyZW50IGZyYW1lIHNpemUgKi8KKwlpbnQgZmllbGRfc2l6ZTsJCS8qIGN1cnJlbnQgZmllbGQgc2l6ZSAqLworCWludCBieXRlc3BlcmxpbmU7CisJaW50IGhzY2FsZTsJCS8qIGhvcml6b250YWwgc2NhbGUgZmFjdG9yIChzZWUgZGF0YXNoZWV0KSAqLworCWludCB2c2NhbGU7CQkvKiB2ZXJ0aWNhbCBzY2FsZSBmYWN0b3IgKHNlZSBkYXRhc2hlZXQpICovCisJaW50IGludGVybGFjZWQ7CQkvKiAxPWludGVybGFjZSBmaWxlZHMsIDA9anVzdCB0b3AgZmlsZWRzICovCisJaW50IHR5cGU7CisKKwkvKiBzdGF0ZXMgKi8KKwllbnVtIGVtMjh4eF9kZXZfc3RhdGUgc3RhdGU7CisJZW51bSBlbTI4eHhfc3RyZWFtX3N0YXRlIHN0cmVhbTsKKwllbnVtIGVtMjh4eF9pb19tZXRob2QgaW87CisJLyogbG9ja3MgKi8KKwlzdHJ1Y3Qgc2VtYXBob3JlIGxvY2ssIGZpbGVvcF9sb2NrOworCXNwaW5sb2NrX3QgcXVldWVfbG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGlucXVldWUsIG91dHF1ZXVlOworCXdhaXRfcXVldWVfaGVhZF90IG9wZW4sIHdhaXRfZnJhbWUsIHdhaXRfc3RyZWFtOworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZiaV9kZXY7CisKKwl1bnNpZ25lZCBjaGFyIGVlZGF0YVsyNTZdOworCisJLyogdXNiIHRyYW5zZmVyICovCisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CS8qIHRoZSB1c2IgZGV2aWNlICovCisJaW50IGFsdDsJCS8qIGFsdGVybmF0ZSAqLworCWludCBtYXhfcGt0X3NpemU7CS8qIG1heCBwYWNrZXQgc2l6ZSBvZiBpc29jIHRyYW5zYWN0aW9uICovCisJaW50IG51bV9hbHQ7CQkvKiBOdW1iZXIgb2YgYWx0ZXJuYXRpdmUgc2V0dGluZ3MgKi8KKwl1bnNpZ25lZCBpbnQgKmFsdF9tYXhfcGt0X3NpemU7CS8qIGFycmF5IG9mIHdNYXhQYWNrZXRTaXplICovCisJc3RydWN0IHVyYiAqdXJiW0VNMjhYWF9OVU1fQlVGU107CS8qIHVyYiBmb3IgaXNvYyB0cmFuc2ZlcnMgKi8KKwljaGFyICp0cmFuc2Zlcl9idWZmZXJbRU0yOFhYX05VTV9CVUZTXTsJLyogdHJhbnNmZXIgYnVmZmVycyBmb3IgaXNvYyB0cmFuc2ZlciAqLworCS8qIGhlbHBlciBmdW5jcyB0aGF0IGNhbGwgdXNiX2NvbnRyb2xfbXNnICovCisJaW50ICgqZW0yOHh4X3dyaXRlX3JlZ3MpIChzdHJ1Y3QgZW0yOHh4ICogZGV2LCB1MTYgcmVnLCBjaGFyICpidWYsCisJCQkJICBpbnQgbGVuKTsKKwlpbnQgKCplbTI4eHhfcmVhZF9yZWcpIChzdHJ1Y3QgZW0yOHh4ICogZGV2LCB1MTYgcmVnKTsKKwlpbnQgKCplbTI4eHhfcmVhZF9yZWdfcmVxX2xlbikgKHN0cnVjdCBlbTI4eHggKiBkZXYsIHU4IHJlcSwgdTE2IHJlZywKKwkJCQkJY2hhciAqYnVmLCBpbnQgbGVuKTsKKwlpbnQgKCplbTI4eHhfd3JpdGVfcmVnc19yZXEpIChzdHJ1Y3QgZW0yOHh4ICogZGV2LCB1OCByZXEsIHUxNiByZWcsCisJCQkJICAgICAgY2hhciAqYnVmLCBpbnQgbGVuKTsKKwlpbnQgKCplbTI4eHhfcmVhZF9yZWdfcmVxKSAoc3RydWN0IGVtMjh4eCAqIGRldiwgdTggcmVxLCB1MTYgcmVnKTsKK307CisKKy8qIFByb3ZpZGVkIGJ5IGVtMjh4eC1pMmMuYyAqLworCit2b2lkIGVtMjh4eF9pMmNfY2FsbF9jbGllbnRzKHN0cnVjdCBlbTI4eHggKmRldiwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKTsKK2ludCBlbTI4eHhfaTJjX3JlZ2lzdGVyKHN0cnVjdCBlbTI4eHggKmRldik7CitpbnQgZW0yOHh4X2kyY191bnJlZ2lzdGVyKHN0cnVjdCBlbTI4eHggKmRldik7CisKKy8qIFByb3ZpZGVkIGJ5IGVtMjh4eC1pbnB1dC5jICovCisKK3ZvaWQgZW0yOHh4X3NldF9pcihzdHJ1Y3QgZW0yOHh4ICogZGV2LHN0cnVjdCBJUl9pMmMgKmlyKTsKKworLyogUHJvdmlkZWQgYnkgZW0yOHh4LWNvcmUuYyAqLworCit2b2lkIGVtMjh4eF9wcmludF9pb2N0bChjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQgY21kKTsKKwordTMyIGVtMjh4eF9yZXF1ZXN0X2J1ZmZlcnMoc3RydWN0IGVtMjh4eCAqZGV2LCB1MzIgY291bnQpOwordm9pZCBlbTI4eHhfcXVldWVfdW51c2VkZnJhbWVzKHN0cnVjdCBlbTI4eHggKmRldik7Cit2b2lkIGVtMjh4eF9yZWxlYXNlX2J1ZmZlcnMoc3RydWN0IGVtMjh4eCAqZGV2KTsKKworaW50IGVtMjh4eF9yZWFkX3JlZ19yZXFfbGVuKHN0cnVjdCBlbTI4eHggKmRldiwgdTggcmVxLCB1MTYgcmVnLAorCQkJICAgIGNoYXIgKmJ1ZiwgaW50IGxlbik7CitpbnQgZW0yOHh4X3JlYWRfcmVnX3JlcShzdHJ1Y3QgZW0yOHh4ICpkZXYsIHU4IHJlcSwgdTE2IHJlZyk7CitpbnQgZW0yOHh4X3JlYWRfcmVnKHN0cnVjdCBlbTI4eHggKmRldiwgdTE2IHJlZyk7CitpbnQgZW0yOHh4X3dyaXRlX3JlZ3NfcmVxKHN0cnVjdCBlbTI4eHggKmRldiwgdTggcmVxLCB1MTYgcmVnLCBjaGFyICpidWYsCisJCQkgIGludCBsZW4pOworaW50IGVtMjh4eF93cml0ZV9yZWdzKHN0cnVjdCBlbTI4eHggKmRldiwgdTE2IHJlZywgY2hhciAqYnVmLCBpbnQgbGVuKTsKK2ludCBlbTI4eHhfd3JpdGVfcmVnX2JpdHMoc3RydWN0IGVtMjh4eCAqZGV2LCB1MTYgcmVnLCB1OCB2YWwsCisJCQkgIHU4IGJpdG1hc2spOworaW50IGVtMjh4eF93cml0ZV9hYzk3KHN0cnVjdCBlbTI4eHggKmRldiwgdTggcmVnLCB1OCAqIHZhbCk7CitpbnQgZW0yOHh4X2F1ZGlvX2FuYWxvZ19zZXQoc3RydWN0IGVtMjh4eCAqZGV2KTsKK2ludCBlbTI4eHhfY29sb3JsZXZlbHNfc2V0X2RlZmF1bHQoc3RydWN0IGVtMjh4eCAqZGV2KTsKK2ludCBlbTI4eHhfY2FwdHVyZV9zdGFydChzdHJ1Y3QgZW0yOHh4ICpkZXYsIGludCBzdGFydCk7CitpbnQgZW0yOHh4X291dGZtdF9zZXRfeXV2NDIyKHN0cnVjdCBlbTI4eHggKmRldik7CitpbnQgZW0yOHh4X2FjY3VtdWxhdG9yX3NldChzdHJ1Y3QgZW0yOHh4ICpkZXYsIHU4IHhtaW4sIHU4IHhtYXgsIHU4IHltaW4sCisJCQkgICB1OCB5bWF4KTsKK2ludCBlbTI4eHhfY2FwdHVyZV9hcmVhX3NldChzdHJ1Y3QgZW0yOHh4ICpkZXYsIHU4IGhzdGFydCwgdTggdnN0YXJ0LAorCQkJICAgIHUxNiB3aWR0aCwgdTE2IGhlaWdodCk7CitpbnQgZW0yOHh4X3NjYWxlcl9zZXQoc3RydWN0IGVtMjh4eCAqZGV2LCB1MTYgaCwgdTE2IHYpOworaW50IGVtMjh4eF9yZXNvbHV0aW9uX3NldChzdHJ1Y3QgZW0yOHh4ICpkZXYpOwordm9pZCBlbTI4eHhfaXNvY0lycShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK2ludCBlbTI4eHhfaW5pdF9pc29jKHN0cnVjdCBlbTI4eHggKmRldik7Cit2b2lkIGVtMjh4eF91bmluaXRfaXNvYyhzdHJ1Y3QgZW0yOHh4ICpkZXYpOworaW50IGVtMjh4eF9zZXRfYWx0ZXJuYXRlKHN0cnVjdCBlbTI4eHggKmRldik7CisKKy8qIFByb3ZpZGVkIGJ5IGVtMjh4eC1jYXJkcy5jICovCitleHRlcm4gaW50IGVtMjgwMF92YXJpYW50X2RldGVjdChzdHJ1Y3QgdXNiX2RldmljZSogdWRldixpbnQgbW9kZWwpOworZXh0ZXJuIHZvaWQgZW0yOHh4X2NhcmRfc2V0dXAoc3RydWN0IGVtMjh4eCAqZGV2KTsKK2V4dGVybiBzdHJ1Y3QgZW0yOHh4X2JvYXJkIGVtMjh4eF9ib2FyZHNbXTsKK2V4dGVybiBzdHJ1Y3QgdXNiX2RldmljZV9pZCBlbTI4eHhfaWRfdGFibGVbXTsKK2V4dGVybiBjb25zdCB1bnNpZ25lZCBpbnQgZW0yOHh4X2Jjb3VudDsKKworLyogZW0yOHh4IHJlZ2lzdGVycyAqLworI2RlZmluZSBDSElQSURfUkVHCTB4MGEKKyNkZWZpbmUgVVNCU1VTUF9SRUcJMHgwYwkvKiAqLworCisjZGVmaW5lIEFVRElPU1JDX1JFRwkweDBlCisjZGVmaW5lIFhDTEtfUkVHCTB4MGYKKworI2RlZmluZSBWSU5NT0RFX1JFRwkweDEwCisjZGVmaW5lIFZJTkNUUkxfUkVHCTB4MTEKKyNkZWZpbmUgVklORU5BQkxFX1JFRwkweDEyCS8qICovCisKKyNkZWZpbmUgR0FNTUFfUkVHCTB4MTQKKyNkZWZpbmUgUkdBSU5fUkVHCTB4MTUKKyNkZWZpbmUgR0dBSU5fUkVHCTB4MTYKKyNkZWZpbmUgQkdBSU5fUkVHCTB4MTcKKyNkZWZpbmUgUk9GRlNFVF9SRUcJMHgxOAorI2RlZmluZSBHT0ZGU0VUX1JFRwkweDE5CisjZGVmaW5lIEJPRkZTRVRfUkVHCTB4MWEKKworI2RlZmluZSBPRkxPV19SRUcJMHgxYgorI2RlZmluZSBIU1RBUlRfUkVHCTB4MWMKKyNkZWZpbmUgVlNUQVJUX1JFRwkweDFkCisjZGVmaW5lIENXSURUSF9SRUcJMHgxZQorI2RlZmluZSBDSEVJR0hUX1JFRwkweDFmCisKKyNkZWZpbmUgWUdBSU5fUkVHCTB4MjAKKyNkZWZpbmUgWU9GRlNFVF9SRUcJMHgyMQorI2RlZmluZSBVVkdBSU5fUkVHCTB4MjIKKyNkZWZpbmUgVU9GRlNFVF9SRUcJMHgyMworI2RlZmluZSBWT0ZGU0VUX1JFRwkweDI0CisjZGVmaW5lIFNIQVJQTkVTU19SRUcJMHgyNQorCisjZGVmaW5lIENPTVBSX1JFRwkweDI2CisjZGVmaW5lIE9VVEZNVF9SRUcJMHgyNworCisjZGVmaW5lIFhNSU5fUkVHCTB4MjgKKyNkZWZpbmUgWE1BWF9SRUcJMHgyOQorI2RlZmluZSBZTUlOX1JFRwkweDJhCisjZGVmaW5lIFlNQVhfUkVHCTB4MmIKKworI2RlZmluZSBIU0NBTEVMT1dfUkVHCTB4MzAKKyNkZWZpbmUgSFNDQUxFSElHSF9SRUcJMHgzMQorI2RlZmluZSBWU0NBTEVMT1dfUkVHCTB4MzIKKyNkZWZpbmUgVlNDQUxFSElHSF9SRUcJMHgzMworCisjZGVmaW5lIEFDOTdMU0JfUkVHCTB4NDAKKyNkZWZpbmUgQUM5N01TQl9SRUcJMHg0MQorI2RlZmluZSBBQzk3QUREUl9SRUcJMHg0MgorI2RlZmluZSBBQzk3QlVTWV9SRUcJMHg0MworCisvKiBlbTIwMiByZWdpc3RlcnMgKi8KKyNkZWZpbmUgTUFTVEVSX0FDOTcJMHgwMgorI2RlZmluZSBWSURFT19BQzk3CTB4MTQKKworLyogcmVnaXN0ZXIgc2V0dGluZ3MgKi8KKyNkZWZpbmUgRU0yOFhYX0FVRElPX1NSQ19UVU5FUgkweGMwCisjZGVmaW5lIEVNMjhYWF9BVURJT19TUkNfTElORQkweDgwCisKKy8qIHByaW50ayBtYWNyb3MgKi8KKworI2RlZmluZSBlbTI4eHhfZXJyKGZtdCwgYXJnLi4uKSBkbyB7XAorCXByaW50ayhLRVJOX0VSUiBmbXQgLCAjI2FyZyk7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgZW0yOHh4X2VycmRldihmbXQsIGFyZy4uLikgZG8ge1wKKwlwcmludGsoS0VSTl9FUlIgIiVzOiAiZm10LFwKKwkJCWRldi0+bmFtZSAsICMjYXJnKTsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBlbTI4eHhfaW5mbyhmbXQsIGFyZy4uLikgZG8ge1wKKwlwcmludGsoS0VSTl9JTkZPICIlczogImZtdCxcCisJCQlkZXYtPm5hbWUgLCAjI2FyZyk7IH0gd2hpbGUgKDApCisjZGVmaW5lIGVtMjh4eF93YXJuKGZtdCwgYXJnLi4uKSBkbyB7XAorCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiAiZm10LFwKKwkJCWRldi0+bmFtZSAsICMjYXJnKTsgfSB3aGlsZSAoMCkKKworaW5saW5lIHN0YXRpYyBpbnQgZW0yOHh4X2F1ZGlvX3NvdXJjZShzdHJ1Y3QgZW0yOHh4ICpkZXYsIGludCBpbnB1dCkKK3sKKwlyZXR1cm4gZW0yOHh4X3dyaXRlX3JlZ19iaXRzKGRldiwgQVVESU9TUkNfUkVHLCBpbnB1dCwgMHhjMCk7Cit9CisKK2lubGluZSBzdGF0aWMgaW50IGVtMjh4eF9hdWRpb191c2JfbXV0ZShzdHJ1Y3QgZW0yOHh4ICpkZXYsIGludCBtdXRlKQoreworCXJldHVybiBlbTI4eHhfd3JpdGVfcmVnX2JpdHMoZGV2LCBYQ0xLX1JFRywgbXV0ZSA/IDB4MDAgOiAweDgwLCAweDgwKTsKK30KKworaW5saW5lIHN0YXRpYyBpbnQgZW0yOHh4X2F1ZGlvX2FuYWxvZ19zZXR1cChzdHJ1Y3QgZW0yOHh4ICpkZXYpCit7CisJLyogdW5tdXRlIHZpZGVvIG1peGVyIHdpdGggZGVmYXVsdCB2b2x1bWUgbGV2ZWwgKi8KKwlyZXR1cm4gZW0yOHh4X3dyaXRlX2FjOTcoZGV2LCBWSURFT19BQzk3LCAiXHgwOFx4MDgiKTsKK30KKworaW5saW5lIHN0YXRpYyBpbnQgZW0yOHh4X2NvbXByZXNzaW9uX2Rpc2FibGUoc3RydWN0IGVtMjh4eCAqZGV2KQoreworCS8qIHNpZGUgZWZmZWN0IG9mIGRpc2FibGluZyBzY2FsZXIgYW5kIG1peGVyICovCisJcmV0dXJuIGVtMjh4eF93cml0ZV9yZWdzKGRldiwgQ09NUFJfUkVHLCAiXHgwMCIsIDEpOworfQorCitpbmxpbmUgc3RhdGljIGludCBlbTI4eHhfY29udHJhc3RfZ2V0KHN0cnVjdCBlbTI4eHggKmRldikKK3sKKwlyZXR1cm4gZW0yOHh4X3JlYWRfcmVnKGRldiwgWUdBSU5fUkVHKSAmIDB4MWY7Cit9CisKK2lubGluZSBzdGF0aWMgaW50IGVtMjh4eF9icmlnaHRuZXNzX2dldChzdHJ1Y3QgZW0yOHh4ICpkZXYpCit7CisJcmV0dXJuIGVtMjh4eF9yZWFkX3JlZyhkZXYsIFlPRkZTRVRfUkVHKTsKK30KKworaW5saW5lIHN0YXRpYyBpbnQgZW0yOHh4X3NhdHVyYXRpb25fZ2V0KHN0cnVjdCBlbTI4eHggKmRldikKK3sKKwlyZXR1cm4gZW0yOHh4X3JlYWRfcmVnKGRldiwgVVZHQUlOX1JFRykgJiAweDFmOworfQorCitpbmxpbmUgc3RhdGljIGludCBlbTI4eHhfdV9iYWxhbmNlX2dldChzdHJ1Y3QgZW0yOHh4ICpkZXYpCit7CisJcmV0dXJuIGVtMjh4eF9yZWFkX3JlZyhkZXYsIFVPRkZTRVRfUkVHKTsKK30KKworaW5saW5lIHN0YXRpYyBpbnQgZW0yOHh4X3ZfYmFsYW5jZV9nZXQoc3RydWN0IGVtMjh4eCAqZGV2KQoreworCXJldHVybiBlbTI4eHhfcmVhZF9yZWcoZGV2LCBWT0ZGU0VUX1JFRyk7Cit9CisKK2lubGluZSBzdGF0aWMgaW50IGVtMjh4eF9nYW1tYV9nZXQoc3RydWN0IGVtMjh4eCAqZGV2KQoreworCXJldHVybiBlbTI4eHhfcmVhZF9yZWcoZGV2LCBHQU1NQV9SRUcpICYgMHgzZjsKK30KKworaW5saW5lIHN0YXRpYyBpbnQgZW0yOHh4X2NvbnRyYXN0X3NldChzdHJ1Y3QgZW0yOHh4ICpkZXYsIHMzMiB2YWwpCit7CisJdTggdG1wID0gKHU4KSB2YWw7CisJcmV0dXJuIGVtMjh4eF93cml0ZV9yZWdzKGRldiwgWUdBSU5fUkVHLCAmdG1wLCAxKTsKK30KKworaW5saW5lIHN0YXRpYyBpbnQgZW0yOHh4X2JyaWdodG5lc3Nfc2V0KHN0cnVjdCBlbTI4eHggKmRldiwgczMyIHZhbCkKK3sKKwl1OCB0bXAgPSAodTgpIHZhbDsKKwlyZXR1cm4gZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBZT0ZGU0VUX1JFRywgJnRtcCwgMSk7Cit9CisKK2lubGluZSBzdGF0aWMgaW50IGVtMjh4eF9zYXR1cmF0aW9uX3NldChzdHJ1Y3QgZW0yOHh4ICpkZXYsIHMzMiB2YWwpCit7CisJdTggdG1wID0gKHU4KSB2YWw7CisJcmV0dXJuIGVtMjh4eF93cml0ZV9yZWdzKGRldiwgVVZHQUlOX1JFRywgJnRtcCwgMSk7Cit9CisKK2lubGluZSBzdGF0aWMgaW50IGVtMjh4eF91X2JhbGFuY2Vfc2V0KHN0cnVjdCBlbTI4eHggKmRldiwgczMyIHZhbCkKK3sKKwl1OCB0bXAgPSAodTgpIHZhbDsKKwlyZXR1cm4gZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBVT0ZGU0VUX1JFRywgJnRtcCwgMSk7Cit9CisKK2lubGluZSBzdGF0aWMgaW50IGVtMjh4eF92X2JhbGFuY2Vfc2V0KHN0cnVjdCBlbTI4eHggKmRldiwgczMyIHZhbCkKK3sKKwl1OCB0bXAgPSAodTgpIHZhbDsKKwlyZXR1cm4gZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBWT0ZGU0VUX1JFRywgJnRtcCwgMSk7Cit9CisKK2lubGluZSBzdGF0aWMgaW50IGVtMjh4eF9nYW1tYV9zZXQoc3RydWN0IGVtMjh4eCAqZGV2LCBzMzIgdmFsKQoreworCXU4IHRtcCA9ICh1OCkgdmFsOworCXJldHVybiBlbTI4eHhfd3JpdGVfcmVncyhkZXYsIEdBTU1BX1JFRywgJnRtcCwgMSk7Cit9CisKKy8qRklYTUU6IG1heHcgc2hvdWxkIGJlIGRlcGVuZGVudCBvZiBhbHQgbW9kZSAqLworaW5saW5lIHN0YXRpYyB1bnNpZ25lZCBpbnQgbm9ybV9tYXh3KHN0cnVjdCBlbTI4eHggKmRldikKK3sKKwlzd2l0Y2goZGV2LT5tb2RlbCl7CisJCWNhc2UgKEVNMjgyMF9CT0FSRF9NU0lfVk9YX1VTQl8yKTogcmV0dXJuKDY0MCk7CisJCWRlZmF1bHQ6IHJldHVybig3MjApOworCX0KK30KKworaW5saW5lIHN0YXRpYyB1bnNpZ25lZCBpbnQgbm9ybV9tYXhoKHN0cnVjdCBlbTI4eHggKmRldikKK3sKKwlzd2l0Y2goZGV2LT5tb2RlbCl7CisJCWNhc2UgKEVNMjgyMF9CT0FSRF9NU0lfVk9YX1VTQl8yKTogcmV0dXJuKDQ4MCk7CisJCWRlZmF1bHQ6IHJldHVybiAoZGV2LT50dm5vcm0tPmlkICYgVjRMMl9TVERfNjI1XzUwKSA/IDU3NiA6IDQ4MDsKKwl9Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pci1rYmQtZ3Bpby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pci1rYmQtZ3Bpby5jCmluZGV4IDIzNDE1MWUuLmVkODE5MzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXIta2JkLWdwaW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2lyLWtiZC1ncGlvLmMKQEAgLTE1Niw2ICsxNTYsNzEgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCisvKiBSaWNhcmRvIENlcnF1ZWlyYSA8djRsQGNlcnF1ZWlyYS5vcmc+ICovCisvKiBXZWlyZCBtYXRjaGluZywgc2luY2UgdGhlIHJlbW90ZSBoYXMgInVuY29tbW9uIiBrZXlzICovCisKK3N0YXRpYyBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19jb25jZXB0cm9uaWNbSVJfS0VZVEFCX1NJWkVdID0geworCisJWyAzMCBdID0gS0VZX1BPV0VSLCAgICAgICAvLyBwb3dlcgorCVsgNyAgXSA9IEtFWV9NRURJQSwgICAgICAgLy8gc291cmNlCisJWyAyOCBdID0gS0VZX1NFQVJDSCwgICAgICAvLyBzY2FuCisKKy8qIEZJWE1FOiBkdXBsaWNhdGUga2V5Y29kZXM/CisgKgorICogVGhlc2UgZm91ciBrZXlzIHNlZW0gdG8gc2hhcmUgdGhlIHNhbWUgR1BJTyBhcyBDSCssIENILSwgPDw8IGFuZCA+Pj4KKyAqIFRoZSBHUElPIHZhbHVlcyBhcmUKKyAqIDYzOTdmYiBmb3IgYm90aCAiU2NhbiA8IiBhbmQgIkNIIC0iLAorICogNjM5ZmZiIGZvciAiU2NhbiA+IiBhbmQgIkNIKyIsCisgKiA2Mzg0ZmIgZm9yICJUdW5lIDwiIGFuZCAiPDw8IiwKKyAqIDYzOGNmYiBmb3IgIlR1bmUgPiIgYW5kICI+Pj4iLCByZWdhcmRsZXNzIG9mIHRoZSBtYXNrLgorICoKKyAqCVsgMjMgXSA9IEtFWV9CQUNLLCAgICAgICAgLy8gZm0gc2NhbiA8PAorICoJWyAzMSBdID0gS0VZX0ZPUldBUkQsICAgICAvLyBmbSBzY2FuID4+CisgKgorICoJWyA0ICBdID0gS0VZX0xFRlQsICAgICAgICAvLyBmbSB0dW5pbmcgPAorICoJWyAxMiBdID0gS0VZX1JJR0hULCAgICAgICAvLyBmbSB0dW5pbmcgPgorICoKKyAqIEZvciBub3csIHRoZXNlIGZvdXIga2V5cyBhcmUgZGlzYWJsZWQuIFByZXNzaW5nIHRoZW0gd2lsbCBnZW5lcmF0ZQorICogdGhlIENIKy9DSC0vPDw8Lz4+PiBldmVudHMKKyAqLworCisJWyAzICBdID0gS0VZX1RVTkVSLCAgICAgICAvLyBUVi9GTQorCisJWyAwICBdID0gS0VZX1JFQ09SRCwKKwlbIDggIF0gPSBLRVlfU1RPUCwKKwlbIDE3IF0gPSBLRVlfUExBWSwKKworCVsgMjYgXSA9IEtFWV9QTEFZUEFVU0UsICAgLy8gZnJlZXplCisJWyAyNSBdID0gS0VZX1pPT00sICAgICAgICAvLyB6b29tCisJWyAxNSBdID0gS0VZX1RFWFQsICAgICAgICAvLyBtaW4KKworCVsgMSAgXSA9IEtFWV9LUDEsCisJWyAxMSBdID0gS0VZX0tQMiwKKwlbIDI3IF0gPSBLRVlfS1AzLAorCVsgNSAgXSA9IEtFWV9LUDQsCisJWyA5ICBdID0gS0VZX0tQNSwKKwlbIDIxIF0gPSBLRVlfS1A2LAorCVsgNiAgXSA9IEtFWV9LUDcsCisJWyAxMCBdID0gS0VZX0tQOCwKKwlbIDE4IF0gPSBLRVlfS1A5LAorCVsgMiAgXSA9IEtFWV9LUDAsCisJWyAxNiBdID0gS0VZX0xBU1QsICAgICAgICAvLyArMTAwCisJWyAxOSBdID0gS0VZX0xJU1QsICAgICAgICAvLyByZWNhbGwKKworCVsgMzEgXSA9IEtFWV9DSEFOTkVMVVAsICAgLy8gY2huIGRvd24KKwlbIDIzIF0gPSBLRVlfQ0hBTk5FTERPV04sIC8vIGNobiB1cAorCVsgMjIgXSA9IEtFWV9WT0xVTUVVUCwgICAgLy8gdm9sIGRvd24KKwlbIDIwIF0gPSBLRVlfVk9MVU1FRE9XTiwgIC8vIHZvbCB1cAorCisJWyA0ICBdID0gS0VZX0tQTUlOVVMsICAgICAvLyA8PDwKKwlbIDE0IF0gPSBLRVlfU0VUVVAsICAgICAgIC8vIGZ1bmN0aW9uCisJWyAxMiBdID0gS0VZX0tQUExVUywgICAgICAvLyA+Pj4KKworCVsgMTMgXSA9IEtFWV9HT1RPLCAgICAgICAgLy8gbXRzCisJWyAyOSBdID0gS0VZX1JFRlJFU0gsICAgICAvLyByZXNldAorCVsgMjQgXSA9IEtFWV9NVVRFICAgICAgICAgLy8gbXV0ZS91bm11dGUKK307CisKIHN0cnVjdCBJUiB7CiAJc3RydWN0IGJ0dHZfc3ViX2RldmljZSAgKnN1YjsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICAgICAgICAqaW5wdXQ7CkBAIC0yODIsNTMgKzM0Nyw1OSBAQAogCiAJLyogZGV0ZWN0ICYgY29uZmlndXJlICovCiAJc3dpdGNoIChzdWItPmNvcmUtPnR5cGUpIHsKLQljYXNlIEJUVFZfQVZFUk1FRElBOgotCWNhc2UgQlRUVl9BVlBIT05FOTg6Ci0JY2FzZSBCVFRWX0FWRVJNRURJQTk4OgorCWNhc2UgQlRUVl9CT0FSRF9BVkVSTUVESUE6CisJY2FzZSBCVFRWX0JPQVJEX0FWUEhPTkU5ODoKKwljYXNlIEJUVFZfQk9BUkRfQVZFUk1FRElBOTg6CiAJCWlyX2NvZGVzICAgICAgICAgPSBpcl9jb2Rlc19hdmVybWVkaWE7CiAJCWlyLT5tYXNrX2tleWNvZGUgPSAweGY4ODAwMDsKIAkJaXItPm1hc2tfa2V5ZG93biA9IDB4MDEwMDAwOwogCQlpci0+cG9sbGluZyAgICAgID0gNTA7IC8vIG1zCiAJCWJyZWFrOwogCi0JY2FzZSBCVFRWX0FWRFZCVF83NjE6Ci0JY2FzZSBCVFRWX0FWRFZCVF83NzE6CisJY2FzZSBCVFRWX0JPQVJEX0FWRFZCVF83NjE6CisJY2FzZSBCVFRWX0JPQVJEX0FWRFZCVF83NzE6CiAJCWlyX2NvZGVzICAgICAgICAgPSBpcl9jb2Rlc19hdmVybWVkaWFfZHZidDsKIAkJaXItPm1hc2tfa2V5Y29kZSA9IDB4MGYwMGMwOwogCQlpci0+bWFza19rZXlkb3duID0gMHgwMDAwMjA7CiAJCWlyLT5wb2xsaW5nICAgICAgPSA1MDsgLy8gbXMKIAkJYnJlYWs7CiAKLQljYXNlIEJUVFZfUFhFTFZXUExUVlBBSzoKKwljYXNlIEJUVFZfQk9BUkRfUFhFTFZXUExUVlBBSzoKIAkJaXJfY29kZXMgICAgICAgICA9IGlyX2NvZGVzX3BpeGVsdmlldzsKIAkJaXItPm1hc2tfa2V5Y29kZSA9IDB4MDAzZTAwOwogCQlpci0+bWFza19rZXl1cCAgID0gMHgwMTAwMDA7CiAJCWlyLT5wb2xsaW5nICAgICAgPSA1MDsgLy8gbXMKLSAgICAgICAgICAgICAgICBicmVhazsKLQljYXNlIEJUVFZfUFZfQlQ4NzhQXzlCOgotCWNhc2UgQlRUVl9QVl9CVDg3OFBfUExVUzoKKwkJYnJlYWs7CisJY2FzZSBCVFRWX0JPQVJEX1BWX0JUODc4UF85QjoKKwljYXNlIEJUVFZfQk9BUkRfUFZfQlQ4NzhQX1BMVVM6CiAJCWlyX2NvZGVzICAgICAgICAgPSBpcl9jb2Rlc19waXhlbHZpZXc7CiAJCWlyLT5tYXNrX2tleWNvZGUgPSAweDAwMWYwMDsKIAkJaXItPm1hc2tfa2V5dXAgICA9IDB4MDA4MDAwOwogCQlpci0+cG9sbGluZyAgICAgID0gNTA7IC8vIG1zCi0gICAgICAgICAgICAgICAgYnJlYWs7CisJCWJyZWFrOwogCi0JY2FzZSBCVFRWX1dJTkZBU1QyMDAwOgorCWNhc2UgQlRUVl9CT0FSRF9XSU5GQVNUMjAwMDoKIAkJaXJfY29kZXMgICAgICAgICA9IGlyX2NvZGVzX3dpbmZhc3Q7CiAJCWlyLT5tYXNrX2tleWNvZGUgPSAweDFmODsKIAkJYnJlYWs7Ci0JY2FzZSBCVFRWX01BR0lDVFZJRVcwNjE6Ci0JY2FzZSBCVFRWX01BR0lDVFZJRVcwNjM6CisJY2FzZSBCVFRWX0JPQVJEX01BR0lDVFZJRVcwNjE6CisJY2FzZSBCVFRWX0JPQVJEX01BR0lDVFZJRVcwNjM6CiAJCWlyX2NvZGVzICAgICAgICAgPSBpcl9jb2Rlc193aW5mYXN0OwogCQlpci0+bWFza19rZXljb2RlID0gMHgwMDA4ZTAwMDsKIAkJaXItPm1hc2tfa2V5ZG93biA9IDB4MDAyMDAwMDA7CiAJCWJyZWFrOwotCWNhc2UgQlRUVl9BUEFDX1ZJRVdDT01QOgorCWNhc2UgQlRUVl9CT0FSRF9BUEFDX1ZJRVdDT01QOgogCQlpcl9jb2RlcyAgICAgICAgID0gaXJfY29kZXNfYXBhY192aWV3Y29tcDsKIAkJaXItPm1hc2tfa2V5Y29kZSA9IDB4MDAxZjAwOwogCQlpci0+bWFza19rZXl1cCAgID0gMHgwMDgwMDA7CiAJCWlyLT5wb2xsaW5nICAgICAgPSA1MDsgLy8gbXMKIAkJYnJlYWs7CisJY2FzZSBCVFRWX0JPQVJEX0NPTkNFUFRST05JQ19DVFZGTUkyOgorCQlpcl9jb2RlcyAgICAgICAgID0gaXJfY29kZXNfY29uY2VwdHJvbmljOworCQlpci0+bWFza19rZXljb2RlID0gMHgwMDFGMDA7CisJCWlyLT5tYXNrX2tleXVwICAgPSAweDAwNjAwMDsKKwkJaXItPnBvbGxpbmcgICAgICA9IDUwOyAvLyBtcworCQlicmVhazsKIAl9CiAJaWYgKE5VTEwgPT0gaXJfY29kZXMpIHsKIAkJa2ZyZWUoaXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pci1rYmQtaTJjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2lyLWtiZC1pMmMuYwppbmRleCA5NzAzZDNkLi4wMDg1NTY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2lyLWtiZC1pMmMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2lyLWtiZC1pMmMuYwpAQCAtOCw2ICs4LDggQEAKICAqICAgICAgQ2hyaXN0b3BoIEJhcnRlbG11cyA8bGlyY0BiYXJ0ZWxtdXMuZGU+CiAgKiBtb2RpZmllZCBmb3IgS05DIE9ORSBUViBTdGF0aW9uL0FudWJpcyBUeXBob29uIFRWaWV3IFR1bmVyIGJ5CiAgKiAgICAgIFVscmljaCBNdWVsbGVyIDx1bHJpY2gubXVlbGxlcjQyQHdlYi5kZT4KKyAqIG1vZGlmaWVkIGZvciBlbTI4MjAgYmFzZWQgVVNCIFRWIHR1bmVycyBieQorICogICAgICBNYXJrdXMgUmVjaGJlcmdlciA8bXJlY2hiZXJnZXJAZ21haWwuY29tPgogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0zNywxMCArMzksOSBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KLQogI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KLQogI2luY2x1ZGUgPG1lZGlhL2lyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL2lyLWtiZC1pMmMuaD4KIAogLyogTWFyayBQaGFsYW4gPHBoYWxhbm1AbzIuaWU+ICovCiBzdGF0aWMgSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfcHY5NTFbSVJfS0VZVEFCX1NJWkVdID0gewpAQCAtODEsNTcgKzgyLDYgQEAKIAlbIDI4IF0gPSBLRVlfTUVESUEsICAgICAgICAgICAgIC8qIFBDL1RWICovCiB9OwogCi1zdGF0aWMgSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfcHVycGxldHZbSVJfS0VZVEFCX1NJWkVdID0gewotCVsgMHgzICBdID0gS0VZX1BPV0VSLAotCVsgMHg2ZiBdID0gS0VZX01VVEUsCi0JWyAweDEwIF0gPSBLRVlfQkFDS1NQQUNFLAkvKiBSZWNhbGwgKi8KLQotCVsgMHgxMSBdID0gS0VZX0tQMCwKLQlbIDB4NCAgXSA9IEtFWV9LUDEsCi0JWyAweDUgIF0gPSBLRVlfS1AyLAotCVsgMHg2ICBdID0gS0VZX0tQMywKLQlbIDB4OCAgXSA9IEtFWV9LUDQsCi0JWyAweDkgIF0gPSBLRVlfS1A1LAotCVsgMHhhICBdID0gS0VZX0tQNiwKLQlbIDB4YyAgXSA9IEtFWV9LUDcsCi0JWyAweGQgIF0gPSBLRVlfS1A4LAotCVsgMHhlICBdID0gS0VZX0tQOSwKLQlbIDB4MTIgXSA9IEtFWV9LUERPVCwJCS8qIDEwMCsgKi8KLQotCVsgMHg3ICBdID0gS0VZX1ZPTFVNRVVQLAotCVsgMHhiICBdID0gS0VZX1ZPTFVNRURPV04sCi0JWyAweDFhIF0gPSBLRVlfS1BQTFVTLAotCVsgMHgxOCBdID0gS0VZX0tQTUlOVVMsCi0JWyAweDE1IF0gPSBLRVlfVVAsCi0JWyAweDFkIF0gPSBLRVlfRE9XTiwKLQlbIDB4ZiAgXSA9IEtFWV9DSEFOTkVMVVAsCi0JWyAweDEzIF0gPSBLRVlfQ0hBTk5FTERPV04sCi0JWyAweDQ4IF0gPSBLRVlfWk9PTSwKLQotCVsgMHgxYiBdID0gS0VZX1ZJREVPLAkJLyogVmlkZW8gc291cmNlICovCi0JWyAweDQ5IF0gPSBLRVlfTEFOR1VBR0UsCS8qIE1UUyBTZWxlY3QgKi8KLQlbIDB4MTkgXSA9IEtFWV9TRUFSQ0gsCQkvKiBBdXRvIFNjYW4gKi8KLQotCVsgMHg0YiBdID0gS0VZX1JFQ09SRCwKLQlbIDB4NDYgXSA9IEtFWV9QTEFZLAotCVsgMHg0NSBdID0gS0VZX1BBVVNFLCAgIAkvKiBQYXVzZSAqLwotCVsgMHg0NCBdID0gS0VZX1NUT1AsCi0JWyAweDQwIF0gPSBLRVlfRk9SV0FSRCwgICAJLyogRm9yd2FyZCA/ICovCi0JWyAweDQyIF0gPSBLRVlfUkVXSU5ELCAgIAkvKiBCYWNrd2FyZCA/ICovCi0KLX07Ci0KLXN0cnVjdCBJUiB7Ci0Jc3RydWN0IGkyY19jbGllbnQgICAgICBjOwotCXN0cnVjdCBpbnB1dF9kZXYgICAgICAgKmlucHV0OwotCXN0cnVjdCBpcl9pbnB1dF9zdGF0ZSAgaXI7Ci0KLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgICAgIHdvcms7Ci0Jc3RydWN0IHRpbWVyX2xpc3QgICAgICB0aW1lcjsKLQljaGFyICAgICAgICAgICAgICAgICAgIHBoeXNbMzJdOwotCWludCAgICAgICAgICAgICAgICAgICAgKCpnZXRfa2V5KShzdHJ1Y3QgSVIqLCB1MzIqLCB1MzIqKTsKLX07Ci0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBpbnNtb2QgcGFyYW1ldGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCkBAIC0xNDQsNyArOTQsNyBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgaW50IGdldF9rZXlfaGF1cChzdHJ1Y3QgSVIgKmlyLCB1MzIgKmlyX2tleSwgdTMyICppcl9yYXcpCitzdGF0aWMgaW50IGdldF9rZXlfaGF1cChzdHJ1Y3QgSVJfaTJjICppciwgdTMyICppcl9rZXksIHUzMiAqaXJfcmF3KQogewogCXVuc2lnbmVkIGNoYXIgYnVmWzNdOwogCWludCBzdGFydCwgdG9nZ2xlLCBkZXYsIGNvZGU7CkBAIC0xNzEsOSArMTIxLDkgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGludCBnZXRfa2V5X3BpeGVsdmlldyhzdHJ1Y3QgSVIgKmlyLCB1MzIgKmlyX2tleSwgdTMyICppcl9yYXcpCitzdGF0aWMgaW50IGdldF9rZXlfcGl4ZWx2aWV3KHN0cnVjdCBJUl9pMmMgKmlyLCB1MzIgKmlyX2tleSwgdTMyICppcl9yYXcpCiB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgYjsKKwl1bnNpZ25lZCBjaGFyIGI7CiAKIAkvKiBwb2xsIElSIGNoaXAgKi8KIAlpZiAoMSAhPSBpMmNfbWFzdGVyX3JlY3YoJmlyLT5jLCZiLDEpKSB7CkBAIC0xODUsOSArMTM1LDkgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGludCBnZXRfa2V5X3B2OTUxKHN0cnVjdCBJUiAqaXIsIHUzMiAqaXJfa2V5LCB1MzIgKmlyX3JhdykKK3N0YXRpYyBpbnQgZ2V0X2tleV9wdjk1MShzdHJ1Y3QgSVJfaTJjICppciwgdTMyICppcl9rZXksIHUzMiAqaXJfcmF3KQogewotICAgICAgICB1bnNpZ25lZCBjaGFyIGI7CisJdW5zaWduZWQgY2hhciBiOwogCiAJLyogcG9sbCBJUiBjaGlwICovCiAJaWYgKDEgIT0gaTJjX21hc3Rlcl9yZWN2KCZpci0+YywmYiwxKSkgewpAQCAtMjA1LDcgKzE1NSw3IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbnQgZ2V0X2tleV9rbmMxKHN0cnVjdCBJUiAqaXIsIHUzMiAqaXJfa2V5LCB1MzIgKmlyX3JhdykKK3N0YXRpYyBpbnQgZ2V0X2tleV9rbmMxKHN0cnVjdCBJUl9pMmMgKmlyLCB1MzIgKmlyX2tleSwgdTMyICppcl9yYXcpCiB7CiAJdW5zaWduZWQgY2hhciBiOwogCkBAIC0yMTYsMTUgKzE2NiwxNSBAQAogCX0KIAogCS8qIGl0IHNlZW1zIHRoYXQgMHhGRSBpbmRpY2F0ZXMgdGhhdCBhIGJ1dHRvbiBpcyBzdGlsbCBob2xkCi0JICAgZG93biwgd2hpbGUgMHhGRiBpbmRpY2F0ZXMgdGhhdCBubyBidXR0b24gaXMgaG9sZAotCSAgIGRvd24uIDB4RkUgc2VxdWVuY2VzIGFyZSBzb21ldGltZXMgaW50ZXJydXB0ZWQgYnkgMHhGRiAqLworCSAgIGRvd24sIHdoaWxlIDB4ZmYgaW5kaWNhdGVzIHRoYXQgbm8gYnV0dG9uIGlzIGhvbGQKKwkgICBkb3duLiAweGZlIHNlcXVlbmNlcyBhcmUgc29tZXRpbWVzIGludGVycnVwdGVkIGJ5IDB4RkYgKi8KIAogCWRwcmludGsoMiwia2V5ICUwMnhcbiIsIGIpOwogCi0JaWYgKGIgPT0gMHhGRikKKwlpZiAoYiA9PSAweGZmKQogCQlyZXR1cm4gMDsKIAotCWlmIChiID09IDB4RkUpCisJaWYgKGIgPT0gMHhmZSkKIAkJLyoga2VlcCBvbGQgZGF0YSAqLwogCQlyZXR1cm4gMTsKIApAQCAtMjMzLDMxICsxODMsOSBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW50IGdldF9rZXlfcHVycGxldHYoc3RydWN0IElSICppciwgdTMyICppcl9rZXksIHUzMiAqaXJfcmF3KQotewotICAgICAgICB1bnNpZ25lZCBjaGFyIGI7Ci0KLQkvKiBwb2xsIElSIGNoaXAgKi8KLQlpZiAoMSAhPSBpMmNfbWFzdGVyX3JlY3YoJmlyLT5jLCZiLDEpKSB7Ci0JCWRwcmludGsoMSwicmVhZCBlcnJvclxuIik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCS8qIG5vIGJ1dHRvbiBwcmVzcyAqLwotCWlmIChiPT0wKQotCQlyZXR1cm4gMDsKLQotCS8qIHJlcGVhdGluZyAqLwotCWlmIChiICYgMHg4MCkKLQkJcmV0dXJuIDE7Ci0KLQkqaXJfa2V5ID0gYjsKLQkqaXJfcmF3ID0gYjsKLQlyZXR1cm4gMTsKLX0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyB2b2lkIGlyX2tleV9wb2xsKHN0cnVjdCBJUiAqaXIpCitzdGF0aWMgdm9pZCBpcl9rZXlfcG9sbChzdHJ1Y3QgSVJfaTJjICppcikKIHsKIAlzdGF0aWMgdTMyIGlyX2tleSwgaXJfcmF3OwogCWludCByYzsKQEAgLTI3OCwxMyArMjA2LDEzIEBACiAKIHN0YXRpYyB2b2lkIGlyX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKLQlzdHJ1Y3QgSVIgKmlyID0gKHN0cnVjdCBJUiopZGF0YTsKKwlzdHJ1Y3QgSVJfaTJjICppciA9IChzdHJ1Y3QgSVJfaTJjKilkYXRhOwogCXNjaGVkdWxlX3dvcmsoJmlyLT53b3JrKTsKIH0KIAogc3RhdGljIHZvaWQgaXJfd29yayh2b2lkICpkYXRhKQogewotCXN0cnVjdCBJUiAqaXIgPSBkYXRhOworCXN0cnVjdCBJUl9pMmMgKmlyID0gZGF0YTsKIAlpcl9rZXlfcG9sbChpcik7CiAJbW9kX3RpbWVyKCZpci0+dGltZXIsIGppZmZpZXMrSFovMTApOwogfQpAQCAtMjk3LDE3ICsyMjUsMTcgQEAKIHN0YXRpYyBpbnQgaXJfcHJvYmUoc3RydWN0IGkyY19hZGFwdGVyICphZGFwKTsKIAogc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGRyaXZlciA9IHsKLSAgICAgICAgLm5hbWUgICAgICAgICAgID0gImlyIHJlbW90ZSBrYmQgZHJpdmVyIiwKLSAgICAgICAgLmlkICAgICAgICAgICAgID0gSTJDX0RSSVZFUklEX0VYUDMsIC8qIEZJWE1FICovCi0gICAgICAgIC5mbGFncyAgICAgICAgICA9IEkyQ19ERl9OT1RJRlksCi0gICAgICAgIC5hdHRhY2hfYWRhcHRlciA9IGlyX3Byb2JlLAotICAgICAgICAuZGV0YWNoX2NsaWVudCAgPSBpcl9kZXRhY2gsCisJLm5hbWUgICAgICAgICAgID0gImlyIHJlbW90ZSBrYmQgZHJpdmVyIiwKKwkuaWQgICAgICAgICAgICAgPSBJMkNfRFJJVkVSSURfRVhQMywgLyogRklYTUUgKi8KKwkuZmxhZ3MgICAgICAgICAgPSBJMkNfREZfTk9USUZZLAorCS5hdHRhY2hfYWRhcHRlciA9IGlyX3Byb2JlLAorCS5kZXRhY2hfY2xpZW50ICA9IGlyX2RldGFjaCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudCBjbGllbnRfdGVtcGxhdGUgPQogewotICAgICAgICAubmFtZSA9ICJ1bnNldCIsCi0gICAgICAgIC5kcml2ZXIgPSAmZHJpdmVyCisJLm5hbWUgPSAidW5zZXQiLAorCS5kcml2ZXIgPSAmZHJpdmVyCiB9OwogCiBzdGF0aWMgaW50IGlyX2F0dGFjaChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsIGludCBhZGRyLApAQCAtMzE2LDEwICsyNDQsMTAgQEAKIAlJUl9LRVlUQUJfVFlQRSAqaXJfY29kZXMgPSBOVUxMOwogCWNoYXIgKm5hbWU7CiAJaW50IGlyX3R5cGU7Ci0gICAgICAgIHN0cnVjdCBJUiAqaXI7CisgICAgICAgIHN0cnVjdCBJUl9pMmMgKmlyOwogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldjsKIAotCWlyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IElSKSwgR0ZQX0tFUk5FTCk7CisJaXIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgSVJfaTJjKSwgR0ZQX0tFUk5FTCk7CiAJaW5wdXRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CiAJaWYgKCFpciB8fCAhaW5wdXRfZGV2KSB7CiAJCWtmcmVlKGlyKTsKQEAgLTM2MSwxMCArMjg5LDEwIEBACiAJCWlyX2NvZGVzICAgID0gaXJfY29kZXNfZW1wdHk7CiAJCWJyZWFrOwogCWNhc2UgMHg3YToKLQkJbmFtZSAgICAgICAgPSAiUHVycGxlIFRWIjsKLQkJaXItPmdldF9rZXkgPSBnZXRfa2V5X3B1cnBsZXR2OworCWNhc2UgMHg0NzoKKwkJLyogSGFuZGxlZCBieSBzYWE3MTM0LWlucHV0ICovCisJCW5hbWUgICAgICAgID0gIlNBQTcxM3ggcmVtb3RlIjsKIAkJaXJfdHlwZSAgICAgPSBJUl9UWVBFX09USEVSOwotCQlpcl9jb2RlcyAgICA9IGlyX2NvZGVzX3B1cnBsZXR2OwogCQlicmVhazsKIAlkZWZhdWx0OgogCQkvKiBzaG91bGRuJ3QgaGFwcGVuICovCkBAIC0zNzMsOSArMzAxLDI0IEBACiAJCXJldHVybiAtMTsKIAl9CiAKLQkvKiByZWdpc3RlciBpMmMgZGV2aWNlICovCi0JaTJjX2F0dGFjaF9jbGllbnQoJmlyLT5jKTsKKwkvKiBTZXRzIG5hbWUgKi8KIAlzbnByaW50Zihpci0+Yy5uYW1lLCBzaXplb2YoaXItPmMubmFtZSksICJpMmMgSVIgKCVzKSIsIG5hbWUpOworCWlyLT5pcl9jb2Rlcz1pcl9jb2RlczsKKworCS8qIHJlZ2lzdGVyIGkyYyBkZXZpY2UKKwkgKiBBdCBkZXZpY2UgcmVnaXN0ZXIsIElSIGNvZGVzIG1heSBiZSBjaGFuZ2VkIHRvIGJlCisJICogYm9hcmQgZGVwZW5kZW50LgorCSovCisJaTJjX2F0dGFjaF9jbGllbnQoJmlyLT5jKTsKKworCS8qIElmIElSIG5vdCBzdXBwb3J0ZWQgb3IgZGlzYWJsZWQsIHVucmVnaXN0ZXJzIGRyaXZlciAqLworCWlmIChpci0+Z2V0X2tleSA9PSBOVUxMKSB7CisJCWkyY19kZXRhY2hfY2xpZW50KCZpci0+Yyk7CisJCWtmcmVlKGlyKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIFBoeXMgYWRkciBjYW4gb25seSBiZSBzZXQgYWZ0ZXIgYXR0YWNoaW5nIChmb3IgaXItPmMuZGV2LmJ1c19pZCkgKi8KIAlzbnByaW50Zihpci0+cGh5cywgc2l6ZW9mKGlyLT5waHlzKSwgIiVzLyVzL2lyMCIsCiAJCSBpci0+Yy5hZGFwdGVyLT5kZXYuYnVzX2lkLAogCQkgaXItPmMuZGV2LmJ1c19pZCk7CkBAIC0zODYsNiArMzI5LDcgQEAKIAlpbnB1dF9kZXYtPm5hbWUJCT0gaXItPmMubmFtZTsKIAlpbnB1dF9kZXYtPnBoeXMJCT0gaXItPnBoeXM7CiAKKwkvKiByZWdpc3RlciBldmVudCBkZXZpY2UgKi8KIAlpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoaXItPmlucHV0KTsKIAogCS8qIHN0YXJ0IHBvbGxpbmcgdmlhIGV2ZW50ZCAqLwpAQCAtNDAwLDcgKzM0NCw3IEBACiAKIHN0YXRpYyBpbnQgaXJfZGV0YWNoKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0gICAgICAgIHN0cnVjdCBJUiAqaXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3QgSVJfaTJjICppciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCiAJLyoga2lsbCBvdXRzdGFuZGluZyBwb2xscyAqLwogCWRlbF90aW1lcigmaXItPnRpbWVyKTsKQEAgLTQyOCw5ICszNzIsMTIgQEAKIAkqLwogCiAJc3RhdGljIGNvbnN0IGludCBwcm9iZV9idHR2W10gPSB7IDB4MWEsIDB4MTgsIDB4NGIsIDB4NjQsIDB4MzAsIC0xfTsKLQlzdGF0aWMgY29uc3QgaW50IHByb2JlX3NhYTcxMzRbXSA9IHsgMHg3YSwgLTEgfTsKKwlzdGF0aWMgY29uc3QgaW50IHByb2JlX3NhYTcxMzRbXSA9IHsgMHg3YSwgMHg0NywgLTEgfTsKKwlzdGF0aWMgY29uc3QgaW50IHByb2JlX2VtMjhYWFtdID0geyAweDMwLCAweDQ3LCAtMSB9OwogCWNvbnN0IGludCAqcHJvYmUgPSBOVUxMOwotCXN0cnVjdCBpMmNfY2xpZW50IGM7IGNoYXIgYnVmOyBpbnQgaSxyYzsKKwlzdHJ1Y3QgaTJjX2NsaWVudCBjOworCXVuc2lnbmVkIGNoYXIgYnVmOworCWludCBpLHJjOwogCiAJc3dpdGNoIChhZGFwLT5pZCkgewogCWNhc2UgSTJDX0hXX0JfQlQ4NDg6CkBAIC00MzksNiArMzg2LDkgQEAKIAljYXNlIEkyQ19IV19TQUE3MTM0OgogCQlwcm9iZSA9IHByb2JlX3NhYTcxMzQ7CiAJCWJyZWFrOworCWNhc2UgSTJDX0hXX0JfRU0yOFhYOgorCQlwcm9iZSA9IHByb2JlX2VtMjhYWDsKKwkJYnJlYWs7CiAJfQogCWlmIChOVUxMID09IHByb2JlKQogCQlyZXR1cm4gMDsKQEAgLTQ0NywxMSArMzk3LDExIEBACiAJYy5hZGFwdGVyID0gYWRhcDsKIAlmb3IgKGkgPSAwOyAtMSAhPSBwcm9iZVtpXTsgaSsrKSB7CiAJCWMuYWRkciA9IHByb2JlW2ldOwotCQlyYyA9IGkyY19tYXN0ZXJfcmVjdigmYywmYnVmLDEpOworCQlyYyA9IGkyY19tYXN0ZXJfcmVjdigmYywmYnVmLDApOwogCQlkcHJpbnRrKDEsInByb2JlIDB4JTAyeCBAICVzOiAlc1xuIiwKIAkJCXByb2JlW2ldLCBhZGFwLT5uYW1lLAotCQkJKDEgPT0gcmMpID8gInllcyIgOiAibm8iKTsKLQkJaWYgKDEgPT0gcmMpIHsKKwkJCSgwID09IHJjKSA/ICJ5ZXMiIDogIm5vIik7CisJCWlmICgwID09IHJjKSB7CiAJCQlpcl9hdHRhY2goYWRhcCxwcm9iZVtpXSwwLDApOwogCQkJYnJlYWs7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXNwMzQwMC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9tc3AzNDAwLmMKaW5kZXggZTc1ZTc5NC4uYTIzZmIwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9tc3AzNDAwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9tc3AzNDAwLmMKQEAgLTU0LDkgKzU0LDQxIEBACiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KIAogI2luY2x1ZGUgPG1lZGlhL2F1ZGlvY2hpcC5oPgotI2luY2x1ZGUgPG1lZGlhL2lkLmg+CiAjaW5jbHVkZSAibXNwMzQwMC5oIgogCisjZGVmaW5lIG1zcDM0MDBfZGJnKGZtdCwgYXJnLi4uKSBcCisJZG8geyBcCisJCWlmIChkZWJ1ZykgXAorCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXMgZGVidWcgJWQtJTA0eDogIiBmbXQsIGNsaWVudC0+ZHJpdmVyLT5uYW1lLCBcCisJCQkgICAgICAgaTJjX2FkYXB0ZXJfaWQoY2xpZW50LT5hZGFwdGVyKSwgY2xpZW50LT5hZGRyICwgIyMgYXJnKTsgXAorCX0gd2hpbGUgKDApCisKKy8qIE1lZGl1bSB2b2x1bWUgZGVidWcuICovCisjZGVmaW5lIG1zcDM0MDBfZGJnX21lZGl1bXZvbChmbXQsIGFyZy4uLikgXAorCWRvIHsgXAorCQlpZiAoZGVidWcgPj0gMikgXAorCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXMgZGVidWcgJWQtJTA0eDogIiBmbXQsIGNsaWVudC0+ZHJpdmVyLT5uYW1lLCBcCisJCQkJaTJjX2FkYXB0ZXJfaWQoY2xpZW50LT5hZGFwdGVyKSwgY2xpZW50LT5hZGRyICwgIyMgYXJnKTsgXAorCX0gd2hpbGUgKDApCisKKy8qIEhpZ2ggdm9sdW1lIGRlYnVnLiBVc2Ugd2l0aCBjYXJlLiAqLworI2RlZmluZSBtc3AzNDAwX2RiZ19oaWdodm9sKGZtdCwgYXJnLi4uKSBcCisJZG8geyBcCisJCWlmIChkZWJ1ZyA+PSAxNikgXAorCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXMgZGVidWcgJWQtJTA0eDogIiBmbXQsIGNsaWVudC0+ZHJpdmVyLT5uYW1lLCBcCisJCQkJaTJjX2FkYXB0ZXJfaWQoY2xpZW50LT5hZGFwdGVyKSwgY2xpZW50LT5hZGRyICwgIyMgYXJnKTsgXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgbXNwMzQwMF9lcnIoZm10LCBhcmcuLi4pIGRvIHsgXAorCXByaW50ayhLRVJOX0VSUiAiJXMgJWQtJTA0eDogIiBmbXQsIGNsaWVudC0+ZHJpdmVyLT5uYW1lLCBcCisJCWkyY19hZGFwdGVyX2lkKGNsaWVudC0+YWRhcHRlciksIGNsaWVudC0+YWRkciAsICMjIGFyZyk7IH0gd2hpbGUgKDApCisjZGVmaW5lIG1zcDM0MDBfd2FybihmbXQsIGFyZy4uLikgZG8geyBcCisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXMgJWQtJTA0eDogIiBmbXQsIGNsaWVudC0+ZHJpdmVyLT5uYW1lLCBcCisJCWkyY19hZGFwdGVyX2lkKGNsaWVudC0+YWRhcHRlciksIGNsaWVudC0+YWRkciAsICMjIGFyZyk7IH0gd2hpbGUgKDApCisjZGVmaW5lIG1zcDM0MDBfaW5mbyhmbXQsIGFyZy4uLikgZG8geyBcCisJcHJpbnRrKEtFUk5fSU5GTyAiJXMgJWQtJTA0eDogIiBmbXQsIGNsaWVudC0+ZHJpdmVyLT5uYW1lLCBcCisJCWkyY19hZGFwdGVyX2lkKGNsaWVudC0+YWRhcHRlciksIGNsaWVudC0+YWRkciAsICMjIGFyZyk7IH0gd2hpbGUgKDApCisKICNkZWZpbmUgT1BNT0RFX0FVVE8gICAgLTEKICNkZWZpbmUgT1BNT0RFX01BTlVBTCAgIDAKICNkZWZpbmUgT1BNT0RFX1NJTVBMRSAgIDEgICAvKiB1c2Ugc2hvcnQgcHJvZ3JhbW1pbmcgKD49IG1zcDM0MTAgb25seSkgKi8KQEAgLTczLDE1ICsxMDUsMjYgQEAKIAogc3RhdGljIGludCBzdGVyZW9fdGhyZXNob2xkID0gMHgxOTA7IC8qIGEyIHRocmVzaG9sZCBmb3Igc3RlcmVvL2JpbGluZ3VhbAogCQkJCQkobXNwMzR4eGcgb25seSkgMHgwMGEwLTB4MDNjMCAqLworI2RlZmluZSBERlBfQ09VTlQgMHg0MQorc3RhdGljIGNvbnN0IGludCBibF9kZnBbXSA9IHsKKwkweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA2LCAweDA4LCAweDA5LCAweDBhLAorCTB4MGIsIDB4MGQsIDB4MGUsIDB4MTAKK307CisKKyNkZWZpbmUgSVNfTVNQMzRYWF9HKG1zcCkgKChtc3ApLT5vcG1vZGU9PTIpCiAKIHN0cnVjdCBtc3AzNDAwYyB7CiAJaW50IHJldjEscmV2MjsKIAogCWludCBvcG1vZGU7CisJaW50IG5pY2FtOwogCWludCBtb2RlOwogCWludCBub3JtOworCWludCBzdGVyZW87CiAJaW50IG5pY2FtX29uOwogCWludCBhY2I7CisJaW50IGluX3NjYXJ0OworCWludCBpMnNfbW9kZTsKIAlpbnQgbWFpbiwgc2Vjb25kOwkvKiBzb3VuZCBjYXJyaWVyICovCiAJaW50IGlucHV0OwogCWludCBzb3VyY2U7ICAgICAgICAgICAgIC8qIHNlZSBtc3AzNHh4Z19zZXRfc291cmNlICovCkBAIC05MSw5ICsxMzQsMTIgQEAKIAlpbnQgcnhzdWJjaGFuczsKIAogCWludCBtdXRlZDsKLQlpbnQgdm9sdW1lLCBiYWxhbmNlOworCWludCBsZWZ0LCByaWdodDsgICAgICAgIC8qIHZvbHVtZSAqLwogCWludCBiYXNzLCB0cmVibGU7CiAKKwkvKiBzaGFkb3cgcmVnaXN0ZXIgc2V0ICovCisJaW50IGRmcF9yZWdzW0RGUF9DT1VOVF07CisKIAkvKiB0aHJlYWQgKi8KIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgICAqa3RocmVhZDsKIAl3YWl0X3F1ZXVlX2hlYWRfdCAgICB3cTsKQEAgLTEwMSw2ICsxNDcsOCBAQAogCWludCAgICAgICAgICAgICAgICAgIHdhdGNoX3N0ZXJlbzoxOwogfTsKIAorI2RlZmluZSBNSU4oYSxiKSAoKChhKT4oYikpPyhiKTooYSkpCisjZGVmaW5lIE1BWChhLGIpICgoKGEpPihiKSk/KGEpOihiKSkKICNkZWZpbmUgSEFWRV9OSUNBTShtc3ApICAgKCgobXNwLT5yZXYyPj44KSAmIDB4ZmYpICE9IDAwKQogI2RlZmluZSBIQVZFX1NJTVBMRShtc3ApICAoKG1zcC0+cmV2MSAgICAgICYgMHhmZikgPj0gJ0QnLSdAJykKICNkZWZpbmUgSEFWRV9TSU1QTEVSKG1zcCkgKChtc3AtPnJldjEgICAgICAmIDB4ZmYpID49ICdHJy0nQCcpCkBAIC0xMTAsOSArMTU4LDYgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi0jZGVmaW5lIGRwcmludGsgICAgICBpZiAoZGVidWcgPj0gMSkgcHJpbnRrCi0jZGVmaW5lIGQycHJpbnRrICAgICBpZiAoZGVidWcgPj0gMikgcHJpbnRrCi0KIC8qIHJlYWQtb25seSAqLwogbW9kdWxlX3BhcmFtKG9wbW9kZSwgICAgICAgICAgIGludCwgMDQ0NCk7CiAKQEAgLTEzMiwxMSArMTc3LDYgQEAKIE1PRFVMRV9QQVJNX0RFU0MoYW1zb3VuZCwgIkhhcmR3aXJlIEFNIHNvdW5kIGF0IDYuNUh6IChGcmFuY2UpLCBGTSBjYW4gYXV0b3NjYW4iKTsKIE1PRFVMRV9QQVJNX0RFU0MoZG9sYnksICJBY3RpdmF0ZXMgRG9sYnkgcHJvY2Vzc3NpbmciKTsKIAotCi1NT0RVTEVfREVTQ1JJUFRJT04oImRldmljZSBkcml2ZXIgZm9yIG1zcDM0eHggVFYgc291bmQgcHJvY2Vzc29yIik7Ci1NT0RVTEVfQVVUSE9SKCJHZXJkIEtub3JyIik7Ci1NT0RVTEVfTElDRU5TRSgiRHVhbCBCU0QvR1BMIik7IC8qIEZyZWVCU0QgdXNlcyB0aGlzIHRvbyAqLwotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKICNkZWZpbmUgSTJDX01TUDM0MDBDICAgICAgIDB4ODAKQEAgLTE1Myw2ICsxOTMsMTAgQEAKIH07CiBJMkNfQ0xJRU5UX0lOU01PRDsKIAorTU9EVUxFX0RFU0NSSVBUSU9OKCJkZXZpY2UgZHJpdmVyIGZvciBtc3AzNHh4IFRWIHNvdW5kIHByb2Nlc3NvciIpOworTU9EVUxFX0FVVEhPUigiR2VyZCBLbm9yciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogZnVuY3Rpb25zIGZvciB0YWxraW5nIHRvIHRoZSBNU1AzNDAwQyBTb3VuZCBwcm9jZXNzb3IgICAgICAgICAgICAgICAgICAgKi8KIApAQCAtMTcyLDY4ICsyMTYsNzMgQEAKIAkJeyBjbGllbnQtPmFkZHIsIEkyQ19NX1JELCAyLCByZWFkICB9LAogCX07CiAKKwltc3AzNDAwX2RiZ19oaWdodm9sKCJtc3AzNDAwY19yZXNldFxuIik7CiAJaWYgKCAoMSAhPSBpMmNfdHJhbnNmZXIoY2xpZW50LT5hZGFwdGVyLCZyZXNldFswXSwxKSkgfHwKIAkgICAgICgxICE9IGkyY190cmFuc2ZlcihjbGllbnQtPmFkYXB0ZXIsJnJlc2V0WzFdLDEpKSB8fAogCSAgICAgKDIgIT0gaTJjX3RyYW5zZmVyKGNsaWVudC0+YWRhcHRlcix0ZXN0LDIpKSApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJtc3AzNDAwOiBjaGlwIHJlc2V0IGZhaWxlZFxuIik7CisJCW1zcDM0MDBfZXJyKCJjaGlwIHJlc2V0IGZhaWxlZFxuIik7CiAJCXJldHVybiAtMTsKLSAgICAgICAgfQorCX0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotbXNwMzQwMGNfcmVhZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgZGV2LCBpbnQgYWRkcikKK3N0YXRpYyBpbnQgbXNwMzQwMGNfcmVhZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgZGV2LCBpbnQgYWRkcikKIHsKLQlpbnQgZXJyOworCWludCBlcnIscmV0dmFsOwogCi0gICAgICAgIHVuc2lnbmVkIGNoYXIgd3JpdGVbM107Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgcmVhZFsyXTsKLSAgICAgICAgc3RydWN0IGkyY19tc2cgbXNnc1syXSA9IHsKLSAgICAgICAgICAgICAgICB7IGNsaWVudC0+YWRkciwgMCwgICAgICAgIDMsIHdyaXRlIH0sCi0gICAgICAgICAgICAgICAgeyBjbGllbnQtPmFkZHIsIEkyQ19NX1JELCAyLCByZWFkICB9Ci0gICAgICAgIH07Ci0gICAgICAgIHdyaXRlWzBdID0gZGV2KzE7Ci0gICAgICAgIHdyaXRlWzFdID0gYWRkciA+PiA4OwotICAgICAgICB3cml0ZVsyXSA9IGFkZHIgJiAweGZmOworCXVuc2lnbmVkIGNoYXIgd3JpdGVbM107CisJdW5zaWduZWQgY2hhciByZWFkWzJdOworCXN0cnVjdCBpMmNfbXNnIG1zZ3NbMl0gPSB7CisJCXsgY2xpZW50LT5hZGRyLCAwLCAgICAgICAgMywgd3JpdGUgfSwKKwkJeyBjbGllbnQtPmFkZHIsIEkyQ19NX1JELCAyLCByZWFkICB9CisJfTsKKworCXdyaXRlWzBdID0gZGV2KzE7CisJd3JpdGVbMV0gPSBhZGRyID4+IDg7CisJd3JpdGVbMl0gPSBhZGRyICYgMHhmZjsKIAogCWZvciAoZXJyID0gMDsgZXJyIDwgMzspIHsKIAkJaWYgKDIgPT0gaTJjX3RyYW5zZmVyKGNsaWVudC0+YWRhcHRlcixtc2dzLDIpKQogCQkJYnJlYWs7CiAJCWVycisrOwotCQlwcmludGsoS0VSTl9XQVJOSU5HICJtc3AzNHh4OiBJL08gZXJyb3IgIyVkIChyZWFkIDB4JTAyeC8weCUwMngpXG4iLAotCQkgICAgICAgZXJyLCBkZXYsIGFkZHIpOwotCQltc2xlZXAoMTApOworCQltc3AzNDAwX3dhcm4oIkkvTyBlcnJvciAjJWQgKHJlYWQgMHglMDJ4LzB4JTAyeClcbiIsIGVyciwKKwkJICAgICAgIGRldiwgYWRkcik7CisJCWN1cnJlbnQtPnN0YXRlID0gVEFTS19JTlRFUlJVUFRJQkxFOworCQlzY2hlZHVsZV90aW1lb3V0KG1zZWNzX3RvX2ppZmZpZXMoMTApKTsKIAl9CiAJaWYgKDMgPT0gZXJyKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIm1zcDM0eHg6IGdpdmluZyB1cCwgcmVzZXRpbmcgY2hpcC4gU291bmQgd2lsbCBnbyBvZmYsIHNvcnJ5IGZvbGtzIDotfFxuIik7CisJCW1zcDM0MDBfd2FybigiZ2l2aW5nIHVwLCByZXNldHRpbmcgY2hpcC4gU291bmQgd2lsbCBnbyBvZmYsIHNvcnJ5IGZvbGtzIDotfFxuIik7CiAJCW1zcDM0MDBjX3Jlc2V0KGNsaWVudCk7CiAJCXJldHVybiAtMTsKIAl9Ci0JcmV0dXJuIHJlYWRbMF0gPDwgOCB8IHJlYWRbMV07CisJcmV0dmFsID0gcmVhZFswXSA8PCA4IHwgcmVhZFsxXTsKKwltc3AzNDAwX2RiZ19oaWdodm9sKCJtc3AzNDAwY19yZWFkKDB4JXgsIDB4JXgpOiAweCV4XG4iLCBkZXYsIGFkZHIsIHJldHZhbCk7CisJcmV0dXJuIHJldHZhbDsKIH0KIAotc3RhdGljIGludAotbXNwMzQwMGNfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGRldiwgaW50IGFkZHIsIGludCB2YWwpCitzdGF0aWMgaW50IG1zcDM0MDBjX3dyaXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBkZXYsIGludCBhZGRyLCBpbnQgdmFsKQogewogCWludCBlcnI7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgYnVmZmVyWzVdOworCXVuc2lnbmVkIGNoYXIgYnVmZmVyWzVdOwogCi0gICAgICAgIGJ1ZmZlclswXSA9IGRldjsKLSAgICAgICAgYnVmZmVyWzFdID0gYWRkciA+PiA4OwotICAgICAgICBidWZmZXJbMl0gPSBhZGRyICYgIDB4ZmY7Ci0gICAgICAgIGJ1ZmZlclszXSA9IHZhbCAgPj4gODsKLSAgICAgICAgYnVmZmVyWzRdID0gdmFsICAmICAweGZmOworCWJ1ZmZlclswXSA9IGRldjsKKwlidWZmZXJbMV0gPSBhZGRyID4+IDg7CisJYnVmZmVyWzJdID0gYWRkciAmICAweGZmOworCWJ1ZmZlclszXSA9IHZhbCAgPj4gODsKKwlidWZmZXJbNF0gPSB2YWwgICYgIDB4ZmY7CiAKKwltc3AzNDAwX2RiZ19oaWdodm9sKCJtc3AzNDAwY193cml0ZSgweCV4LCAweCV4LCAweCV4KVxuIiwgZGV2LCBhZGRyLCB2YWwpOwogCWZvciAoZXJyID0gMDsgZXJyIDwgMzspIHsKIAkJaWYgKDUgPT0gaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYnVmZmVyLCA1KSkKIAkJCWJyZWFrOwogCQllcnIrKzsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAibXNwMzR4eDogSS9PIGVycm9yICMlZCAod3JpdGUgMHglMDJ4LzB4JTAyeClcbiIsCi0JCSAgICAgICBlcnIsIGRldiwgYWRkcik7Ci0JCW1zbGVlcCgxMCk7CisJCW1zcDM0MDBfd2FybigiSS9PIGVycm9yICMlZCAod3JpdGUgMHglMDJ4LzB4JTAyeClcbiIsIGVyciwKKwkJICAgICAgIGRldiwgYWRkcik7CisJCWN1cnJlbnQtPnN0YXRlID0gVEFTS19JTlRFUlJVUFRJQkxFOworCQlzY2hlZHVsZV90aW1lb3V0KG1zZWNzX3RvX2ppZmZpZXMoMTApKTsKIAl9CiAJaWYgKDMgPT0gZXJyKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIm1zcDM0eHg6IGdpdmluZyB1cCwgcmVzZXRpbmcgY2hpcC4gU291bmQgd2lsbCBnbyBvZmYsIHNvcnJ5IGZvbGtzIDotfFxuIik7CisJCW1zcDM0MDBfd2FybigiZ2l2aW5nIHVwLCByZXNldGluZyBjaGlwLiBTb3VuZCB3aWxsIGdvIG9mZiwgc29ycnkgZm9sa3MgOi18XG4iKTsKIAkJbXNwMzQwMGNfcmVzZXQoY2xpZW50KTsKIAkJcmV0dXJuIC0xOwogCX0KQEAgLTI2Niw0NSArMzE1LDQ3IEBACiAJaW50IGRmcF9zcmM7CiAJaW50IGRmcF9tYXRyaXg7CiB9IG1zcF9pbml0X2RhdGFbXSA9IHsKLQkvKiBBTSAoZm9yIGNhcnJpZXIgZGV0ZWN0IC8gbXNwMzQwMCkgKi8KLQl7IHsgNzUsIDE5LCAzNiwgMzUsIDM5LCA0MCB9LCB7IDc1LCAxOSwgMzYsIDM1LCAzOSwgNDAgfSwKLQkgIE1TUF9DQVJSSUVSKDUuNSksIE1TUF9DQVJSSUVSKDUuNSksCi0JICAweDAwZDAsIDB4MDUwMCwgICAweDAwMjAsIDB4MzAwMH0sCi0KLQkvKiBBTSAoZm9yIGNhcnJpZXIgZGV0ZWN0IC8gbXNwMzQxMCkgKi8KLQl7IHsgLTEsIC0xLCAtOCwgMiwgNTksIDEyNiB9LCB7IC0xLCAtMSwgLTgsIDIsIDU5LCAxMjYgfSwKLQkgIE1TUF9DQVJSSUVSKDUuNSksIE1TUF9DQVJSSUVSKDUuNSksCi0JICAweDAwZDAsIDB4MDEwMCwgICAweDAwMjAsIDB4MzAwMH0sCi0KLQkvKiBGTSBSYWRpbyAqLwotCXsgeyAtOCwgLTgsIDQsIDYsIDc4LCAxMDcgfSwgeyAtOCwgLTgsIDQsIDYsIDc4LCAxMDcgfSwKLQkgIE1TUF9DQVJSSUVSKDEwLjcpLCBNU1BfQ0FSUklFUigxMC43KSwKLQkgIDB4MDBkMCwgMHgwNDgwLCAweDAwMjAsIDB4MzAwMCB9LAotCi0JLyogVGVycmVzdGlhbCBGTS1tb25vICsgRk0tc3RlcmVvICovCi0JeyB7ICAzLCAxOCwgMjcsIDQ4LCA2NiwgNzIgfSwgeyAgMywgMTgsIDI3LCA0OCwgNjYsIDcyIH0sCi0JICBNU1BfQ0FSUklFUig1LjUpLCBNU1BfQ0FSUklFUig1LjUpLAotCSAgMHgwMGQwLCAweDA0ODAsICAgMHgwMDMwLCAweDMwMDB9LAotCi0JLyogU2F0IEZNLW1vbm8gKi8KLQl7IHsgIDEsICA5LCAxNCwgMjQsIDMzLCAzNyB9LCB7ICAzLCAxOCwgMjcsIDQ4LCA2NiwgNzIgfSwKLQkgIE1TUF9DQVJSSUVSKDYuNSksIE1TUF9DQVJSSUVSKDYuNSksCi0JICAweDAwYzYsIDB4MDQ4MCwgICAweDAwMDAsIDB4MzAwMH0sCi0KLQkvKiBOSUNBTS9GTSAtLSAgQi9HICg1LjUvNS44NSksIEQvSyAoNi41LzUuODUpICovCi0JeyB7IC0yLCAtOCwgLTEwLCAxMCwgNTAsIDg2IH0sIHsgIDMsIDE4LCAyNywgNDgsIDY2LCA3MiB9LAotCSAgTVNQX0NBUlJJRVIoNS41KSwgTVNQX0NBUlJJRVIoNS41KSwKLQkgIDB4MDBkMCwgMHgwMDQwLCAgIDB4MDEyMCwgMHgzMDAwfSwKLQotCS8qIE5JQ0FNL0ZNIC0tIEkgKDYuMC82LjU1MikgKi8KLQl7IHsgIDIsIDQsIC02LCAtNCwgNDAsIDk0IH0sIHsgIDMsIDE4LCAyNywgNDgsIDY2LCA3MiB9LAotCSAgTVNQX0NBUlJJRVIoNi4wKSwgTVNQX0NBUlJJRVIoNi4wKSwKLQkgIDB4MDBkMCwgMHgwMDQwLCAgIDB4MDEyMCwgMHgzMDAwfSwKLQotCS8qIE5JQ0FNL0FNIC0tIEwgKDYuNS81Ljg1KSAqLwotCXsgeyAgLTIsIC04LCAtMTAsIDEwLCA1MCwgODYgfSwgeyAgLTQsIC0xMiwgLTksIDIzLCA3OSwgMTI2IH0sCi0JICBNU1BfQ0FSUklFUig2LjUpLCBNU1BfQ0FSUklFUig2LjUpLAotCSAgMHgwMGM2LCAweDAxNDAsICAgMHgwMTIwLCAweDdjMDN9LAorCXsJLyogQU0gKGZvciBjYXJyaWVyIGRldGVjdCAvIG1zcDM0MDApICovCisJCXs3NSwgMTksIDM2LCAzNSwgMzksIDQwfSwKKwkJezc1LCAxOSwgMzYsIDM1LCAzOSwgNDB9LAorCQlNU1BfQ0FSUklFUig1LjUpLCBNU1BfQ0FSUklFUig1LjUpLAorCQkweDAwZDAsIDB4MDUwMCwgMHgwMDIwLCAweDMwMDAKKwl9LHsJLyogQU0gKGZvciBjYXJyaWVyIGRldGVjdCAvIG1zcDM0MTApICovCisJCXstMSwgLTEsIC04LCAyLCA1OSwgMTI2fSwKKwkJey0xLCAtMSwgLTgsIDIsIDU5LCAxMjZ9LAorCQlNU1BfQ0FSUklFUig1LjUpLCBNU1BfQ0FSUklFUig1LjUpLAorCQkweDAwZDAsIDB4MDEwMCwgMHgwMDIwLCAweDMwMDAKKwl9LHsJLyogRk0gUmFkaW8gKi8KKwkJey04LCAtOCwgNCwgNiwgNzgsIDEwN30sCisJCXstOCwgLTgsIDQsIDYsIDc4LCAxMDd9LAorCQlNU1BfQ0FSUklFUigxMC43KSwgTVNQX0NBUlJJRVIoMTAuNyksCisJCTB4MDBkMCwgMHgwNDgwLCAweDAwMjAsIDB4MzAwMAorCX0sewkvKiBUZXJyZXN0aWFsIEZNLW1vbm8gKyBGTS1zdGVyZW8gKi8KKwkJezMsIDE4LCAyNywgNDgsIDY2LCA3Mn0sCisJCXszLCAxOCwgMjcsIDQ4LCA2NiwgNzJ9LAorCQlNU1BfQ0FSUklFUig1LjUpLCBNU1BfQ0FSUklFUig1LjUpLAorCQkweDAwZDAsIDB4MDQ4MCwgMHgwMDMwLCAweDMwMDAKKwl9LHsJLyogU2F0IEZNLW1vbm8gKi8KKwkJeyAxLCA5LCAxNCwgMjQsIDMzLCAzN30sCisJCXsgMywgMTgsIDI3LCA0OCwgNjYsIDcyfSwKKwkJTVNQX0NBUlJJRVIoNi41KSwgTVNQX0NBUlJJRVIoNi41KSwKKwkJMHgwMGM2LCAweDA0ODAsIDB4MDAwMCwgMHgzMDAwCisJfSx7CS8qIE5JQ0FNL0ZNIC0tICBCL0cgKDUuNS81Ljg1KSwgRC9LICg2LjUvNS44NSkgKi8KKwkJey0yLCAtOCwgLTEwLCAxMCwgNTAsIDg2fSwKKwkJezMsIDE4LCAyNywgNDgsIDY2LCA3Mn0sCisJCU1TUF9DQVJSSUVSKDUuNSksIE1TUF9DQVJSSUVSKDUuNSksCisJCTB4MDBkMCwgMHgwMDQwLCAweDAxMjAsIDB4MzAwMAorCX0sewkvKiBOSUNBTS9GTSAtLSBJICg2LjAvNi41NTIpICovCisJCXsyLCA0LCAtNiwgLTQsIDQwLCA5NH0sCisJCXszLCAxOCwgMjcsIDQ4LCA2NiwgNzJ9LAorCQlNU1BfQ0FSUklFUig2LjApLCBNU1BfQ0FSUklFUig2LjApLAorCQkweDAwZDAsIDB4MDA0MCwgMHgwMTIwLCAweDMwMDAKKwl9LHsJLyogTklDQU0vQU0gLS0gTCAoNi41LzUuODUpICovCisJCXstMiwgLTgsIC0xMCwgMTAsIDUwLCA4Nn0sCisJCXstNCwgLTEyLCAtOSwgMjMsIDc5LCAxMjZ9LAorCQlNU1BfQ0FSUklFUig2LjUpLCBNU1BfQ0FSUklFUig2LjUpLAorCQkweDAwYzYsIDB4MDE0MCwgMHgwMTIwLCAweDdjMDMKKwl9LAogfTsKIAogc3RydWN0IENBUlJJRVJfREVURUNUIHsKQEAgLTMzOCwzMiArMzg5LDY4IEBACiAKICNkZWZpbmUgQ0FSUklFUl9DT1VOVCh4KSAoc2l6ZW9mKHgpL3NpemVvZihzdHJ1Y3QgQ0FSUklFUl9ERVRFQ1QpKQogCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKgorICogYml0cyAgOSAgOCAgNSAtIFNDQVJUIERTUCBpbnB1dCBTZWxlY3Q6CisgKiAgICAgICAwICAwICAwIC0gU0NBUlQgMSB0byBEU1AgaW5wdXQgKHJlc2V0IHBvc2l0aW9uKQorICogICAgICAgMCAgMSAgMCAtIE1PTk8gdG8gRFNQIGlucHV0CisgKiAgICAgICAxICAwICAwIC0gU0NBUlQgMiB0byBEU1AgaW5wdXQKKyAqICAgICAgIDEgIDEgIDEgLSBNdXRlIERTUCBpbnB1dAorICoKKyAqIGJpdHMgMTEgMTAgIDYgLSBTQ0FSVCAxIE91dHB1dCBTZWxlY3Q6CisgKiAgICAgICAwICAwICAwIC0gdW5kZWZpbmVkIChyZXNldCBwb3NpdGlvbikKKyAqICAgICAgIDAgIDEgIDAgLSBTQ0FSVCAyIElucHV0IHRvIFNDQVJUIDEgT3V0cHV0IChmb3IgZGV2aWNlcyB3aXRoIDIgU0NBUlRTKQorICogICAgICAgMSAgMCAgMCAtIE1PTk8gaW5wdXQgdG8gU0NBUlQgMSBPdXRwdXQKKyAqICAgICAgIDEgIDEgIDAgLSBTQ0FSVCAxIERBIHRvIFNDQVJUIDEgT3V0cHV0CisgKiAgICAgICAwICAwICAxIC0gU0NBUlQgMiBEQSB0byBTQ0FSVCAxIE91dHB1dAorICogICAgICAgMCAgMSAgMSAtIFNDQVJUIDEgSW5wdXQgdG8gU0NBUlQgMSBPdXRwdXQKKyAqICAgICAgIDEgIDEgIDEgLSBNdXRlIFNDQVJUIDEgT3V0cHV0CisgKgorICogYml0cyAxMyAxMiAgNyAtIFNDQVJUIDIgT3V0cHV0IFNlbGVjdCAoZm9yIGRldmljZXMgd2l0aCAyIE91dHB1dCBTQ0FSVCk6CisgKiAgICAgICAwICAwICAwIC0gU0NBUlQgMSBEQSB0byBTQ0FSVCAyIE91dHB1dCAocmVzZXQgcG9zaXRpb24pCisgKiAgICAgICAwICAxICAwIC0gU0NBUlQgMSBJbnB1dCB0byBTQ0FSVCAyIE91dHB1dAorICogICAgICAgMSAgMCAgMCAtIE1PTk8gaW5wdXQgdG8gU0NBUlQgMiBPdXRwdXQKKyAqICAgICAgIDAgIDAgIDEgLSBTQ0FSVCAyIERBIHRvIFNDQVJUIDIgT3V0cHV0CisgKiAgICAgICAwICAxICAxIC0gU0NBUlQgMiBJbnB1dCB0byBTQ0FSVCAyIE91dHB1dAorICogICAgICAgMSAgMSAgMCAtIE11dGUgU0NBUlQgMiBPdXRwdXQKKyAqCisgKiBCaXRzIDQgdG8gMCBzaG91bGQgYmUgemVyby4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBpbnQgc2NhcnRzWzNdWzldID0gewotICAvKiBNQVNLICAgIElOMSAgICAgSU4yICAgICBJTjFfREEgIElOMl9EQSAgSU4zICAgICBJTjQgICAgIE1PTk8gICAgTVVURSAgICovCi0gIHsgIDB4MDMyMCwgMHgwMDAwLCAweDAyMDAsIC0xLCAgICAgLTEsICAgICAweDAzMDAsIDB4MDAyMCwgMHgwMTAwLCAweDAzMjAgfSwKLSAgeyAgMHgwYzQwLCAweDA0NDAsIDB4MDQwMCwgMHgwYzAwLCAweDAwNDAsIDB4MDAwMCwgMHgwODQwLCAweDA4MDAsIDB4MGM0MCB9LAotICB7ICAweDMwODAsIDB4MTAwMCwgMHgxMDgwLCAweDAwMDAsIDB4MDA4MCwgMHgyMDgwLCAweDMwODAsIDB4MjAwMCwgMHgzMDAwIH0sCisJLyogTUFTSyAgICBJTjEgICAgIElOMiAgICAgSU4xX0RBICBJTjJfREEgIElOMyAgICAgSU40ICAgICBNT05PICAgIE1VVEUgICAqLworCS8qIFNDQVJUIERTUCBJbnB1dCBzZWxlY3QgKi8KKwl7IDB4MDMyMCwgMHgwMDAwLCAweDAyMDAsIC0xLCAgICAgLTEsICAgICAweDAzMDAsIDB4MDAyMCwgMHgwMTAwLCAweDAzMjAgfSwKKwkvKiBTQ0FSVDEgT3V0cHV0IHNlbGVjdCAqLworCXsgMHgwYzQwLCAweDA0NDAsIDB4MDQwMCwgMHgwYzAwLCAweDAwNDAsIDB4MDAwMCwgMHgwODQwLCAweDA4MDAsIDB4MGM0MCB9LAorCS8qIFNDQVJUMiBPdXRwdXQgc2VsZWN0ICovCisJeyAweDMwODAsIDB4MTAwMCwgMHgxMDgwLCAweDAwMDAsIDB4MDA4MCwgMHgyMDgwLCAweDMwODAsIDB4MjAwMCwgMHgzMDAwIH0sCiB9OwogCiBzdGF0aWMgY2hhciAqc2NhcnRfbmFtZXNbXSA9IHsKLSAgIm1hc2siLCAiaW4xIiwgImluMiIsICJpbjEgZGEiLCAiaW4yIGRhIiwgImluMyIsICJpbjQiLCAibW9ubyIsICJtdXRlIgorCSJtYXNrIiwgImluMSIsICJpbjIiLCAiaW4xIGRhIiwgImluMiBkYSIsICJpbjMiLCAiaW40IiwgIm1vbm8iLCAibXV0ZSIKIH07CiAKLXN0YXRpYyB2b2lkCi1tc3AzNDAwY19zZXRfc2NhcnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGluLCBpbnQgb3V0KQorc3RhdGljIHZvaWQgbXNwMzQwMGNfc2V0X3NjYXJ0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBpbiwgaW50IG91dCkKIHsKIAlzdHJ1Y3QgbXNwMzQwMGMgKm1zcCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCi0JaWYgKC0xID09IHNjYXJ0c1tvdXRdW2luXSkKLQkJcmV0dXJuOworCW1zcC0+aW5fc2NhcnQ9aW47CiAKLQlkcHJpbnRrKEtFUk5fREVCVUcKLQkJIm1zcDM0eHg6IHNjYXJ0IHN3aXRjaDogJXMgPT4gJWRcbiIsc2NhcnRfbmFtZXNbaW5dLG91dCk7Ci0JbXNwLT5hY2IgJj0gfnNjYXJ0c1tvdXRdW1NDQVJUX01BU0tdOwotCW1zcC0+YWNiIHw9ICBzY2FydHNbb3V0XVtpbl07Ci0JbXNwMzQwMGNfd3JpdGUoY2xpZW50LEkyQ19NU1AzNDAwQ19ERlAsIDB4MDAxMywgbXNwLT5hY2IpOworCWlmIChpbiA+PSAxICYmIGluIDw9IDggJiYgb3V0ID49IDAgJiYgb3V0IDw9IDIpIHsKKwkJaWYgKC0xID09IHNjYXJ0c1tvdXRdW2luXSkKKwkJCXJldHVybjsKKworCQltc3AtPmFjYiAmPSB+c2NhcnRzW291dF1bU0NBUlRfTUFTS107CisJCW1zcC0+YWNiIHw9ICBzY2FydHNbb3V0XVtpbl07CisJfSBlbHNlCisJCW1zcC0+YWNiID0gMHhmNjA7IC8qIE11dGUgSW5wdXQgYW5kIFNDQVJUIDEgT3V0cHV0ICovCisKKwltc3AzNDAwX2RiZygic2NhcnQgc3dpdGNoOiAlcyA9PiAlZCAoQUNCPTB4JTA0eClcbiIsCisJCQkJCQlzY2FydF9uYW1lc1tpbl0sIG91dCwgbXNwLT5hY2IpOworCW1zcDM0MDBjX3dyaXRlKGNsaWVudCxJMkNfTVNQMzQwMENfREZQLCAweDEzLCBtc3AtPmFjYik7CisKKwkvKiBTZXRzIEkyUyBzcGVlZCAwID0gMS4wMjQgTWJwcywgMSA9IDIuMDQ4IE1icHMgKi8KKwltc3AzNDAwY193cml0ZShjbGllbnQsSTJDX01TUDM0MDBDX0RFTSwgMHg0MCwgbXNwLT5pMnNfbW9kZSk7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMzc4LDMzICs0NjUsMzQgQEAKIH0KIAogc3RhdGljIHZvaWQgbXNwMzQwMGNfc2V0dm9sdW1lKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCQkgICAgICAgaW50IG11dGVkLCBpbnQgdm9sdW1lLCBpbnQgYmFsYW5jZSkKLXsKLQlpbnQgdmFsID0gMCwgYmFsID0gMDsKKwkJCSAgICAgICBpbnQgbXV0ZWQsIGludCBsZWZ0LCBpbnQgcmlnaHQpCisgeworCWludCB2b2wgPSAwLCB2YWwgPSAwLCBiYWxhbmNlID0gMDsKIAogCWlmICghbXV0ZWQpIHsKIAkJLyogMHg3ZiBpbnN0ZWFkIGlmIDB4NzMgaGVyZSBoYXMgc291bmQgcXVhbGl0eSBpc3N1ZXMsCiAJCSAqIHByb2JhYmx5IGR1ZSB0byBvdmVybW9kdWxhdGlvbiArIGNsaXBwaW5nIC4uLiAqLwotCQl2YWwgPSAodm9sdW1lICogMHg3MyAvIDY1NTM1KSA8PCA4OworCQl2b2wgPSAobGVmdCA+IHJpZ2h0KSA/IGxlZnQgOiByaWdodDsKKwkJdmFsID0gKHZvbCAqIDB4NzMgLyA2NTUzNSkgPDwgODsKIAl9Ci0JaWYgKHZhbCkgewotCQliYWwgPSAoYmFsYW5jZSAvIDI1NikgLSAxMjg7CisJaWYgKHZvbCA+IDApIHsKKwkJYmFsYW5jZSA9ICgocmlnaHQgLSBsZWZ0KSAqIDEyNykgLyB2b2w7CiAJfQotCWRwcmludGsoS0VSTl9ERUJVRwotCQkibXNwMzR4eDogc2V0dm9sdW1lOiBtdXRlPSVzICVkOiVkICB2PTB4JTAyeCBiPTB4JTAyeFxuIiwKLQkJbXV0ZWQgPyAib24iIDogIm9mZiIsIHZvbHVtZSwgYmFsYW5jZSwgdmFsPj44LCBiYWwpOworCisJbXNwMzQwMF9kYmcoInNldHZvbHVtZTogbXV0ZT0lcyAlZDolZCAgdj0weCUwMnggYj0weCUwMnhcbiIsCisJCW11dGVkID8gIm9uIiA6ICJvZmYiLCBsZWZ0LCByaWdodCwgdmFsID4+IDgsIGJhbGFuY2UpOwogCW1zcDM0MDBjX3dyaXRlKGNsaWVudCxJMkNfTVNQMzQwMENfREZQLCAweDAwMDAsIHZhbCk7IC8qIGxvdWRzcGVha2VyICovCiAJbXNwMzQwMGNfd3JpdGUoY2xpZW50LEkyQ19NU1AzNDAwQ19ERlAsIDB4MDAwNiwgdmFsKTsgLyogaGVhZHBob25lcyAgKi8KIAltc3AzNDAwY193cml0ZShjbGllbnQsSTJDX01TUDM0MDBDX0RGUCwgMHgwMDA3LAotCQkgICAgICAgbXV0ZWQgPyAweDAxIDogKHZhbCB8IDB4MDEpKTsKLQltc3AzNDAwY193cml0ZShjbGllbnQsSTJDX01TUDM0MDBDX0RGUCwgMHgwMDAxLCBiYWwgPDwgOCk7CisJCQkJCW11dGVkID8gMHgxIDogKHZhbCB8IDB4MSkpOworCW1zcDM0MDBjX3dyaXRlKGNsaWVudCwgSTJDX01TUDM0MDBDX0RGUCwgMHgwMDAxLCBiYWxhbmNlIDw8IDgpOwogfQogCiBzdGF0aWMgdm9pZCBtc3AzNDAwY19zZXRiYXNzKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBiYXNzKQogewogCWludCB2YWwgPSAoKGJhc3MtMzI3NjgpICogMHg2MCAvIDY1NTM1KSA8PCA4OwogCi0JZHByaW50ayhLRVJOX0RFQlVHICJtc3AzNHh4OiBzZXRiYXNzOiAlZCAweCUwMnhcbiIsYmFzcywgdmFsPj44KTsKKwltc3AzNDAwX2RiZygic2V0YmFzczogJWQgMHglMDJ4XG4iLCBiYXNzLCB2YWwgPj4gOCk7CiAJbXNwMzQwMGNfd3JpdGUoY2xpZW50LEkyQ19NU1AzNDAwQ19ERlAsIDB4MDAwMiwgdmFsKTsgLyogbG91ZHNwZWFrZXIgKi8KIH0KIApAQCAtNDEyLDcgKzUwMCw3IEBACiB7CiAJaW50IHZhbCA9ICgodHJlYmxlLTMyNzY4KSAqIDB4NjAgLyA2NTUzNSkgPDwgODsKIAotCWRwcmludGsoS0VSTl9ERUJVRyAibXNwMzR4eDogc2V0dHJlYmxlOiAlZCAweCUwMnhcbiIsdHJlYmxlLCB2YWw+PjgpOworCW1zcDM0MDBfZGJnKCJzZXR0cmVibGU6ICVkIDB4JTAyeFxuIix0cmVibGUsIHZhbD4+OCk7CiAJbXNwMzQwMGNfd3JpdGUoY2xpZW50LEkyQ19NU1AzNDAwQ19ERlAsIDB4MDAwMywgdmFsKTsgLyogbG91ZHNwZWFrZXIgKi8KIH0KIApAQCAtNDIxLDcgKzUwOSw3IEBACiAJc3RydWN0IG1zcDM0MDBjICptc3AgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlpbnQgaTsKIAotCWRwcmludGsoS0VSTl9ERUJVRyAibXNwMzQwMDogc2V0bW9kZTogJWRcbiIsdHlwZSk7CisJbXNwMzQwMF9kYmcoInNldG1vZGU6ICVkXG4iLHR5cGUpOwogCW1zcC0+bW9kZSAgICAgICA9IHR5cGU7CiAJbXNwLT5hdWRtb2RlICAgID0gVjRMMl9UVU5FUl9NT0RFX01PTk87CiAJbXNwLT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfTU9OTzsKQEAgLTQ3NCw3ICs1NjIsOCBAQAogCX0KIH0KIAotc3RhdGljIGludCBiZXN0X2F1ZGlvX21vZGUoaW50IHJ4c3ViY2hhbnMpCisvKiBnaXZlbiBhIGJpdG1hc2sgb2YgVklERU9fU09VTkRfWFhYIHJldHVybnMgdGhlICJiZXN0IiBpbiB0aGUgYml0bWFzayAqLworc3RhdGljIGludCBiZXN0X3ZpZGVvX3NvdW5kKGludCByeHN1YmNoYW5zKQogewogCWlmIChyeHN1YmNoYW5zICYgVjRMMl9UVU5FUl9TVUJfU1RFUkVPKQogCQlyZXR1cm4gVjRMMl9UVU5FUl9NT0RFX1NURVJFTzsKQEAgLTQ4NiwzMSArNTc1LDMxIEBACiB9CiAKIC8qIHR1cm4gb24vb2ZmIG5pY2FtICsgc3RlcmVvICovCi1zdGF0aWMgdm9pZCBtc3AzNDAwY19zZXRfYXVkbW9kZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgYXVkbW9kZSkKK3N0YXRpYyB2b2lkIG1zcDM0MDBjX3NldHN0ZXJlbyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgbW9kZSkKIHsKLQlzdGF0aWMgY2hhciAqc3RybW9kZVsxNl0gPSB7Ci0jaWYgX19HTlVDX18gPj0gMwotCQlbIDAgLi4uIDE1IF0gICAgICAgICAgICAgICA9ICJpbnZhbGlkIiwKLSNlbmRpZgotCQlbIFY0TDJfVFVORVJfTU9ERV9NT05PICAgXSA9ICJtb25vIiwKLQkJWyBWNEwyX1RVTkVSX01PREVfU1RFUkVPIF0gPSAic3RlcmVvIiwKLQkJWyBWNEwyX1RVTkVSX01PREVfTEFORzEgIF0gPSAibGFuZzEiLAotCQlbIFY0TDJfVFVORVJfTU9ERV9MQU5HMiAgXSA9ICJsYW5nMiIsCisJc3RhdGljIGNoYXIgKnN0cm1vZGVbXSA9IHsgIjAiLCAibW9ubyIsICJzdGVyZW8iLCAiMyIsCisJCSJsYW5nMSIsICI1IiwgIjYiLCAiNyIsICJsYW5nMiIKIAl9OwogCXN0cnVjdCBtc3AzNDAwYyAqbXNwID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JaW50IG5pY2FtPTA7IC8qIGNoYW5uZWwgc291cmNlOiBGTS9BTSBvciBuaWNhbSAqLwotCWludCBzcmM9MDsKKwlpbnQgbmljYW0gPSAwOwkJLyogY2hhbm5lbCBzb3VyY2U6IEZNL0FNIG9yIG5pY2FtICovCisJaW50IHNyYyA9IDA7CiAKLQlCVUdfT04obXNwLT5vcG1vZGUgPT0gT1BNT0RFX1NJTVBMRVIpOwotCW1zcC0+YXVkbW9kZSA9IGF1ZG1vZGU7CisJaWYgKElTX01TUDM0WFhfRyhtc3ApKSB7CisJCS8qIHRoaXMgbWV0aG9kIHdvdWxkIGJyZWFrIGV2ZXJ5dGhpbmcsIGxldCdzIG1ha2Ugc3VyZQorCQkgKiBpdCdzIG5ldmVyIGNhbGxlZAorCQkgKi8KKwkJbXNwMzQwMF9kYmcKKwkJICAgICgiREVCVUcgV0FSTklORyBzZXRzdGVyZW8gY2FsbGVkIHdpdGggbW9kZT0lZCBpbnN0ZWFkIG9mIHNldF9zb3VyY2UgKGlnbm9yZWQpXG4iLAorCQkgICAgIG1vZGUpOworCQlyZXR1cm47CisJfQogCiAJLyogc3dpdGNoIGRlbW9kdWxhdG9yICovCiAJc3dpdGNoIChtc3AtPm1vZGUpIHsKIAljYXNlIE1TUF9NT0RFX0ZNX1RFUlJBOgotCQlkcHJpbnRrKEtFUk5fREVCVUcgIm1zcDM0MDA6IEZNIHNldHN0ZXJlbzogJXNcbiIsCi0JCQlzdHJtb2RlW2F1ZG1vZGVdKTsKKwkJbXNwMzQwMF9kYmcoIkZNIHNldHN0ZXJlbzogJXNcbiIsIHN0cm1vZGVbbW9kZV0pOwogCQltc3AzNDAwY19zZXRjYXJyaWVyKGNsaWVudCxtc3AtPnNlY29uZCxtc3AtPm1haW4pOwotCQlzd2l0Y2ggKGF1ZG1vZGUpIHsKKwkJc3dpdGNoIChtb2RlKSB7CiAJCWNhc2UgVjRMMl9UVU5FUl9NT0RFX1NURVJFTzoKIAkJCW1zcDM0MDBjX3dyaXRlKGNsaWVudCxJMkNfTVNQMzQwMENfREZQLCAweDAwMGUsIDB4MzAwMSk7CiAJCQlicmVhazsKQEAgLTUyMiw5ICs2MTEsOCBAQAogCQl9CiAJCWJyZWFrOwogCWNhc2UgTVNQX01PREVfRk1fU0FUOgotCQlkcHJpbnRrKEtFUk5fREVCVUcgIm1zcDM0MDA6IFNBVCBzZXRzdGVyZW86ICVzXG4iLAotCQkJc3RybW9kZVthdWRtb2RlXSk7Ci0JCXN3aXRjaCAoYXVkbW9kZSkgeworCQltc3AzNDAwX2RiZygiU0FUIHNldHN0ZXJlbzogJXNcbiIsIHN0cm1vZGVbbW9kZV0pOworCQlzd2l0Y2ggKG1vZGUpIHsKIAkJY2FzZSBWNEwyX1RVTkVSX01PREVfTU9OTzoKIAkJCW1zcDM0MDBjX3NldGNhcnJpZXIoY2xpZW50LCBNU1BfQ0FSUklFUig2LjUpLCBNU1BfQ0FSUklFUig2LjUpKTsKIAkJCWJyZWFrOwpAQCAtNTQyLDM5ICs2MzAsMzUgQEAKIAljYXNlIE1TUF9NT0RFX0ZNX05JQ0FNMToKIAljYXNlIE1TUF9NT0RFX0ZNX05JQ0FNMjoKIAljYXNlIE1TUF9NT0RFX0FNX05JQ0FNOgotCQlkcHJpbnRrKEtFUk5fREVCVUcgIm1zcDM0MDA6IE5JQ0FNIHNldHN0ZXJlbzogJXNcbiIsCi0JCQlzdHJtb2RlW2F1ZG1vZGVdKTsKKwkJbXNwMzQwMF9kYmcoIk5JQ0FNIHNldHN0ZXJlbzogJXNcbiIsc3RybW9kZVttb2RlXSk7CiAJCW1zcDM0MDBjX3NldGNhcnJpZXIoY2xpZW50LG1zcC0+c2Vjb25kLG1zcC0+bWFpbik7CiAJCWlmIChtc3AtPm5pY2FtX29uKQogCQkJbmljYW09MHgwMTAwOwogCQlicmVhazsKIAljYXNlIE1TUF9NT0RFX0JUU0M6Ci0JCWRwcmludGsoS0VSTl9ERUJVRyAibXNwMzQwMDogQlRTQyBzZXRzdGVyZW86ICVzXG4iLAotCQkJc3RybW9kZVthdWRtb2RlXSk7CisJCW1zcDM0MDBfZGJnKCJCVFNDIHNldHN0ZXJlbzogJXNcbiIsc3RybW9kZVttb2RlXSk7CiAJCW5pY2FtPTB4MDMwMDsKIAkJYnJlYWs7CiAJY2FzZSBNU1BfTU9ERV9FWFRFUk46Ci0JCWRwcmludGsoS0VSTl9ERUJVRyAibXNwMzQwMDogZXh0ZXJuIHNldHN0ZXJlbzogJXNcbiIsCi0JCQlzdHJtb2RlW2F1ZG1vZGVdKTsKKwkJbXNwMzQwMF9kYmcoImV4dGVybiBzZXRzdGVyZW86ICVzXG4iLHN0cm1vZGVbbW9kZV0pOwogCQluaWNhbSA9IDB4MDIwMDsKIAkJYnJlYWs7CiAJY2FzZSBNU1BfTU9ERV9GTV9SQURJTzoKLQkJZHByaW50ayhLRVJOX0RFQlVHICJtc3AzNDAwOiBGTS1SYWRpbyBzZXRzdGVyZW86ICVzXG4iLAotCQkJc3RybW9kZVthdWRtb2RlXSk7CisJCW1zcDM0MDBfZGJnKCJGTS1SYWRpbyBzZXRzdGVyZW86ICVzXG4iLHN0cm1vZGVbbW9kZV0pOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlkcHJpbnRrKEtFUk5fREVCVUcgIm1zcDM0MDA6IG1vbm8gc2V0c3RlcmVvXG4iKTsKKwkJbXNwMzQwMF9kYmcoIm1vbm8gc2V0c3RlcmVvXG4iKTsKIAkJcmV0dXJuOwogCX0KIAogCS8qIHN3aXRjaCBhdWRpbyAqLwotCXN3aXRjaCAoYXVkbW9kZSkgeworCXN3aXRjaCAoYmVzdF92aWRlb19zb3VuZChtb2RlKSkgewogCWNhc2UgVjRMMl9UVU5FUl9NT0RFX1NURVJFTzoKIAkJc3JjID0gMHgwMDIwIHwgbmljYW07CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9UVU5FUl9NT0RFX01PTk86CiAJCWlmIChtc3AtPm1vZGUgPT0gTVNQX01PREVfQU1fTklDQU0pIHsKLQkJCWRwcmludGsoIm1zcDM0MDA6IHN3aXRjaGluZyB0byBBTSBtb25vXG4iKTsKKwkJCW1zcDM0MDBfZGJnKCJzd2l0Y2hpbmcgdG8gQU0gbW9ub1xuIik7CiAJCQkvKiBBTSBtb25vIGRlY29kaW5nIGlzIGhhbmRsZWQgYnkgdHVuZXIsIG5vdCBNU1AgY2hpcCAqLwogCQkJLyogU0NBUlQgc3dpdGNoaW5nIGNvbnRyb2wgcmVnaXN0ZXIgKi8KIAkJCW1zcDM0MDBjX3NldF9zY2FydChjbGllbnQsU0NBUlRfTU9OTywwKTsKQEAgLTU4OCw4ICs2NzIsNyBAQAogCQlzcmMgPSAweDAwMTAgfCBuaWNhbTsKIAkJYnJlYWs7CiAJfQotCWRwcmludGsoS0VSTl9ERUJVRwotCQkibXNwMzQwMDogc2V0c3RlcmVvIGZpbmFsIHNvdXJjZS9tYXRyaXggPSAweCV4XG4iLCBzcmMpOworCW1zcDM0MDBfZGJnKCJzZXRzdGVyZW8gZmluYWwgc291cmNlL21hdHJpeCA9IDB4JXhcbiIsIHNyYyk7CiAKIAlpZiAoZG9sYnkpIHsKIAkJbXNwMzQwMGNfd3JpdGUoY2xpZW50LEkyQ19NU1AzNDAwQ19ERlAsIDB4MDAwOCwweDA1MjApOwpAQCAtNjA1LDI5ICs2ODgsNTUgQEAKIH0KIAogc3RhdGljIHZvaWQKLW1zcDM0MDBjX3ByaW50X21vZGUoc3RydWN0IG1zcDM0MDBjICptc3ApCittc3AzNDAwY19wcmludF9tb2RlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7CisJc3RydWN0IG1zcDM0MDBjICptc3AgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwogCWlmIChtc3AtPm1haW4gPT0gbXNwLT5zZWNvbmQpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIm1zcDM0MDA6IG1vbm8gc291bmQgY2FycmllcjogJWQuJTAzZCBNSHpcbiIsCisJCW1zcDM0MDBfZGJnKCJtb25vIHNvdW5kIGNhcnJpZXI6ICVkLiUwM2QgTUh6XG4iLAogCQkgICAgICAgbXNwLT5tYWluLzkxMDAwMCwobXNwLT5tYWluLzkxMCklMTAwMCk7CiAJfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIm1zcDM0MDA6IG1haW4gc291bmQgY2FycmllcjogJWQuJTAzZCBNSHpcbiIsCisJCW1zcDM0MDBfZGJnKCJtYWluIHNvdW5kIGNhcnJpZXI6ICVkLiUwM2QgTUh6XG4iLAogCQkgICAgICAgbXNwLT5tYWluLzkxMDAwMCwobXNwLT5tYWluLzkxMCklMTAwMCk7CiAJfQotCWlmIChtc3AtPm1vZGUgPT0gTVNQX01PREVfRk1fTklDQU0xIHx8Ci0JICAgIG1zcC0+bW9kZSA9PSBNU1BfTU9ERV9GTV9OSUNBTTIpCi0JCXByaW50ayhLRVJOX0RFQlVHICJtc3AzNDAwOiBOSUNBTS9GTSBjYXJyaWVyICAgOiAlZC4lMDNkIE1IelxuIiwKKwlpZiAobXNwLT5tb2RlID09IE1TUF9NT0RFX0ZNX05JQ0FNMSB8fCBtc3AtPm1vZGUgPT0gTVNQX01PREVfRk1fTklDQU0yKQorCQltc3AzNDAwX2RiZygiTklDQU0vRk0gY2FycmllciAgIDogJWQuJTAzZCBNSHpcbiIsCiAJCSAgICAgICBtc3AtPnNlY29uZC85MTAwMDAsKG1zcC0+c2Vjb25kLzkxMCklMTAwMCk7CiAJaWYgKG1zcC0+bW9kZSA9PSBNU1BfTU9ERV9BTV9OSUNBTSkKLQkJcHJpbnRrKEtFUk5fREVCVUcgIm1zcDM0MDA6IE5JQ0FNL0FNIGNhcnJpZXIgICA6ICVkLiUwM2QgTUh6XG4iLAorCQltc3AzNDAwX2RiZygiTklDQU0vQU0gY2FycmllciAgIDogJWQuJTAzZCBNSHpcbiIsCiAJCSAgICAgICBtc3AtPnNlY29uZC85MTAwMDAsKG1zcC0+c2Vjb25kLzkxMCklMTAwMCk7CiAJaWYgKG1zcC0+bW9kZSA9PSBNU1BfTU9ERV9GTV9URVJSQSAmJgogCSAgICBtc3AtPm1haW4gIT0gbXNwLT5zZWNvbmQpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIm1zcDM0MDA6IEZNLXN0ZXJlbyBjYXJyaWVyIDogJWQuJTAzZCBNSHpcbiIsCisJCW1zcDM0MDBfZGJnKCJGTS1zdGVyZW8gY2FycmllciA6ICVkLiUwM2QgTUh6XG4iLAogCQkgICAgICAgbXNwLT5zZWNvbmQvOTEwMDAwLChtc3AtPnNlY29uZC85MTApJTEwMDApOwogCX0KIH0KIAorI2RlZmluZSBNU1AzNDAwX01BWCA0CitzdGF0aWMgc3RydWN0IGkyY19jbGllbnQgKm1zcHNbTVNQMzQwMF9NQVhdOworc3RhdGljIHZvaWQgbXNwMzQwMGNfcmVzdG9yZV9kZnAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgbXNwMzQwMGMgKm1zcCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IERGUF9DT1VOVDsgaSsrKSB7CisJCWlmICgtMSA9PSBtc3AtPmRmcF9yZWdzW2ldKQorCQkJY29udGludWU7CisJCW1zcDM0MDBjX3dyaXRlKGNsaWVudCwgSTJDX01TUDM0MDBDX0RGUCwgaSwgbXNwLT5kZnBfcmVnc1tpXSk7CisJfQorfQorCisvKiBpZiB0aGUgZGZwX3JlZ3MgaXMgc2V0LCBzZXQgd2hhdCdzIGluIHRoZXJlLiBPdGhlcndpc2UsIHNldCB0aGUgZGVmYXVsdCB2YWx1ZSAqLworc3RhdGljIGludCBtc3AzNDAwY193cml0ZV9kZnBfd2l0aF9kZWZhdWx0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkJCWludCBhZGRyLCBpbnQgZGVmYXVsdF92YWx1ZSkKK3sKKwlzdHJ1Y3QgbXNwMzQwMGMgKm1zcCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCWludCB2YWx1ZSA9IGRlZmF1bHRfdmFsdWU7CisJaWYgKGFkZHIgPCBERlBfQ09VTlQgJiYgLTEgIT0gbXNwLT5kZnBfcmVnc1thZGRyXSkKKwkJdmFsdWUgPSBtc3AtPmRmcF9yZWdzW2FkZHJdOworCXJldHVybiBtc3AzNDAwY193cml0ZShjbGllbnQsIEkyQ19NU1AzNDAwQ19ERlAsIGFkZHIsIHZhbHVlKTsKK30KKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RydWN0IFJFR0lTVEVSX0RVTVAgewpAQCAtNjM1LDggKzc0NCwxNSBAQAogCWNoYXIgKm5hbWU7CiB9OwogCi1zdGF0aWMgaW50Ci1hdXRvZGV0ZWN0X3N0ZXJlbyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RydWN0IFJFR0lTVEVSX0RVTVAgZDFbXSA9IHsKKwl7MHgwMDdlLCAiYXV0b2RldGVjdCJ9LAorCXsweDAwMjMsICJDX0FEX0JJVFMgIn0sCisJezB4MDAzOCwgIkFERF9CSVRTICAifSwKKwl7MHgwMDNlLCAiQ0lCX0JJVFMgICJ9LAorCXsweDAwNTcsICJFUlJPUl9SQVRFIn0sCit9OworCitzdGF0aWMgaW50IGF1dG9kZXRlY3Rfc3RlcmVvKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7CiAJc3RydWN0IG1zcDM0MDBjICptc3AgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlpbnQgdmFsOwpAQCAtNjQ5LDggKzc2NSw3IEBACiAJCXZhbCA9IG1zcDM0MDBjX3JlYWQoY2xpZW50LCBJMkNfTVNQMzQwMENfREZQLCAweDE4KTsKIAkJaWYgKHZhbCA+IDMyNzY3KQogCQkJdmFsIC09IDY1NTM2OwotCQlkcHJpbnRrKEtFUk5fREVCVUcKLQkJCSJtc3AzNHh4OiBzdGVyZW8gZGV0ZWN0IHJlZ2lzdGVyOiAlZFxuIix2YWwpOworCQltc3AzNDAwX2RiZygic3RlcmVvIGRldGVjdCByZWdpc3RlcjogJWRcbiIsdmFsKTsKIAkJaWYgKHZhbCA+IDQwOTYpIHsKIAkJCXJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9TVEVSRU8gfCBWNEwyX1RVTkVSX1NVQl9NT05POwogCQl9IGVsc2UgaWYgKHZhbCA8IC00MDk2KSB7CkBAIC02NjQsOCArNzc5LDcgQEAKIAljYXNlIE1TUF9NT0RFX0ZNX05JQ0FNMjoKIAljYXNlIE1TUF9NT0RFX0FNX05JQ0FNOgogCQl2YWwgPSBtc3AzNDAwY19yZWFkKGNsaWVudCwgSTJDX01TUDM0MDBDX0RFTSwgMHgyMyk7Ci0JCWRwcmludGsoS0VSTl9ERUJVRwotCQkJIm1zcDM0eHg6IG5pY2FtIHN5bmM9JWQsIG1vZGU9JWRcbiIsCisJCW1zcDM0MDBfZGJnKCJuaWNhbSBzeW5jPSVkLCBtb2RlPSVkXG4iLAogCQkJdmFsICYgMSwgKHZhbCAmIDB4MWUpID4+IDEpOwogCiAJCWlmICh2YWwgJiAxKSB7CkBAIC02OTgsOCArODEyLDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBNU1BfTU9ERV9CVFNDOgogCQl2YWwgPSBtc3AzNDAwY19yZWFkKGNsaWVudCwgSTJDX01TUDM0MDBDX0RFTSwgMHgyMDApOwotCQlkcHJpbnRrKEtFUk5fREVCVUcKLQkJCSJtc3AzNDEwOiBzdGF0dXM9MHgleCAocHJpPSVzLCBzZWM9JXMsICVzJXMlcylcbiIsCisJCW1zcDM0MDBfZGJnKCJzdGF0dXM9MHgleCAocHJpPSVzLCBzZWM9JXMsICVzJXMlcylcbiIsCiAJCQl2YWwsCiAJCQkodmFsICYgMHgwMDAyKSA/ICJubyIgICAgIDogInllcyIsCiAJCQkodmFsICYgMHgwMDA0KSA/ICJubyIgICAgIDogInllcyIsCkBAIC03MTMsMTMgKzgyNiwxMyBAQAogCX0KIAlpZiAocnhzdWJjaGFucyAhPSBtc3AtPnJ4c3ViY2hhbnMpIHsKIAkJdXBkYXRlID0gMTsKLQkJZHByaW50ayhLRVJOX0RFQlVHICJtc3AzNHh4OiB3YXRjaDogcnhzdWJjaGFucyAlZCA9PiAlZFxuIiwKKwkJbXNwMzQwMF9kYmcoIndhdGNoOiByeHN1YmNoYW5zICVkID0+ICVkXG4iLAogCQkJbXNwLT5yeHN1YmNoYW5zLHJ4c3ViY2hhbnMpOwogCQltc3AtPnJ4c3ViY2hhbnMgPSByeHN1YmNoYW5zOwogCX0KIAlpZiAobmV3bmljYW0gIT0gbXNwLT5uaWNhbV9vbikgewogCQl1cGRhdGUgPSAxOwotCQlkcHJpbnRrKEtFUk5fREVCVUcgIm1zcDM0eHg6IHdhdGNoOiBuaWNhbSAlZCA9PiAlZFxuIiwKKwkJbXNwMzQwMF9kYmcoIndhdGNoOiBuaWNhbSAlZCA9PiAlZFxuIiwKIAkJCW1zcC0+bmljYW1fb24sbmV3bmljYW0pOwogCQltc3AtPm5pY2FtX29uID0gbmV3bmljYW07CiAJfQpAQCAtNzU2LDggKzg2OSwxNSBAQAogewogCXN0cnVjdCBtc3AzNDAwYyAqbXNwID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKLQlpZiAoYXV0b2RldGVjdF9zdGVyZW8oY2xpZW50KSkKLQkJbXNwMzQwMGNfc2V0X2F1ZG1vZGUoY2xpZW50LGJlc3RfYXVkaW9fbW9kZShtc3AtPnJ4c3ViY2hhbnMpKTsKKwlpZiAoYXV0b2RldGVjdF9zdGVyZW8oY2xpZW50KSkgeworCQlpZiAobXNwLT5zdGVyZW8gJiBWNEwyX1RVTkVSX01PREVfU1RFUkVPKQorCQkJbXNwMzQwMGNfc2V0c3RlcmVvKGNsaWVudCwgVjRMMl9UVU5FUl9NT0RFX1NURVJFTyk7CisJCWVsc2UgaWYgKG1zcC0+c3RlcmVvICYgVklERU9fU09VTkRfTEFORzEpCisJCQltc3AzNDAwY19zZXRzdGVyZW8oY2xpZW50LCBWNEwyX1RVTkVSX01PREVfTEFORzEpOworCQllbHNlCisJCQltc3AzNDAwY19zZXRzdGVyZW8oY2xpZW50LCBWNEwyX1RVTkVSX01PREVfTU9OTyk7CisJfQorCiAJaWYgKG9uY2UpCiAJCW1zcC0+d2F0Y2hfc3RlcmVvID0gMDsKIH0KQEAgLTc2OSwxNCArODg5LDE0IEBACiAJc3RydWN0IENBUlJJRVJfREVURUNUICpjZDsKIAlpbnQgY291bnQsIG1heDEsbWF4Mix2YWwxLHZhbDIsIHZhbCx0aGlzOwogCi0JcHJpbnRrKCJtc3AzNDAwOiBrdGhyZWFkIHN0YXJ0ZWRcbiIpOworCW1zcDM0MDBfaW5mbygibXNwMzQwMCBkYWVtb24gc3RhcnRlZFxuIik7CiAJZm9yICg7OykgewotCQlkMnByaW50aygibXNwMzQwMDogdGhyZWFkOiBzbGVlcFxuIik7CisJCW1zcDM0MDBfZGJnX21lZGl1bXZvbCgibXNwMzQwMCB0aHJlYWQ6IHNsZWVwXG4iKTsKIAkJbXNwMzR4eF9zbGVlcChtc3AsLTEpOwotCQlkMnByaW50aygibXNwMzQwMDogdGhyZWFkOiB3YWtldXBcbiIpOworCQltc3AzNDAwX2RiZ19tZWRpdW12b2woIm1zcDM0MDAgdGhyZWFkOiB3YWtldXBcbiIpOwogCiAJcmVzdGFydDoKLQkJZHByaW50aygibXNwMzQxMDogdGhyZWFkOiByZXN0YXJ0IHNjYW5cbiIpOworCQltc3AzNDAwX2RiZygidGhyZWFkOiByZXN0YXJ0IHNjYW5cbiIpOwogCQltc3AtPnJlc3RhcnQgPSAwOwogCQlpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpKQogCQkJYnJlYWs7CkBAIC03ODQsOSArOTA0LDggQEAKIAkJaWYgKFZJREVPX01PREVfUkFESU8gPT0gbXNwLT5ub3JtIHx8CiAJCSAgICBNU1BfTU9ERV9FWFRFUk4gID09IG1zcC0+bW9kZSkgewogCQkJLyogbm8gY2FycmllciBzY2FuLCBqdXN0IHVubXV0ZSAqLwotCQkJcHJpbnRrKCJtc3AzNDAwOiB0aHJlYWQ6IG5vIGNhcnJpZXIgc2NhblxuIik7Ci0JCQltc3AzNDAwY19zZXR2b2x1bWUoY2xpZW50LCBtc3AtPm11dGVkLAotCQkJCQkgICBtc3AtPnZvbHVtZSwgbXNwLT5iYWxhbmNlKTsKKwkJCW1zcDM0MDBfaW5mbygidGhyZWFkOiBubyBjYXJyaWVyIHNjYW5cbiIpOworCQkJbXNwMzQwMGNfc2V0dm9sdW1lKGNsaWVudCwgbXNwLT5tdXRlZCwgbXNwLT5sZWZ0LCBtc3AtPnJpZ2h0KTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKQEAgLTgwMiwxMyArOTIxLDE0IEBACiAJCQlnb3RvIHJlc3RhcnQ7CiAKIAkJLyogY2FycmllciBkZXRlY3QgcGFzcyAjMSAtLSBtYWluIGNhcnJpZXIgKi8KLQkJY2QgPSBjYXJyaWVyX2RldGVjdF9tYWluOyBjb3VudCA9IENBUlJJRVJfQ09VTlQoY2Fycmllcl9kZXRlY3RfbWFpbik7CisJCWNkID0gY2Fycmllcl9kZXRlY3RfbWFpbjsKKwkJY291bnQgPSBDQVJSSUVSX0NPVU5UKGNhcnJpZXJfZGV0ZWN0X21haW4pOwogCiAJCWlmIChhbXNvdW5kICYmIChtc3AtPm5vcm0gPT0gVklERU9fTU9ERV9TRUNBTSkpIHsKIAkJCS8qIGF1dG9kZXRlY3QgZG9lc24ndCB3b3JrIHdlbGwgd2l0aCBBTSAuLi4gKi8KIAkJCW1heDEgPSAzOwogCQkJY291bnQgPSAwOwotCQkJZHByaW50aygibXNwMzQwMDogQU0gc291bmQgb3ZlcnJpZGVcbiIpOworCQkJbXNwMzQwMF9kYmcoIkFNIHNvdW5kIG92ZXJyaWRlXG4iKTsKIAkJfQogCiAJCWZvciAodGhpcyA9IDA7IHRoaXMgPCBjb3VudDsgdGhpcysrKSB7CkBAIC04MjAsNyArOTQwLDcgQEAKIAkJCQl2YWwgLT0gNjU1MzY7CiAJCQlpZiAodmFsMSA8IHZhbCkKIAkJCQl2YWwxID0gdmFsLCBtYXgxID0gdGhpczsKLQkJCWRwcmludGsoIm1zcDM0MDA6IGNhcnJpZXIxIHZhbDogJTVkIC8gJXNcbiIsIHZhbCxjZFt0aGlzXS5uYW1lKTsKKwkJCW1zcDM0MDBfZGJnKCJjYXJyaWVyMSB2YWw6ICU1ZCAvICVzXG4iLCB2YWwsY2RbdGhpc10ubmFtZSk7CiAJCX0KIAogCQkvKiBjYXJyaWVyIGRldGVjdCBwYXNzICMyIC0tIHNlY29uZCAoc3RlcmVvKSBjYXJyaWVyICovCkBAIC04MzYsMTMgKzk1NiwxNiBAQAogCQljYXNlIDA6IC8qIDQuNSAqLwogCQljYXNlIDI6IC8qIDYuMCAqLwogCQlkZWZhdWx0OgotCQkJY2QgPSBOVUxMOyBjb3VudCA9IDA7CisJCQljZCA9IE5VTEw7CisJCQljb3VudCA9IDA7CiAJCQlicmVhazsKIAkJfQogCiAJCWlmIChhbXNvdW5kICYmIChtc3AtPm5vcm0gPT0gVklERU9fTU9ERV9TRUNBTSkpIHsKIAkJCS8qIGF1dG9kZXRlY3QgZG9lc24ndCB3b3JrIHdlbGwgd2l0aCBBTSAuLi4gKi8KLQkJCWNkID0gTlVMTDsgY291bnQgPSAwOyBtYXgyID0gMDsKKwkJCWNkID0gTlVMTDsKKwkJCWNvdW50ID0gMDsKKwkJCW1heDIgPSAwOwogCQl9CiAJCWZvciAodGhpcyA9IDA7IHRoaXMgPCBjb3VudDsgdGhpcysrKSB7CiAJCQltc3AzNDAwY19zZXRjYXJyaWVyKGNsaWVudCwgY2RbdGhpc10uY2RvLGNkW3RoaXNdLmNkbyk7CkBAIC04NTMsNyArOTc2LDcgQEAKIAkJCQl2YWwgLT0gNjU1MzY7CiAJCQlpZiAodmFsMiA8IHZhbCkKIAkJCQl2YWwyID0gdmFsLCBtYXgyID0gdGhpczsKLQkJCWRwcmludGsoIm1zcDM0MDA6IGNhcnJpZXIyIHZhbDogJTVkIC8gJXNcbiIsIHZhbCxjZFt0aGlzXS5uYW1lKTsKKwkJCW1zcDM0MDBfZGJnKCJjYXJyaWVyMiB2YWw6ICU1ZCAvICVzXG4iLCB2YWwsY2RbdGhpc10ubmFtZSk7CiAJCX0KIAogCQkvKiBwcm9ncmFtbSB0aGUgbXNwMzQwMCBhY2NvcmRpbmcgdG8gdGhlIHJlc3VsdHMgKi8KQEAgLTg2NSw3ICs5ODgsNyBAQAogCQkJCW1zcC0+c2Vjb25kID0gY2Fycmllcl9kZXRlY3RfNTVbbWF4Ml0uY2RvOwogCQkJCW1zcDM0MDBjX3NldG1vZGUoY2xpZW50LCBNU1BfTU9ERV9GTV9URVJSQSk7CiAJCQkJbXNwLT5uaWNhbV9vbiA9IDA7Ci0JCQkJbXNwMzQwMGNfc2V0X2F1ZG1vZGUoY2xpZW50LCBWNEwyX1RVTkVSX01PREVfTU9OTyk7CisJCQkJbXNwMzQwMGNfc2V0c3RlcmVvKGNsaWVudCwgVjRMMl9UVU5FUl9NT0RFX01PTk8pOwogCQkJCW1zcC0+d2F0Y2hfc3RlcmVvID0gMTsKIAkJCX0gZWxzZSBpZiAobWF4MiA9PSAxICYmIEhBVkVfTklDQU0obXNwKSkgewogCQkJCS8qIEIvRyBOSUNBTSAqLwpAQCAtODkyLDcgKzEwMTUsNyBAQAogCQkJCW1zcC0+c2Vjb25kID0gY2Fycmllcl9kZXRlY3RfNjVbbWF4Ml0uY2RvOwogCQkJCW1zcDM0MDBjX3NldG1vZGUoY2xpZW50LCBNU1BfTU9ERV9GTV9URVJSQSk7CiAJCQkJbXNwLT5uaWNhbV9vbiA9IDA7Ci0JCQkJbXNwMzQwMGNfc2V0X2F1ZG1vZGUoY2xpZW50LCBWNEwyX1RVTkVSX01PREVfTU9OTyk7CisJCQkJbXNwMzQwMGNfc2V0c3RlcmVvKGNsaWVudCwgVjRMMl9UVU5FUl9NT0RFX01PTk8pOwogCQkJCW1zcC0+d2F0Y2hfc3RlcmVvID0gMTsKIAkJCX0gZWxzZSBpZiAobWF4MiA9PSAwICYmCiAJCQkJICAgbXNwLT5ub3JtID09IFZJREVPX01PREVfU0VDQU0pIHsKQEAgLTkwMCw3ICsxMDIzLDcgQEAKIAkJCQltc3AtPnNlY29uZCA9IGNhcnJpZXJfZGV0ZWN0XzY1W21heDJdLmNkbzsKIAkJCQltc3AzNDAwY19zZXRtb2RlKGNsaWVudCwgTVNQX01PREVfQU1fTklDQU0pOwogCQkJCW1zcC0+bmljYW1fb24gPSAwOwotCQkJCW1zcDM0MDBjX3NldF9hdWRtb2RlKGNsaWVudCwgVjRMMl9UVU5FUl9NT0RFX01PTk8pOworCQkJCW1zcDM0MDBjX3NldHN0ZXJlbyhjbGllbnQsIFY0TDJfVFVORVJfTU9ERV9NT05PKTsKIAkJCQltc3AzNDAwY19zZXRjYXJyaWVyKGNsaWVudCwgbXNwLT5zZWNvbmQsIG1zcC0+bWFpbik7CiAJCQkJLyogdm9sdW1lIHByZXNjYWxlIGZvciBTQ0FSVCAoQU0gbW9ubyBpbnB1dCkgKi8KIAkJCQltc3AzNDAwY193cml0ZShjbGllbnQsSTJDX01TUDM0MDBDX0RGUCwgMHgwMDBkLCAweDE5MDApOwpAQCAtOTI0LDE1ICsxMDQ3LDE2IEBACiAJCQltc3AtPm5pY2FtX29uID0gMDsKIAkJCW1zcDM0MDBjX3NldGNhcnJpZXIoY2xpZW50LCBtc3AtPnNlY29uZCwgbXNwLT5tYWluKTsKIAkJCW1zcC0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX01PTk87Ci0JCQltc3AzNDAwY19zZXRfYXVkbW9kZShjbGllbnQsIFY0TDJfVFVORVJfTU9ERV9NT05PKTsKKwkJCW1zcDM0MDBjX3NldHN0ZXJlbyhjbGllbnQsIFY0TDJfVFVORVJfTU9ERV9NT05PKTsKIAkJCWJyZWFrOwogCQl9CiAKIAkJLyogdW5tdXRlICovCi0JCW1zcDM0MDBjX3NldHZvbHVtZShjbGllbnQsIG1zcC0+bXV0ZWQsCi0JCQkJICAgbXNwLT52b2x1bWUsIG1zcC0+YmFsYW5jZSk7CisJCW1zcDM0MDBjX3NldHZvbHVtZShjbGllbnQsIG1zcC0+bXV0ZWQsIG1zcC0+bGVmdCwgbXNwLT5yaWdodCk7CisJCW1zcDM0MDBjX3Jlc3RvcmVfZGZwKGNsaWVudCk7CisKIAkJaWYgKGRlYnVnKQotCQkJbXNwMzQwMGNfcHJpbnRfbW9kZShtc3ApOworCQkJbXNwMzQwMGNfcHJpbnRfbW9kZShjbGllbnQpOwogCiAJCS8qIG1vbml0b3IgdHYgYXVkaW8gbW9kZSAqLwogCQl3aGlsZSAobXNwLT53YXRjaF9zdGVyZW8pIHsKQEAgLTk0MSw3ICsxMDY1LDcgQEAKIAkJCXdhdGNoX3N0ZXJlbyhjbGllbnQpOwogCQl9CiAJfQotCWRwcmludGsoS0VSTl9ERUJVRyAibXNwMzQwMDogdGhyZWFkOiBleGl0XG4iKTsKKwltc3AzNDAwX2RiZygidGhyZWFkOiBleGl0XG4iKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTg1LDEwICsxMTA5LDEyIEBACiAJcmV0dXJuICJ1bmtub3duIjsKIH0KIAotc3RhdGljIGludCBtc3AzNHh4X21vZHVzKGludCBub3JtKQorc3RhdGljIGludCBtc3AzNHh4X21vZHVzKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBub3JtKQogewogCXN3aXRjaCAobm9ybSkgewogCWNhc2UgVklERU9fTU9ERV9QQUw6CisJCW1zcDM0MDBfZGJnKCJ2aWRlbyBtb2RlIHNlbGVjdGVkIHRvIFBBTFxuIik7CisKICNpZiAxCiAJCS8qIGV4cGVyaW1lbnRhbDogbm90IHN1cmUgdGhpcyB3b3JrcyB3aXRoIGFsbCBjaGlwIHZlcnNpb25zICovCiAJCXJldHVybiAweDcwMDM7CkBAIC05OTcsMTIgKzExMjMsMTYgQEAKIAkJcmV0dXJuIDB4MTAwMzsKICNlbmRpZgogCWNhc2UgVklERU9fTU9ERV9OVFNDOiAgLyogQlRTQyAqLworCQltc3AzNDAwX2RiZygidmlkZW8gbW9kZSBzZWxlY3RlZCB0byBOVFNDXG4iKTsKIAkJcmV0dXJuIDB4MjAwMzsKIAljYXNlIFZJREVPX01PREVfU0VDQU06CisJCW1zcDM0MDBfZGJnKCJ2aWRlbyBtb2RlIHNlbGVjdGVkIHRvIFNFQ0FNXG4iKTsKIAkJcmV0dXJuIDB4MDAwMzsKIAljYXNlIFZJREVPX01PREVfUkFESU86CisJCW1zcDM0MDBfZGJnKCJ2aWRlbyBtb2RlIHNlbGVjdGVkIHRvIFJhZGlvXG4iKTsKIAkJcmV0dXJuIDB4MDAwMzsKIAljYXNlIFZJREVPX01PREVfQVVUTzoKKwkJbXNwMzQwMF9kYmcoInZpZGVvIG1vZGUgc2VsZWN0ZWQgdG8gQXV0b1xuIik7CiAJCXJldHVybiAweDIwMDM7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIDB4MDAwMzsKQEAgLTEwMzEsMjMgKzExNjEsMjIgQEAKIAlzdHJ1Y3QgbXNwMzQwMGMgKm1zcCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCWludCBtb2RlLHZhbCxpLHN0ZDsKIAotCXByaW50aygibXNwMzQxMDogZGFlbW9uIHN0YXJ0ZWRcbiIpOworCW1zcDM0MDBfaW5mbygibXNwMzQxMCBkYWVtb24gc3RhcnRlZFxuIik7CiAJZm9yICg7OykgewotCQlkMnByaW50ayhLRVJOX0RFQlVHICJtc3AzNDEwOiB0aHJlYWQ6IHNsZWVwXG4iKTsKKwkJbXNwMzQwMF9kYmdfbWVkaXVtdm9sKCJtc3AzNDEwIHRocmVhZDogc2xlZXBcbiIpOwogCQltc3AzNHh4X3NsZWVwKG1zcCwtMSk7Ci0JCWQycHJpbnRrKEtFUk5fREVCVUcgIm1zcDM0MTA6IHRocmVhZDogd2FrZXVwXG4iKTsKKwkJbXNwMzQwMF9kYmdfbWVkaXVtdm9sKCJtc3AzNDEwIHRocmVhZDogd2FrZXVwXG4iKTsKIAogCXJlc3RhcnQ6Ci0JCWRwcmludGsoIm1zcDM0MTA6IHRocmVhZDogcmVzdGFydCBzY2FuXG4iKTsKKwkJbXNwMzQwMF9kYmcoInRocmVhZDogcmVzdGFydCBzY2FuXG4iKTsKIAkJbXNwLT5yZXN0YXJ0ID0gMDsKIAkJaWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkKIAkJCWJyZWFrOwogCiAJCWlmIChtc3AtPm1vZGUgPT0gTVNQX01PREVfRVhURVJOKSB7CiAJCQkvKiBubyBjYXJyaWVyIHNjYW4gbmVlZGVkLCBqdXN0IHVubXV0ZSAqLwotCQkJZHByaW50ayhLRVJOX0RFQlVHICJtc3AzNDEwOiB0aHJlYWQ6IG5vIGNhcnJpZXIgc2NhblxuIik7Ci0JCQltc3AzNDAwY19zZXR2b2x1bWUoY2xpZW50LCBtc3AtPm11dGVkLAotCQkJCQkgICBtc3AtPnZvbHVtZSwgbXNwLT5iYWxhbmNlKTsKKwkJCW1zcDM0MDBfZGJnKCJ0aHJlYWQ6IG5vIGNhcnJpZXIgc2NhblxuIik7CisJCW1zcDM0MDBjX3NldHZvbHVtZShjbGllbnQsIG1zcC0+bXV0ZWQsIG1zcC0+bGVmdCwgbXNwLT5yaWdodCk7CiAJCQljb250aW51ZTsKIAkJfQogCkBAIC0xMDU5LDE0ICsxMTg4LDE0IEBACiAJCQlnb3RvIHJlc3RhcnQ7CiAKIAkJLyogc3RhcnQgYXV0b2RldGVjdCAqLwotCQltb2RlID0gbXNwMzR4eF9tb2R1cyhtc3AtPm5vcm0pOworCQltb2RlID0gbXNwMzR4eF9tb2R1cyhjbGllbnQsIG1zcC0+bm9ybSk7CiAJCXN0ZCAgPSBtc3AzNHh4X3N0YW5kYXJkKG1zcC0+bm9ybSk7CiAJCW1zcDM0MDBjX3dyaXRlKGNsaWVudCwgSTJDX01TUDM0MDBDX0RFTSwgMHgzMCwgbW9kZSk7CiAJCW1zcDM0MDBjX3dyaXRlKGNsaWVudCwgSTJDX01TUDM0MDBDX0RFTSwgMHgyMCwgc3RkKTsKIAkJbXNwLT53YXRjaF9zdGVyZW8gPSAwOwogCiAJCWlmIChkZWJ1ZykKLQkJCXByaW50ayhLRVJOX0RFQlVHICJtc3AzNDEwOiBzZXR0aW5nIG1vZGU6ICVzICgweCUwNHgpXG4iLAorCQkJbXNwMzQwMF9kYmcoInNldHRpbmcgbW9kZTogJXMgKDB4JTA0eClcbiIsCiAJCQkgICAgICAgbXNwMzR4eF9zdGFuZGFyZF9tb2RlX25hbWUoc3RkKSAsc3RkKTsKIAogCQlpZiAoc3RkICE9IDEpIHsKQEAgLTEwODIsMTMgKzEyMTEsMTMgQEAKIAkJCQl2YWwgPSBtc3AzNDAwY19yZWFkKGNsaWVudCwgSTJDX01TUDM0MDBDX0RFTSwgMHg3ZSk7CiAJCQkJaWYgKHZhbCA8IDB4MDdmZikKIAkJCQkJYnJlYWs7Ci0JCQkJZHByaW50ayhLRVJOX0RFQlVHICJtc3AzNDEwOiBkZXRlY3Rpb24gc3RpbGwgaW4gcHJvZ3Jlc3NcbiIpOworCQkJCW1zcDM0MDBfZGJnKCJkZXRlY3Rpb24gc3RpbGwgaW4gcHJvZ3Jlc3NcbiIpOwogCQkJfQogCQl9CiAJCWZvciAoaSA9IDA7IG1vZGVsaXN0W2ldLm5hbWUgIT0gTlVMTDsgaSsrKQogCQkJaWYgKG1vZGVsaXN0W2ldLnJldHZhbCA9PSB2YWwpCiAJCQkJYnJlYWs7Ci0JCWRwcmludGsoS0VSTl9ERUJVRyAibXNwMzQxMDogY3VycmVudCBtb2RlOiAlcyAoMHglMDR4KVxuIiwKKwkJbXNwMzQwMF9kYmcoImN1cnJlbnQgbW9kZTogJXMgKDB4JTA0eClcbiIsCiAJCQltb2RlbGlzdFtpXS5uYW1lID8gbW9kZWxpc3RbaV0ubmFtZSA6ICJ1bmtub3duIiwKIAkJCXZhbCk7CiAJCW1zcC0+bWFpbiAgID0gbW9kZWxpc3RbaV0ubWFpbjsKQEAgLTEwOTYsNyArMTIyNSw3IEBACiAKIAkJaWYgKGFtc291bmQgJiYgKG1zcC0+bm9ybSA9PSBWSURFT19NT0RFX1NFQ0FNKSAmJiAodmFsICE9IDB4MDAwOSkpIHsKIAkJCS8qIGF1dG9kZXRlY3Rpb24gaGFzIGZhaWxlZCwgbGV0IGJhY2t1cCAqLwotCQkJZHByaW50ayhLRVJOX0RFQlVHICJtc3AzNDEwOiBhdXRvZGV0ZWN0aW9uIGZhaWxlZCwiCisJCQltc3AzNDAwX2RiZygiYXV0b2RldGVjdGlvbiBmYWlsZWQsIgogCQkJCSIgc3dpdGNoaW5nIHRvIGJhY2t1cCBtb2RlOiAlcyAoMHglMDR4KVxuIiwKIAkJCQltb2RlbGlzdFs4XS5uYW1lID8gbW9kZWxpc3RbOF0ubmFtZSA6ICJ1bmtub3duIix2YWwpOwogCQkJdmFsID0gMHgwMDA5OwpAQCAtMTEyMCwxMyArMTI0OSwxMyBAQAogCQkJbXNwLT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfU1RFUkVPOwogCQkJbXNwLT5uaWNhbV9vbiA9IDE7CiAJCQltc3AtPndhdGNoX3N0ZXJlbyA9IDE7Ci0JCQltc3AzNDAwY19zZXRfYXVkbW9kZShjbGllbnQsVjRMMl9UVU5FUl9NT0RFX1NURVJFTyk7CisJCQltc3AzNDAwY19zZXRzdGVyZW8oY2xpZW50LFY0TDJfVFVORVJfTU9ERV9TVEVSRU8pOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwMDA5OgogCQkJbXNwLT5tb2RlID0gTVNQX01PREVfQU1fTklDQU07CiAJCQltc3AtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05POwogCQkJbXNwLT5uaWNhbV9vbiA9IDE7Ci0JCQltc3AzNDAwY19zZXRfYXVkbW9kZShjbGllbnQsVjRMMl9UVU5FUl9NT0RFX01PTk8pOworCQkJbXNwMzQwMGNfc2V0c3RlcmVvKGNsaWVudCxWNEwyX1RVTkVSX01PREVfTU9OTyk7CiAJCQltc3AtPndhdGNoX3N0ZXJlbyA9IDE7CiAJCQlicmVhazsKIAkJY2FzZSAweDAwMjA6IC8qIEJUU0MgKi8KQEAgLTExMzUsNyArMTI2NCw3IEBACiAJCQltc3AtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9TVEVSRU87CiAJCQltc3AtPm5pY2FtX29uID0gMDsKIAkJCW1zcC0+d2F0Y2hfc3RlcmVvID0gMTsKLQkJCW1zcDM0MDBjX3NldF9hdWRtb2RlKGNsaWVudCxWNEwyX1RVTkVSX01PREVfU1RFUkVPKTsKKwkJCW1zcDM0MDBjX3NldHN0ZXJlbyhjbGllbnQsVjRMMl9UVU5FUl9NT0RFX1NURVJFTyk7CiAJCQlicmVhazsKIAkJY2FzZSAweDAwNDA6IC8qIEZNIHJhZGlvICovCiAJCQltc3AtPm1vZGUgICA9IE1TUF9NT0RFX0ZNX1JBRElPOwpAQCAtMTE2OSw5ICsxMjk4LDEwIEBACiAJCS8qIHVubXV0ZSwgcmVzdG9yZSBtaXNjIHJlZ2lzdGVycyAqLwogCQltc3AzNDAwY19zZXRiYXNzKGNsaWVudCwgbXNwLT5iYXNzKTsKIAkJbXNwMzQwMGNfc2V0dHJlYmxlKGNsaWVudCwgbXNwLT50cmVibGUpOwotCQltc3AzNDAwY19zZXR2b2x1bWUoY2xpZW50LCBtc3AtPm11dGVkLAotCQkJCSAgICBtc3AtPnZvbHVtZSwgbXNwLT5iYWxhbmNlKTsKLQkJbXNwMzQwMGNfd3JpdGUoY2xpZW50LCBJMkNfTVNQMzQwMENfREZQLCAweDAwMTMsIG1zcC0+YWNiKTsKKwkJbXNwMzQwMGNfc2V0dm9sdW1lKGNsaWVudCwgbXNwLT5tdXRlZCwgbXNwLT5sZWZ0LCBtc3AtPnJpZ2h0KTsKKwkJbXNwMzQwMGNfd3JpdGUoY2xpZW50LCBJMkNfTVNQMzQwMENfREZQLCAweDEzLCBtc3AtPmFjYik7CisJCW1zcDM0MDBjX3dyaXRlKGNsaWVudCxJMkNfTVNQMzQwMENfREVNLCAweDQwLCBtc3AtPmkyc19tb2RlKTsKKwkJbXNwMzQwMGNfcmVzdG9yZV9kZnAoY2xpZW50KTsKIAogCQkvKiBtb25pdG9yIHR2IGF1ZGlvIG1vZGUgKi8KIAkJd2hpbGUgKG1zcC0+d2F0Y2hfc3RlcmVvKSB7CkBAIC0xMTgwLDcgKzEzMTAsNyBAQAogCQkJd2F0Y2hfc3RlcmVvKGNsaWVudCk7CiAJCX0KIAl9Ci0JZHByaW50ayhLRVJOX0RFQlVHICJtc3AzNDEwOiB0aHJlYWQ6IGV4aXRcbiIpOworCW1zcDM0MDBfZGJnKCJ0aHJlYWQ6IGV4aXRcbiIpOwogCXJldHVybiAwOwogfQogCkBAIC0xMTk1LDcgKzEzMjUsNyBAQAogLyogKHJlLSlpbml0aWFsaXplIHRoZSBtc3AzNHh4ZywgYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50IG5vcm0gaW4gbXNwLT5ub3JtCiAgKiByZXR1cm4gMCBpZiBpdCB3b3JrZWQsIC0xIGlmIGl0IGZhaWxlZAogICovCi1zdGF0aWMgaW50IG1zcDM0eHhnX2luaXQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3N0YXRpYyBpbnQgbXNwMzR4eGdfcmVzZXQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKIAlzdHJ1Y3QgbXNwMzQwMGMgKm1zcCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCWludCBtb2R1cyxzdGQ7CkBAIC0xMjEwLDggKzEzNDAsMTAgQEAKIAkJCSAgIDB4MGYyMCAvKiBtdXRlIERTUCBpbnB1dCwgbXV0ZSBTQ0FSVCAxICovKSkKIAkJcmV0dXJuIC0xOwogCisJbXNwMzQwMGNfd3JpdGUoY2xpZW50LEkyQ19NU1AzNDAwQ19ERU0sIDB4NDAsIG1zcC0+aTJzX21vZGUpOworCiAJLyogc3RlcC1ieS1zdGVwIGluaXRpYWxpc2F0aW9uLCBhcyBkZXNjcmliZWQgaW4gdGhlIG1hbnVhbCAqLwotCW1vZHVzID0gbXNwMzR4eF9tb2R1cyhtc3AtPm5vcm0pOworCW1vZHVzID0gbXNwMzR4eF9tb2R1cyhjbGllbnQsIG1zcC0+bm9ybSk7CiAJc3RkICAgPSBtc3AzNHh4X3N0YW5kYXJkKG1zcC0+bm9ybSk7CiAJbW9kdXMgJj0gfjB4MDM7IC8qIFNUQVRVU19DSEFOR0U9MCAqLwogCW1vZHVzIHw9IDB4MDE7ICAvKiBBVVRPTUFUSUNfU09VTkRfREVURUNUSU9OPTEgKi8KQEAgLTEyMjIsNyArMTM1NCw3IEBACiAJCXJldHVybiAtMTsKIAlpZiAobXNwMzQwMGNfd3JpdGUoY2xpZW50LAogCQkJICAgSTJDX01TUDM0MDBDX0RFTSwKLQkJCSAgIDB4MjAvKnN0YW5hcmQqLywKKwkJCSAgIDB4MjAvKnN0YW5kYXJkKi8sCiAJCQkgICBzdGQpKQogCQlyZXR1cm4gLTE7CiAKQEAgLTEyMzAsMjEgKzEzNjIsMTggQEAKIAkgICBzdGFuZGFyZC9hdWRpbyBhdXRvZGV0ZWN0aW9uIHJpZ2h0IG5vdyAqLwogCW1zcDM0eHhnX3NldF9zb3VyY2UoY2xpZW50LCBtc3AtPnNvdXJjZSk7CiAKLQlpZiAobXNwMzQwMGNfd3JpdGUoY2xpZW50LCBJMkNfTVNQMzQwMENfREZQLAotCQkJICAgMHgwZSwgLyogQU0vRk0gUHJlc2NhbGUgKi8KLQkJCSAgIDB4MzAwMCAvKiBkZWZhdWx0OiBbMTU6OF0gNzVraHogZGV2aWF0aW9uICovKSkKKwlpZiAobXNwMzQwMGNfd3JpdGVfZGZwX3dpdGhfZGVmYXVsdChjbGllbnQsIDB4MGUsCS8qIEFNL0ZNIFByZXNjYWxlICovCisJCQkJCSAgICAweDMwMDAKKwkJCQkJICAgIC8qIGRlZmF1bHQ6IFsxNTo4XSA3NWtoeiBkZXZpYXRpb24gKi8KKwkgICAgKSkKIAkJcmV0dXJuIC0xOwogCi0JaWYgKG1zcDM0MDBjX3dyaXRlKGNsaWVudCwgSTJDX01TUDM0MDBDX0RGUCwKLQkJCSAgIDB4MTAsIC8qIE5JQ0FNIFByZXNjYWxlICovCi0JCQkgICAweDVhMDAgLyogZGVmYXVsdDogOWRiIGdhaW4gKGFzIHJlY29tbWVuZGVkKSAqLykpCisJaWYgKG1zcDM0MDBjX3dyaXRlX2RmcF93aXRoX2RlZmF1bHQoY2xpZW50LCAweDEwLAkvKiBOSUNBTSBQcmVzY2FsZSAqLworCQkJCQkgICAgMHg1YTAwCisJCQkJCSAgICAvKiBkZWZhdWx0OiA5ZGIgZ2FpbiAoYXMgcmVjb21tZW5kZWQpICovCisJICAgICkpCiAJCXJldHVybiAtMTsKIAotCWlmIChtc3AzNDAwY193cml0ZShjbGllbnQsCi0JCQkgICBJMkNfTVNQMzQwMENfREVNLAotCQkJICAgMHgyMCwgLyogU1RBTkRBUkQgU0VMRUNUICAqLwotCQkJICAgc3RhbmRhcmQgLyogZGVmYXVsdDogMHgwMSBmb3IgYXV0b21hdGljIHN0YW5kYXJkIHNlbGVjdCovKSkKLQkJcmV0dXJuIC0xOwogCXJldHVybiAwOwogfQogCkBAIC0xMjU0LDI3ICsxMzgzLDI3IEBACiAJc3RydWN0IG1zcDM0MDBjICptc3AgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlpbnQgdmFsLCBzdGQsIGk7CiAKLQlwcmludGsoIm1zcDM0eHhnOiBkYWVtb24gc3RhcnRlZFxuIik7CisJbXNwMzQwMF9pbmZvKCJtc3AzNHh4ZyBkYWVtb24gc3RhcnRlZFxuIik7CiAJbXNwLT5zb3VyY2UgPSAxOyAvKiBkZWZhdWx0ICovCiAJZm9yICg7OykgewotCQlkMnByaW50ayhLRVJOX0RFQlVHICJtc3AzNHh4ZzogdGhyZWFkOiBzbGVlcFxuIik7CisJCW1zcDM0MDBfZGJnX21lZGl1bXZvbCgibXNwMzR4eGcgdGhyZWFkOiBzbGVlcFxuIik7CiAJCW1zcDM0eHhfc2xlZXAobXNwLC0xKTsKLQkJZDJwcmludGsoS0VSTl9ERUJVRyAibXNwMzR4eGc6IHRocmVhZDogd2FrZXVwXG4iKTsKKwkJbXNwMzQwMF9kYmdfbWVkaXVtdm9sKCJtc3AzNHh4ZyB0aHJlYWQ6IHdha2V1cFxuIik7CiAKIAlyZXN0YXJ0OgotCQlkcHJpbnRrKCJtc3AzNHh4ZzogdGhyZWFkOiByZXN0YXJ0IHNjYW5cbiIpOworCQltc3AzNDAwX2RiZygidGhyZWFkOiByZXN0YXJ0IHNjYW5cbiIpOwogCQltc3AtPnJlc3RhcnQgPSAwOwogCQlpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpKQogCQkJYnJlYWs7CiAKIAkJLyogc2V0dXAgdGhlIGNoaXAqLwotCQltc3AzNHh4Z19pbml0KGNsaWVudCk7CisJCW1zcDM0eHhnX3Jlc2V0KGNsaWVudCk7CiAJCXN0ZCA9IHN0YW5kYXJkOwogCQlpZiAoc3RkICE9IDB4MDEpCiAJCQlnb3RvIHVubXV0ZTsKIAogCQkvKiB3YXRjaCBhdXRvZGV0ZWN0ICovCi0JCWRwcmludGsoIm1zcDM0eHhnOiB0cmlnZ2VyZWQgYXV0b2RldGVjdCwgd2FpdGluZyBmb3IgcmVzdWx0XG4iKTsKKwkJbXNwMzQwMF9kYmcoInRyaWdnZXJlZCBhdXRvZGV0ZWN0LCB3YWl0aW5nIGZvciByZXN1bHRcbiIpOwogCQlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgewogCQkJaWYgKG1zcDM0eHhfc2xlZXAobXNwLDEwMCkpCiAJCQkJZ290byByZXN0YXJ0OwpAQCAtMTI4NSwyMyArMTQxNCwyMyBAQAogCQkJCXN0ZCA9IHZhbDsKIAkJCQlicmVhazsKIAkJCX0KLQkJCWRwcmludGsoIm1zcDM0eHhnOiBkZXRlY3Rpb24gc3RpbGwgaW4gcHJvZ3Jlc3NcbiIpOworCQkJbXNwMzQwMF9kYmcoImRldGVjdGlvbiBzdGlsbCBpbiBwcm9ncmVzc1xuIik7CiAJCX0KIAkJaWYgKDB4MDEgPT0gc3RkKSB7Ci0JCQlkcHJpbnRrKCJtc3AzNHh4ZzogZGV0ZWN0aW9uIHN0aWxsIGluIHByb2dyZXNzIGFmdGVyIDEwIHRyaWVzLiBnaXZpbmcgdXAuXG4iKTsKKwkJCW1zcDM0MDBfZGJnKCJkZXRlY3Rpb24gc3RpbGwgaW4gcHJvZ3Jlc3MgYWZ0ZXIgMTAgdHJpZXMuIGdpdmluZyB1cC5cbiIpOwogCQkJY29udGludWU7CiAJCX0KIAogCXVubXV0ZToKLQkJZHByaW50aygibXNwMzR4eGc6IGN1cnJlbnQgbW9kZTogJXMgKDB4JTA0eClcbiIsCisJCW1zcDM0MDBfZGJnKCJjdXJyZW50IG1vZGU6ICVzICgweCUwNHgpXG4iLAogCQkJbXNwMzR4eF9zdGFuZGFyZF9tb2RlX25hbWUoc3RkKSwgc3RkKTsKIAogCQkvKiB1bm11dGU6IGRpc3BhdGNoIHNvdW5kIHRvIHNjYXJ0IG91dHB1dCwgc2V0IHNjYXJ0IHZvbHVtZSAqLwotCQlkcHJpbnRrKCJtc3AzNHh4ZzogdW5tdXRlXG4iKTsKKwkJbXNwMzQwMF9kYmcoInVubXV0ZVxuIik7CiAKIAkJbXNwMzQwMGNfc2V0YmFzcyhjbGllbnQsIG1zcC0+YmFzcyk7CiAJCW1zcDM0MDBjX3NldHRyZWJsZShjbGllbnQsIG1zcC0+dHJlYmxlKTsKLQkJbXNwMzQwMGNfc2V0dm9sdW1lKGNsaWVudCwgbXNwLT5tdXRlZCwgbXNwLT52b2x1bWUsIG1zcC0+YmFsYW5jZSk7CisJCW1zcDM0MDBjX3NldHZvbHVtZShjbGllbnQsIG1zcC0+bXV0ZWQsIG1zcC0+bGVmdCwgbXNwLT5yaWdodCk7CiAKIAkJLyogcmVzdG9yZSBBQ0IgKi8KIAkJaWYgKG1zcDM0MDBjX3dyaXRlKGNsaWVudCwKQEAgLTEzMDksOCArMTQzOCwxMCBAQAogCQkJCSAgIDB4MTMsIC8qIEFDQiAqLwogCQkJCSAgIG1zcC0+YWNiKSkKIAkJCXJldHVybiAtMTsKKworCQltc3AzNDAwY193cml0ZShjbGllbnQsSTJDX01TUDM0MDBDX0RFTSwgMHg0MCwgbXNwLT5pMnNfbW9kZSk7CiAJfQotCWRwcmludGsoS0VSTl9ERUJVRyAibXNwMzR4eGc6IHRocmVhZDogZXhpdFxuIik7CisJbXNwMzQwMF9kYmcoInRocmVhZDogZXhpdFxuIik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEzMjksNyArMTQ2MCw3IEBACiAJICogZm9yIE1PTk8gKHNvdXJjZT09MCkgZG93bm1peGluZyBzZXQgYml0Wzc6MF0gdG8gMHgzMAogCSAqLwogCWludCB2YWx1ZSA9IChzb3VyY2UmMHgwNyk8PDh8KHNvdXJjZT09MCA/IDB4MzA6MHgyMCk7Ci0JZHByaW50aygibXNwMzR4eGc6IHNldCBzb3VyY2UgdG8gJWQgKDB4JXgpXG4iLCBzb3VyY2UsIHZhbHVlKTsKKwltc3AzNDAwX2RiZygic2V0IHNvdXJjZSB0byAlZCAoMHgleClcbiIsIHNvdXJjZSwgdmFsdWUpOwogCW1zcDM0MDBjX3dyaXRlKGNsaWVudCwKIAkJICAgICAgIEkyQ19NU1AzNDAwQ19ERlAsCiAJCSAgICAgICAweDA4LCAvKiBMb3Vkc3BlYWtlciBPdXRwdXQgKi8KQEAgLTEzODAsNyArMTUxMSw3IEBACiAJCSAqIHRoaXMgaXMgYSBwcm9ibGVtLCBJJ2xsIGhhbmRsZSBTQVAganVzdCBsaWtlIGxhbmcxL2xhbmcyLgogCQkgKi8KIAl9Ci0JZHByaW50aygibXNwMzR4eGc6IHN0YXR1cz0weCV4LCBzdGVyZW89JWQsIGJpbGluZ3VhbD0lZCAtPiByeHN1YmNoYW5zPSVkXG4iLAorCW1zcDM0MDBfZGJnKCJzdGF0dXM9MHgleCwgc3RlcmVvPSVkLCBiaWxpbmd1YWw9JWQgLT4gcnhzdWJjaGFucz0lZFxuIiwKIAkJc3RhdHVzLCBpc19zdGVyZW8sIGlzX2JpbGluZ3VhbCwgbXNwLT5yeHN1YmNoYW5zKTsKIH0KIApAQCAtMTQyNyw3ICsxNTU4LDcgQEAKIAogc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGRyaXZlciA9IHsKIAkub3duZXIgICAgICAgICAgPSBUSElTX01PRFVMRSwKLQkubmFtZSAgICAgICAgICAgPSAiaTJjIG1zcDM0MDAgZHJpdmVyIiwKKwkubmFtZSAgICAgICAgICAgPSAibXNwMzQwMCIsCiAgICAgICAgIC5pZCAgICAgICAgICAgICA9IEkyQ19EUklWRVJJRF9NU1AzNDAwLAogICAgICAgICAuZmxhZ3MgICAgICAgICAgPSBJMkNfREZfTk9USUZZLAogICAgICAgICAuYXR0YWNoX2FkYXB0ZXIgPSBtc3BfcHJvYmUsCkBAIC0xNDQ5LDU3ICsxNTgwLDY0IEBACiBzdGF0aWMgaW50IG1zcF9hdHRhY2goc3RydWN0IGkyY19hZGFwdGVyICphZGFwLCBpbnQgYWRkciwgaW50IGtpbmQpCiB7CiAJc3RydWN0IG1zcDM0MDBjICptc3A7Ci0gICAgICAgIHN0cnVjdCBpMmNfY2xpZW50ICpjOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSAmY2xpZW50X3RlbXBsYXRlOwogCWludCAoKnRocmVhZF9mdW5jKSh2b2lkICpkYXRhKSA9IE5VTEw7CisJaW50IGk7CiAKLSAgICAgICAgY2xpZW50X3RlbXBsYXRlLmFkYXB0ZXIgPSBhZGFwOwotICAgICAgICBjbGllbnRfdGVtcGxhdGUuYWRkciA9IGFkZHI7CisJY2xpZW50X3RlbXBsYXRlLmFkYXB0ZXIgPSBhZGFwOworCWNsaWVudF90ZW1wbGF0ZS5hZGRyID0gYWRkcjsKIAotICAgICAgICBpZiAoLTEgPT0gbXNwMzQwMGNfcmVzZXQoJmNsaWVudF90ZW1wbGF0ZSkpIHsKLSAgICAgICAgICAgICAgICBkcHJpbnRrKCJtc3AzNHh4OiBubyBjaGlwIGZvdW5kXG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KKwlpZiAoLTEgPT0gbXNwMzQwMGNfcmVzZXQoJmNsaWVudF90ZW1wbGF0ZSkpIHsKKwkJbXNwMzQwMF9kYmcoIm5vIGNoaXAgZm91bmRcbiIpOworCQlyZXR1cm4gLTE7CisJfQogCi0gICAgICAgIGlmIChOVUxMID09IChjID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGkyY19jbGllbnQpLEdGUF9LRVJORUwpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKLSAgICAgICAgbWVtY3B5KGMsJmNsaWVudF90ZW1wbGF0ZSxzaXplb2Yoc3RydWN0IGkyY19jbGllbnQpKTsKKwlpZiAoTlVMTCA9PSAoY2xpZW50ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGkyY19jbGllbnQpLEdGUF9LRVJORUwpKSkKKwkJcmV0dXJuIC1FTk9NRU07CisJbWVtY3B5KGNsaWVudCwmY2xpZW50X3RlbXBsYXRlLHNpemVvZihzdHJ1Y3QgaTJjX2NsaWVudCkpOwogCWlmIChOVUxMID09IChtc3AgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbXNwMzQwMGMpLEdGUF9LRVJORUwpKSkgewotCQlrZnJlZShjKTsKKwkJa2ZyZWUoY2xpZW50KTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJbWVtc2V0KG1zcCwwLHNpemVvZihzdHJ1Y3QgbXNwMzQwMGMpKTsKLQltc3AtPnZvbHVtZSAgPSA1ODg4MDsgIC8qIDBkYiBnYWluICovCi0JbXNwLT5iYWxhbmNlID0gMzI3Njg7Ci0JbXNwLT5iYXNzICAgID0gMzI3Njg7Ci0JbXNwLT50cmVibGUgID0gMzI3Njg7Ci0JbXNwLT5pbnB1dCAgID0gLTE7Ci0JbXNwLT5tdXRlZCAgID0gMTsKKwltc3AtPm5vcm0gPSBWSURFT19NT0RFX05UU0M7CisJbXNwLT5sZWZ0ID0gNTg4ODA7CS8qIDBkYiBnYWluICovCisJbXNwLT5yaWdodCA9IDU4ODgwOwkvKiAwZGIgZ2FpbiAqLworCW1zcC0+YmFzcyA9IDMyNzY4OworCW1zcC0+dHJlYmxlID0gMzI3Njg7CisJbXNwLT5pbnB1dCA9IC0xOworCW1zcC0+bXV0ZWQgPSAwOworCW1zcC0+aTJzX21vZGUgPSAwOworCWZvciAoaSA9IDA7IGkgPCBERlBfQ09VTlQ7IGkrKykKKwkJbXNwLT5kZnBfcmVnc1tpXSA9IC0xOwogCi0JaTJjX3NldF9jbGllbnRkYXRhKGMsIG1zcCk7CisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgbXNwKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZtc3AtPndxKTsKIAotCWlmICgtMSA9PSBtc3AzNDAwY19yZXNldChjKSkgeworCWlmICgtMSA9PSBtc3AzNDAwY19yZXNldChjbGllbnQpKSB7CiAJCWtmcmVlKG1zcCk7Ci0JCWtmcmVlKGMpOwotCQlkcHJpbnRrKCJtc3AzNHh4OiBubyBjaGlwIGZvdW5kXG4iKTsKKwkJa2ZyZWUoY2xpZW50KTsKKwkJbXNwMzQwMF9kYmcoIm5vIGNoaXAgZm91bmRcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCi0JbXNwLT5yZXYxID0gbXNwMzQwMGNfcmVhZChjLCBJMkNfTVNQMzQwMENfREZQLCAweDFlKTsKKwltc3AtPnJldjEgPSBtc3AzNDAwY19yZWFkKGNsaWVudCwgSTJDX01TUDM0MDBDX0RGUCwgMHgxZSk7CiAJaWYgKC0xICE9IG1zcC0+cmV2MSkKLQkJbXNwLT5yZXYyID0gbXNwMzQwMGNfcmVhZChjLCBJMkNfTVNQMzQwMENfREZQLCAweDFmKTsKKwkJbXNwLT5yZXYyID0gbXNwMzQwMGNfcmVhZChjbGllbnQsIEkyQ19NU1AzNDAwQ19ERlAsIDB4MWYpOwogCWlmICgoLTEgPT0gbXNwLT5yZXYxKSB8fCAoMCA9PSBtc3AtPnJldjEgJiYgMCA9PSBtc3AtPnJldjIpKSB7CiAJCWtmcmVlKG1zcCk7Ci0JCWtmcmVlKGMpOwotCQlkcHJpbnRrKCJtc3AzNHh4OiBlcnJvciB3aGlsZSByZWFkaW5nIGNoaXAgdmVyc2lvblxuIik7CisJCWtmcmVlKGNsaWVudCk7CisJCW1zcDM0MDBfZGJnKCJlcnJvciB3aGlsZSByZWFkaW5nIGNoaXAgdmVyc2lvblxuIik7CiAJCXJldHVybiAtMTsKIAl9CisJbXNwMzQwMF9kYmcoInJldjE9MHglMDR4LCByZXYyPTB4JTA0eFxuIiwgbXNwLT5yZXYxLCBtc3AtPnJldjIpOwogCi0JbXNwMzQwMGNfc2V0dm9sdW1lKGMsIG1zcC0+bXV0ZWQsIG1zcC0+dm9sdW1lLCBtc3AtPmJhbGFuY2UpOworCW1zcDM0MDBjX3NldHZvbHVtZShjbGllbnQsIG1zcC0+bXV0ZWQsIG1zcC0+bGVmdCwgbXNwLT5yaWdodCk7CiAKLQlzbnByaW50ZihjLT5uYW1lLCBzaXplb2YoYy0+bmFtZSksICJNU1AzNCUwMmQlYy0lYyVkIiwKLQkJIChtc3AtPnJldjI+PjgpJjB4ZmYsIChtc3AtPnJldjEmMHhmZikrJ0AnLAorCXNucHJpbnRmKGNsaWVudC0+bmFtZSwgc2l6ZW9mKGNsaWVudC0+bmFtZSksICJNU1AlYzQlMDJkJWMtJWMlZCIsCisJCSAoKG1zcC0+cmV2MT4+NCkmMHgwZikgKyAnMycsCisJCSAobXNwLT5yZXYyPj44KSYweGZmLCAobXNwLT5yZXYxJjB4MGYpKydAJywKIAkJICgobXNwLT5yZXYxPj44KSYweGZmKSsnQCcsIG1zcC0+cmV2MiYweDFmKTsKIAogCW1zcC0+b3Btb2RlID0gb3Btb2RlOwpAQCAtMTUxMyw3ICsxNjUxLDcgQEAKIAl9CiAKIAkvKiBoZWxsbyB3b3JsZCA6LSkgKi8KLQlwcmludGsoS0VSTl9JTkZPICJtc3AzNHh4OiBpbml0OiBjaGlwPSVzIiwgYy0+bmFtZSk7CisJbXNwMzQwMF9pbmZvKCJjaGlwPSVzIiwgY2xpZW50LT5uYW1lKTsKIAlpZiAoSEFWRV9OSUNBTShtc3ApKQogCQlwcmludGsoIiArbmljYW0iKTsKIAlpZiAoSEFWRV9TSU1QTEUobXNwKSkKQEAgLTE1NDIsMjkgKzE2ODAsNDkgQEAKIAogCS8qIHN0YXJ0dXAgY29udHJvbCB0aHJlYWQgaWYgbmVlZGVkICovCiAJaWYgKHRocmVhZF9mdW5jKSB7Ci0JCW1zcC0+a3RocmVhZCA9IGt0aHJlYWRfcnVuKHRocmVhZF9mdW5jLCBjLCAibXNwMzR4eCIpOworCQltc3AtPmt0aHJlYWQgPSBrdGhyZWFkX3J1bih0aHJlYWRfZnVuYywgY2xpZW50LCAibXNwMzR4eCIpOworCiAJCWlmIChOVUxMID09IG1zcC0+a3RocmVhZCkKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIm1zcDM0eHg6IGtlcm5lbF90aHJlYWQoKSBmYWlsZWRcbiIpOwotCQltc3Bfd2FrZV90aHJlYWQoYyk7CisJCQltc3AzNDAwX3dhcm4oImtlcm5lbF90aHJlYWQoKSBmYWlsZWRcbiIpOworCQltc3Bfd2FrZV90aHJlYWQoY2xpZW50KTsKIAl9CiAKIAkvKiBkb25lICovCi0gICAgICAgIGkyY19hdHRhY2hfY2xpZW50KGMpOworCWkyY19hdHRhY2hfY2xpZW50KGNsaWVudCk7CisKKwkvKiB1cGRhdGUgb3VyIG93biBhcnJheSAqLworCWZvciAoaSA9IDA7IGkgPCBNU1AzNDAwX01BWDsgaSsrKSB7CisJCWlmIChOVUxMID09IG1zcHNbaV0pIHsKKwkJCW1zcHNbaV0gPSBjbGllbnQ7CisJCQlicmVhazsKKwkJfQorCX0KKwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IG1zcF9kZXRhY2goc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKIAlzdHJ1Y3QgbXNwMzQwMGMgKm1zcCAgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlpbnQgaTsKIAogCS8qIHNodXRkb3duIGNvbnRyb2wgdGhyZWFkICovCi0JaWYgKG1zcC0+a3RocmVhZCA+PSAwKSB7CisJaWYgKG1zcC0+a3RocmVhZCkgewogCQltc3AtPnJlc3RhcnQgPSAxOwogCQlrdGhyZWFkX3N0b3AobXNwLT5rdGhyZWFkKTsKIAl9Ci0gICAgCW1zcDM0MDBjX3Jlc2V0KGNsaWVudCk7CisJbXNwMzQwMGNfcmVzZXQoY2xpZW50KTsKKworCS8qIHVwZGF0ZSBvdXIgb3duIGFycmF5ICovCisJZm9yIChpID0gMDsgaSA8IE1TUDM0MDBfTUFYOyBpKyspIHsKKwkJaWYgKGNsaWVudCA9PSBtc3BzW2ldKSB7CisJCQltc3BzW2ldID0gTlVMTDsKKwkJCWJyZWFrOworCQl9CisJfQogCiAJaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKKwogCWtmcmVlKG1zcCk7CiAJa2ZyZWUoY2xpZW50KTsKIAlyZXR1cm4gMDsKQEAgLTE2NDAsNyArMTc5OCw3IEBACiAJY2FzZSBPUE1PREVfTUFOVUFMOgogCWNhc2UgT1BNT0RFX1NJTVBMRToKIAkJbXNwLT53YXRjaF9zdGVyZW8gPSAwOwotCQltc3AzNDAwY19zZXRfYXVkbW9kZShjbGllbnQsIGF1ZG1vZGUpOworCQltc3AzNDAwY19zZXRzdGVyZW8oY2xpZW50LCBhdWRtb2RlKTsKIAkJYnJlYWs7CiAJY2FzZSBPUE1PREVfU0lNUExFUjoKIAkJbXNwMzR4eGdfc2V0X2F1ZG1vZGUoY2xpZW50LCBhdWRtb2RlKTsKQEAgLTE2NDgsMTYgKzE4MDYsMTggQEAKIAl9CiB9CiAKKwogc3RhdGljIGludCBtc3BfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCiB7CiAJc3RydWN0IG1zcDM0MDBjICptc3AgID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0gICAgICAgIF9fdTE2ICAgICAgICAgICAqc2FyZyA9IGFyZzsKKwlfX3UxNiAgICAgICAgICAgKnNhcmcgPSBhcmc7CiAJaW50IHNjYXJ0ID0gMDsKIAogCXN3aXRjaCAoY21kKSB7CiAKIAljYXNlIEFVRENfU0VUX0lOUFVUOgotCQlkcHJpbnRrKEtFUk5fREVCVUcgIm1zcDM0eHg6IEFVRENfU0VUX0lOUFVUKCVkKVxuIiwqc2FyZyk7CisJCW1zcDM0MDBfZGJnKCJBVURDX1NFVF9JTlBVVCglZClcbiIsKnNhcmcpOworCiAJCWlmICgqc2FyZyA9PSBtc3AtPmlucHV0KQogCQkJYnJlYWs7CiAJCW1zcC0+aW5wdXQgPSAqc2FyZzsKQEAgLTE2OTEsMTUgKzE4NTEsMTUgQEAKIAkJCW1zcDM0MDBjX3NldF9zY2FydChjbGllbnQsc2NhcnQsMCk7CiAJCQltc3AzNDAwY193cml0ZShjbGllbnQsSTJDX01TUDM0MDBDX0RGUCwweDAwMGQsMHgxOTAwKTsKIAkJCWlmIChtc3AtPm9wbW9kZSAhPSBPUE1PREVfU0lNUExFUikKLQkJCQltc3AzNDAwY19zZXRfYXVkbW9kZShjbGllbnQsIG1zcC0+YXVkbW9kZSk7CisJCQkJbXNwMzQwMGNfc2V0c3RlcmVvKGNsaWVudCwgbXNwLT5hdWRtb2RlKTsKIAkJfQogCQltc3Bfd2FrZV90aHJlYWQoY2xpZW50KTsKIAkJYnJlYWs7CiAKIAljYXNlIEFVRENfU0VUX1JBRElPOgotCQlkcHJpbnRrKEtFUk5fREVCVUcgIm1zcDM0eHg6IEFVRENfU0VUX1JBRElPXG4iKTsKKwkJbXNwMzQwMF9kYmcoIkFVRENfU0VUX1JBRElPXG4iKTsKIAkJbXNwLT5ub3JtID0gVklERU9fTU9ERV9SQURJTzsKLQkJZHByaW50ayhLRVJOX0RFQlVHICJtc3AzNHh4OiBzd2l0Y2hpbmcgdG8gcmFkaW8gbW9kZVxuIik7CisJCW1zcDM0MDBfZGJnKCJzd2l0Y2hpbmcgdG8gcmFkaW8gbW9kZVxuIik7CiAJCW1zcC0+d2F0Y2hfc3RlcmVvID0gMDsKIAkJc3dpdGNoIChtc3AtPm9wbW9kZSkgewogCQljYXNlIE9QTU9ERV9NQU5VQUw6CkBAIC0xNzA3LDggKzE4NjcsNyBAQAogCQkJbXNwMzQwMGNfc2V0bW9kZShjbGllbnQsTVNQX01PREVfRk1fUkFESU8pOwogCQkJbXNwMzQwMGNfc2V0Y2FycmllcihjbGllbnQsIE1TUF9DQVJSSUVSKDEwLjcpLAogCQkJCQkgICAgTVNQX0NBUlJJRVIoMTAuNykpOwotCQkJbXNwMzQwMGNfc2V0dm9sdW1lKGNsaWVudCwgbXNwLT5tdXRlZCwKLQkJCQkJICAgbXNwLT52b2x1bWUsIG1zcC0+YmFsYW5jZSk7CisJCQltc3AzNDAwY19zZXR2b2x1bWUoY2xpZW50LCBtc3AtPm11dGVkLCBtc3AtPmxlZnQsIG1zcC0+cmlnaHQpOwogCQkJYnJlYWs7CiAJCWNhc2UgT1BNT0RFX1NJTVBMRToKIAkJY2FzZSBPUE1PREVfU0lNUExFUjoKQEAgLTE3MTcsNiArMTg3NiwzMCBAQAogCQkJYnJlYWs7CiAJCX0KIAkJYnJlYWs7CisJCS8qIHdvcmstaW4tcHJvZ3Jlc3M6ICBob29rIHRvIGNvbnRyb2wgdGhlIERGUCByZWdpc3RlcnMgKi8KKwljYXNlIE1TUF9TRVRfREZQUkVHOgorCXsKKwkJc3RydWN0IG1zcF9kZnByZWcgKnIgPSBhcmc7CisJCWludCBpOworCisJCWlmIChyLT5yZWcgPCAwIHx8IHItPnJlZyA+PSBERlBfQ09VTlQpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJZm9yIChpID0gMDsgaSA8IHNpemVvZihibF9kZnApIC8gc2l6ZW9mKGludCk7IGkrKykKKwkJCWlmIChyLT5yZWcgPT0gYmxfZGZwW2ldKQorCQkJCXJldHVybiAtRUlOVkFMOworCQltc3AtPmRmcF9yZWdzW3ItPnJlZ10gPSByLT52YWx1ZTsKKwkJbXNwMzQwMGNfd3JpdGUoY2xpZW50LCBJMkNfTVNQMzQwMENfREZQLCByLT5yZWcsIHItPnZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgTVNQX0dFVF9ERlBSRUc6CisJeworCQlzdHJ1Y3QgbXNwX2RmcHJlZyAqciA9IGFyZzsKKworCQlpZiAoci0+cmVnIDwgMCB8fCByLT5yZWcgPj0gREZQX0NPVU5UKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXItPnZhbHVlID0gbXNwMzQwMGNfcmVhZChjbGllbnQsIEkyQ19NU1AzNDAwQ19ERlAsIHItPnJlZyk7CisJCXJldHVybiAwOworCX0KIAogCS8qIC0tLSB2NGwgaW9jdGxzIC0tLSAqLwogCS8qIHRha2UgY2FyZTogYnR0diBkb2VzIHVzZXJzcGFjZSBjb3B5aW5nLCB3ZSdsbCBnZXQgYQpAQCAtMTcyNSw3ICsxOTA4LDcgQEAKIAl7CiAJCXN0cnVjdCB2aWRlb19hdWRpbyAqdmEgPSBhcmc7CiAKLQkJZHByaW50ayhLRVJOX0RFQlVHICJtc3AzNHh4OiBWSURJT0NHQVVESU9cbiIpOworCQltc3AzNDAwX2RiZygiVklESU9DR0FVRElPXG4iKTsKIAkJdmEtPmZsYWdzIHw9IFZJREVPX0FVRElPX1ZPTFVNRSB8CiAJCQlWSURFT19BVURJT19CQVNTIHwKIAkJCVZJREVPX0FVRElPX1RSRUJMRSB8CkBAIC0xNzMzLDggKzE5MTYsMTUgQEAKIAkJaWYgKG1zcC0+bXV0ZWQpCiAJCQl2YS0+ZmxhZ3MgfD0gVklERU9fQVVESU9fTVVURTsKIAotCQl2YS0+dm9sdW1lID0gbXNwLT52b2x1bWU7Ci0JCXZhLT5iYWxhbmNlID0gKHZhLT52b2x1bWUpID8gbXNwLT5iYWxhbmNlIDogMzI3Njg7CisJCWlmIChtc3AtPm11dGVkKQorCQkJdmEtPmZsYWdzIHw9IFZJREVPX0FVRElPX01VVEU7CisJCXZhLT52b2x1bWUgPSBNQVgobXNwLT5sZWZ0LCBtc3AtPnJpZ2h0KTsKKwkJdmEtPmJhbGFuY2UgPSAoMzI3NjggKiBNSU4obXNwLT5sZWZ0LCBtc3AtPnJpZ2h0KSkgLworCQkgICAgKHZhLT52b2x1bWUgPyB2YS0+dm9sdW1lIDogMSk7CisJCXZhLT5iYWxhbmNlID0gKG1zcC0+bGVmdCA8IG1zcC0+cmlnaHQpID8KKwkJICAgICg2NTUzNSAtIHZhLT5iYWxhbmNlKSA6IHZhLT5iYWxhbmNlOworCQlpZiAoMCA9PSB2YS0+dm9sdW1lKQorCQkJdmEtPmJhbGFuY2UgPSAzMjc2ODsKIAkJdmEtPmJhc3MgPSBtc3AtPmJhc3M7CiAJCXZhLT50cmVibGUgPSBtc3AtPnRyZWJsZTsKIApAQCAtMTc0NiwyNyArMTkzNiw0MyBAQAogCXsKIAkJc3RydWN0IHZpZGVvX2F1ZGlvICp2YSA9IGFyZzsKIAotCQlkcHJpbnRrKEtFUk5fREVCVUcgIm1zcDM0eHg6IFZJRElPQ1NBVURJT1xuIik7CisJCW1zcDM0MDBfZGJnKCJWSURJT0NTQVVESU9cbiIpOwogCQltc3AtPm11dGVkID0gKHZhLT5mbGFncyAmIFZJREVPX0FVRElPX01VVEUpOwotCQltc3AtPnZvbHVtZSA9IHZhLT52b2x1bWU7Ci0JCW1zcC0+YmFsYW5jZSA9IHZhLT5iYWxhbmNlOworCQltc3AtPmxlZnQgPSAoTUlOKDY1NTM2IC0gdmEtPmJhbGFuY2UsIDMyNzY4KSAqCisJCQkgICAgIHZhLT52b2x1bWUpIC8gMzI3Njg7CisJCW1zcC0+cmlnaHQgPSAoTUlOKHZhLT5iYWxhbmNlLCAzMjc2OCkgKiB2YS0+dm9sdW1lKSAvIDMyNzY4OwogCQltc3AtPmJhc3MgPSB2YS0+YmFzczsKIAkJbXNwLT50cmVibGUgPSB2YS0+dHJlYmxlOwotCi0JCW1zcDM0MDBjX3NldHZvbHVtZShjbGllbnQsIG1zcC0+bXV0ZWQsCi0JCQkJICAgbXNwLT52b2x1bWUsIG1zcC0+YmFsYW5jZSk7Ci0JCW1zcDM0MDBjX3NldGJhc3MoY2xpZW50LG1zcC0+YmFzcyk7Ci0JCW1zcDM0MDBjX3NldHRyZWJsZShjbGllbnQsbXNwLT50cmVibGUpOworCQltc3AzNDAwX2RiZygiVklESU9DU0FVRElPIHNldHRpbmcgdmEtPnZvbHVtZSB0byAlZFxuIiwKKwkJCXZhLT52b2x1bWUpOworCQltc3AzNDAwX2RiZygiVklESU9DU0FVRElPIHNldHRpbmcgdmEtPmJhbGFuY2UgdG8gJWRcbiIsCisJCQl2YS0+YmFsYW5jZSk7CisJCW1zcDM0MDBfZGJnKCJWSURJT0NTQVVESU8gc2V0dGluZyB2YS0+ZmxhZ3MgdG8gJWRcbiIsCisJCQl2YS0+ZmxhZ3MpOworCQltc3AzNDAwX2RiZygiVklESU9DU0FVRElPIHNldHRpbmcgbXNwLT5sZWZ0IHRvICVkXG4iLAorCQkJbXNwLT5sZWZ0KTsKKwkJbXNwMzQwMF9kYmcoIlZJRElPQ1NBVURJTyBzZXR0aW5nIG1zcC0+cmlnaHQgdG8gJWRcbiIsCisJCQltc3AtPnJpZ2h0KTsKKwkJbXNwMzQwMF9kYmcoIlZJRElPQ1NBVURJTyBzZXR0aW5nIG1zcC0+YmFzcyB0byAlZFxuIiwKKwkJCW1zcC0+YmFzcyk7CisJCW1zcDM0MDBfZGJnKCJWSURJT0NTQVVESU8gc2V0dGluZyBtc3AtPnRyZWJsZSB0byAlZFxuIiwKKwkJCW1zcC0+dHJlYmxlKTsKKwkJbXNwMzQwMF9kYmcoIlZJRElPQ1NBVURJTyBzZXR0aW5nIG1zcC0+bW9kZSB0byAlZFxuIiwKKwkJCW1zcC0+bW9kZSk7CisJCW1zcDM0MDBjX3NldHZvbHVtZShjbGllbnQsIG1zcC0+bXV0ZWQsIG1zcC0+bGVmdCwgbXNwLT5yaWdodCk7CisJCW1zcDM0MDBjX3NldGJhc3MoY2xpZW50LCBtc3AtPmJhc3MpOworCQltc3AzNDAwY19zZXR0cmVibGUoY2xpZW50LCBtc3AtPnRyZWJsZSk7CiAKIAkJaWYgKHZhLT5tb2RlICE9IDAgJiYgbXNwLT5ub3JtICE9IFZJREVPX01PREVfUkFESU8pCiAJCQltc3BfYW55X3NldF9hdWRtb2RlKGNsaWVudCxtb2RlX3Y0bDFfdG9fdjRsMih2YS0+bW9kZSkpOwogCQlicmVhazsKIAl9CisKIAljYXNlIFZJRElPQ1NDSEFOOgogCXsKIAkJc3RydWN0IHZpZGVvX2NoYW5uZWwgKnZjID0gYXJnOwogCi0JCWRwcmludGsoS0VSTl9ERUJVRyAibXNwMzR4eDogVklESU9DU0NIQU4gKG5vcm09JWQpXG4iLHZjLT5ub3JtKTsKKwkJbXNwMzQwMF9kYmcoIlZJRElPQ1NDSEFOIChub3JtPSVkKVxuIix2Yy0+bm9ybSk7CiAJCW1zcC0+bm9ybSA9IHZjLT5ub3JtOwogCQltc3Bfd2FrZV90aHJlYWQoY2xpZW50KTsKIAkJYnJlYWs7CkBAIC0xNzc2LDEyICsxOTgyLDEzNSBAQAogCWNhc2UgVklESU9DX1NfRlJFUVVFTkNZOgogCXsKIAkJLyogbmV3IGNoYW5uZWwgLS0ga2ljayBhdWRpbyBjYXJyaWVyIHNjYW4gKi8KLQkJZHByaW50ayhLRVJOX0RFQlVHICJtc3AzNHh4OiBWSURJT0NTRlJFUVxuIik7CisJCW1zcDM0MDBfZGJnKCJWSURJT0NTRlJFUVxuIik7CiAJCW1zcF93YWtlX3RocmVhZChjbGllbnQpOwogCQlicmVhazsKIAl9CiAKKwkvKiBtc3AzNHh4IHNwZWNpZmljICovCisJY2FzZSBNU1BfU0VUX01BVFJJWDoKKwl7CisJCXN0cnVjdCBtc3BfbWF0cml4ICptc3BtID0gYXJnOworCisJCW1zcDM0MDBfZGJnKCJNU1BfU0VUX01BVFJJWFxuIik7CisJCW1zcDM0MDBjX3NldF9zY2FydChjbGllbnQsIG1zcG0tPmlucHV0LCBtc3BtLT5vdXRwdXQpOworCQlicmVhazsKKwl9CisKIAkvKiAtLS0gdjRsMiBpb2N0bHMgLS0tICovCisJY2FzZSBWSURJT0NfU19TVEQ6CisJeworCQl2NGwyX3N0ZF9pZCAqaWQgPSBhcmc7CisKKwkJLypGSVhNRTogdXNlIFY0TDIgbW9kZSBmbGFncyBvbiBtc3AzNDAwIGluc3RlYWQgb2YgVjRMMSovCisJCWlmICgqaWQgJiBWNEwyX1NURF9QQUwpIHsKKwkJCW1zcC0+bm9ybT1WSURFT19NT0RFX1BBTDsKKwkJfSBlbHNlIGlmICgqaWQgJiBWNEwyX1NURF9TRUNBTSkgeworCQkJbXNwLT5ub3JtPVZJREVPX01PREVfU0VDQU07CisJCX0gZWxzZSB7CisJCQltc3AtPm5vcm09VklERU9fTU9ERV9OVFNDOworCQl9CisKKwkJbXNwX3dha2VfdGhyZWFkKGNsaWVudCk7CisJCXJldHVybiAwOworCX0KKworCWNhc2UgVklESU9DX0VOVU1JTlBVVDoKKwl7CisJCXN0cnVjdCB2NGwyX2lucHV0ICppID0gYXJnOworCisJCWlmIChpLT5pbmRleCAhPSAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJaS0+dHlwZSA9IFY0TDJfSU5QVVRfVFlQRV9UVU5FUjsKKwkJc3dpdGNoIChpLT5pbmRleCkgeworCQljYXNlIEFVRElPX1JBRElPOgorCQkJc3RyY3B5KGktPm5hbWUsIlJhZGlvIik7CisJCQlicmVhazsKKwkJY2FzZSBBVURJT19FWFRFUk5fMToKKwkJCXN0cmNweShpLT5uYW1lLCJFeHRlcm4gMSIpOworCQkJYnJlYWs7CisJCWNhc2UgQVVESU9fRVhURVJOXzI6CisJCQlzdHJjcHkoaS0+bmFtZSwiRXh0ZXJuIDIiKTsKKwkJCWJyZWFrOworCQljYXNlIEFVRElPX1RVTkVSOgorCQkJc3RyY3B5KGktPm5hbWUsIlRlbGV2aXNpb24iKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCisJY2FzZSBWSURJT0NfR19BVURJTzoKKwl7CisJCXN0cnVjdCB2NGwyX2F1ZGlvICphID0gYXJnOworCisJCW1lbXNldChhLDAsc2l6ZW9mKCphKSk7CisKKwkJc3dpdGNoIChhLT5pbmRleCkgeworCQljYXNlIEFVRElPX1JBRElPOgorCQkJc3RyY3B5KGEtPm5hbWUsIlJhZGlvIik7CisJCQlicmVhazsKKwkJY2FzZSBBVURJT19FWFRFUk5fMToKKwkJCXN0cmNweShhLT5uYW1lLCJFeHRlcm4gMSIpOworCQkJYnJlYWs7CisJCWNhc2UgQVVESU9fRVhURVJOXzI6CisJCQlzdHJjcHkoYS0+bmFtZSwiRXh0ZXJuIDIiKTsKKwkJCWJyZWFrOworCQljYXNlIEFVRElPX1RVTkVSOgorCQkJc3RyY3B5KGEtPm5hbWUsIlRlbGV2aXNpb24iKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQltc3BfYW55X2RldGVjdF9zdGVyZW8oY2xpZW50KTsKKwkJaWYgKG1zcC0+YXVkbW9kZSA9PSBWNEwyX1RVTkVSX01PREVfU1RFUkVPKSB7CisJCQlhLT5jYXBhYmlsaXR5PVY0TDJfQVVEQ0FQX1NURVJFTzsKKwkJfQorCisJCWJyZWFrOworCX0KKwljYXNlIFZJRElPQ19TX0FVRElPOgorCXsKKwkJc3RydWN0IHY0bDJfYXVkaW8gKnNhcmcgPSBhcmc7CisKKwkJc3dpdGNoIChzYXJnLT5pbmRleCkgeworCQljYXNlIEFVRElPX1JBRElPOgorCQkJLyogSGF1cHBhdWdlIHVzZXMgSU4yIGZvciB0aGUgcmFkaW8gKi8KKwkJCW1zcC0+bW9kZSAgID0gTVNQX01PREVfRk1fUkFESU87CisJCQlzY2FydCAgICAgICA9IFNDQVJUX0lOMjsKKwkJCWJyZWFrOworCQljYXNlIEFVRElPX0VYVEVSTl8xOgorCQkJLyogSU4xIGlzIG9mdGVuIHVzZWQgZm9yIGV4dGVybmFsIGlucHV0IC4uLiAqLworCQkJbXNwLT5tb2RlICAgPSBNU1BfTU9ERV9FWFRFUk47CisJCQlzY2FydCAgICAgICA9IFNDQVJUX0lOMTsKKwkJCWJyZWFrOworCQljYXNlIEFVRElPX0VYVEVSTl8yOgorCQkJLyogLi4uIHNvbWV0aW1lcyBpdCBpcyBJTjIgdGhyb3VnaCA7KSAqLworCQkJbXNwLT5tb2RlICAgPSBNU1BfTU9ERV9FWFRFUk47CisJCQlzY2FydCAgICAgICA9IFNDQVJUX0lOMjsKKwkJCWJyZWFrOworCQljYXNlIEFVRElPX1RVTkVSOgorCQkJbXNwLT5tb2RlICAgPSAtMTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChzY2FydCkgeworCQkJbXNwLT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfU1RFUkVPOworCQkJbXNwLT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX1NURVJFTzsKKwkJCW1zcDM0MDBjX3NldF9zY2FydChjbGllbnQsc2NhcnQsMCk7CisJCQltc3AzNDAwY193cml0ZShjbGllbnQsSTJDX01TUDM0MDBDX0RGUCwweDAwMGQsMHgxOTAwKTsKKwkJfQorCQlpZiAoc2FyZy0+Y2FwYWJpbGl0eT09VjRMMl9BVURDQVBfU1RFUkVPKSB7CisJCQltc3AtPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOworCQl9IGVsc2UgeworCQkJbXNwLT5hdWRtb2RlICY9IH5WNEwyX1RVTkVSX01PREVfU1RFUkVPOworCQl9CisJCW1zcF9hbnlfc2V0X2F1ZG1vZGUoY2xpZW50LCBtc3AtPmF1ZG1vZGUpOworCQltc3Bfd2FrZV90aHJlYWQoY2xpZW50KTsKKwkJYnJlYWs7CisJfQogCWNhc2UgVklESU9DX0dfVFVORVI6CiAJewogCQlzdHJ1Y3QgdjRsMl90dW5lciAqdnQgPSBhcmc7CkBAIC0xODA0LDEzICsyMTMzLDQ2IEBACiAJCWJyZWFrOwogCX0KIAotCS8qIG1zcDM0eHggc3BlY2lmaWMgKi8KLQljYXNlIE1TUF9TRVRfTUFUUklYOgorCWNhc2UgVklESU9DX0dfQVVET1VUOgogCXsKLQkJc3RydWN0IG1zcF9tYXRyaXggKm1zcG0gPSBhcmc7CisJCXN0cnVjdCB2NGwyX2F1ZGlvb3V0ICphPShzdHJ1Y3QgdjRsMl9hdWRpb291dCAqKWFyZzsKKwkJaW50IGlkeD1hLT5pbmRleDsKIAotCQlkcHJpbnRrKEtFUk5fREVCVUcgIm1zcDM0eHg6IE1TUF9TRVRfTUFUUklYXG4iKTsKLQkJbXNwMzQwMGNfc2V0X3NjYXJ0KGNsaWVudCwgbXNwbS0+aW5wdXQsIG1zcG0tPm91dHB1dCk7CisJCW1lbXNldChhLDAsc2l6ZW9mKCphKSk7CisKKwkJc3dpdGNoIChpZHgpIHsKKwkJY2FzZSAwOgorCQkJc3RyY3B5KGEtPm5hbWUsIlNjYXJ0MSBPdXQiKTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlzdHJjcHkoYS0+bmFtZSwiU2NhcnQyIE91dCIpOworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCXN0cmNweShhLT5uYW1lLCJJMlMgT3V0Iik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWJyZWFrOworCisJfQorCWNhc2UgVklESU9DX1NfQVVET1VUOgorCXsKKwkJc3RydWN0IHY0bDJfYXVkaW9vdXQgKmE9KHN0cnVjdCB2NGwyX2F1ZGlvb3V0ICopYXJnOworCisJCWlmIChhLT5pbmRleDwwfHxhLT5pbmRleD4yKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJaWYgKGEtPmluZGV4PT0yKSB7CisJCQlpZiAoYS0+bW9kZSA9PSBWNEwyX0FVRE1PREVfMzJCSVRTKQorCQkJCW1zcC0+aTJzX21vZGU9MTsKKwkJCWVsc2UKKwkJCQltc3AtPmkyc19tb2RlPTA7CisJCX0KKwkJbXNwMzQwMF9kYmcoIlNldHRpbmcgYXVkaW8gb3V0IG9uIG1zcDM0eHggdG8gaW5wdXQgJWksIG1vZGUgJWlcbiIsCisJCQkJCQlhLT5pbmRleCxtc3AtPmkyc19tb2RlKTsKKwkJbXNwMzQwMGNfc2V0X3NjYXJ0KGNsaWVudCxtc3AtPmluX3NjYXJ0LGEtPmluZGV4KzEpOworCiAJCWJyZWFrOwogCX0KIApAQCAtMTgyMywxOSArMjE4NSwxOSBAQAogCiBzdGF0aWMgaW50IG1zcF9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKiBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqYyA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBpMmNfY2xpZW50LCBkZXYpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgaTJjX2NsaWVudCwgZGV2KTsKIAotCWRwcmludGsoIm1zcDM0eHg6IHN1c3BlbmRcbiIpOwotCW1zcDM0MDBjX3Jlc2V0KGMpOworCW1zcDM0MDBfZGJnKCJtc3AzNHh4OiBzdXNwZW5kXG4iKTsKKwltc3AzNDAwY19yZXNldChjbGllbnQpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IG1zcF9yZXN1bWUoc3RydWN0IGRldmljZSAqIGRldikKIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqYyA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBpMmNfY2xpZW50LCBkZXYpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgaTJjX2NsaWVudCwgZGV2KTsKIAotCWRwcmludGsoIm1zcDM0eHg6IHJlc3VtZVxuIik7Ci0JbXNwX3dha2VfdGhyZWFkKGMpOworCW1zcDM0MDBfZGJnKCJtc3AzNHh4OiByZXN1bWVcbiIpOworCW1zcF93YWtlX3RocmVhZChjbGllbnQpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL210MjB4eC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9tdDIweHguYwppbmRleCA5NzJhYTVlLi4yMTgwMDE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL210MjB4eC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQyMHh4LmMKQEAgLTc2LDE3ICs3NiwxNyBAQAogCQkJICAgICAgIHVuc2lnbmVkIGludCB4b2djKSAvL2FsbCBpbiBIegogewogCXN0cnVjdCB0dW5lciAqdCA9IGkyY19nZXRfY2xpZW50ZGF0YShjKTsKLSAgICAgICAgdW5zaWduZWQgaW50IGZyZWYsbG8xLGxvMW4sbG8xYSxzLHNlbCxsbzFmcmVxLCBkZXNpcmVkX2xvMSwKKwl1bnNpZ25lZCBpbnQgZnJlZixsbzEsbG8xbixsbzFhLHMsc2VsLGxvMWZyZXEsIGRlc2lyZWRfbG8xLAogCQlkZXNpcmVkX2xvMixsbzIsbG8ybixsbzJhLGxvMm51bSxsbzJmcmVxOwogCi0gICAgICAgIGZyZWY9IDUyNTAgKjEwMDA7IC8vNS4yNU1IegorCWZyZWY9IDUyNTAgKjEwMDA7IC8vNS4yNU1IegogCWRlc2lyZWRfbG8xPXJmaW4raWYxOwogCiAJbG8xPSgyKihkZXNpcmVkX2xvMS8xMDAwKSsoZnJlZi8xMDAwKSkgLyAoMipmcmVmLzEwMDApOwotICAgICAgICBsbzFuPWxvMS84OwotICAgICAgICBsbzFhPWxvMS0obG8xbio4KTsKKwlsbzFuPWxvMS84OworCWxvMWE9bG8xLShsbzFuKjgpOwogCi0gICAgICAgIHM9cmZpbi8xMDAwLzEwMDArMTA5MDsKKwlzPXJmaW4vMTAwMC8xMDAwKzEwOTA7CiAKIAlpZihvcHRpbWl6ZV92Y28pIHsKIAkJaWYocz4xODkwKSBzZWw9MDsKQEAgLTk2LDM0ICs5NiwzNCBAQAogCQllbHNlIHNlbD00OyAvLyA+MTA5MAogCX0KIAllbHNlIHsKLSAgICAgICAgCWlmKHM+MTc5MCkgc2VsPTA7IC8vIDwxOTU4Ci0gICAgICAgIAllbHNlIGlmKHM+MTYxNykgc2VsPTE7Ci0gICAgICAgIAllbHNlIGlmKHM+MTQ0OSkgc2VsPTI7Ci0gICAgICAgIAllbHNlIGlmKHM+MTI5MSkgc2VsPTM7Ci0gICAgICAgIAllbHNlIHNlbD00OyAvLyA+MTA5MAorCQlpZihzPjE3OTApIHNlbD0wOyAvLyA8MTk1OAorCQllbHNlIGlmKHM+MTYxNykgc2VsPTE7CisJCWVsc2UgaWYocz4xNDQ5KSBzZWw9MjsKKwkJZWxzZSBpZihzPjEyOTEpIHNlbD0zOworCQllbHNlIHNlbD00OyAvLyA+MTA5MAogCX0KIAkqcmV0X3NlbD1zZWw7CiAKLSAgICAgICAgbG8xZnJlcT0obG8xYSs4KmxvMW4pKmZyZWY7CisJbG8xZnJlcT0obG8xYSs4KmxvMW4pKmZyZWY7CiAKIAl0dW5lcl9kYmcoIm10MjAzMjogcmZpbj0lZCBsbzE9JWQgbG8xbj0lZCBsbzFhPSVkIHNlbD0lZCwgbG8xZnJlcT0lZFxuIiwKIAkJICByZmluLGxvMSxsbzFuLGxvMWEsc2VsLGxvMWZyZXEpOwogCi0gICAgICAgIGRlc2lyZWRfbG8yPWxvMWZyZXEtcmZpbi1pZjI7Ci0gICAgICAgIGxvMj0oZGVzaXJlZF9sbzIpL2ZyZWY7Ci0gICAgICAgIGxvMm49bG8yLzg7Ci0gICAgICAgIGxvMmE9bG8yLShsbzJuKjgpOwotICAgICAgICBsbzJudW09KChkZXNpcmVkX2xvMi8xMDAwKSUoZnJlZi8xMDAwKSkqIDM3ODAvKGZyZWYvMTAwMCk7IC8vc2NhbGUgdG8gZml0IGluIDMyYml0IGFyaXRoCi0gICAgICAgIGxvMmZyZXE9KGxvMmErOCpsbzJuKSpmcmVmICsgbG8ybnVtKihmcmVmLzEwMDApLzM3ODAqMTAwMDsKKwlkZXNpcmVkX2xvMj1sbzFmcmVxLXJmaW4taWYyOworCWxvMj0oZGVzaXJlZF9sbzIpL2ZyZWY7CisJbG8ybj1sbzIvODsKKwlsbzJhPWxvMi0obG8ybio4KTsKKwlsbzJudW09KChkZXNpcmVkX2xvMi8xMDAwKSUoZnJlZi8xMDAwKSkqIDM3ODAvKGZyZWYvMTAwMCk7IC8vc2NhbGUgdG8gZml0IGluIDMyYml0IGFyaXRoCisJbG8yZnJlcT0obG8yYSs4KmxvMm4pKmZyZWYgKyBsbzJudW0qKGZyZWYvMTAwMCkvMzc4MCoxMDAwOwogCiAJdHVuZXJfZGJnKCJtdDIwMzI6IHJmaW49JWQgbG8yPSVkIGxvMm49JWQgbG8yYT0lZCBudW09JWQgbG8yZnJlcT0lZFxuIiwKIAkJICByZmluLGxvMixsbzJuLGxvMmEsbG8ybnVtLGxvMmZyZXEpOwogCi0gICAgICAgIGlmKGxvMWE8MCB8fCBsbzFhPjcgfHwgbG8xbjwxNyB8fGxvMW4+NDggfHwgbG8yYTwwIHx8bG8yYSA+NyB8fGxvMm48MTcgfHwgbG8ybj4zMCkgeworCWlmKGxvMWE8MCB8fCBsbzFhPjcgfHwgbG8xbjwxNyB8fGxvMW4+NDggfHwgbG8yYTwwIHx8bG8yYSA+NyB8fGxvMm48MTcgfHwgbG8ybj4zMCkgewogCQl0dW5lcl9pbmZvKCJtdDIwMzI6IGZyZXF1ZW5jeSBwYXJhbWV0ZXJzIG91dCBvZiByYW5nZTogJWQgJWQgJWQgJWRcbiIsCiAJCQkgICBsbzFhLCBsbzFuLCBsbzJhLGxvMm4pOwotICAgICAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgIH0KKwkJcmV0dXJuKC0xKTsKKwl9CiAKIAltdDIwMzJfc3B1cmNoZWNrKGMsIGxvMWZyZXEsIGRlc2lyZWRfbG8yLCAgc3BlY3RydW1fZnJvbSwgc3BlY3RydW1fdG8pOwogCS8vIHNob3VsZCByZWNhbGN1bGF0ZSBsbzEgKG9uZSBzdGVwIHVwL2Rvd24pCkBAIC0xMzUsMTAgKzEzNSwxMCBAQAogCWJ1ZlszXT0weDBmOyAvL3Jlc2VydmVkCiAJYnVmWzRdPTB4MWY7CiAJYnVmWzVdPShsbzJuLTEpIHwgKGxvMmE8PDUpOwotIAlpZihyZmluID40MDAqMTAwMCoxMDAwKQotICAgICAgICAgICAgICAgIGJ1Zls2XT0weGU0OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYnVmWzZdPTB4ZjQ7IC8vIHNldCBQS0VOIHBlciByZXYgMS4yCisJaWYocmZpbiA+NDAwKjEwMDAqMTAwMCkKKwkJYnVmWzZdPTB4ZTQ7CisJZWxzZQorCQlidWZbNl09MHhmNDsgLy8gc2V0IFBLRU4gcGVyIHJldiAxLjIKIAlidWZbN109OCt4b2djOwogCWJ1Zls4XT0weGMzOyAvL3Jlc2VydmVkCiAJYnVmWzldPTB4NGU7IC8vcmVzZXJ2ZWQKQEAgLTE2OCw3ICsxNjgsNyBAQAogCQl0dW5lcl9kYmcoIm10MjAzMjogcGxsIHdhaXQgMW1zIGZvciBsb2NrICgweCUyeClcbiIsYnVmWzBdKTsKIAkJdWRlbGF5KDEwMDApOwogCX0KLSAgICAgICAgcmV0dXJuIGxvY2s7CisJcmV0dXJuIGxvY2s7CiB9CiAKIHN0YXRpYyBpbnQgbXQyMDMyX29wdGltaXplX3ZjbyhzdHJ1Y3QgaTJjX2NsaWVudCAqYyxpbnQgc2VsLGludCBsb2NrKQpAQCAtMjAyLDcgKzIwMiw3IEBACiAKIAlidWZbMF09MHgwZjsKIAlidWZbMV09c2VsOwotICAgICAgICBpMmNfbWFzdGVyX3NlbmQoYyxidWYsMik7CisJaTJjX21hc3Rlcl9zZW5kKGMsYnVmLDIpOwogCWxvY2s9bXQyMDMyX2NoZWNrX2xvX2xvY2soYyk7CiAJcmV0dXJuIGxvY2s7CiB9CkBAIC0yMTksMjMgKzIxOSwyMyBAQAogCXR1bmVyX2RiZygibXQyMDMyX3NldF9pZl9mcmVxIHJmaW49JWQgaWYxPSVkIGlmMj0lZCBmcm9tPSVkIHRvPSVkXG4iLAogCQkgIHJmaW4saWYxLGlmMixmcm9tLHRvKTsKIAotICAgICAgICBidWZbMF09MDsKLSAgICAgICAgcmV0PWkyY19tYXN0ZXJfc2VuZChjLGJ1ZiwxKTsKLSAgICAgICAgaTJjX21hc3Rlcl9yZWN2KGMsYnVmLDIxKTsKKwlidWZbMF09MDsKKwlyZXQ9aTJjX21hc3Rlcl9zZW5kKGMsYnVmLDEpOworCWkyY19tYXN0ZXJfcmVjdihjLGJ1ZiwyMSk7CiAKIAlidWZbMF09MDsKIAlyZXQ9bXQyMDMyX2NvbXB1dGVfZnJlcShjLHJmaW4saWYxLGlmMixmcm9tLHRvLCZidWZbMV0sJnNlbCx0LT54b2djKTsKIAlpZiAocmV0PDApCiAJCXJldHVybjsKIAotICAgICAgICAvLyBzZW5kIG9ubHkgdGhlIHJlbGV2YW50IHJlZ2lzdGVycyBwZXIgUmV2LiAxLjIKLSAgICAgICAgYnVmWzBdPTA7Ci0gICAgICAgIHJldD1pMmNfbWFzdGVyX3NlbmQoYyxidWYsNCk7Ci0gICAgICAgIGJ1Zls1XT01OwotICAgICAgICByZXQ9aTJjX21hc3Rlcl9zZW5kKGMsYnVmKzUsNCk7Ci0gICAgICAgIGJ1ZlsxMV09MTE7Ci0gICAgICAgIHJldD1pMmNfbWFzdGVyX3NlbmQoYyxidWYrMTEsMyk7Ci0gICAgICAgIGlmKHJldCE9MykKKwkvLyBzZW5kIG9ubHkgdGhlIHJlbGV2YW50IHJlZ2lzdGVycyBwZXIgUmV2LiAxLjIKKwlidWZbMF09MDsKKwlyZXQ9aTJjX21hc3Rlcl9zZW5kKGMsYnVmLDQpOworCWJ1Zls1XT01OworCXJldD1pMmNfbWFzdGVyX3NlbmQoYyxidWYrNSw0KTsKKwlidWZbMTFdPTExOworCXJldD1pMmNfbWFzdGVyX3NlbmQoYyxidWYrMTEsMyk7CisJaWYocmV0IT0zKQogCQl0dW5lcl93YXJuKCJpMmMgaS9vIGVycm9yOiByYyA9PSAlZCAoc2hvdWxkIGJlIDMpXG4iLHJldCk7CiAKIAkvLyB3YWl0IGZvciBQTExzIHRvIGxvY2sgKHBlciBtYW51YWwpLCByZXRyeSBMSU5UIGlmIG5vdC4KQEAgLTI1Myw3ICsyNTMsNyBAQAogCQltZGVsYXkoMTApOwogCQlidWZbMV09OCt0LT54b2djOwogCQlpMmNfbWFzdGVyX3NlbmQoYyxidWYsMik7Ci0gICAgICAgIH0KKwl9CiAKIAlpZiAobG9jayE9NikKIAkJdHVuZXJfd2FybigiTVQyMDMyIEZhdGFsIEVycm9yOiBQTExzIGRpZG4ndCBsb2NrLlxuIik7CkBAIC0yODQsNyArMjg0LDcgQEAKIAkJaWYyICA9IDM4OTAwKjEwMDA7CiAJfQogCi0gICAgICAgIG10MjAzMl9zZXRfaWZfZnJlcShjLCBmcmVxKjYyNTAwIC8qIGZyZXEqMTAwMCoxMDAwLzE2ICovLAorCW10MjAzMl9zZXRfaWZfZnJlcShjLCBmcmVxKjYyNTAwIC8qIGZyZXEqMTAwMCoxMDAwLzE2ICovLAogCQkJICAgMTA5MCoxMDAwKjEwMDAsIGlmMiwgZnJvbSwgdG8pOwogfQogCkBAIC0yOTQsNyArMjk0LDcgQEAKIAlpbnQgaWYyID0gdC0+cmFkaW9faWYyOwogCiAJLy8gcGVyIE1hbnVhbCBmb3IgRk0gdHVuaW5nOiBmaXJzdCBpZiBjZW50ZXIgZnJlcS4gMTA4NSBNSHoKLSAgICAgICAgbXQyMDMyX3NldF9pZl9mcmVxKGMsIGZyZXEgKiAxMDAwIC8gMTYsCisJbXQyMDMyX3NldF9pZl9mcmVxKGMsIGZyZXEgKiAxMDAwIC8gMTYsCiAJCQkgICAgICAxMDg1KjEwMDAqMTAwMCxpZjIsaWYyLGlmMik7CiB9CiAKQEAgLTMwMiw1NyArMzAyLDU3IEBACiBzdGF0aWMgaW50IG10MjAzMl9pbml0KHN0cnVjdCBpMmNfY2xpZW50ICpjKQogewogCXN0cnVjdCB0dW5lciAqdCA9IGkyY19nZXRfY2xpZW50ZGF0YShjKTsKLSAgICAgICAgdW5zaWduZWQgY2hhciBidWZbMjFdOwotICAgICAgICBpbnQgcmV0LHhvZ2MseG9rPTA7CisJdW5zaWduZWQgY2hhciBidWZbMjFdOworCWludCByZXQseG9nYyx4b2s9MDsKIAogCS8vIEluaXRpYWxpemUgUmVnaXN0ZXJzIHBlciBzcGVjLgotICAgICAgICBidWZbMV09MjsgLy8gSW5kZXggdG8gcmVnaXN0ZXIgMgotICAgICAgICBidWZbMl09MHhmZjsKLSAgICAgICAgYnVmWzNdPTB4MGY7Ci0gICAgICAgIGJ1Zls0XT0weDFmOwotICAgICAgICByZXQ9aTJjX21hc3Rlcl9zZW5kKGMsYnVmKzEsNCk7CisJYnVmWzFdPTI7IC8vIEluZGV4IHRvIHJlZ2lzdGVyIDIKKwlidWZbMl09MHhmZjsKKwlidWZbM109MHgwZjsKKwlidWZbNF09MHgxZjsKKwlyZXQ9aTJjX21hc3Rlcl9zZW5kKGMsYnVmKzEsNCk7CiAKLSAgICAgICAgYnVmWzVdPTY7IC8vIEluZGV4IHJlZ2lzdGVyIDYKLSAgICAgICAgYnVmWzZdPTB4ZTQ7Ci0gICAgICAgIGJ1Zls3XT0weDhmOwotICAgICAgICBidWZbOF09MHhjMzsKLSAgICAgICAgYnVmWzldPTB4NGU7Ci0gICAgICAgIGJ1ZlsxMF09MHhlYzsKLSAgICAgICAgcmV0PWkyY19tYXN0ZXJfc2VuZChjLGJ1Zis1LDYpOworCWJ1Zls1XT02OyAvLyBJbmRleCByZWdpc3RlciA2CisJYnVmWzZdPTB4ZTQ7CisJYnVmWzddPTB4OGY7CisJYnVmWzhdPTB4YzM7CisJYnVmWzldPTB4NGU7CisJYnVmWzEwXT0weGVjOworCXJldD1pMmNfbWFzdGVyX3NlbmQoYyxidWYrNSw2KTsKIAotICAgICAgICBidWZbMTJdPTEzOyAgLy8gSW5kZXggcmVnaXN0ZXIgMTMKLSAgICAgICAgYnVmWzEzXT0weDMyOwotICAgICAgICByZXQ9aTJjX21hc3Rlcl9zZW5kKGMsYnVmKzEyLDIpOworCWJ1ZlsxMl09MTM7ICAvLyBJbmRleCByZWdpc3RlciAxMworCWJ1ZlsxM109MHgzMjsKKwlyZXQ9aTJjX21hc3Rlcl9zZW5kKGMsYnVmKzEyLDIpOwogCi0gICAgICAgIC8vIEFkanVzdCBYT0dDIChyZWdpc3RlciA3KSwgd2FpdCBmb3IgWE9LCi0gICAgICAgIHhvZ2M9NzsKLSAgICAgICAgZG8geworCS8vIEFkanVzdCBYT0dDIChyZWdpc3RlciA3KSwgd2FpdCBmb3IgWE9LCisJeG9nYz03OworCWRvIHsKIAkJdHVuZXJfZGJnKCJtdDIwMzI6IHhvZ2MgPSAweCUwMnhcbiIseG9nYyYweDA3KTsKLSAgICAgICAgICAgICAgICBtZGVsYXkoMTApOwotICAgICAgICAgICAgICAgIGJ1ZlswXT0weDBlOwotICAgICAgICAgICAgICAgIGkyY19tYXN0ZXJfc2VuZChjLGJ1ZiwxKTsKLSAgICAgICAgICAgICAgICBpMmNfbWFzdGVyX3JlY3YoYyxidWYsMSk7Ci0gICAgICAgICAgICAgICAgeG9rPWJ1ZlswXSYweDAxOwotICAgICAgICAgICAgICAgIHR1bmVyX2RiZygibXQyMDMyOiB4b2sgPSAweCUwMnhcbiIseG9rKTsKLSAgICAgICAgICAgICAgICBpZiAoeG9rID09IDEpIGJyZWFrOworCQltZGVsYXkoMTApOworCQlidWZbMF09MHgwZTsKKwkJaTJjX21hc3Rlcl9zZW5kKGMsYnVmLDEpOworCQlpMmNfbWFzdGVyX3JlY3YoYyxidWYsMSk7CisJCXhvaz1idWZbMF0mMHgwMTsKKwkJdHVuZXJfZGJnKCJtdDIwMzI6IHhvayA9IDB4JTAyeFxuIix4b2spOworCQlpZiAoeG9rID09IDEpIGJyZWFrOwogCi0gICAgICAgICAgICAgICAgeG9nYy0tOwotICAgICAgICAgICAgICAgIHR1bmVyX2RiZygibXQyMDMyOiB4b2djID0gMHglMDJ4XG4iLHhvZ2MmMHgwNyk7Ci0gICAgICAgICAgICAgICAgaWYgKHhvZ2MgPT0gMykgewotICAgICAgICAgICAgICAgICAgICAgICAgeG9nYz00OyAvLyBtaW4uIDQgcGVyIHNwZWMKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBidWZbMF09MHgwNzsKLSAgICAgICAgICAgICAgICBidWZbMV09MHg4OCArIHhvZ2M7Ci0gICAgICAgICAgICAgICAgcmV0PWkyY19tYXN0ZXJfc2VuZChjLGJ1ZiwyKTsKLSAgICAgICAgICAgICAgICBpZiAocmV0IT0yKQorCQl4b2djLS07CisJCXR1bmVyX2RiZygibXQyMDMyOiB4b2djID0gMHglMDJ4XG4iLHhvZ2MmMHgwNyk7CisJCWlmICh4b2djID09IDMpIHsKKwkJCXhvZ2M9NDsgLy8gbWluLiA0IHBlciBzcGVjCisJCQlicmVhazsKKwkJfQorCQlidWZbMF09MHgwNzsKKwkJYnVmWzFdPTB4ODggKyB4b2djOworCQlyZXQ9aTJjX21hc3Rlcl9zZW5kKGMsYnVmLDIpOworCQlpZiAocmV0IT0yKQogCQkJdHVuZXJfd2FybigiaTJjIGkvbyBlcnJvcjogcmMgPT0gJWQgKHNob3VsZCBiZSAyKVxuIixyZXQpOwotICAgICAgICB9IHdoaWxlICh4b2sgIT0gMSApOworCX0gd2hpbGUgKHhvayAhPSAxICk7CiAJdC0+eG9nYz14b2djOwogCiAJdC0+dHZfZnJlcSAgICA9IG10MjAzMl9zZXRfdHZfZnJlcTsKIAl0LT5yYWRpb19mcmVxID0gbXQyMDMyX3NldF9yYWRpb19mcmVxOwotICAgICAgICByZXR1cm4oMSk7CisJcmV0dXJuKDEpOwogfQogCiBzdGF0aWMgdm9pZCBtdDIwNTBfc2V0X2FudGVubmEoc3RydWN0IGkyY19jbGllbnQgKmMsIHVuc2lnbmVkIGNoYXIgYW50ZW5uYSkKQEAgLTQyNiw3ICs0MjYsNyBAQAogCX0KIAogCXJldD1pMmNfbWFzdGVyX3NlbmQoYyxidWYsNik7Ci0gICAgICAgIGlmIChyZXQhPTYpCisJaWYgKHJldCE9NikKIAkJdHVuZXJfd2FybigiaTJjIGkvbyBlcnJvcjogcmMgPT0gJWQgKHNob3VsZCBiZSA2KVxuIixyZXQpOwogfQogCkBAIC00MzcsMTEgKzQzNywxMSBAQAogCiAJaWYgKHQtPnN0ZCAmIFY0TDJfU1REXzUyNV82MCkgewogCQkvLyBOVFNDCi0gICAgICAgICAgICAgICAgaWYyID0gNDU3NTAqMTAwMDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBQQUwKLSAgICAgICAgICAgICAgICBpZjIgPSAzODkwMCoxMDAwOwotICAgICAgICB9CisJCWlmMiA9IDQ1NzUwKjEwMDA7CisJfSBlbHNlIHsKKwkJLy8gUEFMCisJCWlmMiA9IDM4OTAwKjEwMDA7CisJfQogCWlmIChWNEwyX1RVTkVSX0RJR0lUQUxfVFYgPT0gdC0+bW9kZSkgewogCQkvLyBEVkIgKHBpbm5hY2xlIDMwMGkpCiAJCWlmMiA9IDM2MTUwKjEwMDA7CkBAIC00NTUsNyArNDU1LDcgQEAKIAlzdHJ1Y3QgdHVuZXIgKnQgPSBpMmNfZ2V0X2NsaWVudGRhdGEoYyk7CiAJaW50IGlmMiA9IHQtPnJhZGlvX2lmMjsKIAotCW10MjA1MF9zZXRfaWZfZnJlcShjLCBmcmVxKjYyNTAwLCBpZjIpOworCW10MjA1MF9zZXRfaWZfZnJlcShjLCBmcmVxICogMTAwMCAvIDE2LCBpZjIpOwogCW10MjA1MF9zZXRfYW50ZW5uYShjLCByYWRpb19hbnRlbm5hKTsKIH0KIApAQCAtNDg3LDcgKzQ4Nyw3IEBACiB7CiAJc3RydWN0IHR1bmVyICp0ID0gaTJjX2dldF9jbGllbnRkYXRhKGMpOwogCWNoYXIgKm5hbWU7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgYnVmWzIxXTsKKwl1bnNpZ25lZCBjaGFyIGJ1ZlsyMV07CiAJaW50IGNvbXBhbnlfY29kZTsKIAogCW1lbXNldChidWYsMCxzaXplb2YoYnVmKSk7CkBAIC00OTYsMTcgKzQ5NiwxNyBAQAogCXQtPnN0YW5kYnkgICAgPSBOVUxMOwogCW5hbWUgPSAidW5rbm93biI7CiAKLSAgICAgICAgaTJjX21hc3Rlcl9zZW5kKGMsYnVmLDEpOwotICAgICAgICBpMmNfbWFzdGVyX3JlY3YoYyxidWYsMjEpOwotICAgICAgICBpZiAodHVuZXJfZGVidWcpIHsKLSAgICAgICAgICAgICAgICBpbnQgaTsKKwlpMmNfbWFzdGVyX3NlbmQoYyxidWYsMSk7CisJaTJjX21hc3Rlcl9yZWN2KGMsYnVmLDIxKTsKKwlpZiAodHVuZXJfZGVidWcpIHsKKwkJaW50IGk7CiAJCXR1bmVyX2RiZygiTVQyMHh4IGhleGR1bXA6Iik7Ci0gICAgICAgICAgICAgICAgZm9yKGk9MDtpPDIxO2krKykgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCIgJTAyeCIsYnVmW2ldKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKCgoaSsxKSU4KT09MCkgcHJpbnRrKCIgIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHByaW50aygiXG4iKTsKLSAgICAgICAgfQorCQlmb3IoaT0wO2k8MjE7aSsrKSB7CisJCQlwcmludGsoIiAlMDJ4IixidWZbaV0pOworCQkJaWYoKChpKzEpJTgpPT0wKSBwcmludGsoIiAiKTsKKwkJfQorCQlwcmludGsoIlxuIik7CisJfQogCWNvbXBhbnlfY29kZSA9IGJ1ZlsweDExXSA8PCA4IHwgYnVmWzB4MTJdOwogCXR1bmVyX2luZm8oIm1pY3JvdHVuZTogY29tcGFueWNvZGU9JTA0eCBwYXJ0PSUwMnggcmV2PSUwMnhcbiIsCiAJCSAgIGNvbXBhbnlfY29kZSxidWZbMHgxM10sYnVmWzB4MTRdKTsKQEAgLTUyNSw4ICs1MjUsOCBAQAogCWRlZmF1bHQ6CiAJCXR1bmVyX2luZm8oIm1pY3JvdHVuZSAlcyBmb3VuZCwgbm90ICh5ZXQ/KSBzdXBwb3J0ZWQsIHNvcnJ5IDotL1xuIiwKIAkJCSAgIG5hbWUpOwotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9CisJCXJldHVybiAwOworCX0KIAogCXN0cmxjcHkoYy0+bmFtZSwgbmFtZSwgc2l6ZW9mKGMtPm5hbWUpKTsKIAl0dW5lcl9pbmZvKCJtaWNyb3R1bmUgJXMgZm91bmQsIE9LXG4iLG5hbWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE2NTg4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTY1ODguYwppbmRleCA3MmI3MGViLi5kY2EzZGRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTY1ODguYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTY1ODguYwpAQCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCi0jaW5jbHVkZSA8bWVkaWEvaWQuaD4KIAogI2luY2x1ZGUgInJkcy5oIgogCkBAIC0yNDYsNyArMjQ1LDcgQEAKIAkJcy0+d3JfaW5kZXggPSAwOwogCiAJaWYgKHMtPndyX2luZGV4ID09IHMtPnJkX2luZGV4KSB7Ci0JCXMtPnJkX2luZGV4Kys7CisJCXMtPnJkX2luZGV4ICs9IDM7CiAJCWlmIChzLT5yZF9pbmRleCA+PSBzLT5idWZfc2l6ZSkKIAkJCXMtPnJkX2luZGV4ID0gMDsKIAl9IGVsc2UKQEAgLTMyOCw3ICszMjcsNyBAQAogCXN0cnVjdCBzYWE2NTg4ICpzID0gKHN0cnVjdCBzYWE2NTg4ICopZGF0YTsKIAogCXNhYTY1ODhfaTJjX3BvbGwocyk7Ci0JbW9kX3RpbWVyKCZzLT50aW1lciwgamlmZmllcyArIEhaIC8gNTApOwkvKiAyMCBtc2VjICovCisJbW9kX3RpbWVyKCZzLT50aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMjApKTsKIH0KIAogc3RhdGljIGludCBzYWE2NTg4X2NvbmZpZ3VyZShzdHJ1Y3Qgc2FhNjU4OCAqcykKQEAgLTQzNCw5ICs0MzMsOSBAQAogCQlyZXR1cm4gaTJjX3Byb2JlKGFkYXAsICZhZGRyX2RhdGEsIHNhYTY1ODhfYXR0YWNoKTsKICNlbHNlCiAJc3dpdGNoIChhZGFwLT5pZCkgewotCWNhc2UgSTJDX0FMR09fQklUIHwgSTJDX0hXX0JfQlQ4NDg6Ci0JY2FzZSBJMkNfQUxHT19CSVQgfCBJMkNfSFdfQl9SSVZBOgotCWNhc2UgSTJDX0FMR09fU0FBNzEzNDoKKwljYXNlIEkyQ19IV19CX0JUODQ4OgorCWNhc2UgSTJDX0hXX0JfUklWQToKKwljYXNlIEkyQ19IV19TQUE3MTM0OgogCQlyZXR1cm4gaTJjX3Byb2JlKGFkYXAsICZhZGRyX2RhdGEsIHNhYTY1ODhfYXR0YWNoKTsKIAkJYnJlYWs7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTF4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWE4ODI3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTF4LmMKQEAgLTAsMCArMSw1OTMgQEAKKy8qCisgKiBzYWE3MTF4IC0gUGhpbGlwcyBTQUE3MTF4IHZpZGVvIGRlY29kZXIgZHJpdmVyIHZlcnNpb24gMC4wLjEKKyAqCisgKiBUbyBkbzogTm93LCBpdCBoYW5kbGVzIG9ubHkgc2FhNzExMy83MTE0LiBTaG91bGQgYmUgaW1wcm92ZWQgdG8KKyAqIGhhbmRsZSBhbGwgUGhpbGlwcyBzYWE3MTF4IGRldmljZXMuCisgKgorICogQmFzZWQgb24gc2FhNzExMyBkcml2ZXIgZnJvbSBEYXZlIFBlcmtzIDxkcGVya3NAaWJtLm5ldD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KKworTU9EVUxFX0RFU0NSSVBUSU9OKCJQaGlsaXBzIFNBQTcxMXggdmlkZW8gZGVjb2RlciBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIkRhdmUgUGVya3MsIEpvc2UgSWduYWNpbyBHaWpvbiwgSm9lcmcgSGVja2VuYmFjaCwgTWFyayBNY0NsZWxsYW5kLCBEd2FpbmUgR2FyZGVuIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMtZGV2Lmg+CisKKyNkZWZpbmUgSTJDX05BTUUocykgKHMpLT5uYW1lCisKKyNpbmNsdWRlIDxsaW51eC92aWRlb19kZWNvZGVyLmg+CisKK3N0YXRpYyBpbnQgZGVidWcgPSAwOworTU9EVUxFX1BBUk0oZGVidWcsICJpIik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiIFNldCB0aGUgZGVmYXVsdCBEZWJ1ZyBsZXZlbC4gIERlZmF1bHQ6IDAgKE9mZikgLSAoMC0xKSIpOworCisKKyNkZWZpbmUgZHByaW50ayhudW0sIGZvcm1hdCwgYXJncy4uLikgXAorCWRvIHsgXAorCQlpZiAoZGVidWcgPj0gbnVtKSBcCisJCQlwcmludGsoZm9ybWF0ICwgIyNhcmdzKTsgXAorCX0gd2hpbGUgKDApCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0cnVjdCBzYWE3MTF4IHsKKwl1bnNpZ25lZCBjaGFyIHJlZ1szMl07CisKKwlpbnQgbm9ybTsKKwlpbnQgaW5wdXQ7CisJaW50IGVuYWJsZTsKKwlpbnQgYnJpZ2h0OworCWludCBjb250cmFzdDsKKwlpbnQgaHVlOworCWludCBzYXQ7Cit9OworCisjZGVmaW5lICAgSTJDX1NBQTcxMTMgICAgICAgIDB4NEEKKyNkZWZpbmUgICBJMkNfU0FBNzExNCAgICAgICAgMHg0MgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW5saW5lIGludAorc2FhNzExeF93cml0ZSAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkgICAgICAgdTggICAgICAgICAgICAgICAgIHJlZywKKwkgICAgICAgdTggICAgICAgICAgICAgICAgIHZhbHVlKQoreworCXN0cnVjdCBzYWE3MTF4ICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwlkZWNvZGVyLT5yZWdbcmVnXSA9IHZhbHVlOworCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyBpbnQKK3NhYTcxMXhfd3JpdGVfYmxvY2sgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCSAgICAgY29uc3QgdTggICAgICAgICAgKmRhdGEsCisJCSAgICAgdW5zaWduZWQgaW50ICAgICAgIGxlbikKK3sKKwlpbnQgcmV0ID0gLTE7CisJdTggcmVnOworCisJLyogdGhlIHNhYTcxMXggaGFzIGFuIGF1dG9pbmNyZW1lbnQgZnVuY3Rpb24sIHVzZSBpdCBpZgorCSAqIHRoZSBhZGFwdGVyIHVuZGVyc3RhbmRzIHJhdyBJMkMgKi8KKwlpZiAoaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLCBJMkNfRlVOQ19JMkMpKSB7CisJCS8qIGRvIHJhdyBJMkMsIG5vdCBzbWJ1cyBjb21wYXRpYmxlICovCisJCXN0cnVjdCBzYWE3MTF4ICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJCXN0cnVjdCBpMmNfbXNnIG1zZzsKKwkJdTggYmxvY2tfZGF0YVszMl07CisKKwkJbXNnLmFkZHIgPSBjbGllbnQtPmFkZHI7CisJCW1zZy5mbGFncyA9IDA7CisJCXdoaWxlIChsZW4gPj0gMikgeworCQkJbXNnLmJ1ZiA9IChjaGFyICopIGJsb2NrX2RhdGE7CisJCQltc2cubGVuID0gMDsKKwkJCWJsb2NrX2RhdGFbbXNnLmxlbisrXSA9IHJlZyA9IGRhdGFbMF07CisJCQlkbyB7CisJCQkJYmxvY2tfZGF0YVttc2cubGVuKytdID0KKwkJCQkgICAgZGVjb2Rlci0+cmVnW3JlZysrXSA9IGRhdGFbMV07CisJCQkJbGVuIC09IDI7CisJCQkJZGF0YSArPSAyOworCQkJfSB3aGlsZSAobGVuID49IDIgJiYgZGF0YVswXSA9PSByZWcgJiYKKwkJCQkgbXNnLmxlbiA8IDMyKTsKKwkJCWlmICgocmV0ID0gaTJjX3RyYW5zZmVyKGNsaWVudC0+YWRhcHRlciwKKwkJCQkJCSZtc2csIDEpKSA8IDApCisJCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UgeworCQkvKiBkbyBzb21lIHNsb3cgSTJDIGVtdWxhdGlvbiBraW5kIG9mIHRoaW5nICovCisJCXdoaWxlIChsZW4gPj0gMikgeworCQkJcmVnID0gKmRhdGErKzsKKwkJCWlmICgocmV0ID0gc2FhNzExeF93cml0ZShjbGllbnQsIHJlZywKKwkJCQkJCSAqZGF0YSsrKSkgPCAwKQorCQkJCWJyZWFrOworCQkJbGVuIC09IDI7CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50CitzYWE3MTF4X2luaXRfZGVjb2RlciAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkgICAgICBzdHJ1Y3QgdmlkZW9fZGVjb2Rlcl9pbml0ICppbml0KQoreworCXJldHVybiBzYWE3MTF4X3dyaXRlX2Jsb2NrKGNsaWVudCwgaW5pdC0+ZGF0YSwgaW5pdC0+bGVuKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK3NhYTcxMXhfcmVhZCAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkgICAgICB1OCAgICAgICAgICAgICAgICAgcmVnKQoreworCXJldHVybiBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCByZWcpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzYWE3MTF4X2kyY19pbml0W10gPSB7CisJMHgwMCwgMHgwMCwJLyogUEg3MTF4X0NISVBfVkVSU0lPTiAwMCAtIElEIGJ5dGUgKi8KKwkweDAxLCAweDA4LAkvKiBQSDcxMXhfSU5DUkVNRU5UX0RFTEFZIC0gKDEpICgxKSAoMSkgKDEpIElERUwzIElERUwyIElERUxMMSBJREVMMCAqLworCTB4MDIsIDB4YzAsCS8qIFBINzExeF9BTkFMT0dfSU5QVVRfQ09OVFJfMSAtIEZVU0UxIEZVU0UwIEdVREwxIEdVREwwIE1PREUzIE1PREUyIE1PREUxIE1PREUwICovCisJMHgwMywgMHgyMywJLyogUEg3MTF4X0FOQUxPR19JTlBVVF9DT05UUl8yIC0gKDEpIEhMTlJTIFZCU0wgV1BPRkYgSE9MREcgR0FGSVggR0FJMjggR0FJMTggKi8KKwkweDA0LCAweDAwLAkvKiBQSDcxMXhfQU5BTE9HX0lOUFVUX0NPTlRSXzMgLSBHQUkxNyBHQUkxNiBHQUkxNSBHQUkxNCBHQUkxMyBHQUkxMiBHQUkxMSBHQUkxMCAqLworCTB4MDUsIDB4MDAsCS8qIFBINzExeF9BTkFMT0dfSU5QVVRfQ09OVFJfNCAtIEdBSTI3IEdBSTI2IEdBSTI1IEdBSTI0IEdBSTIzIEdBSTIyIEdBSTIxIEdBSTIwICovCisJMHgwNiwgMHhlYiwJLyogUEg3MTF4X0hPUklaT05UQUxfU1lOQ19TVEFSVCAtIEhTQjcgSFNCNiBIU0I1IEhTQjQgSFNCMyBIU0IyIEhTQjEgSFNCMCAqLworCTB4MDcsIDB4ZTAsCS8qIFBINzExeF9IT1JJWk9OVEFMX1NZTkNfU1RPUCAtIEhTUzcgSFNTNiBIU1M1IEhTUzQgSFNTMyBIU1MyIEhTUzEgSFNTMCAqLworCTB4MDgsIDB4ODgsCS8qIFBINzExeF9TWU5DX0NPTlRST0wgLSBBVUZEIEZTRUwgRk9FVCBIVEMxIEhUQzAgSFBMTCBWTk9JMSBWTk9JMCAqLworCTB4MDksIDB4MDAsCS8qIFBINzExeF9MVU1JTkFOQ0VfQ09OVFJPTCAtIEJZUFMgUFJFRiBCUFNTMSBCUFNTMCBWQkxCIFVQVENWIEFQRVIxIEFQRVIwICovCisJMHgwYSwgMHg4MCwJLyogUEg3MTF4X0xVTUlOQU5DRV9CUklHSFRORVNTIC0gQlJJRzcgQlJJRzYgQlJJRzUgQlJJRzQgQlJJRzMgQlJJRzIgQlJJRzEgQlJJRzAgKi8KKwkweDBiLCAweDQ3LAkvKiBQSDcxMXhfTFVNSU5BTkNFX0NPTlRSQVNUIC0gQ09OVDcgQ09OVDYgQ09OVDUgQ09OVDQgQ09OVDMgQ09OVDIgQ09OVDEgQ09OVDAgKi8KKwkweDBjLCAweDQwLAkvKiBQSDcxMXhfQ0hST01BX1NBVFVSQVRJT04gLSBTQVRONyBTQVRONiBTQVRONSBTQVRONCBTQVROMyBTQVROMiBTQVROMSBTQVROMCAqLworCTB4MGQsIDB4MDAsCS8qIFBINzExeF9DSFJPTUFfSFVFX0NPTlRST0wgLSBIVUVDNyBIVUVDNiBIVUVDNSBIVUVDNCBIVUVDMyBIVUVDMiBIVUVDMSBIVUVDMCAqLworCTB4MGUsIDB4MDEsCS8qIFBINzExeF9DSFJPTUFfQ09OVFJPTCAtIENEVE8gQ1NURDIgQ1NURDEgQ1NURDAgRENDRiBGQ1RDIENIQlcxIENIQlcwICovCisJMHgwZiwgMHhhYSwJLyogUEg3MTF4X0NIUk9NQV9HQUlOX0NPTlRST0wgLSBBQ0dDIENHQUlONiBDR0FJTjUgQ0dBSU40IENHQUlOMyBDR0FJTjIgQ0dBSU4xIENHQUlOMCAqLworCTB4MTAsIDB4MDAsCS8qIFBINzExeF9GT1JNQVRfREVMQVlfQ09OVFJPTCAtIE9GVFMxIE9GVFMwIEhERUwxIEhERUwwIFZSTE4gWURFTDIgWURFTDEgWURFTDAgKi8KKwkweDExLCAweDFDLAkvKiBQSDcxMXhfT1VUUFVUX0NPTlRST0xfMSAtIEdQU1cxIENNOTkgR1BTVzAgSExTRUwgT0VZQyBPRVJUIFZJUEIgQ09MTyAqLworCTB4MTIsIDB4MDEsCS8qIFBINzExeF9PVVRQVVRfQ09OVFJPTF8yIC0gUlRTRTEzIFJUU0UxMiBSVFNFMTEgUlRTRTEwIFJUU0UwMyBSVFNFMDIgUlRTRTAxIFJUU0UwMCAqLworCTB4MTMsIDB4MDAsCS8qIFBINzExeF9PVVRQVVRfQ09OVFJPTF8zIC0gQURMU0IgKDEpICgxKSBPTERTQiBGSURQICgxKSBBT1NMMSBBT1NMMCAqLworCTB4MTQsIDB4MDAsCS8qIFJFU0VSVkVEIDE0IC0gKDEpICgxKSAoMSkgKDEpICgxKSAoMSkgKDEpICgxKSAqLworCTB4MTUsIDB4MDAsCS8qIFBINzExeF9WX0dBVEUxX1NUQVJUIC0gVlNUQTcgVlNUQTYgVlNUQTUgVlNUQTQgVlNUQTMgVlNUQTIgVlNUQTEgVlNUQTAgKi8KKwkweDE2LCAweDAwLAkvKiBQSDcxMXhfVl9HQVRFMV9TVE9QIC0gVlNUTzcgVlNUTzYgVlNUTzUgVlNUTzQgVlNUTzMgVlNUTzIgVlNUTzEgVlNUTzAgKi8KKwkweDE3LCAweDAwLAkvKiBQSDcxMXhfVl9HQVRFMV9NU0IgLSAoMSkgKDEpICgxKSAoMSkgKDEpICgxKSBWU1RPOCBWU1RBOCAqLworfTsKKworc3RhdGljIGludAorc2FhNzExeF9jb21tYW5kIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkgdW5zaWduZWQgaW50ICAgICAgIGNtZCwKKwkJIHZvaWQgICAgICAgICAgICAgICphcmcpCit7CisJc3RydWN0IHNhYTcxMXggKmRlY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCXN3aXRjaCAoY21kKSB7CisKKwljYXNlIDA6CisJY2FzZSBERUNPREVSX0lOSVQ6CisJeworCQlzdHJ1Y3QgdmlkZW9fZGVjb2Rlcl9pbml0ICppbml0ID0gYXJnOworCQlpZiAoTlVMTCAhPSBpbml0KQorCQkJcmV0dXJuIHNhYTcxMXhfaW5pdF9kZWNvZGVyKGNsaWVudCwgaW5pdCk7CisJCWVsc2UgeworCQkJc3RydWN0IHZpZGVvX2RlY29kZXJfaW5pdCB2ZGk7CisJCQl2ZGkuZGF0YSA9IHNhYTcxMXhfaTJjX2luaXQ7CisJCQl2ZGkubGVuID0gc2l6ZW9mKHNhYTcxMXhfaTJjX2luaXQpOworCQkJcmV0dXJuIHNhYTcxMXhfaW5pdF9kZWNvZGVyKGNsaWVudCwgJnZkaSk7CisJCX0KKwl9CisKKwljYXNlIERFQ09ERVJfRFVNUDoKKwl7CisJCWludCBpOworCisJCWZvciAoaSA9IDA7IGkgPCAzMjsgaSArPSAxNikgeworCQkJaW50IGo7CisKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlczogJTAzeCIsIEkyQ19OQU1FKGNsaWVudCksIGkpOworCQkJZm9yIChqID0gMDsgaiA8IDE2OyArK2opIHsKKwkJCQlwcmludGsoIiAlMDJ4IiwKKwkJCQkgICAgICAgc2FhNzExeF9yZWFkKGNsaWVudCwgaSArIGopKTsKKwkJCX0KKwkJCXByaW50aygiXG4iKTsKKwkJfQorCX0KKwkJYnJlYWs7CisKKwljYXNlIERFQ09ERVJfR0VUX0NBUEFCSUxJVElFUzoKKwl7CisJCXN0cnVjdCB2aWRlb19kZWNvZGVyX2NhcGFiaWxpdHkgKmNhcCA9IGFyZzsKKworCQljYXAtPmZsYWdzID0gVklERU9fREVDT0RFUl9QQUwgfAorCQkJICAgICBWSURFT19ERUNPREVSX05UU0MgfAorCQkJICAgICBWSURFT19ERUNPREVSX1NFQ0FNIHwKKwkJCSAgICAgVklERU9fREVDT0RFUl9BVVRPIHwKKwkJCSAgICAgVklERU9fREVDT0RFUl9DQ0lSOworCQljYXAtPmlucHV0cyA9IDg7CisJCWNhcC0+b3V0cHV0cyA9IDE7CisJfQorCQlicmVhazsKKworCWNhc2UgREVDT0RFUl9HRVRfU1RBVFVTOgorCXsKKwkJaW50ICppYXJnID0gYXJnOworCQlpbnQgc3RhdHVzOworCQlpbnQgcmVzOworCisJCXN0YXR1cyA9IHNhYTcxMXhfcmVhZChjbGllbnQsIDB4MWYpOworCQlkcHJpbnRrKDEsIEtFUk5fREVCVUcgIiVzIHN0YXR1czogMHglMDJ4XG4iLCBJMkNfTkFNRShjbGllbnQpLAorCQkJc3RhdHVzKTsKKwkJcmVzID0gMDsKKwkJaWYgKChzdGF0dXMgJiAoMSA8PCA2KSkgPT0gMCkgeworCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX0dPT0Q7CisJCX0KKwkJc3dpdGNoIChkZWNvZGVyLT5ub3JtKSB7CisJCWNhc2UgVklERU9fTU9ERV9OVFNDOgorCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX05UU0M7CisJCQlicmVhazsKKwkJY2FzZSBWSURFT19NT0RFX1BBTDoKKwkJCXJlcyB8PSBERUNPREVSX1NUQVRVU19QQUw7CisJCQlicmVhazsKKwkJY2FzZSBWSURFT19NT0RFX1NFQ0FNOgorCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX1NFQ0FNOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCWNhc2UgVklERU9fTU9ERV9BVVRPOgorCQkJaWYgKChzdGF0dXMgJiAoMSA8PCA1KSkgIT0gMCkgeworCQkJCXJlcyB8PSBERUNPREVSX1NUQVRVU19OVFNDOworCQkJfSBlbHNlIHsKKwkJCQlyZXMgfD0gREVDT0RFUl9TVEFUVVNfUEFMOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwkJaWYgKChzdGF0dXMgJiAoMSA8PCAwKSkgIT0gMCkgeworCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX0NPTE9SOworCQl9CisJCSppYXJnID0gcmVzOworCX0KKwkJYnJlYWs7CisKKwljYXNlIERFQ09ERVJfU0VUX0dQSU86CisJeworCQlpbnQgKmlhcmcgPSBhcmc7CisJCWlmICgwICE9ICppYXJnKSB7CisJCQlzYWE3MTF4X3dyaXRlKGNsaWVudCwgMHgxMSwKKwkJCQkoZGVjb2Rlci0+cmVnWzB4MTFdIHwgMHg4MCkpOworCQl9IGVsc2UgeworCQkJc2FhNzExeF93cml0ZShjbGllbnQsIDB4MTEsCisJCQkJKGRlY29kZXItPnJlZ1sweDExXSAmIDB4N2YpKTsKKwkJfQorCQlicmVhazsKKwl9CisKKwljYXNlIERFQ09ERVJfU0VUX1ZCSV9CWVBBU1M6CisJeworCQlpbnQgKmlhcmcgPSBhcmc7CisJCWlmICgwICE9ICppYXJnKSB7CisJCQlzYWE3MTF4X3dyaXRlKGNsaWVudCwgMHgxMywKKwkJCQkoZGVjb2Rlci0+cmVnWzB4MTNdICYgMHhmMCkgfCAweDBhKTsKKwkJfSBlbHNlIHsKKwkJCXNhYTcxMXhfd3JpdGUoY2xpZW50LCAweDEzLAorCQkJCShkZWNvZGVyLT5yZWdbMHgxM10gJiAweGYwKSk7CisJCX0KKwkJYnJlYWs7CisJfQorCisJY2FzZSBERUNPREVSX1NFVF9OT1JNOgorCXsKKwkJaW50ICppYXJnID0gYXJnOworCisJCXN3aXRjaCAoKmlhcmcpIHsKKworCQljYXNlIFZJREVPX01PREVfTlRTQzoKKwkJCXNhYTcxMXhfd3JpdGUoY2xpZW50LCAweDA4LAorCQkJCSAgICAgIChkZWNvZGVyLT5yZWdbMHgwOF0gJiAweDNmKSB8IDB4NDApOworCQkJc2FhNzExeF93cml0ZShjbGllbnQsIDB4MGUsCisJCQkJICAgICAgKGRlY29kZXItPnJlZ1sweDBlXSAmIDB4OGYpKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVklERU9fTU9ERV9QQUw6CisJCQlzYWE3MTF4X3dyaXRlKGNsaWVudCwgMHgwOCwKKwkJCQkgICAgICAoZGVjb2Rlci0+cmVnWzB4MDhdICYgMHgzZikgfCAweDAwKTsKKwkJCXNhYTcxMXhfd3JpdGUoY2xpZW50LCAweDBlLAorCQkJCSAgICAgIChkZWNvZGVyLT5yZWdbMHgwZV0gJiAweDhmKSk7CisJCQlicmVhazsKKworCQljYXNlIFZJREVPX01PREVfU0VDQU06CisJCQlzYWE3MTF4X3dyaXRlKGNsaWVudCwgMHgwOCwKKwkJCQkgICAgICAoZGVjb2Rlci0+cmVnWzB4MGVdICYgMHgzZikgfCAweDAwKTsKKwkJCXNhYTcxMXhfd3JpdGUoY2xpZW50LCAweDBlLAorCQkJCSAgICAgIChkZWNvZGVyLT5yZWdbMHgwZV0gJiAweDhmKSB8IDB4NTApOworCQkJYnJlYWs7CisKKwkJY2FzZSBWSURFT19NT0RFX0FVVE86CisJCQlzYWE3MTF4X3dyaXRlKGNsaWVudCwgMHgwOCwKKwkJCQkgICAgICAoZGVjb2Rlci0+cmVnWzB4MDhdICYgMHgzZikgfCAweDgwKTsKKwkJCXNhYTcxMXhfd3JpdGUoY2xpZW50LCAweDBlLAorCQkJCSAgICAgIChkZWNvZGVyLT5yZWdbMHgwZV0gJiAweDhmKSk7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJfQorCQlkZWNvZGVyLT5ub3JtID0gKmlhcmc7CisJfQorCQlicmVhazsKKworCWNhc2UgREVDT0RFUl9TRVRfSU5QVVQ6CisJeworCQlpbnQgKmlhcmcgPSBhcmc7CisJCWlmICgqaWFyZyA8IDAgfHwgKmlhcmcgPiA5KSB7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlpZiAoZGVjb2Rlci0+aW5wdXQgIT0gKmlhcmcpIHsKKwkJCWRlY29kZXItPmlucHV0ID0gKmlhcmc7CisJCQkvKiBzZWxlY3QgbW9kZSAqLworCQkJc2FhNzExeF93cml0ZShjbGllbnQsIDB4MDIsCisJCQkJICAgICAgKGRlY29kZXItPnJlZ1sweDAyXSAmIDB4ZjApIHwgZGVjb2Rlci0+aW5wdXQpOworCQkJLyogYnlwYXNzIGNocm9taW5hbmNlIHRyYXAgZm9yIG1vZGVzIDQuLjcgKi8KKwkJCXNhYTcxMXhfd3JpdGUoY2xpZW50LCAweDA5LAorCQkJCSAgICAgIChkZWNvZGVyLT5yZWdbMHgwOV0gJiAweDdmKSB8ICgoZGVjb2Rlci0+aW5wdXQgPiAzKSA/IDB4ODAgOiAwKSk7CisJCX0KKwl9CisJCWJyZWFrOworCisJY2FzZSBERUNPREVSX1NFVF9PVVRQVVQ6CisJeworCQlpbnQgKmlhcmcgPSBhcmc7CisKKwkJLyogbm90IG11Y2ggY2hvaWNlIG9mIG91dHB1dHMgKi8KKwkJaWYgKCppYXJnICE9IDApIHsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCQlicmVhazsKKworCWNhc2UgREVDT0RFUl9FTkFCTEVfT1VUUFVUOgorCXsKKwkJaW50ICppYXJnID0gYXJnOworCQlpbnQgZW5hYmxlID0gKCppYXJnICE9IDApOworCisJCWlmIChkZWNvZGVyLT5lbmFibGUgIT0gZW5hYmxlKSB7CisJCQlkZWNvZGVyLT5lbmFibGUgPSBlbmFibGU7CisKKwkJCS8qIFJKOiBJZiBvdXRwdXQgc2hvdWxkIGJlIGRpc2FibGVkIChmb3IKKwkJCSAqIHBsYXlpbmcgdmlkZW9zKSwgd2UgYWxzbyBuZWVkIGEgb3BlbiBQTEwuCisJCQkgKiBUaGUgaW5wdXQgaXMgc2V0IHRvIDAgKHdoZXJlIG5vIGlucHV0CisJCQkgKiBzb3VyY2UgaXMgY29ubmVjdGVkKSwgYWx0aG91Z2ggdGhpcworCQkJICogaXMgbm90IG5lY2Vzc2FyeS4KKwkJCSAqCisJCQkgKiBJZiBvdXRwdXQgc2hvdWxkIGJlIGVuYWJsZWQsIHdlIGhhdmUgdG8KKwkJCSAqIHJldmVyc2UgdGhlIGFib3ZlLgorCQkJICovCisKKwkJCWlmIChkZWNvZGVyLT5lbmFibGUpIHsKKwkJCQlzYWE3MTF4X3dyaXRlKGNsaWVudCwgMHgwMiwKKwkJCQkJICAgICAgKGRlY29kZXItPgorCQkJCQkgICAgICAgcmVnWzB4MDJdICYgMHhmOCkgfAorCQkJCQkgICAgICBkZWNvZGVyLT5pbnB1dCk7CisJCQkJc2FhNzExeF93cml0ZShjbGllbnQsIDB4MDgsCisJCQkJCSAgICAgIChkZWNvZGVyLT5yZWdbMHgwOF0gJiAweGZiKSk7CisJCQkJc2FhNzExeF93cml0ZShjbGllbnQsIDB4MTEsCisJCQkJCSAgICAgIChkZWNvZGVyLT4KKwkJCQkJICAgICAgIHJlZ1sweDExXSAmIDB4ZjMpIHwgMHgwYyk7CisJCQl9IGVsc2UgeworCQkJCXNhYTcxMXhfd3JpdGUoY2xpZW50LCAweDAyLAorCQkJCQkgICAgICAoZGVjb2Rlci0+cmVnWzB4MDJdICYgMHhmOCkpOworCQkJCXNhYTcxMXhfd3JpdGUoY2xpZW50LCAweDA4LAorCQkJCQkgICAgICAoZGVjb2Rlci0+CisJCQkJCSAgICAgICByZWdbMHgwOF0gJiAweGZiKSB8IDB4MDQpOworCQkJCXNhYTcxMXhfd3JpdGUoY2xpZW50LCAweDExLAorCQkJCQkgICAgICAoZGVjb2Rlci0+cmVnWzB4MTFdICYgMHhmMykpOworCQkJfQorCQl9CisJfQorCQlicmVhazsKKworCWNhc2UgREVDT0RFUl9TRVRfUElDVFVSRToKKwl7CisJCXN0cnVjdCB2aWRlb19waWN0dXJlICpwaWMgPSBhcmc7CisKKwkJaWYgKGRlY29kZXItPmJyaWdodCAhPSBwaWMtPmJyaWdodG5lc3MpIHsKKwkJCS8qIFdlIHdhbnQgMCB0byAyNTUgd2UgZ2V0IDAtNjU1MzUgKi8KKwkJCWRlY29kZXItPmJyaWdodCA9IHBpYy0+YnJpZ2h0bmVzczsKKwkJCXNhYTcxMXhfd3JpdGUoY2xpZW50LCAweDBhLCBkZWNvZGVyLT5icmlnaHQgPj4gOCk7CisJCX0KKwkJaWYgKGRlY29kZXItPmNvbnRyYXN0ICE9IHBpYy0+Y29udHJhc3QpIHsKKwkJCS8qIFdlIHdhbnQgMCB0byAxMjcgd2UgZ2V0IDAtNjU1MzUgKi8KKwkJCWRlY29kZXItPmNvbnRyYXN0ID0gcGljLT5jb250cmFzdDsKKwkJCXNhYTcxMXhfd3JpdGUoY2xpZW50LCAweDBiLAorCQkJCSAgICAgIGRlY29kZXItPmNvbnRyYXN0ID4+IDkpOworCQl9CisJCWlmIChkZWNvZGVyLT5zYXQgIT0gcGljLT5jb2xvdXIpIHsKKwkJCS8qIFdlIHdhbnQgMCB0byAxMjcgd2UgZ2V0IDAtNjU1MzUgKi8KKwkJCWRlY29kZXItPnNhdCA9IHBpYy0+Y29sb3VyOworCQkJc2FhNzExeF93cml0ZShjbGllbnQsIDB4MGMsIGRlY29kZXItPnNhdCA+PiA5KTsKKwkJfQorCQlpZiAoZGVjb2Rlci0+aHVlICE9IHBpYy0+aHVlKSB7CisJCQkvKiBXZSB3YW50IC0xMjggdG8gMTI3IHdlIGdldCAwLTY1NTM1ICovCisJCQlkZWNvZGVyLT5odWUgPSBwaWMtPmh1ZTsKKwkJCXNhYTcxMXhfd3JpdGUoY2xpZW50LCAweDBkLAorCQkJCSAgICAgIChkZWNvZGVyLT5odWUgLSAzMjc2OCkgPj4gOCk7CisJCX0KKwl9CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgKiBHZW5lcmljIGkyYyBwcm9iZQorICogY29uY2VybmluZyB0aGUgYWRkcmVzc2VzOiBpMmMgd2FudHMgNyBiaXQgKHdpdGhvdXQgdGhlIHIvdyBiaXQpLCBzbyAnPj4xJworICovCisKKy8qIHN0YW5kYXJkIGkyYyBpbnNtb2Qgb3B0aW9ucyAqLworc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsKKwlJMkNfU0FBNzExMz4+MSwgICAgICAgICAvKiBzYWE3MTEzICovCisJSTJDX1NBQTcxMTQ+PjEsICAgICAgICAgLyogc2FhNzExNCAqLworCUkyQ19DTElFTlRfRU5ECit9OworCitJMkNfQ0xJRU5UX0lOU01PRDsKKworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaTJjX2RyaXZlcl9zYWE3MTF4OworCitzdGF0aWMgaW50CitzYWE3MTF4X2RldGVjdF9jbGllbnQgKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwKKwkJICAgICAgIGludCAgICAgICAgICAgICAgICAgYWRkcmVzcywKKwkJICAgICAgIGludCAgICAgICAgICAgICAgICAga2luZCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCXN0cnVjdCBzYWE3MTF4ICpkZWNvZGVyOworCXN0cnVjdCB2aWRlb19kZWNvZGVyX2luaXQgdmRpOworCisJZHByaW50aygxLAorCQlLRVJOX0lORk8KKwkJInNhYTcxMXguYzogZGV0ZWN0aW5nIHNhYTcxMXggY2xpZW50IG9uIGFkZHJlc3MgMHgleFxuIiwKKwkJYWRkcmVzcyA8PCAxKTsKKworCS8qIENoZWNrIGlmIHRoZSBhZGFwdGVyIHN1cHBvcnRzIHRoZSBuZWVkZWQgZmVhdHVyZXMgKi8KKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCisJCXJldHVybiAwOworCisJY2xpZW50ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGkyY19jbGllbnQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY2xpZW50ID09IDApCisJCXJldHVybiAtRU5PTUVNOworCW1lbXNldChjbGllbnQsIDAsIHNpemVvZihzdHJ1Y3QgaTJjX2NsaWVudCkpOworCWNsaWVudC0+YWRkciA9IGFkZHJlc3M7CisJY2xpZW50LT5hZGFwdGVyID0gYWRhcHRlcjsKKwljbGllbnQtPmRyaXZlciA9ICZpMmNfZHJpdmVyX3NhYTcxMXg7CisJY2xpZW50LT5mbGFncyA9IEkyQ19DTElFTlRfQUxMT1dfVVNFOworCXN0cmxjcHkoSTJDX05BTUUoY2xpZW50KSwgInNhYTcxMXgiLCBzaXplb2YoSTJDX05BTUUoY2xpZW50KSkpOworCWRlY29kZXIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2FhNzExeCksIEdGUF9LRVJORUwpOworCWlmIChkZWNvZGVyID09IE5VTEwpIHsKKwkJa2ZyZWUoY2xpZW50KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCW1lbXNldChkZWNvZGVyLCAwLCBzaXplb2Yoc3RydWN0IHNhYTcxMXgpKTsKKwlkZWNvZGVyLT5ub3JtID0gVklERU9fTU9ERV9OVFNDOworCWRlY29kZXItPmlucHV0ID0gMDsKKwlkZWNvZGVyLT5lbmFibGUgPSAxOworCWRlY29kZXItPmJyaWdodCA9IDMyNzY4OworCWRlY29kZXItPmNvbnRyYXN0ID0gMzI3Njg7CisJZGVjb2Rlci0+aHVlID0gMzI3Njg7CisJZGVjb2Rlci0+c2F0ID0gMzI3Njg7CisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgZGVjb2Rlcik7CisKKwlpID0gaTJjX2F0dGFjaF9jbGllbnQoY2xpZW50KTsKKwlpZiAoaSkgeworCQlrZnJlZShjbGllbnQpOworCQlrZnJlZShkZWNvZGVyKTsKKwkJcmV0dXJuIGk7CisJfQorCisJdmRpLmRhdGEgPSBzYWE3MTF4X2kyY19pbml0OworCXZkaS5sZW4gPSBzaXplb2Yoc2FhNzExeF9pMmNfaW5pdCk7CisJaSA9IHNhYTcxMXhfaW5pdF9kZWNvZGVyKGNsaWVudCwgJnZkaSk7CisJaWYgKGkgPCAwKSB7CisJCWRwcmludGsoMSwgS0VSTl9FUlIgIiVzX2F0dGFjaCBlcnJvcjogaW5pdCBzdGF0dXMgJWRcbiIsCisJCQlJMkNfTkFNRShjbGllbnQpLCBpKTsKKwl9IGVsc2UgeworCQlkcHJpbnRrKDEsCisJCQlLRVJOX0lORk8KKwkJCSIlc19hdHRhY2g6IGNoaXAgdmVyc2lvbiAleCBhdCBhZGRyZXNzIDB4JXhcbiIsCisJCQlJMkNfTkFNRShjbGllbnQpLCBzYWE3MTF4X3JlYWQoY2xpZW50LCAweDAwKSA+PiA0LAorCQkJY2xpZW50LT5hZGRyIDw8IDEpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitzYWE3MTF4X2F0dGFjaF9hZGFwdGVyIChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJZHByaW50aygxLAorCQlLRVJOX0lORk8KKwkJInNhYTcxMXguYzogc3RhcnRpbmcgcHJvYmUgZm9yIGFkYXB0ZXIgJXMgKDB4JXgpXG4iLAorCQlJMkNfTkFNRShhZGFwdGVyKSwgYWRhcHRlci0+aWQpOworCXJldHVybiBpMmNfcHJvYmUoYWRhcHRlciwgJmFkZHJfZGF0YSwgJnNhYTcxMXhfZGV0ZWN0X2NsaWVudCk7Cit9CisKK3N0YXRpYyBpbnQKK3NhYTcxMXhfZGV0YWNoX2NsaWVudCAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3Qgc2FhNzExeCAqZGVjb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCWludCBlcnI7CisKKwllcnIgPSBpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpOworCWlmIChlcnIpIHsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlrZnJlZShkZWNvZGVyKTsKKwlrZnJlZShjbGllbnQpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBpMmNfZHJpdmVyX3NhYTcxMXggPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm5hbWUgPSAic2FhNzExeCIsCisKKwkuaWQgPSBJMkNfRFJJVkVSSURfU0FBNzExWCwKKwkuZmxhZ3MgPSBJMkNfREZfTk9USUZZLAorCisJLmF0dGFjaF9hZGFwdGVyID0gc2FhNzExeF9hdHRhY2hfYWRhcHRlciwKKwkuZGV0YWNoX2NsaWVudCA9IHNhYTcxMXhfZGV0YWNoX2NsaWVudCwKKwkuY29tbWFuZCA9IHNhYTcxMXhfY29tbWFuZCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0CitzYWE3MTF4X2luaXQgKHZvaWQpCit7CisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZpMmNfZHJpdmVyX3NhYTcxMXgpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQKK3NhYTcxMXhfZXhpdCAodm9pZCkKK3sKKwlpMmNfZGVsX2RyaXZlcigmaTJjX2RyaXZlcl9zYWE3MTF4KTsKK30KKworbW9kdWxlX2luaXQoc2FhNzExeF9pbml0KTsKK21vZHVsZV9leGl0KHNhYTcxMXhfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyNGU4ODAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvS2NvbmZpZwpAQCAtMCwwICsxLDY4IEBACitjb25maWcgVklERU9fU0FBNzEzNAorCXRyaXN0YXRlICJQaGlsaXBzIFNBQTcxMzQgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFZJREVPX0RFViAmJiBQQ0kgJiYgSTJDICYmIFNPVU5ECisJc2VsZWN0IFZJREVPX0JVRgorCXNlbGVjdCBWSURFT19JUgorCXNlbGVjdCBWSURFT19UVU5FUgorCXNlbGVjdCBDUkMzMgorCS0tLWhlbHAtLS0KKwkgIFRoaXMgaXMgYSB2aWRlbzRsaW51eCBkcml2ZXIgZm9yIFBoaWxpcHMgU0FBNzEzeCBiYXNlZAorCSAgVFYgY2FyZHMuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNhYTcxMzQuCisKK2NvbmZpZyBWSURFT19TQUE3MTM0X0RWQgorCXRyaXN0YXRlICJEVkIvQVRTQyBTdXBwb3J0IGZvciBzYWE3MTM0IGJhc2VkIFRWIGNhcmRzIgorCWRlcGVuZHMgb24gVklERU9fU0FBNzEzNCAmJiBEVkJfQ09SRQorCXNlbGVjdCBWSURFT19CVUZfRFZCCisJLS0taGVscC0tLQorCSAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIERWQiBjYXJkcyBiYXNlZCBvbiB0aGUKKwkgIFBoaWxpcHMgc2FhNzEzNCBjaGlwLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzYWE3MTM0LWR2Yi4KKworCSAgWW91IG11c3QgYWxzbyBzZWxlY3Qgb25lIG9yIG1vcmUgRFZCIGRlbW9kdWxhdG9ycy4KKwkgIElmIHlvdSBhcmUgdW5zdXJlIHdoaWNoIHlvdSBuZWVkLCBjaG9vc2UgYWxsIG9mIHRoZW0uCisKK2NvbmZpZyBWSURFT19TQUE3MTM0X0RWQl9BTExfRlJPTlRFTkRTCisJYm9vbCAiQnVpbGQgYWxsIHN1cHBvcnRlZCBmcm9udGVuZHMgZm9yIHNhYTcxMzQgYmFzZWQgVFYgY2FyZHMiCisJZGVmYXVsdCB5CisJZGVwZW5kcyBvbiBWSURFT19TQUE3MTM0X0RWQgorCXNlbGVjdCBEVkJfTVQzNTIKKwlzZWxlY3QgRFZCX1REQTEwMDRYCisJc2VsZWN0IERWQl9OWFQyMDBYCisJLS0taGVscC0tLQorCSAgVGhpcyBidWlsZHMgc2FhNzEzNC1kdmIgd2l0aCBhbGwgY3VycmVudGx5IHN1cHBvcnRlZCBmcm9udGVuZAorCSAgZGVtb2R1bGF0b3JzLiAgSWYgeW91IHdpc2ggdG8gdHdlYWsgeW91ciBjb25maWd1cmF0aW9uLCBhbmQKKwkgIG9ubHkgaW5jbHVkZSBzdXBwb3J0IGZvciB0aGUgaGFyZHdhcmUgdGhhdCB5b3UgbmVlZCwgY2hvb3NlIE4gaGVyZS4KKworCSAgSWYgeW91IGFyZSB1bnN1cmUsIGNob29zZSBZLgorCitjb25maWcgVklERU9fU0FBNzEzNF9EVkJfTVQzNTIKKwl0cmlzdGF0ZSAiWmFybGluayBNVDM1MiBEVkItVCBTdXBwb3J0IgorCWRlZmF1bHQgbQorCWRlcGVuZHMgb24gVklERU9fU0FBNzEzNF9EVkIgJiYgIVZJREVPX1NBQTcxMzRfRFZCX0FMTF9GUk9OVEVORFMKKwlzZWxlY3QgRFZCX01UMzUyCisJLS0taGVscC0tLQorCSAgVGhpcyBhZGRzIERWQi1UIHN1cHBvcnQgZm9yIGNhcmRzIGJhc2VkIG9uIHRoZQorCSAgUGhpbGlwcyBzYWE3MTM0IGNoaXAgYW5kIHRoZSBNVDM1MiBkZW1vZHVsYXRvci4KKworY29uZmlnIFZJREVPX1NBQTcxMzRfRFZCX1REQTEwMDRYCisJdHJpc3RhdGUgIlBoaWxsaXBzIFREQTEwMDQ1SC9UREExMDA0NkggRFZCLVQgU3VwcG9ydCIKKwlkZWZhdWx0IG0KKwlkZXBlbmRzIG9uIFZJREVPX1NBQTcxMzRfRFZCICYmICFWSURFT19TQUE3MTM0X0RWQl9BTExfRlJPTlRFTkRTCisJc2VsZWN0IERWQl9UREExMDA0WAorCS0tLWhlbHAtLS0KKwkgIFRoaXMgYWRkcyBEVkItVCBzdXBwb3J0IGZvciBjYXJkcyBiYXNlZCBvbiB0aGUKKwkgIFBoaWxpcHMgc2FhNzEzNCBjaGlwIGFuZCB0aGUgVERBMTAwNDVIL1REQTEwMDQ2SCBkZW1vZHVsYXRvci4KKworY29uZmlnIFZJREVPX1NBQTcxMzRfRFZCX05YVDIwMFgKKwl0cmlzdGF0ZSAiTlhUMjAwMi9OWFQyMDA0IEFUU0MgU3VwcG9ydCIKKwlkZWZhdWx0IG0KKwlkZXBlbmRzIG9uIFZJREVPX1NBQTcxMzRfRFZCICYmICFWSURFT19TQUE3MTM0X0RWQl9BTExfRlJPTlRFTkRTCisJc2VsZWN0IERWQl9OWFQyMDBYCisJLS0taGVscC0tLQorCSAgVGhpcyBhZGRzIEFUU0MgOFZTQiBhbmQgUUFNNjQvMjU2IHN1cHBvcnQgZm9yIGNhcmRzIGJhc2VkIG9uIHRoZQorCSAgUGhpbGlwcyBzYWE3MTM0IGNoaXAgYW5kIHRoZSBOWFQyMDAyL05YVDIwMDQgZGVtb2R1bGF0b3IuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvTWFrZWZpbGUKaW5kZXggYjc3OGZmZC4uZTBiMjhmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9NYWtlZmlsZQpAQCAtMywxNSArMywyMiBAQAogCQlzYWE3MTM0LW9zcy5vIHNhYTcxMzQtdHMubyBzYWE3MTM0LXR2YXVkaW8ubwlcCiAJCXNhYTcxMzQtdmJpLm8gc2FhNzEzNC12aWRlby5vIHNhYTcxMzQtaW5wdXQubwogCi1vYmotJChDT05GSUdfVklERU9fU0FBNzEzNCkgKz0gc2FhNzEzNC5vIHNhYTcxMzQtZW1wcmVzcy5vIHNhYTY3NTJocy5vCitvYmotJChDT05GSUdfVklERU9fU0FBNzEzNCkgKz0gIHNhYTcxMzQubyBzYWE3MTM0LWVtcHJlc3MubyBcCisJCQkJc2FhNjc1MmhzLm8gc2FhNzEzNC1hbHNhLm8KIG9iai0kKENPTkZJR19WSURFT19TQUE3MTM0X0RWQikgKz0gc2FhNzEzNC1kdmIubwogCiBFWFRSQV9DRkxBR1MgKz0gLUkkKHNyYykvLi4KIEVYVFJBX0NGTEFHUyArPSAtSSQoc3JjdHJlZSkvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUKIEVYVFJBX0NGTEFHUyArPSAtSSQoc3JjdHJlZSkvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzCitpZm5lcSAoJChDT05GSUdfVklERU9fQlVGX0RWQiksbikKKyBFWFRSQV9DRkxBR1MgKz0gLURIQVZFX1ZJREVPX0JVRl9EVkI9MQorZW5kaWYKIGlmbmVxICgkKENPTkZJR19EVkJfTVQzNTIpLG4pCiAgRVhUUkFfQ0ZMQUdTICs9IC1ESEFWRV9NVDM1Mj0xCiBlbmRpZgogaWZuZXEgKCQoQ09ORklHX0RWQl9UREExMDA0WCksbikKICBFWFRSQV9DRkxBR1MgKz0gLURIQVZFX1REQTEwMDRYPTEKIGVuZGlmCitpZm5lcSAoJChDT05GSUdfRFZCX05YVDIwMFgpLG4pCisgRVhUUkFfQ0ZMQUdTICs9IC1ESEFWRV9OWFQyMDBYPTEKK2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNjc1MmhzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNjc1MmhzLmMKaW5kZXggMzgyOTExYy4uY2RkMWVkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTY3NTJocy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE2NzUyaHMuYwpAQCAtMTMsNyArMTMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgogCi0jaW5jbHVkZSA8bWVkaWEvaWQuaD4KIAogI2RlZmluZSBNUEVHX1ZJREVPX1RBUkdFVF9CSVRSQVRFX01BWCAgMjcwMDAKICNkZWZpbmUgTVBFR19WSURFT19NQVhfQklUUkFURV9NQVggICAgIDI3MDAwCkBAIC01Nyw2ICs1Niw3IEBACiAJc3RydWN0IGkyY19jbGllbnQgICAgICAgICAgICAgY2xpZW50OwogCXN0cnVjdCB2NGwyX21wZWdfY29tcHJlc3Npb24gIHBhcmFtczsKIAllbnVtIHNhYTY3NTJoc192aWRlb2Zvcm1hdCAgICB2aWRlb19mb3JtYXQ7CisJdjRsMl9zdGRfaWQgICAgICAgICAgICAgICAgICAgc3RhbmRhcmQ7CiB9OwogCiBlbnVtIHNhYTY3NTJoc19jb21tYW5kIHsKQEAgLTc0LDU4ICs3NCw1OCBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgdTggUEFUW10gPSB7Ci0JMHhjMiwgLy8gaTJjIHJlZ2lzdGVyCi0JMHgwMCwgLy8gdGFibGUgbnVtYmVyIGZvciBlbmNvZGVyCisJMHhjMiwgLyogaTJjIHJlZ2lzdGVyICovCisJMHgwMCwgLyogdGFibGUgbnVtYmVyIGZvciBlbmNvZGVyICovCiAKLQkweDQ3LCAvLyBzeW5jCi0JMHg0MCwgMHgwMCwgLy8gdHJhbnNwb3J0X2Vycm9yX2luZGljYXRvcigwKSwgcGF5bG9hZF91bml0X3N0YXJ0KDEpLCB0cmFuc3BvcnRfcHJpb3JpdHkoMCksIHBpZCgwKQotCTB4MTAsIC8vIHRyYW5zcG9ydF9zY3JhbWJsaW5nX2NvbnRyb2woMDApLCBhZGFwdGF0aW9uX2ZpZWxkX2NvbnRyb2woMDEpLCBjb250aW51aXR5X2NvdW50ZXIoMCkKKwkweDQ3LCAvKiBzeW5jICovCisJMHg0MCwgMHgwMCwgLyogdHJhbnNwb3J0X2Vycm9yX2luZGljYXRvcigwKSwgcGF5bG9hZF91bml0X3N0YXJ0KDEpLCB0cmFuc3BvcnRfcHJpb3JpdHkoMCksIHBpZCgwKSAqLworCTB4MTAsIC8qIHRyYW5zcG9ydF9zY3JhbWJsaW5nX2NvbnRyb2woMDApLCBhZGFwdGF0aW9uX2ZpZWxkX2NvbnRyb2woMDEpLCBjb250aW51aXR5X2NvdW50ZXIoMCkgKi8KIAotCTB4MDAsIC8vIFBTSSBwb2ludGVyIHRvIHN0YXJ0IG9mIHRhYmxlCisJMHgwMCwgLyogUFNJIHBvaW50ZXIgdG8gc3RhcnQgb2YgdGFibGUgKi8KIAotCTB4MDAsIC8vIHRpZCgwKQotCTB4YjAsIDB4MGQsIC8vIHNlY3Rpb25fc3ludGF4X2luZGljYXRvcigxKSwgc2VjdGlvbl9sZW5ndGgoMTMpCisJMHgwMCwgLyogdGlkKDApICovCisJMHhiMCwgMHgwZCwgLyogc2VjdGlvbl9zeW50YXhfaW5kaWNhdG9yKDEpLCBzZWN0aW9uX2xlbmd0aCgxMykgKi8KIAotCTB4MDAsIDB4MDEsIC8vIHRyYW5zcG9ydF9zdHJlYW1faWQoMSkKKwkweDAwLCAweDAxLCAvKiB0cmFuc3BvcnRfc3RyZWFtX2lkKDEpICovCiAKLQkweGMxLCAvLyB2ZXJzaW9uX251bWJlcigwKSwgY3VycmVudF9uZXh0X2luZGljYXRvcigxKQorCTB4YzEsIC8qIHZlcnNpb25fbnVtYmVyKDApLCBjdXJyZW50X25leHRfaW5kaWNhdG9yKDEpICovCiAKLQkweDAwLCAweDAwLCAvLyBzZWN0aW9uX251bWJlcigwKSwgbGFzdF9zZWN0aW9uX251bWJlcigwKQorCTB4MDAsIDB4MDAsIC8qIHNlY3Rpb25fbnVtYmVyKDApLCBsYXN0X3NlY3Rpb25fbnVtYmVyKDApICovCiAKLQkweDAwLCAweDAxLCAvLyBwcm9ncmFtX251bWJlcigxKQorCTB4MDAsIDB4MDEsIC8qIHByb2dyYW1fbnVtYmVyKDEpICovCiAKLQkweGUwLCAweDAwLCAvLyBQTVQgUElECisJMHhlMCwgMHgwMCwgLyogUE1UIFBJRCAqLwogCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCAvLyBDUkMzMgorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgLyogQ1JDMzIgKi8KIH07CiAKIHN0YXRpYyB1OCBQTVRbXSA9IHsKLQkweGMyLCAvLyBpMmMgcmVnaXN0ZXIKLQkweDAxLCAvLyB0YWJsZSBudW1iZXIgZm9yIGVuY29kZXIKKwkweGMyLCAvKiBpMmMgcmVnaXN0ZXIgKi8KKwkweDAxLCAvKiB0YWJsZSBudW1iZXIgZm9yIGVuY29kZXIgKi8KIAotCTB4NDcsIC8vIHN5bmMKLQkweDQwLCAweDAwLCAvLyB0cmFuc3BvcnRfZXJyb3JfaW5kaWNhdG9yKDApLCBwYXlsb2FkX3VuaXRfc3RhcnQoMSksIHRyYW5zcG9ydF9wcmlvcml0eSgwKSwgcGlkCi0JMHgxMCwgLy8gdHJhbnNwb3J0X3NjcmFtYmxpbmdfY29udHJvbCgwMCksIGFkYXB0YXRpb25fZmllbGRfY29udHJvbCgwMSksIGNvbnRpbnVpdHlfY291bnRlcigwKQorCTB4NDcsIC8qIHN5bmMgKi8KKwkweDQwLCAweDAwLCAvKiB0cmFuc3BvcnRfZXJyb3JfaW5kaWNhdG9yKDApLCBwYXlsb2FkX3VuaXRfc3RhcnQoMSksIHRyYW5zcG9ydF9wcmlvcml0eSgwKSwgcGlkICovCisJMHgxMCwgLyogdHJhbnNwb3J0X3NjcmFtYmxpbmdfY29udHJvbCgwMCksIGFkYXB0YXRpb25fZmllbGRfY29udHJvbCgwMSksIGNvbnRpbnVpdHlfY291bnRlcigwKSAqLwogCi0JMHgwMCwgLy8gUFNJIHBvaW50ZXIgdG8gc3RhcnQgb2YgdGFibGUKKwkweDAwLCAvKiBQU0kgcG9pbnRlciB0byBzdGFydCBvZiB0YWJsZSAqLwogCi0JMHgwMiwgLy8gdGlkKDIpCi0JMHhiMCwgMHgxNywgLy8gc2VjdGlvbl9zeW50YXhfaW5kaWNhdG9yKDEpLCBzZWN0aW9uX2xlbmd0aCgyMykKKwkweDAyLCAvKiB0aWQoMikgKi8KKwkweGIwLCAweDE3LCAvKiBzZWN0aW9uX3N5bnRheF9pbmRpY2F0b3IoMSksIHNlY3Rpb25fbGVuZ3RoKDIzKSAqLwogCi0JMHgwMCwgMHgwMSwgLy8gcHJvZ3JhbV9udW1iZXIoMSkKKwkweDAwLCAweDAxLCAvKiBwcm9ncmFtX251bWJlcigxKSAqLwogCi0JMHhjMSwgLy8gdmVyc2lvbl9udW1iZXIoMCksIGN1cnJlbnRfbmV4dF9pbmRpY2F0b3IoMSkKKwkweGMxLCAvKiB2ZXJzaW9uX251bWJlcigwKSwgY3VycmVudF9uZXh0X2luZGljYXRvcigxKSAqLwogCi0JMHgwMCwgMHgwMCwgLy8gc2VjdGlvbl9udW1iZXIoMCksIGxhc3Rfc2VjdGlvbl9udW1iZXIoMCkKKwkweDAwLCAweDAwLCAvKiBzZWN0aW9uX251bWJlcigwKSwgbGFzdF9zZWN0aW9uX251bWJlcigwKSAqLwogCi0JMHhlMCwgMHgwMCwgLy8gUENSX1BJRAorCTB4ZTAsIDB4MDAsIC8qIFBDUl9QSUQgKi8KIAotCTB4ZjAsIDB4MDAsIC8vIHByb2dyYW1faW5mb19sZW5ndGgoMCkKKwkweGYwLCAweDAwLCAvKiBwcm9ncmFtX2luZm9fbGVuZ3RoKDApICovCiAKLQkweDAyLCAweGUwLCAweDAwLCAweGYwLCAweDAwLCAvLyB2aWRlbyBzdHJlYW0gdHlwZSgyKSwgcGlkCi0JMHgwNCwgMHhlMCwgMHgwMCwgMHhmMCwgMHgwMCwgLy8gYXVkaW8gc3RyZWFtIHR5cGUoNCksIHBpZAorCTB4MDIsIDB4ZTAsIDB4MDAsIDB4ZjAsIDB4MDAsIC8qIHZpZGVvIHN0cmVhbSB0eXBlKDIpLCBwaWQgKi8KKwkweDA0LCAweGUwLCAweDAwLCAweGYwLCAweDAwLCAvKiBhdWRpbyBzdHJlYW0gdHlwZSg0KSwgcGlkICovCiAKLQkweDAwLCAweDAwLCAweDAwLCAweDAwIC8vIENSQzMyCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCAvKiBDUkMzMiAqLwogfTsKIAogc3RhdGljIHN0cnVjdCB2NGwyX21wZWdfY29tcHJlc3Npb24gcGFyYW1fZGVmYXVsdHMgPQpAQCAtMTY2LDMzICsxNjYsMzMgQEAKIAl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CiAJaW50IHN0YXR1cyA9IDA7CiAKLQkvLyBleGVjdXRlIHRoZSBjb21tYW5kCisJLyogZXhlY3V0ZSB0aGUgY29tbWFuZCAqLwogCXN3aXRjaChjb21tYW5kKSB7Ci0gIAljYXNlIFNBQTY3NTJIU19DT01NQU5EX1JFU0VUOgotICAJCWJ1ZlswXSA9IDB4MDA7CisJY2FzZSBTQUE2NzUySFNfQ09NTUFORF9SRVNFVDoKKwkJYnVmWzBdID0gMHgwMDsKIAkJYnJlYWs7CiAKIAljYXNlIFNBQTY3NTJIU19DT01NQU5EX1NUT1A6Ci0JICAJYnVmWzBdID0gMHgwMzsKKwkJYnVmWzBdID0gMHgwMzsKIAkJYnJlYWs7CiAKIAljYXNlIFNBQTY3NTJIU19DT01NQU5EX1NUQVJUOgotICAJCWJ1ZlswXSA9IDB4MDI7CisJCWJ1ZlswXSA9IDB4MDI7CiAJCWJyZWFrOwogCiAJY2FzZSBTQUE2NzUySFNfQ09NTUFORF9QQVVTRToKLSAgCQlidWZbMF0gPSAweDA0OworCQlidWZbMF0gPSAweDA0OwogCQlicmVhazsKIAogCWNhc2UgU0FBNjc1MkhTX0NPTU1BTkRfUkVDT05GSUdVUkU6CiAJCWJ1ZlswXSA9IDB4MDU7CiAJCWJyZWFrOwogCi0gIAljYXNlIFNBQTY3NTJIU19DT01NQU5EX1NMRUVQOgotICAJCWJ1ZlswXSA9IDB4MDY7CisJY2FzZSBTQUE2NzUySFNfQ09NTUFORF9TTEVFUDoKKwkJYnVmWzBdID0gMHgwNjsKIAkJYnJlYWs7CiAKLSAgCWNhc2UgU0FBNjc1MkhTX0NPTU1BTkRfUkVDT05GSUdVUkVfRk9SQ0U6CisJY2FzZSBTQUE2NzUySFNfQ09NTUFORF9SRUNPTkZJR1VSRV9GT1JDRToKIAkJYnVmWzBdID0gMHgwNzsKIAkJYnJlYWs7CiAKQEAgLTIwMCwxMyArMjAwLDEzIEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotICAJLy8gc2V0IGl0IGFuZCB3YWl0IGZvciBpdCB0byBiZSBzbworCS8qIHNldCBpdCBhbmQgd2FpdCBmb3IgaXQgdG8gYmUgc28gKi8KIAlpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBidWYsIDEpOwogCXRpbWVvdXQgPSBqaWZmaWVzICsgSFogKiAzOwogCWZvciAoOzspIHsKLQkJLy8gZ2V0IHRoZSBjdXJyZW50IHN0YXR1cworCQkvKiBnZXQgdGhlIGN1cnJlbnQgc3RhdHVzICovCiAJCWJ1ZlswXSA9IDB4MTA7Ci0JICAJaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYnVmLCAxKTsKKwkJaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYnVmLCAxKTsKIAkJaTJjX21hc3Rlcl9yZWN2KGNsaWVudCwgYnVmLCAxKTsKIAogCQlpZiAoIShidWZbMF0gJiAweDIwKSkKQEAgLTIxNiw2MSArMjE2LDU4IEBACiAJCQlicmVhazsKIAkJfQogCi0JCS8vIHdhaXQgYSBiaXQKIAkJbXNsZWVwKDEwKTsKIAl9CiAKLQkvLyBkZWxheSBhIGJpdCB0byBsZXQgZW5jb2RlciBzZXR0bGUKKwkvKiBkZWxheSBhIGJpdCB0byBsZXQgZW5jb2RlciBzZXR0bGUgKi8KIAltc2xlZXAoNTApOwogCi0JLy8gZG9uZQotICAJcmV0dXJuIHN0YXR1czsKKwlyZXR1cm4gc3RhdHVzOwogfQogCiAKIHN0YXRpYyBpbnQgc2FhNjc1MmhzX3NldF9iaXRyYXRlKHN0cnVjdCBpMmNfY2xpZW50KiBjbGllbnQsCiAJCQkJIHN0cnVjdCB2NGwyX21wZWdfY29tcHJlc3Npb24qIHBhcmFtcykKIHsKLSAgCXU4IGJ1ZlszXTsKKwl1OCBidWZbM107CiAKLQkvLyBzZXQgdGhlIGJpdHJhdGUgbW9kZQorCS8qIHNldCB0aGUgYml0cmF0ZSBtb2RlICovCiAJYnVmWzBdID0gMHg3MTsKIAlidWZbMV0gPSAocGFyYW1zLT52aV9iaXRyYXRlLm1vZGUgPT0gVjRMMl9CSVRSQVRFX1ZCUikgPyAwIDogMTsKIAlpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBidWYsIDIpOwogCi0JLy8gc2V0IHRoZSB2aWRlbyBiaXRyYXRlCisJLyogc2V0IHRoZSB2aWRlbyBiaXRyYXRlICovCiAJaWYgKHBhcmFtcy0+dmlfYml0cmF0ZS5tb2RlID09IFY0TDJfQklUUkFURV9WQlIpIHsKLQkJLy8gc2V0IHRoZSB0YXJnZXQgYml0cmF0ZQorCQkvKiBzZXQgdGhlIHRhcmdldCBiaXRyYXRlICovCiAJCWJ1ZlswXSA9IDB4ODA7CiAJICAgIAlidWZbMV0gPSBwYXJhbXMtPnZpX2JpdHJhdGUudGFyZ2V0ID4+IDg7Ci0JICAJYnVmWzJdID0gcGFyYW1zLT52aV9iaXRyYXRlLnRhcmdldCAmIDB4ZmY7CisJCWJ1ZlsyXSA9IHBhcmFtcy0+dmlfYml0cmF0ZS50YXJnZXQgJiAweGZmOwogCQlpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBidWYsIDMpOwogCi0JCS8vIHNldCB0aGUgbWF4IGJpdHJhdGUKKwkJLyogc2V0IHRoZSBtYXggYml0cmF0ZSAqLwogCQlidWZbMF0gPSAweDgxOwogCSAgICAJYnVmWzFdID0gcGFyYW1zLT52aV9iaXRyYXRlLm1heCA+PiA4OwotCSAgCWJ1ZlsyXSA9IHBhcmFtcy0+dmlfYml0cmF0ZS5tYXggJiAweGZmOworCQlidWZbMl0gPSBwYXJhbXMtPnZpX2JpdHJhdGUubWF4ICYgMHhmZjsKIAkJaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYnVmLCAzKTsKIAl9IGVsc2UgewotCQkvLyBzZXQgdGhlIHRhcmdldCBiaXRyYXRlIChubyBtYXggYml0cmF0ZSBmb3IgQ0JSKQotICAJCWJ1ZlswXSA9IDB4ODE7CisJCS8qIHNldCB0aGUgdGFyZ2V0IGJpdHJhdGUgKG5vIG1heCBiaXRyYXRlIGZvciBDQlIpICovCisJCWJ1ZlswXSA9IDB4ODE7CiAJICAgIAlidWZbMV0gPSBwYXJhbXMtPnZpX2JpdHJhdGUudGFyZ2V0ID4+IDg7Ci0JICAJYnVmWzJdID0gcGFyYW1zLT52aV9iaXRyYXRlLnRhcmdldCAmIDB4ZmY7CisJCWJ1ZlsyXSA9IHBhcmFtcy0+dmlfYml0cmF0ZS50YXJnZXQgJiAweGZmOwogCQlpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBidWYsIDMpOwogCX0KIAotCS8vIHNldCB0aGUgYXVkaW8gYml0cmF0ZQotIAlidWZbMF0gPSAweDk0OworCS8qIHNldCB0aGUgYXVkaW8gYml0cmF0ZSAqLworCWJ1ZlswXSA9IDB4OTQ7CiAJYnVmWzFdID0gKDI1NiA9PSBwYXJhbXMtPmF1X2JpdHJhdGUudGFyZ2V0KSA/IDAgOiAxOwogCWkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJ1ZiwgMik7CiAKLQkvLyBzZXQgdGhlIHRvdGFsIGJpdHJhdGUKKwkvKiBzZXQgdGhlIHRvdGFsIGJpdHJhdGUgKi8KIAlidWZbMF0gPSAweGIxOwotICAJYnVmWzFdID0gcGFyYW1zLT5zdF9iaXRyYXRlLnRhcmdldCA+PiA4OwotICAJYnVmWzJdID0gcGFyYW1zLT5zdF9iaXRyYXRlLnRhcmdldCAmIDB4ZmY7CisJYnVmWzFdID0gcGFyYW1zLT5zdF9iaXRyYXRlLnRhcmdldCA+PiA4OworCWJ1ZlsyXSA9IHBhcmFtcy0+c3RfYml0cmF0ZS50YXJnZXQgJiAweGZmOwogCWkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJ1ZiwgMyk7CiAKLQkvLyByZXR1cm4gc3VjY2VzcwogCXJldHVybiAwOwogfQogCkBAIC0zNzYsMzYgKzM3Myw0MyBAQAogCiAJaCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCi0JLy8gU2V0IHZpZGVvIGZvcm1hdCAtIG11c3QgYmUgZG9uZSBmaXJzdCBhcyBpdCByZXNldHMgb3RoZXIgc2V0dGluZ3MKKwkvKiBTZXQgdmlkZW8gZm9ybWF0IC0gbXVzdCBiZSBkb25lIGZpcnN0IGFzIGl0IHJlc2V0cyBvdGhlciBzZXR0aW5ncyAqLwogCWJ1ZlswXSA9IDB4NDE7CiAJYnVmWzFdID0gaC0+dmlkZW9fZm9ybWF0OwogCWkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJ1ZiwgMik7CiAKLSAgICAgICAgLy8gc2V0IGJpdHJhdGUKLSAgICAgICAgc2FhNjc1MmhzX3NldF9iaXRyYXRlKGNsaWVudCwgJmgtPnBhcmFtcyk7CisJLyogU2V0IG51bWJlciBvZiBsaW5lcyBpbiBpbnB1dCBzaWduYWwgKi8KKwlidWZbMF0gPSAweDQwOworCWJ1ZlsxXSA9IDB4MDA7CisJaWYgKGgtPnN0YW5kYXJkICYgVjRMMl9TVERfNTI1XzYwKQorCQlidWZbMV0gPSAweDAxOworCWkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJ1ZiwgMik7CiAKLQkvLyBTZXQgR09QIHN0cnVjdHVyZSB7MywgMTN9CisJLyogc2V0IGJpdHJhdGUgKi8KKwlzYWE2NzUyaHNfc2V0X2JpdHJhdGUoY2xpZW50LCAmaC0+cGFyYW1zKTsKKworCS8qIFNldCBHT1Agc3RydWN0dXJlIHszLCAxM30gKi8KIAlidWZbMF0gPSAweDcyOwogCWJ1ZlsxXSA9IDB4MDM7CiAJYnVmWzJdID0gMHgwRDsKIAlpMmNfbWFzdGVyX3NlbmQoY2xpZW50LGJ1ZiwzKTsKIAotICAgIAkvLyBTZXQgbWluaW11bSBRLXNjYWxlIHs0fQorICAgIAkvKiBTZXQgbWluaW11bSBRLXNjYWxlIHs0fSAqLwogCWJ1ZlswXSA9IDB4ODI7CiAJYnVmWzFdID0gMHgwNDsKIAlpMmNfbWFzdGVyX3NlbmQoY2xpZW50LGJ1ZiwyKTsKIAotICAgIAkvLyBTZXQgbWF4aW11bSBRLXNjYWxlIHsxMn0KKyAgICAJLyogU2V0IG1heGltdW0gUS1zY2FsZSB7MTJ9ICovCiAJYnVmWzBdID0gMHg4MzsKIAlidWZbMV0gPSAweDBDOwogCWkyY19tYXN0ZXJfc2VuZChjbGllbnQsYnVmLDIpOwogCi0gICAgCS8vIFNldCBPdXRwdXQgUHJvdG9jb2wKKyAgICAJLyogU2V0IE91dHB1dCBQcm90b2NvbCAqLwogCWJ1ZlswXSA9IDB4RDA7CiAJYnVmWzFdID0gMHg4MTsKIAlpMmNfbWFzdGVyX3NlbmQoY2xpZW50LGJ1ZiwyKTsKIAotICAgIAkvLyBTZXQgdmlkZW8gb3V0cHV0IHN0cmVhbSBmb3JtYXQge1RTfQorICAgIAkvKiBTZXQgdmlkZW8gb3V0cHV0IHN0cmVhbSBmb3JtYXQge1RTfSAqLwogCWJ1ZlswXSA9IDB4QjA7CiAJYnVmWzFdID0gMHgwNTsKIAlpMmNfbWFzdGVyX3NlbmQoY2xpZW50LGJ1ZiwyKTsKQEAgLTQyMSw5ICs0MjUsOSBAQAogCWxvY2FsUEFUW3NpemVvZihQQVQpIC0gMV0gPSBjcmMgJiAweEZGOwogCiAJLyogY29tcHV0ZSBQTVQgKi8KLSAgICAgIAltZW1jcHkobG9jYWxQTVQsIFBNVCwgc2l6ZW9mKFBNVCkpOwotICAgCWxvY2FsUE1UWzNdID0gMHg0MCB8ICgoaC0+cGFyYW1zLnRzX3BpZF9wbXQgPj4gOCkgJiAweDBmKTsKLSAgIAlsb2NhbFBNVFs0XSA9IGgtPnBhcmFtcy50c19waWRfcG10ICYgMHhmZjsKKwltZW1jcHkobG9jYWxQTVQsIFBNVCwgc2l6ZW9mKFBNVCkpOworCWxvY2FsUE1UWzNdID0gMHg0MCB8ICgoaC0+cGFyYW1zLnRzX3BpZF9wbXQgPj4gOCkgJiAweDBmKTsKKwlsb2NhbFBNVFs0XSA9IGgtPnBhcmFtcy50c19waWRfcG10ICYgMHhmZjsKIAlsb2NhbFBNVFsxNV0gPSAweEUwIHwgKChoLT5wYXJhbXMudHNfcGlkX3BjciA+PiA4KSAmIDB4MEYpOwogCWxvY2FsUE1UWzE2XSA9IGgtPnBhcmFtcy50c19waWRfcGNyICYgMHhGRjsKIAlsb2NhbFBNVFsyMF0gPSAweEUwIHwgKChoLT5wYXJhbXMudHNfcGlkX3ZpZGVvID4+IDgpICYgMHgwRik7CkBAIC00MzYsMzkgKzQ0MCwzOSBAQAogCWxvY2FsUE1UW3NpemVvZihQTVQpIC0gMl0gPSAoY3JjID4+IDgpICYgMHhGRjsKIAlsb2NhbFBNVFtzaXplb2YoUE1UKSAtIDFdID0gY3JjICYgMHhGRjsKIAotICAgIAkvLyBTZXQgQXVkaW8gUElECisgICAgCS8qIFNldCBBdWRpbyBQSUQgKi8KIAlidWZbMF0gPSAweEMxOwogCWJ1ZlsxXSA9IChoLT5wYXJhbXMudHNfcGlkX2F1ZGlvID4+IDgpICYgMHhGRjsKIAlidWZbMl0gPSBoLT5wYXJhbXMudHNfcGlkX2F1ZGlvICYgMHhGRjsKIAlpMmNfbWFzdGVyX3NlbmQoY2xpZW50LGJ1ZiwzKTsKIAotCS8vIFNldCBWaWRlbyBQSUQKKwkvKiBTZXQgVmlkZW8gUElEICovCiAJYnVmWzBdID0gMHhDMDsKIAlidWZbMV0gPSAoaC0+cGFyYW1zLnRzX3BpZF92aWRlbyA+PiA4KSAmIDB4RkY7CiAJYnVmWzJdID0gaC0+cGFyYW1zLnRzX3BpZF92aWRlbyAmIDB4RkY7CiAJaTJjX21hc3Rlcl9zZW5kKGNsaWVudCxidWYsMyk7CiAKLSAJLy8gU2V0IFBDUiBQSUQKKwkvKiBTZXQgUENSIFBJRCAqLwogCWJ1ZlswXSA9IDB4QzQ7CiAJYnVmWzFdID0gKGgtPnBhcmFtcy50c19waWRfcGNyID4+IDgpICYgMHhGRjsKIAlidWZbMl0gPSBoLT5wYXJhbXMudHNfcGlkX3BjciAmIDB4RkY7CiAJaTJjX21hc3Rlcl9zZW5kKGNsaWVudCxidWYsMyk7CiAKLQkvLyBTZW5kIFNJIHRhYmxlcworCS8qIFNlbmQgU0kgdGFibGVzICovCiAJaTJjX21hc3Rlcl9zZW5kKGNsaWVudCxsb2NhbFBBVCxzaXplb2YoUEFUKSk7CiAJaTJjX21hc3Rlcl9zZW5kKGNsaWVudCxsb2NhbFBNVCxzaXplb2YoUE1UKSk7CiAKLQkvLyBtdXRlIHRoZW4gdW5tdXRlIGF1ZGlvLiBUaGlzIHJlbW92ZXMgYnV6emluZyBhcnRlZmFjdHMKKwkvKiBtdXRlIHRoZW4gdW5tdXRlIGF1ZGlvLiBUaGlzIHJlbW92ZXMgYnV6emluZyBhcnRlZmFjdHMgKi8KIAlidWZbMF0gPSAweGE0OwogCWJ1ZlsxXSA9IDE7CiAJaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYnVmLCAyKTsKLSAgCWJ1ZlsxXSA9IDA7CisJYnVmWzFdID0gMDsKIAlpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBidWYsIDIpOwogCi0JLy8gc3RhcnQgaXQgZ29pbmcKKwkvKiBzdGFydCBpdCBnb2luZyAqLwogCXNhYTY3NTJoc19jaGlwX2NvbW1hbmQoY2xpZW50LCBTQUE2NzUySFNfQ09NTUFORF9TVEFSVCk7CiAKLQkvLyByZWFkb3V0IGN1cnJlbnQgc3RhdGUKKwkvKiByZWFkb3V0IGN1cnJlbnQgc3RhdGUgKi8KIAlidWZbMF0gPSAweEUxOwogCWJ1ZlsxXSA9IDB4QTc7CiAJYnVmWzJdID0gMHhGRTsKQEAgLTQ3Nyw3ICs0ODEsNyBAQAogCWkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJ1ZiwgNSk7CiAJaTJjX21hc3Rlcl9yZWN2KGNsaWVudCwgYnVmMiwgNCk7CiAKLQkvLyBjaGFuZ2UgYXNwZWN0IHJhdGlvCisJLyogY2hhbmdlIGFzcGVjdCByYXRpbyAqLwogCWJ1ZlswXSA9IDB4RTA7CiAJYnVmWzFdID0gMHhBNzsKIAlidWZbMl0gPSAweEZFOwpAQCAtNDk4LDcgKzUwMiw2IEBACiAJYnVmWzhdID0gYnVmMlszXTsKIAlpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBidWYsIDkpOwogCi0gICAJLy8gcmV0dXJuIHN1Y2Nlc3MKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTA2LDE2ICs1MDksMTkgQEAKIHsKIAlzdHJ1Y3Qgc2FhNjc1MmhzX3N0YXRlICpoOwogCi0gICAgICAgIHByaW50aygic2FhNjc1MmhzOiBjaGlwIGZvdW5kIEAgMHgleFxuIiwgYWRkcjw8MSk7CisJcHJpbnRrKCJzYWE2NzUyaHM6IGNoaXAgZm91bmQgQCAweCV4XG4iLCBhZGRyPDwxKTsKIAotICAgICAgICBpZiAoTlVMTCA9PSAoaCA9IGttYWxsb2Moc2l6ZW9mKCpoKSwgR0ZQX0tFUk5FTCkpKQotICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOworCWlmIChOVUxMID09IChoID0ga21hbGxvYyhzaXplb2YoKmgpLCBHRlBfS0VSTkVMKSkpCisJCXJldHVybiAtRU5PTUVNOwogCW1lbXNldChoLDAsc2l6ZW9mKCpoKSk7CiAJaC0+Y2xpZW50ID0gY2xpZW50X3RlbXBsYXRlOwogCWgtPnBhcmFtcyA9IHBhcmFtX2RlZmF1bHRzOwogCWgtPmNsaWVudC5hZGFwdGVyID0gYWRhcDsKIAloLT5jbGllbnQuYWRkciA9IGFkZHI7CiAKKwkvKiBBc3N1bWUgNjI1IGlucHV0IGxpbmVzICovCisJaC0+c3RhbmRhcmQgPSAwOworCiAJaTJjX3NldF9jbGllbnRkYXRhKCZoLT5jbGllbnQsIGgpOwogICAgICAgICBpMmNfYXR0YWNoX2NsaWVudCgmaC0+Y2xpZW50KTsKIAlyZXR1cm4gMDsKQEAgLTU0NSw3ICs1NTEsNyBAQAogCXN0cnVjdCB2NGwyX21wZWdfY29tcHJlc3Npb24gKnBhcmFtcyA9IGFyZzsKIAlpbnQgZXJyID0gMDsKIAotICAgICAgICBzd2l0Y2ggKGNtZCkgeworCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBWSURJT0NfU19NUEVHQ09NUDoKIAkJaWYgKE5VTEwgPT0gcGFyYW1zKSB7CiAJCQkvKiBhcHBseSBzZXR0aW5ncyBhbmQgc3RhcnQgZW5jb2RlciAqLwpAQCAtNTU5LDcgKzU2NSw3IEBACiAJCWJyZWFrOwogCWNhc2UgVklESU9DX0dfRk1UOgogCXsKLSAgICAgICAgICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmID0gYXJnOworCSAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZiA9IGFyZzsKIAogCSAgIGlmIChoLT52aWRlb19mb3JtYXQgPT0gU0FBNjc1MkhTX1ZGX1VOS05PV04pCiAJCSAgIGgtPnZpZGVvX2Zvcm1hdCA9IFNBQTY3NTJIU19WRl9EMTsKQEAgLTU3Niw2ICs1ODIsOSBAQAogCQlzYWE2NzUyaHNfc2V0X3N1YnNhbXBsaW5nKGNsaWVudCwgZik7CiAJCWJyZWFrOwogCX0KKwljYXNlIFZJRElPQ19TX1NURDoKKwkJaC0+c3RhbmRhcmQgPSAqKCh2NGwyX3N0ZF9pZCAqKSBhcmcpOworCQlicmVhazsKIAlkZWZhdWx0OgogCQkvKiBub3RoaW5nICovCiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtYWxzYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtYWxzYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmM2M0MjMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1hbHNhLmMKQEAgLTAsMCArMSwxMDQ3IEBACisvKgorICogICBTQUE3MTN4IEFMU0Egc3VwcG9ydCBmb3IgVjRMCisgKgorICoKKyAqICAgQ2F2ZWF0czoKKyAqICAgICAgICAtIFZvbHVtZSBkb2Vzbid0IHdvcmsgKGl0J3MgYWx3YXlzIGF0IG1heCkKKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8c291bmQvZHJpdmVyLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL2NvbnRyb2wuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisKKyNpbmNsdWRlICJzYWE3MTM0LmgiCisjaW5jbHVkZSAic2FhNzEzNC1yZWcuaCIKKworc3RhdGljIHVuc2lnbmVkIGludCBkZWJ1ZyAgPSAwOworbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywiZW5hYmxlIGRlYnVnIG1lc3NhZ2VzIFthbHNhXSIpOworCisvKgorICogQ29uZmlndXJhdGlvbiBtYWNyb3MKKyAqLworCisvKiBkZWZhdWx0cyAqLworI2RlZmluZSBNSVhFUl9BRERSX1RWVFVORVIJMAorI2RlZmluZSBNSVhFUl9BRERSX0xJTkUxCTEKKyNkZWZpbmUgTUlYRVJfQUREUl9MSU5FMgkyCisjZGVmaW5lIE1JWEVSX0FERFJfTEFTVAkJMgorCitzdGF0aWMgaW50IGluZGV4W1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfSURYOwkvKiBJbmRleCAwLU1BWCAqLworc3RhdGljIGNoYXIgKmlkW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfU1RSOwkvKiBJRCBmb3IgdGhpcyBjYXJkICovCitzdGF0aWMgaW50IGVuYWJsZVtTTkRSVl9DQVJEU10gPSB7MSwgWzEgLi4uIChTTkRSVl9DQVJEUyAtIDEpXSA9IDB9OworCittb2R1bGVfcGFyYW1fYXJyYXkoaW5kZXgsIGludCwgTlVMTCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGluZGV4LCAiSW5kZXggdmFsdWUgZm9yIFNBQTcxMzQgY2FwdHVyZSBpbnRlcmZhY2UocykuIik7CisKKyNkZWZpbmUgZHByaW50ayhmbXQsIGFyZy4uLikgICAgaWYgKGRlYnVnKSBcCisgICAgICAgIHByaW50ayhLRVJOX0RFQlVHICIlcy9hbHNhOiAiIGZtdCwgZGV2LT5uYW1lICwgIyMgYXJnKQorCisvKgorICogTWFpbiBjaGlwIHN0cnVjdHVyZQorICovCit0eXBlZGVmIHN0cnVjdCBzbmRfY2FyZF9zYWE3MTM0IHsKKwlzbmRfY2FyZF90ICpjYXJkOworCXNwaW5sb2NrX3QgbWl4ZXJfbG9jazsKKwlpbnQgbWl4ZXJfdm9sdW1lW01JWEVSX0FERFJfTEFTVCsxXVsyXTsKKwlpbnQgY2FwdHVyZV9zb3VyY2VbTUlYRVJfQUREUl9MQVNUKzFdWzJdOworCXN0cnVjdCBwY2lfZGV2ICpwY2k7CisJc3RydWN0IHNhYTcxMzRfZGV2ICpzYWFkZXY7CisKKwl1bnNpZ25lZCBsb25nIGlvYmFzZTsKKwlpbnQgaXJxOworCisJc3BpbmxvY2tfdCBsb2NrOworfSBzbmRfY2FyZF9zYWE3MTM0X3Q7CisKKworCisvKgorICogUENNIHN0cnVjdHVyZQorICovCisKK3R5cGVkZWYgc3RydWN0IHNuZF9jYXJkX3NhYTcxMzRfcGNtIHsKKwlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKnNhYWRldjsKKworCXNwaW5sb2NrX3QgbG9jazsKKwl1bnNpZ25lZCBpbnQgcGNtX3NpemU7CQkvKiBidWZmZXIgc2l6ZSAqLworCXVuc2lnbmVkIGludCBwY21fY291bnQ7CQkvKiBieXRlcyBwZXIgcGVyaW9kICovCisJdW5zaWduZWQgaW50IHBjbV9icHM7CQkvKiBieXRlcyBwZXIgc2Vjb25kICovCisJc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtOworfSBzbmRfY2FyZF9zYWE3MTM0X3BjbV90OworCitzdGF0aWMgc25kX2NhcmRfdCAqc25kX3NhYTcxMzRfY2FyZHNbU05EUlZfQ0FSRFNdOworCisKKy8qCisgKiBzYWE3MTM0IERNQSBhdWRpbyBzdG9wCisgKgorICogICBDYWxsZWQgd2hlbiB0aGUgY2FwdHVyZSBkZXZpY2UgaXMgcmVsZWFzZWQgb3IgdGhlIGJ1ZmZlciBvdmVyZmxvd3MKKyAqCisgKiAgIC0gQ29waWVkIHZlcmJhdGltIGZyb20gc2FhNzEzNC1vc3MncyBkc3BfZG1hX3N0b3AuIENhbiBiZSBkcm9wcGVkCisgKiAgICAgaWYgd2UganVzdCBzaGFyZSBkc3BfZG1hX3N0b3AgYW5kIHVzZSBpdCBoZXJlCisgKgorICovCisKK3N0YXRpYyB2b2lkIHNhYTcxMzRfZG1hX3N0b3Aoc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYpCisKK3sKKwlkZXYtPmRtYXNvdW5kLmRtYV9ibGsgICAgID0gLTE7CisJZGV2LT5kbWFzb3VuZC5kbWFfcnVubmluZyA9IDA7CisJc2FhNzEzNF9zZXRfZG1hYml0cyhkZXYpOworfQorCisvKgorICogc2FhNzEzNCBETUEgYXVkaW8gc3RhcnQKKyAqCisgKiAgIENhbGxlZCB3aGVuIHByZXBhcmluZyB0aGUgY2FwdHVyZSBkZXZpY2UgZm9yIHVzZQorICoKKyAqICAgLSBDb3BpZWQgdmVyYmF0aW0gZnJvbSBzYWE3MTM0LW9zcydzIGRzcF9kbWFfc3RhcnQuIENhbiBiZSBkcm9wcGVkCisgKiAgICAgaWYgd2UganVzdCBzaGFyZSBkc3BfZG1hX3N0YXJ0IGFuZCB1c2UgaXQgaGVyZQorICoKKyAqLworCitzdGF0aWMgdm9pZCBzYWE3MTM0X2RtYV9zdGFydChzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldikKK3sKKwlkZXYtPmRtYXNvdW5kLmRtYV9ibGsgICAgID0gMDsKKwlkZXYtPmRtYXNvdW5kLmRtYV9ydW5uaW5nID0gMTsKKwlzYWE3MTM0X3NldF9kbWFiaXRzKGRldik7Cit9CisKKy8qCisgKiBzYWE3MTM0IGF1ZGlvIERNQSBJUlEgaGFuZGxlcgorICoKKyAqICAgQ2FsbGVkIHdoZW5ldmVyIHdlIGdldCBhbiBTQUE3MTM0X0lSUV9SRVBPUlRfRE9ORV9SQTMgaW50ZXJydXB0CisgKiAgIEhhbmRsZXMgc2hpZnRpbmcgYmV0d2VlbiB0aGUgMiBidWZmZXJzLCBtYW5hZ2VzIHRoZSByZWFkIGNvdW50ZXJzLAorICogIGFuZCBub3RpZmllcyBBTFNBIHdoZW4gcGVyaW9kcyBlbGFwc2UKKyAqCisgKiAgIC0gTW9zdGx5IGNvcGllZCBmcm9tIHNhYTcxMzQtb3NzJ3Mgc2FhNzEzNF9pcnFfb3NzX2RvbmUuCisgKgorICovCisKK3ZvaWQgc2FhNzEzNF9pcnFfYWxzYV9kb25lKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHN0YXR1cykKK3sKKwlpbnQgbmV4dF9ibGssIHJlZyA9IDA7CisKKwlzcGluX2xvY2soJmRldi0+c2xvY2spOworCWlmIChVTlNFVCA9PSBkZXYtPmRtYXNvdW5kLmRtYV9ibGspIHsKKwkJZHByaW50aygiaXJxOiByZWNvcmRpbmcgc3RvcHBlZFxuIik7CisJCWdvdG8gZG9uZTsKKwl9CisJaWYgKDAgIT0gKHN0YXR1cyAmIDB4MGYwMDAwMDApKQorCQlkcHJpbnRrKCJpcnE6IGxvc3QgJWxkXG4iLCAoc3RhdHVzID4+IDI0KSAmIDB4MGYpOworCWlmICgwID09IChzdGF0dXMgJiAweDEwMDAwMDAwKSkgeworCQkvKiBvZGQgKi8KKwkJaWYgKDAgPT0gKGRldi0+ZG1hc291bmQuZG1hX2JsayAmIDB4MDEpKQorCQkJcmVnID0gU0FBNzEzNF9SU19CQTEoNik7CisJfSBlbHNlIHsKKwkJLyogZXZlbiAqLworCQlpZiAoMSA9PSAoZGV2LT5kbWFzb3VuZC5kbWFfYmxrICYgMHgwMSkpCisJCQlyZWcgPSBTQUE3MTM0X1JTX0JBMig2KTsKKwl9CisJaWYgKDAgPT0gcmVnKSB7CisJCWRwcmludGsoImlycTogZmllbGQgb29wcyBbJXNdXG4iLAorCQkJKHN0YXR1cyAmIDB4MTAwMDAwMDApID8gImV2ZW4iIDogIm9kZCIpOworCQlnb3RvIGRvbmU7CisJfQorCisJaWYgKGRldi0+ZG1hc291bmQucmVhZF9jb3VudCA+PSBkZXYtPmRtYXNvdW5kLmJsa3NpemUgKiAoZGV2LT5kbWFzb3VuZC5ibG9ja3MtMikpIHsKKwkJZHByaW50aygiaXJxOiBvdmVycnVuIFtmdWxsPSVkLyVkXSAtIEJsb2NrcyBpbiAlZFxuIixkZXYtPmRtYXNvdW5kLnJlYWRfY291bnQsCisJCQlkZXYtPmRtYXNvdW5kLmJ1ZnNpemUsIGRldi0+ZG1hc291bmQuYmxvY2tzKTsKKwkJc25kX3BjbV9zdG9wKGRldi0+ZG1hc291bmQuc3Vic3RyZWFtLFNORFJWX1BDTV9TVEFURV9YUlVOKTsKKwkJc2FhNzEzNF9kbWFfc3RvcChkZXYpOworCQlnb3RvIGRvbmU7CisJfQorCisJLyogbmV4dCBibG9jayBhZGRyICovCisJbmV4dF9ibGsgPSAoZGV2LT5kbWFzb3VuZC5kbWFfYmxrICsgMikgJSBkZXYtPmRtYXNvdW5kLmJsb2NrczsKKwlzYWFfd3JpdGVsKHJlZyxuZXh0X2JsayAqIGRldi0+ZG1hc291bmQuYmxrc2l6ZSk7CisJaWYgKGRlYnVnID4gMikKKwkJZHByaW50aygiaXJxOiBvaywgJXMsIG5leHRfYmxrPSVkLCBhZGRyPSV4LCBibG9ja3M9JXUsIHNpemU9JXUsIHJlYWQ9JXVcbiIsCisJCQkoc3RhdHVzICYgMHgxMDAwMDAwMCkgPyAiZXZlbiIgOiAib2RkICIsIG5leHRfYmxrLAorCQkJbmV4dF9ibGsgKiBkZXYtPmRtYXNvdW5kLmJsa3NpemUsIGRldi0+ZG1hc291bmQuYmxvY2tzLCBkZXYtPmRtYXNvdW5kLmJsa3NpemUsIGRldi0+ZG1hc291bmQucmVhZF9jb3VudCk7CisKKwkvKiB1cGRhdGUgc3RhdHVzICYgd2FrZSB3YWl0aW5nIHJlYWRlcnMgKi8KKwlkZXYtPmRtYXNvdW5kLmRtYV9ibGsgPSAoZGV2LT5kbWFzb3VuZC5kbWFfYmxrICsgMSkgJSBkZXYtPmRtYXNvdW5kLmJsb2NrczsKKwlkZXYtPmRtYXNvdW5kLnJlYWRfY291bnQgKz0gZGV2LT5kbWFzb3VuZC5ibGtzaXplOworCisJZGV2LT5kbWFzb3VuZC5yZWNvcmRpbmdfb24gPSByZWc7CisKKwlpZiAoZGV2LT5kbWFzb3VuZC5yZWFkX2NvdW50ID49IHNuZF9wY21fbGliX3BlcmlvZF9ieXRlcyhkZXYtPmRtYXNvdW5kLnN1YnN0cmVhbSkpIHsKKwkJc3Bpbl91bmxvY2soJmRldi0+c2xvY2spOworCQlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKGRldi0+ZG1hc291bmQuc3Vic3RyZWFtKTsKKwkJc3Bpbl9sb2NrKCZkZXYtPnNsb2NrKTsKKwl9CisgZG9uZToKKwlzcGluX3VubG9jaygmZGV2LT5zbG9jayk7CisKK30KKworLyoKKyAqIElSUSByZXF1ZXN0IGhhbmRsZXIKKyAqCisgKiAgIFJ1bnMgYWxvbmcgd2l0aCBzYWE3MTM0J3MgSVJRIGhhbmRsZXIsIGRpc2NhcmRzIGFueXRoaW5nIHRoYXQgaXNuJ3QKKyAqICAgRE1BIHNvdW5kCisgKgorICovCisKK3N0YXRpYyBpcnFyZXR1cm5fdCBzYWE3MTM0X2Fsc2FfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYgPSAoc3RydWN0IHNhYTcxMzRfZGV2KikgZGV2X2lkOworCXVuc2lnbmVkIGxvbmcgcmVwb3J0LCBzdGF0dXM7CisJaW50IGxvb3AsIGhhbmRsZWQgPSAwOworCisJZm9yIChsb29wID0gMDsgbG9vcCA8IDEwOyBsb29wKyspIHsKKwkJcmVwb3J0ID0gc2FhX3JlYWRsKFNBQTcxMzRfSVJRX1JFUE9SVCk7CisJCXN0YXR1cyA9IHNhYV9yZWFkbChTQUE3MTM0X0lSUV9TVEFUVVMpOworCisJCWlmIChyZXBvcnQgJiBTQUE3MTM0X0lSUV9SRVBPUlRfRE9ORV9SQTMpIHsKKwkJCWhhbmRsZWQgPSAxOworCQkJc2FhX3dyaXRlbChTQUE3MTM0X0lSUV9SRVBPUlQscmVwb3J0KTsKKwkJCXNhYTcxMzRfaXJxX2Fsc2FfZG9uZShkZXYsIHN0YXR1cyk7CisJCX0gZWxzZSB7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCWlmIChsb29wID09IDEwKSB7CisJCWRwcmludGsoImVycm9yISBsb29waW5nIElSUSEiKTsKKwl9CisKK291dDoKKwlyZXR1cm4gSVJRX1JFVFZBTChoYW5kbGVkKTsKK30KKworLyoKKyAqIEFMU0EgY2FwdHVyZSB0cmlnZ2VyCisgKgorICogICAtIE9uZSBvZiB0aGUgQUxTQSBjYXB0dXJlIGNhbGxiYWNrcy4KKyAqCisgKiAgIENhbGxlZCB3aGVuZXZlciBhIGNhcHR1cmUgaXMgc3RhcnRlZCBvciBzdG9wcGVkLiBNdXN0IGJlIGRlZmluZWQsCisgKiAgIGJ1dCB0aGVyZSdzIG5vdGhpbmcgd2Ugd2FudCB0byBkbyBoZXJlCisgKgorICovCisKK3N0YXRpYyBpbnQgc25kX2NhcmRfc2FhNzEzNF9jYXB0dXJlX3RyaWdnZXIoc25kX3BjbV9zdWJzdHJlYW1fdCAqIHN1YnN0cmVhbSwKKwkJCQkJICBpbnQgY21kKQoreworCXNuZF9wY21fcnVudGltZV90ICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXNuZF9jYXJkX3NhYTcxMzRfcGNtX3QgKnNhYXBjbSA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldj1zYWFwY20tPnNhYWRldjsKKwlpbnQgZXJyID0gMDsKKworCXNwaW5fbG9ja19pcnEoJmRldi0+c2xvY2spOworICAgICAgICBpZiAoY21kID09IFNORFJWX1BDTV9UUklHR0VSX1NUQVJUKSB7CisJCS8qIHN0YXJ0IGRtYSAqLworCQlzYWE3MTM0X2RtYV9zdGFydChkZXYpOworICAgICAgICB9IGVsc2UgaWYgKGNtZCA9PSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QKSB7CisJCS8qIHN0b3AgZG1hICovCisJCXNhYTcxMzRfZG1hX3N0b3AoZGV2KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBlcnIgPSAtRUlOVkFMOworICAgICAgICB9CisJc3Bpbl91bmxvY2tfaXJxKCZkZXYtPnNsb2NrKTsKKworICAgICAgICByZXR1cm4gZXJyOworfQorCisvKgorICogRE1BIGJ1ZmZlciBjb25maWcKKyAqCisgKiAgIFNldHMgdGhlIHZhbHVlcyB0aGF0IHdpbGwgbGF0ZXIgYmUgdXNlZCBhcyB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyLAorICogIHNpemUgb2YgdGhlIGZyYWdtZW50cywgYW5kIHRvdGFsIG51bWJlciBvZiBmcmFnbWVudHMuCisgKiAgIE11c3QgYmUgY2FsbGVkIGR1cmluZyB0aGUgcHJlcGFyYXRpb24gc3RhZ2UsIGJlZm9yZSBtZW1vcnkgaXMKKyAqICBhbGxvY2F0ZWQKKyAqCisgKiAgIC0gQ29waWVkIHZlcmJhdGltIGZyb20gc2FhNzEzNC1vc3MuIENhbiBiZSBkcm9wcGVkCisgKiAgICAgaWYgd2UganVzdCBzaGFyZSBkc3BfYnVmZmVyX2NvbmYgZnJvbSBPU1MuCisgKi8KKworc3RhdGljIGludCBkc3BfYnVmZmVyX2NvbmYoc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYsIGludCBibGtzaXplLCBpbnQgYmxvY2tzKQoreworCWlmIChibGtzaXplIDwgMHgxMDApCisJCWJsa3NpemUgPSAweDEwMDsKKwlpZiAoYmxrc2l6ZSA+IDB4MTAwMDApCisJCWJsa3NpemUgPSAweDEwMDAwOworCisJaWYgKGJsb2NrcyA8IDIpCisJCWJsb2NrcyA9IDI7CisJaWYgKChibGtzaXplICogYmxvY2tzKSA+IDEwMjQqMTAyNCkKKwkJYmxvY2tzID0gMTAyNCoxMDI0IC8gYmxrc2l6ZTsKKworCWRldi0+ZG1hc291bmQuYmxvY2tzICA9IGJsb2NrczsKKwlkZXYtPmRtYXNvdW5kLmJsa3NpemUgPSBibGtzaXplOworCWRldi0+ZG1hc291bmQuYnVmc2l6ZSA9IGJsa3NpemUgKiBibG9ja3M7CisKKwlkcHJpbnRrKCJidWZmZXIgY29uZmlnOiAlZCBibG9ja3MgLyAlZCBieXRlcywgJWQga0IgdG90YWxcbiIsCisJCWJsb2NrcyxibGtzaXplLGJsa3NpemUgKiBibG9ja3MgLyAxMDI0KTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIERNQSBidWZmZXIgaW5pdGlhbGl6YXRpb24KKyAqCisgKiAgIFVzZXMgVjRMIGZ1bmN0aW9ucyB0byBpbml0aWFsaXplIHRoZSBETUEuIFNob3VsZG4ndCBiZSBuZWNlc3NhcnkgaW4KKyAqICBBTFNBLCBidXQgSSB3YXMgdW5hYmxlIHRvIHVzZSBBTFNBJ3Mgb3duIERNQSwgYW5kIGhhZCB0byBmb3JjZSB0aGUKKyAqICB1c2FnZSBvZiBWNEwncworICoKKyAqICAgLSBDb3BpZWQgdmVyYmF0aW0gZnJvbSBzYWE3MTM0LW9zcy4gQ2FuIGJlIGRyb3BwZWQKKyAqICAgICBpZiB3ZSBqdXN0IHNoYXJlIGRzcF9idWZmZXJfaW5pdCBmcm9tIE9TUy4KKyAqLworCitzdGF0aWMgaW50IGRzcF9idWZmZXJfaW5pdChzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldikKK3sKKwlpbnQgZXJyOworCisJaWYgKCFkZXYtPmRtYXNvdW5kLmJ1ZnNpemUpCisJCUJVRygpOworCXZpZGVvYnVmX2RtYV9pbml0KCZkZXYtPmRtYXNvdW5kLmRtYSk7CisJZXJyID0gdmlkZW9idWZfZG1hX2luaXRfa2VybmVsKCZkZXYtPmRtYXNvdW5kLmRtYSwgUENJX0RNQV9GUk9NREVWSUNFLAorCQkJCSAgICAgICAoZGV2LT5kbWFzb3VuZC5idWZzaXplICsgUEFHRV9TSVpFKSA+PiBQQUdFX1NISUZUKTsKKwlpZiAoMCAhPSBlcnIpCisJCXJldHVybiBlcnI7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBBTFNBIFBDTSBwcmVwYXJhdGlvbgorICoKKyAqICAgLSBPbmUgb2YgdGhlIEFMU0EgY2FwdHVyZSBjYWxsYmFja3MuCisgKgorICogICBDYWxsZWQgcmlnaHQgYWZ0ZXIgdGhlIGNhcHR1cmUgZGV2aWNlIGlzIG9wZW5lZCwgdGhpcyBmdW5jdGlvbiBjb25maWd1cmVzCisgKiAgdGhlIGJ1ZmZlciB1c2luZyB0aGUgcHJldmlvdXNseSBkZWZpbmVkIGZ1bmN0aW9ucywgYWxsb2NhdGVzIHRoZSBtZW1vcnksCisgKiAgc2V0cyB1cCB0aGUgaGFyZHdhcmUgcmVnaXN0ZXJzLCBhbmQgdGhlbiBzdGFydHMgdGhlIERNQS4gV2hlbiB0aGlzIGZ1bmN0aW9uCisgKiAgcmV0dXJucywgdGhlIGF1ZGlvIHNob3VsZCBiZSBmbG93aW5nLgorICoKKyAqLworCitzdGF0aWMgaW50IHNuZF9jYXJkX3NhYTcxMzRfY2FwdHVyZV9wcmVwYXJlKHNuZF9wY21fc3Vic3RyZWFtX3QgKiBzdWJzdHJlYW0pCit7CisJc25kX3BjbV9ydW50aW1lX3QgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJaW50IGVyciwgYnN3YXAsIHNpZ247CisJdTMyIGZtdCwgY29udHJvbDsKKwlzbmRfY2FyZF9zYWE3MTM0X3QgKnNhYTcxMzQgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJc3RydWN0IHNhYTcxMzRfZGV2ICpkZXY7CisJc25kX2NhcmRfc2FhNzEzNF9wY21fdCAqc2FhcGNtID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGludCBicHM7CisJdW5zaWduZWQgbG9uZyBzaXplOworCXVuc2lnbmVkIGNvdW50OworCisJc2l6ZSA9IHNuZF9wY21fbGliX2J1ZmZlcl9ieXRlcyhzdWJzdHJlYW0pOworCWNvdW50ID0gc25kX3BjbV9saWJfcGVyaW9kX2J5dGVzKHN1YnN0cmVhbSk7CisKKwlzYWFwY20tPnNhYWRldi0+ZG1hc291bmQuc3Vic3RyZWFtID0gc3Vic3RyZWFtOworCWJwcyA9IHJ1bnRpbWUtPnJhdGUgKiBydW50aW1lLT5jaGFubmVsczsKKwlicHMgKj0gc25kX3BjbV9mb3JtYXRfd2lkdGgocnVudGltZS0+Zm9ybWF0KTsKKwlicHMgLz0gODsKKwlpZiAoYnBzIDw9IDApCisJCXJldHVybiAtRUlOVkFMOworCXNhYXBjbS0+cGNtX2JwcyA9IGJwczsKKwlzYWFwY20tPnBjbV9zaXplID0gc25kX3BjbV9saWJfYnVmZmVyX2J5dGVzKHN1YnN0cmVhbSk7CisJc2FhcGNtLT5wY21fY291bnQgPSBzbmRfcGNtX2xpYl9wZXJpb2RfYnl0ZXMoc3Vic3RyZWFtKTsKKworCisJZGV2PXNhYTcxMzQtPnNhYWRldjsKKworCWRzcF9idWZmZXJfY29uZihkZXYsc2FhcGNtLT5wY21fY291bnQsKHNhYXBjbS0+cGNtX3NpemUvc2FhcGNtLT5wY21fY291bnQpKTsKKworCWVyciA9IGRzcF9idWZmZXJfaW5pdChkZXYpOworCWlmICgwICE9IGVycikKKwkJZ290byBmYWlsMjsKKworCS8qIHByZXBhcmUgYnVmZmVyICovCisJaWYgKDAgIT0gKGVyciA9IHZpZGVvYnVmX2RtYV9wY2lfbWFwKGRldi0+cGNpLCZkZXYtPmRtYXNvdW5kLmRtYSkpKQorCQlyZXR1cm4gZXJyOworCWlmICgwICE9IChlcnIgPSBzYWE3MTM0X3BndGFibGVfYWxsb2MoZGV2LT5wY2ksJmRldi0+ZG1hc291bmQucHQpKSkKKwkJZ290byBmYWlsMTsKKwlpZiAoMCAhPSAoZXJyID0gc2FhNzEzNF9wZ3RhYmxlX2J1aWxkKGRldi0+cGNpLCZkZXYtPmRtYXNvdW5kLnB0LAorCQkJCQkgICAgICBkZXYtPmRtYXNvdW5kLmRtYS5zZ2xpc3QsCisJCQkJCSAgICAgIGRldi0+ZG1hc291bmQuZG1hLnNnbGVuLAorCQkJCQkgICAgICAwKSkpCisJCWdvdG8gZmFpbDI7CisKKworCisJc3dpdGNoIChydW50aW1lLT5mb3JtYXQpIHsKKwkgIGNhc2UgU05EUlZfUENNX0ZPUk1BVF9VODoKKwkgIGNhc2UgU05EUlZfUENNX0ZPUk1BVF9TODoKKwkJZm10ID0gMHgwMDsKKwkJYnJlYWs7CisJICBjYXNlIFNORFJWX1BDTV9GT1JNQVRfVTE2X0xFOgorCSAgY2FzZSBTTkRSVl9QQ01fRk9STUFUX1UxNl9CRToKKwkgIGNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMTZfTEU6CisJICBjYXNlIFNORFJWX1BDTV9GT1JNQVRfUzE2X0JFOgorCQlmbXQgPSAweDAxOworCQlicmVhazsKKwkgIGRlZmF1bHQ6CisJCWVyciA9IC1FSU5WQUw7CisJCXJldHVybiAxOworCX0KKworCXN3aXRjaCAocnVudGltZS0+Zm9ybWF0KSB7CisJICBjYXNlIFNORFJWX1BDTV9GT1JNQVRfUzg6CisJICBjYXNlIFNORFJWX1BDTV9GT1JNQVRfUzE2X0xFOgorCSAgY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MxNl9CRToKKwkJc2lnbiA9IDE7CisJCWJyZWFrOworCSAgZGVmYXVsdDoKKwkJc2lnbiA9IDA7CisJCWJyZWFrOworCX0KKworCXN3aXRjaCAocnVudGltZS0+Zm9ybWF0KSB7CisJICBjYXNlIFNORFJWX1BDTV9GT1JNQVRfVTE2X0JFOgorCSAgY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MxNl9CRToKKwkJYnN3YXAgPSAxOyBicmVhazsKKwkgIGRlZmF1bHQ6CisJCWJzd2FwID0gMDsgYnJlYWs7CisJfQorCisJc3dpdGNoIChkZXYtPnBjaS0+ZGV2aWNlKSB7CisJICBjYXNlIFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTM0OgorCQlpZiAoMSA9PSBydW50aW1lLT5jaGFubmVscykKKwkJCWZtdCB8PSAoMSA8PCAzKTsKKwkJaWYgKDIgPT0gcnVudGltZS0+Y2hhbm5lbHMpCisJCQlmbXQgfD0gKDMgPDwgMyk7CisJCWlmIChzaWduKQorCQkJZm10IHw9IDB4MDQ7CisKKwkJZm10IHw9IChNSVhFUl9BRERSX1RWVFVORVIgPT0gZGV2LT5kbWFzb3VuZC5pbnB1dCkgPyAweGMwIDogMHg4MDsKKwkJc2FhX3dyaXRlYihTQUE3MTM0X05VTV9TQU1QTEVTMCwgKChkZXYtPmRtYXNvdW5kLmJsa3NpemUgLSAxKSAmIDB4MDAwMGZmKSk7CisJCXNhYV93cml0ZWIoU0FBNzEzNF9OVU1fU0FNUExFUzEsICgoZGV2LT5kbWFzb3VuZC5ibGtzaXplIC0gMSkgJiAweDAwZmYwMCkgPj4gIDgpOworCQlzYWFfd3JpdGViKFNBQTcxMzRfTlVNX1NBTVBMRVMyLCAoKGRldi0+ZG1hc291bmQuYmxrc2l6ZSAtIDEpICYgMHhmZjAwMDApID4+IDE2KTsKKwkJc2FhX3dyaXRlYihTQUE3MTM0X0FVRElPX0ZPUk1BVF9DVFJMLCBmbXQpOworCisJCWJyZWFrOworCSAgY2FzZSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzMzoKKwkgIGNhc2UgUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzU6CisJCWlmICgxID09IHJ1bnRpbWUtPmNoYW5uZWxzKQorCQkJZm10IHw9ICgxIDw8IDQpOworCQlpZiAoMiA9PSBydW50aW1lLT5jaGFubmVscykKKwkJCWZtdCB8PSAoMiA8PCA0KTsKKwkJaWYgKCFzaWduKQorCQkJZm10IHw9IDB4MDQ7CisJCXNhYV93cml0ZWwoU0FBNzEzM19OVU1fU0FNUExFUywgZGV2LT5kbWFzb3VuZC5ibGtzaXplIC0xKTsKKwkJc2FhX3dyaXRlbChTQUE3MTMzX0FVRElPX0NIQU5ORUwsIDB4NTQzMjEwIHwgKGZtdCA8PCAyNCkpOworCQkvL3NhYV93cml0ZWwoU0FBNzEzM19BVURJT19DSEFOTkVMLCAweDU0MzIxMCk7CisJCWJyZWFrOworCX0KKworCWRwcmludGsoInJlY19zdGFydDogYWZtdD0lZCBjaD0lZCAgPT4gIGZtdD0weCV4IHN3YXA9JWNcbiIsCisJCXJ1bnRpbWUtPmZvcm1hdCwgcnVudGltZS0+Y2hhbm5lbHMsIGZtdCwKKwkJYnN3YXAgPyAnYicgOiAnLScpOworCS8qIGRtYTogc2V0dXAgY2hhbm5lbCA2ICg9IEFVRElPKSAqLworCWNvbnRyb2wgPSBTQUE3MTM0X1JTX0NPTlRST0xfQlVSU1RfMTYgfAorCQlTQUE3MTM0X1JTX0NPTlRST0xfTUUgfAorCQkoZGV2LT5kbWFzb3VuZC5wdC5kbWEgPj4gMTIpOworCWlmIChic3dhcCkKKwkJY29udHJvbCB8PSBTQUE3MTM0X1JTX0NPTlRST0xfQlNXQVA7CisKKwkvKiBJIHNob3VsZCBiZSBhYmxlIHRvIHVzZSBydW50aW1lLT5kbWFfYWRkciBpbiB0aGUgY29udHJvbAorCSAgIGJ5dGUsIGJ1dCBpdCBkb2Vzbid0IHdvcmsuIFNvIEkgYWxsb2NhdGUgdGhlIERNQSB1c2luZyB0aGUKKwkgICBWNEwgZnVuY3Rpb25zLCBhbmQgZm9yY2UgQUxTQSB0byB1c2UgdGhhdCBhcyB0aGUgRE1BIGFyZWEgKi8KKworCXJ1bnRpbWUtPmRtYV9hcmVhID0gZGV2LT5kbWFzb3VuZC5kbWEudm1hbGxvYzsKKworCXNhYV93cml0ZWwoU0FBNzEzNF9SU19CQTEoNiksMCk7CisJc2FhX3dyaXRlbChTQUE3MTM0X1JTX0JBMig2KSxkZXYtPmRtYXNvdW5kLmJsa3NpemUpOworCXNhYV93cml0ZWwoU0FBNzEzNF9SU19QSVRDSCg2KSwwKTsKKwlzYWFfd3JpdGVsKFNBQTcxMzRfUlNfQ09OVFJPTCg2KSxjb250cm9sKTsKKworCWRldi0+ZG1hc291bmQucmF0ZSA9IHJ1bnRpbWUtPnJhdGU7CisKKwlyZXR1cm4gMDsKKyBmYWlsMjoKKwlzYWE3MTM0X3BndGFibGVfZnJlZShkZXYtPnBjaSwmZGV2LT5kbWFzb3VuZC5wdCk7CisgZmFpbDE6CisJdmlkZW9idWZfZG1hX3BjaV91bm1hcChkZXYtPnBjaSwmZGV2LT5kbWFzb3VuZC5kbWEpOworCXJldHVybiBlcnI7CisKKworfQorCisvKgorICogQUxTQSBwb2ludGVyIGZldGNoaW5nCisgKgorICogICAtIE9uZSBvZiB0aGUgQUxTQSBjYXB0dXJlIGNhbGxiYWNrcy4KKyAqCisgKiAgIENhbGxlZCB3aGVuZXZlciBhIHBlcmlvZCBlbGFwc2VzLCBpdCBtdXN0IHJldHVybiB0aGUgY3VycmVudCBoYXJkd2FyZQorICogIHBvc2l0aW9uIG9mIHRoZSBidWZmZXIuCisgKiAgIEFsc28gcmVzZXRzIHRoZSByZWFkIGNvdW50ZXIgdXNlZCB0byBwcmV2ZW50IG92ZXJydW5zCisgKgorICovCisKK3N0YXRpYyBzbmRfcGNtX3VmcmFtZXNfdCBzbmRfY2FyZF9zYWE3MTM0X2NhcHR1cmVfcG9pbnRlcihzbmRfcGNtX3N1YnN0cmVhbV90ICogc3Vic3RyZWFtKQoreworCXNuZF9wY21fcnVudGltZV90ICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXNuZF9jYXJkX3NhYTcxMzRfcGNtX3QgKnNhYXBjbSA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldj1zYWFwY20tPnNhYWRldjsKKworCisKKwlpZiAoZGV2LT5kbWFzb3VuZC5yZWFkX2NvdW50KSB7CisJCWRldi0+ZG1hc291bmQucmVhZF9jb3VudCAgLT0gc25kX3BjbV9saWJfcGVyaW9kX2J5dGVzKHN1YnN0cmVhbSk7CisJCWRldi0+ZG1hc291bmQucmVhZF9vZmZzZXQgKz0gc25kX3BjbV9saWJfcGVyaW9kX2J5dGVzKHN1YnN0cmVhbSk7CisJCWlmIChkZXYtPmRtYXNvdW5kLnJlYWRfb2Zmc2V0ID09IGRldi0+ZG1hc291bmQuYnVmc2l6ZSkKKwkJCWRldi0+ZG1hc291bmQucmVhZF9vZmZzZXQgPSAwOworCX0KKworCXJldHVybiBieXRlc190b19mcmFtZXMocnVudGltZSwgZGV2LT5kbWFzb3VuZC5yZWFkX29mZnNldCk7Cit9CisKKy8qCisgKiBBTFNBIGhhcmR3YXJlIGNhcGFiaWxpdGllcyBkZWZpbml0aW9uCisgKi8KKworc3RhdGljIHNuZF9wY21faGFyZHdhcmVfdCBzbmRfY2FyZF9zYWE3MTM0X2NhcHR1cmUgPQoreworCS5pbmZvID0gICAgICAgICAgICAgICAgIChTTkRSVl9QQ01fSU5GT19NTUFQIHwgU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfAorCQkJCSBTTkRSVl9QQ01fSU5GT19CTE9DS19UUkFOU0ZFUiB8CisJCQkJIFNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQpLAorCS5mb3JtYXRzID0JCVNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwgXAorCQkJCVNORFJWX1BDTV9GTVRCSVRfUzE2X0JFIHwgXAorCQkJCVNORFJWX1BDTV9GTVRCSVRfUzggfCBcCisJCQkJU05EUlZfUENNX0ZNVEJJVF9VOCB8IFwKKwkJCQlTTkRSVl9QQ01fRk1UQklUX1UxNl9MRSB8IFwKKwkJCQlTTkRSVl9QQ01fRk1UQklUX1UxNl9CRSwKKwkucmF0ZXMgPQkJU05EUlZfUENNX1JBVEVfMzIwMDAgfCBTTkRSVl9QQ01fUkFURV80ODAwMCwKKwkucmF0ZV9taW4gPQkJMzIwMDAsCisJLnJhdGVfbWF4ID0JCTQ4MDAwLAorCS5jaGFubmVsc19taW4gPQkJMSwKKwkuY2hhbm5lbHNfbWF4ID0JCTIsCisJLmJ1ZmZlcl9ieXRlc19tYXggPQkoMjU2KjEwMjQpLAorCS5wZXJpb2RfYnl0ZXNfbWluID0JNjQsCisJLnBlcmlvZF9ieXRlc19tYXggPQkoMjU2KjEwMjQpLAorCS5wZXJpb2RzX21pbiA9CQkyLAorCS5wZXJpb2RzX21heCA9CQkxMDI0LAorfTsKKworc3RhdGljIHZvaWQgc25kX2NhcmRfc2FhNzEzNF9ydW50aW1lX2ZyZWUoc25kX3BjbV9ydW50aW1lX3QgKnJ1bnRpbWUpCit7CisJc25kX2NhcmRfc2FhNzEzNF9wY21fdCAqc2FhcGNtID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOworCisJa2ZyZWUoc2FhcGNtKTsKK30KKworCisvKgorICogQUxTQSBoYXJkd2FyZSBwYXJhbXMKKyAqCisgKiAgIC0gT25lIG9mIHRoZSBBTFNBIGNhcHR1cmUgY2FsbGJhY2tzLgorICoKKyAqICAgQ2FsbGVkIG9uIGluaXRpYWxpemF0aW9uLCByaWdodCBiZWZvcmUgdGhlIFBDTSBwcmVwYXJhdGlvbgorICogICBVc3VhbGx5IHVzZWQgaW4gQUxTQSB0byBhbGxvY2F0ZSB0aGUgRE1BLCBidXQgc2luY2Ugd2UgZG9uJ3QgdXNlIHRoZQorICogIEFMU0EgRE1BIGl0IGRvZXMgbm90aGluZworICoKKyAqLworCitzdGF0aWMgaW50IHNuZF9jYXJkX3NhYTcxMzRfaHdfcGFyYW1zKHNuZF9wY21fc3Vic3RyZWFtX3QgKiBzdWJzdHJlYW0sCisJCQkJICAgIHNuZF9wY21faHdfcGFyYW1zX3QgKiBod19wYXJhbXMpCit7CisKKwlyZXR1cm4gMDsKKworCit9CisKKy8qCisgKiBBTFNBIGhhcmR3YXJlIHJlbGVhc2UKKyAqCisgKiAgIC0gT25lIG9mIHRoZSBBTFNBIGNhcHR1cmUgY2FsbGJhY2tzLgorICoKKyAqICAgQ2FsbGVkIGFmdGVyIGNsb3NpbmcgdGhlIGRldmljZSwgYnV0IGJlZm9yZSBzbmRfY2FyZF9zYWE3MTM0X2NhcHR1cmVfY2xvc2UKKyAqICAgVXN1YWxseSB1c2VkIGluIEFMU0EgdG8gZnJlZSB0aGUgRE1BLCBidXQgc2luY2Ugd2UgZG9uJ3QgdXNlIHRoZQorICogIEFMU0EgRE1BIEknbSBhbG1vc3Qgc3VyZSB0aGlzIGlzbid0IG5lY2Vzc2FyeS4KKyAqCisgKi8KKworc3RhdGljIGludCBzbmRfY2FyZF9zYWE3MTM0X2h3X2ZyZWUoc25kX3BjbV9zdWJzdHJlYW1fdCAqIHN1YnN0cmVhbSkKK3sKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIERNQSBidWZmZXIgcmVsZWFzZQorICoKKyAqICAgQ2FsbGVkIGFmdGVyIGNsb3NpbmcgdGhlIGRldmljZSwgZHVyaW5nIHNuZF9jYXJkX3NhYTcxMzRfY2FwdHVyZV9jbG9zZQorICoKKyAqLworCitzdGF0aWMgaW50IGRzcF9idWZmZXJfZnJlZShzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldikKK3sKKwlpZiAoIWRldi0+ZG1hc291bmQuYmxrc2l6ZSkKKwkJQlVHKCk7CisKKwl2aWRlb2J1Zl9kbWFfZnJlZSgmZGV2LT5kbWFzb3VuZC5kbWEpOworCisJZGV2LT5kbWFzb3VuZC5ibG9ja3MgID0gMDsKKwlkZXYtPmRtYXNvdW5kLmJsa3NpemUgPSAwOworCWRldi0+ZG1hc291bmQuYnVmc2l6ZSA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEFMU0EgY2FwdHVyZSBmaW5pc2gKKyAqCisgKiAgIC0gT25lIG9mIHRoZSBBTFNBIGNhcHR1cmUgY2FsbGJhY2tzLgorICoKKyAqICAgQ2FsbGVkIGFmdGVyIGNsb3NpbmcgdGhlIGRldmljZS4gSXQgc3RvcHMgdGhlIERNQSBhdWRpbyBhbmQgcmVsZWFzZXMKKyAqICB0aGUgYnVmZmVycworICoKKyAqLworCitzdGF0aWMgaW50IHNuZF9jYXJkX3NhYTcxMzRfY2FwdHVyZV9jbG9zZShzbmRfcGNtX3N1YnN0cmVhbV90ICogc3Vic3RyZWFtKQoreworCXNuZF9jYXJkX3NhYTcxMzRfdCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiA9IGNoaXAtPnNhYWRldjsKKworCS8qIHVubG9jayBidWZmZXIgKi8KKwlzYWE3MTM0X3BndGFibGVfZnJlZShkZXYtPnBjaSwmZGV2LT5kbWFzb3VuZC5wdCk7CisJdmlkZW9idWZfZG1hX3BjaV91bm1hcChkZXYtPnBjaSwmZGV2LT5kbWFzb3VuZC5kbWEpOworCisJZHNwX2J1ZmZlcl9mcmVlKGRldik7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBBTFNBIGNhcHR1cmUgc3RhcnQKKyAqCisgKiAgIC0gT25lIG9mIHRoZSBBTFNBIGNhcHR1cmUgY2FsbGJhY2tzLgorICoKKyAqICAgQ2FsbGVkIHdoZW4gb3BlbmluZyB0aGUgZGV2aWNlLiBJdCBjcmVhdGVzIGFuZCBwb3B1bGF0ZXMgdGhlIFBDTQorICogIHN0cnVjdHVyZQorICoKKyAqLworCitzdGF0aWMgaW50IHNuZF9jYXJkX3NhYTcxMzRfY2FwdHVyZV9vcGVuKHNuZF9wY21fc3Vic3RyZWFtX3QgKiBzdWJzdHJlYW0pCit7CisJc25kX3BjbV9ydW50aW1lX3QgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc25kX2NhcmRfc2FhNzEzNF9wY21fdCAqc2FhcGNtOworCXNuZF9jYXJkX3NhYTcxMzRfdCAqc2FhNzEzNCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiA9IHNhYTcxMzQtPnNhYWRldjsKKwlpbnQgZXJyOworCisJZG93bigmZGV2LT5kbWFzb3VuZC5sb2NrKTsKKworCWRldi0+ZG1hc291bmQuYWZtdCAgICAgICAgPSBTTkRSVl9QQ01fRk9STUFUX1U4OworCWRldi0+ZG1hc291bmQuY2hhbm5lbHMgICAgPSAyOworCWRldi0+ZG1hc291bmQucmVhZF9jb3VudCAgPSAwOworCWRldi0+ZG1hc291bmQucmVhZF9vZmZzZXQgPSAwOworCisJdXAoJmRldi0+ZG1hc291bmQubG9jayk7CisKKwlzYWFwY20gPSBremFsbG9jKHNpemVvZigqc2FhcGNtKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHNhYXBjbSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwlzYWFwY20tPnNhYWRldj1zYWE3MTM0LT5zYWFkZXY7CisKKwlzcGluX2xvY2tfaW5pdCgmc2FhcGNtLT5sb2NrKTsKKworCXNhYXBjbS0+c3Vic3RyZWFtID0gc3Vic3RyZWFtOworCXJ1bnRpbWUtPnByaXZhdGVfZGF0YSA9IHNhYXBjbTsKKwlydW50aW1lLT5wcml2YXRlX2ZyZWUgPSBzbmRfY2FyZF9zYWE3MTM0X3J1bnRpbWVfZnJlZTsKKwlydW50aW1lLT5odyA9IHNuZF9jYXJkX3NhYTcxMzRfY2FwdHVyZTsKKworCWlmICgoZXJyID0gc25kX3BjbV9od19jb25zdHJhaW50X2ludGVnZXIocnVudGltZSwgU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRFMpKSA8IDApCisJCXJldHVybiBlcnI7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEFMU0EgY2FwdHVyZSBjYWxsYmFja3MgZGVmaW5pdGlvbgorICovCisKK3N0YXRpYyBzbmRfcGNtX29wc190IHNuZF9jYXJkX3NhYTcxMzRfY2FwdHVyZV9vcHMgPSB7CisJLm9wZW4gPQkJCXNuZF9jYXJkX3NhYTcxMzRfY2FwdHVyZV9vcGVuLAorCS5jbG9zZSA9CQlzbmRfY2FyZF9zYWE3MTM0X2NhcHR1cmVfY2xvc2UsCisJLmlvY3RsID0JCXNuZF9wY21fbGliX2lvY3RsLAorCS5od19wYXJhbXMgPQkJc25kX2NhcmRfc2FhNzEzNF9od19wYXJhbXMsCisJLmh3X2ZyZWUgPQkJc25kX2NhcmRfc2FhNzEzNF9od19mcmVlLAorCS5wcmVwYXJlID0JCXNuZF9jYXJkX3NhYTcxMzRfY2FwdHVyZV9wcmVwYXJlLAorCS50cmlnZ2VyID0JCXNuZF9jYXJkX3NhYTcxMzRfY2FwdHVyZV90cmlnZ2VyLAorCS5wb2ludGVyID0JCXNuZF9jYXJkX3NhYTcxMzRfY2FwdHVyZV9wb2ludGVyLAorfTsKKworLyoKKyAqIEFMU0EgUENNIHNldHVwCisgKgorICogICBDYWxsZWQgd2hlbiBpbml0aWFsaXppbmcgdGhlIGJvYXJkLiBTZXRzIHVwIHRoZSBuYW1lIGFuZCBob29rcyB1cAorICogIHRoZSBjYWxsYmFja3MKKyAqCisgKi8KKworc3RhdGljIGludCBzbmRfY2FyZF9zYWE3MTM0X3BjbShzbmRfY2FyZF9zYWE3MTM0X3QgKnNhYTcxMzQsIGludCBkZXZpY2UpCit7CisJc25kX3BjbV90ICpwY207CisJaW50IGVycjsKKworCWlmICgoZXJyID0gc25kX3BjbV9uZXcoc2FhNzEzNC0+Y2FyZCwgIlNBQTcxMzQgUENNIiwgZGV2aWNlLCAwLCAxLCAmcGNtKSkgPCAwKQorCQlyZXR1cm4gZXJyOworCXNuZF9wY21fc2V0X29wcyhwY20sIFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSwgJnNuZF9jYXJkX3NhYTcxMzRfY2FwdHVyZV9vcHMpOworCXBjbS0+cHJpdmF0ZV9kYXRhID0gc2FhNzEzNDsKKwlwY20tPmluZm9fZmxhZ3MgPSAwOworCXN0cmNweShwY20tPm5hbWUsICJTQUE3MTM0IFBDTSIpOworCXJldHVybiAwOworfQorCisjZGVmaW5lIFNBQTcxM3hfVk9MVU1FKHhuYW1lLCB4aW5kZXgsIGFkZHIpIFwKK3sgLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIC5uYW1lID0geG5hbWUsIC5pbmRleCA9IHhpbmRleCwgXAorICAuaW5mbyA9IHNuZF9zYWE3MTM0X3ZvbHVtZV9pbmZvLCBcCisgIC5nZXQgPSBzbmRfc2FhNzEzNF92b2x1bWVfZ2V0LCAucHV0ID0gc25kX3NhYTcxMzRfdm9sdW1lX3B1dCwgXAorICAucHJpdmF0ZV92YWx1ZSA9IGFkZHIgfQorCitzdGF0aWMgaW50IHNuZF9zYWE3MTM0X3ZvbHVtZV9pbmZvKHNuZF9rY29udHJvbF90ICoga2NvbnRyb2wsIHNuZF9jdGxfZWxlbV9pbmZvX3QgKiB1aW5mbykKK3sKKwl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfSU5URUdFUjsKKwl1aW5mby0+Y291bnQgPSAyOworCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1pbiA9IDA7CisJdWluZm8tPnZhbHVlLmludGVnZXIubWF4ID0gMjA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX3NhYTcxMzRfdm9sdW1lX2dldChzbmRfa2NvbnRyb2xfdCAqIGtjb250cm9sLCBzbmRfY3RsX2VsZW1fdmFsdWVfdCAqIHVjb250cm9sKQoreworCXNuZF9jYXJkX3NhYTcxMzRfdCAqY2hpcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlpbnQgYWRkciA9IGtjb250cm9sLT5wcml2YXRlX3ZhbHVlOworCisJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBjaGlwLT5taXhlcl92b2x1bWVbYWRkcl1bMF07CisJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMV0gPSBjaGlwLT5taXhlcl92b2x1bWVbYWRkcl1bMV07CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX3NhYTcxMzRfdm9sdW1lX3B1dChzbmRfa2NvbnRyb2xfdCAqIGtjb250cm9sLCBzbmRfY3RsX2VsZW1fdmFsdWVfdCAqIHVjb250cm9sKQoreworCXNuZF9jYXJkX3NhYTcxMzRfdCAqY2hpcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBjaGFuZ2UsIGFkZHIgPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKKwlpbnQgbGVmdCwgcmlnaHQ7CisKKwlsZWZ0ID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF07CisJaWYgKGxlZnQgPCAwKQorCQlsZWZ0ID0gMDsKKwlpZiAobGVmdCA+IDIwKQorCQlsZWZ0ID0gMjA7CisJcmlnaHQgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVsxXTsKKwlpZiAocmlnaHQgPCAwKQorCQlyaWdodCA9IDA7CisJaWYgKHJpZ2h0ID4gMjApCisJCXJpZ2h0ID0gMjA7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPm1peGVyX2xvY2ssIGZsYWdzKTsKKwljaGFuZ2UgPSBjaGlwLT5taXhlcl92b2x1bWVbYWRkcl1bMF0gIT0gbGVmdCB8fAorCQkgY2hpcC0+bWl4ZXJfdm9sdW1lW2FkZHJdWzFdICE9IHJpZ2h0OworCWNoaXAtPm1peGVyX3ZvbHVtZVthZGRyXVswXSA9IGxlZnQ7CisJY2hpcC0+bWl4ZXJfdm9sdW1lW2FkZHJdWzFdID0gcmlnaHQ7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+bWl4ZXJfbG9jaywgZmxhZ3MpOworCXJldHVybiBjaGFuZ2U7Cit9CisKKyNkZWZpbmUgU0FBNzEzeF9DQVBTUkMoeG5hbWUsIHhpbmRleCwgYWRkcikgXAoreyAuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgLm5hbWUgPSB4bmFtZSwgLmluZGV4ID0geGluZGV4LCBcCisgIC5pbmZvID0gc25kX3NhYTcxMzRfY2Fwc3JjX2luZm8sIFwKKyAgLmdldCA9IHNuZF9zYWE3MTM0X2NhcHNyY19nZXQsIC5wdXQgPSBzbmRfc2FhNzEzNF9jYXBzcmNfcHV0LCBcCisgIC5wcml2YXRlX3ZhbHVlID0gYWRkciB9CisKK3N0YXRpYyBpbnQgc25kX3NhYTcxMzRfY2Fwc3JjX2luZm8oc25kX2tjb250cm9sX3QgKiBrY29udHJvbCwgc25kX2N0bF9lbGVtX2luZm9fdCAqIHVpbmZvKQoreworCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9CT09MRUFOOworCXVpbmZvLT5jb3VudCA9IDI7CisJdWluZm8tPnZhbHVlLmludGVnZXIubWluID0gMDsKKwl1aW5mby0+dmFsdWUuaW50ZWdlci5tYXggPSAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9zYWE3MTM0X2NhcHNyY19nZXQoc25kX2tjb250cm9sX3QgKiBrY29udHJvbCwgc25kX2N0bF9lbGVtX3ZhbHVlX3QgKiB1Y29udHJvbCkKK3sKKwlzbmRfY2FyZF9zYWE3MTM0X3QgKmNoaXAgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgYWRkciA9IGtjb250cm9sLT5wcml2YXRlX3ZhbHVlOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPm1peGVyX2xvY2ssIGZsYWdzKTsKKwl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IGNoaXAtPmNhcHR1cmVfc291cmNlW2FkZHJdWzBdOworCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdID0gY2hpcC0+Y2FwdHVyZV9zb3VyY2VbYWRkcl1bMV07CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+bWl4ZXJfbG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9zYWE3MTM0X2NhcHNyY19wdXQoc25kX2tjb250cm9sX3QgKiBrY29udHJvbCwgc25kX2N0bF9lbGVtX3ZhbHVlX3QgKiB1Y29udHJvbCkKK3sKKwlzbmRfY2FyZF9zYWE3MTM0X3QgKmNoaXAgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgY2hhbmdlLCBhZGRyID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWU7CisJaW50IGxlZnQsIHJpZ2h0OworCXUzMiBhbmFiYXIsIHhiYXJpbjsKKwlpbnQgYW5hbG9nX2lvLCByYXRlOworCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2OworCisJZGV2ID0gY2hpcC0+c2FhZGV2OworCisJbGVmdCA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdICYgMTsKKwlyaWdodCA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdICYgMTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+bWl4ZXJfbG9jaywgZmxhZ3MpOworCisJY2hhbmdlID0gY2hpcC0+Y2FwdHVyZV9zb3VyY2VbYWRkcl1bMF0gIT0gbGVmdCB8fAorCQkgY2hpcC0+Y2FwdHVyZV9zb3VyY2VbYWRkcl1bMV0gIT0gcmlnaHQ7CisJY2hpcC0+Y2FwdHVyZV9zb3VyY2VbYWRkcl1bMF0gPSBsZWZ0OworCWNoaXAtPmNhcHR1cmVfc291cmNlW2FkZHJdWzFdID0gcmlnaHQ7CisJZGV2LT5kbWFzb3VuZC5pbnB1dD1hZGRyOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPm1peGVyX2xvY2ssIGZsYWdzKTsKKworCisJaWYgKGNoYW5nZSkgeworCSAgc3dpdGNoIChkZXYtPnBjaS0+ZGV2aWNlKSB7CisKKwkgICBjYXNlIFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTM0OgorCQlzd2l0Y2ggKGFkZHIpIHsKKwkJCWNhc2UgTUlYRVJfQUREUl9UVlRVTkVSOgorCQkJCXNhYV9hbmRvcmIoU0FBNzEzNF9BVURJT19GT1JNQVRfQ1RSTCwgMHhjMCwgMHhjMCk7CisJCQkJc2FhX2FuZG9yYihTQUE3MTM0X1NJRl9TQU1QTEVfRlJFUSwgICAweDAzLCAweDAwKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgTUlYRVJfQUREUl9MSU5FMToKKwkJCWNhc2UgTUlYRVJfQUREUl9MSU5FMjoKKwkJCQlhbmFsb2dfaW8gPSAoTUlYRVJfQUREUl9MSU5FMSA9PSBhZGRyKSA/IDB4MDAgOiAweDA4OworCQkJCXJhdGUgPSAoMzIwMDAgPT0gZGV2LT5kbWFzb3VuZC5yYXRlKSA/IDB4MDEgOiAweDAzOworCQkJCXNhYV9hbmRvcmIoU0FBNzEzNF9BTkFMT0dfSU9fU0VMRUNULCAgMHgwOCwgYW5hbG9nX2lvKTsKKwkJCQlzYWFfYW5kb3JiKFNBQTcxMzRfQVVESU9fRk9STUFUX0NUUkwsIDB4YzAsIDB4ODApOworCQkJCXNhYV9hbmRvcmIoU0FBNzEzNF9TSUZfU0FNUExFX0ZSRVEsICAgMHgwMywgcmF0ZSk7CisJCQkJYnJlYWs7CisJCX0KKworCQlicmVhazsKKwkgICBjYXNlIFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTMzOgorCSAgIGNhc2UgUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzU6CisJCXhiYXJpbiA9IDB4MDM7IC8vIGFkYworCQlhbmFiYXIgPSAwOworCQlzd2l0Y2ggKGFkZHIpIHsKKwkJCWNhc2UgTUlYRVJfQUREUl9UVlRVTkVSOgorCQkJCXhiYXJpbiA9IDA7IC8vIERlbW9kdWxhdG9yCisJCQkJYW5hYmFyID0gMjsgLy8gREFDcworCQkJCWJyZWFrOworCQkJY2FzZSBNSVhFUl9BRERSX0xJTkUxOgorCQkJCWFuYWJhciA9IDA7ICAvLyBhdXgxLCBhdXgxCisJCQkJYnJlYWs7CisJCQljYXNlIE1JWEVSX0FERFJfTElORTI6CisJCQkJYW5hYmFyID0gOTsgIC8vIGF1eDIsIGF1eDIKKwkJCQlicmVhazsKKwkJfQorCisJICAgIAkvKiBvdXRwdXQgeGJhciBhbHdheXMgbWFpbiBjaGFubmVsICovCisJCXNhYV9kc3Bfd3JpdGVsKGRldiwgU0FBNzEzM19ESUdJVEFMX09VVFBVVF9TRUwxLCAweGJiYmIxMCk7CisKKwkJaWYgKGxlZnQgfHwgcmlnaHQpIHsgLy8gV2UndmUgZ290IGRhdGEsIHR1cm4gdGhlIGlucHV0IG9uCisJCSAgc2FhX2RzcF93cml0ZWwoZGV2LCBTQUE3MTMzX0RJR0lUQUxfSU5QVVRfWEJBUjEsIHhiYXJpbik7CisJCSAgc2FhX3dyaXRlbChTQUE3MTMzX0FOQUxPR19JT19TRUxFQ1QsIGFuYWJhcik7CisJCX0gZWxzZSB7CisJCSAgc2FhX2RzcF93cml0ZWwoZGV2LCBTQUE3MTMzX0RJR0lUQUxfSU5QVVRfWEJBUjEsIDApOworCQkgIHNhYV93cml0ZWwoU0FBNzEzM19BTkFMT0dfSU9fU0VMRUNULCAwKTsKKwkJfQorCQlicmVhazsKKwkgIH0KKwl9CisKKwlyZXR1cm4gY2hhbmdlOworfQorCitzdGF0aWMgc25kX2tjb250cm9sX25ld190IHNuZF9zYWE3MTM0X2NvbnRyb2xzW10gPSB7CitTQUE3MTN4X1ZPTFVNRSgiVmlkZW8gVm9sdW1lIiwgMCwgTUlYRVJfQUREUl9UVlRVTkVSKSwKK1NBQTcxM3hfQ0FQU1JDKCJWaWRlbyBDYXB0dXJlIFN3aXRjaCIsIDAsIE1JWEVSX0FERFJfVFZUVU5FUiksCitTQUE3MTN4X1ZPTFVNRSgiTGluZSBWb2x1bWUiLCAxLCBNSVhFUl9BRERSX0xJTkUxKSwKK1NBQTcxM3hfQ0FQU1JDKCJMaW5lIENhcHR1cmUgU3dpdGNoIiwgMSwgTUlYRVJfQUREUl9MSU5FMSksCitTQUE3MTN4X1ZPTFVNRSgiTGluZSBWb2x1bWUiLCAyLCBNSVhFUl9BRERSX0xJTkUyKSwKK1NBQTcxM3hfQ0FQU1JDKCJMaW5lIENhcHR1cmUgU3dpdGNoIiwgMiwgTUlYRVJfQUREUl9MSU5FMiksCit9OworCisvKgorICogQUxTQSBtaXhlciBzZXR1cAorICoKKyAqICAgQ2FsbGVkIHdoZW4gaW5pdGlhbGl6aW5nIHRoZSBib2FyZC4gU2V0cyB1cCB0aGUgbmFtZSBhbmQgaG9va3MgdXAKKyAqICB0aGUgY2FsbGJhY2tzCisgKgorICovCisKK3N0YXRpYyBpbnQgc25kX2NhcmRfc2FhNzEzNF9uZXdfbWl4ZXIoc25kX2NhcmRfc2FhNzEzNF90ICogY2hpcCkKK3sKKwlzbmRfY2FyZF90ICpjYXJkID0gY2hpcC0+Y2FyZDsKKwl1bnNpZ25lZCBpbnQgaWR4OworCWludCBlcnI7CisKKwlzbmRfYXNzZXJ0KGNoaXAgIT0gTlVMTCwgcmV0dXJuIC1FSU5WQUwpOworCXN0cmNweShjYXJkLT5taXhlcm5hbWUsICJTQUE3MTM0IE1peGVyIik7CisKKwlmb3IgKGlkeCA9IDA7IGlkeCA8IEFSUkFZX1NJWkUoc25kX3NhYTcxMzRfY29udHJvbHMpOyBpZHgrKykgeworCQlpZiAoKGVyciA9IHNuZF9jdGxfYWRkKGNhcmQsIHNuZF9jdGxfbmV3MSgmc25kX3NhYTcxMzRfY29udHJvbHNbaWR4XSwgY2hpcCkpKSA8IDApCisJCQlyZXR1cm4gZXJyOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfc2FhNzEzNF9mcmVlKHNuZF9jYXJkX3NhYTcxMzRfdCAqY2hpcCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfc2FhNzEzNF9kZXZfZnJlZShzbmRfZGV2aWNlX3QgKmRldmljZSkKK3sKKwlzbmRfY2FyZF9zYWE3MTM0X3QgKmNoaXAgPSBkZXZpY2UtPmRldmljZV9kYXRhOworCXJldHVybiBzbmRfc2FhNzEzNF9mcmVlKGNoaXApOworfQorCisvKgorICogQUxTQSBpbml0aWFsaXphdGlvbgorICoKKyAqICAgQ2FsbGVkIGJ5IHNhYTcxMzQtY29yZSwgaXQgY3JlYXRlcyB0aGUgYmFzaWMgc3RydWN0dXJlcyBhbmQgcmVnaXN0ZXJzCisgKiAgdGhlIEFMU0EgZGV2aWNlcworICoKKyAqLworCitpbnQgYWxzYV9jYXJkX3NhYTcxMzRfY3JlYXRlIChzdHJ1Y3Qgc2FhNzEzNF9kZXYgKnNhYWRldikKK3sKKwlzdGF0aWMgaW50IGRldjsKKworCXNuZF9jYXJkX3QgKmNhcmQ7CisJc25kX2NhcmRfc2FhNzEzNF90ICpjaGlwOworCWludCBlcnI7CisJc3RhdGljIHNuZF9kZXZpY2Vfb3BzX3Qgb3BzID0geworCQkuZGV2X2ZyZWUgPSAgICAgc25kX3NhYTcxMzRfZGV2X2ZyZWUsCisJfTsKKworCisJaWYgKGRldiA+PSBTTkRSVl9DQVJEUykKKwkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKCFlbmFibGVbZGV2XSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKKworCWlmIChjYXJkID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJc3RyY3B5KGNhcmQtPmRyaXZlciwgIlNBQTcxMzQiKTsKKworCS8qIENhcmQgImNyZWF0aW9uIiAqLworCisJY2hpcCA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNoaXAgPT0gTlVMTCkgeworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlzcGluX2xvY2tfaW5pdCgmY2hpcC0+bG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmNoaXAtPm1peGVyX2xvY2spOworCisJY2hpcC0+c2FhZGV2ID0gc2FhZGV2OworCisJY2hpcC0+Y2FyZCA9IGNhcmQ7CisKKwljaGlwLT5wY2kgPSBzYWFkZXYtPnBjaTsKKwljaGlwLT5pcnEgPSBzYWFkZXYtPnBjaS0+aXJxOworCWNoaXAtPmlvYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChzYWFkZXYtPnBjaSwgMCk7CisKKwllcnIgPSByZXF1ZXN0X2lycShzYWFkZXYtPnBjaS0+aXJxLCBzYWE3MTM0X2Fsc2FfaXJxLAorCQkJCVNBX1NISVJRIHwgU0FfSU5URVJSVVBULCBzYWFkZXYtPm5hbWUsIHNhYWRldik7CisKKwlpZiAoZXJyIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYW4ndCBnZXQgSVJRICVkIGZvciBBTFNBXG4iLAorCQkJc2FhZGV2LT5uYW1lLCBzYWFkZXYtPnBjaS0+aXJxKTsKKwkJZ290byBfX25vZGV2OworCX0KKworCWlmICgoZXJyID0gc25kX2RldmljZV9uZXcoY2FyZCwgU05EUlZfREVWX0xPV0xFVkVMLCBjaGlwLCAmb3BzKSkgPCAwKSB7CisJCWdvdG8gX19ub2RldjsKKwl9CisKKwlpZiAoKGVyciA9IHNuZF9jYXJkX3NhYTcxMzRfbmV3X21peGVyKGNoaXApKSA8IDApCisJCWdvdG8gX19ub2RldjsKKworCWlmICgoZXJyID0gc25kX2NhcmRfc2FhNzEzNF9wY20oY2hpcCwgMCkpIDwgMCkKKwkJZ290byBfX25vZGV2OworCisJc25kX2NhcmRfc2V0X2RldihjYXJkLCAmY2hpcC0+cGNpLT5kZXYpOworCisJLyogRW5kIG9mICJjcmVhdGlvbiIgKi8KKworCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJTQUE3MTM0Iik7CisJc3ByaW50ZihjYXJkLT5sb25nbmFtZSwgIiVzIGF0IDB4JWx4IGlycSAlZCIsCisJCWNoaXAtPnNhYWRldi0+bmFtZSwgY2hpcC0+aW9iYXNlLCBjaGlwLT5pcnEpOworCisJaWYgKChlcnIgPSBzbmRfY2FyZF9yZWdpc3RlcihjYXJkKSkgPT0gMCkgeworCQlzbmRfc2FhNzEzNF9jYXJkc1tkZXZdID0gY2FyZDsKKwkJcmV0dXJuIDA7CisJfQorCitfX25vZGV2OgorCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CisJa2ZyZWUoY2hpcCk7CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIE1vZHVsZSBpbml0aWFsaXplcgorICoKKyAqIExvb3BzIHRocm91Z2ggcHJlc2VudCBzYWE3MTM0IGNhcmRzLCBhbmQgYXNzaWducyBhbiBBTFNBIGRldmljZQorICogdG8gZWFjaCBvbmUKKyAqCisgKi8KKworc3RhdGljIGludCBzYWE3MTM0X2Fsc2FfaW5pdCh2b2lkKQoreworICAgICAgICBzdHJ1Y3Qgc2FhNzEzNF9kZXYgKnNhYWRldiA9IE5VTEw7CisgICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7CisKKwlwcmludGsoS0VSTl9JTkZPICJzYWE3MTM0IEFMU0EgZHJpdmVyIGZvciBETUEgc291bmQgbG9hZGVkXG4iKTsKKworICAgICAgICBsaXN0X2Zvcl9lYWNoKGxpc3QsJnNhYTcxMzRfZGV2bGlzdCkgeworICAgICAgICAgICAgICAgIHNhYWRldiA9IGxpc3RfZW50cnkobGlzdCwgc3RydWN0IHNhYTcxMzRfZGV2LCBkZXZsaXN0KTsKKwkJYWxzYV9jYXJkX3NhYTcxMzRfY3JlYXRlKHNhYWRldik7CisgICAgICAgIH0KKworCWlmIChzYWFkZXYgPT0gTlVMTCkKKwkJcHJpbnRrKEtFUk5fSU5GTyAic2FhNzEzNCBBTFNBOiBubyBzYWE3MTM0IGNhcmRzIGZvdW5kXG4iKTsKKworCXJldHVybiAwOworCit9CisKKy8qCisgKiBNb2R1bGUgZGVzdHJ1Y3RvcgorICovCisKK3ZvaWQgc2FhNzEzNF9hbHNhX2V4aXQodm9pZCkKK3sKKwlpbnQgaWR4OworCisJZm9yIChpZHggPSAwOyBpZHggPCBTTkRSVl9DQVJEUzsgaWR4KyspIHsKKwkJc25kX2NhcmRfZnJlZShzbmRfc2FhNzEzNF9jYXJkc1tpZHhdKTsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICJzYWE3MTM0IEFMU0EgZHJpdmVyIGZvciBETUEgc291bmQgdW5sb2FkZWRcbiIpOworCisJcmV0dXJuOworfQorCittb2R1bGVfaW5pdChzYWE3MTM0X2Fsc2FfaW5pdCk7Cittb2R1bGVfZXhpdChzYWE3MTM0X2Fsc2FfZXhpdCk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJSaWNhcmRvIENlcnF1ZWlyYSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNhcmRzLmMKaW5kZXggYWNjN2E0My4uNjYzZDAzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jYXJkcy5jCkBAIC0xOTEsMTAgKzE5MSwxNCBAQAogCQkJLmFtdXggPSBUViwKIAkJCS50diAgID0gMSwKIAkJfSx7Ci0JCQkubmFtZSA9IG5hbWVfY29tcDEsCisJCQkubmFtZSA9IG5hbWVfY29tcDEsICAgICAvKiBDb21wb3NpdGUgc2lnbmFsIG9uIFMtVmlkZW8gaW5wdXQgKi8KIAkJCS52bXV4ID0gMCwKIAkJCS5hbXV4ID0gTElORTIsCiAJCX0seworCQkJLm5hbWUgPSBuYW1lX2NvbXAyLAkvKiBDb21wb3NpdGUgaW5wdXQgKi8KKwkJCS52bXV4ID0gMywKKwkJCS5hbXV4ID0gTElORTIsCisJCX0sewogCQkJLm5hbWUgPSBuYW1lX3N2aWRlbywKIAkJCS52bXV4ID0gOCwKIAkJCS5hbXV4ID0gTElORTIsCkBAIC0yMTA5LDggKzIxMTMsNDIzIEBACiAJCQkuZ3BpbyA9IDB4MDEsCiAJCX0sCiAJfSwKLX07CisJW1NBQTcxMzRfQk9BUkRfQkVIT0xEXzQwOUZNXSA9IHsKKwkJLyogPGh0dHA6Ly90dW5lci5iZWhvbGRlci5ydT4sIFNlcmdleSA8c2tpdkBvcmVsLnJ1PiAqLworCQkubmFtZSAgICAgICAgICAgPSAiQmVob2xkZXIgQmVob2xkVFYgNDA5IEZNIiwKKwkJLmF1ZGlvX2Nsb2NrICAgID0gMHgwMDE4N2RlNywKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19GTTEyMTZNRV9NSzMsCisJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkudGRhOTg4N19jb25mICAgPSBUREE5ODg3X1BSRVNFTlQsCisJCS5pbnB1dHMgICAgICAgICA9IHt7CisJCQkgIC5uYW1lID0gbmFtZV90diwKKwkJCSAgLnZtdXggPSAzLAorCQkJICAuYW11eCA9IFRWLAorCQkJICAudHYgICA9IDEsCisJCX0seworCQkJICAubmFtZSA9IG5hbWVfY29tcDEsCisJCQkgIC52bXV4ID0gMSwKKwkJCSAgLmFtdXggPSBMSU5FMSwKKwkJfSx7CisJCQkgIC5uYW1lID0gbmFtZV9zdmlkZW8sCisJCQkgIC52bXV4ID0gOCwKKwkJCSAgLmFtdXggPSBMSU5FMSwKKwkJfX0sCisJCS5yYWRpbyA9IHsKKwkJCSAgLm5hbWUgPSBuYW1lX3JhZGlvLAorCQkJICAuYW11eCA9IExJTkUyLAorICAgIAkJfSwKKwl9LAorCVtTQUE3MTM0X0JPQVJEX0dPVFZJRVdfNzEzNV0gPSB7CisJCS8qIE1pa2UgQmFpa292IDxtaWtlQGJhaWtvdi5jb20+ICovCisJCS8qIEFuZHJleSBDdmV0Y292IDxheXMxNEB5YW5kZXgucnU+ICovCisJCS5uYW1lICAgICAgICAgICAgPSAiR29UVmlldyA3MTM1IFBDSSIsCisJCS5hdWRpb19jbG9jayAgICAgPSAweDAwMTg3ZGU3LAorCQkudHVuZXJfdHlwZSAgICAgID0gVFVORVJfUEhJTElQU19GTTEyMTZNRV9NSzMsCisJCS5yYWRpb190eXBlICAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX2FkZHIgICAgICA9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICAgPSBBRERSX1VOU0VULAorCQkudGRhOTg4N19jb25mICAgID0gVERBOTg4N19QUkVTRU5ULAorCQkuZ3Bpb21hc2sgICAgICAgID0gMHgwMDIwMDAwMywKKwkJLmlucHV0cyAgICAgICAgICA9IHt7CisJCQkubmFtZSA9IG5hbWVfdHYsCisJCQkudm11eCA9IDEsCisJCQkuYW11eCA9IFRWLAorCQkJLnR2ICAgPSAxLAorCQkJLmdwaW8gPSAweDAwMjAwMDAzLAorCQl9LHsKKwkJCS5uYW1lID0gbmFtZV90dl9tb25vLAorCQkJLnZtdXggPSAxLAorCQkJLmFtdXggPSBMSU5FMiwKKwkJCS5ncGlvID0gMHgwMDIwMDAwMywKKwkJfSx7CisJCQkubmFtZSA9IG5hbWVfY29tcDEsCisJCQkudm11eCA9IDMsCisJCQkuYW11eCA9IExJTkUxLAorCQkJLmdwaW8gPSAweDAwMjAwMDAzLAorCQl9LHsKKwkJCS5uYW1lID0gbmFtZV9zdmlkZW8sCisJCQkudm11eCA9IDgsCisJCQkuYW11eCA9IExJTkUxLAorCQkJLmdwaW8gPSAweDAwMjAwMDAzLAorCQl9fSwKKwkJLnJhZGlvID0geworCQkJLm5hbWUgPSBuYW1lX3JhZGlvLAorCQkJLmFtdXggPSBMSU5FMiwKKwkJCS5ncGlvID0gMHgwMDIwMDAwMywKKwkJfSwKKwkJLm11dGUgPSB7CisJCQkubmFtZSA9IG5hbWVfbXV0ZSwKKwkJCS5hbXV4ID0gVFYsCisJCQkuZ3BpbyA9IDB4MDAyMDAwMDMsCisJCX0sCisJfSwKKwlbU0FBNzEzNF9CT0FSRF9QSElMSVBTX0VVUk9QQV0gPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJQaGlsaXBzIEVVUk9QQSBWMyByZWZlcmVuY2UgZGVzaWduIiwKKwkJLmF1ZGlvX2Nsb2NrICAgID0gMHgwMDE4N2RlNywKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19URDEzMTYsCisJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfYWRkcgk9IDB4NjEsCisJCS5yYWRpb19hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnRkYTk4ODdfY29uZiAgID0gVERBOTg4N19QUkVTRU5ULAorCQkubXBlZyAgICAgICAgICAgPSBTQUE3MTM0X01QRUdfRFZCLAorCQkuaW5wdXRzID0ge3sKKwkJCS5uYW1lICAgPSBuYW1lX3R2LAorCQkJLnZtdXggICA9IDMsCisJCQkuYW11eCAgID0gVFYsCisJCQkudHYgICAgID0gMSwKKwkJfSx7CisJCQkubmFtZSAgID0gbmFtZV9jb21wMSwKKwkJCS52bXV4ICAgPSAwLAorCQkJLmFtdXggICA9IExJTkUyLAorCQl9LHsKKwkJCS5uYW1lICAgPSBuYW1lX3N2aWRlbywKKwkJCS52bXV4ICAgPSA4LAorCQkJLmFtdXggICA9IExJTkUyLAorCQl9fSwKKwl9LAorCVtTQUE3MTM0X0JPQVJEX1ZJREVPTUFURV9EVkJUXzMwMF0gPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJDb21wcm8gVmlkZW9tYXRlIERWQi1UMzAwIiwKKwkJLmF1ZGlvX2Nsb2NrICAgID0gMHgwMDE4N2RlNywKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19URDEzMTYsCisJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfYWRkcgk9IDB4NjEsCisJCS5yYWRpb19hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnRkYTk4ODdfY29uZiAgID0gVERBOTg4N19QUkVTRU5ULAorCQkubXBlZyAgICAgICAgICAgPSBTQUE3MTM0X01QRUdfRFZCLAorCQkuaW5wdXRzID0ge3sKKwkJCS5uYW1lICAgPSBuYW1lX3R2LAorCQkJLnZtdXggICA9IDMsCisJCQkuYW11eCAgID0gVFYsCisJCQkudHYgICAgID0gMSwKKwkJfSx7CisJCQkubmFtZSAgID0gbmFtZV9jb21wMSwKKwkJCS52bXV4ICAgPSAxLAorCQkJLmFtdXggICA9IExJTkUyLAorCQl9LHsKKwkJCS5uYW1lICAgPSBuYW1lX3N2aWRlbywKKwkJCS52bXV4ICAgPSA4LAorCQkJLmFtdXggICA9IExJTkUyLAorCQl9fSwKKwl9LAorCVtTQUE3MTM0X0JPQVJEX1ZJREVPTUFURV9EVkJUXzIwMF0gPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJDb21wcm8gVmlkZW9tYXRlIERWQi1UMjAwIiwKKwkJLnR1bmVyX3R5cGUJPSBUVU5FUl9BQlNFTlQsCisJCS5hdWRpb19jbG9jayAgICA9IDB4MDAxODdkZTcsCisJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyCT0gQUREUl9VTlNFVCwKKwkJLm1wZWcgICAgICAgICAgID0gU0FBNzEzNF9NUEVHX0RWQiwKKwkJLmlucHV0cyA9IHt7CisJCQkubmFtZSAgID0gbmFtZV9jb21wMSwKKwkJCS52bXV4ICAgPSAwLAorCQkJLmFtdXggICA9IExJTkUxLAorCQl9LHsKKwkJCS5uYW1lICAgPSBuYW1lX3N2aWRlbywKKwkJCS52bXV4ICAgPSA4LAorCQkJLmFtdXggICA9IExJTkUxLAorCQl9fSwKKwl9LAorCVtTQUE3MTM0X0JPQVJEX1JURF9WRkc3MzUwXSA9IHsKKwkJLm5hbWUJCT0gIlJURCBFbWJlZGRlZCBUZWNobm9sb2dpZXMgVkZHNzM1MCIsCisJCS5hdWRpb19jbG9jawk9IDB4MDAyMDAwMDAsCisJCS50dW5lcl90eXBlCT0gVFVORVJfQUJTRU5ULAorCQkucmFkaW9fdHlwZQk9IFVOU0VULAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyCT0gQUREUl9VTlNFVCwKKwkJLmlucHV0cwkJPSB7eworCQkJLm5hbWUgICA9ICJDb21wb3NpdGUgMCIsCisJCQkudm11eCAgID0gMCwKKwkJCS5hbXV4ICAgPSBMSU5FMSwKKwkJfSx7CisJCQkubmFtZSAgID0gIkNvbXBvc2l0ZSAxIiwKKwkJCS52bXV4ICAgPSAxLAorCQkJLmFtdXggICA9IExJTkUyLAorCQl9LHsKKwkJCS5uYW1lICAgPSAiQ29tcG9zaXRlIDIiLAorCQkJLnZtdXggICA9IDIsCisJCQkuYW11eCAgID0gTElORTEsCisJCX0seworCQkJLm5hbWUgICA9ICJDb21wb3NpdGUgMyIsCisJCQkudm11eCAgID0gMywKKwkJCS5hbXV4ICAgPSBMSU5FMiwKKwkJfSx7CisJCQkubmFtZSAgID0gIlMtVmlkZW8gMCIsCisJCQkudm11eCAgID0gOCwKKwkJCS5hbXV4ICAgPSBMSU5FMSwKKwkJfSx7CisJCQkubmFtZSAgID0gIlMtVmlkZW8gMSIsCisJCQkudm11eCAgID0gOSwKKwkJCS5hbXV4ICAgPSBMSU5FMiwKKwkJfX0sCisJCS5tcGVnICAgICAgICAgICA9IFNBQTcxMzRfTVBFR19FTVBSRVNTLAorCQkudmlkZW9fb3V0ICAgICAgPSBDQ0lSNjU2LAorCQkudmlkX3BvcnRfb3B0cyAgPSAoIFNFVF9UX0NPREVfUE9MQVJJVFlfTk9OX0lOVkVSVEVEIHwKKwkJCQkgICAgU0VUX0NMT0NLX05PVF9ERUxBWUVEIHwKKwkJCQkgICAgU0VUX0NMT0NLX0lOVkVSVEVEIHwKKwkJCQkgICAgU0VUX1ZTWU5DX09GRiApLAorCX0sCisJW1NBQTcxMzRfQk9BUkRfUlREX1ZGRzczMzBdID0geworCQkubmFtZQkJPSAiUlREIEVtYmVkZGVkIFRlY2hub2xvZ2llcyBWRkc3MzMwIiwKKwkJLmF1ZGlvX2Nsb2NrCT0gMHgwMDIwMDAwMCwKKwkJLnR1bmVyX3R5cGUJPSBUVU5FUl9BQlNFTlQsCisJCS5yYWRpb190eXBlCT0gVU5TRVQsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIJPSBBRERSX1VOU0VULAorCQkuaW5wdXRzCQk9IHt7CisJCQkubmFtZSAgID0gIkNvbXBvc2l0ZSAwIiwKKwkJCS52bXV4ICAgPSAwLAorCQkJLmFtdXggICA9IExJTkUxLAorCQl9LHsKKwkJCS5uYW1lICAgPSAiQ29tcG9zaXRlIDEiLAorCQkJLnZtdXggICA9IDEsCisJCQkuYW11eCAgID0gTElORTIsCisJCX0seworCQkJLm5hbWUgICA9ICJDb21wb3NpdGUgMiIsCisJCQkudm11eCAgID0gMiwKKwkJCS5hbXV4ICAgPSBMSU5FMSwKKwkJfSx7CisJCQkubmFtZSAgID0gIkNvbXBvc2l0ZSAzIiwKKwkJCS52bXV4ICAgPSAzLAorCQkJLmFtdXggICA9IExJTkUyLAorCQl9LHsKKwkJCS5uYW1lICAgPSAiUy1WaWRlbyAwIiwKKwkJCS52bXV4ICAgPSA4LAorCQkJLmFtdXggICA9IExJTkUxLAorCQl9LHsKKwkJCS5uYW1lICAgPSAiUy1WaWRlbyAxIiwKKwkJCS52bXV4ICAgPSA5LAorCQkJLmFtdXggICA9IExJTkUyLAorCQl9fSwKKwl9LAorCVtTQUE3MTM0X0JPQVJEX0ZMWVRWUExBVElOVU1fTUlOSTJdID0geworCQkubmFtZSAgICAgICAgICAgPSAiTGlmZVZpZXcgRmx5VFYgUGxhdGludW0gTWluaTIiLAorCQkuYXVkaW9fY2xvY2sgICAgPSAweDAwMjAwMDAwLAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1REQTgyOTAsCisJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyCT0gQUREUl9VTlNFVCwKIAorCQkuaW5wdXRzICAgICAgICAgPSB7eworCQkJLm5hbWUgPSBuYW1lX3R2LAorCQkJLnZtdXggPSAxLAorCQkJLmFtdXggPSBUViwKKwkJCS50diAgID0gMSwKKwkJfSx7CisJCQkubmFtZSA9IG5hbWVfY29tcDEsICAgICAvKiBDb21wb3NpdGUgc2lnbmFsIG9uIFMtVmlkZW8gaW5wdXQgKi8KKwkJCS52bXV4ID0gMCwKKwkJCS5hbXV4ID0gTElORTIsCisJCX0seworCQkJLm5hbWUgPSBuYW1lX2NvbXAyLAkvKiBDb21wb3NpdGUgaW5wdXQgKi8KKwkJCS52bXV4ID0gMywKKwkJCS5hbXV4ID0gTElORTIsCisJCX0seworCQkJLm5hbWUgPSBuYW1lX3N2aWRlbywKKwkJCS52bXV4ID0gOCwKKwkJCS5hbXV4ID0gTElORTIsCisJCX19LAorCX0sCisJW1NBQTcxMzRfQk9BUkRfQVZFUk1FRElBX0FWRVJUVkhEX0ExODBdID0geworCQkvKiBNaWNoYWVsIEtydWZreSA8bWtydWZreUBtMWsubmV0PgorCQkgKiBVc2VzIEFscHMgRWxlY3RyaWMgVERIVTIsIGNvbnRhaW5pbmcgTlhUMjAwNCBBVFNDIERlY29kZXIKKwkJICogQUZBSUssIHRoZXJlIGlzIG5vIGFuYWxvZyBkZW1vZCwgdGh1cywKKwkJICogbm8gc3VwcG9ydCBmb3IgYW5hbG9nIHRlbGV2aXNpb24uCisJCSAqLworCQkubmFtZSAgICAgICAgICAgPSAiQVZlck1lZGlhIEFWZXJUVkhEIE1DRSBBMTgwIiwKKwkJLmF1ZGlvX2Nsb2NrICAgID0gMHgwMDE4N2RlNywKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAorCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLm1wZWcgICAgICAgICAgID0gU0FBNzEzNF9NUEVHX0RWQiwKKwkJLmlucHV0cyAgICAgICAgID0ge3sKKwkJCS5uYW1lID0gbmFtZV9jb21wMSwKKwkJCS52bXV4ID0gMywKKwkJCS5hbXV4ID0gTElORTIsCisJCX0seworCQkJLm5hbWUgPSBuYW1lX3N2aWRlbywKKwkJCS52bXV4ID0gOCwKKwkJCS5hbXV4ID0gTElORTIsCisJCX19LAorCX0sCisJW1NBQTcxMzRfQk9BUkRfTU9OU1RFUlRWX01PQklMRV0gPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJTS05ldCBNb25zdGVyVFYgTW9iaWxlIiwKKwkJLmF1ZGlvX2Nsb2NrICAgID0gMHgwMDE4N2RlNywKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19UREE4MjkwLAorCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkcgk9IEFERFJfVU5TRVQsCisKKwkJLmlucHV0cyAgICAgICAgID0ge3sKKwkJCSAgLm5hbWUgPSBuYW1lX3R2LAorCQkJICAudm11eCA9IDEsCisJCQkgIC5hbXV4ID0gVFYsCisJCQkgIC50diAgID0gMSwKKwkJfSx7CisJCQkgIC5uYW1lID0gbmFtZV9jb21wMSwKKwkJCSAgLnZtdXggPSAzLAorCQkJICAuYW11eCA9IExJTkUxLAorCQl9LHsKKwkJCSAgLm5hbWUgPSBuYW1lX3N2aWRlbywKKwkJCSAgLnZtdXggPSA2LAorCQkJICAuYW11eCA9IExJTkUxLAorCQl9fSwKKwl9LAorCVtTQUE3MTM0X0JPQVJEX1BJTk5BQ0xFX1BDVFZfMTEwaV0gPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJQaW5uYWNsZSBQQ1RWIDExMGkgKHNhYTcxMzMpIiwKKwkJLmF1ZGlvX2Nsb2NrICAgID0gMHgwMDE4N2RlNywKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19UREE4MjkwLAorCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLmdwaW9tYXNrICAgICAgID0gMHgwODAyMDAwMDAsCisJCS5pbnB1dHMgICAgICAgICA9IHt7CisJCQkgIC5uYW1lID0gbmFtZV90diwKKwkJCSAgLnZtdXggPSA0LAorCQkJICAuYW11eCA9IFRWLAorCQkJICAudHYgICA9IDEsCisJCX0seworCQkJICAubmFtZSA9IG5hbWVfY29tcDEsCisJCQkgIC52bXV4ID0gMSwKKwkJCSAgLmFtdXggPSBMSU5FMiwKKwkJfSx7CisJCQkgIC5uYW1lID0gbmFtZV9zdmlkZW8sCisJCQkgIC52bXV4ID0gOCwKKwkJCSAgLmFtdXggPSBMSU5FMiwKKwkJfX0sCisJCS5yYWRpbyA9IHsKKwkJCSAgLm5hbWUgPSBuYW1lX3JhZGlvLAorCQkJICAuYW11eCA9IExJTkUxLAorCQl9LAorCX0sCisJW1NBQTcxMzRfQk9BUkRfQVNVU1RlS19QNzEzMV9EVUFMXSA9IHsKKwkJLm5hbWUgICAgICAgICAgID0gIkFTVVNUZUsgUDcxMzEgRHVhbCIsCisJCS5hdWRpb19jbG9jayAgICA9IDB4MDAxODdkZTcsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfVERBODI5MCwKKwkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIJPSBBRERSX1VOU0VULAorCQkuZ3Bpb21hc2sJPSAxIDw8IDIxLAorCQkubXBlZyAgICAgICAgICAgPSBTQUE3MTM0X01QRUdfRFZCLAorCQkuaW5wdXRzICAgICAgICAgPSB7eworCQkJLm5hbWUgPSBuYW1lX3R2LAorCQkJLnZtdXggPSAxLAorCQkJLmFtdXggPSBUViwKKwkJCS50diAgID0gMSwKKwkJfSx7CisJCQkubmFtZSA9IG5hbWVfY29tcDEsCisJCQkudm11eCA9IDMsCisJCQkuYW11eCA9IExJTkUyLAorCQl9LHsKKwkJCS5uYW1lID0gbmFtZV9zdmlkZW8sCisJCQkudm11eCA9IDgsCisJCQkuYW11eCA9IExJTkUyLAorCQl9fSwKKwkJLnJhZGlvID0geworCQkJLm5hbWUgPSBuYW1lX3JhZGlvLAorCQkJLmFtdXggPSBUViwKKwkJCS5ncGlvID0gMHgwMjAwMDAwLAorCQl9LAorCX0sCisJW1NBQTcxMzRfQk9BUkRfU0VETkFfUENfVFZfQ0FSREJVU10gPSB7CisJCS8qIFBhdWwgVG9tIFphbGFjIDxwemFsYWNAZ21haWwuY29tPiAqLworCQkvKiBQYXZlbCBNaWhheWxvdiA8YmluQGJhc2guaW5mbz4gKi8KKwkJLm5hbWUgICAgICAgICAgID0gIlNlZG5hL011Y2hUViBQQyBUViBDYXJkYnVzIFRWL1JhZGlvIChJVE8yNSBSZXY6MkIpIiwKKwkJCQkvKiBTZWRuYS9NdWNoVFYgKE9FTSkgQ2FyZGJ1cyBUViBUdW5lciAqLworCQkuYXVkaW9fY2xvY2sgICAgPSAweDAwMTg3ZGU3LAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1REQTgyOTAsCisJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkuZ3Bpb21hc2sgICAgICAgPSAweGU4ODBjMCwKKwkJLmlucHV0cyAgICAgICAgID0ge3sKKwkJCS5uYW1lID0gbmFtZV90diwKKwkJCS52bXV4ID0gMywKKwkJCS5hbXV4ID0gVFYsCisJCQkudHYgICA9IDEsCisJCX0seworCQkJLm5hbWUgPSBuYW1lX2NvbXAxLAorCQkJLnZtdXggPSAxLAorCQkJLmFtdXggPSBMSU5FMSwKKwkJfSx7CisJCQkubmFtZSA9IG5hbWVfc3ZpZGVvLAorCQkJLnZtdXggPSA2LAorCQkJLmFtdXggPSBMSU5FMSwKKwkJfX0sCisJCS5yYWRpbyA9IHsKKwkJCS5uYW1lID0gbmFtZV9yYWRpbywKKwkJCS5hbXV4ID0gTElORTIsCisJCX0sCisJfSwKKwlbU0FBNzEzNF9CT0FSRF9BU1VTVEVLX0RJR0lNQVRSSVhfVFZdID0geworCQkvKiAiQ3lyaWwgTGFjb3V4IChZYWNrKSIgPGNsYWNvdXhAaWZlZWxnb29kLm9yZz4gKi8KKwkJLm5hbWUgICAgICAgICAgID0gIkFTVVMgRGlnaW1hdHJpeCBUViIsCisJCS5hdWRpb19jbG9jayAgICA9IDB4MDAyMDAwMDAsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfRlExMjE2TUUsCisJCS50ZGE5ODg3X2NvbmYgICA9IFREQTk4ODdfUFJFU0VOVCwKKwkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl9hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5pbnB1dHMgICAgICAgICA9IHt7CisJCQkubmFtZSA9IG5hbWVfdHYsCisJCQkudm11eCA9IDEsCisJCQkuYW11eCA9IFRWLAorCQkJLnR2ICAgPSAxLAorCQl9LHsKKwkJCS5uYW1lID0gbmFtZV9jb21wMSwKKwkJCS52bXV4ID0gMywKKwkJCS5hbXV4ID0gTElORTEsCisJCX0seworCQkJLm5hbWUgPSBuYW1lX3N2aWRlbywKKwkJCS52bXV4ID0gOCwKKwkJCS5hbXV4ID0gTElORTEsCisJCX19LAorCX0sCisJW1NBQTcxMzRfQk9BUkRfUEhJTElQU19USUdFUl0gPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJQaGlsaXBzIFRpZ2VyIHJlZmVyZW5jZSBkZXNpZ24iLAorCQkuYXVkaW9fY2xvY2sgICAgPSAweDAwMTg3ZGU3LAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1REQTgyOTAsCisJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyCT0gQUREUl9VTlNFVCwKKwkJLm1wZWcgICAgICAgICAgID0gU0FBNzEzNF9NUEVHX0RWQiwKKwkJLmlucHV0cyA9IHt7CisJCQkubmFtZSAgID0gbmFtZV90diwKKwkJCS52bXV4ICAgPSAxLAorCQkJLmFtdXggICA9IFRWLAorCQkJLnR2ICAgICA9IDEsCisJCX0seworCQkJLm5hbWUgICA9IG5hbWVfY29tcDEsCisJCQkudm11eCAgID0gMywKKwkJCS5hbXV4ICAgPSBMSU5FMSwKKwkJfSx7CisJCQkubmFtZSAgID0gbmFtZV9zdmlkZW8sCisJCQkudm11eCAgID0gOCwKKwkJCS5hbXV4ICAgPSBMSU5FMSwKKwkJfX0sCisJfSwKK307CiAKIGNvbnN0IHVuc2lnbmVkIGludCBzYWE3MTM0X2Jjb3VudCA9IEFSUkFZX1NJWkUoc2FhNzEzNF9ib2FyZHMpOwogCkBAIC0yMTQ1LDE5ICsyNTY0LDE5IEBACiAJfSx7CiAJCS52ZW5kb3IgICAgICAgPSBQQ0lfVkVORE9SX0lEX1BISUxJUFMsCiAJCS5kZXZpY2UgICAgICAgPSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzNCwKLQkJLnN1YnZlbmRvciAgICA9IDB4MTUzQiwKKwkJLnN1YnZlbmRvciAgICA9IDB4MTUzYiwKIAkJLnN1YmRldmljZSAgICA9IDB4MTE0MiwKIAkJLmRyaXZlcl9kYXRhICA9IFNBQTcxMzRfQk9BUkRfQ0lORVJHWTQwMCwKIAl9LHsKIAkJLnZlbmRvciAgICAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKIAkJLmRldmljZSAgICAgICA9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTM0LAotCQkuc3VidmVuZG9yICAgID0gMHgxNTNCLAorCQkuc3VidmVuZG9yICAgID0gMHgxNTNiLAogCQkuc3ViZGV2aWNlICAgID0gMHgxMTQzLAogCQkuZHJpdmVyX2RhdGEgID0gU0FBNzEzNF9CT0FSRF9DSU5FUkdZNjAwLAogCX0sewogCQkudmVuZG9yICAgICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAogCQkuZGV2aWNlICAgICAgID0gUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzQsCi0JCS5zdWJ2ZW5kb3IgICAgPSAweDE1M0IsCisJCS5zdWJ2ZW5kb3IgICAgPSAweDE1M2IsCiAJCS5zdWJkZXZpY2UgICAgPSAweDExNTgsCiAJCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX0NJTkVSR1k2MDBfTUszLAogCX0sewpAQCAtMjE5Myw2ICsyNjEyLDE4IEBACiAJfSx7CiAJCS52ZW5kb3IgICAgICAgPSBQQ0lfVkVORE9SX0lEX1BISUxJUFMsCiAJCS5kZXZpY2UgICAgICAgPSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzMywKKwkJLnN1YnZlbmRvciAgICA9IDB4MTRjMCwKKwkJLnN1YmRldmljZSAgICA9IDB4MTIxMiwgLyogbWluaXBjaSwgTFIxMjEyICovCisJCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX0ZMWVRWUExBVElOVU1fTUlOSTIsCisJfSx7CisJCS52ZW5kb3IgICAgICAgPSBQQ0lfVkVORE9SX0lEX1BISUxJUFMsCisJCS5kZXZpY2UgICAgICAgPSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzMywKKwkJLnN1YnZlbmRvciAgICA9IDB4NGU0MiwKKwkJLnN1YmRldmljZSAgICA9IDB4MDIxMiwgLyogT0VNIG1pbmlwY2ksIExSMjEyICovCisJCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX0ZMWVRWUExBVElOVU1fTUlOSSwKKwl9LHsKKwkJLnZlbmRvciAgICAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKKwkJLmRldmljZSAgICAgICA9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTMzLAogCQkuc3VidmVuZG9yICAgID0gMHg1MTY4LAkvKiBBbmltYXRpb24gVGVjaG5vbG9naWVzIChMaWZlVmlldykgKi8KIAkJLnN1YmRldmljZSAgICA9IDB4MDIxNCwgLyogU3RhbmRhcmQgUENJLCBMUjIxNFdGICovCiAJCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX0ZMWVRWUExBVElOVU1fRk0sCkBAIC0yMzY5LDcgKzI4MDAsNyBAQAogCX0sewogCQkudmVuZG9yICAgICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAogCQkuZGV2aWNlICAgICAgID0gUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzAsCi0JCS5zdWJ2ZW5kb3IgICAgPSAweDE1M0IsCisJCS5zdWJ2ZW5kb3IgICAgPSAweDE1M2IsCiAJCS5zdWJkZXZpY2UgICAgPSAweDExNTIsCiAJCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX0NJTkVSR1kyMDAsCiAJfSx7CkBAIC0yNDM0LDEzICsyODY1LDE4IEBACiAJCS5zdWJ2ZW5kb3IgICAgPSAweDE0MjEsCiAJCS5zdWJkZXZpY2UgICAgPSAweDAzNTAsCQkvKiBQQ0kgdmVyc2lvbiAqLwogCQkuZHJpdmVyX2RhdGEgID0gU0FBNzEzNF9CT0FSRF9BRFNfSU5TVEFOVF9UViwKLQogCX0sewogCQkudmVuZG9yICAgICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAogCQkuZGV2aWNlICAgICAgID0gUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzMsCiAJCS5zdWJ2ZW5kb3IgICAgPSAweDE0MjEsCiAJCS5zdWJkZXZpY2UgICAgPSAweDAzNzAsCQkvKiBjYXJkYnVzIHZlcnNpb24gKi8KIAkJLmRyaXZlcl9kYXRhICA9IFNBQTcxMzRfQk9BUkRfQURTX0lOU1RBTlRfVFYsCisJfSx7CisJCS52ZW5kb3IgICAgICAgPSBQQ0lfVkVORE9SX0lEX1BISUxJUFMsCisJCS5kZXZpY2UgICAgICAgPSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzMywKKwkJLnN1YnZlbmRvciAgICA9IDB4MTQyMSwKKwkJLnN1YmRldmljZSAgICA9IDB4MTM3MCwgICAgICAgIC8qIGNhcmRidXMgdmVyc2lvbiAqLworCQkuZHJpdmVyX2RhdGEgID0gU0FBNzEzNF9CT0FSRF9BRFNfSU5TVEFOVF9UViwKIAogCX0seyAgICAgLyogVHlwaG9vbiBEVkItVCBEdW8gRGlnaXRhbC9BbmFsb2cgQ2FyZGJ1cyAqLwogCQkudmVuZG9yICAgICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLApAQCAtMjQ1OSw5ICsyODk1LDgxIEBACiAJCS5kZXZpY2UgICAgICAgPSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzNCwKIAkJLnN1YnZlbmRvciAgICA9IDB4MTA0MywKIAkJLnN1YmRldmljZSAgICA9IDB4MDIxMCwJCS8qIG1pbmkgcGNpIFBBTC9TRUNBTSB2ZXJzaW9uICovCi0JCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX0ZMWVRWX0RJR0lNQVRSSVgsCisJCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX0FTVVNURUtfRElHSU1BVFJJWF9UViwKIAogCX0seworCQkudmVuZG9yICAgICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAorCQkuZGV2aWNlICAgICAgID0gUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzMsCisJCS5zdWJ2ZW5kb3IgICAgPSAweDAwMDAsIC8qIEl0IHNob3VsZG4ndCBicmVhayBhbnl0aGluZywgc2luY2Ugc3ViZGV2aWNlIGlkIHNlZW1zIHVuaXF1ZSAqLworCQkuc3ViZGV2aWNlICAgID0gMHg0MDkxLAorCQkuZHJpdmVyX2RhdGEgID0gU0FBNzEzNF9CT0FSRF9CRUhPTERfNDA5Rk0sCisJfSx7CisJCS52ZW5kb3IgICAgICAgPSBQQ0lfVkVORE9SX0lEX1BISUxJUFMsCisJCS5kZXZpY2UgICAgICAgPSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzMywKKwkJLnN1YnZlbmRvciAgICA9IDB4NTQ1NiwgLyogR29UVmlldyAqLworCQkuc3ViZGV2aWNlICAgID0gMHg3MTM1LAorCQkuZHJpdmVyX2RhdGEgID0gU0FBNzEzNF9CT0FSRF9HT1RWSUVXXzcxMzUsCisJfSx7CisJCS52ZW5kb3IgICAgICAgPSBQQ0lfVkVORE9SX0lEX1BISUxJUFMsCisJCS5kZXZpY2UgICAgICAgPSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzNCwKKwkJLnN1YnZlbmRvciAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKKwkJLnN1YmRldmljZSAgICA9IDB4MjAwNCwKKwkJLmRyaXZlcl9kYXRhICA9IFNBQTcxMzRfQk9BUkRfUEhJTElQU19FVVJPUEEsCisJfSx7CisJCS52ZW5kb3IgICAgICAgPSBQQ0lfVkVORE9SX0lEX1BISUxJUFMsCisJCS5kZXZpY2UgICAgICAgPSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzNCwKKwkJLnN1YnZlbmRvciAgICA9IDB4MTg1YiwKKwkJLnN1YmRldmljZSAgICA9IDB4YzkwMCwKKwkJLmRyaXZlcl9kYXRhICA9IFNBQTcxMzRfQk9BUkRfVklERU9NQVRFX0RWQlRfMzAwLAorCX0seworCQkudmVuZG9yICAgICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAorCQkuZGV2aWNlICAgICAgID0gUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzAsCisJCS5zdWJ2ZW5kb3IgICAgPSAweDE4NWIsCisJCS5zdWJkZXZpY2UgICAgPSAweGM5MDEsCisJCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX1ZJREVPTUFURV9EVkJUXzIwMCwKKwl9LHsKKwkJLnZlbmRvciAgICAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKKwkJLmRldmljZSAgICAgICA9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTMzLAorCQkuc3VidmVuZG9yICAgID0gMHgxNDM1LAorCQkuc3ViZGV2aWNlICAgID0gMHg3MzUwLAorCQkuZHJpdmVyX2RhdGEgID0gU0FBNzEzNF9CT0FSRF9SVERfVkZHNzM1MCwKKwl9LHsKKwkJLnZlbmRvciAgICAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKKwkJLmRldmljZSAgICAgICA9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTMzLAorCQkuc3VidmVuZG9yICAgID0gMHgxNDM1LAorCQkuc3ViZGV2aWNlICAgID0gMHg3MzMwLAorCQkuZHJpdmVyX2RhdGEgID0gU0FBNzEzNF9CT0FSRF9SVERfVkZHNzMzMCwKKwl9LHsKKwkJLnZlbmRvciAgICAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKKwkJLmRldmljZSAgICAgICA9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTMzLAorCQkuc3VidmVuZG9yICAgID0gMHgxNDYxLAorCQkuc3ViZGV2aWNlICAgID0gMHgxMDQ0LAorCQkuZHJpdmVyX2RhdGEgID0gU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfQVZFUlRWSERfQTE4MCwKKwl9LHsKKwkJLnZlbmRvciAgICAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKKwkJLmRldmljZSAgICAgICA9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTMzLAorCQkuc3VidmVuZG9yICAgID0gMHgxMTMxLAorCQkuc3ViZGV2aWNlICAgID0gMHg0ZWU5LAorCQkuZHJpdmVyX2RhdGEgID0gU0FBNzEzNF9CT0FSRF9NT05TVEVSVFZfTU9CSUxFLAorCX0seworCQkudmVuZG9yICAgICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAorCQkuZGV2aWNlICAgICAgID0gUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzMsCisJCS5zdWJ2ZW5kb3IgICAgPSAweDExYmQsCisJCS5zdWJkZXZpY2UgICAgPSAweDAwMmUsCisJCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX1BJTk5BQ0xFX1BDVFZfMTEwaSwKKwl9LHsKKwkJLnZlbmRvciAgICAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKKwkJLmRldmljZSAgICAgICA9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTMzLAorCQkuc3VidmVuZG9yICAgID0gMHgxMDQzLAorCQkuc3ViZGV2aWNlICAgID0gMHg0ODYyLAorCQkuZHJpdmVyX2RhdGEgID0gU0FBNzEzNF9CT0FSRF9BU1VTVGVLX1A3MTMxX0RVQUwsCisJfSx7CisJCS52ZW5kb3IgICAgICAgPSBQQ0lfVkVORE9SX0lEX1BISUxJUFMsCisJCS5kZXZpY2UgICAgICAgPSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzMywKKwkJLnN1YnZlbmRvciAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKKwkJLnN1YmRldmljZSAgICA9IDB4MjAxOCwKKwkJLmRyaXZlcl9kYXRhICA9IFNBQTcxMzRfQk9BUkRfUEhJTElQU19USUdFUiwKKwl9LHsKIAkJLyogLS0tIGJvYXJkcyB3aXRob3V0IGVlcHJvbSArIHN1YnN5c3RlbSBJRCAtLS0gKi8KIAkJLnZlbmRvciAgICAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKIAkJLmRldmljZSAgICAgICA9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTM0LApAQCAtMjUzMCw5ICszMDM4LDEwIEBACiAJc3dpdGNoIChkZXYtPmJvYXJkKSB7CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0ZMWVZJREVPMjAwMDoKIAljYXNlIFNBQTcxMzRfQk9BUkRfRkxZVklERU8zMDAwOgotCQlkZXYtPmhhc19yZW1vdGUgPSAxOworCQlkZXYtPmhhc19yZW1vdGUgPSBTQUE3MTM0X1JFTU9URV9HUElPOwogCQlib2FyZF9mbHl2aWRlbyhkZXYpOwogCQlicmVhazsKKwljYXNlIFNBQTcxMzRfQk9BUkRfRkxZVFZQTEFUSU5VTV9NSU5JMjoKIAljYXNlIFNBQTcxMzRfQk9BUkRfRkxZVFZQTEFUSU5VTV9GTToKIAljYXNlIFNBQTcxMzRfQk9BUkRfQ0lORVJHWTQwMDoKIAljYXNlIFNBQTcxMzRfQk9BUkRfQ0lORVJHWTYwMDoKQEAgLTI1NTAsMTAgKzMwNTksMTYgQEAKIC8qICAgICAgY2FzZSBTQUE3MTM0X0JPQVJEX1NBQlJFTlRfU0JUVFZGTTogICovIC8qIG5vdCBmaW5pc2hlZCB5ZXQgKi8KIAljYXNlIFNBQTcxMzRfQk9BUkRfVklERU9NQVRFX1RWX1BWUjoKIAljYXNlIFNBQTcxMzRfQk9BUkRfVklERU9NQVRFX1RWX0dPTERfUExVU0lJOgorCWNhc2UgU0FBNzEzNF9CT0FSRF9WSURFT01BVEVfRFZCVF8zMDA6CisJY2FzZSBTQUE3MTM0X0JPQVJEX1ZJREVPTUFURV9EVkJUXzIwMDoKIAljYXNlIFNBQTcxMzRfQk9BUkRfTUFOTElfTVRWMDAxOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9NQU5MSV9NVFYwMDI6CisJY2FzZSBTQUE3MTM0X0JPQVJEX0JFSE9MRF80MDlGTToKIAljYXNlIFNBQTcxMzRfQk9BUkRfQVZBQ1NTTUFSVFRWOgotCQlkZXYtPmhhc19yZW1vdGUgPSAxOworCWNhc2UgU0FBNzEzNF9CT0FSRF9HT1RWSUVXXzcxMzU6CisJY2FzZSBTQUE3MTM0X0JPQVJEX0tXT1JMRF9URVJNSU5BVE9SOgorCWNhc2UgU0FBNzEzNF9CT0FSRF9TRUROQV9QQ19UVl9DQVJEQlVTOgorCQlkZXYtPmhhc19yZW1vdGUgPSBTQUE3MTM0X1JFTU9URV9HUElPOwogCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfTUQ1MDQ0OgogCQlwcmludGsoIiVzOiBzZWVtcyB0aGVyZSBhcmUgdHdvIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiB0aGUgTUQ1MDQ0XG4iCkBAIC0yNTY1LDExICszMDgwLDE0IEBACiAJCS8qIHBvd2VyLXVwIHR1bmVyIGNoaXAgKi8KIAkJc2FhX2FuZG9ybChTQUE3MTM0X0dQSU9fR1BNT0RFMCA+PiAyLCAgIDB4MDAwNDAwMDAsIDB4MDAwNDAwMDApOwogCQlzYWFfYW5kb3JsKFNBQTcxMzRfR1BJT19HUFNUQVRVUzAgPj4gMiwgMHgwMDA0MDAwMCwgMHgwMDAwMDAwMCk7Ci0JCW1zbGVlcCgxKTsKKwljYXNlIFNBQTcxMzRfQk9BUkRfTU9OU1RFUlRWX01PQklMRToKKwkJLyogcG93ZXItdXAgdHVuZXIgY2hpcCAqLworCQlzYWFfYW5kb3JsKFNBQTcxMzRfR1BJT19HUE1PREUwID4+IDIsICAgMHgwMDA0MDAwMCwgMHgwMDA0MDAwMCk7CisJCXNhYV9hbmRvcmwoU0FBNzEzNF9HUElPX0dQU1RBVFVTMCA+PiAyLCAweDAwMDQwMDAwLCAweDAwMDAwMDA0KTsKIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0ZMWURWQlREVU86CiAJY2FzZSBTQUE3MTM0X0JPQVJEX1RIWVBIT09OX0RWQlRfRFVPX0NBUkRCVVM6Ci0JLyogdHVybiB0aGUgZmFuIG9uIEhhYzogc3RhdGljIGZvciB0aGUgdGltZSBiZWluZyAqLworCQkvKiB0dXJuIHRoZSBmYW4gb24gKi8KIAkJc2FhX3dyaXRlYihTQUE3MTM0X0dQSU9fR1BNT0RFMywgMHgwOCk7CiAJCXNhYV93cml0ZWIoU0FBNzEzNF9HUElPX0dQU1RBVFVTMywgMHgwNik7CiAJCWJyZWFrOwpAQCAtMjU3OSw2ICszMDk3LDIyIEBACiAJCXNhYV9hbmRvcmwoU0FBNzEzNF9HUElPX0dQU1RBVFVTMCA+PiAyLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmKTsKIAkJbXNsZWVwKDEpOwogCQlicmVhazsKKwljYXNlIFNBQTcxMzRfQk9BUkRfUlREX1ZGRzczNTA6CisKKwkJLyoKKwkJICogTWFrZSBzdXJlIFByb2R1Y3Rpb24gVGVzdCBSZWdpc3RlciBhdCBvZmZzZXQgMHgxRDEgaXMgY2xlYXJlZAorCQkgKiB0byB0YWtlIGNoaXAgb3V0IG9mIHRlc3QgbW9kZS4gIENsZWFyaW5nIGJpdCA0IChUU1RfRU5fQU9VVCkKKwkJICogcHJldmVudHMgcGluIDEwNSBmcm9tIHJlbWFpbmluZyBsb3c7IGtlZXBpbmcgcGluIDEwNSBsb3cKKwkJICogY29udGludWFsbHkgcmVzZXRzIHRoZSBTQUE2NzUyIGNoaXAuCisJCSAqLworCisJCXNhYV93cml0ZWIgKFNBQTcxMzRfUFJPRFVDVElPTl9URVNUX01PREUsIDB4MDApOworCQlicmVhazsKKwkvKiBpMmMgcmVtb3RlcyAqLworCWNhc2UgU0FBNzEzNF9CT0FSRF9QSU5OQUNMRV9QQ1RWXzExMGk6CisJY2FzZSBTQUE3MTM0X0JPQVJEX1VQTU9TVF9QVVJQTEVfVFY6CisJCWRldi0+aGFzX3JlbW90ZSA9IFNBQTcxMzRfUkVNT1RFX0kyQzsKKwkJYnJlYWs7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMjYxMyw3ICszMTQ3LDcgQEAKIAkJCQlzYWE3MTM0X2kyY19jYWxsX2NsaWVudHMgKGRldiwgVFVORVJfU0VUX1RZUEVfQUREUiwgJnR1bl9zZXR1cCk7CiAJCX0KIAkJYnJlYWs7Ci1jYXNlIFNBQTcxMzRfQk9BUkRfTUQ3MTM0OgorCWNhc2UgU0FBNzEzNF9CT0FSRF9NRDcxMzQ6CiAJCXsKIAkJc3RydWN0IHR1bmVyX3NldHVwIHR1bl9zZXR1cDsKIAkJdTggc3ViYWRkcjsKQEAgLTI2ODAsNiArMzIxNCwzMyBAQAogCQlzYWE3MTM0X2kyY19jYWxsX2NsaWVudHMgKGRldiwgVFVORVJfU0VUX1RZUEVfQUREUiwmdHVuX3NldHVwKTsKIAkJfQogCQlicmVhazsKKwljYXNlIFNBQTcxMzRfQk9BUkRfUEhJTElQU19FVVJPUEE6CisJY2FzZSBTQUE3MTM0X0JPQVJEX1ZJREVPTUFURV9EVkJUXzMwMDoKKwkJLyogVGhlIFBoaWxpcHMgRVVST1BBIGJhc2VkIGh5YnJpZCBib2FyZHMgaGF2ZSB0aGUgdHVuZXIgY29ubmVjdGVkIHRocm91Z2gKKwkJICogdGhlIGNoYW5uZWwgZGVjb2Rlci4gV2UgaGF2ZSB0byBtYWtlIGl0IHRyYW5zcGFyZW50IHRvIGZpbmQgaXQKKwkJICovCisJCXsKKwkJc3RydWN0IHR1bmVyX3NldHVwIHR1bl9zZXR1cDsKKwkJdTggZGF0YVtdID0geyAweDA3LCAweDAyfTsKKwkJc3RydWN0IGkyY19tc2cgbXNnID0gey5hZGRyPTB4MDgsIC5mbGFncz0wLCAuYnVmPWRhdGEsIC5sZW4gPSBzaXplb2YoZGF0YSl9OworCQlpMmNfdHJhbnNmZXIoJmRldi0+aTJjX2FkYXAsICZtc2csIDEpOworCisJCXR1bl9zZXR1cC5tb2RlX21hc2sgPSBUX0FOQUxPR19UViB8IFRfRElHSVRBTF9UVjsKKwkJdHVuX3NldHVwLnR5cGUgPSBkZXYtPnR1bmVyX3R5cGU7CisJCXR1bl9zZXR1cC5hZGRyID0gZGV2LT50dW5lcl9hZGRyOworCisJCXNhYTcxMzRfaTJjX2NhbGxfY2xpZW50cyAoZGV2LCBUVU5FUl9TRVRfVFlQRV9BRERSLCZ0dW5fc2V0dXApOworCQl9CisJCWJyZWFrOworCWNhc2UgU0FBNzEzNF9CT0FSRF9QSElMSVBTX1RJR0VSOgorCWNhc2UgU0FBNzEzNF9CT0FSRF9BU1VTVGVLX1A3MTMxX0RVQUw6CisJCS8qIHRoaXMgaXMgYSBoeWJyaWQgYm9hcmQsIGluaXRpYWxpemUgdG8gYW5hbG9nIG1vZGUgKi8KKwkJeworCQl1OCBkYXRhW10gPSB7IDB4M2MsIDB4MzMsIDB4Njh9OworCQlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7LmFkZHI9MHgwOCwgLmZsYWdzPTAsIC5idWY9ZGF0YSwgLmxlbiA9IHNpemVvZihkYXRhKX07CisJCWkyY190cmFuc2ZlcigmZGV2LT5pMmNfYWRhcCwgJm1zZywgMSk7CisJCX0KKwkJYnJlYWs7CiAJfQogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY29yZS5jCmluZGV4IGU1ZTM2ZjMuLjE5Yjg4NzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jb3JlLmMKQEAgLTU3LDYgKzU3LDEwIEBACiBtb2R1bGVfcGFyYW0ob3NzLCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhvc3MsInJlZ2lzdGVyIG9zcyBkZXZpY2VzIChkZWZhdWx0OiBubykiKTsKIAorc3RhdGljIHVuc2lnbmVkIGludCBhbHNhID0gMDsKK21vZHVsZV9wYXJhbShhbHNhLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhhbHNhLCJyZWdpc3RlciBhbHNhIGRldmljZXMgKGRlZmF1bHQ6IG5vKSIpOworCiBzdGF0aWMgdW5zaWduZWQgaW50IGxhdGVuY3kgPSBVTlNFVDsKIG1vZHVsZV9wYXJhbShsYXRlbmN5LCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhsYXRlbmN5LCJwY2kgbGF0ZW5jeSB0aW1lciIpOwpAQCAtMTkwLDYgKzE5NCw3IEBACiAKIHN0YXRpYyBpbnQgbmVlZF9lbXByZXNzOwogc3RhdGljIGludCBuZWVkX2R2YjsKK3N0YXRpYyBpbnQgbmVlZF9hbHNhOwogCiBzdGF0aWMgaW50IHBlbmRpbmdfY2FsbChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsIHVuc2lnbmVkIGxvbmcgc3RhdGUsCiAJCQl2b2lkICptb2R1bGUpCkBAIC0xOTcsMTAgKzIwMiwxMiBAQAogCWlmIChtb2R1bGUgIT0gVEhJU19NT0RVTEUgfHwgc3RhdGUgIT0gTU9EVUxFX1NUQVRFX0xJVkUpCiAJCXJldHVybiBOT1RJRllfRE9ORTsKIAotICAgICAgICBpZiAobmVlZF9lbXByZXNzKQotICAgICAgICAgICAgICAgIHJlcXVlc3RfbW9kdWxlKCJzYWE3MTM0LWVtcHJlc3MiKTsKLSAgICAgICAgaWYgKG5lZWRfZHZiKQotICAgICAgICAgICAgICAgIHJlcXVlc3RfbW9kdWxlKCJzYWE3MTM0LWR2YiIpOworCWlmIChuZWVkX2VtcHJlc3MpCisJCXJlcXVlc3RfbW9kdWxlKCJzYWE3MTM0LWVtcHJlc3MiKTsKKwlpZiAobmVlZF9kdmIpCisJCXJlcXVlc3RfbW9kdWxlKCJzYWE3MTM0LWR2YiIpOworCWlmIChuZWVkX2Fsc2EpCisJCXJlcXVlc3RfbW9kdWxlKCJzYWE3MTM0LWFsc2EiKTsKIAlyZXR1cm4gTk9USUZZX0RPTkU7CiB9CiAKQEAgLTI3NSw4ICsyODIsOCBAQAogCiBpbnQgc2FhNzEzNF9wZ3RhYmxlX2FsbG9jKHN0cnVjdCBwY2lfZGV2ICpwY2ksIHN0cnVjdCBzYWE3MTM0X3BndGFibGUgKnB0KQogewotICAgICAgICBfX2xlMzIgICAgICAgKmNwdTsKLSAgICAgICAgZG1hX2FkZHJfdCAgIGRtYV9hZGRyOworCV9fbGUzMiAgICAgICAqY3B1OworCWRtYV9hZGRyX3QgICBkbWFfYWRkcjsKIAogCWNwdSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHBjaSwgU0FBNzEzNF9QR1RBQkxFX1NJWkUsICZkbWFfYWRkcik7CiAJaWYgKE5VTEwgPT0gY3B1KQpAQCAtNDM2LDcgKzQ0Myw3IEBACiAJCWN0cmwgfD0gU0FBNzEzNF9NQUlOX0NUUkxfVEUwOwogCQlpcnEgIHw9IFNBQTcxMzRfSVJRMV9JTlRFX1JBMF8xIHwKIAkJCVNBQTcxMzRfSVJRMV9JTlRFX1JBMF8wOwotCSAgICAgICAgY2FwID0gZGV2LT52aWRlb19xLmN1cnItPnZiLmZpZWxkOworCQljYXAgPSBkZXYtPnZpZGVvX3EuY3Vyci0+dmIuZmllbGQ7CiAJfQogCiAJLyogdmlkZW8gY2FwdHVyZSAtLSBkbWEgMSsyIChwbGFuYXIgbW9kZXMpICovCkBAIC00NjUsNyArNDcyLDcgQEAKIAl9CiAKIAkvKiBhdWRpbyBjYXB0dXJlIC0tIGRtYSAzICovCi0JaWYgKGRldi0+b3NzLmRtYV9ydW5uaW5nKSB7CisJaWYgKGRldi0+ZG1hc291bmQuZG1hX3J1bm5pbmcpIHsKIAkJY3RybCB8PSBTQUE3MTM0X01BSU5fQ1RSTF9URTY7CiAJCWlycSAgfD0gU0FBNzEzNF9JUlExX0lOVEVfUkEzXzEgfAogCQkJU0FBNzEzNF9JUlExX0lOVEVfUkEzXzA7CkBAIC01NzAsNiArNTc3LDE3IEBACiAJCQkJICAgICAgIGRldi0+bmFtZSk7CiAJCQlnb3RvIG91dDsKIAkJfQorCisJCS8qIElmIGFsc2Egc3VwcG9ydCBpcyBhY3RpdmUgYW5kIHdlIGdldCBhIHNvdW5kIHJlcG9ydCwgZXhpdAorCQkgICBhbmQgbGV0IHRoZSBzYWE3MTM0LWFsc2EgbW9kdWxlIGRlYWwgd2l0aCBpdCAqLworCisJCWlmICgocmVwb3J0ICYgU0FBNzEzNF9JUlFfUkVQT1JUX0RPTkVfUkEzKSAmJiBhbHNhKSAgeworCQkJaWYgKGlycV9kZWJ1ZyA+IDEpCisJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzL2lycTogaWdub3JpbmcgaW50ZXJydXB0IGZvciBBTFNBXG4iLAorCQkJCSAgICAgICBkZXYtPm5hbWUpOworCQkJZ290byBvdXQ7CisJCX0KKwogCQloYW5kbGVkID0gMTsKIAkJc2FhX3dyaXRlbChTQUE3MTM0X0lSUV9SRVBPUlQscmVwb3J0KTsKIAkJaWYgKGlycV9kZWJ1ZykKQEAgLTU5MSwxMyArNjA5LDE3IEBACiAJCSAgICBjYXJkX2hhc19tcGVnKGRldikpCiAJCQlzYWE3MTM0X2lycV90c19kb25lKGRldixzdGF0dXMpOwogCi0JCWlmICgocmVwb3J0ICYgU0FBNzEzNF9JUlFfUkVQT1JUX0RPTkVfUkEzKSkKLQkJCXNhYTcxMzRfaXJxX29zc19kb25lKGRldixzdGF0dXMpOworCQlpZiAoKHJlcG9ydCAmIFNBQTcxMzRfSVJRX1JFUE9SVF9ET05FX1JBMykpICB7CisJCQlpZiAob3NzKSB7CisJCQkJc2FhNzEzNF9pcnFfb3NzX2RvbmUoZGV2LHN0YXR1cyk7CisJCQl9CisJCX0KIAogCQlpZiAoKHJlcG9ydCAmIChTQUE3MTM0X0lSUV9SRVBPUlRfR1BJTzE2IHwKIAkJCSAgICAgICBTQUE3MTM0X0lSUV9SRVBPUlRfR1BJTzE4KSkgJiYKIAkJICAgIGRldi0+cmVtb3RlKQogCQkJc2FhNzEzNF9pbnB1dF9pcnEoZGV2KTsKKwogCX0KIAogCWlmICgxMCA9PSBsb29wKSB7CkBAIC02MzYsNyArNjU4LDcgQEAKIAogCXNhYV93cml0ZWwoU0FBNzEzNF9JUlExLCAwKTsKIAlzYWFfd3JpdGVsKFNBQTcxMzRfSVJRMiwgMCk7Ci0gICAgICAgIGluaXRfTVVURVgoJmRldi0+bG9jayk7CisJaW5pdF9NVVRFWCgmZGV2LT5sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmZGV2LT5zbG9jayk7CiAKIAlzYWE3MTM0X3RyYWNrX2dwaW8oZGV2LCJwcmUtaW5pdCIpOwpAQCAtNjQ2LDE0ICs2NjgsNiBAQAogCQlzYWE3MTM0X3RzX2luaXQxKGRldik7CiAJc2FhNzEzNF9pbnB1dF9pbml0MShkZXYpOwogCi0Jc3dpdGNoIChkZXYtPnBjaS0+ZGV2aWNlKSB7Ci0JY2FzZSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzNDoKLQljYXNlIFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTMzOgotCWNhc2UgUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzU6Ci0JCXNhYTcxMzRfb3NzX2luaXQxKGRldik7Ci0JCWJyZWFrOwotCX0KLQogCS8qIFJBTSBGSUZPIGNvbmZpZyAqLwogCXNhYV93cml0ZWwoU0FBNzEzNF9GSUZPX1NJWkUsIDB4MDgwNzA1MDMpOwogCXNhYV93cml0ZWwoU0FBNzEzNF9USFJFU0hPVUxELDB4MDIwMjAyMDIpOwpAQCAtNjY4LDYgKzY4MiwyMSBAQAogCQkgICBTQUE3MTM0X01BSU5fQ1RSTF9FU0ZFICB8CiAJCSAgIFNBQTcxMzRfTUFJTl9DVFJMX0VCREFDKTsKIAorCS8qCisJICogSW5pdGlhbGl6ZSBPU1MgX2FmdGVyXyBlbmFibGluZyBhdWRpbyBjbG9jayBQTEwgYW5kIGF1ZGlvIHByb2Nlc3NpbmcuCisJICogT1NTIGluaXRpYWxpemF0aW9uIHdyaXRlcyB0byByZWdpc3RlcnMgdmlhIHRoZSBhdWRpbyBEU1A7IHRoZXNlCisJICogd3JpdGVzIHdpbGwgZmFpbCB1bmxlc3MgdGhlIGF1ZGlvIGNsb2NrIGhhcyBiZWVuIHN0YXJ0ZWQuICBBdCB3b3JzdCwKKwkgKiBhdWRpbyB3aWxsIG5vdCB3b3JrLgorCSAqLworCisJc3dpdGNoIChkZXYtPnBjaS0+ZGV2aWNlKSB7CisJY2FzZSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzNDoKKwljYXNlIFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTMzOgorCWNhc2UgUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzU6CisJCXNhYTcxMzRfb3NzX2luaXQxKGRldik7CisJCWJyZWFrOworCX0KKwogCS8qIGVuYWJsZSBwZXJpcGhlcmFsIGRldmljZXMgKi8KIAlzYWFfd3JpdGViKFNBQTcxMzRfU1BFQ0lBTF9NT0RFLCAweDAxKTsKIApAQCAtNjg3LDcgKzcxNiw3IEBACiAJc2FhNzEzNF90dmF1ZGlvX2luaXQyKGRldik7CiAKIAkvKiBlbmFibGUgSVJRJ3MgKi8KLSAgIAlpcnEyX21hc2sgPQorCWlycTJfbWFzayA9CiAJCVNBQTcxMzRfSVJRMl9JTlRFX0RFQzMgICAgfAogCQlTQUE3MTM0X0lSUTJfSU5URV9ERUMyICAgIHwKIAkJU0FBNzEzNF9JUlEyX0lOVEVfREVDMSAgICB8CkBAIC02OTUsMTAgKzcyNCwxMiBAQAogCQlTQUE3MTM0X0lSUTJfSU5URV9QRSAgICAgIHwKIAkJU0FBNzEzNF9JUlEyX0lOVEVfQVI7CiAKLQlpZiAoZGV2LT5oYXNfcmVtb3RlKQorCWlmIChkZXYtPmhhc19yZW1vdGUgPT0gU0FBNzEzNF9SRU1PVEVfR1BJTykKIAkJaXJxMl9tYXNrIHw9IChTQUE3MTM0X0lSUTJfSU5URV9HUElPMTggIHwKIAkJCSAgICAgIFNBQTcxMzRfSVJRMl9JTlRFX0dQSU8xOEEgfAogCQkJICAgICAgU0FBNzEzNF9JUlEyX0lOVEVfR1BJTzE2ICApOworCWVsc2UgaWYgKGRldi0+aGFzX3JlbW90ZSA9PSBTQUE3MTM0X1JFTU9URV9JMkMpCisJCXJlcXVlc3RfbW9kdWxlKCJpci1rYmQtaTJjIik7CiAKIAlzYWFfd3JpdGVsKFNBQTcxMzRfSVJRMSwgMCk7CiAJc2FhX3dyaXRlbChTQUE3MTM0X0lSUTIsIGlycTJfbWFzayk7CkBAIC04NzIsOCArOTAzLDggQEAKIAogCS8qIHByaW50IHBjaSBpbmZvICovCiAJcGNpX3JlYWRfY29uZmlnX2J5dGUocGNpX2RldiwgUENJX0NMQVNTX1JFVklTSU9OLCAmZGV2LT5wY2lfcmV2KTsKLSAgICAgICAgcGNpX3JlYWRfY29uZmlnX2J5dGUocGNpX2RldiwgUENJX0xBVEVOQ1lfVElNRVIsICAmZGV2LT5wY2lfbGF0KTsKLSAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGZvdW5kIGF0ICVzLCByZXY6ICVkLCBpcnE6ICVkLCAiCisJcGNpX3JlYWRfY29uZmlnX2J5dGUocGNpX2RldiwgUENJX0xBVEVOQ1lfVElNRVIsICAmZGV2LT5wY2lfbGF0KTsKKwlwcmludGsoS0VSTl9JTkZPICIlczogZm91bmQgYXQgJXMsIHJldjogJWQsIGlycTogJWQsICIKIAkgICAgICAgImxhdGVuY3k6ICVkLCBtbWlvOiAweCVseFxuIiwgZGV2LT5uYW1lLAogCSAgICAgICBwY2lfbmFtZShwY2lfZGV2KSwgZGV2LT5wY2lfcmV2LCBwY2lfZGV2LT5pcnEsCiAJICAgICAgIGRldi0+cGNpX2xhdCxwY2lfcmVzb3VyY2Vfc3RhcnQocGNpX2RldiwwKSk7CkBAIC04OTcsNyArOTI4LDcgQEAKIAlkZXYtPnRkYTk4ODdfY29uZiA9IHNhYTcxMzRfYm9hcmRzW2Rldi0+Ym9hcmRdLnRkYTk4ODdfY29uZjsKIAlpZiAoVU5TRVQgIT0gdHVuZXJbZGV2LT5ucl0pCiAJCWRldi0+dHVuZXJfdHlwZSA9IHR1bmVyW2Rldi0+bnJdOwotICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogc3Vic3lzdGVtOiAlMDR4OiUwNHgsIGJvYXJkOiAlcyBbY2FyZD0lZCwlc11cbiIsCisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHN1YnN5c3RlbTogJTA0eDolMDR4LCBib2FyZDogJXMgW2NhcmQ9JWQsJXNdXG4iLAogCSAgICAgICBkZXYtPm5hbWUscGNpX2Rldi0+c3Vic3lzdGVtX3ZlbmRvciwKIAkgICAgICAgcGNpX2Rldi0+c3Vic3lzdGVtX2RldmljZSxzYWE3MTM0X2JvYXJkc1tkZXYtPmJvYXJkXS5uYW1lLAogCSAgICAgICBkZXYtPmJvYXJkLCBjYXJkW2Rldi0+bnJdID09IGRldi0+Ym9hcmQgPwpAQCAtOTQ3LDE0ICs5NzgsMjAgQEAKIAkJcmVxdWVzdF9tb2R1bGUoInR1bmVyIik7CiAJaWYgKGRldi0+dGRhOTg4N19jb25mKQogCQlyZXF1ZXN0X21vZHVsZSgidGRhOTg4NyIpOwotICAJaWYgKGNhcmRfaXNfZW1wcmVzcyhkZXYpKSB7CisJaWYgKGNhcmRfaXNfZW1wcmVzcyhkZXYpKSB7CiAJCXJlcXVlc3RfbW9kdWxlKCJzYWE2NzUyaHMiKTsKIAkJcmVxdWVzdF9tb2R1bGVfZGVwZW5kKCJzYWE3MTM0LWVtcHJlc3MiLCZuZWVkX2VtcHJlc3MpOwogCX0KIAotICAJaWYgKGNhcmRfaXNfZHZiKGRldikpCisJaWYgKGNhcmRfaXNfZHZiKGRldikpCiAJCXJlcXVlc3RfbW9kdWxlX2RlcGVuZCgic2FhNzEzNC1kdmIiLCZuZWVkX2R2Yik7CiAKKwlpZiAoIW9zcyAmJiBhbHNhKSB7CisJCWRwcmludGsoIlJlcXVlc3RpbmcgQUxTQSBtb2R1bGVcbiIpOworCQlyZXF1ZXN0X21vZHVsZV9kZXBlbmQoInNhYTcxMzQtYWxzYSIsJm5lZWRfYWxzYSk7CisJfQorCisKIAl2NGwyX3ByaW9faW5pdCgmZGV2LT5wcmlvKTsKIAogCS8qIHJlZ2lzdGVyIHY0bCBkZXZpY2VzICovCkBAIC05OTMsMjIgKzEwMzAsMjIgQEAKIAljYXNlIFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTMzOgogCWNhc2UgUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzU6CiAJCWlmIChvc3MpIHsKLQkJCWVyciA9IGRldi0+b3NzLm1pbm9yX2RzcCA9CisJCQllcnIgPSBkZXYtPmRtYXNvdW5kLm1pbm9yX2RzcCA9CiAJCQkJcmVnaXN0ZXJfc291bmRfZHNwKCZzYWE3MTM0X2RzcF9mb3BzLAogCQkJCQkJICAgZHNwX25yW2Rldi0+bnJdKTsKIAkJCWlmIChlcnIgPCAwKSB7CiAJCQkJZ290byBmYWlsNDsKIAkJCX0KIAkJCXByaW50ayhLRVJOX0lORk8gIiVzOiByZWdpc3RlcmVkIGRldmljZSBkc3AlZFxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsZGV2LT5vc3MubWlub3JfZHNwID4+IDQpOworCQkJICAgICAgIGRldi0+bmFtZSxkZXYtPmRtYXNvdW5kLm1pbm9yX2RzcCA+PiA0KTsKIAotCQkJZXJyID0gZGV2LT5vc3MubWlub3JfbWl4ZXIgPQorCQkJZXJyID0gZGV2LT5kbWFzb3VuZC5taW5vcl9taXhlciA9CiAJCQkJcmVnaXN0ZXJfc291bmRfbWl4ZXIoJnNhYTcxMzRfbWl4ZXJfZm9wcywKIAkJCQkJCSAgICAgbWl4ZXJfbnJbZGV2LT5ucl0pOwogCQkJaWYgKGVyciA8IDApCiAJCQkJZ290byBmYWlsNTsKIAkJCXByaW50ayhLRVJOX0lORk8gIiVzOiByZWdpc3RlcmVkIGRldmljZSBtaXhlciVkXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSxkZXYtPm9zcy5taW5vcl9taXhlciA+PiA0KTsKKwkJCSAgICAgICBkZXYtPm5hbWUsZGV2LT5kbWFzb3VuZC5taW5vcl9taXhlciA+PiA0KTsKIAkJfQogCQlicmVhazsKIAl9CkBAIC0xMDM1LDcgKzEwNzIsNyBAQAogCWNhc2UgUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzM6CiAJY2FzZSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzNToKIAkJaWYgKG9zcykKLQkJCXVucmVnaXN0ZXJfc291bmRfZHNwKGRldi0+b3NzLm1pbm9yX2RzcCk7CisJCQl1bnJlZ2lzdGVyX3NvdW5kX2RzcChkZXYtPmRtYXNvdW5kLm1pbm9yX2RzcCk7CiAJCWJyZWFrOwogCX0KICBmYWlsNDoKQEAgLTEwNTUsNyArMTA5Miw3IEBACiAKIHN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBzYWE3MTM0X2ZpbmlkZXYoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYpCiB7Ci0gICAgICAgIHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBjaV9kZXYpOworCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBjaV9kZXYpOwogCXN0cnVjdCBsaXN0X2hlYWQgKml0ZW07CiAJc3RydWN0IHNhYTcxMzRfbXBlZ19vcHMgKm1vcHM7CiAKQEAgLTEwOTMsOCArMTEzMCw4IEBACiAJY2FzZSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzMzoKIAljYXNlIFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTM1OgogCQlpZiAob3NzKSB7Ci0JCQl1bnJlZ2lzdGVyX3NvdW5kX21peGVyKGRldi0+b3NzLm1pbm9yX21peGVyKTsKLQkJCXVucmVnaXN0ZXJfc291bmRfZHNwKGRldi0+b3NzLm1pbm9yX2RzcCk7CisJCQl1bnJlZ2lzdGVyX3NvdW5kX21peGVyKGRldi0+ZG1hc291bmQubWlub3JfbWl4ZXIpOworCQkJdW5yZWdpc3Rlcl9zb3VuZF9kc3AoZGV2LT5kbWFzb3VuZC5taW5vcl9kc3ApOwogCQl9CiAJCWJyZWFrOwogCX0KQEAgLTExNDksMTAgKzExODYsMTAgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBzYWE3MTM0X3BjaV9kcml2ZXIgPSB7Ci0gICAgICAgIC5uYW1lICAgICA9ICJzYWE3MTM0IiwKLSAgICAgICAgLmlkX3RhYmxlID0gc2FhNzEzNF9wY2lfdGJsLAotICAgICAgICAucHJvYmUgICAgPSBzYWE3MTM0X2luaXRkZXYsCi0gICAgICAgIC5yZW1vdmUgICA9IF9fZGV2ZXhpdF9wKHNhYTcxMzRfZmluaWRldiksCisJLm5hbWUgICAgID0gInNhYTcxMzQiLAorCS5pZF90YWJsZSA9IHNhYTcxMzRfcGNpX3RibCwKKwkucHJvYmUgICAgPSBzYWE3MTM0X2luaXRkZXYsCisJLnJlbW92ZSAgID0gX19kZXZleGl0X3Aoc2FhNzEzNF9maW5pZGV2KSwKIH07CiAKIHN0YXRpYyBpbnQgc2FhNzEzNF9pbml0KHZvaWQpCkBAIC0xMTg4LDYgKzEyMjUsMTMgQEAKIEVYUE9SVF9TWU1CT0woc2FhNzEzNF9kZXZsaXN0KTsKIEVYUE9SVF9TWU1CT0woc2FhNzEzNF9ib2FyZHMpOwogCisvKiAtLS0tLS0tLS0tLS0tLS0tLSBGb3IgQUxTQSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitFWFBPUlRfU1lNQk9MKHNhYTcxMzRfcGd0YWJsZV9mcmVlKTsKK0VYUE9SVF9TWU1CT0woc2FhNzEzNF9wZ3RhYmxlX2J1aWxkKTsKK0VYUE9SVF9TWU1CT0woc2FhNzEzNF9wZ3RhYmxlX2FsbG9jKTsKK0VYUE9SVF9TWU1CT0woc2FhNzEzNF9zZXRfZG1hYml0cyk7CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKgogICogTG9jYWwgdmFyaWFibGVzOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtZHZiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1kdmIuYwppbmRleCA2MzlhZTUxLi5lMDE2NDgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1kdmIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1kdmIuYwpAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CiAKLQogI2luY2x1ZGUgInNhYTcxMzQtcmVnLmgiCiAjaW5jbHVkZSAic2FhNzEzNC5oIgogCkBAIC00MCw2ICszOSwxMCBAQAogI2lmZGVmIEhBVkVfVERBMTAwNFgKICMgaW5jbHVkZSAidGRhMTAwNHguaCIKICNlbmRpZgorI2lmZGVmIEhBVkVfTlhUMjAwWAorIyBpbmNsdWRlICJueHQyMDB4LmgiCisjIGluY2x1ZGUgImR2Yi1wbGwuaCIKKyNlbmRpZgogCiBNT0RVTEVfQVVUSE9SKCJHZXJkIEtub3JyIDxrcmF4ZWxAYnl0ZXNleC5vcmc+IFtTdVNFIExhYnNdIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CkBAIC0xNTEsMjUgKzE1NCwxMiBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKICNpZmRlZiBIQVZFX1REQTEwMDRYCi1zdGF0aWMgaW50IHBoaWxpcHNfdHUxMjE2X3BsbF9pbml0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQotewotCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2ID0gZmUtPmR2Yi0+cHJpdjsKLQlzdGF0aWMgdTggdHUxMjE2X2luaXRbXSA9IHsgMHgwYiwgMHhmNSwgMHg4NSwgMHhhYiB9OwotCXN0cnVjdCBpMmNfbXNnIHR1bmVyX21zZyA9IHsuYWRkciA9IDB4NjAsLmZsYWdzID0gMCwuYnVmID0gdHUxMjE2X2luaXQsLmxlbiA9IHNpemVvZih0dTEyMTZfaW5pdCkgfTsKIAotCS8qIHNldHVwIFBMTCBjb25maWd1cmF0aW9uICovCi0JaWYgKGkyY190cmFuc2ZlcigmZGV2LT5pMmNfYWRhcCwgJnR1bmVyX21zZywgMSkgIT0gMSkKLQkJcmV0dXJuIC1FSU87Ci0JbXNsZWVwKDEpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcGhpbGlwc190dTEyMTZfcGxsX3NldChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwYXJhbXMpCitzdGF0aWMgaW50IHBoaWxpcHNfdGRhNjY1MV9wbGxfc2V0KHU4IGFkZHIsIHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnBhcmFtcykKIHsKIAlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiA9IGZlLT5kdmItPnByaXY7CiAJdTggdHVuZXJfYnVmWzRdOwotCXN0cnVjdCBpMmNfbXNnIHR1bmVyX21zZyA9IHsuYWRkciA9IDB4NjAsLmZsYWdzID0gMCwuYnVmID0gdHVuZXJfYnVmLC5sZW4gPQorCXN0cnVjdCBpMmNfbXNnIHR1bmVyX21zZyA9IHsuYWRkciA9IGFkZHIsLmZsYWdzID0gMCwuYnVmID0gdHVuZXJfYnVmLC5sZW4gPQogCQkJc2l6ZW9mKHR1bmVyX2J1ZikgfTsKIAlpbnQgdHVuZXJfZnJlcXVlbmN5ID0gMDsKIAl1OCBiYW5kLCBjcCwgZmlsdGVyOwpAQCAtMjQyLDExICsyMzIsMzYgQEAKIAogCWlmIChpMmNfdHJhbnNmZXIoJmRldi0+aTJjX2FkYXAsICZ0dW5lcl9tc2csIDEpICE9IDEpCiAJCXJldHVybiAtRUlPOwotCiAJbXNsZWVwKDEpOwogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHBoaWxpcHNfdGRhNjY1MV9wbGxfaW5pdCh1OCBhZGRyLCBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiA9IGZlLT5kdmItPnByaXY7CisJc3RhdGljIHU4IHR1MTIxNl9pbml0W10gPSB7IDB4MGIsIDB4ZjUsIDB4ODUsIDB4YWIgfTsKKwlzdHJ1Y3QgaTJjX21zZyB0dW5lcl9tc2cgPSB7LmFkZHIgPSBhZGRyLC5mbGFncyA9IDAsLmJ1ZiA9IHR1MTIxNl9pbml0LC5sZW4gPSBzaXplb2YodHUxMjE2X2luaXQpIH07CisKKwkvKiBzZXR1cCBQTEwgY29uZmlndXJhdGlvbiAqLworCWlmIChpMmNfdHJhbnNmZXIoJmRldi0+aTJjX2FkYXAsICZ0dW5lcl9tc2csIDEpICE9IDEpCisJCXJldHVybiAtRUlPOworCW1zbGVlcCgxKTsKKworCXJldHVybiAwOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGludCBwaGlsaXBzX3R1MTIxNl9wbGxfNjBfaW5pdChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlyZXR1cm4gcGhpbGlwc190ZGE2NjUxX3BsbF9pbml0KDB4NjAsIGZlKTsKK30KKworc3RhdGljIGludCBwaGlsaXBzX3R1MTIxNl9wbGxfNjBfc2V0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnBhcmFtcykKK3sKKwlyZXR1cm4gcGhpbGlwc190ZGE2NjUxX3BsbF9zZXQoMHg2MCwgZmUsIHBhcmFtcyk7Cit9CisKIHN0YXRpYyBpbnQgcGhpbGlwc190dTEyMTZfcmVxdWVzdF9maXJtd2FyZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKIAkJCQkJICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICoqZncsIGNoYXIgKm5hbWUpCiB7CkBAIC0yNTQsMjIgKzI2OSwxMDggQEAKIAlyZXR1cm4gcmVxdWVzdF9maXJtd2FyZShmdywgbmFtZSwgJmRldi0+cGNpLT5kZXYpOwogfQogCi1zdGF0aWMgc3RydWN0IHRkYTEwMDR4X2NvbmZpZyBwaGlsaXBzX3R1MTIxNl9jb25maWcgPSB7CitzdGF0aWMgc3RydWN0IHRkYTEwMDR4X2NvbmZpZyBwaGlsaXBzX3R1MTIxNl82MF9jb25maWcgPSB7CiAKIAkuZGVtb2RfYWRkcmVzcyA9IDB4OCwKIAkuaW52ZXJ0ICAgICAgICA9IDEsCi0JLmludmVydF9vY2xrICAgPSAxLAorCS5pbnZlcnRfb2NsayAgID0gMCwKIAkueHRhbF9mcmVxICAgICA9IFREQTEwMDQ2X1hUQUxfNE0sCiAJLmFnY19jb25maWcgICAgPSBUREExMDA0Nl9BR0NfREVGQVVMVCwKIAkuaWZfZnJlcSAgICAgICA9IFREQTEwMDQ2X0ZSRVFfMzYxNywKLQkucGxsX2luaXQgICAgICA9IHBoaWxpcHNfdHUxMjE2X3BsbF9pbml0LAotCS5wbGxfc2V0ICAgICAgID0gcGhpbGlwc190dTEyMTZfcGxsX3NldCwKKwkucGxsX2luaXQgICAgICA9IHBoaWxpcHNfdHUxMjE2X3BsbF82MF9pbml0LAorCS5wbGxfc2V0ICAgICAgID0gcGhpbGlwc190dTEyMTZfcGxsXzYwX3NldCwKIAkucGxsX3NsZWVwICAgICA9IE5VTEwsCiAJLnJlcXVlc3RfZmlybXdhcmUgPSBwaGlsaXBzX3R1MTIxNl9yZXF1ZXN0X2Zpcm13YXJlLAogfTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKK3N0YXRpYyBpbnQgcGhpbGlwc190dTEyMTZfcGxsXzYxX2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJcmV0dXJuIHBoaWxpcHNfdGRhNjY1MV9wbGxfaW5pdCgweDYxLCBmZSk7Cit9CisKK3N0YXRpYyBpbnQgcGhpbGlwc190dTEyMTZfcGxsXzYxX3NldChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwYXJhbXMpCit7CisJcmV0dXJuIHBoaWxpcHNfdGRhNjY1MV9wbGxfc2V0KDB4NjEsIGZlLCBwYXJhbXMpOworfQorCitzdGF0aWMgc3RydWN0IHRkYTEwMDR4X2NvbmZpZyBwaGlsaXBzX3R1MTIxNl82MV9jb25maWcgPSB7CisKKwkuZGVtb2RfYWRkcmVzcyA9IDB4OCwKKwkuaW52ZXJ0ICAgICAgICA9IDEsCisJLmludmVydF9vY2xrICAgPSAwLAorCS54dGFsX2ZyZXEgICAgID0gVERBMTAwNDZfWFRBTF80TSwKKwkuYWdjX2NvbmZpZyAgICA9IFREQTEwMDQ2X0FHQ19ERUZBVUxULAorCS5pZl9mcmVxICAgICAgID0gVERBMTAwNDZfRlJFUV8zNjE3LAorCS5wbGxfaW5pdCAgICAgID0gcGhpbGlwc190dTEyMTZfcGxsXzYxX2luaXQsCisJLnBsbF9zZXQgICAgICAgPSBwaGlsaXBzX3R1MTIxNl9wbGxfNjFfc2V0LAorCS5wbGxfc2xlZXAgICAgID0gTlVMTCwKKwkucmVxdWVzdF9maXJtd2FyZSA9IHBoaWxpcHNfdHUxMjE2X3JlcXVlc3RfZmlybXdhcmUsCit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGludCBwaGlsaXBzX2V1cm9wYV9wbGxfaW5pdChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiA9IGZlLT5kdmItPnByaXY7CisJc3RhdGljIHU4IG1zZ1tdID0geyAweDBiLCAweGY1LCAweDg2LCAweGFiIH07CisJc3RydWN0IGkyY19tc2cgaW5pdF9tc2cgPSB7LmFkZHIgPSAweDYxLC5mbGFncyA9IDAsLmJ1ZiA9IG1zZywubGVuID0gc2l6ZW9mKG1zZykgfTsKKworCS8qIHNldHVwIFBMTCBjb25maWd1cmF0aW9uICovCisJaWYgKGkyY190cmFuc2ZlcigmZGV2LT5pMmNfYWRhcCwgJmluaXRfbXNnLCAxKSAhPSAxKQorCQlyZXR1cm4gLUVJTzsKKwltc2xlZXAoMSk7CisKKwkvKiBzd2l0Y2ggdGhlIGJvYXJkIHRvIGR2YiBtb2RlICovCisJaW5pdF9tc2cuYWRkciA9IDB4NDM7CisJaW5pdF9tc2cubGVuICA9IDB4MDI7CisJbXNnWzBdID0gMHgwMDsKKwltc2dbMV0gPSAweDQwOworCWlmIChpMmNfdHJhbnNmZXIoJmRldi0+aTJjX2FkYXAsICZpbml0X21zZywgMSkgIT0gMSkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwaGlsaXBzX3RkMTMxNl9wbGxfc2V0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnBhcmFtcykKK3sKKwlyZXR1cm4gcGhpbGlwc190ZGE2NjUxX3BsbF9zZXQoMHg2MSwgZmUsIHBhcmFtcyk7Cit9CisKK3N0YXRpYyB2b2lkIHBoaWxpcHNfZXVyb3BhX2FuYWxvZyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiA9IGZlLT5kdmItPnByaXY7CisJLyogdGhpcyBtZXNzYWdlIGFjdHVhbGx5IHR1cm5zIHRoZSB0dW5lciBiYWNrIHRvIGFuYWxvZyBtb2RlICovCisJc3RhdGljIHU4IG1zZ1tdID0geyAweDBiLCAweGRjLCAweDg2LCAweGE0IH07CisJc3RydWN0IGkyY19tc2cgYW5hbG9nX21zZyA9IHsuYWRkciA9IDB4NjEsLmZsYWdzID0gMCwuYnVmID0gbXNnLC5sZW4gPSBzaXplb2YobXNnKSB9OworCisJaTJjX3RyYW5zZmVyKCZkZXYtPmkyY19hZGFwLCAmYW5hbG9nX21zZywgMSk7CisJbXNsZWVwKDEpOworCisJLyogc3dpdGNoIHRoZSBib2FyZCB0byBhbmFsb2cgbW9kZSAqLworCWFuYWxvZ19tc2cuYWRkciA9IDB4NDM7CisJYW5hbG9nX21zZy5sZW4gID0gMHgwMjsKKwltc2dbMF0gPSAweDAwOworCW1zZ1sxXSA9IDB4MTQ7CisJaTJjX3RyYW5zZmVyKCZkZXYtPmkyY19hZGFwLCAmYW5hbG9nX21zZywgMSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdGRhMTAwNHhfY29uZmlnIHBoaWxpcHNfZXVyb3BhX2NvbmZpZyA9IHsKKworCS5kZW1vZF9hZGRyZXNzID0gMHg4LAorCS5pbnZlcnQgICAgICAgID0gMCwKKwkuaW52ZXJ0X29jbGsgICA9IDAsCisJLnh0YWxfZnJlcSAgICAgPSBUREExMDA0Nl9YVEFMXzRNLAorCS5hZ2NfY29uZmlnICAgID0gVERBMTAwNDZfQUdDX0lGT19BVVRPX1BPUywKKwkuaWZfZnJlcSAgICAgICA9IFREQTEwMDQ2X0ZSRVFfMDUyLAorCS5wbGxfaW5pdCAgICAgID0gcGhpbGlwc19ldXJvcGFfcGxsX2luaXQsCisJLnBsbF9zZXQgICAgICAgPSBwaGlsaXBzX3RkMTMxNl9wbGxfc2V0LAorCS5wbGxfc2xlZXAgICAgID0gcGhpbGlwc19ldXJvcGFfYW5hbG9nLAorCS5yZXF1ZXN0X2Zpcm13YXJlID0gTlVMTCwKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgaW50IHBoaWxpcHNfZm1kMTIxNl9wbGxfaW5pdChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKQEAgLTM4Miw3ICs0ODMsNiBAQAogCXJldHVybiAwOwogfQogCi0jaWZkZWYgSEFWRV9UREExMDA0WAogc3RhdGljIHN0cnVjdCB0ZGExMDA0eF9jb25maWcgbWVkaW9uX2NhcmRidXMgPSB7CiAJLmRlbW9kX2FkZHJlc3MgPSAweDA4LAogCS5pbnZlcnQgICAgICAgID0gMSwKQEAgLTM5NSw3ICs0OTUsNiBAQAogCS5wbGxfc2xlZXAJICAgPSBwaGlsaXBzX2ZtZDEyMTZfYW5hbG9nLAogCS5yZXF1ZXN0X2Zpcm13YXJlID0gTlVMTCwKIH07Ci0jZW5kaWYKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKQEAgLTQ1Miw3ICs1NTEsNyBAQAogCXU4IHR1bmVyX2J1ZlsxNF07CiAKIAlzdHJ1Y3QgaTJjX21zZyB0dW5lcl9tc2cgPSB7LmFkZHIgPSAweDYwLC5mbGFncyA9IDAsLmJ1ZiA9IHR1bmVyX2J1ZiwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgLmxlbiA9IHNpemVvZih0dW5lcl9idWYpIH07CisJCQkJCS5sZW4gPSBzaXplb2YodHVuZXJfYnVmKSB9OwogCWludCBpLCB0dW5lcl9mcmVxLCBpZl9mcmVxOwogCXUzMiBOOwogCXN3aXRjaCAocGFyYW1zLT51Lm9mZG0uYmFuZHdpZHRoKSB7CkBAIC01MTEsNyArNjEwLDcgQEAKIAlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiA9IGZlLT5kdmItPnByaXY7CiAJc3RhdGljIHU4IHRkYTgyN3hfc2xlZXBbXSA9IHsgMHgzMCwgMHhkMH07CiAJc3RydWN0IGkyY19tc2cgdHVuZXJfbXNnID0gey5hZGRyID0gMHg2MCwuZmxhZ3MgPSAwLC5idWYgPSB0ZGE4Mjd4X3NsZWVwLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAubGVuID0gc2l6ZW9mKHRkYTgyN3hfc2xlZXApIH07CisJCQkJICAgIC5sZW4gPSBzaXplb2YodGRhODI3eF9zbGVlcCkgfTsKIAlpMmNfdHJhbnNmZXIoJmRldi0+aTJjX2FkYXAsICZ0dW5lcl9tc2csIDEpOwogfQogCkBAIC01MjcsNiArNjI2LDIwMiBAQAogCS5wbGxfc2xlZXAJICAgPSBwaGlsaXBzX3RkYTgyN3hfcGxsX3NsZWVwLAogCS5yZXF1ZXN0X2Zpcm13YXJlID0gTlVMTCwKIH07CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdHJ1Y3QgdGRhODI3eGFfZGF0YSB7CisJdTMyIGxvbWF4OworCXU4ICBzdmNvOworCXU4ICBzcGQ7CisJdTggIHNjcjsKKwl1OCAgc2JzOworCXU4ICBnYzM7Cit9OworCitzdGF0aWMgc3RydWN0IHRkYTgyN3hhX2RhdGEgdGRhODI3eGFfZHZidFtdID0geworCXsgLmxvbWF4ID0gIDU2ODc1MDAwLCAuc3ZjbyA9IDMsIC5zcGQgPSA0LCAuc2NyID0gMCwgLnNicyA9IDAsIC5nYzMgPSAxfSwKKwl7IC5sb21heCA9ICA2NzI1MDAwMCwgLnN2Y28gPSAwLCAuc3BkID0gMywgLnNjciA9IDAsIC5zYnMgPSAwLCAuZ2MzID0gMX0sCisJeyAubG9tYXggPSAgODEyNTAwMDAsIC5zdmNvID0gMSwgLnNwZCA9IDMsIC5zY3IgPSAwLCAuc2JzID0gMCwgLmdjMyA9IDF9LAorCXsgLmxvbWF4ID0gIDk3NTAwMDAwLCAuc3ZjbyA9IDIsIC5zcGQgPSAzLCAuc2NyID0gMCwgLnNicyA9IDAsIC5nYzMgPSAxfSwKKwl7IC5sb21heCA9IDExMzc1MDAwMCwgLnN2Y28gPSAzLCAuc3BkID0gMywgLnNjciA9IDAsIC5zYnMgPSAxLCAuZ2MzID0gMX0sCisJeyAubG9tYXggPSAxMzQ1MDAwMDAsIC5zdmNvID0gMCwgLnNwZCA9IDIsIC5zY3IgPSAwLCAuc2JzID0gMSwgLmdjMyA9IDF9LAorCXsgLmxvbWF4ID0gMTU0MDAwMDAwLCAuc3ZjbyA9IDEsIC5zcGQgPSAyLCAuc2NyID0gMCwgLnNicyA9IDEsIC5nYzMgPSAxfSwKKwl7IC5sb21heCA9IDE2MjUwMDAwMCwgLnN2Y28gPSAxLCAuc3BkID0gMiwgLnNjciA9IDAsIC5zYnMgPSAxLCAuZ2MzID0gMX0sCisJeyAubG9tYXggPSAxODMwMDAwMDAsIC5zdmNvID0gMiwgLnNwZCA9IDIsIC5zY3IgPSAwLCAuc2JzID0gMSwgLmdjMyA9IDF9LAorCXsgLmxvbWF4ID0gMTk1MDAwMDAwLCAuc3ZjbyA9IDIsIC5zcGQgPSAyLCAuc2NyID0gMCwgLnNicyA9IDIsIC5nYzMgPSAxfSwKKwl7IC5sb21heCA9IDIyNzUwMDAwMCwgLnN2Y28gPSAzLCAuc3BkID0gMiwgLnNjciA9IDAsIC5zYnMgPSAyLCAuZ2MzID0gMX0sCisJeyAubG9tYXggPSAyNjkwMDAwMDAsIC5zdmNvID0gMCwgLnNwZCA9IDEsIC5zY3IgPSAwLCAuc2JzID0gMiwgLmdjMyA9IDF9LAorCXsgLmxvbWF4ID0gMjkwMDAwMDAwLCAuc3ZjbyA9IDEsIC5zcGQgPSAxLCAuc2NyID0gMCwgLnNicyA9IDIsIC5nYzMgPSAxfSwKKwl7IC5sb21heCA9IDMyNTAwMDAwMCwgLnN2Y28gPSAxLCAuc3BkID0gMSwgLnNjciA9IDAsIC5zYnMgPSAzLCAuZ2MzID0gMX0sCisJeyAubG9tYXggPSAzOTAwMDAwMDAsIC5zdmNvID0gMiwgLnNwZCA9IDEsIC5zY3IgPSAwLCAuc2JzID0gMywgLmdjMyA9IDF9LAorCXsgLmxvbWF4ID0gNDU1MDAwMDAwLCAuc3ZjbyA9IDMsIC5zcGQgPSAxLCAuc2NyID0gMCwgLnNicyA9IDMsIC5nYzMgPSAxfSwKKwl7IC5sb21heCA9IDUyMDAwMDAwMCwgLnN2Y28gPSAwLCAuc3BkID0gMCwgLnNjciA9IDAsIC5zYnMgPSAzLCAuZ2MzID0gMX0sCisJeyAubG9tYXggPSA1MzgwMDAwMDAsIC5zdmNvID0gMCwgLnNwZCA9IDAsIC5zY3IgPSAxLCAuc2JzID0gMywgLmdjMyA9IDF9LAorCXsgLmxvbWF4ID0gNTUwMDAwMDAwLCAuc3ZjbyA9IDEsIC5zcGQgPSAwLCAuc2NyID0gMCwgLnNicyA9IDMsIC5nYzMgPSAxfSwKKwl7IC5sb21heCA9IDYyMDAwMDAwMCwgLnN2Y28gPSAxLCAuc3BkID0gMCwgLnNjciA9IDAsIC5zYnMgPSA0LCAuZ2MzID0gMH0sCisJeyAubG9tYXggPSA2NTAwMDAwMDAsIC5zdmNvID0gMSwgLnNwZCA9IDAsIC5zY3IgPSAxLCAuc2JzID0gNCwgLmdjMyA9IDB9LAorCXsgLmxvbWF4ID0gNzAwMDAwMDAwLCAuc3ZjbyA9IDIsIC5zcGQgPSAwLCAuc2NyID0gMCwgLnNicyA9IDQsIC5nYzMgPSAwfSwKKwl7IC5sb21heCA9IDc4MDAwMDAwMCwgLnN2Y28gPSAyLCAuc3BkID0gMCwgLnNjciA9IDEsIC5zYnMgPSA0LCAuZ2MzID0gMH0sCisJeyAubG9tYXggPSA4MjAwMDAwMDAsIC5zdmNvID0gMywgLnNwZCA9IDAsIC5zY3IgPSAwLCAuc2JzID0gNCwgLmdjMyA9IDB9LAorCXsgLmxvbWF4ID0gODcwMDAwMDAwLCAuc3ZjbyA9IDMsIC5zcGQgPSAwLCAuc2NyID0gMSwgLnNicyA9IDQsIC5nYzMgPSAwfSwKKwl7IC5sb21heCA9IDkxMTAwMDAwMCwgLnN2Y28gPSAzLCAuc3BkID0gMCwgLnNjciA9IDIsIC5zYnMgPSA0LCAuZ2MzID0gMH0sCisJeyAubG9tYXggPSAgICAgICAgIDAsIC5zdmNvID0gMCwgLnNwZCA9IDAsIC5zY3IgPSAwLCAuc2JzID0gMCwgLmdjMyA9IDB9fTsKKworCitzdGF0aWMgaW50IHBoaWxpcHNfdGRhODI3eGFfcGxsX3NldCh1OCBhZGRyLCBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwYXJhbXMpCit7CisJc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYgPSBmZS0+ZHZiLT5wcml2OworCXU4IHR1bmVyX2J1ZlsxNF07CisJdW5zaWduZWQgY2hhciByZWcyWzJdOworCisJc3RydWN0IGkyY19tc2cgbXNnID0gey5hZGRyID0gYWRkciwuZmxhZ3MgPSAwLC5idWYgPSB0dW5lcl9idWZ9OworCWludCBpLCB0dW5lcl9mcmVxLCBpZl9mcmVxOworCXUzMiBOOworCisJc3dpdGNoIChwYXJhbXMtPnUub2ZkbS5iYW5kd2lkdGgpIHsKKwljYXNlIEJBTkRXSURUSF82X01IWjoKKwkJaWZfZnJlcSA9IDQwMDAwMDA7CisJCWJyZWFrOworCWNhc2UgQkFORFdJRFRIXzdfTUhaOgorCQlpZl9mcmVxID0gNDUwMDAwMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoJCSAgIC8qIDggTUh6IG9yIEF1dG8gKi8KKwkJaWZfZnJlcSA9IDUwMDAwMDA7CisJCWJyZWFrOworCX0KKwl0dW5lcl9mcmVxID0gcGFyYW1zLT5mcmVxdWVuY3kgKyBpZl9mcmVxOworCisJaSA9IDA7CisJd2hpbGUgKHRkYTgyN3hhX2R2YnRbaV0ubG9tYXggPCB0dW5lcl9mcmVxKSB7CisJCWlmKHRkYTgyN3hhX2R2YnRbaSArIDFdLmxvbWF4ID09IDApCisJCQlicmVhazsKKwkJaSsrOworCX0KKworCU4gPSAoKHR1bmVyX2ZyZXEgKyAzMTI1MCkgLyA2MjUwMCkgPDwgdGRhODI3eGFfZHZidFtpXS5zcGQ7CisJdHVuZXJfYnVmWzBdID0gMDsgICAgICAgICAgICAvLyBzdWJhZGRyZXNzCisJdHVuZXJfYnVmWzFdID0gTiA+PiA4OworCXR1bmVyX2J1ZlsyXSA9IE4gJiAweGZmOworCXR1bmVyX2J1ZlszXSA9IDA7CisJdHVuZXJfYnVmWzRdID0gMHgxNjsKKwl0dW5lcl9idWZbNV0gPSAodGRhODI3eGFfZHZidFtpXS5zcGQgPDwgNSkgKyAodGRhODI3eGFfZHZidFtpXS5zdmNvIDw8IDMpICsKKwkJCXRkYTgyN3hhX2R2YnRbaV0uc2JzOworCXR1bmVyX2J1Zls2XSA9IDB4NGIgKyAodGRhODI3eGFfZHZidFtpXS5nYzMgPDwgNCk7CisJdHVuZXJfYnVmWzddID0gMHgwYzsKKwl0dW5lcl9idWZbOF0gPSAweDA2OworCXR1bmVyX2J1Zls5XSA9IDB4MjQ7CisJdHVuZXJfYnVmWzEwXSA9IDB4ZmY7CisJdHVuZXJfYnVmWzExXSA9IDB4NjA7CisJdHVuZXJfYnVmWzEyXSA9IDB4MDA7CisJdHVuZXJfYnVmWzEzXSA9IDB4Mzk7ICAvLyBscHNlbAorCW1zZy5sZW4gPSAxNDsKKwlpZiAoaTJjX3RyYW5zZmVyKCZkZXYtPmkyY19hZGFwLCAmbXNnLCAxKSAhPSAxKQorCQlyZXR1cm4gLUVJTzsKKworCW1zZy5idWY9IHJlZzI7CisJbXNnLmxlbiA9IDI7CisJcmVnMlswXSA9IDB4NjA7CisJcmVnMlsxXSA9IDB4M2M7CisJaTJjX3RyYW5zZmVyKCZkZXYtPmkyY19hZGFwLCAmbXNnLCAxKTsKKworCXJlZzJbMF0gPSAweGEwOworCXJlZzJbMV0gPSAweDQwOworCWkyY190cmFuc2ZlcigmZGV2LT5pMmNfYWRhcCwgJm1zZywgMSk7CisKKwltc2xlZXAoMik7CisJLyogY29ycmVjdCBDUCB2YWx1ZSAqLworCXJlZzJbMF0gPSAweDMwOworCXJlZzJbMV0gPSAweDEwICsgdGRhODI3eGFfZHZidFtpXS5zY3I7CisJbXNnLmxlbiA9IDI7CisJaTJjX3RyYW5zZmVyKCZkZXYtPmkyY19hZGFwLCAmbXNnLCAxKTsKKworCW1zbGVlcCg1NTApOworCXJlZzJbMF0gPSAweDUwOworCXJlZzJbMV0gPSAweDRmICsgKHRkYTgyN3hhX2R2YnRbaV0uZ2MzIDw8IDQpOworCWkyY190cmFuc2ZlcigmZGV2LT5pMmNfYWRhcCwgJm1zZywgMSk7CisKKwlyZXR1cm4gMDsKKworfQorCitzdGF0aWMgdm9pZCBwaGlsaXBzX3RkYTgyN3hhX3BsbF9zbGVlcCh1OCBhZGRyLCBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiA9IGZlLT5kdmItPnByaXY7CisJc3RhdGljIHU4IHRkYTgyN3hhX3NsZWVwW10gPSB7IDB4MzAsIDB4OTB9OworCXN0cnVjdCBpMmNfbXNnIHR1bmVyX21zZyA9IHsuYWRkciA9IGFkZHIsLmZsYWdzID0gMCwuYnVmID0gdGRhODI3eGFfc2xlZXAsCisJCQkJICAgIC5sZW4gPSBzaXplb2YodGRhODI3eGFfc2xlZXApIH07CisJaTJjX3RyYW5zZmVyKCZkZXYtPmkyY19hZGFwLCAmdHVuZXJfbXNnLCAxKTsKKworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGludCBwaGlsaXBzX3RpZ2VyX3BsbF9zZXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcGFyYW1zKQoreworCWludCByZXQ7CisJc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYgPSBmZS0+ZHZiLT5wcml2OworCXN0YXRpYyB1OCB0ZGE4MjkwX2Nsb3NlW10gPSB7IDB4MjEsIDB4YzB9OworCXN0YXRpYyB1OCB0ZGE4MjkwX29wZW5bXSAgPSB7IDB4MjEsIDB4ODB9OworCXN0cnVjdCBpMmNfbXNnIHRkYTgyOTBfbXNnID0gey5hZGRyID0gMHg0YiwuZmxhZ3MgPSAwLCAubGVuID0gMn07CisJLyogY2xvc2UgdGRhODI5MCBpMmMgYnJpZGdlICovCisJdGRhODI5MF9tc2cuYnVmID0gdGRhODI5MF9jbG9zZTsKKwlyZXQgPSBpMmNfdHJhbnNmZXIoJmRldi0+aTJjX2FkYXAsICZ0ZGE4MjkwX21zZywgMSk7CisJaWYgKHJldCAhPSAxKQorCQlyZXR1cm4gLUVJTzsKKwltc2xlZXAoMjApOworCXJldCA9IHBoaWxpcHNfdGRhODI3eGFfcGxsX3NldCgweDYxLCBmZSwgcGFyYW1zKTsKKwlpZiAocmV0ICE9IDApCisJCXJldHVybiByZXQ7CisJLyogb3BlbiB0ZGE4MjkwIGkyYyBicmlkZ2UgKi8KKwl0ZGE4MjkwX21zZy5idWYgPSB0ZGE4MjkwX29wZW47CisJaTJjX3RyYW5zZmVyKCZkZXYtPmkyY19hZGFwLCAmdGRhODI5MF9tc2csIDEpOworCXJldHVybiByZXQ7Cit9OworCitzdGF0aWMgaW50IHBoaWxpcHNfdGlnZXJfZHZiX21vZGUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYgPSBmZS0+ZHZiLT5wcml2OworCXN0YXRpYyB1OCBkYXRhW10gPSB7IDB4M2MsIDB4MzMsIDB4NmF9OworCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsuYWRkcj0weDA4LCAuZmxhZ3M9MCwgLmJ1Zj1kYXRhLCAubGVuID0gc2l6ZW9mKGRhdGEpfTsKKworCWlmIChpMmNfdHJhbnNmZXIoJmRldi0+aTJjX2FkYXAsICZtc2csIDEpICE9IDEpCisJCXJldHVybiAtRUlPOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwaGlsaXBzX3RpZ2VyX2FuYWxvZ19tb2RlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2ID0gZmUtPmR2Yi0+cHJpdjsKKwlzdGF0aWMgdTggZGF0YVtdID0geyAweDNjLCAweDMzLCAweDY4fTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7LmFkZHI9MHgwOCwgLmZsYWdzPTAsIC5idWY9ZGF0YSwgLmxlbiA9IHNpemVvZihkYXRhKX07CisKKwlpMmNfdHJhbnNmZXIoJmRldi0+aTJjX2FkYXAsICZtc2csIDEpOworCXBoaWxpcHNfdGRhODI3eGFfcGxsX3NsZWVwKCAweDYxLCBmZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdGRhMTAwNHhfY29uZmlnIHBoaWxpcHNfdGlnZXJfY29uZmlnID0geworCS5kZW1vZF9hZGRyZXNzID0gMHgwOCwKKwkuaW52ZXJ0ICAgICAgICA9IDEsCisJLmludmVydF9vY2xrICAgPSAwLAorCS54dGFsX2ZyZXEgICAgID0gVERBMTAwNDZfWFRBTF8xNk0sCisJLmFnY19jb25maWcgICAgPSBUREExMDA0Nl9BR0NfVERBODI3WCwKKwkuaWZfZnJlcSAgICAgICA9IFREQTEwMDQ2X0ZSRVFfMDQ1LAorCS5wbGxfaW5pdCAgICAgID0gcGhpbGlwc190aWdlcl9kdmJfbW9kZSwKKwkucGxsX3NldCAgICAgICA9IHBoaWxpcHNfdGlnZXJfcGxsX3NldCwKKwkucGxsX3NsZWVwICAgICA9IHBoaWxpcHNfdGlnZXJfYW5hbG9nX21vZGUsCisJLnJlcXVlc3RfZmlybXdhcmUgPSBOVUxMLAorfTsKKworI2VuZGlmCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWZkZWYgSEFWRV9OWFQyMDBYCitzdGF0aWMgc3RydWN0IG54dDIwMHhfY29uZmlnIGF2ZXJ0dmhkYTE4MCA9IHsKKwkuZGVtb2RfYWRkcmVzcyAgICA9IDB4MGEsCisJLnBsbF9hZGRyZXNzICAgICAgPSAweDYxLAorCS5wbGxfZGVzYyAgICAgICAgID0gJmR2Yl9wbGxfdGRodTIsCit9OwogI2VuZGlmCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtNTU4LDcgKzg1Myw3IEBACiAJCQkJCQkgICAgJmRldi0+aTJjX2FkYXApOwogCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfUEhJTElQU19UT1VHSDoKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSB0ZGExMDA0Nl9hdHRhY2goJnBoaWxpcHNfdHUxMjE2X2NvbmZpZywKKwkJZGV2LT5kdmIuZnJvbnRlbmQgPSB0ZGExMDA0Nl9hdHRhY2goJnBoaWxpcHNfdHUxMjE2XzYwX2NvbmZpZywKIAkJCQkJCSAgICAmZGV2LT5pMmNfYWRhcCk7CiAJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9GTFlEVkJURFVPOgpAQCAtNTY5LDYgKzg2NCwzMSBAQAogCQlkZXYtPmR2Yi5mcm9udGVuZCA9IHRkYTEwMDQ2X2F0dGFjaCgmdGRhODI3eF9saWZldmlld19jb25maWcsCiAJCQkJCQkgICAgJmRldi0+aTJjX2FkYXApOwogCQlicmVhazsKKwljYXNlIFNBQTcxMzRfQk9BUkRfUEhJTElQU19FVVJPUEE6CisJCWRldi0+ZHZiLmZyb250ZW5kID0gdGRhMTAwNDZfYXR0YWNoKCZwaGlsaXBzX2V1cm9wYV9jb25maWcsCisJCQkJCQkgICAgJmRldi0+aTJjX2FkYXApOworCQlicmVhazsKKwljYXNlIFNBQTcxMzRfQk9BUkRfVklERU9NQVRFX0RWQlRfMzAwOgorCQlkZXYtPmR2Yi5mcm9udGVuZCA9IHRkYTEwMDQ2X2F0dGFjaCgmcGhpbGlwc19ldXJvcGFfY29uZmlnLAorCQkJCQkJICAgICZkZXYtPmkyY19hZGFwKTsKKwkJYnJlYWs7CisJY2FzZSBTQUE3MTM0X0JPQVJEX1ZJREVPTUFURV9EVkJUXzIwMDoKKwkJZGV2LT5kdmIuZnJvbnRlbmQgPSB0ZGExMDA0Nl9hdHRhY2goJnBoaWxpcHNfdHUxMjE2XzYxX2NvbmZpZywKKwkJCQkJCSAgICAmZGV2LT5pMmNfYWRhcCk7CisJCWJyZWFrOworCWNhc2UgU0FBNzEzNF9CT0FSRF9QSElMSVBTX1RJR0VSOgorCQlkZXYtPmR2Yi5mcm9udGVuZCA9IHRkYTEwMDQ2X2F0dGFjaCgmcGhpbGlwc190aWdlcl9jb25maWcsCisJCQkJCQkgICAgJmRldi0+aTJjX2FkYXApOworCQlicmVhazsKKwljYXNlIFNBQTcxMzRfQk9BUkRfQVNVU1RlS19QNzEzMV9EVUFMOgorCQlkZXYtPmR2Yi5mcm9udGVuZCA9IHRkYTEwMDQ2X2F0dGFjaCgmcGhpbGlwc190aWdlcl9jb25maWcsCisJCQkJCQkgICAgJmRldi0+aTJjX2FkYXApOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIEhBVkVfTlhUMjAwWAorCWNhc2UgU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfQVZFUlRWSERfQTE4MDoKKwkJZGV2LT5kdmIuZnJvbnRlbmQgPSBueHQyMDB4X2F0dGFjaCgmYXZlcnR2aGRhMTgwLCAmZGV2LT5pMmNfYWRhcCk7CisJCWJyZWFrOwogI2VuZGlmCiAJZGVmYXVsdDoKIAkJcHJpbnRrKCIlczogSHVoPyB1bmtub3duIERWQiBjYXJkP1xuIixkZXYtPm5hbWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtZW1wcmVzcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtZW1wcmVzcy5jCmluZGV4IDc3YjYyN2UuLmU5ZWM2OWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWVtcHJlc3MuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1lbXByZXNzLmMKQEAgLTU1LDcgKzU1LDcgQEAKIAogCXNhYV93cml0ZWIoU0FBNzEzNF9TUEVDSUFMX01PREUsIDB4MDApOwogCW1zbGVlcCgxMCk7Ci0gICAJc2FhX3dyaXRlYihTQUE3MTM0X1NQRUNJQUxfTU9ERSwgMHgwMSk7CisJc2FhX3dyaXRlYihTQUE3MTM0X1NQRUNJQUxfTU9ERSwgMHgwMSk7CiAJbXNsZWVwKDEwMCk7CiAJZGV2LT5lbXByZXNzX3N0YXJ0ZWQgPSAwOwogfQpAQCAtNjUsNyArNjUsNyBAQAogCXRzX3Jlc2V0X2VuY29kZXIoZGV2KTsKIAlzYWE3MTM0X2kyY19jYWxsX2NsaWVudHMoZGV2LCBWSURJT0NfU19NUEVHQ09NUCwgTlVMTCk7CiAJZGV2LT5lbXByZXNzX3N0YXJ0ZWQgPSAxOwotIAlyZXR1cm4gMDsKKwlyZXR1cm4gMDsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0xNjksNyArMTY5LDcgQEAKIAkJc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqY2FwID0gYXJnOwogCiAJCW1lbXNldChjYXAsMCxzaXplb2YoKmNhcCkpOwotICAgICAgICAgICAgICAgIHN0cmNweShjYXAtPmRyaXZlciwgInNhYTcxMzQiKTsKKwkJc3RyY3B5KGNhcC0+ZHJpdmVyLCAic2FhNzEzNCIpOwogCQlzdHJsY3B5KGNhcC0+Y2FyZCwgc2FhNzEzNF9ib2FyZHNbZGV2LT5ib2FyZF0ubmFtZSwKIAkJCXNpemVvZihjYXAtPmNhcmQpKTsKIAkJc3ByaW50ZihjYXAtPmJ1c19pbmZvLCJQQ0k6JXMiLHBjaV9uYW1lKGRldi0+cGNpKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1pMmMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWkyYy5jCmluZGV4IDcxMWFhOGUuLjc1NzUwNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWkyYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWkyYy5jCkBAIC0yMzksNyArMjM5LDcgQEAKIAl1bnNpZ25lZCBjaGFyIGRhdGE7CiAJaW50IGFkZHIscmMsaSxieXRlOwogCi0gIAlzdGF0dXMgPSBpMmNfZ2V0X3N0YXR1cyhkZXYpOworCXN0YXR1cyA9IGkyY19nZXRfc3RhdHVzKGRldik7CiAJaWYgKCFpMmNfaXNfaWRsZShzdGF0dXMpKQogCQlpZiAoIWkyY19yZXNldChkZXYpKQogCQkJcmV0dXJuIC1FSU87CkBAIC0yOTYsNyArMjk2LDcgQEAKIAlyYyA9IC1FSU87CiAJaWYgKCFpMmNfaXNfYnVzeV93YWl0KGRldikpCiAJCWdvdG8gZXJyOwotICAJc3RhdHVzID0gaTJjX2dldF9zdGF0dXMoZGV2KTsKKwlzdGF0dXMgPSBpMmNfZ2V0X3N0YXR1cyhkZXYpOwogCWlmIChpMmNfaXNfZXJyb3Ioc3RhdHVzKSkKIAkJZ290byBlcnI7CiAJLyogZW5zdXJlIHRoYXQgdGhlIGJ1cyBpcyBpZGxlIGZvciBhdCBsZWFzdCBvbmUgYml0IHNsb3QgKi8KQEAgLTMzNSw2ICszMzUsMjAgQEAKIAlkMXByaW50ayggIiVzIGkyYyBhdHRhY2ggW2FkZHI9MHgleCxjbGllbnQ9JXNdXG4iLAogCQkgY2xpZW50LT5kcml2ZXItPm5hbWUsIGNsaWVudC0+YWRkciwgY2xpZW50LT5uYW1lKTsKIAorCS8qIEFtIEkgYW4gaTJjIHJlbW90ZSBjb250cm9sPyAqLworCisJc3dpdGNoIChjbGllbnQtPmFkZHIpIHsKKwkJY2FzZSAweDdhOgorCQljYXNlIDB4NDc6CisJCXsKKwkJCXN0cnVjdCBJUl9pMmMgKmlyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJCQlkMXByaW50aygiJXMgaTJjIElSIGRldGVjdGVkICglcykuXG4iLAorCQkJCSBjbGllbnQtPmRyaXZlci0+bmFtZSxpci0+cGh5cyk7CisJCQlzYWE3MTM0X3NldF9pMmNfaXIoZGV2LGlyKTsKKwkJCWJyZWFrOworCQl9CisJfQorCiAJaWYgKCFjbGllbnQtPmRyaXZlci0+Y29tbWFuZCkKIAkJcmV0dXJuIDA7CiAKQEAgLTM0OCwxMiArMzYyLDEyIEBACiAKIAkJCWNsaWVudC0+ZHJpdmVyLT5jb21tYW5kKGNsaWVudCwgVFVORVJfU0VUX1RZUEVfQUREUiwgJnR1bl9zZXR1cCk7CiAJCX0KLSAgICAgICAgfQorCX0KIAogCWlmICh0dW5lciAhPSBVTlNFVCkgewogCi0JICAgICAgICB0dW5fc2V0dXAudHlwZSA9IHR1bmVyOwotCSAgICAgICAgdHVuX3NldHVwLmFkZHIgPSBzYWE3MTM0X2JvYXJkc1tkZXYtPmJvYXJkXS50dW5lcl9hZGRyOworCQl0dW5fc2V0dXAudHlwZSA9IHR1bmVyOworCQl0dW5fc2V0dXAuYWRkciA9IHNhYTcxMzRfYm9hcmRzW2Rldi0+Ym9hcmRdLnR1bmVyX2FkZHI7CiAKIAkJaWYgKCh0dW5fc2V0dXAuYWRkciA9PSBBRERSX1VOU0VUKXx8KHR1bl9zZXR1cC5hZGRyID09IGNsaWVudC0+YWRkcikpIHsKIApAQCAtMzYxLDExICszNzUsMTEgQEAKIAogCQkJY2xpZW50LT5kcml2ZXItPmNvbW1hbmQoY2xpZW50LFRVTkVSX1NFVF9UWVBFX0FERFIsICZ0dW5fc2V0dXApOwogCQl9Ci0gICAgICAgIH0KKwl9CiAKIAljbGllbnQtPmRyaXZlci0+Y29tbWFuZChjbGllbnQsIFREQTk4ODdfU0VUX0NPTkZJRywgJmNvbmYpOwogCi0gICAgICAgIHJldHVybiAwOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3RydWN0IGkyY19hbGdvcml0aG0gc2FhNzEzNF9hbGdvID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtaW5wdXQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWlucHV0LmMKaW5kZXggMjQyY2IyMy4uMzI5YWNjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtaW5wdXQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1pbnB1dC5jCkBAIC0zOSw2ICszOSw4IEBACiAKICNkZWZpbmUgZHByaW50ayhmbXQsIGFyZy4uLikJaWYgKGlyX2RlYnVnKSBcCiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzL2lyOiAiIGZtdCwgZGV2LT5uYW1lICwgIyMgYXJnKQorI2RlZmluZSBpMmNkcHJpbnRrKGZtdCwgYXJnLi4uKSAgICBpZiAoaXJfZGVidWcpIFwKKwlwcmludGsoS0VSTl9ERUJVRyAiJXMvaXI6ICIgZm10LCBpci0+Yy5uYW1lICwgIyMgYXJnKQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKQEAgLTExNCwyNCArMTE2LDI0IEBACiAvKiBBbGZvbnMgR2VzZXIgPGEuZ2VzZXJAY294Lm5ldD4KICAqIHVwZGF0ZXMgZnJvbSBKb2IgRC4gUi4gQm9yZ2VzIDxqb2JkcmJAaWcuY29tLmJyPiAqLwogc3RhdGljIElSX0tFWVRBQl9UWVBFIGV6dHZfY29kZXNbSVJfS0VZVEFCX1NJWkVdID0gewotICAgICAgICBbIDE4IF0gPSBLRVlfUE9XRVIsCi0gICAgICAgIFsgIDEgXSA9IEtFWV9UViwgICAgICAgICAgICAgLy8gRFZSCi0gICAgICAgIFsgMjEgXSA9IEtFWV9EVkQsICAgICAgICAgICAgLy8gRFZECi0gICAgICAgIFsgMjMgXSA9IEtFWV9BVURJTywgICAgICAgICAgLy8gbXVzaWMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEVlIgbW9kZSAvIERWRCBtb2RlIC8gbXVzaWMgbW9kZQorCVsgMTggXSA9IEtFWV9QT1dFUiwKKwlbICAxIF0gPSBLRVlfVFYsICAgICAgICAgICAgIC8vIERWUgorCVsgMjEgXSA9IEtFWV9EVkQsICAgICAgICAgICAgLy8gRFZECisJWyAyMyBdID0gS0VZX0FVRElPLCAgICAgICAgICAvLyBtdXNpYworCQkJCSAgICAgLy8gRFZSIG1vZGUgLyBEVkQgbW9kZSAvIG11c2ljIG1vZGUKIAotICAgICAgICBbIDI3IF0gPSBLRVlfTVVURSwgICAgICAgICAgIC8vIG11dGUKLSAgICAgICAgWyAgMiBdID0gS0VZX0xBTkdVQUdFLCAgICAgICAvLyBNVFMvU0FQIC8gYXVkaW8gLyBhdXRvc2VlawotICAgICAgICBbIDMwIF0gPSBLRVlfU1VCVElUTEUsICAgICAgIC8vIGNsb3NlZCBjYXB0aW9uaW5nIC8gc3VidGl0bGUgLyBzZWVrCi0gICAgICAgIFsgMjIgXSA9IEtFWV9aT09NLCAgICAgICAgICAgLy8gZnVsbCBzY3JlZW4KLSAgICAgICAgWyAyOCBdID0gS0VZX1ZJREVPLCAgICAgICAgICAvLyB2aWRlbyBzb3VyY2UgLyBlamVjdCAvIGRlbGFsbAotICAgICAgICBbIDI5IF0gPSBLRVlfUkVTVEFSVCwgICAgICAgIC8vIHBsYXliYWNrIC8gYW5nbGUgLyBkZWwKLSAgICAgICAgWyA0NyBdID0gS0VZX1NFQVJDSCwgICAgICAgICAvLyBzY2FuIC8gbWVudSAvIHBsYXlsaXN0Ci0gICAgICAgIFsgNDggXSA9IEtFWV9DSEFOTkVMLCAgICAgICAgLy8gQ0ggc3VyZmluZyAvIGJvb2ttYXJrIC8gbWVtbworCVsgMjcgXSA9IEtFWV9NVVRFLCAgICAgICAgICAgLy8gbXV0ZQorCVsgIDIgXSA9IEtFWV9MQU5HVUFHRSwgICAgICAgLy8gTVRTL1NBUCAvIGF1ZGlvIC8gYXV0b3NlZWsKKwlbIDMwIF0gPSBLRVlfU1VCVElUTEUsICAgICAgIC8vIGNsb3NlZCBjYXB0aW9uaW5nIC8gc3VidGl0bGUgLyBzZWVrCisJWyAyMiBdID0gS0VZX1pPT00sICAgICAgICAgICAvLyBmdWxsIHNjcmVlbgorCVsgMjggXSA9IEtFWV9WSURFTywgICAgICAgICAgLy8gdmlkZW8gc291cmNlIC8gZWplY3QgLyBkZWxhbGwKKwlbIDI5IF0gPSBLRVlfUkVTVEFSVCwgICAgICAgIC8vIHBsYXliYWNrIC8gYW5nbGUgLyBkZWwKKwlbIDQ3IF0gPSBLRVlfU0VBUkNILCAgICAgICAgIC8vIHNjYW4gLyBtZW51IC8gcGxheWxpc3QKKwlbIDQ4IF0gPSBLRVlfQ0hBTk5FTCwgICAgICAgIC8vIENIIHN1cmZpbmcgLyBib29rbWFyayAvIG1lbW8KIAotICAgICAgICBbIDQ5IF0gPSBLRVlfSEVMUCwgICAgICAgICAgIC8vIGhlbHAKLSAgICAgICAgWyA1MCBdID0gS0VZX01PREUsICAgICAgICAgICAvLyBudW0vbWVtbwotICAgICAgICBbIDUxIF0gPSBLRVlfRVNDLCAgICAgICAgICAgIC8vIGNhbmNlbAorCVsgNDkgXSA9IEtFWV9IRUxQLCAgICAgICAgICAgLy8gaGVscAorCVsgNTAgXSA9IEtFWV9NT0RFLCAgICAgICAgICAgLy8gbnVtL21lbW8KKwlbIDUxIF0gPSBLRVlfRVNDLCAgICAgICAgICAgIC8vIGNhbmNlbAogCiAJWyAxMiBdID0gS0VZX1VQLCAgICAgICAgICAgICAvLyB1cAogCVsgMTYgXSA9IEtFWV9ET1dOLCAgICAgICAgICAgLy8gZG93bgpAQCAtMTQ4LDI0ICsxNTAsMjQgQEAKIAlbIDQ1IF0gPSBLRVlfUExBWSwgICAgICAgICAgIC8vIHBsYXkKIAlbIDQ2IF0gPSBLRVlfU0hVRkZMRSwgICAgICAgIC8vIHNuYXBzaG90IC8gc2h1ZmZsZQogCi0gICAgICAgIFsgIDAgXSA9IEtFWV9LUDAsCi0gICAgICAgIFsgIDUgXSA9IEtFWV9LUDEsCi0gICAgICAgIFsgIDYgXSA9IEtFWV9LUDIsCi0gICAgICAgIFsgIDcgXSA9IEtFWV9LUDMsCi0gICAgICAgIFsgIDkgXSA9IEtFWV9LUDQsCi0gICAgICAgIFsgMTAgXSA9IEtFWV9LUDUsCi0gICAgICAgIFsgMTEgXSA9IEtFWV9LUDYsCi0gICAgICAgIFsgMTMgXSA9IEtFWV9LUDcsCi0gICAgICAgIFsgMTQgXSA9IEtFWV9LUDgsCi0gICAgICAgIFsgMTUgXSA9IEtFWV9LUDksCisJWyAgMCBdID0gS0VZX0tQMCwKKwlbICA1IF0gPSBLRVlfS1AxLAorCVsgIDYgXSA9IEtFWV9LUDIsCisJWyAgNyBdID0gS0VZX0tQMywKKwlbICA5IF0gPSBLRVlfS1A0LAorCVsgMTAgXSA9IEtFWV9LUDUsCisJWyAxMSBdID0gS0VZX0tQNiwKKwlbIDEzIF0gPSBLRVlfS1A3LAorCVsgMTQgXSA9IEtFWV9LUDgsCisJWyAxNSBdID0gS0VZX0tQOSwKIAotICAgICAgICBbIDQyIF0gPSBLRVlfVk9MVU1FVVAsCi0gICAgICAgIFsgMTcgXSA9IEtFWV9WT0xVTUVET1dOLAotICAgICAgICBbIDI0IF0gPSBLRVlfQ0hBTk5FTFVQLCAgICAgIC8vIENILnRyYWNraW5nIHVwCi0gICAgICAgIFsgMjUgXSA9IEtFWV9DSEFOTkVMRE9XTiwgICAgLy8gQ0gudHJhY2tpbmcgZG93bgorCVsgNDIgXSA9IEtFWV9WT0xVTUVVUCwKKwlbIDE3IF0gPSBLRVlfVk9MVU1FRE9XTiwKKwlbIDI0IF0gPSBLRVlfQ0hBTk5FTFVQLCAgICAgIC8vIENILnRyYWNraW5nIHVwCisJWyAyNSBdID0gS0VZX0NIQU5ORUxET1dOLCAgICAvLyBDSC50cmFja2luZyBkb3duCiAKLSAgICAgICAgWyAxOSBdID0gS0VZX0tQRU5URVIsICAgICAgICAvLyBlbnRlcgotICAgICAgICBbIDMzIF0gPSBLRVlfS1BET1QsICAgICAgICAgIC8vIC4gKGRlY2ltYWwgZG90KQorCVsgMTkgXSA9IEtFWV9LUEVOVEVSLCAgICAgICAgLy8gZW50ZXIKKwlbIDMzIF0gPSBLRVlfS1BET1QsICAgICAgICAgIC8vIC4gKGRlY2ltYWwgZG90KQogfTsKIAogc3RhdGljIElSX0tFWVRBQl9UWVBFIGF2YWNzc21hcnRfY29kZXNbSVJfS0VZVEFCX1NJWkVdID0gewpAQCAtNDAxLDcgKzQwMywxODMgQEAKIAogCS8vIDB4MWQgdW51c2VkID8KIH07Ci0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKworLyogTWlrZSBCYWlrb3YgPG1pa2VAYmFpa292LmNvbT4gKi8KK3N0YXRpYyBJUl9LRVlUQUJfVFlQRSBnb3R2aWV3NzEzNV9jb2Rlc1tJUl9LRVlUQUJfU0laRV0gPSB7CisKKwlbIDMzIF0gPSBLRVlfUE9XRVIsCisJWyAxMDVdID0gS0VZX1RWLAorCVsgNTEgXSA9IEtFWV9LUDAsCisJWyA4MSBdID0gS0VZX0tQMSwKKwlbIDQ5IF0gPSBLRVlfS1AyLAorCVsgMTEzXSA9IEtFWV9LUDMsCisJWyA1OSBdID0gS0VZX0tQNCwKKwlbIDg4IF0gPSBLRVlfS1A1LAorCVsgNjUgXSA9IEtFWV9LUDYsCisJWyA3MiBdID0gS0VZX0tQNywKKwlbIDQ4IF0gPSBLRVlfS1A4LAorCVsgODMgXSA9IEtFWV9LUDksCisJWyAxMTVdID0gS0VZX0FHQUlOLCAvKiBMT09QICovCisJWyAxMCBdID0gS0VZX0FVRElPLAorCVsgOTcgXSA9IEtFWV9QUklOVCwgLyogUFJFVklFVyAqLworCVsgMTIyXSA9IEtFWV9WSURFTywKKwlbIDMyIF0gPSBLRVlfQ0hBTk5FTFVQLAorCVsgNjQgXSA9IEtFWV9DSEFOTkVMRE9XTiwKKwlbIDI0IF0gPSBLRVlfVk9MVU1FRE9XTiwKKwlbIDgwIF0gPSBLRVlfVk9MVU1FVVAsCisJWyAxNiBdID0gS0VZX01VVEUsCisJWyA3NCBdID0gS0VZX1NFQVJDSCwKKwlbIDEyM10gPSBLRVlfU0hVRkZMRSwgLyogU05BUFNIT1QgKi8KKwlbIDM0IF0gPSBLRVlfUkVDT1JELAorCVsgOTggXSA9IEtFWV9TVE9QLAorCVsgMTIwXSA9IEtFWV9QTEFZLAorCVsgNTcgXSA9IEtFWV9SRVdJTkQsCisJWyA4OSBdID0gS0VZX1BBVVNFLAorCVsgMjUgXSA9IEtFWV9GT1JXQVJELAorCVsgIDkgXSA9IEtFWV9aT09NLAorCisJWyA4MiBdID0gS0VZX0YyMSwgLyogTElWRSBUSU1FU0hJRlQgKi8KKwlbIDI2IF0gPSBLRVlfRjIyLCAvKiBNSU4gVElNRVNISUZUICovCisJWyA1OCBdID0gS0VZX0YyMywgLyogVElNRVNISUZUICovCisJWyAxMTJdID0gS0VZX0YyNCwgLyogTk9STUFMIFRJTUVTSElGVCAqLworfTsKKworc3RhdGljIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX3B1cnBsZXR2W0lSX0tFWVRBQl9TSVpFXSA9IHsKKwlbIDB4MyAgXSA9IEtFWV9QT1dFUiwKKwlbIDB4NmYgXSA9IEtFWV9NVVRFLAorCVsgMHgxMCBdID0gS0VZX0JBQ0tTUEFDRSwgICAgICAgLyogUmVjYWxsICovCisKKwlbIDB4MTEgXSA9IEtFWV9LUDAsCisJWyAweDQgIF0gPSBLRVlfS1AxLAorCVsgMHg1ICBdID0gS0VZX0tQMiwKKwlbIDB4NiAgXSA9IEtFWV9LUDMsCisJWyAweDggIF0gPSBLRVlfS1A0LAorCVsgMHg5ICBdID0gS0VZX0tQNSwKKwlbIDB4YSAgXSA9IEtFWV9LUDYsCisJWyAweGMgIF0gPSBLRVlfS1A3LAorCVsgMHhkICBdID0gS0VZX0tQOCwKKwlbIDB4ZSAgXSA9IEtFWV9LUDksCisJWyAweDEyIF0gPSBLRVlfS1BET1QsICAgICAgICAgICAvKiAxMDArICovCisKKwlbIDB4NyAgXSA9IEtFWV9WT0xVTUVVUCwKKwlbIDB4YiAgXSA9IEtFWV9WT0xVTUVET1dOLAorCVsgMHgxYSBdID0gS0VZX0tQUExVUywKKwlbIDB4MTggXSA9IEtFWV9LUE1JTlVTLAorCVsgMHgxNSBdID0gS0VZX1VQLAorCVsgMHgxZCBdID0gS0VZX0RPV04sCisJWyAweGYgIF0gPSBLRVlfQ0hBTk5FTFVQLAorCVsgMHgxMyBdID0gS0VZX0NIQU5ORUxET1dOLAorCVsgMHg0OCBdID0gS0VZX1pPT00sCisKKwlbIDB4MWIgXSA9IEtFWV9WSURFTywgICAgICAgICAgIC8qIFZpZGVvIHNvdXJjZSAqLworCVsgMHg0OSBdID0gS0VZX0xBTkdVQUdFLCAgICAgICAgLyogTVRTIFNlbGVjdCAqLworCVsgMHgxOSBdID0gS0VZX1NFQVJDSCwgICAgICAgICAgLyogQXV0byBTY2FuICovCisKKwlbIDB4NGIgXSA9IEtFWV9SRUNPUkQsCisJWyAweDQ2IF0gPSBLRVlfUExBWSwKKwlbIDB4NDUgXSA9IEtFWV9QQVVTRSwgICAgICAgICAgIC8qIFBhdXNlICovCisJWyAweDQ0IF0gPSBLRVlfU1RPUCwKKwlbIDB4NDAgXSA9IEtFWV9GT1JXQVJELCAgICAgICAgIC8qIEZvcndhcmQgPyAqLworCVsgMHg0MiBdID0gS0VZX1JFV0lORCwgICAgICAgICAgLyogQmFja3dhcmQgPyAqLworCit9OworCitzdGF0aWMgSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfcGlubmFjbGVbSVJfS0VZVEFCX1NJWkVdID0geworCVsgMHg1OSBdID0gS0VZX01VVEUsCisJWyAweDRhIF0gPSBLRVlfUE9XRVIsCisKKwlbIDB4MTggXSA9IEtFWV9URVhULAorCVsgMHgyNiBdID0gS0VZX1RWLAorCVsgMHgzZCBdID0gS0VZX1BSSU5ULAorCisJWyAweDQ4IF0gPSBLRVlfUkVELAorCVsgMHgwNCBdID0gS0VZX0dSRUVOLAorCVsgMHgxMSBdID0gS0VZX1lFTExPVywKKwlbIDB4MDAgXSA9IEtFWV9CTFVFLAorCisJWyAweDJkIF0gPSBLRVlfVk9MVU1FVVAsCisJWyAweDFlIF0gPSBLRVlfVk9MVU1FRE9XTiwKKworCVsgMHg0OSBdID0gS0VZX01FTlUsCisKKwlbIDB4MTYgXSA9IEtFWV9DSEFOTkVMVVAsCisJWyAweDE3IF0gPSBLRVlfQ0hBTk5FTERPV04sCisKKwlbIDB4MjAgXSA9IEtFWV9VUCwKKwlbIDB4MjEgXSA9IEtFWV9ET1dOLAorCVsgMHgyMiBdID0gS0VZX0xFRlQsCisJWyAweDIzIF0gPSBLRVlfUklHSFQsCisJWyAweDBkIF0gPSBLRVlfU0VMRUNULAorCisKKworCVsgMHgwOCBdID0gS0VZX0JBQ0ssCisJWyAweDA3IF0gPSBLRVlfUkVGUkVTSCwKKworCVsgMHgyZiBdID0gS0VZX1pPT00sCisJWyAweDI5IF0gPSBLRVlfUkVDT1JELAorCisJWyAweDRiIF0gPSBLRVlfUEFVU0UsCisJWyAweDRkIF0gPSBLRVlfUkVXSU5ELAorCVsgMHgyZSBdID0gS0VZX1BMQVksCisJWyAweDRlIF0gPSBLRVlfRk9SV0FSRCwKKwlbIDB4NTMgXSA9IEtFWV9QUkVWSU9VUywKKwlbIDB4NGMgXSA9IEtFWV9TVE9QLAorCVsgMHg1NCBdID0gS0VZX05FWFQsCisKKwlbIDB4NjkgXSA9IEtFWV9LUDAsCisJWyAweDZhIF0gPSBLRVlfS1AxLAorCVsgMHg2YiBdID0gS0VZX0tQMiwKKwlbIDB4NmMgXSA9IEtFWV9LUDMsCisJWyAweDZkIF0gPSBLRVlfS1A0LAorCVsgMHg2ZSBdID0gS0VZX0tQNSwKKwlbIDB4NmYgXSA9IEtFWV9LUDYsCisJWyAweDcwIF0gPSBLRVlfS1A3LAorCVsgMHg3MSBdID0gS0VZX0tQOCwKKwlbIDB4NzIgXSA9IEtFWV9LUDksCisKKwlbIDB4NzQgXSA9IEtFWV9DSEFOTkVMLAorCVsgMHgwYSBdID0gS0VZX0JBQ0tTUEFDRSwKK307CisKKy8qIE1hcHBpbmcgZm9yIHRoZSAyOCBrZXkgcmVtb3RlIGNvbnRyb2wgYXMgc2VlbiBhdAorICAgaHR0cDovL3d3dy5zZWRuYWNvbXB1dGVyLmNvbS9waG90by9jYXJkYnVzLXR2LmpwZworICAgUGF2ZWwgTWloYXlsb3YgPGJpbkBiYXNoLmluZm8+ICovCitzdGF0aWMgSVJfS0VZVEFCX1RZUEUgcGN0dl9zZWRuYV9jb2Rlc1tJUl9LRVlUQUJfU0laRV0gPSB7CisJWyAgICAwIF0gPSBLRVlfS1AwLAorCVsgICAgMSBdID0gS0VZX0tQMSwKKwlbICAgIDIgXSA9IEtFWV9LUDIsCisJWyAgICAzIF0gPSBLRVlfS1AzLAorCVsgICAgNCBdID0gS0VZX0tQNCwKKwlbICAgIDUgXSA9IEtFWV9LUDUsCisJWyAgICA2IF0gPSBLRVlfS1A2LAorCVsgICAgNyBdID0gS0VZX0tQNywKKwlbICAgIDggXSA9IEtFWV9LUDgsCisJWyAgICA5IF0gPSBLRVlfS1A5LAorCisJWyAweDBhIF0gPSBLRVlfQUdBSU4sICAgICAgICAgIC8qIFJlY2FsbCAqLworCVsgMHgwYiBdID0gS0VZX0NIQU5ORUxVUCwKKwlbIDB4MGMgXSA9IEtFWV9WT0xVTUVVUCwKKwlbIDB4MGQgXSA9IEtFWV9NT0RFLCAgICAgICAgICAgLyogU3RlcmVvICovCisJWyAweDBlIF0gPSBLRVlfU1RPUCwKKwlbIDB4MGYgXSA9IEtFWV9QUkVWSU9VU1NPTkcsCisJWyAweDEwIF0gPSBLRVlfWk9PTSwKKwlbIDB4MTEgXSA9IEtFWV9UVU5FUiwgICAgICAgICAgLyogU291cmNlICovCisJWyAweDEyIF0gPSBLRVlfUE9XRVIsCisJWyAweDEzIF0gPSBLRVlfTVVURSwKKwlbIDB4MTUgXSA9IEtFWV9DSEFOTkVMRE9XTiwKKwlbIDB4MTggXSA9IEtFWV9WT0xVTUVET1dOLAorCVsgMHgxOSBdID0gS0VZX1NIVUZGTEUsICAgICAgICAvKiBTbmFwc2hvdCAqLworCVsgMHgxYSBdID0gS0VZX05FWFRTT05HLAorCVsgMHgxYiBdID0gS0VZX1RFWFQsICAgICAgICAgICAvKiBUaW1lIFNoaWZ0ICovCisJWyAweDFjIF0gPSBLRVlfUkFESU8sICAgICAgICAgIC8qIEZNIFJhZGlvICovCisJWyAweDFkIF0gPSBLRVlfUkVDT1JELAorCVsgMHgxZSBdID0gS0VZX1BBVVNFLAorfTsKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLSBHUElPIGdlbmVyaWMga2V5Y29kZSBidWlsZGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBpbnQgYnVpbGRfa2V5KHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2KQogewpAQCAtNDEzLDEzICs1OTEsMTMgQEAKIAlzYWFfc2V0YihTQUE3MTM0X0dQSU9fR1BNT0RFMyxTQUE3MTM0X0dQSU9fR1BSRVNDQU4pOwogCiAJZ3BpbyA9IHNhYV9yZWFkbChTQUE3MTM0X0dQSU9fR1BTVEFUVVMwID4+IDIpOwotICAgICAgICBpZiAoaXItPnBvbGxpbmcpIHsKLSAgICAgICAgICAgICAgICBpZiAoaXItPmxhc3RfZ3BpbyA9PSBncGlvKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgaXItPmxhc3RfZ3BpbyA9IGdwaW87Ci0gICAgICAgIH0KKwlpZiAoaXItPnBvbGxpbmcpIHsKKwkJaWYgKGlyLT5sYXN0X2dwaW8gPT0gZ3BpbykKKwkJCXJldHVybiAwOworCQlpci0+bGFzdF9ncGlvID0gZ3BpbzsKKwl9CiAKLSAJZGF0YSA9IGlyX2V4dHJhY3RfYml0cyhncGlvLCBpci0+bWFza19rZXljb2RlKTsKKwlkYXRhID0gaXJfZXh0cmFjdF9iaXRzKGdwaW8sIGlyLT5tYXNrX2tleWNvZGUpOwogCWRwcmludGsoImJ1aWxkX2tleSBncGlvPTB4JXggbWFzaz0weCV4IGRhdGE9JWRcbiIsCiAJCWdwaW8sIGlyLT5tYXNrX2tleWNvZGUsIGRhdGEpOwogCkBAIC00MzIsMTMgKzYxMCw4NyBAQAogCXJldHVybiAwOwogfQogCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ2hpcCBzcGVjaWZpYyBJMkMga2V5IGJ1aWxkZXJzIC0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBpbnQgZ2V0X2tleV9wdXJwbGV0dihzdHJ1Y3QgSVJfaTJjICppciwgdTMyICppcl9rZXksIHUzMiAqaXJfcmF3KQoreworCXVuc2lnbmVkIGNoYXIgYjsKKworCS8qIHBvbGwgSVIgY2hpcCAqLworCWlmICgxICE9IGkyY19tYXN0ZXJfcmVjdigmaXItPmMsJmIsMSkpIHsKKwkJaTJjZHByaW50aygicmVhZCBlcnJvclxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCS8qIG5vIGJ1dHRvbiBwcmVzcyAqLworCWlmIChiPT0wKQorCQlyZXR1cm4gMDsKKworCS8qIHJlcGVhdGluZyAqLworCWlmIChiICYgMHg4MCkKKwkJcmV0dXJuIDE7CisKKwkqaXJfa2V5ID0gYjsKKwkqaXJfcmF3ID0gYjsKKwlyZXR1cm4gMTsKK30KKworLyogVGhlIG5ldyBwaW5uYWNsZSBQQ1RWIHJlbW90ZSAod2l0aCB0aGUgY29sb3JlZCBidXR0b25zKQorICoKKyAqIFJpY2FyZG8gQ2VycXVlaXJhIDx2NGxAY2VycXVlaXJhLm9yZz4KKyAqLworCitzdGF0aWMgaW50IGdldF9rZXlfcGlubmFjbGUoc3RydWN0IElSX2kyYyAqaXIsIHUzMiAqaXJfa2V5LCB1MzIgKmlyX3JhdykKK3sKKwl1bnNpZ25lZCBjaGFyIGJbNF07CisJdW5zaWduZWQgaW50IHN0YXJ0ID0gMCxwYXJpdHkgPSAwLGNvZGUgPSAwOworCisJLyogcG9sbCBJUiBjaGlwICovCisJaWYgKDQgIT0gaTJjX21hc3Rlcl9yZWN2KCZpci0+YyxiLDQpKSB7CisJCWkyY2RwcmludGsoInJlYWQgZXJyb3JcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlmb3IgKHN0YXJ0ID0gMDsgc3RhcnQ8NDsgc3RhcnQrKykgeworCQlpZiAoYltzdGFydF0gPT0gMHg4MCkgeworCQkJY29kZT1iWyhzdGFydCszKSU0XTsKKwkJCXBhcml0eT1iWyhzdGFydCsyKSU0XTsKKwkJfQorCX0KKworCS8qIEVtcHR5IFJlcXVlc3QgKi8KKwlpZiAocGFyaXR5PT0wKQorCQlyZXR1cm4gMDsKKworCS8qIFJlcGVhdGluZy4uLiAqLworCWlmIChpci0+b2xkID09IHBhcml0eSkKKwkJcmV0dXJuIDA7CisKKworCWlyLT5vbGQgPSBwYXJpdHk7CisKKwkvKiBSZWR1Y2UgY29kZSB2YWx1ZSB0byBmaXQgaW5zaWRlIElSX0tFWVRBQl9TSVpFCisJICoKKwkgKiB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgcmVzdWx0cyBpbiA0MiB1bmlxdWUKKwkgKiBjb2RlcyA8IDEyOAorCSAqLworCisJY29kZSAlPSAweDg4OworCisJKmlyX3JhdyA9IGNvZGU7CisJKmlyX2tleSA9IGNvZGU7CisKKwlpMmNkcHJpbnRrKCJQaW5uYWNsZSBQQ1RWIGtleSAlMDJ4XG4iLCBjb2RlKTsKKworCXJldHVybiAxOworfQorCiAKIHZvaWQgc2FhNzEzNF9pbnB1dF9pcnEoc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYpCiB7Ci0gICAgICAgIHN0cnVjdCBzYWE3MTM0X2lyICppciA9IGRldi0+cmVtb3RlOworCXN0cnVjdCBzYWE3MTM0X2lyICppciA9IGRldi0+cmVtb3RlOwogCi0gICAgICAgIGlmICghaXItPnBvbGxpbmcpCisJaWYgKCFpci0+cG9sbGluZykKIAkJYnVpbGRfa2V5KGRldik7CiB9CiAKQEAgLTQ2NCw3ICs3MTYsNyBAQAogCWludCBwb2xsaW5nICAgICAgPSAwOwogCWludCBpcl90eXBlICAgICAgPSBJUl9UWVBFX09USEVSOwogCi0JaWYgKCFkZXYtPmhhc19yZW1vdGUpCisJaWYgKGRldi0+aGFzX3JlbW90ZSAhPSBTQUE3MTM0X1JFTU9URV9HUElPKQogCQlyZXR1cm4gLUVOT0RFVjsKIAlpZiAoZGlzYWJsZV9pcikKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC00NzMsNyArNzI1LDggQEAKIAlzd2l0Y2ggKGRldi0+Ym9hcmQpIHsKIAljYXNlIFNBQTcxMzRfQk9BUkRfRkxZVklERU8yMDAwOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9GTFlWSURFTzMwMDA6Ci0gICAgICAgIGNhc2UgU0FBNzEzNF9CT0FSRF9GTFlUVlBMQVRJTlVNX0ZNOgorCWNhc2UgU0FBNzEzNF9CT0FSRF9GTFlUVlBMQVRJTlVNX0ZNOgorCWNhc2UgU0FBNzEzNF9CT0FSRF9GTFlUVlBMQVRJTlVNX01JTkkyOgogCQlpcl9jb2RlcyAgICAgPSBmbHl2aWRlb19jb2RlczsKIAkJbWFza19rZXljb2RlID0gMHhFQzAwMDAwOwogCQltYXNrX2tleWRvd24gPSAweDAwNDAwMDA7CkBAIC01MTQsMTQgKzc2NywzMyBAQAogCQlzYWFfc2V0YihTQUE3MTM0X0dQSU9fR1BNT0RFMCwgMHg0KTsKIAkJc2FhX3NldGIoU0FBNzEzNF9HUElPX0dQU1RBVFVTMCwgMHg0KTsKIAkJYnJlYWs7CisJY2FzZSBTQUE3MTM0X0JPQVJEX0tXT1JMRF9URVJNSU5BVE9SOgorCQlpcl9jb2RlcyAgICAgPSBhdmFjc3NtYXJ0X2NvZGVzOworCQltYXNrX2tleWNvZGUgPSAweDAwMDAxZjsKKwkJbWFza19rZXl1cCAgID0gMHgwMDAwNjA7CisJCXBvbGxpbmcgICAgICA9IDUwOyAvLyBtcworCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfTUFOTElfTVRWMDAxOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9NQU5MSV9NVFYwMDI6CisJY2FzZSBTQUE3MTM0X0JPQVJEX0JFSE9MRF80MDlGTToKIAkJaXJfY29kZXMgICAgID0gbWFubGlfY29kZXM7CiAJCW1hc2tfa2V5Y29kZSA9IDB4MDAxZjAwOwogCQltYXNrX2tleXVwICAgPSAweDAwNDAwMDsKLQkJbWFza19rZXlkb3duID0gMHgwMDIwMDA7CiAJCXBvbGxpbmcgICAgICA9IDUwOyAvLyBtcwogCQlicmVhazsKKwljYXNlIFNBQTcxMzRfQk9BUkRfU0VETkFfUENfVFZfQ0FSREJVUzoKKwkJaXJfY29kZXMgICAgID0gcGN0dl9zZWRuYV9jb2RlczsKKwkJbWFza19rZXljb2RlID0gMHgwMDFmMDA7CisJCW1hc2tfa2V5dXAgICA9IDB4MDA0MDAwOworCQlwb2xsaW5nICAgICAgPSA1MDsgLy8gbXMKKwkJYnJlYWs7CisJY2FzZSBTQUE3MTM0X0JPQVJEX0dPVFZJRVdfNzEzNToKKwkJaXJfY29kZXMgICAgID0gZ290dmlldzcxMzVfY29kZXM7CisJCW1hc2tfa2V5Y29kZSA9IDB4MDAwM0VDOworCQltYXNrX2tleXVwICAgPSAweDAwODAwMDsKKwkJbWFza19rZXlkb3duID0gMHgwMDAwMTA7CisJCXBvbGxpbmcJICAgICA9IDUwOyAvLyBtcworCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfVklERU9NQVRFX1RWX1BWUjoKIAljYXNlIFNBQTcxMzRfQk9BUkRfVklERU9NQVRFX1RWX0dPTERfUExVU0lJOgogCQlpcl9jb2RlcyAgICAgPSB2aWRlb21hdGVfdHZfcHZyX2NvZGVzOwpAQCAtNTI5LDYgKzgwMSwxMiBAQAogCQltYXNrX2tleXVwICAgPSAweDQwMDAwMDsKIAkJcG9sbGluZyAgICAgID0gNTA7IC8vIG1zCiAJCWJyZWFrOworCWNhc2UgU0FBNzEzNF9CT0FSRF9WSURFT01BVEVfRFZCVF8zMDA6CisJY2FzZSBTQUE3MTM0X0JPQVJEX1ZJREVPTUFURV9EVkJUXzIwMDoKKwkJaXJfY29kZXMgICAgID0gdmlkZW9tYXRlX3R2X3B2cl9jb2RlczsKKwkJbWFza19rZXljb2RlID0gMHgwMDNGMDA7CisJCW1hc2tfa2V5dXAgICA9IDB4MDQwMDAwOworCQlicmVhazsKIAl9CiAJaWYgKE5VTEwgPT0gaXJfY29kZXMpIHsKIAkJcHJpbnRrKCIlczogT29wczogSVIgY29uZmlnIGVycm9yIFtjYXJkPSVkXVxuIiwKQEAgLTU0OCw3ICs4MjYsNyBAQAogCWlyLT5tYXNrX2tleWNvZGUgPSBtYXNrX2tleWNvZGU7CiAJaXItPm1hc2tfa2V5ZG93biA9IG1hc2tfa2V5ZG93bjsKIAlpci0+bWFza19rZXl1cCAgID0gbWFza19rZXl1cDsKLSAgICAgICAgaXItPnBvbGxpbmcgICAgICA9IHBvbGxpbmc7CisJaXItPnBvbGxpbmcgICAgICA9IHBvbGxpbmc7CiAKIAkvKiBpbml0IGlucHV0IGRldmljZSAqLwogCXNucHJpbnRmKGlyLT5uYW1lLCBzaXplb2YoaXItPm5hbWUpLCAic2FhNzEzNCBJUiAoJXMpIiwKQEAgLTU5Niw2ICs4NzQsMzEgQEAKIAlkZXYtPnJlbW90ZSA9IE5VTEw7CiB9CiAKK3ZvaWQgc2FhNzEzNF9zZXRfaTJjX2lyKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2LCBzdHJ1Y3QgSVJfaTJjICppcikKK3sKKwlpZiAoZGlzYWJsZV9pcikgeworCQlkcHJpbnRrKCJGb3VuZCBzdXBwb3J0ZWQgaTJjIHJlbW90ZSwgYnV0IElSIGhhcyBiZWVuIGRpc2FibGVkXG4iKTsKKwkJaXItPmdldF9rZXk9TlVMTDsKKwkJcmV0dXJuOworCX0KKworCXN3aXRjaCAoZGV2LT5ib2FyZCkgeworCWNhc2UgU0FBNzEzNF9CT0FSRF9QSU5OQUNMRV9QQ1RWXzExMGk6CisJCXNucHJpbnRmKGlyLT5jLm5hbWUsIHNpemVvZihpci0+Yy5uYW1lKSwgIlBpbm5hY2xlIFBDVFYiKTsKKwkJaXItPmdldF9rZXkgICA9IGdldF9rZXlfcGlubmFjbGU7CisJCWlyLT5pcl9jb2RlcyAgPSBpcl9jb2Rlc19waW5uYWNsZTsKKwkJYnJlYWs7CisJY2FzZSBTQUE3MTM0X0JPQVJEX1VQTU9TVF9QVVJQTEVfVFY6CisJCXNucHJpbnRmKGlyLT5jLm5hbWUsIHNpemVvZihpci0+Yy5uYW1lKSwgIlB1cnBsZSBUViIpOworCQlpci0+Z2V0X2tleSAgID0gZ2V0X2tleV9wdXJwbGV0djsKKwkJaXItPmlyX2NvZGVzICA9IGlyX2NvZGVzX3B1cnBsZXR2OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkcHJpbnRrKCJTaG91bGRuJ3QgZ2V0IGhlcmU6IFVua25vd24gYm9hcmQgJXggZm9yIEkyQyBJUj9cbiIsZGV2LT5ib2FyZCk7CisJCWJyZWFrOworCX0KKworfQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogTG9jYWwgdmFyaWFibGVzOgogICogYy1iYXNpYy1vZmZzZXQ6IDgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LW9zcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtb3NzLmMKaW5kZXggYzIwNjMwYy4uZmQ1M2RmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtb3NzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtb3NzLmMKQEAgLTQ0LDYgKzQ0LDcgQEAKICNkZWZpbmUgZHByaW50ayhmbXQsIGFyZy4uLikJaWYgKG9zc19kZWJ1ZykgXAogCXByaW50ayhLRVJOX0RFQlVHICIlcy9vc3M6ICIgZm10LCBkZXYtPm5hbWUgLCAjIyBhcmcpCiAKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBpbnQgZHNwX2J1ZmZlcl9jb25mKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2LCBpbnQgYmxrc2l6ZSwgaW50IGJsb2NrcykKQEAgLTU4LDEyICs1OSwxMiBAQAogCWlmICgoYmxrc2l6ZSAqIGJsb2NrcykgPiAxMDI0KjEwMjQpCiAJCWJsb2NrcyA9IDEwMjQqMTAyNCAvIGJsa3NpemU7CiAKLQlkZXYtPm9zcy5ibG9ja3MgID0gYmxvY2tzOwotCWRldi0+b3NzLmJsa3NpemUgPSBibGtzaXplOwotCWRldi0+b3NzLmJ1ZnNpemUgPSBibGtzaXplICogYmxvY2tzOworCWRldi0+ZG1hc291bmQuYmxvY2tzICA9IGJsb2NrczsKKwlkZXYtPmRtYXNvdW5kLmJsa3NpemUgPSBibGtzaXplOworCWRldi0+ZG1hc291bmQuYnVmc2l6ZSA9IGJsa3NpemUgKiBibG9ja3M7CiAKIAlkcHJpbnRrKCJidWZmZXIgY29uZmlnOiAlZCBibG9ja3MgLyAlZCBieXRlcywgJWQga0IgdG90YWxcbiIsCi0gCQlibG9ja3MsYmxrc2l6ZSxibGtzaXplICogYmxvY2tzIC8gMTAyNCk7CisJCWJsb2NrcyxibGtzaXplLGJsa3NpemUgKiBibG9ja3MgLyAxMDI0KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzEsMTEgKzcyLDExIEBACiB7CiAJaW50IGVycjsKIAotCWlmICghZGV2LT5vc3MuYnVmc2l6ZSkKKwlpZiAoIWRldi0+ZG1hc291bmQuYnVmc2l6ZSkKIAkJQlVHKCk7Ci0JdmlkZW9idWZfZG1hX2luaXQoJmRldi0+b3NzLmRtYSk7Ci0JZXJyID0gdmlkZW9idWZfZG1hX2luaXRfa2VybmVsKCZkZXYtPm9zcy5kbWEsIFBDSV9ETUFfRlJPTURFVklDRSwKLQkJCQkgICAgICAgKGRldi0+b3NzLmJ1ZnNpemUgKyBQQUdFX1NJWkUpID4+IFBBR0VfU0hJRlQpOworCXZpZGVvYnVmX2RtYV9pbml0KCZkZXYtPmRtYXNvdW5kLmRtYSk7CisJZXJyID0gdmlkZW9idWZfZG1hX2luaXRfa2VybmVsKCZkZXYtPmRtYXNvdW5kLmRtYSwgUENJX0RNQV9GUk9NREVWSUNFLAorCQkJCSAgICAgICAoZGV2LT5kbWFzb3VuZC5idWZzaXplICsgUEFHRV9TSVpFKSA+PiBQQUdFX1NISUZUKTsKIAlpZiAoMCAhPSBlcnIpCiAJCXJldHVybiBlcnI7CiAJcmV0dXJuIDA7CkBAIC04MywyNiArODQsMjYgQEAKIAogc3RhdGljIGludCBkc3BfYnVmZmVyX2ZyZWUoc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYpCiB7Ci0JaWYgKCFkZXYtPm9zcy5ibGtzaXplKQorCWlmICghZGV2LT5kbWFzb3VuZC5ibGtzaXplKQogCQlCVUcoKTsKLQl2aWRlb2J1Zl9kbWFfZnJlZSgmZGV2LT5vc3MuZG1hKTsKLQlkZXYtPm9zcy5ibG9ja3MgID0gMDsKLQlkZXYtPm9zcy5ibGtzaXplID0gMDsKLQlkZXYtPm9zcy5idWZzaXplID0gMDsKKwl2aWRlb2J1Zl9kbWFfZnJlZSgmZGV2LT5kbWFzb3VuZC5kbWEpOworCWRldi0+ZG1hc291bmQuYmxvY2tzICA9IDA7CisJZGV2LT5kbWFzb3VuZC5ibGtzaXplID0gMDsKKwlkZXYtPmRtYXNvdW5kLmJ1ZnNpemUgPSAwOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBkc3BfZG1hX3N0YXJ0KHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2KQogewotCWRldi0+b3NzLmRtYV9ibGsgICAgID0gMDsKLQlkZXYtPm9zcy5kbWFfcnVubmluZyA9IDE7CisJZGV2LT5kbWFzb3VuZC5kbWFfYmxrICAgICA9IDA7CisJZGV2LT5kbWFzb3VuZC5kbWFfcnVubmluZyA9IDE7CiAJc2FhNzEzNF9zZXRfZG1hYml0cyhkZXYpOwogfQogCiBzdGF0aWMgdm9pZCBkc3BfZG1hX3N0b3Aoc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYpCiB7Ci0JZGV2LT5vc3MuZG1hX2JsayAgICAgPSAtMTsKLQlkZXYtPm9zcy5kbWFfcnVubmluZyA9IDA7CisJZGV2LT5kbWFzb3VuZC5kbWFfYmxrICAgICA9IC0xOworCWRldi0+ZG1hc291bmQuZG1hX3J1bm5pbmcgPSAwOwogCXNhYTcxMzRfc2V0X2RtYWJpdHMoZGV2KTsKIH0KIApAQCAtMTEzLDE4ICsxMTQsMTggQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJLyogcHJlcGFyZSBidWZmZXIgKi8KLQlpZiAoMCAhPSAoZXJyID0gdmlkZW9idWZfZG1hX3BjaV9tYXAoZGV2LT5wY2ksJmRldi0+b3NzLmRtYSkpKQorCWlmICgwICE9IChlcnIgPSB2aWRlb2J1Zl9kbWFfcGNpX21hcChkZXYtPnBjaSwmZGV2LT5kbWFzb3VuZC5kbWEpKSkKIAkJcmV0dXJuIGVycjsKLQlpZiAoMCAhPSAoZXJyID0gc2FhNzEzNF9wZ3RhYmxlX2FsbG9jKGRldi0+cGNpLCZkZXYtPm9zcy5wdCkpKQorCWlmICgwICE9IChlcnIgPSBzYWE3MTM0X3BndGFibGVfYWxsb2MoZGV2LT5wY2ksJmRldi0+ZG1hc291bmQucHQpKSkKIAkJZ290byBmYWlsMTsKLQlpZiAoMCAhPSAoZXJyID0gc2FhNzEzNF9wZ3RhYmxlX2J1aWxkKGRldi0+cGNpLCZkZXYtPm9zcy5wdCwKLQkJCQkJICAgICAgZGV2LT5vc3MuZG1hLnNnbGlzdCwKLQkJCQkJICAgICAgZGV2LT5vc3MuZG1hLnNnbGVuLAorCWlmICgwICE9IChlcnIgPSBzYWE3MTM0X3BndGFibGVfYnVpbGQoZGV2LT5wY2ksJmRldi0+ZG1hc291bmQucHQsCisJCQkJCSAgICAgIGRldi0+ZG1hc291bmQuZG1hLnNnbGlzdCwKKwkJCQkJICAgICAgZGV2LT5kbWFzb3VuZC5kbWEuc2dsZW4sCiAJCQkJCSAgICAgIDApKSkKIAkJZ290byBmYWlsMjsKIAogCS8qIHNhbXBsZSBmb3JtYXQgKi8KLQlzd2l0Y2ggKGRldi0+b3NzLmFmbXQpIHsKKwlzd2l0Y2ggKGRldi0+ZG1hc291bmQuYWZtdCkgewogCWNhc2UgQUZNVF9VODoKIAljYXNlIEFGTVRfUzg6ICAgICBmbXQgPSAweDAwOyAgYnJlYWs7CiAJY2FzZSBBRk1UX1UxNl9MRToKQEAgLTEzNiwxNCArMTM3LDE0IEBACiAJCWdvdG8gZmFpbDI7CiAJfQogCi0Jc3dpdGNoIChkZXYtPm9zcy5hZm10KSB7CisJc3dpdGNoIChkZXYtPmRtYXNvdW5kLmFmbXQpIHsKIAljYXNlIEFGTVRfUzg6CiAJY2FzZSBBRk1UX1MxNl9MRToKIAljYXNlIEFGTVRfUzE2X0JFOiBzaWduID0gMTsgYnJlYWs7CiAJZGVmYXVsdDogICAgICAgICAgc2lnbiA9IDA7IGJyZWFrOwogCX0KIAotCXN3aXRjaCAoZGV2LT5vc3MuYWZtdCkgeworCXN3aXRjaCAoZGV2LT5kbWFzb3VuZC5hZm10KSB7CiAJY2FzZSBBRk1UX1UxNl9CRToKIAljYXNlIEFGTVRfUzE2X0JFOiBic3dhcCA9IDE7IGJyZWFrOwogCWRlZmF1bHQ6ICAgICAgICAgIGJzd2FwID0gMDsgYnJlYWs7CkBAIC0xNTEsNTggKzE1Miw1OCBAQAogCiAJc3dpdGNoIChkZXYtPnBjaS0+ZGV2aWNlKSB7CiAJY2FzZSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzNDoKLQkJaWYgKDEgPT0gZGV2LT5vc3MuY2hhbm5lbHMpCisJCWlmICgxID09IGRldi0+ZG1hc291bmQuY2hhbm5lbHMpCiAJCQlmbXQgfD0gKDEgPDwgMyk7Ci0JCWlmICgyID09IGRldi0+b3NzLmNoYW5uZWxzKQorCQlpZiAoMiA9PSBkZXYtPmRtYXNvdW5kLmNoYW5uZWxzKQogCQkJZm10IHw9ICgzIDw8IDMpOwogCQlpZiAoc2lnbikKIAkJCWZtdCB8PSAweDA0OwotCQlmbXQgfD0gKFRWID09IGRldi0+b3NzLmlucHV0KSA/IDB4YzAgOiAweDgwOworCQlmbXQgfD0gKFRWID09IGRldi0+ZG1hc291bmQuaW5wdXQpID8gMHhjMCA6IDB4ODA7CiAKLQkJc2FhX3dyaXRlYihTQUE3MTM0X05VTV9TQU1QTEVTMCwgKChkZXYtPm9zcy5ibGtzaXplIC0gMSkgJiAweDAwMDBmZikpOwotCQlzYWFfd3JpdGViKFNBQTcxMzRfTlVNX1NBTVBMRVMxLCAoKGRldi0+b3NzLmJsa3NpemUgLSAxKSAmIDB4MDBmZjAwKSA+PiAgOCk7Ci0JCXNhYV93cml0ZWIoU0FBNzEzNF9OVU1fU0FNUExFUzIsICgoZGV2LT5vc3MuYmxrc2l6ZSAtIDEpICYgMHhmZjAwMDApID4+IDE2KTsKKwkJc2FhX3dyaXRlYihTQUE3MTM0X05VTV9TQU1QTEVTMCwgKChkZXYtPmRtYXNvdW5kLmJsa3NpemUgLSAxKSAmIDB4MDAwMGZmKSk7CisJCXNhYV93cml0ZWIoU0FBNzEzNF9OVU1fU0FNUExFUzEsICgoZGV2LT5kbWFzb3VuZC5ibGtzaXplIC0gMSkgJiAweDAwZmYwMCkgPj4gIDgpOworCQlzYWFfd3JpdGViKFNBQTcxMzRfTlVNX1NBTVBMRVMyLCAoKGRldi0+ZG1hc291bmQuYmxrc2l6ZSAtIDEpICYgMHhmZjAwMDApID4+IDE2KTsKIAkJc2FhX3dyaXRlYihTQUE3MTM0X0FVRElPX0ZPUk1BVF9DVFJMLCBmbXQpOwogCiAJCWJyZWFrOwogCWNhc2UgUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzM6CiAJY2FzZSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzNToKLQkJaWYgKDEgPT0gZGV2LT5vc3MuY2hhbm5lbHMpCisJCWlmICgxID09IGRldi0+ZG1hc291bmQuY2hhbm5lbHMpCiAJCQlmbXQgfD0gKDEgPDwgNCk7Ci0JCWlmICgyID09IGRldi0+b3NzLmNoYW5uZWxzKQorCQlpZiAoMiA9PSBkZXYtPmRtYXNvdW5kLmNoYW5uZWxzKQogCQkJZm10IHw9ICgyIDw8IDQpOwogCQlpZiAoIXNpZ24pCiAJCQlmbXQgfD0gMHgwNDsKLQkJc2FhX3dyaXRlbCgweDU4OCA+PiAyLCBkZXYtPm9zcy5ibGtzaXplIC00KTsKLQkJc2FhX3dyaXRlbCgweDU4YyA+PiAyLCAweDU0MzIxMCB8IChmbXQgPDwgMjQpKTsKKwkJc2FhX3dyaXRlbChTQUE3MTMzX05VTV9TQU1QTEVTLCBkZXYtPmRtYXNvdW5kLmJsa3NpemUgLTQpOworCQlzYWFfd3JpdGVsKFNBQTcxMzNfQVVESU9fQ0hBTk5FTCwgMHg1NDMyMTAgfCAoZm10IDw8IDI0KSk7CiAJCWJyZWFrOwogCX0KIAlkcHJpbnRrKCJyZWNfc3RhcnQ6IGFmbXQ9JWQgY2g9JWQgID0+ICBmbXQ9MHgleCBzd2FwPSVjXG4iLAotCQlkZXYtPm9zcy5hZm10LCBkZXYtPm9zcy5jaGFubmVscywgZm10LAorCQlkZXYtPmRtYXNvdW5kLmFmbXQsIGRldi0+ZG1hc291bmQuY2hhbm5lbHMsIGZtdCwKIAkJYnN3YXAgPyAnYicgOiAnLScpOwogCiAJLyogZG1hOiBzZXR1cCBjaGFubmVsIDYgKD0gQVVESU8pICovCiAJY29udHJvbCA9IFNBQTcxMzRfUlNfQ09OVFJPTF9CVVJTVF8xNiB8CiAJCVNBQTcxMzRfUlNfQ09OVFJPTF9NRSB8Ci0JCShkZXYtPm9zcy5wdC5kbWEgPj4gMTIpOworCQkoZGV2LT5kbWFzb3VuZC5wdC5kbWEgPj4gMTIpOwogCWlmIChic3dhcCkKIAkJY29udHJvbCB8PSBTQUE3MTM0X1JTX0NPTlRST0xfQlNXQVA7CiAJc2FhX3dyaXRlbChTQUE3MTM0X1JTX0JBMSg2KSwwKTsKLQlzYWFfd3JpdGVsKFNBQTcxMzRfUlNfQkEyKDYpLGRldi0+b3NzLmJsa3NpemUpOworCXNhYV93cml0ZWwoU0FBNzEzNF9SU19CQTIoNiksZGV2LT5kbWFzb3VuZC5ibGtzaXplKTsKIAlzYWFfd3JpdGVsKFNBQTcxMzRfUlNfUElUQ0goNiksMCk7CiAJc2FhX3dyaXRlbChTQUE3MTM0X1JTX0NPTlRST0woNiksY29udHJvbCk7CiAKIAkvKiBzdGFydCBkbWEgKi8KLQlkZXYtPm9zcy5yZWNvcmRpbmdfb24gPSAxOworCWRldi0+ZG1hc291bmQucmVjb3JkaW5nX29uID0gMTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zbG9jayxmbGFncyk7CiAJZHNwX2RtYV9zdGFydChkZXYpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c2xvY2ssZmxhZ3MpOwogCXJldHVybiAwOwogCiAgZmFpbDI6Ci0Jc2FhNzEzNF9wZ3RhYmxlX2ZyZWUoZGV2LT5wY2ksJmRldi0+b3NzLnB0KTsKKwlzYWE3MTM0X3BndGFibGVfZnJlZShkZXYtPnBjaSwmZGV2LT5kbWFzb3VuZC5wdCk7CiAgZmFpbDE6Ci0JdmlkZW9idWZfZG1hX3BjaV91bm1hcChkZXYtPnBjaSwmZGV2LT5vc3MuZG1hKTsKKwl2aWRlb2J1Zl9kbWFfcGNpX3VubWFwKGRldi0+cGNpLCZkZXYtPmRtYXNvdW5kLmRtYSk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMjEwLDE3ICsyMTEsMTcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JZHByaW50aygicmVjX3N0b3AgZG1hX2Jsaz0lZFxuIixkZXYtPm9zcy5kbWFfYmxrKTsKKwlkcHJpbnRrKCJyZWNfc3RvcCBkbWFfYmxrPSVkXG4iLGRldi0+ZG1hc291bmQuZG1hX2Jsayk7CiAKIAkvKiBzdG9wIGRtYSAqLwotCWRldi0+b3NzLnJlY29yZGluZ19vbiA9IDA7CisJZGV2LT5kbWFzb3VuZC5yZWNvcmRpbmdfb24gPSAwOwogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNsb2NrLGZsYWdzKTsKIAlkc3BfZG1hX3N0b3AoZGV2KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNsb2NrLGZsYWdzKTsKIAogCS8qIHVubG9jayBidWZmZXIgKi8KLQlzYWE3MTM0X3BndGFibGVfZnJlZShkZXYtPnBjaSwmZGV2LT5vc3MucHQpOwotCXZpZGVvYnVmX2RtYV9wY2lfdW5tYXAoZGV2LT5wY2ksJmRldi0+b3NzLmRtYSk7CisJc2FhNzEzNF9wZ3RhYmxlX2ZyZWUoZGV2LT5wY2ksJmRldi0+ZG1hc291bmQucHQpOworCXZpZGVvYnVmX2RtYV9wY2lfdW5tYXAoZGV2LT5wY2ksJmRldi0+ZG1hc291bmQuZG1hKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjM1LDM1ICsyMzYsMzUgQEAKIAogCWxpc3RfZm9yX2VhY2gobGlzdCwmc2FhNzEzNF9kZXZsaXN0KSB7CiAJCWggPSBsaXN0X2VudHJ5KGxpc3QsIHN0cnVjdCBzYWE3MTM0X2RldiwgZGV2bGlzdCk7Ci0JCWlmIChoLT5vc3MubWlub3JfZHNwID09IG1pbm9yKQorCQlpZiAoaC0+ZG1hc291bmQubWlub3JfZHNwID09IG1pbm9yKQogCQkJZGV2ID0gaDsKIAl9CiAJaWYgKE5VTEwgPT0gZGV2KQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWRvd24oJmRldi0+b3NzLmxvY2spOworCWRvd24oJmRldi0+ZG1hc291bmQubG9jayk7CiAJZXJyID0gLUVCVVNZOwotCWlmIChkZXYtPm9zcy51c2Vyc19kc3ApCisJaWYgKGRldi0+ZG1hc291bmQudXNlcnNfZHNwKQogCQlnb3RvIGZhaWwxOwotCWRldi0+b3NzLnVzZXJzX2RzcCsrOworCWRldi0+ZG1hc291bmQudXNlcnNfZHNwKys7CiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gZGV2OwogCi0JZGV2LT5vc3MuYWZtdCAgICAgICAgPSBBRk1UX1U4OwotCWRldi0+b3NzLmNoYW5uZWxzICAgID0gMTsKLQlkZXYtPm9zcy5yZWFkX2NvdW50ICA9IDA7Ci0JZGV2LT5vc3MucmVhZF9vZmZzZXQgPSAwOworCWRldi0+ZG1hc291bmQuYWZtdCAgICAgICAgPSBBRk1UX1U4OworCWRldi0+ZG1hc291bmQuY2hhbm5lbHMgICAgPSAxOworCWRldi0+ZG1hc291bmQucmVhZF9jb3VudCAgPSAwOworCWRldi0+ZG1hc291bmQucmVhZF9vZmZzZXQgPSAwOwogCWRzcF9idWZmZXJfY29uZihkZXYsUEFHRV9TSVpFLDY0KTsKIAllcnIgPSBkc3BfYnVmZmVyX2luaXQoZGV2KTsKIAlpZiAoMCAhPSBlcnIpCiAJCWdvdG8gZmFpbDI7CiAKLQl1cCgmZGV2LT5vc3MubG9jayk7CisJdXAoJmRldi0+ZG1hc291bmQubG9jayk7CiAJcmV0dXJuIDA7CiAKICBmYWlsMjoKLQlkZXYtPm9zcy51c2Vyc19kc3AtLTsKKwlkZXYtPmRtYXNvdW5kLnVzZXJzX2RzcC0tOwogIGZhaWwxOgotCXVwKCZkZXYtPm9zcy5sb2NrKTsKKwl1cCgmZGV2LT5kbWFzb3VuZC5sb2NrKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0yNzEsMTMgKzI3MiwxMyBAQAogewogCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCi0JZG93bigmZGV2LT5vc3MubG9jayk7Ci0JaWYgKGRldi0+b3NzLnJlY29yZGluZ19vbikKKwlkb3duKCZkZXYtPmRtYXNvdW5kLmxvY2spOworCWlmIChkZXYtPmRtYXNvdW5kLnJlY29yZGluZ19vbikKIAkJZHNwX3JlY19zdG9wKGRldik7CiAJZHNwX2J1ZmZlcl9mcmVlKGRldik7Ci0JZGV2LT5vc3MudXNlcnNfZHNwLS07CisJZGV2LT5kbWFzb3VuZC51c2Vyc19kc3AtLTsKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOwotCXVwKCZkZXYtPm9zcy5sb2NrKTsKKwl1cCgmZGV2LT5kbWFzb3VuZC5sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjkwLDEyICsyOTEsMTIgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBlcnIscmV0ID0gMDsKIAotCWFkZF93YWl0X3F1ZXVlKCZkZXYtPm9zcy53cSwgJndhaXQpOwotCWRvd24oJmRldi0+b3NzLmxvY2spOworCWFkZF93YWl0X3F1ZXVlKCZkZXYtPmRtYXNvdW5kLndxLCAmd2FpdCk7CisJZG93bigmZGV2LT5kbWFzb3VuZC5sb2NrKTsKIAl3aGlsZSAoY291bnQgPiAwKSB7CiAJCS8qIHdhaXQgZm9yIGRhdGEgaWYgbmVlZGVkICovCi0JCWlmICgwID09IGRldi0+b3NzLnJlYWRfY291bnQpIHsKLQkJCWlmICghZGV2LT5vc3MucmVjb3JkaW5nX29uKSB7CisJCWlmICgwID09IGRldi0+ZG1hc291bmQucmVhZF9jb3VudCkgeworCQkJaWYgKCFkZXYtPmRtYXNvdW5kLnJlY29yZGluZ19vbikgewogCQkJCWVyciA9IGRzcF9yZWNfc3RhcnQoZGV2KTsKIAkJCQlpZiAoZXJyIDwgMCkgewogCQkJCQlpZiAoMCA9PSByZXQpCkBAIC0zMDMsOCArMzA0LDggQEAKIAkJCQkJYnJlYWs7CiAJCQkJfQogCQkJfQotCQkJaWYgKGRldi0+b3NzLnJlY29yZGluZ19vbiAmJgotCQkJICAgICFkZXYtPm9zcy5kbWFfcnVubmluZykgeworCQkJaWYgKGRldi0+ZG1hc291bmQucmVjb3JkaW5nX29uICYmCisJCQkgICAgIWRldi0+ZG1hc291bmQuZG1hX3J1bm5pbmcpIHsKIAkJCQkvKiByZWNvdmVyIGZyb20gb3ZlcnJ1bnMgKi8KIAkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zbG9jayxmbGFncyk7CiAJCQkJZHNwX2RtYV9zdGFydChkZXYpOwpAQCAtMzE1LDEyICszMTYsMTIgQEAKIAkJCQkJcmV0ID0gLUVBR0FJTjsKIAkJCQlicmVhazsKIAkJCX0KLQkJCXVwKCZkZXYtPm9zcy5sb2NrKTsKKwkJCXVwKCZkZXYtPmRtYXNvdW5kLmxvY2spOwogCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQkJCWlmICgwID09IGRldi0+b3NzLnJlYWRfY291bnQpCisJCQlpZiAoMCA9PSBkZXYtPmRtYXNvdW5kLnJlYWRfY291bnQpCiAJCQkJc2NoZWR1bGUoKTsKIAkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7Ci0JCQlkb3duKCZkZXYtPm9zcy5sb2NrKTsKKwkJCWRvd24oJmRldi0+ZG1hc291bmQubG9jayk7CiAJCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKIAkJCQlpZiAoMCA9PSByZXQpCiAJCQkJCXJldCA9IC1FSU5UUjsKQEAgLTMzMCwxMiArMzMxLDEyIEBACiAKIAkJLyogY29weSBkYXRhIHRvIHVzZXJzcGFjZSAqLwogCQlieXRlcyA9IGNvdW50OwotCQlpZiAoYnl0ZXMgPiBkZXYtPm9zcy5yZWFkX2NvdW50KQotCQkJYnl0ZXMgPSBkZXYtPm9zcy5yZWFkX2NvdW50OwotCQlpZiAoYnl0ZXMgPiBkZXYtPm9zcy5idWZzaXplIC0gZGV2LT5vc3MucmVhZF9vZmZzZXQpCi0JCQlieXRlcyA9IGRldi0+b3NzLmJ1ZnNpemUgLSBkZXYtPm9zcy5yZWFkX29mZnNldDsKKwkJaWYgKGJ5dGVzID4gZGV2LT5kbWFzb3VuZC5yZWFkX2NvdW50KQorCQkJYnl0ZXMgPSBkZXYtPmRtYXNvdW5kLnJlYWRfY291bnQ7CisJCWlmIChieXRlcyA+IGRldi0+ZG1hc291bmQuYnVmc2l6ZSAtIGRldi0+ZG1hc291bmQucmVhZF9vZmZzZXQpCisJCQlieXRlcyA9IGRldi0+ZG1hc291bmQuYnVmc2l6ZSAtIGRldi0+ZG1hc291bmQucmVhZF9vZmZzZXQ7CiAJCWlmIChjb3B5X3RvX3VzZXIoYnVmZmVyICsgcmV0LAotCQkJCSBkZXYtPm9zcy5kbWEudm1hbGxvYyArIGRldi0+b3NzLnJlYWRfb2Zmc2V0LAorCQkJCSBkZXYtPmRtYXNvdW5kLmRtYS52bWFsbG9jICsgZGV2LT5kbWFzb3VuZC5yZWFkX29mZnNldCwKIAkJCQkgYnl0ZXMpKSB7CiAJCQlpZiAoMCA9PSByZXQpCiAJCQkJcmV0ID0gLUVGQVVMVDsKQEAgLTM0NCwxMyArMzQ1LDEzIEBACiAKIAkJcmV0ICAgKz0gYnl0ZXM7CiAJCWNvdW50IC09IGJ5dGVzOwotCQlkZXYtPm9zcy5yZWFkX2NvdW50ICAtPSBieXRlczsKLQkJZGV2LT5vc3MucmVhZF9vZmZzZXQgKz0gYnl0ZXM7Ci0JCWlmIChkZXYtPm9zcy5yZWFkX29mZnNldCA9PSBkZXYtPm9zcy5idWZzaXplKQotCQkJZGV2LT5vc3MucmVhZF9vZmZzZXQgPSAwOworCQlkZXYtPmRtYXNvdW5kLnJlYWRfY291bnQgIC09IGJ5dGVzOworCQlkZXYtPmRtYXNvdW5kLnJlYWRfb2Zmc2V0ICs9IGJ5dGVzOworCQlpZiAoZGV2LT5kbWFzb3VuZC5yZWFkX29mZnNldCA9PSBkZXYtPmRtYXNvdW5kLmJ1ZnNpemUpCisJCQlkZXYtPmRtYXNvdW5kLnJlYWRfb2Zmc2V0ID0gMDsKIAl9Ci0JdXAoJmRldi0+b3NzLmxvY2spOwotCXJlbW92ZV93YWl0X3F1ZXVlKCZkZXYtPm9zcy53cSwgJndhaXQpOworCXVwKCZkZXYtPmRtYXNvdW5kLmxvY2spOworCXJlbW92ZV93YWl0X3F1ZXVlKCZkZXYtPmRtYXNvdW5kLndxLCAmd2FpdCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMzcwLDUzICszNzEsNTMgQEAKIAogCWlmIChvc3NfZGVidWcgPiAxKQogCQlzYWE3MTM0X3ByaW50X2lvY3RsKGRldi0+bmFtZSxjbWQpOwotICAgICAgICBzd2l0Y2ggKGNtZCkgewotICAgICAgICBjYXNlIE9TU19HRVRWRVJTSU9OOgotICAgICAgICAgICAgICAgIHJldHVybiBwdXRfdXNlcihTT1VORF9WRVJTSU9OLCBwKTsKLSAgICAgICAgY2FzZSBTTkRDVExfRFNQX0dFVENBUFM6CisJc3dpdGNoIChjbWQpIHsKKwljYXNlIE9TU19HRVRWRVJTSU9OOgorCQlyZXR1cm4gcHV0X3VzZXIoU09VTkRfVkVSU0lPTiwgcCk7CisJY2FzZSBTTkRDVExfRFNQX0dFVENBUFM6CiAJCXJldHVybiAwOwogCi0gICAgICAgIGNhc2UgU05EQ1RMX0RTUF9TUEVFRDoKKwljYXNlIFNORENUTF9EU1BfU1BFRUQ6CiAJCWlmIChnZXRfdXNlcih2YWwsIHApKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCS8qIGZhbGwgdGhyb3VnaCAqLwotICAgICAgICBjYXNlIFNPVU5EX1BDTV9SRUFEX1JBVEU6Ci0JCXJldHVybiBwdXRfdXNlcihkZXYtPm9zcy5yYXRlLCBwKTsKKwljYXNlIFNPVU5EX1BDTV9SRUFEX1JBVEU6CisJCXJldHVybiBwdXRfdXNlcihkZXYtPmRtYXNvdW5kLnJhdGUsIHApOwogCi0gICAgICAgIGNhc2UgU05EQ1RMX0RTUF9TVEVSRU86CisJY2FzZSBTTkRDVExfRFNQX1NURVJFTzoKIAkJaWYgKGdldF91c2VyKHZhbCwgcCkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKLQkJZG93bigmZGV2LT5vc3MubG9jayk7Ci0JCWRldi0+b3NzLmNoYW5uZWxzID0gdmFsID8gMiA6IDE7Ci0JCWlmIChkZXYtPm9zcy5yZWNvcmRpbmdfb24pIHsKKwkJZG93bigmZGV2LT5kbWFzb3VuZC5sb2NrKTsKKwkJZGV2LT5kbWFzb3VuZC5jaGFubmVscyA9IHZhbCA/IDIgOiAxOworCQlpZiAoZGV2LT5kbWFzb3VuZC5yZWNvcmRpbmdfb24pIHsKIAkJCWRzcF9yZWNfc3RvcChkZXYpOwogCQkJZHNwX3JlY19zdGFydChkZXYpOwogCQl9Ci0JCXVwKCZkZXYtPm9zcy5sb2NrKTsKLQkJcmV0dXJuIHB1dF91c2VyKGRldi0+b3NzLmNoYW5uZWxzLTEsIHApOworCQl1cCgmZGV2LT5kbWFzb3VuZC5sb2NrKTsKKwkJcmV0dXJuIHB1dF91c2VyKGRldi0+ZG1hc291bmQuY2hhbm5lbHMtMSwgcCk7CiAKLSAgICAgICAgY2FzZSBTTkRDVExfRFNQX0NIQU5ORUxTOgorCWNhc2UgU05EQ1RMX0RTUF9DSEFOTkVMUzoKIAkJaWYgKGdldF91c2VyKHZhbCwgcCkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJaWYgKHZhbCAhPSAxICYmIHZhbCAhPSAyKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWRvd24oJmRldi0+b3NzLmxvY2spOwotCQlkZXYtPm9zcy5jaGFubmVscyA9IHZhbDsKLQkJaWYgKGRldi0+b3NzLnJlY29yZGluZ19vbikgeworCQlkb3duKCZkZXYtPmRtYXNvdW5kLmxvY2spOworCQlkZXYtPmRtYXNvdW5kLmNoYW5uZWxzID0gdmFsOworCQlpZiAoZGV2LT5kbWFzb3VuZC5yZWNvcmRpbmdfb24pIHsKIAkJCWRzcF9yZWNfc3RvcChkZXYpOwogCQkJZHNwX3JlY19zdGFydChkZXYpOwogCQl9Ci0JCXVwKCZkZXYtPm9zcy5sb2NrKTsKKwkJdXAoJmRldi0+ZG1hc291bmQubG9jayk7CiAJCS8qIGZhbGwgdGhyb3VnaCAqLwotICAgICAgICBjYXNlIFNPVU5EX1BDTV9SRUFEX0NIQU5ORUxTOgotCQlyZXR1cm4gcHV0X3VzZXIoZGV2LT5vc3MuY2hhbm5lbHMsIHApOworCWNhc2UgU09VTkRfUENNX1JFQURfQ0hBTk5FTFM6CisJCXJldHVybiBwdXRfdXNlcihkZXYtPmRtYXNvdW5kLmNoYW5uZWxzLCBwKTsKIAotICAgICAgICBjYXNlIFNORENUTF9EU1BfR0VURk1UUzogLyogUmV0dXJucyBhIG1hc2sgKi8KKwljYXNlIFNORENUTF9EU1BfR0VURk1UUzogLyogUmV0dXJucyBhIG1hc2sgKi8KIAkJcmV0dXJuIHB1dF91c2VyKEFGTVRfVTggICAgIHwgQUZNVF9TOCAgICAgfAogCQkJCUFGTVRfVTE2X0xFIHwgQUZNVF9VMTZfQkUgfAogCQkJCUFGTVRfUzE2X0xFIHwgQUZNVF9TMTZfQkUsIHApOwogCi0gICAgICAgIGNhc2UgU05EQ1RMX0RTUF9TRVRGTVQ6IC8qIFNlbGVjdHMgT05FIGZtdCAqLworCWNhc2UgU05EQ1RMX0RTUF9TRVRGTVQ6IC8qIFNlbGVjdHMgT05FIGZtdCAqLwogCQlpZiAoZ2V0X3VzZXIodmFsLCBwKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCQlzd2l0Y2ggKHZhbCkgewpAQCAtNDI5LDIwICs0MzAsMjAgQEAKIAkJY2FzZSBBRk1UX1UxNl9CRToKIAkJY2FzZSBBRk1UX1MxNl9MRToKIAkJY2FzZSBBRk1UX1MxNl9CRToKLQkJCWRvd24oJmRldi0+b3NzLmxvY2spOwotCQkJZGV2LT5vc3MuYWZtdCA9IHZhbDsKLQkJCWlmIChkZXYtPm9zcy5yZWNvcmRpbmdfb24pIHsKKwkJCWRvd24oJmRldi0+ZG1hc291bmQubG9jayk7CisJCQlkZXYtPmRtYXNvdW5kLmFmbXQgPSB2YWw7CisJCQlpZiAoZGV2LT5kbWFzb3VuZC5yZWNvcmRpbmdfb24pIHsKIAkJCQlkc3BfcmVjX3N0b3AoZGV2KTsKIAkJCQlkc3BfcmVjX3N0YXJ0KGRldik7CiAJCQl9Ci0JCQl1cCgmZGV2LT5vc3MubG9jayk7Ci0JCQlyZXR1cm4gcHV0X3VzZXIoZGV2LT5vc3MuYWZtdCwgcCk7CisJCQl1cCgmZGV2LT5kbWFzb3VuZC5sb2NrKTsKKwkJCXJldHVybiBwdXRfdXNlcihkZXYtPmRtYXNvdW5kLmFmbXQsIHApOwogCQlkZWZhdWx0OgogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAotICAgICAgICBjYXNlIFNPVU5EX1BDTV9SRUFEX0JJVFM6Ci0JCXN3aXRjaCAoZGV2LT5vc3MuYWZtdCkgeworCWNhc2UgU09VTkRfUENNX1JFQURfQklUUzoKKwkJc3dpdGNoIChkZXYtPmRtYXNvdW5kLmFmbXQpIHsKIAkJY2FzZSBBRk1UX1U4OgogCQljYXNlIEFGTVRfUzg6CiAJCQlyZXR1cm4gcHV0X3VzZXIoOCwgcCk7CkBAIC00NTUsMjMgKzQ1NiwyMyBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAotICAgICAgICBjYXNlIFNORENUTF9EU1BfTk9OQkxPQ0s6Ci0gICAgICAgICAgICAgICAgZmlsZS0+Zl9mbGFncyB8PSBPX05PTkJMT0NLOwotICAgICAgICAgICAgICAgIHJldHVybiAwOwotCi0gICAgICAgIGNhc2UgU05EQ1RMX0RTUF9SRVNFVDoKLQkJZG93bigmZGV2LT5vc3MubG9jayk7Ci0JCWlmIChkZXYtPm9zcy5yZWNvcmRpbmdfb24pCi0JCQlkc3BfcmVjX3N0b3AoZGV2KTsKLQkJdXAoJmRldi0+b3NzLmxvY2spOworCWNhc2UgU05EQ1RMX0RTUF9OT05CTE9DSzoKKwkJZmlsZS0+Zl9mbGFncyB8PSBPX05PTkJMT0NLOwogCQlyZXR1cm4gMDsKLSAgICAgICAgY2FzZSBTTkRDVExfRFNQX0dFVEJMS1NJWkU6Ci0JCXJldHVybiBwdXRfdXNlcihkZXYtPm9zcy5ibGtzaXplLCBwKTsKIAotICAgICAgICBjYXNlIFNORENUTF9EU1BfU0VURlJBR01FTlQ6CisJY2FzZSBTTkRDVExfRFNQX1JFU0VUOgorCQlkb3duKCZkZXYtPmRtYXNvdW5kLmxvY2spOworCQlpZiAoZGV2LT5kbWFzb3VuZC5yZWNvcmRpbmdfb24pCisJCQlkc3BfcmVjX3N0b3AoZGV2KTsKKwkJdXAoJmRldi0+ZG1hc291bmQubG9jayk7CisJCXJldHVybiAwOworCWNhc2UgU05EQ1RMX0RTUF9HRVRCTEtTSVpFOgorCQlyZXR1cm4gcHV0X3VzZXIoZGV2LT5kbWFzb3VuZC5ibGtzaXplLCBwKTsKKworCWNhc2UgU05EQ1RMX0RTUF9TRVRGUkFHTUVOVDoKIAkJaWYgKGdldF91c2VyKHZhbCwgcCkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKLQkJaWYgKGRldi0+b3NzLnJlY29yZGluZ19vbikKKwkJaWYgKGRldi0+ZG1hc291bmQucmVjb3JkaW5nX29uKQogCQkJcmV0dXJuIC1FQlVTWTsKIAkJZHNwX2J1ZmZlcl9mcmVlKGRldik7CiAJCS8qIHVzZWQgdG8gYmUgYXJnID4+IDE2IGluc3RlYWQgb2YgdmFsID4+IDE2OyBmaXhlZCAqLwpAQCAtNDc5LDE2ICs0ODAsMTYgQEAKIAkJZHNwX2J1ZmZlcl9pbml0KGRldik7CiAJCXJldHVybiAwOwogCi0gICAgICAgIGNhc2UgU05EQ1RMX0RTUF9TWU5DOgorCWNhc2UgU05EQ1RMX0RTUF9TWU5DOgogCQkvKiBOT1AgKi8KIAkJcmV0dXJuIDA7CiAKIAljYXNlIFNORENUTF9EU1BfR0VUSVNQQUNFOgogCXsKIAkJYXVkaW9fYnVmX2luZm8gaW5mbzsKLQkJaW5mby5mcmFnc2l6ZSAgID0gZGV2LT5vc3MuYmxrc2l6ZTsKLQkJaW5mby5mcmFnc3RvdGFsID0gZGV2LT5vc3MuYmxvY2tzOwotCQlpbmZvLmJ5dGVzICAgICAgPSBkZXYtPm9zcy5yZWFkX2NvdW50OworCQlpbmZvLmZyYWdzaXplICAgPSBkZXYtPmRtYXNvdW5kLmJsa3NpemU7CisJCWluZm8uZnJhZ3N0b3RhbCA9IGRldi0+ZG1hc291bmQuYmxvY2tzOworCQlpbmZvLmJ5dGVzICAgICAgPSBkZXYtPmRtYXNvdW5kLnJlYWRfY291bnQ7CiAJCWluZm8uZnJhZ21lbnRzICA9IGluZm8uYnl0ZXMgLyBpbmZvLmZyYWdzaXplOwogCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZpbmZvLCBzaXplb2YoaW5mbykpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CkBAIC01MDQsMTMgKzUwNSwxMyBAQAogCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXVuc2lnbmVkIGludCBtYXNrID0gMDsKIAotCXBvbGxfd2FpdChmaWxlLCAmZGV2LT5vc3Mud3EsIHdhaXQpOworCXBvbGxfd2FpdChmaWxlLCAmZGV2LT5kbWFzb3VuZC53cSwgd2FpdCk7CiAKLQlpZiAoMCA9PSBkZXYtPm9zcy5yZWFkX2NvdW50KSB7Ci0JCWRvd24oJmRldi0+b3NzLmxvY2spOwotCQlpZiAoIWRldi0+b3NzLnJlY29yZGluZ19vbikKKwlpZiAoMCA9PSBkZXYtPmRtYXNvdW5kLnJlYWRfY291bnQpIHsKKwkJZG93bigmZGV2LT5kbWFzb3VuZC5sb2NrKTsKKwkJaWYgKCFkZXYtPmRtYXNvdW5kLnJlY29yZGluZ19vbikKIAkJCWRzcF9yZWNfc3RhcnQoZGV2KTsKLQkJdXAoJmRldi0+b3NzLmxvY2spOworCQl1cCgmZGV2LT5kbWFzb3VuZC5sb2NrKTsKIAl9IGVsc2UKIAkJbWFzayB8PSAoUE9MTElOIHwgUE9MTFJETk9STSk7CiAJcmV0dXJuIG1hc2s7CkBAIC01MzQsNyArNTM1LDcgQEAKIHsKIAlpbnQgYW5hbG9nX2lvLHJhdGU7CiAKLQlzd2l0Y2ggKGRldi0+b3NzLmlucHV0KSB7CisJc3dpdGNoIChkZXYtPmRtYXNvdW5kLmlucHV0KSB7CiAJY2FzZSBUVjoKIAkJc2FhX2FuZG9yYihTQUE3MTM0X0FVRElPX0ZPUk1BVF9DVFJMLCAweGMwLCAweGMwKTsKIAkJc2FhX2FuZG9yYihTQUE3MTM0X1NJRl9TQU1QTEVfRlJFUSwgICAweDAzLCAweDAwKTsKQEAgLTU0Miw4ICs1NDMsOCBAQAogCWNhc2UgTElORTE6CiAJY2FzZSBMSU5FMjoKIAljYXNlIExJTkUyX0xFRlQ6Ci0JCWFuYWxvZ19pbyA9IChMSU5FMSA9PSBkZXYtPm9zcy5pbnB1dCkgPyAweDAwIDogMHgwODsKLQkJcmF0ZSA9ICgzMjAwMCA9PSBkZXYtPm9zcy5yYXRlKSA/IDB4MDEgOiAweDAzOworCQlhbmFsb2dfaW8gPSAoTElORTEgPT0gZGV2LT5kbWFzb3VuZC5pbnB1dCkgPyAweDAwIDogMHgwODsKKwkJcmF0ZSA9ICgzMjAwMCA9PSBkZXYtPmRtYXNvdW5kLnJhdGUpID8gMHgwMSA6IDB4MDM7CiAJCXNhYV9hbmRvcmIoU0FBNzEzNF9BTkFMT0dfSU9fU0VMRUNULCAgMHgwOCwgYW5hbG9nX2lvKTsKIAkJc2FhX2FuZG9yYihTQUE3MTM0X0FVRElPX0ZPUk1BVF9DVFJMLCAweGMwLCAweDgwKTsKIAkJc2FhX2FuZG9yYihTQUE3MTM0X1NJRl9TQU1QTEVfRlJFUSwgICAweDAzLCByYXRlKTsKQEAgLTU1OSwxMCArNTYwLDEwIEBACiAKIAl4YmFyaW4gPSAweDAzOyAvLyBhZGMKICAgICBhbmFiYXIgPSAwOwotCXN3aXRjaCAoZGV2LT5vc3MuaW5wdXQpIHsKKwlzd2l0Y2ggKGRldi0+ZG1hc291bmQuaW5wdXQpIHsKIAljYXNlIFRWOgogCQl4YmFyaW4gPSAwOyAvLyBEZW1vZHVsYXRvcgotICAgICAgICBhbmFiYXIgPSAyOyAvLyBEQUNzCisJYW5hYmFyID0gMjsgLy8gREFDcwogCQlicmVhazsKIAljYXNlIExJTkUxOgogCQlhbmFiYXIgPSAwOyAgLy8gYXV4MSwgYXV4MQpAQCAtNTg1LDkgKzU4Niw5IEBACiB7CiAJc3RhdGljIGNvbnN0IGNoYXIgKmluYW1lW10gPSB7ICJPb3BzIiwgIlRWIiwgIkxJTkUxIiwgIkxJTkUyIiB9OwogCi0JZGV2LT5vc3MuY291bnQrKzsKLQlkZXYtPm9zcy5pbnB1dCA9IHNyYzsKLQlkcHJpbnRrKCJtaXhlciBpbnB1dCA9ICVzXG4iLGluYW1lW2Rldi0+b3NzLmlucHV0XSk7CisJZGV2LT5kbWFzb3VuZC5jb3VudCsrOworCWRldi0+ZG1hc291bmQuaW5wdXQgPSBzcmM7CisJZHByaW50aygibWl4ZXIgaW5wdXQgPSAlc1xuIixpbmFtZVtkZXYtPmRtYXNvdW5kLmlucHV0XSk7CiAKIAlzd2l0Y2ggKGRldi0+cGNpLT5kZXZpY2UpIHsKIAljYXNlIFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTM0OgpAQCAtNjM5LDcgKzY0MCw3IEBACiAKIAlsaXN0X2Zvcl9lYWNoKGxpc3QsJnNhYTcxMzRfZGV2bGlzdCkgewogCQloID0gbGlzdF9lbnRyeShsaXN0LCBzdHJ1Y3Qgc2FhNzEzNF9kZXYsIGRldmxpc3QpOwotCQlpZiAoaC0+b3NzLm1pbm9yX21peGVyID09IG1pbm9yKQorCQlpZiAoaC0+ZG1hc291bmQubWlub3JfbWl4ZXIgPT0gbWlub3IpCiAJCQlkZXYgPSBoOwogCX0KIAlpZiAoTlVMTCA9PSBkZXYpCkBAIC02NjYsMjggKzY2NywyOCBAQAogCiAJaWYgKG9zc19kZWJ1ZyA+IDEpCiAJCXNhYTcxMzRfcHJpbnRfaW9jdGwoZGV2LT5uYW1lLGNtZCk7Ci0gICAgICAgIHN3aXRjaCAoY21kKSB7Ci0gICAgICAgIGNhc2UgT1NTX0dFVFZFUlNJT046Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHB1dF91c2VyKFNPVU5EX1ZFUlNJT04sIHApOworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBPU1NfR0VUVkVSU0lPTjoKKwkJcmV0dXJuIHB1dF91c2VyKFNPVU5EX1ZFUlNJT04sIHApOwogCWNhc2UgU09VTkRfTUlYRVJfSU5GTzoKIAl7CiAJCW1peGVyX2luZm8gaW5mbzsKIAkJbWVtc2V0KCZpbmZvLDAsc2l6ZW9mKGluZm8pKTsKLSAgICAgICAgICAgICAgICBzdHJsY3B5KGluZm8uaWQsICAgIlRWIGF1ZGlvIiwgc2l6ZW9mKGluZm8uaWQpKTsKLSAgICAgICAgICAgICAgICBzdHJsY3B5KGluZm8ubmFtZSwgZGV2LT5uYW1lLCAgc2l6ZW9mKGluZm8ubmFtZSkpOwotICAgICAgICAgICAgICAgIGluZm8ubW9kaWZ5X2NvdW50ZXIgPSBkZXYtPm9zcy5jb3VudDsKLSAgICAgICAgICAgICAgICBpZiAoY29weV90b191c2VyKGFyZ3AsICZpbmZvLCBzaXplb2YoaW5mbykpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7CisJCXN0cmxjcHkoaW5mby5pZCwgICAiVFYgYXVkaW8iLCBzaXplb2YoaW5mby5pZCkpOworCQlzdHJsY3B5KGluZm8ubmFtZSwgZGV2LT5uYW1lLCAgc2l6ZW9mKGluZm8ubmFtZSkpOworCQlpbmZvLm1vZGlmeV9jb3VudGVyID0gZGV2LT5kbWFzb3VuZC5jb3VudDsKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmaW5mbywgc2l6ZW9mKGluZm8pKSkKKwkJCXJldHVybiAtRUZBVUxUOwogCQlyZXR1cm4gMDsKIAl9CiAJY2FzZSBTT1VORF9PTERfTUlYRVJfSU5GTzoKIAl7CiAJCV9vbGRfbWl4ZXJfaW5mbyBpbmZvOwogCQltZW1zZXQoJmluZm8sMCxzaXplb2YoaW5mbykpOwotICAgICAgICAgICAgICAgIHN0cmxjcHkoaW5mby5pZCwgICAiVFYgYXVkaW8iLCBzaXplb2YoaW5mby5pZCkpOwotICAgICAgICAgICAgICAgIHN0cmxjcHkoaW5mby5uYW1lLCBkZXYtPm5hbWUsICBzaXplb2YoaW5mby5uYW1lKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmaW5mbywgc2l6ZW9mKGluZm8pKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOworCQlzdHJsY3B5KGluZm8uaWQsICAgIlRWIGF1ZGlvIiwgc2l6ZW9mKGluZm8uaWQpKTsKKwkJc3RybGNweShpbmZvLm5hbWUsIGRldi0+bmFtZSwgIHNpemVvZihpbmZvLm5hbWUpKTsKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmaW5mbywgc2l6ZW9mKGluZm8pKSkKKwkJCXJldHVybiAtRUZBVUxUOwogCQlyZXR1cm4gMDsKIAl9CiAJY2FzZSBNSVhFUl9SRUFEKFNPVU5EX01JWEVSX0NBUFMpOgpAQCAtNjk3LDI2ICs2OTgsMjYgQEAKIAljYXNlIE1JWEVSX1JFQUQoU09VTkRfTUlYRVJfUkVDTUFTSyk6CiAJY2FzZSBNSVhFUl9SRUFEKFNPVU5EX01JWEVSX0RFVk1BU0spOgogCQl2YWwgPSBTT1VORF9NQVNLX0xJTkUxIHwgU09VTkRfTUFTS19MSU5FMjsKLQkJaWYgKDMyMDAwID09IGRldi0+b3NzLnJhdGUpCisJCWlmICgzMjAwMCA9PSBkZXYtPmRtYXNvdW5kLnJhdGUpCiAJCQl2YWwgfD0gU09VTkRfTUFTS19WSURFTzsKIAkJcmV0dXJuIHB1dF91c2VyKHZhbCwgcCk7CiAKIAljYXNlIE1JWEVSX1dSSVRFKFNPVU5EX01JWEVSX1JFQ1NSQyk6CiAJCWlmIChnZXRfdXNlcih2YWwsIHApKQogCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCWlucHV0ID0gZGV2LT5vc3MuaW5wdXQ7Ci0JCWlmICgzMjAwMCA9PSBkZXYtPm9zcy5yYXRlICAmJgotCQkgICAgdmFsICYgU09VTkRfTUFTS19WSURFTyAgJiYgIGRldi0+b3NzLmlucHV0ICE9IFRWKQorCQlpbnB1dCA9IGRldi0+ZG1hc291bmQuaW5wdXQ7CisJCWlmICgzMjAwMCA9PSBkZXYtPmRtYXNvdW5kLnJhdGUgICYmCisJCSAgICB2YWwgJiBTT1VORF9NQVNLX1ZJREVPICAmJiAgZGV2LT5kbWFzb3VuZC5pbnB1dCAhPSBUVikKIAkJCWlucHV0ID0gVFY7Ci0JCWlmICh2YWwgJiBTT1VORF9NQVNLX0xJTkUxICAmJiAgZGV2LT5vc3MuaW5wdXQgIT0gTElORTEpCisJCWlmICh2YWwgJiBTT1VORF9NQVNLX0xJTkUxICAmJiAgZGV2LT5kbWFzb3VuZC5pbnB1dCAhPSBMSU5FMSkKIAkJCWlucHV0ID0gTElORTE7Ci0JCWlmICh2YWwgJiBTT1VORF9NQVNLX0xJTkUyICAmJiAgZGV2LT5vc3MuaW5wdXQgIT0gTElORTIpCisJCWlmICh2YWwgJiBTT1VORF9NQVNLX0xJTkUyICAmJiAgZGV2LT5kbWFzb3VuZC5pbnB1dCAhPSBMSU5FMikKIAkJCWlucHV0ID0gTElORTI7Ci0JCWlmIChpbnB1dCAhPSBkZXYtPm9zcy5pbnB1dCkKKwkJaWYgKGlucHV0ICE9IGRldi0+ZG1hc291bmQuaW5wdXQpCiAJCQltaXhlcl9yZWNzcmMoZGV2LGlucHV0KTsKIAkJLyogZmFsbCB0aHJvdXRoICovCiAJY2FzZSBNSVhFUl9SRUFEKFNPVU5EX01JWEVSX1JFQ1NSQyk6Ci0JCXN3aXRjaCAoZGV2LT5vc3MuaW5wdXQpIHsKKwkJc3dpdGNoIChkZXYtPmRtYXNvdW5kLmlucHV0KSB7CiAJCWNhc2UgVFY6ICAgIHJldCA9IFNPVU5EX01BU0tfVklERU87IGJyZWFrOwogCQljYXNlIExJTkUxOiByZXQgPSBTT1VORF9NQVNLX0xJTkUxOyBicmVhazsKIAkJY2FzZSBMSU5FMjogcmV0ID0gU09VTkRfTUFTS19MSU5FMjsgYnJlYWs7CkBAIC03MjYsNyArNzI3LDcgQEAKIAogCWNhc2UgTUlYRVJfV1JJVEUoU09VTkRfTUlYRVJfVklERU8pOgogCWNhc2UgTUlYRVJfUkVBRChTT1VORF9NSVhFUl9WSURFTyk6Ci0JCWlmICgzMjAwMCAhPSBkZXYtPm9zcy5yYXRlKQorCQlpZiAoMzIwMDAgIT0gZGV2LT5kbWFzb3VuZC5yYXRlKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCXJldHVybiBwdXRfdXNlcigxMDAgfCAxMDAgPDwgOCwgcCk7CiAKQEAgLTczNSwyMiArNzM2LDIyIEBACiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJdmFsICY9IDB4ZmY7CiAJCXZhbCA9ICh2YWwgPD0gNTApID8gNTAgOiAxMDA7Ci0JCWRldi0+b3NzLmxpbmUxID0gdmFsOwotCQltaXhlcl9sZXZlbChkZXYsTElORTEsZGV2LT5vc3MubGluZTEpOworCQlkZXYtPmRtYXNvdW5kLmxpbmUxID0gdmFsOworCQltaXhlcl9sZXZlbChkZXYsTElORTEsZGV2LT5kbWFzb3VuZC5saW5lMSk7CiAJCS8qIGZhbGwgdGhyb3V0aCAqLwogCWNhc2UgTUlYRVJfUkVBRChTT1VORF9NSVhFUl9MSU5FMSk6Ci0JCXJldHVybiBwdXRfdXNlcihkZXYtPm9zcy5saW5lMSB8IGRldi0+b3NzLmxpbmUxIDw8IDgsIHApOworCQlyZXR1cm4gcHV0X3VzZXIoZGV2LT5kbWFzb3VuZC5saW5lMSB8IGRldi0+ZG1hc291bmQubGluZTEgPDwgOCwgcCk7CiAKIAljYXNlIE1JWEVSX1dSSVRFKFNPVU5EX01JWEVSX0xJTkUyKToKIAkJaWYgKGdldF91c2VyKHZhbCwgcCkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJdmFsICY9IDB4ZmY7CiAJCXZhbCA9ICh2YWwgPD0gNTApID8gNTAgOiAxMDA7Ci0JCWRldi0+b3NzLmxpbmUyID0gdmFsOwotCQltaXhlcl9sZXZlbChkZXYsTElORTIsZGV2LT5vc3MubGluZTIpOworCQlkZXYtPmRtYXNvdW5kLmxpbmUyID0gdmFsOworCQltaXhlcl9sZXZlbChkZXYsTElORTIsZGV2LT5kbWFzb3VuZC5saW5lMik7CiAJCS8qIGZhbGwgdGhyb3V0aCAqLwogCWNhc2UgTUlYRVJfUkVBRChTT1VORF9NSVhFUl9MSU5FMik6Ci0JCXJldHVybiBwdXRfdXNlcihkZXYtPm9zcy5saW5lMiB8IGRldi0+b3NzLmxpbmUyIDw8IDgsIHApOworCQlyZXR1cm4gcHV0X3VzZXIoZGV2LT5kbWFzb3VuZC5saW5lMiB8IGRldi0+ZG1hc291bmQubGluZTIgPDwgOCwgcCk7CiAKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTc3MCw4ICs3NzEsOCBAQAogaW50IHNhYTcxMzRfb3NzX2luaXQxKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2KQogewogCS8qIGdlbmVyYWwgKi8KLSAgICAgICAgaW5pdF9NVVRFWCgmZGV2LT5vc3MubG9jayk7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmZGV2LT5vc3Mud3EpOworCWluaXRfTVVURVgoJmRldi0+ZG1hc291bmQubG9jayk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmZGV2LT5kbWFzb3VuZC53cSk7CiAKIAlzd2l0Y2ggKGRldi0+cGNpLT5kZXZpY2UpIHsKIAljYXNlIFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTMzOgpAQCAtNzgzLDE3ICs3ODQsMTcgQEAKIAl9CiAKIAkvKiBkc3AgKi8KLQlkZXYtPm9zcy5yYXRlID0gMzIwMDA7CisJZGV2LT5kbWFzb3VuZC5yYXRlID0gMzIwMDA7CiAJaWYgKG9zc19yYXRlKQotCQlkZXYtPm9zcy5yYXRlID0gb3NzX3JhdGU7Ci0JZGV2LT5vc3MucmF0ZSA9IChkZXYtPm9zcy5yYXRlID4gNDAwMDApID8gNDgwMDAgOiAzMjAwMDsKKwkJZGV2LT5kbWFzb3VuZC5yYXRlID0gb3NzX3JhdGU7CisJZGV2LT5kbWFzb3VuZC5yYXRlID0gKGRldi0+ZG1hc291bmQucmF0ZSA+IDQwMDAwKSA/IDQ4MDAwIDogMzIwMDA7CiAKIAkvKiBtaXhlciAqLwotCWRldi0+b3NzLmxpbmUxID0gNTA7Ci0JZGV2LT5vc3MubGluZTIgPSA1MDsKLQltaXhlcl9sZXZlbChkZXYsTElORTEsZGV2LT5vc3MubGluZTEpOwotCW1peGVyX2xldmVsKGRldixMSU5FMixkZXYtPm9zcy5saW5lMik7Ci0JbWl4ZXJfcmVjc3JjKGRldiwgKGRldi0+b3NzLnJhdGUgPT0gMzIwMDApID8gVFYgOiBMSU5FMik7CisJZGV2LT5kbWFzb3VuZC5saW5lMSA9IDUwOworCWRldi0+ZG1hc291bmQubGluZTIgPSA1MDsKKwltaXhlcl9sZXZlbChkZXYsTElORTEsZGV2LT5kbWFzb3VuZC5saW5lMSk7CisJbWl4ZXJfbGV2ZWwoZGV2LExJTkUyLGRldi0+ZG1hc291bmQubGluZTIpOworCW1peGVyX3JlY3NyYyhkZXYsIChkZXYtPmRtYXNvdW5kLnJhdGUgPT0gMzIwMDApID8gVFYgOiBMSU5FMik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTgwOSw3ICs4MTAsNyBAQAogCWludCBuZXh0X2JsaywgcmVnID0gMDsKIAogCXNwaW5fbG9jaygmZGV2LT5zbG9jayk7Ci0JaWYgKFVOU0VUID09IGRldi0+b3NzLmRtYV9ibGspIHsKKwlpZiAoVU5TRVQgPT0gZGV2LT5kbWFzb3VuZC5kbWFfYmxrKSB7CiAJCWRwcmludGsoImlycTogcmVjb3JkaW5nIHN0b3BwZWRcbiIpOwogCQlnb3RvIGRvbmU7CiAJfQpAQCAtODE3LDExICs4MTgsMTEgQEAKIAkJZHByaW50aygiaXJxOiBsb3N0ICVsZFxuIiwgKHN0YXR1cyA+PiAyNCkgJiAweDBmKTsKIAlpZiAoMCA9PSAoc3RhdHVzICYgMHgxMDAwMDAwMCkpIHsKIAkJLyogb2RkICovCi0JCWlmICgwID09IChkZXYtPm9zcy5kbWFfYmxrICYgMHgwMSkpCisJCWlmICgwID09IChkZXYtPmRtYXNvdW5kLmRtYV9ibGsgJiAweDAxKSkKIAkJCXJlZyA9IFNBQTcxMzRfUlNfQkExKDYpOwogCX0gZWxzZSB7CiAJCS8qIGV2ZW4gKi8KLQkJaWYgKDEgPT0gKGRldi0+b3NzLmRtYV9ibGsgJiAweDAxKSkKKwkJaWYgKDEgPT0gKGRldi0+ZG1hc291bmQuZG1hX2JsayAmIDB4MDEpKQogCQkJcmVnID0gU0FBNzEzNF9SU19CQTIoNik7CiAJfQogCWlmICgwID09IHJlZykgewpAQCAtODI5LDI1ICs4MzAsMjUgQEAKIAkJCShzdGF0dXMgJiAweDEwMDAwMDAwKSA/ICJldmVuIiA6ICJvZGQiKTsKIAkJZ290byBkb25lOwogCX0KLQlpZiAoZGV2LT5vc3MucmVhZF9jb3VudCA+PSBkZXYtPm9zcy5ibGtzaXplICogKGRldi0+b3NzLmJsb2Nrcy0yKSkgewotCQlkcHJpbnRrKCJpcnE6IG92ZXJydW4gW2Z1bGw9JWQvJWRdXG4iLGRldi0+b3NzLnJlYWRfY291bnQsCi0JCQlkZXYtPm9zcy5idWZzaXplKTsKKwlpZiAoZGV2LT5kbWFzb3VuZC5yZWFkX2NvdW50ID49IGRldi0+ZG1hc291bmQuYmxrc2l6ZSAqIChkZXYtPmRtYXNvdW5kLmJsb2Nrcy0yKSkgeworCQlkcHJpbnRrKCJpcnE6IG92ZXJydW4gW2Z1bGw9JWQvJWRdXG4iLGRldi0+ZG1hc291bmQucmVhZF9jb3VudCwKKwkJCWRldi0+ZG1hc291bmQuYnVmc2l6ZSk7CiAJCWRzcF9kbWFfc3RvcChkZXYpOwogCQlnb3RvIGRvbmU7CiAJfQogCiAJLyogbmV4dCBibG9jayBhZGRyICovCi0JbmV4dF9ibGsgPSAoZGV2LT5vc3MuZG1hX2JsayArIDIpICUgZGV2LT5vc3MuYmxvY2tzOwotCXNhYV93cml0ZWwocmVnLG5leHRfYmxrICogZGV2LT5vc3MuYmxrc2l6ZSk7CisJbmV4dF9ibGsgPSAoZGV2LT5kbWFzb3VuZC5kbWFfYmxrICsgMikgJSBkZXYtPmRtYXNvdW5kLmJsb2NrczsKKwlzYWFfd3JpdGVsKHJlZyxuZXh0X2JsayAqIGRldi0+ZG1hc291bmQuYmxrc2l6ZSk7CiAJaWYgKG9zc19kZWJ1ZyA+IDIpCiAJCWRwcmludGsoImlycTogb2ssICVzLCBuZXh0X2Jsaz0lZCwgYWRkcj0leFxuIiwKIAkJCShzdGF0dXMgJiAweDEwMDAwMDAwKSA/ICJldmVuIiA6ICJvZGQgIiwgbmV4dF9ibGssCi0JCQluZXh0X2JsayAqIGRldi0+b3NzLmJsa3NpemUpOworCQkJbmV4dF9ibGsgKiBkZXYtPmRtYXNvdW5kLmJsa3NpemUpOwogCiAJLyogdXBkYXRlIHN0YXR1cyAmIHdha2Ugd2FpdGluZyByZWFkZXJzICovCi0JZGV2LT5vc3MuZG1hX2JsayA9IChkZXYtPm9zcy5kbWFfYmxrICsgMSkgJSBkZXYtPm9zcy5ibG9ja3M7Ci0JZGV2LT5vc3MucmVhZF9jb3VudCArPSBkZXYtPm9zcy5ibGtzaXplOwotCXdha2VfdXAoJmRldi0+b3NzLndxKTsKKwlkZXYtPmRtYXNvdW5kLmRtYV9ibGsgPSAoZGV2LT5kbWFzb3VuZC5kbWFfYmxrICsgMSkgJSBkZXYtPmRtYXNvdW5kLmJsb2NrczsKKwlkZXYtPmRtYXNvdW5kLnJlYWRfY291bnQgKz0gZGV2LT5kbWFzb3VuZC5ibGtzaXplOworCXdha2VfdXAoJmRldi0+ZG1hc291bmQud3EpOwogCiAgZG9uZToKIAlzcGluX3VubG9jaygmZGV2LT5zbG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1yZWcuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXJlZy5oCmluZGV4IGFlMGM3YTEuLmFjNjQzMWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXJlZy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXJlZy5oCkBAIC0yNyw3ICsyNyw3IEBACiAKIC8qIERNQSBjaGFubmVscywgbiA9IDAgLi4uIDYgKi8KICNkZWZpbmUgU0FBNzEzNF9SU19CQTEobikJCQkoKDB4MjAwID4+IDIpICsgNCpuKQotI2RlZmluZSBTQUE3MTM0X1JTX0JBMihuKQkgICAgICAgCQkoKDB4MjA0ID4+IDIpICsgNCpuKQorI2RlZmluZSBTQUE3MTM0X1JTX0JBMihuKQkJCSgoMHgyMDQgPj4gMikgKyA0Km4pCiAjZGVmaW5lIFNBQTcxMzRfUlNfUElUQ0gobikJCQkoKDB4MjA4ID4+IDIpICsgNCpuKQogI2RlZmluZSBTQUE3MTM0X1JTX0NPTlRST0wobikJCQkoKDB4MjBjID4+IDIpICsgNCpuKQogI2RlZmluZSAgIFNBQTcxMzRfUlNfQ09OVFJPTF9XU1dBUAkJKDB4MDEgPDwgMjUpCkBAIC00MywxNiArNDMsMjQgQEAKICNkZWZpbmUgU0FBNzEzNF9GSUZPX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICgweDJhMCA+PiAyKQogI2RlZmluZSBTQUE3MTM0X1RIUkVTSE9VTEQgICAgICAgICAgICAgICAgICAgICAgKDB4MmE0ID4+IDIpCiAKKyNkZWZpbmUgU0FBNzEzM19OVU1fU0FNUExFUwkJCSgweDU4OCA+PiAyKQorI2RlZmluZSBTQUE3MTMzX0FVRElPX0NIQU5ORUwJCQkoMHg1OGMgPj4gMikKKyNkZWZpbmUgU0FBNzEzM19BVURJT19GT1JNQVQJCQkoMHg1OGYgPj4gMikKKyNkZWZpbmUgU0FBNzEzM19ESUdJVEFMX09VVFBVVF9TRUwxCQkoMHg0NmMgPj4gMikKKyNkZWZpbmUgU0FBNzEzM19ESUdJVEFMX09VVFBVVF9TRUwyCQkoMHg0NzAgPj4gMikKKyNkZWZpbmUgU0FBNzEzM19ESUdJVEFMX0lOUFVUX1hCQVIxCQkoMHg0NjQgPj4gMikKKyNkZWZpbmUgU0FBNzEzM19BTkFMT0dfSU9fU0VMRUNUICAgICAgICAgICAgICAgICgweDU5NCA+PiAyKQorCiAvKiBtYWluIGNvbnRyb2wgKi8KICNkZWZpbmUgU0FBNzEzNF9NQUlOX0NUUkwgICAgICAgICAgICAgICAgICAgICAgICgweDJhOCA+PiAyKQotI2RlZmluZSAgIFNBQTcxMzRfTUFJTl9DVFJMX1ZQTExFCSAgICAgICAJKDEgPDwgMTUpCi0jZGVmaW5lICAgU0FBNzEzNF9NQUlOX0NUUkxfQVBMTEUJICAgICAgIAkoMSA8PCAxNCkKLSNkZWZpbmUgICBTQUE3MTM0X01BSU5fQ1RSTF9FWE9TQwkgICAgICAgCSgxIDw8IDEzKQotI2RlZmluZSAgIFNBQTcxMzRfTUFJTl9DVFJMX0VWRkUxCSAgICAgICAJKDEgPDwgMTIpCi0jZGVmaW5lICAgU0FBNzEzNF9NQUlOX0NUUkxfRVZGRTIJICAgICAgIAkoMSA8PCAxMSkKLSNkZWZpbmUgICBTQUE3MTM0X01BSU5fQ1RSTF9FU0ZFCSAgICAgICAJKDEgPDwgMTApCi0jZGVmaW5lICAgU0FBNzEzNF9NQUlOX0NUUkxfRUJBREMJICAgICAgIAkoMSA8PCA5KQotI2RlZmluZSAgIFNBQTcxMzRfTUFJTl9DVFJMX0VCREFDCSAgICAgICAJKDEgPDwgOCkKKyNkZWZpbmUgICBTQUE3MTM0X01BSU5fQ1RSTF9WUExMRQkJKDEgPDwgMTUpCisjZGVmaW5lICAgU0FBNzEzNF9NQUlOX0NUUkxfQVBMTEUJCSgxIDw8IDE0KQorI2RlZmluZSAgIFNBQTcxMzRfTUFJTl9DVFJMX0VYT1NDCQkoMSA8PCAxMykKKyNkZWZpbmUgICBTQUE3MTM0X01BSU5fQ1RSTF9FVkZFMQkJKDEgPDwgMTIpCisjZGVmaW5lICAgU0FBNzEzNF9NQUlOX0NUUkxfRVZGRTIJCSgxIDw8IDExKQorI2RlZmluZSAgIFNBQTcxMzRfTUFJTl9DVFJMX0VTRkUJCSgxIDw8IDEwKQorI2RlZmluZSAgIFNBQTcxMzRfTUFJTl9DVFJMX0VCQURDCQkoMSA8PCA5KQorI2RlZmluZSAgIFNBQTcxMzRfTUFJTl9DVFJMX0VCREFDCQkoMSA8PCA4KQogI2RlZmluZSAgIFNBQTcxMzRfTUFJTl9DVFJMX1RFNgkJCSgxIDw8IDYpCiAjZGVmaW5lICAgU0FBNzEzNF9NQUlOX0NUUkxfVEU1CQkJKDEgPDwgNSkKICNkZWZpbmUgICBTQUE3MTM0X01BSU5fQ1RSTF9URTQJCQkoMSA8PCA0KQpAQCAtMzQ4LDYgKzM1Niw3IEBACiAKIC8qIHRlc3QgbW9kZXMgKi8KICNkZWZpbmUgU0FBNzEzNF9TUEVDSUFMX01PREUgICAgICAgICAgICAgICAgICAgIDB4MWQwCisjZGVmaW5lIFNBQTcxMzRfUFJPRFVDVElPTl9URVNUX01PREUgICAgICAgICAgICAweDFkMQogCiAvKiBhdWRpbyAtLSBzYWE3MTMzICsgc2FhNzEzNSBvbmx5ICovCiAjZGVmaW5lIFNBQTcxMzVfRFNQX1JXU1RBVEUgICAgICAgICAgICAgICAgICAgICAweDU4MApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtdHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXRzLmMKaW5kZXggNDYzODg1Ni4uNDcwOTAzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtdHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC10cy5jCkBAIC00NiwxNyArNDYsMTEgQEAKIAkJCSAgIHN0cnVjdCBzYWE3MTM0X2J1ZiAqYnVmLAogCQkJICAgc3RydWN0IHNhYTcxMzRfYnVmICpuZXh0KQogewotCXUzMiBjb250cm9sOwogCiAJZHByaW50aygiYnVmZmVyX2FjdGl2YXRlIFslcF0iLGJ1Zik7CiAJYnVmLT52Yi5zdGF0ZSA9IFNUQVRFX0FDVElWRTsKIAlidWYtPnRvcF9zZWVuID0gMDsKIAotICAgICAgICAvKiBkbWE6IHNldHVwIGNoYW5uZWwgNSAoPSBUUykgKi8KLSAgICAgICAgY29udHJvbCA9IFNBQTcxMzRfUlNfQ09OVFJPTF9CVVJTVF8xNiB8Ci0gICAgICAgICAgICAgICAgU0FBNzEzNF9SU19DT05UUk9MX01FIHwKLSAgICAgICAgICAgICAgICAoYnVmLT5wdC0+ZG1hID4+IDEyKTsKLQogCWlmIChOVUxMID09IG5leHQpCiAJCW5leHQgPSBidWY7CiAJaWYgKFY0TDJfRklFTERfVE9QID09IGJ1Zi0+dmIuZmllbGQpIHsKQEAgLTY4LDggKzYyLDYgQEAKIAkJc2FhX3dyaXRlbChTQUE3MTM0X1JTX0JBMSg1KSxzYWE3MTM0X2J1ZmZlcl9iYXNlKG5leHQpKTsKIAkJc2FhX3dyaXRlbChTQUE3MTM0X1JTX0JBMig1KSxzYWE3MTM0X2J1ZmZlcl9iYXNlKGJ1ZikpOwogCX0KLQlzYWFfd3JpdGVsKFNBQTcxMzRfUlNfUElUQ0goNSksVFNfUEFDS0VUX1NJWkUpOwotCXNhYV93cml0ZWwoU0FBNzEzNF9SU19DT05UUk9MKDUpLGNvbnRyb2wpOwogCiAJLyogc3RhcnQgRE1BICovCiAJc2FhNzEzNF9zZXRfZG1hYml0cyhkZXYpOwpAQCAtODQsNiArNzYsNyBAQAogCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2ID0gcS0+cHJpdl9kYXRhOwogCXN0cnVjdCBzYWE3MTM0X2J1ZiAqYnVmID0gY29udGFpbmVyX29mKHZiLHN0cnVjdCBzYWE3MTM0X2J1Zix2Yik7CiAJdW5zaWduZWQgaW50IGxpbmVzLCBsbGVuZ3RoLCBzaXplOworCXUzMiBjb250cm9sOwogCWludCBlcnI7CiAKIAlkcHJpbnRrKCJidWZmZXJfcHJlcGFyZSBbJXAsJXNdXG4iLGJ1Zix2NGwyX2ZpZWxkX25hbWVzW2ZpZWxkXSk7CkBAIC0xMTUsNiArMTA4LDE4IEBACiAJCWlmIChlcnIpCiAJCQlnb3RvIG9vcHM7CiAJfQorCisJLyogZG1hOiBzZXR1cCBjaGFubmVsIDUgKD0gVFMpICovCisJY29udHJvbCA9IFNBQTcxMzRfUlNfQ09OVFJPTF9CVVJTVF8xNiB8CisJCSAgU0FBNzEzNF9SU19DT05UUk9MX01FIHwKKwkJICAoYnVmLT5wdC0+ZG1hID4+IDEyKTsKKworCXNhYV93cml0ZWIoU0FBNzEzNF9UU19ETUEwLCAoKGxpbmVzLTEpJjB4ZmYpKTsKKwlzYWFfd3JpdGViKFNBQTcxMzRfVFNfRE1BMSwgKCgobGluZXMtMSk+PjgpJjB4ZmYpKTsKKwlzYWFfd3JpdGViKFNBQTcxMzRfVFNfRE1BMiwgKCgoKGxpbmVzLTEpPj4xNikmMHgzZikgfCAweDAwKSk7IC8qIFRTTk9QSVQ9MCwgVFNDT0xBUD0wICovCisJc2FhX3dyaXRlbChTQUE3MTM0X1JTX1BJVENIKDUpLFRTX1BBQ0tFVF9TSVpFKTsKKwlzYWFfd3JpdGVsKFNBQTcxMzRfUlNfQ09OVFJPTCg1KSxjb250cm9sKTsKKwogCWJ1Zi0+dmIuc3RhdGUgPSBTVEFURV9QUkVQQVJFRDsKIAlidWYtPmFjdGl2YXRlID0gYnVmZmVyX2FjdGl2YXRlOwogCWJ1Zi0+dmIuZmllbGQgPSBmaWVsZDsKQEAgLTE2NCwxMSArMTY5LDExIEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogZXhwb3J0ZWQgc3R1ZmYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAotc3RhdGljIHVuc2lnbmVkIGludCB0c2J1ZnMgPSA0Oworc3RhdGljIHVuc2lnbmVkIGludCB0c2J1ZnMgPSA4OwogbW9kdWxlX3BhcmFtKHRzYnVmcywgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0ModHNidWZzLCJudW1iZXIgb2YgdHMgYnVmZmVycywgcmFuZ2UgMi0zMiIpOwogCi1zdGF0aWMgdW5zaWduZWQgaW50IHRzX25yX3BhY2tldHMgPSAzMDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdHNfbnJfcGFja2V0cyA9IDY0OwogbW9kdWxlX3BhcmFtKHRzX25yX3BhY2tldHMsIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHRzX25yX3BhY2tldHMsInNpemUgb2YgYSB0cyBidWZmZXJzIChpbiB0cyBwYWNrZXRzKSIpOwogCkBAIC0yMjAsMTAgKzIyNSwxMCBAQAogCWlmIChkZXYtPnRzX3EuY3VycikgewogCQlmaWVsZCA9IGRldi0+dHNfcS5jdXJyLT52Yi5maWVsZDsKIAkJaWYgKGZpZWxkID09IFY0TDJfRklFTERfVE9QKSB7Ci0JCQlpZiAoKHN0YXR1cyAmIDB4MTAwMDAwKSAhPSAweDEwMDAwMCkKKwkJCWlmICgoc3RhdHVzICYgMHgxMDAwMDApICE9IDB4MDAwMDAwKQogCQkJCWdvdG8gZG9uZTsKIAkJfSBlbHNlIHsKLQkJCWlmICgoc3RhdHVzICYgMHgxMDAwMDApICE9IDB4MDAwMDAwKQorCQkJaWYgKChzdGF0dXMgJiAweDEwMDAwMCkgIT0gMHgxMDAwMDApCiAJCQkJZ290byBkb25lOwogCQl9CiAJCXNhYTcxMzRfYnVmZmVyX2ZpbmlzaChkZXYsJmRldi0+dHNfcSxTVEFURV9ET05FKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXR2YXVkaW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXR2YXVkaW8uYwppbmRleCA2MWEyZDZiLi45MzI2ODQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC10dmF1ZGlvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtdHZhdWRpby5jCkBAIC0yMDcsNiArMjA3LDEwIEBACiAJc2FhX3dyaXRlbChTQUE3MTM0X0NBUlJJRVIyX0ZSRVEwID4+IDIsIHR2YXVkaW9fY2FycjJyZWcoc2Vjb25kYXJ5KSk7CiB9CiAKKyNkZWZpbmUgU0FBNzEzNF9NVVRFX01BU0sgMHhiYgorI2RlZmluZSBTQUE3MTM0X01VVEVfQU5BTE9HIDB4MDQKKyNkZWZpbmUgU0FBNzEzNF9NVVRFX0kyUyAweDQwCisKIHN0YXRpYyB2b2lkIG11dGVfaW5wdXRfNzEzNChzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldikKIHsKIAl1bnNpZ25lZCBpbnQgbXV0ZTsKQEAgLTI0MSw3ICsyNDUsMTEgQEAKIAogCWlmIChQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzNCA9PSBkZXYtPnBjaS0+ZGV2aWNlKQogCQkvKiA3MTM0IG11dGUgKi8KLQkJc2FhX3dyaXRlYihTQUE3MTM0X0FVRElPX01VVEVfQ1RSTCwgbXV0ZSA/IDB4YmYgOiAweGJiKTsKKwkJc2FhX3dyaXRlYihTQUE3MTM0X0FVRElPX01VVEVfQ1RSTCwgbXV0ZSA/CisJCQkJCQkgICAgU0FBNzEzNF9NVVRFX01BU0sgfAorCQkJCQkJICAgIFNBQTcxMzRfTVVURV9BTkFMT0cgfAorCQkJCQkJICAgIFNBQTcxMzRfTVVURV9JMlMgOgorCQkJCQkJICAgIFNBQTcxMzRfTVVURV9NQVNLKTsKIAogCS8qIHN3aXRjaCBpbnRlcm5hbCBhdWRpbyBtdXggKi8KIAlzd2l0Y2ggKGluLT5hbXV4KSB7CkBAIC03NTMsMTcgKzc2MSwxNyBAQAogCiAKIAkvKiBzd2l0Y2ggZ3Bpby1jb25uZWN0ZWQgZXh0ZXJuYWwgYXVkaW8gbXV4ICovCi0gICAgICAgIGlmICgwICE9IGNhcmQoZGV2KS5ncGlvbWFzaykgewotICAgICAgICAJbWFzayA9IGNhcmQoZGV2KS5ncGlvbWFzazsKKwlpZiAoMCAhPSBjYXJkKGRldikuZ3Bpb21hc2spIHsKKwkJbWFzayA9IGNhcmQoZGV2KS5ncGlvbWFzazsKIAogCQlpZiAoY2FyZChkZXYpLm11dGUubmFtZSAmJiBkZXYtPmN0bF9tdXRlKQogCQkJaW4gPSAmY2FyZChkZXYpLm11dGU7CiAJCWVsc2UKIAkJCWluID0gZGV2LT5pbnB1dDsKIAotICAgICAgICAJc2FhX2FuZG9ybChTQUE3MTM0X0dQSU9fR1BNT0RFMCA+PiAyLCAgIG1hc2ssIG1hc2spOwotICAgICAgICAJc2FhX2FuZG9ybChTQUE3MTM0X0dQSU9fR1BTVEFUVVMwID4+IDIsIG1hc2ssIGluLT5ncGlvKTsKLSAgICAgICAgCXNhYTcxMzRfdHJhY2tfZ3BpbyhkZXYsaW4tPm5hbWUpOworCQlzYWFfYW5kb3JsKFNBQTcxMzRfR1BJT19HUE1PREUwID4+IDIsICAgbWFzaywgbWFzayk7CisJCXNhYV9hbmRvcmwoU0FBNzEzNF9HUElPX0dQU1RBVFVTMCA+PiAyLCBtYXNrLCBpbi0+Z3Bpbyk7CisJCXNhYTcxMzRfdHJhY2tfZ3BpbyhkZXYsaW4tPm5hbWUpOwogCX0KIAogCXJldHVybiAwOwpAQCAtMTAxNiw5ICsxMDI0LDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKK0VYUE9SVF9TWU1CT0woc2FhX2RzcF93cml0ZWwpOworCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyoKICAqIExvY2FsIHZhcmlhYmxlczoKICAqIGMtYmFzaWMtb2Zmc2V0OiA4CiAgKiBFbmQ6CiAgKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXZpZGVvLmMKaW5kZXggMzVlNWU4NS4uNDVjODUyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtdmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC12aWRlby5jCkBAIC0zMCw2ICszMCw5IEBACiAjaW5jbHVkZSAic2FhNzEzNC1yZWcuaCIKICNpbmNsdWRlICJzYWE3MTM0LmgiCiAKKy8qIEluY2x1ZGUgVjRMMSBzcGVjaWZpYyBmdW5jdGlvbnMuIFNob3VsZCBiZSByZW1vdmVkIHNvb24gKi8KKyNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIHVuc2lnbmVkIGludCB2aWRlb19kZWJ1ZyAgID0gMDsKQEAgLTQ4LDYgKzUxLDQzIEBACiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzL3ZpZGVvOiAiIGZtdCwgZGV2LT5uYW1lICwgIyMgYXJnKQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIERlZmluZXMgZm9yIFZpZGVvIE91dHB1dCBQb3J0IFJlZ2lzdGVyIGF0IGFkZHJlc3MgMHgxOTEgICAgICAgICAgICAqLworCisvKiBCaXQgMDogVklQIGNvZGUgVCBiaXQgcG9sYXJpdHkgKi8KKworI2RlZmluZSBWUF9UX0NPREVfUF9OT05fSU5WRVJURUQJMHgwMAorI2RlZmluZSBWUF9UX0NPREVfUF9JTlZFUlRFRAkJMHgwMQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIERlZmluZXMgZm9yIFZpZGVvIE91dHB1dCBQb3J0IFJlZ2lzdGVyIGF0IGFkZHJlc3MgMHgxOTUgICAgICAgICAgICAqLworCisvKiBCaXQgMjogVmlkZW8gb3V0cHV0IGNsb2NrIGRlbGF5IGNvbnRyb2wgKi8KKworI2RlZmluZSBWUF9DTEtfQ1RSTDJfTk9UX0RFTEFZRUQJMHgwMAorI2RlZmluZSBWUF9DTEtfQ1RSTDJfREVMQVlFRAkJMHgwNAorCisvKiBCaXQgMTogVmlkZW8gb3V0cHV0IGNsb2NrIGludmVydCBjb250cm9sICovCisKKyNkZWZpbmUgVlBfQ0xLX0NUUkwxX05PTl9JTlZFUlRFRAkweDAwCisjZGVmaW5lIFZQX0NMS19DVFJMMV9JTlZFUlRFRAkJMHgwMgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIERlZmluZXMgZm9yIFZpZGVvIE91dHB1dCBQb3J0IFJlZ2lzdGVyIGF0IGFkZHJlc3MgMHgxOTYgICAgICAgICAgICAqLworCisvKiBCaXRzIDIgdG8gMDogVlNZTkMgcGluIHZpZGVvIHZlcnRpY2FsIHN5bmMgdHlwZSAqLworCisjZGVmaW5lIFZQX1ZTX1RZUEVfTUFTSwkJCTB4MDcKKworI2RlZmluZSBWUF9WU19UWVBFX09GRgkJCTB4MDAKKyNkZWZpbmUgVlBfVlNfVFlQRV9WMTIzCQkJMHgwMQorI2RlZmluZSBWUF9WU19UWVBFX1ZfSVRVCQkweDAyCisjZGVmaW5lIFZQX1ZTX1RZUEVfVkdBVEVfTAkJMHgwMworI2RlZmluZSBWUF9WU19UWVBFX1JFU0VSVkVEMQkJMHgwNAorI2RlZmluZSBWUF9WU19UWVBFX1JFU0VSVkVEMgkJMHgwNQorI2RlZmluZSBWUF9WU19UWVBFX0ZfSVRVCQkweDA2CisjZGVmaW5lIFZQX1ZTX1RZUEVfU0NfRklECQkweDA3CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogZGF0YSBzdHJ1Y3RzIGZvciB2aWRlbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKIHN0YXRpYyBpbnQgdmlkZW9fb3V0W11bOV0gPSB7CkBAIC0yNzMsMTIgKzMxMywxMiBAQAogCiAJCS5oX3N0YXJ0ICAgICAgID0gMCwKIAkJLmhfc3RvcCAgICAgICAgPSA3MTksCi0gIAkJLnZpZGVvX3Zfc3RhcnQgPSAyMywKLSAgCQkudmlkZW9fdl9zdG9wICA9IDI2MiwKLSAgCQkudmJpX3Zfc3RhcnRfMCA9IDEwLAotICAJCS52Ymlfdl9zdG9wXzAgID0gMjEsCi0gIAkJLnZiaV92X3N0YXJ0XzEgPSAyNzMsCi0gIAkJLnNyY190aW1pbmcgICAgPSA3LAorCQkudmlkZW9fdl9zdGFydCA9IDIzLAorCQkudmlkZW9fdl9zdG9wICA9IDI2MiwKKwkJLnZiaV92X3N0YXJ0XzAgPSAxMCwKKwkJLnZiaV92X3N0b3BfMCAgPSAyMSwKKwkJLnZiaV92X3N0YXJ0XzEgPSAyNzMsCisJCS5zcmNfdGltaW5nICAgID0gNywKIAogCQkuc3luY19jb250cm9sICA9IDB4MTgsCiAJCS5sdW1hX2NvbnRyb2wgID0gMHg0MCwKQEAgLTYyMiw3ICs2NjIsNyBAQAogCQlwcmVzY2FsZSA9IDE7CiAJeHNjYWxlID0gMTAyNCAqIGRldi0+Y3JvcF9jdXJyZW50LndpZHRoIC8gcHJlc2NhbGUgLyB3aWR0aDsKIAl5c2NhbGUgPSA1MTIgKiBkaXYgKiBkZXYtPmNyb3BfY3VycmVudC5oZWlnaHQgLyBoZWlnaHQ7Ci0gICAgICAgCWRwcmludGsoInByZXNjYWxlPSVkIHhzY2FsZT0lZCB5c2NhbGU9JWRcbiIscHJlc2NhbGUseHNjYWxlLHlzY2FsZSk7CisJZHByaW50aygicHJlc2NhbGU9JWQgeHNjYWxlPSVkIHlzY2FsZT0lZFxuIixwcmVzY2FsZSx4c2NhbGUseXNjYWxlKTsKIAlzZXRfaF9wcmVzY2FsZShkZXYsdGFzayxwcmVzY2FsZSk7CiAJc2FhX3dyaXRlYihTQUE3MTM0X0hfU0NBTEVfSU5DMSh0YXNrKSwgICAgICB4c2NhbGUgJiAgMHhmZik7CiAJc2FhX3dyaXRlYihTQUE3MTM0X0hfU0NBTEVfSU5DMih0YXNrKSwgICAgICB4c2NhbGUgPj4gOCk7CkBAIC03NTIsMjAgKzc5MiwyMCBAQAogCW1heGggID0gZGV2LT5jcm9wX2N1cnJlbnQuaGVpZ2h0OwogCiAJaWYgKFY0TDJfRklFTERfQU5ZID09IGZpZWxkKSB7Ci0gICAgICAgICAgICAgICAgZmllbGQgPSAod2luLT53LmhlaWdodCA+IG1heGgvMikKLSAgICAgICAgICAgICAgICAgICAgICAgID8gVjRMMl9GSUVMRF9JTlRFUkxBQ0VECi0gICAgICAgICAgICAgICAgICAgICAgICA6IFY0TDJfRklFTERfVE9QOwotICAgICAgICB9Ci0gICAgICAgIHN3aXRjaCAoZmllbGQpIHsKLSAgICAgICAgY2FzZSBWNEwyX0ZJRUxEX1RPUDoKLSAgICAgICAgY2FzZSBWNEwyX0ZJRUxEX0JPVFRPTToKLSAgICAgICAgICAgICAgICBtYXhoID0gbWF4aCAvIDI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwotICAgICAgICB9CisJCWZpZWxkID0gKHdpbi0+dy5oZWlnaHQgPiBtYXhoLzIpCisJCQk/IFY0TDJfRklFTERfSU5URVJMQUNFRAorCQkJOiBWNEwyX0ZJRUxEX1RPUDsKKwl9CisJc3dpdGNoIChmaWVsZCkgeworCWNhc2UgVjRMMl9GSUVMRF9UT1A6CisJY2FzZSBWNEwyX0ZJRUxEX0JPVFRPTToKKwkJbWF4aCA9IG1heGggLyAyOworCQlicmVhazsKKwljYXNlIFY0TDJfRklFTERfSU5URVJMQUNFRDoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQogCiAJd2luLT5maWVsZCA9IGZpZWxkOwogCWlmICh3aW4tPncud2lkdGggPiBtYXh3KQpAQCAtMTMwNiwxMyArMTM0NiwxMyBAQAogCQkJaWYgKHJlc19sb2NrZWQoZmgtPmRldixSRVNPVVJDRV9WSURFTykpIHsKIAkJCQl1cCgmZmgtPmNhcC5sb2NrKTsKIAkJCQlyZXR1cm4gUE9MTEVSUjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgwICE9IGZoLT5jYXAub3BzLT5idWZfcHJlcGFyZSgmZmgtPmNhcCxmaC0+Y2FwLnJlYWRfYnVmLGZoLT5jYXAuZmllbGQpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwKCZmaC0+Y2FwLmxvY2spOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUE9MTEVSUjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZoLT5jYXAub3BzLT5idWZfcXVldWUoJmZoLT5jYXAsZmgtPmNhcC5yZWFkX2J1Zik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaC0+Y2FwLnJlYWRfb2ZmID0gMDsKKwkJCX0KKwkJCWlmICgwICE9IGZoLT5jYXAub3BzLT5idWZfcHJlcGFyZSgmZmgtPmNhcCxmaC0+Y2FwLnJlYWRfYnVmLGZoLT5jYXAuZmllbGQpKSB7CisJCQkJdXAoJmZoLT5jYXAubG9jayk7CisJCQkJcmV0dXJuIFBPTExFUlI7CisJCQl9CisJCQlmaC0+Y2FwLm9wcy0+YnVmX3F1ZXVlKCZmaC0+Y2FwLGZoLT5jYXAucmVhZF9idWYpOworCQkJZmgtPmNhcC5yZWFkX29mZiA9IDA7CiAJCX0KIAkJdXAoJmZoLT5jYXAubG9jayk7CiAJCWJ1ZiA9IGZoLT5jYXAucmVhZF9idWY7CkBAIC0xNjY2LDkgKzE3MDYsMTAgQEAKIAljYXNlIFZJRElPQ19RVUVSWUNBUDoKIAl7CiAJCXN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKmNhcCA9IGFyZzsKKwkJdW5zaWduZWQgaW50IHR1bmVyX3R5cGUgPSBkZXYtPnR1bmVyX3R5cGU7CiAKIAkJbWVtc2V0KGNhcCwwLHNpemVvZigqY2FwKSk7Ci0gICAgICAgICAgICAgICAgc3RyY3B5KGNhcC0+ZHJpdmVyLCAic2FhNzEzNCIpOworCQlzdHJjcHkoY2FwLT5kcml2ZXIsICJzYWE3MTM0Iik7CiAJCXN0cmxjcHkoY2FwLT5jYXJkLCBzYWE3MTM0X2JvYXJkc1tkZXYtPmJvYXJkXS5uYW1lLAogCQkJc2l6ZW9mKGNhcC0+Y2FyZCkpOwogCQlzcHJpbnRmKGNhcC0+YnVzX2luZm8sIlBDSTolcyIscGNpX25hbWUoZGV2LT5wY2kpKTsKQEAgLTE2NzcsOSArMTcxOCwxMyBAQAogCQkJVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8CiAJCQlWNEwyX0NBUF9WSURFT19PVkVSTEFZIHwKIAkJCVY0TDJfQ0FQX1ZCSV9DQVBUVVJFIHwKLQkJCVY0TDJfQ0FQX1RVTkVSIHwKIAkJCVY0TDJfQ0FQX1JFQURXUklURSB8Ci0JCQlWNEwyX0NBUF9TVFJFQU1JTkc7CisJCQlWNEwyX0NBUF9TVFJFQU1JTkcgfAorCQkJVjRMMl9DQVBfVFVORVI7CisKKwkJaWYgKCh0dW5lcl90eXBlID09IFRVTkVSX0FCU0VOVCkgfHwgKHR1bmVyX3R5cGUgPT0gVU5TRVQpKQorCQkJY2FwLT5jYXBhYmlsaXRpZXMgJj0gflY0TDJfQ0FQX1RVTkVSOworCiAJCXJldHVybiAwOwogCX0KIApAQCAtMTc5Myw5ICsxODM4LDkgQEAKIAkJCWNyb3AtPmMuaGVpZ2h0ID0gYi0+dG9wIC0gY3JvcC0+Yy50b3AgKyBiLT5oZWlnaHQ7CiAKIAkJaWYgKGNyb3AtPmMubGVmdCA8IGItPmxlZnQpCi0JCQljcm9wLT5jLnRvcCA9IGItPmxlZnQ7CisJCQljcm9wLT5jLmxlZnQgPSBiLT5sZWZ0OwogCQlpZiAoY3JvcC0+Yy5sZWZ0ID4gYi0+bGVmdCArIGItPndpZHRoKQotCQkJY3JvcC0+Yy50b3AgPSBiLT5sZWZ0ICsgYi0+d2lkdGg7CisJCQljcm9wLT5jLmxlZnQgPSBiLT5sZWZ0ICsgYi0+d2lkdGg7CiAJCWlmIChjcm9wLT5jLndpZHRoID4gYi0+bGVmdCAtIGNyb3AtPmMubGVmdCArIGItPndpZHRoKQogCQkJY3JvcC0+Yy53aWR0aCA9IGItPmxlZnQgLSBjcm9wLT5jLmxlZnQgKyBiLT53aWR0aDsKIApAQCAtMTgxNyw2ICsxODYyLDcgQEAKIAkJCQlicmVhazsKIAkJaWYgKE5VTEwgIT0gY2FyZF9pbihkZXYsbikubmFtZSkgewogCQkJc3RyY3B5KHQtPm5hbWUsICJUZWxldmlzaW9uIik7CisJCQl0LT50eXBlID0gVjRMMl9UVU5FUl9BTkFMT0dfVFY7CiAJCQl0LT5jYXBhYmlsaXR5ID0gVjRMMl9UVU5FUl9DQVBfTk9STSB8CiAJCQkJVjRMMl9UVU5FUl9DQVBfU1RFUkVPIHwKIAkJCQlWNEwyX1RVTkVSX0NBUF9MQU5HMSB8CkBAIC0xODkyLDI2ICsxOTM4LDI2IEBACiAJfQogCWNhc2UgVklESU9DX1NfQVVESU86CiAJCXJldHVybiAwOwotICAgICAgICBjYXNlIFZJRElPQ19HX1BBUk06Ci0gICAgICAgIHsKLSAgICAgICAgICAgICAgICBzdHJ1Y3QgdjRsMl9jYXB0dXJlcGFybSAqcGFybSA9IGFyZzsKLSAgICAgICAgICAgICAgICBtZW1zZXQocGFybSwwLHNpemVvZigqcGFybSkpOwotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9CisJY2FzZSBWSURJT0NfR19QQVJNOgorCXsKKwkJc3RydWN0IHY0bDJfY2FwdHVyZXBhcm0gKnBhcm0gPSBhcmc7CisJCW1lbXNldChwYXJtLDAsc2l6ZW9mKCpwYXJtKSk7CisJCXJldHVybiAwOworCX0KIAotICAgICAgICBjYXNlIFZJRElPQ19HX1BSSU9SSVRZOgotICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZW51bSB2NGwyX3ByaW9yaXR5ICpwID0gYXJnOworCWNhc2UgVklESU9DX0dfUFJJT1JJVFk6CisJeworCQllbnVtIHY0bDJfcHJpb3JpdHkgKnAgPSBhcmc7CiAKLSAgICAgICAgICAgICAgICAqcCA9IHY0bDJfcHJpb19tYXgoJmRldi0+cHJpbyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBWSURJT0NfU19QUklPUklUWToKLSAgICAgICAgewotICAgICAgICAgICAgICAgIGVudW0gdjRsMl9wcmlvcml0eSAqcHJpbyA9IGFyZzsKKwkJKnAgPSB2NGwyX3ByaW9fbWF4KCZkZXYtPnByaW8pOworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBWSURJT0NfU19QUklPUklUWToKKwl7CisJCWVudW0gdjRsMl9wcmlvcml0eSAqcHJpbyA9IGFyZzsKIAotICAgICAgICAgICAgICAgIHJldHVybiB2NGwyX3ByaW9fY2hhbmdlKCZkZXYtPnByaW8sICZmaC0+cHJpbywgKnByaW8pOwotICAgICAgICB9CisJCXJldHVybiB2NGwyX3ByaW9fY2hhbmdlKCZkZXYtPnByaW8sICZmaC0+cHJpbywgKnByaW8pOworCX0KIAogCS8qIC0tLSBwcmV2aWV3IGlvY3RscyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAJY2FzZSBWSURJT0NfRU5VTV9GTVQ6CkBAIC0yMDE4LDcgKzIwNjQsNyBAQAogCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYgPSBhcmc7CiAJCXJldHVybiBzYWE3MTM0X3RyeV9mbXQoZGV2LGZoLGYpOwogCX0KLQorI2lmZGVmIEhBVkVfVjRMMQogCWNhc2UgVklESU9DR01CVUY6CiAJewogCQlzdHJ1Y3QgdmlkZW9fbWJ1ZiAqbWJ1ZiA9IGFyZzsKQEAgLTIwNDMsNiArMjA4OSw3IEBACiAJCX0KIAkJcmV0dXJuIDA7CiAJfQorI2VuZGlmCiAJY2FzZSBWSURJT0NfUkVRQlVGUzoKIAkJcmV0dXJuIHZpZGVvYnVmX3JlcWJ1ZnMoc2FhNzEzNF9xdWV1ZShmaCksYXJnKTsKIApAQCAtMjA2MCw3ICsyMTA3LDcgQEAKIAl7CiAJCWludCByZXMgPSBzYWE3MTM0X3Jlc291cmNlKGZoKTsKIAotICAgICAgICAgICAgICAgIGlmICghcmVzX2dldChkZXYsZmgscmVzKSkKKwkJaWYgKCFyZXNfZ2V0KGRldixmaCxyZXMpKQogCQkJcmV0dXJuIC1FQlVTWTsKIAkJcmV0dXJuIHZpZGVvYnVmX3N0cmVhbW9uKHNhYTcxMzRfcXVldWUoZmgpKTsKIAl9CkBAIC0yMTAyLDcgKzIxNDksNyBAQAogCQlzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICpjYXAgPSBhcmc7CiAKIAkJbWVtc2V0KGNhcCwwLHNpemVvZigqY2FwKSk7Ci0gICAgICAgICAgICAgICAgc3RyY3B5KGNhcC0+ZHJpdmVyLCAic2FhNzEzNCIpOworCQlzdHJjcHkoY2FwLT5kcml2ZXIsICJzYWE3MTM0Iik7CiAJCXN0cmxjcHkoY2FwLT5jYXJkLCBzYWE3MTM0X2JvYXJkc1tkZXYtPmJvYXJkXS5uYW1lLAogCQkJc2l6ZW9mKGNhcC0+Y2FyZCkpOwogCQlzcHJpbnRmKGNhcC0+YnVzX2luZm8sIlBDSTolcyIscGNpX25hbWUoZGV2LT5wY2kpKTsKQEAgLTIxMTksNiArMjE2Niw3IEBACiAKIAkJbWVtc2V0KHQsMCxzaXplb2YoKnQpKTsKIAkJc3RyY3B5KHQtPm5hbWUsICJSYWRpbyIpOworCQl0LT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKIAogCQlzYWE3MTM0X2kyY19jYWxsX2NsaWVudHMoZGV2LCBWSURJT0NfR19UVU5FUiwgdCk7CiAKQEAgLTIyMzMsNyArMjI4MSw3IEBACiB7CiAJLm5hbWUgICAgICAgICAgPSAic2FhNzEzNC12aWRlbyIsCiAJLnR5cGUgICAgICAgICAgPSBWSURfVFlQRV9DQVBUVVJFfFZJRF9UWVBFX1RVTkVSfFZJRF9UWVBFX09WRVJMQVl8Ci0JICAgICAgICAgICAgICAgICBWSURfVFlQRV9DTElQUElOR3xWSURfVFlQRV9TQ0FMRVMsCisJCQkgVklEX1RZUEVfQ0xJUFBJTkd8VklEX1RZUEVfU0NBTEVTLAogCS5oYXJkd2FyZSAgICAgID0gMCwKIAkuZm9wcyAgICAgICAgICA9ICZ2aWRlb19mb3BzLAogCS5taW5vciAgICAgICAgID0gLTEsCkBAIC0yMjgwLDcgKzIzMjgsNyBAQAogCQlkZXYtPnRkYTk4ODdfY29uZiB8PSBUREE5ODg3X0FVVE9NVVRFOwogCWRldi0+YXV0b211dGUgICAgICAgPSAwOwogCi0gICAgICAgIElOSVRfTElTVF9IRUFEKCZkZXYtPnZpZGVvX3EucXVldWUpOworCUlOSVRfTElTVF9IRUFEKCZkZXYtPnZpZGVvX3EucXVldWUpOwogCWluaXRfdGltZXIoJmRldi0+dmlkZW9fcS50aW1lb3V0KTsKIAlkZXYtPnZpZGVvX3EudGltZW91dC5mdW5jdGlvbiA9IHNhYTcxMzRfYnVmZmVyX3RpbWVvdXQ7CiAJZGV2LT52aWRlb19xLnRpbWVvdXQuZGF0YSAgICAgPSAodW5zaWduZWQgbG9uZykoJmRldi0+dmlkZW9fcSk7CkBAIC0yMjg5LDEzICsyMzM3LDI4IEBACiAJaWYgKHNhYTcxMzRfYm9hcmRzW2Rldi0+Ym9hcmRdLnZpZGVvX291dCkgewogCQkvKiBlbmFibGUgdmlkZW8gb3V0cHV0ICovCiAJCWludCB2byA9IHNhYTcxMzRfYm9hcmRzW2Rldi0+Ym9hcmRdLnZpZGVvX291dDsKKwkJaW50IHZpZGVvX3JlZzsKKwkJdW5zaWduZWQgaW50IHZpZF9wb3J0X29wdHMgPSBzYWE3MTM0X2JvYXJkc1tkZXYtPmJvYXJkXS52aWRfcG9ydF9vcHRzOwogCQlzYWFfd3JpdGViKFNBQTcxMzRfVklERU9fUE9SVF9DVFJMMCwgdmlkZW9fb3V0W3ZvXVswXSk7Ci0JCXNhYV93cml0ZWIoU0FBNzEzNF9WSURFT19QT1JUX0NUUkwxLCB2aWRlb19vdXRbdm9dWzFdKTsKKwkJdmlkZW9fcmVnID0gdmlkZW9fb3V0W3ZvXVsxXTsKKwkJaWYgKHZpZF9wb3J0X29wdHMgJiBTRVRfVF9DT0RFX1BPTEFSSVRZX05PTl9JTlZFUlRFRCkKKwkJCXZpZGVvX3JlZyAmPSB+VlBfVF9DT0RFX1BfSU5WRVJURUQ7CisJCXNhYV93cml0ZWIoU0FBNzEzNF9WSURFT19QT1JUX0NUUkwxLCB2aWRlb19yZWcpOwogCQlzYWFfd3JpdGViKFNBQTcxMzRfVklERU9fUE9SVF9DVFJMMiwgdmlkZW9fb3V0W3ZvXVsyXSk7CiAJCXNhYV93cml0ZWIoU0FBNzEzNF9WSURFT19QT1JUX0NUUkwzLCB2aWRlb19vdXRbdm9dWzNdKTsKIAkJc2FhX3dyaXRlYihTQUE3MTM0X1ZJREVPX1BPUlRfQ1RSTDQsIHZpZGVvX291dFt2b11bNF0pOwotCQlzYWFfd3JpdGViKFNBQTcxMzRfVklERU9fUE9SVF9DVFJMNSwgdmlkZW9fb3V0W3ZvXVs1XSk7Ci0JCXNhYV93cml0ZWIoU0FBNzEzNF9WSURFT19QT1JUX0NUUkw2LCB2aWRlb19vdXRbdm9dWzZdKTsKKwkJdmlkZW9fcmVnID0gdmlkZW9fb3V0W3ZvXVs1XTsKKwkJaWYgKHZpZF9wb3J0X29wdHMgJiBTRVRfQ0xPQ0tfTk9UX0RFTEFZRUQpCisJCQl2aWRlb19yZWcgJj0gflZQX0NMS19DVFJMMl9ERUxBWUVEOworCQlpZiAodmlkX3BvcnRfb3B0cyAmIFNFVF9DTE9DS19JTlZFUlRFRCkKKwkJCXZpZGVvX3JlZyB8PSBWUF9DTEtfQ1RSTDFfSU5WRVJURUQ7CisJCXNhYV93cml0ZWIoU0FBNzEzNF9WSURFT19QT1JUX0NUUkw1LCB2aWRlb19yZWcpOworCQl2aWRlb19yZWcgPSB2aWRlb19vdXRbdm9dWzZdOworCQlpZiAodmlkX3BvcnRfb3B0cyAmIFNFVF9WU1lOQ19PRkYpIHsKKwkJCXZpZGVvX3JlZyAmPSB+VlBfVlNfVFlQRV9NQVNLOworCQkJdmlkZW9fcmVnIHw9IFZQX1ZTX1RZUEVfT0ZGOworCQl9CisJCXNhYV93cml0ZWIoU0FBNzEzNF9WSURFT19QT1JUX0NUUkw2LCB2aWRlb19yZWcpOwogCQlzYWFfd3JpdGViKFNBQTcxMzRfVklERU9fUE9SVF9DVFJMNywgdmlkZW9fb3V0W3ZvXVs3XSk7CiAJCXNhYV93cml0ZWIoU0FBNzEzNF9WSURFT19QT1JUX0NUUkw4LCB2aWRlb19vdXRbdm9dWzhdKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQuaAppbmRleCA4NjBiODk1Li5mYjk3Mjc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LmgKQEAgLTI0LDE2ICsyNCwxOCBAQAogCiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KICNpbmNsdWRlIDxsaW51eC9rZGV2X3QuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgogCiAjaW5jbHVkZSA8bWVkaWEvdHVuZXIuaD4KICNpbmNsdWRlIDxtZWRpYS9hdWRpb2NoaXAuaD4KLSNpbmNsdWRlIDxtZWRpYS9pZC5oPgogI2luY2x1ZGUgPG1lZGlhL2lyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL2lyLWtiZC1pMmMuaD4KICNpbmNsdWRlIDxtZWRpYS92aWRlby1idWYuaD4KICNpbmNsdWRlIDxtZWRpYS92aWRlby1idWYtZHZiLmg+CiAKQEAgLTQ1LDYgKzQ3LDEwIEBACiAjZW5kaWYKICNkZWZpbmUgVU5TRVQgKC0xVSkKIAorI2luY2x1ZGUgPHNvdW5kL2RyaXZlci5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIGVudW1zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKQEAgLTE4NywxMCArMTkzLDM5IEBACiAjZGVmaW5lIFNBQTcxMzRfQk9BUkRfRkxZVFZfRElHSU1BVFJJWCA2NAogI2RlZmluZSBTQUE3MTM0X0JPQVJEX0tXT1JMRF9URVJNSU5BVE9SIDY1CiAjZGVmaW5lIFNBQTcxMzRfQk9BUkRfWVVBTl9UVU45MDAgNjYKKyNkZWZpbmUgU0FBNzEzNF9CT0FSRF9CRUhPTERfNDA5Rk0gNjcKKyNkZWZpbmUgU0FBNzEzNF9CT0FSRF9HT1RWSUVXXzcxMzUgNjgKKyNkZWZpbmUgU0FBNzEzNF9CT0FSRF9QSElMSVBTX0VVUk9QQSAgNjkKKyNkZWZpbmUgU0FBNzEzNF9CT0FSRF9WSURFT01BVEVfRFZCVF8zMDAgNzAKKyNkZWZpbmUgU0FBNzEzNF9CT0FSRF9WSURFT01BVEVfRFZCVF8yMDAgNzEKKyNkZWZpbmUgU0FBNzEzNF9CT0FSRF9SVERfVkZHNzM1MCA3MgorI2RlZmluZSBTQUE3MTM0X0JPQVJEX1JURF9WRkc3MzMwIDczCisjZGVmaW5lIFNBQTcxMzRfQk9BUkRfRkxZVFZQTEFUSU5VTV9NSU5JMiA3NAorI2RlZmluZSBTQUE3MTM0X0JPQVJEX0FWRVJNRURJQV9BVkVSVFZIRF9BMTgwIDc1CisjZGVmaW5lIFNBQTcxMzRfQk9BUkRfTU9OU1RFUlRWX01PQklMRSA3NgorI2RlZmluZSBTQUE3MTM0X0JPQVJEX1BJTk5BQ0xFX1BDVFZfMTEwaSA3NworI2RlZmluZSBTQUE3MTM0X0JPQVJEX0FTVVNUZUtfUDcxMzFfRFVBTCA3OAorI2RlZmluZSBTQUE3MTM0X0JPQVJEX1NFRE5BX1BDX1RWX0NBUkRCVVMgICAgIDc5CisjZGVmaW5lIFNBQTcxMzRfQk9BUkRfQVNVU1RFS19ESUdJTUFUUklYX1RWIDgwCisjZGVmaW5lIFNBQTcxMzRfQk9BUkRfUEhJTElQU19USUdFUiAgODEKIAogI2RlZmluZSBTQUE3MTM0X01BWEJPQVJEUyA4CiAjZGVmaW5lIFNBQTcxMzRfSU5QVVRfTUFYIDgKIAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIFNpbmNlIHdlIHN1cHBvcnQgMiByZW1vdGUgdHlwZXMsIGxldHMgdGVsbCB0aGVtIGFwYXJ0ICAgICAgICovCisKKyNkZWZpbmUgU0FBNzEzNF9SRU1PVEVfR1BJTyAgMQorI2RlZmluZSBTQUE3MTM0X1JFTU9URV9JMkMgICAyCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBWaWRlbyBPdXRwdXQgUG9ydCBSZWdpc3RlciBJbml0aWFsaXphdGlvbiBPcHRpb25zICAgICAgICAgICAqLworCisjZGVmaW5lIFNFVF9UX0NPREVfUE9MQVJJVFlfTk9OX0lOVkVSVEVECSgxIDw8IDApCisjZGVmaW5lIFNFVF9DTE9DS19OT1RfREVMQVlFRAkJCSgxIDw8IDEpCisjZGVmaW5lIFNFVF9DTE9DS19JTlZFUlRFRAkJCSgxIDw8IDIpCisjZGVmaW5lIFNFVF9WU1lOQ19PRkYJCQkJKDEgPDwgMykKKwogc3RydWN0IHNhYTcxMzRfaW5wdXQgewogCWNoYXIgICAgICAgICAgICAgICAgICAgICpuYW1lOwogCXVuc2lnbmVkIGludCAgICAgICAgICAgIHZtdXg7CkBAIC0yMjYsNiArMjYxLDcgQEAKIAkvKiBwZXJpcGhlcmFsIEkvTyAqLwogCWVudW0gc2FhNzEzNF92aWRlb19vdXQgIHZpZGVvX291dDsKIAllbnVtIHNhYTcxMzRfbXBlZ190eXBlICBtcGVnOworCXVuc2lnbmVkIGludCAgICAgICAgICAgIHZpZF9wb3J0X29wdHM7CiB9OwogCiAjZGVmaW5lIGNhcmRfaGFzX3JhZGlvKGRldikgICAoTlVMTCAhPSBzYWE3MTM0X2JvYXJkc1tkZXYtPmJvYXJkXS5yYWRpby5uYW1lKQpAQCAtMzE5LDkgKzM1NSw5IEBACiAJc3RydWN0IHNhYTcxMzRfcGd0YWJsZSAgICAgcHRfdmJpOwogfTsKIAotLyogb3NzIGRzcCBzdGF0dXMgKi8KLXN0cnVjdCBzYWE3MTM0X29zcyB7Ci0gICAgICAgIHN0cnVjdCBzZW1hcGhvcmUgICAgICAgICAgIGxvY2s7CisvKiBkbWFzb3VuZCBkc3Agc3RhdHVzICovCitzdHJ1Y3Qgc2FhNzEzNF9kbWFzb3VuZCB7CisJc3RydWN0IHNlbWFwaG9yZSAgICAgICAgICAgbG9jazsKIAlpbnQgICAgICAgICAgICAgICAgICAgICAgICBtaW5vcl9taXhlcjsKIAlpbnQgICAgICAgICAgICAgICAgICAgICAgICBtaW5vcl9kc3A7CiAJdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgdXNlcnNfZHNwOwpAQCAtMzQ3LDYgKzM4Myw3IEBACiAJdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgZG1hX2JsazsKIAl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICByZWFkX29mZnNldDsKIAl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICByZWFkX2NvdW50OworCXNuZF9wY21fc3Vic3RyZWFtX3QgCSAgICpzdWJzdHJlYW07CiB9OwogCiAvKiBJUiBpbnB1dCAqLwpAQCAtMzU4LDkgKzM5NSw5IEBACiAJdTMyICAgICAgICAgICAgICAgICAgICAgICAgbWFza19rZXljb2RlOwogCXUzMiAgICAgICAgICAgICAgICAgICAgICAgIG1hc2tfa2V5ZG93bjsKIAl1MzIgICAgICAgICAgICAgICAgICAgICAgICBtYXNrX2tleXVwOwotICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICBwb2xsaW5nOwotICAgICAgICB1MzIgICAgICAgICAgICAgICAgICAgICAgICBsYXN0X2dwaW87Ci0gICAgICAgIHN0cnVjdCB0aW1lcl9saXN0ICAgICAgICAgIHRpbWVyOworCWludCAgICAgICAgICAgICAgICAgICAgICAgIHBvbGxpbmc7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgbGFzdF9ncGlvOworCXN0cnVjdCB0aW1lcl9saXN0ICAgICAgICAgIHRpbWVyOwogfTsKIAogLyogdHMvbXBlZyBzdGF0dXMgKi8KQEAgLTM4Myw4ICs0MjAsOCBAQAogLyogZ2xvYmFsIGRldmljZSBzdGF0dXMgKi8KIHN0cnVjdCBzYWE3MTM0X2RldiB7CiAJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgICAgZGV2bGlzdDsKLSAgICAgICAgc3RydWN0IHNlbWFwaG9yZSAgICAgICAgICAgbG9jazsKLSAgICAgICAJc3BpbmxvY2tfdCAgICAgICAgICAgICAgICAgc2xvY2s7CisJc3RydWN0IHNlbWFwaG9yZSAgICAgICAgICAgbG9jazsKKwlzcGlubG9ja190ICAgICAgICAgICAgICAgICBzbG9jazsKICNpZmRlZiBWSURJT0NfR19QUklPUklUWQogCXN0cnVjdCB2NGwyX3ByaW9fc3RhdGUgICAgIHByaW87CiAjZW5kaWYKQEAgLTM5NCw3ICs0MzEsNyBAQAogCXN0cnVjdCB2aWRlb19kZXZpY2UgICAgICAgICp2aWRlb19kZXY7CiAJc3RydWN0IHZpZGVvX2RldmljZSAgICAgICAgKnJhZGlvX2RldjsKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICAgICAgICAqdmJpX2RldjsKLQlzdHJ1Y3Qgc2FhNzEzNF9vc3MgICAgICAgICBvc3M7CisJc3RydWN0IHNhYTcxMzRfZG1hc291bmQgICAgZG1hc291bmQ7CiAKIAkvKiBpbmZyYXJlZCByZW1vdGUgKi8KIAlpbnQgICAgICAgICAgICAgICAgICAgICAgICBoYXNfcmVtb3RlOwpAQCAtNDIxLDcgKzQ1OCw3IEBACiAJLyogaTJjIGkvbyAqLwogCXN0cnVjdCBpMmNfYWRhcHRlciAgICAgICAgIGkyY19hZGFwOwogCXN0cnVjdCBpMmNfY2xpZW50ICAgICAgICAgIGkyY19jbGllbnQ7Ci0JdW5zaWduZWQgY2hhciAgICAgICAgICAgICAgZWVkYXRhWzY0XTsKKwl1bnNpZ25lZCBjaGFyICAgICAgICAgICAgICBlZWRhdGFbMTI4XTsKIAogCS8qIHZpZGVvIG92ZXJsYXkgKi8KIAlzdHJ1Y3QgdjRsMl9mcmFtZWJ1ZmZlciAgICBvdmJ1ZjsKQEAgLTYyNiw2ICs2NjMsNyBAQAogaW50ICBzYWE3MTM0X2lucHV0X2luaXQxKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2KTsKIHZvaWQgc2FhNzEzNF9pbnB1dF9maW5pKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2KTsKIHZvaWQgc2FhNzEzNF9pbnB1dF9pcnEoc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYpOwordm9pZCBzYWE3MTM0X3NldF9pMmNfaXIoc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYsIHN0cnVjdCBJUl9pMmMgKmlyKTsKIAogLyoKICAqIExvY2FsIHZhcmlhYmxlczoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGRhNzQzMi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90ZGE3NDMyLmMKaW5kZXggMjU1YjYwOC4uZDMyNzM3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90ZGE3NDMyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90ZGE3NDMyLmMKQEAgLTUwLDcgKzUwLDYgQEAKIAogI2luY2x1ZGUgImJ0dHYuaCIKICNpbmNsdWRlIDxtZWRpYS9hdWRpb2NoaXAuaD4KLSNpbmNsdWRlIDxtZWRpYS9pZC5oPgogCiAjaWZuZGVmIFZJREVPX0FVRElPX0JBTEFOQ0UKICMgZGVmaW5lIFZJREVPX0FVRElPX0JBTEFOQ0UgMzIKQEAgLTMxMCw5ICszMDksOSBAQAogCW1lbXNldCh0LDAsc2l6ZW9mICp0KTsKIAogCWNsaWVudCA9ICZ0LT5jOwotICAgICAgICBtZW1jcHkoY2xpZW50LCZjbGllbnRfdGVtcGxhdGUsc2l6ZW9mKHN0cnVjdCBpMmNfY2xpZW50KSk7Ci0gICAgICAgIGNsaWVudC0+YWRhcHRlciA9IGFkYXA7Ci0gICAgICAgIGNsaWVudC0+YWRkciA9IGFkZHI7CisJbWVtY3B5KGNsaWVudCwmY2xpZW50X3RlbXBsYXRlLHNpemVvZihzdHJ1Y3QgaTJjX2NsaWVudCkpOworCWNsaWVudC0+YWRhcHRlciA9IGFkYXA7CisJY2xpZW50LT5hZGRyID0gYWRkcjsKIAlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCB0KTsKIAogCWRvX3RkYTc0MzJfaW5pdChjbGllbnQpOwpAQCAtNDcyLDcgKzQ3MSw3IEBACiAJCX0KIAkJfQogCi0JIAl0LT5tdXRlZD0odmEtPmZsYWdzICYgVklERU9fQVVESU9fTVVURSk7CisJCXQtPm11dGVkPSh2YS0+ZmxhZ3MgJiBWSURFT19BVURJT19NVVRFKTsKIAkJaWYgKHQtPm11dGVkKQogCQl7CiAJCQkvKiBNdXRlICYgdXBkYXRlIGJhbGFuY2UqLwpAQCAtNTAzLDEyICs1MDIsMTIgQEAKIAogc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGRyaXZlciA9IHsKIAkub3duZXIgICAgICAgICAgID0gVEhJU19NT0RVTEUsCi0gICAgICAgIC5uYW1lICAgICAgICAgICAgPSAiaTJjIHRkYTc0MzIgZHJpdmVyIiwKKwkubmFtZSAgICAgICAgICAgID0gImkyYyB0ZGE3NDMyIGRyaXZlciIsCiAJLmlkICAgICAgICAgICAgICA9IEkyQ19EUklWRVJJRF9UREE3NDMyLAotICAgICAgICAuZmxhZ3MgICAgICAgICAgID0gSTJDX0RGX05PVElGWSwKKwkuZmxhZ3MgICAgICAgICAgID0gSTJDX0RGX05PVElGWSwKIAkuYXR0YWNoX2FkYXB0ZXIgID0gdGRhNzQzMl9wcm9iZSwKLSAgICAgICAgLmRldGFjaF9jbGllbnQgICA9IHRkYTc0MzJfZGV0YWNoLAotICAgICAgICAuY29tbWFuZCAgICAgICAgID0gdGRhNzQzMl9jb21tYW5kLAorCS5kZXRhY2hfY2xpZW50ICAgPSB0ZGE3NDMyX2RldGFjaCwKKwkuY29tbWFuZCAgICAgICAgID0gdGRhNzQzMl9jb21tYW5kLAogfTsKIAogc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50IGNsaWVudF90ZW1wbGF0ZSA9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RkYTgyOTAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGRhODI5MC5jCmluZGV4IGM2NWYwYzcuLmIyZGZlMDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGRhODI5MC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGRhODI5MC5jCkBAIC0xLDE3MiArMSw0MDYgQEAKIC8qCi0gKgotICogaTJjIHR2IHR1bmVyIGNoaXAgZGV2aWNlIGRyaXZlcgotICogY29udHJvbHMgdGhlIHBoaWxpcHMgdGRhODI5MCs3NSB0dW5lciBjaGlwIGNvbWJvLgotICovCisKKyAgIGkyYyB0diB0dW5lciBjaGlwIGRldmljZSBkcml2ZXIKKyAgIGNvbnRyb2xzIHRoZSBwaGlsaXBzIHRkYTgyOTArNzUgdHVuZXIgY2hpcCBjb21iby4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyovCisKICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bWVkaWEvdHVuZXIuaD4KIAotI2RlZmluZSBJMkNfQUREUl9UREE4MjkwICAgICAgICAweDRiCi0jZGVmaW5lIEkyQ19BRERSX1REQTgyNzUgICAgICAgIDB4NjEKLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdHJ1Y3QgZnJlcV9lbnRyeSB7Ci0JdTE2CWZyZXE7Ci0JdTgJdmFsdWU7CitzdHJ1Y3QgdGRhODI3eF9kYXRhIHsKKwl1MzIgbG9tYXg7CisJdTggIHNwZDsKKwl1OCAgYnM7CisJdTggIGJwOworCXU4ICBjcDsKKwl1OCAgZ2MzOworCXU4IGRpdjFwNTsKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZnJlcV9lbnRyeSBiYW5kX3RhYmxlW10gPSB7Ci0JeyAweDJERjQsIDB4MUMgfSwKLQl7IDB4MjU3NCwgMHgxNCB9LAotCXsgMHgyMkI0LCAweDBDIH0sCi0JeyAweDIwRDQsIDB4MEIgfSwKLQl7IDB4MUU3NCwgMHgzQiB9LAotCXsgMHgxQzM0LCAweDMzIH0sCi0JeyAweDE2RjQsIDB4NUIgfSwKLQl7IDB4MTQ1NCwgMHg1MyB9LAotCXsgMHgxMkQ0LCAweDUyIH0sCi0JeyAweDEwMzQsIDB4NEEgfSwKLQl7IDB4MEVFNCwgMHg3QSB9LAotCXsgMHgwRDM0LCAweDcyIH0sCi0JeyAweDBCNTQsIDB4OUEgfSwKLQl7IDB4MDkxNCwgMHg5MSB9LAotCXsgMHgwN0Y0LCAweDg5IH0sCi0JeyAweDA3NzQsIDB4QjkgfSwKLQl7IDB4MDY3QiwgMHhCMSB9LAotCXsgMHgwNjM0LCAweEQ5IH0sCi0JeyAweDA1QTQsIDB4RDggfSwJLy8gRk0gcmFkaW8KLQl7IDB4MDQ5NCwgMHhEMCB9LAotCXsgMHgwM0JDLCAweEM4IH0sCi0JeyAweDAzOTQsIDB4RjggfSwJLy8gNTcyNTAwMDAgSHoKLQl7IDB4MDAwMCwgMHhGMCB9LAkvLyAwCisgICAgIC8qIE5vdGUgbG9tYXggZW50cnkgaXMgbG8gLyA2MjUwMCAqLworCitzdGF0aWMgc3RydWN0IHRkYTgyN3hfZGF0YSB0ZGE4Mjd4X2FuYWxvZ1tdID0geworCXsgLmxvbWF4ID0gICA5OTIsIC5zcGQgPSAzLCAuYnMgPSAyLCAuYnAgPSAwLCAuY3AgPSAwLCAuZ2MzID0gMywgLmRpdjFwNSA9IDF9LCAvKiAgNjIgTUh6ICovCisJeyAubG9tYXggPSAgMTA1NiwgLnNwZCA9IDMsIC5icyA9IDMsIC5icCA9IDAsIC5jcCA9IDAsIC5nYzMgPSAzLCAuZGl2MXA1ID0gMX0sIC8qICA2NiBNSHogKi8KKwl7IC5sb21heCA9ICAxMjE2LCAuc3BkID0gMywgLmJzID0gMSwgLmJwID0gMCwgLmNwID0gMCwgLmdjMyA9IDMsIC5kaXYxcDUgPSAwfSwgLyogIDc2IE1IeiAqLworCXsgLmxvbWF4ID0gIDEzNDQsIC5zcGQgPSAzLCAuYnMgPSAyLCAuYnAgPSAwLCAuY3AgPSAwLCAuZ2MzID0gMywgLmRpdjFwNSA9IDB9LCAvKiAgODQgTUh6ICovCisJeyAubG9tYXggPSAgMTQ4OCwgLnNwZCA9IDMsIC5icyA9IDIsIC5icCA9IDAsIC5jcCA9IDAsIC5nYzMgPSAxLCAuZGl2MXA1ID0gMH0sIC8qICA5MyBNSHogKi8KKwl7IC5sb21heCA9ICAxNTY4LCAuc3BkID0gMywgLmJzID0gMywgLmJwID0gMCwgLmNwID0gMCwgLmdjMyA9IDEsIC5kaXYxcDUgPSAwfSwgLyogIDk4IE1IeiAqLworCXsgLmxvbWF4ID0gIDE3NDQsIC5zcGQgPSAzLCAuYnMgPSAzLCAuYnAgPSAxLCAuY3AgPSAwLCAuZ2MzID0gMSwgLmRpdjFwNSA9IDB9LCAvKiAxMDkgTUh6ICovCisJeyAubG9tYXggPSAgMTk2OCwgLnNwZCA9IDIsIC5icyA9IDIsIC5icCA9IDEsIC5jcCA9IDAsIC5nYzMgPSAxLCAuZGl2MXA1ID0gMX0sIC8qIDEyMyBNSHogKi8KKwl7IC5sb21heCA9ICAyMTI4LCAuc3BkID0gMiwgLmJzID0gMywgLmJwID0gMSwgLmNwID0gMCwgLmdjMyA9IDEsIC5kaXYxcDUgPSAxfSwgLyogMTMzIE1IeiAqLworCXsgLmxvbWF4ID0gIDI0MTYsIC5zcGQgPSAyLCAuYnMgPSAxLCAuYnAgPSAxLCAuY3AgPSAwLCAuZ2MzID0gMSwgLmRpdjFwNSA9IDB9LCAvKiAxNTEgTUh6ICovCisJeyAubG9tYXggPSAgMjQ2NCwgLnNwZCA9IDIsIC5icyA9IDIsIC5icCA9IDEsIC5jcCA9IDAsIC5nYzMgPSAxLCAuZGl2MXA1ID0gMH0sIC8qIDE1NCBNSHogKi8KKwl7IC5sb21heCA9ICAyODk2LCAuc3BkID0gMiwgLmJzID0gMiwgLmJwID0gMSwgLmNwID0gMCwgLmdjMyA9IDAsIC5kaXYxcDUgPSAwfSwgLyogMTgxIE1IeiAqLworCXsgLmxvbWF4ID0gIDI5NjAsIC5zcGQgPSAyLCAuYnMgPSAyLCAuYnAgPSAyLCAuY3AgPSAwLCAuZ2MzID0gMSwgLmRpdjFwNSA9IDB9LCAvKiAxODUgTUh6ICovCisJeyAubG9tYXggPSAgMzQ3MiwgLnNwZCA9IDIsIC5icyA9IDMsIC5icCA9IDIsIC5jcCA9IDAsIC5nYzMgPSAxLCAuZGl2MXA1ID0gMH0sIC8qIDIxNyBNSHogKi8KKwl7IC5sb21heCA9ICAzOTA0LCAuc3BkID0gMSwgLmJzID0gMiwgLmJwID0gMiwgLmNwID0gMCwgLmdjMyA9IDEsIC5kaXYxcDUgPSAxfSwgLyogMjQ0IE1IeiAqLworCXsgLmxvbWF4ID0gIDQyNDAsIC5zcGQgPSAxLCAuYnMgPSAzLCAuYnAgPSAyLCAuY3AgPSAwLCAuZ2MzID0gMSwgLmRpdjFwNSA9IDF9LCAvKiAyNjUgTUh6ICovCisJeyAubG9tYXggPSAgNDgzMiwgLnNwZCA9IDEsIC5icyA9IDEsIC5icCA9IDIsIC5jcCA9IDAsIC5nYzMgPSAxLCAuZGl2MXA1ID0gMH0sIC8qIDMwMiBNSHogKi8KKwl7IC5sb21heCA9ICA1MTg0LCAuc3BkID0gMSwgLmJzID0gMiwgLmJwID0gMiwgLmNwID0gMCwgLmdjMyA9IDEsIC5kaXYxcDUgPSAwfSwgLyogMzI0IE1IeiAqLworCXsgLmxvbWF4ID0gIDU5MjAsIC5zcGQgPSAxLCAuYnMgPSAyLCAuYnAgPSAzLCAuY3AgPSAwLCAuZ2MzID0gMSwgLmRpdjFwNSA9IDB9LCAvKiAzNzAgTUh6ICovCisJeyAubG9tYXggPSAgNzI2NCwgLnNwZCA9IDEsIC5icyA9IDMsIC5icCA9IDMsIC5jcCA9IDAsIC5nYzMgPSAxLCAuZGl2MXA1ID0gMH0sIC8qIDQ1NCBNSHogKi8KKwl7IC5sb21heCA9ICA3ODg4LCAuc3BkID0gMCwgLmJzID0gMiwgLmJwID0gMywgLmNwID0gMCwgLmdjMyA9IDEsIC5kaXYxcDUgPSAxfSwgLyogNDkzIE1IeiAqLworCXsgLmxvbWF4ID0gIDg0ODAsIC5zcGQgPSAwLCAuYnMgPSAzLCAuYnAgPSAzLCAuY3AgPSAwLCAuZ2MzID0gMSwgLmRpdjFwNSA9IDF9LCAvKiA1MzAgTUh6ICovCisJeyAubG9tYXggPSAgODg2NCwgLnNwZCA9IDAsIC5icyA9IDEsIC5icCA9IDMsIC5jcCA9IDAsIC5nYzMgPSAxLCAuZGl2MXA1ID0gMH0sIC8qIDU1NCBNSHogKi8KKwl7IC5sb21heCA9ICA5NjY0LCAuc3BkID0gMCwgLmJzID0gMSwgLmJwID0gNCwgLmNwID0gMCwgLmdjMyA9IDAsIC5kaXYxcDUgPSAwfSwgLyogNjA0IE1IeiAqLworCXsgLmxvbWF4ID0gMTEwODgsIC5zcGQgPSAwLCAuYnMgPSAyLCAuYnAgPSA0LCAuY3AgPSAwLCAuZ2MzID0gMCwgLmRpdjFwNSA9IDB9LCAvKiA2OTYgTUh6ICovCisJeyAubG9tYXggPSAxMTg0MCwgLnNwZCA9IDAsIC5icyA9IDIsIC5icCA9IDQsIC5jcCA9IDEsIC5nYzMgPSAwLCAuZGl2MXA1ID0gMH0sIC8qIDc0MCBNSHogKi8KKwl7IC5sb21heCA9IDEzMTIwLCAuc3BkID0gMCwgLmJzID0gMywgLmJwID0gNCwgLmNwID0gMCwgLmdjMyA9IDAsIC5kaXYxcDUgPSAwfSwgLyogODIwIE1IeiAqLworCXsgLmxvbWF4ID0gMTM4NDAsIC5zcGQgPSAwLCAuYnMgPSAzLCAuYnAgPSA0LCAuY3AgPSAxLCAuZ2MzID0gMCwgLmRpdjFwNSA9IDB9LCAvKiA4NjUgTUh6ICovCisJeyAubG9tYXggPSAgICAgMCwgLnNwZCA9IDAsIC5icyA9IDAsIC5icCA9IDAsIC5jcCA9IDAsIC5nYzMgPSAwLCAuZGl2MXA1ID0gMH0gIC8qIEVuZCAgICAgICovCiB9OwogCi1zdGF0aWMgc3RydWN0IGZyZXFfZW50cnkgZGl2X3RhYmxlW10gPSB7Ci0JeyAweDFDMzQsIDMgfSwKLQl7IDB4MEQzNCwgMiB9LAotCXsgMHgwNjdCLCAxIH0sCi0gICAgICAgIHsgMHgwMDAwLCAwIH0sCi19OwotCi1zdGF0aWMgc3RydWN0IGZyZXFfZW50cnkgYWdjX3RhYmxlW10gPSB7Ci0JeyAweDIyQjQsIDB4OEYgfSwKLQl7IDB4MEI1NCwgMHg5RiB9LAotCXsgMHgwOUE0LCAweDhGIH0sCi0JeyAweDA1NTQsIDB4OUYgfSwKLQl7IDB4MDAwMCwgMHhCRiB9LAotfTsKLQotc3RhdGljIF9fdTggZ2V0X2ZyZXFfZW50cnkoIHN0cnVjdCBmcmVxX2VudHJ5KiB0YWJsZSwgX191MTYgZnJlcSkKK3N0YXRpYyB2b2lkIHRkYTgyN3hfdHVuZShzdHJ1Y3QgaTJjX2NsaWVudCAqYywgdTE2IGlmYywgdW5zaWduZWQgaW50IGZyZXEpCiB7Ci0Jd2hpbGUodGFibGUtPmZyZXEgJiYgdGFibGUtPmZyZXEgPiBmcmVxKQotCQl0YWJsZSsrOwotCXJldHVybiB0YWJsZS0+dmFsdWU7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotc3RhdGljIHVuc2lnbmVkIGNoYXIgaTJjX2VuYWJsZV9icmlkZ2VbMl0gPSAJeyAweDIxLCAweEMwIH07Ci1zdGF0aWMgdW5zaWduZWQgY2hhciBpMmNfZGlzYWJsZV9icmlkZ2VbMl0gPSAJeyAweDIxLCAweDgwIH07Ci1zdGF0aWMgdW5zaWduZWQgY2hhciBpMmNfaW5pdF90ZGE4Mjc1WzE0XSA9IAl7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JCQkJCQkgIDB4ZkMsIDB4MDQsIDB4QTMsIDB4M0YsCi0JCQkJCQkgIDB4MkEsIDB4MDQsIDB4RkYsIDB4MDAsCi0JCQkJCQkgIDB4MDAsIDB4NDAgfTsKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGkyY19zZXRfVlNbMl0gPSAJCXsgMHgzMCwgMHg2RiB9Owotc3RhdGljIHVuc2lnbmVkIGNoYXIgaTJjX3NldF9HUDAxX0NGWzJdID0gCXsgMHgyMCwgMHgwQiB9Owotc3RhdGljIHVuc2lnbmVkIGNoYXIgaTJjX3RkYTgyOTBfcmVzZXRbMl0gPQl7IDB4MDAsIDB4MDAgfTsKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGkyY190ZGE4MjkwX3N0YW5kYnlbMl0gPQl7IDB4MDAsIDB4MDIgfTsKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGkyY19nYWluc2V0X29mZlsyXSA9CXsgMHgyOCwgMHgxNCB9Owotc3RhdGljIHVuc2lnbmVkIGNoYXIgaTJjX2dhaW5zZXRfb25bMl0gPQl7IDB4MjgsIDB4NTQgfTsKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGkyY19hZ2MzXzAwWzJdID0JCXsgMHg4MCwgMHgwMCB9Owotc3RhdGljIHVuc2lnbmVkIGNoYXIgaTJjX2FnYzJfQkZbMl0gPQkJeyAweDYwLCAweEJGIH07Ci1zdGF0aWMgdW5zaWduZWQgY2hhciBpMmNfY2IxX0QwWzJdID0JCXsgMHgzMCwgMHhEMCB9Owotc3RhdGljIHVuc2lnbmVkIGNoYXIgaTJjX2NiMV9EMlsyXSA9CQl7IDB4MzAsIDB4RDIgfTsKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGkyY19jYjFfNTZbMl0gPQkJeyAweDMwLCAweDU2IH07Ci1zdGF0aWMgdW5zaWduZWQgY2hhciBpMmNfY2IxXzUyWzJdID0JCXsgMHgzMCwgMHg1MiB9Owotc3RhdGljIHVuc2lnbmVkIGNoYXIgaTJjX2NiMV81MFsyXSA9CQl7IDB4MzAsIDB4NTAgfTsKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGkyY19hZ2MyXzdGWzJdID0JCXsgMHg2MCwgMHg3RiB9Owotc3RhdGljIHVuc2lnbmVkIGNoYXIgaTJjX2FnYzNfMDhbMl0gPQkJeyAweDgwLCAweDA4IH07Ci0KLXN0YXRpYyBzdHJ1Y3QgaTJjX21zZyBpMmNfbXNnX2luaXRbXSA9IHsKLQl7IEkyQ19BRERSX1REQTgyNzUsIDAsIEFSUkFZX1NJWkUoaTJjX2luaXRfdGRhODI3NSksIGkyY19pbml0X3RkYTgyNzUgfSwKLQl7IEkyQ19BRERSX1REQTgyOTAsIDAsIEFSUkFZX1NJWkUoaTJjX2Rpc2FibGVfYnJpZGdlKSwgaTJjX2Rpc2FibGVfYnJpZGdlIH0sCi0JeyBJMkNfQUREUl9UREE4MjkwLCAwLCBBUlJBWV9TSVpFKGkyY19zZXRfVlMpLCBpMmNfc2V0X1ZTIH0sCi0JeyBJMkNfQUREUl9UREE4MjkwLCAwLCBBUlJBWV9TSVpFKGkyY19zZXRfR1AwMV9DRiksIGkyY19zZXRfR1AwMV9DRiB9LAotfTsKLQotc3RhdGljIHN0cnVjdCBpMmNfbXNnIGkyY19tc2dfcHJvbG9nW10gPSB7Ci0vLwl7IEkyQ19BRERSX1REQTgyOTAsIDAsIEFSUkFZX1NJWkUoaTJjX2Vhc3lfbW9kZSksIGkyY19lYXN5X21vZGUgfSwKLQl7IEkyQ19BRERSX1REQTgyOTAsIDAsIEFSUkFZX1NJWkUoaTJjX2dhaW5zZXRfb2ZmKSwgaTJjX2dhaW5zZXRfb2ZmIH0sCi0JeyBJMkNfQUREUl9UREE4MjkwLCAwLCBBUlJBWV9TSVpFKGkyY190ZGE4MjkwX3Jlc2V0KSwgaTJjX3RkYTgyOTBfcmVzZXQgfSwKLQl7IEkyQ19BRERSX1REQTgyOTAsIDAsIEFSUkFZX1NJWkUoaTJjX2VuYWJsZV9icmlkZ2UpLCBpMmNfZW5hYmxlX2JyaWRnZSB9LAotfTsKLQotc3RhdGljIHN0cnVjdCBpMmNfbXNnIGkyY19tc2dfY29uZmlnW10gPSB7Ci0vLwl7IEkyQ19BRERSX1REQTgyNzUsIDAsIEFSUkFZX1NJWkUoaTJjX3NldF9mcmVxKSwgaTJjX3NldF9mcmVxIH0sCi0JeyBJMkNfQUREUl9UREE4Mjc1LCAwLCBBUlJBWV9TSVpFKGkyY19hZ2MzXzAwKSwgaTJjX2FnYzNfMDAgfSwKLQl7IEkyQ19BRERSX1REQTgyNzUsIDAsIEFSUkFZX1NJWkUoaTJjX2FnYzJfQkYpLCBpMmNfYWdjMl9CRiB9LAotCXsgSTJDX0FERFJfVERBODI3NSwgMCwgQVJSQVlfU0laRShpMmNfY2IxX0QyKSwgaTJjX2NiMV9EMiB9LAotCXsgSTJDX0FERFJfVERBODI3NSwgMCwgQVJSQVlfU0laRShpMmNfY2IxXzU2KSwgaTJjX2NiMV81NiB9LAotCXsgSTJDX0FERFJfVERBODI3NSwgMCwgQVJSQVlfU0laRShpMmNfY2IxXzUyKSwgaTJjX2NiMV81MiB9LAotfTsKLQotc3RhdGljIHN0cnVjdCBpMmNfbXNnIGkyY19tc2dfZXBpbG9nW10gPSB7Ci0JeyBJMkNfQUREUl9UREE4Mjc1LCAwLCBBUlJBWV9TSVpFKGkyY19jYjFfNTApLCBpMmNfY2IxXzUwIH0sCi0JeyBJMkNfQUREUl9UREE4Mjc1LCAwLCBBUlJBWV9TSVpFKGkyY19hZ2MyXzdGKSwgaTJjX2FnYzJfN0YgfSwKLQl7IEkyQ19BRERSX1REQTgyNzUsIDAsIEFSUkFZX1NJWkUoaTJjX2FnYzNfMDgpLCBpMmNfYWdjM18wOCB9LAotCXsgSTJDX0FERFJfVERBODI5MCwgMCwgQVJSQVlfU0laRShpMmNfZGlzYWJsZV9icmlkZ2UpLCBpMmNfZGlzYWJsZV9icmlkZ2UgfSwKLQl7IEkyQ19BRERSX1REQTgyOTAsIDAsIEFSUkFZX1NJWkUoaTJjX2dhaW5zZXRfb24pLCBpMmNfZ2FpbnNldF9vbiB9LAotfTsKLQotc3RhdGljIHN0cnVjdCBpMmNfbXNnIGkyY19tc2dfc3RhbmRieVtdID0gewotCXsgSTJDX0FERFJfVERBODI5MCwgMCwgQVJSQVlfU0laRShpMmNfZW5hYmxlX2JyaWRnZSksIGkyY19lbmFibGVfYnJpZGdlIH0sCi0JeyBJMkNfQUREUl9UREE4Mjc1LCAwLCBBUlJBWV9TSVpFKGkyY19jYjFfRDApLCBpMmNfY2IxX0QwIH0sCi0JeyBJMkNfQUREUl9UREE4MjkwLCAwLCBBUlJBWV9TSVpFKGkyY19kaXNhYmxlX2JyaWRnZSksIGkyY19kaXNhYmxlX2JyaWRnZSB9LAotCXsgSTJDX0FERFJfVERBODI5MCwgMCwgQVJSQVlfU0laRShpMmNfdGRhODI5MF9zdGFuZGJ5KSwgaTJjX3RkYTgyOTBfc3RhbmRieSB9LAotfTsKLQotc3RhdGljIGludCB0ZGE4MjkwX3R1bmUoc3RydWN0IGkyY19jbGllbnQgKmMpCi17Ci0Jc3RydWN0IHR1bmVyICp0ID0gaTJjX2dldF9jbGllbnRkYXRhKGMpOwotCXN0cnVjdCBpMmNfbXNnIGVhc3lfbW9kZSA9Ci0JCXsgSTJDX0FERFJfVERBODI5MCwgMCwgMiwgdC0+aTJjX2Vhc3lfbW9kZSB9OwotCXN0cnVjdCBpMmNfbXNnIHNldF9mcmVxID0KLQkJeyBJMkNfQUREUl9UREE4Mjc1LCAwLCA4LCB0LT5pMmNfc2V0X2ZyZXEgIH07Ci0KLQlpMmNfdHJhbnNmZXIoYy0+YWRhcHRlciwgJmVhc3lfbW9kZSwgICAgICAxKTsKLQlpMmNfdHJhbnNmZXIoYy0+YWRhcHRlciwgaTJjX21zZ19wcm9sb2csIEFSUkFZX1NJWkUoaTJjX21zZ19wcm9sb2cpKTsKLQotCWkyY190cmFuc2ZlcihjLT5hZGFwdGVyLCAmc2V0X2ZyZXEsICAgICAgIDEpOwotCWkyY190cmFuc2ZlcihjLT5hZGFwdGVyLCBpMmNfbXNnX2NvbmZpZywgQVJSQVlfU0laRShpMmNfbXNnX2NvbmZpZykpOwotCi0JbXNsZWVwKDU1MCk7Ci0JaTJjX3RyYW5zZmVyKGMtPmFkYXB0ZXIsIGkyY19tc2dfZXBpbG9nLCBBUlJBWV9TSVpFKGkyY19tc2dfZXBpbG9nKSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldF9mcmVxdWVuY3koc3RydWN0IHR1bmVyICp0LCB1MTYgaWZjLCB1bnNpZ25lZCBpbnQgZnJlcSkKLXsKKwl1bnNpZ25lZCBjaGFyIHR1bmVyX3JlZ1s4XTsKKwl1bnNpZ25lZCBjaGFyIHJlZzJbMl07CiAJdTMyIE47CisJaW50IGk7CisJc3RydWN0IHR1bmVyICp0ID0gaTJjX2dldF9jbGllbnRkYXRhKGMpOworCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsuYWRkciA9IHQtPnRkYTgyN3hfYWRkciwgLmZsYWdzID0gMH07CiAKIAlpZiAodC0+bW9kZSA9PSBWNEwyX1RVTkVSX1JBRElPKQogCQlmcmVxID0gZnJlcSAvIDEwMDA7CiAKLQlOID0gKCgoZnJlcTw8MykraWZjKSYweDNmZmZjKTsKKwlOID0gZnJlcSArIGlmYzsKKwlpID0gMDsKKwl3aGlsZSAodGRhODI3eF9hbmFsb2dbaV0ubG9tYXggPCBOKSB7CisJCWlmKHRkYTgyN3hfYW5hbG9nW2kgKyAxXS5sb21heCA9PSAwKQorCQkJYnJlYWs7CisJCWkrKzsKKwl9CiAKLQlOID0gTiA+PiBnZXRfZnJlcV9lbnRyeShkaXZfdGFibGUsIGZyZXEpOwotCXQtPmkyY19zZXRfZnJlcVswXSA9IDA7Ci0JdC0+aTJjX3NldF9mcmVxWzFdID0gKHVuc2lnbmVkIGNoYXIpKE4+PjgpOwotCXQtPmkyY19zZXRfZnJlcVsyXSA9ICh1bnNpZ25lZCBjaGFyKSBOOwotCXQtPmkyY19zZXRfZnJlcVszXSA9IDB4NDA7Ci0JdC0+aTJjX3NldF9mcmVxWzRdID0gMHg1MjsKLQl0LT5pMmNfc2V0X2ZyZXFbNV0gPSBnZXRfZnJlcV9lbnRyeShiYW5kX3RhYmxlLCBmcmVxKTsKLQl0LT5pMmNfc2V0X2ZyZXFbNl0gPSBnZXRfZnJlcV9lbnRyeShhZ2NfdGFibGUsICBmcmVxKTsKLQl0LT5pMmNfc2V0X2ZyZXFbN10gPSAweDhmOworCU4gPSBOIDw8IHRkYTgyN3hfYW5hbG9nW2ldLnNwZDsKKworCXR1bmVyX3JlZ1swXSA9IDA7CisJdHVuZXJfcmVnWzFdID0gKHVuc2lnbmVkIGNoYXIpKE4+PjgpOworCXR1bmVyX3JlZ1syXSA9ICh1bnNpZ25lZCBjaGFyKSBOOworCXR1bmVyX3JlZ1szXSA9IDB4NDA7CisJdHVuZXJfcmVnWzRdID0gMHg1MiArICh0LT50ZGE4Mjd4X2xwc2VsIDw8IDUpOworCXR1bmVyX3JlZ1s1XSA9ICh0ZGE4Mjd4X2FuYWxvZ1tpXS5zcGQgICA8PCA2KSArICh0ZGE4Mjd4X2FuYWxvZ1tpXS5kaXYxcDUgPDw1KSArCisJCSAgICAgICAodGRhODI3eF9hbmFsb2dbaV0uYnMgICAgIDw8MykgKyAgdGRhODI3eF9hbmFsb2dbaV0uYnA7CisJdHVuZXJfcmVnWzZdID0gMHg4ZiArICh0ZGE4Mjd4X2FuYWxvZ1tpXS5nYzMgPDwgNCk7CisJdHVuZXJfcmVnWzddID0gMHg4ZjsKKworCW1zZy5idWYgPSB0dW5lcl9yZWc7CisJbXNnLmxlbiA9IDg7CisJaTJjX3RyYW5zZmVyKGMtPmFkYXB0ZXIsICZtc2csIDEpOworCisJbXNnLmJ1Zj0gcmVnMjsKKwltc2cubGVuID0gMjsKKwlyZWcyWzBdID0gMHg4MDsKKwlyZWcyWzFdID0gMDsKKwlpMmNfdHJhbnNmZXIoYy0+YWRhcHRlciwgJm1zZywgMSk7CisKKwlyZWcyWzBdID0gMHg2MDsKKwlyZWcyWzFdID0gMHhiZjsKKwlpMmNfdHJhbnNmZXIoYy0+YWRhcHRlciwgJm1zZywgMSk7CisKKwlyZWcyWzBdID0gMHgzMDsKKwlyZWcyWzFdID0gdHVuZXJfcmVnWzRdICsgMHg4MDsKKwlpMmNfdHJhbnNmZXIoYy0+YWRhcHRlciwgJm1zZywgMSk7CisKKwltc2xlZXAoMSk7CisJcmVnMlswXSA9IDB4MzA7CisJcmVnMlsxXSA9IHR1bmVyX3JlZ1s0XSArIDQ7CisJaTJjX3RyYW5zZmVyKGMtPmFkYXB0ZXIsICZtc2csIDEpOworCisJbXNsZWVwKDEpOworCXJlZzJbMF0gPSAweDMwOworCXJlZzJbMV0gPSB0dW5lcl9yZWdbNF07CisJaTJjX3RyYW5zZmVyKGMtPmFkYXB0ZXIsICZtc2csIDEpOworCisJbXNsZWVwKDU1MCk7CisJcmVnMlswXSA9IDB4MzA7CisJcmVnMlsxXSA9ICh0dW5lcl9yZWdbNF0gJiAweGZjKSArIHRkYTgyN3hfYW5hbG9nW2ldLmNwIDsKKwlpMmNfdHJhbnNmZXIoYy0+YWRhcHRlciwgJm1zZywgMSk7CisKKwlyZWcyWzBdID0gMHg2MDsKKwlyZWcyWzFdID0gMHgzZjsKKwlpMmNfdHJhbnNmZXIoYy0+YWRhcHRlciwgJm1zZywgMSk7CisKKwlyZWcyWzBdID0gMHg4MDsKKwlyZWcyWzFdID0gMHgwODsgICAvLyBWc3luYyBlbgorCWkyY190cmFuc2ZlcihjLT5hZGFwdGVyLCAmbXNnLCAxKTsKIH0KIAorc3RhdGljIHZvaWQgdGRhODI3eF9hZ2NmKHN0cnVjdCBpMmNfY2xpZW50ICpjKQoreworCXN0cnVjdCB0dW5lciAqdCA9IGkyY19nZXRfY2xpZW50ZGF0YShjKTsKKwl1bnNpZ25lZCBjaGFyIGRhdGFbXSA9IHsweDgwLCAweDBjfTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7LmFkZHIgPSB0LT50ZGE4Mjd4X2FkZHIsIC5idWYgPSBkYXRhLAorCQkJICAgICAgLmZsYWdzID0gMCwgLmxlbiA9IDJ9OworCWkyY190cmFuc2ZlcihjLT5hZGFwdGVyLCAmbXNnLCAxKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdHJ1Y3QgdGRhODI3eGFfZGF0YSB7CisJdTMyIGxvbWF4OworCXU4ICBzdmNvOworCXU4ICBzcGQ7CisJdTggIHNjcjsKKwl1OCAgc2JzOworCXU4ICBnYzM7Cit9OworCitzdGF0aWMgc3RydWN0IHRkYTgyN3hhX2RhdGEgdGRhODI3eGFfYW5hbG9nW10gPSB7CisJeyAubG9tYXggPSAgIDkxMCwgLnN2Y28gPSAzLCAuc3BkID0gNCwgLnNjciA9IDAsIC5zYnMgPSAwLCAuZ2MzID0gM30sICAvKiAgNTYuODc1IE1IeiAqLworCXsgLmxvbWF4ID0gIDEwNzYsIC5zdmNvID0gMCwgLnNwZCA9IDMsIC5zY3IgPSAwLCAuc2JzID0gMCwgLmdjMyA9IDN9LCAgLyogIDY3LjI1IE1IeiAqLworCXsgLmxvbWF4ID0gIDEzMDAsIC5zdmNvID0gMSwgLnNwZCA9IDMsIC5zY3IgPSAwLCAuc2JzID0gMCwgLmdjMyA9IDN9LCAgLyogIDgxLjI1IE1IeiAqLworCXsgLmxvbWF4ID0gIDE1NjAsIC5zdmNvID0gMiwgLnNwZCA9IDMsIC5zY3IgPSAwLCAuc2JzID0gMCwgLmdjMyA9IDN9LCAgLyogIDk3LjUgIE1IeiAqLworCXsgLmxvbWF4ID0gIDE4MjAsIC5zdmNvID0gMywgLnNwZCA9IDMsIC5zY3IgPSAwLCAuc2JzID0gMSwgLmdjMyA9IDF9LCAgLyogMTEzLjc1IE1IeiAqLworCXsgLmxvbWF4ID0gIDIxNTIsIC5zdmNvID0gMCwgLnNwZCA9IDIsIC5zY3IgPSAwLCAuc2JzID0gMSwgLmdjMyA9IDF9LCAgLyogMTM0LjUgTUh6ICovCisJeyAubG9tYXggPSAgMjQ2NCwgLnN2Y28gPSAxLCAuc3BkID0gMiwgLnNjciA9IDAsIC5zYnMgPSAxLCAuZ2MzID0gMX0sICAvKiAxNTQgICBNSHogKi8KKwl7IC5sb21heCA9ICAyNjAwLCAuc3ZjbyA9IDEsIC5zcGQgPSAyLCAuc2NyID0gMCwgLnNicyA9IDEsIC5nYzMgPSAxfSwgIC8qIDE2Mi41IE1IeiAqLworCXsgLmxvbWF4ID0gIDI5MjgsIC5zdmNvID0gMiwgLnNwZCA9IDIsIC5zY3IgPSAwLCAuc2JzID0gMSwgLmdjMyA9IDF9LCAgLyogMTgzICAgTUh6ICovCisJeyAubG9tYXggPSAgMzEyMCwgLnN2Y28gPSAyLCAuc3BkID0gMiwgLnNjciA9IDAsIC5zYnMgPSAyLCAuZ2MzID0gMX0sICAvKiAxOTUgICBNSHogKi8KKwl7IC5sb21heCA9ICAzNjQwLCAuc3ZjbyA9IDMsIC5zcGQgPSAyLCAuc2NyID0gMCwgLnNicyA9IDIsIC5nYzMgPSAzfSwgIC8qIDIyNy41IE1IeiAqLworCXsgLmxvbWF4ID0gIDQzMDQsIC5zdmNvID0gMCwgLnNwZCA9IDEsIC5zY3IgPSAwLCAuc2JzID0gMiwgLmdjMyA9IDN9LCAgLyogMjY5ICAgTUh6ICovCisJeyAubG9tYXggPSAgNTIwMCwgLnN2Y28gPSAxLCAuc3BkID0gMSwgLnNjciA9IDAsIC5zYnMgPSAyLCAuZ2MzID0gMX0sICAvKiAzMjUgICBNSHogKi8KKwl7IC5sb21heCA9ICA2MjQwLCAuc3ZjbyA9IDIsIC5zcGQgPSAxLCAuc2NyID0gMCwgLnNicyA9IDMsIC5nYzMgPSAzfSwgIC8qIDM5MCAgIE1IeiAqLworCXsgLmxvbWF4ID0gIDcyODAsIC5zdmNvID0gMywgLnNwZCA9IDEsIC5zY3IgPSAwLCAuc2JzID0gMywgLmdjMyA9IDN9LCAgLyogNDU1ICAgTUh6ICovCisJeyAubG9tYXggPSAgODMyMCwgLnN2Y28gPSAwLCAuc3BkID0gMCwgLnNjciA9IDAsIC5zYnMgPSAzLCAuZ2MzID0gMX0sICAvKiA1MjAgICBNSHogKi8KKwl7IC5sb21heCA9ICA4NjA4LCAuc3ZjbyA9IDAsIC5zcGQgPSAwLCAuc2NyID0gMSwgLnNicyA9IDMsIC5nYzMgPSAxfSwgIC8qIDUzOCAgIE1IeiAqLworCXsgLmxvbWF4ID0gIDg4NjQsIC5zdmNvID0gMSwgLnNwZCA9IDAsIC5zY3IgPSAwLCAuc2JzID0gMywgLmdjMyA9IDF9LCAgLyogNTU0ICAgTUh6ICovCisJeyAubG9tYXggPSAgOTkyMCwgLnN2Y28gPSAxLCAuc3BkID0gMCwgLnNjciA9IDAsIC5zYnMgPSA0LCAuZ2MzID0gMH0sICAvKiA2MjAgICBNSHogKi8KKwl7IC5sb21heCA9IDEwNDAwLCAuc3ZjbyA9IDEsIC5zcGQgPSAwLCAuc2NyID0gMSwgLnNicyA9IDQsIC5nYzMgPSAwfSwgIC8qIDY1MCAgIE1IeiAqLworCXsgLmxvbWF4ID0gMTEyMDAsIC5zdmNvID0gMiwgLnNwZCA9IDAsIC5zY3IgPSAwLCAuc2JzID0gNCwgLmdjMyA9IDB9LCAgLyogNzAwICAgTUh6ICovCisJeyAubG9tYXggPSAxMjQ4MCwgLnN2Y28gPSAyLCAuc3BkID0gMCwgLnNjciA9IDEsIC5zYnMgPSA0LCAuZ2MzID0gMH0sICAvKiA3ODAgICBNSHogKi8KKwl7IC5sb21heCA9IDEzMTIwLCAuc3ZjbyA9IDMsIC5zcGQgPSAwLCAuc2NyID0gMCwgLnNicyA9IDQsIC5nYzMgPSAwfSwgIC8qIDgyMCAgIE1IeiAqLworCXsgLmxvbWF4ID0gMTM5MjAsIC5zdmNvID0gMywgLnNwZCA9IDAsIC5zY3IgPSAxLCAuc2JzID0gNCwgLmdjMyA9IDB9LCAgLyogODcwICAgTUh6ICovCisJeyAubG9tYXggPSAxNDU3NiwgLnN2Y28gPSAzLCAuc3BkID0gMCwgLnNjciA9IDIsIC5zYnMgPSA0LCAuZ2MzID0gMH0sICAvKiA5MTEgICBNSHogKi8KKwl7IC5sb21heCA9ICAgICAwLCAuc3ZjbyA9IDAsIC5zcGQgPSAwLCAuc2NyID0gMCwgLnNicyA9IDAsIC5nYzMgPSAwfSAgIC8qIEVuZCAqLworfTsKKworc3RhdGljIHZvaWQgdGRhODI3eGFfdHVuZShzdHJ1Y3QgaTJjX2NsaWVudCAqYywgdTE2IGlmYywgdW5zaWduZWQgaW50IGZyZXEpCit7CisJdW5zaWduZWQgY2hhciB0dW5lcl9yZWdbMTRdOworCXVuc2lnbmVkIGNoYXIgcmVnMlsyXTsKKwl1MzIgTjsKKwlpbnQgaTsKKwlzdHJ1Y3QgdHVuZXIgKnQgPSBpMmNfZ2V0X2NsaWVudGRhdGEoYyk7CisJc3RydWN0IGkyY19tc2cgbXNnID0gey5hZGRyID0gdC0+dGRhODI3eF9hZGRyLCAuZmxhZ3MgPSAwfTsKKworCWlmICh0LT5tb2RlID09IFY0TDJfVFVORVJfUkFESU8pCisJCWZyZXEgPSBmcmVxIC8gMTAwMDsKKworCU4gPSBmcmVxICsgaWZjOworCWkgPSAwOworCXdoaWxlICh0ZGE4Mjd4YV9hbmFsb2dbaV0ubG9tYXggPCBOKSB7CisJCWlmKHRkYTgyN3hhX2FuYWxvZ1tpICsgMV0ubG9tYXggPT0gMCkKKwkJCWJyZWFrOworCQlpKys7CisJfQorCisJTiA9IE4gPDwgdGRhODI3eGFfYW5hbG9nW2ldLnNwZDsKKworCXR1bmVyX3JlZ1swXSA9IDA7CisJdHVuZXJfcmVnWzFdID0gKHVuc2lnbmVkIGNoYXIpKE4+PjgpOworCXR1bmVyX3JlZ1syXSA9ICh1bnNpZ25lZCBjaGFyKSBOOworCXR1bmVyX3JlZ1szXSA9IDA7CisJdHVuZXJfcmVnWzRdID0gMHgxNjsKKwl0dW5lcl9yZWdbNV0gPSAodGRhODI3eGFfYW5hbG9nW2ldLnNwZCA8PCA1KSArICh0ZGE4Mjd4YV9hbmFsb2dbaV0uc3ZjbyA8PCAzKSArCisJCQl0ZGE4Mjd4YV9hbmFsb2dbaV0uc2JzOworCXR1bmVyX3JlZ1s2XSA9IDB4OGIgKyAodGRhODI3eGFfYW5hbG9nW2ldLmdjMyA8PCA0KTsKKwl0dW5lcl9yZWdbN10gPSAweDBjOworCXR1bmVyX3JlZ1s4XSA9IDQ7CisJdHVuZXJfcmVnWzldID0gMHgyMDsKKwl0dW5lcl9yZWdbMTBdID0gMHhmZjsKKwl0dW5lcl9yZWdbMTFdID0gMHhlMDsKKwl0dW5lcl9yZWdbMTJdID0gMDsKKwl0dW5lcl9yZWdbMTNdID0gMHgzOSArICh0LT50ZGE4Mjd4X2xwc2VsIDw8IDEpOworCisJbXNnLmJ1ZiA9IHR1bmVyX3JlZzsKKwltc2cubGVuID0gMTQ7CisJaTJjX3RyYW5zZmVyKGMtPmFkYXB0ZXIsICZtc2csIDEpOworCisJbXNnLmJ1Zj0gcmVnMjsKKwltc2cubGVuID0gMjsKKwlyZWcyWzBdID0gMHg2MDsKKwlyZWcyWzFdID0gMHgzYzsKKwlpMmNfdHJhbnNmZXIoYy0+YWRhcHRlciwgJm1zZywgMSk7CisKKwlyZWcyWzBdID0gMHhhMDsKKwlyZWcyWzFdID0gMHhjMDsKKwlpMmNfdHJhbnNmZXIoYy0+YWRhcHRlciwgJm1zZywgMSk7CisKKwltc2xlZXAoMik7CisJcmVnMlswXSA9IDB4MzA7CisJcmVnMlsxXSA9IDB4MTAgKyB0ZGE4Mjd4YV9hbmFsb2dbaV0uc2NyOworCWkyY190cmFuc2ZlcihjLT5hZGFwdGVyLCAmbXNnLCAxKTsKKworCW1zbGVlcCg1NTApOworCXJlZzJbMF0gPSAweDUwOworCXJlZzJbMV0gPSAweDhmICsgKHRkYTgyN3hhX2FuYWxvZ1tpXS5nYzMgPDwgNCk7CisJaTJjX3RyYW5zZmVyKGMtPmFkYXB0ZXIsICZtc2csIDEpOworCisJcmVnMlswXSA9IDB4ODA7CisJcmVnMlsxXSA9IDB4Mjg7CisJaTJjX3RyYW5zZmVyKGMtPmFkYXB0ZXIsICZtc2csIDEpOworCisJcmVnMlswXSA9IDB4YjA7CisJcmVnMlsxXSA9IDB4MDE7CisJaTJjX3RyYW5zZmVyKGMtPmFkYXB0ZXIsICZtc2csIDEpOworCisJcmVnMlswXSA9IDB4YzA7CisJcmVnMlsxXSA9IDB4MTkgKyAodC0+dGRhODI3eF9scHNlbCA8PCAxKTsKKwlpMmNfdHJhbnNmZXIoYy0+YWRhcHRlciwgJm1zZywgMSk7Cit9CisKK3N0YXRpYyB2b2lkIHRkYTgyN3hhX2FnY2Yoc3RydWN0IGkyY19jbGllbnQgKmMpCit7CisJc3RydWN0IHR1bmVyICp0ID0gaTJjX2dldF9jbGllbnRkYXRhKGMpOworCXVuc2lnbmVkIGNoYXIgZGF0YVtdID0gezB4ODAsIDB4MmN9OworCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsuYWRkciA9IHQtPnRkYTgyN3hfYWRkciwgLmJ1ZiA9IGRhdGEsCisJCQkgICAgICAuZmxhZ3MgPSAwLCAubGVuID0gMn07CisJaTJjX3RyYW5zZmVyKGMtPmFkYXB0ZXIsICZtc2csIDEpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkIHRkYTgyOTBfaTJjX2JyaWRnZShzdHJ1Y3QgaTJjX2NsaWVudCAqYywgaW50IGNsb3NlKQoreworCXVuc2lnbmVkIGNoYXIgIGVuYWJsZVsyXSA9IHsgMHgyMSwgMHhDMCB9OworCXVuc2lnbmVkIGNoYXIgZGlzYWJsZVsyXSA9IHsgMHgyMSwgMHg4MCB9OworCXVuc2lnbmVkIGNoYXIgKm1zZzsKKwlpZihjbG9zZSkgeworCQltc2cgPSBlbmFibGU7CisJCWkyY19tYXN0ZXJfc2VuZChjLCBtc2csIDIpOworCQkvKiBsZXQgdGhlIGJyaWRnZSBzdGFiaWxpemUgKi8KKwkJbXNsZWVwKDIwKTsKKwl9IGVsc2UgeworCQltc2cgPSBkaXNhYmxlOworCQlpMmNfbWFzdGVyX3NlbmQoYywgbXNnLCAyKTsKKwl9Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCB0ZGE4MjkwX3R1bmUoc3RydWN0IGkyY19jbGllbnQgKmMsIHUxNiBpZmMsIHVuc2lnbmVkIGludCBmcmVxKQoreworCXN0cnVjdCB0dW5lciAqdCA9IGkyY19nZXRfY2xpZW50ZGF0YShjKTsKKwl1bnNpZ25lZCBjaGFyIHNvZnRfcmVzZXRbXSAgPSB7IDB4MDAsIDB4MDAgfTsKKwl1bnNpZ25lZCBjaGFyIGVhc3lfbW9kZVtdICAgPSB7IDB4MDEsIHQtPnRkYTgyOTBfZWFzeV9tb2RlIH07CisJdW5zaWduZWQgY2hhciBleHBlcnRfbW9kZVtdID0geyAweDAxLCAweDgwIH07CisJdW5zaWduZWQgY2hhciBnYWluc2V0X29mZltdID0geyAweDI4LCAweDE0IH07CisJdW5zaWduZWQgY2hhciBpZl9hZ2Nfc3BkW10gID0geyAweDBmLCAweDg4IH07CisJdW5zaWduZWQgY2hhciBhZGNfaGVhZF82W10gID0geyAweDA1LCAweDA0IH07CisJdW5zaWduZWQgY2hhciBhZGNfaGVhZF85W10gID0geyAweDA1LCAweDAyIH07CisJdW5zaWduZWQgY2hhciBhZGNfaGVhZF8xMltdID0geyAweDA1LCAweDAxIH07CisJdW5zaWduZWQgY2hhciBwbGxfYndfbm9tW10gID0geyAweDBkLCAweDQ3IH07CisJdW5zaWduZWQgY2hhciBwbGxfYndfbG93W10gID0geyAweDBkLCAweDI3IH07CisJdW5zaWduZWQgY2hhciBnYWluc2V0XzJbXSAgID0geyAweDI4LCAweDY0IH07CisJdW5zaWduZWQgY2hhciBhZ2NfcnN0X29uW10gID0geyAweDBlLCAweDBiIH07CisJdW5zaWduZWQgY2hhciBhZ2NfcnN0X29mZltdID0geyAweDBlLCAweDA5IH07CisJdW5zaWduZWQgY2hhciBpZl9hZ2Nfc2V0W10gID0geyAweDBmLCAweDgxIH07CisJdW5zaWduZWQgY2hhciBhZGRyX2FkY19zYXQgID0gMHgxYTsKKwl1bnNpZ25lZCBjaGFyIGFkZHJfYWdjX3N0YXQgPSAweDFkOworCXVuc2lnbmVkIGNoYXIgYWRkcl9wbGxfc3RhdCA9IDB4MWI7CisJdW5zaWduZWQgY2hhciBhZGNfc2F0LCBhZ2Nfc3RhdCwKKwkJICAgICAgcGxsX3N0YXQ7CisKKwlpMmNfbWFzdGVyX3NlbmQoYywgZWFzeV9tb2RlLCAyKTsKKwlpMmNfbWFzdGVyX3NlbmQoYywgc29mdF9yZXNldCwgMik7CisJbXNsZWVwKDEpOworCisJZXhwZXJ0X21vZGVbMV0gPSB0LT50ZGE4MjkwX2Vhc3lfbW9kZSArIDB4ODA7CisJaTJjX21hc3Rlcl9zZW5kKGMsIGV4cGVydF9tb2RlLCAyKTsKKwlpMmNfbWFzdGVyX3NlbmQoYywgZ2FpbnNldF9vZmYsIDIpOworCWkyY19tYXN0ZXJfc2VuZChjLCBpZl9hZ2Nfc3BkLCAyKTsKKwlpZiAodC0+dGRhODI5MF9lYXN5X21vZGUgJiAweDYwKQorCQlpMmNfbWFzdGVyX3NlbmQoYywgYWRjX2hlYWRfOSwgMik7CisJZWxzZQorCQlpMmNfbWFzdGVyX3NlbmQoYywgYWRjX2hlYWRfNiwgMik7CisJaTJjX21hc3Rlcl9zZW5kKGMsIHBsbF9id19ub20sIDIpOworCisJdGRhODI5MF9pMmNfYnJpZGdlKGMsIDEpOworCWlmICh0LT50ZGE4Mjd4X3ZlciAhPSAwKQorCQl0ZGE4Mjd4YV90dW5lKGMsIGlmYywgZnJlcSk7CisJZWxzZQorCQl0ZGE4Mjd4X3R1bmUoYywgaWZjLCBmcmVxKTsKKwkvKiBhZGp1c3QgaGVhZHJvb20gcmVzcC4gZ2FpbiAqLworCWkyY19tYXN0ZXJfc2VuZChjLCAmYWRkcl9hZGNfc2F0LCAxKTsKKwlpMmNfbWFzdGVyX3JlY3YoYywgJmFkY19zYXQsIDEpOworCWkyY19tYXN0ZXJfc2VuZChjLCAmYWRkcl9hZ2Nfc3RhdCwgMSk7CisJaTJjX21hc3Rlcl9yZWN2KGMsICZhZ2Nfc3RhdCwgMSk7CisJaTJjX21hc3Rlcl9zZW5kKGMsICZhZGRyX3BsbF9zdGF0LCAxKTsKKwlpMmNfbWFzdGVyX3JlY3YoYywgJnBsbF9zdGF0LCAxKTsKKwlpZiAocGxsX3N0YXQgJiAweDgwKQorCQl0dW5lcl9kYmcoInRkYTgyOTAgaXMgbG9ja2VkLCBBR0M6ICVkXG4iLCBhZ2Nfc3RhdCk7CisJZWxzZQorCQl0dW5lcl9kYmcoInRkYTgyOTAgbm90IGxvY2tlZCwgbm8gc2lnbmFsP1xuIik7CisJaWYgKChhZ2Nfc3RhdCA+IDExNSkgfHwgKCEocGxsX3N0YXQgJiAweDgwKSAmJiAoYWRjX3NhdCA8IDIwKSkpIHsKKwkJdHVuZXJfZGJnKCJhZGp1c3QgZ2Fpbiwgc3RlcCAxLiBBZ2M6ICVkLCBBREMgc3RhdDogJWQsIGxvY2s6ICVkXG4iLAorCQkJICAgYWdjX3N0YXQsIGFkY19zYXQsIHBsbF9zdGF0ICYgMHg4MCk7CisJCWkyY19tYXN0ZXJfc2VuZChjLCBnYWluc2V0XzIsIDIpOworCQltc2xlZXAoMTAwKTsKKwkJaTJjX21hc3Rlcl9zZW5kKGMsICZhZGRyX2FnY19zdGF0LCAxKTsKKwkJaTJjX21hc3Rlcl9yZWN2KGMsICZhZ2Nfc3RhdCwgMSk7CisJCWkyY19tYXN0ZXJfc2VuZChjLCAmYWRkcl9wbGxfc3RhdCwgMSk7CisJCWkyY19tYXN0ZXJfcmVjdihjLCAmcGxsX3N0YXQsIDEpOworCQlpZiAoKGFnY19zdGF0ID4gMTE1KSB8fCAhKHBsbF9zdGF0ICYgMHg4MCkpIHsKKwkJCXR1bmVyX2RiZygiYWRqdXN0IGdhaW4sIHN0ZXAgMi4gQWdjOiAlZCwgbG9jazogJWRcbiIsCisJCQkJICAgYWdjX3N0YXQsIHBsbF9zdGF0ICYgMHg4MCk7CisJCQlpZiAodC0+dGRhODI3eF92ZXIgIT0gMCkKKwkJCQl0ZGE4Mjd4YV9hZ2NmKGMpOworCQkJZWxzZQorCQkJCXRkYTgyN3hfYWdjZihjKTsKKwkJCW1zbGVlcCgxMDApOworCQkJaTJjX21hc3Rlcl9zZW5kKGMsICZhZGRyX2FnY19zdGF0LCAxKTsKKwkJCWkyY19tYXN0ZXJfcmVjdihjLCAmYWdjX3N0YXQsIDEpOworCQkJaTJjX21hc3Rlcl9zZW5kKGMsICZhZGRyX3BsbF9zdGF0LCAxKTsKKwkJCWkyY19tYXN0ZXJfcmVjdihjLCAmcGxsX3N0YXQsIDEpOworCQkJaWYoKGFnY19zdGF0ID4gMTE1KSB8fCAhKHBsbF9zdGF0ICYgMHg4MCkpIHsKKwkJCQl0dW5lcl9kYmcoImFkanVzdCBnYWluLCBzdGVwIDMuIEFnYzogJWRcbiIsIGFnY19zdGF0KTsKKwkJCQlpMmNfbWFzdGVyX3NlbmQoYywgYWRjX2hlYWRfMTIsIDIpOworCQkJCWkyY19tYXN0ZXJfc2VuZChjLCBwbGxfYndfbG93LCAyKTsKKwkJCQltc2xlZXAoMTAwKTsKKwkJCX0KKwkJfQorCX0KKworCS8qIGwvIGwnIGRlYWRsb2NrPyAqLworCWlmKHQtPnRkYTgyOTBfZWFzeV9tb2RlICYgMHg2MCkgeworCQlpMmNfbWFzdGVyX3NlbmQoYywgJmFkZHJfYWRjX3NhdCwgMSk7CisJCWkyY19tYXN0ZXJfcmVjdihjLCAmYWRjX3NhdCwgMSk7CisJCWkyY19tYXN0ZXJfc2VuZChjLCAmYWRkcl9wbGxfc3RhdCwgMSk7CisJCWkyY19tYXN0ZXJfcmVjdihjLCAmcGxsX3N0YXQsIDEpOworCQlpZiAoKGFkY19zYXQgPiAyMCkgfHwgIShwbGxfc3RhdCAmIDB4ODApKSB7CisJCQl0dW5lcl9kYmcoInRyeWluZyB0byByZXNvbHZlIFNFQ0FNIEwgZGVhZGxvY2tcbiIpOworCQkJaTJjX21hc3Rlcl9zZW5kKGMsIGFnY19yc3Rfb24sIDIpOworCQkJbXNsZWVwKDQwKTsKKwkJCWkyY19tYXN0ZXJfc2VuZChjLCBhZ2NfcnN0X29mZiwgMik7CisJCX0KKwl9CisKKwl0ZGE4MjkwX2kyY19icmlkZ2UoYywgMCk7CisJaTJjX21hc3Rlcl9zZW5kKGMsIGlmX2FnY19zZXQsIDIpOworCXJldHVybiAwOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwogI2RlZmluZSBWNEwyX1NURF9NTgkoVjRMMl9TVERfUEFMX018VjRMMl9TVERfUEFMX058VjRMMl9TVERfUEFMX05jfFY0TDJfU1REX05UU0MpCiAjZGVmaW5lIFY0TDJfU1REX0IJKFY0TDJfU1REX1BBTF9CfFY0TDJfU1REX1BBTF9CMXxWNEwyX1NURF9TRUNBTV9CKQogI2RlZmluZSBWNEwyX1NURF9HSAkoVjRMMl9TVERfUEFMX0d8VjRMMl9TVERfUEFMX0h8VjRMMl9TVERfU0VDQU1fR3xWNEwyX1NURF9TRUNBTV9IKQpAQCAtMTc0LDIwICs0MDgsMzcgQEAKIAogc3RhdGljIHZvaWQgc2V0X2F1ZGlvKHN0cnVjdCB0dW5lciAqdCkKIHsKLQl0LT5pMmNfZWFzeV9tb2RlWzBdID0gMHgwMTsKKwljaGFyKiBtb2RlOwogCi0JaWYgKHQtPnN0ZCAmIFY0TDJfU1REX01OKQotCQl0LT5pMmNfZWFzeV9tb2RlWzFdID0gMHgwMTsKLQllbHNlIGlmICh0LT5zdGQgJiBWNEwyX1NURF9CKQotCQl0LT5pMmNfZWFzeV9tb2RlWzFdID0gMHgwMjsKLQllbHNlIGlmICh0LT5zdGQgJiBWNEwyX1NURF9HSCkKLQkJdC0+aTJjX2Vhc3lfbW9kZVsxXSA9IDB4MDQ7Ci0JZWxzZSBpZiAodC0+c3RkICYgVjRMMl9TVERfUEFMX0kpCi0JCXQtPmkyY19lYXN5X21vZGVbMV0gPSAweDA4OwotCWVsc2UgaWYgKHQtPnN0ZCAmIFY0TDJfU1REX0RLKQotCQl0LT5pMmNfZWFzeV9tb2RlWzFdID0gMHgxMDsKLQllbHNlIGlmICh0LT5zdGQgJiBWNEwyX1NURF9TRUNBTV9MKQotCQl0LT5pMmNfZWFzeV9tb2RlWzFdID0gMHgyMDsKKwl0LT50ZGE4Mjd4X2xwc2VsID0gMDsKKwltb2RlID0gInh4IjsKKwlpZiAodC0+c3RkICYgVjRMMl9TVERfTU4pIHsKKwkJdC0+c2dJRiA9IDkyOworCQl0LT50ZGE4MjkwX2Vhc3lfbW9kZSA9IDB4MDE7CisJCXQtPnRkYTgyN3hfbHBzZWwgPSAxOworCQltb2RlID0gIk1OIjsKKwl9IGVsc2UgaWYgKHQtPnN0ZCAmIFY0TDJfU1REX0IpIHsKKwkJdC0+c2dJRiA9IDEwODsKKwkJdC0+dGRhODI5MF9lYXN5X21vZGUgPSAweDAyOworCQltb2RlID0gIkIiOworCX0gZWxzZSBpZiAodC0+c3RkICYgVjRMMl9TVERfR0gpIHsKKwkJdC0+c2dJRiA9IDEyNDsKKwkJdC0+dGRhODI5MF9lYXN5X21vZGUgPSAweDA0OworCQltb2RlID0gIkdIIjsKKwl9IGVsc2UgaWYgKHQtPnN0ZCAmIFY0TDJfU1REX1BBTF9JKSB7CisJCXQtPnNnSUYgPSAxMjQ7CisJCXQtPnRkYTgyOTBfZWFzeV9tb2RlID0gMHgwODsKKwkJbW9kZSA9ICJJIjsKKwl9IGVsc2UgaWYgKHQtPnN0ZCAmIFY0TDJfU1REX0RLKSB7CisJCXQtPnNnSUYgPSAxMjQ7CisJCXQtPnRkYTgyOTBfZWFzeV9tb2RlID0gMHgxMDsKKwkJbW9kZSA9ICJESyI7CisJfSBlbHNlIGlmICh0LT5zdGQgJiBWNEwyX1NURF9TRUNBTV9MKSB7CisJCXQtPnNnSUYgPSAxMjQ7CisJCXQtPnRkYTgyOTBfZWFzeV9tb2RlID0gMHgyMDsKKwkJbW9kZSA9ICJMIjsKKwl9CisgICAgdHVuZXJfZGJnKCJzZXR0aW5nIHRkYTgyOTAgdG8gc3lzdGVtICVzXG4iLCBtb2RlKTsKIH0KIAogc3RhdGljIHZvaWQgc2V0X3R2X2ZyZXEoc3RydWN0IGkyY19jbGllbnQgKmMsIHVuc2lnbmVkIGludCBmcmVxKQpAQCAtMTk1LDE1ICs0NDYsMTMgQEAKIAlzdHJ1Y3QgdHVuZXIgKnQgPSBpMmNfZ2V0X2NsaWVudGRhdGEoYyk7CiAKIAlzZXRfYXVkaW8odCk7Ci0Jc2V0X2ZyZXF1ZW5jeSh0LCA4NjQsIGZyZXEpOwotCXRkYTgyOTBfdHVuZShjKTsKKwl0ZGE4MjkwX3R1bmUoYywgdC0+c2dJRiwgZnJlcSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNldF9yYWRpb19mcmVxKHN0cnVjdCBpMmNfY2xpZW50ICpjLCB1bnNpZ25lZCBpbnQgZnJlcSkKIHsKLQlzdHJ1Y3QgdHVuZXIgKnQgPSBpMmNfZ2V0X2NsaWVudGRhdGEoYyk7Ci0Jc2V0X2ZyZXF1ZW5jeSh0LCA3MDQsIGZyZXEpOwotCXRkYTgyOTBfdHVuZShjKTsKKwkvKiBpZiBmcmVxdWVuY3kgaXMgNS41IE1IeiAqLworCXRkYTgyOTBfdHVuZShjLCA4OCwgZnJlcSk7CiB9CiAKIHN0YXRpYyBpbnQgaGFzX3NpZ25hbChzdHJ1Y3QgaTJjX2NsaWVudCAqYykKQEAgLTIxNiwyNyArNDY1LDE0NSBAQAogCXJldHVybiAoYWZjICYgMHg4MCk/IDY1NTM1OjA7CiB9CiAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwogc3RhdGljIHZvaWQgc3RhbmRieShzdHJ1Y3QgaTJjX2NsaWVudCAqYykKIHsKLQlpMmNfdHJhbnNmZXIoYy0+YWRhcHRlciwgaTJjX21zZ19zdGFuZGJ5LCBBUlJBWV9TSVpFKGkyY19tc2dfc3RhbmRieSkpOworCXN0cnVjdCB0dW5lciAqdCA9IGkyY19nZXRfY2xpZW50ZGF0YShjKTsKKwl1bnNpZ25lZCBjaGFyIGNiMVtdID0geyAweDMwLCAweEQwIH07CisJdW5zaWduZWQgY2hhciB0ZGE4MjkwX3N0YW5kYnlbXSA9IHsgMHgwMCwgMHgwMiB9OworCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsuYWRkciA9IHQtPnRkYTgyN3hfYWRkciwgLmZsYWdzPTAsIC5idWY9Y2IxLCAubGVuID0gMn07CisKKwl0ZGE4MjkwX2kyY19icmlkZ2UoYywgMSk7CisJaWYgKHQtPnRkYTgyN3hfdmVyICE9IDApCisJCWNiMVsxXSA9IDB4OTA7CisJaTJjX3RyYW5zZmVyKGMtPmFkYXB0ZXIsICZtc2csIDEpOworCXRkYTgyOTBfaTJjX2JyaWRnZShjLCAwKTsKKwlpMmNfbWFzdGVyX3NlbmQoYywgdGRhODI5MF9zdGFuZGJ5LCAyKTsKIH0KIAorCitzdGF0aWMgdm9pZCB0ZGE4MjkwX2luaXRfaWYoc3RydWN0IGkyY19jbGllbnQgKmMpCit7CisJdW5zaWduZWQgY2hhciBzZXRfVlNbXSA9IHsgMHgzMCwgMHg2RiB9OworCXVuc2lnbmVkIGNoYXIgc2V0X0dQMDFfQ0ZbXSA9IHsgMHgyMCwgMHgwQiB9OworCisJaTJjX21hc3Rlcl9zZW5kKGMsIHNldF9WUywgMik7CisJaTJjX21hc3Rlcl9zZW5kKGMsIHNldF9HUDAxX0NGLCAyKTsKK30KKworc3RhdGljIHZvaWQgdGRhODI5MF9pbml0X3R1bmVyKHN0cnVjdCBpMmNfY2xpZW50ICpjKQoreworCXN0cnVjdCB0dW5lciAqdCA9IGkyY19nZXRfY2xpZW50ZGF0YShjKTsKKwl1bnNpZ25lZCBjaGFyIHRkYTgyNzVfaW5pdFtdICA9IHsgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhkQywgMHgwNCwgMHhBZiwKKwkJCQkJICAweDNGLCAweDJBLCAweDA0LCAweEZGLCAweDAwLCAweDAwLCAweDQwIH07CisJdW5zaWduZWQgY2hhciB0ZGE4Mjc1YV9pbml0W10gPSB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZEMsIDB4MDUsIDB4OGIsCisJCQkJCSAgMHgwYywgMHgwNCwgMHgyMCwgMHhGRiwgMHgwMCwgMHgwMCwgMHg0YiB9OworCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsuYWRkciA9IHQtPnRkYTgyN3hfYWRkciwgLmZsYWdzPTAsCisJCQkgICAgICAuYnVmPXRkYTgyNzVfaW5pdCwgLmxlbiA9IDE0fTsKKwlpZiAodC0+dGRhODI3eF92ZXIgIT0gMCkKKwkJbXNnLmJ1ZiA9IHRkYTgyNzVhX2luaXQ7CisKKwl0ZGE4MjkwX2kyY19icmlkZ2UoYywgMSk7CisJaTJjX3RyYW5zZmVyKGMtPmFkYXB0ZXIsICZtc2csIDEpOworCXRkYTgyOTBfaTJjX2JyaWRnZShjLCAwKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCiBpbnQgdGRhODI5MF9pbml0KHN0cnVjdCBpMmNfY2xpZW50ICpjKQogewogCXN0cnVjdCB0dW5lciAqdCA9IGkyY19nZXRfY2xpZW50ZGF0YShjKTsKKwl1OCBkYXRhOworCWludCBpLCByZXQsIHR1bmVyc19mb3VuZDsKKwl1MzIgdHVuZXJfYWRkcnM7CisJc3RydWN0IGkyY19tc2cgbXNnID0gey5mbGFncz1JMkNfTV9SRCwgLmJ1Zj0mZGF0YSwgLmxlbiA9IDF9OwogCi0Jc3RybGNweShjLT5uYW1lLCAidGRhODI5MCs3NSIsIHNpemVvZihjLT5uYW1lKSk7CisJdGRhODI5MF9pMmNfYnJpZGdlKGMsIDEpOworCS8qIHByb2JlIGZvciB0dW5lciBjaGlwICovCisJdHVuZXJzX2ZvdW5kID0gMDsKKwl0dW5lcl9hZGRycyA9IDA7CisJZm9yIChpPTB4NjA7IGk8PSAweDYzOyBpKyspIHsKKwkJbXNnLmFkZHIgPSBpOworCQlyZXQgPSBpMmNfdHJhbnNmZXIoYy0+YWRhcHRlciwgJm1zZywgMSk7CisJCWlmIChyZXQgPT0gMSkgeworCQkJdHVuZXJzX2ZvdW5kKys7CisJCQl0dW5lcl9hZGRycyA9ICh0dW5lcl9hZGRycyA8PCA4KSArIGk7CisJCX0KKwl9CisJLyogaWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSB0dW5lciwgd2UgZXhwZWN0IHRoZSByaWdodCBvbmUgaXMKKwkgICBiZWhpbmQgdGhlIGJyaWRnZSBhbmQgd2UgY2hvb3NlIHRoZSBoaWdoZXN0IGFkZHJlc3MgdGhhdCBkb2Vzbid0CisJICAgZ2l2ZSBhIHJlc3BvbnNlIG5vdworCSAqLworCXRkYTgyOTBfaTJjX2JyaWRnZShjLCAwKTsKKwlpZih0dW5lcnNfZm91bmQgPiAxKQorCQlmb3IgKGkgPSAwOyBpIDwgdHVuZXJzX2ZvdW5kOyBpKyspIHsKKwkJCW1zZy5hZGRyID0gdHVuZXJfYWRkcnMgICYgMHhmZjsKKwkJCXJldCA9IGkyY190cmFuc2ZlcihjLT5hZGFwdGVyLCAmbXNnLCAxKTsKKwkJCWlmKHJldCA9PSAxKQorCQkJCXR1bmVyX2FkZHJzID0gdHVuZXJfYWRkcnMgPj4gODsKKwkJCWVsc2UKKwkJCQlicmVhazsKKwkJfQorCWlmICh0dW5lcl9hZGRycyA9PSAwKSB7CisJCXR1bmVyX2FkZHJzID0gMHg2MTsKKwkJdHVuZXJfaW5mbyAoImNvdWxkIG5vdCBjbGVhcmx5IGlkZW50aWZ5IHR1bmVyIGFkZHJlc3MsIGRlZmF1bHRpbmcgdG8gJXhcbiIsCisJCQkgICAgIHR1bmVyX2FkZHJzKTsKKwl9IGVsc2UgeworCQl0dW5lcl9hZGRycyA9IHR1bmVyX2FkZHJzICYgMHhmZjsKKwkJdHVuZXJfaW5mbyAoInNldHRpbmcgdHVuZXIgYWRkcmVzcyB0byAleFxuIiwgdHVuZXJfYWRkcnMpOworCX0KKwl0LT50ZGE4Mjd4X2FkZHIgPSB0dW5lcl9hZGRyczsKKwltc2cuYWRkciA9IHR1bmVyX2FkZHJzOworCisJdGRhODI5MF9pMmNfYnJpZGdlKGMsIDEpOworCXJldCA9IGkyY190cmFuc2ZlcihjLT5hZGFwdGVyLCAmbXNnLCAxKTsKKwlpZiggcmV0ICE9IDEpCisJCXR1bmVyX3dhcm4gKCJUREE4Mjd4IGFjY2VzcyBmYWlsZWQhXG4iKTsKKwlpZiAoKGRhdGEgJiAweDNjKSA9PSAwKSB7CisJCXN0cmxjcHkoYy0+bmFtZSwgInRkYTgyOTArNzUiLCBzaXplb2YoYy0+bmFtZSkpOworCQl0LT50ZGE4Mjd4X3ZlciA9IDA7CisJfSBlbHNlIHsKKwkJc3RybGNweShjLT5uYW1lLCAidGRhODI5MCs3NWEiLCBzaXplb2YoYy0+bmFtZSkpOworCQl0LT50ZGE4Mjd4X3ZlciA9IDI7CisJfQogCXR1bmVyX2luZm8oInR1bmVyOiB0eXBlIHNldCB0byAlc1xuIiwgYy0+bmFtZSk7CisKIAl0LT50dl9mcmVxICAgID0gc2V0X3R2X2ZyZXE7CiAJdC0+cmFkaW9fZnJlcSA9IHNldF9yYWRpb19mcmVxOwogCXQtPmhhc19zaWduYWwgPSBoYXNfc2lnbmFsOwogCXQtPnN0YW5kYnkgPSBzdGFuZGJ5OworCXQtPnRkYTgyN3hfbHBzZWwgPSAwOwogCi0JaTJjX21hc3Rlcl9zZW5kKGMsIGkyY19lbmFibGVfYnJpZGdlLCBBUlJBWV9TSVpFKGkyY19lbmFibGVfYnJpZGdlKSk7Ci0JaTJjX3RyYW5zZmVyKGMtPmFkYXB0ZXIsIGkyY19tc2dfaW5pdCwgQVJSQVlfU0laRShpMmNfbXNnX2luaXQpKTsKKwl0ZGE4MjkwX2luaXRfdHVuZXIoYyk7CisJdGRhODI5MF9pbml0X2lmKGMpOwogCXJldHVybiAwOwogfQogCitpbnQgdGRhODI5MF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqYykKK3sKKwl1bnNpZ25lZCBjaGFyIHNvZnRfcmVzZXRbXSAgPSB7IDB4MDAsIDB4MDAgfTsKKwl1bnNpZ25lZCBjaGFyIGVhc3lfbW9kZV9iW10gPSB7IDB4MDEsIDB4MDIgfTsKKwl1bnNpZ25lZCBjaGFyIGVhc3lfbW9kZV9nW10gPSB7IDB4MDEsIDB4MDQgfTsKKwl1bnNpZ25lZCBjaGFyIGFkZHJfZHRvX2xzYiA9IDB4MDc7CisJdW5zaWduZWQgY2hhciBkYXRhOworCisJaTJjX21hc3Rlcl9zZW5kKGMsIGVhc3lfbW9kZV9iLCAyKTsKKwlpMmNfbWFzdGVyX3NlbmQoYywgc29mdF9yZXNldCwgMik7CisJaTJjX21hc3Rlcl9zZW5kKGMsICZhZGRyX2R0b19sc2IsIDEpOworCWkyY19tYXN0ZXJfcmVjdihjLCAmZGF0YSwgMSk7CisJaWYgKGRhdGEgPT0gMCkgeworCQlpMmNfbWFzdGVyX3NlbmQoYywgZWFzeV9tb2RlX2csIDIpOworCQlpMmNfbWFzdGVyX3NlbmQoYywgc29mdF9yZXNldCwgMik7CisJCWkyY19tYXN0ZXJfc2VuZChjLCAmYWRkcl9kdG9fbHNiLCAxKTsKKwkJaTJjX21hc3Rlcl9yZWN2KGMsICZkYXRhLCAxKTsKKwkJaWYgKGRhdGEgPT0gMHg3YikgeworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJcmV0dXJuIC0xOworfQorCiAvKgogICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGRhOTg3NS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90ZGE5ODc1LmMKaW5kZXggN2UzZGNkYi4uYTVlMzdkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90ZGE5ODc1LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90ZGE5ODc1LmMKQEAgLTMyLDcgKzMyLDYgQEAKIAogI2luY2x1ZGUgImJ0dHYuaCIKICNpbmNsdWRlIDxtZWRpYS9hdWRpb2NoaXAuaD4KLSNpbmNsdWRlIDxtZWRpYS9pZC5oPgogCiBzdGF0aWMgaW50IGRlYnVnOyAvKiBpbnNtb2QgcGFyYW1ldGVyICovCiBtb2R1bGVfcGFyYW0oZGVidWcsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOwpAQCAtMTI2LDIwICsxMjUsMjAgQEAKIAogc3RhdGljIGludCBpMmNfcmVhZF9yZWdpc3RlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsIGludCBhZGRyLCBpbnQgcmVnKQogewotICAgICAgICB1bnNpZ25lZCBjaGFyIHdyaXRlWzFdOwotICAgICAgICB1bnNpZ25lZCBjaGFyIHJlYWRbMV07Ci0gICAgICAgIHN0cnVjdCBpMmNfbXNnIG1zZ3NbMl0gPSB7Ci0gICAgICAgICAgICAgICAgeyBhZGRyLCAwLCAgICAgICAgMSwgd3JpdGUgfSwKLSAgICAgICAgICAgICAgICB7IGFkZHIsIEkyQ19NX1JELCAxLCByZWFkICB9Ci0gICAgICAgIH07Ci0gICAgICAgIHdyaXRlWzBdID0gcmVnOworCXVuc2lnbmVkIGNoYXIgd3JpdGVbMV07CisJdW5zaWduZWQgY2hhciByZWFkWzFdOworCXN0cnVjdCBpMmNfbXNnIG1zZ3NbMl0gPSB7CisJCXsgYWRkciwgMCwgICAgICAgIDEsIHdyaXRlIH0sCisJCXsgYWRkciwgSTJDX01fUkQsIDEsIHJlYWQgIH0KKwl9OworCXdyaXRlWzBdID0gcmVnOwogCi0gICAgICAgIGlmICgyICE9IGkyY190cmFuc2ZlcihhZGFwLG1zZ3MsMikpIHsKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9XQVJOSU5HICJ0ZGE5ODc1OiBJL08gZXJyb3IgKHJlYWQyKVxuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAgICAgIGRwcmludGsoInRkYTk4NzU6IGNoaXBfcmVhZDI6IHJlZyVkPTB4JXhcbiIscmVnLHJlYWRbMF0pOwotICAgICAgICByZXR1cm4gcmVhZFswXTsKKwlpZiAoMiAhPSBpMmNfdHJhbnNmZXIoYWRhcCxtc2dzLDIpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgInRkYTk4NzU6IEkvTyBlcnJvciAocmVhZDIpXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKwlkcHJpbnRrKCJ0ZGE5ODc1OiBjaGlwX3JlYWQyOiByZWclZD0weCV4XG4iLHJlZyxyZWFkWzBdKTsKKwlyZXR1cm4gcmVhZFswXTsKIH0KIAogc3RhdGljIHZvaWQgdGRhOTg3NV9zZXQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKQEAgLTE4NCw3ICsxODMsNyBAQAogCXRkYTk4NzVfd3JpdGUoY2xpZW50LCBUREE5ODc1X0RBQ09TLCAweDAyICk7IC8qIHNpZyBEQUMgaS9vKGluOm5pY2FtKSovCiAJdGRhOTg3NV93cml0ZShjbGllbnQsIFREQTk4NzVfQURDSVMsIDB4NmYgKTsgLyogc2lnIEFEQyBpbnB1dChpbjptb25vKSovCiAJdGRhOTg3NV93cml0ZShjbGllbnQsIFREQTk4NzVfTE9TUiwgMHgwMCApOyAgLyogbGluZSBvdXQgKGluOm1vbm8pKi8KLSAJdGRhOTg3NV93cml0ZShjbGllbnQsIFREQTk4NzVfQUVSLCAweDAwICk7ICAgLyowNiBFZmZlY3QgKEFWTCtQU0VVRE8pICovCisJdGRhOTg3NV93cml0ZShjbGllbnQsIFREQTk4NzVfQUVSLCAweDAwICk7ICAgLyowNiBFZmZlY3QgKEFWTCtQU0VVRE8pICovCiAJdGRhOTg3NV93cml0ZShjbGllbnQsIFREQTk4NzVfTUNTLCAweDQ0ICk7ICAgLyogTWFpbiBjaCBzZWxlY3QgKERBQykgKi8KIAl0ZGE5ODc1X3dyaXRlKGNsaWVudCwgVERBOTg3NV9NVkwsIDB4MDMgKTsgICAvKiBWb2wgTWFpbiBsZWZ0IDEwZEIgKi8KIAl0ZGE5ODc1X3dyaXRlKGNsaWVudCwgVERBOTg3NV9NVlIsIDB4MDMgKTsgICAvKiBWb2wgTWFpbiByaWdodCAxMGRCKi8KQEAgLTIwMCw3ICsxOTksNyBAQAogCiAJdC0+bW9kZT1BVURJT19VTk1VVEU7CiAJdC0+bHZvbD10LT5ydm9sID0wOyAgCS8qIDBkQiAqLwotCXQtPmJhc3M9MDsgCQkgICAgICAgIC8qIDBkQiAqLworCXQtPmJhc3M9MDsgCQkJLyogMGRCICovCiAJdC0+dHJlYmxlPTA7ICAJCS8qIDBkQiAqLwogCXRkYTk4NzVfc2V0KGNsaWVudCk7CiAKQEAgLTIzOSw5ICsyMzgsOSBAQAogCW1lbXNldCh0LDAsc2l6ZW9mICp0KTsKIAogCWNsaWVudCA9ICZ0LT5jOwotICAgICAgICBtZW1jcHkoY2xpZW50LCZjbGllbnRfdGVtcGxhdGUsc2l6ZW9mKHN0cnVjdCBpMmNfY2xpZW50KSk7Ci0gICAgICAgIGNsaWVudC0+YWRhcHRlciA9IGFkYXA7Ci0gICAgICAgIGNsaWVudC0+YWRkciA9IGFkZHI7CisJbWVtY3B5KGNsaWVudCwmY2xpZW50X3RlbXBsYXRlLHNpemVvZihzdHJ1Y3QgaTJjX2NsaWVudCkpOworCWNsaWVudC0+YWRhcHRlciA9IGFkYXA7CisJY2xpZW50LT5hZGRyID0gYWRkcjsKIAlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCB0KTsKIAogCWlmKCF0ZGE5ODc1X2NoZWNraXQoYWRhcCxhZGRyKSkgewpAQCAtMjg3LDcgKzI4Niw3IEBACiAJZHByaW50aygiSW4gdGRhOTg3NV9jb21tYW5kLi4uXG4iKTsKIAogCXN3aXRjaCAoY21kKSB7Ci0gICAgICAgIC8qIC0tLSB2NGwgaW9jdGxzIC0tLSAqLworCS8qIC0tLSB2NGwgaW9jdGxzIC0tLSAqLwogCS8qIHRha2UgY2FyZTogYnR0diBkb2VzIHVzZXJzcGFjZSBjb3B5aW5nLCB3ZSdsbCBnZXQgYQogCSAgIGtlcm5lbCBwb2ludGVyIGhlcmUuLi4gKi8KIAljYXNlIFZJRElPQ0dBVURJTzoKQEAgLTM1NSw3ICszNTQsNyBAQAogLy9wcmludGsoInRkYTk4NzUgYmFsOiUwNHggdm9sOiUwNHggYmFzczolMDR4IHRyZWJsZTolMDR4XG4iLHZhLT5iYWxhbmNlLHZhLT52b2x1bWUsdmEtPmJhc3MsdmEtPnRyZWJsZSk7CiAKIAotICAgICAgICAgICAgICAgIHRkYTk4NzVfc2V0KGNsaWVudCk7CisJCXRkYTk4NzVfc2V0KGNsaWVudCk7CiAKIAkJYnJlYWs7CiAKQEAgLTM3NCwxOCArMzczLDE4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBkcml2ZXIgPSB7CiAJLm93bmVyICAgICAgICAgID0gVEhJU19NT0RVTEUsCi0gICAgICAgIC5uYW1lICAgICAgICAgICA9ICJpMmMgdGRhOTg3NSBkcml2ZXIiLAotICAgICAgICAuaWQgICAgICAgICAgICAgPSBJMkNfRFJJVkVSSURfVERBOTg3NSwKLSAgICAgICAgLmZsYWdzICAgICAgICAgID0gSTJDX0RGX05PVElGWSwKKwkubmFtZSAgICAgICAgICAgPSAiaTJjIHRkYTk4NzUgZHJpdmVyIiwKKwkuaWQgICAgICAgICAgICAgPSBJMkNfRFJJVkVSSURfVERBOTg3NSwKKwkuZmxhZ3MgICAgICAgICAgPSBJMkNfREZfTk9USUZZLAogCS5hdHRhY2hfYWRhcHRlciA9IHRkYTk4NzVfcHJvYmUsCi0gICAgICAgIC5kZXRhY2hfY2xpZW50ICA9IHRkYTk4NzVfZGV0YWNoLAotICAgICAgICAuY29tbWFuZCAgICAgICAgPSB0ZGE5ODc1X2NvbW1hbmQsCisJLmRldGFjaF9jbGllbnQgID0gdGRhOTg3NV9kZXRhY2gsCisJLmNvbW1hbmQgICAgICAgID0gdGRhOTg3NV9jb21tYW5kLAogfTsKIAogc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50IGNsaWVudF90ZW1wbGF0ZSA9CiB7Ci0gICAgICAgIC5uYW1lICAgICAgPSAidGRhOTg3NSIsCi0gICAgICAgIC5kcml2ZXIgICAgPSAmZHJpdmVyLAorCS5uYW1lICAgICAgPSAidGRhOTg3NSIsCisJLmRyaXZlciAgICA9ICZkcml2ZXIsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCB0ZGE5ODc1X2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGRhOTg4Ny5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90ZGE5ODg3LmMKaW5kZXggOTQwNTNmMS4uNDI0OTEyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90ZGE5ODg3LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90ZGE5ODg3LmMKQEAgLTExLDcgKzExLDYgQEAKIAogI2luY2x1ZGUgPG1lZGlhL2F1ZGlvY2hpcC5oPgogI2luY2x1ZGUgPG1lZGlhL3R1bmVyLmg+Ci0jaW5jbHVkZSA8bWVkaWEvaWQuaD4KIAogLyogQ2hpcHM6CiAgICBUREE5ODg1IChQQUwsIE5UU0MpCkBAIC00NCw4ICs0MywxMyBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiAjZGVmaW5lIFVOU0VUICAgICAgICgtMVUpCi0jZGVmaW5lIFBSRUZJWCAgICAgICJ0ZGE5ODg1LzYvNzogIgotI2RlZmluZSBkcHJpbnRrICAgICBpZiAoZGVidWcpIHByaW50aworI2RlZmluZSB0ZGE5ODg3X2luZm8oZm10LCBhcmcuLi4pIGRvIHtcCisJcHJpbnRrKEtFUk5fSU5GTyAiJXMgJWQtJTA0eDogIiBmbXQsIHQtPmNsaWVudC5uYW1lLCBcCisJCQlpMmNfYWRhcHRlcl9pZCh0LT5jbGllbnQuYWRhcHRlciksIHQtPmNsaWVudC5hZGRyICwgIyNhcmcpOyB9IHdoaWxlICgwKQorI2RlZmluZSB0ZGE5ODg3X2RiZyhmbXQsIGFyZy4uLikgZG8ge1wKKwlpZiAoZGVidWcpIFwKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXMgJWQtJTA0eDogIiBmbXQsIHQtPmNsaWVudC5uYW1lLCBcCisJCQlpMmNfYWRhcHRlcl9pZCh0LT5jbGllbnQuYWRhcHRlciksIHQtPmNsaWVudC5hZGRyICwgIyNhcmcpOyB9IHdoaWxlICgwKQogCiBzdHJ1Y3QgdGRhOTg4NyB7CiAJc3RydWN0IGkyY19jbGllbnQgIGNsaWVudDsKQEAgLTU1LDYgKzU5LDcgQEAKIAl1bnNpZ25lZCBpbnQgICAgICAgcGlubmFjbGVfaWQ7CiAJdW5zaWduZWQgaW50ICAgICAgIHVzaW5nX3Y0bDI7CiAJdW5zaWduZWQgaW50IAkgICByYWRpb19tb2RlOworCXVuc2lnbmVkIGNoYXIgCSAgIGRhdGFbNF07CiB9OwogCiBzdHJ1Y3QgdHZub3JtIHsKQEAgLTE4MCw3ICsxODUsOCBAQAogCQkubmFtZSAgPSAiU0VDQU0tTCIsCiAJCS5iICAgICA9ICggY1Bvc2l0aXZlQW1UViAgfAogCQkJICAgY1FTUyAgICAgICAgICAgKSwKLQkJLmUgICAgID0gKCBjQXVkaW9JRl82XzUgICB8CisJCS5lICAgICA9ICggY0dhdGluZ18zNgkgIHwKKwkJCSAgIGNBdWRpb0lGXzZfNSAgIHwKIAkJCSAgIGNWaWRlb0lGXzM4XzkwICksCiAJfSx7CiAJCS5zdGQgICA9IFY0TDJfU1REX1NFQ0FNX0RLLApAQCAtMjM2LDcgKzI0Miw3IEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIHZvaWQgZHVtcF9yZWFkX21lc3NhZ2UodW5zaWduZWQgY2hhciAqYnVmKQorc3RhdGljIHZvaWQgZHVtcF9yZWFkX21lc3NhZ2Uoc3RydWN0IHRkYTk4ODcgKnQsIHVuc2lnbmVkIGNoYXIgKmJ1ZikKIHsKIAlzdGF0aWMgY2hhciAqYWZjWzE2XSA9IHsKIAkJIi0gMTIuNSBrSHoiLApAQCAtMjU2LDE1ICsyNjIsMTUgQEAKIAkJIisgMzcuNSBrSHoiLAogCQkiKyAxMi41IGtIeiIsCiAJfTsKLQlwcmludGsoUFJFRklYICJyZWFkOiAweCUyeFxuIiwgYnVmWzBdKTsKLQlwcmludGsoIiAgYWZ0ZXIgcG93ZXIgb24gOiAlc1xuIiwgKGJ1ZlswXSAmIDB4MDEpID8gInllcyIgOiAibm8iKTsKLQlwcmludGsoIiAgYWZjICAgICAgICAgICAgOiAlc1xuIiwgYWZjWyhidWZbMF0gPj4gMSkgJiAweDBmXSk7Ci0JcHJpbnRrKCIgIGZtaWYgbGV2ZWwgICAgIDogJXNcbiIsIChidWZbMF0gJiAweDIwKSA/ICJoaWdoIiA6ICJsb3ciKTsKLQlwcmludGsoIiAgYWZjIHdpbmRvdyAgICAgOiAlc1xuIiwgKGJ1ZlswXSAmIDB4NDApID8gImluIiA6ICJvdXQiKTsKLQlwcmludGsoIiAgdmZpIGxldmVsICAgICAgOiAlc1xuIiwgKGJ1ZlswXSAmIDB4ODApID8gImhpZ2giIDogImxvdyIpOworCXRkYTk4ODdfaW5mbygicmVhZDogMHglMnhcbiIsIGJ1ZlswXSk7CisJdGRhOTg4N19pbmZvKCIgIGFmdGVyIHBvd2VyIG9uIDogJXNcbiIsIChidWZbMF0gJiAweDAxKSA/ICJ5ZXMiIDogIm5vIik7CisJdGRhOTg4N19pbmZvKCIgIGFmYyAgICAgICAgICAgIDogJXNcbiIsIGFmY1soYnVmWzBdID4+IDEpICYgMHgwZl0pOworCXRkYTk4ODdfaW5mbygiICBmbWlmIGxldmVsICAgICA6ICVzXG4iLCAoYnVmWzBdICYgMHgyMCkgPyAiaGlnaCIgOiAibG93Iik7CisJdGRhOTg4N19pbmZvKCIgIGFmYyB3aW5kb3cgICAgIDogJXNcbiIsIChidWZbMF0gJiAweDQwKSA/ICJpbiIgOiAib3V0Iik7CisJdGRhOTg4N19pbmZvKCIgIHZmaSBsZXZlbCAgICAgIDogJXNcbiIsIChidWZbMF0gJiAweDgwKSA/ICJoaWdoIiA6ICJsb3ciKTsKIH0KIAotc3RhdGljIHZvaWQgZHVtcF93cml0ZV9tZXNzYWdlKHVuc2lnbmVkIGNoYXIgKmJ1ZikKK3N0YXRpYyB2b2lkIGR1bXBfd3JpdGVfbWVzc2FnZShzdHJ1Y3QgdGRhOTg4NyAqdCwgdW5zaWduZWQgY2hhciAqYnVmKQogewogCXN0YXRpYyBjaGFyICpzb3VuZFs0XSA9IHsKIAkJIkFNL1RWIiwKQEAgLTMwNCw1OCArMzEwLDU4IEBACiAJCSI0NCBNSHoiLAogCX07CiAKLQlwcmludGsoUFJFRklYICJ3cml0ZTogYnl0ZSBCIDB4JTAyeFxuIixidWZbMV0pOwotCXByaW50aygiICBCMCAgIHZpZGVvIG1vZGUgICAgICA6ICVzXG4iLAorCXRkYTk4ODdfaW5mbygid3JpdGU6IGJ5dGUgQiAweCUwMnhcbiIsYnVmWzFdKTsKKwl0ZGE5ODg3X2luZm8oIiAgQjAgICB2aWRlbyBtb2RlICAgICAgOiAlc1xuIiwKIAkgICAgICAgKGJ1ZlsxXSAmIDB4MDEpID8gInZpZGVvIHRyYXAiIDogInNvdW5kIHRyYXAiKTsKLQlwcmludGsoIiAgQjEgICBhdXRvIG11dGUgZm0gICAgOiAlc1xuIiwKKwl0ZGE5ODg3X2luZm8oIiAgQjEgICBhdXRvIG11dGUgZm0gICAgOiAlc1xuIiwKIAkgICAgICAgKGJ1ZlsxXSAmIDB4MDIpID8gInllcyIgOiAibm8iKTsKLQlwcmludGsoIiAgQjIgICBjYXJyaWVyIG1vZGUgICAgOiAlc1xuIiwKKwl0ZGE5ODg3X2luZm8oIiAgQjIgICBjYXJyaWVyIG1vZGUgICAgOiAlc1xuIiwKIAkgICAgICAgKGJ1ZlsxXSAmIDB4MDQpID8gIlFTUyIgOiAiSW50ZXJjYXJyaWVyIik7Ci0JcHJpbnRrKCIgIEIzLTQgdHYgc291bmQvcmFkaW8gIDogJXNcbiIsCisJdGRhOTg4N19pbmZvKCIgIEIzLTQgdHYgc291bmQvcmFkaW8gIDogJXNcbiIsCiAJICAgICAgIHNvdW5kWyhidWZbMV0gJiAweDE4KSA+PiAzXSk7Ci0JcHJpbnRrKCIgIEI1ICAgZm9yY2UgbXV0ZSBhdWRpbzogJXNcbiIsCisJdGRhOTg4N19pbmZvKCIgIEI1ICAgZm9yY2UgbXV0ZSBhdWRpbzogJXNcbiIsCiAJICAgICAgIChidWZbMV0gJiAweDIwKSA/ICJ5ZXMiIDogIm5vIik7Ci0JcHJpbnRrKCIgIEI2ICAgb3V0cHV0IHBvcnQgMSAgIDogJXNcbiIsCisJdGRhOTg4N19pbmZvKCIgIEI2ICAgb3V0cHV0IHBvcnQgMSAgIDogJXNcbiIsCiAJICAgICAgIChidWZbMV0gJiAweDQwKSA/ICJoaWdoIChpbmFjdGl2ZSkiIDogImxvdyAoYWN0aXZlKSIpOwotCXByaW50aygiICBCNyAgIG91dHB1dCBwb3J0IDIgICA6ICVzXG4iLAorCXRkYTk4ODdfaW5mbygiICBCNyAgIG91dHB1dCBwb3J0IDIgICA6ICVzXG4iLAogCSAgICAgICAoYnVmWzFdICYgMHg4MCkgPyAiaGlnaCAoaW5hY3RpdmUpIiA6ICJsb3cgKGFjdGl2ZSkiKTsKIAotCXByaW50ayhQUkVGSVggIndyaXRlOiBieXRlIEMgMHglMDJ4XG4iLGJ1ZlsyXSk7Ci0JcHJpbnRrKCIgIEMwLTQgdG9wIGFkanVzdG1lbnQgIDogJXMgZEJcbiIsIGFkanVzdFtidWZbMl0gJiAweDFmXSk7Ci0JcHJpbnRrKCIgIEM1LTYgZGUtZW1waGFzaXMgICAgIDogJXNcbiIsIGRlZW1waFsoYnVmWzJdICYgMHg2MCkgPj4gNV0pOwotCXByaW50aygiICBDNyAgIGF1ZGlvIGdhaW4gICAgICA6ICVzXG4iLAorCXRkYTk4ODdfaW5mbygid3JpdGU6IGJ5dGUgQyAweCUwMnhcbiIsYnVmWzJdKTsKKwl0ZGE5ODg3X2luZm8oIiAgQzAtNCB0b3AgYWRqdXN0bWVudCAgOiAlcyBkQlxuIiwgYWRqdXN0W2J1ZlsyXSAmIDB4MWZdKTsKKwl0ZGE5ODg3X2luZm8oIiAgQzUtNiBkZS1lbXBoYXNpcyAgICAgOiAlc1xuIiwgZGVlbXBoWyhidWZbMl0gJiAweDYwKSA+PiA1XSk7CisJdGRhOTg4N19pbmZvKCIgIEM3ICAgYXVkaW8gZ2FpbiAgICAgIDogJXNcbiIsCiAJICAgICAgIChidWZbMl0gJiAweDgwKSA/ICItNiIgOiAiMCIpOwogCi0JcHJpbnRrKFBSRUZJWCAid3JpdGU6IGJ5dGUgRSAweCUwMnhcbiIsYnVmWzNdKTsKLQlwcmludGsoIiAgRTAtMSBzb3VuZCBjYXJyaWVyICAgOiAlc1xuIiwKKwl0ZGE5ODg3X2luZm8oIndyaXRlOiBieXRlIEUgMHglMDJ4XG4iLGJ1ZlszXSk7CisJdGRhOTg4N19pbmZvKCIgIEUwLTEgc291bmQgY2FycmllciAgIDogJXNcbiIsCiAJICAgICAgIGNhcnJpZXJbKGJ1ZlszXSAmIDB4MDMpXSk7Ci0JcHJpbnRrKCIgIEU2ICAgbCBwbGwgZ2FudGluZyAgIDogJXNcbiIsCisJdGRhOTg4N19pbmZvKCIgIEU2ICAgbCBwbGwgZ2F0aW5nICAgOiAlc1xuIiwKIAkgICAgICAgKGJ1ZlszXSAmIDB4NDApID8gIjM2IiA6ICIxMyIpOwogCiAJaWYgKGJ1ZlsxXSAmIDB4MDgpIHsKIAkJLyogcmFkaW8gKi8KLQkJcHJpbnRrKCIgIEUyLTQgdmlkZW8gaWYgICAgICAgIDogJXNcbiIsCisJCXRkYTk4ODdfaW5mbygiICBFMi00IHZpZGVvIGlmICAgICAgICA6ICVzXG4iLAogCQkgICAgICAgcmlmWyhidWZbM10gJiAweDBjKSA+PiAyXSk7Ci0JCXByaW50aygiICBFNyAgIHZpZiBhZ2Mgb3V0cHV0ICA6ICVzXG4iLAorCQl0ZGE5ODg3X2luZm8oIiAgRTcgICB2aWYgYWdjIG91dHB1dCAgOiAlc1xuIiwKIAkJICAgICAgIChidWZbM10gJiAweDgwKQogCQkgICAgICAgPyAoKGJ1ZlszXSAmIDB4MTApID8gImZtLWFnYyByYWRpbyIgOiAic2lmLWFnYyByYWRpbyIpCiAJCSAgICAgICA6ICJmbSByYWRpbyBjYXJyaWVyIGFmYyIpOwogCX0gZWxzZSB7CiAJCS8qIHZpZGVvICovCi0JCXByaW50aygiICBFMi00IHZpZGVvIGlmICAgICAgICA6ICVzXG4iLAorCQl0ZGE5ODg3X2luZm8oIiAgRTItNCB2aWRlbyBpZiAgICAgICAgOiAlc1xuIiwKIAkJICAgICAgIHZpZlsoYnVmWzNdICYgMHgxYykgPj4gMl0pOwotCQlwcmludGsoIiAgRTUgICB0dW5lciBnYWluICAgICAgOiAlc1xuIiwKKwkJdGRhOTg4N19pbmZvKCIgIEU1ICAgdHVuZXIgZ2FpbiAgICAgIDogJXNcbiIsCiAJCSAgICAgICAoYnVmWzNdICYgMHg4MCkKIAkJICAgICAgID8gKChidWZbM10gJiAweDIwKSA/ICJleHRlcm5hbCIgOiAibm9ybWFsIikKIAkJICAgICAgIDogKChidWZbM10gJiAweDIwKSA/ICJtaW5pbXVtIiAgOiAibm9ybWFsIikpOwotCQlwcmludGsoIiAgRTcgICB2aWYgYWdjIG91dHB1dCAgOiAlc1xuIiwKKwkJdGRhOTg4N19pbmZvKCIgIEU3ICAgdmlmIGFnYyBvdXRwdXQgIDogJXNcbiIsCiAJCSAgICAgICAoYnVmWzNdICYgMHg4MCkKIAkJICAgICAgID8gKChidWZbM10gJiAweDIwKQogCQkJICA/ICJwaW4zIHBvcnQsIHBpbjIyIHZpZiBhZ2Mgb3V0IgogCQkJICA6ICJwaW4yMiBwb3J0LCBwaW4zIHZpZiBhY2cgZXh0IGluIikKIAkJICAgICAgIDogInBpbjMrcGluMjIgcG9ydCIpOwogCX0KLQlwcmludGsoIi0tXG4iKTsKKwl0ZGE5ODg3X2luZm8oIi0tXG4iKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMzc5LDExICszODUsMTEgQEAKIAkJfQogCX0KIAlpZiAoTlVMTCA9PSBub3JtKSB7Ci0JCWRwcmludGsoUFJFRklYICJVbnN1cHBvcnRlZCB0dm5vcm0gZW50cnkgLSBhdWRpbyBtdXRlZFxuIik7CisJCXRkYTk4ODdfZGJnKCJVbnN1cHBvcnRlZCB0dm5vcm0gZW50cnkgLSBhdWRpbyBtdXRlZFxuIik7CiAJCXJldHVybiAtMTsKIAl9CiAKLQlkcHJpbnRrKFBSRUZJWCAiY29uZmlndXJlIGZvcjogJXNcbiIsbm9ybS0+bmFtZSk7CisJdGRhOTg4N19kYmcoImNvbmZpZ3VyZSBmb3I6ICVzXG4iLG5vcm0tPm5hbWUpOwogCWJ1ZlsxXSA9IG5vcm0tPmI7CiAJYnVmWzJdID0gbm9ybS0+YzsKIAlidWZbM10gPSBub3JtLT5lOwpAQCAtNDU4LDYgKzQ2NCw4IEBACiAJCQlicmVhazsKIAkJfQogCX0KKwlpZiAoKHQtPmNvbmZpZyAmIFREQTk4ODdfSU5URVJDQVJSSUVSX05UU0MpICYmICh0LT5zdGQgJiBWNEwyX1NURF9OVFNDKSkKKwkJYnVmWzFdICY9IH5jUVNTOwogCXJldHVybiAwOwogfQogCkBAIC00NzUsMTEgKzQ4MywxMSBAQAogCQl9CiAJfQogCWlmICh0LT5zdGQgJiBWNEwyX1NURF81MjVfNjApIHsKLSAgICAgICAgICAgICAgICBpZiAoKDUgPT0gdC0+cGlubmFjbGVfaWQpIHx8ICg2ID09IHQtPnBpbm5hY2xlX2lkKSkgeworCQlpZiAoKDUgPT0gdC0+cGlubmFjbGVfaWQpIHx8ICg2ID09IHQtPnBpbm5hY2xlX2lkKSkgewogCQkJYkNhcnJpZXJNb2RlID0gY0ludGVyY2FycmllcjsKIAkJfSBlbHNlIHsKIAkJCWJDYXJyaWVyTW9kZSA9IGNRU1M7Ci0gICAgICAgICAgICAgICAgfQorCQl9CiAJfQogCiAJaWYgKGJDYXJyaWVyTW9kZSAhPSBVTlNFVCkgewpAQCAtNTA1LDI2ICs1MTMsMjYgQEAKIAkJY2FzZSAnQic6CiAJCWNhc2UgJ2cnOgogCQljYXNlICdHJzoKLQkJCWRwcmludGsoUFJFRklYICJpbnNtb2QgZml4dXA6IFBBTCA9PiBQQUwtQkdcbiIpOworCQkJdGRhOTg4N19kYmcoImluc21vZCBmaXh1cDogUEFMID0+IFBBTC1CR1xuIik7CiAJCQl0LT5zdGQgPSBWNEwyX1NURF9QQUxfQkc7CiAJCQlicmVhazsKIAkJY2FzZSAnaSc6CiAJCWNhc2UgJ0knOgotCQkJZHByaW50ayhQUkVGSVggImluc21vZCBmaXh1cDogUEFMID0+IFBBTC1JXG4iKTsKKwkJCXRkYTk4ODdfZGJnKCJpbnNtb2QgZml4dXA6IFBBTCA9PiBQQUwtSVxuIik7CiAJCQl0LT5zdGQgPSBWNEwyX1NURF9QQUxfSTsKIAkJCWJyZWFrOwogCQljYXNlICdkJzoKIAkJY2FzZSAnRCc6CiAJCWNhc2UgJ2snOgogCQljYXNlICdLJzoKLQkJCWRwcmludGsoUFJFRklYICJpbnNtb2QgZml4dXA6IFBBTCA9PiBQQUwtREtcbiIpOworCQkJdGRhOTg4N19kYmcoImluc21vZCBmaXh1cDogUEFMID0+IFBBTC1ES1xuIik7CiAJCQl0LT5zdGQgPSBWNEwyX1NURF9QQUxfREs7CiAJCQlicmVhazsKIAkJY2FzZSAnLSc6CiAJCQkvKiBkZWZhdWx0IHBhcmFtZXRlciwgZG8gbm90aGluZyAqLwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlwcmludGsoUFJFRklYICJwYWw9IGFyZ3VtZW50IG5vdCByZWNvZ25pc2VkXG4iKTsKKwkJCXRkYTk4ODdfaW5mbygicGFsPSBhcmd1bWVudCBub3QgcmVjb2duaXNlZFxuIik7CiAJCQlicmVhazsKIAkJfQogCX0KQEAgLTUzNCwxOSArNTQyLDE5IEBACiAJCWNhc2UgJ0QnOgogCQljYXNlICdrJzoKIAkJY2FzZSAnSyc6Ci0JCQlkcHJpbnRrKFBSRUZJWCAiaW5zbW9kIGZpeHVwOiBTRUNBTSA9PiBTRUNBTS1ES1xuIik7CisJCQl0ZGE5ODg3X2RiZygiaW5zbW9kIGZpeHVwOiBTRUNBTSA9PiBTRUNBTS1ES1xuIik7CiAJCQl0LT5zdGQgPSBWNEwyX1NURF9TRUNBTV9ESzsKIAkJCWJyZWFrOwogCQljYXNlICdsJzoKIAkJY2FzZSAnTCc6Ci0JCQlkcHJpbnRrKFBSRUZJWCAiaW5zbW9kIGZpeHVwOiBTRUNBTSA9PiBTRUNBTS1MXG4iKTsKKwkJCXRkYTk4ODdfZGJnKCJpbnNtb2QgZml4dXA6IFNFQ0FNID0+IFNFQ0FNLUxcbiIpOwogCQkJdC0+c3RkID0gVjRMMl9TVERfU0VDQU1fTDsKIAkJCWJyZWFrOwogCQljYXNlICctJzoKIAkJCS8qIGRlZmF1bHQgcGFyYW1ldGVyLCBkbyBub3RoaW5nICovCiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCXByaW50ayhQUkVGSVggInNlY2FtPSBhcmd1bWVudCBub3QgcmVjb2duaXNlZFxuIik7CisJCQl0ZGE5ODg3X2luZm8oInNlY2FtPSBhcmd1bWVudCBub3QgcmVjb2duaXNlZFxuIik7CiAJCQlicmVhazsKIAkJfQogCX0KQEAgLTU1OSw0MSArNTY3LDQwIEBACiAJaW50IHJjOwogCiAJbWVtc2V0KGJ1ZiwwLHNpemVvZihidWYpKTsKLSAgICAgICAgaWYgKDEgIT0gKHJjID0gaTJjX21hc3Rlcl9yZWN2KCZ0LT5jbGllbnQsYnVmLDEpKSkKLSAgICAgICAgICAgICAgICBwcmludGsoUFJFRklYICJpMmMgaS9vIGVycm9yOiByYyA9PSAlZCAoc2hvdWxkIGJlIDEpXG4iLHJjKTsKLQlkdW1wX3JlYWRfbWVzc2FnZShidWYpOworCWlmICgxICE9IChyYyA9IGkyY19tYXN0ZXJfcmVjdigmdC0+Y2xpZW50LGJ1ZiwxKSkpCisJCXRkYTk4ODdfaW5mbygiaTJjIGkvbyBlcnJvcjogcmMgPT0gJWQgKHNob3VsZCBiZSAxKVxuIixyYyk7CisJZHVtcF9yZWFkX21lc3NhZ2UodCwgYnVmKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB0ZGE5ODg3X2NvbmZpZ3VyZShzdHJ1Y3QgdGRhOTg4NyAqdCkKIHsKLQl1bnNpZ25lZCBjaGFyIGJ1Zls0XTsKIAlpbnQgcmM7CiAKLQltZW1zZXQoYnVmLDAsc2l6ZW9mKGJ1ZikpOwotCXRkYTk4ODdfc2V0X3R2bm9ybSh0LGJ1Zik7CisJbWVtc2V0KHQtPmRhdGEsMCxzaXplb2YodC0+ZGF0YSkpOworCXRkYTk4ODdfc2V0X3R2bm9ybSh0LHQtPmRhdGEpOwogCi0JYnVmWzFdIHw9IGNPdXRwdXRQb3J0MUluYWN0aXZlOwotCWJ1ZlsxXSB8PSBjT3V0cHV0UG9ydDJJbmFjdGl2ZTsKKwl0LT5kYXRhWzFdIHw9IGNPdXRwdXRQb3J0MUluYWN0aXZlOworCXQtPmRhdGFbMV0gfD0gY091dHB1dFBvcnQySW5hY3RpdmU7CiAKIAlpZiAoVU5TRVQgIT0gdC0+cGlubmFjbGVfaWQpIHsKLQkJdGRhOTg4N19zZXRfcGlubmFjbGUodCxidWYpOworCQl0ZGE5ODg3X3NldF9waW5uYWNsZSh0LHQtPmRhdGEpOwogCX0KLQl0ZGE5ODg3X3NldF9jb25maWcodCxidWYpOwotCXRkYTk4ODdfc2V0X2luc21vZCh0LGJ1Zik7CisJdGRhOTg4N19zZXRfY29uZmlnKHQsdC0+ZGF0YSk7CisJdGRhOTg4N19zZXRfaW5zbW9kKHQsdC0+ZGF0YSk7CiAKIAlpZiAodC0+bW9kZSA9PSBUX1NUQU5EQlkpIHsKLQkJYnVmWzFdIHw9IGNGb3JjZWRNdXRlQXVkaW9PTjsKKwkJdC0+ZGF0YVsxXSB8PSBjRm9yY2VkTXV0ZUF1ZGlvT047CiAJfQogCiAKLQlkcHJpbnRrKFBSRUZJWCAid3JpdGluZzogYj0weCUwMnggYz0weCUwMnggZT0weCUwMnhcbiIsCi0JCWJ1ZlsxXSxidWZbMl0sYnVmWzNdKTsKKwl0ZGE5ODg3X2RiZygid3JpdGluZzogYj0weCUwMnggYz0weCUwMnggZT0weCUwMnhcbiIsCisJCXQtPmRhdGFbMV0sdC0+ZGF0YVsyXSx0LT5kYXRhWzNdKTsKIAlpZiAoZGVidWcgPiAxKQotCQlkdW1wX3dyaXRlX21lc3NhZ2UoYnVmKTsKKwkJZHVtcF93cml0ZV9tZXNzYWdlKHQsIHQtPmRhdGEpOwogCi0gICAgICAgIGlmICg0ICE9IChyYyA9IGkyY19tYXN0ZXJfc2VuZCgmdC0+Y2xpZW50LGJ1Ziw0KSkpCi0gICAgICAgICAgICAgICAgcHJpbnRrKFBSRUZJWCAiaTJjIGkvbyBlcnJvcjogcmMgPT0gJWQgKHNob3VsZCBiZSA0KVxuIixyYyk7CisJaWYgKDQgIT0gKHJjID0gaTJjX21hc3Rlcl9zZW5kKCZ0LT5jbGllbnQsdC0+ZGF0YSw0KSkpCisJCXRkYTk4ODdfaW5mbygiaTJjIGkvbyBlcnJvcjogcmMgPT0gJWQgKHNob3VsZCBiZSA0KVxuIixyYyk7CiAKIAlpZiAoZGVidWcgPiAyKSB7CiAJCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDEwMDApOwpAQCAtNjA4LDEzICs2MTUsMTEgQEAKIHsKIAlzdHJ1Y3QgdGRhOTg4NyAqdDsKIAotICAgICAgICBjbGllbnRfdGVtcGxhdGUuYWRhcHRlciA9IGFkYXA7Ci0gICAgICAgIGNsaWVudF90ZW1wbGF0ZS5hZGRyICAgID0gYWRkcjsKKwljbGllbnRfdGVtcGxhdGUuYWRhcHRlciA9IGFkYXA7CisJY2xpZW50X3RlbXBsYXRlLmFkZHIgICAgPSBhZGRyOwogCi0gICAgICAgIHByaW50ayhQUkVGSVggImNoaXAgZm91bmQgQCAweCV4XG4iLCBhZGRyPDwxKTsKLQotICAgICAgICBpZiAoTlVMTCA9PSAodCA9IGttYWxsb2Moc2l6ZW9mKCp0KSwgR0ZQX0tFUk5FTCkpKQotICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOworCWlmIChOVUxMID09ICh0ID0ga21hbGxvYyhzaXplb2YoKnQpLCBHRlBfS0VSTkVMKSkpCisJCXJldHVybiAtRU5PTUVNOwogCW1lbXNldCh0LDAsc2l6ZW9mKCp0KSk7CiAKIAl0LT5jbGllbnQgICAgICA9IGNsaWVudF90ZW1wbGF0ZTsKQEAgLTYyMiw2ICs2MjcsOCBAQAogCXQtPnBpbm5hY2xlX2lkID0gVU5TRVQ7CiAJdC0+cmFkaW9fbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9TVEVSRU87CiAKKwl0ZGE5ODg3X2luZm8oImNoaXAgZm91bmQgQCAweCV4ICglcylcbiIsIGFkZHI8PDEsIGFkYXAtPm5hbWUpOworCiAJaTJjX3NldF9jbGllbnRkYXRhKCZ0LT5jbGllbnQsIHQpOwogCWkyY19hdHRhY2hfY2xpZW50KCZ0LT5jbGllbnQpOwogCkBAIC02NTUsMTggKzY2MiwxOCBAQAogfQogCiAjZGVmaW5lIFNXSVRDSF9WNEwyCWlmICghdC0+dXNpbmdfdjRsMiAmJiBkZWJ1ZykgXAotCQkgICAgICAgICAgcHJpbnRrKFBSRUZJWCAic3dpdGNoaW5nIHRvIHY0bDJcbiIpOyBcCi0JICAgICAgICAgICAgICAgICAgdC0+dXNpbmdfdjRsMiA9IDE7CisJCQkgIHRkYTk4ODdfaW5mbygic3dpdGNoaW5nIHRvIHY0bDJcbiIpOyBcCisJCQkgIHQtPnVzaW5nX3Y0bDIgPSAxOwogI2RlZmluZSBDSEVDS19WNEwyCWlmICh0LT51c2luZ192NGwyKSB7IGlmIChkZWJ1ZykgXAotCQkJICBwcmludGsoUFJFRklYICJpZ25vcmUgdjRsMSBjYWxsXG4iKTsgXAotCQkgICAgICAgICAgcmV0dXJuIDA7IH0KKwkJCSAgdGRhOTg4N19pbmZvKCJpZ25vcmUgdjRsMSBjYWxsXG4iKTsgXAorCQkJICByZXR1cm4gMDsgfQogCiBzdGF0aWMgaW50CiB0ZGE5ODg3X2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQogewogCXN0cnVjdCB0ZGE5ODg3ICp0ID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKLSAgICAgICAgc3dpdGNoIChjbWQpIHsKKwlzd2l0Y2ggKGNtZCkgewogCiAJLyogLS0tIGNvbmZpZ3VyYXRpb24gLS0tICovCiAJY2FzZSBBVURDX1NFVF9SQURJTzoKQEAgLTc3Nyw2ICs3ODQsMTEgQEAKIAkJfQogCQlicmVhazsKIAl9CisJY2FzZSBWSURJT0NfTE9HX1NUQVRVUzoKKwl7CisJCXRkYTk4ODdfaW5mbygiRGF0YSBieXRlczogYj0lMDJ4IGM9JTAyeCBlPSUwMnhcbiIsIHQtPmRhdGFbMV0sIHQtPmRhdGFbMl0sIHQtPmRhdGFbM10pOworCQlicmVhazsKKwl9CiAJZGVmYXVsdDoKIAkJLyogbm90aGluZyAqLwogCQlicmVhazsKQEAgLTc4Niw3ICs3OTgsMTAgQEAKIAogc3RhdGljIGludCB0ZGE5ODg3X3N1c3BlbmQoc3RydWN0IGRldmljZSAqIGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCWRwcmludGsoInRkYTk4ODc6IHN1c3BlbmRcbiIpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IGkyY19jbGllbnQsIGRldik7CisJc3RydWN0IHRkYTk4ODcgKnQgPSBpMmNfZ2V0X2NsaWVudGRhdGEoYyk7CisKKwl0ZGE5ODg3X2RiZygic3VzcGVuZFxuIik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTc5NSw3ICs4MTAsNyBAQAogCXN0cnVjdCBpMmNfY2xpZW50ICpjID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IGkyY19jbGllbnQsIGRldik7CiAJc3RydWN0IHRkYTk4ODcgKnQgPSBpMmNfZ2V0X2NsaWVudGRhdGEoYyk7CiAKLQlkcHJpbnRrKCJ0ZGE5ODg3OiByZXN1bWVcbiIpOworCXRkYTk4ODdfZGJnKCJyZXN1bWVcbiIpOwogCXRkYTk4ODdfY29uZmlndXJlKHQpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90ZWE1NzY3LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RlYTU3NjcuYwppbmRleCAzOGJmNTA5Li5hOTM3NWVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RlYTU3NjcuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RlYTU3NjcuYwpAQCAtMTE3LDEwICsxMTcsMTAgQEAKICNkZWZpbmUgVEVBNTc2N19SRVNFUlZFRF9NQVNLCTB4ZmYKIAogZW51bSB0ZWE1NzY3X3h0YWxfZnJlcSB7Ci0gICAgICAgIFRFQTU3NjdfTE9XX0xPXzMyNzY4ICAgID0gMCwKLSAgICAgICAgVEVBNTc2N19ISUdIX0xPXzMyNzY4ICAgPSAxLAotICAgICAgICBURUE1NzY3X0xPV19MT18xM01IeiAgICA9IDIsCi0gICAgICAgIFRFQTU3NjdfSElHSF9MT18xM01IeiAgID0gMywKKwlURUE1NzY3X0xPV19MT18zMjc2OCAgICA9IDAsCisJVEVBNTc2N19ISUdIX0xPXzMyNzY4ICAgPSAxLAorCVRFQTU3NjdfTE9XX0xPXzEzTUh6ICAgID0gMiwKKwlURUE1NzY3X0hJR0hfTE9fMTNNSHogICA9IDMsCiB9OwogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHVuZXItY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90dW5lci1jb3JlLmMKaW5kZXggYWQ4NWJlZi4uNzNjNDA0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90dW5lci1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90dW5lci1jb3JlLmMKQEAgLTI4LDcgKzI4LDcgQEAKIAogLyogc3RhbmRhcmQgaTJjIGluc21vZCBvcHRpb25zICovCiBzdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0gewotCTB4NGIsCQkJLyogdGRhODI5MCAqLworCTB4NDIsIDB4NDMsIDB4NGEsIDB4NGIsCQkJLyogdGRhODI5MCAqLwogCTB4NjAsIDB4NjEsIDB4NjIsIDB4NjMsIDB4NjQsIDB4NjUsIDB4NjYsIDB4NjcsCiAJMHg2OCwgMHg2OSwgMHg2YSwgMHg2YiwgMHg2YywgMHg2ZCwgMHg2ZSwgMHg2ZiwKIAlJMkNfQ0xJRU5UX0VORApAQCAtMTg5LDYgKzE4OSwxMyBAQAogCQlpMmNfbWFzdGVyX3NlbmQoYywgYnVmZmVyLCA0KTsKIAkJZGVmYXVsdF90dW5lcl9pbml0KGMpOwogCQlicmVhazsKKwljYXNlIFRVTkVSX1BISUxJUFNfVEQxMzE2OgorCQlidWZmZXJbMF0gPSAweDBiOworCQlidWZmZXJbMV0gPSAweGRjOworCQlidWZmZXJbMl0gPSAweDg2OworCQlidWZmZXJbM10gPSAweGE0OworCQlpMmNfbWFzdGVyX3NlbmQoYyxidWZmZXIsNCk7CisJCWRlZmF1bHRfdHVuZXJfaW5pdChjKTsKIAlkZWZhdWx0OgogCQlkZWZhdWx0X3R1bmVyX2luaXQoYyk7CiAJCWJyZWFrOwpAQCAtMjE1LDkgKzIyMiw5IEBACiB7CiAJc3RydWN0IHR1bmVyICp0ID0gaTJjX2dldF9jbGllbnRkYXRhKGMpOwogCi0JaWYgKCh0dW5fc2V0dXAtPmFkZHIgPT0gQUREUl9VTlNFVCAmJgorCWlmICggdC0+dHlwZSA9PSBVTlNFVCAmJiAoKHR1bl9zZXR1cC0+YWRkciA9PSBBRERSX1VOU0VUICYmCiAJCSh0LT5tb2RlX21hc2sgJiB0dW5fc2V0dXAtPm1vZGVfbWFzaykpIHx8Ci0JCXR1bl9zZXR1cC0+YWRkciA9PSBjLT5hZGRyKSB7CisJCXR1bl9zZXR1cC0+YWRkciA9PSBjLT5hZGRyKSkgewogCQkJc2V0X3R5cGUoYywgdHVuX3NldHVwLT50eXBlLCB0dW5fc2V0dXAtPm1vZGVfbWFzayk7CiAJfQogfQpAQCAtMzQxLDIzICszNDgsMzMgQEAKIAl0LT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX1NURVJFTzsKIAl0LT5tb2RlX21hc2sgPSBUX1VOSU5JVElBTElaRUQ7CiAKLQotCXR1bmVyX2luZm8oImNoaXAgZm91bmQgQCAweCV4ICglcylcbiIsIGFkZHIgPDwgMSwgYWRhcC0+bmFtZSk7Ci0KIAlpZiAoc2hvd19pMmMpIHsKIAkJdW5zaWduZWQgY2hhciBidWZmZXJbMTZdOwogCQlpbnQgaSxyYzsKIAogCQltZW1zZXQoYnVmZmVyLCAwLCBzaXplb2YoYnVmZmVyKSk7CiAJCXJjID0gaTJjX21hc3Rlcl9yZWN2KCZ0LT5pMmMsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOwotCQlwcmludGsoInR1bmVyLSUwNHggSTJDIFJFQ1YgPSAiLGFkZHIpOworCQl0dW5lcl9pbmZvKCJJMkMgUkVDViA9ICIpOwogCQlmb3IgKGk9MDtpPHJjO2krKykKIAkJCXByaW50aygiJTAyeCAiLGJ1ZmZlcltpXSk7CiAJCXByaW50aygiXG4iKTsKIAl9CiAJLyogVEVBNTc2NyBhdXRvZGV0ZWN0aW9uIGNvZGUgLSBvbmx5IGZvciBhZGRyID0gMHhjMCAqLwogCWlmICghbm9fYXV0b2RldGVjdCkgewotCQlpZiAoYWRkciA9PSAweDYwKSB7CisJCXN3aXRjaCAoYWRkcikgeworCQljYXNlIDB4NDI6CisJCWNhc2UgMHg0MzoKKwkJY2FzZSAweDRhOgorCQljYXNlIDB4NGI6CisJCQkvKiBJZiBjaGlwIGlzIG5vdCB0ZGE4MjkwLCBkb24ndCByZWdpc3Rlci4KKwkJCSAgIHNpbmNlIGl0IGNhbiBiZSB0ZGE5ODg3Ki8KKwkJCWlmICh0ZGE4MjkwX3Byb2JlKCZ0LT5pMmMpICE9IDApIHsKKwkJCQl0dW5lcl9kYmcoImNoaXAgYXQgYWRkciAleCBpcyBub3QgYSB0ZGE4MjkwXG4iLCBhZGRyKTsKKwkJCQlrZnJlZSh0KTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIDB4NjA6CiAJCQlpZiAodGVhNTc2N19hdXRvZGV0ZWN0aW9uKCZ0LT5pMmMpICE9IEVJTlZBTCkgewogCQkJCXQtPnR5cGUgPSBUVU5FUl9URUE1NzY3OwogCQkJCXQtPm1vZGVfbWFzayA9IFRfUkFESU87CkBAIC0zNjUsMTAgKzM4Miw5IEBACiAJCQkJdC0+ZnJlcSA9IDg3LjUgKiAxNjsgLyogU2V0cyBmcmVxIHRvIEZNIHJhbmdlICovCiAJCQkJZGVmYXVsdF9tb2RlX21hc2sgJj0gflRfUkFESU87CiAKLQkJCQlpMmNfYXR0YWNoX2NsaWVudCAoJnQtPmkyYyk7Ci0JCQkJc2V0X3R5cGUoJnQtPmkyYyx0LT50eXBlLCB0LT5tb2RlX21hc2spOwotCQkJCXJldHVybiAwOworCQkJCWdvdG8gcmVnaXN0ZXJfY2xpZW50OwogCQkJfQorCQkJYnJlYWs7CiAJCX0KIAl9CiAKQEAgLTM4MSw2ICszOTcsOCBAQAogCX0KIAogCS8qIFNob3VsZCBiZSBqdXN0IGJlZm9yZSByZXR1cm4gKi8KK3JlZ2lzdGVyX2NsaWVudDoKKwl0dW5lcl9pbmZvKCJjaGlwIGZvdW5kIEAgMHgleCAoJXMpXG4iLCBhZGRyIDw8IDEsIGFkYXAtPm5hbWUpOwogCWkyY19hdHRhY2hfY2xpZW50ICgmdC0+aTJjKTsKIAlzZXRfdHlwZSAoJnQtPmkyYyx0LT50eXBlLCB0LT5tb2RlX21hc2spOwogCXJldHVybiAwOwpAQCAtNDI1LDIzICs0NDMsMjMgQEAKIAogc3RhdGljIGlubGluZSBpbnQgc2V0X21vZGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgc3RydWN0IHR1bmVyICp0LCBpbnQgbW9kZSwgY2hhciAqY21kKQogewotIAlpZiAobW9kZSA9PSB0LT5tb2RlKQotIAkJcmV0dXJuIDA7CisJaWYgKG1vZGUgPT0gdC0+bW9kZSkKKwkJcmV0dXJuIDA7CiAKLSAJdC0+bW9kZSA9IG1vZGU7CisJdC0+bW9kZSA9IG1vZGU7CiAKLSAJaWYgKGNoZWNrX21vZGUodCwgY21kKSA9PSBFSU5WQUwpIHsKLSAJCXQtPm1vZGUgPSBUX1NUQU5EQlk7Ci0gCQlpZiAodC0+c3RhbmRieSkKLSAJCQl0LT5zdGFuZGJ5IChjbGllbnQpOwotIAkJcmV0dXJuIEVJTlZBTDsKLSAgCX0KLSAgCXJldHVybiAwOworCWlmIChjaGVja19tb2RlKHQsIGNtZCkgPT0gRUlOVkFMKSB7CisJCXQtPm1vZGUgPSBUX1NUQU5EQlk7CisJCWlmICh0LT5zdGFuZGJ5KQorCQkJdC0+c3RhbmRieSAoY2xpZW50KTsKKwkJcmV0dXJuIEVJTlZBTDsKKwl9CisJcmV0dXJuIDA7CiB9CiAKICNkZWZpbmUgc3dpdGNoX3Y0bDIoKQlpZiAoIXQtPnVzaW5nX3Y0bDIpIFwKLQkJICAgICAgICAgICAgdHVuZXJfZGJnKCJzd2l0Y2hpbmcgdG8gdjRsMlxuIik7IFwKLQkgICAgICAgICAgICAgICAgdC0+dXNpbmdfdjRsMiA9IDE7CisJCQkgICAgdHVuZXJfZGJnKCJzd2l0Y2hpbmcgdG8gdjRsMlxuIik7IFwKKwkJCXQtPnVzaW5nX3Y0bDIgPSAxOwogCiBzdGF0aWMgaW5saW5lIGludCBjaGVja192NGwyKHN0cnVjdCB0dW5lciAqdCkKIHsKQEAgLTQ3OSw4ICs0OTcsNiBAQAogCQkJYnJlYWs7CiAJCX0KIAljYXNlIEFVRENfQ09ORklHX1BJTk5BQ0xFOgotCQlpZiAoY2hlY2tfbW9kZSh0LCAiQVVEQ19DT05GSUdfUElOTkFDTEUiKSA9PSBFSU5WQUwpCi0JCQlyZXR1cm4gMDsKIAkJc3dpdGNoICgqaWFyZykgewogCQljYXNlIDI6CiAJCQl0dW5lcl9kYmcoInBpbm5hY2xlIHBhbFxuIik7CkBAIC02MTYsNyArNjMyLDcgQEAKIAkJCXN3aXRjaF92NGwyKCk7CiAJCQlpZiAoVjRMMl9UVU5FUl9SQURJTyA9PSBmLT50eXBlICYmCiAJCQkgICAgVjRMMl9UVU5FUl9SQURJTyAhPSB0LT5tb2RlKSB7Ci0JCQkgICAgICAgIGlmIChzZXRfbW9kZSAoY2xpZW50LCB0LCBmLT50eXBlLCAiVklESU9DX1NfRlJFUVVFTkNZIikKKwkJCQlpZiAoc2V0X21vZGUgKGNsaWVudCwgdCwgZi0+dHlwZSwgIlZJRElPQ19TX0ZSRVFVRU5DWSIpCiAJCQkJCSAgICA9PSBFSU5WQUwpCiAJCQkJCXJldHVybiAwOwogCQkJfQpAQCAtNjg4LDcgKzcwNCw3IEBACiAJCQlicmVhazsKIAkJfQogCWRlZmF1bHQ6Ci0JCXR1bmVyX2RiZygiVW5pbXBsZW1lbnRlZCBJT0NUTCAweCUwOHgoZGlyPSVkLHRwPTB4JTAyeCxucj0lZCxzej0lZClcbiIsCisJCXR1bmVyX2RiZygiVW5pbXBsZW1lbnRlZCBJT0NUTCAweCUwOHgoZGlyPSVkLHRwPSclYycsbnI9JWQsc3o9JWQpXG4iLAogCQkJCQkgY21kLCBfSU9DX0RJUihjbWQpLCBfSU9DX1RZUEUoY21kKSwKIAkJCQkJX0lPQ19OUihjbWQpLCBfSU9DX1NJWkUoY21kKSk7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90dW5lci1zaW1wbGUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHVuZXItc2ltcGxlLmMKaW5kZXggOGVkZDczYS4uZDgzMjIwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90dW5lci1zaW1wbGUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R1bmVyLXNpbXBsZS5jCkBAIC0xMDIsNyArMTAyLDcgQEAKICAqLwogc3RhdGljIHN0cnVjdCB0dW5lcnR5cGUgdHVuZXJzW10gPSB7CiAJLyogMC05ICovCi0gICAgICAgIHsgIlRlbWljIFBBTCAoNDAwMiBGSDUpIiwgVEVNSUMsIFBBTCwKKwl7ICJUZW1pYyBQQUwgKDQwMDIgRkg1KSIsIFRFTUlDLCBQQUwsCiAJICAxNioxNDAuMjUsMTYqNDYzLjI1LDB4MDIsMHgwNCwweDAxLDB4OGUsNjIzfSwKIAl7ICJQaGlsaXBzIFBBTF9JIChGSTEyNDYgYW5kIGNvbXBhdGlibGVzKSIsIFBoaWxpcHMsIFBBTF9JLAogCSAgMTYqMTQwLjI1LDE2KjQ2My4yNSwweGEwLDB4OTAsMHgzMCwweDhlLDYyM30sCkBAIC0xMTgsNDEgKzExOCw0MSBAQAogCSAgMTYqMTU3LjI1LDE2KjQ2My4yNSwweDAyLDB4MDQsMHgwMSwweDhlLDczMn0sCiAJeyAiVGVtaWMgUEFMX0kgKDQwNjIgRlk1KSIsIFRFTUlDLCBQQUxfSSwKIAkgIDE2KjE3MC4wMCwxNio0NTAuMDAsMHgwMiwweDA0LDB4MDEsMHg4ZSw2MjN9LAotIAl7ICJUZW1pYyBOVFNDICg0MDM2IEZZNSkiLCBURU1JQywgTlRTQywKKwl7ICJUZW1pYyBOVFNDICg0MDM2IEZZNSkiLCBURU1JQywgTlRTQywKIAkgIDE2KjE1Ny4yNSwxNio0NjMuMjUsMHhhMCwweDkwLDB4MzAsMHg4ZSw3MzJ9LAotICAgICAgICB7ICJBbHBzIEhTQkgxIiwgVEVNSUMsIE5UU0MsCisJeyAiQWxwcyBIU0JIMSIsIFRFTUlDLCBOVFNDLAogCSAgMTYqMTM3LjI1LDE2KjM4NS4yNSwweDAxLDB4MDIsMHgwOCwweDhlLDczMn0sCiAKIAkvKiAxMC0xOSAqLwotICAgICAgICB7ICJBbHBzIFRTQkUxIiwgVEVNSUMsIFBBTCwKKwl7ICJBbHBzIFRTQkUxIiwgVEVNSUMsIFBBTCwKIAkgIDE2KjEzNy4yNSwxNiozODUuMjUsMHgwMSwweDAyLDB4MDgsMHg4ZSw3MzJ9LAotICAgICAgICB7ICJBbHBzIFRTQkI1IiwgQWxwcywgUEFMX0ksIC8qIHRlc3RlZCAoVUsgVUhGKSB3aXRoIE1vZHVsYXJ0ZWNoIE1NMjA1ICovCisJeyAiQWxwcyBUU0JCNSIsIEFscHMsIFBBTF9JLCAvKiB0ZXN0ZWQgKFVLIFVIRikgd2l0aCBNb2R1bGFydGVjaCBNTTIwNSAqLwogCSAgMTYqMTMzLjI1LDE2KjM1MS4yNSwweDAxLDB4MDIsMHgwOCwweDhlLDYzMn0sCi0gICAgICAgIHsgIkFscHMgVFNCRTUiLCBBbHBzLCBQQUwsIC8qIHVudGVzdGVkIC0gZGF0YSBzaGVldCBndWVzcy4gT25seSBJRiBkaWZmZXJzLiAqLworCXsgIkFscHMgVFNCRTUiLCBBbHBzLCBQQUwsIC8qIHVudGVzdGVkIC0gZGF0YSBzaGVldCBndWVzcy4gT25seSBJRiBkaWZmZXJzLiAqLwogCSAgMTYqMTMzLjI1LDE2KjM1MS4yNSwweDAxLDB4MDIsMHgwOCwweDhlLDYyMn0sCi0gICAgICAgIHsgIkFscHMgVFNCQzUiLCBBbHBzLCBQQUwsIC8qIHVudGVzdGVkIC0gZGF0YSBzaGVldCBndWVzcy4gT25seSBJRiBkaWZmZXJzLiAqLworCXsgIkFscHMgVFNCQzUiLCBBbHBzLCBQQUwsIC8qIHVudGVzdGVkIC0gZGF0YSBzaGVldCBndWVzcy4gT25seSBJRiBkaWZmZXJzLiAqLwogCSAgMTYqMTMzLjI1LDE2KjM1MS4yNSwweDAxLDB4MDIsMHgwOCwweDhlLDYwOH0sCiAJeyAiVGVtaWMgUEFMX0JHICg0MDA2Rkg1KSIsIFRFTUlDLCBQQUwsCiAJICAxNioxNzAuMDAsMTYqNDUwLjAwLDB4YTAsMHg5MCwweDMwLDB4OGUsNjIzfSwKLSAgCXsgIkFscHMgVFNDSDYiLCBBbHBzLCBOVFNDLAotICAJICAxNioxMzcuMjUsMTYqMzg1LjI1LDB4MTQsMHgxMiwweDExLDB4OGUsNzMyfSwKLSAgCXsgIlRlbWljIFBBTF9ESyAoNDAxNiBGWTUpIiwgVEVNSUMsIFBBTCwKLSAgCSAgMTYqMTY4LjI1LDE2KjQ1Ni4yNSwweGEwLDB4OTAsMHgzMCwweDhlLDYyM30sCi0gIAl7ICJQaGlsaXBzIE5UU0NfTSAoTUsyKSIsIFBoaWxpcHMsIE5UU0MsCi0gIAkgIDE2KjE2MC4wMCwxNio0NTQuMDAsMHhhMCwweDkwLDB4MzAsMHg4ZSw3MzJ9LAotICAgICAgICB7ICJUZW1pYyBQQUxfSSAoNDA2NiBGWTUpIiwgVEVNSUMsIFBBTF9JLAotICAgICAgICAgIDE2KjE2OS4wMCwgMTYqNDU0LjAwLCAweGEwLDB4OTAsMHgzMCwweDhlLDYyM30sCi0gICAgICAgIHsgIlRlbWljIFBBTCogYXV0byAoNDAwNiBGTjUpIiwgVEVNSUMsIFBBTCwKLSAgICAgICAgICAxNioxNjkuMDAsIDE2KjQ1NC4wMCwgMHhhMCwweDkwLDB4MzAsMHg4ZSw2MjN9LAorCXsgIkFscHMgVFNDSDYiLCBBbHBzLCBOVFNDLAorCSAgMTYqMTM3LjI1LDE2KjM4NS4yNSwweDE0LDB4MTIsMHgxMSwweDhlLDczMn0sCisJeyAiVGVtaWMgUEFMX0RLICg0MDE2IEZZNSkiLCBURU1JQywgUEFMLAorCSAgMTYqMTY4LjI1LDE2KjQ1Ni4yNSwweGEwLDB4OTAsMHgzMCwweDhlLDYyM30sCisJeyAiUGhpbGlwcyBOVFNDX00gKE1LMikiLCBQaGlsaXBzLCBOVFNDLAorCSAgMTYqMTYwLjAwLDE2KjQ1NC4wMCwweGEwLDB4OTAsMHgzMCwweDhlLDczMn0sCisJeyAiVGVtaWMgUEFMX0kgKDQwNjYgRlk1KSIsIFRFTUlDLCBQQUxfSSwKKwkgIDE2KjE2OS4wMCwgMTYqNDU0LjAwLCAweGEwLDB4OTAsMHgzMCwweDhlLDYyM30sCisJeyAiVGVtaWMgUEFMKiBhdXRvICg0MDA2IEZONSkiLCBURU1JQywgUEFMLAorCSAgMTYqMTY5LjAwLCAxNio0NTQuMDAsIDB4YTAsMHg5MCwweDMwLDB4OGUsNjIzfSwKIAogCS8qIDIwLTI5ICovCi0gICAgICAgIHsgIlRlbWljIFBBTF9CRyAoNDAwOSBGUjUpIG9yIFBBTF9JICg0MDY5IEZSNSkiLCBURU1JQywgUEFMLAotICAgICAgICAgIDE2KjE0MS4wMCwgMTYqNDY0LjAwLCAweGEwLDB4OTAsMHgzMCwweDhlLDYyM30sCi0gICAgICAgIHsgIlRlbWljIE5UU0MgKDQwMzkgRlI1KSIsIFRFTUlDLCBOVFNDLAotICAgICAgICAgIDE2KjE1OC4wMCwgMTYqNDUzLjAwLCAweGEwLDB4OTAsMHgzMCwweDhlLDczMn0sCi0gICAgICAgIHsgIlRlbWljIFBBTC9TRUNBTSBtdWx0aSAoNDA0NiBGTTUpIiwgVEVNSUMsIFBBTCwKLSAgICAgICAgICAxNioxNjkuMDAsIDE2KjQ1NC4wMCwgMHhhMCwweDkwLDB4MzAsMHg4ZSw2MjN9LAotICAgICAgICB7ICJQaGlsaXBzIFBBTF9ESyAoRkkxMjU2IGFuZCBjb21wYXRpYmxlcykiLCBQaGlsaXBzLCBQQUwsCisJeyAiVGVtaWMgUEFMX0JHICg0MDA5IEZSNSkgb3IgUEFMX0kgKDQwNjkgRlI1KSIsIFRFTUlDLCBQQUwsCisJICAxNioxNDEuMDAsIDE2KjQ2NC4wMCwgMHhhMCwweDkwLDB4MzAsMHg4ZSw2MjN9LAorCXsgIlRlbWljIE5UU0MgKDQwMzkgRlI1KSIsIFRFTUlDLCBOVFNDLAorCSAgMTYqMTU4LjAwLCAxNio0NTMuMDAsIDB4YTAsMHg5MCwweDMwLDB4OGUsNzMyfSwKKwl7ICJUZW1pYyBQQUwvU0VDQU0gbXVsdGkgKDQwNDYgRk01KSIsIFRFTUlDLCBQQUwsCisJICAxNioxNjkuMDAsIDE2KjQ1NC4wMCwgMHhhMCwweDkwLDB4MzAsMHg4ZSw2MjN9LAorCXsgIlBoaWxpcHMgUEFMX0RLIChGSTEyNTYgYW5kIGNvbXBhdGlibGVzKSIsIFBoaWxpcHMsIFBBTCwKIAkgIDE2KjE3MC4wMCwxNio0NTAuMDAsMHhhMCwweDkwLDB4MzAsMHg4ZSw2MjN9LAogCXsgIlBoaWxpcHMgUEFML1NFQ0FNIG11bHRpIChGUTEyMTZNRSkiLCBQaGlsaXBzLCBQQUwsCiAJICAxNioxNzAuMDAsMTYqNDUwLjAwLDB4YTAsMHg5MCwweDMwLDB4OGUsNjIzfSwKQEAgLTE3MywyMSArMTczLDIxIEBACiAJeyAiU0hBUlAgTlRTQ19KUCAoMlU1SkY1NTQwKSIsIFNIQVJQLCBOVFNDLCAvKiA5NDA9MTYqNTguNzUgTlRTQ0BKYXBhbiAqLwogCSAgMTYqMTM3LjI1LDE2KjMxNy4yNSwweDAxLDB4MDIsMHgwOCwweDhlLDk0MCB9LAogCXsgIlNhbXN1bmcgUEFMIFRDUE05MDkxUEQyNyIsIFNhbXN1bmcsIFBBTCwgLyogZnJvbSBzb3VyY2Vmb3JnZSB2M3R2ICovCi0gICAgICAgICAgMTYqMTY5LDE2KjQ2NCwweEEwLDB4OTAsMHgzMCwweDhlLDYyM30sCisJICAxNioxNjksMTYqNDY0LDB4QTAsMHg5MCwweDMwLDB4OGUsNjIzfSwKIAl7ICJNVDIweHggdW5pdmVyc2FsIiwgTWljcm90dW5lLCBQQUx8TlRTQywKIAkgIC8qIHNlZSBtdDIweHguYyBmb3IgZGV0YWlscyAqLyB9LAogCXsgIlRlbWljIFBBTF9CRyAoNDEwNiBGSDUpIiwgVEVNSUMsIFBBTCwKLSAgICAgICAgICAxNioxNDEuMDAsIDE2KjQ2NC4wMCwgMHhhMCwweDkwLDB4MzAsMHg4ZSw2MjN9LAorCSAgMTYqMTQxLjAwLCAxNio0NjQuMDAsIDB4YTAsMHg5MCwweDMwLDB4OGUsNjIzfSwKIAl7ICJUZW1pYyBQQUxfREsvU0VDQU1fTCAoNDAxMiBGWTUpIiwgVEVNSUMsIFBBTCwKLSAgICAgICAgICAxNioxNDAuMjUsIDE2KjQ2My4yNSwgMHgwMiwweDA0LDB4MDEsMHg4ZSw2MjN9LAorCSAgMTYqMTQwLjI1LCAxNio0NjMuMjUsIDB4MDIsMHgwNCwweDAxLDB4OGUsNjIzfSwKIAl7ICJUZW1pYyBOVFNDICg0MTM2IEZZNSkiLCBURU1JQywgTlRTQywKLSAgICAgICAgICAxNioxNTguMDAsIDE2KjQ1My4wMCwgMHhhMCwweDkwLDB4MzAsMHg4ZSw3MzJ9LAotICAgICAgICB7ICJMRyBQQUwgKG5ld2VyIFRBUEMgc2VyaWVzKSIsIExHSU5OT1RFSywgUEFMLAotICAgICAgICAgIDE2KjE3MC4wMCwgMTYqNDUwLjAwLCAweDAxLDB4MDIsMHgwOCwweDhlLDYyM30sCisJICAxNioxNTguMDAsIDE2KjQ1My4wMCwgMHhhMCwweDkwLDB4MzAsMHg4ZSw3MzJ9LAorCXsgIkxHIFBBTCAobmV3ZXIgVEFQQyBzZXJpZXMpIiwgTEdJTk5PVEVLLCBQQUwsCisJICAxNioxNzAuMDAsIDE2KjQ1MC4wMCwgMHgwMSwweDAyLDB4MDgsMHg4ZSw2MjN9LAogCXsgIlBoaWxpcHMgUEFML1NFQ0FNIG11bHRpIChGTTEyMTZNRSBNSzMpIiwgUGhpbGlwcywgUEFMLAotCSAgMTYqMTYwLjAwLDE2KjQ0Mi4wMCwweDAxLDB4MDIsMHgwNCwweDhlLDYyMyB9LAorCSAgMTYqMTU4LjAwLDE2KjQ0Mi4wMCwweDAxLDB4MDIsMHgwNCwweDhlLDYyMyB9LAogCXsgIkxHIE5UU0MgKG5ld2VyIFRBUEMgc2VyaWVzKSIsIExHSU5OT1RFSywgTlRTQywKLSAgICAgICAgICAxNioxNzAuMDAsIDE2KjQ1MC4wMCwgMHgwMSwweDAyLDB4MDgsMHg4ZSw3MzJ9LAorCSAgMTYqMTcwLjAwLCAxNio0NTAuMDAsIDB4MDEsMHgwMiwweDA4LDB4OGUsNzMyfSwKIAogCS8qIDQwLTQ5ICovCiAJeyAiSElUQUNISSBWNy1KMTgwQVQiLCBISVRBQ0hJLCBOVFNDLApAQCAtMTk2LDI0ICsxOTYsMjQgQEAKIAkgIDE2KjE0MC4yNSwxNio0NjMuMjUsMHgwMSwweGMyLDB4Y2YsMHg4ZSw2MjN9LAogCXsgIlBoaWxpcHMgMTIzNkQgQVRTQy9OVFNDIGRhdWwgaW4iLCBQaGlsaXBzLCBBVFNDLAogCSAgMTYqMTU3LjI1LDE2KjQ1NC4wMCwweGEwLDB4OTAsMHgzMCwweDhlLDczMn0sCi0gICAgICAgIHsgIlBoaWxpcHMgTlRTQyBNSzMgKEZNMTIzNk1LMyBvciBGTTEyMzYvRikiLCBQaGlsaXBzLCBOVFNDLAotICAgICAgICAgIDE2KjE2MC4wMCwxNio0NDIuMDAsMHgwMSwweDAyLDB4MDQsMHg4ZSw3MzJ9LAotICAgICAgICB7ICJQaGlsaXBzIDQgaW4gMSAoQVRJIFRWIFdvbmRlciBQcm8vQ29uZXhhbnQpIiwgUGhpbGlwcywgTlRTQywKLSAgICAgICAgICAxNioxNjAuMDAsMTYqNDQyLjAwLDB4MDEsMHgwMiwweDA0LDB4OGUsNzMyfSwKKwl7ICJQaGlsaXBzIE5UU0MgTUszIChGTTEyMzZNSzMgb3IgRk0xMjM2L0YpIiwgUGhpbGlwcywgTlRTQywKKwkgIDE2KjE2MC4wMCwxNio0NDIuMDAsMHgwMSwweDAyLDB4MDQsMHg4ZSw3MzJ9LAorCXsgIlBoaWxpcHMgNCBpbiAxIChBVEkgVFYgV29uZGVyIFByby9Db25leGFudCkiLCBQaGlsaXBzLCBOVFNDLAorCSAgMTYqMTYwLjAwLDE2KjQ0Mi4wMCwweDAxLDB4MDIsMHgwNCwweDhlLDczMn0sCiAJeyAiTWljcm90dW5lIDQwNDkgRk01IiwgTWljcm90dW5lLCBQQUwsCiAJICAxNioxNDEuMDAsMTYqNDY0LjAwLDB4YTAsMHg5MCwweDMwLDB4OGUsNjIzfSwKIAl7ICJQYW5hc29uaWMgVlAyN3MvRU5HRTQzMjREIiwgUGFuYXNvbmljLCBOVFNDLAogCSAgMTYqMTYwLjAwLDE2KjQ1NC4wMCwweDAxLDB4MDIsMHgwOCwweGNlLDk0MH0sCi0gICAgICAgIHsgIkxHIE5UU0MgKFRBUEUgc2VyaWVzKSIsIExHSU5OT1RFSywgTlRTQywKLSAgICAgICAgICAxNioxNjAuMDAsMTYqNDQyLjAwLDB4MDEsMHgwMiwweDA0LDB4OGUsNzMyIH0sCi0gICAgICAgIHsgIlRlbm5hIFRORiA4ODMxIEJHRkYpIiwgUGhpbGlwcywgUEFMLAotICAgICAgICAgIDE2KjE2MS4yNSwxNio0NjMuMjUsMHhhMCwweDkwLDB4MzAsMHg4ZSw2MjN9LAorCXsgIkxHIE5UU0MgKFRBUEUgc2VyaWVzKSIsIExHSU5OT1RFSywgTlRTQywKKwkgIDE2KjE2MC4wMCwxNio0NDIuMDAsMHgwMSwweDAyLDB4MDQsMHg4ZSw3MzIgfSwKKwl7ICJUZW5uYSBUTkYgODgzMSBCR0ZGKSIsIFBoaWxpcHMsIFBBTCwKKwkgIDE2KjE2MS4yNSwxNio0NjMuMjUsMHhhMCwweDkwLDB4MzAsMHg4ZSw2MjN9LAogCXsgIk1pY3JvdHVuZSA0MDQyIEZJNSBBVFNDL05UU0MgZHVhbCBpbiIsIE1pY3JvdHVuZSwgTlRTQywKIAkgIDE2KjE2Mi4wMCwxNio0NTcuMDAsMHhhMiwweDk0LDB4MzEsMHg4ZSw3MzJ9LAogCiAJLyogNTAtNTkgKi8KLSAgICAgICAgeyAiVENMIDIwMDJOIiwgVENMLCBOVFNDLAotICAgICAgICAgIDE2KjE3Mi4wMCwxNio0NDguMDAsMHgwMSwweDAyLDB4MDgsMHg4ZSw3MzJ9LAorCXsgIlRDTCAyMDAyTiIsIFRDTCwgTlRTQywKKwkgIDE2KjE3Mi4wMCwxNio0NDguMDAsMHgwMSwweDAyLDB4MDgsMHg4ZSw3MzJ9LAogCXsgIlBoaWxpcHMgUEFML1NFQ0FNX0QgKEZNIDEyNTYgSS1IMykiLCBQaGlsaXBzLCBQQUwsCiAJICAxNioxNjAuMDAsMTYqNDQyLjAwLDB4MDEsMHgwMiwweDA0LDB4OGUsNjIzIH0sCiAJeyAiVGhvbXNvbiBERFQgNzYxMCAoQVRTQy9OVFNDKSIsIFRIT01TT04sIEFUU0MsCkBAIC0yMjIsOCArMjIyLDggQEAKIAkgIDE2KjE2MC4wMCwxNio0NTQuMDAsMHg0MSwweDQyLDB4MDQsMHg4ZSw5NDB9LCAvKiBVSEYgYmFuZCB1bnRlc3RlZCAqLwogCXsgInRkYTgyOTArNzUiLCBQaGlsaXBzLCBQQUx8TlRTQywKIAkgIC8qIHNlZSB0ZGE4MjkwLmMgZm9yIGRldGFpbHMgKi8gfSwKLQl7ICJMRyBQQUwgKFRBUEUgc2VyaWVzKSIsIExHSU5OT1RFSywgUEFMLAotICAgICAgICAgIDE2KjE3MC4wMCwgMTYqNDUwLjAwLCAweDAxLDB4MDIsMHgwOCwweGNlLDYyM30sCisJeyAiVENMIDIwMDJNQiIsIFRDTCwgUEFMLAorCSAgMTYqMTcwLjAwLCAxNio0NTAuMDAsIDB4MDEsMHgwMiwweDA4LDB4Y2UsNjIzfSwKIAl7ICJQaGlsaXBzIFBBTC9TRUNBTSBtdWx0aSAoRlExMjE2QU1FIE1LNCkiLCBQaGlsaXBzLCBQQUwsCiAJICAxNioxNjAuMDAsMTYqNDQyLjAwLDB4MDEsMHgwMiwweDA0LDB4Y2UsNjIzIH0sCiAJeyAiUGhpbGlwcyBGUTEyMzZBIE1LNCIsIFBoaWxpcHMsIE5UU0MsCkBAIC0yMzMsMjEgKzIzMywyNSBAQAogCXsgIlltZWMgVFZpc2lvbiBUVkYtNTUzM01GIiwgUGhpbGlwcywgTlRTQywKIAkgIDE2KjE2MC4wMCwxNio0NTQuMDAsMHgwMSwweDAyLDB4MDQsMHg4ZSw3MzJ9LAogCi0JLyogNjAtNjYgKi8KKwkvKiA2MC02OCAqLwogCXsgIlRob21zb24gRERUIDc2MTEgKEFUU0MvTlRTQykiLCBUSE9NU09OLCBBVFNDLAogCSAgMTYqMTU3LjI1LDE2KjQ1NC4wMCwweDM5LDB4M2EsMHgzYywweDhlLDczMn0sCiAJeyAiVGVuYSBUTkY5NTMzLUQvSUYvVE5GOTUzMy1CL0RGIiwgUGhpbGlwcywgUEFMLAotICAgICAgICAgIDE2KjE2MC4yNSwxNio0NjQuMjUsMHgwMSwweDAyLDB4MDQsMHg4ZSw2MjN9LAorCSAgMTYqMTYwLjI1LDE2KjQ2NC4yNSwweDAxLDB4MDIsMHgwNCwweDhlLDYyM30sCiAJeyAiUGhpbGlwcyBURUE1NzY3SE4gRk0gUmFkaW8iLCBQaGlsaXBzLCBSQURJTywKLSAgICAgICAgICAvKiBzZWUgdGVhNTc2Ny5jIGZvciBkZXRhaWxzICovfSwKKwkgIC8qIHNlZSB0ZWE1NzY3LmMgZm9yIGRldGFpbHMgKi99LAogCXsgIlBoaWxpcHMgRk1EMTIxNk1FIE1LMyBIeWJyaWQgVHVuZXIiLCBQaGlsaXBzLCBQQUwsCiAJICAxNioxNjAuMDAsMTYqNDQyLjAwLDB4NTEsMHg1MiwweDU0LDB4ODYsNjIzIH0sCiAJeyAiTEcgVERWUy1IMDYyRi9UVUE2MDM0IiwgTEdJTk5PVEVLLCBBVFNDLAogCSAgMTYqMTYwLjAwLDE2KjQ1NS4wMCwweDAxLDB4MDIsMHgwNCwweDhlLDczMn0sCiAJeyAiWW1lYyBUVkY2NlQ1LUIvREZGIiwgUGhpbGlwcywgUEFMLAotICAgICAgICAgIDE2KjE2MC4yNSwxNio0NjQuMjUsMHgwMSwweDAyLDB4MDgsMHg4ZSw2MjN9LAotIAl7ICJMRyBOVFNDIChUQUxOIG1pbmkgc2VyaWVzKSIsIExHSU5OT1RFSywgTlRTQywKKwkgIDE2KjE2MC4yNSwxNio0NjQuMjUsMHgwMSwweDAyLDB4MDgsMHg4ZSw2MjN9LAorCXsgIkxHIE5UU0MgKFRBTE4gbWluaSBzZXJpZXMpIiwgTEdJTk5PVEVLLCBOVFNDLAogCSAgMTYqMTM3LjI1LDE2KjM3My4yNSwweDAxLDB4MDIsMHgwOCwweDhlLDczMiB9LAorCXsgIlBoaWxpcHMgVEQxMzE2IEh5YnJpZCBUdW5lciIsIFBoaWxpcHMsIFBBTCwKKwkgIDE2KjE2MC4wMCwxNio0NDIuMDAsMHhhMSwweGEyLDB4YTQsMHhjOCw2MjMgfSwKKwl7ICJQaGlsaXBzIFRVVjEyMzZEIEFUU0MvTlRTQyBkdWFsIGluIiwgUGhpbGlwcywgQVRTQywKKwkgIDE2KjE1Ny4yNSwxNio0NTQuMDAsMHgwMSwweDAyLDB4MDQsMHhjZSw3MzIgfSwKIH07CiAKIHVuc2lnbmVkIGNvbnN0IGludCB0dW5lcl9jb3VudCA9IEFSUkFZX1NJWkUodHVuZXJzKTsKQEAgLTI3Nyw3ICsyODEsNyBAQAogCXN0YXR1cyA9IHR1bmVyX2dldHN0YXR1cyAoYyk7CiAKIAlzd2l0Y2ggKHQtPnR5cGUpIHsKLSAgICAgICAgCWNhc2UgVFVORVJfUEhJTElQU19GTTEyMTZNRV9NSzM6CisJCWNhc2UgVFVORVJfUEhJTElQU19GTTEyMTZNRV9NSzM6CiAgICAgCQljYXNlIFRVTkVSX1BISUxJUFNfRk0xMjM2X01LMzoKIAkJY2FzZSBUVU5FUl9QSElMSVBTX0ZNMTI1Nl9JSDM6CiAJCQlzdGVyZW8gPSAoKHN0YXR1cyAmIFRVTkVSX1NJR05BTCkgPT0gVFVORVJfU1RFUkVPX01LMyk7CkBAIC0yOTUsMTAgKzI5OSwxMCBAQAogc3RhdGljIHZvaWQgZGVmYXVsdF9zZXRfdHZfZnJlcShzdHJ1Y3QgaTJjX2NsaWVudCAqYywgdW5zaWduZWQgaW50IGZyZXEpCiB7CiAJc3RydWN0IHR1bmVyICp0ID0gaTJjX2dldF9jbGllbnRkYXRhKGMpOwotCXU4IGNvbmZpZzsKKwl1OCBjb25maWcsIHR1bmVyYWRkcjsKIAl1MTYgZGl2OwogCXN0cnVjdCB0dW5lcnR5cGUgKnR1bjsKLSAgICAgICAgdW5zaWduZWQgY2hhciBidWZmZXJbNF07CisJdW5zaWduZWQgY2hhciBidWZmZXJbNF07CiAJaW50IHJjOwogCiAJdHVuID0gJnR1bmVyc1t0LT50eXBlXTsKQEAgLTM3Myw2ICszNzcsMzEgQEAKIAkJLyogU2V0IHRoZSBjaGFyZ2UgcHVtcCBmb3IgZmFzdCB0dW5pbmcgKi8KIAkJdHVuLT5jb25maWcgfD0gVFVORVJfQ0hBUkdFX1BVTVA7CiAJCWJyZWFrOworCisJY2FzZSBUVU5FUl9QSElMSVBTX1RVVjEyMzZEOgorCQkvKiAweDQwIC0+IEFUU0MgYW50ZW5uYSBpbnB1dCAxICovCisJCS8qIDB4NDggLT4gQVRTQyBhbnRlbm5hIGlucHV0IDIgKi8KKwkJLyogMHgwMCAtPiBOVFNDIGFudGVubmEgaW5wdXQgMSAqLworCQkvKiAweDA4IC0+IE5UU0MgYW50ZW5uYSBpbnB1dCAyICovCisJCWJ1ZmZlclswXSA9IDB4MTQ7CisJCWJ1ZmZlclsxXSA9IDB4MDA7CisJCWJ1ZmZlclsyXSA9IDB4MTc7CisJCWJ1ZmZlclszXSA9IDB4MDA7CisJCWNvbmZpZyAmPSB+MHg0MDsKKwkJaWYgKHQtPnN0ZCAmIFY0TDJfU1REX0FUU0MpIHsKKwkJCWNvbmZpZyB8PSAweDQwOworCQkJYnVmZmVyWzFdID0gMHgwNDsKKwkJfQorCQkvKiBzZXQgdG8gdGhlIGNvcnJlY3QgbW9kZSAoYW5hbG9nIG9yIGRpZ2l0YWwpICovCisJCXR1bmVyYWRkciA9IGMtPmFkZHI7CisJCWMtPmFkZHIgPSAweDBhOworCQlpZiAoMiAhPSAocmMgPSBpMmNfbWFzdGVyX3NlbmQoYywmYnVmZmVyWzBdLDIpKSkKKwkJCXR1bmVyX3dhcm4oImkyYyBpL28gZXJyb3I6IHJjID09ICVkIChzaG91bGQgYmUgMilcbiIscmMpOworCQlpZiAoMiAhPSAocmMgPSBpMmNfbWFzdGVyX3NlbmQoYywmYnVmZmVyWzJdLDIpKSkKKwkJCXR1bmVyX3dhcm4oImkyYyBpL28gZXJyb3I6IHJjID09ICVkIChzaG91bGQgYmUgMilcbiIscmMpOworCQljLT5hZGRyID0gdHVuZXJhZGRyOworCQkvKiBGSVhNRTogaW5wdXQgKi8KKwkJYnJlYWs7CiAJfQogCiAJLyoKQEAgLTQwNCw3ICs0MzMsNyBAQAogCXR1bmVyX2RiZygidHYgMHglMDJ4IDB4JTAyeCAweCUwMnggMHglMDJ4XG4iLAogCQkgIGJ1ZmZlclswXSxidWZmZXJbMV0sYnVmZmVyWzJdLGJ1ZmZlclszXSk7CiAKLSAgICAgICAgaWYgKDQgIT0gKHJjID0gaTJjX21hc3Rlcl9zZW5kKGMsYnVmZmVyLDQpKSkKKwlpZiAoNCAhPSAocmMgPSBpMmNfbWFzdGVyX3NlbmQoYyxidWZmZXIsNCkpKQogCQl0dW5lcl93YXJuKCJpMmMgaS9vIGVycm9yOiByYyA9PSAlZCAoc2hvdWxkIGJlIDQpXG4iLHJjKTsKIAogCWlmICh0LT50eXBlID09IFRVTkVSX01JQ1JPVFVORV80MDQyRkk1KSB7CkBAIC00NDMsNyArNDcyLDcgQEAKIHsKIAlzdHJ1Y3QgdHVuZXJ0eXBlICp0dW47CiAJc3RydWN0IHR1bmVyICp0ID0gaTJjX2dldF9jbGllbnRkYXRhKGMpOwotICAgICAgICB1bnNpZ25lZCBjaGFyIGJ1ZmZlcls0XTsKKwl1bnNpZ25lZCBjaGFyIGJ1ZmZlcls0XTsKIAl1bnNpZ25lZCBkaXY7CiAJaW50IHJjOwogCkBAIC00NzYsMTMgKzUwNSwxMyBAQAogCQlidWZmZXJbM10gPSAweGE0OwogCQlicmVhazsKIAl9Ci0gICAgICAgIGJ1ZmZlclswXSA9IChkaXY+PjgpICYgMHg3ZjsKLSAgICAgICAgYnVmZmVyWzFdID0gZGl2ICAgICAgJiAweGZmOworCWJ1ZmZlclswXSA9IChkaXY+PjgpICYgMHg3ZjsKKwlidWZmZXJbMV0gPSBkaXYgICAgICAmIDB4ZmY7CiAKIAl0dW5lcl9kYmcoInJhZGlvIDB4JTAyeCAweCUwMnggMHglMDJ4IDB4JTAyeFxuIiwKIAkgICAgICAgYnVmZmVyWzBdLGJ1ZmZlclsxXSxidWZmZXJbMl0sYnVmZmVyWzNdKTsKIAotICAgICAgICBpZiAoNCAhPSAocmMgPSBpMmNfbWFzdGVyX3NlbmQoYyxidWZmZXIsNCkpKQorCWlmICg0ICE9IChyYyA9IGkyY19tYXN0ZXJfc2VuZChjLGJ1ZmZlciw0KSkpCiAJCXR1bmVyX3dhcm4oImkyYyBpL28gZXJyb3I6IHJjID09ICVkIChzaG91bGQgYmUgNClcbiIscmMpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2YXVkaW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZhdWRpby5jCmluZGV4IDFjMzFlZjUuLmMzMWJmMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZhdWRpby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZhdWRpby5jCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KIAogI2luY2x1ZGUgPG1lZGlhL2F1ZGlvY2hpcC5oPgotI2luY2x1ZGUgPG1lZGlhL2lkLmg+CiAKICNpbmNsdWRlICJ0dmF1ZGlvLmgiCiAKQEAgLTQ1OCw4ICs0NTcsOCBAQAogI2RlZmluZSBUREE5ODU1X0xPVUQJMTw8NSAvKiBMb3VkbmVzcywgMT09b2ZmICovCiAjZGVmaW5lIFREQTk4NTVfU1VSCTE8PDMgLyogU3Vycm91bmQgLyBTdWJ3b29mZXIgMT09LjUoTC1SKSAwPT0uNShMK1IpICovCiAJCQkgICAgIC8qIEJpdHMgMCB0byAzIHNlbGVjdCB2YXJpb3VzIGNvbWJpbmF0aW9ucwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBvZiBsaW5lIGluIGFuZCBsaW5lIG91dCwgb25seSB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogaW50ZXJlc3Rpbmcgb25lcyBhcmUgZGVmaW5lZCAqLworCQkJICAgICAgKiBvZiBsaW5lIGluIGFuZCBsaW5lIG91dCwgb25seSB0aGUKKwkJCSAgICAgICogaW50ZXJlc3Rpbmcgb25lcyBhcmUgZGVmaW5lZCAqLwogI2RlZmluZSBUREE5ODU1X0VYVAkxPDwyIC8qIFNlbGVjdHMgaW5wdXRzIExJUiBhbmQgTElMLiAgUGlucyA0MSAmIDEyICovCiAjZGVmaW5lIFREQTk4NTVfSU5UCTAgICAgLyogU2VsZWN0cyBpbnB1dHMgTE9SIGFuZCBMT0wuICAoaW50ZXJuYWwpICovCiAKQEAgLTEwMjgsNyArMTAyNyw3IEBACiAjZGVmaW5lIFRFQTYzMDBfVFIgICAgICAgICAweDAzICAvKiB0cmVibGUgKi8KICNkZWZpbmUgVEVBNjMwMF9GQSAgICAgICAgIDB4MDQgIC8qIGZhZGVyIGNvbnRyb2wgKi8KICNkZWZpbmUgVEVBNjMwMF9TICAgICAgICAgIDB4MDUgIC8qIHN3aXRjaCByZWdpc3RlciAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdmFsdWVzIGZvciB0aG9zZSByZWdpc3RlcnM6ICovCisJCQkJIC8qIHZhbHVlcyBmb3IgdGhvc2UgcmVnaXN0ZXJzOiAqLwogI2RlZmluZSBURUE2MzAwX1NfU0EgICAgICAgMHgwMSAgLyogc3RlcmVvIEEgaW5wdXQgKi8KICNkZWZpbmUgVEVBNjMwMF9TX1NCICAgICAgIDB4MDIgIC8qIHN0ZXJlbyBCICovCiAjZGVmaW5lIFRFQTYzMDBfU19TQyAgICAgICAweDA0ICAvKiBzdGVyZW8gQyAqLwpAQCAtMTA0Miw3ICsxMDQxLDcgQEAKICNkZWZpbmUgVEVBNjMyMF9CQSAgICAgICAgIDB4MDUgIC8qIGJhc3MgKDAtNCkgKi8KICNkZWZpbmUgVEVBNjMyMF9UUiAgICAgICAgIDB4MDYgIC8qIHRyZWJsZSAoMC00KSAqLwogI2RlZmluZSBURUE2MzIwX1MgICAgICAgICAgMHgwNyAgLyogc3dpdGNoIHJlZ2lzdGVyICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB2YWx1ZXMgZm9yIHRob3NlIHJlZ2lzdGVyczogKi8KKwkJCQkgLyogdmFsdWVzIGZvciB0aG9zZSByZWdpc3RlcnM6ICovCiAjZGVmaW5lIFRFQTYzMjBfU19TQSAgICAgICAweDA3ICAvKiBzdGVyZW8gQSBpbnB1dCAqLwogI2RlZmluZSBURUE2MzIwX1NfU0IgICAgICAgMHgwNiAgLyogc3RlcmVvIEIgKi8KICNkZWZpbmUgVEVBNjMyMF9TX1NDICAgICAgIDB4MDUgIC8qIHN0ZXJlbyBDICovCkBAIC0xMDgyLDcgKzEwODEsNyBAQAogI2RlZmluZSBUREE4NDI1X0JBICAgICAgICAgMHgwMiAgLyogYmFzcyAqLwogI2RlZmluZSBUREE4NDI1X1RSICAgICAgICAgMHgwMyAgLyogdHJlYmxlICovCiAjZGVmaW5lIFREQTg0MjVfUzEgICAgICAgICAweDA4ICAvKiBzd2l0Y2ggZnVuY3Rpb25zICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB2YWx1ZXMgZm9yIHRob3NlIHJlZ2lzdGVyczogKi8KKwkJCQkgLyogdmFsdWVzIGZvciB0aG9zZSByZWdpc3RlcnM6ICovCiAjZGVmaW5lIFREQTg0MjVfUzFfT0ZGICAgICAweEVFICAvKiBhdWRpbyBvZmYgKG11dGUgb24pICovCiAjZGVmaW5lIFREQTg0MjVfUzFfQ0gxICAgICAweENFICAvKiBhdWRpbyBjaGFubmVsIDEgKG11dGUgb2ZmKSAtICJsaW5lYXIgc3RlcmVvIiBtb2RlICovCiAjZGVmaW5lIFREQTg0MjVfUzFfQ0gyICAgICAweENGICAvKiBhdWRpbyBjaGFubmVsIDIgKG11dGUgb2ZmKSAtICJsaW5lYXIgc3RlcmVvIiBtb2RlICovCkBAIC0xMTQ4LDcgKzExNDcsNyBAQAogCiAvKiBiaXQgZGVmaW5pdGlvbiBvZiB0aGUgUkVTRVQgcmVnaXN0ZXIsIEkyQyBkYXRhLiAqLwogI2RlZmluZSBQSUMxNkM1NF9NSVNDX1JFU0VUX1JFTU9URV9DVEwgMHgwMSAvKiBiaXQgMCwgUmVzZXQgdG8gcmVjZWl2ZSB0aGUga2V5ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgICBjb2RlIG9mIHJlbW90ZSBjb250cm9sbGVyICovCisJCQkJCSAgICAvKiAgICAgICAgY29kZSBvZiByZW1vdGUgY29udHJvbGxlciAqLwogI2RlZmluZSBQSUMxNkM1NF9NSVNDX01UU19NQUlOICAgICAgICAgMHgwMiAvKiBiaXQgMSAqLwogI2RlZmluZSBQSUMxNkM1NF9NSVNDX01UU19TQVAgICAgICAgICAgMHgwNCAvKiBiaXQgMiAqLwogI2RlZmluZSBQSUMxNkM1NF9NSVNDX01UU19CT1RIICAgICAgICAgMHgwOCAvKiBiaXQgMyAqLwpAQCAtMTI4MSw3ICsxMjgwLDcgQEAKIAkJLnNldG1vZGUgICAgPSB0ZGE5ODQwX3NldG1vZGUsCiAJCS5jaGVja21vZGUgID0gZ2VuZXJpY19jaGVja21vZGUsCiAKLQkgICAgICAgIC5pbml0ICAgICAgID0geyAyLCB7IFREQTk4NDBfVEVTVCwgVERBOTg0MF9URVNUX0lOVDFTTgorCQkuaW5pdCAgICAgICA9IHsgMiwgeyBUREE5ODQwX1RFU1QsIFREQTk4NDBfVEVTVF9JTlQxU04KIAkJCQkvKiAsVERBOTg0MF9TVywgVERBOTg0MF9NT05PICovfSB9CiAJfSwKIAl7CkBAIC0xNDM4LDcgKzE0MzcsNyBAQAogCX0sCiAJewogCQkubmFtZSAgICAgICA9ICJwaWMxNmM1NCAoUFY5NTEpIiwKLQkJLmlkICAgICAgICAgPSBJMkNfRFJJVkVSSURfUElDMTZDNTRfUFY5NTEsCisJCS5pZCAgICAgICAgID0gSTJDX0RSSVZFUklEX1BJQzE2QzU0X1BWOSwKIAkJLmluc21vZG9wdCAgPSAmcGljMTZjNTQsCiAJCS5hZGRyX2xvICAgID0gSTJDX1BJQzE2QzU0ID4+IDEsCiAJCS5hZGRyX2hpICAgID0gSTJDX1BJQzE2QzU0Pj4gMSwKQEAgLTE0NjcsNyArMTQ2Niw3IEBACiAJCS5zZXRtb2RlICAgID0gdGE4ODc0el9zZXRtb2RlLAogCQkuY2hlY2ttb2RlICA9IGdlbmVyaWNfY2hlY2ttb2RlLAogCi0JICAgICAgICAuaW5pdCAgICAgICA9IHsyLCB7IFRBODg3NFpfTU9OT19TRVQsIFRBODg3NFpfU0VQQVJBVElPTl9ERUZBVUxUfX0sCisJCS5pbml0ICAgICAgID0gezIsIHsgVEE4ODc0Wl9NT05PX1NFVCwgVEE4ODc0Wl9TRVBBUkFUSU9OX0RFRkFVTFR9fSwKIAl9LAogCXsgLm5hbWUgPSBOVUxMIH0gLyogRU9GICovCiB9OwpAQCAtMTQ4Niw4ICsxNDg1LDggQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJbWVtc2V0KGNoaXAsMCxzaXplb2YoKmNoaXApKTsKIAltZW1jcHkoJmNoaXAtPmMsJmNsaWVudF90ZW1wbGF0ZSxzaXplb2Yoc3RydWN0IGkyY19jbGllbnQpKTsKLSAgICAgICAgY2hpcC0+Yy5hZGFwdGVyID0gYWRhcDsKLSAgICAgICAgY2hpcC0+Yy5hZGRyID0gYWRkcjsKKwljaGlwLT5jLmFkYXB0ZXIgPSBhZGFwOworCWNoaXAtPmMuYWRkciA9IGFkZHI7CiAJaTJjX3NldF9jbGllbnRkYXRhKCZjaGlwLT5jLCBjaGlwKTsKIAogCS8qIGZpbmQgZGVzY3JpcHRpb24gZm9yIHRoZSBjaGlwICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2ZWVwcm9tLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2ZWVwcm9tLmMKaW5kZXggNTM0NGQ1NS4uNzJlODc0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90dmVlcHJvbS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZlZXByb20uYwpAQCAtNiwxMiArNiwxMiBAQAogICogd2hpY2ggYXJlOgogCiAgICAgQ29weXJpZ2h0IChDKSAxOTk2LDk3LDk4IFJhbHBoICBNZXR6bGVyIChyamttQHRocC51bmkta29lbG4uZGUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAmIE1hcmN1cyBNZXR6bGVyIChtb2NtQHRocC51bmkta29lbG4uZGUpCisJCQkgICAmIE1hcmN1cyBNZXR6bGVyIChtb2NtQHRocC51bmkta29lbG4uZGUpCiAgICAgKGMpIDE5OTktMjAwMSBHZXJkIEtub3JyIDxrcmF4ZWxAZ29sZGJhY2guaW4tYmVybGluLmRlPgogCiAgKiBBZGp1c3RtZW50cyB0byBmaXQgYSBtb3JlIGdlbmVyYWwgbW9kZWwgYW5kIGFsbCBidWdzOgogCi0gCUNvcHlyaWdodCAoQykgMjAwMyBKb2huIEtsYXIgPGxpbnB2ciBhdCBwcm9qZWN0cGxhc21hLmNvbT4KKwlDb3B5cmlnaHQgKEMpIDIwMDMgSm9obiBLbGFyIDxsaW5wdnIgYXQgcHJvamVjdHBsYXNtYS5jb20+CiAKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtNDAsNiArNDAsNyBAQAogCiAjaW5jbHVkZSA8bWVkaWEvdHVuZXIuaD4KICNpbmNsdWRlIDxtZWRpYS90dmVlcHJvbS5oPgorI2luY2x1ZGUgPG1lZGlhL2F1ZGlvY2hpcC5oPgogCiBNT0RVTEVfREVTQ1JJUFRJT04oImkyYyBIYXVwcGF1Z2UgZWVwcm9tIGRlY29kZXIgZHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJKb2huIEtsYXIiKTsKQEAgLTUzLDE0ICs1NCwxNCBAQAogCiAjZGVmaW5lIHR2ZWVwcm9tX2luZm8oZm10LCBhcmcuLi4pIGRvIHtcCiAJcHJpbnRrKEtFUk5fSU5GTyAidHZlZXByb20gJWQtJTA0eDogIiBmbXQsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIGMtPmFkYXB0ZXItPm5yLCBjLT5hZGRyICwgIyNhcmcpOyB9IHdoaWxlICgwKQorCQkJYy0+YWRhcHRlci0+bnIsIGMtPmFkZHIgLCAjI2FyZyk7IH0gd2hpbGUgKDApCiAjZGVmaW5lIHR2ZWVwcm9tX3dhcm4oZm10LCBhcmcuLi4pIGRvIHtcCiAJcHJpbnRrKEtFUk5fV0FSTklORyAidHZlZXByb20gJWQtJTA0eDogIiBmbXQsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIGMtPmFkYXB0ZXItPm5yLCBjLT5hZGRyICwgIyNhcmcpOyB9IHdoaWxlICgwKQorCQkJYy0+YWRhcHRlci0+bnIsIGMtPmFkZHIgLCAjI2FyZyk7IH0gd2hpbGUgKDApCiAjZGVmaW5lIHR2ZWVwcm9tX2RiZyhmbXQsIGFyZy4uLikgZG8ge1wKIAlpZiAoZGVidWcpIFwKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICJ0dmVlcHJvbSAlZC0lMDR4OiAiIGZtdCwgXAotICAgICAgICAgICAgICAgICAgICAgICAgYy0+YWRhcHRlci0+bnIsIGMtPmFkZHIgLCAjI2FyZyk7IH0gd2hpbGUgKDApCisJCXByaW50ayhLRVJOX0lORk8gInR2ZWVwcm9tICVkLSUwNHg6ICIgZm10LCBcCisJCQljLT5hZGFwdGVyLT5uciwgYy0+YWRkciAsICMjYXJnKTsgfSB3aGlsZSAoMCkKIAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMTM0LDggKzEzNSw4IEBACiAJeyBUVU5FUl9URU1JQ180MDM5RlI1X05UU0MsICJUZW1pYyA0MDM5RlI1IiB9LAogCXsgVFVORVJfUEhJTElQU19GUTEyMTZNRSwgICAiUGhpbGlwcyBGUTEyMTYgTUUiIH0sCiAJeyBUVU5FUl9URU1JQ180MDY2Rlk1X1BBTF9JLCAiVGVtaWMgNDA2NkZZNSIgfSwKLSAgICAgICAgeyBUVU5FUl9QSElMSVBTX05UU0MsICAgICAgICAiUGhpbGlwcyBURDE1MzYiIH0sCi0gICAgICAgIHsgVFVORVJfUEhJTElQU19OVFNDLCAgICAgICAgIlBoaWxpcHMgVEQxNTM2RCIgfSwKKwl7IFRVTkVSX1BISUxJUFNfTlRTQywgICAgICAgICJQaGlsaXBzIFREMTUzNiIgfSwKKwl7IFRVTkVSX1BISUxJUFNfTlRTQywgICAgICAgICJQaGlsaXBzIFREMTUzNkQiIH0sCiAJeyBUVU5FUl9QSElMSVBTX05UU0MsICAiUGhpbGlwcyBGTVIxMjM2IiB9LCAvKiBtb25vIHJhZGlvICovCiAJeyBUVU5FUl9BQlNFTlQsICAgICAgICAiUGhpbGlwcyBGSTEyNTZNUCIgfSwKIAkvKiA0MC00OSAqLwpAQCAtMTg5LDcgKzE5MCw3IEBACiAJeyBUVU5FUl9MR19QQUxfTkVXX1RBUEMsICJUQ0wgMjAwMk1CIDMifSwKIAl7IFRVTkVSX0xHX1BBTF9ORVdfVEFQQywgIlRDTCAyMDAyTUkgMyJ9LAogCXsgVFVORVJfVENMXzIwMDJOLCAgICAgIlRDTCAyMDAyTiA2QSJ9LAotCXsgVFVORVJfQUJTRU5ULCAgICAgICAgIlBoaWxpcHMgRlExMjM2IE1LMyJ9LAorCXsgVFVORVJfUEhJTElQU19GTTEyMzZfTUszLCAiUGhpbGlwcyBGUTEyMzYgTUszIn0sCiAJeyBUVU5FUl9BQlNFTlQsICAgICAgICAiU2Ftc3VuZyBUQ1BOIDIxMjFQMzBBIn0sCiAJeyBUVU5FUl9BQlNFTlQsICAgICAgICAiU2Ftc3VuZyBUQ1BFIDQxMjFQMzBBIn0sCiAJeyBUVU5FUl9QSElMSVBTX0ZNMTIxNk1FX01LMywgIlRDTCBNRlBFMDUgMiJ9LApAQCAtMjAwLDk1ICsyMDEsMTM3IEBACiAJeyBUVU5FUl9BQlNFTlQsICAgICAgICAiUGhpbGlwcyBGUTEyODZBIE1LNCJ9LAogCXsgVFVORVJfQUJTRU5ULCAgICAgICAgIlBoaWxpcHMgRlExMjE2TUUgTUs1In0sCiAJeyBUVU5FUl9BQlNFTlQsICAgICAgICAiUGhpbGlwcyBGUTEyMzYgTUs1In0sCi0JeyBUVU5FUl9BQlNFTlQsICAgICAgICAiVW5zcGVjaWZpZWQifSwKLQl7IFRVTkVSX0xHX1BBTF9UQVBFLCAgICJMRyBQQUwgKFRBUEUgU2VyaWVzKSJ9LAotICAgICAgICB7IFRVTkVSX0FCU0VOVCwgICAgICAgICJVbnNwZWNpZmllZCJ9LAotICAgICAgICB7IFRVTkVSX1RDTF8yMDAyTiwgICAgICJUQ0wgMjAwMk4gNUgifSwKLQkvKiAxMDAtMTAzICovCi0JeyBUVU5FUl9BQlNFTlQsICAgICAgICAiVW5zcGVjaWZpZWQifSwKLSAgICAgICAgeyBUVU5FUl9URUE1NzY3LCAgICAgICAiUGhpbGlwcyBURUE1NzY3SE4gRk0gUmFkaW8ifSwKLSAgICAgICAgeyBUVU5FUl9BQlNFTlQsICAgICAgICAiVW5zcGVjaWZpZWQifSwKLSAgICAgICAgeyBUVU5FUl9QSElMSVBTX0ZNMTIzNl9NSzMsICJUQ0wgTUZOTTA1IDQifSwKKwl7IFRVTkVSX0FCU0VOVCwgICAgICAgICJTYW1zdW5nIFRDUEdfNjEyMVAzMEEifSwKKwl7IFRVTkVSX1RDTF8yMDAyTUIsICAgICJUQ0wgMjAwMk1CXzNIIn0sCisJeyBUVU5FUl9BQlNFTlQsICAgICAgICAiVENMIDIwMDJNSV8zSCJ9LAorCXsgVFVORVJfVENMXzIwMDJOLCAgICAgIlRDTCAyMDAyTiA1SCJ9LAorCS8qIDEwMC0xMDkgKi8KKwl7IFRVTkVSX0FCU0VOVCwgICAgICAgICJQaGlsaXBzIEZNRDEyMTZNRSJ9LAorCXsgVFVORVJfVEVBNTc2NywgICAgICAgIlBoaWxpcHMgVEVBNTc2OEhMIEZNIFJhZGlvIn0sCisJeyBUVU5FUl9BQlNFTlQsICAgICAgICAiUGFuYXNvbmljIEVOVjU3SDEyRDUifSwKKwl7IFRVTkVSX0FCU0VOVCwgICAgICAgICJUQ0wgTUZOTTA1LTQifSwKKwl7IFRVTkVSX0FCU0VOVCwgICAgICAgICJUQ0wgTU5NMDUtNCJ9LAorCXsgVFVORVJfUEhJTElQU19GTTEyMTZNRV9NSzMsICJUQ0wgTVBFMDUtMiJ9LAorCXsgVFVORVJfQUJTRU5ULCAgICAgICAgIlRDTCBNUU5NMDUtNCJ9LAorCXsgVFVORVJfQUJTRU5ULCAgICAgICAgIkxHIFRBUEMtVzcwMUQifSwKKwl7IFRVTkVSX0FCU0VOVCwgICAgICAgICJUQ0wgOTg4NlAtV00ifSwKKwl7IFRVTkVSX0FCU0VOVCwgICAgICAgICJUQ0wgMTY3Nk5NLVdNIn0sCiB9OwogCi0vKiBUaGlzIGxpc3QgaXMgc3VwcGxpZWQgYnkgSGF1cHBhdWdlLiBUaGFua3MhICovCi1zdGF0aWMgY29uc3QgY2hhciAqYXVkaW9JQ1tdID0gewotICAgICAgICAvKiAwLTQgKi8KLSAgICAgICAgIk5vbmUiLCAiVEVBNjMwMCIsICJURUE2MzIwIiwgIlREQTk4NTAiLCAiTVNQMzQwMEMiLAotICAgICAgICAvKiA1LTkgKi8KLSAgICAgICAgIk1TUDM0MTBEIiwgIk1TUDM0MTUiLCAiTVNQMzQzMCIsICJNU1AzNDM4IiwgIkNTNTMzMSIsCi0gICAgICAgIC8qIDEwLTE0ICovCi0gICAgICAgICJNU1AzNDM1IiwgIk1TUDM0NDAiLCAiTVNQMzQ0NSIsICJNU1AzNDExIiwgIk1TUDM0MTYiLAotICAgICAgICAvKiAxNS0xOSAqLwotICAgICAgICAiTVNQMzQyNSIsICJNU1AzNDUxIiwgIk1TUDM0MTgiLCAiVHlwZSAweDEyIiwgIk9LSTc3MTYiLAotICAgICAgICAvKiAyMC0yNCAqLwotICAgICAgICAiTVNQNDQxMCIsICJNU1A0NDIwIiwgIk1TUDQ0NDAiLCAiTVNQNDQ1MCIsICJNU1A0NDA4IiwKLSAgICAgICAgLyogMjUtMjkgKi8KLSAgICAgICAgIk1TUDQ0MTgiLCAiTVNQNDQyOCIsICJNU1A0NDQ4IiwgIk1TUDQ0NTgiLCAiVHlwZSAweDFkIiwKLSAgICAgICAgLyogMzAtMzQgKi8KLSAgICAgICAgIkNYODgwIiwgIkNYODgxIiwgIkNYODgzIiwgIkNYODgyIiwgIkNYMjU4NDAiLAotICAgICAgICAvKiAzNS0zOCAqLwotICAgICAgICAiQ1gyNTg0MSIsICJDWDI1ODQyIiwgIkNYMjU4NDMiLCAiQ1gyMzQxOCIsCitzdGF0aWMgc3RydWN0IEhBVVBQQVVHRV9BVURJT0lDCit7CisJZW51bSBhdWRpb2NoaXAgIGlkOworCWNoYXIgKm5hbWU7Cit9CithdWRpb0lDW10gPQoreworCS8qIDAtNCAqLworCXtBVURJT19DSElQX05PTkUsICAgICAiTm9uZSJ9LAorCXtBVURJT19DSElQX1RFQTYzMDAsICAiVEVBNjMwMCJ9LAorCXtBVURJT19DSElQX1RFQTYzMDAsICAiVEVBNjMyMCJ9LAorCXtBVURJT19DSElQX1REQTk4NVgsICAiVERBOTg1MCJ9LAorCXtBVURJT19DSElQX01TUDM0WFgsICAiTVNQMzQwMEMifSwKKwkvKiA1LTkgKi8KKwl7QVVESU9fQ0hJUF9NU1AzNFhYLCAgIk1TUDM0MTBEIn0sCisJe0FVRElPX0NISVBfTVNQMzRYWCwgICJNU1AzNDE1In0sCisJe0FVRElPX0NISVBfTVNQMzRYWCwgICJNU1AzNDMwIn0sCisJe0FVRElPX0NISVBfVU5LTk9XTiwgICJNU1AzNDM4In0sCisJe0FVRElPX0NISVBfVU5LTk9XTiwgICJDUzUzMzEifSwKKwkvKiAxMC0xNCAqLworCXtBVURJT19DSElQX01TUDM0WFgsICAiTVNQMzQzNSJ9LAorCXtBVURJT19DSElQX01TUDM0WFgsICAiTVNQMzQ0MCJ9LAorCXtBVURJT19DSElQX01TUDM0WFgsICAiTVNQMzQ0NSJ9LAorCXtBVURJT19DSElQX1VOS05PV04sICAiTVNQMzQxMSJ9LAorCXtBVURJT19DSElQX1VOS05PV04sICAiTVNQMzQxNiJ9LAorCS8qIDE1LTE5ICovCisJe0FVRElPX0NISVBfTVNQMzRYWCwgICJNU1AzNDI1In0sCisJe0FVRElPX0NISVBfVU5LTk9XTiwgICJNU1AzNDUxIn0sCisJe0FVRElPX0NISVBfVU5LTk9XTiwgICJNU1AzNDE4In0sCisJe0FVRElPX0NISVBfVU5LTk9XTiwgICJUeXBlIDB4MTIifSwKKwl7QVVESU9fQ0hJUF9VTktOT1dOLCAgIk9LSTc3MTYifSwKKwkvKiAyMC0yNCAqLworCXtBVURJT19DSElQX1VOS05PV04sICAiTVNQNDQxMCJ9LAorCXtBVURJT19DSElQX1VOS05PV04sICAiTVNQNDQyMCJ9LAorCXtBVURJT19DSElQX1VOS05PV04sICAiTVNQNDQ0MCJ9LAorCXtBVURJT19DSElQX1VOS05PV04sICAiTVNQNDQ1MCJ9LAorCXtBVURJT19DSElQX1VOS05PV04sICAiTVNQNDQwOCJ9LAorCS8qIDI1LTI5ICovCisJe0FVRElPX0NISVBfVU5LTk9XTiwgICJNU1A0NDE4In0sCisJe0FVRElPX0NISVBfVU5LTk9XTiwgICJNU1A0NDI4In0sCisJe0FVRElPX0NISVBfVU5LTk9XTiwgICJNU1A0NDQ4In0sCisJe0FVRElPX0NISVBfVU5LTk9XTiwgICJNU1A0NDU4In0sCisJe0FVRElPX0NISVBfVU5LTk9XTiwgICJUeXBlIDB4MWQifSwKKwkvKiAzMC0zNCAqLworCXtBVURJT19DSElQX0lOVEVSTkFMLCAiQ1g4ODAifSwKKwl7QVVESU9fQ0hJUF9JTlRFUk5BTCwgIkNYODgxIn0sCisJe0FVRElPX0NISVBfSU5URVJOQUwsICJDWDg4MyJ9LAorCXtBVURJT19DSElQX0lOVEVSTkFMLCAiQ1g4ODIifSwKKwl7QVVESU9fQ0hJUF9JTlRFUk5BTCwgIkNYMjU4NDAifSwKKwkvKiAzNS0zOCAqLworCXtBVURJT19DSElQX0lOVEVSTkFMLCAiQ1gyNTg0MSJ9LAorCXtBVURJT19DSElQX0lOVEVSTkFMLCAiQ1gyNTg0MiJ9LAorCXtBVURJT19DSElQX0lOVEVSTkFMLCAiQ1gyNTg0MyJ9LAorCXtBVURJT19DSElQX0lOVEVSTkFMLCAiQ1gyMzQxOCJ9LAogfTsKIAogLyogVGhpcyBsaXN0IGlzIHN1cHBsaWVkIGJ5IEhhdXBwYXVnZS4gVGhhbmtzISAqLwogc3RhdGljIGNvbnN0IGNoYXIgKmRlY29kZXJJQ1tdID0gewotICAgICAgICAvKiAwLTQgKi8KLSAgICAgICAgIk5vbmUiLCAiQlQ4MTUiLCAiQlQ4MTciLCAiQlQ4MTkiLCAiQlQ4MTVBIiwKLSAgICAgICAgLyogNS05ICovCi0gICAgICAgICJCVDgxN0EiLCAiQlQ4MTlBIiwgIkJUODI3IiwgIkJUODI5IiwgIkJUODQ4IiwKLSAgICAgICAgLyogMTAtMTQgKi8KLSAgICAgICAgIkJUODQ4QSIsICJCVDg0OUEiLCAiQlQ4MjlBIiwgIkJUODI3QSIsICJCVDg3OCIsCi0gICAgICAgIC8qIDE1LTE5ICovCi0gICAgICAgICJCVDg3OSIsICJCVDg4MCIsICJWUFgzMjI2RSIsICJTQUE3MTE0IiwgIlNBQTcxMTUiLAotICAgICAgICAvKiAyMC0yNCAqLwotICAgICAgICAiQ1g4ODAiLCAiQ1g4ODEiLCAiQ1g4ODMiLCAiU0FBNzExMSIsICJTQUE3MTEzIiwKLSAgICAgICAgLyogMjUtMjkgKi8KLSAgICAgICAgIkNYODgyIiwgIlRWUDUxNTBBIiwgIkNYMjU4NDAiLCAiQ1gyNTg0MSIsICJDWDI1ODQyIiwKLSAgICAgICAgLyogMzAtMzEgKi8KLSAgICAgICAgIkNYMjU4NDMiLCAiQ1gyMzQxOCIsCisJLyogMC00ICovCisJIk5vbmUiLCAiQlQ4MTUiLCAiQlQ4MTciLCAiQlQ4MTkiLCAiQlQ4MTVBIiwKKwkvKiA1LTkgKi8KKwkiQlQ4MTdBIiwgIkJUODE5QSIsICJCVDgyNyIsICJCVDgyOSIsICJCVDg0OCIsCisJLyogMTAtMTQgKi8KKwkiQlQ4NDhBIiwgIkJUODQ5QSIsICJCVDgyOUEiLCAiQlQ4MjdBIiwgIkJUODc4IiwKKwkvKiAxNS0xOSAqLworCSJCVDg3OSIsICJCVDg4MCIsICJWUFgzMjI2RSIsICJTQUE3MTE0IiwgIlNBQTcxMTUiLAorCS8qIDIwLTI0ICovCisJIkNYODgwIiwgIkNYODgxIiwgIkNYODgzIiwgIlNBQTcxMTEiLCAiU0FBNzExMyIsCisJLyogMjUtMjkgKi8KKwkiQ1g4ODIiLCAiVFZQNTE1MEEiLCAiQ1gyNTg0MCIsICJDWDI1ODQxIiwgIkNYMjU4NDIiLAorCS8qIDMwLTMxICovCisJIkNYMjU4NDMiLCAiQ1gyMzQxOCIsCiB9OwogCiBzdGF0aWMgaW50IGhhc1JhZGlvVHVuZXIoaW50IHR1bmVyVHlwZSkKIHsKLSAgICAgICAgc3dpdGNoICh0dW5lclR5cGUpIHsKLSAgICAgICAgICAgICAgICBjYXNlIDE4OiAvL1BOUEVudl9UVU5FUl9GUjEyMzZfTUsyOgotICAgICAgICAgICAgICAgIGNhc2UgMjM6IC8vUE5QRW52X1RVTkVSX0ZNMTIzNjoKLSAgICAgICAgICAgICAgICBjYXNlIDM4OiAvL1BOUEVudl9UVU5FUl9GTVIxMjM2OgotICAgICAgICAgICAgICAgIGNhc2UgMTY6IC8vUE5QRW52X1RVTkVSX0ZSMTIxNl9NSzI6Ci0gICAgICAgICAgICAgICAgY2FzZSAxOTogLy9QTlBFbnZfVFVORVJfRlIxMjQ2X01LMjoKLSAgICAgICAgICAgICAgICBjYXNlIDIxOiAvL1BOUEVudl9UVU5FUl9GTTEyMTY6Ci0gICAgICAgICAgICAgICAgY2FzZSAyNDogLy9QTlBFbnZfVFVORVJfRk0xMjQ2OgotICAgICAgICAgICAgICAgIGNhc2UgMTc6IC8vUE5QRW52X1RVTkVSX0ZSMTIxNk1GX01LMjoKLSAgICAgICAgICAgICAgICBjYXNlIDIyOiAvL1BOUEVudl9UVU5FUl9GTTEyMTZNRjoKLSAgICAgICAgICAgICAgICBjYXNlIDIwOiAvL1BOUEVudl9UVU5FUl9GUjEyNTZfTUsyOgotICAgICAgICAgICAgICAgIGNhc2UgMjU6IC8vUE5QRW52X1RVTkVSX0ZNMTI1NjoKLSAgICAgICAgICAgICAgICBjYXNlIDMzOiAvL1BOUEVudl9UVU5FUl80MDM5RlI1OgotICAgICAgICAgICAgICAgIGNhc2UgNDI6IC8vUE5QRW52X1RVTkVSXzQwMDlGUjU6Ci0gICAgICAgICAgICAgICAgY2FzZSA1MjogLy9QTlBFbnZfVFVORVJfNDA0OUZNNToKLSAgICAgICAgICAgICAgICBjYXNlIDU0OiAvL1BOUEVudl9UVU5FUl80MDQ5Rk01X0FsdEkyQzoKLSAgICAgICAgICAgICAgICBjYXNlIDQ0OiAvL1BOUEVudl9UVU5FUl80MDA5Rk41OgotICAgICAgICAgICAgICAgIGNhc2UgMzE6IC8vUE5QRW52X1RVTkVSX1RDUEI5MDg1UDoKLSAgICAgICAgICAgICAgICBjYXNlIDMwOiAvL1BOUEVudl9UVU5FUl9UQ1BOOTA4NUQ6Ci0gICAgICAgICAgICAgICAgY2FzZSA0NjogLy9QTlBFbnZfVFVORVJfVFAxOE5TUjAxRjoKLSAgICAgICAgICAgICAgICBjYXNlIDQ3OiAvL1BOUEVudl9UVU5FUl9UUDE4UFNCMDFEOgotICAgICAgICAgICAgICAgIGNhc2UgNDk6IC8vUE5QRW52X1RVTkVSX1RBUENfSTAwMUQ6Ci0gICAgICAgICAgICAgICAgY2FzZSA2MDogLy9QTlBFbnZfVFVORVJfVEFQRV9TMDAxRF9NSzM6Ci0gICAgICAgICAgICAgICAgY2FzZSA1NzogLy9QTlBFbnZfVFVORVJfRk0xMjE2TUVfTUszOgotICAgICAgICAgICAgICAgIGNhc2UgNTk6IC8vUE5QRW52X1RVTkVSX0ZNMTIxNk1QX01LMzoKLSAgICAgICAgICAgICAgICBjYXNlIDU4OiAvL1BOUEVudl9UVU5FUl9GTTEyMzZfTUszOgotICAgICAgICAgICAgICAgIGNhc2UgNjg6IC8vUE5QRW52X1RVTkVSX1RBUEVfSDAwMUZfTUszOgotICAgICAgICAgICAgICAgIGNhc2UgNjE6IC8vUE5QRW52X1RVTkVSX1RBUEVfTTAwMURfTUszOgotICAgICAgICAgICAgICAgIGNhc2UgNzg6IC8vUE5QRW52X1RVTkVSX1REQTgyNzVDMV84MjkwX0ZNOgotICAgICAgICAgICAgICAgIGNhc2UgODk6IC8vUE5QRW52X1RVTkVSX1RDTF9NRlBFMDVfMjoKLSAgICAgICAgICAgICAgICBjYXNlIDkyOiAvL1BOUEVudl9UVU5FUl9QSElMSVBTX0ZRMTIzNkFfTUs0OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gMDsKKwlzd2l0Y2ggKHR1bmVyVHlwZSkgeworCQljYXNlIDE4OiAvL1BOUEVudl9UVU5FUl9GUjEyMzZfTUsyOgorCQljYXNlIDIzOiAvL1BOUEVudl9UVU5FUl9GTTEyMzY6CisJCWNhc2UgMzg6IC8vUE5QRW52X1RVTkVSX0ZNUjEyMzY6CisJCWNhc2UgMTY6IC8vUE5QRW52X1RVTkVSX0ZSMTIxNl9NSzI6CisJCWNhc2UgMTk6IC8vUE5QRW52X1RVTkVSX0ZSMTI0Nl9NSzI6CisJCWNhc2UgMjE6IC8vUE5QRW52X1RVTkVSX0ZNMTIxNjoKKwkJY2FzZSAyNDogLy9QTlBFbnZfVFVORVJfRk0xMjQ2OgorCQljYXNlIDE3OiAvL1BOUEVudl9UVU5FUl9GUjEyMTZNRl9NSzI6CisJCWNhc2UgMjI6IC8vUE5QRW52X1RVTkVSX0ZNMTIxNk1GOgorCQljYXNlIDIwOiAvL1BOUEVudl9UVU5FUl9GUjEyNTZfTUsyOgorCQljYXNlIDI1OiAvL1BOUEVudl9UVU5FUl9GTTEyNTY6CisJCWNhc2UgMzM6IC8vUE5QRW52X1RVTkVSXzQwMzlGUjU6CisJCWNhc2UgNDI6IC8vUE5QRW52X1RVTkVSXzQwMDlGUjU6CisJCWNhc2UgNTI6IC8vUE5QRW52X1RVTkVSXzQwNDlGTTU6CisJCWNhc2UgNTQ6IC8vUE5QRW52X1RVTkVSXzQwNDlGTTVfQWx0STJDOgorCQljYXNlIDQ0OiAvL1BOUEVudl9UVU5FUl80MDA5Rk41OgorCQljYXNlIDMxOiAvL1BOUEVudl9UVU5FUl9UQ1BCOTA4NVA6CisJCWNhc2UgMzA6IC8vUE5QRW52X1RVTkVSX1RDUE45MDg1RDoKKwkJY2FzZSA0NjogLy9QTlBFbnZfVFVORVJfVFAxOE5TUjAxRjoKKwkJY2FzZSA0NzogLy9QTlBFbnZfVFVORVJfVFAxOFBTQjAxRDoKKwkJY2FzZSA0OTogLy9QTlBFbnZfVFVORVJfVEFQQ19JMDAxRDoKKwkJY2FzZSA2MDogLy9QTlBFbnZfVFVORVJfVEFQRV9TMDAxRF9NSzM6CisJCWNhc2UgNTc6IC8vUE5QRW52X1RVTkVSX0ZNMTIxNk1FX01LMzoKKwkJY2FzZSA1OTogLy9QTlBFbnZfVFVORVJfRk0xMjE2TVBfTUszOgorCQljYXNlIDU4OiAvL1BOUEVudl9UVU5FUl9GTTEyMzZfTUszOgorCQljYXNlIDY4OiAvL1BOUEVudl9UVU5FUl9UQVBFX0gwMDFGX01LMzoKKwkJY2FzZSA2MTogLy9QTlBFbnZfVFVORVJfVEFQRV9NMDAxRF9NSzM6CisJCWNhc2UgNzg6IC8vUE5QRW52X1RVTkVSX1REQTgyNzVDMV84MjkwX0ZNOgorCQljYXNlIDg5OiAvL1BOUEVudl9UVU5FUl9UQ0xfTUZQRTA1XzI6CisJCWNhc2UgOTI6IC8vUE5QRW52X1RVTkVSX1BISUxJUFNfRlExMjM2QV9NSzQ6CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKIH0KIAogdm9pZCB0dmVlcHJvbV9oYXVwcGF1Z2VfYW5hbG9nKHN0cnVjdCBpMmNfY2xpZW50ICpjLCBzdHJ1Y3QgdHZlZXByb20gKnR2ZWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmVlcHJvbV9kYXRhKQorCQkJCXVuc2lnbmVkIGNoYXIgKmVlcHJvbV9kYXRhKQogewogCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAkqKiBUaGUgaGF1cHBhdWdlIGVlcHJvbSBmb3JtYXQgaXMgdGFnZ2VkCkBAIC0zMTIsMTkgKzM1NSwyNyBAQAogCSoqICMgb2YgaW5wdXRzL291dHB1dHMgPz8/CiAJKi8KIAotCWludCBpLCBqLCBsZW4sIGRvbmUsIGJlZW5oZXJlLCB0YWc7CisJaW50IGksIGosIGxlbiwgZG9uZSwgYmVlbmhlcmUsIHRhZyxzdGFydDsKIAotICAgICAgICBpbnQgdHVuZXIxID0gMCwgdF9mb3JtYXQxID0gMDsKKwlpbnQgdHVuZXIxID0gMCwgdF9mb3JtYXQxID0gMCwgYXVkaW9pYz0tMTsKIAljaGFyICp0X25hbWUxID0gTlVMTDsKLSAgICAgICAgY29uc3QgY2hhciAqdF9mbXRfbmFtZTFbOF0gPSB7ICIgbm9uZSIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiIH07CisJY29uc3QgY2hhciAqdF9mbXRfbmFtZTFbOF0gPSB7ICIgbm9uZSIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiIH07CiAKLSAgICAgICAgaW50IHR1bmVyMiA9IDAsIHRfZm9ybWF0MiA9IDA7CisJaW50IHR1bmVyMiA9IDAsIHRfZm9ybWF0MiA9IDA7CiAJY2hhciAqdF9uYW1lMiA9IE5VTEw7Ci0gICAgICAgIGNvbnN0IGNoYXIgKnRfZm10X25hbWUyWzhdID0geyAiIG5vbmUiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiB9OworCWNvbnN0IGNoYXIgKnRfZm10X25hbWUyWzhdID0geyAiIG5vbmUiLCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAiIiB9OwogCi0gICAgICAgIG1lbXNldCh0dmVlLCAwLCBzaXplb2YoKnR2ZWUpKTsKKwltZW1zZXQodHZlZSwgMCwgc2l6ZW9mKCp0dmVlKSk7CiAJZG9uZSA9IGxlbiA9IGJlZW5oZXJlID0gMDsKLQlmb3IgKGkgPSAwOyAhZG9uZSAmJiBpIDwgMjU2OyBpICs9IGxlbikgeworCisJLyogSGFjayBmb3IgcHJvY2Vzc2luZyBlZXByb20gZm9yIGVtMjh4eCAqLworCWlmICgoZWVwcm9tX2RhdGFbMF09PTB4MWEpJiYoZWVwcm9tX2RhdGFbMV09PTB4ZWIpJiYKKwkJCQkoZWVwcm9tX2RhdGFbMl09PTB4NjcpJiYoZWVwcm9tX2RhdGFbM109PTB4OTUpKQorCQlzdGFydD0weGEwOworCWVsc2UKKwkJc3RhcnQ9MDsKKworCWZvciAoaSA9IHN0YXJ0OyAhZG9uZSAmJiBpIDwgMjU2OyBpICs9IGxlbikgewogCQlpZiAoZWVwcm9tX2RhdGFbaV0gPT0gMHg4NCkgewogCQkJbGVuID0gZWVwcm9tX2RhdGFbaSArIDFdICsgKGVlcHJvbV9kYXRhW2kgKyAyXSA8PCA4KTsKIAkJCWkgKz0gMzsKQEAgLTMzOCwyOCArMzg5LDI4IEBACiAJCQkrK2k7CiAJCX0gZWxzZSB7CiAJCQl0dmVlcHJvbV93YXJuKCJFbmNvdW50ZXJlZCBiYWQgcGFja2V0IGhlYWRlciBbJTAyeF0uICIKLQkJCQkgICAiQ29ycnVwdCBvciBub3QgYSBIYXVwcGF1Z2UgZWVwcm9tLlxuIiwgZWVwcm9tX2RhdGFbaV0pOworCQkJCSJDb3JydXB0IG9yIG5vdCBhIEhhdXBwYXVnZSBlZXByb20uXG4iLCBlZXByb21fZGF0YVtpXSk7CiAJCQlyZXR1cm47CiAJCX0KIAotICAgICAgICAgICAgICAgIGlmIChkZWJ1ZykgewotICAgICAgICAgICAgICAgICAgICAgICAgdHZlZXByb21faW5mbygiVGFnIFslMDJ4XSArICVkIGJ5dGVzOiIsIGVlcHJvbV9kYXRhW2ldLCBsZW4gLSAxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvcihqID0gMTsgaiA8IGxlbjsgaisrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiICUwMngiLCBlZXByb21fZGF0YVtpICsgal0pOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJcbiIpOwotICAgICAgICAgICAgICAgIH0KKwkJaWYgKGRlYnVnKSB7CisJCQl0dmVlcHJvbV9pbmZvKCJUYWcgWyUwMnhdICsgJWQgYnl0ZXM6IiwgZWVwcm9tX2RhdGFbaV0sIGxlbiAtIDEpOworCQkJZm9yKGogPSAxOyBqIDwgbGVuOyBqKyspIHsKKwkJCQlwcmludGsoIiAlMDJ4IiwgZWVwcm9tX2RhdGFbaSArIGpdKTsKKwkJCX0KKwkJCXByaW50aygiXG4iKTsKKwkJfQogCiAJCS8qIHByb2Nlc3MgYnkgdGFnICovCiAJCXRhZyA9IGVlcHJvbV9kYXRhW2ldOwogCQlzd2l0Y2ggKHRhZykgewogCQljYXNlIDB4MDA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKiB0YWc6ICdDb21wcmVoZW5zaXZlJyAqLworCQkJLyogdGFnOiAnQ29tcHJlaGVuc2l2ZScgKi8KIAkJCXR1bmVyMSA9IGVlcHJvbV9kYXRhW2krNl07CiAJCQl0X2Zvcm1hdDEgPSBlZXByb21fZGF0YVtpKzVdOwogCQkJdHZlZS0+aGFzX3JhZGlvID0gZWVwcm9tX2RhdGFbaStsZW4tMV07Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKiBvbGQgc3R5bGUgdGFnLCBkb24ndCBrbm93IGhvdyB0byBkZXRlY3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIElSIHByZXNlbmNlLCBtYXJrIGFzIHVua25vd24uICovCisJCQkvKiBvbGQgc3R5bGUgdGFnLCBkb24ndCBrbm93IGhvdyB0byBkZXRlY3QKKwkJCUlSIHByZXNlbmNlLCBtYXJrIGFzIHVua25vd24uICovCiAJCQl0dmVlLT5oYXNfaXIgPSAyOwogCQkJdHZlZS0+bW9kZWwgPQogCQkJCWVlcHJvbV9kYXRhW2krOF0gKwpAQCAtMzcwLDcgKzQyMSw3IEBACiAJCQlicmVhazsKIAogCQljYXNlIDB4MDE6Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKiB0YWc6ICdTZXJpYWxJRCcgKi8KKwkJCS8qIHRhZzogJ1NlcmlhbElEJyAqLwogCQkJdHZlZS0+c2VyaWFsX251bWJlciA9CiAJCQkJZWVwcm9tX2RhdGFbaSs2XSArCiAJCQkJKGVlcHJvbV9kYXRhW2krN10gPDwgOCkgKwpAQCAtMzc4LDE3ICs0MjksMjEgQEAKIAkJCWJyZWFrOwogCiAJCWNhc2UgMHgwMjoKLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRhZyAnQXVkaW9JbmZvJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgTm90ZSBtYXNrIHdpdGggMHg3RiwgaGlnaCBiaXQgdXNlZCBvbiBzb21lIG9sZGVyIG1vZGVscwotICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gaW5kaWNhdGUgNDA1MiBtdXggd2FzIHJlbW92ZWQgaW4gZmF2b3Igb2YgdXNpbmcgTVNQCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dHMgZGlyZWN0bHkuICovCi0JCQl0dmVlLT5hdWRpb19wcm9jZXNzb3IgPSBlZXByb21fZGF0YVtpKzJdICYgMHg3ZjsKKwkJCS8qIHRhZyAnQXVkaW9JbmZvJworCQkJTm90ZSBtYXNrIHdpdGggMHg3RiwgaGlnaCBiaXQgdXNlZCBvbiBzb21lIG9sZGVyIG1vZGVscworCQkJdG8gaW5kaWNhdGUgNDA1MiBtdXggd2FzIHJlbW92ZWQgaW4gZmF2b3Igb2YgdXNpbmcgTVNQCisJCQlpbnB1dHMgZGlyZWN0bHkuICovCisJCQlhdWRpb2ljID0gZWVwcm9tX2RhdGFbaSsyXSAmIDB4N2Y7CisJCQlpZiAoYXVkaW9pYyA8IHNpemVvZihhdWRpb0lDKS9zaXplb2YoKmF1ZGlvSUMpKQorCQkJCXR2ZWUtPmF1ZGlvX3Byb2Nlc3NvciA9IGF1ZGlvSUNbYXVkaW9pY10uaWQ7CisJCQllbHNlCisJCQkJdHZlZS0+YXVkaW9fcHJvY2Vzc29yID0gQVVESU9fQ0hJUF9VTktOT1dOOwogCQkJYnJlYWs7CiAKLSAgICAgICAgICAgICAgICAvKiBjYXNlIDB4MDM6IHRhZyAnRUVJbmZvJyAqLworCQkvKiBjYXNlIDB4MDM6IHRhZyAnRUVJbmZvJyAqLwogCiAJCWNhc2UgMHgwNDoKLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRhZyAnU2VyaWFsSUQyJyAqLworCQkJLyogdGFnICdTZXJpYWxJRDInICovCiAJCQl0dmVlLT5zZXJpYWxfbnVtYmVyID0KIAkJCQllZXByb21fZGF0YVtpKzVdICsKIAkJCQkoZWVwcm9tX2RhdGFbaSs2XSA8PCA4KSArCkBAIC0zOTYsMTUgKzQ1MSwyMCBAQAogCQkJYnJlYWs7CiAKIAkJY2FzZSAweDA1OgotICAgICAgICAgICAgICAgICAgICAgICAgLyogdGFnICdBdWRpbzInCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBOb3RlIG1hc2sgd2l0aCAweDdGLCBoaWdoIGJpdCB1c2VkIG9uIHNvbWUgb2xkZXIgbW9kZWxzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB0byBpbmRpY2F0ZSA0MDUyIG11eCB3YXMgcmVtb3ZlZCBpbiBmYXZvciBvZiB1c2luZyBNU1AKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0cyBkaXJlY3RseS4gKi8KLQkJCXR2ZWUtPmF1ZGlvX3Byb2Nlc3NvciA9IGVlcHJvbV9kYXRhW2krMV0gJiAweDdmOworCQkJLyogdGFnICdBdWRpbzInCisJCQlOb3RlIG1hc2sgd2l0aCAweDdGLCBoaWdoIGJpdCB1c2VkIG9uIHNvbWUgb2xkZXIgbW9kZWxzCisJCQl0byBpbmRpY2F0ZSA0MDUyIG11eCB3YXMgcmVtb3ZlZCBpbiBmYXZvciBvZiB1c2luZyBNU1AKKwkJCWlucHV0cyBkaXJlY3RseS4gKi8KKwkJCWF1ZGlvaWMgPSBlZXByb21fZGF0YVtpKzFdICYgMHg3ZjsKKwkJCWlmIChhdWRpb2ljIDwgc2l6ZW9mKGF1ZGlvSUMpL3NpemVvZigqYXVkaW9JQykpCisJCQkJdHZlZS0+YXVkaW9fcHJvY2Vzc29yID0gYXVkaW9JQ1thdWRpb2ljXS5pZDsKKwkJCWVsc2UKKwkJCQl0dmVlLT5hdWRpb19wcm9jZXNzb3IgPSBBVURJT19DSElQX1VOS05PV047CisKIAkJCWJyZWFrOwogCiAJCWNhc2UgMHgwNjoKLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRhZyAnTW9kZWxSZXYnICovCisJCQkvKiB0YWcgJ01vZGVsUmV2JyAqLwogCQkJdHZlZS0+bW9kZWwgPQogCQkJCWVlcHJvbV9kYXRhW2krMV0gKwogCQkJCShlZXByb21fZGF0YVtpKzJdIDw8IDgpOwpAQCAtNDE0LDU1ICs0NzQsNTUgQEAKIAkJCWJyZWFrOwogCiAJCWNhc2UgMHgwNzoKLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRhZyAnRGV0YWlscyc6IGFjY29yZGluZyB0byBIYXVwcGF1Z2Ugbm90IGludGVyZXN0aW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBvbiBhbnkgUENJLWVyYSBvciBsYXRlciBib2FyZHMuICovCisJCQkvKiB0YWcgJ0RldGFpbHMnOiBhY2NvcmRpbmcgdG8gSGF1cHBhdWdlIG5vdCBpbnRlcmVzdGluZworCQkJb24gYW55IFBDSS1lcmEgb3IgbGF0ZXIgYm9hcmRzLiAqLwogCQkJYnJlYWs7CiAKLSAgICAgICAgICAgICAgICAvKiB0aGVyZSBpcyBubyB0YWcgMHgwOCBkZWZpbmVkICovCisJCS8qIHRoZXJlIGlzIG5vIHRhZyAweDA4IGRlZmluZWQgKi8KIAogCQljYXNlIDB4MDk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKiB0YWcgJ1ZpZGVvJyAqLworCQkJLyogdGFnICdWaWRlbycgKi8KIAkJCXR2ZWUtPmRlY29kZXJfcHJvY2Vzc29yID0gZWVwcm9tX2RhdGFbaSArIDFdOwogCQkJYnJlYWs7CiAKIAkJY2FzZSAweDBhOgotICAgICAgICAgICAgICAgICAgICAgICAgLyogdGFnICdUdW5lcicgKi8KKwkJCS8qIHRhZyAnVHVuZXInICovCiAJCQlpZiAoYmVlbmhlcmUgPT0gMCkgewogCQkJCXR1bmVyMSA9IGVlcHJvbV9kYXRhW2krMl07CiAJCQkJdF9mb3JtYXQxID0gZWVwcm9tX2RhdGFbaSsxXTsKIAkJCQliZWVuaGVyZSA9IDE7CiAJCQl9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhIHNlY29uZCAocmFkaW8pIHR1bmVyIG1heSBiZSBwcmVzZW50ICovCisJCQkJLyogYSBzZWNvbmQgKHJhZGlvKSB0dW5lciBtYXkgYmUgcHJlc2VudCAqLwogCQkJCXR1bmVyMiA9IGVlcHJvbV9kYXRhW2krMl07CiAJCQkJdF9mb3JtYXQyID0gZWVwcm9tX2RhdGFbaSsxXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRfZm9ybWF0MiA9PSAwKSB7ICAvKiBub3QgYSBUViB0dW5lcj8gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dmVlLT5oYXNfcmFkaW8gPSAxOyAvKiBtdXN0IGJlIHJhZGlvICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKwkJCQlpZiAodF9mb3JtYXQyID09IDApIHsgIC8qIG5vdCBhIFRWIHR1bmVyPyAqLworCQkJCQl0dmVlLT5oYXNfcmFkaW8gPSAxOyAvKiBtdXN0IGJlIHJhZGlvICovCisJCQkJfQorCQkJfQogCQkJYnJlYWs7CiAKLSAgICAgICAgICAgICAgICBjYXNlIDB4MGI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKiB0YWcgJ0lucHV0cyc6IGFjY29yZGluZyB0byBIYXVwcGF1Z2UgdGhpcyBpcyBzcGVjaWZpYwotICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gZWFjaCBkcml2ZXIgZmFtaWx5LCBzbyBubyBnb29kIGFzc3VtcHRpb25zIGNhbiBiZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFkZS4gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCQljYXNlIDB4MGI6CisJCQkvKiB0YWcgJ0lucHV0cyc6IGFjY29yZGluZyB0byBIYXVwcGF1Z2UgdGhpcyBpcyBzcGVjaWZpYworCQkJdG8gZWFjaCBkcml2ZXIgZmFtaWx5LCBzbyBubyBnb29kIGFzc3VtcHRpb25zIGNhbiBiZQorCQkJbWFkZS4gKi8KKwkJCWJyZWFrOwogCi0gICAgICAgICAgICAgICAgLyogY2FzZSAweDBjOiB0YWcgJ0JhbHVuJyAqLwotICAgICAgICAgICAgICAgIC8qIGNhc2UgMHgwZDogdGFnICdUZWxldGV4dCcgKi8KKwkJLyogY2FzZSAweDBjOiB0YWcgJ0JhbHVuJyAqLworCQkvKiBjYXNlIDB4MGQ6IHRhZyAnVGVsZXRleHQnICovCiAKIAkJY2FzZSAweDBlOgotICAgICAgICAgICAgICAgICAgICAgICAgLyogdGFnOiAnUmFkaW8nICovCisJCQkvKiB0YWc6ICdSYWRpbycgKi8KIAkJCXR2ZWUtPmhhc19yYWRpbyA9IGVlcHJvbV9kYXRhW2krMV07CiAJCQlicmVhazsKIAotICAgICAgICAgICAgICAgIGNhc2UgMHgwZjoKLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRhZyAnSVJJbmZvJyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgdHZlZS0+aGFzX2lyID0gZWVwcm9tX2RhdGFbaSsxXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCQljYXNlIDB4MGY6CisJCQkvKiB0YWcgJ0lSSW5mbycgKi8KKwkJCXR2ZWUtPmhhc19pciA9IGVlcHJvbV9kYXRhW2krMV07CisJCQlicmVhazsKIAotICAgICAgICAgICAgICAgIC8qIGNhc2UgMHgxMDogdGFnICdWQklJbmZvJyAqLwotICAgICAgICAgICAgICAgIC8qIGNhc2UgMHgxMTogdGFnICdRQ0luZm8nICovCi0gICAgICAgICAgICAgICAgLyogY2FzZSAweDEyOiB0YWcgJ0luZm9CaXRzJyAqLworCQkvKiBjYXNlIDB4MTA6IHRhZyAnVkJJSW5mbycgKi8KKwkJLyogY2FzZSAweDExOiB0YWcgJ1FDSW5mbycgKi8KKwkJLyogY2FzZSAweDEyOiB0YWcgJ0luZm9CaXRzJyAqLwogCiAJCWRlZmF1bHQ6CiAJCQl0dmVlcHJvbV9kYmcoIk5vdCBzdXJlIHdoYXQgdG8gZG8gd2l0aCB0YWcgWyUwMnhdXG4iLCB0YWcpOwpAQCAtNDgzLDExICs1NDMsMTEgQEAKIAkJdHZlZS0+cmV2X3N0cls0XSA9IDA7CiAJfQogCi0gICAgICAgIGlmIChoYXNSYWRpb1R1bmVyKHR1bmVyMSkgJiYgIXR2ZWUtPmhhc19yYWRpbykgewotCSAgICB0dmVlcHJvbV9pbmZvKCJUaGUgZWVwcm9tIHNheXMgbm8gcmFkaW8gaXMgcHJlc2VudCwgYnV0IHRoZSB0dW5lciB0eXBlXG4iKTsKLQkgICAgdHZlZXByb21faW5mbygiaW5kaWNhdGVzIG90aGVyd2lzZS4gSSB3aWxsIGFzc3VtZSB0aGF0IHJhZGlvIGlzIHByZXNlbnQuXG4iKTsKLSAgICAgICAgICAgIHR2ZWUtPmhhc19yYWRpbyA9IDE7Ci0gICAgICAgIH0KKwlpZiAoaGFzUmFkaW9UdW5lcih0dW5lcjEpICYmICF0dmVlLT5oYXNfcmFkaW8pIHsKKwkJdHZlZXByb21faW5mbygiVGhlIGVlcHJvbSBzYXlzIG5vIHJhZGlvIGlzIHByZXNlbnQsIGJ1dCB0aGUgdHVuZXIgdHlwZVxuIik7CisJCXR2ZWVwcm9tX2luZm8oImluZGljYXRlcyBvdGhlcndpc2UuIEkgd2lsbCBhc3N1bWUgdGhhdCByYWRpbyBpcyBwcmVzZW50LlxuIik7CisJCXR2ZWUtPmhhc19yYWRpbyA9IDE7CisJfQogCiAJaWYgKHR1bmVyMSA8IHNpemVvZihoYXVwcGF1Z2VfdHVuZXIpL3NpemVvZihzdHJ1Y3QgSEFVUFBBVUdFX1RVTkVSKSkgewogCQl0dmVlLT50dW5lcl90eXBlID0gaGF1cHBhdWdlX3R1bmVyW3R1bmVyMV0uaWQ7CkBAIC01MTAsNDUgKzU3MCw1MyBAQAogCQkJdHZlZS0+dHVuZXJfZm9ybWF0cyB8PSBoYXVwcGF1Z2VfdHVuZXJfZm10W2ldLmlkOwogCQkJdF9mbXRfbmFtZTFbaisrXSA9IGhhdXBwYXVnZV90dW5lcl9mbXRbaV0ubmFtZTsKIAkJfQotICAgICAgICAgICAgICAgIGlmICh0X2Zvcm1hdDIgJiAoMSA8PCBpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdHZlZS0+dHVuZXIyX2Zvcm1hdHMgfD0gaGF1cHBhdWdlX3R1bmVyX2ZtdFtpXS5pZDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRfZm10X25hbWUyW2orK10gPSBoYXVwcGF1Z2VfdHVuZXJfZm10W2ldLm5hbWU7Ci0gICAgICAgICAgICAgICAgfQorCQlpZiAodF9mb3JtYXQyICYgKDEgPDwgaSkpIHsKKwkJCXR2ZWUtPnR1bmVyMl9mb3JtYXRzIHw9IGhhdXBwYXVnZV90dW5lcl9mbXRbaV0uaWQ7CisJCQl0X2ZtdF9uYW1lMltqKytdID0gaGF1cHBhdWdlX3R1bmVyX2ZtdFtpXS5uYW1lOworCQl9CiAJfQogCiAJdHZlZXByb21faW5mbygiSGF1cHBhdWdlIG1vZGVsICVkLCByZXYgJXMsIHNlcmlhbCMgJWRcbiIsCi0JCSAgIHR2ZWUtPm1vZGVsLCB0dmVlLT5yZXZfc3RyLCB0dmVlLT5zZXJpYWxfbnVtYmVyKTsKKwkJdHZlZS0+bW9kZWwsIHR2ZWUtPnJldl9zdHIsIHR2ZWUtPnNlcmlhbF9udW1iZXIpOwogCXR2ZWVwcm9tX2luZm8oInR1bmVyIG1vZGVsIGlzICVzIChpZHggJWQsIHR5cGUgJWQpXG4iLAotCQkgICB0X25hbWUxLCB0dW5lcjEsIHR2ZWUtPnR1bmVyX3R5cGUpOworCQl0X25hbWUxLCB0dW5lcjEsIHR2ZWUtPnR1bmVyX3R5cGUpOwogCXR2ZWVwcm9tX2luZm8oIlRWIHN0YW5kYXJkcyVzJXMlcyVzJXMlcyVzJXMgKGVlcHJvbSAweCUwMngpXG4iLAotCQkgICB0X2ZtdF9uYW1lMVswXSwgdF9mbXRfbmFtZTFbMV0sIHRfZm10X25hbWUxWzJdLCB0X2ZtdF9uYW1lMVszXSwKLQkJICAgdF9mbXRfbmFtZTFbNF0sIHRfZm10X25hbWUxWzVdLCB0X2ZtdF9uYW1lMVs2XSwgdF9mbXRfbmFtZTFbN10sCi0gICAgICAgICAgICAgICAgICAgdF9mb3JtYXQxKTsKLSAgICAgICAgaWYgKHR1bmVyMikgewotICAgICAgICAgICAgICAgIHR2ZWVwcm9tX2luZm8oInNlY29uZCB0dW5lciBtb2RlbCBpcyAlcyAoaWR4ICVkLCB0eXBlICVkKVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHRfbmFtZTIsIHR1bmVyMiwgdHZlZS0+dHVuZXIyX3R5cGUpOwotICAgICAgICB9Ci0gICAgICAgIGlmICh0X2Zvcm1hdDIpIHsKLSAgICAgICAgICAgICAgICB0dmVlcHJvbV9pbmZvKCJUViBzdGFuZGFyZHMlcyVzJXMlcyVzJXMlcyVzIChlZXByb20gMHglMDJ4KVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHRfZm10X25hbWUyWzBdLCB0X2ZtdF9uYW1lMlsxXSwgdF9mbXRfbmFtZTJbMl0sIHRfZm10X25hbWUyWzNdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdF9mbXRfbmFtZTJbNF0sIHRfZm10X25hbWUyWzVdLCB0X2ZtdF9uYW1lMls2XSwgdF9mbXRfbmFtZTJbN10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB0X2Zvcm1hdDIpOwotICAgICAgICB9Ci0JdHZlZXByb21faW5mbygiYXVkaW8gcHJvY2Vzc29yIGlzICVzIChpZHggJWQpXG4iLAotCQkgICBTVFJNKGF1ZGlvSUMsIHR2ZWUtPmF1ZGlvX3Byb2Nlc3NvciksCi0JCSAgIHR2ZWUtPmF1ZGlvX3Byb2Nlc3Nvcik7Ci0gICAgICAgIGlmICh0dmVlLT5kZWNvZGVyX3Byb2Nlc3NvcikgewotICAgICAgICAgICAgICAgIHR2ZWVwcm9tX2luZm8oImRlY29kZXIgcHJvY2Vzc29yIGlzICVzIChpZHggJWQpXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgU1RSTShkZWNvZGVySUMsIHR2ZWUtPmRlY29kZXJfcHJvY2Vzc29yKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHR2ZWUtPmRlY29kZXJfcHJvY2Vzc29yKTsKLSAgICAgICAgfQotICAgICAgICBpZiAodHZlZS0+aGFzX2lyID09IDIpCi0gICAgICAgICAgICAgICAgdHZlZXByb21faW5mbygiaGFzICVzcmFkaW9cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR2ZWUtPmhhc19yYWRpbyA/ICIiIDogIm5vICIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdHZlZXByb21faW5mbygiaGFzICVzcmFkaW8sIGhhcyAlc0lSIHJlbW90ZVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHZlZS0+aGFzX3JhZGlvID8gIiIgOiAibm8gIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHZlZS0+aGFzX2lyID8gIiIgOiAibm8gIik7CisJCXRfZm10X25hbWUxWzBdLCB0X2ZtdF9uYW1lMVsxXSwgdF9mbXRfbmFtZTFbMl0sIHRfZm10X25hbWUxWzNdLAorCQl0X2ZtdF9uYW1lMVs0XSwgdF9mbXRfbmFtZTFbNV0sIHRfZm10X25hbWUxWzZdLCB0X2ZtdF9uYW1lMVs3XSwKKwkJdF9mb3JtYXQxKTsKKwlpZiAodHVuZXIyKSB7CisJCXR2ZWVwcm9tX2luZm8oInNlY29uZCB0dW5lciBtb2RlbCBpcyAlcyAoaWR4ICVkLCB0eXBlICVkKVxuIiwKKwkJCQkJdF9uYW1lMiwgdHVuZXIyLCB0dmVlLT50dW5lcjJfdHlwZSk7CisJfQorCWlmICh0X2Zvcm1hdDIpIHsKKwkJdHZlZXByb21faW5mbygiVFYgc3RhbmRhcmRzJXMlcyVzJXMlcyVzJXMlcyAoZWVwcm9tIDB4JTAyeClcbiIsCisJCQl0X2ZtdF9uYW1lMlswXSwgdF9mbXRfbmFtZTJbMV0sIHRfZm10X25hbWUyWzJdLCB0X2ZtdF9uYW1lMlszXSwKKwkJCXRfZm10X25hbWUyWzRdLCB0X2ZtdF9uYW1lMls1XSwgdF9mbXRfbmFtZTJbNl0sIHRfZm10X25hbWUyWzddLAorCQkJdF9mb3JtYXQyKTsKKwl9CisJaWYgKGF1ZGlvaWM8MCkgeworCQl0dmVlcHJvbV9pbmZvKCJhdWRpbyBwcm9jZXNzb3IgaXMgdW5rbm93biAobm8gaWR4KVxuIik7CisJCXR2ZWUtPmF1ZGlvX3Byb2Nlc3Nvcj1BVURJT19DSElQX1VOS05PV047CisJfSBlbHNlIHsKKwkJaWYgKGF1ZGlvaWMgPCBzaXplb2YoYXVkaW9JQykvc2l6ZW9mKCphdWRpb0lDKSkKKwkJCXR2ZWVwcm9tX2luZm8oImF1ZGlvIHByb2Nlc3NvciBpcyAlcyAoaWR4ICVkKVxuIiwKKwkJCQkJYXVkaW9JQ1thdWRpb2ljXS5uYW1lLGF1ZGlvaWMpOworCQllbHNlCisJCQl0dmVlcHJvbV9pbmZvKCJhdWRpbyBwcm9jZXNzb3IgaXMgdW5rbm93biAoaWR4ICVkKVxuIiwKKwkJCQkJCQkJYXVkaW9pYyk7CisJfQorCWlmICh0dmVlLT5kZWNvZGVyX3Byb2Nlc3NvcikgeworCQl0dmVlcHJvbV9pbmZvKCJkZWNvZGVyIHByb2Nlc3NvciBpcyAlcyAoaWR4ICVkKVxuIiwKKwkJCVNUUk0oZGVjb2RlcklDLCB0dmVlLT5kZWNvZGVyX3Byb2Nlc3NvciksCisJCQl0dmVlLT5kZWNvZGVyX3Byb2Nlc3Nvcik7CisJfQorCWlmICh0dmVlLT5oYXNfaXIgPT0gMikKKwkJdHZlZXByb21faW5mbygiaGFzICVzcmFkaW9cbiIsCisJCQkJdHZlZS0+aGFzX3JhZGlvID8gIiIgOiAibm8gIik7CisJZWxzZQorCQl0dmVlcHJvbV9pbmZvKCJoYXMgJXNyYWRpbywgaGFzICVzSVIgcmVtb3RlXG4iLAorCQkJCXR2ZWUtPmhhc19yYWRpbyA/ICIiIDogIm5vICIsCisJCQkJdHZlZS0+aGFzX2lyID8gIiIgOiAibm8gIik7CiB9CiBFWFBPUlRfU1lNQk9MKHR2ZWVwcm9tX2hhdXBwYXVnZV9hbmFsb2cpOwogCkBAIC01NjksMTggKzYzNywxOCBAQAogCQl0dmVlcHJvbV93YXJuKCJpMmMgZWVwcm9tIHJlYWQgZXJyb3IgKGVycj0lZClcbiIsIGVycik7CiAJCXJldHVybiAtMTsKIAl9Ci0gICAgICAgIGlmIChkZWJ1ZykgewotICAgICAgICAgICAgICAgIGludCBpOworCWlmIChkZWJ1ZykgeworCQlpbnQgaTsKIAotICAgICAgICAgICAgICAgIHR2ZWVwcm9tX2luZm8oImZ1bGwgMjU2LWJ5dGUgZWVwcm9tIGR1bXA6XG4iKTsKLSAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgwID09IChpICUgMTYpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dmVlcHJvbV9pbmZvKCIlMDJ4OiIsIGkpOwotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCIgJTAyeCIsIGVlZGF0YVtpXSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoMTUgPT0gKGkgJSAxNikpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiXG4iKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0KKwkJdHZlZXByb21faW5mbygiZnVsbCAyNTYtYnl0ZSBlZXByb20gZHVtcDpcbiIpOworCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJCWlmICgwID09IChpICUgMTYpKQorCQkJCXR2ZWVwcm9tX2luZm8oIiUwMng6IiwgaSk7CisJCQlwcmludGsoIiAlMDJ4IiwgZWVkYXRhW2ldKTsKKwkJCWlmICgxNSA9PSAoaSAlIDE2KSkKKwkJCQlwcmludGsoIlxuIik7CisJCX0KKwl9CiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKHR2ZWVwcm9tX3JlYWQpOwpAQCAtNTkwLDEwICs2NTgsNiBAQAogLyogcnVuLCBqdXN0IGNhbGwgdGhlIGV4cG9ydGVkIHR2ZWVwcm9tXyogZGlyZWN0bHksIHRoZXJlIGlzIG5vIHBvaW50IGluICAgKi8KIC8qIHVzaW5nIHRoZSBpbmRpcmVjdCB3YXkgdmlhIGkyY19kcml2ZXItPmNvbW1hbmQoKSAgICAgICAgICAgICAgICAgICAgICAgICovCiAKLSNpZm5kZWYgSTJDX0RSSVZFUklEX1RWRUVQUk9NCi0jIGRlZmluZSBJMkNfRFJJVkVSSURfVFZFRVBST00gSTJDX0RSSVZFUklEX0VYUDIKLSNlbmRpZgotCiBzdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0gewogCTB4YTAgPj4gMSwKIAlJMkNfQ0xJRU5UX0VORCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZtaXhlci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90dm1peGVyLmMKaW5kZXggZDg2ZTA4ZS4uODMxOGJkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90dm1peGVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90dm1peGVyLmMKQEAgLTc5LDcgKzc5LDcgQEAKIHsKIAlzdHJ1Y3QgdmlkZW9fYXVkaW8gdmE7CiAJaW50IGxlZnQscmlnaHQscmV0LHZhbCA9IDA7Ci0gICAgICAgIHN0cnVjdCBUVk1JWEVSICptaXggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IFRWTUlYRVIgKm1peCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gbWl4LT5kZXY7CiAJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CiAJaW50IF9fdXNlciAqcCA9IGFyZ3A7CkBAIC04NywyNSArODcsMjUgQEAKIAlpZiAoTlVMTCA9PSBjbGllbnQpCiAJCXJldHVybiAtRU5PREVWOwogCi0gICAgICAgIGlmIChjbWQgPT0gU09VTkRfTUlYRVJfSU5GTykgewotICAgICAgICAgICAgICAgIG1peGVyX2luZm8gaW5mbzsKLSAgICAgICAgICAgICAgICBzdHJsY3B5KGluZm8uaWQsICJ0diBjYXJkIiwgc2l6ZW9mKGluZm8uaWQpKTsKLSAgICAgICAgICAgICAgICBzdHJsY3B5KGluZm8ubmFtZSwgY2xpZW50LT5uYW1lLCBzaXplb2YoaW5mby5uYW1lKSk7Ci0gICAgICAgICAgICAgICAgaW5mby5tb2RpZnlfY291bnRlciA9IDQyIC8qIEZJWE1FICovOwotICAgICAgICAgICAgICAgIGlmIChjb3B5X3RvX3VzZXIoYXJncCwgJmluZm8sIHNpemVvZihpbmZvKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgICAgICBpZiAoY21kID09IFNPVU5EX09MRF9NSVhFUl9JTkZPKSB7Ci0gICAgICAgICAgICAgICAgX29sZF9taXhlcl9pbmZvIGluZm87Ci0gICAgICAgICAgICAgICAgc3RybGNweShpbmZvLmlkLCAidHYgY2FyZCIsIHNpemVvZihpbmZvLmlkKSk7Ci0gICAgICAgICAgICAgICAgc3RybGNweShpbmZvLm5hbWUsIGNsaWVudC0+bmFtZSwgc2l6ZW9mKGluZm8ubmFtZSkpOwotICAgICAgICAgICAgICAgIGlmIChjb3B5X3RvX3VzZXIoYXJncCwgJmluZm8sIHNpemVvZihpbmZvKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgICAgICBpZiAoY21kID09IE9TU19HRVRWRVJTSU9OKQotICAgICAgICAgICAgICAgIHJldHVybiBwdXRfdXNlcihTT1VORF9WRVJTSU9OLCBwKTsKKwlpZiAoY21kID09IFNPVU5EX01JWEVSX0lORk8pIHsKKwkJbWl4ZXJfaW5mbyBpbmZvOworCQlzdHJsY3B5KGluZm8uaWQsICJ0diBjYXJkIiwgc2l6ZW9mKGluZm8uaWQpKTsKKwkJc3RybGNweShpbmZvLm5hbWUsIGNsaWVudC0+bmFtZSwgc2l6ZW9mKGluZm8ubmFtZSkpOworCQlpbmZvLm1vZGlmeV9jb3VudGVyID0gNDIgLyogRklYTUUgKi87CisJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJmluZm8sIHNpemVvZihpbmZvKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJcmV0dXJuIDA7CisJfQorCWlmIChjbWQgPT0gU09VTkRfT0xEX01JWEVSX0lORk8pIHsKKwkJX29sZF9taXhlcl9pbmZvIGluZm87CisJCXN0cmxjcHkoaW5mby5pZCwgInR2IGNhcmQiLCBzaXplb2YoaW5mby5pZCkpOworCQlzdHJsY3B5KGluZm8ubmFtZSwgY2xpZW50LT5uYW1lLCBzaXplb2YoaW5mby5uYW1lKSk7CisJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJmluZm8sIHNpemVvZihpbmZvKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJcmV0dXJuIDA7CisJfQorCWlmIChjbWQgPT0gT1NTX0dFVFZFUlNJT04pCisJCXJldHVybiBwdXRfdXNlcihTT1VORF9WRVJTSU9OLCBwKTsKIAogCWlmIChfU0lPQ19ESVIoY21kKSAmIF9TSU9DX1dSSVRFKQogCQlpZiAoZ2V0X3VzZXIodmFsLCBwKSkKQEAgLTE4MSw4ICsxODEsOCBAQAogCiBzdGF0aWMgaW50IHR2bWl4ZXJfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLSAgICAgICAgaW50IGksIG1pbm9yID0gaW1pbm9yKGlub2RlKTsKLSAgICAgICAgc3RydWN0IFRWTUlYRVIgKm1peCA9IE5VTEw7CisJaW50IGksIG1pbm9yID0gaW1pbm9yKGlub2RlKTsKKwlzdHJ1Y3QgVFZNSVhFUiAqbWl4ID0gTlVMTDsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gTlVMTDsKIAogCWZvciAoaSA9IDA7IGkgPCBERVZfTUFYOyBpKyspIHsKQEAgLTIwNCw3ICsyMDQsNyBAQAogI2VuZGlmCiAJaWYgKGNsaWVudC0+YWRhcHRlci0+b3duZXIpCiAJCXRyeV9tb2R1bGVfZ2V0KGNsaWVudC0+YWRhcHRlci0+b3duZXIpOwotICAgICAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB0dm1peGVyX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCkBAIC0yMzEsMTUgKzIzMSwxNSBAQAogCS5vd25lciAgICAgICAgICAgPSBUSElTX01PRFVMRSwKICNlbmRpZgogCS5uYW1lICAgICAgICAgICAgPSAidHYgY2FyZCBtaXhlciBkcml2ZXIiLAotICAgICAgICAuaWQgICAgICAgICAgICAgID0gSTJDX0RSSVZFUklEX1RWTUlYRVIsCisJLmlkICAgICAgICAgICAgICA9IEkyQ19EUklWRVJJRF9UVk1JWEVSLAogI2lmZGVmIEkyQ19ERl9EVU1NWQogCS5mbGFncyAgICAgICAgICAgPSBJMkNfREZfRFVNTVksCiAjZWxzZQogCS5mbGFncyAgICAgICAgICAgPSBJMkNfREZfTk9USUZZLAotICAgICAgICAuZGV0YWNoX2FkYXB0ZXIgID0gdHZtaXhlcl9hZGFwdGVycywKKwkuZGV0YWNoX2FkYXB0ZXIgID0gdHZtaXhlcl9hZGFwdGVycywKICNlbmRpZgotICAgICAgICAuYXR0YWNoX2FkYXB0ZXIgID0gdHZtaXhlcl9hZGFwdGVycywKLSAgICAgICAgLmRldGFjaF9jbGllbnQgICA9IHR2bWl4ZXJfY2xpZW50cywKKwkuYXR0YWNoX2FkYXB0ZXIgID0gdHZtaXhlcl9hZGFwdGVycywKKwkuZGV0YWNoX2NsaWVudCAgID0gdHZtaXhlcl9jbGllbnRzLAogfTsKIAogc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHZtaXhlcl9mb3BzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90dnA1MTUwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2cDUxNTAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWU2ZDQ0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90dnA1MTUwLmMKQEAgLTAsMCArMSw4MjkgQEAKKy8qCisgKiB0dnA1MTUwIC0gVGV4YXMgSW5zdHJ1bWVudHMgVFZQNTE1MEEoTSkgdmlkZW8gZGVjb2RlciBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIChtY2hlaGFiQGJydHVyYm8uY29tLmJyKQorICogVGhpcyBjb2RlIGlzIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb19kZWNvZGVyLmg+CisKKyNpbmNsdWRlICJ0dnA1MTUwX3JlZy5oIgorCitNT0RVTEVfREVTQ1JJUFRJT04oIlRleGFzIEluc3RydW1lbnRzIFRWUDUxNTBBIHZpZGVvIGRlY29kZXIgZHJpdmVyIik7CS8qIHN0YW5kYXJkIGkyYyBpbnNtb2Qgb3B0aW9ucyAqLworTU9EVUxFX0FVVEhPUigiTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7CisJMHhiOCA+PiAxLAorCTB4YmEgPj4gMSwKKwlJMkNfQ0xJRU5UX0VORAorfTsKKworSTJDX0NMSUVOVF9JTlNNT0Q7CisKK3N0YXRpYyBpbnQgZGVidWcgPSAwOworbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsICgwLTEpIik7CisKKyNkZWZpbmUgZHByaW50ayhudW0sIGZvcm1hdCwgYXJncy4uLikgXAorCWRvIHsgXAorCQlpZiAoZGVidWcgPj0gbnVtKSBcCisJCQlwcmludGsoZm9ybWF0ICwgIyNhcmdzKTsgXAorCX0gd2hpbGUgKDApCisKKy8qIHN1cHBvcnRlZCBjb250cm9scyAqLworc3RhdGljIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCB0dnA1MTUwX3FjdHJsW10gPSB7CisJeworCSAuaWQgPSBWNEwyX0NJRF9CUklHSFRORVNTLAorCSAudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJIC5uYW1lID0gIkJyaWdodG5lc3MiLAorCSAubWluaW11bSA9IDAsCisJIC5tYXhpbXVtID0gMjU1LAorCSAuc3RlcCA9IDEsCisJIC5kZWZhdWx0X3ZhbHVlID0gMCwKKwkgLmZsYWdzID0gMCwKKwkgfSwgeworCSAgICAgLmlkID0gVjRMMl9DSURfQ09OVFJBU1QsCisJICAgICAudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJICAgICAubmFtZSA9ICJDb250cmFzdCIsCisJICAgICAubWluaW11bSA9IDAsCisJICAgICAubWF4aW11bSA9IDI1NSwKKwkgICAgIC5zdGVwID0gMHgxLAorCSAgICAgLmRlZmF1bHRfdmFsdWUgPSAweDEwLAorCSAgICAgLmZsYWdzID0gMCwKKwkgICAgIH0sIHsKKwkJIC5pZCA9IFY0TDJfQ0lEX1NBVFVSQVRJT04sCisJCSAudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCSAubmFtZSA9ICJTYXR1cmF0aW9uIiwKKwkJIC5taW5pbXVtID0gMCwKKwkJIC5tYXhpbXVtID0gMjU1LAorCQkgLnN0ZXAgPSAweDEsCisJCSAuZGVmYXVsdF92YWx1ZSA9IDB4MTAsCisJCSAuZmxhZ3MgPSAwLAorCQkgfSwgeworCQkgICAgIC5pZCA9IFY0TDJfQ0lEX0hVRSwKKwkJICAgICAudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCSAgICAgLm5hbWUgPSAiSHVlIiwKKwkJICAgICAubWluaW11bSA9IC0xMjgsCisJCSAgICAgLm1heGltdW0gPSAxMjcsCisJCSAgICAgLnN0ZXAgPSAweDEsCisJCSAgICAgLmRlZmF1bHRfdmFsdWUgPSAweDEwLAorCQkgICAgIC5mbGFncyA9IDAsCisJCSAgICAgfQorfTsKKworc3RydWN0IHR2cDUxNTAgeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CisKKwlpbnQgbm9ybTsKKwlpbnQgaW5wdXQ7CisJaW50IGVuYWJsZTsKKwlpbnQgYnJpZ2h0OworCWludCBjb250cmFzdDsKKwlpbnQgaHVlOworCWludCBzYXQ7Cit9OworCitzdGF0aWMgaW5saW5lIGludCB0dnA1MTUwX3JlYWQoc3RydWN0IGkyY19jbGllbnQgKmMsIHVuc2lnbmVkIGNoYXIgYWRkcikKK3sKKwl1bnNpZ25lZCBjaGFyIGJ1ZmZlclsxXTsKKwlpbnQgcmM7CisKKwlidWZmZXJbMF0gPSBhZGRyOworCWlmICgxICE9IChyYyA9IGkyY19tYXN0ZXJfc2VuZChjLCBidWZmZXIsIDEpKSkKKwkJZHByaW50aygwLCAiaTJjIGkvbyBlcnJvcjogcmMgPT0gJWQgKHNob3VsZCBiZSAxKVxuIiwgcmMpOworCisJbXNsZWVwKDEwKTsKKworCWlmICgxICE9IChyYyA9IGkyY19tYXN0ZXJfcmVjdihjLCBidWZmZXIsIDEpKSkKKwkJZHByaW50aygwLCAiaTJjIGkvbyBlcnJvcjogcmMgPT0gJWQgKHNob3VsZCBiZSAxKVxuIiwgcmMpOworCisJcmV0dXJuIChidWZmZXJbMF0pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdHZwNTE1MF93cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqYywgdW5zaWduZWQgY2hhciBhZGRyLAorCQkJCSB1bnNpZ25lZCBjaGFyIHZhbHVlKQoreworCXVuc2lnbmVkIGNoYXIgYnVmZmVyWzJdOworCWludCByYzsKKy8qCXN0cnVjdCB0dnA1MTUwICpjb3JlID0gaTJjX2dldF9jbGllbnRkYXRhKGMpOyAqLworCisJYnVmZmVyWzBdID0gYWRkcjsKKwlidWZmZXJbMV0gPSB2YWx1ZTsKKwlkcHJpbnRrKDEsICJ0dnA1MTUwOiB3cml0aW5nIDB4JTAyeCAweCUwMnhcbiIsIGJ1ZmZlclswXSwgYnVmZmVyWzFdKTsKKwlpZiAoMiAhPSAocmMgPSBpMmNfbWFzdGVyX3NlbmQoYywgYnVmZmVyLCAyKSkpCisJCWRwcmludGsoMCwgImkyYyBpL28gZXJyb3I6IHJjID09ICVkIChzaG91bGQgYmUgMilcbiIsIHJjKTsKK30KKworc3RhdGljIHZvaWQgZHVtcF9yZWcoc3RydWN0IGkyY19jbGllbnQgKmMpCit7CisJcHJpbnRrKCJ0dnA1MTUwOiBWaWRlbyBpbnB1dCBzb3VyY2Ugc2VsZWN0aW9uICMxID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9WRF9JTl9TUkNfU0VMXzEpKTsKKwlwcmludGsoInR2cDUxNTA6IEFuYWxvZyBjaGFubmVsIGNvbnRyb2xzID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9BTkFMX0NITF9DVEwpKTsKKwlwcmludGsoInR2cDUxNTA6IE9wZXJhdGlvbiBtb2RlIGNvbnRyb2xzID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9PUF9NT0RFX0NUTCkpOworCXByaW50aygidHZwNTE1MDogTWlzY2VsbGFuZW91cyBjb250cm9scyA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfTUlTQ19DVEwpKTsKKwlwcmludGsoInR2cDUxNTA6IEF1dG9zd2l0Y2ggbWFzazogVFZQNTE1MEEgLyBUVlA1MTUwQU0gPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0FVVE9TV19NU0spKTsKKwlwcmludGsoInR2cDUxNTA6IENvbG9yIGtpbGxlciB0aHJlc2hvbGQgY29udHJvbCA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfQ09MT1JfS0lMX1RIU0hfQ1RMKSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBMdW1pbmFuY2UgcHJvY2Vzc2luZyBjb250cm9sICMxID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9MVU1BX1BST0NfQ1RMXzEpKTsKKwlwcmludGsoInR2cDUxNTA6IEx1bWluYW5jZSBwcm9jZXNzaW5nIGNvbnRyb2wgIzIgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0xVTUFfUFJPQ19DVExfMikpOworCXByaW50aygidHZwNTE1MDogQnJpZ2h0bmVzcyBjb250cm9sID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9CUklHSFRfQ1RMKSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBDb2xvciBzYXR1cmF0aW9uIGNvbnRyb2wgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1NBVFVSQVRJT05fQ1RMKSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBIdWUgY29udHJvbCA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfSFVFX0NUTCkpOworCXByaW50aygidHZwNTE1MDogQ29udHJhc3QgY29udHJvbCA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfQ09OVFJBU1RfQ1RMKSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBPdXRwdXRzIGFuZCBkYXRhIHJhdGVzIHNlbGVjdCA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfREFUQV9SQVRFX1NFTCkpOworCXByaW50aygidHZwNTE1MDogTHVtaW5hbmNlIHByb2Nlc3NpbmcgY29udHJvbCAjMyA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfTFVNQV9QUk9DX0NUTF8zKSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBDb25maWd1cmF0aW9uIHNoYXJlZCBwaW5zID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9DT05GX1NIQVJFRF9QSU4pKTsKKwlwcmludGsoInR2cDUxNTA6IEFjdGl2ZSB2aWRlbyBjcm9wcGluZyBzdGFydCBNU0IgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0FDVF9WRF9DUk9QX1NUX01TQikpOworCXByaW50aygidHZwNTE1MDogQWN0aXZlIHZpZGVvIGNyb3BwaW5nIHN0YXJ0IExTQiA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfQUNUX1ZEX0NST1BfU1RfTFNCKSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBBY3RpdmUgdmlkZW8gY3JvcHBpbmcgc3RvcCBNU0IgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0FDVF9WRF9DUk9QX1NUUF9NU0IpKTsKKwlwcmludGsoInR2cDUxNTA6IEFjdGl2ZSB2aWRlbyBjcm9wcGluZyBzdG9wIExTQiA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfQUNUX1ZEX0NST1BfU1RQX0xTQikpOworCXByaW50aygidHZwNTE1MDogR2VubG9jay9SVEMgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0dFTkxPQ0spKTsKKwlwcmludGsoInR2cDUxNTA6IEhvcml6b250YWwgc3luYyBzdGFydCA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfSE9SSVpfU1lOQ19TVEFSVCkpOworCXByaW50aygidHZwNTE1MDogVmVydGljYWwgYmxhbmtpbmcgc3RhcnQgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1ZFUlRfQkxBTktJTkdfU1RBUlQpKTsKKwlwcmludGsoInR2cDUxNTA6IFZlcnRpY2FsIGJsYW5raW5nIHN0b3AgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1ZFUlRfQkxBTktJTkdfU1RPUCkpOworCXByaW50aygidHZwNTE1MDogQ2hyb21pbmFuY2UgcHJvY2Vzc2luZyBjb250cm9sICMxID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9DSFJPTUFfUFJPQ19DVExfMSkpOworCXByaW50aygidHZwNTE1MDogQ2hyb21pbmFuY2UgcHJvY2Vzc2luZyBjb250cm9sICMyID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9DSFJPTUFfUFJPQ19DVExfMikpOworCXByaW50aygidHZwNTE1MDogSW50ZXJydXB0IHJlc2V0IHJlZ2lzdGVyIEIgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0lOVF9SRVNFVF9SRUdfQikpOworCXByaW50aygidHZwNTE1MDogSW50ZXJydXB0IGVuYWJsZSByZWdpc3RlciBCID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9JTlRfRU5BQkxFX1JFR19CKSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBJbnRlcnJ1cHQgY29uZmlndXJhdGlvbiByZWdpc3RlciBCID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9JTlRUX0NPTkZJR19SRUdfQikpOworCXByaW50aygidHZwNTE1MDogVmlkZW8gc3RhbmRhcmQgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1ZJREVPX1NURCkpOworCXByaW50aygidHZwNTE1MDogQ2IgZ2FpbiBmYWN0b3IgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0NCX0dBSU5fRkFDVCkpOworCXByaW50aygidHZwNTE1MDogQ3IgZ2FpbiBmYWN0b3IgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0NSX0dBSU5fRkFDVE9SKSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBNYWNyb3Zpc2lvbiBvbiBjb3VudGVyID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9NQUNST1ZJU0lPTl9PTl9DVFIpKTsKKwlwcmludGsoInR2cDUxNTA6IE1hY3JvdmlzaW9uIG9mZiBjb3VudGVyID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9NQUNST1ZJU0lPTl9PRkZfQ1RSKSk7CisJcHJpbnRrKCJ0dnA1MTUwOiByZXZpc2lvbiBzZWxlY3QgKFRWUDUxNTBBTTEgb25seSkgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1JFVl9TRUxFQ1QpKTsKKwlwcmludGsoInR2cDUxNTA6IE1TQiBvZiBkZXZpY2UgSUQgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX01TQl9ERVZfSUQpKTsKKwlwcmludGsoInR2cDUxNTA6IExTQiBvZiBkZXZpY2UgSUQgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0xTQl9ERVZfSUQpKTsKKwlwcmludGsoInR2cDUxNTA6IFJPTSBtYWpvciB2ZXJzaW9uID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9ST01fTUFKT1JfVkVSKSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBST00gbWlub3IgdmVyc2lvbiA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfUk9NX01JTk9SX1ZFUikpOworCXByaW50aygidHZwNTE1MDogVmVydGljYWwgbGluZSBjb3VudCBNU0IgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1ZFUlRfTE5fQ09VTlRfTVNCKSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBWZXJ0aWNhbCBsaW5lIGNvdW50IExTQiA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfVkVSVF9MTl9DT1VOVF9MU0IpKTsKKwlwcmludGsoInR2cDUxNTA6IEludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgQiA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfSU5UX1NUQVRVU19SRUdfQikpOworCXByaW50aygidHZwNTE1MDogSW50ZXJydXB0IGFjdGl2ZSByZWdpc3RlciBCID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9JTlRfQUNUSVZFX1JFR19CKSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBTdGF0dXMgcmVnaXN0ZXIgIzEgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1NUQVRVU19SRUdfMSkpOworCXByaW50aygidHZwNTE1MDogU3RhdHVzIHJlZ2lzdGVyICMyID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9TVEFUVVNfUkVHXzIpKTsKKwlwcmludGsoInR2cDUxNTA6IFN0YXR1cyByZWdpc3RlciAjMyA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfU1RBVFVTX1JFR18zKSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBTdGF0dXMgcmVnaXN0ZXIgIzQgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1NUQVRVU19SRUdfNCkpOworCXByaW50aygidHZwNTE1MDogU3RhdHVzIHJlZ2lzdGVyICM1ID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9TVEFUVVNfUkVHXzUpKTsKKwlwcmludGsoInR2cDUxNTA6IENsb3NlZCBjYXB0aW9uIGRhdGEgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9DQ19EQVRBX1JFRzEpKTsKKwlwcmludGsoInR2cDUxNTA6IENsb3NlZCBjYXB0aW9uIGRhdGEgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9DQ19EQVRBX1JFRzIpKTsKKwlwcmludGsoInR2cDUxNTA6IENsb3NlZCBjYXB0aW9uIGRhdGEgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9DQ19EQVRBX1JFRzMpKTsKKwlwcmludGsoInR2cDUxNTA6IENsb3NlZCBjYXB0aW9uIGRhdGEgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9DQ19EQVRBX1JFRzQpKTsKKwlwcmludGsoInR2cDUxNTA6IFdTUyBkYXRhIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfV1NTX0RBVEFfUkVHMSkpOworCXByaW50aygidHZwNTE1MDogV1NTIGRhdGEgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9XU1NfREFUQV9SRUcyKSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBXU1MgZGF0YSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1dTU19EQVRBX1JFRzMpKTsKKwlwcmludGsoInR2cDUxNTA6IFdTUyBkYXRhIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfV1NTX0RBVEFfUkVHNCkpOworCXByaW50aygidHZwNTE1MDogV1NTIGRhdGEgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9XU1NfREFUQV9SRUc1KSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBXU1MgZGF0YSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1dTU19EQVRBX1JFRzYpKTsKKwlwcmludGsoInR2cDUxNTA6IFZQUyBkYXRhIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfVlBTX0RBVEFfUkVHMSkpOworCXByaW50aygidHZwNTE1MDogVlBTIGRhdGEgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9WUFNfREFUQV9SRUcyKSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBWUFMgZGF0YSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1ZQU19EQVRBX1JFRzMpKTsKKwlwcmludGsoInR2cDUxNTA6IFZQUyBkYXRhIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfVlBTX0RBVEFfUkVHNCkpOworCXByaW50aygidHZwNTE1MDogVlBTIGRhdGEgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9WUFNfREFUQV9SRUc1KSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBWUFMgZGF0YSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1ZQU19EQVRBX1JFRzYpKTsKKwlwcmludGsoInR2cDUxNTA6IFZQUyBkYXRhIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfVlBTX0RBVEFfUkVHNykpOworCXByaW50aygidHZwNTE1MDogVlBTIGRhdGEgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9WUFNfREFUQV9SRUc4KSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBWUFMgZGF0YSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1ZQU19EQVRBX1JFRzkpKTsKKwlwcmludGsoInR2cDUxNTA6IFZQUyBkYXRhIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfVlBTX0RBVEFfUkVHMTApKTsKKwlwcmludGsoInR2cDUxNTA6IFZQUyBkYXRhIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfVlBTX0RBVEFfUkVHMTEpKTsKKwlwcmludGsoInR2cDUxNTA6IFZQUyBkYXRhIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfVlBTX0RBVEFfUkVHMTIpKTsKKwlwcmludGsoInR2cDUxNTA6IFZQUyBkYXRhIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfVlBTX0RBVEFfUkVHMTMpKTsKKwlwcmludGsoInR2cDUxNTA6IFZJVEMgZGF0YSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1ZJVENfREFUQV9SRUcxKSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBWSVRDIGRhdGEgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9WSVRDX0RBVEFfUkVHMikpOworCXByaW50aygidHZwNTE1MDogVklUQyBkYXRhIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfVklUQ19EQVRBX1JFRzMpKTsKKwlwcmludGsoInR2cDUxNTA6IFZJVEMgZGF0YSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1ZJVENfREFUQV9SRUc0KSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBWSVRDIGRhdGEgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9WSVRDX0RBVEFfUkVHNSkpOworCXByaW50aygidHZwNTE1MDogVklUQyBkYXRhIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfVklUQ19EQVRBX1JFRzYpKTsKKwlwcmludGsoInR2cDUxNTA6IFZJVEMgZGF0YSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1ZJVENfREFUQV9SRUc3KSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBWSVRDIGRhdGEgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9WSVRDX0RBVEFfUkVHOCkpOworCXByaW50aygidHZwNTE1MDogVklUQyBkYXRhIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfVklUQ19EQVRBX1JFRzkpKTsKKwlwcmludGsoInR2cDUxNTA6IFZCSSBGSUZPIHJlYWQgZGF0YSA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfVkJJX0ZJRk9fUkVBRF9EQVRBKSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBUZWxldGV4dCBmaWx0ZXIgMSA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfVEVMRVRFWFRfRklMXzFfMSkpOworCXByaW50aygidHZwNTE1MDogVGVsZXRleHQgZmlsdGVyIDEgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1RFTEVURVhUX0ZJTF8xXzIpKTsKKwlwcmludGsoInR2cDUxNTA6IFRlbGV0ZXh0IGZpbHRlciAxID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9URUxFVEVYVF9GSUxfMV8zKSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBUZWxldGV4dCBmaWx0ZXIgMSA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfVEVMRVRFWFRfRklMXzFfNCkpOworCXByaW50aygidHZwNTE1MDogVGVsZXRleHQgZmlsdGVyIDEgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1RFTEVURVhUX0ZJTF8xXzUpKTsKKwlwcmludGsoInR2cDUxNTA6IFRlbGV0ZXh0IGZpbHRlciAyID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9URUxFVEVYVF9GSUxfMl8xKSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBUZWxldGV4dCBmaWx0ZXIgMiA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfVEVMRVRFWFRfRklMXzJfMikpOworCXByaW50aygidHZwNTE1MDogVGVsZXRleHQgZmlsdGVyIDIgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1RFTEVURVhUX0ZJTF8yXzMpKTsKKwlwcmludGsoInR2cDUxNTA6IFRlbGV0ZXh0IGZpbHRlciAyID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9URUxFVEVYVF9GSUxfMl80KSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBUZWxldGV4dCBmaWx0ZXIgMiA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfVEVMRVRFWFRfRklMXzJfNSkpOworCXByaW50aygidHZwNTE1MDogVGVsZXRleHQgZmlsdGVyIGVuYWJsZSA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfVEVMRVRFWFRfRklMX0VOQSkpOworCXByaW50aygidHZwNTE1MDogSW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciBBID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9JTlRfU1RBVFVTX1JFR19BKSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBJbnRlcnJ1cHQgZW5hYmxlIHJlZ2lzdGVyIEEgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0lOVF9FTkFCTEVfUkVHX0EpKTsKKwlwcmludGsoInR2cDUxNTA6IEludGVycnVwdCBjb25maWd1cmF0aW9uID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9JTlRfQ09ORikpOworCXByaW50aygidHZwNTE1MDogVkRQIGNvbmZpZ3VyYXRpb24gUkFNIGRhdGEgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1ZEUF9DT05GX1JBTV9EQVRBKSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBDb25maWd1cmF0aW9uIFJBTSBhZGRyZXNzIGxvdyBieXRlID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9DT05GX1JBTV9BRERSX0xPVykpOworCXByaW50aygidHZwNTE1MDogQ29uZmlndXJhdGlvbiBSQU0gYWRkcmVzcyBoaWdoIGJ5dGUgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0NPTkZfUkFNX0FERFJfSElHSCkpOworCXByaW50aygidHZwNTE1MDogVkRQIHN0YXR1cyByZWdpc3RlciA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfVkRQX1NUQVRVU19SRUcpKTsKKwlwcmludGsoInR2cDUxNTA6IEZJRk8gd29yZCBjb3VudCA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfRklGT19XT1JEX0NPVU5UKSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBGSUZPIGludGVycnVwdCB0aHJlc2hvbGQgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0ZJRk9fSU5UX1RIUkVTSE9MRCkpOworCXByaW50aygidHZwNTE1MDogRklGTyByZXNldCA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfRklGT19SRVNFVCkpOworCXByaW50aygidHZwNTE1MDogTGluZSBudW1iZXIgaW50ZXJydXB0ID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9MSU5FX05VTUJFUl9JTlQpKTsKKwlwcmludGsoInR2cDUxNTA6IFBpeGVsIGFsaWdubWVudCByZWdpc3RlciBsb3cgYnl0ZSA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfUElYX0FMSUdOX1JFR19MT1cpKTsKKwlwcmludGsoInR2cDUxNTA6IFBpeGVsIGFsaWdubWVudCByZWdpc3RlciBoaWdoIGJ5dGUgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1BJWF9BTElHTl9SRUdfSElHSCkpOworCXByaW50aygidHZwNTE1MDogRklGTyBvdXRwdXQgY29udHJvbCA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfRklGT19PVVRfQ1RSTCkpOworCXByaW50aygidHZwNTE1MDogRnVsbCBmaWVsZCBlbmFibGUgMSA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfRlVMTF9GSUVMRF9FTkFfMSkpOworCXByaW50aygidHZwNTE1MDogRnVsbCBmaWVsZCBlbmFibGUgMiA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfRlVMTF9GSUVMRF9FTkFfMikpOworCXByaW50aygidHZwNTE1MDogTGluZSBtb2RlIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfTElORV9NT0RFX1JFR18xKSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBMaW5lIG1vZGUgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9MSU5FX01PREVfUkVHXzIpKTsKKwlwcmludGsoInR2cDUxNTA6IExpbmUgbW9kZSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfMykpOworCXByaW50aygidHZwNTE1MDogTGluZSBtb2RlIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfTElORV9NT0RFX1JFR180KSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBMaW5lIG1vZGUgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9MSU5FX01PREVfUkVHXzUpKTsKKwlwcmludGsoInR2cDUxNTA6IExpbmUgbW9kZSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfNikpOworCXByaW50aygidHZwNTE1MDogTGluZSBtb2RlIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfTElORV9NT0RFX1JFR183KSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBMaW5lIG1vZGUgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9MSU5FX01PREVfUkVHXzgpKTsKKwlwcmludGsoInR2cDUxNTA6IExpbmUgbW9kZSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCisJICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfOSkpOworCXByaW50aygidHZwNTE1MDogTGluZSBtb2RlIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfTElORV9NT0RFX1JFR18xMCkpOworCXByaW50aygidHZwNTE1MDogTGluZSBtb2RlIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfTElORV9NT0RFX1JFR18xMSkpOworCXByaW50aygidHZwNTE1MDogTGluZSBtb2RlIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfTElORV9NT0RFX1JFR18xMikpOworCXByaW50aygidHZwNTE1MDogTGluZSBtb2RlIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfTElORV9NT0RFX1JFR18xMykpOworCXByaW50aygidHZwNTE1MDogTGluZSBtb2RlIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfTElORV9NT0RFX1JFR18xNCkpOworCXByaW50aygidHZwNTE1MDogTGluZSBtb2RlIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfTElORV9NT0RFX1JFR18xNSkpOworCXByaW50aygidHZwNTE1MDogTGluZSBtb2RlIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfTElORV9NT0RFX1JFR18xNikpOworCXByaW50aygidHZwNTE1MDogTGluZSBtb2RlIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfTElORV9NT0RFX1JFR18xNykpOworCXByaW50aygidHZwNTE1MDogTGluZSBtb2RlIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfTElORV9NT0RFX1JFR18xOCkpOworCXByaW50aygidHZwNTE1MDogTGluZSBtb2RlIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfTElORV9NT0RFX1JFR18xOSkpOworCXByaW50aygidHZwNTE1MDogTGluZSBtb2RlIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfTElORV9NT0RFX1JFR18yMCkpOworCXByaW50aygidHZwNTE1MDogTGluZSBtb2RlIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfTElORV9NT0RFX1JFR18yMSkpOworCXByaW50aygidHZwNTE1MDogTGluZSBtb2RlIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfTElORV9NT0RFX1JFR18yMikpOworCXByaW50aygidHZwNTE1MDogTGluZSBtb2RlIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfTElORV9NT0RFX1JFR18yMykpOworCXByaW50aygidHZwNTE1MDogTGluZSBtb2RlIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfTElORV9NT0RFX1JFR18yNCkpOworCXByaW50aygidHZwNTE1MDogTGluZSBtb2RlIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfTElORV9NT0RFX1JFR18yNSkpOworCXByaW50aygidHZwNTE1MDogTGluZSBtb2RlIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfTElORV9NT0RFX1JFR18yNykpOworCXByaW50aygidHZwNTE1MDogTGluZSBtb2RlIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfTElORV9NT0RFX1JFR18yOCkpOworCXByaW50aygidHZwNTE1MDogTGluZSBtb2RlIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfTElORV9NT0RFX1JFR18yOSkpOworCXByaW50aygidHZwNTE1MDogTGluZSBtb2RlIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfTElORV9NT0RFX1JFR18zMCkpOworCXByaW50aygidHZwNTE1MDogTGluZSBtb2RlIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfTElORV9NT0RFX1JFR18zMSkpOworCXByaW50aygidHZwNTE1MDogTGluZSBtb2RlIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfTElORV9NT0RFX1JFR18zMikpOworCXByaW50aygidHZwNTE1MDogTGluZSBtb2RlIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfTElORV9NT0RFX1JFR18zMykpOworCXByaW50aygidHZwNTE1MDogTGluZSBtb2RlIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfTElORV9NT0RFX1JFR18zNCkpOworCXByaW50aygidHZwNTE1MDogTGluZSBtb2RlIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfTElORV9NT0RFX1JFR18zNSkpOworCXByaW50aygidHZwNTE1MDogTGluZSBtb2RlIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfTElORV9NT0RFX1JFR18zNikpOworCXByaW50aygidHZwNTE1MDogTGluZSBtb2RlIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfTElORV9NT0RFX1JFR18zNykpOworCXByaW50aygidHZwNTE1MDogTGluZSBtb2RlIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfTElORV9NT0RFX1JFR18zOCkpOworCXByaW50aygidHZwNTE1MDogTGluZSBtb2RlIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfTElORV9NT0RFX1JFR18zOSkpOworCXByaW50aygidHZwNTE1MDogTGluZSBtb2RlIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfTElORV9NT0RFX1JFR180MCkpOworCXByaW50aygidHZwNTE1MDogTGluZSBtb2RlIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfTElORV9NT0RFX1JFR180MSkpOworCXByaW50aygidHZwNTE1MDogTGluZSBtb2RlIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfTElORV9NT0RFX1JFR180MikpOworCXByaW50aygidHZwNTE1MDogTGluZSBtb2RlIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfTElORV9NT0RFX1JFR180MykpOworCXByaW50aygidHZwNTE1MDogTGluZSBtb2RlIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKKwkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfTElORV9NT0RFX1JFR180NCkpOworCXByaW50aygidHZwNTE1MDogRnVsbCBmaWVsZCBtb2RlIHJlZ2lzdGVyID0gMHglMDJ4XG4iLAorCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9GVUxMX0ZJRUxEX01PREVfUkVHKSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJCQlCYXNpYyBmdW5jdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZW51bSB0dnA1MTUwX2lucHV0IHsKKwlUVlA1MTUwX0FOQUxPR19DSDAgPSAwLAorCVRWUDUxNTBfU1ZJREVPID0gMSwKKwlUVlA1MTUwX0FOQUxPR19DSDEgPSAyLAorCVRWUDUxNTBfQkxBQ0tfU0NSRUVOID0gOAorfTsKKworc3RhdGljIGlubGluZSB2b2lkIHR2cDUxNTBfc2VsbXV4KHN0cnVjdCBpMmNfY2xpZW50ICpjLAorCQkJCSAgZW51bSB0dnA1MTUwX2lucHV0IGlucHV0KQoreworCXN0cnVjdCB0dnA1MTUwICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGMpOworCisJaWYgKCFkZWNvZGVyLT5lbmFibGUpCisJCWlucHV0IHw9IFRWUDUxNTBfQkxBQ0tfU0NSRUVOOworCisJdHZwNTE1MF93cml0ZShjLCBUVlA1MTUwX1ZEX0lOX1NSQ19TRUxfMSwgaW5wdXQpOworfTsKKworc3RhdGljIGlubGluZSB2b2lkIHR2cDUxNTBfcmVzZXQoc3RydWN0IGkyY19jbGllbnQgKmMpCit7CisJc3RydWN0IHR2cDUxNTAgKmRlY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoYyk7CisKKwl0dnA1MTUwX3dyaXRlKGMsIFRWUDUxNTBfQ09ORl9TSEFSRURfUElOLCAyKTsKKworCS8qIEF1dG9tYXRpYyBvZmZzZXQgYW5kIEFHQyBlbmFibGVkICovCisJdHZwNTE1MF93cml0ZShjLCBUVlA1MTUwX0FOQUxfQ0hMX0NUTCwgMHgxNSk7CisKKwkvKiBOb3JtYWwgT3BlcmF0aW9uICovCisvLyAgICAgIHR2cDUxNTBfd3JpdGUoYywgVFZQNTE1MF9PUF9NT0RFX0NUTCwgMHgwMCk7CisKKwkvKiBBY3RpdmF0ZSBZQ3JDYiBvdXRwdXQgMHg5IG9yIDB4ZCA/ICovCisJdHZwNTE1MF93cml0ZShjLCBUVlA1MTUwX01JU0NfQ1RMLCAweDZmKTsKKworCS8qIEFjdGl2YXRlcyB2aWRlbyBzdGQgYXV0b2RldGVjdGlvbiBmb3IgYWxsIHN0YW5kYXJkcyAqLworCXR2cDUxNTBfd3JpdGUoYywgVFZQNTE1MF9BVVRPU1dfTVNLLCAweDApOworCisJLyogRGVmYXVsdCBmb3JtYXQ6IDB4NDcsIDQ6MjoyOiAweDQwICovCisJdHZwNTE1MF93cml0ZShjLCBUVlA1MTUwX0RBVEFfUkFURV9TRUwsIDB4NDcpOworCisJdHZwNTE1MF9zZWxtdXgoYywgZGVjb2Rlci0+aW5wdXQpOworCisJdHZwNTE1MF93cml0ZShjLCBUVlA1MTUwX0NIUk9NQV9QUk9DX0NUTF8xLCAweDBjKTsKKwl0dnA1MTUwX3dyaXRlKGMsIFRWUDUxNTBfQ0hST01BX1BST0NfQ1RMXzIsIDB4NTQpOworCisJdHZwNTE1MF93cml0ZShjLCAweDI3LCAweDIwKTsJLyogPz8/Pz8/Pz8/PyAqLworCisJdHZwNTE1MF93cml0ZShjLCBUVlA1MTUwX1ZJREVPX1NURCwgMHgwKTsJLyogQXV0byBzd2l0Y2ggKi8KKworCXR2cDUxNTBfd3JpdGUoYywgVFZQNTE1MF9CUklHSFRfQ1RMLCBkZWNvZGVyLT5icmlnaHQgPj4gOCk7CisJdHZwNTE1MF93cml0ZShjLCBUVlA1MTUwX0NPTlRSQVNUX0NUTCwgZGVjb2Rlci0+Y29udHJhc3QgPj4gOCk7CisJdHZwNTE1MF93cml0ZShjLCBUVlA1MTUwX1NBVFVSQVRJT05fQ1RMLCBkZWNvZGVyLT5jb250cmFzdCA+PiA4KTsKKwl0dnA1MTUwX3dyaXRlKGMsIFRWUDUxNTBfSFVFX0NUTCwgKGRlY29kZXItPmh1ZSAtIDMyNzY4KSA+PiA4KTsKK307CisKK3N0YXRpYyBpbnQgdHZwNTE1MF9nZXRfY3RybChzdHJ1Y3QgaTJjX2NsaWVudCAqYywgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKy8qCXN0cnVjdCB0dnA1MTUwICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGMpOyAqLworCisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKKwkJY3RybC0+dmFsdWUgPSB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9CUklHSFRfQ1RMKTsKKwkJcmV0dXJuIDA7CisJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKKwkJY3RybC0+dmFsdWUgPSB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9DT05UUkFTVF9DVEwpOworCQlyZXR1cm4gMDsKKwljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CisJCWN0cmwtPnZhbHVlID0gdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfU0FUVVJBVElPTl9DVEwpOworCQlyZXR1cm4gMDsKKwljYXNlIFY0TDJfQ0lEX0hVRToKKwkJY3RybC0+dmFsdWUgPSB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9IVUVfQ1RMKTsKKwkJcmV0dXJuIDA7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorfQorCitzdGF0aWMgaW50IHR2cDUxNTBfc2V0X2N0cmwoc3RydWN0IGkyY19jbGllbnQgKmMsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisvKglzdHJ1Y3QgdHZwNTE1MCAqZGVjb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjKTsgKi8KKworCXN3aXRjaCAoY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CisJCXR2cDUxNTBfd3JpdGUoYywgVFZQNTE1MF9CUklHSFRfQ1RMLCBjdHJsLT52YWx1ZSk7CisJCXJldHVybiAwOworCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6CisJCXR2cDUxNTBfd3JpdGUoYywgVFZQNTE1MF9DT05UUkFTVF9DVEwsIGN0cmwtPnZhbHVlKTsKKwkJcmV0dXJuIDA7CisJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgorCQl0dnA1MTUwX3dyaXRlKGMsIFRWUDUxNTBfU0FUVVJBVElPTl9DVEwsIGN0cmwtPnZhbHVlKTsKKwkJcmV0dXJuIDA7CisJY2FzZSBWNEwyX0NJRF9IVUU6CisJCXR2cDUxNTBfd3JpdGUoYywgVFZQNTE1MF9IVUVfQ1RMLCBjdHJsLT52YWx1ZSk7CisJCXJldHVybiAwOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkJCUkyQyBDb21tYW5kCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgdHZwNTE1MF9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkgICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCit7CisJc3RydWN0IHR2cDUxNTAgKmRlY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCXN3aXRjaCAoY21kKSB7CisKKwljYXNlIDA6CisJY2FzZSBERUNPREVSX0lOSVQ6CisJCXR2cDUxNTBfcmVzZXQoY2xpZW50KTsKKwkJYnJlYWs7CisKKwljYXNlIERFQ09ERVJfRFVNUDoKKwkJZHVtcF9yZWcoY2xpZW50KTsKKwkJYnJlYWs7CisKKwljYXNlIERFQ09ERVJfR0VUX0NBUEFCSUxJVElFUzoKKwkJeworCQkJc3RydWN0IHZpZGVvX2RlY29kZXJfY2FwYWJpbGl0eSAqY2FwID0gYXJnOworCisJCQljYXAtPmZsYWdzID0gVklERU9fREVDT0RFUl9QQUwgfAorCQkJICAgIFZJREVPX0RFQ09ERVJfTlRTQyB8CisJCQkgICAgVklERU9fREVDT0RFUl9TRUNBTSB8CisJCQkgICAgVklERU9fREVDT0RFUl9BVVRPIHwgVklERU9fREVDT0RFUl9DQ0lSOworCQkJY2FwLT5pbnB1dHMgPSAzOworCQkJY2FwLT5vdXRwdXRzID0gMTsKKwkJCWJyZWFrOworCQl9CisJY2FzZSBERUNPREVSX0dFVF9TVEFUVVM6CisJCXsKKwkJCWJyZWFrOworCQl9CisKKwljYXNlIERFQ09ERVJfU0VUX0dQSU86CisJCWJyZWFrOworCisJY2FzZSBERUNPREVSX1NFVF9WQklfQllQQVNTOgorCQlicmVhazsKKworCWNhc2UgREVDT0RFUl9TRVRfTk9STToKKwkJeworCQkJaW50ICppYXJnID0gYXJnOworCisJCQlzd2l0Y2ggKCppYXJnKSB7CisKKwkJCWNhc2UgVklERU9fTU9ERV9OVFNDOgorCQkJCWJyZWFrOworCisJCQljYXNlIFZJREVPX01PREVfUEFMOgorCQkJCWJyZWFrOworCisJCQljYXNlIFZJREVPX01PREVfU0VDQU06CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgVklERU9fTU9ERV9BVVRPOgorCQkJCWJyZWFrOworCisJCQlkZWZhdWx0OgorCQkJCXJldHVybiAtRUlOVkFMOworCisJCQl9CisJCQlkZWNvZGVyLT5ub3JtID0gKmlhcmc7CisJCQlicmVhazsKKwkJfQorCWNhc2UgREVDT0RFUl9TRVRfSU5QVVQ6CisJCXsKKwkJCWludCAqaWFyZyA9IGFyZzsKKwkJCWlmICgqaWFyZyA8IDAgfHwgKmlhcmcgPiAzKSB7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisKKwkJCWRlY29kZXItPmlucHV0ID0gKmlhcmc7CisJCQl0dnA1MTUwX3NlbG11eChjbGllbnQsIGRlY29kZXItPmlucHV0KTsKKworCQkJYnJlYWs7CisJCX0KKwljYXNlIERFQ09ERVJfU0VUX09VVFBVVDoKKwkJeworCQkJaW50ICppYXJnID0gYXJnOworCisJCQkvKiBub3QgbXVjaCBjaG9pY2Ugb2Ygb3V0cHV0cyAqLworCQkJaWYgKCppYXJnICE9IDApIHsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJY2FzZSBERUNPREVSX0VOQUJMRV9PVVRQVVQ6CisJCXsKKwkJCWludCAqaWFyZyA9IGFyZzsKKworCQkJZGVjb2Rlci0+ZW5hYmxlID0gKCppYXJnICE9IDApOworCisJCQl0dnA1MTUwX3NlbG11eChjbGllbnQsIGRlY29kZXItPmlucHV0KTsKKworCQkJYnJlYWs7CisJCX0KKwljYXNlIFZJRElPQ19RVUVSWUNUUkw6CisJCXsKKwkJCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMgPSBhcmc7CisJCQl1OCBpLCBuOworCisJCQlkcHJpbnRrKDEsIEtFUk5fREVCVUcgIlZJRElPQ19RVUVSWUNUUkwiKTsKKworCQkJbiA9IHNpemVvZih0dnA1MTUwX3FjdHJsKSAvIHNpemVvZih0dnA1MTUwX3FjdHJsWzBdKTsKKwkJCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisJCQkJaWYgKHFjLT5pZCAmJiBxYy0+aWQgPT0gdHZwNTE1MF9xY3RybFtpXS5pZCkgeworCQkJCQltZW1jcHkocWMsICYodHZwNTE1MF9xY3RybFtpXSksCisJCQkJCSAgICAgICBzaXplb2YoKnFjKSk7CisJCQkJCXJldHVybiAwOworCQkJCX0KKworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwljYXNlIFZJRElPQ19HX0NUUkw6CisJCXsKKwkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwgPSBhcmc7CisJCQlkcHJpbnRrKDEsIEtFUk5fREVCVUcgIlZJRElPQ19HX0NUUkwiKTsKKworCQkJcmV0dXJuIHR2cDUxNTBfZ2V0X2N0cmwoY2xpZW50LCBjdHJsKTsKKwkJfQorCWNhc2UgVklESU9DX1NfQ1RSTF9PTEQ6CS8qID8/PyAqLworCWNhc2UgVklESU9DX1NfQ1RSTDoKKwkJeworCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCA9IGFyZzsKKwkJCXU4IGksIG47CisJCQlkcHJpbnRrKDEsIEtFUk5fREVCVUcgIlZJRElPQ19TX0NUUkwiKTsKKwkJCW4gPSBzaXplb2YodHZwNTE1MF9xY3RybCkgLyBzaXplb2YodHZwNTE1MF9xY3RybFswXSk7CisJCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQorCQkJCWlmIChjdHJsLT5pZCA9PSB0dnA1MTUwX3FjdHJsW2ldLmlkKSB7CisJCQkJCWlmIChjdHJsLT52YWx1ZSA8CisJCQkJCSAgICB0dnA1MTUwX3FjdHJsW2ldLm1pbmltdW0KKwkJCQkJICAgIHx8IGN0cmwtPnZhbHVlID4KKwkJCQkJICAgIHR2cDUxNTBfcWN0cmxbaV0ubWF4aW11bSkKKwkJCQkJCXJldHVybiAtRVJBTkdFOworCQkJCQlkcHJpbnRrKDEsCisJCQkJCQlLRVJOX0RFQlVHCisJCQkJCQkiVklESU9DX1NfQ1RSTDogaWQ9JWQsIHZhbHVlPSVkIiwKKwkJCQkJCWN0cmwtPmlkLCBjdHJsLT52YWx1ZSk7CisJCQkJCXJldHVybiB0dnA1MTUwX3NldF9jdHJsKGNsaWVudCwgY3RybCk7CisJCQkJfQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCWNhc2UgREVDT0RFUl9TRVRfUElDVFVSRToKKwkJeworCQkJc3RydWN0IHZpZGVvX3BpY3R1cmUgKnBpYyA9IGFyZzsKKwkJCWlmIChkZWNvZGVyLT5icmlnaHQgIT0gcGljLT5icmlnaHRuZXNzKSB7CisJCQkJLyogV2Ugd2FudCAwIHRvIDI1NSB3ZSBnZXQgMC02NTUzNSAqLworCQkJCWRlY29kZXItPmJyaWdodCA9IHBpYy0+YnJpZ2h0bmVzczsKKwkJCQl0dnA1MTUwX3dyaXRlKGNsaWVudCwgVFZQNTE1MF9CUklHSFRfQ1RMLAorCQkJCQkgICAgICBkZWNvZGVyLT5icmlnaHQgPj4gOCk7CisJCQl9CisJCQlpZiAoZGVjb2Rlci0+Y29udHJhc3QgIT0gcGljLT5jb250cmFzdCkgeworCQkJCS8qIFdlIHdhbnQgMCB0byAyNTUgd2UgZ2V0IDAtNjU1MzUgKi8KKwkJCQlkZWNvZGVyLT5jb250cmFzdCA9IHBpYy0+Y29udHJhc3Q7CisJCQkJdHZwNTE1MF93cml0ZShjbGllbnQsIFRWUDUxNTBfQ09OVFJBU1RfQ1RMLAorCQkJCQkgICAgICBkZWNvZGVyLT5jb250cmFzdCA+PiA4KTsKKwkJCX0KKwkJCWlmIChkZWNvZGVyLT5zYXQgIT0gcGljLT5jb2xvdXIpIHsKKwkJCQkvKiBXZSB3YW50IDAgdG8gMjU1IHdlIGdldCAwLTY1NTM1ICovCisJCQkJZGVjb2Rlci0+c2F0ID0gcGljLT5jb2xvdXI7CisJCQkJdHZwNTE1MF93cml0ZShjbGllbnQsIFRWUDUxNTBfU0FUVVJBVElPTl9DVEwsCisJCQkJCSAgICAgIGRlY29kZXItPmNvbnRyYXN0ID4+IDgpOworCQkJfQorCQkJaWYgKGRlY29kZXItPmh1ZSAhPSBwaWMtPmh1ZSkgeworCQkJCS8qIFdlIHdhbnQgLTEyOCB0byAxMjcgd2UgZ2V0IDAtNjU1MzUgKi8KKwkJCQlkZWNvZGVyLT5odWUgPSBwaWMtPmh1ZTsKKwkJCQl0dnA1MTUwX3dyaXRlKGNsaWVudCwgVFZQNTE1MF9IVUVfQ1RMLAorCQkJCQkgICAgICAoZGVjb2Rlci0+aHVlIC0gMzI3NjgpID4+IDgpOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkJCUkyQyBDbGllbnQgJiBEcml2ZXIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGRyaXZlcjsKKworc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50IGNsaWVudF90ZW1wbGF0ZSA9IHsKKwkubmFtZSA9ICIodW5zZXQpIiwKKwkuZmxhZ3MgPSBJMkNfQ0xJRU5UX0FMTE9XX1VTRSwKKwkuZHJpdmVyID0gJmRyaXZlciwKK307CisKK3N0YXRpYyBpbnQgdHZwNTE1MF9kZXRlY3RfY2xpZW50KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwKKwkJCQkgaW50IGFkZHJlc3MsIGludCBraW5kKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CisJc3RydWN0IHR2cDUxNTAgKmNvcmU7CisJaW50IHJ2OworCisJZHByaW50aygxLAorCQlLRVJOX0lORk8KKwkJInR2cDUxNTAuYzogZGV0ZWN0aW5nIHR2cDUxNTAgY2xpZW50IG9uIGFkZHJlc3MgMHgleFxuIiwKKwkJYWRkcmVzcyA8PCAxKTsKKworCWNsaWVudF90ZW1wbGF0ZS5hZGFwdGVyID0gYWRhcHRlcjsKKwljbGllbnRfdGVtcGxhdGUuYWRkciA9IGFkZHJlc3M7CisKKwkvKiBDaGVjayBpZiB0aGUgYWRhcHRlciBzdXBwb3J0cyB0aGUgbmVlZGVkIGZlYXR1cmVzICovCisJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eQorCSAgICAoYWRhcHRlciwKKwkgICAgIEkyQ19GVU5DX1NNQlVTX1JFQURfQllURSB8IEkyQ19GVU5DX1NNQlVTX1dSSVRFX0JZVEVfREFUQSkpCisJCXJldHVybiAwOworCisJY2xpZW50ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGkyY19jbGllbnQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY2xpZW50ID09IDApCisJCXJldHVybiAtRU5PTUVNOworCW1lbWNweShjbGllbnQsICZjbGllbnRfdGVtcGxhdGUsIHNpemVvZihzdHJ1Y3QgaTJjX2NsaWVudCkpOworCisJY29yZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB0dnA1MTUwKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNvcmUgPT0gMCkgeworCQlrZnJlZShjbGllbnQpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJbWVtc2V0KGNvcmUsIDAsIHNpemVvZihzdHJ1Y3QgdHZwNTE1MCkpOworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGNvcmUpOworCisJcnYgPSBpMmNfYXR0YWNoX2NsaWVudChjbGllbnQpOworCisJY29yZS0+bm9ybSA9IFZJREVPX01PREVfQVVUTzsKKwljb3JlLT5pbnB1dCA9IDI7CisJY29yZS0+ZW5hYmxlID0gMTsKKwljb3JlLT5icmlnaHQgPSAzMjc2ODsKKwljb3JlLT5jb250cmFzdCA9IDMyNzY4OworCWNvcmUtPmh1ZSA9IDMyNzY4OworCWNvcmUtPnNhdCA9IDMyNzY4OworCisJaWYgKHJ2KSB7CisJCWtmcmVlKGNsaWVudCk7CisJCWtmcmVlKGNvcmUpOworCQlyZXR1cm4gcnY7CisJfQorCisJaWYgKGRlYnVnID4gMSkKKwkJZHVtcF9yZWcoY2xpZW50KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHR2cDUxNTBfYXR0YWNoX2FkYXB0ZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQoreworCWRwcmludGsoMSwKKwkJS0VSTl9JTkZPCisJCSJ0dnA1MTUwLmM6IHN0YXJ0aW5nIHByb2JlIGZvciBhZGFwdGVyICVzICgweCV4KVxuIiwKKwkJYWRhcHRlci0+bmFtZSwgYWRhcHRlci0+aWQpOworCXJldHVybiBpMmNfcHJvYmUoYWRhcHRlciwgJmFkZHJfZGF0YSwgJnR2cDUxNTBfZGV0ZWN0X2NsaWVudCk7Cit9CisKK3N0YXRpYyBpbnQgdHZwNTE1MF9kZXRhY2hfY2xpZW50KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IHR2cDUxNTAgKmRlY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlpbnQgZXJyOworCisJZXJyID0gaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKKwlpZiAoZXJyKSB7CisJCXJldHVybiBlcnI7CisJfQorCisJa2ZyZWUoZGVjb2Rlcik7CisJa2ZyZWUoY2xpZW50KTsKKworCXJldHVybiAwOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgZHJpdmVyID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5uYW1lID0gInR2cDUxNTAiLAorCisJLyogRklYTUUgKi8KKwkuaWQgPSBJMkNfRFJJVkVSSURfU0FBNzExMCwKKwkuZmxhZ3MgPSBJMkNfREZfTk9USUZZLAorCisJLmF0dGFjaF9hZGFwdGVyID0gdHZwNTE1MF9hdHRhY2hfYWRhcHRlciwKKwkuZGV0YWNoX2NsaWVudCA9IHR2cDUxNTBfZGV0YWNoX2NsaWVudCwKKworCS5jb21tYW5kID0gdHZwNTE1MF9jb21tYW5kLAorfTsKKworc3RhdGljIGludCBfX2luaXQgdHZwNTE1MF9pbml0KHZvaWQpCit7CisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZkcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdHZwNTE1MF9leGl0KHZvaWQpCit7CisJaTJjX2RlbF9kcml2ZXIoJmRyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHR2cDUxNTBfaW5pdCk7Cittb2R1bGVfZXhpdCh0dnA1MTUwX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90dnA1MTUwX3JlZy5oIGIvZHJpdmVycy9tZWRpYS92aWRlby90dnA1MTUwX3JlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkNDVjMWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2cDUxNTBfcmVnLmgKQEAgLTAsMCArMSwxNzMgQEAKKyNkZWZpbmUgVFZQNTE1MF9WRF9JTl9TUkNfU0VMXzEgICAgICAweDAwIC8qIFZpZGVvIGlucHV0IHNvdXJjZSBzZWxlY3Rpb24gIzEgKi8KKyNkZWZpbmUgVFZQNTE1MF9BTkFMX0NITF9DVEwgICAgICAgICAweDAxIC8qIEFuYWxvZyBjaGFubmVsIGNvbnRyb2xzICovCisjZGVmaW5lIFRWUDUxNTBfT1BfTU9ERV9DVEwgICAgICAgICAgMHgwMiAvKiBPcGVyYXRpb24gbW9kZSBjb250cm9scyAqLworI2RlZmluZSBUVlA1MTUwX01JU0NfQ1RMICAgICAgICAgICAgIDB4MDMgLyogTWlzY2VsbGFuZW91cyBjb250cm9scyAqLworI2RlZmluZSBUVlA1MTUwX0FVVE9TV19NU0sgICAgICAgICAgIDB4MDQgLyogQXV0b3N3aXRjaCBtYXNrOiBUVlA1MTUwQSAvIFRWUDUxNTBBTSAqLworCisvKiBSZXNlcnZlZCAwNWggKi8KKworI2RlZmluZSBUVlA1MTUwX0NPTE9SX0tJTF9USFNIX0NUTCAgIDB4MDYgLyogQ29sb3Iga2lsbGVyIHRocmVzaG9sZCBjb250cm9sICovCisjZGVmaW5lIFRWUDUxNTBfTFVNQV9QUk9DX0NUTF8xICAgICAgMHgwNyAvKiBMdW1pbmFuY2UgcHJvY2Vzc2luZyBjb250cm9sICMxICovCisjZGVmaW5lIFRWUDUxNTBfTFVNQV9QUk9DX0NUTF8yICAgICAgMHgwOCAvKiBMdW1pbmFuY2UgcHJvY2Vzc2luZyBjb250cm9sICMyICovCisjZGVmaW5lIFRWUDUxNTBfQlJJR0hUX0NUTCAgICAgICAgICAgMHgwOSAvKiBCcmlnaHRuZXNzIGNvbnRyb2wgKi8KKyNkZWZpbmUgVFZQNTE1MF9TQVRVUkFUSU9OX0NUTCAgICAgICAweDBhIC8qIENvbG9yIHNhdHVyYXRpb24gY29udHJvbCAqLworI2RlZmluZSBUVlA1MTUwX0hVRV9DVEwgICAgICAgICAgICAgIDB4MGIgLyogSHVlIGNvbnRyb2wgKi8KKyNkZWZpbmUgVFZQNTE1MF9DT05UUkFTVF9DVEwgICAgICAgICAweDBjIC8qIENvbnRyYXN0IGNvbnRyb2wgKi8KKyNkZWZpbmUgVFZQNTE1MF9EQVRBX1JBVEVfU0VMICAgICAgICAweDBkIC8qIE91dHB1dHMgYW5kIGRhdGEgcmF0ZXMgc2VsZWN0ICovCisjZGVmaW5lIFRWUDUxNTBfTFVNQV9QUk9DX0NUTF8zICAgICAgMHgwZSAvKiBMdW1pbmFuY2UgcHJvY2Vzc2luZyBjb250cm9sICMzICovCisjZGVmaW5lIFRWUDUxNTBfQ09ORl9TSEFSRURfUElOICAgICAgMHgwZiAvKiBDb25maWd1cmF0aW9uIHNoYXJlZCBwaW5zICovCisKKy8qIFJlc2VydmVkIDEwaCAqLworCisjZGVmaW5lIFRWUDUxNTBfQUNUX1ZEX0NST1BfU1RfTVNCICAgMHgxMSAvKiBBY3RpdmUgdmlkZW8gY3JvcHBpbmcgc3RhcnQgTVNCICovCisjZGVmaW5lIFRWUDUxNTBfQUNUX1ZEX0NST1BfU1RfTFNCICAgMHgxMiAvKiBBY3RpdmUgdmlkZW8gY3JvcHBpbmcgc3RhcnQgTFNCICovCisjZGVmaW5lIFRWUDUxNTBfQUNUX1ZEX0NST1BfU1RQX01TQiAgMHgxMyAvKiBBY3RpdmUgdmlkZW8gY3JvcHBpbmcgc3RvcCBNU0IgKi8KKyNkZWZpbmUgVFZQNTE1MF9BQ1RfVkRfQ1JPUF9TVFBfTFNCICAweDE0IC8qIEFjdGl2ZSB2aWRlbyBjcm9wcGluZyBzdG9wIExTQiAqLworI2RlZmluZSBUVlA1MTUwX0dFTkxPQ0sgICAgICAgICAgICAgIDB4MTUgLyogR2VubG9jay9SVEMgKi8KKyNkZWZpbmUgVFZQNTE1MF9IT1JJWl9TWU5DX1NUQVJUICAgICAweDE2IC8qIEhvcml6b250YWwgc3luYyBzdGFydCAqLworCisvKiBSZXNlcnZlZCAxN2ggKi8KKworI2RlZmluZSBUVlA1MTUwX1ZFUlRfQkxBTktJTkdfU1RBUlQgMHgxOCAvKiBWZXJ0aWNhbCBibGFua2luZyBzdGFydCAqLworI2RlZmluZSBUVlA1MTUwX1ZFUlRfQkxBTktJTkdfU1RPUCAgMHgxOSAvKiBWZXJ0aWNhbCBibGFua2luZyBzdG9wICovCisjZGVmaW5lIFRWUDUxNTBfQ0hST01BX1BST0NfQ1RMXzEgICAweDFhIC8qIENocm9taW5hbmNlIHByb2Nlc3NpbmcgY29udHJvbCAjMSAqLworI2RlZmluZSBUVlA1MTUwX0NIUk9NQV9QUk9DX0NUTF8yICAgMHgxYiAvKiBDaHJvbWluYW5jZSBwcm9jZXNzaW5nIGNvbnRyb2wgIzIgKi8KKyNkZWZpbmUgVFZQNTE1MF9JTlRfUkVTRVRfUkVHX0IgICAgIDB4MWMgLyogSW50ZXJydXB0IHJlc2V0IHJlZ2lzdGVyIEIgKi8KKyNkZWZpbmUgVFZQNTE1MF9JTlRfRU5BQkxFX1JFR19CICAgIDB4MWQgLyogSW50ZXJydXB0IGVuYWJsZSByZWdpc3RlciBCICovCisjZGVmaW5lIFRWUDUxNTBfSU5UVF9DT05GSUdfUkVHX0IgICAweDFlIC8qIEludGVycnVwdCBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIEIgKi8KKworLyogUmVzZXJ2ZWQgMUZoLTI3aCAqLworCisjZGVmaW5lIFRWUDUxNTBfVklERU9fU1REICAgICAgICAgICAweDI4IC8qIFZpZGVvIHN0YW5kYXJkICovCisKKy8qIFJlc2VydmVkIDI5aC0yYmggKi8KKworI2RlZmluZSBUVlA1MTUwX0NCX0dBSU5fRkFDVCAgICAgICAgMHgyYyAvKiBDYiBnYWluIGZhY3RvciAqLworI2RlZmluZSBUVlA1MTUwX0NSX0dBSU5fRkFDVE9SICAgICAgMHgyZCAvKiBDciBnYWluIGZhY3RvciAqLworI2RlZmluZSBUVlA1MTUwX01BQ1JPVklTSU9OX09OX0NUUiAgMHgyZSAvKiBNYWNyb3Zpc2lvbiBvbiBjb3VudGVyICovCisjZGVmaW5lIFRWUDUxNTBfTUFDUk9WSVNJT05fT0ZGX0NUUiAweDJmIC8qIE1hY3JvdmlzaW9uIG9mZiBjb3VudGVyICovCisjZGVmaW5lIFRWUDUxNTBfUkVWX1NFTEVDVCAgICAgICAgICAweDMwIC8qIHJldmlzaW9uIHNlbGVjdCAoVFZQNTE1MEFNMSBvbmx5KSAqLworCisvKiBSZXNlcnZlZAkzMWgtN0ZoICovCisKKyNkZWZpbmUgVFZQNTE1MF9NU0JfREVWX0lEICAgICAgICAgIDB4ODAgLyogTVNCIG9mIGRldmljZSBJRCAqLworI2RlZmluZSBUVlA1MTUwX0xTQl9ERVZfSUQgICAgICAgICAgMHg4MSAvKiBMU0Igb2YgZGV2aWNlIElEICovCisjZGVmaW5lIFRWUDUxNTBfUk9NX01BSk9SX1ZFUiAgICAgICAweDgyIC8qIFJPTSBtYWpvciB2ZXJzaW9uICovCisjZGVmaW5lIFRWUDUxNTBfUk9NX01JTk9SX1ZFUiAgICAgICAweDgzIC8qIFJPTSBtaW5vciB2ZXJzaW9uICovCisjZGVmaW5lIFRWUDUxNTBfVkVSVF9MTl9DT1VOVF9NU0IgICAweDg0IC8qIFZlcnRpY2FsIGxpbmUgY291bnQgTVNCICovCisjZGVmaW5lIFRWUDUxNTBfVkVSVF9MTl9DT1VOVF9MU0IgICAweDg1IC8qIFZlcnRpY2FsIGxpbmUgY291bnQgTFNCICovCisjZGVmaW5lIFRWUDUxNTBfSU5UX1NUQVRVU19SRUdfQiAgICAweDg2IC8qIEludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgQiAqLworI2RlZmluZSBUVlA1MTUwX0lOVF9BQ1RJVkVfUkVHX0IgICAgMHg4NyAvKiBJbnRlcnJ1cHQgYWN0aXZlIHJlZ2lzdGVyIEIgKi8KKyNkZWZpbmUgVFZQNTE1MF9TVEFUVVNfUkVHXzEgICAgICAgIDB4ODggLyogU3RhdHVzIHJlZ2lzdGVyICMxICovCisjZGVmaW5lIFRWUDUxNTBfU1RBVFVTX1JFR18yICAgICAgICAweDg5IC8qIFN0YXR1cyByZWdpc3RlciAjMiAqLworI2RlZmluZSBUVlA1MTUwX1NUQVRVU19SRUdfMyAgICAgICAgMHg4YSAvKiBTdGF0dXMgcmVnaXN0ZXIgIzMgKi8KKyNkZWZpbmUgVFZQNTE1MF9TVEFUVVNfUkVHXzQgICAgICAgIDB4OGIgLyogU3RhdHVzIHJlZ2lzdGVyICM0ICovCisjZGVmaW5lIFRWUDUxNTBfU1RBVFVTX1JFR181ICAgICAgICAweDhjIC8qIFN0YXR1cyByZWdpc3RlciAjNSAqLworLyogUmVzZXJ2ZWQJOERoLThGaCAqLworI2RlZmluZSBUVlA1MTUwX0NDX0RBVEFfUkVHMSAgICAgICAgMHg5MCAvKiBDbG9zZWQgY2FwdGlvbiBkYXRhIHJlZ2lzdGVycyAqLworI2RlZmluZSBUVlA1MTUwX0NDX0RBVEFfUkVHMiAgICAgICAgMHg5MSAvKiBDbG9zZWQgY2FwdGlvbiBkYXRhIHJlZ2lzdGVycyAqLworI2RlZmluZSBUVlA1MTUwX0NDX0RBVEFfUkVHMyAgICAgICAgMHg5MiAvKiBDbG9zZWQgY2FwdGlvbiBkYXRhIHJlZ2lzdGVycyAqLworI2RlZmluZSBUVlA1MTUwX0NDX0RBVEFfUkVHNCAgICAgICAgMHg5MyAvKiBDbG9zZWQgY2FwdGlvbiBkYXRhIHJlZ2lzdGVycyAqLworI2RlZmluZSBUVlA1MTUwX1dTU19EQVRBX1JFRzEgICAgICAgMFg5NCAvKiBXU1MgZGF0YSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVFZQNTE1MF9XU1NfREFUQV9SRUcyICAgICAgIDBYOTUgLyogV1NTIGRhdGEgcmVnaXN0ZXJzICovCisjZGVmaW5lIFRWUDUxNTBfV1NTX0RBVEFfUkVHMyAgICAgICAwWDk2IC8qIFdTUyBkYXRhIHJlZ2lzdGVycyAqLworI2RlZmluZSBUVlA1MTUwX1dTU19EQVRBX1JFRzQgICAgICAgMFg5NyAvKiBXU1MgZGF0YSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVFZQNTE1MF9XU1NfREFUQV9SRUc1ICAgICAgIDBYOTggLyogV1NTIGRhdGEgcmVnaXN0ZXJzICovCisjZGVmaW5lIFRWUDUxNTBfV1NTX0RBVEFfUkVHNiAgICAgICAwWDk5IC8qIFdTUyBkYXRhIHJlZ2lzdGVycyAqLworI2RlZmluZSBUVlA1MTUwX1ZQU19EQVRBX1JFRzEgICAgICAgMHg5YSAvKiBWUFMgZGF0YSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVFZQNTE1MF9WUFNfREFUQV9SRUcyICAgICAgIDB4OWIgLyogVlBTIGRhdGEgcmVnaXN0ZXJzICovCisjZGVmaW5lIFRWUDUxNTBfVlBTX0RBVEFfUkVHMyAgICAgICAweDljIC8qIFZQUyBkYXRhIHJlZ2lzdGVycyAqLworI2RlZmluZSBUVlA1MTUwX1ZQU19EQVRBX1JFRzQgICAgICAgMHg5ZCAvKiBWUFMgZGF0YSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVFZQNTE1MF9WUFNfREFUQV9SRUc1ICAgICAgIDB4OWUgLyogVlBTIGRhdGEgcmVnaXN0ZXJzICovCisjZGVmaW5lIFRWUDUxNTBfVlBTX0RBVEFfUkVHNiAgICAgICAweDlmIC8qIFZQUyBkYXRhIHJlZ2lzdGVycyAqLworI2RlZmluZSBUVlA1MTUwX1ZQU19EQVRBX1JFRzcgICAgICAgMHhhMCAvKiBWUFMgZGF0YSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVFZQNTE1MF9WUFNfREFUQV9SRUc4ICAgICAgIDB4YTEgLyogVlBTIGRhdGEgcmVnaXN0ZXJzICovCisjZGVmaW5lIFRWUDUxNTBfVlBTX0RBVEFfUkVHOSAgICAgICAweGEyIC8qIFZQUyBkYXRhIHJlZ2lzdGVycyAqLworI2RlZmluZSBUVlA1MTUwX1ZQU19EQVRBX1JFRzEwICAgICAgMHhhMyAvKiBWUFMgZGF0YSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVFZQNTE1MF9WUFNfREFUQV9SRUcxMSAgICAgIDB4YTQgLyogVlBTIGRhdGEgcmVnaXN0ZXJzICovCisjZGVmaW5lIFRWUDUxNTBfVlBTX0RBVEFfUkVHMTIgICAgICAweGE1IC8qIFZQUyBkYXRhIHJlZ2lzdGVycyAqLworI2RlZmluZSBUVlA1MTUwX1ZQU19EQVRBX1JFRzEzICAgICAgMHhhNiAvKiBWUFMgZGF0YSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVFZQNTE1MF9WSVRDX0RBVEFfUkVHMSAgICAgIDB4YTcgLyogVklUQyBkYXRhIHJlZ2lzdGVycyAqLworI2RlZmluZSBUVlA1MTUwX1ZJVENfREFUQV9SRUcyICAgICAgMHhhOCAvKiBWSVRDIGRhdGEgcmVnaXN0ZXJzICovCisjZGVmaW5lIFRWUDUxNTBfVklUQ19EQVRBX1JFRzMgICAgICAweGE5IC8qIFZJVEMgZGF0YSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVFZQNTE1MF9WSVRDX0RBVEFfUkVHNCAgICAgIDB4YWEgLyogVklUQyBkYXRhIHJlZ2lzdGVycyAqLworI2RlZmluZSBUVlA1MTUwX1ZJVENfREFUQV9SRUc1ICAgICAgMHhhYiAvKiBWSVRDIGRhdGEgcmVnaXN0ZXJzICovCisjZGVmaW5lIFRWUDUxNTBfVklUQ19EQVRBX1JFRzYgICAgICAweGFjIC8qIFZJVEMgZGF0YSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVFZQNTE1MF9WSVRDX0RBVEFfUkVHNyAgICAgIDB4YWQgLyogVklUQyBkYXRhIHJlZ2lzdGVycyAqLworI2RlZmluZSBUVlA1MTUwX1ZJVENfREFUQV9SRUc4ICAgICAgMHhhZSAvKiBWSVRDIGRhdGEgcmVnaXN0ZXJzICovCisjZGVmaW5lIFRWUDUxNTBfVklUQ19EQVRBX1JFRzkgICAgICAweGFmIC8qIFZJVEMgZGF0YSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVFZQNTE1MF9WQklfRklGT19SRUFEX0RBVEEgIDB4YjAgLyogVkJJIEZJRk8gcmVhZCBkYXRhICovCisjZGVmaW5lIFRWUDUxNTBfVEVMRVRFWFRfRklMXzFfMSAgICAweGIxIC8qIFRlbGV0ZXh0IGZpbHRlciAxICovCisjZGVmaW5lIFRWUDUxNTBfVEVMRVRFWFRfRklMXzFfMiAgICAweGIyIC8qIFRlbGV0ZXh0IGZpbHRlciAxICovCisjZGVmaW5lIFRWUDUxNTBfVEVMRVRFWFRfRklMXzFfMyAgICAweGIzIC8qIFRlbGV0ZXh0IGZpbHRlciAxICovCisjZGVmaW5lIFRWUDUxNTBfVEVMRVRFWFRfRklMXzFfNCAgICAweGI0IC8qIFRlbGV0ZXh0IGZpbHRlciAxICovCisjZGVmaW5lIFRWUDUxNTBfVEVMRVRFWFRfRklMXzFfNSAgICAweGI1IC8qIFRlbGV0ZXh0IGZpbHRlciAxICovCisjZGVmaW5lIFRWUDUxNTBfVEVMRVRFWFRfRklMXzJfMSAgICAweGI2IC8qIFRlbGV0ZXh0IGZpbHRlciAyICovCisjZGVmaW5lIFRWUDUxNTBfVEVMRVRFWFRfRklMXzJfMiAgICAweGI3IC8qIFRlbGV0ZXh0IGZpbHRlciAyICovCisjZGVmaW5lIFRWUDUxNTBfVEVMRVRFWFRfRklMXzJfMyAgICAweGI4IC8qIFRlbGV0ZXh0IGZpbHRlciAyICovCisjZGVmaW5lIFRWUDUxNTBfVEVMRVRFWFRfRklMXzJfNCAgICAweGI5IC8qIFRlbGV0ZXh0IGZpbHRlciAyICovCisjZGVmaW5lIFRWUDUxNTBfVEVMRVRFWFRfRklMXzJfNSAgICAweGJhIC8qIFRlbGV0ZXh0IGZpbHRlciAyICovCisjZGVmaW5lIFRWUDUxNTBfVEVMRVRFWFRfRklMX0VOQSAgICAweGJiIC8qIFRlbGV0ZXh0IGZpbHRlciBlbmFibGUgKi8KKy8qIFJlc2VydmVkCUJDaC1CRmggKi8KKyNkZWZpbmUgVFZQNTE1MF9JTlRfU1RBVFVTX1JFR19BICAgIDB4YzAgLyogSW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciBBICovCisjZGVmaW5lIFRWUDUxNTBfSU5UX0VOQUJMRV9SRUdfQSAgICAweGMxIC8qIEludGVycnVwdCBlbmFibGUgcmVnaXN0ZXIgQSAqLworI2RlZmluZSBUVlA1MTUwX0lOVF9DT05GICAgICAgICAgICAgMHhjMiAvKiBJbnRlcnJ1cHQgY29uZmlndXJhdGlvbiAqLworI2RlZmluZSBUVlA1MTUwX1ZEUF9DT05GX1JBTV9EQVRBICAgMHhjMyAvKiBWRFAgY29uZmlndXJhdGlvbiBSQU0gZGF0YSAqLworI2RlZmluZSBUVlA1MTUwX0NPTkZfUkFNX0FERFJfTE9XICAgMHhjNCAvKiBDb25maWd1cmF0aW9uIFJBTSBhZGRyZXNzIGxvdyBieXRlICovCisjZGVmaW5lIFRWUDUxNTBfQ09ORl9SQU1fQUREUl9ISUdIICAweGM1IC8qIENvbmZpZ3VyYXRpb24gUkFNIGFkZHJlc3MgaGlnaCBieXRlICovCisjZGVmaW5lIFRWUDUxNTBfVkRQX1NUQVRVU19SRUcgICAgICAweGM2IC8qIFZEUCBzdGF0dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgVFZQNTE1MF9GSUZPX1dPUkRfQ09VTlQgICAgIDB4YzcgLyogRklGTyB3b3JkIGNvdW50ICovCisjZGVmaW5lIFRWUDUxNTBfRklGT19JTlRfVEhSRVNIT0xEICAweGM4IC8qIEZJRk8gaW50ZXJydXB0IHRocmVzaG9sZCAqLworI2RlZmluZSBUVlA1MTUwX0ZJRk9fUkVTRVQgICAgICAgICAgMHhjOSAvKiBGSUZPIHJlc2V0ICovCisjZGVmaW5lIFRWUDUxNTBfTElORV9OVU1CRVJfSU5UICAgICAweGNhIC8qIExpbmUgbnVtYmVyIGludGVycnVwdCAqLworI2RlZmluZSBUVlA1MTUwX1BJWF9BTElHTl9SRUdfTE9XICAgMHhjYiAvKiBQaXhlbCBhbGlnbm1lbnQgcmVnaXN0ZXIgbG93IGJ5dGUgKi8KKyNkZWZpbmUgVFZQNTE1MF9QSVhfQUxJR05fUkVHX0hJR0ggIDB4Y2MgLyogUGl4ZWwgYWxpZ25tZW50IHJlZ2lzdGVyIGhpZ2ggYnl0ZSAqLworI2RlZmluZSBUVlA1MTUwX0ZJRk9fT1VUX0NUUkwgICAgICAgMHhjZCAvKiBGSUZPIG91dHB1dCBjb250cm9sICovCisvKiBSZXNlcnZlZAlDRWggKi8KKyNkZWZpbmUgVFZQNTE1MF9GVUxMX0ZJRUxEX0VOQV8xICAgIDB4Y2YgLyogRnVsbCBmaWVsZCBlbmFibGUgMSAqLworI2RlZmluZSBUVlA1MTUwX0ZVTExfRklFTERfRU5BXzIgICAgMHhkMCAvKiBGdWxsIGZpZWxkIGVuYWJsZSAyICovCisjZGVmaW5lIFRWUDUxNTBfTElORV9NT0RFX1JFR18xICAgICAweGQxIC8qIExpbmUgbW9kZSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVFZQNTE1MF9MSU5FX01PREVfUkVHXzIgICAgIDB4ZDIgLyogTGluZSBtb2RlIHJlZ2lzdGVycyAqLworI2RlZmluZSBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfMyAgICAgMHhkMyAvKiBMaW5lIG1vZGUgcmVnaXN0ZXJzICovCisjZGVmaW5lIFRWUDUxNTBfTElORV9NT0RFX1JFR180ICAgICAweGQ0IC8qIExpbmUgbW9kZSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVFZQNTE1MF9MSU5FX01PREVfUkVHXzUgICAgIDB4ZDUgLyogTGluZSBtb2RlIHJlZ2lzdGVycyAqLworI2RlZmluZSBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfNiAgICAgMHhkNiAvKiBMaW5lIG1vZGUgcmVnaXN0ZXJzICovCisjZGVmaW5lIFRWUDUxNTBfTElORV9NT0RFX1JFR183ICAgICAweGQ3IC8qIExpbmUgbW9kZSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVFZQNTE1MF9MSU5FX01PREVfUkVHXzggICAgIDB4ZDggLyogTGluZSBtb2RlIHJlZ2lzdGVycyAqLworI2RlZmluZSBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfOSAgICAgMHhkOSAvKiBMaW5lIG1vZGUgcmVnaXN0ZXJzICovCisjZGVmaW5lIFRWUDUxNTBfTElORV9NT0RFX1JFR18xMCAgICAweGRhIC8qIExpbmUgbW9kZSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVFZQNTE1MF9MSU5FX01PREVfUkVHXzExICAgIDB4ZGIgLyogTGluZSBtb2RlIHJlZ2lzdGVycyAqLworI2RlZmluZSBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfMTIgICAgMHhkYyAvKiBMaW5lIG1vZGUgcmVnaXN0ZXJzICovCisjZGVmaW5lIFRWUDUxNTBfTElORV9NT0RFX1JFR18xMyAgICAweGRkIC8qIExpbmUgbW9kZSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVFZQNTE1MF9MSU5FX01PREVfUkVHXzE0ICAgIDB4ZGUgLyogTGluZSBtb2RlIHJlZ2lzdGVycyAqLworI2RlZmluZSBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfMTUgICAgMHhkZiAvKiBMaW5lIG1vZGUgcmVnaXN0ZXJzICovCisjZGVmaW5lIFRWUDUxNTBfTElORV9NT0RFX1JFR18xNiAgICAweGUwIC8qIExpbmUgbW9kZSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVFZQNTE1MF9MSU5FX01PREVfUkVHXzE3ICAgIDB4ZTEgLyogTGluZSBtb2RlIHJlZ2lzdGVycyAqLworI2RlZmluZSBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfMTggICAgMHhlMiAvKiBMaW5lIG1vZGUgcmVnaXN0ZXJzICovCisjZGVmaW5lIFRWUDUxNTBfTElORV9NT0RFX1JFR18xOSAgICAweGUzIC8qIExpbmUgbW9kZSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVFZQNTE1MF9MSU5FX01PREVfUkVHXzIwICAgIDB4ZTQgLyogTGluZSBtb2RlIHJlZ2lzdGVycyAqLworI2RlZmluZSBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfMjEgICAgMHhlNSAvKiBMaW5lIG1vZGUgcmVnaXN0ZXJzICovCisjZGVmaW5lIFRWUDUxNTBfTElORV9NT0RFX1JFR18yMiAgICAweGU2IC8qIExpbmUgbW9kZSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVFZQNTE1MF9MSU5FX01PREVfUkVHXzIzICAgIDB4ZTcgLyogTGluZSBtb2RlIHJlZ2lzdGVycyAqLworI2RlZmluZSBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfMjQgICAgMHhlOCAvKiBMaW5lIG1vZGUgcmVnaXN0ZXJzICovCisjZGVmaW5lIFRWUDUxNTBfTElORV9NT0RFX1JFR18yNSAgICAweGU5IC8qIExpbmUgbW9kZSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVFZQNTE1MF9MSU5FX01PREVfUkVHXzI3ICAgIDB4ZWEgLyogTGluZSBtb2RlIHJlZ2lzdGVycyAqLworI2RlZmluZSBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfMjggICAgMHhlYiAvKiBMaW5lIG1vZGUgcmVnaXN0ZXJzICovCisjZGVmaW5lIFRWUDUxNTBfTElORV9NT0RFX1JFR18yOSAgICAweGVjIC8qIExpbmUgbW9kZSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVFZQNTE1MF9MSU5FX01PREVfUkVHXzMwICAgIDB4ZWQgLyogTGluZSBtb2RlIHJlZ2lzdGVycyAqLworI2RlZmluZSBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfMzEgICAgMHhlZSAvKiBMaW5lIG1vZGUgcmVnaXN0ZXJzICovCisjZGVmaW5lIFRWUDUxNTBfTElORV9NT0RFX1JFR18zMiAgICAweGVmIC8qIExpbmUgbW9kZSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVFZQNTE1MF9MSU5FX01PREVfUkVHXzMzICAgIDB4ZjAgLyogTGluZSBtb2RlIHJlZ2lzdGVycyAqLworI2RlZmluZSBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfMzQgICAgMHhmMSAvKiBMaW5lIG1vZGUgcmVnaXN0ZXJzICovCisjZGVmaW5lIFRWUDUxNTBfTElORV9NT0RFX1JFR18zNSAgICAweGYyIC8qIExpbmUgbW9kZSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVFZQNTE1MF9MSU5FX01PREVfUkVHXzM2ICAgIDB4ZjMgLyogTGluZSBtb2RlIHJlZ2lzdGVycyAqLworI2RlZmluZSBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfMzcgICAgMHhmNCAvKiBMaW5lIG1vZGUgcmVnaXN0ZXJzICovCisjZGVmaW5lIFRWUDUxNTBfTElORV9NT0RFX1JFR18zOCAgICAweGY1IC8qIExpbmUgbW9kZSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVFZQNTE1MF9MSU5FX01PREVfUkVHXzM5ICAgIDB4ZjYgLyogTGluZSBtb2RlIHJlZ2lzdGVycyAqLworI2RlZmluZSBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfNDAgICAgMHhmNyAvKiBMaW5lIG1vZGUgcmVnaXN0ZXJzICovCisjZGVmaW5lIFRWUDUxNTBfTElORV9NT0RFX1JFR180MSAgICAweGY4IC8qIExpbmUgbW9kZSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVFZQNTE1MF9MSU5FX01PREVfUkVHXzQyICAgIDB4ZjkgLyogTGluZSBtb2RlIHJlZ2lzdGVycyAqLworI2RlZmluZSBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfNDMgICAgMHhmYSAvKiBMaW5lIG1vZGUgcmVnaXN0ZXJzICovCisjZGVmaW5lIFRWUDUxNTBfTElORV9NT0RFX1JFR180NCAgICAweGZiIC8qIExpbmUgbW9kZSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVFZQNTE1MF9GVUxMX0ZJRUxEX01PREVfUkVHIDB4ZmMgLyogRnVsbCBmaWVsZCBtb2RlIHJlZ2lzdGVyICovCisvKiBSZXNlcnZlZAlGRGgtRkZoICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDEtY29tcGF0LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDEtY29tcGF0LmMKaW5kZXggZDY3OWNhMi4uNDEzNDU0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwxLWNvbXBhdC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMS1jb21wYXQuYwpAQCAtNzA4LDcgKzcwOCw3IEBACiAJfQogCWNhc2UgVklESU9DR0ZSRVE6IC8qICBnZXQgZnJlcXVlbmN5ICAqLwogCXsKLQkJaW50ICpmcmVxID0gYXJnOworCQl1bnNpZ25lZCBsb25nICpmcmVxID0gYXJnOwogCiAJCWZyZXEyLnR1bmVyID0gMDsKIAkJZXJyID0gZHJ2KGlub2RlLCBmaWxlLCBWSURJT0NfR19GUkVRVUVOQ1ksICZmcmVxMik7CkBAIC03MjAsNyArNzIwLDcgQEAKIAl9CiAJY2FzZSBWSURJT0NTRlJFUTogLyogIHNldCBmcmVxdWVuY3kgICovCiAJewotCQlpbnQgKmZyZXEgPSBhcmc7CisJCXVuc2lnbmVkIGxvbmcgKmZyZXEgPSBhcmc7CiAKIAkJZnJlcTIudHVuZXIgPSAwOwogCQlkcnYoaW5vZGUsIGZpbGUsIFZJRElPQ19HX0ZSRVFVRU5DWSwgJmZyZXEyKTsKQEAgLTk2MCw3ICs5NjAsNyBAQAogCQlmbXQtPnN0YXJ0WzFdICAgICAgICAgPSBmbXQyLT5mbXQudmJpLnN0YXJ0WzFdOwogCQlmbXQtPmNvdW50WzFdICAgICAgICAgPSBmbXQyLT5mbXQudmJpLmNvdW50WzFdOwogCQlmbXQtPmZsYWdzICAgICAgICAgICAgPSBmbXQyLT5mbXQudmJpLmZsYWdzICYgMHgwMzsKLSAgICAgICAgICAgICAgICBicmVhazsKKwkJYnJlYWs7CiAJfQogCWNhc2UgVklESU9DU1ZCSUZNVDoKIAl7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvLWJ1Zi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92aWRlby1idWYuYwppbmRleCA1NzRiOGUzLi5hY2ZkM2ExIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvLWJ1Zi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW8tYnVmLmMKQEAgLTE0Nyw3ICsxNDcsNyBAQAogCQlkYXRhLHNpemUsZG1hLT5ucl9wYWdlcyk7CiAKIAlkb3duX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7Ci0gICAgICAgIGVyciA9IGdldF91c2VyX3BhZ2VzKGN1cnJlbnQsY3VycmVudC0+bW0sCisJZXJyID0gZ2V0X3VzZXJfcGFnZXMoY3VycmVudCxjdXJyZW50LT5tbSwKIAkJCSAgICAgZGF0YSAmIFBBR0VfTUFTSywgZG1hLT5ucl9wYWdlcywKIAkJCSAgICAgcncgPT0gUkVBRCwgMSwgLyogZm9yY2UgKi8KIAkJCSAgICAgZG1hLT5wYWdlcywgTlVMTCk7CkBAIC03NTAsOSArNzUwLDkgQEAKIHsKIAllbnVtIHY0bDJfZmllbGQgZmllbGQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLSAgICAgICAgaW50IHJldHZhbDsKKwlpbnQgcmV0dmFsOwogCi0gICAgICAgIC8qIHNldHVwIHN0dWZmICovCisJLyogc2V0dXAgc3R1ZmYgKi8KIAlyZXR2YWwgPSAtRU5PTUVNOwogCXEtPnJlYWRfYnVmID0gdmlkZW9idWZfYWxsb2MocS0+bXNpemUpOwogCWlmIChOVUxMID09IHEtPnJlYWRfYnVmKQpAQCAtNzYwLDE4ICs3NjAsMTggQEAKIAogCXEtPnJlYWRfYnVmLT5tZW1vcnkgPSBWNEwyX01FTU9SWV9VU0VSUFRSOwogCXEtPnJlYWRfYnVmLT5iYWRkciAgPSAodW5zaWduZWQgbG9uZylkYXRhOwotICAgICAgICBxLT5yZWFkX2J1Zi0+YnNpemUgID0gY291bnQ7CisJcS0+cmVhZF9idWYtPmJzaXplICA9IGNvdW50OwogCWZpZWxkID0gdmlkZW9idWZfbmV4dF9maWVsZChxKTsKIAlyZXR2YWwgPSBxLT5vcHMtPmJ1Zl9wcmVwYXJlKHEscS0+cmVhZF9idWYsZmllbGQpOwogCWlmICgwICE9IHJldHZhbCkKIAkJZ290byBkb25lOwogCi0gICAgICAgIC8qIHN0YXJ0IGNhcHR1cmUgJiB3YWl0ICovCisJLyogc3RhcnQgY2FwdHVyZSAmIHdhaXQgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZShxLT5pcnFsb2NrLGZsYWdzKTsKIAlxLT5vcHMtPmJ1Zl9xdWV1ZShxLHEtPnJlYWRfYnVmKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKHEtPmlycWxvY2ssZmxhZ3MpOwotICAgICAgICByZXR2YWwgPSB2aWRlb2J1Zl93YWl0b24ocS0+cmVhZF9idWYsMCwwKTsKLSAgICAgICAgaWYgKDAgPT0gcmV0dmFsKSB7CisJcmV0dmFsID0gdmlkZW9idWZfd2FpdG9uKHEtPnJlYWRfYnVmLDAsMCk7CisJaWYgKDAgPT0gcmV0dmFsKSB7CiAJCXZpZGVvYnVmX2RtYV9wY2lfc3luYyhxLT5wY2ksJnEtPnJlYWRfYnVmLT5kbWEpOwogCQlpZiAoU1RBVEVfRVJST1IgPT0gcS0+cmVhZF9idWYtPnN0YXRlKQogCQkJcmV0dmFsID0gLUVJTzsKQEAgLTgyOCw3ICs4MjgsNyBAQAogCX0KIAogCS8qIHdhaXQgdW50aWwgY2FwdHVyZSBpcyBkb25lICovCi0gICAgICAgIHJldHZhbCA9IHZpZGVvYnVmX3dhaXRvbihxLT5yZWFkX2J1Ziwgbm9uYmxvY2tpbmcsIDEpOworCXJldHZhbCA9IHZpZGVvYnVmX3dhaXRvbihxLT5yZWFkX2J1Ziwgbm9uYmxvY2tpbmcsIDEpOwogCWlmICgwICE9IHJldHZhbCkKIAkJZ290byBkb25lOwogCXZpZGVvYnVmX2RtYV9wY2lfc3luYyhxLT5wY2ksJnEtPnJlYWRfYnVmLT5kbWEpOwpAQCAtMTA5Niw3ICsxMDk2LDcgQEAKIAogCWRwcmludGsoMywibm9wYWdlOiBmYXVsdCBAICUwOGx4IFt2bWEgJTA4bHgtJTA4bHhdXG4iLAogCQl2YWRkcix2bWEtPnZtX3N0YXJ0LHZtYS0+dm1fZW5kKTsKLSAgICAgICAgaWYgKHZhZGRyID4gdm1hLT52bV9lbmQpCisJaWYgKHZhZGRyID4gdm1hLT52bV9lbmQpCiAJCXJldHVybiBOT1BBR0VfU0lHQlVTOwogCXBhZ2UgPSBhbGxvY19wYWdlKEdGUF9VU0VSKTsKIAlpZiAoIXBhZ2UpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3dtODc3NS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby93bTg3NzUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmYyODYyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby93bTg3NzUuYwpAQCAtMCwwICsxLDI1NCBAQAorLyoKKyAqIHdtODc3NSAtIGRyaXZlciB2ZXJzaW9uIDAuMC4xCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0IFVsZiBFa2x1bmQgPGl2dHYgYXQgZWtsdW5kLnRvPgorICoKKyAqIEJhc2VkIG9uIHNhYTcxMTUgZHJpdmVyCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLWlkLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KKyNpbmNsdWRlIDxtZWRpYS9hdWRpb2NoaXAuaD4KKworTU9EVUxFX0RFU0NSSVBUSU9OKCJ3bTg3NzUgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJVbGYgRWtsdW5kIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKyNkZWZpbmUgd204Nzc1X2VycihmbXQsIGFyZy4uLikgZG8geyBcCisJcHJpbnRrKEtFUk5fRVJSICIlcyAlZC0lMDR4OiAiIGZtdCwgY2xpZW50LT5kcml2ZXItPm5hbWUsIFwKKwkgICAgICAgaTJjX2FkYXB0ZXJfaWQoY2xpZW50LT5hZGFwdGVyKSwgY2xpZW50LT5hZGRyICwgIyMgYXJnKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgd204Nzc1X2luZm8oZm10LCBhcmcuLi4pIGRvIHsgXAorCXByaW50ayhLRVJOX0lORk8gIiVzICVkLSUwNHg6ICIgZm10LCBjbGllbnQtPmRyaXZlci0+bmFtZSwgXAorCSAgICAgICBpMmNfYWRhcHRlcl9pZChjbGllbnQtPmFkYXB0ZXIpLCBjbGllbnQtPmFkZHIgLCAjIyBhcmcpOyB9IHdoaWxlICgwKQorCisKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4MzYgPj4gMSwgSTJDX0NMSUVOVF9FTkQgfTsKKworCitJMkNfQ0xJRU5UX0lOU01PRDsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworZW51bSB7CisJUjcgPSA3LCBSMTEgPSAxMSwKKwlSMTIsIFIxMywgUjE0LCBSMTUsIFIxNiwgUjE3LCBSMTgsIFIxOSwgUjIwLCBSMjEsIFIyMyA9IDIzLAorCVRPVF9SRUdTCit9OworCitzdHJ1Y3Qgd204Nzc1X3N0YXRlIHsKKwl1OCBpbnB1dDsJCS8qIExhc3Qgc2VsZWN0ZWQgaW5wdXQgKDAtMHhmKSAqLworCXU4IG11dGVkOworfTsKKworc3RhdGljIGludCB3bTg3NzVfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IHJlZywgdTE2IHZhbCkKK3sKKwlpbnQgaTsKKworCWlmIChyZWcgPCAwIHx8IHJlZyA+PSBUT1RfUkVHUykgeworCQl3bTg3NzVfZXJyKCJJbnZhbGlkIHJlZ2lzdGVyIFIlZFxuIiwgcmVnKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJaWYgKGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCAocmVnIDw8IDEpIHwKKwkJCQkJKHZhbCA+PiA4KSwgdmFsICYgMHhmZikgPT0gMCkgeworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJd204Nzc1X2VycigiSTJDOiBjYW5ub3Qgd3JpdGUgJTAzeCB0byByZWdpc3RlciBSJWRcbiIsIHZhbCwgcmVnKTsKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgd204Nzc1X2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgaW50IGNtZCwKKwkJCSAgdm9pZCAqYXJnKQoreworCXN0cnVjdCB3bTg3NzVfc3RhdGUgKnN0YXRlID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJaW50ICppbnB1dCA9IGFyZzsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBBVURDX1NFVF9JTlBVVDoKKwkJd204Nzc1X3dyaXRlKGNsaWVudCwgUjIxLCAweDBjMCk7CisJCXdtODc3NV93cml0ZShjbGllbnQsIFIxNCwgMHgxZDQpOworCQl3bTg3NzVfd3JpdGUoY2xpZW50LCBSMTUsIDB4MWQ0KTsKKworCQlpZiAoKmlucHV0ID09IEFVRElPX1JBRElPKSB7CisJCQl3bTg3NzVfd3JpdGUoY2xpZW50LCBSMjEsIDB4MTA4KTsKKwkJCXN0YXRlLT5pbnB1dCA9IDg7CisJCQlzdGF0ZS0+bXV0ZWQgPSAwOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKCppbnB1dCA9PSBBVURJT19NVVRFKSB7CisJCQlzdGF0ZS0+bXV0ZWQgPSAxOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKCppbnB1dCA9PSBBVURJT19VTk1VVEUpIHsKKwkJCXdtODc3NV93cml0ZShjbGllbnQsIFIyMSwgMHgxMDAgKyBzdGF0ZS0+aW5wdXQpOworCQkJc3RhdGUtPm11dGVkID0gMDsKKwkJCWJyZWFrOworCQl9CisJCS8qIEFsbCBvdGhlciBpbnB1dHMuLi4gKi8KKwkJd204Nzc1X3dyaXRlKGNsaWVudCwgUjIxLCAweDEwMik7CisJCXN0YXRlLT5pbnB1dCA9IDI7CisJCXN0YXRlLT5tdXRlZCA9IDA7CisJCWJyZWFrOworCisJY2FzZSBWSURJT0NfTE9HX1NUQVRVUzoKKwkJd204Nzc1X2luZm8oIklucHV0OiAlcyVzXG4iLAorCQkJICAgIHN0YXRlLT5pbnB1dCA9PSA4ID8gInJhZGlvIiA6ICJkZWZhdWx0IiwKKwkJCSAgICBzdGF0ZS0+bXV0ZWQgPyAiIChtdXRlZCkiIDogIiIpOworCQlicmVhazsKKworCWNhc2UgVklESU9DX1NfRlJFUVVFTkNZOgorCQkvKiBJZiBJIHJlbW92ZSB0aGlzLCB0aGVuIGl0IGNhbiBoYXBwZW4gdGhhdCBJIGhhdmUgbm8KKwkJICAgc291bmQgdGhlIGZpcnN0IHRpbWUgSSB0dW5lIGZyb20gc3RhdGljIHRvIGEgdmFsaWQgY2hhbm5lbC4KKwkJICAgSXQncyBkaWZmaWN1bHQgdG8gcmVwcm9kdWNlIGFuZCBpcyBhbG1vc3QgY2VydGFpbmx5IHJlbGF0ZWQKKwkJICAgdG8gdGhlIHplcm8gY3Jvc3MgZGV0ZWN0IGNpcmN1aXQuICovCisJCXdtODc3NV93cml0ZShjbGllbnQsIFIyMSwgMHgwYzApOworCQl3bTg3NzVfd3JpdGUoY2xpZW50LCBSMTQsIDB4MWQ0KTsKKwkJd204Nzc1X3dyaXRlKGNsaWVudCwgUjE1LCAweDFkNCk7CisJCXdtODc3NV93cml0ZShjbGllbnQsIFIyMSwgMHgxMDAgKyBzdGF0ZS0+aW5wdXQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogaTJjIGltcGxlbWVudGF0aW9uICovCisKKy8qCisgKiBHZW5lcmljIGkyYyBwcm9iZQorICogY29uY2VybmluZyB0aGUgYWRkcmVzc2VzOiBpMmMgd2FudHMgNyBiaXQgKHdpdGhvdXQgdGhlIHIvdyBiaXQpLCBzbyAnPj4xJworICovCisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBpMmNfZHJpdmVyOworCitzdGF0aWMgaW50IHdtODc3NV9hdHRhY2goc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkcmVzcywgaW50IGtpbmQpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKKwlzdHJ1Y3Qgd204Nzc1X3N0YXRlICpzdGF0ZTsKKworCS8qIENoZWNrIGlmIHRoZSBhZGFwdGVyIHN1cHBvcnRzIHRoZSBuZWVkZWQgZmVhdHVyZXMgKi8KKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCisJCXJldHVybiAwOworCisJY2xpZW50ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGkyY19jbGllbnQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY2xpZW50ID09IDApCisJCXJldHVybiAtRU5PTUVNOworCisJbWVtc2V0KGNsaWVudCwgMCwgc2l6ZW9mKHN0cnVjdCBpMmNfY2xpZW50KSk7CisJY2xpZW50LT5hZGRyID0gYWRkcmVzczsKKwljbGllbnQtPmFkYXB0ZXIgPSBhZGFwdGVyOworCWNsaWVudC0+ZHJpdmVyID0gJmkyY19kcml2ZXI7CisJY2xpZW50LT5mbGFncyA9IEkyQ19DTElFTlRfQUxMT1dfVVNFOworCXNucHJpbnRmKGNsaWVudC0+bmFtZSwgc2l6ZW9mKGNsaWVudC0+bmFtZSkgLSAxLCAid204Nzc1Iik7CisKKwl3bTg3NzVfaW5mbygiY2hpcCBmb3VuZCBAIDB4JXggKCVzKVxuIiwgYWRkcmVzcyA8PCAxLCBhZGFwdGVyLT5uYW1lKTsKKworCXN0YXRlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHdtODc3NV9zdGF0ZSksIEdGUF9LRVJORUwpOworCWlmIChzdGF0ZSA9PSBOVUxMKSB7CisJCWtmcmVlKGNsaWVudCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlzdGF0ZS0+aW5wdXQgPSAyOworCXN0YXRlLT5tdXRlZCA9IDA7CisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgc3RhdGUpOworCisJLyogaW5pdGlhbGl6ZSB3bTg3NzUgKi8KKwl3bTg3NzVfd3JpdGUoY2xpZW50LCBSMjMsIDB4MDAwKTsJLyogUkVTRVQgKi8KKwl3bTg3NzVfd3JpdGUoY2xpZW50LCBSNywgMHgwMDApOwkvKiBEaXNhYmxlIHplcm8gY3Jvc3MgZGV0ZWN0IHRpbWVvdXQgKi8KKwl3bTg3NzVfd3JpdGUoY2xpZW50LCBSMTEsIDB4MDIxKTsJLyogTGVmdCBqdXN0aWZpZWQsIDI0LWJpdCBtb2RlICovCisJd204Nzc1X3dyaXRlKGNsaWVudCwgUjEyLCAweDEwMik7CS8qIE1hc3RlciBtb2RlLCBjbG9jayByYXRpbyAyNTZmcyAqLworCXdtODc3NV93cml0ZShjbGllbnQsIFIxMywgMHgwMDApOwkvKiBQb3dlcmVkIHVwICovCisJd204Nzc1X3dyaXRlKGNsaWVudCwgUjE0LCAweDFkNCk7CS8qIEFEQyBnYWluICsyLjVkQiwgZW5hYmxlIHplcm8gY3Jvc3MgKi8KKwl3bTg3NzVfd3JpdGUoY2xpZW50LCBSMTUsIDB4MWQ0KTsJLyogQURDIGdhaW4gKzIuNWRCLCBlbmFibGUgemVybyBjcm9zcyAqLworCXdtODc3NV93cml0ZShjbGllbnQsIFIxNiwgMHgxYmYpOwkvKiBBTEMgU3RlcmVvLCBBTEMgdGFyZ2V0IGxldmVsIC0xZEIgRlMgKi8KKwkvKiBtYXggZ2FpbiArOGRCICovCisJd204Nzc1X3dyaXRlKGNsaWVudCwgUjE3LCAweDE4NSk7CS8qIEVuYWJsZSBnYWluIGNvbnRyb2wsIHVzZSB6ZXJvIGNyb3NzICovCisJLyogZGV0ZWN0aW9uLCBBTEMgaG9sZCB0aW1lIDQyLjYgbXMgKi8KKwl3bTg3NzVfd3JpdGUoY2xpZW50LCBSMTgsIDB4MGEyKTsJLyogQUxDIGdhaW4gcmFtcCB1cCBkZWxheSAzNCBzLCAqLworCS8qIEFMQyBnYWluIHJhbXAgZG93biBkZWxheSAzMyBtcyAqLworCXdtODc3NV93cml0ZShjbGllbnQsIFIxOSwgMHgwMDUpOwkvKiBFbmFibGUgbm9pc2UgZ2F0ZSwgdGhyZXNob2xkIC03MmRCZnMgKi8KKwl3bTg3NzVfd3JpdGUoY2xpZW50LCBSMjAsIDB4MDdhKTsJLyogVHJhbnNpZW50IHdpbmRvdyA0bXMsIGxvd2VyIFBHQSBnYWluICovCisJLyogbGltaXQgLTFkQiAqLworCXdtODc3NV93cml0ZShjbGllbnQsIFIyMSwgMHgxMDIpOwkvKiBMUkJPVEggPSAxLCB1c2UgaW5wdXQgMi4gKi8KKwlpMmNfYXR0YWNoX2NsaWVudChjbGllbnQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204Nzc1X3Byb2JlKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKK3sKKyNpZmRlZiBJMkNfQ0xBU1NfVFZfQU5BTE9HCisJaWYgKGFkYXB0ZXItPmNsYXNzICYgSTJDX0NMQVNTX1RWX0FOQUxPRykKKyNlbHNlCisJaWYgKGFkYXB0ZXItPmlkID09IEkyQ19IV19CX0JUODQ4KQorI2VuZGlmCisJCXJldHVybiBpMmNfcHJvYmUoYWRhcHRlciwgJmFkZHJfZGF0YSwgd204Nzc1X2F0dGFjaCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204Nzc1X2RldGFjaChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCWludCBlcnI7CisKKwllcnIgPSBpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpOworCWlmIChlcnIpIHsKKwkJcmV0dXJuIGVycjsKKwl9CisJa2ZyZWUoY2xpZW50KTsKKworCXJldHVybiAwOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBpMmMgaW1wbGVtZW50YXRpb24gKi8KK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBpMmNfZHJpdmVyID0geworCS5uYW1lID0gIndtODc3NSIsCisKKwkuaWQgPSBJMkNfRFJJVkVSSURfV004Nzc1LAorCS5mbGFncyA9IEkyQ19ERl9OT1RJRlksCisKKwkuYXR0YWNoX2FkYXB0ZXIgPSB3bTg3NzVfcHJvYmUsCisJLmRldGFjaF9jbGllbnQgPSB3bTg3NzVfZGV0YWNoLAorCS5jb21tYW5kID0gd204Nzc1X2NvbW1hbmQsCisJLm93bmVyID0gVEhJU19NT0RVTEUsCit9OworCisKK3N0YXRpYyBpbnQgX19pbml0IHdtODc3NV9pbml0X21vZHVsZSh2b2lkKQoreworCXJldHVybiBpMmNfYWRkX2RyaXZlcigmaTJjX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB3bTg3NzVfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwlpMmNfZGVsX2RyaXZlcigmaTJjX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHdtODc3NV9pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdCh3bTg3NzVfY2xlYW51cF9tb2R1bGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96cjM2MDE2LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pyMzYwMTYuYwppbmRleCBkNDc0MGE4Li40ZWQ4OTg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pyMzYwMTYuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pyMzYwMTYuYwpAQCAtMjYsNyArMjYsNiBAQAogCiAjZGVmaW5lIFpSMDE2X1ZFUlNJT04gInYwLjciCiAKLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8venIzNjA1MC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby96cjM2MDUwLmMKaW5kZXggMTNiMWU3Yi4uMDE0NDU3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby96cjM2MDUwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby96cjM2MDUwLmMKQEAgLTI2LDcgKzI2LDYgQEAKIAogI2RlZmluZSBaUjA1MF9WRVJTSU9OICJ2MC43LjEiCiAKLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8venIzNjA2MC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby96cjM2MDYwLmMKaW5kZXggYjUwZGM0MC4uMTI5NzQ0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby96cjM2MDYwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby96cjM2MDYwLmMKQEAgLTI2LDcgKzI2LDYgQEAKIAogI2RlZmluZSBaUjA2MF9WRVJTSU9OICJ2MC43IgogCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuYyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5jCmluZGV4IDc5MGEyOTMuLjc0MDIyMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5jCkBAIC00Nyw3ICs0Nyw2IEBACiAvKj0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPSovCiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KQEAgLTkyLDkgKzkxLDkgQEAKICAqICBQdWJsaWMgZGF0YS4uLgogICovCiBpbnQgbXB0X2xhbl9pbmRleCA9IC0xOwotaW50IG1wdF9zdG1faW5kZXggPSAtMTsKK3N0YXRpYyBpbnQgbXB0X3N0bV9pbmRleCA9IC0xOwogCi1zdHJ1Y3QgcHJvY19kaXJfZW50cnkgKm1wdF9wcm9jX3Jvb3RfZGlyOworc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqbXB0X3Byb2Nfcm9vdF9kaXI7CiAKICNkZWZpbmUgV0hPSU5JVF9VTktOT1dOCQkweEFBCiAKQEAgLTYyNzIsNyArNjI3MSw2IEBACiBFWFBPUlRfU1lNQk9MKG1wdF9zdXNwZW5kKTsKICNlbmRpZgogRVhQT1JUX1NZTUJPTChpb2NfbGlzdCk7Ci1FWFBPUlRfU1lNQk9MKG1wdF9wcm9jX3Jvb3RfZGlyKTsKIEVYUE9SVF9TWU1CT0wobXB0X3JlZ2lzdGVyKTsKIEVYUE9SVF9TWU1CT0wobXB0X2RlcmVnaXN0ZXIpOwogRVhQT1JUX1NZTUJPTChtcHRfZXZlbnRfcmVnaXN0ZXIpOwpAQCAtNjI5MCw3ICs2Mjg4LDYgQEAKIEVYUE9SVF9TWU1CT0wobXB0X0dldElvY1N0YXRlKTsKIEVYUE9SVF9TWU1CT0wobXB0X3ByaW50X2lvY19zdW1tYXJ5KTsKIEVYUE9SVF9TWU1CT0wobXB0X2xhbl9pbmRleCk7Ci1FWFBPUlRfU1lNQk9MKG1wdF9zdG1faW5kZXgpOwogRVhQT1JUX1NZTUJPTChtcHRfSGFyZFJlc2V0SGFuZGxlcik7CiBFWFBPUlRfU1lNQk9MKG1wdF9jb25maWcpOwogRVhQT1JUX1NZTUJPTChtcHRfdG9vbGJveCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuaCBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5oCmluZGV4IGU3ZWZlYjcuLjhhZDI3N2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5oCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5oCkBAIC00OSw3ICs0OSw2IEBACiAjZGVmaW5lIE1QVEJBU0VfSF9JTkNMVURFRAogLyp7LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0qLwogCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgpAQCAtMTAwNywxMCArMTAwNiw4IEBACiAgKiAgUHVibGljIGRhdGEgZGVjbCdzLi4uCiAgKi8KIGV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkCSAgaW9jX2xpc3Q7Ci1leHRlcm4gc3RydWN0IHByb2NfZGlyX2VudHJ5CSptcHRfcHJvY19yb290X2RpcjsKIAogZXh0ZXJuIGludAkJICBtcHRfbGFuX2luZGV4OwkvKiBuZWVkZWQgYnkgbXB0bGFuLmMgKi8KLWV4dGVybiBpbnQJCSAgbXB0X3N0bV9pbmRleDsJLyogbmVlZGVkIGJ5IG1wdHN0bS5jICovCiAKIC8qPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09Ki8KICNlbmRpZgkJLyogfSBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGN0bC5jIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRjdGwuYwppbmRleCBjYjJkNTlkLi42MDIxMzhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGN0bC5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0Y3RsLmMKQEAgLTQ1LDcgKzQ1LDYgQEAKICovCiAvKj0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPSovCiAKLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0Y3RsLmggYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGN0bC5oCmluZGV4IDI4NzU0YTkuLjUxODk5NmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0Y3RsLmgKKysrIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRjdGwuaApAQCAtNDksNyArNDksNiBAQAogI2RlZmluZSBNUFRDVExfSF9JTkNMVURFRAogLyo9LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0qLwogCi0jaW5jbHVkZSAibGludXgvdmVyc2lvbi5oIgogCiAKIC8qPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09Ki8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0bGFuLmggYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGxhbi5oCmluZGV4IDc1MGUzNDMuLjM3MjZlY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0bGFuLmgKKysrIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRsYW4uaApAQCAtNjYsNyArNjYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KIC8vICNpbmNsdWRlIDxsaW51eC90cmRldmljZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvbWNwLXNhMTF4MC5jIGIvZHJpdmVycy9tZmQvbWNwLXNhMTF4MC5jCmluZGV4IDdkYWEwZWQuLjFlYWI3Y2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL21jcC1zYTExeDAuYworKysgYi9kcml2ZXJzL21mZC9tY3Atc2ExMXgwLmMKQEAgLTEzOCw5ICsxMzgsOCBAQAogCS5kaXNhYmxlCQk9IG1jcF9zYTExeDBfZGlzYWJsZSwKIH07CiAKLXN0YXRpYyBpbnQgbWNwX3NhMTF4MF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IG1jcF9zYTExeDBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJc3RydWN0IG1jcF9wbGF0X2RhdGEgKmRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3QgbWNwICptY3A7CiAJaW50IHJldDsKQEAgLTE2NSw3ICsxNjQsNyBAQAogCW1jcC0+ZG1hX3RlbGNvX3JkCT0gRE1BX1NlcjRNQ1AxUmQ7CiAJbWNwLT5kbWFfdGVsY29fd3IJPSBETUFfU2VyNE1DUDFXcjsKIAotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIG1jcCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbWNwKTsKIAogCWlmIChtYWNoaW5lX2lzX2Fzc2FiZXQoKSkgewogCQlBU1NBQkVUX0JDUl9zZXQoQVNTQUJFVF9CQ1JfQ09ERUNfUlNUKTsKQEAgLTIwMiwyNiArMjAxLDI2IEBACiAKICByZWxlYXNlOgogCXJlbGVhc2VfbWVtX3JlZ2lvbigweDgwMDYwMDAwLCAweDYwKTsKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAogIG91dDoKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IG1jcF9zYTExeDBfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgbWNwX3NhMTF4MF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBtY3AgKm1jcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBtY3AgKm1jcCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOwogCW1jcF9ob3N0X3VucmVnaXN0ZXIobWNwKTsKIAlyZWxlYXNlX21lbV9yZWdpb24oMHg4MDA2MDAwMCwgMHg2MCk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtY3Bfc2ExMXgwX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IG1jcF9zYTExeDBfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlzdHJ1Y3QgbWNwICptY3AgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgbWNwICptY3AgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJcHJpdihtY3ApLT5tY2NyMCA9IFNlcjRNQ0NSMDsKIAlwcml2KG1jcCktPm1jY3IxID0gU2VyNE1DQ1IxOwpAQCAtMjMwLDkgKzIyOSw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbWNwX3NhMTF4MF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBtY3Bfc2ExMXgwX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IG1jcCAqbWNwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IG1jcCAqbWNwID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAogCVNlcjRNQ0NSMSA9IHByaXYobWNwKS0+bWNjcjE7CiAJU2VyNE1DQ1IwID0gcHJpdihtY3ApLT5tY2NyMDsKQEAgLTI0MywxMyArMjQyLDE0IEBACiAvKgogICogVGhlIGRyaXZlciBmb3IgdGhlIFNBMTF4MCBNQ1AgcG9ydC4KICAqLwotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIG1jcF9zYTExeDBfZHJpdmVyID0gewotCS5uYW1lCQk9ICJzYTExeDAtbWNwIiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG1jcF9zYTExeDBfZHJpdmVyID0gewogCS5wcm9iZQkJPSBtY3Bfc2ExMXgwX3Byb2JlLAogCS5yZW1vdmUJCT0gbWNwX3NhMTF4MF9yZW1vdmUsCiAJLnN1c3BlbmQJPSBtY3Bfc2ExMXgwX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBtY3Bfc2ExMXgwX3Jlc3VtZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAic2ExMXgwLW1jcCIsCisJfSwKIH07CiAKIC8qCkBAIC0yNTcsMTIgKzI1NywxMiBAQAogICovCiBzdGF0aWMgaW50IF9faW5pdCBtY3Bfc2ExMXgwX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZtY3Bfc2ExMXgwX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbWNwX3NhMTF4MF9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgbWNwX3NhMTF4MF9leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJm1jcF9zYTExeDBfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbWNwX3NhMTF4MF9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChtY3Bfc2ExMXgwX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2hkcHVmdHJzL2hkcHVfY3B1c3RhdGUuYyBiL2RyaXZlcnMvbWlzYy9oZHB1ZnRycy9oZHB1X2NwdXN0YXRlLmMKaW5kZXggOWM0ZGQ2OC4uMTFhODAxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL2hkcHVmdHJzL2hkcHVfY3B1c3RhdGUuYworKysgYi9kcml2ZXJzL21pc2MvaGRwdWZ0cnMvaGRwdV9jcHVzdGF0ZS5jCkBAIC0xNCw3ICsxNCw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KQEAgLTI3LDggKzI2LDggQEAKIAogI2RlZmluZSBTS1lfQ1BVU1RBVEVfVkVSU0lPTgkJIjEuMSIKIAotc3RhdGljIGludCBoZHB1X2NwdXN0YXRlX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRkZXYpOwotc3RhdGljIGludCBoZHB1X2NwdXN0YXRlX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZGV2KTsKK3N0YXRpYyBpbnQgaGRwdV9jcHVzdGF0ZV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKK3N0YXRpYyBpbnQgaGRwdV9jcHVzdGF0ZV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7CiAKIHN0cnVjdCBjcHVzdGF0ZV90IGNwdXN0YXRlOwogCkBAIC0xNTksMTEgKzE1OCwxMiBAQAogCXJldHVybiBsZW47CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBoZHB1X2NwdXN0YXRlX2RyaXZlciA9IHsKLQkubmFtZSA9IEhEUFVfQ1BVU1RBVEVfTkFNRSwKLQkuYnVzID0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaGRwdV9jcHVzdGF0ZV9kcml2ZXIgPSB7CiAJLnByb2JlID0gaGRwdV9jcHVzdGF0ZV9wcm9iZSwKIAkucmVtb3ZlID0gaGRwdV9jcHVzdGF0ZV9yZW1vdmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSBIRFBVX0NQVVNUQVRFX05BTUUsCisJfSwKIH07CiAKIC8qCkBAIC0xODgsOSArMTg4LDggQEAKIAkmY3B1c3RhdGVfZm9wcwogfTsKIAotc3RhdGljIGludCBoZHB1X2NwdXN0YXRlX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRkZXYpCitzdGF0aWMgaW50IGhkcHVfY3B1c3RhdGVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRkZXYpOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY19kZTsKIAlpbnQgcmV0OwpAQCAtMjE4LDcgKzIxNyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaGRwdV9jcHVzdGF0ZV9yZW1vdmUoc3RydWN0IGRldmljZSAqZGRldikKK3N0YXRpYyBpbnQgaGRwdV9jcHVzdGF0ZV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAogCWNwdXN0YXRlLnNldF9hZGRyID0gTlVMTDsKQEAgLTIzMywxMyArMjMyLDEzIEBACiBzdGF0aWMgaW50IF9faW5pdCBjcHVzdGF0ZV9pbml0KHZvaWQpCiB7CiAJaW50IHJjOwotCXJjID0gZHJpdmVyX3JlZ2lzdGVyKCZoZHB1X2NwdXN0YXRlX2RyaXZlcik7CisJcmMgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmhkcHVfY3B1c3RhdGVfZHJpdmVyKTsKIAlyZXR1cm4gcmM7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBjcHVzdGF0ZV9leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJmhkcHVfY3B1c3RhdGVfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmaGRwdV9jcHVzdGF0ZV9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChjcHVzdGF0ZV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9oZHB1ZnRycy9oZHB1X25leHVzLmMgYi9kcml2ZXJzL21pc2MvaGRwdWZ0cnMvaGRwdV9uZXh1cy5jCmluZGV4IDE2NWYzNDAuLmVhOWQ1ZjIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvaGRwdWZ0cnMvaGRwdV9uZXh1cy5jCisrKyBiL2RyaXZlcnMvbWlzYy9oZHB1ZnRycy9oZHB1X25leHVzLmMKQEAgLTE0LDcgKzE0LDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CkBAIC0yMywxOSArMjIsMjAgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCi1zdGF0aWMgaW50IGhkcHVfbmV4dXNfcHJvYmUoc3RydWN0IGRldmljZSAqZGRldik7Ci1zdGF0aWMgaW50IGhkcHVfbmV4dXNfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRkZXYpOworc3RhdGljIGludCBoZHB1X25leHVzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOworc3RhdGljIGludCBoZHB1X25leHVzX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKIAogc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqaGRwdV9zbG90X2lkOwogc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqaGRwdV9jaGFzc2lzX2lkOwogc3RhdGljIGludCBzbG90X2lkID0gLTE7CiBzdGF0aWMgaW50IGNoYXNzaXNfaWQgPSAtMTsKIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGhkcHVfbmV4dXNfZHJpdmVyID0gewotCS5uYW1lID0gSERQVV9ORVhVU19OQU1FLAotCS5idXMgPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBoZHB1X25leHVzX2RyaXZlciA9IHsKIAkucHJvYmUgPSBoZHB1X25leHVzX3Byb2JlLAogCS5yZW1vdmUgPSBoZHB1X25leHVzX3JlbW92ZSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9IEhEUFVfTkVYVVNfTkFNRSwKKwl9LAogfTsKIAogaW50IGhkcHVfc2xvdF9pZF9yZWFkKGNoYXIgKmJ1ZmZlciwgY2hhciAqKmJ1ZmZlcl9sb2NhdGlvbiwgb2ZmX3Qgb2Zmc2V0LApAQCAtNTYsOSArNTYsOCBAQAogCXJldHVybiBzcHJpbnRmKGJ1ZmZlciwgIiVkXG4iLCBjaGFzc2lzX2lkKTsKIH0KIAotc3RhdGljIGludCBoZHB1X25leHVzX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRkZXYpCitzdGF0aWMgaW50IGhkcHVfbmV4dXNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRkZXYpOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKQEAgLTgxLDcgKzgwLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBoZHB1X25leHVzX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZGV2KQorc3RhdGljIGludCBoZHB1X25leHVzX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXNsb3RfaWQgPSAtMTsKIAljaGFzc2lzX2lkID0gLTE7CkBAIC05NSwxMyArOTQsMTMgQEAKIHN0YXRpYyBpbnQgX19pbml0IG5leHVzX2luaXQodm9pZCkKIHsKIAlpbnQgcmM7Ci0JcmMgPSBkcml2ZXJfcmVnaXN0ZXIoJmhkcHVfbmV4dXNfZHJpdmVyKTsKKwlyYyA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmaGRwdV9uZXh1c19kcml2ZXIpOwogCXJldHVybiByYzsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IG5leHVzX2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmaGRwdV9uZXh1c19kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZoZHB1X25leHVzX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KG5leHVzX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2libWFzbS9pYm1hc20uaCBiL2RyaXZlcnMvbWlzYy9pYm1hc20vaWJtYXNtLmgKaW5kZXggZWNjZTRmZi4uZDdlMjBhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL2libWFzbS9pYm1hc20uaAorKysgYi9kcml2ZXJzL21pc2MvaWJtYXNtL2libWFzbS5oCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvcHhhbWNpLmMgYi9kcml2ZXJzL21tYy9weGFtY2kuYwppbmRleCBmMzFlMjQ3Li5lZThmOGEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9weGFtY2kuYworKysgYi9kcml2ZXJzL21tYy9weGFtY2kuYwpAQCAtNDI4LDkgKzQyOCw4IEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1zdGF0aWMgaW50IHB4YW1jaV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHB4YW1jaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgbW1jX2hvc3QgKm1tYzsKIAlzdHJ1Y3QgcHhhbWNpX2hvc3QgKmhvc3QgPSBOVUxMOwogCXN0cnVjdCByZXNvdXJjZSAqcjsKQEAgLTQ0NSw3ICs0NDQsNyBAQAogCWlmICghcikKIAkJcmV0dXJuIC1FQlVTWTsKIAotCW1tYyA9IG1tY19hbGxvY19ob3N0KHNpemVvZihzdHJ1Y3QgcHhhbWNpX2hvc3QpLCBkZXYpOworCW1tYyA9IG1tY19hbGxvY19ob3N0KHNpemVvZihzdHJ1Y3QgcHhhbWNpX2hvc3QpLCAmcGRldi0+ZGV2KTsKIAlpZiAoIW1tYykgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKQEAgLTQ3NCw3ICs0NzMsNyBAQAogCQkJIGhvc3QtPnBkYXRhLT5vY3JfbWFzayA6CiAJCQkgTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0OwogCi0JaG9zdC0+c2dfY3B1ID0gZG1hX2FsbG9jX2NvaGVyZW50KGRldiwgUEFHRV9TSVpFLCAmaG9zdC0+c2dfZG1hLCBHRlBfS0VSTkVMKTsKKwlob3N0LT5zZ19jcHUgPSBkbWFfYWxsb2NfY29oZXJlbnQoJnBkZXYtPmRldiwgUEFHRV9TSVpFLCAmaG9zdC0+c2dfZG1hLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWhvc3QtPnNnX2NwdSkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKQEAgLTUxMSwxMCArNTEwLDEwIEBACiAJaWYgKHJldCkKIAkJZ290byBvdXQ7CiAKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBtbWMpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG1tYyk7CiAKIAlpZiAoaG9zdC0+cGRhdGEgJiYgaG9zdC0+cGRhdGEtPmluaXQpCi0JCWhvc3QtPnBkYXRhLT5pbml0KGRldiwgcHhhbWNpX2RldGVjdF9pcnEsIG1tYyk7CisJCWhvc3QtPnBkYXRhLT5pbml0KCZwZGV2LT5kZXYsIHB4YW1jaV9kZXRlY3RfaXJxLCBtbWMpOwogCiAJbW1jX2FkZF9ob3N0KG1tYyk7CiAKQEAgLTUyNyw3ICs1MjYsNyBAQAogCQlpZiAoaG9zdC0+YmFzZSkKIAkJCWlvdW5tYXAoaG9zdC0+YmFzZSk7CiAJCWlmIChob3N0LT5zZ19jcHUpCi0JCQlkbWFfZnJlZV9jb2hlcmVudChkZXYsIFBBR0VfU0laRSwgaG9zdC0+c2dfY3B1LCBob3N0LT5zZ19kbWEpOworCQkJZG1hX2ZyZWVfY29oZXJlbnQoJnBkZXYtPmRldiwgUEFHRV9TSVpFLCBob3N0LT5zZ19jcHUsIGhvc3QtPnNnX2RtYSk7CiAJfQogCWlmIChtbWMpCiAJCW1tY19mcmVlX2hvc3QobW1jKTsKQEAgLTUzNSwxNyArNTM0LDE3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBweGFtY2lfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgcHhhbWNpX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBtbWNfaG9zdCAqbW1jID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IG1tY19ob3N0ICptbWMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCiAJaWYgKG1tYykgewogCQlzdHJ1Y3QgcHhhbWNpX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOwogCiAJCWlmIChob3N0LT5wZGF0YSAmJiBob3N0LT5wZGF0YS0+ZXhpdCkKLQkJCWhvc3QtPnBkYXRhLT5leGl0KGRldiwgbW1jKTsKKwkJCWhvc3QtPnBkYXRhLT5leGl0KCZwZGV2LT5kZXYsIG1tYyk7CiAKIAkJbW1jX3JlbW92ZV9ob3N0KG1tYyk7CiAKQEAgLTU2MCw3ICs1NTksNyBAQAogCQlmcmVlX2lycShob3N0LT5pcnEsIGhvc3QpOwogCQlweGFfZnJlZV9kbWEoaG9zdC0+ZG1hKTsKIAkJaW91bm1hcChob3N0LT5iYXNlKTsKLQkJZG1hX2ZyZWVfY29oZXJlbnQoZGV2LCBQQUdFX1NJWkUsIGhvc3QtPnNnX2NwdSwgaG9zdC0+c2dfZG1hKTsKKwkJZG1hX2ZyZWVfY29oZXJlbnQoJnBkZXYtPmRldiwgUEFHRV9TSVpFLCBob3N0LT5zZ19jcHUsIGhvc3QtPnNnX2RtYSk7CiAKIAkJcmVsZWFzZV9yZXNvdXJjZShob3N0LT5yZXMpOwogCkBAIC01NzAsOSArNTY5LDkgQEAKIH0KIAogI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBweGFtY2lfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgcHhhbWNpX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0Jc3RydWN0IG1tY19ob3N0ICptbWMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgbW1jX2hvc3QgKm1tYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAJaW50IHJldCA9IDA7CiAKIAlpZiAobW1jKQpAQCAtNTgxLDkgKzU4MCw5IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBweGFtY2lfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgcHhhbWNpX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IG1tY19ob3N0ICptbWMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgbW1jX2hvc3QgKm1tYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAJaW50IHJldCA9IDA7CiAKIAlpZiAobW1jKQpAQCAtNTk2LDIzICs1OTUsMjQgQEAKICNkZWZpbmUgcHhhbWNpX3Jlc3VtZQlOVUxMCiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHB4YW1jaV9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gRFJJVkVSX05BTUUsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBweGFtY2lfZHJpdmVyID0gewogCS5wcm9iZQkJPSBweGFtY2lfcHJvYmUsCiAJLnJlbW92ZQkJPSBweGFtY2lfcmVtb3ZlLAogCS5zdXNwZW5kCT0gcHhhbWNpX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBweGFtY2lfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9IERSSVZFUl9OQU1FLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBweGFtY2lfaW5pdCh2b2lkKQogewotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJnB4YW1jaV9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnB4YW1jaV9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgcHhhbWNpX2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmcHhhbWNpX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnB4YW1jaV9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChweGFtY2lfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy93YnNkLmMgYi9kcml2ZXJzL21tYy93YnNkLmMKaW5kZXggZTk1NGI4My4uYzdlYjdjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvd2JzZC5jCisrKyBiL2RyaXZlcnMvbW1jL3dic2QuYwpAQCAtNDIsNyArNDIsNyBAQAogI2luY2x1ZGUgIndic2QuaCIKIAogI2RlZmluZSBEUklWRVJfTkFNRSAid2JzZCIKLSNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gIjEuNCIKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gIjEuNSIKIAogI2lmZGVmIENPTkZJR19NTUNfREVCVUcKICNkZWZpbmUgREJHKHguLi4pIFwKQEAgLTE5MzIsMTQgKzE5MzIsMTQgQEAKICAqIE5vbi1QblAKICAqLwogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCB3YnNkX3Byb2JlKHN0cnVjdCBkZXZpY2UqIGRldikKK3N0YXRpYyBpbnQgX19kZXZpbml0IHdic2RfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSogZGV2KQogewotCXJldHVybiB3YnNkX2luaXQoZGV2LCBpbywgaXJxLCBkbWEsIDApOworCXJldHVybiB3YnNkX2luaXQoJmRldi0+ZGV2LCBpbywgaXJxLCBkbWEsIDApOwogfQogCi1zdGF0aWMgaW50IF9fZGV2ZXhpdCB3YnNkX3JlbW92ZShzdHJ1Y3QgZGV2aWNlKiBkZXYpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCB3YnNkX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlKiBkZXYpCiB7Ci0Jd2JzZF9zaHV0ZG93bihkZXYsIDApOworCXdic2Rfc2h1dGRvd24oJmRldi0+ZGV2LCAwKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTk4Myw5ICsxOTgzLDkgQEAKIAogI2lmZGVmIENPTkZJR19QTQogCi1zdGF0aWMgaW50IHdic2Rfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgd2JzZF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCXN0cnVjdCBtbWNfaG9zdCAqbW1jID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IG1tY19ob3N0ICptbWMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCB3YnNkX2hvc3QgKmhvc3Q7CiAJaW50IHJldDsKIApAQCAtMjAwNSw5ICsyMDA1LDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB3YnNkX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHdic2RfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgbW1jX2hvc3QgKm1tYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBtbWNfaG9zdCAqbW1jID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3Qgd2JzZF9ob3N0ICpob3N0OwogCiAJaWYgKCFtbWMpCkBAIC0yMDM4LDE0ICsyMDM4LDE1IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICp3YnNkX2RldmljZTsKIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHdic2RfZHJpdmVyID0gewotCS5uYW1lCQk9IERSSVZFUl9OQU1FLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgd2JzZF9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IHdic2RfcHJvYmUsCi0JLnJlbW92ZQkJPSB3YnNkX3JlbW92ZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHdic2RfcmVtb3ZlKSwKIAogCS5zdXNwZW5kCT0gd2JzZF9zdXNwZW5kLAogCS5yZXN1bWUJCT0gd2JzZF9yZXN1bWUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gRFJJVkVSX05BTUUsCisJfSwKIH07CiAKICNpZmRlZiBDT05GSUdfUE5QCkBAIC0yMDU0LDcgKzIwNTUsNyBAQAogCS5uYW1lCQk9IERSSVZFUl9OQU1FLAogCS5pZF90YWJsZQk9IHBucF9kZXZfdGFibGUsCiAJLnByb2JlCQk9IHdic2RfcG5wX3Byb2JlLAotCS5yZW1vdmUJCT0gd2JzZF9wbnBfcmVtb3ZlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aod2JzZF9wbnBfcmVtb3ZlKSwKIH07CiAKICNlbmRpZiAvKiBDT05GSUdfUE5QICovCkBAIC0yMDg1LDcgKzIwODYsNyBAQAogCiAJaWYgKG5vcG5wKQogCXsKLQkJcmVzdWx0ID0gZHJpdmVyX3JlZ2lzdGVyKCZ3YnNkX2RyaXZlcik7CisJCXJlc3VsdCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmd2JzZF9kcml2ZXIpOwogCQlpZiAocmVzdWx0IDwgMCkKIAkJCXJldHVybiByZXN1bHQ7CiAKQEAgLTIxMTEsNyArMjExMiw3IEBACiAJewogCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcih3YnNkX2RldmljZSk7CiAKLQkJZHJpdmVyX3VucmVnaXN0ZXIoJndic2RfZHJpdmVyKTsKKwkJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJndic2RfZHJpdmVyKTsKIAl9CiAKIAlEQkcoInVubG9hZGVkXG4iKTsKQEAgLTIxMjcsNiArMjEyOCw3IEBACiBtb2R1bGVfcGFyYW0oZG1hLCBpbnQsIDA0NDQpOwogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJQaWVycmUgT3NzbWFuIDxkcnpldXNAZHJ6ZXVzLmN4PiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJXaW5ib25kIFc4M0w1MXhEIFNEL01NQyBjYXJkIGludGVyZmFjZSBkcml2ZXIiKTsKIE1PRFVMRV9WRVJTSU9OKERSSVZFUl9WRVJTSU9OKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDIwLmMgYi9kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMjAuYwppbmRleCBjNGExOWQyLi4wODA3YzFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMjAuYworKysgYi9kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMjAuYwpAQCAtMjAsNyArMjAsNiBAQAogICogCS0gUGx1Z2dlZCBtZW1vcnkgbGVhayBpbiBjZmlfc3RhYV93cml0ZXYoKS4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9kZXZpY2VzL3BtYzU1MS5jIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9wbWM1NTEuYwppbmRleCBkZTQ4YjM1Li42NjZjY2UxIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9kZXZpY2VzL3BtYzU1MS5jCisrKyBiL2RyaXZlcnMvbXRkL2RldmljZXMvcG1jNTUxLmMKQEAgLTgyLDcgKzgyLDYgQEAKICAqICAgICAgICogQ29tYiB0aGUgaW5pdCByb3V0aW5lLiAgSXQncyBzdGlsbCBhIGJpdCBjbHVkZ3kgb24gYSBmZXcgdGhpbmdzLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL2Jhc3QtZmxhc2guYyBiL2RyaXZlcnMvbXRkL21hcHMvYmFzdC1mbGFzaC5jCmluZGV4IGI3ODU4ZWIuLjUxZjk2MmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvYmFzdC1mbGFzaC5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvYmFzdC1mbGFzaC5jCkBAIC02MywxMSArNjMsNiBAQAogCiBzdGF0aWMgY29uc3QgY2hhciAqcHJvYmVzW10gPSB7ICJSZWRCb290IiwgImNtZGxpbmVwYXJ0IiwgTlVMTCB9OwogCi1zdGF0aWMgc3RydWN0IGJhc3RfZmxhc2hfaW5mbyAqdG9fYmFzdF9pbmZvKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gKHN0cnVjdCBiYXN0X2ZsYXNoX2luZm8gKilkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLX0KLQogc3RhdGljIHZvaWQgYmFzdF9mbGFzaF9zZXRydyhpbnQgdG8pCiB7CiAJdW5zaWduZWQgaW50IHZhbDsKQEAgLTg3LDExICs4MiwxMSBAQAogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAotc3RhdGljIGludCBiYXN0X2ZsYXNoX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGJhc3RfZmxhc2hfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IGJhc3RfZmxhc2hfaW5mbyAqaW5mbyA9IHRvX2Jhc3RfaW5mbyhkZXYpOworCXN0cnVjdCBiYXN0X2ZsYXNoX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCiAJaWYgKGluZm8gPT0gTlVMTCkKIAkJcmV0dXJuIDA7CkBAIC0xMTYsOSArMTExLDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBiYXN0X2ZsYXNoX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgYmFzdF9mbGFzaF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgYmFzdF9mbGFzaF9pbmZvICppbmZvOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCWludCBlcnIgPSAwOwpAQCAtMTMxLDEzICsxMjUsMTMgQEAKIAl9CiAKIAltZW16ZXJvKGluZm8sIHNpemVvZigqaW5mbykpOwotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGluZm8pOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGluZm8pOwogCiAJcmVzID0gcGRldi0+cmVzb3VyY2U7ICAvKiBhc3N1bWUgdGhhdCB0aGUgZmxhc2ggaGFzIG9uZSByZXNvdXJjZSAqLwogCiAJaW5mby0+bWFwLnBoeXMgPSByZXMtPnN0YXJ0OwogCWluZm8tPm1hcC5zaXplID0gcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMTsKLQlpbmZvLT5tYXAubmFtZSA9IGRldi0+YnVzX2lkOworCWluZm8tPm1hcC5uYW1lID0gcGRldi0+ZGV2LmJ1c19pZDsJCiAJaW5mby0+bWFwLmJhbmt3aWR0aCA9IDI7CiAKIAlpZiAoaW5mby0+bWFwLnNpemUgPiBBUkVBX01BWFNJWkUpCkBAIC0xOTksMjcgKzE5MywyOCBAQAogCS8qIGZhbGwgdGhyb3VnaCB0byBleGl0IGVycm9yICovCiAKICBleGl0X2Vycm9yOgotCWJhc3RfZmxhc2hfcmVtb3ZlKGRldik7CisJYmFzdF9mbGFzaF9yZW1vdmUocGRldik7CiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGJhc3RfZmxhc2hfZHJpdmVyID0gewotCS5uYW1lCQk9ICJiYXN0LW5vciIsCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYmFzdF9mbGFzaF9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IGJhc3RfZmxhc2hfcHJvYmUsCiAJLnJlbW92ZQkJPSBiYXN0X2ZsYXNoX3JlbW92ZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAiYmFzdC1ub3IiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgYmFzdF9mbGFzaF9pbml0KHZvaWQpCiB7CiAJcHJpbnRrKCJCQVNUIE5PUi1GbGFzaCBEcml2ZXIsIChjKSAyMDA0IFNpbXRlYyBFbGVjdHJvbmljc1xuIik7Ci0JcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmYmFzdF9mbGFzaF9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmJhc3RfZmxhc2hfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGJhc3RfZmxhc2hfZXhpdCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZiYXN0X2ZsYXNoX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmJhc3RfZmxhc2hfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoYmFzdF9mbGFzaF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvZWJvbnkuYyBiL2RyaXZlcnMvbXRkL21hcHMvZWJvbnkuYwppbmRleCBjMGRhZjU4Li42MGE2ZTUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL2Vib255LmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9lYm9ueS5jCkBAIC0yMSw3ICsyMSw2IEBACiAjaW5jbHVkZSA8bGludXgvbXRkL21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9pYm00NHguaD4KICNpbmNsdWRlIDxwbGF0Zm9ybXMvNHh4L2Vib255Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL2ludGVncmF0b3ItZmxhc2guYyBiL2RyaXZlcnMvbXRkL21hcHMvaW50ZWdyYXRvci1mbGFzaC5jCmluZGV4IGZlNzM4ZmQ4Li5hM2JhNTJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL2ludGVncmF0b3ItZmxhc2guYworKysgYi9kcml2ZXJzL210ZC9tYXBzL2ludGVncmF0b3ItZmxhc2guYwpAQCAtNjcsOSArNjcsOCBAQAogCiBzdGF0aWMgY29uc3QgY2hhciAqcHJvYmVzW10gPSB7ICJjbWRsaW5lcGFydCIsICJSZWRCb290IiwgImFmcyIsIE5VTEwgfTsKIAotc3RhdGljIGludCBhcm1mbGFzaF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpfZGV2KQorc3RhdGljIGludCBhcm1mbGFzaF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKF9kZXYpOwogCXN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhICpwbGF0ID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IGRldi0+cmVzb3VyY2U7CiAJdW5zaWduZWQgaW50IHNpemUgPSByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxOwpAQCAtMTM4LDcgKzEzNyw3IEBACiAJfQogCiAJaWYgKGVyciA9PSAwKQotCQlkZXZfc2V0X2RydmRhdGEoJmRldi0+ZGV2LCBpbmZvKTsKKwkJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBpbmZvKTsKIAogCS8qCiAJICogSWYgd2UgZ290IGFuIGVycm9yLCBmcmVlIGFsbCByZXNvdXJjZXMuCkBAIC0xNjMsMTIgKzE2MiwxMSBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgYXJtZmxhc2hfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKl9kZXYpCitzdGF0aWMgaW50IGFybWZsYXNoX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKF9kZXYpOwotCXN0cnVjdCBhcm1mbGFzaF9pbmZvICppbmZvID0gZGV2X2dldF9kcnZkYXRhKCZkZXYtPmRldik7CisJc3RydWN0IGFybWZsYXNoX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCi0JZGV2X3NldF9kcnZkYXRhKCZkZXYtPmRldiwgTlVMTCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKIAogCWlmIChpbmZvKSB7CiAJCWlmIChpbmZvLT5tdGQpIHsKQEAgLTE5MCwyMSArMTg4LDIyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBhcm1mbGFzaF9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gImFybWZsYXNoIiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGFybWZsYXNoX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gYXJtZmxhc2hfcHJvYmUsCiAJLnJlbW92ZQkJPSBhcm1mbGFzaF9yZW1vdmUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gImFybWZsYXNoIiwKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgYXJtZmxhc2hfaW5pdCh2b2lkKQogewotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJmFybWZsYXNoX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYXJtZmxhc2hfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGFybWZsYXNoX2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmYXJtZmxhc2hfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYXJtZmxhc2hfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoYXJtZmxhc2hfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL2l4cDIwMDAuYyBiL2RyaXZlcnMvbXRkL21hcHMvaXhwMjAwMC5jCmluZGV4IDY0MWViMmIuLmZjN2E3OGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvaXhwMjAwMC5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvaXhwMjAwMC5jCkBAIC0xMTEsMTMgKzExMSwxMiBAQAogfQogCiAKLXN0YXRpYyBpbnQgaXhwMjAwMF9mbGFzaF9yZW1vdmUoc3RydWN0IGRldmljZSAqX2RldikKK3N0YXRpYyBpbnQgaXhwMjAwMF9mbGFzaF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiA9IHRvX3BsYXRmb3JtX2RldmljZShfZGV2KTsKIAlzdHJ1Y3QgZmxhc2hfcGxhdGZvcm1fZGF0YSAqcGxhdCA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7Ci0Jc3RydWN0IGl4cDIwMDBfZmxhc2hfaW5mbyAqaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YSgmZGV2LT5kZXYpOworCXN0cnVjdCBpeHAyMDAwX2ZsYXNoX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCi0JZGV2X3NldF9kcnZkYXRhKCZkZXYtPmRldiwgTlVMTCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKIAogCWlmKCFpbmZvKQogCQlyZXR1cm4gMDsKQEAgLTE0MywxMCArMTQyLDkgQEAKIH0KIAogCi1zdGF0aWMgaW50IGl4cDIwMDBfZmxhc2hfcHJvYmUoc3RydWN0IGRldmljZSAqX2RldikKK3N0YXRpYyBpbnQgaXhwMjAwMF9mbGFzaF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RhdGljIGNvbnN0IGNoYXIgKnByb2Jlc1tdID0geyAiUmVkQm9vdCIsICJjbWRsaW5lcGFydCIsIE5VTEwgfTsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoX2Rldik7CiAJc3RydWN0IGl4cDIwMDBfZmxhc2hfZGF0YSAqaXhwX2RhdGEgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhICpwbGF0OwogCXN0cnVjdCBpeHAyMDAwX2ZsYXNoX2luZm8gKmluZm87CkBAIC0xNzcsNyArMTc1LDcgQEAKIAl9CiAJbWVtemVybyhpbmZvLCBzaXplb2Yoc3RydWN0IGl4cDIwMDBfZmxhc2hfaW5mbykpOwogCi0JZGV2X3NldF9kcnZkYXRhKCZkZXYtPmRldiwgaW5mbyk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBpbmZvKTsKIAogCS8qCiAJICogVGVsbCB0aGUgTVREIGxheWVyIHdlJ3JlIG5vdCAxOjEgbWFwcGVkIHNvIHRoYXQgaXQgZG9lcwpAQCAtMjQ4LDI1ICsyNDYsMjYgQEAKIAlyZXR1cm4gMDsKIAogRXJyb3I6Ci0JaXhwMjAwMF9mbGFzaF9yZW1vdmUoX2Rldik7CisJaXhwMjAwMF9mbGFzaF9yZW1vdmUoZGV2KTsKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgaXhwMjAwMF9mbGFzaF9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gIklYUDIwMDAtRmxhc2giLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaXhwMjAwMF9mbGFzaF9kcml2ZXIgPSB7CiAJLnByb2JlCQk9ICZpeHAyMDAwX2ZsYXNoX3Byb2JlLAogCS5yZW1vdmUJCT0gJml4cDIwMDBfZmxhc2hfcmVtb3ZlCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gIklYUDIwMDAtRmxhc2giLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBpeHAyMDAwX2ZsYXNoX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZpeHAyMDAwX2ZsYXNoX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmaXhwMjAwMF9mbGFzaF9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgaXhwMjAwMF9mbGFzaF9leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJml4cDIwMDBfZmxhc2hfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmaXhwMjAwMF9mbGFzaF9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChpeHAyMDAwX2ZsYXNoX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9peHA0eHguYyBiL2RyaXZlcnMvbXRkL21hcHMvaXhwNHh4LmMKaW5kZXggNTZiM2EzNTUuLmE1OWY4MDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvaXhwNHh4LmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9peHA0eHguYwpAQCAtOTksMTMgKzk5LDEyIEBACiAKIHN0YXRpYyBjb25zdCBjaGFyICpwcm9iZXNbXSA9IHsgIlJlZEJvb3QiLCAiY21kbGluZXBhcnQiLCBOVUxMIH07CiAKLXN0YXRpYyBpbnQgaXhwNHh4X2ZsYXNoX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpfZGV2KQorc3RhdGljIGludCBpeHA0eHhfZmxhc2hfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoX2Rldik7CiAJc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEgKnBsYXQgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwotCXN0cnVjdCBpeHA0eHhfZmxhc2hfaW5mbyAqaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YSgmZGV2LT5kZXYpOworCXN0cnVjdCBpeHA0eHhfZmxhc2hfaW5mbyAqaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKLQlkZXZfc2V0X2RydmRhdGEoJmRldi0+ZGV2LCBOVUxMKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOwogCiAJaWYoIWluZm8pCiAJCXJldHVybiAwOwpAQCAtMTMwLDkgKzEyOSw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaXhwNHh4X2ZsYXNoX3Byb2JlKHN0cnVjdCBkZXZpY2UgKl9kZXYpCitzdGF0aWMgaW50IGl4cDR4eF9mbGFzaF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKF9kZXYpOwogCXN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhICpwbGF0ID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3QgaXhwNHh4X2ZsYXNoX2luZm8gKmluZm87CiAJaW50IGVyciA9IC0xOwpAQCAtMTUzLDcgKzE1MSw3IEBACiAJfQogCW1lbXplcm8oaW5mbywgc2l6ZW9mKHN0cnVjdCBpeHA0eHhfZmxhc2hfaW5mbykpOwogCi0JZGV2X3NldF9kcnZkYXRhKCZkZXYtPmRldiwgaW5mbyk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBpbmZvKTsKIAogCS8qCiAJICogVGVsbCB0aGUgTVREIGxheWVyIHdlJ3JlIG5vdCAxOjEgbWFwcGVkIHNvIHRoYXQgaXQgZG9lcwpAQCAtMjE0LDI1ICsyMTIsMjYgQEAKIAlyZXR1cm4gMDsKIAogRXJyb3I6Ci0JaXhwNHh4X2ZsYXNoX3JlbW92ZShfZGV2KTsKKwlpeHA0eHhfZmxhc2hfcmVtb3ZlKGRldik7CiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGl4cDR4eF9mbGFzaF9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gIklYUDRYWC1GbGFzaCIsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBpeHA0eHhfZmxhc2hfZHJpdmVyID0gewogCS5wcm9iZQkJPSBpeHA0eHhfZmxhc2hfcHJvYmUsCiAJLnJlbW92ZQkJPSBpeHA0eHhfZmxhc2hfcmVtb3ZlLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJJWFA0WFgtRmxhc2giLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBpeHA0eHhfZmxhc2hfaW5pdCh2b2lkKQogewotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJml4cDR4eF9mbGFzaF9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJml4cDR4eF9mbGFzaF9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgaXhwNHh4X2ZsYXNoX2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmaXhwNHh4X2ZsYXNoX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJml4cDR4eF9mbGFzaF9kcml2ZXIpOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvb2NvdGVhLmMgYi9kcml2ZXJzL210ZC9tYXBzL29jb3RlYS5jCmluZGV4IDZlNTU5YmMuLmMyMjM1MTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvb2NvdGVhLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9vY290ZWEuYwpAQCAtMTksNyArMTksNiBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9tYXAuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vaWJtNDR4Lmg+CiAjaW5jbHVkZSA8cGxhdGZvcm1zLzR4eC9vY290ZWEuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvb21hcF9ub3IuYyBiL2RyaXZlcnMvbXRkL21hcHMvb21hcF9ub3IuYwppbmRleCBmZDNiNGE1Li40MThhZmZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL29tYXBfbm9yLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9vbWFwX25vci5jCkBAIC03MCwxMSArNzAsMTAgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IG9tYXBmbGFzaF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBvbWFwZmxhc2hfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlpbnQgZXJyOwogCXN0cnVjdCBvbWFwZmxhc2hfaW5mbyAqaW5mbzsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IHJlc291cmNlICpyZXMgPSBwZGV2LT5yZXNvdXJjZTsKIAl1bnNpZ25lZCBsb25nIHNpemUgPSByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxOwpAQCAtMTE5LDcgKzExOCw3IEBACiAjZW5kaWYKIAkJYWRkX210ZF9kZXZpY2UoaW5mby0+bXRkKTsKIAotCWRldl9zZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2LCBpbmZvKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBpbmZvKTsKIAogCXJldHVybiAwOwogCkBAIC0xMzMsMTIgKzEzMiwxMSBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZleGl0IG9tYXBmbGFzaF9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBfX2RldmV4aXQgb21hcGZsYXNoX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKLQlzdHJ1Y3Qgb21hcGZsYXNoX2luZm8gKmluZm8gPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CisJc3RydWN0IG9tYXBmbGFzaF9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKLQlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgTlVMTCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAKIAlpZiAoaW5mbykgewogCQlpZiAoaW5mby0+cGFydHMpIHsKQEAgLTE1NSwyMSArMTUzLDIyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBvbWFwZmxhc2hfZHJpdmVyID0gewotCS5uYW1lCT0gIm9tYXBmbGFzaCIsCi0JLmJ1cwk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG9tYXBmbGFzaF9kcml2ZXIgPSB7CiAJLnByb2JlCT0gb21hcGZsYXNoX3Byb2JlLAogCS5yZW1vdmUJPSBfX2RldmV4aXRfcChvbWFwZmxhc2hfcmVtb3ZlKSwKKwkuZHJpdmVyID0geworCQkubmFtZQk9ICJvbWFwZmxhc2giLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBvbWFwZmxhc2hfaW5pdCh2b2lkKQogewotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJm9tYXBmbGFzaF9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm9tYXBmbGFzaF9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgb21hcGZsYXNoX2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3Rlcigmb21hcGZsYXNoX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm9tYXBmbGFzaF9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChvbWFwZmxhc2hfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL3BsYXQtcmFtLmMgYi9kcml2ZXJzL210ZC9tYXBzL3BsYXQtcmFtLmMKaW5kZXggYTAyZWVkOS4uNWQzYzc1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9wbGF0LXJhbS5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvcGxhdC1yYW0uYwpAQCAtNTYsOSArNTYsOSBAQAogICogZGV2aWNlIHByaXZhdGUgZGF0YSB0byBzdHJ1Y3QgcGxhdHJhbV9pbmZvIGNvbnZlcnNpb24KICovCiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHBsYXRyYW1faW5mbyAqdG9fcGxhdHJhbV9pbmZvKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBsYXRyYW1faW5mbyAqdG9fcGxhdHJhbV9pbmZvKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlyZXR1cm4gKHN0cnVjdCBwbGF0cmFtX2luZm8gKilkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlyZXR1cm4gKHN0cnVjdCBwbGF0cmFtX2luZm8gKilwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogfQogCiAvKiBwbGF0cmFtX3NldHJ3CkBAIC04MywxMyArODMsMTMgQEAKICAqIGNhbGxlZCB0byByZW1vdmUgdGhlIGRldmljZSBmcm9tIHRoZSBkcml2ZXIncyBjb250cm9sCiAqLwogCi1zdGF0aWMgaW50IHBsYXRyYW1fcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgcGxhdHJhbV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcGxhdHJhbV9pbmZvICppbmZvID0gdG9fcGxhdHJhbV9pbmZvKGRldik7CisJc3RydWN0IHBsYXRyYW1faW5mbyAqaW5mbyA9IHRvX3BsYXRyYW1faW5mbyhwZGV2KTsKIAotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCi0JZGV2X2RiZyhkZXYsICJyZW1vdmluZyBkZXZpY2VcbiIpOworCWRldl9kYmcoJnBkZXYtPmRldiwgInJlbW92aW5nIGRldmljZVxuIik7CiAKIAlpZiAoaW5mbyA9PSBOVUxMKQogCQlyZXR1cm4gMDsKQEAgLTEzMCw2MSArMTMwLDYwIEBACiAgKiBkcml2ZXIgaXMgZm91bmQuCiAqLwogCi1zdGF0aWMgaW50IHBsYXRyYW1fcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBwbGF0cmFtX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGQgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgcGxhdGRhdGFfbXRkX3JhbQkqcGRhdGE7CiAJc3RydWN0IHBsYXRyYW1faW5mbyAqaW5mbzsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAlpbnQgZXJyID0gMDsKIAotCWRldl9kYmcoZGV2LCAicHJvYmUgZW50ZXJlZFxuIik7CisJZGV2X2RiZygmcGRldi0+ZGV2LCAicHJvYmUgZW50ZXJlZFxuIik7CiAKLQlpZiAoZGV2LT5wbGF0Zm9ybV9kYXRhID09IE5VTEwpIHsKLQkJZGV2X2VycihkZXYsICJubyBwbGF0Zm9ybSBkYXRhIHN1cHBsaWVkXG4iKTsKKwlpZiAocGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBwbGF0Zm9ybSBkYXRhIHN1cHBsaWVkXG4iKTsKIAkJZXJyID0gLUVOT0VOVDsKIAkJZ290byBleGl0X2Vycm9yOwogCX0KIAotCXBkYXRhID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCXBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAKIAlpbmZvID0ga21hbGxvYyhzaXplb2YoKmluZm8pLCBHRlBfS0VSTkVMKTsKIAlpZiAoaW5mbyA9PSBOVUxMKSB7Ci0JCWRldl9lcnIoZGV2LCAibm8gbWVtb3J5IGZvciBmbGFzaCBpbmZvXG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gbWVtb3J5IGZvciBmbGFzaCBpbmZvXG4iKTsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBleGl0X2Vycm9yOwogCX0KIAogCW1lbXNldChpbmZvLCAwLCBzaXplb2YoKmluZm8pKTsKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBpbmZvKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBpbmZvKTsKIAotCWluZm8tPmRldiA9IGRldjsKKwlpbmZvLT5kZXYgPSAmcGRldi0+ZGV2OwogCWluZm8tPnBkYXRhID0gcGRhdGE7CiAKIAkvKiBnZXQgdGhlIHJlc291cmNlIGZvciB0aGUgbWVtb3J5IG1hcHBpbmcgKi8KIAotCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZCwgSU9SRVNPVVJDRV9NRU0sIDApOworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAKIAlpZiAocmVzID09IE5VTEwpIHsKLQkJZGV2X2VycihkZXYsICJubyBtZW1vcnkgcmVzb3VyY2Ugc3BlY2lmaWVkXG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gbWVtb3J5IHJlc291cmNlIHNwZWNpZmllZFxuIik7CiAJCWVyciA9IC1FTk9FTlQ7CiAJCWdvdG8gZXhpdF9mcmVlOwogCX0KIAotCWRldl9kYmcoZGV2LCAiZ290IHBsYXRmb3JtIHJlc291cmNlICVwICgweCVseClcbiIsIHJlcywgcmVzLT5zdGFydCk7CisJZGV2X2RiZygmcGRldi0+ZGV2LCAiZ290IHBsYXRmb3JtIHJlc291cmNlICVwICgweCVseClcbiIsIHJlcywgcmVzLT5zdGFydCk7CiAKIAkvKiBzZXR1cCBtYXAgcGFyYW1ldGVycyAqLwogCiAJaW5mby0+bWFwLnBoeXMgPSByZXMtPnN0YXJ0OwogCWluZm8tPm1hcC5zaXplID0gKHJlcy0+ZW5kIC0gcmVzLT5zdGFydCkgKyAxOwotCWluZm8tPm1hcC5uYW1lID0gcGRhdGEtPm1hcG5hbWUgIT0gTlVMTCA/IHBkYXRhLT5tYXBuYW1lIDogKGNoYXIgKilwZC0+bmFtZTsKKwlpbmZvLT5tYXAubmFtZSA9IHBkYXRhLT5tYXBuYW1lICE9IE5VTEwgPyBwZGF0YS0+bWFwbmFtZSA6IChjaGFyICopcGRldi0+bmFtZTsKIAlpbmZvLT5tYXAuYmFua3dpZHRoID0gcGRhdGEtPmJhbmt3aWR0aDsKIAogCS8qIHJlZ2lzdGVyIG91ciB1c2FnZSBvZiB0aGUgbWVtb3J5IGFyZWEgKi8KIAotCWluZm8tPmFyZWEgPSByZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgaW5mby0+bWFwLnNpemUsIHBkLT5uYW1lKTsKKwlpbmZvLT5hcmVhID0gcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIGluZm8tPm1hcC5zaXplLCBwZGV2LT5uYW1lKTsKIAlpZiAoaW5mby0+YXJlYSA9PSBOVUxMKSB7Ci0JCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHJlcXVlc3QgbWVtb3J5IHJlZ2lvblxuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZXF1ZXN0IG1lbW9yeSByZWdpb25cbiIpOwogCQllcnIgPSAtRUlPOwogCQlnb3RvIGV4aXRfZnJlZTsKIAl9CkBAIC0xOTIsMjMgKzE5MSwyMyBAQAogCS8qIHJlbWFwIHRoZSBtZW1vcnkgYXJlYSAqLwogCiAJaW5mby0+bWFwLnZpcnQgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIGluZm8tPm1hcC5zaXplKTsKLQlkZXZfZGJnKGRldiwgInZpcnQgJXAsICVsdSBieXRlc1xuIiwgaW5mby0+bWFwLnZpcnQsIGluZm8tPm1hcC5zaXplKTsKKwlkZXZfZGJnKCZwZGV2LT5kZXYsICJ2aXJ0ICVwLCAlbHUgYnl0ZXNcbiIsIGluZm8tPm1hcC52aXJ0LCBpbmZvLT5tYXAuc2l6ZSk7CiAKIAlpZiAoaW5mby0+bWFwLnZpcnQgPT0gTlVMTCkgewotCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBpb3JlbWFwKCkgcmVnaW9uXG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGlvcmVtYXAoKSByZWdpb25cbiIpOwogCQllcnIgPSAtRUlPOwogCQlnb3RvIGV4aXRfZnJlZTsKIAl9CiAKIAlzaW1wbGVfbWFwX2luaXQoJmluZm8tPm1hcCk7CiAKLQlkZXZfZGJnKGRldiwgImluaXRpYWxpc2VkIG1hcCwgcHJvYmluZyBmb3IgbXRkXG4iKTsKKwlkZXZfZGJnKCZwZGV2LT5kZXYsICJpbml0aWFsaXNlZCBtYXAsIHByb2JpbmcgZm9yIG10ZFxuIik7CiAKIAkvKiBwcm9iZSBmb3IgdGhlIHJpZ2h0IG10ZCBtYXAgZHJpdmVyICovCiAKIAlpbmZvLT5tdGQgPSBkb19tYXBfcHJvYmUoIm1hcF9yYW0iICwgJmluZm8tPm1hcCk7CiAJaWYgKGluZm8tPm10ZCA9PSBOVUxMKSB7Ci0JCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHByb2JlIGZvciBtYXBfcmFtXG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHByb2JlIGZvciBtYXBfcmFtXG4iKTsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBleGl0X2ZyZWU7CiAJfQpAQCAtMjM3LDI3ICsyMzYsMjggQEAKICNlbmRpZiAvKiBDT05GSUdfTVREX1BBUlRJVElPTlMgKi8KIAogCWlmIChhZGRfbXRkX2RldmljZShpbmZvLT5tdGQpKSB7Ci0JCWRldl9lcnIoZGV2LCAiYWRkX210ZF9kZXZpY2UoKSBmYWlsZWRcbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJhZGRfbXRkX2RldmljZSgpIGZhaWxlZFxuIik7CiAJCWVyciA9IC1FTk9NRU07CiAJfQogCi0JZGV2X2luZm8oZGV2LCAicmVnaXN0ZXJlZCBtdGQgZGV2aWNlXG4iKTsKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAicmVnaXN0ZXJlZCBtdGQgZGV2aWNlXG4iKTsKIAlyZXR1cm4gZXJyOwogCiAgZXhpdF9mcmVlOgotCXBsYXRyYW1fcmVtb3ZlKGRldik7CisJcGxhdHJhbV9yZW1vdmUocGRldik7CiAgZXhpdF9lcnJvcjoKIAlyZXR1cm4gZXJyOwogfQogCiAvKiBkZXZpY2UgZHJpdmVyIGluZm8gKi8KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHBsYXRyYW1fZHJpdmVyID0gewotCS5uYW1lCQk9ICJtdGQtcmFtIiwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBwbGF0cmFtX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gcGxhdHJhbV9wcm9iZSwKIAkucmVtb3ZlCQk9IHBsYXRyYW1fcmVtb3ZlLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJtdGQtcmFtIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKIH07CiAKIC8qIG1vZHVsZSBpbml0L2V4aXQgKi8KQEAgLTI2NSwxMiArMjY1LDEyIEBACiBzdGF0aWMgaW50IF9faW5pdCBwbGF0cmFtX2luaXQodm9pZCkKIHsKIAlwcmludGsoIkdlbmVyaWMgcGxhdGZvcm0gUkFNIE1URCwgKGMpIDIwMDQgU2ltdGVjIEVsZWN0cm9uaWNzXG4iKTsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZwbGF0cmFtX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmcGxhdHJhbV9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgcGxhdHJhbV9leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJnBsYXRyYW1fZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmcGxhdHJhbV9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChwbGF0cmFtX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9zYTExMDAtZmxhc2guYyBiL2RyaXZlcnMvbXRkL21hcHMvc2ExMTAwLWZsYXNoLmMKaW5kZXggOWU4YmIxNy4uNWNlZmIwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9zYTExMDAtZmxhc2guYworKysgYi9kcml2ZXJzL210ZC9tYXBzL3NhMTEwMC1mbGFzaC5jCkBAIC0zNTYsOSArMzU2LDggQEAKIAogc3RhdGljIGNvbnN0IGNoYXIgKnBhcnRfcHJvYmVzW10gPSB7ICJjbWRsaW5lcGFydCIsICJSZWRCb290IiwgTlVMTCB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBzYTExMDBfbXRkX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19pbml0IHNhMTEwMF9tdGRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEgKnBsYXQgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqcGFydHM7CiAJY29uc3QgY2hhciAqcGFydF90eXBlID0gTlVMTDsKQEAgLTQwMiwyOCArNDAxLDI4IEBACiAKIAlpbmZvLT5ucl9wYXJ0cyA9IG5yX3BhcnRzOwogCi0JZGV2X3NldF9kcnZkYXRhKGRldiwgaW5mbyk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaW5mbyk7CiAJZXJyID0gMDsKIAogIG91dDoKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IF9fZXhpdCBzYTExMDBfbXRkX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9fZXhpdCBzYTExMDBfbXRkX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBzYV9pbmZvICppbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEgKnBsYXQgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHNhX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgZmxhc2hfcGxhdGZvcm1fZGF0YSAqcGxhdCA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCi0JZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAJc2ExMTAwX2Rlc3Ryb3koaW5mbywgcGxhdCk7CiAKIAlyZXR1cm4gMDsKIH0KIAogI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBzYTExMDBfbXRkX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHNhMTEwMF9tdGRfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlzdHJ1Y3Qgc2FfaW5mbyAqaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBzYV9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAlpbnQgcmV0ID0gMDsKIAogCWlmIChpbmZvKQpAQCAtNDMyLDE3ICs0MzEsMTcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHNhMTEwMF9tdGRfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgc2ExMTAwX210ZF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBzYV9pbmZvICppbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHNhX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCWlmIChpbmZvKQogCQlpbmZvLT5tdGQtPnJlc3VtZShpbmZvLT5tdGQpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBzYTExMDBfbXRkX3NodXRkb3duKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIHNhMTEwMF9tdGRfc2h1dGRvd24oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBzYV9pbmZvICppbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHNhX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCWlmIChpbmZvICYmIGluZm8tPm10ZC0+c3VzcGVuZChpbmZvLT5tdGQpID09IDApCiAJCWluZm8tPm10ZC0+cmVzdW1lKGluZm8tPm10ZCk7CiB9CkBAIC00NTIsMjQgKzQ1MSwyNSBAQAogI2RlZmluZSBzYTExMDBfbXRkX3NodXRkb3duIE5VTEwKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgc2ExMTAwX210ZF9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gImZsYXNoIiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNhMTEwMF9tdGRfZHJpdmVyID0gewogCS5wcm9iZQkJPSBzYTExMDBfbXRkX3Byb2JlLAogCS5yZW1vdmUJCT0gX19leGl0X3Aoc2ExMTAwX210ZF9yZW1vdmUpLAogCS5zdXNwZW5kCT0gc2ExMTAwX210ZF9zdXNwZW5kLAogCS5yZXN1bWUJCT0gc2ExMTAwX210ZF9yZXN1bWUsCiAJLnNodXRkb3duCT0gc2ExMTAwX210ZF9zaHV0ZG93biwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAiZmxhc2giLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBzYTExMDBfbXRkX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZzYTExMDBfbXRkX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc2ExMTAwX210ZF9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgc2ExMTAwX210ZF9leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJnNhMTEwMF9tdGRfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc2ExMTAwX210ZF9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChzYTExMDBfbXRkX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy93YWxudXQuYyBiL2RyaXZlcnMvbXRkL21hcHMvd2FsbnV0LmMKaW5kZXggNWMxN2JjYS4uZjQ2YmVjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy93YWxudXQuYworKysgYi9kcml2ZXJzL210ZC9tYXBzL3dhbG51dC5jCkBAIC0yMSw3ICsyMSw2IEBACiAjaW5jbHVkZSA8bGludXgvbXRkL21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9pYm00eHguaD4KICNpbmNsdWRlIDxwbGF0Zm9ybXMvNHh4L3dhbG51dC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9hdTE1NTBuZC5jIGIvZHJpdmVycy9tdGQvbmFuZC9hdTE1NTBuZC5jCmluZGV4IDNjYWZjZGYuLjljNTk0NWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvYXUxNTUwbmQuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL2F1MTU1MG5kLmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAogLyogZml4bWU6IHRoaXMgaXMgdWdseSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9hdXRjcHUxMi5jIGIvZHJpdmVycy9tdGQvbmFuZC9hdXRjcHUxMi5jCmluZGV4IDA1NmRmYzEuLmEzYzdmZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvYXV0Y3B1MTIuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL2F1dGNwdTEyLmMKQEAgLTI3LDcgKzI3LDYgQEAKICAqCTEwLTA2LTIwMDIgVEcJMTI4SyBjYXJkIHN1cHBvcnQgYWRkZWQKICAqLwogCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL3MzYzI0MTAuYyBiL2RyaXZlcnMvbXRkL25hbmQvczNjMjQxMC5jCmluZGV4IDk3ZTliNzguLmQyMDkyMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvczNjMjQxMC5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvczNjMjQxMC5jCkBAIC0xMjUsMTQgKzEyNSwxNCBAQAogCXJldHVybiBzM2MyNDEwX25hbmRfbXRkX3Rvb3VycyhtdGQpLT5pbmZvOwogfQogCi1zdGF0aWMgc3RydWN0IHMzYzI0MTBfbmFuZF9pbmZvICp0b19uYW5kX2luZm8oc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIHN0cnVjdCBzM2MyNDEwX25hbmRfaW5mbyAqdG9fbmFuZF9pbmZvKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlyZXR1cm4gZGV2X2dldF9kcnZkYXRhKGRldik7CisJcmV0dXJuIHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgczNjMjQxMF9wbGF0Zm9ybV9uYW5kICp0b19uYW5kX3BsYXQoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIHN0cnVjdCBzM2MyNDEwX3BsYXRmb3JtX25hbmQgKnRvX25hbmRfcGxhdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0JcmV0dXJuIGRldi0+cGxhdGZvcm1fZGF0YTsKKwlyZXR1cm4gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIH0KIAogLyogdGltaW5nIGNhbGN1bGF0aW9ucyAqLwpAQCAtMTY1LDkgKzE2NSw5IEBACiAvKiBjb250cm9sbGVyIHNldHVwICovCiAKIHN0YXRpYyBpbnQgczNjMjQxMF9uYW5kX2luaXRodyhzdHJ1Y3QgczNjMjQxMF9uYW5kX2luZm8gKmluZm8sCi0JCQkgICAgICAgc3RydWN0IGRldmljZSAqZGV2KQorCQkJICAgICAgIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHMzYzI0MTBfcGxhdGZvcm1fbmFuZCAqcGxhdCA9IHRvX25hbmRfcGxhdChkZXYpOworCXN0cnVjdCBzM2MyNDEwX3BsYXRmb3JtX25hbmQgKnBsYXQgPSB0b19uYW5kX3BsYXQocGRldik7CiAJdW5zaWduZWQgbG9uZyBjbGtyYXRlID0gY2xrX2dldF9yYXRlKGluZm8tPmNsayk7CiAJaW50IHRhY2xzLCB0d3JwaDAsIHR3cnBoMTsKIAl1bnNpZ25lZCBsb25nIGNmZzsKQEAgLTQzMCwxMSArNDMwLDExIEBACiAKIC8qIGRldmljZSBtYW5hZ2VtZW50IGZ1bmN0aW9ucyAqLwogCi1zdGF0aWMgaW50IHMzYzI0MTBfbmFuZF9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBzM2MyNDEwX25hbmRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHMzYzI0MTBfbmFuZF9pbmZvICppbmZvID0gdG9fbmFuZF9pbmZvKGRldik7CisJc3RydWN0IHMzYzI0MTBfbmFuZF9pbmZvICppbmZvID0gdG9fbmFuZF9pbmZvKHBkZXYpOwogCi0JZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAKIAlpZiAoaW5mbyA9PSBOVUxMKQogCQlyZXR1cm4gMDsKQEAgLTU2MiwxMCArNTYyLDkgQEAKICAqIG5hbmQgbGF5ZXIgdG8gbG9vayBmb3IgZGV2aWNlcwogKi8KIAotc3RhdGljIGludCBzM2MyNHh4X25hbmRfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgaXNfczNjMjQ0MCkKK3N0YXRpYyBpbnQgczNjMjR4eF9uYW5kX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIGludCBpc19zM2MyNDQwKQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKLQlzdHJ1Y3QgczNjMjQxMF9wbGF0Zm9ybV9uYW5kICpwbGF0ID0gdG9fbmFuZF9wbGF0KGRldik7CisJc3RydWN0IHMzYzI0MTBfcGxhdGZvcm1fbmFuZCAqcGxhdCA9IHRvX25hbmRfcGxhdChwZGV2KTsKIAlzdHJ1Y3QgczNjMjQxMF9uYW5kX2luZm8gKmluZm87CiAJc3RydWN0IHMzYzI0MTBfbmFuZF9tdGQgKm5tdGQ7CiAJc3RydWN0IHMzYzI0MTBfbmFuZF9zZXQgKnNldHM7CkBAIC01NzUsMjYgKzU3NCwyNiBAQAogCWludCBucl9zZXRzOwogCWludCBzZXRubzsKIAotCXByX2RlYnVnKCJzM2MyNDEwX25hbmRfcHJvYmUoJXApXG4iLCBkZXYpOworCXByX2RlYnVnKCJzM2MyNDEwX25hbmRfcHJvYmUoJXApXG4iLCBwZGV2KTsKIAogCWluZm8gPSBrbWFsbG9jKHNpemVvZigqaW5mbyksIEdGUF9LRVJORUwpOwogCWlmIChpbmZvID09IE5VTEwpIHsKLQkJZGV2X2VycihkZXYsICJubyBtZW1vcnkgZm9yIGZsYXNoIGluZm9cbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBtZW1vcnkgZm9yIGZsYXNoIGluZm9cbiIpOwogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGV4aXRfZXJyb3I7CiAJfQogCiAJbWVtemVybyhpbmZvLCBzaXplb2YoKmluZm8pKTsKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBpbmZvKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBpbmZvKTsKIAogCXNwaW5fbG9ja19pbml0KCZpbmZvLT5jb250cm9sbGVyLmxvY2spOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmluZm8tPmNvbnRyb2xsZXIud3EpOwogCiAJLyogZ2V0IHRoZSBjbG9jayBzb3VyY2UgYW5kIGVuYWJsZSBpdCAqLwogCi0JaW5mby0+Y2xrID0gY2xrX2dldChkZXYsICJuYW5kIik7CisJaW5mby0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAibmFuZCIpOwogCWlmIChJU19FUlIoaW5mby0+Y2xrKSkgewotCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBnZXQgY2xvY2siKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCBjbG9jayIpOwogCQllcnIgPSAtRU5PRU5UOwogCQlnb3RvIGV4aXRfZXJyb3I7CiAJfQpAQCAtNjExLDI3ICs2MTAsMjcgQEAKIAlpbmZvLT5hcmVhID0gcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHNpemUsIHBkZXYtPm5hbWUpOwogCiAJaWYgKGluZm8tPmFyZWEgPT0gTlVMTCkgewotCQlkZXZfZXJyKGRldiwgImNhbm5vdCByZXNlcnZlIHJlZ2lzdGVyIHJlZ2lvblxuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCByZXNlcnZlIHJlZ2lzdGVyIHJlZ2lvblxuIik7CiAJCWVyciA9IC1FTk9FTlQ7CiAJCWdvdG8gZXhpdF9lcnJvcjsKIAl9CiAKLQlpbmZvLT5kZXZpY2UgICAgID0gZGV2OworCWluZm8tPmRldmljZSAgICAgPSAmcGRldi0+ZGV2OwogCWluZm8tPnBsYXRmb3JtICAgPSBwbGF0OwogCWluZm8tPnJlZ3MgICAgICAgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHNpemUpOwogCWluZm8tPmlzX3MzYzI0NDAgPSBpc19zM2MyNDQwOwogCiAJaWYgKGluZm8tPnJlZ3MgPT0gTlVMTCkgewotCQlkZXZfZXJyKGRldiwgImNhbm5vdCByZXNlcnZlIHJlZ2lzdGVyIHJlZ2lvblxuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCByZXNlcnZlIHJlZ2lzdGVyIHJlZ2lvblxuIik7CiAJCWVyciA9IC1FSU87CiAJCWdvdG8gZXhpdF9lcnJvcjsKIAl9CiAKLQlkZXZfZGJnKGRldiwgIm1hcHBlZCByZWdpc3RlcnMgYXQgJXBcbiIsIGluZm8tPnJlZ3MpOworCWRldl9kYmcoJnBkZXYtPmRldiwgIm1hcHBlZCByZWdpc3RlcnMgYXQgJXBcbiIsIGluZm8tPnJlZ3MpOwogCiAJLyogaW5pdGlhbGlzZSB0aGUgaGFyZHdhcmUgKi8KIAotCWVyciA9IHMzYzI0MTBfbmFuZF9pbml0aHcoaW5mbywgZGV2KTsKKwllcnIgPSBzM2MyNDEwX25hbmRfaW5pdGh3KGluZm8sIHBkZXYpOwogCWlmIChlcnIgIT0gMCkKIAkJZ290byBleGl0X2Vycm9yOwogCkBAIC02NDUsNyArNjQ0LDcgQEAKIAlzaXplID0gbnJfc2V0cyAqIHNpemVvZigqaW5mby0+bXRkcyk7CiAJaW5mby0+bXRkcyA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGluZm8tPm10ZHMgPT0gTlVMTCkgewotCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBtdGQgc3RvcmFnZVxuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBtdGQgc3RvcmFnZVxuIik7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZXhpdF9lcnJvcjsKIAl9CkBAIC02NzcsNyArNjc2LDcgQEAKIAlyZXR1cm4gMDsKIAogIGV4aXRfZXJyb3I6Ci0JczNjMjQxMF9uYW5kX3JlbW92ZShkZXYpOworCXMzYzI0MTBfbmFuZF9yZW1vdmUocGRldik7CiAKIAlpZiAoZXJyID09IDApCiAJCWVyciA9IC1FSU5WQUw7CkBAIC02ODYsNDQgKzY4NSw0NiBAQAogCiAvKiBkcml2ZXIgZGV2aWNlIHJlZ2lzdHJhdGlvbiAqLwogCi1zdGF0aWMgaW50IHMzYzI0MTBfbmFuZF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHMzYzI0MTBfbmFuZF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJcmV0dXJuIHMzYzI0eHhfbmFuZF9wcm9iZShkZXYsIDApOwogfQogCi1zdGF0aWMgaW50IHMzYzI0NDBfbmFuZF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHMzYzI0NDBfbmFuZF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJcmV0dXJuIHMzYzI0eHhfbmFuZF9wcm9iZShkZXYsIDEpOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgczNjMjQxMF9uYW5kX2RyaXZlciA9IHsKLQkubmFtZQkJPSAiczNjMjQxMC1uYW5kIiwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzM2MyNDEwX25hbmRfZHJpdmVyID0gewogCS5wcm9iZQkJPSBzM2MyNDEwX25hbmRfcHJvYmUsCiAJLnJlbW92ZQkJPSBzM2MyNDEwX25hbmRfcmVtb3ZlLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJzM2MyNDEwLW5hbmQiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHMzYzI0NDBfbmFuZF9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gInMzYzI0NDAtbmFuZCIsCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgczNjMjQ0MF9uYW5kX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gczNjMjQ0MF9uYW5kX3Byb2JlLAogCS5yZW1vdmUJCT0gczNjMjQxMF9uYW5kX3JlbW92ZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAiczNjMjQ0MC1uYW5kIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHMzYzI0MTBfbmFuZF9pbml0KHZvaWQpCiB7CiAJcHJpbnRrKCJTM0MyNFhYIE5BTkQgRHJpdmVyLCAoYykgMjAwNCBTaW10ZWMgRWxlY3Ryb25pY3NcbiIpOwogCi0JZHJpdmVyX3JlZ2lzdGVyKCZzM2MyNDQwX25hbmRfZHJpdmVyKTsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZzM2MyNDEwX25hbmRfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnMzYzI0NDBfbmFuZF9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnMzYzI0MTBfbmFuZF9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgczNjMjQxMF9uYW5kX2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmczNjMjQ0MF9uYW5kX2RyaXZlcik7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJnMzYzI0MTBfbmFuZF9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzM2MyNDQwX25hbmRfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmczNjMjQxMF9uYW5kX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KHMzYzI0MTBfbmFuZF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL29uZW5hbmQvb25lbmFuZF9iYXNlLmMgYi9kcml2ZXJzL210ZC9vbmVuYW5kL29uZW5hbmRfYmFzZS5jCmluZGV4IGNjMzhmYTAuLmY2N2Q1ZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL29uZW5hbmQvb25lbmFuZF9iYXNlLmMKKysrIGIvZHJpdmVycy9tdGQvb25lbmFuZC9vbmVuYW5kX2Jhc2UuYwpAQCAtMTIsNiArMTIsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL29uZW5hbmQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvcmZkX2Z0bC5jIGIvZHJpdmVycy9tdGQvcmZkX2Z0bC5jCmluZGV4IDA0MWVlNTkuLjBhYjhkMjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL3JmZF9mdGwuYworKysgYi9kcml2ZXJzL210ZC9yZmRfZnRsLmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvYmxrdHJhbnMuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KIAogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9LY29uZmlnIGIvZHJpdmVycy9uZXQvS2NvbmZpZwppbmRleCAxOTU4ZDllLi5lYmQ3MzEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L0tjb25maWcKQEAgLTQ0Nyw3ICs0NDcsNyBAQAogCiBjb25maWcgU0dJX0lPQzNfRVRICiAJYm9vbCAiU0dJIElPQzMgRXRoZXJuZXQiCi0JZGVwZW5kcyBvbiBORVRfRVRIRVJORVQgJiYgUENJICYmIFNHSV9JUDI3ICYmIEJST0tFTgorCWRlcGVuZHMgb24gTkVUX0VUSEVSTkVUICYmIFBDSSAmJiBTR0lfSVAyNwogCXNlbGVjdCBDUkMzMgogCXNlbGVjdCBNSUkKIAloZWxwCkBAIC04MTIsNyArODEyLDcgQEAKIAl0cmlzdGF0ZSAiU01DIDkxQzl4LzkxQzF4eHggc3VwcG9ydCIKIAlzZWxlY3QgQ1JDMzIKIAlzZWxlY3QgTUlJCi0JZGVwZW5kcyBvbiBORVRfRVRIRVJORVQgJiYgKEFSTSB8fCBSRURXT09EXzUgfHwgUkVEV09PRF82IHx8IE0zMlIgfHwgU1VQRVJIKQorCWRlcGVuZHMgb24gTkVUX0VUSEVSTkVUICYmIChBUk0gfHwgUkVEV09PRF81IHx8IFJFRFdPT0RfNiB8fCBNMzJSIHx8IFNVUEVSSCB8fCBTT0NfQVUxWDAwKQogCWhlbHAKIAkgIFRoaXMgaXMgYSBkcml2ZXIgZm9yIFNNQydzIDkxeCBzZXJpZXMgb2YgRXRoZXJuZXQgY2hpcHNldHMsCiAJICBpbmNsdWRpbmcgdGhlIFNNQzkxQzk0IGFuZCB0aGUgU01DOTFDMTExLiBTYXkgWSBpZiB5b3Ugd2FudCBpdApAQCAtMjUyMyw2ICsyNTIzLDE5IEBACiAJICBtb2R1bGU7IGl0IGlzIGNhbGxlZCBic2RfY29tcCBhbmQgd2lsbCBzaG93IHVwIGluIHRoZSBkaXJlY3RvcnkKIAkgIG1vZHVsZXMgb25jZSB5b3UgaGF2ZSBzYWlkICJtYWtlIG1vZHVsZXMiLiBJZiB1bnN1cmUsIHNheSBOLgogCitjb25maWcgUFBQX01QUEUKKyAgICAgICB0cmlzdGF0ZSAiUFBQIE1QUEUgY29tcHJlc3Npb24gKGVuY3J5cHRpb24pIChFWFBFUklNRU5UQUwpIgorICAgICAgIGRlcGVuZHMgb24gUFBQICYmIEVYUEVSSU1FTlRBTAorICAgICAgIHNlbGVjdCBDUllQVE8KKyAgICAgICBzZWxlY3QgQ1JZUFRPX1NIQTEKKyAgICAgICBzZWxlY3QgQ1JZUFRPX0FSQzQKKyAgICAgICAtLS1oZWxwLS0tCisgICAgICAgICBTdXBwb3J0IGZvciB0aGUgTVBQRSBFbmNyeXB0aW9uIHByb3RvY29sLCBhcyBlbXBsb3llZCBieSB0aGUKKwkgTWljcm9zb2Z0IFBvaW50LXRvLVBvaW50IFR1bm5lbGluZyBQcm90b2NvbC4KKworCSBTZWUgaHR0cDovL3BwdHBjbGllbnQuc291cmNlZm9yZ2UubmV0LyBmb3IgaW5mb3JtYXRpb24gb24KKwkgY29uZmlndXJpbmcgUFBUUCBjbGllbnRzIGFuZCBzZXJ2ZXJzIHRvIHV0aWxpemUgdGhpcyBtZXRob2QuCisKIGNvbmZpZyBQUFBPRQogCXRyaXN0YXRlICJQUFAgb3ZlciBFdGhlcm5ldCAoRVhQRVJJTUVOVEFMKSIKIAlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiBQUFAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvTWFrZWZpbGUKaW5kZXggN2MzMTNjYi4uNGNmZmQzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvTWFrZWZpbGUKQEAgLTExMiw2ICsxMTIsNyBAQAogb2JqLSQoQ09ORklHX1BQUF9TWU5DX1RUWSkgKz0gcHBwX3N5bmN0dHkubwogb2JqLSQoQ09ORklHX1BQUF9ERUZMQVRFKSArPSBwcHBfZGVmbGF0ZS5vCiBvYmotJChDT05GSUdfUFBQX0JTRENPTVApICs9IGJzZF9jb21wLm8KK29iai0kKENPTkZJR19QUFBfTVBQRSkgKz0gcHBwX21wcGUubwogb2JqLSQoQ09ORklHX1BQUE9FKSArPSBwcHBveC5vIHBwcG9lLm8KIAogb2JqLSQoQ09ORklHX1NMSVApICs9IHNsaXAubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYjQ0LmMgYi9kcml2ZXJzL25ldC9iNDQuYwppbmRleCAwZWUzZTI3Li5jNTM4NDhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9iNDQuYworKysgYi9kcml2ZXJzL25ldC9iNDQuYwpAQCAtMTgsNyArMTgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KQEAgLTI5LDggKzI4LDggQEAKIAogI2RlZmluZSBEUlZfTU9EVUxFX05BTUUJCSJiNDQiCiAjZGVmaW5lIFBGWCBEUlZfTU9EVUxFX05BTUUJIjogIgotI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04JIjAuOTUiCi0jZGVmaW5lIERSVl9NT0RVTEVfUkVMREFURQkiQXVnIDMsIDIwMDQiCisjZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTgkiMC45NiIKKyNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFCSJOb3YgOCwgMjAwNSIKIAogI2RlZmluZSBCNDRfREVGX01TR19FTkFCTEUJICBcCiAJKE5FVElGX01TR19EUlYJCXwgXApAQCAtMTAyLDE0ICsxMDEsMTYgQEAKIHN0YXRpYyB2b2lkIGI0NF9oYWx0KHN0cnVjdCBiNDQgKik7CiBzdGF0aWMgdm9pZCBiNDRfaW5pdF9yaW5ncyhzdHJ1Y3QgYjQ0ICopOwogc3RhdGljIHZvaWQgYjQ0X2luaXRfaHcoc3RydWN0IGI0NCAqKTsKLXN0YXRpYyBpbnQgYjQ0X3BvbGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50ICpidWRnZXQpOwotI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCi1zdGF0aWMgdm9pZCBiNDRfcG9sbF9jb250cm9sbGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotI2VuZGlmCiAKIHN0YXRpYyBpbnQgZG1hX2Rlc2NfYWxpZ25fbWFzazsKIHN0YXRpYyBpbnQgZG1hX2Rlc2Nfc3luY19zaXplOwogCitzdGF0aWMgY29uc3QgY2hhciBiNDRfZ3N0cmluZ3NbXVtFVEhfR1NUUklOR19MRU5dID0geworI2RlZmluZSBfQjQ0KHguLi4pCSMgeCwKK0I0NF9TVEFUX1JFR19ERUNMQVJFCisjdW5kZWYgX0I0NAorfTsKKwogc3RhdGljIGlubGluZSB2b2lkIGI0NF9zeW5jX2RtYV9kZXNjX2Zvcl9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWFfYWRkcl90IGRtYV9iYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsCkBAIC01MDIsNyArNTAzLDEwIEBACiAJZm9yIChyZWcgPSBCNDRfVFhfR09PRF9POyByZWcgPD0gQjQ0X1RYX1BBVVNFOyByZWcgKz0gNFVMKSB7CiAJCSp2YWwrKyArPSBicjMyKGJwLCByZWcpOwogCX0KLQl2YWwgPSAmYnAtPmh3X3N0YXRzLnJ4X2dvb2Rfb2N0ZXRzOworCisJLyogUGFkICovCisJcmVnICs9IDgqNFVMOworCiAJZm9yIChyZWcgPSBCNDRfUlhfR09PRF9POyByZWcgPD0gQjQ0X1JYX05QQVVTRTsgcmVnICs9IDRVTCkgewogCQkqdmFsKysgKz0gYnIzMihicCwgcmVnKTsKIAl9CkBAIC02NTMsNyArNjU3LDcgQEAKIAogCS8qIEhhcmR3YXJlIGJ1ZyB3b3JrLWFyb3VuZCwgdGhlIGNoaXAgaXMgdW5hYmxlIHRvIGRvIFBDSSBETUEKIAkgICB0by9mcm9tIGFueXRoaW5nIGFib3ZlIDFHQiA6LSggKi8KLQlpZihtYXBwaW5nK1JYX1BLVF9CVUZfU1ogPiBCNDRfRE1BX01BU0spIHsKKwlpZiAobWFwcGluZyArIFJYX1BLVF9CVUZfU1ogPiBCNDRfRE1BX01BU0spIHsKIAkJLyogU2lnaC4uLiAqLwogCQlwY2lfdW5tYXBfc2luZ2xlKGJwLT5wZGV2LCBtYXBwaW5nLCBSWF9QS1RfQlVGX1NaLFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CkBAIC02NjMsNyArNjY3LDcgQEAKIAkJbWFwcGluZyA9IHBjaV9tYXBfc2luZ2xlKGJwLT5wZGV2LCBza2ItPmRhdGEsCiAJCQkJCSBSWF9QS1RfQlVGX1NaLAogCQkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKLQkJaWYobWFwcGluZytSWF9QS1RfQlVGX1NaID4gQjQ0X0RNQV9NQVNLKSB7CisJCWlmIChtYXBwaW5nICsgUlhfUEtUX0JVRl9TWiA+IEI0NF9ETUFfTUFTSykgewogCQkJcGNpX3VubWFwX3NpbmdsZShicC0+cGRldiwgbWFwcGluZywgUlhfUEtUX0JVRl9TWixQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJCXJldHVybiAtRU5PTUVNOwpAQCAtODkwLDExICs4OTQsMTAgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZGV2X2lkOwogCXN0cnVjdCBiNDQgKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiBpc3RhdCwgaW1hc2s7CiAJaW50IGhhbmRsZWQgPSAwOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmJwLT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrKCZicC0+bG9jayk7CiAKIAlpc3RhdCA9IGJyMzIoYnAsIEI0NF9JU1RBVCk7CiAJaW1hc2sgPSBicjMyKGJwLCBCNDRfSU1BU0spOwpAQCAtOTA1LDYgKzkwOCwxMiBAQAogCWlzdGF0ICY9IGltYXNrOwogCWlmIChpc3RhdCkgewogCQloYW5kbGVkID0gMTsKKworCQlpZiAodW5saWtlbHkoIW5ldGlmX3J1bm5pbmcoZGV2KSkpIHsKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBsYXRlIGludGVycnVwdC5cbiIsIGRldi0+bmFtZSk7CisJCQlnb3RvIGlycV9hY2s7CisJCX0KKwogCQlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcChkZXYpKSB7CiAJCQkvKiBOT1RFOiBUaGVzZSB3cml0ZXMgYXJlIHBvc3RlZCBieSB0aGUgcmVhZGJhY2sgb2YKIAkJCSAqICAgICAgIHRoZSBJU1RBVCByZWdpc3RlciBiZWxvdy4KQEAgLTkxNywxMCArOTI2LDExIEBACiAJCQkgICAgICAgZGV2LT5uYW1lKTsKIAkJfQogCitpcnFfYWNrOgogCQlidzMyKGJwLCBCNDRfSVNUQVQsIGlzdGF0KTsKIAkJYnIzMihicCwgQjQ0X0lTVEFUKTsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYnAtPmxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9jaygmYnAtPmxvY2spOwogCXJldHVybiBJUlFfUkVUVkFMKGhhbmRsZWQpOwogfQogCkBAIC05NDgsNiArOTU4LDcgQEAKIHsKIAlzdHJ1Y3QgYjQ0ICpicCA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IHNrX2J1ZmYgKmJvdW5jZV9za2I7CisJaW50IHJjID0gTkVUREVWX1RYX09LOwogCWRtYV9hZGRyX3QgbWFwcGluZzsKIAl1MzIgbGVuLCBlbnRyeSwgY3RybDsKIApAQCAtOTU3LDI5ICs5NjgsMjggQEAKIAkvKiBUaGlzIGlzIGEgaGFyZCBlcnJvciwgbG9nIGl0LiAqLwogCWlmICh1bmxpa2VseShUWF9CVUZGU19BVkFJTChicCkgPCAxKSkgewogCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0JCXNwaW5fdW5sb2NrX2lycSgmYnAtPmxvY2spOwogCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogQlVHISBUeCBSaW5nIGZ1bGwgd2hlbiBxdWV1ZSBhd2FrZSFcbiIsCiAJCSAgICAgICBkZXYtPm5hbWUpOwotCQlyZXR1cm4gMTsKKwkJZ290byBlcnJfb3V0OwogCX0KIAogCW1hcHBpbmcgPSBwY2lfbWFwX3NpbmdsZShicC0+cGRldiwgc2tiLT5kYXRhLCBsZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOwotCWlmKG1hcHBpbmcrbGVuID4gQjQ0X0RNQV9NQVNLKSB7CisJaWYgKG1hcHBpbmcgKyBsZW4gPiBCNDRfRE1BX01BU0spIHsKIAkJLyogQ2hpcCBjYW4ndCBoYW5kbGUgRE1BIHRvL2Zyb20gPjFHQiwgdXNlIGJvdW5jZSBidWZmZXIgKi8KIAkJcGNpX3VubWFwX3NpbmdsZShicC0+cGRldiwgbWFwcGluZywgbGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKIAogCQlib3VuY2Vfc2tiID0gX19kZXZfYWxsb2Nfc2tiKFRYX1BLVF9CVUZfU1osCiAJCQkJCSAgICAgR0ZQX0FUT01JQ3xHRlBfRE1BKTsKIAkJaWYgKCFib3VuY2Vfc2tiKQotCQkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOworCQkJZ290byBlcnJfb3V0OwogCiAJCW1hcHBpbmcgPSBwY2lfbWFwX3NpbmdsZShicC0+cGRldiwgYm91bmNlX3NrYi0+ZGF0YSwKIAkJCQkJIGxlbiwgUENJX0RNQV9UT0RFVklDRSk7Ci0JCWlmKG1hcHBpbmcrbGVuID4gQjQ0X0RNQV9NQVNLKSB7CisJCWlmIChtYXBwaW5nICsgbGVuID4gQjQ0X0RNQV9NQVNLKSB7CiAJCQlwY2lfdW5tYXBfc2luZ2xlKGJwLT5wZGV2LCBtYXBwaW5nLAogCQkJCQkgbGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKIAkJCWRldl9rZnJlZV9za2JfYW55KGJvdW5jZV9za2IpOwotCQkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOworCQkJZ290byBlcnJfb3V0OwogCQl9CiAKIAkJbWVtY3B5KHNrYl9wdXQoYm91bmNlX3NrYiwgbGVuKSwgc2tiLT5kYXRhLCBza2ItPmxlbik7CkBAIC0xMDE5LDExICsxMDI5LDE2IEBACiAJaWYgKFRYX0JVRkZTX0FWQUlMKGJwKSA8IDEpCiAJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAotCXNwaW5fdW5sb2NrX2lycSgmYnAtPmxvY2spOwotCiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAKLQlyZXR1cm4gMDsKK291dF91bmxvY2s6CisJc3Bpbl91bmxvY2tfaXJxKCZicC0+bG9jayk7CisKKwlyZXR1cm4gcmM7CisKK2Vycl9vdXQ6CisJcmMgPSBORVRERVZfVFhfQlVTWTsKKwlnb3RvIG91dF91bmxvY2s7CiB9CiAKIHN0YXRpYyBpbnQgYjQ0X2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpCkBAIC0xMDk3LDggKzExMTIsNyBAQAogICoKICAqIFRoZSBjaGlwIGhhcyBiZWVuIHNodXQgZG93biBhbmQgdGhlIGRyaXZlciBkZXRhY2hlZCBmcm9tCiAgKiB0aGUgbmV0d29ya2luZywgc28gbm8gaW50ZXJydXB0cyBvciBuZXcgdHggcGFja2V0cyB3aWxsCi0gKiBlbmQgdXAgaW4gdGhlIGRyaXZlci4gIGJwLT5sb2NrIGlzIG5vdCBoZWxkIGFuZCB3ZSBhcmUgbm90Ci0gKiBpbiBhbiBpbnRlcnJ1cHQgY29udGV4dCBhbmQgdGh1cyBtYXkgc2xlZXAuCisgKiBlbmQgdXAgaW4gdGhlIGRyaXZlci4KICAqLwogc3RhdGljIHZvaWQgYjQ0X2luaXRfcmluZ3Moc3RydWN0IGI0NCAqYnApCiB7CkBAIC0xMTcwLDE2ICsxMTg0LDE0IEBACiAJaW50IHNpemU7CiAKIAlzaXplICA9IEI0NF9SWF9SSU5HX1NJWkUgKiBzaXplb2Yoc3RydWN0IHJpbmdfaW5mbyk7Ci0JYnAtPnJ4X2J1ZmZlcnMgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCWJwLT5yeF9idWZmZXJzID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWJwLT5yeF9idWZmZXJzKQogCQlnb3RvIG91dF9lcnI7Ci0JbWVtc2V0KGJwLT5yeF9idWZmZXJzLCAwLCBzaXplKTsKIAogCXNpemUgPSBCNDRfVFhfUklOR19TSVpFICogc2l6ZW9mKHN0cnVjdCByaW5nX2luZm8pOwotCWJwLT50eF9idWZmZXJzID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwlicC0+dHhfYnVmZmVycyA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFicC0+dHhfYnVmZmVycykKIAkJZ290byBvdXRfZXJyOwotCW1lbXNldChicC0+dHhfYnVmZmVycywgMCwgc2l6ZSk7CiAKIAlzaXplID0gRE1BX1RBQkxFX0JZVEVTOwogCWJwLT5yeF9yaW5nID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYnAtPnBkZXYsIHNpemUsICZicC0+cnhfcmluZ19kbWEpOwpAQCAtMTE5MCwxMCArMTIwMiwxMCBAQAogCQlzdHJ1Y3QgZG1hX2Rlc2MgKnJ4X3Jpbmc7CiAJCWRtYV9hZGRyX3QgcnhfcmluZ19kbWE7CiAKLQkJaWYgKCEocnhfcmluZyA9IChzdHJ1Y3QgZG1hX2Rlc2MgKilrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpKSkKKwkJcnhfcmluZyA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCWlmICghcnhfcmluZykKIAkJCWdvdG8gb3V0X2VycjsKIAotCQltZW1zZXQocnhfcmluZywgMCwgc2l6ZSk7CiAJCXJ4X3JpbmdfZG1hID0gZG1hX21hcF9zaW5nbGUoJmJwLT5wZGV2LT5kZXYsIHJ4X3JpbmcsCiAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRE1BX1RBQkxFX0JZVEVTLAogCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERNQV9CSURJUkVDVElPTkFMKTsKQEAgLTEyMTYsMTAgKzEyMjgsMTAgQEAKIAkJc3RydWN0IGRtYV9kZXNjICp0eF9yaW5nOwogCQlkbWFfYWRkcl90IHR4X3JpbmdfZG1hOwogCi0JCWlmICghKHR4X3JpbmcgPSAoc3RydWN0IGRtYV9kZXNjICopa21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKSkpCisJCXR4X3JpbmcgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCQlpZiAoIXR4X3JpbmcpCiAJCQlnb3RvIG91dF9lcnI7CiAKLQkJbWVtc2V0KHR4X3JpbmcsIDAsIHNpemUpOwogCQl0eF9yaW5nX2RtYSA9IGRtYV9tYXBfc2luZ2xlKCZicC0+cGRldi0+ZGV2LCB0eF9yaW5nLAogCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERNQV9UQUJMRV9CWVRFUywKIAkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBETUFfVE9fREVWSUNFKTsKQEAgLTEzODIsMjIgKzEzOTQsMjEgQEAKIAogCWVyciA9IGI0NF9hbGxvY19jb25zaXN0ZW50KGJwKTsKIAlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JZXJyID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsIGI0NF9pbnRlcnJ1cHQsIFNBX1NISVJRLCBkZXYtPm5hbWUsIGRldik7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfb3V0X2ZyZWU7Ci0KLQlzcGluX2xvY2tfaXJxKCZicC0+bG9jayk7CisJCWdvdG8gb3V0OwogCiAJYjQ0X2luaXRfcmluZ3MoYnApOwogCWI0NF9pbml0X2h3KGJwKTsKLQlicC0+ZmxhZ3MgfD0gQjQ0X0ZMQUdfSU5JVF9DT01QTEVURTsKIAogCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CiAJYjQ0X2NoZWNrX3BoeShicCk7CiAKLQlzcGluX3VubG9ja19pcnEoJmJwLT5sb2NrKTsKKwllcnIgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgYjQ0X2ludGVycnVwdCwgU0FfU0hJUlEsIGRldi0+bmFtZSwgZGV2KTsKKwlpZiAodW5saWtlbHkoZXJyIDwgMCkpIHsKKwkJYjQ0X2NoaXBfcmVzZXQoYnApOworCQliNDRfZnJlZV9yaW5ncyhicCk7CisJCWI0NF9mcmVlX2NvbnNpc3RlbnQoYnApOworCQlnb3RvIG91dDsKKwl9CiAKIAlpbml0X3RpbWVyKCZicC0+dGltZXIpOwogCWJwLT50aW1lci5leHBpcmVzID0gamlmZmllcyArIEhaOwpAQCAtMTQwNiwxMSArMTQxNyw3IEBACiAJYWRkX3RpbWVyKCZicC0+dGltZXIpOwogCiAJYjQ0X2VuYWJsZV9pbnRzKGJwKTsKLQotCXJldHVybiAwOwotCi1lcnJfb3V0X2ZyZWU6Ci0JYjQ0X2ZyZWVfY29uc2lzdGVudChicCk7CitvdXQ6CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTQ0NSw2ICsxNDUyLDggQEAKIAogCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAorCW5ldGlmX3BvbGxfZGlzYWJsZShkZXYpOworCiAJZGVsX3RpbWVyX3N5bmMoJmJwLT50aW1lcik7CiAKIAlzcGluX2xvY2tfaXJxKCZicC0+bG9jayk7CkBAIC0xNDU0LDEzICsxNDYzLDE0IEBACiAjZW5kaWYKIAliNDRfaGFsdChicCk7CiAJYjQ0X2ZyZWVfcmluZ3MoYnApOwotCWJwLT5mbGFncyAmPSB+QjQ0X0ZMQUdfSU5JVF9DT01QTEVURTsKIAluZXRpZl9jYXJyaWVyX29mZihicC0+ZGV2KTsKIAogCXNwaW5fdW5sb2NrX2lycSgmYnAtPmxvY2spOwogCiAJZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CiAKKwluZXRpZl9wb2xsX2VuYWJsZShkZXYpOworCiAJYjQ0X2ZyZWVfY29uc2lzdGVudChicCk7CiAKIAlyZXR1cm4gMDsKQEAgLTE1MjUsOCArMTUzNSw2IEBACiB7CiAJc3RydWN0IGI0NCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXUzMiB2YWw7Ci0JaW50IGk9MDsKLQl1bnNpZ25lZCBjaGFyIHplcm9bNl0gPSB7MCwwLDAsMCwwLDB9OwogCiAJdmFsID0gYnIzMihicCwgQjQ0X1JYQ09ORklHKTsKIAl2YWwgJj0gfihSWENPTkZJR19QUk9NSVNDIHwgUlhDT05GSUdfQUxMTVVMVEkpOwpAQCAtMTUzNCwxNCArMTU0MiwxNyBAQAogCQl2YWwgfD0gUlhDT05GSUdfUFJPTUlTQzsKIAkJYnczMihicCwgQjQ0X1JYQ09ORklHLCB2YWwpOwogCX0gZWxzZSB7CisJCXVuc2lnbmVkIGNoYXIgemVyb1s2XSA9IHswLCAwLCAwLCAwLCAwLCAwfTsKKwkJaW50IGkgPSAwOworCiAJCV9fYjQ0X3NldF9tYWNfYWRkcihicCk7CiAKIAkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpCiAJCQl2YWwgfD0gUlhDT05GSUdfQUxMTVVMVEk7CiAJCWVsc2UKLQkJCWk9X19iNDRfbG9hZF9tY2FzdChicCwgZGV2KTsKKwkJCWkgPSBfX2I0NF9sb2FkX21jYXN0KGJwLCBkZXYpOwogCQkKLQkJZm9yKDtpPDY0O2krKykgeworCQlmb3IgKDsgaSA8IDY0OyBpKyspIHsKIAkJCV9fYjQ0X2NhbV93cml0ZShicCwgemVybywgaSk7CQkJCiAJCX0KIAkJYnczMihicCwgQjQ0X1JYQ09ORklHLCB2YWwpOwpAQCAtMTYwNSw3ICsxNjE2LDcgQEAKIHsKIAlzdHJ1Y3QgYjQ0ICpicCA9IG5ldGRldl9wcml2KGRldik7CiAKLQlpZiAoIShicC0+ZmxhZ3MgJiBCNDRfRkxBR19JTklUX0NPTVBMRVRFKSkKKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKIAkJcmV0dXJuIC1FQUdBSU47CiAJY21kLT5zdXBwb3J0ZWQgPSAoU1VQUE9SVEVEX0F1dG9uZWcpOwogCWNtZC0+c3VwcG9ydGVkIHw9IChTVVBQT1JURURfMTAwYmFzZVRfSGFsZiB8CkBAIC0xNjQzLDcgKzE2NTQsNyBAQAogewogCXN0cnVjdCBiNDQgKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCWlmICghKGJwLT5mbGFncyAmIEI0NF9GTEFHX0lOSVRfQ09NUExFVEUpKQorCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQogCQlyZXR1cm4gLUVBR0FJTjsKIAogCS8qIFdlIGRvIG5vdCBzdXBwb3J0IGdpZ2FiaXQuICovCkBAIC0xNzczLDYgKzE3ODQsMzcgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgYjQ0X2dldF9zdHJpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBzdHJpbmdzZXQsIHU4ICpkYXRhKQoreworCXN3aXRjaChzdHJpbmdzZXQpIHsKKwljYXNlIEVUSF9TU19TVEFUUzoKKwkJbWVtY3B5KGRhdGEsICpiNDRfZ3N0cmluZ3MsIHNpemVvZihiNDRfZ3N0cmluZ3MpKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50IGI0NF9nZXRfc3RhdHNfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gQVJSQVlfU0laRShiNDRfZ3N0cmluZ3MpOworfQorCitzdGF0aWMgdm9pZCBiNDRfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgIHN0cnVjdCBldGh0b29sX3N0YXRzICpzdGF0cywgdTY0ICpkYXRhKQoreworCXN0cnVjdCBiNDQgKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1MzIgKnZhbCA9ICZicC0+aHdfc3RhdHMudHhfZ29vZF9vY3RldHM7CisJdTMyIGk7CisKKwlzcGluX2xvY2tfaXJxKCZicC0+bG9jayk7CisKKwliNDRfc3RhdHNfdXBkYXRlKGJwKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGI0NF9nc3RyaW5ncyk7IGkrKykKKwkJKmRhdGErKyA9ICp2YWwrKzsKKworCXNwaW5fdW5sb2NrX2lycSgmYnAtPmxvY2spOworfQorCiBzdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIGI0NF9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X2RydmluZm8JCT0gYjQ0X2dldF9kcnZpbmZvLAogCS5nZXRfc2V0dGluZ3MJCT0gYjQ0X2dldF9zZXR0aW5ncywKQEAgLTE3ODUsNiArMTgyNyw5IEBACiAJLnNldF9wYXVzZXBhcmFtCQk9IGI0NF9zZXRfcGF1c2VwYXJhbSwKIAkuZ2V0X21zZ2xldmVsCQk9IGI0NF9nZXRfbXNnbGV2ZWwsCiAJLnNldF9tc2dsZXZlbAkJPSBiNDRfc2V0X21zZ2xldmVsLAorCS5nZXRfc3RyaW5ncwkJPSBiNDRfZ2V0X3N0cmluZ3MsCisJLmdldF9zdGF0c19jb3VudAk9IGI0NF9nZXRfc3RhdHNfY291bnQsCisJLmdldF9ldGh0b29sX3N0YXRzCT0gYjQ0X2dldF9ldGh0b29sX3N0YXRzLAogCS5nZXRfcGVybV9hZGRyCQk9IGV0aHRvb2xfb3BfZ2V0X3Blcm1fYWRkciwKIH07CiAKQEAgLTE4OTMsOSArMTkzOCw5IEBACiAJCiAJZXJyID0gcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsICh1NjQpIEI0NF9ETUFfTUFTSyk7CiAJaWYgKGVycikgewotCSAgcHJpbnRrKEtFUk5fRVJSIFBGWCAiTm8gdXNhYmxlIERNQSBjb25maWd1cmF0aW9uLCAiCi0JCSAiYWJvcnRpbmcuXG4iKTsKLQkgIGdvdG8gZXJyX291dF9mcmVlX3JlczsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiTm8gdXNhYmxlIERNQSBjb25maWd1cmF0aW9uLCAiCisJCSAgICAgICAiYWJvcnRpbmcuXG4iKTsKKwkJZ290byBlcnJfb3V0X2ZyZWVfcmVzOwogCX0KIAogCWI0NHJlZ19iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOwpAQCAtMTkxNywxMCArMTk2Miw4IEBACiAJYnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCWJwLT5wZGV2ID0gcGRldjsKIAlicC0+ZGV2ID0gZGV2OwotCWlmIChiNDRfZGVidWcgPj0gMCkKLQkJYnAtPm1zZ19lbmFibGUgPSAoMSA8PCBiNDRfZGVidWcpIC0gMTsKLQllbHNlCi0JCWJwLT5tc2dfZW5hYmxlID0gQjQ0X0RFRl9NU0dfRU5BQkxFOworCisJYnAtPm1zZ19lbmFibGUgPSBuZXRpZl9tc2dfaW5pdChiNDRfZGVidWcsIEI0NF9ERUZfTVNHX0VOQUJMRSk7CiAKIAlzcGluX2xvY2tfaW5pdCgmYnAtPmxvY2spOwogCkBAIC0yMDEwLDE3ICsyMDUzLDE0IEBACiBzdGF0aWMgdm9pZCBfX2RldmV4aXQgYjQ0X3JlbW92ZV9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgYjQ0ICpicCA9IG5ldGRldl9wcml2KGRldik7CiAKLQlpZiAoZGV2KSB7Ci0JCXN0cnVjdCBiNDQgKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCQl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwotCQlpb3VubWFwKGJwLT5yZWdzKTsKLQkJZnJlZV9uZXRkZXYoZGV2KTsKLQkJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKLQkJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwotCQlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7Ci0JfQorCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CisJaW91bm1hcChicC0+cmVncyk7CisJZnJlZV9uZXRkZXYoZGV2KTsKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiB9CiAKIHN0YXRpYyBpbnQgYjQ0X3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2I0NC5oIGIvZHJpdmVycy9uZXQvYjQ0LmgKaW5kZXggNTkzY2IwYS4uYjE3ODY2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYjQ0LmgKKysrIGIvZHJpdmVycy9uZXQvYjQ0LmgKQEAgLTM0NiwyOSArMzQ2LDYzIEBACiAKICNkZWZpbmUgQjQ0X01DQVNUX1RBQkxFX1NJWkUJMzIKIAorI2RlZmluZQlCNDRfU1RBVF9SRUdfREVDTEFSRQkJXAorCV9CNDQodHhfZ29vZF9vY3RldHMpCQlcCisJX0I0NCh0eF9nb29kX3BrdHMpCQlcCisJX0I0NCh0eF9vY3RldHMpCQkJXAorCV9CNDQodHhfcGt0cykJCQlcCisJX0I0NCh0eF9icm9hZGNhc3RfcGt0cykJCVwKKwlfQjQ0KHR4X211bHRpY2FzdF9wa3RzKQkJXAorCV9CNDQodHhfbGVuXzY0KQkJCVwKKwlfQjQ0KHR4X2xlbl82NV90b18xMjcpCQlcCisJX0I0NCh0eF9sZW5fMTI4X3RvXzI1NSkJCVwKKwlfQjQ0KHR4X2xlbl8yNTZfdG9fNTExKQkJXAorCV9CNDQodHhfbGVuXzUxMl90b18xMDIzKQlcCisJX0I0NCh0eF9sZW5fMTAyNF90b19tYXgpCVwKKwlfQjQ0KHR4X2phYmJlcl9wa3RzKQkJXAorCV9CNDQodHhfb3ZlcnNpemVfcGt0cykJCVwKKwlfQjQ0KHR4X2ZyYWdtZW50X3BrdHMpCQlcCisJX0I0NCh0eF91bmRlcnJ1bnMpCQlcCisJX0I0NCh0eF90b3RhbF9jb2xzKQkJXAorCV9CNDQodHhfc2luZ2xlX2NvbHMpCQlcCisJX0I0NCh0eF9tdWx0aXBsZV9jb2xzKQkJXAorCV9CNDQodHhfZXhjZXNzaXZlX2NvbHMpCQlcCisJX0I0NCh0eF9sYXRlX2NvbHMpCQlcCisJX0I0NCh0eF9kZWZlcmVkKQkJXAorCV9CNDQodHhfY2Fycmllcl9sb3N0KQkJXAorCV9CNDQodHhfcGF1c2VfcGt0cykJCVwKKwlfQjQ0KHJ4X2dvb2Rfb2N0ZXRzKQkJXAorCV9CNDQocnhfZ29vZF9wa3RzKQkJXAorCV9CNDQocnhfb2N0ZXRzKQkJCVwKKwlfQjQ0KHJ4X3BrdHMpCQkJXAorCV9CNDQocnhfYnJvYWRjYXN0X3BrdHMpCQlcCisJX0I0NChyeF9tdWx0aWNhc3RfcGt0cykJCVwKKwlfQjQ0KHJ4X2xlbl82NCkJCQlcCisJX0I0NChyeF9sZW5fNjVfdG9fMTI3KQkJXAorCV9CNDQocnhfbGVuXzEyOF90b18yNTUpCQlcCisJX0I0NChyeF9sZW5fMjU2X3RvXzUxMSkJCVwKKwlfQjQ0KHJ4X2xlbl81MTJfdG9fMTAyMykJXAorCV9CNDQocnhfbGVuXzEwMjRfdG9fbWF4KQlcCisJX0I0NChyeF9qYWJiZXJfcGt0cykJCVwKKwlfQjQ0KHJ4X292ZXJzaXplX3BrdHMpCQlcCisJX0I0NChyeF9mcmFnbWVudF9wa3RzKQkJXAorCV9CNDQocnhfbWlzc2VkX3BrdHMpCQlcCisJX0I0NChyeF9jcmNfYWxpZ25fZXJycykJCVwKKwlfQjQ0KHJ4X3VuZGVyc2l6ZSkJCVwKKwlfQjQ0KHJ4X2NyY19lcnJzKQkJXAorCV9CNDQocnhfYWxpZ25fZXJycykJCVwKKwlfQjQ0KHJ4X3N5bWJvbF9lcnJzKQkJXAorCV9CNDQocnhfcGF1c2VfcGt0cykJCVwKKwlfQjQ0KHJ4X25vbnBhdXNlX3BrdHMpCisKIC8qIFNXIGNvcHkgb2YgZGV2aWNlIHN0YXRpc3RpY3MsIGtlcHQgdXAgdG8gZGF0ZSBieSBwZXJpb2RpYyB0aW1lcgotICogd2hpY2ggcHJvYmVzIEhXIHZhbHVlcy4gIE11c3QgaGF2ZSBzYW1lIHJlbGF0aXZlIGxheW91dCBhcyBIVwotICogcmVnaXN0ZXIgYWJvdmUsIGJlY2F1c2UgYjQ0X3N0YXRzX3VwZGF0ZSBkZXBlbmRzIHVwb24gdGhpcy4KKyAqIHdoaWNoIHByb2JlcyBIVyB2YWx1ZXMuIENoZWNrIGI0NF9zdGF0c191cGRhdGUgaWYgeW91IG1lc3Mgd2l0aAorICogdGhlIGxheW91dAogICovCiBzdHJ1Y3QgYjQ0X2h3X3N0YXRzIHsKLQl1MzIgdHhfZ29vZF9vY3RldHMsIHR4X2dvb2RfcGt0cywgdHhfb2N0ZXRzOwotCXUzMiB0eF9wa3RzLCB0eF9icm9hZGNhc3RfcGt0cywgdHhfbXVsdGljYXN0X3BrdHM7Ci0JdTMyIHR4X2xlbl82NCwgdHhfbGVuXzY1X3RvXzEyNywgdHhfbGVuXzEyOF90b18yNTU7Ci0JdTMyIHR4X2xlbl8yNTZfdG9fNTExLCB0eF9sZW5fNTEyX3RvXzEwMjMsIHR4X2xlbl8xMDI0X3RvX21heDsKLQl1MzIgdHhfamFiYmVyX3BrdHMsIHR4X292ZXJzaXplX3BrdHMsIHR4X2ZyYWdtZW50X3BrdHM7Ci0JdTMyIHR4X3VuZGVycnVucywgdHhfdG90YWxfY29scywgdHhfc2luZ2xlX2NvbHM7Ci0JdTMyIHR4X211bHRpcGxlX2NvbHMsIHR4X2V4Y2Vzc2l2ZV9jb2xzLCB0eF9sYXRlX2NvbHM7Ci0JdTMyIHR4X2RlZmVyZWQsIHR4X2NhcnJpZXJfbG9zdCwgdHhfcGF1c2VfcGt0czsKLQl1MzIgX19wYWQxWzhdOwotCi0JdTMyIHJ4X2dvb2Rfb2N0ZXRzLCByeF9nb29kX3BrdHMsIHJ4X29jdGV0czsKLQl1MzIgcnhfcGt0cywgcnhfYnJvYWRjYXN0X3BrdHMsIHJ4X211bHRpY2FzdF9wa3RzOwotCXUzMiByeF9sZW5fNjQsIHJ4X2xlbl82NV90b18xMjcsIHJ4X2xlbl8xMjhfdG9fMjU1OwotCXUzMiByeF9sZW5fMjU2X3RvXzUxMSwgcnhfbGVuXzUxMl90b18xMDIzLCByeF9sZW5fMTAyNF90b19tYXg7Ci0JdTMyIHJ4X2phYmJlcl9wa3RzLCByeF9vdmVyc2l6ZV9wa3RzLCByeF9mcmFnbWVudF9wa3RzOwotCXUzMiByeF9taXNzZWRfcGt0cywgcnhfY3JjX2FsaWduX2VycnMsIHJ4X3VuZGVyc2l6ZTsKLQl1MzIgcnhfY3JjX2VycnMsIHJ4X2FsaWduX2VycnMsIHJ4X3N5bWJvbF9lcnJzOwotCXUzMiByeF9wYXVzZV9wa3RzLCByeF9ub25wYXVzZV9wa3RzOworI2RlZmluZSBfQjQ0KHgpCXUzMiB4OworQjQ0X1NUQVRfUkVHX0RFQ0xBUkUKKyN1bmRlZiBfQjQ0CiB9OwogCiBzdHJ1Y3QgYjQ0IHsKQEAgLTM4Niw3ICs0MjAsNiBAQAogCiAJdTMyCQkJZG1hX29mZnNldDsKIAl1MzIJCQlmbGFnczsKLSNkZWZpbmUgQjQ0X0ZMQUdfSU5JVF9DT01QTEVURQkweDAwMDAwMDAxCiAjZGVmaW5lIEI0NF9GTEFHX0JVR0dZX1RYUFRSCTB4MDAwMDAwMDIKICNkZWZpbmUgQjQ0X0ZMQUdfUkVPUkRFUl9CVUcJMHgwMDAwMDAwNAogI2RlZmluZSBCNDRfRkxBR19QQVVTRV9BVVRPCTB4MDAwMDgwMDAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDIuYyBiL2RyaXZlcnMvbmV0L2JueDIuYwppbmRleCA4ZjQ2NDI3Li40OWZhMWU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyLmMKKysrIGIvZHJpdmVycy9uZXQvYm54Mi5jCkBAIC0yNzA3LDcgKzI3MDcsNyBAQAogCiAJaWYgKGogPT0gZW50cnlfY291bnQpIHsKIAkJYnAtPmZsYXNoX2luZm8gPSBOVUxMOwotCQlwcmludGsoS0VSTl9BTEVSVCAiVW5rbm93biBmbGFzaC9FRVBST00gdHlwZS5cbiIpOworCQlwcmludGsoS0VSTl9BTEVSVCBQRlggIlVua25vd24gZmxhc2gvRUVQUk9NIHR5cGUuXG4iKTsKIAkJcmMgPSAtRU5PREVWOwogCX0KIApAQCAtMzkwMyw2ICszOTAzLDggQEAKIAogCXBrdF9zaXplID0gMTUxNDsKIAlza2IgPSBkZXZfYWxsb2Nfc2tiKHBrdF9zaXplKTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuIC1FTk9NRU07CiAJcGFja2V0ID0gc2tiX3B1dChza2IsIHBrdF9zaXplKTsKIAltZW1jcHkocGFja2V0LCBicC0+bWFjX2FkZHIsIDYpOwogCW1lbXNldChwYWNrZXQgKyA2LCAweDAsIDgpOwpAQCAtNDc5OCwxMSArNDgwMCw3IEBACiAgIAlzdHJ1Y3QgYm54MiAqYnAgPSBkZXYtPnByaXY7CiAJaW50IHJjOwogCi0JaWYgKGVlcHJvbS0+b2Zmc2V0ID4gYnAtPmZsYXNoX2luZm8tPnRvdGFsX3NpemUpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKChlZXByb20tPm9mZnNldCArIGVlcHJvbS0+bGVuKSA+IGJwLT5mbGFzaF9pbmZvLT50b3RhbF9zaXplKQotCQllZXByb20tPmxlbiA9IGJwLT5mbGFzaF9pbmZvLT50b3RhbF9zaXplIC0gZWVwcm9tLT5vZmZzZXQ7CisJLyogcGFyYW1ldGVycyBhbHJlYWR5IHZhbGlkYXRlZCBpbiBldGh0b29sX2dldF9lZXByb20gKi8KIAogCXJjID0gYm54Ml9udnJhbV9yZWFkKGJwLCBlZXByb20tPm9mZnNldCwgZWVidWYsIGVlcHJvbS0+bGVuKTsKIApAQCAtNDgxNiwxMSArNDgxNCw3IEBACiAgIAlzdHJ1Y3QgYm54MiAqYnAgPSBkZXYtPnByaXY7CiAJaW50IHJjOwogCi0JaWYgKGVlcHJvbS0+b2Zmc2V0ID4gYnAtPmZsYXNoX2luZm8tPnRvdGFsX3NpemUpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKChlZXByb20tPm9mZnNldCArIGVlcHJvbS0+bGVuKSA+IGJwLT5mbGFzaF9pbmZvLT50b3RhbF9zaXplKQotCQllZXByb20tPmxlbiA9IGJwLT5mbGFzaF9pbmZvLT50b3RhbF9zaXplIC0gZWVwcm9tLT5vZmZzZXQ7CisJLyogcGFyYW1ldGVycyBhbHJlYWR5IHZhbGlkYXRlZCBpbiBldGh0b29sX3NldF9lZXByb20gKi8KIAogCXJjID0gYm54Ml9udnJhbV93cml0ZShicCwgZWVwcm9tLT5vZmZzZXQsIGVlYnVmLCBlZXByb20tPmxlbik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jCmluZGV4IDgwMzIxMjYuLjk0Y2VjM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYwpAQCAtMTYwNCwzNSArMTYwNCwyNyBAQAogCShORVRJRl9GX1NHfE5FVElGX0ZfSVBfQ1NVTXxORVRJRl9GX05PX0NTVU18TkVUSUZfRl9IV19DU1VNKQogCiAvKiAKLSAqIENvbXB1dGUgdGhlIGZlYXR1cmVzIGF2YWlsYWJsZSB0byB0aGUgYm9uZGluZyBkZXZpY2UgYnkgCi0gKiBpbnRlcnNlY3Rpb24gb2YgYWxsIG9mIHRoZSBzbGF2ZSBkZXZpY2VzJyBCT05EX0lOVEVSU0VDVF9GRUFUVVJFUy4KLSAqIENhbGwgdGhpcyBhZnRlciBhdHRhY2hpbmcgb3IgZGV0YWNoaW5nIGEgc2xhdmUgdG8gdXBkYXRlIHRoZSAKLSAqIGJvbmQncyBmZWF0dXJlcy4KKyAqIENvbXB1dGUgdGhlIGNvbW1vbiBkZXYtPmZlYXR1cmUgc2V0IGF2YWlsYWJsZSB0byBhbGwgc2xhdmVzLiAgU29tZQorICogZmVhdHVyZSBiaXRzIGFyZSBtYW5hZ2VkIGVsc2V3aGVyZSwgc28gcHJlc2VydmUgZmVhdHVyZSBiaXRzIHNldCBvbgorICogbWFzdGVyIGRldmljZSB0aGF0IGFyZSBub3QgcGFydCBvZiB0aGUgZXhhbWluZWQgc2V0LgogICovCiBzdGF0aWMgaW50IGJvbmRfY29tcHV0ZV9mZWF0dXJlcyhzdHJ1Y3QgYm9uZGluZyAqYm9uZCkKIHsKLQlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIGZlYXR1cmVzID0gQk9ORF9JTlRFUlNFQ1RfRkVBVFVSRVM7CiAJc3RydWN0IHNsYXZlICpzbGF2ZTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYgPSBib25kLT5kZXY7Ci0JaW50IGZlYXR1cmVzID0gYm9uZC0+Ym9uZF9mZWF0dXJlczsKKwlpbnQgaTsKIAotCWJvbmRfZm9yX2VhY2hfc2xhdmUoYm9uZCwgc2xhdmUsIGkpIHsKLQkJc3RydWN0IG5ldF9kZXZpY2UgKiBzbGF2ZV9kZXYgPSBzbGF2ZS0+ZGV2OwotCQlpZiAoaSA9PSAwKSB7Ci0JCQlmZWF0dXJlcyB8PSBCT05EX0lOVEVSU0VDVF9GRUFUVVJFUzsKLQkJfQotCQlmZWF0dXJlcyAmPQotCQkJfih+c2xhdmVfZGV2LT5mZWF0dXJlcyAmIEJPTkRfSU5URVJTRUNUX0ZFQVRVUkVTKTsKLQl9CisJYm9uZF9mb3JfZWFjaF9zbGF2ZShib25kLCBzbGF2ZSwgaSkKKwkJZmVhdHVyZXMgJj0gKHNsYXZlLT5kZXYtPmZlYXR1cmVzICYgQk9ORF9JTlRFUlNFQ1RfRkVBVFVSRVMpOwogCi0JLyogdHVybiBvZmYgTkVUSUZfRl9TRyBpZiB3ZSBuZWVkIGEgY3N1bSBhbmQgaC93IGNhbid0IGRvIGl0ICovCiAJaWYgKChmZWF0dXJlcyAmIE5FVElGX0ZfU0cpICYmIAotCQkhKGZlYXR1cmVzICYgKE5FVElGX0ZfSVBfQ1NVTSB8Ci0JCQkgICAgICBORVRJRl9GX05PX0NTVU0gfAotCQkJICAgICAgTkVUSUZfRl9IV19DU1VNKSkpIHsKKwkgICAgIShmZWF0dXJlcyAmIChORVRJRl9GX0lQX0NTVU0gfAorCQkJICBORVRJRl9GX05PX0NTVU0gfAorCQkJICBORVRJRl9GX0hXX0NTVU0pKSkKIAkJZmVhdHVyZXMgJj0gfk5FVElGX0ZfU0c7Ci0JfQogCisJZmVhdHVyZXMgfD0gKGJvbmRfZGV2LT5mZWF0dXJlcyAmIH5CT05EX0lOVEVSU0VDVF9GRUFUVVJFUyk7CiAJYm9uZF9kZXYtPmZlYXR1cmVzID0gZmVhdHVyZXM7CiAKIAlyZXR1cm4gMDsKQEAgLTQ1NjEsOCArNDU1Myw2IEBACiAJCQkgICAgICAgTkVUSUZfRl9IV19WTEFOX1JYIHwKIAkJCSAgICAgICBORVRJRl9GX0hXX1ZMQU5fRklMVEVSKTsKIAotCWJvbmQtPmJvbmRfZmVhdHVyZXMgPSBib25kX2Rldi0+ZmVhdHVyZXM7Ci0KICNpZmRlZiBDT05GSUdfUFJPQ19GUwogCWJvbmRfY3JlYXRlX3Byb2NfZW50cnkoYm9uZCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZGluZy5oIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kaW5nLmgKaW5kZXggYmJmOWRhOC4uMTQzM2U5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kaW5nLmgKKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kaW5nLmgKQEAgLTQwLDggKzQwLDggQEAKICNpbmNsdWRlICJib25kXzNhZC5oIgogI2luY2x1ZGUgImJvbmRfYWxiLmgiCiAKLSNkZWZpbmUgRFJWX1ZFUlNJT04JIjIuNi40IgotI2RlZmluZSBEUlZfUkVMREFURQkiU2VwdGVtYmVyIDI2LCAyMDA1IgorI2RlZmluZSBEUlZfVkVSU0lPTgkiMi42LjUiCisjZGVmaW5lIERSVl9SRUxEQVRFCSJOb3ZlbWJlciA0LCAyMDA1IgogI2RlZmluZSBEUlZfTkFNRQkiYm9uZGluZyIKICNkZWZpbmUgRFJWX0RFU0NSSVBUSU9OCSJFdGhlcm5ldCBDaGFubmVsIEJvbmRpbmcgRHJpdmVyIgogCkBAIC0yMTEsOSArMjExLDYgQEAKIAlzdHJ1Y3QgICBib25kX3BhcmFtcyBwYXJhbXM7CiAJc3RydWN0ICAgbGlzdF9oZWFkIHZsYW5fbGlzdDsKIAlzdHJ1Y3QgICB2bGFuX2dyb3VwICp2bGdycDsKLQkvKiB0aGUgZmVhdHVyZXMgdGhlIGJvbmRpbmcgZGV2aWNlIHN1cHBvcnRzLCBpbmRlcGVuZGVudGx5IAotCSAqIG9mIGFueSBzbGF2ZXMgKi8KLQlpbnQJIGJvbmRfZmVhdHVyZXM7IAogfTsKIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYXNzaW5pLmMgYi9kcml2ZXJzL25ldC9jYXNzaW5pLmMKaW5kZXggNTBmNDNkYi4uMWY3Y2E0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2Fzc2luaS5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhc3NpbmkuYwpAQCAtNjcsNyArNjcsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NyaXMvZXRoX3YxMC5jIGIvZHJpdmVycy9uZXQvY3Jpcy9ldGhfdjEwLmMKaW5kZXggYjY4YjljYS4uNjQxMDVlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3Jpcy9ldGhfdjEwLmMKKysrIGIvZHJpdmVycy9uZXQvY3Jpcy9ldGhfdjEwLmMKQEAgLTQwOSw3ICs0MDksNiBAQAogc3RhdGljIHZvaWQgZTEwMF9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgZTEwMF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgZTEwMF9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmciwgaW50IGNtZCk7Ci1zdGF0aWMgaW50IGUxMDBfZXRodG9vbF9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSogZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmcik7CiBzdGF0aWMgaW50IGUxMDBfc2V0X2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSogZGV2LCBzdHJ1Y3QgaWZtYXAqIG1hcCk7CiBzdGF0aWMgdm9pZCBlMTAwX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmUxMDBfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpAQCAtNDM2LDYgKzQzNSw4IEBACiBzdGF0aWMgdm9pZCBlMTAwX2NsZWFyX25ldHdvcmtfbGVkcyh1bnNpZ25lZCBsb25nIGR1bW15KTsKIHN0YXRpYyB2b2lkIGUxMDBfc2V0X25ldHdvcmtfbGVkcyhpbnQgYWN0aXZlKTsKIAorc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBlMTAwX2V0aHRvb2xfb3BzOworCiBzdGF0aWMgdm9pZCBicm9hZGNvbV9jaGVja19zcGVlZChzdHJ1Y3QgbmV0X2RldmljZSogZGV2KTsKIHN0YXRpYyB2b2lkIGJyb2FkY29tX2NoZWNrX2R1cGxleChzdHJ1Y3QgbmV0X2RldmljZSogZGV2KTsKIHN0YXRpYyB2b2lkIHRka19jaGVja19zcGVlZChzdHJ1Y3QgbmV0X2RldmljZSogZGV2KTsKQEAgLTQ5NSw2ICs0OTYsNyBAQAogCWRldi0+Z2V0X3N0YXRzICAgICAgICAgID0gZTEwMF9nZXRfc3RhdHM7CiAJZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBzZXRfbXVsdGljYXN0X2xpc3Q7CiAJZGV2LT5zZXRfbWFjX2FkZHJlc3MgICAgPSBlMTAwX3NldF9tYWNfYWRkcmVzczsKKwlkZXYtPmV0aHRvb2xfb3BzCT0gJmUxMDBfZXRodG9vbF9vcHM7CiAJZGV2LT5kb19pb2N0bCAgICAgICAgICAgPSBlMTAwX2lvY3RsOwogCWRldi0+c2V0X2NvbmZpZwkJPSBlMTAwX3NldF9jb25maWc7CiAJZGV2LT50eF90aW1lb3V0ICAgICAgICAgPSBlMTAwX3R4X3RpbWVvdXQ7CkBAIC0xNDQ4LDggKzE0NTAsNiBAQAogCiAJc3Bpbl9sb2NrKCZucC0+bG9jayk7IC8qIFByZWVtcHQgcHJvdGVjdGlvbiAqLwogCXN3aXRjaCAoY21kKSB7Ci0JCWNhc2UgU0lPQ0VUSFRPT0w6Ci0JCQlyZXR1cm4gZTEwMF9ldGh0b29sX2lvY3RsKGRldixpZnIpOwogCQljYXNlIFNJT0NHTUlJUEhZOiAvKiBHZXQgUEhZIGFkZHJlc3MgKi8KIAkJCWRhdGEtPnBoeV9pZCA9IG1kaW9fcGh5X2FkZHI7CiAJCQlicmVhazsKQEAgLTE0ODYsODggKzE0ODYsODEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotZTEwMF9ldGh0b29sX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyKQorc3RhdGljIGludCBlMTAwX3NldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgICBzdHJ1Y3QgZXRodG9vbF9jbWQgKmVjbWQpCiB7Ci0Jc3RydWN0IGV0aHRvb2xfY21kIGVjbWQ7Ci0KLQlpZiAoY29weV9mcm9tX3VzZXIoJmVjbWQsIGlmci0+aWZyX2RhdGEsIHNpemVvZiAoZWNtZCkpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCXN3aXRjaCAoZWNtZC5jbWQpIHsKLQkJY2FzZSBFVEhUT09MX0dTRVQ6Ci0JCXsKLQkJCW1lbXNldCgodm9pZCAqKSAmZWNtZCwgMCwgc2l6ZW9mIChlY21kKSk7Ci0JCQllY21kLnN1cHBvcnRlZCA9Ci0JCQkgIFNVUFBPUlRFRF9BdXRvbmVnIHwgU1VQUE9SVEVEX1RQIHwgU1VQUE9SVEVEX01JSSB8CisJZWNtZC0+c3VwcG9ydGVkID0gU1VQUE9SVEVEX0F1dG9uZWcgfCBTVVBQT1JURURfVFAgfCBTVVBQT1JURURfTUlJIHwKIAkJCSAgU1VQUE9SVEVEXzEwYmFzZVRfSGFsZiB8IFNVUFBPUlRFRF8xMGJhc2VUX0Z1bGwgfAogCQkJICBTVVBQT1JURURfMTAwYmFzZVRfSGFsZiB8IFNVUFBPUlRFRF8xMDBiYXNlVF9GdWxsOwotCQkJZWNtZC5wb3J0ID0gUE9SVF9UUDsKLQkJCWVjbWQudHJhbnNjZWl2ZXIgPSBYQ1ZSX0VYVEVSTkFMOwotCQkJZWNtZC5waHlfYWRkcmVzcyA9IG1kaW9fcGh5X2FkZHI7Ci0JCQllY21kLnNwZWVkID0gY3VycmVudF9zcGVlZDsKLQkJCWVjbWQuZHVwbGV4ID0gZnVsbF9kdXBsZXggPyBEVVBMRVhfRlVMTCA6IERVUExFWF9IQUxGOwotCQkJZWNtZC5hZHZlcnRpc2luZyA9IEFEVkVSVElTRURfVFA7Ci0JCQlpZiAoY3VycmVudF9kdXBsZXggPT0gYXV0b25lZyAmJiBjdXJyZW50X3NwZWVkX3NlbGVjdGlvbiA9PSAwKQotCQkJCWVjbWQuYWR2ZXJ0aXNpbmcgfD0gQURWRVJUSVNFRF9BdXRvbmVnOwotCQkJZWxzZSB7Ci0JCQkJZWNtZC5hZHZlcnRpc2luZyB8PQotCQkJCSAgQURWRVJUSVNFRF8xMGJhc2VUX0hhbGYgfCBBRFZFUlRJU0VEXzEwYmFzZVRfRnVsbCB8Ci0JCQkJICBBRFZFUlRJU0VEXzEwMGJhc2VUX0hhbGYgfCBBRFZFUlRJU0VEXzEwMGJhc2VUX0Z1bGw7Ci0JCQkJaWYgKGN1cnJlbnRfc3BlZWRfc2VsZWN0aW9uID09IDEwKQotCQkJCQllY21kLmFkdmVydGlzaW5nICY9IH4oQURWRVJUSVNFRF8xMDBiYXNlVF9IYWxmIHwgQURWRVJUSVNFRF8xMDBiYXNlVF9GdWxsKTsKLQkJCQllbHNlIGlmIChjdXJyZW50X3NwZWVkX3NlbGVjdGlvbiA9PSAxMDApCi0JCQkJCWVjbWQuYWR2ZXJ0aXNpbmcgJj0gfihBRFZFUlRJU0VEXzEwYmFzZVRfSGFsZiB8IEFEVkVSVElTRURfMTBiYXNlVF9GdWxsKTsKLQkJCQlpZiAoY3VycmVudF9kdXBsZXggPT0gaGFsZikKLQkJCQkJZWNtZC5hZHZlcnRpc2luZyAmPSB+KEFEVkVSVElTRURfMTBiYXNlVF9GdWxsIHwgQURWRVJUSVNFRF8xMDBiYXNlVF9GdWxsKTsKLQkJCQllbHNlIGlmIChjdXJyZW50X2R1cGxleCA9PSBmdWxsKQotCQkJCQllY21kLmFkdmVydGlzaW5nICY9IH4oQURWRVJUSVNFRF8xMGJhc2VUX0hhbGYgfCBBRFZFUlRJU0VEXzEwMGJhc2VUX0hhbGYpOwotCQkJfQotCQkJZWNtZC5hdXRvbmVnID0gQVVUT05FR19FTkFCTEU7Ci0JCQlpZiAoY29weV90b191c2VyKGlmci0+aWZyX2RhdGEsICZlY21kLCBzaXplb2YgKGVjbWQpKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJfQotCQlicmVhazsKLQkJY2FzZSBFVEhUT09MX1NTRVQ6Ci0JCXsKLQkJCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkgewotCQkJCXJldHVybiAtRVBFUk07Ci0JCQl9Ci0JCQlpZiAoZWNtZC5hdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFKSB7Ci0JCQkJZTEwMF9zZXRfZHVwbGV4KGRldiwgYXV0b25lZyk7Ci0JCQkJZTEwMF9zZXRfc3BlZWQoZGV2LCAwKTsKLQkJCX0gZWxzZSB7Ci0JCQkJZTEwMF9zZXRfZHVwbGV4KGRldiwgZWNtZC5kdXBsZXggPT0gRFVQTEVYX0hBTEYgPyBoYWxmIDogZnVsbCk7Ci0JCQkJZTEwMF9zZXRfc3BlZWQoZGV2LCBlY21kLnNwZWVkID09IFNQRUVEXzEwID8gMTA6IDEwMCk7Ci0JCQl9Ci0JCX0KLQkJYnJlYWs7Ci0JCWNhc2UgRVRIVE9PTF9HRFJWSU5GTzoKLQkJewotCQkJc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyBpbmZvOwotCQkJbWVtc2V0KCh2b2lkICopICZpbmZvLCAwLCBzaXplb2YgKGluZm8pKTsKLQkJCXN0cm5jcHkoaW5mby5kcml2ZXIsICJFVFJBWCAxMDBMWCIsIHNpemVvZihpbmZvLmRyaXZlcikgLSAxKTsKLQkJCXN0cm5jcHkoaW5mby52ZXJzaW9uLCAiJFJldmlzaW9uOiAxLjMxICQiLCBzaXplb2YoaW5mby52ZXJzaW9uKSAtIDEpOwotCQkJc3RybmNweShpbmZvLmZ3X3ZlcnNpb24sICJOL0EiLCBzaXplb2YoaW5mby5md192ZXJzaW9uKSAtIDEpOwotCQkJc3RybmNweShpbmZvLmJ1c19pbmZvLCAiTi9BIiwgc2l6ZW9mKGluZm8uYnVzX2luZm8pIC0gMSk7Ci0JCQlpbmZvLnJlZ2R1bXBfbGVuID0gMDsKLQkJCWluZm8uZWVkdW1wX2xlbiA9IDA7Ci0JCQlpbmZvLnRlc3RpbmZvX2xlbiA9IDA7Ci0JCQlpZiAoY29weV90b191c2VyKGlmci0+aWZyX2RhdGEsICZpbmZvLCBzaXplb2YgKGluZm8pKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJfQotCQlicmVhazsKLQkJY2FzZSBFVEhUT09MX05XQVlfUlNUOgotCQkJaWYgKGN1cnJlbnRfZHVwbGV4ID09IGF1dG9uZWcgJiYgY3VycmVudF9zcGVlZF9zZWxlY3Rpb24gPT0gMCkKLQkJCQllMTAwX25lZ290aWF0ZShkZXYpOwotCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRU9QTk9UU1VQUDsKLQkJYnJlYWs7CisJZWNtZC0+cG9ydCA9IFBPUlRfVFA7CisJZWNtZC0+dHJhbnNjZWl2ZXIgPSBYQ1ZSX0VYVEVSTkFMOworCWVjbWQtPnBoeV9hZGRyZXNzID0gbWRpb19waHlfYWRkcjsKKwllY21kLT5zcGVlZCA9IGN1cnJlbnRfc3BlZWQ7CisJZWNtZC0+ZHVwbGV4ID0gZnVsbF9kdXBsZXggPyBEVVBMRVhfRlVMTCA6IERVUExFWF9IQUxGOworCWVjbWQtPmFkdmVydGlzaW5nID0gQURWRVJUSVNFRF9UUDsKKworCWlmIChjdXJyZW50X2R1cGxleCA9PSBhdXRvbmVnICYmIGN1cnJlbnRfc3BlZWRfc2VsZWN0aW9uID09IDApCisJCWVjbWQtPmFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfQXV0b25lZzsKKwllbHNlIHsKKwkJZWNtZC0+YWR2ZXJ0aXNpbmcgfD0KKwkJCUFEVkVSVElTRURfMTBiYXNlVF9IYWxmIHwgQURWRVJUSVNFRF8xMGJhc2VUX0Z1bGwgfAorCQkJQURWRVJUSVNFRF8xMDBiYXNlVF9IYWxmIHwgQURWRVJUSVNFRF8xMDBiYXNlVF9GdWxsOworCQlpZiAoY3VycmVudF9zcGVlZF9zZWxlY3Rpb24gPT0gMTApCisJCQllY21kLT5hZHZlcnRpc2luZyAmPSB+KEFEVkVSVElTRURfMTAwYmFzZVRfSGFsZiB8CisJCQkJCSAgICAgICBBRFZFUlRJU0VEXzEwMGJhc2VUX0Z1bGwpOworCQllbHNlIGlmIChjdXJyZW50X3NwZWVkX3NlbGVjdGlvbiA9PSAxMDApCisJCQllY21kLT5hZHZlcnRpc2luZyAmPSB+KEFEVkVSVElTRURfMTBiYXNlVF9IYWxmIHwKKwkJCQkJICAgICAgIEFEVkVSVElTRURfMTBiYXNlVF9GdWxsKTsKKwkJaWYgKGN1cnJlbnRfZHVwbGV4ID09IGhhbGYpCisJCQllY21kLT5hZHZlcnRpc2luZyAmPSB+KEFEVkVSVElTRURfMTBiYXNlVF9GdWxsIHwKKwkJCQkJICAgICAgIEFEVkVSVElTRURfMTAwYmFzZVRfRnVsbCk7CisJCWVsc2UgaWYgKGN1cnJlbnRfZHVwbGV4ID09IGZ1bGwpCisJCQllY21kLT5hZHZlcnRpc2luZyAmPSB+KEFEVkVSVElTRURfMTBiYXNlVF9IYWxmIHwKKwkJCQkJICAgICAgIEFEVkVSVElTRURfMTAwYmFzZVRfSGFsZik7CiAJfQorCisJZWNtZC0+YXV0b25lZyA9IEFVVE9ORUdfRU5BQkxFOwogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGUxMDBfc2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgIHN0cnVjdCBldGh0b29sX2NtZCAqZWNtZCkKK3sKKwlpZiAoZWNtZC0+YXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSkgeworCQllMTAwX3NldF9kdXBsZXgoZGV2LCBhdXRvbmVnKTsKKwkJZTEwMF9zZXRfc3BlZWQoZGV2LCAwKTsKKwl9IGVsc2UgeworCQllMTAwX3NldF9kdXBsZXgoZGV2LCBlY21kLT5kdXBsZXggPT0gRFVQTEVYX0hBTEYgPyBoYWxmIDogZnVsbCk7CisJCWUxMDBfc2V0X3NwZWVkKGRldiwgZWNtZC0+c3BlZWQgPT0gU1BFRURfMTAgPyAxMDogMTAwKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZTEwMF9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgICBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICppbmZvKQoreworCXN0cm5jcHkoaW5mby0+ZHJpdmVyLCAiRVRSQVggMTAwTFgiLCBzaXplb2YoaW5mby0+ZHJpdmVyKSAtIDEpOworCXN0cm5jcHkoaW5mby0+dmVyc2lvbiwgIiRSZXZpc2lvbjogMS4zMSAkIiwgc2l6ZW9mKGluZm8tPnZlcnNpb24pIC0gMSk7CisJc3RybmNweShpbmZvLT5md192ZXJzaW9uLCAiTi9BIiwgc2l6ZW9mKGluZm8tPmZ3X3ZlcnNpb24pIC0gMSk7CisJc3RybmNweShpbmZvLT5idXNfaW5mbywgIk4vQSIsIHNpemVvZihpbmZvLT5idXNfaW5mbykgLSAxKTsKK30KKworc3RhdGljIGludCBlMTAwX253YXlfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlpZiAoY3VycmVudF9kdXBsZXggPT0gYXV0b25lZyAmJiBjdXJyZW50X3NwZWVkX3NlbGVjdGlvbiA9PSAwKQorCQllMTAwX25lZ290aWF0ZShkZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIGUxMDBfZXRodG9vbF9vcHMgPSB7CisJLmdldF9zZXR0aW5ncwk9IGUxMDBfZ2V0X3NldHRpbmdzLAorCS5zZXRfc2V0dGluZ3MJPSBlMTAwX3NldF9zZXR0aW5ncywKKwkuZ2V0X2RydmluZm8JPSBlMTAwX2dldF9kcnZpbmZvLAorCS5ud2F5X3Jlc2V0CT0gZTEwMF9ud2F5X3Jlc2V0LAorCS5nZXRfbGluawk9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCit9OworCiBzdGF0aWMgaW50CiBlMTAwX3NldF9jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmbWFwICptYXApCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kZXBjYS5jIGIvZHJpdmVycy9uZXQvZGVwY2EuYwppbmRleCAwZDMzYTkzLi4wMzgwNGNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kZXBjYS5jCisrKyBiL2RyaXZlcnMvbmV0L2RlcGNhLmMKQEAgLTM5OCwxMyArMzk4LDE5IEBACiB9OwogI2VuZGlmCiAKLXN0YXRpYyBpbnQgZGVwY2FfaXNhX3Byb2JlIChzdHJ1Y3QgZGV2aWNlICopOworc3RhdGljIGludCBkZXBjYV9pc2FfcHJvYmUgKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKik7CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBkZXBjYV9pc2FfZHJpdmVyID0gewotCS5uYW1lICAgPSBkZXBjYV9zdHJpbmcsCi0JLmJ1cyAgICA9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBpbnQgX19kZXZleGl0IGRlcGNhX2lzYV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gZGVwY2FfZGV2aWNlX3JlbW92ZSgmcGRldi0+ZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZGVwY2FfaXNhX2RyaXZlciA9IHsKIAkucHJvYmUgID0gZGVwY2FfaXNhX3Byb2JlLAotCS5yZW1vdmUgPSBfX2RldmV4aXRfcChkZXBjYV9kZXZpY2VfcmVtb3ZlKSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoZGVwY2FfaXNhX3JlbW92ZSksCisJLmRyaXZlcgk9IHsKKwkJLm5hbWUgICA9IGRlcGNhX3N0cmluZywKKwl9LAogfTsKIAkKIC8qCkBAIC0xNTI1LDcgKzE1MzEsNyBAQAogCXJldHVybiBhZGFwdGVyOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBkZXBjYV9pc2FfcHJvYmUgKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKK3N0YXRpYyBpbnQgX19pbml0IGRlcGNhX2lzYV9wcm9iZSAoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IGRlcGNhX3ByaXZhdGUgKmxwOwpAQCAtMTUzMyw3ICsxNTM5LDcgQEAKIAllbnVtIGRlcGNhX3R5cGUgYWRhcHRlciA9IHVua25vd247CiAJaW50IHN0YXR1cyA9IDA7CiAKLQlpb2FkZHIgPSAodV9sb25nKSBkZXZpY2UtPnBsYXRmb3JtX2RhdGE7CisJaW9hZGRyID0gKHVfbG9uZykgZGV2aWNlLT5kZXYucGxhdGZvcm1fZGF0YTsKIAogCWlmICgoc3RhdHVzID0gZGVwY2FfY29tbW9uX2luaXQgKGlvYWRkciwgJmRldikpKQogCQlnb3RvIG91dDsKQEAgLTE1NTMsNyArMTU1OSw3IEBACiAJbHAtPmFkYXB0ZXIgPSBhZGFwdGVyOwogCWxwLT5tZW1fc3RhcnQgPSBtZW1fc3RhcnQ7CiAJCi0JaWYgKChzdGF0dXMgPSBkZXBjYV9od19pbml0KGRldiwgZGV2aWNlKSkpCisJaWYgKChzdGF0dXMgPSBkZXBjYV9od19pbml0KGRldiwgJmRldmljZS0+ZGV2KSkpCiAJCWdvdG8gb3V0X2ZyZWU7CiAJCiAJcmV0dXJuIDA7CkBAIC0yMDgyLDcgKzIwODgsNyBAQAogI2lmZGVmIENPTkZJR19FSVNBCiAgICAgICAgIGVyciB8PSBlaXNhX2RyaXZlcl9yZWdpc3RlciAoJmRlcGNhX2Vpc2FfZHJpdmVyKTsKICNlbmRpZgotCWVyciB8PSBkcml2ZXJfcmVnaXN0ZXIgKCZkZXBjYV9pc2FfZHJpdmVyKTsKKwllcnIgfD0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyICgmZGVwY2FfaXNhX2RyaXZlcik7CiAJZGVwY2FfcGxhdGZvcm1fcHJvYmUgKCk7CiAJCiAgICAgICAgIHJldHVybiBlcnI7CkBAIC0yMDk3LDcgKzIxMDMsNyBAQAogI2lmZGVmIENPTkZJR19FSVNBCiAgICAgICAgIGVpc2FfZHJpdmVyX3VucmVnaXN0ZXIgKCZkZXBjYV9laXNhX2RyaXZlcik7CiAjZW5kaWYKLQlkcml2ZXJfdW5yZWdpc3RlciAoJmRlcGNhX2lzYV9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyICgmZGVwY2FfaXNhX2RyaXZlcik7CiAKIAlmb3IgKGkgPSAwOyBkZXBjYV9pb19wb3J0c1tpXS5pb2Jhc2U7IGkrKykgewogCQlpZiAoZGVwY2FfaW9fcG9ydHNbaV0uZGV2aWNlKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kZ3JzLmMgYi9kcml2ZXJzL25ldC9kZ3JzLmMKaW5kZXggNzgwOTgzOC4uMmEyOTBjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZGdycy5jCisrKyBiL2RyaXZlcnMvbmV0L2RncnMuYwpAQCAtMTU0OSw3ICsxNTQ5LDcgQEAKIHN0YXRpYyBpbnQgX19pbml0IGRncnNfaW5pdF9tb2R1bGUgKHZvaWQpCiB7CiAJaW50CWk7Ci0JaW50IGVpc2Fjb3VudCA9IDAsIHBjaWNvdW50ID0gMDsKKwlpbnQJY2FyZGNvdW50ID0gMDsKIAogCS8qCiAJICoJQ29tbWFuZCBsaW5lIHZhcmlhYmxlIG92ZXJyaWRlcwpAQCAtMTU5MSwxNSArMTU5MSwxMyBAQAogCSAqCUZpbmQgYW5kIGNvbmZpZ3VyZSBhbGwgdGhlIGNhcmRzCiAJICovCiAjaWZkZWYgQ09ORklHX0VJU0EKLQllaXNhY291bnQgPSBlaXNhX2RyaXZlcl9yZWdpc3RlcigmZGdyc19laXNhX2RyaXZlcik7Ci0JaWYgKGVpc2Fjb3VudCA8IDApCi0JCXJldHVybiBlaXNhY291bnQ7CisJY2FyZGNvdW50ID0gZWlzYV9kcml2ZXJfcmVnaXN0ZXIoJmRncnNfZWlzYV9kcml2ZXIpOworCWlmIChjYXJkY291bnQgPCAwKQorCQlyZXR1cm4gY2FyZGNvdW50OwogI2VuZGlmCi0jaWZkZWYgQ09ORklHX1BDSQotCXBjaWNvdW50ID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmZGdyc19wY2lfZHJpdmVyKTsKLQlpZiAocGNpY291bnQpCi0JCXJldHVybiBwY2ljb3VudDsKLSNlbmRpZgorCWNhcmRjb3VudCA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmRncnNfcGNpX2RyaXZlcik7CisJaWYgKGNhcmRjb3VudCkKKwkJcmV0dXJuIGNhcmRjb3VudDsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZG05MDAwLmMgYi9kcml2ZXJzL25ldC9kbTkwMDAuYwppbmRleCBjMGFmNmZiLi4yNDk5NmRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kbTkwMDAuYworKysgYi9kcml2ZXJzL25ldC9kbTkwMDAuYwpAQCAtNjAsNyArNjAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CiAjaW5jbHVkZSA8bGludXgvbWlpLmg+CkBAIC0xNDksNyArMTQ4LDcgQEAKIH0gYm9hcmRfaW5mb190OwogCiAvKiBmdW5jdGlvbiBkZWNsYXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi1zdGF0aWMgaW50IGRtOTAwMF9wcm9iZShzdHJ1Y3QgZGV2aWNlICopOworc3RhdGljIGludCBkbTkwMDBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqKTsKIHN0YXRpYyBpbnQgZG05MDAwX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKik7CiBzdGF0aWMgaW50IGRtOTAwMF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICosIHN0cnVjdCBuZXRfZGV2aWNlICopOwogc3RhdGljIGludCBkbTkwMDBfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqKTsKQEAgLTM3OSw5ICszNzgsOCBAQAogICogU2VhcmNoIERNOTAwMCBib2FyZCwgYWxsb2NhdGUgc3BhY2UgYW5kIHJlZ2lzdGVyIGl0CiAgKi8KIHN0YXRpYyBpbnQKLWRtOTAwMF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitkbTkwMDBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJc3RydWN0IGRtOTAwMF9wbGF0X2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IGJvYXJkX2luZm8gKmRiOwkvKiBQb2ludCBhIGJvYXJkIGluZm9ybWF0aW9uIHN0cnVjdHVyZSAqLwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2OwpAQCAtMzk5LDcgKzM5Nyw3IEBACiAJfQogCiAJU0VUX01PRFVMRV9PV05FUihuZGV2KTsKLQlTRVRfTkVUREVWX0RFVihuZGV2LCBkZXYpOworCVNFVF9ORVRERVZfREVWKG5kZXYsICZwZGV2LT5kZXYpOwogCiAJUFJJTlRLMigiZG05MDAwX3Byb2JlKCkiKTsKIApAQCAtNTcwLDcgKzU2OCw3IEBACiAJCXByaW50aygiJXM6IEludmFsaWQgZXRoZXJuZXQgTUFDIGFkZHJlc3MuICBQbGVhc2UgIgogCQkgICAgICAgInNldCB1c2luZyBpZmNvbmZpZ1xuIiwgbmRldi0+bmFtZSk7CiAKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBuZGV2KTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBuZGV2KTsKIAlyZXQgPSByZWdpc3Rlcl9uZXRkZXYobmRldik7CiAKIAlpZiAocmV0ID09IDApIHsKQEAgLTExNDEsOSArMTEzOSw5IEBACiB9CiAKIHN0YXRpYyBpbnQKLWRtOTAwMF9kcnZfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK2RtOTAwMF9kcnZfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAogCWlmIChuZGV2KSB7CiAJCWlmIChuZXRpZl9ydW5uaW5nKG5kZXYpKSB7CkBAIC0xMTU1LDkgKzExNTMsOSBAQAogfQogCiBzdGF0aWMgaW50Ci1kbTkwMDBfZHJ2X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitkbTkwMDBfZHJ2X3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAJYm9hcmRfaW5mb190ICpkYiA9IChib2FyZF9pbmZvX3QgKikgbmRldi0+cHJpdjsKIAogCWlmIChuZGV2KSB7CkBAIC0xMTczLDEyICsxMTcxLDExIEBACiB9CiAKIHN0YXRpYyBpbnQKLWRtOTAwMF9kcnZfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK2RtOTAwMF9kcnZfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwotCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCiAJdW5yZWdpc3Rlcl9uZXRkZXYobmRldik7CiAJZG05MDAwX3JlbGVhc2VfYm9hcmQocGRldiwgKGJvYXJkX2luZm9fdCAqKSBuZGV2LT5wcml2KTsKQEAgLTExODksMTMgKzExODYsMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGRtOTAwMF9kcml2ZXIgPSB7Ci0JLm5hbWUgICAgPSAiZG05MDAwIiwKLQkuYnVzICAgICA9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGRtOTAwMF9kcml2ZXIgPSB7CiAJLnByb2JlICAgPSBkbTkwMDBfcHJvYmUsCiAJLnJlbW92ZSAgPSBkbTkwMDBfZHJ2X3JlbW92ZSwKIAkuc3VzcGVuZCA9IGRtOTAwMF9kcnZfc3VzcGVuZCwKIAkucmVzdW1lICA9IGRtOTAwMF9kcnZfcmVzdW1lLAorCS5kcml2ZXIJPSB7CisJCS5uYW1lCT0gImRtOTAwMCIsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0CkBAIC0xMjAzLDEzICsxMjAxLDEzIEBACiB7CiAJcHJpbnRrKEtFUk5fSU5GTyAiJXMgRXRoZXJuZXQgRHJpdmVyXG4iLCBDQVJETkFNRSk7CiAKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZkbTkwMDBfZHJpdmVyKTsJLyogc2VhcmNoIGJvYXJkIGFuZCByZWdpc3RlciAqLworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmRtOTAwMF9kcml2ZXIpOwkvKiBzZWFyY2ggYm9hcmQgYW5kIHJlZ2lzdGVyICovCiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdAogZG05MDAwX2NsZWFudXAodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmZG05MDAwX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmRtOTAwMF9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChkbTkwMDBfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwLmMgYi9kcml2ZXJzL25ldC9lMTAwLmMKaW5kZXggZWIxNjlhOC4uN2E2YWVhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMC5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAuYwpAQCAtMTQ3OCw3ICsxNDc4LDcgQEAKIAogCWlmKHBjaV9kbWFfbWFwcGluZ19lcnJvcihyeC0+ZG1hX2FkZHIpKSB7CiAJCWRldl9rZnJlZV9za2JfYW55KHJ4LT5za2IpOwotCQlyeC0+c2tiID0gMDsKKwkJcngtPnNrYiA9IE5VTEw7CiAJCXJ4LT5kbWFfYWRkciA9IDA7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KQEAgLTE3NjQsNyArMTc2NCw3IEBACiAJaWYoKGVyciA9IGUxMDBfaHdfaW5pdChuaWMpKSkKIAkJZ290byBlcnJfY2xlYW5fY2JzOwogCWUxMDBfc2V0X211bHRpY2FzdF9saXN0KG5pYy0+bmV0ZGV2KTsKLQllMTAwX3N0YXJ0X3JlY2VpdmVyKG5pYywgMCk7CisJZTEwMF9zdGFydF9yZWNlaXZlcihuaWMsIE5VTEwpOwogCW1vZF90aW1lcigmbmljLT53YXRjaGRvZywgamlmZmllcyk7CiAJaWYoKGVyciA9IHJlcXVlc3RfaXJxKG5pYy0+cGRldi0+aXJxLCBlMTAwX2ludHIsIFNBX1NISVJRLAogCQluaWMtPm5ldGRldi0+bmFtZSwgbmljLT5uZXRkZXYpKSkKQEAgLTE4NDQsNyArMTg0NCw3IEBACiAJCW1kaW9fd3JpdGUobmljLT5uZXRkZXYsIG5pYy0+bWlpLnBoeV9pZCwgTUlJX0JNQ1IsCiAJCQlCTUNSX0xPT1BCQUNLKTsKIAotCWUxMDBfc3RhcnRfcmVjZWl2ZXIobmljLCAwKTsKKwllMTAwX3N0YXJ0X3JlY2VpdmVyKG5pYywgTlVMTCk7CiAKIAlpZighKHNrYiA9IGRldl9hbGxvY19za2IoRVRIX0RBVEFfTEVOKSkpIHsKIAkJZXJyID0gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jIGIvZHJpdmVycy9uZXQvZm9yY2VkZXRoLmMKaW5kZXggMjJhZWM2ZS4uNTI1NjI0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZm9yY2VkZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvZm9yY2VkZXRoLmMKQEAgLTgwLDcgKzgwLDcgQEAKICAqCQkJICAgaW50byBudl9jbG9zZSwgb3RoZXJ3aXNlIHJlZW5hYmxpbmcgZm9yIHdvbCBjYW4KICAqCQkJICAgY2F1c2UgRE1BIHRvIGtmcmVlJ2QgbWVtb3J5LgogICoJMC4zMTogMTQgTm92IDIwMDQ6IGV0aHRvb2wgc3VwcG9ydCBmb3IgZ2V0dGluZy9zZXR0aW5nIGxpbmsKLSAqCSAgICAgICAgICAgICAgICAgICBjYXBhYmlsaXRpZXMuCisgKgkJCSAgIGNhcGFiaWxpdGllcy4KICAqCTAuMzI6IDE2IEFwciAyMDA1OiBSWF9FUlJPUjQgaGFuZGxpbmcgYWRkZWQuCiAgKgkwLjMzOiAxNiBNYXkgMjAwNTogU3VwcG9ydCBmb3IgTUNQNTEgYWRkZWQuCiAgKgkwLjM0OiAxOCBKdW4gMjAwNTogQWRkIERFVl9ORUVEX0xJTktUSU1FUiB0byBhbGwgbkZvcmNlIG5pY3MuCkBAIC04OSwxNCArODksMTcgQEAKICAqCTAuMzc6IDEwIEp1bCAyMDA1OiBBZGRpdGlvbmFsIGV0aHRvb2wgc3VwcG9ydCwgY2xlYW51cCBvZiBwY2kgaWQgbGlzdAogICoJMC4zODogMTYgSnVsIDIwMDU6IHR4IGlycSByZXdyaXRlOiBVc2UgZ2xvYmFsIGZsYWdzIGluc3RlYWQgb2YKICAqCQkJICAgcGVyLXBhY2tldCBmbGFncy4KLSAqICAgICAgMC4zOTogMTggSnVsIDIwMDU6IEFkZCA2NGJpdCBkZXNjcmlwdG9yIHN1cHBvcnQuCi0gKiAgICAgIDAuNDA6IDE5IEp1bCAyMDA1OiBBZGQgc3VwcG9ydCBmb3IgbWFjIGFkZHJlc3MgY2hhbmdlLgotICogICAgICAwLjQxOiAzMCBKdWwgMjAwNTogV3JpdGUgYmFjayBvcmlnaW5hbCBNQUMgaW4gbnZfY2xvc2UgaW5zdGVhZAorICoJMC4zOTogMTggSnVsIDIwMDU6IEFkZCA2NGJpdCBkZXNjcmlwdG9yIHN1cHBvcnQuCisgKgkwLjQwOiAxOSBKdWwgMjAwNTogQWRkIHN1cHBvcnQgZm9yIG1hYyBhZGRyZXNzIGNoYW5nZS4KKyAqCTAuNDE6IDMwIEp1bCAyMDA1OiBXcml0ZSBiYWNrIG9yaWdpbmFsIE1BQyBpbiBudl9jbG9zZSBpbnN0ZWFkCiAgKgkJCSAgIG9mIG52X3JlbW92ZQotICogICAgICAwLjQyOiAwNiBBdWcgMjAwNTogRml4IGxhY2sgb2YgbGluayBzcGVlZCBpbml0aWFsaXphdGlvbgorICoJMC40MjogMDYgQXVnIDIwMDU6IEZpeCBsYWNrIG9mIGxpbmsgc3BlZWQgaW5pdGlhbGl6YXRpb24KICAqCQkJICAgaW4gdGhlIHNlY29uZCAoYW5kIGxhdGVyKSBudl9vcGVuIGNhbGwKLSAqICAgICAgMC40MzogMTAgQXVnIDIwMDU6IEFkZCBzdXBwb3J0IGZvciB0eCBjaGVja3N1bS4KLSAqICAgICAgMC40NDogMjAgQXVnIDIwMDU6IEFkZCBzdXBwb3J0IGZvciBzY2F0dGVyIGdhdGhlciBhbmQgc2VnbWVudGF0aW9uLgorICoJMC40MzogMTAgQXVnIDIwMDU6IEFkZCBzdXBwb3J0IGZvciB0eCBjaGVja3N1bS4KKyAqCTAuNDQ6IDIwIEF1ZyAyMDA1OiBBZGQgc3VwcG9ydCBmb3Igc2NhdHRlciBnYXRoZXIgYW5kIHNlZ21lbnRhdGlvbi4KKyAqCTAuNDU6IDE4IFNlcCAyMDA1OiBSZW1vdmUgbnZfc3RvcC9zdGFydF9yeCBmcm9tIGV2ZXJ5IGxpbmsgY2hlY2sKKyAqCTAuNDY6IDIwIE9jdCAyMDA1OiBBZGQgaXJxIG9wdGltaXphdGlvbiBtb2Rlcy4KKyAqCTAuNDc6IDI2IE9jdCAyMDA1OiBBZGQgcGh5YWRkciAwIGluIHBoeSBzY2FuLgogICoKICAqIEtub3duIGJ1Z3M6CiAgKiBXZSBzdXNwZWN0IHRoYXQgb24gc29tZSBoYXJkd2FyZSBubyBUWCBkb25lIGludGVycnVwdHMgYXJlIGdlbmVyYXRlZC4KQEAgLTEwOCw3ICsxMTEsNyBAQAogICogREVWX05FRURfVElNRVJJUlEgd2lsbCBub3QgaGFybSB5b3Ugb24gc2FuZSBoYXJkd2FyZSwgb25seSBnZW5lcmF0aW5nIGEgZmV3CiAgKiBzdXBlcmZsdW91cyB0aW1lciBpbnRlcnJ1cHRzIGZyb20gdGhlIG5pYy4KICAqLwotI2RlZmluZSBGT1JDRURFVEhfVkVSU0lPTgkJIjAuNDQiCisjZGVmaW5lIEZPUkNFREVUSF9WRVJTSU9OCQkiMC40NyIKICNkZWZpbmUgRFJWX05BTUUJCQkiZm9yY2VkZXRoIgogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC0xNjMsNyArMTY2LDggQEAKICNkZWZpbmUgTlZSRUdfSVJRX0xJTksJCQkweDAwNDAKICNkZWZpbmUgTlZSRUdfSVJRX1RYX0VSUk9SCQkweDAwODAKICNkZWZpbmUgTlZSRUdfSVJRX1RYMQkJCTB4MDEwMAotI2RlZmluZSBOVlJFR19JUlFNQVNLX1dBTlRFRAkJMHgwMGRmCisjZGVmaW5lIE5WUkVHX0lSUU1BU0tfVEhST1VHSFBVVAkweDAwZGYKKyNkZWZpbmUgTlZSRUdfSVJRTUFTS19DUFUJCTB4MDA0MAogCiAjZGVmaW5lIE5WUkVHX0lSUV9VTktOT1dOCSh+KE5WUkVHX0lSUV9SWF9FUlJPUnxOVlJFR19JUlFfUlh8TlZSRUdfSVJRX1JYX05PQlVGfE5WUkVHX0lSUV9UWF9FUlJ8IFwKIAkJCQkJTlZSRUdfSVJRX1RYX09LfE5WUkVHX0lSUV9USU1FUnxOVlJFR19JUlFfTElOS3xOVlJFR19JUlFfVFhfRVJST1J8IFwKQEAgLTE3Nyw3ICsxODEsOCBAQAogICogTlZSRUdfUE9MTF9ERUZBVUxUPTk3IHdvdWxkIHJlc3VsdCBpbiBhbiBpbnRlcnZhbCBsZW5ndGggb2YgMSBtcwogICovCiAJTnZSZWdQb2xsaW5nSW50ZXJ2YWwgPSAweDAwYywKLSNkZWZpbmUgTlZSRUdfUE9MTF9ERUZBVUxUCTk3MAorI2RlZmluZSBOVlJFR19QT0xMX0RFRkFVTFRfVEhST1VHSFBVVAk5NzAKKyNkZWZpbmUgTlZSRUdfUE9MTF9ERUZBVUxUX0NQVQkxMwogCU52UmVnTWlzYzEgPSAweDA4MCwKICNkZWZpbmUgTlZSRUdfTUlTQzFfSEQJCTB4MDIKICNkZWZpbmUgTlZSRUdfTUlTQzFfRk9SQ0UJMHgzYjBmM2MKQEAgLTUzOCw2ICs1NDMsMjUgQEAKICAqLwogc3RhdGljIGludCBtYXhfaW50ZXJydXB0X3dvcmsgPSA1OwogCisvKgorICogT3B0aW1pemF0aW9uIGNhbiBiZSBlaXRoZXIgdGhyb3VwdXQgbW9kZSBvciBjcHUgbW9kZQorICogCisgKiBUaHJvdWdocHV0IE1vZGU6IEV2ZXJ5IHR4IGFuZCByeCBwYWNrZXQgd2lsbCBnZW5lcmF0ZSBhbiBpbnRlcnJ1cHQuCisgKiBDUFUgTW9kZTogSW50ZXJydXB0cyBhcmUgY29udHJvbGxlZCBieSBhIHRpbWVyLgorICovCisjZGVmaW5lIE5WX09QVElNSVpBVElPTl9NT0RFX1RIUk9VR0hQVVQgMAorI2RlZmluZSBOVl9PUFRJTUlaQVRJT05fTU9ERV9DUFUgICAgICAgIDEKK3N0YXRpYyBpbnQgb3B0aW1pemF0aW9uX21vZGUgPSBOVl9PUFRJTUlaQVRJT05fTU9ERV9USFJPVUdIUFVUOworCisvKgorICogUG9sbCBpbnRlcnZhbCBmb3IgdGltZXIgaXJxCisgKgorICogVGhpcyBpbnRlcnZhbCBkZXRlcm1pbmVzIGhvdyBmcmVxdWVudCBhbiBpbnRlcnJ1cHQgaXMgZ2VuZXJhdGVkLgorICogVGhlIGlzIHZhbHVlIGlzIGRldGVybWluZWQgYnkgWyh0aW1lX2luX21pY3JvX3NlY3MgKiAxMDApIC8gKDJeMTApXQorICogTWluID0gMCwgYW5kIE1heCA9IDY1NTM1CisgKi8KK3N0YXRpYyBpbnQgcG9sbF9pbnRlcnZhbCA9IC0xOworCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBmZV9wcml2ICpnZXRfbnZwcml2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJcmV0dXJuIG5ldGRldl9wcml2KGRldik7CkBAIC0xMzI4LDY3ICsxMzUyLDcxIEBACiAJCQlpZiAoIShGbGFncyAmIE5WX1JYX0RFU0NSSVBUT1JWQUxJRCkpCiAJCQkJZ290byBuZXh0X3BrdDsKIAotCQkJaWYgKEZsYWdzICYgTlZfUlhfTUlTU0VERlJBTUUpIHsKLQkJCQlucC0+c3RhdHMucnhfbWlzc2VkX2Vycm9ycysrOwotCQkJCW5wLT5zdGF0cy5yeF9lcnJvcnMrKzsKLQkJCQlnb3RvIG5leHRfcGt0OwotCQkJfQotCQkJaWYgKEZsYWdzICYgKE5WX1JYX0VSUk9SMXxOVl9SWF9FUlJPUjJ8TlZfUlhfRVJST1IzKSkgewotCQkJCW5wLT5zdGF0cy5yeF9lcnJvcnMrKzsKLQkJCQlnb3RvIG5leHRfcGt0OwotCQkJfQotCQkJaWYgKEZsYWdzICYgTlZfUlhfQ1JDRVJSKSB7Ci0JCQkJbnAtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKLQkJCQlucC0+c3RhdHMucnhfZXJyb3JzKys7Ci0JCQkJZ290byBuZXh0X3BrdDsKLQkJCX0KLQkJCWlmIChGbGFncyAmIE5WX1JYX09WRVJGTE9XKSB7Ci0JCQkJbnAtPnN0YXRzLnJ4X292ZXJfZXJyb3JzKys7Ci0JCQkJbnAtPnN0YXRzLnJ4X2Vycm9ycysrOwotCQkJCWdvdG8gbmV4dF9wa3Q7Ci0JCQl9Ci0JCQlpZiAoRmxhZ3MgJiBOVl9SWF9FUlJPUjQpIHsKLQkJCQlsZW4gPSBudl9nZXRsZW4oZGV2LCBucC0+cnhfc2tidWZmW2ldLT5kYXRhLCBsZW4pOwotCQkJCWlmIChsZW4gPCAwKSB7CisJCQlpZiAoRmxhZ3MgJiBOVl9SWF9FUlJPUikgeworCQkJCWlmIChGbGFncyAmIE5WX1JYX01JU1NFREZSQU1FKSB7CisJCQkJCW5wLT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzKys7CiAJCQkJCW5wLT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJCQkJZ290byBuZXh0X3BrdDsKIAkJCQl9Ci0JCQl9Ci0JCQkvKiBmcmFtaW5nIGVycm9ycyBhcmUgc29mdCBlcnJvcnMuICovCi0JCQlpZiAoRmxhZ3MgJiBOVl9SWF9GUkFNSU5HRVJSKSB7Ci0JCQkJaWYgKEZsYWdzICYgTlZfUlhfU1VCU1RSQUNUMSkgewotCQkJCQlsZW4tLTsKKwkJCQlpZiAoRmxhZ3MgJiAoTlZfUlhfRVJST1IxfE5WX1JYX0VSUk9SMnxOVl9SWF9FUlJPUjMpKSB7CisJCQkJCW5wLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCQkJZ290byBuZXh0X3BrdDsKKwkJCQl9CisJCQkJaWYgKEZsYWdzICYgTlZfUlhfQ1JDRVJSKSB7CisJCQkJCW5wLT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CisJCQkJCW5wLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCQkJZ290byBuZXh0X3BrdDsKKwkJCQl9CisJCQkJaWYgKEZsYWdzICYgTlZfUlhfT1ZFUkZMT1cpIHsKKwkJCQkJbnAtPnN0YXRzLnJ4X292ZXJfZXJyb3JzKys7CisJCQkJCW5wLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCQkJZ290byBuZXh0X3BrdDsKKwkJCQl9CisJCQkJaWYgKEZsYWdzICYgTlZfUlhfRVJST1I0KSB7CisJCQkJCWxlbiA9IG52X2dldGxlbihkZXYsIG5wLT5yeF9za2J1ZmZbaV0tPmRhdGEsIGxlbik7CisJCQkJCWlmIChsZW4gPCAwKSB7CisJCQkJCQlucC0+c3RhdHMucnhfZXJyb3JzKys7CisJCQkJCQlnb3RvIG5leHRfcGt0OworCQkJCQl9CisJCQkJfQorCQkJCS8qIGZyYW1pbmcgZXJyb3JzIGFyZSBzb2Z0IGVycm9ycy4gKi8KKwkJCQlpZiAoRmxhZ3MgJiBOVl9SWF9GUkFNSU5HRVJSKSB7CisJCQkJCWlmIChGbGFncyAmIE5WX1JYX1NVQlNUUkFDVDEpIHsKKwkJCQkJCWxlbi0tOworCQkJCQl9CiAJCQkJfQogCQkJfQogCQl9IGVsc2UgewogCQkJaWYgKCEoRmxhZ3MgJiBOVl9SWDJfREVTQ1JJUFRPUlZBTElEKSkKIAkJCQlnb3RvIG5leHRfcGt0OwogCi0JCQlpZiAoRmxhZ3MgJiAoTlZfUlgyX0VSUk9SMXxOVl9SWDJfRVJST1IyfE5WX1JYMl9FUlJPUjMpKSB7Ci0JCQkJbnAtPnN0YXRzLnJ4X2Vycm9ycysrOwotCQkJCWdvdG8gbmV4dF9wa3Q7Ci0JCQl9Ci0JCQlpZiAoRmxhZ3MgJiBOVl9SWDJfQ1JDRVJSKSB7Ci0JCQkJbnAtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKLQkJCQlucC0+c3RhdHMucnhfZXJyb3JzKys7Ci0JCQkJZ290byBuZXh0X3BrdDsKLQkJCX0KLQkJCWlmIChGbGFncyAmIE5WX1JYMl9PVkVSRkxPVykgewotCQkJCW5wLT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOwotCQkJCW5wLT5zdGF0cy5yeF9lcnJvcnMrKzsKLQkJCQlnb3RvIG5leHRfcGt0OwotCQkJfQotCQkJaWYgKEZsYWdzICYgTlZfUlgyX0VSUk9SNCkgewotCQkJCWxlbiA9IG52X2dldGxlbihkZXYsIG5wLT5yeF9za2J1ZmZbaV0tPmRhdGEsIGxlbik7Ci0JCQkJaWYgKGxlbiA8IDApIHsKKwkJCWlmIChGbGFncyAmIE5WX1JYMl9FUlJPUikgeworCQkJCWlmIChGbGFncyAmIChOVl9SWDJfRVJST1IxfE5WX1JYMl9FUlJPUjJ8TlZfUlgyX0VSUk9SMykpIHsKIAkJCQkJbnAtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQkJCQlnb3RvIG5leHRfcGt0OwogCQkJCX0KLQkJCX0KLQkJCS8qIGZyYW1pbmcgZXJyb3JzIGFyZSBzb2Z0IGVycm9ycyAqLwotCQkJaWYgKEZsYWdzICYgTlZfUlgyX0ZSQU1JTkdFUlIpIHsKLQkJCQlpZiAoRmxhZ3MgJiBOVl9SWDJfU1VCU1RSQUNUMSkgewotCQkJCQlsZW4tLTsKKwkJCQlpZiAoRmxhZ3MgJiBOVl9SWDJfQ1JDRVJSKSB7CisJCQkJCW5wLT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CisJCQkJCW5wLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCQkJZ290byBuZXh0X3BrdDsKKwkJCQl9CisJCQkJaWYgKEZsYWdzICYgTlZfUlgyX09WRVJGTE9XKSB7CisJCQkJCW5wLT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOworCQkJCQlucC0+c3RhdHMucnhfZXJyb3JzKys7CisJCQkJCWdvdG8gbmV4dF9wa3Q7CisJCQkJfQorCQkJCWlmIChGbGFncyAmIE5WX1JYMl9FUlJPUjQpIHsKKwkJCQkJbGVuID0gbnZfZ2V0bGVuKGRldiwgbnAtPnJ4X3NrYnVmZltpXS0+ZGF0YSwgbGVuKTsKKwkJCQkJaWYgKGxlbiA8IDApIHsKKwkJCQkJCW5wLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCQkJCWdvdG8gbmV4dF9wa3Q7CisJCQkJCX0KKwkJCQl9CisJCQkJLyogZnJhbWluZyBlcnJvcnMgYXJlIHNvZnQgZXJyb3JzICovCisJCQkJaWYgKEZsYWdzICYgTlZfUlgyX0ZSQU1JTkdFUlIpIHsKKwkJCQkJaWYgKEZsYWdzICYgTlZfUlgyX1NVQlNUUkFDVDEpIHsKKwkJCQkJCWxlbi0tOworCQkJCQl9CiAJCQkJfQogCQkJfQogCQkJRmxhZ3MgJj0gTlZfUlgyX0NIRUNLU1VNTUFTSzsKQEAgLTE2MTIsNiArMTY0MCwxNyBAQAogCXNwaW5fdW5sb2NrX2lycSgmbnAtPmxvY2spOwogfQogCisvKioKKyAqIG52X3VwZGF0ZV9saW5rc3BlZWQ6IFNldHVwIHRoZSBNQUMgYWNjb3JkaW5nIHRvIHRoZSBsaW5rIHBhcnRuZXIKKyAqIEBkZXY6IE5ldHdvcmsgZGV2aWNlIHRvIGJlIGNvbmZpZ3VyZWQKKyAqCisgKiBUaGUgZnVuY3Rpb24gcXVlcmllcyB0aGUgUEhZIGFuZCBjaGVja3MgaWYgdGhlcmUgaXMgYSBsaW5rIHBhcnRuZXIuCisgKiBJZiB5ZXMsIHRoZW4gaXQgc2V0cyB1cCB0aGUgTUFDIGFjY29yZGluZ2x5LiBPdGhlcndpc2UsIHRoZSBNQUMgaXMKKyAqIHNldCB0byAxMCBNQml0IEhELgorICoKKyAqIFRoZSBmdW5jdGlvbiByZXR1cm5zIDAgaWYgdGhlcmUgaXMgbm8gbGluayBwYXJ0bmVyIGFuZCAxIGlmIHRoZXJlIGlzCisgKiBhIGdvb2QgbGluayBwYXJ0bmVyLgorICovCiBzdGF0aWMgaW50IG52X3VwZGF0ZV9saW5rc3BlZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtMTc1MSwxMyArMTc5MCwxMSBAQAogc3RhdGljIHZvaWQgbnZfbGlua2NoYW5nZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWlmIChudl91cGRhdGVfbGlua3NwZWVkKGRldikpIHsKLQkJaWYgKG5ldGlmX2NhcnJpZXJfb2soZGV2KSkgewotCQkJbnZfc3RvcF9yeChkZXYpOwotCQl9IGVsc2UgeworCQlpZiAoIW5ldGlmX2NhcnJpZXJfb2soZGV2KSkgewogCQkJbmV0aWZfY2Fycmllcl9vbihkZXYpOwogCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGxpbmsgdXAuXG4iLCBkZXYtPm5hbWUpOworCQkJbnZfc3RhcnRfcngoZGV2KTsKIAkJfQotCQludl9zdGFydF9yeChkZXYpOwogCX0gZWxzZSB7CiAJCWlmIChuZXRpZl9jYXJyaWVyX29rKGRldikpIHsKIAkJCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CkBAIC0xNzk5LDIyICsxODM2LDE4IEBACiAJCWlmICghKGV2ZW50cyAmIG5wLT5pcnFtYXNrKSkKIAkJCWJyZWFrOwogCi0JCWlmIChldmVudHMgJiAoTlZSRUdfSVJRX1RYMXxOVlJFR19JUlFfVFhfT0t8TlZSRUdfSVJRX1RYX0VSUk9SfE5WUkVHX0lSUV9UWF9FUlIpKSB7CisJCXNwaW5fbG9jaygmbnAtPmxvY2spOworCQludl90eF9kb25lKGRldik7CisJCXNwaW5fdW5sb2NrKCZucC0+bG9jayk7CisJCQorCQludl9yeF9wcm9jZXNzKGRldik7CisJCWlmIChudl9hbGxvY19yeChkZXYpKSB7CiAJCQlzcGluX2xvY2soJm5wLT5sb2NrKTsKLQkJCW52X3R4X2RvbmUoZGV2KTsKKwkJCWlmICghbnAtPmluX3NodXRkb3duKQorCQkJCW1vZF90aW1lcigmbnAtPm9vbV9raWNrLCBqaWZmaWVzICsgT09NX1JFRklMTCk7CiAJCQlzcGluX3VubG9jaygmbnAtPmxvY2spOwogCQl9Ci0KLQkJaWYgKGV2ZW50cyAmIChOVlJFR19JUlFfUlhfRVJST1J8TlZSRUdfSVJRX1JYfE5WUkVHX0lSUV9SWF9OT0JVRikpIHsKLQkJCW52X3J4X3Byb2Nlc3MoZGV2KTsKLQkJCWlmIChudl9hbGxvY19yeChkZXYpKSB7Ci0JCQkJc3Bpbl9sb2NrKCZucC0+bG9jayk7Ci0JCQkJaWYgKCFucC0+aW5fc2h1dGRvd24pCi0JCQkJCW1vZF90aW1lcigmbnAtPm9vbV9raWNrLCBqaWZmaWVzICsgT09NX1JFRklMTCk7Ci0JCQkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKLQkJCX0KLQkJfQotCisJCQogCQlpZiAoZXZlbnRzICYgTlZSRUdfSVJRX0xJTkspIHsKIAkJCXNwaW5fbG9jaygmbnAtPmxvY2spOwogCQkJbnZfbGlua19pcnEoZGV2KTsKQEAgLTIyMTYsNyArMjI0OSwxNCBAQAogCXdyaXRlbChOVlJFR19STkRTRUVEX0ZPUkNFIHwgKGkmTlZSRUdfUk5EU0VFRF9NQVNLKSwgYmFzZSArIE52UmVnUmFuZG9tU2VlZCk7CiAJd3JpdGVsKE5WUkVHX1VOS1NFVFVQMV9WQUwsIGJhc2UgKyBOdlJlZ1Vua25vd25TZXR1cFJlZzEpOwogCXdyaXRlbChOVlJFR19VTktTRVRVUDJfVkFMLCBiYXNlICsgTnZSZWdVbmtub3duU2V0dXBSZWcyKTsKLQl3cml0ZWwoTlZSRUdfUE9MTF9ERUZBVUxULCBiYXNlICsgTnZSZWdQb2xsaW5nSW50ZXJ2YWwpOworCWlmIChwb2xsX2ludGVydmFsID09IC0xKSB7CisJCWlmIChvcHRpbWl6YXRpb25fbW9kZSA9PSBOVl9PUFRJTUlaQVRJT05fTU9ERV9USFJPVUdIUFVUKQorCQkJd3JpdGVsKE5WUkVHX1BPTExfREVGQVVMVF9USFJPVUdIUFVULCBiYXNlICsgTnZSZWdQb2xsaW5nSW50ZXJ2YWwpOworCQllbHNlCisJCQl3cml0ZWwoTlZSRUdfUE9MTF9ERUZBVUxUX0NQVSwgYmFzZSArIE52UmVnUG9sbGluZ0ludGVydmFsKTsKKwl9CisJZWxzZQorCQl3cml0ZWwocG9sbF9pbnRlcnZhbCAmIDB4RkZGRiwgYmFzZSArIE52UmVnUG9sbGluZ0ludGVydmFsKTsKIAl3cml0ZWwoTlZSRUdfVU5LU0VUVVA2X1ZBTCwgYmFzZSArIE52UmVnVW5rbm93blNldHVwUmVnNik7CiAJd3JpdGVsKChucC0+cGh5YWRkciA8PCBOVlJFR19BREFQVENUTF9QSFlTSElGVCl8TlZSRUdfQURBUFRDVExfUEhZVkFMSUR8TlZSRUdfQURBUFRDVExfUlVOTklORywKIAkJCWJhc2UgKyBOdlJlZ0FkYXB0ZXJDb250cm9sKTsKQEAgLTI1MDEsNyArMjU0MSwxMSBAQAogCX0gZWxzZSB7CiAJCW5wLT50eF9mbGFncyA9IE5WX1RYMl9WQUxJRDsKIAl9Ci0JbnAtPmlycW1hc2sgPSBOVlJFR19JUlFNQVNLX1dBTlRFRDsKKwlpZiAob3B0aW1pemF0aW9uX21vZGUgPT0gTlZfT1BUSU1JWkFUSU9OX01PREVfVEhST1VHSFBVVCkKKwkJbnAtPmlycW1hc2sgPSBOVlJFR19JUlFNQVNLX1RIUk9VR0hQVVQ7CisJZWxzZQorCQlucC0+aXJxbWFzayA9IE5WUkVHX0lSUU1BU0tfQ1BVOworCiAJaWYgKGlkLT5kcml2ZXJfZGF0YSAmIERFVl9ORUVEX1RJTUVSSVJRKQogCQlucC0+aXJxbWFzayB8PSBOVlJFR19JUlFfVElNRVI7CiAJaWYgKGlkLT5kcml2ZXJfZGF0YSAmIERFVl9ORUVEX0xJTktUSU1FUikgewpAQCAtMjUxNCwxNiArMjU1OCwxNyBAQAogCX0KIAogCS8qIGZpbmQgYSBzdWl0YWJsZSBwaHkgKi8KLQlmb3IgKGkgPSAxOyBpIDwgMzI7IGkrKykgeworCWZvciAoaSA9IDE7IGkgPD0gMzI7IGkrKykgewogCQlpbnQgaWQxLCBpZDI7CisJCWludCBwaHlhZGRyID0gaSAmIDB4MUY7CiAKIAkJc3Bpbl9sb2NrX2lycSgmbnAtPmxvY2spOwotCQlpZDEgPSBtaWlfcncoZGV2LCBpLCBNSUlfUEhZU0lEMSwgTUlJX1JFQUQpOworCQlpZDEgPSBtaWlfcncoZGV2LCBwaHlhZGRyLCBNSUlfUEhZU0lEMSwgTUlJX1JFQUQpOwogCQlzcGluX3VubG9ja19pcnEoJm5wLT5sb2NrKTsKIAkJaWYgKGlkMSA8IDAgfHwgaWQxID09IDB4ZmZmZikKIAkJCWNvbnRpbnVlOwogCQlzcGluX2xvY2tfaXJxKCZucC0+bG9jayk7Ci0JCWlkMiA9IG1paV9ydyhkZXYsIGksIE1JSV9QSFlTSUQyLCBNSUlfUkVBRCk7CisJCWlkMiA9IG1paV9ydyhkZXYsIHBoeWFkZHIsIE1JSV9QSFlTSUQyLCBNSUlfUkVBRCk7CiAJCXNwaW5fdW5sb2NrX2lycSgmbnAtPmxvY2spOwogCQlpZiAoaWQyIDwgMCB8fCBpZDIgPT0gMHhmZmZmKQogCQkJY29udGludWU7CkBAIC0yNTMxLDIzICsyNTc2LDE5IEBACiAJCWlkMSA9IChpZDEgJiBQSFlJRDFfT1VJX01BU0spIDw8IFBIWUlEMV9PVUlfU0hGVDsKIAkJaWQyID0gKGlkMiAmIFBIWUlEMl9PVUlfTUFTSykgPj4gUEhZSUQyX09VSV9TSEZUOwogCQlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBvcGVuOiBGb3VuZCBQSFkgJTA0eDolMDR4IGF0IGFkZHJlc3MgJWQuXG4iLAotCQkJCXBjaV9uYW1lKHBjaV9kZXYpLCBpZDEsIGlkMiwgaSk7Ci0JCW5wLT5waHlhZGRyID0gaTsKKwkJCXBjaV9uYW1lKHBjaV9kZXYpLCBpZDEsIGlkMiwgcGh5YWRkcik7CisJCW5wLT5waHlhZGRyID0gcGh5YWRkcjsKIAkJbnAtPnBoeV9vdWkgPSBpZDEgfCBpZDI7CiAJCWJyZWFrOwogCX0KLQlpZiAoaSA9PSAzMikgewotCQkvKiBQSFkgaW4gaXNvbGF0ZSBtb2RlPyBObyBwaHkgYXR0YWNoZWQgYW5kIHVzZXIgd2FudHMgdG8KLQkJICogdGVzdCBsb29wYmFjaz8gVmVyeSBvZGQsIGJ1dCBjYW4gYmUgY29ycmVjdC4KLQkJICovCisJaWYgKGkgPT0gMzMpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IG9wZW46IENvdWxkIG5vdCBmaW5kIGEgdmFsaWQgUEhZLlxuIiwKLQkJCQlwY2lfbmFtZShwY2lfZGV2KSk7CisJCSAgICAgICBwY2lfbmFtZShwY2lfZGV2KSk7CisJCWdvdG8gb3V0X2ZyZWVyaW5nOwogCX0KLQotCWlmIChpICE9IDMyKSB7Ci0JCS8qIHJlc2V0IGl0ICovCi0JCXBoeV9pbml0KGRldik7Ci0JfQorCQorCS8qIHJlc2V0IGl0ICovCisJcGh5X2luaXQoZGV2KTsKIAogCS8qIHNldCBkZWZhdWx0IGxpbmsgc3BlZWQgc2V0dGluZ3MgKi8KIAlucC0+bGlua3NwZWVkID0gTlZSRUdfTElOS1NQRUVEX0ZPUkNFfE5WUkVHX0xJTktTUEVFRF8xMDsKQEAgLTI2ODksNiArMjczMCwxMCBAQAogCiBtb2R1bGVfcGFyYW0obWF4X2ludGVycnVwdF93b3JrLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhtYXhfaW50ZXJydXB0X3dvcmssICJmb3JjZWRldGggbWF4aW11bSBldmVudHMgaGFuZGxlZCBwZXIgaW50ZXJydXB0Iik7Cittb2R1bGVfcGFyYW0ob3B0aW1pemF0aW9uX21vZGUsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKG9wdGltaXphdGlvbl9tb2RlLCAiSW4gdGhyb3VnaHB1dCBtb2RlICgwKSwgZXZlcnkgdHggJiByeCBwYWNrZXQgd2lsbCBnZW5lcmF0ZSBhbiBpbnRlcnJ1cHQuIEluIENQVSBtb2RlICgxKSwgaW50ZXJydXB0cyBhcmUgY29udHJvbGxlZCBieSBhIHRpbWVyLiIpOworbW9kdWxlX3BhcmFtKHBvbGxfaW50ZXJ2YWwsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHBvbGxfaW50ZXJ2YWwsICJJbnRlcnZhbCBkZXRlcm1pbmVzIGhvdyBmcmVxdWVudCB0aW1lciBpbnRlcnJ1cHQgaXMgZ2VuZXJhdGVkIGJ5IFsodGltZV9pbl9taWNyb19zZWNzICogMTAwKSAvICgyXjEwKV0uIE1pbiBpcyAwIGFuZCBNYXggaXMgNjU1MzUuIik7CiAKIE1PRFVMRV9BVVRIT1IoIk1hbmZyZWQgU3ByYXVsIDxtYW5mcmVkQGNvbG9yZnVsbGlmZS5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlJldmVyc2UgRW5naW5lZXJlZCBuRm9yY2UgZXRoZXJuZXQgZHJpdmVyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mc19lbmV0L2ZzX2VuZXQtbWFpbi5jIGIvZHJpdmVycy9uZXQvZnNfZW5ldC9mc19lbmV0LW1haW4uYwppbmRleCA5MzQyZDViLi5mNWQ0OWExIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mc19lbmV0L2ZzX2VuZXQtbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2ZzX2VuZXQvZnNfZW5ldC1tYWluLmMKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZnNfZW5ldC9mc19lbmV0LmggYi9kcml2ZXJzL25ldC9mc19lbmV0L2ZzX2VuZXQuaAppbmRleCAxMTA1NTQzLi5lN2VjOTZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mc19lbmV0L2ZzX2VuZXQuaAorKysgYi9kcml2ZXJzL25ldC9mc19lbmV0L2ZzX2VuZXQuaApAQCAtNCw3ICs0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9taWkuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAKICNpbmNsdWRlIDxsaW51eC9mc19lbmV0X3BkLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mc19lbmV0L21hYy1mY2MuYyBiL2RyaXZlcnMvbmV0L2ZzX2VuZXQvbWFjLWZjYy5jCmluZGV4IGE5NDBiOTYuLmU2N2IxZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZzX2VuZXQvbWFjLWZjYy5jCisrKyBiL2RyaXZlcnMvbmV0L2ZzX2VuZXQvbWFjLWZjYy5jCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAKICNpbmNsdWRlIDxhc20vaW1tYXBfY3BtMi5oPgogI2luY2x1ZGUgPGFzbS9tcGM4MjYwLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mc19lbmV0L21hYy1mZWMuYyBiL2RyaXZlcnMvbmV0L2ZzX2VuZXQvbWFjLWZlYy5jCmluZGV4IDVlZjRlODQuLjJlOGY0NDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZzX2VuZXQvbWFjLWZlYy5jCisrKyBiL2RyaXZlcnMvbmV0L2ZzX2VuZXQvbWFjLWZlYy5jCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZzX2VuZXQvbWFjLXNjYy5jIGIvZHJpdmVycy9uZXQvZnNfZW5ldC9tYWMtc2NjLmMKaW5kZXggZDhjNmU5Yy4uYTM4OTdmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZnNfZW5ldC9tYWMtc2NjLmMKKysrIGIvZHJpdmVycy9uZXQvZnNfZW5ldC9tYWMtc2NjLmMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZ2lhbmZhci5jIGIvZHJpdmVycy9uZXQvZ2lhbmZhci5jCmluZGV4IDk2MjU4MGYuLmUzYTMyOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2dpYW5mYXIuYworKysgYi9kcml2ZXJzL25ldC9naWFuZmFyLmMKQEAgLTkwLDcgKzkwLDYgQEAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgogI2luY2x1ZGUgPGxpbnV4L21paS5oPgpAQCAtMTI3LDggKzEyNiw4IEBACiBzdGF0aWMgdm9pZCBhZGp1c3RfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIGluaXRfcmVnaXN0ZXJzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBpbml0X3BoeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgZ2Zhcl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpOwotc3RhdGljIGludCBnZmFyX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpOworc3RhdGljIGludCBnZmFyX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOworc3RhdGljIGludCBnZmFyX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKIHN0YXRpYyB2b2lkIGZyZWVfc2tiX3Jlc291cmNlcyhzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2KTsKIHN0YXRpYyB2b2lkIGdmYXJfc2V0X211bHRpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgZ2Zhcl9zZXRfaGFzaF9mb3JfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqYWRkcik7CkBAIC0xNTcsMTIgKzE1NiwxMSBAQAogCiAvKiBTZXQgdXAgdGhlIGV0aGVybmV0IGRldmljZSBzdHJ1Y3R1cmUsIHByaXZhdGUgZGF0YSwKICAqIGFuZCBhbnl0aGluZyBlbHNlIHdlIG5lZWQgYmVmb3JlIHdlIHN0YXJ0ICovCi1zdGF0aWMgaW50IGdmYXJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2aWNlKQorc3RhdGljIGludCBnZmFyX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJdTMyIHRlbXB2YWw7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IE5VTEw7CiAJc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdiA9IE5VTEw7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXZpY2UpOwogCXN0cnVjdCBnaWFuZmFyX3BsYXRmb3JtX2RhdGEgKmVpbmZvOwogCXN0cnVjdCByZXNvdXJjZSAqcjsKIAlpbnQgaWR4OwpAQCAtMjA5LDcgKzIwNyw3IEBACiAKIAlzcGluX2xvY2tfaW5pdCgmcHJpdi0+bG9jayk7CiAKLQlkZXZfc2V0X2RydmRhdGEoZGV2aWNlLCBkZXYpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRldik7CiAKIAkvKiBTdG9wIHRoZSBETUEgZW5naW5lIG5vdywgaW4gY2FzZSBpdCB3YXMgcnVubmluZyBiZWZvcmUgKi8KIAkvKiAoVGhlIGZpcm13YXJlIGNvdWxkIGhhdmUgdXNlZCBpdCwgYW5kIGxlZnQgaXQgcnVubmluZykuICovCkBAIC0yNDYsNyArMjQ0LDcgQEAKIAlkZXYtPmJhc2VfYWRkciA9ICh1bnNpZ25lZCBsb25nKSAocHJpdi0+cmVncyk7CiAKIAlTRVRfTU9EVUxFX09XTkVSKGRldik7Ci0JU0VUX05FVERFVl9ERVYoZGV2LCBkZXZpY2UpOworCVNFVF9ORVRERVZfREVWKGRldiwgJnBkZXYtPmRldik7CiAKIAkvKiBGaWxsIGluIHRoZSBkZXYgc3RydWN0dXJlICovCiAJZGV2LT5vcGVuID0gZ2Zhcl9lbmV0X29wZW47CkBAIC0zNzgsMTIgKzM3NiwxMiBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgZ2Zhcl9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2aWNlKQorc3RhdGljIGludCBnZmFyX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2aWNlKTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAKLQlkZXZfc2V0X2RydmRhdGEoZGV2aWNlLCBOVUxMKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAogCWlvdW5tYXAoKHZvaWQgKikgcHJpdi0+cmVncyk7CiAJZnJlZV9uZXRkZXYoZGV2KTsKQEAgLTE4NjIsMTEgKzE4NjAsMTIgQEAKIH0KIAogLyogU3RydWN0dXJlIGZvciBhIGRldmljZSBkcml2ZXIgKi8KLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBnZmFyX2RyaXZlciA9IHsKLQkubmFtZSA9ICJmc2wtZ2lhbmZhciIsCi0JLmJ1cyA9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGdmYXJfZHJpdmVyID0gewogCS5wcm9iZSA9IGdmYXJfcHJvYmUsCiAJLnJlbW92ZSA9IGdmYXJfcmVtb3ZlLAorCS5kcml2ZXIJPSB7CisJCS5uYW1lID0gImZzbC1naWFuZmFyIiwKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgZ2Zhcl9pbml0KHZvaWQpCkBAIC0xODc2LDcgKzE4NzUsNyBAQAogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQllcnIgPSBkcml2ZXJfcmVnaXN0ZXIoJmdmYXJfZHJpdmVyKTsKKwllcnIgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmdmYXJfZHJpdmVyKTsKIAogCWlmIChlcnIpCiAJCWdmYXJfbWRpb19leGl0KCk7CkBAIC0xODg2LDcgKzE4ODUsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZ2Zhcl9leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJmdmYXJfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZ2Zhcl9kcml2ZXIpOwogCWdmYXJfbWRpb19leGl0KCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2dpYW5mYXIuaCBiL2RyaXZlcnMvbmV0L2dpYW5mYXIuaAppbmRleCBjNzdjYTZjLi4yMjAwODRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9naWFuZmFyLmgKKysrIGIvZHJpdmVycy9uZXQvZ2lhbmZhci5oCkBAIC00Myw3ICs0Myw2IEBACiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZ2lhbmZhcl9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9naWFuZmFyX2V0aHRvb2wuYwppbmRleCA2OGUzNTc4Li41YTJkODEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9naWFuZmFyX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9naWFuZmFyX2V0aHRvb2wuYwpAQCAtMzQsNyArMzQsNiBAQAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9naWFuZmFyX21paS5jIGIvZHJpdmVycy9uZXQvZ2lhbmZhcl9taWkuYwppbmRleCA1YTc0ZDNkLi45NTQ0Mjc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9naWFuZmFyX21paS5jCisrKyBiL2RyaXZlcnMvbmV0L2dpYW5mYXJfbWlpLmMKQEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGFzbS9vY3AuaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgpAQCAtMTM0LDcgKzEzMyw3IEBACiAJaWYgKE5VTEwgPT0gZGV2KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCW5ld19idXMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWlpX2J1cyksIEdGUF9LRVJORUwpOworCW5ld19idXMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbWlpX2J1cyksIEdGUF9LRVJORUwpOwogCiAJaWYgKE5VTEwgPT0gbmV3X2J1cykKIAkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ndDk2MTAwZXRoLmMgYi9kcml2ZXJzL25ldC9ndDk2MTAwZXRoLmMKaW5kZXggNjY2Y2ZiYi4uNTk1OGE2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZ3Q5NjEwMGV0aC5jCisrKyBiL2RyaXZlcnMvbmV0L2d0OTYxMDBldGguYwpAQCAtNzIsOCArNzIsNiBAQAogc3RhdGljIHZvaWQgZHVtcF9yeF9kZXNjKGludCBkYmdfbHZsLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaSk7CiBzdGF0aWMgdm9pZCBkdW1wX3NrYihpbnQgZGJnX2x2bCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLXN0YXRpYyB2b2lkIGR1bXBfaHdfYWRkcihpbnQgZGJnX2x2bCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCSBjb25zdCBjaGFyKiBwZngsIHVuc2lnbmVkIGNoYXIqIGFkZHJfc3RyKTsKIHN0YXRpYyB2b2lkIHVwZGF0ZV9zdGF0cyhzdHJ1Y3QgZ3Q5NjEwMF9wcml2YXRlICpncCk7CiBzdGF0aWMgdm9pZCBhYm9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgYWJvcnRfYml0cyk7CiBzdGF0aWMgdm9pZCBoYXJkX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CkBAIC0zMzQsMTMgKzMzMiwxMyBAQAogCiBzdGF0aWMgdm9pZAogZHVtcF9od19hZGRyKGludCBkYmdfbHZsLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCBjaGFyKiBwZngsCi0JICAgICB1bnNpZ25lZCBjaGFyKiBhZGRyX3N0cikKKwkgICAgIGNvbnN0IGNoYXIqIGZ1bmMsIHVuc2lnbmVkIGNoYXIqIGFkZHJfc3RyKQogewogCWludCBpOwogCWNoYXIgYnVmWzEwMF0sIG9jdGV0WzVdOwogICAgIAogCWlmIChkYmdfbHZsIDw9IEdUOTYxMDBfREVCVUcpIHsKLQkJc3RyY3B5KGJ1ZiwgcGZ4KTsKKwkJc3ByaW50ZihidWYsIHBmeCwgZnVuYyk7CiAJCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspIHsKIAkJCXNwcmludGYob2N0ZXQsICIlMi4yeCVzIiwKIAkJCQlhZGRyX3N0cltpXSwgaTw1ID8gIjoiIDogIlxuIik7CkBAIC03MDgsNyArNzA2LDcgQEAKIAogCWluZm8oIiVzIGZvdW5kIGF0IDB4JXgsIGlycSAlZFxuIiwKIAkgICAgIGNoaXBfbmFtZShncC0+Y2hpcF9yZXYpLCBndGlmLT5pb2Jhc2UsIGd0aWYtPmlycSk7Ci0JZHVtcF9od19hZGRyKDAsIGRldiwgIkhXIEFkZHJlc3MgIiwgZGV2LT5kZXZfYWRkcik7CisJZHVtcF9od19hZGRyKDAsIGRldiwgIiVzOiBIVyBBZGRyZXNzICIsIF9fRlVOQ1RJT05fXywgZGV2LT5kZXZfYWRkcik7CiAJaW5mbygiJXMgY2hpcCByZXZpc2lvbj0lZFxuIiwgY2hpcF9uYW1lKGdwLT5jaGlwX3JldiksIGdwLT5jaGlwX3Jldik7CiAJaW5mbygiJXMgZXRoZXJuZXQgcG9ydCAlZFxuIiwgY2hpcF9uYW1lKGdwLT5jaGlwX3JldiksIGdwLT5wb3J0X251bSk7CiAJaW5mbygiZXh0ZXJuYWwgUEhZIElEMT0weCUwNHgsIElEMj0weCUwNHhcbiIsIHBoeV9pZDEsIHBoeV9pZDIpOwpAQCAtMTQ4OCw3ICsxNDg2LDcgQEAKIAkJZ3Q5NjEwMF9hZGRfaGFzaF9lbnRyeShkZXYsIGRldi0+ZGV2X2FkZHIpOwogCiAJCWZvciAobWNwdHIgPSBkZXYtPm1jX2xpc3Q7IG1jcHRyOyBtY3B0ciA9IG1jcHRyLT5uZXh0KSB7Ci0JCQlkdW1wX2h3X2FkZHIoMiwgZGV2LCBfX0ZVTkNUSU9OX18gIjogYWRkcj0iLAorCQkJZHVtcF9od19hZGRyKDIsIGRldiwgIiVzOiBhZGRyPSIsIF9fRlVOQ1RJT05fXywKIAkJCQkgICAgIG1jcHRyLT5kbWlfYWRkcik7CiAJCQlndDk2MTAwX2FkZF9oYXNoX2VudHJ5KGRldiwgbWNwdHItPmRtaV9hZGRyKTsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaHAxMDAuYyBiL2RyaXZlcnMvbmV0L2hwMTAwLmMKaW5kZXggYjcxZmFiNi4uZTkyYzE3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaHAxMDAuYworKysgYi9kcml2ZXJzL25ldC9ocDEwMC5jCkBAIC05Niw3ICs5Niw2IEBACiAKICN1bmRlZiBIUDEwMF9NVUxUSUNBU1RfRklMVEVSCS8qIE5lZWQgdG8gYmUgZGVidWdnZWQuLi4gKi8KIAotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2libXZldGguYyBiL2RyaXZlcnMvbmV0L2libXZldGguYwppbmRleCA5NDIzOWY2Li5jZWI5OGZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pYm12ZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvaWJtdmV0aC5jCkBAIC0zNSw3ICszNSw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgpAQCAtNTksNyArNTgsNyBAQAogCiAjaW5jbHVkZSAiaWJtdmV0aC5oIgogCi0jZGVmaW5lIERFQlVHIDEKKyN1bmRlZiBERUJVRwogCiAjZGVmaW5lIGlibXZldGhfcHJpbnRrKGZtdCwgYXJncy4uLikgXAogICBwcmludGsoS0VSTl9JTkZPICIlczogIiBmbXQsIF9fRklMRV9fLCAjIyBhcmdzKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaW9jMy1ldGguYyBiL2RyaXZlcnMvbmV0L2lvYzMtZXRoLmMKaW5kZXggNDllNTQ2Ny4uNmEzMTI5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaW9jMy1ldGguYworKysgYi9kcml2ZXJzL25ldC9pb2MzLWV0aC5jCkBAIC00NiwxMCArNDYsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3VkcC5oPgogCiAjaWZkZWYgQ09ORklHX1NFUklBTF84MjUwCi0jaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+Ci0jaW5jbHVkZSA8YXNtL3NlcmlhbC5oPgotI2RlZmluZSBJT0MzX0JBVUQgKDIyMDAwMDAwIC8gKDMqMTYpKQotI2RlZmluZSBJT0MzX0NPTV9GTEFHUyAoQVNZTkNfQk9PVF9BVVRPQ09ORiB8IEFTWU5DX1NLSVBfVEVTVCkKKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF84MjUwLmg+CiAjZW5kaWYKIAogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgpAQCAtMTE0NiwxMiArMTE0NCwxMSBAQAogICogYXJvdW5kIGlvYzMgb2RkaXRpZXMgaW4gdGhpcyByZXNwZWN0LgogICoKICAqIFRoZSBJT0MzIHNlcmlhbHMgdXNlIGEgMjJNSHogY2xvY2sgcmF0ZSB3aXRoIGFuIGFkZGl0aW9uYWwgZGl2aWRlciBieSAzLgotICogKElPQzNfQkFVRCA9ICgyMjAwMDAwMCAvICgzKjE2KSkpCiAgKi8KIAogc3RhdGljIHZvaWQgX19kZXZpbml0IGlvYzNfc2VyaWFsX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgaW9jMyAqaW9jMykKIHsKLQlzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCByZXE7CisJc3RydWN0IHVhcnRfcG9ydCBwb3J0OwogCiAJLyoKIAkgKiBXZSBuZWVkIHRvIHJlY29nbmljZSBhbmQgdHJlYXQgdGhlIGZvdXJ0aCBNRU5FVCBzZXJpYWwgYXMgaXQKQEAgLTExNjUsMjAgKzExNjIsMjUgQEAKIAlpZiAoaW9jM19pc19tZW5ldChwZGV2KSAmJiBQQ0lfU0xPVChwZGV2LT5kZXZmbikgPT0gMykKIAkJcmV0dXJuOwogCi0JLyogUmVnaXN0ZXIgdG8gaW50ZXJydXB0IHplcm8gYmVjYXVzZSB3ZSBzaGFyZSB0aGUgaW50ZXJydXB0IHdpdGgKLQkgICB0aGUgc2VyaWFsIGRyaXZlciB3aGljaCB3ZSBkb24ndCBwcm9wZXJseSBzdXBwb3J0IHlldC4gICovCi0JbWVtc2V0KCZyZXEsIDAsIHNpemVvZihyZXEpKTsKLQlyZXEuaXJxICAgICAgICAgICAgID0gMDsKLQlyZXEuZmxhZ3MgICAgICAgICAgID0gSU9DM19DT01fRkxBR1M7Ci0JcmVxLmlvX3R5cGUgICAgICAgICA9IFNFUklBTF9JT19NRU07Ci0JcmVxLmlvbWVtX3JlZ19zaGlmdCA9IDA7Ci0JcmVxLmJhdWRfYmFzZSAgICAgICA9IElPQzNfQkFVRDsKKwkvKgorCSAqIFJlZ2lzdGVyIHRvIGludGVycnVwdCB6ZXJvIGJlY2F1c2Ugd2Ugc2hhcmUgdGhlIGludGVycnVwdCB3aXRoCisJICogdGhlIHNlcmlhbCBkcml2ZXIgd2hpY2ggd2UgZG9uJ3QgcHJvcGVybHkgc3VwcG9ydCB5ZXQuCisJICoKKwkgKiBDYW4ndCB1c2UgVVBGX0lPUkVNQVAgYXMgdGhlIHdob2xlIG9mIElPQzMgcmVzb3VyY2VzIGhhdmUgYWxyZWFkeQorCSAqIGJlZW4gcmVnaXN0ZXJlZC4KKwkgKi8KKwltZW1zZXQoJnBvcnQsIDAsIHNpemVvZihwb3J0KSk7CisJcG9ydC5pcnEgICAgICA9IDA7CisJcG9ydC5mbGFncyAgICA9IFVQRl9TS0lQX1RFU1QgfCBVUEZfQk9PVF9BVVRPQ09ORjsKKwlwb3J0LmlvdHlwZSAgID0gVVBJT19NRU07CisJcG9ydC5yZWdzaGlmdCA9IDA7CisJcG9ydC51YXJ0Y2xrICA9IDIyMDAwMDAwIC8gMzsKIAotCXJlcS5pb21lbV9iYXNlICAgICAgPSAodW5zaWduZWQgY2hhciAqKSAmaW9jMy0+c3JlZ3MudWFydGE7Ci0JcmVnaXN0ZXJfc2VyaWFsKCZyZXEpOworCXBvcnQubWVtYmFzZSAgPSAodW5zaWduZWQgY2hhciAqKSAmaW9jMy0+c3JlZ3MudWFydGE7CisJc2VyaWFsODI1MF9yZWdpc3Rlcl9wb3J0KCZwb3J0KTsKIAotCXJlcS5pb21lbV9iYXNlICAgICAgPSAodW5zaWduZWQgY2hhciAqKSAmaW9jMy0+c3JlZ3MudWFydGI7Ci0JcmVnaXN0ZXJfc2VyaWFsKCZyZXEpOworCXBvcnQubWVtYmFzZSAgPSAodW5zaWduZWQgY2hhciAqKSAmaW9jMy0+c3JlZ3MudWFydGI7CisJc2VyaWFsODI1MF9yZWdpc3Rlcl9wb3J0KCZwb3J0KTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL2RvbmF1Ym9lLmMgYi9kcml2ZXJzL25ldC9pcmRhL2RvbmF1Ym9lLmMKaW5kZXggMDI4Mjc3MS4uMzEzNzU5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9kb25hdWJvZS5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvZG9uYXVib2UuYwpAQCAtMTQ1OSw4ICsxNDU5LDEwIEBACiAgICAgICAgKi8KICAgICAgIElSREFfREVCVUcgKDEsICIlcyhCQU5EV0lEVEgpLCAlcywgKCVYLyVsZFxuIiwgX19GVU5DVElPTl9fCiAgICAgICAgICAgLGRldi0+bmFtZSwgSU5CIChPQk9FX1NUQVRVUyksIGlycS0+aWZyX2JhdWRyYXRlICk7Ci0gICAgICBpZiAoIWluX2ludGVycnVwdCAoKSAmJiAhY2FwYWJsZSAoQ0FQX05FVF9BRE1JTikpCi0gICAgICAgIHJldHVybiAtRVBFUk07CisgICAgICBpZiAoIWluX2ludGVycnVwdCAoKSAmJiAhY2FwYWJsZSAoQ0FQX05FVF9BRE1JTikpIHsKKwlyZXQgPSAtRVBFUk07CisJZ290byBvdXQ7CisgICAgICB9CiAKICAgICAgIC8qIHNlbGYtPnNwZWVkPWlycS0+aWZyX2JhdWRyYXRlOyAqLwogICAgICAgLyogdG9zaG9ib2Vfc2V0YmF1ZChzZWxmKTsgKi8KQEAgLTE0NzAsOCArMTQ3MiwxMCBAQAogICAgIGNhc2UgU0lPQ1NNRURJQUJVU1k6ICAgICAgIC8qIFNldCBtZWRpYSBidXN5ICovCiAgICAgICBJUkRBX0RFQlVHICgxLCAiJXMoTUVESUFCVVNZKSwgJXMsICglWC8leClcbiIsIF9fRlVOQ1RJT05fXwogICAgICAgICAgICxkZXYtPm5hbWUsIElOQiAoT0JPRV9TVEFUVVMpLCBjYXBhYmxlIChDQVBfTkVUX0FETUlOKSApOwotICAgICAgaWYgKCFjYXBhYmxlIChDQVBfTkVUX0FETUlOKSkKLSAgICAgICAgcmV0dXJuIC1FUEVSTTsKKyAgICAgIGlmICghY2FwYWJsZSAoQ0FQX05FVF9BRE1JTikpIHsKKwlyZXQgPSAtRVBFUk07CisJZ290byBvdXQ7CisgICAgICB9CiAgICAgICBpcmRhX2RldmljZV9zZXRfbWVkaWFfYnVzeSAoc2VsZi0+bmV0ZGV2LCBUUlVFKTsKICAgICAgIGJyZWFrOwogICAgIGNhc2UgU0lPQ0dSRUNFSVZJTkc6ICAgICAgIC8qIENoZWNrIGlmIHdlIGFyZSByZWNlaXZpbmcgcmlnaHQgbm93ICovCkBAIC0xNDgzLDcgKzE0ODcsNyBAQAogICAgICAgSVJEQV9ERUJVRyAoMSwgIiVzKD8pLCAlcywgKGNtZD0weCVYKVxuIiwgX19GVU5DVElPTl9fLCBkZXYtPm5hbWUsIGNtZCk7CiAgICAgICByZXQgPSAtRU9QTk9UU1VQUDsKICAgICB9Ci0KK291dDoKICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VsZi0+c3BpbmxvY2ssIGZsYWdzKTsKICAgcmV0dXJuIHJldDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9zYTExMDBfaXIuYyBiL2RyaXZlcnMvbmV0L2lyZGEvc2ExMTAwX2lyLmMKaW5kZXggNzZlMGI5Zi4uNjNkMzhmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9zYTExMDBfaXIuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL3NhMTEwMF9pci5jCkBAIC0yOTEsOSArMjkxLDkgQEAKIC8qCiAgKiBTdXNwZW5kIHRoZSBJckRBIGludGVyZmFjZS4KICAqLwotc3RhdGljIGludCBzYTExMDBfaXJkYV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKl9kZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgc2ExMTAwX2lyZGFfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGRldl9nZXRfZHJ2ZGF0YShfZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IHNhMTEwMF9pcmRhICpzaTsKIAogCWlmICghZGV2KQpAQCAtMzE2LDkgKzMxNiw5IEBACiAvKgogICogUmVzdW1lIHRoZSBJckRBIGludGVyZmFjZS4KICAqLwotc3RhdGljIGludCBzYTExMDBfaXJkYV9yZXN1bWUoc3RydWN0IGRldmljZSAqX2RldikKK3N0YXRpYyBpbnQgc2ExMTAwX2lyZGFfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGRldl9nZXRfZHJ2ZGF0YShfZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IHNhMTEwMF9pcmRhICpzaTsKIAogCWlmICghZGV2KQpAQCAtODg2LDkgKzg4Niw4IEBACiAJcmV0dXJuIGlvLT5oZWFkID8gMCA6IC1FTk9NRU07CiB9CiAKLXN0YXRpYyBpbnQgc2ExMTAwX2lyZGFfcHJvYmUoc3RydWN0IGRldmljZSAqX2RldikKK3N0YXRpYyBpbnQgc2ExMTAwX2lyZGFfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKF9kZXYpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IHNhMTEwMF9pcmRhICpzaTsKIAl1bnNpZ25lZCBpbnQgYmF1ZHJhdGVfbWFzazsKQEAgLTk2Nyw3ICs5NjYsNyBAQAogCiAJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJaWYgKGVyciA9PSAwKQotCQlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgZGV2KTsKKwkJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZGV2KTsKIAogCWlmIChlcnIpIHsKICBlcnJfbWVtXzU6CkBAIC05ODUsOSArOTg0LDkgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IHNhMTEwMF9pcmRhX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpfZGV2KQorc3RhdGljIGludCBzYTExMDBfaXJkYV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZGV2X2dldF9kcnZkYXRhKF9kZXYpOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAogCWlmIChkZXYpIHsKIAkJc3RydWN0IHNhMTEwMF9pcmRhICpzaSA9IGRldi0+cHJpdjsKQEAgLTEwMDQsMTMgKzEwMDMsMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHNhMTEwMGlyX2RyaXZlciA9IHsKLQkubmFtZQkJPSAic2ExMXgwLWlyIiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNhMTEwMGlyX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gc2ExMTAwX2lyZGFfcHJvYmUsCiAJLnJlbW92ZQkJPSBzYTExMDBfaXJkYV9yZW1vdmUsCiAJLnN1c3BlbmQJPSBzYTExMDBfaXJkYV9zdXNwZW5kLAogCS5yZXN1bWUJCT0gc2ExMTAwX2lyZGFfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJzYTExeDAtaXIiLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBzYTExMDBfaXJkYV9pbml0KHZvaWQpCkBAIC0xMDIzLDEyICsxMDIzLDEyIEBACiAJaWYgKHBvd2VyX2xldmVsID4gMykKIAkJcG93ZXJfbGV2ZWwgPSAzOwogCi0JcmV0dXJuIGRyaXZlcl9yZWdpc3Rlcigmc2ExMTAwaXJfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzYTExMDBpcl9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgc2ExMTAwX2lyZGFfZXhpdCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZzYTExMDBpcl9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzYTExMDBpcl9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChzYTExMDBfaXJkYV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvc21zYy1pcmNjMi5jIGIvZHJpdmVycy9uZXQvaXJkYS9zbXNjLWlyY2MyLmMKaW5kZXggYTFkMjA3Zi4uZWM5NGVjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9zbXNjLWlyY2MyLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9zbXNjLWlyY2MyLmMKQEAgLTIxNCwxNCArMjE0LDE1IEBACiAKIC8qIFBvd2VyIE1hbmFnZW1lbnQgKi8KIAotc3RhdGljIGludCBzbXNjX2lyY2Nfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSk7Ci1zdGF0aWMgaW50IHNtc2NfaXJjY19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KTsKK3N0YXRpYyBpbnQgc21zY19pcmNjX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpOworc3RhdGljIGludCBzbXNjX2lyY2NfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldik7CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBzbXNjX2lyY2NfZHJpdmVyID0gewotCS5uYW1lCQk9IFNNU0NfSVJDQzJfRFJJVkVSX05BTUUsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzbXNjX2lyY2NfZHJpdmVyID0gewogCS5zdXNwZW5kCT0gc21zY19pcmNjX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBzbXNjX2lyY2NfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9IFNNU0NfSVJDQzJfRFJJVkVSX05BTUUsCisJfSwKIH07CiAKIC8qIFRyYW5zY2VpdmVycyBmb3IgU01TQy1pcmNjICovCkBAIC0zNDYsNyArMzQ3LDcgQEAKIAogCUlSREFfREVCVUcoMSwgIiVzXG4iLCBfX0ZVTkNUSU9OX18pOwogCi0JcmV0ID0gZHJpdmVyX3JlZ2lzdGVyKCZzbXNjX2lyY2NfZHJpdmVyKTsKKwlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnNtc2NfaXJjY19kcml2ZXIpOwogCWlmIChyZXQpIHsKIAkJSVJEQV9FUlJPUigiJXMsIENhbid0IHJlZ2lzdGVyIGRyaXZlciFcbiIsIGRyaXZlcl9uYW1lKTsKIAkJcmV0dXJuIHJldDsKQEAgLTM3OCw3ICszNzksNyBAQAogCX0KIAogCWlmIChyZXQpCi0JCWRyaXZlcl91bnJlZ2lzdGVyKCZzbXNjX2lyY2NfZHJpdmVyKTsKKwkJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNtc2NfaXJjY19kcml2ZXIpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTQ5MSw3ICs0OTIsNyBAQAogCQllcnIgPSBQVFJfRVJSKHNlbGYtPnBsZGV2KTsKIAkJZ290byBlcnJfb3V0NTsKIAl9Ci0JZGV2X3NldF9kcnZkYXRhKCZzZWxmLT5wbGRldi0+ZGV2LCBzZWxmKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShzZWxmLT5wbGRldiwgc2VsZik7CiAKIAlJUkRBX01FU1NBR0UoIklyREE6IFJlZ2lzdGVyZWQgZGV2aWNlICVzXG4iLCBkZXYtPm5hbWUpOwogCWRldl9jb3VudCsrOwpAQCAtMTY4NSw5ICsxNjg2LDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzbXNjX2lyY2Nfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgc21zY19pcmNjX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0Jc3RydWN0IHNtc2NfaXJjY19jYiAqc2VsZiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBzbXNjX2lyY2NfY2IgKnNlbGYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJaWYgKCFzZWxmLT5pby5zdXNwZW5kZWQpIHsKIAkJSVJEQV9ERUJVRygxLCAiJXMsIFN1c3BlbmRpbmdcbiIsIGRyaXZlcl9uYW1lKTsKQEAgLTE3MDYsOSArMTcwNyw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc21zY19pcmNjX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHNtc2NfaXJjY19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBzbXNjX2lyY2NfY2IgKnNlbGYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgc21zY19pcmNjX2NiICpzZWxmID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAogCWlmIChzZWxmLT5pby5zdXNwZW5kZWQpIHsKIAkJSVJEQV9ERUJVRygxLCAiJXMsIFdha2luZyB1cFxuIiwgZHJpdmVyX25hbWUpOwpAQCAtMTc4OCw3ICsxNzg5LDcgQEAKIAkJCXNtc2NfaXJjY19jbG9zZShkZXZfc2VsZltpXSk7CiAJfQogCi0JZHJpdmVyX3VucmVnaXN0ZXIoJnNtc2NfaXJjY19kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzbXNjX2lyY2NfZHJpdmVyKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lzZXJpZXNfdmV0aC5jIGIvZHJpdmVycy9uZXQvaXNlcmllc192ZXRoLmMKaW5kZXggZDg2ZDhmMC4uNzdlYWRmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXNlcmllc192ZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvaXNlcmllc192ZXRoLmMKQEAgLTU4LDcgKzU4LDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9qYXp6c29uaWMuYyBiL2RyaXZlcnMvbmV0L2phenpzb25pYy5jCmluZGV4IDJmYjMxMDEuLmIwMzliZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2phenpzb25pYy5jCisrKyBiL2RyaXZlcnMvbmV0L2phenpzb25pYy5jCkBAIC0xOTQsNyArMTk0LDcgQEAKICAqIFByb2JlIGZvciBhIFNPTklDIGV0aGVybmV0IGNvbnRyb2xsZXIgb24gYSBNaXBzIEphenogYm9hcmQuCiAgKiBBY3R1YWxseSBwcm9iaW5nIGlzIHN1cGVyZmx1b3VzIGJ1dCB3ZSdyZSBwYXJhbm9pZC4KICAqLwotc3RhdGljIGludCBfX2luaXQgamF6el9zb25pY19wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgaW50IF9faW5pdCBqYXp6X3NvbmljX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3Qgc29uaWNfbG9jYWwgKmxwOwpAQCAtMjEyLDggKzIxMiw4IEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCWxwLT5kZXZpY2UgPSBkZXZpY2U7Ci0JU0VUX05FVERFVl9ERVYoZGV2LCBkZXZpY2UpOworCWxwLT5kZXZpY2UgPSAmcGRldi0+ZGV2OworCVNFVF9ORVRERVZfREVWKGRldiwgJnBkZXYtPmRldik7CiAgCVNFVF9NT0RVTEVfT1dORVIoZGV2KTsKIAogCW5ldGRldl9ib290X3NldHVwX2NoZWNrKGRldik7CkBAIC0yNjQsOSArMjY0LDkgQEAKIAogI2luY2x1ZGUgInNvbmljLmMiCiAKLXN0YXRpYyBpbnQgX19kZXZleGl0IGphenpfc29uaWNfZGV2aWNlX3JlbW92ZSAoc3RydWN0IGRldmljZSAqZGV2aWNlKQorc3RhdGljIGludCBfX2RldmV4aXQgamF6el9zb25pY19kZXZpY2VfcmVtb3ZlIChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkZXZpY2UtPmRyaXZlcl9kYXRhOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3Qgc29uaWNfbG9jYWwqIGxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCXVucmVnaXN0ZXJfbmV0ZGV2IChkZXYpOwpAQCAtMjc4LDE4ICsyNzgsMTkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGphenpfc29uaWNfZHJpdmVyID0gewotCS5uYW1lCT0gamF6el9zb25pY19zdHJpbmcsCi0JLmJ1cwk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGphenpfc29uaWNfZHJpdmVyID0gewogCS5wcm9iZQk9IGphenpfc29uaWNfcHJvYmUsCiAJLnJlbW92ZQk9IF9fZGV2ZXhpdF9wKGphenpfc29uaWNfZGV2aWNlX3JlbW92ZSksCisJLmRyaXZlcgk9IHsKKwkJLm5hbWUJPSBqYXp6X3NvbmljX3N0cmluZywKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgamF6el9zb25pY19pbml0X21vZHVsZSh2b2lkKQogewogCWludCBlcnI7CiAKLQlpZiAoKGVyciA9IGRyaXZlcl9yZWdpc3RlcigmamF6el9zb25pY19kcml2ZXIpKSkgeworCWlmICgoZXJyID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZqYXp6X3NvbmljX2RyaXZlcikpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiRHJpdmVyIHJlZ2lzdHJhdGlvbiBmYWlsZWRcbiIpOwogCQlyZXR1cm4gZXJyOwogCX0KQEAgLTMxMyw3ICszMTQsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgamF6el9zb25pY19jbGVhbnVwX21vZHVsZSh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZqYXp6X3NvbmljX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmphenpfc29uaWNfZHJpdmVyKTsKIAogCWlmIChqYXp6X3NvbmljX2RldmljZSkgewogCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihqYXp6X3NvbmljX2RldmljZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tYWM4MzkwLmMgYi9kcml2ZXJzL25ldC9tYWM4MzkwLmMKaW5kZXggY2U1NzYxOC4uZDhjOTlmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWFjODM5MC5jCisrKyBiL2RyaXZlcnMvbmV0L21hYzgzOTAuYwpAQCAtMTUsNyArMTUsNiBAQAogICogYW5kIGZpeGVkIGFjY2VzcyB0byBTb25pYyBTeXMgY2FyZCB3aGljaCBtYXNxdWVyYWRlcyBhcyBhIEZhcmFsbG9uIAogICogYnkgcmF5a0BrbmlnaHRzbWFub3Iub3JnICovCiAKLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21hY3NvbmljLmMgYi9kcml2ZXJzL25ldC9tYWNzb25pYy5jCmluZGV4IDllZjQ1OTIuLjAyZDVjNjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21hY3NvbmljLmMKKysrIGIvZHJpdmVycy9uZXQvbWFjc29uaWMuYwpAQCAtNTI1LDcgKzUyNSw3IEBACiAJcmV0dXJuIG1hY3NvbmljX2luaXQoZGV2KTsKIH0KIAotc3RhdGljIGludCBfX2luaXQgbWFjX3NvbmljX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKK3N0YXRpYyBpbnQgX19pbml0IG1hY19zb25pY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2UpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3Qgc29uaWNfbG9jYWwgKmxwOwpAQCAtNTM3LDggKzUzNyw4IEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCWxwLT5kZXZpY2UgPSBkZXZpY2U7Ci0JU0VUX05FVERFVl9ERVYoZGV2LCBkZXZpY2UpOworCWxwLT5kZXZpY2UgPSAmZGV2aWNlLT5kZXY7CisJU0VUX05FVERFVl9ERVYoZGV2LCAmZGV2aWNlLT5kZXYpOwogIAlTRVRfTU9EVUxFX09XTkVSKGRldik7CiAKIAkvKiBUaGlzIHdpbGwgY2F0Y2ggZmF0YWwgc3R1ZmYgbGlrZSAtRU5PTUVNIGFzIHdlbGwgYXMgc3VjY2VzcyAqLwpAQCAtNTc5LDkgKzU3OSw5IEBACiAKICNpbmNsdWRlICJzb25pYy5jIgogCi1zdGF0aWMgaW50IF9fZGV2ZXhpdCBtYWNfc29uaWNfZGV2aWNlX3JlbW92ZSAoc3RydWN0IGRldmljZSAqZGV2aWNlKQorc3RhdGljIGludCBfX2RldmV4aXQgbWFjX3NvbmljX2RldmljZV9yZW1vdmUgKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZSkKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZGV2aWNlLT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2aWNlKTsKIAlzdHJ1Y3Qgc29uaWNfbG9jYWwqIGxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCXVucmVnaXN0ZXJfbmV0ZGV2IChkZXYpOwpAQCAtNTkyLDE4ICs1OTIsMTkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIG1hY19zb25pY19kcml2ZXIgPSB7Ci0JLm5hbWUgICA9IG1hY19zb25pY19zdHJpbmcsCi0JLmJ1cyAgICA9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG1hY19zb25pY19kcml2ZXIgPSB7CiAJLnByb2JlICA9IG1hY19zb25pY19wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3AobWFjX3NvbmljX2RldmljZV9yZW1vdmUpLAorCS5kcml2ZXIJPSB7CisJCS5uYW1lID0gbWFjX3NvbmljX3N0cmluZywKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgbWFjX3NvbmljX2luaXRfbW9kdWxlKHZvaWQpCiB7CiAJaW50IGVycjsKIAotCWlmICgoZXJyID0gZHJpdmVyX3JlZ2lzdGVyKCZtYWNfc29uaWNfZHJpdmVyKSkpIHsKKwlpZiAoKGVyciA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbWFjX3NvbmljX2RyaXZlcikpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiRHJpdmVyIHJlZ2lzdHJhdGlvbiBmYWlsZWRcbiIpOwogCQlyZXR1cm4gZXJyOwogCX0KQEAgLTYyOCw3ICs2MjksNyBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgbWFjX3NvbmljX2NsZWFudXBfbW9kdWxlKHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJm1hY19zb25pY19kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZtYWNfc29uaWNfZHJpdmVyKTsKIAogCWlmIChtYWNfc29uaWNfZGV2aWNlKSB7CiAJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKG1hY19zb25pY19kZXZpY2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbXY2NDN4eF9ldGguYyBiL2RyaXZlcnMvbmV0L212NjQzeHhfZXRoLmMKaW5kZXggNzFmMmM2Ny4uM2NiOWIzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbXY2NDN4eF9ldGguYworKysgYi9kcml2ZXJzL25ldC9tdjY0M3h4X2V0aC5jCkBAIC0xMzg3LDkgKzEzODcsOCBAQAogICogSW5wdXQgOglzdHJ1Y3QgZGV2aWNlICoKICAqIE91dHB1dCA6CS1FTk9NRU0gaWYgZmFpbGVkICwgMCBpZiBzdWNjZXNzCiAgKi8KLXN0YXRpYyBpbnQgbXY2NDN4eF9ldGhfcHJvYmUoc3RydWN0IGRldmljZSAqZGRldikKK3N0YXRpYyBpbnQgbXY2NDN4eF9ldGhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRkZXYpOwogCXN0cnVjdCBtdjY0M3h4X2V0aF9wbGF0Zm9ybV9kYXRhICpwZDsKIAlpbnQgcG9ydF9udW0gPSBwZGV2LT5pZDsKIAlzdHJ1Y3QgbXY2NDN4eF9wcml2YXRlICptcDsKQEAgLTE0MDIsNyArMTQwMSw3IEBACiAJaWYgKCFkZXYpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JZGV2X3NldF9kcnZkYXRhKGRkZXYsIGRldik7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZGV2KTsKIAogCW1wID0gbmV0ZGV2X3ByaXYoZGV2KTsKIApAQCAtMTU0NiwyMSArMTU0NSwyMCBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbXY2NDN4eF9ldGhfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRkZXYpCitzdGF0aWMgaW50IG12NjQzeHhfZXRoX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGRldik7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCiAJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwogCiAJZnJlZV9uZXRkZXYoZGV2KTsKLQlkZXZfc2V0X2RydmRhdGEoZGRldiwgTlVMTCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbXY2NDN4eF9ldGhfc2hhcmVkX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRkZXYpCitzdGF0aWMgaW50IG12NjQzeHhfZXRoX3NoYXJlZF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGRldik7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAKIAlwcmludGsoS0VSTl9OT1RJQ0UgIk1WLTY0M3h4IDEwLzEwMC8xMDAwIEV0aGVybmV0IERyaXZlclxuIik7CkBAIC0xNTc4LDcgKzE1NzYsNyBAQAogCiB9CiAKLXN0YXRpYyBpbnQgbXY2NDN4eF9ldGhfc2hhcmVkX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZGV2KQorc3RhdGljIGludCBtdjY0M3h4X2V0aF9zaGFyZWRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJaW91bm1hcChtdjY0M3h4X2V0aF9zaGFyZWRfYmFzZSk7CiAJbXY2NDN4eF9ldGhfc2hhcmVkX2Jhc2UgPSBOVUxMOwpAQCAtMTU4NiwxOCArMTU4NCwyMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgbXY2NDN4eF9ldGhfZHJpdmVyID0gewotCS5uYW1lID0gTVY2NDNYWF9FVEhfTkFNRSwKLQkuYnVzID0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXY2NDN4eF9ldGhfZHJpdmVyID0gewogCS5wcm9iZSA9IG12NjQzeHhfZXRoX3Byb2JlLAogCS5yZW1vdmUgPSBtdjY0M3h4X2V0aF9yZW1vdmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSBNVjY0M1hYX0VUSF9OQU1FLAorCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgbXY2NDN4eF9ldGhfc2hhcmVkX2RyaXZlciA9IHsKLQkubmFtZSA9IE1WNjQzWFhfRVRIX1NIQVJFRF9OQU1FLAotCS5idXMgPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdjY0M3h4X2V0aF9zaGFyZWRfZHJpdmVyID0gewogCS5wcm9iZSA9IG12NjQzeHhfZXRoX3NoYXJlZF9wcm9iZSwKIAkucmVtb3ZlID0gbXY2NDN4eF9ldGhfc2hhcmVkX3JlbW92ZSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9IE1WNjQzWFhfRVRIX1NIQVJFRF9OQU1FLAorCX0sCiB9OwogCiAvKgpAQCAtMTYxMywxMSArMTYxMywxMSBAQAogewogCWludCByYzsKIAotCXJjID0gZHJpdmVyX3JlZ2lzdGVyKCZtdjY0M3h4X2V0aF9zaGFyZWRfZHJpdmVyKTsKKwlyYyA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbXY2NDN4eF9ldGhfc2hhcmVkX2RyaXZlcik7CiAJaWYgKCFyYykgewotCQlyYyA9IGRyaXZlcl9yZWdpc3RlcigmbXY2NDN4eF9ldGhfZHJpdmVyKTsKKwkJcmMgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm12NjQzeHhfZXRoX2RyaXZlcik7CiAJCWlmIChyYykKLQkJCWRyaXZlcl91bnJlZ2lzdGVyKCZtdjY0M3h4X2V0aF9zaGFyZWRfZHJpdmVyKTsKKwkJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZtdjY0M3h4X2V0aF9zaGFyZWRfZHJpdmVyKTsKIAl9CiAJcmV0dXJuIHJjOwogfQpAQCAtMTYzMyw4ICsxNjMzLDggQEAKICAqLwogc3RhdGljIHZvaWQgX19leGl0IG12NjQzeHhfY2xlYW51cF9tb2R1bGUodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmbXY2NDN4eF9ldGhfZHJpdmVyKTsKLQlkcml2ZXJfdW5yZWdpc3RlcigmbXY2NDN4eF9ldGhfc2hhcmVkX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm12NjQzeHhfZXRoX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm12NjQzeHhfZXRoX3NoYXJlZF9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChtdjY0M3h4X2luaXRfbW9kdWxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L212NjQzeHhfZXRoLmggYi9kcml2ZXJzL25ldC9tdjY0M3h4X2V0aC5oCmluZGV4IGJjZmRhNTEuLmY3NjlmOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L212NjQzeHhfZXRoLmgKKysrIGIvZHJpdmVycy9uZXQvbXY2NDN4eF9ldGguaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19NVjY0M1hYX0VUSF9IX18KICNkZWZpbmUgX19NVjY0M1hYX0VUSF9IX18KIAotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbnM4MzgyMC5jIGIvZHJpdmVycy9uZXQvbnM4MzgyMC5jCmluZGV4IGEzYzNmYzkuLmY4NTdhZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25zODM4MjAuYworKysgYi9kcml2ZXJzL25ldC9uczgzODIwLmMKQEAgLTExMCw3ICsxMTAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pcC5oPgkvKiBmb3IgaXBoICovCiAjaW5jbHVkZSA8bGludXgvaW4uaD4JLyogZm9yIElQUFJPVE9fLi4uICovCi0jaW5jbHVkZSA8bGludXgvZWVwcm9tLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KQEAgLTQ0NSw3ICs0NDQsNiBAQAogCiAJdTMyCQkJTUVBUl9jYWNoZTsKIAl1MzIJCQlJTVJfY2FjaGU7Ci0Jc3RydWN0IGVlcHJvbQkJZWU7CiAKIAl1bnNpZ25lZAkJbGlua3N0YXRlOwogCkBAIC0xNTU4LDE1ICsxNTU2LDEzIEBACiAJdW5zaWduZWQgaTsKIAlmb3IgKGk9MDsgaTwzOyBpKyspIHsKIAkJdTMyIGRhdGE7Ci0jaWYgMAkvKiBJJ3ZlIGxlZnQgdGhpcyBpbiBhcyBhbiBleGFtcGxlIG9mIGhvdyB0byB1c2UgZWVwcm9tLmggKi8KLQkJZGF0YSA9IGVlcHJvbV9yZWFkdygmZGV2LT5lZSwgMHhhICsgMiAtIGkpOwotI2Vsc2UKKwogCQkvKiBSZWFkIGZyb20gdGhlIHBlcmZlY3QgbWF0Y2ggbWVtb3J5OiB0aGlzIGlzIGxvYWRlZCBieQogCQkgKiB0aGUgY2hpcCBmcm9tIHRoZSBFRVBST00gdmlhIHRoZSBFRUxPQUQgc2VsZiB0ZXN0LgogCQkgKi8KIAkJd3JpdGVsKGkqMiwgZGV2LT5iYXNlICsgUkZDUik7CiAJCWRhdGEgPSByZWFkbChkZXYtPmJhc2UgKyBSRkRSKTsKLSNlbmRpZgorCiAJCSptYWMrKyA9IGRhdGE7CiAJCSptYWMrKyA9IGRhdGEgPj4gODsKIAl9CkBAIC0xODUxLDggKzE4NDcsNiBAQAogCXNwaW5fbG9ja19pbml0KCZkZXYtPm1pc2NfbG9jayk7CiAJZGV2LT5wY2lfZGV2ID0gcGNpX2RldjsKIAotCWRldi0+ZWUuY2FjaGUgPSAmZGV2LT5NRUFSX2NhY2hlOwotCWRldi0+ZWUubG9jayA9ICZkZXYtPm1pc2NfbG9jazsKIAlTRVRfTU9EVUxFX09XTkVSKG5kZXYpOwogCVNFVF9ORVRERVZfREVWKG5kZXYsICZwY2lfZGV2LT5kZXYpOwogCkBAIC0xODg3LDkgKzE4ODEsNiBAQAogCiAJZGV2LT5JTVJfY2FjaGUgPSAwOwogCi0Jc2V0dXBfZWVfbWVtX2JpdGJhbmdlcigmZGV2LT5lZSwgZGV2LT5iYXNlICsgTUVBUiwgMywgMiwgMSwgMCwKLQkJMCk7Ci0KIAllcnIgPSByZXF1ZXN0X2lycShwY2lfZGV2LT5pcnEsIG5zODM4MjBfaXJxLCBTQV9TSElSUSwKIAkJCSAgRFJWX05BTUUsIG5kZXYpOwogCWlmIChlcnIpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcF9hc3luYy5jIGIvZHJpdmVycy9uZXQvcHBwX2FzeW5jLmMKaW5kZXggNTllODE4My4uNDAwZjY1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHBwX2FzeW5jLmMKKysrIGIvZHJpdmVycy9uZXQvcHBwX2FzeW5jLmMKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS9zdHJpbmcuaD4KIAogI2RlZmluZSBQUFBfVkVSU0lPTgkiMi40LjIiCiAKQEAgLTgzNSw4ICs4MzYsMTEgQEAKICBlcnI6CiAJLyogZnJhbWUgaGFkIGFuIGVycm9yLCByZW1lbWJlciB0aGF0LCByZXNldCBTQ19UT1NTICYgU0NfRVNDQVBFICovCiAJYXAtPnN0YXRlID0gU0NfUFJFVl9FUlJPUjsKLQlpZiAoc2tiKQorCWlmIChza2IpIHsKKwkJLyogbWFrZSBza2IgYXBwZWFyIGFzIGZyZXNobHkgYWxsb2NhdGVkICovCiAJCXNrYl90cmltKHNrYiwgMCk7CisJCXNrYl9yZXNlcnZlKHNrYiwgLSBza2JfaGVhZHJvb20oc2tiKSk7CisJfQogfQogCiAvKiBDYWxsZWQgd2hlbiB0aGUgdHR5IGRyaXZlciBoYXMgZGF0YSBmb3IgdXMuIFJ1bnMgcGFyYWxsZWwgd2l0aCB0aGUKQEAgLTg4OSwxMCArODkzLDE3IEBACiAJCQkJc2tiID0gZGV2X2FsbG9jX3NrYihhcC0+bXJ1ICsgUFBQX0hEUkxFTiArIDIpOwogCQkJCWlmIChza2IgPT0gMCkKIAkJCQkJZ290byBub21lbTsKLQkJCQkvKiBUcnkgdG8gZ2V0IHRoZSBwYXlsb2FkIDQtYnl0ZSBhbGlnbmVkICovCisgCQkJCWFwLT5ycGt0ID0gc2tiOworIAkJCX0KKyAJCQlpZiAoc2tiLT5sZW4gPT0gMCkgeworIAkJCQkvKiBUcnkgdG8gZ2V0IHRoZSBwYXlsb2FkIDQtYnl0ZSBhbGlnbmVkLgorIAkJCQkgKiBUaGlzIHNob3VsZCBtYXRjaCB0aGUKKyAJCQkJICogUFBQX0FMTFNUQVRJT05TL1BQUF9VSS9jb21wcmVzc2VkIHRlc3RzIGluCisgCQkJCSAqIHByb2Nlc3NfaW5wdXRfcGFja2V0LCBidXQgd2UgZG8gbm90IGhhdmUKKyAJCQkJICogZW5vdWdoIGNoYXJzIGhlcmUgdG8gdGVzdCBidWZbMV0gYW5kIGJ1ZlsyXS4KKyAJCQkJICovCiAJCQkJaWYgKGJ1ZlswXSAhPSBQUFBfQUxMU1RBVElPTlMpCiAJCQkJCXNrYl9yZXNlcnZlKHNrYiwgMiArIChidWZbMF0gJiAxKSk7Ci0JCQkJYXAtPnJwa3QgPSBza2I7CiAJCQl9CiAJCQlpZiAobiA+IHNrYl90YWlscm9vbShza2IpKSB7CiAJCQkJLyogcGFja2V0IG92ZXJmbG93ZWQgTVJVICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHBfZ2VuZXJpYy5jIGIvZHJpdmVycy9uZXQvcHBwX2dlbmVyaWMuYwppbmRleCBkM2M5OTU4Li41MDQzMGY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wcHBfZ2VuZXJpYy5jCisrKyBiL2RyaXZlcnMvbmV0L3BwcF9nZW5lcmljLmMKQEAgLTEzNywxMyArMTM3LDE0IEBACiAKIC8qCiAgKiBCaXRzIGluIGZsYWdzOiBTQ19OT19UQ1BfQ0NJRCwgU0NfQ0NQX09QRU4sIFNDX0NDUF9VUCwgU0NfTE9PUF9UUkFGRklDLAotICogU0NfTVVMVElMSU5LLCBTQ19NUF9TSE9SVFNFUSwgU0NfTVBfWFNIT1JUU0VRLCBTQ19DT01QX1RDUCwgU0NfUkVKX0NPTVBfVENQLgorICogU0NfTVVMVElMSU5LLCBTQ19NUF9TSE9SVFNFUSwgU0NfTVBfWFNIT1JUU0VRLCBTQ19DT01QX1RDUCwgU0NfUkVKX0NPTVBfVENQLAorICogU0NfTVVTVF9DT01QCiAgKiBCaXRzIGluIHJzdGF0ZTogU0NfREVDT01QX1JVTiwgU0NfRENfRVJST1IsIFNDX0RDX0ZFUlJPUi4KICAqIEJpdHMgaW4geHN0YXRlOiBTQ19DT01QX1JVTgogICovCiAjZGVmaW5lIFNDX0ZMQUdfQklUUwkoU0NfTk9fVENQX0NDSUR8U0NfQ0NQX09QRU58U0NfQ0NQX1VQfFNDX0xPT1BfVFJBRkZJQyBcCiAJCQkgfFNDX01VTFRJTElOS3xTQ19NUF9TSE9SVFNFUXxTQ19NUF9YU0hPUlRTRVEgXAotCQkJIHxTQ19DT01QX1RDUHxTQ19SRUpfQ09NUF9UQ1ApCisJCQkgfFNDX0NPTVBfVENQfFNDX1JFSl9DT01QX1RDUHxTQ19NVVNUX0NPTVApCiAKIC8qCiAgKiBQcml2YXRlIGRhdGEgc3RydWN0dXJlIGZvciBlYWNoIGNoYW5uZWwuCkBAIC0xMDI3LDYgKzEwMjgsNTYgQEAKIAlwcHBfeG1pdF91bmxvY2socHBwKTsKIH0KIAorc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqCitwYWRfY29tcHJlc3Nfc2tiKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqbmV3X3NrYjsKKwlpbnQgbGVuOworCWludCBuZXdfc2tiX3NpemUgPSBwcHAtPmRldi0+bXR1ICsKKwkJcHBwLT54Y29tcC0+Y29tcF9leHRyYSArIHBwcC0+ZGV2LT5oYXJkX2hlYWRlcl9sZW47CisJaW50IGNvbXByZXNzb3Jfc2tiX3NpemUgPSBwcHAtPmRldi0+bXR1ICsKKwkJcHBwLT54Y29tcC0+Y29tcF9leHRyYSArIFBQUF9IRFJMRU47CisJbmV3X3NrYiA9IGFsbG9jX3NrYihuZXdfc2tiX3NpemUsIEdGUF9BVE9NSUMpOworCWlmICghbmV3X3NrYikgeworCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJcHJpbnRrKEtFUk5fRVJSICJQUFA6IG5vIG1lbW9yeSAoY29tcCBwa3QpXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWlmIChwcHAtPmRldi0+aGFyZF9oZWFkZXJfbGVuID4gUFBQX0hEUkxFTikKKwkJc2tiX3Jlc2VydmUobmV3X3NrYiwKKwkJCSAgICBwcHAtPmRldi0+aGFyZF9oZWFkZXJfbGVuIC0gUFBQX0hEUkxFTik7CisKKwkvKiBjb21wcmVzc29yIHN0aWxsIGV4cGVjdHMgQS9DIGJ5dGVzIGluIGhkciAqLworCWxlbiA9IHBwcC0+eGNvbXAtPmNvbXByZXNzKHBwcC0+eGNfc3RhdGUsIHNrYi0+ZGF0YSAtIDIsCisJCQkJICAgbmV3X3NrYi0+ZGF0YSwgc2tiLT5sZW4gKyAyLAorCQkJCSAgIGNvbXByZXNzb3Jfc2tiX3NpemUpOworCWlmIChsZW4gPiAwICYmIChwcHAtPmZsYWdzICYgU0NfQ0NQX1VQKSkgeworCQlrZnJlZV9za2Ioc2tiKTsKKwkJc2tiID0gbmV3X3NrYjsKKwkJc2tiX3B1dChza2IsIGxlbik7CisJCXNrYl9wdWxsKHNrYiwgMik7CS8qIHB1bGwgb2ZmIEEvQyBieXRlcyAqLworCX0gZWxzZSBpZiAobGVuID09IDApIHsKKwkJLyogZGlkbid0IGNvbXByZXNzLCBvciBDQ1Agbm90IHVwIHlldCAqLworCQlrZnJlZV9za2IobmV3X3NrYik7CisJCW5ld19za2IgPSBza2I7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogKGxlbiA8IDApCisJCSAqIE1QUEUgcmVxdWlyZXMgdGhhdCB3ZSBkbyBub3Qgc2VuZCB1bmVuY3J5cHRlZAorCQkgKiBmcmFtZXMuICBUaGUgY29tcHJlc3NvciB3aWxsIHJldHVybiAtMSBpZiB3ZQorCQkgKiBzaG91bGQgZHJvcCB0aGUgZnJhbWUuICBXZSBjYW5ub3Qgc2ltcGx5IHRlc3QKKwkJICogdGhlIGNvbXByZXNzX3Byb3RvIGJlY2F1c2UgTVBQRSBhbmQgTVBQQyBzaGFyZQorCQkgKiB0aGUgc2FtZSBudW1iZXIuCisJCSAqLworCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJcHJpbnRrKEtFUk5fRVJSICJwcHA6IGNvbXByZXNzb3IgZHJvcHBlZCBwa3RcbiIpOworCQlrZnJlZV9za2Ioc2tiKTsKKwkJa2ZyZWVfc2tiKG5ld19za2IpOworCQluZXdfc2tiID0gTlVMTDsKKwl9CisJcmV0dXJuIG5ld19za2I7Cit9CisKIC8qCiAgKiBDb21wcmVzcyBhbmQgc2VuZCBhIGZyYW1lLgogICogVGhlIGNhbGxlciBzaG91bGQgaGF2ZSBsb2NrZWQgdGhlIHhtaXQgcGF0aCwKQEAgLTExMTMsMjkgKzExNjQsMTQgQEAKIAkvKiB0cnkgdG8gZG8gcGFja2V0IGNvbXByZXNzaW9uICovCiAJaWYgKChwcHAtPnhzdGF0ZSAmIFNDX0NPTVBfUlVOKSAmJiBwcHAtPnhjX3N0YXRlICE9IDAKIAkgICAgJiYgcHJvdG8gIT0gUFBQX0xDUCAmJiBwcm90byAhPSBQUFBfQ0NQKSB7Ci0JCW5ld19za2IgPSBhbGxvY19za2IocHBwLT5kZXYtPm10dSArIHBwcC0+ZGV2LT5oYXJkX2hlYWRlcl9sZW4sCi0JCQkJICAgIEdGUF9BVE9NSUMpOwotCQlpZiAobmV3X3NrYiA9PSAwKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIlBQUDogbm8gbWVtb3J5IChjb21wIHBrdClcbiIpOworCQlpZiAoIShwcHAtPmZsYWdzICYgU0NfQ0NQX1VQKSAmJiAocHBwLT5mbGFncyAmIFNDX01VU1RfQ09NUCkpIHsKKwkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQkJcHJpbnRrKEtFUk5fRVJSICJwcHA6IGNvbXByZXNzaW9uIHJlcXVpcmVkIGJ1dCBkb3duIC0gcGt0IGRyb3BwZWQuXG4iKTsKIAkJCWdvdG8gZHJvcDsKIAkJfQotCQlpZiAocHBwLT5kZXYtPmhhcmRfaGVhZGVyX2xlbiA+IFBQUF9IRFJMRU4pCi0JCQlza2JfcmVzZXJ2ZShuZXdfc2tiLAotCQkJCSAgICBwcHAtPmRldi0+aGFyZF9oZWFkZXJfbGVuIC0gUFBQX0hEUkxFTik7Ci0KLQkJLyogY29tcHJlc3NvciBzdGlsbCBleHBlY3RzIEEvQyBieXRlcyBpbiBoZHIgKi8KLQkJbGVuID0gcHBwLT54Y29tcC0+Y29tcHJlc3MocHBwLT54Y19zdGF0ZSwgc2tiLT5kYXRhIC0gMiwKLQkJCQkJICAgbmV3X3NrYi0+ZGF0YSwgc2tiLT5sZW4gKyAyLAotCQkJCQkgICBwcHAtPmRldi0+bXR1ICsgUFBQX0hEUkxFTik7Ci0JCWlmIChsZW4gPiAwICYmIChwcHAtPmZsYWdzICYgU0NfQ0NQX1VQKSkgewotCQkJa2ZyZWVfc2tiKHNrYik7Ci0JCQlza2IgPSBuZXdfc2tiOwotCQkJc2tiX3B1dChza2IsIGxlbik7Ci0JCQlza2JfcHVsbChza2IsIDIpOwkvKiBwdWxsIG9mZiBBL0MgYnl0ZXMgKi8KLQkJfSBlbHNlIHsKLQkJCS8qIGRpZG4ndCBjb21wcmVzcywgb3IgQ0NQIG5vdCB1cCB5ZXQgKi8KLQkJCWtmcmVlX3NrYihuZXdfc2tiKTsKLQkJfQorCQlza2IgPSBwYWRfY29tcHJlc3Nfc2tiKHBwcCwgc2tiKTsKKwkJaWYgKCFza2IpCisJCQlnb3RvIGRyb3A7CiAJfQogCiAJLyoKQEAgLTExNTUsNyArMTE5MSw4IEBACiAJcmV0dXJuOwogCiAgZHJvcDoKLQlrZnJlZV9za2Ioc2tiKTsKKwlpZiAoc2tiKQorCQlrZnJlZV9za2Ioc2tiKTsKIAkrK3BwcC0+c3RhdHMudHhfZXJyb3JzOwogfQogCkBAIC0xNTUyLDYgKzE1ODksOSBAQAogCSAgICAmJiAocHBwLT5yc3RhdGUgJiAoU0NfRENfRkVSUk9SIHwgU0NfRENfRVJST1IpKSA9PSAwKQogCQlza2IgPSBwcHBfZGVjb21wcmVzc19mcmFtZShwcHAsIHNrYik7CiAKKwlpZiAocHBwLT5mbGFncyAmIFNDX01VU1RfQ09NUCAmJiBwcHAtPnJzdGF0ZSAmIFNDX0RDX0ZFUlJPUikKKwkJZ290byBlcnI7CisKIAlwcm90byA9IFBQUF9QUk9UTyhza2IpOwogCXN3aXRjaCAocHJvdG8pIHsKIAljYXNlIFBQUF9WSkNfQ09NUDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcF9tcHBlLmMgYi9kcml2ZXJzL25ldC9wcHBfbXBwZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5ODVkMWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9wcHBfbXBwZS5jCkBAIC0wLDAgKzEsNzI0IEBACisvKgorICogcHBwX21wcGUuYyAtIGludGVyZmFjZSBNUFBFIHRvIHRoZSBQUFAgY29kZS4KKyAqIFRoaXMgdmVyc2lvbiBpcyBmb3IgdXNlIHdpdGggTGludXgga2VybmVsIDIuNi4xNCsKKyAqCisgKiBCeSBGcmFuayBDdXNhY2sgPGZjdXNhY2tAZmN1c2Fjay5jb20+LgorICogQ29weXJpZ2h0IChjKSAyMDAyLDIwMDMsMjAwNCBHb29nbGUsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogTGljZW5zZToKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cworICogZG9jdW1lbnRhdGlvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCB3aXRob3V0IGFueQorICogd2FycmFudHksIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKiBBTFRFUk5BVElWRUxZLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlIGlzIHJldGFpbmVkIGluIGZ1bGwsIHRoaXMgcHJvZHVjdAorICogbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCksCisgKiBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgYXBwbHkgSU5TVEVBRCBPRiB0aG9zZSBnaXZlbiBhYm92ZS4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqCisgKiBDaGFuZ2Vsb2c6CisgKiAgICAgIDA4LzEyLzA1IC0gTWF0dCBEb21zY2ggPE1hdHRfRG9tc2NoQGRlbGwuY29tPgorICogICAgICAgICAgICAgICAgIE9ubHkgbmVlZCBleHRyYSBza2IgcGFkZGluZyBvbiB0cmFuc21pdCwgbm90IHJlY2VpdmUuCisgKiAgICAgIDA2LzE4LzA0IC0gTWF0dCBEb21zY2ggPE1hdHRfRG9tc2NoQGRlbGwuY29tPiwgT2xlZyBNYWthcmVua28gPG1vbGVAcXVhZHJhLnJ1PgorICogICAgICAgICAgICAgICAgIFVzZSBMaW51eCBrZXJuZWwgMi42IGFyYzQgYW5kIHNoYTEgcm91dGluZXMgcmF0aGVyIHRoYW4KKyAqICAgICAgICAgICAgICAgICBwcm92aWRpbmcgb3VyIG93bi4KKyAqICAgICAgMi8xNS8wNCAtIFRTOiBhZGRlZCAjaW5jbHVkZSA8dmVyc2lvbi5oPiBhbmQgdGVzdGluZyBmb3IgS2VybmVsCisgKiAgICAgICAgICAgICAgICAgICAgdmVyc2lvbiBiZWZvcmUgdXNpbmcKKyAqICAgICAgICAgICAgICAgICAgICBNT0RfREVDX1VTQUdFX0NPVU5UL01PRF9JTkNfVVNBR0VfQ09VTlQgd2hpY2ggYXJlCisgKiAgICAgICAgICAgICAgICAgICAgZGVwcmVjYXRlZCBpbiAyLjYKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3BwcF9kZWZzLmg+CisjaW5jbHVkZSA8bGludXgvcHBwLWNvbXAuaD4KKyNpbmNsdWRlIDxhc20vc2NhdHRlcmxpc3QuaD4KKworI2luY2x1ZGUgInBwcF9tcHBlLmgiCisKK01PRFVMRV9BVVRIT1IoIkZyYW5rIEN1c2FjayA8ZmN1c2Fja0BmY3VzYWNrLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiUG9pbnQtdG8tUG9pbnQgUHJvdG9jb2wgTWljcm9zb2Z0IFBvaW50LXRvLVBvaW50IEVuY3J5cHRpb24gc3VwcG9ydCIpOworTU9EVUxFX0xJQ0VOU0UoIkR1YWwgQlNEL0dQTCIpOworTU9EVUxFX0FMSUFTKCJwcHAtY29tcHJlc3MtIiBfX3N0cmluZ2lmeShDSV9NUFBFKSk7CitNT0RVTEVfVkVSU0lPTigiMS4wLjIiKTsKKworc3RhdGljIHZvaWQKK3NldHVwX3NnKHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGNvbnN0IHZvaWQgKmFkZHJlc3MsIHVuc2lnbmVkIGludCBsZW5ndGgpCit7CisJc2dbMF0ucGFnZSA9IHZpcnRfdG9fcGFnZShhZGRyZXNzKTsKKwlzZ1swXS5vZmZzZXQgPSBvZmZzZXRfaW5fcGFnZShhZGRyZXNzKTsKKwlzZ1swXS5sZW5ndGggPSBsZW5ndGg7Cit9CisKKyNkZWZpbmUgU0hBMV9QQURfU0laRSA0MAorCisvKgorICoga2VybmVsIGNyeXB0byBBUEkgbmVlZHMgaXRzIGFyZ3VtZW50cyB0byBiZSBpbiBrbWFsbG9jJ2QgbWVtb3J5LCBub3QgaW4gdGhlIG1vZHVsZQorICogc3RhdGljIGRhdGEgYXJlYS4gIFRoYXQgbWVhbnMgc2hhX3BhZCBuZWVkcyB0byBiZSBrbWFsbG9jJ2QuCisgKi8KKworc3RydWN0IHNoYV9wYWQgeworCXVuc2lnbmVkIGNoYXIgc2hhX3BhZDFbU0hBMV9QQURfU0laRV07CisJdW5zaWduZWQgY2hhciBzaGFfcGFkMltTSEExX1BBRF9TSVpFXTsKK307CitzdGF0aWMgc3RydWN0IHNoYV9wYWQgKnNoYV9wYWQ7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzaGFfcGFkX2luaXQoc3RydWN0IHNoYV9wYWQgKnNoYXBhZCkKK3sKKwltZW1zZXQoc2hhcGFkLT5zaGFfcGFkMSwgMHgwMCwgc2l6ZW9mKHNoYXBhZC0+c2hhX3BhZDEpKTsKKwltZW1zZXQoc2hhcGFkLT5zaGFfcGFkMiwgMHhGMiwgc2l6ZW9mKHNoYXBhZC0+c2hhX3BhZDIpKTsKK30KKworLyoKKyAqIFN0YXRlIGZvciBhbiBNUFBFIChkZSljb21wcmVzc29yLgorICovCitzdHJ1Y3QgcHBwX21wcGVfc3RhdGUgeworCXN0cnVjdCBjcnlwdG9fdGZtICphcmM0OworCXN0cnVjdCBjcnlwdG9fdGZtICpzaGExOworCXVuc2lnbmVkIGNoYXIgKnNoYTFfZGlnZXN0OworCXVuc2lnbmVkIGNoYXIgbWFzdGVyX2tleVtNUFBFX01BWF9LRVlfTEVOXTsKKwl1bnNpZ25lZCBjaGFyIHNlc3Npb25fa2V5W01QUEVfTUFYX0tFWV9MRU5dOworCXVuc2lnbmVkIGtleWxlbjsJLyoga2V5IGxlbmd0aCBpbiBieXRlcyAgICAgICAgICAgICAqLworCS8qIE5COiAxMjgtYml0ID09IDE2LCA0MC1iaXQgPT0gOCEgKi8KKwkvKiBJZiB3ZSB3YW50IHRvIHN1cHBvcnQgNTYtYml0LCAgICovCisJLyogdGhlIHVuaXQgaGFzIHRvIGNoYW5nZSB0byBiaXRzICAqLworCXVuc2lnbmVkIGNoYXIgYml0czsJLyogTVBQRSBjb250cm9sIGJpdHMgKi8KKwl1bnNpZ25lZCBjY291bnQ7CS8qIDEyLWJpdCBjb2hlcmVuY3kgY291bnQgKHNlcW5vKSAgKi8KKwl1bnNpZ25lZCBzdGF0ZWZ1bDsJLyogc3RhdGVmdWwgbW9kZSBmbGFnICovCisJaW50IGRpc2NhcmQ7CQkvKiBzdGF0ZWZ1bCBtb2RlIHBhY2tldCBsb3NzIGZsYWcgKi8KKwlpbnQgc2FuaXR5X2Vycm9yczsJLyogdGFrZSBkb3duIExDUCBpZiB0b28gbWFueSAqLworCWludCB1bml0OworCWludCBkZWJ1ZzsKKwlzdHJ1Y3QgY29tcHN0YXQgc3RhdHM7Cit9OworCisvKiBzdHJ1Y3QgcHBwX21wcGVfc3RhdGUuYml0cyBkZWZpbml0aW9ucyAqLworI2RlZmluZSBNUFBFX0JJVF9BCTB4ODAJLyogRW5jcnlwdGlvbiB0YWJsZSB3ZXJlIChyZSlpbml0aXRhbGl6ZWQgKi8KKyNkZWZpbmUgTVBQRV9CSVRfQgkweDQwCS8qIE1QUEMgb25seSAobm90IGltcGxlbWVudGVkKSAqLworI2RlZmluZSBNUFBFX0JJVF9DCTB4MjAJLyogTVBQQyBvbmx5IChub3QgaW1wbGVtZW50ZWQpICovCisjZGVmaW5lIE1QUEVfQklUX0QJMHgxMAkvKiBUaGlzIGlzIGFuIGVuY3J5cHRlZCBmcmFtZSAqLworCisjZGVmaW5lIE1QUEVfQklUX0ZMVVNIRUQJTVBQRV9CSVRfQQorI2RlZmluZSBNUFBFX0JJVF9FTkNSWVBURUQJTVBQRV9CSVRfRAorCisjZGVmaW5lIE1QUEVfQklUUyhwKSAoKHApWzRdICYgMHhmMCkKKyNkZWZpbmUgTVBQRV9DQ09VTlQocCkgKCgoKHApWzRdICYgMHgwZikgPDwgOCkgKyAocClbNV0pCisjZGVmaW5lIE1QUEVfQ0NPVU5UX1NQQUNFIDB4MTAwMAkvKiBUaGUgc2l6ZSBvZiB0aGUgY2NvdW50IHNwYWNlICovCisKKyNkZWZpbmUgTVBQRV9PVkhECTIJLyogTVBQRSBvdmVyaGVhZC9wYWNrZXQgKi8KKyNkZWZpbmUgU0FOSVRZX01BWAkxNjAwCS8qIE1heCBib2dvbiBmYWN0b3Igd2Ugd2lsbCB0b2xlcmF0ZSAqLworCisvKgorICogS2V5IERlcml2YXRpb24sIGZyb20gUkZDIDMwNzgsIFJGQyAzMDc5LgorICogRXF1aXZhbGVudCB0byBHZXRfS2V5KCkgZm9yIE1TLUNIQVAgYXMgZGVzY3JpYmVkIGluIFJGQyAzMDc5LgorICovCitzdGF0aWMgdm9pZCBnZXRfbmV3X2tleV9mcm9tX3NoYShzdHJ1Y3QgcHBwX21wcGVfc3RhdGUgKiBzdGF0ZSwgdW5zaWduZWQgY2hhciAqSW50ZXJpbUtleSkKK3sKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dbNF07CisKKwlzZXR1cF9zZygmc2dbMF0sIHN0YXRlLT5tYXN0ZXJfa2V5LCBzdGF0ZS0+a2V5bGVuKTsKKwlzZXR1cF9zZygmc2dbMV0sIHNoYV9wYWQtPnNoYV9wYWQxLCBzaXplb2Yoc2hhX3BhZC0+c2hhX3BhZDEpKTsKKwlzZXR1cF9zZygmc2dbMl0sIHN0YXRlLT5zZXNzaW9uX2tleSwgc3RhdGUtPmtleWxlbik7CisJc2V0dXBfc2coJnNnWzNdLCBzaGFfcGFkLT5zaGFfcGFkMiwgc2l6ZW9mKHNoYV9wYWQtPnNoYV9wYWQyKSk7CisKKwljcnlwdG9fZGlnZXN0X2RpZ2VzdCAoc3RhdGUtPnNoYTEsIHNnLCA0LCBzdGF0ZS0+c2hhMV9kaWdlc3QpOworCisJbWVtY3B5KEludGVyaW1LZXksIHN0YXRlLT5zaGExX2RpZ2VzdCwgc3RhdGUtPmtleWxlbik7Cit9CisKKy8qCisgKiBQZXJmb3JtIHRoZSBNUFBFIHJla2V5IGFsZ29yaXRobSwgZnJvbSBSRkMgMzA3OCwgc2VjLiA3LjMuCisgKiBXZWxsLCBub3Qgd2hhdCdzIHdyaXR0ZW4gdGhlcmUsIGJ1dCByYXRoZXIgd2hhdCB0aGV5IG1lYW50LgorICovCitzdGF0aWMgdm9pZCBtcHBlX3Jla2V5KHN0cnVjdCBwcHBfbXBwZV9zdGF0ZSAqIHN0YXRlLCBpbnQgaW5pdGlhbF9rZXkpCit7CisJdW5zaWduZWQgY2hhciBJbnRlcmltS2V5W01QUEVfTUFYX0tFWV9MRU5dOworCXN0cnVjdCBzY2F0dGVybGlzdCBzZ19pblsxXSwgc2dfb3V0WzFdOworCisJZ2V0X25ld19rZXlfZnJvbV9zaGEoc3RhdGUsIEludGVyaW1LZXkpOworCWlmICghaW5pdGlhbF9rZXkpIHsKKwkJY3J5cHRvX2NpcGhlcl9zZXRrZXkoc3RhdGUtPmFyYzQsIEludGVyaW1LZXksIHN0YXRlLT5rZXlsZW4pOworCQlzZXR1cF9zZyhzZ19pbiwgSW50ZXJpbUtleSwgc3RhdGUtPmtleWxlbik7CisJCXNldHVwX3NnKHNnX291dCwgc3RhdGUtPnNlc3Npb25fa2V5LCBzdGF0ZS0+a2V5bGVuKTsKKwkJaWYgKGNyeXB0b19jaXBoZXJfZW5jcnlwdChzdGF0ZS0+YXJjNCwgc2dfb3V0LCBzZ19pbiwKKwkJCQkgICAgICBzdGF0ZS0+a2V5bGVuKSAhPSAwKSB7CisgICAgCQkgICAgcHJpbnRrKEtFUk5fV0FSTklORyAibXBwZV9yZWtleTogY2lwaGVyX2VuY3J5cHQgZmFpbGVkXG4iKTsKKwkJfQorCX0gZWxzZSB7CisJCW1lbWNweShzdGF0ZS0+c2Vzc2lvbl9rZXksIEludGVyaW1LZXksIHN0YXRlLT5rZXlsZW4pOworCX0KKwlpZiAoc3RhdGUtPmtleWxlbiA9PSA4KSB7CisJCS8qIFNlZSBSRkMgMzA3OCAqLworCQlzdGF0ZS0+c2Vzc2lvbl9rZXlbMF0gPSAweGQxOworCQlzdGF0ZS0+c2Vzc2lvbl9rZXlbMV0gPSAweDI2OworCQlzdGF0ZS0+c2Vzc2lvbl9rZXlbMl0gPSAweDllOworCX0KKwljcnlwdG9fY2lwaGVyX3NldGtleShzdGF0ZS0+YXJjNCwgc3RhdGUtPnNlc3Npb25fa2V5LCBzdGF0ZS0+a2V5bGVuKTsKK30KKworLyoKKyAqIEFsbG9jYXRlIHNwYWNlIGZvciBhIChkZSljb21wcmVzc29yLgorICovCitzdGF0aWMgdm9pZCAqbXBwZV9hbGxvYyh1bnNpZ25lZCBjaGFyICpvcHRpb25zLCBpbnQgb3B0bGVuKQoreworCXN0cnVjdCBwcHBfbXBwZV9zdGF0ZSAqc3RhdGU7CisJdW5zaWduZWQgaW50IGRpZ2VzdHNpemU7CisKKwlpZiAob3B0bGVuICE9IENJTEVOX01QUEUgKyBzaXplb2Yoc3RhdGUtPm1hc3Rlcl9rZXkpCisJICAgIHx8IG9wdGlvbnNbMF0gIT0gQ0lfTVBQRSB8fCBvcHRpb25zWzFdICE9IENJTEVOX01QUEUpCisJCWdvdG8gb3V0OworCisJc3RhdGUgPSAoc3RydWN0IHBwcF9tcHBlX3N0YXRlICopIGttYWxsb2Moc2l6ZW9mKCpzdGF0ZSksIEdGUF9LRVJORUwpOworCWlmIChzdGF0ZSA9PSBOVUxMKQorCQlnb3RvIG91dDsKKworCW1lbXNldChzdGF0ZSwgMCwgc2l6ZW9mKCpzdGF0ZSkpOworCisJc3RhdGUtPmFyYzQgPSBjcnlwdG9fYWxsb2NfdGZtKCJhcmM0IiwgMCk7CisJaWYgKCFzdGF0ZS0+YXJjNCkKKwkJZ290byBvdXRfZnJlZTsKKworCXN0YXRlLT5zaGExID0gY3J5cHRvX2FsbG9jX3RmbSgic2hhMSIsIDApOworCWlmICghc3RhdGUtPnNoYTEpCisJCWdvdG8gb3V0X2ZyZWU7CisKKwlkaWdlc3RzaXplID0gY3J5cHRvX3RmbV9hbGdfZGlnZXN0c2l6ZShzdGF0ZS0+c2hhMSk7CisJaWYgKGRpZ2VzdHNpemUgPCBNUFBFX01BWF9LRVlfTEVOKQorCQlnb3RvIG91dF9mcmVlOworCisJc3RhdGUtPnNoYTFfZGlnZXN0ID0ga21hbGxvYyhkaWdlc3RzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXN0YXRlLT5zaGExX2RpZ2VzdCkKKwkJZ290byBvdXRfZnJlZTsKKworCS8qIFNhdmUga2V5cy4gKi8KKwltZW1jcHkoc3RhdGUtPm1hc3Rlcl9rZXksICZvcHRpb25zW0NJTEVOX01QUEVdLAorCSAgICAgICBzaXplb2Yoc3RhdGUtPm1hc3Rlcl9rZXkpKTsKKwltZW1jcHkoc3RhdGUtPnNlc3Npb25fa2V5LCBzdGF0ZS0+bWFzdGVyX2tleSwKKwkgICAgICAgc2l6ZW9mKHN0YXRlLT5tYXN0ZXJfa2V5KSk7CisKKwkvKgorCSAqIFdlIGRlZmVyIGluaXRpYWwga2V5IGdlbmVyYXRpb24gdW50aWwgbXBwZV9pbml0KCksIGFzIG1wcGVfYWxsb2MoKQorCSAqIGlzIGNhbGxlZCBmcmVxdWVudGx5IGR1cmluZyBuZWdvdGlhdGlvbi4KKwkgKi8KKworCXJldHVybiAodm9pZCAqKXN0YXRlOworCisJb3V0X2ZyZWU6CisJICAgIGlmIChzdGF0ZS0+c2hhMV9kaWdlc3QpCisJCWtmcmVlKHN0YXRlLT5zaGExX2RpZ2VzdCk7CisJICAgIGlmIChzdGF0ZS0+c2hhMSkKKwkJY3J5cHRvX2ZyZWVfdGZtKHN0YXRlLT5zaGExKTsKKwkgICAgaWYgKHN0YXRlLT5hcmM0KQorCQljcnlwdG9fZnJlZV90Zm0oc3RhdGUtPmFyYzQpOworCSAgICBrZnJlZShzdGF0ZSk7CisJb3V0OgorCXJldHVybiBOVUxMOworfQorCisvKgorICogRGVhbGxvY2F0ZSBzcGFjZSBmb3IgYSAoZGUpY29tcHJlc3Nvci4KKyAqLworc3RhdGljIHZvaWQgbXBwZV9mcmVlKHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgcHBwX21wcGVfc3RhdGUgKnN0YXRlID0gKHN0cnVjdCBwcHBfbXBwZV9zdGF0ZSAqKSBhcmc7CisJaWYgKHN0YXRlKSB7CisJICAgIGlmIChzdGF0ZS0+c2hhMV9kaWdlc3QpCisJCWtmcmVlKHN0YXRlLT5zaGExX2RpZ2VzdCk7CisJICAgIGlmIChzdGF0ZS0+c2hhMSkKKwkJY3J5cHRvX2ZyZWVfdGZtKHN0YXRlLT5zaGExKTsKKwkgICAgaWYgKHN0YXRlLT5hcmM0KQorCQljcnlwdG9fZnJlZV90Zm0oc3RhdGUtPmFyYzQpOworCSAgICBrZnJlZShzdGF0ZSk7CisJfQorfQorCisvKgorICogSW5pdGlhbGl6ZSAoZGUpY29tcHJlc3NvciBzdGF0ZS4KKyAqLworc3RhdGljIGludAorbXBwZV9pbml0KHZvaWQgKmFyZywgdW5zaWduZWQgY2hhciAqb3B0aW9ucywgaW50IG9wdGxlbiwgaW50IHVuaXQsIGludCBkZWJ1ZywKKwkgIGNvbnN0IGNoYXIgKmRlYnVnc3RyKQoreworCXN0cnVjdCBwcHBfbXBwZV9zdGF0ZSAqc3RhdGUgPSAoc3RydWN0IHBwcF9tcHBlX3N0YXRlICopIGFyZzsKKwl1bnNpZ25lZCBjaGFyIG1wcGVfb3B0czsKKworCWlmIChvcHRsZW4gIT0gQ0lMRU5fTVBQRQorCSAgICB8fCBvcHRpb25zWzBdICE9IENJX01QUEUgfHwgb3B0aW9uc1sxXSAhPSBDSUxFTl9NUFBFKQorCQlyZXR1cm4gMDsKKworCU1QUEVfQ0lfVE9fT1BUUygmb3B0aW9uc1syXSwgbXBwZV9vcHRzKTsKKwlpZiAobXBwZV9vcHRzICYgTVBQRV9PUFRfMTI4KQorCQlzdGF0ZS0+a2V5bGVuID0gMTY7CisJZWxzZSBpZiAobXBwZV9vcHRzICYgTVBQRV9PUFRfNDApCisJCXN0YXRlLT5rZXlsZW4gPSA4OworCWVsc2UgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlc1slZF06IHVua25vd24ga2V5IGxlbmd0aFxuIiwgZGVidWdzdHIsCisJCSAgICAgICB1bml0KTsKKwkJcmV0dXJuIDA7CisJfQorCWlmIChtcHBlX29wdHMgJiBNUFBFX09QVF9TVEFURUZVTCkKKwkJc3RhdGUtPnN0YXRlZnVsID0gMTsKKworCS8qIEdlbmVyYXRlIHRoZSBpbml0aWFsIHNlc3Npb24ga2V5LiAqLworCW1wcGVfcmVrZXkoc3RhdGUsIDEpOworCisJaWYgKGRlYnVnKSB7CisJCWludCBpOworCQljaGFyIG1rZXlbc2l6ZW9mKHN0YXRlLT5tYXN0ZXJfa2V5KSAqIDIgKyAxXTsKKwkJY2hhciBza2V5W3NpemVvZihzdGF0ZS0+c2Vzc2lvbl9rZXkpICogMiArIDFdOworCisJCXByaW50ayhLRVJOX0RFQlVHICIlc1slZF06IGluaXRpYWxpemVkIHdpdGggJWQtYml0ICVzIG1vZGVcbiIsCisJCSAgICAgICBkZWJ1Z3N0ciwgdW5pdCwgKHN0YXRlLT5rZXlsZW4gPT0gMTYpID8gMTI4IDogNDAsCisJCSAgICAgICAoc3RhdGUtPnN0YXRlZnVsKSA/ICJzdGF0ZWZ1bCIgOiAic3RhdGVsZXNzIik7CisKKwkJZm9yIChpID0gMDsgaSA8IHNpemVvZihzdGF0ZS0+bWFzdGVyX2tleSk7IGkrKykKKwkJCXNwcmludGYobWtleSArIGkgKiAyLCAiJTAyeCIsIHN0YXRlLT5tYXN0ZXJfa2V5W2ldKTsKKwkJZm9yIChpID0gMDsgaSA8IHNpemVvZihzdGF0ZS0+c2Vzc2lvbl9rZXkpOyBpKyspCisJCQlzcHJpbnRmKHNrZXkgKyBpICogMiwgIiUwMngiLCBzdGF0ZS0+c2Vzc2lvbl9rZXlbaV0pOworCQlwcmludGsoS0VSTl9ERUJVRworCQkgICAgICAgIiVzWyVkXToga2V5czogbWFzdGVyOiAlcyBpbml0aWFsIHNlc3Npb246ICVzXG4iLAorCQkgICAgICAgZGVidWdzdHIsIHVuaXQsIG1rZXksIHNrZXkpOworCX0KKworCS8qCisJICogSW5pdGlhbGl6ZSB0aGUgY29oZXJlbmN5IGNvdW50LiAgVGhlIGluaXRpYWwgdmFsdWUgaXMgbm90IHNwZWNpZmllZAorCSAqIGluIFJGQyAzMDc4LCBidXQgd2UgY2FuIG1ha2UgYSByZWFzb25hYmxlIGFzc3VtcHRpb24gdGhhdCBpdCB3aWxsCisJICogc3RhcnQgYXQgMC4gIFNldHRpbmcgaXQgdG8gdGhlIG1heCBoZXJlIG1ha2VzIHRoZSBjb21wL2RlY29tcCBjb2RlCisJICogZG8gdGhlIHJpZ2h0IHRoaW5nIChkZXRlcm1pbmVkIHRocm91Z2ggZXhwZXJpbWVudCkuCisJICovCisJc3RhdGUtPmNjb3VudCA9IE1QUEVfQ0NPVU5UX1NQQUNFIC0gMTsKKworCS8qCisJICogTm90ZSB0aGF0IGV2ZW4gdGhvdWdoIHdlIGhhdmUgaW5pdGlhbGl6ZWQgdGhlIGtleSB0YWJsZSwgd2UgZG9uJ3QKKwkgKiBzZXQgdGhlIEZMVVNIRUQgYml0LiAgVGhpcyBpcyBjb250cmFyeSB0byBSRkMgMzA3OCwgc2VjLiAzLjEuCisJICovCisJc3RhdGUtPmJpdHMgPSBNUFBFX0JJVF9FTkNSWVBURUQ7CisKKwlzdGF0ZS0+dW5pdCA9IHVuaXQ7CisJc3RhdGUtPmRlYnVnID0gZGVidWc7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludAorbXBwZV9jb21wX2luaXQodm9pZCAqYXJnLCB1bnNpZ25lZCBjaGFyICpvcHRpb25zLCBpbnQgb3B0bGVuLCBpbnQgdW5pdCwKKwkgICAgICAgaW50IGhkcmxlbiwgaW50IGRlYnVnKQoreworCS8qIEFSR1NVU0VEICovCisJcmV0dXJuIG1wcGVfaW5pdChhcmcsIG9wdGlvbnMsIG9wdGxlbiwgdW5pdCwgZGVidWcsICJtcHBlX2NvbXBfaW5pdCIpOworfQorCisvKgorICogV2UgcmVjZWl2ZWQgYSBDQ1AgUmVzZXQtUmVxdWVzdCAoYWN0dWFsbHksIHdlIGFyZSBzZW5kaW5nIGEgUmVzZXQtQWNrKSwKKyAqIHRlbGwgdGhlIGNvbXByZXNzb3IgdG8gcmVrZXkuICBOb3RlIHRoYXQgd2UgTVVTVCBOT1QgcmVrZXkgZm9yCisgKiBldmVyeSBDQ1AgUmVzZXQtUmVxdWVzdDsgd2Ugb25seSByZWtleSBvbiB0aGUgbmV4dCB4bWl0IHBhY2tldC4KKyAqIFdlIG1pZ2h0IGdldCBtdWx0aXBsZSBDQ1AgUmVzZXQtUmVxdWVzdHMgaWYgb3VyIENDUCBSZXNldC1BY2sgaXMgbG9zdC4KKyAqIFNvLCByZWtleWluZyBmb3IgZXZlcnkgQ0NQIFJlc2V0LVJlcXVlc3QgaXMgYnJva2VuIGFzIHRoZSBwZWVyIHdpbGwgbm90CisgKiBrbm93IGhvdyBtYW55IHRpbWVzIHdlJ3ZlIHJla2V5ZWQuICAoSWYgd2UgcmVrZXkgYW5kIFRIRU4gZ2V0IGFub3RoZXIKKyAqIENDUCBSZXNldC1SZXF1ZXN0LCB3ZSBtdXN0IHJla2V5IGFnYWluLikKKyAqLworc3RhdGljIHZvaWQgbXBwZV9jb21wX3Jlc2V0KHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgcHBwX21wcGVfc3RhdGUgKnN0YXRlID0gKHN0cnVjdCBwcHBfbXBwZV9zdGF0ZSAqKSBhcmc7CisKKwlzdGF0ZS0+Yml0cyB8PSBNUFBFX0JJVF9GTFVTSEVEOworfQorCisvKgorICogQ29tcHJlc3MgKGVuY3J5cHQpIGEgcGFja2V0LgorICogSXQncyBzdHJhbmdlIHRvIGNhbGwgdGhpcyBhIGNvbXByZXNzb3IsIHNpbmNlIHRoZSBvdXRwdXQgaXMgYWx3YXlzCisgKiBNUFBFX09WSEQgKyAyIGJ5dGVzIGxhcmdlciB0aGFuIHRoZSBpbnB1dC4KKyAqLworc3RhdGljIGludAorbXBwZV9jb21wcmVzcyh2b2lkICphcmcsIHVuc2lnbmVkIGNoYXIgKmlidWYsIHVuc2lnbmVkIGNoYXIgKm9idWYsCisJICAgICAgaW50IGlzaXplLCBpbnQgb3NpemUpCit7CisJc3RydWN0IHBwcF9tcHBlX3N0YXRlICpzdGF0ZSA9IChzdHJ1Y3QgcHBwX21wcGVfc3RhdGUgKikgYXJnOworCWludCBwcm90bzsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dfaW5bMV0sIHNnX291dFsxXTsKKworCS8qCisJICogQ2hlY2sgdGhhdCB0aGUgcHJvdG9jb2wgaXMgaW4gdGhlIHJhbmdlIHdlIGhhbmRsZS4KKwkgKi8KKwlwcm90byA9IFBQUF9QUk9UT0NPTChpYnVmKTsKKwlpZiAocHJvdG8gPCAweDAwMjEgfHwgcHJvdG8gPiAweDAwZmEpCisJCXJldHVybiAwOworCisJLyogTWFrZSBzdXJlIHdlIGhhdmUgZW5vdWdoIHJvb20gdG8gZ2VuZXJhdGUgYW4gZW5jcnlwdGVkIHBhY2tldC4gKi8KKwlpZiAob3NpemUgPCBpc2l6ZSArIE1QUEVfT1ZIRCArIDIpIHsKKwkJLyogRHJvcCB0aGUgcGFja2V0IGlmIHdlIHNob3VsZCBlbmNyeXB0IGl0LCBidXQgY2FuJ3QuICovCisJCXByaW50ayhLRVJOX0RFQlVHICJtcHBlX2NvbXByZXNzWyVkXTogb3NpemUgdG9vIHNtYWxsISAiCisJCSAgICAgICAiKGhhdmU6ICVkIG5lZWQ6ICVkKVxuIiwgc3RhdGUtPnVuaXQsCisJCSAgICAgICBvc2l6ZSwgb3NpemUgKyBNUFBFX09WSEQgKyAyKTsKKwkJcmV0dXJuIC0xOworCX0KKworCW9zaXplID0gaXNpemUgKyBNUFBFX09WSEQgKyAyOworCisJLyoKKwkgKiBDb3B5IG92ZXIgdGhlIFBQUCBoZWFkZXIgYW5kIHNldCBjb250cm9sIGJpdHMuCisJICovCisJb2J1ZlswXSA9IFBQUF9BRERSRVNTKGlidWYpOworCW9idWZbMV0gPSBQUFBfQ09OVFJPTChpYnVmKTsKKwlvYnVmWzJdID0gUFBQX0NPTVAgPj4gODsJLyogaXNpemUgKyBNUFBFX09WSEQgKyAxICovCisJb2J1ZlszXSA9IFBQUF9DT01QOwkvKiBpc2l6ZSArIE1QUEVfT1ZIRCArIDIgKi8KKwlvYnVmICs9IFBQUF9IRFJMRU47CisKKwlzdGF0ZS0+Y2NvdW50ID0gKHN0YXRlLT5jY291bnQgKyAxKSAlIE1QUEVfQ0NPVU5UX1NQQUNFOworCWlmIChzdGF0ZS0+ZGVidWcgPj0gNykKKwkJcHJpbnRrKEtFUk5fREVCVUcgIm1wcGVfY29tcHJlc3NbJWRdOiBjY291bnQgJWRcbiIsIHN0YXRlLT51bml0LAorCQkgICAgICAgc3RhdGUtPmNjb3VudCk7CisJb2J1ZlswXSA9IHN0YXRlLT5jY291bnQgPj4gODsKKwlvYnVmWzFdID0gc3RhdGUtPmNjb3VudCAmIDB4ZmY7CisKKwlpZiAoIXN0YXRlLT5zdGF0ZWZ1bCB8fAkvKiBzdGF0ZWxlc3MgbW9kZSAgICAgKi8KKwkgICAgKChzdGF0ZS0+Y2NvdW50ICYgMHhmZikgPT0gMHhmZikgfHwJLyogImZsYWciIHBhY2tldCAgICAgICovCisJICAgIChzdGF0ZS0+Yml0cyAmIE1QUEVfQklUX0ZMVVNIRUQpKSB7CS8qIENDUCBSZXNldC1SZXF1ZXN0ICAqLworCQkvKiBXZSBtdXN0IHJla2V5ICovCisJCWlmIChzdGF0ZS0+ZGVidWcgJiYgc3RhdGUtPnN0YXRlZnVsKQorCQkJcHJpbnRrKEtFUk5fREVCVUcgIm1wcGVfY29tcHJlc3NbJWRdOiByZWtleWluZ1xuIiwKKwkJCSAgICAgICBzdGF0ZS0+dW5pdCk7CisJCW1wcGVfcmVrZXkoc3RhdGUsIDApOworCQlzdGF0ZS0+Yml0cyB8PSBNUFBFX0JJVF9GTFVTSEVEOworCX0KKwlvYnVmWzBdIHw9IHN0YXRlLT5iaXRzOworCXN0YXRlLT5iaXRzICY9IH5NUFBFX0JJVF9GTFVTSEVEOwkvKiByZXNldCBmb3IgbmV4dCB4bWl0ICovCisKKwlvYnVmICs9IE1QUEVfT1ZIRDsKKwlpYnVmICs9IDI7CQkvKiBza2lwIHRvIHByb3RvIGZpZWxkICovCisJaXNpemUgLT0gMjsKKworCS8qIEVuY3J5cHQgcGFja2V0ICovCisJc2V0dXBfc2coc2dfaW4sIGlidWYsIGlzaXplKTsKKwlzZXR1cF9zZyhzZ19vdXQsIG9idWYsIG9zaXplKTsKKwlpZiAoY3J5cHRvX2NpcGhlcl9lbmNyeXB0KHN0YXRlLT5hcmM0LCBzZ19vdXQsIHNnX2luLCBpc2l6ZSkgIT0gMCkgeworCQlwcmludGsoS0VSTl9ERUJVRyAiY3J5cHRvX2N5cGhlcl9lbmNyeXB0IGZhaWxlZFxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlzdGF0ZS0+c3RhdHMudW5jX2J5dGVzICs9IGlzaXplOworCXN0YXRlLT5zdGF0cy51bmNfcGFja2V0cysrOworCXN0YXRlLT5zdGF0cy5jb21wX2J5dGVzICs9IG9zaXplOworCXN0YXRlLT5zdGF0cy5jb21wX3BhY2tldHMrKzsKKworCXJldHVybiBvc2l6ZTsKK30KKworLyoKKyAqIFNpbmNlIGV2ZXJ5IGZyYW1lIGdyb3dzIGJ5IE1QUEVfT1ZIRCArIDIgYnl0ZXMsIHRoaXMgaXMgYWx3YXlzIGdvaW5nCisgKiB0byBsb29rIGJhZCAuLi4gYW5kIHRoZSBsb25nZXIgdGhlIGxpbmsgaXMgdXAgdGhlIHdvcnNlIGl0IHdpbGwgZ2V0LgorICovCitzdGF0aWMgdm9pZCBtcHBlX2NvbXBfc3RhdHModm9pZCAqYXJnLCBzdHJ1Y3QgY29tcHN0YXQgKnN0YXRzKQoreworCXN0cnVjdCBwcHBfbXBwZV9zdGF0ZSAqc3RhdGUgPSAoc3RydWN0IHBwcF9tcHBlX3N0YXRlICopIGFyZzsKKworCSpzdGF0cyA9IHN0YXRlLT5zdGF0czsKK30KKworc3RhdGljIGludAorbXBwZV9kZWNvbXBfaW5pdCh2b2lkICphcmcsIHVuc2lnbmVkIGNoYXIgKm9wdGlvbnMsIGludCBvcHRsZW4sIGludCB1bml0LAorCQkgaW50IGhkcmxlbiwgaW50IG1ydSwgaW50IGRlYnVnKQoreworCS8qIEFSR1NVU0VEICovCisJcmV0dXJuIG1wcGVfaW5pdChhcmcsIG9wdGlvbnMsIG9wdGxlbiwgdW5pdCwgZGVidWcsICJtcHBlX2RlY29tcF9pbml0Iik7Cit9CisKKy8qCisgKiBXZSByZWNlaXZlZCBhIENDUCBSZXNldC1BY2suICBKdXN0IGlnbm9yZSBpdC4KKyAqLworc3RhdGljIHZvaWQgbXBwZV9kZWNvbXBfcmVzZXQodm9pZCAqYXJnKQoreworCS8qIEFSR1NVU0VEICovCisJcmV0dXJuOworfQorCisvKgorICogRGVjb21wcmVzcyAoZGVjcnlwdCkgYW4gTVBQRSBwYWNrZXQuCisgKi8KK3N0YXRpYyBpbnQKK21wcGVfZGVjb21wcmVzcyh2b2lkICphcmcsIHVuc2lnbmVkIGNoYXIgKmlidWYsIGludCBpc2l6ZSwgdW5zaWduZWQgY2hhciAqb2J1ZiwKKwkJaW50IG9zaXplKQoreworCXN0cnVjdCBwcHBfbXBwZV9zdGF0ZSAqc3RhdGUgPSAoc3RydWN0IHBwcF9tcHBlX3N0YXRlICopIGFyZzsKKwl1bnNpZ25lZCBjY291bnQ7CisJaW50IGZsdXNoZWQgPSBNUFBFX0JJVFMoaWJ1ZikgJiBNUFBFX0JJVF9GTFVTSEVEOworCWludCBzYW5pdHkgPSAwOworCXN0cnVjdCBzY2F0dGVybGlzdCBzZ19pblsxXSwgc2dfb3V0WzFdOworCisJaWYgKGlzaXplIDw9IFBQUF9IRFJMRU4gKyBNUFBFX09WSEQpIHsKKwkJaWYgKHN0YXRlLT5kZWJ1ZykKKwkJCXByaW50ayhLRVJOX0RFQlVHCisJCQkgICAgICAgIm1wcGVfZGVjb21wcmVzc1slZF06IHNob3J0IHBrdCAoJWQpXG4iLAorCQkJICAgICAgIHN0YXRlLT51bml0LCBpc2l6ZSk7CisJCXJldHVybiBERUNPTVBfRVJST1I7CisJfQorCisJLyoKKwkgKiBNYWtlIHN1cmUgd2UgaGF2ZSBlbm91Z2ggcm9vbSB0byBkZWNyeXB0IHRoZSBwYWNrZXQuCisJICogTm90ZSB0aGF0IGZvciBvdXIgdGVzdCB3ZSBvbmx5IHN1YnRyYWN0IDEgYnl0ZSB3aGVyZWFzIGluCisJICogbXBwZV9jb21wcmVzcygpIHdlIGFkZGVkIDIgYnl0ZXMgKCtNUFBFX09WSEQpOworCSAqIHRoaXMgaXMgdG8gYWNjb3VudCBmb3IgcG9zc2libGUgUEZDLgorCSAqLworCWlmIChvc2l6ZSA8IGlzaXplIC0gTVBQRV9PVkhEIC0gMSkgeworCQlwcmludGsoS0VSTl9ERUJVRyAibXBwZV9kZWNvbXByZXNzWyVkXTogb3NpemUgdG9vIHNtYWxsISAiCisJCSAgICAgICAiKGhhdmU6ICVkIG5lZWQ6ICVkKVxuIiwgc3RhdGUtPnVuaXQsCisJCSAgICAgICBvc2l6ZSwgaXNpemUgLSBNUFBFX09WSEQgLSAxKTsKKwkJcmV0dXJuIERFQ09NUF9FUlJPUjsKKwl9CisJb3NpemUgPSBpc2l6ZSAtIE1QUEVfT1ZIRCAtIDI7CS8qIGFzc3VtZSBubyBQRkMgKi8KKworCWNjb3VudCA9IE1QUEVfQ0NPVU5UKGlidWYpOworCWlmIChzdGF0ZS0+ZGVidWcgPj0gNykKKwkJcHJpbnRrKEtFUk5fREVCVUcgIm1wcGVfZGVjb21wcmVzc1slZF06IGNjb3VudCAlZFxuIiwKKwkJICAgICAgIHN0YXRlLT51bml0LCBjY291bnQpOworCisJLyogc2FuaXR5IGNoZWNrcyAtLSB0ZXJtaW5hdGUgd2l0aCBleHRyZW1lIHByZWp1ZGljZSAqLworCWlmICghKE1QUEVfQklUUyhpYnVmKSAmIE1QUEVfQklUX0VOQ1JZUFRFRCkpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcKKwkJICAgICAgICJtcHBlX2RlY29tcHJlc3NbJWRdOiBFTkNSWVBURUQgYml0IG5vdCBzZXQhXG4iLAorCQkgICAgICAgc3RhdGUtPnVuaXQpOworCQlzdGF0ZS0+c2FuaXR5X2Vycm9ycyArPSAxMDA7CisJCXNhbml0eSA9IDE7CisJfQorCWlmICghc3RhdGUtPnN0YXRlZnVsICYmICFmbHVzaGVkKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJtcHBlX2RlY29tcHJlc3NbJWRdOiBGTFVTSEVEIGJpdCBub3Qgc2V0IGluICIKKwkJICAgICAgICJzdGF0ZWxlc3MgbW9kZSFcbiIsIHN0YXRlLT51bml0KTsKKwkJc3RhdGUtPnNhbml0eV9lcnJvcnMgKz0gMTAwOworCQlzYW5pdHkgPSAxOworCX0KKwlpZiAoc3RhdGUtPnN0YXRlZnVsICYmICgoY2NvdW50ICYgMHhmZikgPT0gMHhmZikgJiYgIWZsdXNoZWQpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIm1wcGVfZGVjb21wcmVzc1slZF06IEZMVVNIRUQgYml0IG5vdCBzZXQgb24gIgorCQkgICAgICAgImZsYWcgcGFja2V0IVxuIiwgc3RhdGUtPnVuaXQpOworCQlzdGF0ZS0+c2FuaXR5X2Vycm9ycyArPSAxMDA7CisJCXNhbml0eSA9IDE7CisJfQorCisJaWYgKHNhbml0eSkgeworCQlpZiAoc3RhdGUtPnNhbml0eV9lcnJvcnMgPCBTQU5JVFlfTUFYKQorCQkJcmV0dXJuIERFQ09NUF9FUlJPUjsKKwkJZWxzZQorCQkJLyoKKwkJCSAqIFRha2UgTENQIGRvd24gaWYgdGhlIHBlZXIgaXMgc2VuZGluZyB0b28gbWFueSBib2dvbnMuCisJCQkgKiBXZSBkb24ndCB3YW50IHRvIGRvIHRoaXMgZm9yIGEgc2luZ2xlIG9yIGp1c3QgYSBmZXcKKwkJCSAqIGluc3RhbmNlcyBzaW5jZSBpdCBjb3VsZCBqdXN0IGJlIGR1ZSB0byBwYWNrZXQgY29ycnVwdGlvbi4KKwkJCSAqLworCQkJcmV0dXJuIERFQ09NUF9GQVRBTEVSUk9SOworCX0KKworCS8qCisJICogQ2hlY2sgdGhlIGNvaGVyZW5jeSBjb3VudC4KKwkgKi8KKworCWlmICghc3RhdGUtPnN0YXRlZnVsKSB7CisJCS8qIFJGQyAzMDc4LCBzZWMgOC4xLiAgUmVrZXkgZm9yIGV2ZXJ5IHBhY2tldC4gKi8KKwkJd2hpbGUgKHN0YXRlLT5jY291bnQgIT0gY2NvdW50KSB7CisJCQltcHBlX3Jla2V5KHN0YXRlLCAwKTsKKwkJCXN0YXRlLT5jY291bnQgPSAoc3RhdGUtPmNjb3VudCArIDEpICUgTVBQRV9DQ09VTlRfU1BBQ0U7CisJCX0KKwl9IGVsc2UgeworCQkvKiBSRkMgMzA3OCwgc2VjIDguMi4gKi8KKwkJaWYgKCFzdGF0ZS0+ZGlzY2FyZCkgeworCQkJLyogbm9ybWFsIHN0YXRlICovCisJCQlzdGF0ZS0+Y2NvdW50ID0gKHN0YXRlLT5jY291bnQgKyAxKSAlIE1QUEVfQ0NPVU5UX1NQQUNFOworCQkJaWYgKGNjb3VudCAhPSBzdGF0ZS0+Y2NvdW50KSB7CisJCQkJLyoKKwkJCQkgKiAoY2NvdW50ID4gc3RhdGUtPmNjb3VudCkKKwkJCQkgKiBQYWNrZXQgbG9zcyBkZXRlY3RlZCwgZW50ZXIgdGhlIGRpc2NhcmQgc3RhdGUuCisJCQkJICogU2lnbmFsIHRoZSBwZWVyIHRvIHJla2V5IChieSBzZW5kaW5nIGEgQ0NQIFJlc2V0LVJlcXVlc3QpLgorCQkJCSAqLworCQkJCXN0YXRlLT5kaXNjYXJkID0gMTsKKwkJCQlyZXR1cm4gREVDT01QX0VSUk9SOworCQkJfQorCQl9IGVsc2UgeworCQkJLyogZGlzY2FyZCBzdGF0ZSAqLworCQkJaWYgKCFmbHVzaGVkKSB7CisJCQkJLyogY2NwLmMgd2lsbCBiZSBzaWxlbnQgKG5vIGFkZGl0aW9uYWwgQ0NQIFJlc2V0LVJlcXVlc3RzKS4gKi8KKwkJCQlyZXR1cm4gREVDT01QX0VSUk9SOworCQkJfSBlbHNlIHsKKwkJCQkvKiBSZWtleSBmb3IgZXZlcnkgbWlzc2VkICJmbGFnIiBwYWNrZXQuICovCisJCQkJd2hpbGUgKChjY291bnQgJiB+MHhmZikgIT0KKwkJCQkgICAgICAgKHN0YXRlLT5jY291bnQgJiB+MHhmZikpIHsKKwkJCQkJbXBwZV9yZWtleShzdGF0ZSwgMCk7CisJCQkJCXN0YXRlLT5jY291bnQgPQorCQkJCQkgICAgKHN0YXRlLT5jY291bnQgKworCQkJCQkgICAgIDI1NikgJSBNUFBFX0NDT1VOVF9TUEFDRTsKKwkJCQl9CisKKwkJCQkvKiByZXNldCAqLworCQkJCXN0YXRlLT5kaXNjYXJkID0gMDsKKwkJCQlzdGF0ZS0+Y2NvdW50ID0gY2NvdW50OworCQkJCS8qCisJCQkJICogQW5vdGhlciBwcm9ibGVtIHdpdGggUkZDIDMwNzggaGVyZS4gIEl0IGltcGxpZXMgdGhhdCB0aGUKKwkJCQkgKiBwZWVyIG5lZWQgbm90IHNlbmQgYSBSZXNldC1BY2sgcGFja2V0LiAgQnV0IFJGQyAxOTYyCisJCQkJICogcmVxdWlyZXMgaXQuICBIb3BlZnVsbHksIE0kIGRvZXMgc2VuZCBhIFJlc2V0LUFjazsgZXZlbgorCQkJCSAqIHRob3VnaCBpdCBpc24ndCByZXF1aXJlZCBmb3IgTVBQRSBzeW5jaHJvbml6YXRpb24sIGl0IGlzCisJCQkJICogcmVxdWlyZWQgdG8gcmVzZXQgQ0NQIHN0YXRlLgorCQkJCSAqLworCQkJfQorCQl9CisJCWlmIChmbHVzaGVkKQorCQkJbXBwZV9yZWtleShzdGF0ZSwgMCk7CisJfQorCisJLyoKKwkgKiBGaWxsIGluIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBQUFAgaGVhZGVyLiAgVGhlIHByb3RvY29sIGZpZWxkCisJICogY29tZXMgZnJvbSB0aGUgZGVjcnlwdGVkIGRhdGEuCisJICovCisJb2J1ZlswXSA9IFBQUF9BRERSRVNTKGlidWYpOwkvKiArMSAqLworCW9idWZbMV0gPSBQUFBfQ09OVFJPTChpYnVmKTsJLyogKzEgKi8KKwlvYnVmICs9IDI7CisJaWJ1ZiArPSBQUFBfSERSTEVOICsgTVBQRV9PVkhEOworCWlzaXplIC09IFBQUF9IRFJMRU4gKyBNUFBFX09WSEQ7CS8qIC02ICovCisJLyogbmV0IG9zaXplOiBpc2l6ZS00ICovCisKKwkvKgorCSAqIERlY3J5cHQgdGhlIGZpcnN0IGJ5dGUgaW4gb3JkZXIgdG8gY2hlY2sgaWYgaXQgaXMKKwkgKiBhIGNvbXByZXNzZWQgb3IgdW5jb21wcmVzc2VkIHByb3RvY29sIGZpZWxkLgorCSAqLworCXNldHVwX3NnKHNnX2luLCBpYnVmLCAxKTsKKwlzZXR1cF9zZyhzZ19vdXQsIG9idWYsIDEpOworCWlmIChjcnlwdG9fY2lwaGVyX2RlY3J5cHQoc3RhdGUtPmFyYzQsIHNnX291dCwgc2dfaW4sIDEpICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgImNyeXB0b19jeXBoZXJfZGVjcnlwdCBmYWlsZWRcbiIpOworCQlyZXR1cm4gREVDT01QX0VSUk9SOworCX0KKworCS8qCisJICogRG8gUEZDIGRlY29tcHJlc3Npb24uCisJICogVGhpcyB3b3VsZCBiZSBuaWNlciBpZiB3ZSB3ZXJlIGdpdmVuIHRoZSBhY3R1YWwgc2tfYnVmZgorCSAqIGluc3RlYWQgb2YgYSBjaGFyICouCisJICovCisJaWYgKChvYnVmWzBdICYgMHgwMSkgIT0gMCkgeworCQlvYnVmWzFdID0gb2J1ZlswXTsKKwkJb2J1ZlswXSA9IDA7CisJCW9idWYrKzsKKwkJb3NpemUrKzsKKwl9CisKKwkvKiBBbmQgZmluYWxseSwgZGVjcnlwdCB0aGUgcmVzdCBvZiB0aGUgcGFja2V0LiAqLworCXNldHVwX3NnKHNnX2luLCBpYnVmICsgMSwgaXNpemUgLSAxKTsKKwlzZXR1cF9zZyhzZ19vdXQsIG9idWYgKyAxLCBvc2l6ZSAtIDEpOworCWlmIChjcnlwdG9fY2lwaGVyX2RlY3J5cHQoc3RhdGUtPmFyYzQsIHNnX291dCwgc2dfaW4sIGlzaXplIC0gMSkgIT0gMCkgeworCQlwcmludGsoS0VSTl9ERUJVRyAiY3J5cHRvX2N5cGhlcl9kZWNyeXB0IGZhaWxlZFxuIik7CisJCXJldHVybiBERUNPTVBfRVJST1I7CisJfQorCisJc3RhdGUtPnN0YXRzLnVuY19ieXRlcyArPSBvc2l6ZTsKKwlzdGF0ZS0+c3RhdHMudW5jX3BhY2tldHMrKzsKKwlzdGF0ZS0+c3RhdHMuY29tcF9ieXRlcyArPSBpc2l6ZTsKKwlzdGF0ZS0+c3RhdHMuY29tcF9wYWNrZXRzKys7CisKKwkvKiBnb29kIHBhY2tldCBjcmVkaXQgKi8KKwlzdGF0ZS0+c2FuaXR5X2Vycm9ycyA+Pj0gMTsKKworCXJldHVybiBvc2l6ZTsKK30KKworLyoKKyAqIEluY29tcHJlc3NpYmxlIGRhdGEgaGFzIGFycml2ZWQgKHRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiEpLgorICogV2Ugc2hvdWxkIHByb2JhYmx5IGRyb3AgdGhlIGxpbmsgaWYgdGhlIHByb3RvY29sIGlzIGluIHRoZSByYW5nZQorICogb2Ygd2hhdCBzaG91bGQgYmUgZW5jcnlwdGVkLiAgQXQgdGhlIGxlYXN0LCB3ZSBzaG91bGQgZHJvcCB0aGlzCisgKiBwYWNrZXQuICAoSG93IHRvIGRvIHRoaXM/KQorICovCitzdGF0aWMgdm9pZCBtcHBlX2luY29tcCh2b2lkICphcmcsIHVuc2lnbmVkIGNoYXIgKmlidWYsIGludCBpY250KQoreworCXN0cnVjdCBwcHBfbXBwZV9zdGF0ZSAqc3RhdGUgPSAoc3RydWN0IHBwcF9tcHBlX3N0YXRlICopIGFyZzsKKworCWlmIChzdGF0ZS0+ZGVidWcgJiYKKwkgICAgKFBQUF9QUk9UT0NPTChpYnVmKSA+PSAweDAwMjEgJiYgUFBQX1BST1RPQ09MKGlidWYpIDw9IDB4MDBmYSkpCisJCXByaW50ayhLRVJOX0RFQlVHCisJCSAgICAgICAibXBwZV9pbmNvbXBbJWRdOiBpbmNvbXByZXNzaWJsZSAodW5lbmNyeXB0ZWQpIGRhdGEhICIKKwkJICAgICAgICIocHJvdG8gJTA0eClcbiIsIHN0YXRlLT51bml0LCBQUFBfUFJPVE9DT0woaWJ1ZikpOworCisJc3RhdGUtPnN0YXRzLmluY19ieXRlcyArPSBpY250OworCXN0YXRlLT5zdGF0cy5pbmNfcGFja2V0cysrOworCXN0YXRlLT5zdGF0cy51bmNfYnl0ZXMgKz0gaWNudDsKKwlzdGF0ZS0+c3RhdHMudW5jX3BhY2tldHMrKzsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE1vZHVsZSBpbnRlcmZhY2UgdGFibGUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogUHJvY2VkdXJlcyBleHBvcnRlZCB0byBpZl9wcHAuYy4KKyAqLworc3RhdGljIHN0cnVjdCBjb21wcmVzc29yIHBwcF9tcHBlID0geworCS5jb21wcmVzc19wcm90byA9IENJX01QUEUsCisJLmNvbXBfYWxsb2MgICAgID0gbXBwZV9hbGxvYywKKwkuY29tcF9mcmVlICAgICAgPSBtcHBlX2ZyZWUsCisJLmNvbXBfaW5pdCAgICAgID0gbXBwZV9jb21wX2luaXQsCisJLmNvbXBfcmVzZXQgICAgID0gbXBwZV9jb21wX3Jlc2V0LAorCS5jb21wcmVzcyAgICAgICA9IG1wcGVfY29tcHJlc3MsCisJLmNvbXBfc3RhdCAgICAgID0gbXBwZV9jb21wX3N0YXRzLAorCS5kZWNvbXBfYWxsb2MgICA9IG1wcGVfYWxsb2MsCisJLmRlY29tcF9mcmVlICAgID0gbXBwZV9mcmVlLAorCS5kZWNvbXBfaW5pdCAgICA9IG1wcGVfZGVjb21wX2luaXQsCisJLmRlY29tcF9yZXNldCAgID0gbXBwZV9kZWNvbXBfcmVzZXQsCisJLmRlY29tcHJlc3MgICAgID0gbXBwZV9kZWNvbXByZXNzLAorCS5pbmNvbXAgICAgICAgICA9IG1wcGVfaW5jb21wLAorCS5kZWNvbXBfc3RhdCAgICA9IG1wcGVfY29tcF9zdGF0cywKKwkub3duZXIgICAgICAgICAgPSBUSElTX01PRFVMRSwKKwkuY29tcF9leHRyYSAgICAgPSBNUFBFX1BBRCwKK307CisKKy8qCisgKiBwcHBfbXBwZV9pbml0KCkKKyAqCisgKiBQcmlvciB0byBhbGxvd2luZyBsb2FkLCB0cnkgdG8gbG9hZCB0aGUgYXJjNCBhbmQgc2hhMSBjcnlwdG8KKyAqIGxpYnJhcmllcy4gIFRoZSBhY3R1YWwgdXNlIHdpbGwgYmUgYWxsb2NhdGVkIGxhdGVyLCBidXQKKyAqIHRoaXMgd2F5IHRoZSBtb2R1bGUgd2lsbCBmYWlsIHRvIGluc21vZCBpZiB0aGV5IGFyZW4ndCBhdmFpbGFibGUuCisgKi8KKworc3RhdGljIGludCBfX2luaXQgcHBwX21wcGVfaW5pdCh2b2lkKQoreworCWludCBhbnN3ZXI7CisJaWYgKCEoY3J5cHRvX2FsZ19hdmFpbGFibGUoImFyYzQiLCAwKSAmJgorCSAgICAgIGNyeXB0b19hbGdfYXZhaWxhYmxlKCJzaGExIiwgMCkpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXNoYV9wYWQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2hhX3BhZCksIEdGUF9LRVJORUwpOworCWlmICghc2hhX3BhZCkKKwkJcmV0dXJuIC1FTk9NRU07CisJc2hhX3BhZF9pbml0KHNoYV9wYWQpOworCisJYW5zd2VyID0gcHBwX3JlZ2lzdGVyX2NvbXByZXNzb3IoJnBwcF9tcHBlKTsKKworCWlmIChhbnN3ZXIgPT0gMCkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiUFBQIE1QUEUgQ29tcHJlc3Npb24gbW9kdWxlIHJlZ2lzdGVyZWRcbiIpOworCWVsc2UKKwkJa2ZyZWUoc2hhX3BhZCk7CisKKwlyZXR1cm4gYW5zd2VyOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgcHBwX21wcGVfY2xlYW51cCh2b2lkKQoreworCXBwcF91bnJlZ2lzdGVyX2NvbXByZXNzb3IoJnBwcF9tcHBlKTsKKwlrZnJlZShzaGFfcGFkKTsKK30KKworbW9kdWxlX2luaXQocHBwX21wcGVfaW5pdCk7Cittb2R1bGVfZXhpdChwcHBfbXBwZV9jbGVhbnVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcF9tcHBlLmggYi9kcml2ZXJzL25ldC9wcHBfbXBwZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhMTRlMDUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9wcHBfbXBwZS5oCkBAIC0wLDAgKzEsODYgQEAKKyNkZWZpbmUgTVBQRV9QQUQgICAgICAgICAgICAgICAgNCAgICAgIC8qIE1QUEUgZ3Jvd3RoIHBlciBmcmFtZSAqLworI2RlZmluZSBNUFBFX01BWF9LRVlfTEVOICAgICAgIDE2ICAgICAgLyogbGFyZ2VzdCBrZXkgbGVuZ3RoICgxMjgtYml0KSAqLworCisvKiBvcHRpb24gYml0cyBmb3IgY2NwX29wdGlvbnMubXBwZSAqLworI2RlZmluZSBNUFBFX09QVF80MCAgICAgICAgICAgIDB4MDEgICAgLyogNDAgYml0ICovCisjZGVmaW5lIE1QUEVfT1BUXzEyOCAgICAgICAgICAgMHgwMiAgICAvKiAxMjggYml0ICovCisjZGVmaW5lIE1QUEVfT1BUX1NUQVRFRlVMICAgICAgMHgwNCAgICAvKiBzdGF0ZWZ1bCBtb2RlICovCisvKiB1bnN1cHBvcnRlZCBvcHRzICovCisjZGVmaW5lIE1QUEVfT1BUXzU2ICAgICAgICAgICAgMHgwOCAgICAvKiA1NiBiaXQgKi8KKyNkZWZpbmUgTVBQRV9PUFRfTVBQQyAgICAgICAgICAweDEwICAgIC8qIE1QUEMgY29tcHJlc3Npb24gKi8KKyNkZWZpbmUgTVBQRV9PUFRfRCAgICAgICAgICAgICAweDIwICAgIC8qIFVua25vd24gKi8KKyNkZWZpbmUgTVBQRV9PUFRfVU5TVVBQT1JURUQgKE1QUEVfT1BUXzU2fE1QUEVfT1BUX01QUEN8TVBQRV9PUFRfRCkKKyNkZWZpbmUgTVBQRV9PUFRfVU5LTk9XTiAgICAgICAweDQwICAgIC8qIEJpdHMgIWRlZmluZWQgaW4gUkZDIDMwNzggd2VyZSBzZXQgKi8KKworLyoKKyAqIFRoaXMgaXMgbm90IG5pY2UgLi4uIHRoZSBhbHRlcm5hdGl2ZSBpcyBhIGJpdGZpZWxkIHN0cnVjdCB0aG91Z2guCisgKiBBbmQgdW5mb3J0dW5hdGVseSwgd2UgY2Fubm90IHNoYXJlIHRoZSBzYW1lIGJpdHMgZm9yIHRoZSBvcHRpb24KKyAqIG5hbWVzIGFib3ZlIHNpbmNlIEMgYW5kIEggYXJlIHRoZSBzYW1lIGJpdC4gIFdlIGNvdWxkIGRvIGEgdV9pbnQzMgorICogYnV0IHRoZW4gd2UgaGF2ZSB0byBkbyBhIGh0b25sKCkgYWxsIHRoZSB0aW1lIGFuZC9vciB3ZSBzdGlsbCBuZWVkCisgKiB0byBrbm93IHdoaWNoIG9jdGV0IGlzIHdoaWNoLgorICovCisjZGVmaW5lIE1QUEVfQ19CSVQgICAgICAgICAgICAgMHgwMSAgICAvKiBNUFBDICovCisjZGVmaW5lIE1QUEVfRF9CSVQgICAgICAgICAgICAgMHgxMCAgICAvKiBPYnNvbGV0ZSwgdXNhZ2UgdW5rbm93biAqLworI2RlZmluZSBNUFBFX0xfQklUICAgICAgICAgICAgIDB4MjAgICAgLyogNDAtYml0ICovCisjZGVmaW5lIE1QUEVfU19CSVQgICAgICAgICAgICAgMHg0MCAgICAvKiAxMjgtYml0ICovCisjZGVmaW5lIE1QUEVfTV9CSVQgICAgICAgICAgICAgMHg4MCAgICAvKiA1Ni1iaXQsIG5vdCBzdXBwb3J0ZWQgKi8KKyNkZWZpbmUgTVBQRV9IX0JJVCAgICAgICAgICAgICAweDAxICAgIC8qIFN0YXRlbGVzcyAoaW4gYSBkaWZmZXJlbnQgYnl0ZSkgKi8KKworLyogRG9lcyBub3QgaW5jbHVkZSBIIGJpdDsgdXNlZCBmb3IgbGVhc3Qgc2lnbmlmaWNhbnQgb2N0ZXQgb25seS4gKi8KKyNkZWZpbmUgTVBQRV9BTExfQklUUyAoTVBQRV9EX0JJVHxNUFBFX0xfQklUfE1QUEVfU19CSVR8TVBQRV9NX0JJVHxNUFBFX0hfQklUKQorCisvKiBCdWlsZCBhIENJIGZyb20gbXBwZSBvcHRzIChzZWUgUkZDIDMwNzgpICovCisjZGVmaW5lIE1QUEVfT1BUU19UT19DSShvcHRzLCBjaSkgICAgICAgICAgICAgIFwKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVfY2hhciAqcHRyID0gY2k7IC8qIHVfY2hhcls0XSAqLyAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAvKiBIIGJpdCAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGlmIChvcHRzICYgTVBQRV9PUFRfU1RBVEVGVUwpICAgICAgICAgICBcCisgICAgICAgICAgICpwdHIrKyA9IDB4MDsgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAqcHRyKysgPSBNUFBFX0hfQklUOyAgICAgICAgICAgICAgICBcCisgICAgICAgKnB0cisrID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAqcHRyKysgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgLyogUyxMIGJpdHMgKi8gICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAqcHRyID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGlmIChvcHRzICYgTVBQRV9PUFRfMTI4KSAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICpwdHIgfD0gTVBQRV9TX0JJVDsgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpZiAob3B0cyAmIE1QUEVfT1BUXzQwKSAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAqcHRyIHw9IE1QUEVfTF9CSVQ7ICAgICAgICAgICAgICAgICBcCisgICAgICAgLyogTSxELEMgYml0cyBub3Qgc3VwcG9ydGVkICovICAgICAgICAgIFwKKyAgICB9IHdoaWxlICgvKiBDT05TVENPTkQgKi8gMCkKKworLyogVGhlIHJldmVyc2Ugb2YgdGhlIGFib3ZlICovCisjZGVmaW5lIE1QUEVfQ0lfVE9fT1BUUyhjaSwgb3B0cykgICAgICAgICAgICAgIFwKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVfY2hhciAqcHRyID0gY2k7IC8qIHVfY2hhcls0XSAqLyAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBvcHRzID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgLyogSCBiaXQgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpZiAoIShwdHJbMF0gJiBNUFBFX0hfQklUKSkgICAgICAgICAgICAgXAorICAgICAgICAgICBvcHRzIHw9IE1QUEVfT1BUX1NUQVRFRlVMOyAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAvKiBTLEwgYml0cyAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGlmIChwdHJbM10gJiBNUFBFX1NfQklUKSAgICAgICAgICAgICAgICBcCisgICAgICAgICAgIG9wdHMgfD0gTVBQRV9PUFRfMTI4OyAgICAgICAgICAgICAgIFwKKyAgICAgICBpZiAocHRyWzNdICYgTVBQRV9MX0JJVCkgICAgICAgICAgICAgICAgXAorICAgICAgICAgICBvcHRzIHw9IE1QUEVfT1BUXzQwOyAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAvKiBNLEQsQyBiaXRzICovICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGlmIChwdHJbM10gJiBNUFBFX01fQklUKSAgICAgICAgICAgICAgICBcCisgICAgICAgICAgIG9wdHMgfD0gTVBQRV9PUFRfNTY7ICAgICAgICAgICAgICAgIFwKKyAgICAgICBpZiAocHRyWzNdICYgTVBQRV9EX0JJVCkgICAgICAgICAgICAgICAgXAorICAgICAgICAgICBvcHRzIHw9IE1QUEVfT1BUX0Q7ICAgICAgICAgICAgICAgICBcCisgICAgICAgaWYgKHB0clszXSAmIE1QUEVfQ19CSVQpICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgb3B0cyB8PSBNUFBFX09QVF9NUFBDOyAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgLyogT3RoZXIgYml0cyAqLyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpZiAocHRyWzBdICYgfk1QUEVfSF9CSVQpICAgICAgICAgICAgICAgXAorICAgICAgICAgICBvcHRzIHw9IE1QUEVfT1BUX1VOS05PV047ICAgICAgICAgICBcCisgICAgICAgaWYgKHB0clsxXSB8fCBwdHJbMl0pICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgb3B0cyB8PSBNUFBFX09QVF9VTktOT1dOOyAgICAgICAgICAgXAorICAgICAgIGlmIChwdHJbM10gJiB+TVBQRV9BTExfQklUUykgICAgICAgICAgICBcCisgICAgICAgICAgIG9wdHMgfD0gTVBQRV9PUFRfVU5LTk9XTjsgICAgICAgICAgIFwKKyAgICB9IHdoaWxlICgvKiBDT05TVENPTkQgKi8gMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3MyaW8uYyBiL2RyaXZlcnMvbmV0L3MyaW8uYwppbmRleCAwNzQ1ZGQ5Li5lNTdkZjhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zMmlvLmMKKysrIGIvZHJpdmVycy9uZXQvczJpby5jCkBAIC01NSw3ICs1NSw2IEBACiAjaW5jbHVkZSA8bGludXgvdGltZXguaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgogCkBAIC0xNTMyLDcgKzE1MzEsNyBAQAogI2RlZmluZSBMSU5LX1VQX0RPV05fSU5URVJSVVBUCQkxCiAjZGVmaW5lIE1BQ19STUFDX0VSUl9USU1FUgkJMgogCi1pbnQgczJpb19saW5rX2ZhdWx0X2luZGljYXRpb24obmljX3QgKm5pYykKK3N0YXRpYyBpbnQgczJpb19saW5rX2ZhdWx0X2luZGljYXRpb24obmljX3QgKm5pYykKIHsKIAlpZiAobmljLT5pbnRyX3R5cGUgIT0gSU5UQSkKIAkJcmV0dXJuIE1BQ19STUFDX0VSUl9USU1FUjsKQEAgLTE4NjQsNyArMTg2Myw3IEBACiAgKgogICovCiAKLXZvaWQgZml4X21hY19hZGRyZXNzKG5pY190ICogc3ApCitzdGF0aWMgdm9pZCBmaXhfbWFjX2FkZHJlc3MobmljX3QgKiBzcCkKIHsKIAlYRU5BX2Rldl9jb25maWdfdCBfX2lvbWVtICpiYXIwID0gc3AtPmJhcjA7CiAJdTY0IHZhbDY0OwpAQCAtMjE2MCw3ICsyMTU5LDcgQEAKICAqICBTVUNDRVNTIG9uIHN1Y2Nlc3Mgb3IgYW4gYXBwcm9wcmlhdGUgLXZlIHZhbHVlIG9uIGZhaWx1cmUuCiAgKi8KIAotaW50IGZpbGxfcnhfYnVmZmVycyhzdHJ1Y3QgczJpb19uaWMgKm5pYywgaW50IHJpbmdfbm8pCitzdGF0aWMgaW50IGZpbGxfcnhfYnVmZmVycyhzdHJ1Y3QgczJpb19uaWMgKm5pYywgaW50IHJpbmdfbm8pCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5pYy0+ZGV2OwogCXN0cnVjdCBza19idWZmICpza2I7CkBAIC0yODMxLDcgKzI4MzAsNyBAQAogICogICBTVUNDRVNTIG9uIHN1Y2Nlc3MgYW5kIEZBSUxVUkUgb24gZmFpbHVyZS4KICAqLwogCi1pbnQgd2FpdF9mb3JfY21kX2NvbXBsZXRlKG5pY190ICogc3ApCitzdGF0aWMgaW50IHdhaXRfZm9yX2NtZF9jb21wbGV0ZShuaWNfdCAqIHNwKQogewogCVhFTkFfZGV2X2NvbmZpZ190IF9faW9tZW0gKmJhcjAgPSBzcC0+YmFyMDsKIAlpbnQgcmV0ID0gRkFJTFVSRSwgY250ID0gMDsKQEAgLTMwNzcsNyArMzA3Niw3IEBACiAJcmV0dXJuIFNVQ0NFU1M7CiB9CiAKLWludCB3YWl0X2Zvcl9tc2l4X3RyYW5zKG5pY190ICpuaWMsIGludCBpKQorc3RhdGljIGludCB3YWl0X2Zvcl9tc2l4X3RyYW5zKG5pY190ICpuaWMsIGludCBpKQogewogCVhFTkFfZGV2X2NvbmZpZ190ICpiYXIwID0gKFhFTkFfZGV2X2NvbmZpZ190ICopIG5pYy0+YmFyMDsKIAl1NjQgdmFsNjQ7CkBAIC0zMTE2LDcgKzMxMTUsNyBAQAogCX0KIH0KIAotdm9pZCBzdG9yZV94bXNpX2RhdGEobmljX3QgKm5pYykKK3N0YXRpYyB2b2lkIHN0b3JlX3htc2lfZGF0YShuaWNfdCAqbmljKQogewogCVhFTkFfZGV2X2NvbmZpZ190ICpiYXIwID0gKFhFTkFfZGV2X2NvbmZpZ190ICopIG5pYy0+YmFyMDsKIAl1NjQgdmFsNjQsIGFkZHIsIGRhdGE7CkBAIC0zMjg4LDcgKzMyODcsNyBAQAogICogICBmaWxlIG9uIGZhaWx1cmUuCiAgKi8KIAotaW50IHMyaW9fb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIGludCBzMmlvX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAluaWNfdCAqc3AgPSBkZXYtPnByaXY7CiAJaW50IGVyciA9IDA7CkBAIC0zNDE4LDcgKzM0MTcsNyBAQAogICogIGZpbGUgb24gZmFpbHVyZS4KICAqLwogCi1pbnQgczJpb19jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIGludCBzMmlvX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJbmljX3QgKnNwID0gZGV2LT5wcml2OwogCWludCBpOwpAQCAtMzQ2Nyw3ICszNDY2LDcgQEAKICAqICAwIG9uIHN1Y2Nlc3MgJiAxIG9uIGZhaWx1cmUuCiAgKi8KIAotaW50IHMyaW9feG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIGludCBzMmlvX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAluaWNfdCAqc3AgPSBkZXYtPnByaXY7CiAJdTE2IGZyZ19jbnQsIGZyZ19sZW4sIGksIHF1ZXVlLCBxdWV1ZV9sZW4sIHB1dF9vZmYsIGdldF9vZmY7CkBAIC0zOTEzLDcgKzM5MTIsNyBAQAogICogIHBvaW50ZXIgdG8gdGhlIHVwZGF0ZWQgbmV0X2RldmljZV9zdGF0cyBzdHJ1Y3R1cmUuCiAgKi8KIAotc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnMyaW9fZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnMyaW9fZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJbmljX3QgKnNwID0gZGV2LT5wcml2OwogCW1hY19pbmZvX3QgKm1hY19jb250cm9sOwpAQCAtNTEwNiwxOSArNTEwNSwyMCBAQAogCXRtcF9zdGF0c1tpKytdID0gc3RhdF9pbmZvLT5zd19zdGF0LmRvdWJsZV9lY2NfZXJyczsKIH0KIAotaW50IHMyaW9fZXRodG9vbF9nZXRfcmVnc19sZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgczJpb19ldGh0b29sX2dldF9yZWdzX2xlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXJldHVybiAoWEVOQV9SRUdfU1BBQ0UpOwogfQogCiAKLXUzMiBzMmlvX2V0aHRvb2xfZ2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYpCitzdGF0aWMgdTMyIHMyaW9fZXRodG9vbF9nZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqIGRldikKIHsKIAluaWNfdCAqc3AgPSBkZXYtPnByaXY7CiAKIAlyZXR1cm4gKHNwLT5yeF9jc3VtKTsKIH0KLWludCBzMmlvX2V0aHRvb2xfc2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCisKK3N0YXRpYyBpbnQgczJpb19ldGh0b29sX3NldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQogewogCW5pY190ICpzcCA9IGRldi0+cHJpdjsKIApAQCAtNTEyOSwxNyArNTEyOSwxOSBAQAogCiAJcmV0dXJuIDA7CiB9Ci1pbnQgczJpb19nZXRfZWVwcm9tX2xlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorCitzdGF0aWMgaW50IHMyaW9fZ2V0X2VlcHJvbV9sZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlyZXR1cm4gKFhFTkFfRUVQUk9NX1NQQUNFKTsKIH0KIAotaW50IHMyaW9fZXRodG9vbF9zZWxmX3Rlc3RfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgczJpb19ldGh0b29sX3NlbGZfdGVzdF9jb3VudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXJldHVybiAoUzJJT19URVNUX0xFTik7CiB9Ci12b2lkIHMyaW9fZXRodG9vbF9nZXRfc3RyaW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJICAgICAgdTMyIHN0cmluZ3NldCwgdTggKiBkYXRhKQorCitzdGF0aWMgdm9pZCBzMmlvX2V0aHRvb2xfZ2V0X3N0cmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHUzMiBzdHJpbmdzZXQsIHU4ICogZGF0YSkKIHsKIAlzd2l0Y2ggKHN0cmluZ3NldCkgewogCWNhc2UgRVRIX1NTX1RFU1Q6CkBAIC01MTU1LDcgKzUxNTcsNyBAQAogCXJldHVybiAoUzJJT19TVEFUX0xFTik7CiB9CiAKLWludCBzMmlvX2V0aHRvb2xfb3Bfc2V0X3R4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCitzdGF0aWMgaW50IHMyaW9fZXRodG9vbF9vcF9zZXRfdHhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKIHsKIAlpZiAoZGF0YSkKIAkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0lQX0NTVU07CkBAIC01MjA4LDcgKzUyMTAsNyBAQAogICogIGZ1bmN0aW9uIGFsd2F5cyByZXR1cm4gRU9QTk9UU1VQUE9SVEVECiAgKi8KIAotaW50IHMyaW9faW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCkKK3N0YXRpYyBpbnQgczJpb19pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKQogewogCXJldHVybiAtRU9QTk9UU1VQUDsKIH0KQEAgLTUyMjQsNyArNTIyNiw3IEBACiAgKiAgIGZpbGUgb24gZmFpbHVyZS4KICAqLwogCi1pbnQgczJpb19jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KQorc3RhdGljIGludCBzMmlvX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpCiB7CiAJbmljX3QgKnNwID0gZGV2LT5wcml2OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zYWE5NzMwLmMgYi9kcml2ZXJzL25ldC9zYWE5NzMwLmMKaW5kZXggMTEwZTc3Ny4uYjJhY2VkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2FhOTczMC5jCisrKyBiL2RyaXZlcnMvbmV0L3NhYTk3MzAuYwpAQCAtMSw4ICsxLDggQEAKIC8qCi0gKiBDYXJzdGVuIExhbmdnYWFyZCwgY2Fyc3RlbmxAbWlwcy5jb20KLSAqIENvcHlyaWdodCAoQykgMjAwMCBNSVBTIFRlY2hub2xvZ2llcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAqIENvcHlyaWdodCAoQykgMjAwMCwgMjAwNSAgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKglBdXRob3JzOiBDYXJzdGVuIExhbmdnYWFyZCA8Y2Fyc3RlbmxAbWlwcy5jb20+CisgKgkJIE1hY2llaiBXLiBSb3p5Y2tpIDxtYWNyb0BtaXBzLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwNCBSYWxmIEJhZWNobGUgPHJhbGZAbGludXgtbWlwcy5vcmc+CiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIGRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKFZlcnNpb24gMikgYXMKQEAgLTE3LDE1ICsxNywxMyBAQAogICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCiAgKiAgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBLgogICoKLSAqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotICoKICAqIFNBQTk3MzAgZXRoZXJuZXQgZHJpdmVyLgogICoKICAqIENoYW5nZXM6Ci0gKiBBbmdlbG8gRGVsbCdBZXJhIDxidWZmZXJAYW50aWZvcmsub3JnPiA6IENvbnZlcnNpb24gdG8gdGhlIG5ldyBQQ0kgQVBJIChwY2lfZHJpdmVyKS4KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udmVyc2lvbiB0byBzcGlubG9ja3MuCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVycm9yIGhhbmRsaW5nIGZpeGVzLgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgKiBBbmdlbG8gRGVsbCdBZXJhIDxidWZmZXJAYW50aWZvcmsub3JnPiA6CUNvbnZlcnNpb24gdG8gdGhlIG5ldyBQQ0kgQVBJCisgKgkJCQkJCShwY2lfZHJpdmVyKS4KKyAqCQkJCQkJQ29udmVyc2lvbiB0byBzcGlubG9ja3MuCisgKgkJCQkJCUVycm9yIGhhbmRsaW5nIGZpeGVzLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC0zNiw4ICszNCwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKwogI2luY2x1ZGUgPGFzbS9taXBzLWJvYXJkcy9wcm9tLmg+CiAKICNpbmNsdWRlICJzYWE5NzMwLmgiCkBAIC01MSw4ICs1Miw4IEBACiAjZGVmaW5lIERSVl9NT0RVTEVfTkFNRSAic2FhOTczMCIKIAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNhYTk3MzBfcGNpX3RibFtdID0gewotCXsgUENJX1ZFTkRPUl9JRF9QSElMSVBTLCBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBOTM3MCwKLSAgICAgICAgICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwVUwgfSwKKwl7IFBDSV9WRU5ET1JfSURfUEhJTElQUywgUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTk3MzAsCisJICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwVUwgfSwKIAl7IDAsIH0KIH07CiAKQEAgLTYxLDUwICs2Miw0OCBAQAogLyogTm9uLXplcm8gb25seSBpZiB0aGUgY3VycmVudCBjYXJkIGlzIGEgUENJIHdpdGggQklPUy1zZXQgSVJRLiAqLwogc3RhdGljIHVuc2lnbmVkIGludCBwY2lfaXJxX2xpbmU7CiAKLSNkZWZpbmUgSU5MKGEpICAgICBpbmwoKHVuc2lnbmVkIGxvbmcpYSkKLSNkZWZpbmUgT1VUTCh4LGEpICBvdXRsKHgsKHVuc2lnbmVkIGxvbmcpYSkKLQogc3RhdGljIHZvaWQgZXZtX3NhYTk3MzBfZW5hYmxlX2xhbl9pbnQoc3RydWN0IGxhbl9zYWE5NzMwX3ByaXZhdGUgKmxwKQogewotCU9VVEwoSU5MKCZscC0+ZXZtX3NhYTk3MzBfcmVncy0+SW50ZXJydXB0QmxvY2sxKSB8IEVWTV9MQU5fSU5ULAorCW91dGwocmVhZGwoJmxwLT5ldm1fc2FhOTczMF9yZWdzLT5JbnRlcnJ1cHRCbG9jazEpIHwgRVZNX0xBTl9JTlQsCiAJICAgICAmbHAtPmV2bV9zYWE5NzMwX3JlZ3MtPkludGVycnVwdEJsb2NrMSk7Ci0JT1VUTChJTkwoJmxwLT5ldm1fc2FhOTczMF9yZWdzLT5JbnRlcnJ1cHRTdGF0dXMxKSB8IEVWTV9MQU5fSU5ULAorCW91dGwocmVhZGwoJmxwLT5ldm1fc2FhOTczMF9yZWdzLT5JbnRlcnJ1cHRTdGF0dXMxKSB8IEVWTV9MQU5fSU5ULAogCSAgICAgJmxwLT5ldm1fc2FhOTczMF9yZWdzLT5JbnRlcnJ1cHRTdGF0dXMxKTsKLQlPVVRMKElOTCgmbHAtPmV2bV9zYWE5NzMwX3JlZ3MtPkludGVycnVwdEVuYWJsZTEpIHwgRVZNX0xBTl9JTlQgfAorCW91dGwocmVhZGwoJmxwLT5ldm1fc2FhOTczMF9yZWdzLT5JbnRlcnJ1cHRFbmFibGUxKSB8IEVWTV9MQU5fSU5UIHwKIAkgICAgIEVWTV9NQVNURVJfRU4sICZscC0+ZXZtX3NhYTk3MzBfcmVncy0+SW50ZXJydXB0RW5hYmxlMSk7CiB9CisKIHN0YXRpYyB2b2lkIGV2bV9zYWE5NzMwX2Rpc2FibGVfbGFuX2ludChzdHJ1Y3QgbGFuX3NhYTk3MzBfcHJpdmF0ZSAqbHApCiB7Ci0JT1VUTChJTkwoJmxwLT5ldm1fc2FhOTczMF9yZWdzLT5JbnRlcnJ1cHRCbG9jazEpICYgfkVWTV9MQU5fSU5ULAorCW91dGwocmVhZGwoJmxwLT5ldm1fc2FhOTczMF9yZWdzLT5JbnRlcnJ1cHRCbG9jazEpICYgfkVWTV9MQU5fSU5ULAogCSAgICAgJmxwLT5ldm1fc2FhOTczMF9yZWdzLT5JbnRlcnJ1cHRCbG9jazEpOwotCU9VVEwoSU5MKCZscC0+ZXZtX3NhYTk3MzBfcmVncy0+SW50ZXJydXB0RW5hYmxlMSkgJiB+RVZNX0xBTl9JTlQsCisJb3V0bChyZWFkbCgmbHAtPmV2bV9zYWE5NzMwX3JlZ3MtPkludGVycnVwdEVuYWJsZTEpICYgfkVWTV9MQU5fSU5ULAogCSAgICAgJmxwLT5ldm1fc2FhOTczMF9yZWdzLT5JbnRlcnJ1cHRFbmFibGUxKTsKIH0KIAogc3RhdGljIHZvaWQgZXZtX3NhYTk3MzBfY2xlYXJfbGFuX2ludChzdHJ1Y3QgbGFuX3NhYTk3MzBfcHJpdmF0ZSAqbHApCiB7Ci0JT1VUTChFVk1fTEFOX0lOVCwgJmxwLT5ldm1fc2FhOTczMF9yZWdzLT5JbnRlcnJ1cHRTdGF0dXMxKTsKKwlvdXRsKEVWTV9MQU5fSU5ULCAmbHAtPmV2bV9zYWE5NzMwX3JlZ3MtPkludGVycnVwdFN0YXR1czEpOwogfQogCiBzdGF0aWMgdm9pZCBldm1fc2FhOTczMF9ibG9ja19sYW5faW50KHN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICpscCkKIHsKLQlPVVRMKElOTCgmbHAtPmV2bV9zYWE5NzMwX3JlZ3MtPkludGVycnVwdEJsb2NrMSkgJiB+RVZNX0xBTl9JTlQsCisJb3V0bChyZWFkbCgmbHAtPmV2bV9zYWE5NzMwX3JlZ3MtPkludGVycnVwdEJsb2NrMSkgJiB+RVZNX0xBTl9JTlQsCiAJICAgICAmbHAtPmV2bV9zYWE5NzMwX3JlZ3MtPkludGVycnVwdEJsb2NrMSk7CiB9CiAKIHN0YXRpYyB2b2lkIGV2bV9zYWE5NzMwX3VuYmxvY2tfbGFuX2ludChzdHJ1Y3QgbGFuX3NhYTk3MzBfcHJpdmF0ZSAqbHApCiB7Ci0JT1VUTChJTkwoJmxwLT5ldm1fc2FhOTczMF9yZWdzLT5JbnRlcnJ1cHRCbG9jazEpIHwgRVZNX0xBTl9JTlQsCisJb3V0bChyZWFkbCgmbHAtPmV2bV9zYWE5NzMwX3JlZ3MtPkludGVycnVwdEJsb2NrMSkgfCBFVk1fTEFOX0lOVCwKIAkgICAgICZscC0+ZXZtX3NhYTk3MzBfcmVncy0+SW50ZXJydXB0QmxvY2sxKTsKIH0KIAotc3RhdGljIHZvaWQgc2hvd19zYWE5NzMwX3JlZ3Moc3RydWN0IGxhbl9zYWE5NzMwX3ByaXZhdGUgKmxwKQorc3RhdGljIHZvaWQgX19hdHRyaWJ1dGVfdXNlZF9fIHNob3dfc2FhOTczMF9yZWdzKHN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICpscCkKIHsKIAlpbnQgaSwgajsKLQlwcmludGsoIlR4bUJ1ZmZlckEgPSAleFxuIiwgbHAtPlR4bUJ1ZmZlclswXVswXSk7Ci0JcHJpbnRrKCJUeG1CdWZmZXJCID0gJXhcbiIsIGxwLT5UeG1CdWZmZXJbMV1bMF0pOwotCXByaW50aygiUmN2QnVmZmVyQSA9ICV4XG4iLCBscC0+UmN2QnVmZmVyWzBdWzBdKTsKLQlwcmludGsoIlJjdkJ1ZmZlckIgPSAleFxuIiwgbHAtPlJjdkJ1ZmZlclsxXVswXSk7CisJcHJpbnRrKCJUeG1CdWZmZXJBID0gJXBcbiIsIGxwLT5UeG1CdWZmZXJbMF1bMF0pOworCXByaW50aygiVHhtQnVmZmVyQiA9ICVwXG4iLCBscC0+VHhtQnVmZmVyWzFdWzBdKTsKKwlwcmludGsoIlJjdkJ1ZmZlckEgPSAlcFxuIiwgbHAtPlJjdkJ1ZmZlclswXVswXSk7CisJcHJpbnRrKCJSY3ZCdWZmZXJCID0gJXBcbiIsIGxwLT5SY3ZCdWZmZXJbMV1bMF0pOwogCWZvciAoaSA9IDA7IGkgPCBMQU5fU0FBOTczMF9CVUZGRVJTOyBpKyspIHsKIAkJZm9yIChqID0gMDsgaiA8IExBTl9TQUE5NzMwX1RYTV9RX1NJWkU7IGorKykgewogCQkJcHJpbnRrKCJUeG1CdWZmZXJbJWRdWyVkXSA9ICV4XG4iLCBpLCBqLApAQCAtMTIwLDEzICsxMTksMTMgQEAKIAkJfQogCX0KIAlwcmludGsoImxwLT5ldm1fc2FhOTczMF9yZWdzLT5JbnRlcnJ1cHRCbG9jazEgPSAleFxuIiwKLQkgICAgICAgSU5MKCZscC0+ZXZtX3NhYTk3MzBfcmVncy0+SW50ZXJydXB0QmxvY2sxKSk7CisJICAgICAgIHJlYWRsKCZscC0+ZXZtX3NhYTk3MzBfcmVncy0+SW50ZXJydXB0QmxvY2sxKSk7CiAJcHJpbnRrKCJscC0+ZXZtX3NhYTk3MzBfcmVncy0+SW50ZXJydXB0U3RhdHVzMSA9ICV4XG4iLAotCSAgICAgICBJTkwoJmxwLT5ldm1fc2FhOTczMF9yZWdzLT5JbnRlcnJ1cHRTdGF0dXMxKSk7CisJICAgICAgIHJlYWRsKCZscC0+ZXZtX3NhYTk3MzBfcmVncy0+SW50ZXJydXB0U3RhdHVzMSkpOwogCXByaW50aygibHAtPmV2bV9zYWE5NzMwX3JlZ3MtPkludGVycnVwdEVuYWJsZTEgPSAleFxuIiwKLQkgICAgICAgSU5MKCZscC0+ZXZtX3NhYTk3MzBfcmVncy0+SW50ZXJydXB0RW5hYmxlMSkpOworCSAgICAgICByZWFkbCgmbHAtPmV2bV9zYWE5NzMwX3JlZ3MtPkludGVycnVwdEVuYWJsZTEpKTsKIAlwcmludGsoImxwLT5sYW5fc2FhOTczMF9yZWdzLT5PazJVc2UgPSAleFxuIiwKLQkgICAgICAgSU5MKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+T2syVXNlKSk7CisJICAgICAgIHJlYWRsKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+T2syVXNlKSk7CiAJcHJpbnRrKCJscC0+TmV4dFR4bUJ1ZmZlckluZGV4ID0gJXhcbiIsIGxwLT5OZXh0VHhtQnVmZmVySW5kZXgpOwogCXByaW50aygibHAtPk5leHRUeG1QYWNrZXRJbmRleCA9ICV4XG4iLCBscC0+TmV4dFR4bVBhY2tldEluZGV4KTsKIAlwcmludGsoImxwLT5QZW5kaW5nVHhtQnVmZmVySW5kZXggPSAleFxuIiwKQEAgLTEzNCwyMyArMTMzLDIzIEBACiAJcHJpbnRrKCJscC0+UGVuZGluZ1R4bVBhY2tldEluZGV4ID0gJXhcbiIsCiAJICAgICAgIGxwLT5QZW5kaW5nVHhtUGFja2V0SW5kZXgpOwogCXByaW50aygibHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkxhbkRtYUN0bCA9ICV4XG4iLAotCSAgICAgICBJTkwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5MYW5EbWFDdGwpKTsKKwkgICAgICAgcmVhZGwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5MYW5EbWFDdGwpKTsKIAlwcmludGsoImxwLT5sYW5fc2FhOTczMF9yZWdzLT5EbWFTdGF0dXMgPSAleFxuIiwKLQkgICAgICAgSU5MKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+RG1hU3RhdHVzKSk7CisJICAgICAgIHJlYWRsKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+RG1hU3RhdHVzKSk7CiAJcHJpbnRrKCJscC0+bGFuX3NhYTk3MzBfcmVncy0+Q2FtQ3RsID0gJXhcbiIsCi0JICAgICAgIElOTCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkNhbUN0bCkpOworCSAgICAgICByZWFkbCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkNhbUN0bCkpOwogCXByaW50aygibHAtPmxhbl9zYWE5NzMwX3JlZ3MtPlR4Q3RsID0gJXhcbiIsCi0JICAgICAgIElOTCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPlR4Q3RsKSk7CisJICAgICAgIHJlYWRsKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+VHhDdGwpKTsKIAlwcmludGsoImxwLT5sYW5fc2FhOTczMF9yZWdzLT5UeFN0YXR1cyA9ICV4XG4iLAotCSAgICAgICBJTkwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5UeFN0YXR1cykpOworCSAgICAgICByZWFkbCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPlR4U3RhdHVzKSk7CiAJcHJpbnRrKCJscC0+bGFuX3NhYTk3MzBfcmVncy0+UnhDdGwgPSAleFxuIiwKLQkgICAgICAgSU5MKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+UnhDdGwpKTsKKwkgICAgICAgcmVhZGwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5SeEN0bCkpOwogCXByaW50aygibHAtPmxhbl9zYWE5NzMwX3JlZ3MtPlJ4U3RhdHVzID0gJXhcbiIsCi0JICAgICAgIElOTCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPlJ4U3RhdHVzKSk7CisJICAgICAgIHJlYWRsKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+UnhTdGF0dXMpKTsKIAlmb3IgKGkgPSAwOyBpIDwgTEFOX1NBQTk3MzBfQ0FNX0RXT1JEUzsgaSsrKSB7Ci0JCU9VVEwoaSwgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5DYW1BZGRyZXNzKTsKKwkJb3V0bChpLCAmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkNhbUFkZHJlc3MpOwogCQlwcmludGsoImxwLT5sYW5fc2FhOTczMF9yZWdzLT5DYW1EYXRhID0gJXhcbiIsCi0JCSAgICAgICBJTkwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5DYW1EYXRhKSk7CisJCSAgICAgICByZWFkbCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkNhbURhdGEpKTsKIAl9CiAJcHJpbnRrKCJscC0+c3RhdHMudHhfcGFja2V0cyA9ICVseFxuIiwgbHAtPnN0YXRzLnR4X3BhY2tldHMpOwogCXByaW50aygibHAtPnN0YXRzLnR4X2Vycm9ycyA9ICVseFxuIiwgbHAtPnN0YXRzLnR4X2Vycm9ycyk7CkBAIC0xNzgsMTcgKzE3NywxNyBAQAogCSAgICAgICBscC0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycyk7CiAKIAlwcmludGsoImxwLT5sYW5fc2FhOTczMF9yZWdzLT5EZWJ1Z1BDSU1hc3RlckFkZHIgPSAleFxuIiwKLQkgICAgICAgSU5MKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+RGVidWdQQ0lNYXN0ZXJBZGRyKSk7CisJICAgICAgIHJlYWRsKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+RGVidWdQQ0lNYXN0ZXJBZGRyKSk7CiAJcHJpbnRrKCJscC0+bGFuX3NhYTk3MzBfcmVncy0+RGVidWdMYW5UeFN0YXRlTWFjaGluZSA9ICV4XG4iLAotCSAgICAgICBJTkwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5EZWJ1Z0xhblR4U3RhdGVNYWNoaW5lKSk7CisJICAgICAgIHJlYWRsKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+RGVidWdMYW5UeFN0YXRlTWFjaGluZSkpOwogCXByaW50aygibHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkRlYnVnTGFuUnhTdGF0ZU1hY2hpbmUgPSAleFxuIiwKLQkgICAgICAgSU5MKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+RGVidWdMYW5SeFN0YXRlTWFjaGluZSkpOworCSAgICAgICByZWFkbCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkRlYnVnTGFuUnhTdGF0ZU1hY2hpbmUpKTsKIAlwcmludGsoImxwLT5sYW5fc2FhOTczMF9yZWdzLT5EZWJ1Z0xhblR4Rmlmb1BvaW50ZXJzID0gJXhcbiIsCi0JICAgICAgIElOTCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkRlYnVnTGFuVHhGaWZvUG9pbnRlcnMpKTsKKwkgICAgICAgcmVhZGwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5EZWJ1Z0xhblR4Rmlmb1BvaW50ZXJzKSk7CiAJcHJpbnRrKCJscC0+bGFuX3NhYTk3MzBfcmVncy0+RGVidWdMYW5SeEZpZm9Qb2ludGVycyA9ICV4XG4iLAotCSAgICAgICBJTkwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5EZWJ1Z0xhblJ4Rmlmb1BvaW50ZXJzKSk7CisJICAgICAgIHJlYWRsKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+RGVidWdMYW5SeEZpZm9Qb2ludGVycykpOwogCXByaW50aygibHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkRlYnVnTGFuQ3RsU3RhdGVNYWNoaW5lID0gJXhcbiIsCi0JICAgICAgIElOTCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkRlYnVnTGFuQ3RsU3RhdGVNYWNoaW5lKSk7CisJICAgICAgIHJlYWRsKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+RGVidWdMYW5DdGxTdGF0ZU1hY2hpbmUpKTsKIH0KIAogc3RhdGljIHZvaWQgbGFuX3NhYTk3MzBfYnVmZmVyX2luaXQoc3RydWN0IGxhbl9zYWE5NzMwX3ByaXZhdGUgKmxwKQpAQCAtMjE0LDk4ICsyMTMsMTA4IEBACiAJfQogfQogCi1zdGF0aWMgaW50IGxhbl9zYWE5NzMwX2FsbG9jYXRlX2J1ZmZlcnMoc3RydWN0IGxhbl9zYWE5NzMwX3ByaXZhdGUgKmxwKQorc3RhdGljIHZvaWQgbGFuX3NhYTk3MzBfZnJlZV9idWZmZXJzKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQkJCSAgICAgc3RydWN0IGxhbl9zYWE5NzMwX3ByaXZhdGUgKmxwKQogewotCXVuc2lnbmVkIGludCBtZW1fc2l6ZTsKKwlwY2lfZnJlZV9jb25zaXN0ZW50KHBkZXYsIGxwLT5idWZmZXJfc2l6ZSwgbHAtPmJ1ZmZlcl9zdGFydCwKKwkJCSAgICBscC0+ZG1hX2FkZHIpOworfQorCitzdGF0aWMgaW50IGxhbl9zYWE5NzMwX2FsbG9jYXRlX2J1ZmZlcnMoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkJCXN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICpscCkKK3sKIAl2b2lkICpQYTsKLQl1bnNpZ25lZCBpbnQgaSwgaiwgUmN2QnVmZmVyU2l6ZSwgVHhtQnVmZmVyU2l6ZTsKLQl1bnNpZ25lZCBpbnQgYnVmZmVyX3N0YXJ0OwotCi0JLyogCi0JICogQWxsb2NhdGUgYWxsIFJYIGFuZCBUWCBwYWNrZXRzIGluIG9uZSBjaHVuay4gCi0JICogVGhlIFJ4IGFuZCBUeCBwYWNrZXRzIG11c3QgYmUgUEFDS0VUX1NJWkUgYWxpZ25lZC4KLQkgKi8KLQltZW1fc2l6ZSA9ICgoTEFOX1NBQTk3MzBfUkNWX1FfU0laRSArIExBTl9TQUE5NzMwX1RYTV9RX1NJWkUpICoKLQkJICAgIExBTl9TQUE5NzMwX1BBQ0tFVF9TSVpFICogTEFOX1NBQTk3MzBfQlVGRkVSUykgKwotCSAgICBMQU5fU0FBOTczMF9QQUNLRVRfU0laRTsKLQlidWZmZXJfc3RhcnQgPQotCSAgICAodW5zaWduZWQgaW50KSBrbWFsbG9jKG1lbV9zaXplLCBHRlBfRE1BIHwgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAoIWJ1ZmZlcl9zdGFydCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkvKiAKLQkgKiBTZXQgRE1BIGJ1ZmZlciB0byBrc2VnMSAodW5jYWNoZWQpLgotCSAqIE1ha2Ugc3VyZSB0byBmbHVzaCBiZWZvcmUgdXNpbmcgaXQgdW5jYWNoZWQuCi0JICovCi0JUGEgPSAodm9pZCAqKSBLU0VHMUFERFIoKGJ1ZmZlcl9zdGFydCArIExBTl9TQUE5NzMwX1BBQ0tFVF9TSVpFKSAmCi0JCQkJfihMQU5fU0FBOTczMF9QQUNLRVRfU0laRSAtIDEpKTsKLQlkbWFfY2FjaGVfd2JhY2tfaW52KCh1bnNpZ25lZCBsb25nKSBQYSwgbWVtX3NpemUpOworCXVuc2lnbmVkIGludCBpLCBqLCByeG9mZnNldCwgdHhvZmZzZXQ7CisJaW50IHJldDsKIAogCS8qIEluaXRpYWxpemUgYnVmZmVyIHNwYWNlICovCi0JUmN2QnVmZmVyU2l6ZSA9IExBTl9TQUE5NzMwX1BBQ0tFVF9TSVpFOwotCVR4bUJ1ZmZlclNpemUgPSBMQU5fU0FBOTczMF9QQUNLRVRfU0laRTsKIAlscC0+RG1hUmN2UGFja2V0cyA9IExBTl9TQUE5NzMwX1JDVl9RX1NJWkU7CiAJbHAtPkRtYVR4bVBhY2tldHMgPSBMQU5fU0FBOTczMF9UWE1fUV9TSVpFOwogCisJLyogSW5pdGlhbGl6ZSBSeCBCdWZmZXIgSW5kZXggKi8KKwlscC0+TmV4dFJjdlBhY2tldEluZGV4ID0gMDsKKwlscC0+TmV4dFJjdkJ1ZmZlckluZGV4ID0gMDsKKworCS8qIFNldCBjdXJyZW50IGJ1ZmZlciBpbmRleCAmIG5leHQgYXZhaWxhYmxlIHBhY2tldCBpbmRleCAqLworCWxwLT5OZXh0VHhtUGFja2V0SW5kZXggPSAwOworCWxwLT5OZXh0VHhtQnVmZmVySW5kZXggPSAwOworCWxwLT5QZW5kaW5nVHhtUGFja2V0SW5kZXggPSAwOworCWxwLT5QZW5kaW5nVHhtQnVmZmVySW5kZXggPSAwOworCisJLyoKKwkgKiBBbGxvY2F0ZSBhbGwgUlggYW5kIFRYIHBhY2tldHMgaW4gb25lIGNodW5rLgorCSAqIFRoZSBSeCBhbmQgVHggcGFja2V0cyBtdXN0IGJlIFBBQ0tFVF9TSVpFIGFsaWduZWQuCisJICovCisJbHAtPmJ1ZmZlcl9zaXplID0gKChMQU5fU0FBOTczMF9SQ1ZfUV9TSVpFICsgTEFOX1NBQTk3MzBfVFhNX1FfU0laRSkgKgorCQkJICAgTEFOX1NBQTk3MzBfUEFDS0VUX1NJWkUgKiBMQU5fU0FBOTczMF9CVUZGRVJTKSArCisJCQkgIExBTl9TQUE5NzMwX1BBQ0tFVF9TSVpFOworCWxwLT5idWZmZXJfc3RhcnQgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwZGV2LCBscC0+YnVmZmVyX3NpemUsCisJCQkJCQkmbHAtPmRtYV9hZGRyKTsKKwlpZiAoIWxwLT5idWZmZXJfc3RhcnQpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJUGEgPSAodm9pZCAqKUFMSUdOKCh1bnNpZ25lZCBsb25nKWxwLT5idWZmZXJfc3RhcnQsCisJCQkgICBMQU5fU0FBOTczMF9QQUNLRVRfU0laRSk7CisKKwlyeG9mZnNldCA9IFBhIC0gbHAtPmJ1ZmZlcl9zdGFydDsKKwogCS8qIEluaXQgUlggYnVmZmVycyAqLwogCWZvciAoaSA9IDA7IGkgPCBMQU5fU0FBOTczMF9CVUZGRVJTOyBpKyspIHsKIAkJZm9yIChqID0gMDsgaiA8IExBTl9TQUE5NzMwX1JDVl9RX1NJWkU7IGorKykgewogCQkJKih1bnNpZ25lZCBpbnQgKikgUGEgPQogCQkJICAgIGNwdV90b19sZTMyKFJYU0ZfUkVBRFkgPDwKIAkJCQkJUlhfU1RBVF9DVExfT1dORVJfU0hGKTsKLQkJCWxwLT5SY3ZCdWZmZXJbaV1bal0gPSAodW5zaWduZWQgaW50KSBQYTsKLQkJCVBhICs9IFJjdkJ1ZmZlclNpemU7CisJCQlscC0+UmN2QnVmZmVyW2ldW2pdID0gUGE7CisJCQlQYSArPSBMQU5fU0FBOTczMF9QQUNLRVRfU0laRTsKIAkJfQogCX0KIAorCXR4b2Zmc2V0ID0gUGEgLSBscC0+YnVmZmVyX3N0YXJ0OworCiAJLyogSW5pdCBUWCBidWZmZXJzICovCiAJZm9yIChpID0gMDsgaSA8IExBTl9TQUE5NzMwX0JVRkZFUlM7IGkrKykgewogCQlmb3IgKGogPSAwOyBqIDwgTEFOX1NBQTk3MzBfVFhNX1FfU0laRTsgaisrKSB7CiAJCQkqKHVuc2lnbmVkIGludCAqKSBQYSA9CiAJCQkgICAgY3B1X3RvX2xlMzIoVFhTRl9FTVBUWSA8PAogCQkJCQlUWF9TVEFUX0NUTF9PV05FUl9TSEYpOwotCQkJbHAtPlR4bUJ1ZmZlcltpXVtqXSA9ICh1bnNpZ25lZCBpbnQpIFBhOwotCQkJUGEgKz0gVHhtQnVmZmVyU2l6ZTsKKwkJCWxwLT5UeG1CdWZmZXJbaV1bal0gPSBQYTsKKwkJCVBhICs9IExBTl9TQUE5NzMwX1BBQ0tFVF9TSVpFOwogCQl9CiAJfQogCi0JLyogCi0JICogU2V0IHJ4IGJ1ZmZlciBBIGFuZCByeCBidWZmZXIgQiB0byBwb2ludCB0byB0aGUgZmlyc3QgdHdvIGJ1ZmZlciAKKwkvKgorCSAqIFNldCByeCBidWZmZXIgQSBhbmQgcnggYnVmZmVyIEIgdG8gcG9pbnQgdG8gdGhlIGZpcnN0IHR3byBidWZmZXIKIAkgKiBzcGFjZXMuCiAJICovCi0JT1VUTChQSFlTQUREUihscC0+UmN2QnVmZmVyWzBdWzBdKSwKKwlvdXRsKGxwLT5kbWFfYWRkciArIHJ4b2Zmc2V0LAogCSAgICAgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5SeEJ1ZmZBKTsKLQlPVVRMKFBIWVNBRERSKGxwLT5SY3ZCdWZmZXJbMV1bMF0pLAorCW91dGwobHAtPmRtYV9hZGRyICsgcnhvZmZzZXQgKworCSAgICAgTEFOX1NBQTk3MzBfUEFDS0VUX1NJWkUgKiBMQU5fU0FBOTczMF9SQ1ZfUV9TSVpFLAogCSAgICAgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5SeEJ1ZmZCKTsKIAotCS8qIEluaXRpYWxpemUgQnVmZmVyIEluZGV4ICovCi0JbHAtPk5leHRSY3ZQYWNrZXRJbmRleCA9IDA7Ci0JbHAtPk5leHRSY3ZUb1VzZUlzQSA9IDE7Ci0KLQkvKiBTZXQgY3VycmVudCBidWZmZXIgaW5kZXggJiBuZXh0IGF2YWlsYmxlIHBhY2tldCBpbmRleCAqLwotCWxwLT5OZXh0VHhtUGFja2V0SW5kZXggPSAwOwotCWxwLT5OZXh0VHhtQnVmZmVySW5kZXggPSAwOwotCWxwLT5QZW5kaW5nVHhtUGFja2V0SW5kZXggPSAwOwotCWxwLT5QZW5kaW5nVHhtQnVmZmVySW5kZXggPSAwOwotCi0JLyogCisJLyoKIAkgKiBTZXQgdHhtX2J1Zl9hIGFuZCB0eG1fYnVmX2IgdG8gcG9pbnQgdG8gdGhlIGZpcnN0IHR3byBidWZmZXIKLQkgKiBzcGFjZSAKKwkgKiBzcGFjZQogCSAqLwotCU9VVEwoUEhZU0FERFIobHAtPlR4bUJ1ZmZlclswXVswXSksCisJb3V0bChscC0+ZG1hX2FkZHIgKyB0eG9mZnNldCwKIAkgICAgICZscC0+bGFuX3NhYTk3MzBfcmVncy0+VHhCdWZmQSk7Ci0JT1VUTChQSFlTQUREUihscC0+VHhtQnVmZmVyWzFdWzBdKSwKKwlvdXRsKGxwLT5kbWFfYWRkciArIHR4b2Zmc2V0ICsKKwkgICAgIExBTl9TQUE5NzMwX1BBQ0tFVF9TSVpFICogTEFOX1NBQTk3MzBfVFhNX1FfU0laRSwKIAkgICAgICZscC0+bGFuX3NhYTk3MzBfcmVncy0+VHhCdWZmQik7CiAKIAkvKiBTZXQgcGFja2V0IG51bWJlciAqLwotCU9VVEwoKGxwLT5EbWFSY3ZQYWNrZXRzIDw8IFBLX0NPVU5UX1JYX0FfU0hGKSB8CisJb3V0bCgobHAtPkRtYVJjdlBhY2tldHMgPDwgUEtfQ09VTlRfUlhfQV9TSEYpIHwKIAkgICAgIChscC0+RG1hUmN2UGFja2V0cyA8PCBQS19DT1VOVF9SWF9CX1NIRikgfAogCSAgICAgKGxwLT5EbWFUeG1QYWNrZXRzIDw8IFBLX0NPVU5UX1RYX0FfU0hGKSB8CiAJICAgICAobHAtPkRtYVR4bVBhY2tldHMgPDwgUEtfQ09VTlRfVFhfQl9TSEYpLAogCSAgICAgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5QYWNrZXRDb3VudCk7CiAKIAlyZXR1cm4gMDsKKworb3V0OgorCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgbGFuX3NhYTk3MzBfY2FtX2xvYWQoc3RydWN0IGxhbl9zYWE5NzMwX3ByaXZhdGUgKmxwKQpAQCAtMzE3LDggKzMyNiw4IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgTEFOX1NBQTk3MzBfQ0FNX0RXT1JEUzsgaSsrKSB7CiAJCS8qIEZpcnN0IHNldCBhZGRyZXNzIHRvIHdoZXJlIGRhdGEgaXMgd3JpdHRlbiAqLwotCQlPVVRMKGksICZscC0+bGFuX3NhYTk3MzBfcmVncy0+Q2FtQWRkcmVzcyk7Ci0JCU9VVEwoKE5ldHdvcmtBZGRyZXNzWzBdIDw8IDI0KSB8IChOZXR3b3JrQWRkcmVzc1sxXSA8PCAxNikKKwkJb3V0bChpLCAmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkNhbUFkZHJlc3MpOworCQlvdXRsKChOZXR3b3JrQWRkcmVzc1swXSA8PCAyNCkgfCAoTmV0d29ya0FkZHJlc3NbMV0gPDwgMTYpCiAJCSAgICAgfCAoTmV0d29ya0FkZHJlc3NbMl0gPDwgOCkgfCBOZXR3b3JrQWRkcmVzc1szXSwKIAkJICAgICAmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkNhbURhdGEpOwogCQlOZXR3b3JrQWRkcmVzcyArPSA0OwpAQCAtMzI4LDggKzMzNyw3IEBACiAKIHN0YXRpYyBpbnQgbGFuX3NhYTk3MzBfY2FtX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgbGFuX3NhYTk3MzBfcHJpdmF0ZSAqbHAgPQotCSAgICAoc3RydWN0IGxhbl9zYWE5NzMwX3ByaXZhdGUgKikgZGV2LT5wcml2OworCXN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJdW5zaWduZWQgaW50IGk7CiAKIAkvKiBDb3B5IE1BQy1hZGRyZXNzIGludG8gYWxsIGVudHJpZXMuICovCkBAIC0zNDcsNyArMzU1LDcgQEAKIAogCS8qIENoZWNrIGxpbmsgc3RhdHVzLCBzcGluIGhlcmUgdGlsbCBzdGF0aW9uIGlzIG5vdCBidXN5LiAqLwogCWkgPSAwOwotCXdoaWxlIChJTkwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5TdGF0aW9uTWdtdEN0bCkgJiBNRF9DQV9CVVNZKSB7CisJd2hpbGUgKHJlYWRsKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+U3RhdGlvbk1nbXRDdGwpICYgTURfQ0FfQlVTWSkgewogCQlpKys7CiAJCWlmIChpID4gMTAwKSB7CiAJCQlwcmludGsoIkVycm9yOiBsYW5fc2FhOTczMF9taWlfaW5pdDogdGltZW91dFxuIik7CkBAIC0zNTcsMTIgKzM2NSwxMiBAQAogCX0KIAogCS8qIE5vdyBzZXQgdGhlIGNvbnRyb2wgYW5kIGFkZHJlc3MgcmVnaXN0ZXIuICovCi0JT1VUTChNRF9DQV9CVVNZIHwgUEhZX1NUQVRVUyB8IFBIWV9BRERSRVNTIDw8IE1EX0NBX1BIWV9TSEYsCisJb3V0bChNRF9DQV9CVVNZIHwgUEhZX1NUQVRVUyB8IFBIWV9BRERSRVNTIDw8IE1EX0NBX1BIWV9TSEYsCiAJICAgICAmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPlN0YXRpb25NZ210Q3RsKTsKIAogCS8qIGNoZWNrIGxpbmsgc3RhdHVzLCBzcGluIGhlcmUgdGlsbCBzdGF0aW9uIGlzIG5vdCBidXN5ICovCiAJaSA9IDA7Ci0Jd2hpbGUgKElOTCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPlN0YXRpb25NZ210Q3RsKSAmIE1EX0NBX0JVU1kpIHsKKwl3aGlsZSAocmVhZGwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5TdGF0aW9uTWdtdEN0bCkgJiBNRF9DQV9CVVNZKSB7CiAJCWkrKzsKIAkJaWYgKGkgPiAxMDApIHsKIAkJCXByaW50aygiRXJyb3I6IGxhbl9zYWE5NzMwX21paV9pbml0OiB0aW1lb3V0XG4iKTsKQEAgLTM3NSw3ICszODMsNyBAQAogCW1kZWxheSgxKTsKIAogCS8qIENoZWNrIHRoZSBsaW5rIHN0YXR1cy4gKi8KLQlpZiAoSU5MKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+U3RhdGlvbk1nbXREYXRhKSAmCisJaWYgKHJlYWRsKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+U3RhdGlvbk1nbXREYXRhKSAmCiAJICAgIFBIWV9TVEFUVVNfTElOS19VUCkgewogCQkvKiBMaW5rIGlzIHVwLiAqLwogCQlyZXR1cm4gMDsKQEAgLTM4MywxNCArMzkxLDE0IEBACiAJCS8qIExpbmsgaXMgZG93biwgcmVzZXQgdGhlIFBIWSBmaXJzdC4gKi8KIAogCQkvKiBzZXQgUEhZIGFkZHJlc3MgPSAnQ09OVFJPTCcgKi8KLQkJT1VUTChQSFlfQUREUkVTUyA8PCBNRF9DQV9QSFlfU0hGIHwgTURfQ0FfV1IgfCBQSFlfQ09OVFJPTCwKKwkJb3V0bChQSFlfQUREUkVTUyA8PCBNRF9DQV9QSFlfU0hGIHwgTURfQ0FfV1IgfCBQSFlfQ09OVFJPTCwKIAkJICAgICAmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPlN0YXRpb25NZ210Q3RsKTsKIAogCQkvKiBXYWl0IGZvciAxIG1zLiAqLwogCQltZGVsYXkoMSk7CiAKIAkJLyogc2V0ICdDT05UUk9MJyA9IGZvcmNlIHJlc2V0IGFuZCByZW5lZ290aWF0ZSAqLwotCQlPVVRMKFBIWV9DT05UUk9MX1JFU0VUIHwgUEhZX0NPTlRST0xfQVVUT19ORUcgfAorCQlvdXRsKFBIWV9DT05UUk9MX1JFU0VUIHwgUEhZX0NPTlRST0xfQVVUT19ORUcgfAogCQkgICAgIFBIWV9DT05UUk9MX1JFU1RBUlRfQVVUT19ORUcsCiAJCSAgICAgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5TdGF0aW9uTWdtdERhdGEpOwogCkBAIC0zOTgsMTIgKzQwNiwxMiBAQAogCQltZGVsYXkoNTApOwogCiAJCS8qIHNldCAnQlVTWScgdG8gc3RhcnQgb3BlcmF0aW9uICovCi0JCU9VVEwoTURfQ0FfQlVTWSB8IFBIWV9BRERSRVNTIDw8IE1EX0NBX1BIWV9TSEYgfCBNRF9DQV9XUiB8CisJCW91dGwoTURfQ0FfQlVTWSB8IFBIWV9BRERSRVNTIDw8IE1EX0NBX1BIWV9TSEYgfCBNRF9DQV9XUiB8CiAJCSAgICAgUEhZX0NPTlRST0wsICZscC0+bGFuX3NhYTk3MzBfcmVncy0+U3RhdGlvbk1nbXRDdGwpOwogCiAJCS8qIGF3YWl0IGNvbXBsZXRpb24gKi8KIAkJaSA9IDA7Ci0JCXdoaWxlIChJTkwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5TdGF0aW9uTWdtdEN0bCkgJgorCQl3aGlsZSAocmVhZGwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5TdGF0aW9uTWdtdEN0bCkgJgogCQkgICAgICAgTURfQ0FfQlVTWSkgewogCQkJaSsrOwogCQkJaWYgKGkgPiAxMDApIHsKQEAgLTQxOSwxMyArNDI3LDEzIEBACiAKIAkJZm9yIChsID0gMDsgbCA8IDI7IGwrKykgewogCQkJLyogc2V0IFBIWSBhZGRyZXNzID0gJ1NUQVRVUycgKi8KLQkJCU9VVEwoTURfQ0FfQlVTWSB8IFBIWV9BRERSRVNTIDw8IE1EX0NBX1BIWV9TSEYgfAorCQkJb3V0bChNRF9DQV9CVVNZIHwgUEhZX0FERFJFU1MgPDwgTURfQ0FfUEhZX1NIRiB8CiAJCQkgICAgIFBIWV9TVEFUVVMsCiAJCQkgICAgICZscC0+bGFuX3NhYTk3MzBfcmVncy0+U3RhdGlvbk1nbXRDdGwpOwogCiAJCQkvKiBhd2FpdCBjb21wbGV0aW9uICovCiAJCQlpID0gMDsKLQkJCXdoaWxlIChJTkwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5TdGF0aW9uTWdtdEN0bCkgJgorCQkJd2hpbGUgKHJlYWRsKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+U3RhdGlvbk1nbXRDdGwpICYKIAkJCSAgICAgICBNRF9DQV9CVVNZKSB7CiAJCQkJaSsrOwogCQkJCWlmIChpID4gMTAwKSB7CkBAIC00NDAsNyArNDQ4LDcgQEAKIAkJCW1kZWxheSgzMDAwKTsKIAogCQkJLyogY2hlY2sgdGhlIGxpbmsgc3RhdHVzICovCi0JCQlpZiAoSU5MKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+U3RhdGlvbk1nbXREYXRhKSAmCisJCQlpZiAocmVhZGwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5TdGF0aW9uTWdtdERhdGEpICYKIAkJCSAgICBQSFlfU1RBVFVTX0xJTktfVVApIHsKIAkJCQkvKiBsaW5rIGlzIHVwICovCiAJCQkJYnJlYWs7CkBAIC00NTQsNyArNDYyLDcgQEAKIHN0YXRpYyBpbnQgbGFuX3NhYTk3MzBfY29udHJvbF9pbml0KHN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICpscCkKIHsKIAkvKiBJbml0aWFsaXplIERNQSBjb250cm9sIHJlZ2lzdGVyLiAqLwotCU9VVEwoKExBTk1CX0FOWSA8PCBETUFfQ1RMX01BWF9YRkVSX1NIRikgfAorCW91dGwoKExBTk1CX0FOWSA8PCBETUFfQ1RMX01BWF9YRkVSX1NIRikgfAogCSAgICAgKExBTkVORF9MSVRUTEUgPDwgRE1BX0NUTF9FTkRJQU5fU0hGKSB8CiAJICAgICAoTEFOX1NBQTk3MzBfUkNWX1FfSU5UX1RIUkVTSE9MRCA8PCBETUFfQ1RMX1JYX0lOVF9DT1VOVF9TSEYpCiAJICAgICB8IERNQV9DVExfUlhfSU5UX1RPX0VOIHwgRE1BX0NUTF9SWF9JTlRfRU4gfApAQCAtNDYyLDI3ICs0NzAsMjcgQEAKIAkgICAgICZscC0+bGFuX3NhYTk3MzBfcmVncy0+TGFuRG1hQ3RsKTsKIAogCS8qIEluaXRpYWwgTUFDIGNvbnRyb2wgcmVnaXN0ZXIuICovCi0JT1VUTCgoTUFDQ01fTUlJIDw8IE1BQ19DT05UUk9MX0NPTk5fU0hGKSB8IE1BQ19DT05UUk9MX0ZVTExfRFVQLAorCW91dGwoKE1BQ0NNX01JSSA8PCBNQUNfQ09OVFJPTF9DT05OX1NIRikgfCBNQUNfQ09OVFJPTF9GVUxMX0RVUCwKIAkgICAgICZscC0+bGFuX3NhYTk3MzBfcmVncy0+TWFjQ3RsKTsKIAogCS8qIEluaXRpYWxpemUgQ0FNIGNvbnRyb2wgcmVnaXN0ZXIuICovCi0JT1VUTChDQU1fQ09OVFJPTF9DT01QX0VOIHwgQ0FNX0NPTlRST0xfQlJPQURfQUNDLAorCW91dGwoQ0FNX0NPTlRST0xfQ09NUF9FTiB8IENBTV9DT05UUk9MX0JST0FEX0FDQywKIAkgICAgICZscC0+bGFuX3NhYTk3MzBfcmVncy0+Q2FtQ3RsKTsKIAotCS8qIAorCS8qCiAJICogSW5pdGlhbGl6ZSBDQU0gZW5hYmxlIHJlZ2lzdGVyLCBvbmx5IHR1cm4gb24gZmlyc3QgZW50cnksIHNob3VsZAotCSAqIGNvbnRhaW4gb3duIGFkZHIuIAorCSAqIGNvbnRhaW4gb3duIGFkZHIuCiAJICovCi0JT1VUTCgweDAwMDEsICZscC0+bGFuX3NhYTk3MzBfcmVncy0+Q2FtRW5hYmxlKTsKKwlvdXRsKDB4MDAwMSwgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5DYW1FbmFibGUpOwogCiAJLyogSW5pdGlhbGl6ZSBUeCBjb250cm9sIHJlZ2lzdGVyICovCi0JT1VUTChUWF9DVExfRU5fQ09NUCwgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5UeEN0bCk7CisJb3V0bChUWF9DVExfRU5fQ09NUCwgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5UeEN0bCk7CiAKIAkvKiBJbml0aWFsaXplIFJjdiBjb250cm9sIHJlZ2lzdGVyICovCi0JT1VUTChSWF9DVExfU1RSSVBfQ1JDLCAmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPlJ4Q3RsKTsKKwlvdXRsKFJYX0NUTF9TVFJJUF9DUkMsICZscC0+bGFuX3NhYTk3MzBfcmVncy0+UnhDdGwpOwogCiAJLyogUmVzZXQgRE1BIGVuZ2luZSAqLwotCU9VVEwoRE1BX1RFU1RfU1dfUkVTRVQsICZscC0+bGFuX3NhYTk3MzBfcmVncy0+RG1hVGVzdCk7CisJb3V0bChETUFfVEVTVF9TV19SRVNFVCwgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5EbWFUZXN0KTsKIAogCXJldHVybiAwOwogfQpAQCAtNDkyLDIxICs1MDAsMjEgQEAKIAlpbnQgaTsKIAogCS8qIFN0b3AgRE1BIGZpcnN0ICovCi0JT1VUTChJTkwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5MYW5EbWFDdGwpICYKKwlvdXRsKHJlYWRsKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+TGFuRG1hQ3RsKSAmCiAJICAgICB+KERNQV9DVExfRU5fVFhfRE1BIHwgRE1BX0NUTF9FTl9SWF9ETUEpLAogCSAgICAgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5MYW5EbWFDdGwpOwogCiAJLyogU2V0IHRoZSBTVyBSZXNldCBiaXRzIGluIERNQSBhbmQgTUFDIGNvbnRyb2wgcmVnaXN0ZXJzICovCi0JT1VUTChETUFfVEVTVF9TV19SRVNFVCwgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5EbWFUZXN0KTsKLQlPVVRMKElOTCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPk1hY0N0bCkgfCBNQUNfQ09OVFJPTF9SRVNFVCwKKwlvdXRsKERNQV9URVNUX1NXX1JFU0VULCAmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkRtYVRlc3QpOworCW91dGwocmVhZGwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5NYWNDdGwpIHwgTUFDX0NPTlRST0xfUkVTRVQsCiAJICAgICAmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPk1hY0N0bCk7CiAKLQkvKiAKKwkvKgogCSAqIFdhaXQgZm9yIE1BQyByZXNldCB0byBoYXZlIGZpbmlzaGVkLiBUaGUgcmVzZXQgYml0IGlzIGF1dG8gY2xlYXJlZAogCSAqIHdoZW4gdGhlIHJlc2V0IGlzIGRvbmUuCiAJICovCiAJaSA9IDA7Ci0Jd2hpbGUgKElOTCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPk1hY0N0bCkgJiBNQUNfQ09OVFJPTF9SRVNFVCkgeworCXdoaWxlIChyZWFkbCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPk1hY0N0bCkgJiBNQUNfQ09OVFJPTF9SRVNFVCkgewogCQlpKys7CiAJCWlmIChpID4gMTAwKSB7CiAJCQlwcmludGsKQEAgLTUyNCw3ICs1MzIsNyBAQAogCS8qIFN0b3AgbGFuIGNvbnRyb2xsZXIuICovCiAJbGFuX3NhYTk3MzBfc3RvcChscCk7CiAKLQlPVVRMKExBTl9TQUE5NzMwX0RFRkFVTFRfVElNRV9PVVRfQ05ULAorCW91dGwoTEFOX1NBQTk3MzBfREVGQVVMVF9USU1FX09VVF9DTlQsCiAJICAgICAmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPlRpbWVvdXQpOwogCiAJcmV0dXJuIDA7CkBAIC01MzYsMjggKzU0NCwyNyBAQAogCiAJLyogSW5pdGlhbGl6ZSBSeCBCdWZmZXIgSW5kZXggKi8KIAlscC0+TmV4dFJjdlBhY2tldEluZGV4ID0gMDsKLQlscC0+TmV4dFJjdlRvVXNlSXNBID0gMTsKKwlscC0+TmV4dFJjdkJ1ZmZlckluZGV4ID0gMDsKIAotCS8qIFNldCBjdXJyZW50IGJ1ZmZlciBpbmRleCAmIG5leHQgYXZhaWxibGUgcGFja2V0IGluZGV4ICovCisJLyogU2V0IGN1cnJlbnQgYnVmZmVyIGluZGV4ICYgbmV4dCBhdmFpbGFibGUgcGFja2V0IGluZGV4ICovCiAJbHAtPk5leHRUeG1QYWNrZXRJbmRleCA9IDA7CiAJbHAtPk5leHRUeG1CdWZmZXJJbmRleCA9IDA7CiAJbHAtPlBlbmRpbmdUeG1QYWNrZXRJbmRleCA9IDA7CiAJbHAtPlBlbmRpbmdUeG1CdWZmZXJJbmRleCA9IDA7CiAKLQlPVVRMKElOTCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkxhbkRtYUN0bCkgfCBETUFfQ1RMX0VOX1RYX0RNQSB8CisJb3V0bChyZWFkbCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkxhbkRtYUN0bCkgfCBETUFfQ1RMX0VOX1RYX0RNQSB8CiAJICAgICBETUFfQ1RMX0VOX1JYX0RNQSwgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5MYW5EbWFDdGwpOwogCiAJLyogRm9yIFR4LCB0dXJuIG9uIE1BQyB0aGVuIERNQSAqLwotCU9VVEwoSU5MKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+VHhDdGwpIHwgVFhfQ1RMX1RYX0VOLAorCW91dGwocmVhZGwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5UeEN0bCkgfCBUWF9DVExfVFhfRU4sCiAJICAgICAmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPlR4Q3RsKTsKIAogCS8qIEZvciBSeCwgdHVybiBvbiBETUEgdGhlbiBNQUMgKi8KLQlPVVRMKElOTCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPlJ4Q3RsKSB8IFJYX0NUTF9SWF9FTiwKKwlvdXRsKHJlYWRsKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+UnhDdGwpIHwgUlhfQ1RMX1JYX0VOLAogCSAgICAgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5SeEN0bCk7CiAKLQkvKiBTZXQgT2syVXNlIHRvIGxldCBoYXJkd2FyZSBvd25zIHRoZSBidWZmZXJzICovCi0JT1VUTChPSzJVU0VfUlhfQSB8IE9LMlVTRV9SWF9CIHwgT0syVVNFX1RYX0EgfCBPSzJVU0VfVFhfQiwKLQkgICAgICZscC0+bGFuX3NhYTk3MzBfcmVncy0+T2syVXNlKTsKKwkvKiBTZXQgT2syVXNlIHRvIGxldCBoYXJkd2FyZSBvd24gdGhlIGJ1ZmZlcnMuCSovCisJb3V0bChPSzJVU0VfUlhfQSB8IE9LMlVTRV9SWF9CLCAmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPk9rMlVzZSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTU3Miw4ICs1NzksNyBAQAogCiBzdGF0aWMgaW50IGxhbl9zYWE5NzMwX3R4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGxhbl9zYWE5NzMwX3ByaXZhdGUgKmxwID0KLQkgICAgKHN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICopIGRldi0+cHJpdjsKKwlzdHJ1Y3QgbGFuX3NhYTk3MzBfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXVuc2lnbmVkIGludCAqcFBhY2tldDsKIAl1bnNpZ25lZCBpbnQgdHhfc3RhdHVzOwogCkBAIC01ODEsMTMgKzU4NywxMSBAQAogCQlwcmludGsoImxhbl9zYWE5NzMwX3R4IGludGVycnVwdFxuIik7CiAKIAkvKiBDbGVhciBpbnRlcnJ1cHQuICovCi0JT1VUTChETUFfU1RBVFVTX01BQ19UWF9JTlQsICZscC0+bGFuX3NhYTk3MzBfcmVncy0+RG1hU3RhdHVzKTsKKwlvdXRsKERNQV9TVEFUVVNfTUFDX1RYX0lOVCwgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5EbWFTdGF0dXMpOwogCiAJd2hpbGUgKDEpIHsKLQkJcFBhY2tldCA9Ci0JCSAgICAodW5zaWduZWQgaW50ICopIGxwLT5UeG1CdWZmZXJbbHAtPgotCQkJCQkJICAgUGVuZGluZ1R4bUJ1ZmZlckluZGV4XQotCQkgICAgW2xwLT5QZW5kaW5nVHhtUGFja2V0SW5kZXhdOworCQlwUGFja2V0ID0gbHAtPlR4bUJ1ZmZlcltscC0+UGVuZGluZ1R4bUJ1ZmZlckluZGV4XQorCQkJCSAgICAgICBbbHAtPlBlbmRpbmdUeG1QYWNrZXRJbmRleF07CiAKIAkJLyogR2V0IHN0YXR1cyBvZiBmaXJzdCBwYWNrZXQgdHJhbnNtaXR0ZWQuICovCiAJCXR4X3N0YXR1cyA9IGxlMzJfdG9fY3B1KCpwUGFja2V0KTsKQEAgLTYwNSwyMyArNjA5LDIyIEBACiAJCQlscC0+c3RhdHMudHhfZXJyb3JzKys7CiAJCQlpZiAodHhfc3RhdHVzICYKIAkJCSAgICAoVFhfU1RBVFVTX0VYX0NPTEwgPDwgVFhfU1RBVF9DVExfU1RBVFVTX1NIRikpCi0JCQkJICAgIGxwLT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOworCQkJCWxwLT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOwogCQkJaWYgKHR4X3N0YXR1cyAmCi0JCQkgICAgKFRYX1NUQVRVU19MQVRFX0NPTEwgPDwKLQkJCSAgICAgVFhfU1RBVF9DVExfU1RBVFVTX1NIRikpIGxwLT5zdGF0cy4KLQkgICAgIHR4X3dpbmRvd19lcnJvcnMrKzsKKwkJCSAgICAoVFhfU1RBVFVTX0xBVEVfQ09MTCA8PCBUWF9TVEFUX0NUTF9TVEFUVVNfU0hGKSkKKwkJCQlscC0+c3RhdHMudHhfd2luZG93X2Vycm9ycysrOwogCQkJaWYgKHR4X3N0YXR1cyAmCiAJCQkgICAgKFRYX1NUQVRVU19MX0NBUlIgPDwgVFhfU1RBVF9DVExfU1RBVFVTX1NIRikpCi0JCQkJICAgIGxwLT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOworCQkJCWxwLT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOwogCQkJaWYgKHR4X3N0YXR1cyAmCiAJCQkgICAgKFRYX1NUQVRVU19VTkRFUiA8PCBUWF9TVEFUX0NUTF9TVEFUVVNfU0hGKSkKLQkJCQkgICAgbHAtPnN0YXRzLnR4X2ZpZm9fZXJyb3JzKys7CisJCQkJbHAtPnN0YXRzLnR4X2ZpZm9fZXJyb3JzKys7CiAJCQlpZiAodHhfc3RhdHVzICYKIAkJCSAgICAoVFhfU1RBVFVTX1NRX0VSUiA8PCBUWF9TVEFUX0NUTF9TVEFUVVNfU0hGKSkKLQkJCQkgICAgbHAtPnN0YXRzLnR4X2hlYXJ0YmVhdF9lcnJvcnMrKzsKKwkJCQlscC0+c3RhdHMudHhfaGVhcnRiZWF0X2Vycm9ycysrOwogCiAJCQlscC0+c3RhdHMuY29sbGlzaW9ucyArPQotCQkJICAgIHR4X3N0YXR1cyAmIFRYX1NUQVRVU19UWF9DT0xMX01TSzsKKwkJCQl0eF9zdGF0dXMgJiBUWF9TVEFUVVNfVFhfQ09MTF9NU0s7CiAJCX0KIAogCQkvKiBGcmVlIGJ1ZmZlci4gKi8KQEAgLTYzNiwyMSArNjM5LDE1IEBACiAJCX0KIAl9CiAKLQkvKiBNYWtlIHN1cmUgQSBhbmQgQiBhcmUgYXZhaWxhYmxlIHRvIGhhcmR3YXJlLiAqLwotCU9VVEwoT0syVVNFX1RYX0EgfCBPSzJVU0VfVFhfQiwgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5PazJVc2UpOwotCi0JaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2KSkgewotCQkvKiBUaGUgdHggYnVmZmVyIGlzIG5vIGxvbmdlciBmdWxsLiAqLwotCQluZXRpZl93YWtlX3F1ZXVlKGRldik7Ci0JfQorCS8qIFRoZSB0eCBidWZmZXIgaXMgbm8gbG9uZ2VyIGZ1bGwuICovCisJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgbGFuX3NhYTk3MzBfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgbGFuX3NhYTk3MzBfcHJpdmF0ZSAqbHAgPQotCSAgICAoc3RydWN0IGxhbl9zYWE5NzMwX3ByaXZhdGUgKikgZGV2LT5wcml2OworCXN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJaW50IGxlbiA9IDA7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IDA7CiAJdW5zaWduZWQgaW50IHJ4X3N0YXR1czsKQEAgLTY2MywxNiArNjYwLDEzIEBACiAJCXByaW50aygibGFuX3NhYTk3MzBfcnggaW50ZXJydXB0XG4iKTsKIAogCS8qIENsZWFyIHJlY2VpdmUgaW50ZXJydXB0cy4gKi8KLQlPVVRMKERNQV9TVEFUVVNfTUFDX1JYX0lOVCB8IERNQV9TVEFUVVNfUlhfSU5UIHwKKwlvdXRsKERNQV9TVEFUVVNfTUFDX1JYX0lOVCB8IERNQV9TVEFUVVNfUlhfSU5UIHwKIAkgICAgIERNQV9TVEFUVVNfUlhfVE9fSU5ULCAmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkRtYVN0YXR1cyk7CiAKIAkvKiBBZGRyZXNzIG5leHQgcGFja2V0ICovCi0JaWYgKGxwLT5OZXh0UmN2VG9Vc2VJc0EpCi0JCUJ1ZmZlckluZGV4ID0gMDsKLQllbHNlCi0JCUJ1ZmZlckluZGV4ID0gMTsKKwlCdWZmZXJJbmRleCA9IGxwLT5OZXh0UmN2QnVmZmVySW5kZXg7CiAJUGFja2V0SW5kZXggPSBscC0+TmV4dFJjdlBhY2tldEluZGV4OwotCXBQYWNrZXQgPSAodW5zaWduZWQgaW50ICopIGxwLT5SY3ZCdWZmZXJbQnVmZmVySW5kZXhdW1BhY2tldEluZGV4XTsKKwlwUGFja2V0ID0gbHAtPlJjdkJ1ZmZlcltCdWZmZXJJbmRleF1bUGFja2V0SW5kZXhdOwogCXJ4X3N0YXR1cyA9IGxlMzJfdG9fY3B1KCpwUGFja2V0KTsKIAogCS8qIFByb2Nlc3MgZWFjaCBwYWNrZXQuICovCkBAIC03MTUsNTEgKzcwOSwzOSBAQAogCQkJbHAtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQkJaWYgKHJ4X3N0YXR1cyAmCiAJCQkgICAgKFJYX1NUQVRVU19DUkNfRVJSIDw8IFJYX1NUQVRfQ1RMX1NUQVRVU19TSEYpKQotCQkJCSAgICBscC0+c3RhdHMucnhfY3JjX2Vycm9ycysrOworCQkJCWxwLT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CiAJCQlpZiAocnhfc3RhdHVzICYKLQkJCSAgICAoUlhfU1RBVFVTX0FMSUdOX0VSUiA8PAotCQkJICAgICBSWF9TVEFUX0NUTF9TVEFUVVNfU0hGKSkgbHAtPnN0YXRzLgotCSAgICAgcnhfZnJhbWVfZXJyb3JzKys7CisJCQkgICAgKFJYX1NUQVRVU19BTElHTl9FUlIgPDwgUlhfU1RBVF9DVExfU1RBVFVTX1NIRikpCisJCQkJbHAtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycysrOwogCQkJaWYgKHJ4X3N0YXR1cyAmCiAJCQkgICAgKFJYX1NUQVRVU19PVkVSRkxPVyA8PCBSWF9TVEFUX0NUTF9TVEFUVVNfU0hGKSkKLQkJCQkgICAgbHAtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzKys7CisJCQkJbHAtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzKys7CiAJCQlpZiAocnhfc3RhdHVzICYKIAkJCSAgICAoUlhfU1RBVFVTX0xPTkdfRVJSIDw8IFJYX1NUQVRfQ1RMX1NUQVRVU19TSEYpKQotCQkJCSAgICBscC0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOworCQkJCWxwLT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CiAJCX0KIAogCQkvKiBJbmRpY2F0ZSB3ZSBoYXZlIHByb2Nlc3NlZCB0aGUgYnVmZmVyLiAqLwotCQkqcFBhY2tldCA9Ci0JCSAgICBjcHVfdG9fbGUzMihSWFNGX1JFQURZIDw8IFJYX1NUQVRfQ1RMX09XTkVSX1NIRik7CisJCSpwUGFja2V0ID0gY3B1X3RvX2xlMzIoUlhTRl9SRUFEWSA8PCBSWF9TVEFUX0NUTF9PV05FUl9TSEYpOworCisJCS8qIE1ha2Ugc3VyZSBBIG9yIEIgaXMgYXZhaWxhYmxlIHRvIGhhcmR3YXJlIGFzIGFwcHJvcHJpYXRlLiAqLworCQlvdXRsKEJ1ZmZlckluZGV4ID8gT0syVVNFX1JYX0IgOiBPSzJVU0VfUlhfQSwKKwkJICAgICAmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPk9rMlVzZSk7CiAKIAkJLyogR28gdG8gbmV4dCBwYWNrZXQgaW4gc2VxdWVuY2UuICovCiAJCWxwLT5OZXh0UmN2UGFja2V0SW5kZXgrKzsKIAkJaWYgKGxwLT5OZXh0UmN2UGFja2V0SW5kZXggPj0gTEFOX1NBQTk3MzBfUkNWX1FfU0laRSkgewogCQkJbHAtPk5leHRSY3ZQYWNrZXRJbmRleCA9IDA7Ci0JCQlpZiAoQnVmZmVySW5kZXgpIHsKLQkJCQlscC0+TmV4dFJjdlRvVXNlSXNBID0gMTsKLQkJCX0gZWxzZSB7Ci0JCQkJbHAtPk5leHRSY3ZUb1VzZUlzQSA9IDA7Ci0JCQl9CisJCQlscC0+TmV4dFJjdkJ1ZmZlckluZGV4IF49IDE7CiAJCX0KLQkJT1VUTChPSzJVU0VfUlhfQSB8IE9LMlVTRV9SWF9CLAotCQkgICAgICZscC0+bGFuX3NhYTk3MzBfcmVncy0+T2syVXNlKTsKIAogCQkvKiBBZGRyZXNzIG5leHQgcGFja2V0ICovCi0JCWlmIChscC0+TmV4dFJjdlRvVXNlSXNBKQotCQkJQnVmZmVySW5kZXggPSAwOwotCQllbHNlCi0JCQlCdWZmZXJJbmRleCA9IDE7CisJCUJ1ZmZlckluZGV4ID0gbHAtPk5leHRSY3ZCdWZmZXJJbmRleDsKIAkJUGFja2V0SW5kZXggPSBscC0+TmV4dFJjdlBhY2tldEluZGV4OwotCQlwUGFja2V0ID0KLQkJICAgICh1bnNpZ25lZCBpbnQgKikgbHAtPgotCQkgICAgUmN2QnVmZmVyW0J1ZmZlckluZGV4XVtQYWNrZXRJbmRleF07CisJCXBQYWNrZXQgPSBscC0+UmN2QnVmZmVyW0J1ZmZlckluZGV4XVtQYWNrZXRJbmRleF07CiAJCXJ4X3N0YXR1cyA9IGxlMzJfdG9fY3B1KCpwUGFja2V0KTsKIAl9CiAKLQkvKiBNYWtlIHN1cmUgQSBhbmQgQiBhcmUgYXZhaWxhYmxlIHRvIGhhcmR3YXJlLiAqLwotCU9VVEwoT0syVVNFX1JYX0EgfCBPSzJVU0VfUlhfQiwgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5PazJVc2UpOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTc2Nyw4ICs3NDksNyBAQAogCQkJCSAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKSBkZXZfaWQ7Ci0Jc3RydWN0IGxhbl9zYWE5NzMwX3ByaXZhdGUgKmxwID0KLQkgICAgKHN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICopIGRldi0+cHJpdjsKKwlzdHJ1Y3QgbGFuX3NhYTk3MzBfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJaWYgKGxhbl9zYWE5NzMwX2RlYnVnID4gNSkKIAkJcHJpbnRrKCJsYW5fc2FhOTczMF9pbnRlcnJ1cHRcbiIpOwpAQCAtNzgwLDExICs3NjEsMTEgQEAKIAlldm1fc2FhOTczMF9jbGVhcl9sYW5faW50KGxwKTsKIAogCS8qIFNlcnZpY2UgcGVuZGluZyB0cmFuc21pdCBpbnRlcnJ1cHRzLiAqLwotCWlmIChJTkwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5EbWFTdGF0dXMpICYgRE1BX1NUQVRVU19NQUNfVFhfSU5UKQorCWlmIChyZWFkbCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkRtYVN0YXR1cykgJiBETUFfU1RBVFVTX01BQ19UWF9JTlQpCiAJCWxhbl9zYWE5NzMwX3R4KGRldik7CiAKIAkvKiBTZXJ2aWNlIHBlbmRpbmcgcmVjZWl2ZSBpbnRlcnJ1cHRzLiAqLwotCWlmIChJTkwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5EbWFTdGF0dXMpICYKKwlpZiAocmVhZGwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5EbWFTdGF0dXMpICYKIAkgICAgKERNQV9TVEFUVVNfTUFDX1JYX0lOVCB8IERNQV9TVEFUVVNfUlhfSU5UIHwKIAkgICAgIERNQV9TVEFUVVNfUlhfVE9fSU5UKSkgbGFuX3NhYTk3MzBfcngoZGV2KTsKIApAQCAtNzk0LDE1ICs3NzUsOSBAQAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotc3RhdGljIGludCBsYW5fc2FhOTczMF9vcGVuX2ZhaWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gLUVOT0RFVjsKLX0KLQogc3RhdGljIGludCBsYW5fc2FhOTczMF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGxhbl9zYWE5NzMwX3ByaXZhdGUgKmxwID0KLQkgICAgKHN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICopIGRldi0+cHJpdjsKKwlzdHJ1Y3QgbGFuX3NhYTk3MzBfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJLyogQXNzb2NpYXRlIElSUSB3aXRoIGxhbl9zYWE5NzMwX2ludGVycnVwdCAqLwogCWlmIChyZXF1ZXN0X2lycShkZXYtPmlycSwgJmxhbl9zYWE5NzMwX2ludGVycnVwdCwgMCwgIlNBQTk3MzAgRXRoIiwKQEAgLTgzNCwxNSArODA5LDEzIEBACiAJaW50IFBhY2tldEluZGV4OwogCiAJaWYgKGxhbl9zYWE5NzMwX2RlYnVnID4gNSkKLQkJcHJpbnRrKCJsYW5fc2FhOTczMF93cml0ZTogc2tiPSUwOHhcbiIsCi0JCSAgICAgICAodW5zaWduZWQgaW50KSBza2IpOworCQlwcmludGsoImxhbl9zYWE5NzMwX3dyaXRlOiBza2I9JXBcbiIsIHNrYik7CiAKIAlCdWZmZXJJbmRleCA9IGxwLT5OZXh0VHhtQnVmZmVySW5kZXg7CiAJUGFja2V0SW5kZXggPSBscC0+TmV4dFR4bVBhY2tldEluZGV4OwogCi0JdHhfc3RhdHVzID0KLQkgICAgbGUzMl90b19jcHUoKih1bnNpZ25lZCBpbnQgKikgbHAtPgotCQkJVHhtQnVmZmVyW0J1ZmZlckluZGV4XVtQYWNrZXRJbmRleF0pOworCXR4X3N0YXR1cyA9IGxlMzJfdG9fY3B1KCoodW5zaWduZWQgaW50ICopbHAtPlR4bUJ1ZmZlcltCdWZmZXJJbmRleF0KKwkJCQkJCQkgICAgICBbUGFja2V0SW5kZXhdKTsKIAlpZiAoKHR4X3N0YXR1cyAmIFRYX1NUQVRfQ1RMX09XTkVSX01TSykgIT0KIAkgICAgKFRYU0ZfRU1QVFkgPDwgVFhfU1RBVF9DVExfT1dORVJfU0hGKSkgewogCQlpZiAobGFuX3NhYTk3MzBfZGVidWcgPiA0KQpAQCAtODU4LDI5ICs4MzEsMjkgQEAKIAkJbHAtPk5leHRUeG1CdWZmZXJJbmRleCBePSAxOwogCX0KIAotCXBiUGFja2V0RGF0YSA9Ci0JICAgICh1bnNpZ25lZCBjaGFyICopIGxwLT5UeG1CdWZmZXJbQnVmZmVySW5kZXhdW1BhY2tldEluZGV4XTsKKwlwYlBhY2tldERhdGEgPSBscC0+VHhtQnVmZmVyW0J1ZmZlckluZGV4XVtQYWNrZXRJbmRleF07CiAJcGJQYWNrZXREYXRhICs9IDQ7CiAKIAkvKiBjb3B5IHRoZSBiaXRzICovCiAJbWVtY3B5KHBiUGFja2V0RGF0YSwgcGJEYXRhLCBsZW4pOwogCiAJLyogU2V0IHRyYW5zbWl0IHN0YXR1cyBmb3IgaGFyZHdhcmUgKi8KLQkqKHVuc2lnbmVkIGludCAqKSBscC0+VHhtQnVmZmVyW0J1ZmZlckluZGV4XVtQYWNrZXRJbmRleF0gPQotCSAgICBjcHVfdG9fbGUzMigoVFhTRl9SRUFEWSA8PCBUWF9TVEFUX0NUTF9PV05FUl9TSEYpIHwKLQkJCShUWF9TVEFUX0NUTF9JTlRfQUZURVJfVFggPDwgVFhfU1RBVF9DVExfRlJBTUVfU0hGKQotCQkJfCAobGVuIDw8IFRYX1NUQVRfQ1RMX0xFTkdUSF9TSEYpKTsKKwkqKHVuc2lnbmVkIGludCAqKWxwLT5UeG1CdWZmZXJbQnVmZmVySW5kZXhdW1BhY2tldEluZGV4XSA9CisJCWNwdV90b19sZTMyKChUWFNGX1JFQURZIDw8IFRYX1NUQVRfQ1RMX09XTkVSX1NIRikgfAorCQkJICAgIChUWF9TVEFUX0NUTF9JTlRfQUZURVJfVFggPDwKKwkJCSAgICAgVFhfU1RBVF9DVExfRlJBTUVfU0hGKSB8CisJCQkgICAgKGxlbiA8PCBUWF9TVEFUX0NUTF9MRU5HVEhfU0hGKSk7CiAKLQkvKiBTZXQgaGFyZHdhcmUgdHggYnVmZmVyLiAqLwotCU9VVEwoT0syVVNFX1RYX0EgfCBPSzJVU0VfVFhfQiwgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5PazJVc2UpOworCS8qIE1ha2Ugc3VyZSBBIG9yIEIgaXMgYXZhaWxhYmxlIHRvIGhhcmR3YXJlIGFzIGFwcHJvcHJpYXRlLiAqLworCW91dGwoQnVmZmVySW5kZXggPyBPSzJVU0VfVFhfQiA6IE9LMlVTRV9UWF9BLAorCSAgICAgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5PazJVc2UpOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGxhbl9zYWE5NzMwX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgbGFuX3NhYTk3MzBfcHJpdmF0ZSAqbHAgPQotCSAgICAoc3RydWN0IGxhbl9zYWE5NzMwX3ByaXZhdGUgKikgZGV2LT5wcml2OworCXN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CiAKIAkvKiBUcmFuc21pdHRlciB0aW1lb3V0LCBzZXJpb3VzIHByb2JsZW1zICovCiAJbHAtPnN0YXRzLnR4X2Vycm9ycysrOwpAQCAtODg5LDIwICs4NjIsMTkgQEAKIAlsYW5fc2FhOTczMF9yZXN0YXJ0KGxwKTsKIAogCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwotCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CisJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwogfQogCiBzdGF0aWMgaW50IGxhbl9zYWE5NzMwX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGxhbl9zYWE5NzMwX3ByaXZhdGUgKmxwID0KLQkgICAgKHN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICopIGRldi0+cHJpdjsKKwlzdHJ1Y3QgbGFuX3NhYTk3MzBfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHNrYmxlbjsKIAlpbnQgbGVuOwogCiAJaWYgKGxhbl9zYWE5NzMwX2RlYnVnID4gNCkKLQkJcHJpbnRrKCJTZW5kIHBhY2tldDogc2tiPSUwOHhcbiIsICh1bnNpZ25lZCBpbnQpIHNrYik7CisJCXByaW50aygiU2VuZCBwYWNrZXQ6IHNrYj0lcFxuIiwgc2tiKTsKIAogCXNrYmxlbiA9IHNrYi0+bGVuOwogCkBAIC05MTIsOCArODg0LDcgQEAKIAogCWlmIChsYW5fc2FhOTczMF93cml0ZShscCwgc2tiLCBza2JsZW4pKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7Ci0JCXByaW50aygiRXJyb3Igd2hlbiB3cml0aW5nIHBhY2tldCB0byBjb250cm9sbGVyOiBza2I9JTA4eFxuIiwKLQkJICAgICAodW5zaWduZWQgaW50KSBza2IpOworCQlwcmludGsoIkVycm9yIHdoZW4gd3JpdGluZyBwYWNrZXQgdG8gY29udHJvbGxlcjogc2tiPSVwXG4iLCBza2IpOwogCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJCXJldHVybiAtMTsKIAl9CkBAIC05MjIsNyArODkzLDcgQEAKIAlscC0+c3RhdHMudHhfcGFja2V0cysrOwogCiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7Ci0JbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKKwluZXRpZl93YWtlX3F1ZXVlKGRldik7CiAJZGV2X2tmcmVlX3NrYihza2IpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKQEAgLTkzMiw4ICs5MDMsNyBAQAogCiBzdGF0aWMgaW50IGxhbl9zYWE5NzMwX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGxhbl9zYWE5NzMwX3ByaXZhdGUgKmxwID0KLQkgICAgKHN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICopIGRldi0+cHJpdjsKKwlzdHJ1Y3QgbGFuX3NhYTk3MzBfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJaWYgKGxhbl9zYWE5NzMwX2RlYnVnID4gMSkKIAkJcHJpbnRrKCJsYW5fc2FhOTczMF9jbG9zZTpcbiIpOwpAQCAtOTU1LDMzICs5MjUsMzEgQEAKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqbGFuX3NhYTk3MzBfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlCiAJCQkJCQkgICAgICAqZGV2KQogewotCXN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICpscCA9Ci0JICAgIChzdHJ1Y3QgbGFuX3NhYTk3MzBfcHJpdmF0ZSAqKSBkZXYtPnByaXY7CisJc3RydWN0IGxhbl9zYWE5NzMwX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCXJldHVybiAmbHAtPnN0YXRzOwogfQogCiBzdGF0aWMgdm9pZCBsYW5fc2FhOTczMF9zZXRfbXVsdGljYXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGxhbl9zYWE5NzMwX3ByaXZhdGUgKmxwID0KLQkgICAgKHN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICopIGRldi0+cHJpdjsKKwlzdHJ1Y3QgbGFuX3NhYTk3MzBfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJLyogU3RvcCB0aGUgY29udHJvbGxlciAqLwogCWxhbl9zYWE5NzMwX3N0b3AobHApOwogCiAJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgewogCQkvKiBhY2NlcHQgYWxsIHBhY2tldHMgKi8KLQkJT1VUTChDQU1fQ09OVFJPTF9DT01QX0VOIHwgQ0FNX0NPTlRST0xfU1RBVElPTl9BQ0MgfAorCQlvdXRsKENBTV9DT05UUk9MX0NPTVBfRU4gfCBDQU1fQ09OVFJPTF9TVEFUSU9OX0FDQyB8CiAJCSAgICAgQ0FNX0NPTlRST0xfR1JPVVBfQUNDIHwgQ0FNX0NPTlRST0xfQlJPQURfQUNDLAogCQkgICAgICZscC0+bGFuX3NhYTk3MzBfcmVncy0+Q2FtQ3RsKTsKIAl9IGVsc2UgewogCQlpZiAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgewogCQkJLyogYWNjZXB0IGFsbCBtdWx0aWNhc3QgcGFja2V0cyAqLwotCQkJT1VUTChDQU1fQ09OVFJPTF9DT01QX0VOIHwgQ0FNX0NPTlRST0xfR1JPVVBfQUNDIHwKKwkJCW91dGwoQ0FNX0NPTlRST0xfQ09NUF9FTiB8IENBTV9DT05UUk9MX0dST1VQX0FDQyB8CiAJCQkgICAgIENBTV9DT05UUk9MX0JST0FEX0FDQywKIAkJCSAgICAgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5DYW1DdGwpOwogCQl9IGVsc2UgewotCQkJLyogCisJCQkvKgogCQkJICogV2lsbCBoYW5kbGUgdGhlIG11bHRpY2FzdCBzdHVmZiBsYXRlci4gLWNhcnN0ZW5sCiAJCQkgKi8KIAkJfQpAQCAtOTkzLDkxICs5NjEsODYgQEAKIAogc3RhdGljIHZvaWQgX19kZXZleGl0IHNhYTk3MzBfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKLSAgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CiAKLSAgICAgICAgaWYgKGRldikgewotICAgICAgICAgICAgICAgIHVucmVnaXN0ZXJfbmV0ZGV2KGRldik7Ci0JCWtmcmVlKGRldi0+cHJpdik7Ci0gICAgICAgICAgICAgICAgZnJlZV9uZXRkZXYoZGV2KTsKLSAgICAgICAgICAgICAgICBwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOwotICAgICAgICAgICAgICAgIHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKLSAgICAgICAgICAgICAgICBwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7Ci0gICAgICAgIH0KKwlpZiAoZGV2KSB7CisJCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CisJCWxhbl9zYWE5NzMwX2ZyZWVfYnVmZmVycyhwZGV2LCBscCk7CisJCWlvdW5tYXAobHAtPmxhbl9zYWE5NzMwX3JlZ3MpOworCQlpb3VubWFwKGxwLT5ldm1fc2FhOTczMF9yZWdzKTsKKwkJZnJlZV9uZXRkZXYoZGV2KTsKKwkJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKKwkJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCQlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJfQogfQogCiAKLXN0YXRpYyBpbnQgbGFuX3NhYTk3MzBfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaW9hZGRyLCBpbnQgaXJxKQorc3RhdGljIGludCBsYW5fc2FhOTczMF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCXVuc2lnbmVkIGxvbmcgaW9hZGRyLCBpbnQgaXJxKQogewotCXN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICpscDsKKwlzdHJ1Y3QgbGFuX3NhYTk3MzBfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXVuc2lnbmVkIGNoYXIgZXRoZXJuZXRfYWRkcls2XTsKLQlpbnQgcmV0ID0gMDsKKwlpbnQgcmV0OwogCi0JZGV2LT5vcGVuID0gbGFuX3NhYTk3MzBfb3Blbl9mYWlsOworCWlmIChnZXRfZXRoZXJuZXRfYWRkcihldGhlcm5ldF9hZGRyKSkgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dDsKKwl9CiAKLQlpZiAoZ2V0X2V0aGVybmV0X2FkZHIoZXRoZXJuZXRfYWRkcikpCi0JCXJldHVybiAtRU5PREVWOwotCQogCW1lbWNweShkZXYtPmRldl9hZGRyLCBldGhlcm5ldF9hZGRyLCA2KTsKIAlkZXYtPmJhc2VfYWRkciA9IGlvYWRkcjsKIAlkZXYtPmlycSA9IGlycTsKLQkKLQkvKiAKLQkgKiBNYWtlIGNlcnRhaW4gdGhlIGRhdGEgc3RydWN0dXJlcyB1c2VkIGJ5IHRoZSBjb250cm9sbGVyIGFyZSBhbGlnbmVkIAotCSAqIGFuZCBETUFibGUuIAotCSAqLwotCS8qCi0JICogIFhYWDogdGhhdCBpcyBvYnZpb3VzbHkgYnJva2VuIC0ga2ZyZWUoKSB3b24ndCBiZSBoYXBweSB3aXRoIHVzLgotCSAqLwotCWxwID0gKHN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICopICgoKHVuc2lnbmVkIGxvbmcpCi0JCQkJCSAgICAgIGttYWxsb2Moc2l6ZW9mKCpscCkgKyA3LAotCQkJCQkJICAgICAgR0ZQX0RNQSB8IEdGUF9LRVJORUwpCi0JCQkJCSAgICAgICsgNykgJiB+Nyk7CiAKLQlpZiAoIWxwKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWRldi0+cHJpdiA9IGxwOwotCW1lbXNldChscCwgMCwgc2l6ZW9mKCpscCkpOworCWxwLT5wY2lfZGV2ID0gcGRldjsKIAogCS8qIFNldCBTQUE5NzMwIExBTiBiYXNlIGFkZHJlc3MuICovCi0JbHAtPmxhbl9zYWE5NzMwX3JlZ3MgPSAodF9sYW5fc2FhOTczMF9yZWdtYXAgKikgKGlvYWRkciArCi0JCQkJCQkJIFNBQTk3MzBfTEFOX1JFR1NfQUREUik7CisJbHAtPmxhbl9zYWE5NzMwX3JlZ3MgPSBpb3JlbWFwKGlvYWRkciArIFNBQTk3MzBfTEFOX1JFR1NfQUREUiwKKwkJCQkgICAgICAgU0FBOTczMF9MQU5fUkVHU19TSVpFKTsKKwlpZiAoIWxwLT5sYW5fc2FhOTczMF9yZWdzKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KIAogCS8qIFNldCBTQUE5NzMwIEVWTSBiYXNlIGFkZHJlc3MuICovCi0JbHAtPmV2bV9zYWE5NzMwX3JlZ3MgPSAodF9ldm1fc2FhOTczMF9yZWdtYXAgKikgKGlvYWRkciArCi0JCQkJCQkJIFNBQTk3MzBfRVZNX1JFR1NfQUREUik7CisJbHAtPmV2bV9zYWE5NzMwX3JlZ3MgPSBpb3JlbWFwKGlvYWRkciArIFNBQTk3MzBfRVZNX1JFR1NfQUREUiwKKwkJCQkgICAgICAgU0FBOTczMF9FVk1fUkVHU19TSVpFKTsKKwlpZiAoIWxwLT5ldm1fc2FhOTczMF9yZWdzKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0X2lvdW5tYXBfbGFuOworCX0KIAogCS8qIEFsbG9jYXRlIExBTiBSWC9UWCBmcmFtZSBidWZmZXIgc3BhY2UuICovCi0JLyogRklYTUU6IGEgbGVhayAqLwotCWlmICgocmV0ID0gbGFuX3NhYTk3MzBfYWxsb2NhdGVfYnVmZmVycyhscCkpKQotCQlnb3RvIG91dDsKKwlpZiAoKHJldCA9IGxhbl9zYWE5NzMwX2FsbG9jYXRlX2J1ZmZlcnMocGRldiwgbHApKSkKKwkJZ290byBvdXRfaW91bm1hcDsKIAogCS8qIFN0b3AgTEFOIGNvbnRyb2xsZXIuICovCi0JaWYgKChyZXQgPSBsYW5fc2FhOTczMF9zdG9wKGxwKSkpIAotCQlnb3RvIG91dDsKLQkKKwlpZiAoKHJldCA9IGxhbl9zYWE5NzMwX3N0b3AobHApKSkKKwkJZ290byBvdXRfZnJlZV9jb25zaXN0ZW50OworCiAJLyogSW5pdGlhbGl6ZSBDQU0gcmVnaXN0ZXJzLiAqLwogCWlmICgocmV0ID0gbGFuX3NhYTk3MzBfY2FtX2luaXQoZGV2KSkpCi0JCWdvdG8gb3V0OworCQlnb3RvIG91dF9mcmVlX2NvbnNpc3RlbnQ7CiAKIAkvKiBJbml0aWFsaXplIE1JSSByZWdpc3RlcnMuICovCiAJaWYgKChyZXQgPSBsYW5fc2FhOTczMF9taWlfaW5pdChscCkpKQotCQlnb3RvIG91dDsKKwkJZ290byBvdXRfZnJlZV9jb25zaXN0ZW50OwogCiAJLyogSW5pdGlhbGl6ZSBjb250cm9sIHJlZ2lzdGVycy4gKi8KLQlpZiAoKHJldCA9IGxhbl9zYWE5NzMwX2NvbnRyb2xfaW5pdChscCkpKSAKLQkJZ290byBvdXQ7Ci0gICAgICAgIAorCWlmICgocmV0ID0gbGFuX3NhYTk3MzBfY29udHJvbF9pbml0KGxwKSkpCisJCWdvdG8gb3V0X2ZyZWVfY29uc2lzdGVudDsKKwogCS8qIExvYWQgQ0FNIHJlZ2lzdGVycy4gKi8KLQlpZiAoKHJldCA9IGxhbl9zYWE5NzMwX2NhbV9sb2FkKGxwKSkpIAotCQlnb3RvIG91dDsKLQkKKwlpZiAoKHJldCA9IGxhbl9zYWE5NzMwX2NhbV9sb2FkKGxwKSkpCisJCWdvdG8gb3V0X2ZyZWVfY29uc2lzdGVudDsKKwogCS8qIEluaXRpYWxpemUgRE1BIGNvbnRleHQgcmVnaXN0ZXJzLiAqLwogCWlmICgocmV0ID0gbGFuX3NhYTk3MzBfZG1hX2luaXQobHApKSkKLQkJZ290byBvdXQ7Ci0JCisJCWdvdG8gb3V0X2ZyZWVfY29uc2lzdGVudDsKKwogCXNwaW5fbG9ja19pbml0KCZscC0+bG9jayk7Ci0JCQorCiAJZGV2LT5vcGVuID0gbGFuX3NhYTk3MzBfb3BlbjsKIAlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGxhbl9zYWE5NzMwX3N0YXJ0X3htaXQ7CiAJZGV2LT5zdG9wID0gbGFuX3NhYTk3MzBfY2xvc2U7CkBAIC0xMDg2LDQ0ICsxMDQ5LDQzIEBACiAJZGV2LT50eF90aW1lb3V0ID0gbGFuX3NhYTk3MzBfdHhfdGltZW91dDsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gKEhaID4+IDEpOwogCWRldi0+ZG1hID0gMDsKLQkKLQlyZXQgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKKworCXJldCA9IHJlZ2lzdGVyX25ldGRldiAoZGV2KTsKIAlpZiAocmV0KQotCQlnb3RvIG91dDsKKwkJZ290byBvdXRfZnJlZV9jb25zaXN0ZW50OworCiAJcmV0dXJuIDA7CiAKLSBvdXQ6Ci0Ja2ZyZWUoZGV2LT5wcml2KTsKK291dF9mcmVlX2NvbnNpc3RlbnQ6CisJbGFuX3NhYTk3MzBfZnJlZV9idWZmZXJzKHBkZXYsIGxwKTsKK291dF9pb3VubWFwOgorCWlvdW5tYXAobHAtPmV2bV9zYWE5NzMwX3JlZ3MpOworb3V0X2lvdW5tYXBfbGFuOgorCWlvdW5tYXAobHAtPmxhbl9zYWE5NzMwX3JlZ3MpOworb3V0OgogCXJldHVybiByZXQ7CiB9CiAKIAogc3RhdGljIGludCBfX2RldmluaXQgc2FhOTczMF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCXVuc2lnbmVkIGludCBwY2lfaW9hZGRyOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgcGNpX2lvYWRkcjsKIAlpbnQgZXJyOwogCiAJaWYgKGxhbl9zYWE5NzMwX2RlYnVnID4gMSkKIAkJcHJpbnRrKCJzYWE5NzMwLmM6IFBDSSBiaW9zIGlzIHByZXNlbnQsIGNoZWNraW5nIGZvciBkZXZpY2VzLi4uXG4iKTsKIAotCWVyciA9IC1FTk9NRU07Ci0JZGV2ID0gYWxsb2NfZXRoZXJkZXYoMCk7Ci0JaWYgKCFkZXYpCi0JCWdvdG8gb3V0OwotCi0JU0VUX01PRFVMRV9PV05FUihkZXYpOwotCiAJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7Ci0gICAgICAgIGlmIChlcnIpIHsKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIkNhbm5vdCBlbmFibGUgUENJIGRldmljZSwgYWJvcnRpbmcuXG4iKTsKLSAgICAgICAgICAgICAgICBnb3RvIG91dDE7Ci0gICAgICAgIH0KKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQ2Fubm90IGVuYWJsZSBQQ0kgZGV2aWNlLCBhYm9ydGluZy5cbiIpOworCQlnb3RvIG91dDsKKwl9CiAKIAllcnIgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBkZXYsIERSVl9NT0RVTEVfTkFNRSk7CiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgIkNhbm5vdCBvYnRhaW4gUENJIHJlc291cmNlcywgYWJvcnRpbmcuXG4iKTsKLQkJZ290byBvdXQyOworCQlnb3RvIG91dF9kaXNhYmxlX3BkZXY7CiAJfQogCiAJcGNpX2lycV9saW5lID0gcGRldi0+aXJxOwpAQCAtMTEzMiw0OSArMTA5NCw1NCBAQAogCXBjaV9pb2FkZHIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMSk7CiAJcGNpX3NldF9tYXN0ZXIocGRldik7CiAKLQlwcmludGsoIkZvdW5kIFNBQTk3MzAgKFBDSSkgYXQgJSN4LCBpcnEgJWQuXG4iLAorCXByaW50aygiRm91bmQgU0FBOTczMCAoUENJKSBhdCAlbHgsIGlycSAlZC5cbiIsCiAJICAgICAgIHBjaV9pb2FkZHIsIHBjaV9pcnFfbGluZSk7CiAKLQllcnIgPSBsYW5fc2FhOTczMF9pbml0KGRldiwgcGNpX2lvYWRkciwgcGNpX2lycV9saW5lKTsKKwlkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IGxhbl9zYWE5NzMwX3ByaXZhdGUpKTsKKwlpZiAoIWRldikKKwkJZ290byBvdXRfZGlzYWJsZV9wZGV2OworCisJZXJyID0gbGFuX3NhYTk3MzBfaW5pdChkZXYsIHBkZXYsIHBjaV9pb2FkZHIsIHBjaV9pcnFfbGluZSk7CiAJaWYgKGVycikgewotCQlwcmludGsoIkxhbiBpbml0IGZhaWxlZCIpOwotCQlnb3RvIG91dDI7CisJCXByaW50aygiTEFOIGluaXQgZmFpbGVkIik7CisJCWdvdG8gb3V0X2ZyZWVfbmV0ZGV2OwogCX0KIAogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOwogCVNFVF9ORVRERVZfREVWKGRldiwgJnBkZXYtPmRldik7CiAJcmV0dXJuIDA7Ci0JCi1vdXQyOgotCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKLW91dDE6CisKK291dF9mcmVlX25ldGRldjoKIAlmcmVlX25ldGRldihkZXYpOworb3V0X2Rpc2FibGVfcGRldjoKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiBvdXQ6CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCXJldHVybiBlcnI7CiB9CiAKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHNhYTk3MzBfZHJpdmVyID0gewotCS5uYW1lICAgICAgICAgICA9IERSVl9NT0RVTEVfTkFNRSwKLQkuaWRfdGFibGUgICAgICAgPSBzYWE5NzMwX3BjaV90YmwsCi0JLnByb2JlICAgICAgICAgID0gc2FhOTczMF9pbml0X29uZSwKLQkucmVtb3ZlICAgICAgICAgPSBfX2RldmV4aXRfcChzYWE5NzMwX3JlbW92ZV9vbmUpLAorCS5uYW1lCQk9IERSVl9NT0RVTEVfTkFNRSwKKwkuaWRfdGFibGUJPSBzYWE5NzMwX3BjaV90YmwsCisJLnByb2JlCQk9IHNhYTk3MzBfaW5pdF9vbmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChzYWE5NzMwX3JlbW92ZV9vbmUpLAogfTsKIAogCiBzdGF0aWMgaW50IF9faW5pdCBzYWE5NzMwX2luaXQodm9pZCkKIHsKLSAgICAgICAgcmV0dXJuIHBjaV9tb2R1bGVfaW5pdCgmc2FhOTczMF9kcml2ZXIpOworCXJldHVybiBwY2lfbW9kdWxlX2luaXQoJnNhYTk3MzBfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHNhYTk3MzBfY2xlYW51cCh2b2lkKQogewotICAgICAgICBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnNhYTk3MzBfZHJpdmVyKTsKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnNhYTk3MzBfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoc2FhOTczMF9pbml0KTsKIG1vZHVsZV9leGl0KHNhYTk3MzBfY2xlYW51cCk7CiAKLQotCitNT0RVTEVfQVVUSE9SKCJSYWxmIEJhZWNobGUgPHJhbGZAbGludXgtbWlwcy5vcmc+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlBoaWxpcHMgU0FBOTczMCBldGhlcm5ldCBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrOThsaW4vaC9za2RydjFzdC5oIGIvZHJpdmVycy9uZXQvc2s5OGxpbi9oL3NrZHJ2MXN0LmgKaW5kZXggMzA4NDQwYi4uOTFiOGQ0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2s5OGxpbi9oL3NrZHJ2MXN0LmgKKysrIGIvZHJpdmVycy9uZXQvc2s5OGxpbi9oL3NrZHJ2MXN0LmgKQEAgLTM5LDkgKzM5LDYgQEAKICNpZm5kZWYgX19JTkNfU0tEUlYxU1RfSAogI2RlZmluZSBfX0lOQ19TS0RSVjFTVF9ICiAKLS8qIENoZWNrIGtlcm5lbCB2ZXJzaW9uICovCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgotCiB0eXBlZGVmIHN0cnVjdCBzX0FDCVNLX0FDOwogCiAvKiBTZXQgY2FyZCB2ZXJzaW9ucyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2tfbWNhLmMgYi9kcml2ZXJzL25ldC9za19tY2EuYwppbmRleCA0YzU2YjhkLi5lNWQ2ZDk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za19tY2EuYworKysgYi9kcml2ZXJzL25ldC9za19tY2EuYwpAQCAtOTMsNyArOTMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21jYS1sZWdhY3kuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9za19tY2EuaCBiL2RyaXZlcnMvbmV0L3NrX21jYS5oCmluZGV4IDdlN2M5OTUuLmQ2ZmExODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NrX21jYS5oCisrKyBiL2RyaXZlcnMvbmV0L3NrX21jYS5oCkBAIC0xLDUgKzEsMyBAQAotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KLQogI2lmbmRlZiBfU0tfTUNBX0lOQ0xVREVfCiAjZGVmaW5lIF9TS19NQ0FfSU5DTFVERV8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2tnZS5jIGIvZHJpdmVycy9uZXQvc2tnZS5jCmluZGV4IDU3MmYxMjEuLjU5NmM5M2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NrZ2UuYworKysgYi9kcml2ZXJzL25ldC9za2dlLmMKQEAgLTM3LDEyICszNywxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L21paS5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KIAogI2luY2x1ZGUgInNrZ2UuaCIKIAogI2RlZmluZSBEUlZfTkFNRQkJInNrZ2UiCi0jZGVmaW5lIERSVl9WRVJTSU9OCQkiMS4xIgorI2RlZmluZSBEUlZfVkVSU0lPTgkJIjEuMiIKICNkZWZpbmUgUEZYCQkJRFJWX05BTUUgIiAiCiAKICNkZWZpbmUgREVGQVVMVF9UWF9SSU5HX1NJWkUJMTI4CkBAIC04OCw4ICs4OSw4IEBACiBzdGF0aWMgaW50IHNrZ2VfdXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IHNrZ2VfZG93bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIHNrZ2VfdHhfY2xlYW4oc3RydWN0IHNrZ2VfcG9ydCAqc2tnZSk7Ci1zdGF0aWMgdm9pZCB4bV9waHlfd3JpdGUoc3RydWN0IHNrZ2VfaHcgKmh3LCBpbnQgcG9ydCwgdTE2IHJlZywgdTE2IHZhbCk7Ci1zdGF0aWMgdm9pZCBnbV9waHlfd3JpdGUoc3RydWN0IHNrZ2VfaHcgKmh3LCBpbnQgcG9ydCwgdTE2IHJlZywgdTE2IHZhbCk7CitzdGF0aWMgaW50IHhtX3BoeV93cml0ZShzdHJ1Y3Qgc2tnZV9odyAqaHcsIGludCBwb3J0LCB1MTYgcmVnLCB1MTYgdmFsKTsKK3N0YXRpYyBpbnQgZ21fcGh5X3dyaXRlKHN0cnVjdCBza2dlX2h3ICpodywgaW50IHBvcnQsIHUxNiByZWcsIHUxNiB2YWwpOwogc3RhdGljIHZvaWQgZ2VuZXNpc19nZXRfc3RhdHMoc3RydWN0IHNrZ2VfcG9ydCAqc2tnZSwgdTY0ICpkYXRhKTsKIHN0YXRpYyB2b2lkIHl1a29uX2dldF9zdGF0cyhzdHJ1Y3Qgc2tnZV9wb3J0ICpza2dlLCB1NjQgKmRhdGEpOwogc3RhdGljIHZvaWQgeXVrb25faW5pdChzdHJ1Y3Qgc2tnZV9odyAqaHcsIGludCBwb3J0KTsKQEAgLTEyOSw3ICsxMzAsNyBAQAogCQkgICAgICByZWdzLT5sZW4gLSBCM19SSV9XVE9fUjEpOwogfQogCi0vKiBXYWtlIG9uIExhbiBvbmx5IHN1cHBvcnRlZCBvbiBZdWtvbiBjaHBzIHdpdGggcmV2IDEgb3IgYWJvdmUgKi8KKy8qIFdha2Ugb24gTGFuIG9ubHkgc3VwcG9ydGVkIG9uIFl1a29uIGNoaXBzIHdpdGggcmV2IDEgb3IgYWJvdmUgKi8KIHN0YXRpYyBpbnQgd29sX3N1cHBvcnRlZChjb25zdCBzdHJ1Y3Qgc2tnZV9odyAqaHcpCiB7CiAJcmV0dXJuICEoKGh3LT5jaGlwX2lkID09IENISVBfSURfR0VORVNJUyB8fApAQCAtMTY5LDggKzE3MCw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIERldGVybWluZSBzdXBwb3J0ZWQvYWR2ZXJpc2VkIG1vZGVzIGJhc2VkIG9uIGhhcmR3YXJlLgotICogTm90ZTogZXRodG9vb2wgQURWRVJUSVNFRF94eHggPT0gU1VQUE9SVEVEX3h4eAorLyogRGV0ZXJtaW5lIHN1cHBvcnRlZC9hZHZlcnRpc2VkIG1vZGVzIGJhc2VkIG9uIGhhcmR3YXJlLgorICogTm90ZTogZXRodG9vbCBBRFZFUlRJU0VEX3h4eCA9PSBTVVBQT1JURURfeHh4CiAgKi8KIHN0YXRpYyB1MzIgc2tnZV9zdXBwb3J0ZWRfbW9kZXMoY29uc3Qgc3RydWN0IHNrZ2VfaHcgKmh3KQogewpAQCAtNTMxLDEzICs1MzIsMTMgQEAKIAkJcmV0dXJuIDc4MjE1OyAvKiBvcjogIDc4LjEyNSBNSHogKi8KIH0KIAotLyogQ2hpcCBoeiB0byBtaWNyb3NlY29uZHMgKi8KKy8qIENoaXAgSFogdG8gbWljcm9zZWNvbmRzICovCiBzdGF0aWMgaW5saW5lIHUzMiBza2dlX2NsazJ1c2VjKGNvbnN0IHN0cnVjdCBza2dlX2h3ICpodywgdTMyIHRpY2tzKQogewogCXJldHVybiAodGlja3MgKiAxMDAwKSAvIGh3a2h6KGh3KTsKIH0KIAotLyogTWljcm9zZWNvbmRzIHRvIGNoaXAgaHogKi8KKy8qIE1pY3Jvc2Vjb25kcyB0byBjaGlwIEhaICovCiBzdGF0aWMgaW5saW5lIHUzMiBza2dlX3VzZWNzMmNsayhjb25zdCBzdHJ1Y3Qgc2tnZV9odyAqaHcsIHUzMiB1c2VjKQogewogCXJldHVybiBod2toeihodykgKiB1c2VjIC8gMTAwMDsKQEAgLTg4MywzMiArODg0LDM3IEBACiAJCXByaW50ayhLRVJOX0lORk8gUEZYICIlczogTGluayBpcyBkb3duLlxuIiwgc2tnZS0+bmV0ZGV2LT5uYW1lKTsKIH0KIAotc3RhdGljIHUxNiB4bV9waHlfcmVhZChzdHJ1Y3Qgc2tnZV9odyAqaHcsIGludCBwb3J0LCB1MTYgcmVnKQorc3RhdGljIGludCBfX3htX3BoeV9yZWFkKHN0cnVjdCBza2dlX2h3ICpodywgaW50IHBvcnQsIHUxNiByZWcsIHUxNiAqdmFsKQogewogCWludCBpOwotCXUxNiB2OwogCiAJeG1fd3JpdGUxNihodywgcG9ydCwgWE1fUEhZX0FERFIsIHJlZyB8IGh3LT5waHlfYWRkcik7Ci0JdiA9IHhtX3JlYWQxNihodywgcG9ydCwgWE1fUEhZX0RBVEEpOworCXhtX3JlYWQxNihodywgcG9ydCwgWE1fUEhZX0RBVEEpOwogCiAJLyogTmVlZCB0byB3YWl0IGZvciBleHRlcm5hbCBQSFkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgUEhZX1JFVFJJRVM7IGkrKykgewogCQl1ZGVsYXkoMSk7Ci0JCWlmICh4bV9yZWFkMTYoaHcsIHBvcnQsIFhNX01NVV9DTUQpCi0JCSAgICAmIFhNX01NVV9QSFlfUkRZKQorCQlpZiAoeG1fcmVhZDE2KGh3LCBwb3J0LCBYTV9NTVVfQ01EKSAmIFhNX01NVV9QSFlfUkRZKQogCQkJZ290byByZWFkeTsKIAl9CiAKLQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiJXM6IHBoeSByZWFkIHRpbWVkIG91dFxuIiwKLQkgICAgICAgaHctPmRldltwb3J0XS0+bmFtZSk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIC1FVElNRURPVVQ7CiAgcmVhZHk6Ci0JdiA9IHhtX3JlYWQxNihodywgcG9ydCwgWE1fUEhZX0RBVEEpOworCSp2YWwgPSB4bV9yZWFkMTYoaHcsIHBvcnQsIFhNX1BIWV9EQVRBKTsKIAorCXJldHVybiAwOworfQorCitzdGF0aWMgdTE2IHhtX3BoeV9yZWFkKHN0cnVjdCBza2dlX2h3ICpodywgaW50IHBvcnQsIHUxNiByZWcpCit7CisJdTE2IHYgPSAwOworCWlmIChfX3htX3BoeV9yZWFkKGh3LCBwb3J0LCByZWcsICZ2KSkKKwkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIiVzOiBwaHkgcmVhZCB0aW1lZCBvdXRcbiIsCisJCSAgICAgICBody0+ZGV2W3BvcnRdLT5uYW1lKTsKIAlyZXR1cm4gdjsKIH0KIAotc3RhdGljIHZvaWQgeG1fcGh5X3dyaXRlKHN0cnVjdCBza2dlX2h3ICpodywgaW50IHBvcnQsIHUxNiByZWcsIHUxNiB2YWwpCitzdGF0aWMgaW50IHhtX3BoeV93cml0ZShzdHJ1Y3Qgc2tnZV9odyAqaHcsIGludCBwb3J0LCB1MTYgcmVnLCB1MTYgdmFsKQogewogCWludCBpOwogCkBAIC05MTgsMTkgKzkyNCwxMSBAQAogCQkJZ290byByZWFkeTsKIAkJdWRlbGF5KDEpOwogCX0KLQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiJXM6IHBoeSB3cml0ZSBmYWlsZWQgdG8gY29tZSByZWFkeVxuIiwKLQkgICAgICAgaHctPmRldltwb3J0XS0+bmFtZSk7Ci0KKwlyZXR1cm4gLUVJTzsKIAogIHJlYWR5OgogCXhtX3dyaXRlMTYoaHcsIHBvcnQsIFhNX1BIWV9EQVRBLCB2YWwpOwotCWZvciAoaSA9IDA7IGkgPCBQSFlfUkVUUklFUzsgaSsrKSB7Ci0JCXVkZWxheSgxKTsKLQkJaWYgKCEoeG1fcmVhZDE2KGh3LCBwb3J0LCBYTV9NTVVfQ01EKSAmIFhNX01NVV9QSFlfQlVTWSkpCi0JCQlyZXR1cm47Ci0JfQotCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICIlczogcGh5IHdyaXRlIHRpbWVkIG91dFxuIiwKLQkJICAgICAgIGh3LT5kZXZbcG9ydF0tPm5hbWUpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBnZW5lc2lzX2luaXQoc3RydWN0IHNrZ2VfaHcgKmh3KQpAQCAtMTE2NSw3ICsxMTYzLDcgQEAKIAl4bV9waHlfd3JpdGUoaHcsIHBvcnQsIFBIWV9CQ09NX1BfRVhUX0NUUkwsIGV4dCk7CiAJeG1fcGh5X3dyaXRlKGh3LCBwb3J0LCBQSFlfQkNPTV9DVFJMLCBjdGwpOwogCi0JLyogVXNlIGxpbmsgc3RhdHVzIGNoYW5nZSBpbnRlcnJydXB0ICovCisJLyogVXNlIGxpbmsgc3RhdHVzIGNoYW5nZSBpbnRlcnJ1cHQgKi8KIAl4bV9waHlfd3JpdGUoaHcsIHBvcnQsIFBIWV9CQ09NX0lOVF9NQVNLLCBQSFlfQl9ERUZfTVNLKTsKIAogCWJjb21fY2hlY2tfbGluayhodywgcG9ydCk7CkBAIC0xMjA1LDcgKzEyMDMsNyBAQAogCXNrZ2Vfd3JpdGUzMihodywgQjJfR1BfSU8sIHIpOwogCXNrZ2VfcmVhZDMyKGh3LCBCMl9HUF9JTyk7CiAKLQkvKiBFbmFibGUgR01JSSBpbnRlcmZhYyAqLworCS8qIEVuYWJsZSBHTUlJIGludGVyZmFjZSAqLwogCXhtX3dyaXRlMTYoaHcsIHBvcnQsIFhNX0hXX0NGRywgWE1fSFdfR01JSV9NRCk7CiAKIAliY29tX3BoeV9pbml0KHNrZ2UsIGp1bWJvKTsKQEAgLTEyNTYsNyArMTI1NCw3IEBACiAJICogdGhhdCBqdW1ibyBmcmFtZXMgbGFyZ2VyIHRoYW4gODE5MiBieXRlcyB3aWxsIGJlCiAJICogdHJ1bmNhdGVkLiBEaXNhYmxpbmcgYWxsIGJhZCBmcmFtZSBmaWx0ZXJpbmcgY2F1c2VzCiAJICogdGhlIFJYIEZJRk8gdG8gb3BlcmF0ZSBpbiBzdHJlYW1pbmcgbW9kZSwgaW4gd2hpY2gKLQkgKiBjYXNlIHRoZSBYTUFDIHdpbGwgc3RhcnQgdHJhbnNmZXJpbmcgZnJhbWVzIG91dCBvZiB0aGUKKwkgKiBjYXNlIHRoZSBYTUFDIHdpbGwgc3RhcnQgdHJhbnNmZXJyaW5nIGZyYW1lcyBvdXQgb2YgdGhlCiAJICogUlggRklGTyBhcyBzb29uIGFzIHRoZSBGSUZPIHRocmVzaG9sZCBpcyByZWFjaGVkLgogCSAqLwogCXhtX3dyaXRlMzIoaHcsIHBvcnQsIFhNX01PREUsIFhNX0RFRl9NT0RFKTsKQEAgLTEzMjMsNyArMTMyMSw3IEBACiAJCSAgICAgcG9ydCA9PSAwID8gUEFfQ0xSX1RPX1RYMSA6IFBBX0NMUl9UT19UWDIpOwogCiAJLyoKLQkgKiBJZiB0aGUgdHJhbnNmZXIgc3R1Y2tzIGF0IHRoZSBNQUMgdGhlIFNUT1AgY29tbWFuZCB3aWxsIG5vdAorCSAqIElmIHRoZSB0cmFuc2ZlciBzdGlja3MgYXQgdGhlIE1BQyB0aGUgU1RPUCBjb21tYW5kIHdpbGwgbm90CiAJICogdGVybWluYXRlIGlmIHdlIGRvbid0IGZsdXNoIHRoZSBYTUFDJ3MgdHJhbnNtaXQgRklGTyAhCiAJICovCiAJeG1fd3JpdGUzMihodywgcG9ydCwgWE1fTU9ERSwKQEAgLTE0MDAsNDIgKzEzOTgsNiBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgZ21fcGh5X3dyaXRlKHN0cnVjdCBza2dlX2h3ICpodywgaW50IHBvcnQsIHUxNiByZWcsIHUxNiB2YWwpCi17Ci0JaW50IGk7Ci0KLQlnbWFfd3JpdGUxNihodywgcG9ydCwgR01fU01JX0RBVEEsIHZhbCk7Ci0JZ21hX3dyaXRlMTYoaHcsIHBvcnQsIEdNX1NNSV9DVFJMLAotCQkJIEdNX1NNSV9DVF9QSFlfQUQoaHctPnBoeV9hZGRyKSB8IEdNX1NNSV9DVF9SRUdfQUQocmVnKSk7Ci0JZm9yIChpID0gMDsgaSA8IFBIWV9SRVRSSUVTOyBpKyspIHsKLQkJdWRlbGF5KDEpOwotCi0JCWlmICghKGdtYV9yZWFkMTYoaHcsIHBvcnQsIEdNX1NNSV9DVFJMKSAmIEdNX1NNSV9DVF9CVVNZKSkKLQkJCWJyZWFrOwotCX0KLX0KLQotc3RhdGljIHUxNiBnbV9waHlfcmVhZChzdHJ1Y3Qgc2tnZV9odyAqaHcsIGludCBwb3J0LCB1MTYgcmVnKQotewotCWludCBpOwotCi0JZ21hX3dyaXRlMTYoaHcsIHBvcnQsIEdNX1NNSV9DVFJMLAotCQkJIEdNX1NNSV9DVF9QSFlfQUQoaHctPnBoeV9hZGRyKQotCQkJIHwgR01fU01JX0NUX1JFR19BRChyZWcpIHwgR01fU01JX0NUX09QX1JEKTsKLQotCWZvciAoaSA9IDA7IGkgPCBQSFlfUkVUUklFUzsgaSsrKSB7Ci0JCXVkZWxheSgxKTsKLQkJaWYgKGdtYV9yZWFkMTYoaHcsIHBvcnQsIEdNX1NNSV9DVFJMKSAmIEdNX1NNSV9DVF9SRF9WQUwpCi0JCQlnb3RvIHJlYWR5OwotCX0KLQotCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICIlczogcGh5IHJlYWQgdGltZW91dFxuIiwKLQkgICAgICAgaHctPmRldltwb3J0XS0+bmFtZSk7Ci0JcmV0dXJuIDA7Ci0gcmVhZHk6Ci0JcmV0dXJuIGdtYV9yZWFkMTYoaHcsIHBvcnQsIEdNX1NNSV9EQVRBKTsKLX0KLQogc3RhdGljIHZvaWQgZ2VuZXNpc19saW5rX3VwKHN0cnVjdCBza2dlX3BvcnQgKnNrZ2UpCiB7CiAJc3RydWN0IHNrZ2VfaHcgKmh3ID0gc2tnZS0+aHc7CkBAIC0xNTQ5LDcgKzE1MTEsNTUgQEAKIAogfQogCi0vKiBNYXJ2ZWxsIFBoeSBJbml0YWlsaXphdGlvbiAqLworc3RhdGljIGludCBnbV9waHlfd3JpdGUoc3RydWN0IHNrZ2VfaHcgKmh3LCBpbnQgcG9ydCwgdTE2IHJlZywgdTE2IHZhbCkKK3sKKwlpbnQgaTsKKworCWdtYV93cml0ZTE2KGh3LCBwb3J0LCBHTV9TTUlfREFUQSwgdmFsKTsKKwlnbWFfd3JpdGUxNihodywgcG9ydCwgR01fU01JX0NUUkwsCisJCQkgR01fU01JX0NUX1BIWV9BRChody0+cGh5X2FkZHIpIHwgR01fU01JX0NUX1JFR19BRChyZWcpKTsKKwlmb3IgKGkgPSAwOyBpIDwgUEhZX1JFVFJJRVM7IGkrKykgeworCQl1ZGVsYXkoMSk7CisKKwkJaWYgKCEoZ21hX3JlYWQxNihodywgcG9ydCwgR01fU01JX0NUUkwpICYgR01fU01JX0NUX0JVU1kpKQorCQkJcmV0dXJuIDA7CisJfQorCisJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIiVzOiBwaHkgd3JpdGUgdGltZW91dFxuIiwKKwkgICAgICAgaHctPmRldltwb3J0XS0+bmFtZSk7CisJcmV0dXJuIC1FSU87Cit9CisKK3N0YXRpYyBpbnQgX19nbV9waHlfcmVhZChzdHJ1Y3Qgc2tnZV9odyAqaHcsIGludCBwb3J0LCB1MTYgcmVnLCB1MTYgKnZhbCkKK3sKKwlpbnQgaTsKKworCWdtYV93cml0ZTE2KGh3LCBwb3J0LCBHTV9TTUlfQ1RSTCwKKwkJCSBHTV9TTUlfQ1RfUEhZX0FEKGh3LT5waHlfYWRkcikKKwkJCSB8IEdNX1NNSV9DVF9SRUdfQUQocmVnKSB8IEdNX1NNSV9DVF9PUF9SRCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgUEhZX1JFVFJJRVM7IGkrKykgeworCQl1ZGVsYXkoMSk7CisJCWlmIChnbWFfcmVhZDE2KGh3LCBwb3J0LCBHTV9TTUlfQ1RSTCkgJiBHTV9TTUlfQ1RfUkRfVkFMKQorCQkJZ290byByZWFkeTsKKwl9CisKKwlyZXR1cm4gLUVUSU1FRE9VVDsKKyByZWFkeToKKwkqdmFsID0gZ21hX3JlYWQxNihodywgcG9ydCwgR01fU01JX0RBVEEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdTE2IGdtX3BoeV9yZWFkKHN0cnVjdCBza2dlX2h3ICpodywgaW50IHBvcnQsIHUxNiByZWcpCit7CisJdTE2IHYgPSAwOworCWlmIChfX2dtX3BoeV9yZWFkKGh3LCBwb3J0LCByZWcsICZ2KSkKKwkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIiVzOiBwaHkgcmVhZCB0aW1lb3V0XG4iLAorCSAgICAgICBody0+ZGV2W3BvcnRdLT5uYW1lKTsKKwlyZXR1cm4gdjsKK30KKworLyogTWFydmVsbCBQaHkgSW5pdGlhbGl6YXRpb24gKi8KIHN0YXRpYyB2b2lkIHl1a29uX2luaXQoc3RydWN0IHNrZ2VfaHcgKmh3LCBpbnQgcG9ydCkKIHsKIAlzdHJ1Y3Qgc2tnZV9wb3J0ICpza2dlID0gbmV0ZGV2X3ByaXYoaHctPmRldltwb3J0XSk7CkBAIC0xNzk0LDYgKzE4MDQsMjUgQEAKIAlza2dlX3dyaXRlMTYoaHcsIFNLX1JFRyhwb3J0LCBUWF9HTUZfQ1RSTF9UKSwgR01GX09QRVJfT04pOwogfQogCisvKiBHbyBpbnRvIHBvd2VyIGRvd24gbW9kZSAqLworc3RhdGljIHZvaWQgeXVrb25fc3VzcGVuZChzdHJ1Y3Qgc2tnZV9odyAqaHcsIGludCBwb3J0KQoreworCXUxNiBjdHJsOworCisJY3RybCA9IGdtX3BoeV9yZWFkKGh3LCBwb3J0LCBQSFlfTUFSVl9QSFlfQ1RSTCk7CisJY3RybCB8PSBQSFlfTV9QQ19QT0xfUl9ESVM7CisJZ21fcGh5X3dyaXRlKGh3LCBwb3J0LCBQSFlfTUFSVl9QSFlfQ1RSTCwgY3RybCk7CisKKwljdHJsID0gZ21fcGh5X3JlYWQoaHcsIHBvcnQsIFBIWV9NQVJWX0NUUkwpOworCWN0cmwgfD0gUEhZX0NUX1JFU0VUOworCWdtX3BoeV93cml0ZShodywgcG9ydCwgUEhZX01BUlZfQ1RSTCwgY3RybCk7CisKKwkvKiBzd2l0Y2ggSUVFRSBjb21wYXRpYmxlIHBvd2VyIGRvd24gbW9kZSBvbiAqLworCWN0cmwgPSBnbV9waHlfcmVhZChodywgcG9ydCwgUEhZX01BUlZfQ1RSTCk7CisJY3RybCB8PSBQSFlfQ1RfUERPV047CisJZ21fcGh5X3dyaXRlKGh3LCBwb3J0LCBQSFlfTUFSVl9DVFJMLCBjdHJsKTsKK30KKwogc3RhdGljIHZvaWQgeXVrb25fc3RvcChzdHJ1Y3Qgc2tnZV9wb3J0ICpza2dlKQogewogCXN0cnVjdCBza2dlX2h3ICpodyA9IHNrZ2UtPmh3OwpAQCAtMTgwNywxNCArMTgzNiw3IEBACiAJCQkgJiB+KEdNX0dQQ1JfVFhfRU5BfEdNX0dQQ1JfUlhfRU5BKSk7CiAJZ21hX3JlYWQxNihodywgcG9ydCwgR01fR1BfQ1RSTCk7CiAKLQlpZiAoaHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9ZVUtPTl9MSVRFICYmCi0JICAgIGh3LT5jaGlwX3JldiA+PSBDSElQX1JFVl9ZVV9MSVRFX0EzKSB7Ci0JCXUzMiBpbyA9IHNrZ2VfcmVhZDMyKGh3LCBCMl9HUF9JTyk7Ci0KLQkJaW8gfD0gR1BfRElSXzkgfCBHUF9JT185OwotCQlza2dlX3dyaXRlMzIoaHcsIEIyX0dQX0lPLCBpbyk7Ci0JCXNrZ2VfcmVhZDMyKGh3LCBCMl9HUF9JTyk7Ci0JfQorCXl1a29uX3N1c3BlbmQoaHcsIHBvcnQpOwogCiAJLyogc2V0IEdQSFkgQ29udHJvbCByZXNldCAqLwogCXNrZ2Vfd3JpdGU4KGh3LCBTS19SRUcocG9ydCwgR1BIWV9DVFJMKSwgR1BDX1JTVF9TRVQpOwpAQCAtMTk5Nyw2ICsyMDE5LDUxIEBACiAJLyogWFhYIHJlc3RhcnQgYXV0b25lZ290aWF0aW9uPyAqLwogfQogCisvKiBCYXNpYyBNSUkgc3VwcG9ydCAqLworc3RhdGljIGludCBza2dlX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLCBpbnQgY21kKQoreworCXN0cnVjdCBtaWlfaW9jdGxfZGF0YSAqZGF0YSA9IGlmX21paShpZnIpOworCXN0cnVjdCBza2dlX3BvcnQgKnNrZ2UgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBza2dlX2h3ICpodyA9IHNrZ2UtPmh3OworCWludCBlcnIgPSAtRU9QTk9UU1VQUDsKKworCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQorCQlyZXR1cm4gLUVOT0RFVjsJLyogUGh5IHN0aWxsIGluIHJlc2V0ICovCisKKwlzd2l0Y2goY21kKSB7CisJY2FzZSBTSU9DR01JSVBIWToKKwkJZGF0YS0+cGh5X2lkID0gaHctPnBoeV9hZGRyOworCisJCS8qIGZhbGx0aHJ1ICovCisJY2FzZSBTSU9DR01JSVJFRzogeworCQl1MTYgdmFsID0gMDsKKwkJc3Bpbl9sb2NrX2JoKCZody0+cGh5X2xvY2spOworCQlpZiAoaHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9HRU5FU0lTKQorCQkJZXJyID0gX194bV9waHlfcmVhZChodywgc2tnZS0+cG9ydCwgZGF0YS0+cmVnX251bSAmIDB4MWYsICZ2YWwpOworCQllbHNlCisJCQllcnIgPSBfX2dtX3BoeV9yZWFkKGh3LCBza2dlLT5wb3J0LCBkYXRhLT5yZWdfbnVtICYgMHgxZiwgJnZhbCk7CisJCXNwaW5fdW5sb2NrX2JoKCZody0+cGh5X2xvY2spOworCQlkYXRhLT52YWxfb3V0ID0gdmFsOworCQlicmVhazsKKwl9CisKKwljYXNlIFNJT0NTTUlJUkVHOgorCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCisJCQlyZXR1cm4gLUVQRVJNOworCisJCXNwaW5fbG9ja19iaCgmaHctPnBoeV9sb2NrKTsKKwkJaWYgKGh3LT5jaGlwX2lkID09IENISVBfSURfR0VORVNJUykKKwkJCWVyciA9IHhtX3BoeV93cml0ZShodywgc2tnZS0+cG9ydCwgZGF0YS0+cmVnX251bSAmIDB4MWYsCisJCQkJICAgZGF0YS0+dmFsX2luKTsKKwkJZWxzZQorCQkJZXJyID0gZ21fcGh5X3dyaXRlKGh3LCBza2dlLT5wb3J0LCBkYXRhLT5yZWdfbnVtICYgMHgxZiwKKwkJCQkgICBkYXRhLT52YWxfaW4pOworCQlzcGluX3VubG9ja19iaCgmaHctPnBoeV9sb2NrKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiBlcnI7Cit9CisKIHN0YXRpYyB2b2lkIHNrZ2VfcmFtc2V0KHN0cnVjdCBza2dlX2h3ICpodywgdTE2IHEsIHUzMiBzdGFydCwgc2l6ZV90IGxlbikKIHsKIAl1MzIgZW5kOwpAQCAtMjA4OSw3ICsyMTU2LDcgQEAKIAlody0+aW50cl9tYXNrIHw9IHBvcnRpcnFtYXNrW3BvcnRdOwogCXNrZ2Vfd3JpdGUzMihodywgQjBfSU1TSywgaHctPmludHJfbWFzayk7CiAKLQkvKiBJbml0aWFsemUgTUFDICovCisJLyogSW5pdGlhbGl6ZSBNQUMgKi8KIAlzcGluX2xvY2tfYmgoJmh3LT5waHlfbG9jayk7CiAJaWYgKGh3LT5jaGlwX2lkID09IENISVBfSURfR0VORVNJUykKIAkJZ2VuZXNpc19tYWNfaW5pdChodywgcG9ydCk7CkBAIC0yNDA5LDcgKzI0NzYsNyBAQAogCXJlZyA9IGdtYV9yZWFkMTYoaHcsIHBvcnQsIEdNX1JYX0NUUkwpOwogCXJlZyB8PSBHTV9SWENSX1VDRl9FTkE7CiAKLQlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSAJCS8qIHByb21pc2Npb3VzICovCisJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgCQkvKiBwcm9taXNjdW91cyAqLwogCQlyZWcgJj0gfihHTV9SWENSX1VDRl9FTkEgfCBHTV9SWENSX01DRl9FTkEpOwogCWVsc2UgaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpCS8qIGFsbCBtdWx0aWNhc3QgKi8KIAkJbWVtc2V0KGZpbHRlciwgMHhmZiwgc2l6ZW9mKGZpbHRlcikpOwpAQCAtMjU2MCw3ICsyNjI3LDcgQEAKIAl1bnNpZ25lZCBpbnQgdG9fZG8gPSBtaW4oZGV2LT5xdW90YSwgKmJ1ZGdldCk7CiAJdW5zaWduZWQgaW50IHdvcmtfZG9uZSA9IDA7CiAKLQlmb3IgKGUgPSByaW5nLT50b19jbGVhbjsgd29ya19kb25lIDwgdG9fZG87IGUgPSBlLT5uZXh0KSB7CisJZm9yIChlID0gcmluZy0+dG9fY2xlYW47IHByZWZldGNoKGUtPm5leHQpLCB3b3JrX2RvbmUgPCB0b19kbzsgZSA9IGUtPm5leHQpIHsKIAkJc3RydWN0IHNrZ2VfcnhfZGVzYyAqcmQgPSBlLT5kZXNjOwogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCQl1MzIgY29udHJvbDsKQEAgLTI1OTMsMTEgKzI2NjAsMTEgQEAKIAlpZiAod29ya19kb25lID49ICB0b19kbykKIAkJcmV0dXJuIDE7IC8qIG5vdCBkb25lICovCiAKLQlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCV9fbmV0aWZfcnhfY29tcGxldGUoZGV2KTsKKwluZXRpZl9yeF9jb21wbGV0ZShkZXYpOwogCWh3LT5pbnRyX21hc2sgfD0gcG9ydGlycW1hc2tbc2tnZS0+cG9ydF07CiAJc2tnZV93cml0ZTMyKGh3LCBCMF9JTVNLLCBody0+aW50cl9tYXNrKTsKLQlsb2NhbF9pcnFfZW5hYmxlKCk7CisJc2tnZV9yZWFkMzIoaHcsIEIwX0lNU0spOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI2MDksNyArMjY3Niw3IEBACiAJc3RydWN0IHNrZ2VfZWxlbWVudCAqZTsKIAogCXNwaW5fbG9jaygmc2tnZS0+dHhfbG9jayk7Ci0JZm9yIChlID0gcmluZy0+dG9fY2xlYW47IGUgIT0gcmluZy0+dG9fdXNlOyBlID0gZS0+bmV4dCkgeworCWZvciAoZSA9IHJpbmctPnRvX2NsZWFuOyBwcmVmZXRjaChlLT5uZXh0KSwgZSAhPSByaW5nLT50b191c2U7IGUgPSBlLT5uZXh0KSB7CiAJCXN0cnVjdCBza2dlX3R4X2Rlc2MgKnRkID0gZS0+ZGVzYzsKIAkJdTMyIGNvbnRyb2w7CiAKQEAgLTI3MzIsNyArMjc5OSw3IEBACiB9CiAKIC8qCi0gKiBJbnRlcnJydXB0IGZyb20gUEhZIGFyZSBoYW5kbGVkIGluIHRhc2tsZXQgKHNvZnQgaXJxKQorICogSW50ZXJydXB0IGZyb20gUEhZIGFyZSBoYW5kbGVkIGluIHRhc2tsZXQgKHNvZnQgaXJxKQogICogYmVjYXVzZSBhY2Nlc3NpbmcgcGh5IHJlZ2lzdGVycyByZXF1aXJlcyBzcGluIHdhaXQgd2hpY2ggbWlnaHQKICAqIGNhdXNlIGV4Y2VzcyBpbnRlcnJ1cHQgbGF0ZW5jeS4KICAqLwpAQCAtMjc2Miw2ICsyODI5LDE0IEBACiAJbG9jYWxfaXJxX2VuYWJsZSgpOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgc2tnZV93YWtldXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc2tnZV9wb3J0ICpza2dlID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCXByZWZldGNoKHNrZ2UtPnJ4X3JpbmcudG9fY2xlYW4pOworCW5ldGlmX3J4X3NjaGVkdWxlKGRldik7Cit9CisKIHN0YXRpYyBpcnFyZXR1cm5fdCBza2dlX2ludHIoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlzdHJ1Y3Qgc2tnZV9odyAqaHcgPSBkZXZfaWQ7CkBAIC0yNzczLDEyICsyODQ4LDEyIEBACiAJc3RhdHVzICY9IGh3LT5pbnRyX21hc2s7CiAJaWYgKHN0YXR1cyAmIElTX1IxX0YpIHsKIAkJaHctPmludHJfbWFzayAmPSB+SVNfUjFfRjsKLQkJbmV0aWZfcnhfc2NoZWR1bGUoaHctPmRldlswXSk7CisJCXNrZ2Vfd2FrZXVwKGh3LT5kZXZbMF0pOwogCX0KIAogCWlmIChzdGF0dXMgJiBJU19SMl9GKSB7CiAJCWh3LT5pbnRyX21hc2sgJj0gfklTX1IyX0Y7Ci0JCW5ldGlmX3J4X3NjaGVkdWxlKGh3LT5kZXZbMV0pOworCQlza2dlX3dha2V1cChody0+ZGV2WzFdKTsKIAl9CiAKIAlpZiAoc3RhdHVzICYgSVNfWEExX0YpCkBAIC0yODkzLDYgKzI5NjgsNyBAQAogICovCiBzdGF0aWMgaW50IHNrZ2VfcmVzZXQoc3RydWN0IHNrZ2VfaHcgKmh3KQogeworCXUzMiByZWc7CiAJdTE2IGN0c3Q7CiAJdTggdDgsIG1hY19jZmcsIHBtZF90eXBlLCBwaHlfdHlwZTsKIAlpbnQgaTsKQEAgLTI5NzEsNiArMzA0Nyw3IEBACiAJCS8qIHN3aXRjaCBwb3dlciB0byBWQ0MgKFdBIGZvciBWQVVYIHByb2JsZW0pICovCiAJCXNrZ2Vfd3JpdGU4KGh3LCBCMF9QT1dFUl9DVFJMLAogCQkJICAgIFBDX1ZBVVhfRU5BIHwgUENfVkNDX0VOQSB8IFBDX1ZBVVhfT0ZGIHwgUENfVkNDX09OKTsKKwogCQkvKiBhdm9pZCBib2FyZHMgd2l0aCBzdHVjayBIYXJkd2FyZSBlcnJvciBiaXRzICovCiAJCWlmICgoc2tnZV9yZWFkMzIoaHcsIEIwX0lTUkMpICYgSVNfSFdfRVJSKSAmJgogCQkgICAgKHNrZ2VfcmVhZDMyKGh3LCBCMF9IV0VfSVNSQykgJiBJU19JUlFfU0VOU09SKSkgewpAQCAtMjk3OCw2ICszMDU1LDE0IEBACiAJCQlody0+aW50cl9tYXNrICY9IH5JU19IV19FUlI7CiAJCX0KIAorCQkvKiBDbGVhciBQSFkgQ09NQSAqLworCQlza2dlX3dyaXRlOChodywgQjJfVFNUX0NUUkwxLCBUU1RfQ0ZHX1dSSVRFX09OKTsKKwkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGh3LT5wZGV2LCBQQ0lfREVWX1JFRzEsICZyZWcpOworCQlyZWcgJj0gflBDSV9QSFlfQ09NQTsKKwkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChody0+cGRldiwgUENJX0RFVl9SRUcxLCByZWcpOworCQlza2dlX3dyaXRlOChodywgQjJfVFNUX0NUUkwxLCBUU1RfQ0ZHX1dSSVRFX09GRik7CisKKwogCQlmb3IgKGkgPSAwOyBpIDwgaHctPnBvcnRzOyBpKyspIHsKIAkJCXNrZ2Vfd3JpdGUxNihodywgU0tfUkVHKGksIEdNQUNfTElOS19DVFJMKSwgR01MQ19SU1RfU0VUKTsKIAkJCXNrZ2Vfd3JpdGUxNihodywgU0tfUkVHKGksIEdNQUNfTElOS19DVFJMKSwgR01MQ19SU1RfQ0xSKTsKQEAgLTMwNDgsNiArMzEzMyw3IEBACiAJU0VUX05FVERFVl9ERVYoZGV2LCAmaHctPnBkZXYtPmRldik7CiAJZGV2LT5vcGVuID0gc2tnZV91cDsKIAlkZXYtPnN0b3AgPSBza2dlX2Rvd247CisJZGV2LT5kb19pb2N0bCA9IHNrZ2VfaW9jdGw7CiAJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBza2dlX3htaXRfZnJhbWU7CiAJZGV2LT5nZXRfc3RhdHMgPSBza2dlX2dldF9zdGF0czsKIAlpZiAoaHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9HRU5FU0lTKQpAQCAtMzE0Nyw3ICszMjMzLDcgQEAKIAl9CiAKICNpZmRlZiBfX0JJR19FTkRJQU4KLQkvKiBieXRlIHN3YXAgZGVjcmlwdG9ycyBpbiBoYXJkd2FyZSAqLworCS8qIGJ5dGUgc3dhcCBkZXNjcmlwdG9ycyBpbiBoYXJkd2FyZSAqLwogCXsKIAkJdTMyIHJlZzsKIApAQCAtMzE1OCwxNCArMzI0NCwxMyBAQAogI2VuZGlmCiAKIAllcnIgPSAtRU5PTUVNOwotCWh3ID0ga21hbGxvYyhzaXplb2YoKmh3KSwgR0ZQX0tFUk5FTCk7CisJaHcgPSBremFsbG9jKHNpemVvZigqaHcpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWh3KSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBjYW5ub3QgYWxsb2NhdGUgaGFyZHdhcmUgc3RydWN0XG4iLAogCQkgICAgICAgcGNpX25hbWUocGRldikpOwogCQlnb3RvIGVycl9vdXRfZnJlZV9yZWdpb25zOwogCX0KIAotCW1lbXNldChodywgMCwgc2l6ZW9mKCpodykpOwogCWh3LT5wZGV2ID0gcGRldjsKIAlzcGluX2xvY2tfaW5pdCgmaHctPnBoeV9sb2NrKTsKIAl0YXNrbGV0X2luaXQoJmh3LT5leHRfdGFza2xldCwgc2tnZV9leHRpcnEsICh1bnNpZ25lZCBsb25nKSBodyk7CkBAIC0zMTg4LDcgKzMyNzMsNyBAQAogCWlmIChlcnIpCiAJCWdvdG8gZXJyX291dF9mcmVlX2lycTsKIAotCXByaW50ayhLRVJOX0lORk8gUEZYICJhZGRyIDB4JWx4IGlycSAlZCBjaGlwICVzIHJldiAlZFxuIiwKKwlwcmludGsoS0VSTl9JTkZPIFBGWCBEUlZfVkVSU0lPTiAiIGFkZHIgMHglbHggaXJxICVkIGNoaXAgJXMgcmV2ICVkXG4iLAogCSAgICAgICBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCksIHBkZXYtPmlycSwKIAkgICAgICAgc2tnZV9ib2FyZF9uYW1lKGh3KSwgaHctPmNoaXBfcmV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2tnZS5oIGIvZHJpdmVycy9uZXQvc2tnZS5oCmluZGV4IDcyYzE3NWIuLmVlMTIzYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NrZ2UuaAorKysgYi9kcml2ZXJzL25ldC9za2dlLmgKQEAgLTYsNiArNiw4IEBACiAKIC8qIFBDSSBjb25maWcgcmVnaXN0ZXJzICovCiAjZGVmaW5lIFBDSV9ERVZfUkVHMQkweDQwCisjZGVmaW5lICBQQ0lfUEhZX0NPTUEJMHg4MDAwMDAwCisjZGVmaW5lICBQQ0lfVklPCTB4MjAwMDAwMAogI2RlZmluZSBQQ0lfREVWX1JFRzIJMHg0NAogI2RlZmluZSAgUENJX1JFVl9ERVNDCSAweDQKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc21jOTF4LmMgYi9kcml2ZXJzL25ldC9zbWM5MXguYwppbmRleCA3NGQ1ZjFhLi5jOTFlMmU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zbWM5MXguYworKysgYi9kcml2ZXJzL25ldC9zbWM5MXguYwpAQCAtMjE4Myw5ICsyMTgzLDggQEAKICAqCTAgLS0+IHRoZXJlIGlzIGEgZGV2aWNlCiAgKglhbnl0aGluZyBlbHNlLCBlcnJvcgogICovCi1zdGF0aWMgaW50IHNtY19kcnZfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBzbWNfZHJ2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2OwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCXVuc2lnbmVkIGludCBfX2lvbWVtICphZGRyOwpAQCAtMjIxMiw3ICsyMjExLDcgQEAKIAkJZ290byBvdXRfcmVsZWFzZV9pbzsKIAl9CiAJU0VUX01PRFVMRV9PV05FUihuZGV2KTsKLQlTRVRfTkVUREVWX0RFVihuZGV2LCBkZXYpOworCVNFVF9ORVRERVZfREVWKG5kZXYsICZwZGV2LT5kZXYpOwogCiAJbmRldi0+ZG1hID0gKHVuc2lnbmVkIGNoYXIpLTE7CiAJbmRldi0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKQEAgLTIyMzMsNyArMjIzMiw3IEBACiAJCWdvdG8gb3V0X3JlbGVhc2VfYXR0cmliOwogCX0KIAotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIG5kZXYpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG5kZXYpOwogCXJldCA9IHNtY19wcm9iZShuZGV2LCBhZGRyKTsKIAlpZiAocmV0ICE9IDApCiAJCWdvdG8gb3V0X2lvdW5tYXA7CkBAIC0yMjQ5LDcgKzIyNDgsNyBAQAogCXJldHVybiAwOwogCiAgb3V0X2lvdW5tYXA6Ci0JZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAJaW91bm1hcChhZGRyKTsKICBvdXRfcmVsZWFzZV9hdHRyaWI6CiAJc21jX3JlbGVhc2VfYXR0cmliKHBkZXYpOwpAQCAtMjI2MywxNCArMjI2MiwxMyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgc21jX2Rydl9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBzbWNfZHJ2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IHNtY19sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCiAJdW5yZWdpc3Rlcl9uZXRkZXYobmRldik7CiAKQEAgLTIyOTUsOSArMjI5Myw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc21jX2Rydl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBzbWNfZHJ2X3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKIAlpZiAobmRldikgewogCQlpZiAobmV0aWZfcnVubmluZyhuZGV2KSkgewpAQCAtMjMwOSwxNCArMjMwNywxMyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNtY19kcnZfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgc21jX2Rydl9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAogCWlmIChuZGV2KSB7CiAJCXN0cnVjdCBzbWNfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYobmRldik7Ci0JCXNtY19lbmFibGVfZGV2aWNlKHBkZXYpOworCQlzbWNfZW5hYmxlX2RldmljZShkZXYpOwogCQlpZiAobmV0aWZfcnVubmluZyhuZGV2KSkgewogCQkJc21jX3Jlc2V0KG5kZXYpOwogCQkJc21jX2VuYWJsZShuZGV2KTsKQEAgLTIzMjgsMTMgKzIzMjUsMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHNtY19kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gQ0FSRE5BTUUsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzbWNfZHJpdmVyID0gewogCS5wcm9iZQkJPSBzbWNfZHJ2X3Byb2JlLAogCS5yZW1vdmUJCT0gc21jX2Rydl9yZW1vdmUsCiAJLnN1c3BlbmQJPSBzbWNfZHJ2X3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBzbWNfZHJ2X3Jlc3VtZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSBDQVJETkFNRSwKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgc21jX2luaXQodm9pZCkKQEAgLTIzNDgsMTIgKzIzNDYsMTIgQEAKICNlbmRpZgogI2VuZGlmCiAKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZzbWNfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzbWNfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHNtY19jbGVhbnVwKHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJnNtY19kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzbWNfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoc21jX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc21jOTF4LmggYi9kcml2ZXJzL25ldC9zbWM5MXguaAppbmRleCA4MTdmMjAwLi5hMTBjZDE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zbWM5MXguaAorKysgYi9kcml2ZXJzL25ldC9zbWM5MXguaApAQCAtMjg5LDYgKzI4OSwzOCBAQAogI2RlZmluZSBSUENfTFNBX0RFRkFVTFQJCVJQQ19MRURfVFhfUlgKICNkZWZpbmUgUlBDX0xTQl9ERUZBVUxUCQlSUENfTEVEXzEwMF8xMAogCisjZWxpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxWDAwKQorCisjaW5jbHVkZSA8YXUxeHh4Lmg+CisKKy8qIFdlIGNhbiBvbmx5IGRvIDE2LWJpdCByZWFkcyBhbmQgd3JpdGVzIGluIHRoZSBzdGF0aWMgbWVtb3J5IHNwYWNlLiAqLworI2RlZmluZSBTTUNfQ0FOX1VTRV84QklUCTAKKyNkZWZpbmUgU01DX0NBTl9VU0VfMTZCSVQJMQorI2RlZmluZSBTTUNfQ0FOX1VTRV8zMkJJVAkwCisjZGVmaW5lIFNNQ19JT19TSElGVAkJMAorI2RlZmluZSBTTUNfTk9XQUlUCQkxCisKKyNkZWZpbmUgU01DX2ludyhhLCByKQkJYXVfcmVhZHcoKHVuc2lnbmVkIGxvbmcpKChhKSArIChyKSkpCisjZGVmaW5lIFNNQ19pbnN3KGEsIHIsIHAsIGwpCVwKKwlkbyB7CVwKKwkJdW5zaWduZWQgbG9uZyBfYSA9ICh1bnNpZ25lZCBsb25nKSgoYSkgKyAocikpOyBcCisJCWludCBfbCA9IChsKTsgXAorCQl1MTYgKl9wID0gKHUxNiAqKShwKTsgXAorCQl3aGlsZSAoX2wtLSA+IDApIFwKKwkJCSpfcCsrID0gYXVfcmVhZHcoX2EpOyBcCisJfSB3aGlsZSgwKQorI2RlZmluZSBTTUNfb3V0dyh2LCBhLCByKQlhdV93cml0ZXcodiwgKHVuc2lnbmVkIGxvbmcpKChhKSArIChyKSkpCisjZGVmaW5lIFNNQ19vdXRzdyhhLCByLCBwLCBsKQlcCisJZG8gewlcCisJCXVuc2lnbmVkIGxvbmcgX2EgPSAodW5zaWduZWQgbG9uZykoKGEpICsgKHIpKTsgXAorCQlpbnQgX2wgPSAobCk7IFwKKwkJY29uc3QgdTE2ICpfcCA9IChjb25zdCB1MTYgKikocCk7IFwKKwkJd2hpbGUgKF9sLS0gPiAwKSBcCisJCQlhdV93cml0ZXcoKl9wKysgLCBfYSk7IFwKKwl9IHdoaWxlKDApCisKKyNkZWZpbmUgc2V0X2lycV90eXBlKGlycSwgdHlwZSkgZG8ge30gd2hpbGUgKDApCisKICNlbHNlCiAKICNkZWZpbmUgU01DX0NBTl9VU0VfOEJJVAkxCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zcGlkZXJfbmV0LmMgYi9kcml2ZXJzL25ldC9zcGlkZXJfbmV0LmMKaW5kZXggYzc5NmY0MS4uMGQ3NjVmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3BpZGVyX25ldC5jCisrKyBiL2RyaXZlcnMvbmV0L3NwaWRlcl9uZXQuYwpAQCAtMjI5MCw3ICsyMjkwLDYgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHNwaWRlcl9uZXRfZHJpdmVyID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJPSBzcGlkZXJfbmV0X2RyaXZlcl9uYW1lLAogCS5pZF90YWJsZQk9IHNwaWRlcl9uZXRfcGNpX3RibCwKIAkucHJvYmUJCT0gc3BpZGVyX25ldF9wcm9iZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N0YXJmaXJlLmMgYi9kcml2ZXJzL25ldC9zdGFyZmlyZS5jCmluZGV4IDM4YjJiMGEuLmQxNjdkZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N0YXJmaXJlLmMKKysrIGIvZHJpdmVycy9uZXQvc3RhcmZpcmUuYwpAQCAtMTQ3LDcgKzE0Nyw2IEBACiAjZGVmaW5lIERSVl9SRUxEQVRFCSJPY3RvYmVyIDMsIDIwMDUiCiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvcHJvdGVvbi5jIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3Byb3Rlb24uYwppbmRleCBkMDRjOTE4Li40Zjc1Njk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvcHJvdGVvbi5jCisrKyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9wcm90ZW9uLmMKQEAgLTM0NCw5ICszNDQsMTAgQEAKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnByb3Rlb25fZGV2W0lTQVRSX01BWF9BREFQVEVSU107CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBwcm90ZW9uX2RyaXZlciA9IHsKLQkubmFtZQkJPSAicHJvdGVvbiIsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBwcm90ZW9uX2RyaXZlciA9IHsKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAicHJvdGVvbiIsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHByb3Rlb25faW5pdCh2b2lkKQpAQCAtMzU1LDcgKzM1Niw3IEBACiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKIAlpbnQgaSwgbnVtID0gMCwgZXJyID0gMDsKIAotCWVyciA9IGRyaXZlcl9yZWdpc3RlcigmcHJvdGVvbl9kcml2ZXIpOworCWVyciA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmcHJvdGVvbl9kcml2ZXIpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKQEAgLTM3Miw3ICszNzMsNyBAQAogCQllcnIgPSBzZXR1cF9jYXJkKGRldiwgJnBkZXYtPmRldik7CiAJCWlmICghZXJyKSB7CiAJCQlwcm90ZW9uX2RldltpXSA9IHBkZXY7Ci0JCQlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgZGV2KTsKKwkJCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRldik7CiAJCQkrK251bTsKIAkJfSBlbHNlIHsKIAkJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHBkZXYpOwpAQCAtMzk5LDE3ICs0MDAsMTcgQEAKIAkJCiAJCWlmICghcGRldikKIAkJCWNvbnRpbnVlOwotCQlkZXYgPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CisJCWRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCQl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwogCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmJhc2VfYWRkciwgUFJPVEVPTl9JT19FWFRFTlQpOwogCQlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKIAkJZnJlZV9kbWEoZGV2LT5kbWEpOwogCQl0bXNkZXZfdGVybShkZXYpOwogCQlmcmVlX25ldGRldihkZXYpOwotCQlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgTlVMTCk7CisJCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwZGV2KTsKIAl9Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJnByb3Rlb25fZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmcHJvdGVvbl9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChwcm90ZW9uX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3NraXNhLmMgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvc2tpc2EuYwppbmRleCA3MmNmNzA4Li5kNmJhNDFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvc2tpc2EuYworKysgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvc2tpc2EuYwpAQCAtMzU0LDkgKzM1NCwxMCBAQAogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc2tfaXNhX2RldltJU0FUUl9NQVhfQURBUFRFUlNdOwogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgc2tfaXNhX2RyaXZlciA9IHsKLQkubmFtZQkJPSAic2tpc2EiLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc2tfaXNhX2RyaXZlciA9IHsKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAic2tpc2EiLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBza19pc2FfaW5pdCh2b2lkKQpAQCAtMzY1LDcgKzM2Niw3IEBACiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKIAlpbnQgaSwgbnVtID0gMCwgZXJyID0gMDsKIAotCWVyciA9IGRyaXZlcl9yZWdpc3Rlcigmc2tfaXNhX2RyaXZlcik7CisJZXJyID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZza19pc2FfZHJpdmVyKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCkBAIC0zODIsNyArMzgzLDcgQEAKIAkJZXJyID0gc2V0dXBfY2FyZChkZXYsICZwZGV2LT5kZXYpOwogCQlpZiAoIWVycikgewogCQkJc2tfaXNhX2RldltpXSA9IHBkZXY7Ci0JCQlkZXZfc2V0X2RydmRhdGEoJnNrX2lzYV9kZXZbaV0tPmRldiwgZGV2KTsKKwkJCXBsYXRmb3JtX3NldF9kcnZkYXRhKHNrX2lzYV9kZXZbaV0sIGRldik7CiAJCQkrK251bTsKIAkJfSBlbHNlIHsKIAkJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHBkZXYpOwpAQCAtNDA5LDE3ICs0MTAsMTcgQEAKIAogCQlpZiAoIXBkZXYpCiAJCQljb250aW51ZTsKLQkJZGV2ID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOworCQlkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAkJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAkJcmVsZWFzZV9yZWdpb24oZGV2LT5iYXNlX2FkZHIsIFNLX0lTQV9JT19FWFRFTlQpOwogCQlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKIAkJZnJlZV9kbWEoZGV2LT5kbWEpOwogCQl0bXNkZXZfdGVybShkZXYpOwogCQlmcmVlX25ldGRldihkZXYpOwotCQlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgTlVMTCk7CisJCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwZGV2KTsKIAl9Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJnNrX2lzYV9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZza19pc2FfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoc2tfaXNhX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdmlhLXZlbG9jaXR5LmMgYi9kcml2ZXJzL25ldC92aWEtdmVsb2NpdHkuYwppbmRleCBhMzY4ZDA4Li44MmM2Yjc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92aWEtdmVsb2NpdHkuYworKysgYi9kcml2ZXJzL25ldC92aWEtdmVsb2NpdHkuYwpAQCAtNjEsNyArNjEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvS2NvbmZpZwppbmRleCA3MTg3OTU4Li4wMGU1NTE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWcKQEAgLTMzMCw3ICszMzAsNyBAQAogCiBjb25maWcgQVRNRUwKICAgICAgIHRyaXN0YXRlICJBdG1lbCBhdDc2YzUweCBjaGlwc2V0ICA4MDIuMTFiIHN1cHBvcnQiCi0gICAgICBkZXBlbmRzIG9uIE5FVF9SQURJTyAmJiBFWFBFUklNRU5UQUwKKyAgICAgIGRlcGVuZHMgb24gTkVUX1JBRElPCiAgICAgICBzZWxlY3QgRldfTE9BREVSCiAgICAgICBzZWxlY3QgQ1JDMzIKICAgICAgICAtLS1oZWxwLS0tCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvLmMKaW5kZXggNmFmYzZlNWQuLjM0MGFiNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm8uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvLmMKQEAgLTQ1MzUsOSArNDUzNSw4IEBACiAJU3RhdHVzUmlkIHN0YXR1c19yaWQ7CiAJaW50IGk7CiAKLQlpZiAoKGZpbGUtPnByaXZhdGVfZGF0YSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwcm9jX2RhdGEgKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpCisJaWYgKChmaWxlLT5wcml2YXRlX2RhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcHJvY19kYXRhICksIEdGUF9LRVJORUwpKSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKLQltZW1zZXQoZmlsZS0+cHJpdmF0ZV9kYXRhLCAwLCBzaXplb2Yoc3RydWN0IHByb2NfZGF0YSkpOwogCWRhdGEgPSAoc3RydWN0IHByb2NfZGF0YSAqKWZpbGUtPnByaXZhdGVfZGF0YTsKIAlpZiAoKGRhdGEtPnJidWZmZXIgPSBrbWFsbG9jKCAyMDQ4LCBHRlBfS0VSTkVMICkpID09IE5VTEwpIHsKIAkJa2ZyZWUgKGZpbGUtPnByaXZhdGVfZGF0YSk7CkBAIC00NjE1LDkgKzQ2MTQsOCBAQAogCWludCBpLCBqOwogCXUzMiAqdmFscyA9IHN0YXRzLnZhbHM7CiAKLQlpZiAoKGZpbGUtPnByaXZhdGVfZGF0YSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwcm9jX2RhdGEgKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpCisJaWYgKChmaWxlLT5wcml2YXRlX2RhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcHJvY19kYXRhICksIEdGUF9LRVJORUwpKSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKLQltZW1zZXQoZmlsZS0+cHJpdmF0ZV9kYXRhLCAwLCBzaXplb2Yoc3RydWN0IHByb2NfZGF0YSkpOwogCWRhdGEgPSAoc3RydWN0IHByb2NfZGF0YSAqKWZpbGUtPnByaXZhdGVfZGF0YTsKIAlpZiAoKGRhdGEtPnJidWZmZXIgPSBrbWFsbG9jKCA0MDk2LCBHRlBfS0VSTkVMICkpID09IE5VTEwpIHsKIAkJa2ZyZWUgKGZpbGUtPnByaXZhdGVfZGF0YSk7CkBAIC00ODgxLDIwICs0ODc5LDE4IEBACiAJc3RydWN0IGFpcm9faW5mbyAqYWkgPSBkZXYtPnByaXY7CiAJaW50IGk7CiAKLQlpZiAoKGZpbGUtPnByaXZhdGVfZGF0YSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwcm9jX2RhdGEgKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpCisJaWYgKChmaWxlLT5wcml2YXRlX2RhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcHJvY19kYXRhICksIEdGUF9LRVJORUwpKSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKLQltZW1zZXQoZmlsZS0+cHJpdmF0ZV9kYXRhLCAwLCBzaXplb2Yoc3RydWN0IHByb2NfZGF0YSkpOwogCWRhdGEgPSAoc3RydWN0IHByb2NfZGF0YSAqKWZpbGUtPnByaXZhdGVfZGF0YTsKIAlpZiAoKGRhdGEtPnJidWZmZXIgPSBrbWFsbG9jKCAyMDQ4LCBHRlBfS0VSTkVMICkpID09IE5VTEwpIHsKIAkJa2ZyZWUgKGZpbGUtPnByaXZhdGVfZGF0YSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQlpZiAoKGRhdGEtPndidWZmZXIgPSBrbWFsbG9jKCAyMDQ4LCBHRlBfS0VSTkVMICkpID09IE5VTEwpIHsKKwlpZiAoKGRhdGEtPndidWZmZXIgPSBremFsbG9jKCAyMDQ4LCBHRlBfS0VSTkVMICkpID09IE5VTEwpIHsKIAkJa2ZyZWUgKGRhdGEtPnJidWZmZXIpOwogCQlrZnJlZSAoZmlsZS0+cHJpdmF0ZV9kYXRhKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCW1lbXNldCggZGF0YS0+d2J1ZmZlciwgMCwgMjA0OCApOwogCWRhdGEtPm1heHdyaXRlbGVuID0gMjA0ODsKIAlkYXRhLT5vbl9jbG9zZSA9IHByb2NfY29uZmlnX29uX2Nsb3NlOwogCkBAIC01MTU1LDI0ICs1MTUxLDIxIEBACiAJaW50IGo9MDsKIAlpbnQgcmM7CiAKLQlpZiAoKGZpbGUtPnByaXZhdGVfZGF0YSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwcm9jX2RhdGEgKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpCisJaWYgKChmaWxlLT5wcml2YXRlX2RhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcHJvY19kYXRhICksIEdGUF9LRVJORUwpKSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKLQltZW1zZXQoZmlsZS0+cHJpdmF0ZV9kYXRhLCAwLCBzaXplb2Yoc3RydWN0IHByb2NfZGF0YSkpOwogCW1lbXNldCgmd2tyLCAwLCBzaXplb2Yod2tyKSk7CiAJZGF0YSA9IChzdHJ1Y3QgcHJvY19kYXRhICopZmlsZS0+cHJpdmF0ZV9kYXRhOwotCWlmICgoZGF0YS0+cmJ1ZmZlciA9IGttYWxsb2MoIDE4MCwgR0ZQX0tFUk5FTCApKSA9PSBOVUxMKSB7CisJaWYgKChkYXRhLT5yYnVmZmVyID0ga3phbGxvYyggMTgwLCBHRlBfS0VSTkVMICkpID09IE5VTEwpIHsKIAkJa2ZyZWUgKGZpbGUtPnByaXZhdGVfZGF0YSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQltZW1zZXQoZGF0YS0+cmJ1ZmZlciwgMCwgMTgwKTsKIAlkYXRhLT53cml0ZWxlbiA9IDA7CiAJZGF0YS0+bWF4d3JpdGVsZW4gPSA4MDsKLQlpZiAoKGRhdGEtPndidWZmZXIgPSBrbWFsbG9jKCA4MCwgR0ZQX0tFUk5FTCApKSA9PSBOVUxMKSB7CisJaWYgKChkYXRhLT53YnVmZmVyID0ga3phbGxvYyggODAsIEdGUF9LRVJORUwgKSkgPT0gTlVMTCkgewogCQlrZnJlZSAoZGF0YS0+cmJ1ZmZlcik7CiAJCWtmcmVlIChmaWxlLT5wcml2YXRlX2RhdGEpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JbWVtc2V0KCBkYXRhLT53YnVmZmVyLCAwLCA4MCApOwogCWRhdGEtPm9uX2Nsb3NlID0gcHJvY193ZXBrZXlfb25fY2xvc2U7CiAKIAlwdHIgPSBkYXRhLT5yYnVmZmVyOwpAQCAtNTIwMyw5ICs1MTk2LDggQEAKIAljaGFyICpwdHI7CiAJU3NpZFJpZCBTU0lEX3JpZDsKIAotCWlmICgoZmlsZS0+cHJpdmF0ZV9kYXRhID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHByb2NfZGF0YSApLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkKKwlpZiAoKGZpbGUtPnByaXZhdGVfZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwcm9jX2RhdGEgKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCW1lbXNldChmaWxlLT5wcml2YXRlX2RhdGEsIDAsIHNpemVvZihzdHJ1Y3QgcHJvY19kYXRhKSk7CiAJZGF0YSA9IChzdHJ1Y3QgcHJvY19kYXRhICopZmlsZS0+cHJpdmF0ZV9kYXRhOwogCWlmICgoZGF0YS0+cmJ1ZmZlciA9IGttYWxsb2MoIDEwNCwgR0ZQX0tFUk5FTCApKSA9PSBOVUxMKSB7CiAJCWtmcmVlIChmaWxlLT5wcml2YXRlX2RhdGEpOwpAQCAtNTIxMywxMiArNTIwNSwxMSBAQAogCX0KIAlkYXRhLT53cml0ZWxlbiA9IDA7CiAJZGF0YS0+bWF4d3JpdGVsZW4gPSAzMyozOwotCWlmICgoZGF0YS0+d2J1ZmZlciA9IGttYWxsb2MoIDMzKjMsIEdGUF9LRVJORUwgKSkgPT0gTlVMTCkgeworCWlmICgoZGF0YS0+d2J1ZmZlciA9IGt6YWxsb2MoIDMzKjMsIEdGUF9LRVJORUwgKSkgPT0gTlVMTCkgewogCQlrZnJlZSAoZGF0YS0+cmJ1ZmZlcik7CiAJCWtmcmVlIChmaWxlLT5wcml2YXRlX2RhdGEpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JbWVtc2V0KCBkYXRhLT53YnVmZmVyLCAwLCAzMyozICk7CiAJZGF0YS0+b25fY2xvc2UgPSBwcm9jX1NTSURfb25fY2xvc2U7CiAKIAlyZWFkU3NpZFJpZChhaSwgJlNTSURfcmlkKTsKQEAgLTUyNDcsOSArNTIzOCw4IEBACiAJY2hhciAqcHRyOwogCUFQTGlzdFJpZCBBUExpc3RfcmlkOwogCi0JaWYgKChmaWxlLT5wcml2YXRlX2RhdGEgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcHJvY19kYXRhICksIEdGUF9LRVJORUwpKSA9PSBOVUxMKQorCWlmICgoZmlsZS0+cHJpdmF0ZV9kYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHByb2NfZGF0YSApLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JbWVtc2V0KGZpbGUtPnByaXZhdGVfZGF0YSwgMCwgc2l6ZW9mKHN0cnVjdCBwcm9jX2RhdGEpKTsKIAlkYXRhID0gKHN0cnVjdCBwcm9jX2RhdGEgKilmaWxlLT5wcml2YXRlX2RhdGE7CiAJaWYgKChkYXRhLT5yYnVmZmVyID0ga21hbGxvYyggMTA0LCBHRlBfS0VSTkVMICkpID09IE5VTEwpIHsKIAkJa2ZyZWUgKGZpbGUtPnByaXZhdGVfZGF0YSk7CkBAIC01MjU3LDEyICs1MjQ3LDExIEBACiAJfQogCWRhdGEtPndyaXRlbGVuID0gMDsKIAlkYXRhLT5tYXh3cml0ZWxlbiA9IDQqNiozOwotCWlmICgoZGF0YS0+d2J1ZmZlciA9IGttYWxsb2MoIGRhdGEtPm1heHdyaXRlbGVuLCBHRlBfS0VSTkVMICkpID09IE5VTEwpIHsKKwlpZiAoKGRhdGEtPndidWZmZXIgPSBremFsbG9jKCBkYXRhLT5tYXh3cml0ZWxlbiwgR0ZQX0tFUk5FTCApKSA9PSBOVUxMKSB7CiAJCWtmcmVlIChkYXRhLT5yYnVmZmVyKTsKIAkJa2ZyZWUgKGZpbGUtPnByaXZhdGVfZGF0YSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQltZW1zZXQoIGRhdGEtPndidWZmZXIsIDAsIGRhdGEtPm1heHdyaXRlbGVuICk7CiAJZGF0YS0+b25fY2xvc2UgPSBwcm9jX0FQTGlzdF9vbl9jbG9zZTsKIAogCXJlYWRBUExpc3RSaWQoYWksICZBUExpc3RfcmlkKTsKQEAgLTUyOTcsOSArNTI4Niw4IEBACiAJLyogSWYgZG9Mb3NlU3luYyBpcyBub3QgMSwgd2Ugd29uJ3QgZG8gYSBMb3NlIFN5bmMgKi8KIAlpbnQgZG9Mb3NlU3luYyA9IC0xOwogCi0JaWYgKChmaWxlLT5wcml2YXRlX2RhdGEgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcHJvY19kYXRhICksIEdGUF9LRVJORUwpKSA9PSBOVUxMKQorCWlmICgoZmlsZS0+cHJpdmF0ZV9kYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHByb2NfZGF0YSApLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JbWVtc2V0KGZpbGUtPnByaXZhdGVfZGF0YSwgMCwgc2l6ZW9mKHN0cnVjdCBwcm9jX2RhdGEpKTsKIAlkYXRhID0gKHN0cnVjdCBwcm9jX2RhdGEgKilmaWxlLT5wcml2YXRlX2RhdGE7CiAJaWYgKChkYXRhLT5yYnVmZmVyID0ga21hbGxvYyggMTAyNCwgR0ZQX0tFUk5FTCApKSA9PSBOVUxMKSB7CiAJCWtmcmVlIChmaWxlLT5wcml2YXRlX2RhdGEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyb19jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyb19jcy5jCmluZGV4IDk2ZWQ4ZGEuLmUzMjg1NDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm9fY3MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvX2NzLmMKQEAgLTE3MCwxMiArMTcwLDExIEBACiAJREVCVUcoMCwgImFpcm9fYXR0YWNoKClcbiIpOwogCiAJLyogSW5pdGlhbGl6ZSB0aGUgZGV2X2xpbmtfdCBzdHJ1Y3R1cmUgKi8KLQlsaW5rID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGRldl9saW5rX3QpLCBHRlBfS0VSTkVMKTsKKwlsaW5rID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRldl9saW5rX3QpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWxpbmspIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJhaXJvX2NzOiBubyBtZW1vcnkgZm9yIG5ldyBkZXZpY2VcbiIpOwogCQlyZXR1cm4gTlVMTDsKIAl9Ci0JbWVtc2V0KGxpbmssIDAsIHNpemVvZihzdHJ1Y3QgZGV2X2xpbmtfdCkpOwogCQogCS8qIEludGVycnVwdCBzZXR1cCAqLwogCWxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRVhDTFVTSVZFOwpAQCAtMTk0LDEzICsxOTMsMTIgQEAKIAlsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKIAkKIAkvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgcHJpdmF0ZSBkZXZpY2Utc3BlY2lmaWMgZGF0YSAqLwotCWxvY2FsID0ga21hbGxvYyhzaXplb2YobG9jYWxfaW5mb190KSwgR0ZQX0tFUk5FTCk7CisJbG9jYWwgPSBremFsbG9jKHNpemVvZihsb2NhbF9pbmZvX3QpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWxvY2FsKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiYWlyb19jczogbm8gbWVtb3J5IGZvciBuZXcgZGV2aWNlXG4iKTsKIAkJa2ZyZWUgKGxpbmspOwogCQlyZXR1cm4gTlVMTDsKIAl9Ci0JbWVtc2V0KGxvY2FsLCAwLCBzaXplb2YobG9jYWxfaW5mb190KSk7CiAJbGluay0+cHJpdiA9IGxvY2FsOwogCQogCS8qIFJlZ2lzdGVyIHdpdGggQ2FyZCBTZXJ2aWNlcyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWwuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsLmMKaW5kZXggMWZiZTAyNy4uNWU1M2M1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWwuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbC5jCkBAIC03Miw3ICs3Miw3IEBACiAjaW5jbHVkZSAiYXRtZWwuaCIKIAogI2RlZmluZSBEUklWRVJfTUFKT1IgMAotI2RlZmluZSBEUklWRVJfTUlOT1IgOTYKKyNkZWZpbmUgRFJJVkVSX01JTk9SIDk4CiAKIE1PRFVMRV9BVVRIT1IoIlNpbW9uIEtlbGxleSIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJTdXBwb3J0IGZvciBBdG1lbCBhdDc2YzUweCA4MDIuMTEgd2lyZWxlc3MgZXRoZXJuZXQgY2FyZHMuIik7CkBAIC0xNTA0LDcgKzE1MDQsNyBAQAogICAgICAgICByZXR1cm4gbGVuOwogfQogCi1zdHJ1Y3QgbmV0X2RldmljZSAqaW5pdF9hdG1lbF9jYXJkKCB1bnNpZ25lZCBzaG9ydCBpcnEsIGludCBwb3J0LCBjb25zdCBBdG1lbEZXVHlwZSBmd190eXBlLCAgCitzdHJ1Y3QgbmV0X2RldmljZSAqaW5pdF9hdG1lbF9jYXJkKCB1bnNpZ25lZCBzaG9ydCBpcnEsIHVuc2lnbmVkIGxvbmcgcG9ydCwgY29uc3QgQXRtZWxGV1R5cGUgZndfdHlwZSwgIAogCQkJCSAgICBzdHJ1Y3QgZGV2aWNlICpzeXNfZGV2LCBpbnQgKCpjYXJkX3ByZXNlbnQpKHZvaWQgKiksIHZvaWQgKmNhcmQpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKQEAgLTE2MDUsOCArMTYwNSw4IEBACiAJCWdvdG8gZXJyX291dF9mcmVlOwogCX0KIAotCWlmIChwcml2LT5idXNfdHlwZSA9PSBCVVNfVFlQRV9QQ0kgJiYKLQkgICAgIXJlcXVlc3RfcmVnaW9uKCBkZXYtPmJhc2VfYWRkciwgNjQsIGRldi0+bmFtZSApKSB7CisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihkZXYtPmJhc2VfYWRkciwgMzIsIAorCQkJICAgIHByaXYtPmJ1c190eXBlID09IEJVU19UWVBFX1BDQ0FSRCA/ICAiYXRtZWxfY3MiIDogImF0bWVsX3BjaSIpKSB7CiAJCWdvdG8gZXJyX291dF9pcnE7CiAJfQogCQpAQCAtMTYyMiwxNSArMTYyMiwxNiBAQAogCQogCWNyZWF0ZV9wcm9jX3JlYWRfZW50cnkgKCJkcml2ZXIvYXRtZWwiLCAwLCBOVUxMLCBhdG1lbF9yZWFkX3Byb2MsIHByaXYpOwkKIAkKLQlwcmludGsoS0VSTl9JTkZPICIlczogQXRtZWwgYXQ3NmM1MHggd2lyZWxlc3MuIFZlcnNpb24gJWQuJWQgc2ltb25AdGhla2VsbGV5cy5vcmcudWtcbiIsCi0JICAgICAgIGRldi0+bmFtZSwgRFJJVkVSX01BSk9SLCBEUklWRVJfTUlOT1IpOworCXByaW50ayhLRVJOX0lORk8gIiVzOiBBdG1lbCBhdDc2YzUweC4gVmVyc2lvbiAlZC4lZC4gTUFDICUuMng6JS4yeDolLjJ4OiUuMng6JS4yeDolLjJ4XG4iLAorCSAgICAgICBkZXYtPm5hbWUsIERSSVZFUl9NQUpPUiwgRFJJVkVSX01JTk9SLAorCSAgICAgICBkZXYtPmRldl9hZGRyWzBdLCBkZXYtPmRldl9hZGRyWzFdLCBkZXYtPmRldl9hZGRyWzJdLAorCSAgICAgICBkZXYtPmRldl9hZGRyWzNdLCBkZXYtPmRldl9hZGRyWzRdLCBkZXYtPmRldl9hZGRyWzVdICk7CiAJCiAJU0VUX01PRFVMRV9PV05FUihkZXYpOwogCXJldHVybiBkZXY7CiAJCiAgZXJyX291dF9yZXM6Ci0JaWYgKHByaXYtPmJ1c190eXBlID09IEJVU19UWVBFX1BDSSkKLQkgICAgICAgIHJlbGVhc2VfcmVnaW9uKCBkZXYtPmJhc2VfYWRkciwgNjQgKTsKKwlyZWxlYXNlX3JlZ2lvbiggZGV2LT5iYXNlX2FkZHIsIDMyKTsKICBlcnJfb3V0X2lycToKIAlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKICBlcnJfb3V0X2ZyZWU6CkBAIC0xNjQwLDcgKzE2NDEsNyBAQAogCiBFWFBPUlRfU1lNQk9MKGluaXRfYXRtZWxfY2FyZCk7CiAKLXZvaWQgc3RvcF9hdG1lbF9jYXJkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBmcmVlcmVzKQordm9pZCBzdG9wX2F0bWVsX2NhcmQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgYXRtZWxfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJCQpAQCAtMTY1NCwxMCArMTY1NSw3IEBACiAJcmVtb3ZlX3Byb2NfZW50cnkoImRyaXZlci9hdG1lbCIsIE5VTEwpOwogCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOwogCWtmcmVlKHByaXYtPmZpcm13YXJlKTsKLQlpZiAoZnJlZXJlcykgewotCQkvKiBQQ01DSUEgZnJlZXMgdGhpcyBzdHVmZiwgc28gb25seSBmb3IgUENJICovCi0JICAgICAgICByZWxlYXNlX3JlZ2lvbihkZXYtPmJhc2VfYWRkciwgNjQpOwotICAgICAgICB9CisJcmVsZWFzZV9yZWdpb24oZGV2LT5iYXNlX2FkZHIsIDMyKTsKIAlmcmVlX25ldGRldihkZXYpOwogfQogCkBAIC0xODEwLDkgKzE4MDgsOSBAQAogCX0KIAlpZihkd3JxLT5mbGFncyAmIElXX0VOQ09ERV9SRVNUUklDVEVEKQogCQlwcml2LT5leGNsdWRlX3VuZW5jcnlwdGVkID0gMTsKLQlpZihkd3JxLT5mbGFncyAmIElXX0VOQ09ERV9PUEVOKQorICAgICAgIAlpZihkd3JxLT5mbGFncyAmIElXX0VOQ09ERV9PUEVOKSAKIAkJcHJpdi0+ZXhjbHVkZV91bmVuY3J5cHRlZCA9IDA7Ci0JCisgICAgICAgCiAJcmV0dXJuIC1FSU5QUk9HUkVTUzsJCS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KIH0KIApAQCAtMTgyNywxMSArMTgyNSwxMiBAQAogCQogCWlmICghcHJpdi0+d2VwX2lzX29uKQogCQlkd3JxLT5mbGFncyA9IElXX0VOQ09ERV9ESVNBQkxFRDsKLQllbHNlIGlmIChwcml2LT5leGNsdWRlX3VuZW5jcnlwdGVkKQotCQlkd3JxLT5mbGFncyA9IElXX0VOQ09ERV9SRVNUUklDVEVEOwotCWVsc2UKLQkJZHdycS0+ZmxhZ3MgPSBJV19FTkNPREVfT1BFTjsKLQkJCisJZWxzZSB7CisJCWlmIChwcml2LT5leGNsdWRlX3VuZW5jcnlwdGVkKQorCQkJZHdycS0+ZmxhZ3MgPSBJV19FTkNPREVfUkVTVFJJQ1RFRDsKKwkJZWxzZQorCQkJZHdycS0+ZmxhZ3MgPSBJV19FTkNPREVfT1BFTjsKKwl9CiAJCS8qIFdoaWNoIGtleSBkbyB3ZSB3YW50ID8gLTEgLT4gdHggaW5kZXggKi8KIAlpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IDQpCiAJCWluZGV4ID0gcHJpdi0+ZGVmYXVsdF9rZXk7CkBAIC0yMjE3LDcgKzIyMTYsNyBAQAogCWludCBrLGksajsKIAogCWR3cnEtPmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgaXdfcmFuZ2UpOwotCW1lbXNldChyYW5nZSwgMCwgc2l6ZW9mKHJhbmdlKSk7CisJbWVtc2V0KHJhbmdlLCAwLCBzaXplb2Yoc3RydWN0IGl3X3JhbmdlKSk7CiAJcmFuZ2UtPm1pbl9ud2lkID0gMHgwMDAwOwogCXJhbmdlLT5tYXhfbndpZCA9IDB4MDAwMDsKIAlyYW5nZS0+bnVtX2NoYW5uZWxzID0gMDsKQEAgLTI2NDUsOCArMjY0NCw4IEBACiAJfSAKIH0KIAotIAotc3RhdGljIHZvaWQgc2VuZF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0KHN0cnVjdCBhdG1lbF9wcml2YXRlICpwcml2LCB1OCAqY2hhbGxlbmdlLCBpbnQgY2hhbGxlbmdlX2xlbikKKworc3RhdGljIHZvaWQgc2VuZF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0KHN0cnVjdCBhdG1lbF9wcml2YXRlICpwcml2LCB1MTYgc3lzdGVtLCB1OCAqY2hhbGxlbmdlLCBpbnQgY2hhbGxlbmdlX2xlbikKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciBoZWFkZXI7CiAJc3RydWN0IGF1dGhfYm9keSBhdXRoOwpAQCAtMjY1OCwxNCArMjY1NywxMSBAQAogCW1lbWNweShoZWFkZXIuYWRkcjIsIHByaXYtPmRldi0+ZGV2X2FkZHIsIDYpOwogCW1lbWNweShoZWFkZXIuYWRkcjMsIHByaXYtPkN1cnJlbnRCU1NJRCwgNik7CiAJCi0JaWYgKHByaXYtPndlcF9pc19vbikgewotCQlhdXRoLmFsZyA9IGNwdV90b19sZTE2KEM4MDIxMV9NR01UX0FBTl9TSEFSRURLRVkpOyAKKwlpZiAocHJpdi0+d2VwX2lzX29uICYmIHByaXYtPkN1cnJlbnRBdXRoZW50VHJhbnNhY3Rpb25TZXFOdW0gIT0gMSkgCiAJCS8qIG5vIFdFUCBmb3IgYXV0aGVudGljYXRpb24gZnJhbWVzIHdpdGggVHJTZXFObyAxICovCi0JCWlmIChwcml2LT5DdXJyZW50QXV0aGVudFRyYW5zYWN0aW9uU2VxTnVtICE9IDEpCi0JCQloZWFkZXIuZnJhbWVfY3RsIHw9ICBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9QUk9URUNURUQpOwotCX0gZWxzZSB7Ci0JCWF1dGguYWxnID0gY3B1X3RvX2xlMTYoQzgwMjExX01HTVRfQUFOX09QRU5TWVNURU0pOwotCX0KKyAgICAgICAgICAgICAgICBoZWFkZXIuZnJhbWVfY3RsIHw9ICBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9QUk9URUNURUQpOworCQorCWF1dGguYWxnID0gY3B1X3RvX2xlMTYoc3lzdGVtKTsgCiAKIAlhdXRoLnN0YXR1cyA9IDA7CiAJYXV0aC50cmFuc19zZXEgPSBjcHVfdG9fbGUxNihwcml2LT5DdXJyZW50QXV0aGVudFRyYW5zYWN0aW9uU2VxTnVtKTsKQEAgLTI4MzQsNiArMjgzMCw3IEBACiAJc3RydWN0IGF1dGhfYm9keSAqYXV0aCA9IChzdHJ1Y3QgYXV0aF9ib2R5ICopcHJpdi0+cnhfYnVmOwogCXUxNiBzdGF0dXMgPSBsZTE2X3RvX2NwdShhdXRoLT5zdGF0dXMpOwogCXUxNiB0cmFuc19zZXFfbm8gPSBsZTE2X3RvX2NwdShhdXRoLT50cmFuc19zZXEpOworCXUxNiBzeXN0ZW0gPSBsZTE2X3RvX2NwdShhdXRoLT5hbGcpOwogCQogCWlmIChzdGF0dXMgPT0gQzgwMjExX01HTVRfU0NfU3VjY2VzcyAmJiAhcHJpdi0+d2VwX2lzX29uKSB7IAogCQkvKiBubyBXRVAgKi8KQEAgLTI4NTUsNyArMjg1Miw3IEBACiAJCQkJCiAJCWlmICh0cmFuc19zZXFfbm8gPT0gMHgwMDAyICYmCiAJCSAgICBhdXRoLT5lbF9pZCA9PSBDODAyMTFfTUdNVF9FbGVtZW50SURfQ2hhbGxlbmdlVGV4dCkgewotCQkJc2VuZF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0KHByaXYsIGF1dGgtPmNoYWxsX3RleHQsIGF1dGgtPmNoYWxsX3RleHRfbGVuKTsKKwkJCXNlbmRfYXV0aGVudGljYXRpb25fcmVxdWVzdChwcml2LCBzeXN0ZW0sIGF1dGgtPmNoYWxsX3RleHQsIGF1dGgtPmNoYWxsX3RleHRfbGVuKTsKIAkJCXJldHVybjsKIAkJfQogCQkKQEAgLTI4NzIsMTQgKzI4NjksMjAgQEAKIAkJfQogCX0JCQkKIAkKLQlpZiAoc3RhdHVzID09IEM4MDIxMV9NR01UX1NDX0F1dGhBbGdOb3RTdXBwb3J0ZWQgJiYgcHJpdi0+Y29ubmVjdF90b19hbnlfQlNTKSB7Ci0JCWludCBic3NfaW5kZXg7Ci0JCQotCQlwcml2LT5CU1NpbmZvWyhpbnQpKHByaXYtPmN1cnJlbnRfQlNTKV0uY2hhbm5lbCB8PSAweDgwOwotCQkKLQkJaWYgKChic3NfaW5kZXggID0gcmV0cmlldmVfYnNzKHByaXYpKSAhPSAtMSkgewotCQkJYXRtZWxfam9pbl9ic3MocHJpdiwgYnNzX2luZGV4KTsKLQkJCXJldHVybjsKKwlpZiAoc3RhdHVzID09IEM4MDIxMV9NR01UX1NDX0F1dGhBbGdOb3RTdXBwb3J0ZWQpIHsKKwkJLyogRG8gb3BlbnN5c3RlbSBmaXJzdCwgdGhlbiB0cnkgc2hhcmVka2V5ICovCisJCWlmIChzeXN0ZW0gPT0gIEM4MDIxMV9NR01UX0FBTl9PUEVOU1lTVEVNKSB7CisJCQlwcml2LT5DdXJyZW50QXV0aGVudFRyYW5zYWN0aW9uU2VxTnVtID0gMHgwMDE7CisJCQlzZW5kX2F1dGhlbnRpY2F0aW9uX3JlcXVlc3QocHJpdiwgQzgwMjExX01HTVRfQUFOX1NIQVJFREtFWSwgTlVMTCwgMCk7CisJCX0gZWxzZSBpZiAocHJpdi0+Y29ubmVjdF90b19hbnlfQlNTKSB7CisJCQlpbnQgYnNzX2luZGV4OworCQkJCisJCQlwcml2LT5CU1NpbmZvWyhpbnQpKHByaXYtPmN1cnJlbnRfQlNTKV0uY2hhbm5lbCB8PSAweDgwOworCQkJCisJCQlpZiAoKGJzc19pbmRleCAgPSByZXRyaWV2ZV9ic3MocHJpdikpICE9IC0xKSB7CisJCQkJYXRtZWxfam9pbl9ic3MocHJpdiwgYnNzX2luZGV4KTsKKwkJCQlyZXR1cm47CisJCQl9CiAJCX0KIAl9CiAJCkBAIC0zMjA1LDcgKzMyMDgsNyBAQAogCQkgIHByaXYtPkF1dGhlbnRpY2F0aW9uUmVxdWVzdFJldHJ5Q250Kys7CiAJCSAgcHJpdi0+Q3VycmVudEF1dGhlbnRUcmFuc2FjdGlvblNlcU51bSA9IDB4MDAwMTsKIAkJICBtb2RfdGltZXIoJnByaXYtPm1hbmFnZW1lbnRfdGltZXIsIGppZmZpZXMgKyBNR01UX0pJRkZJRVMpOwotCQkgIHNlbmRfYXV0aGVudGljYXRpb25fcmVxdWVzdChwcml2LCBOVUxMLCAwKTsKKwkJICBzZW5kX2F1dGhlbnRpY2F0aW9uX3JlcXVlc3QocHJpdiwgQzgwMjExX01HTVRfQUFOX09QRU5TWVNURU0sIE5VTEwsIDApOwogCSAgfQogCSAgCiAJICBicmVhazsKQEAgLTMzMTIsNyArMzMxNSw3IEBACiAJCQkJCiAJCQkJbW9kX3RpbWVyKCZwcml2LT5tYW5hZ2VtZW50X3RpbWVyLCBqaWZmaWVzICsgTUdNVF9KSUZGSUVTKTsKIAkJCQlwcml2LT5DdXJyZW50QXV0aGVudFRyYW5zYWN0aW9uU2VxTnVtID0gMHgwMDAxOwotCQkJCXNlbmRfYXV0aGVudGljYXRpb25fcmVxdWVzdChwcml2LCBOVUxMLCAwKTsKKwkJCQlzZW5kX2F1dGhlbnRpY2F0aW9uX3JlcXVlc3QocHJpdiwgQzgwMjExX01HTVRfQUFOX1NIQVJFREtFWSwgTlVMTCwgMCk7CiAJCQl9CiAJCQlyZXR1cm47CiAJCX0KQEAgLTM0ODIsMTEgKzM0ODUsNiBAQAogCQkJcHJpbnRrKEtFUk5fQUxFUlQgIiVzOiAqKiogSW52YWxpZCBNQUMgYWRkcmVzcy4gVVBHUkFERSBGaXJtd2FyZSAqKioqXG4iLCBkZXYtPm5hbWUpOwogCQkJbWVtY3B5KGRldi0+ZGV2X2FkZHIsIGRlZmF1bHRfbWFjLCA2KTsKIAkJfQotCQlwcmludGsoS0VSTl9JTkZPICIlczogTUFDIGFkZHJlc3MgJS4yeDolLjJ4OiUuMng6JS4yeDolLjJ4OiUuMnhcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsCi0JCSAgICAgICBkZXYtPmRldl9hZGRyWzBdLCBkZXYtPmRldl9hZGRyWzFdLCBkZXYtPmRldl9hZGRyWzJdLAotCQkgICAgICAgZGV2LT5kZXZfYWRkclszXSwgZGV2LT5kZXZfYWRkcls0XSwgZGV2LT5kZXZfYWRkcls1XSApOwotCQkKIAl9CiAJCiAJcmV0dXJuIHJjOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWwuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsLmgKaW5kZXggODI1MDAwZS4uYjliM2U1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWwuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbC5oCkBAIC0zNSw5ICszNSw5IEBACiAJQVRNRUxfRldfVFlQRV81MDYKIH0gQXRtZWxGV1R5cGU7CiAKLXN0cnVjdCBuZXRfZGV2aWNlICppbml0X2F0bWVsX2NhcmQodW5zaWduZWQgc2hvcnQsIGludCwgY29uc3QgQXRtZWxGV1R5cGUsIHN0cnVjdCBkZXZpY2UgKiwgCitzdHJ1Y3QgbmV0X2RldmljZSAqaW5pdF9hdG1lbF9jYXJkKHVuc2lnbmVkIHNob3J0LCB1bnNpZ25lZCBsb25nLCBjb25zdCBBdG1lbEZXVHlwZSwgc3RydWN0IGRldmljZSAqLCAKIAkJCQkgICAgaW50ICgqcHJlc2VudF9mdW5jKSh2b2lkICopLCB2b2lkICogKTsKLXZvaWQgc3RvcF9hdG1lbF9jYXJkKCBzdHJ1Y3QgbmV0X2RldmljZSAqLCBpbnQgKTsKK3ZvaWQgc3RvcF9hdG1lbF9jYXJkKCBzdHJ1Y3QgbmV0X2RldmljZSAqKTsKIGludCBhdG1lbF9vcGVuKCBzdHJ1Y3QgbmV0X2RldmljZSAqICk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWxfY3MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsX2NzLmMKaW5kZXggMTk1Y2IzNi4uMTdkMWZkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWxfY3MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbF9jcy5jCkBAIC02Myw2ICs2Myw3IEBACiAgICBiZSBwcmVzZW50IGJ1dCBkaXNhYmxlZCAtLSBidXQgaXQgY2FuIHRoZW4gYmUgZW5hYmxlZCBmb3Igc3BlY2lmaWMKICAgIG1vZHVsZXMgYXQgbG9hZCB0aW1lIHdpdGggYSAncGNfZGVidWc9Iycgb3B0aW9uIHRvIGluc21vZC4KICovCisKICNpZmRlZiBQQ01DSUFfREVCVUcKIHN0YXRpYyBpbnQgcGNfZGVidWcgPSBQQ01DSUFfREVCVUc7CiBtb2R1bGVfcGFyYW0ocGNfZGVidWcsIGludCwgMCk7CkBAIC0xODAsMTIgKzE4MSwxMSBAQAogCURFQlVHKDAsICJhdG1lbF9hdHRhY2goKVxuIik7CiAKIAkvKiBJbml0aWFsaXplIHRoZSBkZXZfbGlua190IHN0cnVjdHVyZSAqLwotCWxpbmsgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZGV2X2xpbmtfdCksIEdGUF9LRVJORUwpOworCWxpbmsgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZGV2X2xpbmtfdCksIEdGUF9LRVJORUwpOwogCWlmICghbGluaykgewogCQlwcmludGsoS0VSTl9FUlIgImF0bWVsX2NzOiBubyBtZW1vcnkgZm9yIG5ldyBkZXZpY2VcbiIpOwogCQlyZXR1cm4gTlVMTDsKIAl9Ci0JbWVtc2V0KGxpbmssIDAsIHNpemVvZihzdHJ1Y3QgZGV2X2xpbmtfdCkpOwogCQogCS8qIEludGVycnVwdCBzZXR1cCAqLwogCWxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRVhDTFVTSVZFOwpAQCAtMjA0LDEzICsyMDQsMTIgQEAKIAlsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKIAkKIAkvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgcHJpdmF0ZSBkZXZpY2Utc3BlY2lmaWMgZGF0YSAqLwotCWxvY2FsID0ga21hbGxvYyhzaXplb2YobG9jYWxfaW5mb190KSwgR0ZQX0tFUk5FTCk7CisJbG9jYWwgPSBremFsbG9jKHNpemVvZihsb2NhbF9pbmZvX3QpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWxvY2FsKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiYXRtZWxfY3M6IG5vIG1lbW9yeSBmb3IgbmV3IGRldmljZVxuIik7CiAJCWtmcmVlIChsaW5rKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQotCW1lbXNldChsb2NhbCwgMCwgc2l6ZW9mKGxvY2FsX2luZm9fdCkpOwogCWxpbmstPnByaXYgPSBsb2NhbDsKIAkKIAkvKiBSZWdpc3RlciB3aXRoIENhcmQgU2VydmljZXMgKi8KQEAgLTI4Nyw0MSArMjg2LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyogbGlzdCBvZiBjYXJkcyB3ZSBrbm93IGFib3V0IGFuZCB0aGVpciBmaXJtd2FyZSByZXF1aXJlbWVudHMuCi0gICBHbyBlaXRoZXIgYnkgTWFuZmlkIG9yIHZlcnNpb24gc3RyaW5ncy4KLSAgIENhcmRzIG5vdCBpbiB0aGlzIGxpc3Qgd2lsbCBuZWVkIGEgZmlybXdhcmUgcGFyYW1ldGVyIHRvIHRoZSBtb2R1bGUKLSAgIGluIGFsbCBwcm9iYWJpbGl0eS4gTm90ZSB0aGF0IHRoZSBTTUMgMjYzMiBWMiBhbmQgVjMgaGF2ZSB0aGUgc2FtZQotICAgbWFuZmlkcywgc28gd2UgaWdub3JlIHRob3NlIGFuZCB1c2UgdGhlIHZlcnNpb24xIHN0cmluZ3MuICovCi0KLXN0YXRpYyBzdHJ1Y3QgeyAKLQlpbnQgbWFuZiwgY2FyZDsKLQljaGFyICp2ZXIxOwotCUF0bWVsRldUeXBlIGZpcm13YXJlOwotCWNoYXIgKm5hbWU7Ci19IGNhcmRfdGFibGVbXSA9IHsKLQl7IDAsIDAsICJXTEFOLzgwMi4xMWIgUEMgQ0FSRCIsIEFUTUVMX0ZXX1RZUEVfNTAyRCwgIkFjdGlvbnRlYyA4MDJDQVQxIiB9LCAgCi0JeyAwLCAwLCAiQVRNRUwvQVQ3NkM1MDJBUiIsIEFUTUVMX0ZXX1RZUEVfNTAyLCAiTm9OYW1lLVJGTUQiIH0sIAotCXsgMCwgMCwgIkFUTUVML0FUNzZDNTAyQVJfRCIsIEFUTUVMX0ZXX1RZUEVfNTAyRCwgIk5vTmFtZS1yZXZEIiB9LCAKLQl7IDAsIDAsICJBVE1FTC9BVDc2QzUwMkFSX0UiLCBBVE1FTF9GV19UWVBFXzUwMkUsICJOb05hbWUtcmV2RSIgfSwKLQl7IDAsIDAsICJBVE1FTC9BVDc2QzUwNCIsIEFUTUVMX0ZXX1RZUEVfNTA0LCAiTm9OYW1lLTUwNCIgfSwKLQl7IDAsIDAsICJBVE1FTC9BVDc2QzUwNEEiLCBBVE1FTF9GV19UWVBFXzUwNEFfMjk1OCwgIk5vTmFtZS01MDRhLTI5NTgiIH0sCi0JeyAwLCAwLCAiQVRNRUwvQVQ3NkM1MDRfUiIsIEFUTUVMX0ZXX1RZUEVfNTA0XzI5NTgsICJOb05hbWUtNTA0LTI5NTgiIH0sCi0JeyBNQU5GSURfM0NPTSwgMHgwNjIwLCBOVUxMLCBBVE1FTF9GV19UWVBFXzUwMl8zQ09NLCAiM2NvbSAzQ1JXRTYyMDkyQiIgfSwgCi0JeyBNQU5GSURfM0NPTSwgMHgwNjk2LCBOVUxMLCBBVE1FTF9GV19UWVBFXzUwMl8zQ09NLCAiM2NvbSAzQ1JTSFBXMTk2IiB9LCAKLQl7IDAsIDAsICJTTUMvMjYzMlctVjIiLCBBVE1FTF9GV19UWVBFXzUwMiwgIlNNQyAyNjMyVy1WMiIgfSwKLQl7IDAsIDAsICJTTUMvMjYzMlciLCBBVE1FTF9GV19UWVBFXzUwMkQsICJTTUMgMjYzMlctVjMiIH0sCi0JeyAweGQ2MDEsIDB4MDAwNywgTlVMTCwgQVRNRUxfRldfVFlQRV81MDIsICJTaXRlY29tIFdMQU4tMDExIiB9LCAKLQl7IDB4MDFiZiwgMHgzMzAyLCBOVUxMLCBBVE1FTF9GV19UWVBFXzUwMkUsICJCZWxraW4gRjVENjAyMC1WMiIgfSwgCi0JeyAwLCAwLCAiQlQvVm95YWdlciAxMDIwIExhcHRvcCBBZGFwdGVyIiwgQVRNRUxfRldfVFlQRV81MDIsICJCVCBWb3lhZ2VyIDEwMjAiIH0sCi0JeyAwLCAwLCAiSUVFRSA4MDIuMTFiL1dpcmVsZXNzIExBTiBQQyBDYXJkIiwgQVRNRUxfRldfVFlQRV81MDIsICJTaWVtZW5zIEdpZ2FzZXQgUEMgQ2FyZCBJSSIgfSwKLQl7IDAsIDAsICJJRUVFIDgwMi4xMWIvV2lyZWxlc3MgTEFOIENhcmQgUyIsIEFUTUVMX0ZXX1RZUEVfNTA0XzI5NTgsICJTaWVtZW5zIEdpZ2FzZXQgUEMgQ2FyZCBJSSIgfSwKLQl7IDAsIDAsICJDTmV0L0NOV0xDIDExTWJwcyBXaXJlbGVzcyBQQyBDYXJkIFYtNSIsIEFUTUVMX0ZXX1RZUEVfNTAyRSwgIkNOZXQgQ05XTEMtODExQVJMIiB9LAotCXsgMCwgMCwgIldpcmVsZXNzL1BDX0NBUkQiLCBBVE1FTF9GV19UWVBFXzUwMkQsICJQbGFuZXQgV0wtMzU1MiIgfSwKLQl7IDAsIDAsICJPRU0vMTFNYnBzIFdpcmVsZXNzIExBTiBQQyBDYXJkIFYtMyIsIEFUTUVMX0ZXX1RZUEVfNTAyLCAiT0VNIDExTWJwcyBXTEFOIFBDTUNJQSBDYXJkIiB9LAotCXsgMCwgMCwgIjExV0FWRS8xMVdQNjExQUwtRSIsIEFUTUVMX0ZXX1RZUEVfNTAyRSwgIjExV0FWRSBXYXZlQnVkZHkiIH0sCi0JeyAwLCAwLCAiTEcvTFcyMTAwTiIsIEFUTUVMX0ZXX1RZUEVfNTAyRSwgIkxHIExXMjEwME4gMTFNYnBzIFdMQU4gUENNQ0lBIENhcmQiIH0sCi19OwotCiBzdGF0aWMgdm9pZCBhdG1lbF9jb25maWcoZGV2X2xpbmtfdCAqbGluaykKIHsKIAljbGllbnRfaGFuZGxlX3QgaGFuZGxlOwpAQCAtMzMwLDEwICsyOTQsMTEgQEAKIAlsb2NhbF9pbmZvX3QgKmRldjsKIAlpbnQgbGFzdF9mbiwgbGFzdF9yZXQ7CiAJdV9jaGFyIGJ1Zls2NF07Ci0JaW50IGNhcmRfaW5kZXggPSAtMSwgZG9uZSA9IDA7Ci0JCisJc3RydWN0IHBjbWNpYV9kZXZpY2VfaWQgKmRpZDsKKwogCWhhbmRsZSA9IGxpbmstPmhhbmRsZTsKIAlkZXYgPSBsaW5rLT5wcml2OworCWRpZCA9IGhhbmRsZV90b19kZXYoaGFuZGxlKS5kcml2ZXJfZGF0YTsKIAogCURFQlVHKDAsICJhdG1lbF9jb25maWcoMHglcClcbiIsIGxpbmspOwogCQpAQCAtMzQyLDU5ICszMDcsNiBAQAogCXR1cGxlLlR1cGxlRGF0YU1heCA9IHNpemVvZihidWYpOwogCXR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKIAkKLQl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfTUFORklEOwotCWlmIChwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKSA9PSAwKSB7Ci0JCWludCBpOwotCQljaXN0cGxfbWFuZmlkX3QgKm1hbmZpZDsKLQkJQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaGFuZGxlLCAmdHVwbGUpKTsKLQkJQ1NfQ0hFQ0soUGFyc2VUdXBsZSwgcGNtY2lhX3BhcnNlX3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmcGFyc2UpKTsKLQkJbWFuZmlkID0gJihwYXJzZS5tYW5maWQpOwotCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGNhcmRfdGFibGUpL3NpemVvZihjYXJkX3RhYmxlWzBdKTsgaSsrKSB7Ci0JCQlpZiAoIWNhcmRfdGFibGVbaV0udmVyMSAmJgotCQkJICAgIG1hbmZpZC0+bWFuZiA9PSBjYXJkX3RhYmxlW2ldLm1hbmYgJiYKLQkJCSAgICBtYW5maWQtPmNhcmQgPT0gY2FyZF90YWJsZVtpXS5jYXJkKSB7Ci0JCQkJY2FyZF9pbmRleCA9IGk7Ci0JCQkJZG9uZSA9IDE7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfVkVSU18xOwotCWlmICghZG9uZSAmJiAocGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSkgPT0gMCkpIHsKLQkJaW50IGksIGosIGs7Ci0JCWNpc3RwbF92ZXJzXzFfdCAqdmVyMTsKLQkJQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaGFuZGxlLCAmdHVwbGUpKTsKLQkJQ1NfQ0hFQ0soUGFyc2VUdXBsZSwgcGNtY2lhX3BhcnNlX3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmcGFyc2UpKTsKLQkJdmVyMSA9ICYocGFyc2UudmVyc2lvbl8xKTsKLQkJCi0JCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoY2FyZF90YWJsZSkvc2l6ZW9mKGNhcmRfdGFibGVbMF0pOyBpKyspIHsKLQkJCWZvciAoaiA9IDA7IGogPCB2ZXIxLT5uczsgaisrKSB7Ci0JCQkJY2hhciAqcCA9IGNhcmRfdGFibGVbaV0udmVyMTsKLQkJCQljaGFyICpxID0gJnZlcjEtPnN0clt2ZXIxLT5vZnNbal1dOwotCQkJCWlmICghcCkKLQkJCQkJZ290byBtaXNtYXRjaDsKLQkJCQlmb3IgKGsgPSAwOyBrIDwgajsgaysrKSB7Ci0JCQkJCXdoaWxlICgoKnAgIT0gJ1wwJykgJiYgKCpwICE9ICcvJykpIHArKzsKLQkJCQkJaWYgKCpwID09ICdcMCcpIHsKLQkJCQkJCWlmICgqcSAhPSAnXDAnKQotCQkJCQkJCWdvdG8gbWlzbWF0Y2g7Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQlwKys7Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJd2hpbGUoKCpxICE9ICdcMCcpICYmICgqcCAhPSAnXDAnKSAmJiAKLQkJCQkgICAgICAoKnAgIT0gJy8nKSAmJiAoKnAgPT0gKnEpKSBwKyssIHErKzsKLQkJCQlpZiAoKCgqcCAhPSAnXDAnKSAmJiAqcCAhPSAnLycpIHx8ICpxICE9ICdcMCcpCi0JCQkJCWdvdG8gbWlzbWF0Y2g7Ci0JCQl9Ci0JCQljYXJkX2luZGV4ID0gaTsKLQkJCWJyZWFrOwkvKiBkb25lICovCi0JCQkKLQkJbWlzbWF0Y2g6Ci0JCQlqID0gMDsgLyogZHVtbXkgc3RtdCB0byBzaHV0IHVwIGNvbXBpbGVyICovCi0JCX0KLQl9CQkKLQogCS8qCiAJICBUaGlzIHJlYWRzIHRoZSBjYXJkJ3MgQ09ORklHIHR1cGxlIHRvIGZpbmQgaXRzIGNvbmZpZ3VyYXRpb24KIAkgIHJlZ2lzdGVycy4KQEAgLTUxMSwxMiArNDIzLDEzIEBACiAJKChsb2NhbF9pbmZvX3QqKWxpbmstPnByaXYpLT5ldGhfZGV2ID0gCiAJCWluaXRfYXRtZWxfY2FyZChsaW5rLT5pcnEuQXNzaWduZWRJUlEsCiAJCQkJbGluay0+aW8uQmFzZVBvcnQxLAotCQkJCWNhcmRfaW5kZXggPT0gLTEgPyBBVE1FTF9GV19UWVBFX05PTkUgOiAgY2FyZF90YWJsZVtjYXJkX2luZGV4XS5maXJtd2FyZSwKKwkJCQlkaWQgPyBkaWQtPmRyaXZlcl9pbmZvIDogQVRNRUxfRldfVFlQRV9OT05FLAogCQkJCSZoYW5kbGVfdG9fZGV2KGhhbmRsZSksCiAJCQkJY2FyZF9wcmVzZW50LCAKIAkJCQlsaW5rKTsKIAlpZiAoISgobG9jYWxfaW5mb190KilsaW5rLT5wcml2KS0+ZXRoX2RldikgCi0JCWdvdG8gY3NfZmFpbGVkOworCQkJZ290byBjc19mYWlsZWQ7CisJCiAJCiAJLyoKIAkgIEF0IHRoaXMgcG9pbnQsIHRoZSBkZXZfbm9kZV90IHN0cnVjdHVyZShzKSBuZWVkIHRvIGJlCkBAIC01MjUsMjYgKzQzOCw3IEBACiAJc3RyY3B5KGRldi0+bm9kZS5kZXZfbmFtZSwgKChsb2NhbF9pbmZvX3QqKWxpbmstPnByaXYpLT5ldGhfZGV2LT5uYW1lICk7CiAJZGV2LT5ub2RlLm1ham9yID0gZGV2LT5ub2RlLm1pbm9yID0gMDsKIAlsaW5rLT5kZXYgPSAmZGV2LT5ub2RlOwotCQotCS8qIEZpbmFsbHksIHJlcG9ydCB3aGF0IHdlJ3ZlIGRvbmUgKi8KLQlwcmludGsoS0VSTl9JTkZPICIlczogJXMlc2luZGV4IDB4JTAyeDogVmNjICVkLiVkIiwKLQkgICAgICAgZGV2LT5ub2RlLmRldl9uYW1lLAotCSAgICAgICBjYXJkX2luZGV4ID09IC0xID8gIiIgOiAgY2FyZF90YWJsZVtjYXJkX2luZGV4XS5uYW1lLAotCSAgICAgICBjYXJkX2luZGV4ID09IC0xID8gIiIgOiAiICIsCi0JICAgICAgIGxpbmstPmNvbmYuQ29uZmlnSW5kZXgsCi0JICAgICAgIGxpbmstPmNvbmYuVmNjLzEwLCBsaW5rLT5jb25mLlZjYyUxMCk7Ci0JaWYgKGxpbmstPmNvbmYuVnBwMSkKLQkJcHJpbnRrKCIsIFZwcCAlZC4lZCIsIGxpbmstPmNvbmYuVnBwMS8xMCwgbGluay0+Y29uZi5WcHAxJTEwKTsKLQlpZiAobGluay0+Y29uZi5BdHRyaWJ1dGVzICYgQ09ORl9FTkFCTEVfSVJRKQotCQlwcmludGsoIiwgaXJxICVkIiwgbGluay0+aXJxLkFzc2lnbmVkSVJRKTsKLQlpZiAobGluay0+aW8uTnVtUG9ydHMxKQotCQlwcmludGsoIiwgaW8gMHglMDR4LTB4JTA0eCIsIGxpbmstPmlvLkJhc2VQb3J0MSwKLQkJICAgICAgIGxpbmstPmlvLkJhc2VQb3J0MStsaW5rLT5pby5OdW1Qb3J0czEtMSk7Ci0JaWYgKGxpbmstPmlvLk51bVBvcnRzMikKLQkJcHJpbnRrKCIgJiAweCUwNHgtMHglMDR4IiwgbGluay0+aW8uQmFzZVBvcnQyLAotCQkgICAgICAgbGluay0+aW8uQmFzZVBvcnQyK2xpbmstPmlvLk51bVBvcnRzMi0xKTsKLQlwcmludGsoIlxuIik7Ci0JCisJCQkKIAlsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJR19QRU5ESU5HOwogCXJldHVybjsKIAkKQEAgLTU3MSw3ICs0NjUsNyBAQAogCWxpbmstPmRldiA9IE5VTEw7CiAJCiAJaWYgKGRldikgCi0JCXN0b3BfYXRtZWxfY2FyZChkZXYsIDApOworCQlzdG9wX2F0bWVsX2NhcmQoZGV2KTsKIAkoKGxvY2FsX2luZm9fdCopbGluay0+cHJpdiktPmV0aF9kZXYgPSBOVUxMOyAKIAkKIAkvKiBEb24ndCBib3RoZXIgY2hlY2tpbmcgdG8gc2VlIGlmIHRoZXNlIHN1Y2NlZWQgb3Igbm90ICovCkBAIC02MzksMjUgKzUzMyw0NyBAQAogfSAvKiBhdG1lbF9ldmVudCAqLwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIFdlIHVzZSB0aGUgZHJpdmVyX2luZm8gZmllbGQgdG8gc3RvcmUgdGhlIGNvcnJlY3QgZmlybXdhcmUgdHlwZSBmb3IgYSBjYXJkLiAqLworCisjZGVmaW5lIFBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEX0lORk8obWFuZiwgY2FyZCwgaW5mbykgeyBcCisJLm1hdGNoX2ZsYWdzID0gUENNQ0lBX0RFVl9JRF9NQVRDSF9NQU5GX0lEfCBcCisJCQlQQ01DSUFfREVWX0lEX01BVENIX0NBUkRfSUQsIFwKKwkubWFuZl9pZCA9IChtYW5mKSwgXAorCS5jYXJkX2lkID0gKGNhcmQpLCBcCisgICAgICAgIC5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkoaW5mbyksIH0KKworI2RlZmluZSBQQ01DSUFfREVWSUNFX1BST0RfSUQxMl9JTkZPKHYxLCB2MiwgdmgxLCB2aDIsIGluZm8pIHsgXAorCS5tYXRjaF9mbGFncyA9IFBDTUNJQV9ERVZfSURfTUFUQ0hfUFJPRF9JRDF8IFwKKwkJCVBDTUNJQV9ERVZfSURfTUFUQ0hfUFJPRF9JRDIsIFwKKwkucHJvZF9pZCA9IHsgKHYxKSwgKHYyKSwgTlVMTCwgTlVMTCB9LCBcCisJLnByb2RfaWRfaGFzaCA9IHsgKHZoMSksICh2aDIpLCAwLCAwIH0sIFwKKyAgICAgICAgLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KShpbmZvKSwgfQorCiBzdGF0aWMgc3RydWN0IHBjbWNpYV9kZXZpY2VfaWQgYXRtZWxfaWRzW10gPSB7Ci0JUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMTAxLCAweDA2MjApLAotCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDEwMSwgMHgwNjk2KSwKLQlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAxYmYsIDB4MzMwMiksCi0JUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHhkNjAxLCAweDAwMDcpLAotCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCIxMVdBVkUiLCAiMTFXUDYxMUFMLUUiLCAweDllYjJkYTFmLCAweGM5YTBkM2Y5KSwKLQlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiQVRNRUwiLCAiQVQ3NkM1MDJBUiIsIDB4YWJkYTQxNjQsIDB4NDFiMzdlMWYpLAotCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJBVE1FTCIsICJBVDc2QzUwNCIsIDB4YWJkYTQxNjQsIDB4NTA0MDY3MGEpLAotCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJBVE1FTCIsICJBVDc2QzUwNEEiLCAweGFiZGE0MTY0LCAweGUxNWVkODdmKSwKLQlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiQlQiLCAiVm95YWdlciAxMDIwIExhcHRvcCBBZGFwdGVyIiwgMHhhZTQ5Yjg2YSwgMHgxZTk1N2NkNSksCi0JUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIkNOZXQiLCAiQ05XTEMgMTFNYnBzIFdpcmVsZXNzIFBDIENhcmQgVi01IiwgMHhiYzQ3N2RkZSwgMHg1MDJmYWU2YiksCi0JUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIklFRUUgODAyLjExYiIsICJXaXJlbGVzcyBMQU4gUEMgQ2FyZCIsIDB4NWI4Nzg3MjQsIDB4MTIyZjFkZjYpLAotCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJPRU0iLCAiMTFNYnBzIFdpcmVsZXNzIExBTiBQQyBDYXJkIFYtMyIsIDB4ZmVhNTRjOTAsIDB4MWM1YjBmNjgpLAotCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJTTUMiLCAiMjYzMlciLCAweGM0ZjhiMThiLCAweDMwZjM4Nzc0KSwKLQlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiU01DIiwgIjI2MzJXLVYyIiwgMHhjNGY4YjE4YiwgMHgxNzJkMTM3NyksCi0JUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIldpcmVsZXNzIiwgIlBDIiwgMHhhNDA3ZWNkZCwgMHg1NTZlNGQ3ZSksCi0JUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIldMQU4iLCAiODAyLjExYiBQQyBDQVJEIiwgMHg1NzVjNTE2YywgMHhiMWY2ZGJjNCksCisJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkRfSU5GTygweDAxMDEsIDB4MDYyMCwgQVRNRUxfRldfVFlQRV81MDJfM0NPTSksCisJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkRfSU5GTygweDAxMDEsIDB4MDY5NiwgQVRNRUxfRldfVFlQRV81MDJfM0NPTSksCisJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkRfSU5GTygweDAxYmYsIDB4MzMwMiwgQVRNRUxfRldfVFlQRV81MDJFKSwKKwlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRF9JTkZPKDB4ZDYwMSwgMHgwMDA3LCBBVE1FTF9GV19UWVBFXzUwMiksCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTJfSU5GTygiMTFXQVZFIiwgIjExV1A2MTFBTC1FIiwgMHg5ZWIyZGExZiwgMHhjOWEwZDNmOSwgQVRNRUxfRldfVFlQRV81MDJFKSwKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQxMl9JTkZPKCJBVE1FTCIsICJBVDc2QzUwMkFSIiwgMHhhYmRhNDE2NCwgMHg0MWIzN2UxZiwgQVRNRUxfRldfVFlQRV81MDIpLAorCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyX0lORk8oIkFUTUVMIiwgIkFUNzZDNTAyQVJfRCIsIDB4YWJkYTQxNjQsIDB4MzY3NWQ3MDQsIEFUTUVMX0ZXX1RZUEVfNTAyRCksCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTJfSU5GTygiQVRNRUwiLCAiQVQ3NkM1MDJBUl9FIiwgMHhhYmRhNDE2NCwgMHg0MTcyZTc5MiwgQVRNRUxfRldfVFlQRV81MDJFKSwKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQxMl9JTkZPKCJBVE1FTCIsICJBVDc2QzUwNF9SIiwgMHhhYmRhNDE2NCwgMHg5MTdmM2Q3MiwgQVRNRUxfRldfVFlQRV81MDRfMjk1OCksCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTJfSU5GTygiQVRNRUwiLCAiQVQ3NkM1MDQiLCAweGFiZGE0MTY0LCAweDUwNDA2NzBhLCBBVE1FTF9GV19UWVBFXzUwNCksCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTJfSU5GTygiQVRNRUwiLCAiQVQ3NkM1MDRBIiwgMHhhYmRhNDE2NCwgMHhlMTVlZDg3ZiwgQVRNRUxfRldfVFlQRV81MDRBXzI5NTgpLAorCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyX0lORk8oIkJUIiwgIlZveWFnZXIgMTAyMCBMYXB0b3AgQWRhcHRlciIsIDB4YWU0OWI4NmEsIDB4MWU5NTdjZDUsIEFUTUVMX0ZXX1RZUEVfNTAyKSwKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQxMl9JTkZPKCJDTmV0IiwgIkNOV0xDIDExTWJwcyBXaXJlbGVzcyBQQyBDYXJkIFYtNSIsIDB4YmM0NzdkZGUsIDB4NTAyZmFlNmIsIEFUTUVMX0ZXX1RZUEVfNTAyRSksCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTJfSU5GTygiSUVFRSA4MDIuMTFiIiwgIldpcmVsZXNzIExBTiBQQyBDYXJkIiwgMHg1Yjg3ODcyNCwgMHgxMjJmMWRmNiwgQVRNRUxfRldfVFlQRV81MDIpLAorCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyX0lORk8oIklFRUUgODAyLjExYiIsICJXaXJlbGVzcyBMQU4gQ2FyZCBTIiwgMHg1Yjg3ODcyNCwgMHg1ZmJhNTMzYSwgQVRNRUxfRldfVFlQRV81MDRfMjk1OCksCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTJfSU5GTygiT0VNIiwgIjExTWJwcyBXaXJlbGVzcyBMQU4gUEMgQ2FyZCBWLTMiLCAweGZlYTU0YzkwLCAweDFjNWIwZjY4LCBBVE1FTF9GV19UWVBFXzUwMiksCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTJfSU5GTygiU01DIiwgIjI2MzJXIiwgMHhjNGY4YjE4YiwgMHgzMGYzODc3NCwgQVRNRUxfRldfVFlQRV81MDJEKSwKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQxMl9JTkZPKCJTTUMiLCAiMjYzMlctVjIiLCAweGM0ZjhiMThiLCAweDE3MmQxMzc3LCBBVE1FTF9GV19UWVBFXzUwMiksCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTJfSU5GTygiV2lyZWxlc3MiLCAiUENfQ0FSRCIsIDB4YTQwN2VjZGQsIDB4MTE5ZjYzMTQsIEFUTUVMX0ZXX1RZUEVfNTAyRCksCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTJfSU5GTygiV0xBTiIsICI4MDIuMTFiIFBDIENBUkQiLCAweDU3NWM1MTZjLCAweGIxZjZkYmM0LCBBVE1FTF9GV19UWVBFXzUwMkQpLAorCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyX0lORk8oIkxHIiwgIkxXMjEwME4iLCAweGI0NzRkNDNhLCAweDZiMWZlYzk0LCBBVE1FTF9GV19UWVBFXzUwMkUpLAogCVBDTUNJQV9ERVZJQ0VfTlVMTAogfTsKKwogTU9EVUxFX0RFVklDRV9UQUJMRShwY21jaWEsIGF0bWVsX2lkcyk7CiAKIHN0YXRpYyBzdHJ1Y3QgcGNtY2lhX2RyaXZlciBhdG1lbF9kcml2ZXIgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbF9wY2kuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsX3BjaS5jCmluZGV4IDJlYjAwYTkuLmE2MWIzYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsX3BjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsX3BjaS5jCkBAIC03Miw3ICs3Miw3IEBACiAKIHN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBhdG1lbF9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewotCXN0b3BfYXRtZWxfY2FyZChwY2lfZ2V0X2RydmRhdGEocGRldiksIDEpOworCXN0b3BfYXRtZWxfY2FyZChwY2lfZ2V0X2RydmRhdGEocGRldikpOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCBhdG1lbF9pbml0X21vZHVsZSh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcC5jCmluZGV4IDZhOTZjZDkuLjNkMmVhNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXAuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwLmMKQEAgLTEzLDcgKzEzLDYgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2h3LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2h3LmMKaW5kZXggNTlmYzE1NS4uYWJmYWU3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9ody5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfaHcuYwpAQCAtMzEsNyArMzEsNiBAQAogCiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAKICNpbmNsdWRlIDxhc20vZGVsYXkuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9wY2kuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfcGNpLmMKaW5kZXggZGEwYzgwZi4uMmU4NWJkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9wY2kuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX3BjaS5jCkBAIC01LDcgKzUsNiBAQAogICogQW5keSBXYXJuZXIgPGFuZHl3QHBvYm94LmNvbT4gKi8KIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaWYuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfcGx4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX3BseC5jCmluZGV4IDc4ZDY3YjQwOC4uOTRmZTI0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9wbHguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX3BseC5jCkBAIC04LDcgKzgsNiBAQAogCiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lmLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyMTAwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyMTAwLmMKaW5kZXggYWQ3ZjhjZC4uYTJlNjIxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MjEwMC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzIxMDAuYwpAQCAtMTY3LDE3ICsxNjcsMTYgQEAKIAogI2luY2x1ZGUgImlwdzIxMDAuaCIKIAotI2RlZmluZSBJUFcyMTAwX1ZFUlNJT04gIjEuMS4wIgorI2RlZmluZSBJUFcyMTAwX1ZFUlNJT04gIjEuMS4zIgogCiAjZGVmaW5lIERSVl9OQU1FCSJpcHcyMTAwIgogI2RlZmluZSBEUlZfVkVSU0lPTglJUFcyMTAwX1ZFUlNJT04KICNkZWZpbmUgRFJWX0RFU0NSSVBUSU9OCSJJbnRlbChSKSBQUk8vV2lyZWxlc3MgMjEwMCBOZXR3b3JrIERyaXZlciIKLSNkZWZpbmUgRFJWX0NPUFlSSUdIVAkiQ29weXJpZ2h0KGMpIDIwMDMtMjAwNCBJbnRlbCBDb3Jwb3JhdGlvbiIKLQorI2RlZmluZSBEUlZfQ09QWVJJR0hUCSJDb3B5cmlnaHQoYykgMjAwMy0yMDA1IEludGVsIENvcnBvcmF0aW9uIgogCiAvKiBEZWJ1Z2dpbmcgc3R1ZmYgKi8KICNpZmRlZiBDT05GSUdfSVBXX0RFQlVHCi0jZGVmaW5lIENPTkZJR19JUFcyMTAwX1JYX0RFQlVHICAgLyogUmVjZXB0aW9uIGRlYnVnZ2luZyAqLworI2RlZmluZSBDT05GSUdfSVBXMjEwMF9SWF9ERUJVRwkvKiBSZWNlcHRpb24gZGVidWdnaW5nICovCiAjZW5kaWYKIAogTU9EVUxFX0RFU0NSSVBUSU9OKERSVl9ERVNDUklQVElPTik7CkBAIC0yMjAsMTggKzIxOSwxOCBAQAogfSB3aGlsZSAoMCkKICNlbHNlCiAjZGVmaW5lIElQV19ERUJVRyhsZXZlbCwgbWVzc2FnZS4uLikgZG8ge30gd2hpbGUgKDApCi0jZW5kaWYgLyogQ09ORklHX0lQV19ERUJVRyAqLworI2VuZGlmCQkJCS8qIENPTkZJR19JUFdfREVCVUcgKi8KIAogI2lmZGVmIENPTkZJR19JUFdfREVCVUcKIHN0YXRpYyBjb25zdCBjaGFyICpjb21tYW5kX3R5cGVzW10gPSB7CiAJInVuZGVmaW5lZCIsCi0JInVudXNlZCIsIC8qIEhPU1RfQVRURU5USU9OICovCisJInVudXNlZCIsCQkvKiBIT1NUX0FUVEVOVElPTiAqLwogCSJIT1NUX0NPTVBMRVRFIiwKLQkidW51c2VkIiwgLyogU0xFRVAgKi8KLQkidW51c2VkIiwgLyogSE9TVF9QT1dFUl9ET1dOICovCisJInVudXNlZCIsCQkvKiBTTEVFUCAqLworCSJ1bnVzZWQiLAkJLyogSE9TVF9QT1dFUl9ET1dOICovCiAJInVudXNlZCIsCiAJIlNZU1RFTV9DT05GSUciLAotCSJ1bnVzZWQiLCAvKiBTRVRfSU1SICovCisJInVudXNlZCIsCQkvKiBTRVRfSU1SICovCiAJIlNTSUQiLAogCSJNQU5EQVRPUllfQlNTSUQiLAogCSJBVVRIRU5USUNBVElPTl9UWVBFIiwKQEAgLTI3NywxNyArMjc2LDE2IEBACiAJIkdST1VQX09SRElOQUxTIiwKIAkiU0hPUlRfUkVUUllfTElNSVQiLAogCSJMT05HX1JFVFJZX0xJTUlUIiwKLQkidW51c2VkIiwgLyogU0FWRV9DQUxJQlJBVElPTiAqLwotCSJ1bnVzZWQiLCAvKiBSRVNUT1JFX0NBTElCUkFUSU9OICovCisJInVudXNlZCIsCQkvKiBTQVZFX0NBTElCUkFUSU9OICovCisJInVudXNlZCIsCQkvKiBSRVNUT1JFX0NBTElCUkFUSU9OICovCiAJInVuZGVmaW5lZCIsCiAJInVuZGVmaW5lZCIsCiAJInVuZGVmaW5lZCIsCiAJIkhPU1RfUFJFX1BPV0VSX0RPV04iLAotCSJ1bnVzZWQiLCAvKiBIT1NUX0lOVEVSUlVQVF9DT0FMRVNDSU5HICovCisJInVudXNlZCIsCQkvKiBIT1NUX0lOVEVSUlVQVF9DT0FMRVNDSU5HICovCiAJInVuZGVmaW5lZCIsCiAJIkNBUkRfRElTQUJMRV9QSFlfT0ZGIiwKLQkiTVNEVV9UWF9SQVRFUyIKLQkidW5kZWZpbmVkIiwKKwkiTVNEVV9UWF9SQVRFUyIgInVuZGVmaW5lZCIsCiAJInVuZGVmaW5lZCIsCiAJIlNFVF9TVEFUSU9OX1NUQVRfQklUUyIsCiAJIkNMRUFSX1NUQVRJT05TX1NUQVRfQklUUyIsCkBAIC0yOTgsNyArMjk2LDYgQEAKIH07CiAjZW5kaWYKIAotCiAvKiBQcmUtZGVjbCB1bnRpbCB3ZSBnZXQgdGhlIGNvZGUgc29saWQgYW5kIHRoZW4gd2UgY2FuIGNsZWFuIGl0IHVwICovCiBzdGF0aWMgdm9pZCBpcHcyMTAwX3R4X3NlbmRfY29tbWFuZHMoc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdik7CiBzdGF0aWMgdm9pZCBpcHcyMTAwX3R4X3NlbmRfZGF0YShzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2KTsKQEAgLTMyMSwxMSArMzE4LDEwIEBACiBzdGF0aWMgaW50IGlwdzIxMDBfdWNvZGVfZG93bmxvYWQoc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiwKIAkJCQkgIHN0cnVjdCBpcHcyMTAwX2Z3ICpmdyk7CiBzdGF0aWMgdm9pZCBpcHcyMTAwX3d4X2V2ZW50X3dvcmsoc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdik7Ci1zdGF0aWMgc3RydWN0IGl3X3N0YXRpc3RpY3MgKmlwdzIxMDBfd3hfd2lyZWxlc3Nfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYpOworc3RhdGljIHN0cnVjdCBpd19zdGF0aXN0aWNzICppcHcyMTAwX3d4X3dpcmVsZXNzX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHN0cnVjdCBpd19oYW5kbGVyX2RlZiBpcHcyMTAwX3d4X2hhbmRsZXJfZGVmOwogCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCByZWFkX3JlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiByZWcsIHUzMiAqdmFsKQorc3RhdGljIGlubGluZSB2b2lkIHJlYWRfcmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHJlZywgdTMyICogdmFsKQogewogCSp2YWwgPSByZWFkbCgodm9pZCBfX2lvbWVtICopKGRldi0+YmFzZV9hZGRyICsgcmVnKSk7CiAJSVBXX0RFQlVHX0lPKCJyOiAweCUwOFggPT4gMHglMDhYXG4iLCByZWcsICp2YWwpOwpAQCAtMzM3LDEzICszMzMsMTQgQEAKIAlJUFdfREVCVUdfSU8oInc6IDB4JTA4WCA8PSAweCUwOFhcbiIsIHJlZywgdmFsKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHJlYWRfcmVnaXN0ZXJfd29yZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgcmVnLCB1MTYgKnZhbCkKK3N0YXRpYyBpbmxpbmUgdm9pZCByZWFkX3JlZ2lzdGVyX3dvcmQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHJlZywKKwkJCQkgICAgICB1MTYgKiB2YWwpCiB7CiAJKnZhbCA9IHJlYWR3KCh2b2lkIF9faW9tZW0gKikoZGV2LT5iYXNlX2FkZHIgKyByZWcpKTsKIAlJUFdfREVCVUdfSU8oInI6IDB4JTA4WCA9PiAlMDRYXG4iLCByZWcsICp2YWwpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcmVhZF9yZWdpc3Rlcl9ieXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiByZWcsIHU4ICp2YWwpCitzdGF0aWMgaW5saW5lIHZvaWQgcmVhZF9yZWdpc3Rlcl9ieXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiByZWcsIHU4ICogdmFsKQogewogCSp2YWwgPSByZWFkYigodm9pZCBfX2lvbWVtICopKGRldi0+YmFzZV9hZGRyICsgcmVnKSk7CiAJSVBXX0RFQlVHX0lPKCJyOiAweCUwOFggPT4gJTAyWFxuIiwgcmVnLCAqdmFsKTsKQEAgLTM1NSwxNCArMzUyLDEzIEBACiAJSVBXX0RFQlVHX0lPKCJ3OiAweCUwOFggPD0gJTA0WFxuIiwgcmVnLCB2YWwpOwogfQogCi0KIHN0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZV9yZWdpc3Rlcl9ieXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiByZWcsIHU4IHZhbCkKIHsKIAl3cml0ZWIodmFsLCAodm9pZCBfX2lvbWVtICopKGRldi0+YmFzZV9hZGRyICsgcmVnKSk7CiAJSVBXX0RFQlVHX0lPKCJ3OiAweCUwOFggPTwgJTAyWFxuIiwgcmVnLCB2YWwpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcmVhZF9uaWNfZHdvcmQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGFkZHIsIHUzMiAqdmFsKQorc3RhdGljIGlubGluZSB2b2lkIHJlYWRfbmljX2R3b3JkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBhZGRyLCB1MzIgKiB2YWwpCiB7CiAJd3JpdGVfcmVnaXN0ZXIoZGV2LCBJUFdfUkVHX0lORElSRUNUX0FDQ0VTU19BRERSRVNTLAogCQkgICAgICAgYWRkciAmIElQV19SRUdfSU5ESVJFQ1RfQUREUl9NQVNLKTsKQEAgLTM3Niw3ICszNzIsNyBAQAogCXdyaXRlX3JlZ2lzdGVyKGRldiwgSVBXX1JFR19JTkRJUkVDVF9BQ0NFU1NfREFUQSwgdmFsKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHJlYWRfbmljX3dvcmQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGFkZHIsIHUxNiAqdmFsKQorc3RhdGljIGlubGluZSB2b2lkIHJlYWRfbmljX3dvcmQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGFkZHIsIHUxNiAqIHZhbCkKIHsKIAl3cml0ZV9yZWdpc3RlcihkZXYsIElQV19SRUdfSU5ESVJFQ1RfQUNDRVNTX0FERFJFU1MsCiAJCSAgICAgICBhZGRyICYgSVBXX1JFR19JTkRJUkVDVF9BRERSX01BU0spOwpAQCAtMzkwLDcgKzM4Niw3IEBACiAJd3JpdGVfcmVnaXN0ZXJfd29yZChkZXYsIElQV19SRUdfSU5ESVJFQ1RfQUNDRVNTX0RBVEEsIHZhbCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCByZWFkX25pY19ieXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBhZGRyLCB1OCAqdmFsKQorc3RhdGljIGlubGluZSB2b2lkIHJlYWRfbmljX2J5dGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGFkZHIsIHU4ICogdmFsKQogewogCXdyaXRlX3JlZ2lzdGVyKGRldiwgSVBXX1JFR19JTkRJUkVDVF9BQ0NFU1NfQUREUkVTUywKIAkJICAgICAgIGFkZHIgJiBJUFdfUkVHX0lORElSRUNUX0FERFJfTUFTSyk7CkBAIC00MTYsNyArNDEyLDcgQEAKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHdyaXRlX25pY19tZW1vcnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGFkZHIsIHUzMiBsZW4sCi0JCQkJICAgIGNvbnN0IHU4ICpidWYpCisJCQkJICAgIGNvbnN0IHU4ICogYnVmKQogewogCXUzMiBhbGlnbmVkX2FkZHI7CiAJdTMyIGFsaWduZWRfbGVuOwpAQCAtNDMxLDMyICs0MjcsMzAgQEAKIAkJd3JpdGVfcmVnaXN0ZXIoZGV2LCBJUFdfUkVHX0lORElSRUNUX0FDQ0VTU19BRERSRVNTLAogCQkJICAgICAgIGFsaWduZWRfYWRkcik7CiAJCWZvciAoaSA9IGRpZl9sZW47IGkgPCA0OyBpKyssIGJ1ZisrKQotCQkJd3JpdGVfcmVnaXN0ZXJfYnl0ZSgKLQkJCQlkZXYsIElQV19SRUdfSU5ESVJFQ1RfQUNDRVNTX0RBVEEgKyBpLAotCQkJCSpidWYpOworCQkJd3JpdGVfcmVnaXN0ZXJfYnl0ZShkZXYsCisJCQkJCSAgICBJUFdfUkVHX0lORElSRUNUX0FDQ0VTU19EQVRBICsgaSwKKwkJCQkJICAgICpidWYpOwogCiAJCWxlbiAtPSBkaWZfbGVuOwogCQlhbGlnbmVkX2FkZHIgKz0gNDsKIAl9CiAKIAkvKiByZWFkIERXcyB0aHJvdWdoIGF1dG9pbmNyZW1lbnQgcmVnaXN0ZXJzICovCi0Jd3JpdGVfcmVnaXN0ZXIoZGV2LCBJUFdfUkVHX0FVVE9JTkNSRU1FTlRfQUREUkVTUywKLQkJICAgICAgIGFsaWduZWRfYWRkcik7CisJd3JpdGVfcmVnaXN0ZXIoZGV2LCBJUFdfUkVHX0FVVE9JTkNSRU1FTlRfQUREUkVTUywgYWxpZ25lZF9hZGRyKTsKIAlhbGlnbmVkX2xlbiA9IGxlbiAmICh+MHgzKTsKIAlmb3IgKGkgPSAwOyBpIDwgYWxpZ25lZF9sZW47IGkgKz0gNCwgYnVmICs9IDQsIGFsaWduZWRfYWRkciArPSA0KQotCQl3cml0ZV9yZWdpc3RlcigKLQkJCWRldiwgSVBXX1JFR19BVVRPSU5DUkVNRU5UX0RBVEEsICoodTMyICopYnVmKTsKKwkJd3JpdGVfcmVnaXN0ZXIoZGV2LCBJUFdfUkVHX0FVVE9JTkNSRU1FTlRfREFUQSwgKih1MzIgKikgYnVmKTsKIAogCS8qIGNvcHkgdGhlIGxhc3QgbmliYmxlICovCiAJZGlmX2xlbiA9IGxlbiAtIGFsaWduZWRfbGVuOwogCXdyaXRlX3JlZ2lzdGVyKGRldiwgSVBXX1JFR19JTkRJUkVDVF9BQ0NFU1NfQUREUkVTUywgYWxpZ25lZF9hZGRyKTsKIAlmb3IgKGkgPSAwOyBpIDwgZGlmX2xlbjsgaSsrLCBidWYrKykKLQkJd3JpdGVfcmVnaXN0ZXJfYnl0ZSgKLQkJCWRldiwgSVBXX1JFR19JTkRJUkVDVF9BQ0NFU1NfREFUQSArIGksICpidWYpOworCQl3cml0ZV9yZWdpc3Rlcl9ieXRlKGRldiwgSVBXX1JFR19JTkRJUkVDVF9BQ0NFU1NfREFUQSArIGksCisJCQkJICAgICpidWYpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcmVhZF9uaWNfbWVtb3J5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBhZGRyLCB1MzIgbGVuLAotCQkJCSAgIHU4ICpidWYpCisJCQkJICAgdTggKiBidWYpCiB7CiAJdTMyIGFsaWduZWRfYWRkcjsKIAl1MzIgYWxpZ25lZF9sZW47CkBAIC00NzEsMzkgKzQ2NSwzOCBAQAogCQl3cml0ZV9yZWdpc3RlcihkZXYsIElQV19SRUdfSU5ESVJFQ1RfQUNDRVNTX0FERFJFU1MsCiAJCQkgICAgICAgYWxpZ25lZF9hZGRyKTsKIAkJZm9yIChpID0gZGlmX2xlbjsgaSA8IDQ7IGkrKywgYnVmKyspCi0JCQlyZWFkX3JlZ2lzdGVyX2J5dGUoCi0JCQkJZGV2LCBJUFdfUkVHX0lORElSRUNUX0FDQ0VTU19EQVRBICsgaSwgYnVmKTsKKwkJCXJlYWRfcmVnaXN0ZXJfYnl0ZShkZXYsCisJCQkJCSAgIElQV19SRUdfSU5ESVJFQ1RfQUNDRVNTX0RBVEEgKyBpLAorCQkJCQkgICBidWYpOwogCiAJCWxlbiAtPSBkaWZfbGVuOwogCQlhbGlnbmVkX2FkZHIgKz0gNDsKIAl9CiAKIAkvKiByZWFkIERXcyB0aHJvdWdoIGF1dG9pbmNyZW1lbnQgcmVnaXN0ZXJzICovCi0Jd3JpdGVfcmVnaXN0ZXIoZGV2LCBJUFdfUkVHX0FVVE9JTkNSRU1FTlRfQUREUkVTUywKLQkJICAgICAgIGFsaWduZWRfYWRkcik7CisJd3JpdGVfcmVnaXN0ZXIoZGV2LCBJUFdfUkVHX0FVVE9JTkNSRU1FTlRfQUREUkVTUywgYWxpZ25lZF9hZGRyKTsKIAlhbGlnbmVkX2xlbiA9IGxlbiAmICh+MHgzKTsKIAlmb3IgKGkgPSAwOyBpIDwgYWxpZ25lZF9sZW47IGkgKz0gNCwgYnVmICs9IDQsIGFsaWduZWRfYWRkciArPSA0KQotCQlyZWFkX3JlZ2lzdGVyKGRldiwgSVBXX1JFR19BVVRPSU5DUkVNRU5UX0RBVEEsCi0JCQkgICAgICAodTMyICopYnVmKTsKKwkJcmVhZF9yZWdpc3RlcihkZXYsIElQV19SRUdfQVVUT0lOQ1JFTUVOVF9EQVRBLCAodTMyICopIGJ1Zik7CiAKIAkvKiBjb3B5IHRoZSBsYXN0IG5pYmJsZSAqLwogCWRpZl9sZW4gPSBsZW4gLSBhbGlnbmVkX2xlbjsKLQl3cml0ZV9yZWdpc3RlcihkZXYsIElQV19SRUdfSU5ESVJFQ1RfQUNDRVNTX0FERFJFU1MsCi0JCSAgICAgICBhbGlnbmVkX2FkZHIpOworCXdyaXRlX3JlZ2lzdGVyKGRldiwgSVBXX1JFR19JTkRJUkVDVF9BQ0NFU1NfQUREUkVTUywgYWxpZ25lZF9hZGRyKTsKIAlmb3IgKGkgPSAwOyBpIDwgZGlmX2xlbjsgaSsrLCBidWYrKykKLQkJcmVhZF9yZWdpc3Rlcl9ieXRlKGRldiwgSVBXX1JFR19JTkRJUkVDVF9BQ0NFU1NfREFUQSArCi0JCQkJICAgaSwgYnVmKTsKKwkJcmVhZF9yZWdpc3Rlcl9ieXRlKGRldiwgSVBXX1JFR19JTkRJUkVDVF9BQ0NFU1NfREFUQSArIGksIGJ1Zik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGlwdzIxMDBfaHdfaXNfYWRhcHRlcl9pbl9zeXN0ZW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlyZXR1cm4gKGRldi0+YmFzZV9hZGRyICYmCi0JCShyZWFkbCgodm9pZCBfX2lvbWVtICopKGRldi0+YmFzZV9hZGRyICsgSVBXX1JFR19ET0FfREVCVUdfQVJFQV9TVEFSVCkpCisJCShyZWFkbAorCQkgKCh2b2lkIF9faW9tZW0gKikoZGV2LT5iYXNlX2FkZHIgKworCQkJCSAgIElQV19SRUdfRE9BX0RFQlVHX0FSRUFfU1RBUlQpKQogCQkgPT0gSVBXX0RBVEFfRE9BX0RFQlVHX1ZBTFVFKSk7CiB9CiAKIHN0YXRpYyBpbnQgaXB3MjEwMF9nZXRfb3JkaW5hbChzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2LCB1MzIgb3JkLAotCQkJICAgICAgIHZvaWQgKnZhbCwgdTMyICpsZW4pCisJCQkgICAgICAgdm9pZCAqdmFsLCB1MzIgKiBsZW4pCiB7CiAJc3RydWN0IGlwdzIxMDBfb3JkaW5hbHMgKm9yZGluYWxzID0gJnByaXYtPm9yZGluYWxzOwogCXUzMiBhZGRyOwpAQCAtNTI5LDggKzUyMiw4IEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCi0JCXJlYWRfbmljX2R3b3JkKHByaXYtPm5ldF9kZXYsIG9yZGluYWxzLT50YWJsZTFfYWRkciArIChvcmQgPDwgMiksCi0JCQkgICAgICAgJmFkZHIpOworCQlyZWFkX25pY19kd29yZChwcml2LT5uZXRfZGV2LAorCQkJICAgICAgIG9yZGluYWxzLT50YWJsZTFfYWRkciArIChvcmQgPDwgMiksICZhZGRyKTsKIAkJcmVhZF9uaWNfZHdvcmQocHJpdi0+bmV0X2RldiwgYWRkciwgdmFsKTsKIAogCQkqbGVuID0gSVBXX09SRF9UQUJfMV9FTlRSWV9TSVpFOwpAQCAtNTQzLDggKzUzNiw4IEBACiAJCW9yZCAtPSBJUFdfU1RBUlRfT1JEX1RBQl8yOwogCiAJCS8qIGdldCB0aGUgYWRkcmVzcyBvZiBzdGF0aXN0aWMgKi8KLQkJcmVhZF9uaWNfZHdvcmQocHJpdi0+bmV0X2Rldiwgb3JkaW5hbHMtPnRhYmxlMl9hZGRyICsgKG9yZCA8PCAzKSwKLQkJCSAgICAgICAmYWRkcik7CisJCXJlYWRfbmljX2R3b3JkKHByaXYtPm5ldF9kZXYsCisJCQkgICAgICAgb3JkaW5hbHMtPnRhYmxlMl9hZGRyICsgKG9yZCA8PCAzKSwgJmFkZHIpOwogCiAJCS8qIGdldCB0aGUgc2Vjb25kIERXIG9mIHN0YXRpc3RpY3MgOwogCQkgKiB0d28gMTYtYml0IHdvcmRzIC0gZmlyc3QgaXMgbGVuZ3RoLCBzZWNvbmQgaXMgY291bnQgKi8KQEAgLTU1MywxMCArNTQ2LDEwIEBACiAJCQkgICAgICAgJmZpZWxkX2luZm8pOwogCiAJCS8qIGdldCBlYWNoIGVudHJ5IGxlbmd0aCAqLwotCQlmaWVsZF9sZW4gPSAqKCh1MTYgKikmZmllbGRfaW5mbyk7CisJCWZpZWxkX2xlbiA9ICooKHUxNiAqKSAmIGZpZWxkX2luZm8pOwogCiAJCS8qIGdldCBudW1iZXIgb2YgZW50cmllcyAqLwotCQlmaWVsZF9jb3VudCA9ICooKCh1MTYgKikmZmllbGRfaW5mbykgKyAxKTsKKwkJZmllbGRfY291bnQgPSAqKCgodTE2ICopICYgZmllbGRfaW5mbykgKyAxKTsKIAogCQkvKiBhYm9ydCBpZiBubyBlbm91Z2h0IG1lbW9yeSAqLwogCQl0b3RhbF9sZW5ndGggPSBmaWVsZF9sZW4gKiBmaWVsZF9jb3VudDsKQEAgLTU4MSw4ICs1NzQsOCBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgaW50IGlwdzIxMDBfc2V0X29yZGluYWwoc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiwgdTMyIG9yZCwgdTMyICp2YWwsCi0JCQkgICAgICAgdTMyICpsZW4pCitzdGF0aWMgaW50IGlwdzIxMDBfc2V0X29yZGluYWwoc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiwgdTMyIG9yZCwgdTMyICogdmFsLAorCQkJICAgICAgIHUzMiAqIGxlbikKIHsKIAlzdHJ1Y3QgaXB3MjEwMF9vcmRpbmFscyAqb3JkaW5hbHMgPSAmcHJpdi0+b3JkaW5hbHM7CiAJdTMyIGFkZHI7CkBAIC01OTQsOCArNTg3LDggQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKLQkJcmVhZF9uaWNfZHdvcmQocHJpdi0+bmV0X2Rldiwgb3JkaW5hbHMtPnRhYmxlMV9hZGRyICsgKG9yZCA8PCAyKSwKLQkJCSAgICAgICAmYWRkcik7CisJCXJlYWRfbmljX2R3b3JkKHByaXYtPm5ldF9kZXYsCisJCQkgICAgICAgb3JkaW5hbHMtPnRhYmxlMV9hZGRyICsgKG9yZCA8PCAyKSwgJmFkZHIpOwogCiAJCXdyaXRlX25pY19kd29yZChwcml2LT5uZXRfZGV2LCBhZGRyLCAqdmFsKTsKIApAQCAtNjEyLDcgKzYwNSw3IEBACiB9CiAKIHN0YXRpYyBjaGFyICpzbnByaW50X2xpbmUoY2hhciAqYnVmLCBzaXplX3QgY291bnQsCi0JCQkgIGNvbnN0IHU4ICpkYXRhLCB1MzIgbGVuLCB1MzIgb2ZzKQorCQkJICBjb25zdCB1OCAqIGRhdGEsIHUzMiBsZW4sIHUzMiBvZnMpCiB7CiAJaW50IG91dCwgaSwgaiwgbDsKIAljaGFyIGM7CkBAIC02NDYsNyArNjM5LDcgQEAKIAlyZXR1cm4gYnVmOwogfQogCi1zdGF0aWMgdm9pZCBwcmludGtfYnVmKGludCBsZXZlbCwgY29uc3QgdTggKmRhdGEsIHUzMiBsZW4pCitzdGF0aWMgdm9pZCBwcmludGtfYnVmKGludCBsZXZlbCwgY29uc3QgdTggKiBkYXRhLCB1MzIgbGVuKQogewogCWNoYXIgbGluZVs4MV07CiAJdTMyIG9mcyA9IDA7CkBAIC02NjIsOCArNjU1LDYgQEAKIAl9CiB9CiAKLQotCiAjZGVmaW5lIE1BWF9SRVNFVF9CQUNLT0ZGIDEwCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzY2hlZHVsZV9yZXNldChzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2KQpAQCAtNzAzLDcgKzY5NCw3IEBACiAKICNkZWZpbmUgSE9TVF9DT01QTEVURV9USU1FT1VUICgyICogSFopCiBzdGF0aWMgaW50IGlwdzIxMDBfaHdfc2VuZF9jb21tYW5kKHN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYsCi0JCQkJICAgc3RydWN0IGhvc3RfY29tbWFuZCAqIGNtZCkKKwkJCQkgICBzdHJ1Y3QgaG9zdF9jb21tYW5kICpjbWQpCiB7CiAJc3RydWN0IGxpc3RfaGVhZCAqZWxlbWVudDsKIAlzdHJ1Y3QgaXB3MjEwMF90eF9wYWNrZXQgKnBhY2tldDsKQEAgLTcxMywyNSArNzA0LDI4IEBACiAJSVBXX0RFQlVHX0hDKCJTZW5kaW5nICVzIGNvbW1hbmQgKCMlZCksICVkIGJ5dGVzXG4iLAogCQkgICAgIGNvbW1hbmRfdHlwZXNbY21kLT5ob3N0X2NvbW1hbmRdLCBjbWQtPmhvc3RfY29tbWFuZCwKIAkJICAgICBjbWQtPmhvc3RfY29tbWFuZF9sZW5ndGgpOwotCXByaW50a19idWYoSVBXX0RMX0hDLCAodTgqKWNtZC0+aG9zdF9jb21tYW5kX3BhcmFtZXRlcnMsCisJcHJpbnRrX2J1ZihJUFdfRExfSEMsICh1OCAqKSBjbWQtPmhvc3RfY29tbWFuZF9wYXJhbWV0ZXJzLAogCQkgICBjbWQtPmhvc3RfY29tbWFuZF9sZW5ndGgpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvd19sb2NrLCBmbGFncyk7CiAKIAlpZiAocHJpdi0+ZmF0YWxfZXJyb3IpIHsKLQkJSVBXX0RFQlVHX0lORk8oIkF0dGVtcHQgdG8gc2VuZCBjb21tYW5kIHdoaWxlIGhhcmR3YXJlIGluIGZhdGFsIGVycm9yIGNvbmRpdGlvbi5cbiIpOworCQlJUFdfREVCVUdfSU5GTworCQkgICAgKCJBdHRlbXB0IHRvIHNlbmQgY29tbWFuZCB3aGlsZSBoYXJkd2FyZSBpbiBmYXRhbCBlcnJvciBjb25kaXRpb24uXG4iKTsKIAkJZXJyID0gLUVJTzsKIAkJZ290byBmYWlsX3VubG9jazsKIAl9CiAKIAlpZiAoIShwcml2LT5zdGF0dXMgJiBTVEFUVVNfUlVOTklORykpIHsKLQkJSVBXX0RFQlVHX0lORk8oIkF0dGVtcHQgdG8gc2VuZCBjb21tYW5kIHdoaWxlIGhhcmR3YXJlIGlzIG5vdCBydW5uaW5nLlxuIik7CisJCUlQV19ERUJVR19JTkZPCisJCSAgICAoIkF0dGVtcHQgdG8gc2VuZCBjb21tYW5kIHdoaWxlIGhhcmR3YXJlIGlzIG5vdCBydW5uaW5nLlxuIik7CiAJCWVyciA9IC1FSU87CiAJCWdvdG8gZmFpbF91bmxvY2s7CiAJfQogCiAJaWYgKHByaXYtPnN0YXR1cyAmIFNUQVRVU19DTURfQUNUSVZFKSB7Ci0JCUlQV19ERUJVR19JTkZPKCJBdHRlbXB0IHRvIHNlbmQgY29tbWFuZCB3aGlsZSBhbm90aGVyIGNvbW1hbmQgaXMgcGVuZGluZy5cbiIpOworCQlJUFdfREVCVUdfSU5GTworCQkgICAgKCJBdHRlbXB0IHRvIHNlbmQgY29tbWFuZCB3aGlsZSBhbm90aGVyIGNvbW1hbmQgaXMgcGVuZGluZy5cbiIpOwogCQllcnIgPSAtRUJVU1k7CiAJCWdvdG8gZmFpbF91bmxvY2s7CiAJfQpAQCAtNzUyLDcgKzc0Niw4IEBACiAJLyogaW5pdGlhbGl6ZSB0aGUgZmlybXdhcmUgY29tbWFuZCBwYWNrZXQgKi8KIAlwYWNrZXQtPmluZm8uY19zdHJ1Y3QuY21kLT5ob3N0X2NvbW1hbmRfcmVnID0gY21kLT5ob3N0X2NvbW1hbmQ7CiAJcGFja2V0LT5pbmZvLmNfc3RydWN0LmNtZC0+aG9zdF9jb21tYW5kX3JlZzEgPSBjbWQtPmhvc3RfY29tbWFuZDE7Ci0JcGFja2V0LT5pbmZvLmNfc3RydWN0LmNtZC0+aG9zdF9jb21tYW5kX2xlbl9yZWcgPSBjbWQtPmhvc3RfY29tbWFuZF9sZW5ndGg7CisJcGFja2V0LT5pbmZvLmNfc3RydWN0LmNtZC0+aG9zdF9jb21tYW5kX2xlbl9yZWcgPQorCSAgICBjbWQtPmhvc3RfY29tbWFuZF9sZW5ndGg7CiAJcGFja2V0LT5pbmZvLmNfc3RydWN0LmNtZC0+c2VxdWVuY2UgPSBjbWQtPmhvc3RfY29tbWFuZF9zZXF1ZW5jZTsKIAogCW1lbWNweShwYWNrZXQtPmluZm8uY19zdHJ1Y3QuY21kLT5ob3N0X2NvbW1hbmRfcGFyYW1zX3JlZywKQEAgLTc3NiwxMyArNzcxLDE1IEBACiAJICogdGhlbiB0aGVyZSBpcyBhIHByb2JsZW0uCiAJICovCiAKLQllcnIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCgKLQkJcHJpdi0+d2FpdF9jb21tYW5kX3F1ZXVlLCAhKHByaXYtPnN0YXR1cyAmIFNUQVRVU19DTURfQUNUSVZFKSwKLQkJSE9TVF9DT01QTEVURV9USU1FT1VUKTsKKwllcnIgPQorCSAgICB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChwcml2LT53YWl0X2NvbW1hbmRfcXVldWUsCisJCQkJCSAgICAgIShwcml2LT4KKwkJCQkJICAgICAgIHN0YXR1cyAmIFNUQVRVU19DTURfQUNUSVZFKSwKKwkJCQkJICAgICBIT1NUX0NPTVBMRVRFX1RJTUVPVVQpOwogCiAJaWYgKGVyciA9PSAwKSB7CiAJCUlQV19ERUJVR19JTkZPKCJDb21tYW5kIGNvbXBsZXRpb24gZmFpbGVkIG91dCBhZnRlciAlZG1zLlxuIiwKLQkJCSAgICAgICBIT1NUX0NPTVBMRVRFX1RJTUVPVVQgLyAoSFogLyAxMDApKTsKKwkJCSAgICAgICAxMDAwICogKEhPU1RfQ09NUExFVEVfVElNRU9VVCAvIEhaKSk7CiAJCXByaXYtPmZhdGFsX2Vycm9yID0gSVBXMjEwMF9FUlJfTVNHX1RJTUVPVVQ7CiAJCXByaXYtPnN0YXR1cyAmPSB+U1RBVFVTX0NNRF9BQ1RJVkU7CiAJCXNjaGVkdWxlX3Jlc2V0KHByaXYpOwpAQCAtODA0LDEzICs4MDEsMTIgQEAKIAogCXJldHVybiAwOwogCi0gZmFpbF91bmxvY2s6CisgICAgICBmYWlsX3VubG9jazoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb3dfbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIGVycjsKIH0KIAotCiAvKgogICogVmVyaWZ5IHRoZSB2YWx1ZXMgYW5kIGRhdGEgYWNjZXNzIG9mIHRoZSBoYXJkd2FyZQogICogTm8gbG9ja3MgbmVlZGVkIG9yIHVzZWQuICBObyBmdW5jdGlvbnMgY2FsbGVkLgpAQCAtODI1LDggKzgyMSw3IEBACiAKIAkvKiBEb21haW4gMCBjaGVjayAtIGFsbCB2YWx1ZXMgc2hvdWxkIGJlIERPQV9ERUJVRyAqLwogCWZvciAoYWRkcmVzcyA9IElQV19SRUdfRE9BX0RFQlVHX0FSRUFfU1RBUlQ7Ci0JICAgICBhZGRyZXNzIDwgSVBXX1JFR19ET0FfREVCVUdfQVJFQV9FTkQ7Ci0JICAgICBhZGRyZXNzICs9IHNpemVvZih1MzIpKSB7CisJICAgICBhZGRyZXNzIDwgSVBXX1JFR19ET0FfREVCVUdfQVJFQV9FTkQ7IGFkZHJlc3MgKz0gc2l6ZW9mKHUzMikpIHsKIAkJcmVhZF9yZWdpc3Rlcihwcml2LT5uZXRfZGV2LCBhZGRyZXNzLCAmZGF0YTEpOwogCQlpZiAoZGF0YTEgIT0gSVBXX0RBVEFfRE9BX0RFQlVHX1ZBTFVFKQogCQkJcmV0dXJuIC1FSU87CkBAIC04OTgsNyArODkzLDYgQEAKIAlyZXR1cm4gLUVJTzsKIH0KIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgUHJvY2VkdXJlICAgOiAgIHN3X3Jlc2V0X2FuZF9jbG9jawogICAgIFB1cnBvc2UgICAgIDogICBBc3NlcnRzIHMvdyByZXNldCwgYXNzZXJ0cyBjbG9jayBpbml0aWFsaXphdGlvbgpAQCAtOTc1LDE3ICs5NjksMTYgQEAKIAogCWlmIChwcml2LT5mYXRhbF9lcnJvcikgewogCQlJUFdfREVCVUdfRVJST1IoIiVzOiBpcHcyMTAwX2Rvd25sb2FkX2Zpcm13YXJlIGNhbGxlZCBhZnRlciAiCi0JCSAgICAgICAiZmF0YWwgZXJyb3IgJWQuICBJbnRlcmZhY2UgbXVzdCBiZSBicm91Z2h0IGRvd24uXG4iLAotCQkgICAgICAgcHJpdi0+bmV0X2Rldi0+bmFtZSwgcHJpdi0+ZmF0YWxfZXJyb3IpOworCQkJCSJmYXRhbCBlcnJvciAlZC4gIEludGVyZmFjZSBtdXN0IGJlIGJyb3VnaHQgZG93bi5cbiIsCisJCQkJcHJpdi0+bmV0X2Rldi0+bmFtZSwgcHJpdi0+ZmF0YWxfZXJyb3IpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0KICNpZmRlZiBDT05GSUdfUE0KIAlpZiAoIWlwdzIxMDBfZmlybXdhcmUudmVyc2lvbikgewogCQllcnIgPSBpcHcyMTAwX2dldF9maXJtd2FyZShwcml2LCAmaXB3MjEwMF9maXJtd2FyZSk7CiAJCWlmIChlcnIpIHsKIAkJCUlQV19ERUJVR19FUlJPUigiJXM6IGlwdzIxMDBfZ2V0X2Zpcm13YXJlIGZhaWxlZDogJWRcbiIsCi0JCQkgICAgICAgcHJpdi0+bmV0X2Rldi0+bmFtZSwgZXJyKTsKKwkJCQkJcHJpdi0+bmV0X2Rldi0+bmFtZSwgZXJyKTsKIAkJCXByaXYtPmZhdGFsX2Vycm9yID0gSVBXMjEwMF9FUlJfRldfTE9BRDsKIAkJCWdvdG8gZmFpbDsKIAkJfQpAQCAtOTk0LDcgKzk4Nyw3IEBACiAJZXJyID0gaXB3MjEwMF9nZXRfZmlybXdhcmUocHJpdiwgJmlwdzIxMDBfZmlybXdhcmUpOwogCWlmIChlcnIpIHsKIAkJSVBXX0RFQlVHX0VSUk9SKCIlczogaXB3MjEwMF9nZXRfZmlybXdhcmUgZmFpbGVkOiAlZFxuIiwKLQkJICAgICAgIHByaXYtPm5ldF9kZXYtPm5hbWUsIGVycik7CisJCQkJcHJpdi0+bmV0X2Rldi0+bmFtZSwgZXJyKTsKIAkJcHJpdi0+ZmF0YWxfZXJyb3IgPSBJUFcyMTAwX0VSUl9GV19MT0FEOwogCQlnb3RvIGZhaWw7CiAJfQpAQCAtMTAwNSwyMSArOTk4LDIwIEBACiAJZXJyID0gc3dfcmVzZXRfYW5kX2Nsb2NrKHByaXYpOwogCWlmIChlcnIpIHsKIAkJSVBXX0RFQlVHX0VSUk9SKCIlczogc3dfcmVzZXRfYW5kX2Nsb2NrIGZhaWxlZDogJWRcbiIsCi0JCSAgICAgICBwcml2LT5uZXRfZGV2LT5uYW1lLCBlcnIpOworCQkJCXByaXYtPm5ldF9kZXYtPm5hbWUsIGVycik7CiAJCWdvdG8gZmFpbDsKIAl9CiAKIAllcnIgPSBpcHcyMTAwX3ZlcmlmeShwcml2KTsKIAlpZiAoZXJyKSB7CiAJCUlQV19ERUJVR19FUlJPUigiJXM6IGlwdzIxMDBfdmVyaWZ5IGZhaWxlZDogJWRcbiIsCi0JCSAgICAgICBwcml2LT5uZXRfZGV2LT5uYW1lLCBlcnIpOworCQkJCXByaXYtPm5ldF9kZXYtPm5hbWUsIGVycik7CiAJCWdvdG8gZmFpbDsKIAl9CiAKIAkvKiBIb2xkIEFSQyAqLwogCXdyaXRlX25pY19kd29yZChwcml2LT5uZXRfZGV2LAotCQkJSVBXX0lOVEVSTkFMX1JFR0lTVEVSX0hBTFRfQU5EX1JFU0VULAotCQkJMHg4MDAwMDAwMCk7CisJCQlJUFdfSU5URVJOQUxfUkVHSVNURVJfSEFMVF9BTkRfUkVTRVQsIDB4ODAwMDAwMDApOwogCiAJLyogYWxsb3cgQVJDIHRvIHJ1biAqLwogCXdyaXRlX3JlZ2lzdGVyKHByaXYtPm5ldF9kZXYsIElQV19SRUdfUkVTRVRfUkVHLCAwKTsKQEAgLTEwMzQsMTMgKzEwMjYsMTMgQEAKIAogCS8qIHJlbGVhc2UgQVJDICovCiAJd3JpdGVfbmljX2R3b3JkKHByaXYtPm5ldF9kZXYsCi0JCQlJUFdfSU5URVJOQUxfUkVHSVNURVJfSEFMVF9BTkRfUkVTRVQsCi0JCQkweDAwMDAwMDAwKTsKKwkJCUlQV19JTlRFUk5BTF9SRUdJU1RFUl9IQUxUX0FORF9SRVNFVCwgMHgwMDAwMDAwMCk7CiAKIAkvKiBzL3cgcmVzZXQgYW5kIGNsb2NrIHN0YWJpbGl6YXRpb24gKGFnYWluISEhKSAqLwogCWVyciA9IHN3X3Jlc2V0X2FuZF9jbG9jayhwcml2KTsKIAlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiAlczogc3dfcmVzZXRfYW5kX2Nsb2NrIGZhaWxlZDogJWRcbiIsCisJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRQorCQkgICAgICAgIjogJXM6IHN3X3Jlc2V0X2FuZF9jbG9jayBmYWlsZWQ6ICVkXG4iLAogCQkgICAgICAgcHJpdi0+bmV0X2Rldi0+bmFtZSwgZXJyKTsKIAkJZ290byBmYWlsOwogCX0KQEAgLTEwNDksMTAgKzEwNDEsOSBAQAogCWVyciA9IGlwdzIxMDBfZndfZG93bmxvYWQocHJpdiwgJmlwdzIxMDBfZmlybXdhcmUpOwogCWlmIChlcnIpIHsKIAkJSVBXX0RFQlVHX0VSUk9SKCIlczogRXJyb3IgbG9hZGluZyBmaXJtd2FyZTogJWRcbiIsCi0JCSAgICAgICBwcml2LT5uZXRfZGV2LT5uYW1lLCBlcnIpOworCQkJCXByaXYtPm5ldF9kZXYtPm5hbWUsIGVycik7CiAJCWdvdG8gZmFpbDsKIAl9Ci0KICNpZm5kZWYgQ09ORklHX1BNCiAJLyoKIAkgKiBXaGVuIHRoZSAucmVzdW1lIG1ldGhvZCBvZiB0aGUgZHJpdmVyIGlzIGNhbGxlZCwgdGhlIG90aGVyCkBAIC0xMDg0LDcgKzEwNzUsNyBAQAogCiAJcmV0dXJuIDA7CiAKLSBmYWlsOgorICAgICAgZmFpbDoKIAlpcHcyMTAwX3JlbGVhc2VfZmlybXdhcmUocHJpdiwgJmlwdzIxMDBfZmlybXdhcmUpOwogCXJldHVybiBlcnI7CiB9CkBAIC0xMTA1LDcgKzEwOTYsNiBAQAogCXdyaXRlX3JlZ2lzdGVyKHByaXYtPm5ldF9kZXYsIElQV19SRUdfSU5UQV9NQVNLLCAweDApOwogfQogCi0KIHN0YXRpYyB2b2lkIGlwdzIxMDBfaW5pdGlhbGl6ZV9vcmRpbmFscyhzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2KQogewogCXN0cnVjdCBpcHcyMTAwX29yZGluYWxzICpvcmQgPSAmcHJpdi0+b3JkaW5hbHM7CkBAIC0xMTc3LDExICsxMTY3LDEwIEBACiAJICogRUVQUk9NX1NSQU1fREJfU1RBUlRfQUREUkVTUyB1c2luZyBvcmRpbmFsIGluIG9yZGluYWwgdGFibGUgMQogCSAqLwogCWxlbiA9IHNpemVvZihhZGRyKTsKLQlpZiAoaXB3MjEwMF9nZXRfb3JkaW5hbCgKLQkJICAgIHByaXYsIElQV19PUkRfRUVQUk9NX1NSQU1fREJfQkxPQ0tfU1RBUlRfQUREUkVTUywKLQkJICAgICZhZGRyLCAmbGVuKSkgeworCWlmIChpcHcyMTAwX2dldF9vcmRpbmFsCisJICAgIChwcml2LCBJUFdfT1JEX0VFUFJPTV9TUkFNX0RCX0JMT0NLX1NUQVJUX0FERFJFU1MsICZhZGRyLCAmbGVuKSkgewogCQlJUFdfREVCVUdfSU5GTygiZmFpbGVkIHF1ZXJ5aW5nIG9yZGluYWxzIGF0IGxpbmUgJWRcbiIsCi0JCSAgICAgICBfX0xJTkVfXyk7CisJCQkgICAgICAgX19MSU5FX18pOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTExOTQsNyArMTE4Myw3IEBACiAJcHJpdi0+ZWVwcm9tX3ZlcnNpb24gPSAodmFsID4+IDI0KSAmIDB4RkY7CiAJSVBXX0RFQlVHX0lORk8oIkVFUFJPTSB2ZXJzaW9uOiAlZFxuIiwgcHJpdi0+ZWVwcm9tX3ZlcnNpb24pOwogCi0gICAgICAgIC8qCisJLyoKIAkgKiAgSFcgUkYgS2lsbCBlbmFibGUgaXMgYml0IDAgaW4gYnl0ZSBhdCBvZmZzZXQgMHgyMSBpbiBmaXJtd2FyZQogCSAqCiAJICogIG5vdGljZSB0aGF0IHRoZSBFRVBST00gYml0IGlzIHJldmVyc2UgcG9sYXJpdHksIGkuZS4KQEAgLTEyMDYsOCArMTE5NSw3IEBACiAJCXByaXYtPmh3X2ZlYXR1cmVzIHw9IEhXX0ZFQVRVUkVfUkZLSUxMOwogCiAJSVBXX0RFQlVHX0lORk8oIkhXIFJGIEtpbGw6ICVzc3VwcG9ydGVkLlxuIiwKLQkJCSAgIChwcml2LT5od19mZWF0dXJlcyAmIEhXX0ZFQVRVUkVfUkZLSUxMKSA/Ci0JCQkgICAiIiA6ICJub3QgIik7CisJCSAgICAgICAocHJpdi0+aHdfZmVhdHVyZXMgJiBIV19GRUFUVVJFX1JGS0lMTCkgPyAiIiA6ICJub3QgIik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEyMzQsNyArMTIyMiw4IEBACiAJICogZncgJiBkaW5vIHVjb2RlCiAJICovCiAJaWYgKGlwdzIxMDBfZG93bmxvYWRfZmlybXdhcmUocHJpdikpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6ICVzOiBGYWlsZWQgdG8gcG93ZXIgb24gdGhlIGFkYXB0ZXIuXG4iLAorCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUKKwkJICAgICAgICI6ICVzOiBGYWlsZWQgdG8gcG93ZXIgb24gdGhlIGFkYXB0ZXIuXG4iLAogCQkgICAgICAgcHJpdi0+bmV0X2Rldi0+bmFtZSk7CiAJCXJldHVybiAtRUlPOwogCX0KQEAgLTEyOTMsNyArMTI4Miw4IEBACiAJCSAgICAgaSA/ICJTVUNDRVNTIiA6ICJGQUlMRUQiKTsKIAogCWlmICghaSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FICI6ICVzOiBGaXJtd2FyZSBkaWQgbm90IGluaXRpYWxpemUuXG4iLAorCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FCisJCSAgICAgICAiOiAlczogRmlybXdhcmUgZGlkIG5vdCBpbml0aWFsaXplLlxuIiwKIAkJICAgICAgIHByaXYtPm5ldF9kZXYtPm5hbWUpOwogCQlyZXR1cm4gLUVJTzsKIAl9CkBAIC0xMzI2LDcgKzEzMTYsNiBAQAogCXByaXYtPmZhdGFsX2Vycm9yID0gMDsKIH0KIAotCiAvKiBOT1RFOiBPdXIgaW50ZXJydXB0IGlzIGRpc2FibGVkIHdoZW4gdGhpcyBtZXRob2QgaXMgY2FsbGVkICovCiBzdGF0aWMgaW50IGlwdzIxMDBfcG93ZXJfY3ljbGVfYWRhcHRlcihzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2KQogewpAQCAtMTM1MCwxOSArMTMzOSwxOSBAQAogCiAJCWlmIChyZWcgJiBJUFdfQVVYX0hPU1RfUkVTRVRfUkVHX01BU1RFUl9ESVNBQkxFRCkKIAkJCWJyZWFrOwotCX0gIHdoaWxlKGktLSk7CisJfSB3aGlsZSAoaS0tKTsKIAogCXByaXYtPnN0YXR1cyAmPSB+U1RBVFVTX1JFU0VUX1BFTkRJTkc7CiAKIAlpZiAoIWkpIHsKLQkJSVBXX0RFQlVHX0lORk8oImV4aXQgLSB3YWl0ZWQgdG9vIGxvbmcgZm9yIG1hc3RlciBhc3NlcnQgc3RvcFxuIik7CisJCUlQV19ERUJVR19JTkZPCisJCSAgICAoImV4aXQgLSB3YWl0ZWQgdG9vIGxvbmcgZm9yIG1hc3RlciBhc3NlcnQgc3RvcFxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KIAogCXdyaXRlX3JlZ2lzdGVyKHByaXYtPm5ldF9kZXYsIElQV19SRUdfUkVTRVRfUkVHLAogCQkgICAgICAgSVBXX0FVWF9IT1NUX1JFU0VUX1JFR19TV19SRVNFVCk7CiAKLQogCS8qIFJlc2V0IGFueSBmYXRhbF9lcnJvciBjb25kaXRpb25zICovCiAJaXB3MjEwMF9yZXNldF9mYXRhbGVycm9yKHByaXYpOwogCkBAIC0xNDE1LDcgKzE0MDQsNiBAQAogCXJldHVybiAtRUlPOwogfQogCi0KIHN0YXRpYyBpbnQgaXB3MjEwMF9lbmFibGVfYWRhcHRlcihzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2KQogewogCXN0cnVjdCBob3N0X2NvbW1hbmQgY21kID0gewpAQCAtMTQ0NSw5ICsxNDMzLDggQEAKIAogCWVyciA9IGlwdzIxMDBfd2FpdF9mb3JfY2FyZF9zdGF0ZShwcml2LCBJUFdfSFdfU1RBVEVfRU5BQkxFRCk7CiAJaWYgKGVycikgewotCQlJUFdfREVCVUdfSU5GTygKLQkJICAgICAgICIlczogY2FyZCBub3QgcmVzcG9uZGluZyB0byBpbml0IGNvbW1hbmQuXG4iLAotCQkgICAgICAgcHJpdi0+bmV0X2Rldi0+bmFtZSk7CisJCUlQV19ERUJVR19JTkZPKCIlczogY2FyZCBub3QgcmVzcG9uZGluZyB0byBpbml0IGNvbW1hbmQuXG4iLAorCQkJICAgICAgIHByaXYtPm5ldF9kZXYtPm5hbWUpOwogCQlnb3RvIGZhaWxfdXA7CiAJfQogCkBAIC0xNDU2LDcgKzE0NDMsNyBAQAogCQlxdWV1ZV9kZWxheWVkX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+aGFuZ19jaGVjaywgSFogLyAyKTsKIAl9CiAKLWZhaWxfdXA6CisgICAgICBmYWlsX3VwOgogCXVwKCZwcml2LT5hZGFwdGVyX3NlbSk7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTE0ODgsNyArMTQ3NSw4IEBACiAKIAkJZXJyID0gaXB3MjEwMF9od19waHlfb2ZmKHByaXYpOwogCQlpZiAoZXJyKQotCQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTkFNRSAiOiBFcnJvciBkaXNhYmxpbmcgcmFkaW8gJWRcbiIsIGVycik7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FCisJCQkgICAgICAgIjogRXJyb3IgZGlzYWJsaW5nIHJhZGlvICVkXG4iLCBlcnIpOwogCiAJCS8qCiAJCSAqIElmIGluIEQwLXN0YW5kYnkgbW9kZSBnb2luZyBkaXJlY3RseSB0byBEMyBtYXkgY2F1c2UgYQpAQCAtMTU2Niw3ICsxNTU0LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotCiBzdGF0aWMgaW50IGlwdzIxMDBfZGlzYWJsZV9hZGFwdGVyKHN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYpCiB7CiAJc3RydWN0IGhvc3RfY29tbWFuZCBjbWQgPSB7CkBAIC0xNTkzLDE5ICsxNTgwLDIxIEBACiAKIAllcnIgPSBpcHcyMTAwX2h3X3NlbmRfY29tbWFuZChwcml2LCAmY21kKTsKIAlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWX05BTUUgIjogZXhpdCAtIGZhaWxlZCB0byBzZW5kIENBUkRfRElTQUJMRSBjb21tYW5kXG4iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTkFNRQorCQkgICAgICAgIjogZXhpdCAtIGZhaWxlZCB0byBzZW5kIENBUkRfRElTQUJMRSBjb21tYW5kXG4iKTsKIAkJZ290byBmYWlsX3VwOwogCX0KIAogCWVyciA9IGlwdzIxMDBfd2FpdF9mb3JfY2FyZF9zdGF0ZShwcml2LCBJUFdfSFdfU1RBVEVfRElTQUJMRUQpOwogCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTkFNRSAiOiBleGl0IC0gY2FyZCBmYWlsZWQgdG8gY2hhbmdlIHRvIERJU0FCTEVEXG4iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTkFNRQorCQkgICAgICAgIjogZXhpdCAtIGNhcmQgZmFpbGVkIHRvIGNoYW5nZSB0byBESVNBQkxFRFxuIik7CiAJCWdvdG8gZmFpbF91cDsKIAl9CiAKIAlJUFdfREVCVUdfSU5GTygiVE9ETzogaW1wbGVtZW50IHNjYW4gc3RhdGUgbWFjaGluZVxuIik7CiAKLWZhaWxfdXA6CisgICAgICBmYWlsX3VwOgogCXVwKCZwcml2LT5hZGFwdGVyX3NlbSk7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTE2MjcsNyArMTYxNiw3IEBACiAKIAlpZiAoIShwcml2LT5jb25maWcgJiBDRkdfQVNTT0NJQVRFKSkKIAkJY21kLmhvc3RfY29tbWFuZF9wYXJhbWV0ZXJzWzBdIHw9IElQV19TQ0FOX05PQVNTT0NJQVRFOwotCWlmICgocHJpdi0+c2VjLmZsYWdzICYgU0VDX0VOQUJMRUQpICYmIHByaXYtPnNlYy5lbmFibGVkKQorCWlmICgocHJpdi0+aWVlZS0+c2VjLmZsYWdzICYgU0VDX0VOQUJMRUQpICYmIHByaXYtPmllZWUtPnNlYy5lbmFibGVkKQogCQljbWQuaG9zdF9jb21tYW5kX3BhcmFtZXRlcnNbMF0gfD0gSVBXX1NDQU5fTUlYRURfQ0VMTDsKIAlpZiAocHJpdi0+Y29uZmlnICYgQ0ZHX1BBU1NJVkVfU0NBTikKIAkJY21kLmhvc3RfY29tbWFuZF9wYXJhbWV0ZXJzWzBdIHw9IElQV19TQ0FOX1BBU1NJVkU7CkBAIC0xNzA5LDggKzE2OTgsOSBAQAogCSAgICAocHJpdi0+c3RhdHVzICYgU1RBVFVTX1JFU0VUX1BFTkRJTkcpKSB7CiAJCS8qIFBvd2VyIGN5Y2xlIHRoZSBjYXJkIC4uLiAqLwogCQlpZiAoaXB3MjEwMF9wb3dlcl9jeWNsZV9hZGFwdGVyKHByaXYpKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FICI6ICVzOiBDb3VsZCBub3QgY3ljbGUgYWRhcHRlci5cbiIsCi0JCQkJCSAgcHJpdi0+bmV0X2Rldi0+bmFtZSk7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FCisJCQkgICAgICAgIjogJXM6IENvdWxkIG5vdCBjeWNsZSBhZGFwdGVyLlxuIiwKKwkJCSAgICAgICBwcml2LT5uZXRfZGV2LT5uYW1lKTsKIAkJCXJjID0gMTsKIAkJCWdvdG8gZXhpdDsKIAkJfQpAQCAtMTcxOSw4ICsxNzA5LDkgQEAKIAogCS8qIExvYWQgdGhlIGZpcm13YXJlLCBzdGFydCB0aGUgY2xvY2tzLCBldGMuICovCiAJaWYgKGlwdzIxMDBfc3RhcnRfYWRhcHRlcihwcml2KSkgewotCSAgICAgICAJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6ICVzOiBGYWlsZWQgdG8gc3RhcnQgdGhlIGZpcm13YXJlLlxuIiwKLQkJCQlwcml2LT5uZXRfZGV2LT5uYW1lKTsKKwkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FCisJCSAgICAgICAiOiAlczogRmFpbGVkIHRvIHN0YXJ0IHRoZSBmaXJtd2FyZS5cbiIsCisJCSAgICAgICBwcml2LT5uZXRfZGV2LT5uYW1lKTsKIAkJcmMgPSAxOwogCQlnb3RvIGV4aXQ7CiAJfQpAQCAtMTcyOSwxNiArMTcyMCwxOCBAQAogCiAJLyogRGV0ZXJtaW5lIGNhcGFiaWxpdGllcyBvZiB0aGlzIHBhcnRpY3VsYXIgSFcgY29uZmlndXJhdGlvbiAqLwogCWlmIChpcHcyMTAwX2dldF9od19mZWF0dXJlcyhwcml2KSkgewotCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogJXM6IEZhaWxlZCB0byBkZXRlcm1pbmUgSFcgZmVhdHVyZXMuXG4iLAotCQkJCXByaXYtPm5ldF9kZXYtPm5hbWUpOworCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUKKwkJICAgICAgICI6ICVzOiBGYWlsZWQgdG8gZGV0ZXJtaW5lIEhXIGZlYXR1cmVzLlxuIiwKKwkJICAgICAgIHByaXYtPm5ldF9kZXYtPm5hbWUpOwogCQlyYyA9IDE7CiAJCWdvdG8gZXhpdDsKIAl9CiAKIAlsb2NrID0gTE9DS19OT05FOwogCWlmIChpcHcyMTAwX3NldF9vcmRpbmFsKHByaXYsIElQV19PUkRfUEVSU19EQl9MT0NLLCAmbG9jaywgJm9yZF9sZW4pKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiAlczogRmFpbGVkIHRvIGNsZWFyIG9yZGluYWwgbG9jay5cbiIsCi0JCQkJcHJpdi0+bmV0X2Rldi0+bmFtZSk7CisJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRQorCQkgICAgICAgIjogJXM6IEZhaWxlZCB0byBjbGVhciBvcmRpbmFsIGxvY2suXG4iLAorCQkgICAgICAgcHJpdi0+bmV0X2Rldi0+bmFtZSk7CiAJCXJjID0gMTsKIAkJZ290byBleGl0OwogCX0KQEAgLTE3NjQsNyArMTc1Nyw3IEBACiAJICogSE9TVF9DT01QTEVURSAqLwogCWlmIChpcHcyMTAwX2FkYXB0ZXJfc2V0dXAocHJpdikpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6ICVzOiBGYWlsZWQgdG8gc3RhcnQgdGhlIGNhcmQuXG4iLAotCQkJCXByaXYtPm5ldF9kZXYtPm5hbWUpOworCQkgICAgICAgcHJpdi0+bmV0X2Rldi0+bmFtZSk7CiAJCXJjID0gMTsKIAkJZ290byBleGl0OwogCX0KQEAgLTE3NzMsMjAgKzE3NjYsMTkgQEAKIAkJLyogRW5hYmxlIHRoZSBhZGFwdGVyIC0gc2VuZHMgSE9TVF9DT01QTEVURSAqLwogCQlpZiAoaXB3MjEwMF9lbmFibGVfYWRhcHRlcihwcml2KSkgewogCQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6ICIKLQkJCQkiJXM6IGZhaWxlZCBpbiBjYWxsIHRvIGVuYWJsZSBhZGFwdGVyLlxuIiwKLQkJCQlwcml2LT5uZXRfZGV2LT5uYW1lKTsKKwkJCSAgICAgICAiJXM6IGZhaWxlZCBpbiBjYWxsIHRvIGVuYWJsZSBhZGFwdGVyLlxuIiwKKwkJCSAgICAgICBwcml2LT5uZXRfZGV2LT5uYW1lKTsKIAkJCWlwdzIxMDBfaHdfc3RvcF9hZGFwdGVyKHByaXYpOwogCQkJcmMgPSAxOwogCQkJZ290byBleGl0OwogCQl9CiAKLQogCQkvKiBTdGFydCBhIHNjYW4gLiAuIC4gKi8KIAkJaXB3MjEwMF9zZXRfc2Nhbl9vcHRpb25zKHByaXYpOwogCQlpcHcyMTAwX3N0YXJ0X3NjYW4ocHJpdik7CiAJfQogCi0gZXhpdDoKKyAgICAgIGV4aXQ6CiAJcmV0dXJuIHJjOwogfQogCkBAIC0xODAyLDggKzE3OTQsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5pb24gaXdyZXFfZGF0YSB3cnF1ID0gewogCQkuYXBfYWRkciA9IHsKLQkJCS5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVIKLQkJfQorCQkJICAgIC5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVJ9CiAJfTsKIAlpbnQgYXNzb2NpYXRlZCA9IHByaXYtPnN0YXR1cyAmIFNUQVRVU19BU1NPQ0lBVEVEOwogCkBAIC0xODQyLDcgKzE4MzMsNyBAQAogCiAjaWZkZWYgQUNQSV9DU1RBVEVfTElNSVRfREVGSU5FRAogCWlmIChwcml2LT5jb25maWcgJiBDRkdfQzNfRElTQUJMRUQpIHsKLQkJSVBXX0RFQlVHX0lORk8oRFJWX05BTUUgIjogUmVzZXR0aW5nIEMzIHRyYW5zaXRpb25zLlxuIik7CisJCUlQV19ERUJVR19JTkZPKCI6IFJlc2V0dGluZyBDMyB0cmFuc2l0aW9ucy5cbiIpOwogCQlhY3BpX3NldF9jc3RhdGVfbGltaXQocHJpdi0+Y3N0YXRlX2xpbWl0KTsKIAkJcHJpdi0+Y29uZmlnICY9IH5DRkdfQzNfRElTQUJMRUQ7CiAJfQpAQCAtMTg2MiwxNCArMTg1MywxMiBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5pb24gaXdyZXFfZGF0YSB3cnF1ID0gewogCQkuYXBfYWRkciA9IHsKLQkJCS5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVIKLQkJfQorCQkJICAgIC5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVJ9CiAJfTsKIAlpbnQgYXNzb2NpYXRlZCA9IHByaXYtPnN0YXR1cyAmIFNUQVRVU19BU1NPQ0lBVEVEOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvd19sb2NrLCBmbGFncyk7Ci0JSVBXX0RFQlVHX0lORk8oRFJWX05BTUUgIjogJXM6IFJlc3RhcnRpbmcgYWRhcHRlci5cbiIsCi0JCSAgICAgICBwcml2LT5uZXRfZGV2LT5uYW1lKTsKKwlJUFdfREVCVUdfSU5GTygiOiAlczogUmVzdGFydGluZyBhZGFwdGVyLlxuIiwgcHJpdi0+bmV0X2Rldi0+bmFtZSk7CiAJcHJpdi0+cmVzZXRzKys7CiAJcHJpdi0+c3RhdHVzICY9IH4oU1RBVFVTX0FTU09DSUFURUQgfCBTVEFUVVNfQVNTT0NJQVRJTkcpOwogCXByaXYtPnN0YXR1cyB8PSBTVEFUVVNfU0VDVVJJVFlfVVBEQVRFRDsKQEAgLTE4OTQsNyArMTg4Myw2IEBACiAKIH0KIAotCiBzdGF0aWMgdm9pZCBpc3JfaW5kaWNhdGVfYXNzb2NpYXRlZChzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2LCB1MzIgc3RhdHVzKQogewogCkBAIC0xOTA0LDcgKzE4OTIsNyBAQAogCXUzMiB0eHJhdGU7CiAJdTMyIGNoYW47CiAJY2hhciAqdHhyYXRlbmFtZTsKLSAJdTggYnNzaWRbRVRIX0FMRU5dOworCXU4IGJzc2lkW0VUSF9BTEVOXTsKIAogCS8qCiAJICogVEJEOiBCU1NJRCBpcyB1c3VhbGx5IDAwOjAwOjAwOjAwOjAwOjAwIGhlcmUgYW5kIG5vdApAQCAtMTkxOCwxNiArMTkwNiwxNSBAQAogCQkJCSAgZXNzaWQsICZlc3NpZF9sZW4pOwogCWlmIChyZXQpIHsKIAkJSVBXX0RFQlVHX0lORk8oImZhaWxlZCBxdWVyeWluZyBvcmRpbmFscyBhdCBsaW5lICVkXG4iLAotCQkJCSAgIF9fTElORV9fKTsKKwkJCSAgICAgICBfX0xJTkVfXyk7CiAJCXJldHVybjsKIAl9CiAKIAlsZW4gPSBzaXplb2YodTMyKTsKLQlyZXQgPSBpcHcyMTAwX2dldF9vcmRpbmFsKHByaXYsIElQV19PUkRfQ1VSUkVOVF9UWF9SQVRFLAotCQkJCSAgJnR4cmF0ZSwgJmxlbik7CisJcmV0ID0gaXB3MjEwMF9nZXRfb3JkaW5hbChwcml2LCBJUFdfT1JEX0NVUlJFTlRfVFhfUkFURSwgJnR4cmF0ZSwgJmxlbik7CiAJaWYgKHJldCkgewogCQlJUFdfREVCVUdfSU5GTygiZmFpbGVkIHF1ZXJ5aW5nIG9yZGluYWxzIGF0IGxpbmUgJWRcbiIsCi0JCQkJICAgX19MSU5FX18pOworCQkJICAgICAgIF9fTElORV9fKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTkzNSwxOSArMTkyMiwxOCBAQAogCXJldCA9IGlwdzIxMDBfZ2V0X29yZGluYWwocHJpdiwgSVBXX09SRF9PVVJfRlJFUSwgJmNoYW4sICZsZW4pOwogCWlmIChyZXQpIHsKIAkJSVBXX0RFQlVHX0lORk8oImZhaWxlZCBxdWVyeWluZyBvcmRpbmFscyBhdCBsaW5lICVkXG4iLAotCQkJCSAgIF9fTElORV9fKTsKKwkJCSAgICAgICBfX0xJTkVfXyk7CiAJCXJldHVybjsKIAl9CiAJbGVuID0gRVRIX0FMRU47Ci0gICAgICAgIGlwdzIxMDBfZ2V0X29yZGluYWwocHJpdiwgSVBXX09SRF9TVEFUX0FTU05fQVBfQlNTSUQsICZic3NpZCwgICZsZW4pOworCWlwdzIxMDBfZ2V0X29yZGluYWwocHJpdiwgSVBXX09SRF9TVEFUX0FTU05fQVBfQlNTSUQsICZic3NpZCwgJmxlbik7CiAJaWYgKHJldCkgewogCQlJUFdfREVCVUdfSU5GTygiZmFpbGVkIHF1ZXJ5aW5nIG9yZGluYWxzIGF0IGxpbmUgJWRcbiIsCi0JCQkJICAgX19MSU5FX18pOworCQkJICAgICAgIF9fTElORV9fKTsKIAkJcmV0dXJuOwogCX0KIAltZW1jcHkocHJpdi0+aWVlZS0+YnNzaWQsIGJzc2lkLCBFVEhfQUxFTik7CiAKLQogCXN3aXRjaCAodHhyYXRlKSB7CiAJY2FzZSBUWF9SQVRFXzFfTUJJVDoKIAkJdHhyYXRlbmFtZSA9ICIxTWJwcyI7CkBAIC0xOTc0LDcgKzE5NjAsNyBAQAogCiAJLyogbm93IHdlIGNvcHkgcmVhZCBzc2lkIGludG8gZGV2ICovCiAJaWYgKCEocHJpdi0+Y29uZmlnICYgQ0ZHX1NUQVRJQ19FU1NJRCkpIHsKLQkJcHJpdi0+ZXNzaWRfbGVuID0gbWluKCh1OCllc3NpZF9sZW4sICh1OClJV19FU1NJRF9NQVhfU0laRSk7CisJCXByaXYtPmVzc2lkX2xlbiA9IG1pbigodTgpIGVzc2lkX2xlbiwgKHU4KSBJV19FU1NJRF9NQVhfU0laRSk7CiAJCW1lbWNweShwcml2LT5lc3NpZCwgZXNzaWQsIHByaXYtPmVzc2lkX2xlbik7CiAJfQogCXByaXYtPmNoYW5uZWwgPSBjaGFuOwpAQCAtMTk4Niw3ICsxOTcyLDYgQEAKIAlxdWV1ZV9kZWxheWVkX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+d3hfZXZlbnRfd29yaywgSFogLyAxMCk7CiB9CiAKLQogc3RhdGljIGludCBpcHcyMTAwX3NldF9lc3NpZChzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2LCBjaGFyICplc3NpZCwKIAkJCSAgICAgaW50IGxlbmd0aCwgaW50IGJhdGNoX21vZGUpCiB7CkBAIC0yMDAxLDggKzE5ODYsNyBAQAogCUlQV19ERUJVR19IQygiU1NJRDogJyVzJ1xuIiwgZXNjYXBlX2Vzc2lkKGVzc2lkLCBzc2lkX2xlbikpOwogCiAJaWYgKHNzaWRfbGVuKQotCQltZW1jcHkoKGNoYXIqKWNtZC5ob3N0X2NvbW1hbmRfcGFyYW1ldGVycywKLQkJICAgICAgIGVzc2lkLCBzc2lkX2xlbik7CisJCW1lbWNweShjbWQuaG9zdF9jb21tYW5kX3BhcmFtZXRlcnMsIGVzc2lkLCBzc2lkX2xlbik7CiAKIAlpZiAoIWJhdGNoX21vZGUpIHsKIAkJZXJyID0gaXB3MjEwMF9kaXNhYmxlX2FkYXB0ZXIocHJpdik7CkBAIC0yMDE0LDcgKzE5OTgsNyBAQAogCSAqIGRpc2FibGUgYXV0byBhc3NvY2lhdGlvbiAtLSBzbyB3ZSBjaGVhdCBieSBzZXR0aW5nIGEgYm9ndXMgU1NJRCAqLwogCWlmICghc3NpZF9sZW4gJiYgIShwcml2LT5jb25maWcgJiBDRkdfQVNTT0NJQVRFKSkgewogCQlpbnQgaTsKLQkJdTggKmJvZ3VzID0gKHU4KiljbWQuaG9zdF9jb21tYW5kX3BhcmFtZXRlcnM7CisJCXU4ICpib2d1cyA9ICh1OCAqKSBjbWQuaG9zdF9jb21tYW5kX3BhcmFtZXRlcnM7CiAJCWZvciAoaSA9IDA7IGkgPCBJV19FU1NJRF9NQVhfU0laRTsgaSsrKQogCQkJYm9ndXNbaV0gPSAweDE4ICsgaTsKIAkJY21kLmhvc3RfY29tbWFuZF9sZW5ndGggPSBJV19FU1NJRF9NQVhfU0laRTsKQEAgLTIwMjUsOCArMjAwOSw3IEBACiAKIAllcnIgPSBpcHcyMTAwX2h3X3NlbmRfY29tbWFuZChwcml2LCAmY21kKTsKIAlpZiAoIWVycikgewotCQltZW1zZXQocHJpdi0+ZXNzaWQgKyBzc2lkX2xlbiwgMCwKLQkJICAgICAgIElXX0VTU0lEX01BWF9TSVpFIC0gc3NpZF9sZW4pOworCQltZW1zZXQocHJpdi0+ZXNzaWQgKyBzc2lkX2xlbiwgMCwgSVdfRVNTSURfTUFYX1NJWkUgLSBzc2lkX2xlbik7CiAJCW1lbWNweShwcml2LT5lc3NpZCwgZXNzaWQsIHNzaWRfbGVuKTsKIAkJcHJpdi0+ZXNzaWRfbGVuID0gc3NpZF9sZW47CiAJfQpAQCAtMjA3MSwxNCArMjA1NCwxNCBAQAogc3RhdGljIHZvaWQgaXNyX2luZGljYXRlX3JmX2tpbGwoc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiwgdTMyIHN0YXR1cykKIHsKIAlJUFdfREVCVUdfSU5GTygiJXM6IFJGIEtpbGwgc3RhdGUgY2hhbmdlZCB0byByYWRpbyBPRkYuXG4iLAotCSAgICAgICBwcml2LT5uZXRfZGV2LT5uYW1lKTsKKwkJICAgICAgIHByaXYtPm5ldF9kZXYtPm5hbWUpOwogCiAJLyogUkZfS0lMTCBpcyBub3cgZW5hYmxlZCAoZWxzZSB3ZSB3b3VsZG4ndCBiZSBoZXJlKSAqLwogCXByaXYtPnN0YXR1cyB8PSBTVEFUVVNfUkZfS0lMTF9IVzsKIAogI2lmZGVmIEFDUElfQ1NUQVRFX0xJTUlUX0RFRklORUQKIAlpZiAocHJpdi0+Y29uZmlnICYgQ0ZHX0MzX0RJU0FCTEVEKSB7Ci0JCUlQV19ERUJVR19JTkZPKERSVl9OQU1FICI6IFJlc2V0dGluZyBDMyB0cmFuc2l0aW9ucy5cbiIpOworCQlJUFdfREVCVUdfSU5GTygiOiBSZXNldHRpbmcgQzMgdHJhbnNpdGlvbnMuXG4iKTsKIAkJYWNwaV9zZXRfY3N0YXRlX2xpbWl0KHByaXYtPmNzdGF0ZV9saW1pdCk7CiAJCXByaXYtPmNvbmZpZyAmPSB+Q0ZHX0MzX0RJU0FCTEVEOwogCX0KQEAgLTIxMDIsMTYgKzIwODUsMTYgQEAKICNkZWZpbmUgSVBXMjEwMF9IQU5ETEVSKHYsIGYpIHsgdiwgZiwgIyB2IH0KIHN0cnVjdCBpcHcyMTAwX3N0YXR1c19pbmRpY2F0b3IgewogCWludCBzdGF0dXM7Ci0Jdm9pZCAoKmNiKShzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2LCB1MzIgc3RhdHVzKTsKKwl2b2lkICgqY2IpIChzdHJ1Y3QgaXB3MjEwMF9wcml2ICogcHJpdiwgdTMyIHN0YXR1cyk7CiAJY2hhciAqbmFtZTsKIH07CiAjZWxzZQogI2RlZmluZSBJUFcyMTAwX0hBTkRMRVIodiwgZikgeyB2LCBmIH0KIHN0cnVjdCBpcHcyMTAwX3N0YXR1c19pbmRpY2F0b3IgewogCWludCBzdGF0dXM7Ci0Jdm9pZCAoKmNiKShzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2LCB1MzIgc3RhdHVzKTsKKwl2b2lkICgqY2IpIChzdHJ1Y3QgaXB3MjEwMF9wcml2ICogcHJpdiwgdTMyIHN0YXR1cyk7CiB9OwotI2VuZGlmIC8qIENPTkZJR19JUFdfREVCVUcgKi8KKyNlbmRpZgkJCQkvKiBDT05GSUdfSVBXX0RFQlVHICovCiAKIHN0YXRpYyB2b2lkIGlzcl9pbmRpY2F0ZV9zY2FubmluZyhzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2LCB1MzIgc3RhdHVzKQogewpAQCAtMjEzNSw3ICsyMTE4LDYgQEAKIAlJUFcyMTAwX0hBTkRMRVIoLTEsIE5VTEwpCiB9OwogCi0KIHN0YXRpYyB2b2lkIGlzcl9zdGF0dXNfY2hhbmdlKHN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYsIGludCBzdGF0dXMpCiB7CiAJaW50IGk7CkBAIC0yMTUzLDcgKzIxMzUsNyBAQAogCWZvciAoaSA9IDA7IHN0YXR1c19oYW5kbGVyc1tpXS5zdGF0dXMgIT0gLTE7IGkrKykgewogCQlpZiAoc3RhdHVzID09IHN0YXR1c19oYW5kbGVyc1tpXS5zdGF0dXMpIHsKIAkJCUlQV19ERUJVR19OT1RJRigiU3RhdHVzIGNoYW5nZTogJXNcbiIsCi0JCQkJCSBzdGF0dXNfaGFuZGxlcnNbaV0ubmFtZSk7CisJCQkJCXN0YXR1c19oYW5kbGVyc1tpXS5uYW1lKTsKIAkJCWlmIChzdGF0dXNfaGFuZGxlcnNbaV0uY2IpCiAJCQkJc3RhdHVzX2hhbmRsZXJzW2ldLmNiKHByaXYsIHN0YXR1cyk7CiAJCQlwcml2LT53c3RhdHMuc3RhdHVzID0gc3RhdHVzOwpAQCAtMjE2NCw5ICsyMTQ2LDggQEAKIAlJUFdfREVCVUdfTk9USUYoInVua25vd24gc3RhdHVzIHJlY2VpdmVkOiAlMDR4XG4iLCBzdGF0dXMpOwogfQogCi1zdGF0aWMgdm9pZCBpc3JfcnhfY29tcGxldGVfY29tbWFuZCgKLQlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2LAotCXN0cnVjdCBpcHcyMTAwX2NtZF9oZWFkZXIgKmNtZCkKK3N0YXRpYyB2b2lkIGlzcl9yeF9jb21wbGV0ZV9jb21tYW5kKHN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYsCisJCQkJICAgIHN0cnVjdCBpcHcyMTAwX2NtZF9oZWFkZXIgKmNtZCkKIHsKICNpZmRlZiBDT05GSUdfSVBXX0RFQlVHCiAJaWYgKGNtZC0+aG9zdF9jb21tYW5kX3JlZyA8IEFSUkFZX1NJWkUoY29tbWFuZF90eXBlcykpIHsKQEAgLTIxOTYsMTAgKzIxNzcsOCBAQAogfTsKICNlbmRpZgogCi0KLXN0YXRpYyBpbmxpbmUgaW50IGlwdzIxMDBfYWxsb2Nfc2tiKAotCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYsCi0Jc3RydWN0IGlwdzIxMDBfcnhfcGFja2V0ICpwYWNrZXQpCitzdGF0aWMgaW5saW5lIGludCBpcHcyMTAwX2FsbG9jX3NrYihzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2LAorCQkJCSAgICBzdHJ1Y3QgaXB3MjEwMF9yeF9wYWNrZXQgKnBhY2tldCkKIHsKIAlwYWNrZXQtPnNrYiA9IGRldl9hbGxvY19za2Ioc2l6ZW9mKHN0cnVjdCBpcHcyMTAwX3J4KSk7CiAJaWYgKCFwYWNrZXQtPnNrYikKQEAgLTIyMTUsNyArMjE5NCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLQogI2RlZmluZSBTRUFSQ0hfRVJST1IgICAweGZmZmZmZmZmCiAjZGVmaW5lIFNFQVJDSF9GQUlMICAgIDB4ZmZmZmZmZmUKICNkZWZpbmUgU0VBUkNIX1NVQ0NFU1MgMHhmZmZmZmZmMApAQCAtMjIyOSwxMCArMjIwNywxMCBAQAogCWlmIChwcml2LT5zbmFwc2hvdFswXSkKIAkJcmV0dXJuIDE7CiAJZm9yIChpID0gMDsgaSA8IDB4MzA7IGkrKykgewotCQlwcml2LT5zbmFwc2hvdFtpXSA9ICh1OCopa21hbGxvYygweDEwMDAsIEdGUF9BVE9NSUMpOworCQlwcml2LT5zbmFwc2hvdFtpXSA9ICh1OCAqKSBrbWFsbG9jKDB4MTAwMCwgR0ZQX0FUT01JQyk7CiAJCWlmICghcHJpdi0+c25hcHNob3RbaV0pIHsKIAkJCUlQV19ERUJVR19JTkZPKCIlczogRXJyb3IgYWxsb2NhdGluZyBzbmFwc2hvdCAiCi0JCQkgICAgICAgImJ1ZmZlciAlZFxuIiwgcHJpdi0+bmV0X2Rldi0+bmFtZSwgaSk7CisJCQkJICAgICAgICJidWZmZXIgJWRcbiIsIHByaXYtPm5ldF9kZXYtPm5hbWUsIGkpOwogCQkJd2hpbGUgKGkgPiAwKQogCQkJCWtmcmVlKHByaXYtPnNuYXBzaG90Wy0taV0pOwogCQkJcHJpdi0+c25hcHNob3RbMF0gPSBOVUxMOwpAQCAtMjI1Myw3ICsyMjMxLDcgQEAKIAlwcml2LT5zbmFwc2hvdFswXSA9IE5VTEw7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdTMyIGlwdzIxMDBfbWF0Y2hfYnVmKHN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYsIHU4ICppbl9idWYsCitzdGF0aWMgaW5saW5lIHUzMiBpcHcyMTAwX21hdGNoX2J1ZihzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2LCB1OCAqIGluX2J1ZiwKIAkJCQkgICAgc2l6ZV90IGxlbiwgaW50IG1vZGUpCiB7CiAJdTMyIGksIGo7CkBAIC0yMjcwLDkgKzIyNDgsOSBAQAogCWZvciAocmV0ID0gU0VBUkNIX0ZBSUwsIGkgPSAwOyBpIDwgMHgzMDAwMDsgaSArPSA0KSB7CiAJCXJlYWRfbmljX2R3b3JkKHByaXYtPm5ldF9kZXYsIGksICZ0bXApOwogCQlpZiAobW9kZSA9PSBTRUFSQ0hfU05BUFNIT1QpCi0JCQkqKHUzMiAqKVNOQVBTSE9UX0FERFIoaSkgPSB0bXA7CisJCQkqKHUzMiAqKSBTTkFQU0hPVF9BRERSKGkpID0gdG1wOwogCQlpZiAocmV0ID09IFNFQVJDSF9GQUlMKSB7Ci0JCQlkID0gKHU4KikmdG1wOworCQkJZCA9ICh1OCAqKSAmIHRtcDsKIAkJCWZvciAoaiA9IDA7IGogPCA0OyBqKyspIHsKIAkJCQlpZiAoKnMgIT0gKmQpIHsKIAkJCQkJcyA9IGluX2J1ZjsKQEAgLTIzMTAsOCArMjI4OCw3IEBACiBzdGF0aWMgdTggcGFja2V0X2RhdGFbSVBXX1JYX05JQ19CVUZGRVJfTEVOR1RIXTsKICNlbmRpZgogCi1zdGF0aWMgaW5saW5lIHZvaWQgaXB3MjEwMF9jb3JydXB0aW9uX2RldGVjdGVkKHN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYsCi0JCQkJCSAgICAgICBpbnQgaSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBpcHcyMTAwX2NvcnJ1cHRpb25fZGV0ZWN0ZWQoc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiwgaW50IGkpCiB7CiAjaWZkZWYgQ09ORklHX0lQV19ERUJVR19DMwogCXN0cnVjdCBpcHcyMTAwX3N0YXR1cyAqc3RhdHVzID0gJnByaXYtPnN0YXR1c19xdWV1ZS5kcnZbaV07CkBAIC0yMzIyLDExICsyMjk5LDExIEBACiAJaW50IGxpbWl0OwogI2VuZGlmCiAKLQlJUFdfREVCVUdfSU5GTyhEUlZfTkFNRSAiOiBQQ0kgbGF0ZW5jeSBlcnJvciBkZXRlY3RlZCBhdCAiCi0JCSAgICAgICAiMHglMDR6WC5cbiIsIGkgKiBzaXplb2Yoc3RydWN0IGlwdzIxMDBfc3RhdHVzKSk7CisJSVBXX0RFQlVHX0lORk8oIjogUENJIGxhdGVuY3kgZXJyb3IgZGV0ZWN0ZWQgYXQgMHglMDR6WC5cbiIsCisJCSAgICAgICBpICogc2l6ZW9mKHN0cnVjdCBpcHcyMTAwX3N0YXR1cykpOwogCiAjaWZkZWYgQUNQSV9DU1RBVEVfTElNSVRfREVGSU5FRAotCUlQV19ERUJVR19JTkZPKERSVl9OQU1FICI6IERpc2FibGluZyBDMyB0cmFuc2l0aW9ucy5cbiIpOworCUlQV19ERUJVR19JTkZPKCI6IERpc2FibGluZyBDMyB0cmFuc2l0aW9ucy5cbiIpOwogCWxpbWl0ID0gYWNwaV9nZXRfY3N0YXRlX2xpbWl0KCk7CiAJaWYgKGxpbWl0ID4gMikgewogCQlwcml2LT5jc3RhdGVfbGltaXQgPSBsaW1pdDsKQEAgLTIzNDYsOSArMjMyMyw5IEBACiAKIAkJaWYgKHJlZyAmIElQV19BVVhfSE9TVF9SRVNFVF9SRUdfTUFTVEVSX0RJU0FCTEVEKQogCQkJYnJlYWs7Ci0JfSAgd2hpbGUgKGotLSk7CisJfSB3aGlsZSAoai0tKTsKIAotCW1hdGNoID0gaXB3MjEwMF9tYXRjaF9idWYocHJpdiwgKHU4KilzdGF0dXMsCisJbWF0Y2ggPSBpcHcyMTAwX21hdGNoX2J1Zihwcml2LCAodTggKikgc3RhdHVzLAogCQkJCSAgc2l6ZW9mKHN0cnVjdCBpcHcyMTAwX3N0YXR1cyksCiAJCQkJICBTRUFSQ0hfU05BUFNIT1QpOwogCWlmIChtYXRjaCA8IFNFQVJDSF9TVUNDRVNTKQpAQCAtMjM2MCw3ICsyMzM3LDcgQEAKIAkJSVBXX0RFQlVHX0lORk8oIiVzOiBObyBETUEgc3RhdHVzIG1hdGNoIGluICIKIAkJCSAgICAgICAiRmlybXdhcmUuXG4iLCBwcml2LT5uZXRfZGV2LT5uYW1lKTsKIAotCXByaW50a19idWYoKHU4Kilwcml2LT5zdGF0dXNfcXVldWUuZHJ2LAorCXByaW50a19idWYoKHU4ICopIHByaXYtPnN0YXR1c19xdWV1ZS5kcnYsCiAJCSAgIHNpemVvZihzdHJ1Y3QgaXB3MjEwMF9zdGF0dXMpICogUlhfUVVFVUVfTEVOR1RIKTsKICNlbmRpZgogCkBAIC0yMzkyLDI2ICsyMzY5LDI2IEBACiAJCUlQV19ERUJVR19EUk9QKCJEcm9wcGluZyBwYWNrZXQgd2hpbGUgaW50ZXJmYWNlIGlzIG5vdCB1cC5cbiIpOwogCQlyZXR1cm47CiAJfQotCisjaWZkZWYgQ09ORklHX0lQVzIxMDBfTU9OSVRPUgogCWlmICh1bmxpa2VseShwcml2LT5pZWVlLT5pd19tb2RlID09IElXX01PREVfTU9OSVRPUiAmJgorCQkgICAgIHByaXYtPmNvbmZpZyAmIENGR19DUkNfQ0hFQ0sgJiYKIAkJICAgICBzdGF0dXMtPmZsYWdzICYgSVBXX1NUQVRVU19GTEFHX0NSQ19FUlJPUikpIHsKIAkJSVBXX0RFQlVHX1JYKCJDUkMgZXJyb3IgaW4gcGFja2V0LiAgRHJvcHBpbmcuXG4iKTsKIAkJcHJpdi0+aWVlZS0+c3RhdHMucnhfZXJyb3JzKys7CiAJCXJldHVybjsKIAl9CisjZW5kaWYKIAogCWlmICh1bmxpa2VseShwcml2LT5pZWVlLT5pd19tb2RlICE9IElXX01PREVfTU9OSVRPUiAmJgotCQkhKHByaXYtPnN0YXR1cyAmIFNUQVRVU19BU1NPQ0lBVEVEKSkpIHsKKwkJICAgICAhKHByaXYtPnN0YXR1cyAmIFNUQVRVU19BU1NPQ0lBVEVEKSkpIHsKIAkJSVBXX0RFQlVHX0RST1AoIkRyb3BwaW5nIHBhY2tldCB3aGlsZSBub3QgYXNzb2NpYXRlZC5cbiIpOwogCQlwcml2LT53c3RhdHMuZGlzY2FyZC5taXNjKys7CiAJCXJldHVybjsKIAl9CiAKLQogCXBjaV91bm1hcF9zaW5nbGUocHJpdi0+cGNpX2RldiwKIAkJCSBwYWNrZXQtPmRtYV9hZGRyLAotCQkJIHNpemVvZihzdHJ1Y3QgaXB3MjEwMF9yeCksCi0JCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCSBzaXplb2Yoc3RydWN0IGlwdzIxMDBfcngpLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCiAJc2tiX3B1dChwYWNrZXQtPnNrYiwgc3RhdHVzLT5mcmFtZV9zaXplKTsKIApAQCAtMjQzOCw4ICsyNDE1LDggQEAKIAkvKiBXZSBuZWVkIHRvIGFsbG9jYXRlIGEgbmV3IFNLQiBhbmQgYXR0YWNoIGl0IHRvIHRoZSBSREIuICovCiAJaWYgKHVubGlrZWx5KGlwdzIxMDBfYWxsb2Nfc2tiKHByaXYsIHBhY2tldCkpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWX05BTUUgIjogIgotCQkJIiVzOiBVbmFibGUgdG8gYWxsb2NhdGUgU0tCIG9udG8gUkJEIHJpbmcgLSBkaXNhYmxpbmcgIgotCQkJImFkYXB0ZXIuXG4iLCBwcml2LT5uZXRfZGV2LT5uYW1lKTsKKwkJICAgICAgICIlczogVW5hYmxlIHRvIGFsbG9jYXRlIFNLQiBvbnRvIFJCRCByaW5nIC0gZGlzYWJsaW5nICIKKwkJICAgICAgICJhZGFwdGVyLlxuIiwgcHJpdi0+bmV0X2Rldi0+bmFtZSk7CiAJCS8qIFRPRE86IHNjaGVkdWxlIGFkYXB0ZXIgc2h1dGRvd24gKi8KIAkJSVBXX0RFQlVHX0lORk8oIlRPRE86IFNodXRkb3duIGFkYXB0ZXIuLi5cbiIpOwogCX0KQEAgLTI1MzQsMTEgKzI1MTEsMTEgQEAKIAogCQkvKiBTeW5jIHRoZSBETUEgZm9yIHRoZSBTVEFUVVMgYnVmZmVyIHNvIENQVSBpcyBzdXJlIHRvIGdldAogCQkgKiB0aGUgY29ycmVjdCB2YWx1ZXMgKi8KLQkJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KAotCQkJcHJpdi0+cGNpX2RldiwKLQkJCXNxLT5uaWMgKyBzaXplb2Yoc3RydWN0IGlwdzIxMDBfc3RhdHVzKSAqIGksCi0JCQlzaXplb2Yoc3RydWN0IGlwdzIxMDBfc3RhdHVzKSwKLQkJCVBDSV9ETUFfRlJPTURFVklDRSk7CisJCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdShwcml2LT5wY2lfZGV2LAorCQkJCQkgICAgc3EtPm5pYyArCisJCQkJCSAgICBzaXplb2Yoc3RydWN0IGlwdzIxMDBfc3RhdHVzKSAqIGksCisJCQkJCSAgICBzaXplb2Yoc3RydWN0IGlwdzIxMDBfc3RhdHVzKSwKKwkJCQkJICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CiAKIAkJLyogU3luYyB0aGUgRE1BIGZvciB0aGUgUlggYnVmZmVyIHNvIENQVSBpcyBzdXJlIHRvIGdldAogCQkgKiB0aGUgY29ycmVjdCB2YWx1ZXMgKi8KQEAgLTI1NTIsOCArMjUyOSw3IEBACiAJCX0KIAogCQl1ID0gcGFja2V0LT5yeHA7Ci0JCWZyYW1lX3R5cGUgPSBzcS0+ZHJ2W2ldLnN0YXR1c19maWVsZHMgJgotCQkJU1RBVFVTX1RZUEVfTUFTSzsKKwkJZnJhbWVfdHlwZSA9IHNxLT5kcnZbaV0uc3RhdHVzX2ZpZWxkcyAmIFNUQVRVU19UWVBFX01BU0s7CiAJCXN0YXRzLnJzc2kgPSBzcS0+ZHJ2W2ldLnJzc2kgKyBJUFcyMTAwX1JTU0lfVE9fREJNOwogCQlzdGF0cy5sZW4gPSBzcS0+ZHJ2W2ldLmZyYW1lX3NpemU7CiAKQEAgLTI1NjIsMTYgKzI1MzgsMTQgQEAKIAkJCXN0YXRzLm1hc2sgfD0gSUVFRTgwMjExX1NUQVRNQVNLX1JTU0k7CiAJCXN0YXRzLmZyZXEgPSBJRUVFODAyMTFfMjRHSFpfQkFORDsKIAotCQlJUFdfREVCVUdfUlgoCi0JCQkiJXM6ICclcycgZnJhbWUgdHlwZSByZWNlaXZlZCAoJWQpLlxuIiwKLQkJCXByaXYtPm5ldF9kZXYtPm5hbWUsIGZyYW1lX3R5cGVzW2ZyYW1lX3R5cGVdLAotCQkJc3RhdHMubGVuKTsKKwkJSVBXX0RFQlVHX1JYKCIlczogJyVzJyBmcmFtZSB0eXBlIHJlY2VpdmVkICglZCkuXG4iLAorCQkJICAgICBwcml2LT5uZXRfZGV2LT5uYW1lLCBmcmFtZV90eXBlc1tmcmFtZV90eXBlXSwKKwkJCSAgICAgc3RhdHMubGVuKTsKIAogCQlzd2l0Y2ggKGZyYW1lX3R5cGUpIHsKIAkJY2FzZSBDT01NQU5EX1NUQVRVU19WQUw6CiAJCQkvKiBSZXNldCBSeCB3YXRjaGRvZyAqLwotCQkJaXNyX3J4X2NvbXBsZXRlX2NvbW1hbmQoCi0JCQkJcHJpdiwgJnUtPnJ4X2RhdGEuY29tbWFuZCk7CisJCQlpc3JfcnhfY29tcGxldGVfY29tbWFuZChwcml2LCAmdS0+cnhfZGF0YS5jb21tYW5kKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgU1RBVFVTX0NIQU5HRV9WQUw6CkBAIC0yNTg4LDEyICsyNTYyLDEwIEBACiAjZW5kaWYKIAkJCWlmIChzdGF0cy5sZW4gPCBzaXplb2YodS0+cnhfZGF0YS5oZWFkZXIpKQogCQkJCWJyZWFrOwotCQkJc3dpdGNoIChXTEFOX0ZDX0dFVF9UWVBFKHUtPnJ4X2RhdGEuaGVhZGVyLgotCQkJCQkJIGZyYW1lX2N0bCkpIHsKKwkJCXN3aXRjaCAoV0xBTl9GQ19HRVRfVFlQRSh1LT5yeF9kYXRhLmhlYWRlci5mcmFtZV9jdGwpKSB7CiAJCQljYXNlIElFRUU4MDIxMV9GVFlQRV9NR01UOgogCQkJCWllZWU4MDIxMV9yeF9tZ3QocHJpdi0+aWVlZSwKLQkJCQkJCSAmdS0+cnhfZGF0YS5oZWFkZXIsCi0JCQkJCQkgJnN0YXRzKTsKKwkJCQkJCSAmdS0+cnhfZGF0YS5oZWFkZXIsICZzdGF0cyk7CiAJCQkJYnJlYWs7CiAKIAkJCWNhc2UgSUVFRTgwMjExX0ZUWVBFX0NUTDoKQEAgLTI2MDcsNyArMjU3OSw3IEBACiAJCQlicmVhazsKIAkJfQogCi0JaW5jcmVtZW50OgorCSAgICAgIGluY3JlbWVudDoKIAkJLyogY2xlYXIgc3RhdHVzIGZpZWxkIGFzc29jaWF0ZWQgd2l0aCB0aGlzIFJCRCAqLwogCQlyeHEtPmRydltpXS5zdGF0dXMuaW5mby5maWVsZCA9IDA7CiAKQEAgLTI2MTksMTIgKzI1OTEsMTAgQEAKIAkJcnhxLT5uZXh0ID0gKGkgPyBpIDogcnhxLT5lbnRyaWVzKSAtIDE7CiAKIAkJd3JpdGVfcmVnaXN0ZXIocHJpdi0+bmV0X2RldiwKLQkJCSAgICAgICBJUFdfTUVNX0hPU1RfU0hBUkVEX1JYX1dSSVRFX0lOREVYLAotCQkJICAgICAgIHJ4cS0+bmV4dCk7CisJCQkgICAgICAgSVBXX01FTV9IT1NUX1NIQVJFRF9SWF9XUklURV9JTkRFWCwgcnhxLT5uZXh0KTsKIAl9CiB9CiAKLQogLyoKICAqIF9faXB3MjEwMF90eF9wcm9jZXNzCiAgKgpAQCAtMjY2Nyw3ICsyNjM3LDcgQEAKIHN0YXRpYyBpbmxpbmUgaW50IF9faXB3MjEwMF90eF9wcm9jZXNzKHN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYpCiB7CiAJc3RydWN0IGlwdzIxMDBfYmRfcXVldWUgKnR4cSA9ICZwcml2LT50eF9xdWV1ZTsKLSAgICAgICAgc3RydWN0IGlwdzIxMDBfYmQgKnRiZDsKKwlzdHJ1Y3QgaXB3MjEwMF9iZCAqdGJkOwogCXN0cnVjdCBsaXN0X2hlYWQgKmVsZW1lbnQ7CiAJc3RydWN0IGlwdzIxMDBfdHhfcGFja2V0ICpwYWNrZXQ7CiAJaW50IGRlc2NyaXB0b3JzX3VzZWQ7CkBAIC0yNjgwLDcgKzI2NTAsNyBAQAogCWVsZW1lbnQgPSBwcml2LT5md19wZW5kX2xpc3QubmV4dDsKIAogCXBhY2tldCA9IGxpc3RfZW50cnkoZWxlbWVudCwgc3RydWN0IGlwdzIxMDBfdHhfcGFja2V0LCBsaXN0KTsKLSAgICAgICAgdGJkID0gJnR4cS0+ZHJ2W3BhY2tldC0+aW5kZXhdOworCXRiZCA9ICZ0eHEtPmRydltwYWNrZXQtPmluZGV4XTsKIAogCS8qIERldGVybWluZSBob3cgbWFueSBUQkQgZW50cmllcyBtdXN0IGJlIGZpbmlzaGVkLi4uICovCiAJc3dpdGNoIChwYWNrZXQtPnR5cGUpIHsKQEAgLTI2OTMsMTQgKzI2NjMsMTQgQEAKIAljYXNlIERBVEE6CiAJCS8qIERBVEEgdXNlcyB0d28gc2xvdHM7IGFkdmFuY2UgYW5kIGxvb3AgcG9zaXRpb24uICovCiAJCWRlc2NyaXB0b3JzX3VzZWQgPSB0YmQtPm51bV9mcmFnbWVudHM7Ci0gICAgICAgICAgICAgICAgZnJhZ19udW0gPSB0YmQtPm51bV9mcmFnbWVudHMgLSAxOworCQlmcmFnX251bSA9IHRiZC0+bnVtX2ZyYWdtZW50cyAtIDE7CiAJCWUgPSB0eHEtPm9sZGVzdCArIGZyYWdfbnVtOwogCQllICU9IHR4cS0+ZW50cmllczsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgogCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FICI6ICVzOiBCYWQgZndfcGVuZF9saXN0IGVudHJ5IVxuIiwKLQkJCQkgICBwcml2LT5uZXRfZGV2LT5uYW1lKTsKKwkJICAgICAgIHByaXYtPm5ldF9kZXYtPm5hbWUpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTI3MTYsMTMgKzI2ODYsMTIgQEAKIAkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTkFNRSAiOiAlczogd3JpdGUgaW5kZXggbWlzbWF0Y2hcbiIsCiAJCSAgICAgICBwcml2LT5uZXRfZGV2LT5uYW1lKTsKIAotICAgICAgICAvKgorCS8qCiAJICogdHhxLT5uZXh0IGlzIHRoZSBpbmRleCBvZiB0aGUgbGFzdCBwYWNrZXQgd3JpdHRlbiB0eHEtPm9sZGVzdCBpcwogCSAqIHRoZSBpbmRleCBvZiB0aGUgciBpcyB0aGUgaW5kZXggb2YgdGhlIG5leHQgcGFja2V0IHRvIGJlIHJlYWQgYnkKIAkgKiBmaXJtd2FyZQogCSAqLwogCi0KIAkvKgogCSAqIFF1aWNrIGdyYXBoaWMgdG8gaGVscCB5b3UgdmlzdWFsaXplIHRoZSBmb2xsb3dpbmcKIAkgKiBpZiAvIGVsc2Ugc3RhdGVtZW50CkBAIC0yNzUwLDIzICsyNzE5LDIwIEBACiAjaWZkZWYgQ09ORklHX0lQV19ERUJVRwogCXsKIAkJaW50IGkgPSB0eHEtPm9sZGVzdDsKLQkJSVBXX0RFQlVHX1RYKAotCQkJIlRYJWQgVj0lcCBQPSUwNFggVD0lMDRYIEw9JWRcbiIsIGksCi0JCQkmdHhxLT5kcnZbaV0sCi0JCQkodTMyKSh0eHEtPm5pYyArIGkgKiBzaXplb2Yoc3RydWN0IGlwdzIxMDBfYmQpKSwKLQkJCXR4cS0+ZHJ2W2ldLmhvc3RfYWRkciwKLQkJCXR4cS0+ZHJ2W2ldLmJ1Zl9sZW5ndGgpOworCQlJUFdfREVCVUdfVFgoIlRYJWQgVj0lcCBQPSUwNFggVD0lMDRYIEw9JWRcbiIsIGksCisJCQkgICAgICZ0eHEtPmRydltpXSwKKwkJCSAgICAgKHUzMikgKHR4cS0+bmljICsgaSAqIHNpemVvZihzdHJ1Y3QgaXB3MjEwMF9iZCkpLAorCQkJICAgICB0eHEtPmRydltpXS5ob3N0X2FkZHIsIHR4cS0+ZHJ2W2ldLmJ1Zl9sZW5ndGgpOwogCiAJCWlmIChwYWNrZXQtPnR5cGUgPT0gREFUQSkgewogCQkJaSA9IChpICsgMSkgJSB0eHEtPmVudHJpZXM7CiAKLQkJCUlQV19ERUJVR19UWCgKLQkJCQkiVFglZCBWPSVwIFA9JTA0WCBUPSUwNFggTD0lZFxuIiwgaSwKLQkJCQkmdHhxLT5kcnZbaV0sCi0JCQkJKHUzMikodHhxLT5uaWMgKyBpICoKLQkJCQlzaXplb2Yoc3RydWN0IGlwdzIxMDBfYmQpKSwKLQkJCQkodTMyKXR4cS0+ZHJ2W2ldLmhvc3RfYWRkciwKLQkJCQl0eHEtPmRydltpXS5idWZfbGVuZ3RoKTsKKwkJCUlQV19ERUJVR19UWCgiVFglZCBWPSVwIFA9JTA0WCBUPSUwNFggTD0lZFxuIiwgaSwKKwkJCQkgICAgICZ0eHEtPmRydltpXSwKKwkJCQkgICAgICh1MzIpICh0eHEtPm5pYyArIGkgKgorCQkJCQkgICAgc2l6ZW9mKHN0cnVjdCBpcHcyMTAwX2JkKSksCisJCQkJICAgICAodTMyKSB0eHEtPmRydltpXS5ob3N0X2FkZHIsCisJCQkJICAgICB0eHEtPmRydltpXS5idWZfbGVuZ3RoKTsKIAkJfQogCX0KICNlbmRpZgpAQCAtMjc4MCwyMyArMjc0NiwxOCBAQAogCQkJICAgICAgIHByaXYtPm5ldF9kZXYtPm5hbWUsIHR4cS0+b2xkZXN0LCBwYWNrZXQtPmluZGV4KTsKIAogCQkvKiBEQVRBIHBhY2tldDsgd2UgaGF2ZSB0byB1bm1hcCBhbmQgZnJlZSB0aGUgU0tCICovCi0JCXByaXYtPmllZWUtPnN0YXRzLnR4X3BhY2tldHMrKzsKIAkJZm9yIChpID0gMDsgaSA8IGZyYWdfbnVtOyBpKyspIHsKLQkJCXRiZCA9ICZ0eHEtPmRydlsocGFja2V0LT5pbmRleCArIDEgKyBpKSAlCi0JCQkJCXR4cS0+ZW50cmllc107CisJCQl0YmQgPSAmdHhxLT5kcnZbKHBhY2tldC0+aW5kZXggKyAxICsgaSkgJSB0eHEtPmVudHJpZXNdOwogCi0JCQlJUFdfREVCVUdfVFgoCi0JCQkJIlRYJWQgUD0lMDh4IEw9JWRcbiIsCi0JCQkJKHBhY2tldC0+aW5kZXggKyAxICsgaSkgJSB0eHEtPmVudHJpZXMsCi0JCQkJdGJkLT5ob3N0X2FkZHIsIHRiZC0+YnVmX2xlbmd0aCk7CisJCQlJUFdfREVCVUdfVFgoIlRYJWQgUD0lMDh4IEw9JWRcbiIsCisJCQkJICAgICAocGFja2V0LT5pbmRleCArIDEgKyBpKSAlIHR4cS0+ZW50cmllcywKKwkJCQkgICAgIHRiZC0+aG9zdF9hZGRyLCB0YmQtPmJ1Zl9sZW5ndGgpOwogCiAJCQlwY2lfdW5tYXBfc2luZ2xlKHByaXYtPnBjaV9kZXYsCiAJCQkJCSB0YmQtPmhvc3RfYWRkciwKLQkJCQkJIHRiZC0+YnVmX2xlbmd0aCwKLQkJCQkJIFBDSV9ETUFfVE9ERVZJQ0UpOworCQkJCQkgdGJkLT5idWZfbGVuZ3RoLCBQQ0lfRE1BX1RPREVWSUNFKTsKIAkJfQogCi0JCXByaXYtPmllZWUtPnN0YXRzLnR4X2J5dGVzICs9IHBhY2tldC0+aW5mby5kX3N0cnVjdC50eGItPnBheWxvYWRfc2l6ZTsKIAkJaWVlZTgwMjExX3R4Yl9mcmVlKHBhY2tldC0+aW5mby5kX3N0cnVjdC50eGIpOwogCQlwYWNrZXQtPmluZm8uZF9zdHJ1Y3QudHhiID0gTlVMTDsKIApAQCAtMjgwNSwxMyArMjc2Niw4IEBACiAKIAkJLyogV2UgaGF2ZSBhIGZyZWUgc2xvdCBpbiB0aGUgVHggcXVldWUsIHNvIHdha2UgdXAgdGhlCiAJCSAqIHRyYW5zbWl0IGxheWVyIGlmIGl0IGlzIHN0b3BwZWQuICovCi0JCWlmIChwcml2LT5zdGF0dXMgJiBTVEFUVVNfQVNTT0NJQVRFRCAmJgotCQkgICAgbmV0aWZfcXVldWVfc3RvcHBlZChwcml2LT5uZXRfZGV2KSkgewotCQkJSVBXX0RFQlVHX0lORk8oS0VSTl9JTkZPCi0JCQkJCSAgICIlczogV2FraW5nIG5ldCBxdWV1ZS5cbiIsCi0JCQkJCSAgIHByaXYtPm5ldF9kZXYtPm5hbWUpOworCQlpZiAocHJpdi0+c3RhdHVzICYgU1RBVFVTX0FTU09DSUFURUQpCiAJCQluZXRpZl93YWtlX3F1ZXVlKHByaXYtPm5ldF9kZXYpOwotCQl9CiAKIAkJLyogQSBwYWNrZXQgd2FzIHByb2Nlc3NlZCBieSB0aGUgaGFyZHdhcmUsIHNvIHVwZGF0ZSB0aGUKIAkJICogd2F0Y2hkb2cgKi8KQEAgLTI4MjksMTEgKzI3ODUsMTIgQEAKICNpZmRlZiBDT05GSUdfSVBXX0RFQlVHCiAJCWlmIChwYWNrZXQtPmluZm8uY19zdHJ1Y3QuY21kLT5ob3N0X2NvbW1hbmRfcmVnIDwKIAkJICAgIHNpemVvZihjb21tYW5kX3R5cGVzKSAvIHNpemVvZigqY29tbWFuZF90eXBlcykpCi0JCQlJUFdfREVCVUdfVFgoCi0JCQkJIkNvbW1hbmQgJyVzICglZCknIHByb2Nlc3NlZDogJWQuXG4iLAotCQkJCWNvbW1hbmRfdHlwZXNbcGFja2V0LT5pbmZvLmNfc3RydWN0LmNtZC0+aG9zdF9jb21tYW5kX3JlZ10sCi0JCQkJcGFja2V0LT5pbmZvLmNfc3RydWN0LmNtZC0+aG9zdF9jb21tYW5kX3JlZywKLQkJCQlwYWNrZXQtPmluZm8uY19zdHJ1Y3QuY21kLT5jbWRfc3RhdHVzX3JlZyk7CisJCQlJUFdfREVCVUdfVFgoIkNvbW1hbmQgJyVzICglZCknIHByb2Nlc3NlZDogJWQuXG4iLAorCQkJCSAgICAgY29tbWFuZF90eXBlc1twYWNrZXQtPmluZm8uY19zdHJ1Y3QuY21kLT4KKwkJCQkJCSAgIGhvc3RfY29tbWFuZF9yZWddLAorCQkJCSAgICAgcGFja2V0LT5pbmZvLmNfc3RydWN0LmNtZC0+CisJCQkJICAgICBob3N0X2NvbW1hbmRfcmVnLAorCQkJCSAgICAgcGFja2V0LT5pbmZvLmNfc3RydWN0LmNtZC0+Y21kX3N0YXR1c19yZWcpOwogI2VuZGlmCiAKIAkJbGlzdF9hZGRfdGFpbChlbGVtZW50LCAmcHJpdi0+bXNnX2ZyZWVfbGlzdCk7CkBAIC0yODQ4LDE3ICsyODA1LDE3IEBACiAJU0VUX1NUQVQoJnByaXYtPnR4cV9zdGF0LCB0eHEtPmF2YWlsYWJsZSk7CiAKIAlJUFdfREVCVUdfVFgoInBhY2tldCBsYXRlbmN5IChzZW5kIHRvIHByb2Nlc3MpICAlbGQgamlmZmllc1xuIiwKLQkJCSBqaWZmaWVzIC0gcGFja2V0LT5qaWZmeV9zdGFydCk7CisJCSAgICAgamlmZmllcyAtIHBhY2tldC0+amlmZnlfc3RhcnQpOwogCiAJcmV0dXJuICghbGlzdF9lbXB0eSgmcHJpdi0+ZndfcGVuZF9saXN0KSk7CiB9CiAKLQogc3RhdGljIGlubGluZSB2b2lkIF9faXB3MjEwMF90eF9jb21wbGV0ZShzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2KQogewogCWludCBpID0gMDsKIAotCXdoaWxlIChfX2lwdzIxMDBfdHhfcHJvY2Vzcyhwcml2KSAmJiBpIDwgMjAwKSBpKys7CisJd2hpbGUgKF9faXB3MjEwMF90eF9wcm9jZXNzKHByaXYpICYmIGkgPCAyMDApCisJCWkrKzsKIAogCWlmIChpID09IDIwMCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FICI6ICIKQEAgLTI4NjcsNyArMjgyNCw2IEBACiAJfQogfQogCi0KIHN0YXRpYyB2b2lkIGlwdzIxMDBfdHhfc2VuZF9jb21tYW5kcyhzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2KQogewogCXN0cnVjdCBsaXN0X2hlYWQgKmVsZW1lbnQ7CkBAIC0yODkyLDEzICsyODQ4LDEyIEBACiAJCWxpc3RfZGVsKGVsZW1lbnQpOwogCQlERUNfU1RBVCgmcHJpdi0+bXNnX3BlbmRfc3RhdCk7CiAKLQkJcGFja2V0ID0gbGlzdF9lbnRyeShlbGVtZW50LAotCQkJCSAgICBzdHJ1Y3QgaXB3MjEwMF90eF9wYWNrZXQsIGxpc3QpOworCQlwYWNrZXQgPSBsaXN0X2VudHJ5KGVsZW1lbnQsIHN0cnVjdCBpcHcyMTAwX3R4X3BhY2tldCwgbGlzdCk7CiAKIAkJSVBXX0RFQlVHX1RYKCJ1c2luZyBUQkQgYXQgdmlydD0lcCwgcGh5cz0lcFxuIiwKLQkJCQkgJnR4cS0+ZHJ2W3R4cS0+bmV4dF0sCi0JCQkJICh2b2lkKikodHhxLT5uaWMgKyB0eHEtPm5leHQgKgotCQkJCQkgc2l6ZW9mKHN0cnVjdCBpcHcyMTAwX2JkKSkpOworCQkJICAgICAmdHhxLT5kcnZbdHhxLT5uZXh0XSwKKwkJCSAgICAgKHZvaWQgKikodHhxLT5uaWMgKyB0eHEtPm5leHQgKgorCQkJCSAgICAgIHNpemVvZihzdHJ1Y3QgaXB3MjEwMF9iZCkpKTsKIAogCQlwYWNrZXQtPmluZGV4ID0gdHhxLT5uZXh0OwogCkBAIC0yOTExLDggKzI4NjYsOCBAQAogCQkgKiB3aXRoIGYvdyBkZWJ1ZyB2ZXJzaW9uICovCiAJCXRiZC0+bnVtX2ZyYWdtZW50cyA9IDE7CiAJCXRiZC0+c3RhdHVzLmluZm8uZmllbGQgPQotCQkJSVBXX0JEX1NUQVRVU19UWF9GUkFNRV9DT01NQU5EIHwKLQkJCUlQV19CRF9TVEFUVVNfVFhfSU5URVJSVVBUX0VOQUJMRTsKKwkJICAgIElQV19CRF9TVEFUVVNfVFhfRlJBTUVfQ09NTUFORCB8CisJCSAgICBJUFdfQkRfU1RBVFVTX1RYX0lOVEVSUlVQVF9FTkFCTEU7CiAKIAkJLyogdXBkYXRlIFRCRCBxdWV1ZSBjb3VudGVycyAqLwogCQl0eHEtPm5leHQrKzsKQEAgLTI5MzQsNyArMjg4OSw2IEBACiAJfQogfQogCi0KIC8qCiAgKiBpcHcyMTAwX3R4X3NlbmRfZGF0YQogICoKQEAgLTI5NDYsNyArMjkwMCw3IEBACiAJc3RydWN0IGlwdzIxMDBfYmRfcXVldWUgKnR4cSA9ICZwcml2LT50eF9xdWV1ZTsKIAlzdHJ1Y3QgaXB3MjEwMF9iZCAqdGJkOwogCWludCBuZXh0ID0gdHhxLT5uZXh0OwotICAgICAgICBpbnQgaSA9IDA7CisJaW50IGkgPSAwOwogCXN0cnVjdCBpcHcyMTAwX2RhdGFfaGVhZGVyICppcHdfaGRyOwogCXN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyICpoZHI7CiAKQEAgLTI5NTgsMjAgKzI5MTIsMTggQEAKIAkJICogICAgICAgbWFpbnRhaW5lZCBiZXR3ZWVuIHRoZSByIGFuZCB3IGluZGV4ZXMKIAkJICovCiAJCWVsZW1lbnQgPSBwcml2LT50eF9wZW5kX2xpc3QubmV4dDsKLSAgICAgICAgICAgICAgICBwYWNrZXQgPSBsaXN0X2VudHJ5KGVsZW1lbnQsIHN0cnVjdCBpcHcyMTAwX3R4X3BhY2tldCwgbGlzdCk7CisJCXBhY2tldCA9IGxpc3RfZW50cnkoZWxlbWVudCwgc3RydWN0IGlwdzIxMDBfdHhfcGFja2V0LCBsaXN0KTsKIAogCQlpZiAodW5saWtlbHkoMSArIHBhY2tldC0+aW5mby5kX3N0cnVjdC50eGItPm5yX2ZyYWdzID4KIAkJCSAgICAgSVBXX01BWF9CRFMpKSB7CiAJCQkvKiBUT0RPOiBTdXBwb3J0IG1lcmdpbmcgYnVmZmVycyBpZiBtb3JlIHRoYW4KIAkJCSAqIElQV19NQVhfQkRTIGFyZSB1c2VkICovCi0JCQlJUFdfREVCVUdfSU5GTygKLQkJCSAgICAgICAiJXM6IE1heGltdW0gQkQgdGhlc2hvbGQgZXhjZWVkZWQuICAiCi0JCQkgICAgICAgIkluY3JlYXNlIGZyYWdtZW50YXRpb24gbGV2ZWwuXG4iLAotCQkJICAgICAgIHByaXYtPm5ldF9kZXYtPm5hbWUpOworCQkJSVBXX0RFQlVHX0lORk8oIiVzOiBNYXhpbXVtIEJEIHRoZXNob2xkIGV4Y2VlZGVkLiAgIgorCQkJCSAgICAgICAiSW5jcmVhc2UgZnJhZ21lbnRhdGlvbiBsZXZlbC5cbiIsCisJCQkJICAgICAgIHByaXYtPm5ldF9kZXYtPm5hbWUpOwogCQl9CiAKLQkJaWYgKHR4cS0+YXZhaWxhYmxlIDw9IDMgKwotCQkgICAgcGFja2V0LT5pbmZvLmRfc3RydWN0LnR4Yi0+bnJfZnJhZ3MpIHsKKwkJaWYgKHR4cS0+YXZhaWxhYmxlIDw9IDMgKyBwYWNrZXQtPmluZm8uZF9zdHJ1Y3QudHhiLT5ucl9mcmFncykgewogCQkJSVBXX0RFQlVHX1RYKCJubyByb29tIGluIHR4X3F1ZXVlXG4iKTsKIAkJCWJyZWFrOwogCQl9CkBAIC0yOTg1LDcgKzI5MzcsNyBAQAogCiAJCWlwd19oZHIgPSBwYWNrZXQtPmluZm8uZF9zdHJ1Y3QuZGF0YTsKIAkJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyICopcGFja2V0LT5pbmZvLmRfc3RydWN0LnR4Yi0+Ci0JCQlmcmFnbWVudHNbMF0tPmRhdGE7CisJCSAgICBmcmFnbWVudHNbMF0tPmRhdGE7CiAKIAkJaWYgKHByaXYtPmllZWUtPml3X21vZGUgPT0gSVdfTU9ERV9JTkZSQSkgewogCQkJLyogVG8gRFM6IEFkZHIxID0gQlNTSUQsIEFkZHIyID0gU0EsCkBAIC0zMDA3LDcgKzI5NTksOCBAQAogCQlpcHdfaGRyLT5lbmNyeXB0ZWQgPSBwYWNrZXQtPmluZm8uZF9zdHJ1Y3QudHhiLT5lbmNyeXB0ZWQ7CiAJCWlmIChwYWNrZXQtPmluZm8uZF9zdHJ1Y3QudHhiLT5ucl9mcmFncyA+IDEpCiAJCQlpcHdfaGRyLT5mcmFnbWVudF9zaXplID0KLQkJCQlwYWNrZXQtPmluZm8uZF9zdHJ1Y3QudHhiLT5mcmFnX3NpemUgLSBJRUVFODAyMTFfM0FERFJfTEVOOworCQkJICAgIHBhY2tldC0+aW5mby5kX3N0cnVjdC50eGItPmZyYWdfc2l6ZSAtCisJCQkgICAgSUVFRTgwMjExXzNBRERSX0xFTjsKIAkJZWxzZQogCQkJaXB3X2hkci0+ZnJhZ21lbnRfc2l6ZSA9IDA7CiAKQEAgLTMwMTUsNTQgKzI5NjgsNTMgQEAKIAkJdGJkLT5idWZfbGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBpcHcyMTAwX2RhdGFfaGVhZGVyKTsKIAkJdGJkLT5udW1fZnJhZ21lbnRzID0gMSArIHBhY2tldC0+aW5mby5kX3N0cnVjdC50eGItPm5yX2ZyYWdzOwogCQl0YmQtPnN0YXR1cy5pbmZvLmZpZWxkID0KLQkJCUlQV19CRF9TVEFUVVNfVFhfRlJBTUVfODAyXzMgfAotCQkJSVBXX0JEX1NUQVRVU19UWF9GUkFNRV9OT1RfTEFTVF9GUkFHTUVOVDsKKwkJICAgIElQV19CRF9TVEFUVVNfVFhfRlJBTUVfODAyXzMgfAorCQkgICAgSVBXX0JEX1NUQVRVU19UWF9GUkFNRV9OT1RfTEFTVF9GUkFHTUVOVDsKIAkJdHhxLT5uZXh0Kys7CiAJCXR4cS0+bmV4dCAlPSB0eHEtPmVudHJpZXM7CiAKLQkJSVBXX0RFQlVHX1RYKAotCQkJImRhdGEgaGVhZGVyIHRiZCBUWCVkIFA9JTA4eCBMPSVkXG4iLAotCQkJcGFja2V0LT5pbmRleCwgdGJkLT5ob3N0X2FkZHIsCi0JCQl0YmQtPmJ1Zl9sZW5ndGgpOworCQlJUFdfREVCVUdfVFgoImRhdGEgaGVhZGVyIHRiZCBUWCVkIFA9JTA4eCBMPSVkXG4iLAorCQkJICAgICBwYWNrZXQtPmluZGV4LCB0YmQtPmhvc3RfYWRkciwgdGJkLT5idWZfbGVuZ3RoKTsKICNpZmRlZiBDT05GSUdfSVBXX0RFQlVHCiAJCWlmIChwYWNrZXQtPmluZm8uZF9zdHJ1Y3QudHhiLT5ucl9mcmFncyA+IDEpCiAJCQlJUFdfREVCVUdfRlJBRygiZnJhZ21lbnQgVHg6ICVkIGZyYW1lc1xuIiwKIAkJCQkgICAgICAgcGFja2V0LT5pbmZvLmRfc3RydWN0LnR4Yi0+bnJfZnJhZ3MpOwogI2VuZGlmCiAKLSAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGFja2V0LT5pbmZvLmRfc3RydWN0LnR4Yi0+bnJfZnJhZ3M7IGkrKykgewotCQkgICAgICAgIHRiZCA9ICZ0eHEtPmRydlt0eHEtPm5leHRdOworCQlmb3IgKGkgPSAwOyBpIDwgcGFja2V0LT5pbmZvLmRfc3RydWN0LnR4Yi0+bnJfZnJhZ3M7IGkrKykgeworCQkJdGJkID0gJnR4cS0+ZHJ2W3R4cS0+bmV4dF07CiAJCQlpZiAoaSA9PSBwYWNrZXQtPmluZm8uZF9zdHJ1Y3QudHhiLT5ucl9mcmFncyAtIDEpCiAJCQkJdGJkLT5zdGF0dXMuaW5mby5maWVsZCA9Ci0JCQkJCUlQV19CRF9TVEFUVVNfVFhfRlJBTUVfODAyXzMgfAotCQkJCQlJUFdfQkRfU1RBVFVTX1RYX0lOVEVSUlVQVF9FTkFCTEU7CisJCQkJICAgIElQV19CRF9TVEFUVVNfVFhfRlJBTUVfODAyXzMgfAorCQkJCSAgICBJUFdfQkRfU1RBVFVTX1RYX0lOVEVSUlVQVF9FTkFCTEU7CiAJCQllbHNlCiAJCQkJdGJkLT5zdGF0dXMuaW5mby5maWVsZCA9Ci0JCQkJCUlQV19CRF9TVEFUVVNfVFhfRlJBTUVfODAyXzMgfAotCQkJCQlJUFdfQkRfU1RBVFVTX1RYX0ZSQU1FX05PVF9MQVNUX0ZSQUdNRU5UOworCQkJCSAgICBJUFdfQkRfU1RBVFVTX1RYX0ZSQU1FXzgwMl8zIHwKKwkJCQkgICAgSVBXX0JEX1NUQVRVU19UWF9GUkFNRV9OT1RfTEFTVF9GUkFHTUVOVDsKIAogCQkJdGJkLT5idWZfbGVuZ3RoID0gcGFja2V0LT5pbmZvLmRfc3RydWN0LnR4Yi0+Ci0JCQkJZnJhZ21lbnRzW2ldLT5sZW4gLSBJRUVFODAyMTFfM0FERFJfTEVOOworCQkJICAgIGZyYWdtZW50c1tpXS0+bGVuIC0gSUVFRTgwMjExXzNBRERSX0xFTjsKIAotICAgICAgICAgICAgICAgICAgICAgICAgdGJkLT5ob3N0X2FkZHIgPSBwY2lfbWFwX3NpbmdsZSgKLQkJCQlwcml2LT5wY2lfZGV2LAotCQkJCXBhY2tldC0+aW5mby5kX3N0cnVjdC50eGItPmZyYWdtZW50c1tpXS0+ZGF0YSArCi0JCQkJSUVFRTgwMjExXzNBRERSX0xFTiwKLQkJCQl0YmQtPmJ1Zl9sZW5ndGgsCi0JCQkJUENJX0RNQV9UT0RFVklDRSk7CisJCQl0YmQtPmhvc3RfYWRkciA9IHBjaV9tYXBfc2luZ2xlKHByaXYtPnBjaV9kZXYsCisJCQkJCQkJcGFja2V0LT5pbmZvLmRfc3RydWN0LgorCQkJCQkJCXR4Yi0+ZnJhZ21lbnRzW2ldLT4KKwkJCQkJCQlkYXRhICsKKwkJCQkJCQlJRUVFODAyMTFfM0FERFJfTEVOLAorCQkJCQkJCXRiZC0+YnVmX2xlbmd0aCwKKwkJCQkJCQlQQ0lfRE1BX1RPREVWSUNFKTsKIAotCQkJSVBXX0RFQlVHX1RYKAotCQkJCSJkYXRhIGZyYWcgdGJkIFRYJWQgUD0lMDh4IEw9JWRcbiIsCi0JCQkJdHhxLT5uZXh0LCB0YmQtPmhvc3RfYWRkciwgdGJkLT5idWZfbGVuZ3RoKTsKKwkJCUlQV19ERUJVR19UWCgiZGF0YSBmcmFnIHRiZCBUWCVkIFA9JTA4eCBMPSVkXG4iLAorCQkJCSAgICAgdHhxLT5uZXh0LCB0YmQtPmhvc3RfYWRkciwKKwkJCQkgICAgIHRiZC0+YnVmX2xlbmd0aCk7CiAKLQkJCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZSgKLQkJCQlwcml2LT5wY2lfZGV2LCB0YmQtPmhvc3RfYWRkciwKLQkJCQl0YmQtPmJ1Zl9sZW5ndGgsCi0JCQkJUENJX0RNQV9UT0RFVklDRSk7CisJCQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UocHJpdi0+cGNpX2RldiwKKwkJCQkJCSAgICAgICB0YmQtPmhvc3RfYWRkciwKKwkJCQkJCSAgICAgICB0YmQtPmJ1Zl9sZW5ndGgsCisJCQkJCQkgICAgICAgUENJX0RNQV9UT0RFVklDRSk7CiAKIAkJCXR4cS0+bmV4dCsrOwogCQkJdHhxLT5uZXh0ICU9IHR4cS0+ZW50cmllczsKLSAgICAgICAgICAgICAgICB9CisJCX0KIAogCQl0eHEtPmF2YWlsYWJsZSAtPSAxICsgcGFja2V0LT5pbmZvLmRfc3RydWN0LnR4Yi0+bnJfZnJhZ3M7CiAJCVNFVF9TVEFUKCZwcml2LT50eHFfc3RhdCwgdHhxLT5hdmFpbGFibGUpOwpAQCAtMzA3OCw3ICszMDMwLDcgQEAKIAkJCSAgICAgICBJUFdfTUVNX0hPU1RfU0hBUkVEX1RYX1FVRVVFX1dSSVRFX0lOREVYLAogCQkJICAgICAgIHR4cS0+bmV4dCk7CiAJfQotICAgICAgICByZXR1cm47CisJcmV0dXJuOwogfQogCiBzdGF0aWMgdm9pZCBpcHcyMTAwX2lycV90YXNrbGV0KHN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYpCkBAIC0zMTA2LDExICszMDU4LDkgQEAKIAogCWlmIChpbnRhICYgSVBXMjEwMF9JTlRBX0ZBVEFMX0VSUk9SKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWX05BTUUKLQkJCQkgICI6IEZhdGFsIGludGVycnVwdC4gU2NoZWR1bGluZyBmaXJtd2FyZSByZXN0YXJ0LlxuIik7CisJCSAgICAgICAiOiBGYXRhbCBpbnRlcnJ1cHQuIFNjaGVkdWxpbmcgZmlybXdhcmUgcmVzdGFydC5cbiIpOwogCQlwcml2LT5pbnRhX290aGVyKys7Ci0JCXdyaXRlX3JlZ2lzdGVyKAotCQkJZGV2LCBJUFdfUkVHX0lOVEEsCi0JCQlJUFcyMTAwX0lOVEFfRkFUQUxfRVJST1IpOworCQl3cml0ZV9yZWdpc3RlcihkZXYsIElQV19SRUdfSU5UQSwgSVBXMjEwMF9JTlRBX0ZBVEFMX0VSUk9SKTsKIAogCQlyZWFkX25pY19kd29yZChkZXYsIElQV19OSUNfRkFUQUxfRVJST1IsICZwcml2LT5mYXRhbF9lcnJvcik7CiAJCUlQV19ERUJVR19JTkZPKCIlczogRmF0YWwgZXJyb3IgdmFsdWU6IDB4JTA4WFxuIiwKQEAgLTMxMjUsMTEgKzMwNzUsMTAgQEAKIAl9CiAKIAlpZiAoaW50YSAmIElQVzIxMDBfSU5UQV9QQVJJVFlfRVJST1IpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6ICoqKioqIFBBUklUWSBFUlJPUiBJTlRFUlJVUFQgISEhISBcbiIpOworCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUKKwkJICAgICAgICI6ICoqKioqIFBBUklUWSBFUlJPUiBJTlRFUlJVUFQgISEhISBcbiIpOwogCQlwcml2LT5pbnRhX290aGVyKys7Ci0JCXdyaXRlX3JlZ2lzdGVyKAotCQkJZGV2LCBJUFdfUkVHX0lOVEEsCi0JCQlJUFcyMTAwX0lOVEFfUEFSSVRZX0VSUk9SKTsKKwkJd3JpdGVfcmVnaXN0ZXIoZGV2LCBJUFdfUkVHX0lOVEEsIElQVzIxMDBfSU5UQV9QQVJJVFlfRVJST1IpOwogCX0KIAogCWlmIChpbnRhICYgSVBXMjEwMF9JTlRBX1JYX1RSQU5TRkVSKSB7CkBAIC0zMTM3LDkgKzMwODYsNyBAQAogCiAJCXByaXYtPnJ4X2ludGVycnVwdHMrKzsKIAotCQl3cml0ZV9yZWdpc3RlcigKLQkJCWRldiwgSVBXX1JFR19JTlRBLAotCQkJSVBXMjEwMF9JTlRBX1JYX1RSQU5TRkVSKTsKKwkJd3JpdGVfcmVnaXN0ZXIoZGV2LCBJUFdfUkVHX0lOVEEsIElQVzIxMDBfSU5UQV9SWF9UUkFOU0ZFUik7CiAKIAkJX19pcHcyMTAwX3J4X3Byb2Nlc3MocHJpdik7CiAJCV9faXB3MjEwMF90eF9jb21wbGV0ZShwcml2KTsKQEAgLTMxNTAsOCArMzA5Nyw3IEBACiAKIAkJcHJpdi0+dHhfaW50ZXJydXB0cysrOwogCi0JCXdyaXRlX3JlZ2lzdGVyKGRldiwgSVBXX1JFR19JTlRBLAotCQkJICAgICAgIElQVzIxMDBfSU5UQV9UWF9UUkFOU0ZFUik7CisJCXdyaXRlX3JlZ2lzdGVyKGRldiwgSVBXX1JFR19JTlRBLCBJUFcyMTAwX0lOVEFfVFhfVFJBTlNGRVIpOwogCiAJCV9faXB3MjEwMF90eF9jb21wbGV0ZShwcml2KTsKIAkJaXB3MjEwMF90eF9zZW5kX2NvbW1hbmRzKHByaXYpOwpAQCAtMzE2MSw5ICszMTA3LDcgQEAKIAlpZiAoaW50YSAmIElQVzIxMDBfSU5UQV9UWF9DT01QTEVURSkgewogCQlJUFdfREVCVUdfSVNSKCJUWCBjb21wbGV0ZVxuIik7CiAJCXByaXYtPmludGFfb3RoZXIrKzsKLQkJd3JpdGVfcmVnaXN0ZXIoCi0JCQlkZXYsIElQV19SRUdfSU5UQSwKLQkJCUlQVzIxMDBfSU5UQV9UWF9DT01QTEVURSk7CisJCXdyaXRlX3JlZ2lzdGVyKGRldiwgSVBXX1JFR19JTlRBLCBJUFcyMTAwX0lOVEFfVFhfQ09NUExFVEUpOwogCiAJCV9faXB3MjEwMF90eF9jb21wbGV0ZShwcml2KTsKIAl9CkBAIC0zMTcxLDkgKzMxMTUsNyBAQAogCWlmIChpbnRhICYgSVBXMjEwMF9JTlRBX0VWRU5UX0lOVEVSUlVQVCkgewogCQkvKiBpcHcyMTAwX2hhbmRsZV9ldmVudChkZXYpOyAqLwogCQlwcml2LT5pbnRhX290aGVyKys7Ci0JCXdyaXRlX3JlZ2lzdGVyKAotCQkJZGV2LCBJUFdfUkVHX0lOVEEsCi0JCQlJUFcyMTAwX0lOVEFfRVZFTlRfSU5URVJSVVBUKTsKKwkJd3JpdGVfcmVnaXN0ZXIoZGV2LCBJUFdfUkVHX0lOVEEsIElQVzIxMDBfSU5UQV9FVkVOVF9JTlRFUlJVUFQpOwogCX0KIAogCWlmIChpbnRhICYgSVBXMjEwMF9JTlRBX0ZXX0lOSVRfRE9ORSkgewpAQCAtMzE4MywzMCArMzEyNSwyNSBAQAogCQlyZWFkX3JlZ2lzdGVyKGRldiwgSVBXX1JFR19JTlRBLCAmdG1wKTsKIAkJaWYgKHRtcCAmIChJUFcyMTAwX0lOVEFfRkFUQUxfRVJST1IgfAogCQkJICAgSVBXMjEwMF9JTlRBX1BBUklUWV9FUlJPUikpIHsKLQkJCXdyaXRlX3JlZ2lzdGVyKAotCQkJCWRldiwgSVBXX1JFR19JTlRBLAotCQkJCUlQVzIxMDBfSU5UQV9GQVRBTF9FUlJPUiB8Ci0JCQkJSVBXMjEwMF9JTlRBX1BBUklUWV9FUlJPUik7CisJCQl3cml0ZV9yZWdpc3RlcihkZXYsIElQV19SRUdfSU5UQSwKKwkJCQkgICAgICAgSVBXMjEwMF9JTlRBX0ZBVEFMX0VSUk9SIHwKKwkJCQkgICAgICAgSVBXMjEwMF9JTlRBX1BBUklUWV9FUlJPUik7CiAJCX0KIAotCQl3cml0ZV9yZWdpc3RlcihkZXYsIElQV19SRUdfSU5UQSwKLQkJCSAgICAgICBJUFcyMTAwX0lOVEFfRldfSU5JVF9ET05FKTsKKwkJd3JpdGVfcmVnaXN0ZXIoZGV2LCBJUFdfUkVHX0lOVEEsIElQVzIxMDBfSU5UQV9GV19JTklUX0RPTkUpOwogCX0KIAogCWlmIChpbnRhICYgSVBXMjEwMF9JTlRBX1NUQVRVU19DSEFOR0UpIHsKIAkJSVBXX0RFQlVHX0lTUigiU3RhdHVzIGNoYW5nZSBpbnRlcnJ1cHRcbiIpOwogCQlwcml2LT5pbnRhX290aGVyKys7Ci0JCXdyaXRlX3JlZ2lzdGVyKAotCQkJZGV2LCBJUFdfUkVHX0lOVEEsCi0JCQlJUFcyMTAwX0lOVEFfU1RBVFVTX0NIQU5HRSk7CisJCXdyaXRlX3JlZ2lzdGVyKGRldiwgSVBXX1JFR19JTlRBLCBJUFcyMTAwX0lOVEFfU1RBVFVTX0NIQU5HRSk7CiAJfQogCiAJaWYgKGludGEgJiBJUFcyMTAwX0lOVEFfU0xBVkVfTU9ERV9IT1NUX0NPTU1BTkRfRE9ORSkgewogCQlJUFdfREVCVUdfSVNSKCJzbGF2ZSBob3N0IG1vZGUgaW50ZXJydXB0XG4iKTsKIAkJcHJpdi0+aW50YV9vdGhlcisrOwotCQl3cml0ZV9yZWdpc3RlcigKLQkJCWRldiwgSVBXX1JFR19JTlRBLAotCQkJSVBXMjEwMF9JTlRBX1NMQVZFX01PREVfSE9TVF9DT01NQU5EX0RPTkUpOworCQl3cml0ZV9yZWdpc3RlcihkZXYsIElQV19SRUdfSU5UQSwKKwkJCSAgICAgICBJUFcyMTAwX0lOVEFfU0xBVkVfTU9ERV9IT1NUX0NPTU1BTkRfRE9ORSk7CiAJfQogCiAJcHJpdi0+aW5faXNyLS07CkBAIC0zMjE3LDkgKzMxNTQsNyBAQAogCUlQV19ERUJVR19JU1IoImV4aXRcbiIpOwogfQogCi0KLXN0YXRpYyBpcnFyZXR1cm5fdCBpcHcyMTAwX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkYXRhLAotCQkJCSAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitzdGF0aWMgaXJxcmV0dXJuX3QgaXB3MjEwMF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGF0YSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGRhdGE7CiAJdTMyIGludGEsIGludGFfbWFzazsKQEAgLTMyMjcsNyArMzE2Miw3IEBACiAJaWYgKCFkYXRhKQogCQlyZXR1cm4gSVJRX05PTkU7CiAKLSAJc3Bpbl9sb2NrKCZwcml2LT5sb3dfbG9jayk7CisJc3Bpbl9sb2NrKCZwcml2LT5sb3dfbG9jayk7CiAKIAkvKiBXZSBjaGVjayB0byBzZWUgaWYgd2Ugc2hvdWxkIGJlIGlnbm9yaW5nIGludGVycnVwdHMgYmVmb3JlCiAJICogd2UgdG91Y2ggdGhlIGhhcmR3YXJlLiAgRHVyaW5nIHVjb2RlIGxvYWQgaWYgd2UgdHJ5IGFuZCBoYW5kbGUKQEAgLTMyNjEsMTAgKzMxOTYsMTAgQEAKIAlpcHcyMTAwX2Rpc2FibGVfaW50ZXJydXB0cyhwcml2KTsKIAogCXRhc2tsZXRfc2NoZWR1bGUoJnByaXYtPmlycV90YXNrbGV0KTsKLSAJc3Bpbl91bmxvY2soJnByaXYtPmxvd19sb2NrKTsKKwlzcGluX3VubG9jaygmcHJpdi0+bG93X2xvY2spOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwotIG5vbmU6CisgICAgICBub25lOgogCXNwaW5fdW5sb2NrKCZwcml2LT5sb3dfbG9jayk7CiAJcmV0dXJuIElSUV9OT05FOwogfQpAQCAtMzI5NCwxMCArMzIyOSw4IEBACiAKIAlwYWNrZXQtPmluZm8uZF9zdHJ1Y3QudHhiID0gdHhiOwogCi0JSVBXX0RFQlVHX1RYKCJTZW5kaW5nIGZyYWdtZW50ICglZCBieXRlcyk6XG4iLAotCQkJIHR4Yi0+ZnJhZ21lbnRzWzBdLT5sZW4pOwotCXByaW50a19idWYoSVBXX0RMX1RYLCB0eGItPmZyYWdtZW50c1swXS0+ZGF0YSwKLQkJICAgdHhiLT5mcmFnbWVudHNbMF0tPmxlbik7CisJSVBXX0RFQlVHX1RYKCJTZW5kaW5nIGZyYWdtZW50ICglZCBieXRlcyk6XG4iLCB0eGItPmZyYWdtZW50c1swXS0+bGVuKTsKKwlwcmludGtfYnVmKElQV19ETF9UWCwgdHhiLT5mcmFnbWVudHNbMF0tPmRhdGEsIHR4Yi0+ZnJhZ21lbnRzWzBdLT5sZW4pOwogCiAJcGFja2V0LT5qaWZmeV9zdGFydCA9IGppZmZpZXM7CiAKQEAgLTMzMTIsMjIgKzMyNDUsMjMgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb3dfbG9jaywgZmxhZ3MpOwogCXJldHVybiAwOwogCi0gZmFpbF91bmxvY2s6CisgICAgICBmYWlsX3VubG9jazoKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG93X2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMTsKIH0KIAotCiBzdGF0aWMgaW50IGlwdzIxMDBfbXNnX2FsbG9jYXRlKHN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYpCiB7CiAJaW50IGksIGosIGVyciA9IC1FSU5WQUw7CiAJdm9pZCAqdjsKIAlkbWFfYWRkcl90IHA7CiAKLQlwcml2LT5tc2dfYnVmZmVycyA9IChzdHJ1Y3QgaXB3MjEwMF90eF9wYWNrZXQgKilrbWFsbG9jKAotCQlJUFdfQ09NTUFORF9QT09MX1NJWkUgKiBzaXplb2Yoc3RydWN0IGlwdzIxMDBfdHhfcGFja2V0KSwKLQkJR0ZQX0tFUk5FTCk7CisJcHJpdi0+bXNnX2J1ZmZlcnMgPQorCSAgICAoc3RydWN0IGlwdzIxMDBfdHhfcGFja2V0ICopa21hbGxvYyhJUFdfQ09NTUFORF9QT09MX1NJWkUgKgorCQkJCQkJc2l6ZW9mKHN0cnVjdAorCQkJCQkJICAgICAgIGlwdzIxMDBfdHhfcGFja2V0KSwKKwkJCQkJCUdGUF9LRVJORUwpOwogCWlmICghcHJpdi0+bXNnX2J1ZmZlcnMpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6ICVzOiBQQ0kgYWxsb2MgZmFpbGVkIGZvciBtc2cgIgogCQkgICAgICAgImJ1ZmZlcnMuXG4iLCBwcml2LT5uZXRfZGV2LT5uYW1lKTsKQEAgLTMzMzUsMTUgKzMyNjksMTIgQEAKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgSVBXX0NPTU1BTkRfUE9PTF9TSVpFOyBpKyspIHsKLQkJdiA9IHBjaV9hbGxvY19jb25zaXN0ZW50KAotCQkJcHJpdi0+cGNpX2RldiwKLQkJCXNpemVvZihzdHJ1Y3QgaXB3MjEwMF9jbWRfaGVhZGVyKSwKLQkJCSZwKTsKKwkJdiA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHByaXYtPnBjaV9kZXYsCisJCQkJCSBzaXplb2Yoc3RydWN0IGlwdzIxMDBfY21kX2hlYWRlciksICZwKTsKIAkJaWYgKCF2KSB7CiAJCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogIgogCQkJICAgICAgICIlczogUENJIGFsbG9jIGZhaWxlZCBmb3IgbXNnICIKLQkJCSAgICAgICAiYnVmZmVycy5cbiIsCi0JCQkgICAgICAgcHJpdi0+bmV0X2Rldi0+bmFtZSk7CisJCQkgICAgICAgImJ1ZmZlcnMuXG4iLCBwcml2LT5uZXRfZGV2LT5uYW1lKTsKIAkJCWVyciA9IC1FTk9NRU07CiAJCQlicmVhazsKIAkJfQpAQCAtMzM1Miw3ICszMjgzLDcgQEAKIAogCQlwcml2LT5tc2dfYnVmZmVyc1tpXS50eXBlID0gQ09NTUFORDsKIAkJcHJpdi0+bXNnX2J1ZmZlcnNbaV0uaW5mby5jX3N0cnVjdC5jbWQgPQotCQkJKHN0cnVjdCBpcHcyMTAwX2NtZF9oZWFkZXIqKXY7CisJCSAgICAoc3RydWN0IGlwdzIxMDBfY21kX2hlYWRlciAqKXY7CiAJCXByaXYtPm1zZ19idWZmZXJzW2ldLmluZm8uY19zdHJ1Y3QuY21kX3BoeXMgPSBwOwogCX0KIApAQCAtMzM2MCwxMSArMzI5MSwxMSBAQAogCQlyZXR1cm4gMDsKIAogCWZvciAoaiA9IDA7IGogPCBpOyBqKyspIHsKLQkJcGNpX2ZyZWVfY29uc2lzdGVudCgKLQkJCXByaXYtPnBjaV9kZXYsCi0JCQlzaXplb2Yoc3RydWN0IGlwdzIxMDBfY21kX2hlYWRlciksCi0JCQlwcml2LT5tc2dfYnVmZmVyc1tqXS5pbmZvLmNfc3RydWN0LmNtZCwKLQkJCXByaXYtPm1zZ19idWZmZXJzW2pdLmluZm8uY19zdHJ1Y3QuY21kX3BoeXMpOworCQlwY2lfZnJlZV9jb25zaXN0ZW50KHByaXYtPnBjaV9kZXYsCisJCQkJICAgIHNpemVvZihzdHJ1Y3QgaXB3MjEwMF9jbWRfaGVhZGVyKSwKKwkJCQkgICAgcHJpdi0+bXNnX2J1ZmZlcnNbal0uaW5mby5jX3N0cnVjdC5jbWQsCisJCQkJICAgIHByaXYtPm1zZ19idWZmZXJzW2pdLmluZm8uY19zdHJ1Y3QuCisJCQkJICAgIGNtZF9waHlzKTsKIAl9CiAKIAlrZnJlZShwcml2LT5tc2dfYnVmZmVycyk7CkBAIC0zMzk4LDcgKzMzMjksOCBAQAogCQlwY2lfZnJlZV9jb25zaXN0ZW50KHByaXYtPnBjaV9kZXYsCiAJCQkJICAgIHNpemVvZihzdHJ1Y3QgaXB3MjEwMF9jbWRfaGVhZGVyKSwKIAkJCQkgICAgcHJpdi0+bXNnX2J1ZmZlcnNbaV0uaW5mby5jX3N0cnVjdC5jbWQsCi0JCQkJICAgIHByaXYtPm1zZ19idWZmZXJzW2ldLmluZm8uY19zdHJ1Y3QuY21kX3BoeXMpOworCQkJCSAgICBwcml2LT5tc2dfYnVmZmVyc1tpXS5pbmZvLmNfc3RydWN0LgorCQkJCSAgICBjbWRfcGh5cyk7CiAJfQogCiAJa2ZyZWUocHJpdi0+bXNnX2J1ZmZlcnMpOwpAQCAtMzQyNCw2ICszMzU2LDcgQEAKIAogCXJldHVybiBvdXQgLSBidWY7CiB9CisKIHN0YXRpYyBERVZJQ0VfQVRUUihwY2ksIFNfSVJVR08sIHNob3dfcGNpLCBOVUxMKTsKIAogc3RhdGljIHNzaXplX3Qgc2hvd19jZmcoc3RydWN0IGRldmljZSAqZCwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCkBAIC0zNDMyLDIwOSArMzM2NSwyNjkgQEAKIAlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwID0gZC0+ZHJpdmVyX2RhdGE7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiMHglMDh4XG4iLCAoaW50KXAtPmNvbmZpZyk7CiB9CisKIHN0YXRpYyBERVZJQ0VfQVRUUihjZmcsIFNfSVJVR08sIHNob3dfY2ZnLCBOVUxMKTsKIAogc3RhdGljIHNzaXplX3Qgc2hvd19zdGF0dXMoc3RydWN0IGRldmljZSAqZCwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQljaGFyICpidWYpCisJCQkgICBjaGFyICpidWYpCiB7CiAJc3RydWN0IGlwdzIxMDBfcHJpdiAqcCA9IGQtPmRyaXZlcl9kYXRhOwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JTA4eFxuIiwgKGludClwLT5zdGF0dXMpOwogfQorCiBzdGF0aWMgREVWSUNFX0FUVFIoc3RhdHVzLCBTX0lSVUdPLCBzaG93X3N0YXR1cywgTlVMTCk7CiAKIHN0YXRpYyBzc2l6ZV90IHNob3dfY2FwYWJpbGl0eShzdHJ1Y3QgZGV2aWNlICpkLCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCQljaGFyICpidWYpCisJCQkgICAgICAgY2hhciAqYnVmKQogewogCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnAgPSBkLT5kcml2ZXJfZGF0YTsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIweCUwOHhcbiIsIChpbnQpcC0+Y2FwYWJpbGl0eSk7CiB9Ci1zdGF0aWMgREVWSUNFX0FUVFIoY2FwYWJpbGl0eSwgU19JUlVHTywgc2hvd19jYXBhYmlsaXR5LCBOVUxMKTsKIAorc3RhdGljIERFVklDRV9BVFRSKGNhcGFiaWxpdHksIFNfSVJVR08sIHNob3dfY2FwYWJpbGl0eSwgTlVMTCk7CiAKICNkZWZpbmUgSVBXMjEwMF9SRUcoeCkgeyBJUFdfICMjeCwgI3ggfQogc3RhdGljIGNvbnN0IHN0cnVjdCB7CiAJdTMyIGFkZHI7CiAJY29uc3QgY2hhciAqbmFtZTsKIH0gaHdfZGF0YVtdID0gewotCUlQVzIxMDBfUkVHKFJFR19HUF9DTlRSTCksCi0JSVBXMjEwMF9SRUcoUkVHX0dQSU8pLAotCUlQVzIxMDBfUkVHKFJFR19JTlRBKSwKLQlJUFcyMTAwX1JFRyhSRUdfSU5UQV9NQVNLKSwKLQlJUFcyMTAwX1JFRyhSRUdfUkVTRVRfUkVHKSwKLX07CitJUFcyMTAwX1JFRyhSRUdfR1BfQ05UUkwpLAorCSAgICBJUFcyMTAwX1JFRyhSRUdfR1BJTyksCisJICAgIElQVzIxMDBfUkVHKFJFR19JTlRBKSwKKwkgICAgSVBXMjEwMF9SRUcoUkVHX0lOVEFfTUFTSyksIElQVzIxMDBfUkVHKFJFR19SRVNFVF9SRUcpLH07CiAjZGVmaW5lIElQVzIxMDBfTklDKHgsIHMpIHsgeCwgI3gsIHMgfQogc3RhdGljIGNvbnN0IHN0cnVjdCB7CiAJdTMyIGFkZHI7CiAJY29uc3QgY2hhciAqbmFtZTsKIAlzaXplX3Qgc2l6ZTsKIH0gbmljX2RhdGFbXSA9IHsKLQlJUFcyMTAwX05JQyhJUFcyMTAwX0NPTlRST0xfUkVHLCAyKSwKLQlJUFcyMTAwX05JQygweDIxMDAxNCwgMSksCi0JSVBXMjEwMF9OSUMoMHgyMTAwMDAsIDEpLAotfTsKK0lQVzIxMDBfTklDKElQVzIxMDBfQ09OVFJPTF9SRUcsIDIpLAorCSAgICBJUFcyMTAwX05JQygweDIxMDAxNCwgMSksIElQVzIxMDBfTklDKDB4MjEwMDAwLCAxKSx9OwogI2RlZmluZSBJUFcyMTAwX09SRCh4LCBkKSB7IElQV19PUkRfICMjeCwgI3gsIGQgfQogc3RhdGljIGNvbnN0IHN0cnVjdCB7CiAJdTggaW5kZXg7CiAJY29uc3QgY2hhciAqbmFtZTsKIAljb25zdCBjaGFyICpkZXNjOwogfSBvcmRfZGF0YVtdID0gewotCUlQVzIxMDBfT1JEKFNUQVRfVFhfSE9TVF9SRVFVRVNUUywgInJlcXVlc3RlZCBIb3N0IFR4J3MgKE1TRFUpIiksCi0JSVBXMjEwMF9PUkQoU1RBVF9UWF9IT1NUX0NPTVBMRVRFLCAic3VjY2Vzc2Z1bCBIb3N0IFR4J3MgKE1TRFUpIiksCi0JSVBXMjEwMF9PUkQoU1RBVF9UWF9ESVJfREFUQSwJICAgInN1Y2Nlc3NmdWwgRGlyZWN0ZWQgVHgncyAoTVNEVSkiKSwKLQlJUFcyMTAwX09SRChTVEFUX1RYX0RJUl9EQVRBMSwJICAgInN1Y2Nlc3NmdWwgRGlyZWN0ZWQgVHgncyAoTVNEVSkgQCAxTUIiKSwKLQlJUFcyMTAwX09SRChTVEFUX1RYX0RJUl9EQVRBMiwJICAgInN1Y2Nlc3NmdWwgRGlyZWN0ZWQgVHgncyAoTVNEVSkgQCAyTUIiKSwKLQlJUFcyMTAwX09SRChTVEFUX1RYX0RJUl9EQVRBNV81LCAgICJzdWNjZXNzZnVsIERpcmVjdGVkIFR4J3MgKE1TRFUpIEAgNV81TUIiKSwKLQlJUFcyMTAwX09SRChTVEFUX1RYX0RJUl9EQVRBMTEsCSAgICJzdWNjZXNzZnVsIERpcmVjdGVkIFR4J3MgKE1TRFUpIEAgMTFNQiIpLAotCUlQVzIxMDBfT1JEKFNUQVRfVFhfTk9ESVJfREFUQTEsICAgInN1Y2Nlc3NmdWwgTm9uX0RpcmVjdGVkIFR4J3MgKE1TRFUpIEAgMU1CIiksCi0JSVBXMjEwMF9PUkQoU1RBVF9UWF9OT0RJUl9EQVRBMiwgICAic3VjY2Vzc2Z1bCBOb25fRGlyZWN0ZWQgVHgncyAoTVNEVSkgQCAyTUIiKSwKLQlJUFcyMTAwX09SRChTVEFUX1RYX05PRElSX0RBVEE1XzUsICJzdWNjZXNzZnVsIE5vbl9EaXJlY3RlZCBUeCdzIChNU0RVKSBAIDUuNU1CIiksCi0JSVBXMjEwMF9PUkQoU1RBVF9UWF9OT0RJUl9EQVRBMTEsICAic3VjY2Vzc2Z1bCBOb25fRGlyZWN0ZWQgVHgncyAoTVNEVSkgQCAxMU1CIiksCi0JSVBXMjEwMF9PUkQoU1RBVF9OVUxMX0RBVEEsCSAgICJzdWNjZXNzZnVsIE5VTEwgZGF0YSBUeCdzIiksCi0JSVBXMjEwMF9PUkQoU1RBVF9UWF9SVFMsCSAgICJzdWNjZXNzZnVsIFR4IFJUUyIpLAotCUlQVzIxMDBfT1JEKFNUQVRfVFhfQ1RTLAkgICAic3VjY2Vzc2Z1bCBUeCBDVFMiKSwKLQlJUFcyMTAwX09SRChTVEFUX1RYX0FDSywJICAgInN1Y2Nlc3NmdWwgVHggQUNLIiksCi0JSVBXMjEwMF9PUkQoU1RBVF9UWF9BU1NOLAkgICAic3VjY2Vzc2Z1bCBBc3NvY2lhdGlvbiBUeCdzIiksCi0JSVBXMjEwMF9PUkQoU1RBVF9UWF9BU1NOX1JFU1AsCSAgICJzdWNjZXNzZnVsIEFzc29jaWF0aW9uIHJlc3BvbnNlIFR4J3MiKSwKLQlJUFcyMTAwX09SRChTVEFUX1RYX1JFQVNTTiwJICAgInN1Y2Nlc3NmdWwgUmVhc3NvY2lhdGlvbiBUeCdzIiksCi0JSVBXMjEwMF9PUkQoU1RBVF9UWF9SRUFTU05fUkVTUCwgICAic3VjY2Vzc2Z1bCBSZWFzc29jaWF0aW9uIHJlc3BvbnNlIFR4J3MiKSwKLQlJUFcyMTAwX09SRChTVEFUX1RYX1BST0JFLAkgICAicHJvYmVzIHN1Y2Nlc3NmdWxseSB0cmFuc21pdHRlZCIpLAotCUlQVzIxMDBfT1JEKFNUQVRfVFhfUFJPQkVfUkVTUCwJICAgInByb2JlIHJlc3BvbnNlcyBzdWNjZXNzZnVsbHkgdHJhbnNtaXR0ZWQiKSwKLQlJUFcyMTAwX09SRChTVEFUX1RYX0JFQUNPTiwJICAgInR4IGJlYWNvbiIpLAotCUlQVzIxMDBfT1JEKFNUQVRfVFhfQVRJTSwJICAgIlR4IEFUSU0iKSwKLQlJUFcyMTAwX09SRChTVEFUX1RYX0RJU0FTU04sCSAgICJzdWNjZXNzZnVsIERpc2Fzc29jaWF0aW9uIFRYIiksCi0JSVBXMjEwMF9PUkQoU1RBVF9UWF9BVVRILAkgICAic3VjY2Vzc2Z1bCBBdXRoZW50aWNhdGlvbiBUeCIpLAotCUlQVzIxMDBfT1JEKFNUQVRfVFhfREVBVVRILAkgICAic3VjY2Vzc2Z1bCBEZWF1dGhlbnRpY2F0aW9uIFRYIiksCi0JSVBXMjEwMF9PUkQoU1RBVF9UWF9UT1RBTF9CWVRFUywgICAiVG90YWwgc3VjY2Vzc2Z1bCBUeCBkYXRhIGJ5dGVzIiksCi0JSVBXMjEwMF9PUkQoU1RBVF9UWF9SRVRSSUVTLCAgICAgICAiVHggcmV0cmllcyIpLAotCUlQVzIxMDBfT1JEKFNUQVRfVFhfUkVUUlkxLCAgICAgICAgIlR4IHJldHJpZXMgYXQgMU1CUFMiKSwKLQlJUFcyMTAwX09SRChTVEFUX1RYX1JFVFJZMiwgICAgICAgICJUeCByZXRyaWVzIGF0IDJNQlBTIiksCi0JSVBXMjEwMF9PUkQoU1RBVF9UWF9SRVRSWTVfNSwJICAgIlR4IHJldHJpZXMgYXQgNS41TUJQUyIpLAotCUlQVzIxMDBfT1JEKFNUQVRfVFhfUkVUUlkxMSwJICAgIlR4IHJldHJpZXMgYXQgMTFNQlBTIiksCi0JSVBXMjEwMF9PUkQoU1RBVF9UWF9GQUlMVVJFUywJICAgIlR4IEZhaWx1cmVzIiksCi0JSVBXMjEwMF9PUkQoU1RBVF9UWF9NQVhfVFJJRVNfSU5fSE9QLCJ0aW1lcyBtYXggdHJpZXMgaW4gYSBob3AgZmFpbGVkIiksCi0JSVBXMjEwMF9PUkQoU1RBVF9UWF9ESVNBU1NOX0ZBSUwsCSJ0aW1lcyBkaXNhc3NvY2lhdGlvbiBmYWlsZWQiKSwKLQlJUFcyMTAwX09SRChTVEFUX1RYX0VSUl9DVFMsICAgICAgICAgIm1pc3NlZC9iYWQgQ1RTIGZyYW1lcyIpLAotCUlQVzIxMDBfT1JEKFNUQVRfVFhfRVJSX0FDSywJInR4IGVyciBkdWUgdG8gYWNrcyIpLAotCUlQVzIxMDBfT1JEKFNUQVRfUlhfSE9TVCwJInBhY2tldHMgcGFzc2VkIHRvIGhvc3QiKSwKLQlJUFcyMTAwX09SRChTVEFUX1JYX0RJUl9EQVRBLAkiZGlyZWN0ZWQgcGFja2V0cyIpLAotCUlQVzIxMDBfT1JEKFNUQVRfUlhfRElSX0RBVEExLAkiZGlyZWN0ZWQgcGFja2V0cyBhdCAxTUIiKSwKLQlJUFcyMTAwX09SRChTVEFUX1JYX0RJUl9EQVRBMiwJImRpcmVjdGVkIHBhY2tldHMgYXQgMk1CIiksCi0JSVBXMjEwMF9PUkQoU1RBVF9SWF9ESVJfREFUQTVfNSwJImRpcmVjdGVkIHBhY2tldHMgYXQgNS41TUIiKSwKLQlJUFcyMTAwX09SRChTVEFUX1JYX0RJUl9EQVRBMTEsCSJkaXJlY3RlZCBwYWNrZXRzIGF0IDExTUIiKSwKLQlJUFcyMTAwX09SRChTVEFUX1JYX05PRElSX0RBVEEsIm5vbmRpcmVjdGVkIHBhY2tldHMiKSwKLQlJUFcyMTAwX09SRChTVEFUX1JYX05PRElSX0RBVEExLAkibm9uZGlyZWN0ZWQgcGFja2V0cyBhdCAxTUIiKSwKLQlJUFcyMTAwX09SRChTVEFUX1JYX05PRElSX0RBVEEyLAkibm9uZGlyZWN0ZWQgcGFja2V0cyBhdCAyTUIiKSwKLQlJUFcyMTAwX09SRChTVEFUX1JYX05PRElSX0RBVEE1XzUsCSJub25kaXJlY3RlZCBwYWNrZXRzIGF0IDUuNU1CIiksCi0JSVBXMjEwMF9PUkQoU1RBVF9SWF9OT0RJUl9EQVRBMTEsCSJub25kaXJlY3RlZCBwYWNrZXRzIGF0IDExTUIiKSwKLQlJUFcyMTAwX09SRChTVEFUX1JYX05VTExfREFUQSwJIm51bGwgZGF0YSByeCdzIiksCi0JSVBXMjEwMF9PUkQoU1RBVF9SWF9SVFMsCSJSeCBSVFMiKSwKLQlJUFcyMTAwX09SRChTVEFUX1JYX0NUUywJIlJ4IENUUyIpLAotCUlQVzIxMDBfT1JEKFNUQVRfUlhfQUNLLAkiUnggQUNLIiksCi0JSVBXMjEwMF9PUkQoU1RBVF9SWF9DRkVORCwJIlJ4IENGIEVuZCIpLAotCUlQVzIxMDBfT1JEKFNUQVRfUlhfQ0ZFTkRfQUNLLAkiUnggQ0YgRW5kICsgQ0YgQWNrIiksCi0JSVBXMjEwMF9PUkQoU1RBVF9SWF9BU1NOLAkiQXNzb2NpYXRpb24gUngncyIpLAotCUlQVzIxMDBfT1JEKFNUQVRfUlhfQVNTTl9SRVNQLAkiQXNzb2NpYXRpb24gcmVzcG9uc2UgUngncyIpLAotCUlQVzIxMDBfT1JEKFNUQVRfUlhfUkVBU1NOLAkiUmVhc3NvY2lhdGlvbiBSeCdzIiksCi0JSVBXMjEwMF9PUkQoU1RBVF9SWF9SRUFTU05fUkVTUCwJIlJlYXNzb2NpYXRpb24gcmVzcG9uc2UgUngncyIpLAotCUlQVzIxMDBfT1JEKFNUQVRfUlhfUFJPQkUsCSJwcm9iZSBSeCdzIiksCi0JSVBXMjEwMF9PUkQoU1RBVF9SWF9QUk9CRV9SRVNQLAkicHJvYmUgcmVzcG9uc2UgUngncyIpLAotCUlQVzIxMDBfT1JEKFNUQVRfUlhfQkVBQ09OLAkiUnggYmVhY29uIiksCi0JSVBXMjEwMF9PUkQoU1RBVF9SWF9BVElNLAkiUnggQVRJTSIpLAotCUlQVzIxMDBfT1JEKFNUQVRfUlhfRElTQVNTTiwJImRpc2Fzc29jaWF0aW9uIFJ4IiksCi0JSVBXMjEwMF9PUkQoU1RBVF9SWF9BVVRILAkiYXV0aGVudGljYXRpb24gUngiKSwKLQlJUFcyMTAwX09SRChTVEFUX1JYX0RFQVVUSCwJImRlYXV0aGVudGljYXRpb24gUngiKSwKLQlJUFcyMTAwX09SRChTVEFUX1JYX1RPVEFMX0JZVEVTLCJUb3RhbCByeCBkYXRhIGJ5dGVzIHJlY2VpdmVkIiksCi0JSVBXMjEwMF9PUkQoU1RBVF9SWF9FUlJfQ1JDLAkgInBhY2tldHMgd2l0aCBSeCBDUkMgZXJyb3IiKSwKLQlJUFcyMTAwX09SRChTVEFUX1JYX0VSUl9DUkMxLAkgIlJ4IENSQyBlcnJvcnMgYXQgMU1CIiksCi0JSVBXMjEwMF9PUkQoU1RBVF9SWF9FUlJfQ1JDMiwJICJSeCBDUkMgZXJyb3JzIGF0IDJNQiIpLAotCUlQVzIxMDBfT1JEKFNUQVRfUlhfRVJSX0NSQzVfNSwJICJSeCBDUkMgZXJyb3JzIGF0IDUuNU1CIiksCi0JSVBXMjEwMF9PUkQoU1RBVF9SWF9FUlJfQ1JDMTEsCSAiUnggQ1JDIGVycm9ycyBhdCAxMU1CIiksCi0JSVBXMjEwMF9PUkQoU1RBVF9SWF9EVVBMSUNBVEUxLCAiZHVwbGljYXRlIHJ4IHBhY2tldHMgYXQgMU1CIiksCi0JSVBXMjEwMF9PUkQoU1RBVF9SWF9EVVBMSUNBVEUyLAkgImR1cGxpY2F0ZSByeCBwYWNrZXRzIGF0IDJNQiIpLAotCUlQVzIxMDBfT1JEKFNUQVRfUlhfRFVQTElDQVRFNV81LAkgImR1cGxpY2F0ZSByeCBwYWNrZXRzIGF0IDUuNU1CIiksCi0JSVBXMjEwMF9PUkQoU1RBVF9SWF9EVVBMSUNBVEUxMSwJICJkdXBsaWNhdGUgcnggcGFja2V0cyBhdCAxMU1CIiksCi0JSVBXMjEwMF9PUkQoU1RBVF9SWF9EVVBMSUNBVEUsICJkdXBsaWNhdGUgcnggcGFja2V0cyIpLAotCUlQVzIxMDBfT1JEKFBFUlNfREJfTE9DSywJImxvY2tpbmcgZncgcGVybWFuZW50ICBkYiIpLAotCUlQVzIxMDBfT1JEKFBFUlNfREJfU0laRSwJInNpemUgb2YgZncgcGVybWFuZW50ICBkYiIpLAotCUlQVzIxMDBfT1JEKFBFUlNfREJfQUREUiwJImFkZHJlc3Mgb2YgZncgcGVybWFuZW50ICBkYiIpLAotCUlQVzIxMDBfT1JEKFNUQVRfUlhfSU5WQUxJRF9QUk9UT0NPTCwJInJ4IGZyYW1lcyB3aXRoIGludmFsaWQgcHJvdG9jb2wiKSwKLQlJUFcyMTAwX09SRChTWVNfQk9PVF9USU1FLAkiQm9vdCB0aW1lIiksCi0JSVBXMjEwMF9PUkQoU1RBVF9SWF9OT19CVUZGRVIsCSJyeCBmcmFtZXMgcmVqZWN0ZWQgZHVlIHRvIG5vIGJ1ZmZlciIpLAotCUlQVzIxMDBfT1JEKFNUQVRfUlhfTUlTU0lOR19GUkFHLAkicnggZnJhbWVzIGRyb3BwZWQgZHVlIHRvIG1pc3NpbmcgZnJhZ21lbnQiKSwKLQlJUFcyMTAwX09SRChTVEFUX1JYX09SUEhBTl9GUkFHLAkicnggZnJhbWVzIGRyb3BwZWQgZHVlIHRvIG5vbi1zZXF1ZW50aWFsIGZyYWdtZW50IiksCi0JSVBXMjEwMF9PUkQoU1RBVF9SWF9PUlBIQU5fRlJBTUUsCSJyeCBmcmFtZXMgZHJvcHBlZCBkdWUgdG8gdW5tYXRjaGVkIDFzdCBmcmFtZSIpLAotCUlQVzIxMDBfT1JEKFNUQVRfUlhfRlJBR19BR0VPVVQsCSJyeCBmcmFtZXMgZHJvcHBlZCBkdWUgdG8gdW5jb21wbGV0ZWQgZnJhbWUiKSwKLQlJUFcyMTAwX09SRChTVEFUX1JYX0lDVl9FUlJPUlMsCSJJQ1YgZXJyb3JzIGR1cmluZyBkZWNyeXB0aW9uIiksCi0JSVBXMjEwMF9PUkQoU1RBVF9QU1BfU1VTUEVOU0lPTiwidGltZXMgYWRhcHRlciBzdXNwZW5kZWQiKSwKLQlJUFcyMTAwX09SRChTVEFUX1BTUF9CQ05fVElNRU9VVCwJImJlYWNvbiB0aW1lb3V0IiksCi0JSVBXMjEwMF9PUkQoU1RBVF9QU1BfUE9MTF9USU1FT1VULAkicG9sbCByZXNwb25zZSB0aW1lb3V0cyIpLAotCUlQVzIxMDBfT1JEKFNUQVRfUFNQX05PTkRJUl9USU1FT1VULCAidGltZW91dHMgd2FpdGluZyBmb3IgbGFzdCB7YnJvYWQsbXVsdGl9Y2FzdCBwa3QiKSwKLQlJUFcyMTAwX09SRChTVEFUX1BTUF9SWF9EVElNUywJIlBTUCBEVElNcyByZWNlaXZlZCIpLAotCUlQVzIxMDBfT1JEKFNUQVRfUFNQX1JYX1RJTVMsCSJQU1AgVElNcyByZWNlaXZlZCIpLAotCUlQVzIxMDBfT1JEKFNUQVRfUFNQX1NUQVRJT05fSUQsIlBTUCBTdGF0aW9uIElEIiksCi0JSVBXMjEwMF9PUkQoTEFTVF9BU1NOX1RJTUUsCSJSVEMgdGltZSBvZiBsYXN0IGFzc29jaWF0aW9uIiksCi0JSVBXMjEwMF9PUkQoU1RBVF9QRVJDRU5UX01JU1NFRF9CQ05TLCJjdXJyZW50IGNhbGN1bGF0aW9uIG9mICUgbWlzc2VkIGJlYWNvbnMiKSwKLQlJUFcyMTAwX09SRChTVEFUX1BFUkNFTlRfUkVUUklFUywiY3VycmVudCBjYWxjdWxhdGlvbiBvZiAlIG1pc3NlZCB0eCByZXRyaWVzIiksCi0JSVBXMjEwMF9PUkQoQVNTT0NJQVRFRF9BUF9QVFIsCSIwIGlmIG5vdCBhc3NvY2lhdGVkLCBlbHNlIHBvaW50ZXIgdG8gQVAgdGFibGUgZW50cnkiKSwKLQlJUFcyMTAwX09SRChBVkFJTEFCTEVfQVBfQ05ULAkiQVAncyBkZWNzcmliZWQgaW4gdGhlIEFQIHRhYmxlIiksCi0JSVBXMjEwMF9PUkQoQVBfTElTVF9QVFIsCSJQdHIgdG8gbGlzdCBvZiBhdmFpbGFibGUgQVBzIiksCi0JSVBXMjEwMF9PUkQoU1RBVF9BUF9BU1NOUywJImFzc29jaWF0aW9ucyIpLAotCUlQVzIxMDBfT1JEKFNUQVRfQVNTTl9GQUlMLAkiYXNzb2NpYXRpb24gZmFpbHVyZXMiKSwKLQlJUFcyMTAwX09SRChTVEFUX0FTU05fUkVTUF9GQUlMLCJmYWlsdXJlcyBkdWUgdG8gcmVzcG9uc2UgZmFpbCIpLAotCUlQVzIxMDBfT1JEKFNUQVRfRlVMTF9TQ0FOUywJImZ1bGwgc2NhbnMiKSwKLQlJUFcyMTAwX09SRChDQVJEX0RJU0FCTEVELAkiQ2FyZCBEaXNhYmxlZCIpLAotCUlQVzIxMDBfT1JEKFNUQVRfUk9BTV9JTkhJQklULAkidGltZXMgcm9hbWluZyB3YXMgaW5oaWJpdGVkIGR1ZSB0byBhY3Rpdml0eSIpLAotCUlQVzIxMDBfT1JEKFJTU0lfQVRfQVNTTiwJIlJTU0kgb2YgYXNzb2NpYXRlZCBBUCBhdCB0aW1lIG9mIGFzc29jaWF0aW9uIiksCi0JSVBXMjEwMF9PUkQoU1RBVF9BU1NOX0NBVVNFMSwJInJlYXNzb2NpYXRpb246IG5vIHByb2JlIHJlc3BvbnNlIG9yIFRYIG9uIGhvcCIpLAotCUlQVzIxMDBfT1JEKFNUQVRfQVNTTl9DQVVTRTIsCSJyZWFzc29jaWF0aW9uOiBwb29yIHR4L3J4IHF1YWxpdHkiKSwKLQlJUFcyMTAwX09SRChTVEFUX0FTU05fQ0FVU0UzLAkicmVhc3NvY2lhdGlvbjogdHgvcnggcXVhbGl0eSAoZXhjZXNzaXZlIEFQIGxvYWQiKSwKLQlJUFcyMTAwX09SRChTVEFUX0FTU05fQ0FVU0U0LAkicmVhc3NvY2lhdGlvbjogQVAgUlNTSSBsZXZlbCIpLAotCUlQVzIxMDBfT1JEKFNUQVRfQVNTTl9DQVVTRTUsCSJyZWFzc29jaWF0aW9ucyBkdWUgdG8gbG9hZCBsZXZlbGluZyIpLAotCUlQVzIxMDBfT1JEKFNUQVRfQVVUSF9GQUlMLAkidGltZXMgYXV0aGVudGljYXRpb24gZmFpbGVkIiksCi0JSVBXMjEwMF9PUkQoU1RBVF9BVVRIX1JFU1BfRkFJTCwidGltZXMgYXV0aGVudGljYXRpb24gcmVzcG9uc2UgZmFpbGVkIiksCi0JSVBXMjEwMF9PUkQoU1RBVElPTl9UQUJMRV9DTlQsCSJlbnRyaWVzIGluIGFzc29jaWF0aW9uIHRhYmxlIiksCi0JSVBXMjEwMF9PUkQoUlNTSV9BVkdfQ1VSUiwJIkN1cnJlbnQgYXZnIFJTU0kiKSwKLQlJUFcyMTAwX09SRChQT1dFUl9NR01UX01PREUsCSJQb3dlciBtb2RlIC0gMD1DQU0sIDE9UFNQIiksCi0JSVBXMjEwMF9PUkQoQ09VTlRSWV9DT0RFLAkiSUVFRSBjb3VudHJ5IGNvZGUgYXMgcmVjdidkIGZyb20gYmVhY29uIiksCi0JSVBXMjEwMF9PUkQoQ09VTlRSWV9DSEFOTkVMUywJImNoYW5uZWxzIHN1cG9ydGVkIGJ5IGNvdW50cnkiKSwKLQlJUFcyMTAwX09SRChSRVNFVF9DTlQsCSJhZGFwdGVyIHJlc2V0cyAod2FybSkiKSwKLQlJUFcyMTAwX09SRChCRUFDT05fSU5URVJWQUwsCSJCZWFjb24gaW50ZXJ2YWwiKSwKLQlJUFcyMTAwX09SRChBTlRFTk5BX0RJVkVSU0lUWSwJIlRSVUUgaWYgYW50ZW5uYSBkaXZlcnNpdHkgaXMgZGlzYWJsZWQiKSwKLQlJUFcyMTAwX09SRChEVElNX1BFUklPRCwJImJlYWNvbiBpbnRlcnZhbHMgYmV0d2VlbiBEVElNcyIpLAotCUlQVzIxMDBfT1JEKE9VUl9GUkVRLAkiY3VycmVudCByYWRpbyBmcmVxIGxvd2VyIGRpZ2l0cyAtIGNoYW5uZWwgSUQiKSwKLQlJUFcyMTAwX09SRChSVENfVElNRSwJImN1cnJlbnQgUlRDIHRpbWUiKSwKLQlJUFcyMTAwX09SRChQT1JUX1RZUEUsCSJvcGVyYXRpbmcgbW9kZSIpLAotCUlQVzIxMDBfT1JEKENVUlJFTlRfVFhfUkFURSwJImN1cnJlbnQgdHggcmF0ZSIpLAotCUlQVzIxMDBfT1JEKFNVUFBPUlRFRF9SQVRFUywJInN1cHBvcnRlZCB0eCByYXRlcyIpLAotCUlQVzIxMDBfT1JEKEFUSU1fV0lORE9XLAkiY3VycmVudCBBVElNIFdpbmRvdyIpLAotCUlQVzIxMDBfT1JEKEJBU0lDX1JBVEVTLAkiYmFzaWMgdHggcmF0ZXMiKSwKLQlJUFcyMTAwX09SRChOSUNfSElHSEVTVF9SQVRFLAkiTklDIGhpZ2hlc3QgdHggcmF0ZSIpLAotCUlQVzIxMDBfT1JEKEFQX0hJR0hFU1RfUkFURSwJIkFQIGhpZ2hlc3QgdHggcmF0ZSIpLAotCUlQVzIxMDBfT1JEKENBUEFCSUxJVElFUywJIk1hbmFnZW1lbnQgZnJhbWUgY2FwYWJpbGl0eSBmaWVsZCIpLAotCUlQVzIxMDBfT1JEKEFVVEhfVFlQRSwJIlR5cGUgb2YgYXV0aGVudGljYXRpb24iKSwKLQlJUFcyMTAwX09SRChSQURJT19UWVBFLAkiQWRhcHRlciBjYXJkIHBsYXRmb3JtIHR5cGUiKSwKLQlJUFcyMTAwX09SRChSVFNfVEhSRVNIT0xELAkiTWluIHBhY2tldCBsZW5ndGggZm9yIFJUUyBoYW5kc2hha2luZyIpLAotCUlQVzIxMDBfT1JEKElOVF9NT0RFLAkiSW50ZXJuYXRpb25hbCBtb2RlIiksCi0JSVBXMjEwMF9PUkQoRlJBR01FTlRBVElPTl9USFJFU0hPTEQsCSJwcm90b2NvbCBmcmFnIHRocmVzaG9sZCIpLAotCUlQVzIxMDBfT1JEKEVFUFJPTV9TUkFNX0RCX0JMT0NLX1NUQVJUX0FERFJFU1MsCSJFRVBST00gb2Zmc2V0IGluIFNSQU0iKSwKLQlJUFcyMTAwX09SRChFRVBST01fU1JBTV9EQl9CTE9DS19TSVpFLAkiRUVQUk9NIHNpemUgaW4gU1JBTSIpLAotCUlQVzIxMDBfT1JEKEVFUFJPTV9TS1VfQ0FQQUJJTElUWSwJIkVFUFJPTSBTS1UgQ2FwYWJpbGl0eSIpLAotCUlQVzIxMDBfT1JEKEVFUFJPTV9JQlNTXzExQl9DSEFOTkVMUywJIkVFUFJPTSBJQlNTIDExYiBjaGFubmVsIHNldCIpLAotCUlQVzIxMDBfT1JEKE1BQ19WRVJTSU9OLAkiTUFDIFZlcnNpb24iKSwKLQlJUFcyMTAwX09SRChNQUNfUkVWSVNJT04sCSJNQUMgUmV2aXNpb24iKSwKLQlJUFcyMTAwX09SRChSQURJT19WRVJTSU9OLAkiUmFkaW8gVmVyc2lvbiIpLAotCUlQVzIxMDBfT1JEKE5JQ19NQU5GX0RBVEVfVElNRSwJIk1BTkYgRGF0ZS9UaW1lIFNUQU1QIiksCi0JSVBXMjEwMF9PUkQoVUNPREVfVkVSU0lPTiwJIlVjb2RlIFZlcnNpb24iKSwKLX07Ci0KK0lQVzIxMDBfT1JEKFNUQVRfVFhfSE9TVF9SRVFVRVNUUywgInJlcXVlc3RlZCBIb3N0IFR4J3MgKE1TRFUpIiksCisJICAgIElQVzIxMDBfT1JEKFNUQVRfVFhfSE9TVF9DT01QTEVURSwKKwkJCQkic3VjY2Vzc2Z1bCBIb3N0IFR4J3MgKE1TRFUpIiksCisJICAgIElQVzIxMDBfT1JEKFNUQVRfVFhfRElSX0RBVEEsCisJCQkJInN1Y2Nlc3NmdWwgRGlyZWN0ZWQgVHgncyAoTVNEVSkiKSwKKwkgICAgSVBXMjEwMF9PUkQoU1RBVF9UWF9ESVJfREFUQTEsCisJCQkJInN1Y2Nlc3NmdWwgRGlyZWN0ZWQgVHgncyAoTVNEVSkgQCAxTUIiKSwKKwkgICAgSVBXMjEwMF9PUkQoU1RBVF9UWF9ESVJfREFUQTIsCisJCQkJInN1Y2Nlc3NmdWwgRGlyZWN0ZWQgVHgncyAoTVNEVSkgQCAyTUIiKSwKKwkgICAgSVBXMjEwMF9PUkQoU1RBVF9UWF9ESVJfREFUQTVfNSwKKwkJCQkic3VjY2Vzc2Z1bCBEaXJlY3RlZCBUeCdzIChNU0RVKSBAIDVfNU1CIiksCisJICAgIElQVzIxMDBfT1JEKFNUQVRfVFhfRElSX0RBVEExMSwKKwkJCQkic3VjY2Vzc2Z1bCBEaXJlY3RlZCBUeCdzIChNU0RVKSBAIDExTUIiKSwKKwkgICAgSVBXMjEwMF9PUkQoU1RBVF9UWF9OT0RJUl9EQVRBMSwKKwkJCQkic3VjY2Vzc2Z1bCBOb25fRGlyZWN0ZWQgVHgncyAoTVNEVSkgQCAxTUIiKSwKKwkgICAgSVBXMjEwMF9PUkQoU1RBVF9UWF9OT0RJUl9EQVRBMiwKKwkJCQkic3VjY2Vzc2Z1bCBOb25fRGlyZWN0ZWQgVHgncyAoTVNEVSkgQCAyTUIiKSwKKwkgICAgSVBXMjEwMF9PUkQoU1RBVF9UWF9OT0RJUl9EQVRBNV81LAorCQkJCSJzdWNjZXNzZnVsIE5vbl9EaXJlY3RlZCBUeCdzIChNU0RVKSBAIDUuNU1CIiksCisJICAgIElQVzIxMDBfT1JEKFNUQVRfVFhfTk9ESVJfREFUQTExLAorCQkJCSJzdWNjZXNzZnVsIE5vbl9EaXJlY3RlZCBUeCdzIChNU0RVKSBAIDExTUIiKSwKKwkgICAgSVBXMjEwMF9PUkQoU1RBVF9OVUxMX0RBVEEsICJzdWNjZXNzZnVsIE5VTEwgZGF0YSBUeCdzIiksCisJICAgIElQVzIxMDBfT1JEKFNUQVRfVFhfUlRTLCAic3VjY2Vzc2Z1bCBUeCBSVFMiKSwKKwkgICAgSVBXMjEwMF9PUkQoU1RBVF9UWF9DVFMsICJzdWNjZXNzZnVsIFR4IENUUyIpLAorCSAgICBJUFcyMTAwX09SRChTVEFUX1RYX0FDSywgInN1Y2Nlc3NmdWwgVHggQUNLIiksCisJICAgIElQVzIxMDBfT1JEKFNUQVRfVFhfQVNTTiwgInN1Y2Nlc3NmdWwgQXNzb2NpYXRpb24gVHgncyIpLAorCSAgICBJUFcyMTAwX09SRChTVEFUX1RYX0FTU05fUkVTUCwKKwkJCQkic3VjY2Vzc2Z1bCBBc3NvY2lhdGlvbiByZXNwb25zZSBUeCdzIiksCisJICAgIElQVzIxMDBfT1JEKFNUQVRfVFhfUkVBU1NOLAorCQkJCSJzdWNjZXNzZnVsIFJlYXNzb2NpYXRpb24gVHgncyIpLAorCSAgICBJUFcyMTAwX09SRChTVEFUX1RYX1JFQVNTTl9SRVNQLAorCQkJCSJzdWNjZXNzZnVsIFJlYXNzb2NpYXRpb24gcmVzcG9uc2UgVHgncyIpLAorCSAgICBJUFcyMTAwX09SRChTVEFUX1RYX1BST0JFLAorCQkJCSJwcm9iZXMgc3VjY2Vzc2Z1bGx5IHRyYW5zbWl0dGVkIiksCisJICAgIElQVzIxMDBfT1JEKFNUQVRfVFhfUFJPQkVfUkVTUCwKKwkJCQkicHJvYmUgcmVzcG9uc2VzIHN1Y2Nlc3NmdWxseSB0cmFuc21pdHRlZCIpLAorCSAgICBJUFcyMTAwX09SRChTVEFUX1RYX0JFQUNPTiwgInR4IGJlYWNvbiIpLAorCSAgICBJUFcyMTAwX09SRChTVEFUX1RYX0FUSU0sICJUeCBBVElNIiksCisJICAgIElQVzIxMDBfT1JEKFNUQVRfVFhfRElTQVNTTiwKKwkJCQkic3VjY2Vzc2Z1bCBEaXNhc3NvY2lhdGlvbiBUWCIpLAorCSAgICBJUFcyMTAwX09SRChTVEFUX1RYX0FVVEgsICJzdWNjZXNzZnVsIEF1dGhlbnRpY2F0aW9uIFR4IiksCisJICAgIElQVzIxMDBfT1JEKFNUQVRfVFhfREVBVVRILAorCQkJCSJzdWNjZXNzZnVsIERlYXV0aGVudGljYXRpb24gVFgiKSwKKwkgICAgSVBXMjEwMF9PUkQoU1RBVF9UWF9UT1RBTF9CWVRFUywKKwkJCQkiVG90YWwgc3VjY2Vzc2Z1bCBUeCBkYXRhIGJ5dGVzIiksCisJICAgIElQVzIxMDBfT1JEKFNUQVRfVFhfUkVUUklFUywgIlR4IHJldHJpZXMiKSwKKwkgICAgSVBXMjEwMF9PUkQoU1RBVF9UWF9SRVRSWTEsICJUeCByZXRyaWVzIGF0IDFNQlBTIiksCisJICAgIElQVzIxMDBfT1JEKFNUQVRfVFhfUkVUUlkyLCAiVHggcmV0cmllcyBhdCAyTUJQUyIpLAorCSAgICBJUFcyMTAwX09SRChTVEFUX1RYX1JFVFJZNV81LCAiVHggcmV0cmllcyBhdCA1LjVNQlBTIiksCisJICAgIElQVzIxMDBfT1JEKFNUQVRfVFhfUkVUUlkxMSwgIlR4IHJldHJpZXMgYXQgMTFNQlBTIiksCisJICAgIElQVzIxMDBfT1JEKFNUQVRfVFhfRkFJTFVSRVMsICJUeCBGYWlsdXJlcyIpLAorCSAgICBJUFcyMTAwX09SRChTVEFUX1RYX01BWF9UUklFU19JTl9IT1AsCisJCQkJInRpbWVzIG1heCB0cmllcyBpbiBhIGhvcCBmYWlsZWQiKSwKKwkgICAgSVBXMjEwMF9PUkQoU1RBVF9UWF9ESVNBU1NOX0ZBSUwsCisJCQkJInRpbWVzIGRpc2Fzc29jaWF0aW9uIGZhaWxlZCIpLAorCSAgICBJUFcyMTAwX09SRChTVEFUX1RYX0VSUl9DVFMsICJtaXNzZWQvYmFkIENUUyBmcmFtZXMiKSwKKwkgICAgSVBXMjEwMF9PUkQoU1RBVF9UWF9FUlJfQUNLLCAidHggZXJyIGR1ZSB0byBhY2tzIiksCisJICAgIElQVzIxMDBfT1JEKFNUQVRfUlhfSE9TVCwgInBhY2tldHMgcGFzc2VkIHRvIGhvc3QiKSwKKwkgICAgSVBXMjEwMF9PUkQoU1RBVF9SWF9ESVJfREFUQSwgImRpcmVjdGVkIHBhY2tldHMiKSwKKwkgICAgSVBXMjEwMF9PUkQoU1RBVF9SWF9ESVJfREFUQTEsICJkaXJlY3RlZCBwYWNrZXRzIGF0IDFNQiIpLAorCSAgICBJUFcyMTAwX09SRChTVEFUX1JYX0RJUl9EQVRBMiwgImRpcmVjdGVkIHBhY2tldHMgYXQgMk1CIiksCisJICAgIElQVzIxMDBfT1JEKFNUQVRfUlhfRElSX0RBVEE1XzUsCisJCQkJImRpcmVjdGVkIHBhY2tldHMgYXQgNS41TUIiKSwKKwkgICAgSVBXMjEwMF9PUkQoU1RBVF9SWF9ESVJfREFUQTExLCAiZGlyZWN0ZWQgcGFja2V0cyBhdCAxMU1CIiksCisJICAgIElQVzIxMDBfT1JEKFNUQVRfUlhfTk9ESVJfREFUQSwgIm5vbmRpcmVjdGVkIHBhY2tldHMiKSwKKwkgICAgSVBXMjEwMF9PUkQoU1RBVF9SWF9OT0RJUl9EQVRBMSwKKwkJCQkibm9uZGlyZWN0ZWQgcGFja2V0cyBhdCAxTUIiKSwKKwkgICAgSVBXMjEwMF9PUkQoU1RBVF9SWF9OT0RJUl9EQVRBMiwKKwkJCQkibm9uZGlyZWN0ZWQgcGFja2V0cyBhdCAyTUIiKSwKKwkgICAgSVBXMjEwMF9PUkQoU1RBVF9SWF9OT0RJUl9EQVRBNV81LAorCQkJCSJub25kaXJlY3RlZCBwYWNrZXRzIGF0IDUuNU1CIiksCisJICAgIElQVzIxMDBfT1JEKFNUQVRfUlhfTk9ESVJfREFUQTExLAorCQkJCSJub25kaXJlY3RlZCBwYWNrZXRzIGF0IDExTUIiKSwKKwkgICAgSVBXMjEwMF9PUkQoU1RBVF9SWF9OVUxMX0RBVEEsICJudWxsIGRhdGEgcngncyIpLAorCSAgICBJUFcyMTAwX09SRChTVEFUX1JYX1JUUywgIlJ4IFJUUyIpLCBJUFcyMTAwX09SRChTVEFUX1JYX0NUUywKKwkJCQkJCQkJICAgICJSeCBDVFMiKSwKKwkgICAgSVBXMjEwMF9PUkQoU1RBVF9SWF9BQ0ssICJSeCBBQ0siKSwKKwkgICAgSVBXMjEwMF9PUkQoU1RBVF9SWF9DRkVORCwgIlJ4IENGIEVuZCIpLAorCSAgICBJUFcyMTAwX09SRChTVEFUX1JYX0NGRU5EX0FDSywgIlJ4IENGIEVuZCArIENGIEFjayIpLAorCSAgICBJUFcyMTAwX09SRChTVEFUX1JYX0FTU04sICJBc3NvY2lhdGlvbiBSeCdzIiksCisJICAgIElQVzIxMDBfT1JEKFNUQVRfUlhfQVNTTl9SRVNQLCAiQXNzb2NpYXRpb24gcmVzcG9uc2UgUngncyIpLAorCSAgICBJUFcyMTAwX09SRChTVEFUX1JYX1JFQVNTTiwgIlJlYXNzb2NpYXRpb24gUngncyIpLAorCSAgICBJUFcyMTAwX09SRChTVEFUX1JYX1JFQVNTTl9SRVNQLAorCQkJCSJSZWFzc29jaWF0aW9uIHJlc3BvbnNlIFJ4J3MiKSwKKwkgICAgSVBXMjEwMF9PUkQoU1RBVF9SWF9QUk9CRSwgInByb2JlIFJ4J3MiKSwKKwkgICAgSVBXMjEwMF9PUkQoU1RBVF9SWF9QUk9CRV9SRVNQLCAicHJvYmUgcmVzcG9uc2UgUngncyIpLAorCSAgICBJUFcyMTAwX09SRChTVEFUX1JYX0JFQUNPTiwgIlJ4IGJlYWNvbiIpLAorCSAgICBJUFcyMTAwX09SRChTVEFUX1JYX0FUSU0sICJSeCBBVElNIiksCisJICAgIElQVzIxMDBfT1JEKFNUQVRfUlhfRElTQVNTTiwgImRpc2Fzc29jaWF0aW9uIFJ4IiksCisJICAgIElQVzIxMDBfT1JEKFNUQVRfUlhfQVVUSCwgImF1dGhlbnRpY2F0aW9uIFJ4IiksCisJICAgIElQVzIxMDBfT1JEKFNUQVRfUlhfREVBVVRILCAiZGVhdXRoZW50aWNhdGlvbiBSeCIpLAorCSAgICBJUFcyMTAwX09SRChTVEFUX1JYX1RPVEFMX0JZVEVTLAorCQkJCSJUb3RhbCByeCBkYXRhIGJ5dGVzIHJlY2VpdmVkIiksCisJICAgIElQVzIxMDBfT1JEKFNUQVRfUlhfRVJSX0NSQywgInBhY2tldHMgd2l0aCBSeCBDUkMgZXJyb3IiKSwKKwkgICAgSVBXMjEwMF9PUkQoU1RBVF9SWF9FUlJfQ1JDMSwgIlJ4IENSQyBlcnJvcnMgYXQgMU1CIiksCisJICAgIElQVzIxMDBfT1JEKFNUQVRfUlhfRVJSX0NSQzIsICJSeCBDUkMgZXJyb3JzIGF0IDJNQiIpLAorCSAgICBJUFcyMTAwX09SRChTVEFUX1JYX0VSUl9DUkM1XzUsICJSeCBDUkMgZXJyb3JzIGF0IDUuNU1CIiksCisJICAgIElQVzIxMDBfT1JEKFNUQVRfUlhfRVJSX0NSQzExLCAiUnggQ1JDIGVycm9ycyBhdCAxMU1CIiksCisJICAgIElQVzIxMDBfT1JEKFNUQVRfUlhfRFVQTElDQVRFMSwKKwkJCQkiZHVwbGljYXRlIHJ4IHBhY2tldHMgYXQgMU1CIiksCisJICAgIElQVzIxMDBfT1JEKFNUQVRfUlhfRFVQTElDQVRFMiwKKwkJCQkiZHVwbGljYXRlIHJ4IHBhY2tldHMgYXQgMk1CIiksCisJICAgIElQVzIxMDBfT1JEKFNUQVRfUlhfRFVQTElDQVRFNV81LAorCQkJCSJkdXBsaWNhdGUgcnggcGFja2V0cyBhdCA1LjVNQiIpLAorCSAgICBJUFcyMTAwX09SRChTVEFUX1JYX0RVUExJQ0FURTExLAorCQkJCSJkdXBsaWNhdGUgcnggcGFja2V0cyBhdCAxMU1CIiksCisJICAgIElQVzIxMDBfT1JEKFNUQVRfUlhfRFVQTElDQVRFLCAiZHVwbGljYXRlIHJ4IHBhY2tldHMiKSwKKwkgICAgSVBXMjEwMF9PUkQoUEVSU19EQl9MT0NLLCAibG9ja2luZyBmdyBwZXJtYW5lbnQgIGRiIiksCisJICAgIElQVzIxMDBfT1JEKFBFUlNfREJfU0laRSwgInNpemUgb2YgZncgcGVybWFuZW50ICBkYiIpLAorCSAgICBJUFcyMTAwX09SRChQRVJTX0RCX0FERFIsICJhZGRyZXNzIG9mIGZ3IHBlcm1hbmVudCAgZGIiKSwKKwkgICAgSVBXMjEwMF9PUkQoU1RBVF9SWF9JTlZBTElEX1BST1RPQ09MLAorCQkJCSJyeCBmcmFtZXMgd2l0aCBpbnZhbGlkIHByb3RvY29sIiksCisJICAgIElQVzIxMDBfT1JEKFNZU19CT09UX1RJTUUsICJCb290IHRpbWUiKSwKKwkgICAgSVBXMjEwMF9PUkQoU1RBVF9SWF9OT19CVUZGRVIsCisJCQkJInJ4IGZyYW1lcyByZWplY3RlZCBkdWUgdG8gbm8gYnVmZmVyIiksCisJICAgIElQVzIxMDBfT1JEKFNUQVRfUlhfTUlTU0lOR19GUkFHLAorCQkJCSJyeCBmcmFtZXMgZHJvcHBlZCBkdWUgdG8gbWlzc2luZyBmcmFnbWVudCIpLAorCSAgICBJUFcyMTAwX09SRChTVEFUX1JYX09SUEhBTl9GUkFHLAorCQkJCSJyeCBmcmFtZXMgZHJvcHBlZCBkdWUgdG8gbm9uLXNlcXVlbnRpYWwgZnJhZ21lbnQiKSwKKwkgICAgSVBXMjEwMF9PUkQoU1RBVF9SWF9PUlBIQU5fRlJBTUUsCisJCQkJInJ4IGZyYW1lcyBkcm9wcGVkIGR1ZSB0byB1bm1hdGNoZWQgMXN0IGZyYW1lIiksCisJICAgIElQVzIxMDBfT1JEKFNUQVRfUlhfRlJBR19BR0VPVVQsCisJCQkJInJ4IGZyYW1lcyBkcm9wcGVkIGR1ZSB0byB1bmNvbXBsZXRlZCBmcmFtZSIpLAorCSAgICBJUFcyMTAwX09SRChTVEFUX1JYX0lDVl9FUlJPUlMsCisJCQkJIklDViBlcnJvcnMgZHVyaW5nIGRlY3J5cHRpb24iKSwKKwkgICAgSVBXMjEwMF9PUkQoU1RBVF9QU1BfU1VTUEVOU0lPTiwgInRpbWVzIGFkYXB0ZXIgc3VzcGVuZGVkIiksCisJICAgIElQVzIxMDBfT1JEKFNUQVRfUFNQX0JDTl9USU1FT1VULCAiYmVhY29uIHRpbWVvdXQiKSwKKwkgICAgSVBXMjEwMF9PUkQoU1RBVF9QU1BfUE9MTF9USU1FT1VULAorCQkJCSJwb2xsIHJlc3BvbnNlIHRpbWVvdXRzIiksCisJICAgIElQVzIxMDBfT1JEKFNUQVRfUFNQX05PTkRJUl9USU1FT1VULAorCQkJCSJ0aW1lb3V0cyB3YWl0aW5nIGZvciBsYXN0IHticm9hZCxtdWx0aX1jYXN0IHBrdCIpLAorCSAgICBJUFcyMTAwX09SRChTVEFUX1BTUF9SWF9EVElNUywgIlBTUCBEVElNcyByZWNlaXZlZCIpLAorCSAgICBJUFcyMTAwX09SRChTVEFUX1BTUF9SWF9USU1TLCAiUFNQIFRJTXMgcmVjZWl2ZWQiKSwKKwkgICAgSVBXMjEwMF9PUkQoU1RBVF9QU1BfU1RBVElPTl9JRCwgIlBTUCBTdGF0aW9uIElEIiksCisJICAgIElQVzIxMDBfT1JEKExBU1RfQVNTTl9USU1FLCAiUlRDIHRpbWUgb2YgbGFzdCBhc3NvY2lhdGlvbiIpLAorCSAgICBJUFcyMTAwX09SRChTVEFUX1BFUkNFTlRfTUlTU0VEX0JDTlMsCisJCQkJImN1cnJlbnQgY2FsY3VsYXRpb24gb2YgJSBtaXNzZWQgYmVhY29ucyIpLAorCSAgICBJUFcyMTAwX09SRChTVEFUX1BFUkNFTlRfUkVUUklFUywKKwkJCQkiY3VycmVudCBjYWxjdWxhdGlvbiBvZiAlIG1pc3NlZCB0eCByZXRyaWVzIiksCisJICAgIElQVzIxMDBfT1JEKEFTU09DSUFURURfQVBfUFRSLAorCQkJCSIwIGlmIG5vdCBhc3NvY2lhdGVkLCBlbHNlIHBvaW50ZXIgdG8gQVAgdGFibGUgZW50cnkiKSwKKwkgICAgSVBXMjEwMF9PUkQoQVZBSUxBQkxFX0FQX0NOVCwKKwkJCQkiQVAncyBkZWNzcmliZWQgaW4gdGhlIEFQIHRhYmxlIiksCisJICAgIElQVzIxMDBfT1JEKEFQX0xJU1RfUFRSLCAiUHRyIHRvIGxpc3Qgb2YgYXZhaWxhYmxlIEFQcyIpLAorCSAgICBJUFcyMTAwX09SRChTVEFUX0FQX0FTU05TLCAiYXNzb2NpYXRpb25zIiksCisJICAgIElQVzIxMDBfT1JEKFNUQVRfQVNTTl9GQUlMLCAiYXNzb2NpYXRpb24gZmFpbHVyZXMiKSwKKwkgICAgSVBXMjEwMF9PUkQoU1RBVF9BU1NOX1JFU1BfRkFJTCwKKwkJCQkiZmFpbHVyZXMgZHVlIHRvIHJlc3BvbnNlIGZhaWwiKSwKKwkgICAgSVBXMjEwMF9PUkQoU1RBVF9GVUxMX1NDQU5TLCAiZnVsbCBzY2FucyIpLAorCSAgICBJUFcyMTAwX09SRChDQVJEX0RJU0FCTEVELCAiQ2FyZCBEaXNhYmxlZCIpLAorCSAgICBJUFcyMTAwX09SRChTVEFUX1JPQU1fSU5ISUJJVCwKKwkJCQkidGltZXMgcm9hbWluZyB3YXMgaW5oaWJpdGVkIGR1ZSB0byBhY3Rpdml0eSIpLAorCSAgICBJUFcyMTAwX09SRChSU1NJX0FUX0FTU04sCisJCQkJIlJTU0kgb2YgYXNzb2NpYXRlZCBBUCBhdCB0aW1lIG9mIGFzc29jaWF0aW9uIiksCisJICAgIElQVzIxMDBfT1JEKFNUQVRfQVNTTl9DQVVTRTEsCisJCQkJInJlYXNzb2NpYXRpb246IG5vIHByb2JlIHJlc3BvbnNlIG9yIFRYIG9uIGhvcCIpLAorCSAgICBJUFcyMTAwX09SRChTVEFUX0FTU05fQ0FVU0UyLAorCQkJCSJyZWFzc29jaWF0aW9uOiBwb29yIHR4L3J4IHF1YWxpdHkiKSwKKwkgICAgSVBXMjEwMF9PUkQoU1RBVF9BU1NOX0NBVVNFMywKKwkJCQkicmVhc3NvY2lhdGlvbjogdHgvcnggcXVhbGl0eSAoZXhjZXNzaXZlIEFQIGxvYWQiKSwKKwkgICAgSVBXMjEwMF9PUkQoU1RBVF9BU1NOX0NBVVNFNCwKKwkJCQkicmVhc3NvY2lhdGlvbjogQVAgUlNTSSBsZXZlbCIpLAorCSAgICBJUFcyMTAwX09SRChTVEFUX0FTU05fQ0FVU0U1LAorCQkJCSJyZWFzc29jaWF0aW9ucyBkdWUgdG8gbG9hZCBsZXZlbGluZyIpLAorCSAgICBJUFcyMTAwX09SRChTVEFUX0FVVEhfRkFJTCwgInRpbWVzIGF1dGhlbnRpY2F0aW9uIGZhaWxlZCIpLAorCSAgICBJUFcyMTAwX09SRChTVEFUX0FVVEhfUkVTUF9GQUlMLAorCQkJCSJ0aW1lcyBhdXRoZW50aWNhdGlvbiByZXNwb25zZSBmYWlsZWQiKSwKKwkgICAgSVBXMjEwMF9PUkQoU1RBVElPTl9UQUJMRV9DTlQsCisJCQkJImVudHJpZXMgaW4gYXNzb2NpYXRpb24gdGFibGUiKSwKKwkgICAgSVBXMjEwMF9PUkQoUlNTSV9BVkdfQ1VSUiwgIkN1cnJlbnQgYXZnIFJTU0kiKSwKKwkgICAgSVBXMjEwMF9PUkQoUE9XRVJfTUdNVF9NT0RFLCAiUG93ZXIgbW9kZSAtIDA9Q0FNLCAxPVBTUCIpLAorCSAgICBJUFcyMTAwX09SRChDT1VOVFJZX0NPREUsCisJCQkJIklFRUUgY291bnRyeSBjb2RlIGFzIHJlY3YnZCBmcm9tIGJlYWNvbiIpLAorCSAgICBJUFcyMTAwX09SRChDT1VOVFJZX0NIQU5ORUxTLAorCQkJCSJjaGFubmVscyBzdXBvcnRlZCBieSBjb3VudHJ5IiksCisJICAgIElQVzIxMDBfT1JEKFJFU0VUX0NOVCwgImFkYXB0ZXIgcmVzZXRzICh3YXJtKSIpLAorCSAgICBJUFcyMTAwX09SRChCRUFDT05fSU5URVJWQUwsICJCZWFjb24gaW50ZXJ2YWwiKSwKKwkgICAgSVBXMjEwMF9PUkQoQU5URU5OQV9ESVZFUlNJVFksCisJCQkJIlRSVUUgaWYgYW50ZW5uYSBkaXZlcnNpdHkgaXMgZGlzYWJsZWQiKSwKKwkgICAgSVBXMjEwMF9PUkQoRFRJTV9QRVJJT0QsICJiZWFjb24gaW50ZXJ2YWxzIGJldHdlZW4gRFRJTXMiKSwKKwkgICAgSVBXMjEwMF9PUkQoT1VSX0ZSRVEsCisJCQkJImN1cnJlbnQgcmFkaW8gZnJlcSBsb3dlciBkaWdpdHMgLSBjaGFubmVsIElEIiksCisJICAgIElQVzIxMDBfT1JEKFJUQ19USU1FLCAiY3VycmVudCBSVEMgdGltZSIpLAorCSAgICBJUFcyMTAwX09SRChQT1JUX1RZUEUsICJvcGVyYXRpbmcgbW9kZSIpLAorCSAgICBJUFcyMTAwX09SRChDVVJSRU5UX1RYX1JBVEUsICJjdXJyZW50IHR4IHJhdGUiKSwKKwkgICAgSVBXMjEwMF9PUkQoU1VQUE9SVEVEX1JBVEVTLCAic3VwcG9ydGVkIHR4IHJhdGVzIiksCisJICAgIElQVzIxMDBfT1JEKEFUSU1fV0lORE9XLCAiY3VycmVudCBBVElNIFdpbmRvdyIpLAorCSAgICBJUFcyMTAwX09SRChCQVNJQ19SQVRFUywgImJhc2ljIHR4IHJhdGVzIiksCisJICAgIElQVzIxMDBfT1JEKE5JQ19ISUdIRVNUX1JBVEUsICJOSUMgaGlnaGVzdCB0eCByYXRlIiksCisJICAgIElQVzIxMDBfT1JEKEFQX0hJR0hFU1RfUkFURSwgIkFQIGhpZ2hlc3QgdHggcmF0ZSIpLAorCSAgICBJUFcyMTAwX09SRChDQVBBQklMSVRJRVMsCisJCQkJIk1hbmFnZW1lbnQgZnJhbWUgY2FwYWJpbGl0eSBmaWVsZCIpLAorCSAgICBJUFcyMTAwX09SRChBVVRIX1RZUEUsICJUeXBlIG9mIGF1dGhlbnRpY2F0aW9uIiksCisJICAgIElQVzIxMDBfT1JEKFJBRElPX1RZUEUsICJBZGFwdGVyIGNhcmQgcGxhdGZvcm0gdHlwZSIpLAorCSAgICBJUFcyMTAwX09SRChSVFNfVEhSRVNIT0xELAorCQkJCSJNaW4gcGFja2V0IGxlbmd0aCBmb3IgUlRTIGhhbmRzaGFraW5nIiksCisJICAgIElQVzIxMDBfT1JEKElOVF9NT0RFLCAiSW50ZXJuYXRpb25hbCBtb2RlIiksCisJICAgIElQVzIxMDBfT1JEKEZSQUdNRU5UQVRJT05fVEhSRVNIT0xELAorCQkJCSJwcm90b2NvbCBmcmFnIHRocmVzaG9sZCIpLAorCSAgICBJUFcyMTAwX09SRChFRVBST01fU1JBTV9EQl9CTE9DS19TVEFSVF9BRERSRVNTLAorCQkJCSJFRVBST00gb2Zmc2V0IGluIFNSQU0iKSwKKwkgICAgSVBXMjEwMF9PUkQoRUVQUk9NX1NSQU1fREJfQkxPQ0tfU0laRSwKKwkJCQkiRUVQUk9NIHNpemUgaW4gU1JBTSIpLAorCSAgICBJUFcyMTAwX09SRChFRVBST01fU0tVX0NBUEFCSUxJVFksICJFRVBST00gU0tVIENhcGFiaWxpdHkiKSwKKwkgICAgSVBXMjEwMF9PUkQoRUVQUk9NX0lCU1NfMTFCX0NIQU5ORUxTLAorCQkJCSJFRVBST00gSUJTUyAxMWIgY2hhbm5lbCBzZXQiKSwKKwkgICAgSVBXMjEwMF9PUkQoTUFDX1ZFUlNJT04sICJNQUMgVmVyc2lvbiIpLAorCSAgICBJUFcyMTAwX09SRChNQUNfUkVWSVNJT04sICJNQUMgUmV2aXNpb24iKSwKKwkgICAgSVBXMjEwMF9PUkQoUkFESU9fVkVSU0lPTiwgIlJhZGlvIFZlcnNpb24iKSwKKwkgICAgSVBXMjEwMF9PUkQoTklDX01BTkZfREFURV9USU1FLCAiTUFORiBEYXRlL1RpbWUgU1RBTVAiKSwKKwkgICAgSVBXMjEwMF9PUkQoVUNPREVfVkVSU0lPTiwgIlVjb2RlIFZlcnNpb24iKSx9OwogCiBzdGF0aWMgc3NpemVfdCBzaG93X3JlZ2lzdGVycyhzdHJ1Y3QgZGV2aWNlICpkLCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCQljaGFyICpidWYpCisJCQkgICAgICBjaGFyICpidWYpCiB7CiAJaW50IGk7CiAJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+bmV0X2RldjsKLQljaGFyICogb3V0ID0gYnVmOworCWNoYXIgKm91dCA9IGJ1ZjsKIAl1MzIgdmFsID0gMDsKIAogCW91dCArPSBzcHJpbnRmKG91dCwgIiUzMHMgW0FkZHJlc3MgXSA6IEhleFxuIiwgIlJlZ2lzdGVyIik7CkBAIC0zNjQ3LDE1ICszNjQwLDE1IEBACiAKIAlyZXR1cm4gb3V0IC0gYnVmOwogfQorCiBzdGF0aWMgREVWSUNFX0FUVFIocmVnaXN0ZXJzLCBTX0lSVUdPLCBzaG93X3JlZ2lzdGVycywgTlVMTCk7CiAKLQogc3RhdGljIHNzaXplX3Qgc2hvd19oYXJkd2FyZShzdHJ1Y3QgZGV2aWNlICpkLCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCQljaGFyICpidWYpCisJCQkgICAgIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5uZXRfZGV2OwotCWNoYXIgKiBvdXQgPSBidWY7CisJY2hhciAqb3V0ID0gYnVmOwogCWludCBpOwogCiAJb3V0ICs9IHNwcmludGYob3V0LCAiJTMwcyBbQWRkcmVzcyBdIDogSGV4XG4iLCAiTklDIGVudHJ5Iik7CkBAIC0zNjg4LDExICszNjgxLDExIEBACiAJfQogCXJldHVybiBvdXQgLSBidWY7CiB9CisKIHN0YXRpYyBERVZJQ0VfQVRUUihoYXJkd2FyZSwgU19JUlVHTywgc2hvd19oYXJkd2FyZSwgTlVMTCk7CiAKLQogc3RhdGljIHNzaXplX3Qgc2hvd19tZW1vcnkoc3RydWN0IGRldmljZSAqZCwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJY2hhciAqYnVmKQorCQkJICAgY2hhciAqYnVmKQogewogCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZCk7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPm5ldF9kZXY7CkBAIC0zNzA4LDEwICszNzAxLDEzIEBACiAJLyogc3lzZnMgcHJvdmlkZXMgdXMgUEFHRV9TSVpFIGJ1ZmZlciAqLwogCXdoaWxlIChsZW4gPCBQQUdFX1NJWkUgLSAxMjggJiYgbG9vcCA8IDB4MzAwMDApIHsKIAotCQlpZiAocHJpdi0+c25hcHNob3RbMF0pIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspCi0JCQlidWZmZXJbaV0gPSAqKHUzMiAqKVNOQVBTSE9UX0FERFIobG9vcCArIGkgKiA0KTsKLQkJZWxzZSBmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQotCQkJcmVhZF9uaWNfZHdvcmQoZGV2LCBsb29wICsgaSAqIDQsICZidWZmZXJbaV0pOworCQlpZiAocHJpdi0+c25hcHNob3RbMF0pCisJCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorCQkJCWJ1ZmZlcltpXSA9CisJCQkJICAgICoodTMyICopIFNOQVBTSE9UX0FERFIobG9vcCArIGkgKiA0KTsKKwkJZWxzZQorCQkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKwkJCQlyZWFkX25pY19kd29yZChkZXYsIGxvb3AgKyBpICogNCwgJmJ1ZmZlcltpXSk7CiAKIAkJaWYgKHByaXYtPmR1bXBfcmF3KQogCQkJbGVuICs9IHNwcmludGYoYnVmICsgbGVuLApAQCAtMzcxOSwyNiArMzcxNSwyNiBAQAogCQkJCSAgICAgICAiJWMlYyVjJWMiCiAJCQkJICAgICAgICIlYyVjJWMlYyIKIAkJCQkgICAgICAgIiVjJWMlYyVjIiwKLQkJCQkgICAgICAgKCh1OCopYnVmZmVyKVsweDBdLAotCQkJCSAgICAgICAoKHU4KilidWZmZXIpWzB4MV0sCi0JCQkJICAgICAgICgodTgqKWJ1ZmZlcilbMHgyXSwKLQkJCQkgICAgICAgKCh1OCopYnVmZmVyKVsweDNdLAotCQkJCSAgICAgICAoKHU4KilidWZmZXIpWzB4NF0sCi0JCQkJICAgICAgICgodTgqKWJ1ZmZlcilbMHg1XSwKLQkJCQkgICAgICAgKCh1OCopYnVmZmVyKVsweDZdLAotCQkJCSAgICAgICAoKHU4KilidWZmZXIpWzB4N10sCi0JCQkJICAgICAgICgodTgqKWJ1ZmZlcilbMHg4XSwKLQkJCQkgICAgICAgKCh1OCopYnVmZmVyKVsweDldLAotCQkJCSAgICAgICAoKHU4KilidWZmZXIpWzB4YV0sCi0JCQkJICAgICAgICgodTgqKWJ1ZmZlcilbMHhiXSwKLQkJCQkgICAgICAgKCh1OCopYnVmZmVyKVsweGNdLAotCQkJCSAgICAgICAoKHU4KilidWZmZXIpWzB4ZF0sCi0JCQkJICAgICAgICgodTgqKWJ1ZmZlcilbMHhlXSwKLQkJCQkgICAgICAgKCh1OCopYnVmZmVyKVsweGZdKTsKKwkJCQkgICAgICAgKCh1OCAqKSBidWZmZXIpWzB4MF0sCisJCQkJICAgICAgICgodTggKikgYnVmZmVyKVsweDFdLAorCQkJCSAgICAgICAoKHU4ICopIGJ1ZmZlcilbMHgyXSwKKwkJCQkgICAgICAgKCh1OCAqKSBidWZmZXIpWzB4M10sCisJCQkJICAgICAgICgodTggKikgYnVmZmVyKVsweDRdLAorCQkJCSAgICAgICAoKHU4ICopIGJ1ZmZlcilbMHg1XSwKKwkJCQkgICAgICAgKCh1OCAqKSBidWZmZXIpWzB4Nl0sCisJCQkJICAgICAgICgodTggKikgYnVmZmVyKVsweDddLAorCQkJCSAgICAgICAoKHU4ICopIGJ1ZmZlcilbMHg4XSwKKwkJCQkgICAgICAgKCh1OCAqKSBidWZmZXIpWzB4OV0sCisJCQkJICAgICAgICgodTggKikgYnVmZmVyKVsweGFdLAorCQkJCSAgICAgICAoKHU4ICopIGJ1ZmZlcilbMHhiXSwKKwkJCQkgICAgICAgKCh1OCAqKSBidWZmZXIpWzB4Y10sCisJCQkJICAgICAgICgodTggKikgYnVmZmVyKVsweGRdLAorCQkJCSAgICAgICAoKHU4ICopIGJ1ZmZlcilbMHhlXSwKKwkJCQkgICAgICAgKCh1OCAqKSBidWZmZXIpWzB4Zl0pOwogCQllbHNlCiAJCQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICIlc1xuIiwKIAkJCQkgICAgICAgc25wcmludF9saW5lKGxpbmUsIHNpemVvZihsaW5lKSwKLQkJCQkJCSAgICAodTgqKWJ1ZmZlciwgMTYsIGxvb3ApKTsKKwkJCQkJCSAgICAodTggKikgYnVmZmVyLCAxNiwgbG9vcCkpOwogCQlsb29wICs9IDE2OwogCX0KIApAQCAtMzc0Niw0NCArMzc0Miw0NCBAQAogfQogCiBzdGF0aWMgc3NpemVfdCBzdG9yZV9tZW1vcnkoc3RydWN0IGRldmljZSAqZCwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCisJCQkgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+bmV0X2RldjsKIAljb25zdCBjaGFyICpwID0gYnVmOwogCisJKHZvaWQpIGRldjsgLyoga2lsbCB1bnVzZWQtdmFyIHdhcm5pbmcgZm9yIGRlYnVnLW9ubHkgY29kZSAqLworCiAJaWYgKGNvdW50IDwgMSkKIAkJcmV0dXJuIGNvdW50OwogCiAJaWYgKHBbMF0gPT0gJzEnIHx8CiAJICAgIChjb3VudCA+PSAyICYmIHRvbG93ZXIocFswXSkgPT0gJ28nICYmIHRvbG93ZXIocFsxXSkgPT0gJ24nKSkgewogCQlJUFdfREVCVUdfSU5GTygiJXM6IFNldHRpbmcgbWVtb3J5IGR1bXAgdG8gUkFXIG1vZGUuXG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJCSAgICAgICBkZXYtPm5hbWUpOwogCQlwcml2LT5kdW1wX3JhdyA9IDE7CiAKIAl9IGVsc2UgaWYgKHBbMF0gPT0gJzAnIHx8IChjb3VudCA+PSAyICYmIHRvbG93ZXIocFswXSkgPT0gJ28nICYmCi0JCQkJICB0b2xvd2VyKHBbMV0pID09ICdmJykpIHsKKwkJCQkgICB0b2xvd2VyKHBbMV0pID09ICdmJykpIHsKIAkJSVBXX0RFQlVHX0lORk8oIiVzOiBTZXR0aW5nIG1lbW9yeSBkdW1wIHRvIEhFWCBtb2RlLlxuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7CisJCQkgICAgICAgZGV2LT5uYW1lKTsKIAkJcHJpdi0+ZHVtcF9yYXcgPSAwOwogCiAJfSBlbHNlIGlmICh0b2xvd2VyKHBbMF0pID09ICdyJykgewotCQlJUFdfREVCVUdfSU5GTygiJXM6IFJlc2V0dGluZyBmaXJtd2FyZSBzbmFwc2hvdC5cbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOworCQlJUFdfREVCVUdfSU5GTygiJXM6IFJlc2V0dGluZyBmaXJtd2FyZSBzbmFwc2hvdC5cbiIsIGRldi0+bmFtZSk7CiAJCWlwdzIxMDBfc25hcHNob3RfZnJlZShwcml2KTsKIAogCX0gZWxzZQogCQlJUFdfREVCVUdfSU5GTygiJXM6IFVzYWdlOiAwfG9uID0gSEVYLCAxfG9mZiA9IFJBVywgIgotCQkgICAgICAgInJlc2V0ID0gY2xlYXIgbWVtb3J5IHNuYXBzaG90XG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJCSAgICAgICAicmVzZXQgPSBjbGVhciBtZW1vcnkgc25hcHNob3RcbiIsIGRldi0+bmFtZSk7CiAKIAlyZXR1cm4gY291bnQ7CiB9Ci1zdGF0aWMgREVWSUNFX0FUVFIobWVtb3J5LCBTX0lXVVNSfFNfSVJVR08sIHNob3dfbWVtb3J5LCBzdG9yZV9tZW1vcnkpOwogCitzdGF0aWMgREVWSUNFX0FUVFIobWVtb3J5LCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19tZW1vcnksIHN0b3JlX21lbW9yeSk7CiAKIHN0YXRpYyBzc2l6ZV90IHNob3dfb3JkaW5hbHMoc3RydWN0IGRldmljZSAqZCwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJY2hhciAqYnVmKQorCQkJICAgICBjaGFyICpidWYpCiB7CiAJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKIAl1MzIgdmFsID0gMDsKQEAgLTM3OTEsNiArMzc4Nyw5IEBACiAJdTMyIHZhbF9sZW47CiAJc3RhdGljIGludCBsb29wID0gMDsKIAorCWlmIChwcml2LT5zdGF0dXMgJiBTVEFUVVNfUkZfS0lMTF9NQVNLKQorCQlyZXR1cm4gMDsKKwogCWlmIChsb29wID49IHNpemVvZihvcmRfZGF0YSkgLyBzaXplb2YoKm9yZF9kYXRhKSkKIAkJbG9vcCA9IDA7CiAKQEAgLTM4MTQsMTQgKzM4MTMsMTQgQEAKIAogCXJldHVybiBsZW47CiB9CisKIHN0YXRpYyBERVZJQ0VfQVRUUihvcmRpbmFscywgU19JUlVHTywgc2hvd19vcmRpbmFscywgTlVMTCk7CiAKLQogc3RhdGljIHNzaXplX3Qgc2hvd19zdGF0cyhzdHJ1Y3QgZGV2aWNlICpkLCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCQljaGFyICpidWYpCisJCQkgIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOwotCWNoYXIgKiBvdXQgPSBidWY7CisJY2hhciAqb3V0ID0gYnVmOwogCiAJb3V0ICs9IHNwcmludGYob3V0LCAiaW50ZXJydXB0czogJWQge3R4OiAlZCwgcng6ICVkLCBvdGhlcjogJWR9XG4iLAogCQkgICAgICAgcHJpdi0+aW50ZXJydXB0cywgcHJpdi0+dHhfaW50ZXJydXB0cywKQEAgLTM4MzUsOCArMzgzNCw4IEBACiAKIAlyZXR1cm4gb3V0IC0gYnVmOwogfQotc3RhdGljIERFVklDRV9BVFRSKHN0YXRzLCBTX0lSVUdPLCBzaG93X3N0YXRzLCBOVUxMKTsKIAorc3RhdGljIERFVklDRV9BVFRSKHN0YXRzLCBTX0lSVUdPLCBzaG93X3N0YXRzLCBOVUxMKTsKIAogc3RhdGljIGludCBpcHcyMTAwX3N3aXRjaF9tb2RlKHN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYsIHUzMiBtb2RlKQogewpAQCAtMzg2NCwxOSArMzg2MywxOCBAQAogCQlwcml2LT5sYXN0X21vZGUgPSBwcml2LT5pZWVlLT5pd19tb2RlOwogCQlwcml2LT5uZXRfZGV2LT50eXBlID0gQVJQSFJEX0lFRUU4MDIxMTsKIAkJYnJlYWs7Ci0jZW5kaWYgLyogQ09ORklHX0lQVzIxMDBfTU9OSVRPUiAqLworI2VuZGlmCQkJCS8qIENPTkZJR19JUFcyMTAwX01PTklUT1IgKi8KIAl9CiAKIAlwcml2LT5pZWVlLT5pd19tb2RlID0gbW9kZTsKIAogI2lmZGVmIENPTkZJR19QTQotICAgICAgICAvKiBJbmRpY2F0ZSBpcHcyMTAwX2Rvd25sb2FkX2Zpcm13YXJlIGRvd25sb2FkIGZpcm13YXJlCisJLyogSW5kaWNhdGUgaXB3MjEwMF9kb3dubG9hZF9maXJtd2FyZSBkb3dubG9hZCBmaXJtd2FyZQogCSAqIGZyb20gZGlzayBpbnN0ZWFkIG9mIG1lbW9yeS4gKi8KIAlpcHcyMTAwX2Zpcm13YXJlLnZlcnNpb24gPSAwOwogI2VuZGlmCiAKLQlwcmludGsoS0VSTl9JTkZPICIlczogUmVzZXRpbmcgb24gbW9kZSBjaGFuZ2UuXG4iLAotCQlwcml2LT5uZXRfZGV2LT5uYW1lKTsKKwlwcmludGsoS0VSTl9JTkZPICIlczogUmVzZXRpbmcgb24gbW9kZSBjaGFuZ2UuXG4iLCBwcml2LT5uZXRfZGV2LT5uYW1lKTsKIAlwcml2LT5yZXNldF9iYWNrb2ZmID0gMDsKIAlzY2hlZHVsZV9yZXNldChwcml2KTsKIApAQCAtMzg4NCwxMiArMzg4MiwxMiBAQAogfQogCiBzdGF0aWMgc3NpemVfdCBzaG93X2ludGVybmFscyhzdHJ1Y3QgZGV2aWNlICpkLCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCQljaGFyICpidWYpCisJCQkgICAgICBjaGFyICpidWYpCiB7CiAJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKIAlpbnQgbGVuID0gMDsKIAotI2RlZmluZSBEVU1QX1ZBUih4LHkpIGxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIyB4ICI6ICUiICMgeSAiXG4iLCBwcml2LT4geCkKKyNkZWZpbmUgRFVNUF9WQVIoeCx5KSBsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICMgeCAiOiAlIiB5ICJcbiIsIHByaXYtPiB4KQogCiAJaWYgKHByaXYtPnN0YXR1cyAmIFNUQVRVU19BU1NPQ0lBVEVEKQogCQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICJjb25uZWN0ZWQ6ICVsdVxuIiwKQEAgLTM4OTcsNTUgKzM4OTUsNjAgQEAKIAllbHNlCiAJCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIm5vdCBjb25uZWN0ZWRcbiIpOwogCi0JRFVNUF9WQVIoaWVlZS0+Y3J5cHRbcHJpdi0+aWVlZS0+dHhfa2V5aWR4XSwgcCk7Ci0JRFVNUF9WQVIoc3RhdHVzLCAwOGx4KTsKLQlEVU1QX1ZBUihjb25maWcsIDA4bHgpOwotCURVTVBfVkFSKGNhcGFiaWxpdHksIDA4bHgpOworCURVTVBfVkFSKGllZWUtPmNyeXB0W3ByaXYtPmllZWUtPnR4X2tleWlkeF0sICJwIik7CisJRFVNUF9WQVIoc3RhdHVzLCAiMDhseCIpOworCURVTVBfVkFSKGNvbmZpZywgIjA4bHgiKTsKKwlEVU1QX1ZBUihjYXBhYmlsaXR5LCAiMDhseCIpOwogCi0JbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAibGFzdF9ydGM6ICVsdVxuIiwgKHVuc2lnbmVkIGxvbmcpcHJpdi0+bGFzdF9ydGMpOworCWxlbiArPQorCSAgICBzcHJpbnRmKGJ1ZiArIGxlbiwgImxhc3RfcnRjOiAlbHVcbiIsCisJCSAgICAodW5zaWduZWQgbG9uZylwcml2LT5sYXN0X3J0Yyk7CiAKLQlEVU1QX1ZBUihmYXRhbF9lcnJvciwgZCk7Ci0JRFVNUF9WQVIoc3RvcF9oYW5nX2NoZWNrLCBkKTsKLQlEVU1QX1ZBUihzdG9wX3JmX2tpbGwsIGQpOwotCURVTVBfVkFSKG1lc3NhZ2VzX3NlbnQsIGQpOworCURVTVBfVkFSKGZhdGFsX2Vycm9yLCAiZCIpOworCURVTVBfVkFSKHN0b3BfaGFuZ19jaGVjaywgImQiKTsKKwlEVU1QX1ZBUihzdG9wX3JmX2tpbGwsICJkIik7CisJRFVNUF9WQVIobWVzc2FnZXNfc2VudCwgImQiKTsKIAotCURVTVBfVkFSKHR4X3BlbmRfc3RhdC52YWx1ZSwgZCk7Ci0JRFVNUF9WQVIodHhfcGVuZF9zdGF0LmhpLCBkKTsKKwlEVU1QX1ZBUih0eF9wZW5kX3N0YXQudmFsdWUsICJkIik7CisJRFVNUF9WQVIodHhfcGVuZF9zdGF0LmhpLCAiZCIpOwogCi0JRFVNUF9WQVIodHhfZnJlZV9zdGF0LnZhbHVlLCBkKTsKLQlEVU1QX1ZBUih0eF9mcmVlX3N0YXQubG8sIGQpOworCURVTVBfVkFSKHR4X2ZyZWVfc3RhdC52YWx1ZSwgImQiKTsKKwlEVU1QX1ZBUih0eF9mcmVlX3N0YXQubG8sICJkIik7CiAKLQlEVU1QX1ZBUihtc2dfZnJlZV9zdGF0LnZhbHVlLCBkKTsKLQlEVU1QX1ZBUihtc2dfZnJlZV9zdGF0LmxvLCBkKTsKKwlEVU1QX1ZBUihtc2dfZnJlZV9zdGF0LnZhbHVlLCAiZCIpOworCURVTVBfVkFSKG1zZ19mcmVlX3N0YXQubG8sICJkIik7CiAKLQlEVU1QX1ZBUihtc2dfcGVuZF9zdGF0LnZhbHVlLCBkKTsKLQlEVU1QX1ZBUihtc2dfcGVuZF9zdGF0LmhpLCBkKTsKKwlEVU1QX1ZBUihtc2dfcGVuZF9zdGF0LnZhbHVlLCAiZCIpOworCURVTVBfVkFSKG1zZ19wZW5kX3N0YXQuaGksICJkIik7CiAKLQlEVU1QX1ZBUihmd19wZW5kX3N0YXQudmFsdWUsIGQpOwotCURVTVBfVkFSKGZ3X3BlbmRfc3RhdC5oaSwgZCk7CisJRFVNUF9WQVIoZndfcGVuZF9zdGF0LnZhbHVlLCAiZCIpOworCURVTVBfVkFSKGZ3X3BlbmRfc3RhdC5oaSwgImQiKTsKIAotCURVTVBfVkFSKHR4cV9zdGF0LnZhbHVlLCBkKTsKLQlEVU1QX1ZBUih0eHFfc3RhdC5sbywgZCk7CisJRFVNUF9WQVIodHhxX3N0YXQudmFsdWUsICJkIik7CisJRFVNUF9WQVIodHhxX3N0YXQubG8sICJkIik7CiAKLQlEVU1QX1ZBUihpZWVlLT5zY2FucywgZCk7Ci0JRFVNUF9WQVIocmVzZXRfYmFja29mZiwgZCk7CisJRFVNUF9WQVIoaWVlZS0+c2NhbnMsICJkIik7CisJRFVNUF9WQVIocmVzZXRfYmFja29mZiwgImQiKTsKIAogCXJldHVybiBsZW47CiB9CisKIHN0YXRpYyBERVZJQ0VfQVRUUihpbnRlcm5hbHMsIFNfSVJVR08sIHNob3dfaW50ZXJuYWxzLCBOVUxMKTsKIAotCiBzdGF0aWMgc3NpemVfdCBzaG93X2Jzc2luZm8oc3RydWN0IGRldmljZSAqZCwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJY2hhciAqYnVmKQorCQkJICAgIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOwogCWNoYXIgZXNzaWRbSVdfRVNTSURfTUFYX1NJWkUgKyAxXTsKIAl1OCBic3NpZFtFVEhfQUxFTl07CiAJdTMyIGNoYW4gPSAwOwotCWNoYXIgKiBvdXQgPSBidWY7CisJY2hhciAqb3V0ID0gYnVmOwogCWludCBsZW5ndGg7CiAJaW50IHJldDsKIAorCWlmIChwcml2LT5zdGF0dXMgJiBTVEFUVVNfUkZfS0lMTF9NQVNLKQorCQlyZXR1cm4gMDsKKwogCW1lbXNldChlc3NpZCwgMCwgc2l6ZW9mKGVzc2lkKSk7CiAJbWVtc2V0KGJzc2lkLCAwLCBzaXplb2YoYnNzaWQpKTsKIApAQCAtMzk3Niw4ICszOTc5LDggQEAKIAogCXJldHVybiBvdXQgLSBidWY7CiB9Ci1zdGF0aWMgREVWSUNFX0FUVFIoYnNzaW5mbywgU19JUlVHTywgc2hvd19ic3NpbmZvLCBOVUxMKTsKIAorc3RhdGljIERFVklDRV9BVFRSKGJzc2luZm8sIFNfSVJVR08sIHNob3dfYnNzaW5mbywgTlVMTCk7CiAKICNpZmRlZiBDT05GSUdfSVBXX0RFQlVHCiBzdGF0aWMgc3NpemVfdCBzaG93X2RlYnVnX2xldmVsKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkLCBjaGFyICpidWYpCkBAIC0zOTg1LDggKzM5ODgsOCBAQAogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JTA4WFxuIiwgaXB3MjEwMF9kZWJ1Z19sZXZlbCk7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHN0b3JlX2RlYnVnX2xldmVsKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkLCBjb25zdCBjaGFyICpidWYsCi0JCQkJIHNpemVfdCBjb3VudCkKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX2RlYnVnX2xldmVsKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkLAorCQkJCSBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAljaGFyICpwID0gKGNoYXIgKilidWY7CiAJdTMyIHZhbDsKQEAgLTM5OTksMjggKzQwMDIsMjYgQEAKIAl9IGVsc2UKIAkJdmFsID0gc2ltcGxlX3N0cnRvdWwocCwgJnAsIDEwKTsKIAlpZiAocCA9PSBidWYpCi0JCUlQV19ERUJVR19JTkZPKERSVl9OQU1FCi0JCSAgICAgICAiOiAlcyBpcyBub3QgaW4gaGV4IG9yIGRlY2ltYWwgZm9ybS5cbiIsIGJ1Zik7CisJCUlQV19ERUJVR19JTkZPKCI6ICVzIGlzIG5vdCBpbiBoZXggb3IgZGVjaW1hbCBmb3JtLlxuIiwgYnVmKTsKIAllbHNlCiAJCWlwdzIxMDBfZGVidWdfbGV2ZWwgPSB2YWw7CiAKIAlyZXR1cm4gc3RybmxlbihidWYsIGNvdW50KTsKIH0KKwogc3RhdGljIERSSVZFUl9BVFRSKGRlYnVnX2xldmVsLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19kZWJ1Z19sZXZlbCwKIAkJICAgc3RvcmVfZGVidWdfbGV2ZWwpOwotI2VuZGlmIC8qIENPTkZJR19JUFdfREVCVUcgKi8KLQorI2VuZGlmCQkJCS8qIENPTkZJR19JUFdfREVCVUcgKi8KIAogc3RhdGljIHNzaXplX3Qgc2hvd19mYXRhbF9lcnJvcihzdHJ1Y3QgZGV2aWNlICpkLAotCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKKwkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZCk7CiAJY2hhciAqb3V0ID0gYnVmOwogCWludCBpOwogCiAJaWYgKHByaXYtPmZhdGFsX2Vycm9yKQotCQlvdXQgKz0gc3ByaW50ZihvdXQsICIweCUwOFhcbiIsCi0JCQkgICAgICAgcHJpdi0+ZmF0YWxfZXJyb3IpOworCQlvdXQgKz0gc3ByaW50ZihvdXQsICIweCUwOFhcbiIsIHByaXYtPmZhdGFsX2Vycm9yKTsKIAllbHNlCiAJCW91dCArPSBzcHJpbnRmKG91dCwgIjBcbiIpOwogCkBAIC00MDM4LDI0ICs0MDM5LDI2IEBACiB9CiAKIHN0YXRpYyBzc2l6ZV90IHN0b3JlX2ZhdGFsX2Vycm9yKHN0cnVjdCBkZXZpY2UgKmQsCi0JCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKKwkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1ZiwKKwkJCQkgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZCk7CiAJc2NoZWR1bGVfcmVzZXQocHJpdik7CiAJcmV0dXJuIGNvdW50OwogfQotc3RhdGljIERFVklDRV9BVFRSKGZhdGFsX2Vycm9yLCBTX0lXVVNSfFNfSVJVR08sIHNob3dfZmF0YWxfZXJyb3IsIHN0b3JlX2ZhdGFsX2Vycm9yKTsKIAorc3RhdGljIERFVklDRV9BVFRSKGZhdGFsX2Vycm9yLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19mYXRhbF9lcnJvciwKKwkJICAgc3RvcmVfZmF0YWxfZXJyb3IpOwogCiBzdGF0aWMgc3NpemVfdCBzaG93X3NjYW5fYWdlKHN0cnVjdCBkZXZpY2UgKmQsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJCWNoYXIgKmJ1ZikKKwkJCSAgICAgY2hhciAqYnVmKQogewogCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZCk7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHByaXYtPmllZWUtPnNjYW5fYWdlKTsKIH0KIAogc3RhdGljIHNzaXplX3Qgc3RvcmVfc2Nhbl9hZ2Uoc3RydWN0IGRldmljZSAqZCwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCisJCQkgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5uZXRfZGV2OwpAQCAtNDA2NSw2ICs0MDY4LDggQEAKIAl1bnNpZ25lZCBsb25nIHZhbDsKIAljaGFyICpwID0gYnVmZmVyOwogCisJKHZvaWQpIGRldjsgLyoga2lsbCB1bnVzZWQtdmFyIHdhcm5pbmcgZm9yIGRlYnVnLW9ubHkgY29kZSAqLworCiAJSVBXX0RFQlVHX0lORk8oImVudGVyXG4iKTsKIAogCXN0cm5jcHkoYnVmZmVyLCBidWYsIGxlbik7CkBAIC00MDc4LDggKzQwODMsNyBAQAogCX0gZWxzZQogCQl2YWwgPSBzaW1wbGVfc3RydG91bChwLCAmcCwgMTApOwogCWlmIChwID09IGJ1ZmZlcikgewotCQlJUFdfREVCVUdfSU5GTygiJXM6IHVzZXIgc3VwcGxpZWQgaW52YWxpZCB2YWx1ZS5cbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOworCQlJUFdfREVCVUdfSU5GTygiJXM6IHVzZXIgc3VwcGxpZWQgaW52YWxpZCB2YWx1ZS5cbiIsIGRldi0+bmFtZSk7CiAJfSBlbHNlIHsKIAkJcHJpdi0+aWVlZS0+c2Nhbl9hZ2UgPSB2YWw7CiAJCUlQV19ERUJVR19JTkZPKCJzZXQgc2Nhbl9hZ2UgPSAldVxuIiwgcHJpdi0+aWVlZS0+c2Nhbl9hZ2UpOwpAQCAtNDA4OCwxMSArNDA5MiwxMSBAQAogCUlQV19ERUJVR19JTkZPKCJleGl0XG4iKTsKIAlyZXR1cm4gbGVuOwogfQorCiBzdGF0aWMgREVWSUNFX0FUVFIoc2Nhbl9hZ2UsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3NjYW5fYWdlLCBzdG9yZV9zY2FuX2FnZSk7CiAKLQogc3RhdGljIHNzaXplX3Qgc2hvd19yZl9raWxsKHN0cnVjdCBkZXZpY2UgKmQsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJCWNoYXIgKmJ1ZikKKwkJCSAgICBjaGFyICpidWYpCiB7CiAJLyogMCAtIFJGIGtpbGwgbm90IGVuYWJsZWQKIAkgICAxIC0gU1cgYmFzZWQgUkYga2lsbCBhY3RpdmUgKHN5c2ZzKQpAQCAtNDEwMCw3ICs0MTA0LDcgQEAKIAkgICAzIC0gQm90aCBIVyBhbmQgU1cgYmFlZCBSRiBraWxsIGFjdGl2ZSAqLwogCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSAoc3RydWN0IGlwdzIxMDBfcHJpdiAqKWQtPmRyaXZlcl9kYXRhOwogCWludCB2YWwgPSAoKHByaXYtPnN0YXR1cyAmIFNUQVRVU19SRl9LSUxMX1NXKSA/IDB4MSA6IDB4MCkgfAotCQkocmZfa2lsbF9hY3RpdmUocHJpdikgPyAweDIgOiAweDApOworCSAgICAocmZfa2lsbF9hY3RpdmUocHJpdikgPyAweDIgOiAweDApOwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVpXG4iLCB2YWwpOwogfQogCkBAIC00MTA4LDcgKzQxMTIsNyBAQAogewogCWlmICgoZGlzYWJsZV9yYWRpbyA/IDEgOiAwKSA9PQogCSAgICAocHJpdi0+c3RhdHVzICYgU1RBVFVTX1JGX0tJTExfU1cgPyAxIDogMCkpCi0JCXJldHVybiAwIDsKKwkJcmV0dXJuIDA7CiAKIAlJUFdfREVCVUdfUkZfS0lMTCgiTWFudWFsIFNXIFJGIEtpbGwgc2V0IHRvOiBSQURJTyAgJXNcbiIsCiAJCQkgIGRpc2FibGVfcmFkaW8gPyAiT0ZGIiA6ICJPTiIpOwpAQCAtNDEyNiw4ICs0MTMwLDcgQEAKIAkJCS8qIE1ha2Ugc3VyZSB0aGUgUkZfS0lMTCBjaGVjayB0aW1lciBpcyBydW5uaW5nICovCiAJCQlwcml2LT5zdG9wX3JmX2tpbGwgPSAwOwogCQkJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+cmZfa2lsbCk7Ci0JCQlxdWV1ZV9kZWxheWVkX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+cmZfa2lsbCwKLQkJCQkJICAgSFopOworCQkJcXVldWVfZGVsYXllZF93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnJmX2tpbGwsIEhaKTsKIAkJfSBlbHNlCiAJCQlzY2hlZHVsZV9yZXNldChwcml2KTsKIAl9CkBAIC00MTM3LDE0ICs0MTQwLDE0IEBACiB9CiAKIHN0YXRpYyBzc2l6ZV90IHN0b3JlX3JmX2tpbGwoc3RydWN0IGRldmljZSAqZCwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCisJCQkgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZCk7CiAJaXB3X3JhZGlvX2tpbGxfc3cocHJpdiwgYnVmWzBdID09ICcxJyk7CiAJcmV0dXJuIGNvdW50OwogfQotc3RhdGljIERFVklDRV9BVFRSKHJmX2tpbGwsIFNfSVdVU1J8U19JUlVHTywgc2hvd19yZl9raWxsLCBzdG9yZV9yZl9raWxsKTsKIAorc3RhdGljIERFVklDRV9BVFRSKHJmX2tpbGwsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3JmX2tpbGwsIHN0b3JlX3JmX2tpbGwpOwogCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqaXB3MjEwMF9zeXNmc19lbnRyaWVzW10gPSB7CiAJJmRldl9hdHRyX2hhcmR3YXJlLmF0dHIsCkBAIC00MTY4LDcgKzQxNzEsNiBAQAogCS5hdHRycyA9IGlwdzIxMDBfc3lzZnNfZW50cmllcywKIH07CiAKLQogc3RhdGljIGludCBzdGF0dXNfcXVldWVfYWxsb2NhdGUoc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiwgaW50IGVudHJpZXMpCiB7CiAJc3RydWN0IGlwdzIxMDBfc3RhdHVzX3F1ZXVlICpxID0gJnByaXYtPnN0YXR1c19xdWV1ZTsKQEAgLTQxNzYsMTEgKzQxNzgsMTEgQEAKIAlJUFdfREVCVUdfSU5GTygiZW50ZXJcbiIpOwogCiAJcS0+c2l6ZSA9IGVudHJpZXMgKiBzaXplb2Yoc3RydWN0IGlwdzIxMDBfc3RhdHVzKTsKLQlxLT5kcnYgPSAoc3RydWN0IGlwdzIxMDBfc3RhdHVzICopcGNpX2FsbG9jX2NvbnNpc3RlbnQoCi0JCXByaXYtPnBjaV9kZXYsIHEtPnNpemUsICZxLT5uaWMpOworCXEtPmRydiA9CisJICAgIChzdHJ1Y3QgaXB3MjEwMF9zdGF0dXMgKilwY2lfYWxsb2NfY29uc2lzdGVudChwcml2LT5wY2lfZGV2LAorCQkJCQkJCSAgcS0+c2l6ZSwgJnEtPm5pYyk7CiAJaWYgKCFxLT5kcnYpIHsKLQkJSVBXX0RFQlVHX1dBUk5JTkcoCi0JCSAgICAgICAiQ2FuIG5vdCBhbGxvY2F0ZSBzdGF0dXMgcXVldWUuXG4iKTsKKwkJSVBXX0RFQlVHX1dBUk5JTkcoIkNhbiBub3QgYWxsb2NhdGUgc3RhdHVzIHF1ZXVlLlxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtNDE5Niw5ICs0MTk4LDkgQEAKIAlJUFdfREVCVUdfSU5GTygiZW50ZXJcbiIpOwogCiAJaWYgKHByaXYtPnN0YXR1c19xdWV1ZS5kcnYpIHsKLQkJcGNpX2ZyZWVfY29uc2lzdGVudCgKLQkJCXByaXYtPnBjaV9kZXYsIHByaXYtPnN0YXR1c19xdWV1ZS5zaXplLAotCQkJcHJpdi0+c3RhdHVzX3F1ZXVlLmRydiwgcHJpdi0+c3RhdHVzX3F1ZXVlLm5pYyk7CisJCXBjaV9mcmVlX2NvbnNpc3RlbnQocHJpdi0+cGNpX2RldiwgcHJpdi0+c3RhdHVzX3F1ZXVlLnNpemUsCisJCQkJICAgIHByaXYtPnN0YXR1c19xdWV1ZS5kcnYsCisJCQkJICAgIHByaXYtPnN0YXR1c19xdWV1ZS5uaWMpOwogCQlwcml2LT5zdGF0dXNfcXVldWUuZHJ2ID0gTlVMTDsKIAl9CiAKQEAgLTQyMTYsNyArNDIxOCw4IEBACiAJcS0+c2l6ZSA9IGVudHJpZXMgKiBzaXplb2Yoc3RydWN0IGlwdzIxMDBfYmQpOwogCXEtPmRydiA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHByaXYtPnBjaV9kZXYsIHEtPnNpemUsICZxLT5uaWMpOwogCWlmICghcS0+ZHJ2KSB7Ci0JCUlQV19ERUJVR19JTkZPKCJjYW4ndCBhbGxvY2F0ZSBzaGFyZWQgbWVtb3J5IGZvciBidWZmZXIgZGVzY3JpcHRvcnNcbiIpOworCQlJUFdfREVCVUdfSU5GTworCQkgICAgKCJjYW4ndCBhbGxvY2F0ZSBzaGFyZWQgbWVtb3J5IGZvciBidWZmZXIgZGVzY3JpcHRvcnNcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJbWVtc2V0KHEtPmRydiwgMCwgcS0+c2l6ZSk7CkBAIC00MjI2LDggKzQyMjksNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBiZF9xdWV1ZV9mcmVlKHN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYsCi0JCQkgIHN0cnVjdCBpcHcyMTAwX2JkX3F1ZXVlICpxKQorc3RhdGljIHZvaWQgYmRfcXVldWVfZnJlZShzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2LCBzdHJ1Y3QgaXB3MjEwMF9iZF9xdWV1ZSAqcSkKIHsKIAlJUFdfREVCVUdfSU5GTygiZW50ZXJcbiIpOwogCkBAIC00MjM1LDIxICs0MjM3LDIxIEBACiAJCXJldHVybjsKIAogCWlmIChxLT5kcnYpIHsKLQkJcGNpX2ZyZWVfY29uc2lzdGVudChwcml2LT5wY2lfZGV2LAotCQkJCSAgICBxLT5zaXplLCBxLT5kcnYsIHEtPm5pYyk7CisJCXBjaV9mcmVlX2NvbnNpc3RlbnQocHJpdi0+cGNpX2RldiwgcS0+c2l6ZSwgcS0+ZHJ2LCBxLT5uaWMpOwogCQlxLT5kcnYgPSBOVUxMOwogCX0KIAogCUlQV19ERUJVR19JTkZPKCJleGl0XG4iKTsKIH0KIAotc3RhdGljIHZvaWQgYmRfcXVldWVfaW5pdGlhbGl6ZSgKLQlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2LCBzdHJ1Y3QgaXB3MjEwMF9iZF9xdWV1ZSAqIHEsCi0JdTMyIGJhc2UsIHUzMiBzaXplLCB1MzIgciwgdTMyIHcpCitzdGF0aWMgdm9pZCBiZF9xdWV1ZV9pbml0aWFsaXplKHN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYsCisJCQkJc3RydWN0IGlwdzIxMDBfYmRfcXVldWUgKnEsIHUzMiBiYXNlLCB1MzIgc2l6ZSwKKwkJCQl1MzIgciwgdTMyIHcpCiB7CiAJSVBXX0RFQlVHX0lORk8oImVudGVyXG4iKTsKIAotCUlQV19ERUJVR19JTkZPKCJpbml0aWFsaXppbmcgYmQgcXVldWUgYXQgdmlydD0lcCwgcGh5cz0lMDh4XG4iLCBxLT5kcnYsICh1MzIpcS0+bmljKTsKKwlJUFdfREVCVUdfSU5GTygiaW5pdGlhbGl6aW5nIGJkIHF1ZXVlIGF0IHZpcnQ9JXAsIHBoeXM9JTA4eFxuIiwgcS0+ZHJ2LAorCQkgICAgICAgKHUzMikgcS0+bmljKTsKIAogCXdyaXRlX3JlZ2lzdGVyKHByaXYtPm5ldF9kZXYsIGJhc2UsIHEtPm5pYyk7CiAJd3JpdGVfcmVnaXN0ZXIocHJpdi0+bmV0X2Rldiwgc2l6ZSwgcS0+ZW50cmllcyk7CkBAIC00Mjg1LDMyICs0Mjg3LDM4IEBACiAJZXJyID0gYmRfcXVldWVfYWxsb2NhdGUocHJpdiwgJnByaXYtPnR4X3F1ZXVlLCBUWF9RVUVVRV9MRU5HVEgpOwogCWlmIChlcnIpIHsKIAkJSVBXX0RFQlVHX0VSUk9SKCIlczogZmFpbGVkIGJkX3F1ZXVlX2FsbG9jYXRlXG4iLAotCQkgICAgICAgcHJpdi0+bmV0X2Rldi0+bmFtZSk7CisJCQkJcHJpdi0+bmV0X2Rldi0+bmFtZSk7CiAJCXJldHVybiBlcnI7CiAJfQogCi0JcHJpdi0+dHhfYnVmZmVycyA9IChzdHJ1Y3QgaXB3MjEwMF90eF9wYWNrZXQgKilrbWFsbG9jKAotCQlUWF9QRU5ERURfUVVFVUVfTEVOR1RIICogc2l6ZW9mKHN0cnVjdCBpcHcyMTAwX3R4X3BhY2tldCksCi0JCUdGUF9BVE9NSUMpOworCXByaXYtPnR4X2J1ZmZlcnMgPQorCSAgICAoc3RydWN0IGlwdzIxMDBfdHhfcGFja2V0ICopa21hbGxvYyhUWF9QRU5ERURfUVVFVUVfTEVOR1RIICoKKwkJCQkJCXNpemVvZihzdHJ1Y3QKKwkJCQkJCSAgICAgICBpcHcyMTAwX3R4X3BhY2tldCksCisJCQkJCQlHRlBfQVRPTUlDKTsKIAlpZiAoIXByaXYtPnR4X2J1ZmZlcnMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6ICVzOiBhbGxvYyBmYWlsZWQgZm9ybSB0eCBidWZmZXJzLlxuIiwKKwkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FCisJCSAgICAgICAiOiAlczogYWxsb2MgZmFpbGVkIGZvcm0gdHggYnVmZmVycy5cbiIsCiAJCSAgICAgICBwcml2LT5uZXRfZGV2LT5uYW1lKTsKIAkJYmRfcXVldWVfZnJlZShwcml2LCAmcHJpdi0+dHhfcXVldWUpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgVFhfUEVOREVEX1FVRVVFX0xFTkdUSDsgaSsrKSB7Ci0JCXYgPSBwY2lfYWxsb2NfY29uc2lzdGVudCgKLQkJCXByaXYtPnBjaV9kZXYsIHNpemVvZihzdHJ1Y3QgaXB3MjEwMF9kYXRhX2hlYWRlciksICZwKTsKKwkJdiA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHByaXYtPnBjaV9kZXYsCisJCQkJCSBzaXplb2Yoc3RydWN0IGlwdzIxMDBfZGF0YV9oZWFkZXIpLAorCQkJCQkgJnApOwogCQlpZiAoIXYpIHsKLQkJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiAlczogUENJIGFsbG9jIGZhaWxlZCBmb3IgdHggIgotCQkJICAgICAgICJidWZmZXJzLlxuIiwgcHJpdi0+bmV0X2Rldi0+bmFtZSk7CisJCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUKKwkJCSAgICAgICAiOiAlczogUENJIGFsbG9jIGZhaWxlZCBmb3IgdHggIiAiYnVmZmVycy5cbiIsCisJCQkgICAgICAgcHJpdi0+bmV0X2Rldi0+bmFtZSk7CiAJCQllcnIgPSAtRU5PTUVNOwogCQkJYnJlYWs7CiAJCX0KIAogCQlwcml2LT50eF9idWZmZXJzW2ldLnR5cGUgPSBEQVRBOwotCQlwcml2LT50eF9idWZmZXJzW2ldLmluZm8uZF9zdHJ1Y3QuZGF0YSA9IChzdHJ1Y3QgaXB3MjEwMF9kYXRhX2hlYWRlciopdjsKKwkJcHJpdi0+dHhfYnVmZmVyc1tpXS5pbmZvLmRfc3RydWN0LmRhdGEgPQorCQkgICAgKHN0cnVjdCBpcHcyMTAwX2RhdGFfaGVhZGVyICopdjsKIAkJcHJpdi0+dHhfYnVmZmVyc1tpXS5pbmZvLmRfc3RydWN0LmRhdGFfcGh5cyA9IHA7CiAJCXByaXYtPnR4X2J1ZmZlcnNbaV0uaW5mby5kX3N0cnVjdC50eGIgPSBOVUxMOwogCX0KQEAgLTQzMTksMTEgKzQzMjcsMTEgQEAKIAkJcmV0dXJuIDA7CiAKIAlmb3IgKGogPSAwOyBqIDwgaTsgaisrKSB7Ci0JCXBjaV9mcmVlX2NvbnNpc3RlbnQoCi0JCQlwcml2LT5wY2lfZGV2LAotCQkJc2l6ZW9mKHN0cnVjdCBpcHcyMTAwX2RhdGFfaGVhZGVyKSwKLQkJCXByaXYtPnR4X2J1ZmZlcnNbal0uaW5mby5kX3N0cnVjdC5kYXRhLAotCQkJcHJpdi0+dHhfYnVmZmVyc1tqXS5pbmZvLmRfc3RydWN0LmRhdGFfcGh5cyk7CisJCXBjaV9mcmVlX2NvbnNpc3RlbnQocHJpdi0+cGNpX2RldiwKKwkJCQkgICAgc2l6ZW9mKHN0cnVjdCBpcHcyMTAwX2RhdGFfaGVhZGVyKSwKKwkJCQkgICAgcHJpdi0+dHhfYnVmZmVyc1tqXS5pbmZvLmRfc3RydWN0LmRhdGEsCisJCQkJICAgIHByaXYtPnR4X2J1ZmZlcnNbal0uaW5mby5kX3N0cnVjdC4KKwkJCQkgICAgZGF0YV9waHlzKTsKIAl9CiAKIAlrZnJlZShwcml2LT50eF9idWZmZXJzKTsKQEAgLTQzNTYsNyArNDM2NCw4IEBACiAJCS8qIFdlIHNpbXBseSBkcm9wIGFueSBTS0JzIHRoYXQgaGF2ZSBiZWVuIHF1ZXVlZCBmb3IKIAkJICogdHJhbnNtaXQgKi8KIAkJaWYgKHByaXYtPnR4X2J1ZmZlcnNbaV0uaW5mby5kX3N0cnVjdC50eGIpIHsKLQkJCWllZWU4MDIxMV90eGJfZnJlZShwcml2LT50eF9idWZmZXJzW2ldLmluZm8uZF9zdHJ1Y3QudHhiKTsKKwkJCWllZWU4MDIxMV90eGJfZnJlZShwcml2LT50eF9idWZmZXJzW2ldLmluZm8uZF9zdHJ1Y3QuCisJCQkJCSAgIHR4Yik7CiAJCQlwcml2LT50eF9idWZmZXJzW2ldLmluZm8uZF9zdHJ1Y3QudHhiID0gTlVMTDsKIAkJfQogCkBAIC00Mzk0LDE1ICs0NDAzLDE3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgVFhfUEVOREVEX1FVRVVFX0xFTkdUSDsgaSsrKSB7CiAJCWlmIChwcml2LT50eF9idWZmZXJzW2ldLmluZm8uZF9zdHJ1Y3QudHhiKSB7Ci0JCQlpZWVlODAyMTFfdHhiX2ZyZWUocHJpdi0+dHhfYnVmZmVyc1tpXS5pbmZvLmRfc3RydWN0LnR4Yik7CisJCQlpZWVlODAyMTFfdHhiX2ZyZWUocHJpdi0+dHhfYnVmZmVyc1tpXS5pbmZvLmRfc3RydWN0LgorCQkJCQkgICB0eGIpOwogCQkJcHJpdi0+dHhfYnVmZmVyc1tpXS5pbmZvLmRfc3RydWN0LnR4YiA9IE5VTEw7CiAJCX0KIAkJaWYgKHByaXYtPnR4X2J1ZmZlcnNbaV0uaW5mby5kX3N0cnVjdC5kYXRhKQotCQkJcGNpX2ZyZWVfY29uc2lzdGVudCgKLQkJCQlwcml2LT5wY2lfZGV2LAotCQkJCXNpemVvZihzdHJ1Y3QgaXB3MjEwMF9kYXRhX2hlYWRlciksCi0JCQkJcHJpdi0+dHhfYnVmZmVyc1tpXS5pbmZvLmRfc3RydWN0LmRhdGEsCi0JCQkJcHJpdi0+dHhfYnVmZmVyc1tpXS5pbmZvLmRfc3RydWN0LmRhdGFfcGh5cyk7CisJCQlwY2lfZnJlZV9jb25zaXN0ZW50KHByaXYtPnBjaV9kZXYsCisJCQkJCSAgICBzaXplb2Yoc3RydWN0IGlwdzIxMDBfZGF0YV9oZWFkZXIpLAorCQkJCQkgICAgcHJpdi0+dHhfYnVmZmVyc1tpXS5pbmZvLmRfc3RydWN0LgorCQkJCQkgICAgZGF0YSwKKwkJCQkJICAgIHByaXYtPnR4X2J1ZmZlcnNbaV0uaW5mby5kX3N0cnVjdC4KKwkJCQkJICAgIGRhdGFfcGh5cyk7CiAJfQogCiAJa2ZyZWUocHJpdi0+dHhfYnVmZmVycyk7CkBAIC00NDExLDggKzQ0MjIsNiBAQAogCUlQV19ERUJVR19JTkZPKCJleGl0XG4iKTsKIH0KIAotCi0KIHN0YXRpYyBpbnQgaXB3MjEwMF9yeF9hbGxvY2F0ZShzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2KQogewogCWludCBpLCBqLCBlcnIgPSAtRUlOVkFMOwpAQCAtNDU0MiwxNCArNDU1MSwxMyBAQAogCiAJaW50IGVycjsKIAotCWVyciA9IGlwdzIxMDBfZ2V0X29yZGluYWwocHJpdiwgSVBXX09SRF9TVEFUX0FEQVBURVJfTUFDLAotCQkJCSAgbWFjLCAmbGVuZ3RoKTsKKwllcnIgPSBpcHcyMTAwX2dldF9vcmRpbmFsKHByaXYsIElQV19PUkRfU1RBVF9BREFQVEVSX01BQywgbWFjLCAmbGVuZ3RoKTsKIAlpZiAoZXJyKSB7CiAJCUlQV19ERUJVR19JTkZPKCJNQUMgYWRkcmVzcyByZWFkIGZhaWxlZFxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KIAlJUFdfREVCVUdfSU5GTygiY2FyZCBNQUMgaXMgJTAyWDolMDJYOiUwMlg6JTAyWDolMDJYOiUwMlhcbiIsCi0JICAgICAgIG1hY1swXSwgbWFjWzFdLCBtYWNbMl0sIG1hY1szXSwgbWFjWzRdLCBtYWNbNV0pOworCQkgICAgICAgbWFjWzBdLCBtYWNbMV0sIG1hY1syXSwgbWFjWzNdLCBtYWNbNF0sIG1hY1s1XSk7CiAKIAltZW1jcHkocHJpdi0+bmV0X2Rldi0+ZGV2X2FkZHIsIG1hYywgRVRIX0FMRU4pOwogCkBAIC00NTc2LDggKzQ1ODQsNyBAQAogCUlQV19ERUJVR19JTkZPKCJlbnRlclxuIik7CiAKIAlpZiAocHJpdi0+Y29uZmlnICYgQ0ZHX0NVU1RPTV9NQUMpIHsKLQkJbWVtY3B5KGNtZC5ob3N0X2NvbW1hbmRfcGFyYW1ldGVycywgcHJpdi0+bWFjX2FkZHIsCi0JCSAgICAgICBFVEhfQUxFTik7CisJCW1lbWNweShjbWQuaG9zdF9jb21tYW5kX3BhcmFtZXRlcnMsIHByaXYtPm1hY19hZGRyLCBFVEhfQUxFTik7CiAJCW1lbWNweShwcml2LT5uZXRfZGV2LT5kZXZfYWRkciwgcHJpdi0+bWFjX2FkZHIsIEVUSF9BTEVOKTsKIAl9IGVsc2UKIAkJbWVtY3B5KGNtZC5ob3N0X2NvbW1hbmRfcGFyYW1ldGVycywgcHJpdi0+bmV0X2Rldi0+ZGV2X2FkZHIsCkBAIC00NjE0LDcgKzQ2MjEsOCBAQAogCWlmICghYmF0Y2hfbW9kZSkgewogCQllcnIgPSBpcHcyMTAwX2Rpc2FibGVfYWRhcHRlcihwcml2KTsKIAkJaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6ICVzOiBDb3VsZCBub3QgZGlzYWJsZSBhZGFwdGVyICVkXG4iLAorCQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FCisJCQkgICAgICAgIjogJXM6IENvdWxkIG5vdCBkaXNhYmxlIGFkYXB0ZXIgJWRcbiIsCiAJCQkgICAgICAgcHJpdi0+bmV0X2Rldi0+bmFtZSwgZXJyKTsKIAkJCXJldHVybiBlcnI7CiAJCX0KQEAgLTQ2MjksNyArNDYzNyw2IEBACiAJcmV0dXJuIGVycjsKIH0KIAotCiBzdGF0aWMgaW50IGlwdzIxMDBfc2V0X2NoYW5uZWwoc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiwgdTMyIGNoYW5uZWwsCiAJCQkgICAgICAgaW50IGJhdGNoX21vZGUpCiB7CkBAIC00NjYwLDggKzQ2NjcsNyBAQAogCiAJZXJyID0gaXB3MjEwMF9od19zZW5kX2NvbW1hbmQocHJpdiwgJmNtZCk7CiAJaWYgKGVycikgewotCQlJUFdfREVCVUdfSU5GTygiRmFpbGVkIHRvIHNldCBjaGFubmVsIHRvICVkIiwKLQkJCSAgICAgICBjaGFubmVsKTsKKwkJSVBXX0RFQlVHX0lORk8oIkZhaWxlZCB0byBzZXQgY2hhbm5lbCB0byAlZCIsIGNoYW5uZWwpOwogCQlyZXR1cm4gZXJyOwogCX0KIApAQCAtNDcwMywxNSArNDcwOSwxNCBAQAogCQljbWQuaG9zdF9jb21tYW5kX3BhcmFtZXRlcnNbMF0gfD0gSVBXX0NGR19JQlNTX0FVVE9fU1RBUlQ7CiAKIAljbWQuaG9zdF9jb21tYW5kX3BhcmFtZXRlcnNbMF0gfD0gSVBXX0NGR19JQlNTX01BU0sgfAotCQlJUFdfQ0ZHX0JTU19NQVNLIHwKLQkJSVBXX0NGR184MDJfMXhfRU5BQkxFOworCSAgICBJUFdfQ0ZHX0JTU19NQVNLIHwgSVBXX0NGR184MDJfMXhfRU5BQkxFOwogCiAJaWYgKCEocHJpdi0+Y29uZmlnICYgQ0ZHX0xPTkdfUFJFQU1CTEUpKQogCQljbWQuaG9zdF9jb21tYW5kX3BhcmFtZXRlcnNbMF0gfD0gSVBXX0NGR19QUkVBTUJMRV9BVVRPOwogCiAJZXJyID0gaXB3MjEwMF9nZXRfb3JkaW5hbChwcml2LAogCQkJCSAgSVBXX09SRF9FRVBST01fSUJTU18xMUJfQ0hBTk5FTFMsCi0JCQkJICAmaWJzc19tYXNrLCAgJmxlbik7CisJCQkJICAmaWJzc19tYXNrLCAmbGVuKTsKIAlpZiAoZXJyKQogCQlpYnNzX21hc2sgPSBJUFdfSUJTU18xMUJfREVGQVVMVF9NQVNLOwogCkBAIC00NzE5LDcgKzQ3MjQsNyBAQAogCWNtZC5ob3N0X2NvbW1hbmRfcGFyYW1ldGVyc1syXSA9IFJFR19DSEFOTkVMX01BU0sgJiBpYnNzX21hc2s7CiAKIAkvKiAxMWIgb25seSAqLwotCS8qY21kLmhvc3RfY29tbWFuZF9wYXJhbWV0ZXJzWzBdIHw9IERJVkVSU0lUWV9BTlRFTk5BX0E7Ki8KKwkvKmNtZC5ob3N0X2NvbW1hbmRfcGFyYW1ldGVyc1swXSB8PSBESVZFUlNJVFlfQU5URU5OQV9BOyAqLwogCiAJZXJyID0gaXB3MjEwMF9od19zZW5kX2NvbW1hbmQocHJpdiwgJmNtZCk7CiAJaWYgKGVycikKQEAgLTQ3ODMsOCArNDc4OCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaXB3MjEwMF9zZXRfcG93ZXJfbW9kZShzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2LAotCQkJCSAgaW50IHBvd2VyX2xldmVsKQorc3RhdGljIGludCBpcHcyMTAwX3NldF9wb3dlcl9tb2RlKHN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYsIGludCBwb3dlcl9sZXZlbCkKIHsKIAlzdHJ1Y3QgaG9zdF9jb21tYW5kIGNtZCA9IHsKIAkJLmhvc3RfY29tbWFuZCA9IFBPV0VSX01PREUsCkBAIC00ODA1LDExICs0ODA5LDEwIEBACiAJCXByaXYtPnBvd2VyX21vZGUgPSBJUFdfUE9XRVJfRU5BQkxFRCB8IHBvd2VyX2xldmVsOwogCiAjaWZkZWYgQ09ORklHX0lQVzIxMDBfVFhfUE9XRVIKLQlpZiAocHJpdi0+cG9ydF90eXBlID09IElCU1MgJiYKLQkgICAgcHJpdi0+YWRob2NfcG93ZXIgIT0gREZUTF9JQlNTX1RYX1BPV0VSKSB7CisJaWYgKHByaXYtPnBvcnRfdHlwZSA9PSBJQlNTICYmIHByaXYtPmFkaG9jX3Bvd2VyICE9IERGVExfSUJTU19UWF9QT1dFUikgewogCQkvKiBTZXQgYmVhY29uIGludGVydmFsICovCiAJCWNtZC5ob3N0X2NvbW1hbmQgPSBUWF9QT1dFUl9JTkRFWDsKLQkJY21kLmhvc3RfY29tbWFuZF9wYXJhbWV0ZXJzWzBdID0gKHUzMilwcml2LT5hZGhvY19wb3dlcjsKKwkJY21kLmhvc3RfY29tbWFuZF9wYXJhbWV0ZXJzWzBdID0gKHUzMikgcHJpdi0+YWRob2NfcG93ZXI7CiAKIAkJZXJyID0gaXB3MjEwMF9od19zZW5kX2NvbW1hbmQocHJpdiwgJmNtZCk7CiAJCWlmIChlcnIpCkBAIC00ODIwLDcgKzQ4MjMsNiBAQAogCXJldHVybiAwOwogfQogCi0KIHN0YXRpYyBpbnQgaXB3MjEwMF9zZXRfcnRzX3RocmVzaG9sZChzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2LCB1MzIgdGhyZXNob2xkKQogewogCXN0cnVjdCBob3N0X2NvbW1hbmQgY21kID0gewpAQCAtNDkyNSw4ICs0OTI3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotCi1zdGF0aWMgaW50IGlwdzIxMDBfc2V0X21hbmRhdG9yeV9ic3NpZChzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2LCB1OCAqYnNzaWQsCitzdGF0aWMgaW50IGlwdzIxMDBfc2V0X21hbmRhdG9yeV9ic3NpZChzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2LCB1OCAqIGJzc2lkLAogCQkJCSAgICAgICBpbnQgYmF0Y2hfbW9kZSkKIHsKIAlzdHJ1Y3QgaG9zdF9jb21tYW5kIGNtZCA9IHsKQEAgLTQ5MzgsMTYgKzQ5MzksMTUgQEAKIAogI2lmZGVmIENPTkZJR19JUFdfREVCVUcKIAlpZiAoYnNzaWQgIT0gTlVMTCkKLQkJSVBXX0RFQlVHX0hDKAotCQkJIk1BTkRBVE9SWV9CU1NJRDogJTAyWDolMDJYOiUwMlg6JTAyWDolMDJYOiUwMlhcbiIsCi0JCQlic3NpZFswXSwgYnNzaWRbMV0sIGJzc2lkWzJdLCBic3NpZFszXSwgYnNzaWRbNF0sCi0JCQlic3NpZFs1XSk7CisJCUlQV19ERUJVR19IQygiTUFOREFUT1JZX0JTU0lEOiAlMDJYOiUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWFxuIiwKKwkJCSAgICAgYnNzaWRbMF0sIGJzc2lkWzFdLCBic3NpZFsyXSwgYnNzaWRbM10sIGJzc2lkWzRdLAorCQkJICAgICBic3NpZFs1XSk7CiAJZWxzZQogCQlJUFdfREVCVUdfSEMoIk1BTkRBVE9SWV9CU1NJRDogPGNsZWFyPlxuIik7CiAjZW5kaWYKIAkvKiBpZiBCU1NJRCBpcyBlbXB0eSB0aGVuIHdlIGRpc2FibGUgbWFuZGF0b3J5IGJzc2lkIG1vZGUgKi8KIAlpZiAoYnNzaWQgIT0gTlVMTCkKLQkJbWVtY3B5KCh1OCAqKWNtZC5ob3N0X2NvbW1hbmRfcGFyYW1ldGVycywgYnNzaWQsIEVUSF9BTEVOKTsKKwkJbWVtY3B5KGNtZC5ob3N0X2NvbW1hbmRfcGFyYW1ldGVycywgYnNzaWQsIEVUSF9BTEVOKTsKIAogCWlmICghYmF0Y2hfbW9kZSkgewogCQllcnIgPSBpcHcyMTAwX2Rpc2FibGVfYWRhcHRlcihwcml2KTsKQEAgLTQ5NjMsNyArNDk2Myw2IEBACiAJcmV0dXJuIGVycjsKIH0KIAotI2lmZGVmIENPTkZJR19JRUVFODAyMTFfV1BBCiBzdGF0aWMgaW50IGlwdzIxMDBfZGlzYXNzb2NpYXRlX2Jzc2lkKHN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYpCiB7CiAJc3RydWN0IGhvc3RfY29tbWFuZCBjbWQgPSB7CkBAIC00OTg3LDQyICs0OTg2LDEwIEBACiAKIAlyZXR1cm4gZXJyOwogfQotI2VuZGlmCi0KLS8qCi0gKiBQc2V1ZG8gY29kZSBmb3Igc2V0dGluZyB1cCB3cGFfZnJhbWU6Ci0gKi8KLSNpZiAwCi12b2lkIHgoc3RydWN0IGllZWU4MDIxMV9hc3NvY19mcmFtZSAqd3BhX2Fzc29jKQotewotCXN0cnVjdCBpcHcyMTAwX3dwYV9hc3NvY19mcmFtZSBmcmFtZTsKLQlmcmFtZS0+Zml4ZWRfaWVfbWFzayA9IElQV19XUEFfQ0FQQUJJTFRJRVMgfAotCQlJUFdfV1BBX0xJU1RFTklOVEVSVkFMIHwKLQkJSVBXX1dQQV9BUF9BRERSRVNTOwotCWZyYW1lLT5jYXBhYl9pbmZvID0gd3BhX2Fzc29jLT5jYXBhYl9pbmZvOwotCWZyYW1lLT5saXNlbl9pbnRlcnZhbCA9IHdwYV9hc3NvYy0+bGlzdGVudF9pbnRlcnZhbDsKLQltZW1jcHkoZnJhbWUtPmN1cnJlbnRfYXAsIHdwYV9hc3NvYy0+Y3VycmVudF9hcCwgRVRIX0FMRU4pOwotCi0JLyogVU5LTk9XTiAtLSBJJ20gbm90IHBvc3Rpdml2ZSBhYm91dCB0aGlzIHBhcnQ7IGRvbid0IGhhdmUgYW55IFdQQQotCSAqIHNldHVwIGhlcmUgdG8gdGVzdCBpdCB3aXRoLgotCSAqCi0JICogV2FsayB0aGUgSUVzIGluIHRoZSB3cGFfYXNzb2MgYW5kIGZpZ3VyZSBvdXQgdGhlIHRvdGFsIHNpemUgb2YgYWxsCi0JICogdGhhdCBkYXRhLiAgU3RpY2sgdGhhdCBpbnRvIGZyYW1lLT52YXJfaWVfbGVuLiAgVGhlbiBtZW1jcHkoKSBhbGwgb2YKLQkgKiB0aGUgSUVzIGZyb20gd3BhX2ZyYW1lIGludG8gZnJhbWUuCi0JICovCi0JZnJhbWUtPnZhcl9pZV9sZW4gPSBjYWxjdWxhdGVfaWVfbGVuKHdwYV9hc3NvYyk7Ci0JbWVtY3B5KGZyYW1lLT52YXJfaWUsICB3cGFfYXNzb2MtPnZhcmlhYmxlLCBmcmFtZS0+dmFyX2llX2xlbik7Ci0KLQlpcHcyMTAwX3NldF93cGFfaWUocHJpdiwgJmZyYW1lLCAwKTsKLX0KLSNlbmRpZgotCi0KLQogCiBzdGF0aWMgaW50IGlwdzIxMDBfc2V0X3dwYV9pZShzdHJ1Y3QgaXB3MjEwMF9wcml2ICosCiAJCQkgICAgICBzdHJ1Y3QgaXB3MjEwMF93cGFfYXNzb2NfZnJhbWUgKiwgaW50KQotX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOworICAgIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKTsKIAogc3RhdGljIGludCBpcHcyMTAwX3NldF93cGFfaWUoc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiwKIAkJCSAgICAgIHN0cnVjdCBpcHcyMTAwX3dwYV9hc3NvY19mcmFtZSAqd3BhX2ZyYW1lLApAQCAtNTA3Niw3ICs1MDQzLDcgQEAKIAkJLmhvc3RfY29tbWFuZF9sZW5ndGggPSBzaXplb2Yoc3RydWN0IHNlY3VyaXR5X2luZm9fcGFyYW1zKQogCX07CiAJc3RydWN0IHNlY3VyaXR5X2luZm9fcGFyYW1zICpzZWN1cml0eSA9Ci0JCShzdHJ1Y3Qgc2VjdXJpdHlfaW5mb19wYXJhbXMgKikmY21kLmhvc3RfY29tbWFuZF9wYXJhbWV0ZXJzOworCSAgICAoc3RydWN0IHNlY3VyaXR5X2luZm9fcGFyYW1zICopJmNtZC5ob3N0X2NvbW1hbmRfcGFyYW1ldGVyczsKIAlpbnQgZXJyOwogCW1lbXNldChzZWN1cml0eSwgMCwgc2l6ZW9mKCpzZWN1cml0eSkpOwogCkBAIC01MDk0LDI1ICs1MDYxLDI1IEBACiAJCWJyZWFrOwogCWNhc2UgU0VDX0xFVkVMXzE6CiAJCXNlY3VyaXR5LT5hbGxvd2VkX2NpcGhlcnMgPSBJUFdfV0VQNDBfQ0lQSEVSIHwKLQkJCUlQV19XRVAxMDRfQ0lQSEVSOworCQkgICAgSVBXX1dFUDEwNF9DSVBIRVI7CiAJCWJyZWFrOwogCWNhc2UgU0VDX0xFVkVMXzI6CiAJCXNlY3VyaXR5LT5hbGxvd2VkX2NpcGhlcnMgPSBJUFdfV0VQNDBfQ0lQSEVSIHwKLQkJCUlQV19XRVAxMDRfQ0lQSEVSIHwgSVBXX1RLSVBfQ0lQSEVSOworCQkgICAgSVBXX1dFUDEwNF9DSVBIRVIgfCBJUFdfVEtJUF9DSVBIRVI7CiAJCWJyZWFrOwogCWNhc2UgU0VDX0xFVkVMXzJfQ0tJUDoKIAkJc2VjdXJpdHktPmFsbG93ZWRfY2lwaGVycyA9IElQV19XRVA0MF9DSVBIRVIgfAotCQkJSVBXX1dFUDEwNF9DSVBIRVIgfCBJUFdfQ0tJUF9DSVBIRVI7CisJCSAgICBJUFdfV0VQMTA0X0NJUEhFUiB8IElQV19DS0lQX0NJUEhFUjsKIAkJYnJlYWs7CiAJY2FzZSBTRUNfTEVWRUxfMzoKIAkJc2VjdXJpdHktPmFsbG93ZWRfY2lwaGVycyA9IElQV19XRVA0MF9DSVBIRVIgfAotCQkJSVBXX1dFUDEwNF9DSVBIRVIgfCBJUFdfVEtJUF9DSVBIRVIgfCBJUFdfQ0NNUF9DSVBIRVI7CisJCSAgICBJUFdfV0VQMTA0X0NJUEhFUiB8IElQV19US0lQX0NJUEhFUiB8IElQV19DQ01QX0NJUEhFUjsKIAkJYnJlYWs7CiAJfQogCi0JSVBXX0RFQlVHX0hDKAotCQkiU0VUX1NFQ1VSSVRZX0lORk9STUFUSU9OOiBhdXRoOiVkIGNpcGhlcjoweCUwMlggKGxldmVsICVkKVxuIiwKLQkJc2VjdXJpdHktPmF1dGhfbW9kZSwgc2VjdXJpdHktPmFsbG93ZWRfY2lwaGVycywgc2VjdXJpdHlfbGV2ZWwpOworCUlQV19ERUJVR19IQworCSAgICAoIlNFVF9TRUNVUklUWV9JTkZPUk1BVElPTjogYXV0aDolZCBjaXBoZXI6MHglMDJYIChsZXZlbCAlZClcbiIsCisJICAgICBzZWN1cml0eS0+YXV0aF9tb2RlLCBzZWN1cml0eS0+YWxsb3dlZF9jaXBoZXJzLCBzZWN1cml0eV9sZXZlbCk7CiAKIAlzZWN1cml0eS0+cmVwbGF5X2NvdW50ZXJzX251bWJlciA9IDA7CiAKQEAgLTUxMzAsOCArNTA5Nyw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBpcHcyMTAwX3NldF90eF9wb3dlcihzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2LAotCQkJCXUzMiB0eF9wb3dlcikKK3N0YXRpYyBpbnQgaXB3MjEwMF9zZXRfdHhfcG93ZXIoc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiwgdTMyIHR4X3Bvd2VyKQogewogCXN0cnVjdCBob3N0X2NvbW1hbmQgY21kID0gewogCQkuaG9zdF9jb21tYW5kID0gVFhfUE9XRVJfSU5ERVgsCkBAIC01MTQwLDYgKzUxMDYsMTAgQEAKIAl9OwogCWludCBlcnIgPSAwOwogCisJaWYgKHR4X3Bvd2VyICE9IElQV19UWF9QT1dFUl9ERUZBVUxUKQorCQl0eF9wb3dlciA9ICh0eF9wb3dlciAtIElQV19UWF9QT1dFUl9NSU5fREJNKSAqIDE2IC8KKwkJICAgIChJUFdfVFhfUE9XRVJfTUFYX0RCTSAtIElQV19UWF9QT1dFUl9NSU5fREJNKTsKKwogCWNtZC5ob3N0X2NvbW1hbmRfcGFyYW1ldGVyc1swXSA9IHR4X3Bvd2VyOwogCiAJaWYgKHByaXYtPmllZWUtPml3X21vZGUgPT0gSVdfTU9ERV9BREhPQykKQEAgLTUxODUsNyArNTE1NSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLQogdm9pZCBpcHcyMTAwX3F1ZXVlc19pbml0aWFsaXplKHN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYpCiB7CiAJaXB3MjEwMF90eF9pbml0aWFsaXplKHByaXYpOwpAQCAtNTIwMywxMyArNTE3MiwxMiBAQAogaW50IGlwdzIxMDBfcXVldWVzX2FsbG9jYXRlKHN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYpCiB7CiAJaWYgKGlwdzIxMDBfdHhfYWxsb2NhdGUocHJpdikgfHwKLQkgICAgaXB3MjEwMF9yeF9hbGxvY2F0ZShwcml2KSB8fAotCSAgICBpcHcyMTAwX21zZ19hbGxvY2F0ZShwcml2KSkKKwkgICAgaXB3MjEwMF9yeF9hbGxvY2F0ZShwcml2KSB8fCBpcHcyMTAwX21zZ19hbGxvY2F0ZShwcml2KSkKIAkJZ290byBmYWlsOwogCiAJcmV0dXJuIDA7CiAKLSBmYWlsOgorICAgICAgZmFpbDoKIAlpcHcyMTAwX3R4X2ZyZWUocHJpdik7CiAJaXB3MjEwMF9yeF9mcmVlKHByaXYpOwogCWlwdzIxMDBfbXNnX2ZyZWUocHJpdik7CkBAIC01MjM1LDcgKzUyMDMsOCBAQAogCWlmICghYmF0Y2hfbW9kZSkgewogCQllcnIgPSBpcHcyMTAwX2Rpc2FibGVfYWRhcHRlcihwcml2KTsKIAkJaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6ICVzOiBDb3VsZCBub3QgZGlzYWJsZSBhZGFwdGVyICVkXG4iLAorCQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FCisJCQkgICAgICAgIjogJXM6IENvdWxkIG5vdCBkaXNhYmxlIGFkYXB0ZXIgJWRcbiIsCiAJCQkgICAgICAgcHJpdi0+bmV0X2Rldi0+bmFtZSwgZXJyKTsKIAkJCXJldHVybiBlcnI7CiAJCX0KQEAgLTUyNjIsNyArNTIzMSw2IEBACiAjZGVmaW5lIFdFUF9TVFJfNjQoeCkgeFswXSx4WzFdLHhbMl0seFszXSx4WzRdCiAjZGVmaW5lIFdFUF9TVFJfMTI4KHgpIHhbMF0seFsxXSx4WzJdLHhbM10seFs0XSx4WzVdLHhbNl0seFs3XSx4WzhdLHhbOV0seFsxMF0KIAotCiAvKioKICAqIFNldCBhIHRoZSB3ZXAga2V5CiAgKgpAQCAtNTI4NywxMSArNTI1NSwxMSBAQAogCQkuaG9zdF9jb21tYW5kX3NlcXVlbmNlID0gMCwKIAkJLmhvc3RfY29tbWFuZF9sZW5ndGggPSBzaXplb2Yoc3RydWN0IGlwdzIxMDBfd2VwX2tleSksCiAJfTsKLQlzdHJ1Y3QgaXB3MjEwMF93ZXBfa2V5ICp3ZXBfa2V5ID0gKHZvaWQqKWNtZC5ob3N0X2NvbW1hbmRfcGFyYW1ldGVyczsKKwlzdHJ1Y3QgaXB3MjEwMF93ZXBfa2V5ICp3ZXBfa2V5ID0gKHZvaWQgKiljbWQuaG9zdF9jb21tYW5kX3BhcmFtZXRlcnM7CiAJaW50IGVycjsKIAogCUlQV19ERUJVR19IQygiV0VQX0tFWV9JTkZPOiBpbmRleCA9ICVkLCBsZW4gPSAlZC8lZFxuIiwKLQkJCQkgaWR4LCBrZXlsZW4sIGxlbik7CisJCSAgICAgaWR4LCBrZXlsZW4sIGxlbik7CiAKIAkvKiBOT1RFOiBXZSBkb24ndCBjaGVjayBjYWNoZWQgdmFsdWVzIGluIGNhc2UgdGhlIGZpcm13YXJlIHdhcyByZXNldAogCSAqIG9yIHNvbWUgb3RoZXIgcHJvYmxlbSBpcyBvY2N1cmluZy4gIElmIHRoZSB1c2VyIGlzIHNldHRpbmcgdGhlIGtleSwKQEAgLTUzMDgsMjIgKzUyNzYsMjMgQEAKIAkvKiBXaWxsIGJlIG9wdGltaXplZCBvdXQgb24gZGVidWcgbm90IGJlaW5nIGNvbmZpZ3VyZWQgaW4gKi8KIAlpZiAoa2V5bGVuID09IDApCiAJCUlQV19ERUJVR19XRVAoIiVzOiBDbGVhcmluZyBrZXkgJWRcbiIsCi0JCQkJICBwcml2LT5uZXRfZGV2LT5uYW1lLCB3ZXBfa2V5LT5pZHgpOworCQkJICAgICAgcHJpdi0+bmV0X2Rldi0+bmFtZSwgd2VwX2tleS0+aWR4KTsKIAllbHNlIGlmIChrZXlsZW4gPT0gNSkKIAkJSVBXX0RFQlVHX1dFUCgiJXM6IGlkeDogJWQsIGxlbjogJWQga2V5OiAiIFdFUF9GTVRfNjQgIlxuIiwKLQkJCQkgIHByaXYtPm5ldF9kZXYtPm5hbWUsIHdlcF9rZXktPmlkeCwgd2VwX2tleS0+bGVuLAotCQkJCSAgV0VQX1NUUl82NCh3ZXBfa2V5LT5rZXkpKTsKKwkJCSAgICAgIHByaXYtPm5ldF9kZXYtPm5hbWUsIHdlcF9rZXktPmlkeCwgd2VwX2tleS0+bGVuLAorCQkJICAgICAgV0VQX1NUUl82NCh3ZXBfa2V5LT5rZXkpKTsKIAllbHNlCiAJCUlQV19ERUJVR19XRVAoIiVzOiBpZHg6ICVkLCBsZW46ICVkIGtleTogIiBXRVBfRk1UXzEyOAotCQkJCSAgIlxuIiwKLQkJCQkgIHByaXYtPm5ldF9kZXYtPm5hbWUsIHdlcF9rZXktPmlkeCwgd2VwX2tleS0+bGVuLAotCQkJCSAgV0VQX1NUUl8xMjgod2VwX2tleS0+a2V5KSk7CisJCQkgICAgICAiXG4iLAorCQkJICAgICAgcHJpdi0+bmV0X2Rldi0+bmFtZSwgd2VwX2tleS0+aWR4LCB3ZXBfa2V5LT5sZW4sCisJCQkgICAgICBXRVBfU1RSXzEyOCh3ZXBfa2V5LT5rZXkpKTsKIAogCWlmICghYmF0Y2hfbW9kZSkgewogCQllcnIgPSBpcHcyMTAwX2Rpc2FibGVfYWRhcHRlcihwcml2KTsKIAkJLyogRklYTUU6IElQRzogc2hvdWxkbid0IHRoaXMgcHJpbmsgYmUgaW4gX2Rpc2FibGVfYWRhcHRlcigpPyAqLwogCQlpZiAoZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogJXM6IENvdWxkIG5vdCBkaXNhYmxlIGFkYXB0ZXIgJWRcbiIsCisJCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUKKwkJCSAgICAgICAiOiAlczogQ291bGQgbm90IGRpc2FibGUgYWRhcHRlciAlZFxuIiwKIAkJCSAgICAgICBwcml2LT5uZXRfZGV2LT5uYW1lLCBlcnIpOwogCQkJcmV0dXJuIGVycjsKIAkJfQpAQCAtNTM0Nyw3ICs1MzE2LDcgQEAKIAkJLmhvc3RfY29tbWFuZCA9IFdFUF9LRVlfSU5ERVgsCiAJCS5ob3N0X2NvbW1hbmRfc2VxdWVuY2UgPSAwLAogCQkuaG9zdF9jb21tYW5kX2xlbmd0aCA9IDQsCi0JCS5ob3N0X2NvbW1hbmRfcGFyYW1ldGVycyA9IHsgaWR4IH0sCisJCS5ob3N0X2NvbW1hbmRfcGFyYW1ldGVycyA9IHtpZHh9LAogCX07CiAJaW50IGVycjsKIApAQCAtNTM1OSw3ICs1MzI4LDggQEAKIAlpZiAoIWJhdGNoX21vZGUpIHsKIAkJZXJyID0gaXB3MjEwMF9kaXNhYmxlX2FkYXB0ZXIocHJpdik7CiAJCWlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiAlczogQ291bGQgbm90IGRpc2FibGUgYWRhcHRlciAlZFxuIiwKKwkJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRQorCQkJICAgICAgICI6ICVzOiBDb3VsZCBub3QgZGlzYWJsZSBhZGFwdGVyICVkXG4iLAogCQkJICAgICAgIHByaXYtPm5ldF9kZXYtPm5hbWUsIGVycik7CiAJCQlyZXR1cm4gZXJyOwogCQl9CkBAIC01Mzc0LDkgKzUzNDQsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLQotc3RhdGljIGludCBpcHcyMTAwX2NvbmZpZ3VyZV9zZWN1cml0eShzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2LAotCQkJCSAgICAgIGludCBiYXRjaF9tb2RlKQorc3RhdGljIGludCBpcHcyMTAwX2NvbmZpZ3VyZV9zZWN1cml0eShzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2LCBpbnQgYmF0Y2hfbW9kZSkKIHsKIAlpbnQgaSwgZXJyLCBhdXRoX21vZGUsIHNlY19sZXZlbCwgdXNlX2dyb3VwOwogCkBAIC01Mzg5LDQwICs1MzU3LDQyIEBACiAJCQlyZXR1cm4gZXJyOwogCX0KIAotCWlmICghcHJpdi0+c2VjLmVuYWJsZWQpIHsKLQkJZXJyID0gaXB3MjEwMF9zZXRfc2VjdXJpdHlfaW5mb3JtYXRpb24oCi0JCQlwcml2LCBJUFdfQVVUSF9PUEVOLCBTRUNfTEVWRUxfMCwgMCwgMSk7CisJaWYgKCFwcml2LT5pZWVlLT5zZWMuZW5hYmxlZCkgeworCQllcnIgPQorCQkgICAgaXB3MjEwMF9zZXRfc2VjdXJpdHlfaW5mb3JtYXRpb24ocHJpdiwgSVBXX0FVVEhfT1BFTiwKKwkJCQkJCSAgICAgU0VDX0xFVkVMXzAsIDAsIDEpOwogCX0gZWxzZSB7CiAJCWF1dGhfbW9kZSA9IElQV19BVVRIX09QRU47Ci0JCWlmICgocHJpdi0+c2VjLmZsYWdzICYgU0VDX0FVVEhfTU9ERSkgJiYKLQkJICAgIChwcml2LT5zZWMuYXV0aF9tb2RlID09IFdMQU5fQVVUSF9TSEFSRURfS0VZKSkKKwkJaWYgKChwcml2LT5pZWVlLT5zZWMuZmxhZ3MgJiBTRUNfQVVUSF9NT0RFKSAmJgorCQkgICAgKHByaXYtPmllZWUtPnNlYy5hdXRoX21vZGUgPT0gV0xBTl9BVVRIX1NIQVJFRF9LRVkpKQogCQkJYXV0aF9tb2RlID0gSVBXX0FVVEhfU0hBUkVEOwogCiAJCXNlY19sZXZlbCA9IFNFQ19MRVZFTF8wOwotCQlpZiAocHJpdi0+c2VjLmZsYWdzICYgU0VDX0xFVkVMKQotCQkJc2VjX2xldmVsID0gcHJpdi0+c2VjLmxldmVsOworCQlpZiAocHJpdi0+aWVlZS0+c2VjLmZsYWdzICYgU0VDX0xFVkVMKQorCQkJc2VjX2xldmVsID0gcHJpdi0+aWVlZS0+c2VjLmxldmVsOwogCiAJCXVzZV9ncm91cCA9IDA7Ci0JCWlmIChwcml2LT5zZWMuZmxhZ3MgJiBTRUNfVU5JQ0FTVF9HUk9VUCkKLQkJCXVzZV9ncm91cCA9IHByaXYtPnNlYy51bmljYXN0X3VzZXNfZ3JvdXA7CisJCWlmIChwcml2LT5pZWVlLT5zZWMuZmxhZ3MgJiBTRUNfVU5JQ0FTVF9HUk9VUCkKKwkJCXVzZV9ncm91cCA9IHByaXYtPmllZWUtPnNlYy51bmljYXN0X3VzZXNfZ3JvdXA7CiAKLQkJZXJyID0gaXB3MjEwMF9zZXRfc2VjdXJpdHlfaW5mb3JtYXRpb24oCi0JCQkgICAgcHJpdiwgYXV0aF9tb2RlLCBzZWNfbGV2ZWwsIHVzZV9ncm91cCwgMSk7CisJCWVyciA9CisJCSAgICBpcHcyMTAwX3NldF9zZWN1cml0eV9pbmZvcm1hdGlvbihwcml2LCBhdXRoX21vZGUsIHNlY19sZXZlbCwKKwkJCQkJCSAgICAgdXNlX2dyb3VwLCAxKTsKIAl9CiAKIAlpZiAoZXJyKQogCQlnb3RvIGV4aXQ7CiAKLQlpZiAocHJpdi0+c2VjLmVuYWJsZWQpIHsKKwlpZiAocHJpdi0+aWVlZS0+c2VjLmVuYWJsZWQpIHsKIAkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotCQkJaWYgKCEocHJpdi0+c2VjLmZsYWdzICYgKDEgPDwgaSkpKSB7Ci0JCQkJbWVtc2V0KHByaXYtPnNlYy5rZXlzW2ldLCAwLCBXRVBfS0VZX0xFTik7Ci0JCQkJcHJpdi0+c2VjLmtleV9zaXplc1tpXSA9IDA7CisJCQlpZiAoIShwcml2LT5pZWVlLT5zZWMuZmxhZ3MgJiAoMSA8PCBpKSkpIHsKKwkJCQltZW1zZXQocHJpdi0+aWVlZS0+c2VjLmtleXNbaV0sIDAsIFdFUF9LRVlfTEVOKTsKKwkJCQlwcml2LT5pZWVlLT5zZWMua2V5X3NpemVzW2ldID0gMDsKIAkJCX0gZWxzZSB7CiAJCQkJZXJyID0gaXB3MjEwMF9zZXRfa2V5KHByaXYsIGksCi0JCQkJCQkgICAgICBwcml2LT5zZWMua2V5c1tpXSwKLQkJCQkJCSAgICAgIHByaXYtPnNlYy5rZXlfc2l6ZXNbaV0sCi0JCQkJCQkgICAgICAxKTsKKwkJCQkJCSAgICAgIHByaXYtPmllZWUtPnNlYy5rZXlzW2ldLAorCQkJCQkJICAgICAgcHJpdi0+aWVlZS0+c2VjLgorCQkJCQkJICAgICAga2V5X3NpemVzW2ldLCAxKTsKIAkJCQlpZiAoZXJyKQogCQkJCQlnb3RvIGV4aXQ7CiAJCQl9CkBAIC01NDMzLDE0ICs1NDAzLDE2IEBACiAKIAkvKiBBbHdheXMgZW5hYmxlIHByaXZhY3kgc28gdGhlIEhvc3QgY2FuIGZpbHRlciBXRVAgcGFja2V0cyBpZgogCSAqIGVuY3J5cHRlZCBkYXRhIGlzIHNlbnQgdXAgKi8KLQllcnIgPSBpcHcyMTAwX3NldF93ZXBfZmxhZ3MoCi0JCXByaXYsIHByaXYtPnNlYy5lbmFibGVkID8gSVBXX1BSSVZBQ1lfQ0FQQUJMRSA6IDAsIDEpOworCWVyciA9CisJICAgIGlwdzIxMDBfc2V0X3dlcF9mbGFncyhwcml2LAorCQkJCSAgcHJpdi0+aWVlZS0+c2VjLgorCQkJCSAgZW5hYmxlZCA/IElQV19QUklWQUNZX0NBUEFCTEUgOiAwLCAxKTsKIAlpZiAoZXJyKQogCQlnb3RvIGV4aXQ7CiAKIAlwcml2LT5zdGF0dXMgJj0gflNUQVRVU19TRUNVUklUWV9VUERBVEVEOwogCi0gZXhpdDoKKyAgICAgIGV4aXQ6CiAJaWYgKCFiYXRjaF9tb2RlKQogCQlpcHcyMTAwX2VuYWJsZV9hZGFwdGVyKHByaXYpOwogCkBAIC01NDY5LDYwICs1NDQxLDY0IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CiAJCWlmIChzZWMtPmZsYWdzICYgKDEgPDwgaSkpIHsKLQkJCXByaXYtPnNlYy5rZXlfc2l6ZXNbaV0gPSBzZWMtPmtleV9zaXplc1tpXTsKKwkJCXByaXYtPmllZWUtPnNlYy5rZXlfc2l6ZXNbaV0gPSBzZWMtPmtleV9zaXplc1tpXTsKIAkJCWlmIChzZWMtPmtleV9zaXplc1tpXSA9PSAwKQotCQkJCXByaXYtPnNlYy5mbGFncyAmPSB+KDEgPDwgaSk7CisJCQkJcHJpdi0+aWVlZS0+c2VjLmZsYWdzICY9IH4oMSA8PCBpKTsKIAkJCWVsc2UKLQkJCQltZW1jcHkocHJpdi0+c2VjLmtleXNbaV0sIHNlYy0+a2V5c1tpXSwKKwkJCQltZW1jcHkocHJpdi0+aWVlZS0+c2VjLmtleXNbaV0sIHNlYy0+a2V5c1tpXSwKIAkJCQkgICAgICAgc2VjLT5rZXlfc2l6ZXNbaV0pOwotCQkJcHJpdi0+c2VjLmZsYWdzIHw9ICgxIDw8IGkpOwotCQkJcHJpdi0+c3RhdHVzIHw9IFNUQVRVU19TRUNVUklUWV9VUERBVEVEOworCQkJaWYgKHNlYy0+bGV2ZWwgPT0gU0VDX0xFVkVMXzEpIHsKKwkJCQlwcml2LT5pZWVlLT5zZWMuZmxhZ3MgfD0gKDEgPDwgaSk7CisJCQkJcHJpdi0+c3RhdHVzIHw9IFNUQVRVU19TRUNVUklUWV9VUERBVEVEOworCQkJfSBlbHNlCisJCQkJcHJpdi0+aWVlZS0+c2VjLmZsYWdzICY9IH4oMSA8PCBpKTsKIAkJfQogCX0KIAogCWlmICgoc2VjLT5mbGFncyAmIFNFQ19BQ1RJVkVfS0VZKSAmJgotCSAgICBwcml2LT5zZWMuYWN0aXZlX2tleSAhPSBzZWMtPmFjdGl2ZV9rZXkpIHsKKwkgICAgcHJpdi0+aWVlZS0+c2VjLmFjdGl2ZV9rZXkgIT0gc2VjLT5hY3RpdmVfa2V5KSB7CiAJCWlmIChzZWMtPmFjdGl2ZV9rZXkgPD0gMykgewotCQkJcHJpdi0+c2VjLmFjdGl2ZV9rZXkgPSBzZWMtPmFjdGl2ZV9rZXk7Ci0JCQlwcml2LT5zZWMuZmxhZ3MgfD0gU0VDX0FDVElWRV9LRVk7CisJCQlwcml2LT5pZWVlLT5zZWMuYWN0aXZlX2tleSA9IHNlYy0+YWN0aXZlX2tleTsKKwkJCXByaXYtPmllZWUtPnNlYy5mbGFncyB8PSBTRUNfQUNUSVZFX0tFWTsKIAkJfSBlbHNlCi0JCQlwcml2LT5zZWMuZmxhZ3MgJj0gflNFQ19BQ1RJVkVfS0VZOworCQkJcHJpdi0+aWVlZS0+c2VjLmZsYWdzICY9IH5TRUNfQUNUSVZFX0tFWTsKIAogCQlwcml2LT5zdGF0dXMgfD0gU1RBVFVTX1NFQ1VSSVRZX1VQREFURUQ7CiAJfQogCiAJaWYgKChzZWMtPmZsYWdzICYgU0VDX0FVVEhfTU9ERSkgJiYKLQkgICAgKHByaXYtPnNlYy5hdXRoX21vZGUgIT0gc2VjLT5hdXRoX21vZGUpKSB7Ci0JCXByaXYtPnNlYy5hdXRoX21vZGUgPSBzZWMtPmF1dGhfbW9kZTsKLQkJcHJpdi0+c2VjLmZsYWdzIHw9IFNFQ19BVVRIX01PREU7CisJICAgIChwcml2LT5pZWVlLT5zZWMuYXV0aF9tb2RlICE9IHNlYy0+YXV0aF9tb2RlKSkgeworCQlwcml2LT5pZWVlLT5zZWMuYXV0aF9tb2RlID0gc2VjLT5hdXRoX21vZGU7CisJCXByaXYtPmllZWUtPnNlYy5mbGFncyB8PSBTRUNfQVVUSF9NT0RFOwogCQlwcml2LT5zdGF0dXMgfD0gU1RBVFVTX1NFQ1VSSVRZX1VQREFURUQ7CiAJfQogCi0JaWYgKHNlYy0+ZmxhZ3MgJiBTRUNfRU5BQkxFRCAmJgotCSAgICBwcml2LT5zZWMuZW5hYmxlZCAhPSBzZWMtPmVuYWJsZWQpIHsKLQkJcHJpdi0+c2VjLmZsYWdzIHw9IFNFQ19FTkFCTEVEOwotCQlwcml2LT5zZWMuZW5hYmxlZCA9IHNlYy0+ZW5hYmxlZDsKKwlpZiAoc2VjLT5mbGFncyAmIFNFQ19FTkFCTEVEICYmIHByaXYtPmllZWUtPnNlYy5lbmFibGVkICE9IHNlYy0+ZW5hYmxlZCkgeworCQlwcml2LT5pZWVlLT5zZWMuZmxhZ3MgfD0gU0VDX0VOQUJMRUQ7CisJCXByaXYtPmllZWUtPnNlYy5lbmFibGVkID0gc2VjLT5lbmFibGVkOwogCQlwcml2LT5zdGF0dXMgfD0gU1RBVFVTX1NFQ1VSSVRZX1VQREFURUQ7CiAJCWZvcmNlX3VwZGF0ZSA9IDE7CiAJfQogCi0JaWYgKHNlYy0+ZmxhZ3MgJiBTRUNfTEVWRUwgJiYKLQkgICAgcHJpdi0+c2VjLmxldmVsICE9IHNlYy0+bGV2ZWwpIHsKLQkJcHJpdi0+c2VjLmxldmVsID0gc2VjLT5sZXZlbDsKLQkJcHJpdi0+c2VjLmZsYWdzIHw9IFNFQ19MRVZFTDsKKwlpZiAoc2VjLT5mbGFncyAmIFNFQ19FTkNSWVBUKQorCQlwcml2LT5pZWVlLT5zZWMuZW5jcnlwdCA9IHNlYy0+ZW5jcnlwdDsKKworCWlmIChzZWMtPmZsYWdzICYgU0VDX0xFVkVMICYmIHByaXYtPmllZWUtPnNlYy5sZXZlbCAhPSBzZWMtPmxldmVsKSB7CisJCXByaXYtPmllZWUtPnNlYy5sZXZlbCA9IHNlYy0+bGV2ZWw7CisJCXByaXYtPmllZWUtPnNlYy5mbGFncyB8PSBTRUNfTEVWRUw7CiAJCXByaXYtPnN0YXR1cyB8PSBTVEFUVVNfU0VDVVJJVFlfVVBEQVRFRDsKIAl9CiAKIAlJUFdfREVCVUdfV0VQKCJTZWN1cml0eSBmbGFnczogJWMgJWMlYyVjJWMgJWMlYyVjJWNcbiIsCi0JCQkgIHByaXYtPnNlYy5mbGFncyAmICgxPDw4KSA/ICcxJyA6ICcwJywKLQkJCSAgcHJpdi0+c2VjLmZsYWdzICYgKDE8PDcpID8gJzEnIDogJzAnLAotCQkJICBwcml2LT5zZWMuZmxhZ3MgJiAoMTw8NikgPyAnMScgOiAnMCcsCi0JCQkgIHByaXYtPnNlYy5mbGFncyAmICgxPDw1KSA/ICcxJyA6ICcwJywKLQkJCSAgcHJpdi0+c2VjLmZsYWdzICYgKDE8PDQpID8gJzEnIDogJzAnLAotCQkJICBwcml2LT5zZWMuZmxhZ3MgJiAoMTw8MykgPyAnMScgOiAnMCcsCi0JCQkgIHByaXYtPnNlYy5mbGFncyAmICgxPDwyKSA/ICcxJyA6ICcwJywKLQkJCSAgcHJpdi0+c2VjLmZsYWdzICYgKDE8PDEpID8gJzEnIDogJzAnLAotCQkJICBwcml2LT5zZWMuZmxhZ3MgJiAoMTw8MCkgPyAnMScgOiAnMCcpOworCQkgICAgICBwcml2LT5pZWVlLT5zZWMuZmxhZ3MgJiAoMSA8PCA4KSA/ICcxJyA6ICcwJywKKwkJICAgICAgcHJpdi0+aWVlZS0+c2VjLmZsYWdzICYgKDEgPDwgNykgPyAnMScgOiAnMCcsCisJCSAgICAgIHByaXYtPmllZWUtPnNlYy5mbGFncyAmICgxIDw8IDYpID8gJzEnIDogJzAnLAorCQkgICAgICBwcml2LT5pZWVlLT5zZWMuZmxhZ3MgJiAoMSA8PCA1KSA/ICcxJyA6ICcwJywKKwkJICAgICAgcHJpdi0+aWVlZS0+c2VjLmZsYWdzICYgKDEgPDwgNCkgPyAnMScgOiAnMCcsCisJCSAgICAgIHByaXYtPmllZWUtPnNlYy5mbGFncyAmICgxIDw8IDMpID8gJzEnIDogJzAnLAorCQkgICAgICBwcml2LT5pZWVlLT5zZWMuZmxhZ3MgJiAoMSA8PCAyKSA/ICcxJyA6ICcwJywKKwkJICAgICAgcHJpdi0+aWVlZS0+c2VjLmZsYWdzICYgKDEgPDwgMSkgPyAnMScgOiAnMCcsCisJCSAgICAgIHByaXYtPmllZWUtPnNlYy5mbGFncyAmICgxIDw8IDApID8gJzEnIDogJzAnKTsKIAogLyogQXMgYSB0ZW1wb3Jhcnkgd29yayBhcm91bmQgdG8gZW5hYmxlIFdQQSB1bnRpbCB3ZSBmaWd1cmUgb3V0IHdoeQogICogd3BhX3N1cHBsaWNhbnQgdG9nZ2xlcyB0aGUgc2VjdXJpdHkgY2FwYWJpbGl0eSBvZiB0aGUgZHJpdmVyLCB3aGljaApAQCAtNTUzMSw3ICs1NTA3LDcgQEAKICAqCWlmIChmb3JjZV91cGRhdGUgfHwgIShwcml2LT5zdGF0dXMgJiBTVEFUVVNfQVNTT0NJQVRFRCkpKi8KIAlpZiAoIShwcml2LT5zdGF0dXMgJiAoU1RBVFVTX0FTU09DSUFURUQgfCBTVEFUVVNfQVNTT0NJQVRJTkcpKSkKIAkJaXB3MjEwMF9jb25maWd1cmVfc2VjdXJpdHkocHJpdiwgMCk7Ci1kb25lOgorICAgICAgZG9uZToKIAl1cCgmcHJpdi0+YWN0aW9uX3NlbSk7CiB9CiAKQEAgLTU1NTYsNyArNTUzMiw3IEBACiAKIAkJcmV0dXJuIDA7CiAJfQotI2VuZGlmIC8qIENPTkZJR19JUFcyMTAwX01PTklUT1IgKi8KKyNlbmRpZgkJCQkvKiBDT05GSUdfSVBXMjEwMF9NT05JVE9SICovCiAKIAllcnIgPSBpcHcyMTAwX3JlYWRfbWFjX2FkZHJlc3MocHJpdik7CiAJaWYgKGVycikKQEAgLTU1NzYsNyArNTU1Miw3IEBACiAJCQlyZXR1cm4gZXJyOwogCX0KIAotCWVyciAgPSBpcHcyMTAwX3N5c3RlbV9jb25maWcocHJpdiwgYmF0Y2hfbW9kZSk7CisJZXJyID0gaXB3MjEwMF9zeXN0ZW1fY29uZmlnKHByaXYsIGJhdGNoX21vZGUpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKQEAgLTU2MTQsOCArNTU5MCwxMCBAQAogCQlyZXR1cm4gZXJyOwogCiAJaWYgKHByaXYtPmllZWUtPml3X21vZGUgPT0gSVdfTU9ERV9BREhPQykgewotCQllcnIgPSBpcHcyMTAwX3NldF9pYnNzX2JlYWNvbl9pbnRlcnZhbCgKLQkJCXByaXYsIHByaXYtPmJlYWNvbl9pbnRlcnZhbCwgYmF0Y2hfbW9kZSk7CisJCWVyciA9CisJCSAgICBpcHcyMTAwX3NldF9pYnNzX2JlYWNvbl9pbnRlcnZhbChwcml2LAorCQkJCQkJICAgICBwcml2LT5iZWFjb25faW50ZXJ2YWwsCisJCQkJCQkgICAgIGJhdGNoX21vZGUpOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKIApAQCAtNTYyNSwxOCArNTYwMywxNyBAQAogCX0KIAogCS8qCi0JICBlcnIgPSBpcHcyMTAwX3NldF9mcmFnbWVudGF0aW9uX3RocmVzaG9sZCgKLQkgIHByaXYsIHByaXYtPmZyYWdfdGhyZXNob2xkLCBiYXRjaF9tb2RlKTsKLQkgIGlmIChlcnIpCi0JICByZXR1cm4gZXJyOwotCSovCisJICAgZXJyID0gaXB3MjEwMF9zZXRfZnJhZ21lbnRhdGlvbl90aHJlc2hvbGQoCisJICAgcHJpdiwgcHJpdi0+ZnJhZ190aHJlc2hvbGQsIGJhdGNoX21vZGUpOworCSAgIGlmIChlcnIpCisJICAgcmV0dXJuIGVycjsKKwkgKi8KIAogCUlQV19ERUJVR19JTkZPKCJleGl0XG4iKTsKIAogCXJldHVybiAwOwogfQogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogRVhURVJOQUxMWSBDQUxMRUQgTUVUSE9EUwpAQCAtNTY2OSw3ICs1NjQ2LDcgQEAKIAlpcHcyMTAwX3Jlc2V0X2FkYXB0ZXIocHJpdik7CiAJcmV0dXJuIDA7CiAKLSBkb25lOgorICAgICAgZG9uZToKIAl1cCgmcHJpdi0+YWN0aW9uX3NlbSk7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTU3MDgsNyArNTY4NSw3IEBACiAJLyogRmx1c2ggdGhlIFRYIHF1ZXVlIC4uLiAqLwogCXdoaWxlICghbGlzdF9lbXB0eSgmcHJpdi0+dHhfcGVuZF9saXN0KSkgewogCQllbGVtZW50ID0gcHJpdi0+dHhfcGVuZF9saXN0Lm5leHQ7Ci0gICAgICAgICAgICAgICAgcGFja2V0ID0gbGlzdF9lbnRyeShlbGVtZW50LCBzdHJ1Y3QgaXB3MjEwMF90eF9wYWNrZXQsIGxpc3QpOworCQlwYWNrZXQgPSBsaXN0X2VudHJ5KGVsZW1lbnQsIHN0cnVjdCBpcHcyMTAwX3R4X3BhY2tldCwgbGlzdCk7CiAKIAkJbGlzdF9kZWwoZWxlbWVudCk7CiAJCURFQ19TVEFUKCZwcml2LT50eF9wZW5kX3N0YXQpOwpAQCAtNTcyNiw4ICs1NzAzLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotCi0KIC8qCiAgKiBUT0RPOiAgRml4IHRoaXMgZnVuY3Rpb24uLi4gaXRzIGp1c3Qgd3JvbmcKICAqLwpAQCAtNTc0Nyw3ICs1NzIyLDYgQEAKIAlzY2hlZHVsZV9yZXNldChwcml2KTsKIH0KIAotCiAvKgogICogVE9ETzogcmVpbXBsZW1lbnQgaXQgc28gdGhhdCBpdCByZWFkcyBzdGF0aXN0aWNzCiAgKiAgICAgICBmcm9tIHRoZSBhZGFwdGVyIHVzaW5nIG9yZGluYWwgdGFibGVzCkBAIC01NzYxLDExICs1NzM1LDEwIEBACiAJcmV0dXJuICZwcml2LT5pZWVlLT5zdGF0czsKIH0KIAotLyogU3VwcG9ydCBmb3Igd3BhX3N1cHBsaWNhbnQuIFdpbGwgYmUgcmVwbGFjZWQgd2l0aCBXRVhUIG9uY2UKLSAqIHRoZXkgZ2V0IFdQQSBzdXBwb3J0LiAqLwotI2lmZGVmIENPTkZJR19JRUVFODAyMTFfV1BBCisjaWYgV0lSRUxFU1NfRVhUIDwgMTgKKy8qIFN1cHBvcnQgZm9yIHdwYV9zdXBwbGljYW50IGJlZm9yZSBXRS0xOCwgZGVwcmVjYXRlZC4gKi8KIAotLyogZm9sbG93aW5nIGRlZmluaXRpb25zIG11c3QgbWF0Y2ggZGVmaW5pdGlvbnMgaW4gZHJpdmVyX2lwdzIxMDAuYyAqLworLyogZm9sbG93aW5nIGRlZmluaXRpb25zIG11c3QgbWF0Y2ggZGVmaW5pdGlvbnMgaW4gZHJpdmVyX2lwdy5jICovCiAKICNkZWZpbmUgSVBXMjEwMF9JT0NUTF9XUEFfU1VQUExJQ0FOVAkJU0lPQ0lXRklSU1RQUklWKzMwCiAKQEAgLTU3OTYsMjUgKzU3NjksMjYgQEAKIHN0cnVjdCBpcHcyMTAwX3BhcmFtIHsKIAl1MzIgY21kOwogCXU4IHN0YV9hZGRyW0VUSF9BTEVOXTsKLSAgICAgICAgdW5pb24geworCXVuaW9uIHsKIAkJc3RydWN0IHsKIAkJCXU4IG5hbWU7CiAJCQl1MzIgdmFsdWU7CiAJCX0gd3BhX3BhcmFtOwogCQlzdHJ1Y3QgewogCQkJdTMyIGxlbjsKLQkJCXU4ICpkYXRhOworCQkJdTggcmVzZXJ2ZWRbMzJdOworCQkJdTggZGF0YVswXTsKIAkJfSB3cGFfaWU7Ci0JICAgICAgICBzdHJ1Y3R7Ci0JCQlpbnQgY29tbWFuZDsKLSAgICAJCQlpbnQgcmVhc29uX2NvZGU7CisJCXN0cnVjdCB7CisJCQl1MzIgY29tbWFuZDsKKwkJCXUzMiByZWFzb25fY29kZTsKIAkJfSBtbG1lOwogCQlzdHJ1Y3QgewogCQkJdTggYWxnW0lQVzIxMDBfQ1JZUFRfQUxHX05BTUVfTEVOXTsKIAkJCXU4IHNldF90eDsKIAkJCXUzMiBlcnI7CiAJCQl1OCBpZHg7Ci0JCQl1OCBzZXFbOF07IC8qIHNlcXVlbmNlIGNvdW50ZXIgKHNldDogUlgsIGdldDogVFgpICovCisJCQl1OCBzZXFbOF07CS8qIHNlcXVlbmNlIGNvdW50ZXIgKHNldDogUlgsIGdldDogVFgpICovCiAJCQl1MTYga2V5X2xlbjsKIAkJCXU4IGtleVswXTsKIAkJfSBjcnlwdDsKQEAgLTU4MjIsMzggKzU3OTYsMjQgQEAKIAl9IHU7CiB9OwogCi0vKiBlbmQgb2YgZHJpdmVyX2lwdzIxMDAuYyBjb2RlICovCisvKiBlbmQgb2YgZHJpdmVyX2lwdy5jIGNvZGUgKi8KKyNlbmRpZgkJCQkvKiBXSVJFTEVTU19FWFQgPCAxOCAqLwogCi1zdGF0aWMgaW50IGlwdzIxMDBfd3BhX2VuYWJsZShzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2LCBpbnQgdmFsdWUpewotCi0Jc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUgPSBwcml2LT5pZWVlOwotCXN0cnVjdCBpZWVlODAyMTFfc2VjdXJpdHkgc2VjID0gewotCQkuZmxhZ3MgPSBTRUNfTEVWRUwgfCBTRUNfRU5BQkxFRCwKLQl9OwotCWludCByZXQgPSAwOwotCi0JaWVlZS0+d3BhX2VuYWJsZWQgPSB2YWx1ZTsKLQotCWlmICh2YWx1ZSl7Ci0JCXNlYy5sZXZlbCA9IFNFQ19MRVZFTF8zOwotCQlzZWMuZW5hYmxlZCA9IDE7Ci0JfSBlbHNlIHsKLQkJc2VjLmxldmVsID0gU0VDX0xFVkVMXzA7Ci0JCXNlYy5lbmFibGVkID0gMDsKLQl9Ci0KLQlpZiAoaWVlZS0+c2V0X3NlY3VyaXR5KQotCQlpZWVlLT5zZXRfc2VjdXJpdHkoaWVlZS0+ZGV2LCAmc2VjKTsKLQllbHNlCi0JCXJldCA9IC1FT1BOT1RTVVBQOwotCi0JcmV0dXJuIHJldDsKK3N0YXRpYyBpbnQgaXB3MjEwMF93cGFfZW5hYmxlKHN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYsIGludCB2YWx1ZSkKK3sKKwkvKiBUaGlzIGlzIGNhbGxlZCB3aGVuIHdwYV9zdXBwbGljYW50IGxvYWRzIGFuZCBjbG9zZXMgdGhlIGRyaXZlcgorCSAqIGludGVyZmFjZS4gKi8KKwlwcml2LT5pZWVlLT53cGFfZW5hYmxlZCA9IHZhbHVlOworCXJldHVybiAwOwogfQogCi0jZGVmaW5lIEFVVEhfQUxHX09QRU5fU1lTVEVNCQkJMHgxCi0jZGVmaW5lIEFVVEhfQUxHX1NIQVJFRF9LRVkJCQkweDIKKyNpZiBXSVJFTEVTU19FWFQgPCAxOAorI2RlZmluZSBJV19BVVRIX0FMR19PUEVOX1NZU1RFTQkJCTB4MQorI2RlZmluZSBJV19BVVRIX0FMR19TSEFSRURfS0VZCQkJMHgyCisjZW5kaWYKIAotc3RhdGljIGludCBpcHcyMTAwX3dwYV9zZXRfYXV0aF9hbGdzKHN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYsIGludCB2YWx1ZSl7CitzdGF0aWMgaW50IGlwdzIxMDBfd3BhX3NldF9hdXRoX2FsZ3Moc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiwgaW50IHZhbHVlKQorewogCiAJc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUgPSBwcml2LT5pZWVlOwogCXN0cnVjdCBpZWVlODAyMTFfc2VjdXJpdHkgc2VjID0gewpAQCAtNTg2MSwxMyArNTgyMSwxNCBAQAogCX07CiAJaW50IHJldCA9IDA7CiAKLQlpZiAodmFsdWUgJiBBVVRIX0FMR19TSEFSRURfS0VZKXsKKwlpZiAodmFsdWUgJiBJV19BVVRIX0FMR19TSEFSRURfS0VZKSB7CiAJCXNlYy5hdXRoX21vZGUgPSBXTEFOX0FVVEhfU0hBUkVEX0tFWTsKIAkJaWVlZS0+b3Blbl93ZXAgPSAwOwotCX0gZWxzZSB7CisJfSBlbHNlIGlmICh2YWx1ZSAmIElXX0FVVEhfQUxHX09QRU5fU1lTVEVNKSB7CiAJCXNlYy5hdXRoX21vZGUgPSBXTEFOX0FVVEhfT1BFTjsKIAkJaWVlZS0+b3Blbl93ZXAgPSAxOwotCX0KKwl9IGVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoaWVlZS0+c2V0X3NlY3VyaXR5KQogCQlpZWVlLT5zZXRfc2VjdXJpdHkoaWVlZS0+ZGV2LCAmc2VjKTsKQEAgLTU4NzcsNzIgKzU4MzgsOSBAQAogCXJldHVybiByZXQ7CiB9CiAKLQotc3RhdGljIGludCBpcHcyMTAwX3dwYV9zZXRfcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggbmFtZSwgdTMyIHZhbHVlKXsKLQotCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwotCWludCByZXQ9MDsKLQotCXN3aXRjaChuYW1lKXsKLQkJY2FzZSBJUFcyMTAwX1BBUkFNX1dQQV9FTkFCTEVEOgotCQkJcmV0ID0gaXB3MjEwMF93cGFfZW5hYmxlKHByaXYsIHZhbHVlKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgSVBXMjEwMF9QQVJBTV9US0lQX0NPVU5URVJNRUFTVVJFUzoKLQkJCXByaXYtPmllZWUtPnRraXBfY291bnRlcm1lYXN1cmVzPXZhbHVlOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBJUFcyMTAwX1BBUkFNX0RST1BfVU5FTkNSWVBURUQ6Ci0JCQlwcml2LT5pZWVlLT5kcm9wX3VuZW5jcnlwdGVkPXZhbHVlOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBJUFcyMTAwX1BBUkFNX1BSSVZBQ1lfSU5WT0tFRDoKLQkJCXByaXYtPmllZWUtPnByaXZhY3lfaW52b2tlZD12YWx1ZTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgSVBXMjEwMF9QQVJBTV9BVVRIX0FMR1M6Ci0JCQlyZXQgPSBpcHcyMTAwX3dwYV9zZXRfYXV0aF9hbGdzKHByaXYsIHZhbHVlKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgSVBXMjEwMF9QQVJBTV9JRUVFXzgwMl8xWDoKLQkJCXByaXYtPmllZWUtPmllZWU4MDJfMXg9dmFsdWU7Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6ICVzOiBVbmtub3duIFdQQSBwYXJhbTogJWRcbiIsCi0JCQkJCSAgICBkZXYtPm5hbWUsIG5hbWUpOwotCQkJcmV0ID0gLUVPUE5PVFNVUFA7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBpcHcyMTAwX3dwYV9tbG1lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBjb21tYW5kLCBpbnQgcmVhc29uKXsKLQotCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwotCWludCByZXQ9MDsKLQotCXN3aXRjaChjb21tYW5kKXsKLQkJY2FzZSBJUFcyMTAwX01MTUVfU1RBX0RFQVVUSDoKLQkJCS8vIHNpbGVudGx5IGlnbm9yZQotCQkJYnJlYWs7Ci0KLQkJY2FzZSBJUFcyMTAwX01MTUVfU1RBX0RJU0FTU09DOgotCQkJaXB3MjEwMF9kaXNhc3NvY2lhdGVfYnNzaWQocHJpdik7Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6ICVzOiBVbmtub3duIE1MTUUgcmVxdWVzdDogJWRcbiIsCi0JCQkJCSAgICBkZXYtPm5hbWUsIGNvbW1hbmQpOwotCQkJcmV0ID0gLUVPUE5PVFNVUFA7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotCiB2b2lkIGlwdzIxMDBfd3BhX2Fzc29jX2ZyYW1lKHN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYsCi0JCQkgICAgIGNoYXIgKndwYV9pZSwgaW50IHdwYV9pZV9sZW4peworCQkJICAgICBjaGFyICp3cGFfaWUsIGludCB3cGFfaWVfbGVuKQorewogCiAJc3RydWN0IGlwdzIxMDBfd3BhX2Fzc29jX2ZyYW1lIGZyYW1lOwogCkBAIC01OTU3LDIzICs1ODU1LDExOCBAQAogCWlwdzIxMDBfc2V0X3dwYV9pZShwcml2LCAmZnJhbWUsIDApOwogfQogCisjaWYgV0lSRUxFU1NfRVhUIDwgMTgKK3N0YXRpYyBpbnQgaXB3MjEwMF93cGFfc2V0X3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IG5hbWUsIHUzMiB2YWx1ZSkKK3sKKwlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NyeXB0X2RhdGEgKmNyeXB0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldCA9IDA7CisKKwlzd2l0Y2ggKG5hbWUpIHsKKwljYXNlIElQVzIxMDBfUEFSQU1fV1BBX0VOQUJMRUQ6CisJCXJldCA9IGlwdzIxMDBfd3BhX2VuYWJsZShwcml2LCB2YWx1ZSk7CisJCWJyZWFrOworCisJY2FzZSBJUFcyMTAwX1BBUkFNX1RLSVBfQ09VTlRFUk1FQVNVUkVTOgorCQljcnlwdCA9IHByaXYtPmllZWUtPmNyeXB0W3ByaXYtPmllZWUtPnR4X2tleWlkeF07CisJCWlmICghY3J5cHQgfHwgIWNyeXB0LT5vcHMtPnNldF9mbGFncyB8fCAhY3J5cHQtPm9wcy0+Z2V0X2ZsYWdzKQorCQkJYnJlYWs7CisKKwkJZmxhZ3MgPSBjcnlwdC0+b3BzLT5nZXRfZmxhZ3MoY3J5cHQtPnByaXYpOworCisJCWlmICh2YWx1ZSkKKwkJCWZsYWdzIHw9IElFRUU4MDIxMV9DUllQVE9fVEtJUF9DT1VOVEVSTUVBU1VSRVM7CisJCWVsc2UKKwkJCWZsYWdzICY9IH5JRUVFODAyMTFfQ1JZUFRPX1RLSVBfQ09VTlRFUk1FQVNVUkVTOworCisJCWNyeXB0LT5vcHMtPnNldF9mbGFncyhmbGFncywgY3J5cHQtPnByaXYpOworCisJCWJyZWFrOworCisJY2FzZSBJUFcyMTAwX1BBUkFNX0RST1BfVU5FTkNSWVBURUQ6eworCQkJLyogU2VlIElXX0FVVEhfRFJPUF9VTkVOQ1JZUFRFRCBoYW5kbGluZyBmb3IgZGV0YWlscyAqLworCQkJc3RydWN0IGllZWU4MDIxMV9zZWN1cml0eSBzZWMgPSB7CisJCQkJLmZsYWdzID0gU0VDX0VOQUJMRUQsCisJCQkJLmVuYWJsZWQgPSB2YWx1ZSwKKwkJCX07CisJCQlwcml2LT5pZWVlLT5kcm9wX3VuZW5jcnlwdGVkID0gdmFsdWU7CisJCQkvKiBXZSBvbmx5IGNoYW5nZSBTRUNfTEVWRUwgZm9yIG9wZW4gbW9kZS4gT3RoZXJzCisJCQkgKiBhcmUgc2V0IGJ5IGlwd193cGFfc2V0X2VuY3J5cHRpb24uCisJCQkgKi8KKwkJCWlmICghdmFsdWUpIHsKKwkJCQlzZWMuZmxhZ3MgfD0gU0VDX0xFVkVMOworCQkJCXNlYy5sZXZlbCA9IFNFQ19MRVZFTF8wOworCQkJfSBlbHNlIHsKKwkJCQlzZWMuZmxhZ3MgfD0gU0VDX0xFVkVMOworCQkJCXNlYy5sZXZlbCA9IFNFQ19MRVZFTF8xOworCQkJfQorCQkJaWYgKHByaXYtPmllZWUtPnNldF9zZWN1cml0eSkKKwkJCQlwcml2LT5pZWVlLT5zZXRfc2VjdXJpdHkocHJpdi0+aWVlZS0+ZGV2LCAmc2VjKTsKKwkJCWJyZWFrOworCQl9CisKKwljYXNlIElQVzIxMDBfUEFSQU1fUFJJVkFDWV9JTlZPS0VEOgorCQlwcml2LT5pZWVlLT5wcml2YWN5X2ludm9rZWQgPSB2YWx1ZTsKKwkJYnJlYWs7CisKKwljYXNlIElQVzIxMDBfUEFSQU1fQVVUSF9BTEdTOgorCQlyZXQgPSBpcHcyMTAwX3dwYV9zZXRfYXV0aF9hbGdzKHByaXYsIHZhbHVlKTsKKwkJYnJlYWs7CisKKwljYXNlIElQVzIxMDBfUEFSQU1fSUVFRV84MDJfMVg6CisJCXByaXYtPmllZWUtPmllZWU4MDJfMXggPSB2YWx1ZTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogJXM6IFVua25vd24gV1BBIHBhcmFtOiAlZFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgbmFtZSk7CisJCXJldCA9IC1FT1BOT1RTVVBQOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaXB3MjEwMF93cGFfbWxtZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgY29tbWFuZCwgaW50IHJlYXNvbikKK3sKKworCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCWludCByZXQgPSAwOworCisJc3dpdGNoIChjb21tYW5kKSB7CisJY2FzZSBJUFcyMTAwX01MTUVfU1RBX0RFQVVUSDoKKwkJLy8gc2lsZW50bHkgaWdub3JlCisJCWJyZWFrOworCisJY2FzZSBJUFcyMTAwX01MTUVfU1RBX0RJU0FTU09DOgorCQlpcHcyMTAwX2Rpc2Fzc29jaWF0ZV9ic3NpZChwcml2KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogJXM6IFVua25vd24gTUxNRSByZXF1ZXN0OiAlZFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgY29tbWFuZCk7CisJCXJldCA9IC1FT1BOT1RTVVBQOworCX0KKworCXJldHVybiByZXQ7Cit9CiAKIHN0YXRpYyBpbnQgaXB3MjEwMF93cGFfc2V0X3dwYV9pZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCXN0cnVjdCBpcHcyMTAwX3BhcmFtICpwYXJhbSwgaW50IHBsZW4peworCQkJCSAgc3RydWN0IGlwdzIxMDBfcGFyYW0gKnBhcmFtLCBpbnQgcGxlbikKK3sKIAogCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwogCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlID0gcHJpdi0+aWVlZTsKIAl1OCAqYnVmOwogCi0JaWYgKCEgaWVlZS0+d3BhX2VuYWJsZWQpCi0JICAgIHJldHVybiAtRU9QTk9UU1VQUDsKKwlpZiAoIWllZWUtPndwYV9lbmFibGVkKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKIAlpZiAocGFyYW0tPnUud3BhX2llLmxlbiA+IE1BWF9XUEFfSUVfTEVOIHx8Ci0JICAgKHBhcmFtLT51LndwYV9pZS5sZW4gJiYKLQkJcGFyYW0tPnUud3BhX2llLmRhdGE9PU5VTEwpKQorCSAgICAocGFyYW0tPnUud3BhX2llLmxlbiAmJiBwYXJhbS0+dS53cGFfaWUuZGF0YSA9PSBOVUxMKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAocGFyYW0tPnUud3BhX2llLmxlbil7CisJaWYgKHBhcmFtLT51LndwYV9pZS5sZW4pIHsKIAkJYnVmID0ga21hbGxvYyhwYXJhbS0+dS53cGFfaWUubGVuLCBHRlBfS0VSTkVMKTsKIAkJaWYgKGJ1ZiA9PSBOVUxMKQogCQkJcmV0dXJuIC1FTk9NRU07CkBAIC01OTk4LDggKzU5OTEsOSBAQAogLyogaW1wbGVtZW50YXRpb24gYm9ycm93ZWQgZnJvbSBob3N0YXAgZHJpdmVyICovCiAKIHN0YXRpYyBpbnQgaXB3MjEwMF93cGFfc2V0X2VuY3J5cHRpb24oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQlzdHJ1Y3QgaXB3MjEwMF9wYXJhbSAqcGFyYW0sIGludCBwYXJhbV9sZW4pewotCisJCQkJICAgICAgc3RydWN0IGlwdzIxMDBfcGFyYW0gKnBhcmFtLAorCQkJCSAgICAgIGludCBwYXJhbV9sZW4pCit7CiAJaW50IHJldCA9IDA7CiAJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CiAJc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUgPSBwcml2LT5pZWVlOwpAQCAtNjAxNCw5ICs2MDA4LDEwIEBACiAJcGFyYW0tPnUuY3J5cHQuYWxnW0lQVzIxMDBfQ1JZUFRfQUxHX05BTUVfTEVOIC0gMV0gPSAnXDAnOwogCiAJaWYgKHBhcmFtX2xlbiAhPQotCSAgICAoaW50KSAoKGNoYXIgKikgcGFyYW0tPnUuY3J5cHQua2V5IC0gKGNoYXIgKikgcGFyYW0pICsKLQkgICAgcGFyYW0tPnUuY3J5cHQua2V5X2xlbil7Ci0JCUlQV19ERUJVR19JTkZPKCJMZW4gbWlzbWF0Y2ggJWQsICVkXG4iLCBwYXJhbV9sZW4sIHBhcmFtLT51LmNyeXB0LmtleV9sZW4pOworCSAgICAoaW50KSgoY2hhciAqKXBhcmFtLT51LmNyeXB0LmtleSAtIChjaGFyICopcGFyYW0pICsKKwkgICAgcGFyYW0tPnUuY3J5cHQua2V5X2xlbikgeworCQlJUFdfREVCVUdfSU5GTygiTGVuIG1pc21hdGNoICVkLCAlZFxuIiwgcGFyYW1fbGVuLAorCQkJICAgICAgIHBhcmFtLT51LmNyeXB0LmtleV9sZW4pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaWYgKHBhcmFtLT5zdGFfYWRkclswXSA9PSAweGZmICYmIHBhcmFtLT5zdGFfYWRkclsxXSA9PSAweGZmICYmCkBAIC02MDI5LDE3ICs2MDI0LDE5IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCXNlYy5mbGFncyB8PSBTRUNfRU5BQkxFRCB8IFNFQ19FTkNSWVBUOwogCWlmIChzdHJjbXAocGFyYW0tPnUuY3J5cHQuYWxnLCAibm9uZSIpID09IDApIHsKLQkJaWYgKGNyeXB0KXsKKwkJaWYgKGNyeXB0KSB7CiAJCQlzZWMuZW5hYmxlZCA9IDA7CisJCQlzZWMuZW5jcnlwdCA9IDA7CiAJCQlzZWMubGV2ZWwgPSBTRUNfTEVWRUxfMDsKLQkJCXNlYy5mbGFncyB8PSBTRUNfRU5BQkxFRCB8IFNFQ19MRVZFTDsKKwkJCXNlYy5mbGFncyB8PSBTRUNfTEVWRUw7CiAJCQlpZWVlODAyMTFfY3J5cHRfZGVsYXllZF9kZWluaXQoaWVlZSwgY3J5cHQpOwogCQl9CiAJCWdvdG8gZG9uZTsKIAl9CiAJc2VjLmVuYWJsZWQgPSAxOwotCXNlYy5mbGFncyB8PSBTRUNfRU5BQkxFRDsKKwlzZWMuZW5jcnlwdCA9IDE7CiAKIAlvcHMgPSBpZWVlODAyMTFfZ2V0X2NyeXB0b19vcHMocGFyYW0tPnUuY3J5cHQuYWxnKTsKIAlpZiAob3BzID09IE5VTEwgJiYgc3RyY21wKHBhcmFtLT51LmNyeXB0LmFsZywgIldFUCIpID09IDApIHsKQEAgLTYwNTQsNyArNjA1MSw3IEBACiAJfQogCWlmIChvcHMgPT0gTlVMTCkgewogCQlJUFdfREVCVUdfSU5GTygiJXM6IHVua25vd24gY3J5cHRvIGFsZyAnJXMnXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBwYXJhbS0+dS5jcnlwdC5hbGcpOworCQkJICAgICAgIGRldi0+bmFtZSwgcGFyYW0tPnUuY3J5cHQuYWxnKTsKIAkJcGFyYW0tPnUuY3J5cHQuZXJyID0gSVBXMjEwMF9DUllQVF9FUlJfVU5LTk9XTl9BTEc7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gZG9uZTsKQEAgLTYwNjUsMjEgKzYwNjIsMjAgQEAKIAogCQlpZWVlODAyMTFfY3J5cHRfZGVsYXllZF9kZWluaXQoaWVlZSwgY3J5cHQpOwogCi0JCW5ld19jcnlwdCA9IChzdHJ1Y3QgaWVlZTgwMjExX2NyeXB0X2RhdGEgKikKLQkJCWttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfY3J5cHRfZGF0YSksIEdGUF9LRVJORUwpOworCQluZXdfY3J5cHQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2NyeXB0X2RhdGEpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKG5ld19jcnlwdCA9PSBOVUxMKSB7CiAJCQlyZXQgPSAtRU5PTUVNOwogCQkJZ290byBkb25lOwogCQl9Ci0JCW1lbXNldChuZXdfY3J5cHQsIDAsIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2NyeXB0X2RhdGEpKTsKIAkJbmV3X2NyeXB0LT5vcHMgPSBvcHM7CiAJCWlmIChuZXdfY3J5cHQtPm9wcyAmJiB0cnlfbW9kdWxlX2dldChuZXdfY3J5cHQtPm9wcy0+b3duZXIpKQotCQkJbmV3X2NyeXB0LT5wcml2ID0gbmV3X2NyeXB0LT5vcHMtPmluaXQocGFyYW0tPnUuY3J5cHQuaWR4KTsKKwkJCW5ld19jcnlwdC0+cHJpdiA9CisJCQkgICAgbmV3X2NyeXB0LT5vcHMtPmluaXQocGFyYW0tPnUuY3J5cHQuaWR4KTsKIAogCQlpZiAobmV3X2NyeXB0LT5wcml2ID09IE5VTEwpIHsKIAkJCWtmcmVlKG5ld19jcnlwdCk7CiAJCQlwYXJhbS0+dS5jcnlwdC5lcnIgPQotCQkJCUlQVzIxMDBfQ1JZUFRfRVJSX0NSWVBUX0lOSVRfRkFJTEVEOworCQkJICAgIElQVzIxMDBfQ1JZUFRfRVJSX0NSWVBUX0lOSVRfRkFJTEVEOwogCQkJcmV0ID0gLUVJTlZBTDsKIAkJCWdvdG8gZG9uZTsKIAkJfQpAQCAtNjA5MSwyNCArNjA4NywyNSBAQAogCSAgICAoKmNyeXB0KS0+b3BzLT5zZXRfa2V5KHBhcmFtLT51LmNyeXB0LmtleSwKIAkJCQkgICBwYXJhbS0+dS5jcnlwdC5rZXlfbGVuLCBwYXJhbS0+dS5jcnlwdC5zZXEsCiAJCQkJICAgKCpjcnlwdCktPnByaXYpIDwgMCkgewotCQlJUFdfREVCVUdfSU5GTygiJXM6IGtleSBzZXR0aW5nIGZhaWxlZFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7CisJCUlQV19ERUJVR19JTkZPKCIlczoga2V5IHNldHRpbmcgZmFpbGVkXG4iLCBkZXYtPm5hbWUpOwogCQlwYXJhbS0+dS5jcnlwdC5lcnIgPSBJUFcyMTAwX0NSWVBUX0VSUl9LRVlfU0VUX0ZBSUxFRDsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBkb25lOwogCX0KIAotCWlmIChwYXJhbS0+dS5jcnlwdC5zZXRfdHgpeworCWlmIChwYXJhbS0+dS5jcnlwdC5zZXRfdHgpIHsKIAkJaWVlZS0+dHhfa2V5aWR4ID0gcGFyYW0tPnUuY3J5cHQuaWR4OwogCQlzZWMuYWN0aXZlX2tleSA9IHBhcmFtLT51LmNyeXB0LmlkeDsKIAkJc2VjLmZsYWdzIHw9IFNFQ19BQ1RJVkVfS0VZOwogCX0KIAotCWlmIChvcHMtPm5hbWUgIT0gTlVMTCl7CisJaWYgKG9wcy0+bmFtZSAhPSBOVUxMKSB7CiAKIAkJaWYgKHN0cmNtcChvcHMtPm5hbWUsICJXRVAiKSA9PSAwKSB7Ci0JCQltZW1jcHkoc2VjLmtleXNbcGFyYW0tPnUuY3J5cHQuaWR4XSwgcGFyYW0tPnUuY3J5cHQua2V5LCBwYXJhbS0+dS5jcnlwdC5rZXlfbGVuKTsKLQkJCXNlYy5rZXlfc2l6ZXNbcGFyYW0tPnUuY3J5cHQuaWR4XSA9IHBhcmFtLT51LmNyeXB0LmtleV9sZW47CisJCQltZW1jcHkoc2VjLmtleXNbcGFyYW0tPnUuY3J5cHQuaWR4XSwKKwkJCSAgICAgICBwYXJhbS0+dS5jcnlwdC5rZXksIHBhcmFtLT51LmNyeXB0LmtleV9sZW4pOworCQkJc2VjLmtleV9zaXplc1twYXJhbS0+dS5jcnlwdC5pZHhdID0KKwkJCSAgICBwYXJhbS0+dS5jcnlwdC5rZXlfbGVuOwogCQkJc2VjLmZsYWdzIHw9ICgxIDw8IHBhcmFtLT51LmNyeXB0LmlkeCk7CiAJCQlzZWMuZmxhZ3MgfD0gU0VDX0xFVkVMOwogCQkJc2VjLmxldmVsID0gU0VDX0xFVkVMXzE7CkBAIC02MTIwLDcgKzYxMTcsNyBAQAogCQkJc2VjLmxldmVsID0gU0VDX0xFVkVMXzM7CiAJCX0KIAl9Ci0gZG9uZToKKyAgICAgIGRvbmU6CiAJaWYgKGllZWUtPnNldF9zZWN1cml0eSkKIAkJaWVlZS0+c2V0X3NlY3VyaXR5KGllZWUtPmRldiwgJnNlYyk7CiAKQEAgLTYxMzEsOCArNjEyOCw3IEBACiAJICogdGhlIGNhbGxiYWNrcyBzdHJ1Y3R1cmVzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgODAyLjExIHN0YWNrLiAqLwogCWlmIChpZWVlLT5yZXNldF9vbl9rZXljaGFuZ2UgJiYKIAkgICAgaWVlZS0+aXdfbW9kZSAhPSBJV19NT0RFX0lORlJBICYmCi0JICAgIGllZWUtPnJlc2V0X3BvcnQgJiYKLQkgICAgaWVlZS0+cmVzZXRfcG9ydChkZXYpKSB7CisJICAgIGllZWUtPnJlc2V0X3BvcnQgJiYgaWVlZS0+cmVzZXRfcG9ydChkZXYpKSB7CiAJCUlQV19ERUJVR19JTkZPKCIlczogcmVzZXRfcG9ydCBmYWlsZWRcbiIsIGRldi0+bmFtZSk7CiAJCXBhcmFtLT51LmNyeXB0LmVyciA9IElQVzIxMDBfQ1JZUFRfRVJSX0NBUkRfQ09ORl9GQUlMRUQ7CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNjE0MSwxMSArNjEzNywxMSBAQAogCXJldHVybiByZXQ7CiB9CiAKLQotc3RhdGljIGludCBpcHcyMTAwX3dwYV9zdXBwbGljYW50KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19wb2ludCAqcCl7CitzdGF0aWMgaW50IGlwdzIxMDBfd3BhX3N1cHBsaWNhbnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGl3X3BvaW50ICpwKQorewogCiAJc3RydWN0IGlwdzIxMDBfcGFyYW0gKnBhcmFtOwotCWludCByZXQ9MDsKKwlpbnQgcmV0ID0gMDsKIAogCUlQV19ERUJVR19JT0NUTCgid3BhX3N1cHBsaWNhbnQ6IGxlbj0lZFxuIiwgcC0+bGVuZ3RoKTsKIApAQCAtNjE1NiwxMiArNjE1MiwxMiBAQAogCWlmIChwYXJhbSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWlmIChjb3B5X2Zyb21fdXNlcihwYXJhbSwgcC0+cG9pbnRlciwgcC0+bGVuZ3RoKSl7CisJaWYgKGNvcHlfZnJvbV91c2VyKHBhcmFtLCBwLT5wb2ludGVyLCBwLT5sZW5ndGgpKSB7CiAJCWtmcmVlKHBhcmFtKTsKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCi0Jc3dpdGNoIChwYXJhbS0+Y21kKXsKKwlzd2l0Y2ggKHBhcmFtLT5jbWQpIHsKIAogCWNhc2UgSVBXMjEwMF9DTURfU0VUX1dQQV9QQVJBTToKIAkJcmV0ID0gaXB3MjEwMF93cGFfc2V0X3BhcmFtKGRldiwgcGFyYW0tPnUud3BhX3BhcmFtLm5hbWUsCkBAIC02MTgyLDggKzYxNzgsOSBAQAogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiAlczogVW5rbm93biBXUEEgc3VwcGxpY2FudCByZXF1ZXN0OiAlZFxuIiwKLQkJCQlkZXYtPm5hbWUsIHBhcmFtLT5jbWQpOworCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUKKwkJICAgICAgICI6ICVzOiBVbmtub3duIFdQQSBzdXBwbGljYW50IHJlcXVlc3Q6ICVkXG4iLCBkZXYtPm5hbWUsCisJCSAgICAgICBwYXJhbS0+Y21kKTsKIAkJcmV0ID0gLUVPUE5PVFNVUFA7CiAKIAl9CkBAIC02MTk0LDI3ICs2MTkxLDIzIEBACiAJa2ZyZWUocGFyYW0pOwogCXJldHVybiByZXQ7CiB9Ci0jZW5kaWYgLyogQ09ORklHX0lFRUU4MDIxMV9XUEEgKi8KIAogc3RhdGljIGludCBpcHcyMTAwX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpCiB7Ci0jaWZkZWYgQ09ORklHX0lFRUU4MDIxMV9XUEEKLQlzdHJ1Y3QgaXdyZXEgKndycSA9IChzdHJ1Y3QgaXdyZXEgKikgcnE7Ci0JaW50IHJldD0tMTsKLQlzd2l0Y2ggKGNtZCl7Ci0JICAgIGNhc2UgSVBXMjEwMF9JT0NUTF9XUEFfU1VQUExJQ0FOVDoKKwlzdHJ1Y3QgaXdyZXEgKndycSA9IChzdHJ1Y3QgaXdyZXEgKilycTsKKwlpbnQgcmV0ID0gLTE7CisJc3dpdGNoIChjbWQpIHsKKwljYXNlIElQVzIxMDBfSU9DVExfV1BBX1NVUFBMSUNBTlQ6CiAJCXJldCA9IGlwdzIxMDBfd3BhX3N1cHBsaWNhbnQoZGV2LCAmd3JxLT51LmRhdGEpOwogCQlyZXR1cm4gcmV0OwogCi0JICAgIGRlZmF1bHQ6CisJZGVmYXVsdDoKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KIAotI2VuZGlmIC8qIENPTkZJR19JRUVFODAyMTFfV1BBICovCi0KIAlyZXR1cm4gLUVPUE5PVFNVUFA7CiB9Ci0KKyNlbmRpZgkJCQkvKiBXSVJFTEVTU19FWFQgPCAxOCAqLwogCiBzdGF0aWMgdm9pZCBpcHdfZXRodG9vbF9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCSAgICBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICppbmZvKQpAQCAtNjIzNiwxNCArNjIyOSwxMyBAQAogCiBzdGF0aWMgdTMyIGlwdzIxMDBfZXRodG9vbF9nZXRfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotICAgIHN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwotICAgIHJldHVybiAocHJpdi0+c3RhdHVzICYgU1RBVFVTX0FTU09DSUFURUQpID8gMSA6IDA7CisJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJcmV0dXJuIChwcml2LT5zdGF0dXMgJiBTVEFUVVNfQVNTT0NJQVRFRCkgPyAxIDogMDsKIH0KIAotCiBzdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIGlwdzIxMDBfZXRodG9vbF9vcHMgPSB7Ci0gICAgLmdldF9saW5rICAgICAgICA9IGlwdzIxMDBfZXRodG9vbF9nZXRfbGluaywKLSAgICAuZ2V0X2RydmluZm8gICAgID0gaXB3X2V0aHRvb2xfZ2V0X2RydmluZm8sCisJLmdldF9saW5rID0gaXB3MjEwMF9ldGh0b29sX2dldF9saW5rLAorCS5nZXRfZHJ2aW5mbyA9IGlwd19ldGh0b29sX2dldF9kcnZpbmZvLAogfTsKIAogc3RhdGljIHZvaWQgaXB3MjEwMF9oYW5nX2NoZWNrKHZvaWQgKmFkYXB0ZXIpCkBAIC02Mjg4LDcgKzYyODAsNiBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvd19sb2NrLCBmbGFncyk7CiB9CiAKLQogc3RhdGljIHZvaWQgaXB3MjEwMF9yZl9raWxsKHZvaWQgKmFkYXB0ZXIpCiB7CiAJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGFkYXB0ZXI7CkBAIC02MzEzLDcgKzYzMDQsNyBAQAogCQlJUFdfREVCVUdfUkZfS0lMTCgiSFcgUkYgS2lsbCBkZWFjdGl2YXRlZC4gIFNXIFJGIEtpbGwgc3RpbGwgIgogCQkJCSAgImVuYWJsZWRcbiIpOwogCi0gZXhpdF91bmxvY2s6CisgICAgICBleGl0X3VubG9jazoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb3dfbG9jaywgZmxhZ3MpOwogfQogCkBAIC02MzIxLDExICs2MzEyLDEwIEBACiAKIC8qIExvb2sgaW50byB1c2luZyBuZXRkZXYgZGVzdHJ1Y3RvciB0byBzaHV0ZG93biBpZWVlODAyMTE/ICovCiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqaXB3MjEwMF9hbGxvY19kZXZpY2UoCi0Jc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYsCi0Jdm9pZCBfX2lvbWVtICpiYXNlX2FkZHIsCi0JdW5zaWduZWQgbG9uZyBtZW1fc3RhcnQsCi0JdW5zaWduZWQgbG9uZyBtZW1fbGVuKQorc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICppcHcyMTAwX2FsbG9jX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiwKKwkJCQkJICAgICAgIHZvaWQgX19pb21lbSAqIGJhc2VfYWRkciwKKwkJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgbWVtX3N0YXJ0LAorCQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBtZW1fbGVuKQogewogCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXY7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKQEAgLTYzNDEsMTcgKzYzMzEsMjIgQEAKIAlwcml2LT5pZWVlLT5oYXJkX3N0YXJ0X3htaXQgPSBpcHcyMTAwX3R4OwogCXByaXYtPmllZWUtPnNldF9zZWN1cml0eSA9IHNoaW1fX3NldF9zZWN1cml0eTsKIAorCXByaXYtPmllZWUtPnBlcmZlY3RfcnNzaSA9IC0yMDsKKwlwcml2LT5pZWVlLT53b3JzdF9yc3NpID0gLTg1OworCiAJZGV2LT5vcGVuID0gaXB3MjEwMF9vcGVuOwogCWRldi0+c3RvcCA9IGlwdzIxMDBfY2xvc2U7CiAJZGV2LT5pbml0ID0gaXB3MjEwMF9uZXRfaW5pdDsKKyNpZiBXSVJFTEVTU19FWFQgPCAxOAogCWRldi0+ZG9faW9jdGwgPSBpcHcyMTAwX2lvY3RsOworI2VuZGlmCiAJZGV2LT5nZXRfc3RhdHMgPSBpcHcyMTAwX3N0YXRzOwogCWRldi0+ZXRodG9vbF9vcHMgPSAmaXB3MjEwMF9ldGh0b29sX29wczsKIAlkZXYtPnR4X3RpbWVvdXQgPSBpcHcyMTAwX3R4X3RpbWVvdXQ7CiAJZGV2LT53aXJlbGVzc19oYW5kbGVycyA9ICZpcHcyMTAwX3d4X2hhbmRsZXJfZGVmOwogCWRldi0+Z2V0X3dpcmVsZXNzX3N0YXRzID0gaXB3MjEwMF93eF93aXJlbGVzc19zdGF0czsKIAlkZXYtPnNldF9tYWNfYWRkcmVzcyA9IGlwdzIxMDBfc2V0X2FkZHJlc3M7Ci0JZGV2LT53YXRjaGRvZ190aW1lbyA9IDMqSFo7CisJZGV2LT53YXRjaGRvZ190aW1lbyA9IDMgKiBIWjsKIAlkZXYtPmlycSA9IDA7CiAKIAlkZXYtPmJhc2VfYWRkciA9ICh1bnNpZ25lZCBsb25nKWJhc2VfYWRkcjsKQEAgLTYzNjQsMjIgKzYzNTksMTkgQEAKIAkgKiBlbmRzIHVwIGNhdXNpbmcgcHJvYmxlbXMuICBTbywgd2UganVzdCBoYW5kbGUKIAkgKiB0aGUgV1ggZXh0ZW5zaW9ucyB0aHJvdWdoIHRoZSBpcHcyMTAwX2lvY3RsIGludGVyZmFjZSAqLwogCi0KIAkvKiBtZW1zZXQoKSBwdXRzIGV2ZXJ5dGhpbmcgdG8gMCwgc28gd2Ugb25seSBoYXZlIGV4cGxpY2l0ZWx5IHNldAogCSAqIHRob3NlIHZhbHVlcyB0aGF0IG5lZWQgdG8gYmUgc29tZXRoaW5nIGVsc2UgKi8KIAogCS8qIElmIHBvd2VyIG1hbmFnZW1lbnQgaXMgdHVybmVkIG9uLCBkZWZhdWx0IHRvIEFVVE8gbW9kZSAqLwogCXByaXYtPnBvd2VyX21vZGUgPSBJUFdfUE9XRVJfQVVUTzsKIAotCi0KLSNpZmRlZiBDT05GSUdfSUVFRTgwMjExX1dQQQorI2lmZGVmIENPTkZJR19JUFcyMTAwX01PTklUT1IKKwlwcml2LT5jb25maWcgfD0gQ0ZHX0NSQ19DSEVDSzsKKyNlbmRpZgogCXByaXYtPmllZWUtPndwYV9lbmFibGVkID0gMDsKLQlwcml2LT5pZWVlLT50a2lwX2NvdW50ZXJtZWFzdXJlcyA9IDA7CiAJcHJpdi0+aWVlZS0+ZHJvcF91bmVuY3J5cHRlZCA9IDA7CiAJcHJpdi0+aWVlZS0+cHJpdmFjeV9pbnZva2VkID0gMDsKIAlwcml2LT5pZWVlLT5pZWVlODAyXzF4ID0gMTsKLSNlbmRpZiAvKiBDT05GSUdfSUVFRTgwMjExX1dQQSAqLwogCiAJLyogU2V0IG1vZHVsZSBwYXJhbWV0ZXJzICovCiAJc3dpdGNoIChtb2RlKSB7CkBAIC02NDAxLDggKzYzOTMsNyBAQAogCQlwcml2LT5zdGF0dXMgfD0gU1RBVFVTX1JGX0tJTExfU1c7CiAKIAlpZiAoY2hhbm5lbCAhPSAwICYmCi0JICAgICgoY2hhbm5lbCA+PSBSRUdfTUlOX0NIQU5ORUwpICYmCi0JICAgICAoY2hhbm5lbCA8PSBSRUdfTUFYX0NIQU5ORUwpKSkgeworCSAgICAoKGNoYW5uZWwgPj0gUkVHX01JTl9DSEFOTkVMKSAmJiAoY2hhbm5lbCA8PSBSRUdfTUFYX0NIQU5ORUwpKSkgewogCQlwcml2LT5jb25maWcgfD0gQ0ZHX1NUQVRJQ19DSEFOTkVMOwogCQlwcml2LT5jaGFubmVsID0gY2hhbm5lbDsKIAl9CkBAIC02NDQxLDEyICs2NDMyLDggQEAKIAlJTklUX0xJU1RfSEVBRCgmcHJpdi0+ZndfcGVuZF9saXN0KTsKIAlJTklUX1NUQVQoJnByaXYtPmZ3X3BlbmRfc3RhdCk7CiAKLQotI2lmZGVmIENPTkZJR19TT0ZUV0FSRV9TVVNQRU5EMgotCXByaXYtPndvcmtxdWV1ZSA9IGNyZWF0ZV93b3JrcXVldWUoRFJWX05BTUUsIDApOwotI2Vsc2UKIAlwcml2LT53b3JrcXVldWUgPSBjcmVhdGVfd29ya3F1ZXVlKERSVl9OQU1FKTsKLSNlbmRpZgorCiAJSU5JVF9XT1JLKCZwcml2LT5yZXNldF93b3JrLAogCQkgICh2b2lkICgqKSh2b2lkICopKWlwdzIxMDBfcmVzZXRfYWRhcHRlciwgcHJpdik7CiAJSU5JVF9XT1JLKCZwcml2LT5zZWN1cml0eV93b3JrLApAQCAtNjUzNSw3ICs2NTIyLDcgQEAKIAkJcmV0dXJuIGVycjsKIAl9CiAKLSAgICAgICAgLyogV2UgZGlzYWJsZSB0aGUgUkVUUllfVElNRU9VVCByZWdpc3RlciAoMHg0MSkgdG8ga2VlcAorCS8qIFdlIGRpc2FibGUgdGhlIFJFVFJZX1RJTUVPVVQgcmVnaXN0ZXIgKDB4NDEpIHRvIGtlZXAKIAkgKiBQQ0kgVHggcmV0cmllcyBmcm9tIGludGVyZmVyaW5nIHdpdGggQzMgQ1BVIHN0YXRlICovCiAJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBjaV9kZXYsIDB4NDAsICZ2YWwpOwogCWlmICgodmFsICYgMHgwMDAwZmYwMCkgIT0gMCkKQEAgLTY1NjYsMTIgKzY1NTMsMTAgQEAKIAlpcHcyMTAwX3F1ZXVlc19pbml0aWFsaXplKHByaXYpOwogCiAJZXJyID0gcmVxdWVzdF9pcnEocGNpX2Rldi0+aXJxLAotCQkJICBpcHcyMTAwX2ludGVycnVwdCwgU0FfU0hJUlEsCi0JCQkgIGRldi0+bmFtZSwgcHJpdik7CisJCQkgIGlwdzIxMDBfaW50ZXJydXB0LCBTQV9TSElSUSwgZGV2LT5uYW1lLCBwcml2KTsKIAlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWX05BTUUKLQkJICAgICAgICJFcnJvciBjYWxsaW5nIHJlcXVlc3RfaXJxOiAlZC5cbiIsCi0JCSAgICAgICBwY2lfZGV2LT5pcnEpOworCQkgICAgICAgIkVycm9yIGNhbGxpbmcgcmVxdWVzdF9pcnE6ICVkLlxuIiwgcGNpX2Rldi0+aXJxKTsKIAkJZ290byBmYWlsOwogCX0KIAlkZXYtPmlycSA9IHBjaV9kZXYtPmlycTsKQEAgLTY2MDYsNyArNjU5MSw2IEBACiAKIAkvKiBwZXJmb3JtIHRoaXMgYWZ0ZXIgcmVnaXN0ZXJfbmV0ZGV2IHNvIHRoYXQgZGV2LT5uYW1lIGlzIHNldCAqLwogCXN5c2ZzX2NyZWF0ZV9ncm91cCgmcGNpX2Rldi0+ZGV2LmtvYmosICZpcHcyMTAwX2F0dHJpYnV0ZV9ncm91cCk7Ci0JbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKIAogCS8qIElmIHRoZSBSRiBLaWxsIHN3aXRjaCBpcyBkaXNhYmxlZCwgZ28gYWhlYWQgYW5kIGNvbXBsZXRlIHRoZQogCSAqIHN0YXJ0dXAgc2VxdWVuY2UgKi8KQEAgLTY2MzQsMTAgKzY2MTgsMTAgQEAKIAogCXJldHVybiAwOwogCi0gZmFpbF91bmxvY2s6CisgICAgICBmYWlsX3VubG9jazoKIAl1cCgmcHJpdi0+YWN0aW9uX3NlbSk7CiAKLSBmYWlsOgorICAgICAgZmFpbDoKIAlpZiAoZGV2KSB7CiAJCWlmIChyZWdpc3RlcmVkKQogCQkJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKQEAgLTY2NTMsNyArNjYzNyw4IEBACiAKIAkJLyogVGhlc2UgYXJlIHNhZmUgdG8gY2FsbCBldmVuIGlmIHRoZXkgd2VyZW4ndCBhbGxvY2F0ZWQgKi8KIAkJaXB3MjEwMF9xdWV1ZXNfZnJlZShwcml2KTsKLQkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZwY2lfZGV2LT5kZXYua29iaiwgJmlwdzIxMDBfYXR0cmlidXRlX2dyb3VwKTsKKwkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZwY2lfZGV2LT5kZXYua29iaiwKKwkJCQkgICAmaXB3MjEwMF9hdHRyaWJ1dGVfZ3JvdXApOwogCiAJCWZyZWVfaWVlZTgwMjExKGRldik7CiAJCXBjaV9zZXRfZHJ2ZGF0YShwY2lfZGV2LCBOVUxMKTsKQEAgLTY2NzksNyArNjY2NCw4IEBACiAJCXByaXYtPnN0YXR1cyAmPSB+U1RBVFVTX0lOSVRJQUxJWkVEOwogCiAJCWRldiA9IHByaXYtPm5ldF9kZXY7Ci0JCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGNpX2Rldi0+ZGV2LmtvYmosICZpcHcyMTAwX2F0dHJpYnV0ZV9ncm91cCk7CisJCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGNpX2Rldi0+ZGV2LmtvYmosCisJCQkJICAgJmlwdzIxMDBfYXR0cmlidXRlX2dyb3VwKTsKIAogI2lmZGVmIENPTkZJR19QTQogCQlpZiAoaXB3MjEwMF9maXJtd2FyZS52ZXJzaW9uKQpAQCAtNjcyMSwxOSArNjcwNywxMyBAQAogCUlQV19ERUJVR19JTkZPKCJleGl0XG4iKTsKIH0KIAotCiAjaWZkZWYgQ09ORklHX1BNCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDExKQotc3RhdGljIGludCBpcHcyMTAwX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYsIHUzMiBzdGF0ZSkKLSNlbHNlCiBzdGF0aWMgaW50IGlwdzIxMDBfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiwgcG1fbWVzc2FnZV90IHN0YXRlKQotI2VuZGlmCiB7CiAJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IHBjaV9nZXRfZHJ2ZGF0YShwY2lfZGV2KTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+bmV0X2RldjsKIAotCUlQV19ERUJVR19JTkZPKCIlczogR29pbmcgaW50byBzdXNwZW5kLi4uXG4iLAotCSAgICAgICBkZXYtPm5hbWUpOworCUlQV19ERUJVR19JTkZPKCIlczogR29pbmcgaW50byBzdXNwZW5kLi4uXG4iLCBkZXYtPm5hbWUpOwogCiAJZG93bigmcHJpdi0+YWN0aW9uX3NlbSk7CiAJaWYgKHByaXYtPnN0YXR1cyAmIFNUQVRVU19JTklUSUFMSVpFRCkgewpAQCAtNjc0NSw3ICs2NzI1LDcgQEAKIAluZXRpZl9kZXZpY2VfZGV0YWNoKGRldik7CiAKIAlwY2lfc2F2ZV9zdGF0ZShwY2lfZGV2KTsKLQlwY2lfZGlzYWJsZV9kZXZpY2UgKHBjaV9kZXYpOworCXBjaV9kaXNhYmxlX2RldmljZShwY2lfZGV2KTsKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaV9kZXYsIFBDSV9EM2hvdCk7CiAKIAl1cCgmcHJpdi0+YWN0aW9uX3NlbSk7CkBAIC02NzY0LDggKzY3NDQsNyBAQAogCiAJZG93bigmcHJpdi0+YWN0aW9uX3NlbSk7CiAKLQlJUFdfREVCVUdfSU5GTygiJXM6IENvbWluZyBvdXQgb2Ygc3VzcGVuZC4uLlxuIiwKLQkgICAgICAgZGV2LT5uYW1lKTsKKwlJUFdfREVCVUdfSU5GTygiJXM6IENvbWluZyBvdXQgb2Ygc3VzcGVuZC4uLlxuIiwgZGV2LT5uYW1lKTsKIAogCXBjaV9zZXRfcG93ZXJfc3RhdGUocGNpX2RldiwgUENJX0QwKTsKIAlwY2lfZW5hYmxlX2RldmljZShwY2lfZGV2KTsKQEAgLTY3ODUsOSArNjc2NCw5IEBACiAJICogdGhlIHF1ZXVlIG9mIG5lZWRlZCAqLwogCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKIAotICAgICAgICAvKiBCcmluZyB0aGUgZGV2aWNlIGJhY2sgdXAgKi8KLSAgICAgICAgaWYgKCEocHJpdi0+c3RhdHVzICYgU1RBVFVTX1JGX0tJTExfU1cpKQotICAgICAgICAgICAgICAgIGlwdzIxMDBfdXAocHJpdiwgMCk7CisJLyogQnJpbmcgdGhlIGRldmljZSBiYWNrIHVwICovCisJaWYgKCEocHJpdi0+c3RhdHVzICYgU1RBVFVTX1JGX0tJTExfU1cpKQorCQlpcHcyMTAwX3VwKHByaXYsIDApOwogCiAJdXAoJnByaXYtPmFjdGlvbl9zZW0pOwogCkBAIC02Nzk1LDU2ICs2Nzc0LDU1IEBACiB9CiAjZW5kaWYKIAotCiAjZGVmaW5lIElQVzIxMDBfREVWX0lEKHgpIHsgUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgxMDQzLCAweDgwODYsIHggfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgaXB3MjEwMF9wY2lfaWRfdGFibGVbXSBfX2RldmluaXRkYXRhID0gewotCUlQVzIxMDBfREVWX0lEKDB4MjUyMCksIC8qIElOIDIxMDBBIG1QQ0kgM0EgKi8KLQlJUFcyMTAwX0RFVl9JRCgweDI1MjEpLCAvKiBJTiAyMTAwQSBtUENJIDNCICovCi0JSVBXMjEwMF9ERVZfSUQoMHgyNTI0KSwgLyogSU4gMjEwMEEgbVBDSSAzQiAqLwotCUlQVzIxMDBfREVWX0lEKDB4MjUyNSksIC8qIElOIDIxMDBBIG1QQ0kgM0IgKi8KLQlJUFcyMTAwX0RFVl9JRCgweDI1MjYpLCAvKiBJTiAyMTAwQSBtUENJIEdlbiBBMyAqLwotCUlQVzIxMDBfREVWX0lEKDB4MjUyMiksIC8qIElOIDIxMDAgbVBDSSAzQiAqLwotCUlQVzIxMDBfREVWX0lEKDB4MjUyMyksIC8qIElOIDIxMDAgbVBDSSAzQSAqLwotCUlQVzIxMDBfREVWX0lEKDB4MjUyNyksIC8qIElOIDIxMDAgbVBDSSAzQiAqLwotCUlQVzIxMDBfREVWX0lEKDB4MjUyOCksIC8qIElOIDIxMDAgbVBDSSAzQiAqLwotCUlQVzIxMDBfREVWX0lEKDB4MjUyOSksIC8qIElOIDIxMDAgbVBDSSAzQiAqLwotCUlQVzIxMDBfREVWX0lEKDB4MjUyQiksIC8qIElOIDIxMDAgbVBDSSAzQSAqLwotCUlQVzIxMDBfREVWX0lEKDB4MjUyQyksIC8qIElOIDIxMDAgbVBDSSAzQSAqLwotCUlQVzIxMDBfREVWX0lEKDB4MjUyRCksIC8qIElOIDIxMDAgbVBDSSAzQSAqLworCUlQVzIxMDBfREVWX0lEKDB4MjUyMCksCS8qIElOIDIxMDBBIG1QQ0kgM0EgKi8KKwlJUFcyMTAwX0RFVl9JRCgweDI1MjEpLAkvKiBJTiAyMTAwQSBtUENJIDNCICovCisJSVBXMjEwMF9ERVZfSUQoMHgyNTI0KSwJLyogSU4gMjEwMEEgbVBDSSAzQiAqLworCUlQVzIxMDBfREVWX0lEKDB4MjUyNSksCS8qIElOIDIxMDBBIG1QQ0kgM0IgKi8KKwlJUFcyMTAwX0RFVl9JRCgweDI1MjYpLAkvKiBJTiAyMTAwQSBtUENJIEdlbiBBMyAqLworCUlQVzIxMDBfREVWX0lEKDB4MjUyMiksCS8qIElOIDIxMDAgbVBDSSAzQiAqLworCUlQVzIxMDBfREVWX0lEKDB4MjUyMyksCS8qIElOIDIxMDAgbVBDSSAzQSAqLworCUlQVzIxMDBfREVWX0lEKDB4MjUyNyksCS8qIElOIDIxMDAgbVBDSSAzQiAqLworCUlQVzIxMDBfREVWX0lEKDB4MjUyOCksCS8qIElOIDIxMDAgbVBDSSAzQiAqLworCUlQVzIxMDBfREVWX0lEKDB4MjUyOSksCS8qIElOIDIxMDAgbVBDSSAzQiAqLworCUlQVzIxMDBfREVWX0lEKDB4MjUyQiksCS8qIElOIDIxMDAgbVBDSSAzQSAqLworCUlQVzIxMDBfREVWX0lEKDB4MjUyQyksCS8qIElOIDIxMDAgbVBDSSAzQSAqLworCUlQVzIxMDBfREVWX0lEKDB4MjUyRCksCS8qIElOIDIxMDAgbVBDSSAzQSAqLwogCi0JSVBXMjEwMF9ERVZfSUQoMHgyNTUwKSwgLyogSUIgMjEwMEEgbVBDSSAzQiAqLwotCUlQVzIxMDBfREVWX0lEKDB4MjU1MSksIC8qIElCIDIxMDAgbVBDSSAzQiAqLwotCUlQVzIxMDBfREVWX0lEKDB4MjU1MyksIC8qIElCIDIxMDAgbVBDSSAzQiAqLwotCUlQVzIxMDBfREVWX0lEKDB4MjU1NCksIC8qIElCIDIxMDAgbVBDSSAzQiAqLwotCUlQVzIxMDBfREVWX0lEKDB4MjU1NSksIC8qIElCIDIxMDAgbVBDSSAzQiAqLworCUlQVzIxMDBfREVWX0lEKDB4MjU1MCksCS8qIElCIDIxMDBBIG1QQ0kgM0IgKi8KKwlJUFcyMTAwX0RFVl9JRCgweDI1NTEpLAkvKiBJQiAyMTAwIG1QQ0kgM0IgKi8KKwlJUFcyMTAwX0RFVl9JRCgweDI1NTMpLAkvKiBJQiAyMTAwIG1QQ0kgM0IgKi8KKwlJUFcyMTAwX0RFVl9JRCgweDI1NTQpLAkvKiBJQiAyMTAwIG1QQ0kgM0IgKi8KKwlJUFcyMTAwX0RFVl9JRCgweDI1NTUpLAkvKiBJQiAyMTAwIG1QQ0kgM0IgKi8KIAotCUlQVzIxMDBfREVWX0lEKDB4MjU2MCksIC8qIERFIDIxMDBBIG1QQ0kgM0EgKi8KLQlJUFcyMTAwX0RFVl9JRCgweDI1NjIpLCAvKiBERSAyMTAwQSBtUENJIDNBICovCi0JSVBXMjEwMF9ERVZfSUQoMHgyNTYzKSwgLyogREUgMjEwMEEgbVBDSSAzQSAqLwotCUlQVzIxMDBfREVWX0lEKDB4MjU2MSksIC8qIERFIDIxMDAgbVBDSSAzQSAqLwotCUlQVzIxMDBfREVWX0lEKDB4MjU2NSksIC8qIERFIDIxMDAgbVBDSSAzQSAqLwotCUlQVzIxMDBfREVWX0lEKDB4MjU2NiksIC8qIERFIDIxMDAgbVBDSSAzQSAqLwotCUlQVzIxMDBfREVWX0lEKDB4MjU2NyksIC8qIERFIDIxMDAgbVBDSSAzQSAqLworCUlQVzIxMDBfREVWX0lEKDB4MjU2MCksCS8qIERFIDIxMDBBIG1QQ0kgM0EgKi8KKwlJUFcyMTAwX0RFVl9JRCgweDI1NjIpLAkvKiBERSAyMTAwQSBtUENJIDNBICovCisJSVBXMjEwMF9ERVZfSUQoMHgyNTYzKSwJLyogREUgMjEwMEEgbVBDSSAzQSAqLworCUlQVzIxMDBfREVWX0lEKDB4MjU2MSksCS8qIERFIDIxMDAgbVBDSSAzQSAqLworCUlQVzIxMDBfREVWX0lEKDB4MjU2NSksCS8qIERFIDIxMDAgbVBDSSAzQSAqLworCUlQVzIxMDBfREVWX0lEKDB4MjU2NiksCS8qIERFIDIxMDAgbVBDSSAzQSAqLworCUlQVzIxMDBfREVWX0lEKDB4MjU2NyksCS8qIERFIDIxMDAgbVBDSSAzQSAqLwogCi0JSVBXMjEwMF9ERVZfSUQoMHgyNTcwKSwgLyogR0EgMjEwMCBtUENJIDNCICovCisJSVBXMjEwMF9ERVZfSUQoMHgyNTcwKSwJLyogR0EgMjEwMCBtUENJIDNCICovCiAKLQlJUFcyMTAwX0RFVl9JRCgweDI1ODApLCAvKiBUTyAyMTAwQSBtUENJIDNCICovCi0JSVBXMjEwMF9ERVZfSUQoMHgyNTgyKSwgLyogVE8gMjEwMEEgbVBDSSAzQiAqLwotCUlQVzIxMDBfREVWX0lEKDB4MjU4MyksIC8qIFRPIDIxMDBBIG1QQ0kgM0IgKi8KLQlJUFcyMTAwX0RFVl9JRCgweDI1ODEpLCAvKiBUTyAyMTAwIG1QQ0kgM0IgKi8KLQlJUFcyMTAwX0RFVl9JRCgweDI1ODUpLCAvKiBUTyAyMTAwIG1QQ0kgM0IgKi8KLQlJUFcyMTAwX0RFVl9JRCgweDI1ODYpLCAvKiBUTyAyMTAwIG1QQ0kgM0IgKi8KLQlJUFcyMTAwX0RFVl9JRCgweDI1ODcpLCAvKiBUTyAyMTAwIG1QQ0kgM0IgKi8KKwlJUFcyMTAwX0RFVl9JRCgweDI1ODApLAkvKiBUTyAyMTAwQSBtUENJIDNCICovCisJSVBXMjEwMF9ERVZfSUQoMHgyNTgyKSwJLyogVE8gMjEwMEEgbVBDSSAzQiAqLworCUlQVzIxMDBfREVWX0lEKDB4MjU4MyksCS8qIFRPIDIxMDBBIG1QQ0kgM0IgKi8KKwlJUFcyMTAwX0RFVl9JRCgweDI1ODEpLAkvKiBUTyAyMTAwIG1QQ0kgM0IgKi8KKwlJUFcyMTAwX0RFVl9JRCgweDI1ODUpLAkvKiBUTyAyMTAwIG1QQ0kgM0IgKi8KKwlJUFcyMTAwX0RFVl9JRCgweDI1ODYpLAkvKiBUTyAyMTAwIG1QQ0kgM0IgKi8KKwlJUFcyMTAwX0RFVl9JRCgweDI1ODcpLAkvKiBUTyAyMTAwIG1QQ0kgM0IgKi8KIAotCUlQVzIxMDBfREVWX0lEKDB4MjU5MCksIC8qIFNPIDIxMDBBIG1QQ0kgM0IgKi8KLQlJUFcyMTAwX0RFVl9JRCgweDI1OTIpLCAvKiBTTyAyMTAwQSBtUENJIDNCICovCi0JSVBXMjEwMF9ERVZfSUQoMHgyNTkxKSwgLyogU08gMjEwMCBtUENJIDNCICovCi0JSVBXMjEwMF9ERVZfSUQoMHgyNTkzKSwgLyogU08gMjEwMCBtUENJIDNCICovCi0JSVBXMjEwMF9ERVZfSUQoMHgyNTk2KSwgLyogU08gMjEwMCBtUENJIDNCICovCi0JSVBXMjEwMF9ERVZfSUQoMHgyNTk4KSwgLyogU08gMjEwMCBtUENJIDNCICovCisJSVBXMjEwMF9ERVZfSUQoMHgyNTkwKSwJLyogU08gMjEwMEEgbVBDSSAzQiAqLworCUlQVzIxMDBfREVWX0lEKDB4MjU5MiksCS8qIFNPIDIxMDBBIG1QQ0kgM0IgKi8KKwlJUFcyMTAwX0RFVl9JRCgweDI1OTEpLAkvKiBTTyAyMTAwIG1QQ0kgM0IgKi8KKwlJUFcyMTAwX0RFVl9JRCgweDI1OTMpLAkvKiBTTyAyMTAwIG1QQ0kgM0IgKi8KKwlJUFcyMTAwX0RFVl9JRCgweDI1OTYpLAkvKiBTTyAyMTAwIG1QQ0kgM0IgKi8KKwlJUFcyMTAwX0RFVl9JRCgweDI1OTgpLAkvKiBTTyAyMTAwIG1QQ0kgM0IgKi8KIAotCUlQVzIxMDBfREVWX0lEKDB4MjVBMCksIC8qIEhQIDIxMDAgbVBDSSAzQiAqLworCUlQVzIxMDBfREVWX0lEKDB4MjVBMCksCS8qIEhQIDIxMDAgbVBDSSAzQiAqLwogCXswLH0sCiB9OwogCkBAIC02ODYxLDcgKzY4MzksNiBAQAogI2VuZGlmCiB9OwogCi0KIC8qKgogICogSW5pdGlhbGl6ZSB0aGUgaXB3MjEwMCBkcml2ZXIvbW9kdWxlCiAgKgpAQCAtNjg3OCwxMCArNjg1NSw2IEBACiAJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRSAiOiAlcywgJXNcbiIsIERSVl9ERVNDUklQVElPTiwgRFJWX1ZFUlNJT04pOwogCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUgIjogJXNcbiIsIERSVl9DT1BZUklHSFQpOwogCi0jaWZkZWYgQ09ORklHX0lFRUU4MDIxMV9OT1dFUAotCUlQV19ERUJVR19JTkZPKERSVl9OQU1FICI6IENvbXBpbGVkIHdpdGggV0VQIGRpc2FibGVkLlxuIik7Ci0jZW5kaWYKLQogCXJldCA9IHBjaV9tb2R1bGVfaW5pdCgmaXB3MjEwMF9wY2lfZHJpdmVyKTsKIAogI2lmZGVmIENPTkZJR19JUFdfREVCVUcKQEAgLTY4OTMsNyArNjg2Niw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotCiAvKioKICAqIENsZWFudXAgaXB3MjEwMCBkcml2ZXIgcmVnaXN0cmF0aW9uCiAgKi8KQEAgLTY5NDksNyArNjkyMSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLQogc3RhdGljIGludCBpcHcyMTAwX3d4X3NldF9mcmVxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCSAgICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKQEAgLTY5NjksOCArNjk0MCw3IEBACiAKIAkvKiBpZiBzZXR0aW5nIGJ5IGZyZXEgY29udmVydCB0byBjaGFubmVsICovCiAJaWYgKGZ3cnEtPmUgPT0gMSkgewotCQlpZiAoKGZ3cnEtPm0gPj0gKGludCkgMi40MTJlOCAmJgotCQkgICAgIGZ3cnEtPm0gPD0gKGludCkgMi40ODdlOCkpIHsKKwkJaWYgKChmd3JxLT5tID49IChpbnQpMi40MTJlOCAmJiBmd3JxLT5tIDw9IChpbnQpMi40ODdlOCkpIHsKIAkJCWludCBmID0gZndycS0+bSAvIDEwMDAwMDsKIAkJCWludCBjID0gMDsKIApAQCAtNjk4NCwxOSArNjk1NCwxOSBAQAogCQl9CiAJfQogCi0JaWYgKGZ3cnEtPmUgPiAwIHx8IGZ3cnEtPm0gPiAxMDAwKQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JZWxzZSB7IC8qIFNldCB0aGUgY2hhbm5lbCAqLworCWlmIChmd3JxLT5lID4gMCB8fCBmd3JxLT5tID4gMTAwMCkgeworCQllcnIgPSAtRU9QTk9UU1VQUDsKKwkJZ290byBkb25lOworCX0gZWxzZSB7CQkvKiBTZXQgdGhlIGNoYW5uZWwgKi8KIAkJSVBXX0RFQlVHX1dYKCJTRVQgRnJlcS9DaGFubmVsIC0+ICVkIFxuIiwgZndycS0+bSk7CiAJCWVyciA9IGlwdzIxMDBfc2V0X2NoYW5uZWwocHJpdiwgZndycS0+bSwgMCk7CiAJfQogCi0gZG9uZToKKyAgICAgIGRvbmU6CiAJdXAoJnByaXYtPmFjdGlvbl9zZW0pOwogCXJldHVybiBlcnI7CiB9CiAKLQogc3RhdGljIGludCBpcHcyMTAwX3d4X2dldF9mcmVxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCSAgICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKQEAgLTcwNDUsNyArNzAxNSw3IEBACiAJY2FzZSBJV19NT0RFX01PTklUT1I6CiAJCWVyciA9IGlwdzIxMDBfc3dpdGNoX21vZGUocHJpdiwgSVdfTU9ERV9NT05JVE9SKTsKIAkJYnJlYWs7Ci0jZW5kaWYgLyogQ09ORklHX0lQVzIxMDBfTU9OSVRPUiAqLworI2VuZGlmCQkJCS8qIENPTkZJR19JUFcyMTAwX01PTklUT1IgKi8KIAljYXNlIElXX01PREVfQURIT0M6CiAJCWVyciA9IGlwdzIxMDBfc3dpdGNoX21vZGUocHJpdiwgSVdfTU9ERV9BREhPQyk7CiAJCWJyZWFrOwpAQCAtNzA1Niw5ICs3MDI2LDkgQEAKIAkJYnJlYWs7CiAJfQogCi1kb25lOgorICAgICAgZG9uZToKIAl1cCgmcHJpdi0+YWN0aW9uX3NlbSk7Ci0gCXJldHVybiBlcnI7CisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGludCBpcHcyMTAwX3d4X2dldF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCkBAIC03MDc3LDcgKzcwNDcsNiBAQAogCXJldHVybiAwOwogfQogCi0KICNkZWZpbmUgUE9XRVJfTU9ERVMgNQogCiAvKiBWYWx1ZXMgYXJlIGluIG1pY3Jvc2Vjb25kICovCkBAIC03MTI0LDE5ICs3MDkzLDE5IEBACiAJLyogfjUgTWIvcyByZWFsICg4MDIuMTFiKSAqLwogCXJhbmdlLT50aHJvdWdocHV0ID0gNSAqIDEwMDAgKiAxMDAwOwogCi0vLwlyYW5nZS0+c2Vuc2l0aXZpdHk7CS8qIHNpZ25hbCBsZXZlbCB0aHJlc2hvbGQgcmFuZ2UgKi8KKy8vICAgICAgcmFuZ2UtPnNlbnNpdGl2aXR5OyAgICAgLyogc2lnbmFsIGxldmVsIHRocmVzaG9sZCByYW5nZSAqLwogCiAJcmFuZ2UtPm1heF9xdWFsLnF1YWwgPSAxMDA7CiAJLyogVE9ETzogRmluZCByZWFsIG1heCBSU1NJIGFuZCBzdGljayBoZXJlICovCiAJcmFuZ2UtPm1heF9xdWFsLmxldmVsID0gMDsKIAlyYW5nZS0+bWF4X3F1YWwubm9pc2UgPSAwOwotCXJhbmdlLT5tYXhfcXVhbC51cGRhdGVkID0gNzsgLyogVXBkYXRlZCBhbGwgdGhyZWUgKi8KKwlyYW5nZS0+bWF4X3F1YWwudXBkYXRlZCA9IDc7CS8qIFVwZGF0ZWQgYWxsIHRocmVlICovCiAKLQlyYW5nZS0+YXZnX3F1YWwucXVhbCA9IDcwOyAvKiA+IDglIG1pc3NlZCBiZWFjb25zIGlzICdiYWQnICovCisJcmFuZ2UtPmF2Z19xdWFsLnF1YWwgPSA3MDsJLyogPiA4JSBtaXNzZWQgYmVhY29ucyBpcyAnYmFkJyAqLwogCS8qIFRPRE86IEZpbmQgcmVhbCAnZ29vZCcgdG8gJ2JhZCcgdGhyZXNob2wgdmFsdWUgZm9yIFJTU0kgKi8KIAlyYW5nZS0+YXZnX3F1YWwubGV2ZWwgPSAyMCArIElQVzIxMDBfUlNTSV9UT19EQk07CiAJcmFuZ2UtPmF2Z19xdWFsLm5vaXNlID0gMDsKLQlyYW5nZS0+YXZnX3F1YWwudXBkYXRlZCA9IDc7IC8qIFVwZGF0ZWQgYWxsIHRocmVlICovCisJcmFuZ2UtPmF2Z19xdWFsLnVwZGF0ZWQgPSA3OwkvKiBVcGRhdGVkIGFsbCB0aHJlZSAqLwogCiAJcmFuZ2UtPm51bV9iaXRyYXRlcyA9IFJBVEVfQ09VTlQ7CiAKQEAgLTcxNTAsNjEgKzcxMTksNjIgQEAKIAlyYW5nZS0+bWF4X2ZyYWcgPSBNQVhfRlJBR19USFJFU0hPTEQ7CiAKIAlyYW5nZS0+bWluX3BtcCA9IHBlcmlvZF9kdXJhdGlvblswXTsJLyogTWluaW1hbCBQTSBwZXJpb2QgKi8KLQlyYW5nZS0+bWF4X3BtcCA9IHBlcmlvZF9kdXJhdGlvbltQT1dFUl9NT0RFUy0xXTsvKiBNYXhpbWFsIFBNIHBlcmlvZCAqLwotCXJhbmdlLT5taW5fcG10ID0gdGltZW91dF9kdXJhdGlvbltQT1dFUl9NT0RFUy0xXTsJLyogTWluaW1hbCBQTSB0aW1lb3V0ICovCi0JcmFuZ2UtPm1heF9wbXQgPSB0aW1lb3V0X2R1cmF0aW9uWzBdOy8qIE1heGltYWwgUE0gdGltZW91dCAqLworCXJhbmdlLT5tYXhfcG1wID0gcGVyaW9kX2R1cmF0aW9uW1BPV0VSX01PREVTIC0gMV07CS8qIE1heGltYWwgUE0gcGVyaW9kICovCisJcmFuZ2UtPm1pbl9wbXQgPSB0aW1lb3V0X2R1cmF0aW9uW1BPV0VSX01PREVTIC0gMV07CS8qIE1pbmltYWwgUE0gdGltZW91dCAqLworCXJhbmdlLT5tYXhfcG10ID0gdGltZW91dF9kdXJhdGlvblswXTsJLyogTWF4aW1hbCBQTSB0aW1lb3V0ICovCiAKLSAgICAgICAgLyogSG93IHRvIGRlY29kZSBtYXgvbWluIFBNIHBlcmlvZCAqLworCS8qIEhvdyB0byBkZWNvZGUgbWF4L21pbiBQTSBwZXJpb2QgKi8KIAlyYW5nZS0+cG1wX2ZsYWdzID0gSVdfUE9XRVJfUEVSSU9EOwotICAgICAgICAvKiBIb3cgdG8gZGVjb2RlIG1heC9taW4gUE0gcGVyaW9kICovCisJLyogSG93IHRvIGRlY29kZSBtYXgvbWluIFBNIHBlcmlvZCAqLwogCXJhbmdlLT5wbXRfZmxhZ3MgPSBJV19QT1dFUl9USU1FT1VUOwogCS8qIFdoYXQgUE0gb3B0aW9ucyBhcmUgc3VwcG9ydGVkICovCiAJcmFuZ2UtPnBtX2NhcGEgPSBJV19QT1dFUl9USU1FT1VUIHwgSVdfUE9XRVJfUEVSSU9EOwogCiAJcmFuZ2UtPmVuY29kaW5nX3NpemVbMF0gPSA1OwotCXJhbmdlLT5lbmNvZGluZ19zaXplWzFdID0gMTM7ICAgICAgICAgICAvKiBEaWZmZXJlbnQgdG9rZW4gc2l6ZXMgKi8KLQlyYW5nZS0+bnVtX2VuY29kaW5nX3NpemVzID0gMjsJCS8qIE51bWJlciBvZiBlbnRyeSBpbiB0aGUgbGlzdCAqLwotCXJhbmdlLT5tYXhfZW5jb2RpbmdfdG9rZW5zID0gV0VQX0tFWVM7ICAvKiBNYXggbnVtYmVyIG9mIHRva2VucyAqLwotLy8JcmFuZ2UtPmVuY29kaW5nX2xvZ2luX2luZGV4OwkJLyogdG9rZW4gaW5kZXggZm9yIGxvZ2luIHRva2VuICovCisJcmFuZ2UtPmVuY29kaW5nX3NpemVbMV0gPSAxMzsJLyogRGlmZmVyZW50IHRva2VuIHNpemVzICovCisJcmFuZ2UtPm51bV9lbmNvZGluZ19zaXplcyA9IDI7CS8qIE51bWJlciBvZiBlbnRyeSBpbiB0aGUgbGlzdCAqLworCXJhbmdlLT5tYXhfZW5jb2RpbmdfdG9rZW5zID0gV0VQX0tFWVM7CS8qIE1heCBudW1iZXIgb2YgdG9rZW5zICovCisvLyAgICAgIHJhbmdlLT5lbmNvZGluZ19sb2dpbl9pbmRleDsgICAgICAgICAgICAvKiB0b2tlbiBpbmRleCBmb3IgbG9naW4gdG9rZW4gKi8KIAogCWlmIChwcml2LT5pZWVlLT5pd19tb2RlID09IElXX01PREVfQURIT0MpIHsKIAkJcmFuZ2UtPnR4cG93ZXJfY2FwYSA9IElXX1RYUE9XX0RCTTsKIAkJcmFuZ2UtPm51bV90eHBvd2VyID0gSVdfTUFYX1RYUE9XRVI7Ci0JCWZvciAoaSA9IDAsIGxldmVsID0gKElQV19UWF9QT1dFUl9NQVhfREJNICogMTYpOyBpIDwgSVdfTUFYX1RYUE9XRVI7Ci0JCSAgICAgaSsrLCBsZXZlbCAtPSAoKElQV19UWF9QT1dFUl9NQVhfREJNIC0gSVBXX1RYX1BPV0VSX01JTl9EQk0pICogMTYpIC8KLQkJCSAgICAgKElXX01BWF9UWFBPV0VSIC0gMSkpCisJCWZvciAoaSA9IDAsIGxldmVsID0gKElQV19UWF9QT1dFUl9NQVhfREJNICogMTYpOworCQkgICAgIGkgPCBJV19NQVhfVFhQT1dFUjsKKwkJICAgICBpKyssIGxldmVsIC09CisJCSAgICAgKChJUFdfVFhfUE9XRVJfTUFYX0RCTSAtCisJCSAgICAgICBJUFdfVFhfUE9XRVJfTUlOX0RCTSkgKiAxNikgLyAoSVdfTUFYX1RYUE9XRVIgLSAxKSkKIAkJCXJhbmdlLT50eHBvd2VyW2ldID0gbGV2ZWwgLyAxNjsKIAl9IGVsc2UgewogCQlyYW5nZS0+dHhwb3dlcl9jYXBhID0gMDsKIAkJcmFuZ2UtPm51bV90eHBvd2VyID0gMDsKIAl9CiAKLQogCS8qIFNldCB0aGUgV2lyZWxlc3MgRXh0ZW5zaW9uIHZlcnNpb25zICovCiAJcmFuZ2UtPndlX3ZlcnNpb25fY29tcGlsZWQgPSBXSVJFTEVTU19FWFQ7CiAJcmFuZ2UtPndlX3ZlcnNpb25fc291cmNlID0gMTY7CiAKLS8vCXJhbmdlLT5yZXRyeV9jYXBhOwkvKiBXaGF0IHJldHJ5IG9wdGlvbnMgYXJlIHN1cHBvcnRlZCAqLwotLy8JcmFuZ2UtPnJldHJ5X2ZsYWdzOwkvKiBIb3cgdG8gZGVjb2RlIG1heC9taW4gcmV0cnkgbGltaXQgKi8KLS8vCXJhbmdlLT5yX3RpbWVfZmxhZ3M7CS8qIEhvdyB0byBkZWNvZGUgbWF4L21pbiByZXRyeSBsaWZlICovCi0vLwlyYW5nZS0+bWluX3JldHJ5OwkvKiBNaW5pbWFsIG51bWJlciBvZiByZXRyaWVzICovCi0vLwlyYW5nZS0+bWF4X3JldHJ5OwkvKiBNYXhpbWFsIG51bWJlciBvZiByZXRyaWVzICovCi0vLwlyYW5nZS0+bWluX3JfdGltZTsJLyogTWluaW1hbCByZXRyeSBsaWZldGltZSAqLwotLy8JcmFuZ2UtPm1heF9yX3RpbWU7CS8qIE1heGltYWwgcmV0cnkgbGlmZXRpbWUgKi8KKy8vICAgICAgcmFuZ2UtPnJldHJ5X2NhcGE7ICAgICAgLyogV2hhdCByZXRyeSBvcHRpb25zIGFyZSBzdXBwb3J0ZWQgKi8KKy8vICAgICAgcmFuZ2UtPnJldHJ5X2ZsYWdzOyAgICAgLyogSG93IHRvIGRlY29kZSBtYXgvbWluIHJldHJ5IGxpbWl0ICovCisvLyAgICAgIHJhbmdlLT5yX3RpbWVfZmxhZ3M7ICAgIC8qIEhvdyB0byBkZWNvZGUgbWF4L21pbiByZXRyeSBsaWZlICovCisvLyAgICAgIHJhbmdlLT5taW5fcmV0cnk7ICAgICAgIC8qIE1pbmltYWwgbnVtYmVyIG9mIHJldHJpZXMgKi8KKy8vICAgICAgcmFuZ2UtPm1heF9yZXRyeTsgICAgICAgLyogTWF4aW1hbCBudW1iZXIgb2YgcmV0cmllcyAqLworLy8gICAgICByYW5nZS0+bWluX3JfdGltZTsgICAgICAvKiBNaW5pbWFsIHJldHJ5IGxpZmV0aW1lICovCisvLyAgICAgIHJhbmdlLT5tYXhfcl90aW1lOyAgICAgIC8qIE1heGltYWwgcmV0cnkgbGlmZXRpbWUgKi8KIAotICAgICAgICByYW5nZS0+bnVtX2NoYW5uZWxzID0gRlJFUV9DT1VOVDsKKwlyYW5nZS0+bnVtX2NoYW5uZWxzID0gRlJFUV9DT1VOVDsKIAogCXZhbCA9IDA7CiAJZm9yIChpID0gMDsgaSA8IEZSRVFfQ09VTlQ7IGkrKykgewogCQkvLyBUT0RPOiBJbmNsdWRlIG9ubHkgbGVnYWwgZnJlcXVlbmNpZXMgZm9yIHNvbWUgY291bnRyaWVzCi0vLwkJaWYgKGxvY2FsLT5jaGFubmVsX21hc2sgJiAoMSA8PCBpKSkgewotCQkJcmFuZ2UtPmZyZXFbdmFsXS5pID0gaSArIDE7Ci0JCQlyYW5nZS0+ZnJlcVt2YWxdLm0gPSBpcHcyMTAwX2ZyZXF1ZW5jaWVzW2ldICogMTAwMDAwOwotCQkJcmFuZ2UtPmZyZXFbdmFsXS5lID0gMTsKLQkJCXZhbCsrOwotLy8JCX0KKy8vICAgICAgICAgICAgICBpZiAobG9jYWwtPmNoYW5uZWxfbWFzayAmICgxIDw8IGkpKSB7CisJCXJhbmdlLT5mcmVxW3ZhbF0uaSA9IGkgKyAxOworCQlyYW5nZS0+ZnJlcVt2YWxdLm0gPSBpcHcyMTAwX2ZyZXF1ZW5jaWVzW2ldICogMTAwMDAwOworCQlyYW5nZS0+ZnJlcVt2YWxdLmUgPSAxOworCQl2YWwrKzsKKy8vICAgICAgICAgICAgICB9CiAJCWlmICh2YWwgPT0gSVdfTUFYX0ZSRVFVRU5DSUVTKQotCQlicmVhazsKKwkJCWJyZWFrOwogCX0KIAlyYW5nZS0+bnVtX2ZyZXF1ZW5jeSA9IHZhbDsKIApAQCAtNzI1OSw3ICs3MjI5LDcgQEAKIAkJICAgICB3cnF1LT5hcF9hZGRyLnNhX2RhdGFbNF0gJiAweGZmLAogCQkgICAgIHdycXUtPmFwX2FkZHIuc2FfZGF0YVs1XSAmIDB4ZmYpOwogCi0gZG9uZToKKyAgICAgIGRvbmU6CiAJdXAoJnByaXYtPmFjdGlvbl9zZW0pOwogCXJldHVybiBlcnI7CiB9CkBAIC03Mjc2LDEwICs3MjQ2LDkgQEAKIAogCS8qIElmIHdlIGFyZSBhc3NvY2lhdGVkLCB0cnlpbmcgdG8gYXNzb2NpYXRlLCBvciBoYXZlIGEgc3RhdGljYWxseQogCSAqIGNvbmZpZ3VyZWQgQlNTSUQgdGhlbiByZXR1cm4gdGhhdDsgb3RoZXJ3aXNlIHJldHVybiBBTlkgKi8KLQlpZiAocHJpdi0+Y29uZmlnICYgQ0ZHX1NUQVRJQ19CU1NJRCB8fAotCSAgICBwcml2LT5zdGF0dXMgJiBTVEFUVVNfQVNTT0NJQVRFRCkgeworCWlmIChwcml2LT5jb25maWcgJiBDRkdfU1RBVElDX0JTU0lEIHx8IHByaXYtPnN0YXR1cyAmIFNUQVRVU19BU1NPQ0lBVEVEKSB7CiAJCXdycXUtPmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOwotCQltZW1jcHkod3JxdS0+YXBfYWRkci5zYV9kYXRhLCAmcHJpdi0+YnNzaWQsIEVUSF9BTEVOKTsKKwkJbWVtY3B5KHdycXUtPmFwX2FkZHIuc2FfZGF0YSwgcHJpdi0+YnNzaWQsIEVUSF9BTEVOKTsKIAl9IGVsc2UKIAkJbWVtc2V0KHdycXUtPmFwX2FkZHIuc2FfZGF0YSwgMCwgRVRIX0FMRU4pOwogCkBAIC03MjkzLDcgKzcyNjIsNyBAQAogCQkJCXVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewogCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwotCWNoYXIgKmVzc2lkID0gIiI7IC8qIEFOWSAqLworCWNoYXIgKmVzc2lkID0gIiI7CS8qIEFOWSAqLwogCWludCBsZW5ndGggPSAwOwogCWludCBlcnIgPSAwOwogCkBAIC03MzMzLDcgKzczMDIsNyBAQAogCiAJZXJyID0gaXB3MjEwMF9zZXRfZXNzaWQocHJpdiwgZXNzaWQsIGxlbmd0aCwgMCk7CiAKLSBkb25lOgorICAgICAgZG9uZToKIAl1cCgmcHJpdi0+YWN0aW9uX3NlbSk7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTczNTAsMTcgKzczMTksMTYgQEAKIAogCS8qIElmIHdlIGFyZSBhc3NvY2lhdGVkLCB0cnlpbmcgdG8gYXNzb2NpYXRlLCBvciBoYXZlIGEgc3RhdGljYWxseQogCSAqIGNvbmZpZ3VyZWQgRVNTSUQgdGhlbiByZXR1cm4gdGhhdDsgb3RoZXJ3aXNlIHJldHVybiBBTlkgKi8KLQlpZiAocHJpdi0+Y29uZmlnICYgQ0ZHX1NUQVRJQ19FU1NJRCB8fAotCSAgICBwcml2LT5zdGF0dXMgJiBTVEFUVVNfQVNTT0NJQVRFRCkgeworCWlmIChwcml2LT5jb25maWcgJiBDRkdfU1RBVElDX0VTU0lEIHx8IHByaXYtPnN0YXR1cyAmIFNUQVRVU19BU1NPQ0lBVEVEKSB7CiAJCUlQV19ERUJVR19XWCgiR2V0dGluZyBlc3NpZDogJyVzJ1xuIiwKIAkJCSAgICAgZXNjYXBlX2Vzc2lkKHByaXYtPmVzc2lkLCBwcml2LT5lc3NpZF9sZW4pKTsKIAkJbWVtY3B5KGV4dHJhLCBwcml2LT5lc3NpZCwgcHJpdi0+ZXNzaWRfbGVuKTsKIAkJd3JxdS0+ZXNzaWQubGVuZ3RoID0gcHJpdi0+ZXNzaWRfbGVuOwotCQl3cnF1LT5lc3NpZC5mbGFncyA9IDE7IC8qIGFjdGl2ZSAqLworCQl3cnF1LT5lc3NpZC5mbGFncyA9IDE7CS8qIGFjdGl2ZSAqLwogCX0gZWxzZSB7CiAJCUlQV19ERUJVR19XWCgiR2V0dGluZyBlc3NpZDogQU5ZXG4iKTsKIAkJd3JxdS0+ZXNzaWQubGVuZ3RoID0gMDsKLQkJd3JxdS0+ZXNzaWQuZmxhZ3MgPSAwOyAvKiBhY3RpdmUgKi8KKwkJd3JxdS0+ZXNzaWQuZmxhZ3MgPSAwOwkvKiBhY3RpdmUgKi8KIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTczNzksOSArNzM0Nyw5IEBACiAJaWYgKHdycXUtPmRhdGEubGVuZ3RoID4gSVdfRVNTSURfTUFYX1NJWkUpCiAJCXJldHVybiAtRTJCSUc7CiAKLQl3cnF1LT5kYXRhLmxlbmd0aCA9IG1pbigoc2l6ZV90KXdycXUtPmRhdGEubGVuZ3RoLCBzaXplb2YocHJpdi0+bmljaykpOworCXdycXUtPmRhdGEubGVuZ3RoID0gbWluKChzaXplX3QpIHdycXUtPmRhdGEubGVuZ3RoLCBzaXplb2YocHJpdi0+bmljaykpOwogCW1lbXNldChwcml2LT5uaWNrLCAwLCBzaXplb2YocHJpdi0+bmljaykpOwotCW1lbWNweShwcml2LT5uaWNrLCBleHRyYSwgIHdycXUtPmRhdGEubGVuZ3RoKTsKKwltZW1jcHkocHJpdi0+bmljaywgZXh0cmEsIHdycXUtPmRhdGEubGVuZ3RoKTsKIAogCUlQV19ERUJVR19XWCgiU0VUIE5pY2tuYW1lIC0+ICVzIFxuIiwgcHJpdi0+bmljayk7CiAKQEAgLTc0MDAsNyArNzM2OCw3IEBACiAKIAl3cnF1LT5kYXRhLmxlbmd0aCA9IHN0cmxlbihwcml2LT5uaWNrKSArIDE7CiAJbWVtY3B5KGV4dHJhLCBwcml2LT5uaWNrLCB3cnF1LT5kYXRhLmxlbmd0aCk7Ci0Jd3JxdS0+ZGF0YS5mbGFncyA9IDE7IC8qIGFjdGl2ZSAqLworCXdycXUtPmRhdGEuZmxhZ3MgPSAxOwkvKiBhY3RpdmUgKi8KIAogCUlQV19ERUJVR19XWCgiR0VUIE5pY2tuYW1lIC0+ICVzIFxuIiwgZXh0cmEpOwogCkBAIC03NDQyLDEyICs3NDEwLDExIEBACiAJZXJyID0gaXB3MjEwMF9zZXRfdHhfcmF0ZXMocHJpdiwgcmF0ZSwgMCk7CiAKIAlJUFdfREVCVUdfV1goIlNFVCBSYXRlIC0+ICUwNFggXG4iLCByYXRlKTsKLSBkb25lOgorICAgICAgZG9uZToKIAl1cCgmcHJpdi0+YWN0aW9uX3NlbSk7CiAJcmV0dXJuIGVycjsKIH0KIAotCiBzdGF0aWMgaW50IGlwdzIxMDBfd3hfZ2V0X3JhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJICAgICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQpAQCAtNzQ5NSw3ICs3NDYyLDcgQEAKIAogCUlQV19ERUJVR19XWCgiR0VUIFJhdGUgLT4gJWQgXG4iLCB3cnF1LT5iaXRyYXRlLnZhbHVlKTsKIAotIGRvbmU6CisgICAgICBkb25lOgogCXVwKCZwcml2LT5hY3Rpb25fc2VtKTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtNzUyMCw4ICs3NDg3LDcgQEAKIAlpZiAod3JxdS0+cnRzLmRpc2FibGVkKQogCQl2YWx1ZSA9IHByaXYtPnJ0c190aHJlc2hvbGQgfCBSVFNfRElTQUJMRUQ7CiAJZWxzZSB7Ci0JCWlmICh3cnF1LT5ydHMudmFsdWUgPCAxIHx8Ci0JCSAgICB3cnF1LT5ydHMudmFsdWUgPiAyMzA0KSB7CisJCWlmICh3cnF1LT5ydHMudmFsdWUgPCAxIHx8IHdycXUtPnJ0cy52YWx1ZSA+IDIzMDQpIHsKIAkJCWVyciA9IC1FSU5WQUw7CiAJCQlnb3RvIGRvbmU7CiAJCX0KQEAgLTc1MzEsNyArNzQ5Nyw3IEBACiAJZXJyID0gaXB3MjEwMF9zZXRfcnRzX3RocmVzaG9sZChwcml2LCB2YWx1ZSk7CiAKIAlJUFdfREVCVUdfV1goIlNFVCBSVFMgVGhyZXNob2xkIC0+IDB4JTA4WCBcbiIsIHZhbHVlKTsKLSBkb25lOgorICAgICAgZG9uZToKIAl1cCgmcHJpdi0+YWN0aW9uX3NlbSk7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTc1NDcsNyArNzUxMyw3IEBACiAJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CiAKIAl3cnF1LT5ydHMudmFsdWUgPSBwcml2LT5ydHNfdGhyZXNob2xkICYgflJUU19ESVNBQkxFRDsKLQl3cnF1LT5ydHMuZml4ZWQgPSAxOyAvKiBubyBhdXRvIHNlbGVjdCAqLworCXdycXUtPnJ0cy5maXhlZCA9IDE7CS8qIG5vIGF1dG8gc2VsZWN0ICovCiAKIAkvKiBJZiBSVFMgaXMgc2V0IHRvIHRoZSBkZWZhdWx0IHZhbHVlLCB0aGVuIGl0IGlzIGRpc2FibGVkICovCiAJd3JxdS0+cnRzLmRpc2FibGVkID0gKHByaXYtPnJ0c190aHJlc2hvbGQgJiBSVFNfRElTQUJMRUQpID8gMSA6IDA7CkBAIC03NTc0LDggKzc1NDAsNyBAQAogCQkgICAgd3JxdS0+dHhwb3dlci52YWx1ZSA+IElQV19UWF9QT1dFUl9NQVhfREJNKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJdmFsdWUgPSAod3JxdS0+dHhwb3dlci52YWx1ZSAtIElQV19UWF9QT1dFUl9NSU5fREJNKSAqIDE2IC8KLQkJCShJUFdfVFhfUE9XRVJfTUFYX0RCTSAtIElQV19UWF9QT1dFUl9NSU5fREJNKTsKKwkJdmFsdWUgPSB3cnF1LT50eHBvd2VyLnZhbHVlOwogCX0KIAogCWRvd24oJnByaXYtPmFjdGlvbl9zZW0pOwpAQCAtNzU4OCw3ICs3NTUzLDcgQEAKIAogCUlQV19ERUJVR19XWCgiU0VUIFRYIFBvd2VyIC0+ICVkIFxuIiwgdmFsdWUpOwogCi0gZG9uZToKKyAgICAgIGRvbmU6CiAJdXAoJnByaXYtPmFjdGlvbl9zZW0pOwogCXJldHVybiBlcnI7CiB9CkBAIC03NjE1LDExICs3NTgwLDcgQEAKIAl9IGVsc2UgewogCQl3cnF1LT5wb3dlci5kaXNhYmxlZCA9IDA7CiAJCXdycXUtPnBvd2VyLmZpeGVkID0gMTsKLQkJd3JxdS0+cG93ZXIudmFsdWUgPQotCQkJKHByaXYtPnR4X3Bvd2VyICoKLQkJCSAoSVBXX1RYX1BPV0VSX01BWF9EQk0gLSBJUFdfVFhfUE9XRVJfTUlOX0RCTSkpIC8KLQkJCShJUFdfVFhfUE9XRVJfTUFYIC0gSVBXX1RYX1BPV0VSX01JTikgKwotCQkJSVBXX1RYX1BPV0VSX01JTl9EQk07CisJCXdycXUtPnBvd2VyLnZhbHVlID0gcHJpdi0+dHhfcG93ZXI7CiAJfQogCiAJd3JxdS0+cG93ZXIuZmxhZ3MgPSBJV19UWFBPV19EQk07CkBAIC03Njg0LDggKzc2NDUsNyBAQAogCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwogCWludCBlcnIgPSAwOwogCi0JaWYgKHdycXUtPnJldHJ5LmZsYWdzICYgSVdfUkVUUllfTElGRVRJTUUgfHwKLQkgICAgd3JxdS0+cmV0cnkuZGlzYWJsZWQpCisJaWYgKHdycXUtPnJldHJ5LmZsYWdzICYgSVdfUkVUUllfTElGRVRJTUUgfHwgd3JxdS0+cmV0cnkuZGlzYWJsZWQpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKCEod3JxdS0+cmV0cnkuZmxhZ3MgJiBJV19SRVRSWV9MSU1JVCkpCkBAIC03NzAwLDE0ICs3NjYwLDE0IEBACiAJaWYgKHdycXUtPnJldHJ5LmZsYWdzICYgSVdfUkVUUllfTUlOKSB7CiAJCWVyciA9IGlwdzIxMDBfc2V0X3Nob3J0X3JldHJ5KHByaXYsIHdycXUtPnJldHJ5LnZhbHVlKTsKIAkJSVBXX0RFQlVHX1dYKCJTRVQgU2hvcnQgUmV0cnkgTGltaXQgLT4gJWQgXG4iLAotCQkgICAgICAgd3JxdS0+cmV0cnkudmFsdWUpOworCQkJICAgICB3cnF1LT5yZXRyeS52YWx1ZSk7CiAJCWdvdG8gZG9uZTsKIAl9CiAKIAlpZiAod3JxdS0+cmV0cnkuZmxhZ3MgJiBJV19SRVRSWV9NQVgpIHsKIAkJZXJyID0gaXB3MjEwMF9zZXRfbG9uZ19yZXRyeShwcml2LCB3cnF1LT5yZXRyeS52YWx1ZSk7CiAJCUlQV19ERUJVR19XWCgiU0VUIExvbmcgUmV0cnkgTGltaXQgLT4gJWQgXG4iLAotCQkgICAgICAgd3JxdS0+cmV0cnkudmFsdWUpOworCQkJICAgICB3cnF1LT5yZXRyeS52YWx1ZSk7CiAJCWdvdG8gZG9uZTsKIAl9CiAKQEAgLTc3MTcsNyArNzY3Nyw3IEBACiAKIAlJUFdfREVCVUdfV1goIlNFVCBCb3RoIFJldHJ5IExpbWl0cyAtPiAlZCBcbiIsIHdycXUtPnJldHJ5LnZhbHVlKTsKIAotIGRvbmU6CisgICAgICBkb25lOgogCXVwKCZwcml2LT5hY3Rpb25fc2VtKTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtNzczMiwyMCArNzY5MiwxOSBAQAogCiAJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CiAKLQl3cnF1LT5yZXRyeS5kaXNhYmxlZCA9IDA7IC8qIGNhbid0IGJlIGRpc2FibGVkICovCisJd3JxdS0+cmV0cnkuZGlzYWJsZWQgPSAwOwkvKiBjYW4ndCBiZSBkaXNhYmxlZCAqLwogCi0JaWYgKCh3cnF1LT5yZXRyeS5mbGFncyAmIElXX1JFVFJZX1RZUEUpID09Ci0JICAgIElXX1JFVFJZX0xJRkVUSU1FKQorCWlmICgod3JxdS0+cmV0cnkuZmxhZ3MgJiBJV19SRVRSWV9UWVBFKSA9PSBJV19SRVRSWV9MSUZFVElNRSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAod3JxdS0+cmV0cnkuZmxhZ3MgJiBJV19SRVRSWV9NQVgpIHsKLQkJd3JxdS0+cmV0cnkuZmxhZ3MgPSBJV19SRVRSWV9MSU1JVCAmIElXX1JFVFJZX01BWDsKKwkJd3JxdS0+cmV0cnkuZmxhZ3MgPSBJV19SRVRSWV9MSU1JVCB8IElXX1JFVFJZX01BWDsKIAkJd3JxdS0+cmV0cnkudmFsdWUgPSBwcml2LT5sb25nX3JldHJ5X2xpbWl0OwogCX0gZWxzZSB7CiAJCXdycXUtPnJldHJ5LmZsYWdzID0KIAkJICAgIChwcml2LT5zaG9ydF9yZXRyeV9saW1pdCAhPQogCQkgICAgIHByaXYtPmxvbmdfcmV0cnlfbGltaXQpID8KLQkJICAgIElXX1JFVFJZX0xJTUlUICYgSVdfUkVUUllfTUlOIDogSVdfUkVUUllfTElNSVQ7CisJCSAgICBJV19SRVRSWV9MSU1JVCB8IElXX1JFVFJZX01JTiA6IElXX1JFVFJZX0xJTUlUOwogCiAJCXdycXUtPnJldHJ5LnZhbHVlID0gcHJpdi0+c2hvcnRfcmV0cnlfbGltaXQ7CiAJfQpAQCAtNzc2OSwxNSArNzcyOCwxNCBAQAogCX0KIAogCUlQV19ERUJVR19XWCgiSW5pdGlhdGluZyBzY2FuLi4uXG4iKTsKLQlpZiAoaXB3MjEwMF9zZXRfc2Nhbl9vcHRpb25zKHByaXYpIHx8Ci0JICAgIGlwdzIxMDBfc3RhcnRfc2Nhbihwcml2KSkgeworCWlmIChpcHcyMTAwX3NldF9zY2FuX29wdGlvbnMocHJpdikgfHwgaXB3MjEwMF9zdGFydF9zY2FuKHByaXYpKSB7CiAJCUlQV19ERUJVR19XWCgiU3RhcnQgc2NhbiBmYWlsZWQuXG4iKTsKIAogCQkvKiBUT0RPOiBNYXJrIGEgc2NhbiBhcyBwZW5kaW5nIHNvIHdoZW4gaGFyZHdhcmUgaW5pdGlhbGl6ZWQKIAkJICogICAgICAgYSBzY2FuIHN0YXJ0cyAqLwogCX0KIAotIGRvbmU6CisgICAgICBkb25lOgogCXVwKCZwcml2LT5hY3Rpb25fc2VtKTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtNzc5NCw3ICs3NzUyLDYgQEAKIAlyZXR1cm4gaWVlZTgwMjExX3d4X2dldF9zY2FuKHByaXYtPmllZWUsIGluZm8sIHdycXUsIGV4dHJhKTsKIH0KIAotCiAvKgogICogSW1wbGVtZW50YXRpb24gYmFzZWQgb24gY29kZSBpbiBob3N0YXAtZHJpdmVyIHYwLjEuMyBob3N0YXBfaW9jdGwuYwogICovCkBAIC03ODIzLDggKzc3ODAsOCBAQAogfQogCiBzdGF0aWMgaW50IGlwdzIxMDBfd3hfc2V0X3Bvd2VyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkgICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgICAgICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQorCQkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7CiAJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CiAJaW50IGVyciA9IDA7CkBAIC03ODQzLDExICs3ODAwLDExIEBACiAJfQogCiAJc3dpdGNoICh3cnF1LT5wb3dlci5mbGFncyAmIElXX1BPV0VSX01PREUpIHsKLQljYXNlIElXX1BPV0VSX09OOiAgICAvKiBJZiBub3Qgc3BlY2lmaWVkICovCi0JY2FzZSBJV19QT1dFUl9NT0RFOiAgLyogSWYgc2V0IGFsbCBtYXNrICovCi0JY2FzZSBJV19QT1dFUl9BTExfUjogLyogSWYgZXhwbGljaXRlbHkgc3RhdGUgYWxsICovCisJY2FzZSBJV19QT1dFUl9PTjoJLyogSWYgbm90IHNwZWNpZmllZCAqLworCWNhc2UgSVdfUE9XRVJfTU9ERToJLyogSWYgc2V0IGFsbCBtYXNrICovCisJY2FzZSBJV19QT1dFUl9BTExfUjoJLyogSWYgZXhwbGljaXRlbHkgc3RhdGUgYWxsICovCiAJCWJyZWFrOwotCWRlZmF1bHQ6IC8qIE90aGVyd2lzZSB3ZSBkb24ndCBzdXBwb3J0IGl0ICovCisJZGVmYXVsdDoJCS8qIE90aGVyd2lzZSB3ZSBkb24ndCBzdXBwb3J0IGl0ICovCiAJCUlQV19ERUJVR19XWCgiU0VUIFBNIE1vZGU6ICVYIG5vdCBzdXBwb3J0ZWQuXG4iLAogCQkJICAgICB3cnF1LT5wb3dlci5mbGFncyk7CiAJCWVyciA9IC1FT1BOT1RTVVBQOwpAQCAtNzg1OSwxOCArNzgxNiwxNyBAQAogCXByaXYtPnBvd2VyX21vZGUgPSBJUFdfUE9XRVJfRU5BQkxFRCB8IHByaXYtPnBvd2VyX21vZGU7CiAJZXJyID0gaXB3MjEwMF9zZXRfcG93ZXJfbW9kZShwcml2LCBJUFdfUE9XRVJfTEVWRUwocHJpdi0+cG93ZXJfbW9kZSkpOwogCi0JSVBXX0RFQlVHX1dYKCJTRVQgUG93ZXIgTWFuYWdlbWVudCBNb2RlIC0+IDB4JTAyWFxuIiwKLQkJICAgICBwcml2LT5wb3dlcl9tb2RlKTsKKwlJUFdfREVCVUdfV1goIlNFVCBQb3dlciBNYW5hZ2VtZW50IE1vZGUgLT4gMHglMDJYXG4iLCBwcml2LT5wb3dlcl9tb2RlKTsKIAotIGRvbmU6CisgICAgICBkb25lOgogCXVwKCZwcml2LT5hY3Rpb25fc2VtKTsKIAlyZXR1cm4gZXJyOwogCiB9CiAKIHN0YXRpYyBpbnQgaXB3MjEwMF93eF9nZXRfcG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCSAgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCisJCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQl1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKIAkvKgogCSAqIFRoaXMgY2FuIGJlIGNhbGxlZCBhdCBhbnkgdGltZS4gIE5vIGFjdGlvbiBsb2NrIHJlcXVpcmVkCkBAIC03ODc4LDkgKzc4MzQsOSBAQAogCiAJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CiAKLQlpZiAoIShwcml2LT5wb3dlcl9tb2RlICYgSVBXX1BPV0VSX0VOQUJMRUQpKSB7CisJaWYgKCEocHJpdi0+cG93ZXJfbW9kZSAmIElQV19QT1dFUl9FTkFCTEVEKSkKIAkJd3JxdS0+cG93ZXIuZGlzYWJsZWQgPSAxOwotCX0gZWxzZSB7CisJZWxzZSB7CiAJCXdycXUtPnBvd2VyLmRpc2FibGVkID0gMDsKIAkJd3JxdS0+cG93ZXIuZmxhZ3MgPSAwOwogCX0KQEAgLTc4OTAsNiArNzg0NiwyNjkgQEAKIAlyZXR1cm4gMDsKIH0KIAorI2lmIFdJUkVMRVNTX0VYVCA+IDE3CisvKgorICogV0UtMTggV1BBIHN1cHBvcnQKKyAqLworCisvKiBTSU9DU0lXR0VOSUUgKi8KK3N0YXRpYyBpbnQgaXB3MjEwMF93eF9zZXRfZ2VuaWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCXVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQoreworCisJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUgPSBwcml2LT5pZWVlOworCXU4ICpidWY7CisKKwlpZiAoIWllZWUtPndwYV9lbmFibGVkKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlpZiAod3JxdS0+ZGF0YS5sZW5ndGggPiBNQVhfV1BBX0lFX0xFTiB8fAorCSAgICAod3JxdS0+ZGF0YS5sZW5ndGggJiYgZXh0cmEgPT0gTlVMTCkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHdycXUtPmRhdGEubGVuZ3RoKSB7CisJCWJ1ZiA9IGttYWxsb2Mod3JxdS0+ZGF0YS5sZW5ndGgsIEdGUF9LRVJORUwpOworCQlpZiAoYnVmID09IE5VTEwpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQltZW1jcHkoYnVmLCBleHRyYSwgd3JxdS0+ZGF0YS5sZW5ndGgpOworCQlrZnJlZShpZWVlLT53cGFfaWUpOworCQlpZWVlLT53cGFfaWUgPSBidWY7CisJCWllZWUtPndwYV9pZV9sZW4gPSB3cnF1LT5kYXRhLmxlbmd0aDsKKwl9IGVsc2UgeworCQlrZnJlZShpZWVlLT53cGFfaWUpOworCQlpZWVlLT53cGFfaWUgPSBOVUxMOworCQlpZWVlLT53cGFfaWVfbGVuID0gMDsKKwl9CisKKwlpcHcyMTAwX3dwYV9hc3NvY19mcmFtZShwcml2LCBpZWVlLT53cGFfaWUsIGllZWUtPndwYV9pZV9sZW4pOworCisJcmV0dXJuIDA7Cit9CisKKy8qIFNJT0NHSVdHRU5JRSAqLworc3RhdGljIGludCBpcHcyMTAwX3d4X2dldF9nZW5pZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUgPSBwcml2LT5pZWVlOworCisJaWYgKGllZWUtPndwYV9pZV9sZW4gPT0gMCB8fCBpZWVlLT53cGFfaWUgPT0gTlVMTCkgeworCQl3cnF1LT5kYXRhLmxlbmd0aCA9IDA7CisJCXJldHVybiAwOworCX0KKworCWlmICh3cnF1LT5kYXRhLmxlbmd0aCA8IGllZWUtPndwYV9pZV9sZW4pCisJCXJldHVybiAtRTJCSUc7CisKKwl3cnF1LT5kYXRhLmxlbmd0aCA9IGllZWUtPndwYV9pZV9sZW47CisJbWVtY3B5KGV4dHJhLCBpZWVlLT53cGFfaWUsIGllZWUtPndwYV9pZV9sZW4pOworCisJcmV0dXJuIDA7Cit9CisKKy8qIFNJT0NTSVdBVVRIICovCitzdGF0aWMgaW50IGlwdzIxMDBfd3hfc2V0X2F1dGgoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlID0gcHJpdi0+aWVlZTsKKwlzdHJ1Y3QgaXdfcGFyYW0gKnBhcmFtID0gJndycXUtPnBhcmFtOworCXN0cnVjdCBpZWVlODAyMTFfY3J5cHRfZGF0YSAqY3J5cHQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0ID0gMDsKKworCXN3aXRjaCAocGFyYW0tPmZsYWdzICYgSVdfQVVUSF9JTkRFWCkgeworCWNhc2UgSVdfQVVUSF9XUEFfVkVSU0lPTjoKKwljYXNlIElXX0FVVEhfQ0lQSEVSX1BBSVJXSVNFOgorCWNhc2UgSVdfQVVUSF9DSVBIRVJfR1JPVVA6CisJY2FzZSBJV19BVVRIX0tFWV9NR01UOgorCQkvKgorCQkgKiBpcHcyMjAwIGRvZXMgbm90IHVzZSB0aGVzZSBwYXJhbWV0ZXJzCisJCSAqLworCQlicmVhazsKKworCWNhc2UgSVdfQVVUSF9US0lQX0NPVU5URVJNRUFTVVJFUzoKKwkJY3J5cHQgPSBwcml2LT5pZWVlLT5jcnlwdFtwcml2LT5pZWVlLT50eF9rZXlpZHhdOworCQlpZiAoIWNyeXB0IHx8ICFjcnlwdC0+b3BzLT5zZXRfZmxhZ3MgfHwgIWNyeXB0LT5vcHMtPmdldF9mbGFncykKKwkJCWJyZWFrOworCisJCWZsYWdzID0gY3J5cHQtPm9wcy0+Z2V0X2ZsYWdzKGNyeXB0LT5wcml2KTsKKworCQlpZiAocGFyYW0tPnZhbHVlKQorCQkJZmxhZ3MgfD0gSUVFRTgwMjExX0NSWVBUT19US0lQX0NPVU5URVJNRUFTVVJFUzsKKwkJZWxzZQorCQkJZmxhZ3MgJj0gfklFRUU4MDIxMV9DUllQVE9fVEtJUF9DT1VOVEVSTUVBU1VSRVM7CisKKwkJY3J5cHQtPm9wcy0+c2V0X2ZsYWdzKGZsYWdzLCBjcnlwdC0+cHJpdik7CisKKwkJYnJlYWs7CisKKwljYXNlIElXX0FVVEhfRFJPUF9VTkVOQ1JZUFRFRDp7CisJCQkvKiBIQUNLOgorCQkJICoKKwkJCSAqIHdwYV9zdXBwbGljYW50IGNhbGxzIHNldF93cGFfZW5hYmxlZCB3aGVuIHRoZSBkcml2ZXIKKwkJCSAqIGlzIGxvYWRlZCBhbmQgdW5sb2FkZWQsIHJlZ2FyZGxlc3Mgb2YgaWYgV1BBIGlzIGJlaW5nCisJCQkgKiB1c2VkLiAgTm8gb3RoZXIgY2FsbHMgYXJlIG1hZGUgd2hpY2ggY2FuIGJlIHVzZWQgdG8KKwkJCSAqIGRldGVybWluZSBpZiBlbmNyeXB0aW9uIHdpbGwgYmUgdXNlZCBvciBub3QgcHJpb3IgdG8KKwkJCSAqIGFzc29jaWF0aW9uIGJlaW5nIGV4cGVjdGVkLiAgSWYgZW5jcnlwdGlvbiBpcyBub3QgYmVpbmcKKwkJCSAqIHVzZWQsIGRyb3BfdW5lbmNyeXB0ZWQgaXMgc2V0IHRvIGZhbHNlLCBlbHNlIHRydWUgLS0gd2UKKwkJCSAqIGNhbiB1c2UgdGhpcyB0byBkZXRlcm1pbmUgaWYgdGhlIENBUF9QUklWQUNZX09OIGJpdCBzaG91bGQKKwkJCSAqIGJlIHNldC4KKwkJCSAqLworCQkJc3RydWN0IGllZWU4MDIxMV9zZWN1cml0eSBzZWMgPSB7CisJCQkJLmZsYWdzID0gU0VDX0VOQUJMRUQsCisJCQkJLmVuYWJsZWQgPSBwYXJhbS0+dmFsdWUsCisJCQl9OworCQkJcHJpdi0+aWVlZS0+ZHJvcF91bmVuY3J5cHRlZCA9IHBhcmFtLT52YWx1ZTsKKwkJCS8qIFdlIG9ubHkgY2hhbmdlIFNFQ19MRVZFTCBmb3Igb3BlbiBtb2RlLiBPdGhlcnMKKwkJCSAqIGFyZSBzZXQgYnkgaXB3X3dwYV9zZXRfZW5jcnlwdGlvbi4KKwkJCSAqLworCQkJaWYgKCFwYXJhbS0+dmFsdWUpIHsKKwkJCQlzZWMuZmxhZ3MgfD0gU0VDX0xFVkVMOworCQkJCXNlYy5sZXZlbCA9IFNFQ19MRVZFTF8wOworCQkJfSBlbHNlIHsKKwkJCQlzZWMuZmxhZ3MgfD0gU0VDX0xFVkVMOworCQkJCXNlYy5sZXZlbCA9IFNFQ19MRVZFTF8xOworCQkJfQorCQkJaWYgKHByaXYtPmllZWUtPnNldF9zZWN1cml0eSkKKwkJCQlwcml2LT5pZWVlLT5zZXRfc2VjdXJpdHkocHJpdi0+aWVlZS0+ZGV2LCAmc2VjKTsKKwkJCWJyZWFrOworCQl9CisKKwljYXNlIElXX0FVVEhfODAyMTFfQVVUSF9BTEc6CisJCXJldCA9IGlwdzIxMDBfd3BhX3NldF9hdXRoX2FsZ3MocHJpdiwgcGFyYW0tPnZhbHVlKTsKKwkJYnJlYWs7CisKKwljYXNlIElXX0FVVEhfV1BBX0VOQUJMRUQ6CisJCXJldCA9IGlwdzIxMDBfd3BhX2VuYWJsZShwcml2LCBwYXJhbS0+dmFsdWUpOworCQlicmVhazsKKworCWNhc2UgSVdfQVVUSF9SWF9VTkVOQ1JZUFRFRF9FQVBPTDoKKwkJaWVlZS0+aWVlZTgwMl8xeCA9IHBhcmFtLT52YWx1ZTsKKwkJYnJlYWs7CisKKwkJLy9jYXNlIElXX0FVVEhfUk9BTUlOR19DT05UUk9MOgorCWNhc2UgSVdfQVVUSF9QUklWQUNZX0lOVk9LRUQ6CisJCWllZWUtPnByaXZhY3lfaW52b2tlZCA9IHBhcmFtLT52YWx1ZTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorCXJldHVybiByZXQ7Cit9CisKKy8qIFNJT0NHSVdBVVRIICovCitzdGF0aWMgaW50IGlwdzIxMDBfd3hfZ2V0X2F1dGgoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlID0gcHJpdi0+aWVlZTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NyeXB0X2RhdGEgKmNyeXB0OworCXN0cnVjdCBpd19wYXJhbSAqcGFyYW0gPSAmd3JxdS0+cGFyYW07CisJaW50IHJldCA9IDA7CisKKwlzd2l0Y2ggKHBhcmFtLT5mbGFncyAmIElXX0FVVEhfSU5ERVgpIHsKKwljYXNlIElXX0FVVEhfV1BBX1ZFUlNJT046CisJY2FzZSBJV19BVVRIX0NJUEhFUl9QQUlSV0lTRToKKwljYXNlIElXX0FVVEhfQ0lQSEVSX0dST1VQOgorCWNhc2UgSVdfQVVUSF9LRVlfTUdNVDoKKwkJLyoKKwkJICogd3BhX3N1cHBsaWNhbnQgd2lsbCBjb250cm9sIHRoZXNlIGludGVybmFsbHkKKwkJICovCisJCXJldCA9IC1FT1BOT1RTVVBQOworCQlicmVhazsKKworCWNhc2UgSVdfQVVUSF9US0lQX0NPVU5URVJNRUFTVVJFUzoKKwkJY3J5cHQgPSBwcml2LT5pZWVlLT5jcnlwdFtwcml2LT5pZWVlLT50eF9rZXlpZHhdOworCQlpZiAoIWNyeXB0IHx8ICFjcnlwdC0+b3BzLT5nZXRfZmxhZ3MpIHsKKwkJCUlQV19ERUJVR19XQVJOSU5HKCJDYW4ndCBnZXQgVEtJUCBjb3VudGVybWVhc3VyZXM6ICIKKwkJCQkJICAiY3J5cHQgbm90IHNldCFcbiIpOworCQkJYnJlYWs7CisJCX0KKworCQlwYXJhbS0+dmFsdWUgPSAoY3J5cHQtPm9wcy0+Z2V0X2ZsYWdzKGNyeXB0LT5wcml2KSAmCisJCQkJSUVFRTgwMjExX0NSWVBUT19US0lQX0NPVU5URVJNRUFTVVJFUykgPyAxIDogMDsKKworCQlicmVhazsKKworCWNhc2UgSVdfQVVUSF9EUk9QX1VORU5DUllQVEVEOgorCQlwYXJhbS0+dmFsdWUgPSBpZWVlLT5kcm9wX3VuZW5jcnlwdGVkOworCQlicmVhazsKKworCWNhc2UgSVdfQVVUSF84MDIxMV9BVVRIX0FMRzoKKwkJcGFyYW0tPnZhbHVlID0gcHJpdi0+aWVlZS0+c2VjLmF1dGhfbW9kZTsKKwkJYnJlYWs7CisKKwljYXNlIElXX0FVVEhfV1BBX0VOQUJMRUQ6CisJCXBhcmFtLT52YWx1ZSA9IGllZWUtPndwYV9lbmFibGVkOworCQlicmVhazsKKworCWNhc2UgSVdfQVVUSF9SWF9VTkVOQ1JZUFRFRF9FQVBPTDoKKwkJcGFyYW0tPnZhbHVlID0gaWVlZS0+aWVlZTgwMl8xeDsKKwkJYnJlYWs7CisKKwljYXNlIElXX0FVVEhfUk9BTUlOR19DT05UUk9MOgorCWNhc2UgSVdfQVVUSF9QUklWQUNZX0lOVk9LRUQ6CisJCXBhcmFtLT52YWx1ZSA9IGllZWUtPnByaXZhY3lfaW52b2tlZDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorCXJldHVybiAwOworfQorCisvKiBTSU9DU0lXRU5DT0RFRVhUICovCitzdGF0aWMgaW50IGlwdzIxMDBfd3hfc2V0X2VuY29kZWV4dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlyZXR1cm4gaWVlZTgwMjExX3d4X3NldF9lbmNvZGVleHQocHJpdi0+aWVlZSwgaW5mbywgd3JxdSwgZXh0cmEpOworfQorCisvKiBTSU9DR0lXRU5DT0RFRVhUICovCitzdGF0aWMgaW50IGlwdzIxMDBfd3hfZ2V0X2VuY29kZWV4dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlyZXR1cm4gaWVlZTgwMjExX3d4X2dldF9lbmNvZGVleHQocHJpdi0+aWVlZSwgaW5mbywgd3JxdSwgZXh0cmEpOworfQorCisvKiBTSU9DU0lXTUxNRSAqLworc3RhdGljIGludCBpcHcyMTAwX3d4X3NldF9tbG1lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaXdfbWxtZSAqbWxtZSA9IChzdHJ1Y3QgaXdfbWxtZSAqKWV4dHJhOworCXUxNiByZWFzb247CisKKwlyZWFzb24gPSBjcHVfdG9fbGUxNihtbG1lLT5yZWFzb25fY29kZSk7CisKKwlzd2l0Y2ggKG1sbWUtPmNtZCkgeworCWNhc2UgSVdfTUxNRV9ERUFVVEg6CisJCS8vIHNpbGVudGx5IGlnbm9yZQorCQlicmVhazsKKworCWNhc2UgSVdfTUxNRV9ESVNBU1NPQzoKKwkJaXB3MjEwMF9kaXNhc3NvY2lhdGVfYnNzaWQocHJpdik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KKwlyZXR1cm4gMDsKK30KKyNlbmRpZgkJCQkvKiBXSVJFTEVTU19FWFQgPiAxNyAqLwogCiAvKgogICoKQEAgLTc5MjMsNyArODE0Miw3IEBACiAJCWlmIChwcml2LT5pZWVlLT5pd19tb2RlID09IElXX01PREVfTU9OSVRPUikKIAkJCWVyciA9IGlwdzIxMDBfc3dpdGNoX21vZGUocHJpdiwgcHJpdi0+bGFzdF9tb2RlKTsKIAl9Ci0gZG9uZToKKyAgICAgIGRvbmU6CiAJdXAoJnByaXYtPmFjdGlvbl9zZW0pOwogCXJldHVybiBlcnI7CiB9CkBAIC03OTU4LDcgKzgxNzcsNyBAQAogCiAJaWYgKHByaXYtPnBvd2VyX21vZGUgIT0gbW9kZSkKIAkJZXJyID0gaXB3MjEwMF9zZXRfcG93ZXJfbW9kZShwcml2LCBtb2RlKTsKLSBkb25lOgorICAgICAgZG9uZToKIAl1cCgmcHJpdi0+YWN0aW9uX3NlbSk7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTc5ODYsOCArODIwNSw4IEBACiAJCQkJICJQb3dlciBzYXZlIGxldmVsOiAlZCAoTm9uZSkiLCBsZXZlbCk7CiAJCQlicmVhazsKIAkJY2FzZSBJUFdfUE9XRVJfQVVUTzoKLQkJc25wcmludGYoZXh0cmEsIE1BWF9QT1dFUl9TVFJJTkcsCi0JCQkgIlBvd2VyIHNhdmUgbGV2ZWw6ICVkIChBdXRvKSIsIDApOworCQkJc25wcmludGYoZXh0cmEsIE1BWF9QT1dFUl9TVFJJTkcsCisJCQkJICJQb3dlciBzYXZlIGxldmVsOiAlZCAoQXV0bykiLCAwKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJdGltZW91dCA9IHRpbWVvdXRfZHVyYXRpb25bbGV2ZWwgLSAxXSAvIDEwMDA7CkBAIC04MDA0LDcgKzgyMjMsNiBAQAogCXJldHVybiAwOwogfQogCi0KIHN0YXRpYyBpbnQgaXB3MjEwMF93eF9zZXRfcHJlYW1ibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJCSAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQpAQCAtODAyOSwxNCArODI0NywxNCBAQAogCiAJZXJyID0gaXB3MjEwMF9zeXN0ZW1fY29uZmlnKHByaXYsIDApOwogCi1kb25lOgorICAgICAgZG9uZToKIAl1cCgmcHJpdi0+YWN0aW9uX3NlbSk7CiAJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGludCBpcHcyMTAwX3d4X2dldF9wcmVhbWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKKwkJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewogCS8qCiAJICogVGhpcyBjYW4gYmUgY2FsbGVkIGF0IGFueSB0aW1lLiAgTm8gYWN0aW9uIGxvY2sgcmVxdWlyZWQKQEAgLTgwNTIsNTQgKzgyNzAsMTE2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpd19oYW5kbGVyIGlwdzIxMDBfd3hfaGFuZGxlcnNbXSA9CisjaWZkZWYgQ09ORklHX0lQVzIxMDBfTU9OSVRPUgorc3RhdGljIGludCBpcHcyMTAwX3d4X3NldF9jcmNfY2hlY2soc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7Ci0gICAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgLyogU0lPQ1NJV0NPTU1JVCAqLwotICAgICAgICBpcHcyMTAwX3d4X2dldF9uYW1lLCAgICAgIC8qIFNJT0NHSVdOQU1FICovCi0gICAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgLyogU0lPQ1NJV05XSUQgKi8KLSAgICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAvKiBTSU9DR0lXTldJRCAqLwotICAgICAgICBpcHcyMTAwX3d4X3NldF9mcmVxLCAgICAgIC8qIFNJT0NTSVdGUkVRICovCi0gICAgICAgIGlwdzIxMDBfd3hfZ2V0X2ZyZXEsICAgICAgLyogU0lPQ0dJV0ZSRVEgKi8KLSAgICAgICAgaXB3MjEwMF93eF9zZXRfbW9kZSwgICAgICAvKiBTSU9DU0lXTU9ERSAqLwotICAgICAgICBpcHcyMTAwX3d4X2dldF9tb2RlLCAgICAgIC8qIFNJT0NHSVdNT0RFICovCi0gICAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgLyogU0lPQ1NJV1NFTlMgKi8KLSAgICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAvKiBTSU9DR0lXU0VOUyAqLwotICAgICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgIC8qIFNJT0NTSVdSQU5HRSAqLwotICAgICAgICBpcHcyMTAwX3d4X2dldF9yYW5nZSwgICAgIC8qIFNJT0NHSVdSQU5HRSAqLwotICAgICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgIC8qIFNJT0NTSVdQUklWICovCi0gICAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgLyogU0lPQ0dJV1BSSVYgKi8KLSAgICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAvKiBTSU9DU0lXU1RBVFMgKi8KLSAgICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAvKiBTSU9DR0lXU1RBVFMgKi8KLSAgICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAvKiBTSU9DU0lXU1BZICovCi0gICAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgLyogU0lPQ0dJV1NQWSAqLwotICAgICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgIC8qIFNJT0NHSVdUSFJTUFkgKi8KLSAgICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAvKiBTSU9DV0lXVEhSU1BZICovCi0gICAgICAgIGlwdzIxMDBfd3hfc2V0X3dhcCwgICAgICAgLyogU0lPQ1NJV0FQICovCi0gICAgICAgIGlwdzIxMDBfd3hfZ2V0X3dhcCwgICAgICAgLyogU0lPQ0dJV0FQICovCi0gICAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgLyogLS0gaG9sZSAtLSAqLwotICAgICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgIC8qIFNJT0NHSVdBUExJU1QgLS0gZGVwcmVjYXRlZCAqLwotICAgICAgICBpcHcyMTAwX3d4X3NldF9zY2FuLCAgICAgIC8qIFNJT0NTSVdTQ0FOICovCi0gICAgICAgIGlwdzIxMDBfd3hfZ2V0X3NjYW4sICAgICAgLyogU0lPQ0dJV1NDQU4gKi8KLSAgICAgICAgaXB3MjEwMF93eF9zZXRfZXNzaWQsICAgICAvKiBTSU9DU0lXRVNTSUQgKi8KLSAgICAgICAgaXB3MjEwMF93eF9nZXRfZXNzaWQsICAgICAvKiBTSU9DR0lXRVNTSUQgKi8KLSAgICAgICAgaXB3MjEwMF93eF9zZXRfbmljaywgICAgICAvKiBTSU9DU0lXTklDS04gKi8KLSAgICAgICAgaXB3MjEwMF93eF9nZXRfbmljaywgICAgICAvKiBTSU9DR0lXTklDS04gKi8KLSAgICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAvKiAtLSBob2xlIC0tICovCi0gICAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgLyogLS0gaG9sZSAtLSAqLwotICAgICAgICBpcHcyMTAwX3d4X3NldF9yYXRlLCAgICAgIC8qIFNJT0NTSVdSQVRFICovCi0gICAgICAgIGlwdzIxMDBfd3hfZ2V0X3JhdGUsICAgICAgLyogU0lPQ0dJV1JBVEUgKi8KLSAgICAgICAgaXB3MjEwMF93eF9zZXRfcnRzLCAgICAgICAvKiBTSU9DU0lXUlRTICovCi0gICAgICAgIGlwdzIxMDBfd3hfZ2V0X3J0cywgICAgICAgLyogU0lPQ0dJV1JUUyAqLwotICAgICAgICBpcHcyMTAwX3d4X3NldF9mcmFnLCAgICAgIC8qIFNJT0NTSVdGUkFHICovCi0gICAgICAgIGlwdzIxMDBfd3hfZ2V0X2ZyYWcsICAgICAgLyogU0lPQ0dJV0ZSQUcgKi8KLSAgICAgICAgaXB3MjEwMF93eF9zZXRfdHhwb3csICAgICAvKiBTSU9DU0lXVFhQT1cgKi8KLSAgICAgICAgaXB3MjEwMF93eF9nZXRfdHhwb3csICAgICAvKiBTSU9DR0lXVFhQT1cgKi8KLSAgICAgICAgaXB3MjEwMF93eF9zZXRfcmV0cnksICAgICAvKiBTSU9DU0lXUkVUUlkgKi8KLSAgICAgICAgaXB3MjEwMF93eF9nZXRfcmV0cnksICAgICAvKiBTSU9DR0lXUkVUUlkgKi8KLSAgICAgICAgaXB3MjEwMF93eF9zZXRfZW5jb2RlLCAgICAvKiBTSU9DU0lXRU5DT0RFICovCi0gICAgICAgIGlwdzIxMDBfd3hfZ2V0X2VuY29kZSwgICAgLyogU0lPQ0dJV0VOQ09ERSAqLwotICAgICAgICBpcHcyMTAwX3d4X3NldF9wb3dlciwgICAgIC8qIFNJT0NTSVdQT1dFUiAqLwotICAgICAgICBpcHcyMTAwX3d4X2dldF9wb3dlciwgICAgIC8qIFNJT0NHSVdQT1dFUiAqLworCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCWludCBlcnIsIG1vZGUgPSAqKGludCAqKWV4dHJhOworCisJZG93bigmcHJpdi0+YWN0aW9uX3NlbSk7CisJaWYgKCEocHJpdi0+c3RhdHVzICYgU1RBVFVTX0lOSVRJQUxJWkVEKSkgeworCQllcnIgPSAtRUlPOworCQlnb3RvIGRvbmU7CisJfQorCisJaWYgKG1vZGUgPT0gMSkKKwkJcHJpdi0+Y29uZmlnIHw9IENGR19DUkNfQ0hFQ0s7CisJZWxzZSBpZiAobW9kZSA9PSAwKQorCQlwcml2LT5jb25maWcgJj0gfkNGR19DUkNfQ0hFQ0s7CisJZWxzZSB7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gZG9uZTsKKwl9CisJZXJyID0gMDsKKworICAgICAgZG9uZToKKwl1cCgmcHJpdi0+YWN0aW9uX3NlbSk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBpcHcyMTAwX3d4X2dldF9jcmNfY2hlY2soc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCit7CisJLyoKKwkgKiBUaGlzIGNhbiBiZSBjYWxsZWQgYXQgYW55IHRpbWUuICBObyBhY3Rpb24gbG9jayByZXF1aXJlZAorCSAqLworCisJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisKKwlpZiAocHJpdi0+Y29uZmlnICYgQ0ZHX0NSQ19DSEVDSykKKwkJc25wcmludGYod3JxdS0+bmFtZSwgSUZOQU1TSVosICJDUkMgY2hlY2tlZCAoMSkiKTsKKwllbHNlCisJCXNucHJpbnRmKHdycXUtPm5hbWUsIElGTkFNU0laLCAiQ1JDIGlnbm9yZWQgKDApIik7CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgkJCQkvKiBDT05GSUdfSVBXMjEwMF9NT05JVE9SICovCisKK3N0YXRpYyBpd19oYW5kbGVyIGlwdzIxMDBfd3hfaGFuZGxlcnNbXSA9IHsKKwlOVUxMLAkJCS8qIFNJT0NTSVdDT01NSVQgKi8KKwlpcHcyMTAwX3d4X2dldF9uYW1lLAkvKiBTSU9DR0lXTkFNRSAqLworCU5VTEwsCQkJLyogU0lPQ1NJV05XSUQgKi8KKwlOVUxMLAkJCS8qIFNJT0NHSVdOV0lEICovCisJaXB3MjEwMF93eF9zZXRfZnJlcSwJLyogU0lPQ1NJV0ZSRVEgKi8KKwlpcHcyMTAwX3d4X2dldF9mcmVxLAkvKiBTSU9DR0lXRlJFUSAqLworCWlwdzIxMDBfd3hfc2V0X21vZGUsCS8qIFNJT0NTSVdNT0RFICovCisJaXB3MjEwMF93eF9nZXRfbW9kZSwJLyogU0lPQ0dJV01PREUgKi8KKwlOVUxMLAkJCS8qIFNJT0NTSVdTRU5TICovCisJTlVMTCwJCQkvKiBTSU9DR0lXU0VOUyAqLworCU5VTEwsCQkJLyogU0lPQ1NJV1JBTkdFICovCisJaXB3MjEwMF93eF9nZXRfcmFuZ2UsCS8qIFNJT0NHSVdSQU5HRSAqLworCU5VTEwsCQkJLyogU0lPQ1NJV1BSSVYgKi8KKwlOVUxMLAkJCS8qIFNJT0NHSVdQUklWICovCisJTlVMTCwJCQkvKiBTSU9DU0lXU1RBVFMgKi8KKwlOVUxMLAkJCS8qIFNJT0NHSVdTVEFUUyAqLworCU5VTEwsCQkJLyogU0lPQ1NJV1NQWSAqLworCU5VTEwsCQkJLyogU0lPQ0dJV1NQWSAqLworCU5VTEwsCQkJLyogU0lPQ0dJV1RIUlNQWSAqLworCU5VTEwsCQkJLyogU0lPQ1dJV1RIUlNQWSAqLworCWlwdzIxMDBfd3hfc2V0X3dhcCwJLyogU0lPQ1NJV0FQICovCisJaXB3MjEwMF93eF9nZXRfd2FwLAkvKiBTSU9DR0lXQVAgKi8KKyNpZiBXSVJFTEVTU19FWFQgPiAxNworCWlwdzIxMDBfd3hfc2V0X21sbWUsCS8qIFNJT0NTSVdNTE1FICovCisjZWxzZQorCU5VTEwsCQkJLyogLS0gaG9sZSAtLSAqLworI2VuZGlmCisJTlVMTCwJCQkvKiBTSU9DR0lXQVBMSVNUIC0tIGRlcHJlY2F0ZWQgKi8KKwlpcHcyMTAwX3d4X3NldF9zY2FuLAkvKiBTSU9DU0lXU0NBTiAqLworCWlwdzIxMDBfd3hfZ2V0X3NjYW4sCS8qIFNJT0NHSVdTQ0FOICovCisJaXB3MjEwMF93eF9zZXRfZXNzaWQsCS8qIFNJT0NTSVdFU1NJRCAqLworCWlwdzIxMDBfd3hfZ2V0X2Vzc2lkLAkvKiBTSU9DR0lXRVNTSUQgKi8KKwlpcHcyMTAwX3d4X3NldF9uaWNrLAkvKiBTSU9DU0lXTklDS04gKi8KKwlpcHcyMTAwX3d4X2dldF9uaWNrLAkvKiBTSU9DR0lXTklDS04gKi8KKwlOVUxMLAkJCS8qIC0tIGhvbGUgLS0gKi8KKwlOVUxMLAkJCS8qIC0tIGhvbGUgLS0gKi8KKwlpcHcyMTAwX3d4X3NldF9yYXRlLAkvKiBTSU9DU0lXUkFURSAqLworCWlwdzIxMDBfd3hfZ2V0X3JhdGUsCS8qIFNJT0NHSVdSQVRFICovCisJaXB3MjEwMF93eF9zZXRfcnRzLAkvKiBTSU9DU0lXUlRTICovCisJaXB3MjEwMF93eF9nZXRfcnRzLAkvKiBTSU9DR0lXUlRTICovCisJaXB3MjEwMF93eF9zZXRfZnJhZywJLyogU0lPQ1NJV0ZSQUcgKi8KKwlpcHcyMTAwX3d4X2dldF9mcmFnLAkvKiBTSU9DR0lXRlJBRyAqLworCWlwdzIxMDBfd3hfc2V0X3R4cG93LAkvKiBTSU9DU0lXVFhQT1cgKi8KKwlpcHcyMTAwX3d4X2dldF90eHBvdywJLyogU0lPQ0dJV1RYUE9XICovCisJaXB3MjEwMF93eF9zZXRfcmV0cnksCS8qIFNJT0NTSVdSRVRSWSAqLworCWlwdzIxMDBfd3hfZ2V0X3JldHJ5LAkvKiBTSU9DR0lXUkVUUlkgKi8KKwlpcHcyMTAwX3d4X3NldF9lbmNvZGUsCS8qIFNJT0NTSVdFTkNPREUgKi8KKwlpcHcyMTAwX3d4X2dldF9lbmNvZGUsCS8qIFNJT0NHSVdFTkNPREUgKi8KKwlpcHcyMTAwX3d4X3NldF9wb3dlciwJLyogU0lPQ1NJV1BPV0VSICovCisJaXB3MjEwMF93eF9nZXRfcG93ZXIsCS8qIFNJT0NHSVdQT1dFUiAqLworI2lmIFdJUkVMRVNTX0VYVCA+IDE3CisJTlVMTCwJCQkvKiAtLSBob2xlIC0tICovCisJTlVMTCwJCQkvKiAtLSBob2xlIC0tICovCisJaXB3MjEwMF93eF9zZXRfZ2VuaWUsCS8qIFNJT0NTSVdHRU5JRSAqLworCWlwdzIxMDBfd3hfZ2V0X2dlbmllLAkvKiBTSU9DR0lXR0VOSUUgKi8KKwlpcHcyMTAwX3d4X3NldF9hdXRoLAkvKiBTSU9DU0lXQVVUSCAqLworCWlwdzIxMDBfd3hfZ2V0X2F1dGgsCS8qIFNJT0NHSVdBVVRIICovCisJaXB3MjEwMF93eF9zZXRfZW5jb2RlZXh0LAkvKiBTSU9DU0lXRU5DT0RFRVhUICovCisJaXB3MjEwMF93eF9nZXRfZW5jb2RlZXh0LAkvKiBTSU9DR0lXRU5DT0RFRVhUICovCisJTlVMTCwJCQkvKiBTSU9DU0lXUE1LU0EgKi8KKyNlbmRpZgogfTsKIAogI2RlZmluZSBJUFcyMTAwX1BSSVZfU0VUX01PTklUT1IJU0lPQ0lXRklSU1RQUklWCkBAIC04MTA4LDYwICs4Mzg4LDcxIEBACiAjZGVmaW5lIElQVzIxMDBfUFJJVl9HRVRfUE9XRVIJCVNJT0NJV0ZJUlNUUFJJViszCiAjZGVmaW5lIElQVzIxMDBfUFJJVl9TRVRfTE9OR1BSRUFNQkxFCVNJT0NJV0ZJUlNUUFJJVis0CiAjZGVmaW5lIElQVzIxMDBfUFJJVl9HRVRfTE9OR1BSRUFNQkxFCVNJT0NJV0ZJUlNUUFJJVis1CisjZGVmaW5lIElQVzIxMDBfUFJJVl9TRVRfQ1JDX0NIRUNLCVNJT0NJV0ZJUlNUUFJJVis2CisjZGVmaW5lIElQVzIxMDBfUFJJVl9HRVRfQ1JDX0NIRUNLCVNJT0NJV0ZJUlNUUFJJVis3CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaXdfcHJpdl9hcmdzIGlwdzIxMDBfcHJpdmF0ZV9hcmdzW10gPSB7CiAKICNpZmRlZiBDT05GSUdfSVBXMjEwMF9NT05JVE9SCiAJewotCQlJUFcyMTAwX1BSSVZfU0VUX01PTklUT1IsCi0JCUlXX1BSSVZfVFlQRV9JTlQgfCBJV19QUklWX1NJWkVfRklYRUQgfCAyLCAwLCAibW9uaXRvciIKLQl9LAorCSBJUFcyMTAwX1BSSVZfU0VUX01PTklUT1IsCisJIElXX1BSSVZfVFlQRV9JTlQgfCBJV19QUklWX1NJWkVfRklYRUQgfCAyLCAwLCAibW9uaXRvciJ9LAogCXsKLQkJSVBXMjEwMF9QUklWX1JFU0VULAotCQlJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMCwgMCwgInJlc2V0IgotCX0sCi0jZW5kaWYgLyogQ09ORklHX0lQVzIxMDBfTU9OSVRPUiAqLworCSBJUFcyMTAwX1BSSVZfUkVTRVQsCisJIElXX1BSSVZfVFlQRV9JTlQgfCBJV19QUklWX1NJWkVfRklYRUQgfCAwLCAwLCAicmVzZXQifSwKKyNlbmRpZgkJCQkvKiBDT05GSUdfSVBXMjEwMF9NT05JVE9SICovCiAKIAl7Ci0JCUlQVzIxMDBfUFJJVl9TRVRfUE9XRVIsCi0JCUlXX1BSSVZfVFlQRV9JTlQgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLCAwLCAic2V0X3Bvd2VyIgotCX0sCisJIElQVzIxMDBfUFJJVl9TRVRfUE9XRVIsCisJIElXX1BSSVZfVFlQRV9JTlQgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLCAwLCAic2V0X3Bvd2VyIn0sCiAJewotCQlJUFcyMTAwX1BSSVZfR0VUX1BPV0VSLAotCQkwLCBJV19QUklWX1RZUEVfQ0hBUiB8IElXX1BSSVZfU0laRV9GSVhFRCB8IE1BWF9QT1dFUl9TVFJJTkcsICJnZXRfcG93ZXIiCi0JfSwKKwkgSVBXMjEwMF9QUklWX0dFVF9QT1dFUiwKKwkgMCwgSVdfUFJJVl9UWVBFX0NIQVIgfCBJV19QUklWX1NJWkVfRklYRUQgfCBNQVhfUE9XRVJfU1RSSU5HLAorCSAiZ2V0X3Bvd2VyIn0sCiAJewotCQlJUFcyMTAwX1BSSVZfU0VUX0xPTkdQUkVBTUJMRSwKLQkJSVdfUFJJVl9UWVBFX0lOVCB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEsIDAsICJzZXRfcHJlYW1ibGUiCi0JfSwKKwkgSVBXMjEwMF9QUklWX1NFVF9MT05HUFJFQU1CTEUsCisJIElXX1BSSVZfVFlQRV9JTlQgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLCAwLCAic2V0X3ByZWFtYmxlIn0sCiAJewotCQlJUFcyMTAwX1BSSVZfR0VUX0xPTkdQUkVBTUJMRSwKLQkJMCwgSVdfUFJJVl9UWVBFX0NIQVIgfCBJV19QUklWX1NJWkVfRklYRUQgfCBJRk5BTVNJWiwgImdldF9wcmVhbWJsZSIKLQl9LAorCSBJUFcyMTAwX1BSSVZfR0VUX0xPTkdQUkVBTUJMRSwKKwkgMCwgSVdfUFJJVl9UWVBFX0NIQVIgfCBJV19QUklWX1NJWkVfRklYRUQgfCBJRk5BTVNJWiwgImdldF9wcmVhbWJsZSJ9LAorI2lmZGVmIENPTkZJR19JUFcyMTAwX01PTklUT1IKKwl7CisJIElQVzIxMDBfUFJJVl9TRVRfQ1JDX0NIRUNLLAorCSBJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwgMCwgInNldF9jcmNfY2hlY2sifSwKKwl7CisJIElQVzIxMDBfUFJJVl9HRVRfQ1JDX0NIRUNLLAorCSAwLCBJV19QUklWX1RZUEVfQ0hBUiB8IElXX1BSSVZfU0laRV9GSVhFRCB8IElGTkFNU0laLCAiZ2V0X2NyY19jaGVjayJ9LAorI2VuZGlmCQkJCS8qIENPTkZJR19JUFcyMTAwX01PTklUT1IgKi8KIH07CiAKIHN0YXRpYyBpd19oYW5kbGVyIGlwdzIxMDBfcHJpdmF0ZV9oYW5kbGVyW10gPSB7CiAjaWZkZWYgQ09ORklHX0lQVzIxMDBfTU9OSVRPUgogCWlwdzIxMDBfd3hfc2V0X3Byb21pc2MsCiAJaXB3MjEwMF93eF9yZXNldCwKLSNlbHNlIC8qIENPTkZJR19JUFcyMTAwX01PTklUT1IgKi8KKyNlbHNlCQkJCS8qIENPTkZJR19JUFcyMTAwX01PTklUT1IgKi8KIAlOVUxMLAogCU5VTEwsCi0jZW5kaWYgLyogQ09ORklHX0lQVzIxMDBfTU9OSVRPUiAqLworI2VuZGlmCQkJCS8qIENPTkZJR19JUFcyMTAwX01PTklUT1IgKi8KIAlpcHcyMTAwX3d4X3NldF9wb3dlcm1vZGUsCiAJaXB3MjEwMF93eF9nZXRfcG93ZXJtb2RlLAogCWlwdzIxMDBfd3hfc2V0X3ByZWFtYmxlLAogCWlwdzIxMDBfd3hfZ2V0X3ByZWFtYmxlLAorI2lmZGVmIENPTkZJR19JUFcyMTAwX01PTklUT1IKKwlpcHcyMTAwX3d4X3NldF9jcmNfY2hlY2ssCisJaXB3MjEwMF93eF9nZXRfY3JjX2NoZWNrLAorI2Vsc2UJCQkJLyogQ09ORklHX0lQVzIxMDBfTU9OSVRPUiAqLworCU5VTEwsCisJTlVMTCwKKyNlbmRpZgkJCQkvKiBDT05GSUdfSVBXMjEwMF9NT05JVE9SICovCiB9OwogCi1zdGF0aWMgc3RydWN0IGl3X2hhbmRsZXJfZGVmIGlwdzIxMDBfd3hfaGFuZGxlcl9kZWYgPQoteworc3RhdGljIHN0cnVjdCBpd19oYW5kbGVyX2RlZiBpcHcyMTAwX3d4X2hhbmRsZXJfZGVmID0gewogCS5zdGFuZGFyZCA9IGlwdzIxMDBfd3hfaGFuZGxlcnMsCiAJLm51bV9zdGFuZGFyZCA9IHNpemVvZihpcHcyMTAwX3d4X2hhbmRsZXJzKSAvIHNpemVvZihpd19oYW5kbGVyKSwKIAkubnVtX3ByaXZhdGUgPSBzaXplb2YoaXB3MjEwMF9wcml2YXRlX2hhbmRsZXIpIC8gc2l6ZW9mKGl3X2hhbmRsZXIpLAotIAkubnVtX3ByaXZhdGVfYXJncyA9IHNpemVvZihpcHcyMTAwX3ByaXZhdGVfYXJncykgLwotCXNpemVvZihzdHJ1Y3QgaXdfcHJpdl9hcmdzKSwKLQkucHJpdmF0ZSA9IChpd19oYW5kbGVyICopaXB3MjEwMF9wcml2YXRlX2hhbmRsZXIsCisJLm51bV9wcml2YXRlX2FyZ3MgPSBzaXplb2YoaXB3MjEwMF9wcml2YXRlX2FyZ3MpIC8KKwkgICAgc2l6ZW9mKHN0cnVjdCBpd19wcml2X2FyZ3MpLAorCS5wcml2YXRlID0gKGl3X2hhbmRsZXIgKikgaXB3MjEwMF9wcml2YXRlX2hhbmRsZXIsCiAJLnByaXZhdGVfYXJncyA9IChzdHJ1Y3QgaXdfcHJpdl9hcmdzICopaXB3MjEwMF9wcml2YXRlX2FyZ3MsCiB9OwogCkBAIC04MTcwLDcgKzg0NjEsNyBAQAogICogQ2FsbGVkIGJ5IC9wcm9jL25ldC93aXJlbGVzcwogICogQWxzbyBjYWxsZWQgYnkgU0lPQ0dJV1NUQVRTCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgaXdfc3RhdGlzdGljcyAqaXB3MjEwMF93eF93aXJlbGVzc19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqIGRldikKK3N0YXRpYyBzdHJ1Y3QgaXdfc3RhdGlzdGljcyAqaXB3MjEwMF93eF93aXJlbGVzc19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWVudW0gewogCQlQT09SID0gMzAsCkBAIC04MTkwLDcgKzg0ODEsNyBAQAogCXUzMiBvcmRfbGVuID0gc2l6ZW9mKHUzMik7CiAKIAlpZiAoIXByaXYpCi0JCXJldHVybiAoc3RydWN0IGl3X3N0YXRpc3RpY3MgKikgTlVMTDsKKwkJcmV0dXJuIChzdHJ1Y3QgaXdfc3RhdGlzdGljcyAqKU5VTEw7CiAKIAl3c3RhdHMgPSAmcHJpdi0+d3N0YXRzOwogCkBAIC04MjA3LDcgKzg0OTgsNyBAQAogCQl3c3RhdHMtPnF1YWwubm9pc2UgPSAwOwogCQl3c3RhdHMtPnF1YWwudXBkYXRlZCA9IDc7CiAJCXdzdGF0cy0+cXVhbC51cGRhdGVkIHw9IElXX1FVQUxfTk9JU0VfSU5WQUxJRCB8Ci0JCQlJV19RVUFMX1FVQUxfSU5WQUxJRCB8IElXX1FVQUxfTEVWRUxfSU5WQUxJRDsKKwkJICAgIElXX1FVQUxfUVVBTF9JTlZBTElEIHwgSVdfUVVBTF9MRVZFTF9JTlZBTElEOwogCQlyZXR1cm4gd3N0YXRzOwogCX0KIApAQCAtODIxNSw3ICs4NTA2LDcgQEAKIAkJCQkmbWlzc2VkX2JlYWNvbnMsICZvcmRfbGVuKSkKIAkJZ290byBmYWlsX2dldF9vcmRpbmFsOwogCi0gICAgICAgIC8qIElmIHdlIGRvbid0IGhhdmUgYSBjb25uZWN0aW9uIHRoZSBxdWFsaXR5IGFuZCBsZXZlbCBpcyAwKi8KKwkvKiBJZiB3ZSBkb24ndCBoYXZlIGEgY29ubmVjdGlvbiB0aGUgcXVhbGl0eSBhbmQgbGV2ZWwgaXMgMCAqLwogCWlmICghKHByaXYtPnN0YXR1cyAmIFNUQVRVU19BU1NPQ0lBVEVEKSkgewogCQl3c3RhdHMtPnF1YWwucXVhbCA9IDA7CiAJCXdzdGF0cy0+cXVhbC5sZXZlbCA9IDA7CkBAIC04MjMyLDEwICs4NTIzLDEwIEBACiAJCQlyc3NpX3F1YWwgPSAocnNzaSAtIDE1KSAqIChHT09EIC0gRkFJUikgLyA1ICsgRkFJUjsKIAkJZWxzZSBpZiAocnNzaSA8IDMwKQogCQkJcnNzaV9xdWFsID0gKHJzc2kgLSAyMCkgKiAoVkVSWV9HT09EIC0gR09PRCkgLwotCQkJCTEwICsgR09PRDsKKwkJCSAgICAxMCArIEdPT0Q7CiAJCWVsc2UKIAkJCXJzc2lfcXVhbCA9IChyc3NpIC0gMzApICogKFBFUkZFQ1QgLSBWRVJZX0dPT0QpIC8KLQkJCQkxMCArIFZFUllfR09PRDsKKwkJCSAgICAxMCArIFZFUllfR09PRDsKIAogCQlpZiAoaXB3MjEwMF9nZXRfb3JkaW5hbChwcml2LCBJUFdfT1JEX1NUQVRfUEVSQ0VOVF9SRVRSSUVTLAogCQkJCQkmdHhfcmV0cmllcywgJm9yZF9sZW4pKQpAQCAtODI0OSwyNSArODU0MCwyNSBAQAogCQkJdHhfcXVhbCA9ICg3MCAtIHR4X3JldHJpZXMpICogKEdPT0QgLSBGQUlSKSAvIDUgKyBGQUlSOwogCQllbHNlIGlmICh0eF9yZXRyaWVzID4gNTApCiAJCQl0eF9xdWFsID0gKDY1IC0gdHhfcmV0cmllcykgKiAoVkVSWV9HT09EIC0gR09PRCkgLwotCQkJCTE1ICsgR09PRDsKKwkJCSAgICAxNSArIEdPT0Q7CiAJCWVsc2UKIAkJCXR4X3F1YWwgPSAoNTAgLSB0eF9yZXRyaWVzKSAqCi0JCQkJKFBFUkZFQ1QgLSBWRVJZX0dPT0QpIC8gNTAgKyBWRVJZX0dPT0Q7CisJCQkgICAgKFBFUkZFQ1QgLSBWRVJZX0dPT0QpIC8gNTAgKyBWRVJZX0dPT0Q7CiAKIAkJaWYgKG1pc3NlZF9iZWFjb25zID4gNTApCiAJCQliZWFjb25fcXVhbCA9ICg2MCAtIG1pc3NlZF9iZWFjb25zKSAqIFBPT1IgLyAxMDsKIAkJZWxzZSBpZiAobWlzc2VkX2JlYWNvbnMgPiA0MCkKIAkJCWJlYWNvbl9xdWFsID0gKDUwIC0gbWlzc2VkX2JlYWNvbnMpICogKEZBSVIgLSBQT09SKSAvCi0JCQkJMTAgKyBQT09SOworCQkJICAgIDEwICsgUE9PUjsKIAkJZWxzZSBpZiAobWlzc2VkX2JlYWNvbnMgPiAzMikKIAkJCWJlYWNvbl9xdWFsID0gKDQwIC0gbWlzc2VkX2JlYWNvbnMpICogKEdPT0QgLSBGQUlSKSAvCi0JCQkJMTggKyBGQUlSOworCQkJICAgIDE4ICsgRkFJUjsKIAkJZWxzZSBpZiAobWlzc2VkX2JlYWNvbnMgPiAyMCkKIAkJCWJlYWNvbl9xdWFsID0gKDMyIC0gbWlzc2VkX2JlYWNvbnMpICoKLQkJCQkoVkVSWV9HT09EIC0gR09PRCkgLyAyMCArIEdPT0Q7CisJCQkgICAgKFZFUllfR09PRCAtIEdPT0QpIC8gMjAgKyBHT09EOwogCQllbHNlCiAJCQliZWFjb25fcXVhbCA9ICgyMCAtIG1pc3NlZF9iZWFjb25zKSAqCi0JCQkJKFBFUkZFQ1QgLSBWRVJZX0dPT0QpIC8gMjAgKyBWRVJZX0dPT0Q7CisJCQkgICAgKFBFUkZFQ1QgLSBWRVJZX0dPT0QpIC8gMjAgKyBWRVJZX0dPT0Q7CiAKIAkJcXVhbGl0eSA9IG1pbihiZWFjb25fcXVhbCwgbWluKHR4X3F1YWwsIHJzc2lfcXVhbCkpOwogCkBAIC04MjkwLDcgKzg1ODEsNyBAQAogCXdzdGF0cy0+cXVhbC51cGRhdGVkID0gNzsKIAl3c3RhdHMtPnF1YWwudXBkYXRlZCB8PSBJV19RVUFMX05PSVNFX0lOVkFMSUQ7CiAKLSAgICAgICAgLyogRklYTUU6IHRoaXMgaXMgcGVyY2VudCBhbmQgbm90IGEgIyAqLworCS8qIEZJWE1FOiB0aGlzIGlzIHBlcmNlbnQgYW5kIG5vdCBhICMgKi8KIAl3c3RhdHMtPm1pc3MuYmVhY29uID0gbWlzc2VkX2JlYWNvbnM7CiAKIAlpZiAoaXB3MjEwMF9nZXRfb3JkaW5hbChwcml2LCBJUFdfT1JEX1NUQVRfVFhfRkFJTFVSRVMsCkBAIC04MzAwLDEwICs4NTkxLDEwIEBACiAKIAlyZXR1cm4gd3N0YXRzOwogCi0gZmFpbF9nZXRfb3JkaW5hbDoKKyAgICAgIGZhaWxfZ2V0X29yZGluYWw6CiAJSVBXX0RFQlVHX1dYKCJmYWlsZWQgcXVlcnlpbmcgb3JkaW5hbHMuXG4iKTsKIAotCXJldHVybiAoc3RydWN0IGl3X3N0YXRpc3RpY3MgKikgTlVMTDsKKwlyZXR1cm4gKHN0cnVjdCBpd19zdGF0aXN0aWNzICopTlVMTDsKIH0KIAogc3RhdGljIHZvaWQgaXB3MjEwMF93eF9ldmVudF93b3JrKHN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYpCkBAIC04MzI2LDIzICs4NjE3LDE3IEBACiAJaWYgKCEocHJpdi0+c3RhdHVzICYgKFNUQVRVU19BU1NPQ0lBVElORyB8IFNUQVRVU19BU1NPQ0lBVEVEKSkgfHwKIAkgICAgcHJpdi0+c3RhdHVzICYgU1RBVFVTX1JGX0tJTExfTUFTSyB8fAogCSAgICBpcHcyMTAwX2dldF9vcmRpbmFsKHByaXYsIElQV19PUkRfU1RBVF9BU1NOX0FQX0JTU0lELAotCQkJCSZwcml2LT5ic3NpZCwgICZsZW4pKSB7CisJCQkJJnByaXYtPmJzc2lkLCAmbGVuKSkgewogCQltZW1zZXQod3JxdS5hcF9hZGRyLnNhX2RhdGEsIDAsIEVUSF9BTEVOKTsKIAl9IGVsc2UgewogCQkvKiBXZSBub3cgaGF2ZSB0aGUgQlNTSUQsIHNvIGNhbiBmaW5pc2ggc2V0dGluZyB0byB0aGUgZnVsbAogCQkgKiBhc3NvY2lhdGVkIHN0YXRlICovCiAJCW1lbWNweSh3cnF1LmFwX2FkZHIuc2FfZGF0YSwgcHJpdi0+YnNzaWQsIEVUSF9BTEVOKTsKLQkJbWVtY3B5KCZwcml2LT5pZWVlLT5ic3NpZCwgcHJpdi0+YnNzaWQsIEVUSF9BTEVOKTsKKwkJbWVtY3B5KHByaXYtPmllZWUtPmJzc2lkLCBwcml2LT5ic3NpZCwgRVRIX0FMRU4pOwogCQlwcml2LT5zdGF0dXMgJj0gflNUQVRVU19BU1NPQ0lBVElORzsKIAkJcHJpdi0+c3RhdHVzIHw9IFNUQVRVU19BU1NPQ0lBVEVEOwogCQluZXRpZl9jYXJyaWVyX29uKHByaXYtPm5ldF9kZXYpOwotCQlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChwcml2LT5uZXRfZGV2KSkgewotCQkJSVBXX0RFQlVHX0lORk8oIldha2luZyBuZXQgcXVldWUuXG4iKTsKLQkJCW5ldGlmX3dha2VfcXVldWUocHJpdi0+bmV0X2Rldik7Ci0JCX0gZWxzZSB7Ci0JCQlJUFdfREVCVUdfSU5GTygiU3RhcnRpbmcgbmV0IHF1ZXVlLlxuIik7Ci0JCQluZXRpZl9zdGFydF9xdWV1ZShwcml2LT5uZXRfZGV2KTsKLQkJfQorCQluZXRpZl93YWtlX3F1ZXVlKHByaXYtPm5ldF9kZXYpOwogCX0KIAogCWlmICghKHByaXYtPnN0YXR1cyAmIFNUQVRVU19BU1NPQ0lBVEVEKSkgewpAQCAtODM1MSw3ICs4NjM2LDggQEAKIAkJLyogVGhpcyBpcyBhIGRpc2Fzc29jaWF0aW9uIGV2ZW50LCBzbyBraWNrIHRoZSBmaXJtd2FyZSB0bwogCQkgKiBsb29rIGZvciBhbm90aGVyIEFQICovCiAJCWlmIChwcml2LT5jb25maWcgJiBDRkdfU1RBVElDX0VTU0lEKQotCQkJaXB3MjEwMF9zZXRfZXNzaWQocHJpdiwgcHJpdi0+ZXNzaWQsIHByaXYtPmVzc2lkX2xlbiwgMCk7CisJCQlpcHcyMTAwX3NldF9lc3NpZChwcml2LCBwcml2LT5lc3NpZCwgcHJpdi0+ZXNzaWRfbGVuLAorCQkJCQkgIDApOwogCQllbHNlCiAJCQlpcHcyMTAwX3NldF9lc3NpZChwcml2LCBOVUxMLCAwLCAwKTsKIAkJdXAoJnByaXYtPmFjdGlvbl9zZW0pOwpAQCAtODM3NCw3ICs4NjYwLDYgQEAKIAogI2RlZmluZSBJUFcyMTAwX0ZXX05BTUUoeCkgSVBXMjEwMF9GV19QUkVGSVggIiIgeCAiLmZ3IgogCi0KIC8qCiAKIEJJTkFSWSBGSVJNV0FSRSBIRUFERVIgRk9STUFUCkBAIC04Mzk2LDEyICs4NjgxLDEwIEBACiAJdW5zaWduZWQgaW50IHVjX3NpemU7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotCi0KIHN0YXRpYyBpbnQgaXB3MjEwMF9tb2RfZmlybXdhcmVfbG9hZChzdHJ1Y3QgaXB3MjEwMF9mdyAqZncpCiB7CiAJc3RydWN0IGlwdzIxMDBfZndfaGVhZGVyICpoID0KLQkJKHN0cnVjdCBpcHcyMTAwX2Z3X2hlYWRlciAqKWZ3LT5md19lbnRyeS0+ZGF0YTsKKwkgICAgKHN0cnVjdCBpcHcyMTAwX2Z3X2hlYWRlciAqKWZ3LT5md19lbnRyeS0+ZGF0YTsKIAogCWlmIChJUFcyMTAwX0ZXX01BSk9SKGgtPnZlcnNpb24pICE9IElQVzIxMDBfRldfTUFKT1JfVkVSU0lPTikgewogCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FICI6IEZpcm13YXJlIGltYWdlIG5vdCBjb21wYXRpYmxlICIKQEAgLTg0MjAsNyArODcwMyw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLQogc3RhdGljIGludCBpcHcyMTAwX2dldF9maXJtd2FyZShzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2LAogCQkJCXN0cnVjdCBpcHcyMTAwX2Z3ICpmdykKIHsKQEAgLTg0MjgsNyArODcxMCw3IEBACiAJaW50IHJjOwogCiAJSVBXX0RFQlVHX0lORk8oIiVzOiBVc2luZyBob3RwbHVnIGZpcm13YXJlIGxvYWQuXG4iLAotCSAgICAgICBwcml2LT5uZXRfZGV2LT5uYW1lKTsKKwkJICAgICAgIHByaXYtPm5ldF9kZXYtPm5hbWUpOwogCiAJc3dpdGNoIChwcml2LT5pZWVlLT5pd19tb2RlKSB7CiAJY2FzZSBJV19NT0RFX0FESE9DOgpAQCAtODQ1NCw3ICs4NzM2LDcgQEAKIAkJcmV0dXJuIHJjOwogCX0KIAlJUFdfREVCVUdfSU5GTygiZmlybXdhcmUgZGF0YSAlcCBzaXplICV6ZFxuIiwgZnctPmZ3X2VudHJ5LT5kYXRhLAotCQkJICAgZnctPmZ3X2VudHJ5LT5zaXplKTsKKwkJICAgICAgIGZ3LT5md19lbnRyeS0+c2l6ZSk7CiAKIAlpcHcyMTAwX21vZF9maXJtd2FyZV9sb2FkKGZ3KTsKIApAQCAtODQ3MCw3ICs4NzUyLDYgQEAKIAlmdy0+ZndfZW50cnkgPSBOVUxMOwogfQogCi0KIHN0YXRpYyBpbnQgaXB3MjEwMF9nZXRfZnd2ZXJzaW9uKHN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYsIGNoYXIgKmJ1ZiwKIAkJCQkgc2l6ZV90IG1heCkKIHsKQEAgLTg0NzksOCArODc2MCw3IEBACiAJdTMyIHRtcDsKIAlpbnQgaTsKIAkvKiBmaXJtd2FyZSB2ZXJzaW9uIGlzIGFuIGFzY2lpIHN0cmluZyAobWF4IGxlbiBvZiAxNCkgKi8KLQlpZiAoaXB3MjEwMF9nZXRfb3JkaW5hbChwcml2LCBJUFdfT1JEX1NUQVRfRldfVkVSX05VTSwKLQkJCQl2ZXIsICZsZW4pKQorCWlmIChpcHcyMTAwX2dldF9vcmRpbmFsKHByaXYsIElQV19PUkRfU1RBVF9GV19WRVJfTlVNLCB2ZXIsICZsZW4pKQogCQlyZXR1cm4gLUVJTzsKIAl0bXAgPSBtYXg7CiAJaWYgKGxlbiA+PSBtYXgpCkBAIC04NDk3LDggKzg3NzcsNyBAQAogCXUzMiB2ZXI7CiAJdTMyIGxlbiA9IHNpemVvZih2ZXIpOwogCS8qIG1pY3JvY29kZSB2ZXJzaW9uIGlzIGEgMzIgYml0IGludGVnZXIgKi8KLQlpZiAoaXB3MjEwMF9nZXRfb3JkaW5hbChwcml2LCBJUFdfT1JEX1VDT0RFX1ZFUlNJT04sCi0JCQkJJnZlciwgJmxlbikpCisJaWYgKGlwdzIxMDBfZ2V0X29yZGluYWwocHJpdiwgSVBXX09SRF9VQ09ERV9WRVJTSU9OLCAmdmVyLCAmbGVuKSkKIAkJcmV0dXJuIC1FSU87CiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgbWF4LCAiJTA4WCIsIHZlcik7CiB9CkBAIC04NTA2LDggKzg3ODUsNyBAQAogLyoKICAqIE9uIGV4aXQsIHRoZSBmaXJtd2FyZSB3aWxsIGhhdmUgYmVlbiBmcmVlZCBmcm9tIHRoZSBmdyBsaXN0CiAgKi8KLXN0YXRpYyBpbnQgaXB3MjEwMF9md19kb3dubG9hZChzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2LAotCQkJICAgICAgIHN0cnVjdCBpcHcyMTAwX2Z3ICpmdykKK3N0YXRpYyBpbnQgaXB3MjEwMF9md19kb3dubG9hZChzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2LCBzdHJ1Y3QgaXB3MjEwMF9mdyAqZncpCiB7CiAJLyogZmlybXdhcmUgaXMgY29uc3RydWN0ZWQgb2YgTiBjb250aWd1b3VzIGVudHJpZXMsIGVhY2ggZW50cnkgaXMKIAkgKiBzdHJ1Y3R1cmVkIGFzOgpAQCAtODUxNSw3ICs4NzkzLDcgQEAKIAkgKiBvZmZzZXQgICAgc2llICAgICAgICAgZGVzYwogCSAqIDAgICAgICAgICA0ICAgICAgICAgICBhZGRyZXNzIHRvIHdyaXRlIHRvCiAJICogNCAgICAgICAgIDIgICAgICAgICAgIGxlbmd0aCBvZiBkYXRhIHJ1bgotICAgICAgICAgKiA2ICAgICAgICAgbGVuZ3RoICAgICAgZGF0YQorCSAqIDYgICAgICAgICBsZW5ndGggICAgICBkYXRhCiAJICovCiAJdW5zaWduZWQgaW50IGFkZHI7CiAJdW5zaWduZWQgc2hvcnQgbGVuOwpAQCAtODUyNCwxMiArODgwMiwxMiBAQAogCXVuc2lnbmVkIGludCBmaXJtd2FyZV9kYXRhX2xlZnQgPSBmdy0+Zncuc2l6ZTsKIAogCXdoaWxlIChmaXJtd2FyZV9kYXRhX2xlZnQgPiAwKSB7Ci0JICAgCWFkZHIgPSAqKHUzMiAqKShmaXJtd2FyZV9kYXRhKTsKLQkJZmlybXdhcmVfZGF0YSAgICAgICs9IDQ7CisJCWFkZHIgPSAqKHUzMiAqKSAoZmlybXdhcmVfZGF0YSk7CisJCWZpcm13YXJlX2RhdGEgKz0gNDsKIAkJZmlybXdhcmVfZGF0YV9sZWZ0IC09IDQ7CiAKLQkgICAJbGVuID0gKih1MTYgKikoZmlybXdhcmVfZGF0YSk7Ci0JCWZpcm13YXJlX2RhdGEgICAgICArPSAyOworCQlsZW4gPSAqKHUxNiAqKSAoZmlybXdhcmVfZGF0YSk7CisJCWZpcm13YXJlX2RhdGEgKz0gMjsKIAkJZmlybXdhcmVfZGF0YV9sZWZ0IC09IDI7CiAKIAkJaWYgKGxlbiA+IDMyKSB7CkBAIC04NTQwLDcgKzg4MTgsNyBAQAogCQl9CiAKIAkJd3JpdGVfbmljX21lbW9yeShwcml2LT5uZXRfZGV2LCBhZGRyLCBsZW4sIGZpcm13YXJlX2RhdGEpOwotCQlmaXJtd2FyZV9kYXRhICAgICAgKz0gbGVuOworCQlmaXJtd2FyZV9kYXRhICs9IGxlbjsKIAkJZmlybXdhcmVfZGF0YV9sZWZ0IC09IGxlbjsKIAl9CiAKQEAgLTg2NTQsMjEgKzg5MzIsMTkgQEAKIAlmb3IgKGkgPSAwOyBpIDwgMzA7IGkrKykgewogCQkvKiBSZWFkIGFsaXZlIHJlc3BvbnNlIHN0cnVjdHVyZSAqLwogCQlmb3IgKGogPSAwOwotCQkgICAgIGogPCAoc2l6ZW9mKHN0cnVjdCBzeW1ib2xfYWxpdmVfcmVzcG9uc2UpID4+IDEpOwotCQkgICAgIGorKykKLQkJCXJlYWRfbmljX3dvcmQoZGV2LCAweDIxMDAwNCwKLQkJCQkgICAgICAoKHUxNiAqKSZyZXNwb25zZSkgKyBqKTsKKwkJICAgICBqIDwgKHNpemVvZihzdHJ1Y3Qgc3ltYm9sX2FsaXZlX3Jlc3BvbnNlKSA+PiAxKTsgaisrKQorCQkJcmVhZF9uaWNfd29yZChkZXYsIDB4MjEwMDA0LCAoKHUxNiAqKSAmIHJlc3BvbnNlKSArIGopOwogCi0JCWlmICgocmVzcG9uc2UuY21kX2lkID09IDEpICYmCi0JCSAgICAocmVzcG9uc2UudWNvZGVfdmFsaWQgPT0gMHgxKSkKKwkJaWYgKChyZXNwb25zZS5jbWRfaWQgPT0gMSkgJiYgKHJlc3BvbnNlLnVjb2RlX3ZhbGlkID09IDB4MSkpCiAJCQlicmVhazsKIAkJdWRlbGF5KDEwKTsKIAl9CiAKIAlpZiAoaSA9PSAzMCkgewotCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogJXM6IE5vIHJlc3BvbnNlIGZyb20gU3ltYm9sIC0gaHcgbm90IGFsaXZlXG4iLAorCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUKKwkJICAgICAgICI6ICVzOiBObyByZXNwb25zZSBmcm9tIFN5bWJvbCAtIGh3IG5vdCBhbGl2ZVxuIiwKIAkJICAgICAgIGRldi0+bmFtZSk7Ci0JCXByaW50a19idWYoSVBXX0RMX0VSUk9SLCAodTgqKSZyZXNwb25zZSwgc2l6ZW9mKHJlc3BvbnNlKSk7CisJCXByaW50a19idWYoSVBXX0RMX0VSUk9SLCAodTggKikgJiByZXNwb25zZSwgc2l6ZW9mKHJlc3BvbnNlKSk7CiAJCXJldHVybiAtRUlPOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MjEwMC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MjEwMC5oCmluZGV4IGM5ZTk5Y2UuLjE0MGZkZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzIxMDAuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyMTAwLmgKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKLSAgQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA1IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDQgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTM3LDcgKzM3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KICNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgkvLyBuZXcgZHJpdmVyIEFQSQogCiAjaW5jbHVkZSA8bmV0L2llZWU4MDIxMS5oPgpAQCAtOTMsNyArOTIsNiBAQAogI2RlZmluZSBJUFdfRExfSU9DVEwgICAgICAgICAoMTw8MTQpCiAjZGVmaW5lIElQV19ETF9SRl9LSUxMICAgICAgICgxPDwxNykKIAotCiAjZGVmaW5lIElQV19ETF9NQU5BR0UgICAgICAgICgxPDwxNSkKICNkZWZpbmUgSVBXX0RMX0ZXICAgICAgICAgICAgKDE8PDE2KQogCkBAIC0xNTYsNyArMTU0LDkgQEAKIAogc3RydWN0IGJkX3N0YXR1cyB7CiAJdW5pb24gewotCQlzdHJ1Y3QgeyB1OCBubGY6MSwgdHhUeXBlOjIsIGludEVuYWJsZWQ6MSwgcmVzZXJ2ZWQ6NDt9IGZpZWxkczsKKwkJc3RydWN0IHsKKwkJCXU4IG5sZjoxLCB0eFR5cGU6MiwgaW50RW5hYmxlZDoxLCByZXNlcnZlZDo0OworCQl9IGZpZWxkczsKIAkJdTggZmllbGQ7CiAJfSBpbmZvOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CkBAIC0xNjUsNyArMTY1LDcgQEAKIAl1MzIgaG9zdF9hZGRyOwogCXUzMiBidWZfbGVuZ3RoOwogCXN0cnVjdCBiZF9zdGF0dXMgc3RhdHVzOwotICAgICAgICAvKiBudW1iZXIgb2YgZnJhZ21lbnRzIGZvciBmcmFtZSAoc2hvdWxkIGJlIHNldCBvbmx5IGZvcgorCS8qIG51bWJlciBvZiBmcmFnbWVudHMgZm9yIGZyYW1lIChzaG91bGQgYmUgc2V0IG9ubHkgZm9yCiAJICogMXN0IFRCRCkgKi8KIAl1OCBudW1fZnJhZ21lbnRzOwogCXU4IHJlc2VydmVkWzZdOwpAQCAtMjkzLDEwICsyOTMsMTAgQEAKIHN0cnVjdCBpcHcyMTAwX2RhdGFfaGVhZGVyIHsKIAl1MzIgaG9zdF9jb21tYW5kX3JlZzsKIAl1MzIgaG9zdF9jb21tYW5kX3JlZzE7Ci0JdTggZW5jcnlwdGVkOwkvLyBCT09MRUFOIGluIHdpbiEgVFJVRSBpZiBmcmFtZSBpcyBlbmMgYnkgZHJpdmVyCisJdTggZW5jcnlwdGVkOwkJLy8gQk9PTEVBTiBpbiB3aW4hIFRSVUUgaWYgZnJhbWUgaXMgZW5jIGJ5IGRyaXZlcgogCXU4IG5lZWRzX2VuY3J5cHRpb247CS8vIEJPT0xFQU4gaW4gd2luISBUUlVFIGlmIGZybWEgbmVlZCB0byBiZSBlbmMgaW4gTklDCiAJdTggd2VwX2luZGV4OwkJLy8gMCBubyBrZXksIDEtNCBrZXkgaW5kZXgsIDB4ZmYgaW1tZWRpYXRlIGtleQotCXU4IGtleV9zaXplOwkvLyAwIG5vIGltbSBrZXksIDB4NSA2NGJpdCBlbmNyLCAweGQgMTI4Yml0IGVuY3IsIDB4MTAgMTI4Yml0IGVuY3IgYW5kIDEyOGJpdCBJVgorCXU4IGtleV9zaXplOwkJLy8gMCBubyBpbW0ga2V5LCAweDUgNjRiaXQgZW5jciwgMHhkIDEyOGJpdCBlbmNyLCAweDEwIDEyOGJpdCBlbmNyIGFuZCAxMjhiaXQgSVYKIAl1OCBrZXlbMTZdOwogCXU4IHJlc2VydmVkWzEwXTsJLy8gZi93IHJlc2VydmVkCiAJdTggc3JjX2FkZHJbRVRIX0FMRU5dOwpAQCAtMzA2LDE0ICszMDYsMTMgQEAKIAogLyogSG9zdCBjb21tYW5kIGRhdGEgc3RydWN0dXJlICovCiBzdHJ1Y3QgaG9zdF9jb21tYW5kIHsKLQl1MzIgaG9zdF9jb21tYW5kOwkJLy8gQ09NTUFORCBJRAotCXUzMiBob3N0X2NvbW1hbmQxOwkJLy8gQ09NTUFORCBJRAorCXUzMiBob3N0X2NvbW1hbmQ7CS8vIENPTU1BTkQgSUQKKwl1MzIgaG9zdF9jb21tYW5kMTsJLy8gQ09NTUFORCBJRAogCXUzMiBob3N0X2NvbW1hbmRfc2VxdWVuY2U7CS8vIFVOSVFVRSBDT01NQU5EIE5VTUJFUiAoSUQpCiAJdTMyIGhvc3RfY29tbWFuZF9sZW5ndGg7CS8vIExFTkdUSAogCXUzMiBob3N0X2NvbW1hbmRfcGFyYW1ldGVyc1tIT1NUX0NPTU1BTkRfUEFSQU1TX1JFR19MRU5dOwkvLyBDT01NQU5EIFBBUkFNRVRFUlMKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi0KIHR5cGVkZWYgZW51bSB7CiAJUE9XRVJfT05fUkVTRVQsCiAJRVhJVF9QT1dFUl9ET1dOX1JFU0VULApAQCAtMzI4LDE3ICszMjcsMTYgQEAKIAlSWAogfTsKIAotCiBzdHJ1Y3QgaXB3MjEwMF90eF9wYWNrZXQgewogCWludCB0eXBlOwogCWludCBpbmRleDsKIAl1bmlvbiB7Ci0JCXN0cnVjdCB7IC8qIENPTU1BTkQgKi8KLQkJCXN0cnVjdCBpcHcyMTAwX2NtZF9oZWFkZXIqIGNtZDsKKwkJc3RydWN0IHsJLyogQ09NTUFORCAqLworCQkJc3RydWN0IGlwdzIxMDBfY21kX2hlYWRlciAqY21kOwogCQkJZG1hX2FkZHJfdCBjbWRfcGh5czsKIAkJfSBjX3N0cnVjdDsKLQkJc3RydWN0IHsgLyogREFUQSAqLwotCQkJc3RydWN0IGlwdzIxMDBfZGF0YV9oZWFkZXIqIGRhdGE7CisJCXN0cnVjdCB7CS8qIERBVEEgKi8KKwkJCXN0cnVjdCBpcHcyMTAwX2RhdGFfaGVhZGVyICpkYXRhOwogCQkJZG1hX2FkZHJfdCBkYXRhX3BoeXM7CiAJCQlzdHJ1Y3QgaWVlZTgwMjExX3R4YiAqdHhiOwogCQl9IGRfc3RydWN0OwpAQCAtMzQ4LDcgKzM0Niw2IEBACiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogfTsKIAotCiBzdHJ1Y3QgaXB3MjEwMF9yeF9wYWNrZXQgewogCXN0cnVjdCBpcHcyMTAwX3J4ICpyeHA7CiAJZG1hX2FkZHJfdCBkbWFfYWRkcjsKQEAgLTQzMiwxMyArNDI5LDEzIEBACiB9OwogCiAjZGVmaW5lIFNUQVRVU19QT1dFUkVEICAgICAgICAgICgxPDwwKQotI2RlZmluZSBTVEFUVVNfQ01EX0FDVElWRSAgICAgICAoMTw8MSkgIC8qKjwgaG9zdCBjb21tYW5kIGluIHByb2dyZXNzICovCi0jZGVmaW5lIFNUQVRVU19SVU5OSU5HICAgICAgICAgICgxPDwyKSAgLyogQ2FyZCBpbml0aWFsaXplZCwgYnV0IG5vdCBlbmFibGVkICovCi0jZGVmaW5lIFNUQVRVU19FTkFCTEVEICAgICAgICAgICgxPDwzKSAgLyogQ2FyZCBlbmFibGVkIC0tIGNhbiBzY2FuLFR4LFJ4ICovCi0jZGVmaW5lIFNUQVRVU19TVE9QUElORyAgICAgICAgICgxPDw0KSAgLyogQ2FyZCBpcyBpbiBzaHV0ZG93biBwaGFzZSAqLwotI2RlZmluZSBTVEFUVVNfSU5JVElBTElaRUQgICAgICAoMTw8NSkgIC8qIENhcmQgaXMgcmVhZHkgZm9yIGV4dGVybmFsIGNhbGxzICovCi0jZGVmaW5lIFNUQVRVU19BU1NPQ0lBVElORyAgICAgICgxPDw5KSAgLyogQXNzb2NpYXRlZCwgYnV0IG5vIEJTU0lEIHlldCAqLwotI2RlZmluZSBTVEFUVVNfQVNTT0NJQVRFRCAgICAgICAoMTw8MTApIC8qIEFzc29jaWF0ZWQgYW5kIEJTU0lEIHZhbGlkICovCisjZGVmaW5lIFNUQVRVU19DTURfQUNUSVZFICAgICAgICgxPDwxKQkvKio8IGhvc3QgY29tbWFuZCBpbiBwcm9ncmVzcyAqLworI2RlZmluZSBTVEFUVVNfUlVOTklORyAgICAgICAgICAoMTw8MikJLyogQ2FyZCBpbml0aWFsaXplZCwgYnV0IG5vdCBlbmFibGVkICovCisjZGVmaW5lIFNUQVRVU19FTkFCTEVEICAgICAgICAgICgxPDwzKQkvKiBDYXJkIGVuYWJsZWQgLS0gY2FuIHNjYW4sVHgsUnggKi8KKyNkZWZpbmUgU1RBVFVTX1NUT1BQSU5HICAgICAgICAgKDE8PDQpCS8qIENhcmQgaXMgaW4gc2h1dGRvd24gcGhhc2UgKi8KKyNkZWZpbmUgU1RBVFVTX0lOSVRJQUxJWkVEICAgICAgKDE8PDUpCS8qIENhcmQgaXMgcmVhZHkgZm9yIGV4dGVybmFsIGNhbGxzICovCisjZGVmaW5lIFNUQVRVU19BU1NPQ0lBVElORyAgICAgICgxPDw5KQkvKiBBc3NvY2lhdGVkLCBidXQgbm8gQlNTSUQgeWV0ICovCisjZGVmaW5lIFNUQVRVU19BU1NPQ0lBVEVEICAgICAgICgxPDwxMCkJLyogQXNzb2NpYXRlZCBhbmQgQlNTSUQgdmFsaWQgKi8KICNkZWZpbmUgU1RBVFVTX0lOVF9FTkFCTEVEICAgICAgKDE8PDExKQogI2RlZmluZSBTVEFUVVNfUkZfS0lMTF9IVyAgICAgICAoMTw8MTIpCiAjZGVmaW5lIFNUQVRVU19SRl9LSUxMX1NXICAgICAgICgxPDwxMykKQEAgLTQ1MSw5ICs0NDgsNyBAQAogI2RlZmluZSBTVEFUVVNfU0NBTl9DT01QTEVURSAgICAoMTw8MjYpCiAjZGVmaW5lIFNUQVRVU19XWF9FVkVOVF9QRU5ESU5HICgxPDwyNykKICNkZWZpbmUgU1RBVFVTX1JFU0VUX1BFTkRJTkcgICAgKDE8PDI5KQotI2RlZmluZSBTVEFUVVNfU0VDVVJJVFlfVVBEQVRFRCAoMTw8MzApIC8qIFNlY3VyaXR5IHN5bmMgbmVlZGVkICovCi0KLQorI2RlZmluZSBTVEFUVVNfU0VDVVJJVFlfVVBEQVRFRCAoMTw8MzApCS8qIFNlY3VyaXR5IHN5bmMgbmVlZGVkICovCiAKIC8qIEludGVybmFsIE5JQyBzdGF0ZXMgKi8KICNkZWZpbmUgSVBXX1NUQVRFX0lOSVRJQUxJWkVECSgxPDwwKQpAQCAtNDY5LDExICs0NjQsOSBAQAogI2RlZmluZSBJUFdfU1RBVEVfUE9XRVJfRE9XTgkoMTw8MTApCiAjZGVmaW5lIElQV19TVEFURV9TQ0FOTklORyAgICAgICgxPDwxMSkKIAotCi0KLSNkZWZpbmUgQ0ZHX1NUQVRJQ19DSEFOTkVMICAgICAgKDE8PDApIC8qIFJlc3RyaWN0IGFzc29jLiB0byBzaW5nbGUgY2hhbm5lbCAqLwotI2RlZmluZSBDRkdfU1RBVElDX0VTU0lEICAgICAgICAoMTw8MSkgLyogUmVzdHJpY3QgYXNzb2MuIHRvIHNpbmdsZSBTU0lEICovCi0jZGVmaW5lIENGR19TVEFUSUNfQlNTSUQgICAgICAgICgxPDwyKSAvKiBSZXN0cmljdCBhc3NvYy4gdG8gc2luZ2xlIEJTU0lEICovCisjZGVmaW5lIENGR19TVEFUSUNfQ0hBTk5FTCAgICAgICgxPDwwKQkvKiBSZXN0cmljdCBhc3NvYy4gdG8gc2luZ2xlIGNoYW5uZWwgKi8KKyNkZWZpbmUgQ0ZHX1NUQVRJQ19FU1NJRCAgICAgICAgKDE8PDEpCS8qIFJlc3RyaWN0IGFzc29jLiB0byBzaW5nbGUgU1NJRCAqLworI2RlZmluZSBDRkdfU1RBVElDX0JTU0lEICAgICAgICAoMTw8MikJLyogUmVzdHJpY3QgYXNzb2MuIHRvIHNpbmdsZSBCU1NJRCAqLwogI2RlZmluZSBDRkdfQ1VTVE9NX01BQyAgICAgICAgICAoMTw8MykKICNkZWZpbmUgQ0ZHX0xPTkdfUFJFQU1CTEUgICAgICAgKDE8PDQpCiAjZGVmaW5lIENGR19BU1NPQ0lBVEUgICAgICAgICAgICgxPDw2KQpAQCAtNDgxLDE0ICs0NzQsMTcgQEAKICNkZWZpbmUgQ0ZHX0FESE9DX0NSRUFURSAgICAgICAgKDE8PDgpCiAjZGVmaW5lIENGR19DM19ESVNBQkxFRCAgICAgICAgICgxPDw5KQogI2RlZmluZSBDRkdfUEFTU0lWRV9TQ0FOICAgICAgICAoMTw8MTApCisjaWZkZWYgQ09ORklHX0lQVzIxMDBfTU9OSVRPUgorI2RlZmluZSBDRkdfQ1JDX0NIRUNLICAgICAgICAgICAoMTw8MTEpCisjZW5kaWYKIAotI2RlZmluZSBDQVBfU0hBUkVEX0tFWSAgICAgICAgICAoMTw8MCkgLyogT2ZmID0gT1BFTiAqLwotI2RlZmluZSBDQVBfUFJJVkFDWV9PTiAgICAgICAgICAoMTw8MSkgLyogT2ZmID0gTm8gcHJpdmFjeSAqLworI2RlZmluZSBDQVBfU0hBUkVEX0tFWSAgICAgICAgICAoMTw8MCkJLyogT2ZmID0gT1BFTiAqLworI2RlZmluZSBDQVBfUFJJVkFDWV9PTiAgICAgICAgICAoMTw8MSkJLyogT2ZmID0gTm8gcHJpdmFjeSAqLwogCiBzdHJ1Y3QgaXB3MjEwMF9wcml2IHsKIAotCWludCBzdG9wX2hhbmdfY2hlY2s7IC8qIFNldCAxIHdoZW4gc2h1dHRpbmcgZG93biB0byBraWxsIGhhbmdfY2hlY2sgKi8KLQlpbnQgc3RvcF9yZl9raWxsOyAvKiBTZXQgMSB3aGVuIHNodXR0aW5nIGRvd24gdG8ga2lsbCByZl9raWxsICovCisJaW50IHN0b3BfaGFuZ19jaGVjazsJLyogU2V0IDEgd2hlbiBzaHV0dGluZyBkb3duIHRvIGtpbGwgaGFuZ19jaGVjayAqLworCWludCBzdG9wX3JmX2tpbGw7CS8qIFNldCAxIHdoZW4gc2h1dHRpbmcgZG93biB0byBraWxsIHJmX2tpbGwgKi8KIAogCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlOwogCXVuc2lnbmVkIGxvbmcgc3RhdHVzOwpAQCAtNTE5LDE5ICs1MTUsMTYgQEAKIAl1bnNpZ25lZCBsb25nIGh3X2ZlYXR1cmVzOwogCWludCBoYW5nczsKIAl1MzIgbGFzdF9ydGM7Ci0JaW50IGR1bXBfcmF3OyAvKiAxIHRvIGR1bXAgcmF3IGJ5dGVzIGluIC9zeXMvLi4uL21lbW9yeSAqLwotCXU4KiBzbmFwc2hvdFsweDMwXTsKKwlpbnQgZHVtcF9yYXc7CQkvKiAxIHRvIGR1bXAgcmF3IGJ5dGVzIGluIC9zeXMvLi4uL21lbW9yeSAqLworCXU4ICpzbmFwc2hvdFsweDMwXTsKIAogCXU4IG1hbmRhdG9yeV9ic3NpZF9tYWNbRVRIX0FMRU5dOwogCXU4IG1hY19hZGRyW0VUSF9BTEVOXTsKIAogCWludCBwb3dlcl9tb2RlOwogCi0JLyogV0VQIGRhdGEgKi8KLQlzdHJ1Y3QgaWVlZTgwMjExX3NlY3VyaXR5IHNlYzsKIAlpbnQgbWVzc2FnZXNfc2VudDsKIAotCiAJaW50IHNob3J0X3JldHJ5X2xpbWl0OwogCWludCBsb25nX3JldHJ5X2xpbWl0OwogCkBAIC01OTksNyArNTkyLDYgQEAKIAl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0X2NvbW1hbmRfcXVldWU7CiB9OwogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIEhvc3QgQ29tbWFuZCAtPiBGcm9tIERyaXZlciB0byBGVwogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTY0Niw3ICs2MzgsNiBAQAogI2RlZmluZSBDQVJEX0RJU0FCTEVfUEhZX09GRiAgIDYxCiAjZGVmaW5lIE1TRFVfVFhfUkFURVMgICAgICAgICAgNjIKIAotCiAvKiBSb2d1ZSBBUCBEZXRlY3Rpb24gKi8KICNkZWZpbmUgU0VUX1NUQVRJT05fU1RBVF9CSVRTICAgICAgNjQKICNkZWZpbmUgQ0xFQVJfU1RBVElPTlNfU1RBVF9CSVRTICAgNjUKQEAgLTY1NSw4ICs2NDYsNiBAQAogI2RlZmluZSBESVNBU1NPQ0lBVElPTl9CU1NJRAkgICA2OAogI2RlZmluZSBTRVRfV1BBX0lFICAgICAgICAgICAgICAgICA2OQogCi0KLQogLyogc3lzdGVtIGNvbmZpZ3VyYXRpb24gYml0IG1hc2s6ICovCiAjZGVmaW5lIElQV19DRkdfTU9OSVRPUiAgICAgICAgICAgICAgIDB4MDAwMDQKICNkZWZpbmUgSVBXX0NGR19QUkVBTUJMRV9BVVRPICAgICAgICAweDAwMDEwCkBAIC03MDQsNyArNjkzLDcgQEAKICNkZWZpbmUgSVBXMjEwMF9JTlRBX1RYX1RSQU5TRkVSICAgICAgICAgICAgICAgKDB4MDAwMDAwMDEpCS8vIEJpdCAwIChMU0IpCiAjZGVmaW5lIElQVzIxMDBfSU5UQV9SWF9UUkFOU0ZFUiAgICAgICAgICAgICAgICgweDAwMDAwMDAyKQkvLyBCaXQgMQogI2RlZmluZSBJUFcyMTAwX0lOVEFfVFhfQ09NUExFVEUJICAgICAgICgweDAwMDAwMDA0KQkvLyBCaXQgMgotI2RlZmluZSBJUFcyMTAwX0lOVEFfRVZFTlRfSU5URVJSVVBUICAgICAgICAgICAoMHgwMDAwMDAwOCkgICAgIC8vIEJpdCAzCisjZGVmaW5lIElQVzIxMDBfSU5UQV9FVkVOVF9JTlRFUlJVUFQgICAgICAgICAgICgweDAwMDAwMDA4KQkvLyBCaXQgMwogI2RlZmluZSBJUFcyMTAwX0lOVEFfU1RBVFVTX0NIQU5HRSAgICAgICAgICAgICAoMHgwMDAwMDAxMCkJLy8gQml0IDQKICNkZWZpbmUgSVBXMjEwMF9JTlRBX0JFQUNPTl9QRVJJT0RfRVhQSVJFRCAgICAgKDB4MDAwMDAwMjApCS8vIEJpdCA1CiAjZGVmaW5lIElQVzIxMDBfSU5UQV9TTEFWRV9NT0RFX0hPU1RfQ09NTUFORF9ET05FICAoMHgwMDAxMDAwMCkJLy8gQml0IDE2CkBAIC03ODQsOSArNzczLDYgQEAKICNkZWZpbmUgSVBXX0NBUkRfRElTQUJMRV9QSFlfT0ZGX0NPTVBMRVRFX1dBSVQJICAgIDEwMAkvLyAxMDAgbWlsbGkKICNkZWZpbmUgSVBXX1BSRVBBUkVfUE9XRVJfRE9XTl9DT01QTEVURV9XQUlUCSAgICAxMDAJLy8gMTAwIG1pbGxpCiAKLQotCi0KICNkZWZpbmUgSVBXX0hFQURFUl84MDJfMTFfU0laRQkJIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikKICNkZWZpbmUgSVBXX01BWF84MDIxMV9QQVlMT0FEX1NJWkUgICAgICAgICAgICAgIDIzMDRVCiAjZGVmaW5lIElQV19NQVhfODAyXzExX1BBWUxPQURfTEVOR1RICQkyMzEyCkBAIC04NDMsOCArODI5LDggQEAKICNkZWZpbmUgSVBXX1RYX1BPV0VSX01JTl9EQk0gICAgICAgICAoLTEyKQogI2RlZmluZSBJUFdfVFhfUE9XRVJfTUFYX0RCTSAgICAgICAgIDE2CiAKLSNkZWZpbmUgRldfU0NBTl9ET05PVF9BU1NPQ0lBVEUgICAgIDB4MDAwMSAvLyBEb250IEF0dGVtcHQgdG8gQXNzb2NpYXRlIGFmdGVyIFNjYW4KLSNkZWZpbmUgRldfU0NBTl9QQVNTSVZFICAgICAgICAgICAgIDB4MDAwOCAvLyBGb3JjZSBQQVNTU0lWRSBTY2FuCisjZGVmaW5lIEZXX1NDQU5fRE9OT1RfQVNTT0NJQVRFICAgICAweDAwMDEJLy8gRG9udCBBdHRlbXB0IHRvIEFzc29jaWF0ZSBhZnRlciBTY2FuCisjZGVmaW5lIEZXX1NDQU5fUEFTU0lWRSAgICAgICAgICAgICAweDAwMDgJLy8gRm9yY2UgUEFTU1NJVkUgU2NhbgogCiAjZGVmaW5lIFJFR19NSU5fQ0hBTk5FTCAgICAgICAgICAgICAwCiAjZGVmaW5lIFJFR19NQVhfQ0hBTk5FTCAgICAgICAgICAgICAxNApAQCAtODU2LDcgKzg0Miw2IEBACiAjZGVmaW5lIERJVkVSU0lUWV9BTlRFTk5BX0EgICAgICAgICAxCS8vIFVzZSBhbnRlbm5hIEEKICNkZWZpbmUgRElWRVJTSVRZX0FOVEVOTkFfQiAgICAgICAgIDIJLy8gVXNlIGFudGVubmEgQgogCi0KICNkZWZpbmUgSE9TVF9DT01NQU5EX1dBSVQgMAogI2RlZmluZSBIT1NUX0NPTU1BTkRfTk9fV0FJVCAxCiAKQEAgLTg3MywxMCArODU4LDkgQEAKICNkZWZpbmUgVFlQRV9BU1NPQ0lBVElPTl9SRVFVRVNUCTB4MDAxMwogI2RlZmluZSBUWVBFX1JFQVNTT0NJQVRJT05fUkVRVUVTVAkweDAwMTQKIAotCi0jZGVmaW5lIEhXX0ZFQVRVUkVfUkZLSUxMICgweDAwMDEpCi0jZGVmaW5lIFJGX0tJTExTV0lUQ0hfT0ZGICgxKQotI2RlZmluZSBSRl9LSUxMU1dJVENIX09OICAoMCkKKyNkZWZpbmUgSFdfRkVBVFVSRV9SRktJTEwgMHgwMDAxCisjZGVmaW5lIFJGX0tJTExTV0lUQ0hfT0ZGIDEKKyNkZWZpbmUgUkZfS0lMTFNXSVRDSF9PTiAgMAogCiAjZGVmaW5lIElQV19DT01NQU5EX1BPT0xfU0laRSAgICAgICAgNDAKIApAQCAtODk1LDcgKzg3OSw3IEBACiAvLyBGaXhlZCBzaXplIGRhdGE6IE9yZGluYWwgVGFibGUgMQogdHlwZWRlZiBlbnVtIF9PUkRJTkFMX1RBQkxFXzEgewkvLyBOUyAtIG1lYW5zIE5vdCBTdXBwb3J0ZWQgYnkgRlcKIC8vIFRyYW5zbWl0IHN0YXRpc3RpY3MKLQlJUFdfT1JEX1NUQVRfVFhfSE9TVF9SRVFVRVNUUyA9IDEsLy8gIyBvZiByZXF1ZXN0ZWQgSG9zdCBUeCdzIChNU0RVKQorCUlQV19PUkRfU1RBVF9UWF9IT1NUX1JFUVVFU1RTID0gMSwJLy8gIyBvZiByZXF1ZXN0ZWQgSG9zdCBUeCdzIChNU0RVKQogCUlQV19PUkRfU1RBVF9UWF9IT1NUX0NPTVBMRVRFLAkvLyAjIG9mIHN1Y2Nlc3NmdWwgSG9zdCBUeCdzIChNU0RVKQogCUlQV19PUkRfU1RBVF9UWF9ESVJfREFUQSwJLy8gIyBvZiBzdWNjZXNzZnVsIERpcmVjdGVkIFR4J3MgKE1TRFUpCiAKQEAgLTkwNSw0MiArODg5LDQyIEBACiAJSVBXX09SRF9TVEFUX1RYX0RJUl9EQVRBMTEsCS8vICMgb2Ygc3VjY2Vzc2Z1bCBEaXJlY3RlZCBUeCdzIChNU0RVKSBAIDExTUIKIAlJUFdfT1JEX1NUQVRfVFhfRElSX0RBVEEyMiwJLy8gIyBvZiBzdWNjZXNzZnVsIERpcmVjdGVkIFR4J3MgKE1TRFUpIEAgMjJNQgogCi0JSVBXX09SRF9TVEFUX1RYX05PRElSX0RBVEExID0gMTMsLy8gIyBvZiBzdWNjZXNzZnVsIE5vbl9EaXJlY3RlZCBUeCdzIChNU0RVKSBAIDFNQgorCUlQV19PUkRfU1RBVF9UWF9OT0RJUl9EQVRBMSA9IDEzLAkvLyAjIG9mIHN1Y2Nlc3NmdWwgTm9uX0RpcmVjdGVkIFR4J3MgKE1TRFUpIEAgMU1CCiAJSVBXX09SRF9TVEFUX1RYX05PRElSX0RBVEEyLAkvLyAjIG9mIHN1Y2Nlc3NmdWwgTm9uX0RpcmVjdGVkIFR4J3MgKE1TRFUpIEAgMk1CCiAJSVBXX09SRF9TVEFUX1RYX05PRElSX0RBVEE1XzUsCS8vICMgb2Ygc3VjY2Vzc2Z1bCBOb25fRGlyZWN0ZWQgVHgncyAoTVNEVSkgQCA1LjVNQgogCUlQV19PUkRfU1RBVF9UWF9OT0RJUl9EQVRBMTEsCS8vICMgb2Ygc3VjY2Vzc2Z1bCBOb25fRGlyZWN0ZWQgVHgncyAoTVNEVSkgQCAxMU1CCiAKIAlJUFdfT1JEX1NUQVRfTlVMTF9EQVRBID0gMjEsCS8vICMgb2Ygc3VjY2Vzc2Z1bCBOVUxMIGRhdGEgVHgncwotCUlQV19PUkRfU1RBVF9UWF9SVFMsCSAgICAgICAgLy8gIyBvZiBzdWNjZXNzZnVsIFR4IFJUUwotCUlQV19PUkRfU1RBVF9UWF9DVFMsCSAgICAgICAgLy8gIyBvZiBzdWNjZXNzZnVsIFR4IENUUwotCUlQV19PUkRfU1RBVF9UWF9BQ0ssCSAgICAgICAgLy8gIyBvZiBzdWNjZXNzZnVsIFR4IEFDSwotCUlQV19PUkRfU1RBVF9UWF9BU1NOLAkgICAgICAgIC8vICMgb2Ygc3VjY2Vzc2Z1bCBBc3NvY2lhdGlvbiBUeCdzCisJSVBXX09SRF9TVEFUX1RYX1JUUywJLy8gIyBvZiBzdWNjZXNzZnVsIFR4IFJUUworCUlQV19PUkRfU1RBVF9UWF9DVFMsCS8vICMgb2Ygc3VjY2Vzc2Z1bCBUeCBDVFMKKwlJUFdfT1JEX1NUQVRfVFhfQUNLLAkvLyAjIG9mIHN1Y2Nlc3NmdWwgVHggQUNLCisJSVBXX09SRF9TVEFUX1RYX0FTU04sCS8vICMgb2Ygc3VjY2Vzc2Z1bCBBc3NvY2lhdGlvbiBUeCdzCiAJSVBXX09SRF9TVEFUX1RYX0FTU05fUkVTUCwJLy8gIyBvZiBzdWNjZXNzZnVsIEFzc29jaWF0aW9uIHJlc3BvbnNlIFR4J3MKLQlJUFdfT1JEX1NUQVRfVFhfUkVBU1NOLAkgICAgICAgIC8vICMgb2Ygc3VjY2Vzc2Z1bCBSZWFzc29jaWF0aW9uIFR4J3MKKwlJUFdfT1JEX1NUQVRfVFhfUkVBU1NOLAkvLyAjIG9mIHN1Y2Nlc3NmdWwgUmVhc3NvY2lhdGlvbiBUeCdzCiAJSVBXX09SRF9TVEFUX1RYX1JFQVNTTl9SRVNQLAkvLyAjIG9mIHN1Y2Nlc3NmdWwgUmVhc3NvY2lhdGlvbiByZXNwb25zZSBUeCdzCi0JSVBXX09SRF9TVEFUX1RYX1BST0JFLAkgICAgICAgIC8vICMgb2YgcHJvYmVzIHN1Y2Nlc3NmdWxseSB0cmFuc21pdHRlZAorCUlQV19PUkRfU1RBVF9UWF9QUk9CRSwJLy8gIyBvZiBwcm9iZXMgc3VjY2Vzc2Z1bGx5IHRyYW5zbWl0dGVkCiAJSVBXX09SRF9TVEFUX1RYX1BST0JFX1JFU1AsCS8vICMgb2YgcHJvYmUgcmVzcG9uc2VzIHN1Y2Nlc3NmdWxseSB0cmFuc21pdHRlZAotCUlQV19PUkRfU1RBVF9UWF9CRUFDT04sCSAgICAgICAgLy8gIyBvZiB0eCBiZWFjb24KLQlJUFdfT1JEX1NUQVRfVFhfQVRJTSwJICAgICAgICAvLyAjIG9mIFR4IEFUSU0KKwlJUFdfT1JEX1NUQVRfVFhfQkVBQ09OLAkvLyAjIG9mIHR4IGJlYWNvbgorCUlQV19PUkRfU1RBVF9UWF9BVElNLAkvLyAjIG9mIFR4IEFUSU0KIAlJUFdfT1JEX1NUQVRfVFhfRElTQVNTTiwJLy8gIyBvZiBzdWNjZXNzZnVsIERpc2Fzc29jaWF0aW9uIFRYCi0JSVBXX09SRF9TVEFUX1RYX0FVVEgsCSAgICAgICAgLy8gIyBvZiBzdWNjZXNzZnVsIEF1dGhlbnRpY2F0aW9uIFR4Ci0JSVBXX09SRF9TVEFUX1RYX0RFQVVUSCwJICAgICAgICAvLyAjIG9mIHN1Y2Nlc3NmdWwgRGVhdXRoZW50aWNhdGlvbiBUWAorCUlQV19PUkRfU1RBVF9UWF9BVVRILAkvLyAjIG9mIHN1Y2Nlc3NmdWwgQXV0aGVudGljYXRpb24gVHgKKwlJUFdfT1JEX1NUQVRfVFhfREVBVVRILAkvLyAjIG9mIHN1Y2Nlc3NmdWwgRGVhdXRoZW50aWNhdGlvbiBUWAogCi0JSVBXX09SRF9TVEFUX1RYX1RPVEFMX0JZVEVTID0gNDEsLy8gVG90YWwgc3VjY2Vzc2Z1bCBUeCBkYXRhIGJ5dGVzCi0JSVBXX09SRF9TVEFUX1RYX1JFVFJJRVMsICAgICAgICAgLy8gIyBvZiBUeCByZXRyaWVzCi0JSVBXX09SRF9TVEFUX1RYX1JFVFJZMSwgICAgICAgICAgLy8gIyBvZiBUeCByZXRyaWVzIGF0IDFNQlBTCi0JSVBXX09SRF9TVEFUX1RYX1JFVFJZMiwgICAgICAgICAgLy8gIyBvZiBUeCByZXRyaWVzIGF0IDJNQlBTCi0JSVBXX09SRF9TVEFUX1RYX1JFVFJZNV81LAkgLy8gIyBvZiBUeCByZXRyaWVzIGF0IDUuNU1CUFMKLQlJUFdfT1JEX1NUQVRfVFhfUkVUUlkxMSwJIC8vICMgb2YgVHggcmV0cmllcyBhdCAxMU1CUFMKKwlJUFdfT1JEX1NUQVRfVFhfVE9UQUxfQllURVMgPSA0MSwJLy8gVG90YWwgc3VjY2Vzc2Z1bCBUeCBkYXRhIGJ5dGVzCisJSVBXX09SRF9TVEFUX1RYX1JFVFJJRVMsCS8vICMgb2YgVHggcmV0cmllcworCUlQV19PUkRfU1RBVF9UWF9SRVRSWTEsCS8vICMgb2YgVHggcmV0cmllcyBhdCAxTUJQUworCUlQV19PUkRfU1RBVF9UWF9SRVRSWTIsCS8vICMgb2YgVHggcmV0cmllcyBhdCAyTUJQUworCUlQV19PUkRfU1RBVF9UWF9SRVRSWTVfNSwJLy8gIyBvZiBUeCByZXRyaWVzIGF0IDUuNU1CUFMKKwlJUFdfT1JEX1NUQVRfVFhfUkVUUlkxMSwJLy8gIyBvZiBUeCByZXRyaWVzIGF0IDExTUJQUwogCiAJSVBXX09SRF9TVEFUX1RYX0ZBSUxVUkVTID0gNTEsCS8vICMgb2YgVHggRmFpbHVyZXMKIAlJUFdfT1JEX1NUQVRfVFhfQUJPUlRfQVRfSE9QLAkvL05TIC8vICMgb2YgVHgncyBhYm9ydGVkIGF0IGhvcCB0aW1lCi0JSVBXX09SRF9TVEFUX1RYX01BWF9UUklFU19JTl9IT1AsLy8gIyBvZiB0aW1lcyBtYXggdHJpZXMgaW4gYSBob3AgZmFpbGVkCisJSVBXX09SRF9TVEFUX1RYX01BWF9UUklFU19JTl9IT1AsCS8vICMgb2YgdGltZXMgbWF4IHRyaWVzIGluIGEgaG9wIGZhaWxlZAogCUlQV19PUkRfU1RBVF9UWF9BQk9SVF9MQVRFX0RNQSwJLy9OUyAvLyAjIG9mIHRpbWVzIHR4IGFib3J0ZWQgZHVlIHRvIGxhdGUgZG1hIHNldHVwCiAJSVBXX09SRF9TVEFUX1RYX0FCT1JUX1NUWCwJLy9OUyAvLyAjIG9mIHRpbWVzIGJhY2tvZmYgYWJvcnRlZAogCUlQV19PUkRfU1RBVF9UWF9ESVNBU1NOX0ZBSUwsCS8vICMgb2YgdGltZXMgZGlzYXNzb2NpYXRpb24gZmFpbGVkCi0JSVBXX09SRF9TVEFUX1RYX0VSUl9DVFMsICAgICAgICAgLy8gIyBvZiBtaXNzZWQvYmFkIENUUyBmcmFtZXMKLQlJUFdfT1JEX1NUQVRfVFhfQlBEVSwJICAgICAgICAvL05TIC8vICMgb2Ygc3Bhbm5pbmcgdHJlZSBCUERVcyBzZW50CisJSVBXX09SRF9TVEFUX1RYX0VSUl9DVFMsCS8vICMgb2YgbWlzc2VkL2JhZCBDVFMgZnJhbWVzCisJSVBXX09SRF9TVEFUX1RYX0JQRFUsCS8vTlMgLy8gIyBvZiBzcGFubmluZyB0cmVlIEJQRFVzIHNlbnQKIAlJUFdfT1JEX1NUQVRfVFhfRVJSX0FDSywJLy8gIyBvZiB0eCBlcnIgZHVlIHRvIGFja3MKIAogCS8vIFJlY2VpdmUgc3RhdGlzdGljcwpAQCAtOTUyLDcgKzkzNiw3IEBACiAJSVBXX09SRF9TVEFUX1JYX0RJUl9EQVRBMTEsCS8vICMgb2YgZGlyZWN0ZWQgcGFja2V0cyBhdCAxMU1CCiAJSVBXX09SRF9TVEFUX1JYX0RJUl9EQVRBMjIsCS8vICMgb2YgZGlyZWN0ZWQgcGFja2V0cyBhdCAyMk1CCiAKLQlJUFdfT1JEX1NUQVRfUlhfTk9ESVJfREFUQSA9IDcxLC8vICMgb2Ygbm9uZGlyZWN0ZWQgcGFja2V0cworCUlQV19PUkRfU1RBVF9SWF9OT0RJUl9EQVRBID0gNzEsCS8vICMgb2Ygbm9uZGlyZWN0ZWQgcGFja2V0cwogCUlQV19PUkRfU1RBVF9SWF9OT0RJUl9EQVRBMSwJLy8gIyBvZiBub25kaXJlY3RlZCBwYWNrZXRzIGF0IDFNQgogCUlQV19PUkRfU1RBVF9SWF9OT0RJUl9EQVRBMiwJLy8gIyBvZiBub25kaXJlY3RlZCBwYWNrZXRzIGF0IDJNQgogCUlQV19PUkRfU1RBVF9SWF9OT0RJUl9EQVRBNV81LAkvLyAjIG9mIG5vbmRpcmVjdGVkIHBhY2tldHMgYXQgNS41TUIKQEAgLTk3NywxOCArOTYxLDE4IEBACiAJSVBXX09SRF9TVEFUX1JYX0FVVEgsCS8vICMgb2YgYXV0aGVudGljYXRpb24gUngKIAlJUFdfT1JEX1NUQVRfUlhfREVBVVRILAkvLyAjIG9mIGRlYXV0aGVudGljYXRpb24gUngKIAotCUlQV19PUkRfU1RBVF9SWF9UT1RBTF9CWVRFUyA9IDEwMSwvLyBUb3RhbCByeCBkYXRhIGJ5dGVzIHJlY2VpdmVkCi0JSVBXX09SRF9TVEFUX1JYX0VSUl9DUkMsCSAvLyAjIG9mIHBhY2tldHMgd2l0aCBSeCBDUkMgZXJyb3IKLQlJUFdfT1JEX1NUQVRfUlhfRVJSX0NSQzEsCSAvLyAjIG9mIFJ4IENSQyBlcnJvcnMgYXQgMU1CCi0JSVBXX09SRF9TVEFUX1JYX0VSUl9DUkMyLAkgLy8gIyBvZiBSeCBDUkMgZXJyb3JzIGF0IDJNQgotCUlQV19PUkRfU1RBVF9SWF9FUlJfQ1JDNV81LAkgLy8gIyBvZiBSeCBDUkMgZXJyb3JzIGF0IDUuNU1CCi0JSVBXX09SRF9TVEFUX1JYX0VSUl9DUkMxMSwJIC8vICMgb2YgUnggQ1JDIGVycm9ycyBhdCAxMU1CCisJSVBXX09SRF9TVEFUX1JYX1RPVEFMX0JZVEVTID0gMTAxLAkvLyBUb3RhbCByeCBkYXRhIGJ5dGVzIHJlY2VpdmVkCisJSVBXX09SRF9TVEFUX1JYX0VSUl9DUkMsCS8vICMgb2YgcGFja2V0cyB3aXRoIFJ4IENSQyBlcnJvcgorCUlQV19PUkRfU1RBVF9SWF9FUlJfQ1JDMSwJLy8gIyBvZiBSeCBDUkMgZXJyb3JzIGF0IDFNQgorCUlQV19PUkRfU1RBVF9SWF9FUlJfQ1JDMiwJLy8gIyBvZiBSeCBDUkMgZXJyb3JzIGF0IDJNQgorCUlQV19PUkRfU1RBVF9SWF9FUlJfQ1JDNV81LAkvLyAjIG9mIFJ4IENSQyBlcnJvcnMgYXQgNS41TUIKKwlJUFdfT1JEX1NUQVRfUlhfRVJSX0NSQzExLAkvLyAjIG9mIFJ4IENSQyBlcnJvcnMgYXQgMTFNQgogCi0JSVBXX09SRF9TVEFUX1JYX0RVUExJQ0FURTEgPSAxMTIsIC8vICMgb2YgZHVwbGljYXRlIHJ4IHBhY2tldHMgYXQgMU1CCi0JSVBXX09SRF9TVEFUX1JYX0RVUExJQ0FURTIsCSAvLyAjIG9mIGR1cGxpY2F0ZSByeCBwYWNrZXRzIGF0IDJNQgotCUlQV19PUkRfU1RBVF9SWF9EVVBMSUNBVEU1XzUsCSAvLyAjIG9mIGR1cGxpY2F0ZSByeCBwYWNrZXRzIGF0IDUuNU1CCi0JSVBXX09SRF9TVEFUX1JYX0RVUExJQ0FURTExLAkgLy8gIyBvZiBkdXBsaWNhdGUgcnggcGFja2V0cyBhdCAxMU1CCi0JSVBXX09SRF9TVEFUX1JYX0RVUExJQ0FURSA9IDExOSwgLy8gIyBvZiBkdXBsaWNhdGUgcnggcGFja2V0cworCUlQV19PUkRfU1RBVF9SWF9EVVBMSUNBVEUxID0gMTEyLAkvLyAjIG9mIGR1cGxpY2F0ZSByeCBwYWNrZXRzIGF0IDFNQgorCUlQV19PUkRfU1RBVF9SWF9EVVBMSUNBVEUyLAkvLyAjIG9mIGR1cGxpY2F0ZSByeCBwYWNrZXRzIGF0IDJNQgorCUlQV19PUkRfU1RBVF9SWF9EVVBMSUNBVEU1XzUsCS8vICMgb2YgZHVwbGljYXRlIHJ4IHBhY2tldHMgYXQgNS41TUIKKwlJUFdfT1JEX1NUQVRfUlhfRFVQTElDQVRFMTEsCS8vICMgb2YgZHVwbGljYXRlIHJ4IHBhY2tldHMgYXQgMTFNQgorCUlQV19PUkRfU1RBVF9SWF9EVVBMSUNBVEUgPSAxMTksCS8vICMgb2YgZHVwbGljYXRlIHJ4IHBhY2tldHMKIAogCUlQV19PUkRfUEVSU19EQl9MT0NLID0gMTIwLAkvLyAjIGxvY2tpbmcgZncgcGVybWFuZW50ICBkYgogCUlQV19PUkRfUEVSU19EQl9TSVpFLAkvLyAjIHNpemUgb2YgZncgcGVybWFuZW50ICBkYgpAQCAtMTAwNiwxNyArOTkwLDE3IEBACiAJSVBXX09SRF9TVEFUX1JYX0lDVl9FUlJPUlMsCS8vICMgb2YgSUNWIGVycm9ycyBkdXJpbmcgZGVjcnlwdGlvbgogCiAvLyBQU1AgU3RhdGlzdGljcwotCUlQV19PUkRfU1RBVF9QU1BfU1VTUEVOU0lPTiA9IDEzNywvLyAjIG9mIHRpbWVzIGFkYXB0ZXIgc3VzcGVuZGVkCisJSVBXX09SRF9TVEFUX1BTUF9TVVNQRU5TSU9OID0gMTM3LAkvLyAjIG9mIHRpbWVzIGFkYXB0ZXIgc3VzcGVuZGVkCiAJSVBXX09SRF9TVEFUX1BTUF9CQ05fVElNRU9VVCwJLy8gIyBvZiBiZWFjb24gdGltZW91dAogCUlQV19PUkRfU1RBVF9QU1BfUE9MTF9USU1FT1VULAkvLyAjIG9mIHBvbGwgcmVzcG9uc2UgdGltZW91dHMKLQlJUFdfT1JEX1NUQVRfUFNQX05PTkRJUl9USU1FT1VULC8vICMgb2YgdGltZW91dHMgd2FpdGluZyBmb3IgbGFzdCBicm9hZGNhc3QvbXV0aWNhc3QgcGt0CisJSVBXX09SRF9TVEFUX1BTUF9OT05ESVJfVElNRU9VVCwJLy8gIyBvZiB0aW1lb3V0cyB3YWl0aW5nIGZvciBsYXN0IGJyb2FkY2FzdC9tdXRpY2FzdCBwa3QKIAlJUFdfT1JEX1NUQVRfUFNQX1JYX0RUSU1TLAkvLyAjIG9mIFBTUCBEVElNcyByZWNlaXZlZAogCUlQV19PUkRfU1RBVF9QU1BfUlhfVElNUywJLy8gIyBvZiBQU1AgVElNcyByZWNlaXZlZAogCUlQV19PUkRfU1RBVF9QU1BfU1RBVElPTl9JRCwJLy8gUFNQIFN0YXRpb24gSUQKIAogLy8gQXNzb2NpYXRpb24gYW5kIHJvYW1pbmcKIAlJUFdfT1JEX0xBU1RfQVNTTl9USU1FID0gMTQ3LAkvLyBSVEMgdGltZSBvZiBsYXN0IGFzc29jaWF0aW9uCi0JSVBXX09SRF9TVEFUX1BFUkNFTlRfTUlTU0VEX0JDTlMsLy8gY3VycmVudCBjYWxjdWxhdGlvbiBvZiAlIG1pc3NlZCBiZWFjb25zCisJSVBXX09SRF9TVEFUX1BFUkNFTlRfTUlTU0VEX0JDTlMsCS8vIGN1cnJlbnQgY2FsY3VsYXRpb24gb2YgJSBtaXNzZWQgYmVhY29ucwogCUlQV19PUkRfU1RBVF9QRVJDRU5UX1JFVFJJRVMsCS8vIGN1cnJlbnQgY2FsY3VsYXRpb24gb2YgJSBtaXNzZWQgdHggcmV0cmllcwogCUlQV19PUkRfQVNTT0NJQVRFRF9BUF9QVFIsCS8vIElmIGFzc29jaWF0ZWQsIHRoaXMgaXMgcHRyIHRvIHRoZSBhc3NvY2lhdGVkCiAJLy8gQVAgdGFibGUgZW50cnkuIHNldCB0byAwIGlmIG5vdCBhc3NvY2lhdGVkCkBAIC0xMTUxLDcgKzExMzUsNyBAQAogfTsKIAogc3RydWN0IGlwdzIxMDBfZndfY2h1bmtfc2V0IHsKLSAgIAljb25zdCB2b2lkICpkYXRhOworCWNvbnN0IHZvaWQgKmRhdGE7CiAJdW5zaWduZWQgbG9uZyBzaXplOwogfTsKIApAQCAtMTE2NCw0ICsxMTQ4LDQgQEAKIAogI2RlZmluZSBNQVhfRldfVkVSU0lPTl9MRU4gMTQKIAotI2VuZGlmIC8qIF9JUFcyMTAwX0ggKi8KKyNlbmRpZgkJCQkvKiBfSVBXMjEwMF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyMjAwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyMjAwLmMKaW5kZXggM2RiMGMzMi4uYjBkMTk1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MjIwMC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzIyMDAuYwpAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAotICBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDQgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgIENvcHlyaWdodChjKSAyMDAzIC0gMjAwNSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogICA4MDIuMTEgc3RhdHVzIGNvZGUgcG9ydGlvbiBvZiB0aGlzIGZpbGUgZnJvbSBldGhlcmVhbC0wLjEwLjY6CiAgICAgQ29weXJpZ2h0IDIwMDAsIEF4aXMgQ29tbXVuaWNhdGlvbnMgQUIKQEAgLTMxLDMwICszMSwxMDMgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogI2luY2x1ZGUgImlwdzIyMDAuaCIKKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAKLSNkZWZpbmUgSVBXMjIwMF9WRVJTSU9OICIxLjAuMCIKKyNkZWZpbmUgSVBXMjIwMF9WRVJTSU9OICJnaXQtMS4wLjgiCiAjZGVmaW5lIERSVl9ERVNDUklQVElPTgkiSW50ZWwoUikgUFJPL1dpcmVsZXNzIDIyMDAvMjkxNSBOZXR3b3JrIERyaXZlciIKLSNkZWZpbmUgRFJWX0NPUFlSSUdIVAkiQ29weXJpZ2h0KGMpIDIwMDMtMjAwNCBJbnRlbCBDb3Jwb3JhdGlvbiIKKyNkZWZpbmUgRFJWX0NPUFlSSUdIVAkiQ29weXJpZ2h0KGMpIDIwMDMtMjAwNSBJbnRlbCBDb3Jwb3JhdGlvbiIKICNkZWZpbmUgRFJWX1ZFUlNJT04gICAgIElQVzIyMDBfVkVSU0lPTgogCisjZGVmaW5lIEVUSF9QXzgwMjExX1NUQVRTIChFVEhfUF84MDIxMV9SQVcgKyAxKQorCiBNT0RVTEVfREVTQ1JJUFRJT04oRFJWX0RFU0NSSVBUSU9OKTsKIE1PRFVMRV9WRVJTSU9OKERSVl9WRVJTSU9OKTsKIE1PRFVMRV9BVVRIT1IoRFJWX0NPUFlSSUdIVCk7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKK3N0YXRpYyBpbnQgY21kbG9nID0gMDsKIHN0YXRpYyBpbnQgZGVidWcgPSAwOwogc3RhdGljIGludCBjaGFubmVsID0gMDsKLXN0YXRpYyBjaGFyICppZm5hbWU7CiBzdGF0aWMgaW50IG1vZGUgPSAwOwogCiBzdGF0aWMgdTMyIGlwd19kZWJ1Z19sZXZlbDsKIHN0YXRpYyBpbnQgYXNzb2NpYXRlID0gMTsKIHN0YXRpYyBpbnQgYXV0b19jcmVhdGUgPSAxOworc3RhdGljIGludCBsZWQgPSAwOwogc3RhdGljIGludCBkaXNhYmxlID0gMDsKK3N0YXRpYyBpbnQgaHdjcnlwdG8gPSAxOwogc3RhdGljIGNvbnN0IGNoYXIgaXB3X21vZGVzW10gPSB7CiAJJ2EnLCAnYicsICdnJywgJz8nCiB9OwogCisjaWZkZWYgQ09ORklHX0lQV19RT1MKK3N0YXRpYyBpbnQgcW9zX2VuYWJsZSA9IDA7CitzdGF0aWMgaW50IHFvc19idXJzdF9lbmFibGUgPSAwOworc3RhdGljIGludCBxb3Nfbm9fYWNrX21hc2sgPSAwOworc3RhdGljIGludCBidXJzdF9kdXJhdGlvbl9DQ0sgPSAwOworc3RhdGljIGludCBidXJzdF9kdXJhdGlvbl9PRkRNID0gMDsKKworc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfcW9zX3BhcmFtZXRlcnMgZGVmX3Fvc19wYXJhbWV0ZXJzX09GRE0gPSB7CisJe1FPU19UWDBfQ1dfTUlOX09GRE0sIFFPU19UWDFfQ1dfTUlOX09GRE0sIFFPU19UWDJfQ1dfTUlOX09GRE0sCisJIFFPU19UWDNfQ1dfTUlOX09GRE19LAorCXtRT1NfVFgwX0NXX01BWF9PRkRNLCBRT1NfVFgxX0NXX01BWF9PRkRNLCBRT1NfVFgyX0NXX01BWF9PRkRNLAorCSBRT1NfVFgzX0NXX01BWF9PRkRNfSwKKwl7UU9TX1RYMF9BSUZTLCBRT1NfVFgxX0FJRlMsIFFPU19UWDJfQUlGUywgUU9TX1RYM19BSUZTfSwKKwl7UU9TX1RYMF9BQ00sIFFPU19UWDFfQUNNLCBRT1NfVFgyX0FDTSwgUU9TX1RYM19BQ019LAorCXtRT1NfVFgwX1RYT1BfTElNSVRfT0ZETSwgUU9TX1RYMV9UWE9QX0xJTUlUX09GRE0sCisJIFFPU19UWDJfVFhPUF9MSU1JVF9PRkRNLCBRT1NfVFgzX1RYT1BfTElNSVRfT0ZETX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3Fvc19wYXJhbWV0ZXJzIGRlZl9xb3NfcGFyYW1ldGVyc19DQ0sgPSB7CisJe1FPU19UWDBfQ1dfTUlOX0NDSywgUU9TX1RYMV9DV19NSU5fQ0NLLCBRT1NfVFgyX0NXX01JTl9DQ0ssCisJIFFPU19UWDNfQ1dfTUlOX0NDS30sCisJe1FPU19UWDBfQ1dfTUFYX0NDSywgUU9TX1RYMV9DV19NQVhfQ0NLLCBRT1NfVFgyX0NXX01BWF9DQ0ssCisJIFFPU19UWDNfQ1dfTUFYX0NDS30sCisJe1FPU19UWDBfQUlGUywgUU9TX1RYMV9BSUZTLCBRT1NfVFgyX0FJRlMsIFFPU19UWDNfQUlGU30sCisJe1FPU19UWDBfQUNNLCBRT1NfVFgxX0FDTSwgUU9TX1RYMl9BQ00sIFFPU19UWDNfQUNNfSwKKwl7UU9TX1RYMF9UWE9QX0xJTUlUX0NDSywgUU9TX1RYMV9UWE9QX0xJTUlUX0NDSywgUU9TX1RYMl9UWE9QX0xJTUlUX0NDSywKKwkgUU9TX1RYM19UWE9QX0xJTUlUX0NDS30KK307CisKK3N0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3Fvc19wYXJhbWV0ZXJzIGRlZl9wYXJhbWV0ZXJzX09GRE0gPSB7CisJe0RFRl9UWDBfQ1dfTUlOX09GRE0sIERFRl9UWDFfQ1dfTUlOX09GRE0sIERFRl9UWDJfQ1dfTUlOX09GRE0sCisJIERFRl9UWDNfQ1dfTUlOX09GRE19LAorCXtERUZfVFgwX0NXX01BWF9PRkRNLCBERUZfVFgxX0NXX01BWF9PRkRNLCBERUZfVFgyX0NXX01BWF9PRkRNLAorCSBERUZfVFgzX0NXX01BWF9PRkRNfSwKKwl7REVGX1RYMF9BSUZTLCBERUZfVFgxX0FJRlMsIERFRl9UWDJfQUlGUywgREVGX1RYM19BSUZTfSwKKwl7REVGX1RYMF9BQ00sIERFRl9UWDFfQUNNLCBERUZfVFgyX0FDTSwgREVGX1RYM19BQ019LAorCXtERUZfVFgwX1RYT1BfTElNSVRfT0ZETSwgREVGX1RYMV9UWE9QX0xJTUlUX09GRE0sCisJIERFRl9UWDJfVFhPUF9MSU1JVF9PRkRNLCBERUZfVFgzX1RYT1BfTElNSVRfT0ZETX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3Fvc19wYXJhbWV0ZXJzIGRlZl9wYXJhbWV0ZXJzX0NDSyA9IHsKKwl7REVGX1RYMF9DV19NSU5fQ0NLLCBERUZfVFgxX0NXX01JTl9DQ0ssIERFRl9UWDJfQ1dfTUlOX0NDSywKKwkgREVGX1RYM19DV19NSU5fQ0NLfSwKKwl7REVGX1RYMF9DV19NQVhfQ0NLLCBERUZfVFgxX0NXX01BWF9DQ0ssIERFRl9UWDJfQ1dfTUFYX0NDSywKKwkgREVGX1RYM19DV19NQVhfQ0NLfSwKKwl7REVGX1RYMF9BSUZTLCBERUZfVFgxX0FJRlMsIERFRl9UWDJfQUlGUywgREVGX1RYM19BSUZTfSwKKwl7REVGX1RYMF9BQ00sIERFRl9UWDFfQUNNLCBERUZfVFgyX0FDTSwgREVGX1RYM19BQ019LAorCXtERUZfVFgwX1RYT1BfTElNSVRfQ0NLLCBERUZfVFgxX1RYT1BfTElNSVRfQ0NLLCBERUZfVFgyX1RYT1BfTElNSVRfQ0NLLAorCSBERUZfVFgzX1RYT1BfTElNSVRfQ0NLfQorfTsKKworc3RhdGljIHU4IHFvc19vdWlbUU9TX09VSV9MRU5dID0geyAweDAwLCAweDUwLCAweEYyIH07CisKK3N0YXRpYyBpbnQgZnJvbV9wcmlvcml0eV90b190eF9xdWV1ZVtdID0geworCUlQV19UWF9RVUVVRV8xLCBJUFdfVFhfUVVFVUVfMiwgSVBXX1RYX1FVRVVFXzIsIElQV19UWF9RVUVVRV8xLAorCUlQV19UWF9RVUVVRV8zLCBJUFdfVFhfUVVFVUVfMywgSVBXX1RYX1FVRVVFXzQsIElQV19UWF9RVUVVRV80Cit9OworCitzdGF0aWMgdTMyIGlwd19xb3NfZ2V0X2J1cnN0X2R1cmF0aW9uKHN0cnVjdCBpcHdfcHJpdiAqcHJpdik7CisKK3N0YXRpYyBpbnQgaXB3X3NlbmRfcW9zX3BhcmFtc19jb21tYW5kKHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwgc3RydWN0IGllZWU4MDIxMV9xb3NfcGFyYW1ldGVycworCQkJCSAgICAgICAqcW9zX3BhcmFtKTsKK3N0YXRpYyBpbnQgaXB3X3NlbmRfcW9zX2luZm9fY29tbWFuZChzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsIHN0cnVjdCBpZWVlODAyMTFfcW9zX2luZm9ybWF0aW9uX2VsZW1lbnQKKwkJCQkgICAgICpxb3NfcGFyYW0pOworI2VuZGlmCQkJCS8qIENPTkZJR19JUFdfUU9TICovCisKK3N0YXRpYyBzdHJ1Y3QgaXdfc3RhdGlzdGljcyAqaXB3X2dldF93aXJlbGVzc19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyB2b2lkIGlwd19yZW1vdmVfY3VycmVudF9uZXR3b3JrKHN0cnVjdCBpcHdfcHJpdiAqcHJpdik7CiBzdGF0aWMgdm9pZCBpcHdfcngoc3RydWN0IGlwd19wcml2ICpwcml2KTsKIHN0YXRpYyBpbnQgaXB3X3F1ZXVlX3R4X3JlY2xhaW0oc3RydWN0IGlwd19wcml2ICpwcml2LAogCQkJCXN0cnVjdCBjbHgyX3R4X3F1ZXVlICp0eHEsIGludCBxaW5kZXgpOwpAQCAtNjgsNDIgKzE0MSwyNCBAQAogc3RhdGljIHN0cnVjdCBpcHdfcnhfcXVldWUgKmlwd19yeF9xdWV1ZV9hbGxvYyhzdHJ1Y3QgaXB3X3ByaXYgKik7CiBzdGF0aWMgdm9pZCBpcHdfcnhfcXVldWVfZnJlZShzdHJ1Y3QgaXB3X3ByaXYgKiwgc3RydWN0IGlwd19yeF9xdWV1ZSAqKTsKIHN0YXRpYyB2b2lkIGlwd19yeF9xdWV1ZV9yZXBsZW5pc2godm9pZCAqKTsKLQogc3RhdGljIGludCBpcHdfdXAoc3RydWN0IGlwd19wcml2ICopOworc3RhdGljIHZvaWQgaXB3X2JnX3VwKHZvaWQgKik7CiBzdGF0aWMgdm9pZCBpcHdfZG93bihzdHJ1Y3QgaXB3X3ByaXYgKik7CitzdGF0aWMgdm9pZCBpcHdfYmdfZG93bih2b2lkICopOwogc3RhdGljIGludCBpcHdfY29uZmlnKHN0cnVjdCBpcHdfcHJpdiAqKTsKIHN0YXRpYyBpbnQgaW5pdF9zdXBwb3J0ZWRfcmF0ZXMoc3RydWN0IGlwd19wcml2ICpwcml2LAogCQkJCXN0cnVjdCBpcHdfc3VwcG9ydGVkX3JhdGVzICpwcmF0ZXMpOworc3RhdGljIHZvaWQgaXB3X3NldF9od2NyeXB0b19rZXlzKHN0cnVjdCBpcHdfcHJpdiAqKTsKK3N0YXRpYyB2b2lkIGlwd19zZW5kX3dlcF9rZXlzKHN0cnVjdCBpcHdfcHJpdiAqLCBpbnQpOwogCi1zdGF0aWMgdTggYmFuZF9iX2FjdGl2ZV9jaGFubmVsW01BWF9CX0NIQU5ORUxTXSA9IHsKLQkxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDAKLX07Ci1zdGF0aWMgdTggYmFuZF9hX2FjdGl2ZV9jaGFubmVsW01BWF9BX0NIQU5ORUxTXSA9IHsKLQkzNiwgNDAsIDQ0LCA0OCwgMTQ5LCAxNTMsIDE1NywgMTYxLCAxNjUsIDUyLCA1NiwgNjAsIDY0LCAwCi19Oworc3RhdGljIGludCBpcHdfaXNfdmFsaWRfY2hhbm5lbChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqLCB1OCk7CitzdGF0aWMgaW50IGlwd19jaGFubmVsX3RvX2luZGV4KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICosIHU4KTsKK3N0YXRpYyB1OCBpcHdfZnJlcV90b19jaGFubmVsKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICosIHUzMik7CitzdGF0aWMgaW50IGlwd19zZXRfZ2VvKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICosIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfZ2VvICopOworc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfZ2VvICppcHdfZ2V0X2dlbyhzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqKTsKIAotc3RhdGljIGludCBpc192YWxpZF9jaGFubmVsKGludCBtb2RlX21hc2ssIGludCBjaGFubmVsKQotewotCWludCBpOwotCi0JaWYgKCFjaGFubmVsKQotCQlyZXR1cm4gMDsKLQotCWlmIChtb2RlX21hc2sgJiBJRUVFX0EpCi0JCWZvciAoaSA9IDA7IGkgPCBNQVhfQV9DSEFOTkVMUzsgaSsrKQotCQkJaWYgKGJhbmRfYV9hY3RpdmVfY2hhbm5lbFtpXSA9PSBjaGFubmVsKQotCQkJCXJldHVybiBJRUVFX0E7Ci0KLQlpZiAobW9kZV9tYXNrICYgKElFRUVfQiB8IElFRUVfRykpCi0JCWZvciAoaSA9IDA7IGkgPCBNQVhfQl9DSEFOTkVMUzsgaSsrKQotCQkJaWYgKGJhbmRfYl9hY3RpdmVfY2hhbm5lbFtpXSA9PSBjaGFubmVsKQotCQkJCXJldHVybiBtb2RlX21hc2sgJiAoSUVFRV9CIHwgSUVFRV9HKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgY2hhciAqc25wcmludF9saW5lKGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50LAotCQkJICBjb25zdCB1OCAqIGRhdGEsIHUzMiBsZW4sIHUzMiBvZnMpCitzdGF0aWMgaW50IHNucHJpbnRfbGluZShjaGFyICpidWYsIHNpemVfdCBjb3VudCwKKwkJCWNvbnN0IHU4ICogZGF0YSwgdTMyIGxlbiwgdTMyIG9mcykKIHsKIAlpbnQgb3V0LCBpLCBqLCBsOwogCWNoYXIgYzsKQEAgLTEzNCw3ICsxODksNyBAQAogCQkJb3V0ICs9IHNucHJpbnRmKGJ1ZiArIG91dCwgY291bnQgLSBvdXQsICIgIik7CiAJfQogCi0JcmV0dXJuIGJ1ZjsKKwlyZXR1cm4gb3V0OwogfQogCiBzdGF0aWMgdm9pZCBwcmludGtfYnVmKGludCBsZXZlbCwgY29uc3QgdTggKiBkYXRhLCB1MzIgbGVuKQpAQCAtMTQ1LDE0ICsyMDAsMzMgQEAKIAkJcmV0dXJuOwogCiAJd2hpbGUgKGxlbikgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXNcbiIsCi0JCSAgICAgICBzbnByaW50X2xpbmUobGluZSwgc2l6ZW9mKGxpbmUpLCAmZGF0YVtvZnNdLAotCQkJCSAgICBtaW4obGVuLCAxNlUpLCBvZnMpKTsKKwkJc25wcmludF9saW5lKGxpbmUsIHNpemVvZihsaW5lKSwgJmRhdGFbb2ZzXSwKKwkJCSAgICAgbWluKGxlbiwgMTZVKSwgb2ZzKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzXG4iLCBsaW5lKTsKIAkJb2ZzICs9IDE2OwogCQlsZW4gLT0gbWluKGxlbiwgMTZVKTsKIAl9CiB9CiAKK3N0YXRpYyBpbnQgc25wcmludGtfYnVmKHU4ICogb3V0cHV0LCBzaXplX3Qgc2l6ZSwgY29uc3QgdTggKiBkYXRhLCBzaXplX3QgbGVuKQoreworCXNpemVfdCBvdXQgPSBzaXplOworCXUzMiBvZnMgPSAwOworCWludCB0b3RhbCA9IDA7CisKKwl3aGlsZSAoc2l6ZSAmJiBsZW4pIHsKKwkJb3V0ID0gc25wcmludF9saW5lKG91dHB1dCwgc2l6ZSwgJmRhdGFbb2ZzXSwKKwkJCQkgICBtaW5fdChzaXplX3QsIGxlbiwgMTZVKSwgb2ZzKTsKKworCQlvZnMgKz0gMTY7CisJCW91dHB1dCArPSBvdXQ7CisJCXNpemUgLT0gb3V0OworCQlsZW4gLT0gbWluX3Qoc2l6ZV90LCBsZW4sIDE2VSk7CisJCXRvdGFsICs9IG91dDsKKwl9CisJcmV0dXJuIHRvdGFsOworfQorCiBzdGF0aWMgdTMyIF9pcHdfcmVhZF9yZWczMihzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsIHUzMiByZWcpOwogI2RlZmluZSBpcHdfcmVhZF9yZWczMihhLCBiKSBfaXB3X3JlYWRfcmVnMzIoYSwgYikKIApAQCAtMjI2LDM4ICszMDAsNDIgQEAKICNkZWZpbmUgaXB3X3JlYWQzMihpcHcsIG9mcykgX19pcHdfcmVhZDMyKF9fRklMRV9fLCBfX0xJTkVfXywgaXB3LCBvZnMpCiAKIHN0YXRpYyB2b2lkIF9pcHdfcmVhZF9pbmRpcmVjdChzdHJ1Y3QgaXB3X3ByaXYgKiwgdTMyLCB1OCAqLCBpbnQpOwotI2RlZmluZSBpcHdfcmVhZF9pbmRpcmVjdChhLCBiLCBjLCBkKSBcCi0JSVBXX0RFQlVHX0lPKCIlcyAlZDogcmVhZF9pbmRkaXJlY3QoMHglMDhYKSAlZCBieXRlc1xuIiwgX19GSUxFX18sIF9fTElORV9fLCAodTMyKShiKSwgZCk7IFwKLQlfaXB3X3JlYWRfaW5kaXJlY3QoYSwgYiwgYywgZCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2lwd19yZWFkX2luZGlyZWN0KGNvbnN0IGNoYXIgKmYsIGludCBsLAorCQkJCSAgICAgICBzdHJ1Y3QgaXB3X3ByaXYgKmEsIHUzMiBiLCB1OCAqIGMsIGludCBkKQoreworCUlQV19ERUJVR19JTygiJXMgJWQ6IHJlYWRfaW5kaXJlY3QoMHglMDhYKSAlZCBieXRlc1xuIiwgZiwgbCwgKHUzMikgKGIpLAorCQkgICAgIGQpOworCV9pcHdfcmVhZF9pbmRpcmVjdChhLCBiLCBjLCBkKTsKK30KKworI2RlZmluZSBpcHdfcmVhZF9pbmRpcmVjdChhLCBiLCBjLCBkKSBfX2lwd19yZWFkX2luZGlyZWN0KF9fRklMRV9fLCBfX0xJTkVfXywgYSwgYiwgYywgZCkKIAogc3RhdGljIHZvaWQgX2lwd193cml0ZV9pbmRpcmVjdChzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsIHUzMiBhZGRyLCB1OCAqIGRhdGEsCiAJCQkJaW50IG51bSk7CiAjZGVmaW5lIGlwd193cml0ZV9pbmRpcmVjdChhLCBiLCBjLCBkKSBcCiAJSVBXX0RFQlVHX0lPKCIlcyAlZDogd3JpdGVfaW5kaXJlY3QoMHglMDhYKSAlZCBieXRlc1xuIiwgX19GSUxFX18sIF9fTElORV9fLCAodTMyKShiKSwgZCk7IFwKLSAgICAgICAgX2lwd193cml0ZV9pbmRpcmVjdChhLCBiLCBjLCBkKQorCV9pcHdfd3JpdGVfaW5kaXJlY3QoYSwgYiwgYywgZCkKIAogLyogaW5kaXJlY3Qgd3JpdGUgcyAqLwogc3RhdGljIHZvaWQgX2lwd193cml0ZV9yZWczMihzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWx1ZSkKIHsKIAlJUFdfREVCVUdfSU8oIiAlcCA6IHJlZyA9IDB4JThYIDogdmFsdWUgPSAweCU4WFxuIiwgcHJpdiwgcmVnLCB2YWx1ZSk7Ci0JX2lwd193cml0ZTMyKHByaXYsIENYMl9JTkRJUkVDVF9BRERSLCByZWcpOwotCV9pcHdfd3JpdGUzMihwcml2LCBDWDJfSU5ESVJFQ1RfREFUQSwgdmFsdWUpOworCV9pcHdfd3JpdGUzMihwcml2LCBJUFdfSU5ESVJFQ1RfQUREUiwgcmVnKTsKKwlfaXB3X3dyaXRlMzIocHJpdiwgSVBXX0lORElSRUNUX0RBVEEsIHZhbHVlKTsKIH0KIAogc3RhdGljIHZvaWQgX2lwd193cml0ZV9yZWc4KHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTggdmFsdWUpCiB7CiAJSVBXX0RFQlVHX0lPKCIgcmVnID0gMHglOFggOiB2YWx1ZSA9IDB4JThYXG4iLCByZWcsIHZhbHVlKTsKLQlfaXB3X3dyaXRlMzIocHJpdiwgQ1gyX0lORElSRUNUX0FERFIsIHJlZyAmIENYMl9JTkRJUkVDVF9BRERSX01BU0spOwotCV9pcHdfd3JpdGU4KHByaXYsIENYMl9JTkRJUkVDVF9EQVRBLCB2YWx1ZSk7Ci0JSVBXX0RFQlVHX0lPKCIgcmVnID0gMHglOGxYIDogdmFsdWUgPSAweCU4WFxuIiwKLQkJICAgICAodW5zaWduZWQgbG9uZykocHJpdi0+aHdfYmFzZSArIENYMl9JTkRJUkVDVF9EQVRBKSwgdmFsdWUpOworCV9pcHdfd3JpdGUzMihwcml2LCBJUFdfSU5ESVJFQ1RfQUREUiwgcmVnICYgSVBXX0lORElSRUNUX0FERFJfTUFTSyk7CisJX2lwd193cml0ZTgocHJpdiwgSVBXX0lORElSRUNUX0RBVEEsIHZhbHVlKTsKIH0KIAogc3RhdGljIHZvaWQgX2lwd193cml0ZV9yZWcxNihzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsIHUzMiByZWcsIHUxNiB2YWx1ZSkKIHsKIAlJUFdfREVCVUdfSU8oIiByZWcgPSAweCU4WCA6IHZhbHVlID0gMHglOFhcbiIsIHJlZywgdmFsdWUpOwotCV9pcHdfd3JpdGUzMihwcml2LCBDWDJfSU5ESVJFQ1RfQUREUiwgcmVnICYgQ1gyX0lORElSRUNUX0FERFJfTUFTSyk7Ci0JX2lwd193cml0ZTE2KHByaXYsIENYMl9JTkRJUkVDVF9EQVRBLCB2YWx1ZSk7CisJX2lwd193cml0ZTMyKHByaXYsIElQV19JTkRJUkVDVF9BRERSLCByZWcgJiBJUFdfSU5ESVJFQ1RfQUREUl9NQVNLKTsKKwlfaXB3X3dyaXRlMTYocHJpdiwgSVBXX0lORElSRUNUX0RBVEEsIHZhbHVlKTsKIH0KIAogLyogaW5kaXJlY3QgcmVhZCBzICovCkBAIC0yNjUsOSArMzQzLDkgQEAKIHN0YXRpYyB1OCBfaXB3X3JlYWRfcmVnOChzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsIHUzMiByZWcpCiB7CiAJdTMyIHdvcmQ7Ci0JX2lwd193cml0ZTMyKHByaXYsIENYMl9JTkRJUkVDVF9BRERSLCByZWcgJiBDWDJfSU5ESVJFQ1RfQUREUl9NQVNLKTsKKwlfaXB3X3dyaXRlMzIocHJpdiwgSVBXX0lORElSRUNUX0FERFIsIHJlZyAmIElQV19JTkRJUkVDVF9BRERSX01BU0spOwogCUlQV19ERUJVR19JTygiIHJlZyA9IDB4JThYIDogXG4iLCByZWcpOwotCXdvcmQgPSBfaXB3X3JlYWQzMihwcml2LCBDWDJfSU5ESVJFQ1RfREFUQSk7CisJd29yZCA9IF9pcHdfcmVhZDMyKHByaXYsIElQV19JTkRJUkVDVF9EQVRBKTsKIAlyZXR1cm4gKHdvcmQgPj4gKChyZWcgJiAweDMpICogOCkpICYgMHhmZjsKIH0KIApAQCAtMjc3LDggKzM1NSw4IEBACiAKIAlJUFdfREVCVUdfSU8oIiVwIDogcmVnID0gMHglMDh4XG4iLCBwcml2LCByZWcpOwogCi0JX2lwd193cml0ZTMyKHByaXYsIENYMl9JTkRJUkVDVF9BRERSLCByZWcpOwotCXZhbHVlID0gX2lwd19yZWFkMzIocHJpdiwgQ1gyX0lORElSRUNUX0RBVEEpOworCV9pcHdfd3JpdGUzMihwcml2LCBJUFdfSU5ESVJFQ1RfQUREUiwgcmVnKTsKKwl2YWx1ZSA9IF9pcHdfcmVhZDMyKHByaXYsIElQV19JTkRJUkVDVF9EQVRBKTsKIAlJUFdfREVCVUdfSU8oIiByZWcgPSAweCU0WCA6IHZhbHVlID0gMHglNHggXG4iLCByZWcsIHZhbHVlKTsKIAlyZXR1cm4gdmFsdWU7CiB9CkBAIC0yODcsNjcgKzM2NSw2OSBAQAogc3RhdGljIHZvaWQgX2lwd19yZWFkX2luZGlyZWN0KHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwgdTMyIGFkZHIsIHU4ICogYnVmLAogCQkJICAgICAgIGludCBudW0pCiB7Ci0JdTMyIGFsaWduZWRfYWRkciA9IGFkZHIgJiBDWDJfSU5ESVJFQ1RfQUREUl9NQVNLOworCXUzMiBhbGlnbmVkX2FkZHIgPSBhZGRyICYgSVBXX0lORElSRUNUX0FERFJfTUFTSzsKIAl1MzIgZGlmX2xlbiA9IGFkZHIgLSBhbGlnbmVkX2FkZHI7Ci0JdTMyIGFsaWduZWRfbGVuOwogCXUzMiBpOwogCiAJSVBXX0RFQlVHX0lPKCJhZGRyID0gJWksIGJ1ZiA9ICVwLCBudW0gPSAlaVxuIiwgYWRkciwgYnVmLCBudW0pOwogCisJaWYgKG51bSA8PSAwKSB7CisJCXJldHVybjsKKwl9CisKIAkvKiBSZWFkIHRoZSBmaXJzdCBuaWJibGUgYnl0ZSBieSBieXRlICovCiAJaWYgKHVubGlrZWx5KGRpZl9sZW4pKSB7CisJCV9pcHdfd3JpdGUzMihwcml2LCBJUFdfSU5ESVJFQ1RfQUREUiwgYWxpZ25lZF9hZGRyKTsKIAkJLyogU3RhcnQgcmVhZGluZyBhdCBhbGlnbmVkX2FkZHIgKyBkaWZfbGVuICovCi0JCV9pcHdfd3JpdGUzMihwcml2LCBDWDJfSU5ESVJFQ1RfQUREUiwgYWxpZ25lZF9hZGRyKTsKLQkJZm9yIChpID0gZGlmX2xlbjsgaSA8IDQ7IGkrKywgYnVmKyspCi0JCQkqYnVmID0gX2lwd19yZWFkOChwcml2LCBDWDJfSU5ESVJFQ1RfREFUQSArIGkpOwotCQludW0gLT0gZGlmX2xlbjsKKwkJZm9yIChpID0gZGlmX2xlbjsgKChpIDwgNCkgJiYgKG51bSA+IDApKTsgaSsrLCBudW0tLSkKKwkJCSpidWYrKyA9IF9pcHdfcmVhZDgocHJpdiwgSVBXX0lORElSRUNUX0RBVEEgKyBpKTsKIAkJYWxpZ25lZF9hZGRyICs9IDQ7CiAJfQogCi0JLyogUmVhZCBEV3MgdGhyb3VnaCBhdXRvaW5jIHJlZ2lzdGVyICovCi0JX2lwd193cml0ZTMyKHByaXYsIENYMl9BVVRPSU5DX0FERFIsIGFsaWduZWRfYWRkcik7Ci0JYWxpZ25lZF9sZW4gPSBudW0gJiBDWDJfSU5ESVJFQ1RfQUREUl9NQVNLOwotCWZvciAoaSA9IDA7IGkgPCBhbGlnbmVkX2xlbjsgaSArPSA0LCBidWYgKz0gNCwgYWxpZ25lZF9hZGRyICs9IDQpCi0JCSoodTMyICopIGJ1ZiA9IGlwd19yZWFkMzIocHJpdiwgQ1gyX0FVVE9JTkNfREFUQSk7CisJX2lwd193cml0ZTMyKHByaXYsIElQV19BVVRPSU5DX0FERFIsIGFsaWduZWRfYWRkcik7CisJZm9yICg7IG51bSA+PSA0OyBidWYgKz0gNCwgYWxpZ25lZF9hZGRyICs9IDQsIG51bSAtPSA0KQorCQkqKHUzMiAqKSBidWYgPSBfaXB3X3JlYWQzMihwcml2LCBJUFdfQVVUT0lOQ19EQVRBKTsKIAogCS8qIENvcHkgdGhlIGxhc3QgbmliYmxlICovCi0JZGlmX2xlbiA9IG51bSAtIGFsaWduZWRfbGVuOwotCV9pcHdfd3JpdGUzMihwcml2LCBDWDJfSU5ESVJFQ1RfQUREUiwgYWxpZ25lZF9hZGRyKTsKLQlmb3IgKGkgPSAwOyBpIDwgZGlmX2xlbjsgaSsrLCBidWYrKykKLQkJKmJ1ZiA9IGlwd19yZWFkOChwcml2LCBDWDJfSU5ESVJFQ1RfREFUQSArIGkpOworCWlmICh1bmxpa2VseShudW0pKSB7CisJCV9pcHdfd3JpdGUzMihwcml2LCBJUFdfSU5ESVJFQ1RfQUREUiwgYWxpZ25lZF9hZGRyKTsKKwkJZm9yIChpID0gMDsgbnVtID4gMDsgaSsrLCBudW0tLSkKKwkJCSpidWYrKyA9IGlwd19yZWFkOChwcml2LCBJUFdfSU5ESVJFQ1RfREFUQSArIGkpOworCX0KIH0KIAogc3RhdGljIHZvaWQgX2lwd193cml0ZV9pbmRpcmVjdChzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsIHUzMiBhZGRyLCB1OCAqIGJ1ZiwKIAkJCQlpbnQgbnVtKQogewotCXUzMiBhbGlnbmVkX2FkZHIgPSBhZGRyICYgQ1gyX0lORElSRUNUX0FERFJfTUFTSzsKKwl1MzIgYWxpZ25lZF9hZGRyID0gYWRkciAmIElQV19JTkRJUkVDVF9BRERSX01BU0s7CiAJdTMyIGRpZl9sZW4gPSBhZGRyIC0gYWxpZ25lZF9hZGRyOwotCXUzMiBhbGlnbmVkX2xlbjsKIAl1MzIgaTsKIAogCUlQV19ERUJVR19JTygiYWRkciA9ICVpLCBidWYgPSAlcCwgbnVtID0gJWlcbiIsIGFkZHIsIGJ1ZiwgbnVtKTsKIAorCWlmIChudW0gPD0gMCkgeworCQlyZXR1cm47CisJfQorCiAJLyogV3JpdGUgdGhlIGZpcnN0IG5pYmJsZSBieXRlIGJ5IGJ5dGUgKi8KIAlpZiAodW5saWtlbHkoZGlmX2xlbikpIHsKLQkJLyogU3RhcnQgd3JpdGluZyBhdCBhbGlnbmVkX2FkZHIgKyBkaWZfbGVuICovCi0JCV9pcHdfd3JpdGUzMihwcml2LCBDWDJfSU5ESVJFQ1RfQUREUiwgYWxpZ25lZF9hZGRyKTsKLQkJZm9yIChpID0gZGlmX2xlbjsgaSA8IDQ7IGkrKywgYnVmKyspCi0JCQlfaXB3X3dyaXRlOChwcml2LCBDWDJfSU5ESVJFQ1RfREFUQSArIGksICpidWYpOwotCQludW0gLT0gZGlmX2xlbjsKKwkJX2lwd193cml0ZTMyKHByaXYsIElQV19JTkRJUkVDVF9BRERSLCBhbGlnbmVkX2FkZHIpOworCQkvKiBTdGFydCByZWFkaW5nIGF0IGFsaWduZWRfYWRkciArIGRpZl9sZW4gKi8KKwkJZm9yIChpID0gZGlmX2xlbjsgKChpIDwgNCkgJiYgKG51bSA+IDApKTsgaSsrLCBudW0tLSwgYnVmKyspCisJCQlfaXB3X3dyaXRlOChwcml2LCBJUFdfSU5ESVJFQ1RfREFUQSArIGksICpidWYpOwogCQlhbGlnbmVkX2FkZHIgKz0gNDsKIAl9CiAKLQkvKiBXcml0ZSBEV3MgdGhyb3VnaCBhdXRvaW5jIHJlZ2lzdGVyICovCi0JX2lwd193cml0ZTMyKHByaXYsIENYMl9BVVRPSU5DX0FERFIsIGFsaWduZWRfYWRkcik7Ci0JYWxpZ25lZF9sZW4gPSBudW0gJiBDWDJfSU5ESVJFQ1RfQUREUl9NQVNLOwotCWZvciAoaSA9IDA7IGkgPCBhbGlnbmVkX2xlbjsgaSArPSA0LCBidWYgKz0gNCwgYWxpZ25lZF9hZGRyICs9IDQpCi0JCV9pcHdfd3JpdGUzMihwcml2LCBDWDJfQVVUT0lOQ19EQVRBLCAqKHUzMiAqKSBidWYpOworCV9pcHdfd3JpdGUzMihwcml2LCBJUFdfQVVUT0lOQ19BRERSLCBhbGlnbmVkX2FkZHIpOworCWZvciAoOyBudW0gPj0gNDsgYnVmICs9IDQsIGFsaWduZWRfYWRkciArPSA0LCBudW0gLT0gNCkKKwkJX2lwd193cml0ZTMyKHByaXYsIElQV19BVVRPSU5DX0RBVEEsICoodTMyICopIGJ1Zik7CiAKIAkvKiBDb3B5IHRoZSBsYXN0IG5pYmJsZSAqLwotCWRpZl9sZW4gPSBudW0gLSBhbGlnbmVkX2xlbjsKLQlfaXB3X3dyaXRlMzIocHJpdiwgQ1gyX0lORElSRUNUX0FERFIsIGFsaWduZWRfYWRkcik7Ci0JZm9yIChpID0gMDsgaSA8IGRpZl9sZW47IGkrKywgYnVmKyspCi0JCV9pcHdfd3JpdGU4KHByaXYsIENYMl9JTkRJUkVDVF9EQVRBICsgaSwgKmJ1Zik7CisJaWYgKHVubGlrZWx5KG51bSkpIHsKKwkJX2lwd193cml0ZTMyKHByaXYsIElQV19JTkRJUkVDVF9BRERSLCBhbGlnbmVkX2FkZHIpOworCQlmb3IgKGkgPSAwOyBudW0gPiAwOyBpKyssIG51bS0tLCBidWYrKykKKwkJCV9pcHdfd3JpdGU4KHByaXYsIElQV19JTkRJUkVDVF9EQVRBICsgaSwgKmJ1Zik7CisJfQogfQogCiBzdGF0aWMgdm9pZCBpcHdfd3JpdGVfZGlyZWN0KHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwgdTMyIGFkZHIsIHZvaWQgKmJ1ZiwKQEAgLTM3MSw3ICs0NTEsNyBAQAogCWlmIChwcml2LT5zdGF0dXMgJiBTVEFUVVNfSU5UX0VOQUJMRUQpCiAJCXJldHVybjsKIAlwcml2LT5zdGF0dXMgfD0gU1RBVFVTX0lOVF9FTkFCTEVEOwotCWlwd193cml0ZTMyKHByaXYsIENYMl9JTlRBX01BU0tfUiwgQ1gyX0lOVEFfTUFTS19BTEwpOworCWlwd193cml0ZTMyKHByaXYsIElQV19JTlRBX01BU0tfUiwgSVBXX0lOVEFfTUFTS19BTEwpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgaXB3X2Rpc2FibGVfaW50ZXJydXB0cyhzdHJ1Y3QgaXB3X3ByaXYgKnByaXYpCkBAIC0zNzksOSArNDU5LDEwIEBACiAJaWYgKCEocHJpdi0+c3RhdHVzICYgU1RBVFVTX0lOVF9FTkFCTEVEKSkKIAkJcmV0dXJuOwogCXByaXYtPnN0YXR1cyAmPSB+U1RBVFVTX0lOVF9FTkFCTEVEOwotCWlwd193cml0ZTMyKHByaXYsIENYMl9JTlRBX01BU0tfUiwgfkNYMl9JTlRBX01BU0tfQUxMKTsKKwlpcHdfd3JpdGUzMihwcml2LCBJUFdfSU5UQV9NQVNLX1IsIH5JUFdfSU5UQV9NQVNLX0FMTCk7CiB9CiAKKyNpZmRlZiBDT05GSUdfSVBXX0RFQlVHCiBzdGF0aWMgY2hhciAqaXB3X2Vycm9yX2Rlc2ModTMyIHZhbCkKIHsKIAlzd2l0Y2ggKHZhbCkgewpAQCAtMzk0LDgxICs0NzUsNjUgQEAKIAljYXNlIElQV19GV19FUlJPUl9NRU1PUllfT1ZFUkZMT1c6CiAJCXJldHVybiAiTUVNT1JZX09WRVJGTE9XIjsKIAljYXNlIElQV19GV19FUlJPUl9CQURfUEFSQU06Ci0JCXJldHVybiAiRVJST1JfQkFEX1BBUkFNIjsKKwkJcmV0dXJuICJCQURfUEFSQU0iOwogCWNhc2UgSVBXX0ZXX0VSUk9SX0JBRF9DSEVDS1NVTToKLQkJcmV0dXJuICJFUlJPUl9CQURfQ0hFQ0tTVU0iOworCQlyZXR1cm4gIkJBRF9DSEVDS1NVTSI7CiAJY2FzZSBJUFdfRldfRVJST1JfTk1JX0lOVEVSUlVQVDoKLQkJcmV0dXJuICJFUlJPUl9OTUlfSU5URVJSVVBUIjsKKwkJcmV0dXJuICJOTUlfSU5URVJSVVBUIjsKIAljYXNlIElQV19GV19FUlJPUl9CQURfREFUQUJBU0U6Ci0JCXJldHVybiAiRVJST1JfQkFEX0RBVEFCQVNFIjsKKwkJcmV0dXJuICJCQURfREFUQUJBU0UiOwogCWNhc2UgSVBXX0ZXX0VSUk9SX0FMTE9DX0ZBSUw6Ci0JCXJldHVybiAiRVJST1JfQUxMT0NfRkFJTCI7CisJCXJldHVybiAiQUxMT0NfRkFJTCI7CiAJY2FzZSBJUFdfRldfRVJST1JfRE1BX1VOREVSUlVOOgotCQlyZXR1cm4gIkVSUk9SX0RNQV9VTkRFUlJVTiI7CisJCXJldHVybiAiRE1BX1VOREVSUlVOIjsKIAljYXNlIElQV19GV19FUlJPUl9ETUFfU1RBVFVTOgotCQlyZXR1cm4gIkVSUk9SX0RNQV9TVEFUVVMiOwotCWNhc2UgSVBXX0ZXX0VSUk9SX0RJTk9TVEFUVVNfRVJST1I6Ci0JCXJldHVybiAiRVJST1JfRElOT1NUQVRVU19FUlJPUiI7Ci0JY2FzZSBJUFdfRldfRVJST1JfRUVQUk9NU1RBVFVTX0VSUk9SOgotCQlyZXR1cm4gIkVSUk9SX0VFUFJPTVNUQVRVU19FUlJPUiI7CisJCXJldHVybiAiRE1BX1NUQVRVUyI7CisJY2FzZSBJUFdfRldfRVJST1JfRElOT19FUlJPUjoKKwkJcmV0dXJuICJESU5PX0VSUk9SIjsKKwljYXNlIElQV19GV19FUlJPUl9FRVBST01fRVJST1I6CisJCXJldHVybiAiRUVQUk9NX0VSUk9SIjsKIAljYXNlIElQV19GV19FUlJPUl9TWVNBU1NFUlQ6Ci0JCXJldHVybiAiRVJST1JfU1lTQVNTRVJUIjsKKwkJcmV0dXJuICJTWVNBU1NFUlQiOwogCWNhc2UgSVBXX0ZXX0VSUk9SX0ZBVEFMX0VSUk9SOgotCQlyZXR1cm4gIkVSUk9SX0ZBVEFMU1RBVFVTX0VSUk9SIjsKKwkJcmV0dXJuICJGQVRBTF9FUlJPUiI7CiAJZGVmYXVsdDoKLQkJcmV0dXJuICJVTktOT1dOU1RBVFVTX0VSUk9SIjsKKwkJcmV0dXJuICJVTktOT1dOX0VSUk9SIjsKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGlwd19kdW1wX25pY19lcnJvcl9sb2coc3RydWN0IGlwd19wcml2ICpwcml2KQorc3RhdGljIHZvaWQgaXB3X2R1bXBfZXJyb3JfbG9nKHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwKKwkJCSAgICAgICBzdHJ1Y3QgaXB3X2Z3X2Vycm9yICplcnJvcikKIHsKLQl1MzIgZGVzYywgdGltZSwgYmxpbmsxLCBibGluazIsIGlsaW5rMSwgaWxpbmsyLCBpZGF0YSwgaSwgY291bnQsIGJhc2U7CisJdTMyIGk7CiAKLQliYXNlID0gaXB3X3JlYWQzMihwcml2LCBJUFdTVEFUVVNfRVJST1JfTE9HKTsKLQljb3VudCA9IGlwd19yZWFkX3JlZzMyKHByaXYsIGJhc2UpOwotCi0JaWYgKEVSUk9SX1NUQVJUX09GRlNFVCA8PSBjb3VudCAqIEVSUk9SX0VMRU1fU0laRSkgewotCQlJUFdfRVJST1IoIlN0YXJ0IElQVyBFcnJvciBMb2cgRHVtcDpcbiIpOwotCQlJUFdfRVJST1IoIlN0YXR1czogMHglMDhYLCBDb25maWc6ICUwOFhcbiIsCi0JCQkgIHByaXYtPnN0YXR1cywgcHJpdi0+Y29uZmlnKTsKKwlpZiAoIWVycm9yKSB7CisJCUlQV19FUlJPUigiRXJyb3IgYWxsb2NhdGluZyBhbmQgY2FwdHVyaW5nIGVycm9yIGxvZy4gICIKKwkJCSAgIk5vdGhpbmcgdG8gZHVtcC5cbiIpOworCQlyZXR1cm47CiAJfQogCi0JZm9yIChpID0gRVJST1JfU1RBUlRfT0ZGU0VUOwotCSAgICAgaSA8PSBjb3VudCAqIEVSUk9SX0VMRU1fU0laRTsgaSArPSBFUlJPUl9FTEVNX1NJWkUpIHsKLQkJZGVzYyA9IGlwd19yZWFkX3JlZzMyKHByaXYsIGJhc2UgKyBpKTsKLQkJdGltZSA9IGlwd19yZWFkX3JlZzMyKHByaXYsIGJhc2UgKyBpICsgMSAqIHNpemVvZih1MzIpKTsKLQkJYmxpbmsxID0gaXB3X3JlYWRfcmVnMzIocHJpdiwgYmFzZSArIGkgKyAyICogc2l6ZW9mKHUzMikpOwotCQlibGluazIgPSBpcHdfcmVhZF9yZWczMihwcml2LCBiYXNlICsgaSArIDMgKiBzaXplb2YodTMyKSk7Ci0JCWlsaW5rMSA9IGlwd19yZWFkX3JlZzMyKHByaXYsIGJhc2UgKyBpICsgNCAqIHNpemVvZih1MzIpKTsKLQkJaWxpbmsyID0gaXB3X3JlYWRfcmVnMzIocHJpdiwgYmFzZSArIGkgKyA1ICogc2l6ZW9mKHUzMikpOwotCQlpZGF0YSA9IGlwd19yZWFkX3JlZzMyKHByaXYsIGJhc2UgKyBpICsgNiAqIHNpemVvZih1MzIpKTsKKwlJUFdfRVJST1IoIlN0YXJ0IElQVyBFcnJvciBMb2cgRHVtcDpcbiIpOworCUlQV19FUlJPUigiU3RhdHVzOiAweCUwOFgsIENvbmZpZzogJTA4WFxuIiwKKwkJICBlcnJvci0+c3RhdHVzLCBlcnJvci0+Y29uZmlnKTsKIAorCWZvciAoaSA9IDA7IGkgPCBlcnJvci0+ZWxlbV9sZW47IGkrKykKIAkJSVBXX0VSUk9SKCIlcyAlaSAweCUwOHggIDB4JTA4eCAgMHglMDh4ICAweCUwOHggIDB4JTA4eFxuIiwKLQkJCSAgaXB3X2Vycm9yX2Rlc2MoZGVzYyksIHRpbWUsIGJsaW5rMSwgYmxpbmsyLAotCQkJICBpbGluazEsIGlsaW5rMiwgaWRhdGEpOwotCX0KKwkJCSAgaXB3X2Vycm9yX2Rlc2MoZXJyb3ItPmVsZW1baV0uZGVzYyksCisJCQkgIGVycm9yLT5lbGVtW2ldLnRpbWUsCisJCQkgIGVycm9yLT5lbGVtW2ldLmJsaW5rMSwKKwkJCSAgZXJyb3ItPmVsZW1baV0uYmxpbmsyLAorCQkJICBlcnJvci0+ZWxlbVtpXS5saW5rMSwKKwkJCSAgZXJyb3ItPmVsZW1baV0ubGluazIsIGVycm9yLT5lbGVtW2ldLmRhdGEpOworCWZvciAoaSA9IDA7IGkgPCBlcnJvci0+bG9nX2xlbjsgaSsrKQorCQlJUFdfRVJST1IoIiVpXHQweCUwOHhcdCVpXG4iLAorCQkJICBlcnJvci0+bG9nW2ldLnRpbWUsCisJCQkgIGVycm9yLT5sb2dbaV0uZGF0YSwgZXJyb3ItPmxvZ1tpXS5ldmVudCk7CiB9Ci0KLXN0YXRpYyB2b2lkIGlwd19kdW1wX25pY19ldmVudF9sb2coc3RydWN0IGlwd19wcml2ICpwcml2KQotewotCXUzMiBldiwgdGltZSwgZGF0YSwgaSwgY291bnQsIGJhc2U7Ci0KLQliYXNlID0gaXB3X3JlYWQzMihwcml2LCBJUFdfRVZFTlRfTE9HKTsKLQljb3VudCA9IGlwd19yZWFkX3JlZzMyKHByaXYsIGJhc2UpOwotCi0JaWYgKEVWRU5UX1NUQVJUX09GRlNFVCA8PSBjb3VudCAqIEVWRU5UX0VMRU1fU0laRSkKLQkJSVBXX0VSUk9SKCJTdGFydCBJUFcgRXZlbnQgTG9nIER1bXA6XG4iKTsKLQotCWZvciAoaSA9IEVWRU5UX1NUQVJUX09GRlNFVDsKLQkgICAgIGkgPD0gY291bnQgKiBFVkVOVF9FTEVNX1NJWkU7IGkgKz0gRVZFTlRfRUxFTV9TSVpFKSB7Ci0JCWV2ID0gaXB3X3JlYWRfcmVnMzIocHJpdiwgYmFzZSArIGkpOwotCQl0aW1lID0gaXB3X3JlYWRfcmVnMzIocHJpdiwgYmFzZSArIGkgKyAxICogc2l6ZW9mKHUzMikpOwotCQlkYXRhID0gaXB3X3JlYWRfcmVnMzIocHJpdiwgYmFzZSArIGkgKyAyICogc2l6ZW9mKHUzMikpOwotCi0jaWZkZWYgQ09ORklHX0lQV19ERUJVRwotCQlJUFdfRVJST1IoIiVpXHQweCUwOHhcdCVpXG4iLCB0aW1lLCBkYXRhLCBldik7CiAjZW5kaWYKLQl9CisKK3N0YXRpYyBpbmxpbmUgaW50IGlwd19pc19pbml0KHN0cnVjdCBpcHdfcHJpdiAqcHJpdikKK3sKKwlyZXR1cm4gKHByaXYtPnN0YXR1cyAmIFNUQVRVU19JTklUKSA/IDEgOiAwOwogfQogCiBzdGF0aWMgaW50IGlwd19nZXRfb3JkaW5hbChzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsIHUzMiBvcmQsIHZvaWQgKnZhbCwgdTMyICogbGVuKQpAQCAtNjM2LDYgKzcwMSwzNDAgQEAKIAogfQogCit1MzIgaXB3X3JlZ2lzdGVyX3RvZ2dsZSh1MzIgcmVnKQoreworCXJlZyAmPSB+SVBXX1NUQVJUX1NUQU5EQlk7CisJaWYgKHJlZyAmIElQV19HQVRFX09ETUEpCisJCXJlZyAmPSB+SVBXX0dBVEVfT0RNQTsKKwlpZiAocmVnICYgSVBXX0dBVEVfSURNQSkKKwkJcmVnICY9IH5JUFdfR0FURV9JRE1BOworCWlmIChyZWcgJiBJUFdfR0FURV9BRE1BKQorCQlyZWcgJj0gfklQV19HQVRFX0FETUE7CisJcmV0dXJuIHJlZzsKK30KKworLyoKKyAqIExFRCBiZWhhdmlvcjoKKyAqIC0gT24gcmFkaW8gT04sIHR1cm4gb24gYW55IExFRHMgdGhhdCByZXF1aXJlIHRvIGJlIG9uIGR1cmluZyBzdGFydAorICogLSBPbiBpbml0aWFsaXphdGlvbiwgc3RhcnQgdW5hc3NvY2lhdGVkIGJsaW5rCisgKiAtIE9uIGFzc29jaWF0aW9uLCBkaXNhYmxlIHVuYXNzb2NpYXRlZCBibGluaworICogLSBPbiBkaXNhc3NvY2lhdGlvbiwgc3RhcnQgdW5hc3NvY2lhdGVkIGJsaW5rCisgKiAtIE9uIHJhZGlvIE9GRiwgdHVybiBvZmYgYW55IExFRHMgc3RhcnRlZCBkdXJpbmcgcmFkaW8gb24KKyAqCisgKi8KKyNkZWZpbmUgTERfVElNRV9MSU5LX09OIDMwMAorI2RlZmluZSBMRF9USU1FX0xJTktfT0ZGIDI3MDAKKyNkZWZpbmUgTERfVElNRV9BQ1RfT04gMjUwCisKK3ZvaWQgaXB3X2xlZF9saW5rX29uKHN0cnVjdCBpcHdfcHJpdiAqcHJpdikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiBsZWQ7CisKKwkvKiBJZiBjb25maWd1cmVkIHRvIG5vdCB1c2UgTEVEcywgb3IgbmljX3R5cGUgaXMgMSwKKwkgKiB0aGVuIHdlIGRvbid0IHRvZ2dsZSBhIExJTksgbGVkICovCisJaWYgKHByaXYtPmNvbmZpZyAmIENGR19OT19MRUQgfHwgcHJpdi0+bmljX3R5cGUgPT0gRUVQUk9NX05JQ19UWVBFXzEpCisJCXJldHVybjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlpZiAoIShwcml2LT5zdGF0dXMgJiBTVEFUVVNfUkZfS0lMTF9NQVNLKSAmJgorCSAgICAhKHByaXYtPnN0YXR1cyAmIFNUQVRVU19MRURfTElOS19PTikpIHsKKwkJSVBXX0RFQlVHX0xFRCgiTGluayBMRUQgT25cbiIpOworCQlsZWQgPSBpcHdfcmVhZF9yZWczMihwcml2LCBJUFdfRVZFTlRfUkVHKTsKKwkJbGVkIHw9IHByaXYtPmxlZF9hc3NvY2lhdGlvbl9vbjsKKworCQlsZWQgPSBpcHdfcmVnaXN0ZXJfdG9nZ2xlKGxlZCk7CisKKwkJSVBXX0RFQlVHX0xFRCgiUmVnOiAweCUwOFhcbiIsIGxlZCk7CisJCWlwd193cml0ZV9yZWczMihwcml2LCBJUFdfRVZFTlRfUkVHLCBsZWQpOworCisJCXByaXYtPnN0YXR1cyB8PSBTVEFUVVNfTEVEX0xJTktfT047CisKKwkJLyogSWYgd2UgYXJlbid0IGFzc29jaWF0ZWQsIHNjaGVkdWxlIHR1cm5pbmcgdGhlIExFRCBvZmYgKi8KKwkJaWYgKCEocHJpdi0+c3RhdHVzICYgU1RBVFVTX0FTU09DSUFURUQpKQorCQkJcXVldWVfZGVsYXllZF93b3JrKHByaXYtPndvcmtxdWV1ZSwKKwkJCQkJICAgJnByaXYtPmxlZF9saW5rX29mZiwKKwkJCQkJICAgTERfVElNRV9MSU5LX09OKTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIGlwd19iZ19sZWRfbGlua19vbih2b2lkICpkYXRhKQoreworCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGRhdGE7CisJZG93bigmcHJpdi0+c2VtKTsKKwlpcHdfbGVkX2xpbmtfb24oZGF0YSk7CisJdXAoJnByaXYtPnNlbSk7Cit9CisKK3ZvaWQgaXB3X2xlZF9saW5rX29mZihzdHJ1Y3QgaXB3X3ByaXYgKnByaXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgbGVkOworCisJLyogSWYgY29uZmlndXJlZCBub3QgdG8gdXNlIExFRHMsIG9yIG5pYyB0eXBlIGlzIDEsCisJICogdGhlbiB3ZSBkb24ndCBnb2dnbGUgdGhlIExJTksgbGVkLiAqLworCWlmIChwcml2LT5jb25maWcgJiBDRkdfTk9fTEVEIHx8IHByaXYtPm5pY190eXBlID09IEVFUFJPTV9OSUNfVFlQRV8xKQorCQlyZXR1cm47CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJaWYgKHByaXYtPnN0YXR1cyAmIFNUQVRVU19MRURfTElOS19PTikgeworCQlsZWQgPSBpcHdfcmVhZF9yZWczMihwcml2LCBJUFdfRVZFTlRfUkVHKTsKKwkJbGVkICY9IHByaXYtPmxlZF9hc3NvY2lhdGlvbl9vZmY7CisJCWxlZCA9IGlwd19yZWdpc3Rlcl90b2dnbGUobGVkKTsKKworCQlJUFdfREVCVUdfTEVEKCJSZWc6IDB4JTA4WFxuIiwgbGVkKTsKKwkJaXB3X3dyaXRlX3JlZzMyKHByaXYsIElQV19FVkVOVF9SRUcsIGxlZCk7CisKKwkJSVBXX0RFQlVHX0xFRCgiTGluayBMRUQgT2ZmXG4iKTsKKworCQlwcml2LT5zdGF0dXMgJj0gflNUQVRVU19MRURfTElOS19PTjsKKworCQkvKiBJZiB3ZSBhcmVuJ3QgYXNzb2NpYXRlZCBhbmQgdGhlIHJhZGlvIGlzIG9uLCBzY2hlZHVsZQorCQkgKiB0dXJuaW5nIHRoZSBMRUQgb24gKGJsaW5rIHdoaWxlIHVuYXNzb2NpYXRlZCkgKi8KKwkJaWYgKCEocHJpdi0+c3RhdHVzICYgU1RBVFVTX1JGX0tJTExfTUFTSykgJiYKKwkJICAgICEocHJpdi0+c3RhdHVzICYgU1RBVFVTX0FTU09DSUFURUQpKQorCQkJcXVldWVfZGVsYXllZF93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPmxlZF9saW5rX29uLAorCQkJCQkgICBMRF9USU1FX0xJTktfT0ZGKTsKKworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgaXB3X2JnX2xlZF9saW5rX29mZih2b2lkICpkYXRhKQoreworCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGRhdGE7CisJZG93bigmcHJpdi0+c2VtKTsKKwlpcHdfbGVkX2xpbmtfb2ZmKGRhdGEpOworCXVwKCZwcml2LT5zZW0pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19pcHdfbGVkX2FjdGl2aXR5X29uKHN0cnVjdCBpcHdfcHJpdiAqcHJpdikKK3sKKwl1MzIgbGVkOworCisJaWYgKHByaXYtPmNvbmZpZyAmIENGR19OT19MRUQpCisJCXJldHVybjsKKworCWlmIChwcml2LT5zdGF0dXMgJiBTVEFUVVNfUkZfS0lMTF9NQVNLKQorCQlyZXR1cm47CisKKwlpZiAoIShwcml2LT5zdGF0dXMgJiBTVEFUVVNfTEVEX0FDVF9PTikpIHsKKwkJbGVkID0gaXB3X3JlYWRfcmVnMzIocHJpdiwgSVBXX0VWRU5UX1JFRyk7CisJCWxlZCB8PSBwcml2LT5sZWRfYWN0aXZpdHlfb247CisKKwkJbGVkID0gaXB3X3JlZ2lzdGVyX3RvZ2dsZShsZWQpOworCisJCUlQV19ERUJVR19MRUQoIlJlZzogMHglMDhYXG4iLCBsZWQpOworCQlpcHdfd3JpdGVfcmVnMzIocHJpdiwgSVBXX0VWRU5UX1JFRywgbGVkKTsKKworCQlJUFdfREVCVUdfTEVEKCJBY3Rpdml0eSBMRUQgT25cbiIpOworCisJCXByaXYtPnN0YXR1cyB8PSBTVEFUVVNfTEVEX0FDVF9PTjsKKworCQljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT5sZWRfYWN0X29mZik7CisJCXF1ZXVlX2RlbGF5ZWRfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5sZWRfYWN0X29mZiwKKwkJCQkgICBMRF9USU1FX0FDVF9PTik7CisJfSBlbHNlIHsKKwkJLyogUmVzY2hlZHVsZSBMRUQgb2ZmIGZvciBmdWxsIHRpbWUgcGVyaW9kICovCisJCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPmxlZF9hY3Rfb2ZmKTsKKwkJcXVldWVfZGVsYXllZF93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPmxlZF9hY3Rfb2ZmLAorCQkJCSAgIExEX1RJTUVfQUNUX09OKTsKKwl9Cit9CisKK3ZvaWQgaXB3X2xlZF9hY3Rpdml0eV9vbihzdHJ1Y3QgaXB3X3ByaXYgKnByaXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCV9faXB3X2xlZF9hY3Rpdml0eV9vbihwcml2KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Cit9CisKK3ZvaWQgaXB3X2xlZF9hY3Rpdml0eV9vZmYoc3RydWN0IGlwd19wcml2ICpwcml2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIGxlZDsKKworCWlmIChwcml2LT5jb25maWcgJiBDRkdfTk9fTEVEKQorCQlyZXR1cm47CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJaWYgKHByaXYtPnN0YXR1cyAmIFNUQVRVU19MRURfQUNUX09OKSB7CisJCWxlZCA9IGlwd19yZWFkX3JlZzMyKHByaXYsIElQV19FVkVOVF9SRUcpOworCQlsZWQgJj0gcHJpdi0+bGVkX2FjdGl2aXR5X29mZjsKKworCQlsZWQgPSBpcHdfcmVnaXN0ZXJfdG9nZ2xlKGxlZCk7CisKKwkJSVBXX0RFQlVHX0xFRCgiUmVnOiAweCUwOFhcbiIsIGxlZCk7CisJCWlwd193cml0ZV9yZWczMihwcml2LCBJUFdfRVZFTlRfUkVHLCBsZWQpOworCisJCUlQV19ERUJVR19MRUQoIkFjdGl2aXR5IExFRCBPZmZcbiIpOworCisJCXByaXYtPnN0YXR1cyAmPSB+U1RBVFVTX0xFRF9BQ1RfT047CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBpcHdfYmdfbGVkX2FjdGl2aXR5X29mZih2b2lkICpkYXRhKQoreworCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGRhdGE7CisJZG93bigmcHJpdi0+c2VtKTsKKwlpcHdfbGVkX2FjdGl2aXR5X29mZihkYXRhKTsKKwl1cCgmcHJpdi0+c2VtKTsKK30KKwordm9pZCBpcHdfbGVkX2JhbmRfb24oc3RydWN0IGlwd19wcml2ICpwcml2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIGxlZDsKKworCS8qIE9ubHkgbmljIHR5cGUgMSBzdXBwb3J0cyBtb2RlIExFRHMgKi8KKwlpZiAocHJpdi0+Y29uZmlnICYgQ0ZHX05PX0xFRCB8fAorCSAgICBwcml2LT5uaWNfdHlwZSAhPSBFRVBST01fTklDX1RZUEVfMSB8fCAhcHJpdi0+YXNzb2NfbmV0d29yaykKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCWxlZCA9IGlwd19yZWFkX3JlZzMyKHByaXYsIElQV19FVkVOVF9SRUcpOworCWlmIChwcml2LT5hc3NvY19uZXR3b3JrLT5tb2RlID09IElFRUVfQSkgeworCQlsZWQgfD0gcHJpdi0+bGVkX29mZG1fb247CisJCWxlZCAmPSBwcml2LT5sZWRfYXNzb2NpYXRpb25fb2ZmOworCQlJUFdfREVCVUdfTEVEKCJNb2RlIExFRCBPbjogODAyLjExYVxuIik7CisJfSBlbHNlIGlmIChwcml2LT5hc3NvY19uZXR3b3JrLT5tb2RlID09IElFRUVfRykgeworCQlsZWQgfD0gcHJpdi0+bGVkX29mZG1fb247CisJCWxlZCB8PSBwcml2LT5sZWRfYXNzb2NpYXRpb25fb247CisJCUlQV19ERUJVR19MRUQoIk1vZGUgTEVEIE9uOiA4MDIuMTFnXG4iKTsKKwl9IGVsc2UgeworCQlsZWQgJj0gcHJpdi0+bGVkX29mZG1fb2ZmOworCQlsZWQgfD0gcHJpdi0+bGVkX2Fzc29jaWF0aW9uX29uOworCQlJUFdfREVCVUdfTEVEKCJNb2RlIExFRCBPbjogODAyLjExYlxuIik7CisJfQorCisJbGVkID0gaXB3X3JlZ2lzdGVyX3RvZ2dsZShsZWQpOworCisJSVBXX0RFQlVHX0xFRCgiUmVnOiAweCUwOFhcbiIsIGxlZCk7CisJaXB3X3dyaXRlX3JlZzMyKHByaXYsIElQV19FVkVOVF9SRUcsIGxlZCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Cit9CisKK3ZvaWQgaXB3X2xlZF9iYW5kX29mZihzdHJ1Y3QgaXB3X3ByaXYgKnByaXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgbGVkOworCisJLyogT25seSBuaWMgdHlwZSAxIHN1cHBvcnRzIG1vZGUgTEVEcyAqLworCWlmIChwcml2LT5jb25maWcgJiBDRkdfTk9fTEVEIHx8IHByaXYtPm5pY190eXBlICE9IEVFUFJPTV9OSUNfVFlQRV8xKQorCQlyZXR1cm47CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJbGVkID0gaXB3X3JlYWRfcmVnMzIocHJpdiwgSVBXX0VWRU5UX1JFRyk7CisJbGVkICY9IHByaXYtPmxlZF9vZmRtX29mZjsKKwlsZWQgJj0gcHJpdi0+bGVkX2Fzc29jaWF0aW9uX29mZjsKKworCWxlZCA9IGlwd19yZWdpc3Rlcl90b2dnbGUobGVkKTsKKworCUlQV19ERUJVR19MRUQoIlJlZzogMHglMDhYXG4iLCBsZWQpOworCWlwd193cml0ZV9yZWczMihwcml2LCBJUFdfRVZFTlRfUkVHLCBsZWQpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworfQorCit2b2lkIGlwd19sZWRfcmFkaW9fb24oc3RydWN0IGlwd19wcml2ICpwcml2KQoreworCWlwd19sZWRfbGlua19vbihwcml2KTsKK30KKwordm9pZCBpcHdfbGVkX3JhZGlvX29mZihzdHJ1Y3QgaXB3X3ByaXYgKnByaXYpCit7CisJaXB3X2xlZF9hY3Rpdml0eV9vZmYocHJpdik7CisJaXB3X2xlZF9saW5rX29mZihwcml2KTsKK30KKwordm9pZCBpcHdfbGVkX2xpbmtfdXAoc3RydWN0IGlwd19wcml2ICpwcml2KQoreworCS8qIFNldCB0aGUgTGluayBMZWQgb24gZm9yIGFsbCBuaWMgdHlwZXMgKi8KKwlpcHdfbGVkX2xpbmtfb24ocHJpdik7Cit9CisKK3ZvaWQgaXB3X2xlZF9saW5rX2Rvd24oc3RydWN0IGlwd19wcml2ICpwcml2KQoreworCWlwd19sZWRfYWN0aXZpdHlfb2ZmKHByaXYpOworCWlwd19sZWRfbGlua19vZmYocHJpdik7CisKKwlpZiAocHJpdi0+c3RhdHVzICYgU1RBVFVTX1JGX0tJTExfTUFTSykKKwkJaXB3X2xlZF9yYWRpb19vZmYocHJpdik7Cit9CisKK3ZvaWQgaXB3X2xlZF9pbml0KHN0cnVjdCBpcHdfcHJpdiAqcHJpdikKK3sKKwlwcml2LT5uaWNfdHlwZSA9IHByaXYtPmVlcHJvbVtFRVBST01fTklDX1RZUEVdOworCisJLyogU2V0IHRoZSBkZWZhdWx0IFBJTnMgZm9yIHRoZSBsaW5rIGFuZCBhY3Rpdml0eSBsZWRzICovCisJcHJpdi0+bGVkX2FjdGl2aXR5X29uID0gSVBXX0FDVElWSVRZX0xFRDsKKwlwcml2LT5sZWRfYWN0aXZpdHlfb2ZmID0gfihJUFdfQUNUSVZJVFlfTEVEKTsKKworCXByaXYtPmxlZF9hc3NvY2lhdGlvbl9vbiA9IElQV19BU1NPQ0lBVEVEX0xFRDsKKwlwcml2LT5sZWRfYXNzb2NpYXRpb25fb2ZmID0gfihJUFdfQVNTT0NJQVRFRF9MRUQpOworCisJLyogU2V0IHRoZSBkZWZhdWx0IFBJTnMgZm9yIHRoZSBPRkRNIGxlZHMgKi8KKwlwcml2LT5sZWRfb2ZkbV9vbiA9IElQV19PRkRNX0xFRDsKKwlwcml2LT5sZWRfb2ZkbV9vZmYgPSB+KElQV19PRkRNX0xFRCk7CisKKwlzd2l0Y2ggKHByaXYtPm5pY190eXBlKSB7CisJY2FzZSBFRVBST01fTklDX1RZUEVfMToKKwkJLyogSW4gdGhpcyBOSUMgdHlwZSwgdGhlIExFRHMgYXJlIHJldmVyc2VkLi4uLiAqLworCQlwcml2LT5sZWRfYWN0aXZpdHlfb24gPSBJUFdfQVNTT0NJQVRFRF9MRUQ7CisJCXByaXYtPmxlZF9hY3Rpdml0eV9vZmYgPSB+KElQV19BU1NPQ0lBVEVEX0xFRCk7CisJCXByaXYtPmxlZF9hc3NvY2lhdGlvbl9vbiA9IElQV19BQ1RJVklUWV9MRUQ7CisJCXByaXYtPmxlZF9hc3NvY2lhdGlvbl9vZmYgPSB+KElQV19BQ1RJVklUWV9MRUQpOworCisJCWlmICghKHByaXYtPmNvbmZpZyAmIENGR19OT19MRUQpKQorCQkJaXB3X2xlZF9iYW5kX29uKHByaXYpOworCisJCS8qIEFuZCB3ZSBkb24ndCBibGluayBsaW5rIExFRHMgZm9yIHRoaXMgbmljLCBzbworCQkgKiBqdXN0IHJldHVybiBoZXJlICovCisJCXJldHVybjsKKworCWNhc2UgRUVQUk9NX05JQ19UWVBFXzM6CisJY2FzZSBFRVBST01fTklDX1RZUEVfMjoKKwljYXNlIEVFUFJPTV9OSUNfVFlQRV80OgorCWNhc2UgRUVQUk9NX05JQ19UWVBFXzA6CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJSVBXX0RFQlVHX0lORk8oIlVua25vd24gTklDIHR5cGUgZnJvbSBFRVBST006ICVkXG4iLAorCQkJICAgICAgIHByaXYtPm5pY190eXBlKTsKKwkJcHJpdi0+bmljX3R5cGUgPSBFRVBST01fTklDX1RZUEVfMDsKKwkJYnJlYWs7CisJfQorCisJaWYgKCEocHJpdi0+Y29uZmlnICYgQ0ZHX05PX0xFRCkpIHsKKwkJaWYgKHByaXYtPnN0YXR1cyAmIFNUQVRVU19BU1NPQ0lBVEVEKQorCQkJaXB3X2xlZF9saW5rX29uKHByaXYpOworCQllbHNlCisJCQlpcHdfbGVkX2xpbmtfb2ZmKHByaXYpOworCX0KK30KKwordm9pZCBpcHdfbGVkX3NodXRkb3duKHN0cnVjdCBpcHdfcHJpdiAqcHJpdikKK3sKKwlpcHdfbGVkX2FjdGl2aXR5X29mZihwcml2KTsKKwlpcHdfbGVkX2xpbmtfb2ZmKHByaXYpOworCWlwd19sZWRfYmFuZF9vZmYocHJpdik7CisJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+bGVkX2xpbmtfb24pOworCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPmxlZF9saW5rX29mZik7CisJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+bGVkX2FjdF9vZmYpOworfQorCiAvKgogICogVGhlIGZvbGxvd2luZyBhZGRzIGEgbmV3IGF0dHJpYnV0ZSB0byB0aGUgc3lzZnMgcmVwcmVzZW50YXRpb24KICAqIG9mIHRoaXMgZGV2aWNlIGRyaXZlciAoaS5lLiBhIG5ldyBmaWxlIGluIC9zeXMvYnVzL3BjaS9kcml2ZXJzL2lwdy8pCkBAIC02NDcsOCArMTA0Niw5IEBACiB7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiMHglMDhYXG4iLCBpcHdfZGVidWdfbGV2ZWwpOwogfQotc3RhdGljIHNzaXplX3Qgc3RvcmVfZGVidWdfbGV2ZWwoc3RydWN0IGRldmljZV9kcml2ZXIgKmQsCi0JCQkJIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQorCitzdGF0aWMgc3NpemVfdCBzdG9yZV9kZWJ1Z19sZXZlbChzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZCwgY29uc3QgY2hhciAqYnVmLAorCQkJCSBzaXplX3QgY291bnQpCiB7CiAJY2hhciAqcCA9IChjaGFyICopYnVmOwogCXUzMiB2YWw7CkBAIC02NzIsNiArMTA3MiwyMzcgQEAKIHN0YXRpYyBEUklWRVJfQVRUUihkZWJ1Z19sZXZlbCwgU19JV1VTUiB8IFNfSVJVR08sCiAJCSAgIHNob3dfZGVidWdfbGV2ZWwsIHN0b3JlX2RlYnVnX2xldmVsKTsKIAorc3RhdGljIGlubGluZSB1MzIgaXB3X2dldF9ldmVudF9sb2dfbGVuKHN0cnVjdCBpcHdfcHJpdiAqcHJpdikKK3sKKwlyZXR1cm4gaXB3X3JlYWRfcmVnMzIocHJpdiwgaXB3X3JlYWQzMihwcml2LCBJUFdfRVZFTlRfTE9HKSk7Cit9CisKK3N0YXRpYyB2b2lkIGlwd19jYXB0dXJlX2V2ZW50X2xvZyhzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsCisJCQkJICB1MzIgbG9nX2xlbiwgc3RydWN0IGlwd19ldmVudCAqbG9nKQoreworCXUzMiBiYXNlOworCisJaWYgKGxvZ19sZW4pIHsKKwkJYmFzZSA9IGlwd19yZWFkMzIocHJpdiwgSVBXX0VWRU5UX0xPRyk7CisJCWlwd19yZWFkX2luZGlyZWN0KHByaXYsIGJhc2UgKyBzaXplb2YoYmFzZSkgKyBzaXplb2YodTMyKSwKKwkJCQkgICh1OCAqKSBsb2csIHNpemVvZigqbG9nKSAqIGxvZ19sZW4pOworCX0KK30KKworc3RhdGljIHN0cnVjdCBpcHdfZndfZXJyb3IgKmlwd19hbGxvY19lcnJvcl9sb2coc3RydWN0IGlwd19wcml2ICpwcml2KQoreworCXN0cnVjdCBpcHdfZndfZXJyb3IgKmVycm9yOworCXUzMiBsb2dfbGVuID0gaXB3X2dldF9ldmVudF9sb2dfbGVuKHByaXYpOworCXUzMiBiYXNlID0gaXB3X3JlYWQzMihwcml2LCBJUFdfRVJST1JfTE9HKTsKKwl1MzIgZWxlbV9sZW4gPSBpcHdfcmVhZF9yZWczMihwcml2LCBiYXNlKTsKKworCWVycm9yID0ga21hbGxvYyhzaXplb2YoKmVycm9yKSArCisJCQlzaXplb2YoKmVycm9yLT5lbGVtKSAqIGVsZW1fbGVuICsKKwkJCXNpemVvZigqZXJyb3ItPmxvZykgKiBsb2dfbGVuLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWVycm9yKSB7CisJCUlQV19FUlJPUigiTWVtb3J5IGFsbG9jYXRpb24gZm9yIGZpcm13YXJlIGVycm9yIGxvZyAiCisJCQkgICJmYWlsZWQuXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWVycm9yLT5qaWZmaWVzID0gamlmZmllczsKKwllcnJvci0+c3RhdHVzID0gcHJpdi0+c3RhdHVzOworCWVycm9yLT5jb25maWcgPSBwcml2LT5jb25maWc7CisJZXJyb3ItPmVsZW1fbGVuID0gZWxlbV9sZW47CisJZXJyb3ItPmxvZ19sZW4gPSBsb2dfbGVuOworCWVycm9yLT5lbGVtID0gKHN0cnVjdCBpcHdfZXJyb3JfZWxlbSAqKWVycm9yLT5wYXlsb2FkOworCWVycm9yLT5sb2cgPSAoc3RydWN0IGlwd19ldmVudCAqKShlcnJvci0+ZWxlbSArCisJCQkJCSAgKHNpemVvZigqZXJyb3ItPmVsZW0pICogZWxlbV9sZW4pKTsKKworCWlwd19jYXB0dXJlX2V2ZW50X2xvZyhwcml2LCBsb2dfbGVuLCBlcnJvci0+bG9nKTsKKworCWlmIChlbGVtX2xlbikKKwkJaXB3X3JlYWRfaW5kaXJlY3QocHJpdiwgYmFzZSArIHNpemVvZihiYXNlKSwgKHU4ICopIGVycm9yLT5lbGVtLAorCQkJCSAgc2l6ZW9mKCplcnJvci0+ZWxlbSkgKiBlbGVtX2xlbik7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyB2b2lkIGlwd19mcmVlX2Vycm9yX2xvZyhzdHJ1Y3QgaXB3X2Z3X2Vycm9yICplcnJvcikKK3sKKwlpZiAoZXJyb3IpCisJCWtmcmVlKGVycm9yKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19ldmVudF9sb2coc3RydWN0IGRldmljZSAqZCwKKwkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOworCXUzMiBsb2dfbGVuID0gaXB3X2dldF9ldmVudF9sb2dfbGVuKHByaXYpOworCXN0cnVjdCBpcHdfZXZlbnQgbG9nW2xvZ19sZW5dOworCXUzMiBsZW4gPSAwLCBpOworCisJaXB3X2NhcHR1cmVfZXZlbnRfbG9nKHByaXYsIGxvZ19sZW4sIGxvZyk7CisKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sICIlMDhYIiwgbG9nX2xlbik7CisJZm9yIChpID0gMDsgaSA8IGxvZ19sZW47IGkrKykKKwkJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgUEFHRV9TSVpFIC0gbGVuLAorCQkJCSJcbiUwOFglMDhYJTA4WCIsCisJCQkJbG9nW2ldLnRpbWUsIGxvZ1tpXS5ldmVudCwgbG9nW2ldLmRhdGEpOworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIFBBR0VfU0laRSAtIGxlbiwgIlxuIik7CisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIERFVklDRV9BVFRSKGV2ZW50X2xvZywgU19JUlVHTywgc2hvd19ldmVudF9sb2csIE5VTEwpOworCitzdGF0aWMgc3NpemVfdCBzaG93X2Vycm9yKHN0cnVjdCBkZXZpY2UgKmQsCisJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOworCXUzMiBsZW4gPSAwLCBpOworCWlmICghcHJpdi0+ZXJyb3IpCisJCXJldHVybiAwOworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIFBBR0VfU0laRSAtIGxlbiwKKwkJCSIlMDhsWCUwOFglMDhYJTA4WCIsCisJCQlwcml2LT5lcnJvci0+amlmZmllcywKKwkJCXByaXYtPmVycm9yLT5zdGF0dXMsCisJCQlwcml2LT5lcnJvci0+Y29uZmlnLCBwcml2LT5lcnJvci0+ZWxlbV9sZW4pOworCWZvciAoaSA9IDA7IGkgPCBwcml2LT5lcnJvci0+ZWxlbV9sZW47IGkrKykKKwkJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgUEFHRV9TSVpFIC0gbGVuLAorCQkJCSJcbiUwOFglMDhYJTA4WCUwOFglMDhYJTA4WCUwOFgiLAorCQkJCXByaXYtPmVycm9yLT5lbGVtW2ldLnRpbWUsCisJCQkJcHJpdi0+ZXJyb3ItPmVsZW1baV0uZGVzYywKKwkJCQlwcml2LT5lcnJvci0+ZWxlbVtpXS5ibGluazEsCisJCQkJcHJpdi0+ZXJyb3ItPmVsZW1baV0uYmxpbmsyLAorCQkJCXByaXYtPmVycm9yLT5lbGVtW2ldLmxpbmsxLAorCQkJCXByaXYtPmVycm9yLT5lbGVtW2ldLmxpbmsyLAorCQkJCXByaXYtPmVycm9yLT5lbGVtW2ldLmRhdGEpOworCisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgUEFHRV9TSVpFIC0gbGVuLAorCQkJIlxuJTA4WCIsIHByaXYtPmVycm9yLT5sb2dfbGVuKTsKKwlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+ZXJyb3ItPmxvZ19sZW47IGkrKykKKwkJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgUEFHRV9TSVpFIC0gbGVuLAorCQkJCSJcbiUwOFglMDhYJTA4WCIsCisJCQkJcHJpdi0+ZXJyb3ItPmxvZ1tpXS50aW1lLAorCQkJCXByaXYtPmVycm9yLT5sb2dbaV0uZXZlbnQsCisJCQkJcHJpdi0+ZXJyb3ItPmxvZ1tpXS5kYXRhKTsKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sICJcbiIpOworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBzc2l6ZV90IGNsZWFyX2Vycm9yKHN0cnVjdCBkZXZpY2UgKmQsCisJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKKwlpZiAocHJpdi0+ZXJyb3IpIHsKKwkJaXB3X2ZyZWVfZXJyb3JfbG9nKHByaXYtPmVycm9yKTsKKwkJcHJpdi0+ZXJyb3IgPSBOVUxMOworCX0KKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihlcnJvciwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfZXJyb3IsIGNsZWFyX2Vycm9yKTsKKworc3RhdGljIHNzaXplX3Qgc2hvd19jbWRfbG9nKHN0cnVjdCBkZXZpY2UgKmQsCisJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZCk7CisJdTMyIGxlbiA9IDAsIGk7CisJaWYgKCFwcml2LT5jbWRsb2cpCisJCXJldHVybiAwOworCWZvciAoaSA9IChwcml2LT5jbWRsb2dfcG9zICsgMSkgJSBwcml2LT5jbWRsb2dfbGVuOworCSAgICAgKGkgIT0gcHJpdi0+Y21kbG9nX3BvcykgJiYgKFBBR0VfU0laRSAtIGxlbik7CisJICAgICBpID0gKGkgKyAxKSAlIHByaXYtPmNtZGxvZ19sZW4pIHsKKwkJbGVuICs9CisJCSAgICBzbnByaW50ZihidWYgKyBsZW4sIFBBR0VfU0laRSAtIGxlbiwKKwkJCSAgICAgIlxuJTA4bFglMDhYJTA4WCUwOFhcbiIsIHByaXYtPmNtZGxvZ1tpXS5qaWZmaWVzLAorCQkJICAgICBwcml2LT5jbWRsb2dbaV0ucmV0Y29kZSwgcHJpdi0+Y21kbG9nW2ldLmNtZC5jbWQsCisJCQkgICAgIHByaXYtPmNtZGxvZ1tpXS5jbWQubGVuKTsKKwkJbGVuICs9CisJCSAgICBzbnByaW50a19idWYoYnVmICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sCisJCQkJICh1OCAqKSBwcml2LT5jbWRsb2dbaV0uY21kLnBhcmFtLAorCQkJCSBwcml2LT5jbWRsb2dbaV0uY21kLmxlbik7CisJCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIFBBR0VfU0laRSAtIGxlbiwgIlxuIik7CisJfQorCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIFBBR0VfU0laRSAtIGxlbiwgIlxuIik7CisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIERFVklDRV9BVFRSKGNtZF9sb2csIFNfSVJVR08sIHNob3dfY21kX2xvZywgTlVMTCk7CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfc2Nhbl9hZ2Uoc3RydWN0IGRldmljZSAqZCwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZCk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHByaXYtPmllZWUtPnNjYW5fYWdlKTsKK30KKworc3RhdGljIHNzaXplX3Qgc3RvcmVfc2Nhbl9hZ2Uoc3RydWN0IGRldmljZSAqZCwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZCk7CisjaWZkZWYgQ09ORklHX0lQV19ERUJVRworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5uZXRfZGV2OworI2VuZGlmCisJY2hhciBidWZmZXJbXSA9ICIwMDAwMDAwMCI7CisJdW5zaWduZWQgbG9uZyBsZW4gPQorCSAgICAoc2l6ZW9mKGJ1ZmZlcikgLSAxKSA+IGNvdW50ID8gY291bnQgOiBzaXplb2YoYnVmZmVyKSAtIDE7CisJdW5zaWduZWQgbG9uZyB2YWw7CisJY2hhciAqcCA9IGJ1ZmZlcjsKKworCUlQV19ERUJVR19JTkZPKCJlbnRlclxuIik7CisKKwlzdHJuY3B5KGJ1ZmZlciwgYnVmLCBsZW4pOworCWJ1ZmZlcltsZW5dID0gMDsKKworCWlmIChwWzFdID09ICd4JyB8fCBwWzFdID09ICdYJyB8fCBwWzBdID09ICd4JyB8fCBwWzBdID09ICdYJykgeworCQlwKys7CisJCWlmIChwWzBdID09ICd4JyB8fCBwWzBdID09ICdYJykKKwkJCXArKzsKKwkJdmFsID0gc2ltcGxlX3N0cnRvdWwocCwgJnAsIDE2KTsKKwl9IGVsc2UKKwkJdmFsID0gc2ltcGxlX3N0cnRvdWwocCwgJnAsIDEwKTsKKwlpZiAocCA9PSBidWZmZXIpIHsKKwkJSVBXX0RFQlVHX0lORk8oIiVzOiB1c2VyIHN1cHBsaWVkIGludmFsaWQgdmFsdWUuXG4iLCBkZXYtPm5hbWUpOworCX0gZWxzZSB7CisJCXByaXYtPmllZWUtPnNjYW5fYWdlID0gdmFsOworCQlJUFdfREVCVUdfSU5GTygic2V0IHNjYW5fYWdlID0gJXVcbiIsIHByaXYtPmllZWUtPnNjYW5fYWdlKTsKKwl9CisKKwlJUFdfREVCVUdfSU5GTygiZXhpdFxuIik7CisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIERFVklDRV9BVFRSKHNjYW5fYWdlLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19zY2FuX2FnZSwgc3RvcmVfc2Nhbl9hZ2UpOworCitzdGF0aWMgc3NpemVfdCBzaG93X2xlZChzdHJ1Y3QgZGV2aWNlICpkLCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCWNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZCk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIChwcml2LT5jb25maWcgJiBDRkdfTk9fTEVEKSA/IDAgOiAxKTsKK30KKworc3RhdGljIHNzaXplX3Qgc3RvcmVfbGVkKHN0cnVjdCBkZXZpY2UgKmQsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKKworCUlQV19ERUJVR19JTkZPKCJlbnRlclxuIik7CisKKwlpZiAoY291bnQgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoKmJ1ZiA9PSAwKSB7CisJCUlQV19ERUJVR19MRUQoIkRpc2FibGluZyBMRUQgY29udHJvbC5cbiIpOworCQlwcml2LT5jb25maWcgfD0gQ0ZHX05PX0xFRDsKKwkJaXB3X2xlZF9zaHV0ZG93bihwcml2KTsKKwl9IGVsc2UgeworCQlJUFdfREVCVUdfTEVEKCJFbmFibGluZyBMRUQgY29udHJvbC5cbiIpOworCQlwcml2LT5jb25maWcgJj0gfkNGR19OT19MRUQ7CisJCWlwd19sZWRfaW5pdChwcml2KTsKKwl9CisKKwlJUFdfREVCVUdfSU5GTygiZXhpdFxuIik7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgREVWSUNFX0FUVFIobGVkLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19sZWQsIHN0b3JlX2xlZCk7CisKIHN0YXRpYyBzc2l6ZV90IHNob3dfc3RhdHVzKHN0cnVjdCBkZXZpY2UgKmQsCiAJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewpAQCAtNjkzLDU1ICsxMzI0LDEyIEBACiBzdGF0aWMgc3NpemVfdCBzaG93X25pY190eXBlKHN0cnVjdCBkZXZpY2UgKmQsCiAJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IGlwd19wcml2ICpwID0gZC0+ZHJpdmVyX2RhdGE7Ci0JdTggdHlwZSA9IHAtPmVlcHJvbVtFRVBST01fTklDX1RZUEVdOwotCi0Jc3dpdGNoICh0eXBlKSB7Ci0JY2FzZSBFRVBST01fTklDX1RZUEVfU1RBTkRBUkQ6Ci0JCXJldHVybiBzcHJpbnRmKGJ1ZiwgIlNUQU5EQVJEXG4iKTsKLQljYXNlIEVFUFJPTV9OSUNfVFlQRV9ERUxMOgotCQlyZXR1cm4gc3ByaW50ZihidWYsICJERUxMXG4iKTsKLQljYXNlIEVFUFJPTV9OSUNfVFlQRV9GVUpJVFNVOgotCQlyZXR1cm4gc3ByaW50ZihidWYsICJGVUpJVFNVXG4iKTsKLQljYXNlIEVFUFJPTV9OSUNfVFlQRV9JQk06Ci0JCXJldHVybiBzcHJpbnRmKGJ1ZiwgIklCTVxuIik7Ci0JY2FzZSBFRVBST01fTklDX1RZUEVfSFA6Ci0JCXJldHVybiBzcHJpbnRmKGJ1ZiwgIkhQXG4iKTsKLQl9Ci0KLQlyZXR1cm4gc3ByaW50ZihidWYsICJVTktOT1dOXG4iKTsKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBkLT5kcml2ZXJfZGF0YTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICJUWVBFOiAlZFxuIiwgcHJpdi0+bmljX3R5cGUpOwogfQogCiBzdGF0aWMgREVWSUNFX0FUVFIobmljX3R5cGUsIFNfSVJVR08sIHNob3dfbmljX3R5cGUsIE5VTEwpOwogCi1zdGF0aWMgc3NpemVfdCBkdW1wX2Vycm9yX2xvZyhzdHJ1Y3QgZGV2aWNlICpkLAotCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1ZiwKLQkJCSAgICAgIHNpemVfdCBjb3VudCkKLXsKLQljaGFyICpwID0gKGNoYXIgKilidWY7Ci0KLQlpZiAocFswXSA9PSAnMScpCi0JCWlwd19kdW1wX25pY19lcnJvcl9sb2coKHN0cnVjdCBpcHdfcHJpdiAqKWQtPmRyaXZlcl9kYXRhKTsKLQotCXJldHVybiBzdHJubGVuKGJ1ZiwgY291bnQpOwotfQotCi1zdGF0aWMgREVWSUNFX0FUVFIoZHVtcF9lcnJvcnMsIFNfSVdVU1IsIE5VTEwsIGR1bXBfZXJyb3JfbG9nKTsKLQotc3RhdGljIHNzaXplX3QgZHVtcF9ldmVudF9sb2coc3RydWN0IGRldmljZSAqZCwKLQkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsCi0JCQkgICAgICBzaXplX3QgY291bnQpCi17Ci0JY2hhciAqcCA9IChjaGFyICopYnVmOwotCi0JaWYgKHBbMF0gPT0gJzEnKQotCQlpcHdfZHVtcF9uaWNfZXZlbnRfbG9nKChzdHJ1Y3QgaXB3X3ByaXYgKilkLT5kcml2ZXJfZGF0YSk7Ci0KLQlyZXR1cm4gc3RybmxlbihidWYsIGNvdW50KTsKLX0KLQotc3RhdGljIERFVklDRV9BVFRSKGR1bXBfZXZlbnRzLCBTX0lXVVNSLCBOVUxMLCBkdW1wX2V2ZW50X2xvZyk7Ci0KIHN0YXRpYyBzc2l6ZV90IHNob3dfdWNvZGVfdmVyc2lvbihzdHJ1Y3QgZGV2aWNlICpkLAogCQkJCSAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKQEAgLTc5OCw3ICsxMzg2LDcgQEAKIAl1MzIgcmVnID0gMDsKIAlzdHJ1Y3QgaXB3X3ByaXYgKnAgPSBkLT5kcml2ZXJfZGF0YTsKIAotCXJlZyA9IGlwd19yZWFkX3JlZzMyKHAsIENYMl9JTlRFUk5BTF9DTURfRVZFTlQpOworCXJlZyA9IGlwd19yZWFkX3JlZzMyKHAsIElQV19JTlRFUk5BTF9DTURfRVZFTlQpOwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JTA4eFxuIiwgcmVnKTsKIH0KIHN0YXRpYyBzc2l6ZV90IHN0b3JlX2NvbW1hbmRfZXZlbnRfcmVnKHN0cnVjdCBkZXZpY2UgKmQsCkBAIC04MDksNyArMTM5Nyw3IEBACiAJc3RydWN0IGlwd19wcml2ICpwID0gZC0+ZHJpdmVyX2RhdGE7CiAKIAlzc2NhbmYoYnVmLCAiJXgiLCAmcmVnKTsKLQlpcHdfd3JpdGVfcmVnMzIocCwgQ1gyX0lOVEVSTkFMX0NNRF9FVkVOVCwgcmVnKTsKKwlpcHdfd3JpdGVfcmVnMzIocCwgSVBXX0lOVEVSTkFMX0NNRF9FVkVOVCwgcmVnKTsKIAlyZXR1cm4gc3RybmxlbihidWYsIGNvdW50KTsKIH0KIApAQCAtODQ1LDYgKzE0MzMsNyBAQAogewogCXUzMiByZWcgPSAwOwogCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGQtPmRyaXZlcl9kYXRhOworCiAJaWYgKHByaXYtPnN0YXR1cyAmIFNUQVRVU19JTkRJUkVDVF9EV09SRCkKIAkJcmVnID0gaXB3X3JlYWRfcmVnMzIocHJpdiwgcHJpdi0+aW5kaXJlY3RfZHdvcmQpOwogCWVsc2UKQEAgLTg3MSw2ICsxNDYwLDcgQEAKIHsKIAl1OCByZWcgPSAwOwogCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGQtPmRyaXZlcl9kYXRhOworCiAJaWYgKHByaXYtPnN0YXR1cyAmIFNUQVRVU19JTkRJUkVDVF9CWVRFKQogCQlyZWcgPSBpcHdfcmVhZF9yZWc4KHByaXYsIHByaXYtPmluZGlyZWN0X2J5dGUpOwogCWVsc2UKQEAgLTk0NSw3ICsxNTM1LDcgQEAKIHN0YXRpYyBpbnQgaXB3X3JhZGlvX2tpbGxfc3coc3RydWN0IGlwd19wcml2ICpwcml2LCBpbnQgZGlzYWJsZV9yYWRpbykKIHsKIAlpZiAoKGRpc2FibGVfcmFkaW8gPyAxIDogMCkgPT0KLQkgICAgKHByaXYtPnN0YXR1cyAmIFNUQVRVU19SRl9LSUxMX1NXID8gMSA6IDApKQorCSAgICAoKHByaXYtPnN0YXR1cyAmIFNUQVRVU19SRl9LSUxMX1NXKSA/IDEgOiAwKSkKIAkJcmV0dXJuIDA7CiAKIAlJUFdfREVCVUdfUkZfS0lMTCgiTWFudWFsIFNXIFJGIEtpbGwgc2V0IHRvOiBSQURJTyAgJXNcbiIsCkBAIC05NTQsMTAgKzE1NDQsOCBAQAogCWlmIChkaXNhYmxlX3JhZGlvKSB7CiAJCXByaXYtPnN0YXR1cyB8PSBTVEFUVVNfUkZfS0lMTF9TVzsKIAotCQlpZiAocHJpdi0+d29ya3F1ZXVlKSB7CisJCWlmIChwcml2LT53b3JrcXVldWUpCiAJCQljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT5yZXF1ZXN0X3NjYW4pOwotCQl9Ci0JCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+d2FpdF9jb21tYW5kX3F1ZXVlKTsKIAkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5kb3duKTsKIAl9IGVsc2UgewogCQlwcml2LT5zdGF0dXMgJj0gflNUQVRVU19SRl9LSUxMX1NXOwpAQCAtOTg3LDYgKzE1NzUsOTMgQEAKIAogc3RhdGljIERFVklDRV9BVFRSKHJmX2tpbGwsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3JmX2tpbGwsIHN0b3JlX3JmX2tpbGwpOwogCitzdGF0aWMgc3NpemVfdCBzaG93X3NwZWVkX3NjYW4oc3RydWN0IGRldmljZSAqZCwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgICAgY2hhciAqYnVmKQoreworCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXB3X3ByaXYgKilkLT5kcml2ZXJfZGF0YTsKKwlpbnQgcG9zID0gMCwgbGVuID0gMDsKKwlpZiAocHJpdi0+Y29uZmlnICYgQ0ZHX1NQRUVEX1NDQU4pIHsKKwkJd2hpbGUgKHByaXYtPnNwZWVkX3NjYW5bcG9zXSAhPSAwKQorCQkJbGVuICs9IHNwcmludGYoJmJ1ZltsZW5dLCAiJWQgIiwKKwkJCQkgICAgICAgcHJpdi0+c3BlZWRfc2Nhbltwb3MrK10pOworCQlyZXR1cm4gbGVuICsgc3ByaW50ZigmYnVmW2xlbl0sICJcbiIpOworCX0KKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjBcbiIpOworfQorCitzdGF0aWMgc3NpemVfdCBzdG9yZV9zcGVlZF9zY2FuKHN0cnVjdCBkZXZpY2UgKmQsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXB3X3ByaXYgKilkLT5kcml2ZXJfZGF0YTsKKwlpbnQgY2hhbm5lbCwgcG9zID0gMDsKKwljb25zdCBjaGFyICpwID0gYnVmOworCisJLyogbGlzdCBvZiBzcGFjZSBzZXBhcmF0ZWQgY2hhbm5lbHMgdG8gc2Nhbiwgb3B0aW9uYWxseSBlbmRpbmcgd2l0aCAwICovCisJd2hpbGUgKChjaGFubmVsID0gc2ltcGxlX3N0cnRvbChwLCBOVUxMLCAwKSkpIHsKKwkJaWYgKHBvcyA9PSBNQVhfU1BFRURfU0NBTiAtIDEpIHsKKwkJCXByaXYtPnNwZWVkX3NjYW5bcG9zXSA9IDA7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChpcHdfaXNfdmFsaWRfY2hhbm5lbChwcml2LT5pZWVlLCBjaGFubmVsKSkKKwkJCXByaXYtPnNwZWVkX3NjYW5bcG9zKytdID0gY2hhbm5lbDsKKwkJZWxzZQorCQkJSVBXX1dBUk5JTkcoIlNraXBwaW5nIGludmFsaWQgY2hhbm5lbCByZXF1ZXN0OiAlZFxuIiwKKwkJCQkgICAgY2hhbm5lbCk7CisJCXAgPSBzdHJjaHIocCwgJyAnKTsKKwkJaWYgKCFwKQorCQkJYnJlYWs7CisJCXdoaWxlICgqcCA9PSAnICcgfHwgKnAgPT0gJ1x0JykKKwkJCXArKzsKKwl9CisKKwlpZiAocG9zID09IDApCisJCXByaXYtPmNvbmZpZyAmPSB+Q0ZHX1NQRUVEX1NDQU47CisJZWxzZSB7CisJCXByaXYtPnNwZWVkX3NjYW5fcG9zID0gMDsKKwkJcHJpdi0+Y29uZmlnIHw9IENGR19TUEVFRF9TQ0FOOworCX0KKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIERFVklDRV9BVFRSKHNwZWVkX3NjYW4sIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3NwZWVkX3NjYW4sCisJCSAgIHN0b3JlX3NwZWVkX3NjYW4pOworCitzdGF0aWMgc3NpemVfdCBzaG93X25ldF9zdGF0cyhzdHJ1Y3QgZGV2aWNlICpkLCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSAoc3RydWN0IGlwd19wcml2ICopZC0+ZHJpdmVyX2RhdGE7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWNcbiIsIChwcml2LT5jb25maWcgJiBDRkdfTkVUX1NUQVRTKSA/ICcxJyA6ICcwJyk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX25ldF9zdGF0cyhzdHJ1Y3QgZGV2aWNlICpkLCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSAoc3RydWN0IGlwd19wcml2ICopZC0+ZHJpdmVyX2RhdGE7CisJaWYgKGJ1ZlswXSA9PSAnMScpCisJCXByaXYtPmNvbmZpZyB8PSBDRkdfTkVUX1NUQVRTOworCWVsc2UKKwkJcHJpdi0+Y29uZmlnICY9IH5DRkdfTkVUX1NUQVRTOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgREVWSUNFX0FUVFIobmV0X3N0YXRzLCBTX0lXVVNSIHwgU19JUlVHTywKKwkJICAgc2hvd19uZXRfc3RhdHMsIHN0b3JlX25ldF9zdGF0cyk7CisKK3N0YXRpYyB2b2lkIG5vdGlmeV93eF9hc3NvY19ldmVudChzdHJ1Y3QgaXB3X3ByaXYgKnByaXYpCit7CisJdW5pb24gaXdyZXFfZGF0YSB3cnF1OworCXdycXUuYXBfYWRkci5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7CisJaWYgKHByaXYtPnN0YXR1cyAmIFNUQVRVU19BU1NPQ0lBVEVEKQorCQltZW1jcHkod3JxdS5hcF9hZGRyLnNhX2RhdGEsIHByaXYtPmJzc2lkLCBFVEhfQUxFTik7CisJZWxzZQorCQltZW1zZXQod3JxdS5hcF9hZGRyLnNhX2RhdGEsIDAsIEVUSF9BTEVOKTsKKwl3aXJlbGVzc19zZW5kX2V2ZW50KHByaXYtPm5ldF9kZXYsIFNJT0NHSVdBUCwgJndycXUsIE5VTEwpOworfQorCiBzdGF0aWMgdm9pZCBpcHdfaXJxX3Rhc2tsZXQoc3RydWN0IGlwd19wcml2ICpwcml2KQogewogCXUzMiBpbnRhLCBpbnRhX21hc2ssIGhhbmRsZWQgPSAwOwpAQCAtOTk1LDEwMiArMTY3MCwxMzUgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKLQlpbnRhID0gaXB3X3JlYWQzMihwcml2LCBDWDJfSU5UQV9SVyk7Ci0JaW50YV9tYXNrID0gaXB3X3JlYWQzMihwcml2LCBDWDJfSU5UQV9NQVNLX1IpOwotCWludGEgJj0gKENYMl9JTlRBX01BU0tfQUxMICYgaW50YV9tYXNrKTsKKwlpbnRhID0gaXB3X3JlYWQzMihwcml2LCBJUFdfSU5UQV9SVyk7CisJaW50YV9tYXNrID0gaXB3X3JlYWQzMihwcml2LCBJUFdfSU5UQV9NQVNLX1IpOworCWludGEgJj0gKElQV19JTlRBX01BU0tfQUxMICYgaW50YV9tYXNrKTsKIAogCS8qIEFkZCBhbnkgY2FjaGVkIElOVEEgdmFsdWVzIHRoYXQgbmVlZCB0byBiZSBoYW5kbGVkICovCiAJaW50YSB8PSBwcml2LT5pc3JfaW50YTsKIAogCS8qIGhhbmRsZSBhbGwgdGhlIGp1c3RpZmljYXRpb25zIGZvciB0aGUgaW50ZXJydXB0ICovCi0JaWYgKGludGEgJiBDWDJfSU5UQV9CSVRfUlhfVFJBTlNGRVIpIHsKKwlpZiAoaW50YSAmIElQV19JTlRBX0JJVF9SWF9UUkFOU0ZFUikgewogCQlpcHdfcngocHJpdik7Ci0JCWhhbmRsZWQgfD0gQ1gyX0lOVEFfQklUX1JYX1RSQU5TRkVSOworCQloYW5kbGVkIHw9IElQV19JTlRBX0JJVF9SWF9UUkFOU0ZFUjsKIAl9CiAKLQlpZiAoaW50YSAmIENYMl9JTlRBX0JJVF9UWF9DTURfUVVFVUUpIHsKKwlpZiAoaW50YSAmIElQV19JTlRBX0JJVF9UWF9DTURfUVVFVUUpIHsKIAkJSVBXX0RFQlVHX0hDKCJDb21tYW5kIGNvbXBsZXRlZC5cbiIpOwogCQlyYyA9IGlwd19xdWV1ZV90eF9yZWNsYWltKHByaXYsICZwcml2LT50eHFfY21kLCAtMSk7CiAJCXByaXYtPnN0YXR1cyAmPSB+U1RBVFVTX0hDTURfQUNUSVZFOwogCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPndhaXRfY29tbWFuZF9xdWV1ZSk7Ci0JCWhhbmRsZWQgfD0gQ1gyX0lOVEFfQklUX1RYX0NNRF9RVUVVRTsKKwkJaGFuZGxlZCB8PSBJUFdfSU5UQV9CSVRfVFhfQ01EX1FVRVVFOwogCX0KIAotCWlmIChpbnRhICYgQ1gyX0lOVEFfQklUX1RYX1FVRVVFXzEpIHsKKwlpZiAoaW50YSAmIElQV19JTlRBX0JJVF9UWF9RVUVVRV8xKSB7CiAJCUlQV19ERUJVR19UWCgiVFhfUVVFVUVfMVxuIik7CiAJCXJjID0gaXB3X3F1ZXVlX3R4X3JlY2xhaW0ocHJpdiwgJnByaXYtPnR4cVswXSwgMCk7Ci0JCWhhbmRsZWQgfD0gQ1gyX0lOVEFfQklUX1RYX1FVRVVFXzE7CisJCWhhbmRsZWQgfD0gSVBXX0lOVEFfQklUX1RYX1FVRVVFXzE7CiAJfQogCi0JaWYgKGludGEgJiBDWDJfSU5UQV9CSVRfVFhfUVVFVUVfMikgeworCWlmIChpbnRhICYgSVBXX0lOVEFfQklUX1RYX1FVRVVFXzIpIHsKIAkJSVBXX0RFQlVHX1RYKCJUWF9RVUVVRV8yXG4iKTsKIAkJcmMgPSBpcHdfcXVldWVfdHhfcmVjbGFpbShwcml2LCAmcHJpdi0+dHhxWzFdLCAxKTsKLQkJaGFuZGxlZCB8PSBDWDJfSU5UQV9CSVRfVFhfUVVFVUVfMjsKKwkJaGFuZGxlZCB8PSBJUFdfSU5UQV9CSVRfVFhfUVVFVUVfMjsKIAl9CiAKLQlpZiAoaW50YSAmIENYMl9JTlRBX0JJVF9UWF9RVUVVRV8zKSB7CisJaWYgKGludGEgJiBJUFdfSU5UQV9CSVRfVFhfUVVFVUVfMykgewogCQlJUFdfREVCVUdfVFgoIlRYX1FVRVVFXzNcbiIpOwogCQlyYyA9IGlwd19xdWV1ZV90eF9yZWNsYWltKHByaXYsICZwcml2LT50eHFbMl0sIDIpOwotCQloYW5kbGVkIHw9IENYMl9JTlRBX0JJVF9UWF9RVUVVRV8zOworCQloYW5kbGVkIHw9IElQV19JTlRBX0JJVF9UWF9RVUVVRV8zOwogCX0KIAotCWlmIChpbnRhICYgQ1gyX0lOVEFfQklUX1RYX1FVRVVFXzQpIHsKKwlpZiAoaW50YSAmIElQV19JTlRBX0JJVF9UWF9RVUVVRV80KSB7CiAJCUlQV19ERUJVR19UWCgiVFhfUVVFVUVfNFxuIik7CiAJCXJjID0gaXB3X3F1ZXVlX3R4X3JlY2xhaW0ocHJpdiwgJnByaXYtPnR4cVszXSwgMyk7Ci0JCWhhbmRsZWQgfD0gQ1gyX0lOVEFfQklUX1RYX1FVRVVFXzQ7CisJCWhhbmRsZWQgfD0gSVBXX0lOVEFfQklUX1RYX1FVRVVFXzQ7CiAJfQogCi0JaWYgKGludGEgJiBDWDJfSU5UQV9CSVRfU1RBVFVTX0NIQU5HRSkgeworCWlmIChpbnRhICYgSVBXX0lOVEFfQklUX1NUQVRVU19DSEFOR0UpIHsKIAkJSVBXX1dBUk5JTkcoIlNUQVRVU19DSEFOR0VcbiIpOwotCQloYW5kbGVkIHw9IENYMl9JTlRBX0JJVF9TVEFUVVNfQ0hBTkdFOworCQloYW5kbGVkIHw9IElQV19JTlRBX0JJVF9TVEFUVVNfQ0hBTkdFOwogCX0KIAotCWlmIChpbnRhICYgQ1gyX0lOVEFfQklUX0JFQUNPTl9QRVJJT0RfRVhQSVJFRCkgeworCWlmIChpbnRhICYgSVBXX0lOVEFfQklUX0JFQUNPTl9QRVJJT0RfRVhQSVJFRCkgewogCQlJUFdfV0FSTklORygiVFhfUEVSSU9EX0VYUElSRURcbiIpOwotCQloYW5kbGVkIHw9IENYMl9JTlRBX0JJVF9CRUFDT05fUEVSSU9EX0VYUElSRUQ7CisJCWhhbmRsZWQgfD0gSVBXX0lOVEFfQklUX0JFQUNPTl9QRVJJT0RfRVhQSVJFRDsKIAl9CiAKLQlpZiAoaW50YSAmIENYMl9JTlRBX0JJVF9TTEFWRV9NT0RFX0hPU1RfQ01EX0RPTkUpIHsKKwlpZiAoaW50YSAmIElQV19JTlRBX0JJVF9TTEFWRV9NT0RFX0hPU1RfQ01EX0RPTkUpIHsKIAkJSVBXX1dBUk5JTkcoIkhPU1RfQ01EX0RPTkVcbiIpOwotCQloYW5kbGVkIHw9IENYMl9JTlRBX0JJVF9TTEFWRV9NT0RFX0hPU1RfQ01EX0RPTkU7CisJCWhhbmRsZWQgfD0gSVBXX0lOVEFfQklUX1NMQVZFX01PREVfSE9TVF9DTURfRE9ORTsKIAl9CiAKLQlpZiAoaW50YSAmIENYMl9JTlRBX0JJVF9GV19JTklUSUFMSVpBVElPTl9ET05FKSB7CisJaWYgKGludGEgJiBJUFdfSU5UQV9CSVRfRldfSU5JVElBTElaQVRJT05fRE9ORSkgewogCQlJUFdfV0FSTklORygiRldfSU5JVElBTElaQVRJT05fRE9ORVxuIik7Ci0JCWhhbmRsZWQgfD0gQ1gyX0lOVEFfQklUX0ZXX0lOSVRJQUxJWkFUSU9OX0RPTkU7CisJCWhhbmRsZWQgfD0gSVBXX0lOVEFfQklUX0ZXX0lOSVRJQUxJWkFUSU9OX0RPTkU7CiAJfQogCi0JaWYgKGludGEgJiBDWDJfSU5UQV9CSVRfRldfQ0FSRF9ESVNBQkxFX1BIWV9PRkZfRE9ORSkgeworCWlmIChpbnRhICYgSVBXX0lOVEFfQklUX0ZXX0NBUkRfRElTQUJMRV9QSFlfT0ZGX0RPTkUpIHsKIAkJSVBXX1dBUk5JTkcoIlBIWV9PRkZfRE9ORVxuIik7Ci0JCWhhbmRsZWQgfD0gQ1gyX0lOVEFfQklUX0ZXX0NBUkRfRElTQUJMRV9QSFlfT0ZGX0RPTkU7CisJCWhhbmRsZWQgfD0gSVBXX0lOVEFfQklUX0ZXX0NBUkRfRElTQUJMRV9QSFlfT0ZGX0RPTkU7CiAJfQogCi0JaWYgKGludGEgJiBDWDJfSU5UQV9CSVRfUkZfS0lMTF9ET05FKSB7CisJaWYgKGludGEgJiBJUFdfSU5UQV9CSVRfUkZfS0lMTF9ET05FKSB7CiAJCUlQV19ERUJVR19SRl9LSUxMKCJSRl9LSUxMX0RPTkVcbiIpOwogCQlwcml2LT5zdGF0dXMgfD0gU1RBVFVTX1JGX0tJTExfSFc7CiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+d2FpdF9jb21tYW5kX3F1ZXVlKTsKLQkJbmV0aWZfY2Fycmllcl9vZmYocHJpdi0+bmV0X2Rldik7Ci0JCW5ldGlmX3N0b3BfcXVldWUocHJpdi0+bmV0X2Rldik7CisJCXByaXYtPnN0YXR1cyAmPSB+KFNUQVRVU19BU1NPQ0lBVEVEIHwgU1RBVFVTX0FTU09DSUFUSU5HKTsKIAkJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+cmVxdWVzdF9zY2FuKTsKKwkJc2NoZWR1bGVfd29yaygmcHJpdi0+bGlua19kb3duKTsKIAkJcXVldWVfZGVsYXllZF93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnJmX2tpbGwsIDIgKiBIWik7Ci0JCWhhbmRsZWQgfD0gQ1gyX0lOVEFfQklUX1JGX0tJTExfRE9ORTsKKwkJaGFuZGxlZCB8PSBJUFdfSU5UQV9CSVRfUkZfS0lMTF9ET05FOwogCX0KIAotCWlmIChpbnRhICYgQ1gyX0lOVEFfQklUX0ZBVEFMX0VSUk9SKSB7CisJaWYgKGludGEgJiBJUFdfSU5UQV9CSVRfRkFUQUxfRVJST1IpIHsKIAkJSVBXX0VSUk9SKCJGaXJtd2FyZSBlcnJvciBkZXRlY3RlZC4gIFJlc3RhcnRpbmcuXG4iKTsKKwkJaWYgKHByaXYtPmVycm9yKSB7CisJCQlJUFdfRVJST1IoIlN5c2ZzICdlcnJvcicgbG9nIGFscmVhZHkgZXhpc3RzLlxuIik7CiAjaWZkZWYgQ09ORklHX0lQV19ERUJVRwotCQlpZiAoaXB3X2RlYnVnX2xldmVsICYgSVBXX0RMX0ZXX0VSUk9SUykgewotCQkJaXB3X2R1bXBfbmljX2Vycm9yX2xvZyhwcml2KTsKLQkJCWlwd19kdW1wX25pY19ldmVudF9sb2cocHJpdik7Ci0JCX0KKwkJCWlmIChpcHdfZGVidWdfbGV2ZWwgJiBJUFdfRExfRldfRVJST1JTKSB7CisJCQkJc3RydWN0IGlwd19md19lcnJvciAqZXJyb3IgPQorCQkJCSAgICBpcHdfYWxsb2NfZXJyb3JfbG9nKHByaXYpOworCQkJCWlwd19kdW1wX2Vycm9yX2xvZyhwcml2LCBlcnJvcik7CisJCQkJaWYgKGVycm9yKQorCQkJCQlpcHdfZnJlZV9lcnJvcl9sb2coZXJyb3IpOworCQkJfQogI2VuZGlmCisJCX0gZWxzZSB7CisJCQlwcml2LT5lcnJvciA9IGlwd19hbGxvY19lcnJvcl9sb2cocHJpdik7CisJCQlpZiAocHJpdi0+ZXJyb3IpCisJCQkJSVBXX0VSUk9SKCJTeXNmcyAnZXJyb3InIGxvZyBjYXB0dXJlZC5cbiIpOworCQkJZWxzZQorCQkJCUlQV19FUlJPUigiRXJyb3IgYWxsb2NhdGluZyBzeXNmcyAnZXJyb3InICIKKwkJCQkJICAibG9nLlxuIik7CisjaWZkZWYgQ09ORklHX0lQV19ERUJVRworCQkJaWYgKGlwd19kZWJ1Z19sZXZlbCAmIElQV19ETF9GV19FUlJPUlMpCisJCQkJaXB3X2R1bXBfZXJyb3JfbG9nKHByaXYsIHByaXYtPmVycm9yKTsKKyNlbmRpZgorCQl9CisKKwkJLyogWFhYOiBJZiBoYXJkd2FyZSBlbmNyeXB0aW9uIGlzIGZvciBXUEEvV1BBMiwKKwkJICogd2UgaGF2ZSB0byBub3RpZnkgdGhlIHN1cHBsaWNhbnQuICovCisJCWlmIChwcml2LT5pZWVlLT5zZWMuZW5jcnlwdCkgeworCQkJcHJpdi0+c3RhdHVzICY9IH5TVEFUVVNfQVNTT0NJQVRFRDsKKwkJCW5vdGlmeV93eF9hc3NvY19ldmVudChwcml2KTsKKwkJfQorCisJCS8qIEtlZXAgdGhlIHJlc3RhcnQgcHJvY2VzcyBmcm9tIHRyeWluZyB0byBzZW5kIGhvc3QKKwkJICogY29tbWFuZHMgYnkgY2xlYXJpbmcgdGhlIElOSVQgc3RhdHVzIGJpdCAqLworCQlwcml2LT5zdGF0dXMgJj0gflNUQVRVU19JTklUOworCisJCS8qIENhbmNlbCBjdXJyZW50bHkgcXVldWVkIGNvbW1hbmQuICovCisJCXByaXYtPnN0YXR1cyAmPSB+U1RBVFVTX0hDTURfQUNUSVZFOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPndhaXRfY29tbWFuZF9xdWV1ZSk7CisKIAkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5hZGFwdGVyX3Jlc3RhcnQpOwotCQloYW5kbGVkIHw9IENYMl9JTlRBX0JJVF9GQVRBTF9FUlJPUjsKKwkJaGFuZGxlZCB8PSBJUFdfSU5UQV9CSVRfRkFUQUxfRVJST1I7CiAJfQogCi0JaWYgKGludGEgJiBDWDJfSU5UQV9CSVRfUEFSSVRZX0VSUk9SKSB7CisJaWYgKGludGEgJiBJUFdfSU5UQV9CSVRfUEFSSVRZX0VSUk9SKSB7CiAJCUlQV19FUlJPUigiUGFyaXR5IGVycm9yXG4iKTsKLQkJaGFuZGxlZCB8PSBDWDJfSU5UQV9CSVRfUEFSSVRZX0VSUk9SOworCQloYW5kbGVkIHw9IElQV19JTlRBX0JJVF9QQVJJVFlfRVJST1I7CiAJfQogCiAJaWYgKGhhbmRsZWQgIT0gaW50YSkgewpAQCAtMTEwMyw3ICsxODExLDYgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiB9CiAKLSNpZmRlZiBDT05GSUdfSVBXX0RFQlVHCiAjZGVmaW5lIElQV19DTUQoeCkgY2FzZSBJUFdfQ01EXyAjIyB4IDogcmV0dXJuICN4CiBzdGF0aWMgY2hhciAqZ2V0X2NtZF9zdHJpbmcodTggY21kKQogewpAQCAtMTE2Miw0NCArMTg2OSw3OCBAQAogCQlyZXR1cm4gIlVOS05PV04iOwogCX0KIH0KLSNlbmRpZgkJCQkvKiBDT05GSUdfSVBXX0RFQlVHICovCiAKICNkZWZpbmUgSE9TVF9DT01QTEVURV9USU1FT1VUIEhaCiBzdGF0aWMgaW50IGlwd19zZW5kX2NtZChzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsIHN0cnVjdCBob3N0X2NtZCAqY21kKQogewogCWludCByYyA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJaWYgKHByaXYtPnN0YXR1cyAmIFNUQVRVU19IQ01EX0FDVElWRSkgewotCQlJUFdfRVJST1IoIkFscmVhZHkgc2VuZGluZyBhIGNvbW1hbmRcbiIpOwotCQlyZXR1cm4gLTE7CisJCUlQV19FUlJPUigiRmFpbGVkIHRvIHNlbmQgJXM6IEFscmVhZHkgc2VuZGluZyBhIGNvbW1hbmQuXG4iLAorCQkJICBnZXRfY21kX3N0cmluZyhjbWQtPmNtZCkpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCXJldHVybiAtRUFHQUlOOwogCX0KIAogCXByaXYtPnN0YXR1cyB8PSBTVEFUVVNfSENNRF9BQ1RJVkU7CiAKLQlJUFdfREVCVUdfSEMoIlNlbmRpbmcgJXMgY29tbWFuZCAoIyVkKSwgJWQgYnl0ZXNcbiIsCi0JCSAgICAgZ2V0X2NtZF9zdHJpbmcoY21kLT5jbWQpLCBjbWQtPmNtZCwgY21kLT5sZW4pOworCWlmIChwcml2LT5jbWRsb2cpIHsKKwkJcHJpdi0+Y21kbG9nW3ByaXYtPmNtZGxvZ19wb3NdLmppZmZpZXMgPSBqaWZmaWVzOworCQlwcml2LT5jbWRsb2dbcHJpdi0+Y21kbG9nX3Bvc10uY21kLmNtZCA9IGNtZC0+Y21kOworCQlwcml2LT5jbWRsb2dbcHJpdi0+Y21kbG9nX3Bvc10uY21kLmxlbiA9IGNtZC0+bGVuOworCQltZW1jcHkocHJpdi0+Y21kbG9nW3ByaXYtPmNtZGxvZ19wb3NdLmNtZC5wYXJhbSwgY21kLT5wYXJhbSwKKwkJICAgICAgIGNtZC0+bGVuKTsKKwkJcHJpdi0+Y21kbG9nW3ByaXYtPmNtZGxvZ19wb3NdLnJldGNvZGUgPSAtMTsKKwl9CisKKwlJUFdfREVCVUdfSEMoIiVzIGNvbW1hbmQgKCMlZCkgJWQgYnl0ZXM6IDB4JTA4WFxuIiwKKwkJICAgICBnZXRfY21kX3N0cmluZyhjbWQtPmNtZCksIGNtZC0+Y21kLCBjbWQtPmxlbiwKKwkJICAgICBwcml2LT5zdGF0dXMpOwogCXByaW50a19idWYoSVBXX0RMX0hPU1RfQ09NTUFORCwgKHU4ICopIGNtZC0+cGFyYW0sIGNtZC0+bGVuKTsKIAogCXJjID0gaXB3X3F1ZXVlX3R4X2hjbWQocHJpdiwgY21kLT5jbWQsICZjbWQtPnBhcmFtLCBjbWQtPmxlbiwgMCk7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7CisJaWYgKHJjKSB7CisJCXByaXYtPnN0YXR1cyAmPSB+U1RBVFVTX0hDTURfQUNUSVZFOworCQlJUFdfRVJST1IoIkZhaWxlZCB0byBzZW5kICVzOiBSZWFzb24gJWRcbiIsCisJCQkgIGdldF9jbWRfc3RyaW5nKGNtZC0+Y21kKSwgcmMpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCWdvdG8gZXhpdDsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCiAJcmMgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChwcml2LT53YWl0X2NvbW1hbmRfcXVldWUsCiAJCQkJCSAgICAgICEocHJpdi0+CiAJCQkJCQlzdGF0dXMgJiBTVEFUVVNfSENNRF9BQ1RJVkUpLAogCQkJCQkgICAgICBIT1NUX0NPTVBMRVRFX1RJTUVPVVQpOwogCWlmIChyYyA9PSAwKSB7Ci0JCUlQV19ERUJVR19JTkZPKCJDb21tYW5kIGNvbXBsZXRpb24gZmFpbGVkIG91dCBhZnRlciAlZG1zLlxuIiwKLQkJCSAgICAgICBqaWZmaWVzX3RvX21zZWNzKEhPU1RfQ09NUExFVEVfVElNRU9VVCkpOwotCQlwcml2LT5zdGF0dXMgJj0gflNUQVRVU19IQ01EX0FDVElWRTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCWlmIChwcml2LT5zdGF0dXMgJiBTVEFUVVNfUkZfS0lMTF9NQVNLKSB7Ci0JCUlQV19ERUJVR19JTkZPKCJDb21tYW5kIGFib3J0ZWQgZHVlIHRvIFJGIEtpbGwgU3dpdGNoXG4iKTsKLQkJcmV0dXJuIC1FSU87CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCWlmIChwcml2LT5zdGF0dXMgJiBTVEFUVVNfSENNRF9BQ1RJVkUpIHsKKwkJCUlQV19FUlJPUigiRmFpbGVkIHRvIHNlbmQgJXM6IENvbW1hbmQgdGltZWQgb3V0LlxuIiwKKwkJCQkgIGdldF9jbWRfc3RyaW5nKGNtZC0+Y21kKSk7CisJCQlwcml2LT5zdGF0dXMgJj0gflNUQVRVU19IQ01EX0FDVElWRTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJCXJjID0gLUVJTzsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJfSBlbHNlCisJCXJjID0gMDsKKworCWlmIChwcml2LT5zdGF0dXMgJiBTVEFUVVNfUkZfS0lMTF9IVykgeworCQlJUFdfRVJST1IoIkZhaWxlZCB0byBzZW5kICVzOiBBYm9ydGVkIGR1ZSB0byBSRiBraWxsIHN3aXRjaC5cbiIsCisJCQkgIGdldF9jbWRfc3RyaW5nKGNtZC0+Y21kKSk7CisJCXJjID0gLUVJTzsKKwkJZ290byBleGl0OwogCX0KIAotCXJldHVybiAwOworICAgICAgZXhpdDoKKwlpZiAocHJpdi0+Y21kbG9nKSB7CisJCXByaXYtPmNtZGxvZ1twcml2LT5jbWRsb2dfcG9zKytdLnJldGNvZGUgPSByYzsKKwkJcHJpdi0+Y21kbG9nX3BvcyAlPSBwcml2LT5jbWRsb2dfbGVuOworCX0KKwlyZXR1cm4gcmM7CiB9CiAKIHN0YXRpYyBpbnQgaXB3X3NlbmRfaG9zdF9jb21wbGV0ZShzdHJ1Y3QgaXB3X3ByaXYgKnByaXYpCkBAIC0xMjE0LDEyICsxOTU1LDcgQEAKIAkJcmV0dXJuIC0xOwogCX0KIAotCWlmIChpcHdfc2VuZF9jbWQocHJpdiwgJmNtZCkpIHsKLQkJSVBXX0VSUk9SKCJmYWlsZWQgdG8gc2VuZCBIT1NUX0NPTVBMRVRFIGNvbW1hbmRcbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JcmV0dXJuIDA7CisJcmV0dXJuIGlwd19zZW5kX2NtZChwcml2LCAmY21kKTsKIH0KIAogc3RhdGljIGludCBpcHdfc2VuZF9zeXN0ZW1fY29uZmlnKHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwKQEAgLTEyMzUsMTMgKzE5NzEsOCBAQAogCQlyZXR1cm4gLTE7CiAJfQogCi0JbWVtY3B5KCZjbWQucGFyYW0sIGNvbmZpZywgc2l6ZW9mKCpjb25maWcpKTsKLQlpZiAoaXB3X3NlbmRfY21kKHByaXYsICZjbWQpKSB7Ci0JCUlQV19FUlJPUigiZmFpbGVkIHRvIHNlbmQgU1lTVEVNX0NPTkZJRyBjb21tYW5kXG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCXJldHVybiAwOworCW1lbWNweShjbWQucGFyYW0sIGNvbmZpZywgc2l6ZW9mKCpjb25maWcpKTsKKwlyZXR1cm4gaXB3X3NlbmRfY21kKHByaXYsICZjbWQpOwogfQogCiBzdGF0aWMgaW50IGlwd19zZW5kX3NzaWQoc3RydWN0IGlwd19wcml2ICpwcml2LCB1OCAqIHNzaWQsIGludCBsZW4pCkBAIC0xMjU2LDEzICsxOTg3LDggQEAKIAkJcmV0dXJuIC0xOwogCX0KIAotCW1lbWNweSgmY21kLnBhcmFtLCBzc2lkLCBjbWQubGVuKTsKLQlpZiAoaXB3X3NlbmRfY21kKHByaXYsICZjbWQpKSB7Ci0JCUlQV19FUlJPUigiZmFpbGVkIHRvIHNlbmQgU1NJRCBjb21tYW5kXG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCXJldHVybiAwOworCW1lbWNweShjbWQucGFyYW0sIHNzaWQsIGNtZC5sZW4pOworCXJldHVybiBpcHdfc2VuZF9jbWQocHJpdiwgJmNtZCk7CiB9CiAKIHN0YXRpYyBpbnQgaXB3X3NlbmRfYWRhcHRlcl9hZGRyZXNzKHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwgdTggKiBtYWMpCkBAIC0xMjgwLDE2ICsyMDA2LDE1IEBACiAJSVBXX0RFQlVHX0lORk8oIiVzOiBTZXR0aW5nIE1BQyB0byAiIE1BQ19GTVQgIlxuIiwKIAkJICAgICAgIHByaXYtPm5ldF9kZXYtPm5hbWUsIE1BQ19BUkcobWFjKSk7CiAKLQltZW1jcHkoJmNtZC5wYXJhbSwgbWFjLCBFVEhfQUxFTik7Ci0KLQlpZiAoaXB3X3NlbmRfY21kKHByaXYsICZjbWQpKSB7Ci0JCUlQV19FUlJPUigiZmFpbGVkIHRvIHNlbmQgQURBUFRFUl9BRERSRVNTIGNvbW1hbmRcbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JcmV0dXJuIDA7CisJbWVtY3B5KGNtZC5wYXJhbSwgbWFjLCBFVEhfQUxFTik7CisJcmV0dXJuIGlwd19zZW5kX2NtZChwcml2LCAmY21kKTsKIH0KIAorLyoKKyAqIE5PVEU6IFRoaXMgbXVzdCBiZSBleGVjdXRlZCBmcm9tIG91ciB3b3JrcXVldWUgYXMgaXQgcmVzdWx0cyBpbiB1ZGVsYXkKKyAqIGJlaW5nIGNhbGxlZCB3aGljaCBtYXkgY29ycnVwdCB0aGUga2V5Ym9hcmQgaWYgZXhlY3V0ZWQgb24gZGVmYXVsdAorICogd29ya3F1ZXVlCisgKi8KIHN0YXRpYyB2b2lkIGlwd19hZGFwdGVyX3Jlc3RhcnQodm9pZCAqYWRhcHRlcikKIHsKIAlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBhZGFwdGVyOwpAQCAtMTI5OCwxMiArMjAyMywyNSBAQAogCQlyZXR1cm47CiAKIAlpcHdfZG93bihwcml2KTsKKworCWlmIChwcml2LT5hc3NvY19uZXR3b3JrICYmCisJICAgIChwcml2LT5hc3NvY19uZXR3b3JrLT5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX0lCU1MpKQorCQlpcHdfcmVtb3ZlX2N1cnJlbnRfbmV0d29yayhwcml2KTsKKwogCWlmIChpcHdfdXAocHJpdikpIHsKIAkJSVBXX0VSUk9SKCJGYWlsZWQgdG8gdXAgZGV2aWNlXG4iKTsKIAkJcmV0dXJuOwogCX0KIH0KIAorc3RhdGljIHZvaWQgaXB3X2JnX2FkYXB0ZXJfcmVzdGFydCh2b2lkICpkYXRhKQoreworCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGRhdGE7CisJZG93bigmcHJpdi0+c2VtKTsKKwlpcHdfYWRhcHRlcl9yZXN0YXJ0KGRhdGEpOworCXVwKCZwcml2LT5zZW0pOworfQorCiAjZGVmaW5lIElQV19TQ0FOX0NIRUNLX1dBVENIRE9HICg1ICogSFopCiAKIHN0YXRpYyB2b2lkIGlwd19zY2FuX2NoZWNrKHZvaWQgKmRhdGEpCkBAIC0xMzEzLDEwICsyMDUxLDE4IEBACiAJCUlQV19ERUJVR19TQ0FOKCJTY2FuIGNvbXBsZXRpb24gd2F0Y2hkb2cgcmVzZXR0aW5nICIKIAkJCSAgICAgICAiYWRhcHRlciAoJWRtcykuXG4iLAogCQkJICAgICAgIElQV19TQ0FOX0NIRUNLX1dBVENIRE9HIC8gMTAwKTsKLQkJaXB3X2FkYXB0ZXJfcmVzdGFydChwcml2KTsKKwkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5hZGFwdGVyX3Jlc3RhcnQpOwogCX0KIH0KIAorc3RhdGljIHZvaWQgaXB3X2JnX3NjYW5fY2hlY2sodm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBkYXRhOworCWRvd24oJnByaXYtPnNlbSk7CisJaXB3X3NjYW5fY2hlY2soZGF0YSk7CisJdXAoJnByaXYtPnNlbSk7Cit9CisKIHN0YXRpYyBpbnQgaXB3X3NlbmRfc2Nhbl9yZXF1ZXN0X2V4dChzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsCiAJCQkJICAgICBzdHJ1Y3QgaXB3X3NjYW5fcmVxdWVzdF9leHQgKnJlcXVlc3QpCiB7CkBAIC0xMzI1LDIwICsyMDcxLDggQEAKIAkJLmxlbiA9IHNpemVvZigqcmVxdWVzdCkKIAl9OwogCi0JaWYgKCFwcml2IHx8ICFyZXF1ZXN0KSB7Ci0JCUlQV19FUlJPUigiSW52YWxpZCBhcmdzXG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCW1lbWNweSgmY21kLnBhcmFtLCByZXF1ZXN0LCBzaXplb2YoKnJlcXVlc3QpKTsKLQlpZiAoaXB3X3NlbmRfY21kKHByaXYsICZjbWQpKSB7Ci0JCUlQV19FUlJPUigiZmFpbGVkIHRvIHNlbmQgU0NBTl9SRVFVRVNUX0VYVCBjb21tYW5kXG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCXF1ZXVlX2RlbGF5ZWRfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5zY2FuX2NoZWNrLAotCQkJICAgSVBXX1NDQU5fQ0hFQ0tfV0FUQ0hET0cpOwotCXJldHVybiAwOworCW1lbWNweShjbWQucGFyYW0sIHJlcXVlc3QsIHNpemVvZigqcmVxdWVzdCkpOworCXJldHVybiBpcHdfc2VuZF9jbWQocHJpdiwgJmNtZCk7CiB9CiAKIHN0YXRpYyBpbnQgaXB3X3NlbmRfc2Nhbl9hYm9ydChzdHJ1Y3QgaXB3X3ByaXYgKnByaXYpCkBAIC0xMzUzLDEyICsyMDg3LDcgQEAKIAkJcmV0dXJuIC0xOwogCX0KIAotCWlmIChpcHdfc2VuZF9jbWQocHJpdiwgJmNtZCkpIHsKLQkJSVBXX0VSUk9SKCJmYWlsZWQgdG8gc2VuZCBTQ0FOX0FCT1JUIGNvbW1hbmRcbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JcmV0dXJuIDA7CisJcmV0dXJuIGlwd19zZW5kX2NtZChwcml2LCAmY21kKTsKIH0KIAogc3RhdGljIGludCBpcHdfc2V0X3NlbnNpdGl2aXR5KHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwgdTE2IHNlbnMpCkBAIC0xMzcwLDEyICsyMDk5LDcgQEAKIAlzdHJ1Y3QgaXB3X3NlbnNpdGl2aXR5X2NhbGliICpjYWxpYiA9IChzdHJ1Y3QgaXB3X3NlbnNpdGl2aXR5X2NhbGliICopCiAJICAgICZjbWQucGFyYW07CiAJY2FsaWItPmJlYWNvbl9yc3NpX3JhdyA9IHNlbnM7Ci0JaWYgKGlwd19zZW5kX2NtZChwcml2LCAmY21kKSkgewotCQlJUFdfRVJST1IoImZhaWxlZCB0byBzZW5kIFNFTlNJVElWSVRZIENBTElCIGNvbW1hbmRcbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JcmV0dXJuIDA7CisJcmV0dXJuIGlwd19zZW5kX2NtZChwcml2LCAmY21kKTsKIH0KIAogc3RhdGljIGludCBpcHdfc2VuZF9hc3NvY2lhdGUoc3RydWN0IGlwd19wcml2ICpwcml2LApAQCAtMTM4NiwxOCArMjExMCwyNiBAQAogCQkubGVuID0gc2l6ZW9mKCphc3NvY2lhdGUpCiAJfTsKIAorCXN0cnVjdCBpcHdfYXNzb2NpYXRlIHRtcF9hc3NvY2lhdGU7CisJbWVtY3B5KCZ0bXBfYXNzb2NpYXRlLCBhc3NvY2lhdGUsIHNpemVvZigqYXNzb2NpYXRlKSk7CisJdG1wX2Fzc29jaWF0ZS5wb2xpY3lfc3VwcG9ydCA9CisJICAgIGNwdV90b19sZTE2KHRtcF9hc3NvY2lhdGUucG9saWN5X3N1cHBvcnQpOworCXRtcF9hc3NvY2lhdGUuYXNzb2NfdHNmX21zdyA9IGNwdV90b19sZTMyKHRtcF9hc3NvY2lhdGUuYXNzb2NfdHNmX21zdyk7CisJdG1wX2Fzc29jaWF0ZS5hc3NvY190c2ZfbHN3ID0gY3B1X3RvX2xlMzIodG1wX2Fzc29jaWF0ZS5hc3NvY190c2ZfbHN3KTsKKwl0bXBfYXNzb2NpYXRlLmNhcGFiaWxpdHkgPSBjcHVfdG9fbGUxNih0bXBfYXNzb2NpYXRlLmNhcGFiaWxpdHkpOworCXRtcF9hc3NvY2lhdGUubGlzdGVuX2ludGVydmFsID0KKwkgICAgY3B1X3RvX2xlMTYodG1wX2Fzc29jaWF0ZS5saXN0ZW5faW50ZXJ2YWwpOworCXRtcF9hc3NvY2lhdGUuYmVhY29uX2ludGVydmFsID0KKwkgICAgY3B1X3RvX2xlMTYodG1wX2Fzc29jaWF0ZS5iZWFjb25faW50ZXJ2YWwpOworCXRtcF9hc3NvY2lhdGUuYXRpbV93aW5kb3cgPSBjcHVfdG9fbGUxNih0bXBfYXNzb2NpYXRlLmF0aW1fd2luZG93KTsKKwogCWlmICghcHJpdiB8fCAhYXNzb2NpYXRlKSB7CiAJCUlQV19FUlJPUigiSW52YWxpZCBhcmdzXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIAotCW1lbWNweSgmY21kLnBhcmFtLCBhc3NvY2lhdGUsIHNpemVvZigqYXNzb2NpYXRlKSk7Ci0JaWYgKGlwd19zZW5kX2NtZChwcml2LCAmY21kKSkgewotCQlJUFdfRVJST1IoImZhaWxlZCB0byBzZW5kIEFTU09DSUFURSBjb21tYW5kXG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCXJldHVybiAwOworCW1lbWNweShjbWQucGFyYW0sICZ0bXBfYXNzb2NpYXRlLCBzaXplb2YoKmFzc29jaWF0ZSkpOworCXJldHVybiBpcHdfc2VuZF9jbWQocHJpdiwgJmNtZCk7CiB9CiAKIHN0YXRpYyBpbnQgaXB3X3NlbmRfc3VwcG9ydGVkX3JhdGVzKHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwKQEAgLTE0MTMsMTMgKzIxNDUsOCBAQAogCQlyZXR1cm4gLTE7CiAJfQogCi0JbWVtY3B5KCZjbWQucGFyYW0sIHJhdGVzLCBzaXplb2YoKnJhdGVzKSk7Ci0JaWYgKGlwd19zZW5kX2NtZChwcml2LCAmY21kKSkgewotCQlJUFdfRVJST1IoImZhaWxlZCB0byBzZW5kIFNVUFBPUlRFRF9SQVRFUyBjb21tYW5kXG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCXJldHVybiAwOworCW1lbWNweShjbWQucGFyYW0sIHJhdGVzLCBzaXplb2YoKnJhdGVzKSk7CisJcmV0dXJuIGlwd19zZW5kX2NtZChwcml2LCAmY21kKTsKIH0KIAogc3RhdGljIGludCBpcHdfc2V0X3JhbmRvbV9zZWVkKHN0cnVjdCBpcHdfcHJpdiAqcHJpdikKQEAgLTE0MzYsMTUgKzIxNjMsOSBAQAogCiAJZ2V0X3JhbmRvbV9ieXRlcygmY21kLnBhcmFtLCBzaXplb2YodTMyKSk7CiAKLQlpZiAoaXB3X3NlbmRfY21kKHByaXYsICZjbWQpKSB7Ci0JCUlQV19FUlJPUigiZmFpbGVkIHRvIHNlbmQgU0VFRF9OVU1CRVIgY29tbWFuZFxuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gaXB3X3NlbmRfY21kKHByaXYsICZjbWQpOwogfQogCi0jaWYgMAogc3RhdGljIGludCBpcHdfc2VuZF9jYXJkX2Rpc2FibGUoc3RydWN0IGlwd19wcml2ICpwcml2LCB1MzIgcGh5X29mZikKIHsKIAlzdHJ1Y3QgaG9zdF9jbWQgY21kID0gewpAQCAtMTQ1OSwxNCArMjE4MCw4IEBACiAKIAkqKCh1MzIgKikgJiBjbWQucGFyYW0pID0gcGh5X29mZjsKIAotCWlmIChpcHdfc2VuZF9jbWQocHJpdiwgJmNtZCkpIHsKLQkJSVBXX0VSUk9SKCJmYWlsZWQgdG8gc2VuZCBDQVJEX0RJU0FCTEUgY29tbWFuZFxuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gaXB3X3NlbmRfY21kKHByaXYsICZjbWQpOwogfQotI2VuZGlmCiAKIHN0YXRpYyBpbnQgaXB3X3NlbmRfdHhfcG93ZXIoc3RydWN0IGlwd19wcml2ICpwcml2LCBzdHJ1Y3QgaXB3X3R4X3Bvd2VyICpwb3dlcikKIHsKQEAgLTE0ODAsMTIgKzIxOTUsNTEgQEAKIAkJcmV0dXJuIC0xOwogCX0KIAotCW1lbWNweSgmY21kLnBhcmFtLCBwb3dlciwgc2l6ZW9mKCpwb3dlcikpOwotCWlmIChpcHdfc2VuZF9jbWQocHJpdiwgJmNtZCkpIHsKLQkJSVBXX0VSUk9SKCJmYWlsZWQgdG8gc2VuZCBUWF9QT1dFUiBjb21tYW5kXG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KKwltZW1jcHkoY21kLnBhcmFtLCBwb3dlciwgc2l6ZW9mKCpwb3dlcikpOworCXJldHVybiBpcHdfc2VuZF9jbWQocHJpdiwgJmNtZCk7Cit9CiAKK3N0YXRpYyBpbnQgaXB3X3NldF90eF9wb3dlcihzdHJ1Y3QgaXB3X3ByaXYgKnByaXYpCit7CisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9nZW8gKmdlbyA9IGlwd19nZXRfZ2VvKHByaXYtPmllZWUpOworCXN0cnVjdCBpcHdfdHhfcG93ZXIgdHhfcG93ZXI7CisJczggbWF4X3Bvd2VyOworCWludCBpOworCisJbWVtc2V0KCZ0eF9wb3dlciwgMCwgc2l6ZW9mKHR4X3Bvd2VyKSk7CisKKwkvKiBjb25maWd1cmUgZGV2aWNlIGZvciAnRycgYmFuZCAqLworCXR4X3Bvd2VyLmllZWVfbW9kZSA9IElQV19HX01PREU7CisJdHhfcG93ZXIubnVtX2NoYW5uZWxzID0gZ2VvLT5iZ19jaGFubmVsczsKKwlmb3IgKGkgPSAwOyBpIDwgZ2VvLT5iZ19jaGFubmVsczsgaSsrKSB7CisJCW1heF9wb3dlciA9IGdlby0+YmdbaV0ubWF4X3Bvd2VyOworCQl0eF9wb3dlci5jaGFubmVsc190eF9wb3dlcltpXS5jaGFubmVsX251bWJlciA9CisJCSAgICBnZW8tPmJnW2ldLmNoYW5uZWw7CisJCXR4X3Bvd2VyLmNoYW5uZWxzX3R4X3Bvd2VyW2ldLnR4X3Bvd2VyID0gbWF4X3Bvd2VyID8KKwkJICAgIG1pbihtYXhfcG93ZXIsIHByaXYtPnR4X3Bvd2VyKSA6IHByaXYtPnR4X3Bvd2VyOworCX0KKwlpZiAoaXB3X3NlbmRfdHhfcG93ZXIocHJpdiwgJnR4X3Bvd2VyKSkKKwkJcmV0dXJuIC1FSU87CisKKwkvKiBjb25maWd1cmUgZGV2aWNlIHRvIGFsc28gaGFuZGxlICdCJyBiYW5kICovCisJdHhfcG93ZXIuaWVlZV9tb2RlID0gSVBXX0JfTU9ERTsKKwlpZiAoaXB3X3NlbmRfdHhfcG93ZXIocHJpdiwgJnR4X3Bvd2VyKSkKKwkJcmV0dXJuIC1FSU87CisKKwkvKiBjb25maWd1cmUgZGV2aWNlIHRvIGFsc28gaGFuZGxlICdBJyBiYW5kICovCisJaWYgKHByaXYtPmllZWUtPmFiZ190cnVlKSB7CisJCXR4X3Bvd2VyLmllZWVfbW9kZSA9IElQV19BX01PREU7CisJCXR4X3Bvd2VyLm51bV9jaGFubmVscyA9IGdlby0+YV9jaGFubmVsczsKKwkJZm9yIChpID0gMDsgaSA8IHR4X3Bvd2VyLm51bV9jaGFubmVsczsgaSsrKSB7CisJCQltYXhfcG93ZXIgPSBnZW8tPmFbaV0ubWF4X3Bvd2VyOworCQkJdHhfcG93ZXIuY2hhbm5lbHNfdHhfcG93ZXJbaV0uY2hhbm5lbF9udW1iZXIgPQorCQkJICAgIGdlby0+YVtpXS5jaGFubmVsOworCQkJdHhfcG93ZXIuY2hhbm5lbHNfdHhfcG93ZXJbaV0udHhfcG93ZXIgPSBtYXhfcG93ZXIgPworCQkJICAgIG1pbihtYXhfcG93ZXIsIHByaXYtPnR4X3Bvd2VyKSA6IHByaXYtPnR4X3Bvd2VyOworCQl9CisJCWlmIChpcHdfc2VuZF90eF9wb3dlcihwcml2LCAmdHhfcG93ZXIpKQorCQkJcmV0dXJuIC1FSU87CisJfQogCXJldHVybiAwOwogfQogCkBAIC0xNTA0LDEzICsyMjU4LDggQEAKIAkJcmV0dXJuIC0xOwogCX0KIAotCW1lbWNweSgmY21kLnBhcmFtLCAmcnRzX3RocmVzaG9sZCwgc2l6ZW9mKHJ0c190aHJlc2hvbGQpKTsKLQlpZiAoaXB3X3NlbmRfY21kKHByaXYsICZjbWQpKSB7Ci0JCUlQV19FUlJPUigiZmFpbGVkIHRvIHNlbmQgUlRTX1RIUkVTSE9MRCBjb21tYW5kXG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCXJldHVybiAwOworCW1lbWNweShjbWQucGFyYW0sICZydHNfdGhyZXNob2xkLCBzaXplb2YocnRzX3RocmVzaG9sZCkpOworCXJldHVybiBpcHdfc2VuZF9jbWQocHJpdiwgJmNtZCk7CiB9CiAKIHN0YXRpYyBpbnQgaXB3X3NlbmRfZnJhZ190aHJlc2hvbGQoc3RydWN0IGlwd19wcml2ICpwcml2LCB1MTYgZnJhZykKQEAgLTE1MjgsMTMgKzIyNzcsOCBAQAogCQlyZXR1cm4gLTE7CiAJfQogCi0JbWVtY3B5KCZjbWQucGFyYW0sICZmcmFnX3RocmVzaG9sZCwgc2l6ZW9mKGZyYWdfdGhyZXNob2xkKSk7Ci0JaWYgKGlwd19zZW5kX2NtZChwcml2LCAmY21kKSkgewotCQlJUFdfRVJST1IoImZhaWxlZCB0byBzZW5kIEZSQUdfVEhSRVNIT0xEIGNvbW1hbmRcbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JcmV0dXJuIDA7CisJbWVtY3B5KGNtZC5wYXJhbSwgJmZyYWdfdGhyZXNob2xkLCBzaXplb2YoZnJhZ190aHJlc2hvbGQpKTsKKwlyZXR1cm4gaXB3X3NlbmRfY21kKHByaXYsICZjbWQpOwogfQogCiBzdGF0aWMgaW50IGlwd19zZW5kX3Bvd2VyX21vZGUoc3RydWN0IGlwd19wcml2ICpwcml2LCB1MzIgbW9kZSkKQEAgLTE1NjQsMTIgKzIzMDgsMjcgQEAKIAkJYnJlYWs7CiAJfQogCi0JaWYgKGlwd19zZW5kX2NtZChwcml2LCAmY21kKSkgewotCQlJUFdfRVJST1IoImZhaWxlZCB0byBzZW5kIFBPV0VSX01PREUgY29tbWFuZFxuIik7CisJcmV0dXJuIGlwd19zZW5kX2NtZChwcml2LCAmY21kKTsKK30KKworc3RhdGljIGludCBpcHdfc2VuZF9yZXRyeV9saW1pdChzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsIHU4IHNsaW1pdCwgdTggbGxpbWl0KQoreworCXN0cnVjdCBpcHdfcmV0cnlfbGltaXQgcmV0cnlfbGltaXQgPSB7CisJCS5zaG9ydF9yZXRyeV9saW1pdCA9IHNsaW1pdCwKKwkJLmxvbmdfcmV0cnlfbGltaXQgPSBsbGltaXQKKwl9OworCXN0cnVjdCBob3N0X2NtZCBjbWQgPSB7CisJCS5jbWQgPSBJUFdfQ01EX1JFVFJZX0xJTUlULAorCQkubGVuID0gc2l6ZW9mKHJldHJ5X2xpbWl0KQorCX07CisKKwlpZiAoIXByaXYpIHsKKwkJSVBXX0VSUk9SKCJJbnZhbGlkIGFyZ3NcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCi0JcmV0dXJuIDA7CisJbWVtY3B5KGNtZC5wYXJhbSwgJnJldHJ5X2xpbWl0LCBzaXplb2YocmV0cnlfbGltaXQpKTsKKwlyZXR1cm4gaXB3X3NlbmRfY21kKHByaXYsICZjbWQpOwogfQogCiAvKgpAQCAtMTY3MSw4ICsyNDMwLDcgQEAKIC8qIGRhdGEncyBjb3B5IG9mIHRoZSBlZXByb20gZGF0YSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiBzdGF0aWMgdm9pZCBlZXByb21fcGFyc2VfbWFjKHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwgdTggKiBtYWMpCiB7Ci0JdTggKmVlID0gKHU4ICopIHByaXYtPmVlcHJvbTsKLQltZW1jcHkobWFjLCAmZWVbRUVQUk9NX01BQ19BRERSRVNTXSwgNik7CisJbWVtY3B5KG1hYywgJnByaXYtPmVlcHJvbVtFRVBST01fTUFDX0FERFJFU1NdLCA2KTsKIH0KIAogLyoKQEAgLTE2OTIsNyArMjQ1MCw3IEBACiAKIAkvKiByZWFkIGVudGlyZSBjb250ZW50cyBvZiBlZXByb20gaW50byBwcml2YXRlIGJ1ZmZlciAqLwogCWZvciAoaSA9IDA7IGkgPCAxMjg7IGkrKykKLQkJZWVwcm9tW2ldID0gZWVwcm9tX3JlYWRfdTE2KHByaXYsICh1OCkgaSk7CisJCWVlcHJvbVtpXSA9IGxlMTZfdG9fY3B1KGVlcHJvbV9yZWFkX3UxNihwcml2LCAodTgpIGkpKTsKIAogCS8qCiAJICAgSWYgdGhlIGRhdGEgbG9va3MgY29ycmVjdCwgdGhlbiBjb3B5IGl0IHRvIG91ciBwcml2YXRlCkBAIC0xNzAzLDcgKzI0NjEsNyBAQAogCQlJUFdfREVCVUdfSU5GTygiV3JpdGluZyBFRVBST00gZGF0YSBpbnRvIFNSQU1cbiIpOwogCiAJCS8qIHdyaXRlIHRoZSBlZXByb20gZGF0YSB0byBzcmFtICovCi0JCWZvciAoaSA9IDA7IGkgPCBDWDJfRUVQUk9NX0lNQUdFX1NJWkU7IGkrKykKKwkJZm9yIChpID0gMDsgaSA8IElQV19FRVBST01fSU1BR0VfU0laRTsgaSsrKQogCQkJaXB3X3dyaXRlOChwcml2LCBJUFdfRUVQUk9NX0RBVEEgKyBpLCBwcml2LT5lZXByb21baV0pOwogCiAJCS8qIERvIG5vdCBsb2FkIGVlcHJvbSBkYXRhIG9uIGZhdGFsIGVycm9yIG9yIHN1c3BlbmQgKi8KQEAgLTE3MjMsMTQgKzI0ODEsMTQgQEAKIAljb3VudCA+Pj0gMjsKIAlpZiAoIWNvdW50KQogCQlyZXR1cm47Ci0JX2lwd193cml0ZTMyKHByaXYsIENYMl9BVVRPSU5DX0FERFIsIHN0YXJ0KTsKKwlfaXB3X3dyaXRlMzIocHJpdiwgSVBXX0FVVE9JTkNfQUREUiwgc3RhcnQpOwogCXdoaWxlIChjb3VudC0tKQotCQlfaXB3X3dyaXRlMzIocHJpdiwgQ1gyX0FVVE9JTkNfREFUQSwgMCk7CisJCV9pcHdfd3JpdGUzMihwcml2LCBJUFdfQVVUT0lOQ19EQVRBLCAwKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGlwd19md19kbWFfcmVzZXRfY29tbWFuZF9ibG9ja3Moc3RydWN0IGlwd19wcml2ICpwcml2KQogewotCWlwd196ZXJvX21lbW9yeShwcml2LCBDWDJfU0hBUkVEX1NSQU1fRE1BX0NPTlRST0wsCisJaXB3X3plcm9fbWVtb3J5KHByaXYsIElQV19TSEFSRURfU1JBTV9ETUFfQ09OVFJPTCwKIAkJCUNCX05VTUJFUl9PRl9FTEVNRU5UU19TTUFMTCAqCiAJCQlzaXplb2Yoc3RydWN0IGNvbW1hbmRfYmxvY2spKTsKIH0KQEAgLTE3NDQsNyArMjUwMiw3IEBACiAJaXB3X2Z3X2RtYV9yZXNldF9jb21tYW5kX2Jsb2Nrcyhwcml2KTsKIAogCS8qIFdyaXRlIENCIGJhc2UgYWRkcmVzcyAqLwotCWlwd193cml0ZV9yZWczMihwcml2LCBDWDJfRE1BX0lfQ0JfQkFTRSwgQ1gyX1NIQVJFRF9TUkFNX0RNQV9DT05UUk9MKTsKKwlpcHdfd3JpdGVfcmVnMzIocHJpdiwgSVBXX0RNQV9JX0NCX0JBU0UsIElQV19TSEFSRURfU1JBTV9ETUFfQ09OVFJPTCk7CiAKIAlJUFdfREVCVUdfRlcoIjw8IDogXG4iKTsKIAlyZXR1cm4gMDsKQEAgLTE3NTgsNyArMjUxNiw3IEBACiAKIAkvL3NldCB0aGUgU3RvcCBhbmQgQWJvcnQgYml0CiAJY29udHJvbCA9IERNQV9DT05UUk9MX1NNQUxMX0NCX0NPTlNUX1ZBTFVFIHwgRE1BX0NCX1NUT1BfQU5EX0FCT1JUOwotCWlwd193cml0ZV9yZWczMihwcml2LCBDWDJfRE1BX0lfRE1BX0NPTlRST0wsIGNvbnRyb2wpOworCWlwd193cml0ZV9yZWczMihwcml2LCBJUFdfRE1BX0lfRE1BX0NPTlRST0wsIGNvbnRyb2wpOwogCXByaXYtPnNyYW1fZGVzYy5sYXN0X2NiX2luZGV4ID0gMDsKIAogCUlQV19ERUJVR19GVygiPDwgXG4iKTsKQEAgLTE3NjgsNyArMjUyNiw3IEBACiAJCQkJCSAgc3RydWN0IGNvbW1hbmRfYmxvY2sgKmNiKQogewogCXUzMiBhZGRyZXNzID0KLQkgICAgQ1gyX1NIQVJFRF9TUkFNX0RNQV9DT05UUk9MICsKKwkgICAgSVBXX1NIQVJFRF9TUkFNX0RNQV9DT05UUk9MICsKIAkgICAgKHNpemVvZihzdHJ1Y3QgY29tbWFuZF9ibG9jaykgKiBpbmRleCk7CiAJSVBXX0RFQlVHX0ZXKCI+PiA6XG4iKTsKIApAQCAtMTc5MiwxMyArMjU1MCwxMyBAQAogCQkJCQkgICAgICAgJnByaXYtPnNyYW1fZGVzYy5jYl9saXN0W2luZGV4XSk7CiAKIAkvKiBFbmFibGUgdGhlIERNQSBpbiB0aGUgQ1NSIHJlZ2lzdGVyICovCi0JaXB3X2NsZWFyX2JpdChwcml2LCBDWDJfUkVTRVRfUkVHLAotCQkgICAgICBDWDJfUkVTRVRfUkVHX01BU1RFUl9ESVNBQkxFRCB8Ci0JCSAgICAgIENYMl9SRVNFVF9SRUdfU1RPUF9NQVNURVIpOworCWlwd19jbGVhcl9iaXQocHJpdiwgSVBXX1JFU0VUX1JFRywKKwkJICAgICAgSVBXX1JFU0VUX1JFR19NQVNURVJfRElTQUJMRUQgfAorCQkgICAgICBJUFdfUkVTRVRfUkVHX1NUT1BfTUFTVEVSKTsKIAogCS8qIFNldCB0aGUgU3RhcnQgYml0LiAqLwogCWNvbnRyb2wgPSBETUFfQ09OVFJPTF9TTUFMTF9DQl9DT05TVF9WQUxVRSB8IERNQV9DQl9TVEFSVDsKLQlpcHdfd3JpdGVfcmVnMzIocHJpdiwgQ1gyX0RNQV9JX0RNQV9DT05UUk9MLCBjb250cm9sKTsKKwlpcHdfd3JpdGVfcmVnMzIocHJpdiwgSVBXX0RNQV9JX0RNQV9DT05UUk9MLCBjb250cm9sKTsKIAogCUlQV19ERUJVR19GVygiPDwgOlxuIik7CiAJcmV0dXJuIDA7CkBAIC0xODExLDEyICsyNTY5LDEyIEBACiAJdTMyIGNiX2ZpZWxkc19hZGRyZXNzID0gMDsKIAogCUlQV19ERUJVR19GVygiPj4gOlxuIik7Ci0JYWRkcmVzcyA9IGlwd19yZWFkX3JlZzMyKHByaXYsIENYMl9ETUFfSV9DVVJSRU5UX0NCKTsKKwlhZGRyZXNzID0gaXB3X3JlYWRfcmVnMzIocHJpdiwgSVBXX0RNQV9JX0NVUlJFTlRfQ0IpOwogCUlQV19ERUJVR19GV19JTkZPKCJDdXJyZW50IENCIGlzIDB4JXggXG4iLCBhZGRyZXNzKTsKIAogCS8qIFJlYWQgdGhlIERNQSBDb250cm9sb3IgcmVnaXN0ZXIgKi8KLQlyZWdpc3Rlcl92YWx1ZSA9IGlwd19yZWFkX3JlZzMyKHByaXYsIENYMl9ETUFfSV9ETUFfQ09OVFJPTCk7Ci0JSVBXX0RFQlVHX0ZXX0lORk8oIkNYMl9ETUFfSV9ETUFfQ09OVFJPTCBpcyAweCV4IFxuIiwgcmVnaXN0ZXJfdmFsdWUpOworCXJlZ2lzdGVyX3ZhbHVlID0gaXB3X3JlYWRfcmVnMzIocHJpdiwgSVBXX0RNQV9JX0RNQV9DT05UUk9MKTsKKwlJUFdfREVCVUdfRldfSU5GTygiSVBXX0RNQV9JX0RNQV9DT05UUk9MIGlzIDB4JXggXG4iLCByZWdpc3Rlcl92YWx1ZSk7CiAKIAkvKiBQcmludCB0aGUgQ0IgdmFsdWVzICovCiAJY2JfZmllbGRzX2FkZHJlc3MgPSBhZGRyZXNzOwpAQCAtMTg0NSw5ICsyNjAzLDkgQEAKIAl1MzIgY3VycmVudF9jYl9pbmRleCA9IDA7CiAKIAlJUFdfREVCVUdfRlcoIjw8IDpcbiIpOwotCWN1cnJlbnRfY2JfYWRkcmVzcyA9IGlwd19yZWFkX3JlZzMyKHByaXYsIENYMl9ETUFfSV9DVVJSRU5UX0NCKTsKKwljdXJyZW50X2NiX2FkZHJlc3MgPSBpcHdfcmVhZF9yZWczMihwcml2LCBJUFdfRE1BX0lfQ1VSUkVOVF9DQik7CiAKLQljdXJyZW50X2NiX2luZGV4ID0gKGN1cnJlbnRfY2JfYWRkcmVzcyAtIENYMl9TSEFSRURfU1JBTV9ETUFfQ09OVFJPTCkgLworCWN1cnJlbnRfY2JfaW5kZXggPSAoY3VycmVudF9jYl9hZGRyZXNzIC0gSVBXX1NIQVJFRF9TUkFNX0RNQV9DT05UUk9MKSAvCiAJICAgIHNpemVvZihzdHJ1Y3QgY29tbWFuZF9ibG9jayk7CiAKIAlJUFdfREVCVUdfRldfSU5GTygiQ3VycmVudCBDQiBpbmRleCAweCV4IGFkZHJlc3MgPSAweCVYIFxuIiwKQEAgLTE5NzYsOCArMjczNCw4IEBACiAJaXB3X2Z3X2RtYV9hYm9ydChwcml2KTsKIAogCS8qRGlzYWJsZSB0aGUgRE1BIGluIHRoZSBDU1IgcmVnaXN0ZXIgKi8KLQlpcHdfc2V0X2JpdChwcml2LCBDWDJfUkVTRVRfUkVHLAotCQkgICAgQ1gyX1JFU0VUX1JFR19NQVNURVJfRElTQUJMRUQgfCBDWDJfUkVTRVRfUkVHX1NUT1BfTUFTVEVSKTsKKwlpcHdfc2V0X2JpdChwcml2LCBJUFdfUkVTRVRfUkVHLAorCQkgICAgSVBXX1JFU0VUX1JFR19NQVNURVJfRElTQUJMRUQgfCBJUFdfUkVTRVRfUkVHX1NUT1BfTUFTVEVSKTsKIAogCUlQV19ERUJVR19GVygiPDwgZG1hV2FpdFN5bmMgXG4iKTsKIAlyZXR1cm4gMDsKQEAgLTE5ODcsNiArMjc0NSw5IEBACiB7CiAJc3RydWN0IGxpc3RfaGVhZCAqZWxlbWVudCwgKnNhZmU7CiAJc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICpuZXR3b3JrID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmllZWUtPmxvY2ssIGZsYWdzKTsKIAlsaXN0X2Zvcl9lYWNoX3NhZmUoZWxlbWVudCwgc2FmZSwgJnByaXYtPmllZWUtPm5ldHdvcmtfbGlzdCkgewogCQluZXR3b3JrID0gbGlzdF9lbnRyeShlbGVtZW50LCBzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmssIGxpc3QpOwogCQlpZiAoIW1lbWNtcChuZXR3b3JrLT5ic3NpZCwgcHJpdi0+YnNzaWQsIEVUSF9BTEVOKSkgewpAQCAtMTk5NSw2ICsyNzU2LDcgQEAKIAkJCQkgICAgICAmcHJpdi0+aWVlZS0+bmV0d29ya19mcmVlX2xpc3QpOwogCQl9CiAJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmllZWUtPmxvY2ssIGZsYWdzKTsKIH0KIAogLyoqCkBAIC0yMDM3LDEwICsyNzk5LDEwIEBACiAKIAlJUFdfREVCVUdfVFJBQ0UoIj4+IFxuIik7CiAJLyogc3RvcCBtYXN0ZXIuIHR5cGljYWwgZGVsYXkgLSAwICovCi0JaXB3X3NldF9iaXQocHJpdiwgQ1gyX1JFU0VUX1JFRywgQ1gyX1JFU0VUX1JFR19TVE9QX01BU1RFUik7CisJaXB3X3NldF9iaXQocHJpdiwgSVBXX1JFU0VUX1JFRywgSVBXX1JFU0VUX1JFR19TVE9QX01BU1RFUik7CiAKLQlyYyA9IGlwd19wb2xsX2JpdChwcml2LCBDWDJfUkVTRVRfUkVHLAotCQkJICBDWDJfUkVTRVRfUkVHX01BU1RFUl9ESVNBQkxFRCwgMTAwKTsKKwlyYyA9IGlwd19wb2xsX2JpdChwcml2LCBJUFdfUkVTRVRfUkVHLAorCQkJICBJUFdfUkVTRVRfUkVHX01BU1RFUl9ESVNBQkxFRCwgMTAwKTsKIAlpZiAocmMgPCAwKSB7CiAJCUlQV19FUlJPUigic3RvcCBtYXN0ZXIgZmFpbGVkIGluIDEwbXNcbiIpOwogCQlyZXR1cm4gLTE7CkBAIC0yMDU2LDcgKzI4MTgsNyBAQAogCUlQV19ERUJVR19UUkFDRSgiPj4gXG4iKTsKIAltZGVsYXkoNSk7CiAKLQlpcHdfY2xlYXJfYml0KHByaXYsIENYMl9SRVNFVF9SRUcsIENCRF9SRVNFVF9SRUdfUFJJTkNFVE9OX1JFU0VUKTsKKwlpcHdfY2xlYXJfYml0KHByaXYsIElQV19SRVNFVF9SRUcsIENCRF9SRVNFVF9SRUdfUFJJTkNFVE9OX1JFU0VUKTsKIAogCS8qIG5vIG9uZSBrbm93cyB0aW1pbmcsIGZvciBzYWZldHkgYWRkIHNvbWUgZGVsYXkgKi8KIAltZGVsYXkoNSk7CkBAIC0yMDczLDEzICsyODM1LDEyIEBACiB9OwogCiAjZGVmaW5lIElQV19GV19NQUpPUl9WRVJTSU9OIDIKLSNkZWZpbmUgSVBXX0ZXX01JTk9SX1ZFUlNJT04gMgorI2RlZmluZSBJUFdfRldfTUlOT1JfVkVSU0lPTiA0CiAKICNkZWZpbmUgSVBXX0ZXX01JTk9SKHgpICgoeCAmIDB4ZmYpID4+IDgpCiAjZGVmaW5lIElQV19GV19NQUpPUih4KSAoeCAmIDB4ZmYpCiAKLSNkZWZpbmUgSVBXX0ZXX1ZFUlNJT04gKChJUFdfRldfTUlOT1JfVkVSU0lPTiA8PCA4KSB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBJUFdfRldfTUFKT1JfVkVSU0lPTikKKyNkZWZpbmUgSVBXX0ZXX1ZFUlNJT04gKChJUFdfRldfTUlOT1JfVkVSU0lPTiA8PCA4KSB8IElQV19GV19NQUpPUl9WRVJTSU9OKQogCiAjZGVmaW5lIElQV19GV19QUkVGSVggImlwdy0iIF9fc3RyaW5naWZ5KElQV19GV19NQUpPUl9WRVJTSU9OKSBcCiAiLiIgX19zdHJpbmdpZnkoSVBXX0ZXX01JTk9SX1ZFUlNJT04pICItIgpAQCAtMjEwNyw4ICsyODY4LDggQEAKIAogLy8gICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCi0JZm9yIChhZGRyID0gQ1gyX1NIQVJFRF9MT1dFUl9CT1VORDsKLQkgICAgIGFkZHIgPCBDWDJfUkVHSVNURVJfRE9NQUlOMV9FTkQ7IGFkZHIgKz0gNCkgeworCWZvciAoYWRkciA9IElQV19TSEFSRURfTE9XRVJfQk9VTkQ7CisJICAgICBhZGRyIDwgSVBXX1JFR0lTVEVSX0RPTUFJTjFfRU5EOyBhZGRyICs9IDQpIHsKIAkJaXB3X3dyaXRlMzIocHJpdiwgYWRkciwgMCk7CiAJfQogCkBAIC0yMTE3LDE2ICsyODc4LDE2IEBACiAJLyogZGVzdHJveSBETUEgcXVldWVzICovCiAJLyogcmVzZXQgc2VxdWVuY2UgKi8KIAotCWlwd193cml0ZV9yZWczMihwcml2LCBDWDJfTUVNX0hBTFRfQU5EX1JFU0VULCBDWDJfQklUX0hBTFRfUkVTRVRfT04pOworCWlwd193cml0ZV9yZWczMihwcml2LCBJUFdfTUVNX0hBTFRfQU5EX1JFU0VULCBJUFdfQklUX0hBTFRfUkVTRVRfT04pOwogCWlwd19hcmNfcmVsZWFzZShwcml2KTsKLQlpcHdfd3JpdGVfcmVnMzIocHJpdiwgQ1gyX01FTV9IQUxUX0FORF9SRVNFVCwgQ1gyX0JJVF9IQUxUX1JFU0VUX09GRik7CisJaXB3X3dyaXRlX3JlZzMyKHByaXYsIElQV19NRU1fSEFMVF9BTkRfUkVTRVQsIElQV19CSVRfSEFMVF9SRVNFVF9PRkYpOwogCW1kZWxheSgxKTsKIAogCS8qIHJlc2V0IFBIWSAqLwotCWlwd193cml0ZV9yZWczMihwcml2LCBDWDJfSU5URVJOQUxfQ01EX0VWRU5ULCBDWDJfQkFTRUJBTkRfUE9XRVJfRE9XTik7CisJaXB3X3dyaXRlX3JlZzMyKHByaXYsIElQV19JTlRFUk5BTF9DTURfRVZFTlQsIElQV19CQVNFQkFORF9QT1dFUl9ET1dOKTsKIAltZGVsYXkoMSk7CiAKLQlpcHdfd3JpdGVfcmVnMzIocHJpdiwgQ1gyX0lOVEVSTkFMX0NNRF9FVkVOVCwgMCk7CisJaXB3X3dyaXRlX3JlZzMyKHByaXYsIElQV19JTlRFUk5BTF9DTURfRVZFTlQsIDApOwogCW1kZWxheSgxKTsKIAogCS8qIGVuYWJsZSB1Y29kZSBzdG9yZSAqLwpAQCAtMjE0NCwxOCArMjkwNSwxOSBAQAogCSAqLwogCS8qIGxvYWQgbmV3IGlwdyB1Q29kZSAqLwogCWZvciAoaSA9IDA7IGkgPCBsZW4gLyAyOyBpKyspCi0JCWlwd193cml0ZV9yZWcxNihwcml2LCBDWDJfQkFTRUJBTkRfQ09OVFJPTF9TVE9SRSwgaW1hZ2VbaV0pOworCQlpcHdfd3JpdGVfcmVnMTYocHJpdiwgSVBXX0JBU0VCQU5EX0NPTlRST0xfU1RPUkUsCisJCQkJY3B1X3RvX2xlMTYoaW1hZ2VbaV0pKTsKIAogCS8qIGVuYWJsZSBESU5PICovCi0JaXB3X3dyaXRlX3JlZzgocHJpdiwgQ1gyX0JBU0VCQU5EX0NPTlRST0xfU1RBVFVTLCAwKTsKLQlpcHdfd3JpdGVfcmVnOChwcml2LCBDWDJfQkFTRUJBTkRfQ09OVFJPTF9TVEFUVVMsIERJTk9fRU5BQkxFX1NZU1RFTSk7CisJaXB3X3dyaXRlX3JlZzgocHJpdiwgSVBXX0JBU0VCQU5EX0NPTlRST0xfU1RBVFVTLCAwKTsKKwlpcHdfd3JpdGVfcmVnOChwcml2LCBJUFdfQkFTRUJBTkRfQ09OVFJPTF9TVEFUVVMsIERJTk9fRU5BQkxFX1NZU1RFTSk7CiAKIAkvKiB0aGlzIGlzIHdoZXJlIHRoZSBpZ3ggLyB3aW4gZHJpdmVyIGRldmVhdGVzIGZyb20gdGhlIFZBUCBkcml2ZXIuICovCiAKIAkvKiB3YWl0IGZvciBhbGl2ZSByZXNwb25zZSAqLwogCWZvciAoaSA9IDA7IGkgPCAxMDA7IGkrKykgewogCQkvKiBwb2xsIGZvciBpbmNvbWluZyBkYXRhICovCi0JCWNyID0gaXB3X3JlYWRfcmVnOChwcml2LCBDWDJfQkFTRUJBTkRfQ09OVFJPTF9TVEFUVVMpOworCQljciA9IGlwd19yZWFkX3JlZzgocHJpdiwgSVBXX0JBU0VCQU5EX0NPTlRST0xfU1RBVFVTKTsKIAkJaWYgKGNyICYgRElOT19SWEZJRk9fREFUQSkKIAkJCWJyZWFrOwogCQltZGVsYXkoMSk7CkBAIC0yMTY3LDcgKzI5MjksOCBAQAogCiAJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJlc3BvbnNlX2J1ZmZlcik7IGkrKykKIAkJCXJlc3BvbnNlX2J1ZmZlcltpXSA9Ci0JCQkgICAgaXB3X3JlYWRfcmVnMzIocHJpdiwgQ1gyX0JBU0VCQU5EX1JYX0ZJRk9fUkVBRCk7CisJCQkgICAgbGUzMl90b19jcHUoaXB3X3JlYWRfcmVnMzIocHJpdiwKKwkJCQkJCSAgICAgICBJUFdfQkFTRUJBTkRfUlhfRklGT19SRUFEKSk7CiAJCW1lbWNweSgmcHJpdi0+ZGlub19hbGl2ZSwgcmVzcG9uc2VfYnVmZmVyLAogCQkgICAgICAgc2l6ZW9mKHByaXYtPmRpbm9fYWxpdmUpKTsKIAkJaWYgKHByaXYtPmRpbm9fYWxpdmUuYWxpdmVfY29tbWFuZCA9PSAxCkBAIC0yMTk2LDcgKzI5NTksNyBAQAogCiAJLyogZGlzYWJsZSBESU5PLCBvdGhlcndpc2UgZm9yIHNvbWUgcmVhc29uCiAJICAgZmlybXdhcmUgaGF2ZSBwcm9ibGVtIGdldHRpbmcgYWxpdmUgcmVzcC4gKi8KLQlpcHdfd3JpdGVfcmVnOChwcml2LCBDWDJfQkFTRUJBTkRfQ09OVFJPTF9TVEFUVVMsIDApOworCWlwd193cml0ZV9yZWc4KHByaXYsIElQV19CQVNFQkFORF9DT05UUk9MX1NUQVRVUywgMCk7CiAKIC8vICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCkBAIC0yMjM2LDEzICsyOTk5LDE0IEBACiAJCSAqIG9mZmVzZXQqLwogCQkvKiBEbWEgbG9hZGluZyAqLwogCQlyYyA9IGlwd19md19kbWFfYWRkX2J1ZmZlcihwcml2LCBzaGFyZWRfcGh5cyArIG9mZnNldCwKLQkJCQkJICAgY2h1bmstPmFkZHJlc3MsIGNodW5rLT5sZW5ndGgpOworCQkJCQkgICBsZTMyX3RvX2NwdShjaHVuay0+YWRkcmVzcyksCisJCQkJCSAgIGxlMzJfdG9fY3B1KGNodW5rLT5sZW5ndGgpKTsKIAkJaWYgKHJjKSB7CiAJCQlJUFdfREVCVUdfSU5GTygiZG1hQWRkQnVmZmVyIEZhaWxlZFxuIik7CiAJCQlnb3RvIG91dDsKIAkJfQogCi0JCW9mZnNldCArPSBjaHVuay0+bGVuZ3RoOworCQlvZmZzZXQgKz0gbGUzMl90b19jcHUoY2h1bmstPmxlbmd0aCk7CiAJfSB3aGlsZSAob2Zmc2V0IDwgbGVuKTsKIAogCS8qIFJ1biB0aGUgRE1BIGFuZCB3YWl0IGZvciB0aGUgYW5zd2VyICovCkBAIC0yMjY4LDE2ICszMDMyLDE2IEBACiAJaW50IHJjID0gMDsKIAogCS8qIHN0b3AgKi8KLQlpcHdfd3JpdGUzMihwcml2LCBDWDJfUkVTRVRfUkVHLCBDWDJfUkVTRVRfUkVHX1NUT1BfTUFTVEVSKTsKKwlpcHdfd3JpdGUzMihwcml2LCBJUFdfUkVTRVRfUkVHLCBJUFdfUkVTRVRfUkVHX1NUT1BfTUFTVEVSKTsKIAotCXJjID0gaXB3X3BvbGxfYml0KHByaXYsIENYMl9SRVNFVF9SRUcsCi0JCQkgIENYMl9SRVNFVF9SRUdfTUFTVEVSX0RJU0FCTEVELCA1MDApOworCXJjID0gaXB3X3BvbGxfYml0KHByaXYsIElQV19SRVNFVF9SRUcsCisJCQkgIElQV19SRVNFVF9SRUdfTUFTVEVSX0RJU0FCTEVELCA1MDApOwogCWlmIChyYyA8IDApIHsKIAkJSVBXX0VSUk9SKCJ3YWl0IGZvciByZWcgbWFzdGVyIGRpc2FibGVkIGZhaWxlZFxuIik7CiAJCXJldHVybiByYzsKIAl9CiAKLQlpcHdfc2V0X2JpdChwcml2LCBDWDJfUkVTRVRfUkVHLCBDQkRfUkVTRVRfUkVHX1BSSU5DRVRPTl9SRVNFVCk7CisJaXB3X3NldF9iaXQocHJpdiwgSVBXX1JFU0VUX1JFRywgQ0JEX1JFU0VUX1JFR19QUklOQ0VUT05fUkVTRVQpOwogCiAJcmV0dXJuIHJjOwogfQpAQCAtMjI4NywxNCArMzA1MSwxNCBAQAogCUlQV19ERUJVR19UUkFDRSgiPj5cbiIpOwogCiAJLyogcHJ2SHdTdGFydE5pYyAgcmVsZWFzZSBBUkMgKi8KLQlpcHdfY2xlYXJfYml0KHByaXYsIENYMl9SRVNFVF9SRUcsCi0JCSAgICAgIENYMl9SRVNFVF9SRUdfTUFTVEVSX0RJU0FCTEVEIHwKLQkJICAgICAgQ1gyX1JFU0VUX1JFR19TVE9QX01BU1RFUiB8CisJaXB3X2NsZWFyX2JpdChwcml2LCBJUFdfUkVTRVRfUkVHLAorCQkgICAgICBJUFdfUkVTRVRfUkVHX01BU1RFUl9ESVNBQkxFRCB8CisJCSAgICAgIElQV19SRVNFVF9SRUdfU1RPUF9NQVNURVIgfAogCQkgICAgICBDQkRfUkVTRVRfUkVHX1BSSU5DRVRPTl9SRVNFVCk7CiAKIAkvKiBlbmFibGUgcG93ZXIgbWFuYWdlbWVudCAqLwotCWlwd19zZXRfYml0KHByaXYsIENYMl9HUF9DTlRSTF9SVywKLQkJICAgIENYMl9HUF9DTlRSTF9CSVRfSE9TVF9BTExPV1NfU1RBTkRCWSk7CisJaXB3X3NldF9iaXQocHJpdiwgSVBXX0dQX0NOVFJMX1JXLAorCQkgICAgSVBXX0dQX0NOVFJMX0JJVF9IT1NUX0FMTE9XU19TVEFOREJZKTsKIAogCUlQV19ERUJVR19UUkFDRSgiPDxcbiIpOwogfQpAQCAtMjMwNywyNSArMzA3MSwyNSBAQAogCS8qIHJlc2V0ICovCiAJLypwcnZId0luaXROaWMgKi8KIAkvKiBzZXQgImluaXRpYWxpemF0aW9uIGNvbXBsZXRlIiBiaXQgdG8gbW92ZSBhZGFwdGVyIHRvIEQwIHN0YXRlICovCi0JaXB3X3NldF9iaXQocHJpdiwgQ1gyX0dQX0NOVFJMX1JXLCBDWDJfR1BfQ05UUkxfQklUX0lOSVRfRE9ORSk7CisJaXB3X3NldF9iaXQocHJpdiwgSVBXX0dQX0NOVFJMX1JXLCBJUFdfR1BfQ05UUkxfQklUX0lOSVRfRE9ORSk7CiAKIAkvKiBsb3ctbGV2ZWwgUExMIGFjdGl2YXRpb24gKi8KLQlpcHdfd3JpdGUzMihwcml2LCBDWDJfUkVBRF9JTlRfUkVHSVNURVIsCi0JCSAgICBDWDJfQklUX0lOVF9IT1NUX1NSQU1fUkVBRF9JTlRfUkVHSVNURVIpOworCWlwd193cml0ZTMyKHByaXYsIElQV19SRUFEX0lOVF9SRUdJU1RFUiwKKwkJICAgIElQV19CSVRfSU5UX0hPU1RfU1JBTV9SRUFEX0lOVF9SRUdJU1RFUik7CiAKIAkvKiB3YWl0IGZvciBjbG9jayBzdGFiaWxpemF0aW9uICovCi0JcmMgPSBpcHdfcG9sbF9iaXQocHJpdiwgQ1gyX0dQX0NOVFJMX1JXLAotCQkJICBDWDJfR1BfQ05UUkxfQklUX0NMT0NLX1JFQURZLCAyNTApOworCXJjID0gaXB3X3BvbGxfYml0KHByaXYsIElQV19HUF9DTlRSTF9SVywKKwkJCSAgSVBXX0dQX0NOVFJMX0JJVF9DTE9DS19SRUFEWSwgMjUwKTsKIAlpZiAocmMgPCAwKQogCQlJUFdfREVCVUdfSU5GTygiRkFJTEVEIHdhaXQgZm9yIGNsb2NrIHN0YWJsaXphdGlvblxuIik7CiAKIAkvKiBhc3NlcnQgU1cgcmVzZXQgKi8KLQlpcHdfc2V0X2JpdChwcml2LCBDWDJfUkVTRVRfUkVHLCBDWDJfUkVTRVRfUkVHX1NXX1JFU0VUKTsKKwlpcHdfc2V0X2JpdChwcml2LCBJUFdfUkVTRVRfUkVHLCBJUFdfUkVTRVRfUkVHX1NXX1JFU0VUKTsKIAogCXVkZWxheSgxMCk7CiAKIAkvKiBzZXQgImluaXRpYWxpemF0aW9uIGNvbXBsZXRlIiBiaXQgdG8gbW92ZSBhZGFwdGVyIHRvIEQwIHN0YXRlICovCi0JaXB3X3NldF9iaXQocHJpdiwgQ1gyX0dQX0NOVFJMX1JXLCBDWDJfR1BfQ05UUkxfQklUX0lOSVRfRE9ORSk7CisJaXB3X3NldF9iaXQocHJpdiwgSVBXX0dQX0NOVFJMX1JXLCBJUFdfR1BfQ05UUkxfQklUX0lOSVRfRE9ORSk7CiAKIAlJUFdfREVCVUdfVFJBQ0UoIj4+XG4iKTsKIAlyZXR1cm4gMDsKQEAgLTIzMzcsMTQgKzMxMDEsMTkgQEAKIHN0YXRpYyBpbnQgaXB3X3Jlc2V0X25pYyhzdHJ1Y3QgaXB3X3ByaXYgKnByaXYpCiB7CiAJaW50IHJjID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJSVBXX0RFQlVHX1RSQUNFKCI+PlxuIik7CiAKIAlyYyA9IGlwd19pbml0X25pYyhwcml2KTsKIAorCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJLyogQ2xlYXIgdGhlICdob3N0IGNvbW1hbmQgYWN0aXZlJyBiaXQuLi4gKi8KIAlwcml2LT5zdGF0dXMgJj0gflNUQVRVU19IQ01EX0FDVElWRTsKIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPndhaXRfY29tbWFuZF9xdWV1ZSk7CisJcHJpdi0+c3RhdHVzICY9IH4oU1RBVFVTX1NDQU5OSU5HIHwgU1RBVFVTX1NDQU5fQUJPUlRJTkcpOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+d2FpdF9zdGF0ZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCiAJSVBXX0RFQlVHX1RSQUNFKCI8PFxuIik7CiAJcmV0dXJuIHJjOwpAQCAtMjM2NCwyMiArMzEzMywyMyBAQAogCX0KIAogCWhlYWRlciA9IChzdHJ1Y3QgZndfaGVhZGVyICopKCpmdyktPmRhdGE7Ci0JaWYgKElQV19GV19NQUpPUihoZWFkZXItPnZlcnNpb24pICE9IElQV19GV19NQUpPUl9WRVJTSU9OKSB7CisJaWYgKElQV19GV19NQUpPUihsZTMyX3RvX2NwdShoZWFkZXItPnZlcnNpb24pKSAhPSBJUFdfRldfTUFKT1JfVkVSU0lPTikgewogCQlJUFdfRVJST1IoIiclcycgZmlybXdhcmUgdmVyc2lvbiBub3QgY29tcGF0aWJsZSAoJWQgIT0gJWQpXG4iLAogCQkJICBuYW1lLAotCQkJICBJUFdfRldfTUFKT1IoaGVhZGVyLT52ZXJzaW9uKSwgSVBXX0ZXX01BSk9SX1ZFUlNJT04pOworCQkJICBJUFdfRldfTUFKT1IobGUzMl90b19jcHUoaGVhZGVyLT52ZXJzaW9uKSksCisJCQkgIElQV19GV19NQUpPUl9WRVJTSU9OKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJSVBXX0RFQlVHX0lORk8oIkxvYWRpbmcgZmlybXdhcmUgJyVzJyBmaWxlIHYlZC4lZCAoJXpkIGJ5dGVzKVxuIiwKIAkJICAgICAgIG5hbWUsCi0JCSAgICAgICBJUFdfRldfTUFKT1IoaGVhZGVyLT52ZXJzaW9uKSwKLQkJICAgICAgIElQV19GV19NSU5PUihoZWFkZXItPnZlcnNpb24pLAorCQkgICAgICAgSVBXX0ZXX01BSk9SKGxlMzJfdG9fY3B1KGhlYWRlci0+dmVyc2lvbikpLAorCQkgICAgICAgSVBXX0ZXX01JTk9SKGxlMzJfdG9fY3B1KGhlYWRlci0+dmVyc2lvbikpLAogCQkgICAgICAgKCpmdyktPnNpemUgLSBzaXplb2Yoc3RydWN0IGZ3X2hlYWRlcikpOwogCXJldHVybiAwOwogfQogCi0jZGVmaW5lIENYMl9SWF9CVUZfU0laRSAoMzAwMCkKKyNkZWZpbmUgSVBXX1JYX0JVRl9TSVpFICgzMDAwKQogCiBzdGF0aWMgaW5saW5lIHZvaWQgaXB3X3J4X3F1ZXVlX3Jlc2V0KHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwKIAkJCQkgICAgICBzdHJ1Y3QgaXB3X3J4X3F1ZXVlICpyeHEpCkBAIC0yMzk4LDggKzMxNjgsOSBAQAogCQkgKiB0byBhbiBTS0IsIHNvIHdlIG5lZWQgdG8gdW5tYXAgYW5kIGZyZWUgcG90ZW50aWFsIHN0b3JhZ2UgKi8KIAkJaWYgKHJ4cS0+cG9vbFtpXS5za2IgIT0gTlVMTCkgewogCQkJcGNpX3VubWFwX3NpbmdsZShwcml2LT5wY2lfZGV2LCByeHEtPnBvb2xbaV0uZG1hX2FkZHIsCi0JCQkJCSBDWDJfUlhfQlVGX1NJWkUsIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQkJCSBJUFdfUlhfQlVGX1NJWkUsIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCQlkZXZfa2ZyZWVfc2tiKHJ4cS0+cG9vbFtpXS5za2IpOworCQkJcnhxLT5wb29sW2ldLnNrYiA9IE5VTEw7CiAJCX0KIAkJbGlzdF9hZGRfdGFpbCgmcnhxLT5wb29sW2ldLmxpc3QsICZyeHEtPnJ4X3VzZWQpOwogCX0KQEAgLTI0MTcsNiArMzE4OCwxOSBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqYm9vdGZ3ID0gTlVMTDsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZpcm13YXJlID0gTlVMTDsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKnVjb2RlID0gTlVMTDsKKworc3RhdGljIHZvaWQgZnJlZV9maXJtd2FyZSh2b2lkKQoreworCWlmIChmd19sb2FkZWQpIHsKKwkJcmVsZWFzZV9maXJtd2FyZShib290ZncpOworCQlyZWxlYXNlX2Zpcm13YXJlKHVjb2RlKTsKKwkJcmVsZWFzZV9maXJtd2FyZShmaXJtd2FyZSk7CisJCWJvb3RmdyA9IHVjb2RlID0gZmlybXdhcmUgPSBOVUxMOworCQlmd19sb2FkZWQgPSAwOworCX0KK30KKyNlbHNlCisjZGVmaW5lIGZyZWVfZmlybXdhcmUoKSBkbyB7fSB3aGlsZSAoMCkKICNlbmRpZgogCiBzdGF0aWMgaW50IGlwd19sb2FkKHN0cnVjdCBpcHdfcHJpdiAqcHJpdikKQEAgLTI0NDUsMTAgKzMyMjksMTAgQEAKIAkJCXJjID0gaXB3X2dldF9mdyhwcml2LCAmZmlybXdhcmUsIElQV19GV19OQU1FKCJpYnNzIikpOwogCQkJYnJlYWs7CiAKLSNpZmRlZiBDT05GSUdfSVBXX1BST01JU0MKKyNpZmRlZiBDT05GSUdfSVBXMjIwMF9NT05JVE9SCiAJCWNhc2UgSVdfTU9ERV9NT05JVE9SOgogCQkJcmMgPSBpcHdfZ2V0X2Z3KHByaXYsICZ1Y29kZSwKLQkJCQkJSVBXX0ZXX05BTUUoImlic3NfdWNvZGUiKSk7CisJCQkJCUlQV19GV19OQU1FKCJzbmlmZmVyX3Vjb2RlIikpOwogCQkJaWYgKHJjKQogCQkJCWdvdG8gZXJyb3I7CiAKQEAgLTI0ODcsMTEgKzMyNzEsMTEgQEAKIAogICAgICAgcmV0cnk6CiAJLyogRW5zdXJlIGludGVycnVwdHMgYXJlIGRpc2FibGVkICovCi0JaXB3X3dyaXRlMzIocHJpdiwgQ1gyX0lOVEFfTUFTS19SLCB+Q1gyX0lOVEFfTUFTS19BTEwpOworCWlwd193cml0ZTMyKHByaXYsIElQV19JTlRBX01BU0tfUiwgfklQV19JTlRBX01BU0tfQUxMKTsKIAlwcml2LT5zdGF0dXMgJj0gflNUQVRVU19JTlRfRU5BQkxFRDsKIAogCS8qIGFjayBwZW5kaW5nIGludGVycnVwdHMgKi8KLQlpcHdfd3JpdGUzMihwcml2LCBDWDJfSU5UQV9SVywgQ1gyX0lOVEFfTUFTS19BTEwpOworCWlwd193cml0ZTMyKHByaXYsIElQV19JTlRBX1JXLCBJUFdfSU5UQV9NQVNLX0FMTCk7CiAKIAlpcHdfc3RvcF9uaWMocHJpdik7CiAKQEAgLTI1MDEsMTQgKzMyODUsMTQgQEAKIAkJZ290byBlcnJvcjsKIAl9CiAKLQlpcHdfemVyb19tZW1vcnkocHJpdiwgQ1gyX05JQ19TUkFNX0xPV0VSX0JPVU5ELAotCQkJQ1gyX05JQ19TUkFNX1VQUEVSX0JPVU5EIC0gQ1gyX05JQ19TUkFNX0xPV0VSX0JPVU5EKTsKKwlpcHdfemVyb19tZW1vcnkocHJpdiwgSVBXX05JQ19TUkFNX0xPV0VSX0JPVU5ELAorCQkJSVBXX05JQ19TUkFNX1VQUEVSX0JPVU5EIC0gSVBXX05JQ19TUkFNX0xPV0VSX0JPVU5EKTsKIAogCS8qIERNQSB0aGUgaW5pdGlhbCBib290IGZpcm13YXJlIGludG8gdGhlIGRldmljZSAqLwogCXJjID0gaXB3X2xvYWRfZmlybXdhcmUocHJpdiwgYm9vdGZ3LT5kYXRhICsgc2l6ZW9mKHN0cnVjdCBmd19oZWFkZXIpLAogCQkJICAgICAgIGJvb3Rmdy0+c2l6ZSAtIHNpemVvZihzdHJ1Y3QgZndfaGVhZGVyKSk7CiAJaWYgKHJjIDwgMCkgewotCQlJUFdfRVJST1IoIlVuYWJsZSB0byBsb2FkIGJvb3QgZmlybXdhcmVcbiIpOworCQlJUFdfRVJST1IoIlVuYWJsZSB0byBsb2FkIGJvb3QgZmlybXdhcmU6ICVkXG4iLCByYyk7CiAJCWdvdG8gZXJyb3I7CiAJfQogCkBAIC0yNTE2LDggKzMzMDAsOCBAQAogCWlwd19zdGFydF9uaWMocHJpdik7CiAKIAkvKiB3YWl0IGZvciB0aGUgZGV2aWNlIHRvIGZpbmlzaCBpdCdzIGluaXRpYWwgc3RhcnR1cCBzZXF1ZW5jZSAqLwotCXJjID0gaXB3X3BvbGxfYml0KHByaXYsIENYMl9JTlRBX1JXLAotCQkJICBDWDJfSU5UQV9CSVRfRldfSU5JVElBTElaQVRJT05fRE9ORSwgNTAwKTsKKwlyYyA9IGlwd19wb2xsX2JpdChwcml2LCBJUFdfSU5UQV9SVywKKwkJCSAgSVBXX0lOVEFfQklUX0ZXX0lOSVRJQUxJWkFUSU9OX0RPTkUsIDUwMCk7CiAJaWYgKHJjIDwgMCkgewogCQlJUFdfRVJST1IoImRldmljZSBmYWlsZWQgdG8gYm9vdCBpbml0aWFsIGZ3IGltYWdlXG4iKTsKIAkJZ290byBlcnJvcjsKQEAgLTI1MjUsMTMgKzMzMDksMTMgQEAKIAlJUFdfREVCVUdfSU5GTygiaW5pdGlhbCBkZXZpY2UgcmVzcG9uc2UgYWZ0ZXIgJWRtc1xuIiwgcmMpOwogCiAJLyogYWNrIGZ3IGluaXQgZG9uZSBpbnRlcnJ1cHQgKi8KLQlpcHdfd3JpdGUzMihwcml2LCBDWDJfSU5UQV9SVywgQ1gyX0lOVEFfQklUX0ZXX0lOSVRJQUxJWkFUSU9OX0RPTkUpOworCWlwd193cml0ZTMyKHByaXYsIElQV19JTlRBX1JXLCBJUFdfSU5UQV9CSVRfRldfSU5JVElBTElaQVRJT05fRE9ORSk7CiAKIAkvKiBETUEgdGhlIHVjb2RlIGludG8gdGhlIGRldmljZSAqLwogCXJjID0gaXB3X2xvYWRfdWNvZGUocHJpdiwgdWNvZGUtPmRhdGEgKyBzaXplb2Yoc3RydWN0IGZ3X2hlYWRlciksCiAJCQkgICAgdWNvZGUtPnNpemUgLSBzaXplb2Yoc3RydWN0IGZ3X2hlYWRlcikpOwogCWlmIChyYyA8IDApIHsKLQkJSVBXX0VSUk9SKCJVbmFibGUgdG8gbG9hZCB1Y29kZVxuIik7CisJCUlQV19FUlJPUigiVW5hYmxlIHRvIGxvYWQgdWNvZGU6ICVkXG4iLCByYyk7CiAJCWdvdG8gZXJyb3I7CiAJfQogCkBAIC0yNTQzLDcgKzMzMjcsNyBAQAogCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgZndfaGVhZGVyKSwKIAkJCSAgICAgICBmaXJtd2FyZS0+c2l6ZSAtIHNpemVvZihzdHJ1Y3QgZndfaGVhZGVyKSk7CiAJaWYgKHJjIDwgMCkgewotCQlJUFdfRVJST1IoIlVuYWJsZSB0byBsb2FkIGZpcm13YXJlXG4iKTsKKwkJSVBXX0VSUk9SKCJVbmFibGUgdG8gbG9hZCBmaXJtd2FyZTogJWRcbiIsIHJjKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKQEAgLTI1NTYsMTIgKzMzNDAsMTQgQEAKIAl9CiAKIAkvKiBFbnN1cmUgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgKi8KLQlpcHdfd3JpdGUzMihwcml2LCBDWDJfSU5UQV9NQVNLX1IsIH5DWDJfSU5UQV9NQVNLX0FMTCk7CisJaXB3X3dyaXRlMzIocHJpdiwgSVBXX0lOVEFfTUFTS19SLCB+SVBXX0lOVEFfTUFTS19BTEwpOworCS8qIGFjayBwZW5kaW5nIGludGVycnVwdHMgKi8KKwlpcHdfd3JpdGUzMihwcml2LCBJUFdfSU5UQV9SVywgSVBXX0lOVEFfTUFTS19BTEwpOwogCiAJLyoga2ljayBzdGFydCB0aGUgZGV2aWNlICovCiAJaXB3X3N0YXJ0X25pYyhwcml2KTsKIAotCWlmIChpcHdfcmVhZDMyKHByaXYsIENYMl9JTlRBX1JXKSAmIENYMl9JTlRBX0JJVF9QQVJJVFlfRVJST1IpIHsKKwlpZiAoaXB3X3JlYWQzMihwcml2LCBJUFdfSU5UQV9SVykgJiBJUFdfSU5UQV9CSVRfUEFSSVRZX0VSUk9SKSB7CiAJCWlmIChyZXRyaWVzID4gMCkgewogCQkJSVBXX1dBUk5JTkcoIlBhcml0eSBlcnJvci4gIFJldHJ5aW5nIGluaXQuXG4iKTsKIAkJCXJldHJpZXMtLTsKQEAgLTI1NzQsOCArMzM2MCw4IEBACiAJfQogCiAJLyogd2FpdCBmb3IgdGhlIGRldmljZSAqLwotCXJjID0gaXB3X3BvbGxfYml0KHByaXYsIENYMl9JTlRBX1JXLAotCQkJICBDWDJfSU5UQV9CSVRfRldfSU5JVElBTElaQVRJT05fRE9ORSwgNTAwKTsKKwlyYyA9IGlwd19wb2xsX2JpdChwcml2LCBJUFdfSU5UQV9SVywKKwkJCSAgSVBXX0lOVEFfQklUX0ZXX0lOSVRJQUxJWkFUSU9OX0RPTkUsIDUwMCk7CiAJaWYgKHJjIDwgMCkgewogCQlJUFdfRVJST1IoImRldmljZSBmYWlsZWQgdG8gc3RhcnQgYWZ0ZXIgNTAwbXNcbiIpOwogCQlnb3RvIGVycm9yOwpAQCAtMjU4Myw3ICszMzY5LDcgQEAKIAlJUFdfREVCVUdfSU5GTygiZGV2aWNlIHJlc3BvbnNlIGFmdGVyICVkbXNcbiIsIHJjKTsKIAogCS8qIGFjayBmdyBpbml0IGRvbmUgaW50ZXJydXB0ICovCi0JaXB3X3dyaXRlMzIocHJpdiwgQ1gyX0lOVEFfUlcsIENYMl9JTlRBX0JJVF9GV19JTklUSUFMSVpBVElPTl9ET05FKTsKKwlpcHdfd3JpdGUzMihwcml2LCBJUFdfSU5UQV9SVywgSVBXX0lOVEFfQklUX0ZXX0lOSVRJQUxJWkFUSU9OX0RPTkUpOwogCiAJLyogcmVhZCBlZXByb20gZGF0YSBhbmQgaW5pdGlhbGl6ZSB0aGUgZWVwcm9tIHJlZ2lvbiBvZiBzcmFtICovCiAJcHJpdi0+ZWVwcm9tX2RlbGF5ID0gMTsKQEAgLTI1OTUsMTAgKzMzODEsMTAgQEAKIAkvKiBFbnN1cmUgb3VyIHF1ZXVlIGhhcyB2YWxpZCBwYWNrZXRzICovCiAJaXB3X3J4X3F1ZXVlX3JlcGxlbmlzaChwcml2KTsKIAotCWlwd193cml0ZTMyKHByaXYsIENYMl9SWF9SRUFEX0lOREVYLCBwcml2LT5yeHEtPnJlYWQpOworCWlwd193cml0ZTMyKHByaXYsIElQV19SWF9SRUFEX0lOREVYLCBwcml2LT5yeHEtPnJlYWQpOwogCiAJLyogYWNrIHBlbmRpbmcgaW50ZXJydXB0cyAqLwotCWlwd193cml0ZTMyKHByaXYsIENYMl9JTlRBX1JXLCBDWDJfSU5UQV9NQVNLX0FMTCk7CisJaXB3X3dyaXRlMzIocHJpdiwgSVBXX0lOVEFfUlcsIElQV19JTlRBX01BU0tfQUxMKTsKIAogI2lmbmRlZiBDT05GSUdfUE0KIAlyZWxlYXNlX2Zpcm13YXJlKGJvb3Rmdyk7CkBAIC0yNzU1LDE2ICszNTQxLDE4IEBACiAJCXJldHVybjsKIAogCS8qIHNhbml0eSBjaGVjayAqLwotCWlmIChiZC0+dS5kYXRhLm51bV9jaHVua3MgPiBOVU1fVEZEX0NIVU5LUykgewotCQlJUFdfRVJST1IoIlRvbyBtYW55IGNodW5rczogJWlcbiIsIGJkLT51LmRhdGEubnVtX2NodW5rcyk7CisJaWYgKGxlMzJfdG9fY3B1KGJkLT51LmRhdGEubnVtX2NodW5rcykgPiBOVU1fVEZEX0NIVU5LUykgeworCQlJUFdfRVJST1IoIlRvbyBtYW55IGNodW5rczogJWlcbiIsCisJCQkgIGxlMzJfdG9fY3B1KGJkLT51LmRhdGEubnVtX2NodW5rcykpOwogCQkvKiogQHRvZG8gaXNzdWUgZmF0YWwgZXJyb3IsIGl0IGlzIHF1aXRlIHNlcmlvdXMgc2l0dWF0aW9uICovCiAJCXJldHVybjsKIAl9CiAKIAkvKiB1bm1hcCBjaHVua3MgaWYgYW55ICovCi0JZm9yIChpID0gMDsgaSA8IGJkLT51LmRhdGEubnVtX2NodW5rczsgaSsrKSB7Ci0JCXBjaV91bm1hcF9zaW5nbGUoZGV2LCBiZC0+dS5kYXRhLmNodW5rX3B0cltpXSwKLQkJCQkgYmQtPnUuZGF0YS5jaHVua19sZW5baV0sIFBDSV9ETUFfVE9ERVZJQ0UpOworCWZvciAoaSA9IDA7IGkgPCBsZTMyX3RvX2NwdShiZC0+dS5kYXRhLm51bV9jaHVua3MpOyBpKyspIHsKKwkJcGNpX3VubWFwX3NpbmdsZShkZXYsIGxlMzJfdG9fY3B1KGJkLT51LmRhdGEuY2h1bmtfcHRyW2ldKSwKKwkJCQkgbGUxNl90b19jcHUoYmQtPnUuZGF0YS5jaHVua19sZW5baV0pLAorCQkJCSBQQ0lfRE1BX1RPREVWSUNFKTsKIAkJaWYgKHR4cS0+dHhiW3R4cS0+cS5sYXN0X3VzZWRdKSB7CiAJCQlpZWVlODAyMTFfdHhiX2ZyZWUodHhxLT50eGJbdHhxLT5xLmxhc3RfdXNlZF0pOwogCQkJdHhxLT50eGJbdHhxLT5xLmxhc3RfdXNlZF0gPSBOVUxMOwpAQCAtMjgyMSwyMSArMzYwOSw2IEBACiAJaXB3X3F1ZXVlX3R4X2ZyZWUocHJpdiwgJnByaXYtPnR4cVszXSk7CiB9CiAKLXN0YXRpYyB2b2lkIGlubGluZSBfX21heWJlX3dha2VfdHgoc3RydWN0IGlwd19wcml2ICpwcml2KQotewotCWlmIChuZXRpZl9ydW5uaW5nKHByaXYtPm5ldF9kZXYpKSB7Ci0JCXN3aXRjaCAocHJpdi0+cG9ydF90eXBlKSB7Ci0JCWNhc2UgRENSX1RZUEVfTVVfQlNTOgotCQljYXNlIERDUl9UWVBFX01VX0lCU1M6Ci0JCQlpZiAoIShwcml2LT5zdGF0dXMgJiBTVEFUVVNfQVNTT0NJQVRFRCkpIHsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCX0KLQkJbmV0aWZfd2FrZV9xdWV1ZShwcml2LT5uZXRfZGV2KTsKLQl9Ci0KLX0KLQogc3RhdGljIGlubGluZSB2b2lkIGlwd19jcmVhdGVfYnNzaWQoc3RydWN0IGlwd19wcml2ICpwcml2LCB1OCAqIGJzc2lkKQogewogCS8qIEZpcnN0IDMgYnl0ZXMgYXJlIG1hbnVmYWN0dXJlciAqLwpAQCAtMjg5OCw3ICszNjcxLDEzIEBACiB7CiAJaW50IGVycjsKIAotCWlmICghKHByaXYtPnN0YXR1cyAmIChTVEFUVVNfQVNTT0NJQVRJTkcgfCBTVEFUVVNfQVNTT0NJQVRFRCkpKSB7CisJaWYgKHByaXYtPnN0YXR1cyAmIFNUQVRVU19BU1NPQ0lBVElORykgeworCQlJUFdfREVCVUdfQVNTT0MoIkRpc2Fzc29jaWF0aW5nIHdoaWxlIGFzc29jaWF0aW5nLlxuIik7CisJCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+ZGlzYXNzb2NpYXRlKTsKKwkJcmV0dXJuOworCX0KKworCWlmICghKHByaXYtPnN0YXR1cyAmIFNUQVRVU19BU1NPQ0lBVEVEKSkgewogCQlJUFdfREVCVUdfQVNTT0MoIkRpc2Fzc29jaWF0aW5nIHdoaWxlIG5vdCBhc3NvY2lhdGVkLlxuIik7CiAJCXJldHVybjsKIAl9CkBAIC0yOTE1LDYgKzM2OTQsNyBAQAogCQlwcml2LT5hc3NvY19yZXF1ZXN0LmFzc29jX3R5cGUgPSBIQ19ESVNBU1NPQ19RVUlFVDsKIAllbHNlCiAJCXByaXYtPmFzc29jX3JlcXVlc3QuYXNzb2NfdHlwZSA9IEhDX0RJU0FTU09DSUFURTsKKwogCWVyciA9IGlwd19zZW5kX2Fzc29jaWF0ZShwcml2LCAmcHJpdi0+YXNzb2NfcmVxdWVzdCk7CiAJaWYgKGVycikgewogCQlJUFdfREVCVUdfSEMoIkF0dGVtcHQgdG8gc2VuZCBbZGlzXWFzc29jaWF0ZSBjb21tYW5kICIKQEAgLTI5MjQsMjAgKzM3MDQsMjcgQEAKIAogfQogCi1zdGF0aWMgdm9pZCBpcHdfZGlzYXNzb2NpYXRlKHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IGlwd19kaXNhc3NvY2lhdGUodm9pZCAqZGF0YSkKIHsKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBkYXRhOworCWlmICghKHByaXYtPnN0YXR1cyAmIChTVEFUVVNfQVNTT0NJQVRFRCB8IFNUQVRVU19BU1NPQ0lBVElORykpKQorCQlyZXR1cm4gMDsKIAlpcHdfc2VuZF9kaXNhc3NvY2lhdGUoZGF0YSwgMCk7CisJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyB2b2lkIG5vdGlmeV93eF9hc3NvY19ldmVudChzdHJ1Y3QgaXB3X3ByaXYgKnByaXYpCitzdGF0aWMgdm9pZCBpcHdfYmdfZGlzYXNzb2NpYXRlKHZvaWQgKmRhdGEpCiB7Ci0JdW5pb24gaXdyZXFfZGF0YSB3cnF1OwotCXdycXUuYXBfYWRkci5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7Ci0JaWYgKHByaXYtPnN0YXR1cyAmIFNUQVRVU19BU1NPQ0lBVEVEKQotCQltZW1jcHkod3JxdS5hcF9hZGRyLnNhX2RhdGEsIHByaXYtPmJzc2lkLCBFVEhfQUxFTik7Ci0JZWxzZQotCQltZW1zZXQod3JxdS5hcF9hZGRyLnNhX2RhdGEsIDAsIEVUSF9BTEVOKTsKLQl3aXJlbGVzc19zZW5kX2V2ZW50KHByaXYtPm5ldF9kZXYsIFNJT0NHSVdBUCwgJndycXUsIE5VTEwpOworCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGRhdGE7CisJZG93bigmcHJpdi0+c2VtKTsKKwlpcHdfZGlzYXNzb2NpYXRlKGRhdGEpOworCXVwKCZwcml2LT5zZW0pOworfQorCitzdGF0aWMgdm9pZCBpcHdfc3lzdGVtX2NvbmZpZyh2b2lkICpkYXRhKQoreworCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGRhdGE7CisJaXB3X3NlbmRfc3lzdGVtX2NvbmZpZyhwcml2LCAmcHJpdi0+c3lzX2NvbmZpZyk7CiB9CiAKIHN0cnVjdCBpcHdfc3RhdHVzX2NvZGUgewpAQCAtMjk5Nyw3ICszNzg0LDcgQEAKIHsKIAlpbnQgaTsKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpcHdfc3RhdHVzX2NvZGVzKTsgaSsrKQotCQlpZiAoaXB3X3N0YXR1c19jb2Rlc1tpXS5zdGF0dXMgPT0gc3RhdHVzKQorCQlpZiAoaXB3X3N0YXR1c19jb2Rlc1tpXS5zdGF0dXMgPT0gKHN0YXR1cyAmIDB4ZmYpKQogCQkJcmV0dXJuIGlwd19zdGF0dXNfY29kZXNbaV0ucmVhc29uOwogCXJldHVybiAiVW5rbm93biBzdGF0dXMgdmFsdWUuIjsKIH0KQEAgLTMwNzYsMTggKzM4NjMsMzAgQEAKIAl3aGlsZSAoaSAmJiAhKG1hc2sgJiBpKSkKIAkJaSA+Pj0gMTsKIAlzd2l0Y2ggKGkpIHsKLQljYXNlIElFRUU4MDIxMV9DQ0tfUkFURV8xTUJfTUFTSzoJcmV0dXJuIDEwMDAwMDA7Ci0JY2FzZSBJRUVFODAyMTFfQ0NLX1JBVEVfMk1CX01BU0s6CXJldHVybiAyMDAwMDAwOwotCWNhc2UgSUVFRTgwMjExX0NDS19SQVRFXzVNQl9NQVNLOglyZXR1cm4gNTUwMDAwMDsKLQljYXNlIElFRUU4MDIxMV9PRkRNX1JBVEVfNk1CX01BU0s6CXJldHVybiA2MDAwMDAwOwotCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV85TUJfTUFTSzoJcmV0dXJuIDkwMDAwMDA7Ci0JY2FzZSBJRUVFODAyMTFfQ0NLX1JBVEVfMTFNQl9NQVNLOglyZXR1cm4gMTEwMDAwMDA7Ci0JY2FzZSBJRUVFODAyMTFfT0ZETV9SQVRFXzEyTUJfTUFTSzoJcmV0dXJuIDEyMDAwMDAwOwotCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV8xOE1CX01BU0s6CXJldHVybiAxODAwMDAwMDsKLQljYXNlIElFRUU4MDIxMV9PRkRNX1JBVEVfMjRNQl9NQVNLOglyZXR1cm4gMjQwMDAwMDA7Ci0JY2FzZSBJRUVFODAyMTFfT0ZETV9SQVRFXzM2TUJfTUFTSzoJcmV0dXJuIDM2MDAwMDAwOwotCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV80OE1CX01BU0s6CXJldHVybiA0ODAwMDAwMDsKLQljYXNlIElFRUU4MDIxMV9PRkRNX1JBVEVfNTRNQl9NQVNLOglyZXR1cm4gNTQwMDAwMDA7CisJY2FzZSBJRUVFODAyMTFfQ0NLX1JBVEVfMU1CX01BU0s6CisJCXJldHVybiAxMDAwMDAwOworCWNhc2UgSUVFRTgwMjExX0NDS19SQVRFXzJNQl9NQVNLOgorCQlyZXR1cm4gMjAwMDAwMDsKKwljYXNlIElFRUU4MDIxMV9DQ0tfUkFURV81TUJfTUFTSzoKKwkJcmV0dXJuIDU1MDAwMDA7CisJY2FzZSBJRUVFODAyMTFfT0ZETV9SQVRFXzZNQl9NQVNLOgorCQlyZXR1cm4gNjAwMDAwMDsKKwljYXNlIElFRUU4MDIxMV9PRkRNX1JBVEVfOU1CX01BU0s6CisJCXJldHVybiA5MDAwMDAwOworCWNhc2UgSUVFRTgwMjExX0NDS19SQVRFXzExTUJfTUFTSzoKKwkJcmV0dXJuIDExMDAwMDAwOworCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV8xMk1CX01BU0s6CisJCXJldHVybiAxMjAwMDAwMDsKKwljYXNlIElFRUU4MDIxMV9PRkRNX1JBVEVfMThNQl9NQVNLOgorCQlyZXR1cm4gMTgwMDAwMDA7CisJY2FzZSBJRUVFODAyMTFfT0ZETV9SQVRFXzI0TUJfTUFTSzoKKwkJcmV0dXJuIDI0MDAwMDAwOworCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV8zNk1CX01BU0s6CisJCXJldHVybiAzNjAwMDAwMDsKKwljYXNlIElFRUU4MDIxMV9PRkRNX1JBVEVfNDhNQl9NQVNLOgorCQlyZXR1cm4gNDgwMDAwMDA7CisJY2FzZSBJRUVFODAyMTFfT0ZETV9SQVRFXzU0TUJfTUFTSzoKKwkJcmV0dXJuIDU0MDAwMDAwOwogCX0KIAogCWlmIChwcml2LT5pZWVlLT5tb2RlID09IElFRUVfQikKQEAgLTMxMTUsMjUgKzM5MTQsMzUgQEAKIAkJcmV0dXJuIGlwd19nZXRfbWF4X3JhdGUocHJpdik7CiAKIAlzd2l0Y2ggKHJhdGUpIHsKLQljYXNlIElQV19UWF9SQVRFXzFNQjoJcmV0dXJuIDEwMDAwMDA7Ci0JY2FzZSBJUFdfVFhfUkFURV8yTUI6CXJldHVybiAyMDAwMDAwOwotCWNhc2UgSVBXX1RYX1JBVEVfNU1COglyZXR1cm4gNTUwMDAwMDsKLQljYXNlIElQV19UWF9SQVRFXzZNQjoJcmV0dXJuIDYwMDAwMDA7Ci0JY2FzZSBJUFdfVFhfUkFURV85TUI6CXJldHVybiA5MDAwMDAwOwotCWNhc2UgSVBXX1RYX1JBVEVfMTFNQjoJcmV0dXJuIDExMDAwMDAwOwotCWNhc2UgSVBXX1RYX1JBVEVfMTJNQjoJcmV0dXJuIDEyMDAwMDAwOwotCWNhc2UgSVBXX1RYX1JBVEVfMThNQjoJcmV0dXJuIDE4MDAwMDAwOwotCWNhc2UgSVBXX1RYX1JBVEVfMjRNQjoJcmV0dXJuIDI0MDAwMDAwOwotCWNhc2UgSVBXX1RYX1JBVEVfMzZNQjoJcmV0dXJuIDM2MDAwMDAwOwotCWNhc2UgSVBXX1RYX1JBVEVfNDhNQjoJcmV0dXJuIDQ4MDAwMDAwOwotCWNhc2UgSVBXX1RYX1JBVEVfNTRNQjoJcmV0dXJuIDU0MDAwMDAwOworCWNhc2UgSVBXX1RYX1JBVEVfMU1COgorCQlyZXR1cm4gMTAwMDAwMDsKKwljYXNlIElQV19UWF9SQVRFXzJNQjoKKwkJcmV0dXJuIDIwMDAwMDA7CisJY2FzZSBJUFdfVFhfUkFURV81TUI6CisJCXJldHVybiA1NTAwMDAwOworCWNhc2UgSVBXX1RYX1JBVEVfNk1COgorCQlyZXR1cm4gNjAwMDAwMDsKKwljYXNlIElQV19UWF9SQVRFXzlNQjoKKwkJcmV0dXJuIDkwMDAwMDA7CisJY2FzZSBJUFdfVFhfUkFURV8xMU1COgorCQlyZXR1cm4gMTEwMDAwMDA7CisJY2FzZSBJUFdfVFhfUkFURV8xMk1COgorCQlyZXR1cm4gMTIwMDAwMDA7CisJY2FzZSBJUFdfVFhfUkFURV8xOE1COgorCQlyZXR1cm4gMTgwMDAwMDA7CisJY2FzZSBJUFdfVFhfUkFURV8yNE1COgorCQlyZXR1cm4gMjQwMDAwMDA7CisJY2FzZSBJUFdfVFhfUkFURV8zNk1COgorCQlyZXR1cm4gMzYwMDAwMDA7CisJY2FzZSBJUFdfVFhfUkFURV80OE1COgorCQlyZXR1cm4gNDgwMDAwMDA7CisJY2FzZSBJUFdfVFhfUkFURV81NE1COgorCQlyZXR1cm4gNTQwMDAwMDA7CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKLSNkZWZpbmUgUEVSRkVDVF9SU1NJICgtNTApCi0jZGVmaW5lIFdPUlNUX1JTU0kgICAoLTg1KQogI2RlZmluZSBJUFdfU1RBVFNfSU5URVJWQUwgKDIgKiBIWikKIHN0YXRpYyB2b2lkIGlwd19nYXRoZXJfc3RhdHMoc3RydWN0IGlwd19wcml2ICpwcml2KQogewpAQCAtMzE0NSw2ICszOTU0LDcgQEAKIAlzMTYgcnNzaTsKIAl1MzIgYmVhY29uX3F1YWxpdHksIHNpZ25hbF9xdWFsaXR5LCB0eF9xdWFsaXR5LCByeF9xdWFsaXR5LAogCSAgICByYXRlX3F1YWxpdHk7CisJdTMyIG1heF9yYXRlOwogCiAJaWYgKCEocHJpdi0+c3RhdHVzICYgU1RBVFVTX0FTU09DSUFURUQpKSB7CiAJCXByaXYtPnF1YWxpdHkgPSAwOwpAQCAtMzIwMSw3ICs0MDExLDggQEAKIAkJCWJlYWNvbl9xdWFsaXR5LCBtaXNzZWRfYmVhY29uc19wZXJjZW50KTsKIAogCXByaXYtPmxhc3RfcmF0ZSA9IGlwd19nZXRfY3VycmVudF9yYXRlKHByaXYpOwotCXJhdGVfcXVhbGl0eSA9IHByaXYtPmxhc3RfcmF0ZSAqIDQwIC8gcHJpdi0+bGFzdF9yYXRlICsgNjA7CisJbWF4X3JhdGUgPSBpcHdfZ2V0X21heF9yYXRlKHByaXYpOworCXJhdGVfcXVhbGl0eSA9IHByaXYtPmxhc3RfcmF0ZSAqIDQwIC8gbWF4X3JhdGUgKyA2MDsKIAlJUFdfREVCVUdfU1RBVFMoIlJhdGUgcXVhbGl0eSA6ICUzZCUlICglZE1icylcbiIsCiAJCQlyYXRlX3F1YWxpdHksIHByaXYtPmxhc3RfcmF0ZSAvIDEwMDAwMDApOwogCkBAIC0zMjIyLDEzICs0MDMzLDIwIEBACiAJCQl0eF9xdWFsaXR5LCB0eF9mYWlsdXJlc19kZWx0YSwgdHhfcGFja2V0c19kZWx0YSk7CiAKIAlyc3NpID0gYXZlcmFnZV92YWx1ZSgmcHJpdi0+YXZlcmFnZV9yc3NpKTsKLQlpZiAocnNzaSA+IFBFUkZFQ1RfUlNTSSkKKwlzaWduYWxfcXVhbGl0eSA9CisJICAgICgxMDAgKgorCSAgICAgKHByaXYtPmllZWUtPnBlcmZlY3RfcnNzaSAtIHByaXYtPmllZWUtPndvcnN0X3Jzc2kpICoKKwkgICAgIChwcml2LT5pZWVlLT5wZXJmZWN0X3Jzc2kgLSBwcml2LT5pZWVlLT53b3JzdF9yc3NpKSAtCisJICAgICAocHJpdi0+aWVlZS0+cGVyZmVjdF9yc3NpIC0gcnNzaSkgKgorCSAgICAgKDE1ICogKHByaXYtPmllZWUtPnBlcmZlY3RfcnNzaSAtIHByaXYtPmllZWUtPndvcnN0X3Jzc2kpICsKKwkgICAgICA2MiAqIChwcml2LT5pZWVlLT5wZXJmZWN0X3Jzc2kgLSByc3NpKSkpIC8KKwkgICAgKChwcml2LT5pZWVlLT5wZXJmZWN0X3Jzc2kgLSBwcml2LT5pZWVlLT53b3JzdF9yc3NpKSAqCisJICAgICAocHJpdi0+aWVlZS0+cGVyZmVjdF9yc3NpIC0gcHJpdi0+aWVlZS0+d29yc3RfcnNzaSkpOworCWlmIChzaWduYWxfcXVhbGl0eSA+IDEwMCkKIAkJc2lnbmFsX3F1YWxpdHkgPSAxMDA7Ci0JZWxzZSBpZiAocnNzaSA8IFdPUlNUX1JTU0kpCisJZWxzZSBpZiAoc2lnbmFsX3F1YWxpdHkgPCAxKQogCQlzaWduYWxfcXVhbGl0eSA9IDA7Ci0JZWxzZQotCQlzaWduYWxfcXVhbGl0eSA9IChyc3NpIC0gV09SU1RfUlNTSSkgKiAxMDAgLwotCQkgICAgKFBFUkZFQ1RfUlNTSSAtIFdPUlNUX1JTU0kpOworCiAJSVBXX0RFQlVHX1NUQVRTKCJTaWduYWwgbGV2ZWwgOiAlM2QlJSAoJWQgZEJtKVxuIiwKIAkJCXNpZ25hbF9xdWFsaXR5LCByc3NpKTsKIApAQCAtMzI1Nyw2ICs0MDc1LDg1IEBACiAJCQkgICBJUFdfU1RBVFNfSU5URVJWQUwpOwogfQogCitzdGF0aWMgdm9pZCBpcHdfYmdfZ2F0aGVyX3N0YXRzKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gZGF0YTsKKwlkb3duKCZwcml2LT5zZW0pOworCWlwd19nYXRoZXJfc3RhdHMoZGF0YSk7CisJdXAoJnByaXYtPnNlbSk7Cit9CisKKy8qIE1pc3NlZCBiZWFjb24gYmVoYXZpb3I6CisgKiAxc3QgbWlzc2VkIC0+IHJvYW1pbmdfdGhyZXNob2xkLCBqdXN0IHdhaXQsIGRvbid0IGRvIGFueSBzY2FuL3JvYW0uCisgKiByb2FtaW5nX3RocmVzaG9sZCAtPiBkaXNhc3NvY2lhdGVfdGhyZXNob2xkLCBzY2FuIGFuZCByb2FtIGZvciBiZXR0ZXIgc2lnbmFsLgorICogQWJvdmUgZGlzYXNzb2NpYXRlIHRocmVzaG9sZCwgZ2l2ZSB1cCBhbmQgc3RvcCBzY2FubmluZy4KKyAqIFJvYW1pbmcgaXMgZGlzYWJsZWQgaWYgZGlzYXNzb2NpYXRlX3RocmVzaG9sZCA8PSByb2FtaW5nX3RocmVzaG9sZCAgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBpcHdfaGFuZGxlX21pc3NlZF9iZWFjb24oc3RydWN0IGlwd19wcml2ICpwcml2LAorCQkJCQkgICAgaW50IG1pc3NlZF9jb3VudCkKK3sKKwlwcml2LT5ub3RpZl9taXNzZWRfYmVhY29ucyA9IG1pc3NlZF9jb3VudDsKKworCWlmIChtaXNzZWRfY291bnQgPiBwcml2LT5kaXNhc3NvY2lhdGVfdGhyZXNob2xkICYmCisJICAgIHByaXYtPnN0YXR1cyAmIFNUQVRVU19BU1NPQ0lBVEVEKSB7CisJCS8qIElmIGFzc29jaWF0ZWQgYW5kIHdlJ3ZlIGhpdCB0aGUgbWlzc2VkCisJCSAqIGJlYWNvbiB0aHJlc2hvbGQsIGRpc2Fzc29jaWF0ZSwgdHVybgorCQkgKiBvZmYgcm9hbWluZywgYW5kIGFib3J0IGFueSBhY3RpdmUgc2NhbnMgKi8KKwkJSVBXX0RFQlVHKElQV19ETF9JTkZPIHwgSVBXX0RMX05PVElGIHwKKwkJCSAgSVBXX0RMX1NUQVRFIHwgSVBXX0RMX0FTU09DLAorCQkJICAiTWlzc2VkIGJlYWNvbjogJWQgLSBkaXNhc3NvY2lhdGVcbiIsIG1pc3NlZF9jb3VudCk7CisJCXByaXYtPnN0YXR1cyAmPSB+U1RBVFVTX1JPQU1JTkc7CisJCWlmIChwcml2LT5zdGF0dXMgJiBTVEFUVVNfU0NBTk5JTkcpIHsKKwkJCUlQV19ERUJVRyhJUFdfRExfSU5GTyB8IElQV19ETF9OT1RJRiB8CisJCQkJICBJUFdfRExfU1RBVEUsCisJCQkJICAiQWJvcnRpbmcgc2NhbiB3aXRoIG1pc3NlZCBiZWFjb24uXG4iKTsKKwkJCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+YWJvcnRfc2Nhbik7CisJCX0KKworCQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPmRpc2Fzc29jaWF0ZSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAocHJpdi0+c3RhdHVzICYgU1RBVFVTX1JPQU1JTkcpIHsKKwkJLyogSWYgd2UgYXJlIGN1cnJlbnRseSByb2FtaW5nLCB0aGVuIGp1c3QKKwkJICogcHJpbnQgYSBkZWJ1ZyBzdGF0ZW1lbnQuLi4gKi8KKwkJSVBXX0RFQlVHKElQV19ETF9OT1RJRiB8IElQV19ETF9TVEFURSwKKwkJCSAgIk1pc3NlZCBiZWFjb246ICVkIC0gcm9hbSBpbiBwcm9ncmVzc1xuIiwKKwkJCSAgbWlzc2VkX2NvdW50KTsKKwkJcmV0dXJuOworCX0KKworCWlmIChtaXNzZWRfY291bnQgPiBwcml2LT5yb2FtaW5nX3RocmVzaG9sZCAmJgorCSAgICBtaXNzZWRfY291bnQgPD0gcHJpdi0+ZGlzYXNzb2NpYXRlX3RocmVzaG9sZCkgeworCQkvKiBJZiB3ZSBhcmUgbm90IGFscmVhZHkgcm9hbWluZywgc2V0IHRoZSBST0FNCisJCSAqIGJpdCBpbiB0aGUgc3RhdHVzIGFuZCBraWNrIG9mZiBhIHNjYW4uCisJCSAqIFRoaXMgY2FuIGhhcHBlbiBzZXZlcmFsIHRpbWVzIGJlZm9yZSB3ZSByZWFjaAorCQkgKiBkaXNhc3NvY2lhdGVfdGhyZXNob2xkLiAqLworCQlJUFdfREVCVUcoSVBXX0RMX05PVElGIHwgSVBXX0RMX1NUQVRFLAorCQkJICAiTWlzc2VkIGJlYWNvbjogJWQgLSBpbml0aWF0ZSAiCisJCQkgICJyb2FtaW5nXG4iLCBtaXNzZWRfY291bnQpOworCQlpZiAoIShwcml2LT5zdGF0dXMgJiBTVEFUVVNfUk9BTUlORykpIHsKKwkJCXByaXYtPnN0YXR1cyB8PSBTVEFUVVNfUk9BTUlORzsKKwkJCWlmICghKHByaXYtPnN0YXR1cyAmIFNUQVRVU19TQ0FOTklORykpCisJCQkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsCisJCQkJCSAgICZwcml2LT5yZXF1ZXN0X3NjYW4pOworCQl9CisJCXJldHVybjsKKwl9CisKKwlpZiAocHJpdi0+c3RhdHVzICYgU1RBVFVTX1NDQU5OSU5HKSB7CisJCS8qIFN0b3Agc2NhbiB0byBrZWVwIGZ3IGZyb20gZ2V0dGluZworCQkgKiBzdHVjayAob25seSBpZiB3ZSBhcmVuJ3Qgcm9hbWluZyAtLQorCQkgKiBvdGhlcndpc2Ugd2UnbGwgbmV2ZXIgc2NhbiBtb3JlIHRoYW4gMiBvciAzCisJCSAqIGNoYW5uZWxzLi4pICovCisJCUlQV19ERUJVRyhJUFdfRExfSU5GTyB8IElQV19ETF9OT1RJRiB8IElQV19ETF9TVEFURSwKKwkJCSAgIkFib3J0aW5nIHNjYW4gd2l0aCBtaXNzZWQgYmVhY29uLlxuIik7CisJCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+YWJvcnRfc2Nhbik7CisJfQorCisJSVBXX0RFQlVHX05PVElGKCJNaXNzZWQgYmVhY29uOiAlZFxuIiwgbWlzc2VkX2NvdW50KTsKKworfQorCiAvKioKICAqIEhhbmRsZSBob3N0IG5vdGlmaWNhdGlvbiBwYWNrZXQuCiAgKiBDYWxsZWQgZnJvbSBpbnRlcnJ1cHQgcm91dGluZQpAQCAtMzI2NCw2ICs0MTYxLDggQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpcHdfcnhfbm90aWZpY2F0aW9uKHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwKIAkJCQkgICAgICAgc3RydWN0IGlwd19yeF9ub3RpZmljYXRpb24gKm5vdGlmKQogeworCW5vdGlmLT5zaXplID0gbGUxNl90b19jcHUobm90aWYtPnNpemUpOworCiAJSVBXX0RFQlVHX05PVElGKCJ0eXBlID0gJWkgKCVkIGJ5dGVzKVxuIiwgbm90aWYtPnN1YnR5cGUsIG5vdGlmLT5zaXplKTsKIAogCXN3aXRjaCAobm90aWYtPnN1YnR5cGUpIHsKQEAgLTMzMDcsMzAgKzQyMDYsNDQgQEAKIAogCQkJCQlwcml2LT5zdGF0dXMgJj0gflNUQVRVU19BU1NPQ0lBVElORzsKIAkJCQkJcHJpdi0+c3RhdHVzIHw9IFNUQVRVU19BU1NPQ0lBVEVEOworCQkJCQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwKKwkJCQkJCSAgICZwcml2LT5zeXN0ZW1fY29uZmlnKTsKIAotCQkJCQluZXRpZl9jYXJyaWVyX29uKHByaXYtPm5ldF9kZXYpOwotCQkJCQlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChwcml2LT5uZXRfZGV2KSkgewotCQkJCQkJSVBXX0RFQlVHX05PVElGCi0JCQkJCQkgICAgKCJ3YWtpbmcgcXVldWVcbiIpOwotCQkJCQkJbmV0aWZfd2FrZV9xdWV1ZShwcml2LT5uZXRfZGV2KTsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCUlQV19ERUJVR19OT1RJRgotCQkJCQkJICAgICgic3RhcnRpbmcgcXVldWVcbiIpOwotCQkJCQkJbmV0aWZfc3RhcnRfcXVldWUocHJpdi0+Ci0JCQkJCQkJCSAgbmV0X2Rldik7CisjaWZkZWYgQ09ORklHX0lQV19RT1MKKyNkZWZpbmUgSVBXX0dFVF9QQUNLRVRfU1RZUEUoeCkgV0xBTl9GQ19HRVRfU1RZUEUoIFwKKwkJCSBsZTE2X3RvX2NwdSgoKHN0cnVjdCBpZWVlODAyMTFfaGRyICopKHgpKS0+ZnJhbWVfY3RsKSkKKwkJCQkJaWYgKChwcml2LT5zdGF0dXMgJiBTVEFUVVNfQVVUSCkgJiYKKwkJCQkJICAgIChJUFdfR0VUX1BBQ0tFVF9TVFlQRSgmbm90aWYtPnUucmF3KQorCQkJCQkgICAgID09IElFRUU4MDIxMV9TVFlQRV9BU1NPQ19SRVNQKSkgeworCQkJCQkJaWYgKChzaXplb2YKKwkJCQkJCSAgICAgKHN0cnVjdAorCQkJCQkJICAgICAgaWVlZTgwMjExX2Fzc29jX3Jlc3BvbnNlKQorCQkJCQkJICAgICA8PSBub3RpZi0+c2l6ZSkKKwkJCQkJCSAgICAmJiAobm90aWYtPnNpemUgPD0gMjMxNCkpIHsKKwkJCQkJCQlzdHJ1Y3QKKwkJCQkJCQlpZWVlODAyMTFfcnhfc3RhdHMKKwkJCQkJCQkgICAgc3RhdHMgPSB7CisJCQkJCQkJCS5sZW4gPQorCQkJCQkJCQkgICAgbm90aWYtPgorCQkJCQkJCQkgICAgc2l6ZSAtIDEsCisJCQkJCQkJfTsKKworCQkJCQkJCUlQV19ERUJVR19RT1MKKwkJCQkJCQkgICAgKCJRb1MgQXNzb2NpYXRlICIKKwkJCQkJCQkgICAgICJzaXplICVkXG4iLAorCQkJCQkJCSAgICAgbm90aWYtPnNpemUpOworCQkJCQkJCWllZWU4MDIxMV9yeF9tZ3QocHJpdi0+CisJCQkJCQkJCQkgaWVlZSwKKwkJCQkJCQkJCSAoc3RydWN0CisJCQkJCQkJCQkgIGllZWU4MDIxMV9oZHJfNGFkZHIKKwkJCQkJCQkJCSAgKikKKwkJCQkJCQkJCSAmbm90aWYtPnUucmF3LCAmc3RhdHMpOworCQkJCQkJfQogCQkJCQl9CisjZW5kaWYKIAotCQkJCQlpcHdfcmVzZXRfc3RhdHMocHJpdik7Ci0JCQkJCS8qIEVuc3VyZSB0aGUgcmF0ZSBpcyB1cGRhdGVkIGltbWVkaWF0ZWx5ICovCi0JCQkJCXByaXYtPmxhc3RfcmF0ZSA9Ci0JCQkJCSAgICBpcHdfZ2V0X2N1cnJlbnRfcmF0ZShwcml2KTsKLQkJCQkJc2NoZWR1bGVfd29yaygmcHJpdi0+Z2F0aGVyX3N0YXRzKTsKLQkJCQkJbm90aWZ5X3d4X2Fzc29jX2V2ZW50KHByaXYpOworCQkJCQlzY2hlZHVsZV93b3JrKCZwcml2LT5saW5rX3VwKTsKIAotLyoJCQlxdWV1ZV9kZWxheWVkX3dvcmsocHJpdi0+d29ya3F1ZXVlLAotCQkJCQkgICAmcHJpdi0+cmVxdWVzdF9zY2FuLAotCQkJCQkgICBTQ0FOX0FTU09DSUFURURfSU5URVJWQUwpOwotKi8KIAkJCQkJYnJlYWs7CiAJCQkJfQogCkBAIC0zMzYzLDEyICs0Mjc2LDcgQEAKIAkJCQkJCSAgICAgIFNUQVRVU19BVVRIIHwKIAkJCQkJCSAgICAgIFNUQVRVU19BU1NPQ0lBVEVEKTsKIAotCQkJCQkJbmV0aWZfY2Fycmllcl9vZmYocHJpdi0+Ci0JCQkJCQkJCSAgbmV0X2Rldik7Ci0JCQkJCQluZXRpZl9zdG9wX3F1ZXVlKHByaXYtPm5ldF9kZXYpOwotCQkJCQkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsCi0JCQkJCQkJICAgJnByaXYtPnJlcXVlc3Rfc2Nhbik7Ci0JCQkJCQlub3RpZnlfd3hfYXNzb2NfZXZlbnQocHJpdik7CisJCQkJCQlzY2hlZHVsZV93b3JrKCZwcml2LT5saW5rX2Rvd24pOwogCQkJCQkJYnJlYWs7CiAJCQkJCX0KIApAQCAtMzM4Myw2ICs0MjkxLDI0IEBACiAJCQkJfQogCiAJCQljYXNlIENNQVNfSU5JVDp7CisJCQkJCWlmIChwcml2LT5zdGF0dXMgJiBTVEFUVVNfQVVUSCkgeworCQkJCQkJc3RydWN0CisJCQkJCQkgICAgaWVlZTgwMjExX2Fzc29jX3Jlc3BvbnNlCisJCQkJCQkqcmVzcDsKKwkJCQkJCXJlc3AgPQorCQkJCQkJICAgIChzdHJ1Y3QKKwkJCQkJCSAgICAgaWVlZTgwMjExX2Fzc29jX3Jlc3BvbnNlCisJCQkJCQkgICAgICopJm5vdGlmLT51LnJhdzsKKwkJCQkJCUlQV19ERUJVRyhJUFdfRExfTk9USUYgfAorCQkJCQkJCSAgSVBXX0RMX1NUQVRFIHwKKwkJCQkJCQkgIElQV19ETF9BU1NPQywKKwkJCQkJCQkgICJhc3NvY2lhdGlvbiBmYWlsZWQgKDB4JTA0WCk6ICVzXG4iLAorCQkJCQkJCSAgbnRvaHMocmVzcC0+c3RhdHVzKSwKKwkJCQkJCQkgIGlwd19nZXRfc3RhdHVzX2NvZGUKKwkJCQkJCQkgIChudG9ocworCQkJCQkJCSAgIChyZXNwLT5zdGF0dXMpKSk7CisJCQkJCX0KKwogCQkJCQlJUFdfREVCVUcoSVBXX0RMX05PVElGIHwgSVBXX0RMX1NUQVRFIHwKIAkJCQkJCSAgSVBXX0RMX0FTU09DLAogCQkJCQkJICAiZGlzYXNzb2NpYXRlZDogJyVzJyAiIE1BQ19GTVQKQEAgLTMzOTUsMzUgKzQzMjEsMjEgQEAKIAkJCQkJICAgIH4oU1RBVFVTX0RJU0FTU09DSUFUSU5HIHwKIAkJCQkJICAgICAgU1RBVFVTX0FTU09DSUFUSU5HIHwKIAkJCQkJICAgICAgU1RBVFVTX0FTU09DSUFURUQgfCBTVEFUVVNfQVVUSCk7CisJCQkJCWlmIChwcml2LT5hc3NvY19uZXR3b3JrCisJCQkJCSAgICAmJiAocHJpdi0+YXNzb2NfbmV0d29yay0+CisJCQkJCQljYXBhYmlsaXR5ICYKKwkJCQkJCVdMQU5fQ0FQQUJJTElUWV9JQlNTKSkKKwkJCQkJCWlwd19yZW1vdmVfY3VycmVudF9uZXR3b3JrCisJCQkJCQkgICAgKHByaXYpOwogCi0JCQkJCW5ldGlmX3N0b3BfcXVldWUocHJpdi0+bmV0X2Rldik7Ci0JCQkJCWlmICghKHByaXYtPnN0YXR1cyAmIFNUQVRVU19ST0FNSU5HKSkgewotCQkJCQkJbmV0aWZfY2Fycmllcl9vZmYocHJpdi0+Ci0JCQkJCQkJCSAgbmV0X2Rldik7Ci0JCQkJCQlub3RpZnlfd3hfYXNzb2NfZXZlbnQocHJpdik7CisJCQkJCXNjaGVkdWxlX3dvcmsoJnByaXYtPmxpbmtfZG93bik7CiAKLQkJCQkJCS8qIENhbmNlbCBhbnkgcXVldWVkIHdvcmsgLi4uICovCi0JCQkJCQljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT4KLQkJCQkJCQkJICAgIHJlcXVlc3Rfc2Nhbik7Ci0JCQkJCQljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT4KLQkJCQkJCQkJICAgIGFkaG9jX2NoZWNrKTsKLQotCQkJCQkJLyogUXVldWUgdXAgYW5vdGhlciBzY2FuLi4uICovCi0JCQkJCQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwKLQkJCQkJCQkgICAmcHJpdi0+cmVxdWVzdF9zY2FuKTsKLQotCQkJCQkJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+Ci0JCQkJCQkJCSAgICBnYXRoZXJfc3RhdHMpOwotCQkJCQl9IGVsc2UgewotCQkJCQkJcHJpdi0+c3RhdHVzIHw9IFNUQVRVU19ST0FNSU5HOwotCQkJCQkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsCi0JCQkJCQkJICAgJnByaXYtPnJlcXVlc3Rfc2Nhbik7Ci0JCQkJCX0KLQotCQkJCQlpcHdfcmVzZXRfc3RhdHMocHJpdik7CiAJCQkJCWJyZWFrOwogCQkJCX0KIAorCQkJY2FzZSBDTUFTX1JYX0FTU09DX1JFU1A6CisJCQkJYnJlYWs7CisKIAkJCWRlZmF1bHQ6CiAJCQkJSVBXX0VSUk9SKCJhc3NvYzogdW5rbm93biAoJWQpXG4iLAogCQkJCQkgIGFzc29jLT5zdGF0ZSk7CkBAIC0zNDY2LDExICs0Mzc4LDcgQEAKIAkJCQkJCSAgU1RBVFVTX0FVVEggfAogCQkJCQkJICBTVEFUVVNfQVNTT0NJQVRFRCk7CiAKLQkJCQluZXRpZl9jYXJyaWVyX29mZihwcml2LT5uZXRfZGV2KTsKLQkJCQluZXRpZl9zdG9wX3F1ZXVlKHByaXYtPm5ldF9kZXYpOwotCQkJCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLAotCQkJCQkgICAmcHJpdi0+cmVxdWVzdF9zY2FuKTsKLQkJCQlub3RpZnlfd3hfYXNzb2NfZXZlbnQocHJpdik7CisJCQkJc2NoZWR1bGVfd29yaygmcHJpdi0+bGlua19kb3duKTsKIAkJCQlicmVhazsKIAogCQkJY2FzZSBDTUFTX1RYX0FVVEhfU0VRXzE6CkBAIC0zNTEyLDYgKzQ0MjAsNyBAQAogCQkJY2FzZSBDTUFTX1JYX0FTU09DX1JFU1A6CiAJCQkJSVBXX0RFQlVHKElQV19ETF9OT1RJRiB8IElQV19ETF9TVEFURSB8CiAJCQkJCSAgSVBXX0RMX0FTU09DLCAiUlhfQVNTT0NfUkVTUFxuIik7CisKIAkJCQlicmVhazsKIAkJCWNhc2UgQ01BU19BU1NPQ0lBVEVEOgogCQkJCUlQV19ERUJVRyhJUFdfRExfTk9USUYgfCBJUFdfRExfU1RBVEUgfApAQCAtMzU1Niw0MyArNDQ2NSw2NyBAQAogCQkJcHJpdi0+c3RhdHVzICY9CiAJCQkgICAgfihTVEFUVVNfU0NBTk5JTkcgfCBTVEFUVVNfU0NBTl9BQk9SVElORyk7CiAKKwkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+d2FpdF9zdGF0ZSk7CiAJCQljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT5zY2FuX2NoZWNrKTsKIAorCQkJaWYgKHByaXYtPnN0YXR1cyAmIFNUQVRVU19FWElUX1BFTkRJTkcpCisJCQkJYnJlYWs7CisKKwkJCXByaXYtPmllZWUtPnNjYW5zKys7CisKKyNpZmRlZiBDT05GSUdfSVBXMjIwMF9NT05JVE9SCisJCQlpZiAocHJpdi0+aWVlZS0+aXdfbW9kZSA9PSBJV19NT0RFX01PTklUT1IpIHsKKwkJCQlwcml2LT5zdGF0dXMgfD0gU1RBVFVTX1NDQU5fRk9SQ0VEOworCQkJCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLAorCQkJCQkgICAmcHJpdi0+cmVxdWVzdF9zY2FuKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXByaXYtPnN0YXR1cyAmPSB+U1RBVFVTX1NDQU5fRk9SQ0VEOworI2VuZGlmCQkJCS8qIENPTkZJR19JUFcyMjAwX01PTklUT1IgKi8KKwogCQkJaWYgKCEocHJpdi0+c3RhdHVzICYgKFNUQVRVU19BU1NPQ0lBVEVEIHwKIAkJCQkJICAgICAgU1RBVFVTX0FTU09DSUFUSU5HIHwKIAkJCQkJICAgICAgU1RBVFVTX1JPQU1JTkcgfAogCQkJCQkgICAgICBTVEFUVVNfRElTQVNTT0NJQVRJTkcpKSkKIAkJCQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPmFzc29jaWF0ZSk7CiAJCQllbHNlIGlmIChwcml2LT5zdGF0dXMgJiBTVEFUVVNfUk9BTUlORykgewotCQkJCS8qIElmIGEgc2NhbiBjb21wbGV0ZWQgYW5kIHdlIGFyZSBpbiByb2FtIG1vZGUsIHRoZW4KLQkJCQkgKiB0aGUgc2NhbiB0aGF0IGNvbXBsZXRlZCB3YXMgdGhlIG9uZSByZXF1ZXN0ZWQgYXMgYQotCQkJCSAqIHJlc3VsdCBvZiBlbnRlcmluZyByb2FtLi4uIHNvLCBzY2hlZHVsZSB0aGUKLQkJCQkgKiByb2FtIHdvcmsgKi8KLQkJCQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnJvYW0pOworCQkJCWlmICh4LT5zdGF0dXMgPT0gU0NBTl9DT01QTEVURURfU1RBVFVTX0NPTVBMRVRFKQorCQkJCQkvKiBJZiBhIHNjYW4gY29tcGxldGVkIGFuZCB3ZSBhcmUgaW4gcm9hbSBtb2RlLCB0aGVuCisJCQkJCSAqIHRoZSBzY2FuIHRoYXQgY29tcGxldGVkIHdhcyB0aGUgb25lIHJlcXVlc3RlZCBhcyBhCisJCQkJCSAqIHJlc3VsdCBvZiBlbnRlcmluZyByb2FtLi4uIHNvLCBzY2hlZHVsZSB0aGUKKwkJCQkJICogcm9hbSB3b3JrICovCisJCQkJCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLAorCQkJCQkJICAgJnByaXYtPnJvYW0pOworCQkJCWVsc2UKKwkJCQkJLyogRG9uJ3Qgc2NoZWR1bGUgaWYgd2UgYWJvcnRlZCB0aGUgc2NhbiAqLworCQkJCQlwcml2LT5zdGF0dXMgJj0gflNUQVRVU19ST0FNSU5HOwogCQkJfSBlbHNlIGlmIChwcml2LT5zdGF0dXMgJiBTVEFUVVNfU0NBTl9QRU5ESU5HKQogCQkJCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLAogCQkJCQkgICAmcHJpdi0+cmVxdWVzdF9zY2FuKTsKLQotCQkJcHJpdi0+aWVlZS0+c2NhbnMrKzsKKwkJCWVsc2UgaWYgKHByaXYtPmNvbmZpZyAmIENGR19CQUNLR1JPVU5EX1NDQU4KKwkJCQkgJiYgcHJpdi0+c3RhdHVzICYgU1RBVFVTX0FTU09DSUFURUQpCisJCQkJcXVldWVfZGVsYXllZF93b3JrKHByaXYtPndvcmtxdWV1ZSwKKwkJCQkJCSAgICZwcml2LT5yZXF1ZXN0X3NjYW4sIEhaKTsKIAkJCWJyZWFrOwogCQl9CiAKIAljYXNlIEhPU1RfTk9USUZJQ0FUSU9OX1NUQVRVU19GUkFHX0xFTkdUSDp7CiAJCQlzdHJ1Y3Qgbm90aWZfZnJhZ19sZW5ndGggKnggPSAmbm90aWYtPnUuZnJhZ19sZW47CiAKLQkJCWlmIChub3RpZi0+c2l6ZSA9PSBzaXplb2YoKngpKSB7Ci0JCQkJSVBXX0VSUk9SKCJGcmFnIGxlbmd0aDogJWRcbiIsIHgtPmZyYWdfbGVuZ3RoKTsKLQkJCX0gZWxzZSB7CisJCQlpZiAobm90aWYtPnNpemUgPT0gc2l6ZW9mKCp4KSkKKwkJCQlJUFdfRVJST1IoIkZyYWcgbGVuZ3RoOiAlZFxuIiwKKwkJCQkJICBsZTE2X3RvX2NwdSh4LT5mcmFnX2xlbmd0aCkpOworCQkJZWxzZQogCQkJCUlQV19FUlJPUigiRnJhZyBsZW5ndGggb2Ygd3Jvbmcgc2l6ZSAlZCAiCiAJCQkJCSAgIihzaG91bGQgYmUgJXpkKVxuIiwKIAkJCQkJICBub3RpZi0+c2l6ZSwgc2l6ZW9mKCp4KSk7Ci0JCQl9CiAJCQlicmVhazsKIAkJfQogCiAJY2FzZSBIT1NUX05PVElGSUNBVElPTl9TVEFUVVNfTElOS19ERVRFUklPUkFUSU9OOnsKIAkJCXN0cnVjdCBub3RpZl9saW5rX2RldGVyaW9yYXRpb24gKnggPQogCQkJICAgICZub3RpZi0+dS5saW5rX2RldGVyaW9yYXRpb247CisKIAkJCWlmIChub3RpZi0+c2l6ZSA9PSBzaXplb2YoKngpKSB7CiAJCQkJSVBXX0RFQlVHKElQV19ETF9OT1RJRiB8IElQV19ETF9TVEFURSwKIAkJCQkJICAibGluayBkZXRlcmlvcmF0aW9uOiAnJXMnICIgTUFDX0ZNVApAQCAtMzYxMiwxMSArNDU0NSw5IEBACiAJY2FzZSBIT1NUX05PVElGSUNBVElPTl9ESU5PX0NPTkZJR19SRVNQT05TRTp7CiAJCQlJUFdfRVJST1IoIkRpbm8gY29uZmlnXG4iKTsKIAkJCWlmIChwcml2LT5oY21kCi0JCQkgICAgJiYgcHJpdi0+aGNtZC0+Y21kID09IEhPU1RfQ01EX0RJTk9fQ09ORklHKSB7Ci0JCQkJLyogVE9ETzogRG8gYW55dGhpbmcgc3BlY2lhbD8gKi8KLQkJCX0gZWxzZSB7CisJCQkgICAgJiYgcHJpdi0+aGNtZC0+Y21kICE9IEhPU1RfQ01EX0RJTk9fQ09ORklHKQogCQkJCUlQV19FUlJPUigiVW5leHBlY3RlZCBESU5PX0NPTkZJR19SRVNQT05TRVxuIik7Ci0JCQl9CisKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTM2MjksMzYgKzQ1NjAsMTEgQEAKIAkJCQlicmVhazsKIAkJCX0KIAotCQkJaWYgKHgtPnN0YXRlID09IEhPU1RfTk9USUZJQ0FUSU9OX1NUQVRVU19CRUFDT05fTUlTU0lORykgewotCQkJCWlmIChwcml2LT5zdGF0dXMgJiBTVEFUVVNfU0NBTk5JTkcpIHsKLQkJCQkJLyogU3RvcCBzY2FuIHRvIGtlZXAgZncgZnJvbSBnZXR0aW5nCi0JCQkJCSAqIHN0dWNrLi4uICovCi0JCQkJCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLAotCQkJCQkJICAgJnByaXYtPmFib3J0X3NjYW4pOwotCQkJCX0KLQotCQkJCWlmICh4LT5udW1iZXIgPiBwcml2LT5taXNzZWRfYmVhY29uX3RocmVzaG9sZCAmJgotCQkJCSAgICBwcml2LT5zdGF0dXMgJiBTVEFUVVNfQVNTT0NJQVRFRCkgewotCQkJCQlJUFdfREVCVUcoSVBXX0RMX0lORk8gfCBJUFdfRExfTk9USUYgfAotCQkJCQkJICBJUFdfRExfU1RBVEUsCi0JCQkJCQkgICJNaXNzZWQgYmVhY29uOiAlZCAtIGRpc2Fzc29jaWF0ZVxuIiwKLQkJCQkJCSAgeC0+bnVtYmVyKTsKLQkJCQkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsCi0JCQkJCQkgICAmcHJpdi0+ZGlzYXNzb2NpYXRlKTsKLQkJCQl9IGVsc2UgaWYgKHgtPm51bWJlciA+IHByaXYtPnJvYW1pbmdfdGhyZXNob2xkKSB7Ci0JCQkJCUlQV19ERUJVRyhJUFdfRExfTk9USUYgfCBJUFdfRExfU1RBVEUsCi0JCQkJCQkgICJNaXNzZWQgYmVhY29uOiAlZCAtIGluaXRpYXRlICIKLQkJCQkJCSAgInJvYW1pbmdcbiIsIHgtPm51bWJlcik7Ci0JCQkJCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLAotCQkJCQkJICAgJnByaXYtPnJvYW0pOwotCQkJCX0gZWxzZSB7Ci0JCQkJCUlQV19ERUJVR19OT1RJRigiTWlzc2VkIGJlYWNvbjogJWRcbiIsCi0JCQkJCQkJeC0+bnVtYmVyKTsKLQkJCQl9Ci0KLQkJCQlwcml2LT5ub3RpZl9taXNzZWRfYmVhY29ucyA9IHgtPm51bWJlcjsKLQotCQkJfQorCQkJaWYgKGxlMzJfdG9fY3B1KHgtPnN0YXRlKSA9PQorCQkJICAgIEhPU1RfTk9USUZJQ0FUSU9OX1NUQVRVU19CRUFDT05fTUlTU0lORykKKwkJCQlpcHdfaGFuZGxlX21pc3NlZF9iZWFjb24ocHJpdiwKKwkJCQkJCQkgbGUzMl90b19jcHUoeC0+CisJCQkJCQkJCSAgICAgbnVtYmVyKSk7CiAKIAkJCWJyZWFrOwogCQl9CkBAIC0zNjk3LDcgKzQ2MDMsOCBAQAogCWNhc2UgSE9TVF9OT1RJRklDQVRJT05fTk9JU0VfU1RBVFM6ewogCQkJaWYgKG5vdGlmLT5zaXplID09IHNpemVvZih1MzIpKSB7CiAJCQkJcHJpdi0+bGFzdF9ub2lzZSA9Ci0JCQkJICAgICh1OCkgKG5vdGlmLT51Lm5vaXNlLnZhbHVlICYgMHhmZik7CisJCQkJICAgICh1OCkgKGxlMzJfdG9fY3B1KG5vdGlmLT51Lm5vaXNlLnZhbHVlKSAmCisJCQkJCSAgMHhmZik7CiAJCQkJYXZlcmFnZV9hZGQoJnByaXYtPmF2ZXJhZ2Vfbm9pc2UsCiAJCQkJCSAgICBwcml2LT5sYXN0X25vaXNlKTsKIAkJCQlicmVhazsKQEAgLTM3MzAsNDMgKzQ2MzcsNDMgQEAKIAlpcHdfdHhfcXVldWVfZnJlZShwcml2KTsKIAkvKiBUeCBDTUQgcXVldWUgKi8KIAlyYyA9IGlwd19xdWV1ZV90eF9pbml0KHByaXYsICZwcml2LT50eHFfY21kLCBuVHhDbWQsCi0JCQkgICAgICAgQ1gyX1RYX0NNRF9RVUVVRV9SRUFEX0lOREVYLAotCQkJICAgICAgIENYMl9UWF9DTURfUVVFVUVfV1JJVEVfSU5ERVgsCi0JCQkgICAgICAgQ1gyX1RYX0NNRF9RVUVVRV9CRF9CQVNFLAotCQkJICAgICAgIENYMl9UWF9DTURfUVVFVUVfQkRfU0laRSk7CisJCQkgICAgICAgSVBXX1RYX0NNRF9RVUVVRV9SRUFEX0lOREVYLAorCQkJICAgICAgIElQV19UWF9DTURfUVVFVUVfV1JJVEVfSU5ERVgsCisJCQkgICAgICAgSVBXX1RYX0NNRF9RVUVVRV9CRF9CQVNFLAorCQkJICAgICAgIElQV19UWF9DTURfUVVFVUVfQkRfU0laRSk7CiAJaWYgKHJjKSB7CiAJCUlQV19FUlJPUigiVHggQ21kIHF1ZXVlIGluaXQgZmFpbGVkXG4iKTsKIAkJZ290byBlcnJvcjsKIAl9CiAJLyogVHggcXVldWUocykgKi8KIAlyYyA9IGlwd19xdWV1ZV90eF9pbml0KHByaXYsICZwcml2LT50eHFbMF0sIG5UeCwKLQkJCSAgICAgICBDWDJfVFhfUVVFVUVfMF9SRUFEX0lOREVYLAotCQkJICAgICAgIENYMl9UWF9RVUVVRV8wX1dSSVRFX0lOREVYLAotCQkJICAgICAgIENYMl9UWF9RVUVVRV8wX0JEX0JBU0UsIENYMl9UWF9RVUVVRV8wX0JEX1NJWkUpOworCQkJICAgICAgIElQV19UWF9RVUVVRV8wX1JFQURfSU5ERVgsCisJCQkgICAgICAgSVBXX1RYX1FVRVVFXzBfV1JJVEVfSU5ERVgsCisJCQkgICAgICAgSVBXX1RYX1FVRVVFXzBfQkRfQkFTRSwgSVBXX1RYX1FVRVVFXzBfQkRfU0laRSk7CiAJaWYgKHJjKSB7CiAJCUlQV19FUlJPUigiVHggMCBxdWV1ZSBpbml0IGZhaWxlZFxuIik7CiAJCWdvdG8gZXJyb3I7CiAJfQogCXJjID0gaXB3X3F1ZXVlX3R4X2luaXQocHJpdiwgJnByaXYtPnR4cVsxXSwgblR4LAotCQkJICAgICAgIENYMl9UWF9RVUVVRV8xX1JFQURfSU5ERVgsCi0JCQkgICAgICAgQ1gyX1RYX1FVRVVFXzFfV1JJVEVfSU5ERVgsCi0JCQkgICAgICAgQ1gyX1RYX1FVRVVFXzFfQkRfQkFTRSwgQ1gyX1RYX1FVRVVFXzFfQkRfU0laRSk7CisJCQkgICAgICAgSVBXX1RYX1FVRVVFXzFfUkVBRF9JTkRFWCwKKwkJCSAgICAgICBJUFdfVFhfUVVFVUVfMV9XUklURV9JTkRFWCwKKwkJCSAgICAgICBJUFdfVFhfUVVFVUVfMV9CRF9CQVNFLCBJUFdfVFhfUVVFVUVfMV9CRF9TSVpFKTsKIAlpZiAocmMpIHsKIAkJSVBXX0VSUk9SKCJUeCAxIHF1ZXVlIGluaXQgZmFpbGVkXG4iKTsKIAkJZ290byBlcnJvcjsKIAl9CiAJcmMgPSBpcHdfcXVldWVfdHhfaW5pdChwcml2LCAmcHJpdi0+dHhxWzJdLCBuVHgsCi0JCQkgICAgICAgQ1gyX1RYX1FVRVVFXzJfUkVBRF9JTkRFWCwKLQkJCSAgICAgICBDWDJfVFhfUVVFVUVfMl9XUklURV9JTkRFWCwKLQkJCSAgICAgICBDWDJfVFhfUVVFVUVfMl9CRF9CQVNFLCBDWDJfVFhfUVVFVUVfMl9CRF9TSVpFKTsKKwkJCSAgICAgICBJUFdfVFhfUVVFVUVfMl9SRUFEX0lOREVYLAorCQkJICAgICAgIElQV19UWF9RVUVVRV8yX1dSSVRFX0lOREVYLAorCQkJICAgICAgIElQV19UWF9RVUVVRV8yX0JEX0JBU0UsIElQV19UWF9RVUVVRV8yX0JEX1NJWkUpOwogCWlmIChyYykgewogCQlJUFdfRVJST1IoIlR4IDIgcXVldWUgaW5pdCBmYWlsZWRcbiIpOwogCQlnb3RvIGVycm9yOwogCX0KIAlyYyA9IGlwd19xdWV1ZV90eF9pbml0KHByaXYsICZwcml2LT50eHFbM10sIG5UeCwKLQkJCSAgICAgICBDWDJfVFhfUVVFVUVfM19SRUFEX0lOREVYLAotCQkJICAgICAgIENYMl9UWF9RVUVVRV8zX1dSSVRFX0lOREVYLAotCQkJICAgICAgIENYMl9UWF9RVUVVRV8zX0JEX0JBU0UsIENYMl9UWF9RVUVVRV8zX0JEX1NJWkUpOworCQkJICAgICAgIElQV19UWF9RVUVVRV8zX1JFQURfSU5ERVgsCisJCQkgICAgICAgSVBXX1RYX1FVRVVFXzNfV1JJVEVfSU5ERVgsCisJCQkgICAgICAgSVBXX1RYX1FVRVVFXzNfQkRfQkFTRSwgSVBXX1RYX1FVRVVFXzNfQkRfU0laRSk7CiAJaWYgKHJjKSB7CiAJCUlQV19FUlJPUigiVHggMyBxdWV1ZSBpbml0IGZhaWxlZFxuIik7CiAJCWdvdG8gZXJyb3I7CkBAIC0zODE0LDkgKzQ3MjEsMTAgQEAKIAkJcHJpdi0+dHhfcGFja2V0cysrOwogCX0KICAgICAgIGRvbmU6Ci0JaWYgKGlwd19xdWV1ZV9zcGFjZShxKSA+IHEtPmxvd19tYXJrICYmIHFpbmRleCA+PSAwKSB7Ci0JCV9fbWF5YmVfd2FrZV90eChwcml2KTsKLQl9CisJaWYgKChpcHdfcXVldWVfc3BhY2UocSkgPiBxLT5sb3dfbWFyaykgJiYKKwkgICAgKHFpbmRleCA+PSAwKSAmJgorCSAgICAocHJpdi0+c3RhdHVzICYgU1RBVFVTX0FTU09DSUFURUQpICYmIG5ldGlmX3J1bm5pbmcocHJpdi0+bmV0X2RldikpCisJCW5ldGlmX3dha2VfcXVldWUocHJpdi0+bmV0X2Rldik7CiAJdXNlZCA9IHEtPmZpcnN0X2VtcHR5IC0gcS0+bGFzdF91c2VkOwogCWlmICh1c2VkIDwgMCkKIAkJdXNlZCArPSBxLT5uX2JkOwpAQCAtMzg1Nyw3ICs0NzY1LDcgQEAKICAqIFJ4IHRoZW9yeSBvZiBvcGVyYXRpb24KICAqCiAgKiBUaGUgaG9zdCBhbGxvY2F0ZXMgMzIgRE1BIHRhcmdldCBhZGRyZXNzZXMgYW5kIHBhc3NlcyB0aGUgaG9zdCBhZGRyZXNzCi0gKiB0byB0aGUgZmlybXdhcmUgYXQgcmVnaXN0ZXIgQ1gyX1JGRFNfVEFCTEVfTE9XRVIgKyBOICogUkZEX1NJWkUgd2hlcmUgTiBpcworICogdG8gdGhlIGZpcm13YXJlIGF0IHJlZ2lzdGVyIElQV19SRkRTX1RBQkxFX0xPV0VSICsgTiAqIFJGRF9TSVpFIHdoZXJlIE4gaXMKICAqIDAgdG8gMzEKICAqCiAgKiBSeCBRdWV1ZSBJbmRleGVzCkBAIC0zOTQxLDcgKzQ4NDksNyBAQAogCQlyeGIgPSBsaXN0X2VudHJ5KGVsZW1lbnQsIHN0cnVjdCBpcHdfcnhfbWVtX2J1ZmZlciwgbGlzdCk7CiAJCWxpc3RfZGVsKGVsZW1lbnQpOwogCi0JCWlwd193cml0ZTMyKHByaXYsIENYMl9SRkRTX1RBQkxFX0xPV0VSICsgcnhxLT53cml0ZSAqIFJGRF9TSVpFLAorCQlpcHdfd3JpdGUzMihwcml2LCBJUFdfUkZEU19UQUJMRV9MT1dFUiArIHJ4cS0+d3JpdGUgKiBSRkRfU0laRSwKIAkJCSAgICByeGItPmRtYV9hZGRyKTsKIAkJcnhxLT5xdWV1ZVtyeHEtPndyaXRlXSA9IHJ4YjsKIAkJcnhxLT53cml0ZSA9IChyeHEtPndyaXRlICsgMSkgJSBSWF9RVUVVRV9TSVpFOwpAQCAtMzk1Niw3ICs0ODY0LDcgQEAKIAogCS8qIElmIHdlJ3ZlIGFkZGVkIG1vcmUgc3BhY2UgZm9yIHRoZSBmaXJtd2FyZSB0byBwbGFjZSBkYXRhLCB0ZWxsIGl0ICovCiAJaWYgKHdyaXRlICE9IHJ4cS0+d3JpdGUpCi0JCWlwd193cml0ZTMyKHByaXYsIENYMl9SWF9XUklURV9JTkRFWCwgcnhxLT53cml0ZSk7CisJCWlwd193cml0ZTMyKHByaXYsIElQV19SWF9XUklURV9JTkRFWCwgcnhxLT53cml0ZSk7CiB9CiAKIC8qCkBAIC0zOTc3LDcgKzQ4ODUsNyBAQAogCXdoaWxlICghbGlzdF9lbXB0eSgmcnhxLT5yeF91c2VkKSkgewogCQllbGVtZW50ID0gcnhxLT5yeF91c2VkLm5leHQ7CiAJCXJ4YiA9IGxpc3RfZW50cnkoZWxlbWVudCwgc3RydWN0IGlwd19yeF9tZW1fYnVmZmVyLCBsaXN0KTsKLQkJcnhiLT5za2IgPSBhbGxvY19za2IoQ1gyX1JYX0JVRl9TSVpFLCBHRlBfQVRPTUlDKTsKKwkJcnhiLT5za2IgPSBhbGxvY19za2IoSVBXX1JYX0JVRl9TSVpFLCBHRlBfQVRPTUlDKTsKIAkJaWYgKCFyeGItPnNrYikgewogCQkJcHJpbnRrKEtFUk5fQ1JJVCAiJXM6IENhbiBub3QgYWxsb2NhdGUgU0tCIGJ1ZmZlcnMuXG4iLAogCQkJICAgICAgIHByaXYtPm5ldF9kZXYtPm5hbWUpOwpAQCAtMzk5MSw3ICs0ODk5LDcgQEAKIAkJcnhiLT5yeGIgPSAoc3RydWN0IGlwd19yeF9idWZmZXIgKilyeGItPnNrYi0+ZGF0YTsKIAkJcnhiLT5kbWFfYWRkciA9CiAJCSAgICBwY2lfbWFwX3NpbmdsZShwcml2LT5wY2lfZGV2LCByeGItPnNrYi0+ZGF0YSwKLQkJCQkgICBDWDJfUlhfQlVGX1NJWkUsIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQkJICAgSVBXX1JYX0JVRl9TSVpFLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCiAJCWxpc3RfYWRkX3RhaWwoJnJ4Yi0+bGlzdCwgJnJ4cS0+cnhfZnJlZSk7CiAJCXJ4cS0+ZnJlZV9jb3VudCsrOwpAQCAtNDAwMSw2ICs0OTA5LDE0IEBACiAJaXB3X3J4X3F1ZXVlX3Jlc3RvY2socHJpdik7CiB9CiAKK3N0YXRpYyB2b2lkIGlwd19iZ19yeF9xdWV1ZV9yZXBsZW5pc2godm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBkYXRhOworCWRvd24oJnByaXYtPnNlbSk7CisJaXB3X3J4X3F1ZXVlX3JlcGxlbmlzaChkYXRhKTsKKwl1cCgmcHJpdi0+c2VtKTsKK30KKwogLyogQXNzdW1lcyB0aGF0IHRoZSBza2IgZmllbGQgb2YgdGhlIGJ1ZmZlcnMgaW4gJ3Bvb2wnIGlzIGtlcHQgYWNjdXJhdGUuCiAgKiBJZiBhbiBTS0IgaGFzIGJlZW4gZGV0YWNoZWQsIHRoZSBQT09MIG5lZWRzIHRvIGhhdmUgaXQncyBTS0Igc2V0IHRvIE5VTEwKICAqIFRoaXMgZnJlZSByb3V0aW5lIHdhbGtzIHRoZSBsaXN0IG9mIFBPT0wgZW50cmllcyBhbmQgaWYgU0tCIGlzIHNldCB0bwpAQCAtNDAxNiw3ICs0OTMyLDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgUlhfUVVFVUVfU0laRSArIFJYX0ZSRUVfQlVGRkVSUzsgaSsrKSB7CiAJCWlmIChyeHEtPnBvb2xbaV0uc2tiICE9IE5VTEwpIHsKIAkJCXBjaV91bm1hcF9zaW5nbGUocHJpdi0+cGNpX2RldiwgcnhxLT5wb29sW2ldLmRtYV9hZGRyLAotCQkJCQkgQ1gyX1JYX0JVRl9TSVpFLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJCQkgSVBXX1JYX0JVRl9TSVpFLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCQkJZGV2X2tmcmVlX3NrYihyeHEtPnBvb2xbaV0uc2tiKTsKIAkJfQogCX0KQEAgLTQxMzUsOCArNTA1MSwxOCBAQAogCW51bV9yYXRlcyA9IG1pbihuZXR3b3JrLT5yYXRlc19sZW4sICh1OCkgSVBXX01BWF9SQVRFUyk7CiAJcmF0ZXMtPm51bV9yYXRlcyA9IDA7CiAJZm9yIChpID0gMDsgaSA8IG51bV9yYXRlczsgaSsrKSB7Ci0JCWlmICghaXB3X2lzX3JhdGVfaW5fbWFzawotCQkgICAgKHByaXYsIG5ldHdvcmstPm1vZGUsIG5ldHdvcmstPnJhdGVzW2ldKSkgeworCQlpZiAoIWlwd19pc19yYXRlX2luX21hc2socHJpdiwgbmV0d29yay0+bW9kZSwKKwkJCQkJIG5ldHdvcmstPnJhdGVzW2ldKSkgeworCisJCQlpZiAobmV0d29yay0+cmF0ZXNbaV0gJiBJRUVFODAyMTFfQkFTSUNfUkFURV9NQVNLKSB7CisJCQkJSVBXX0RFQlVHX1NDQU4oIkFkZGluZyBtYXNrZWQgbWFuZGF0b3J5ICIKKwkJCQkJICAgICAgICJyYXRlICUwMlhcbiIsCisJCQkJCSAgICAgICBuZXR3b3JrLT5yYXRlc1tpXSk7CisJCQkJcmF0ZXMtPnN1cHBvcnRlZF9yYXRlc1tyYXRlcy0+bnVtX3JhdGVzKytdID0KKwkJCQkgICAgbmV0d29yay0+cmF0ZXNbaV07CisJCQkJY29udGludWU7CisJCQl9CisKIAkJCUlQV19ERUJVR19TQ0FOKCJSYXRlICUwMlggbWFza2VkIDogMHglMDhYXG4iLAogCQkJCSAgICAgICBuZXR3b3JrLT5yYXRlc1tpXSwgcHJpdi0+cmF0ZXNfbWFzayk7CiAJCQljb250aW51ZTsKQEAgLTQxNDUsMTEgKzUwNzEsMjAgQEAKIAkJcmF0ZXMtPnN1cHBvcnRlZF9yYXRlc1tyYXRlcy0+bnVtX3JhdGVzKytdID0gbmV0d29yay0+cmF0ZXNbaV07CiAJfQogCi0JbnVtX3JhdGVzID0KLQkgICAgbWluKG5ldHdvcmstPnJhdGVzX2V4X2xlbiwgKHU4KSAoSVBXX01BWF9SQVRFUyAtIG51bV9yYXRlcykpOworCW51bV9yYXRlcyA9IG1pbihuZXR3b3JrLT5yYXRlc19leF9sZW4sCisJCQkodTgpIChJUFdfTUFYX1JBVEVTIC0gbnVtX3JhdGVzKSk7CiAJZm9yIChpID0gMDsgaSA8IG51bV9yYXRlczsgaSsrKSB7Ci0JCWlmICghaXB3X2lzX3JhdGVfaW5fbWFzawotCQkgICAgKHByaXYsIG5ldHdvcmstPm1vZGUsIG5ldHdvcmstPnJhdGVzX2V4W2ldKSkgeworCQlpZiAoIWlwd19pc19yYXRlX2luX21hc2socHJpdiwgbmV0d29yay0+bW9kZSwKKwkJCQkJIG5ldHdvcmstPnJhdGVzX2V4W2ldKSkgeworCQkJaWYgKG5ldHdvcmstPnJhdGVzX2V4W2ldICYgSUVFRTgwMjExX0JBU0lDX1JBVEVfTUFTSykgeworCQkJCUlQV19ERUJVR19TQ0FOKCJBZGRpbmcgbWFza2VkIG1hbmRhdG9yeSAiCisJCQkJCSAgICAgICAicmF0ZSAlMDJYXG4iLAorCQkJCQkgICAgICAgbmV0d29yay0+cmF0ZXNfZXhbaV0pOworCQkJCXJhdGVzLT5zdXBwb3J0ZWRfcmF0ZXNbcmF0ZXMtPm51bV9yYXRlcysrXSA9CisJCQkJICAgIG5ldHdvcmstPnJhdGVzW2ldOworCQkJCWNvbnRpbnVlOworCQkJfQorCiAJCQlJUFdfREVCVUdfU0NBTigiUmF0ZSAlMDJYIG1hc2tlZCA6IDB4JTA4WFxuIiwKIAkJCQkgICAgICAgbmV0d29yay0+cmF0ZXNfZXhbaV0sIHByaXYtPnJhdGVzX21hc2spOwogCQkJY29udGludWU7CkBAIC00MTU5LDcgKzUwOTQsNyBAQAogCQkgICAgbmV0d29yay0+cmF0ZXNfZXhbaV07CiAJfQogCi0JcmV0dXJuIHJhdGVzLT5udW1fcmF0ZXM7CisJcmV0dXJuIDE7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpcHdfY29weV9yYXRlcyhzdHJ1Y3QgaXB3X3N1cHBvcnRlZF9yYXRlcyAqZGVzdCwKQEAgLTQyNDEsNiArNTE3NiwyMTYgQEAKIAlzdHJ1Y3QgaXB3X3N1cHBvcnRlZF9yYXRlcyByYXRlczsKIH07CiAKK3N0YXRpYyBpbnQgaXB3X2ZpbmRfYWRob2NfbmV0d29yayhzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsCisJCQkJICBzdHJ1Y3QgaXB3X25ldHdvcmtfbWF0Y2ggKm1hdGNoLAorCQkJCSAgc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICpuZXR3b3JrLAorCQkJCSAgaW50IHJvYW1pbmcpCit7CisJc3RydWN0IGlwd19zdXBwb3J0ZWRfcmF0ZXMgcmF0ZXM7CisKKwkvKiBWZXJpZnkgdGhhdCB0aGlzIG5ldHdvcmsncyBjYXBhYmlsaXR5IGlzIGNvbXBhdGlibGUgd2l0aCB0aGUKKwkgKiBjdXJyZW50IG1vZGUgKEFkSG9jIG9yIEluZnJhc3RydWN0dXJlKSAqLworCWlmICgocHJpdi0+aWVlZS0+aXdfbW9kZSA9PSBJV19NT0RFX0FESE9DICYmCisJICAgICAhKG5ldHdvcmstPmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfSUJTUykpKSB7CisJCUlQV19ERUJVR19NRVJHRSgiTmV0d29yayAnJXMgKCIgTUFDX0ZNVCAiKScgZXhjbHVkZWQgZHVlIHRvICIKKwkJCQkiY2FwYWJpbGl0eSBtaXNtYXRjaC5cbiIsCisJCQkJZXNjYXBlX2Vzc2lkKG5ldHdvcmstPnNzaWQsIG5ldHdvcmstPnNzaWRfbGVuKSwKKwkJCQlNQUNfQVJHKG5ldHdvcmstPmJzc2lkKSk7CisJCXJldHVybiAwOworCX0KKworCS8qIElmIHdlIGRvIG5vdCBoYXZlIGFuIEVTU0lEIGZvciB0aGlzIEFQLCB3ZSBjYW4gbm90IGFzc29jaWF0ZSB3aXRoCisJICogaXQgKi8KKwlpZiAobmV0d29yay0+ZmxhZ3MgJiBORVRXT1JLX0VNUFRZX0VTU0lEKSB7CisJCUlQV19ERUJVR19NRVJHRSgiTmV0d29yayAnJXMgKCIgTUFDX0ZNVCAiKScgZXhjbHVkZWQgIgorCQkJCSJiZWNhdXNlIG9mIGhpZGRlbiBFU1NJRC5cbiIsCisJCQkJZXNjYXBlX2Vzc2lkKG5ldHdvcmstPnNzaWQsIG5ldHdvcmstPnNzaWRfbGVuKSwKKwkJCQlNQUNfQVJHKG5ldHdvcmstPmJzc2lkKSk7CisJCXJldHVybiAwOworCX0KKworCWlmICh1bmxpa2VseShyb2FtaW5nKSkgeworCQkvKiBJZiB3ZSBhcmUgcm9hbWluZywgdGhlbiBlbnN1cmUgY2hlY2sgaWYgdGhpcyBpcyBhIHZhbGlkCisJCSAqIG5ldHdvcmsgdG8gdHJ5IGFuZCByb2FtIHRvICovCisJCWlmICgobmV0d29yay0+c3NpZF9sZW4gIT0gbWF0Y2gtPm5ldHdvcmstPnNzaWRfbGVuKSB8fAorCQkgICAgbWVtY21wKG5ldHdvcmstPnNzaWQsIG1hdGNoLT5uZXR3b3JrLT5zc2lkLAorCQkJICAgbmV0d29yay0+c3NpZF9sZW4pKSB7CisJCQlJUFdfREVCVUdfTUVSR0UoIk5ldG93cmsgJyVzICgiIE1BQ19GTVQgIiknIGV4Y2x1ZGVkICIKKwkJCQkJImJlY2F1c2Ugb2Ygbm9uLW5ldHdvcmsgRVNTSUQuXG4iLAorCQkJCQllc2NhcGVfZXNzaWQobmV0d29yay0+c3NpZCwKKwkJCQkJCSAgICAgbmV0d29yay0+c3NpZF9sZW4pLAorCQkJCQlNQUNfQVJHKG5ldHdvcmstPmJzc2lkKSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0gZWxzZSB7CisJCS8qIElmIGFuIEVTU0lEIGhhcyBiZWVuIGNvbmZpZ3VyZWQgdGhlbiBjb21wYXJlIHRoZSBicm9hZGNhc3QKKwkJICogRVNTSUQgdG8gb3VycyAqLworCQlpZiAoKHByaXYtPmNvbmZpZyAmIENGR19TVEFUSUNfRVNTSUQpICYmCisJCSAgICAoKG5ldHdvcmstPnNzaWRfbGVuICE9IHByaXYtPmVzc2lkX2xlbikgfHwKKwkJICAgICBtZW1jbXAobmV0d29yay0+c3NpZCwgcHJpdi0+ZXNzaWQsCisJCQkgICAgbWluKG5ldHdvcmstPnNzaWRfbGVuLCBwcml2LT5lc3NpZF9sZW4pKSkpIHsKKwkJCWNoYXIgZXNjYXBlZFtJV19FU1NJRF9NQVhfU0laRSAqIDIgKyAxXTsKKworCQkJc3RybmNweShlc2NhcGVkLAorCQkJCWVzY2FwZV9lc3NpZChuZXR3b3JrLT5zc2lkLCBuZXR3b3JrLT5zc2lkX2xlbiksCisJCQkJc2l6ZW9mKGVzY2FwZWQpKTsKKwkJCUlQV19ERUJVR19NRVJHRSgiTmV0d29yayAnJXMgKCIgTUFDX0ZNVCAiKScgZXhjbHVkZWQgIgorCQkJCQkiYmVjYXVzZSBvZiBFU1NJRCBtaXNtYXRjaDogJyVzJy5cbiIsCisJCQkJCWVzY2FwZWQsIE1BQ19BUkcobmV0d29yay0+YnNzaWQpLAorCQkJCQllc2NhcGVfZXNzaWQocHJpdi0+ZXNzaWQsCisJCQkJCQkgICAgIHByaXYtPmVzc2lkX2xlbikpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwkvKiBJZiB0aGUgb2xkIG5ldHdvcmsgcmF0ZSBpcyBiZXR0ZXIgdGhhbiB0aGlzIG9uZSwgZG9uJ3QgYm90aGVyCisJICogdGVzdGluZyBldmVyeXRoaW5nIGVsc2UuICovCisKKwlpZiAobmV0d29yay0+dGltZV9zdGFtcFswXSA8IG1hdGNoLT5uZXR3b3JrLT50aW1lX3N0YW1wWzBdKSB7CisJCUlQV19ERUJVR19NRVJHRSgiTmV0d29yayAnJXMgZXhjbHVkZWQgYmVjYXVzZSBuZXdlciB0aGFuICIKKwkJCQkiY3VycmVudCBuZXR3b3JrLlxuIiwKKwkJCQllc2NhcGVfZXNzaWQobWF0Y2gtPm5ldHdvcmstPnNzaWQsCisJCQkJCSAgICAgbWF0Y2gtPm5ldHdvcmstPnNzaWRfbGVuKSk7CisJCXJldHVybiAwOworCX0gZWxzZSBpZiAobmV0d29yay0+dGltZV9zdGFtcFsxXSA8IG1hdGNoLT5uZXR3b3JrLT50aW1lX3N0YW1wWzFdKSB7CisJCUlQV19ERUJVR19NRVJHRSgiTmV0d29yayAnJXMgZXhjbHVkZWQgYmVjYXVzZSBuZXdlciB0aGFuICIKKwkJCQkiY3VycmVudCBuZXR3b3JrLlxuIiwKKwkJCQllc2NhcGVfZXNzaWQobWF0Y2gtPm5ldHdvcmstPnNzaWQsCisJCQkJCSAgICAgbWF0Y2gtPm5ldHdvcmstPnNzaWRfbGVuKSk7CisJCXJldHVybiAwOworCX0KKworCS8qIE5vdyBnbyB0aHJvdWdoIGFuZCBzZWUgaWYgdGhlIHJlcXVlc3RlZCBuZXR3b3JrIGlzIHZhbGlkLi4uICovCisJaWYgKHByaXYtPmllZWUtPnNjYW5fYWdlICE9IDAgJiYKKwkgICAgdGltZV9hZnRlcihqaWZmaWVzLCBuZXR3b3JrLT5sYXN0X3NjYW5uZWQgKyBwcml2LT5pZWVlLT5zY2FuX2FnZSkpIHsKKwkJSVBXX0RFQlVHX01FUkdFKCJOZXR3b3JrICclcyAoIiBNQUNfRk1UICIpJyBleGNsdWRlZCAiCisJCQkJImJlY2F1c2Ugb2YgYWdlOiAlbHVtcy5cbiIsCisJCQkJZXNjYXBlX2Vzc2lkKG5ldHdvcmstPnNzaWQsIG5ldHdvcmstPnNzaWRfbGVuKSwKKwkJCQlNQUNfQVJHKG5ldHdvcmstPmJzc2lkKSwKKwkJCQkxMDAwICogKGppZmZpZXMgLSBuZXR3b3JrLT5sYXN0X3NjYW5uZWQpIC8gSFopOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoKHByaXYtPmNvbmZpZyAmIENGR19TVEFUSUNfQ0hBTk5FTCkgJiYKKwkgICAgKG5ldHdvcmstPmNoYW5uZWwgIT0gcHJpdi0+Y2hhbm5lbCkpIHsKKwkJSVBXX0RFQlVHX01FUkdFKCJOZXR3b3JrICclcyAoIiBNQUNfRk1UICIpJyBleGNsdWRlZCAiCisJCQkJImJlY2F1c2Ugb2YgY2hhbm5lbCBtaXNtYXRjaDogJWQgIT0gJWQuXG4iLAorCQkJCWVzY2FwZV9lc3NpZChuZXR3b3JrLT5zc2lkLCBuZXR3b3JrLT5zc2lkX2xlbiksCisJCQkJTUFDX0FSRyhuZXR3b3JrLT5ic3NpZCksCisJCQkJbmV0d29yay0+Y2hhbm5lbCwgcHJpdi0+Y2hhbm5lbCk7CisJCXJldHVybiAwOworCX0KKworCS8qIFZlcmlmeSBwcml2YWN5IGNvbXBhdGFiaWxpdHkgKi8KKwlpZiAoKChwcml2LT5jYXBhYmlsaXR5ICYgQ0FQX1BSSVZBQ1lfT04pID8gMSA6IDApICE9CisJICAgICgobmV0d29yay0+Y2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZKSA/IDEgOiAwKSkgeworCQlJUFdfREVCVUdfTUVSR0UoIk5ldHdvcmsgJyVzICgiIE1BQ19GTVQgIiknIGV4Y2x1ZGVkICIKKwkJCQkiYmVjYXVzZSBvZiBwcml2YWN5IG1pc21hdGNoOiAlcyAhPSAlcy5cbiIsCisJCQkJZXNjYXBlX2Vzc2lkKG5ldHdvcmstPnNzaWQsIG5ldHdvcmstPnNzaWRfbGVuKSwKKwkJCQlNQUNfQVJHKG5ldHdvcmstPmJzc2lkKSwKKwkJCQlwcml2LT4KKwkJCQljYXBhYmlsaXR5ICYgQ0FQX1BSSVZBQ1lfT04gPyAib24iIDogIm9mZiIsCisJCQkJbmV0d29yay0+CisJCQkJY2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZID8gIm9uIiA6CisJCQkJIm9mZiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIW1lbWNtcChuZXR3b3JrLT5ic3NpZCwgcHJpdi0+YnNzaWQsIEVUSF9BTEVOKSkgeworCQlJUFdfREVCVUdfTUVSR0UoIk5ldHdvcmsgJyVzICgiIE1BQ19GTVQgIiknIGV4Y2x1ZGVkICIKKwkJCQkiYmVjYXVzZSBvZiB0aGUgc2FtZSBCU1NJRCBtYXRjaDogIiBNQUNfRk1UCisJCQkJIi5cbiIsIGVzY2FwZV9lc3NpZChuZXR3b3JrLT5zc2lkLAorCQkJCQkJICAgIG5ldHdvcmstPnNzaWRfbGVuKSwKKwkJCQlNQUNfQVJHKG5ldHdvcmstPmJzc2lkKSwgTUFDX0FSRyhwcml2LT5ic3NpZCkpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBGaWx0ZXIgb3V0IGFueSBpbmNvbXBhdGlibGUgZnJlcSAvIG1vZGUgY29tYmluYXRpb25zICovCisJaWYgKCFpZWVlODAyMTFfaXNfdmFsaWRfbW9kZShwcml2LT5pZWVlLCBuZXR3b3JrLT5tb2RlKSkgeworCQlJUFdfREVCVUdfTUVSR0UoIk5ldHdvcmsgJyVzICgiIE1BQ19GTVQgIiknIGV4Y2x1ZGVkICIKKwkJCQkiYmVjYXVzZSBvZiBpbnZhbGlkIGZyZXF1ZW5jeS9tb2RlICIKKwkJCQkiY29tYmluYXRpb24uXG4iLAorCQkJCWVzY2FwZV9lc3NpZChuZXR3b3JrLT5zc2lkLCBuZXR3b3JrLT5zc2lkX2xlbiksCisJCQkJTUFDX0FSRyhuZXR3b3JrLT5ic3NpZCkpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBFbnN1cmUgdGhhdCB0aGUgcmF0ZXMgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgYXJlIGNvbXBhdGlibGUgd2l0aAorCSAqIHRoaXMgQVAsIGluY2x1ZGluZyB2ZXJpZmljYXRpb24gb2YgYmFzaWMgcmF0ZXMgKG1hbmRhdG9yeSkgKi8KKwlpZiAoIWlwd19jb21wYXRpYmxlX3JhdGVzKHByaXYsIG5ldHdvcmssICZyYXRlcykpIHsKKwkJSVBXX0RFQlVHX01FUkdFKCJOZXR3b3JrICclcyAoIiBNQUNfRk1UICIpJyBleGNsdWRlZCAiCisJCQkJImJlY2F1c2UgY29uZmlndXJlZCByYXRlIG1hc2sgZXhjbHVkZXMgIgorCQkJCSJBUCBtYW5kYXRvcnkgcmF0ZS5cbiIsCisJCQkJZXNjYXBlX2Vzc2lkKG5ldHdvcmstPnNzaWQsIG5ldHdvcmstPnNzaWRfbGVuKSwKKwkJCQlNQUNfQVJHKG5ldHdvcmstPmJzc2lkKSk7CisJCXJldHVybiAwOworCX0KKworCWlmIChyYXRlcy5udW1fcmF0ZXMgPT0gMCkgeworCQlJUFdfREVCVUdfTUVSR0UoIk5ldHdvcmsgJyVzICgiIE1BQ19GTVQgIiknIGV4Y2x1ZGVkICIKKwkJCQkiYmVjYXVzZSBvZiBubyBjb21wYXRpYmxlIHJhdGVzLlxuIiwKKwkJCQllc2NhcGVfZXNzaWQobmV0d29yay0+c3NpZCwgbmV0d29yay0+c3NpZF9sZW4pLAorCQkJCU1BQ19BUkcobmV0d29yay0+YnNzaWQpKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogVE9ETzogUGVyZm9ybSBhbnkgZnVydGhlciBtaW5pbWFsIGNvbXBhcml0aXRpdmUgdGVzdHMuICBXZSBkbyBub3QKKwkgKiB3YW50IHRvIHB1dCB0b28gbXVjaCBwb2xpY3kgbG9naWMgaGVyZTsgaW50ZWxsaWdlbnQgc2NhbiBzZWxlY3Rpb24KKwkgKiBzaG91bGQgb2NjdXIgd2l0aGluIGEgZ2VuZXJpYyBJRUVFIDgwMi4xMSB1c2VyIHNwYWNlIHRvb2wuICAqLworCisJLyogU2V0IHVwICduZXcnIEFQIHRvIHRoaXMgbmV0d29yayAqLworCWlwd19jb3B5X3JhdGVzKCZtYXRjaC0+cmF0ZXMsICZyYXRlcyk7CisJbWF0Y2gtPm5ldHdvcmsgPSBuZXR3b3JrOworCUlQV19ERUJVR19NRVJHRSgiTmV0d29yayAnJXMgKCIgTUFDX0ZNVCAiKScgaXMgYSB2aWFibGUgbWF0Y2guXG4iLAorCQkJZXNjYXBlX2Vzc2lkKG5ldHdvcmstPnNzaWQsIG5ldHdvcmstPnNzaWRfbGVuKSwKKwkJCU1BQ19BUkcobmV0d29yay0+YnNzaWQpKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBpcHdfbWVyZ2VfYWRob2NfbmV0d29yayh2b2lkICpkYXRhKQoreworCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGRhdGE7CisJc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICpuZXR3b3JrID0gTlVMTDsKKwlzdHJ1Y3QgaXB3X25ldHdvcmtfbWF0Y2ggbWF0Y2ggPSB7CisJCS5uZXR3b3JrID0gcHJpdi0+YXNzb2NfbmV0d29yaworCX07CisKKwlpZiAoKHByaXYtPnN0YXR1cyAmIFNUQVRVU19BU1NPQ0lBVEVEKSAmJgorCSAgICAocHJpdi0+aWVlZS0+aXdfbW9kZSA9PSBJV19NT0RFX0FESE9DKSkgeworCQkvKiBGaXJzdCBwYXNzIHRocm91Z2ggUk9BTSBwcm9jZXNzIC0tIGxvb2sgZm9yIGEgYmV0dGVyCisJCSAqIG5ldHdvcmsgKi8KKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+aWVlZS0+bG9jaywgZmxhZ3MpOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG5ldHdvcmssICZwcml2LT5pZWVlLT5uZXR3b3JrX2xpc3QsIGxpc3QpIHsKKwkJCWlmIChuZXR3b3JrICE9IHByaXYtPmFzc29jX25ldHdvcmspCisJCQkJaXB3X2ZpbmRfYWRob2NfbmV0d29yayhwcml2LCAmbWF0Y2gsIG5ldHdvcmssCisJCQkJCQkgICAgICAgMSk7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+aWVlZS0+bG9jaywgZmxhZ3MpOworCisJCWlmIChtYXRjaC5uZXR3b3JrID09IHByaXYtPmFzc29jX25ldHdvcmspIHsKKwkJCUlQV19ERUJVR19NRVJHRSgiTm8gYmV0dGVyIEFESE9DIGluIHRoaXMgbmV0d29yayB0byAiCisJCQkJCSJtZXJnZSB0by5cbiIpOworCQkJcmV0dXJuOworCQl9CisKKwkJZG93bigmcHJpdi0+c2VtKTsKKwkJaWYgKChwcml2LT5pZWVlLT5pd19tb2RlID09IElXX01PREVfQURIT0MpKSB7CisJCQlJUFdfREVCVUdfTUVSR0UoInJlbW92ZSBuZXR3b3JrICVzXG4iLAorCQkJCQllc2NhcGVfZXNzaWQocHJpdi0+ZXNzaWQsCisJCQkJCQkgICAgIHByaXYtPmVzc2lkX2xlbikpOworCQkJaXB3X3JlbW92ZV9jdXJyZW50X25ldHdvcmsocHJpdik7CisJCX0KKworCQlpcHdfZGlzYXNzb2NpYXRlKHByaXYpOworCQlwcml2LT5hc3NvY19uZXR3b3JrID0gbWF0Y2gubmV0d29yazsKKwkJdXAoJnByaXYtPnNlbSk7CisJCXJldHVybjsKKwl9Cit9CisKIHN0YXRpYyBpbnQgaXB3X2Jlc3RfbmV0d29yayhzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsCiAJCQkgICAgc3RydWN0IGlwd19uZXR3b3JrX21hdGNoICptYXRjaCwKIAkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgKm5ldHdvcmssIGludCByb2FtaW5nKQpAQCAtNDMyMiw5ICs1NDY3LDkgQEAKIAkvKiBJZiB0aGlzIG5ldHdvcmsgaGFzIGFscmVhZHkgaGFkIGFuIGFzc29jaWF0aW9uIGF0dGVtcHQgd2l0aGluIHRoZQogCSAqIGxhc3QgMyBzZWNvbmRzLCBkbyBub3QgdHJ5IGFuZCBhc3NvY2lhdGUgYWdhaW4uLi4gKi8KIAlpZiAobmV0d29yay0+bGFzdF9hc3NvY2lhdGUgJiYKLQkgICAgdGltZV9hZnRlcihuZXR3b3JrLT5sYXN0X2Fzc29jaWF0ZSArIChIWiAqIDVVTCksIGppZmZpZXMpKSB7CisJICAgIHRpbWVfYWZ0ZXIobmV0d29yay0+bGFzdF9hc3NvY2lhdGUgKyAoSFogKiAzVUwpLCBqaWZmaWVzKSkgewogCQlJUFdfREVCVUdfQVNTT0MoIk5ldHdvcmsgJyVzICgiIE1BQ19GTVQgIiknIGV4Y2x1ZGVkICIKLQkJCQkiYmVjYXVzZSBvZiBzdG9ybWluZyAoJWx1IHNpbmNlIGxhc3QgIgorCQkJCSJiZWNhdXNlIG9mIHN0b3JtaW5nICglbHVzIHNpbmNlIGxhc3QgIgogCQkJCSJhc3NvYyBhdHRlbXB0KS5cbiIsCiAJCQkJZXNjYXBlX2Vzc2lkKG5ldHdvcmstPnNzaWQsIG5ldHdvcmstPnNzaWRfbGVuKSwKIAkJCQlNQUNfQVJHKG5ldHdvcmstPmJzc2lkKSwKQEAgLTQzMzQsMTIgKzU0NzksMTIgQEAKIAogCS8qIE5vdyBnbyB0aHJvdWdoIGFuZCBzZWUgaWYgdGhlIHJlcXVlc3RlZCBuZXR3b3JrIGlzIHZhbGlkLi4uICovCiAJaWYgKHByaXYtPmllZWUtPnNjYW5fYWdlICE9IDAgJiYKLQkgICAgamlmZmllcyAtIG5ldHdvcmstPmxhc3Rfc2Nhbm5lZCA+IHByaXYtPmllZWUtPnNjYW5fYWdlKSB7CisJICAgIHRpbWVfYWZ0ZXIoamlmZmllcywgbmV0d29yay0+bGFzdF9zY2FubmVkICsgcHJpdi0+aWVlZS0+c2Nhbl9hZ2UpKSB7CiAJCUlQV19ERUJVR19BU1NPQygiTmV0d29yayAnJXMgKCIgTUFDX0ZNVCAiKScgZXhjbHVkZWQgIgogCQkJCSJiZWNhdXNlIG9mIGFnZTogJWx1bXMuXG4iLAogCQkJCWVzY2FwZV9lc3NpZChuZXR3b3JrLT5zc2lkLCBuZXR3b3JrLT5zc2lkX2xlbiksCiAJCQkJTUFDX0FSRyhuZXR3b3JrLT5ic3NpZCksCi0JCQkJKGppZmZpZXMgLSBuZXR3b3JrLT5sYXN0X3NjYW5uZWQpIC8gKEhaIC8gMTAwKSk7CisJCQkJMTAwMCAqIChqaWZmaWVzIC0gbmV0d29yay0+bGFzdF9zY2FubmVkKSAvIEhaKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC00MzY3LDYgKzU1MTIsMTUgQEAKIAkJcmV0dXJuIDA7CiAJfQogCisJaWYgKCFwcml2LT5pZWVlLT53cGFfZW5hYmxlZCAmJiAobmV0d29yay0+d3BhX2llX2xlbiA+IDAgfHwKKwkJCQkJIG5ldHdvcmstPnJzbl9pZV9sZW4gPiAwKSkgeworCQlJUFdfREVCVUdfQVNTT0MoIk5ldHdvcmsgJyVzICgiIE1BQ19GTVQgIiknIGV4Y2x1ZGVkICIKKwkJCQkiYmVjYXVzZSBvZiBXUEEgY2FwYWJpbGl0eSBtaXNtYXRjaC5cbiIsCisJCQkJZXNjYXBlX2Vzc2lkKG5ldHdvcmstPnNzaWQsIG5ldHdvcmstPnNzaWRfbGVuKSwKKwkJCQlNQUNfQVJHKG5ldHdvcmstPmJzc2lkKSk7CisJCXJldHVybiAwOworCX0KKwogCWlmICgocHJpdi0+Y29uZmlnICYgQ0ZHX1NUQVRJQ19CU1NJRCkgJiYKIAkgICAgbWVtY21wKG5ldHdvcmstPmJzc2lkLCBwcml2LT5ic3NpZCwgRVRIX0FMRU4pKSB7CiAJCUlQV19ERUJVR19BU1NPQygiTmV0d29yayAnJXMgKCIgTUFDX0ZNVCAiKScgZXhjbHVkZWQgIgpAQCAtNDM4Niw3ICs1NTQwLDI2IEBACiAJCXJldHVybiAwOwogCX0KIAotCWlwd19jb21wYXRpYmxlX3JhdGVzKHByaXYsIG5ldHdvcmssICZyYXRlcyk7CisJLyogRmlsdGVyIG91dCBpbnZhbGlkIGNoYW5uZWwgaW4gY3VycmVudCBHRU8gKi8KKwlpZiAoIWlwd19pc192YWxpZF9jaGFubmVsKHByaXYtPmllZWUsIG5ldHdvcmstPmNoYW5uZWwpKSB7CisJCUlQV19ERUJVR19BU1NPQygiTmV0d29yayAnJXMgKCIgTUFDX0ZNVCAiKScgZXhjbHVkZWQgIgorCQkJCSJiZWNhdXNlIG9mIGludmFsaWQgY2hhbm5lbCBpbiBjdXJyZW50IEdFT1xuIiwKKwkJCQllc2NhcGVfZXNzaWQobmV0d29yay0+c3NpZCwgbmV0d29yay0+c3NpZF9sZW4pLAorCQkJCU1BQ19BUkcobmV0d29yay0+YnNzaWQpKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogRW5zdXJlIHRoYXQgdGhlIHJhdGVzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyIGFyZSBjb21wYXRpYmxlIHdpdGgKKwkgKiB0aGlzIEFQLCBpbmNsdWRpbmcgdmVyaWZpY2F0aW9uIG9mIGJhc2ljIHJhdGVzIChtYW5kYXRvcnkpICovCisJaWYgKCFpcHdfY29tcGF0aWJsZV9yYXRlcyhwcml2LCBuZXR3b3JrLCAmcmF0ZXMpKSB7CisJCUlQV19ERUJVR19BU1NPQygiTmV0d29yayAnJXMgKCIgTUFDX0ZNVCAiKScgZXhjbHVkZWQgIgorCQkJCSJiZWNhdXNlIGNvbmZpZ3VyZWQgcmF0ZSBtYXNrIGV4Y2x1ZGVzICIKKwkJCQkiQVAgbWFuZGF0b3J5IHJhdGUuXG4iLAorCQkJCWVzY2FwZV9lc3NpZChuZXR3b3JrLT5zc2lkLCBuZXR3b3JrLT5zc2lkX2xlbiksCisJCQkJTUFDX0FSRyhuZXR3b3JrLT5ic3NpZCkpOworCQlyZXR1cm4gMDsKKwl9CisKIAlpZiAocmF0ZXMubnVtX3JhdGVzID09IDApIHsKIAkJSVBXX0RFQlVHX0FTU09DKCJOZXR3b3JrICclcyAoIiBNQUNfRk1UICIpJyBleGNsdWRlZCAiCiAJCQkJImJlY2F1c2Ugb2Ygbm8gY29tcGF0aWJsZSByYXRlcy5cbiIsCkBAIC00NDEzLDYgKzU1ODYsOSBAQAogc3RhdGljIHZvaWQgaXB3X2FkaG9jX2NyZWF0ZShzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsCiAJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfbmV0d29yayAqbmV0d29yaykKIHsKKwljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2dlbyAqZ2VvID0gaXB3X2dldF9nZW8ocHJpdi0+aWVlZSk7CisJaW50IGk7CisKIAkvKgogCSAqIEZvciB0aGUgcHVycG9zZXMgb2Ygc2Nhbm5pbmcsIHdlIGNhbiBzZXQgb3VyIHdpcmVsZXNzIG1vZGUKIAkgKiB0byB0cmlnZ2VyIHNjYW5zIGFjcm9zcyBjb21iaW5hdGlvbnMgb2YgYmFuZHMsIGJ1dCB3aGVuIGl0CkBAIC00NDIzLDIyICs1NTk5LDQ3IEBACiAJICogY2hvc3NlbiBiYW5kLiAgQXR0ZW1wdGluZyB0byBjcmVhdGUgYSBuZXcgYWQtaG9jIG5ldHdvcmsKIAkgKiB3aXRoIGFuIGludmFsaWQgY2hhbm5lbCBmb3Igd2lyZWxlc3MgbW9kZSB3aWxsIHRyaWdnZXIgYQogCSAqIEZXIGZhdGFsIGVycm9yLgorCSAqCiAJICovCi0JbmV0d29yay0+bW9kZSA9IGlzX3ZhbGlkX2NoYW5uZWwocHJpdi0+aWVlZS0+bW9kZSwgcHJpdi0+Y2hhbm5lbCk7Ci0JaWYgKG5ldHdvcmstPm1vZGUpIHsKLQkJbmV0d29yay0+Y2hhbm5lbCA9IHByaXYtPmNoYW5uZWw7Ci0JfSBlbHNlIHsKKwlzd2l0Y2ggKGlwd19pc192YWxpZF9jaGFubmVsKHByaXYtPmllZWUsIHByaXYtPmNoYW5uZWwpKSB7CisJY2FzZSBJRUVFODAyMTFfNTJHSFpfQkFORDoKKwkJbmV0d29yay0+bW9kZSA9IElFRUVfQTsKKwkJaSA9IGlwd19jaGFubmVsX3RvX2luZGV4KHByaXYtPmllZWUsIHByaXYtPmNoYW5uZWwpOworCQlpZiAoaSA9PSAtMSkKKwkJCUJVRygpOworCQlpZiAoZ2VvLT5hW2ldLmZsYWdzICYgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWSkgeworCQkJSVBXX1dBUk5JTkcoIk92ZXJyaWRpbmcgaW52YWxpZCBjaGFubmVsXG4iKTsKKwkJCXByaXYtPmNoYW5uZWwgPSBnZW8tPmFbMF0uY2hhbm5lbDsKKwkJfQorCQlicmVhazsKKworCWNhc2UgSUVFRTgwMjExXzI0R0haX0JBTkQ6CisJCWlmIChwcml2LT5pZWVlLT5tb2RlICYgSUVFRV9HKQorCQkJbmV0d29yay0+bW9kZSA9IElFRUVfRzsKKwkJZWxzZQorCQkJbmV0d29yay0+bW9kZSA9IElFRUVfQjsKKwkJaSA9IGlwd19jaGFubmVsX3RvX2luZGV4KHByaXYtPmllZWUsIHByaXYtPmNoYW5uZWwpOworCQlpZiAoaSA9PSAtMSkKKwkJCUJVRygpOworCQlpZiAoZ2VvLT5iZ1tpXS5mbGFncyAmIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFkpIHsKKwkJCUlQV19XQVJOSU5HKCJPdmVycmlkaW5nIGludmFsaWQgY2hhbm5lbFxuIik7CisJCQlwcml2LT5jaGFubmVsID0gZ2VvLT5iZ1swXS5jaGFubmVsOworCQl9CisJCWJyZWFrOworCisJZGVmYXVsdDoKIAkJSVBXX1dBUk5JTkcoIk92ZXJyaWRpbmcgaW52YWxpZCBjaGFubmVsXG4iKTsKIAkJaWYgKHByaXYtPmllZWUtPm1vZGUgJiBJRUVFX0EpIHsKIAkJCW5ldHdvcmstPm1vZGUgPSBJRUVFX0E7Ci0JCQlwcml2LT5jaGFubmVsID0gYmFuZF9hX2FjdGl2ZV9jaGFubmVsWzBdOworCQkJcHJpdi0+Y2hhbm5lbCA9IGdlby0+YVswXS5jaGFubmVsOwogCQl9IGVsc2UgaWYgKHByaXYtPmllZWUtPm1vZGUgJiBJRUVFX0cpIHsKIAkJCW5ldHdvcmstPm1vZGUgPSBJRUVFX0c7Ci0JCQlwcml2LT5jaGFubmVsID0gYmFuZF9iX2FjdGl2ZV9jaGFubmVsWzBdOworCQkJcHJpdi0+Y2hhbm5lbCA9IGdlby0+YmdbMF0uY2hhbm5lbDsKIAkJfSBlbHNlIHsKIAkJCW5ldHdvcmstPm1vZGUgPSBJRUVFX0I7Ci0JCQlwcml2LT5jaGFubmVsID0gYmFuZF9iX2FjdGl2ZV9jaGFubmVsWzBdOworCQkJcHJpdi0+Y2hhbm5lbCA9IGdlby0+YmdbMF0uY2hhbm5lbDsKIAkJfQorCQlicmVhazsKIAl9CiAKIAluZXR3b3JrLT5jaGFubmVsID0gcHJpdi0+Y2hhbm5lbDsKQEAgLTQ0NDgsNiArNTY0OSw4IEBACiAJbWVtY3B5KG5ldHdvcmstPnNzaWQsIHByaXYtPmVzc2lkLCBwcml2LT5lc3NpZF9sZW4pOwogCW1lbXNldCgmbmV0d29yay0+c3RhdHMsIDAsIHNpemVvZihuZXR3b3JrLT5zdGF0cykpOwogCW5ldHdvcmstPmNhcGFiaWxpdHkgPSBXTEFOX0NBUEFCSUxJVFlfSUJTUzsKKwlpZiAoIShwcml2LT5jb25maWcgJiBDRkdfUFJFQU1CTEVfTE9ORykpCisJCW5ldHdvcmstPmNhcGFiaWxpdHkgfD0gV0xBTl9DQVBBQklMSVRZX1NIT1JUX1BSRUFNQkxFOwogCWlmIChwcml2LT5jYXBhYmlsaXR5ICYgQ0FQX1BSSVZBQ1lfT04pCiAJCW5ldHdvcmstPmNhcGFiaWxpdHkgfD0gV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1k7CiAJbmV0d29yay0+cmF0ZXNfbGVuID0gbWluKHByaXYtPnJhdGVzLm51bV9yYXRlcywgTUFYX1JBVEVTX0xFTkdUSCk7CkBAIC00NDY0LDEzICs1NjY3LDM1IEBACiAJbmV0d29yay0+YmVhY29uX2ludGVydmFsID0gMTAwOwkvKiBEZWZhdWx0ICovCiAJbmV0d29yay0+bGlzdGVuX2ludGVydmFsID0gMTA7CS8qIERlZmF1bHQgKi8KIAluZXR3b3JrLT5hdGltX3dpbmRvdyA9IDA7CS8qIERlZmF1bHQgKi8KLSNpZmRlZiBDT05GSUdfSUVFRTgwMjExX1dQQQogCW5ldHdvcmstPndwYV9pZV9sZW4gPSAwOwogCW5ldHdvcmstPnJzbl9pZV9sZW4gPSAwOwotI2VuZGlmCQkJCS8qIENPTkZJR19JRUVFODAyMTFfV1BBICovCiB9CiAKLXN0YXRpYyB2b2lkIGlwd19zZW5kX3dlcF9rZXlzKHN0cnVjdCBpcHdfcHJpdiAqcHJpdikKK3N0YXRpYyB2b2lkIGlwd19zZW5kX3RnaV90eF9rZXkoc3RydWN0IGlwd19wcml2ICpwcml2LCBpbnQgdHlwZSwgaW50IGluZGV4KQoreworCXN0cnVjdCBpcHdfdGdpX3R4X2tleSAqa2V5OworCXN0cnVjdCBob3N0X2NtZCBjbWQgPSB7CisJCS5jbWQgPSBJUFdfQ01EX1RHSV9UWF9LRVksCisJCS5sZW4gPSBzaXplb2YoKmtleSkKKwl9OworCisJaWYgKCEocHJpdi0+aWVlZS0+c2VjLmZsYWdzICYgKDEgPDwgaW5kZXgpKSkKKwkJcmV0dXJuOworCisJa2V5ID0gKHN0cnVjdCBpcHdfdGdpX3R4X2tleSAqKSZjbWQucGFyYW07CisJa2V5LT5rZXlfaWQgPSBpbmRleDsKKwltZW1jcHkoa2V5LT5rZXksIHByaXYtPmllZWUtPnNlYy5rZXlzW2luZGV4XSwgU0NNX1RFTVBPUkFMX0tFWV9MRU5HVEgpOworCWtleS0+c2VjdXJpdHlfdHlwZSA9IHR5cGU7CisJa2V5LT5zdGF0aW9uX2luZGV4ID0gMDsJLyogYWx3YXlzIDAgZm9yIEJTUyAqLworCWtleS0+ZmxhZ3MgPSAwOworCS8qIDAgZm9yIG5ldyBrZXk7IHByZXZpb3VzIHZhbHVlIG9mIGNvdW50ZXIgKGFmdGVyIGZhdGFsIGVycm9yKSAqLworCWtleS0+dHhfY291bnRlclswXSA9IDA7CisJa2V5LT50eF9jb3VudGVyWzFdID0gMDsKKworCWlwd19zZW5kX2NtZChwcml2LCAmY21kKTsKK30KKworc3RhdGljIHZvaWQgaXB3X3NlbmRfd2VwX2tleXMoc3RydWN0IGlwd19wcml2ICpwcml2LCBpbnQgdHlwZSkKIHsKIAlzdHJ1Y3QgaXB3X3dlcF9rZXkgKmtleTsKIAlpbnQgaTsKQEAgLTQ0ODMsMTkgKzU3MDgsOTcgQEAKIAlrZXktPmNtZF9pZCA9IERJTk9fQ01EX1dFUF9LRVk7CiAJa2V5LT5zZXFfbnVtID0gMDsKIAorCS8qIE5vdGU6IEFFUyBrZXlzIGNhbm5vdCBiZSBzZXQgZm9yIG11bHRpcGxlIHRpbWVzLgorCSAqIE9ubHkgc2V0IGl0IGF0IHRoZSBmaXJzdCB0aW1lLiAqLwogCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLQkJa2V5LT5rZXlfaW5kZXggPSBpOwotCQlpZiAoIShwcml2LT5zZWMuZmxhZ3MgJiAoMSA8PCBpKSkpIHsKKwkJa2V5LT5rZXlfaW5kZXggPSBpIHwgdHlwZTsKKwkJaWYgKCEocHJpdi0+aWVlZS0+c2VjLmZsYWdzICYgKDEgPDwgaSkpKSB7CiAJCQlrZXktPmtleV9zaXplID0gMDsKLQkJfSBlbHNlIHsKLQkJCWtleS0+a2V5X3NpemUgPSBwcml2LT5zZWMua2V5X3NpemVzW2ldOwotCQkJbWVtY3B5KGtleS0+a2V5LCBwcml2LT5zZWMua2V5c1tpXSwga2V5LT5rZXlfc2l6ZSk7CisJCQljb250aW51ZTsKIAkJfQogCi0JCWlmIChpcHdfc2VuZF9jbWQocHJpdiwgJmNtZCkpIHsKLQkJCUlQV19FUlJPUigiZmFpbGVkIHRvIHNlbmQgV0VQX0tFWSBjb21tYW5kXG4iKTsKLQkJCXJldHVybjsKLQkJfQorCQlrZXktPmtleV9zaXplID0gcHJpdi0+aWVlZS0+c2VjLmtleV9zaXplc1tpXTsKKwkJbWVtY3B5KGtleS0+a2V5LCBwcml2LT5pZWVlLT5zZWMua2V5c1tpXSwga2V5LT5rZXlfc2l6ZSk7CisKKwkJaXB3X3NlbmRfY21kKHByaXYsICZjbWQpOworCX0KK30KKworc3RhdGljIHZvaWQgaXB3X3NldF9od19kZWNyeXB0X3VuaWNhc3Qoc3RydWN0IGlwd19wcml2ICpwcml2LCBpbnQgbGV2ZWwpCit7CisJaWYgKHByaXYtPmllZWUtPmhvc3RfZW5jcnlwdCkKKwkJcmV0dXJuOworCisJc3dpdGNoIChsZXZlbCkgeworCWNhc2UgU0VDX0xFVkVMXzM6CisJCXByaXYtPnN5c19jb25maWcuZGlzYWJsZV91bmljYXN0X2RlY3J5cHRpb24gPSAwOworCQlwcml2LT5pZWVlLT5ob3N0X2RlY3J5cHQgPSAwOworCQlicmVhazsKKwljYXNlIFNFQ19MRVZFTF8yOgorCQlwcml2LT5zeXNfY29uZmlnLmRpc2FibGVfdW5pY2FzdF9kZWNyeXB0aW9uID0gMTsKKwkJcHJpdi0+aWVlZS0+aG9zdF9kZWNyeXB0ID0gMTsKKwkJYnJlYWs7CisJY2FzZSBTRUNfTEVWRUxfMToKKwkJcHJpdi0+c3lzX2NvbmZpZy5kaXNhYmxlX3VuaWNhc3RfZGVjcnlwdGlvbiA9IDA7CisJCXByaXYtPmllZWUtPmhvc3RfZGVjcnlwdCA9IDA7CisJCWJyZWFrOworCWNhc2UgU0VDX0xFVkVMXzA6CisJCXByaXYtPnN5c19jb25maWcuZGlzYWJsZV91bmljYXN0X2RlY3J5cHRpb24gPSAxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGlwd19zZXRfaHdfZGVjcnlwdF9tdWx0aWNhc3Qoc3RydWN0IGlwd19wcml2ICpwcml2LCBpbnQgbGV2ZWwpCit7CisJaWYgKHByaXYtPmllZWUtPmhvc3RfZW5jcnlwdCkKKwkJcmV0dXJuOworCisJc3dpdGNoIChsZXZlbCkgeworCWNhc2UgU0VDX0xFVkVMXzM6CisJCXByaXYtPnN5c19jb25maWcuZGlzYWJsZV9tdWx0aWNhc3RfZGVjcnlwdGlvbiA9IDA7CisJCWJyZWFrOworCWNhc2UgU0VDX0xFVkVMXzI6CisJCXByaXYtPnN5c19jb25maWcuZGlzYWJsZV9tdWx0aWNhc3RfZGVjcnlwdGlvbiA9IDE7CisJCWJyZWFrOworCWNhc2UgU0VDX0xFVkVMXzE6CisJCXByaXYtPnN5c19jb25maWcuZGlzYWJsZV9tdWx0aWNhc3RfZGVjcnlwdGlvbiA9IDA7CisJCWJyZWFrOworCWNhc2UgU0VDX0xFVkVMXzA6CisJCXByaXYtPnN5c19jb25maWcuZGlzYWJsZV9tdWx0aWNhc3RfZGVjcnlwdGlvbiA9IDE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgaXB3X3NldF9od2NyeXB0b19rZXlzKHN0cnVjdCBpcHdfcHJpdiAqcHJpdikKK3sKKwlzd2l0Y2ggKHByaXYtPmllZWUtPnNlYy5sZXZlbCkgeworCWNhc2UgU0VDX0xFVkVMXzM6CisJCWlmIChwcml2LT5pZWVlLT5zZWMuZmxhZ3MgJiBTRUNfQUNUSVZFX0tFWSkKKwkJCWlwd19zZW5kX3RnaV90eF9rZXkocHJpdiwKKwkJCQkJICAgIERDVF9GTEFHX0VYVF9TRUNVUklUWV9DQ00sCisJCQkJCSAgICBwcml2LT5pZWVlLT5zZWMuYWN0aXZlX2tleSk7CisKKwkJaWYgKCFwcml2LT5pZWVlLT5ob3N0X21jX2RlY3J5cHQpCisJCQlpcHdfc2VuZF93ZXBfa2V5cyhwcml2LCBEQ1dfV0VQX0tFWV9TRUNfVFlQRV9DQ00pOworCQlicmVhazsKKwljYXNlIFNFQ19MRVZFTF8yOgorCQlpZiAocHJpdi0+aWVlZS0+c2VjLmZsYWdzICYgU0VDX0FDVElWRV9LRVkpCisJCQlpcHdfc2VuZF90Z2lfdHhfa2V5KHByaXYsCisJCQkJCSAgICBEQ1RfRkxBR19FWFRfU0VDVVJJVFlfVEtJUCwKKwkJCQkJICAgIHByaXYtPmllZWUtPnNlYy5hY3RpdmVfa2V5KTsKKwkJYnJlYWs7CisJY2FzZSBTRUNfTEVWRUxfMToKKwkJaXB3X3NlbmRfd2VwX2tleXMocHJpdiwgRENXX1dFUF9LRVlfU0VDX1RZUEVfV0VQKTsKKwkJaXB3X3NldF9od19kZWNyeXB0X3VuaWNhc3QocHJpdiwgcHJpdi0+aWVlZS0+c2VjLmxldmVsKTsKKwkJaXB3X3NldF9od19kZWNyeXB0X211bHRpY2FzdChwcml2LCBwcml2LT5pZWVlLT5zZWMubGV2ZWwpOworCQlicmVhazsKKwljYXNlIFNFQ19MRVZFTF8wOgorCWRlZmF1bHQ6CisJCWJyZWFrOwogCX0KIH0KIApAQCAtNDUwMyw5ICs1ODA2LDEyIEBACiB7CiAJc3RydWN0IGlwd19wcml2ICpwcml2ID0gZGF0YTsKIAotCWlmIChwcml2LT5taXNzZWRfYWRob2NfYmVhY29ucysrID4gcHJpdi0+bWlzc2VkX2JlYWNvbl90aHJlc2hvbGQgJiYKKwlpZiAocHJpdi0+bWlzc2VkX2FkaG9jX2JlYWNvbnMrKyA+IHByaXYtPmRpc2Fzc29jaWF0ZV90aHJlc2hvbGQgJiYKIAkgICAgIShwcml2LT5jb25maWcgJiBDRkdfQURIT0NfUEVSU0lTVCkpIHsKLQkJSVBXX0RFQlVHX1NDQU4oIkRpc2Fzc29jaWF0aW5nIGR1ZSB0byBtaXNzZWQgYmVhY29uc1xuIik7CisJCUlQV19ERUJVRyhJUFdfRExfSU5GTyB8IElQV19ETF9OT1RJRiB8CisJCQkgIElQV19ETF9TVEFURSB8IElQV19ETF9BU1NPQywKKwkJCSAgIk1pc3NlZCBiZWFjb246ICVkIC0gZGlzYXNzb2NpYXRlXG4iLAorCQkJICBwcml2LT5taXNzZWRfYWRob2NfYmVhY29ucyk7CiAJCWlwd19yZW1vdmVfY3VycmVudF9uZXR3b3JrKHByaXYpOwogCQlpcHdfZGlzYXNzb2NpYXRlKHByaXYpOwogCQlyZXR1cm47CkBAIC00NTE1LDYgKzU4MjEsMTQgQEAKIAkJCSAgIHByaXYtPmFzc29jX3JlcXVlc3QuYmVhY29uX2ludGVydmFsKTsKIH0KIAorc3RhdGljIHZvaWQgaXB3X2JnX2FkaG9jX2NoZWNrKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gZGF0YTsKKwlkb3duKCZwcml2LT5zZW0pOworCWlwd19hZGhvY19jaGVjayhkYXRhKTsKKwl1cCgmcHJpdi0+c2VtKTsKK30KKwogI2lmZGVmIENPTkZJR19JUFdfREVCVUcKIHN0YXRpYyB2b2lkIGlwd19kZWJ1Z19jb25maWcoc3RydWN0IGlwd19wcml2ICpwcml2KQogewpAQCAtNDUzMCw3ICs1ODQ0LDggQEAKIAllbHNlCiAJCUlQV19ERUJVR19JTkZPKCJFU1NJRCB1bmxvY2tlZC5cbiIpOwogCWlmIChwcml2LT5jb25maWcgJiBDRkdfU1RBVElDX0JTU0lEKQotCQlJUFdfREVCVUdfSU5GTygiQlNTSUQgbG9ja2VkIHRvICVkXG4iLCBwcml2LT5jaGFubmVsKTsKKwkJSVBXX0RFQlVHX0lORk8oIkJTU0lEIGxvY2tlZCB0byAiIE1BQ19GTVQgIlxuIiwKKwkJCSAgICAgICBNQUNfQVJHKHByaXYtPmJzc2lkKSk7CiAJZWxzZQogCQlJUFdfREVCVUdfSU5GTygiQlNTSUQgdW5sb2NrZWQuXG4iKTsKIAlpZiAocHJpdi0+Y2FwYWJpbGl0eSAmIENBUF9QUklWQUNZX09OKQpAQCAtNDU0Myw4ICs1ODU4LDcgQEAKICNkZWZpbmUgaXB3X2RlYnVnX2NvbmZpZyh4KSBkbyB7fSB3aGlsZSAoMCkKICNlbmRpZgogCi1zdGF0aWMgaW5saW5lIHZvaWQgaXB3X3NldF9maXhlZF9yYXRlKHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwKLQkJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgKm5ldHdvcmspCitzdGF0aWMgaW5saW5lIHZvaWQgaXB3X3NldF9maXhlZF9yYXRlKHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwgaW50IG1vZGUpCiB7CiAJLyogVE9ETzogVmVyaWZ5IHRoYXQgdGhpcyB3b3Jrcy4uLiAqLwogCXN0cnVjdCBpcHdfZml4ZWRfcmF0ZSBmciA9IHsKQEAgLTQ1NjEsNiArNTg3NSw4IEBACiAJCS8qIElFRUVfQSAqLwogCQlpZiAocHJpdi0+cmF0ZXNfbWFzayAmIH5JRUVFODAyMTFfT0ZETV9SQVRFU19NQVNLKSB7CiAJCQkvKiBJbnZhbGlkIGZpeGVkIHJhdGUgbWFzayAqLworCQkJSVBXX0RFQlVHX1dYCisJCQkgICAgKCJpbnZhbGlkIGZpeGVkIHJhdGUgbWFzayBpbiBpcHdfc2V0X2ZpeGVkX3JhdGVcbiIpOwogCQkJZnIudHhfcmF0ZXMgPSAwOwogCQkJYnJlYWs7CiAJCX0KQEAgLTQ1NzAsOSArNTg4NiwxMSBAQAogCiAJZGVmYXVsdDoJCS8qIDIuNEdoeiBvciBNaXhlZCAqLwogCQkvKiBJRUVFX0IgKi8KLQkJaWYgKG5ldHdvcmstPm1vZGUgPT0gSUVFRV9CKSB7CisJCWlmIChtb2RlID09IElFRUVfQikgewogCQkJaWYgKGZyLnR4X3JhdGVzICYgfklFRUU4MDIxMV9DQ0tfUkFURVNfTUFTSykgewogCQkJCS8qIEludmFsaWQgZml4ZWQgcmF0ZSBtYXNrICovCisJCQkJSVBXX0RFQlVHX1dYCisJCQkJICAgICgiaW52YWxpZCBmaXhlZCByYXRlIG1hc2sgaW4gaXB3X3NldF9maXhlZF9yYXRlXG4iKTsKIAkJCQlmci50eF9yYXRlcyA9IDA7CiAJCQl9CiAJCQlicmVhazsKQEAgLTQ1ODIsNiArNTkwMCw4IEBACiAJCWlmIChmci50eF9yYXRlcyAmIH4oSUVFRTgwMjExX0NDS19SQVRFU19NQVNLIHwKIAkJCQkgICAgSUVFRTgwMjExX09GRE1fUkFURVNfTUFTSykpIHsKIAkJCS8qIEludmFsaWQgZml4ZWQgcmF0ZSBtYXNrICovCisJCQlJUFdfREVCVUdfV1gKKwkJCSAgICAoImludmFsaWQgZml4ZWQgcmF0ZSBtYXNrIGluIGlwd19zZXRfZml4ZWRfcmF0ZVxuIik7CiAJCQlmci50eF9yYXRlcyA9IDA7CiAJCQlicmVhazsKIAkJfQpAQCAtNDYwOSw2ICs1OTI5LDExMTIgQEAKIAlpcHdfd3JpdGVfcmVnMzIocHJpdiwgcmVnLCAqKHUzMiAqKSAmIGZyKTsKIH0KIAorc3RhdGljIHZvaWQgaXB3X2Fib3J0X3NjYW4oc3RydWN0IGlwd19wcml2ICpwcml2KQoreworCWludCBlcnI7CisKKwlpZiAocHJpdi0+c3RhdHVzICYgU1RBVFVTX1NDQU5fQUJPUlRJTkcpIHsKKwkJSVBXX0RFQlVHX0hDKCJJZ25vcmluZyBjb25jdXJyZW50IHNjYW4gYWJvcnQgcmVxdWVzdC5cbiIpOworCQlyZXR1cm47CisJfQorCXByaXYtPnN0YXR1cyB8PSBTVEFUVVNfU0NBTl9BQk9SVElORzsKKworCWVyciA9IGlwd19zZW5kX3NjYW5fYWJvcnQocHJpdik7CisJaWYgKGVycikKKwkJSVBXX0RFQlVHX0hDKCJSZXF1ZXN0IHRvIGFib3J0IHNjYW4gZmFpbGVkLlxuIik7Cit9CisKK3N0YXRpYyB2b2lkIGlwd19hZGRfc2Nhbl9jaGFubmVscyhzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsCisJCQkJICBzdHJ1Y3QgaXB3X3NjYW5fcmVxdWVzdF9leHQgKnNjYW4sCisJCQkJICBpbnQgc2Nhbl90eXBlKQoreworCWludCBjaGFubmVsX2luZGV4ID0gMDsKKwljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2dlbyAqZ2VvOworCWludCBpOworCisJZ2VvID0gaXB3X2dldF9nZW8ocHJpdi0+aWVlZSk7CisKKwlpZiAocHJpdi0+aWVlZS0+ZnJlcV9iYW5kICYgSUVFRTgwMjExXzUyR0haX0JBTkQpIHsKKwkJaW50IHN0YXJ0ID0gY2hhbm5lbF9pbmRleDsKKwkJZm9yIChpID0gMDsgaSA8IGdlby0+YV9jaGFubmVsczsgaSsrKSB7CisJCQlpZiAoKHByaXYtPnN0YXR1cyAmIFNUQVRVU19BU1NPQ0lBVEVEKSAmJgorCQkJICAgIGdlby0+YVtpXS5jaGFubmVsID09IHByaXYtPmNoYW5uZWwpCisJCQkJY29udGludWU7CisJCQljaGFubmVsX2luZGV4Kys7CisJCQlzY2FuLT5jaGFubmVsc19saXN0W2NoYW5uZWxfaW5kZXhdID0gZ2VvLT5hW2ldLmNoYW5uZWw7CisJCQlpcHdfc2V0X3NjYW5fdHlwZShzY2FuLCBjaGFubmVsX2luZGV4LAorCQkJCQkgIGdlby0+YVtpXS4KKwkJCQkJICBmbGFncyAmIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFkgPworCQkJCQkgIElQV19TQ0FOX1BBU1NJVkVfRlVMTF9EV0VMTF9TQ0FOIDoKKwkJCQkJICBzY2FuX3R5cGUpOworCQl9CisKKwkJaWYgKHN0YXJ0ICE9IGNoYW5uZWxfaW5kZXgpIHsKKwkJCXNjYW4tPmNoYW5uZWxzX2xpc3Rbc3RhcnRdID0gKHU4KSAoSVBXX0FfTU9ERSA8PCA2KSB8CisJCQkgICAgKGNoYW5uZWxfaW5kZXggLSBzdGFydCk7CisJCQljaGFubmVsX2luZGV4Kys7CisJCX0KKwl9CisKKwlpZiAocHJpdi0+aWVlZS0+ZnJlcV9iYW5kICYgSUVFRTgwMjExXzI0R0haX0JBTkQpIHsKKwkJaW50IHN0YXJ0ID0gY2hhbm5lbF9pbmRleDsKKwkJaWYgKHByaXYtPmNvbmZpZyAmIENGR19TUEVFRF9TQ0FOKSB7CisJCQlpbnQgaW5kZXg7CisJCQl1OCBjaGFubmVsc1tJRUVFODAyMTFfMjRHSFpfQ0hBTk5FTFNdID0geworCQkJCS8qIG5vcCBvdXQgdGhlIGxpc3QgKi8KKwkJCQlbMF0gPSAwCisJCQl9OworCisJCQl1OCBjaGFubmVsOworCQkJd2hpbGUgKGNoYW5uZWxfaW5kZXggPCBJUFdfU0NBTl9DSEFOTkVMUykgeworCQkJCWNoYW5uZWwgPQorCQkJCSAgICBwcml2LT5zcGVlZF9zY2FuW3ByaXYtPnNwZWVkX3NjYW5fcG9zXTsKKwkJCQlpZiAoY2hhbm5lbCA9PSAwKSB7CisJCQkJCXByaXYtPnNwZWVkX3NjYW5fcG9zID0gMDsKKwkJCQkJY2hhbm5lbCA9IHByaXYtPnNwZWVkX3NjYW5bMF07CisJCQkJfQorCQkJCWlmICgocHJpdi0+c3RhdHVzICYgU1RBVFVTX0FTU09DSUFURUQpICYmCisJCQkJICAgIGNoYW5uZWwgPT0gcHJpdi0+Y2hhbm5lbCkgeworCQkJCQlwcml2LT5zcGVlZF9zY2FuX3BvcysrOworCQkJCQljb250aW51ZTsKKwkJCQl9CisKKwkJCQkvKiBJZiB0aGlzIGNoYW5uZWwgaGFzIGFscmVhZHkgYmVlbgorCQkJCSAqIGFkZGVkIGluIHNjYW4sIGJyZWFrIGZyb20gbG9vcAorCQkJCSAqIGFuZCB0aGlzIHdpbGwgYmUgdGhlIGZpcnN0IGNoYW5uZWwKKwkJCQkgKiBpbiB0aGUgbmV4dCBzY2FuLgorCQkJCSAqLworCQkJCWlmIChjaGFubmVsc1tjaGFubmVsIC0gMV0gIT0gMCkKKwkJCQkJYnJlYWs7CisKKwkJCQljaGFubmVsc1tjaGFubmVsIC0gMV0gPSAxOworCQkJCXByaXYtPnNwZWVkX3NjYW5fcG9zKys7CisJCQkJY2hhbm5lbF9pbmRleCsrOworCQkJCXNjYW4tPmNoYW5uZWxzX2xpc3RbY2hhbm5lbF9pbmRleF0gPSBjaGFubmVsOworCQkJCWluZGV4ID0KKwkJCQkgICAgaXB3X2NoYW5uZWxfdG9faW5kZXgocHJpdi0+aWVlZSwgY2hhbm5lbCk7CisJCQkJaXB3X3NldF9zY2FuX3R5cGUoc2NhbiwgY2hhbm5lbF9pbmRleCwKKwkJCQkJCSAgZ2VvLT5iZ1tpbmRleF0uCisJCQkJCQkgIGZsYWdzICYKKwkJCQkJCSAgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWSA/CisJCQkJCQkgIElQV19TQ0FOX1BBU1NJVkVfRlVMTF9EV0VMTF9TQ0FOCisJCQkJCQkgIDogc2Nhbl90eXBlKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBnZW8tPmJnX2NoYW5uZWxzOyBpKyspIHsKKwkJCQlpZiAoKHByaXYtPnN0YXR1cyAmIFNUQVRVU19BU1NPQ0lBVEVEKSAmJgorCQkJCSAgICBnZW8tPmJnW2ldLmNoYW5uZWwgPT0gcHJpdi0+Y2hhbm5lbCkKKwkJCQkJY29udGludWU7CisJCQkJY2hhbm5lbF9pbmRleCsrOworCQkJCXNjYW4tPmNoYW5uZWxzX2xpc3RbY2hhbm5lbF9pbmRleF0gPQorCQkJCSAgICBnZW8tPmJnW2ldLmNoYW5uZWw7CisJCQkJaXB3X3NldF9zY2FuX3R5cGUoc2NhbiwgY2hhbm5lbF9pbmRleCwKKwkJCQkJCSAgZ2VvLT5iZ1tpXS4KKwkJCQkJCSAgZmxhZ3MgJgorCQkJCQkJICBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZID8KKwkJCQkJCSAgSVBXX1NDQU5fUEFTU0lWRV9GVUxMX0RXRUxMX1NDQU4KKwkJCQkJCSAgOiBzY2FuX3R5cGUpOworCQkJfQorCQl9CisKKwkJaWYgKHN0YXJ0ICE9IGNoYW5uZWxfaW5kZXgpIHsKKwkJCXNjYW4tPmNoYW5uZWxzX2xpc3Rbc3RhcnRdID0gKHU4KSAoSVBXX0JfTU9ERSA8PCA2KSB8CisJCQkgICAgKGNoYW5uZWxfaW5kZXggLSBzdGFydCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgaXB3X3JlcXVlc3Rfc2NhbihzdHJ1Y3QgaXB3X3ByaXYgKnByaXYpCit7CisJc3RydWN0IGlwd19zY2FuX3JlcXVlc3RfZXh0IHNjYW47CisJaW50IGVyciA9IDAsIHNjYW5fdHlwZTsKKworCWlmICghKHByaXYtPnN0YXR1cyAmIFNUQVRVU19JTklUKSB8fAorCSAgICAocHJpdi0+c3RhdHVzICYgU1RBVFVTX0VYSVRfUEVORElORykpCisJCXJldHVybiAwOworCisJZG93bigmcHJpdi0+c2VtKTsKKworCWlmIChwcml2LT5zdGF0dXMgJiBTVEFUVVNfU0NBTk5JTkcpIHsKKwkJSVBXX0RFQlVHX0hDKCJDb25jdXJyZW50IHNjYW4gcmVxdWVzdGVkLiAgSWdub3JpbmcuXG4iKTsKKwkJcHJpdi0+c3RhdHVzIHw9IFNUQVRVU19TQ0FOX1BFTkRJTkc7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlpZiAoIShwcml2LT5zdGF0dXMgJiBTVEFUVVNfU0NBTl9GT1JDRUQpICYmCisJICAgIHByaXYtPnN0YXR1cyAmIFNUQVRVU19TQ0FOX0FCT1JUSU5HKSB7CisJCUlQV19ERUJVR19IQygiU2NhbiByZXF1ZXN0IHdoaWxlIGFib3J0IHBlbmRpbmcuICBRdWV1aW5nLlxuIik7CisJCXByaXYtPnN0YXR1cyB8PSBTVEFUVVNfU0NBTl9QRU5ESU5HOworCQlnb3RvIGRvbmU7CisJfQorCisJaWYgKHByaXYtPnN0YXR1cyAmIFNUQVRVU19SRl9LSUxMX01BU0spIHsKKwkJSVBXX0RFQlVHX0hDKCJBYm9ydGluZyBzY2FuIGR1ZSB0byBSRiBLaWxsIGFjdGl2YXRpb25cbiIpOworCQlwcml2LT5zdGF0dXMgfD0gU1RBVFVTX1NDQU5fUEVORElORzsKKwkJZ290byBkb25lOworCX0KKworCW1lbXNldCgmc2NhbiwgMCwgc2l6ZW9mKHNjYW4pKTsKKworCWlmIChwcml2LT5jb25maWcgJiBDRkdfU1BFRURfU0NBTikKKwkJc2Nhbi5kd2VsbF90aW1lW0lQV19TQ0FOX0FDVElWRV9CUk9BRENBU1RfU0NBTl0gPQorCQkgICAgY3B1X3RvX2xlMTYoMzApOworCWVsc2UKKwkJc2Nhbi5kd2VsbF90aW1lW0lQV19TQ0FOX0FDVElWRV9CUk9BRENBU1RfU0NBTl0gPQorCQkgICAgY3B1X3RvX2xlMTYoMjApOworCisJc2Nhbi5kd2VsbF90aW1lW0lQV19TQ0FOX0FDVElWRV9CUk9BRENBU1RfQU5EX0RJUkVDVF9TQ0FOXSA9CisJICAgIGNwdV90b19sZTE2KDIwKTsKKwlzY2FuLmR3ZWxsX3RpbWVbSVBXX1NDQU5fUEFTU0lWRV9GVUxMX0RXRUxMX1NDQU5dID0gY3B1X3RvX2xlMTYoMTIwKTsKKworCXNjYW4uZnVsbF9zY2FuX2luZGV4ID0gY3B1X3RvX2xlMzIoaWVlZTgwMjExX2dldF9zY2Fucyhwcml2LT5pZWVlKSk7CisKKyNpZmRlZiBDT05GSUdfSVBXMjIwMF9NT05JVE9SCisJaWYgKHByaXYtPmllZWUtPml3X21vZGUgPT0gSVdfTU9ERV9NT05JVE9SKSB7CisJCXU4IGNoYW5uZWw7CisJCXU4IGJhbmQgPSAwOworCisJCXN3aXRjaCAoaXB3X2lzX3ZhbGlkX2NoYW5uZWwocHJpdi0+aWVlZSwgcHJpdi0+Y2hhbm5lbCkpIHsKKwkJY2FzZSBJRUVFODAyMTFfNTJHSFpfQkFORDoKKwkJCWJhbmQgPSAodTgpIChJUFdfQV9NT0RFIDw8IDYpIHwgMTsKKwkJCWNoYW5uZWwgPSBwcml2LT5jaGFubmVsOworCQkJYnJlYWs7CisKKwkJY2FzZSBJRUVFODAyMTFfMjRHSFpfQkFORDoKKwkJCWJhbmQgPSAodTgpIChJUFdfQl9NT0RFIDw8IDYpIHwgMTsKKwkJCWNoYW5uZWwgPSBwcml2LT5jaGFubmVsOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWJhbmQgPSAodTgpIChJUFdfQl9NT0RFIDw8IDYpIHwgMTsKKwkJCWNoYW5uZWwgPSA5OworCQkJYnJlYWs7CisJCX0KKworCQlzY2FuLmNoYW5uZWxzX2xpc3RbMF0gPSBiYW5kOworCQlzY2FuLmNoYW5uZWxzX2xpc3RbMV0gPSBjaGFubmVsOworCQlpcHdfc2V0X3NjYW5fdHlwZSgmc2NhbiwgMSwgSVBXX1NDQU5fUEFTU0lWRV9GVUxMX0RXRUxMX1NDQU4pOworCisJCS8qIE5PVEU6ICBUaGUgY2FyZCB3aWxsIHNpdCBvbiB0aGlzIGNoYW5uZWwgZm9yIHRoaXMgdGltZQorCQkgKiBwZXJpb2QuICBTY2FuIGFib3J0cyBhcmUgdGltaW5nIHNlbnNpdGl2ZSBhbmQgZnJlcXVlbnRseQorCQkgKiByZXN1bHQgaW4gZmlybXdhcmUgcmVzdGFydHMuICBBcyBzdWNoLCBpdCBpcyBiZXN0IHRvCisJCSAqIHNldCBhIHNtYWxsIGR3ZWxsX3RpbWUgaGVyZSBhbmQganVzdCBrZWVwIHJlLWlzc3VpbmcKKwkJICogc2NhbnMuICBPdGhlcndpc2UgZmFzdCBjaGFubmVsIGhvcHBpbmcgd2lsbCBub3QgYWN0dWFsbHkKKwkJICogaG9wIGNoYW5uZWxzLgorCQkgKgorCQkgKiBUT0RPOiBNb3ZlIFNQRUVEIFNDQU4gc3VwcG9ydCB0byBhbGwgbW9kZXMgYW5kIGJhbmRzICovCisJCXNjYW4uZHdlbGxfdGltZVtJUFdfU0NBTl9QQVNTSVZFX0ZVTExfRFdFTExfU0NBTl0gPQorCQkgICAgY3B1X3RvX2xlMTYoMjAwMCk7CisJfSBlbHNlIHsKKyNlbmRpZgkJCQkvKiBDT05GSUdfSVBXMjIwMF9NT05JVE9SICovCisJCS8qIElmIHdlIGFyZSByb2FtaW5nLCB0aGVuIG1ha2UgdGhpcyBhIGRpcmVjdGVkIHNjYW4gZm9yIHRoZQorCQkgKiBjdXJyZW50IG5ldHdvcmsuICBPdGhlcndpc2UsIGVuc3VyZSB0aGF0IGV2ZXJ5IG90aGVyIHNjYW4KKwkJICogaXMgYSBmYXN0IGNoYW5uZWwgaG9wIHNjYW4gKi8KKwkJaWYgKChwcml2LT5zdGF0dXMgJiBTVEFUVVNfUk9BTUlORykKKwkJICAgIHx8ICghKHByaXYtPnN0YXR1cyAmIFNUQVRVU19BU1NPQ0lBVEVEKQorCQkJJiYgKHByaXYtPmNvbmZpZyAmIENGR19TVEFUSUNfRVNTSUQpCisJCQkmJiAobGUzMl90b19jcHUoc2Nhbi5mdWxsX3NjYW5faW5kZXgpICUgMikpKSB7CisJCQllcnIgPSBpcHdfc2VuZF9zc2lkKHByaXYsIHByaXYtPmVzc2lkLCBwcml2LT5lc3NpZF9sZW4pOworCQkJaWYgKGVycikgeworCQkJCUlQV19ERUJVR19IQygiQXR0ZW1wdCB0byBzZW5kIFNTSUQgY29tbWFuZCAiCisJCQkJCSAgICAgImZhaWxlZC5cbiIpOworCQkJCWdvdG8gZG9uZTsKKwkJCX0KKworCQkJc2Nhbl90eXBlID0gSVBXX1NDQU5fQUNUSVZFX0JST0FEQ0FTVF9BTkRfRElSRUNUX1NDQU47CisJCX0gZWxzZQorCQkJc2Nhbl90eXBlID0gSVBXX1NDQU5fQUNUSVZFX0JST0FEQ0FTVF9TQ0FOOworCisJCWlwd19hZGRfc2Nhbl9jaGFubmVscyhwcml2LCAmc2Nhbiwgc2Nhbl90eXBlKTsKKyNpZmRlZiBDT05GSUdfSVBXMjIwMF9NT05JVE9SCisJfQorI2VuZGlmCisKKwllcnIgPSBpcHdfc2VuZF9zY2FuX3JlcXVlc3RfZXh0KHByaXYsICZzY2FuKTsKKwlpZiAoZXJyKSB7CisJCUlQV19ERUJVR19IQygiU2VuZGluZyBzY2FuIGNvbW1hbmQgZmFpbGVkOiAlMDhYXG4iLCBlcnIpOworCQlnb3RvIGRvbmU7CisJfQorCisJcHJpdi0+c3RhdHVzIHw9IFNUQVRVU19TQ0FOTklORzsKKwlwcml2LT5zdGF0dXMgJj0gflNUQVRVU19TQ0FOX1BFTkRJTkc7CisJcXVldWVfZGVsYXllZF93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnNjYW5fY2hlY2ssCisJCQkgICBJUFdfU0NBTl9DSEVDS19XQVRDSERPRyk7CisgICAgICBkb25lOgorCXVwKCZwcml2LT5zZW0pOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIGlwd19iZ19hYm9ydF9zY2FuKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gZGF0YTsKKwlkb3duKCZwcml2LT5zZW0pOworCWlwd19hYm9ydF9zY2FuKGRhdGEpOworCXVwKCZwcml2LT5zZW0pOworfQorCitzdGF0aWMgaW50IGlwd193cGFfZW5hYmxlKHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwgaW50IHZhbHVlKQoreworCS8qIFRoaXMgaXMgY2FsbGVkIHdoZW4gd3BhX3N1cHBsaWNhbnQgbG9hZHMgYW5kIGNsb3NlcyB0aGUgZHJpdmVyCisJICogaW50ZXJmYWNlLiAqLworCXByaXYtPmllZWUtPndwYV9lbmFibGVkID0gdmFsdWU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXB3X3dwYV9zZXRfYXV0aF9hbGdzKHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwgaW50IHZhbHVlKQoreworCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlID0gcHJpdi0+aWVlZTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3NlY3VyaXR5IHNlYyA9IHsKKwkJLmZsYWdzID0gU0VDX0FVVEhfTU9ERSwKKwl9OworCWludCByZXQgPSAwOworCisJaWYgKHZhbHVlICYgSVdfQVVUSF9BTEdfU0hBUkVEX0tFWSkgeworCQlzZWMuYXV0aF9tb2RlID0gV0xBTl9BVVRIX1NIQVJFRF9LRVk7CisJCWllZWUtPm9wZW5fd2VwID0gMDsKKwl9IGVsc2UgaWYgKHZhbHVlICYgSVdfQVVUSF9BTEdfT1BFTl9TWVNURU0pIHsKKwkJc2VjLmF1dGhfbW9kZSA9IFdMQU5fQVVUSF9PUEVOOworCQlpZWVlLT5vcGVuX3dlcCA9IDE7CisJfSBlbHNlCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGllZWUtPnNldF9zZWN1cml0eSkKKwkJaWVlZS0+c2V0X3NlY3VyaXR5KGllZWUtPmRldiwgJnNlYyk7CisJZWxzZQorCQlyZXQgPSAtRU9QTk9UU1VQUDsKKworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgaXB3X3dwYV9hc3NvY19mcmFtZShzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsIGNoYXIgKndwYV9pZSwgaW50IHdwYV9pZV9sZW4pCit7CisJLyogbWFrZSBzdXJlIFdQQSBpcyBlbmFibGVkICovCisJaXB3X3dwYV9lbmFibGUocHJpdiwgMSk7CisKKwlpcHdfZGlzYXNzb2NpYXRlKHByaXYpOworfQorCitzdGF0aWMgaW50IGlwd19zZXRfcnNuX2NhcGEoc3RydWN0IGlwd19wcml2ICpwcml2LAorCQkJICAgIGNoYXIgKmNhcGFiaWxpdGllcywgaW50IGxlbmd0aCkKK3sKKwlzdHJ1Y3QgaG9zdF9jbWQgY21kID0geworCQkuY21kID0gSVBXX0NNRF9SU05fQ0FQQUJJTElUSUVTLAorCQkubGVuID0gbGVuZ3RoLAorCX07CisKKwlJUFdfREVCVUdfSEMoIkhPU1RfQ01EX1JTTl9DQVBBQklMSVRJRVNcbiIpOworCisJbWVtY3B5KGNtZC5wYXJhbSwgY2FwYWJpbGl0aWVzLCBsZW5ndGgpOworCXJldHVybiBpcHdfc2VuZF9jbWQocHJpdiwgJmNtZCk7Cit9CisKKy8qCisgKiBXRS0xOCBzdXBwb3J0CisgKi8KKworLyogU0lPQ1NJV0dFTklFICovCitzdGF0aWMgaW50IGlwd193eF9zZXRfZ2VuaWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUgPSBwcml2LT5pZWVlOworCXU4ICpidWY7CisJaW50IGVyciA9IDA7CisKKwlpZiAod3JxdS0+ZGF0YS5sZW5ndGggPiBNQVhfV1BBX0lFX0xFTiB8fAorCSAgICAod3JxdS0+ZGF0YS5sZW5ndGggJiYgZXh0cmEgPT0gTlVMTCkpCisJCXJldHVybiAtRUlOVkFMOworCisJLy9kb3duKCZwcml2LT5zZW0pOworCisJLy9pZiAoIWllZWUtPndwYV9lbmFibGVkKSB7CisJLy8gICAgICBlcnIgPSAtRU9QTk9UU1VQUDsKKwkvLyAgICAgIGdvdG8gb3V0OworCS8vfQorCisJaWYgKHdycXUtPmRhdGEubGVuZ3RoKSB7CisJCWJ1ZiA9IGttYWxsb2Mod3JxdS0+ZGF0YS5sZW5ndGgsIEdGUF9LRVJORUwpOworCQlpZiAoYnVmID09IE5VTEwpIHsKKwkJCWVyciA9IC1FTk9NRU07CisJCQlnb3RvIG91dDsKKwkJfQorCisJCW1lbWNweShidWYsIGV4dHJhLCB3cnF1LT5kYXRhLmxlbmd0aCk7CisJCWtmcmVlKGllZWUtPndwYV9pZSk7CisJCWllZWUtPndwYV9pZSA9IGJ1ZjsKKwkJaWVlZS0+d3BhX2llX2xlbiA9IHdycXUtPmRhdGEubGVuZ3RoOworCX0gZWxzZSB7CisJCWtmcmVlKGllZWUtPndwYV9pZSk7CisJCWllZWUtPndwYV9pZSA9IE5VTEw7CisJCWllZWUtPndwYV9pZV9sZW4gPSAwOworCX0KKworCWlwd193cGFfYXNzb2NfZnJhbWUocHJpdiwgaWVlZS0+d3BhX2llLCBpZWVlLT53cGFfaWVfbGVuKTsKKyAgICAgIG91dDoKKwkvL3VwKCZwcml2LT5zZW0pOworCXJldHVybiBlcnI7Cit9CisKKy8qIFNJT0NHSVdHRU5JRSAqLworc3RhdGljIGludCBpcHdfd3hfZ2V0X2dlbmllKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlID0gcHJpdi0+aWVlZTsKKwlpbnQgZXJyID0gMDsKKworCS8vZG93bigmcHJpdi0+c2VtKTsKKworCS8vaWYgKCFpZWVlLT53cGFfZW5hYmxlZCkgeworCS8vICAgICAgZXJyID0gLUVPUE5PVFNVUFA7CisJLy8gICAgICBnb3RvIG91dDsKKwkvL30KKworCWlmIChpZWVlLT53cGFfaWVfbGVuID09IDAgfHwgaWVlZS0+d3BhX2llID09IE5VTEwpIHsKKwkJd3JxdS0+ZGF0YS5sZW5ndGggPSAwOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAod3JxdS0+ZGF0YS5sZW5ndGggPCBpZWVlLT53cGFfaWVfbGVuKSB7CisJCWVyciA9IC1FMkJJRzsKKwkJZ290byBvdXQ7CisJfQorCisJd3JxdS0+ZGF0YS5sZW5ndGggPSBpZWVlLT53cGFfaWVfbGVuOworCW1lbWNweShleHRyYSwgaWVlZS0+d3BhX2llLCBpZWVlLT53cGFfaWVfbGVuKTsKKworICAgICAgb3V0OgorCS8vdXAoJnByaXYtPnNlbSk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCB3ZXh0X2NpcGhlcjJsZXZlbChpbnQgY2lwaGVyKQoreworCXN3aXRjaCAoY2lwaGVyKSB7CisJY2FzZSBJV19BVVRIX0NJUEhFUl9OT05FOgorCQlyZXR1cm4gU0VDX0xFVkVMXzA7CisJY2FzZSBJV19BVVRIX0NJUEhFUl9XRVA0MDoKKwljYXNlIElXX0FVVEhfQ0lQSEVSX1dFUDEwNDoKKwkJcmV0dXJuIFNFQ19MRVZFTF8xOworCWNhc2UgSVdfQVVUSF9DSVBIRVJfVEtJUDoKKwkJcmV0dXJuIFNFQ19MRVZFTF8yOworCWNhc2UgSVdfQVVUSF9DSVBIRVJfQ0NNUDoKKwkJcmV0dXJuIFNFQ19MRVZFTF8zOworCWRlZmF1bHQ6CisJCXJldHVybiAtMTsKKwl9Cit9CisKKy8qIFNJT0NTSVdBVVRIICovCitzdGF0aWMgaW50IGlwd193eF9zZXRfYXV0aChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUgPSBwcml2LT5pZWVlOworCXN0cnVjdCBpd19wYXJhbSAqcGFyYW0gPSAmd3JxdS0+cGFyYW07CisJc3RydWN0IGllZWU4MDIxMV9jcnlwdF9kYXRhICpjcnlwdDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQgPSAwOworCisJc3dpdGNoIChwYXJhbS0+ZmxhZ3MgJiBJV19BVVRIX0lOREVYKSB7CisJY2FzZSBJV19BVVRIX1dQQV9WRVJTSU9OOgorCQlicmVhazsKKwljYXNlIElXX0FVVEhfQ0lQSEVSX1BBSVJXSVNFOgorCQlpcHdfc2V0X2h3X2RlY3J5cHRfdW5pY2FzdChwcml2LAorCQkJCQkgICB3ZXh0X2NpcGhlcjJsZXZlbChwYXJhbS0+dmFsdWUpKTsKKwkJYnJlYWs7CisJY2FzZSBJV19BVVRIX0NJUEhFUl9HUk9VUDoKKwkJaXB3X3NldF9od19kZWNyeXB0X211bHRpY2FzdChwcml2LAorCQkJCQkgICAgIHdleHRfY2lwaGVyMmxldmVsKHBhcmFtLT52YWx1ZSkpOworCQlicmVhazsKKwljYXNlIElXX0FVVEhfS0VZX01HTVQ6CisJCS8qCisJCSAqIGlwdzIyMDAgZG9lcyBub3QgdXNlIHRoZXNlIHBhcmFtZXRlcnMKKwkJICovCisJCWJyZWFrOworCisJY2FzZSBJV19BVVRIX1RLSVBfQ09VTlRFUk1FQVNVUkVTOgorCQljcnlwdCA9IHByaXYtPmllZWUtPmNyeXB0W3ByaXYtPmllZWUtPnR4X2tleWlkeF07CisJCWlmICghY3J5cHQgfHwgIWNyeXB0LT5vcHMtPnNldF9mbGFncyB8fCAhY3J5cHQtPm9wcy0+Z2V0X2ZsYWdzKQorCQkJYnJlYWs7CisKKwkJZmxhZ3MgPSBjcnlwdC0+b3BzLT5nZXRfZmxhZ3MoY3J5cHQtPnByaXYpOworCisJCWlmIChwYXJhbS0+dmFsdWUpCisJCQlmbGFncyB8PSBJRUVFODAyMTFfQ1JZUFRPX1RLSVBfQ09VTlRFUk1FQVNVUkVTOworCQllbHNlCisJCQlmbGFncyAmPSB+SUVFRTgwMjExX0NSWVBUT19US0lQX0NPVU5URVJNRUFTVVJFUzsKKworCQljcnlwdC0+b3BzLT5zZXRfZmxhZ3MoZmxhZ3MsIGNyeXB0LT5wcml2KTsKKworCQlicmVhazsKKworCWNhc2UgSVdfQVVUSF9EUk9QX1VORU5DUllQVEVEOnsKKwkJCS8qIEhBQ0s6CisJCQkgKgorCQkJICogd3BhX3N1cHBsaWNhbnQgY2FsbHMgc2V0X3dwYV9lbmFibGVkIHdoZW4gdGhlIGRyaXZlcgorCQkJICogaXMgbG9hZGVkIGFuZCB1bmxvYWRlZCwgcmVnYXJkbGVzcyBvZiBpZiBXUEEgaXMgYmVpbmcKKwkJCSAqIHVzZWQuICBObyBvdGhlciBjYWxscyBhcmUgbWFkZSB3aGljaCBjYW4gYmUgdXNlZCB0bworCQkJICogZGV0ZXJtaW5lIGlmIGVuY3J5cHRpb24gd2lsbCBiZSB1c2VkIG9yIG5vdCBwcmlvciB0bworCQkJICogYXNzb2NpYXRpb24gYmVpbmcgZXhwZWN0ZWQuICBJZiBlbmNyeXB0aW9uIGlzIG5vdCBiZWluZworCQkJICogdXNlZCwgZHJvcF91bmVuY3J5cHRlZCBpcyBzZXQgdG8gZmFsc2UsIGVsc2UgdHJ1ZSAtLSB3ZQorCQkJICogY2FuIHVzZSB0aGlzIHRvIGRldGVybWluZSBpZiB0aGUgQ0FQX1BSSVZBQ1lfT04gYml0IHNob3VsZAorCQkJICogYmUgc2V0LgorCQkJICovCisJCQlzdHJ1Y3QgaWVlZTgwMjExX3NlY3VyaXR5IHNlYyA9IHsKKwkJCQkuZmxhZ3MgPSBTRUNfRU5BQkxFRCwKKwkJCQkuZW5hYmxlZCA9IHBhcmFtLT52YWx1ZSwKKwkJCX07CisJCQlwcml2LT5pZWVlLT5kcm9wX3VuZW5jcnlwdGVkID0gcGFyYW0tPnZhbHVlOworCQkJLyogV2Ugb25seSBjaGFuZ2UgU0VDX0xFVkVMIGZvciBvcGVuIG1vZGUuIE90aGVycworCQkJICogYXJlIHNldCBieSBpcHdfd3BhX3NldF9lbmNyeXB0aW9uLgorCQkJICovCisJCQlpZiAoIXBhcmFtLT52YWx1ZSkgeworCQkJCXNlYy5mbGFncyB8PSBTRUNfTEVWRUw7CisJCQkJc2VjLmxldmVsID0gU0VDX0xFVkVMXzA7CisJCQl9IGVsc2UgeworCQkJCXNlYy5mbGFncyB8PSBTRUNfTEVWRUw7CisJCQkJc2VjLmxldmVsID0gU0VDX0xFVkVMXzE7CisJCQl9CisJCQlpZiAocHJpdi0+aWVlZS0+c2V0X3NlY3VyaXR5KQorCQkJCXByaXYtPmllZWUtPnNldF9zZWN1cml0eShwcml2LT5pZWVlLT5kZXYsICZzZWMpOworCQkJYnJlYWs7CisJCX0KKworCWNhc2UgSVdfQVVUSF84MDIxMV9BVVRIX0FMRzoKKwkJcmV0ID0gaXB3X3dwYV9zZXRfYXV0aF9hbGdzKHByaXYsIHBhcmFtLT52YWx1ZSk7CisJCWJyZWFrOworCisJY2FzZSBJV19BVVRIX1dQQV9FTkFCTEVEOgorCQlyZXQgPSBpcHdfd3BhX2VuYWJsZShwcml2LCBwYXJhbS0+dmFsdWUpOworCQlicmVhazsKKworCWNhc2UgSVdfQVVUSF9SWF9VTkVOQ1JZUFRFRF9FQVBPTDoKKwkJaWVlZS0+aWVlZTgwMl8xeCA9IHBhcmFtLT52YWx1ZTsKKwkJYnJlYWs7CisKKwkJLy9jYXNlIElXX0FVVEhfUk9BTUlOR19DT05UUk9MOgorCWNhc2UgSVdfQVVUSF9QUklWQUNZX0lOVk9LRUQ6CisJCWllZWUtPnByaXZhY3lfaW52b2tlZCA9IHBhcmFtLT52YWx1ZTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorCXJldHVybiByZXQ7Cit9CisKKy8qIFNJT0NHSVdBVVRIICovCitzdGF0aWMgaW50IGlwd193eF9nZXRfYXV0aChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUgPSBwcml2LT5pZWVlOworCXN0cnVjdCBpZWVlODAyMTFfY3J5cHRfZGF0YSAqY3J5cHQ7CisJc3RydWN0IGl3X3BhcmFtICpwYXJhbSA9ICZ3cnF1LT5wYXJhbTsKKwlpbnQgcmV0ID0gMDsKKworCXN3aXRjaCAocGFyYW0tPmZsYWdzICYgSVdfQVVUSF9JTkRFWCkgeworCWNhc2UgSVdfQVVUSF9XUEFfVkVSU0lPTjoKKwljYXNlIElXX0FVVEhfQ0lQSEVSX1BBSVJXSVNFOgorCWNhc2UgSVdfQVVUSF9DSVBIRVJfR1JPVVA6CisJY2FzZSBJV19BVVRIX0tFWV9NR01UOgorCQkvKgorCQkgKiB3cGFfc3VwcGxpY2FudCB3aWxsIGNvbnRyb2wgdGhlc2UgaW50ZXJuYWxseQorCQkgKi8KKwkJcmV0ID0gLUVPUE5PVFNVUFA7CisJCWJyZWFrOworCisJY2FzZSBJV19BVVRIX1RLSVBfQ09VTlRFUk1FQVNVUkVTOgorCQljcnlwdCA9IHByaXYtPmllZWUtPmNyeXB0W3ByaXYtPmllZWUtPnR4X2tleWlkeF07CisJCWlmICghY3J5cHQgfHwgIWNyeXB0LT5vcHMtPmdldF9mbGFncykKKwkJCWJyZWFrOworCisJCXBhcmFtLT52YWx1ZSA9IChjcnlwdC0+b3BzLT5nZXRfZmxhZ3MoY3J5cHQtPnByaXYpICYKKwkJCQlJRUVFODAyMTFfQ1JZUFRPX1RLSVBfQ09VTlRFUk1FQVNVUkVTKSA/IDEgOiAwOworCisJCWJyZWFrOworCisJY2FzZSBJV19BVVRIX0RST1BfVU5FTkNSWVBURUQ6CisJCXBhcmFtLT52YWx1ZSA9IGllZWUtPmRyb3BfdW5lbmNyeXB0ZWQ7CisJCWJyZWFrOworCisJY2FzZSBJV19BVVRIXzgwMjExX0FVVEhfQUxHOgorCQlwYXJhbS0+dmFsdWUgPSBpZWVlLT5zZWMuYXV0aF9tb2RlOworCQlicmVhazsKKworCWNhc2UgSVdfQVVUSF9XUEFfRU5BQkxFRDoKKwkJcGFyYW0tPnZhbHVlID0gaWVlZS0+d3BhX2VuYWJsZWQ7CisJCWJyZWFrOworCisJY2FzZSBJV19BVVRIX1JYX1VORU5DUllQVEVEX0VBUE9MOgorCQlwYXJhbS0+dmFsdWUgPSBpZWVlLT5pZWVlODAyXzF4OworCQlicmVhazsKKworCWNhc2UgSVdfQVVUSF9ST0FNSU5HX0NPTlRST0w6CisJY2FzZSBJV19BVVRIX1BSSVZBQ1lfSU5WT0tFRDoKKwkJcGFyYW0tPnZhbHVlID0gaWVlZS0+cHJpdmFjeV9pbnZva2VkOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIFNJT0NTSVdFTkNPREVFWFQgKi8KK3N0YXRpYyBpbnQgaXB3X3d4X3NldF9lbmNvZGVleHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCXVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGl3X2VuY29kZV9leHQgKmV4dCA9IChzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqKWV4dHJhOworCisJaWYgKGh3Y3J5cHRvKSB7CisJCWlmIChleHQtPmFsZyA9PSBJV19FTkNPREVfQUxHX1RLSVApIHsKKwkJCS8qIElQVyBIVyBjYW4ndCBidWlsZCBUS0lQIE1JQywKKwkJCSAgIGhvc3QgZGVjcnlwdGlvbiBzdGlsbCBuZWVkZWQgKi8KKwkJCWlmIChleHQtPmV4dF9mbGFncyAmIElXX0VOQ09ERV9FWFRfR1JPVVBfS0VZKQorCQkJCXByaXYtPmllZWUtPmhvc3RfbWNfZGVjcnlwdCA9IDE7CisJCQllbHNlIHsKKwkJCQlwcml2LT5pZWVlLT5ob3N0X2VuY3J5cHQgPSAwOworCQkJCXByaXYtPmllZWUtPmhvc3RfZW5jcnlwdF9tc2R1ID0gMTsKKwkJCQlwcml2LT5pZWVlLT5ob3N0X2RlY3J5cHQgPSAxOworCQkJfQorCQl9IGVsc2UgeworCQkJcHJpdi0+aWVlZS0+aG9zdF9lbmNyeXB0ID0gMDsKKwkJCXByaXYtPmllZWUtPmhvc3RfZW5jcnlwdF9tc2R1ID0gMDsKKwkJCXByaXYtPmllZWUtPmhvc3RfZGVjcnlwdCA9IDA7CisJCQlwcml2LT5pZWVlLT5ob3N0X21jX2RlY3J5cHQgPSAwOworCQl9CisJfQorCisJcmV0dXJuIGllZWU4MDIxMV93eF9zZXRfZW5jb2RlZXh0KHByaXYtPmllZWUsIGluZm8sIHdycXUsIGV4dHJhKTsKK30KKworLyogU0lPQ0dJV0VOQ09ERUVYVCAqLworc3RhdGljIGludCBpcHdfd3hfZ2V0X2VuY29kZWV4dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlyZXR1cm4gaWVlZTgwMjExX3d4X2dldF9lbmNvZGVleHQocHJpdi0+aWVlZSwgaW5mbywgd3JxdSwgZXh0cmEpOworfQorCisvKiBTSU9DU0lXTUxNRSAqLworc3RhdGljIGludCBpcHdfd3hfc2V0X21sbWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXN0cnVjdCBpd19tbG1lICptbG1lID0gKHN0cnVjdCBpd19tbG1lICopZXh0cmE7CisJdTE2IHJlYXNvbjsKKworCXJlYXNvbiA9IGNwdV90b19sZTE2KG1sbWUtPnJlYXNvbl9jb2RlKTsKKworCXN3aXRjaCAobWxtZS0+Y21kKSB7CisJY2FzZSBJV19NTE1FX0RFQVVUSDoKKwkJLy8gc2lsZW50bHkgaWdub3JlCisJCWJyZWFrOworCisJY2FzZSBJV19NTE1FX0RJU0FTU09DOgorCQlpcHdfZGlzYXNzb2NpYXRlKHByaXYpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9CisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfSVBXX1FPUworCisvKiBRb1MgKi8KKy8qCisqIGdldCB0aGUgbW9kdWxhdGlvbiB0eXBlIG9mIHRoZSBjdXJyZW50IG5ldHdvcmsgb3IKKyogdGhlIGNhcmQgY3VycmVudCBtb2RlCisqLwordTggaXB3X3Fvc19jdXJyZW50X21vZGUoc3RydWN0IGlwd19wcml2ICogcHJpdikKK3sKKwl1OCBtb2RlID0gMDsKKworCWlmIChwcml2LT5zdGF0dXMgJiBTVEFUVVNfQVNTT0NJQVRFRCkgeworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5pZWVlLT5sb2NrLCBmbGFncyk7CisJCW1vZGUgPSBwcml2LT5hc3NvY19uZXR3b3JrLT5tb2RlOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5pZWVlLT5sb2NrLCBmbGFncyk7CisJfSBlbHNlIHsKKwkJbW9kZSA9IHByaXYtPmllZWUtPm1vZGU7CisJfQorCUlQV19ERUJVR19RT1MoIlFvUyBuZXR3b3JrL2NhcmQgbW9kZSAlZCBcbiIsIG1vZGUpOworCXJldHVybiBtb2RlOworfQorCisvKgorKiBIYW5kbGUgbWFuYWdlbWVudCBmcmFtZSBiZWFjb24gYW5kIHByb2JlIHJlc3BvbnNlCisqLworc3RhdGljIGludCBpcHdfcW9zX2hhbmRsZV9wcm9iZV9yZXNwb25zZShzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsCisJCQkJCSBpbnQgYWN0aXZlX25ldHdvcmssCisJCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgKm5ldHdvcmspCit7CisJdTMyIHNpemUgPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9xb3NfcGFyYW1ldGVycyk7CisKKwlpZiAobmV0d29yay0+Y2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9JQlNTKQorCQluZXR3b3JrLT5xb3NfZGF0YS5hY3RpdmUgPSBuZXR3b3JrLT5xb3NfZGF0YS5zdXBwb3J0ZWQ7CisKKwlpZiAobmV0d29yay0+ZmxhZ3MgJiBORVRXT1JLX0hBU19RT1NfTUFTSykgeworCQlpZiAoYWN0aXZlX25ldHdvcmsgJiYKKwkJICAgIChuZXR3b3JrLT5mbGFncyAmIE5FVFdPUktfSEFTX1FPU19QQVJBTUVURVJTKSkKKwkJCW5ldHdvcmstPnFvc19kYXRhLmFjdGl2ZSA9IG5ldHdvcmstPnFvc19kYXRhLnN1cHBvcnRlZDsKKworCQlpZiAoKG5ldHdvcmstPnFvc19kYXRhLmFjdGl2ZSA9PSAxKSAmJiAoYWN0aXZlX25ldHdvcmsgPT0gMSkgJiYKKwkJICAgIChuZXR3b3JrLT5mbGFncyAmIE5FVFdPUktfSEFTX1FPU19QQVJBTUVURVJTKSAmJgorCQkgICAgKG5ldHdvcmstPnFvc19kYXRhLm9sZF9wYXJhbV9jb3VudCAhPQorCQkgICAgIG5ldHdvcmstPnFvc19kYXRhLnBhcmFtX2NvdW50KSkgeworCQkJbmV0d29yay0+cW9zX2RhdGEub2xkX3BhcmFtX2NvdW50ID0KKwkJCSAgICBuZXR3b3JrLT5xb3NfZGF0YS5wYXJhbV9jb3VudDsKKwkJCXNjaGVkdWxlX3dvcmsoJnByaXYtPnFvc19hY3RpdmF0ZSk7CisJCQlJUFdfREVCVUdfUU9TKCJRb1MgcGFyYW1ldGVycyBjaGFuZ2UgY2FsbCAiCisJCQkJICAgICAgInFvc19hY3RpdmF0ZVxuIik7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoKHByaXYtPmllZWUtPm1vZGUgPT0gSUVFRV9CKSB8fCAobmV0d29yay0+bW9kZSA9PSBJRUVFX0IpKQorCQkJbWVtY3B5KCZuZXR3b3JrLT5xb3NfZGF0YS5wYXJhbWV0ZXJzLAorCQkJICAgICAgICZkZWZfcGFyYW1ldGVyc19DQ0ssIHNpemUpOworCQllbHNlCisJCQltZW1jcHkoJm5ldHdvcmstPnFvc19kYXRhLnBhcmFtZXRlcnMsCisJCQkgICAgICAgJmRlZl9wYXJhbWV0ZXJzX09GRE0sIHNpemUpOworCisJCWlmICgobmV0d29yay0+cW9zX2RhdGEuYWN0aXZlID09IDEpICYmIChhY3RpdmVfbmV0d29yayA9PSAxKSkgeworCQkJSVBXX0RFQlVHX1FPUygiUW9TIHdhcyBkaXNhYmxlZCBjYWxsIHFvc19hY3RpdmF0ZSBcbiIpOworCQkJc2NoZWR1bGVfd29yaygmcHJpdi0+cW9zX2FjdGl2YXRlKTsKKwkJfQorCisJCW5ldHdvcmstPnFvc19kYXRhLmFjdGl2ZSA9IDA7CisJCW5ldHdvcmstPnFvc19kYXRhLnN1cHBvcnRlZCA9IDA7CisJfQorCWlmICgocHJpdi0+c3RhdHVzICYgU1RBVFVTX0FTU09DSUFURUQpICYmCisJICAgIChwcml2LT5pZWVlLT5pd19tb2RlID09IElXX01PREVfQURIT0MpICYmIChhY3RpdmVfbmV0d29yayA9PSAwKSkgeworCQlpZiAobWVtY21wKG5ldHdvcmstPmJzc2lkLCBwcml2LT5ic3NpZCwgRVRIX0FMRU4pKQorCQkJaWYgKChuZXR3b3JrLT5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX0lCU1MpICYmCisJCQkgICAgIShuZXR3b3JrLT5mbGFncyAmIE5FVFdPUktfRU1QVFlfRVNTSUQpKQorCQkJCWlmICgobmV0d29yay0+c3NpZF9sZW4gPT0KKwkJCQkgICAgIHByaXYtPmFzc29jX25ldHdvcmstPnNzaWRfbGVuKSAmJgorCQkJCSAgICAhbWVtY21wKG5ldHdvcmstPnNzaWQsCisJCQkJCSAgICBwcml2LT5hc3NvY19uZXR3b3JrLT5zc2lkLAorCQkJCQkgICAgbmV0d29yay0+c3NpZF9sZW4pKSB7CisJCQkJCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLAorCQkJCQkJICAgJnByaXYtPm1lcmdlX25ldHdvcmtzKTsKKwkJCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisqIFRoaXMgZnVuY3Rpb24gc2V0IHVwIHRoZSBmaXJtd2FyZSB0byBzdXBwb3J0IFFvUy4gSXQgc2VuZHMKKyogSVBXX0NNRF9RT1NfUEFSQU1FVEVSUyBhbmQgSVBXX0NNRF9XTUVfSU5GTworKi8KK3N0YXRpYyBpbnQgaXB3X3Fvc19hY3RpdmF0ZShzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsCisJCQkgICAgc3RydWN0IGllZWU4MDIxMV9xb3NfZGF0YSAqcW9zX25ldHdvcmtfZGF0YSkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBpZWVlODAyMTFfcW9zX3BhcmFtZXRlcnMgcW9zX3BhcmFtZXRlcnNbUU9TX1FPU19TRVRTXTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3Fvc19wYXJhbWV0ZXJzICphY3RpdmVfb25lID0gTlVMTDsKKwl1MzIgc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3Fvc19wYXJhbWV0ZXJzKTsKKwl1MzIgYnVyc3RfZHVyYXRpb247CisJaW50IGk7CisJdTggdHlwZTsKKworCXR5cGUgPSBpcHdfcW9zX2N1cnJlbnRfbW9kZShwcml2KTsKKworCWFjdGl2ZV9vbmUgPSAmKHFvc19wYXJhbWV0ZXJzW1FPU19QQVJBTV9TRVRfREVGX0NDS10pOworCW1lbWNweShhY3RpdmVfb25lLCBwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm1fQ0NLLCBzaXplKTsKKwlhY3RpdmVfb25lID0gJihxb3NfcGFyYW1ldGVyc1tRT1NfUEFSQU1fU0VUX0RFRl9PRkRNXSk7CisJbWVtY3B5KGFjdGl2ZV9vbmUsIHByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybV9PRkRNLCBzaXplKTsKKworCWlmIChxb3NfbmV0d29ya19kYXRhID09IE5VTEwpIHsKKwkJaWYgKHR5cGUgPT0gSUVFRV9CKSB7CisJCQlJUFdfREVCVUdfUU9TKCJRb1MgYWN0aXZhdGUgbmV0d29yayBtb2RlICVkXG4iLCB0eXBlKTsKKwkJCWFjdGl2ZV9vbmUgPSAmZGVmX3BhcmFtZXRlcnNfQ0NLOworCQl9IGVsc2UKKwkJCWFjdGl2ZV9vbmUgPSAmZGVmX3BhcmFtZXRlcnNfT0ZETTsKKworCQltZW1jcHkoJnFvc19wYXJhbWV0ZXJzW1FPU19QQVJBTV9TRVRfQUNUSVZFXSwgYWN0aXZlX29uZSwgc2l6ZSk7CisJCWJ1cnN0X2R1cmF0aW9uID0gaXB3X3Fvc19nZXRfYnVyc3RfZHVyYXRpb24ocHJpdik7CisJCWZvciAoaSA9IDA7IGkgPCBRT1NfUVVFVUVfTlVNOyBpKyspCisJCQlxb3NfcGFyYW1ldGVyc1tRT1NfUEFSQU1fU0VUX0FDVElWRV0udHhfb3BfbGltaXRbaV0gPQorCQkJICAgICh1MTYpIGJ1cnN0X2R1cmF0aW9uOworCX0gZWxzZSBpZiAocHJpdi0+aWVlZS0+aXdfbW9kZSA9PSBJV19NT0RFX0FESE9DKSB7CisJCWlmICh0eXBlID09IElFRUVfQikgeworCQkJSVBXX0RFQlVHX1FPUygiUW9TIGFjdGl2YXRlIElCU1MgbmV3b3JrIG1vZGUgJWRcbiIsCisJCQkJICAgICAgdHlwZSk7CisJCQlpZiAocHJpdi0+cW9zX2RhdGEucW9zX2VuYWJsZSA9PSAwKQorCQkJCWFjdGl2ZV9vbmUgPSAmZGVmX3BhcmFtZXRlcnNfQ0NLOworCQkJZWxzZQorCQkJCWFjdGl2ZV9vbmUgPSBwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm1fQ0NLOworCQl9IGVsc2UgeworCQkJaWYgKHByaXYtPnFvc19kYXRhLnFvc19lbmFibGUgPT0gMCkKKwkJCQlhY3RpdmVfb25lID0gJmRlZl9wYXJhbWV0ZXJzX09GRE07CisJCQllbHNlCisJCQkJYWN0aXZlX29uZSA9IHByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybV9PRkRNOworCQl9CisJCW1lbWNweSgmcW9zX3BhcmFtZXRlcnNbUU9TX1BBUkFNX1NFVF9BQ1RJVkVdLCBhY3RpdmVfb25lLCBzaXplKTsKKwl9IGVsc2UgeworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCQlpbnQgYWN0aXZlOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5pZWVlLT5sb2NrLCBmbGFncyk7CisJCWFjdGl2ZV9vbmUgPSAmKHFvc19uZXR3b3JrX2RhdGEtPnBhcmFtZXRlcnMpOworCQlxb3NfbmV0d29ya19kYXRhLT5vbGRfcGFyYW1fY291bnQgPQorCQkgICAgcW9zX25ldHdvcmtfZGF0YS0+cGFyYW1fY291bnQ7CisJCW1lbWNweSgmcW9zX3BhcmFtZXRlcnNbUU9TX1BBUkFNX1NFVF9BQ1RJVkVdLCBhY3RpdmVfb25lLCBzaXplKTsKKwkJYWN0aXZlID0gcW9zX25ldHdvcmtfZGF0YS0+c3VwcG9ydGVkOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5pZWVlLT5sb2NrLCBmbGFncyk7CisKKwkJaWYgKGFjdGl2ZSA9PSAwKSB7CisJCQlidXJzdF9kdXJhdGlvbiA9IGlwd19xb3NfZ2V0X2J1cnN0X2R1cmF0aW9uKHByaXYpOworCQkJZm9yIChpID0gMDsgaSA8IFFPU19RVUVVRV9OVU07IGkrKykKKwkJCQlxb3NfcGFyYW1ldGVyc1tRT1NfUEFSQU1fU0VUX0FDVElWRV0uCisJCQkJICAgIHR4X29wX2xpbWl0W2ldID0gKHUxNikgYnVyc3RfZHVyYXRpb247CisJCX0KKwl9CisKKwlJUFdfREVCVUdfUU9TKCJRb1Mgc2VuZGluZyBJUFdfQ01EX1FPU19QQVJBTUVURVJTXG4iKTsKKwllcnIgPSBpcHdfc2VuZF9xb3NfcGFyYW1zX2NvbW1hbmQocHJpdiwKKwkJCQkJICAoc3RydWN0IGllZWU4MDIxMV9xb3NfcGFyYW1ldGVycyAqKQorCQkJCQkgICYocW9zX3BhcmFtZXRlcnNbMF0pKTsKKwlpZiAoZXJyKQorCQlJUFdfREVCVUdfUU9TKCJRb1MgSVBXX0NNRF9RT1NfUEFSQU1FVEVSUyBmYWlsZWRcbiIpOworCisJcmV0dXJuIGVycjsKK30KKworLyoKKyogc2VuZCBJUFdfQ01EX1dNRV9JTkZPIHRvIHRoZSBmaXJtd2FyZQorKi8KK3N0YXRpYyBpbnQgaXB3X3Fvc19zZXRfaW5mb19lbGVtZW50KHN0cnVjdCBpcHdfcHJpdiAqcHJpdikKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3Fvc19pbmZvcm1hdGlvbl9lbGVtZW50IHFvc19pbmZvOworCisJaWYgKHByaXYgPT0gTlVMTCkKKwkJcmV0dXJuIC0xOworCisJcW9zX2luZm8uZWxlbWVudElEID0gUU9TX0VMRU1FTlRfSUQ7CisJcW9zX2luZm8ubGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfcW9zX2luZm9ybWF0aW9uX2VsZW1lbnQpIC0gMjsKKworCXFvc19pbmZvLnZlcnNpb24gPSBRT1NfVkVSU0lPTl8xOworCXFvc19pbmZvLmFjX2luZm8gPSAwOworCisJbWVtY3B5KHFvc19pbmZvLnF1aSwgcW9zX291aSwgUU9TX09VSV9MRU4pOworCXFvc19pbmZvLnF1aV90eXBlID0gUU9TX09VSV9UWVBFOworCXFvc19pbmZvLnF1aV9zdWJ0eXBlID0gUU9TX09VSV9JTkZPX1NVQl9UWVBFOworCisJcmV0ID0gaXB3X3NlbmRfcW9zX2luZm9fY29tbWFuZChwcml2LCAmcW9zX2luZm8pOworCWlmIChyZXQgIT0gMCkgeworCQlJUFdfREVCVUdfUU9TKCJRb1MgZXJyb3IgY2FsbGluZyBpcHdfc2VuZF9xb3NfaW5mb19jb21tYW5kXG4iKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworLyoKKyogU2V0IHRoZSBRb1MgcGFyYW1ldGVyIHdpdGggdGhlIGFzc29jaWF0aW9uIHJlcXVlc3Qgc3RydWN0dXJlCisqLworc3RhdGljIGludCBpcHdfcW9zX2Fzc29jaWF0aW9uKHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwKKwkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgKm5ldHdvcmspCit7CisJaW50IGVyciA9IDA7CisJc3RydWN0IGllZWU4MDIxMV9xb3NfZGF0YSAqcW9zX2RhdGEgPSBOVUxMOworCXN0cnVjdCBpZWVlODAyMTFfcW9zX2RhdGEgaWJzc19kYXRhID0geworCQkuc3VwcG9ydGVkID0gMSwKKwkJLmFjdGl2ZSA9IDEsCisJfTsKKworCXN3aXRjaCAocHJpdi0+aWVlZS0+aXdfbW9kZSkgeworCWNhc2UgSVdfTU9ERV9BREhPQzoKKwkJaWYgKCEobmV0d29yay0+Y2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9JQlNTKSkKKwkJCUJVRygpOworCisJCXFvc19kYXRhID0gJmlic3NfZGF0YTsKKwkJYnJlYWs7CisKKwljYXNlIElXX01PREVfSU5GUkE6CisJCXFvc19kYXRhID0gJm5ldHdvcmstPnFvc19kYXRhOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCUJVRygpOworCQlicmVhazsKKwl9CisKKwllcnIgPSBpcHdfcW9zX2FjdGl2YXRlKHByaXYsIHFvc19kYXRhKTsKKwlpZiAoZXJyKSB7CisJCXByaXYtPmFzc29jX3JlcXVlc3QucG9saWN5X3N1cHBvcnQgJj0gfkhDX1FPU19TVVBQT1JUX0FTU09DOworCQlyZXR1cm4gZXJyOworCX0KKworCWlmIChwcml2LT5xb3NfZGF0YS5xb3NfZW5hYmxlICYmIHFvc19kYXRhLT5zdXBwb3J0ZWQpIHsKKwkJSVBXX0RFQlVHX1FPUygiUW9TIHdpbGwgYmUgZW5hYmxlZCBmb3IgdGhpcyBhc3NvY2lhdGlvblxuIik7CisJCXByaXYtPmFzc29jX3JlcXVlc3QucG9saWN5X3N1cHBvcnQgfD0gSENfUU9TX1NVUFBPUlRfQVNTT0M7CisJCXJldHVybiBpcHdfcW9zX3NldF9pbmZvX2VsZW1lbnQocHJpdik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisqIGhhbmRsaW5nIHRoZSBiZWFjb25pbmcgcmVzcG9uY2VzLiBpZiB3ZSBnZXQgZGlmZmVyZW50IFFvUyBzZXR0aW5nCisqIG9mIHRoZSBuZXR3b3JrIGZyb20gdGhlIHRoZSBhc3NvY2lhdGVkIHNldHRpbmcgYWRqdXN0IHRoZSBRb1MKKyogc2V0dGluZworKi8KK3N0YXRpYyBpbnQgaXB3X3Fvc19hc3NvY2lhdGlvbl9yZXNwKHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwKKwkJCQkgICAgc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICpuZXR3b3JrKQoreworCWludCByZXQgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHNpemUgPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9xb3NfcGFyYW1ldGVycyk7CisJaW50IHNldF9xb3NfcGFyYW0gPSAwOworCisJaWYgKChwcml2ID09IE5VTEwpIHx8IChuZXR3b3JrID09IE5VTEwpIHx8CisJICAgIChwcml2LT5hc3NvY19uZXR3b3JrID09IE5VTEwpKQorCQlyZXR1cm4gcmV0OworCisJaWYgKCEocHJpdi0+c3RhdHVzICYgU1RBVFVTX0FTU09DSUFURUQpKQorCQlyZXR1cm4gcmV0OworCisJaWYgKChwcml2LT5pZWVlLT5pd19tb2RlICE9IElXX01PREVfSU5GUkEpKQorCQlyZXR1cm4gcmV0OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmllZWUtPmxvY2ssIGZsYWdzKTsKKwlpZiAobmV0d29yay0+ZmxhZ3MgJiBORVRXT1JLX0hBU19RT1NfUEFSQU1FVEVSUykgeworCQltZW1jcHkoJnByaXYtPmFzc29jX25ldHdvcmstPnFvc19kYXRhLCAmbmV0d29yay0+cW9zX2RhdGEsCisJCSAgICAgICBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9xb3NfZGF0YSkpOworCQlwcml2LT5hc3NvY19uZXR3b3JrLT5xb3NfZGF0YS5hY3RpdmUgPSAxOworCQlpZiAoKG5ldHdvcmstPnFvc19kYXRhLm9sZF9wYXJhbV9jb3VudCAhPQorCQkgICAgIG5ldHdvcmstPnFvc19kYXRhLnBhcmFtX2NvdW50KSkgeworCQkJc2V0X3Fvc19wYXJhbSA9IDE7CisJCQluZXR3b3JrLT5xb3NfZGF0YS5vbGRfcGFyYW1fY291bnQgPQorCQkJICAgIG5ldHdvcmstPnFvc19kYXRhLnBhcmFtX2NvdW50OworCQl9CisKKwl9IGVsc2UgeworCQlpZiAoKG5ldHdvcmstPm1vZGUgPT0gSUVFRV9CKSB8fCAocHJpdi0+aWVlZS0+bW9kZSA9PSBJRUVFX0IpKQorCQkJbWVtY3B5KCZwcml2LT5hc3NvY19uZXR3b3JrLT5xb3NfZGF0YS5wYXJhbWV0ZXJzLAorCQkJICAgICAgICZkZWZfcGFyYW1ldGVyc19DQ0ssIHNpemUpOworCQllbHNlCisJCQltZW1jcHkoJnByaXYtPmFzc29jX25ldHdvcmstPnFvc19kYXRhLnBhcmFtZXRlcnMsCisJCQkgICAgICAgJmRlZl9wYXJhbWV0ZXJzX09GRE0sIHNpemUpOworCQlwcml2LT5hc3NvY19uZXR3b3JrLT5xb3NfZGF0YS5hY3RpdmUgPSAwOworCQlwcml2LT5hc3NvY19uZXR3b3JrLT5xb3NfZGF0YS5zdXBwb3J0ZWQgPSAwOworCQlzZXRfcW9zX3BhcmFtID0gMTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5pZWVlLT5sb2NrLCBmbGFncyk7CisKKwlpZiAoc2V0X3Fvc19wYXJhbSA9PSAxKQorCQlzY2hlZHVsZV93b3JrKCZwcml2LT5xb3NfYWN0aXZhdGUpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHUzMiBpcHdfcW9zX2dldF9idXJzdF9kdXJhdGlvbihzdHJ1Y3QgaXB3X3ByaXYgKnByaXYpCit7CisJdTMyIHJldCA9IDA7CisKKwlpZiAoKHByaXYgPT0gTlVMTCkpCisJCXJldHVybiAwOworCisJaWYgKCEocHJpdi0+aWVlZS0+bW9kdWxhdGlvbiAmIElFRUU4MDIxMV9PRkRNX01PRFVMQVRJT04pKQorCQlyZXQgPSBwcml2LT5xb3NfZGF0YS5idXJzdF9kdXJhdGlvbl9DQ0s7CisJZWxzZQorCQlyZXQgPSBwcml2LT5xb3NfZGF0YS5idXJzdF9kdXJhdGlvbl9PRkRNOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyogSW5pdGlhbGl6ZSB0aGUgc2V0dGluZyBvZiBRb1MgZ2xvYmFsCisqLworc3RhdGljIHZvaWQgaXB3X3Fvc19pbml0KHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwgaW50IGVuYWJsZSwKKwkJCSBpbnQgYnVyc3RfZW5hYmxlLCB1MzIgYnVyc3RfZHVyYXRpb25fQ0NLLAorCQkJIHUzMiBidXJzdF9kdXJhdGlvbl9PRkRNKQoreworCXByaXYtPnFvc19kYXRhLnFvc19lbmFibGUgPSBlbmFibGU7CisKKwlpZiAocHJpdi0+cW9zX2RhdGEucW9zX2VuYWJsZSkgeworCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm1fQ0NLID0gJmRlZl9xb3NfcGFyYW1ldGVyc19DQ0s7CisJCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybV9PRkRNID0gJmRlZl9xb3NfcGFyYW1ldGVyc19PRkRNOworCQlJUFdfREVCVUdfUU9TKCJRb1MgaXMgZW5hYmxlZFxuIik7CisJfSBlbHNlIHsKKwkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtX0NDSyA9ICZkZWZfcGFyYW1ldGVyc19DQ0s7CisJCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybV9PRkRNID0gJmRlZl9wYXJhbWV0ZXJzX09GRE07CisJCUlQV19ERUJVR19RT1MoIlFvUyBpcyBub3QgZW5hYmxlZFxuIik7CisJfQorCisJcHJpdi0+cW9zX2RhdGEuYnVyc3RfZW5hYmxlID0gYnVyc3RfZW5hYmxlOworCisJaWYgKGJ1cnN0X2VuYWJsZSkgeworCQlwcml2LT5xb3NfZGF0YS5idXJzdF9kdXJhdGlvbl9DQ0sgPSBidXJzdF9kdXJhdGlvbl9DQ0s7CisJCXByaXYtPnFvc19kYXRhLmJ1cnN0X2R1cmF0aW9uX09GRE0gPSBidXJzdF9kdXJhdGlvbl9PRkRNOworCX0gZWxzZSB7CisJCXByaXYtPnFvc19kYXRhLmJ1cnN0X2R1cmF0aW9uX0NDSyA9IDA7CisJCXByaXYtPnFvc19kYXRhLmJ1cnN0X2R1cmF0aW9uX09GRE0gPSAwOworCX0KK30KKworLyoKKyogbWFwIHRoZSBwYWNrZXQgcHJpb3JpdHkgdG8gdGhlIHJpZ2h0IFRYIFF1ZXVlCisqLworc3RhdGljIGludCBpcHdfZ2V0X3R4X3F1ZXVlX251bWJlcihzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsIHUxNiBwcmlvcml0eSkKK3sKKwlpZiAocHJpb3JpdHkgPiA3IHx8ICFwcml2LT5xb3NfZGF0YS5xb3NfZW5hYmxlKQorCQlwcmlvcml0eSA9IDA7CisKKwlyZXR1cm4gZnJvbV9wcmlvcml0eV90b190eF9xdWV1ZVtwcmlvcml0eV0gLSAxOworfQorCisvKgorKiBhZGQgUW9TIHBhcmFtZXRlciB0byB0aGUgVFggY29tbWFuZAorKi8KK3N0YXRpYyBpbnQgaXB3X3Fvc19zZXRfdHhfcXVldWVfY29tbWFuZChzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsCisJCQkJCXUxNiBwcmlvcml0eSwKKwkJCQkJc3RydWN0IHRmZF9kYXRhICp0ZmQsIHU4IHVuaWNhc3QpCit7CisJaW50IHJldCA9IDA7CisJaW50IHR4X3F1ZXVlX2lkID0gMDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3Fvc19kYXRhICpxb3NfZGF0YSA9IE5VTEw7CisJaW50IGFjdGl2ZSwgc3VwcG9ydGVkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIShwcml2LT5zdGF0dXMgJiBTVEFUVVNfQVNTT0NJQVRFRCkpCisJCXJldHVybiAwOworCisJcW9zX2RhdGEgPSAmcHJpdi0+YXNzb2NfbmV0d29yay0+cW9zX2RhdGE7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+aWVlZS0+bG9jaywgZmxhZ3MpOworCisJaWYgKHByaXYtPmllZWUtPml3X21vZGUgPT0gSVdfTU9ERV9BREhPQykgeworCQlpZiAodW5pY2FzdCA9PSAwKQorCQkJcW9zX2RhdGEtPmFjdGl2ZSA9IDA7CisJCWVsc2UKKwkJCXFvc19kYXRhLT5hY3RpdmUgPSBxb3NfZGF0YS0+c3VwcG9ydGVkOworCX0KKworCWFjdGl2ZSA9IHFvc19kYXRhLT5hY3RpdmU7CisJc3VwcG9ydGVkID0gcW9zX2RhdGEtPnN1cHBvcnRlZDsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmllZWUtPmxvY2ssIGZsYWdzKTsKKworCUlQV19ERUJVR19RT1MoIlFvUyAgJWQgbmV0d29yayBpcyBRb1MgYWN0aXZlICVkICBzdXBwb3J0ZWQgJWQgICIKKwkJICAgICAgInVuaWNhc3QgJWRcbiIsCisJCSAgICAgIHByaXYtPnFvc19kYXRhLnFvc19lbmFibGUsIGFjdGl2ZSwgc3VwcG9ydGVkLCB1bmljYXN0KTsKKwlpZiAoYWN0aXZlICYmIHByaXYtPnFvc19kYXRhLnFvc19lbmFibGUpIHsKKwkJcmV0ID0gZnJvbV9wcmlvcml0eV90b190eF9xdWV1ZVtwcmlvcml0eV07CisJCXR4X3F1ZXVlX2lkID0gcmV0IC0gMTsKKwkJSVBXX0RFQlVHX1FPUygiUW9TIHBhY2tldCBwcmlvcml0eSBpcyAlZCBcbiIsIHByaW9yaXR5KTsKKwkJaWYgKHByaW9yaXR5IDw9IDcpIHsKKwkJCXRmZC0+dHhfZmxhZ3NfZXh0IHw9IERDVF9GTEFHX0VYVF9RT1NfRU5BQkxFRDsKKwkJCXRmZC0+dGZkLnRmZF8yNi5tY2hkci5xb3NfY3RybCA9IHByaW9yaXR5OworCQkJdGZkLT50ZmQudGZkXzI2Lm1jaGRyLmZyYW1lX2N0bCB8PQorCQkJICAgIElFRUU4MDIxMV9TVFlQRV9RT1NfREFUQTsKKworCQkJaWYgKHByaXYtPnFvc19kYXRhLnFvc19ub19hY2tfbWFzayAmCisJCQkgICAgKDFVTCA8PCB0eF9xdWV1ZV9pZCkpIHsKKwkJCQl0ZmQtPnR4X2ZsYWdzICY9IH5EQ1RfRkxBR19BQ0tfUkVRRDsKKwkJCQl0ZmQtPnRmZC50ZmRfMjYubWNoZHIucW9zX2N0cmwgfD0KKwkJCQkgICAgQ1RSTF9RT1NfTk9fQUNLOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoKKyogYmFja2dyb3VuZCBzdXBwb3J0IHRvIHJ1biBRb1MgYWN0aXZhdGUgZnVuY3Rpb25hbGl0eQorKi8KK3N0YXRpYyB2b2lkIGlwd19iZ19xb3NfYWN0aXZhdGUodm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBkYXRhOworCisJaWYgKHByaXYgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJZG93bigmcHJpdi0+c2VtKTsKKworCWlmIChwcml2LT5zdGF0dXMgJiBTVEFUVVNfQVNTT0NJQVRFRCkKKwkJaXB3X3Fvc19hY3RpdmF0ZShwcml2LCAmKHByaXYtPmFzc29jX25ldHdvcmstPnFvc19kYXRhKSk7CisKKwl1cCgmcHJpdi0+c2VtKTsKK30KKworc3RhdGljIGludCBpcHdfaGFuZGxlX3Byb2JlX3Jlc3BvbnNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3Byb2JlX3Jlc3BvbnNlICpyZXNwLAorCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICpuZXR3b3JrKQoreworCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJaW50IGFjdGl2ZV9uZXR3b3JrID0gKChwcml2LT5zdGF0dXMgJiBTVEFUVVNfQVNTT0NJQVRFRCkgJiYKKwkJCSAgICAgIChuZXR3b3JrID09IHByaXYtPmFzc29jX25ldHdvcmspKTsKKworCWlwd19xb3NfaGFuZGxlX3Byb2JlX3Jlc3BvbnNlKHByaXYsIGFjdGl2ZV9uZXR3b3JrLCBuZXR3b3JrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlwd19oYW5kbGVfYmVhY29uKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfYmVhY29uICpyZXNwLAorCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgKm5ldHdvcmspCit7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlpbnQgYWN0aXZlX25ldHdvcmsgPSAoKHByaXYtPnN0YXR1cyAmIFNUQVRVU19BU1NPQ0lBVEVEKSAmJgorCQkJICAgICAgKG5ldHdvcmsgPT0gcHJpdi0+YXNzb2NfbmV0d29yaykpOworCisJaXB3X3Fvc19oYW5kbGVfcHJvYmVfcmVzcG9uc2UocHJpdiwgYWN0aXZlX25ldHdvcmssIG5ldHdvcmspOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXB3X2hhbmRsZV9hc3NvY19yZXNwb25zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9hc3NvY19yZXNwb25zZSAqcmVzcCwKKwkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfbmV0d29yayAqbmV0d29yaykKK3sKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCWlwd19xb3NfYXNzb2NpYXRpb25fcmVzcChwcml2LCBuZXR3b3JrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpcHdfc2VuZF9xb3NfcGFyYW1zX2NvbW1hbmQoc3RydWN0IGlwd19wcml2ICpwcml2LCBzdHJ1Y3QgaWVlZTgwMjExX3Fvc19wYXJhbWV0ZXJzCisJCQkJICAgICAgICpxb3NfcGFyYW0pCit7CisJc3RydWN0IGhvc3RfY21kIGNtZCA9IHsKKwkJLmNtZCA9IElQV19DTURfUU9TX1BBUkFNRVRFUlMsCisJCS5sZW4gPSAoc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfcW9zX3BhcmFtZXRlcnMpICogMykKKwl9OworCisJbWVtY3B5KGNtZC5wYXJhbSwgcW9zX3BhcmFtLCBzaXplb2YoKnFvc19wYXJhbSkgKiAzKTsKKwlyZXR1cm4gaXB3X3NlbmRfY21kKHByaXYsICZjbWQpOworfQorCitzdGF0aWMgaW50IGlwd19zZW5kX3Fvc19pbmZvX2NvbW1hbmQoc3RydWN0IGlwd19wcml2ICpwcml2LCBzdHJ1Y3QgaWVlZTgwMjExX3Fvc19pbmZvcm1hdGlvbl9lbGVtZW50CisJCQkJICAgICAqcW9zX3BhcmFtKQoreworCXN0cnVjdCBob3N0X2NtZCBjbWQgPSB7CisJCS5jbWQgPSBJUFdfQ01EX1dNRV9JTkZPLAorCQkubGVuID0gc2l6ZW9mKCpxb3NfcGFyYW0pCisJfTsKKworCW1lbWNweShjbWQucGFyYW0sIHFvc19wYXJhbSwgc2l6ZW9mKCpxb3NfcGFyYW0pKTsKKwlyZXR1cm4gaXB3X3NlbmRfY21kKHByaXYsICZjbWQpOworfQorCisjZW5kaWYJCQkJLyogQ09ORklHX0lQV19RT1MgKi8KKwogc3RhdGljIGludCBpcHdfYXNzb2NpYXRlX25ldHdvcmsoc3RydWN0IGlwd19wcml2ICpwcml2LAogCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgKm5ldHdvcmssCiAJCQkJIHN0cnVjdCBpcHdfc3VwcG9ydGVkX3JhdGVzICpyYXRlcywgaW50IHJvYW1pbmcpCkBAIC00NjE2LDcgKzcwNDIsNyBAQAogCWludCBlcnI7CiAKIAlpZiAocHJpdi0+Y29uZmlnICYgQ0ZHX0ZJWEVEX1JBVEUpCi0JCWlwd19zZXRfZml4ZWRfcmF0ZShwcml2LCBuZXR3b3JrKTsKKwkJaXB3X3NldF9maXhlZF9yYXRlKHByaXYsIG5ldHdvcmstPm1vZGUpOwogCiAJaWYgKCEocHJpdi0+Y29uZmlnICYgQ0ZHX1NUQVRJQ19FU1NJRCkpIHsKIAkJcHJpdi0+ZXNzaWRfbGVuID0gbWluKG5ldHdvcmstPnNzaWRfbGVuLApAQCAtNDYzMSwxNCArNzA1NywyMiBAQAogCWlmICgocHJpdi0+Y2FwYWJpbGl0eSAmIENBUF9QUklWQUNZX09OKSAmJgogCSAgICAocHJpdi0+Y2FwYWJpbGl0eSAmIENBUF9TSEFSRURfS0VZKSkgewogCQlwcml2LT5hc3NvY19yZXF1ZXN0LmF1dGhfdHlwZSA9IEFVVEhfU0hBUkVEX0tFWTsKLQkJcHJpdi0+YXNzb2NfcmVxdWVzdC5hdXRoX2tleSA9IHByaXYtPnNlYy5hY3RpdmVfa2V5OworCQlwcml2LT5hc3NvY19yZXF1ZXN0LmF1dGhfa2V5ID0gcHJpdi0+aWVlZS0+c2VjLmFjdGl2ZV9rZXk7CisKKwkJaWYgKChwcml2LT5jYXBhYmlsaXR5ICYgQ0FQX1BSSVZBQ1lfT04pICYmCisJCSAgICAocHJpdi0+aWVlZS0+c2VjLmxldmVsID09IFNFQ19MRVZFTF8xKSAmJgorCQkgICAgIShwcml2LT5pZWVlLT5ob3N0X2VuY3J5cHQgfHwgcHJpdi0+aWVlZS0+aG9zdF9kZWNyeXB0KSkKKwkJCWlwd19zZW5kX3dlcF9rZXlzKHByaXYsIERDV19XRVBfS0VZX1NFQ19UWVBFX1dFUCk7CiAJfSBlbHNlIHsKIAkJcHJpdi0+YXNzb2NfcmVxdWVzdC5hdXRoX3R5cGUgPSBBVVRIX09QRU47CiAJCXByaXYtPmFzc29jX3JlcXVlc3QuYXV0aF9rZXkgPSAwOwogCX0KIAotCWlmIChwcml2LT5jYXBhYmlsaXR5ICYgQ0FQX1BSSVZBQ1lfT04pCi0JCWlwd19zZW5kX3dlcF9rZXlzKHByaXYpOworCWlmIChwcml2LT5pZWVlLT53cGFfaWVfbGVuKSB7CisJCXByaXYtPmFzc29jX3JlcXVlc3QucG9saWN5X3N1cHBvcnQgPSAweDAyOwkvKiBSU04gYWN0aXZlICovCisJCWlwd19zZXRfcnNuX2NhcGEocHJpdiwgcHJpdi0+aWVlZS0+d3BhX2llLAorCQkJCSBwcml2LT5pZWVlLT53cGFfaWVfbGVuKTsKKwl9CiAKIAkvKgogCSAqIEl0IGlzIHZhbGlkIGZvciBvdXIgaWVlZSBkZXZpY2UgdG8gc3VwcG9ydCBtdWx0aXBsZSBtb2RlcywgYnV0CkBAIC00NjUyLDIwICs3MDg2LDQxIEBACiAJZWxzZSBpZiAobmV0d29yay0+bW9kZSAmIHByaXYtPmllZWUtPm1vZGUgJiBJRUVFX0IpCiAJCXByaXYtPmFzc29jX3JlcXVlc3QuaWVlZV9tb2RlID0gSVBXX0JfTU9ERTsKIAorCXByaXYtPmFzc29jX3JlcXVlc3QuY2FwYWJpbGl0eSA9IG5ldHdvcmstPmNhcGFiaWxpdHk7CisJaWYgKChuZXR3b3JrLT5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1NIT1JUX1BSRUFNQkxFKQorCSAgICAmJiAhKHByaXYtPmNvbmZpZyAmIENGR19QUkVBTUJMRV9MT05HKSkgeworCQlwcml2LT5hc3NvY19yZXF1ZXN0LnByZWFtYmxlX2xlbmd0aCA9IERDVF9GTEFHX1NIT1JUX1BSRUFNQkxFOworCX0gZWxzZSB7CisJCXByaXYtPmFzc29jX3JlcXVlc3QucHJlYW1ibGVfbGVuZ3RoID0gRENUX0ZMQUdfTE9OR19QUkVBTUJMRTsKKworCQkvKiBDbGVhciB0aGUgc2hvcnQgcHJlYW1ibGUgaWYgd2Ugd29uJ3QgYmUgc3VwcG9ydGluZyBpdCAqLworCQlwcml2LT5hc3NvY19yZXF1ZXN0LmNhcGFiaWxpdHkgJj0KKwkJICAgIH5XTEFOX0NBUEFCSUxJVFlfU0hPUlRfUFJFQU1CTEU7CisJfQorCisJLyogQ2xlYXIgY2FwYWJpbGl0eSBiaXRzIHRoYXQgYXJlbid0IHVzZWQgaW4gQWQgSG9jICovCisJaWYgKHByaXYtPmllZWUtPml3X21vZGUgPT0gSVdfTU9ERV9BREhPQykKKwkJcHJpdi0+YXNzb2NfcmVxdWVzdC5jYXBhYmlsaXR5ICY9CisJCSAgICB+V0xBTl9DQVBBQklMSVRZX1NIT1JUX1NMT1RfVElNRTsKKwogCUlQV19ERUJVR19BU1NPQygiJXNzc29jYXRpb24gYXR0ZW1wdDogJyVzJywgY2hhbm5lbCAlZCwgIgotCQkJIjgwMi4xMSVjIFslZF0sIGVuYz0lcyVzJXMlYyVjXG4iLAorCQkJIjgwMi4xMSVjIFslZF0sICVzWzolc10sIGVuYz0lcyVzJXMlYyVjXG4iLAogCQkJcm9hbWluZyA/ICJSZWEiIDogIkEiLAogCQkJZXNjYXBlX2Vzc2lkKHByaXYtPmVzc2lkLCBwcml2LT5lc3NpZF9sZW4pLAogCQkJbmV0d29yay0+Y2hhbm5lbCwKIAkJCWlwd19tb2Rlc1twcml2LT5hc3NvY19yZXF1ZXN0LmllZWVfbW9kZV0sCiAJCQlyYXRlcy0+bnVtX3JhdGVzLAorCQkJKHByaXYtPmFzc29jX3JlcXVlc3QucHJlYW1ibGVfbGVuZ3RoID09CisJCQkgRENUX0ZMQUdfTE9OR19QUkVBTUJMRSkgPyAibG9uZyIgOiAic2hvcnQiLAorCQkJbmV0d29yay0+Y2FwYWJpbGl0eSAmCisJCQlXTEFOX0NBUEFCSUxJVFlfU0hPUlRfUFJFQU1CTEUgPyAic2hvcnQiIDogImxvbmciLAogCQkJcHJpdi0+Y2FwYWJpbGl0eSAmIENBUF9QUklWQUNZX09OID8gIm9uICIgOiAib2ZmIiwKIAkJCXByaXYtPmNhcGFiaWxpdHkgJiBDQVBfUFJJVkFDWV9PTiA/CiAJCQkocHJpdi0+Y2FwYWJpbGl0eSAmIENBUF9TSEFSRURfS0VZID8gIihzaGFyZWQpIiA6CiAJCQkgIihvcGVuKSIpIDogIiIsCiAJCQlwcml2LT5jYXBhYmlsaXR5ICYgQ0FQX1BSSVZBQ1lfT04gPyAiIGtleT0iIDogIiIsCiAJCQlwcml2LT5jYXBhYmlsaXR5ICYgQ0FQX1BSSVZBQ1lfT04gPwotCQkJJzEnICsgcHJpdi0+c2VjLmFjdGl2ZV9rZXkgOiAnLicsCisJCQknMScgKyBwcml2LT5pZWVlLT5zZWMuYWN0aXZlX2tleSA6ICcuJywKIAkJCXByaXYtPmNhcGFiaWxpdHkgJiBDQVBfUFJJVkFDWV9PTiA/ICcuJyA6ICcgJyk7CiAKIAlwcml2LT5hc3NvY19yZXF1ZXN0LmJlYWNvbl9pbnRlcnZhbCA9IG5ldHdvcmstPmJlYWNvbl9pbnRlcnZhbDsKQEAgLTQ2ODMsMTcgKzcxMzgsMTYgQEAKIAkJcHJpdi0+YXNzb2NfcmVxdWVzdC5hc3NvY190c2ZfbHN3ID0gbmV0d29yay0+dGltZV9zdGFtcFswXTsKIAl9CiAKLQltZW1jcHkoJnByaXYtPmFzc29jX3JlcXVlc3QuYnNzaWQsIG5ldHdvcmstPmJzc2lkLCBFVEhfQUxFTik7CisJbWVtY3B5KHByaXYtPmFzc29jX3JlcXVlc3QuYnNzaWQsIG5ldHdvcmstPmJzc2lkLCBFVEhfQUxFTik7CiAKIAlpZiAocHJpdi0+aWVlZS0+aXdfbW9kZSA9PSBJV19NT0RFX0FESE9DKSB7CiAJCW1lbXNldCgmcHJpdi0+YXNzb2NfcmVxdWVzdC5kZXN0LCAweEZGLCBFVEhfQUxFTik7CiAJCXByaXYtPmFzc29jX3JlcXVlc3QuYXRpbV93aW5kb3cgPSBuZXR3b3JrLT5hdGltX3dpbmRvdzsKIAl9IGVsc2UgewotCQltZW1jcHkoJnByaXYtPmFzc29jX3JlcXVlc3QuZGVzdCwgbmV0d29yay0+YnNzaWQsIEVUSF9BTEVOKTsKKwkJbWVtY3B5KHByaXYtPmFzc29jX3JlcXVlc3QuZGVzdCwgbmV0d29yay0+YnNzaWQsIEVUSF9BTEVOKTsKIAkJcHJpdi0+YXNzb2NfcmVxdWVzdC5hdGltX3dpbmRvdyA9IDA7CiAJfQogCi0JcHJpdi0+YXNzb2NfcmVxdWVzdC5jYXBhYmlsaXR5ID0gbmV0d29yay0+Y2FwYWJpbGl0eTsKIAlwcml2LT5hc3NvY19yZXF1ZXN0Lmxpc3Rlbl9pbnRlcnZhbCA9IG5ldHdvcmstPmxpc3Rlbl9pbnRlcnZhbDsKIAogCWVyciA9IGlwd19zZW5kX3NzaWQocHJpdiwgcHJpdi0+ZXNzaWQsIHByaXYtPmVzc2lkX2xlbik7CkBAIC00NzEwLDYgKzcxNjQsMTIgQEAKIAkJcHJpdi0+c3lzX2NvbmZpZy5kb3QxMWdfYXV0b19kZXRlY3Rpb24gPSAxOwogCWVsc2UKIAkJcHJpdi0+c3lzX2NvbmZpZy5kb3QxMWdfYXV0b19kZXRlY3Rpb24gPSAwOworCisJaWYgKHByaXYtPmllZWUtPml3X21vZGUgPT0gSVdfTU9ERV9BREhPQykKKwkJcHJpdi0+c3lzX2NvbmZpZy5hbnN3ZXJfYnJvYWRjYXN0X3NzaWRfcHJvYmUgPSAxOworCWVsc2UKKwkJcHJpdi0+c3lzX2NvbmZpZy5hbnN3ZXJfYnJvYWRjYXN0X3NzaWRfcHJvYmUgPSAwOworCiAJZXJyID0gaXB3X3NlbmRfc3lzdGVtX2NvbmZpZyhwcml2LCAmcHJpdi0+c3lzX2NvbmZpZyk7CiAJaWYgKGVycikgewogCQlJUFdfREVCVUdfSEMoIkF0dGVtcHQgdG8gc2VuZCBzeXMgY29uZmlnIGNvbW1hbmQgZmFpbGVkLlxuIik7CkBAIC00NzE3LDcgKzcxNzcsNyBAQAogCX0KIAogCUlQV19ERUJVR19BU1NPQygiQXNzb2NpYXRpb24gc2Vuc2l0aXZpdHk6ICVkXG4iLCBuZXR3b3JrLT5zdGF0cy5yc3NpKTsKLQllcnIgPSBpcHdfc2V0X3NlbnNpdGl2aXR5KHByaXYsIG5ldHdvcmstPnN0YXRzLnJzc2kpOworCWVyciA9IGlwd19zZXRfc2Vuc2l0aXZpdHkocHJpdiwgbmV0d29yay0+c3RhdHMucnNzaSArIElQV19SU1NJX1RPX0RCTSk7CiAJaWYgKGVycikgewogCQlJUFdfREVCVUdfSEMoIkF0dGVtcHQgdG8gc2VuZCBhc3NvY2lhdGUgY29tbWFuZCBmYWlsZWQuXG4iKTsKIAkJcmV0dXJuIGVycjsKQEAgLTQ3MzUsNiArNzE5NSwxMCBAQAogCiAJcHJpdi0+YXNzb2NfbmV0d29yayA9IG5ldHdvcms7CiAKKyNpZmRlZiBDT05GSUdfSVBXX1FPUworCWlwd19xb3NfYXNzb2NpYXRpb24ocHJpdiwgbmV0d29yayk7CisjZW5kaWYKKwogCWVyciA9IGlwd19zZW5kX2Fzc29jaWF0ZShwcml2LCAmcHJpdi0+YXNzb2NfcmVxdWVzdCk7CiAJaWYgKGVycikgewogCQlJUFdfREVCVUdfSEMoIkF0dGVtcHQgdG8gc2VuZCBhc3NvY2lhdGUgY29tbWFuZCBmYWlsZWQuXG4iKTsKQEAgLTQ3ODIsMTIgKzcyNDYsMTUgQEAKIAlpZiAocHJpdi0+c3RhdHVzICYgU1RBVFVTX0FTU09DSUFURUQpIHsKIAkJLyogRmlyc3QgcGFzcyB0aHJvdWdoIFJPQU0gcHJvY2VzcyAtLSBsb29rIGZvciBhIGJldHRlcgogCQkgKiBuZXR3b3JrICovCisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJCXU4IHJzc2kgPSBwcml2LT5hc3NvY19uZXR3b3JrLT5zdGF0cy5yc3NpOwogCQlwcml2LT5hc3NvY19uZXR3b3JrLT5zdGF0cy5yc3NpID0gLTEyODsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmllZWUtPmxvY2ssIGZsYWdzKTsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShuZXR3b3JrLCAmcHJpdi0+aWVlZS0+bmV0d29ya19saXN0LCBsaXN0KSB7CiAJCQlpZiAobmV0d29yayAhPSBwcml2LT5hc3NvY19uZXR3b3JrKQogCQkJCWlwd19iZXN0X25ldHdvcmsocHJpdiwgJm1hdGNoLCBuZXR3b3JrLCAxKTsKIAkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5pZWVlLT5sb2NrLCBmbGFncyk7CiAJCXByaXYtPmFzc29jX25ldHdvcmstPnN0YXRzLnJzc2kgPSByc3NpOwogCiAJCWlmIChtYXRjaC5uZXR3b3JrID09IHByaXYtPmFzc29jX25ldHdvcmspIHsKQEAgLTQ4MTAsNyArNzI3NywxNSBAQAogCXByaXYtPnN0YXR1cyAmPSB+U1RBVFVTX1JPQU1JTkc7CiB9CiAKLXN0YXRpYyB2b2lkIGlwd19hc3NvY2lhdGUodm9pZCAqZGF0YSkKK3N0YXRpYyB2b2lkIGlwd19iZ19yb2FtKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gZGF0YTsKKwlkb3duKCZwcml2LT5zZW0pOworCWlwd19yb2FtKGRhdGEpOworCXVwKCZwcml2LT5zZW0pOworfQorCitzdGF0aWMgaW50IGlwd19hc3NvY2lhdGUodm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBkYXRhOwogCkBAIC00ODIwLDE0ICs3Mjk1LDQxIEBACiAJfTsKIAlzdHJ1Y3QgaXB3X3N1cHBvcnRlZF9yYXRlcyAqcmF0ZXM7CiAJc3RydWN0IGxpc3RfaGVhZCAqZWxlbWVudDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKHByaXYtPmllZWUtPml3X21vZGUgPT0gSVdfTU9ERV9NT05JVE9SKSB7CisJCUlQV19ERUJVR19BU1NPQygiTm90IGF0dGVtcHRpbmcgYXNzb2NpYXRpb24gKG1vbml0b3IgbW9kZSlcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAocHJpdi0+c3RhdHVzICYgKFNUQVRVU19BU1NPQ0lBVEVEIHwgU1RBVFVTX0FTU09DSUFUSU5HKSkgeworCQlJUFdfREVCVUdfQVNTT0MoIk5vdCBhdHRlbXB0aW5nIGFzc29jaWF0aW9uIChhbHJlYWR5IGluICIKKwkJCQkicHJvZ3Jlc3MpXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHByaXYtPnN0YXR1cyAmIFNUQVRVU19ESVNBU1NPQ0lBVElORykgeworCQlJUFdfREVCVUdfQVNTT0MoIk5vdCBhdHRlbXB0aW5nIGFzc29jaWF0aW9uIChpbiAiCisJCQkJImRpc2Fzc29jaWF0aW5nKVxuICIpOworCQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPmFzc29jaWF0ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghaXB3X2lzX2luaXQocHJpdikgfHwgKHByaXYtPnN0YXR1cyAmIFNUQVRVU19TQ0FOTklORykpIHsKKwkJSVBXX0RFQlVHX0FTU09DKCJOb3QgYXR0ZW1wdGluZyBhc3NvY2lhdGlvbiAoc2Nhbm5pbmcgb3Igbm90ICIKKwkJCQkiaW5pdGlhbGl6ZWQpXG4iKTsKKwkJcmV0dXJuIDA7CisJfQogCiAJaWYgKCEocHJpdi0+Y29uZmlnICYgQ0ZHX0FTU09DSUFURSkgJiYKIAkgICAgIShwcml2LT5jb25maWcgJiAoQ0ZHX1NUQVRJQ19FU1NJRCB8CiAJCQkgICAgICBDRkdfU1RBVElDX0NIQU5ORUwgfCBDRkdfU1RBVElDX0JTU0lEKSkpIHsKIAkJSVBXX0RFQlVHX0FTU09DKCJOb3QgYXR0ZW1wdGluZyBhc3NvY2lhdGlvbiAoYXNzb2NpYXRlPTApXG4iKTsKLQkJcmV0dXJuOworCQlyZXR1cm4gMDsKIAl9CiAKKwkvKiBQcm90ZWN0IG91ciB1c2Ugb2YgdGhlIG5ldHdvcmtfbGlzdCAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5pZWVlLT5sb2NrLCBmbGFncyk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShuZXR3b3JrLCAmcHJpdi0+aWVlZS0+bmV0d29ya19saXN0LCBsaXN0KQogCSAgICBpcHdfYmVzdF9uZXR3b3JrKHByaXYsICZtYXRjaCwgbmV0d29yaywgMCk7CiAKQEAgLTQ4MzgsNiArNzM0MCw3IEBACiAJICAgIHByaXYtPmllZWUtPml3X21vZGUgPT0gSVdfTU9ERV9BREhPQyAmJgogCSAgICBwcml2LT5jb25maWcgJiBDRkdfQURIT0NfQ1JFQVRFICYmCiAJICAgIHByaXYtPmNvbmZpZyAmIENGR19TVEFUSUNfRVNTSUQgJiYKKwkgICAgcHJpdi0+Y29uZmlnICYgQ0ZHX1NUQVRJQ19DSEFOTkVMICYmCiAJICAgICFsaXN0X2VtcHR5KCZwcml2LT5pZWVlLT5uZXR3b3JrX2ZyZWVfbGlzdCkpIHsKIAkJZWxlbWVudCA9IHByaXYtPmllZWUtPm5ldHdvcmtfZnJlZV9saXN0Lm5leHQ7CiAJCW5ldHdvcmsgPSBsaXN0X2VudHJ5KGVsZW1lbnQsIHN0cnVjdCBpZWVlODAyMTFfbmV0d29yaywgbGlzdCk7CkBAIC00ODQ2LDI1ICs3MzQ5LDgzIEBACiAJCWxpc3RfZGVsKGVsZW1lbnQpOwogCQlsaXN0X2FkZF90YWlsKCZuZXR3b3JrLT5saXN0LCAmcHJpdi0+aWVlZS0+bmV0d29ya19saXN0KTsKIAl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+aWVlZS0+bG9jaywgZmxhZ3MpOwogCiAJLyogSWYgd2UgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBsaXN0LCB0aGVuIHdlIGRvbid0IGhhdmUgYW55IHZhbGlkCiAJICogbWF0Y2hpbmcgQVBzICovCiAJaWYgKCFuZXR3b3JrKSB7CiAJCWlwd19kZWJ1Z19jb25maWcocHJpdik7CiAKLQkJcXVldWVfZGVsYXllZF93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnJlcXVlc3Rfc2NhbiwKLQkJCQkgICBTQ0FOX0lOVEVSVkFMKTsKKwkJaWYgKCEocHJpdi0+c3RhdHVzICYgU1RBVFVTX1NDQU5OSU5HKSkgeworCQkJaWYgKCEocHJpdi0+Y29uZmlnICYgQ0ZHX1NQRUVEX1NDQU4pKQorCQkJCXF1ZXVlX2RlbGF5ZWRfd29yayhwcml2LT53b3JrcXVldWUsCisJCQkJCQkgICAmcHJpdi0+cmVxdWVzdF9zY2FuLAorCQkJCQkJICAgU0NBTl9JTlRFUlZBTCk7CisJCQllbHNlCisJCQkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsCisJCQkJCSAgICZwcml2LT5yZXF1ZXN0X3NjYW4pOworCQl9CiAKLQkJcmV0dXJuOworCQlyZXR1cm4gMDsKIAl9CiAKIAlpcHdfYXNzb2NpYXRlX25ldHdvcmsocHJpdiwgbmV0d29yaywgcmF0ZXMsIDApOworCisJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBpcHdfaGFuZGxlX2RhdGFfcGFja2V0KHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwKLQkJCQkJICBzdHJ1Y3QgaXB3X3J4X21lbV9idWZmZXIgKnJ4YiwKLQkJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXRzICpzdGF0cykKK3N0YXRpYyB2b2lkIGlwd19iZ19hc3NvY2lhdGUodm9pZCAqZGF0YSkKIHsKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBkYXRhOworCWRvd24oJnByaXYtPnNlbSk7CisJaXB3X2Fzc29jaWF0ZShkYXRhKTsKKwl1cCgmcHJpdi0+c2VtKTsKK30KKworc3RhdGljIHZvaWQgaXB3X3JlYnVpbGRfZGVjcnlwdGVkX3NrYihzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsCisJCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOworCXUxNiBmYzsKKworCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKKwlmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY3RsKTsKKwlpZiAoIShmYyAmIElFRUU4MDIxMV9GQ1RMX1BST1RFQ1RFRCkpCisJCXJldHVybjsKKworCWZjICY9IH5JRUVFODAyMTFfRkNUTF9QUk9URUNURUQ7CisJaGRyLT5mcmFtZV9jdGwgPSBjcHVfdG9fbGUxNihmYyk7CisJc3dpdGNoIChwcml2LT5pZWVlLT5zZWMubGV2ZWwpIHsKKwljYXNlIFNFQ19MRVZFTF8zOgorCQkvKiBSZW1vdmUgQ0NNUCBIRFIgKi8KKwkJbWVtbW92ZShza2ItPmRhdGEgKyBJRUVFODAyMTFfM0FERFJfTEVOLAorCQkJc2tiLT5kYXRhICsgSUVFRTgwMjExXzNBRERSX0xFTiArIDgsCisJCQlza2ItPmxlbiAtIElFRUU4MDIxMV8zQUREUl9MRU4gLSA4KTsKKwkJc2tiX3RyaW0oc2tiLCBza2ItPmxlbiAtIDE2KTsJLyogQ0NNUF9IRFJfTEVOICsgQ0NNUF9NSUNfTEVOICovCisJCWJyZWFrOworCWNhc2UgU0VDX0xFVkVMXzI6CisJCWJyZWFrOworCWNhc2UgU0VDX0xFVkVMXzE6CisJCS8qIFJlbW92ZSBJViAqLworCQltZW1tb3ZlKHNrYi0+ZGF0YSArIElFRUU4MDIxMV8zQUREUl9MRU4sCisJCQlza2ItPmRhdGEgKyBJRUVFODAyMTFfM0FERFJfTEVOICsgNCwKKwkJCXNrYi0+bGVuIC0gSUVFRTgwMjExXzNBRERSX0xFTiAtIDQpOworCQlza2JfdHJpbShza2IsIHNrYi0+bGVuIC0gOCk7CS8qIElWICsgSUNWICovCisJCWJyZWFrOworCWNhc2UgU0VDX0xFVkVMXzA6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiAiVW5rbm93IHNlY3VyaXR5IGxldmVsICVkXG4iLAorCQkgICAgICAgcHJpdi0+aWVlZS0+c2VjLmxldmVsKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBpcHdfaGFuZGxlX2RhdGFfcGFja2V0KHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwKKwkJCQkgICBzdHJ1Y3QgaXB3X3J4X21lbV9idWZmZXIgKnJ4YiwKKwkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXRzICpzdGF0cykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyOwogCXN0cnVjdCBpcHdfcnhfcGFja2V0ICpwa3QgPSAoc3RydWN0IGlwd19yeF9wYWNrZXQgKilyeGItPnNrYi0+ZGF0YTsKIAogCS8qIFdlIHJlY2VpdmVkIGRhdGEgZnJvbSB0aGUgSFcsIHNvIHN0b3AgdGhlIHdhdGNoZG9nICovCkBAIC00ODcyLDcgKzc0MzMsNyBAQAogCiAJLyogV2Ugb25seSBwcm9jZXNzIGRhdGEgcGFja2V0cyBpZiB0aGUKIAkgKiBpbnRlcmZhY2UgaXMgb3BlbiAqLwotCWlmICh1bmxpa2VseSgocGt0LT51LmZyYW1lLmxlbmd0aCArIElQV19SWF9GUkFNRV9TSVpFKSA+CisJaWYgKHVubGlrZWx5KChsZTE2X3RvX2NwdShwa3QtPnUuZnJhbWUubGVuZ3RoKSArIElQV19SWF9GUkFNRV9TSVpFKSA+CiAJCSAgICAgc2tiX3RhaWxyb29tKHJ4Yi0+c2tiKSkpIHsKIAkJcHJpdi0+aWVlZS0+c3RhdHMucnhfZXJyb3JzKys7CiAJCXByaXYtPndzdGF0cy5kaXNjYXJkLm1pc2MrKzsKQEAgLTQ4ODksMTQgKzc0NTAsMzUxIEBACiAJc2tiX3Jlc2VydmUocnhiLT5za2IsIG9mZnNldG9mKHN0cnVjdCBpcHdfcnhfcGFja2V0LCB1LmZyYW1lLmRhdGEpKTsKIAogCS8qIFNldCB0aGUgc2l6ZSBvZiB0aGUgc2tiIHRvIHRoZSBzaXplIG9mIHRoZSBmcmFtZSAqLwotCXNrYl9wdXQocnhiLT5za2IsIHBrdC0+dS5mcmFtZS5sZW5ndGgpOworCXNrYl9wdXQocnhiLT5za2IsIGxlMTZfdG9fY3B1KHBrdC0+dS5mcmFtZS5sZW5ndGgpKTsKKworCUlQV19ERUJVR19SWCgiUnggcGFja2V0IG9mICVkIGJ5dGVzLlxuIiwgcnhiLT5za2ItPmxlbik7CisKKwkvKiBIVyBkZWNyeXB0IHdpbGwgbm90IGNsZWFyIHRoZSBXRVAgYml0LCBNSUMsIFBOLCBldGMuICovCisJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopcnhiLT5za2ItPmRhdGE7CisJaWYgKHByaXYtPmllZWUtPml3X21vZGUgIT0gSVdfTU9ERV9NT05JVE9SICYmCisJICAgICgoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSkgfHwKKwkgICAgICBpc19icm9hZGNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIxKSkgPworCSAgICAgIXByaXYtPmllZWUtPmhvc3RfbWNfZGVjcnlwdCA6ICFwcml2LT5pZWVlLT5ob3N0X2RlY3J5cHQpKQorCQlpcHdfcmVidWlsZF9kZWNyeXB0ZWRfc2tiKHByaXYsIHJ4Yi0+c2tiKTsKKworCWlmICghaWVlZTgwMjExX3J4KHByaXYtPmllZWUsIHJ4Yi0+c2tiLCBzdGF0cykpCisJCXByaXYtPmllZWUtPnN0YXRzLnJ4X2Vycm9ycysrOworCWVsc2UgewkJCS8qIGllZWU4MDIxMV9yeCBzdWNjZWVkZWQsIHNvIGl0IG5vdyBvd25zIHRoZSBTS0IgKi8KKwkJcnhiLT5za2IgPSBOVUxMOworCQlfX2lwd19sZWRfYWN0aXZpdHlfb24ocHJpdik7CisJfQorfQorCisjaWZkZWYgQ09ORklHX0lFRUU4MDIxMV9SQURJT1RBUAorc3RhdGljIHZvaWQgaXB3X2hhbmRsZV9kYXRhX3BhY2tldF9tb25pdG9yKHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwKKwkJCQkJICAgc3RydWN0IGlwd19yeF9tZW1fYnVmZmVyICpyeGIsCisJCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHMgKnN0YXRzKQoreworCXN0cnVjdCBpcHdfcnhfcGFja2V0ICpwa3QgPSAoc3RydWN0IGlwd19yeF9wYWNrZXQgKilyeGItPnNrYi0+ZGF0YTsKKwlzdHJ1Y3QgaXB3X3J4X2ZyYW1lICpmcmFtZSA9ICZwa3QtPnUuZnJhbWU7CisKKwkvKiBpbml0aWFsIHB1bGwgb2Ygc29tZSBkYXRhICovCisJdTE2IHJlY2VpdmVkX2NoYW5uZWwgPSBmcmFtZS0+cmVjZWl2ZWRfY2hhbm5lbDsKKwl1OCBhbnRlbm5hQW5kUGh5ID0gZnJhbWUtPmFudGVubmFBbmRQaHk7CisJczggYW50c2lnbmFsID0gZnJhbWUtPnJzc2lfZGJtIC0gSVBXX1JTU0lfVE9fREJNOwkvKiBjYWxsIGl0IHNpZ25lZCBhbnlob3cgKi8KKwl1MTYgcGt0cmF0ZSA9IGZyYW1lLT5yYXRlOworCisJLyogTWFnaWMgc3RydWN0IHRoYXQgc2xvdHMgaW50byB0aGUgcmFkaW90YXAgaGVhZGVyIC0tIG5vIHJlYXNvbgorCSAqIHRvIGJ1aWxkIHRoaXMgbWFudWFsbHkgZWxlbWVudCBieSBlbGVtZW50LCB3ZSBjYW4gd3JpdGUgaXQgbXVjaAorCSAqIG1vcmUgZWZmaWNpZW50bHkgdGhhbiB3ZSBjYW4gcGFyc2UgaXQuIE9SREVSIE1BVFRFUlMgSEVSRSAqLworCXN0cnVjdCBpcHdfcnRfaGRyIHsKKwkJc3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9oZWFkZXIgcnRfaGRyOworCQl1OCBydF9mbGFnczsJLyogcmFkaW90YXAgcGFja2V0IGZsYWdzICovCisJCXU4IHJ0X3JhdGU7CS8qIHJhdGUgaW4gNTAwa2IvcyAqLworCQl1MTYgcnRfY2hhbm5lbDsJLyogY2hhbm5lbCBpbiBtaHogKi8KKwkJdTE2IHJ0X2NoYml0bWFzazsJLyogY2hhbm5lbCBiaXRmaWVsZCAqLworCQlzOCBydF9kYm1zaWduYWw7CS8qIHNpZ25hbCBpbiBkYk0sIGtsdWdlZCB0byBzaWduZWQgKi8KKwkJdTggcnRfYW50ZW5uYTsJLyogYW50ZW5uYSBudW1iZXIgKi8KKwl9ICppcHdfcnQ7CisKKwlzaG9ydCBsZW4gPSBsZTE2X3RvX2NwdShwa3QtPnUuZnJhbWUubGVuZ3RoKTsKKworCS8qIFdlIHJlY2VpdmVkIGRhdGEgZnJvbSB0aGUgSFcsIHNvIHN0b3AgdGhlIHdhdGNoZG9nICovCisJcHJpdi0+bmV0X2Rldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCisJLyogV2Ugb25seSBwcm9jZXNzIGRhdGEgcGFja2V0cyBpZiB0aGUKKwkgKiBpbnRlcmZhY2UgaXMgb3BlbiAqLworCWlmICh1bmxpa2VseSgobGUxNl90b19jcHUocGt0LT51LmZyYW1lLmxlbmd0aCkgKyBJUFdfUlhfRlJBTUVfU0laRSkgPgorCQkgICAgIHNrYl90YWlscm9vbShyeGItPnNrYikpKSB7CisJCXByaXYtPmllZWUtPnN0YXRzLnJ4X2Vycm9ycysrOworCQlwcml2LT53c3RhdHMuZGlzY2FyZC5taXNjKys7CisJCUlQV19ERUJVR19EUk9QKCJDb3JydXB0aW9uIGRldGVjdGVkISBPaCBubyFcbiIpOworCQlyZXR1cm47CisJfSBlbHNlIGlmICh1bmxpa2VseSghbmV0aWZfcnVubmluZyhwcml2LT5uZXRfZGV2KSkpIHsKKwkJcHJpdi0+aWVlZS0+c3RhdHMucnhfZHJvcHBlZCsrOworCQlwcml2LT53c3RhdHMuZGlzY2FyZC5taXNjKys7CisJCUlQV19ERUJVR19EUk9QKCJEcm9wcGluZyBwYWNrZXQgd2hpbGUgaW50ZXJmYWNlIGlzIG5vdCB1cC5cbiIpOworCQlyZXR1cm47CisJfQorCisJLyogTGlicGNhcCAwLjkuMysgY2FuIGhhbmRsZSB2YXJpYWJsZSBsZW5ndGggcmFkaW90YXAsIHNvIHdlJ2xsIHVzZQorCSAqIHRoYXQgbm93ICovCisJaWYgKGxlbiA+IElQV19SWF9CVUZfU0laRSAtIHNpemVvZihzdHJ1Y3QgaXB3X3J0X2hkcikpIHsKKwkJLyogRklYTUU6IFNob3VsZCBhbGxvYyBiaWdnZXIgc2tiIGluc3RlYWQgKi8KKwkJcHJpdi0+aWVlZS0+c3RhdHMucnhfZHJvcHBlZCsrOworCQlwcml2LT53c3RhdHMuZGlzY2FyZC5taXNjKys7CisJCUlQV19ERUJVR19EUk9QKCJEcm9wcGluZyB0b28gbGFyZ2UgcGFja2V0IGluIG1vbml0b3JcbiIpOworCQlyZXR1cm47CisJfQorCisJLyogY29weSB0aGUgZnJhbWUgaXRzZWxmICovCisJbWVtbW92ZShyeGItPnNrYi0+ZGF0YSArIHNpemVvZihzdHJ1Y3QgaXB3X3J0X2hkciksCisJCXJ4Yi0+c2tiLT5kYXRhICsgSVBXX1JYX0ZSQU1FX1NJWkUsIGxlbik7CisKKwkvKiBaZXJvIHRoZSByYWRpb3RhcCBzdGF0aWMgYnVmZmVyICAuLi4gIFdlIG9ubHkgbmVlZCB0byB6ZXJvIHRoZSBieXRlcyBOT1QKKwkgKiBwYXJ0IG9mIG91ciByZWFsIGhlYWRlciwgc2F2ZXMgYSBsaXR0bGUgdGltZS4KKwkgKgorCSAqIE5vIGxvbmdlciBuZWNlc3Nhcnkgc2luY2Ugd2UgZmlsbCBpbiBhbGwgb3VyIGRhdGEuICBQdXJnZSBiZWZvcmUgbWVyZ2luZworCSAqIHBhdGNoIG9mZmljaWFsbHkuCisJICogbWVtc2V0KHJ4Yi0+c2tiLT5kYXRhICsgc2l6ZW9mKHN0cnVjdCBpcHdfcnRfaGRyKSwgMCwKKwkgKiAgICAgICAgSUVFRTgwMjExX1JBRElPVEFQX0hEUkxFTiAtIHNpemVvZihzdHJ1Y3QgaXB3X3J0X2hkcikpOworCSAqLworCisJaXB3X3J0ID0gKHN0cnVjdCBpcHdfcnRfaGRyICopcnhiLT5za2ItPmRhdGE7CisKKwlpcHdfcnQtPnJ0X2hkci5pdF92ZXJzaW9uID0gUEtUSERSX1JBRElPVEFQX1ZFUlNJT047CisJaXB3X3J0LT5ydF9oZHIuaXRfcGFkID0gMDsJLyogYWx3YXlzIGdvb2QgdG8gemVybyAqLworCWlwd19ydC0+cnRfaGRyLml0X2xlbiA9IHNpemVvZihzdHJ1Y3QgaXB3X3J0X2hkcik7CS8qIHRvdGFsIGhlYWRlcitkYXRhICovCisKKwkvKiBCaWcgYml0ZmllbGQgb2YgYWxsIHRoZSBmaWVsZHMgd2UgcHJvdmlkZSBpbiByYWRpb3RhcCAqLworCWlwd19ydC0+cnRfaGRyLml0X3ByZXNlbnQgPQorCSAgICAoKDEgPDwgSUVFRTgwMjExX1JBRElPVEFQX0ZMQUdTKSB8CisJICAgICAoMSA8PCBJRUVFODAyMTFfUkFESU9UQVBfUkFURSkgfAorCSAgICAgKDEgPDwgSUVFRTgwMjExX1JBRElPVEFQX0NIQU5ORUwpIHwKKwkgICAgICgxIDw8IElFRUU4MDIxMV9SQURJT1RBUF9EQk1fQU5UU0lHTkFMKSB8CisJICAgICAoMSA8PCBJRUVFODAyMTFfUkFESU9UQVBfQU5URU5OQSkpOworCisJLyogWmVybyB0aGUgZmxhZ3MsIHdlJ2xsIGFkZCB0byB0aGVtIGFzIHdlIGdvICovCisJaXB3X3J0LT5ydF9mbGFncyA9IDA7CisKKwkvKiBDb252ZXJ0IHNpZ25hbCB0byBEQk0gKi8KKwlpcHdfcnQtPnJ0X2RibXNpZ25hbCA9IGFudHNpZ25hbDsKKworCS8qIENvbnZlcnQgdGhlIGNoYW5uZWwgZGF0YSBhbmQgc2V0IHRoZSBmbGFncyAqLworCWlwd19ydC0+cnRfY2hhbm5lbCA9IGNwdV90b19sZTE2KGllZWU4MDIxMWNoYW4ybWh6KHJlY2VpdmVkX2NoYW5uZWwpKTsKKwlpZiAocmVjZWl2ZWRfY2hhbm5lbCA+IDE0KSB7CS8qIDgwMi4xMWEgKi8KKwkJaXB3X3J0LT5ydF9jaGJpdG1hc2sgPQorCQkgICAgY3B1X3RvX2xlMTYoKElFRUU4MDIxMV9DSEFOX09GRE0gfCBJRUVFODAyMTFfQ0hBTl81R0haKSk7CisJfSBlbHNlIGlmIChhbnRlbm5hQW5kUGh5ICYgMzIpIHsJLyogODAyLjExYiAqLworCQlpcHdfcnQtPnJ0X2NoYml0bWFzayA9CisJCSAgICBjcHVfdG9fbGUxNigoSUVFRTgwMjExX0NIQU5fQ0NLIHwgSUVFRTgwMjExX0NIQU5fMkdIWikpOworCX0gZWxzZSB7CQkvKiA4MDIuMTFnICovCisJCWlwd19ydC0+cnRfY2hiaXRtYXNrID0KKwkJICAgIChJRUVFODAyMTFfQ0hBTl9PRkRNIHwgSUVFRTgwMjExX0NIQU5fMkdIWik7CisJfQorCisJLyogc2V0IHRoZSByYXRlIGluIG11bHRpcGxlcyBvZiA1MDBrL3MgKi8KKwlzd2l0Y2ggKHBrdHJhdGUpIHsKKwljYXNlIElQV19UWF9SQVRFXzFNQjoKKwkJaXB3X3J0LT5ydF9yYXRlID0gMjsKKwkJYnJlYWs7CisJY2FzZSBJUFdfVFhfUkFURV8yTUI6CisJCWlwd19ydC0+cnRfcmF0ZSA9IDQ7CisJCWJyZWFrOworCWNhc2UgSVBXX1RYX1JBVEVfNU1COgorCQlpcHdfcnQtPnJ0X3JhdGUgPSAxMDsKKwkJYnJlYWs7CisJY2FzZSBJUFdfVFhfUkFURV82TUI6CisJCWlwd19ydC0+cnRfcmF0ZSA9IDEyOworCQlicmVhazsKKwljYXNlIElQV19UWF9SQVRFXzlNQjoKKwkJaXB3X3J0LT5ydF9yYXRlID0gMTg7CisJCWJyZWFrOworCWNhc2UgSVBXX1RYX1JBVEVfMTFNQjoKKwkJaXB3X3J0LT5ydF9yYXRlID0gMjI7CisJCWJyZWFrOworCWNhc2UgSVBXX1RYX1JBVEVfMTJNQjoKKwkJaXB3X3J0LT5ydF9yYXRlID0gMjQ7CisJCWJyZWFrOworCWNhc2UgSVBXX1RYX1JBVEVfMThNQjoKKwkJaXB3X3J0LT5ydF9yYXRlID0gMzY7CisJCWJyZWFrOworCWNhc2UgSVBXX1RYX1JBVEVfMjRNQjoKKwkJaXB3X3J0LT5ydF9yYXRlID0gNDg7CisJCWJyZWFrOworCWNhc2UgSVBXX1RYX1JBVEVfMzZNQjoKKwkJaXB3X3J0LT5ydF9yYXRlID0gNzI7CisJCWJyZWFrOworCWNhc2UgSVBXX1RYX1JBVEVfNDhNQjoKKwkJaXB3X3J0LT5ydF9yYXRlID0gOTY7CisJCWJyZWFrOworCWNhc2UgSVBXX1RYX1JBVEVfNTRNQjoKKwkJaXB3X3J0LT5ydF9yYXRlID0gMTA4OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlpcHdfcnQtPnJ0X3JhdGUgPSAwOworCQlicmVhazsKKwl9CisKKwkvKiBhbnRlbm5hIG51bWJlciAqLworCWlwd19ydC0+cnRfYW50ZW5uYSA9IChhbnRlbm5hQW5kUGh5ICYgMyk7CS8qIElzIHRoaXMgcmlnaHQ/ICovCisKKwkvKiBzZXQgdGhlIHByZWFtYmxlIGZsYWcgaWYgd2UgaGF2ZSBpdCAqLworCWlmICgoYW50ZW5uYUFuZFBoeSAmIDY0KSkKKwkJaXB3X3J0LT5ydF9mbGFncyB8PSBJRUVFODAyMTFfUkFESU9UQVBfRl9TSE9SVFBSRTsKKworCS8qIFNldCB0aGUgc2l6ZSBvZiB0aGUgc2tiIHRvIHRoZSBzaXplIG9mIHRoZSBmcmFtZSAqLworCXNrYl9wdXQocnhiLT5za2IsIGxlbiArIHNpemVvZihzdHJ1Y3QgaXB3X3J0X2hkcikpOwogCiAJSVBXX0RFQlVHX1JYKCJSeCBwYWNrZXQgb2YgJWQgYnl0ZXMuXG4iLCByeGItPnNrYi0+bGVuKTsKIAogCWlmICghaWVlZTgwMjExX3J4KHByaXYtPmllZWUsIHJ4Yi0+c2tiLCBzdGF0cykpCiAJCXByaXYtPmllZWUtPnN0YXRzLnJ4X2Vycm9ycysrOwotCWVsc2UJCQkvKiBpZWVlODAyMTFfcnggc3VjY2VlZGVkLCBzbyBpdCBub3cgb3ducyB0aGUgU0tCICovCisJZWxzZSB7CQkJLyogaWVlZTgwMjExX3J4IHN1Y2NlZWRlZCwgc28gaXQgbm93IG93bnMgdGhlIFNLQiAqLwogCQlyeGItPnNrYiA9IE5VTEw7CisJCS8qIG5vIExFRCBkdXJpbmcgY2FwdHVyZSAqLworCX0KK30KKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIGludCBpc19uZXR3b3JrX3BhY2tldChzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsCisJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZWFkZXIpCit7CisJLyogRmlsdGVyIGluY29taW5nIHBhY2tldHMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgYXJlIHRhcmdldHRlZCB0b3dhcmQKKwkgKiB0aGlzIG5ldHdvcmssIGRpc2NhcmRpbmcgcGFja2V0cyBjb21pbmcgZnJvbSBvdXJzZWx2ZXMgKi8KKwlzd2l0Y2ggKHByaXYtPmllZWUtPml3X21vZGUpIHsKKwljYXNlIElXX01PREVfQURIT0M6CS8qIEhlYWRlcjogRGVzdC4gfCBTb3VyY2UgICAgfCBCU1NJRCAqLworCQkvKiBwYWNrZXRzIGZyb20gb3VyIGFkYXB0ZXIgYXJlIGRyb3BwZWQgKGVjaG8pICovCisJCWlmICghbWVtY21wKGhlYWRlci0+YWRkcjIsIHByaXYtPm5ldF9kZXYtPmRldl9hZGRyLCBFVEhfQUxFTikpCisJCQlyZXR1cm4gMDsKKworCQkvKiB7YnJvYWQsbXVsdGl9Y2FzdCBwYWNrZXRzIHRvIG91ciBCU1NJRCBnbyB0aHJvdWdoICovCisJCWlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZWFkZXItPmFkZHIxKSB8fAorCQkgICAgaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIoaGVhZGVyLT5hZGRyMSkpCisJCQlyZXR1cm4gIW1lbWNtcChoZWFkZXItPmFkZHIzLCBwcml2LT5ic3NpZCwgRVRIX0FMRU4pOworCisJCS8qIHBhY2tldHMgdG8gb3VyIGFkYXB0ZXIgZ28gdGhyb3VnaCAqLworCQlyZXR1cm4gIW1lbWNtcChoZWFkZXItPmFkZHIxLCBwcml2LT5uZXRfZGV2LT5kZXZfYWRkciwKKwkJCSAgICAgICBFVEhfQUxFTik7CisKKwljYXNlIElXX01PREVfSU5GUkE6CS8qIEhlYWRlcjogRGVzdC4gfCBCU1NJRCB8IFNvdXJjZSAqLworCQkvKiBwYWNrZXRzIGZyb20gb3VyIGFkYXB0ZXIgYXJlIGRyb3BwZWQgKGVjaG8pICovCisJCWlmICghbWVtY21wKGhlYWRlci0+YWRkcjMsIHByaXYtPm5ldF9kZXYtPmRldl9hZGRyLCBFVEhfQUxFTikpCisJCQlyZXR1cm4gMDsKKworCQkvKiB7YnJvYWQsbXVsdGl9Y2FzdCBwYWNrZXRzIHRvIG91ciBCU1MgZ28gdGhyb3VnaCAqLworCQlpZiAoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGVhZGVyLT5hZGRyMSkgfHwKKwkJICAgIGlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKGhlYWRlci0+YWRkcjEpKQorCQkJcmV0dXJuICFtZW1jbXAoaGVhZGVyLT5hZGRyMiwgcHJpdi0+YnNzaWQsIEVUSF9BTEVOKTsKKworCQkvKiBwYWNrZXRzIHRvIG91ciBhZGFwdGVyIGdvIHRocm91Z2ggKi8KKwkJcmV0dXJuICFtZW1jbXAoaGVhZGVyLT5hZGRyMSwgcHJpdi0+bmV0X2Rldi0+ZGV2X2FkZHIsCisJCQkgICAgICAgRVRIX0FMRU4pOworCX0KKworCXJldHVybiAxOworfQorCisjZGVmaW5lIElQV19QQUNLRVRfUkVUUllfVElNRSBIWgorCitzdGF0aWMgaW5saW5lIGludCBpc19kdXBsaWNhdGVfcGFja2V0KHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwKKwkJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGVhZGVyKQoreworCXUxNiBzYyA9IGxlMTZfdG9fY3B1KGhlYWRlci0+c2VxX2N0bCk7CisJdTE2IHNlcSA9IFdMQU5fR0VUX1NFUV9TRVEoc2MpOworCXUxNiBmcmFnID0gV0xBTl9HRVRfU0VRX0ZSQUcoc2MpOworCXUxNiAqbGFzdF9zZXEsICpsYXN0X2ZyYWc7CisJdW5zaWduZWQgbG9uZyAqbGFzdF90aW1lOworCisJc3dpdGNoIChwcml2LT5pZWVlLT5pd19tb2RlKSB7CisJY2FzZSBJV19NT0RFX0FESE9DOgorCQl7CisJCQlzdHJ1Y3QgbGlzdF9oZWFkICpwOworCQkJc3RydWN0IGlwd19pYnNzX3NlcSAqZW50cnkgPSBOVUxMOworCQkJdTggKm1hYyA9IGhlYWRlci0+YWRkcjI7CisJCQlpbnQgaW5kZXggPSBtYWNbNV0gJSBJUFdfSUJTU19NQUNfSEFTSF9TSVpFOworCisJCQlfX2xpc3RfZm9yX2VhY2gocCwgJnByaXYtPmlic3NfbWFjX2hhc2hbaW5kZXhdKSB7CisJCQkJZW50cnkgPQorCQkJCSAgICBsaXN0X2VudHJ5KHAsIHN0cnVjdCBpcHdfaWJzc19zZXEsIGxpc3QpOworCQkJCWlmICghbWVtY21wKGVudHJ5LT5tYWMsIG1hYywgRVRIX0FMRU4pKQorCQkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChwID09ICZwcml2LT5pYnNzX21hY19oYXNoW2luZGV4XSkgeworCQkJCWVudHJ5ID0ga21hbGxvYyhzaXplb2YoKmVudHJ5KSwgR0ZQX0FUT01JQyk7CisJCQkJaWYgKCFlbnRyeSkgeworCQkJCQlJUFdfRVJST1IKKwkJCQkJICAgICgiQ2Fubm90IG1hbGxvYyBuZXcgbWFjIGVudHJ5XG4iKTsKKwkJCQkJcmV0dXJuIDA7CisJCQkJfQorCQkJCW1lbWNweShlbnRyeS0+bWFjLCBtYWMsIEVUSF9BTEVOKTsKKwkJCQllbnRyeS0+c2VxX251bSA9IHNlcTsKKwkJCQllbnRyeS0+ZnJhZ19udW0gPSBmcmFnOworCQkJCWVudHJ5LT5wYWNrZXRfdGltZSA9IGppZmZpZXM7CisJCQkJbGlzdF9hZGQoJmVudHJ5LT5saXN0LAorCQkJCQkgJnByaXYtPmlic3NfbWFjX2hhc2hbaW5kZXhdKTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJCWxhc3Rfc2VxID0gJmVudHJ5LT5zZXFfbnVtOworCQkJbGFzdF9mcmFnID0gJmVudHJ5LT5mcmFnX251bTsKKwkJCWxhc3RfdGltZSA9ICZlbnRyeS0+cGFja2V0X3RpbWU7CisJCQlicmVhazsKKwkJfQorCWNhc2UgSVdfTU9ERV9JTkZSQToKKwkJbGFzdF9zZXEgPSAmcHJpdi0+bGFzdF9zZXFfbnVtOworCQlsYXN0X2ZyYWcgPSAmcHJpdi0+bGFzdF9mcmFnX251bTsKKwkJbGFzdF90aW1lID0gJnByaXYtPmxhc3RfcGFja2V0X3RpbWU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KKwlpZiAoKCpsYXN0X3NlcSA9PSBzZXEpICYmCisJICAgIHRpbWVfYWZ0ZXIoKmxhc3RfdGltZSArIElQV19QQUNLRVRfUkVUUllfVElNRSwgamlmZmllcykpIHsKKwkJaWYgKCpsYXN0X2ZyYWcgPT0gZnJhZykKKwkJCWdvdG8gZHJvcDsKKwkJaWYgKCpsYXN0X2ZyYWcgKyAxICE9IGZyYWcpCisJCQkvKiBvdXQtb2Ytb3JkZXIgZnJhZ21lbnQgKi8KKwkJCWdvdG8gZHJvcDsKKwl9IGVsc2UKKwkJKmxhc3Rfc2VxID0gc2VxOworCisJKmxhc3RfZnJhZyA9IGZyYWc7CisJKmxhc3RfdGltZSA9IGppZmZpZXM7CisJcmV0dXJuIDA7CisKKyAgICAgIGRyb3A6CisJLyogQ29tbWVudCB0aGlzIGxpbmUgbm93IHNpbmNlIHdlIG9ic2VydmVkIHRoZSBjYXJkIHJlY2VpdmVzCisJICogZHVwbGljYXRlIHBhY2tldHMgYnV0IHRoZSBGQ1RMX1JFVFJZIGJpdCBpcyBub3Qgc2V0IGluIHRoZQorCSAqIElCU1MgbW9kZSB3aXRoIGZyYWdtZW50YXRpb24gZW5hYmxlZC4KKwkgQlVHX09OKCEobGUxNl90b19jcHUoaGVhZGVyLT5mcmFtZV9jdGwpICYgSUVFRTgwMjExX0ZDVExfUkVUUlkpKTsgKi8KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgaXB3X2hhbmRsZV9tZ210X3BhY2tldChzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsCisJCQkJICAgc3RydWN0IGlwd19yeF9tZW1fYnVmZmVyICpyeGIsCisJCQkJICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0cyAqc3RhdHMpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHJ4Yi0+c2tiOworCXN0cnVjdCBpcHdfcnhfcGFja2V0ICpwa3QgPSAoc3RydWN0IGlwd19yeF9wYWNrZXQgKilza2ItPmRhdGE7CisJc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhlYWRlciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKQorCSAgICAoc2tiLT5kYXRhICsgSVBXX1JYX0ZSQU1FX1NJWkUpOworCisJaWVlZTgwMjExX3J4X21ndChwcml2LT5pZWVlLCBoZWFkZXIsIHN0YXRzKTsKKworCWlmIChwcml2LT5pZWVlLT5pd19tb2RlID09IElXX01PREVfQURIT0MgJiYKKwkgICAgKChXTEFOX0ZDX0dFVF9TVFlQRShsZTE2X3RvX2NwdShoZWFkZXItPmZyYW1lX2N0bCkpID09CisJICAgICAgSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFU1ApIHx8CisJICAgICAoV0xBTl9GQ19HRVRfU1RZUEUobGUxNl90b19jcHUoaGVhZGVyLT5mcmFtZV9jdGwpKSA9PQorCSAgICAgIElFRUU4MDIxMV9TVFlQRV9CRUFDT04pKSkgeworCQlpZiAoIW1lbWNtcChoZWFkZXItPmFkZHIzLCBwcml2LT5ic3NpZCwgRVRIX0FMRU4pKQorCQkJaXB3X2FkZF9zdGF0aW9uKHByaXYsIGhlYWRlci0+YWRkcjIpOworCX0KKworCWlmIChwcml2LT5jb25maWcgJiBDRkdfTkVUX1NUQVRTKSB7CisJCUlQV19ERUJVR19IQygic2VuZGluZyBzdGF0IHBhY2tldFxuIik7CisKKwkJLyogU2V0IHRoZSBzaXplIG9mIHRoZSBza2IgdG8gdGhlIHNpemUgb2YgdGhlIGZ1bGwKKwkJICogaXB3IGhlYWRlciBhbmQgODAyLjExIGZyYW1lICovCisJCXNrYl9wdXQoc2tiLCBsZTE2X3RvX2NwdShwa3QtPnUuZnJhbWUubGVuZ3RoKSArCisJCQlJUFdfUlhfRlJBTUVfU0laRSk7CisKKwkJLyogQWR2YW5jZSBwYXN0IHRoZSBpcHcgcGFja2V0IGhlYWRlciB0byB0aGUgODAyLjExIGZyYW1lICovCisJCXNrYl9wdWxsKHNrYiwgSVBXX1JYX0ZSQU1FX1NJWkUpOworCisJCS8qIFB1c2ggdGhlIGllZWU4MDIxMV9yeF9zdGF0cyBiZWZvcmUgdGhlIDgwMi4xMSBmcmFtZSAqLworCQltZW1jcHkoc2tiX3B1c2goc2tiLCBzaXplb2YoKnN0YXRzKSksIHN0YXRzLCBzaXplb2YoKnN0YXRzKSk7CisKKwkJc2tiLT5kZXYgPSBwcml2LT5pZWVlLT5kZXY7CisKKwkJLyogUG9pbnQgcmF3IGF0IHRoZSBpZWVlODAyMTFfc3RhdHMgKi8KKwkJc2tiLT5tYWMucmF3ID0gc2tiLT5kYXRhOworCisJCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfT1RIRVJIT1NUOworCQlza2ItPnByb3RvY29sID0gX19jb25zdGFudF9odG9ucyhFVEhfUF84MDIxMV9TVEFUUyk7CisJCW1lbXNldChza2ItPmNiLCAwLCBzaXplb2YocnhiLT5za2ItPmNiKSk7CisJCW5ldGlmX3J4KHNrYik7CisJCXJ4Yi0+c2tiID0gTlVMTDsKKwl9CiB9CiAKIC8qCkBAIC00OTEyLDggKzc4MTAsOCBAQAogCXUzMiByLCB3LCBpOwogCXU4IG5ldHdvcmtfcGFja2V0OwogCi0JciA9IGlwd19yZWFkMzIocHJpdiwgQ1gyX1JYX1JFQURfSU5ERVgpOwotCXcgPSBpcHdfcmVhZDMyKHByaXYsIENYMl9SWF9XUklURV9JTkRFWCk7CisJciA9IGlwd19yZWFkMzIocHJpdiwgSVBXX1JYX1JFQURfSU5ERVgpOworCXcgPSBpcHdfcmVhZDMyKHByaXYsIElQV19SWF9XUklURV9JTkRFWCk7CiAJaSA9IChwcml2LT5yeHEtPnByb2Nlc3NlZCArIDEpICUgUlhfUVVFVUVfU0laRTsKIAogCXdoaWxlIChpICE9IHIpIHsKQEAgLTQ5MjcsNyArNzgyNSw3IEBACiAJCXByaXYtPnJ4cS0+cXVldWVbaV0gPSBOVUxMOwogCiAJCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdShwcml2LT5wY2lfZGV2LCByeGItPmRtYV9hZGRyLAotCQkJCQkgICAgQ1gyX1JYX0JVRl9TSVpFLAorCQkJCQkgICAgSVBXX1JYX0JVRl9TSVpFLAogCQkJCQkgICAgUENJX0RNQV9GUk9NREVWSUNFKTsKIAogCQlwa3QgPSAoc3RydWN0IGlwd19yeF9wYWNrZXQgKilyeGItPnNrYi0+ZGF0YTsKQEAgLTQ5MzgsOSArNzgzNiwxMyBAQAogCQlzd2l0Y2ggKHBrdC0+aGVhZGVyLm1lc3NhZ2VfdHlwZSkgewogCQljYXNlIFJYX0ZSQU1FX1RZUEU6CS8qIDgwMi4xMSBmcmFtZSAqLyAgewogCQkJCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHMgc3RhdHMgPSB7Ci0JCQkJCS5yc3NpID0gcGt0LT51LmZyYW1lLnJzc2lfZGJtIC0KKwkJCQkJLnJzc2kgPQorCQkJCQkgICAgbGUxNl90b19jcHUocGt0LT51LmZyYW1lLnJzc2lfZGJtKSAtCiAJCQkJCSAgICBJUFdfUlNTSV9UT19EQk0sCi0JCQkJCS5zaWduYWwgPSBwa3QtPnUuZnJhbWUuc2lnbmFsLAorCQkJCQkuc2lnbmFsID0KKwkJCQkJICAgIGxlMTZfdG9fY3B1KHBrdC0+dS5mcmFtZS5zaWduYWwpLAorCQkJCQkubm9pc2UgPQorCQkJCQkgICAgbGUxNl90b19jcHUocGt0LT51LmZyYW1lLm5vaXNlKSwKIAkJCQkJLnJhdGUgPSBwa3QtPnUuZnJhbWUucmF0ZSwKIAkJCQkJLm1hY190aW1lID0gamlmZmllcywKIAkJCQkJLnJlY2VpdmVkX2NoYW5uZWwgPQpAQCAtNDk1MCwyMiArNzg1MiwzMCBAQAogCQkJCQkgICAgIGNvbnRyb2wgJiAoMSA8PCAwKSkgPwogCQkJCQkgICAgSUVFRTgwMjExXzI0R0haX0JBTkQgOgogCQkJCQkgICAgSUVFRTgwMjExXzUyR0haX0JBTkQsCi0JCQkJCS5sZW4gPSBwa3QtPnUuZnJhbWUubGVuZ3RoLAorCQkJCQkubGVuID0gbGUxNl90b19jcHUocGt0LT51LmZyYW1lLmxlbmd0aCksCiAJCQkJfTsKIAogCQkJCWlmIChzdGF0cy5yc3NpICE9IDApCiAJCQkJCXN0YXRzLm1hc2sgfD0gSUVFRTgwMjExX1NUQVRNQVNLX1JTU0k7CiAJCQkJaWYgKHN0YXRzLnNpZ25hbCAhPSAwKQogCQkJCQlzdGF0cy5tYXNrIHw9IElFRUU4MDIxMV9TVEFUTUFTS19TSUdOQUw7CisJCQkJaWYgKHN0YXRzLm5vaXNlICE9IDApCisJCQkJCXN0YXRzLm1hc2sgfD0gSUVFRTgwMjExX1NUQVRNQVNLX05PSVNFOwogCQkJCWlmIChzdGF0cy5yYXRlICE9IDApCiAJCQkJCXN0YXRzLm1hc2sgfD0gSUVFRTgwMjExX1NUQVRNQVNLX1JBVEU7CiAKIAkJCQlwcml2LT5yeF9wYWNrZXRzKys7CiAKLSNpZmRlZiBDT05GSUdfSVBXX1BST01JU0MKKyNpZmRlZiBDT05GSUdfSVBXMjIwMF9NT05JVE9SCiAJCQkJaWYgKHByaXYtPmllZWUtPml3X21vZGUgPT0gSVdfTU9ERV9NT05JVE9SKSB7CisjaWZkZWYgQ09ORklHX0lFRUU4MDIxMV9SQURJT1RBUAorCQkJCQlpcHdfaGFuZGxlX2RhdGFfcGFja2V0X21vbml0b3IocHJpdiwKKwkJCQkJCQkJICAgICAgIHJ4YiwKKwkJCQkJCQkJICAgICAgICZzdGF0cyk7CisjZWxzZQogCQkJCQlpcHdfaGFuZGxlX2RhdGFfcGFja2V0KHByaXYsIHJ4YiwKIAkJCQkJCQkgICAgICAgJnN0YXRzKTsKKyNlbmRpZgogCQkJCQlicmVhazsKIAkJCQl9CiAjZW5kaWYKQEAgLTQ5NzksMzUgKzc4ODksOSBAQAogCQkJCSAqIGNvcnJlY3RseSAtLSB3ZSBzaG91bGQgcHJvYmFibHkgdXNlIHRoZQogCQkJCSAqIGZyYW1lIGNvbnRyb2wgb2YgdGhlIHBhY2tldCBhbmQgZGlzcmVnYXJkCiAJCQkJICogdGhlIGN1cnJlbnQgaXdfbW9kZSAqLwotCQkJCXN3aXRjaCAocHJpdi0+aWVlZS0+aXdfbW9kZSkgewotCQkJCWNhc2UgSVdfTU9ERV9BREhPQzoKLQkJCQkJbmV0d29ya19wYWNrZXQgPQotCQkJCQkgICAgIW1lbWNtcChoZWFkZXItPmFkZHIxLAotCQkJCQkJICAgIHByaXYtPm5ldF9kZXYtPmRldl9hZGRyLAotCQkJCQkJICAgIEVUSF9BTEVOKSB8fAotCQkJCQkgICAgIW1lbWNtcChoZWFkZXItPmFkZHIzLAotCQkJCQkJICAgIHByaXYtPmJzc2lkLCBFVEhfQUxFTikgfHwKLQkJCQkJICAgIGlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKGhlYWRlci0+Ci0JCQkJCQkJCSAgICBhZGRyMSkKLQkJCQkJICAgIHx8IGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhlYWRlci0+Ci0JCQkJCQkJCSAgICAgICBhZGRyMSk7Ci0JCQkJCWJyZWFrOwogCi0JCQkJY2FzZSBJV19NT0RFX0lORlJBOgotCQkJCWRlZmF1bHQ6Ci0JCQkJCW5ldHdvcmtfcGFja2V0ID0KLQkJCQkJICAgICFtZW1jbXAoaGVhZGVyLT5hZGRyMywKLQkJCQkJCSAgICBwcml2LT5ic3NpZCwgRVRIX0FMRU4pIHx8Ci0JCQkJCSAgICAhbWVtY21wKGhlYWRlci0+YWRkcjEsCi0JCQkJCQkgICAgcHJpdi0+bmV0X2Rldi0+ZGV2X2FkZHIsCi0JCQkJCQkgICAgRVRIX0FMRU4pIHx8Ci0JCQkJCSAgICBpc19icm9hZGNhc3RfZXRoZXJfYWRkcihoZWFkZXItPgotCQkJCQkJCQkgICAgYWRkcjEpCi0JCQkJCSAgICB8fCBpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZWFkZXItPgotCQkJCQkJCQkgICAgICAgYWRkcjEpOwotCQkJCQlicmVhazsKLQkJCQl9Ci0KKwkJCQluZXR3b3JrX3BhY2tldCA9CisJCQkJICAgIGlzX25ldHdvcmtfcGFja2V0KHByaXYsIGhlYWRlcik7CiAJCQkJaWYgKG5ldHdvcmtfcGFja2V0ICYmIHByaXYtPmFzc29jX25ldHdvcmspIHsKIAkJCQkJcHJpdi0+YXNzb2NfbmV0d29yay0+c3RhdHMucnNzaSA9CiAJCQkJCSAgICBzdGF0cy5yc3NpOwpAQCAtNTAxNyw5ICs3OTAxLDEwIEBACiAJCQkJfQogCiAJCQkJSVBXX0RFQlVHX1JYKCJGcmFtZTogbGVuPSV1XG4iLAotCQkJCQkgICAgIHBrdC0+dS5mcmFtZS5sZW5ndGgpOworCQkJCQkgICAgIGxlMTZfdG9fY3B1KHBrdC0+dS5mcmFtZS5sZW5ndGgpKTsKIAotCQkJCWlmIChwa3QtPnUuZnJhbWUubGVuZ3RoIDwgZnJhbWVfaGRyX2xlbihoZWFkZXIpKSB7CisJCQkJaWYgKGxlMTZfdG9fY3B1KHBrdC0+dS5mcmFtZS5sZW5ndGgpIDwKKwkJCQkgICAgZnJhbWVfaGRyX2xlbihoZWFkZXIpKSB7CiAJCQkJCUlQV19ERUJVR19EUk9QCiAJCQkJCSAgICAoIlJlY2VpdmVkIHBhY2tldCBpcyB0b28gc21hbGwuICIKIAkJCQkJICAgICAiRHJvcHBpbmcuXG4iKTsKQEAgLTUwMjgsMzQgKzc5MTMsMjIgQEAKIAkJCQkJYnJlYWs7CiAJCQkJfQogCi0JCQkJc3dpdGNoIChXTEFOX0ZDX0dFVF9UWVBFKGhlYWRlci0+ZnJhbWVfY3RsKSkgeworCQkJCXN3aXRjaCAoV0xBTl9GQ19HRVRfVFlQRQorCQkJCQkobGUxNl90b19jcHUoaGVhZGVyLT5mcmFtZV9jdGwpKSkgeworCiAJCQkJY2FzZSBJRUVFODAyMTFfRlRZUEVfTUdNVDoKLQkJCQkJaWVlZTgwMjExX3J4X21ndChwcml2LT5pZWVlLCBoZWFkZXIsCi0JCQkJCQkJICZzdGF0cyk7Ci0JCQkJCWlmIChwcml2LT5pZWVlLT5pd19tb2RlID09IElXX01PREVfQURIT0MKLQkJCQkJICAgICYmCi0JCQkJCSAgICAoKFdMQU5fRkNfR0VUX1NUWVBFCi0JCQkJCSAgICAgIChoZWFkZXItPmZyYW1lX2N0bCkgPT0KLQkJCQkJICAgICAgSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFU1ApCi0JCQkJCSAgICAgfHwKLQkJCQkJICAgICAoV0xBTl9GQ19HRVRfU1RZUEUKLQkJCQkJICAgICAgKGhlYWRlci0+ZnJhbWVfY3RsKSA9PQotCQkJCQkgICAgICBJRUVFODAyMTFfU1RZUEVfQkVBQ09OKSkKLQkJCQkJICAgICYmICFtZW1jbXAoaGVhZGVyLT5hZGRyMywKLQkJCQkJCSAgICAgICBwcml2LT5ic3NpZCwgRVRIX0FMRU4pKQotCQkJCQkJaXB3X2FkZF9zdGF0aW9uKHByaXYsCi0JCQkJCQkJCWhlYWRlci0+YWRkcjIpOworCQkJCQlpcHdfaGFuZGxlX21nbXRfcGFja2V0KHByaXYsIHJ4YiwKKwkJCQkJCQkgICAgICAgJnN0YXRzKTsKIAkJCQkJYnJlYWs7CiAKIAkJCQljYXNlIElFRUU4MDIxMV9GVFlQRV9DVEw6CiAJCQkJCWJyZWFrOwogCiAJCQkJY2FzZSBJRUVFODAyMTFfRlRZUEVfREFUQToKLQkJCQkJaWYgKG5ldHdvcmtfcGFja2V0KQotCQkJCQkJaXB3X2hhbmRsZV9kYXRhX3BhY2tldChwcml2LAotCQkJCQkJCQkgICAgICAgcnhiLAotCQkJCQkJCQkgICAgICAgJnN0YXRzKTsKLQkJCQkJZWxzZQorCQkJCQlpZiAodW5saWtlbHkoIW5ldHdvcmtfcGFja2V0IHx8CisJCQkJCQkgICAgIGlzX2R1cGxpY2F0ZV9wYWNrZXQocHJpdiwKKwkJCQkJCQkJCSBoZWFkZXIpKSkKKwkJCQkJewogCQkJCQkJSVBXX0RFQlVHX0RST1AoIkRyb3BwaW5nOiAiCiAJCQkJCQkJICAgICAgIE1BQ19GTVQgIiwgIgogCQkJCQkJCSAgICAgICBNQUNfRk1UICIsICIKQEAgLTUwNjYsNiArNzkzOSwxMiBAQAogCQkJCQkJCQkgICAgICAgYWRkcjIpLAogCQkJCQkJCSAgICAgICBNQUNfQVJHKGhlYWRlci0+CiAJCQkJCQkJCSAgICAgICBhZGRyMykpOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKworCQkJCQlpcHdfaGFuZGxlX2RhdGFfcGFja2V0KHByaXYsIHJ4YiwKKwkJCQkJCQkgICAgICAgJnN0YXRzKTsKKwogCQkJCQlicmVhazsKIAkJCQl9CiAJCQkJYnJlYWs7CkBAIC01MDk2LDcgKzc5NzUsNyBAQAogCQl9CiAKIAkJcGNpX3VubWFwX3NpbmdsZShwcml2LT5wY2lfZGV2LCByeGItPmRtYV9hZGRyLAotCQkJCSBDWDJfUlhfQlVGX1NJWkUsIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQkJIElQV19SWF9CVUZfU0laRSwgUENJX0RNQV9GUk9NREVWSUNFKTsKIAkJbGlzdF9hZGRfdGFpbCgmcnhiLT5saXN0LCAmcHJpdi0+cnhxLT5yeF91c2VkKTsKIAogCQlpID0gKGkgKyAxKSAlIFJYX1FVRVVFX1NJWkU7CkBAIC01MTA4LDEyOCArNzk4NywxMjkgQEAKIAlpcHdfcnhfcXVldWVfcmVzdG9jayhwcml2KTsKIH0KIAotc3RhdGljIHZvaWQgaXB3X2Fib3J0X3NjYW4oc3RydWN0IGlwd19wcml2ICpwcml2KQorI2RlZmluZSBERUZBVUxUX1JUU19USFJFU0hPTEQgICAgIDIzMDRVCisjZGVmaW5lIE1JTl9SVFNfVEhSRVNIT0xEICAgICAgICAgMVUKKyNkZWZpbmUgTUFYX1JUU19USFJFU0hPTEQgICAgICAgICAyMzA0VQorI2RlZmluZSBERUZBVUxUX0JFQUNPTl9JTlRFUlZBTCAgIDEwMFUKKyNkZWZpbmUJREVGQVVMVF9TSE9SVF9SRVRSWV9MSU1JVCA3VQorI2RlZmluZQlERUZBVUxUX0xPTkdfUkVUUllfTElNSVQgIDRVCisKK3N0YXRpYyBpbnQgaXB3X3N3X3Jlc2V0KHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwgaW50IGluaXQpCiB7Ci0JaW50IGVycjsKKwlpbnQgYmFuZCwgbW9kdWxhdGlvbjsKKwlpbnQgb2xkX21vZGUgPSBwcml2LT5pZWVlLT5pd19tb2RlOwogCi0JaWYgKHByaXYtPnN0YXR1cyAmIFNUQVRVU19TQ0FOX0FCT1JUSU5HKSB7Ci0JCUlQV19ERUJVR19IQygiSWdub3JpbmcgY29uY3VycmVudCBzY2FuIGFib3J0IHJlcXVlc3QuXG4iKTsKLQkJcmV0dXJuOwotCX0KLQlwcml2LT5zdGF0dXMgfD0gU1RBVFVTX1NDQU5fQUJPUlRJTkc7CisJLyogSW5pdGlhbGl6ZSBtb2R1bGUgcGFyYW1ldGVyIHZhbHVlcyBoZXJlICovCisJcHJpdi0+Y29uZmlnID0gMDsKIAotCWVyciA9IGlwd19zZW5kX3NjYW5fYWJvcnQocHJpdik7Ci0JaWYgKGVycikKLQkJSVBXX0RFQlVHX0hDKCJSZXF1ZXN0IHRvIGFib3J0IHNjYW4gZmFpbGVkLlxuIik7Ci19CisJLyogV2UgZGVmYXVsdCB0byBkaXNhYmxpbmcgdGhlIExFRCBjb2RlIGFzIHJpZ2h0IG5vdyBpdCBjYXVzZXMKKwkgKiB0b28gbWFueSBzeXN0ZW1zIHRvIGxvY2sgdXAuLi4gKi8KKwlpZiAoIWxlZCkKKwkJcHJpdi0+Y29uZmlnIHw9IENGR19OT19MRUQ7CiAKLXN0YXRpYyBpbnQgaXB3X3JlcXVlc3Rfc2NhbihzdHJ1Y3QgaXB3X3ByaXYgKnByaXYpCi17Ci0Jc3RydWN0IGlwd19zY2FuX3JlcXVlc3RfZXh0IHNjYW47Ci0JaW50IGNoYW5uZWxfaW5kZXggPSAwOwotCWludCBpLCBlcnIsIHNjYW5fdHlwZTsKKwlpZiAoYXNzb2NpYXRlKQorCQlwcml2LT5jb25maWcgfD0gQ0ZHX0FTU09DSUFURTsKKwllbHNlCisJCUlQV19ERUJVR19JTkZPKCJBdXRvIGFzc29jaWF0ZSBkaXNhYmxlZC5cbiIpOwogCi0JaWYgKHByaXYtPnN0YXR1cyAmIFNUQVRVU19FWElUX1BFTkRJTkcpIHsKLQkJSVBXX0RFQlVHX1NDQU4oIkFib3J0aW5nIHNjYW4gZHVlIHRvIGRldmljZSBzaHV0ZG93blxuIik7Ci0JCXByaXYtPnN0YXR1cyB8PSBTVEFUVVNfU0NBTl9QRU5ESU5HOwotCQlyZXR1cm4gMDsKKwlpZiAoYXV0b19jcmVhdGUpCisJCXByaXYtPmNvbmZpZyB8PSBDRkdfQURIT0NfQ1JFQVRFOworCWVsc2UKKwkJSVBXX0RFQlVHX0lORk8oIkF1dG8gYWRob2MgY3JlYXRpb24gZGlzYWJsZWQuXG4iKTsKKworCWlmIChkaXNhYmxlKSB7CisJCXByaXYtPnN0YXR1cyB8PSBTVEFUVVNfUkZfS0lMTF9TVzsKKwkJSVBXX0RFQlVHX0lORk8oIlJhZGlvIGRpc2FibGVkLlxuIik7CiAJfQogCi0JaWYgKHByaXYtPnN0YXR1cyAmIFNUQVRVU19TQ0FOTklORykgewotCQlJUFdfREVCVUdfSEMoIkNvbmN1cnJlbnQgc2NhbiByZXF1ZXN0ZWQuICBBYm9ydGluZyBmaXJzdC5cbiIpOwotCQlwcml2LT5zdGF0dXMgfD0gU1RBVFVTX1NDQU5fUEVORElORzsKLQkJaXB3X2Fib3J0X3NjYW4ocHJpdik7Ci0JCXJldHVybiAwOworCWlmIChjaGFubmVsICE9IDApIHsKKwkJcHJpdi0+Y29uZmlnIHw9IENGR19TVEFUSUNfQ0hBTk5FTDsKKwkJcHJpdi0+Y2hhbm5lbCA9IGNoYW5uZWw7CisJCUlQV19ERUJVR19JTkZPKCJCaW5kIHRvIHN0YXRpYyBjaGFubmVsICVkXG4iLCBjaGFubmVsKTsKKwkJLyogVE9ETzogVmFsaWRhdGUgdGhhdCBwcm92aWRlZCBjaGFubmVsIGlzIGluIHJhbmdlICovCisJfQorI2lmZGVmIENPTkZJR19JUFdfUU9TCisJaXB3X3Fvc19pbml0KHByaXYsIHFvc19lbmFibGUsIHFvc19idXJzdF9lbmFibGUsCisJCSAgICAgYnVyc3RfZHVyYXRpb25fQ0NLLCBidXJzdF9kdXJhdGlvbl9PRkRNKTsKKyNlbmRpZgkJCQkvKiBDT05GSUdfSVBXX1FPUyAqLworCisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSAxOgorCQlwcml2LT5pZWVlLT5pd19tb2RlID0gSVdfTU9ERV9BREhPQzsKKwkJcHJpdi0+bmV0X2Rldi0+dHlwZSA9IEFSUEhSRF9FVEhFUjsKKworCQlicmVhazsKKyNpZmRlZiBDT05GSUdfSVBXMjIwMF9NT05JVE9SCisJY2FzZSAyOgorCQlwcml2LT5pZWVlLT5pd19tb2RlID0gSVdfTU9ERV9NT05JVE9SOworI2lmZGVmIENPTkZJR19JRUVFODAyMTFfUkFESU9UQVAKKwkJcHJpdi0+bmV0X2Rldi0+dHlwZSA9IEFSUEhSRF9JRUVFODAyMTFfUkFESU9UQVA7CisjZWxzZQorCQlwcml2LT5uZXRfZGV2LT50eXBlID0gQVJQSFJEX0lFRUU4MDIxMTsKKyNlbmRpZgorCQlicmVhazsKKyNlbmRpZgorCWRlZmF1bHQ6CisJY2FzZSAwOgorCQlwcml2LT5uZXRfZGV2LT50eXBlID0gQVJQSFJEX0VUSEVSOworCQlwcml2LT5pZWVlLT5pd19tb2RlID0gSVdfTU9ERV9JTkZSQTsKKwkJYnJlYWs7CiAJfQogCi0JaWYgKHByaXYtPnN0YXR1cyAmIFNUQVRVU19TQ0FOX0FCT1JUSU5HKSB7Ci0JCUlQV19ERUJVR19IQygiU2NhbiByZXF1ZXN0IHdoaWxlIGFib3J0IHBlbmRpbmcuICBRdWV1aW5nLlxuIik7Ci0JCXByaXYtPnN0YXR1cyB8PSBTVEFUVVNfU0NBTl9QRU5ESU5HOwotCQlyZXR1cm4gMDsKKwlpZiAoaHdjcnlwdG8pIHsKKwkJcHJpdi0+aWVlZS0+aG9zdF9lbmNyeXB0ID0gMDsKKwkJcHJpdi0+aWVlZS0+aG9zdF9lbmNyeXB0X21zZHUgPSAwOworCQlwcml2LT5pZWVlLT5ob3N0X2RlY3J5cHQgPSAwOworCQlwcml2LT5pZWVlLT5ob3N0X21jX2RlY3J5cHQgPSAwOwogCX0KKwlJUFdfREVCVUdfSU5GTygiSGFyZHdhcmUgY3J5cHRvIFslc11cbiIsIGh3Y3J5cHRvID8gIm9uIiA6ICJvZmYiKTsKIAotCWlmIChwcml2LT5zdGF0dXMgJiBTVEFUVVNfUkZfS0lMTF9NQVNLKSB7Ci0JCUlQV19ERUJVR19IQygiQWJvcnRpbmcgc2NhbiBkdWUgdG8gUkYgS2lsbCBhY3RpdmF0aW9uXG4iKTsKLQkJcHJpdi0+c3RhdHVzIHw9IFNUQVRVU19TQ0FOX1BFTkRJTkc7Ci0JCXJldHVybiAwOwotCX0KKwkvKiBJUFcyMjAwLzI5MTUgaXMgYWJsZWQgdG8gZG8gaGFyZHdhcmUgZnJhZ21lbnRhdGlvbi4gKi8KKwlwcml2LT5pZWVlLT5ob3N0X29wZW5fZnJhZyA9IDA7CiAKLQltZW1zZXQoJnNjYW4sIDAsIHNpemVvZihzY2FuKSk7Ci0KLQlzY2FuLmR3ZWxsX3RpbWVbSVBXX1NDQU5fQUNUSVZFX0JST0FEQ0FTVF9TQ0FOXSA9IDIwOwotCXNjYW4uZHdlbGxfdGltZVtJUFdfU0NBTl9BQ1RJVkVfQlJPQURDQVNUX0FORF9ESVJFQ1RfU0NBTl0gPSAyMDsKLQlzY2FuLmR3ZWxsX3RpbWVbSVBXX1NDQU5fUEFTU0lWRV9GVUxMX0RXRUxMX1NDQU5dID0gMjA7Ci0KLQlzY2FuLmZ1bGxfc2Nhbl9pbmRleCA9IGllZWU4MDIxMV9nZXRfc2NhbnMocHJpdi0+aWVlZSk7Ci0JLyogSWYgd2UgYXJlIHJvYW1pbmcsIHRoZW4gbWFrZSB0aGlzIGEgZGlyZWN0ZWQgc2NhbiBmb3IgdGhlIGN1cnJlbnQKLQkgKiBuZXR3b3JrLiAgT3RoZXJ3aXNlLCBlbnN1cmUgdGhhdCBldmVyeSBvdGhlciBzY2FuIGlzIGEgZmFzdAotCSAqIGNoYW5uZWwgaG9wIHNjYW4gKi8KLQlpZiAoKHByaXYtPnN0YXR1cyAmIFNUQVRVU19ST0FNSU5HKQotCSAgICB8fCAoIShwcml2LT5zdGF0dXMgJiBTVEFUVVNfQVNTT0NJQVRFRCkKLQkJJiYgKHByaXYtPmNvbmZpZyAmIENGR19TVEFUSUNfRVNTSUQpCi0JCSYmIChzY2FuLmZ1bGxfc2Nhbl9pbmRleCAlIDIpKSkgewotCQllcnIgPSBpcHdfc2VuZF9zc2lkKHByaXYsIHByaXYtPmVzc2lkLCBwcml2LT5lc3NpZF9sZW4pOwotCQlpZiAoZXJyKSB7Ci0JCQlJUFdfREVCVUdfSEMoIkF0dGVtcHQgdG8gc2VuZCBTU0lEIGNvbW1hbmQgZmFpbGVkLlxuIik7Ci0JCQlyZXR1cm4gZXJyOwotCQl9Ci0KLQkJc2Nhbl90eXBlID0gSVBXX1NDQU5fQUNUSVZFX0JST0FEQ0FTVF9BTkRfRElSRUNUX1NDQU47CisJaWYgKChwcml2LT5wY2lfZGV2LT5kZXZpY2UgPT0gMHg0MjIzKSB8fAorCSAgICAocHJpdi0+cGNpX2Rldi0+ZGV2aWNlID09IDB4NDIyNCkpIHsKKwkJaWYgKGluaXQpCisJCQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FCisJCQkgICAgICAgIjogRGV0ZWN0ZWQgSW50ZWwgUFJPL1dpcmVsZXNzIDI5MTVBQkcgTmV0d29yayAiCisJCQkgICAgICAgIkNvbm5lY3Rpb25cbiIpOworCQlwcml2LT5pZWVlLT5hYmdfdHJ1ZSA9IDE7CisJCWJhbmQgPSBJRUVFODAyMTFfNTJHSFpfQkFORCB8IElFRUU4MDIxMV8yNEdIWl9CQU5EOworCQltb2R1bGF0aW9uID0gSUVFRTgwMjExX09GRE1fTU9EVUxBVElPTiB8CisJCSAgICBJRUVFODAyMTFfQ0NLX01PRFVMQVRJT047CisJCXByaXYtPmFkYXB0ZXIgPSBJUFdfMjkxNUFCRzsKKwkJcHJpdi0+aWVlZS0+bW9kZSA9IElFRUVfQSB8IElFRUVfRyB8IElFRUVfQjsKIAl9IGVsc2UgewotCQlzY2FuX3R5cGUgPSBJUFdfU0NBTl9BQ1RJVkVfQlJPQURDQVNUX1NDQU47CisJCWlmIChpbml0KQorCQkJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRQorCQkJICAgICAgICI6IERldGVjdGVkIEludGVsIFBSTy9XaXJlbGVzcyAyMjAwQkcgTmV0d29yayAiCisJCQkgICAgICAgIkNvbm5lY3Rpb25cbiIpOworCisJCXByaXYtPmllZWUtPmFiZ190cnVlID0gMDsKKwkJYmFuZCA9IElFRUU4MDIxMV8yNEdIWl9CQU5EOworCQltb2R1bGF0aW9uID0gSUVFRTgwMjExX09GRE1fTU9EVUxBVElPTiB8CisJCSAgICBJRUVFODAyMTFfQ0NLX01PRFVMQVRJT047CisJCXByaXYtPmFkYXB0ZXIgPSBJUFdfMjIwMEJHOworCQlwcml2LT5pZWVlLT5tb2RlID0gSUVFRV9HIHwgSUVFRV9COwogCX0KIAotCWlmIChwcml2LT5pZWVlLT5mcmVxX2JhbmQgJiBJRUVFODAyMTFfNTJHSFpfQkFORCkgewotCQlpbnQgc3RhcnQgPSBjaGFubmVsX2luZGV4OwotCQlmb3IgKGkgPSAwOyBpIDwgTUFYX0FfQ0hBTk5FTFM7IGkrKykgewotCQkJaWYgKGJhbmRfYV9hY3RpdmVfY2hhbm5lbFtpXSA9PSAwKQotCQkJCWJyZWFrOwotCQkJaWYgKChwcml2LT5zdGF0dXMgJiBTVEFUVVNfQVNTT0NJQVRFRCkgJiYKLQkJCSAgICBiYW5kX2FfYWN0aXZlX2NoYW5uZWxbaV0gPT0gcHJpdi0+Y2hhbm5lbCkKLQkJCQljb250aW51ZTsKLQkJCWNoYW5uZWxfaW5kZXgrKzsKLQkJCXNjYW4uY2hhbm5lbHNfbGlzdFtjaGFubmVsX2luZGV4XSA9Ci0JCQkgICAgYmFuZF9hX2FjdGl2ZV9jaGFubmVsW2ldOwotCQkJaXB3X3NldF9zY2FuX3R5cGUoJnNjYW4sIGNoYW5uZWxfaW5kZXgsIHNjYW5fdHlwZSk7Ci0JCX0KKwlwcml2LT5pZWVlLT5mcmVxX2JhbmQgPSBiYW5kOworCXByaXYtPmllZWUtPm1vZHVsYXRpb24gPSBtb2R1bGF0aW9uOwogCi0JCWlmIChzdGFydCAhPSBjaGFubmVsX2luZGV4KSB7Ci0JCQlzY2FuLmNoYW5uZWxzX2xpc3Rbc3RhcnRdID0gKHU4KSAoSVBXX0FfTU9ERSA8PCA2KSB8Ci0JCQkgICAgKGNoYW5uZWxfaW5kZXggLSBzdGFydCk7Ci0JCQljaGFubmVsX2luZGV4Kys7Ci0JCX0KLQl9CisJcHJpdi0+cmF0ZXNfbWFzayA9IElFRUU4MDIxMV9ERUZBVUxUX1JBVEVTX01BU0s7CiAKLQlpZiAocHJpdi0+aWVlZS0+ZnJlcV9iYW5kICYgSUVFRTgwMjExXzI0R0haX0JBTkQpIHsKLQkJaW50IHN0YXJ0ID0gY2hhbm5lbF9pbmRleDsKLQkJZm9yIChpID0gMDsgaSA8IE1BWF9CX0NIQU5ORUxTOyBpKyspIHsKLQkJCWlmIChiYW5kX2JfYWN0aXZlX2NoYW5uZWxbaV0gPT0gMCkKLQkJCQlicmVhazsKLQkJCWlmICgocHJpdi0+c3RhdHVzICYgU1RBVFVTX0FTU09DSUFURUQpICYmCi0JCQkgICAgYmFuZF9iX2FjdGl2ZV9jaGFubmVsW2ldID09IHByaXYtPmNoYW5uZWwpCi0JCQkJY29udGludWU7Ci0JCQljaGFubmVsX2luZGV4Kys7Ci0JCQlzY2FuLmNoYW5uZWxzX2xpc3RbY2hhbm5lbF9pbmRleF0gPQotCQkJICAgIGJhbmRfYl9hY3RpdmVfY2hhbm5lbFtpXTsKLQkJCWlwd19zZXRfc2Nhbl90eXBlKCZzY2FuLCBjaGFubmVsX2luZGV4LCBzY2FuX3R5cGUpOwotCQl9CisJcHJpdi0+ZGlzYXNzb2NpYXRlX3RocmVzaG9sZCA9IElQV19NQl9ESVNBU1NPQ0lBVEVfVEhSRVNIT0xEX0RFRkFVTFQ7CisJcHJpdi0+cm9hbWluZ190aHJlc2hvbGQgPSBJUFdfTUJfUk9BTUlOR19USFJFU0hPTERfREVGQVVMVDsKIAotCQlpZiAoc3RhcnQgIT0gY2hhbm5lbF9pbmRleCkgewotCQkJc2Nhbi5jaGFubmVsc19saXN0W3N0YXJ0XSA9ICh1OCkgKElQV19CX01PREUgPDwgNikgfAotCQkJICAgIChjaGFubmVsX2luZGV4IC0gc3RhcnQpOwotCQl9Ci0JfQorCXByaXYtPnJ0c190aHJlc2hvbGQgPSBERUZBVUxUX1JUU19USFJFU0hPTEQ7CisJcHJpdi0+c2hvcnRfcmV0cnlfbGltaXQgPSBERUZBVUxUX1NIT1JUX1JFVFJZX0xJTUlUOworCXByaXYtPmxvbmdfcmV0cnlfbGltaXQgPSBERUZBVUxUX0xPTkdfUkVUUllfTElNSVQ7CiAKLQllcnIgPSBpcHdfc2VuZF9zY2FuX3JlcXVlc3RfZXh0KHByaXYsICZzY2FuKTsKLQlpZiAoZXJyKSB7Ci0JCUlQV19ERUJVR19IQygiU2VuZGluZyBzY2FuIGNvbW1hbmQgZmFpbGVkOiAlMDhYXG4iLCBlcnIpOwotCQlyZXR1cm4gLUVJTzsKLQl9CisJLyogSWYgcG93ZXIgbWFuYWdlbWVudCBpcyB0dXJuZWQgb24sIGRlZmF1bHQgdG8gQUMgbW9kZSAqLworCXByaXYtPnBvd2VyX21vZGUgPSBJUFdfUE9XRVJfQUM7CisJcHJpdi0+dHhfcG93ZXIgPSBJUFdfVFhfUE9XRVJfREVGQVVMVDsKIAotCXByaXYtPnN0YXR1cyB8PSBTVEFUVVNfU0NBTk5JTkc7Ci0JcHJpdi0+c3RhdHVzICY9IH5TVEFUVVNfU0NBTl9QRU5ESU5HOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIG9sZF9tb2RlID09IHByaXYtPmllZWUtPml3X21vZGU7CiB9CiAKIC8qCkBAIC01MjQ3LDEyICs4MTI3LDE2IEBACiAJCQkgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKIAlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwotCWlmICghKHByaXYtPnN0YXR1cyAmIFNUQVRVU19BU1NPQ0lBVEVEKSkKKwlkb3duKCZwcml2LT5zZW0pOworCWlmIChwcml2LT5zdGF0dXMgJiBTVEFUVVNfUkZfS0lMTF9NQVNLKQorCQlzdHJjcHkod3JxdS0+bmFtZSwgInJhZGlvIG9mZiIpOworCWVsc2UgaWYgKCEocHJpdi0+c3RhdHVzICYgU1RBVFVTX0FTU09DSUFURUQpKQogCQlzdHJjcHkod3JxdS0+bmFtZSwgInVuYXNzb2NpYXRlZCIpOwogCWVsc2UKIAkJc25wcmludGYod3JxdS0+bmFtZSwgSUZOQU1TSVosICJJRUVFIDgwMi4xMSVjIiwKIAkJCSBpcHdfbW9kZXNbcHJpdi0+YXNzb2NfcmVxdWVzdC5pZWVlX21vZGVdKTsKIAlJUFdfREVCVUdfV1goIk5hbWU6ICVzXG4iLCB3cnF1LT5uYW1lKTsKKwl1cCgmcHJpdi0+c2VtKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTI2MSwxMyArODE0NSw5IEBACiAJaWYgKGNoYW5uZWwgPT0gMCkgewogCQlJUFdfREVCVUdfSU5GTygiU2V0dGluZyBjaGFubmVsIHRvIEFOWSAoMClcbiIpOwogCQlwcml2LT5jb25maWcgJj0gfkNGR19TVEFUSUNfQ0hBTk5FTDsKLQkJaWYgKCEocHJpdi0+c3RhdHVzICYgKFNUQVRVU19TQ0FOTklORyB8IFNUQVRVU19BU1NPQ0lBVEVEIHwKLQkJCQkgICAgICBTVEFUVVNfQVNTT0NJQVRJTkcpKSkgewotCQkJSVBXX0RFQlVHX0FTU09DKCJBdHRlbXB0aW5nIHRvIGFzc29jaWF0ZSB3aXRoIG5ldyAiCi0JCQkJCSJwYXJhbWV0ZXJzLlxuIik7Ci0JCQlpcHdfYXNzb2NpYXRlKHByaXYpOwotCQl9Ci0KKwkJSVBXX0RFQlVHX0FTU09DKCJBdHRlbXB0aW5nIHRvIGFzc29jaWF0ZSB3aXRoIG5ldyAiCisJCQkJInBhcmFtZXRlcnMuXG4iKTsKKwkJaXB3X2Fzc29jaWF0ZShwcml2KTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC01MjgyLDE0ICs4MTYyLDMyIEBACiAJSVBXX0RFQlVHX0lORk8oIlNldHRpbmcgY2hhbm5lbCB0byAlaVxuIiwgKGludCljaGFubmVsKTsKIAlwcml2LT5jaGFubmVsID0gY2hhbm5lbDsKIAotCS8qIElmIHdlIGFyZSBjdXJyZW50bHkgYXNzb2NpYXRlZCwgb3IgdHJ5aW5nIHRvIGFzc29jaWF0ZQotCSAqIHRoZW4gc2VlIGlmIHRoaXMgaXMgYSBuZXcgY2hhbm5lbCAoY2F1c2luZyB1cyB0byBkaXNhc3NvY2lhdGUpICovCi0JaWYgKHByaXYtPnN0YXR1cyAmIChTVEFUVVNfQVNTT0NJQVRFRCB8IFNUQVRVU19BU1NPQ0lBVElORykpIHsKLQkJSVBXX0RFQlVHX0FTU09DKCJEaXNhc3NvY2lhdGluZyBkdWUgdG8gY2hhbm5lbCBjaGFuZ2UuXG4iKTsKLQkJaXB3X2Rpc2Fzc29jaWF0ZShwcml2KTsKLQl9IGVsc2UgewotCQlpcHdfYXNzb2NpYXRlKHByaXYpOworI2lmZGVmIENPTkZJR19JUFcyMjAwX01PTklUT1IKKwlpZiAocHJpdi0+aWVlZS0+aXdfbW9kZSA9PSBJV19NT0RFX01PTklUT1IpIHsKKwkJaW50IGk7CisJCWlmIChwcml2LT5zdGF0dXMgJiBTVEFUVVNfU0NBTk5JTkcpIHsKKwkJCUlQV19ERUJVR19TQ0FOKCJTY2FuIGFib3J0IHRyaWdnZXJlZCBkdWUgdG8gIgorCQkJCSAgICAgICAiY2hhbm5lbCBjaGFuZ2UuXG4iKTsKKwkJCWlwd19hYm9ydF9zY2FuKHByaXYpOworCQl9CisKKwkJZm9yIChpID0gMTAwMDsgaSAmJiAocHJpdi0+c3RhdHVzICYgU1RBVFVTX1NDQU5OSU5HKTsgaS0tKQorCQkJdWRlbGF5KDEwKTsKKworCQlpZiAocHJpdi0+c3RhdHVzICYgU1RBVFVTX1NDQU5OSU5HKQorCQkJSVBXX0RFQlVHX1NDQU4oIlN0aWxsIHNjYW5uaW5nLi4uXG4iKTsKKwkJZWxzZQorCQkJSVBXX0RFQlVHX1NDQU4oIlRvb2sgJWRtcyB0byBhYm9ydCBjdXJyZW50IHNjYW5cbiIsCisJCQkJICAgICAgIDEwMDAgLSBpKTsKKworCQlyZXR1cm4gMDsKIAl9CisjZW5kaWYJCQkJLyogQ09ORklHX0lQVzIyMDBfTU9OSVRPUiAqLworCisJLyogTmV0d29yayBjb25maWd1cmF0aW9uIGNoYW5nZWQgLS0gZm9yY2UgW3JlXWFzc29jaWF0aW9uICovCisJSVBXX0RFQlVHX0FTU09DKCJbcmVdYXNzb2NpYXRpb24gdHJpZ2dlcmVkIGR1ZSB0byBjaGFubmVsIGNoYW5nZS5cbiIpOworCWlmICghaXB3X2Rpc2Fzc29jaWF0ZShwcml2KSkKKwkJaXB3X2Fzc29jaWF0ZShwcml2KTsKIAogCXJldHVybiAwOwogfQpAQCAtNTI5OSwyOSArODE5Nyw0OCBAQAogCQkJICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7CiAJc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2dlbyAqZ2VvID0gaXB3X2dldF9nZW8ocHJpdi0+aWVlZSk7CiAJc3RydWN0IGl3X2ZyZXEgKmZ3cnEgPSAmd3JxdS0+ZnJlcTsKKwlpbnQgcmV0ID0gMCwgaTsKKwl1OCBjaGFubmVsLCBmbGFnczsKKwlpbnQgYmFuZDsKIAorCWlmIChmd3JxLT5tID09IDApIHsKKwkJSVBXX0RFQlVHX1dYKCJTRVQgRnJlcS9DaGFubmVsIC0+IGFueVxuIik7CisJCWRvd24oJnByaXYtPnNlbSk7CisJCXJldCA9IGlwd19zZXRfY2hhbm5lbChwcml2LCAwKTsKKwkJdXAoJnByaXYtPnNlbSk7CisJCXJldHVybiByZXQ7CisJfQogCS8qIGlmIHNldHRpbmcgYnkgZnJlcSBjb252ZXJ0IHRvIGNoYW5uZWwgKi8KIAlpZiAoZndycS0+ZSA9PSAxKSB7Ci0JCWlmICgoZndycS0+bSA+PSAoaW50KTIuNDEyZTggJiYgZndycS0+bSA8PSAoaW50KTIuNDg3ZTgpKSB7Ci0JCQlpbnQgZiA9IGZ3cnEtPm0gLyAxMDAwMDA7Ci0JCQlpbnQgYyA9IDA7CisJCWNoYW5uZWwgPSBpcHdfZnJlcV90b19jaGFubmVsKHByaXYtPmllZWUsIGZ3cnEtPm0pOworCQlpZiAoY2hhbm5lbCA9PSAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfSBlbHNlCisJCWNoYW5uZWwgPSBmd3JxLT5tOwogCi0JCQl3aGlsZSAoKGMgPCBSRUdfTUFYX0NIQU5ORUwpICYmCi0JCQkgICAgICAgKGYgIT0gaXB3X2ZyZXF1ZW5jaWVzW2NdKSkKLQkJCQljKys7CisJaWYgKCEoYmFuZCA9IGlwd19pc192YWxpZF9jaGFubmVsKHByaXYtPmllZWUsIGNoYW5uZWwpKSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJCS8qIGhhY2sgdG8gZmFsbCB0aHJvdWdoICovCi0JCQlmd3JxLT5lID0gMDsKLQkJCWZ3cnEtPm0gPSBjICsgMTsKKwlpZiAocHJpdi0+aWVlZS0+aXdfbW9kZSA9PSBJV19NT0RFX0FESE9DKSB7CisJCWkgPSBpcHdfY2hhbm5lbF90b19pbmRleChwcml2LT5pZWVlLCBjaGFubmVsKTsKKwkJaWYgKGkgPT0gLTEpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlmbGFncyA9IChiYW5kID09IElFRUU4MDIxMV8yNEdIWl9CQU5EKSA/CisJCSAgICBnZW8tPmJnW2ldLmZsYWdzIDogZ2VvLT5hW2ldLmZsYWdzOworCQlpZiAoZmxhZ3MgJiBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZKSB7CisJCQlJUFdfREVCVUdfV1goIkludmFsaWQgQWQtSG9jIGNoYW5uZWwgZm9yIDgwMi4xMWFcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAl9CiAKLQlpZiAoZndycS0+ZSA+IDAgfHwgZndycS0+bSA+IDEwMDApCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQogCUlQV19ERUJVR19XWCgiU0VUIEZyZXEvQ2hhbm5lbCAtPiAlZCBcbiIsIGZ3cnEtPm0pOwotCXJldHVybiBpcHdfc2V0X2NoYW5uZWwocHJpdiwgKHU4KSBmd3JxLT5tKTsKKwlkb3duKCZwcml2LT5zZW0pOworCXJldCA9IGlwd19zZXRfY2hhbm5lbChwcml2LCBjaGFubmVsKTsKKwl1cCgmcHJpdi0+c2VtKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGlwd193eF9nZXRfZnJlcShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LApAQCAtNTMzNCwxMiArODI1MSwxNCBAQAogCiAJLyogSWYgd2UgYXJlIGFzc29jaWF0ZWQsIHRyeWluZyB0byBhc3NvY2lhdGUsIG9yIGhhdmUgYSBzdGF0aWNhbGx5CiAJICogY29uZmlndXJlZCBDSEFOTkVMIHRoZW4gcmV0dXJuIHRoYXQ7IG90aGVyd2lzZSByZXR1cm4gQU5ZICovCisJZG93bigmcHJpdi0+c2VtKTsKIAlpZiAocHJpdi0+Y29uZmlnICYgQ0ZHX1NUQVRJQ19DSEFOTkVMIHx8CiAJICAgIHByaXYtPnN0YXR1cyAmIChTVEFUVVNfQVNTT0NJQVRJTkcgfCBTVEFUVVNfQVNTT0NJQVRFRCkpCiAJCXdycXUtPmZyZXEubSA9IHByaXYtPmNoYW5uZWw7CiAJZWxzZQogCQl3cnF1LT5mcmVxLm0gPSAwOwogCisJdXAoJnByaXYtPnNlbSk7CiAJSVBXX0RFQlVHX1dYKCJHRVQgRnJlcS9DaGFubmVsIC0+ICVkIFxuIiwgcHJpdi0+Y2hhbm5lbCk7CiAJcmV0dXJuIDA7CiB9CkBAIC01MzUzLDExICs4MjcyLDggQEAKIAogCUlQV19ERUJVR19XWCgiU2V0IE1PREU6ICVkXG4iLCB3cnF1LT5tb2RlKTsKIAotCWlmICh3cnF1LT5tb2RlID09IHByaXYtPmllZWUtPml3X21vZGUpCi0JCXJldHVybiAwOwotCiAJc3dpdGNoICh3cnF1LT5tb2RlKSB7Ci0jaWZkZWYgQ09ORklHX0lQV19QUk9NSVNDCisjaWZkZWYgQ09ORklHX0lQVzIyMDBfTU9OSVRPUgogCWNhc2UgSVdfTU9ERV9NT05JVE9SOgogI2VuZGlmCiAJY2FzZSBJV19NT0RFX0FESE9DOgpAQCAtNTM2OSwzMSArODI4NSwzMyBAQAogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwogCX0KKwlpZiAod3JxdS0+bW9kZSA9PSBwcml2LT5pZWVlLT5pd19tb2RlKQorCQlyZXR1cm4gMDsKIAotI2lmZGVmIENPTkZJR19JUFdfUFJPTUlTQworCWRvd24oJnByaXYtPnNlbSk7CisKKwlpcHdfc3dfcmVzZXQocHJpdiwgMCk7CisKKyNpZmRlZiBDT05GSUdfSVBXMjIwMF9NT05JVE9SCiAJaWYgKHByaXYtPmllZWUtPml3X21vZGUgPT0gSVdfTU9ERV9NT05JVE9SKQogCQlwcml2LT5uZXRfZGV2LT50eXBlID0gQVJQSFJEX0VUSEVSOwogCiAJaWYgKHdycXUtPm1vZGUgPT0gSVdfTU9ERV9NT05JVE9SKQorI2lmZGVmIENPTkZJR19JRUVFODAyMTFfUkFESU9UQVAKKwkJcHJpdi0+bmV0X2Rldi0+dHlwZSA9IEFSUEhSRF9JRUVFODAyMTFfUkFESU9UQVA7CisjZWxzZQogCQlwcml2LT5uZXRfZGV2LT50eXBlID0gQVJQSFJEX0lFRUU4MDIxMTsKLSNlbmRpZgkJCQkvKiBDT05GSUdfSVBXX1BST01JU0MgKi8KKyNlbmRpZgorI2VuZGlmCQkJCS8qIENPTkZJR19JUFcyMjAwX01PTklUT1IgKi8KIAotI2lmZGVmIENPTkZJR19QTQogCS8qIEZyZWUgdGhlIGV4aXN0aW5nIGZpcm13YXJlIGFuZCByZXNldCB0aGUgZndfbG9hZGVkCiAJICogZmxhZyBzbyBpcHdfbG9hZCgpIHdpbGwgYnJpbmcgaW4gdGhlIG5ldyBmaXJtYXdyZSAqLwotCWlmIChmd19sb2FkZWQpIHsKLQkJZndfbG9hZGVkID0gMDsKLQl9Ci0KLQlyZWxlYXNlX2Zpcm13YXJlKGJvb3Rmdyk7Ci0JcmVsZWFzZV9maXJtd2FyZSh1Y29kZSk7Ci0JcmVsZWFzZV9maXJtd2FyZShmaXJtd2FyZSk7Ci0JYm9vdGZ3ID0gdWNvZGUgPSBmaXJtd2FyZSA9IE5VTEw7Ci0jZW5kaWYKKwlmcmVlX2Zpcm13YXJlKCk7CiAKIAlwcml2LT5pZWVlLT5pd19tb2RlID0gd3JxdS0+bW9kZTsKLQlpcHdfYWRhcHRlcl9yZXN0YXJ0KHByaXYpOwogCisJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5hZGFwdGVyX3Jlc3RhcnQpOworCXVwKCZwcml2LT5zZW0pOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTU0MDIsMjAgKzgzMjAsMTMgQEAKIAkJCSAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewogCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7Ci0KKwlkb3duKCZwcml2LT5zZW0pOwogCXdycXUtPm1vZGUgPSBwcml2LT5pZWVlLT5pd19tb2RlOwogCUlQV19ERUJVR19XWCgiR2V0IE1PREUgLT4gJWRcbiIsIHdycXUtPm1vZGUpOwotCisJdXAoJnByaXYtPnNlbSk7CiAJcmV0dXJuIDA7CiB9CiAKLSNkZWZpbmUgREVGQVVMVF9SVFNfVEhSRVNIT0xEICAgICAyMzA0VQotI2RlZmluZSBNSU5fUlRTX1RIUkVTSE9MRCAgICAgICAgIDFVCi0jZGVmaW5lIE1BWF9SVFNfVEhSRVNIT0xEICAgICAgICAgMjMwNFUKLSNkZWZpbmUgREVGQVVMVF9CRUFDT05fSU5URVJWQUwgICAxMDBVCi0jZGVmaW5lCURFRkFVTFRfU0hPUlRfUkVUUllfTElNSVQgN1UKLSNkZWZpbmUJREVGQVVMVF9MT05HX1JFVFJZX0xJTUlUICA0VQotCiAvKiBWYWx1ZXMgYXJlIGluIG1pY3Jvc2Vjb25kICovCiBzdGF0aWMgY29uc3QgczMyIHRpbWVvdXRfZHVyYXRpb25bXSA9IHsKIAkzNTAwMDAsCkBAIC01NDM5LDggKzgzNTAsOCBAQAogewogCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CiAJc3RydWN0IGl3X3JhbmdlICpyYW5nZSA9IChzdHJ1Y3QgaXdfcmFuZ2UgKilleHRyYTsKLQl1MTYgdmFsOwotCWludCBpOworCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfZ2VvICpnZW8gPSBpcHdfZ2V0X2dlbyhwcml2LT5pZWVlKTsKKwlpbnQgaSA9IDAsIGo7CiAKIAl3cnF1LT5kYXRhLmxlbmd0aCA9IHNpemVvZigqcmFuZ2UpOwogCW1lbXNldChyYW5nZSwgMCwgc2l6ZW9mKCpyYW5nZSkpOwpAQCAtNTQ1MSw3ICs4MzYyLDcgQEAKIAlyYW5nZS0+bWF4X3F1YWwucXVhbCA9IDEwMDsKIAkvKiBUT0RPOiBGaW5kIHJlYWwgbWF4IFJTU0kgYW5kIHN0aWNrIGhlcmUgKi8KIAlyYW5nZS0+bWF4X3F1YWwubGV2ZWwgPSAwOwotCXJhbmdlLT5tYXhfcXVhbC5ub2lzZSA9IDA7CisJcmFuZ2UtPm1heF9xdWFsLm5vaXNlID0gcHJpdi0+aWVlZS0+d29yc3RfcnNzaSArIDB4MTAwOwogCXJhbmdlLT5tYXhfcXVhbC51cGRhdGVkID0gNzsJLyogVXBkYXRlZCBhbGwgdGhyZWUgKi8KIAogCXJhbmdlLT5hdmdfcXVhbC5xdWFsID0gNzA7CkBAIC01NDU5LDcgKzgzNzAsNyBAQAogCXJhbmdlLT5hdmdfcXVhbC5sZXZlbCA9IDA7CS8qIEZJWE1FIHRvIHJlYWwgYXZlcmFnZSBsZXZlbCAqLwogCXJhbmdlLT5hdmdfcXVhbC5ub2lzZSA9IDA7CiAJcmFuZ2UtPmF2Z19xdWFsLnVwZGF0ZWQgPSA3OwkvKiBVcGRhdGVkIGFsbCB0aHJlZSAqLwotCisJZG93bigmcHJpdi0+c2VtKTsKIAlyYW5nZS0+bnVtX2JpdHJhdGVzID0gbWluKHByaXYtPnJhdGVzLm51bV9yYXRlcywgKHU4KSBJV19NQVhfQklUUkFURVMpOwogCiAJZm9yIChpID0gMDsgaSA8IHJhbmdlLT5udW1fYml0cmF0ZXM7IGkrKykKQEAgLTU0NzksMTkgKzgzOTAsMzUgQEAKIAlyYW5nZS0+d2VfdmVyc2lvbl9jb21waWxlZCA9IFdJUkVMRVNTX0VYVDsKIAlyYW5nZS0+d2VfdmVyc2lvbl9zb3VyY2UgPSAxNjsKIAotCXJhbmdlLT5udW1fY2hhbm5lbHMgPSBGUkVRX0NPVU5UOwotCi0JdmFsID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgRlJFUV9DT1VOVDsgaSsrKSB7Ci0JCXJhbmdlLT5mcmVxW3ZhbF0uaSA9IGkgKyAxOwotCQlyYW5nZS0+ZnJlcVt2YWxdLm0gPSBpcHdfZnJlcXVlbmNpZXNbaV0gKiAxMDAwMDA7Ci0JCXJhbmdlLT5mcmVxW3ZhbF0uZSA9IDE7Ci0JCXZhbCsrOwotCi0JCWlmICh2YWwgPT0gSVdfTUFYX0ZSRVFVRU5DSUVTKQotCQkJYnJlYWs7CisJaSA9IDA7CisJaWYgKHByaXYtPmllZWUtPm1vZGUgJiAoSUVFRV9CIHwgSUVFRV9HKSkgeworCQlmb3IgKGogPSAwOyBqIDwgZ2VvLT5iZ19jaGFubmVscyAmJiBpIDwgSVdfTUFYX0ZSRVFVRU5DSUVTOworCQkgICAgIGkrKywgaisrKSB7CisJCQlyYW5nZS0+ZnJlcVtpXS5pID0gZ2VvLT5iZ1tqXS5jaGFubmVsOworCQkJcmFuZ2UtPmZyZXFbaV0ubSA9IGdlby0+Ymdbal0uZnJlcSAqIDEwMDAwMDsKKwkJCXJhbmdlLT5mcmVxW2ldLmUgPSAxOworCQl9CiAJfQotCXJhbmdlLT5udW1fZnJlcXVlbmN5ID0gdmFsOworCisJaWYgKHByaXYtPmllZWUtPm1vZGUgJiBJRUVFX0EpIHsKKwkJZm9yIChqID0gMDsgaiA8IGdlby0+YV9jaGFubmVscyAmJiBpIDwgSVdfTUFYX0ZSRVFVRU5DSUVTOworCQkgICAgIGkrKywgaisrKSB7CisJCQlyYW5nZS0+ZnJlcVtpXS5pID0gZ2VvLT5hW2pdLmNoYW5uZWw7CisJCQlyYW5nZS0+ZnJlcVtpXS5tID0gZ2VvLT5hW2pdLmZyZXEgKiAxMDAwMDA7CisJCQlyYW5nZS0+ZnJlcVtpXS5lID0gMTsKKwkJfQorCX0KKworCXJhbmdlLT5udW1fY2hhbm5lbHMgPSBpOworCXJhbmdlLT5udW1fZnJlcXVlbmN5ID0gaTsKKworCXVwKCZwcml2LT5zZW0pOworCisJLyogRXZlbnQgY2FwYWJpbGl0eSAoa2VybmVsICsgZHJpdmVyKSAqLworCXJhbmdlLT5ldmVudF9jYXBhWzBdID0gKElXX0VWRU5UX0NBUEFfS18wIHwKKwkJCQlJV19FVkVOVF9DQVBBX01BU0soU0lPQ0dJV1RIUlNQWSkgfAorCQkJCUlXX0VWRU5UX0NBUEFfTUFTSyhTSU9DR0lXQVApKTsKKwlyYW5nZS0+ZXZlbnRfY2FwYVsxXSA9IElXX0VWRU5UX0NBUEFfS18xOwogCiAJSVBXX0RFQlVHX1dYKCJHRVQgUmFuZ2VcbiIpOwogCXJldHVybiAwOwpAQCAtNTUxMiwyNSArODQzOSwyMyBAQAogCiAJaWYgKHdycXUtPmFwX2FkZHIuc2FfZmFtaWx5ICE9IEFSUEhSRF9FVEhFUikKIAkJcmV0dXJuIC1FSU5WQUw7Ci0KKwlkb3duKCZwcml2LT5zZW0pOwogCWlmICghbWVtY21wKGFueSwgd3JxdS0+YXBfYWRkci5zYV9kYXRhLCBFVEhfQUxFTikgfHwKIAkgICAgIW1lbWNtcChvZmYsIHdycXUtPmFwX2FkZHIuc2FfZGF0YSwgRVRIX0FMRU4pKSB7CiAJCS8qIHdlIGRpc2FibGUgbWFuZGF0b3J5IEJTU0lEIGFzc29jaWF0aW9uICovCiAJCUlQV19ERUJVR19XWCgiU2V0dGluZyBBUCBCU1NJRCB0byBBTllcbiIpOwogCQlwcml2LT5jb25maWcgJj0gfkNGR19TVEFUSUNfQlNTSUQ7Ci0JCWlmICghKHByaXYtPnN0YXR1cyAmIChTVEFUVVNfU0NBTk5JTkcgfCBTVEFUVVNfQVNTT0NJQVRFRCB8Ci0JCQkJICAgICAgU1RBVFVTX0FTU09DSUFUSU5HKSkpIHsKLQkJCUlQV19ERUJVR19BU1NPQygiQXR0ZW1wdGluZyB0byBhc3NvY2lhdGUgd2l0aCBuZXcgIgotCQkJCQkicGFyYW1ldGVycy5cbiIpOwotCQkJaXB3X2Fzc29jaWF0ZShwcml2KTsKLQkJfQotCisJCUlQV19ERUJVR19BU1NPQygiQXR0ZW1wdGluZyB0byBhc3NvY2lhdGUgd2l0aCBuZXcgIgorCQkJCSJwYXJhbWV0ZXJzLlxuIik7CisJCWlwd19hc3NvY2lhdGUocHJpdik7CisJCXVwKCZwcml2LT5zZW0pOwogCQlyZXR1cm4gMDsKIAl9CiAKIAlwcml2LT5jb25maWcgfD0gQ0ZHX1NUQVRJQ19CU1NJRDsKIAlpZiAoIW1lbWNtcChwcml2LT5ic3NpZCwgd3JxdS0+YXBfYWRkci5zYV9kYXRhLCBFVEhfQUxFTikpIHsKIAkJSVBXX0RFQlVHX1dYKCJCU1NJRCBzZXQgdG8gY3VycmVudCBCU1NJRC5cbiIpOworCQl1cCgmcHJpdi0+c2VtKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC01NTM5LDE1ICs4NDY0LDEyIEBACiAKIAltZW1jcHkocHJpdi0+YnNzaWQsIHdycXUtPmFwX2FkZHIuc2FfZGF0YSwgRVRIX0FMRU4pOwogCi0JLyogSWYgd2UgYXJlIGN1cnJlbnRseSBhc3NvY2lhdGVkLCBvciB0cnlpbmcgdG8gYXNzb2NpYXRlCi0JICogdGhlbiBzZWUgaWYgdGhpcyBpcyBhIG5ldyBCU1NJRCAoY2F1c2luZyB1cyB0byBkaXNhc3NvY2lhdGUpICovCi0JaWYgKHByaXYtPnN0YXR1cyAmIChTVEFUVVNfQVNTT0NJQVRFRCB8IFNUQVRVU19BU1NPQ0lBVElORykpIHsKLQkJSVBXX0RFQlVHX0FTU09DKCJEaXNhc3NvY2lhdGluZyBkdWUgdG8gQlNTSUQgY2hhbmdlLlxuIik7Ci0JCWlwd19kaXNhc3NvY2lhdGUocHJpdik7Ci0JfSBlbHNlIHsKKwkvKiBOZXR3b3JrIGNvbmZpZ3VyYXRpb24gY2hhbmdlZCAtLSBmb3JjZSBbcmVdYXNzb2NpYXRpb24gKi8KKwlJUFdfREVCVUdfQVNTT0MoIltyZV1hc3NvY2lhdGlvbiB0cmlnZ2VyZWQgZHVlIHRvIEJTU0lEIGNoYW5nZS5cbiIpOworCWlmICghaXB3X2Rpc2Fzc29jaWF0ZShwcml2KSkKIAkJaXB3X2Fzc29jaWF0ZShwcml2KTsKLQl9CiAKKwl1cCgmcHJpdi0+c2VtKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTU1OCwxNSArODQ4MCwxNyBAQAogCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CiAJLyogSWYgd2UgYXJlIGFzc29jaWF0ZWQsIHRyeWluZyB0byBhc3NvY2lhdGUsIG9yIGhhdmUgYSBzdGF0aWNhbGx5CiAJICogY29uZmlndXJlZCBCU1NJRCB0aGVuIHJldHVybiB0aGF0OyBvdGhlcndpc2UgcmV0dXJuIEFOWSAqLworCWRvd24oJnByaXYtPnNlbSk7CiAJaWYgKHByaXYtPmNvbmZpZyAmIENGR19TVEFUSUNfQlNTSUQgfHwKIAkgICAgcHJpdi0+c3RhdHVzICYgKFNUQVRVU19BU1NPQ0lBVEVEIHwgU1RBVFVTX0FTU09DSUFUSU5HKSkgewogCQl3cnF1LT5hcF9hZGRyLnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKLQkJbWVtY3B5KHdycXUtPmFwX2FkZHIuc2FfZGF0YSwgJnByaXYtPmJzc2lkLCBFVEhfQUxFTik7CisJCW1lbWNweSh3cnF1LT5hcF9hZGRyLnNhX2RhdGEsIHByaXYtPmJzc2lkLCBFVEhfQUxFTik7CiAJfSBlbHNlCiAJCW1lbXNldCh3cnF1LT5hcF9hZGRyLnNhX2RhdGEsIDAsIEVUSF9BTEVOKTsKIAogCUlQV19ERUJVR19XWCgiR2V0dGluZyBXQVAgQlNTSUQ6ICIgTUFDX0ZNVCAiXG4iLAogCQkgICAgIE1BQ19BUkcod3JxdS0+YXBfYWRkci5zYV9kYXRhKSk7CisJdXAoJnByaXYtPnNlbSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTU1NzcsMjEgKzg1MDEsMjIgQEAKIAlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwogCWNoYXIgKmVzc2lkID0gIiI7CS8qIEFOWSAqLwogCWludCBsZW5ndGggPSAwOwotCisJZG93bigmcHJpdi0+c2VtKTsKIAlpZiAod3JxdS0+ZXNzaWQuZmxhZ3MgJiYgd3JxdS0+ZXNzaWQubGVuZ3RoKSB7CiAJCWxlbmd0aCA9IHdycXUtPmVzc2lkLmxlbmd0aCAtIDE7CiAJCWVzc2lkID0gZXh0cmE7CiAJfQogCWlmIChsZW5ndGggPT0gMCkgewogCQlJUFdfREVCVUdfV1goIlNldHRpbmcgRVNTSUQgdG8gQU5ZXG4iKTsKLQkJcHJpdi0+Y29uZmlnICY9IH5DRkdfU1RBVElDX0VTU0lEOwotCQlpZiAoIShwcml2LT5zdGF0dXMgJiAoU1RBVFVTX1NDQU5OSU5HIHwgU1RBVFVTX0FTU09DSUFURUQgfAorCQlpZiAoKHByaXYtPmNvbmZpZyAmIENGR19TVEFUSUNfRVNTSUQpICYmCisJCSAgICAhKHByaXYtPnN0YXR1cyAmIChTVEFUVVNfQVNTT0NJQVRFRCB8CiAJCQkJICAgICAgU1RBVFVTX0FTU09DSUFUSU5HKSkpIHsKIAkJCUlQV19ERUJVR19BU1NPQygiQXR0ZW1wdGluZyB0byBhc3NvY2lhdGUgd2l0aCBuZXcgIgogCQkJCQkicGFyYW1ldGVycy5cbiIpOworCQkJcHJpdi0+Y29uZmlnICY9IH5DRkdfU1RBVElDX0VTU0lEOwogCQkJaXB3X2Fzc29jaWF0ZShwcml2KTsKIAkJfQotCisJCXVwKCZwcml2LT5zZW0pOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTU2MDEsNiArODUyNiw3IEBACiAKIAlpZiAocHJpdi0+ZXNzaWRfbGVuID09IGxlbmd0aCAmJiAhbWVtY21wKHByaXYtPmVzc2lkLCBleHRyYSwgbGVuZ3RoKSkgewogCQlJUFdfREVCVUdfV1goIkVTU0lEIHNldCB0byBjdXJyZW50IEVTU0lELlxuIik7CisJCXVwKCZwcml2LT5zZW0pOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTU2MTAsMTUgKzg1MzYsMTIgQEAKIAlwcml2LT5lc3NpZF9sZW4gPSBsZW5ndGg7CiAJbWVtY3B5KHByaXYtPmVzc2lkLCBlc3NpZCwgcHJpdi0+ZXNzaWRfbGVuKTsKIAotCS8qIElmIHdlIGFyZSBjdXJyZW50bHkgYXNzb2NpYXRlZCwgb3IgdHJ5aW5nIHRvIGFzc29jaWF0ZQotCSAqIHRoZW4gc2VlIGlmIHRoaXMgaXMgYSBuZXcgRVNTSUQgKGNhdXNpbmcgdXMgdG8gZGlzYXNzb2NpYXRlKSAqLwotCWlmIChwcml2LT5zdGF0dXMgJiAoU1RBVFVTX0FTU09DSUFURUQgfCBTVEFUVVNfQVNTT0NJQVRJTkcpKSB7Ci0JCUlQV19ERUJVR19BU1NPQygiRGlzYXNzb2NpYXRpbmcgZHVlIHRvIEVTU0lEIGNoYW5nZS5cbiIpOwotCQlpcHdfZGlzYXNzb2NpYXRlKHByaXYpOwotCX0gZWxzZSB7CisJLyogTmV0d29yayBjb25maWd1cmF0aW9uIGNoYW5nZWQgLS0gZm9yY2UgW3JlXWFzc29jaWF0aW9uICovCisJSVBXX0RFQlVHX0FTU09DKCJbcmVdYXNzb2NpYXRpb24gdHJpZ2dlcmVkIGR1ZSB0byBFU1NJRCBjaGFuZ2UuXG4iKTsKKwlpZiAoIWlwd19kaXNhc3NvY2lhdGUocHJpdikpCiAJCWlwd19hc3NvY2lhdGUocHJpdik7Ci0JfQogCisJdXAoJnByaXYtPnNlbSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTU2MzAsNiArODU1Myw3IEBACiAKIAkvKiBJZiB3ZSBhcmUgYXNzb2NpYXRlZCwgdHJ5aW5nIHRvIGFzc29jaWF0ZSwgb3IgaGF2ZSBhIHN0YXRpY2FsbHkKIAkgKiBjb25maWd1cmVkIEVTU0lEIHRoZW4gcmV0dXJuIHRoYXQ7IG90aGVyd2lzZSByZXR1cm4gQU5ZICovCisJZG93bigmcHJpdi0+c2VtKTsKIAlpZiAocHJpdi0+Y29uZmlnICYgQ0ZHX1NUQVRJQ19FU1NJRCB8fAogCSAgICBwcml2LT5zdGF0dXMgJiAoU1RBVFVTX0FTU09DSUFURUQgfCBTVEFUVVNfQVNTT0NJQVRJTkcpKSB7CiAJCUlQV19ERUJVR19XWCgiR2V0dGluZyBlc3NpZDogJyVzJ1xuIiwKQEAgLTU2NDIsNyArODU2Niw3IEBACiAJCXdycXUtPmVzc2lkLmxlbmd0aCA9IDA7CiAJCXdycXUtPmVzc2lkLmZsYWdzID0gMDsJLyogYWN0aXZlICovCiAJfQotCisJdXAoJnByaXYtPnNlbSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTU2NTUsMTEgKzg1NzksMTIgQEAKIAlJUFdfREVCVUdfV1goIlNldHRpbmcgbmljayB0byAnJXMnXG4iLCBleHRyYSk7CiAJaWYgKHdycXUtPmRhdGEubGVuZ3RoID4gSVdfRVNTSURfTUFYX1NJWkUpCiAJCXJldHVybiAtRTJCSUc7Ci0KKwlkb3duKCZwcml2LT5zZW0pOwogCXdycXUtPmRhdGEubGVuZ3RoID0gbWluKChzaXplX3QpIHdycXUtPmRhdGEubGVuZ3RoLCBzaXplb2YocHJpdi0+bmljaykpOwogCW1lbXNldChwcml2LT5uaWNrLCAwLCBzaXplb2YocHJpdi0+bmljaykpOwogCW1lbWNweShwcml2LT5uaWNrLCBleHRyYSwgd3JxdS0+ZGF0YS5sZW5ndGgpOwogCUlQV19ERUJVR19UUkFDRSgiPDxcbiIpOworCXVwKCZwcml2LT5zZW0pOwogCXJldHVybiAwOwogCiB9CkBAIC01NjcwLDkgKzg1OTUsMTEgQEAKIHsKIAlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwogCUlQV19ERUJVR19XWCgiR2V0dGluZyBuaWNrXG4iKTsKKwlkb3duKCZwcml2LT5zZW0pOwogCXdycXUtPmRhdGEubGVuZ3RoID0gc3RybGVuKHByaXYtPm5pY2spICsgMTsKIAltZW1jcHkoZXh0cmEsIHByaXYtPm5pY2ssIHdycXUtPmRhdGEubGVuZ3RoKTsKIAl3cnF1LT5kYXRhLmZsYWdzID0gMTsJLyogYWN0aXZlICovCisJdXAoJnByaXYtPnNlbSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTU2ODAsOCArODYwNywxMTMgQEAKIAkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKLQlJUFdfREVCVUdfV1goIjB4JXAsIDB4JXAsIDB4JXBcbiIsIGRldiwgaW5mbywgd3JxdSk7Ci0JcmV0dXJuIC1FT1BOT1RTVVBQOworCS8qIFRPRE86IFdlIHNob3VsZCB1c2Ugc2VtYXBob3JlcyBvciBsb2NrcyBmb3IgYWNjZXNzIHRvIHByaXYgKi8KKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXUzMiB0YXJnZXRfcmF0ZSA9IHdycXUtPmJpdHJhdGUudmFsdWU7CisJdTMyIGZpeGVkLCBtYXNrOworCisJLyogdmFsdWUgPSAtMSwgZml4ZWQgPSAwIG1lYW5zIGF1dG8gb25seSwgc28gd2Ugc2hvdWxkIHVzZSBhbGwgcmF0ZXMgb2ZmZXJlZCBieSBBUCAqLworCS8qIHZhbHVlID0gWCwgZml4ZWQgPSAxIG1lYW5zIG9ubHkgcmF0ZSBYICovCisJLyogdmFsdWUgPSBYLCBmaXhlZCA9IDAgbWVhbnMgYWxsIHJhdGVzIGxvd2VyIGVxdWFsIFggKi8KKworCWlmICh0YXJnZXRfcmF0ZSA9PSAtMSkgeworCQlmaXhlZCA9IDA7CisJCW1hc2sgPSBJRUVFODAyMTFfREVGQVVMVF9SQVRFU19NQVNLOworCQkvKiBOb3cgd2Ugc2hvdWxkIHJlYXNzb2NpYXRlICovCisJCWdvdG8gYXBwbHk7CisJfQorCisJbWFzayA9IDA7CisJZml4ZWQgPSB3cnF1LT5iaXRyYXRlLmZpeGVkOworCisJaWYgKHRhcmdldF9yYXRlID09IDEwMDAwMDAgfHwgIWZpeGVkKQorCQltYXNrIHw9IElFRUU4MDIxMV9DQ0tfUkFURV8xTUJfTUFTSzsKKwlpZiAodGFyZ2V0X3JhdGUgPT0gMTAwMDAwMCkKKwkJZ290byBhcHBseTsKKworCWlmICh0YXJnZXRfcmF0ZSA9PSAyMDAwMDAwIHx8ICFmaXhlZCkKKwkJbWFzayB8PSBJRUVFODAyMTFfQ0NLX1JBVEVfMk1CX01BU0s7CisJaWYgKHRhcmdldF9yYXRlID09IDIwMDAwMDApCisJCWdvdG8gYXBwbHk7CisKKwlpZiAodGFyZ2V0X3JhdGUgPT0gNTUwMDAwMCB8fCAhZml4ZWQpCisJCW1hc2sgfD0gSUVFRTgwMjExX0NDS19SQVRFXzVNQl9NQVNLOworCWlmICh0YXJnZXRfcmF0ZSA9PSA1NTAwMDAwKQorCQlnb3RvIGFwcGx5OworCisJaWYgKHRhcmdldF9yYXRlID09IDYwMDAwMDAgfHwgIWZpeGVkKQorCQltYXNrIHw9IElFRUU4MDIxMV9PRkRNX1JBVEVfNk1CX01BU0s7CisJaWYgKHRhcmdldF9yYXRlID09IDYwMDAwMDApCisJCWdvdG8gYXBwbHk7CisKKwlpZiAodGFyZ2V0X3JhdGUgPT0gOTAwMDAwMCB8fCAhZml4ZWQpCisJCW1hc2sgfD0gSUVFRTgwMjExX09GRE1fUkFURV85TUJfTUFTSzsKKwlpZiAodGFyZ2V0X3JhdGUgPT0gOTAwMDAwMCkKKwkJZ290byBhcHBseTsKKworCWlmICh0YXJnZXRfcmF0ZSA9PSAxMTAwMDAwMCB8fCAhZml4ZWQpCisJCW1hc2sgfD0gSUVFRTgwMjExX0NDS19SQVRFXzExTUJfTUFTSzsKKwlpZiAodGFyZ2V0X3JhdGUgPT0gMTEwMDAwMDApCisJCWdvdG8gYXBwbHk7CisKKwlpZiAodGFyZ2V0X3JhdGUgPT0gMTIwMDAwMDAgfHwgIWZpeGVkKQorCQltYXNrIHw9IElFRUU4MDIxMV9PRkRNX1JBVEVfMTJNQl9NQVNLOworCWlmICh0YXJnZXRfcmF0ZSA9PSAxMjAwMDAwMCkKKwkJZ290byBhcHBseTsKKworCWlmICh0YXJnZXRfcmF0ZSA9PSAxODAwMDAwMCB8fCAhZml4ZWQpCisJCW1hc2sgfD0gSUVFRTgwMjExX09GRE1fUkFURV8xOE1CX01BU0s7CisJaWYgKHRhcmdldF9yYXRlID09IDE4MDAwMDAwKQorCQlnb3RvIGFwcGx5OworCisJaWYgKHRhcmdldF9yYXRlID09IDI0MDAwMDAwIHx8ICFmaXhlZCkKKwkJbWFzayB8PSBJRUVFODAyMTFfT0ZETV9SQVRFXzI0TUJfTUFTSzsKKwlpZiAodGFyZ2V0X3JhdGUgPT0gMjQwMDAwMDApCisJCWdvdG8gYXBwbHk7CisKKwlpZiAodGFyZ2V0X3JhdGUgPT0gMzYwMDAwMDAgfHwgIWZpeGVkKQorCQltYXNrIHw9IElFRUU4MDIxMV9PRkRNX1JBVEVfMzZNQl9NQVNLOworCWlmICh0YXJnZXRfcmF0ZSA9PSAzNjAwMDAwMCkKKwkJZ290byBhcHBseTsKKworCWlmICh0YXJnZXRfcmF0ZSA9PSA0ODAwMDAwMCB8fCAhZml4ZWQpCisJCW1hc2sgfD0gSUVFRTgwMjExX09GRE1fUkFURV80OE1CX01BU0s7CisJaWYgKHRhcmdldF9yYXRlID09IDQ4MDAwMDAwKQorCQlnb3RvIGFwcGx5OworCisJaWYgKHRhcmdldF9yYXRlID09IDU0MDAwMDAwIHx8ICFmaXhlZCkKKwkJbWFzayB8PSBJRUVFODAyMTFfT0ZETV9SQVRFXzU0TUJfTUFTSzsKKwlpZiAodGFyZ2V0X3JhdGUgPT0gNTQwMDAwMDApCisJCWdvdG8gYXBwbHk7CisKKwlJUFdfREVCVUdfV1goImludmFsaWQgcmF0ZSBzcGVjaWZpZWQsIHJldHVybmluZyBlcnJvclxuIik7CisJcmV0dXJuIC1FSU5WQUw7CisKKyAgICAgIGFwcGx5OgorCUlQV19ERUJVR19XWCgiU2V0dGluZyByYXRlIG1hc2sgdG8gMHglMDhYIFslc11cbiIsCisJCSAgICAgbWFzaywgZml4ZWQgPyAiZml4ZWQiIDogInN1Yi1yYXRlcyIpOworCWRvd24oJnByaXYtPnNlbSk7CisJaWYgKG1hc2sgPT0gSUVFRTgwMjExX0RFRkFVTFRfUkFURVNfTUFTSykgeworCQlwcml2LT5jb25maWcgJj0gfkNGR19GSVhFRF9SQVRFOworCQlpcHdfc2V0X2ZpeGVkX3JhdGUocHJpdiwgcHJpdi0+aWVlZS0+bW9kZSk7CisJfSBlbHNlCisJCXByaXYtPmNvbmZpZyB8PSBDRkdfRklYRURfUkFURTsKKworCWlmIChwcml2LT5yYXRlc19tYXNrID09IG1hc2spIHsKKwkJSVBXX0RFQlVHX1dYKCJNYXNrIHNldCB0byBjdXJyZW50IG1hc2suXG4iKTsKKwkJdXAoJnByaXYtPnNlbSk7CisJCXJldHVybiAwOworCX0KKworCXByaXYtPnJhdGVzX21hc2sgPSBtYXNrOworCisJLyogTmV0d29yayBjb25maWd1cmF0aW9uIGNoYW5nZWQgLS0gZm9yY2UgW3JlXWFzc29jaWF0aW9uICovCisJSVBXX0RFQlVHX0FTU09DKCJbcmVdYXNzb2NpYXRpb24gdHJpZ2dlcmVkIGR1ZSB0byByYXRlcyBjaGFuZ2UuXG4iKTsKKwlpZiAoIWlwd19kaXNhc3NvY2lhdGUocHJpdikpCisJCWlwd19hc3NvY2lhdGUocHJpdik7CisKKwl1cCgmcHJpdi0+c2VtKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBpcHdfd3hfZ2V0X3JhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKQEAgLTU2ODksOCArODcyMSw5IEBACiAJCQkgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKIAlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCWRvd24oJnByaXYtPnNlbSk7CiAJd3JxdS0+Yml0cmF0ZS52YWx1ZSA9IHByaXYtPmxhc3RfcmF0ZTsKLQorCXVwKCZwcml2LT5zZW0pOwogCUlQV19ERUJVR19XWCgiR0VUIFJhdGUgLT4gJWQgXG4iLCB3cnF1LT5iaXRyYXRlLnZhbHVlKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTU3MDAsMTggKzg3MzMsMjAgQEAKIAkJCSAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7CiAJc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKLQorCWRvd24oJnByaXYtPnNlbSk7CiAJaWYgKHdycXUtPnJ0cy5kaXNhYmxlZCkKIAkJcHJpdi0+cnRzX3RocmVzaG9sZCA9IERFRkFVTFRfUlRTX1RIUkVTSE9MRDsKIAllbHNlIHsKIAkJaWYgKHdycXUtPnJ0cy52YWx1ZSA8IE1JTl9SVFNfVEhSRVNIT0xEIHx8Ci0JCSAgICB3cnF1LT5ydHMudmFsdWUgPiBNQVhfUlRTX1RIUkVTSE9MRCkKKwkJICAgIHdycXUtPnJ0cy52YWx1ZSA+IE1BWF9SVFNfVEhSRVNIT0xEKSB7CisJCQl1cCgmcHJpdi0+c2VtKTsKIAkJCXJldHVybiAtRUlOVkFMOwotCisJCX0KIAkJcHJpdi0+cnRzX3RocmVzaG9sZCA9IHdycXUtPnJ0cy52YWx1ZTsKIAl9CiAKIAlpcHdfc2VuZF9ydHNfdGhyZXNob2xkKHByaXYsIHByaXYtPnJ0c190aHJlc2hvbGQpOworCXVwKCZwcml2LT5zZW0pOwogCUlQV19ERUJVR19XWCgiU0VUIFJUUyBUaHJlc2hvbGQgLT4gJWQgXG4iLCBwcml2LT5ydHNfdGhyZXNob2xkKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTU3MjEsMTAgKzg3NTYsMTEgQEAKIAkJCSAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7CiAJc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlkb3duKCZwcml2LT5zZW0pOwogCXdycXUtPnJ0cy52YWx1ZSA9IHByaXYtPnJ0c190aHJlc2hvbGQ7CiAJd3JxdS0+cnRzLmZpeGVkID0gMDsJLyogbm8gYXV0byBzZWxlY3QgKi8KIAl3cnF1LT5ydHMuZGlzYWJsZWQgPSAod3JxdS0+cnRzLnZhbHVlID09IERFRkFVTFRfUlRTX1RIUkVTSE9MRCk7Ci0KKwl1cCgmcHJpdi0+c2VtKTsKIAlJUFdfREVCVUdfV1goIkdFVCBSVFMgVGhyZXNob2xkIC0+ICVkIFxuIiwgd3JxdS0+cnRzLnZhbHVlKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTU3MzQsNDEgKzg3NzAsMzMgQEAKIAkJCSAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKIAlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwotCXN0cnVjdCBpcHdfdHhfcG93ZXIgdHhfcG93ZXI7Ci0JaW50IGk7CisJaW50IGVyciA9IDA7CiAKLQlpZiAoaXB3X3JhZGlvX2tpbGxfc3cocHJpdiwgd3JxdS0+cG93ZXIuZGlzYWJsZWQpKQotCQlyZXR1cm4gLUVJTlBST0dSRVNTOworCWRvd24oJnByaXYtPnNlbSk7CisJaWYgKGlwd19yYWRpb19raWxsX3N3KHByaXYsIHdycXUtPnBvd2VyLmRpc2FibGVkKSkgeworCQllcnIgPSAtRUlOUFJPR1JFU1M7CisJCWdvdG8gb3V0OworCX0KIAotCWlmICh3cnF1LT5wb3dlci5mbGFncyAhPSBJV19UWFBPV19EQk0pCi0JCXJldHVybiAtRUlOVkFMOworCWlmICghd3JxdS0+cG93ZXIuZml4ZWQpCisJCXdycXUtPnBvd2VyLnZhbHVlID0gSVBXX1RYX1BPV0VSX0RFRkFVTFQ7CiAKLQlpZiAoKHdycXUtPnBvd2VyLnZhbHVlID4gMjApIHx8ICh3cnF1LT5wb3dlci52YWx1ZSA8IC0xMikpCi0JCXJldHVybiAtRUlOVkFMOworCWlmICh3cnF1LT5wb3dlci5mbGFncyAhPSBJV19UWFBPV19EQk0pIHsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKCh3cnF1LT5wb3dlci52YWx1ZSA+IElQV19UWF9QT1dFUl9NQVgpIHx8CisJICAgICh3cnF1LT5wb3dlci52YWx1ZSA8IElQV19UWF9QT1dFUl9NSU4pKSB7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KIAogCXByaXYtPnR4X3Bvd2VyID0gd3JxdS0+cG93ZXIudmFsdWU7Ci0KLQltZW1zZXQoJnR4X3Bvd2VyLCAwLCBzaXplb2YodHhfcG93ZXIpKTsKLQotCS8qIGNvbmZpZ3VyZSBkZXZpY2UgZm9yICdHJyBiYW5kICovCi0JdHhfcG93ZXIuaWVlZV9tb2RlID0gSVBXX0dfTU9ERTsKLQl0eF9wb3dlci5udW1fY2hhbm5lbHMgPSAxMTsKLQlmb3IgKGkgPSAwOyBpIDwgMTE7IGkrKykgewotCQl0eF9wb3dlci5jaGFubmVsc190eF9wb3dlcltpXS5jaGFubmVsX251bWJlciA9IGkgKyAxOwotCQl0eF9wb3dlci5jaGFubmVsc190eF9wb3dlcltpXS50eF9wb3dlciA9IHByaXYtPnR4X3Bvd2VyOwotCX0KLQlpZiAoaXB3X3NlbmRfdHhfcG93ZXIocHJpdiwgJnR4X3Bvd2VyKSkKLQkJZ290byBlcnJvcjsKLQotCS8qIGNvbmZpZ3VyZSBkZXZpY2UgdG8gYWxzbyBoYW5kbGUgJ0InIGJhbmQgKi8KLQl0eF9wb3dlci5pZWVlX21vZGUgPSBJUFdfQl9NT0RFOwotCWlmIChpcHdfc2VuZF90eF9wb3dlcihwcml2LCAmdHhfcG93ZXIpKQotCQlnb3RvIGVycm9yOwotCi0JcmV0dXJuIDA7Ci0KLSAgICAgIGVycm9yOgotCXJldHVybiAtRUlPOworCWVyciA9IGlwd19zZXRfdHhfcG93ZXIocHJpdik7CisgICAgICBvdXQ6CisJdXAoJnByaXYtPnNlbSk7CisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGludCBpcHdfd3hfZ2V0X3R4cG93KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCkBAIC01Nzc2LDE0ICs4ODA0LDE1IEBACiAJCQkgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7CiAJc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKLQorCWRvd24oJnByaXYtPnNlbSk7CiAJd3JxdS0+cG93ZXIudmFsdWUgPSBwcml2LT50eF9wb3dlcjsKIAl3cnF1LT5wb3dlci5maXhlZCA9IDE7CiAJd3JxdS0+cG93ZXIuZmxhZ3MgPSBJV19UWFBPV19EQk07CiAJd3JxdS0+cG93ZXIuZGlzYWJsZWQgPSAocHJpdi0+c3RhdHVzICYgU1RBVFVTX1JGX0tJTExfTUFTSykgPyAxIDogMDsKKwl1cCgmcHJpdi0+c2VtKTsKIAogCUlQV19ERUJVR19XWCgiR0VUIFRYIFBvd2VyIC0+ICVzICVkIFxuIiwKLQkJICAgICB3cnF1LT5wb3dlci5kaXNhYmxlZCA/ICJPTiIgOiAiT0ZGIiwgd3JxdS0+cG93ZXIudmFsdWUpOworCQkgICAgIHdycXUtPnBvd2VyLmRpc2FibGVkID8gIk9GRiIgOiAiT04iLCB3cnF1LT5wb3dlci52YWx1ZSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTU3OTMsMTggKzg4MjIsMjEgQEAKIAkJCSAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewogCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7Ci0KKwlkb3duKCZwcml2LT5zZW0pOwogCWlmICh3cnF1LT5mcmFnLmRpc2FibGVkKQogCQlwcml2LT5pZWVlLT5mdHMgPSBERUZBVUxUX0ZUUzsKIAllbHNlIHsKIAkJaWYgKHdycXUtPmZyYWcudmFsdWUgPCBNSU5fRlJBR19USFJFU0hPTEQgfHwKLQkJICAgIHdycXUtPmZyYWcudmFsdWUgPiBNQVhfRlJBR19USFJFU0hPTEQpCisJCSAgICB3cnF1LT5mcmFnLnZhbHVlID4gTUFYX0ZSQUdfVEhSRVNIT0xEKSB7CisJCQl1cCgmcHJpdi0+c2VtKTsKIAkJCXJldHVybiAtRUlOVkFMOworCQl9CiAKIAkJcHJpdi0+aWVlZS0+ZnRzID0gd3JxdS0+ZnJhZy52YWx1ZSAmIH4weDE7CiAJfQogCiAJaXB3X3NlbmRfZnJhZ190aHJlc2hvbGQocHJpdiwgd3JxdS0+ZnJhZy52YWx1ZSk7CisJdXAoJnByaXYtPnNlbSk7CiAJSVBXX0RFQlVHX1dYKCJTRVQgRnJhZyBUaHJlc2hvbGQgLT4gJWQgXG4iLCB3cnF1LT5mcmFnLnZhbHVlKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTU4MTQsMTAgKzg4NDYsMTEgQEAKIAkJCSAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewogCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJZG93bigmcHJpdi0+c2VtKTsKIAl3cnF1LT5mcmFnLnZhbHVlID0gcHJpdi0+aWVlZS0+ZnRzOwogCXdycXUtPmZyYWcuZml4ZWQgPSAwOwkvKiBubyBhdXRvIHNlbGVjdCAqLwogCXdycXUtPmZyYWcuZGlzYWJsZWQgPSAod3JxdS0+ZnJhZy52YWx1ZSA9PSBERUZBVUxUX0ZUUyk7Ci0KKwl1cCgmcHJpdi0+c2VtKTsKIAlJUFdfREVCVUdfV1goIkdFVCBGcmFnIFRocmVzaG9sZCAtPiAlZCBcbiIsIHdycXUtPmZyYWcudmFsdWUpOwogCiAJcmV0dXJuIDA7CkBAIC01ODI3LDE2ICs4ODYwLDEyOCBAQAogCQkJICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7Ci0JSVBXX0RFQlVHX1dYKCIweCVwLCAweCVwLCAweCVwXG4iLCBkZXYsIGluZm8sIHdycXUpOwotCXJldHVybiAtRU9QTk9UU1VQUDsKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCisJaWYgKHdycXUtPnJldHJ5LmZsYWdzICYgSVdfUkVUUllfTElGRVRJTUUgfHwgd3JxdS0+cmV0cnkuZGlzYWJsZWQpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCEod3JxdS0+cmV0cnkuZmxhZ3MgJiBJV19SRVRSWV9MSU1JVCkpCisJCXJldHVybiAwOworCisJaWYgKHdycXUtPnJldHJ5LnZhbHVlIDwgMCB8fCB3cnF1LT5yZXRyeS52YWx1ZSA+IDI1NSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkb3duKCZwcml2LT5zZW0pOworCWlmICh3cnF1LT5yZXRyeS5mbGFncyAmIElXX1JFVFJZX01JTikKKwkJcHJpdi0+c2hvcnRfcmV0cnlfbGltaXQgPSAodTgpIHdycXUtPnJldHJ5LnZhbHVlOworCWVsc2UgaWYgKHdycXUtPnJldHJ5LmZsYWdzICYgSVdfUkVUUllfTUFYKQorCQlwcml2LT5sb25nX3JldHJ5X2xpbWl0ID0gKHU4KSB3cnF1LT5yZXRyeS52YWx1ZTsKKwllbHNlIHsKKwkJcHJpdi0+c2hvcnRfcmV0cnlfbGltaXQgPSAodTgpIHdycXUtPnJldHJ5LnZhbHVlOworCQlwcml2LT5sb25nX3JldHJ5X2xpbWl0ID0gKHU4KSB3cnF1LT5yZXRyeS52YWx1ZTsKKwl9CisKKwlpcHdfc2VuZF9yZXRyeV9saW1pdChwcml2LCBwcml2LT5zaG9ydF9yZXRyeV9saW1pdCwKKwkJCSAgICAgcHJpdi0+bG9uZ19yZXRyeV9saW1pdCk7CisJdXAoJnByaXYtPnNlbSk7CisJSVBXX0RFQlVHX1dYKCJTRVQgcmV0cnkgbGltaXQgLT4gc2hvcnQ6JWQgbG9uZzolZFxuIiwKKwkJICAgICBwcml2LT5zaG9ydF9yZXRyeV9saW1pdCwgcHJpdi0+bG9uZ19yZXRyeV9saW1pdCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgaXB3X3d4X2dldF9yZXRyeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7Ci0JSVBXX0RFQlVHX1dYKCIweCVwLCAweCVwLCAweCVwXG4iLCBkZXYsIGluZm8sIHdycXUpOwotCXJldHVybiAtRU9QTk9UU1VQUDsKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCisJZG93bigmcHJpdi0+c2VtKTsKKwl3cnF1LT5yZXRyeS5kaXNhYmxlZCA9IDA7CisKKwlpZiAoKHdycXUtPnJldHJ5LmZsYWdzICYgSVdfUkVUUllfVFlQRSkgPT0gSVdfUkVUUllfTElGRVRJTUUpIHsKKwkJdXAoJnByaXYtPnNlbSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICh3cnF1LT5yZXRyeS5mbGFncyAmIElXX1JFVFJZX01BWCkgeworCQl3cnF1LT5yZXRyeS5mbGFncyA9IElXX1JFVFJZX0xJTUlUIHwgSVdfUkVUUllfTUFYOworCQl3cnF1LT5yZXRyeS52YWx1ZSA9IHByaXYtPmxvbmdfcmV0cnlfbGltaXQ7CisJfSBlbHNlIGlmICh3cnF1LT5yZXRyeS5mbGFncyAmIElXX1JFVFJZX01JTikgeworCQl3cnF1LT5yZXRyeS5mbGFncyA9IElXX1JFVFJZX0xJTUlUIHwgSVdfUkVUUllfTUlOOworCQl3cnF1LT5yZXRyeS52YWx1ZSA9IHByaXYtPnNob3J0X3JldHJ5X2xpbWl0OworCX0gZWxzZSB7CisJCXdycXUtPnJldHJ5LmZsYWdzID0gSVdfUkVUUllfTElNSVQ7CisJCXdycXUtPnJldHJ5LnZhbHVlID0gcHJpdi0+c2hvcnRfcmV0cnlfbGltaXQ7CisJfQorCXVwKCZwcml2LT5zZW0pOworCisJSVBXX0RFQlVHX1dYKCJHRVQgcmV0cnkgLT4gJWQgXG4iLCB3cnF1LT5yZXRyeS52YWx1ZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpcHdfcmVxdWVzdF9kaXJlY3Rfc2NhbihzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsIGNoYXIgKmVzc2lkLAorCQkJCSAgIGludCBlc3NpZF9sZW4pCit7CisJc3RydWN0IGlwd19zY2FuX3JlcXVlc3RfZXh0IHNjYW47CisJaW50IGVyciA9IDAsIHNjYW5fdHlwZTsKKworCWRvd24oJnByaXYtPnNlbSk7CisKKwlpZiAocHJpdi0+c3RhdHVzICYgU1RBVFVTX1JGX0tJTExfTUFTSykgeworCQlJUFdfREVCVUdfSEMoIkFib3J0aW5nIHNjYW4gZHVlIHRvIFJGIGtpbGwgYWN0aXZhdGlvblxuIik7CisJCXByaXYtPnN0YXR1cyB8PSBTVEFUVVNfU0NBTl9QRU5ESU5HOworCQlnb3RvIGRvbmU7CisJfQorCisJSVBXX0RFQlVHX0hDKCJzdGFydGluZyByZXF1ZXN0IGRpcmVjdCBzY2FuIVxuIik7CisKKwlpZiAocHJpdi0+c3RhdHVzICYgKFNUQVRVU19TQ0FOTklORyB8IFNUQVRVU19TQ0FOX0FCT1JUSU5HKSkgeworCQllcnIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUocHJpdi0+d2FpdF9zdGF0ZSwKKwkJCQkJICAgICAgICEocHJpdi0+CisJCQkJCQkgc3RhdHVzICYgKFNUQVRVU19TQ0FOTklORyB8CisJCQkJCQkJICAgU1RBVFVTX1NDQU5fQUJPUlRJTkcpKSk7CisJCWlmIChlcnIpIHsKKwkJCUlQV19ERUJVR19IQygiYWJvcnRpbmcgZGlyZWN0IHNjYW4iKTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCX0KKwltZW1zZXQoJnNjYW4sIDAsIHNpemVvZihzY2FuKSk7CisKKwlpZiAocHJpdi0+Y29uZmlnICYgQ0ZHX1NQRUVEX1NDQU4pCisJCXNjYW4uZHdlbGxfdGltZVtJUFdfU0NBTl9BQ1RJVkVfQlJPQURDQVNUX1NDQU5dID0KKwkJICAgIGNwdV90b19sZTE2KDMwKTsKKwllbHNlCisJCXNjYW4uZHdlbGxfdGltZVtJUFdfU0NBTl9BQ1RJVkVfQlJPQURDQVNUX1NDQU5dID0KKwkJICAgIGNwdV90b19sZTE2KDIwKTsKKworCXNjYW4uZHdlbGxfdGltZVtJUFdfU0NBTl9BQ1RJVkVfQlJPQURDQVNUX0FORF9ESVJFQ1RfU0NBTl0gPQorCSAgICBjcHVfdG9fbGUxNigyMCk7CisJc2Nhbi5kd2VsbF90aW1lW0lQV19TQ0FOX1BBU1NJVkVfRlVMTF9EV0VMTF9TQ0FOXSA9IGNwdV90b19sZTE2KDEyMCk7CisJc2Nhbi5kd2VsbF90aW1lW0lQV19TQ0FOX0FDVElWRV9ESVJFQ1RfU0NBTl0gPSBjcHVfdG9fbGUxNigyMCk7CisKKwlzY2FuLmZ1bGxfc2Nhbl9pbmRleCA9IGNwdV90b19sZTMyKGllZWU4MDIxMV9nZXRfc2NhbnMocHJpdi0+aWVlZSkpOworCisJZXJyID0gaXB3X3NlbmRfc3NpZChwcml2LCBlc3NpZCwgZXNzaWRfbGVuKTsKKwlpZiAoZXJyKSB7CisJCUlQV19ERUJVR19IQygiQXR0ZW1wdCB0byBzZW5kIFNTSUQgY29tbWFuZCBmYWlsZWRcbiIpOworCQlnb3RvIGRvbmU7CisJfQorCXNjYW5fdHlwZSA9IElQV19TQ0FOX0FDVElWRV9CUk9BRENBU1RfQU5EX0RJUkVDVF9TQ0FOOworCisJaXB3X2FkZF9zY2FuX2NoYW5uZWxzKHByaXYsICZzY2FuLCBzY2FuX3R5cGUpOworCisJZXJyID0gaXB3X3NlbmRfc2Nhbl9yZXF1ZXN0X2V4dChwcml2LCAmc2Nhbik7CisJaWYgKGVycikgeworCQlJUFdfREVCVUdfSEMoIlNlbmRpbmcgc2NhbiBjb21tYW5kIGZhaWxlZDogJTA4WFxuIiwgZXJyKTsKKwkJZ290byBkb25lOworCX0KKworCXByaXYtPnN0YXR1cyB8PSBTVEFUVVNfU0NBTk5JTkc7CisKKyAgICAgIGRvbmU6CisJdXAoJnByaXYtPnNlbSk7CisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGludCBpcHdfd3hfc2V0X3NjYW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKQEAgLTU4NDQsOSArODk4OSwyMSBAQAogCQkJICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7CiAJc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaXdfc2Nhbl9yZXEgKnJlcSA9IE5VTEw7CisJaWYgKHdycXUtPmRhdGEubGVuZ3RoCisJICAgICYmIHdycXUtPmRhdGEubGVuZ3RoID09IHNpemVvZihzdHJ1Y3QgaXdfc2Nhbl9yZXEpKSB7CisJCXJlcSA9IChzdHJ1Y3QgaXdfc2Nhbl9yZXEgKilleHRyYTsKKwkJaWYgKHdycXUtPmRhdGEuZmxhZ3MgJiBJV19TQ0FOX1RISVNfRVNTSUQpIHsKKwkJCWlwd19yZXF1ZXN0X2RpcmVjdF9zY2FuKHByaXYsIHJlcS0+ZXNzaWQsCisJCQkJCQlyZXEtPmVzc2lkX2xlbik7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwogCUlQV19ERUJVR19XWCgiU3RhcnQgc2NhblxuIik7Ci0JaWYgKGlwd19yZXF1ZXN0X3NjYW4ocHJpdikpCi0JCXJldHVybiAtRUlPOworCisJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5yZXF1ZXN0X3NjYW4pOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTU4NjMsNyArOTAyMCwyMSBAQAogCQkJICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICprZXkpCiB7CiAJc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKLQlyZXR1cm4gaWVlZTgwMjExX3d4X3NldF9lbmNvZGUocHJpdi0+aWVlZSwgaW5mbywgd3JxdSwga2V5KTsKKwlpbnQgcmV0OworCXUzMiBjYXAgPSBwcml2LT5jYXBhYmlsaXR5OworCisJZG93bigmcHJpdi0+c2VtKTsKKwlyZXQgPSBpZWVlODAyMTFfd3hfc2V0X2VuY29kZShwcml2LT5pZWVlLCBpbmZvLCB3cnF1LCBrZXkpOworCisJLyogSW4gSUJTUyBtb2RlLCB3ZSBuZWVkIHRvIG5vdGlmeSB0aGUgZmlybXdhcmUgdG8gdXBkYXRlCisJICogdGhlIGJlYWNvbiBpbmZvIGFmdGVyIHdlIGNoYW5nZWQgdGhlIGNhcGFiaWxpdHkuICovCisJaWYgKGNhcCAhPSBwcml2LT5jYXBhYmlsaXR5ICYmCisJICAgIHByaXYtPmllZWUtPml3X21vZGUgPT0gSVdfTU9ERV9BREhPQyAmJgorCSAgICBwcml2LT5zdGF0dXMgJiBTVEFUVVNfQVNTT0NJQVRFRCkKKwkJaXB3X2Rpc2Fzc29jaWF0ZShwcml2KTsKKworCXVwKCZwcml2LT5zZW0pOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgaXB3X3d4X2dldF9lbmNvZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKQEAgLTU4ODAsMTcgKzkwNTEsMTcgQEAKIHsKIAlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwogCWludCBlcnI7Ci0KKwlkb3duKCZwcml2LT5zZW0pOwogCWlmICh3cnF1LT5wb3dlci5kaXNhYmxlZCkgewogCQlwcml2LT5wb3dlcl9tb2RlID0gSVBXX1BPV0VSX0xFVkVMKHByaXYtPnBvd2VyX21vZGUpOwogCQllcnIgPSBpcHdfc2VuZF9wb3dlcl9tb2RlKHByaXYsIElQV19QT1dFUl9NT0RFX0NBTSk7CiAJCWlmIChlcnIpIHsKIAkJCUlQV19ERUJVR19XWCgiZmFpbGVkIHNldHRpbmcgcG93ZXIgbW9kZS5cbiIpOworCQkJdXAoJnByaXYtPnNlbSk7CiAJCQlyZXR1cm4gZXJyOwogCQl9Ci0KIAkJSVBXX0RFQlVHX1dYKCJTRVQgUG93ZXIgTWFuYWdlbWVudCBNb2RlIC0+IG9mZlxuIik7Ci0KKwkJdXAoJnByaXYtPnNlbSk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtNTkwMiw2ICs5MDczLDcgQEAKIAlkZWZhdWx0OgkJLyogT3RoZXJ3aXNlIHdlIGRvbid0IHN1cHBvcnQgaXQgKi8KIAkJSVBXX0RFQlVHX1dYKCJTRVQgUE0gTW9kZTogJVggbm90IHN1cHBvcnRlZC5cbiIsCiAJCQkgICAgIHdycXUtPnBvd2VyLmZsYWdzKTsKKwkJdXAoJnByaXYtPnNlbSk7CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CiAKQEAgLTU5MTQsMTEgKzkwODYsMTIgQEAKIAllcnIgPSBpcHdfc2VuZF9wb3dlcl9tb2RlKHByaXYsIElQV19QT1dFUl9MRVZFTChwcml2LT5wb3dlcl9tb2RlKSk7CiAJaWYgKGVycikgewogCQlJUFdfREVCVUdfV1goImZhaWxlZCBzZXR0aW5nIHBvd2VyIG1vZGUuXG4iKTsKKwkJdXAoJnByaXYtPnNlbSk7CiAJCXJldHVybiBlcnI7CiAJfQogCiAJSVBXX0RFQlVHX1dYKCJTRVQgUG93ZXIgTWFuYWdlbWVudCBNb2RlIC0+IDB4JTAyWFxuIiwgcHJpdi0+cG93ZXJfbW9kZSk7Ci0KKwl1cCgmcHJpdi0+c2VtKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTkyNywxMyArOTEwMCwxMyBAQAogCQkJICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewogCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7Ci0KLQlpZiAoIShwcml2LT5wb3dlcl9tb2RlICYgSVBXX1BPV0VSX0VOQUJMRUQpKSB7CisJZG93bigmcHJpdi0+c2VtKTsKKwlpZiAoIShwcml2LT5wb3dlcl9tb2RlICYgSVBXX1BPV0VSX0VOQUJMRUQpKQogCQl3cnF1LT5wb3dlci5kaXNhYmxlZCA9IDE7Ci0JfSBlbHNlIHsKKwllbHNlCiAJCXdycXUtPnBvd2VyLmRpc2FibGVkID0gMDsKLQl9CiAKKwl1cCgmcHJpdi0+c2VtKTsKIAlJUFdfREVCVUdfV1goIkdFVCBQb3dlciBNYW5hZ2VtZW50IE1vZGUgLT4gJTAyWFxuIiwgcHJpdi0+cG93ZXJfbW9kZSk7CiAKIAlyZXR1cm4gMDsKQEAgLTU5NDYsNyArOTExOSw3IEBACiAJc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKIAlpbnQgbW9kZSA9ICooaW50ICopZXh0cmE7CiAJaW50IGVycjsKLQorCWRvd24oJnByaXYtPnNlbSk7CiAJaWYgKChtb2RlIDwgMSkgfHwgKG1vZGUgPiBJUFdfUE9XRVJfTElNSVQpKSB7CiAJCW1vZGUgPSBJUFdfUE9XRVJfQUM7CiAJCXByaXYtPnBvd2VyX21vZGUgPSBtb2RlOwpAQCAtNTk1OSwxMCArOTEzMiwxMSBAQAogCiAJCWlmIChlcnIpIHsKIAkJCUlQV19ERUJVR19XWCgiZmFpbGVkIHNldHRpbmcgcG93ZXIgbW9kZS5cbiIpOworCQkJdXAoJnByaXYtPnNlbSk7CiAJCQlyZXR1cm4gZXJyOwogCQl9CiAJfQotCisJdXAoJnByaXYtPnNlbSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTYwMTEsNyArOTE4NSw3IEBACiAJCUlQV19XQVJOSU5HKCJBdHRlbXB0IHRvIHNldCBpbnZhbGlkIHdpcmVsZXNzIG1vZGU6ICVkXG4iLCBtb2RlKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCisJZG93bigmcHJpdi0+c2VtKTsKIAlpZiAocHJpdi0+YWRhcHRlciA9PSBJUFdfMjkxNUFCRykgewogCQlwcml2LT5pZWVlLT5hYmdfdHJ1ZSA9IDE7CiAJCWlmIChtb2RlICYgSUVFRV9BKSB7CkBAIC02MDIzLDYgKzkxOTcsNyBAQAogCQlpZiAobW9kZSAmIElFRUVfQSkgewogCQkJSVBXX1dBUk5JTkcoIkF0dGVtcHQgdG8gc2V0IDIyMDBCRyBpbnRvICIKIAkJCQkgICAgIjgwMi4xMWEgbW9kZVxuIik7CisJCQl1cCgmcHJpdi0+c2VtKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKQEAgLTYwNDYsMjAgKzkyMjEsMjAgQEAKIAlwcml2LT5pZWVlLT5tb2R1bGF0aW9uID0gbW9kdWxhdGlvbjsKIAlpbml0X3N1cHBvcnRlZF9yYXRlcyhwcml2LCAmcHJpdi0+cmF0ZXMpOwogCi0JLyogSWYgd2UgYXJlIGN1cnJlbnRseSBhc3NvY2lhdGVkLCBvciB0cnlpbmcgdG8gYXNzb2NpYXRlCi0JICogdGhlbiBzZWUgaWYgdGhpcyBpcyBhIG5ldyBjb25maWd1cmF0aW9uIChjYXVzaW5nIHVzIHRvCi0JICogZGlzYXNzb2NpYXRlKSAqLwotCWlmIChwcml2LT5zdGF0dXMgJiAoU1RBVFVTX0FTU09DSUFURUQgfCBTVEFUVVNfQVNTT0NJQVRJTkcpKSB7Ci0JCS8qIFRoZSByZXN1bHRpbmcgYXNzb2NpYXRpb24gd2lsbCB0cmlnZ2VyCi0JCSAqIHRoZSBuZXcgcmF0ZXMgdG8gYmUgc2VudCB0byB0aGUgZGV2aWNlICovCi0JCUlQV19ERUJVR19BU1NPQygiRGlzYXNzb2NpYXRpbmcgZHVlIHRvIG1vZGUgY2hhbmdlLlxuIik7Ci0JCWlwd19kaXNhc3NvY2lhdGUocHJpdik7Ci0JfSBlbHNlCisJLyogTmV0d29yayBjb25maWd1cmF0aW9uIGNoYW5nZWQgLS0gZm9yY2UgW3JlXWFzc29jaWF0aW9uICovCisJSVBXX0RFQlVHX0FTU09DKCJbcmVdYXNzb2NpYXRpb24gdHJpZ2dlcmVkIGR1ZSB0byBtb2RlIGNoYW5nZS5cbiIpOworCWlmICghaXB3X2Rpc2Fzc29jaWF0ZShwcml2KSkgewogCQlpcHdfc2VuZF9zdXBwb3J0ZWRfcmF0ZXMocHJpdiwgJnByaXYtPnJhdGVzKTsKKwkJaXB3X2Fzc29jaWF0ZShwcml2KTsKKwl9CisKKwkvKiBVcGRhdGUgdGhlIGJhbmQgTEVEcyAqLworCWlwd19sZWRfYmFuZF9vbihwcml2KTsKIAogCUlQV19ERUJVR19XWCgiUFJJViBTRVQgTU9ERTogJWMlYyVjXG4iLAogCQkgICAgIG1vZGUgJiBJRUVFX0EgPyAnYScgOiAnLicsCiAJCSAgICAgbW9kZSAmIElFRUVfQiA/ICdiJyA6ICcuJywgbW9kZSAmIElFRUVfRyA/ICdnJyA6ICcuJyk7CisJdXAoJnByaXYtPnNlbSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTYwNjgsMTI0ICs5MjQzLDIzNCBAQAogCQkJCSAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKIAlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwotCi0Jc3dpdGNoIChwcml2LT5pZWVlLT5mcmVxX2JhbmQpIHsKLQljYXNlIElFRUU4MDIxMV8yNEdIWl9CQU5EOgotCQlzd2l0Y2ggKHByaXYtPmllZWUtPm1vZHVsYXRpb24pIHsKLQkJY2FzZSBJRUVFODAyMTFfQ0NLX01PRFVMQVRJT046Ci0JCQlzdHJuY3B5KGV4dHJhLCAiODAyLjExYiAoMikiLCBNQVhfV1hfU1RSSU5HKTsKLQkJCWJyZWFrOwotCQljYXNlIElFRUU4MDIxMV9PRkRNX01PRFVMQVRJT046Ci0JCQlzdHJuY3B5KGV4dHJhLCAiODAyLjExZyAoNCkiLCBNQVhfV1hfU1RSSU5HKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJc3RybmNweShleHRyYSwgIjgwMi4xMWJnICg2KSIsIE1BWF9XWF9TVFJJTkcpOwotCQkJYnJlYWs7Ci0JCX0KLQkJYnJlYWs7Ci0KLQljYXNlIElFRUU4MDIxMV81MkdIWl9CQU5EOgorCWRvd24oJnByaXYtPnNlbSk7CisJc3dpdGNoIChwcml2LT5pZWVlLT5tb2RlKSB7CisJY2FzZSBJRUVFX0E6CiAJCXN0cm5jcHkoZXh0cmEsICI4MDIuMTFhICgxKSIsIE1BWF9XWF9TVFJJTkcpOwogCQlicmVhazsKLQotCWRlZmF1bHQ6CQkvKiBNaXhlZCBCYW5kICovCi0JCXN3aXRjaCAocHJpdi0+aWVlZS0+bW9kdWxhdGlvbikgewotCQljYXNlIElFRUU4MDIxMV9DQ0tfTU9EVUxBVElPTjoKLQkJCXN0cm5jcHkoZXh0cmEsICI4MDIuMTFhYiAoMykiLCBNQVhfV1hfU1RSSU5HKTsKLQkJCWJyZWFrOwotCQljYXNlIElFRUU4MDIxMV9PRkRNX01PRFVMQVRJT046Ci0JCQlzdHJuY3B5KGV4dHJhLCAiODAyLjExYWcgKDUpIiwgTUFYX1dYX1NUUklORyk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXN0cm5jcHkoZXh0cmEsICI4MDIuMTFhYmcgKDcpIiwgTUFYX1dYX1NUUklORyk7Ci0JCQlicmVhazsKLQkJfQorCWNhc2UgSUVFRV9COgorCQlzdHJuY3B5KGV4dHJhLCAiODAyLjExYiAoMikiLCBNQVhfV1hfU1RSSU5HKTsKKwkJYnJlYWs7CisJY2FzZSBJRUVFX0EgfCBJRUVFX0I6CisJCXN0cm5jcHkoZXh0cmEsICI4MDIuMTFhYiAoMykiLCBNQVhfV1hfU1RSSU5HKTsKKwkJYnJlYWs7CisJY2FzZSBJRUVFX0c6CisJCXN0cm5jcHkoZXh0cmEsICI4MDIuMTFnICg0KSIsIE1BWF9XWF9TVFJJTkcpOworCQlicmVhazsKKwljYXNlIElFRUVfQSB8IElFRUVfRzoKKwkJc3RybmNweShleHRyYSwgIjgwMi4xMWFnICg1KSIsIE1BWF9XWF9TVFJJTkcpOworCQlicmVhazsKKwljYXNlIElFRUVfQiB8IElFRUVfRzoKKwkJc3RybmNweShleHRyYSwgIjgwMi4xMWJnICg2KSIsIE1BWF9XWF9TVFJJTkcpOworCQlicmVhazsKKwljYXNlIElFRUVfQSB8IElFRUVfQiB8IElFRUVfRzoKKwkJc3RybmNweShleHRyYSwgIjgwMi4xMWFiZyAoNykiLCBNQVhfV1hfU1RSSU5HKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJc3RybmNweShleHRyYSwgInVua25vd24iLCBNQVhfV1hfU1RSSU5HKTsKIAkJYnJlYWs7CiAJfQogCiAJSVBXX0RFQlVHX1dYKCJQUklWIEdFVCBNT0RFOiAlc1xuIiwgZXh0cmEpOwogCiAJd3JxdS0+ZGF0YS5sZW5ndGggPSBzdHJsZW4oZXh0cmEpICsgMTsKKwl1cCgmcHJpdi0+c2VtKTsKIAogCXJldHVybiAwOwogfQogCi0jaWZkZWYgQ09ORklHX0lQV19QUk9NSVNDCi1zdGF0aWMgaW50IGlwd193eF9zZXRfcHJvbWlzYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorc3RhdGljIGludCBpcHdfd3hfc2V0X3ByZWFtYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCWludCBtb2RlID0gKihpbnQgKilleHRyYTsKKwlkb3duKCZwcml2LT5zZW0pOworCS8qIFN3aXRjaGluZyBmcm9tIFNIT1JUIC0+IExPTkcgcmVxdWlyZXMgYSBkaXNhc3NvY2lhdGlvbiAqLworCWlmIChtb2RlID09IDEpIHsKKwkJaWYgKCEocHJpdi0+Y29uZmlnICYgQ0ZHX1BSRUFNQkxFX0xPTkcpKSB7CisJCQlwcml2LT5jb25maWcgfD0gQ0ZHX1BSRUFNQkxFX0xPTkc7CisKKwkJCS8qIE5ldHdvcmsgY29uZmlndXJhdGlvbiBjaGFuZ2VkIC0tIGZvcmNlIFtyZV1hc3NvY2lhdGlvbiAqLworCQkJSVBXX0RFQlVHX0FTU09DCisJCQkgICAgKCJbcmVdYXNzb2NpYXRpb24gdHJpZ2dlcmVkIGR1ZSB0byBwcmVhbWJsZSBjaGFuZ2UuXG4iKTsKKwkJCWlmICghaXB3X2Rpc2Fzc29jaWF0ZShwcml2KSkKKwkJCQlpcHdfYXNzb2NpYXRlKHByaXYpOworCQl9CisJCWdvdG8gZG9uZTsKKwl9CisKKwlpZiAobW9kZSA9PSAwKSB7CisJCXByaXYtPmNvbmZpZyAmPSB+Q0ZHX1BSRUFNQkxFX0xPTkc7CisJCWdvdG8gZG9uZTsKKwl9CisJdXAoJnByaXYtPnNlbSk7CisJcmV0dXJuIC1FSU5WQUw7CisKKyAgICAgIGRvbmU6CisJdXAoJnByaXYtPnNlbSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXB3X3d4X2dldF9wcmVhbWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlkb3duKCZwcml2LT5zZW0pOworCWlmIChwcml2LT5jb25maWcgJiBDRkdfUFJFQU1CTEVfTE9ORykKKwkJc25wcmludGYod3JxdS0+bmFtZSwgSUZOQU1TSVosICJsb25nICgxKSIpOworCWVsc2UKKwkJc25wcmludGYod3JxdS0+bmFtZSwgSUZOQU1TSVosICJhdXRvICgwKSIpOworCXVwKCZwcml2LT5zZW0pOworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX0lQVzIyMDBfTU9OSVRPUgorc3RhdGljIGludCBpcHdfd3hfc2V0X21vbml0b3Ioc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKIAlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwogCWludCAqcGFybXMgPSAoaW50ICopZXh0cmE7CiAJaW50IGVuYWJsZSA9IChwYXJtc1swXSA+IDApOwotCi0JSVBXX0RFQlVHX1dYKCJTRVQgUFJPTUlTQzogJWQgJWRcbiIsIGVuYWJsZSwgcGFybXNbMV0pOworCWRvd24oJnByaXYtPnNlbSk7CisJSVBXX0RFQlVHX1dYKCJTRVQgTU9OSVRPUjogJWQgJWRcbiIsIGVuYWJsZSwgcGFybXNbMV0pOwogCWlmIChlbmFibGUpIHsKIAkJaWYgKHByaXYtPmllZWUtPml3X21vZGUgIT0gSVdfTU9ERV9NT05JVE9SKSB7CisjaWZkZWYgQ09ORklHX0lFRUU4MDIxMV9SQURJT1RBUAorCQkJcHJpdi0+bmV0X2Rldi0+dHlwZSA9IEFSUEhSRF9JRUVFODAyMTFfUkFESU9UQVA7CisjZWxzZQogCQkJcHJpdi0+bmV0X2Rldi0+dHlwZSA9IEFSUEhSRF9JRUVFODAyMTE7Ci0JCQlpcHdfYWRhcHRlcl9yZXN0YXJ0KHByaXYpOworI2VuZGlmCisJCQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPmFkYXB0ZXJfcmVzdGFydCk7CiAJCX0KIAogCQlpcHdfc2V0X2NoYW5uZWwocHJpdiwgcGFybXNbMV0pOwogCX0gZWxzZSB7Ci0JCWlmIChwcml2LT5pZWVlLT5pd19tb2RlICE9IElXX01PREVfTU9OSVRPUikKKwkJaWYgKHByaXYtPmllZWUtPml3X21vZGUgIT0gSVdfTU9ERV9NT05JVE9SKSB7CisJCQl1cCgmcHJpdi0+c2VtKTsKIAkJCXJldHVybiAwOworCQl9CiAJCXByaXYtPm5ldF9kZXYtPnR5cGUgPSBBUlBIUkRfRVRIRVI7Ci0JCWlwd19hZGFwdGVyX3Jlc3RhcnQocHJpdik7CisJCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+YWRhcHRlcl9yZXN0YXJ0KTsKIAl9CisJdXAoJnByaXYtPnNlbSk7CiAJcmV0dXJuIDA7CiB9CiAKKyNlbmRpZgkJCQkvLyBDT05GSUdfSVBXMjIwMF9NT05JVE9SCisKIHN0YXRpYyBpbnQgaXB3X3d4X3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7CiAJc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKIAlJUFdfREVCVUdfV1goIlJFU0VUXG4iKTsKLQlpcHdfYWRhcHRlcl9yZXN0YXJ0KHByaXYpOworCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+YWRhcHRlcl9yZXN0YXJ0KTsKIAlyZXR1cm4gMDsKIH0KLSNlbmRpZgkJCQkvLyBDT05GSUdfSVBXX1BST01JU0MKKworc3RhdGljIGludCBpcHdfd3hfc3dfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXVuaW9uIGl3cmVxX2RhdGEgd3JxdV9zZWMgPSB7CisJCS5lbmNvZGluZyA9IHsKKwkJCSAgICAgLmZsYWdzID0gSVdfRU5DT0RFX0RJU0FCTEVELAorCQkJICAgICB9LAorCX07CisJaW50IHJldDsKKworCUlQV19ERUJVR19XWCgiU1dfUkVTRVRcbiIpOworCisJZG93bigmcHJpdi0+c2VtKTsKKworCXJldCA9IGlwd19zd19yZXNldChwcml2LCAwKTsKKwlpZiAoIXJldCkgeworCQlmcmVlX2Zpcm13YXJlKCk7CisJCWlwd19hZGFwdGVyX3Jlc3RhcnQocHJpdik7CisJfQorCisJLyogVGhlIFNXIHJlc2V0IGJpdCBtaWdodCBoYXZlIGJlZW4gdG9nZ2xlZCBvbiBieSB0aGUgJ2Rpc2FibGUnCisJICogbW9kdWxlIHBhcmFtZXRlciwgc28gdGFrZSBhcHByb3ByaWF0ZSBhY3Rpb24gKi8KKwlpcHdfcmFkaW9fa2lsbF9zdyhwcml2LCBwcml2LT5zdGF0dXMgJiBTVEFUVVNfUkZfS0lMTF9TVyk7CisKKwl1cCgmcHJpdi0+c2VtKTsKKwlpZWVlODAyMTFfd3hfc2V0X2VuY29kZShwcml2LT5pZWVlLCBpbmZvLCAmd3JxdV9zZWMsIE5VTEwpOworCWRvd24oJnByaXYtPnNlbSk7CisKKwlpZiAoIShwcml2LT5zdGF0dXMgJiBTVEFUVVNfUkZfS0lMTF9NQVNLKSkgeworCQkvKiBDb25maWd1cmF0aW9uIGxpa2VseSBjaGFuZ2VkIC0tIGZvcmNlIFtyZV1hc3NvY2lhdGlvbiAqLworCQlJUFdfREVCVUdfQVNTT0MoIltyZV1hc3NvY2lhdGlvbiB0cmlnZ2VyZWQgZHVlIHRvIHN3ICIKKwkJCQkicmVzZXQuXG4iKTsKKwkJaWYgKCFpcHdfZGlzYXNzb2NpYXRlKHByaXYpKQorCQkJaXB3X2Fzc29jaWF0ZShwcml2KTsKKwl9CisKKwl1cCgmcHJpdi0+c2VtKTsKKworCXJldHVybiAwOworfQogCiAvKiBSZWJhc2UgdGhlIFdFIElPQ1RMcyB0byB6ZXJvIGZvciB0aGUgaGFuZGxlciBhcnJheSAqLwogI2RlZmluZSBJV19JT0NUTCh4KSBbKHgpLVNJT0NTSVdDT01NSVRdCiBzdGF0aWMgaXdfaGFuZGxlciBpcHdfd3hfaGFuZGxlcnNbXSA9IHsKLQlJV19JT0NUTChTSU9DR0lXTkFNRSkJPSBpcHdfd3hfZ2V0X25hbWUsCi0JSVdfSU9DVEwoU0lPQ1NJV0ZSRVEpCT0gaXB3X3d4X3NldF9mcmVxLAotCUlXX0lPQ1RMKFNJT0NHSVdGUkVRKQk9IGlwd193eF9nZXRfZnJlcSwKLQlJV19JT0NUTChTSU9DU0lXTU9ERSkJPSBpcHdfd3hfc2V0X21vZGUsCi0JSVdfSU9DVEwoU0lPQ0dJV01PREUpCT0gaXB3X3d4X2dldF9tb2RlLAotCUlXX0lPQ1RMKFNJT0NHSVdSQU5HRSkJPSBpcHdfd3hfZ2V0X3JhbmdlLAotCUlXX0lPQ1RMKFNJT0NTSVdBUCkJPSBpcHdfd3hfc2V0X3dhcCwKLQlJV19JT0NUTChTSU9DR0lXQVApCT0gaXB3X3d4X2dldF93YXAsCi0JSVdfSU9DVEwoU0lPQ1NJV1NDQU4pCT0gaXB3X3d4X3NldF9zY2FuLAotCUlXX0lPQ1RMKFNJT0NHSVdTQ0FOKQk9IGlwd193eF9nZXRfc2NhbiwKLQlJV19JT0NUTChTSU9DU0lXRVNTSUQpCT0gaXB3X3d4X3NldF9lc3NpZCwKLQlJV19JT0NUTChTSU9DR0lXRVNTSUQpCT0gaXB3X3d4X2dldF9lc3NpZCwKLQlJV19JT0NUTChTSU9DU0lXTklDS04pCT0gaXB3X3d4X3NldF9uaWNrLAotCUlXX0lPQ1RMKFNJT0NHSVdOSUNLTikJPSBpcHdfd3hfZ2V0X25pY2ssCi0JSVdfSU9DVEwoU0lPQ1NJV1JBVEUpCT0gaXB3X3d4X3NldF9yYXRlLAotCUlXX0lPQ1RMKFNJT0NHSVdSQVRFKQk9IGlwd193eF9nZXRfcmF0ZSwKLQlJV19JT0NUTChTSU9DU0lXUlRTKQk9IGlwd193eF9zZXRfcnRzLAotCUlXX0lPQ1RMKFNJT0NHSVdSVFMpCT0gaXB3X3d4X2dldF9ydHMsCi0JSVdfSU9DVEwoU0lPQ1NJV0ZSQUcpCT0gaXB3X3d4X3NldF9mcmFnLAotCUlXX0lPQ1RMKFNJT0NHSVdGUkFHKQk9IGlwd193eF9nZXRfZnJhZywKLQlJV19JT0NUTChTSU9DU0lXVFhQT1cpCT0gaXB3X3d4X3NldF90eHBvdywKLQlJV19JT0NUTChTSU9DR0lXVFhQT1cpCT0gaXB3X3d4X2dldF90eHBvdywKLQlJV19JT0NUTChTSU9DU0lXUkVUUlkpCT0gaXB3X3d4X3NldF9yZXRyeSwKLQlJV19JT0NUTChTSU9DR0lXUkVUUlkpCT0gaXB3X3d4X2dldF9yZXRyeSwKLQlJV19JT0NUTChTSU9DU0lXRU5DT0RFKQk9IGlwd193eF9zZXRfZW5jb2RlLAotCUlXX0lPQ1RMKFNJT0NHSVdFTkNPREUpCT0gaXB3X3d4X2dldF9lbmNvZGUsCi0JSVdfSU9DVEwoU0lPQ1NJV1BPV0VSKQk9IGlwd193eF9zZXRfcG93ZXIsCi0JSVdfSU9DVEwoU0lPQ0dJV1BPV0VSKQk9IGlwd193eF9nZXRfcG93ZXIsCisJSVdfSU9DVEwoU0lPQ0dJV05BTUUpID0gaXB3X3d4X2dldF9uYW1lLAorCUlXX0lPQ1RMKFNJT0NTSVdGUkVRKSA9IGlwd193eF9zZXRfZnJlcSwKKwlJV19JT0NUTChTSU9DR0lXRlJFUSkgPSBpcHdfd3hfZ2V0X2ZyZXEsCisJSVdfSU9DVEwoU0lPQ1NJV01PREUpID0gaXB3X3d4X3NldF9tb2RlLAorCUlXX0lPQ1RMKFNJT0NHSVdNT0RFKSA9IGlwd193eF9nZXRfbW9kZSwKKwlJV19JT0NUTChTSU9DR0lXUkFOR0UpID0gaXB3X3d4X2dldF9yYW5nZSwKKwlJV19JT0NUTChTSU9DU0lXQVApID0gaXB3X3d4X3NldF93YXAsCisJSVdfSU9DVEwoU0lPQ0dJV0FQKSA9IGlwd193eF9nZXRfd2FwLAorCUlXX0lPQ1RMKFNJT0NTSVdTQ0FOKSA9IGlwd193eF9zZXRfc2NhbiwKKwlJV19JT0NUTChTSU9DR0lXU0NBTikgPSBpcHdfd3hfZ2V0X3NjYW4sCisJSVdfSU9DVEwoU0lPQ1NJV0VTU0lEKSA9IGlwd193eF9zZXRfZXNzaWQsCisJSVdfSU9DVEwoU0lPQ0dJV0VTU0lEKSA9IGlwd193eF9nZXRfZXNzaWQsCisJSVdfSU9DVEwoU0lPQ1NJV05JQ0tOKSA9IGlwd193eF9zZXRfbmljaywKKwlJV19JT0NUTChTSU9DR0lXTklDS04pID0gaXB3X3d4X2dldF9uaWNrLAorCUlXX0lPQ1RMKFNJT0NTSVdSQVRFKSA9IGlwd193eF9zZXRfcmF0ZSwKKwlJV19JT0NUTChTSU9DR0lXUkFURSkgPSBpcHdfd3hfZ2V0X3JhdGUsCisJSVdfSU9DVEwoU0lPQ1NJV1JUUykgPSBpcHdfd3hfc2V0X3J0cywKKwlJV19JT0NUTChTSU9DR0lXUlRTKSA9IGlwd193eF9nZXRfcnRzLAorCUlXX0lPQ1RMKFNJT0NTSVdGUkFHKSA9IGlwd193eF9zZXRfZnJhZywKKwlJV19JT0NUTChTSU9DR0lXRlJBRykgPSBpcHdfd3hfZ2V0X2ZyYWcsCisJSVdfSU9DVEwoU0lPQ1NJV1RYUE9XKSA9IGlwd193eF9zZXRfdHhwb3csCisJSVdfSU9DVEwoU0lPQ0dJV1RYUE9XKSA9IGlwd193eF9nZXRfdHhwb3csCisJSVdfSU9DVEwoU0lPQ1NJV1JFVFJZKSA9IGlwd193eF9zZXRfcmV0cnksCisJSVdfSU9DVEwoU0lPQ0dJV1JFVFJZKSA9IGlwd193eF9nZXRfcmV0cnksCisJSVdfSU9DVEwoU0lPQ1NJV0VOQ09ERSkgPSBpcHdfd3hfc2V0X2VuY29kZSwKKwlJV19JT0NUTChTSU9DR0lXRU5DT0RFKSA9IGlwd193eF9nZXRfZW5jb2RlLAorCUlXX0lPQ1RMKFNJT0NTSVdQT1dFUikgPSBpcHdfd3hfc2V0X3Bvd2VyLAorCUlXX0lPQ1RMKFNJT0NHSVdQT1dFUikgPSBpcHdfd3hfZ2V0X3Bvd2VyLAorCUlXX0lPQ1RMKFNJT0NTSVdTUFkpID0gaXdfaGFuZGxlcl9zZXRfc3B5LAorCUlXX0lPQ1RMKFNJT0NHSVdTUFkpID0gaXdfaGFuZGxlcl9nZXRfc3B5LAorCUlXX0lPQ1RMKFNJT0NTSVdUSFJTUFkpID0gaXdfaGFuZGxlcl9zZXRfdGhyc3B5LAorCUlXX0lPQ1RMKFNJT0NHSVdUSFJTUFkpID0gaXdfaGFuZGxlcl9nZXRfdGhyc3B5LAorCUlXX0lPQ1RMKFNJT0NTSVdHRU5JRSkgPSBpcHdfd3hfc2V0X2dlbmllLAorCUlXX0lPQ1RMKFNJT0NHSVdHRU5JRSkgPSBpcHdfd3hfZ2V0X2dlbmllLAorCUlXX0lPQ1RMKFNJT0NTSVdNTE1FKSA9IGlwd193eF9zZXRfbWxtZSwKKwlJV19JT0NUTChTSU9DU0lXQVVUSCkgPSBpcHdfd3hfc2V0X2F1dGgsCisJSVdfSU9DVEwoU0lPQ0dJV0FVVEgpID0gaXB3X3d4X2dldF9hdXRoLAorCUlXX0lPQ1RMKFNJT0NTSVdFTkNPREVFWFQpID0gaXB3X3d4X3NldF9lbmNvZGVleHQsCisJSVdfSU9DVEwoU0lPQ0dJV0VOQ09ERUVYVCkgPSBpcHdfd3hfZ2V0X2VuY29kZWV4dCwKIH07CiAKLSNkZWZpbmUgSVBXX1BSSVZfU0VUX1BPV0VSCVNJT0NJV0ZJUlNUUFJJVgotI2RlZmluZSBJUFdfUFJJVl9HRVRfUE9XRVIJU0lPQ0lXRklSU1RQUklWKzEKLSNkZWZpbmUgSVBXX1BSSVZfU0VUX01PREUJU0lPQ0lXRklSU1RQUklWKzIKLSNkZWZpbmUgSVBXX1BSSVZfR0VUX01PREUJU0lPQ0lXRklSU1RQUklWKzMKLSNkZWZpbmUgSVBXX1BSSVZfU0VUX1BST01JU0MJU0lPQ0lXRklSU1RQUklWKzQKLSNkZWZpbmUgSVBXX1BSSVZfUkVTRVQJCVNJT0NJV0ZJUlNUUFJJVis1CitlbnVtIHsKKwlJUFdfUFJJVl9TRVRfUE9XRVIgPSBTSU9DSVdGSVJTVFBSSVYsCisJSVBXX1BSSVZfR0VUX1BPV0VSLAorCUlQV19QUklWX1NFVF9NT0RFLAorCUlQV19QUklWX0dFVF9NT0RFLAorCUlQV19QUklWX1NFVF9QUkVBTUJMRSwKKwlJUFdfUFJJVl9HRVRfUFJFQU1CTEUsCisJSVBXX1BSSVZfUkVTRVQsCisJSVBXX1BSSVZfU1dfUkVTRVQsCisjaWZkZWYgQ09ORklHX0lQVzIyMDBfTU9OSVRPUgorCUlQV19QUklWX1NFVF9NT05JVE9SLAorI2VuZGlmCit9OwogCiBzdGF0aWMgc3RydWN0IGl3X3ByaXZfYXJncyBpcHdfcHJpdl9hcmdzW10gPSB7CiAJewpAQCAtNjIwNCwxNCArOTQ4OSwyNSBAQAogCSAuY21kID0gSVBXX1BSSVZfR0VUX01PREUsCiAJIC5nZXRfYXJncyA9IElXX1BSSVZfVFlQRV9DSEFSIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgTUFYX1dYX1NUUklORywKIAkgLm5hbWUgPSAiZ2V0X21vZGUifSwKLSNpZmRlZiBDT05GSUdfSVBXX1BST01JU0MKIAl7Ci0JIElQV19QUklWX1NFVF9QUk9NSVNDLAotCSBJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMiwgMCwgIm1vbml0b3IifSwKKwkgLmNtZCA9IElQV19QUklWX1NFVF9QUkVBTUJMRSwKKwkgLnNldF9hcmdzID0gSVdfUFJJVl9UWVBFX0lOVCB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEsCisJIC5uYW1lID0gInNldF9wcmVhbWJsZSJ9LAorCXsKKwkgLmNtZCA9IElQV19QUklWX0dFVF9QUkVBTUJMRSwKKwkgLmdldF9hcmdzID0gSVdfUFJJVl9UWVBFX0NIQVIgfCBJV19QUklWX1NJWkVfRklYRUQgfCBJRk5BTVNJWiwKKwkgLm5hbWUgPSAiZ2V0X3ByZWFtYmxlIn0sCiAJewogCSBJUFdfUFJJVl9SRVNFVCwKIAkgSVdfUFJJVl9UWVBFX0lOVCB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDAsIDAsICJyZXNldCJ9LAotI2VuZGlmCQkJCS8qIENPTkZJR19JUFdfUFJPTUlTQyAqLworCXsKKwkgSVBXX1BSSVZfU1dfUkVTRVQsCisJIElXX1BSSVZfVFlQRV9JTlQgfCBJV19QUklWX1NJWkVfRklYRUQgfCAwLCAwLCAic3dfcmVzZXQifSwKKyNpZmRlZiBDT05GSUdfSVBXMjIwMF9NT05JVE9SCisJeworCSBJUFdfUFJJVl9TRVRfTU9OSVRPUiwKKwkgSVdfUFJJVl9UWVBFX0lOVCB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDIsIDAsICJtb25pdG9yIn0sCisjZW5kaWYJCQkJLyogQ09ORklHX0lQVzIyMDBfTU9OSVRPUiAqLwogfTsKIAogc3RhdGljIGl3X2hhbmRsZXIgaXB3X3ByaXZfaGFuZGxlcltdID0gewpAQCAtNjIxOSwxOSArOTUxNSwyMyBAQAogCWlwd193eF9nZXRfcG93ZXJtb2RlLAogCWlwd193eF9zZXRfd2lyZWxlc3NfbW9kZSwKIAlpcHdfd3hfZ2V0X3dpcmVsZXNzX21vZGUsCi0jaWZkZWYgQ09ORklHX0lQV19QUk9NSVNDCi0JaXB3X3d4X3NldF9wcm9taXNjLAorCWlwd193eF9zZXRfcHJlYW1ibGUsCisJaXB3X3d4X2dldF9wcmVhbWJsZSwKIAlpcHdfd3hfcmVzZXQsCisJaXB3X3d4X3N3X3Jlc2V0LAorI2lmZGVmIENPTkZJR19JUFcyMjAwX01PTklUT1IKKwlpcHdfd3hfc2V0X21vbml0b3IsCiAjZW5kaWYKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgaXB3X3d4X2hhbmRsZXJfZGVmID0gewotCS5zdGFuZGFyZAkJPSBpcHdfd3hfaGFuZGxlcnMsCi0JLm51bV9zdGFuZGFyZAkJPSBBUlJBWV9TSVpFKGlwd193eF9oYW5kbGVycyksCi0JLm51bV9wcml2YXRlCQk9IEFSUkFZX1NJWkUoaXB3X3ByaXZfaGFuZGxlciksCi0JLm51bV9wcml2YXRlX2FyZ3MJPSBBUlJBWV9TSVpFKGlwd19wcml2X2FyZ3MpLAotCS5wcml2YXRlCQk9IGlwd19wcml2X2hhbmRsZXIsCi0JLnByaXZhdGVfYXJncwkJPSBpcHdfcHJpdl9hcmdzLAorCS5zdGFuZGFyZCA9IGlwd193eF9oYW5kbGVycywKKwkubnVtX3N0YW5kYXJkID0gQVJSQVlfU0laRShpcHdfd3hfaGFuZGxlcnMpLAorCS5udW1fcHJpdmF0ZSA9IEFSUkFZX1NJWkUoaXB3X3ByaXZfaGFuZGxlciksCisJLm51bV9wcml2YXRlX2FyZ3MgPSBBUlJBWV9TSVpFKGlwd19wcml2X2FyZ3MpLAorCS5wcml2YXRlID0gaXB3X3ByaXZfaGFuZGxlciwKKwkucHJpdmF0ZV9hcmdzID0gaXB3X3ByaXZfYXJncywKKwkuZ2V0X3dpcmVsZXNzX3N0YXRzID0gaXB3X2dldF93aXJlbGVzc19zdGF0cywKIH07CiAKIC8qCkBAIC02MjQ2LDggKzk1NDYsOCBAQAogCiAJd3N0YXRzID0gJnByaXYtPndzdGF0czsKIAotCS8qIGlmIGh3IGlzIGRpc2FibGVkLCB0aGVuIGlwdzIxMDBfZ2V0X29yZGluYWwoKSBjYW4ndCBiZSBjYWxsZWQuCi0JICogaXB3MjEwMF93eF93aXJlbGVzc19zdGF0cyBzZWVtcyB0byBiZSBjYWxsZWQgYmVmb3JlIGZ3IGlzCisJLyogaWYgaHcgaXMgZGlzYWJsZWQsIHRoZW4gaXB3X2dldF9vcmRpbmFsKCkgY2FuJ3QgYmUgY2FsbGVkLgorCSAqIG5ldGRldi0+Z2V0X3dpcmVsZXNzX3N0YXRzIHNlZW1zIHRvIGJlIGNhbGxlZCBiZWZvcmUgZncgaXMKIAkgKiBpbml0aWFsaXplZC4gIFNUQVRVU19BU1NPQ0lBVEVEIHdpbGwgb25seSBiZSBzZXQgaWYgdGhlIGh3IGlzIHVwCiAJICogYW5kIGFzc29jaWF0ZWQ7IGlmIG5vdCBhc3NvY2ljYXRlZCwgdGhlIHZhbHVlcyBhcmUgYWxsIG1lYW5pbmdsZXNzCiAJICogYW55d2F5LCBzbyBzZXQgdGhlbSBhbGwgdG8gTlVMTCBhbmQgSU5WQUxJRCAqLwpAQCAtNjI5OCw3ICs5NTk4LDcgQEAKIAlzeXNfY29uZmlnLT5kb3QxMWdfYXV0b19kZXRlY3Rpb24gPSAwOwogCXN5c19jb25maWctPmVuYWJsZV9jdHNfdG9fc2VsZiA9IDA7CiAJc3lzX2NvbmZpZy0+YnRfY29leGlzdF9jb2xsaXNpb25fdGhyID0gMDsKLQlzeXNfY29uZmlnLT5wYXNzX25vaXNlX3N0YXRzX3RvX2hvc3QgPSAxOworCXN5c19jb25maWctPnBhc3Nfbm9pc2Vfc3RhdHNfdG9faG9zdCA9IDE7CS8vMSAtLSBmaXggZm9yIDI1NgogfQogCiBzdGF0aWMgaW50IGlwd19uZXRfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtNjMwNiw5ICs5NjA2LDExIEBACiAJc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKIAlJUFdfREVCVUdfSU5GTygiZGV2LT5vcGVuXG4iKTsKIAkvKiB3ZSBzaG91bGQgYmUgdmVyaWZ5aW5nIHRoZSBkZXZpY2UgaXMgcmVhZHkgdG8gYmUgb3BlbmVkICovCisJZG93bigmcHJpdi0+c2VtKTsKIAlpZiAoIShwcml2LT5zdGF0dXMgJiBTVEFUVVNfUkZfS0lMTF9NQVNLKSAmJgogCSAgICAocHJpdi0+c3RhdHVzICYgU1RBVFVTX0FTU09DSUFURUQpKQogCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOworCXVwKCZwcml2LT5zZW0pOwogCXJldHVybiAwOwogfQogCkBAIC02MzI2LDIyICs5NjI4LDM0IEBACiB3ZSBuZWVkIHRvIGhlYXZpbHkgbW9kaWZ5IHRoZSBpZWVlODAyMTFfc2tiX3RvX3R4Yi4KICovCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBpcHdfdHhfc2tiKHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwgc3RydWN0IGllZWU4MDIxMV90eGIgKnR4YikKK3N0YXRpYyBpbmxpbmUgaW50IGlwd190eF9za2Ioc3RydWN0IGlwd19wcml2ICpwcml2LCBzdHJ1Y3QgaWVlZTgwMjExX3R4YiAqdHhiLAorCQkJICAgICBpbnQgcHJpKQogewogCXN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgKikKIAkgICAgdHhiLT5mcmFnbWVudHNbMF0tPmRhdGE7CiAJaW50IGkgPSAwOwogCXN0cnVjdCB0ZmRfZnJhbWUgKnRmZDsKKyNpZmRlZiBDT05GSUdfSVBXX1FPUworCWludCB0eF9pZCA9IGlwd19nZXRfdHhfcXVldWVfbnVtYmVyKHByaXYsIHByaSk7CisJc3RydWN0IGNseDJfdHhfcXVldWUgKnR4cSA9ICZwcml2LT50eHFbdHhfaWRdOworI2Vsc2UKIAlzdHJ1Y3QgY2x4Ml90eF9xdWV1ZSAqdHhxID0gJnByaXYtPnR4cVswXTsKKyNlbmRpZgogCXN0cnVjdCBjbHgyX3F1ZXVlICpxID0gJnR4cS0+cTsKIAl1OCBpZCwgaGRyX2xlbiwgdW5pY2FzdDsKIAl1MTYgcmVtYWluaW5nX2J5dGVzOworCWludCBmYzsKKworCS8qIElmIHRoZXJlIGlzbid0IHJvb20gaW4gdGhlIHF1ZXVlLCB3ZSByZXR1cm4gYnVzeSBhbmQgbGV0IHRoZQorCSAqIG5ldHdvcmsgc3RhY2sgcmVxdWV1ZSB0aGUgcGFja2V0IGZvciB1cyAqLworCWlmIChpcHdfcXVldWVfc3BhY2UocSkgPCBxLT5oaWdoX21hcmspCisJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAogCXN3aXRjaCAocHJpdi0+aWVlZS0+aXdfbW9kZSkgewogCWNhc2UgSVdfTU9ERV9BREhPQzoKIAkJaGRyX2xlbiA9IElFRUU4MDIxMV8zQUREUl9MRU47Ci0JCXVuaWNhc3QgPSAhaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSkgJiYKLQkJICAgICFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIxKTsKKwkJdW5pY2FzdCA9ICEoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSkgfHwKKwkJCSAgICBpc19icm9hZGNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIxKSk7CiAJCWlkID0gaXB3X2ZpbmRfc3RhdGlvbihwcml2LCBoZHItPmFkZHIxKTsKIAkJaWYgKGlkID09IElQV19JTlZBTElEX1NUQVRJT04pIHsKIAkJCWlkID0gaXB3X2FkZF9zdGF0aW9uKHByaXYsIGhkci0+YWRkcjEpOwpAQCAtNjM1Niw4ICs5NjcwLDggQEAKIAogCWNhc2UgSVdfTU9ERV9JTkZSQToKIAlkZWZhdWx0OgotCQl1bmljYXN0ID0gIWlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjMpICYmCi0JCSAgICAhaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMyk7CisJCXVuaWNhc3QgPSAhKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjMpIHx8CisJCQkgICAgaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMykpOwogCQloZHJfbGVuID0gSUVFRTgwMjExXzNBRERSX0xFTjsKIAkJaWQgPSAwOwogCQlicmVhazsKQEAgLTYzNzIsMjYgKzk2ODYsODMgQEAKIAl0ZmQtPmNvbnRyb2xfZmxhZ3MuY29udHJvbF9iaXRzID0gVEZEX05FRURfSVJRX01BU0s7CiAKIAl0ZmQtPnUuZGF0YS5jbWRfaWQgPSBESU5PX0NNRF9UWDsKLQl0ZmQtPnUuZGF0YS5sZW4gPSB0eGItPnBheWxvYWRfc2l6ZTsKKwl0ZmQtPnUuZGF0YS5sZW4gPSBjcHVfdG9fbGUxNih0eGItPnBheWxvYWRfc2l6ZSk7CiAJcmVtYWluaW5nX2J5dGVzID0gdHhiLT5wYXlsb2FkX3NpemU7Ci0JaWYgKHVubGlrZWx5KCF1bmljYXN0KSkKLQkJdGZkLT51LmRhdGEudHhfZmxhZ3MgPSBEQ1RfRkxBR19OT19XRVA7Ci0JZWxzZQotCQl0ZmQtPnUuZGF0YS50eF9mbGFncyA9IERDVF9GTEFHX05PX1dFUCB8IERDVF9GTEFHX0FDS19SRVFEOwogCiAJaWYgKHByaXYtPmFzc29jX3JlcXVlc3QuaWVlZV9tb2RlID09IElQV19CX01PREUpCi0JCXRmZC0+dS5kYXRhLnR4X2ZsYWdzX2V4dCA9IERDVF9GTEFHX0VYVF9NT0RFX0NDSzsKKwkJdGZkLT51LmRhdGEudHhfZmxhZ3NfZXh0IHw9IERDVF9GTEFHX0VYVF9NT0RFX0NDSzsKIAllbHNlCi0JCXRmZC0+dS5kYXRhLnR4X2ZsYWdzX2V4dCA9IERDVF9GTEFHX0VYVF9NT0RFX09GRE07CisJCXRmZC0+dS5kYXRhLnR4X2ZsYWdzX2V4dCB8PSBEQ1RfRkxBR19FWFRfTU9ERV9PRkRNOwogCi0JaWYgKHByaXYtPmNvbmZpZyAmIENGR19QUkVBTUJMRSkKLQkJdGZkLT51LmRhdGEudHhfZmxhZ3MgfD0gRENUX0ZMQUdfU0hPUlRfUFJFTUJMOworCWlmIChwcml2LT5hc3NvY19yZXF1ZXN0LnByZWFtYmxlX2xlbmd0aCA9PSBEQ1RfRkxBR19TSE9SVF9QUkVBTUJMRSkKKwkJdGZkLT51LmRhdGEudHhfZmxhZ3MgfD0gRENUX0ZMQUdfU0hPUlRfUFJFQU1CTEU7CisKKwlmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY3RsKTsKKwloZHItPmZyYW1lX2N0bCA9IGNwdV90b19sZTE2KGZjICYgfklFRUU4MDIxMV9GQ1RMX01PUkVGUkFHUyk7CiAKIAltZW1jcHkoJnRmZC0+dS5kYXRhLnRmZC50ZmRfMjQubWNoZHIsIGhkciwgaGRyX2xlbik7CiAKKwlpZiAobGlrZWx5KHVuaWNhc3QpKQorCQl0ZmQtPnUuZGF0YS50eF9mbGFncyB8PSBEQ1RfRkxBR19BQ0tfUkVRRDsKKworCWlmICh0eGItPmVuY3J5cHRlZCAmJiAhcHJpdi0+aWVlZS0+aG9zdF9lbmNyeXB0KSB7CisJCXN3aXRjaCAocHJpdi0+aWVlZS0+c2VjLmxldmVsKSB7CisJCWNhc2UgU0VDX0xFVkVMXzM6CisJCQl0ZmQtPnUuZGF0YS50ZmQudGZkXzI0Lm1jaGRyLmZyYW1lX2N0bCB8PQorCQkJICAgIElFRUU4MDIxMV9GQ1RMX1BST1RFQ1RFRDsKKwkJCS8qIFhYWDogQUNLIGZsYWcgbXVzdCBiZSBzZXQgZm9yIENDTVAgZXZlbiBpZiBpdAorCQkJICogaXMgYSBtdWx0aWNhc3QvYnJvYWRjYXN0IHBhY2tldCwgYmVjYXVzZSBDQ01QCisJCQkgKiBncm91cCBjb21tdW5pY2F0aW9uIGVuY3J5cHRlZCBieSBHVEsgaXMKKwkJCSAqIGFjdHVhbGx5IGRvbmUgYnkgdGhlIEFQLiAqLworCQkJaWYgKCF1bmljYXN0KQorCQkJCXRmZC0+dS5kYXRhLnR4X2ZsYWdzIHw9IERDVF9GTEFHX0FDS19SRVFEOworCisJCQl0ZmQtPnUuZGF0YS50eF9mbGFncyAmPSB+RENUX0ZMQUdfTk9fV0VQOworCQkJdGZkLT51LmRhdGEudHhfZmxhZ3NfZXh0IHw9IERDVF9GTEFHX0VYVF9TRUNVUklUWV9DQ007CisJCQl0ZmQtPnUuZGF0YS5rZXlfaW5kZXggPSAwOworCQkJdGZkLT51LmRhdGEua2V5X2luZGV4IHw9IERDVF9XRVBfSU5ERVhfVVNFX0lNTUVESUFURTsKKwkJCWJyZWFrOworCQljYXNlIFNFQ19MRVZFTF8yOgorCQkJdGZkLT51LmRhdGEudGZkLnRmZF8yNC5tY2hkci5mcmFtZV9jdGwgfD0KKwkJCSAgICBJRUVFODAyMTFfRkNUTF9QUk9URUNURUQ7CisJCQl0ZmQtPnUuZGF0YS50eF9mbGFncyAmPSB+RENUX0ZMQUdfTk9fV0VQOworCQkJdGZkLT51LmRhdGEudHhfZmxhZ3NfZXh0IHw9IERDVF9GTEFHX0VYVF9TRUNVUklUWV9US0lQOworCQkJdGZkLT51LmRhdGEua2V5X2luZGV4ID0gRENUX1dFUF9JTkRFWF9VU0VfSU1NRURJQVRFOworCQkJYnJlYWs7CisJCWNhc2UgU0VDX0xFVkVMXzE6CisJCQl0ZmQtPnUuZGF0YS50ZmQudGZkXzI0Lm1jaGRyLmZyYW1lX2N0bCB8PQorCQkJICAgIElFRUU4MDIxMV9GQ1RMX1BST1RFQ1RFRDsKKwkJCXRmZC0+dS5kYXRhLmtleV9pbmRleCA9IHByaXYtPmllZWUtPnR4X2tleWlkeDsKKwkJCWlmIChwcml2LT5pZWVlLT5zZWMua2V5X3NpemVzW3ByaXYtPmllZWUtPnR4X2tleWlkeF0gPD0KKwkJCSAgICA0MCkKKwkJCQl0ZmQtPnUuZGF0YS5rZXlfaW5kZXggfD0gRENUX1dFUF9LRVlfNjRCaXQ7CisJCQllbHNlCisJCQkJdGZkLT51LmRhdGEua2V5X2luZGV4IHw9IERDVF9XRVBfS0VZXzEyOEJpdDsKKwkJCWJyZWFrOworCQljYXNlIFNFQ19MRVZFTF8wOgorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwcmludGsoS0VSTl9FUlIgIlVua25vdyBzZWN1cml0eSBsZXZlbCAlZFxuIiwKKwkJCSAgICAgICBwcml2LT5pZWVlLT5zZWMubGV2ZWwpOworCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UKKwkJLyogTm8gaGFyZHdhcmUgZW5jcnlwdGlvbiAqLworCQl0ZmQtPnUuZGF0YS50eF9mbGFncyB8PSBEQ1RfRkxBR19OT19XRVA7CisKKyNpZmRlZiBDT05GSUdfSVBXX1FPUworCWlwd19xb3Nfc2V0X3R4X3F1ZXVlX2NvbW1hbmQocHJpdiwgcHJpLCAmKHRmZC0+dS5kYXRhKSwgdW5pY2FzdCk7CisjZW5kaWYJCQkJLyogQ09ORklHX0lQV19RT1MgKi8KKwogCS8qIHBheWxvYWQgKi8KLQl0ZmQtPnUuZGF0YS5udW1fY2h1bmtzID0gbWluKCh1OCkgKE5VTV9URkRfQ0hVTktTIC0gMiksIHR4Yi0+bnJfZnJhZ3MpOwotCWZvciAoaSA9IDA7IGkgPCB0ZmQtPnUuZGF0YS5udW1fY2h1bmtzOyBpKyspIHsKKwl0ZmQtPnUuZGF0YS5udW1fY2h1bmtzID0gY3B1X3RvX2xlMzIobWluKCh1OCkgKE5VTV9URkRfQ0hVTktTIC0gMiksCisJCQkJCQkgdHhiLT5ucl9mcmFncykpOworCUlQV19ERUJVR19GUkFHKCIlaSBmcmFnbWVudHMgYmVpbmcgc2VudCBhcyAlaSBjaHVua3MuXG4iLAorCQkgICAgICAgdHhiLT5ucl9mcmFncywgbGUzMl90b19jcHUodGZkLT51LmRhdGEubnVtX2NodW5rcykpOworCWZvciAoaSA9IDA7IGkgPCBsZTMyX3RvX2NwdSh0ZmQtPnUuZGF0YS5udW1fY2h1bmtzKTsgaSsrKSB7CisJCUlQV19ERUJVR19GUkFHKCJBZGRpbmcgZnJhZ21lbnQgJWkgb2YgJWkgKCVkIGJ5dGVzKS5cbiIsCisJCQkgICAgICAgaSwgbGUzMl90b19jcHUodGZkLT51LmRhdGEubnVtX2NodW5rcyksCisJCQkgICAgICAgdHhiLT5mcmFnbWVudHNbaV0tPmxlbiAtIGhkcl9sZW4pOwogCQlJUFdfREVCVUdfVFgoIkR1bXBpbmcgVFggcGFja2V0IGZyYWcgJWkgb2YgJWkgKCVkIGJ5dGVzKTpcbiIsCiAJCQkgICAgIGksIHRmZC0+dS5kYXRhLm51bV9jaHVua3MsCiAJCQkgICAgIHR4Yi0+ZnJhZ21lbnRzW2ldLT5sZW4gLSBoZHJfbGVuKTsKQEAgLTYzOTksMTEgKzk3NzAsMTMgQEAKIAkJCSAgIHR4Yi0+ZnJhZ21lbnRzW2ldLT5sZW4gLSBoZHJfbGVuKTsKIAogCQl0ZmQtPnUuZGF0YS5jaHVua19wdHJbaV0gPQotCQkgICAgcGNpX21hcF9zaW5nbGUocHJpdi0+cGNpX2RldiwKLQkJCQkgICB0eGItPmZyYWdtZW50c1tpXS0+ZGF0YSArIGhkcl9sZW4sCi0JCQkJICAgdHhiLT5mcmFnbWVudHNbaV0tPmxlbiAtIGhkcl9sZW4sCi0JCQkJICAgUENJX0RNQV9UT0RFVklDRSk7Ci0JCXRmZC0+dS5kYXRhLmNodW5rX2xlbltpXSA9IHR4Yi0+ZnJhZ21lbnRzW2ldLT5sZW4gLSBoZHJfbGVuOworCQkgICAgY3B1X3RvX2xlMzIocGNpX21hcF9zaW5nbGUKKwkJCQkocHJpdi0+cGNpX2RldiwKKwkJCQkgdHhiLT5mcmFnbWVudHNbaV0tPmRhdGEgKyBoZHJfbGVuLAorCQkJCSB0eGItPmZyYWdtZW50c1tpXS0+bGVuIC0gaGRyX2xlbiwKKwkJCQkgUENJX0RNQV9UT0RFVklDRSkpOworCQl0ZmQtPnUuZGF0YS5jaHVua19sZW5baV0gPQorCQkgICAgY3B1X3RvX2xlMTYodHhiLT5mcmFnbWVudHNbaV0tPmxlbiAtIGhkcl9sZW4pOwogCX0KIAogCWlmIChpICE9IHR4Yi0+bnJfZnJhZ3MpIHsKQEAgLTY0MTgsOSArOTc5MSwxMCBAQAogCQkgICAgICAgcmVtYWluaW5nX2J5dGVzKTsKIAkJc2tiID0gYWxsb2Nfc2tiKHJlbWFpbmluZ19ieXRlcywgR0ZQX0FUT01JQyk7CiAJCWlmIChza2IgIT0gTlVMTCkgewotCQkJdGZkLT51LmRhdGEuY2h1bmtfbGVuW2ldID0gcmVtYWluaW5nX2J5dGVzOworCQkJdGZkLT51LmRhdGEuY2h1bmtfbGVuW2ldID0gY3B1X3RvX2xlMTYocmVtYWluaW5nX2J5dGVzKTsKIAkJCWZvciAoaiA9IGk7IGogPCB0eGItPm5yX2ZyYWdzOyBqKyspIHsKIAkJCQlpbnQgc2l6ZSA9IHR4Yi0+ZnJhZ21lbnRzW2pdLT5sZW4gLSBoZHJfbGVuOworCiAJCQkJcHJpbnRrKEtFUk5fSU5GTyAiQWRkaW5nIGZyYWcgJWQgJWQuLi5cbiIsCiAJCQkJICAgICAgIGosIHNpemUpOwogCQkJCW1lbWNweShza2JfcHV0KHNrYiwgc2l6ZSksCkBAIC02NDI5LDEwICs5ODAzLDE0IEBACiAJCQlkZXZfa2ZyZWVfc2tiX2FueSh0eGItPmZyYWdtZW50c1tpXSk7CiAJCQl0eGItPmZyYWdtZW50c1tpXSA9IHNrYjsKIAkJCXRmZC0+dS5kYXRhLmNodW5rX3B0cltpXSA9Ci0JCQkgICAgcGNpX21hcF9zaW5nbGUocHJpdi0+cGNpX2Rldiwgc2tiLT5kYXRhLAotCQkJCQkgICB0ZmQtPnUuZGF0YS5jaHVua19sZW5baV0sCi0JCQkJCSAgIFBDSV9ETUFfVE9ERVZJQ0UpOwotCQkJdGZkLT51LmRhdGEubnVtX2NodW5rcysrOworCQkJICAgIGNwdV90b19sZTMyKHBjaV9tYXBfc2luZ2xlCisJCQkJCShwcml2LT5wY2lfZGV2LCBza2ItPmRhdGEsCisJCQkJCSB0ZmQtPnUuZGF0YS5jaHVua19sZW5baV0sCisJCQkJCSBQQ0lfRE1BX1RPREVWSUNFKSk7CisKKwkJCXRmZC0+dS5kYXRhLm51bV9jaHVua3MgPQorCQkJICAgIGNwdV90b19sZTMyKGxlMzJfdG9fY3B1KHRmZC0+dS5kYXRhLm51bV9jaHVua3MpICsKKwkJCQkJMSk7CiAJCX0KIAl9CiAKQEAgLTY0NDAsMTQgKzk4MTgsMjggQEAKIAlxLT5maXJzdF9lbXB0eSA9IGlwd19xdWV1ZV9pbmNfd3JhcChxLT5maXJzdF9lbXB0eSwgcS0+bl9iZCk7CiAJaXB3X3dyaXRlMzIocHJpdiwgcS0+cmVnX3csIHEtPmZpcnN0X2VtcHR5KTsKIAotCWlmIChpcHdfcXVldWVfc3BhY2UocSkgPCBxLT5oaWdoX21hcmspCi0JCW5ldGlmX3N0b3BfcXVldWUocHJpdi0+bmV0X2Rldik7Ci0KLQlyZXR1cm47CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAogICAgICAgZHJvcDoKIAlJUFdfREVCVUdfRFJPUCgiU2lsZW50bHkgZHJvcHBpbmcgVHggcGFja2V0LlxuIik7CiAJaWVlZTgwMjExX3R4Yl9mcmVlKHR4Yik7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKK30KKworc3RhdGljIGludCBpcHdfbmV0X2lzX3F1ZXVlX2Z1bGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHByaSkKK3sKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworI2lmZGVmIENPTkZJR19JUFdfUU9TCisJaW50IHR4X2lkID0gaXB3X2dldF90eF9xdWV1ZV9udW1iZXIocHJpdiwgcHJpKTsKKwlzdHJ1Y3QgY2x4Ml90eF9xdWV1ZSAqdHhxID0gJnByaXYtPnR4cVt0eF9pZF07CisjZWxzZQorCXN0cnVjdCBjbHgyX3R4X3F1ZXVlICp0eHEgPSAmcHJpdi0+dHhxWzBdOworI2VuZGlmCQkJCS8qIENPTkZJR19JUFdfUU9TICovCisKKwlpZiAoaXB3X3F1ZXVlX3NwYWNlKCZ0eHEtPnEpIDwgdHhxLT5xLmhpZ2hfbWFyaykKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBpcHdfbmV0X2hhcmRfc3RhcnRfeG1pdChzdHJ1Y3QgaWVlZTgwMjExX3R4YiAqdHhiLApAQCAtNjQ1NSw5ICs5ODQ3LDkgQEAKIHsKIAlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldDsKIAogCUlQV19ERUJVR19UWCgiZGV2LT54bWl0KCVkIGJ5dGVzKVxuIiwgdHhiLT5wYXlsb2FkX3NpemUpOwotCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAogCWlmICghKHByaXYtPnN0YXR1cyAmIFNUQVRVU19BU1NPQ0lBVEVEKSkgewpAQCAtNjQ2NywxMCArOTg1OSwxMiBAQAogCQlnb3RvIGZhaWxfdW5sb2NrOwogCX0KIAotCWlwd190eF9za2IocHJpdiwgdHhiKTsKLQorCXJldCA9IGlwd190eF9za2IocHJpdiwgdHhiLCBwcmkpOworCWlmIChyZXQgPT0gTkVUREVWX1RYX09LKQorCQlfX2lwd19sZWRfYWN0aXZpdHlfb24ocHJpdik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCXJldHVybiAwOworCisJcmV0dXJuIHJldDsKIAogICAgICAgZmFpbF91bmxvY2s6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwpAQCAtNjQ5NywxMSArOTg5MSwxMyBAQAogCXN0cnVjdCBzb2NrYWRkciAqYWRkciA9IHA7CiAJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGFkZHItPnNhX2RhdGEpKQogCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CisJZG93bigmcHJpdi0+c2VtKTsKIAlwcml2LT5jb25maWcgfD0gQ0ZHX0NVU1RPTV9NQUM7CiAJbWVtY3B5KHByaXYtPm1hY19hZGRyLCBhZGRyLT5zYV9kYXRhLCBFVEhfQUxFTik7CiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFNldHRpbmcgTUFDIHRvICIgTUFDX0ZNVCAiXG4iLAogCSAgICAgICBwcml2LT5uZXRfZGV2LT5uYW1lLCBNQUNfQVJHKHByaXYtPm1hY19hZGRyKSk7Ci0JaXB3X2FkYXB0ZXJfcmVzdGFydChwcml2KTsKKwlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPmFkYXB0ZXJfcmVzdGFydCk7CisJdXAoJnByaXYtPnNlbSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTY1MjQsNyArOTkyMCw3IEBACiAJc25wcmludGYoaW5mby0+ZndfdmVyc2lvbiwgc2l6ZW9mKGluZm8tPmZ3X3ZlcnNpb24pLCAiJXMgKCVzKSIsCiAJCSB2ZXJzLCBkYXRlKTsKIAlzdHJjcHkoaW5mby0+YnVzX2luZm8sIHBjaV9uYW1lKHAtPnBjaV9kZXYpKTsKLQlpbmZvLT5lZWR1bXBfbGVuID0gQ1gyX0VFUFJPTV9JTUFHRV9TSVpFOworCWluZm8tPmVlZHVtcF9sZW4gPSBJUFdfRUVQUk9NX0lNQUdFX1NJWkU7CiB9CiAKIHN0YXRpYyB1MzIgaXB3X2V0aHRvb2xfZ2V0X2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTY1MzUsNyArOTkzMSw3IEBACiAKIHN0YXRpYyBpbnQgaXB3X2V0aHRvb2xfZ2V0X2VlcHJvbV9sZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlyZXR1cm4gQ1gyX0VFUFJPTV9JTUFHRV9TSVpFOworCXJldHVybiBJUFdfRUVQUk9NX0lNQUdFX1NJWkU7CiB9CiAKIHN0YXRpYyBpbnQgaXB3X2V0aHRvb2xfZ2V0X2VlcHJvbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LApAQCAtNjU0MywxMCArOTkzOSwxMSBAQAogewogCXN0cnVjdCBpcHdfcHJpdiAqcCA9IGllZWU4MDIxMV9wcml2KGRldik7CiAKLQlpZiAoZWVwcm9tLT5vZmZzZXQgKyBlZXByb20tPmxlbiA+IENYMl9FRVBST01fSU1BR0VfU0laRSkKKwlpZiAoZWVwcm9tLT5vZmZzZXQgKyBlZXByb20tPmxlbiA+IElQV19FRVBST01fSU1BR0VfU0laRSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0KLQltZW1jcHkoYnl0ZXMsICYoKHU4ICopIHAtPmVlcHJvbSlbZWVwcm9tLT5vZmZzZXRdLCBlZXByb20tPmxlbik7CisJZG93bigmcC0+c2VtKTsKKwltZW1jcHkoYnl0ZXMsICZwLT5lZXByb21bZWVwcm9tLT5vZmZzZXRdLCBlZXByb20tPmxlbik7CisJdXAoJnAtPnNlbSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTY1NTYsMjMgKzk5NTMsMjMgQEAKIAlzdHJ1Y3QgaXB3X3ByaXYgKnAgPSBpZWVlODAyMTFfcHJpdihkZXYpOwogCWludCBpOwogCi0JaWYgKGVlcHJvbS0+b2Zmc2V0ICsgZWVwcm9tLT5sZW4gPiBDWDJfRUVQUk9NX0lNQUdFX1NJWkUpCisJaWYgKGVlcHJvbS0+b2Zmc2V0ICsgZWVwcm9tLT5sZW4gPiBJUFdfRUVQUk9NX0lNQUdFX1NJWkUpCiAJCXJldHVybiAtRUlOVkFMOwotCi0JbWVtY3B5KCYoKHU4ICopIHAtPmVlcHJvbSlbZWVwcm9tLT5vZmZzZXRdLCBieXRlcywgZWVwcm9tLT5sZW4pOworCWRvd24oJnAtPnNlbSk7CisJbWVtY3B5KCZwLT5lZXByb21bZWVwcm9tLT5vZmZzZXRdLCBieXRlcywgZWVwcm9tLT5sZW4pOwogCWZvciAoaSA9IElQV19FRVBST01fREFUQTsKLQkgICAgIGkgPCBJUFdfRUVQUk9NX0RBVEEgKyBDWDJfRUVQUk9NX0lNQUdFX1NJWkU7IGkrKykKKwkgICAgIGkgPCBJUFdfRUVQUk9NX0RBVEEgKyBJUFdfRUVQUk9NX0lNQUdFX1NJWkU7IGkrKykKIAkJaXB3X3dyaXRlOChwLCBpLCBwLT5lZXByb21baV0pOwotCisJdXAoJnAtPnNlbSk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgaXB3X2V0aHRvb2xfb3BzID0gewotCS5nZXRfbGluawk9IGlwd19ldGh0b29sX2dldF9saW5rLAotCS5nZXRfZHJ2aW5mbwk9IGlwd19ldGh0b29sX2dldF9kcnZpbmZvLAotCS5nZXRfZWVwcm9tX2xlbgk9IGlwd19ldGh0b29sX2dldF9lZXByb21fbGVuLAotCS5nZXRfZWVwcm9tCT0gaXB3X2V0aHRvb2xfZ2V0X2VlcHJvbSwKLQkuc2V0X2VlcHJvbQk9IGlwd19ldGh0b29sX3NldF9lZXByb20sCisJLmdldF9saW5rID0gaXB3X2V0aHRvb2xfZ2V0X2xpbmssCisJLmdldF9kcnZpbmZvID0gaXB3X2V0aHRvb2xfZ2V0X2RydmluZm8sCisJLmdldF9lZXByb21fbGVuID0gaXB3X2V0aHRvb2xfZ2V0X2VlcHJvbV9sZW4sCisJLmdldF9lZXByb20gPSBpcHdfZXRodG9vbF9nZXRfZWVwcm9tLAorCS5zZXRfZWVwcm9tID0gaXB3X2V0aHRvb2xfc2V0X2VlcHJvbSwKIH07CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBpcHdfaXNyKGludCBpcnEsIHZvaWQgKmRhdGEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQpAQCAtNjU5MCw4ICs5OTg3LDggQEAKIAkJZ290byBub25lOwogCX0KIAotCWludGEgPSBpcHdfcmVhZDMyKHByaXYsIENYMl9JTlRBX1JXKTsKLQlpbnRhX21hc2sgPSBpcHdfcmVhZDMyKHByaXYsIENYMl9JTlRBX01BU0tfUik7CisJaW50YSA9IGlwd19yZWFkMzIocHJpdiwgSVBXX0lOVEFfUlcpOworCWludGFfbWFzayA9IGlwd19yZWFkMzIocHJpdiwgSVBXX0lOVEFfTUFTS19SKTsKIAogCWlmIChpbnRhID09IDB4RkZGRkZGRkYpIHsKIAkJLyogSGFyZHdhcmUgZGlzYXBwZWFyZWQgKi8KQEAgLTY1OTksNyArOTk5Niw3IEBACiAJCWdvdG8gbm9uZTsKIAl9CiAKLQlpZiAoIShpbnRhICYgKENYMl9JTlRBX01BU0tfQUxMICYgaW50YV9tYXNrKSkpIHsKKwlpZiAoIShpbnRhICYgKElQV19JTlRBX01BU0tfQUxMICYgaW50YV9tYXNrKSkpIHsKIAkJLyogU2hhcmVkIGludGVycnVwdCAqLwogCQlnb3RvIG5vbmU7CiAJfQpAQCAtNjYwOCw4ICsxMDAwNSw4IEBACiAJaXB3X2Rpc2FibGVfaW50ZXJydXB0cyhwcml2KTsKIAogCS8qIGFjayBjdXJyZW50IGludGVycnVwdHMgKi8KLQlpbnRhICY9IChDWDJfSU5UQV9NQVNLX0FMTCAmIGludGFfbWFzayk7Ci0JaXB3X3dyaXRlMzIocHJpdiwgQ1gyX0lOVEFfUlcsIGludGEpOworCWludGEgJj0gKElQV19JTlRBX01BU0tfQUxMICYgaW50YV9tYXNrKTsKKwlpcHdfd3JpdGUzMihwcml2LCBJUFdfSU5UQV9SVywgaW50YSk7CiAKIAkvKiBDYWNoZSBJTlRBIHZhbHVlIGZvciBvdXIgdGFza2xldCAqLwogCXByaXYtPmlzcl9pbnRhID0gaW50YTsKQEAgLTY2NTUsMjggKzEwMDUyLDExNiBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIH0KIAorc3RhdGljIHZvaWQgaXB3X2JnX3JmX2tpbGwodm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBkYXRhOworCWRvd24oJnByaXYtPnNlbSk7CisJaXB3X3JmX2tpbGwoZGF0YSk7CisJdXAoJnByaXYtPnNlbSk7Cit9CisKK3ZvaWQgaXB3X2xpbmtfdXAoc3RydWN0IGlwd19wcml2ICpwcml2KQoreworCXByaXYtPmxhc3Rfc2VxX251bSA9IC0xOworCXByaXYtPmxhc3RfZnJhZ19udW0gPSAtMTsKKwlwcml2LT5sYXN0X3BhY2tldF90aW1lID0gMDsKKworCW5ldGlmX2NhcnJpZXJfb24ocHJpdi0+bmV0X2Rldik7CisJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQocHJpdi0+bmV0X2RldikpIHsKKwkJSVBXX0RFQlVHX05PVElGKCJ3YWtpbmcgcXVldWVcbiIpOworCQluZXRpZl93YWtlX3F1ZXVlKHByaXYtPm5ldF9kZXYpOworCX0gZWxzZSB7CisJCUlQV19ERUJVR19OT1RJRigic3RhcnRpbmcgcXVldWVcbiIpOworCQluZXRpZl9zdGFydF9xdWV1ZShwcml2LT5uZXRfZGV2KTsKKwl9CisKKwljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT5yZXF1ZXN0X3NjYW4pOworCWlwd19yZXNldF9zdGF0cyhwcml2KTsKKwkvKiBFbnN1cmUgdGhlIHJhdGUgaXMgdXBkYXRlZCBpbW1lZGlhdGVseSAqLworCXByaXYtPmxhc3RfcmF0ZSA9IGlwd19nZXRfY3VycmVudF9yYXRlKHByaXYpOworCWlwd19nYXRoZXJfc3RhdHMocHJpdik7CisJaXB3X2xlZF9saW5rX3VwKHByaXYpOworCW5vdGlmeV93eF9hc3NvY19ldmVudChwcml2KTsKKworCWlmIChwcml2LT5jb25maWcgJiBDRkdfQkFDS0dST1VORF9TQ0FOKQorCQlxdWV1ZV9kZWxheWVkX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+cmVxdWVzdF9zY2FuLCBIWik7Cit9CisKK3N0YXRpYyB2b2lkIGlwd19iZ19saW5rX3VwKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gZGF0YTsKKwlkb3duKCZwcml2LT5zZW0pOworCWlwd19saW5rX3VwKGRhdGEpOworCXVwKCZwcml2LT5zZW0pOworfQorCit2b2lkIGlwd19saW5rX2Rvd24oc3RydWN0IGlwd19wcml2ICpwcml2KQoreworCWlwd19sZWRfbGlua19kb3duKHByaXYpOworCW5ldGlmX2NhcnJpZXJfb2ZmKHByaXYtPm5ldF9kZXYpOworCW5ldGlmX3N0b3BfcXVldWUocHJpdi0+bmV0X2Rldik7CisJbm90aWZ5X3d4X2Fzc29jX2V2ZW50KHByaXYpOworCisJLyogQ2FuY2VsIGFueSBxdWV1ZWQgd29yayAuLi4gKi8KKwljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT5yZXF1ZXN0X3NjYW4pOworCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPmFkaG9jX2NoZWNrKTsKKwljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT5nYXRoZXJfc3RhdHMpOworCisJaXB3X3Jlc2V0X3N0YXRzKHByaXYpOworCisJaWYgKCEocHJpdi0+c3RhdHVzICYgU1RBVFVTX0VYSVRfUEVORElORykpIHsKKwkJLyogUXVldWUgdXAgYW5vdGhlciBzY2FuLi4uICovCisJCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+cmVxdWVzdF9zY2FuKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGlwd19iZ19saW5rX2Rvd24odm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBkYXRhOworCWRvd24oJnByaXYtPnNlbSk7CisJaXB3X2xpbmtfZG93bihkYXRhKTsKKwl1cCgmcHJpdi0+c2VtKTsKK30KKwogc3RhdGljIGludCBpcHdfc2V0dXBfZGVmZXJyZWRfd29yayhzdHJ1Y3QgaXB3X3ByaXYgKnByaXYpCiB7CiAJaW50IHJldCA9IDA7CiAKIAlwcml2LT53b3JrcXVldWUgPSBjcmVhdGVfd29ya3F1ZXVlKERSVl9OQU1FKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwcml2LT53YWl0X2NvbW1hbmRfcXVldWUpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnByaXYtPndhaXRfc3RhdGUpOwogCi0JSU5JVF9XT1JLKCZwcml2LT5hZGhvY19jaGVjaywgaXB3X2FkaG9jX2NoZWNrLCBwcml2KTsKLQlJTklUX1dPUksoJnByaXYtPmFzc29jaWF0ZSwgaXB3X2Fzc29jaWF0ZSwgcHJpdik7Ci0JSU5JVF9XT1JLKCZwcml2LT5kaXNhc3NvY2lhdGUsIGlwd19kaXNhc3NvY2lhdGUsIHByaXYpOwotCUlOSVRfV09SSygmcHJpdi0+cnhfcmVwbGVuaXNoLCBpcHdfcnhfcXVldWVfcmVwbGVuaXNoLCBwcml2KTsKLQlJTklUX1dPUksoJnByaXYtPmFkYXB0ZXJfcmVzdGFydCwgaXB3X2FkYXB0ZXJfcmVzdGFydCwgcHJpdik7Ci0JSU5JVF9XT1JLKCZwcml2LT5yZl9raWxsLCBpcHdfcmZfa2lsbCwgcHJpdik7Ci0JSU5JVF9XT1JLKCZwcml2LT51cCwgKHZvaWQgKCopKHZvaWQgKikpaXB3X3VwLCBwcml2KTsKLQlJTklUX1dPUksoJnByaXYtPmRvd24sICh2b2lkICgqKSh2b2lkICopKWlwd19kb3duLCBwcml2KTsKKwlJTklUX1dPUksoJnByaXYtPmFkaG9jX2NoZWNrLCBpcHdfYmdfYWRob2NfY2hlY2ssIHByaXYpOworCUlOSVRfV09SSygmcHJpdi0+YXNzb2NpYXRlLCBpcHdfYmdfYXNzb2NpYXRlLCBwcml2KTsKKwlJTklUX1dPUksoJnByaXYtPmRpc2Fzc29jaWF0ZSwgaXB3X2JnX2Rpc2Fzc29jaWF0ZSwgcHJpdik7CisJSU5JVF9XT1JLKCZwcml2LT5zeXN0ZW1fY29uZmlnLCBpcHdfc3lzdGVtX2NvbmZpZywgcHJpdik7CisJSU5JVF9XT1JLKCZwcml2LT5yeF9yZXBsZW5pc2gsIGlwd19iZ19yeF9xdWV1ZV9yZXBsZW5pc2gsIHByaXYpOworCUlOSVRfV09SSygmcHJpdi0+YWRhcHRlcl9yZXN0YXJ0LCBpcHdfYmdfYWRhcHRlcl9yZXN0YXJ0LCBwcml2KTsKKwlJTklUX1dPUksoJnByaXYtPnJmX2tpbGwsIGlwd19iZ19yZl9raWxsLCBwcml2KTsKKwlJTklUX1dPUksoJnByaXYtPnVwLCAodm9pZCAoKikodm9pZCAqKSlpcHdfYmdfdXAsIHByaXYpOworCUlOSVRfV09SSygmcHJpdi0+ZG93biwgKHZvaWQgKCopKHZvaWQgKikpaXB3X2JnX2Rvd24sIHByaXYpOwogCUlOSVRfV09SSygmcHJpdi0+cmVxdWVzdF9zY2FuLAogCQkgICh2b2lkICgqKSh2b2lkICopKWlwd19yZXF1ZXN0X3NjYW4sIHByaXYpOwogCUlOSVRfV09SSygmcHJpdi0+Z2F0aGVyX3N0YXRzLAotCQkgICh2b2lkICgqKSh2b2lkICopKWlwd19nYXRoZXJfc3RhdHMsIHByaXYpOwotCUlOSVRfV09SSygmcHJpdi0+YWJvcnRfc2NhbiwgKHZvaWQgKCopKHZvaWQgKikpaXB3X2Fib3J0X3NjYW4sIHByaXYpOwotCUlOSVRfV09SSygmcHJpdi0+cm9hbSwgaXB3X3JvYW0sIHByaXYpOwotCUlOSVRfV09SSygmcHJpdi0+c2Nhbl9jaGVjaywgaXB3X3NjYW5fY2hlY2ssIHByaXYpOworCQkgICh2b2lkICgqKSh2b2lkICopKWlwd19iZ19nYXRoZXJfc3RhdHMsIHByaXYpOworCUlOSVRfV09SSygmcHJpdi0+YWJvcnRfc2NhbiwgKHZvaWQgKCopKHZvaWQgKikpaXB3X2JnX2Fib3J0X3NjYW4sIHByaXYpOworCUlOSVRfV09SSygmcHJpdi0+cm9hbSwgaXB3X2JnX3JvYW0sIHByaXYpOworCUlOSVRfV09SSygmcHJpdi0+c2Nhbl9jaGVjaywgaXB3X2JnX3NjYW5fY2hlY2ssIHByaXYpOworCUlOSVRfV09SSygmcHJpdi0+bGlua191cCwgKHZvaWQgKCopKHZvaWQgKikpaXB3X2JnX2xpbmtfdXAsIHByaXYpOworCUlOSVRfV09SSygmcHJpdi0+bGlua19kb3duLCAodm9pZCAoKikodm9pZCAqKSlpcHdfYmdfbGlua19kb3duLCBwcml2KTsKKwlJTklUX1dPUksoJnByaXYtPmxlZF9saW5rX29uLCAodm9pZCAoKikodm9pZCAqKSlpcHdfYmdfbGVkX2xpbmtfb24sCisJCSAgcHJpdik7CisJSU5JVF9XT1JLKCZwcml2LT5sZWRfbGlua19vZmYsICh2b2lkICgqKSh2b2lkICopKWlwd19iZ19sZWRfbGlua19vZmYsCisJCSAgcHJpdik7CisJSU5JVF9XT1JLKCZwcml2LT5sZWRfYWN0X29mZiwgKHZvaWQgKCopKHZvaWQgKikpaXB3X2JnX2xlZF9hY3Rpdml0eV9vZmYsCisJCSAgcHJpdik7CisJSU5JVF9XT1JLKCZwcml2LT5tZXJnZV9uZXR3b3JrcywKKwkJICAodm9pZCAoKikodm9pZCAqKSlpcHdfbWVyZ2VfYWRob2NfbmV0d29yaywgcHJpdik7CisKKyNpZmRlZiBDT05GSUdfSVBXX1FPUworCUlOSVRfV09SSygmcHJpdi0+cW9zX2FjdGl2YXRlLCAodm9pZCAoKikodm9pZCAqKSlpcHdfYmdfcW9zX2FjdGl2YXRlLAorCQkgIHByaXYpOworI2VuZGlmCQkJCS8qIENPTkZJR19JUFdfUU9TICovCiAKIAl0YXNrbGV0X2luaXQoJnByaXYtPmlycV90YXNrbGV0LCAodm9pZCAoKikodW5zaWduZWQgbG9uZykpCiAJCSAgICAgaXB3X2lycV90YXNrbGV0LCAodW5zaWduZWQgbG9uZylwcml2KTsKQEAgLTY2ODksMzQgKzEwMTc0LDM2IEBACiB7CiAJc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKIAlpbnQgaTsKLQogCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKIAkJaWYgKHNlYy0+ZmxhZ3MgJiAoMSA8PCBpKSkgewotCQkJcHJpdi0+c2VjLmtleV9zaXplc1tpXSA9IHNlYy0+a2V5X3NpemVzW2ldOworCQkJcHJpdi0+aWVlZS0+c2VjLmVuY29kZV9hbGdbaV0gPSBzZWMtPmVuY29kZV9hbGdbaV07CisJCQlwcml2LT5pZWVlLT5zZWMua2V5X3NpemVzW2ldID0gc2VjLT5rZXlfc2l6ZXNbaV07CiAJCQlpZiAoc2VjLT5rZXlfc2l6ZXNbaV0gPT0gMCkKLQkJCQlwcml2LT5zZWMuZmxhZ3MgJj0gfigxIDw8IGkpOwotCQkJZWxzZQotCQkJCW1lbWNweShwcml2LT5zZWMua2V5c1tpXSwgc2VjLT5rZXlzW2ldLAorCQkJCXByaXYtPmllZWUtPnNlYy5mbGFncyAmPSB+KDEgPDwgaSk7CisJCQllbHNlIHsKKwkJCQltZW1jcHkocHJpdi0+aWVlZS0+c2VjLmtleXNbaV0sIHNlYy0+a2V5c1tpXSwKIAkJCQkgICAgICAgc2VjLT5rZXlfc2l6ZXNbaV0pOwotCQkJcHJpdi0+c2VjLmZsYWdzIHw9ICgxIDw8IGkpOworCQkJCXByaXYtPmllZWUtPnNlYy5mbGFncyB8PSAoMSA8PCBpKTsKKwkJCX0KIAkJCXByaXYtPnN0YXR1cyB8PSBTVEFUVVNfU0VDVVJJVFlfVVBEQVRFRDsKLQkJfQorCQl9IGVsc2UgaWYgKHNlYy0+bGV2ZWwgIT0gU0VDX0xFVkVMXzEpCisJCQlwcml2LT5pZWVlLT5zZWMuZmxhZ3MgJj0gfigxIDw8IGkpOwogCX0KIAotCWlmICgoc2VjLT5mbGFncyAmIFNFQ19BQ1RJVkVfS0VZKSAmJgotCSAgICBwcml2LT5zZWMuYWN0aXZlX2tleSAhPSBzZWMtPmFjdGl2ZV9rZXkpIHsKKwlpZiAoc2VjLT5mbGFncyAmIFNFQ19BQ1RJVkVfS0VZKSB7CiAJCWlmIChzZWMtPmFjdGl2ZV9rZXkgPD0gMykgewotCQkJcHJpdi0+c2VjLmFjdGl2ZV9rZXkgPSBzZWMtPmFjdGl2ZV9rZXk7Ci0JCQlwcml2LT5zZWMuZmxhZ3MgfD0gU0VDX0FDVElWRV9LRVk7CisJCQlwcml2LT5pZWVlLT5zZWMuYWN0aXZlX2tleSA9IHNlYy0+YWN0aXZlX2tleTsKKwkJCXByaXYtPmllZWUtPnNlYy5mbGFncyB8PSBTRUNfQUNUSVZFX0tFWTsKIAkJfSBlbHNlCi0JCQlwcml2LT5zZWMuZmxhZ3MgJj0gflNFQ19BQ1RJVkVfS0VZOworCQkJcHJpdi0+aWVlZS0+c2VjLmZsYWdzICY9IH5TRUNfQUNUSVZFX0tFWTsKIAkJcHJpdi0+c3RhdHVzIHw9IFNUQVRVU19TRUNVUklUWV9VUERBVEVEOwotCX0KKwl9IGVsc2UKKwkJcHJpdi0+aWVlZS0+c2VjLmZsYWdzICY9IH5TRUNfQUNUSVZFX0tFWTsKIAogCWlmICgoc2VjLT5mbGFncyAmIFNFQ19BVVRIX01PREUpICYmCi0JICAgIChwcml2LT5zZWMuYXV0aF9tb2RlICE9IHNlYy0+YXV0aF9tb2RlKSkgewotCQlwcml2LT5zZWMuYXV0aF9tb2RlID0gc2VjLT5hdXRoX21vZGU7Ci0JCXByaXYtPnNlYy5mbGFncyB8PSBTRUNfQVVUSF9NT0RFOworCSAgICAocHJpdi0+aWVlZS0+c2VjLmF1dGhfbW9kZSAhPSBzZWMtPmF1dGhfbW9kZSkpIHsKKwkJcHJpdi0+aWVlZS0+c2VjLmF1dGhfbW9kZSA9IHNlYy0+YXV0aF9tb2RlOworCQlwcml2LT5pZWVlLT5zZWMuZmxhZ3MgfD0gU0VDX0FVVEhfTU9ERTsKIAkJaWYgKHNlYy0+YXV0aF9tb2RlID09IFdMQU5fQVVUSF9TSEFSRURfS0VZKQogCQkJcHJpdi0+Y2FwYWJpbGl0eSB8PSBDQVBfU0hBUkVEX0tFWTsKIAkJZWxzZQpAQCAtNjcyNCw5ICsxMDIxMSw5IEBACiAJCXByaXYtPnN0YXR1cyB8PSBTVEFUVVNfU0VDVVJJVFlfVVBEQVRFRDsKIAl9CiAKLQlpZiAoc2VjLT5mbGFncyAmIFNFQ19FTkFCTEVEICYmIHByaXYtPnNlYy5lbmFibGVkICE9IHNlYy0+ZW5hYmxlZCkgewotCQlwcml2LT5zZWMuZmxhZ3MgfD0gU0VDX0VOQUJMRUQ7Ci0JCXByaXYtPnNlYy5lbmFibGVkID0gc2VjLT5lbmFibGVkOworCWlmIChzZWMtPmZsYWdzICYgU0VDX0VOQUJMRUQgJiYgcHJpdi0+aWVlZS0+c2VjLmVuYWJsZWQgIT0gc2VjLT5lbmFibGVkKSB7CisJCXByaXYtPmllZWUtPnNlYy5mbGFncyB8PSBTRUNfRU5BQkxFRDsKKwkJcHJpdi0+aWVlZS0+c2VjLmVuYWJsZWQgPSBzZWMtPmVuYWJsZWQ7CiAJCXByaXYtPnN0YXR1cyB8PSBTVEFUVVNfU0VDVVJJVFlfVVBEQVRFRDsKIAkJaWYgKHNlYy0+ZW5hYmxlZCkKIAkJCXByaXYtPmNhcGFiaWxpdHkgfD0gQ0FQX1BSSVZBQ1lfT047CkBAIC02NzM0LDEyICsxMDIyMSwxOCBAQAogCQkJcHJpdi0+Y2FwYWJpbGl0eSAmPSB+Q0FQX1BSSVZBQ1lfT047CiAJfQogCi0JaWYgKHNlYy0+ZmxhZ3MgJiBTRUNfTEVWRUwgJiYgcHJpdi0+c2VjLmxldmVsICE9IHNlYy0+bGV2ZWwpIHsKLQkJcHJpdi0+c2VjLmxldmVsID0gc2VjLT5sZXZlbDsKLQkJcHJpdi0+c2VjLmZsYWdzIHw9IFNFQ19MRVZFTDsKKwlpZiAoc2VjLT5mbGFncyAmIFNFQ19FTkNSWVBUKQorCQlwcml2LT5pZWVlLT5zZWMuZW5jcnlwdCA9IHNlYy0+ZW5jcnlwdDsKKworCWlmIChzZWMtPmZsYWdzICYgU0VDX0xFVkVMICYmIHByaXYtPmllZWUtPnNlYy5sZXZlbCAhPSBzZWMtPmxldmVsKSB7CisJCXByaXYtPmllZWUtPnNlYy5sZXZlbCA9IHNlYy0+bGV2ZWw7CisJCXByaXYtPmllZWUtPnNlYy5mbGFncyB8PSBTRUNfTEVWRUw7CiAJCXByaXYtPnN0YXR1cyB8PSBTVEFUVVNfU0VDVVJJVFlfVVBEQVRFRDsKIAl9CiAKKwlpZiAoIXByaXYtPmllZWUtPmhvc3RfZW5jcnlwdCAmJiAoc2VjLT5mbGFncyAmIFNFQ19FTkNSWVBUKSkKKwkJaXB3X3NldF9od2NyeXB0b19rZXlzKHByaXYpOworCiAJLyogVG8gbWF0Y2ggY3VycmVudCBmdW5jdGlvbmFsaXR5IG9mIGlwdzIxMDAgKHdoaWNoIHdvcmtzIHdlbGwgdy8KIAkgKiB2YXJpb3VzIHN1cHBsaWNhbnRzLCB3ZSBkb24ndCBmb3JjZSBhIGRpc2Fzc29jaWF0ZSBpZiB0aGUKIAkgKiBwcml2YWN5IGNhcGFiaWxpdHkgY2hhbmdlcyAuLi4gKi8KQEAgLTY3ODgsMjkgKzEwMjgxLDEwIEBACiAKIHN0YXRpYyBpbnQgaXB3X2NvbmZpZyhzdHJ1Y3QgaXB3X3ByaXYgKnByaXYpCiB7Ci0JaW50IGk7Ci0Jc3RydWN0IGlwd190eF9wb3dlciB0eF9wb3dlcjsKLQotCW1lbXNldCgmcHJpdi0+c3lzX2NvbmZpZywgMCwgc2l6ZW9mKHByaXYtPnN5c19jb25maWcpKTsKLQltZW1zZXQoJnR4X3Bvd2VyLCAwLCBzaXplb2YodHhfcG93ZXIpKTsKLQogCS8qIFRoaXMgaXMgb25seSBjYWxsZWQgZnJvbSBpcHdfdXAsIHdoaWNoIHJlc2V0cy9yZWxvYWRzIHRoZSBmaXJtd2FyZQogCSAgIHNvLCB3ZSBkb24ndCBuZWVkIHRvIGZpcnN0IGRpc2FibGUgdGhlIGNhcmQgYmVmb3JlIHdlIGNvbmZpZ3VyZQogCSAgIGl0ICovCi0KLQkvKiBjb25maWd1cmUgZGV2aWNlIGZvciAnRycgYmFuZCAqLwotCXR4X3Bvd2VyLmllZWVfbW9kZSA9IElQV19HX01PREU7Ci0JdHhfcG93ZXIubnVtX2NoYW5uZWxzID0gMTE7Ci0JZm9yIChpID0gMDsgaSA8IDExOyBpKyspIHsKLQkJdHhfcG93ZXIuY2hhbm5lbHNfdHhfcG93ZXJbaV0uY2hhbm5lbF9udW1iZXIgPSBpICsgMTsKLQkJdHhfcG93ZXIuY2hhbm5lbHNfdHhfcG93ZXJbaV0udHhfcG93ZXIgPSBwcml2LT50eF9wb3dlcjsKLQl9Ci0JaWYgKGlwd19zZW5kX3R4X3Bvd2VyKHByaXYsICZ0eF9wb3dlcikpCi0JCWdvdG8gZXJyb3I7Ci0KLQkvKiBjb25maWd1cmUgZGV2aWNlIHRvIGFsc28gaGFuZGxlICdCJyBiYW5kICovCi0JdHhfcG93ZXIuaWVlZV9tb2RlID0gSVBXX0JfTU9ERTsKLQlpZiAoaXB3X3NlbmRfdHhfcG93ZXIocHJpdiwgJnR4X3Bvd2VyKSkKKwlpZiAoaXB3X3NldF90eF9wb3dlcihwcml2KSkKIAkJZ290byBlcnJvcjsKIAogCS8qIGluaXRpYWxpemUgYWRhcHRlciBhZGRyZXNzICovCkBAIC02ODE5LDYgKzEwMjkzLDExIEBACiAKIAkvKiBzZXQgYmFzaWMgc3lzdGVtIGNvbmZpZyBzZXR0aW5ncyAqLwogCWluaXRfc3lzX2NvbmZpZygmcHJpdi0+c3lzX2NvbmZpZyk7CisJaWYgKHByaXYtPmllZWUtPml3X21vZGUgPT0gSVdfTU9ERV9BREhPQykKKwkJcHJpdi0+c3lzX2NvbmZpZy5hbnN3ZXJfYnJvYWRjYXN0X3NzaWRfcHJvYmUgPSAxOworCWVsc2UKKwkJcHJpdi0+c3lzX2NvbmZpZy5hbnN3ZXJfYnJvYWRjYXN0X3NzaWRfcHJvYmUgPSAwOworCiAJaWYgKGlwd19zZW5kX3N5c3RlbV9jb25maWcocHJpdiwgJnByaXYtPnN5c19jb25maWcpKQogCQlnb3RvIGVycm9yOwogCkBAIC02ODMxLDYgKzEwMzEwLDEwIEBACiAJCWlmIChpcHdfc2VuZF9ydHNfdGhyZXNob2xkKHByaXYsIHByaXYtPnJ0c190aHJlc2hvbGQpKQogCQkJZ290byBlcnJvcjsKIAl9CisjaWZkZWYgQ09ORklHX0lQV19RT1MKKwlJUFdfREVCVUdfUU9TKCJRb1M6IGNhbGwgaXB3X3Fvc19hY3RpdmF0ZVxuIik7CisJaXB3X3Fvc19hY3RpdmF0ZShwcml2LCBOVUxMKTsKKyNlbmRpZgkJCQkvKiBDT05GSUdfSVBXX1FPUyAqLwogCiAJaWYgKGlwd19zZXRfcmFuZG9tX3NlZWQocHJpdikpCiAJCWdvdG8gZXJyb3I7CkBAIC02ODM5LDkgKzEwMzIyLDE3IEBACiAJaWYgKGlwd19zZW5kX2hvc3RfY29tcGxldGUocHJpdikpCiAJCWdvdG8gZXJyb3I7CiAKLQkvKiBJZiBjb25maWd1cmVkIHRvIHRyeSBhbmQgYXV0by1hc3NvY2lhdGUsIGtpY2sgb2ZmIGEgc2NhbiAqLwotCWlmICgocHJpdi0+Y29uZmlnICYgQ0ZHX0FTU09DSUFURSkgJiYgaXB3X3JlcXVlc3Rfc2Nhbihwcml2KSkKLQkJZ290byBlcnJvcjsKKwlwcml2LT5zdGF0dXMgfD0gU1RBVFVTX0lOSVQ7CisKKwlpcHdfbGVkX2luaXQocHJpdik7CisJaXB3X2xlZF9yYWRpb19vbihwcml2KTsKKwlwcml2LT5ub3RpZl9taXNzZWRfYmVhY29ucyA9IDA7CisKKwkvKiBTZXQgaGFyZHdhcmUgV0VQIGtleSBpZiBpdCBpcyBjb25maWd1cmVkLiAqLworCWlmICgocHJpdi0+Y2FwYWJpbGl0eSAmIENBUF9QUklWQUNZX09OKSAmJgorCSAgICAocHJpdi0+aWVlZS0+c2VjLmxldmVsID09IFNFQ19MRVZFTF8xKSAmJgorCSAgICAhKHByaXYtPmllZWUtPmhvc3RfZW5jcnlwdCB8fCBwcml2LT5pZWVlLT5ob3N0X2RlY3J5cHQpKQorCQlpcHdfc2V0X2h3Y3J5cHRvX2tleXMocHJpdik7CiAKIAlyZXR1cm4gMDsKIApAQCAtNjg0OSwyMCArMTAzNDAsMzc5IEBACiAJcmV0dXJuIC1FSU87CiB9CiAKKy8qCisgKiBOT1RFOgorICoKKyAqIFRoZXNlIHRhYmxlcyBoYXZlIGJlZW4gdGVzdGVkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlCisgKiBJbnRlbCBQUk8vV2lyZWxlc3MgMjIwMEJHIGFuZCAyOTE1QUJHIE5ldHdvcmsgQ29ubmVjdGlvbiBBZGFwdGVycy4KKyAqCisgKiBBbHRlcmluZyB0aGlzIHZhbHVlcywgdXNpbmcgaXQgb24gb3RoZXIgaGFyZHdhcmUsIG9yIGluIGdlb2dyYXBoaWVzCisgKiBub3QgaW50ZW5kZWQgZm9yIHJlc2FsZSBvZiB0aGUgYWJvdmUgbWVudGlvbmVkIEludGVsIGFkYXB0ZXJzIGhhcworICogbm90IGJlZW4gdGVzdGVkLgorICoKKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfZ2VvIGlwd19nZW9zW10gPSB7CisJewkJCS8qIFJlc3RyaWN0ZWQgKi8KKwkgIi0tLSIsCisJIC5iZ19jaGFubmVscyA9IDExLAorCSAuYmcgPSB7ezI0MTIsIDF9LCB7MjQxNywgMn0sIHsyNDIyLCAzfSwKKwkJezI0MjcsIDR9LCB7MjQzMiwgNX0sIHsyNDM3LCA2fSwKKwkJezI0NDIsIDd9LCB7MjQ0NywgOH0sIHsyNDUyLCA5fSwKKwkJezI0NTcsIDEwfSwgezI0NjIsIDExfX0sCisJIH0sCisKKwl7CQkJLyogQ3VzdG9tIFVTL0NhbmFkYSAqLworCSAiWlpGIiwKKwkgLmJnX2NoYW5uZWxzID0gMTEsCisJIC5iZyA9IHt7MjQxMiwgMX0sIHsyNDE3LCAyfSwgezI0MjIsIDN9LAorCQl7MjQyNywgNH0sIHsyNDMyLCA1fSwgezI0MzcsIDZ9LAorCQl7MjQ0MiwgN30sIHsyNDQ3LCA4fSwgezI0NTIsIDl9LAorCQl7MjQ1NywgMTB9LCB7MjQ2MiwgMTF9fSwKKwkgLmFfY2hhbm5lbHMgPSA4LAorCSAuYSA9IHt7NTE4MCwgMzZ9LAorCSAgICAgICB7NTIwMCwgNDB9LAorCSAgICAgICB7NTIyMCwgNDR9LAorCSAgICAgICB7NTI0MCwgNDh9LAorCSAgICAgICB7NTI2MCwgNTIsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTI4MCwgNTYsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTMwMCwgNjAsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTMyMCwgNjQsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9fSwKKwkgfSwKKworCXsJCQkvKiBSZXN0IG9mIFdvcmxkICovCisJICJaWkQiLAorCSAuYmdfY2hhbm5lbHMgPSAxMywKKwkgLmJnID0ge3syNDEyLCAxfSwgezI0MTcsIDJ9LCB7MjQyMiwgM30sCisJCXsyNDI3LCA0fSwgezI0MzIsIDV9LCB7MjQzNywgNn0sCisJCXsyNDQyLCA3fSwgezI0NDcsIDh9LCB7MjQ1MiwgOX0sCisJCXsyNDU3LCAxMH0sIHsyNDYyLCAxMX0sIHsyNDY3LCAxMn0sCisJCXsyNDcyLCAxM319LAorCSB9LAorCisJewkJCS8qIEN1c3RvbSBVU0EgJiBFdXJvcGUgJiBIaWdoICovCisJICJaWkEiLAorCSAuYmdfY2hhbm5lbHMgPSAxMSwKKwkgLmJnID0ge3syNDEyLCAxfSwgezI0MTcsIDJ9LCB7MjQyMiwgM30sCisJCXsyNDI3LCA0fSwgezI0MzIsIDV9LCB7MjQzNywgNn0sCisJCXsyNDQyLCA3fSwgezI0NDcsIDh9LCB7MjQ1MiwgOX0sCisJCXsyNDU3LCAxMH0sIHsyNDYyLCAxMX19LAorCSAuYV9jaGFubmVscyA9IDEzLAorCSAuYSA9IHt7NTE4MCwgMzZ9LAorCSAgICAgICB7NTIwMCwgNDB9LAorCSAgICAgICB7NTIyMCwgNDR9LAorCSAgICAgICB7NTI0MCwgNDh9LAorCSAgICAgICB7NTI2MCwgNTIsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTI4MCwgNTYsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTMwMCwgNjAsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTMyMCwgNjQsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTc0NSwgMTQ5fSwKKwkgICAgICAgezU3NjUsIDE1M30sCisJICAgICAgIHs1Nzg1LCAxNTd9LAorCSAgICAgICB7NTgwNSwgMTYxfSwKKwkgICAgICAgezU4MjUsIDE2NX19LAorCSB9LAorCisJewkJCS8qIEN1c3RvbSBOQSAmIEV1cm9wZSAqLworCSAiWlpCIiwKKwkgLmJnX2NoYW5uZWxzID0gMTEsCisJIC5iZyA9IHt7MjQxMiwgMX0sIHsyNDE3LCAyfSwgezI0MjIsIDN9LAorCQl7MjQyNywgNH0sIHsyNDMyLCA1fSwgezI0MzcsIDZ9LAorCQl7MjQ0MiwgN30sIHsyNDQ3LCA4fSwgezI0NTIsIDl9LAorCQl7MjQ1NywgMTB9LCB7MjQ2MiwgMTF9fSwKKwkgLmFfY2hhbm5lbHMgPSAxMywKKwkgLmEgPSB7ezUxODAsIDM2fSwKKwkgICAgICAgezUyMDAsIDQwfSwKKwkgICAgICAgezUyMjAsIDQ0fSwKKwkgICAgICAgezUyNDAsIDQ4fSwKKwkgICAgICAgezUyNjAsIDUyLCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezUyODAsIDU2LCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezUzMDAsIDYwLCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezUzMjAsIDY0LCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezU3NDUsIDE0OSwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1NzY1LCAxNTMsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTc4NSwgMTU3LCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezU4MDUsIDE2MSwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1ODI1LCAxNjUsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9fSwKKwkgfSwKKworCXsJCQkvKiBDdXN0b20gSmFwYW4gKi8KKwkgIlpaQyIsCisJIC5iZ19jaGFubmVscyA9IDExLAorCSAuYmcgPSB7ezI0MTIsIDF9LCB7MjQxNywgMn0sIHsyNDIyLCAzfSwKKwkJezI0MjcsIDR9LCB7MjQzMiwgNX0sIHsyNDM3LCA2fSwKKwkJezI0NDIsIDd9LCB7MjQ0NywgOH0sIHsyNDUyLCA5fSwKKwkJezI0NTcsIDEwfSwgezI0NjIsIDExfX0sCisJIC5hX2NoYW5uZWxzID0gNCwKKwkgLmEgPSB7ezUxNzAsIDM0fSwgezUxOTAsIDM4fSwKKwkgICAgICAgezUyMTAsIDQyfSwgezUyMzAsIDQ2fX0sCisJIH0sCisKKwl7CQkJLyogQ3VzdG9tICovCisJICJaWk0iLAorCSAuYmdfY2hhbm5lbHMgPSAxMSwKKwkgLmJnID0ge3syNDEyLCAxfSwgezI0MTcsIDJ9LCB7MjQyMiwgM30sCisJCXsyNDI3LCA0fSwgezI0MzIsIDV9LCB7MjQzNywgNn0sCisJCXsyNDQyLCA3fSwgezI0NDcsIDh9LCB7MjQ1MiwgOX0sCisJCXsyNDU3LCAxMH0sIHsyNDYyLCAxMX19LAorCSB9LAorCisJewkJCS8qIEV1cm9wZSAqLworCSAiWlpFIiwKKwkgLmJnX2NoYW5uZWxzID0gMTMsCisJIC5iZyA9IHt7MjQxMiwgMX0sIHsyNDE3LCAyfSwgezI0MjIsIDN9LAorCQl7MjQyNywgNH0sIHsyNDMyLCA1fSwgezI0MzcsIDZ9LAorCQl7MjQ0MiwgN30sIHsyNDQ3LCA4fSwgezI0NTIsIDl9LAorCQl7MjQ1NywgMTB9LCB7MjQ2MiwgMTF9LCB7MjQ2NywgMTJ9LAorCQl7MjQ3MiwgMTN9fSwKKwkgLmFfY2hhbm5lbHMgPSAxOSwKKwkgLmEgPSB7ezUxODAsIDM2fSwKKwkgICAgICAgezUyMDAsIDQwfSwKKwkgICAgICAgezUyMjAsIDQ0fSwKKwkgICAgICAgezUyNDAsIDQ4fSwKKwkgICAgICAgezUyNjAsIDUyLCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezUyODAsIDU2LCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezUzMDAsIDYwLCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezUzMjAsIDY0LCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezU1MDAsIDEwMCwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1NTIwLCAxMDQsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTU0MCwgMTA4LCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezU1NjAsIDExMiwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1NTgwLCAxMTYsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTYwMCwgMTIwLCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezU2MjAsIDEyNCwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1NjQwLCAxMjgsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTY2MCwgMTMyLCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezU2ODAsIDEzNiwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1NzAwLCAxNDAsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9fSwKKwkgfSwKKworCXsJCQkvKiBDdXN0b20gSmFwYW4gKi8KKwkgIlpaSiIsCisJIC5iZ19jaGFubmVscyA9IDE0LAorCSAuYmcgPSB7ezI0MTIsIDF9LCB7MjQxNywgMn0sIHsyNDIyLCAzfSwKKwkJezI0MjcsIDR9LCB7MjQzMiwgNX0sIHsyNDM3LCA2fSwKKwkJezI0NDIsIDd9LCB7MjQ0NywgOH0sIHsyNDUyLCA5fSwKKwkJezI0NTcsIDEwfSwgezI0NjIsIDExfSwgezI0NjcsIDEyfSwKKwkJezI0NzIsIDEzfSwgezI0ODQsIDE0LCBJRUVFODAyMTFfQ0hfQl9PTkxZfX0sCisJIC5hX2NoYW5uZWxzID0gNCwKKwkgLmEgPSB7ezUxNzAsIDM0fSwgezUxOTAsIDM4fSwKKwkgICAgICAgezUyMTAsIDQyfSwgezUyMzAsIDQ2fX0sCisJIH0sCisKKwl7CQkJLyogUmVzdCBvZiBXb3JsZCAqLworCSAiWlpSIiwKKwkgLmJnX2NoYW5uZWxzID0gMTQsCisJIC5iZyA9IHt7MjQxMiwgMX0sIHsyNDE3LCAyfSwgezI0MjIsIDN9LAorCQl7MjQyNywgNH0sIHsyNDMyLCA1fSwgezI0MzcsIDZ9LAorCQl7MjQ0MiwgN30sIHsyNDQ3LCA4fSwgezI0NTIsIDl9LAorCQl7MjQ1NywgMTB9LCB7MjQ2MiwgMTF9LCB7MjQ2NywgMTJ9LAorCQl7MjQ3MiwgMTN9LCB7MjQ4NCwgMTQsIElFRUU4MDIxMV9DSF9CX09OTFkgfAorCQkJICAgICBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfX0sCisJIH0sCisKKwl7CQkJLyogSGlnaCBCYW5kICovCisJICJaWkgiLAorCSAuYmdfY2hhbm5lbHMgPSAxMywKKwkgLmJnID0ge3syNDEyLCAxfSwgezI0MTcsIDJ9LCB7MjQyMiwgM30sCisJCXsyNDI3LCA0fSwgezI0MzIsIDV9LCB7MjQzNywgNn0sCisJCXsyNDQyLCA3fSwgezI0NDcsIDh9LCB7MjQ1MiwgOX0sCisJCXsyNDU3LCAxMH0sIHsyNDYyLCAxMX0sCisJCXsyNDY3LCAxMiwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCisJCXsyNDcyLCAxMywgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX19LAorCSAuYV9jaGFubmVscyA9IDQsCisJIC5hID0ge3s1NzQ1LCAxNDl9LCB7NTc2NSwgMTUzfSwKKwkgICAgICAgezU3ODUsIDE1N30sIHs1ODA1LCAxNjF9fSwKKwkgfSwKKworCXsJCQkvKiBDdXN0b20gRXVyb3BlICovCisJICJaWkciLAorCSAuYmdfY2hhbm5lbHMgPSAxMywKKwkgLmJnID0ge3syNDEyLCAxfSwgezI0MTcsIDJ9LCB7MjQyMiwgM30sCisJCXsyNDI3LCA0fSwgezI0MzIsIDV9LCB7MjQzNywgNn0sCisJCXsyNDQyLCA3fSwgezI0NDcsIDh9LCB7MjQ1MiwgOX0sCisJCXsyNDU3LCAxMH0sIHsyNDYyLCAxMX0sCisJCXsyNDY3LCAxMn0sIHsyNDcyLCAxM319LAorCSAuYV9jaGFubmVscyA9IDQsCisJIC5hID0ge3s1MTgwLCAzNn0sIHs1MjAwLCA0MH0sCisJICAgICAgIHs1MjIwLCA0NH0sIHs1MjQwLCA0OH19LAorCSB9LAorCisJewkJCS8qIEV1cm9wZSAqLworCSAiWlpLIiwKKwkgLmJnX2NoYW5uZWxzID0gMTMsCisJIC5iZyA9IHt7MjQxMiwgMX0sIHsyNDE3LCAyfSwgezI0MjIsIDN9LAorCQl7MjQyNywgNH0sIHsyNDMyLCA1fSwgezI0MzcsIDZ9LAorCQl7MjQ0MiwgN30sIHsyNDQ3LCA4fSwgezI0NTIsIDl9LAorCQl7MjQ1NywgMTB9LCB7MjQ2MiwgMTF9LAorCQl7MjQ2NywgMTIsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9LAorCQl7MjQ3MiwgMTMsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9fSwKKwkgLmFfY2hhbm5lbHMgPSAyNCwKKwkgLmEgPSB7ezUxODAsIDM2LCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezUyMDAsIDQwLCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezUyMjAsIDQ0LCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezUyNDAsIDQ4LCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezUyNjAsIDUyLCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezUyODAsIDU2LCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezUzMDAsIDYwLCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezUzMjAsIDY0LCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezU1MDAsIDEwMCwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1NTIwLCAxMDQsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTU0MCwgMTA4LCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezU1NjAsIDExMiwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1NTgwLCAxMTYsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTYwMCwgMTIwLCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezU2MjAsIDEyNCwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1NjQwLCAxMjgsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTY2MCwgMTMyLCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezU2ODAsIDEzNiwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1NzAwLCAxNDAsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTc0NSwgMTQ5LCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezU3NjUsIDE1MywgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1Nzg1LCAxNTcsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTgwNSwgMTYxLCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezU4MjUsIDE2NSwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX19LAorCSB9LAorCisJewkJCS8qIEV1cm9wZSAqLworCSAiWlpMIiwKKwkgLmJnX2NoYW5uZWxzID0gMTEsCisJIC5iZyA9IHt7MjQxMiwgMX0sIHsyNDE3LCAyfSwgezI0MjIsIDN9LAorCQl7MjQyNywgNH0sIHsyNDMyLCA1fSwgezI0MzcsIDZ9LAorCQl7MjQ0MiwgN30sIHsyNDQ3LCA4fSwgezI0NTIsIDl9LAorCQl7MjQ1NywgMTB9LCB7MjQ2MiwgMTF9fSwKKwkgLmFfY2hhbm5lbHMgPSAxMywKKwkgLmEgPSB7ezUxODAsIDM2LCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezUyMDAsIDQwLCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezUyMjAsIDQ0LCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezUyNDAsIDQ4LCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezUyNjAsIDUyLCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezUyODAsIDU2LCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezUzMDAsIDYwLCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezUzMjAsIDY0LCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezU3NDUsIDE0OSwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1NzY1LCAxNTMsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTc4NSwgMTU3LCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezU4MDUsIDE2MSwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1ODI1LCAxNjUsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9fSwKKwkgfQorfTsKKworLyogR0VPIGNvZGUgYm9ycm93ZWQgZnJvbSBpZWVlODAyMTFfZ2VvLmMgKi8KK3N0YXRpYyBpbnQgaXB3X2lzX3ZhbGlkX2NoYW5uZWwoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsIHU4IGNoYW5uZWwpCit7CisJaW50IGk7CisKKwkvKiBEcml2ZXIgbmVlZHMgdG8gaW5pdGlhbGl6ZSB0aGUgZ2VvZ3JhcGh5IG1hcCBiZWZvcmUgdXNpbmcKKwkgKiB0aGVzZSBoZWxwZXIgZnVuY3Rpb25zICovCisJQlVHX09OKGllZWUtPmdlby5iZ19jaGFubmVscyA9PSAwICYmIGllZWUtPmdlby5hX2NoYW5uZWxzID09IDApOworCisJaWYgKGllZWUtPmZyZXFfYmFuZCAmIElFRUU4MDIxMV8yNEdIWl9CQU5EKQorCQlmb3IgKGkgPSAwOyBpIDwgaWVlZS0+Z2VvLmJnX2NoYW5uZWxzOyBpKyspCisJCQkvKiBOT1RFOiBJZiBHIG1vZGUgaXMgY3VycmVudGx5IHN1cHBvcnRlZCBidXQKKwkJCSAqIHRoaXMgaXMgYSBCIG9ubHkgY2hhbm5lbCwgd2UgZG9uJ3Qgc2VlIGl0CisJCQkgKiBhcyB2YWxpZC4gKi8KKwkJCWlmICgoaWVlZS0+Z2VvLmJnW2ldLmNoYW5uZWwgPT0gY2hhbm5lbCkgJiYKKwkJCSAgICAoIShpZWVlLT5tb2RlICYgSUVFRV9HKSB8fAorCQkJICAgICAhKGllZWUtPmdlby5iZ1tpXS5mbGFncyAmIElFRUU4MDIxMV9DSF9CX09OTFkpKSkKKwkJCQlyZXR1cm4gSUVFRTgwMjExXzI0R0haX0JBTkQ7CisKKwlpZiAoaWVlZS0+ZnJlcV9iYW5kICYgSUVFRTgwMjExXzUyR0haX0JBTkQpCisJCWZvciAoaSA9IDA7IGkgPCBpZWVlLT5nZW8uYV9jaGFubmVsczsgaSsrKQorCQkJaWYgKGllZWUtPmdlby5hW2ldLmNoYW5uZWwgPT0gY2hhbm5lbCkKKwkJCQlyZXR1cm4gSUVFRTgwMjExXzUyR0haX0JBTkQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpcHdfY2hhbm5lbF90b19pbmRleChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgdTggY2hhbm5lbCkKK3sKKwlpbnQgaTsKKworCS8qIERyaXZlciBuZWVkcyB0byBpbml0aWFsaXplIHRoZSBnZW9ncmFwaHkgbWFwIGJlZm9yZSB1c2luZworCSAqIHRoZXNlIGhlbHBlciBmdW5jdGlvbnMgKi8KKwlCVUdfT04oaWVlZS0+Z2VvLmJnX2NoYW5uZWxzID09IDAgJiYgaWVlZS0+Z2VvLmFfY2hhbm5lbHMgPT0gMCk7CisKKwlpZiAoaWVlZS0+ZnJlcV9iYW5kICYgSUVFRTgwMjExXzI0R0haX0JBTkQpCisJCWZvciAoaSA9IDA7IGkgPCBpZWVlLT5nZW8uYmdfY2hhbm5lbHM7IGkrKykKKwkJCWlmIChpZWVlLT5nZW8uYmdbaV0uY2hhbm5lbCA9PSBjaGFubmVsKQorCQkJCXJldHVybiBpOworCisJaWYgKGllZWUtPmZyZXFfYmFuZCAmIElFRUU4MDIxMV81MkdIWl9CQU5EKQorCQlmb3IgKGkgPSAwOyBpIDwgaWVlZS0+Z2VvLmFfY2hhbm5lbHM7IGkrKykKKwkJCWlmIChpZWVlLT5nZW8uYVtpXS5jaGFubmVsID09IGNoYW5uZWwpCisJCQkJcmV0dXJuIGk7CisKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyB1OCBpcHdfZnJlcV90b19jaGFubmVsKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCB1MzIgZnJlcSkKK3sKKwlpbnQgaTsKKworCS8qIERyaXZlciBuZWVkcyB0byBpbml0aWFsaXplIHRoZSBnZW9ncmFwaHkgbWFwIGJlZm9yZSB1c2luZworCSAqIHRoZXNlIGhlbHBlciBmdW5jdGlvbnMgKi8KKwlCVUdfT04oaWVlZS0+Z2VvLmJnX2NoYW5uZWxzID09IDAgJiYgaWVlZS0+Z2VvLmFfY2hhbm5lbHMgPT0gMCk7CisKKwlmcmVxIC89IDEwMDAwMDsKKworCWlmIChpZWVlLT5mcmVxX2JhbmQgJiBJRUVFODAyMTFfMjRHSFpfQkFORCkKKwkJZm9yIChpID0gMDsgaSA8IGllZWUtPmdlby5iZ19jaGFubmVsczsgaSsrKQorCQkJaWYgKGllZWUtPmdlby5iZ1tpXS5mcmVxID09IGZyZXEpCisJCQkJcmV0dXJuIGllZWUtPmdlby5iZ1tpXS5jaGFubmVsOworCisJaWYgKGllZWUtPmZyZXFfYmFuZCAmIElFRUU4MDIxMV81MkdIWl9CQU5EKQorCQlmb3IgKGkgPSAwOyBpIDwgaWVlZS0+Z2VvLmFfY2hhbm5lbHM7IGkrKykKKwkJCWlmIChpZWVlLT5nZW8uYVtpXS5mcmVxID09IGZyZXEpCisJCQkJcmV0dXJuIGllZWUtPmdlby5hW2ldLmNoYW5uZWw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpcHdfc2V0X2dlbyhzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfZ2VvICpnZW8pCit7CisJbWVtY3B5KGllZWUtPmdlby5uYW1lLCBnZW8tPm5hbWUsIDMpOworCWllZWUtPmdlby5uYW1lWzNdID0gJ1wwJzsKKwlpZWVlLT5nZW8uYmdfY2hhbm5lbHMgPSBnZW8tPmJnX2NoYW5uZWxzOworCWllZWUtPmdlby5hX2NoYW5uZWxzID0gZ2VvLT5hX2NoYW5uZWxzOworCW1lbWNweShpZWVlLT5nZW8uYmcsIGdlby0+YmcsIGdlby0+YmdfY2hhbm5lbHMgKgorCSAgICAgICBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9jaGFubmVsKSk7CisJbWVtY3B5KGllZWUtPmdlby5hLCBnZW8tPmEsIGllZWUtPmdlby5hX2NoYW5uZWxzICoKKwkgICAgICAgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9nZW8gKmlwd19nZXRfZ2VvKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKQoreworCXJldHVybiAmaWVlZS0+Z2VvOworfQorCiAjZGVmaW5lIE1BWF9IV19SRVNUQVJUUyA1CiBzdGF0aWMgaW50IGlwd191cChzdHJ1Y3QgaXB3X3ByaXYgKnByaXYpCiB7Ci0JaW50IHJjLCBpOworCWludCByYywgaSwgajsKIAogCWlmIChwcml2LT5zdGF0dXMgJiBTVEFUVVNfRVhJVF9QRU5ESU5HKQogCQlyZXR1cm4gLUVJTzsKIAorCWlmIChjbWRsb2cgJiYgIXByaXYtPmNtZGxvZykgeworCQlwcml2LT5jbWRsb2cgPSBrbWFsbG9jKHNpemVvZigqcHJpdi0+Y21kbG9nKSAqIGNtZGxvZywKKwkJCQkgICAgICAgR0ZQX0tFUk5FTCk7CisJCWlmIChwcml2LT5jbWRsb2cgPT0gTlVMTCkgeworCQkJSVBXX0VSUk9SKCJFcnJvciBhbGxvY2F0aW5nICVkIGNvbW1hbmQgbG9nIGVudHJpZXMuXG4iLAorCQkJCSAgY21kbG9nKTsKKwkJfSBlbHNlIHsKKwkJCW1lbXNldChwcml2LT5jbWRsb2csIDAsIHNpemVvZigqcHJpdi0+Y21kbG9nKSAqIGNtZGxvZyk7CisJCQlwcml2LT5jbWRsb2dfbGVuID0gY21kbG9nOworCQl9CisJfQorCiAJZm9yIChpID0gMDsgaSA8IE1BWF9IV19SRVNUQVJUUzsgaSsrKSB7CiAJCS8qIExvYWQgdGhlIG1pY3JvY29kZSwgZmlybXdhcmUsIGFuZCBlZXByb20uCiAJCSAqIEFsc28gc3RhcnQgdGhlIGNsb2Nrcy4gKi8KIAkJcmMgPSBpcHdfbG9hZChwcml2KTsKIAkJaWYgKHJjKSB7Ci0JCQlJUFdfRVJST1IoIlVuYWJsZSB0byBsb2FkIGZpcm13YXJlOiAweCUwOFhcbiIsIHJjKTsKKwkJCUlQV19FUlJPUigiVW5hYmxlIHRvIGxvYWQgZmlybXdhcmU6ICVkXG4iLCByYyk7CiAJCQlyZXR1cm4gcmM7CiAJCX0KIApAQCAtNjg3MSwyMCArMTA3MjEsNTAgQEAKIAkJCWVlcHJvbV9wYXJzZV9tYWMocHJpdiwgcHJpdi0+bWFjX2FkZHIpOwogCQltZW1jcHkocHJpdi0+bmV0X2Rldi0+ZGV2X2FkZHIsIHByaXYtPm1hY19hZGRyLCBFVEhfQUxFTik7CiAKLQkJaWYgKHByaXYtPnN0YXR1cyAmIFNUQVRVU19SRl9LSUxMX01BU0spCisJCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKGlwd19nZW9zKTsgaisrKSB7CisJCQlpZiAoIW1lbWNtcCgmcHJpdi0+ZWVwcm9tW0VFUFJPTV9DT1VOVFJZX0NPREVdLAorCQkJCSAgICBpcHdfZ2Vvc1tqXS5uYW1lLCAzKSkKKwkJCQlicmVhazsKKwkJfQorCQlpZiAoaiA9PSBBUlJBWV9TSVpFKGlwd19nZW9zKSkgeworCQkJSVBXX1dBUk5JTkcoIlNLVSBbJWMlYyVjXSBub3QgcmVjb2duaXplZC5cbiIsCisJCQkJICAgIHByaXYtPmVlcHJvbVtFRVBST01fQ09VTlRSWV9DT0RFICsgMF0sCisJCQkJICAgIHByaXYtPmVlcHJvbVtFRVBST01fQ09VTlRSWV9DT0RFICsgMV0sCisJCQkJICAgIHByaXYtPmVlcHJvbVtFRVBST01fQ09VTlRSWV9DT0RFICsgMl0pOworCQkJaiA9IDA7CisJCX0KKwkJaWYgKGlwd19zZXRfZ2VvKHByaXYtPmllZWUsICZpcHdfZ2Vvc1tqXSkpIHsKKwkJCUlQV19XQVJOSU5HKCJDb3VsZCBub3Qgc2V0IGdlb2dyYXBoeS4iKTsKIAkJCXJldHVybiAwOworCQl9CisKKwkJSVBXX0RFQlVHX0lORk8oIkdlb2dyYXBoeSAlMDNkIFslc10gZGV0ZWN0ZWQuXG4iLAorCQkJICAgICAgIGosIHByaXYtPmllZWUtPmdlby5uYW1lKTsKKworCQlpZiAocHJpdi0+c3RhdHVzICYgU1RBVFVTX1JGX0tJTExfU1cpIHsKKwkJCUlQV19XQVJOSU5HKCJSYWRpbyBkaXNhYmxlZCBieSBtb2R1bGUgcGFyYW1ldGVyLlxuIik7CisJCQlyZXR1cm4gMDsKKwkJfSBlbHNlIGlmIChyZl9raWxsX2FjdGl2ZShwcml2KSkgeworCQkJSVBXX1dBUk5JTkcoIlJhZGlvIEZyZXF1ZW5jeSBLaWxsIFN3aXRjaCBpcyBPbjpcbiIKKwkJCQkgICAgIktpbGwgc3dpdGNoIG11c3QgYmUgdHVybmVkIG9mZiBmb3IgIgorCQkJCSAgICAid2lyZWxlc3MgbmV0d29ya2luZyB0byB3b3JrLlxuIik7CisJCQlxdWV1ZV9kZWxheWVkX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+cmZfa2lsbCwKKwkJCQkJICAgMiAqIEhaKTsKKwkJCXJldHVybiAwOworCQl9CiAKIAkJcmMgPSBpcHdfY29uZmlnKHByaXYpOwogCQlpZiAoIXJjKSB7CiAJCQlJUFdfREVCVUdfSU5GTygiQ29uZmlndXJlZCBkZXZpY2Ugb24gY291bnQgJWlcbiIsIGkpOwotCQkJcHJpdi0+bm90aWZfbWlzc2VkX2JlYWNvbnMgPSAwOwotCQkJbmV0aWZfc3RhcnRfcXVldWUocHJpdi0+bmV0X2Rldik7CisKKwkJCS8qIElmIGNvbmZpZ3VyZSB0byB0cnkgYW5kIGF1dG8tYXNzb2NpYXRlLCBraWNrCisJCQkgKiBvZmYgYSBzY2FuLiAqLworCQkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5yZXF1ZXN0X3NjYW4pOworCiAJCQlyZXR1cm4gMDsKLQkJfSBlbHNlIHsKLQkJCUlQV19ERUJVR19JTkZPKCJEZXZpY2UgY29uZmlndXJhdGlvbiBmYWlsZWQ6IDB4JTA4WFxuIiwKLQkJCQkgICAgICAgcmMpOwogCQl9CiAKKwkJSVBXX0RFQlVHX0lORk8oIkRldmljZSBjb25maWd1cmF0aW9uIGZhaWxlZDogMHglMDhYXG4iLCByYyk7CiAJCUlQV19ERUJVR19JTkZPKCJGYWlsZWQgdG8gY29uZmlnIGRldmljZSBvbiByZXRyeSAlZCBvZiAlZFxuIiwKIAkJCSAgICAgICBpLCBNQVhfSFdfUkVTVEFSVFMpOwogCkBAIC02ODk2LDQ3ICsxMDc3NiwxMDEgQEAKIAkvKiB0cmllZCB0byByZXN0YXJ0IGFuZCBjb25maWcgdGhlIGRldmljZSBmb3IgYXMgbG9uZyBhcyBvdXIKIAkgKiBwYXRpZW5jZSBjb3VsZCB3aXRoc3RhbmQgKi8KIAlJUFdfRVJST1IoIlVuYWJsZSB0byBpbml0aWFsaXplIGRldmljZSBhZnRlciAlZCBhdHRlbXB0cy5cbiIsIGkpOworCiAJcmV0dXJuIC1FSU87CiB9CiAKK3N0YXRpYyB2b2lkIGlwd19iZ191cCh2b2lkICpkYXRhKQoreworCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGRhdGE7CisJZG93bigmcHJpdi0+c2VtKTsKKwlpcHdfdXAoZGF0YSk7CisJdXAoJnByaXYtPnNlbSk7Cit9CisKK3N0YXRpYyB2b2lkIGlwd19kZWluaXQoc3RydWN0IGlwd19wcml2ICpwcml2KQoreworCWludCBpOworCisJaWYgKHByaXYtPnN0YXR1cyAmIFNUQVRVU19TQ0FOTklORykgeworCQlJUFdfREVCVUdfSU5GTygiQWJvcnRpbmcgc2NhbiBkdXJpbmcgc2h1dGRvd24uXG4iKTsKKwkJaXB3X2Fib3J0X3NjYW4ocHJpdik7CisJfQorCisJaWYgKHByaXYtPnN0YXR1cyAmIFNUQVRVU19BU1NPQ0lBVEVEKSB7CisJCUlQV19ERUJVR19JTkZPKCJEaXNhc3NvY2lhdGluZyBkdXJpbmcgc2h1dGRvd24uXG4iKTsKKwkJaXB3X2Rpc2Fzc29jaWF0ZShwcml2KTsKKwl9CisKKwlpcHdfbGVkX3NodXRkb3duKHByaXYpOworCisJLyogV2FpdCB1cCB0byAxcyBmb3Igc3RhdHVzIHRvIGNoYW5nZSB0byBub3Qgc2Nhbm5pbmcgYW5kIG5vdAorCSAqIGFzc29jaWF0ZWQgKGRpc2Fzc29jaWF0aW9uIGNhbiB0YWtlIGEgd2hpbGUgZm9yIGEgZnVsIDgwMi4xMQorCSAqIGV4Y2hhbmdlICovCisJZm9yIChpID0gMTAwMDsgaSAmJiAocHJpdi0+c3RhdHVzICYKKwkJCSAgICAgKFNUQVRVU19ESVNBU1NPQ0lBVElORyB8CisJCQkgICAgICBTVEFUVVNfQVNTT0NJQVRFRCB8IFNUQVRVU19TQ0FOTklORykpOyBpLS0pCisJCXVkZWxheSgxMCk7CisKKwlpZiAocHJpdi0+c3RhdHVzICYgKFNUQVRVU19ESVNBU1NPQ0lBVElORyB8CisJCQkgICAgU1RBVFVTX0FTU09DSUFURUQgfCBTVEFUVVNfU0NBTk5JTkcpKQorCQlJUFdfREVCVUdfSU5GTygiU3RpbGwgYXNzb2NpYXRlZCBvciBzY2FubmluZy4uLlxuIik7CisJZWxzZQorCQlJUFdfREVCVUdfSU5GTygiVG9vayAlZG1zIHRvIGRlLWluaXRcbiIsIDEwMDAgLSBpKTsKKworCS8qIEF0dGVtcHQgdG8gZGlzYWJsZSB0aGUgY2FyZCAqLworCWlwd19zZW5kX2NhcmRfZGlzYWJsZShwcml2LCAwKTsKKworCXByaXYtPnN0YXR1cyAmPSB+U1RBVFVTX0lOSVQ7Cit9CisKIHN0YXRpYyB2b2lkIGlwd19kb3duKHN0cnVjdCBpcHdfcHJpdiAqcHJpdikKIHsKLQkvKiBBdHRlbXB0IHRvIGRpc2FibGUgdGhlIGNhcmQgKi8KLSNpZiAwCi0JaXB3X3NlbmRfY2FyZF9kaXNhYmxlKHByaXYsIDApOwotI2VuZGlmCisJaW50IGV4aXRfcGVuZGluZyA9IHByaXYtPnN0YXR1cyAmIFNUQVRVU19FWElUX1BFTkRJTkc7CisKKwlwcml2LT5zdGF0dXMgfD0gU1RBVFVTX0VYSVRfUEVORElORzsKKworCWlmIChpcHdfaXNfaW5pdChwcml2KSkKKwkJaXB3X2RlaW5pdChwcml2KTsKKworCS8qIFdpcGUgb3V0IHRoZSBFWElUX1BFTkRJTkcgc3RhdHVzIGJpdCBpZiB3ZSBhcmUgbm90IGFjdHVhbGx5CisJICogZXhpdGluZyB0aGUgbW9kdWxlICovCisJaWYgKCFleGl0X3BlbmRpbmcpCisJCXByaXYtPnN0YXR1cyAmPSB+U1RBVFVTX0VYSVRfUEVORElORzsKIAogCS8qIHRlbGwgdGhlIGRldmljZSB0byBzdG9wIHNlbmRpbmcgaW50ZXJydXB0cyAqLwogCWlwd19kaXNhYmxlX2ludGVycnVwdHMocHJpdik7CiAKIAkvKiBDbGVhciBhbGwgYml0cyBidXQgdGhlIFJGIEtpbGwgKi8KLQlwcml2LT5zdGF0dXMgJj0gU1RBVFVTX1JGX0tJTExfTUFTSzsKLQorCXByaXYtPnN0YXR1cyAmPSBTVEFUVVNfUkZfS0lMTF9NQVNLIHwgU1RBVFVTX0VYSVRfUEVORElORzsKIAluZXRpZl9jYXJyaWVyX29mZihwcml2LT5uZXRfZGV2KTsKIAluZXRpZl9zdG9wX3F1ZXVlKHByaXYtPm5ldF9kZXYpOwogCiAJaXB3X3N0b3BfbmljKHByaXYpOworCisJaXB3X2xlZF9yYWRpb19vZmYocHJpdik7Cit9CisKK3N0YXRpYyB2b2lkIGlwd19iZ19kb3duKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gZGF0YTsKKwlkb3duKCZwcml2LT5zZW0pOworCWlwd19kb3duKGRhdGEpOworCXVwKCZwcml2LT5zZW0pOwogfQogCiAvKiBDYWxsZWQgYnkgcmVnaXN0ZXJfbmV0ZGV2KCkgKi8KIHN0YXRpYyBpbnQgaXB3X25ldF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlkb3duKCZwcml2LT5zZW0pOwogCi0JaWYgKHByaXYtPnN0YXR1cyAmIFNUQVRVU19SRl9LSUxMX1NXKSB7Ci0JCUlQV19XQVJOSU5HKCJSYWRpbyBkaXNhYmxlZCBieSBtb2R1bGUgcGFyYW1ldGVyLlxuIik7Ci0JCXJldHVybiAwOwotCX0gZWxzZSBpZiAocmZfa2lsbF9hY3RpdmUocHJpdikpIHsKLQkJSVBXX1dBUk5JTkcoIlJhZGlvIEZyZXF1ZW5jeSBLaWxsIFN3aXRjaCBpcyBPbjpcbiIKLQkJCSAgICAiS2lsbCBzd2l0Y2ggbXVzdCBiZSB0dXJuZWQgb2ZmIGZvciAiCi0JCQkgICAgIndpcmVsZXNzIG5ldHdvcmtpbmcgdG8gd29yay5cbiIpOwotCQlxdWV1ZV9kZWxheWVkX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+cmZfa2lsbCwgMiAqIEhaKTsKLQkJcmV0dXJuIDA7CisJaWYgKGlwd191cChwcml2KSkgeworCQl1cCgmcHJpdi0+c2VtKTsKKwkJcmV0dXJuIC1FSU87CiAJfQogCi0JaWYgKGlwd191cChwcml2KSkKLQkJcmV0dXJuIC1FSU87Ci0KKwl1cCgmcHJpdi0+c2VtKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjk2MSw3ICsxMDg5NSw3IEBACiAJe1BDSV9WRU5ET1JfSURfSU5URUwsIDB4MTA0MywgMHg4MDg2LCAweDI3NjIsIDAsIDAsIDB9LAogCXtQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDEwNGYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAogCXtQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDQyMjAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAkvKiBCRyAqLwotCXtQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDQyMjEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAkvKiAyMjI1QkcgKi8KKwl7UENJX1ZFTkRPUl9JRF9JTlRFTCwgMHg0MjIxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwJLyogQkcgKi8KIAl7UENJX1ZFTkRPUl9JRF9JTlRFTCwgMHg0MjIzLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwJLyogQUJHICovCiAJe1BDSV9WRU5ET1JfSURfSU5URUwsIDB4NDIyNCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCS8qIEFCRyAqLwogCkBAIC02OTgxLDExICsxMDkxNSwxNiBAQAogCSZkZXZfYXR0cl9uaWNfdHlwZS5hdHRyLAogCSZkZXZfYXR0cl9zdGF0dXMuYXR0ciwKIAkmZGV2X2F0dHJfY2ZnLmF0dHIsCi0JJmRldl9hdHRyX2R1bXBfZXJyb3JzLmF0dHIsCi0JJmRldl9hdHRyX2R1bXBfZXZlbnRzLmF0dHIsCisJJmRldl9hdHRyX2Vycm9yLmF0dHIsCisJJmRldl9hdHRyX2V2ZW50X2xvZy5hdHRyLAorCSZkZXZfYXR0cl9jbWRfbG9nLmF0dHIsCiAJJmRldl9hdHRyX2VlcHJvbV9kZWxheS5hdHRyLAogCSZkZXZfYXR0cl91Y29kZV92ZXJzaW9uLmF0dHIsCiAJJmRldl9hdHRyX3J0Yy5hdHRyLAorCSZkZXZfYXR0cl9zY2FuX2FnZS5hdHRyLAorCSZkZXZfYXR0cl9sZWQuYXR0ciwKKwkmZGV2X2F0dHJfc3BlZWRfc2Nhbi5hdHRyLAorCSZkZXZfYXR0cl9uZXRfc3RhdHMuYXR0ciwKIAlOVUxMCiB9OwogCkBAIC03MDAxLDcgKzEwOTQwLDcgQEAKIAl2b2lkIF9faW9tZW0gKmJhc2U7CiAJdTMyIGxlbmd0aCwgdmFsOwogCXN0cnVjdCBpcHdfcHJpdiAqcHJpdjsKLQlpbnQgYmFuZCwgbW9kdWxhdGlvbjsKKwlpbnQgaTsKIAogCW5ldF9kZXYgPSBhbGxvY19pZWVlODAyMTEoc2l6ZW9mKHN0cnVjdCBpcHdfcHJpdikpOwogCWlmIChuZXRfZGV2ID09IE5VTEwpIHsKQEAgLTcwMTEsMTMgKzEwOTUwLDE3IEBACiAKIAlwcml2ID0gaWVlZTgwMjExX3ByaXYobmV0X2Rldik7CiAJcHJpdi0+aWVlZSA9IG5ldGRldl9wcml2KG5ldF9kZXYpOworCiAJcHJpdi0+bmV0X2RldiA9IG5ldF9kZXY7CiAJcHJpdi0+cGNpX2RldiA9IHBkZXY7CiAjaWZkZWYgQ09ORklHX0lQV19ERUJVRwogCWlwd19kZWJ1Z19sZXZlbCA9IGRlYnVnOwogI2VuZGlmCiAJc3Bpbl9sb2NrX2luaXQoJnByaXYtPmxvY2spOworCWZvciAoaSA9IDA7IGkgPCBJUFdfSUJTU19NQUNfSEFTSF9TSVpFOyBpKyspCisJCUlOSVRfTElTVF9IRUFEKCZwcml2LT5pYnNzX21hY19oYXNoW2ldKTsKIAorCWluaXRfTVVURVgoJnByaXYtPnNlbSk7CiAJaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpKSB7CiAJCWVyciA9IC1FTk9ERVY7CiAJCWdvdG8gb3V0X2ZyZWVfaWVlZTgwMjExOwpAQCAtNzA2NCw5MCArMTEwMDcsNyBAQAogCQlnb3RvIG91dF9pb3VubWFwOwogCX0KIAotCS8qIEluaXRpYWxpemUgbW9kdWxlIHBhcmFtZXRlciB2YWx1ZXMgaGVyZSAqLwotCWlmIChpZm5hbWUpCi0JCXN0cm5jcHkobmV0X2Rldi0+bmFtZSwgaWZuYW1lLCBJRk5BTVNJWik7Ci0KLQlpZiAoYXNzb2NpYXRlKQotCQlwcml2LT5jb25maWcgfD0gQ0ZHX0FTU09DSUFURTsKLQllbHNlCi0JCUlQV19ERUJVR19JTkZPKCJBdXRvIGFzc29jaWF0ZSBkaXNhYmxlZC5cbiIpOwotCi0JaWYgKGF1dG9fY3JlYXRlKQotCQlwcml2LT5jb25maWcgfD0gQ0ZHX0FESE9DX0NSRUFURTsKLQllbHNlCi0JCUlQV19ERUJVR19JTkZPKCJBdXRvIGFkaG9jIGNyZWF0aW9uIGRpc2FibGVkLlxuIik7Ci0KLQlpZiAoZGlzYWJsZSkgewotCQlwcml2LT5zdGF0dXMgfD0gU1RBVFVTX1JGX0tJTExfU1c7Ci0JCUlQV19ERUJVR19JTkZPKCJSYWRpbyBkaXNhYmxlZC5cbiIpOwotCX0KLQotCWlmIChjaGFubmVsICE9IDApIHsKLQkJcHJpdi0+Y29uZmlnIHw9IENGR19TVEFUSUNfQ0hBTk5FTDsKLQkJcHJpdi0+Y2hhbm5lbCA9IGNoYW5uZWw7Ci0JCUlQV19ERUJVR19JTkZPKCJCaW5kIHRvIHN0YXRpYyBjaGFubmVsICVkXG4iLCBjaGFubmVsKTsKLQkJSVBXX0RFQlVHX0lORk8oIkJpbmQgdG8gc3RhdGljIGNoYW5uZWwgJWRcbiIsIGNoYW5uZWwpOwotCQkvKiBUT0RPOiBWYWxpZGF0ZSB0aGF0IHByb3ZpZGVkIGNoYW5uZWwgaXMgaW4gcmFuZ2UgKi8KLQl9Ci0KLQlzd2l0Y2ggKG1vZGUpIHsKLQljYXNlIDE6Ci0JCXByaXYtPmllZWUtPml3X21vZGUgPSBJV19NT0RFX0FESE9DOwotCQlicmVhazsKLSNpZmRlZiBDT05GSUdfSVBXX1BST01JU0MKLQljYXNlIDI6Ci0JCXByaXYtPmllZWUtPml3X21vZGUgPSBJV19NT0RFX01PTklUT1I7Ci0JCWJyZWFrOwotI2VuZGlmCi0JZGVmYXVsdDoKLQljYXNlIDA6Ci0JCXByaXYtPmllZWUtPml3X21vZGUgPSBJV19NT0RFX0lORlJBOwotCQlicmVhazsKLQl9Ci0KLQlpZiAoKHByaXYtPnBjaV9kZXYtPmRldmljZSA9PSAweDQyMjMpIHx8Ci0JICAgIChwcml2LT5wY2lfZGV2LT5kZXZpY2UgPT0gMHg0MjI0KSkgewotCQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FCi0JCSAgICAgICAiOiBEZXRlY3RlZCBJbnRlbCBQUk8vV2lyZWxlc3MgMjkxNUFCRyBOZXR3b3JrICIKLQkJICAgICAgICJDb25uZWN0aW9uXG4iKTsKLQkJcHJpdi0+aWVlZS0+YWJnX3RydWUgPSAxOwotCQliYW5kID0gSUVFRTgwMjExXzUyR0haX0JBTkQgfCBJRUVFODAyMTFfMjRHSFpfQkFORDsKLQkJbW9kdWxhdGlvbiA9IElFRUU4MDIxMV9PRkRNX01PRFVMQVRJT04gfAotCQkgICAgSUVFRTgwMjExX0NDS19NT0RVTEFUSU9OOwotCQlwcml2LT5hZGFwdGVyID0gSVBXXzI5MTVBQkc7Ci0JCXByaXYtPmllZWUtPm1vZGUgPSBJRUVFX0EgfCBJRUVFX0cgfCBJRUVFX0I7Ci0JfSBlbHNlIHsKLQkJaWYgKHByaXYtPnBjaV9kZXYtPmRldmljZSA9PSAweDQyMjEpCi0JCQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FCi0JCQkgICAgICAgIjogRGV0ZWN0ZWQgSW50ZWwgUFJPL1dpcmVsZXNzIDIyMjVCRyBOZXR3b3JrICIKLQkJCSAgICAgICAiQ29ubmVjdGlvblxuIik7Ci0JCWVsc2UKLQkJCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUKLQkJCSAgICAgICAiOiBEZXRlY3RlZCBJbnRlbCBQUk8vV2lyZWxlc3MgMjIwMEJHIE5ldHdvcmsgIgotCQkJICAgICAgICJDb25uZWN0aW9uXG4iKTsKLQotCQlwcml2LT5pZWVlLT5hYmdfdHJ1ZSA9IDA7Ci0JCWJhbmQgPSBJRUVFODAyMTFfMjRHSFpfQkFORDsKLQkJbW9kdWxhdGlvbiA9IElFRUU4MDIxMV9PRkRNX01PRFVMQVRJT04gfAotCQkgICAgSUVFRTgwMjExX0NDS19NT0RVTEFUSU9OOwotCQlwcml2LT5hZGFwdGVyID0gSVBXXzIyMDBCRzsKLQkJcHJpdi0+aWVlZS0+bW9kZSA9IElFRUVfRyB8IElFRUVfQjsKLQl9Ci0KLQlwcml2LT5pZWVlLT5mcmVxX2JhbmQgPSBiYW5kOwotCXByaXYtPmllZWUtPm1vZHVsYXRpb24gPSBtb2R1bGF0aW9uOwotCi0JcHJpdi0+cmF0ZXNfbWFzayA9IElFRUU4MDIxMV9ERUZBVUxUX1JBVEVTX01BU0s7Ci0KLQlwcml2LT5taXNzZWRfYmVhY29uX3RocmVzaG9sZCA9IElQV19NQl9ESVNBU1NPQ0lBVEVfVEhSRVNIT0xEX0RFRkFVTFQ7Ci0JcHJpdi0+cm9hbWluZ190aHJlc2hvbGQgPSBJUFdfTUJfUk9BTUlOR19USFJFU0hPTERfREVGQVVMVDsKLQotCXByaXYtPnJ0c190aHJlc2hvbGQgPSBERUZBVUxUX1JUU19USFJFU0hPTEQ7Ci0KLQkvKiBJZiBwb3dlciBtYW5hZ2VtZW50IGlzIHR1cm5lZCBvbiwgZGVmYXVsdCB0byBBQyBtb2RlICovCi0JcHJpdi0+cG93ZXJfbW9kZSA9IElQV19QT1dFUl9BQzsKLQlwcml2LT50eF9wb3dlciA9IElQV19ERUZBVUxUX1RYX1BPV0VSOworCWlwd19zd19yZXNldChwcml2LCAxKTsKIAogCWVyciA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgaXB3X2lzciwgU0FfU0hJUlEsIERSVl9OQU1FLCBwcml2KTsKIAlpZiAoZXJyKSB7CkBAIC03MTU4LDggKzExMDE4LDIwIEBACiAJU0VUX01PRFVMRV9PV05FUihuZXRfZGV2KTsKIAlTRVRfTkVUREVWX0RFVihuZXRfZGV2LCAmcGRldi0+ZGV2KTsKIAorCWRvd24oJnByaXYtPnNlbSk7CisKIAlwcml2LT5pZWVlLT5oYXJkX3N0YXJ0X3htaXQgPSBpcHdfbmV0X2hhcmRfc3RhcnRfeG1pdDsKIAlwcml2LT5pZWVlLT5zZXRfc2VjdXJpdHkgPSBzaGltX19zZXRfc2VjdXJpdHk7CisJcHJpdi0+aWVlZS0+aXNfcXVldWVfZnVsbCA9IGlwd19uZXRfaXNfcXVldWVfZnVsbDsKKworI2lmZGVmIENPTkZJR19JUFdfUU9TCisJcHJpdi0+aWVlZS0+aGFuZGxlX3Byb2JlX3Jlc3BvbnNlID0gaXB3X2hhbmRsZV9iZWFjb247CisJcHJpdi0+aWVlZS0+aGFuZGxlX2JlYWNvbiA9IGlwd19oYW5kbGVfcHJvYmVfcmVzcG9uc2U7CisJcHJpdi0+aWVlZS0+aGFuZGxlX2Fzc29jX3Jlc3BvbnNlID0gaXB3X2hhbmRsZV9hc3NvY19yZXNwb25zZTsKKyNlbmRpZgkJCQkvKiBDT05GSUdfSVBXX1FPUyAqLworCisJcHJpdi0+aWVlZS0+cGVyZmVjdF9yc3NpID0gLTIwOworCXByaXYtPmllZWUtPndvcnN0X3Jzc2kgPSAtODU7CiAKIAluZXRfZGV2LT5vcGVuID0gaXB3X25ldF9vcGVuOwogCW5ldF9kZXYtPnN0b3AgPSBpcHdfbmV0X3N0b3A7CkBAIC03MTY3LDcgKzExMDM5LDkgQEAKIAluZXRfZGV2LT5nZXRfc3RhdHMgPSBpcHdfbmV0X2dldF9zdGF0czsKIAluZXRfZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBpcHdfbmV0X3NldF9tdWx0aWNhc3RfbGlzdDsKIAluZXRfZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBpcHdfbmV0X3NldF9tYWNfYWRkcmVzczsKLQluZXRfZGV2LT5nZXRfd2lyZWxlc3Nfc3RhdHMgPSBpcHdfZ2V0X3dpcmVsZXNzX3N0YXRzOworCXByaXYtPndpcmVsZXNzX2RhdGEuc3B5X2RhdGEgPSAmcHJpdi0+aWVlZS0+c3B5X2RhdGE7CisJcHJpdi0+d2lyZWxlc3NfZGF0YS5pZWVlODAyMTEgPSBwcml2LT5pZWVlOworCW5ldF9kZXYtPndpcmVsZXNzX2RhdGEgPSAmcHJpdi0+d2lyZWxlc3NfZGF0YTsKIAluZXRfZGV2LT53aXJlbGVzc19oYW5kbGVycyA9ICZpcHdfd3hfaGFuZGxlcl9kZWY7CiAJbmV0X2Rldi0+ZXRodG9vbF9vcHMgPSAmaXB3X2V0aHRvb2xfb3BzOwogCW5ldF9kZXYtPmlycSA9IHBkZXYtPmlycTsKQEAgLTcxNzgsMTggKzExMDUyLDE5IEBACiAJZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJmlwd19hdHRyaWJ1dGVfZ3JvdXApOwogCWlmIChlcnIpIHsKIAkJSVBXX0VSUk9SKCJmYWlsZWQgdG8gY3JlYXRlIHN5c2ZzIGRldmljZSBhdHRyaWJ1dGVzXG4iKTsKKwkJdXAoJnByaXYtPnNlbSk7CiAJCWdvdG8gb3V0X3JlbGVhc2VfaXJxOwogCX0KIAorCXVwKCZwcml2LT5zZW0pOwogCWVyciA9IHJlZ2lzdGVyX25ldGRldihuZXRfZGV2KTsKIAlpZiAoZXJyKSB7CiAJCUlQV19FUlJPUigiZmFpbGVkIHRvIHJlZ2lzdGVyIG5ldHdvcmsgZGV2aWNlXG4iKTsKLQkJZ290byBvdXRfcmVtb3ZlX2dyb3VwOworCQlnb3RvIG91dF9yZW1vdmVfc3lzZnM7CiAJfQotCiAJcmV0dXJuIDA7CiAKLSAgICAgIG91dF9yZW1vdmVfZ3JvdXA6CisgICAgICBvdXRfcmVtb3ZlX3N5c2ZzOgogCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZpcHdfYXR0cmlidXRlX2dyb3VwKTsKICAgICAgIG91dF9yZWxlYXNlX2lycToKIAlmcmVlX2lycShwZGV2LT5pcnEsIHByaXYpOwpAQCAtNzIxMiwxNCArMTEwODcsMTkgQEAKIHN0YXRpYyB2b2lkIGlwd19wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewogCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwLCAqcTsKKwlpbnQgaTsKKwogCWlmICghcHJpdikKIAkJcmV0dXJuOwogCi0JcHJpdi0+c3RhdHVzIHw9IFNUQVRVU19FWElUX1BFTkRJTkc7CisJZG93bigmcHJpdi0+c2VtKTsKIAorCXByaXYtPnN0YXR1cyB8PSBTVEFUVVNfRVhJVF9QRU5ESU5HOworCWlwd19kb3duKHByaXYpOwogCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZpcHdfYXR0cmlidXRlX2dyb3VwKTsKIAotCWlwd19kb3duKHByaXYpOworCXVwKCZwcml2LT5zZW0pOwogCiAJdW5yZWdpc3Rlcl9uZXRkZXYocHJpdi0+bmV0X2Rldik7CiAKQEAgLTcyMjksMTYgKzExMTA5LDMxIEBACiAJfQogCWlwd190eF9xdWV1ZV9mcmVlKHByaXYpOwogCisJaWYgKHByaXYtPmNtZGxvZykgeworCQlrZnJlZShwcml2LT5jbWRsb2cpOworCQlwcml2LT5jbWRsb2cgPSBOVUxMOworCX0KIAkvKiBpcHdfZG93biB3aWxsIGVuc3VyZSB0aGF0IHRoZXJlIGlzIG5vIG1vcmUgcGVuZGluZyB3b3JrCiAJICogaW4gdGhlIHdvcmtxdWV1ZSdzLCBzbyB3ZSBjYW4gc2FmZWx5IHJlbW92ZSB0aGVtIG5vdy4gKi8KLQlpZiAocHJpdi0+d29ya3F1ZXVlKSB7Ci0JCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPmFkaG9jX2NoZWNrKTsKLQkJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+Z2F0aGVyX3N0YXRzKTsKLQkJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+cmVxdWVzdF9zY2FuKTsKLQkJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+cmZfa2lsbCk7Ci0JCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPnNjYW5fY2hlY2spOwotCQlkZXN0cm95X3dvcmtxdWV1ZShwcml2LT53b3JrcXVldWUpOwotCQlwcml2LT53b3JrcXVldWUgPSBOVUxMOworCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPmFkaG9jX2NoZWNrKTsKKwljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT5nYXRoZXJfc3RhdHMpOworCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPnJlcXVlc3Rfc2Nhbik7CisJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+cmZfa2lsbCk7CisJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+c2Nhbl9jaGVjayk7CisJZGVzdHJveV93b3JrcXVldWUocHJpdi0+d29ya3F1ZXVlKTsKKwlwcml2LT53b3JrcXVldWUgPSBOVUxMOworCisJLyogRnJlZSBNQUMgaGFzaCBsaXN0IGZvciBBREhPQyAqLworCWZvciAoaSA9IDA7IGkgPCBJUFdfSUJTU19NQUNfSEFTSF9TSVpFOyBpKyspIHsKKwkJbGlzdF9mb3JfZWFjaF9zYWZlKHAsIHEsICZwcml2LT5pYnNzX21hY19oYXNoW2ldKSB7CisJCQlrZnJlZShsaXN0X2VudHJ5KHAsIHN0cnVjdCBpcHdfaWJzc19zZXEsIGxpc3QpKTsKKwkJCWxpc3RfZGVsKHApOworCQl9CisJfQorCisJaWYgKHByaXYtPmVycm9yKSB7CisJCWlwd19mcmVlX2Vycm9yX2xvZyhwcml2LT5lcnJvcik7CisJCXByaXYtPmVycm9yID0gTlVMTDsKIAl9CiAKIAlmcmVlX2lycShwZGV2LT5pcnEsIHByaXYpOwpAQCAtNzI0NywxNSArMTExNDIsNyBAQAogCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAJZnJlZV9pZWVlODAyMTEocHJpdi0+bmV0X2Rldik7Ci0KLSNpZmRlZiBDT05GSUdfUE0KLQlpZiAoZndfbG9hZGVkKSB7Ci0JCXJlbGVhc2VfZmlybXdhcmUoYm9vdGZ3KTsKLQkJcmVsZWFzZV9maXJtd2FyZSh1Y29kZSk7Ci0JCXJlbGVhc2VfZmlybXdhcmUoZmlybXdhcmUpOwotCQlmd19sb2FkZWQgPSAwOwotCX0KLSNlbmRpZgorCWZyZWVfZmlybXdhcmUoKTsKIH0KIAogI2lmZGVmIENPTkZJR19QTQpAQCAtNzI4NywxMyArMTExNzQsMTAgQEAKIAogCXByaW50ayhLRVJOX0lORk8gIiVzOiBDb21pbmcgb3V0IG9mIHN1c3BlbmQuLi5cbiIsIGRldi0+bmFtZSk7CiAKLQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIDApOworCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QwKTsKIAlwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMTApCi0JcGNpX3Jlc3RvcmVfc3RhdGUocGRldiwgcHJpdi0+cG1fc3RhdGUpOwotI2Vsc2UKIAlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKLSNlbmRpZgorCiAJLyoKIAkgKiBTdXNwZW5kL1Jlc3VtZSByZXNldHMgdGhlIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlLCBzbyB3ZSBoYXZlIHRvCiAJICogcmUtZGlzYWJsZSB0aGUgUkVUUllfVElNRU9VVCByZWdpc3RlciAoMHg0MSkgdG8ga2VlcCBQQ0kgVHggcmV0cmllcwpAQCAtNzM2NSwxNiArMTEyNDksMzMgQEAKIG1vZHVsZV9wYXJhbShhdXRvX2NyZWF0ZSwgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoYXV0b19jcmVhdGUsICJhdXRvIGNyZWF0ZSBhZGhvYyBuZXR3b3JrIChkZWZhdWx0IG9uKSIpOwogCittb2R1bGVfcGFyYW0obGVkLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhsZWQsICJlbmFibGUgbGVkIGNvbnRyb2wgb24gc29tZSBzeXN0ZW1zIChkZWZhdWx0IDAgb2ZmKVxuIik7CisKIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJkZWJ1ZyBvdXRwdXQgbWFzayIpOwogCiBtb2R1bGVfcGFyYW0oY2hhbm5lbCwgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoY2hhbm5lbCwgImNoYW5uZWwgdG8gbGltaXQgYXNzb2NpYXRlIHRvIChkZWZhdWx0IDAgW0FOWV0pIik7CiAKLW1vZHVsZV9wYXJhbShpZm5hbWUsIGNoYXJwLCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoaWZuYW1lLCAibmV0d29yayBkZXZpY2UgbmFtZSAoZGVmYXVsdCBldGglZCkiKTsKKyNpZmRlZiBDT05GSUdfSVBXX1FPUworbW9kdWxlX3BhcmFtKHFvc19lbmFibGUsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHFvc19lbmFibGUsICJlbmFibGUgYWxsIFFvUyBmdW5jdGlvbmFsaXRpcyIpOwogCi0jaWZkZWYgQ09ORklHX0lQV19QUk9NSVNDCittb2R1bGVfcGFyYW0ocW9zX2J1cnN0X2VuYWJsZSwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MocW9zX2J1cnN0X2VuYWJsZSwgImVuYWJsZSBRb1MgYnVyc3QgbW9kZSIpOworCittb2R1bGVfcGFyYW0ocW9zX25vX2Fja19tYXNrLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhxb3Nfbm9fYWNrX21hc2ssICJtYXNrIFR4X1F1ZXVlIHRvIG5vIGFjayIpOworCittb2R1bGVfcGFyYW0oYnVyc3RfZHVyYXRpb25fQ0NLLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhidXJzdF9kdXJhdGlvbl9DQ0ssICJzZXQgQ0NLIGJ1cnN0IHZhbHVlIik7CisKK21vZHVsZV9wYXJhbShidXJzdF9kdXJhdGlvbl9PRkRNLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhidXJzdF9kdXJhdGlvbl9PRkRNLCAic2V0IE9GRE0gYnVyc3QgdmFsdWUiKTsKKyNlbmRpZgkJCQkvKiBDT05GSUdfSVBXX1FPUyAqLworCisjaWZkZWYgQ09ORklHX0lQVzIyMDBfTU9OSVRPUgogbW9kdWxlX3BhcmFtKG1vZGUsIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKG1vZGUsICJuZXR3b3JrIG1vZGUgKDA9QlNTLDE9SUJTUywyPU1vbml0b3IpIik7CiAjZWxzZQpAQCAtNzM4Miw1ICsxMTI4MywxMiBAQAogTU9EVUxFX1BBUk1fREVTQyhtb2RlLCAibmV0d29yayBtb2RlICgwPUJTUywxPUlCU1MpIik7CiAjZW5kaWYKIAorbW9kdWxlX3BhcmFtKGh3Y3J5cHRvLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhod2NyeXB0bywgImVuYWJsZSBoYXJkd2FyZSBjcnlwdG8gKGRlZmF1bHQgb24pIik7CisKK21vZHVsZV9wYXJhbShjbWRsb2csIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGNtZGxvZywKKwkJICJhbGxvY2F0ZSBhIHJpbmcgYnVmZmVyIGZvciBsb2dnaW5nIGZpcm13YXJlIGNvbW1hbmRzIik7CisKIG1vZHVsZV9leGl0KGlwd19leGl0KTsKIG1vZHVsZV9pbml0KGlwd19pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzIyMDAuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzIyMDAuaAppbmRleCBlOWNmMzJiLi4xYzk4ZGIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyMjAwLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MjIwMC5oCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCi0gIENvcHlyaWdodChjKSAyMDAzIC0gMjAwNCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA1IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogCiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC0zNCw3ICszNCw2IEBACiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KQEAgLTUwLDYgKzQ5LDcgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KIAogI2luY2x1ZGUgPG5ldC9pZWVlODAyMTEuaD4KKyNpbmNsdWRlIDxuZXQvaWVlZTgwMjExX3JhZGlvdGFwLmg+CiAKICNkZWZpbmUgRFJWX05BTUUJImlwdzIyMDAiCiAKQEAgLTE2MSw2ICsxNjEsMTYgQEAKICAqIFRYIFF1ZXVlIEZsYWcgRGVmaW5pdGlvbnMKICAqLwogCisvKiB0eCB3ZXAga2V5IGRlZmluaXRpb24gKi8KKyNkZWZpbmUgRENUX1dFUF9LRVlfTk9UX0lNTUlESUFURQkweDAwCisjZGVmaW5lIERDVF9XRVBfS0VZXzY0Qml0CQkweDQwCisjZGVmaW5lIERDVF9XRVBfS0VZXzEyOEJpdAkJMHg4MAorI2RlZmluZSBEQ1RfV0VQX0tFWV8xMjhiaXRJVgkJMHhDMAorI2RlZmluZSBEQ1RfV0VQX0tFWV9TSVpFX01BU0sJCTB4QzAKKworI2RlZmluZSBEQ1RfV0VQX0tFWV9JTkRFWF9NQVNLCQkweDBGCisjZGVmaW5lIERDVF9XRVBfSU5ERVhfVVNFX0lNTUVESUFURQkweDIwCisKIC8qIGFib3J0IGF0dGVtcHQgaWYgbWdtdCBmcmFtZSBpcyByeCdkICovCiAjZGVmaW5lIERDVF9GTEFHX0FCT1JUX01HTVQgICAgICAgICAgICAgICAgMHgwMQogCkBAIC0xNjgsNyArMTc4LDggQEAKICNkZWZpbmUgRENUX0ZMQUdfQ1RTX1JFUVVJUkVEICAgICAgICAgICAgICAweDAyCiAKIC8qIHVzZSBzaG9ydCBwcmVhbWJsZSAqLwotI2RlZmluZSBEQ1RfRkxBR19TSE9SVF9QUkVNQkwgICAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgRENUX0ZMQUdfTE9OR19QUkVBTUJMRSAgICAgICAgICAgICAweDAwCisjZGVmaW5lIERDVF9GTEFHX1NIT1JUX1BSRUFNQkxFICAgICAgICAgICAgMHgwNAogCiAvKiBSVFMvQ1RTIGZpcnN0ICovCiAjZGVmaW5lIERDVF9GTEFHX1JUU19SRVFEICAgICAgICAgICAgICAgICAgMHgwOApAQCAtMTg1LDkgKzE5NiwyMyBAQAogLyogQUNLIHJ4IGlzIGV4cGVjdGVkIHRvIGZvbGxvdyAqLwogI2RlZmluZSBEQ1RfRkxBR19BQ0tfUkVRRCAgICAgICAgICAgICAgICAgIDB4ODAKIAorLyogVFggZmxhZ3MgZXh0ZW5zaW9uICovCiAjZGVmaW5lIERDVF9GTEFHX0VYVF9NT0RFX0NDSyAgMHgwMQogI2RlZmluZSBEQ1RfRkxBR19FWFRfTU9ERV9PRkRNIDB4MDAKIAorI2RlZmluZSBEQ1RfRkxBR19FWFRfU0VDVVJJVFlfV0VQICAgICAweDAwCisjZGVmaW5lIERDVF9GTEFHX0VYVF9TRUNVUklUWV9OTyAgICAgIERDVF9GTEFHX0VYVF9TRUNVUklUWV9XRVAKKyNkZWZpbmUgRENUX0ZMQUdfRVhUX1NFQ1VSSVRZX0NLSVAgICAgMHgwNAorI2RlZmluZSBEQ1RfRkxBR19FWFRfU0VDVVJJVFlfQ0NNICAgICAweDA4CisjZGVmaW5lIERDVF9GTEFHX0VYVF9TRUNVUklUWV9US0lQICAgIDB4MEMKKyNkZWZpbmUgRENUX0ZMQUdfRVhUX1NFQ1VSSVRZX01BU0sgICAgMHgwQworCisjZGVmaW5lIERDVF9GTEFHX0VYVF9RT1NfRU5BQkxFRCAgICAgIDB4MTAKKworI2RlZmluZSBEQ1RfRkxBR19FWFRfSENfTk9fU0lGU19QSUZTICAweDAwCisjZGVmaW5lIERDVF9GTEFHX0VYVF9IQ19TSUZTICAgICAgICAgIDB4MjAKKyNkZWZpbmUgRENUX0ZMQUdfRVhUX0hDX1BJRlMgICAgICAgICAgMHg0MAorCiAjZGVmaW5lIFRYX1JYX1RZUEVfTUFTSyAgICAgICAgICAgICAgICAgICAgMHhGRgogI2RlZmluZSBUWF9GUkFNRV9UWVBFICAgICAgICAgICAgICAgICAgICAgIDB4MDAKICNkZWZpbmUgVFhfSE9TVF9DT01NQU5EX1RZUEUgICAgICAgICAgICAgICAweDAxCkBAIC0yMzMsNiArMjU4LDExNyBAQAogI2RlZmluZSBEQ1JfVFlQRV9TTklGRkVSICAgICAgICAgICAgICAgICAgMHgwNgogI2RlZmluZSBEQ1JfVFlQRV9NVV9CU1MgICAgICAgIERDUl9UWVBFX01VX0VTUwogCisvKiBRb1MgIGRlZmluaXRpb25zICovCisKKyNkZWZpbmUgQ1dfTUlOX09GRE0gICAgICAgICAgMTUKKyNkZWZpbmUgQ1dfTUFYX09GRE0gICAgICAgICAgMTAyMworI2RlZmluZSBDV19NSU5fQ0NLICAgICAgICAgICAzMQorI2RlZmluZSBDV19NQVhfQ0NLICAgICAgICAgICAxMDIzCisKKyNkZWZpbmUgUU9TX1RYMF9DV19NSU5fT0ZETSAgICAgIENXX01JTl9PRkRNCisjZGVmaW5lIFFPU19UWDFfQ1dfTUlOX09GRE0gICAgICBDV19NSU5fT0ZETQorI2RlZmluZSBRT1NfVFgyX0NXX01JTl9PRkRNICAgICAgKCAoQ1dfTUlOX09GRE0gKyAxKSAvIDIgLSAxICkKKyNkZWZpbmUgUU9TX1RYM19DV19NSU5fT0ZETSAgICAgICggKENXX01JTl9PRkRNICsgMSkgLyA0IC0gMSApCisKKyNkZWZpbmUgUU9TX1RYMF9DV19NSU5fQ0NLICAgICAgIENXX01JTl9DQ0sKKyNkZWZpbmUgUU9TX1RYMV9DV19NSU5fQ0NLICAgICAgIENXX01JTl9DQ0sKKyNkZWZpbmUgUU9TX1RYMl9DV19NSU5fQ0NLICAgICAgICggKENXX01JTl9DQ0sgKyAxKSAvIDIgLSAxICkKKyNkZWZpbmUgUU9TX1RYM19DV19NSU5fQ0NLICAgICAgICggKENXX01JTl9DQ0sgKyAxKSAvIDQgLSAxICkKKworI2RlZmluZSBRT1NfVFgwX0NXX01BWF9PRkRNICAgICAgQ1dfTUFYX09GRE0KKyNkZWZpbmUgUU9TX1RYMV9DV19NQVhfT0ZETSAgICAgIENXX01BWF9PRkRNCisjZGVmaW5lIFFPU19UWDJfQ1dfTUFYX09GRE0gICAgICBDV19NSU5fT0ZETQorI2RlZmluZSBRT1NfVFgzX0NXX01BWF9PRkRNICAgICAgKCAoQ1dfTUlOX09GRE0gKyAxKSAvIDIgLSAxICkKKworI2RlZmluZSBRT1NfVFgwX0NXX01BWF9DQ0sgICAgICAgQ1dfTUFYX0NDSworI2RlZmluZSBRT1NfVFgxX0NXX01BWF9DQ0sgICAgICAgQ1dfTUFYX0NDSworI2RlZmluZSBRT1NfVFgyX0NXX01BWF9DQ0sgICAgICAgQ1dfTUlOX0NDSworI2RlZmluZSBRT1NfVFgzX0NXX01BWF9DQ0sgICAgICAgKCAoQ1dfTUlOX0NDSyArIDEpIC8gMiAtIDEgKQorCisjZGVmaW5lIFFPU19UWDBfQUlGUyAgICAgICAgICAgICgzIC0gUU9TX0FJRlNOX01JTl9WQUxVRSkKKyNkZWZpbmUgUU9TX1RYMV9BSUZTICAgICAgICAgICAgKDcgLSBRT1NfQUlGU05fTUlOX1ZBTFVFKQorI2RlZmluZSBRT1NfVFgyX0FJRlMgICAgICAgICAgICAoMiAtIFFPU19BSUZTTl9NSU5fVkFMVUUpCisjZGVmaW5lIFFPU19UWDNfQUlGUyAgICAgICAgICAgICgyIC0gUU9TX0FJRlNOX01JTl9WQUxVRSkKKworI2RlZmluZSBRT1NfVFgwX0FDTSAgICAgICAgICAgICAwCisjZGVmaW5lIFFPU19UWDFfQUNNICAgICAgICAgICAgIDAKKyNkZWZpbmUgUU9TX1RYMl9BQ00gICAgICAgICAgICAgMAorI2RlZmluZSBRT1NfVFgzX0FDTSAgICAgICAgICAgICAwCisKKyNkZWZpbmUgUU9TX1RYMF9UWE9QX0xJTUlUX0NDSyAgICAgICAgICAwCisjZGVmaW5lIFFPU19UWDFfVFhPUF9MSU1JVF9DQ0sgICAgICAgICAgMAorI2RlZmluZSBRT1NfVFgyX1RYT1BfTElNSVRfQ0NLICAgICAgICAgIDYwMTYKKyNkZWZpbmUgUU9TX1RYM19UWE9QX0xJTUlUX0NDSyAgICAgICAgICAzMjY0CisKKyNkZWZpbmUgUU9TX1RYMF9UWE9QX0xJTUlUX09GRE0gICAgICAwCisjZGVmaW5lIFFPU19UWDFfVFhPUF9MSU1JVF9PRkRNICAgICAgMAorI2RlZmluZSBRT1NfVFgyX1RYT1BfTElNSVRfT0ZETSAgICAgIDMwMDgKKyNkZWZpbmUgUU9TX1RYM19UWE9QX0xJTUlUX09GRE0gICAgICAxNTA0CisKKyNkZWZpbmUgREVGX1RYMF9DV19NSU5fT0ZETSAgICAgIENXX01JTl9PRkRNCisjZGVmaW5lIERFRl9UWDFfQ1dfTUlOX09GRE0gICAgICBDV19NSU5fT0ZETQorI2RlZmluZSBERUZfVFgyX0NXX01JTl9PRkRNICAgICAgQ1dfTUlOX09GRE0KKyNkZWZpbmUgREVGX1RYM19DV19NSU5fT0ZETSAgICAgIENXX01JTl9PRkRNCisKKyNkZWZpbmUgREVGX1RYMF9DV19NSU5fQ0NLICAgICAgIENXX01JTl9DQ0sKKyNkZWZpbmUgREVGX1RYMV9DV19NSU5fQ0NLICAgICAgIENXX01JTl9DQ0sKKyNkZWZpbmUgREVGX1RYMl9DV19NSU5fQ0NLICAgICAgIENXX01JTl9DQ0sKKyNkZWZpbmUgREVGX1RYM19DV19NSU5fQ0NLICAgICAgIENXX01JTl9DQ0sKKworI2RlZmluZSBERUZfVFgwX0NXX01BWF9PRkRNICAgICAgQ1dfTUFYX09GRE0KKyNkZWZpbmUgREVGX1RYMV9DV19NQVhfT0ZETSAgICAgIENXX01BWF9PRkRNCisjZGVmaW5lIERFRl9UWDJfQ1dfTUFYX09GRE0gICAgICBDV19NQVhfT0ZETQorI2RlZmluZSBERUZfVFgzX0NXX01BWF9PRkRNICAgICAgQ1dfTUFYX09GRE0KKworI2RlZmluZSBERUZfVFgwX0NXX01BWF9DQ0sgICAgICAgQ1dfTUFYX0NDSworI2RlZmluZSBERUZfVFgxX0NXX01BWF9DQ0sgICAgICAgQ1dfTUFYX0NDSworI2RlZmluZSBERUZfVFgyX0NXX01BWF9DQ0sgICAgICAgQ1dfTUFYX0NDSworI2RlZmluZSBERUZfVFgzX0NXX01BWF9DQ0sgICAgICAgQ1dfTUFYX0NDSworCisjZGVmaW5lIERFRl9UWDBfQUlGUyAgICAgICAgICAgIDAKKyNkZWZpbmUgREVGX1RYMV9BSUZTICAgICAgICAgICAgMAorI2RlZmluZSBERUZfVFgyX0FJRlMgICAgICAgICAgICAwCisjZGVmaW5lIERFRl9UWDNfQUlGUyAgICAgICAgICAgIDAKKworI2RlZmluZSBERUZfVFgwX0FDTSAgICAgICAgICAgICAwCisjZGVmaW5lIERFRl9UWDFfQUNNICAgICAgICAgICAgIDAKKyNkZWZpbmUgREVGX1RYMl9BQ00gICAgICAgICAgICAgMAorI2RlZmluZSBERUZfVFgzX0FDTSAgICAgICAgICAgICAwCisKKyNkZWZpbmUgREVGX1RYMF9UWE9QX0xJTUlUX0NDSyAgICAgICAgMAorI2RlZmluZSBERUZfVFgxX1RYT1BfTElNSVRfQ0NLICAgICAgICAwCisjZGVmaW5lIERFRl9UWDJfVFhPUF9MSU1JVF9DQ0sgICAgICAgIDAKKyNkZWZpbmUgREVGX1RYM19UWE9QX0xJTUlUX0NDSyAgICAgICAgMAorCisjZGVmaW5lIERFRl9UWDBfVFhPUF9MSU1JVF9PRkRNICAgICAgIDAKKyNkZWZpbmUgREVGX1RYMV9UWE9QX0xJTUlUX09GRE0gICAgICAgMAorI2RlZmluZSBERUZfVFgyX1RYT1BfTElNSVRfT0ZETSAgICAgICAwCisjZGVmaW5lIERFRl9UWDNfVFhPUF9MSU1JVF9PRkRNICAgICAgIDAKKworI2RlZmluZSBRT1NfUU9TX1NFVFMgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIFFPU19QQVJBTV9TRVRfQUNUSVZFICAgICAgICAgIDAKKyNkZWZpbmUgUU9TX1BBUkFNX1NFVF9ERUZfQ0NLICAgICAgICAgMQorI2RlZmluZSBRT1NfUEFSQU1fU0VUX0RFRl9PRkRNICAgICAgICAyCisKKyNkZWZpbmUgQ1RSTF9RT1NfTk9fQUNLICAgICAgICAgICAgICAgKDB4MDAyMCkKKworI2RlZmluZSBJUFdfVFhfUVVFVUVfMSAgICAgICAgMQorI2RlZmluZSBJUFdfVFhfUVVFVUVfMiAgICAgICAgMgorI2RlZmluZSBJUFdfVFhfUVVFVUVfMyAgICAgICAgMworI2RlZmluZSBJUFdfVFhfUVVFVUVfNCAgICAgICAgNAorCisvKiBRb1Mgc3R1cmN0dXJlcyAqLworc3RydWN0IGlwd19xb3NfaW5mbyB7CisJaW50IHFvc19lbmFibGU7CisJc3RydWN0IGllZWU4MDIxMV9xb3NfcGFyYW1ldGVycyAqZGVmX3Fvc19wYXJtX09GRE07CisJc3RydWN0IGllZWU4MDIxMV9xb3NfcGFyYW1ldGVycyAqZGVmX3Fvc19wYXJtX0NDSzsKKwl1MzIgYnVyc3RfZHVyYXRpb25fQ0NLOworCXUzMiBidXJzdF9kdXJhdGlvbl9PRkRNOworCXUxNiBxb3Nfbm9fYWNrX21hc2s7CisJaW50IGJ1cnN0X2VuYWJsZTsKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qKgogICogR2VuZXJpYyBxdWV1ZSBzdHJ1Y3R1cmUKICAqCkBAIC00MDIsOSArNTM4LDkgQEAKICNkZWZpbmUgUlhfRlJFRV9CVUZGRVJTIDMyCiAjZGVmaW5lIFJYX0xPV19XQVRFUk1BUksgOAogCi0jZGVmaW5lIFNVUF9SQVRFXzExQV9NQVhfTlVNX0NIQU5ORUxTICAoOCkKLSNkZWZpbmUgU1VQX1JBVEVfMTFCX01BWF9OVU1fQ0hBTk5FTFMgICg0KQotI2RlZmluZSBTVVBfUkFURV8xMUdfTUFYX05VTV9DSEFOTkVMUyAgKDEyKQorI2RlZmluZSBTVVBfUkFURV8xMUFfTUFYX05VTV9DSEFOTkVMUyAgOAorI2RlZmluZSBTVVBfUkFURV8xMUJfTUFYX05VTV9DSEFOTkVMUyAgNAorI2RlZmluZSBTVVBfUkFURV8xMUdfTUFYX05VTV9DSEFOTkVMUyAgMTIKIAogLy8gVXNlZCBmb3IgcGFzc2luZyB0byBkcml2ZXIgbnVtYmVyIG9mIHN1Y2Nlc3NlcyBhbmQgZmFpbHVyZXMgcGVyIHJhdGUKIHN0cnVjdCByYXRlX2hpc3RvZ3JhbSB7CkBAIC00NTMsNiArNTg5LDkgQEAKIAl1OCB1UmVzZXJ2ZWQ7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAorI2RlZmluZSBTQ0FOX0NPTVBMRVRFRF9TVEFUVVNfQ09NUExFVEUgIDEKKyNkZWZpbmUgU0NBTl9DT01QTEVURURfU1RBVFVTX0FCT1JURUQgICAyCisKIHN0cnVjdCBub3RpZl9zY2FuX2NvbXBsZXRlIHsKIAl1OCBzY2FuX3R5cGU7CiAJdTggbnVtX2NoYW5uZWxzOwpAQCAtNTYzLDggKzcwMiw4IEBACiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogI2RlZmluZSBJUFdfUlhfTk9USUZJQ0FUSU9OX1NJWkUgc2l6ZW9mKHN0cnVjdCBpcHdfcnhfaGVhZGVyKSArIDEyCi0jZGVmaW5lIElQV19SWF9GUkFNRV9TSVpFICAgICAgICBzaXplb2Yoc3RydWN0IGlwd19yeF9oZWFkZXIpICsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBpcHdfcnhfZnJhbWUpCisjZGVmaW5lIElQV19SWF9GUkFNRV9TSVpFICAgICAgICAodW5zaWduZWQgaW50KShzaXplb2Yoc3RydWN0IGlwd19yeF9oZWFkZXIpICsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBpcHdfcnhfZnJhbWUpKQogCiBzdHJ1Y3QgaXB3X3J4X21lbV9idWZmZXIgewogCWRtYV9hZGRyX3QgZG1hX2FkZHI7CkBAIC02NTcsNiArNzk2LDE5IEBACiAJdTggbWFjNFs2XTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCisjZGVmaW5lIERDV19XRVBfS0VZX0lOREVYX01BU0sJCTB4MDMJLyogYml0cyBbMDoxXSAqLworI2RlZmluZSBEQ1dfV0VQX0tFWV9TRUNfVFlQRV9NQVNLCTB4MzAJLyogYml0cyBbNDo1XSAqLworCisjZGVmaW5lIERDV19XRVBfS0VZX1NFQ19UWVBFX1dFUAkweDAwCisjZGVmaW5lIERDV19XRVBfS0VZX1NFQ19UWVBFX0NDTQkweDIwCisjZGVmaW5lIERDV19XRVBfS0VZX1NFQ19UWVBFX1RLSVAJMHgzMAorCisjZGVmaW5lIERDV19XRVBfS0VZX0lOVkFMSURfU0laRQkweDAwCS8qIDAgPSBJbnZhbGlkIGtleSAqLworI2RlZmluZSBEQ1dfV0VQX0tFWTY0Qml0X1NJWkUJCTB4MDUJLyogNjQtYml0IGVuY3J5cHRpb24gKi8KKyNkZWZpbmUgRENXX1dFUF9LRVkxMjhCaXRfU0laRQkJMHgwRAkvKiAxMjgtYml0IGVuY3J5cHRpb24gKi8KKyNkZWZpbmUgRENXX0NDTV9LRVkxMjhCaXRfU0laRQkJMHgxMAkvKiAxMjgtYml0IGtleSAqLworLy8jZGVmaW5lIERDV19XRVBfS0VZMTI4Qml0SVZfU0laRSAgICAgIDB4MTAgICAgLyogMTI4LWJpdCBrZXkgYW5kIDEyOC1iaXQgSVYgKi8KKwogc3RydWN0IGlwd193ZXBfa2V5IHsKIAl1OCBjbWRfaWQ7CiAJdTggc2VxX251bTsKQEAgLTgxOCwxNCArOTcwLDYgQEAKIAlzdHJ1Y3QgaXB3X2NoYW5uZWxfdHhfcG93ZXIgY2hhbm5lbHNfdHhfcG93ZXJbTUFYX0FfQ0hBTk5FTFNdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLXN0cnVjdCBpcHdfcW9zX3BhcmFtZXRlcnMgewotCXUxNiBjd19taW5bNF07Ci0JdTE2IGN3X21heFs0XTsKLQl1OCBhaWZzWzRdOwotCXU4IGZsYWdbNF07Ci0JdTE2IHR4X29wX2xpbWl0WzRdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KIHN0cnVjdCBpcHdfcnNuX2NhcGFiaWxpdGllcyB7CiAJdTggaWQ7CiAJdTggbGVuZ3RoOwpAQCAtODg4LDYgKzEwMzIsMTAgQEAKICNkZWZpbmUgU1RBVFVTX1NDQU5fUEVORElORyAgICAgKDE8PDIwKQogI2RlZmluZSBTVEFUVVNfU0NBTk5JTkcgICAgICAgICAoMTw8MjEpCiAjZGVmaW5lIFNUQVRVU19TQ0FOX0FCT1JUSU5HICAgICgxPDwyMikKKyNkZWZpbmUgU1RBVFVTX1NDQU5fRk9SQ0VEICAgICAgKDE8PDIzKQorCisjZGVmaW5lIFNUQVRVU19MRURfTElOS19PTiAgICAgICgxPDwyNCkKKyNkZWZpbmUgU1RBVFVTX0xFRF9BQ1RfT04gICAgICAgKDE8PDI1KQogCiAjZGVmaW5lIFNUQVRVU19JTkRJUkVDVF9CWVRFICAgICgxPDwyOCkJLyogc3lzZnMgZW50cnkgY29uZmlndXJlZCBmb3IgYWNjZXNzICovCiAjZGVmaW5lIFNUQVRVU19JTkRJUkVDVF9EV09SRCAgICgxPDwyOSkJLyogc3lzZnMgZW50cnkgY29uZmlndXJlZCBmb3IgYWNjZXNzICovCkBAIC04OTksMTEgKzEwNDcsMTUgQEAKICNkZWZpbmUgQ0ZHX1NUQVRJQ19FU1NJRCAgICAgICAgKDE8PDEpCS8qIFJlc3RyaWN0IGFzc29jLiB0byBzaW5nbGUgU1NJRCAqLwogI2RlZmluZSBDRkdfU1RBVElDX0JTU0lEICAgICAgICAoMTw8MikJLyogUmVzdHJpY3QgYXNzb2MuIHRvIHNpbmdsZSBCU1NJRCAqLwogI2RlZmluZSBDRkdfQ1VTVE9NX01BQyAgICAgICAgICAoMTw8MykKLSNkZWZpbmUgQ0ZHX1BSRUFNQkxFICAgICAgICAgICAgKDE8PDQpCisjZGVmaW5lIENGR19QUkVBTUJMRV9MT05HICAgICAgICgxPDw0KQogI2RlZmluZSBDRkdfQURIT0NfUEVSU0lTVCAgICAgICAoMTw8NSkKICNkZWZpbmUgQ0ZHX0FTU09DSUFURSAgICAgICAgICAgKDE8PDYpCiAjZGVmaW5lIENGR19GSVhFRF9SQVRFICAgICAgICAgICgxPDw3KQogI2RlZmluZSBDRkdfQURIT0NfQ1JFQVRFICAgICAgICAoMTw8OCkKKyNkZWZpbmUgQ0ZHX05PX0xFRCAgICAgICAgICAgICAgKDE8PDkpCisjZGVmaW5lIENGR19CQUNLR1JPVU5EX1NDQU4gICAgICgxPDwxMCkKKyNkZWZpbmUgQ0ZHX1NQRUVEX1NDQU4gICAgICAgICAgKDE8PDExKQorI2RlZmluZSBDRkdfTkVUX1NUQVRTICAgICAgICAgICAoMTw8MTIpCiAKICNkZWZpbmUgQ0FQX1NIQVJFRF9LRVkgICAgICAgICAgKDE8PDApCS8qIE9mZiA9IE9QRU4gKi8KICNkZWZpbmUgQ0FQX1BSSVZBQ1lfT04gICAgICAgICAgKDE8PDEpCS8qIE9mZiA9IE5vIHByaXZhY3kgKi8KQEAgLTkyNSwxMyArMTA3Nyw1MCBAQAogCXMzMiBzdW07CiB9OwogCisjZGVmaW5lIE1BWF9TUEVFRF9TQ0FOIDEwMAorI2RlZmluZSBJUFdfSUJTU19NQUNfSEFTSF9TSVpFIDMxCisKK3N0cnVjdCBpcHdfaWJzc19zZXEgeworCXU4IG1hY1tFVEhfQUxFTl07CisJdTE2IHNlcV9udW07CisJdTE2IGZyYWdfbnVtOworCXVuc2lnbmVkIGxvbmcgcGFja2V0X3RpbWU7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworfTsKKworc3RydWN0IGlwd19lcnJvcl9lbGVtIHsKKwl1MzIgZGVzYzsKKwl1MzIgdGltZTsKKwl1MzIgYmxpbmsxOworCXUzMiBibGluazI7CisJdTMyIGxpbmsxOworCXUzMiBsaW5rMjsKKwl1MzIgZGF0YTsKK307CisKK3N0cnVjdCBpcHdfZXZlbnQgeworCXUzMiBldmVudDsKKwl1MzIgdGltZTsKKwl1MzIgZGF0YTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgaXB3X2Z3X2Vycm9yIHsKKwl1bnNpZ25lZCBsb25nIGppZmZpZXM7CisJdTMyIHN0YXR1czsKKwl1MzIgY29uZmlnOworCXUzMiBlbGVtX2xlbjsKKwl1MzIgbG9nX2xlbjsKKwlzdHJ1Y3QgaXB3X2Vycm9yX2VsZW0gKmVsZW07CisJc3RydWN0IGlwd19ldmVudCAqbG9nOworCXU4IHBheWxvYWRbMF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwogc3RydWN0IGlwd19wcml2IHsKIAkvKiBpZWVlIGRldmljZSB1c2VkIGJ5IGdlbmVyaWMgaWVlZSBwcm9jZXNzaW5nIGNvZGUgKi8KIAlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3NlY3VyaXR5IHNlYzsKIAotCS8qIHNwaW5sb2NrICovCiAJc3BpbmxvY2tfdCBsb2NrOworCXN0cnVjdCBzZW1hcGhvcmUgc2VtOwogCiAJLyogYmFzaWMgcGNpLW5ldHdvcmsgZHJpdmVyIHN0dWZmICovCiAJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7CkBAIC05NjYsNyArMTE1NSw3IEBACiAJaW50IHJ4X2J1ZnNfbWluOwkgIC8qKjwgbWluaW11bSBudW1iZXIgb2YgYnVmcyBpbiBSeCBxdWV1ZSAqLwogCWludCByeF9wZW5kX21heDsJICAvKio8IG1heGltdW0gcGVuZGluZyBidWZmZXJzIGZvciBvbmUgSVJRICovCiAJdTMyIGhjbWRfc2VxOwkJICAvKio8IHNlcXVlbmNlIG51bWJlciBmb3IgaGNtZCAqLwotCXUzMiBtaXNzZWRfYmVhY29uX3RocmVzaG9sZDsKKwl1MzIgZGlzYXNzb2NpYXRlX3RocmVzaG9sZDsKIAl1MzIgcm9hbWluZ190aHJlc2hvbGQ7CiAKIAlzdHJ1Y3QgaXB3X2Fzc29jaWF0ZSBhc3NvY19yZXF1ZXN0OwpAQCAtMTAwNyw2ICsxMTk2LDggQEAKIAl1OCBtYWNfYWRkcltFVEhfQUxFTl07CiAJdTggbnVtX3N0YXRpb25zOwogCXU4IHN0YXRpb25zW01BWF9TVEFUSU9OU11bRVRIX0FMRU5dOworCXU4IHNob3J0X3JldHJ5X2xpbWl0OworCXU4IGxvbmdfcmV0cnlfbGltaXQ7CiAKIAl1MzIgbm90aWZfbWlzc2VkX2JlYWNvbnM7CiAKQEAgLTEwMjQsMTcgKzEyMTUsMjkgQEAKIAl1MzIgdHhfcGFja2V0czsKIAl1MzIgcXVhbGl0eTsKIAorCXU4IHNwZWVkX3NjYW5bTUFYX1NQRUVEX1NDQU5dOworCXU4IHNwZWVkX3NjYW5fcG9zOworCisJdTE2IGxhc3Rfc2VxX251bTsKKwl1MTYgbGFzdF9mcmFnX251bTsKKwl1bnNpZ25lZCBsb25nIGxhc3RfcGFja2V0X3RpbWU7CisJc3RydWN0IGxpc3RfaGVhZCBpYnNzX21hY19oYXNoW0lQV19JQlNTX01BQ19IQVNIX1NJWkVdOworCiAJLyogZWVwcm9tICovCiAJdTggZWVwcm9tWzB4MTAwXTsJLyogMjU2IGJ5dGVzIG9mIGVlcHJvbSAqLworCXU4IGNvdW50cnlbNF07CiAJaW50IGVlcHJvbV9kZWxheTsKIAogCXN0cnVjdCBpd19zdGF0aXN0aWNzIHdzdGF0czsKIAorCXN0cnVjdCBpd19wdWJsaWNfZGF0YSB3aXJlbGVzc19kYXRhOworCiAJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndvcmtxdWV1ZTsKIAogCXN0cnVjdCB3b3JrX3N0cnVjdCBhZGhvY19jaGVjazsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgYXNzb2NpYXRlOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBkaXNhc3NvY2lhdGU7CisJc3RydWN0IHdvcmtfc3RydWN0IHN5c3RlbV9jb25maWc7CiAJc3RydWN0IHdvcmtfc3RydWN0IHJ4X3JlcGxlbmlzaDsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVxdWVzdF9zY2FuOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBhZGFwdGVyX3Jlc3RhcnQ7CkBAIC0xMDQ1LDI1ICsxMjQ4LDUxIEBACiAJc3RydWN0IHdvcmtfc3RydWN0IGFib3J0X3NjYW47CiAJc3RydWN0IHdvcmtfc3RydWN0IHJvYW07CiAJc3RydWN0IHdvcmtfc3RydWN0IHNjYW5fY2hlY2s7CisJc3RydWN0IHdvcmtfc3RydWN0IGxpbmtfdXA7CisJc3RydWN0IHdvcmtfc3RydWN0IGxpbmtfZG93bjsKIAogCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCBpcnFfdGFza2xldDsKIAorCS8qIExFRCByZWxhdGVkIHZhcmlhYmxlcyBhbmQgd29ya19zdHJ1Y3QgKi8KKwl1OCBuaWNfdHlwZTsKKwl1MzIgbGVkX2FjdGl2aXR5X29uOworCXUzMiBsZWRfYWN0aXZpdHlfb2ZmOworCXUzMiBsZWRfYXNzb2NpYXRpb25fb247CisJdTMyIGxlZF9hc3NvY2lhdGlvbl9vZmY7CisJdTMyIGxlZF9vZmRtX29uOworCXUzMiBsZWRfb2ZkbV9vZmY7CisKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgbGVkX2xpbmtfb247CisJc3RydWN0IHdvcmtfc3RydWN0IGxlZF9saW5rX29mZjsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgbGVkX2FjdF9vZmY7CisJc3RydWN0IHdvcmtfc3RydWN0IG1lcmdlX25ldHdvcmtzOworCisJc3RydWN0IGlwd19jbWRfbG9nICpjbWRsb2c7CisJaW50IGNtZGxvZ19sZW47CisJaW50IGNtZGxvZ19wb3M7CisKICNkZWZpbmUgSVBXXzIyMDBCRyAgMQogI2RlZmluZSBJUFdfMjkxNUFCRyAyCiAJdTggYWRhcHRlcjsKIAotI2RlZmluZSBJUFdfREVGQVVMVF9UWF9QT1dFUiAweDE0Ci0JdTggdHhfcG93ZXI7CisJczggdHhfcG93ZXI7CiAKICNpZmRlZiBDT05GSUdfUE0KIAl1MzIgcG1fc3RhdGVbMTZdOwogI2VuZGlmCiAKKwlzdHJ1Y3QgaXB3X2Z3X2Vycm9yICplcnJvcjsKKwogCS8qIG5ldHdvcmsgc3RhdGUgKi8KIAogCS8qIFVzZWQgdG8gcGFzcyB0aGUgY3VycmVudCBJTlRBIHZhbHVlIGZyb20gSVNSIHRvIFRhc2tsZXQgKi8KIAl1MzIgaXNyX2ludGE7CiAKKwkvKiBRb1MgKi8KKwlzdHJ1Y3QgaXB3X3Fvc19pbmZvIHFvc19kYXRhOworCXN0cnVjdCB3b3JrX3N0cnVjdCBxb3NfYWN0aXZhdGU7CisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwogCS8qIGRlYnVnZ2luZyBpbmZvICovCiAJdTMyIGluZGlyZWN0X2R3b3JkOwogCXUzMiBkaXJlY3RfZHdvcmQ7CkBAIC0xMTI1LDYgKzEzNTQsOCBAQAogI2RlZmluZSBJUFdfRExfUkZfS0lMTCAgICAgICAoMTw8MTcpCiAjZGVmaW5lIElQV19ETF9GV19FUlJPUlMgICAgICgxPDwxOCkKIAorI2RlZmluZSBJUFdfRExfTEVEICAgICAgICAgICAoMTw8MTkpCisKICNkZWZpbmUgSVBXX0RMX09SRCAgICAgICAgICAgKDE8PDIwKQogCiAjZGVmaW5lIElQV19ETF9GUkFHICAgICAgICAgICgxPDwyMSkKQEAgLTExMzcsNiArMTM2OCw4IEBACiAjZGVmaW5lIElQV19ETF9UUkFDRSAgICAgICAgICgxPDwyOCkKIAogI2RlZmluZSBJUFdfRExfU1RBVFMgICAgICAgICAoMTw8MjkpCisjZGVmaW5lIElQV19ETF9NRVJHRSAgICAgICAgICgxPDwzMCkKKyNkZWZpbmUgSVBXX0RMX1FPUyAgICAgICAgICAgKDE8PDMxKQogCiAjZGVmaW5lIElQV19FUlJPUihmLCBhLi4uKSBwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogIiBmLCAjIyBhKQogI2RlZmluZSBJUFdfV0FSTklORyhmLCBhLi4uKSBwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FICI6ICIgZiwgIyMgYSkKQEAgLTExNTAsNiArMTM4Myw3IEBACiAjZGVmaW5lIElQV19ERUJVR19UWChmLCBhLi4uKSAgICAgSVBXX0RFQlVHKElQV19ETF9UWCwgZiwgIyMgYSkKICNkZWZpbmUgSVBXX0RFQlVHX0lTUihmLCBhLi4uKSAgICBJUFdfREVCVUcoSVBXX0RMX0lTUiwgZiwgIyMgYSkKICNkZWZpbmUgSVBXX0RFQlVHX01BTkFHRU1FTlQoZiwgYS4uLikgSVBXX0RFQlVHKElQV19ETF9NQU5BR0UsIGYsICMjIGEpCisjZGVmaW5lIElQV19ERUJVR19MRUQoZiwgYS4uLikgSVBXX0RFQlVHKElQV19ETF9MRUQsIGYsICMjIGEpCiAjZGVmaW5lIElQV19ERUJVR19XRVAoZiwgYS4uLikgICAgSVBXX0RFQlVHKElQV19ETF9XRVAsIGYsICMjIGEpCiAjZGVmaW5lIElQV19ERUJVR19IQyhmLCBhLi4uKSBJUFdfREVCVUcoSVBXX0RMX0hPU1RfQ09NTUFORCwgZiwgIyMgYSkKICNkZWZpbmUgSVBXX0RFQlVHX0ZSQUcoZiwgYS4uLikgSVBXX0RFQlVHKElQV19ETF9GUkFHLCBmLCAjIyBhKQpAQCAtMTE2Myw2ICsxMzk3LDggQEAKICNkZWZpbmUgSVBXX0RFQlVHX1NUQVRFKGYsIGEuLi4pIElQV19ERUJVRyhJUFdfRExfU1RBVEUgfCBJUFdfRExfQVNTT0MgfCBJUFdfRExfSU5GTywgZiwgIyMgYSkKICNkZWZpbmUgSVBXX0RFQlVHX0FTU09DKGYsIGEuLi4pIElQV19ERUJVRyhJUFdfRExfQVNTT0MgfCBJUFdfRExfSU5GTywgZiwgIyMgYSkKICNkZWZpbmUgSVBXX0RFQlVHX1NUQVRTKGYsIGEuLi4pIElQV19ERUJVRyhJUFdfRExfU1RBVFMsIGYsICMjIGEpCisjZGVmaW5lIElQV19ERUJVR19NRVJHRShmLCBhLi4uKSBJUFdfREVCVUcoSVBXX0RMX01FUkdFLCBmLCAjIyBhKQorI2RlZmluZSBJUFdfREVCVUdfUU9TKGYsIGEuLi4pICAgSVBXX0RFQlVHKElQV19ETF9RT1MsIGYsICMjIGEpCiAKICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogCkBAIC0xMTc3LDU5ICsxNDEzLDY1IEBACiAjZGVmaW5lIERJTk9fUlhGSUZPX0RBVEEgICAweDAxCiAjZGVmaW5lIERJTk9fQ09OVFJPTF9SRUcgICAweDAwMjAwMDAwCiAKLSNkZWZpbmUgQ1gyX0lOVEFfUlcgICAgICAgMHgwMDAwMDAwOAotI2RlZmluZSBDWDJfSU5UQV9NQVNLX1IgICAweDAwMDAwMDBDCi0jZGVmaW5lIENYMl9JTkRJUkVDVF9BRERSIDB4MDAwMDAwMTAKLSNkZWZpbmUgQ1gyX0lORElSRUNUX0RBVEEgMHgwMDAwMDAxNAotI2RlZmluZSBDWDJfQVVUT0lOQ19BRERSICAweDAwMDAwMDE4Ci0jZGVmaW5lIENYMl9BVVRPSU5DX0RBVEEgIDB4MDAwMDAwMUMKLSNkZWZpbmUgQ1gyX1JFU0VUX1JFRyAgICAgMHgwMDAwMDAyMAotI2RlZmluZSBDWDJfR1BfQ05UUkxfUlcgICAweDAwMDAwMDI0CisjZGVmaW5lIElQV19JTlRBX1JXICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgSVBXX0lOVEFfTUFTS19SICAgMHgwMDAwMDAwQworI2RlZmluZSBJUFdfSU5ESVJFQ1RfQUREUiAweDAwMDAwMDEwCisjZGVmaW5lIElQV19JTkRJUkVDVF9EQVRBIDB4MDAwMDAwMTQKKyNkZWZpbmUgSVBXX0FVVE9JTkNfQUREUiAgMHgwMDAwMDAxOAorI2RlZmluZSBJUFdfQVVUT0lOQ19EQVRBICAweDAwMDAwMDFDCisjZGVmaW5lIElQV19SRVNFVF9SRUcgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgSVBXX0dQX0NOVFJMX1JXICAgMHgwMDAwMDAyNAogCi0jZGVmaW5lIENYMl9SRUFEX0lOVF9SRUdJU1RFUiAweEZGNAorI2RlZmluZSBJUFdfUkVBRF9JTlRfUkVHSVNURVIgMHhGRjQKIAotI2RlZmluZSBDWDJfR1BfQ05UUkxfQklUX0lOSVRfRE9ORQkweDAwMDAwMDA0CisjZGVmaW5lIElQV19HUF9DTlRSTF9CSVRfSU5JVF9ET05FCTB4MDAwMDAwMDQKIAotI2RlZmluZSBDWDJfUkVHSVNURVJfRE9NQUlOMV9FTkQgICAgICAgIDB4MDAwMDEwMDAKLSNkZWZpbmUgQ1gyX1NSQU1fUkVBRF9JTlRfUkVHSVNURVIgCTB4MDAwMDBmZjQKKyNkZWZpbmUgSVBXX1JFR0lTVEVSX0RPTUFJTjFfRU5EICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIElQV19TUkFNX1JFQURfSU5UX1JFR0lTVEVSIAkweDAwMDAwZmY0CiAKLSNkZWZpbmUgQ1gyX1NIQVJFRF9MT1dFUl9CT1VORCAgICAgICAgICAweDAwMDAwMjAwCi0jZGVmaW5lIENYMl9JTlRFUlJVUFRfQVJFQV9MT1dFUl9CT1VORCAgMHgwMDAwMGY4MAorI2RlZmluZSBJUFdfU0hBUkVEX0xPV0VSX0JPVU5EICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgSVBXX0lOVEVSUlVQVF9BUkVBX0xPV0VSX0JPVU5EICAweDAwMDAwZjgwCiAKLSNkZWZpbmUgQ1gyX05JQ19TUkFNX0xPV0VSX0JPVU5EICAgICAgICAweDAwMDAwMDAwCi0jZGVmaW5lIENYMl9OSUNfU1JBTV9VUFBFUl9CT1VORCAgICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBJUFdfTklDX1NSQU1fTE9XRVJfQk9VTkQgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgSVBXX05JQ19TUkFNX1VQUEVSX0JPVU5EICAgICAgICAweDAwMDMwMDAwCiAKLSNkZWZpbmUgQ1gyX0JJVF9JTlRfSE9TVF9TUkFNX1JFQURfSU5UX1JFR0lTVEVSICgxIDw8IDI5KQotI2RlZmluZSBDWDJfR1BfQ05UUkxfQklUX0NMT0NLX1JFQURZICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgQ1gyX0dQX0NOVFJMX0JJVF9IT1NUX0FMTE9XU19TVEFOREJZIDB4MDAwMDAwMDIKKyNkZWZpbmUgSVBXX0JJVF9JTlRfSE9TVF9TUkFNX1JFQURfSU5UX1JFR0lTVEVSICgxIDw8IDI5KQorI2RlZmluZSBJUFdfR1BfQ05UUkxfQklUX0NMT0NLX1JFQURZICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSVBXX0dQX0NOVFJMX0JJVF9IT1NUX0FMTE9XU19TVEFOREJZIDB4MDAwMDAwMDIKIAogLyoKICAqIFJFU0VUIFJlZ2lzdGVyIEJpdCBJbmRleGVzCiAgKi8KLSNkZWZpbmUgQ0JEX1JFU0VUX1JFR19QUklOQ0VUT05fUkVTRVQgMHgwMDAwMDAwMQkvKiBCaXQgMCAoTFNCKSAqLwotI2RlZmluZSBDWDJfUkVTRVRfUkVHX1NXX1JFU0VUICAgICAgICAweDAwMDAwMDgwCS8qIEJpdCA3ICAgICAgICovCi0jZGVmaW5lIENYMl9SRVNFVF9SRUdfTUFTVEVSX0RJU0FCTEVEIDB4MDAwMDAxMDAJLyogQml0IDggICAgICAgKi8KLSNkZWZpbmUgQ1gyX1JFU0VUX1JFR19TVE9QX01BU1RFUiAgICAgMHgwMDAwMDIwMAkvKiBCaXQgOSAgICAgICAqLwotI2RlZmluZSBDWDJfQVJDX0tFU0hFVF9DT05GSUcgICAgICAgICAweDA4MDAwMDAwCS8qIEJpdCAyNyAgICAgICovCi0jZGVmaW5lIENYMl9TVEFSVF9TVEFOREJZICAgICAgICAgICAgIDB4MDAwMDAwMDQJLyogQml0IDIgICAgICAgKi8KKyNkZWZpbmUgQ0JEX1JFU0VUX1JFR19QUklOQ0VUT05fUkVTRVQgKDE8PDApCisjZGVmaW5lIElQV19TVEFSVF9TVEFOREJZICAgICAgICAgICAgICgxPDwyKQorI2RlZmluZSBJUFdfQUNUSVZJVFlfTEVEICAgICAgICAgICAgICAoMTw8NCkKKyNkZWZpbmUgSVBXX0FTU09DSUFURURfTEVEICAgICAgICAgICAgKDE8PDUpCisjZGVmaW5lIElQV19PRkRNX0xFRCAgICAgICAgICAgICAgICAgICgxPDw2KQorI2RlZmluZSBJUFdfUkVTRVRfUkVHX1NXX1JFU0VUICAgICAgICAoMTw8NykKKyNkZWZpbmUgSVBXX1JFU0VUX1JFR19NQVNURVJfRElTQUJMRUQgKDE8PDgpCisjZGVmaW5lIElQV19SRVNFVF9SRUdfU1RPUF9NQVNURVIgICAgICgxPDw5KQorI2RlZmluZSBJUFdfR0FURV9PRE1BICAgICAgICAgICAgICAgICAoMTw8MjUpCisjZGVmaW5lIElQV19HQVRFX0lETUEgICAgICAgICAgICAgICAgICgxPDwyNikKKyNkZWZpbmUgSVBXX0FSQ19LRVNIRVRfQ09ORklHICAgICAgICAgKDE8PDI3KQorI2RlZmluZSBJUFdfR0FURV9BRE1BICAgICAgICAgICAgICAgICAoMTw8MjkpCiAKLSNkZWZpbmUgQ1gyX0NTUl9DSVNfVVBQRVJfQk9VTkQJMHgwMDAwMDIwMAotI2RlZmluZSBDWDJfRE9NQUlOXzBfRU5EIDB4MTAwMAorI2RlZmluZSBJUFdfQ1NSX0NJU19VUFBFUl9CT1VORAkweDAwMDAwMjAwCisjZGVmaW5lIElQV19ET01BSU5fMF9FTkQgMHgxMDAwCiAjZGVmaW5lIENMWF9NRU1fQkFSX1NJWkUgMHgxMDAwCiAKLSNkZWZpbmUgQ1gyX0JBU0VCQU5EX0NPTlRST0xfU1RBVFVTCTBYMDAyMDAwMDAKLSNkZWZpbmUgQ1gyX0JBU0VCQU5EX1RYX0ZJRk9fV1JJVEUJMFgwMDIwMDAwNAotI2RlZmluZSBDWDJfQkFTRUJBTkRfUlhfRklGT19SRUFECTBYMDAyMDAwMDQKLSNkZWZpbmUgQ1gyX0JBU0VCQU5EX0NPTlRST0xfU1RPUkUJMFgwMDIwMDAxMAorI2RlZmluZSBJUFdfQkFTRUJBTkRfQ09OVFJPTF9TVEFUVVMJMFgwMDIwMDAwMAorI2RlZmluZSBJUFdfQkFTRUJBTkRfVFhfRklGT19XUklURQkwWDAwMjAwMDA0CisjZGVmaW5lIElQV19CQVNFQkFORF9SWF9GSUZPX1JFQUQJMFgwMDIwMDAwNAorI2RlZmluZSBJUFdfQkFTRUJBTkRfQ09OVFJPTF9TVE9SRQkwWDAwMjAwMDEwCiAKLSNkZWZpbmUgQ1gyX0lOVEVSTkFMX0NNRF9FVkVOVCAJMFgwMDMwMDAwNAotI2RlZmluZSBDWDJfQkFTRUJBTkRfUE9XRVJfRE9XTiAweDAwMDAwMDAxCisjZGVmaW5lIElQV19JTlRFUk5BTF9DTURfRVZFTlQgCTBYMDAzMDAwMDQKKyNkZWZpbmUgSVBXX0JBU0VCQU5EX1BPV0VSX0RPV04gMHgwMDAwMDAwMQogCi0jZGVmaW5lIENYMl9NRU1fSEFMVF9BTkRfUkVTRVQgIDB4MDAzMDAwZTAKKyNkZWZpbmUgSVBXX01FTV9IQUxUX0FORF9SRVNFVCAgMHgwMDMwMDBlMAogCiAvKiBkZWZncm91cCBiaXRzX2hhbHRfcmVzZXQgTUVNX0hBTFRfQU5EX1JFU0VUIHJlZ2lzdGVyIGJpdHMgKi8KLSNkZWZpbmUgQ1gyX0JJVF9IQUxUX1JFU0VUX09OCTB4ODAwMDAwMDAKLSNkZWZpbmUgQ1gyX0JJVF9IQUxUX1JFU0VUX09GRiAJMHgwMDAwMDAwMAorI2RlZmluZSBJUFdfQklUX0hBTFRfUkVTRVRfT04JMHg4MDAwMDAwMAorI2RlZmluZSBJUFdfQklUX0hBTFRfUkVTRVRfT0ZGIAkweDAwMDAwMDAwCiAKICNkZWZpbmUgQ0JfTEFTVF9WQUxJRCAgICAgMHgyMDAwMDAwMAogI2RlZmluZSBDQl9JTlRfRU5BQkxFRCAgICAweDQwMDAwMDAwCkBAIC0xMjQ4LDYzICsxNDkwLDYzIEBACiAjZGVmaW5lIERNQV9DQl9TVE9QX0FORF9BQk9SVCAgICAgICAgICAgIDB4MDAwMDBDMDAKICNkZWZpbmUgRE1BX0NCX1NUQVJUICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAogCi0jZGVmaW5lIENYMl9TSEFSRURfU1JBTV9TSVpFICAgICAgICAgICAgICAgMHgwMDAzMDAwMAotI2RlZmluZSBDWDJfU0hBUkVEX1NSQU1fRE1BX0NPTlRST0wgICAgICAgIDB4MDAwMjcwMDAKKyNkZWZpbmUgSVBXX1NIQVJFRF9TUkFNX1NJWkUgICAgICAgICAgICAgICAweDAwMDMwMDAwCisjZGVmaW5lIElQV19TSEFSRURfU1JBTV9ETUFfQ09OVFJPTCAgICAgICAgMHgwMDAyNzAwMAogI2RlZmluZSBDQl9NQVhfTEVOR1RIICAgICAgICAgICAgICAgICAgICAgIDB4MUZGRgogCi0jZGVmaW5lIENYMl9IT1NUX0VFUFJPTV9EQVRBX1NSQU1fU0laRSAweEExOAotI2RlZmluZSBDWDJfRUVQUk9NX0lNQUdFX1NJWkUgICAgICAgICAgMHgxMDAKKyNkZWZpbmUgSVBXX0hPU1RfRUVQUk9NX0RBVEFfU1JBTV9TSVpFIDB4QTE4CisjZGVmaW5lIElQV19FRVBST01fSU1BR0VfU0laRSAgICAgICAgICAweDEwMAogCiAvKiBETUEgZGVmcyAqLwotI2RlZmluZSBDWDJfRE1BX0lfQ1VSUkVOVF9DQiAgMHgwMDMwMDBEMAotI2RlZmluZSBDWDJfRE1BX09fQ1VSUkVOVF9DQiAgMHgwMDMwMDBENAotI2RlZmluZSBDWDJfRE1BX0lfRE1BX0NPTlRST0wgMHgwMDMwMDBBNAotI2RlZmluZSBDWDJfRE1BX0lfQ0JfQkFTRSAgICAgMHgwMDMwMDBBMAorI2RlZmluZSBJUFdfRE1BX0lfQ1VSUkVOVF9DQiAgMHgwMDMwMDBEMAorI2RlZmluZSBJUFdfRE1BX09fQ1VSUkVOVF9DQiAgMHgwMDMwMDBENAorI2RlZmluZSBJUFdfRE1BX0lfRE1BX0NPTlRST0wgMHgwMDMwMDBBNAorI2RlZmluZSBJUFdfRE1BX0lfQ0JfQkFTRSAgICAgMHgwMDMwMDBBMAogCi0jZGVmaW5lIENYMl9UWF9DTURfUVVFVUVfQkRfQkFTRSAgICAgICAgKDB4MDAwMDAyMDApCi0jZGVmaW5lIENYMl9UWF9DTURfUVVFVUVfQkRfU0laRSAgICAgICAgKDB4MDAwMDAyMDQpCi0jZGVmaW5lIENYMl9UWF9RVUVVRV8wX0JEX0JBU0UgICAgICAgICAgKDB4MDAwMDAyMDgpCi0jZGVmaW5lIENYMl9UWF9RVUVVRV8wX0JEX1NJWkUgICAgICAgICAgKDB4MDAwMDAyMEMpCi0jZGVmaW5lIENYMl9UWF9RVUVVRV8xX0JEX0JBU0UgICAgICAgICAgKDB4MDAwMDAyMTApCi0jZGVmaW5lIENYMl9UWF9RVUVVRV8xX0JEX1NJWkUgICAgICAgICAgKDB4MDAwMDAyMTQpCi0jZGVmaW5lIENYMl9UWF9RVUVVRV8yX0JEX0JBU0UgICAgICAgICAgKDB4MDAwMDAyMTgpCi0jZGVmaW5lIENYMl9UWF9RVUVVRV8yX0JEX1NJWkUgICAgICAgICAgKDB4MDAwMDAyMUMpCi0jZGVmaW5lIENYMl9UWF9RVUVVRV8zX0JEX0JBU0UgICAgICAgICAgKDB4MDAwMDAyMjApCi0jZGVmaW5lIENYMl9UWF9RVUVVRV8zX0JEX1NJWkUgICAgICAgICAgKDB4MDAwMDAyMjQpCi0jZGVmaW5lIENYMl9SWF9CRF9CQVNFICAgICAgICAgICAgICAgICAgKDB4MDAwMDAyNDApCi0jZGVmaW5lIENYMl9SWF9CRF9TSVpFICAgICAgICAgICAgICAgICAgKDB4MDAwMDAyNDQpCi0jZGVmaW5lIENYMl9SRkRTX1RBQkxFX0xPV0VSICAgICAgICAgICAgKDB4MDAwMDA1MDApCisjZGVmaW5lIElQV19UWF9DTURfUVVFVUVfQkRfQkFTRSAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBJUFdfVFhfQ01EX1FVRVVFX0JEX1NJWkUgICAgICAgIDB4MDAwMDAyMDQKKyNkZWZpbmUgSVBXX1RYX1FVRVVFXzBfQkRfQkFTRSAgICAgICAgICAweDAwMDAwMjA4CisjZGVmaW5lIElQV19UWF9RVUVVRV8wX0JEX1NJWkUgICAgICAgICAgKDB4MDAwMDAyMEMpCisjZGVmaW5lIElQV19UWF9RVUVVRV8xX0JEX0JBU0UgICAgICAgICAgMHgwMDAwMDIxMAorI2RlZmluZSBJUFdfVFhfUVVFVUVfMV9CRF9TSVpFICAgICAgICAgIDB4MDAwMDAyMTQKKyNkZWZpbmUgSVBXX1RYX1FVRVVFXzJfQkRfQkFTRSAgICAgICAgICAweDAwMDAwMjE4CisjZGVmaW5lIElQV19UWF9RVUVVRV8yX0JEX1NJWkUgICAgICAgICAgKDB4MDAwMDAyMUMpCisjZGVmaW5lIElQV19UWF9RVUVVRV8zX0JEX0JBU0UgICAgICAgICAgMHgwMDAwMDIyMAorI2RlZmluZSBJUFdfVFhfUVVFVUVfM19CRF9TSVpFICAgICAgICAgIDB4MDAwMDAyMjQKKyNkZWZpbmUgSVBXX1JYX0JEX0JBU0UgICAgICAgICAgICAgICAgICAweDAwMDAwMjQwCisjZGVmaW5lIElQV19SWF9CRF9TSVpFICAgICAgICAgICAgICAgICAgMHgwMDAwMDI0NAorI2RlZmluZSBJUFdfUkZEU19UQUJMRV9MT1dFUiAgICAgICAgICAgIDB4MDAwMDA1MDAKIAotI2RlZmluZSBDWDJfVFhfQ01EX1FVRVVFX1JFQURfSU5ERVggICAgICgweDAwMDAwMjgwKQotI2RlZmluZSBDWDJfVFhfUVVFVUVfMF9SRUFEX0lOREVYICAgICAgICgweDAwMDAwMjg0KQotI2RlZmluZSBDWDJfVFhfUVVFVUVfMV9SRUFEX0lOREVYICAgICAgICgweDAwMDAwMjg4KQotI2RlZmluZSBDWDJfVFhfUVVFVUVfMl9SRUFEX0lOREVYICAgICAgICgweDAwMDAwMjhDKQotI2RlZmluZSBDWDJfVFhfUVVFVUVfM19SRUFEX0lOREVYICAgICAgICgweDAwMDAwMjkwKQotI2RlZmluZSBDWDJfUlhfUkVBRF9JTkRFWCAgICAgICAgICAgICAgICgweDAwMDAwMkEwKQorI2RlZmluZSBJUFdfVFhfQ01EX1FVRVVFX1JFQURfSU5ERVggICAgIDB4MDAwMDAyODAKKyNkZWZpbmUgSVBXX1RYX1FVRVVFXzBfUkVBRF9JTkRFWCAgICAgICAweDAwMDAwMjg0CisjZGVmaW5lIElQV19UWF9RVUVVRV8xX1JFQURfSU5ERVggICAgICAgMHgwMDAwMDI4OAorI2RlZmluZSBJUFdfVFhfUVVFVUVfMl9SRUFEX0lOREVYICAgICAgICgweDAwMDAwMjhDKQorI2RlZmluZSBJUFdfVFhfUVVFVUVfM19SRUFEX0lOREVYICAgICAgIDB4MDAwMDAyOTAKKyNkZWZpbmUgSVBXX1JYX1JFQURfSU5ERVggICAgICAgICAgICAgICAoMHgwMDAwMDJBMCkKIAotI2RlZmluZSBDWDJfVFhfQ01EX1FVRVVFX1dSSVRFX0lOREVYICAgICgweDAwMDAwRjgwKQotI2RlZmluZSBDWDJfVFhfUVVFVUVfMF9XUklURV9JTkRFWCAgICAgICgweDAwMDAwRjg0KQotI2RlZmluZSBDWDJfVFhfUVVFVUVfMV9XUklURV9JTkRFWCAgICAgICgweDAwMDAwRjg4KQotI2RlZmluZSBDWDJfVFhfUVVFVUVfMl9XUklURV9JTkRFWCAgICAgICgweDAwMDAwRjhDKQotI2RlZmluZSBDWDJfVFhfUVVFVUVfM19XUklURV9JTkRFWCAgICAgICgweDAwMDAwRjkwKQotI2RlZmluZSBDWDJfUlhfV1JJVEVfSU5ERVggICAgICAgICAgICAgICgweDAwMDAwRkEwKQorI2RlZmluZSBJUFdfVFhfQ01EX1FVRVVFX1dSSVRFX0lOREVYICAgICgweDAwMDAwRjgwKQorI2RlZmluZSBJUFdfVFhfUVVFVUVfMF9XUklURV9JTkRFWCAgICAgICgweDAwMDAwRjg0KQorI2RlZmluZSBJUFdfVFhfUVVFVUVfMV9XUklURV9JTkRFWCAgICAgICgweDAwMDAwRjg4KQorI2RlZmluZSBJUFdfVFhfUVVFVUVfMl9XUklURV9JTkRFWCAgICAgICgweDAwMDAwRjhDKQorI2RlZmluZSBJUFdfVFhfUVVFVUVfM19XUklURV9JTkRFWCAgICAgICgweDAwMDAwRjkwKQorI2RlZmluZSBJUFdfUlhfV1JJVEVfSU5ERVggICAgICAgICAgICAgICgweDAwMDAwRkEwKQogCiAvKgogICogRUVQUk9NIFJlbGF0ZWQgRGVmaW5pdGlvbnMKICAqLwogCi0jZGVmaW5lIElQV19FRVBST01fREFUQV9TUkFNX0FERFJFU1MgKENYMl9TSEFSRURfTE9XRVJfQk9VTkQgKyAweDgxNCkKLSNkZWZpbmUgSVBXX0VFUFJPTV9EQVRBX1NSQU1fU0laRSAgICAoQ1gyX1NIQVJFRF9MT1dFUl9CT1VORCArIDB4ODE4KQotI2RlZmluZSBJUFdfRUVQUk9NX0xPQURfRElTQUJMRSAgICAgIChDWDJfU0hBUkVEX0xPV0VSX0JPVU5EICsgMHg4MUMpCi0jZGVmaW5lIElQV19FRVBST01fREFUQSAgICAgICAgICAgICAgKENYMl9TSEFSRURfTE9XRVJfQk9VTkQgKyAweDgyMCkKLSNkZWZpbmUgSVBXX0VFUFJPTV9VUFBFUl9BRERSRVNTICAgICAoQ1gyX1NIQVJFRF9MT1dFUl9CT1VORCArIDB4OUUwKQorI2RlZmluZSBJUFdfRUVQUk9NX0RBVEFfU1JBTV9BRERSRVNTIChJUFdfU0hBUkVEX0xPV0VSX0JPVU5EICsgMHg4MTQpCisjZGVmaW5lIElQV19FRVBST01fREFUQV9TUkFNX1NJWkUgICAgKElQV19TSEFSRURfTE9XRVJfQk9VTkQgKyAweDgxOCkKKyNkZWZpbmUgSVBXX0VFUFJPTV9MT0FEX0RJU0FCTEUgICAgICAoSVBXX1NIQVJFRF9MT1dFUl9CT1VORCArIDB4ODFDKQorI2RlZmluZSBJUFdfRUVQUk9NX0RBVEEgICAgICAgICAgICAgIChJUFdfU0hBUkVEX0xPV0VSX0JPVU5EICsgMHg4MjApCisjZGVmaW5lIElQV19FRVBST01fVVBQRVJfQUREUkVTUyAgICAgKElQV19TSEFSRURfTE9XRVJfQk9VTkQgKyAweDlFMCkKIAotI2RlZmluZSBJUFdfU1RBVElPTl9UQUJMRV9MT1dFUiAgICAgIChDWDJfU0hBUkVEX0xPV0VSX0JPVU5EICsgMHhBMEMpCi0jZGVmaW5lIElQV19TVEFUSU9OX1RBQkxFX1VQUEVSICAgICAgKENYMl9TSEFSRURfTE9XRVJfQk9VTkQgKyAweEIwQykKLSNkZWZpbmUgSVBXX1JFUVVFU1RfQVRJTSAgICAgICAgICAgICAoQ1gyX1NIQVJFRF9MT1dFUl9CT1VORCArIDB4QjBDKQotI2RlZmluZSBJUFdfQVRJTV9TRU5UICAgICAgICAgICAgICAgIChDWDJfU0hBUkVEX0xPV0VSX0JPVU5EICsgMHhCMTApCi0jZGVmaW5lIElQV19XSE9fSVNfQVdBS0UgICAgICAgICAgICAgKENYMl9TSEFSRURfTE9XRVJfQk9VTkQgKyAweEIxNCkKLSNkZWZpbmUgSVBXX0RVUklOR19BVElNX1dJTkRPVyAgICAgICAoQ1gyX1NIQVJFRF9MT1dFUl9CT1VORCArIDB4QjE4KQorI2RlZmluZSBJUFdfU1RBVElPTl9UQUJMRV9MT1dFUiAgICAgIChJUFdfU0hBUkVEX0xPV0VSX0JPVU5EICsgMHhBMEMpCisjZGVmaW5lIElQV19TVEFUSU9OX1RBQkxFX1VQUEVSICAgICAgKElQV19TSEFSRURfTE9XRVJfQk9VTkQgKyAweEIwQykKKyNkZWZpbmUgSVBXX1JFUVVFU1RfQVRJTSAgICAgICAgICAgICAoSVBXX1NIQVJFRF9MT1dFUl9CT1VORCArIDB4QjBDKQorI2RlZmluZSBJUFdfQVRJTV9TRU5UICAgICAgICAgICAgICAgIChJUFdfU0hBUkVEX0xPV0VSX0JPVU5EICsgMHhCMTApCisjZGVmaW5lIElQV19XSE9fSVNfQVdBS0UgICAgICAgICAgICAgKElQV19TSEFSRURfTE9XRVJfQk9VTkQgKyAweEIxNCkKKyNkZWZpbmUgSVBXX0RVUklOR19BVElNX1dJTkRPVyAgICAgICAoSVBXX1NIQVJFRF9MT1dFUl9CT1VORCArIDB4QjE4KQogCiAjZGVmaW5lIE1TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQogI2RlZmluZSBMU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKQEAgLTEzMjYsMTUgKzE1NjgsMTUgQEAKICNkZWZpbmUgRUVQUk9NX0hXX1ZFUlNJT04gICAgICAgKEdFVF9FRVBST01fQUREUigweDcyLExTQikpCS8qIDIgYnl0ZXMgICovCiAKIC8qIE5JQyB0eXBlIGFzIGZvdW5kIGluIHRoZSBvbmUgYnl0ZSBFRVBST01fTklDX1RZUEUgIG9mZnNldCovCi0jZGVmaW5lIEVFUFJPTV9OSUNfVFlQRV9TVEFOREFSRCAgICAgICAgMAotI2RlZmluZSBFRVBST01fTklDX1RZUEVfREVMTCAgICAgICAgICAgIDEKLSNkZWZpbmUgRUVQUk9NX05JQ19UWVBFX0ZVSklUU1UgICAgICAgICAyCi0jZGVmaW5lIEVFUFJPTV9OSUNfVFlQRV9JQk0gICAgICAgICAgICAgMwotI2RlZmluZSBFRVBST01fTklDX1RZUEVfSFAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRUVQUk9NX05JQ19UWVBFXzAgMAorI2RlZmluZSBFRVBST01fTklDX1RZUEVfMSAxCisjZGVmaW5lIEVFUFJPTV9OSUNfVFlQRV8yIDIKKyNkZWZpbmUgRUVQUk9NX05JQ19UWVBFXzMgMworI2RlZmluZSBFRVBST01fTklDX1RZUEVfNCA0CiAKICNkZWZpbmUgRldfTUVNX1JFR19MT1dFUl9CT1VORCAgICAgICAgICAweDAwMzAwMDAwCiAjZGVmaW5lIEZXX01FTV9SRUdfRUVQUk9NX0FDQ0VTUyAgICAgICAgKEZXX01FTV9SRUdfTE9XRVJfQk9VTkQgKyAweDQwKQotCisjZGVmaW5lIElQV19FVkVOVF9SRUcgICAgICAgICAgICAgICAgICAgKEZXX01FTV9SRUdfTE9XRVJfQk9VTkQgKyAweDA0KQogI2RlZmluZSBFRVBST01fQklUX1NLICAgICAgICAgICAgICAgICAgICgxPDwwKQogI2RlZmluZSBFRVBST01fQklUX0NTICAgICAgICAgICAgICAgICAgICgxPDwxKQogI2RlZmluZSBFRVBST01fQklUX0RJICAgICAgICAgICAgICAgICAgICgxPDwyKQpAQCAtMTM0Myw1MCArMTU4NSw0NyBAQAogI2RlZmluZSBFRVBST01fQ01EX1JFQUQgICAgICAgICAgICAgICAgIDB4MgogCiAvKiBJbnRlcnJ1cHRzIG1hc2tzICovCi0jZGVmaW5lIENYMl9JTlRBX05PTkUgICAweDAwMDAwMDAwCisjZGVmaW5lIElQV19JTlRBX05PTkUgICAweDAwMDAwMDAwCiAKLSNkZWZpbmUgQ1gyX0lOVEFfQklUX1JYX1RSQU5TRkVSICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgQ1gyX0lOVEFfQklUX1NUQVRVU19DSEFOR0UgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKLSNkZWZpbmUgQ1gyX0lOVEFfQklUX0JFQUNPTl9QRVJJT0RfRVhQSVJFRCAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgSVBXX0lOVEFfQklUX1JYX1RSQU5TRkVSICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgSVBXX0lOVEFfQklUX1NUQVRVU19DSEFOR0UgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgSVBXX0lOVEFfQklUX0JFQUNPTl9QRVJJT0RfRVhQSVJFRCAgICAgICAgIDB4MDAwMDAwMjAKIAogLy9JbnRhIEJpdHMgZm9yIENGCi0jZGVmaW5lIENYMl9JTlRBX0JJVF9UWF9DTURfUVVFVUUgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCi0jZGVmaW5lIENYMl9JTlRBX0JJVF9UWF9RVUVVRV8xICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCi0jZGVmaW5lIENYMl9JTlRBX0JJVF9UWF9RVUVVRV8yICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCi0jZGVmaW5lIENYMl9JTlRBX0JJVF9UWF9RVUVVRV8zICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCi0jZGVmaW5lIENYMl9JTlRBX0JJVF9UWF9RVUVVRV80ICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIElQV19JTlRBX0JJVF9UWF9DTURfUVVFVUUgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIElQV19JTlRBX0JJVF9UWF9RVUVVRV8xICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIElQV19JTlRBX0JJVF9UWF9RVUVVRV8yICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIElQV19JTlRBX0JJVF9UWF9RVUVVRV8zICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIElQV19JTlRBX0JJVF9UWF9RVUVVRV80ICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCiAKLSNkZWZpbmUgQ1gyX0lOVEFfQklUX1NMQVZFX01PREVfSE9TVF9DTURfRE9ORSAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgSVBXX0lOVEFfQklUX1NMQVZFX01PREVfSE9TVF9DTURfRE9ORSAgICAgIDB4MDAwMTAwMDAKIAotI2RlZmluZSBDWDJfSU5UQV9CSVRfUFJFUEFSRV9GT1JfUE9XRVJfRE9XTiAgICAgICAgMHgwMDEwMDAwMAotI2RlZmluZSBDWDJfSU5UQV9CSVRfUE9XRVJfRE9XTiAgICAgICAgICAgICAgICAgICAgMHgwMDIwMDAwMAorI2RlZmluZSBJUFdfSU5UQV9CSVRfUFJFUEFSRV9GT1JfUE9XRVJfRE9XTiAgICAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBJUFdfSU5UQV9CSVRfUE9XRVJfRE9XTiAgICAgICAgICAgICAgICAgICAgMHgwMDIwMDAwMAogCi0jZGVmaW5lIENYMl9JTlRBX0JJVF9GV19JTklUSUFMSVpBVElPTl9ET05FICAgICAgICAweDAxMDAwMDAwCi0jZGVmaW5lIENYMl9JTlRBX0JJVF9GV19DQVJEX0RJU0FCTEVfUEhZX09GRl9ET05FICAweDAyMDAwMDAwCi0jZGVmaW5lIENYMl9JTlRBX0JJVF9SRl9LSUxMX0RPTkUgICAgICAgICAgICAgICAgICAweDA0MDAwMDAwCi0jZGVmaW5lIENYMl9JTlRBX0JJVF9GQVRBTF9FUlJPUiAgICAgICAgICAgICAweDQwMDAwMDAwCi0jZGVmaW5lIENYMl9JTlRBX0JJVF9QQVJJVFlfRVJST1IgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIElQV19JTlRBX0JJVF9GV19JTklUSUFMSVpBVElPTl9ET05FICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIElQV19JTlRBX0JJVF9GV19DQVJEX0RJU0FCTEVfUEhZX09GRl9ET05FICAweDAyMDAwMDAwCisjZGVmaW5lIElQV19JTlRBX0JJVF9SRl9LSUxMX0RPTkUgICAgICAgICAgICAgICAgICAweDA0MDAwMDAwCisjZGVmaW5lIElQV19JTlRBX0JJVF9GQVRBTF9FUlJPUiAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIElQV19JTlRBX0JJVF9QQVJJVFlfRVJST1IgICAgICAgICAgICAweDgwMDAwMDAwCiAKIC8qIEludGVycnVwdHMgZW5hYmxlZCBhdCBpbml0IHRpbWUuICovCi0jZGVmaW5lIENYMl9JTlRBX01BU0tfQUxMICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAoQ1gyX0lOVEFfQklUX1RYX1FVRVVFXzEgICAgICAgICAgICAgICB8IFwKLQkgQ1gyX0lOVEFfQklUX1RYX1FVRVVFXzIgICAgICAgICAgICAgICB8IFwKLQkgQ1gyX0lOVEFfQklUX1RYX1FVRVVFXzMgICAgICAgICAgICAgICB8IFwKLQkgQ1gyX0lOVEFfQklUX1RYX1FVRVVFXzQgICAgICAgICAgICAgICB8IFwKLQkgQ1gyX0lOVEFfQklUX1RYX0NNRF9RVUVVRSAgICAgICAgICAgICB8IFwKLQkgQ1gyX0lOVEFfQklUX1JYX1RSQU5TRkVSICAgICAgICAgICAgICB8IFwKLQkgQ1gyX0lOVEFfQklUX0ZBVEFMX0VSUk9SICAgICAgICAgICAgICB8IFwKLQkgQ1gyX0lOVEFfQklUX1BBUklUWV9FUlJPUiAgICAgICAgICAgICB8IFwKLQkgQ1gyX0lOVEFfQklUX1NUQVRVU19DSEFOR0UgICAgICAgICAgICB8IFwKLQkgQ1gyX0lOVEFfQklUX0ZXX0lOSVRJQUxJWkFUSU9OX0RPTkUgICB8IFwKLQkgQ1gyX0lOVEFfQklUX0JFQUNPTl9QRVJJT0RfRVhQSVJFRCAgICB8IFwKLQkgQ1gyX0lOVEFfQklUX1NMQVZFX01PREVfSE9TVF9DTURfRE9ORSB8IFwKLQkgQ1gyX0lOVEFfQklUX1BSRVBBUkVfRk9SX1BPV0VSX0RPV04gICB8IFwKLQkgQ1gyX0lOVEFfQklUX1BPV0VSX0RPV04gICAgICAgICAgICAgICB8IFwKLSAgICAgICAgIENYMl9JTlRBX0JJVF9SRl9LSUxMX0RPTkUgKQotCi0jZGVmaW5lIElQV1NUQVRVU19FUlJPUl9MT0cgICAgIChDWDJfU0hBUkVEX0xPV0VSX0JPVU5EICsgMHg0MTApCi0jZGVmaW5lIElQV19FVkVOVF9MT0cgICAgIChDWDJfU0hBUkVEX0xPV0VSX0JPVU5EICsgMHg0MTQpCisjZGVmaW5lIElQV19JTlRBX01BU0tfQUxMICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoSVBXX0lOVEFfQklUX1RYX1FVRVVFXzEgICAgICAgICAgICAgICB8IFwKKwkgSVBXX0lOVEFfQklUX1RYX1FVRVVFXzIgICAgICAgICAgICAgICB8IFwKKwkgSVBXX0lOVEFfQklUX1RYX1FVRVVFXzMgICAgICAgICAgICAgICB8IFwKKwkgSVBXX0lOVEFfQklUX1RYX1FVRVVFXzQgICAgICAgICAgICAgICB8IFwKKwkgSVBXX0lOVEFfQklUX1RYX0NNRF9RVUVVRSAgICAgICAgICAgICB8IFwKKwkgSVBXX0lOVEFfQklUX1JYX1RSQU5TRkVSICAgICAgICAgICAgICB8IFwKKwkgSVBXX0lOVEFfQklUX0ZBVEFMX0VSUk9SICAgICAgICAgICAgICB8IFwKKwkgSVBXX0lOVEFfQklUX1BBUklUWV9FUlJPUiAgICAgICAgICAgICB8IFwKKwkgSVBXX0lOVEFfQklUX1NUQVRVU19DSEFOR0UgICAgICAgICAgICB8IFwKKwkgSVBXX0lOVEFfQklUX0ZXX0lOSVRJQUxJWkFUSU9OX0RPTkUgICB8IFwKKwkgSVBXX0lOVEFfQklUX0JFQUNPTl9QRVJJT0RfRVhQSVJFRCAgICB8IFwKKwkgSVBXX0lOVEFfQklUX1NMQVZFX01PREVfSE9TVF9DTURfRE9ORSB8IFwKKwkgSVBXX0lOVEFfQklUX1BSRVBBUkVfRk9SX1BPV0VSX0RPV04gICB8IFwKKwkgSVBXX0lOVEFfQklUX1BPV0VSX0RPV04gICAgICAgICAgICAgICB8IFwKKyAgICAgICAgIElQV19JTlRBX0JJVF9SRl9LSUxMX0RPTkUgKQogCiAvKiBGVyBldmVudCBsb2cgZGVmaW5pdGlvbnMgKi8KICNkZWZpbmUgRVZFTlRfRUxFTV9TSVpFICAgICAoMyAqIHNpemVvZih1MzIpKQpAQCAtMTM5Niw2ICsxNjM1LDExIEBACiAjZGVmaW5lIEVSUk9SX0VMRU1fU0laRSAgICAgKDcgKiBzaXplb2YodTMyKSkKICNkZWZpbmUgRVJST1JfU1RBUlRfT0ZGU0VUICAoMSAqIHNpemVvZih1MzIpKQogCisvKiBUWCBwb3dlciBsZXZlbCAoZGJtKSAqLworI2RlZmluZSBJUFdfVFhfUE9XRVJfTUlOCS0xMgorI2RlZmluZSBJUFdfVFhfUE9XRVJfTUFYCTIwCisjZGVmaW5lIElQV19UWF9QT1dFUl9ERUZBVUxUCUlQV19UWF9QT1dFUl9NQVgKKwogZW51bSB7CiAJSVBXX0ZXX0VSUk9SX09LID0gMCwKIAlJUFdfRldfRVJST1JfRkFJTCwKQEAgLTE0MDgsOCArMTY1Miw4IEBACiAJSVBXX0ZXX0VSUk9SX0FMTE9DX0ZBSUwsCiAJSVBXX0ZXX0VSUk9SX0RNQV9VTkRFUlJVTiwKIAlJUFdfRldfRVJST1JfRE1BX1NUQVRVUywKLQlJUFdfRldfRVJST1JfRElOT1NUQVRVU19FUlJPUiwKLQlJUFdfRldfRVJST1JfRUVQUk9NU1RBVFVTX0VSUk9SLAorCUlQV19GV19FUlJPUl9ESU5PX0VSUk9SLAorCUlQV19GV19FUlJPUl9FRVBST01fRVJST1IsCiAJSVBXX0ZXX0VSUk9SX1NZU0FTU0VSVCwKIAlJUFdfRldfRVJST1JfRkFUQUxfRVJST1IKIH07CkBAIC0xNDI1LDYgKzE2NjksOCBAQAogI2RlZmluZSBIQ19JQlNTX1JFQ09ORiAgICA0CiAjZGVmaW5lIEhDX0RJU0FTU09DX1FVSUVUIDUKIAorI2RlZmluZSBIQ19RT1NfU1VQUE9SVF9BU1NPQyAgMHgwMQorCiAjZGVmaW5lIElQV19SQVRFX0NBUEFCSUxJVElFUyAxCiAjZGVmaW5lIElQV19SQVRFX0NPTk5FQ1QgICAgICAwCiAKQEAgLTE1OTUsMTggKzE4NDEsMjAgQEAKIAlJUFdfT1JEX1RBQkxFXzdfTEFTVAogfTsKIAotI2RlZmluZSBJUFdfT1JESU5BTFNfVEFCTEVfTE9XRVIgICAgICAgIChDWDJfU0hBUkVEX0xPV0VSX0JPVU5EICsgMHg1MDApCi0jZGVmaW5lIElQV19PUkRJTkFMU19UQUJMRV8wICAgICAgICAgICAgKENYMl9TSEFSRURfTE9XRVJfQk9VTkQgKyAweDE4MCkKLSNkZWZpbmUgSVBXX09SRElOQUxTX1RBQkxFXzEgICAgICAgICAgICAoQ1gyX1NIQVJFRF9MT1dFUl9CT1VORCArIDB4MTg0KQotI2RlZmluZSBJUFdfT1JESU5BTFNfVEFCTEVfMiAgICAgICAgICAgIChDWDJfU0hBUkVEX0xPV0VSX0JPVU5EICsgMHgxODgpCi0jZGVmaW5lIElQV19NRU1fRklYRURfT1ZFUlJJREUgICAgICAgICAgKENYMl9TSEFSRURfTE9XRVJfQk9VTkQgKyAweDQxQykKKyNkZWZpbmUgSVBXX0VSUk9SX0xPRyAgICAgKElQV19TSEFSRURfTE9XRVJfQk9VTkQgKyAweDQxMCkKKyNkZWZpbmUgSVBXX0VWRU5UX0xPRyAgICAgKElQV19TSEFSRURfTE9XRVJfQk9VTkQgKyAweDQxNCkKKyNkZWZpbmUgSVBXX09SRElOQUxTX1RBQkxFX0xPV0VSICAgICAgICAoSVBXX1NIQVJFRF9MT1dFUl9CT1VORCArIDB4NTAwKQorI2RlZmluZSBJUFdfT1JESU5BTFNfVEFCTEVfMCAgICAgICAgICAgIChJUFdfU0hBUkVEX0xPV0VSX0JPVU5EICsgMHgxODApCisjZGVmaW5lIElQV19PUkRJTkFMU19UQUJMRV8xICAgICAgICAgICAgKElQV19TSEFSRURfTE9XRVJfQk9VTkQgKyAweDE4NCkKKyNkZWZpbmUgSVBXX09SRElOQUxTX1RBQkxFXzIgICAgICAgICAgICAoSVBXX1NIQVJFRF9MT1dFUl9CT1VORCArIDB4MTg4KQorI2RlZmluZSBJUFdfTUVNX0ZJWEVEX09WRVJSSURFICAgICAgICAgIChJUFdfU0hBUkVEX0xPV0VSX0JPVU5EICsgMHg0MUMpCiAKIHN0cnVjdCBpcHdfZml4ZWRfcmF0ZSB7CiAJdTE2IHR4X3JhdGVzOwogCXUxNiByZXNlcnZlZDsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi0jZGVmaW5lIENYMl9JTkRJUkVDVF9BRERSX01BU0sgKH4weDN1bCkKKyNkZWZpbmUgSVBXX0lORElSRUNUX0FERFJfTUFTSyAofjB4M3VsKQogCiBzdHJ1Y3QgaG9zdF9jbWQgewogCXU4IGNtZDsKQEAgLTE2MTUsNiArMTg2MywxMiBAQAogCXUzMiBwYXJhbVtURkRfQ01EX0lNTUVESUFURV9QQVlMT0FEX0xFTkdUSF07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAorc3RydWN0IGlwd19jbWRfbG9nIHsKKwl1bnNpZ25lZCBsb25nIGppZmZpZXM7CisJaW50IHJldGNvZGU7CisJc3RydWN0IGhvc3RfY21kIGNtZDsKK307CisKICNkZWZpbmUgQ0ZHX0JUX0NPRVhJU1RFTkNFX01JTiAgICAgICAgICAgICAgICAgIDB4MDAKICNkZWZpbmUgQ0ZHX0JUX0NPRVhJU1RFTkNFX0RFRkVSICAgICAgICAgICAgICAgIDB4MDIKICNkZWZpbmUgQ0ZHX0JUX0NPRVhJU1RFTkNFX0tJTEwgICAgICAgICAgICAgICAgIDB4MDQKQEAgLTE2NDMsMTUgKzE4OTcsNiBAQAogI2RlZmluZSBSRUdfQ0hBTk5FTF9NQVNLICAgICAgICAgICAgMHgwMDAwM0ZGRgogI2RlZmluZSBJUFdfSUJTU18xMUJfREVGQVVMVF9NQVNLICAgMHg4N2ZmCiAKLXN0YXRpYyBjb25zdCBsb25nIGlwd19mcmVxdWVuY2llc1tdID0gewotCTI0MTIsIDI0MTcsIDI0MjIsIDI0MjcsCi0JMjQzMiwgMjQzNywgMjQ0MiwgMjQ0NywKLQkyNDUyLCAyNDU3LCAyNDYyLCAyNDY3LAotCTI0NzIsIDI0ODQKLX07Ci0KLSNkZWZpbmUgRlJFUV9DT1VOVCBBUlJBWV9TSVpFKGlwd19mcmVxdWVuY2llcykKLQogI2RlZmluZSBJUFdfTUFYX0NPTkZJR19SRVRSSUVTIDEwCiAKIHN0YXRpYyBpbmxpbmUgdTMyIGZyYW1lX2hkcl9sZW4oc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28uaAppbmRleCA3YTE3YmIzLi5mNWQ4NTZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby5oCkBAIC0xMiw3ICsxMiw2IEBACiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KICNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KIAogI2luY2x1ZGUgImhlcm1lcy5oIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbF8zOHh4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbF8zOHh4LmMKaW5kZXggYWRjNzQ5OS4uMTA5YTk2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xfMzh4eC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNsXzM4eHguYwpAQCAtMTgsNyArMTgsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KQEAgLTExMiw5ICsxMTEsMTAgQEAKIHZvaWQKIGlzbDM4eHhfdHJpZ2dlcl9kZXZpY2UoaW50IGFzbGVlcCwgdm9pZCBfX2lvbWVtICpkZXZpY2VfYmFzZSkKIHsKLQl1MzIgcmVnLCBjb3VudGVyID0gMDsKKwl1MzIgcmVnOwogCiAjaWYgVkVSQk9TRSA+IFNIT1dfRVJST1JfTUVTU0FHRVMKKwl1MzIgY291bnRlciA9IDA7CiAJc3RydWN0IHRpbWV2YWwgY3VycmVudF90aW1lOwogCURFQlVHKFNIT1dfRlVOQ1RJT05fQ0FMTFMsICJpc2wzOHh4IHRyaWdnZXIgZGV2aWNlXG4iKTsKICNlbmRpZgpAQCAtMTMxLDcgKzEzMSw2IEBACiAJCSAgICAgIGN1cnJlbnRfdGltZS50dl9zZWMsIChsb25nKWN1cnJlbnRfdGltZS50dl91c2VjLAogCQkgICAgICByZWFkbChkZXZpY2VfYmFzZSArIElTTDM4WFhfQ1RSTF9TVEFUX1JFRykpOwogI2VuZGlmCi0JCXVkZWxheShJU0wzOFhYX1dSSVRFSU9fREVMQVkpOwogCiAJCXJlZyA9IHJlYWRsKGRldmljZV9iYXNlICsgSVNMMzhYWF9JTlRfSURFTlRfUkVHKTsKIAkJaWYgKHJlZyA9PSAweGFiYWRmYWNlKSB7CkBAIC0xNDUsNyArMTQ0LDkgQEAKIAkJCXdoaWxlIChyZWcgPSByZWFkbChkZXZpY2VfYmFzZSArIElTTDM4WFhfQ1RSTF9TVEFUX1JFRyksCiAJCQkgICAgICAgKHJlZyAmIElTTDM4WFhfQ1RSTF9TVEFUX1NMRUVQTU9ERSkgPT0gMCkgewogCQkJCXVkZWxheShJU0wzOFhYX1dSSVRFSU9fREVMQVkpOworI2lmIFZFUkJPU0UgPiBTSE9XX0VSUk9SX01FU1NBR0VTCiAJCQkJY291bnRlcisrOworI2VuZGlmCiAJCQl9CiAKICNpZiBWRVJCT1NFID4gU0hPV19FUlJPUl9NRVNTQUdFUwpAQCAtMTUzLDEwICsxNTQsNiBAQAogCQkJICAgICAgIiUwOGxpLiUwOGxpIERldmljZSByZWdpc3RlciByZWFkICUwOHhcbiIsCiAJCQkgICAgICBjdXJyZW50X3RpbWUudHZfc2VjLCAobG9uZyljdXJyZW50X3RpbWUudHZfdXNlYywKIAkJCSAgICAgIHJlYWRsKGRldmljZV9iYXNlICsgSVNMMzhYWF9DVFJMX1NUQVRfUkVHKSk7Ci0jZW5kaWYKLQkJCXVkZWxheShJU0wzOFhYX1dSSVRFSU9fREVMQVkpOwotCi0jaWYgVkVSQk9TRSA+IFNIT1dfRVJST1JfTUVTU0FHRVMKIAkJCWRvX2dldHRpbWVvZmRheSgmY3VycmVudF90aW1lKTsKIAkJCURFQlVHKFNIT1dfVFJBQ0lORywKIAkJCSAgICAgICIlMDhsaS4lMDhsaSBEZXZpY2UgYXNsZWVwIGNvdW50ZXIgJWlcbiIsCkBAIC0xNzEsNyArMTY4LDYgQEAKIAogCQkvKiBwZXJmb3JtIGFub3RoZXIgcmVhZCBvbiB0aGUgRGV2aWNlIFN0YXR1cyBSZWdpc3RlciAqLwogCQlyZWcgPSByZWFkbChkZXZpY2VfYmFzZSArIElTTDM4WFhfQ1RSTF9TVEFUX1JFRyk7Ci0JCXVkZWxheShJU0wzOFhYX1dSSVRFSU9fREVMQVkpOwogCiAjaWYgVkVSQk9TRSA+IFNIT1dfRVJST1JfTUVTU0FHRVMKIAkJZG9fZ2V0dGltZW9mZGF5KCZjdXJyZW50X3RpbWUpOwpAQCAtMTg3LDcgKzE4Myw2IEBACiAKIAkJaXNsMzh4eF93MzJfZmx1c2goZGV2aWNlX2Jhc2UsIElTTDM4WFhfREVWX0lOVF9VUERBVEUsCiAJCQkJICBJU0wzOFhYX0RFVl9JTlRfUkVHKTsKLQkJdWRlbGF5KElTTDM4WFhfV1JJVEVJT19ERUxBWSk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbF8zOHh4LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbF8zOHh4LmgKaW5kZXggZTgzZTQ5MS4uOGFmMjA5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xfMzh4eC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNsXzM4eHguaApAQCAtMjAsNyArMjAsNiBAQAogI2lmbmRlZiBfSVNMXzM4WFhfSAogI2RlZmluZSBfSVNMXzM4WFhfSAogCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xfaW9jdGwuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNsX2lvY3RsLmMKaW5kZXggNWMxYTFhZC4uMTM1YTE1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xfaW9jdGwuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbF9pb2N0bC5jCkBAIC0yMCw3ICsyMCw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9kZXYuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2Rldi5jCmluZGV4IDc4YmRiMzUuLjVkZGYyOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2Rldi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2Rldi5jCkBAIC0xOSw3ICsxOSw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2Rldi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfZGV2LmgKaW5kZXggZWZiZWQ0My4uMDcwNTMxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfZGV2LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfZGV2LmgKQEAgLTIzLDcgKzIzLDYgQEAKICNpZm5kZWYgX0lTTFBDSV9ERVZfSAogI2RlZmluZSBfSVNMUENJX0RFVl9ICiAKLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KICNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfZXRoLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9ldGguYwppbmRleCBmYzFlYjM1Li4zM2Q2NGQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9ldGguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9ldGguYwpAQCAtMTcsNyArMTcsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CkBAIC0yMjcsMTcgKzIyNiwxNyBAQAogCQlwcml2LT5kYXRhX2xvd190eF9mdWxsID0gMTsKIAl9CiAKKwkvKiBzZXQgdGhlIHRyYW5zbWlzc2lvbiB0aW1lICovCisJbmRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCXByaXYtPnN0YXRpc3RpY3MudHhfcGFja2V0cysrOworCXByaXYtPnN0YXRpc3RpY3MudHhfYnl0ZXMgKz0gc2tiLT5sZW47CisKIAkvKiB0cmlnZ2VyIHRoZSBkZXZpY2UgKi8KIAlpc2xwY2lfdHJpZ2dlcihwcml2KTsKIAogCS8qIHVubG9jayB0aGUgZHJpdmVyIGNvZGUgKi8KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zbG9jaywgZmxhZ3MpOwogCi0JLyogc2V0IHRoZSB0cmFuc21pc3Npb24gdGltZSAqLwotCW5kZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKLQlwcml2LT5zdGF0aXN0aWNzLnR4X3BhY2tldHMrKzsKLQlwcml2LT5zdGF0aXN0aWNzLnR4X2J5dGVzICs9IHNrYi0+bGVuOwotCiAJcmV0dXJuIDA7CiAKICAgICAgIGRyb3BfZnJlZToKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2hvdHBsdWcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2hvdHBsdWcuYwppbmRleCBkYzA0MGNhLi5iNDFkNjY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9ob3RwbHVnLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfaG90cGx1Zy5jCkBAIC0xOCw3ICsxOCw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW5fY3MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW5fY3MuYwppbmRleCA0YjNjOThmLi5jODIyY2FkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbl9jcy5jCkBAIC00NjA4LDkgKzQ2MDgsOCBAQAogI2VuZGlmCiAKICAgLyogSW5pdGlhbGl6ZSB0aGUgZGV2X2xpbmtfdCBzdHJ1Y3R1cmUgKi8KLSAgbGluayA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBkZXZfbGlua190KSwgR0ZQX0tFUk5FTCk7CisgIGxpbmsgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZGV2X2xpbmtfdCksIEdGUF9LRVJORUwpOwogICBpZiAoIWxpbmspIHJldHVybiBOVUxMOwotICBtZW1zZXQobGluaywgMCwgc2l6ZW9mKHN0cnVjdCBkZXZfbGlua190KSk7CiAKICAgLyogVGhlIGlvIHN0cnVjdHVyZSBkZXNjcmliZXMgSU8gcG9ydCBtYXBwaW5nICovCiAgIGxpbmstPmlvLk51bVBvcnRzMSA9IDg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDM1MDFfY3MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMzUwMV9jcy5jCmluZGV4IDNmOGMyN2YuLjk3OGZkYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMzUwMV9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMzUwMV9jcy5jCkBAIC0xOTY1LDEwICsxOTY1LDkgQEAKIAlpbnQgcmV0OwogCiAJLyogSW5pdGlhbGl6ZSB0aGUgZGV2X2xpbmtfdCBzdHJ1Y3R1cmUgKi8KLQlsaW5rID0ga21hbGxvYyhzaXplb2YoKmxpbmspLCBHRlBfS0VSTkVMKTsKKwlsaW5rID0ga3phbGxvYyhzaXplb2YoKmxpbmspLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWxpbmspCiAJCWdvdG8gb3V0OwotCW1lbXNldChsaW5rLCAwLCBzaXplb2Yoc3RydWN0IGRldl9saW5rX3QpKTsKIAogCS8qIFRoZSBpbyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIElPIHBvcnQgbWFwcGluZyAqLwogCWxpbmstPmlvLk51bVBvcnRzMQk9IDE2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvYWNjZXNzLmMgYi9kcml2ZXJzL3BjaS9hY2Nlc3MuYwppbmRleCAyYTQyYWRkLi5lYTE2ODA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9hY2Nlc3MuYworKysgYi9kcml2ZXJzL3BjaS9hY2Nlc3MuYwpAQCAtMiw2ICsyLDggQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KIAorI2luY2x1ZGUgInBjaS5oIgorCiAvKgogICogVGhpcyBpbnRlcnJ1cHQtc2FmZSBzcGlubG9jayBwcm90ZWN0cyBhbGwgYWNjZXNzZXMgdG8gUENJCiAgKiBjb25maWd1cmF0aW9uIHNwYWNlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHAuaCBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwLmgKaW5kZXggMDYxZWFkMi4uYzQyYjY4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHAuaAorKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocC5oCkBAIC0zMiw4ICszMiw2IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4JCQogI2luY2x1ZGUgPGxpbnV4L3BjaWVwb3J0X2lmLmg+CiAjaW5jbHVkZSAicGNpX2hvdHBsdWcuaCIKIApAQCAtNDIsNiArNDAsNyBAQAogZXh0ZXJuIGludCBwY2llaHBfcG9sbF9tb2RlOwogZXh0ZXJuIGludCBwY2llaHBfcG9sbF90aW1lOwogZXh0ZXJuIGludCBwY2llaHBfZGVidWc7CitleHRlcm4gaW50IHBjaWVocF9mb3JjZTsKIAogLyojZGVmaW5lIGRiZyhmb3JtYXQsIGFyZy4uLikgZG8geyBpZiAocGNpZWhwX2RlYnVnKSBwcmludGsoS0VSTl9ERUJVRyAiJXM6ICIgZm9ybWF0LCBNWV9OQU1FICwgIyMgYXJnKTsgfSB3aGlsZSAoMCkqLwogI2RlZmluZSBkYmcoZm9ybWF0LCBhcmcuLi4pIGRvIHsgaWYgKHBjaWVocF9kZWJ1ZykgcHJpbnRrKCIlczogIiBmb3JtYXQsIE1ZX05BTUUgLCAjIyBhcmcpOyB9IHdoaWxlICgwKQpAQCAtNDksMzkgKzQ4LDIwIEBACiAjZGVmaW5lIGluZm8oZm9ybWF0LCBhcmcuLi4pIHByaW50ayhLRVJOX0lORk8gIiVzOiAiIGZvcm1hdCwgTVlfTkFNRSAsICMjIGFyZykKICNkZWZpbmUgd2Fybihmb3JtYXQsIGFyZy4uLikgcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6ICIgZm9ybWF0LCBNWV9OQU1FICwgIyMgYXJnKQogCi1zdHJ1Y3QgcGNpX2Z1bmMgewotCXN0cnVjdCBwY2lfZnVuYyAqbmV4dDsKLQl1OCBidXM7Ci0JdTggZGV2aWNlOwotCXU4IGZ1bmN0aW9uOwotCXU4IGlzX2FfYm9hcmQ7Ci0JdTE2IHN0YXR1czsKLQl1OCBjb25maWd1cmVkOwotCXU4IHN3aXRjaF9zYXZlOwotCXU4IHByZXNlbmNlX3NhdmU7Ci0JdTMyIGJhc2VfbGVuZ3RoWzB4MDZdOwotCXU4IGJhc2VfdHlwZVsweDA2XTsKLQl1MTYgcmVzZXJ2ZWQyOwotCXUzMiBjb25maWdfc3BhY2VbMHgyMF07Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqbWVtX2hlYWQ7Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqcF9tZW1faGVhZDsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICppb19oZWFkOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKmJ1c19oZWFkOwotCXN0cnVjdCBwY2lfZGV2KiBwY2lfZGV2Oworc3RydWN0IGhvdHBsdWdfcGFyYW1zIHsKKwl1OCBjYWNoZV9saW5lX3NpemU7CisJdTggbGF0ZW5jeV90aW1lcjsKKwl1OCBlbmFibGVfc2VycjsKKwl1OCBlbmFibGVfcGVycjsKIH07CiAKIHN0cnVjdCBzbG90IHsKIAlzdHJ1Y3Qgc2xvdCAqbmV4dDsKIAl1OCBidXM7CiAJdTggZGV2aWNlOworCXUxNiBzdGF0dXM7CiAJdTMyIG51bWJlcjsKLQl1OCBpc19hX2JvYXJkOwotCXU4IGNvbmZpZ3VyZWQ7CiAJdTggc3RhdGU7Ci0JdTggc3dpdGNoX3NhdmU7Ci0JdTggcHJlc2VuY2Vfc2F2ZTsKLQl1MzIgY2FwYWJpbGl0aWVzOwotCXUxNiByZXNlcnZlZDI7CiAJc3RydWN0IHRpbWVyX2xpc3QgdGFza19ldmVudDsKIAl1OCBocF9zbG90OwogCXN0cnVjdCBjb250cm9sbGVyICpjdHJsOwpAQCAtOTAsNDIgKzcwLDQ3IEBACiAJc3RydWN0IGxpc3RfaGVhZAlzbG90X2xpc3Q7CiB9OwogCi1zdHJ1Y3QgcGNpX3Jlc291cmNlIHsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICogbmV4dDsKLQl1MzIgYmFzZTsKLQl1MzIgbGVuZ3RoOwotfTsKLQogc3RydWN0IGV2ZW50X2luZm8gewogCXUzMiBldmVudF90eXBlOwogCXU4IGhwX3Nsb3Q7CiB9OwogCit0eXBlZGVmIHU4KCpwaHBfaW50cl9jYWxsYmFja190KSAodTggaHBfc2xvdCwgdm9pZCAqaW5zdGFuY2VfaWQpOworCitzdHJ1Y3QgcGhwX2N0bHJfc3RhdGVfcyB7CisJc3RydWN0IHBocF9jdGxyX3N0YXRlX3MgKnBuZXh0OworCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2OworCXVuc2lnbmVkIGludCBpcnE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsJCQkJLyogc3BpbmxvY2sncyAqLworCXUzMiBzbG90X2RldmljZV9vZmZzZXQ7CisJdTMyIG51bV9zbG90czsKKyAgICAJc3RydWN0IHRpbWVyX2xpc3QJaW50X3BvbGxfdGltZXI7CQkvKiBBZGRlZCBmb3IgcG9sbCBldmVudCAqLworCXBocF9pbnRyX2NhbGxiYWNrX3QgCWF0dGVudGlvbl9idXR0b25fY2FsbGJhY2s7CisJcGhwX2ludHJfY2FsbGJhY2tfdCAJc3dpdGNoX2NoYW5nZV9jYWxsYmFjazsKKwlwaHBfaW50cl9jYWxsYmFja190IAlwcmVzZW5jZV9jaGFuZ2VfY2FsbGJhY2s7CisJcGhwX2ludHJfY2FsbGJhY2tfdCAJcG93ZXJfZmF1bHRfY2FsbGJhY2s7CisJdm9pZCAJCQkqY2FsbGJhY2tfaW5zdGFuY2VfaWQ7CisJc3RydWN0IGN0cmxfcmVnIAkqY3JlZzsJCQkJLyogUHRyIHRvIGNvbnRyb2xsZXIgcmVnaXN0ZXIgc3BhY2UgKi8KK307CisKKyNkZWZpbmUgTUFYX0VWRU5UUwkJMTAKIHN0cnVjdCBjb250cm9sbGVyIHsKIAlzdHJ1Y3QgY29udHJvbGxlciAqbmV4dDsKIAlzdHJ1Y3Qgc2VtYXBob3JlIGNyaXRfc2VjdDsJLyogY3JpdGljYWwgc2VjdGlvbiBzZW1hcGhvcmUgKi8KLQl2b2lkICpocGNfY3Rscl9oYW5kbGU7CQkvKiBIUEMgY29udHJvbGxlciBoYW5kbGUgKi8KKwlzdHJ1Y3QgcGhwX2N0bHJfc3RhdGVfcyAqaHBjX2N0bHJfaGFuZGxlOyAvKiBIUEMgY29udHJvbGxlciBoYW5kbGUgKi8KIAlpbnQgbnVtX3Nsb3RzOwkJCS8qIE51bWJlciBvZiBzbG90cyBvbiBjdGxyICovCiAJaW50IHNsb3RfbnVtX2luYzsJCS8qIDEgb3IgLTEgKi8KLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICptZW1faGVhZDsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICpwX21lbV9oZWFkOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKmlvX2hlYWQ7Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqYnVzX2hlYWQ7CiAJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7CiAJc3RydWN0IHBjaV9idXMgKnBjaV9idXM7Ci0Jc3RydWN0IGV2ZW50X2luZm8gZXZlbnRfcXVldWVbMTBdOworCXN0cnVjdCBldmVudF9pbmZvIGV2ZW50X3F1ZXVlW01BWF9FVkVOVFNdOwogCXN0cnVjdCBzbG90ICpzbG90OwogCXN0cnVjdCBocGNfb3BzICpocGNfb3BzOwogCXdhaXRfcXVldWVfaGVhZF90IHF1ZXVlOwkvKiBzbGVlcCAmIHdha2UgcHJvY2VzcyAqLwogCXU4IG5leHRfZXZlbnQ7Ci0JdTggc2VnOwogCXU4IGJ1czsKIAl1OCBkZXZpY2U7CiAJdTggZnVuY3Rpb247Ci0JdTggcmV2OwogCXU4IHNsb3RfZGV2aWNlX29mZnNldDsKLQl1OCBhZGRfc3VwcG9ydDsKLQllbnVtIHBjaV9idXNfc3BlZWQgc3BlZWQ7CiAJdTMyIGZpcnN0X3Nsb3Q7CQkvKiBGaXJzdCBwaHlzaWNhbCBzbG90IG51bWJlciAqLyAgLyogUENJRSBvbmx5IGhhcyAxIHNsb3QgKi8KIAl1OCBzbG90X2J1czsJCS8qIEJ1cyB3aGVyZSB0aGUgc2xvdHMgaGFuZGxlZCBieSB0aGlzIGNvbnRyb2xsZXIgc2l0ICovCiAJdTggY3RybGNhcDsKQEAgLTEzMywyMCArMTE4LDYgQEAKIAl1OCBjYXBfYmFzZTsKIH07CiAKLXN0cnVjdCBpcnFfbWFwcGluZyB7Ci0JdTggYmFyYmVyX3BvbGU7Ci0JdTggdmFsaWRfSU5UOwotCXU4IGludGVycnVwdFs0XTsKLX07Ci0KLXN0cnVjdCByZXNvdXJjZV9saXN0cyB7Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqbWVtX2hlYWQ7Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqcF9tZW1faGVhZDsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICppb19oZWFkOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKmJ1c19oZWFkOwotCXN0cnVjdCBpcnFfbWFwcGluZyAqaXJxczsKLX07Ci0KICNkZWZpbmUgSU5UX0JVVFRPTl9JR05PUkUJCTAKICNkZWZpbmUgSU5UX1BSRVNFTkNFX09OCQkJMQogI2RlZmluZSBJTlRfUFJFU0VOQ0VfT0ZGCQkyCkBAIC0yMDAsMjEgKzE3MSwxNCBAQAogICogZXJyb3IgTWVzc2FnZXMKICAqLwogI2RlZmluZSBtc2dfaW5pdGlhbGl6YXRpb25fZXJyCSJJbml0aWFsaXphdGlvbiBmYWlsdXJlLCBlcnJvcj0lZFxuIgotI2RlZmluZSBtc2dfSFBDX3Jldl9lcnJvcgkiVW5zdXBwb3J0ZWQgcmV2aXNpb24gb2YgdGhlIFBDSSBob3QgcGx1ZyBjb250cm9sbGVyIGZvdW5kLlxuIgotI2RlZmluZSBtc2dfSFBDX25vbl9wY2llCSJUaGUgUENJIGhvdCBwbHVnIGNvbnRyb2xsZXIgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlci5cbiIKLSNkZWZpbmUgbXNnX0hQQ19ub3Rfc3VwcG9ydGVkCSJUaGlzIHN5c3RlbSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgdmVyc2lvbiBvZiBwY2llcGhkIG1vZHVsZS4gVXBncmFkZSB0byBhIG5ld2VyIHZlcnNpb24gb2YgcGNpZWhwZFxuIgotI2RlZmluZSBtc2dfdW5hYmxlX3RvX3NhdmUJIlVuYWJsZSB0byBzdG9yZSBQQ0kgaG90IHBsdWcgYWRkIHJlc291cmNlIGluZm9ybWF0aW9uLiBUaGlzIHN5c3RlbSBtdXN0IGJlIHJlYm9vdGVkIGJlZm9yZSBhZGRpbmcgYW55IFBDSSBkZXZpY2VzLlxuIgogI2RlZmluZSBtc2dfYnV0dG9uX29uCQkiUENJIHNsb3QgIyVkIC0gcG93ZXJpbmcgb24gZHVlIHRvIGJ1dHRvbiBwcmVzcy5cbiIKICNkZWZpbmUgbXNnX2J1dHRvbl9vZmYJCSJQQ0kgc2xvdCAjJWQgLSBwb3dlcmluZyBvZmYgZHVlIHRvIGJ1dHRvbiBwcmVzcy5cbiIKICNkZWZpbmUgbXNnX2J1dHRvbl9jYW5jZWwJIlBDSSBzbG90ICMlZCAtIGFjdGlvbiBjYW5jZWxlZCBkdWUgdG8gYnV0dG9uIHByZXNzLlxuIgogI2RlZmluZSBtc2dfYnV0dG9uX2lnbm9yZQkiUENJIHNsb3QgIyVkIC0gYnV0dG9uIHByZXNzIGlnbm9yZWQuICAoYWN0aW9uIGluIHByb2dyZXNzLi4uKVxuIgogCiAvKiBjb250cm9sbGVyIGZ1bmN0aW9ucyAqLwotZXh0ZXJuIGludAlwY2llaHBybV9maW5kX2F2YWlsYWJsZV9yZXNvdXJjZXMJKHN0cnVjdCBjb250cm9sbGVyICpjdHJsKTsKIGV4dGVybiBpbnQJcGNpZWhwX2V2ZW50X3N0YXJ0X3RocmVhZAkodm9pZCk7CiBleHRlcm4gdm9pZAlwY2llaHBfZXZlbnRfc3RvcF90aHJlYWQJKHZvaWQpOwotZXh0ZXJuIHN0cnVjdCAJcGNpX2Z1bmMgKnBjaWVocF9zbG90X2NyZWF0ZQkodW5zaWduZWQgY2hhciBidXNudW1iZXIpOwotZXh0ZXJuIHN0cnVjdCAJcGNpX2Z1bmMgKnBjaWVocF9zbG90X2ZpbmQJKHVuc2lnbmVkIGNoYXIgYnVzLCB1bnNpZ25lZCBjaGFyIGRldmljZSwgdW5zaWduZWQgY2hhciBpbmRleCk7CiBleHRlcm4gaW50CXBjaWVocF9lbmFibGVfc2xvdAkJKHN0cnVjdCBzbG90ICpzbG90KTsKIGV4dGVybiBpbnQJcGNpZWhwX2Rpc2FibGVfc2xvdAkJKHN0cnVjdCBzbG90ICpzbG90KTsKIApAQCAtMjI0LDI1ICsxODgsMTcgQEAKIGV4dGVybiB1OAlwY2llaHBfaGFuZGxlX3Bvd2VyX2ZhdWx0CSh1OCBocF9zbG90LCB2b2lkICppbnN0X2lkKTsKIC8qIGV4dGVybiB2b2lkCWxvbmdfZGVsYXkgKGludCBkZWxheSk7ICovCiAKLS8qIHJlc291cmNlIGZ1bmN0aW9ucyAqLwotZXh0ZXJuIGludAlwY2llaHBfcmVzb3VyY2Vfc29ydF9hbmRfY29tYmluZQkoc3RydWN0IHBjaV9yZXNvdXJjZSAqKmhlYWQpOwotCiAvKiBwY2kgZnVuY3Rpb25zICovCi1leHRlcm4gaW50CXBjaWVocF9zZXRfaXJxCQkJKHU4IGJ1c19udW0sIHU4IGRldl9udW0sIHU4IGludF9waW4sIHU4IGlycV9udW0pOwotLypleHRlcm4gaW50CXBjaWVocF9nZXRfYnVzX2RldgkJKHN0cnVjdCBjb250cm9sbGVyICpjdHJsLCB1OCAqYnVzX251bSwgdTggKmRldl9udW0sIHN0cnVjdCBzbG90ICpzbG90KTsqLwotZXh0ZXJuIGludAlwY2llaHBfc2F2ZV9jb25maWcJIAkoc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwsIGludCBidXNudW1iZXIsIGludCBudW1fY3Rscl9zbG90cywgaW50IGZpcnN0X2RldmljZV9udW0pOwotZXh0ZXJuIGludAlwY2llaHBfc2F2ZV91c2VkX3Jlc291cmNlcwkoc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwsIHN0cnVjdCBwY2lfZnVuYyAqIGZ1bmMsIGludCBmbGFnKTsKLWV4dGVybiBpbnQJcGNpZWhwX3NhdmVfc2xvdF9jb25maWcJCShzdHJ1Y3QgY29udHJvbGxlciAqY3RybCwgc3RydWN0IHBjaV9mdW5jICogbmV3X3Nsb3QpOwotZXh0ZXJuIHZvaWQJcGNpZWhwX2Rlc3Ryb3lfYm9hcmRfcmVzb3VyY2VzCShzdHJ1Y3QgcGNpX2Z1bmMgKiBmdW5jKTsKLWV4dGVybiBpbnQJcGNpZWhwX3JldHVybl9ib2FyZF9yZXNvdXJjZXMJKHN0cnVjdCBwY2lfZnVuYyAqIGZ1bmMsIHN0cnVjdCByZXNvdXJjZV9saXN0cyAqIHJlc291cmNlcyk7Ci1leHRlcm4gdm9pZAlwY2llaHBfZGVzdHJveV9yZXNvdXJjZV9saXN0CShzdHJ1Y3QgcmVzb3VyY2VfbGlzdHMgKiByZXNvdXJjZXMpOwotZXh0ZXJuIGludAlwY2llaHBfY29uZmlndXJlX2RldmljZQkJKHN0cnVjdCBjb250cm9sbGVyKiBjdHJsLCBzdHJ1Y3QgcGNpX2Z1bmMqIGZ1bmMpOwotZXh0ZXJuIGludAlwY2llaHBfdW5jb25maWd1cmVfZGV2aWNlCShzdHJ1Y3QgcGNpX2Z1bmMqIGZ1bmMpOworZXh0ZXJuIGludAlwY2llaHBfY29uZmlndXJlX2RldmljZQkJKHN0cnVjdCBzbG90ICpwX3Nsb3QpOworZXh0ZXJuIGludAlwY2llaHBfdW5jb25maWd1cmVfZGV2aWNlCShzdHJ1Y3Qgc2xvdCAqcF9zbG90KTsKK2V4dGVybiBpbnQJcGNpZWhwX2dldF9ocF9od19jb250cm9sX2Zyb21fZmlybXdhcmUoc3RydWN0IHBjaV9kZXYgKmRldik7CitleHRlcm4gdm9pZAlwY2llaHBfZ2V0X2hwX3BhcmFtc19mcm9tX2Zpcm13YXJlKHN0cnVjdCBwY2lfZGV2ICpkZXYsCisJICAgICAgIAlzdHJ1Y3QgaG90cGx1Z19wYXJhbXMgKmhwcCk7CisKIAogCiAvKiBHbG9iYWwgdmFyaWFibGVzICovCiBleHRlcm4gc3RydWN0IGNvbnRyb2xsZXIgKnBjaWVocF9jdHJsX2xpc3Q7Ci1leHRlcm4gc3RydWN0IHBjaV9mdW5jICpwY2llaHBfc2xvdF9saXN0WzI1Nl07CiAKIC8qIElubGluZSBmdW5jdGlvbnMgKi8KIApAQCAtMjUyLDEyICsyMDgsOSBAQAogCiAJcF9zbG90ID0gY3RybC0+c2xvdDsKIAotCWRiZygicF9zbG90ID0gJXBcbiIsIHBfc2xvdCk7Ci0KIAl3aGlsZSAocF9zbG90ICYmIChwX3Nsb3QtPmRldmljZSAhPSBkZXZpY2UpKSB7CiAJCXRtcF9zbG90ID0gcF9zbG90OwogCQlwX3Nsb3QgPSBwX3Nsb3QtPm5leHQ7Ci0JCWRiZygiSW4gd2hpbGUgbG9vcCwgcF9zbG90ID0gJXBcbiIsIHBfc2xvdCk7CiAJfQogCWlmIChwX3Nsb3QgPT0gTlVMTCkgewogCQllcnIoIkVSUk9SOiBwY2llaHBfZmluZF9zbG90IGRldmljZT0weCV4XG4iLCBkZXZpY2UpOwpAQCAtMjczLDcgKzIyNiw2IEBACiAKIAlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKIAotCWRiZygiJXMgOiBzdGFydFxuIiwgX19GVU5DVElPTl9fKTsKIAlhZGRfd2FpdF9xdWV1ZSgmY3RybC0+cXVldWUsICZ3YWl0KTsKIAlpZiAoIXBjaWVocF9wb2xsX21vZGUpCiAJCS8qIFNsZWVwIGZvciB1cCB0byAxIHNlY29uZCAqLwpAQCAtMjg1LDE5ICsyMzcsOSBAQAogCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKIAkJcmV0dmFsID0gIC1FSU5UUjsKIAotCWRiZygiJXMgOiBlbmRcbiIsIF9fRlVOQ1RJT05fXyk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIAotLyogUHV0cyBub2RlIGJhY2sgaW4gdGhlIHJlc291cmNlIGxpc3QgcG9pbnRlZCB0byBieSBoZWFkICovCi1zdGF0aWMgaW5saW5lIHZvaWQgcmV0dXJuX3Jlc291cmNlKHN0cnVjdCBwY2lfcmVzb3VyY2UgKipoZWFkLCBzdHJ1Y3QgcGNpX3Jlc291cmNlICpub2RlKQotewotCWlmICghbm9kZSB8fCAhaGVhZCkKLQkJcmV0dXJuOwotCW5vZGUtPm5leHQgPSAqaGVhZDsKLQkqaGVhZCA9IG5vZGU7Ci19Ci0KICNkZWZpbmUgU0xPVF9OQU1FX1NJWkUgMTAKIAogc3RhdGljIGlubGluZSB2b2lkIG1ha2Vfc2xvdF9uYW1lKGNoYXIgKmJ1ZmZlciwgaW50IGJ1ZmZlcl9zaXplLCBzdHJ1Y3Qgc2xvdCAqc2xvdCkKQEAgLTMxMSwxNCArMjUzLDcgQEAKIAlBQ1BJCiB9OwogCi10eXBlZGVmIHU4KCpwaHBfaW50cl9jYWxsYmFja190KSAodW5zaWduZWQgaW50IGNoYW5nZV9pZCwgdm9pZCAqaW5zdGFuY2VfaWQpOwotCi1pbnQgcGNpZV9pbml0KHN0cnVjdCBjb250cm9sbGVyICpjdHJsLCBzdHJ1Y3QgcGNpZV9kZXZpY2UgKmRldiwKLQkJcGhwX2ludHJfY2FsbGJhY2tfdCBhdHRlbnRpb25fYnV0dG9uX2NhbGxiYWNrLAotCQlwaHBfaW50cl9jYWxsYmFja190IHN3aXRjaF9jaGFuZ2VfY2FsbGJhY2ssCi0JCXBocF9pbnRyX2NhbGxiYWNrX3QgcHJlc2VuY2VfY2hhbmdlX2NhbGxiYWNrLAotCQlwaHBfaW50cl9jYWxsYmFja190IHBvd2VyX2ZhdWx0X2NhbGxiYWNrKTsKLQoraW50IHBjaWVfaW5pdChzdHJ1Y3QgY29udHJvbGxlciAqY3RybCwgc3RydWN0IHBjaWVfZGV2aWNlICpkZXYpOwogCiAvKiBUaGlzIGhhcyBubyBtZWFuaW5nIGZvciBQQ0kgRXhwcmVzcywgYXMgdGhlcmUgaXMgb25seSAxIHNsb3QgcGVyIHBvcnQgKi8KIGludCBwY2llX2dldF9jdGxyX3Nsb3RfY29uZmlnKHN0cnVjdCBjb250cm9sbGVyICpjdHJsLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfY29yZS5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfY29yZS5jCmluZGV4IGNhZmM3ZWEuLjhkZjcwNDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2NvcmUuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9jb3JlLmMKQEAgLTI3LDI3ICsyNywyMCBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSAicGNpZWhwLmgiCi0jaW5jbHVkZSAicGNpZWhwcm0uaCIKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KIAogLyogR2xvYmFsIHZhcmlhYmxlcyAqLwogaW50IHBjaWVocF9kZWJ1ZzsKIGludCBwY2llaHBfcG9sbF9tb2RlOwogaW50IHBjaWVocF9wb2xsX3RpbWU7CitpbnQgcGNpZWhwX2ZvcmNlOwogc3RydWN0IGNvbnRyb2xsZXIgKnBjaWVocF9jdHJsX2xpc3Q7Ci1zdHJ1Y3QgcGNpX2Z1bmMgKnBjaWVocF9zbG90X2xpc3RbMjU2XTsKIAogI2RlZmluZSBEUklWRVJfVkVSU0lPTgkiMC40IgogI2RlZmluZSBEUklWRVJfQVVUSE9SCSJEYW4gWmluayA8ZGFuLnppbmtAY29tcGFxLmNvbT4sIEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ0Brcm9haC5jb20+LCBEZWx5IFN5IDxkZWx5Lmwuc3lAaW50ZWwuY29tPiIKQEAgLTYwLDkgKzUzLDExIEBACiBtb2R1bGVfcGFyYW0ocGNpZWhwX2RlYnVnLCBib29sLCAwNjQ0KTsKIG1vZHVsZV9wYXJhbShwY2llaHBfcG9sbF9tb2RlLCBib29sLCAwNjQ0KTsKIG1vZHVsZV9wYXJhbShwY2llaHBfcG9sbF90aW1lLCBpbnQsIDA2NDQpOworbW9kdWxlX3BhcmFtKHBjaWVocF9mb3JjZSwgYm9vbCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHBjaWVocF9kZWJ1ZywgIkRlYnVnZ2luZyBtb2RlIGVuYWJsZWQgb3Igbm90Iik7CiBNT0RVTEVfUEFSTV9ERVNDKHBjaWVocF9wb2xsX21vZGUsICJVc2luZyBwb2xsaW5nIG1lY2hhbmlzbSBmb3IgaG90LXBsdWcgZXZlbnRzIG9yIG5vdCIpOwogTU9EVUxFX1BBUk1fREVTQyhwY2llaHBfcG9sbF90aW1lLCAiUG9sbGluZyBtZWNoYW5pc20gZnJlcXVlbmN5LCBpbiBzZWNvbmRzIik7CitNT0RVTEVfUEFSTV9ERVNDKHBjaWVocF9mb3JjZSwgIkZvcmNlIHBjaWVocCwgZXZlbiBpZiBfT1NDIGFuZCBPU0hQIGFyZSBtaXNzaW5nIik7CiAKICNkZWZpbmUgUENJRV9NT0RVTEVfTkFNRSAicGNpZWhwIgogCkBAIC0xMTQsOCArMTA5LDYgQEAKIAl1MzIgc2xvdF9udW1iZXI7CiAJaW50IHJlc3VsdCA9IC1FTk9NRU07CiAKLQlkYmcoIiVzXG4iLF9fRlVOQ1RJT05fXyk7Ci0KIAludW1iZXJfb2Zfc2xvdHMgPSBjdHJsLT5udW1fc2xvdHM7CiAJc2xvdF9kZXZpY2UgPSBjdHJsLT5zbG90X2RldmljZV9vZmZzZXQ7CiAJc2xvdF9udW1iZXIgPSBjdHJsLT5maXJzdF9zbG90OwpAQCAtMzcwLDcgKzM2Myw2IEBACiAJdTggdmFsdWU7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXY7CiAJCi0JZGJnKCIlczogQ2FsbGVkIGJ5IGhwX2RydlxuIiwgX19GVU5DVElPTl9fKTsKIAljdHJsID0ga21hbGxvYyhzaXplb2YoKmN0cmwpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWN0cmwpIHsKIAkJZXJyKCIlcyA6IG91dCBvZiBtZW1vcnlcbiIsIF9fRlVOQ1RJT05fXyk7CkBAIC0zNzgsMjIgKzM3MCwxNSBAQAogCX0KIAltZW1zZXQoY3RybCwgMCwgc2l6ZW9mKHN0cnVjdCBjb250cm9sbGVyKSk7CiAKLQlkYmcoIiVzOiBEUlZfdGhyZWFkIHBpZCA9ICVkXG4iLCBfX0ZVTkNUSU9OX18sIGN1cnJlbnQtPnBpZCk7Ci0JCiAJcGRldiA9IGRldi0+cG9ydDsKKwljdHJsLT5wY2lfZGV2ID0gcGRldjsKIAotCXJjID0gcGNpZV9pbml0KGN0cmwsIGRldiwKLQkJKHBocF9pbnRyX2NhbGxiYWNrX3QpIHBjaWVocF9oYW5kbGVfYXR0ZW50aW9uX2J1dHRvbiwKLQkJKHBocF9pbnRyX2NhbGxiYWNrX3QpIHBjaWVocF9oYW5kbGVfc3dpdGNoX2NoYW5nZSwKLQkJKHBocF9pbnRyX2NhbGxiYWNrX3QpIHBjaWVocF9oYW5kbGVfcHJlc2VuY2VfY2hhbmdlLAotCQkocGhwX2ludHJfY2FsbGJhY2tfdCkgcGNpZWhwX2hhbmRsZV9wb3dlcl9mYXVsdCk7CisJcmMgPSBwY2llX2luaXQoY3RybCwgZGV2KTsKIAlpZiAocmMpIHsKIAkJZGJnKCIlczogY29udHJvbGxlciBpbml0aWFsaXphdGlvbiBmYWlsZWRcbiIsIFBDSUVfTU9EVUxFX05BTUUpOwogCQlnb3RvIGVycl9vdXRfZnJlZV9jdHJsOwogCX0KIAotCWN0cmwtPnBjaV9kZXYgPSBwZGV2OwotCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGN0cmwpOwogCiAJY3RybC0+cGNpX2J1cyA9IGttYWxsb2Moc2l6ZW9mKCpjdHJsLT5wY2lfYnVzKSwgR0ZQX0tFUk5FTCk7CkBAIC00MDIsNyArMzg3LDYgQEAKIAkJcmMgPSAtRU5PTUVNOwogCQlnb3RvIGVycl9vdXRfdW5tYXBfbW1pb19yZWdpb247CiAJfQotCWRiZygiJXM6IGN0cmwtPnBjaV9idXMgJXBcbiIsIF9fRlVOQ1RJT05fXywgY3RybC0+cGNpX2J1cyk7CiAJbWVtY3B5IChjdHJsLT5wY2lfYnVzLCBwZGV2LT5idXMsIHNpemVvZiAoKmN0cmwtPnBjaV9idXMpKTsKIAljdHJsLT5idXMgPSBwZGV2LT5idXMtPm51bWJlcjsgIC8qIGN0cmwgYnVzICovCiAJY3RybC0+c2xvdF9idXMgPSBwZGV2LT5zdWJvcmRpbmF0ZS0+bnVtYmVyOyAgLyogYnVzIGNvbnRyb2xsZWQgYnkgdGhpcyBIUEMgKi8KQEAgLTQyNCwyNSArNDA4LDYgQEAKIAlmaXJzdF9kZXZpY2VfbnVtID0gY3RybC0+c2xvdF9kZXZpY2Vfb2Zmc2V0OwogCW51bV9jdGxyX3Nsb3RzID0gY3RybC0+bnVtX3Nsb3RzOyAKIAotCS8qIFN0b3JlIFBDSSBDb25maWcgU3BhY2UgZm9yIGFsbCBkZXZpY2VzIG9uIHRoaXMgYnVzICovCi0JZGJnKCIlczogQmVmb3JlIGNhbGxpbmcgcGNpZWhwX3NhdmVfY29uZmlnLCBjdHJsLT5idXMgJXgsY3RybC0+c2xvdF9idXMgJXhcbiIsIAotCQlfX0ZVTkNUSU9OX18sY3RybC0+YnVzLCBjdHJsLT5zbG90X2J1cyk7Ci0JcmMgPSBwY2llaHBfc2F2ZV9jb25maWcoY3RybCwgY3RybC0+c2xvdF9idXMsIG51bV9jdGxyX3Nsb3RzLCBmaXJzdF9kZXZpY2VfbnVtKTsKLQlpZiAocmMpIHsKLQkJZXJyKCIlczogdW5hYmxlIHRvIHNhdmUgUENJIGNvbmZpZ3VyYXRpb24gZGF0YSwgZXJyb3IgJWRcbiIsIF9fRlVOQ1RJT05fXywgcmMpOwotCQlnb3RvIGVycl9vdXRfZnJlZV9jdHJsX2J1czsKLQl9Ci0KLQkvKiBHZXQgSU8sIG1lbW9yeSwgYW5kIElSUSByZXNvdXJjZXMgZm9yIG5ldyBkZXZpY2VzICovCi0JcmMgPSBwY2llaHBybV9maW5kX2F2YWlsYWJsZV9yZXNvdXJjZXMoY3RybCk7Ci0JY3RybC0+YWRkX3N1cHBvcnQgPSAhcmM7Ci0JCi0JaWYgKHJjKSB7Ci0JCWRiZygicGNpZWhwcm1fZmluZF9hdmFpbGFibGVfcmVzb3VyY2VzID0gJSN4XG4iLCByYyk7Ci0JCWVycigidW5hYmxlIHRvIGxvY2F0ZSBQQ0kgY29uZmlndXJhdGlvbiByZXNvdXJjZXMgZm9yIGhvdCBwbHVnIGFkZC5cbiIpOwotCQlnb3RvIGVycl9vdXRfZnJlZV9jdHJsX2J1czsKLQl9Ci0KIAkvKiBTZXR1cCB0aGUgc2xvdCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmVzICovCiAJcmMgPSBpbml0X3Nsb3RzKGN0cmwpOwogCWlmIChyYykgewpAQCAtNDUxLDcgKzQxNiw2IEBACiAJfQogCiAJdF9zbG90ID0gcGNpZWhwX2ZpbmRfc2xvdChjdHJsLCBmaXJzdF9kZXZpY2VfbnVtKTsKLQlkYmcoIiVzOiB0X3Nsb3QgJXBcbiIsIF9fRlVOQ1RJT05fXywgdF9zbG90KTsKIAogCS8qCUZpbmlzaCBzZXR0aW5nIHVwIHRoZSBob3QgcGx1ZyBjdHJsIGRldmljZSAqLwogCWN0cmwtPm5leHRfZXZlbnQgPSAwOwpAQCAtNDY4LDcgKzQzMiw2IEBACiAJZG93bigmY3RybC0+Y3JpdF9zZWN0KTsKIAogCXRfc2xvdC0+aHBjX29wcy0+Z2V0X2FkYXB0ZXJfc3RhdHVzKHRfc2xvdCwgJnZhbHVlKTsgLyogQ2hlY2sgaWYgc2xvdCBpcyBvY2N1cGllZCAqLwotCWRiZygiJXM6IGFkcGF0ZXIgdmFsdWUgJXhcbiIsIF9fRlVOQ1RJT05fXywgdmFsdWUpOwogCQogCWlmICgoUE9XRVJfQ1RSTChjdHJsLT5jdHJsY2FwKSkgJiYgIXZhbHVlKSB7CiAJCXJjID0gdF9zbG90LT5ocGNfb3BzLT5wb3dlcl9vZmZfc2xvdCh0X3Nsb3QpOyAvKiBQb3dlciBvZmYgc2xvdCBpZiBub3Qgb2NjdXBpZWQqLwpAQCAtNTAxLDcgKzQ2NCw2IEBACiAKIHN0YXRpYyBpbnQgcGNpZV9zdGFydF90aHJlYWQodm9pZCkKIHsKLQlpbnQgbG9vcDsKIAlpbnQgcmV0dmFsID0gMDsKIAkKIAlkYmcoIkluaXRpYWxpemUgKyBTdGFydCB0aGUgbm90aWZpY2F0aW9uL3BvbGxpbmcgbWVjaGFuaXNtIFxuIik7CkBAIC01MTIsMzIgKzQ3NCwxMSBAQAogCQlyZXR1cm4gcmV0dmFsOwogCX0KIAotCWRiZygiSW5pdGlhbGl6ZSBzbG90IGxpc3RzXG4iKTsKLQkvKiBPbmUgc2xvdCBsaXN0IGZvciBlYWNoIGJ1cyBpbiB0aGUgc3lzdGVtICovCi0JZm9yIChsb29wID0gMDsgbG9vcCA8IDI1NjsgbG9vcCsrKSB7Ci0JCXBjaWVocF9zbG90X2xpc3RbbG9vcF0gPSBOVUxMOwotCX0KLQogCXJldHVybiByZXR2YWw7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2V4aXQKLWZyZWVfcGNpZWhwX3JlcyhzdHJ1Y3QgcGNpX3Jlc291cmNlICpyZXMpCi17Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqdHJlczsKLQotCXdoaWxlIChyZXMpIHsKLQkJdHJlcyA9IHJlczsKLQkJcmVzID0gcmVzLT5uZXh0OwotCQlrZnJlZSh0cmVzKTsKLQl9Ci19Ci0KIHN0YXRpYyB2b2lkIF9fZXhpdCB1bmxvYWRfcGNpZWhwZCh2b2lkKQogewotCXN0cnVjdCBwY2lfZnVuYyAqbmV4dDsKLQlzdHJ1Y3QgcGNpX2Z1bmMgKlRlbXBTbG90OwotCWludCBsb29wOwogCXN0cnVjdCBjb250cm9sbGVyICpjdHJsOwogCXN0cnVjdCBjb250cm9sbGVyICp0Y3RybDsKIApAQCAtNTQ2LDExICs0ODcsNiBAQAogCXdoaWxlIChjdHJsKSB7CiAJCWNsZWFudXBfc2xvdHMoY3RybCk7CiAKLQkJZnJlZV9wY2llaHBfcmVzKGN0cmwtPmlvX2hlYWQpOwotCQlmcmVlX3BjaWVocF9yZXMoY3RybC0+bWVtX2hlYWQpOwotCQlmcmVlX3BjaWVocF9yZXMoY3RybC0+cF9tZW1faGVhZCk7Ci0JCWZyZWVfcGNpZWhwX3JlcyhjdHJsLT5idXNfaGVhZCk7Ci0KIAkJa2ZyZWUgKGN0cmwtPnBjaV9idXMpOwogCiAJCWN0cmwtPmhwY19vcHMtPnJlbGVhc2VfY3RscihjdHJsKTsKQEAgLTU2MSwyMCArNDk3LDYgQEAKIAkJa2ZyZWUodGN0cmwpOwogCX0KIAotCWZvciAobG9vcCA9IDA7IGxvb3AgPCAyNTY7IGxvb3ArKykgewotCQluZXh0ID0gcGNpZWhwX3Nsb3RfbGlzdFtsb29wXTsKLQkJd2hpbGUgKG5leHQgIT0gTlVMTCkgewotCQkJZnJlZV9wY2llaHBfcmVzKG5leHQtPmlvX2hlYWQpOwotCQkJZnJlZV9wY2llaHBfcmVzKG5leHQtPm1lbV9oZWFkKTsKLQkJCWZyZWVfcGNpZWhwX3JlcyhuZXh0LT5wX21lbV9oZWFkKTsKLQkJCWZyZWVfcGNpZWhwX3JlcyhuZXh0LT5idXNfaGVhZCk7Ci0KLQkJCVRlbXBTbG90ID0gbmV4dDsKLQkJCW5leHQgPSBuZXh0LT5uZXh0OwotCQkJa2ZyZWUoVGVtcFNsb3QpOwotCQl9Ci0JfQotCiAJLyogU3RvcCB0aGUgbm90aWZpY2F0aW9uIG1lY2hhbmlzbSAqLwogCXBjaWVocF9ldmVudF9zdG9wX3RocmVhZCgpOwogCkBAIC02MzksMjEgKzU2MSwxNiBAQAogCWlmIChyZXR2YWwpCiAJCWdvdG8gZXJyb3JfaHBjX2luaXQ7CiAKLQlyZXR2YWwgPSBwY2llaHBybV9pbml0KFBDSSk7Ci0JaWYgKCFyZXR2YWwpIHsKLSAJCXJldHZhbCA9IHBjaWVfcG9ydF9zZXJ2aWNlX3JlZ2lzdGVyKCZocGRyaXZlcl9wb3J0ZHJ2KTsKLSAJCWRiZygicGNpZV9wb3J0X3NlcnZpY2VfcmVnaXN0ZXIgPSAlZFxuIiwgcmV0dmFsKTsKLSAgCQlpbmZvKERSSVZFUl9ERVNDICIgdmVyc2lvbjogIiBEUklWRVJfVkVSU0lPTiAiXG4iKTsKLSAJCWlmIChyZXR2YWwpCi0gCQkgICBkYmcoIiVzOiBGYWlsdXJlIHRvIHJlZ2lzdGVyIHNlcnZpY2VcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JfQorCXJldHZhbCA9IHBjaWVfcG9ydF9zZXJ2aWNlX3JlZ2lzdGVyKCZocGRyaXZlcl9wb3J0ZHJ2KTsKKyAJZGJnKCJwY2llX3BvcnRfc2VydmljZV9yZWdpc3RlciA9ICVkXG4iLCByZXR2YWwpOworICAJaW5mbyhEUklWRVJfREVTQyAiIHZlcnNpb246ICIgRFJJVkVSX1ZFUlNJT04gIlxuIik7CisgCWlmIChyZXR2YWwpCisJCWRiZygiJXM6IEZhaWx1cmUgdG8gcmVnaXN0ZXIgc2VydmljZVxuIiwgX19GVU5DVElPTl9fKTsKIAogZXJyb3JfaHBjX2luaXQ6CiAJaWYgKHJldHZhbCkgewotCQlwY2llaHBybV9jbGVhbnVwKCk7CiAJCXBjaWVocF9ldmVudF9zdG9wX3RocmVhZCgpOwotCX0gZWxzZQotCQlwY2llaHBybV9wcmludF9waXJ0KCk7CisJfTsKIAogCXJldHVybiByZXR2YWw7CiB9CkBAIC02NjMsOSArNTgwLDYgQEAKIAlkYmcoInVubG9hZF9wY2llaHBkKClcbiIpOwogCXVubG9hZF9wY2llaHBkKCk7CiAKLQlwY2llaHBybV9jbGVhbnVwKCk7Ci0KLQlkYmcoInBjaWVfcG9ydF9zZXJ2aWNlX3VucmVnaXN0ZXJcbiIpOwogCXBjaWVfcG9ydF9zZXJ2aWNlX3VucmVnaXN0ZXIoJmhwZHJpdmVyX3BvcnRkcnYpOwogCiAJaW5mbyhEUklWRVJfREVTQyAiIHZlcnNpb246ICIgRFJJVkVSX1ZFUlNJT04gIiB1bmxvYWRlZFxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9jdHJsLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9jdHJsLmMKaW5kZXggODk4ZjZkYS4uNWU1ODJlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfY3RybC5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2N0cmwuYwpAQCAtMjcsMjUgKzI3LDE0IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgIi4uL3BjaS5oIgogI2luY2x1ZGUgInBjaWVocC5oIgotI2luY2x1ZGUgInBjaWVocHJtLmgiCiAKLXN0YXRpYyB1MzIgY29uZmlndXJlX25ld19kZXZpY2Uoc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwsIHN0cnVjdCBwY2lfZnVuYyAqZnVuYywKLQl1OCBiZWhpbmRfYnJpZGdlLCBzdHJ1Y3QgcmVzb3VyY2VfbGlzdHMgKnJlc291cmNlcywgdTggYnJpZGdlX2J1cywgdTggYnJpZGdlX2Rldik7Ci1zdGF0aWMgaW50IGNvbmZpZ3VyZV9uZXdfZnVuY3Rpb24oIHN0cnVjdCBjb250cm9sbGVyICpjdHJsLCBzdHJ1Y3QgcGNpX2Z1bmMgKmZ1bmMsCi0JdTggYmVoaW5kX2JyaWRnZSwgc3RydWN0IHJlc291cmNlX2xpc3RzICpyZXNvdXJjZXMsIHU4IGJyaWRnZV9idXMsIHU4IGJyaWRnZV9kZXYpOwogc3RhdGljIHZvaWQgaW50ZXJydXB0X2V2ZW50X2hhbmRsZXIoc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwpOwogCiBzdGF0aWMgc3RydWN0IHNlbWFwaG9yZSBldmVudF9zZW1hcGhvcmU7CS8qIG11dGV4IGZvciBwcm9jZXNzIGxvb3AgKHVwIGlmIHNvbWV0aGluZyB0byBwcm9jZXNzKSAqLwpAQCAtNjAsMjIgKzQ5LDE4IEBACiAJc3RydWN0IHNsb3QgKnBfc2xvdDsKIAl1OCByYyA9IDA7CiAJdTggZ2V0c3RhdHVzOwotCXN0cnVjdCBwY2lfZnVuYyAqZnVuYzsKIAlzdHJ1Y3QgZXZlbnRfaW5mbyAqdGFza0luZm87CiAKIAkvKiBBdHRlbnRpb24gQnV0dG9uIENoYW5nZSAqLwogCWRiZygicGNpZWhwOiAgQXR0ZW50aW9uIGJ1dHRvbiBpbnRlcnJ1cHQgcmVjZWl2ZWQuXG4iKTsKIAkKLQlmdW5jID0gcGNpZWhwX3Nsb3RfZmluZChjdHJsLT5zbG90X2J1cywgKGhwX3Nsb3QgKyBjdHJsLT5zbG90X2RldmljZV9vZmZzZXQpLCAwKTsKLQogCS8qIFRoaXMgaXMgdGhlIHN0cnVjdHVyZSB0aGF0IHRlbGxzIHRoZSB3b3JrZXIgdGhyZWFkIHdoYXQgdG8gZG8gKi8KIAl0YXNrSW5mbyA9ICYoY3RybC0+ZXZlbnRfcXVldWVbY3RybC0+bmV4dF9ldmVudF0pOwogCXBfc2xvdCA9IHBjaWVocF9maW5kX3Nsb3QoY3RybCwgaHBfc2xvdCArIGN0cmwtPnNsb3RfZGV2aWNlX29mZnNldCk7CiAKLQlwX3Nsb3QtPmhwY19vcHMtPmdldF9hZGFwdGVyX3N0YXR1cyhwX3Nsb3QsICYoZnVuYy0+cHJlc2VuY2Vfc2F2ZSkpOwogCXBfc2xvdC0+aHBjX29wcy0+Z2V0X2xhdGNoX3N0YXR1cyhwX3Nsb3QsICZnZXRzdGF0dXMpOwogCQotCWN0cmwtPm5leHRfZXZlbnQgPSAoY3RybC0+bmV4dF9ldmVudCArIDEpICUgMTA7CisJY3RybC0+bmV4dF9ldmVudCA9IChjdHJsLT5uZXh0X2V2ZW50ICsgMSkgJSBNQVhfRVZFTlRTOwogCXRhc2tJbmZvLT5ocF9zbG90ID0gaHBfc2xvdDsKIAogCXJjKys7CkBAIC0xMTcsMjQgKzEwMiwyMCBAQAogCXN0cnVjdCBzbG90ICpwX3Nsb3Q7CiAJdTggcmMgPSAwOwogCXU4IGdldHN0YXR1czsKLQlzdHJ1Y3QgcGNpX2Z1bmMgKmZ1bmM7CiAJc3RydWN0IGV2ZW50X2luZm8gKnRhc2tJbmZvOwogCiAJLyogU3dpdGNoIENoYW5nZSAqLwogCWRiZygicGNpZWhwOiAgU3dpdGNoIGludGVycnVwdCByZWNlaXZlZC5cbiIpOwogCi0JZnVuYyA9IHBjaWVocF9zbG90X2ZpbmQoY3RybC0+c2xvdF9idXMsIChocF9zbG90ICsgY3RybC0+c2xvdF9kZXZpY2Vfb2Zmc2V0KSwgMCk7Ci0KIAkvKiBUaGlzIGlzIHRoZSBzdHJ1Y3R1cmUgdGhhdCB0ZWxscyB0aGUgd29ya2VyIHRocmVhZAogCSAqIHdoYXQgdG8gZG8KIAkgKi8KIAl0YXNrSW5mbyA9ICYoY3RybC0+ZXZlbnRfcXVldWVbY3RybC0+bmV4dF9ldmVudF0pOwotCWN0cmwtPm5leHRfZXZlbnQgPSAoY3RybC0+bmV4dF9ldmVudCArIDEpICUgMTA7CisJY3RybC0+bmV4dF9ldmVudCA9IChjdHJsLT5uZXh0X2V2ZW50ICsgMSkgJSBNQVhfRVZFTlRTOwogCXRhc2tJbmZvLT5ocF9zbG90ID0gaHBfc2xvdDsKIAogCXJjKys7CiAJcF9zbG90ID0gcGNpZWhwX2ZpbmRfc2xvdChjdHJsLCBocF9zbG90ICsgY3RybC0+c2xvdF9kZXZpY2Vfb2Zmc2V0KTsKLQlwX3Nsb3QtPmhwY19vcHMtPmdldF9hZGFwdGVyX3N0YXR1cyhwX3Nsb3QsICYoZnVuYy0+cHJlc2VuY2Vfc2F2ZSkpOwogCXBfc2xvdC0+aHBjX29wcy0+Z2V0X2xhdGNoX3N0YXR1cyhwX3Nsb3QsICZnZXRzdGF0dXMpOwogCiAJaWYgKGdldHN0YXR1cykgewpAQCAtMTQyLDE0ICsxMjMsMTIgQEAKIAkJICogU3dpdGNoIG9wZW5lZAogCQkgKi8KIAkJaW5mbygiTGF0Y2ggb3BlbiBvbiBTbG90KCVkKVxuIiwgY3RybC0+Zmlyc3Rfc2xvdCArIGhwX3Nsb3QpOwotCQlmdW5jLT5zd2l0Y2hfc2F2ZSA9IDA7CiAJCXRhc2tJbmZvLT5ldmVudF90eXBlID0gSU5UX1NXSVRDSF9PUEVOOwogCX0gZWxzZSB7CiAJCS8qCiAJCSAqICBTd2l0Y2ggY2xvc2VkCiAJCSAqLwogCQlpbmZvKCJMYXRjaCBjbG9zZSBvbiBTbG90KCVkKVxuIiwgY3RybC0+Zmlyc3Rfc2xvdCArIGhwX3Nsb3QpOwotCQlmdW5jLT5zd2l0Y2hfc2F2ZSA9IDB4MTA7CiAJCXRhc2tJbmZvLT5ldmVudF90eXBlID0gSU5UX1NXSVRDSF9DTE9TRTsKIAl9CiAKQEAgLTE2MywyMCArMTQyLDE3IEBACiB7CiAJc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwgPSAoc3RydWN0IGNvbnRyb2xsZXIgKikgaW5zdF9pZDsKIAlzdHJ1Y3Qgc2xvdCAqcF9zbG90OwotCXU4IHJjID0gMDsKLQlzdHJ1Y3QgcGNpX2Z1bmMgKmZ1bmM7CisJdTggcHJlc2VuY2Vfc2F2ZSwgcmMgPSAwOwogCXN0cnVjdCBldmVudF9pbmZvICp0YXNrSW5mbzsKIAogCS8qIFByZXNlbmNlIENoYW5nZSAqLwogCWRiZygicGNpZWhwOiAgUHJlc2VuY2UvTm90aWZ5IGlucHV0IGNoYW5nZS5cbiIpOwogCi0JZnVuYyA9IHBjaWVocF9zbG90X2ZpbmQoY3RybC0+c2xvdF9idXMsIChocF9zbG90ICsgY3RybC0+c2xvdF9kZXZpY2Vfb2Zmc2V0KSwgMCk7Ci0KIAkvKiBUaGlzIGlzIHRoZSBzdHJ1Y3R1cmUgdGhhdCB0ZWxscyB0aGUgd29ya2VyIHRocmVhZAogCSAqIHdoYXQgdG8gZG8KIAkgKi8KIAl0YXNrSW5mbyA9ICYoY3RybC0+ZXZlbnRfcXVldWVbY3RybC0+bmV4dF9ldmVudF0pOwotCWN0cmwtPm5leHRfZXZlbnQgPSAoY3RybC0+bmV4dF9ldmVudCArIDEpICUgMTA7CisJY3RybC0+bmV4dF9ldmVudCA9IChjdHJsLT5uZXh0X2V2ZW50ICsgMSkgJSBNQVhfRVZFTlRTOwogCXRhc2tJbmZvLT5ocF9zbG90ID0gaHBfc2xvdDsKIAogCXJjKys7CkBAIC0xODUsOCArMTYxLDggQEAKIAkvKiBTd2l0Y2ggaXMgb3BlbiwgYXNzdW1lIGEgcHJlc2VuY2UgY2hhbmdlCiAJICogU2F2ZSB0aGUgcHJlc2VuY2Ugc3RhdGUKIAkgKi8KLQlwX3Nsb3QtPmhwY19vcHMtPmdldF9hZGFwdGVyX3N0YXR1cyhwX3Nsb3QsICYoZnVuYy0+cHJlc2VuY2Vfc2F2ZSkpOwotCWlmIChmdW5jLT5wcmVzZW5jZV9zYXZlKSB7CisJcF9zbG90LT5ocGNfb3BzLT5nZXRfYWRhcHRlcl9zdGF0dXMocF9zbG90LCAmcHJlc2VuY2Vfc2F2ZSk7CisJaWYgKHByZXNlbmNlX3NhdmUpIHsKIAkJLyoKIAkJICogQ2FyZCBQcmVzZW50CiAJCSAqLwpAQCAtMjExLDE5ICsxODcsMTYgQEAKIAlzdHJ1Y3QgY29udHJvbGxlciAqY3RybCA9IChzdHJ1Y3QgY29udHJvbGxlciAqKSBpbnN0X2lkOwogCXN0cnVjdCBzbG90ICpwX3Nsb3Q7CiAJdTggcmMgPSAwOwotCXN0cnVjdCBwY2lfZnVuYyAqZnVuYzsKIAlzdHJ1Y3QgZXZlbnRfaW5mbyAqdGFza0luZm87CiAKIAkvKiBwb3dlciBmYXVsdCAqLwogCWRiZygicGNpZWhwOiAgUG93ZXIgZmF1bHQgaW50ZXJydXB0IHJlY2VpdmVkLlxuIik7CiAKLQlmdW5jID0gcGNpZWhwX3Nsb3RfZmluZChjdHJsLT5zbG90X2J1cywgKGhwX3Nsb3QgKyBjdHJsLT5zbG90X2RldmljZV9vZmZzZXQpLCAwKTsKLQogCS8qIHRoaXMgaXMgdGhlIHN0cnVjdHVyZSB0aGF0IHRlbGxzIHRoZSB3b3JrZXIgdGhyZWFkCiAJICogd2hhdCB0byBkbwogCSAqLwogCXRhc2tJbmZvID0gJihjdHJsLT5ldmVudF9xdWV1ZVtjdHJsLT5uZXh0X2V2ZW50XSk7Ci0JY3RybC0+bmV4dF9ldmVudCA9IChjdHJsLT5uZXh0X2V2ZW50ICsgMSkgJSAxMDsKKwljdHJsLT5uZXh0X2V2ZW50ID0gKGN0cmwtPm5leHRfZXZlbnQgKyAxKSAlIE1BWF9FVkVOVFM7CiAJdGFza0luZm8tPmhwX3Nsb3QgPSBocF9zbG90OwogCiAJcmMrKzsKQEAgLTIzNCw3ICsyMDcsNyBAQAogCQkgKiBwb3dlciBmYXVsdCBDbGVhcmVkCiAJCSAqLwogCQlpbmZvKCJQb3dlciBmYXVsdCBjbGVhcmVkIG9uIFNsb3QoJWQpXG4iLCBjdHJsLT5maXJzdF9zbG90ICsgaHBfc2xvdCk7Ci0JCWZ1bmMtPnN0YXR1cyA9IDB4MDA7CisJCXBfc2xvdC0+c3RhdHVzID0gMHgwMDsKIAkJdGFza0luZm8tPmV2ZW50X3R5cGUgPSBJTlRfUE9XRVJfRkFVTFRfQ0xFQVI7CiAJfSBlbHNlIHsKIAkJLyoKQEAgLTI0Myw3ICsyMTYsNyBAQAogCQlpbmZvKCJQb3dlciBmYXVsdCBvbiBTbG90KCVkKVxuIiwgY3RybC0+Zmlyc3Rfc2xvdCArIGhwX3Nsb3QpOwogCQl0YXNrSW5mby0+ZXZlbnRfdHlwZSA9IElOVF9QT1dFUl9GQVVMVDsKIAkJLyogc2V0IHBvd2VyIGZhdWx0IHN0YXR1cyBmb3IgdGhpcyBib2FyZCAqLwotCQlmdW5jLT5zdGF0dXMgPSAweEZGOworCQlwX3Nsb3QtPnN0YXR1cyA9IDB4RkY7CiAJCWluZm8oInBvd2VyIGZhdWx0IGJpdCAleCBzZXRcbiIsIGhwX3Nsb3QpOwogCX0KIAlpZiAocmMpCkBAIC0yNTIsODEwICsyMjUsNiBAQAogCXJldHVybiByYzsKIH0KIAotCi0vKioKLSAqIHNvcnRfYnlfc2l6ZTogc29ydCBub2RlcyBieSB0aGVpciBsZW5ndGgsIHNtYWxsZXN0IGZpcnN0LgotICoKLSAqIEBoZWFkOiBsaXN0IHRvIHNvcnQKLSAqLwotc3RhdGljIGludCBzb3J0X2J5X3NpemUoc3RydWN0IHBjaV9yZXNvdXJjZSAqKmhlYWQpCi17Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqY3VycmVudF9yZXM7Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqbmV4dF9yZXM7Ci0JaW50IG91dF9vZl9vcmRlciA9IDE7Ci0KLQlpZiAoISgqaGVhZCkpCi0JCXJldHVybiAxOwotCi0JaWYgKCEoKCpoZWFkKS0+bmV4dCkpCi0JCXJldHVybiAwOwotCi0Jd2hpbGUgKG91dF9vZl9vcmRlcikgewotCQlvdXRfb2Zfb3JkZXIgPSAwOwotCi0JCS8qIFNwZWNpYWwgY2FzZSBmb3Igc3dhcHBpbmcgbGlzdCBoZWFkICovCi0JCWlmICgoKCpoZWFkKS0+bmV4dCkgJiYKLQkJICAgICgoKmhlYWQpLT5sZW5ndGggPiAoKmhlYWQpLT5uZXh0LT5sZW5ndGgpKSB7Ci0JCQlvdXRfb2Zfb3JkZXIrKzsKLQkJCWN1cnJlbnRfcmVzID0gKmhlYWQ7Ci0JCQkqaGVhZCA9ICgqaGVhZCktPm5leHQ7Ci0JCQljdXJyZW50X3Jlcy0+bmV4dCA9ICgqaGVhZCktPm5leHQ7Ci0JCQkoKmhlYWQpLT5uZXh0ID0gY3VycmVudF9yZXM7Ci0JCX0KLQotCQljdXJyZW50X3JlcyA9ICpoZWFkOwotCi0JCXdoaWxlIChjdXJyZW50X3Jlcy0+bmV4dCAmJiBjdXJyZW50X3Jlcy0+bmV4dC0+bmV4dCkgewotCQkJaWYgKGN1cnJlbnRfcmVzLT5uZXh0LT5sZW5ndGggPiBjdXJyZW50X3Jlcy0+bmV4dC0+bmV4dC0+bGVuZ3RoKSB7Ci0JCQkJb3V0X29mX29yZGVyKys7Ci0JCQkJbmV4dF9yZXMgPSBjdXJyZW50X3Jlcy0+bmV4dDsKLQkJCQljdXJyZW50X3Jlcy0+bmV4dCA9IGN1cnJlbnRfcmVzLT5uZXh0LT5uZXh0OwotCQkJCWN1cnJlbnRfcmVzID0gY3VycmVudF9yZXMtPm5leHQ7Ci0JCQkJbmV4dF9yZXMtPm5leHQgPSBjdXJyZW50X3Jlcy0+bmV4dDsKLQkJCQljdXJyZW50X3Jlcy0+bmV4dCA9IG5leHRfcmVzOwotCQkJfSBlbHNlCi0JCQkJY3VycmVudF9yZXMgPSBjdXJyZW50X3Jlcy0+bmV4dDsKLQkJfQotCX0gIC8qIEVuZCBvZiBvdXRfb2Zfb3JkZXIgbG9vcCAqLwotCi0JcmV0dXJuIDA7Ci19Ci0KLQotLyoKLSAqIHNvcnRfYnlfbWF4X3NpemUKLSAqCi0gKiBTb3J0cyBub2RlcyBvbiB0aGUgbGlzdCBieSB0aGVpciBsZW5ndGguCi0gKiBMYXJnZXN0IGZpcnN0LgotICoKLSAqLwotc3RhdGljIGludCBzb3J0X2J5X21heF9zaXplKHN0cnVjdCBwY2lfcmVzb3VyY2UgKipoZWFkKQotewotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKmN1cnJlbnRfcmVzOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKm5leHRfcmVzOwotCWludCBvdXRfb2Zfb3JkZXIgPSAxOwotCi0JaWYgKCEoKmhlYWQpKQotCQlyZXR1cm4gMTsKLQotCWlmICghKCgqaGVhZCktPm5leHQpKQotCQlyZXR1cm4gMDsKLQotCXdoaWxlIChvdXRfb2Zfb3JkZXIpIHsKLQkJb3V0X29mX29yZGVyID0gMDsKLQotCQkvKiBTcGVjaWFsIGNhc2UgZm9yIHN3YXBwaW5nIGxpc3QgaGVhZCAqLwotCQlpZiAoKCgqaGVhZCktPm5leHQpICYmCi0JCSAgICAoKCpoZWFkKS0+bGVuZ3RoIDwgKCpoZWFkKS0+bmV4dC0+bGVuZ3RoKSkgewotCQkJb3V0X29mX29yZGVyKys7Ci0JCQljdXJyZW50X3JlcyA9ICpoZWFkOwotCQkJKmhlYWQgPSAoKmhlYWQpLT5uZXh0OwotCQkJY3VycmVudF9yZXMtPm5leHQgPSAoKmhlYWQpLT5uZXh0OwotCQkJKCpoZWFkKS0+bmV4dCA9IGN1cnJlbnRfcmVzOwotCQl9Ci0KLQkJY3VycmVudF9yZXMgPSAqaGVhZDsKLQotCQl3aGlsZSAoY3VycmVudF9yZXMtPm5leHQgJiYgY3VycmVudF9yZXMtPm5leHQtPm5leHQpIHsKLQkJCWlmIChjdXJyZW50X3Jlcy0+bmV4dC0+bGVuZ3RoIDwgY3VycmVudF9yZXMtPm5leHQtPm5leHQtPmxlbmd0aCkgewotCQkJCW91dF9vZl9vcmRlcisrOwotCQkJCW5leHRfcmVzID0gY3VycmVudF9yZXMtPm5leHQ7Ci0JCQkJY3VycmVudF9yZXMtPm5leHQgPSBjdXJyZW50X3Jlcy0+bmV4dC0+bmV4dDsKLQkJCQljdXJyZW50X3JlcyA9IGN1cnJlbnRfcmVzLT5uZXh0OwotCQkJCW5leHRfcmVzLT5uZXh0ID0gY3VycmVudF9yZXMtPm5leHQ7Ci0JCQkJY3VycmVudF9yZXMtPm5leHQgPSBuZXh0X3JlczsKLQkJCX0gZWxzZQotCQkJCWN1cnJlbnRfcmVzID0gY3VycmVudF9yZXMtPm5leHQ7Ci0JCX0KLQl9ICAvKiBFbmQgb2Ygb3V0X29mX29yZGVyIGxvb3AgKi8KLQotCXJldHVybiAwOwotfQotCi0KLS8qKgotICogZG9fcHJlX2JyaWRnZV9yZXNvdXJjZV9zcGxpdDogcmV0dXJuIG9uZSB1bnVzZWQgcmVzb3VyY2Ugbm9kZQotICogQGhlYWQ6IGxpc3QgdG8gc2NhbgotICoKLSAqLwotc3RhdGljIHN0cnVjdCBwY2lfcmVzb3VyY2UgKgotZG9fcHJlX2JyaWRnZV9yZXNvdXJjZV9zcGxpdChzdHJ1Y3QgcGNpX3Jlc291cmNlICoqaGVhZCwKLQkJCQlzdHJ1Y3QgcGNpX3Jlc291cmNlICoqb3JpZ19oZWFkLCB1MzIgYWxpZ25tZW50KQotewotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKnByZXZub2RlID0gTlVMTDsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICpub2RlOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKnNwbGl0X25vZGU7Ci0JdTMyIHJjOwotCXUzMiB0ZW1wX2R3b3JkOwotCWRiZygiZG9fcHJlX2JyaWRnZV9yZXNvdXJjZV9zcGxpdFxuIik7Ci0KLQlpZiAoISgqaGVhZCkgfHwgISgqb3JpZ19oZWFkKSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlyYyA9IHBjaWVocF9yZXNvdXJjZV9zb3J0X2FuZF9jb21iaW5lKGhlYWQpOwotCi0JaWYgKHJjKQotCQlyZXR1cm4gTlVMTDsKLQotCWlmICgoKmhlYWQpLT5iYXNlICE9ICgqb3JpZ19oZWFkKS0+YmFzZSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlpZiAoKCpoZWFkKS0+bGVuZ3RoID09ICgqb3JpZ19oZWFkKS0+bGVuZ3RoKQotCQlyZXR1cm4gTlVMTDsKLQotCi0JLyogSWYgd2UgZ290IGhlcmUsIHRoZXJlIHRoZSBicmlkZ2UgcmVxdWlyZXMgc29tZSBvZiB0aGUgcmVzb3VyY2UsIGJ1dAotCSAqICB3ZSBtYXkgYmUgYWJsZSB0byBzcGxpdCBzb21lIG9mZiBvZiB0aGUgZnJvbnQKLQkgKi8JCi0Jbm9kZSA9ICpoZWFkOwotCi0JaWYgKG5vZGUtPmxlbmd0aCAmIChhbGlnbm1lbnQgLTEpKSB7Ci0JCS8qIHRoaXMgb25lIGlzbid0IGFuIGFsaWduZWQgbGVuZ3RoLCBzbyB3ZSdsbCBtYWtlIGEgbmV3IGVudHJ5Ci0JCSAqIGFuZCBzcGxpdCBpdCB1cC4KLQkJICovCi0JCXNwbGl0X25vZGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcGNpX3Jlc291cmNlKSwgR0ZQX0tFUk5FTCk7Ci0KLQkJaWYgKCFzcGxpdF9ub2RlKQotCQkJcmV0dXJuIE5VTEw7Ci0KLQkJdGVtcF9kd29yZCA9IChub2RlLT5sZW5ndGggfCAoYWxpZ25tZW50LTEpKSArIDEgLSBhbGlnbm1lbnQ7Ci0KLQkJc3BsaXRfbm9kZS0+YmFzZSA9IG5vZGUtPmJhc2U7Ci0JCXNwbGl0X25vZGUtPmxlbmd0aCA9IHRlbXBfZHdvcmQ7Ci0KLQkJbm9kZS0+bGVuZ3RoIC09IHRlbXBfZHdvcmQ7Ci0JCW5vZGUtPmJhc2UgKz0gc3BsaXRfbm9kZS0+bGVuZ3RoOwotCi0JCS8qIFB1dCBpdCBpbiB0aGUgbGlzdCAqLwotCQkqaGVhZCA9IHNwbGl0X25vZGU7Ci0JCXNwbGl0X25vZGUtPm5leHQgPSBub2RlOwotCX0KLQotCWlmIChub2RlLT5sZW5ndGggPCBhbGlnbm1lbnQpCi0JCXJldHVybiBOVUxMOwotCi0JLyogTm93IHVubGluayBpdCAqLwotCWlmICgqaGVhZCA9PSBub2RlKSB7Ci0JCSpoZWFkID0gbm9kZS0+bmV4dDsKLQl9IGVsc2UgewotCQlwcmV2bm9kZSA9ICpoZWFkOwotCQl3aGlsZSAocHJldm5vZGUtPm5leHQgIT0gbm9kZSkKLQkJCXByZXZub2RlID0gcHJldm5vZGUtPm5leHQ7Ci0KLQkJcHJldm5vZGUtPm5leHQgPSBub2RlLT5uZXh0OwotCX0KLQlub2RlLT5uZXh0ID0gTlVMTDsKLQotCXJldHVybiBub2RlOwotfQotCi0KLS8qKgotICogZG9fYnJpZGdlX3Jlc291cmNlX3NwbGl0OiByZXR1cm4gb25lIHVudXNlZCByZXNvdXJjZSBub2RlCi0gKiBAaGVhZDogbGlzdCB0byBzY2FuCi0gKgotICovCi1zdGF0aWMgc3RydWN0IHBjaV9yZXNvdXJjZSAqCi1kb19icmlkZ2VfcmVzb3VyY2Vfc3BsaXQoc3RydWN0IHBjaV9yZXNvdXJjZSAqKmhlYWQsIHUzMiBhbGlnbm1lbnQpCi17Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqcHJldm5vZGUgPSBOVUxMOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKm5vZGU7Ci0JdTMyIHJjOwotCXUzMiB0ZW1wX2R3b3JkOwotCi0JaWYgKCEoKmhlYWQpKQotCQlyZXR1cm4gTlVMTDsKLQotCXJjID0gcGNpZWhwX3Jlc291cmNlX3NvcnRfYW5kX2NvbWJpbmUoaGVhZCk7Ci0KLQlpZiAocmMpCi0JCXJldHVybiBOVUxMOwotCi0Jbm9kZSA9ICpoZWFkOwotCi0Jd2hpbGUgKG5vZGUtPm5leHQpIHsKLQkJcHJldm5vZGUgPSBub2RlOwotCQlub2RlID0gbm9kZS0+bmV4dDsKLQkJa2ZyZWUocHJldm5vZGUpOwotCX0KLQotCWlmIChub2RlLT5sZW5ndGggPCBhbGlnbm1lbnQpIHsKLQkJa2ZyZWUobm9kZSk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCWlmIChub2RlLT5iYXNlICYgKGFsaWdubWVudCAtIDEpKSB7Ci0JCS8qIFNob3J0IGNpcmN1aXQgaWYgYWRqdXN0ZWQgc2l6ZSBpcyB0b28gc21hbGwgKi8KLQkJdGVtcF9kd29yZCA9IChub2RlLT5iYXNlIHwgKGFsaWdubWVudC0xKSkgKyAxOwotCQlpZiAoKG5vZGUtPmxlbmd0aCAtICh0ZW1wX2R3b3JkIC0gbm9kZS0+YmFzZSkpIDwgYWxpZ25tZW50KSB7Ci0JCQlrZnJlZShub2RlKTsKLQkJCXJldHVybiBOVUxMOwotCQl9Ci0KLQkJbm9kZS0+bGVuZ3RoIC09ICh0ZW1wX2R3b3JkIC0gbm9kZS0+YmFzZSk7Ci0JCW5vZGUtPmJhc2UgPSB0ZW1wX2R3b3JkOwotCX0KLQotCWlmIChub2RlLT5sZW5ndGggJiAoYWxpZ25tZW50IC0gMSkpIHsKLQkJLyogVGhlcmUncyBzdHVmZiBpbiB1c2UgYWZ0ZXIgdGhpcyBub2RlICovCi0JCWtmcmVlKG5vZGUpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlyZXR1cm4gbm9kZTsKLX0KLQotCi0vKgotICogZ2V0X2lvX3Jlc291cmNlCi0gKgotICogdGhpcyBmdW5jdGlvbiBzb3J0cyB0aGUgcmVzb3VyY2UgbGlzdCBieSBzaXplIGFuZCB0aGVuCi0gKiByZXR1cm5zIHRoZSBmaXJzdCBub2RlIG9mICJzaXplIiBsZW5ndGggdGhhdCBpcyBub3QgaW4gdGhlCi0gKiBJU0EgYWxpYXNpbmcgd2luZG93LiAgSWYgaXQgZmluZHMgYSBub2RlIGxhcmdlciB0aGFuICJzaXplIgotICogaXQgd2lsbCBzcGxpdCBpdCB1cC4KLSAqCi0gKiBzaXplIG11c3QgYmUgYSBwb3dlciBvZiB0d28uCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgcGNpX3Jlc291cmNlICpnZXRfaW9fcmVzb3VyY2Uoc3RydWN0IHBjaV9yZXNvdXJjZSAqKmhlYWQsIHUzMiBzaXplKQotewotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKnByZXZub2RlOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKm5vZGU7Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqc3BsaXRfbm9kZSA9IE5VTEw7Ci0JdTMyIHRlbXBfZHdvcmQ7Ci0KLQlpZiAoISgqaGVhZCkpCi0JCXJldHVybiBOVUxMOwotCi0JaWYgKCBwY2llaHBfcmVzb3VyY2Vfc29ydF9hbmRfY29tYmluZShoZWFkKSApCi0JCXJldHVybiBOVUxMOwotCi0JaWYgKCBzb3J0X2J5X3NpemUoaGVhZCkgKQotCQlyZXR1cm4gTlVMTDsKLQotCWZvciAobm9kZSA9ICpoZWFkOyBub2RlOyBub2RlID0gbm9kZS0+bmV4dCkgewotCQlpZiAobm9kZS0+bGVuZ3RoIDwgc2l6ZSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChub2RlLT5iYXNlICYgKHNpemUgLSAxKSkgewotCQkJLyogdGhpcyBvbmUgaXNuJ3QgYmFzZSBhbGlnbmVkIHByb3Blcmx5Ci0JCQkgICBzbyB3ZSdsbCBtYWtlIGEgbmV3IGVudHJ5IGFuZCBzcGxpdCBpdCB1cCAqLwotCQkJdGVtcF9kd29yZCA9IChub2RlLT5iYXNlIHwgKHNpemUtMSkpICsgMTsKLQotCQkJLyovIFNob3J0IGNpcmN1aXQgaWYgYWRqdXN0ZWQgc2l6ZSBpcyB0b28gc21hbGwgKi8KLQkJCWlmICgobm9kZS0+bGVuZ3RoIC0gKHRlbXBfZHdvcmQgLSBub2RlLT5iYXNlKSkgPCBzaXplKQotCQkJCWNvbnRpbnVlOwotCi0JCQlzcGxpdF9ub2RlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHBjaV9yZXNvdXJjZSksCi0JCQkJCQlHRlBfS0VSTkVMKTsKLQotCQkJaWYgKCFzcGxpdF9ub2RlKQotCQkJCXJldHVybiBOVUxMOwotCi0JCQlzcGxpdF9ub2RlLT5iYXNlID0gbm9kZS0+YmFzZTsKLQkJCXNwbGl0X25vZGUtPmxlbmd0aCA9IHRlbXBfZHdvcmQgLSBub2RlLT5iYXNlOwotCQkJbm9kZS0+YmFzZSA9IHRlbXBfZHdvcmQ7Ci0JCQlub2RlLT5sZW5ndGggLT0gc3BsaXRfbm9kZS0+bGVuZ3RoOwotCi0JCQkvKiBQdXQgaXQgaW4gdGhlIGxpc3QgKi8KLQkJCXNwbGl0X25vZGUtPm5leHQgPSBub2RlLT5uZXh0OwotCQkJbm9kZS0+bmV4dCA9IHNwbGl0X25vZGU7Ci0JCX0gLyogRW5kIG9mIG5vbi1hbGlnbmVkIGJhc2UgKi8KLQotCQkvKiBEb24ndCBuZWVkIHRvIGNoZWNrIGlmIHRvbyBzbWFsbCBzaW5jZSB3ZSBhbHJlYWR5IGRpZCAqLwotCQlpZiAobm9kZS0+bGVuZ3RoID4gc2l6ZSkgewotCQkJLyogdGhpcyBvbmUgaXMgbG9uZ2VyIHRoYW4gd2UgbmVlZAotCQkJICAgc28gd2UnbGwgbWFrZSBhIG5ldyBlbnRyeSBhbmQgc3BsaXQgaXQgdXAgKi8KLQkJCXNwbGl0X25vZGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcGNpX3Jlc291cmNlKSwKLQkJCQkJCUdGUF9LRVJORUwpOwotCi0JCQlpZiAoIXNwbGl0X25vZGUpCi0JCQkJcmV0dXJuIE5VTEw7Ci0KLQkJCXNwbGl0X25vZGUtPmJhc2UgPSBub2RlLT5iYXNlICsgc2l6ZTsKLQkJCXNwbGl0X25vZGUtPmxlbmd0aCA9IG5vZGUtPmxlbmd0aCAtIHNpemU7Ci0JCQlub2RlLT5sZW5ndGggPSBzaXplOwotCi0JCQkvKiBQdXQgaXQgaW4gdGhlIGxpc3QgKi8KLQkJCXNwbGl0X25vZGUtPm5leHQgPSBub2RlLT5uZXh0OwotCQkJbm9kZS0+bmV4dCA9IHNwbGl0X25vZGU7Ci0JCX0gIC8qIEVuZCBvZiB0b28gYmlnIG9uIHRvcCBlbmQgKi8KLQotCQkvKiBGb3IgSU8gbWFrZSBzdXJlIGl0J3Mgbm90IGluIHRoZSBJU0EgYWxpYXNpbmcgc3BhY2UgKi8KLQkJaWYgKG5vZGUtPmJhc2UgJiAweDMwMEwpCi0JCQljb250aW51ZTsKLQotCQkvKiBJZiB3ZSBnb3QgaGVyZSwgdGhlbiBpdCBpcyB0aGUgcmlnaHQgc2l6ZSAKLQkJICAgTm93IHRha2UgaXQgb3V0IG9mIHRoZSBsaXN0ICovCi0JCWlmICgqaGVhZCA9PSBub2RlKSB7Ci0JCQkqaGVhZCA9IG5vZGUtPm5leHQ7Ci0JCX0gZWxzZSB7Ci0JCQlwcmV2bm9kZSA9ICpoZWFkOwotCQkJd2hpbGUgKHByZXZub2RlLT5uZXh0ICE9IG5vZGUpCi0JCQkJcHJldm5vZGUgPSBwcmV2bm9kZS0+bmV4dDsKLQotCQkJcHJldm5vZGUtPm5leHQgPSBub2RlLT5uZXh0OwotCQl9Ci0JCW5vZGUtPm5leHQgPSBOVUxMOwotCQkvKiBTdG9wIGxvb3BpbmcgKi8KLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIG5vZGU7Ci19Ci0KLQotLyoKLSAqIGdldF9tYXhfcmVzb3VyY2UKLSAqCi0gKiBHZXRzIHRoZSBsYXJnZXN0IG5vZGUgdGhhdCBpcyBhdCBsZWFzdCAic2l6ZSIgYmlnIGZyb20gdGhlCi0gKiBsaXN0IHBvaW50ZWQgdG8gYnkgaGVhZC4gIEl0IGFsaWducyB0aGUgbm9kZSBvbiB0b3AgYW5kIGJvdHRvbQotICogdG8gInNpemUiIGFsaWdubWVudCBiZWZvcmUgcmV0dXJuaW5nIGl0LgotICogSi5JLiBtb2RpZmllZCB0byBwdXQgbWF4IHNpemUgbGltaXRzIG9mOyA2NE0tPjMyTS0+MTZNLT44TS0+NE0tPjFNCi0gKiAgVGhpcyBpcyBuZWVkZWQgdG8gYXZvaWQgYWxsb2NhdGluZyBlbnRpcmUgQUNQSSBfQ1JTIHJlcyB0byBvbmUgY2hpbGQgYnJpZGdlL3Nsb3QuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgcGNpX3Jlc291cmNlICpnZXRfbWF4X3Jlc291cmNlKHN0cnVjdCBwY2lfcmVzb3VyY2UgKipoZWFkLCB1MzIgc2l6ZSkKLXsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICptYXg7Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqdGVtcDsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICpzcGxpdF9ub2RlOwotCXUzMiB0ZW1wX2R3b3JkOwotCXUzMiBtYXhfc2l6ZVtdID0geyAweDQwMDAwMDAsIDB4MjAwMDAwMCwgMHgxMDAwMDAwLCAweDA4MDAwMDAsIDB4MDQwMDAwMCwgMHgwMjAwMDAwLCAweDAxMDAwMDAsIDB4MDAgfTsKLQlpbnQgaTsKLQotCWlmICghKCpoZWFkKSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlpZiAocGNpZWhwX3Jlc291cmNlX3NvcnRfYW5kX2NvbWJpbmUoaGVhZCkpCi0JCXJldHVybiBOVUxMOwotCi0JaWYgKHNvcnRfYnlfbWF4X3NpemUoaGVhZCkpCi0JCXJldHVybiBOVUxMOwotCi0JZm9yIChtYXggPSAqaGVhZDttYXg7IG1heCA9IG1heC0+bmV4dCkgewotCi0JCS8qIElmIG5vdCBiaWcgZW5vdWdoIHdlIGNvdWxkIHByb2JhYmx5IGp1c3QgYmFpbCwgCi0JCSAgIGluc3RlYWQgd2UnbGwgY29udGludWUgdG8gdGhlIG5leHQuICovCi0JCWlmIChtYXgtPmxlbmd0aCA8IHNpemUpCi0JCQljb250aW51ZTsKLQotCQlpZiAobWF4LT5iYXNlICYgKHNpemUgLSAxKSkgewotCQkJLyogdGhpcyBvbmUgaXNuJ3QgYmFzZSBhbGlnbmVkIHByb3Blcmx5Ci0JCQkgICBzbyB3ZSdsbCBtYWtlIGEgbmV3IGVudHJ5IGFuZCBzcGxpdCBpdCB1cCAqLwotCQkJdGVtcF9kd29yZCA9IChtYXgtPmJhc2UgfCAoc2l6ZS0xKSkgKyAxOwotCi0JCQkvKiBTaG9ydCBjaXJjdWl0IGlmIGFkanVzdGVkIHNpemUgaXMgdG9vIHNtYWxsICovCi0JCQlpZiAoKG1heC0+bGVuZ3RoIC0gKHRlbXBfZHdvcmQgLSBtYXgtPmJhc2UpKSA8IHNpemUpCi0JCQkJY29udGludWU7Ci0KLQkJCXNwbGl0X25vZGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcGNpX3Jlc291cmNlKSwKLQkJCQkJCUdGUF9LRVJORUwpOwotCi0JCQlpZiAoIXNwbGl0X25vZGUpCi0JCQkJcmV0dXJuIE5VTEw7Ci0KLQkJCXNwbGl0X25vZGUtPmJhc2UgPSBtYXgtPmJhc2U7Ci0JCQlzcGxpdF9ub2RlLT5sZW5ndGggPSB0ZW1wX2R3b3JkIC0gbWF4LT5iYXNlOwotCQkJbWF4LT5iYXNlID0gdGVtcF9kd29yZDsKLQkJCW1heC0+bGVuZ3RoIC09IHNwbGl0X25vZGUtPmxlbmd0aDsKLQotCQkJLyogUHV0IGl0IG5leHQgaW4gdGhlIGxpc3QgKi8KLQkJCXNwbGl0X25vZGUtPm5leHQgPSBtYXgtPm5leHQ7Ci0JCQltYXgtPm5leHQgPSBzcGxpdF9ub2RlOwotCQl9Ci0KLQkJaWYgKChtYXgtPmJhc2UgKyBtYXgtPmxlbmd0aCkgJiAoc2l6ZSAtIDEpKSB7Ci0JCQkvKiB0aGlzIG9uZSBpc24ndCBlbmQgYWxpZ25lZCBwcm9wZXJseSBhdCB0aGUgdG9wCi0JCQkgICBzbyB3ZSdsbCBtYWtlIGEgbmV3IGVudHJ5IGFuZCBzcGxpdCBpdCB1cCAqLwotCQkJc3BsaXRfbm9kZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2lfcmVzb3VyY2UpLAotCQkJCQkJR0ZQX0tFUk5FTCk7Ci0KLQkJCWlmICghc3BsaXRfbm9kZSkKLQkJCQlyZXR1cm4gTlVMTDsKLQkJCXRlbXBfZHdvcmQgPSAoKG1heC0+YmFzZSArIG1heC0+bGVuZ3RoKSAmIH4oc2l6ZSAtIDEpKTsKLQkJCXNwbGl0X25vZGUtPmJhc2UgPSB0ZW1wX2R3b3JkOwotCQkJc3BsaXRfbm9kZS0+bGVuZ3RoID0gbWF4LT5sZW5ndGggKyBtYXgtPmJhc2UKLQkJCQkJICAgICAtIHNwbGl0X25vZGUtPmJhc2U7Ci0JCQltYXgtPmxlbmd0aCAtPSBzcGxpdF9ub2RlLT5sZW5ndGg7Ci0KLQkJCS8qIFB1dCBpdCBpbiB0aGUgbGlzdCAqLwotCQkJc3BsaXRfbm9kZS0+bmV4dCA9IG1heC0+bmV4dDsKLQkJCW1heC0+bmV4dCA9IHNwbGl0X25vZGU7Ci0JCX0KLQotCQkvKiBNYWtlIHN1cmUgaXQgZGlkbid0IHNocmluayB0b28gbXVjaCB3aGVuIHdlIGFsaWduZWQgaXQgKi8KLQkJaWYgKG1heC0+bGVuZ3RoIDwgc2l6ZSkKLQkJCWNvbnRpbnVlOwotCi0JCWZvciAoIGkgPSAwOyBtYXhfc2l6ZVtpXSA+IHNpemU7IGkrKykgewotCQkJaWYgKG1heC0+bGVuZ3RoID4gbWF4X3NpemVbaV0pIHsKLQkJCQlzcGxpdF9ub2RlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHBjaV9yZXNvdXJjZSksCi0JCQkJCQkJR0ZQX0tFUk5FTCk7Ci0JCQkJaWYgKCFzcGxpdF9ub2RlKQotCQkJCQlicmVhazsJLyogcmV0dXJuIE5VTEw7ICovCi0JCQkJc3BsaXRfbm9kZS0+YmFzZSA9IG1heC0+YmFzZSArIG1heF9zaXplW2ldOwotCQkJCXNwbGl0X25vZGUtPmxlbmd0aCA9IG1heC0+bGVuZ3RoIC0gbWF4X3NpemVbaV07Ci0JCQkJbWF4LT5sZW5ndGggPSBtYXhfc2l6ZVtpXTsKLQkJCQkvKiBQdXQgaXQgbmV4dCBpbiB0aGUgbGlzdCAqLwotCQkJCXNwbGl0X25vZGUtPm5leHQgPSBtYXgtPm5leHQ7Ci0JCQkJbWF4LT5uZXh0ID0gc3BsaXRfbm9kZTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCi0JCS8qIE5vdyB0YWtlIGl0IG91dCBvZiB0aGUgbGlzdCAqLwotCQl0ZW1wID0gKHN0cnVjdCBwY2lfcmVzb3VyY2UqKSAqaGVhZDsKLQkJaWYgKHRlbXAgPT0gbWF4KSB7Ci0JCQkqaGVhZCA9IG1heC0+bmV4dDsKLQkJfSBlbHNlIHsKLQkJCXdoaWxlICh0ZW1wICYmIHRlbXAtPm5leHQgIT0gbWF4KSB7Ci0JCQkJdGVtcCA9IHRlbXAtPm5leHQ7Ci0JCQl9Ci0KLQkJCXRlbXAtPm5leHQgPSBtYXgtPm5leHQ7Ci0JCX0KLQotCQltYXgtPm5leHQgPSBOVUxMOwotCQlyZXR1cm4gbWF4OwotCX0KLQotCS8qIElmIHdlIGdldCBoZXJlLCB3ZSBjb3VsZG4ndCBmaW5kIG9uZSAqLwotCXJldHVybiBOVUxMOwotfQotCi0KLS8qCi0gKiBnZXRfcmVzb3VyY2UKLSAqCi0gKiB0aGlzIGZ1bmN0aW9uIHNvcnRzIHRoZSByZXNvdXJjZSBsaXN0IGJ5IHNpemUgYW5kIHRoZW4KLSAqIHJldHVybnMgdGhlIGZpcnN0IG5vZGUgb2YgInNpemUiIGxlbmd0aC4gIElmIGl0IGZpbmRzIGEgbm9kZQotICogbGFyZ2VyIHRoYW4gInNpemUiIGl0IHdpbGwgc3BsaXQgaXQgdXAuCi0gKgotICogc2l6ZSBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvLgotICovCi1zdGF0aWMgc3RydWN0IHBjaV9yZXNvdXJjZSAqZ2V0X3Jlc291cmNlKHN0cnVjdCBwY2lfcmVzb3VyY2UgKipoZWFkLCB1MzIgc2l6ZSkKLXsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICpwcmV2bm9kZTsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICpub2RlOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKnNwbGl0X25vZGU7Ci0JdTMyIHRlbXBfZHdvcmQ7Ci0KLQlpZiAoISgqaGVhZCkpCi0JCXJldHVybiBOVUxMOwotCi0JaWYgKCBwY2llaHBfcmVzb3VyY2Vfc29ydF9hbmRfY29tYmluZShoZWFkKSApCi0JCXJldHVybiBOVUxMOwotCi0JaWYgKCBzb3J0X2J5X3NpemUoaGVhZCkgKQotCQlyZXR1cm4gTlVMTDsKLQotCWZvciAobm9kZSA9ICpoZWFkOyBub2RlOyBub2RlID0gbm9kZS0+bmV4dCkgewotCQlkYmcoIiVzOiByZXFfc2l6ZSA9MHgleCBub2RlPSVwLCBiYXNlPTB4JXgsIGxlbmd0aD0weCV4XG4iLAotCQkgICAgX19GVU5DVElPTl9fLCBzaXplLCBub2RlLCBub2RlLT5iYXNlLCBub2RlLT5sZW5ndGgpOwotCQlpZiAobm9kZS0+bGVuZ3RoIDwgc2l6ZSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChub2RlLT5iYXNlICYgKHNpemUgLSAxKSkgewotCQkJZGJnKCIlczogbm90IGFsaWduZWRcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JCQkvKiB0aGlzIG9uZSBpc24ndCBiYXNlIGFsaWduZWQgcHJvcGVybHkKLQkJCSAgIHNvIHdlJ2xsIG1ha2UgYSBuZXcgZW50cnkgYW5kIHNwbGl0IGl0IHVwICovCi0JCQl0ZW1wX2R3b3JkID0gKG5vZGUtPmJhc2UgfCAoc2l6ZS0xKSkgKyAxOwotCi0JCQkvKiBTaG9ydCBjaXJjdWl0IGlmIGFkanVzdGVkIHNpemUgaXMgdG9vIHNtYWxsICovCi0JCQlpZiAoKG5vZGUtPmxlbmd0aCAtICh0ZW1wX2R3b3JkIC0gbm9kZS0+YmFzZSkpIDwgc2l6ZSkKLQkJCQljb250aW51ZTsKLQotCQkJc3BsaXRfbm9kZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2lfcmVzb3VyY2UpLAotCQkJCQkJR0ZQX0tFUk5FTCk7Ci0KLQkJCWlmICghc3BsaXRfbm9kZSkKLQkJCQlyZXR1cm4gTlVMTDsKLQotCQkJc3BsaXRfbm9kZS0+YmFzZSA9IG5vZGUtPmJhc2U7Ci0JCQlzcGxpdF9ub2RlLT5sZW5ndGggPSB0ZW1wX2R3b3JkIC0gbm9kZS0+YmFzZTsKLQkJCW5vZGUtPmJhc2UgPSB0ZW1wX2R3b3JkOwotCQkJbm9kZS0+bGVuZ3RoIC09IHNwbGl0X25vZGUtPmxlbmd0aDsKLQotCQkJLyogUHV0IGl0IGluIHRoZSBsaXN0ICovCi0JCQlzcGxpdF9ub2RlLT5uZXh0ID0gbm9kZS0+bmV4dDsKLQkJCW5vZGUtPm5leHQgPSBzcGxpdF9ub2RlOwotCQl9IC8qIEVuZCBvZiBub24tYWxpZ25lZCBiYXNlICovCi0KLQkJLyogRG9uJ3QgbmVlZCB0byBjaGVjayBpZiB0b28gc21hbGwgc2luY2Ugd2UgYWxyZWFkeSBkaWQgKi8KLQkJaWYgKG5vZGUtPmxlbmd0aCA+IHNpemUpIHsKLQkJCWRiZygiJXM6IHRvbyBiaWdcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JCQkvKiB0aGlzIG9uZSBpcyBsb25nZXIgdGhhbiB3ZSBuZWVkCi0JCQkgICBzbyB3ZSdsbCBtYWtlIGEgbmV3IGVudHJ5IGFuZCBzcGxpdCBpdCB1cCAqLwotCQkJc3BsaXRfbm9kZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2lfcmVzb3VyY2UpLAotCQkJCQkJR0ZQX0tFUk5FTCk7Ci0KLQkJCWlmICghc3BsaXRfbm9kZSkKLQkJCQlyZXR1cm4gTlVMTDsKLQotCQkJc3BsaXRfbm9kZS0+YmFzZSA9IG5vZGUtPmJhc2UgKyBzaXplOwotCQkJc3BsaXRfbm9kZS0+bGVuZ3RoID0gbm9kZS0+bGVuZ3RoIC0gc2l6ZTsKLQkJCW5vZGUtPmxlbmd0aCA9IHNpemU7Ci0KLQkJCS8qIFB1dCBpdCBpbiB0aGUgbGlzdCAqLwotCQkJc3BsaXRfbm9kZS0+bmV4dCA9IG5vZGUtPm5leHQ7Ci0JCQlub2RlLT5uZXh0ID0gc3BsaXRfbm9kZTsKLQkJfSAgLyogRW5kIG9mIHRvbyBiaWcgb24gdG9wIGVuZCAqLwotCi0JCWRiZygiJXM6IGdvdCBvbmUhISFcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JCS8qIElmIHdlIGdvdCBoZXJlLCB0aGVuIGl0IGlzIHRoZSByaWdodCBzaXplCi0JCSAgIE5vdyB0YWtlIGl0IG91dCBvZiB0aGUgbGlzdCAqLwotCQlpZiAoKmhlYWQgPT0gbm9kZSkgewotCQkJKmhlYWQgPSBub2RlLT5uZXh0OwotCQl9IGVsc2UgewotCQkJcHJldm5vZGUgPSAqaGVhZDsKLQkJCXdoaWxlIChwcmV2bm9kZS0+bmV4dCAhPSBub2RlKQotCQkJCXByZXZub2RlID0gcHJldm5vZGUtPm5leHQ7Ci0KLQkJCXByZXZub2RlLT5uZXh0ID0gbm9kZS0+bmV4dDsKLQkJfQotCQlub2RlLT5uZXh0ID0gTlVMTDsKLQkJLyogU3RvcCBsb29waW5nICovCi0JCWJyZWFrOwotCX0KLQlyZXR1cm4gbm9kZTsKLX0KLQotCi0vKgotICogcGNpZWhwX3Jlc291cmNlX3NvcnRfYW5kX2NvbWJpbmUKLSAqCi0gKiBTb3J0cyBhbGwgb2YgdGhlIG5vZGVzIGluIHRoZSBsaXN0IGluIGFzY2VuZGluZyBvcmRlciBieQotICogdGhlaXIgYmFzZSBhZGRyZXNzZXMuICBBbHNvIGRvZXMgZ2FyYmFnZSBjb2xsZWN0aW9uIGJ5Ci0gKiBjb21iaW5pbmcgYWRqYWNlbnQgbm9kZXMuCi0gKgotICogcmV0dXJucyAwIGlmIHN1Y2Nlc3MKLSAqLwotaW50IHBjaWVocF9yZXNvdXJjZV9zb3J0X2FuZF9jb21iaW5lKHN0cnVjdCBwY2lfcmVzb3VyY2UgKipoZWFkKQotewotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKm5vZGUxOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKm5vZGUyOwotCWludCBvdXRfb2Zfb3JkZXIgPSAxOwotCi0JZGJnKCIlczogaGVhZCA9ICVwLCAqaGVhZCA9ICVwXG4iLCBfX0ZVTkNUSU9OX18sIGhlYWQsICpoZWFkKTsKLQotCWlmICghKCpoZWFkKSkKLQkJcmV0dXJuIDE7Ci0KLQlkYmcoIipoZWFkLT5uZXh0ID0gJXBcbiIsKCpoZWFkKS0+bmV4dCk7Ci0KLQlpZiAoISgqaGVhZCktPm5leHQpCi0JCXJldHVybiAwOwkvKiBvbmx5IG9uZSBpdGVtIG9uIHRoZSBsaXN0LCBhbHJlYWR5IHNvcnRlZCEgKi8KLQotCWRiZygiKmhlYWQtPmJhc2UgPSAweCV4XG4iLCgqaGVhZCktPmJhc2UpOwotCWRiZygiKmhlYWQtPm5leHQtPmJhc2UgPSAweCV4XG4iLCgqaGVhZCktPm5leHQtPmJhc2UpOwotCXdoaWxlIChvdXRfb2Zfb3JkZXIpIHsKLQkJb3V0X29mX29yZGVyID0gMDsKLQotCQkvKiBTcGVjaWFsIGNhc2UgZm9yIHN3YXBwaW5nIGxpc3QgaGVhZCAqLwotCQlpZiAoKCgqaGVhZCktPm5leHQpICYmCi0JCSAgICAoKCpoZWFkKS0+YmFzZSA+ICgqaGVhZCktPm5leHQtPmJhc2UpKSB7Ci0JCQlub2RlMSA9ICpoZWFkOwotCQkJKCpoZWFkKSA9ICgqaGVhZCktPm5leHQ7Ci0JCQlub2RlMS0+bmV4dCA9ICgqaGVhZCktPm5leHQ7Ci0JCQkoKmhlYWQpLT5uZXh0ID0gbm9kZTE7Ci0JCQlvdXRfb2Zfb3JkZXIrKzsKLQkJfQotCi0JCW5vZGUxID0gKCpoZWFkKTsKLQotCQl3aGlsZSAobm9kZTEtPm5leHQgJiYgbm9kZTEtPm5leHQtPm5leHQpIHsKLQkJCWlmIChub2RlMS0+bmV4dC0+YmFzZSA+IG5vZGUxLT5uZXh0LT5uZXh0LT5iYXNlKSB7Ci0JCQkJb3V0X29mX29yZGVyKys7Ci0JCQkJbm9kZTIgPSBub2RlMS0+bmV4dDsKLQkJCQlub2RlMS0+bmV4dCA9IG5vZGUxLT5uZXh0LT5uZXh0OwotCQkJCW5vZGUxID0gbm9kZTEtPm5leHQ7Ci0JCQkJbm9kZTItPm5leHQgPSBub2RlMS0+bmV4dDsKLQkJCQlub2RlMS0+bmV4dCA9IG5vZGUyOwotCQkJfSBlbHNlCi0JCQkJbm9kZTEgPSBub2RlMS0+bmV4dDsKLQkJfQotCX0gIC8qIEVuZCBvZiBvdXRfb2Zfb3JkZXIgbG9vcCAqLwotCi0Jbm9kZTEgPSAqaGVhZDsKLQotCXdoaWxlIChub2RlMSAmJiBub2RlMS0+bmV4dCkgewotCQlpZiAoKG5vZGUxLT5iYXNlICsgbm9kZTEtPmxlbmd0aCkgPT0gbm9kZTEtPm5leHQtPmJhc2UpIHsKLQkJCS8qIENvbWJpbmUgKi8KLQkJCWRiZygiOC4uXG4iKTsKLQkJCW5vZGUxLT5sZW5ndGggKz0gbm9kZTEtPm5leHQtPmxlbmd0aDsKLQkJCW5vZGUyID0gbm9kZTEtPm5leHQ7Ci0JCQlub2RlMS0+bmV4dCA9IG5vZGUxLT5uZXh0LT5uZXh0OwotCQkJa2ZyZWUobm9kZTIpOwotCQl9IGVsc2UKLQkJCW5vZGUxID0gbm9kZTEtPm5leHQ7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLQotLyoqCi0gKiBwY2llaHBfc2xvdF9jcmVhdGUgLSBDcmVhdGVzIGEgbm9kZSBhbmQgYWRkcyBpdCB0byB0aGUgcHJvcGVyIGJ1cy4KLSAqIEBidXNudW1iZXIgLSBidXMgd2hlcmUgbmV3IG5vZGUgaXMgdG8gYmUgbG9jYXRlZAotICoKLSAqIFJldHVybnMgcG9pbnRlciB0byB0aGUgbmV3IG5vZGUgb3IgTlVMTCBpZiB1bnN1Y2Nlc3NmdWwKLSAqLwotc3RydWN0IHBjaV9mdW5jICpwY2llaHBfc2xvdF9jcmVhdGUodTggYnVzbnVtYmVyKQotewotCXN0cnVjdCBwY2lfZnVuYyAqbmV3X3Nsb3Q7Ci0Jc3RydWN0IHBjaV9mdW5jICpuZXh0OwotCWRiZygiJXM6IGJ1c251bWJlciAleFxuIiwgX19GVU5DVElPTl9fLCBidXNudW1iZXIpOwotCW5ld19zbG90ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHBjaV9mdW5jKSwgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAobmV3X3Nsb3QgPT0gTlVMTCkKLQkJcmV0dXJuIG5ld19zbG90OwotCi0JbWVtc2V0KG5ld19zbG90LCAwLCBzaXplb2Yoc3RydWN0IHBjaV9mdW5jKSk7Ci0KLQluZXdfc2xvdC0+bmV4dCA9IE5VTEw7Ci0JbmV3X3Nsb3QtPmNvbmZpZ3VyZWQgPSAxOwotCi0JaWYgKHBjaWVocF9zbG90X2xpc3RbYnVzbnVtYmVyXSA9PSBOVUxMKSB7Ci0JCXBjaWVocF9zbG90X2xpc3RbYnVzbnVtYmVyXSA9IG5ld19zbG90OwotCX0gZWxzZSB7Ci0JCW5leHQgPSBwY2llaHBfc2xvdF9saXN0W2J1c251bWJlcl07Ci0JCXdoaWxlIChuZXh0LT5uZXh0ICE9IE5VTEwpCi0JCQluZXh0ID0gbmV4dC0+bmV4dDsKLQkJbmV4dC0+bmV4dCA9IG5ld19zbG90OwotCX0KLQlyZXR1cm4gbmV3X3Nsb3Q7Ci19Ci0KLQotLyoqCi0gKiBzbG90X3JlbW92ZSAtIFJlbW92ZXMgYSBub2RlIGZyb20gdGhlIGxpbmtlZCBsaXN0IG9mIHNsb3RzLgotICogQG9sZF9zbG90OiBzbG90IHRvIHJlbW92ZQotICoKLSAqIFJldHVybnMgMCBpZiBzdWNjZXNzZnVsLCAhMCBvdGhlcndpc2UuCi0gKi8KLXN0YXRpYyBpbnQgc2xvdF9yZW1vdmUoc3RydWN0IHBjaV9mdW5jICogb2xkX3Nsb3QpCi17Ci0Jc3RydWN0IHBjaV9mdW5jICpuZXh0OwotCi0JaWYgKG9sZF9zbG90ID09IE5VTEwpCi0JCXJldHVybiAxOwotCi0JbmV4dCA9IHBjaWVocF9zbG90X2xpc3Rbb2xkX3Nsb3QtPmJ1c107Ci0KLQlpZiAobmV4dCA9PSBOVUxMKQotCQlyZXR1cm4gMTsKLQotCWlmIChuZXh0ID09IG9sZF9zbG90KSB7Ci0JCXBjaWVocF9zbG90X2xpc3Rbb2xkX3Nsb3QtPmJ1c10gPSBvbGRfc2xvdC0+bmV4dDsKLQkJcGNpZWhwX2Rlc3Ryb3lfYm9hcmRfcmVzb3VyY2VzKG9sZF9zbG90KTsKLQkJa2ZyZWUob2xkX3Nsb3QpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQl3aGlsZSAoKG5leHQtPm5leHQgIT0gb2xkX3Nsb3QpICYmIChuZXh0LT5uZXh0ICE9IE5VTEwpKSB7Ci0JCW5leHQgPSBuZXh0LT5uZXh0OwotCX0KLQotCWlmIChuZXh0LT5uZXh0ID09IG9sZF9zbG90KSB7Ci0JCW5leHQtPm5leHQgPSBvbGRfc2xvdC0+bmV4dDsKLQkJcGNpZWhwX2Rlc3Ryb3lfYm9hcmRfcmVzb3VyY2VzKG9sZF9zbG90KTsKLQkJa2ZyZWUob2xkX3Nsb3QpOwotCQlyZXR1cm4gMDsKLQl9IGVsc2UKLQkJcmV0dXJuIDI7Ci19Ci0KLQotLyoqCi0gKiBicmlkZ2Vfc2xvdF9yZW1vdmUgLSBSZW1vdmVzIGEgbm9kZSBmcm9tIHRoZSBsaW5rZWQgbGlzdCBvZiBzbG90cy4KLSAqIEBicmlkZ2U6IGJyaWRnZSB0byByZW1vdmUKLSAqCi0gKiBSZXR1cm5zIDAgaWYgc3VjY2Vzc2Z1bCwgITAgb3RoZXJ3aXNlLgotICovCi1zdGF0aWMgaW50IGJyaWRnZV9zbG90X3JlbW92ZShzdHJ1Y3QgcGNpX2Z1bmMgKmJyaWRnZSkKLXsKLQl1OCBzdWJvcmRpbmF0ZUJ1cywgc2Vjb25kYXJ5QnVzOwotCXU4IHRlbXBCdXM7Ci0Jc3RydWN0IHBjaV9mdW5jICpuZXh0OwotCi0JaWYgKGJyaWRnZSA9PSBOVUxMKQotCQlyZXR1cm4gMTsKLQotCXNlY29uZGFyeUJ1cyA9IChicmlkZ2UtPmNvbmZpZ19zcGFjZVsweDA2XSA+PiA4KSAmIDB4RkY7Ci0Jc3Vib3JkaW5hdGVCdXMgPSAoYnJpZGdlLT5jb25maWdfc3BhY2VbMHgwNl0gPj4gMTYpICYgMHhGRjsKLQotCWZvciAodGVtcEJ1cyA9IHNlY29uZGFyeUJ1czsgdGVtcEJ1cyA8PSBzdWJvcmRpbmF0ZUJ1czsgdGVtcEJ1cysrKSB7Ci0JCW5leHQgPSBwY2llaHBfc2xvdF9saXN0W3RlbXBCdXNdOwotCi0JCXdoaWxlICghc2xvdF9yZW1vdmUobmV4dCkpIHsKLQkJCW5leHQgPSBwY2llaHBfc2xvdF9saXN0W3RlbXBCdXNdOwotCQl9Ci0JfQotCi0JbmV4dCA9IHBjaWVocF9zbG90X2xpc3RbYnJpZGdlLT5idXNdOwotCi0JaWYgKG5leHQgPT0gTlVMTCkgewotCQlyZXR1cm4gMTsKLQl9Ci0KLQlpZiAobmV4dCA9PSBicmlkZ2UpIHsKLQkJcGNpZWhwX3Nsb3RfbGlzdFticmlkZ2UtPmJ1c10gPSBicmlkZ2UtPm5leHQ7Ci0JCWtmcmVlKGJyaWRnZSk7Ci0JCXJldHVybiAwOwotCX0KLQotCXdoaWxlICgobmV4dC0+bmV4dCAhPSBicmlkZ2UpICYmIChuZXh0LT5uZXh0ICE9IE5VTEwpKSB7Ci0JCW5leHQgPSBuZXh0LT5uZXh0OwotCX0KLQotCWlmIChuZXh0LT5uZXh0ID09IGJyaWRnZSkgewotCQluZXh0LT5uZXh0ID0gYnJpZGdlLT5uZXh0OwotCQlrZnJlZShicmlkZ2UpOwotCQlyZXR1cm4gMDsKLQl9IGVsc2UKLQkJcmV0dXJuIDI7Ci19Ci0KLQotLyoqCi0gKiBwY2llaHBfc2xvdF9maW5kIC0gTG9va3MgZm9yIGEgbm9kZSBieSBidXMsIGFuZCBkZXZpY2UsIG11bHRpcGxlIGZ1bmN0aW9ucyBhY2Nlc3NlZAotICogQGJ1czogYnVzIHRvIGZpbmQKLSAqIEBkZXZpY2U6IGRldmljZSB0byBmaW5kCi0gKiBAaW5kZXg6IGlzIDAgZm9yIGZpcnN0IGZ1bmN0aW9uIGZvdW5kLCAxIGZvciB0aGUgc2Vjb25kLi4uCi0gKgotICogUmV0dXJucyBwb2ludGVyIHRvIHRoZSBub2RlIGlmIHN1Y2Nlc3NmdWwsICVOVUxMIG90aGVyd2lzZS4KLSAqLwotc3RydWN0IHBjaV9mdW5jICpwY2llaHBfc2xvdF9maW5kKHU4IGJ1cywgdTggZGV2aWNlLCB1OCBpbmRleCkKLXsKLQlpbnQgZm91bmQgPSAtMTsKLQlzdHJ1Y3QgcGNpX2Z1bmMgKmZ1bmM7Ci0KLQlmdW5jID0gcGNpZWhwX3Nsb3RfbGlzdFtidXNdOwotCWRiZygiJXM6IGJ1cyAleCBkZXZpY2UgJXggaW5kZXggJXhcbiIsCi0JCV9fRlVOQ1RJT05fXywgYnVzLCBkZXZpY2UsIGluZGV4KTsKLQlpZiAoZnVuYyAhPSBOVUxMKSB7Ci0JCWRiZygiJXM6IGZ1bmMtPiBidXMgJXggZGV2aWNlICV4IGZ1bmN0aW9uICV4IHBjaV9kZXYgJXBcbiIsCi0JCQlfX0ZVTkNUSU9OX18sIGZ1bmMtPmJ1cywgZnVuYy0+ZGV2aWNlLCBmdW5jLT5mdW5jdGlvbiwKLQkJCWZ1bmMtPnBjaV9kZXYpOwotCX0gZWxzZQotCQlkYmcoIiVzOiBmdW5jID09IE5VTExcbiIsIF9fRlVOQ1RJT05fXyk7Ci0KLQlpZiAoKGZ1bmMgPT0gTlVMTCkgfHwgKChmdW5jLT5kZXZpY2UgPT0gZGV2aWNlKSAmJiAoaW5kZXggPT0gMCkpKQotCQlyZXR1cm4gZnVuYzsKLQotCWlmIChmdW5jLT5kZXZpY2UgPT0gZGV2aWNlKQotCQlmb3VuZCsrOwotCi0Jd2hpbGUgKGZ1bmMtPm5leHQgIT0gTlVMTCkgewotCQlmdW5jID0gZnVuYy0+bmV4dDsKLQotCQlkYmcoIiVzOiBJbiB3aGlsZSBsb29wLCBmdW5jLT4gYnVzICV4IGRldmljZSAleCBmdW5jdGlvbiAleCBwY2lfZGV2ICVwXG4iLAotCQkJX19GVU5DVElPTl9fLCBmdW5jLT5idXMsIGZ1bmMtPmRldmljZSwgZnVuYy0+ZnVuY3Rpb24sCi0JCQlmdW5jLT5wY2lfZGV2KTsKLQkJaWYgKGZ1bmMtPmRldmljZSA9PSBkZXZpY2UpCi0JCQlmb3VuZCsrOwotCQlkYmcoIiVzOiB3aGlsZSBsb29wLCBmb3VuZCAlZCwgaW5kZXggJWRcbiIsIF9fRlVOQ1RJT05fXywKLQkJCWZvdW5kLCBpbmRleCk7Ci0KLQkJaWYgKChmb3VuZCA9PSBpbmRleCkgfHwgKGZ1bmMtPmZ1bmN0aW9uID09IGluZGV4KSkgewotCQkJZGJnKCIlczogRm91bmQgYnVzICV4IGRldiAleCBmdW5jICV4XG4iLCBfX0ZVTkNUSU9OX18sCi0JCQkJCWZ1bmMtPmJ1cywgZnVuYy0+ZGV2aWNlLCBmdW5jLT5mdW5jdGlvbik7Ci0JCQlyZXR1cm4gZnVuYzsKLQkJfQotCX0KLQotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgaW50IGlzX2JyaWRnZShzdHJ1Y3QgcGNpX2Z1bmMgKiBmdW5jKQotewotCS8qIENoZWNrIHRoZSBoZWFkZXIgdHlwZSAqLwotCWlmICgoKGZ1bmMtPmNvbmZpZ19zcGFjZVsweDAzXSA+PiAxNikgJiAweEZGKSA9PSAweDAxKQotCQlyZXR1cm4gMTsKLQllbHNlCi0JCXJldHVybiAwOwotfQotCi0KIC8qIFRoZSBmb2xsb3dpbmcgcm91dGluZXMgY29uc3RpdHV0ZSB0aGUgYnVsayBvZiB0aGUgCiAgICBob3RwbHVnIGNvbnRyb2xsZXIgbG9naWMKICAqLwpAQCAtMTEwMCwyMCArMjY5LDE3IEBACiAgKiBDb25maWd1cmVzIGJvYXJkCiAgKgogICovCi1zdGF0aWMgdTMyIGJvYXJkX2FkZGVkKHN0cnVjdCBwY2lfZnVuYyAqIGZ1bmMsIHN0cnVjdCBjb250cm9sbGVyICogY3RybCkKK3N0YXRpYyBpbnQgYm9hcmRfYWRkZWQoc3RydWN0IHNsb3QgKnBfc2xvdCkKIHsKIAl1OCBocF9zbG90OwotCWludCBpbmRleDsKLQl1MzIgdGVtcF9yZWdpc3RlciA9IDB4RkZGRkZGRkY7Ci0JdTMyIHJjID0gMDsKLQlzdHJ1Y3QgcGNpX2Z1bmMgKm5ld19mdW5jID0gTlVMTDsKLQlzdHJ1Y3Qgc2xvdCAqcF9zbG90OwotCXN0cnVjdCByZXNvdXJjZV9saXN0cyByZXNfbGlzdHM7CisJaW50IHJjID0gMDsKKwlzdHJ1Y3QgY29udHJvbGxlciAqY3RybCA9IHBfc2xvdC0+Y3RybDsKIAotCXBfc2xvdCA9IHBjaWVocF9maW5kX3Nsb3QoY3RybCwgZnVuYy0+ZGV2aWNlKTsKLQlocF9zbG90ID0gZnVuYy0+ZGV2aWNlIC0gY3RybC0+c2xvdF9kZXZpY2Vfb2Zmc2V0OworCWhwX3Nsb3QgPSBwX3Nsb3QtPmRldmljZSAtIGN0cmwtPnNsb3RfZGV2aWNlX29mZnNldDsKIAotCWRiZygiJXM6IGZ1bmMtPmRldmljZSwgc2xvdF9vZmZzZXQsIGhwX3Nsb3QgPSAlZCwgJWQgLCVkXG4iLCBfX0ZVTkNUSU9OX18sIGZ1bmMtPmRldmljZSwgY3RybC0+c2xvdF9kZXZpY2Vfb2Zmc2V0LCBocF9zbG90KTsKKwlkYmcoIiVzOiBzbG90IGRldmljZSwgc2xvdCBvZmZzZXQsIGhwIHNsb3QgPSAlZCwgJWQgLCVkXG4iLAorCQkJX19GVU5DVElPTl9fLCBwX3Nsb3QtPmRldmljZSwKKwkJCWN0cmwtPnNsb3RfZGV2aWNlX29mZnNldCwgaHBfc2xvdCk7CiAKIAkvKiBXYWl0IGZvciBleGNsdXNpdmUgYWNjZXNzIHRvIGhhcmR3YXJlICovCiAJZG93bigmY3RybC0+Y3JpdF9zZWN0KTsKQEAgLTExNDEsOSArMzA3LDcgQEAKIAl1cCgmY3RybC0+Y3JpdF9zZWN0KTsKIAogCS8qIFdhaXQgZm9yIH4xIHNlY29uZCAqLwotCWRiZygiJXM6IGJlZm9yZSBsb25nX2RlbGF5XG4iLCBfX0ZVTkNUSU9OX18pOwogCXdhaXRfZm9yX2N0cmxfaXJxIChjdHJsKTsKLQlkYmcoIiVzOiBhZnRlcmxvbmdfZGVsYXlcbiIsIF9fRlVOQ1RJT05fXyk7CiAKIAkvKiAgQ2hlY2sgbGluayB0cmFpbmluZyBzdGF0dXMgKi8KIAlyYyA9IHBfc2xvdC0+aHBjX29wcy0+Y2hlY2tfbG5rX3N0YXR1cyhjdHJsKTsgIApAQCAtMTE1Myw5OCArMzE3LDQ3IEBACiAJCXJldHVybiByYzsKIAl9CiAKLQlkYmcoIiVzOiBmdW5jIHN0YXR1cyA9ICV4XG4iLCBfX0ZVTkNUSU9OX18sIGZ1bmMtPnN0YXR1cyk7CisJZGJnKCIlczogc2xvdCBzdGF0dXMgPSAleFxuIiwgX19GVU5DVElPTl9fLCBwX3Nsb3QtPnN0YXR1cyk7CiAKIAkvKiBDaGVjayBmb3IgYSBwb3dlciBmYXVsdCAqLwotCWlmIChmdW5jLT5zdGF0dXMgPT0gMHhGRikgeworCWlmIChwX3Nsb3QtPnN0YXR1cyA9PSAweEZGKSB7CiAJCS8qIHBvd2VyIGZhdWx0IG9jY3VycmVkLCBidXQgaXQgd2FzIGJlbmlnbiAqLwotCQl0ZW1wX3JlZ2lzdGVyID0gMHhGRkZGRkZGRjsKLQkJZGJnKCIlczogdGVtcCByZWdpc3RlciBzZXQgdG8gJXggYnkgcG93ZXIgZmF1bHRcbiIsIF9fRlVOQ1RJT05fXywgdGVtcF9yZWdpc3Rlcik7CiAJCXJjID0gUE9XRVJfRkFJTFVSRTsKLQkJZnVuYy0+c3RhdHVzID0gMDsKLQl9IGVsc2UgewotCQkvKiBHZXQgdmVuZG9yL2RldmljZSBJRCB1MzIgKi8KLQkJcmMgPSBwY2lfYnVzX3JlYWRfY29uZmlnX2R3b3JkIChjdHJsLT5wY2lfZGV2LT5zdWJvcmRpbmF0ZSwgUENJX0RFVkZOKGZ1bmMtPmRldmljZSwgZnVuYy0+ZnVuY3Rpb24pLCAKLQkJCVBDSV9WRU5ET1JfSUQsICZ0ZW1wX3JlZ2lzdGVyKTsKLQkJZGJnKCIlczogcGNpX2J1c19yZWFkX2NvbmZpZ19kd29yZCByZXR1cm5zICVkXG4iLCBfX0ZVTkNUSU9OX18sIHJjKTsKLQkJZGJnKCIlczogdGVtcF9yZWdpc3RlciBpcyAleFxuIiwgX19GVU5DVElPTl9fLCB0ZW1wX3JlZ2lzdGVyKTsKLQotCQlpZiAocmMgIT0gMCkgewotCQkJLyogU29tZXRoaW5nJ3Mgd3JvbmcgaGVyZSAqLwotCQkJdGVtcF9yZWdpc3RlciA9IDB4RkZGRkZGRkY7Ci0JCQlkYmcoIiVzOiB0ZW1wIHJlZ2lzdGVyIHNldCB0byAleCBieSBlcnJvclxuIiwgX19GVU5DVElPTl9fLCB0ZW1wX3JlZ2lzdGVyKTsKLQkJfQotCQkvKiBQcmVzZXQgcmV0dXJuIGNvZGUuICBJdCB3aWxsIGJlIGNoYW5nZWQgbGF0ZXIgaWYgdGhpbmdzIGdvIG9rYXkuICovCi0JCXJjID0gTk9fQURBUFRFUl9QUkVTRU5UOworCQlwX3Nsb3QtPnN0YXR1cyA9IDA7CisJCWdvdG8gZXJyX2V4aXQ7CiAJfQogCi0JLyogQWxsIEYncyBpcyBhbiBlbXB0eSBzbG90IG9yIGFuIGludmFsaWQgYm9hcmQgKi8KLQlpZiAodGVtcF9yZWdpc3RlciAhPSAweEZGRkZGRkZGKSB7CSAgLyogQ2hlY2sgZm9yIGEgYm9hcmQgaW4gdGhlIHNsb3QgKi8KLQkJcmVzX2xpc3RzLmlvX2hlYWQgPSBjdHJsLT5pb19oZWFkOwotCQlyZXNfbGlzdHMubWVtX2hlYWQgPSBjdHJsLT5tZW1faGVhZDsKLQkJcmVzX2xpc3RzLnBfbWVtX2hlYWQgPSBjdHJsLT5wX21lbV9oZWFkOwotCQlyZXNfbGlzdHMuYnVzX2hlYWQgPSBjdHJsLT5idXNfaGVhZDsKLQkJcmVzX2xpc3RzLmlycXMgPSBOVUxMOworCXJjID0gcGNpZWhwX2NvbmZpZ3VyZV9kZXZpY2UocF9zbG90KTsKKwlpZiAocmMpIHsKKwkJZXJyKCJDYW5ub3QgYWRkIGRldmljZSAweCV4OiV4XG4iLCBwX3Nsb3QtPmJ1cywKKwkJCQlwX3Nsb3QtPmRldmljZSk7CisJCWdvdG8gZXJyX2V4aXQ7CisJfQogCi0JCXJjID0gY29uZmlndXJlX25ld19kZXZpY2UoY3RybCwgZnVuYywgMCwgJnJlc19saXN0cywgMCwgMCk7Ci0JCWRiZygiJXM6IGJhY2sgZnJvbSBjb25maWd1cmVfbmV3X2RldmljZVxuIiwgX19GVU5DVElPTl9fKTsKKwlwX3Nsb3QtPnN0YXR1cyA9IDA7CiAKLQkJY3RybC0+aW9faGVhZCA9IHJlc19saXN0cy5pb19oZWFkOwotCQljdHJsLT5tZW1faGVhZCA9IHJlc19saXN0cy5tZW1faGVhZDsKLQkJY3RybC0+cF9tZW1faGVhZCA9IHJlc19saXN0cy5wX21lbV9oZWFkOwotCQljdHJsLT5idXNfaGVhZCA9IHJlc19saXN0cy5idXNfaGVhZDsKKwkvKgorCSAqIFNvbWUgUENJIEV4cHJlc3Mgcm9vdCBwb3J0cyByZXF1aXJlIGZpeHVwIGFmdGVyIGhvdC1wbHVnIG9wZXJhdGlvbi4KKwkgKi8KKwlpZiAocGNpZV9tY2hfcXVpcmspCisJCXBjaV9maXh1cF9kZXZpY2UocGNpX2ZpeHVwX2ZpbmFsLCBjdHJsLT5wY2lfZGV2KTsKKwlpZiAoUFdSX0xFRChjdHJsLT5jdHJsY2FwKSkgeworCQkvKiBXYWl0IGZvciBleGNsdXNpdmUgYWNjZXNzIHRvIGhhcmR3YXJlICovCisgIAkJZG93bigmY3RybC0+Y3JpdF9zZWN0KTsKIAotCQlwY2llaHBfcmVzb3VyY2Vfc29ydF9hbmRfY29tYmluZSgmKGN0cmwtPm1lbV9oZWFkKSk7Ci0JCXBjaWVocF9yZXNvdXJjZV9zb3J0X2FuZF9jb21iaW5lKCYoY3RybC0+cF9tZW1faGVhZCkpOwotCQlwY2llaHBfcmVzb3VyY2Vfc29ydF9hbmRfY29tYmluZSgmKGN0cmwtPmlvX2hlYWQpKTsKLQkJcGNpZWhwX3Jlc291cmNlX3NvcnRfYW5kX2NvbWJpbmUoJihjdHJsLT5idXNfaGVhZCkpOwotCi0JCWlmIChyYykgewotCQkJc2V0X3Nsb3Rfb2ZmKGN0cmwsIHBfc2xvdCk7Ci0JCQlyZXR1cm4gcmM7Ci0JCX0KLQkJcGNpZWhwX3NhdmVfc2xvdF9jb25maWcoY3RybCwgZnVuYyk7Ci0KLQkJZnVuYy0+c3RhdHVzID0gMDsKLQkJZnVuYy0+c3dpdGNoX3NhdmUgPSAweDEwOwotCQlmdW5jLT5pc19hX2JvYXJkID0gMHgwMTsKLQotCQkvKiBuZXh0LCB3ZSB3aWxsIGluc3RhbnRpYXRlIHRoZSBsaW51eCBwY2lfZGV2IHN0cnVjdHVyZXMgCi0JCSAqICh3aXRoIGFwcHJvcHJpYXRlIGRyaXZlciBub3RpZmljYXRpb24sIGlmIGFscmVhZHkgcHJlc2VudCkgCi0JCSAqLwotCQlpbmRleCA9IDA7Ci0JCWRvIHsKLQkJCW5ld19mdW5jID0gcGNpZWhwX3Nsb3RfZmluZChjdHJsLT5zbG90X2J1cywgZnVuYy0+ZGV2aWNlLCBpbmRleCsrKTsKLQkJCWlmIChuZXdfZnVuYyAmJiAhbmV3X2Z1bmMtPnBjaV9kZXYpIHsKLQkJCQlkYmcoIiVzOmNhbGwgcGNpX2hwX2NvbmZpZ3VyZV9kZXYsIGZ1bmMgJXhcbiIsIAotCQkJCQlfX0ZVTkNUSU9OX18sIGluZGV4KTsKLQkJCQlwY2llaHBfY29uZmlndXJlX2RldmljZShjdHJsLCBuZXdfZnVuYyk7Ci0JCQl9Ci0JCX0gd2hpbGUgKG5ld19mdW5jKTsKLQotIAkJLyogCi0gCQkgKiBTb21lIFBDSSBFeHByZXNzIHJvb3QgcG9ydHMgcmVxdWlyZSBmaXh1cCBhZnRlciBob3QtcGx1ZyBvcGVyYXRpb24uCi0gCQkgKi8KLSAJCWlmIChwY2llX21jaF9xdWlyaykKLSAJCQlwY2lfZml4dXBfZGV2aWNlKHBjaV9maXh1cF9maW5hbCwgY3RybC0+cGNpX2Rldik7Ci0gCi0gIAkJaWYgKFBXUl9MRUQoY3RybC0+Y3RybGNhcCkpIHsKLSAgCQkJLyogV2FpdCBmb3IgZXhjbHVzaXZlIGFjY2VzcyB0byBoYXJkd2FyZSAqLwotICAJCQlkb3duKCZjdHJsLT5jcml0X3NlY3QpOwotICAgCi0gIAkJCXBfc2xvdC0+aHBjX29wcy0+Z3JlZW5fbGVkX29uKHBfc2xvdCk7CisgIAkJcF9zbG90LT5ocGNfb3BzLT5ncmVlbl9sZWRfb24ocF9zbG90KTsKICAgCi0gIAkJCS8qIFdhaXQgZm9yIHRoZSBjb21tYW5kIHRvIGNvbXBsZXRlICovCi0gIAkJCXdhaXRfZm9yX2N0cmxfaXJxIChjdHJsKTsKKyAgCQkvKiBXYWl0IGZvciB0aGUgY29tbWFuZCB0byBjb21wbGV0ZSAqLworICAJCXdhaXRfZm9yX2N0cmxfaXJxIChjdHJsKTsKICAgCQotICAJCQkvKiBEb25lIHdpdGggZXhjbHVzaXZlIGhhcmR3YXJlIGFjY2VzcyAqLwotICAJCQl1cCgmY3RybC0+Y3JpdF9zZWN0KTsKLSAgCQl9Ci0JfSBlbHNlIHsKLQkJc2V0X3Nsb3Rfb2ZmKGN0cmwsIHBfc2xvdCk7Ci0JCXJldHVybiAtMTsKLQl9CisgIAkJLyogRG9uZSB3aXRoIGV4Y2x1c2l2ZSBoYXJkd2FyZSBhY2Nlc3MgKi8KKyAgCQl1cCgmY3RybC0+Y3JpdF9zZWN0KTsKKyAgCX0KIAlyZXR1cm4gMDsKKworZXJyX2V4aXQ6CisJc2V0X3Nsb3Rfb2ZmKGN0cmwsIHBfc2xvdCk7CisJcmV0dXJuIC0xOwogfQogCiAKQEAgLTEyNTIsNTUgKzM2NSwyNSBAQAogICogcmVtb3ZlX2JvYXJkIC0gVHVybnMgb2ZmIHNsb3QgYW5kIExFRCdzCiAgKgogICovCi1zdGF0aWMgdTMyIHJlbW92ZV9ib2FyZChzdHJ1Y3QgcGNpX2Z1bmMgKmZ1bmMsIHN0cnVjdCBjb250cm9sbGVyICpjdHJsKQorc3RhdGljIGludCByZW1vdmVfYm9hcmQoc3RydWN0IHNsb3QgKnBfc2xvdCkKIHsKLQlpbnQgaW5kZXg7Ci0JdTggc2tpcCA9IDA7CiAJdTggZGV2aWNlOwogCXU4IGhwX3Nsb3Q7Ci0JdTMyIHJjOwotCXN0cnVjdCByZXNvdXJjZV9saXN0cyByZXNfbGlzdHM7Ci0Jc3RydWN0IHBjaV9mdW5jICp0ZW1wX2Z1bmM7Ci0Jc3RydWN0IHNsb3QgKnBfc2xvdDsKKwlpbnQgcmM7CisJc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwgPSBwX3Nsb3QtPmN0cmw7CiAKLQlpZiAoZnVuYyA9PSBOVUxMKQorCWlmIChwY2llaHBfdW5jb25maWd1cmVfZGV2aWNlKHBfc2xvdCkpCiAJCXJldHVybiAxOwogCi0JaWYgKHBjaWVocF91bmNvbmZpZ3VyZV9kZXZpY2UoZnVuYykpCi0JCXJldHVybiAxOworCWRldmljZSA9IHBfc2xvdC0+ZGV2aWNlOwogCi0JZGV2aWNlID0gZnVuYy0+ZGV2aWNlOwotCi0JaHBfc2xvdCA9IGZ1bmMtPmRldmljZSAtIGN0cmwtPnNsb3RfZGV2aWNlX29mZnNldDsKKwlocF9zbG90ID0gcF9zbG90LT5kZXZpY2UgLSBjdHJsLT5zbG90X2RldmljZV9vZmZzZXQ7CiAJcF9zbG90ID0gcGNpZWhwX2ZpbmRfc2xvdChjdHJsLCBocF9zbG90ICsgY3RybC0+c2xvdF9kZXZpY2Vfb2Zmc2V0KTsKIAogCWRiZygiSW4gJXMsIGhwX3Nsb3QgPSAlZFxuIiwgX19GVU5DVElPTl9fLCBocF9zbG90KTsKIAotCWlmICgoY3RybC0+YWRkX3N1cHBvcnQpICYmCi0JCSEoZnVuYy0+YnVzX2hlYWQgfHwgZnVuYy0+bWVtX2hlYWQgfHwgZnVuYy0+cF9tZW1faGVhZCB8fCBmdW5jLT5pb19oZWFkKSkgewotCQkvKiBIZXJlIHdlIGNoZWNrIHRvIHNlZSBpZiB3ZSd2ZSBzYXZlZCBhbnkgb2YgdGhlIGJvYXJkJ3MKLQkJICogcmVzb3VyY2VzIGFscmVhZHkuICBJZiBzbywgd2UnbGwgc2tpcCB0aGUgYXR0ZW1wdCB0bwotCQkgKiBkZXRlcm1pbmUgd2hhdCdzIGJlaW5nIHVzZWQuCi0JCSAqLwotCQlpbmRleCA9IDA7Ci0KLQkJdGVtcF9mdW5jID0gZnVuYzsKLQotCQl3aGlsZSAoKHRlbXBfZnVuYyA9IHBjaWVocF9zbG90X2ZpbmQodGVtcF9mdW5jLT5idXMsIHRlbXBfZnVuYy0+ZGV2aWNlLCBpbmRleCsrKSkpIHsKLQkJCWlmICh0ZW1wX2Z1bmMtPmJ1c19oZWFkIHx8IHRlbXBfZnVuYy0+bWVtX2hlYWQKLQkJCSAgICB8fCB0ZW1wX2Z1bmMtPnBfbWVtX2hlYWQgfHwgdGVtcF9mdW5jLT5pb19oZWFkKSB7Ci0JCQkJc2tpcCA9IDE7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQotCQlpZiAoIXNraXApCi0JCQlyYyA9IHBjaWVocF9zYXZlX3VzZWRfcmVzb3VyY2VzKGN0cmwsIGZ1bmMsIERJU0FCTEVfQ0FSRCk7Ci0JfQogCS8qIENoYW5nZSBzdGF0dXMgdG8gc2h1dGRvd24gKi8KLQlpZiAoZnVuYy0+aXNfYV9ib2FyZCkKLQkJZnVuYy0+c3RhdHVzID0gMHgwMTsKLQlmdW5jLT5jb25maWd1cmVkID0gMDsKKwlwX3Nsb3QtPnN0YXR1cyA9IDB4MDE7CiAKIAkvKiBXYWl0IGZvciBleGNsdXNpdmUgYWNjZXNzIHRvIGhhcmR3YXJlICovCiAJZG93bigmY3RybC0+Y3JpdF9zZWN0KTsKQEAgLTEzMjgsNTYgKzQxMSw2IEBACiAJLyogRG9uZSB3aXRoIGV4Y2x1c2l2ZSBoYXJkd2FyZSBhY2Nlc3MgKi8KIAl1cCgmY3RybC0+Y3JpdF9zZWN0KTsKIAotCWlmIChjdHJsLT5hZGRfc3VwcG9ydCkgewotCQl3aGlsZSAoZnVuYykgewotCQkJcmVzX2xpc3RzLmlvX2hlYWQgPSBjdHJsLT5pb19oZWFkOwotCQkJcmVzX2xpc3RzLm1lbV9oZWFkID0gY3RybC0+bWVtX2hlYWQ7Ci0JCQlyZXNfbGlzdHMucF9tZW1faGVhZCA9IGN0cmwtPnBfbWVtX2hlYWQ7Ci0JCQlyZXNfbGlzdHMuYnVzX2hlYWQgPSBjdHJsLT5idXNfaGVhZDsKLQotCQkJZGJnKCJSZXR1cm5pbmcgcmVzb3VyY2VzIHRvIGN0bHIgbGlzdHMgZm9yIChCL0QvRikgPSAoJSN4LyUjeC8lI3gpXG4iLCAKLQkJCQlmdW5jLT5idXMsIGZ1bmMtPmRldmljZSwgZnVuYy0+ZnVuY3Rpb24pOwotCi0JCQlwY2llaHBfcmV0dXJuX2JvYXJkX3Jlc291cmNlcyhmdW5jLCAmcmVzX2xpc3RzKTsKLQotCQkJY3RybC0+aW9faGVhZCA9IHJlc19saXN0cy5pb19oZWFkOwotCQkJY3RybC0+bWVtX2hlYWQgPSByZXNfbGlzdHMubWVtX2hlYWQ7Ci0JCQljdHJsLT5wX21lbV9oZWFkID0gcmVzX2xpc3RzLnBfbWVtX2hlYWQ7Ci0JCQljdHJsLT5idXNfaGVhZCA9IHJlc19saXN0cy5idXNfaGVhZDsKLQotCQkJcGNpZWhwX3Jlc291cmNlX3NvcnRfYW5kX2NvbWJpbmUoJihjdHJsLT5tZW1faGVhZCkpOwotCQkJcGNpZWhwX3Jlc291cmNlX3NvcnRfYW5kX2NvbWJpbmUoJihjdHJsLT5wX21lbV9oZWFkKSk7Ci0JCQlwY2llaHBfcmVzb3VyY2Vfc29ydF9hbmRfY29tYmluZSgmKGN0cmwtPmlvX2hlYWQpKTsKLQkJCXBjaWVocF9yZXNvdXJjZV9zb3J0X2FuZF9jb21iaW5lKCYoY3RybC0+YnVzX2hlYWQpKTsKLQotCQkJaWYgKGlzX2JyaWRnZShmdW5jKSkgewotCQkJCWRiZygiUENJIEJyaWRnZSBIb3QtUmVtb3ZlIHM6YjpkOmYoJTAyeDolMDJ4OiUwMng6JTAyeClcbiIsIAotCQkJCQljdHJsLT5zZWcsIGZ1bmMtPmJ1cywgZnVuYy0+ZGV2aWNlLCBmdW5jLT5mdW5jdGlvbik7Ci0JCQkJYnJpZGdlX3Nsb3RfcmVtb3ZlKGZ1bmMpOwotCQkJfSBlbHNlIHsKLQkJCQlkYmcoIlBDSSBGdW5jdGlvbiBIb3QtUmVtb3ZlIHM6YjpkOmYoJTAyeDolMDJ4OiUwMng6JTAyeClcbiIsIAotCQkJCQljdHJsLT5zZWcsIGZ1bmMtPmJ1cywgZnVuYy0+ZGV2aWNlLCBmdW5jLT5mdW5jdGlvbik7Ci0JCQkJc2xvdF9yZW1vdmUoZnVuYyk7Ci0JCQl9Ci0KLQkJCWZ1bmMgPSBwY2llaHBfc2xvdF9maW5kKGN0cmwtPnNsb3RfYnVzLCBkZXZpY2UsIDApOwotCQl9Ci0KLQkJLyogU2V0dXAgc2xvdCBzdHJ1Y3R1cmUgd2l0aCBlbnRyeSBmb3IgZW1wdHkgc2xvdCAqLwotCQlmdW5jID0gcGNpZWhwX3Nsb3RfY3JlYXRlKGN0cmwtPnNsb3RfYnVzKTsKLQotCQlpZiAoZnVuYyA9PSBOVUxMKSB7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCi0JCWZ1bmMtPmJ1cyA9IGN0cmwtPnNsb3RfYnVzOwotCQlmdW5jLT5kZXZpY2UgPSBkZXZpY2U7Ci0JCWZ1bmMtPmZ1bmN0aW9uID0gMDsKLQkJZnVuYy0+Y29uZmlndXJlZCA9IDA7Ci0JCWZ1bmMtPnN3aXRjaF9zYXZlID0gMHgxMDsKLQkJZnVuYy0+aXNfYV9ib2FyZCA9IDA7Ci0JfQotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE0MTEsMTMgKzQ0NCwxNSBAQAogCXBfc2xvdC0+aHBjX29wcy0+Z2V0X3Bvd2VyX3N0YXR1cyhwX3Nsb3QsICZnZXRzdGF0dXMpOwogCWlmIChnZXRzdGF0dXMpIHsKIAkJcF9zbG90LT5zdGF0ZSA9IFBPV0VST0ZGX1NUQVRFOwotCQlkYmcoIkluIHBvd2VyX2Rvd25fYm9hcmQsIGI6ZCgleDoleClcbiIsIHBfc2xvdC0+YnVzLCBwX3Nsb3QtPmRldmljZSk7CisJCWRiZygiJXM6IGRpc2FibGluZyBidXM6ZGV2aWNlKCV4OiV4KVxuIiwgX19GVU5DVElPTl9fLAorCQkJCXBfc2xvdC0+YnVzLCBwX3Nsb3QtPmRldmljZSk7CiAKIAkJcGNpZWhwX2Rpc2FibGVfc2xvdChwX3Nsb3QpOwogCQlwX3Nsb3QtPnN0YXRlID0gU1RBVElDX1NUQVRFOwogCX0gZWxzZSB7CiAJCXBfc2xvdC0+c3RhdGUgPSBQT1dFUk9OX1NUQVRFOwotCQlkYmcoIkluIGFkZF9ib2FyZCwgYjpkKCV4OiV4KVxuIiwgcF9zbG90LT5idXMsIHBfc2xvdC0+ZGV2aWNlKTsKKwkJZGJnKCIlczogYWRkaW5nIGJ1czpkZXZpY2UoJXg6JXgpXG4iLCBfX0ZVTkNUSU9OX18sCisJCQkJcF9zbG90LT5idXMsIHBfc2xvdC0+ZGV2aWNlKTsKIAogCQlpZiAocGNpZWhwX2VuYWJsZV9zbG90KHBfc2xvdCkgJiYgUFdSX0xFRChwX3Nsb3QtPmN0cmwtPmN0cmxjYXApKSB7CiAJCQkvKiBXYWl0IGZvciBleGNsdXNpdmUgYWNjZXNzIHRvIGhhcmR3YXJlICovCkBAIC0xNDU5LDEzICs0OTQsMTUgQEAKIAlwX3Nsb3QtPmhwY19vcHMtPmdldF9hZGFwdGVyX3N0YXR1cyhwX3Nsb3QsICZnZXRzdGF0dXMpOwogCWlmICghZ2V0c3RhdHVzKSB7CiAJCXBfc2xvdC0+c3RhdGUgPSBQT1dFUk9GRl9TVEFURTsKLQkJZGJnKCJJbiByZW1vdmluZyBib2FyZCwgYjpkKCV4OiV4KVxuIiwgcF9zbG90LT5idXMsIHBfc2xvdC0+ZGV2aWNlKTsKKwkJZGJnKCIlczogcmVtb3ZpbmcgYnVzOmRldmljZSgleDoleClcbiIsCisJCQkJX19GVU5DVElPTl9fLCBwX3Nsb3QtPmJ1cywgcF9zbG90LT5kZXZpY2UpOwogCiAJCXBjaWVocF9kaXNhYmxlX3Nsb3QocF9zbG90KTsKIAkJcF9zbG90LT5zdGF0ZSA9IFNUQVRJQ19TVEFURTsKIAl9IGVsc2UgewogCQlwX3Nsb3QtPnN0YXRlID0gUE9XRVJPTl9TVEFURTsKLQkJZGJnKCJJbiBhZGRfYm9hcmQsIGI6ZCgleDoleClcbiIsIHBfc2xvdC0+YnVzLCBwX3Nsb3QtPmRldmljZSk7CisJCWRiZygiJXM6IGFkZGluZyBidXM6ZGV2aWNlKCV4OiV4KVxuIiwKKwkJCQlfX0ZVTkNUSU9OX18sIHBfc2xvdC0+YnVzLCBwX3Nsb3QtPmRldmljZSk7CiAKIAkJaWYgKHBjaWVocF9lbmFibGVfc2xvdChwX3Nsb3QpICYmIFBXUl9MRUQocF9zbG90LT5jdHJsLT5jdHJsY2FwKSkgewogCQkJLyogV2FpdCBmb3IgZXhjbHVzaXZlIGFjY2VzcyB0byBoYXJkd2FyZSAqLwpAQCAtMTUzMSw3ICs1NjgsNiBAQAogCQllcnIgKCJDYW4ndCBzdGFydCB1cCBvdXIgZXZlbnQgdGhyZWFkXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KLQlkYmcoIk91ciBldmVudCB0aHJlYWQgcGlkID0gJWRcbiIsIHBpZCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE1MzksOSArNTc1LDcgQEAKIHZvaWQgcGNpZWhwX2V2ZW50X3N0b3BfdGhyZWFkKHZvaWQpCiB7CiAJZXZlbnRfZmluaXNoZWQgPSAxOwotCWRiZygiZXZlbnRfdGhyZWFkIGZpbmlzaCBjb21tYW5kIGdpdmVuXG4iKTsKIAl1cCgmZXZlbnRfc2VtYXBob3JlKTsKLQlkYmcoIndhaXQgZm9yIGV2ZW50X3RocmVhZCB0byBleGl0XG4iKTsKIAlkb3duKCZldmVudF9leGl0KTsKIH0KIApAQCAtMTU3Myw3ICs2MDcsNiBAQAogewogCWludCBsb29wID0gMDsKIAlpbnQgY2hhbmdlID0gMTsKLQlzdHJ1Y3QgcGNpX2Z1bmMgKmZ1bmM7CiAJdTggaHBfc2xvdDsKIAl1OCBnZXRzdGF0dXM7CiAJc3RydWN0IHNsb3QgKnBfc2xvdDsKQEAgLTE1ODEsMTYgKzYxNCwxMiBAQAogCXdoaWxlIChjaGFuZ2UpIHsKIAkJY2hhbmdlID0gMDsKIAotCQlmb3IgKGxvb3AgPSAwOyBsb29wIDwgMTA7IGxvb3ArKykgeworCQlmb3IgKGxvb3AgPSAwOyBsb29wIDwgTUFYX0VWRU5UUzsgbG9vcCsrKSB7CiAJCQlpZiAoY3RybC0+ZXZlbnRfcXVldWVbbG9vcF0uZXZlbnRfdHlwZSAhPSAwKSB7CiAJCQkJaHBfc2xvdCA9IGN0cmwtPmV2ZW50X3F1ZXVlW2xvb3BdLmhwX3Nsb3Q7CiAKLQkJCQlmdW5jID0gcGNpZWhwX3Nsb3RfZmluZChjdHJsLT5zbG90X2J1cywgKGhwX3Nsb3QgKyBjdHJsLT5zbG90X2RldmljZV9vZmZzZXQpLCAwKTsKLQogCQkJCXBfc2xvdCA9IHBjaWVocF9maW5kX3Nsb3QoY3RybCwgaHBfc2xvdCArIGN0cmwtPnNsb3RfZGV2aWNlX29mZnNldCk7CiAKLQkJCQlkYmcoImhwX3Nsb3QgJWQsIGZ1bmMgJXAsIHBfc2xvdCAlcFxuIiwgaHBfc2xvdCwgZnVuYywgcF9zbG90KTsKLQogCQkJCWlmIChjdHJsLT5ldmVudF9xdWV1ZVtsb29wXS5ldmVudF90eXBlID09IElOVF9CVVRUT05fQ0FOQ0VMKSB7CiAJCQkJCWRiZygiYnV0dG9uIGNhbmNlbFxuIik7CiAJCQkJCWRlbF90aW1lcigmcF9zbG90LT50YXNrX2V2ZW50KTsKQEAgLTE2ODIsNyArNzExLDYgQEAKIAkJCQkJCXBfc2xvdC0+dGFza19ldmVudC5mdW5jdGlvbiA9ICh2b2lkICgqKSh1bnNpZ25lZCBsb25nKSkgcHVzaGJ1dHRvbl9oZWxwZXJfdGhyZWFkOwogCQkJCQkJcF9zbG90LT50YXNrX2V2ZW50LmRhdGEgPSAodW5zaWduZWQgbG9uZykgcF9zbG90OwogCi0JCQkJCQlkYmcoImFkZF90aW1lciBwX3Nsb3QgPSAlcFxuIiwgKHZvaWQgKikgcF9zbG90KTsKIAkJCQkJCWFkZF90aW1lcigmcF9zbG90LT50YXNrX2V2ZW50KTsKIAkJCQkJfQogCQkJCX0KQEAgLTE3MzcsMTMgKzc2NSw2IEBACiB7CiAJdTggZ2V0c3RhdHVzID0gMDsKIAlpbnQgcmM7Ci0Jc3RydWN0IHBjaV9mdW5jICpmdW5jOwotCi0JZnVuYyA9IHBjaWVocF9zbG90X2ZpbmQocF9zbG90LT5idXMsIHBfc2xvdC0+ZGV2aWNlLCAwKTsKLQlpZiAoIWZ1bmMpIHsKLQkJZGJnKCIlczogRXJyb3IhIHNsb3QgTlVMTFxuIiwgX19GVU5DVElPTl9fKTsKLQkJcmV0dXJuIDE7Ci0JfQogCiAJLyogQ2hlY2sgdG8gc2VlIGlmIChsYXRjaCBjbG9zZWQsIGNhcmQgcHJlc2VudCwgcG93ZXIgb2ZmKSAqLwogCWRvd24oJnBfc2xvdC0+Y3RybC0+Y3JpdF9zZWN0KTsKQEAgLTE3NzMsNDUgKzc5NCwxMSBAQAogCX0KIAl1cCgmcF9zbG90LT5jdHJsLT5jcml0X3NlY3QpOwogCi0Jc2xvdF9yZW1vdmUoZnVuYyk7Ci0KLQlmdW5jID0gcGNpZWhwX3Nsb3RfY3JlYXRlKHBfc2xvdC0+YnVzKTsKLQlpZiAoZnVuYyA9PSBOVUxMKQotCQlyZXR1cm4gMTsKLQotCWZ1bmMtPmJ1cyA9IHBfc2xvdC0+YnVzOwotCWZ1bmMtPmRldmljZSA9IHBfc2xvdC0+ZGV2aWNlOwotCWZ1bmMtPmZ1bmN0aW9uID0gMDsKLQlmdW5jLT5jb25maWd1cmVkID0gMDsKLQlmdW5jLT5pc19hX2JvYXJkID0gMTsKLQotCS8qIFdlIGhhdmUgdG8gc2F2ZSB0aGUgcHJlc2VuY2UgaW5mbyBmb3IgdGhlc2Ugc2xvdHMgKi8KLQlwX3Nsb3QtPmhwY19vcHMtPmdldF9hZGFwdGVyX3N0YXR1cyhwX3Nsb3QsICYoZnVuYy0+cHJlc2VuY2Vfc2F2ZSkpOwogCXBfc2xvdC0+aHBjX29wcy0+Z2V0X2xhdGNoX3N0YXR1cyhwX3Nsb3QsICZnZXRzdGF0dXMpOwotCWZ1bmMtPnN3aXRjaF9zYXZlID0gIWdldHN0YXR1cz8gMHgxMDowOwogCi0JcmMgPSBib2FyZF9hZGRlZChmdW5jLCBwX3Nsb3QtPmN0cmwpOworCXJjID0gYm9hcmRfYWRkZWQocF9zbG90KTsKIAlpZiAocmMpIHsKLQkJaWYgKGlzX2JyaWRnZShmdW5jKSkKLQkJCWJyaWRnZV9zbG90X3JlbW92ZShmdW5jKTsKLQkJZWxzZQotCQkJc2xvdF9yZW1vdmUoZnVuYyk7Ci0KLQkJLyogU2V0dXAgc2xvdCBzdHJ1Y3R1cmUgd2l0aCBlbnRyeSBmb3IgZW1wdHkgc2xvdCAqLwotCQlmdW5jID0gcGNpZWhwX3Nsb3RfY3JlYXRlKHBfc2xvdC0+YnVzKTsKLQkJaWYgKGZ1bmMgPT0gTlVMTCkKLQkJCXJldHVybiAxOwkvKiBPdXQgb2YgbWVtb3J5ICovCi0KLQkJZnVuYy0+YnVzID0gcF9zbG90LT5idXM7Ci0JCWZ1bmMtPmRldmljZSA9IHBfc2xvdC0+ZGV2aWNlOwotCQlmdW5jLT5mdW5jdGlvbiA9IDA7Ci0JCWZ1bmMtPmNvbmZpZ3VyZWQgPSAwOwotCQlmdW5jLT5pc19hX2JvYXJkID0gMTsKLQotCQkvKiBXZSBoYXZlIHRvIHNhdmUgdGhlIHByZXNlbmNlIGluZm8gZm9yIHRoZXNlIHNsb3RzICovCi0JCXBfc2xvdC0+aHBjX29wcy0+Z2V0X2FkYXB0ZXJfc3RhdHVzKHBfc2xvdCwgJihmdW5jLT5wcmVzZW5jZV9zYXZlKSk7CiAJCXBfc2xvdC0+aHBjX29wcy0+Z2V0X2xhdGNoX3N0YXR1cyhwX3Nsb3QsICZnZXRzdGF0dXMpOwotCQlmdW5jLT5zd2l0Y2hfc2F2ZSA9ICFnZXRzdGF0dXM/IDB4MTA6MDsKIAl9CiAKIAlpZiAocF9zbG90KQpAQCAtMTgyMywxNCArODEwLDggQEAKIAogaW50IHBjaWVocF9kaXNhYmxlX3Nsb3Qoc3RydWN0IHNsb3QgKnBfc2xvdCkKIHsKLQl1OCBjbGFzc19jb2RlLCBoZWFkZXJfdHlwZSwgQkNSOwotCXU4IGluZGV4ID0gMDsKIAl1OCBnZXRzdGF0dXMgPSAwOwotCXUzMiByYyA9IDA7CiAJaW50IHJldCA9IDA7Ci0JdW5zaWduZWQgaW50IGRldmZuOwotCXN0cnVjdCBwY2lfYnVzICpwY2lfYnVzID0gcF9zbG90LT5jdHJsLT5wY2lfZGV2LT5zdWJvcmRpbmF0ZTsKLQlzdHJ1Y3QgcGNpX2Z1bmMgKmZ1bmM7CiAKIAlpZiAoIXBfc2xvdC0+Y3RybCkKIAkJcmV0dXJuIDE7CkBAIC0xODY3LDgzOCArODQ4LDggQEAKIAogCXVwKCZwX3Nsb3QtPmN0cmwtPmNyaXRfc2VjdCk7CiAKLQlmdW5jID0gcGNpZWhwX3Nsb3RfZmluZChwX3Nsb3QtPmJ1cywgcF9zbG90LT5kZXZpY2UsIGluZGV4KyspOwotCi0JLyogTWFrZSBzdXJlIHRoZXJlIGFyZSBubyB2aWRlbyBjb250cm9sbGVycyBoZXJlCi0JICogZm9yIGFsbCBmdW5jIG9mIHBfc2xvdAotCSAqLwotCXdoaWxlIChmdW5jICYmICFyYykgewotCQlwY2lfYnVzLT5udW1iZXIgPSBmdW5jLT5idXM7Ci0JCWRldmZuID0gUENJX0RFVkZOKGZ1bmMtPmRldmljZSwgZnVuYy0+ZnVuY3Rpb24pOwotCi0JCS8qIENoZWNrIHRoZSBDbGFzcyBDb2RlICovCi0JCXJjID0gcGNpX2J1c19yZWFkX2NvbmZpZ19ieXRlIChwY2lfYnVzLCBkZXZmbiwgMHgwQiwgJmNsYXNzX2NvZGUpOwotCQlpZiAocmMpCi0JCQlyZXR1cm4gcmM7Ci0KLQkJaWYgKGNsYXNzX2NvZGUgPT0gUENJX0JBU0VfQ0xBU1NfRElTUExBWSkgewotCQkJLyogRGlzcGxheS9WaWRlbyBhZGFwdGVyIChub3Qgc3VwcG9ydGVkKSAqLwotCQkJcmMgPSBSRU1PVkVfTk9UX1NVUFBPUlRFRDsKLQkJfSBlbHNlIHsKLQkJCS8qIFNlZSBpZiBpdCdzIGEgYnJpZGdlICovCi0JCQlyYyA9IHBjaV9idXNfcmVhZF9jb25maWdfYnl0ZSAocGNpX2J1cywgZGV2Zm4sIFBDSV9IRUFERVJfVFlQRSwgJmhlYWRlcl90eXBlKTsKLQkJCWlmIChyYykKLQkJCQlyZXR1cm4gcmM7Ci0KLQkJCS8qIElmIGl0J3MgYSBicmlkZ2UsIGNoZWNrIHRoZSBWR0EgRW5hYmxlIGJpdCAqLwotCQkJaWYgKChoZWFkZXJfdHlwZSAmIDB4N0YpID09IFBDSV9IRUFERVJfVFlQRV9CUklER0UpIHsKLQkJCQlyYyA9IHBjaV9idXNfcmVhZF9jb25maWdfYnl0ZSAocGNpX2J1cywgZGV2Zm4sIFBDSV9CUklER0VfQ09OVFJPTCwgJkJDUik7Ci0JCQkJaWYgKHJjKQotCQkJCQlyZXR1cm4gcmM7Ci0KLQkJCQkvKiBJZiB0aGUgVkdBIEVuYWJsZSBiaXQgaXMgc2V0LCByZW1vdmUgaXNuJ3Qgc3VwcG9ydGVkICovCi0JCQkJaWYgKEJDUiAmIFBDSV9CUklER0VfQ1RMX1ZHQSkgewotCQkJCQlyYyA9IFJFTU9WRV9OT1RfU1VQUE9SVEVEOwotCQkJCX0KLQkJCX0KLQkJfQotCi0JCWZ1bmMgPSBwY2llaHBfc2xvdF9maW5kKHBfc2xvdC0+YnVzLCBwX3Nsb3QtPmRldmljZSwgaW5kZXgrKyk7Ci0JfQotCi0JZnVuYyA9IHBjaWVocF9zbG90X2ZpbmQocF9zbG90LT5idXMsIHBfc2xvdC0+ZGV2aWNlLCAwKTsKLQlpZiAoKGZ1bmMgIT0gTlVMTCkgJiYgIXJjKSB7Ci0JCXJjID0gcmVtb3ZlX2JvYXJkKGZ1bmMsIHBfc2xvdC0+Y3RybCk7Ci0JfSBlbHNlIGlmICghcmMpCi0JCXJjID0gMTsKLQotCWlmIChwX3Nsb3QpCi0JCXVwZGF0ZV9zbG90X2luZm8ocF9zbG90KTsKLQotCXJldHVybiByYzsKKwlyZXQgPSByZW1vdmVfYm9hcmQocF9zbG90KTsKKwl1cGRhdGVfc2xvdF9pbmZvKHBfc2xvdCk7CisJcmV0dXJuIHJldDsKIH0KIAotCi0vKioKLSAqIGNvbmZpZ3VyZV9uZXdfZGV2aWNlIC0gQ29uZmlndXJlcyB0aGUgUENJIGhlYWRlciBpbmZvcm1hdGlvbiBvZiBvbmUgYm9hcmQuCi0gKgotICogQGN0cmw6IHBvaW50ZXIgdG8gY29udHJvbGxlciBzdHJ1Y3R1cmUKLSAqIEBmdW5jOiBwb2ludGVyIHRvIGZ1bmN0aW9uIHN0cnVjdHVyZQotICogQGJlaGluZF9icmlkZ2U6IDEgaWYgdGhpcyBpcyBhIHJlY3Vyc2l2ZSBjYWxsLCAwIGlmIG5vdAotICogQHJlc291cmNlczogcG9pbnRlciB0byBzZXQgb2YgcmVzb3VyY2UgbGlzdHMKLSAqCi0gKiBSZXR1cm5zIDAgaWYgc3VjY2VzcwotICoKLSAqLwotc3RhdGljIHUzMiBjb25maWd1cmVfbmV3X2RldmljZShzdHJ1Y3QgY29udHJvbGxlciAqIGN0cmwsIHN0cnVjdCBwY2lfZnVuYyAqIGZ1bmMsCi0JdTggYmVoaW5kX2JyaWRnZSwgc3RydWN0IHJlc291cmNlX2xpc3RzICogcmVzb3VyY2VzLCB1OCBicmlkZ2VfYnVzLCB1OCBicmlkZ2VfZGV2KQotewotCXU4IHRlbXBfYnl0ZSwgZnVuY3Rpb24sIG1heF9mdW5jdGlvbnMsIHN0b3BfaXQ7Ci0JaW50IHJjOwotCXUzMiBJRDsKLQlzdHJ1Y3QgcGNpX2Z1bmMgKm5ld19zbG90OwotCXN0cnVjdCBwY2lfYnVzIGxwY2lfYnVzLCAqcGNpX2J1czsKLQlpbnQgaW5kZXg7Ci0KLQluZXdfc2xvdCA9IGZ1bmM7Ci0KLQlkYmcoIiVzXG4iLCBfX0ZVTkNUSU9OX18pOwotCW1lbWNweSgmbHBjaV9idXMsIGN0cmwtPnBjaV9kZXYtPnN1Ym9yZGluYXRlLCBzaXplb2YobHBjaV9idXMpKTsKLQlwY2lfYnVzID0gJmxwY2lfYnVzOwotCXBjaV9idXMtPm51bWJlciA9IGZ1bmMtPmJ1czsKLQotCS8qIENoZWNrIGZvciBNdWx0aS1mdW5jdGlvbiBkZXZpY2UgKi8KLQlyYyA9IHBjaV9idXNfcmVhZF9jb25maWdfYnl0ZShwY2lfYnVzLCBQQ0lfREVWRk4oZnVuYy0+ZGV2aWNlLCBmdW5jLT5mdW5jdGlvbiksIDB4MEUsICZ0ZW1wX2J5dGUpOwotCWlmIChyYykgewotCQlkYmcoIiVzOiByYyA9ICVkXG4iLCBfX0ZVTkNUSU9OX18sIHJjKTsKLQkJcmV0dXJuIHJjOwotCX0KLQotCWlmICh0ZW1wX2J5dGUgJiAweDgwKQkvKiBNdWx0aS1mdW5jdGlvbiBkZXZpY2UgKi8KLQkJbWF4X2Z1bmN0aW9ucyA9IDg7Ci0JZWxzZQotCQltYXhfZnVuY3Rpb25zID0gMTsKLQotCWZ1bmN0aW9uID0gMDsKLQotCWRvIHsKLQkJcmMgPSBjb25maWd1cmVfbmV3X2Z1bmN0aW9uKGN0cmwsIG5ld19zbG90LCBiZWhpbmRfYnJpZGdlLAotCQkJCQlyZXNvdXJjZXMsIGJyaWRnZV9idXMsIGJyaWRnZV9kZXYpOwotCi0JCWlmIChyYykgewotCQkJZGJnKCJjb25maWd1cmVfbmV3X2Z1bmN0aW9uIGZhaWxlZDogJWRcbiIsIHJjKTsKLQkJCWluZGV4ID0gMDsKLQotCQkJd2hpbGUgKG5ld19zbG90KSB7Ci0JCQkJbmV3X3Nsb3QgPSBwY2llaHBfc2xvdF9maW5kKG5ld19zbG90LT5idXMsCi0JCQkJCQluZXdfc2xvdC0+ZGV2aWNlLCBpbmRleCsrKTsKLQotCQkJCWlmIChuZXdfc2xvdCkKLQkJCQkJcGNpZWhwX3JldHVybl9ib2FyZF9yZXNvdXJjZXMobmV3X3Nsb3QsCi0JCQkJCQlyZXNvdXJjZXMpOwotCQkJfQotCi0JCQlyZXR1cm4gcmM7Ci0JCX0KLQotCQlmdW5jdGlvbisrOwotCi0JCXN0b3BfaXQgPSAwOwotCi0JCS8qICBUaGUgZm9sbG93aW5nIGxvb3Agc2tpcHMgdG8gdGhlIG5leHQgcHJlc2VudCBmdW5jdGlvbgotCQkgKiAgYW5kIGNyZWF0ZXMgYSBib2FyZCBzdHJ1Y3R1cmUKLQkJICovCi0KLQkJd2hpbGUgKChmdW5jdGlvbiA8IG1heF9mdW5jdGlvbnMpICYmICghc3RvcF9pdCkpIHsKLQkJCXBjaV9idXNfcmVhZF9jb25maWdfZHdvcmQocGNpX2J1cywgUENJX0RFVkZOKGZ1bmMtPmRldmljZSwgZnVuY3Rpb24pLCAweDAwLCAmSUQpOwotCi0JCQlpZiAoSUQgPT0gMHhGRkZGRkZGRikgewkgIC8qIFRoZXJlJ3Mgbm90aGluZyB0aGVyZS4gKi8KLQkJCQlmdW5jdGlvbisrOwotCQkJfSBlbHNlIHsgIC8qIFRoZXJlJ3Mgc29tZXRoaW5nIHRoZXJlICovCi0JCQkJLyogU2V0dXAgc2xvdCBzdHJ1Y3R1cmUuICovCi0JCQkJbmV3X3Nsb3QgPSBwY2llaHBfc2xvdF9jcmVhdGUoZnVuYy0+YnVzKTsKLQotCQkJCWlmIChuZXdfc2xvdCA9PSBOVUxMKSB7Ci0JCQkJCS8qIE91dCBvZiBtZW1vcnkgKi8KLQkJCQkJcmV0dXJuIDE7Ci0JCQkJfQotCi0JCQkJbmV3X3Nsb3QtPmJ1cyA9IGZ1bmMtPmJ1czsKLQkJCQluZXdfc2xvdC0+ZGV2aWNlID0gZnVuYy0+ZGV2aWNlOwotCQkJCW5ld19zbG90LT5mdW5jdGlvbiA9IGZ1bmN0aW9uOwotCQkJCW5ld19zbG90LT5pc19hX2JvYXJkID0gMTsKLQkJCQluZXdfc2xvdC0+c3RhdHVzID0gMDsKLQotCQkJCXN0b3BfaXQrKzsKLQkJCX0KLQkJfQotCi0JfSB3aGlsZSAoZnVuY3Rpb24gPCBtYXhfZnVuY3Rpb25zKTsKLQlkYmcoInJldHVybmluZyBmcm9tICVzXG4iLCBfX0ZVTkNUSU9OX18pOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBDb25maWd1cmF0aW9uIGxvZ2ljIHRoYXQgaW52b2x2ZXMgdGhlIGhvdHBsdWcgZGF0YSBzdHJ1Y3R1cmVzIGFuZCAKLSAqIHRoZWlyIGJvb2trZWVwaW5nCi0gKi8KLQotLyoqCi0gKiBjb25maWd1cmVfYnJpZGdlOiBmaWxsIGJyaWRnZSdzIHJlZ2lzdGVycywgZWl0aGVyIGNvbmZpZ3VyZSBvciBkaXNhYmxlIGl0LgotICovCi1zdGF0aWMgaW50Ci1jb25maWd1cmVfYnJpZGdlKHN0cnVjdCBwY2lfYnVzICpwY2lfYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sCi0JCQlzdHJ1Y3QgcGNpX3Jlc291cmNlICptZW1fbm9kZSwKLQkJCXN0cnVjdCBwY2lfcmVzb3VyY2UgKipob2xkX21lbV9ub2RlLAotCQkJaW50IGJhc2VfYWRkciwgaW50IGxpbWl0X2FkZHIpCi17Ci0JdTE2IHRlbXBfd29yZDsKLQl1MzIgcmM7Ci0KLQlpZiAobWVtX25vZGUpIHsKLQkJbWVtY3B5KCpob2xkX21lbV9ub2RlLCBtZW1fbm9kZSwgc2l6ZW9mKHN0cnVjdCBwY2lfcmVzb3VyY2UpKTsKLQkJbWVtX25vZGUtPm5leHQgPSBOVUxMOwotCi0JCS8qIHNldCBNZW0gYmFzZSBhbmQgTGltaXQgcmVnaXN0ZXJzICovCi0JCVJFU19DSEVDSyhtZW1fbm9kZS0+YmFzZSwgMTYpOwotCQl0ZW1wX3dvcmQgPSAodTE2KShtZW1fbm9kZS0+YmFzZSA+PiAxNik7Ci0JCXJjID0gcGNpX2J1c193cml0ZV9jb25maWdfd29yZChwY2lfYnVzLCBkZXZmbiwgYmFzZV9hZGRyLCB0ZW1wX3dvcmQpOwotCi0JCVJFU19DSEVDSyhtZW1fbm9kZS0+YmFzZSArIG1lbV9ub2RlLT5sZW5ndGggLSAxLCAxNik7Ci0JCXRlbXBfd29yZCA9ICh1MTYpKChtZW1fbm9kZS0+YmFzZSArIG1lbV9ub2RlLT5sZW5ndGggLSAxKSA+PiAxNik7Ci0JCXJjID0gcGNpX2J1c193cml0ZV9jb25maWdfd29yZChwY2lfYnVzLCBkZXZmbiwgbGltaXRfYWRkciwgdGVtcF93b3JkKTsKLQl9IGVsc2UgewotCQl0ZW1wX3dvcmQgPSAweEZGRkY7Ci0JCXJjID0gcGNpX2J1c193cml0ZV9jb25maWdfd29yZChwY2lfYnVzLCBkZXZmbiwgYmFzZV9hZGRyLCB0ZW1wX3dvcmQpOwotCi0JCXRlbXBfd29yZCA9IDB4MDAwMDsKLQkJcmMgPSBwY2lfYnVzX3dyaXRlX2NvbmZpZ193b3JkKHBjaV9idXMsIGRldmZuLCBsaW1pdF9hZGRyLCB0ZW1wX3dvcmQpOwotCi0JCWtmcmVlKCpob2xkX21lbV9ub2RlKTsKLQkJKmhvbGRfbWVtX25vZGUgPSBOVUxMOwotCX0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQKLWNvbmZpZ3VyZV9uZXdfYnJpZGdlKHN0cnVjdCBjb250cm9sbGVyICpjdHJsLCBzdHJ1Y3QgcGNpX2Z1bmMgKmZ1bmMsCi0JCXU4IGJlaGluZF9icmlkZ2UsIHN0cnVjdCByZXNvdXJjZV9saXN0cyAqcmVzb3VyY2VzLAotCQlzdHJ1Y3QgcGNpX2J1cyAqcGNpX2J1cykKLXsKLQlpbnQgY2xvb3A7Ci0JdTggdGVtcF9ieXRlOwotCXU4IGRldmljZTsKLQl1MTYgdGVtcF93b3JkOwotCXUzMiByYzsKLQl1MzIgSUQ7Ci0JdW5zaWduZWQgaW50IGRldmZuOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKm1lbV9ub2RlOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKnBfbWVtX25vZGU7Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqaW9fbm9kZTsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICpidXNfbm9kZTsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICpob2xkX21lbV9ub2RlOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKmhvbGRfcF9tZW1fbm9kZTsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICpob2xkX0lPX25vZGU7Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqaG9sZF9idXNfbm9kZTsKLQlzdHJ1Y3QgaXJxX21hcHBpbmcgaXJxczsKLQlzdHJ1Y3QgcGNpX2Z1bmMgKm5ld19zbG90OwotCXN0cnVjdCByZXNvdXJjZV9saXN0cyB0ZW1wX3Jlc291cmNlczsKLQotCWRldmZuID0gUENJX0RFVkZOKGZ1bmMtPmRldmljZSwgZnVuYy0+ZnVuY3Rpb24pOwotCi0JLyogc2V0IFByaW1hcnkgYnVzICovCi0JZGJnKCJzZXQgUHJpbWFyeSBidXMgPSAweCV4XG4iLCBmdW5jLT5idXMpOwotCXJjID0gcGNpX2J1c193cml0ZV9jb25maWdfYnl0ZShwY2lfYnVzLCBkZXZmbiwgUENJX1BSSU1BUllfQlVTLCBmdW5jLT5idXMpOwotCWlmIChyYykKLQkJcmV0dXJuIHJjOwotCi0JLyogZmluZCByYW5nZSBvZiBidXNzZXMgdG8gdXNlICovCi0JYnVzX25vZGUgPSBnZXRfbWF4X3Jlc291cmNlKCZyZXNvdXJjZXMtPmJ1c19oZWFkLCAxTCk7Ci0KLQkvKiBJZiB3ZSBkb24ndCBoYXZlIGFueSBidXNzZXMgdG8gYWxsb2NhdGUsIHdlIGNhbid0IGNvbnRpbnVlICovCi0JaWYgKCFidXNfbm9kZSkgewotCQllcnIoIkdvdCBOTyBidXMgcmVzb3VyY2UgdG8gdXNlXG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCWRiZygiR290IHJhbmdlcyBvZiBidXNlcyB0byB1c2U6IGJhc2U6bGVuPTB4JXg6JXhcbiIsIGJ1c19ub2RlLT5iYXNlLCBidXNfbm9kZS0+bGVuZ3RoKTsKLQotCS8qIHNldCBTZWNvbmRhcnkgYnVzICovCi0JdGVtcF9ieXRlID0gKHU4KWJ1c19ub2RlLT5iYXNlOwotCWRiZygic2V0IFNlY29uZGFyeSBidXMgPSAweCV4XG4iLCB0ZW1wX2J5dGUpOwotCXJjID0gcGNpX2J1c193cml0ZV9jb25maWdfYnl0ZShwY2lfYnVzLCBkZXZmbiwgUENJX1NFQ09OREFSWV9CVVMsIHRlbXBfYnl0ZSk7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7Ci0KLQkvKiBzZXQgc3Vib3JkaW5hdGUgYnVzICovCi0JdGVtcF9ieXRlID0gKHU4KShidXNfbm9kZS0+YmFzZSArIGJ1c19ub2RlLT5sZW5ndGggLSAxKTsKLQlkYmcoInNldCBzdWJvcmRpbmF0ZSBidXMgPSAweCV4XG4iLCB0ZW1wX2J5dGUpOwotCXJjID0gcGNpX2J1c193cml0ZV9jb25maWdfYnl0ZSAocGNpX2J1cywgZGV2Zm4sIFBDSV9TVUJPUkRJTkFURV9CVVMsIHRlbXBfYnl0ZSk7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7Ci0KLQkvKiBTZXQgSFAgcGFyYW1ldGVycyAoQ2FjaGUgTGluZSBTaXplLCBMYXRlbmN5IFRpbWVyKSAqLwotCXJjID0gcGNpZWhwcm1fc2V0X2hwcChjdHJsLCBmdW5jLCBQQ0lfSEVBREVSX1RZUEVfQlJJREdFKTsKLQlpZiAocmMpCi0JCXJldHVybiByYzsKLQotCS8qIFNldHVwIHRoZSBJTywgbWVtb3J5LCBhbmQgcHJlZmV0Y2hhYmxlIHdpbmRvd3MgKi8KLQotCWlvX25vZGUgPSBnZXRfbWF4X3Jlc291cmNlKCYocmVzb3VyY2VzLT5pb19oZWFkKSwgMHgxMDAwTCk7Ci0JaWYgKGlvX25vZGUpIHsKLQkJZGJnKCJpb19ub2RlKGJhc2UsIGxlbiwgbmV4dCkgKCV4LCAleCwgJXApXG4iLCBpb19ub2RlLT5iYXNlLAotCQkJCWlvX25vZGUtPmxlbmd0aCwgaW9fbm9kZS0+bmV4dCk7Ci0JfQotCi0JbWVtX25vZGUgPSBnZXRfbWF4X3Jlc291cmNlKCYocmVzb3VyY2VzLT5tZW1faGVhZCksIDB4MTAwMDAwTCk7Ci0JaWYgKG1lbV9ub2RlKSB7Ci0JCWRiZygibWVtX25vZGUoYmFzZSwgbGVuLCBuZXh0KSAoJXgsICV4LCAlcClcbiIsIG1lbV9ub2RlLT5iYXNlLAotCQkJCW1lbV9ub2RlLT5sZW5ndGgsIG1lbV9ub2RlLT5uZXh0KTsKLQl9Ci0KLQlpZiAocmVzb3VyY2VzLT5wX21lbV9oZWFkKQotCQlwX21lbV9ub2RlID0gZ2V0X21heF9yZXNvdXJjZSgmKHJlc291cmNlcy0+cF9tZW1faGVhZCksIDB4MTAwMDAwTCk7Ci0JZWxzZSB7Ci0JCS8qCi0JCSAqIEluIHNvbWUgcGxhdGZvcm0gaW1wbGVtZW50YXRpb24sIE1FTSBhbmQgUE1FTSBhcmUgbm90Ci0JCSAqICBkaXN0aW5ndWlzaGVkLCBhbmQgaGVuY2UgQUNQSSBfQ1JTIGhhcyBvbmx5IE1FTSBlbnRyaWVzCi0JCSAqICBmb3IgYm90aCBNRU0gYW5kIFBNRU0uCi0JCSAqLwotCQlkYmcoInVzaW5nIE1FTSBmb3IgUE1FTVxuIik7Ci0JCXBfbWVtX25vZGUgPSBnZXRfbWF4X3Jlc291cmNlKCYocmVzb3VyY2VzLT5tZW1faGVhZCksIDB4MTAwMDAwTCk7Ci0JfQotCWlmIChwX21lbV9ub2RlKSB7Ci0JCWRiZygicF9tZW1fbm9kZShiYXNlLCBsZW4sIG5leHQpICgleCwgJXgsICVwKVxuIiwgcF9tZW1fbm9kZS0+YmFzZSwKLQkJCQlwX21lbV9ub2RlLT5sZW5ndGgsIHBfbWVtX25vZGUtPm5leHQpOwotCX0KLQotCS8qIHNldCB1cCB0aGUgSVJRIGluZm8gKi8KLQlpZiAoIXJlc291cmNlcy0+aXJxcykgewotCQlpcnFzLmJhcmJlcl9wb2xlID0gMDsKLQkJaXJxcy5pbnRlcnJ1cHRbMF0gPSAwOwotCQlpcnFzLmludGVycnVwdFsxXSA9IDA7Ci0JCWlycXMuaW50ZXJydXB0WzJdID0gMDsKLQkJaXJxcy5pbnRlcnJ1cHRbM10gPSAwOwotCQlpcnFzLnZhbGlkX0lOVCA9IDA7Ci0JfSBlbHNlIHsKLQkJaXJxcy5iYXJiZXJfcG9sZSA9IHJlc291cmNlcy0+aXJxcy0+YmFyYmVyX3BvbGU7Ci0JCWlycXMuaW50ZXJydXB0WzBdID0gcmVzb3VyY2VzLT5pcnFzLT5pbnRlcnJ1cHRbMF07Ci0JCWlycXMuaW50ZXJydXB0WzFdID0gcmVzb3VyY2VzLT5pcnFzLT5pbnRlcnJ1cHRbMV07Ci0JCWlycXMuaW50ZXJydXB0WzJdID0gcmVzb3VyY2VzLT5pcnFzLT5pbnRlcnJ1cHRbMl07Ci0JCWlycXMuaW50ZXJydXB0WzNdID0gcmVzb3VyY2VzLT5pcnFzLT5pbnRlcnJ1cHRbM107Ci0JCWlycXMudmFsaWRfSU5UID0gcmVzb3VyY2VzLT5pcnFzLT52YWxpZF9JTlQ7Ci0JfQotCi0JLyogc2V0IHVwIHJlc291cmNlIGxpc3RzIHRoYXQgYXJlIG5vdyBhbGlnbmVkIG9uIHRvcCBhbmQgYm90dG9tCi0JICogZm9yIGFueXRoaW5nIGJlaGluZCB0aGUgYnJpZGdlLgotCSAqLwotCXRlbXBfcmVzb3VyY2VzLmJ1c19oZWFkID0gYnVzX25vZGU7Ci0JdGVtcF9yZXNvdXJjZXMuaW9faGVhZCA9IGlvX25vZGU7Ci0JdGVtcF9yZXNvdXJjZXMubWVtX2hlYWQgPSBtZW1fbm9kZTsKLQl0ZW1wX3Jlc291cmNlcy5wX21lbV9oZWFkID0gcF9tZW1fbm9kZTsKLQl0ZW1wX3Jlc291cmNlcy5pcnFzID0gJmlycXM7Ci0KLQkvKiBNYWtlIGNvcGllcyBvZiB0aGUgbm9kZXMgd2UgYXJlIGdvaW5nIHRvIHBhc3MgZG93biBzbyB0aGF0Ci0JICogaWYgdGhlcmUgaXMgYSBwcm9ibGVtLHdlIGNhbiBqdXN0IHVzZSB0aGVzZSB0byBmcmVlIHJlc291cmNlcwotCSAqLwotCWhvbGRfYnVzX25vZGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcGNpX3Jlc291cmNlKSwgR0ZQX0tFUk5FTCk7Ci0JaG9sZF9JT19ub2RlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHBjaV9yZXNvdXJjZSksIEdGUF9LRVJORUwpOwotCWhvbGRfbWVtX25vZGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcGNpX3Jlc291cmNlKSwgR0ZQX0tFUk5FTCk7Ci0JaG9sZF9wX21lbV9ub2RlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHBjaV9yZXNvdXJjZSksIEdGUF9LRVJORUwpOwotCi0JaWYgKCFob2xkX2J1c19ub2RlIHx8ICFob2xkX0lPX25vZGUgfHwgIWhvbGRfbWVtX25vZGUgfHwgIWhvbGRfcF9tZW1fbm9kZSkgewotCQlrZnJlZShob2xkX2J1c19ub2RlKTsKLQkJa2ZyZWUoaG9sZF9JT19ub2RlKTsKLQkJa2ZyZWUoaG9sZF9tZW1fbm9kZSk7Ci0JCWtmcmVlKGhvbGRfcF9tZW1fbm9kZSk7Ci0KLQkJcmV0dXJuIDE7Ci0JfQotCi0JbWVtY3B5KGhvbGRfYnVzX25vZGUsIGJ1c19ub2RlLCBzaXplb2Yoc3RydWN0IHBjaV9yZXNvdXJjZSkpOwotCi0JYnVzX25vZGUtPmJhc2UgKz0gMTsKLQlidXNfbm9kZS0+bGVuZ3RoIC09IDE7Ci0JYnVzX25vZGUtPm5leHQgPSBOVUxMOwotCi0JLyogSWYgd2UgaGF2ZSBJTyByZXNvdXJjZXMgY29weSB0aGVtIGFuZCBmaWxsIGluIHRoZSBicmlkZ2UncwotCSAqIElPIHJhbmdlIHJlZ2lzdGVycwotCSAqLwotCWlmIChpb19ub2RlKSB7Ci0JCW1lbWNweShob2xkX0lPX25vZGUsIGlvX25vZGUsIHNpemVvZihzdHJ1Y3QgcGNpX3Jlc291cmNlKSk7Ci0JCWlvX25vZGUtPm5leHQgPSBOVUxMOwotCi0JCS8qIHNldCBJTyBiYXNlIGFuZCBMaW1pdCByZWdpc3RlcnMgKi8KLQkJUkVTX0NIRUNLKGlvX25vZGUtPmJhc2UsIDgpOwotCQl0ZW1wX2J5dGUgPSAodTgpKGlvX25vZGUtPmJhc2UgPj4gOCk7Ci0JCXJjID0gcGNpX2J1c193cml0ZV9jb25maWdfYnl0ZSAocGNpX2J1cywgZGV2Zm4sIFBDSV9JT19CQVNFLCB0ZW1wX2J5dGUpOwotCi0JCVJFU19DSEVDSyhpb19ub2RlLT5iYXNlICsgaW9fbm9kZS0+bGVuZ3RoIC0gMSwgOCk7Ci0JCXRlbXBfYnl0ZSA9ICh1OCkoKGlvX25vZGUtPmJhc2UgKyBpb19ub2RlLT5sZW5ndGggLSAxKSA+PiA4KTsKLQkJcmMgPSBwY2lfYnVzX3dyaXRlX2NvbmZpZ19ieXRlIChwY2lfYnVzLCBkZXZmbiwgUENJX0lPX0xJTUlULCB0ZW1wX2J5dGUpOwotCX0gZWxzZSB7Ci0JCWtmcmVlKGhvbGRfSU9fbm9kZSk7Ci0JCWhvbGRfSU9fbm9kZSA9IE5VTEw7Ci0JfQotCi0JLyogSWYgd2UgaGF2ZSBtZW1vcnkgcmVzb3VyY2VzIGNvcHkgdGhlbSBhbmQgZmlsbCBpbiB0aGUgYnJpZGdlJ3MKLQkgKiBtZW1vcnkgcmFuZ2UgcmVnaXN0ZXJzLiAgT3RoZXJ3aXNlLCBmaWxsIGluIHRoZSByYW5nZQotCSAqIHJlZ2lzdGVycyB3aXRoIHZhbHVlcyB0aGF0IGRpc2FibGUgdGhlbS4KLQkgKi8KLQlyYyA9IGNvbmZpZ3VyZV9icmlkZ2UocGNpX2J1cywgZGV2Zm4sIG1lbV9ub2RlLCAmaG9sZF9tZW1fbm9kZSwKLQkJCQlQQ0lfTUVNT1JZX0JBU0UsIFBDSV9NRU1PUllfTElNSVQpOwotCi0JLyogSWYgd2UgaGF2ZSBwcmVmZXRjaGFibGUgbWVtb3J5IHJlc291cmNlcyBjb3B5IHRoZW0gYW5kIAotCSAqIGZpbGwgaW4gdGhlIGJyaWRnZSdzIG1lbW9yeSByYW5nZSByZWdpc3RlcnMuICBPdGhlcndpc2UsCi0JICogZmlsbCBpbiB0aGUgcmFuZ2UgcmVnaXN0ZXJzIHdpdGggdmFsdWVzIHRoYXQgZGlzYWJsZSB0aGVtLgotCSAqLwotCXJjID0gY29uZmlndXJlX2JyaWRnZShwY2lfYnVzLCBkZXZmbiwgcF9tZW1fbm9kZSwgJmhvbGRfcF9tZW1fbm9kZSwKLQkJCQlQQ0lfUFJFRl9NRU1PUllfQkFTRSwgUENJX1BSRUZfTUVNT1JZX0xJTUlUKTsKLQotCS8qIEFkanVzdCB0aGlzIHRvIGNvbXBlbnNhdGUgZm9yIGV4dHJhIGFkanVzdG1lbnQgaW4gZmlyc3QgbG9vcCAqLwotCWlycXMuYmFyYmVyX3BvbGUtLTsKLQotCXJjID0gMDsKLQotCS8qIEhlcmUgd2UgYWN0dWFsbHkgZmluZCB0aGUgZGV2aWNlcyBhbmQgY29uZmlndXJlIHRoZW0gKi8KLQlmb3IgKGRldmljZSA9IDA7IChkZXZpY2UgPD0gMHgxRikgJiYgIXJjOyBkZXZpY2UrKykgewotCQlpcnFzLmJhcmJlcl9wb2xlID0gKGlycXMuYmFyYmVyX3BvbGUgKyAxKSAmIDB4MDM7Ci0KLQkJSUQgPSAweEZGRkZGRkZGOwotCQlwY2lfYnVzLT5udW1iZXIgPSBob2xkX2J1c19ub2RlLT5iYXNlOwotCQlwY2lfYnVzX3JlYWRfY29uZmlnX2R3b3JkIChwY2lfYnVzLCBQQ0lfREVWRk4oZGV2aWNlLCAwKSwgUENJX1ZFTkRPUl9JRCwgJklEKTsKLQkJcGNpX2J1cy0+bnVtYmVyID0gZnVuYy0+YnVzOwotCi0JCWlmIChJRCAhPSAweEZGRkZGRkZGKSB7CSAgLyogIGRldmljZSBQcmVzZW50ICovCi0JCQkvKiBTZXR1cCBzbG90IHN0cnVjdHVyZS4gKi8KLQkJCW5ld19zbG90ID0gcGNpZWhwX3Nsb3RfY3JlYXRlKGhvbGRfYnVzX25vZGUtPmJhc2UpOwotCi0JCQlpZiAobmV3X3Nsb3QgPT0gTlVMTCkgewotCQkJCS8qIE91dCBvZiBtZW1vcnkgKi8KLQkJCQlyYyA9IC1FTk9NRU07Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0KLQkJCW5ld19zbG90LT5idXMgPSBob2xkX2J1c19ub2RlLT5iYXNlOwotCQkJbmV3X3Nsb3QtPmRldmljZSA9IGRldmljZTsKLQkJCW5ld19zbG90LT5mdW5jdGlvbiA9IDA7Ci0JCQluZXdfc2xvdC0+aXNfYV9ib2FyZCA9IDE7Ci0JCQluZXdfc2xvdC0+c3RhdHVzID0gMDsKLQotCQkJcmMgPSBjb25maWd1cmVfbmV3X2RldmljZShjdHJsLCBuZXdfc2xvdCwgMSwKLQkJCQkJJnRlbXBfcmVzb3VyY2VzLCBmdW5jLT5idXMsCi0JCQkJCWZ1bmMtPmRldmljZSk7Ci0JCQlkYmcoImNvbmZpZ3VyZV9uZXdfZGV2aWNlIHJjPTB4JXhcbiIscmMpOwotCQl9CS8qIEVuZCBvZiBJRiAoZGV2aWNlIGluIHNsb3Q/KSAqLwotCX0JCS8qIEVuZCBvZiBGT1IgbG9vcCAqLwotCi0JaWYgKHJjKSB7Ci0JCXBjaWVocF9kZXN0cm95X3Jlc291cmNlX2xpc3QoJnRlbXBfcmVzb3VyY2VzKTsKLQotCQlyZXR1cm5fcmVzb3VyY2UoJihyZXNvdXJjZXMtPmJ1c19oZWFkKSwgaG9sZF9idXNfbm9kZSk7Ci0JCXJldHVybl9yZXNvdXJjZSgmKHJlc291cmNlcy0+aW9faGVhZCksIGhvbGRfSU9fbm9kZSk7Ci0JCXJldHVybl9yZXNvdXJjZSgmKHJlc291cmNlcy0+bWVtX2hlYWQpLCBob2xkX21lbV9ub2RlKTsKLQkJcmV0dXJuX3Jlc291cmNlKCYocmVzb3VyY2VzLT5wX21lbV9oZWFkKSwgaG9sZF9wX21lbV9ub2RlKTsKLQkJcmV0dXJuKHJjKTsKLQl9Ci0KLQkvKiBzYXZlIHRoZSBpbnRlcnJ1cHQgcm91dGluZyBpbmZvcm1hdGlvbiAqLwotCWlmIChyZXNvdXJjZXMtPmlycXMpIHsKLQkJcmVzb3VyY2VzLT5pcnFzLT5pbnRlcnJ1cHRbMF0gPSBpcnFzLmludGVycnVwdFswXTsKLQkJcmVzb3VyY2VzLT5pcnFzLT5pbnRlcnJ1cHRbMV0gPSBpcnFzLmludGVycnVwdFsxXTsKLQkJcmVzb3VyY2VzLT5pcnFzLT5pbnRlcnJ1cHRbMl0gPSBpcnFzLmludGVycnVwdFsyXTsKLQkJcmVzb3VyY2VzLT5pcnFzLT5pbnRlcnJ1cHRbM10gPSBpcnFzLmludGVycnVwdFszXTsKLQkJcmVzb3VyY2VzLT5pcnFzLT52YWxpZF9JTlQgPSBpcnFzLnZhbGlkX0lOVDsKLQl9IGVsc2UgaWYgKCFiZWhpbmRfYnJpZGdlKSB7Ci0JCS8qIFdlIG5lZWQgdG8gaG9vayB1cCB0aGUgaW50ZXJydXB0cyBoZXJlICovCi0JCWZvciAoY2xvb3AgPSAwOyBjbG9vcCA8IDQ7IGNsb29wKyspIHsKLQkJCWlmIChpcnFzLnZhbGlkX0lOVCAmICgweDAxIDw8IGNsb29wKSkgewotCQkJCXJjID0gcGNpZWhwX3NldF9pcnEoZnVuYy0+YnVzLCBmdW5jLT5kZXZpY2UsCi0JCQkJCQkJMHgwQSArIGNsb29wLCBpcnFzLmludGVycnVwdFtjbG9vcF0pOwotCQkJCWlmIChyYykgewotCQkJCQlwY2llaHBfZGVzdHJveV9yZXNvdXJjZV9saXN0ICgmdGVtcF9yZXNvdXJjZXMpOwotCQkJCQlyZXR1cm5fcmVzb3VyY2UoJihyZXNvdXJjZXMtPmJ1c19oZWFkKSwgaG9sZF9idXNfbm9kZSk7Ci0JCQkJCXJldHVybl9yZXNvdXJjZSgmKHJlc291cmNlcy0+aW9faGVhZCksIGhvbGRfSU9fbm9kZSk7Ci0JCQkJCXJldHVybl9yZXNvdXJjZSgmKHJlc291cmNlcy0+bWVtX2hlYWQpLCBob2xkX21lbV9ub2RlKTsKLQkJCQkJcmV0dXJuX3Jlc291cmNlKCYocmVzb3VyY2VzLT5wX21lbV9oZWFkKSwgaG9sZF9wX21lbV9ub2RlKTsKLQkJCQkJcmV0dXJuIHJjOwotCQkJCX0KLQkJCX0KLQkJfQkvKiBlbmQgb2YgZm9yIGxvb3AgKi8KLQl9Ci0KLQkvKiBSZXR1cm4gdW51c2VkIGJ1cyByZXNvdXJjZXMKLQkgKiBGaXJzdCB1c2UgdGhlIHRlbXBvcmFyeSBub2RlIHRvIHN0b3JlIGluZm9ybWF0aW9uIGZvciB0aGUgYm9hcmQKLQkgKi8KLQlpZiAoaG9sZF9idXNfbm9kZSAmJiBidXNfbm9kZSAmJiB0ZW1wX3Jlc291cmNlcy5idXNfaGVhZCkgewotCQlob2xkX2J1c19ub2RlLT5sZW5ndGggPSBidXNfbm9kZS0+YmFzZSAtIGhvbGRfYnVzX25vZGUtPmJhc2U7Ci0KLQkJaG9sZF9idXNfbm9kZS0+bmV4dCA9IGZ1bmMtPmJ1c19oZWFkOwotCQlmdW5jLT5idXNfaGVhZCA9IGhvbGRfYnVzX25vZGU7Ci0KLQkJdGVtcF9ieXRlID0gKHU4KSh0ZW1wX3Jlc291cmNlcy5idXNfaGVhZC0+YmFzZSAtIDEpOwotCi0JCS8qIHNldCBzdWJvcmRpbmF0ZSBidXMgKi8KLQkJZGJnKCJyZS1zZXQgc3Vib3JkaW5hdGUgYnVzID0gMHgleFxuIiwgdGVtcF9ieXRlKTsKLQkJcmMgPSBwY2lfYnVzX3dyaXRlX2NvbmZpZ19ieXRlIChwY2lfYnVzLCBkZXZmbiwgUENJX1NVQk9SRElOQVRFX0JVUywgdGVtcF9ieXRlKTsKLQotCQlpZiAodGVtcF9yZXNvdXJjZXMuYnVzX2hlYWQtPmxlbmd0aCA9PSAwKSB7Ci0JCQlrZnJlZSh0ZW1wX3Jlc291cmNlcy5idXNfaGVhZCk7Ci0JCQl0ZW1wX3Jlc291cmNlcy5idXNfaGVhZCA9IE5VTEw7Ci0JCX0gZWxzZSB7Ci0JCQlkYmcoInJldHVybiBidXMgcmVzIG9mIGI6ZCgweCV4OiV4KSBiYXNlOmxlbigweCV4OiV4KVxuIiwKLQkJCQlmdW5jLT5idXMsIGZ1bmMtPmRldmljZSwgdGVtcF9yZXNvdXJjZXMuYnVzX2hlYWQtPmJhc2UsIHRlbXBfcmVzb3VyY2VzLmJ1c19oZWFkLT5sZW5ndGgpOwotCQkJcmV0dXJuX3Jlc291cmNlKCYocmVzb3VyY2VzLT5idXNfaGVhZCksIHRlbXBfcmVzb3VyY2VzLmJ1c19oZWFkKTsKLQkJfQotCX0KLQotCS8qIElmIHdlIGhhdmUgSU8gc3BhY2UgYXZhaWxhYmxlIGFuZCB0aGVyZSBpcyBzb21lIGxlZnQsCi0JICogcmV0dXJuIHRoZSB1bnVzZWQgcG9ydGlvbgotCSAqLwotCWlmIChob2xkX0lPX25vZGUgJiYgdGVtcF9yZXNvdXJjZXMuaW9faGVhZCkgewotCQlpb19ub2RlID0gZG9fcHJlX2JyaWRnZV9yZXNvdXJjZV9zcGxpdCgmKHRlbXBfcmVzb3VyY2VzLmlvX2hlYWQpLAotCQkJCQkJCSZob2xkX0lPX25vZGUsIDB4MTAwMCk7Ci0KLQkJLyogQ2hlY2sgaWYgd2Ugd2VyZSBhYmxlIHRvIHNwbGl0IHNvbWV0aGluZyBvZmYgKi8KLQkJaWYgKGlvX25vZGUpIHsKLQkJCWhvbGRfSU9fbm9kZS0+YmFzZSA9IGlvX25vZGUtPmJhc2UgKyBpb19ub2RlLT5sZW5ndGg7Ci0KLQkJCVJFU19DSEVDSyhob2xkX0lPX25vZGUtPmJhc2UsIDgpOwotCQkJdGVtcF9ieXRlID0gKHU4KSgoaG9sZF9JT19ub2RlLT5iYXNlKSA+PiA4KTsKLQkJCXJjID0gcGNpX2J1c193cml0ZV9jb25maWdfYnl0ZSAocGNpX2J1cywgZGV2Zm4sIFBDSV9JT19CQVNFLCB0ZW1wX2J5dGUpOwotCi0JCQlyZXR1cm5fcmVzb3VyY2UoJihyZXNvdXJjZXMtPmlvX2hlYWQpLCBpb19ub2RlKTsKLQkJfQotCi0JCWlvX25vZGUgPSBkb19icmlkZ2VfcmVzb3VyY2Vfc3BsaXQoJih0ZW1wX3Jlc291cmNlcy5pb19oZWFkKSwgMHgxMDAwKTsKLQotCQkvKiAgQ2hlY2sgaWYgd2Ugd2VyZSBhYmxlIHRvIHNwbGl0IHNvbWV0aGluZyBvZmYgKi8KLQkJaWYgKGlvX25vZGUpIHsKLQkJCS8qIEZpcnN0IHVzZSB0aGUgdGVtcG9yYXJ5IG5vZGUgdG8gc3RvcmUgaW5mb3JtYXRpb24gZm9yIHRoZSBib2FyZCAqLwotCQkJaG9sZF9JT19ub2RlLT5sZW5ndGggPSBpb19ub2RlLT5iYXNlIC0gaG9sZF9JT19ub2RlLT5iYXNlOwotCi0JCQkvKiBJZiB3ZSB1c2VkIGFueSwgYWRkIGl0IHRvIHRoZSBib2FyZCdzIGxpc3QgKi8KLQkJCWlmIChob2xkX0lPX25vZGUtPmxlbmd0aCkgewotCQkJCWhvbGRfSU9fbm9kZS0+bmV4dCA9IGZ1bmMtPmlvX2hlYWQ7Ci0JCQkJZnVuYy0+aW9faGVhZCA9IGhvbGRfSU9fbm9kZTsKLQotCQkJCVJFU19DSEVDSyhpb19ub2RlLT5iYXNlIC0gMSwgOCk7Ci0JCQkJdGVtcF9ieXRlID0gKHU4KSgoaW9fbm9kZS0+YmFzZSAtIDEpID4+IDgpOwotCQkJCXJjID0gcGNpX2J1c193cml0ZV9jb25maWdfYnl0ZSAocGNpX2J1cywgZGV2Zm4sIFBDSV9JT19MSU1JVCwgdGVtcF9ieXRlKTsKLQotCQkJCXJldHVybl9yZXNvdXJjZSgmKHJlc291cmNlcy0+aW9faGVhZCksIGlvX25vZGUpOwotCQkJfSBlbHNlIHsKLQkJCQkvKiBpdCBkb2Vzbid0IG5lZWQgYW55IElPICovCi0JCQkJdGVtcF9ieXRlID0gMHgwMDsKLQkJCQlyYyA9IHBjaV9idXNfd3JpdGVfY29uZmlnX2J5dGUocGNpX2J1cywgZGV2Zm4sIFBDSV9JT19MSU1JVCwgdGVtcF9ieXRlKTsKLQotCQkJCXJldHVybl9yZXNvdXJjZSgmKHJlc291cmNlcy0+aW9faGVhZCksIGlvX25vZGUpOwotCQkJCWtmcmVlKGhvbGRfSU9fbm9kZSk7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQkvKiBpdCB1c2VkIG1vc3Qgb2YgdGhlIHJhbmdlICovCi0JCQlob2xkX0lPX25vZGUtPm5leHQgPSBmdW5jLT5pb19oZWFkOwotCQkJZnVuYy0+aW9faGVhZCA9IGhvbGRfSU9fbm9kZTsKLQkJfQotCX0gZWxzZSBpZiAoaG9sZF9JT19ub2RlKSB7Ci0JCS8qIGl0IHVzZWQgdGhlIHdob2xlIHJhbmdlICovCi0JCWhvbGRfSU9fbm9kZS0+bmV4dCA9IGZ1bmMtPmlvX2hlYWQ7Ci0JCWZ1bmMtPmlvX2hlYWQgPSBob2xkX0lPX25vZGU7Ci0JfQotCi0JLyogSWYgd2UgaGF2ZSBtZW1vcnkgc3BhY2UgYXZhaWxhYmxlIGFuZCB0aGVyZSBpcyBzb21lIGxlZnQsCi0JICogcmV0dXJuIHRoZSB1bnVzZWQgcG9ydGlvbgotCSAqLwotCWlmIChob2xkX21lbV9ub2RlICYmIHRlbXBfcmVzb3VyY2VzLm1lbV9oZWFkKSB7Ci0JCW1lbV9ub2RlID0gZG9fcHJlX2JyaWRnZV9yZXNvdXJjZV9zcGxpdCgmKHRlbXBfcmVzb3VyY2VzLm1lbV9oZWFkKSwgJmhvbGRfbWVtX25vZGUsIDB4MTAwMDAwTCk7Ci0KLQkJLyogQ2hlY2sgaWYgd2Ugd2VyZSBhYmxlIHRvIHNwbGl0IHNvbWV0aGluZyBvZmYgKi8KLQkJaWYgKG1lbV9ub2RlKSB7Ci0JCQlob2xkX21lbV9ub2RlLT5iYXNlID0gbWVtX25vZGUtPmJhc2UgKyBtZW1fbm9kZS0+bGVuZ3RoOwotCi0JCQlSRVNfQ0hFQ0soaG9sZF9tZW1fbm9kZS0+YmFzZSwgMTYpOwotCQkJdGVtcF93b3JkID0gKHUxNikoKGhvbGRfbWVtX25vZGUtPmJhc2UpID4+IDE2KTsKLQkJCXJjID0gcGNpX2J1c193cml0ZV9jb25maWdfd29yZCAocGNpX2J1cywgZGV2Zm4sIFBDSV9NRU1PUllfQkFTRSwgdGVtcF93b3JkKTsKLQotCQkJcmV0dXJuX3Jlc291cmNlKCYocmVzb3VyY2VzLT5tZW1faGVhZCksIG1lbV9ub2RlKTsKLQkJfQotCi0JCW1lbV9ub2RlID0gZG9fYnJpZGdlX3Jlc291cmNlX3NwbGl0KCYodGVtcF9yZXNvdXJjZXMubWVtX2hlYWQpLCAweDEwMDAwMEwpOwotCi0JCS8qIENoZWNrIGlmIHdlIHdlcmUgYWJsZSB0byBzcGxpdCBzb21ldGhpbmcgb2ZmICovCi0JCWlmIChtZW1fbm9kZSkgewotCQkJLyogRmlyc3QgdXNlIHRoZSB0ZW1wb3Jhcnkgbm9kZSB0byBzdG9yZSBpbmZvcm1hdGlvbiBmb3IgdGhlIGJvYXJkICovCi0JCQlob2xkX21lbV9ub2RlLT5sZW5ndGggPSBtZW1fbm9kZS0+YmFzZSAtIGhvbGRfbWVtX25vZGUtPmJhc2U7Ci0KLQkJCWlmIChob2xkX21lbV9ub2RlLT5sZW5ndGgpIHsKLQkJCQlob2xkX21lbV9ub2RlLT5uZXh0ID0gZnVuYy0+bWVtX2hlYWQ7Ci0JCQkJZnVuYy0+bWVtX2hlYWQgPSBob2xkX21lbV9ub2RlOwotCi0JCQkJLyogY29uZmlndXJlIGVuZCBhZGRyZXNzICovCi0JCQkJUkVTX0NIRUNLKG1lbV9ub2RlLT5iYXNlIC0gMSwgMTYpOwotCQkJCXRlbXBfd29yZCA9ICh1MTYpKChtZW1fbm9kZS0+YmFzZSAtIDEpID4+IDE2KTsKLQkJCQlyYyA9IHBjaV9idXNfd3JpdGVfY29uZmlnX3dvcmQgKHBjaV9idXMsIGRldmZuLCBQQ0lfTUVNT1JZX0xJTUlULCB0ZW1wX3dvcmQpOwotCi0JCQkJLyogUmV0dXJuIHVudXNlZCByZXNvdXJjZXMgdG8gdGhlIHBvb2wgKi8KLQkJCQlyZXR1cm5fcmVzb3VyY2UoJihyZXNvdXJjZXMtPm1lbV9oZWFkKSwgbWVtX25vZGUpOwotCQkJfSBlbHNlIHsKLQkJCQkvKiBpdCBkb2Vzbid0IG5lZWQgYW55IE1lbSAqLwotCQkJCXRlbXBfd29yZCA9IDB4MDAwMDsKLQkJCQlyYyA9IHBjaV9idXNfd3JpdGVfY29uZmlnX3dvcmQgKHBjaV9idXMsIGRldmZuLCBQQ0lfTUVNT1JZX0xJTUlULCB0ZW1wX3dvcmQpOwotCi0JCQkJcmV0dXJuX3Jlc291cmNlKCYocmVzb3VyY2VzLT5tZW1faGVhZCksIG1lbV9ub2RlKTsKLQkJCQlrZnJlZShob2xkX21lbV9ub2RlKTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCS8qIGl0IHVzZWQgbW9zdCBvZiB0aGUgcmFuZ2UgKi8KLQkJCWhvbGRfbWVtX25vZGUtPm5leHQgPSBmdW5jLT5tZW1faGVhZDsKLQkJCWZ1bmMtPm1lbV9oZWFkID0gaG9sZF9tZW1fbm9kZTsKLQkJfQotCX0gZWxzZSBpZiAoaG9sZF9tZW1fbm9kZSkgewotCQkvKiBpdCB1c2VkIHRoZSB3aG9sZSByYW5nZSAqLwotCQlob2xkX21lbV9ub2RlLT5uZXh0ID0gZnVuYy0+bWVtX2hlYWQ7Ci0JCWZ1bmMtPm1lbV9oZWFkID0gaG9sZF9tZW1fbm9kZTsKLQl9Ci0KLQkvKiBJZiB3ZSBoYXZlIHByZWZldGNoYWJsZSBtZW1vcnkgc3BhY2UgYXZhaWxhYmxlIGFuZCB0aGVyZSBpcyBzb21lIAotCSAqIGxlZnQgYXQgdGhlIGVuZCwgcmV0dXJuIHRoZSB1bnVzZWQgcG9ydGlvbgotCSAqLwotCWlmIChob2xkX3BfbWVtX25vZGUgJiYgdGVtcF9yZXNvdXJjZXMucF9tZW1faGVhZCkgewotCQlwX21lbV9ub2RlID0gZG9fcHJlX2JyaWRnZV9yZXNvdXJjZV9zcGxpdCgmKHRlbXBfcmVzb3VyY2VzLnBfbWVtX2hlYWQpLAotCQkJCQkJCQkmaG9sZF9wX21lbV9ub2RlLCAweDEwMDAwMEwpOwotCi0JCS8qIENoZWNrIGlmIHdlIHdlcmUgYWJsZSB0byBzcGxpdCBzb21ldGhpbmcgb2ZmICovCi0JCWlmIChwX21lbV9ub2RlKSB7Ci0JCQlob2xkX3BfbWVtX25vZGUtPmJhc2UgPSBwX21lbV9ub2RlLT5iYXNlICsgcF9tZW1fbm9kZS0+bGVuZ3RoOwotCi0JCQlSRVNfQ0hFQ0soaG9sZF9wX21lbV9ub2RlLT5iYXNlLCAxNik7Ci0JCQl0ZW1wX3dvcmQgPSAodTE2KSgoaG9sZF9wX21lbV9ub2RlLT5iYXNlKSA+PiAxNik7Ci0JCQlyYyA9IHBjaV9idXNfd3JpdGVfY29uZmlnX3dvcmQgKHBjaV9idXMsIGRldmZuLCBQQ0lfUFJFRl9NRU1PUllfQkFTRSwgdGVtcF93b3JkKTsKLQotCQkJcmV0dXJuX3Jlc291cmNlKCYocmVzb3VyY2VzLT5wX21lbV9oZWFkKSwgcF9tZW1fbm9kZSk7Ci0JCX0KLQotCQlwX21lbV9ub2RlID0gZG9fYnJpZGdlX3Jlc291cmNlX3NwbGl0KCYodGVtcF9yZXNvdXJjZXMucF9tZW1faGVhZCksIDB4MTAwMDAwTCk7Ci0KLQkJLyogQ2hlY2sgaWYgd2Ugd2VyZSBhYmxlIHRvIHNwbGl0IHNvbWV0aGluZyBvZmYgKi8KLQkJaWYgKHBfbWVtX25vZGUpIHsKLQkJCS8qIEZpcnN0IHVzZSB0aGUgdGVtcG9yYXJ5IG5vZGUgdG8gc3RvcmUgaW5mb3JtYXRpb24gZm9yIHRoZSBib2FyZCAqLwotCQkJaG9sZF9wX21lbV9ub2RlLT5sZW5ndGggPSBwX21lbV9ub2RlLT5iYXNlIC0gaG9sZF9wX21lbV9ub2RlLT5iYXNlOwotCi0JCQkvKiBJZiB3ZSB1c2VkIGFueSwgYWRkIGl0IHRvIHRoZSBib2FyZCdzIGxpc3QgKi8KLQkJCWlmIChob2xkX3BfbWVtX25vZGUtPmxlbmd0aCkgewotCQkJCWhvbGRfcF9tZW1fbm9kZS0+bmV4dCA9IGZ1bmMtPnBfbWVtX2hlYWQ7Ci0JCQkJZnVuYy0+cF9tZW1faGVhZCA9IGhvbGRfcF9tZW1fbm9kZTsKLQotCQkJCVJFU19DSEVDSyhwX21lbV9ub2RlLT5iYXNlIC0gMSwgMTYpOwotCQkJCXRlbXBfd29yZCA9ICh1MTYpKChwX21lbV9ub2RlLT5iYXNlIC0gMSkgPj4gMTYpOwotCQkJCXJjID0gcGNpX2J1c193cml0ZV9jb25maWdfd29yZCAocGNpX2J1cywgZGV2Zm4sIFBDSV9QUkVGX01FTU9SWV9MSU1JVCwgdGVtcF93b3JkKTsKLQotCQkJCXJldHVybl9yZXNvdXJjZSgmKHJlc291cmNlcy0+cF9tZW1faGVhZCksIHBfbWVtX25vZGUpOwotCQkJfSBlbHNlIHsKLQkJCQkvKiBpdCBkb2Vzbid0IG5lZWQgYW55IFBNZW0gKi8KLQkJCQl0ZW1wX3dvcmQgPSAweDAwMDA7Ci0JCQkJcmMgPSBwY2lfYnVzX3dyaXRlX2NvbmZpZ193b3JkIChwY2lfYnVzLCBkZXZmbiwgUENJX1BSRUZfTUVNT1JZX0xJTUlULCB0ZW1wX3dvcmQpOwotCi0JCQkJcmV0dXJuX3Jlc291cmNlKCYocmVzb3VyY2VzLT5wX21lbV9oZWFkKSwgcF9tZW1fbm9kZSk7Ci0JCQkJa2ZyZWUoaG9sZF9wX21lbV9ub2RlKTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCS8qIGl0IHVzZWQgdGhlIG1vc3Qgb2YgdGhlIHJhbmdlICovCi0JCQlob2xkX3BfbWVtX25vZGUtPm5leHQgPSBmdW5jLT5wX21lbV9oZWFkOwotCQkJZnVuYy0+cF9tZW1faGVhZCA9IGhvbGRfcF9tZW1fbm9kZTsKLQkJfQotCX0gZWxzZSBpZiAoaG9sZF9wX21lbV9ub2RlKSB7Ci0JCS8qIGl0IHVzZWQgdGhlIHdob2xlIHJhbmdlICovCi0JCWhvbGRfcF9tZW1fbm9kZS0+bmV4dCA9IGZ1bmMtPnBfbWVtX2hlYWQ7Ci0JCWZ1bmMtPnBfbWVtX2hlYWQgPSBob2xkX3BfbWVtX25vZGU7Ci0JfQotCi0JLyogV2Ugc2hvdWxkIGJlIGNvbmZpZ3VyaW5nIGFuIElSUSBhbmQgdGhlIGJyaWRnZSdzIGJhc2UgYWRkcmVzcwotCSAqIHJlZ2lzdGVycyBpZiBpdCBuZWVkcyB0aGVtLiAgQWx0aG91Z2ggd2UgaGF2ZSBuZXZlciBzZWVuIHN1Y2gKLQkgKiBhIGRldmljZQotCSAqLwotCi0JcGNpZWhwcm1fZW5hYmxlX2NhcmQoY3RybCwgZnVuYywgUENJX0hFQURFUl9UWVBFX0JSSURHRSk7Ci0KLQlkYmcoIlBDSSBCcmlkZ2UgSG90LUFkZGVkIHM6YjpkOmYoJTAyeDolMDJ4OiUwMng6JTAyeClcbiIsIGN0cmwtPnNlZywgZnVuYy0+YnVzLCBmdW5jLT5kZXZpY2UsIGZ1bmMtPmZ1bmN0aW9uKTsKLQotCXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBjb25maWd1cmVfbmV3X2Z1bmN0aW9uIC0gQ29uZmlndXJlcyB0aGUgUENJIGhlYWRlciBpbmZvcm1hdGlvbiBvZiBvbmUgZGV2aWNlCi0gKgotICogQGN0cmw6IHBvaW50ZXIgdG8gY29udHJvbGxlciBzdHJ1Y3R1cmUKLSAqIEBmdW5jOiBwb2ludGVyIHRvIGZ1bmN0aW9uIHN0cnVjdHVyZQotICogQGJlaGluZF9icmlkZ2U6IDEgaWYgdGhpcyBpcyBhIHJlY3Vyc2l2ZSBjYWxsLCAwIGlmIG5vdAotICogQHJlc291cmNlczogcG9pbnRlciB0byBzZXQgb2YgcmVzb3VyY2UgbGlzdHMKLSAqCi0gKiBDYWxscyBpdHNlbGYgcmVjdXJzaXZlbHkgZm9yIGJyaWRnZWQgZGV2aWNlcy4KLSAqIFJldHVybnMgMCBpZiBzdWNjZXNzCi0gKgotICovCi1zdGF0aWMgaW50Ci1jb25maWd1cmVfbmV3X2Z1bmN0aW9uKHN0cnVjdCBjb250cm9sbGVyICpjdHJsLCBzdHJ1Y3QgcGNpX2Z1bmMgKmZ1bmMsCi0JCXU4IGJlaGluZF9icmlkZ2UsIHN0cnVjdCByZXNvdXJjZV9saXN0cyAqcmVzb3VyY2VzLAotCQl1OCBicmlkZ2VfYnVzLCB1OCBicmlkZ2VfZGV2KQotewotCWludCBjbG9vcDsKLQl1OCB0ZW1wX2J5dGU7Ci0JdTggY2xhc3NfY29kZTsKLQl1MzIgcmM7Ci0JdTMyIHRlbXBfcmVnaXN0ZXI7Ci0JdTMyIGJhc2U7Ci0JdW5zaWduZWQgaW50IGRldmZuOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKm1lbV9ub2RlOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKmlvX25vZGU7Ci0Jc3RydWN0IHBjaV9idXMgbHBjaV9idXMsICpwY2lfYnVzOwotCi0JbWVtY3B5KCZscGNpX2J1cywgY3RybC0+cGNpX2Rldi0+c3Vib3JkaW5hdGUsIHNpemVvZihscGNpX2J1cykpOwotCXBjaV9idXMgPSAmbHBjaV9idXM7Ci0JcGNpX2J1cy0+bnVtYmVyID0gZnVuYy0+YnVzOwotCWRldmZuID0gUENJX0RFVkZOKGZ1bmMtPmRldmljZSwgZnVuYy0+ZnVuY3Rpb24pOwotCi0JLyogQ2hlY2sgZm9yIEJyaWRnZSAqLwotCXJjID0gcGNpX2J1c19yZWFkX2NvbmZpZ19ieXRlKHBjaV9idXMsIGRldmZuLCBQQ0lfSEVBREVSX1RZUEUsICZ0ZW1wX2J5dGUpOwotCWlmIChyYykKLQkJcmV0dXJuIHJjOwotCWRiZygiJXM6IGJ1cyAleCBkZXYgJXggZnVuYyAleCB0ZW1wX2J5dGUgPSAleFxuIiwgX19GVU5DVElPTl9fLAotCQlmdW5jLT5idXMsIGZ1bmMtPmRldmljZSwgZnVuYy0+ZnVuY3Rpb24sIHRlbXBfYnl0ZSk7Ci0KLQlpZiAoKHRlbXBfYnl0ZSAmIDB4N0YpID09IFBDSV9IRUFERVJfVFlQRV9CUklER0UpIHsgLyogUENJLVBDSSBCcmlkZ2UgKi8KLQkJcmMgPSBjb25maWd1cmVfbmV3X2JyaWRnZShjdHJsLCBmdW5jLCBiZWhpbmRfYnJpZGdlLCByZXNvdXJjZXMsCi0JCQkJCQlwY2lfYnVzKTsKLQotCQlpZiAocmMpCi0JCQlyZXR1cm4gcmM7Ci0JfSBlbHNlIGlmICgodGVtcF9ieXRlICYgMHg3RikgPT0gUENJX0hFQURFUl9UWVBFX05PUk1BTCkgewotCQkvKiBTdGFuZGFyZCBkZXZpY2UgKi8KLQkJdTY0CWJhc2U2NDsKLQkJcmMgPSBwY2lfYnVzX3JlYWRfY29uZmlnX2J5dGUocGNpX2J1cywgZGV2Zm4sIDB4MEIsICZjbGFzc19jb2RlKTsKLQotCQlpZiAoY2xhc3NfY29kZSA9PSBQQ0lfQkFTRV9DTEFTU19ESVNQTEFZKQotCQkJcmV0dXJuIERFVklDRV9UWVBFX05PVF9TVVBQT1JURUQ7Ci0KLQkJLyogRmlndXJlIG91dCBJTyBhbmQgbWVtb3J5IG5lZWRzICovCi0JCWZvciAoY2xvb3AgPSBQQ0lfQkFTRV9BRERSRVNTXzA7IGNsb29wIDw9IFBDSV9CQVNFX0FERFJFU1NfNTsgY2xvb3AgKz0gNCkgewotCQkJdGVtcF9yZWdpc3RlciA9IDB4RkZGRkZGRkY7Ci0KLQkJCXJjID0gcGNpX2J1c193cml0ZV9jb25maWdfZHdvcmQgKHBjaV9idXMsIGRldmZuLCBjbG9vcCwgdGVtcF9yZWdpc3Rlcik7Ci0JCQlyYyA9IHBjaV9idXNfcmVhZF9jb25maWdfZHdvcmQocGNpX2J1cywgZGV2Zm4sIGNsb29wLCAmdGVtcF9yZWdpc3Rlcik7Ci0JCQlkYmcoIkJhclsleF09MHgleCBvbiBidXM6ZGV2OmZ1bmMoMHgleDoleDoleClcbiIsIGNsb29wLCB0ZW1wX3JlZ2lzdGVyLCAKLQkJCQlmdW5jLT5idXMsIGZ1bmMtPmRldmljZSwgZnVuYy0+ZnVuY3Rpb24pOwotCi0JCQlpZiAoIXRlbXBfcmVnaXN0ZXIpCi0JCQkJY29udGludWU7Ci0KLQkJCWJhc2U2NCA9IDBMOwotCQkJaWYgKHRlbXBfcmVnaXN0ZXIgJiBQQ0lfQkFTRV9BRERSRVNTX1NQQUNFX0lPKSB7Ci0JCQkJLyogTWFwIElPICovCi0KLQkJCQkvKiBzZXQgYmFzZSA9IGFtb3VudCBvZiBJTyBzcGFjZSAqLwotCQkJCWJhc2UgPSB0ZW1wX3JlZ2lzdGVyICYgMHhGRkZGRkZGQzsKLQkJCQliYXNlID0gfmJhc2UgKyAxOwotCi0JCQkJZGJnKCJORUVEIElPIGxlbmd0aCgweCV4KVxuIiwgYmFzZSk7Ci0JCQkJaW9fbm9kZSA9IGdldF9pb19yZXNvdXJjZSgmKHJlc291cmNlcy0+aW9faGVhZCksKHVsb25nKWJhc2UpOwotCi0JCQkJLyogYWxsb2NhdGUgdGhlIHJlc291cmNlIHRvIHRoZSBib2FyZCAqLwotCQkJCWlmIChpb19ub2RlKSB7Ci0JCQkJCWRiZygiR290IElPIGJhc2U9MHgleChsZW5ndGg9MHgleClcbiIsIGlvX25vZGUtPmJhc2UsIGlvX25vZGUtPmxlbmd0aCk7Ci0JCQkJCWJhc2UgPSAodTMyKWlvX25vZGUtPmJhc2U7Ci0JCQkJCWlvX25vZGUtPm5leHQgPSBmdW5jLT5pb19oZWFkOwotCQkJCQlmdW5jLT5pb19oZWFkID0gaW9fbm9kZTsKLQkJCQl9IGVsc2UgewotCQkJCQllcnIoIkdvdCBOTyBJTyByZXNvdXJjZShsZW5ndGg9MHgleClcbiIsIGJhc2UpOwotCQkJCQlyZXR1cm4gLUVOT01FTTsKLQkJCQl9Ci0JCQl9IGVsc2UgewkvKiBtYXAgTUVNICovCi0JCQkJaW50IHByZWZldGNoYWJsZSA9IDE7Ci0JCQkJc3RydWN0IHBjaV9yZXNvdXJjZSAqKnJlc19ub2RlID0gJmZ1bmMtPnBfbWVtX2hlYWQ7Ci0JCQkJY2hhciAqcmVzX3R5cGVfc3RyID0gIlBNRU0iOwotCQkJCXUzMgl0ZW1wX3JlZ2lzdGVyMjsKLQotCQkJCWlmICghKHRlbXBfcmVnaXN0ZXIgJiBQQ0lfQkFTRV9BRERSRVNTX01FTV9QUkVGRVRDSCkpIHsKLQkJCQkJcHJlZmV0Y2hhYmxlID0gMDsKLQkJCQkJcmVzX25vZGUgPSAmZnVuYy0+bWVtX2hlYWQ7Ci0JCQkJCXJlc190eXBlX3N0cisrOwotCQkJCX0KLQotCQkJCWJhc2UgPSB0ZW1wX3JlZ2lzdGVyICYgMHhGRkZGRkZGMDsKLQkJCQliYXNlID0gfmJhc2UgKyAxOwotCi0JCQkJc3dpdGNoICh0ZW1wX3JlZ2lzdGVyICYgUENJX0JBU0VfQUREUkVTU19NRU1fVFlQRV9NQVNLKSB7Ci0JCQkJY2FzZSBQQ0lfQkFTRV9BRERSRVNTX01FTV9UWVBFXzMyOgotCQkJCQlkYmcoIk5FRUQgMzIgJXMgYmFyPTB4JXgobGVuZ3RoPTB4JXgpXG4iLCByZXNfdHlwZV9zdHIsIHRlbXBfcmVnaXN0ZXIsIGJhc2UpOwotCi0JCQkJCWlmIChwcmVmZXRjaGFibGUgJiYgcmVzb3VyY2VzLT5wX21lbV9oZWFkKQotCQkJCQkJbWVtX25vZGU9Z2V0X3Jlc291cmNlKCYocmVzb3VyY2VzLT5wX21lbV9oZWFkKSwgKHVsb25nKWJhc2UpOwotCQkJCQllbHNlIHsKLQkJCQkJCWlmIChwcmVmZXRjaGFibGUpCi0JCQkJCQkJZGJnKCJ1c2luZyBNRU0gZm9yIFBNRU1cbiIpOwotCQkJCQkJbWVtX25vZGUgPSBnZXRfcmVzb3VyY2UoJihyZXNvdXJjZXMtPm1lbV9oZWFkKSwgKHVsb25nKWJhc2UpOwotCQkJCQl9Ci0KLQkJCQkJLyogYWxsb2NhdGUgdGhlIHJlc291cmNlIHRvIHRoZSBib2FyZCAqLwotCQkJCQlpZiAobWVtX25vZGUpIHsKLQkJCQkJCWJhc2UgPSAodTMyKW1lbV9ub2RlLT5iYXNlOyAKLQkJCQkJCW1lbV9ub2RlLT5uZXh0ID0gKnJlc19ub2RlOwotCQkJCQkJKnJlc19ub2RlID0gbWVtX25vZGU7Ci0JCQkJCQlkYmcoIkdvdCAzMiAlcyBiYXNlPTB4JXgobGVuZ3RoPTB4JXgpXG4iLCByZXNfdHlwZV9zdHIsIG1lbV9ub2RlLT5iYXNlLCAKLQkJCQkJCQltZW1fbm9kZS0+bGVuZ3RoKTsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCWVycigiR290IE5PIDMyICVzIHJlc291cmNlKGxlbmd0aD0weCV4KVxuIiwgcmVzX3R5cGVfc3RyLCBiYXNlKTsKLQkJCQkJCXJldHVybiAtRU5PTUVNOwotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgUENJX0JBU0VfQUREUkVTU19NRU1fVFlQRV82NDoKLQkJCQkJcmMgPSBwY2lfYnVzX3JlYWRfY29uZmlnX2R3b3JkKHBjaV9idXMsIGRldmZuLCBjbG9vcCs0LCAmdGVtcF9yZWdpc3RlcjIpOwotCQkJCQlkYmcoIk5FRUQgNjQgJXMgYmFyPTB4JXg6JXgobGVuZ3RoPTB4JXgpXG4iLCByZXNfdHlwZV9zdHIsIHRlbXBfcmVnaXN0ZXIyLCAKLQkJCQkJCXRlbXBfcmVnaXN0ZXIsIGJhc2UpOwotCi0JCQkJCWlmIChwcmVmZXRjaGFibGUgJiYgcmVzb3VyY2VzLT5wX21lbV9oZWFkKQotCQkJCQkJbWVtX25vZGUgPSBnZXRfcmVzb3VyY2UoJihyZXNvdXJjZXMtPnBfbWVtX2hlYWQpLCAodWxvbmcpYmFzZSk7Ci0JCQkJCWVsc2UgewotCQkJCQkJaWYgKHByZWZldGNoYWJsZSkKLQkJCQkJCQlkYmcoInVzaW5nIE1FTSBmb3IgUE1FTVxuIik7Ci0JCQkJCQltZW1fbm9kZSA9IGdldF9yZXNvdXJjZSgmKHJlc291cmNlcy0+bWVtX2hlYWQpLCAodWxvbmcpYmFzZSk7Ci0JCQkJCX0KLQotCQkJCQkvKiBhbGxvY2F0ZSB0aGUgcmVzb3VyY2UgdG8gdGhlIGJvYXJkICovCi0JCQkJCWlmIChtZW1fbm9kZSkgewotCQkJCQkJYmFzZTY0ID0gbWVtX25vZGUtPmJhc2U7IAotCQkJCQkJbWVtX25vZGUtPm5leHQgPSAqcmVzX25vZGU7Ci0JCQkJCQkqcmVzX25vZGUgPSBtZW1fbm9kZTsKLQkJCQkJCWRiZygiR290IDY0ICVzIGJhc2U9MHgleDoleChsZW5ndGg9JXgpXG4iLCByZXNfdHlwZV9zdHIsICh1MzIpKGJhc2U2NCA+PiAzMiksIAotCQkJCQkJCSh1MzIpYmFzZTY0LCBtZW1fbm9kZS0+bGVuZ3RoKTsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCWVycigiR290IE5PIDY0ICVzIHJlc291cmNlKGxlbmd0aD0weCV4KVxuIiwgcmVzX3R5cGVfc3RyLCBiYXNlKTsKLQkJCQkJCXJldHVybiAtRU5PTUVNOwotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCWRlZmF1bHQ6Ci0JCQkJCWRiZygicmVzZXJ2ZWQgQkFSIHR5cGU9MHgleFxuIiwgdGVtcF9yZWdpc3Rlcik7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQotCQkJfQotCi0JCQlpZiAoYmFzZTY0KSB7Ci0JCQkJcmMgPSBwY2lfYnVzX3dyaXRlX2NvbmZpZ19kd29yZChwY2lfYnVzLCBkZXZmbiwgY2xvb3AsICh1MzIpYmFzZTY0KTsKLQkJCQljbG9vcCArPSA0OwotCQkJCWJhc2U2NCA+Pj0gMzI7Ci0KLQkJCQlpZiAoYmFzZTY0KSB7Ci0JCQkJCWRiZygiJXM6IGhpZ2ggZHdvcmQgb2YgYmFzZTY0KDB4JXgpIHNldCB0byAwXG4iLCBfX0ZVTkNUSU9OX18sICh1MzIpYmFzZTY0KTsKLQkJCQkJYmFzZTY0ID0gMHgwTDsKLQkJCQl9Ci0KLQkJCQlyYyA9IHBjaV9idXNfd3JpdGVfY29uZmlnX2R3b3JkKHBjaV9idXMsIGRldmZuLCBjbG9vcCwgKHUzMiliYXNlNjQpOwotCQkJfSBlbHNlIHsKLQkJCQlyYyA9IHBjaV9idXNfd3JpdGVfY29uZmlnX2R3b3JkKHBjaV9idXMsIGRldmZuLCBjbG9vcCwgYmFzZSk7Ci0JCQl9Ci0JCX0JCS8qIEVuZCBvZiBiYXNlIHJlZ2lzdGVyIGxvb3AgKi8KLQotCQkvKiBkaXNhYmxlIFJPTSBiYXNlIEFkZHJlc3MgKi8KLQkJcmMgPSBwY2lfYnVzX3dyaXRlX2NvbmZpZ19kd29yZCAocGNpX2J1cywgZGV2Zm4sIFBDSV9ST01fQUREUkVTUywgMHgwMCk7Ci0KLQkJLyogU2V0IEhQIHBhcmFtZXRlcnMgKENhY2hlIExpbmUgU2l6ZSwgTGF0ZW5jeSBUaW1lcikgKi8KLQkJcmMgPSBwY2llaHBybV9zZXRfaHBwKGN0cmwsIGZ1bmMsIFBDSV9IRUFERVJfVFlQRV9OT1JNQUwpOwotCQlpZiAocmMpCi0JCQlyZXR1cm4gcmM7Ci0KLQkJcGNpZWhwcm1fZW5hYmxlX2NhcmQoY3RybCwgZnVuYywgUENJX0hFQURFUl9UWVBFX05PUk1BTCk7Ci0KLQkJZGJnKCJQQ0kgZnVuY3Rpb24gSG90LUFkZGVkIHM6YjpkOmYoJTAyeDolMDJ4OiUwMng6JTAyeClcbiIsIGN0cmwtPnNlZywgZnVuYy0+YnVzLCBmdW5jLT5kZXZpY2UsIAotCQkJZnVuYy0+ZnVuY3Rpb24pOwotCX0gIC8qIEVuZCBvZiBOb3QtQS1CcmlkZ2UgZWxzZSAqLwotCWVsc2UgewotCQkvKiBJdCdzIHNvbWUgc3RyYW5nZSB0eXBlIG9mIFBDSSBhZGFwdGVyIChDYXJkYnVzPykgKi8KLQkJcmV0dXJuIERFVklDRV9UWVBFX05PVF9TVVBQT1JURUQ7Ci0JfQotCi0JZnVuYy0+Y29uZmlndXJlZCA9IDE7Ci0KLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2hwYy5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfaHBjLmMKaW5kZXggN2EwZTI3Zi4uNGEzY2VjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfaHBjLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfaHBjLmMKQEAgLTI3LDE2ICsyNywxMCBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgIi4uL3BjaS5oIgogI2luY2x1ZGUgInBjaWVocC5oIgogCkBAIC0yMTcsMjMgKzIxMSw2IEBACiAjZGVmaW5lIE1STF9TVEFURQkJMHgwMDIwCiAjZGVmaW5lIFBSU05fU1RBVEUJCTB4MDA0MAogCi1zdHJ1Y3QgcGhwX2N0bHJfc3RhdGVfcyB7Ci0Jc3RydWN0IHBocF9jdGxyX3N0YXRlX3MgKnBuZXh0OwotCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2OwotCXVuc2lnbmVkIGludCBpcnE7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsJCQkJLyogc3BpbmxvY2sncyAqLwotCXUzMiBzbG90X2RldmljZV9vZmZzZXQ7Ci0JdTMyIG51bV9zbG90czsKLSAgICAJc3RydWN0IHRpbWVyX2xpc3QJaW50X3BvbGxfdGltZXI7CQkvKiBBZGRlZCBmb3IgcG9sbCBldmVudCAqLwotCXBocF9pbnRyX2NhbGxiYWNrX3QgCWF0dGVudGlvbl9idXR0b25fY2FsbGJhY2s7Ci0JcGhwX2ludHJfY2FsbGJhY2tfdCAJc3dpdGNoX2NoYW5nZV9jYWxsYmFjazsKLQlwaHBfaW50cl9jYWxsYmFja190IAlwcmVzZW5jZV9jaGFuZ2VfY2FsbGJhY2s7Ci0JcGhwX2ludHJfY2FsbGJhY2tfdCAJcG93ZXJfZmF1bHRfY2FsbGJhY2s7Ci0Jdm9pZCAJCQkqY2FsbGJhY2tfaW5zdGFuY2VfaWQ7Ci0Jc3RydWN0IGN0cmxfcmVnIAkqY3JlZzsJCQkJLyogUHRyIHRvIGNvbnRyb2xsZXIgcmVnaXN0ZXIgc3BhY2UgKi8KLX07Ci0KLQogc3RhdGljIHNwaW5sb2NrX3QgaHBjX2V2ZW50X2xvY2s7CiAKIERFRklORV9EQkdfQlVGRkVSCQkvKiBEZWJ1ZyBzdHJpbmcgYnVmZmVyIGZvciBlbnRpcmUgSFBDIGRlZmluZWQgaGVyZSAqLwpAQCAtMjk3LDcgKzI3NCw2IEBACiAKIAlEQkdfRU5URVJfUk9VVElORSAKIAkKLQlkYmcoIiVzIDogRW50ZXJcbiIsIF9fRlVOQ1RJT05fXyk7CiAJaWYgKCFwaHBfY3RscikgewogCQllcnIoIiVzOiBJbnZhbGlkIEhQQyBjb250cm9sbGVyIGhhbmRsZSFcbiIsIF9fRlVOQ1RJT05fXyk7CiAJCXJldHVybiAtMTsKQEAgLTMwOCw3ICsyODQsNiBAQAogCQkJZXJyKCIlcyA6IGhwX3JlZ2lzdGVyX3JlYWRfd29yZCBTTE9UX1NUQVRVUyBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CiAJCQlyZXR1cm4gcmV0dmFsOwogCQl9Ci0JZGJnKCIlcyA6IGhwX3JlZ2lzdGVyX3JlYWRfd29yZCBTTE9UX1NUQVRVUyAleFxuIiwgX19GVU5DVElPTl9fLCBzbG90X3N0YXR1cyk7CiAJCiAJaWYgKChzbG90X3N0YXR1cyAmIENNRF9DT01QTEVURUQpID09IENNRF9DT01QTEVURUQgKSB7IAogCQkvKiBBZnRlciAxIHNlYyBhbmQgQ01EX0NPTVBMRVRFRCBzdGlsbCBub3Qgc2V0LCBqdXN0IHByb2NlZWQgZm9yd2FyZCB0byBpc3N1ZSAKQEAgLTMxNiwxNCArMjkxLDExIEBACiAJCWRiZygiJXMgOiBDTURfQ09NUExFVEVEIG5vdCBjbGVhciBhZnRlciAxIHNlYy5cbiIsIF9fRlVOQ1RJT05fXyk7CiAJfQogCi0JZGJnKCIlczogQmVmb3JlIGhwX3JlZ2lzdGVyX3dyaXRlX3dvcmQgU0xPVF9DVFJMICV4XG4iLCBfX0ZVTkNUSU9OX18sIGNtZCk7CiAJcmV0dmFsID0gaHBfcmVnaXN0ZXJfd3JpdGVfd29yZChwaHBfY3Rsci0+cGNpX2RldiwgU0xPVF9DVFJMKHNsb3QtPmN0cmwtPmNhcF9iYXNlKSwgY21kIHwgQ01EX0NNUExfSU5UUl9FTkFCTEUpOwogCWlmIChyZXR2YWwpIHsKIAkJZXJyKCIlcyA6IGhwX3JlZ2lzdGVyX3dyaXRlX3dvcmQgU0xPVF9DVFJMIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKIAkJcmV0dXJuIHJldHZhbDsKIAl9Ci0JZGJnKCIlcyA6IGhwX3JlZ2lzdGVyX3dyaXRlX3dvcmQgU0xPVF9DVFJMICV4XG4iLCBfX0ZVTkNUSU9OX18sIGNtZCB8IENNRF9DTVBMX0lOVFJfRU5BQkxFKTsKLQlkYmcoIiVzIDogRXhpdFxuIiwgX19GVU5DVElPTl9fKTsKIAogCURCR19MRUFWRV9ST1VUSU5FIAogCXJldHVybiByZXR2YWw7CkBAIC01MDksNyArNDgxLDYgQEAKIAl1MTYgc2xvdF9zdGF0dXM7CiAJdTggcHdyX2ZhdWx0OwogCWludCByZXR2YWwgPSAwOwotCXU4IHN0YXR1czsKIAogCURCR19FTlRFUl9ST1VUSU5FIAogCkBAIC01MjEsMTUgKzQ5MiwxMyBAQAogCXJldHZhbCA9IGhwX3JlZ2lzdGVyX3JlYWRfd29yZChwaHBfY3Rsci0+cGNpX2RldiwgU0xPVF9TVEFUVVMoc2xvdC0+Y3RybC0+Y2FwX2Jhc2UpLCBzbG90X3N0YXR1cyk7CiAKIAlpZiAocmV0dmFsKSB7Ci0JCWVycigiJXMgOiBocF9yZWdpc3Rlcl9yZWFkX3dvcmQgU0xPVF9TVEFUVVMgZmFpbGVkXG4iLCBfX0ZVTkNUSU9OX18pOworCQllcnIoIiVzIDogQ2Fubm90IGNoZWNrIGZvciBwb3dlciBmYXVsdFxuIiwgX19GVU5DVElPTl9fKTsKIAkJcmV0dXJuIHJldHZhbDsKIAl9CiAJcHdyX2ZhdWx0ID0gKHU4KSgoc2xvdF9zdGF0dXMgJiBQV1JfRkFVTFRfREVURUNURUQpID4+IDEpOwotCXN0YXR1cyA9IChwd3JfZmF1bHQgIT0gMSkgPyAxIDogMDsKIAkKIAlEQkdfTEVBVkVfUk9VVElORQotCS8qIE5vdGU6IExvZ2ljIDAgPT4gZmF1bHQgKi8KLQlyZXR1cm4gc3RhdHVzOworCXJldHVybiBwd3JfZmF1bHQ7CiB9CiAKIHN0YXRpYyBpbnQgaHBjX3NldF9hdHRlbnRpb25fc3RhdHVzKHN0cnVjdCBzbG90ICpzbG90LCB1OCB2YWx1ZSkKQEAgLTUzOSw3ICs1MDgsOCBAQAogCXUxNiBzbG90X2N0cmw7CiAJaW50IHJjID0gMDsKIAotCWRiZygiJXM6IFxuIiwgX19GVU5DVElPTl9fKTsKKwlEQkdfRU5URVJfUk9VVElORQorCiAJaWYgKCFwaHBfY3RscikgewogCQllcnIoIiVzOiBJbnZhbGlkIEhQQyBjb250cm9sbGVyIGhhbmRsZSFcbiIsIF9fRlVOQ1RJT05fXyk7CiAJCXJldHVybiAtMTsKQEAgLTU1NSw3ICs1MjUsNiBAQAogCQllcnIoIiVzIDogaHBfcmVnaXN0ZXJfcmVhZF93b3JkIFNMT1RfQ1RSTCBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CiAJCXJldHVybiByYzsKIAl9Ci0JZGJnKCIlcyA6IGhwX3JlZ2lzdGVyX3JlYWRfd29yZCBTTE9UX0NUUkwgJXhcbiIsIF9fRlVOQ1RJT05fXywgc2xvdF9jdHJsKTsKIAogCXN3aXRjaCAodmFsdWUpIHsKIAkJY2FzZSAwIDoJLyogdHVybiBvZmYgKi8KQEAgLTU3Niw2ICs1NDUsNyBAQAogCXBjaWVfd3JpdGVfY21kKHNsb3QsIHNsb3RfY21kKTsKIAlkYmcoIiVzOiBTTE9UX0NUUkwgJXggd3JpdGUgY21kICV4XG4iLCBfX0ZVTkNUSU9OX18sIFNMT1RfQ1RSTChzbG90LT5jdHJsLT5jYXBfYmFzZSksIHNsb3RfY21kKTsKIAkKKwlEQkdfTEVBVkVfUk9VVElORQogCXJldHVybiByYzsKIH0KIApAQCAtNTg3LDcgKzU1Nyw4IEBACiAJdTE2IHNsb3RfY3RybDsKIAlpbnQgcmMgPSAwOwogICAgICAgIAkKLQlkYmcoIiVzOiBcbiIsIF9fRlVOQ1RJT05fXyk7CQorCURCR19FTlRFUl9ST1VUSU5FCisKIAlpZiAoIXBocF9jdGxyKSB7CiAJCWVycigiJXM6IEludmFsaWQgSFBDIGNvbnRyb2xsZXIgaGFuZGxlIVxuIiwgX19GVU5DVElPTl9fKTsKIAkJcmV0dXJuIDsKQEAgLTYwNCw3ICs1NzUsNiBAQAogCQllcnIoIiVzIDogaHBfcmVnaXN0ZXJfcmVhZF93b3JkIFNMT1RfQ1RSTCBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CiAJCXJldHVybjsKIAl9Ci0JZGJnKCIlcyA6IGhwX3JlZ2lzdGVyX3JlYWRfd29yZCBTTE9UX0NUUkwgJXhcbiIsIF9fRlVOQ1RJT05fXywgc2xvdF9jdHJsKTsKIAlzbG90X2NtZCA9IChzbG90X2N0cmwgJiB+UFdSX0xFRF9DVFJMKSB8IDB4MDEwMDsKIAlpZiAoIXBjaWVocF9wb2xsX21vZGUpCiAJCXNsb3RfY21kID0gc2xvdF9jbWQgfCBIUF9JTlRSX0VOQUJMRTsgCkBAIC02MTIsNiArNTgyLDcgQEAKIAlwY2llX3dyaXRlX2NtZChzbG90LCBzbG90X2NtZCk7CiAKIAlkYmcoIiVzOiBTTE9UX0NUUkwgJXggd3JpdGUgY21kICV4XG4iLF9fRlVOQ1RJT05fXywgU0xPVF9DVFJMKHNsb3QtPmN0cmwtPmNhcF9iYXNlKSwgc2xvdF9jbWQpOworCURCR19MRUFWRV9ST1VUSU5FCiAJcmV0dXJuOwogfQogCkBAIC02MjIsNyArNTkzLDggQEAKIAl1MTYgc2xvdF9jdHJsOwogCWludCByYyA9IDA7CiAKLQlkYmcoIiVzOiBcbiIsIF9fRlVOQ1RJT05fXyk7CQorCURCR19FTlRFUl9ST1VUSU5FCisKIAlpZiAoIXBocF9jdGxyKSB7CiAJCWVycigiJXM6IEludmFsaWQgSFBDIGNvbnRyb2xsZXIgaGFuZGxlIVxuIiwgX19GVU5DVElPTl9fKTsKIAkJcmV0dXJuIDsKQEAgLTYzOSw3ICs2MTEsNiBAQAogCQllcnIoIiVzIDogaHBfcmVnaXN0ZXJfcmVhZF93b3JkIFNMT1RfQ1RSTCBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CiAJCXJldHVybjsKIAl9Ci0JZGJnKCIlcyA6IGhwX3JlZ2lzdGVyX3JlYWRfd29yZCBTTE9UX0NUUkwgJXhcbiIsIF9fRlVOQ1RJT05fXywgc2xvdF9jdHJsKTsKIAogCXNsb3RfY21kID0gKHNsb3RfY3RybCAmIH5QV1JfTEVEX0NUUkwpIHwgMHgwMzAwOwogCkBAIC02NDgsNiArNjE5LDcgQEAKIAlwY2llX3dyaXRlX2NtZChzbG90LCBzbG90X2NtZCk7CiAJZGJnKCIlczogU0xPVF9DVFJMICV4IHdyaXRlIGNtZCAleFxuIiwgX19GVU5DVElPTl9fLCBTTE9UX0NUUkwoc2xvdC0+Y3RybC0+Y2FwX2Jhc2UpLCBzbG90X2NtZCk7CiAKKwlEQkdfTEVBVkVfUk9VVElORQogCXJldHVybjsKIH0KIApAQCAtNjU4LDcgKzYzMCw4IEBACiAJdTE2IHNsb3RfY3RybDsKIAlpbnQgcmMgPSAwOyAKIAkKLQlkYmcoIiVzOiBcbiIsIF9fRlVOQ1RJT05fXyk7CQorCURCR19FTlRFUl9ST1VUSU5FCisKIAlpZiAoIXBocF9jdGxyKSB7CiAJCWVycigiJXM6IEludmFsaWQgSFBDIGNvbnRyb2xsZXIgaGFuZGxlIVxuIiwgX19GVU5DVElPTl9fKTsKIAkJcmV0dXJuIDsKQEAgLTY3NSw3ICs2NDgsNiBAQAogCQllcnIoIiVzIDogaHBfcmVnaXN0ZXJfcmVhZF93b3JkIFNMT1RfQ1RSTCBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CiAJCXJldHVybjsKIAl9Ci0JZGJnKCIlcyA6IGhwX3JlZ2lzdGVyX3JlYWRfd29yZCBTTE9UX0NUUkwgJXhcbiIsIF9fRlVOQ1RJT05fXywgc2xvdF9jdHJsKTsKIAogCXNsb3RfY21kID0gKHNsb3RfY3RybCAmIH5QV1JfTEVEX0NUUkwpIHwgMHgwMjAwOwogCkBAIC02ODQsNiArNjU2LDcgQEAKIAlwY2llX3dyaXRlX2NtZChzbG90LCBzbG90X2NtZCk7CiAKIAlkYmcoIiVzOiBTTE9UX0NUUkwgJXggd3JpdGUgY21kICV4XG4iLF9fRlVOQ1RJT05fXywgU0xPVF9DVFJMKHNsb3QtPmN0cmwtPmNhcF9iYXNlKSwgc2xvdF9jbWQpOworCURCR19MRUFWRV9ST1VUSU5FCiAJcmV0dXJuOwogfQogCkBAIC03ODAsNyArNzUzLDYgQEAKIAlpbnQgcmV0dmFsID0gMDsKIAogCURCR19FTlRFUl9ST1VUSU5FIAotCWRiZygiJXM6IFxuIiwgX19GVU5DVElPTl9fKTsJCiAKIAlpZiAoIXBocF9jdGxyKSB7CiAJCWVycigiJXM6IEludmFsaWQgSFBDIGNvbnRyb2xsZXIgaGFuZGxlIVxuIiwgX19GVU5DVElPTl9fKTsKQEAgLTc5OSw4ICs3NzEsNiBAQAogCQllcnIoIiVzIDogaHBfcmVnaXN0ZXJfcmVhZF93b3JkIFNMT1RfQ1RSTCBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CiAJCXJldHVybiByZXR2YWw7CiAJfQotCWRiZygiJXM6IFNMT1RfQ1RSTCAleCwgdmFsdWUgcmVhZCAleG4iLCBfX0ZVTkNUSU9OX18sIFNMT1RfQ1RSTChzbG90LT5jdHJsLT5jYXBfYmFzZSksCi0JCXNsb3RfY3RybCk7CiAKIAlzbG90X2NtZCA9IChzbG90X2N0cmwgJiB+UFdSX0NUUkwpIHwgUE9XRVJfT047CiAKQEAgLTgyOSw3ICs3OTksNiBAQAogCWludCByZXR2YWwgPSAwOwogCiAJREJHX0VOVEVSX1JPVVRJTkUgCi0JZGJnKCIlczogXG4iLCBfX0ZVTkNUSU9OX18pOwkKIAogCWlmICghcGhwX2N0bHIpIHsKIAkJZXJyKCIlczogSW52YWxpZCBIUEMgY29udHJvbGxlciBoYW5kbGUhXG4iLCBfX0ZVTkNUSU9OX18pOwpAQCAtODQ4LDggKzgxNyw2IEBACiAJCWVycigiJXMgOiBocF9yZWdpc3Rlcl9yZWFkX3dvcmQgU0xPVF9DVFJMIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKIAkJcmV0dXJuIHJldHZhbDsKIAl9Ci0JZGJnKCIlczogU0xPVF9DVFJMICV4LCB2YWx1ZSByZWFkICV4XG4iLCBfX0ZVTkNUSU9OX18sIFNMT1RfQ1RSTChzbG90LT5jdHJsLT5jYXBfYmFzZSksCi0JCXNsb3RfY3RybCk7CiAKIAlzbG90X2NtZCA9IChzbG90X2N0cmwgJiB+UFdSX0NUUkwpIHwgUE9XRVJfT0ZGOwogCkBAIC05MjQsNyArODkxLDYgQEAKIAkJCXJldHVybiBJUlFfTk9ORTsKIAkJfQogCi0JCWRiZygiJXM6IFNldCBNYXNrIEhvdC1wbHVnIEludGVycnVwdCBFbmFibGVcbiIsIF9fRlVOQ1RJT05fXyk7CiAJCWRiZygiJXM6IGhwX3JlZ2lzdGVyX3JlYWRfd29yZCBTTE9UX0NUUkwgd2l0aCB2YWx1ZSAleFxuIiwgX19GVU5DVElPTl9fLCB0ZW1wX3dvcmQpOwogCQl0ZW1wX3dvcmQgPSAodGVtcF93b3JkICYgfkhQX0lOVFJfRU5BQkxFICYgfkNNRF9DTVBMX0lOVFJfRU5BQkxFKSB8IDB4MDA7CiAKQEAgLTkzMyw3ICs4OTksNiBAQAogCQkJZXJyKCIlcyA6IGhwX3JlZ2lzdGVyX3dyaXRlX3dvcmQgU0xPVF9DVFJMIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKIAkJCXJldHVybiBJUlFfTk9ORTsKIAkJfQotCQlkYmcoIiVzOiBocF9yZWdpc3Rlcl93cml0ZV93b3JkIFNMT1RfQ1RSTCB3aXRoIHZhbHVlICV4XG4iLCBfX0ZVTkNUSU9OX18sIHRlbXBfd29yZCk7CiAJCQogCQlyYyA9IGhwX3JlZ2lzdGVyX3JlYWRfd29yZChwaHBfY3Rsci0+cGNpX2RldiwgU0xPVF9TVEFUVVMoY3RybC0+Y2FwX2Jhc2UpLCBzbG90X3N0YXR1cyk7CiAJCWlmIChyYykgewpAQCAtOTQ5LDE0ICs5MTQsMTIgQEAKIAkJCWVycigiJXMgOiBocF9yZWdpc3Rlcl93cml0ZV93b3JkIFNMT1RfU1RBVFVTIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKIAkJCXJldHVybiBJUlFfTk9ORTsKIAkJfQotCQlkYmcoIiVzOiBocF9yZWdpc3Rlcl93cml0ZV93b3JkIFNMT1RfU1RBVFVTIHdpdGggdmFsdWUgJXhcbiIsIF9fRlVOQ1RJT05fXywgdGVtcF93b3JkKTsKIAl9CiAJCiAJaWYgKGludHJfbG9jICYgQ01EX0NPTVBMRVRFRCkgewogCQkvKiAKIAkJICogQ29tbWFuZCBDb21wbGV0ZSBJbnRlcnJ1cHQgUGVuZGluZyAKIAkJICovCi0JCWRiZygiJXM6IEluIENvbW1hbmQgQ29tcGxldGUgSW50ZXJydXB0IFBlbmRpbmdcbiIsIF9fRlVOQ1RJT05fXyk7CiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmY3RybC0+cXVldWUpOwogCX0KIApAQCAtOTg5LDcgKzk1Miw2IEBACiAJCX0KIAogCQlkYmcoIiVzOiBVbm1hc2sgSG90LXBsdWcgSW50ZXJydXB0IEVuYWJsZVxuIiwgX19GVU5DVElPTl9fKTsKLQkJZGJnKCIlczogaHBfcmVnaXN0ZXJfcmVhZF93b3JkIFNMT1RfQ1RSTCB3aXRoIHZhbHVlICV4XG4iLCBfX0ZVTkNUSU9OX18sIHRlbXBfd29yZCk7CiAJCXRlbXBfd29yZCA9ICh0ZW1wX3dvcmQgJiB+SFBfSU5UUl9FTkFCTEUpIHwgSFBfSU5UUl9FTkFCTEU7CiAKIAkJcmMgPSBocF9yZWdpc3Rlcl93cml0ZV93b3JkKHBocF9jdGxyLT5wY2lfZGV2LCBTTE9UX0NUUkwoY3RybC0+Y2FwX2Jhc2UpLCB0ZW1wX3dvcmQpOwpAQCAtOTk3LDE0ICs5NTksMTIgQEAKIAkJCWVycigiJXMgOiBocF9yZWdpc3Rlcl93cml0ZV93b3JkIFNMT1RfQ1RSTCBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CiAJCQlyZXR1cm4gSVJRX05PTkU7CiAJCX0KLQkJZGJnKCIlczogaHBfcmVnaXN0ZXJfd3JpdGVfd29yZCBTTE9UX0NUUkwgd2l0aCB2YWx1ZSAleFxuIiwgX19GVU5DVElPTl9fLCB0ZW1wX3dvcmQpOyAJCiAJCiAJCXJjID0gaHBfcmVnaXN0ZXJfcmVhZF93b3JkKHBocF9jdGxyLT5wY2lfZGV2LCBTTE9UX1NUQVRVUyhjdHJsLT5jYXBfYmFzZSksIHNsb3Rfc3RhdHVzKTsKIAkJaWYgKHJjKSB7CiAJCQllcnIoIiVzIDogaHBfcmVnaXN0ZXJfcmVhZF93b3JkIFNMT1RfU1RBVFVTIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKIAkJCXJldHVybiBJUlFfTk9ORTsKIAkJfQotCQlkYmcoIiVzOiBocF9yZWdpc3Rlcl9yZWFkX3dvcmQgU0xPVF9TVEFUVVMgd2l0aCB2YWx1ZSAleFxuIiwgX19GVU5DVElPTl9fLCBzbG90X3N0YXR1cyk7IAogCQkKIAkJLyogQ2xlYXIgY29tbWFuZCBjb21wbGV0ZSBpbnRlcnJ1cHQgY2F1c2VkIGJ5IHRoaXMgd3JpdGUgKi8KIAkJdGVtcF93b3JkID0gMHgxRjsKQEAgLTEyNDgsMTIgKzEyMDgsNyBAQAogCS5jaGVja19sbmtfc3RhdHVzCQk9IGhwY19jaGVja19sbmtfc3RhdHVzLAogfTsKIAotaW50IHBjaWVfaW5pdChzdHJ1Y3QgY29udHJvbGxlciAqIGN0cmwsCi0Jc3RydWN0IHBjaWVfZGV2aWNlICpkZXYsCi0JcGhwX2ludHJfY2FsbGJhY2tfdCBhdHRlbnRpb25fYnV0dG9uX2NhbGxiYWNrLAotCXBocF9pbnRyX2NhbGxiYWNrX3Qgc3dpdGNoX2NoYW5nZV9jYWxsYmFjaywKLQlwaHBfaW50cl9jYWxsYmFja190IHByZXNlbmNlX2NoYW5nZV9jYWxsYmFjaywKLQlwaHBfaW50cl9jYWxsYmFja190IHBvd2VyX2ZhdWx0X2NhbGxiYWNrKQoraW50IHBjaWVfaW5pdChzdHJ1Y3QgY29udHJvbGxlciAqIGN0cmwsIHN0cnVjdCBwY2llX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBwaHBfY3Rscl9zdGF0ZV9zICpwaHBfY3RsciwgKnA7CiAJdm9pZCAqaW5zdGFuY2VfaWQgPSBjdHJsOwpAQCAtMTI4Miw4ICsxMjM3LDggQEAKIAlwZGV2ID0gZGV2LT5wb3J0OwogCXBocF9jdGxyLT5wY2lfZGV2ID0gcGRldjsJLyogc2F2ZSBwY2lfZGV2IGluIGNvbnRleHQgKi8KIAotCWRiZygiJXM6IHBkZXYtPnZlbmRvciAleCBwZGV2LT5kZXZpY2UgJXhcbiIsIF9fRlVOQ1RJT05fXywKLQkJcGRldi0+dmVuZG9yLCBwZGV2LT5kZXZpY2UpOworCWRiZygiJXM6IGhvdHBsdWcgY29udHJvbGxlciB2ZW5kb3IgaWQgMHgleCBkZXZpY2UgaWQgMHgleFxuIiwKKwkJCV9fRlVOQ1RJT05fXywgcGRldi0+dmVuZG9yLCBwZGV2LT5kZXZpY2UpOwogCiAJc2F2ZWRfY2FwX2Jhc2UgPSBwY2llX2NhcF9iYXNlOwogCkBAIC0xMzQwLDggKzEyOTUsNiBAQAogCQlmaXJzdCA9IDA7CiAJfQogCi0JZGJnKCJwZGV2ID0gJXA6IGI6ZDpmOmlycT0weCV4OiV4OiV4OiV4XG4iLCBwZGV2LCBwZGV2LT5idXMtPm51bWJlciwgCi0JCVBDSV9TTE9UKHBkZXYtPmRldmZuKSwgUENJX0ZVTkMocGRldi0+ZGV2Zm4pLCBkZXYtPmlycSk7CiAJZm9yICggcmMgPSAwOyByYyA8IERFVklDRV9DT1VOVF9SRVNPVVJDRTsgcmMrKykKIAkJaWYgKHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgcmMpID4gMCkKIAkJCWRiZygicGNpIHJlc291cmNlWyVkXSBzdGFydD0weCVseChsZW49MHglbHgpXG4iLCByYywKQEAgLTEzNTksMTMgKzEzMTIsMTIgQEAKIAogCS8qIGZpbmQgdGhlIElSUSAqLwogCXBocF9jdGxyLT5pcnEgPSBkZXYtPmlycTsKLQlkYmcoIkhQQyBpbnRlcnJ1cHQgPSAlZFxuIiwgcGhwX2N0bHItPmlycSk7CiAKIAkvKiBTYXZlIGludGVycnVwdCBjYWxsYmFjayBpbmZvICovCi0JcGhwX2N0bHItPmF0dGVudGlvbl9idXR0b25fY2FsbGJhY2sgPSBhdHRlbnRpb25fYnV0dG9uX2NhbGxiYWNrOwotCXBocF9jdGxyLT5zd2l0Y2hfY2hhbmdlX2NhbGxiYWNrID0gc3dpdGNoX2NoYW5nZV9jYWxsYmFjazsKLQlwaHBfY3Rsci0+cHJlc2VuY2VfY2hhbmdlX2NhbGxiYWNrID0gcHJlc2VuY2VfY2hhbmdlX2NhbGxiYWNrOwotCXBocF9jdGxyLT5wb3dlcl9mYXVsdF9jYWxsYmFjayA9IHBvd2VyX2ZhdWx0X2NhbGxiYWNrOworCXBocF9jdGxyLT5hdHRlbnRpb25fYnV0dG9uX2NhbGxiYWNrID0gcGNpZWhwX2hhbmRsZV9hdHRlbnRpb25fYnV0dG9uOworCXBocF9jdGxyLT5zd2l0Y2hfY2hhbmdlX2NhbGxiYWNrID0gcGNpZWhwX2hhbmRsZV9zd2l0Y2hfY2hhbmdlOworCXBocF9jdGxyLT5wcmVzZW5jZV9jaGFuZ2VfY2FsbGJhY2sgPSBwY2llaHBfaGFuZGxlX3ByZXNlbmNlX2NoYW5nZTsKKwlwaHBfY3Rsci0+cG93ZXJfZmF1bHRfY2FsbGJhY2sgPSBwY2llaHBfaGFuZGxlX3Bvd2VyX2ZhdWx0OwogCXBocF9jdGxyLT5jYWxsYmFja19pbnN0YW5jZV9pZCA9IGluc3RhbmNlX2lkOwogCiAJLyogcmV0dXJuIFBDSSBDb250cm9sbGVyIEluZm8gKi8KQEAgLTEzODcsMTUgKzEzMzksMTIgQEAKIAkJZXJyKCIlcyA6IGhwX3JlZ2lzdGVyX3dyaXRlX3dvcmQgU0xPVF9DVFJMIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKIAkJZ290byBhYm9ydF9mcmVlX2N0bHI7CiAJfQotCWRiZygiJXMgOiBNYXNrIEhQSUUgaHBfcmVnaXN0ZXJfd3JpdGVfd29yZCBTTE9UX0NUUkwgJXhcbiIsIF9fRlVOQ1RJT05fXywgdGVtcF93b3JkKTsKIAogCXJjID0gaHBfcmVnaXN0ZXJfcmVhZF93b3JkKHBocF9jdGxyLT5wY2lfZGV2LCBTTE9UX1NUQVRVUyhjdHJsLT5jYXBfYmFzZSksIHNsb3Rfc3RhdHVzKTsKIAlpZiAocmMpIHsKIAkJZXJyKCIlcyA6IGhwX3JlZ2lzdGVyX3JlYWRfd29yZCBTTE9UX1NUQVRVUyBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CiAJCWdvdG8gYWJvcnRfZnJlZV9jdGxyOwogCX0KLQlkYmcoIiVzOiBNYXNrIEhQSUUgU0xPVF9TVEFUVVMgb2Zmc2V0ICV4IHJlYWRzIHNsb3Rfc3RhdHVzICV4XG4iLCBfX0ZVTkNUSU9OX18sIFNMT1RfU1RBVFVTKGN0cmwtPmNhcF9iYXNlKQotCQksIHNsb3Rfc3RhdHVzKTsKIAogCXRlbXBfd29yZCA9IDB4MUY7IC8qIENsZWFyIGFsbCBldmVudHMgKi8KIAlyYyA9IGhwX3JlZ2lzdGVyX3dyaXRlX3dvcmQocGhwX2N0bHItPnBjaV9kZXYsIFNMT1RfU1RBVFVTKGN0cmwtPmNhcF9iYXNlKSwgdGVtcF93b3JkKTsKQEAgLTE0MDMsNyArMTM1Miw2IEBACiAJCWVycigiJXMgOiBocF9yZWdpc3Rlcl93cml0ZV93b3JkIFNMT1RfU1RBVFVTIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKIAkJZ290byBhYm9ydF9mcmVlX2N0bHI7CiAJfQotCWRiZygiJXM6IFNMT1RfU1RBVFVTIG9mZnNldCAleCB3cml0ZXMgc2xvdF9zdGF0dXMgJXhcbiIsIF9fRlVOQ1RJT05fXywgU0xPVF9TVEFUVVMoY3RybC0+Y2FwX2Jhc2UpLCB0ZW1wX3dvcmQpOwogCiAJaWYgKHBjaWVocF9wb2xsX21vZGUpICB7LyogSW5zdGFsbCBpbnRlcnJ1cHQgcG9sbGluZyBjb2RlICovCiAJCS8qIEluc3RhbGwgYW5kIHN0YXJ0IHRoZSBpbnRlcnJ1cHQgcG9sbGluZyB0aW1lciAqLwpAQCAtMTQxOSwxMyArMTM2NywxNCBAQAogCQl9CiAJfQogCisJZGJnKCJwY2llaHAgY3RybCBiOmQ6ZjppcnE9MHgleDoleDoleDoleFxuIiwgcGRldi0+YnVzLT5udW1iZXIsCisJCVBDSV9TTE9UKHBkZXYtPmRldmZuKSwgUENJX0ZVTkMocGRldi0+ZGV2Zm4pLCBkZXYtPmlycSk7CisKIAlyYyA9IGhwX3JlZ2lzdGVyX3JlYWRfd29yZChwZGV2LCBTTE9UX0NUUkwoY3RybC0+Y2FwX2Jhc2UpLCB0ZW1wX3dvcmQpOwogCWlmIChyYykgewogCQllcnIoIiVzIDogaHBfcmVnaXN0ZXJfcmVhZF93b3JkIFNMT1RfQ1RSTCBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CiAJCWdvdG8gYWJvcnRfZnJlZV9jdGxyOwogCX0KLQlkYmcoIiVzOiBTTE9UX0NUUkwgJXggdmFsdWUgcmVhZCAleFxuIiwgX19GVU5DVElPTl9fLCBTTE9UX0NUUkwoY3RybC0+Y2FwX2Jhc2UpLCB0ZW1wX3dvcmQpOwotCWRiZygiJXM6IHNsb3RfY2FwICV4XG4iLCBfX0ZVTkNUSU9OX18sIHNsb3RfY2FwKTsKIAogCWludHJfZW5hYmxlID0gaW50cl9lbmFibGUgfCBQUlNOX0RFVEVDVF9FTkFCTEU7CiAKQEAgLTE0NDUsNyArMTM5NCw2IEBACiAJfSBlbHNlIHsKIAkJdGVtcF93b3JkID0gKHRlbXBfd29yZCAmIH5IUF9JTlRSX0VOQUJMRSkgfCBIUF9JTlRSX0VOQUJMRTsKIAl9Ci0JZGJnKCIlczogdGVtcF93b3JkICV4XG4iLCBfX0ZVTkNUSU9OX18sIHRlbXBfd29yZCk7CiAKIAkvKiBVbm1hc2sgSG90LXBsdWcgSW50ZXJydXB0IEVuYWJsZSBmb3IgdGhlIGludGVycnVwdCBub3RpZmljYXRpb24gbWVjaGFuaXNtIGNhc2UgKi8KIAlyYyA9IGhwX3JlZ2lzdGVyX3dyaXRlX3dvcmQocGRldiwgU0xPVF9DVFJMKGN0cmwtPmNhcF9iYXNlKSwgdGVtcF93b3JkKTsKQEAgLTE0NTMsMTQgKzE0MDEsMTEgQEAKIAkJZXJyKCIlcyA6IGhwX3JlZ2lzdGVyX3dyaXRlX3dvcmQgU0xPVF9DVFJMIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKIAkJZ290byBhYm9ydF9mcmVlX2N0bHI7CiAJfQotCWRiZygiJXMgOiBVbm1hc2sgSFBJRSBocF9yZWdpc3Rlcl93cml0ZV93b3JkIFNMT1RfQ1RSTCB3aXRoICV4XG4iLCBfX0ZVTkNUSU9OX18sIHRlbXBfd29yZCk7CiAJcmMgPSBocF9yZWdpc3Rlcl9yZWFkX3dvcmQocGhwX2N0bHItPnBjaV9kZXYsIFNMT1RfU1RBVFVTKGN0cmwtPmNhcF9iYXNlKSwgc2xvdF9zdGF0dXMpOwogCWlmIChyYykgewogCQllcnIoIiVzIDogaHBfcmVnaXN0ZXJfcmVhZF93b3JkIFNMT1RfU1RBVFVTIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKIAkJZ290byBhYm9ydF9mcmVlX2N0bHI7CiAJfQotCWRiZygiJXM6IFVubWFzayBIUElFIFNMT1RfU1RBVFVTIG9mZnNldCAleCByZWFkcyBzbG90X3N0YXR1cyAleFxuIiwgX19GVU5DVElPTl9fLCAKLQkJU0xPVF9TVEFUVVMoY3RybC0+Y2FwX2Jhc2UpLCBzbG90X3N0YXR1cyk7CiAJCiAJdGVtcF93b3JkID0gIDB4MUY7IC8qIENsZWFyIGFsbCBldmVudHMgKi8KIAlyYyA9IGhwX3JlZ2lzdGVyX3dyaXRlX3dvcmQocGhwX2N0bHItPnBjaV9kZXYsIFNMT1RfU1RBVFVTKGN0cmwtPmNhcF9iYXNlKSwgdGVtcF93b3JkKTsKQEAgLTE0NjgsOCArMTQxMywxNiBAQAogCQllcnIoIiVzIDogaHBfcmVnaXN0ZXJfd3JpdGVfd29yZCBTTE9UX1NUQVRVUyBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CiAJCWdvdG8gYWJvcnRfZnJlZV9jdGxyOwogCX0KLQlkYmcoIiVzOiBTTE9UX1NUQVRVUyBvZmZzZXQgJXggd3JpdGVzIHNsb3Rfc3RhdHVzICV4XG4iLCBfX0ZVTkNUSU9OX18sIFNMT1RfU1RBVFVTKGN0cmwtPmNhcF9iYXNlKSwgdGVtcF93b3JkKTsKIAkKKwlpZiAocGNpZWhwX2ZvcmNlKSB7CisJCWRiZygiQnlwYXNzaW5nIEJJT1MgY2hlY2sgZm9yIHBjaWVocCB1c2Ugb24gJXNcbiIsCisJCQkJcGNpX25hbWUoY3RybC0+cGNpX2RldikpOworCX0gZWxzZSB7CisJCXJjID0gcGNpZWhwX2dldF9ocF9od19jb250cm9sX2Zyb21fZmlybXdhcmUoY3RybC0+cGNpX2Rldik7CisJCWlmIChyYykKKwkJCWdvdG8gYWJvcnRfZnJlZV9jdGxyOworCX0KKwogCS8qICBBZGQgdGhpcyBIUEMgaW5zdGFuY2UgaW50byB0aGUgSFBDIGxpc3QgKi8KIAlzcGluX2xvY2soJmxpc3RfbG9jayk7CiAJaWYgKHBocF9jdGxyX2xpc3RfaGVhZCA9PSAwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9wY2kuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX3BjaS5jCmluZGV4IGZmMTdkOGUuLjY0NzY3M2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX3BjaS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX3BjaS5jCkBAIC0yNyw4MDEgKzI3LDExMSBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+Ci0jaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgIi4uL3BjaS5oIgogI2luY2x1ZGUgInBjaWVocC5oIgotI2lmbmRlZiBDT05GSUdfSUE2NAotI2luY2x1ZGUgIi4uLy4uLy4uL2FyY2gvaTM4Ni9wY2kvcGNpLmgiICAgIC8qIGhvcnJpYmxlIGhhY2sgc2hvd2luZyBob3cgcHJvY2Vzc29yIGRlcGVuZGFudCB3ZSBhcmUuLi4gKi8KLSNlbmRpZgogCiAKLWludCBwY2llaHBfY29uZmlndXJlX2RldmljZSAoc3RydWN0IGNvbnRyb2xsZXIqIGN0cmwsIHN0cnVjdCBwY2lfZnVuYyogZnVuYykgIAoraW50IHBjaWVocF9jb25maWd1cmVfZGV2aWNlKHN0cnVjdCBzbG90ICpwX3Nsb3QpCiB7Ci0JdW5zaWduZWQgY2hhciBidXM7Ci0Jc3RydWN0IHBjaV9idXMgKmNoaWxkOwotCWludCBudW07CisJc3RydWN0IHBjaV9kZXYgKmRldjsKKwlzdHJ1Y3QgcGNpX2J1cyAqcGFyZW50ID0gcF9zbG90LT5jdHJsLT5wY2lfZGV2LT5zdWJvcmRpbmF0ZTsKKwlpbnQgbnVtLCBmbjsKIAotCWlmIChmdW5jLT5wY2lfZGV2ID09IE5VTEwpCi0JCWZ1bmMtPnBjaV9kZXYgPSBwY2lfZmluZF9zbG90KGZ1bmMtPmJ1cywgUENJX0RFVkZOKGZ1bmMtPmRldmljZSwgZnVuYy0+ZnVuY3Rpb24pKTsKKwlkZXYgPSBwY2lfZmluZF9zbG90KHBfc2xvdC0+YnVzLCBQQ0lfREVWRk4ocF9zbG90LT5kZXZpY2UsIDApKTsKKwlpZiAoZGV2KSB7CisJCWVycigiRGV2aWNlICVzIGFscmVhZHkgZXhpc3RzIGF0ICV4OiV4LCBjYW5ub3QgaG90LWFkZFxuIiwKKwkJCQlwY2lfbmFtZShkZXYpLCBwX3Nsb3QtPmJ1cywgcF9zbG90LT5kZXZpY2UpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKLQkvKiBTdGlsbCBOVUxMID8gV2VsbCB0aGVuIHNjYW4gZm9yIGl0ICEgKi8KLQlpZiAoZnVuYy0+cGNpX2RldiA9PSBOVUxMKSB7Ci0JCWRiZygiJXM6IHBjaV9kZXYgc3RpbGwgbnVsbC4gZG8gcGNpX3NjYW5fc2xvdFxuIiwgX19GVU5DVElPTl9fKTsKKwludW0gPSBwY2lfc2Nhbl9zbG90KHBhcmVudCwgUENJX0RFVkZOKHBfc2xvdC0+ZGV2aWNlLCAwKSk7CisJaWYgKG51bSA9PSAwKSB7CisJCWVycigiTm8gbmV3IGRldmljZSBmb3VuZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KIAotCQludW0gPSBwY2lfc2Nhbl9zbG90KGN0cmwtPnBjaV9kZXYtPnN1Ym9yZGluYXRlLCBQQ0lfREVWRk4oZnVuYy0+ZGV2aWNlLCBmdW5jLT5mdW5jdGlvbikpOwotCi0JCWlmIChudW0pCi0JCQlwY2lfYnVzX2FkZF9kZXZpY2VzKGN0cmwtPnBjaV9kZXYtPnN1Ym9yZGluYXRlKTsKLQkJCi0JCWZ1bmMtPnBjaV9kZXYgPSBwY2lfZmluZF9zbG90KGZ1bmMtPmJ1cywgUENJX0RFVkZOKGZ1bmMtPmRldmljZSwgZnVuYy0+ZnVuY3Rpb24pKTsKLQkJaWYgKGZ1bmMtPnBjaV9kZXYgPT0gTlVMTCkgewotCQkJZGJnKCJFUlJPUjogcGNpX2RldiBzdGlsbCBudWxsXG4iKTsKLQkJCXJldHVybiAwOworCWZvciAoZm4gPSAwOyBmbiA8IDg7IGZuKyspIHsKKwkJaWYgKCEoZGV2ID0gcGNpX2ZpbmRfc2xvdChwX3Nsb3QtPmJ1cywKKwkJCQkJUENJX0RFVkZOKHBfc2xvdC0+ZGV2aWNlLCBmbikpKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoKGRldi0+Y2xhc3MgPj4gMTYpID09IFBDSV9CQVNFX0NMQVNTX0RJU1BMQVkpIHsKKwkJCWVycigiQ2Fubm90IGhvdC1hZGQgZGlzcGxheSBkZXZpY2UgJXNcbiIsCisJCQkJCXBjaV9uYW1lKGRldikpOworCQkJY29udGludWU7CiAJCX0KKwkJaWYgKChkZXYtPmhkcl90eXBlID09IFBDSV9IRUFERVJfVFlQRV9CUklER0UpIHx8CisJCQkJKGRldi0+aGRyX3R5cGUgPT0gUENJX0hFQURFUl9UWVBFX0NBUkRCVVMpKSB7CisJCQkvKiBGaW5kIGFuIHVudXNlZCBidXMgbnVtYmVyIGZvciB0aGUgbmV3IGJyaWRnZSAqLworCQkJc3RydWN0IHBjaV9idXMgKmNoaWxkOworCQkJdW5zaWduZWQgY2hhciBidXNuciwgc3RhcnQgPSBwYXJlbnQtPnNlY29uZGFyeTsKKwkJCXVuc2lnbmVkIGNoYXIgZW5kID0gcGFyZW50LT5zdWJvcmRpbmF0ZTsKKwkJCWZvciAoYnVzbnIgPSBzdGFydDsgYnVzbnIgPD0gZW5kOyBidXNucisrKSB7CisJCQkJaWYgKCFwY2lfZmluZF9idXMocGNpX2RvbWFpbl9ucihwYXJlbnQpLAorCQkJCQkJCWJ1c25yKSkKKwkJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoYnVzbnIgPj0gZW5kKSB7CisJCQkJZXJyKCJObyBmcmVlIGJ1cyBmb3IgaG90LWFkZGVkIGJyaWRnZVxuIik7CisJCQkJY29udGludWU7CisJCQl9CisJCQljaGlsZCA9IHBjaV9hZGRfbmV3X2J1cyhwYXJlbnQsIGRldiwgYnVzbnIpOworCQkJaWYgKCFjaGlsZCkgeworCQkJCWVycigiQ2Fubm90IGFkZCBuZXcgYnVzIGZvciAlc1xuIiwKKwkJCQkJCXBjaV9uYW1lKGRldikpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJY2hpbGQtPnN1Ym9yZGluYXRlID0gcGNpX2RvX3NjYW5fYnVzKGNoaWxkKTsKKwkJCXBjaV9idXNfc2l6ZV9icmlkZ2VzKGNoaWxkKTsKKwkJfQorCQkvKiBUQkQ6IHByb2dyYW0gZmlybXdhcmUgcHJvdmlkZWQgX0hQUCB2YWx1ZXMgKi8KKwkJLyogcHJvZ3JhbV9md19wcm92aWRlZF92YWx1ZXMoZGV2KTsgKi8KIAl9CiAKLQlpZiAoZnVuYy0+cGNpX2Rldi0+aGRyX3R5cGUgPT0gUENJX0hFQURFUl9UWVBFX0JSSURHRSkgewotCQlwY2lfcmVhZF9jb25maWdfYnl0ZShmdW5jLT5wY2lfZGV2LCBQQ0lfU0VDT05EQVJZX0JVUywgJmJ1cyk7Ci0JCWNoaWxkID0gcGNpX2FkZF9uZXdfYnVzKGZ1bmMtPnBjaV9kZXYtPmJ1cywgKGZ1bmMtPnBjaV9kZXYpLCBidXMpOwotCQlwY2lfZG9fc2Nhbl9idXMoY2hpbGQpOwotCi0JfQotCisJcGNpX2J1c19hc3NpZ25fcmVzb3VyY2VzKHBhcmVudCk7CisJcGNpX2J1c19hZGRfZGV2aWNlcyhwYXJlbnQpOworCXBjaV9lbmFibGVfYnJpZGdlcyhwYXJlbnQpOwogCXJldHVybiAwOwogfQogCi0KLWludCBwY2llaHBfdW5jb25maWd1cmVfZGV2aWNlKHN0cnVjdCBwY2lfZnVuYyogZnVuYykgCitpbnQgcGNpZWhwX3VuY29uZmlndXJlX2RldmljZShzdHJ1Y3Qgc2xvdCAqcF9zbG90KQogewogCWludCByYyA9IDA7CiAJaW50IGo7Ci0Jc3RydWN0IHBjaV9idXMgKnBidXM7CisJdTggYmN0bCA9IDA7CiAKLQlkYmcoIiVzOiBidXMvZGV2L2Z1bmMgPSAleC8leC8leFxuIiwgX19GVU5DVElPTl9fLCBmdW5jLT5idXMsCi0JCQkJZnVuYy0+ZGV2aWNlLCBmdW5jLT5mdW5jdGlvbik7Ci0JcGJ1cyA9IGZ1bmMtPnBjaV9kZXYtPmJ1czsKKwlkYmcoIiVzOiBidXMvZGV2ID0gJXgvJXhcbiIsIF9fRlVOQ1RJT05fXywgcF9zbG90LT5idXMsCisJCQkJcF9zbG90LT5kZXZpY2UpOwogCiAJZm9yIChqPTA7IGo8OCA7IGorKykgewotCQlzdHJ1Y3QgcGNpX2RldiogdGVtcCA9IHBjaV9maW5kX3Nsb3QoZnVuYy0+YnVzLAotCQkJCShmdW5jLT5kZXZpY2UgPDwgMykgfCBqKTsKLQkJaWYgKHRlbXApIHsKLQkJCXBjaV9yZW1vdmVfYnVzX2RldmljZSh0ZW1wKTsKKwkJc3RydWN0IHBjaV9kZXYqIHRlbXAgPSBwY2lfZmluZF9zbG90KHBfc2xvdC0+YnVzLAorCQkJCShwX3Nsb3QtPmRldmljZSA8PCAzKSB8IGopOworCQlpZiAoIXRlbXApCisJCQljb250aW51ZTsKKwkJaWYgKCh0ZW1wLT5jbGFzcyA+PiAxNikgPT0gUENJX0JBU0VfQ0xBU1NfRElTUExBWSkgeworCQkJZXJyKCJDYW5ub3QgcmVtb3ZlIGRpc3BsYXkgZGV2aWNlICVzXG4iLAorCQkJCQlwY2lfbmFtZSh0ZW1wKSk7CisJCQljb250aW51ZTsKIAkJfQorCQlpZiAodGVtcC0+aGRyX3R5cGUgPT0gUENJX0hFQURFUl9UWVBFX0JSSURHRSkgeworCQkJcGNpX3JlYWRfY29uZmlnX2J5dGUodGVtcCwgUENJX0JSSURHRV9DT05UUk9MLCAmYmN0bCk7CisJCQlpZiAoYmN0bCAmIFBDSV9CUklER0VfQ1RMX1ZHQSkgeworCQkJCWVycigiQ2Fubm90IHJlbW92ZSBkaXNwbGF5IGRldmljZSAlc1xuIiwKKwkJCQkJCXBjaV9uYW1lKHRlbXApKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCQlwY2lfcmVtb3ZlX2J1c19kZXZpY2UodGVtcCk7CiAJfQogCS8qIAogCSAqIFNvbWUgUENJIEV4cHJlc3Mgcm9vdCBwb3J0cyByZXF1aXJlIGZpeHVwIGFmdGVyIGhvdC1wbHVnIG9wZXJhdGlvbi4KIAkgKi8KIAlpZiAocGNpZV9tY2hfcXVpcmspIAotCQlwY2lfZml4dXBfZGV2aWNlKHBjaV9maXh1cF9maW5hbCwgcGJ1cy0+c2VsZik7CisJCXBjaV9maXh1cF9kZXZpY2UocGNpX2ZpeHVwX2ZpbmFsLCBwX3Nsb3QtPmN0cmwtPnBjaV9kZXYpOwogCQogCXJldHVybiByYzsKIH0KIAotLyoKLSAqIHBjaWVocF9zZXRfaXJxCi0gKgotICogQGJ1c19udW06IGJ1cyBudW1iZXIgb2YgUENJIGRldmljZQotICogQGRldl9udW06IGRldmljZSBudW1iZXIgb2YgUENJIGRldmljZQotICogQHNsb3Q6IHBvaW50ZXIgdG8gdTggd2hlcmUgc2xvdCBudW1iZXIgd2lsbCBiZSByZXR1cm5lZAotICovCi1pbnQgcGNpZWhwX3NldF9pcnEgKHU4IGJ1c19udW0sIHU4IGRldl9udW0sIHU4IGludF9waW4sIHU4IGlycV9udW0pCi17Ci0jaWYgZGVmaW5lZChDT05GSUdfWDg2XzMyKSAmJiAhZGVmaW5lZChDT05GSUdfWDg2X0lPX0FQSUMpCi0JaW50IHJjOwotCXUxNiB0ZW1wX3dvcmQ7Ci0Jc3RydWN0IHBjaV9kZXYgZmFrZWRldjsKLQlzdHJ1Y3QgcGNpX2J1cyBmYWtlYnVzOwotCi0JZmFrZWRldi5kZXZmbiA9IGRldl9udW0gPDwgMzsKLQlmYWtlZGV2LmJ1cyA9ICZmYWtlYnVzOwotCWZha2VidXMubnVtYmVyID0gYnVzX251bTsKLQlkYmcoIiVzOiBkZXYgJWQsIGJ1cyAlZCwgcGluICVkLCBudW0gJWRcbiIsCi0JICAgIF9fRlVOQ1RJT05fXywgZGV2X251bSwgYnVzX251bSwgaW50X3BpbiwgaXJxX251bSk7Ci0JcmMgPSBwY2liaW9zX3NldF9pcnFfcm91dGluZygmZmFrZWRldiwgaW50X3BpbiAtIDB4MGEsIGlycV9udW0pOwotCWRiZygiJXM6IHJjICVkXG4iLCBfX0ZVTkNUSU9OX18sIHJjKTsKLQlpZiAoIXJjKQotCQlyZXR1cm4gIXJjOwotCi0JLyogc2V0IHRoZSBFZGdlIExldmVsIENvbnRyb2wgUmVnaXN0ZXIgKEVMQ1IpICovCi0JdGVtcF93b3JkID0gaW5iKDB4NGQwKTsKLQl0ZW1wX3dvcmQgfD0gaW5iKDB4NGQxKSA8PCA4OwotCi0JdGVtcF93b3JkIHw9IDB4MDEgPDwgaXJxX251bTsKLQotCS8qIFRoaXMgc2hvdWxkIG9ubHkgYmUgZm9yIHg4NiBhcyBpdCBzZXRzIHRoZSBFZGdlIExldmVsIENvbnRyb2wgUmVnaXN0ZXIgKi8KLQlvdXRiKCh1OCkgKHRlbXBfd29yZCAmIDB4RkYpLCAweDRkMCk7Ci0Jb3V0YigodTgpICgodGVtcF93b3JkICYgMHhGRjAwKSA+PiA4KSwgMHg0ZDEpOwotI2VuZGlmCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIE1vcmUgUENJIGNvbmZpZ3VyYXRpb24gcm91dGluZXM7IHRoaXMgdGltZSBjZW50ZXJlZCBhcm91bmQgaG90cGx1ZyBjb250cm9sbGVyICovCi0KLQotLyoKLSAqIHBjaWVocF9zYXZlX2NvbmZpZwotICoKLSAqIFJlYWRzIGNvbmZpZ3VyYXRpb24gZm9yIGFsbCBzbG90cyBpbiBhIFBDSSBidXMgYW5kIHNhdmVzIGluZm8uCi0gKgotICogTm90ZTogIEZvciBub24taG90IHBsdWcgYnVzc2VzLCB0aGUgc2xvdCAjIHNhdmVkIGlzIHRoZSBkZXZpY2UgIwotICoKLSAqIHJldHVybnMgMCBpZiBzdWNjZXNzCi0gKi8KLWludCBwY2llaHBfc2F2ZV9jb25maWcoc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwsIGludCBidXNudW1iZXIsIGludCBudW1fY3Rscl9zbG90cywgaW50IGZpcnN0X2RldmljZV9udW0pCi17Ci0JaW50IHJjOwotCXU4IGNsYXNzX2NvZGU7Ci0JdTggaGVhZGVyX3R5cGU7Ci0JdTMyIElEOwotCXU4IHNlY29uZGFyeV9idXM7Ci0Jc3RydWN0IHBjaV9mdW5jICpuZXdfc2xvdDsKLQlpbnQgc3ViX2J1czsKLQlpbnQgbWF4X2Z1bmN0aW9uczsKLQlpbnQgZnVuY3Rpb247Ci0JdTggRGV2RXJyb3I7Ci0JaW50IGRldmljZSA9IDA7Ci0JaW50IGNsb29wID0gMDsKLQlpbnQgc3RvcF9pdDsKLQlpbnQgaW5kZXg7Ci0JaW50IGlzX2hvdF9wbHVnID0gbnVtX2N0bHJfc2xvdHMgfHwgZmlyc3RfZGV2aWNlX251bTsKLQlzdHJ1Y3QgcGNpX2J1cyBscGNpX2J1cywgKnBjaV9idXM7Ci0JaW50IEZpcnN0U3VwcG9ydGVkLCBMYXN0U3VwcG9ydGVkOwotCi0JZGJnKCIlczogRW50ZXJcbiIsIF9fRlVOQ1RJT05fXyk7Ci0KLQltZW1jcHkoJmxwY2lfYnVzLCBjdHJsLT5wY2lfZGV2LT5zdWJvcmRpbmF0ZSwgc2l6ZW9mKGxwY2lfYnVzKSk7Ci0JcGNpX2J1cyA9ICZscGNpX2J1czsKLQotCWRiZygiJXM6IG51bV9jdGxyX3Nsb3RzID0gJWQsIGZpcnN0X2RldmljZV9udW0gPSAlZFxuIiwgX19GVU5DVElPTl9fLAotCQkJCW51bV9jdGxyX3Nsb3RzLCBmaXJzdF9kZXZpY2VfbnVtKTsKLQotCS8qICAgRGVjaWRlIHdoaWNoIHNsb3RzIGFyZSBzdXBwb3J0ZWQgKi8KLQlpZiAoaXNfaG90X3BsdWcpIHsKLQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCQkgKiAgaXNfaG90X3BsdWcgaXMgdGhlIHNsb3QgbWFzawotCQkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCQlGaXJzdFN1cHBvcnRlZCA9IGZpcnN0X2RldmljZV9udW07Ci0JCUxhc3RTdXBwb3J0ZWQgPSBGaXJzdFN1cHBvcnRlZCArIG51bV9jdGxyX3Nsb3RzIC0gMTsKLQl9IGVsc2UgewotCQlGaXJzdFN1cHBvcnRlZCA9IDA7Ci0JCUxhc3RTdXBwb3J0ZWQgPSAweDFGOwotCX0KLQotCWRiZygiRmlyc3RTdXBwb3J0ZWQgPSAlZCwgTGFzdFN1cHBvcnRlZCA9ICVkXG4iLCBGaXJzdFN1cHBvcnRlZCwKLQkJCQkJTGFzdFN1cHBvcnRlZCk7Ci0KLQkvKiAgIFNhdmUgUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UgZm9yIGFsbCBkZXZpY2VzIGluIHN1cHBvcnRlZCBzbG90cyAqLwotCWRiZygiJXM6IHBjaV9idXMtPm51bWJlciA9ICV4XG4iLCBfX0ZVTkNUSU9OX18sIHBjaV9idXMtPm51bWJlcik7Ci0JcGNpX2J1cy0+bnVtYmVyID0gYnVzbnVtYmVyOwotCWRiZygiJXM6IGJ1cyA9ICV4LCBkZXYgPSAleFxuIiwgX19GVU5DVElPTl9fLCBidXNudW1iZXIsIGRldmljZSk7Ci0JZm9yIChkZXZpY2UgPSBGaXJzdFN1cHBvcnRlZDsgZGV2aWNlIDw9IExhc3RTdXBwb3J0ZWQ7IGRldmljZSsrKSB7Ci0JCUlEID0gMHhGRkZGRkZGRjsKLQkJcmMgPSBwY2lfYnVzX3JlYWRfY29uZmlnX2R3b3JkKHBjaV9idXMsIFBDSV9ERVZGTihkZXZpY2UsIDApLAotCQkJCQlQQ0lfVkVORE9SX0lELCAmSUQpOwotCi0JCWlmIChJRCAhPSAweEZGRkZGRkZGKSB7CSAgLyogIGRldmljZSBpbiBzbG90ICovCi0JCQlkYmcoIiVzOiBJRCA9ICV4XG4iLCBfX0ZVTkNUSU9OX18sIElEKTsKLQkJCXJjID0gcGNpX2J1c19yZWFkX2NvbmZpZ19ieXRlKHBjaV9idXMsIFBDSV9ERVZGTihkZXZpY2UsIDApLAotCQkJCQkweDBCLCAmY2xhc3NfY29kZSk7Ci0JCQlpZiAocmMpCi0JCQkJcmV0dXJuIHJjOwotCi0JCQlyYyA9IHBjaV9idXNfcmVhZF9jb25maWdfYnl0ZShwY2lfYnVzLCBQQ0lfREVWRk4oZGV2aWNlLCAwKSwKLQkJCQkJUENJX0hFQURFUl9UWVBFLCAmaGVhZGVyX3R5cGUpOwotCQkJaWYgKHJjKQotCQkJCXJldHVybiByYzsKLQotCQkJZGJnKCJjbGFzc19jb2RlID0gJXgsIGhlYWRlcl90eXBlID0gJXhcbiIsIGNsYXNzX2NvZGUsIGhlYWRlcl90eXBlKTsKLQotCQkJLyogSWYgbXVsdGktZnVuY3Rpb24gZGV2aWNlLCBzZXQgbWF4X2Z1bmN0aW9ucyB0byA4ICovCi0JCQlpZiAoaGVhZGVyX3R5cGUgJiAweDgwKQotCQkJCW1heF9mdW5jdGlvbnMgPSA4OwotCQkJZWxzZQotCQkJCW1heF9mdW5jdGlvbnMgPSAxOwotCi0JCQlmdW5jdGlvbiA9IDA7Ci0KLQkJCWRvIHsKLQkJCQlEZXZFcnJvciA9IDA7Ci0JCQkJZGJnKCIlczogSW4gZG8gbG9vcFxuIiwgX19GVU5DVElPTl9fKTsKLQotCQkJCWlmICgoaGVhZGVyX3R5cGUgJiAweDdGKSA9PSBQQ0lfSEVBREVSX1RZUEVfQlJJREdFKSB7ICAgLyogUC1QIEJyaWRnZSAqLwotCQkJCQkvKiBSZWN1cnNlIHRoZSBzdWJvcmRpbmF0ZSBidXMKLQkJCQkJICogZ2V0IHRoZSBzdWJvcmRpbmF0ZSBidXMgbnVtYmVyCi0JCQkJCSAqLwotCQkJCQlyYyA9IHBjaV9idXNfcmVhZF9jb25maWdfYnl0ZShwY2lfYnVzLAotCQkJCQkJUENJX0RFVkZOKGRldmljZSwgZnVuY3Rpb24pLCAKLQkJCQkJCVBDSV9TRUNPTkRBUllfQlVTLCAmc2Vjb25kYXJ5X2J1cyk7Ci0JCQkJCWlmIChyYykgewotCQkJCQkJcmV0dXJuIHJjOwotCQkJCQl9IGVsc2UgewotCQkJCQkJc3ViX2J1cyA9IChpbnQpIHNlY29uZGFyeV9idXM7Ci0KLQkJCQkJCS8qIFNhdmUgc2Vjb25kYXJ5IGJ1cyBjZmcgc3BjIHdpdGggdGhpcyByZWN1cnNpdmUgY2FsbC4gKi8KLQkJCQkJCXJjID0gcGNpZWhwX3NhdmVfY29uZmlnKGN0cmwsIHN1Yl9idXMsIDAsIDApOwotCQkJCQkJaWYgKHJjKQotCQkJCQkJCXJldHVybiByYzsKLQkJCQkJfQotCQkJCX0KLQotCQkJCWluZGV4ID0gMDsKLQkJCQluZXdfc2xvdCA9IHBjaWVocF9zbG90X2ZpbmQoYnVzbnVtYmVyLCBkZXZpY2UsIGluZGV4KyspOwotCi0JCQkJZGJnKCIlczogbmV3X3Nsb3QgPSAlcCBidXMgJXggZGV2ICV4IGZ1biAleFxuIiwKLQkJCQlfX0ZVTkNUSU9OX18sIG5ld19zbG90LCBidXNudW1iZXIsIGRldmljZSwgaW5kZXgtMSk7Ci0KLQkJCQl3aGlsZSAobmV3X3Nsb3QgJiYgKG5ld19zbG90LT5mdW5jdGlvbiAhPSAodTgpIGZ1bmN0aW9uKSkgewotCQkJCQluZXdfc2xvdCA9IHBjaWVocF9zbG90X2ZpbmQoYnVzbnVtYmVyLCBkZXZpY2UsIGluZGV4KyspOwotCQkJCQlkYmcoIiVzOiB3aGlsZSBsb29wLCBuZXdfc2xvdCA9ICVwIGJ1cyAleCBkZXYgJXggZnVuICV4XG4iLAotCQkJCQlfX0ZVTkNUSU9OX18sIG5ld19zbG90LCBidXNudW1iZXIsIGRldmljZSwgaW5kZXgtMSk7Ci0JCQkJfQotCQkJCWlmICghbmV3X3Nsb3QpIHsKLQkJCQkJLyogU2V0dXAgc2xvdCBzdHJ1Y3R1cmUuICovCi0JCQkJCW5ld19zbG90ID0gcGNpZWhwX3Nsb3RfY3JlYXRlKGJ1c251bWJlcik7Ci0JCQkJCWRiZygiJXM6IGlmLCBuZXdfc2xvdCA9ICVwIGJ1cyAleCBkZXYgJXggZnVuICV4XG4iLAotCQkJCQlfX0ZVTkNUSU9OX18sIG5ld19zbG90LCBidXNudW1iZXIsIGRldmljZSwgZnVuY3Rpb24pOwotCi0JCQkJCWlmIChuZXdfc2xvdCA9PSBOVUxMKQotCQkJCQkJcmV0dXJuKDEpOwotCQkJCX0KLQotCQkJCW5ld19zbG90LT5idXMgPSAodTgpIGJ1c251bWJlcjsKLQkJCQluZXdfc2xvdC0+ZGV2aWNlID0gKHU4KSBkZXZpY2U7Ci0JCQkJbmV3X3Nsb3QtPmZ1bmN0aW9uID0gKHU4KSBmdW5jdGlvbjsKLQkJCQluZXdfc2xvdC0+aXNfYV9ib2FyZCA9IDE7Ci0JCQkJbmV3X3Nsb3QtPnN3aXRjaF9zYXZlID0gMHgxMDsKLQkJCQkvKiBJbiBjYXNlIG9mIHVuc3VwcG9ydGVkIGJvYXJkICovCi0JCQkJbmV3X3Nsb3QtPnN0YXR1cyA9IERldkVycm9yOwotCQkJCW5ld19zbG90LT5wY2lfZGV2ID0gcGNpX2ZpbmRfc2xvdChuZXdfc2xvdC0+YnVzLAotCQkJCQkobmV3X3Nsb3QtPmRldmljZSA8PCAzKSB8IG5ld19zbG90LT5mdW5jdGlvbik7Ci0JCQkJZGJnKCJuZXdfc2xvdC0+cGNpX2RldiA9ICVwXG4iLCBuZXdfc2xvdC0+cGNpX2Rldik7Ci0KLQkJCQlmb3IgKGNsb29wID0gMDsgY2xvb3AgPCAweDIwOyBjbG9vcCsrKSB7Ci0JCQkJCXJjID0gcGNpX2J1c19yZWFkX2NvbmZpZ19kd29yZChwY2lfYnVzLAotCQkJCQkJUENJX0RFVkZOKGRldmljZSwgZnVuY3Rpb24pLAotCQkJCQkJY2xvb3AgPDwgMiwgCi0JCQkJCQkodTMyICopICYobmV3X3Nsb3QtPmNvbmZpZ19zcGFjZSBbY2xvb3BdKSk7Ci0JCQkJCS8qIGRiZygibmV3X3Nsb3QtPmNvbmZpZ19zcGFjZVsleF0gPSAleFxuIiwKLQkJCQkJCWNsb29wLCBuZXdfc2xvdC0+Y29uZmlnX3NwYWNlW2Nsb29wXSk7ICovCi0JCQkJCWlmIChyYykKLQkJCQkJCXJldHVybiByYzsKLQkJCQl9Ci0KLQkJCQlmdW5jdGlvbisrOwotCi0JCQkJc3RvcF9pdCA9IDA7Ci0KLQkJCQkvKiAgdGhpcyBsb29wIHNraXBzIHRvIHRoZSBuZXh0IHByZXNlbnQgZnVuY3Rpb24KLQkJCQkgKiAgcmVhZGluZyBpbiBDbGFzcyBDb2RlIGFuZCBIZWFkZXIgdHlwZS4KLQkJCQkgKi8KLQotCQkJCXdoaWxlICgoZnVuY3Rpb24gPCBtYXhfZnVuY3Rpb25zKSYmKCFzdG9wX2l0KSkgewotCQkJCQlkYmcoIiVzOiBJbiB3aGlsZSBsb29wIFxuIiwgX19GVU5DVElPTl9fKTsKLQkJCQkJcmMgPSBwY2lfYnVzX3JlYWRfY29uZmlnX2R3b3JkKHBjaV9idXMsCi0JCQkJCQkJUENJX0RFVkZOKGRldmljZSwgZnVuY3Rpb24pLAotCQkJCQkJCVBDSV9WRU5ET1JfSUQsICZJRCk7Ci0KLQkJCQkJaWYgKElEID09IDB4RkZGRkZGRkYpIHsgIC8qIG5vdGhpbmcgdGhlcmUuICovCi0JCQkJCQlmdW5jdGlvbisrOwotCQkJCQkJZGJnKCJOb3RoaW5nIHRoZXJlXG4iKTsKLQkJCQkJfSBlbHNlIHsgIC8qIFNvbWV0aGluZyB0aGVyZSAqLwotCQkJCQkJcmMgPSBwY2lfYnVzX3JlYWRfY29uZmlnX2J5dGUocGNpX2J1cywKLQkJCQkJCQlQQ0lfREVWRk4oZGV2aWNlLCBmdW5jdGlvbiksCi0JCQkJCQkJMHgwQiwgJmNsYXNzX2NvZGUpOwotCQkJCQkJaWYgKHJjKQotCQkJCQkJCXJldHVybiByYzsKLQotCQkJCQkJcmMgPSBwY2lfYnVzX3JlYWRfY29uZmlnX2J5dGUocGNpX2J1cywKLQkJCQkJCQlQQ0lfREVWRk4oZGV2aWNlLCBmdW5jdGlvbiksCi0JCQkJCQkJUENJX0hFQURFUl9UWVBFLCAmaGVhZGVyX3R5cGUpOwotCQkJCQkJaWYgKHJjKQotCQkJCQkJCXJldHVybiByYzsKLQotCQkJCQkJZGJnKCJjbGFzc19jb2RlID0gJXgsIGhlYWRlcl90eXBlID0gJXhcbiIsIGNsYXNzX2NvZGUsIGhlYWRlcl90eXBlKTsKLQkJCQkJCXN0b3BfaXQrKzsKLQkJCQkJfQotCQkJCX0KLQotCQkJfSB3aGlsZSAoZnVuY3Rpb24gPCBtYXhfZnVuY3Rpb25zKTsKLQkJCS8qIEVuZCBvZiBJRiAoZGV2aWNlIGluIHNsb3Q/KSAqLwotCQl9IGVsc2UgaWYgKGlzX2hvdF9wbHVnKSB7Ci0JCQkvKiBTZXR1cCBzbG90IHN0cnVjdHVyZSB3aXRoIGVudHJ5IGZvciBlbXB0eSBzbG90ICovCi0JCQluZXdfc2xvdCA9IHBjaWVocF9zbG90X2NyZWF0ZShidXNudW1iZXIpOwotCi0JCQlpZiAobmV3X3Nsb3QgPT0gTlVMTCkgewotCQkJCXJldHVybigxKTsKLQkJCX0KLQkJCWRiZygibmV3X3Nsb3QgPSAlcCwgYnVzID0gJXgsIGRldiA9ICV4LCBmdW4gPSAleFxuIiwgbmV3X3Nsb3QsCi0JCQkJbmV3X3Nsb3QtPmJ1cywgbmV3X3Nsb3QtPmRldmljZSwgbmV3X3Nsb3QtPmZ1bmN0aW9uKTsKLQotCQkJbmV3X3Nsb3QtPmJ1cyA9ICh1OCkgYnVzbnVtYmVyOwotCQkJbmV3X3Nsb3QtPmRldmljZSA9ICh1OCkgZGV2aWNlOwotCQkJbmV3X3Nsb3QtPmZ1bmN0aW9uID0gMDsKLQkJCW5ld19zbG90LT5pc19hX2JvYXJkID0gMDsKLQkJCW5ld19zbG90LT5wcmVzZW5jZV9zYXZlID0gMDsKLQkJCW5ld19zbG90LT5zd2l0Y2hfc2F2ZSA9IDA7Ci0JCX0KLQl9IAkJCS8qIEVuZCBvZiBGT1IgbG9vcCAqLwotCi0JZGJnKCIlczogRXhpdFxuIiwgX19GVU5DVElPTl9fKTsKLQlyZXR1cm4oMCk7Ci19Ci0KLQotLyoKLSAqIHBjaWVocF9zYXZlX3Nsb3RfY29uZmlnCi0gKgotICogU2F2ZXMgY29uZmlndXJhdGlvbiBpbmZvIGZvciBhbGwgUENJIGRldmljZXMgaW4gYSBnaXZlbiBzbG90Ci0gKiBpbmNsdWRpbmcgc3Vib3JkaW5hdGUgYnVzc2VzLgotICoKLSAqIHJldHVybnMgMCBpZiBzdWNjZXNzCi0gKi8KLWludCBwY2llaHBfc2F2ZV9zbG90X2NvbmZpZyhzdHJ1Y3QgY29udHJvbGxlciAqY3RybCwgc3RydWN0IHBjaV9mdW5jICogbmV3X3Nsb3QpCi17Ci0JaW50IHJjOwotCXU4IGNsYXNzX2NvZGU7Ci0JdTggaGVhZGVyX3R5cGU7Ci0JdTMyIElEOwotCXU4IHNlY29uZGFyeV9idXM7Ci0JaW50IHN1Yl9idXM7Ci0JaW50IG1heF9mdW5jdGlvbnM7Ci0JaW50IGZ1bmN0aW9uOwotCWludCBjbG9vcCA9IDA7Ci0JaW50IHN0b3BfaXQ7Ci0Jc3RydWN0IHBjaV9idXMgbHBjaV9idXMsICpwY2lfYnVzOwotCW1lbWNweSgmbHBjaV9idXMsIGN0cmwtPnBjaV9kZXYtPnN1Ym9yZGluYXRlLCBzaXplb2YobHBjaV9idXMpKTsKLQlwY2lfYnVzID0gJmxwY2lfYnVzOwotCXBjaV9idXMtPm51bWJlciA9IG5ld19zbG90LT5idXM7Ci0KLQlJRCA9IDB4RkZGRkZGRkY7Ci0KLQlwY2lfYnVzX3JlYWRfY29uZmlnX2R3b3JkKHBjaV9idXMsIFBDSV9ERVZGTihuZXdfc2xvdC0+ZGV2aWNlLCAwKSwKLQkJCQkJUENJX1ZFTkRPUl9JRCwgJklEKTsKLQotCWlmIChJRCAhPSAweEZGRkZGRkZGKSB7CSAgLyogIGRldmljZSBpbiBzbG90ICovCi0JCXBjaV9idXNfcmVhZF9jb25maWdfYnl0ZShwY2lfYnVzLCBQQ0lfREVWRk4obmV3X3Nsb3QtPmRldmljZSwgMCksCi0JCQkJCTB4MEIsICZjbGFzc19jb2RlKTsKLQotCQlwY2lfYnVzX3JlYWRfY29uZmlnX2J5dGUocGNpX2J1cywgUENJX0RFVkZOKG5ld19zbG90LT5kZXZpY2UsIDApLAotCQkJCQlQQ0lfSEVBREVSX1RZUEUsICZoZWFkZXJfdHlwZSk7Ci0KLQkJaWYgKGhlYWRlcl90eXBlICYgMHg4MCkJLyogTXVsdGktZnVuY3Rpb24gZGV2aWNlICovCi0JCQltYXhfZnVuY3Rpb25zID0gODsKLQkJZWxzZQotCQkJbWF4X2Z1bmN0aW9ucyA9IDE7Ci0KLQkJZnVuY3Rpb24gPSAwOwotCi0JCWRvIHsKLQkJCWlmICgoaGVhZGVyX3R5cGUgJiAweDdGKSA9PSBQQ0lfSEVBREVSX1RZUEVfQlJJREdFKSB7CSAgLyogUENJLVBDSSBCcmlkZ2UgKi8KLQkJCQkvKiAgUmVjdXJzZSB0aGUgc3Vib3JkaW5hdGUgYnVzICovCi0JCQkJcGNpX2J1c19yZWFkX2NvbmZpZ19ieXRlKHBjaV9idXMsCi0JCQkJCVBDSV9ERVZGTihuZXdfc2xvdC0+ZGV2aWNlLCBmdW5jdGlvbiksIAotCQkJCQlQQ0lfU0VDT05EQVJZX0JVUywgJnNlY29uZGFyeV9idXMpOwotCi0JCQkJc3ViX2J1cyA9IChpbnQpIHNlY29uZGFyeV9idXM7Ci0KLQkJCQkvKiBTYXZlIHRoZSBjb25maWcgaGVhZGVycyBmb3IgdGhlIHNlY29uZGFyeSBidXMuICovCi0JCQkJcmMgPSBwY2llaHBfc2F2ZV9jb25maWcoY3RybCwgc3ViX2J1cywgMCwgMCk7Ci0KLQkJCQlpZiAocmMpCi0JCQkJCXJldHVybiByYzsKLQotCQkJfQkvKiBFbmQgb2YgSUYgKi8KLQotCQkJbmV3X3Nsb3QtPnN0YXR1cyA9IDA7Ci0KLQkJCWZvciAoY2xvb3AgPSAwOyBjbG9vcCA8IDB4MjA7IGNsb29wKyspIHsKLQkJCQlwY2lfYnVzX3JlYWRfY29uZmlnX2R3b3JkKHBjaV9idXMsCi0JCQkJCVBDSV9ERVZGTihuZXdfc2xvdC0+ZGV2aWNlLCBmdW5jdGlvbiksIAotCQkJCQljbG9vcCA8PCAyLAotCQkJCQkodTMyICopICYobmV3X3Nsb3QtPmNvbmZpZ19zcGFjZSBbY2xvb3BdKSk7Ci0JCQl9Ci0KLQkJCWZ1bmN0aW9uKys7Ci0KLQkJCXN0b3BfaXQgPSAwOwotCi0JCQkvKiAgdGhpcyBsb29wIHNraXBzIHRvIHRoZSBuZXh0IHByZXNlbnQgZnVuY3Rpb24KLQkJCSAqICByZWFkaW5nIGluIHRoZSBDbGFzcyBDb2RlIGFuZCB0aGUgSGVhZGVyIHR5cGUuCi0JCQkgKi8KLQotCQkJd2hpbGUgKChmdW5jdGlvbiA8IG1heF9mdW5jdGlvbnMpICYmICghc3RvcF9pdCkpIHsKLQkJCQlwY2lfYnVzX3JlYWRfY29uZmlnX2R3b3JkKHBjaV9idXMsCi0JCQkJCVBDSV9ERVZGTihuZXdfc2xvdC0+ZGV2aWNlLCBmdW5jdGlvbiksCi0JCQkJCVBDSV9WRU5ET1JfSUQsICZJRCk7Ci0KLQkJCQlpZiAoSUQgPT0gMHhGRkZGRkZGRikgewkgLyogbm90aGluZyB0aGVyZS4gKi8KLQkJCQkJZnVuY3Rpb24rKzsKLQkJCQl9IGVsc2UgeyAgLyogU29tZXRoaW5nIHRoZXJlICovCi0JCQkJCXBjaV9idXNfcmVhZF9jb25maWdfYnl0ZShwY2lfYnVzLAotCQkJCQkJUENJX0RFVkZOKG5ld19zbG90LT5kZXZpY2UsIGZ1bmN0aW9uKSwKLQkJCQkJCTB4MEIsICZjbGFzc19jb2RlKTsKLQotCQkJCQlwY2lfYnVzX3JlYWRfY29uZmlnX2J5dGUocGNpX2J1cywKLQkJCQkJCVBDSV9ERVZGTihuZXdfc2xvdC0+ZGV2aWNlLCBmdW5jdGlvbiksCi0JCQkJCQlQQ0lfSEVBREVSX1RZUEUsICZoZWFkZXJfdHlwZSk7Ci0KLQkJCQkJc3RvcF9pdCsrOwotCQkJCX0KLQkJCX0KLQotCQl9IHdoaWxlIChmdW5jdGlvbiA8IG1heF9mdW5jdGlvbnMpOwotCX0JCQkvKiBFbmQgb2YgSUYgKGRldmljZSBpbiBzbG90PykgKi8KLQllbHNlIHsKLQkJcmV0dXJuIDI7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLQotLyoKLSAqIHBjaWVocF9zYXZlX3VzZWRfcmVzb3VyY2VzCi0gKgotICogU3RvcmVzIHVzZWQgcmVzb3VyY2UgaW5mb3JtYXRpb24gZm9yIGV4aXN0aW5nIGJvYXJkcy4gIHRoaXMgaXMKLSAqIGZvciBib2FyZHMgdGhhdCB3ZXJlIGluIHRoZSBzeXN0ZW0gd2hlbiB0aGlzIGRyaXZlciB3YXMgbG9hZGVkLgotICogdGhpcyBmdW5jdGlvbiBpcyBmb3IgaG90IHBsdWcgQURECi0gKgotICogcmV0dXJucyAwIGlmIHN1Y2Nlc3MKLSAqIGlmIGRpc2FibGUgID09IDEoRElTQUJMRV9DQVJEKSwKLSAqICBpdCBsb29wcyBmb3IgYWxsIGZ1bmN0aW9ucyBvZiB0aGUgc2xvdCBhbmQgZGlzYWJsZXMgdGhlbS4KLSAqIGVsc2UsIGl0IGp1c3QgZ2V0IHJlc291cmNlcyBvZiB0aGUgZnVuY3Rpb24gYW5kIHJldHVybi4KLSAqLwotaW50IHBjaWVocF9zYXZlX3VzZWRfcmVzb3VyY2VzKHN0cnVjdCBjb250cm9sbGVyICpjdHJsLCBzdHJ1Y3QgcGNpX2Z1bmMgKmZ1bmMsIGludCBkaXNhYmxlKQotewotCXU4IGNsb29wOwotCXU4IGhlYWRlcl90eXBlOwotCXU4IHNlY29uZGFyeV9idXM7Ci0JdTggdGVtcF9ieXRlOwotCXUxNiBjb21tYW5kOwotCXUxNiBzYXZlX2NvbW1hbmQ7Ci0JdTE2IHdfYmFzZSwgd19sZW5ndGg7Ci0JdTMyIHRlbXBfcmVnaXN0ZXI7Ci0JdTMyIHNhdmVfYmFzZTsKLQl1MzIgYmFzZSwgbGVuZ3RoOwotCXU2NCBiYXNlNjQgPSAwOwotCWludCBpbmRleCA9IDA7Ci0JdW5zaWduZWQgaW50IGRldmZuOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKm1lbV9ub2RlID0gTlVMTDsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICpwX21lbV9ub2RlID0gTlVMTDsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICp0X21lbV9ub2RlOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKmlvX25vZGU7Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqYnVzX25vZGU7Ci0Jc3RydWN0IHBjaV9idXMgbHBjaV9idXMsICpwY2lfYnVzOwotCW1lbWNweSgmbHBjaV9idXMsIGN0cmwtPnBjaV9kZXYtPnN1Ym9yZGluYXRlLCBzaXplb2YobHBjaV9idXMpKTsKLQlwY2lfYnVzID0gJmxwY2lfYnVzOwotCi0JaWYgKGRpc2FibGUpCi0JCWZ1bmMgPSBwY2llaHBfc2xvdF9maW5kKGZ1bmMtPmJ1cywgZnVuYy0+ZGV2aWNlLCBpbmRleCsrKTsKLQotCXdoaWxlICgoZnVuYyAhPSBOVUxMKSAmJiBmdW5jLT5pc19hX2JvYXJkKSB7Ci0JCXBjaV9idXMtPm51bWJlciA9IGZ1bmMtPmJ1czsKLQkJZGV2Zm4gPSBQQ0lfREVWRk4oZnVuYy0+ZGV2aWNlLCBmdW5jLT5mdW5jdGlvbik7Ci0KLQkJLyogU2F2ZSB0aGUgY29tbWFuZCByZWdpc3RlciAqLwotCQlwY2lfYnVzX3JlYWRfY29uZmlnX3dvcmQocGNpX2J1cywgZGV2Zm4sIFBDSV9DT01NQU5ELCAmc2F2ZV9jb21tYW5kKTsKLQotCQlpZiAoZGlzYWJsZSkgewotCQkJLyogZGlzYWJsZSBjYXJkICovCi0JCQljb21tYW5kID0gMHgwMDsKLQkJCXBjaV9idXNfd3JpdGVfY29uZmlnX3dvcmQocGNpX2J1cywgZGV2Zm4sIFBDSV9DT01NQU5ELCBjb21tYW5kKTsKLQkJfQotCi0JCS8qIENoZWNrIGZvciBCcmlkZ2UgKi8KLQkJcGNpX2J1c19yZWFkX2NvbmZpZ19ieXRlKHBjaV9idXMsIGRldmZuLCBQQ0lfSEVBREVSX1RZUEUsICZoZWFkZXJfdHlwZSk7Ci0KLQkJaWYgKChoZWFkZXJfdHlwZSAmIDB4N0YpID09IFBDSV9IRUFERVJfVFlQRV9CUklER0UpIHsgICAgIC8qIFBDSS1QQ0kgQnJpZGdlICovCi0JCQlkYmcoIlNhdmVfdXNlZF9yZXMgb2YgUENJIGJyaWRnZSBiOmQ9MHgleDoleCwgc2M9MHgleFxuIiwKLQkJCQkJZnVuYy0+YnVzLCBmdW5jLT5kZXZpY2UsIHNhdmVfY29tbWFuZCk7Ci0JCQlpZiAoZGlzYWJsZSkgewotCQkJCS8qIENsZWFyIEJyaWRnZSBDb250cm9sIFJlZ2lzdGVyICovCi0JCQkJY29tbWFuZCA9IDB4MDA7Ci0JCQkJcGNpX2J1c193cml0ZV9jb25maWdfd29yZChwY2lfYnVzLCBkZXZmbiwgUENJX0JSSURHRV9DT05UUk9MLCBjb21tYW5kKTsKLQkJCX0KLQotCQkJcGNpX2J1c19yZWFkX2NvbmZpZ19ieXRlKHBjaV9idXMsIGRldmZuLCBQQ0lfU0VDT05EQVJZX0JVUywgJnNlY29uZGFyeV9idXMpOwotCQkJcGNpX2J1c19yZWFkX2NvbmZpZ19ieXRlKHBjaV9idXMsIGRldmZuLCBQQ0lfU1VCT1JESU5BVEVfQlVTLCAmdGVtcF9ieXRlKTsKLQotCQkJYnVzX25vZGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcGNpX3Jlc291cmNlKSwKLQkJCQkJCUdGUF9LRVJORUwpOwotCQkJaWYgKCFidXNfbm9kZSkKLQkJCQlyZXR1cm4gLUVOT01FTTsKLQotCQkJYnVzX25vZGUtPmJhc2UgPSAodWxvbmcpc2Vjb25kYXJ5X2J1czsKLQkJCWJ1c19ub2RlLT5sZW5ndGggPSAodWxvbmcpKHRlbXBfYnl0ZSAtIHNlY29uZGFyeV9idXMgKyAxKTsKLQotCQkJYnVzX25vZGUtPm5leHQgPSBmdW5jLT5idXNfaGVhZDsKLQkJCWZ1bmMtPmJ1c19oZWFkID0gYnVzX25vZGU7Ci0KLQkJCS8qIFNhdmUgSU8gYmFzZSBhbmQgTGltaXQgcmVnaXN0ZXJzICovCi0JCQlwY2lfYnVzX3JlYWRfY29uZmlnX2J5dGUocGNpX2J1cywgZGV2Zm4sIFBDSV9JT19CQVNFLCAmdGVtcF9ieXRlKTsKLQkJCWJhc2UgPSB0ZW1wX2J5dGU7Ci0JCQlwY2lfYnVzX3JlYWRfY29uZmlnX2J5dGUocGNpX2J1cywgZGV2Zm4sIFBDSV9JT19MSU1JVCwgJnRlbXBfYnl0ZSk7Ci0JCQlsZW5ndGggPSB0ZW1wX2J5dGU7Ci0KLQkJCWlmICgoYmFzZSA8PSBsZW5ndGgpICYmICghZGlzYWJsZSB8fCAoc2F2ZV9jb21tYW5kICYgUENJX0NPTU1BTkRfSU8pKSkgewotCQkJCWlvX25vZGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcGNpX3Jlc291cmNlKSwKLQkJCQkJCQlHRlBfS0VSTkVMKTsKLQkJCQlpZiAoIWlvX25vZGUpCi0JCQkJCXJldHVybiAtRU5PTUVNOwotCi0JCQkJaW9fbm9kZS0+YmFzZSA9ICh1bG9uZykoYmFzZSAmIFBDSV9JT19SQU5HRV9NQVNLKSA8PCA4OwotCQkJCWlvX25vZGUtPmxlbmd0aCA9ICh1bG9uZykobGVuZ3RoIC0gYmFzZSArIDB4MTApIDw8IDg7Ci0KLQkJCQlpb19ub2RlLT5uZXh0ID0gZnVuYy0+aW9faGVhZDsKLQkJCQlmdW5jLT5pb19oZWFkID0gaW9fbm9kZTsKLQkJCX0KLQotCQkJLyogU2F2ZSBtZW1vcnkgYmFzZSBhbmQgTGltaXQgcmVnaXN0ZXJzICovCi0JCQlwY2lfYnVzX3JlYWRfY29uZmlnX3dvcmQocGNpX2J1cywgZGV2Zm4sIFBDSV9NRU1PUllfQkFTRSwgJndfYmFzZSk7Ci0JCQlwY2lfYnVzX3JlYWRfY29uZmlnX3dvcmQocGNpX2J1cywgZGV2Zm4sIFBDSV9NRU1PUllfTElNSVQsICZ3X2xlbmd0aCk7Ci0KLQkJCWlmICgod19iYXNlIDw9IHdfbGVuZ3RoKSAmJiAoIWRpc2FibGUgfHwgKHNhdmVfY29tbWFuZCAmIFBDSV9DT01NQU5EX01FTU9SWSkpKSB7Ci0JCQkJbWVtX25vZGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcGNpX3Jlc291cmNlKSwKLQkJCQkJCUdGUF9LRVJORUwpOwotCQkJCWlmICghbWVtX25vZGUpCi0JCQkJCXJldHVybiAtRU5PTUVNOwotCi0JCQkJbWVtX25vZGUtPmJhc2UgPSAodWxvbmcpd19iYXNlIDw8IDE2OwotCQkJCW1lbV9ub2RlLT5sZW5ndGggPSAodWxvbmcpKHdfbGVuZ3RoIC0gd19iYXNlICsgMHgxMCkgPDwgMTY7Ci0KLQkJCQltZW1fbm9kZS0+bmV4dCA9IGZ1bmMtPm1lbV9oZWFkOwotCQkJCWZ1bmMtPm1lbV9oZWFkID0gbWVtX25vZGU7Ci0JCQl9Ci0JCQkvKiBTYXZlIHByZWZldGNoYWJsZSBtZW1vcnkgYmFzZSBhbmQgTGltaXQgcmVnaXN0ZXJzICovCi0JCQlwY2lfYnVzX3JlYWRfY29uZmlnX3dvcmQocGNpX2J1cywgZGV2Zm4sIFBDSV9QUkVGX01FTU9SWV9CQVNFLCAmd19iYXNlKTsKLQkJCXBjaV9idXNfcmVhZF9jb25maWdfd29yZChwY2lfYnVzLCBkZXZmbiwgUENJX1BSRUZfTUVNT1JZX0xJTUlULCAmd19sZW5ndGgpOwotCi0JCQlpZiAoKHdfYmFzZSA8PSB3X2xlbmd0aCkgJiYgKCFkaXNhYmxlIHx8IChzYXZlX2NvbW1hbmQgJiBQQ0lfQ09NTUFORF9NRU1PUlkpKSkgewotCQkJCXBfbWVtX25vZGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcGNpX3Jlc291cmNlKSwKLQkJCQkJCUdGUF9LRVJORUwpOwotCQkJCWlmICghcF9tZW1fbm9kZSkKLQkJCQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkJCQlwX21lbV9ub2RlLT5iYXNlID0gKHVsb25nKXdfYmFzZSA8PCAxNjsKLQkJCQlwX21lbV9ub2RlLT5sZW5ndGggPSAodWxvbmcpKHdfbGVuZ3RoIC0gd19iYXNlICsgMHgxMCkgPDwgMTY7Ci0KLQkJCQlwX21lbV9ub2RlLT5uZXh0ID0gZnVuYy0+cF9tZW1faGVhZDsKLQkJCQlmdW5jLT5wX21lbV9oZWFkID0gcF9tZW1fbm9kZTsKLQkJCX0KLQkJfSBlbHNlIGlmICgoaGVhZGVyX3R5cGUgJiAweDdGKSA9PSBQQ0lfSEVBREVSX1RZUEVfTk9STUFMKSB7Ci0JCQlkYmcoIlNhdmVfdXNlZF9yZXMgb2YgUENJIGFkYXB0ZXIgYjpkPTB4JXg6JXgsIHNjPTB4JXhcbiIsCi0JCQkJCWZ1bmMtPmJ1cywgZnVuYy0+ZGV2aWNlLCBzYXZlX2NvbW1hbmQpOwotCi0JCQkvKiBGaWd1cmUgb3V0IElPIGFuZCBtZW1vcnkgYmFzZSBsZW5ndGhzICovCi0JCQlmb3IgKGNsb29wID0gUENJX0JBU0VfQUREUkVTU18wOyBjbG9vcCA8PSBQQ0lfQkFTRV9BRERSRVNTXzU7IGNsb29wICs9IDQpIHsKLQkJCQlwY2lfYnVzX3JlYWRfY29uZmlnX2R3b3JkKHBjaV9idXMsIGRldmZuLCBjbG9vcCwgJnNhdmVfYmFzZSk7Ci0KLQkJCQl0ZW1wX3JlZ2lzdGVyID0gMHhGRkZGRkZGRjsKLQkJCQlwY2lfYnVzX3dyaXRlX2NvbmZpZ19kd29yZChwY2lfYnVzLCBkZXZmbiwgY2xvb3AsIHRlbXBfcmVnaXN0ZXIpOwotCQkJCXBjaV9idXNfcmVhZF9jb25maWdfZHdvcmQocGNpX2J1cywgZGV2Zm4sIGNsb29wLCAmdGVtcF9yZWdpc3Rlcik7Ci0KLQkJCQlpZiAoIWRpc2FibGUpCi0JCQkJCXBjaV9idXNfd3JpdGVfY29uZmlnX2R3b3JkKHBjaV9idXMsIGRldmZuLCBjbG9vcCwgc2F2ZV9iYXNlKTsKLQotCQkJCWlmICghdGVtcF9yZWdpc3RlcikKLQkJCQkJY29udGludWU7Ci0KLQkJCQliYXNlID0gdGVtcF9yZWdpc3RlcjsKLQotCQkJCWlmICgoYmFzZSAmIFBDSV9CQVNFX0FERFJFU1NfU1BBQ0VfSU8pICYmCi0JCQkJCQkoIWRpc2FibGUgfHwgKHNhdmVfY29tbWFuZCAmIFBDSV9DT01NQU5EX0lPKSkpIHsKLQkJCQkJLyogSU8gYmFzZSAqLwotCQkJCQkvKiBzZXQgdGVtcF9yZWdpc3RlciA9IGFtb3VudCBvZiBJTyBzcGFjZSByZXF1ZXN0ZWQgKi8KLQkJCQkJYmFzZSA9IGJhc2UgJiAweEZGRkZGRkZDTDsKLQkJCQkJYmFzZSA9ICh+YmFzZSkgKyAxOwotCi0JCQkJCWlvX25vZGUgPSBrbWFsbG9jKHNpemVvZiAoc3RydWN0IHBjaV9yZXNvdXJjZSksCi0JCQkJCQkJCUdGUF9LRVJORUwpOwotCQkJCQlpZiAoIWlvX25vZGUpCi0JCQkJCQlyZXR1cm4gLUVOT01FTTsKLQotCQkJCQlpb19ub2RlLT5iYXNlID0gKHVsb25nKXNhdmVfYmFzZSAmIFBDSV9CQVNFX0FERFJFU1NfSU9fTUFTSzsKLQkJCQkJaW9fbm9kZS0+bGVuZ3RoID0gKHVsb25nKWJhc2U7Ci0JCQkJCWRiZygic3VyIGFkYXB0ZXI6IElPIGJhcj0weCV4KGxlbmd0aD0weCV4KVxuIiwKLQkJCQkJCWlvX25vZGUtPmJhc2UsIGlvX25vZGUtPmxlbmd0aCk7Ci0KLQkJCQkJaW9fbm9kZS0+bmV4dCA9IGZ1bmMtPmlvX2hlYWQ7Ci0JCQkJCWZ1bmMtPmlvX2hlYWQgPSBpb19ub2RlOwotCQkJCX0gZWxzZSB7ICAvKiBtYXAgTWVtb3J5ICovCi0JCQkJCWludCBwcmVmZXRjaGFibGUgPSAxOwotCQkJCQkvKiBzdHJ1Y3QgcGNpX3Jlc291cmNlcyAqKnJlc19ub2RlOyAqLwotCQkJCQljaGFyICpyZXNfdHlwZV9zdHIgPSAiUE1FTSI7Ci0JCQkJCXUzMiB0ZW1wX3JlZ2lzdGVyMjsKLQotCQkJCQl0X21lbV9ub2RlID0ga21hbGxvYyhzaXplb2YgKHN0cnVjdCBwY2lfcmVzb3VyY2UpLAotCQkJCQkJCQlHRlBfS0VSTkVMKTsKLQkJCQkJaWYgKCF0X21lbV9ub2RlKQotCQkJCQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkJCQkJaWYgKCEoYmFzZSAmIFBDSV9CQVNFX0FERFJFU1NfTUVNX1BSRUZFVENIKSAmJgotCQkJCQkJCSghZGlzYWJsZSB8fCAoc2F2ZV9jb21tYW5kICYgUENJX0NPTU1BTkRfTUVNT1JZKSkpIHsKLQkJCQkJCXByZWZldGNoYWJsZSA9IDA7Ci0JCQkJCQltZW1fbm9kZSA9IHRfbWVtX25vZGU7Ci0JCQkJCQlyZXNfdHlwZV9zdHIrKzsKLQkJCQkJfSBlbHNlCi0JCQkJCQlwX21lbV9ub2RlID0gdF9tZW1fbm9kZTsKLQotCQkJCQliYXNlID0gYmFzZSAmIDB4RkZGRkZGRjBMOwotCQkJCQliYXNlID0gKH5iYXNlKSArIDE7Ci0KLQkJCQkJc3dpdGNoICh0ZW1wX3JlZ2lzdGVyICYgUENJX0JBU0VfQUREUkVTU19NRU1fVFlQRV9NQVNLKSB7Ci0JCQkJCWNhc2UgUENJX0JBU0VfQUREUkVTU19NRU1fVFlQRV8zMjoKLQkJCQkJCWlmIChwcmVmZXRjaGFibGUpIHsKLQkJCQkJCQlwX21lbV9ub2RlLT5iYXNlID0gKHVsb25nKXNhdmVfYmFzZSAmIFBDSV9CQVNFX0FERFJFU1NfTUVNX01BU0s7Ci0JCQkJCQkJcF9tZW1fbm9kZS0+bGVuZ3RoID0gKHVsb25nKWJhc2U7Ci0JCQkJCQkJZGJnKCJzdXIgYWRhcHRlcjogMzIgJXMgYmFyPTB4JXgobGVuZ3RoPTB4JXgpXG4iLAotCQkJCQkJCQlyZXNfdHlwZV9zdHIsIAotCQkJCQkJCQlwX21lbV9ub2RlLT5iYXNlLAotCQkJCQkJCQlwX21lbV9ub2RlLT5sZW5ndGgpOwotCi0JCQkJCQkJcF9tZW1fbm9kZS0+bmV4dCA9IGZ1bmMtPnBfbWVtX2hlYWQ7Ci0JCQkJCQkJZnVuYy0+cF9tZW1faGVhZCA9IHBfbWVtX25vZGU7Ci0JCQkJCQl9IGVsc2UgewotCQkJCQkJCW1lbV9ub2RlLT5iYXNlID0gKHVsb25nKXNhdmVfYmFzZSAmIFBDSV9CQVNFX0FERFJFU1NfTUVNX01BU0s7Ci0JCQkJCQkJbWVtX25vZGUtPmxlbmd0aCA9ICh1bG9uZyliYXNlOwotCQkJCQkJCWRiZygic3VyIGFkYXB0ZXI6IDMyICVzIGJhcj0weCV4KGxlbmd0aD0weCV4KVxuIiwKLQkJCQkJCQkJcmVzX3R5cGVfc3RyLCAKLQkJCQkJCQkJbWVtX25vZGUtPmJhc2UsCi0JCQkJCQkJCW1lbV9ub2RlLT5sZW5ndGgpOwotCi0JCQkJCQkJbWVtX25vZGUtPm5leHQgPSBmdW5jLT5tZW1faGVhZDsKLQkJCQkJCQlmdW5jLT5tZW1faGVhZCA9IG1lbV9ub2RlOwotCQkJCQkJfQotCQkJCQkJYnJlYWs7Ci0JCQkJCWNhc2UgUENJX0JBU0VfQUREUkVTU19NRU1fVFlQRV82NDoKLQkJCQkJCXBjaV9idXNfcmVhZF9jb25maWdfZHdvcmQocGNpX2J1cywgZGV2Zm4sIGNsb29wKzQsICZ0ZW1wX3JlZ2lzdGVyMik7Ci0JCQkJCQliYXNlNjQgPSB0ZW1wX3JlZ2lzdGVyMjsKLQkJCQkJCWJhc2U2NCA9IChiYXNlNjQgPDwgMzIpIHwgc2F2ZV9iYXNlOwotCi0JCQkJCQlpZiAodGVtcF9yZWdpc3RlcjIpIHsKLQkJCQkJCQlkYmcoInN1ciBhZGFwdGVyOiA2NCAlcyBoaWdoIGR3b3JkIG9mIGJhc2U2NCgweCV4OiV4KSBtYXNrZWQgdG8gMFxuIiwgCi0JCQkJCQkJCXJlc190eXBlX3N0ciwgdGVtcF9yZWdpc3RlcjIsICh1MzIpYmFzZTY0KTsKLQkJCQkJCQliYXNlNjQgJj0gMHgwMDAwMDAwMEZGRkZGRkZGTDsKLQkJCQkJCX0KLQotCQkJCQkJaWYgKHByZWZldGNoYWJsZSkgewotCQkJCQkJCXBfbWVtX25vZGUtPmJhc2UgPSBiYXNlNjQgJiBQQ0lfQkFTRV9BRERSRVNTX01FTV9NQVNLOwotCQkJCQkJCXBfbWVtX25vZGUtPmxlbmd0aCA9IGJhc2U7Ci0JCQkJCQkJZGJnKCJzdXIgYWRhcHRlcjogNjQgJXMgYmFzZT0weCV4KGxlbj0weCV4KVxuIiwKLQkJCQkJCQkJcmVzX3R5cGVfc3RyLCAKLQkJCQkJCQkJcF9tZW1fbm9kZS0+YmFzZSwKLQkJCQkJCQkJcF9tZW1fbm9kZS0+bGVuZ3RoKTsKLQotCQkJCQkJCXBfbWVtX25vZGUtPm5leHQgPSBmdW5jLT5wX21lbV9oZWFkOwotCQkJCQkJCWZ1bmMtPnBfbWVtX2hlYWQgPSBwX21lbV9ub2RlOwotCQkJCQkJfSBlbHNlIHsKLQkJCQkJCQltZW1fbm9kZS0+YmFzZSA9IGJhc2U2NCAmIFBDSV9CQVNFX0FERFJFU1NfTUVNX01BU0s7Ci0JCQkJCQkJbWVtX25vZGUtPmxlbmd0aCA9IGJhc2U7Ci0JCQkJCQkJZGJnKCJzdXIgYWRhcHRlcjogNjQgJXMgYmFzZT0weCV4KGxlbj0weCV4KVxuIiwKLQkJCQkJCQkJcmVzX3R5cGVfc3RyLCAKLQkJCQkJCQkJbWVtX25vZGUtPmJhc2UsCi0JCQkJCQkJCW1lbV9ub2RlLT5sZW5ndGgpOwotCi0JCQkJCQkJbWVtX25vZGUtPm5leHQgPSBmdW5jLT5tZW1faGVhZDsKLQkJCQkJCQlmdW5jLT5tZW1faGVhZCA9IG1lbV9ub2RlOwotCQkJCQkJfQotCQkJCQkJY2xvb3AgKz0gNDsKLQkJCQkJCWJyZWFrOwotCQkJCQlkZWZhdWx0OgotCQkJCQkJZGJnKCJhc3VyOiByZXNlcnZlZCBCQVIgdHlwZT0weCV4XG4iLAotCQkJCQkJCXRlbXBfcmVnaXN0ZXIpOwotCQkJCQkJYnJlYWs7Ci0JCQkJCX0KLQkJCQl9IAotCQkJfQkvKiBFbmQgb2YgYmFzZSByZWdpc3RlciBsb29wICovCi0JCX0gZWxzZSB7CS8qIFNvbWUgb3RoZXIgdW5rbm93biBoZWFkZXIgdHlwZSAqLwotCQkJZGJnKCJTYXZlX3VzZWRfcmVzIG9mIFBDSSB1bmtub3duIHR5cGUgYjpkPTB4JXg6JXguIHNraXAuXG4iLAotCQkJCQlmdW5jLT5idXMsIGZ1bmMtPmRldmljZSk7Ci0JCX0KLQotCQkvKiBmaW5kIHRoZSBuZXh0IGRldmljZSBpbiB0aGlzIHNsb3QgKi8KLQkJaWYgKCFkaXNhYmxlKQotCQkJYnJlYWs7Ci0JCWZ1bmMgPSBwY2llaHBfc2xvdF9maW5kKGZ1bmMtPmJ1cywgZnVuYy0+ZGV2aWNlLCBpbmRleCsrKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi0vKioKLSAqIGtmcmVlX3Jlc291cmNlX2xpc3Q6IHJlbGVhc2UgbWVtb3J5IG9mIGFsbCBsaXN0IG1lbWJlcnMKLSAqIEByZXM6IHJlc291cmNlIGxpc3QgdG8gZnJlZQotICovCi1zdGF0aWMgaW5saW5lIHZvaWQKLXJldHVybl9yZXNvdXJjZV9saXN0KHN0cnVjdCBwY2lfcmVzb3VyY2UgKipmdW5jLCBzdHJ1Y3QgcGNpX3Jlc291cmNlICoqcmVzKQotewotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKm5vZGU7Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqdF9ub2RlOwotCi0Jbm9kZSA9ICpmdW5jOwotCSpmdW5jID0gTlVMTDsKLQl3aGlsZSAobm9kZSkgewotCQl0X25vZGUgPSBub2RlLT5uZXh0OwotCQlyZXR1cm5fcmVzb3VyY2UocmVzLCBub2RlKTsKLQkJbm9kZSA9IHRfbm9kZTsKLQl9Ci19Ci0KLS8qCi0gKiBwY2llaHBfcmV0dXJuX2JvYXJkX3Jlc291cmNlcwotICoKLSAqIHRoaXMgcm91dGluZSByZXR1cm5zIGFsbCByZXNvdXJjZXMgYWxsb2NhdGVkIHRvIGEgYm9hcmQgdG8KLSAqIHRoZSBhdmFpbGFibGUgcG9vbC4KLSAqCi0gKiByZXR1cm5zIDAgaWYgc3VjY2VzcwotICovCi1pbnQgcGNpZWhwX3JldHVybl9ib2FyZF9yZXNvdXJjZXMoc3RydWN0IHBjaV9mdW5jICogZnVuYywKLQkJCQlzdHJ1Y3QgcmVzb3VyY2VfbGlzdHMgKiByZXNvdXJjZXMpCi17Ci0JaW50IHJjOwotCi0JZGJnKCIlc1xuIiwgX19GVU5DVElPTl9fKTsKLQotCWlmICghZnVuYykKLQkJcmV0dXJuIDE7Ci0KLQlyZXR1cm5fcmVzb3VyY2VfbGlzdCgmKGZ1bmMtPmlvX2hlYWQpLCYocmVzb3VyY2VzLT5pb19oZWFkKSk7Ci0JcmV0dXJuX3Jlc291cmNlX2xpc3QoJihmdW5jLT5tZW1faGVhZCksJihyZXNvdXJjZXMtPm1lbV9oZWFkKSk7Ci0JcmV0dXJuX3Jlc291cmNlX2xpc3QoJihmdW5jLT5wX21lbV9oZWFkKSwmKHJlc291cmNlcy0+cF9tZW1faGVhZCkpOwotCXJldHVybl9yZXNvdXJjZV9saXN0KCYoZnVuYy0+YnVzX2hlYWQpLCYocmVzb3VyY2VzLT5idXNfaGVhZCkpOwotCi0JcmMgPSBwY2llaHBfcmVzb3VyY2Vfc29ydF9hbmRfY29tYmluZSgmKHJlc291cmNlcy0+bWVtX2hlYWQpKTsKLQlyYyB8PSBwY2llaHBfcmVzb3VyY2Vfc29ydF9hbmRfY29tYmluZSgmKHJlc291cmNlcy0+cF9tZW1faGVhZCkpOwotCXJjIHw9IHBjaWVocF9yZXNvdXJjZV9zb3J0X2FuZF9jb21iaW5lKCYocmVzb3VyY2VzLT5pb19oZWFkKSk7Ci0JcmMgfD0gcGNpZWhwX3Jlc291cmNlX3NvcnRfYW5kX2NvbWJpbmUoJihyZXNvdXJjZXMtPmJ1c19oZWFkKSk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLS8qKgotICoga2ZyZWVfcmVzb3VyY2VfbGlzdDogcmVsZWFzZSBtZW1vcnkgb2YgYWxsIGxpc3QgbWVtYmVycwotICogQHJlczogcmVzb3VyY2UgbGlzdCB0byBmcmVlCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAota2ZyZWVfcmVzb3VyY2VfbGlzdChzdHJ1Y3QgcGNpX3Jlc291cmNlICoqcikKLXsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICpyZXMsICp0cmVzOwotCi0JcmVzID0gKnI7Ci0JKnIgPSBOVUxMOwotCi0Jd2hpbGUgKHJlcykgewotCQl0cmVzID0gcmVzOwotCQlyZXMgPSByZXMtPm5leHQ7Ci0JCWtmcmVlKHRyZXMpOwotCX0KLX0KLQotLyoqCi0gKiBwY2llaHBfZGVzdHJveV9yZXNvdXJjZV9saXN0OiBwdXQgbm9kZSBiYWNrIGluIHRoZSByZXNvdXJjZSBsaXN0Ci0gKiBAcmVzb3VyY2VzOiBsaXN0IHRvIHB1dCBub2RlcyBiYWNrCi0gKi8KLXZvaWQgcGNpZWhwX2Rlc3Ryb3lfcmVzb3VyY2VfbGlzdChzdHJ1Y3QgcmVzb3VyY2VfbGlzdHMgKiByZXNvdXJjZXMpCi17Ci0Ja2ZyZWVfcmVzb3VyY2VfbGlzdCgmKHJlc291cmNlcy0+aW9faGVhZCkpOwotCWtmcmVlX3Jlc291cmNlX2xpc3QoJihyZXNvdXJjZXMtPm1lbV9oZWFkKSk7Ci0Ja2ZyZWVfcmVzb3VyY2VfbGlzdCgmKHJlc291cmNlcy0+cF9tZW1faGVhZCkpOwotCWtmcmVlX3Jlc291cmNlX2xpc3QoJihyZXNvdXJjZXMtPmJ1c19oZWFkKSk7Ci19Ci0KLS8qKgotICogcGNpZWhwX2Rlc3Ryb3lfYm9hcmRfcmVzb3VyY2VzOiBwdXQgbm9kZSBiYWNrIGluIHRoZSByZXNvdXJjZSBsaXN0Ci0gKiBAcmVzb3VyY2VzOiBsaXN0IHRvIHB1dCBub2RlcyBiYWNrCi0gKi8KLXZvaWQgcGNpZWhwX2Rlc3Ryb3lfYm9hcmRfcmVzb3VyY2VzKHN0cnVjdCBwY2lfZnVuYyAqIGZ1bmMpCi17Ci0Ja2ZyZWVfcmVzb3VyY2VfbGlzdCgmKGZ1bmMtPmlvX2hlYWQpKTsKLQlrZnJlZV9yZXNvdXJjZV9saXN0KCYoZnVuYy0+bWVtX2hlYWQpKTsKLQlrZnJlZV9yZXNvdXJjZV9saXN0KCYoZnVuYy0+cF9tZW1faGVhZCkpOwotCWtmcmVlX3Jlc291cmNlX2xpc3QoJihmdW5jLT5idXNfaGVhZCkpOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBybS5oIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBybS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNWYyMGZiLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwcm0uaAorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLS8qCi0gKiBQQ0lFSFBSTSA6IFBDSUVIUCBSZXNvdXJjZSBNYW5hZ2VyIGZvciBBQ1BJL25vbi1BQ1BJIHBsYXRmb3JtCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk1LDIwMDEgQ29tcGFxIENvbXB1dGVyIENvcnBvcmF0aW9uCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEsMjAwMyBHcmVnIEtyb2FoLUhhcnRtYW4gKGdyZWdAa3JvYWguY29tKQotICogQ29weXJpZ2h0IChDKSAyMDAxIElCTSBDb3JwLgotICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDQgSW50ZWwgQ29ycG9yYXRpb24KLSAqCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0Ci0gKiB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCi0gKiBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZQotICogZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICoKLSAqIFNlbmQgZmVlZGJhY2sgdG8gPGdyZWdAa3JvYWguY29tPiwgPGtyaXN0ZW4uYy5hY2NhcmRpQGludGVsLmNvbT4KLSAqCi0gKi8KLQotI2lmbmRlZiBfUENJRUhQUk1fSF8KLSNkZWZpbmUgX1BDSUVIUFJNX0hfCi0KLSNpZmRlZglDT05GSUdfSE9UUExVR19QQ0lfUENJRV9QSFBSTV9OT05BQ1BJCi0jaW5jbHVkZSAicGNpZWhwcm1fbm9uYWNwaS5oIgotI2VuZGlmCi0KLWludCBwY2llaHBybV9pbml0KGVudW0gcGhwX2N0bHJfdHlwZSBjdCk7Ci12b2lkIHBjaWVocHJtX2NsZWFudXAodm9pZCk7Ci1pbnQgcGNpZWhwcm1fcHJpbnRfcGlydCh2b2lkKTsKLWludCBwY2llaHBybV9maW5kX2F2YWlsYWJsZV9yZXNvdXJjZXMoc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwpOwotaW50IHBjaWVocHJtX3NldF9ocHAoc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwsIHN0cnVjdCBwY2lfZnVuYyAqZnVuYywgdTggY2FyZF90eXBlKTsKLXZvaWQgcGNpZWhwcm1fZW5hYmxlX2NhcmQoc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwsIHN0cnVjdCBwY2lfZnVuYyAqZnVuYywgdTggY2FyZF90eXBlKTsKLQotI2lmZGVmCURFQlVHCi0jZGVmaW5lIFJFU19DSEVDSyh0aGlzLCBiaXRzKQlcCi0JeyBpZiAoKCh0aGlzKSAmIChiaXRzIC0gMSkpKSBcCi0JCXByaW50aygiJXM6JWQgRVJSOiBwb3RlbnRpYWwgcmVzIGxvc3MhXG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsgfQotI2Vsc2UKLSNkZWZpbmUgUkVTX0NIRUNLKHRoaXMsIGJpdHMpCi0jZW5kaWYKLQotI2VuZGlmCQkJCS8qIF9QQ0lFSFBSTV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBybV9hY3BpLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocHJtX2FjcGkuYwppbmRleCAxNDA2ZGIzLi5hZTI0NGUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocHJtX2FjcGkuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocHJtX2FjcGkuYwpAQCAtMjQsMTAwICsyNCwyMCBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvYWNwaS5oPgotI2luY2x1ZGUgPGxpbnV4L2VmaS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS1hY3BpLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0jaWZkZWYJQ09ORklHX0lBNjQKLSNpbmNsdWRlIDxhc20vaW9zYXBpYy5oPgotI2VuZGlmCi0jaW5jbHVkZSA8YWNwaS9hY3BpLmg+CiAjaW5jbHVkZSA8YWNwaS9hY3BpX2J1cy5oPgogI2luY2x1ZGUgPGFjcGkvYWN0eXBlcy5oPgogI2luY2x1ZGUgInBjaWVocC5oIgotI2luY2x1ZGUgInBjaWVocHJtLmgiCi0KLSNkZWZpbmUJUENJX01BWF9CVVMJCTB4MTAwCi0jZGVmaW5lCUFDUElfU1RBX0RFVklDRV9QUkVTRU5UCTB4MDEKIAogI2RlZmluZQlNRVRIT0RfTkFNRV9fU1VOCSJfU1VOIgogI2RlZmluZQlNRVRIT0RfTkFNRV9fSFBQCSJfSFBQIgogI2RlZmluZQlNRVRIT0RfTkFNRV9PU0hQCSJPU0hQIgogCi0vKiBTdGF0dXMgY29kZSBmb3IgcnVubmluZyBhY3BpIG1ldGhvZCB0byBnYWluIG5hdGl2ZSBjb250cm9sICovCi0jZGVmaW5lIE5DX05PVF9SVU4JMAotI2RlZmluZSBPU0NfTk9UX0VYSVNUCTEKLSNkZWZpbmUgT1NDX1JVTl9GQUlMRUQJMgotI2RlZmluZSBPU0hQX05PVF9FWElTVAkzCi0jZGVmaW5lIE9TSFBfUlVOX0ZBSUxFRAk0Ci0jZGVmaW5lIE5DX1JVTl9TVUNDRVNTCTUKLQotI2RlZmluZQlQSFBfUkVTX0JVUwkJMHhBMAotI2RlZmluZQlQSFBfUkVTX0lPCQkweEExCi0jZGVmaW5lCVBIUF9SRVNfTUVNCQkweEEyCi0jZGVmaW5lCVBIUF9SRVNfUE1FTQkJMHhBMwotCi0jZGVmaW5lCUJSSURHRV9UWVBFX1AyUAkJMHgwMAotI2RlZmluZQlCUklER0VfVFlQRV9IT1NUCTB4MDEKLQotLyogdGhpcyBzaG91bGQgZ28gdG8gZHJpdmVycy9hY3BpL2luY2x1ZGUvICovCi1zdHJ1Y3QgYWNwaV9faHBwIHsKLQl1OAljYWNoZV9saW5lX3NpemU7Ci0JdTgJbGF0ZW5jeV90aW1lcjsKLQl1OAllbmFibGVfc2VycjsKLQl1OAllbmFibGVfcGVycjsKLX07Ci0KLXN0cnVjdCBhY3BpX3BocF9zbG90IHsKLQlzdHJ1Y3QgYWNwaV9waHBfc2xvdAkqbmV4dDsKLQlzdHJ1Y3QgYWNwaV9icmlkZ2UJKmJyaWRnZTsKLQlhY3BpX2hhbmRsZQloYW5kbGU7Ci0JaW50CXNlZzsKLQlpbnQJYnVzOwotCWludAlkZXY7Ci0JaW50CWZ1bjsKLQl1MzIJc3VuOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKm1lbV9oZWFkOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKnBfbWVtX2hlYWQ7Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqaW9faGVhZDsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICpidXNfaGVhZDsKLQl2b2lkCSpzbG90X29wczsJLyogX1NUQSwgX0VKeCwgZXRjICovCi0Jc3RydWN0IHNsb3QgKnNsb3Q7Ci19OwkJLyogcGVyIGZ1bmMgKi8KLQotc3RydWN0IGFjcGlfYnJpZGdlIHsKLQlzdHJ1Y3QgYWNwaV9icmlkZ2UJKnBhcmVudDsKLQlzdHJ1Y3QgYWNwaV9icmlkZ2UJKm5leHQ7Ci0Jc3RydWN0IGFjcGlfYnJpZGdlCSpjaGlsZDsKLQlhY3BpX2hhbmRsZQloYW5kbGU7Ci0JaW50IHNlZzsKLQlpbnQgcGJ1czsJCQkvKiBwZGV2LT5idXMtPm51bWJlcgkJKi8KLQlpbnQgcGRldmljZTsJCQkvKiBQQ0lfU0xPVChwZGV2LT5kZXZmbikJKi8KLQlpbnQgcGZ1bmN0aW9uOwkJCS8qIFBDSV9ERVZGTihwZGV2LT5kZXZmbikJKi8KLQlpbnQgYnVzOwkJCS8qIHBkZXYtPnN1Ym9yZGluYXRlLT5udW1iZXIJKi8KLQlzdHJ1Y3QgYWNwaV9faHBwCQkqX2hwcDsKLQlzdHJ1Y3QgYWNwaV9waHBfc2xvdAkqc2xvdHM7Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAJKnRtZW1faGVhZDsJLyogdG90YWwgZnJvbSBjcnMJKi8KLQlzdHJ1Y3QgcGNpX3Jlc291cmNlIAkqdHBfbWVtX2hlYWQ7CS8qIHRvdGFsIGZyb20gY3JzCSovCi0Jc3RydWN0IHBjaV9yZXNvdXJjZSAJKnRpb19oZWFkOwkvKiB0b3RhbCBmcm9tIGNycwkqLwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgCSp0YnVzX2hlYWQ7CS8qIHRvdGFsIGZyb20gY3JzCSovCi0Jc3RydWN0IHBjaV9yZXNvdXJjZSAJKm1lbV9oZWFkOwkvKiBhdmFpbGFibGUJKi8KLQlzdHJ1Y3QgcGNpX3Jlc291cmNlIAkqcF9tZW1faGVhZDsJLyogYXZhaWxhYmxlCSovCi0Jc3RydWN0IHBjaV9yZXNvdXJjZSAJKmlvX2hlYWQ7CS8qIGF2YWlsYWJsZQkqLwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgCSpidXNfaGVhZDsJLyogYXZhaWxhYmxlCSovCi0JaW50IHNjYW5uZWQ7Ci0JaW50IHR5cGU7Ci19OwotCi1zdGF0aWMgc3RydWN0IGFjcGlfYnJpZGdlICphY3BpX2JyaWRnZXNfaGVhZDsKLQogc3RhdGljIHU4ICogYWNwaV9wYXRoX25hbWUoIGFjcGlfaGFuZGxlCWhhbmRsZSkKIHsKIAlhY3BpX3N0YXR1cwkJc3RhdHVzOwpAQCAtMTMzLDg1ICs1Myw0MyBAQAogCQlyZXR1cm4gcGF0aF9uYW1lOwkKIH0KIAotc3RhdGljIHZvaWQgYWNwaV9nZXRfX2hwcCAoIHN0cnVjdCBhY3BpX2JyaWRnZQkqYWIpOwotc3RhdGljIGludCBhY3BpX3J1bl9vc2hwICggc3RydWN0IGFjcGlfYnJpZGdlCSphYik7Ci1zdGF0aWMgaW50IG9zY19ydW5fc3RhdHVzID0gTkNfTk9UX1JVTjsKLXN0YXRpYyBpbnQgb3NocF9ydW5fc3RhdHVzID0gTkNfTk9UX1JVTjsKLQotc3RhdGljIGludCBhY3BpX2FkZF9zbG90X3RvX3BocF9zbG90cygKLQlzdHJ1Y3QgYWNwaV9icmlkZ2UJKmFiLAotCWludAkJCWJ1c19udW0sCi0JYWNwaV9oYW5kbGUJCWhhbmRsZSwKLQl1MzIJCQlhZHIsCi0JdTMyCQkJc3VuCi0JKQotewotCXN0cnVjdCBhY3BpX3BocF9zbG90CSphcHM7Ci0Jc3RhdGljIGxvbmcJc2FtZXN1biA9IC0xOwotCi0JYXBzID0gKHN0cnVjdCBhY3BpX3BocF9zbG90ICopIGttYWxsb2MgKHNpemVvZihzdHJ1Y3QgYWNwaV9waHBfc2xvdCksIEdGUF9LRVJORUwpOwotCWlmICghYXBzKSB7Ci0JCWVyciAoImFjcGlfcGNpZWhwcm06IGFsbG9jIGZvciBhcHMgZmFpbFxuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0JbWVtc2V0KGFwcywgMCwgc2l6ZW9mKHN0cnVjdCBhY3BpX3BocF9zbG90KSk7Ci0KLQlhcHMtPmhhbmRsZSA9IGhhbmRsZTsKLQlhcHMtPmJ1cyA9IGJ1c19udW07Ci0JYXBzLT5kZXYgPSAoYWRyID4+IDE2KSAmIDB4ZmZmZjsKLQlhcHMtPmZ1biA9IGFkciAmIDB4ZmZmZjsKLQlhcHMtPnN1biA9IHN1bjsKLQotCWFwcy0+bmV4dCA9IGFiLT5zbG90czsJLyogY2xpbmcgdG8gdGhlIGJyaWRnZSAqLwotCWFwcy0+YnJpZGdlID0gYWI7Ci0JYWItPnNsb3RzID0gYXBzOwotCi0JYWItPnNjYW5uZWQgKz0gMTsKLQlpZiAoIWFiLT5faHBwKQotCQlhY3BpX2dldF9faHBwKGFiKTsKLQkKLQlpZiAob3NjX3J1bl9zdGF0dXMgPT0gT1NDX05PVF9FWElTVCkKLQkJb3NocF9ydW5fc3RhdHVzID0gYWNwaV9ydW5fb3NocChhYik7Ci0KLQlpZiAoc3VuICE9IHNhbWVzdW4pIHsKLQkJaW5mbygiYWNwaV9wY2llaHBybTogICBTbG90IHN1bigleCkgYXQgczpiOmQ6Zj0weCUwMng6JTAyeDolMDJ4OiUwMnhcbiIsIAotCQkJYXBzLT5zdW4sIGFiLT5zZWcsIGFwcy0+YnVzLCBhcHMtPmRldiwgYXBzLT5mdW4pOwotCQlzYW1lc3VuID0gc3VuOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgYWNwaV9nZXRfX2hwcCAoIHN0cnVjdCBhY3BpX2JyaWRnZQkqYWIpCitzdGF0aWMgYWNwaV9zdGF0dXMKK2FjcGlfcnVuX2hwcChhY3BpX2hhbmRsZSBoYW5kbGUsIHN0cnVjdCBob3RwbHVnX3BhcmFtcyAqaHBwKQogewogCWFjcGlfc3RhdHVzCQlzdGF0dXM7CiAJdTgJCQludWlbNF07CiAJc3RydWN0IGFjcGlfYnVmZmVyCXJldF9idWYgPSB7IDAsIE5VTEx9OwogCXVuaW9uIGFjcGlfb2JqZWN0CSpleHRfb2JqLCAqcGFja2FnZTsKLQl1OAkJCSpwYXRoX25hbWUgPSBhY3BpX3BhdGhfbmFtZShhYi0+aGFuZGxlKTsKKwl1OAkJCSpwYXRoX25hbWUgPSBhY3BpX3BhdGhfbmFtZShoYW5kbGUpOwogCWludAkJCWksIGxlbiA9IDA7CiAKIAkvKiBnZXQgX2hwcCAqLwotCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KGFiLT5oYW5kbGUsIE1FVEhPRF9OQU1FX19IUFAsIE5VTEwsICZyZXRfYnVmKTsKKwlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChoYW5kbGUsIE1FVEhPRF9OQU1FX19IUFAsIE5VTEwsICZyZXRfYnVmKTsKIAlzd2l0Y2ggKHN0YXR1cykgewogCWNhc2UgQUVfQlVGRkVSX09WRVJGTE9XOgogCQlyZXRfYnVmLnBvaW50ZXIgPSBrbWFsbG9jIChyZXRfYnVmLmxlbmd0aCwgR0ZQX0tFUk5FTCk7CiAJCWlmICghcmV0X2J1Zi5wb2ludGVyKSB7Ci0JCQllcnIgKCJhY3BpX3BjaWVocHJtOiVzIGFsbG9jIGZvciBfSFBQIGZhaWxcbiIsIHBhdGhfbmFtZSk7Ci0JCQlyZXR1cm47CisJCQllcnIgKCIlczolcyBhbGxvYyBmb3IgX0hQUCBmYWlsXG4iLCBfX0ZVTkNUSU9OX18sCisJCQkJCXBhdGhfbmFtZSk7CisJCQlyZXR1cm4gQUVfTk9fTUVNT1JZOwogCQl9Ci0JCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KGFiLT5oYW5kbGUsIE1FVEhPRF9OQU1FX19IUFAsIE5VTEwsICZyZXRfYnVmKTsKKwkJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9vYmplY3QoaGFuZGxlLCBNRVRIT0RfTkFNRV9fSFBQLAorCQkJCU5VTEwsICZyZXRfYnVmKTsKIAkJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKQogCQkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCQllcnIoImFjcGlfcGNpZWhwcm06JXMgX0hQUCBmYWlsPTB4JXhcbiIsIHBhdGhfbmFtZSwgc3RhdHVzKTsKLQkJCXJldHVybjsKKwkJCWRiZygiJXM6JXMgX0hQUCBmYWlsPTB4JXhcbiIsIF9fRlVOQ1RJT05fXywKKwkJCQkJcGF0aF9uYW1lLCBzdGF0dXMpOworCQkJcmV0dXJuIHN0YXR1czsKIAkJfQogCX0KIAogCWV4dF9vYmogPSAodW5pb24gYWNwaV9vYmplY3QgKikgcmV0X2J1Zi5wb2ludGVyOwogCWlmIChleHRfb2JqLT50eXBlICE9IEFDUElfVFlQRV9QQUNLQUdFKSB7Ci0JCWVyciAoImFjcGlfcGNpZWhwcm06JXMgX0hQUCBvYmogbm90IGEgcGFja2FnZVxuIiwgcGF0aF9uYW1lKTsKKwkJZXJyICgiJXM6JXMgX0hQUCBvYmogbm90IGEgcGFja2FnZVxuIiwgX19GVU5DVElPTl9fLAorCQkJCXBhdGhfbmFtZSk7CisJCXN0YXR1cyA9IEFFX0VSUk9SOwogCQlnb3RvIGZyZWVfYW5kX3JldHVybjsKIAl9CiAKQEAgLTIyNCwxNTE0ICsxMDIsMTUzIEBACiAJCQludWlbaV0gPSAodTgpZXh0X29iai0+aW50ZWdlci52YWx1ZTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJZXJyICgiYWNwaV9wY2llaHBybTolcyBfSFBQIG9iaiB0eXBlIGluY29ycmVjdFxuIiwgcGF0aF9uYW1lKTsKKwkJCWVyciAoIiVzOiVzIF9IUFAgb2JqIHR5cGUgaW5jb3JyZWN0XG4iLCBfX0ZVTkNUSU9OX18sCisJCQkJCXBhdGhfbmFtZSk7CisJCQlzdGF0dXMgPSBBRV9FUlJPUjsKIAkJCWdvdG8gZnJlZV9hbmRfcmV0dXJuOwogCQl9CiAJfQogCi0JYWItPl9ocHAgPSBrbWFsbG9jIChzaXplb2YgKHN0cnVjdCBhY3BpX19ocHApLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWFiLT5faHBwKSB7Ci0JCWVyciAoImFjcGlfcGNpZWhwcm06JXMgYWxsb2MgZm9yIF9IUFAgZmFpbGVkXG4iLCBwYXRoX25hbWUpOwotCQlnb3RvIGZyZWVfYW5kX3JldHVybjsKLQl9Ci0JbWVtc2V0KGFiLT5faHBwLCAwLCBzaXplb2Yoc3RydWN0IGFjcGlfX2hwcCkpOworCWhwcC0+Y2FjaGVfbGluZV9zaXplID0gbnVpWzBdOworCWhwcC0+bGF0ZW5jeV90aW1lciA9IG51aVsxXTsKKwlocHAtPmVuYWJsZV9zZXJyID0gbnVpWzJdOworCWhwcC0+ZW5hYmxlX3BlcnIgPSBudWlbM107CiAKLQlhYi0+X2hwcC0+Y2FjaGVfbGluZV9zaXplCT0gbnVpWzBdOwotCWFiLT5faHBwLT5sYXRlbmN5X3RpbWVyCQk9IG51aVsxXTsKLQlhYi0+X2hwcC0+ZW5hYmxlX3NlcnIJCT0gbnVpWzJdOwotCWFiLT5faHBwLT5lbmFibGVfcGVycgkJPSBudWlbM107Ci0KLQlkYmcoIiAgX0hQUDogY2FjaGVfbGluZV9zaXplPTB4JXhcbiIsIGFiLT5faHBwLT5jYWNoZV9saW5lX3NpemUpOwotCWRiZygiICBfSFBQOiBsYXRlbmN5IHRpbWVyICA9MHgleFxuIiwgYWItPl9ocHAtPmxhdGVuY3lfdGltZXIpOwotCWRiZygiICBfSFBQOiBlbmFibGUgU0VSUiAgICA9MHgleFxuIiwgYWItPl9ocHAtPmVuYWJsZV9zZXJyKTsKLQlkYmcoIiAgX0hQUDogZW5hYmxlIFBFUlIgICAgPTB4JXhcbiIsIGFiLT5faHBwLT5lbmFibGVfcGVycik7CisJZGJnKCIgIF9IUFA6IGNhY2hlX2xpbmVfc2l6ZT0weCV4XG4iLCBocHAtPmNhY2hlX2xpbmVfc2l6ZSk7CisJZGJnKCIgIF9IUFA6IGxhdGVuY3kgdGltZXIgID0weCV4XG4iLCBocHAtPmxhdGVuY3lfdGltZXIpOworCWRiZygiICBfSFBQOiBlbmFibGUgU0VSUiAgICA9MHgleFxuIiwgaHBwLT5lbmFibGVfc2Vycik7CisJZGJnKCIgIF9IUFA6IGVuYWJsZSBQRVJSICAgID0weCV4XG4iLCBocHAtPmVuYWJsZV9wZXJyKTsKIAogZnJlZV9hbmRfcmV0dXJuOgogCWtmcmVlKHJldF9idWYucG9pbnRlcik7CisJcmV0dXJuIHN0YXR1czsKIH0KIAotc3RhdGljIGludCBhY3BpX3J1bl9vc2hwICggc3RydWN0IGFjcGlfYnJpZGdlCSphYikKK3N0YXRpYyBhY3BpX3N0YXR1cyBhY3BpX3J1bl9vc2hwKGFjcGlfaGFuZGxlIGhhbmRsZSkKIHsKIAlhY3BpX3N0YXR1cwkJc3RhdHVzOwotCXU4CQkJKnBhdGhfbmFtZSA9IGFjcGlfcGF0aF9uYW1lKGFiLT5oYW5kbGUpOworCXU4CQkJKnBhdGhfbmFtZSA9IGFjcGlfcGF0aF9uYW1lKGhhbmRsZSk7CiAKIAkvKiBydW4gT1NIUCAqLwotCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KGFiLT5oYW5kbGUsIE1FVEhPRF9OQU1FX09TSFAsIE5VTEwsIE5VTEwpOworCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KGhhbmRsZSwgTUVUSE9EX05BTUVfT1NIUCwgTlVMTCwgTlVMTCk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCWVycigiYWNwaV9wY2llaHBybTolcyBPU0hQIGZhaWxzPTB4JXhcbiIsIHBhdGhfbmFtZSwgc3RhdHVzKTsKLQkJb3NocF9ydW5fc3RhdHVzID0gKHN0YXR1cyA9PSBBRV9OT1RfRk9VTkQpID8gT1NIUF9OT1RfRVhJU1QgOiBPU0hQX1JVTl9GQUlMRUQ7CisJCWRiZygiJXM6JXMgT1NIUCBmYWlscz0weCV4XG4iLCBfX0ZVTkNUSU9OX18sIHBhdGhfbmFtZSwKKwkJCQlzdGF0dXMpOwogCX0gZWxzZSB7Ci0JCW9zaHBfcnVuX3N0YXR1cyA9IE5DX1JVTl9TVUNDRVNTOwotCQlkYmcoImFjcGlfcGNpZWhwcm06JXMgT1NIUCBwYXNzZXMgPTB4JXhcbiIsIHBhdGhfbmFtZSwgc3RhdHVzKTsKLQkJZGJnKCJhY3BpX3BjaWVocHJtOiVzIG9zaHBfcnVuX3N0YXR1cyA9MHgleFxuIiwgcGF0aF9uYW1lLCBvc2hwX3J1bl9zdGF0dXMpOworCQlkYmcoIiVzOiVzIE9TSFAgcGFzc2VzXG4iLCBfX0ZVTkNUSU9OX18sIHBhdGhfbmFtZSk7CiAJfQotCXJldHVybiBvc2hwX3J1bl9zdGF0dXM7Ci19Ci0KLXN0YXRpYyBhY3BpX3N0YXR1cyBhY3BpX2V2YWx1YXRlX2NycygKLQlhY3BpX2hhbmRsZQkJaGFuZGxlLAotCXN0cnVjdCBhY3BpX3Jlc291cmNlCSoqcmV0YnVmCi0JKQotewotCWFjcGlfc3RhdHVzCQlzdGF0dXM7Ci0Jc3RydWN0IGFjcGlfYnVmZmVyCWNyc2J1ZjsKLQl1OAkJCSpwYXRoX25hbWUgPSBhY3BpX3BhdGhfbmFtZShoYW5kbGUpOwotCi0JY3JzYnVmLmxlbmd0aCAgPSAwOwotCWNyc2J1Zi5wb2ludGVyID0gTlVMTDsKLQotCXN0YXR1cyA9IGFjcGlfZ2V0X2N1cnJlbnRfcmVzb3VyY2VzIChoYW5kbGUsICZjcnNidWYpOwotCi0Jc3dpdGNoIChzdGF0dXMpIHsKLQljYXNlIEFFX0JVRkZFUl9PVkVSRkxPVzoKLQkJYnJlYWs7CQkvKiBmb3VuZCAqLwotCWNhc2UgQUVfTk9UX0ZPVU5EOgotCQlkYmcoImFjcGlfcGNpZWhwcm06JXMgX0NSUyBub3QgZm91bmRcbiIsIHBhdGhfbmFtZSk7Ci0JCXJldHVybiBzdGF0dXM7Ci0JZGVmYXVsdDoKLQkJZXJyICgiYWNwaV9wY2llaHBybTolcyBfQ1JTIGZhaWw9MHgleFxuIiwgcGF0aF9uYW1lLCBzdGF0dXMpOwotCQlyZXR1cm4gc3RhdHVzOwotCX0KLQotCWNyc2J1Zi5wb2ludGVyID0ga21hbGxvYyAoY3JzYnVmLmxlbmd0aCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjcnNidWYucG9pbnRlcikgewotCQllcnIgKCJhY3BpX3BjaWVocHJtOiBhbGxvYyAlbGQgYnl0ZXMgZm9yICVzIF9DUlMgZmFpbFxuIiwgKHVsb25nKWNyc2J1Zi5sZW5ndGgsIHBhdGhfbmFtZSk7Ci0JCXJldHVybiBBRV9OT19NRU1PUlk7Ci0JfQotCi0Jc3RhdHVzID0gYWNwaV9nZXRfY3VycmVudF9yZXNvdXJjZXMgKGhhbmRsZSwgJmNyc2J1Zik7Ci0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCWVycigiYWNwaV9wY2llaHBybTogJXMgX0NSUyBmYWlsPTB4JXguXG4iLCBwYXRoX25hbWUsIHN0YXR1cyk7Ci0JCWtmcmVlKGNyc2J1Zi5wb2ludGVyKTsKLQkJcmV0dXJuIHN0YXR1czsKLQl9Ci0KLQkqcmV0YnVmID0gY3JzYnVmLnBvaW50ZXI7Ci0KIAlyZXR1cm4gc3RhdHVzOwogfQogCi1zdGF0aWMgdm9pZCBmcmVlX3BjaV9yZXNvdXJjZSAoIHN0cnVjdCBwY2lfcmVzb3VyY2UJKmFwcmgpCitzdGF0aWMgaW50IGlzX3Jvb3RfYnJpZGdlKGFjcGlfaGFuZGxlIGhhbmRsZSkKIHsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlCSpyZXMsICpuZXh0OworCWFjcGlfc3RhdHVzIHN0YXR1czsKKwlzdHJ1Y3QgYWNwaV9kZXZpY2VfaW5mbyAqaW5mbzsKKwlzdHJ1Y3QgYWNwaV9idWZmZXIgYnVmZmVyID0ge0FDUElfQUxMT0NBVEVfQlVGRkVSLCBOVUxMfTsKKwlpbnQgaTsKIAotCWZvciAocmVzID0gYXByaDsgcmVzOyByZXMgPSBuZXh0KSB7Ci0JCW5leHQgPSByZXMtPm5leHQ7Ci0JCWtmcmVlKHJlcyk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBwcmludF9wY2lfcmVzb3VyY2UgKCBzdHJ1Y3QgcGNpX3Jlc291cmNlCSphcHJoKQotewotCXN0cnVjdCBwY2lfcmVzb3VyY2UJKnJlczsKLQotCWZvciAocmVzID0gYXByaDsgcmVzOyByZXMgPSByZXMtPm5leHQpCi0JCWRiZygiICAgICAgICBiYXNlPSAweCV4IGxlbmd0aD0gMHgleFxuIiwgcmVzLT5iYXNlLCByZXMtPmxlbmd0aCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHByaW50X3Nsb3RfcmVzb3VyY2VzKCBzdHJ1Y3QgYWNwaV9waHBfc2xvdAkqYXBzKQotewotCWlmIChhcHMtPmJ1c19oZWFkKSB7Ci0JCWRiZygiICAgIEJVUyBSZXNvdXJjZXM6XG4iKTsKLQkJcHJpbnRfcGNpX3Jlc291cmNlIChhcHMtPmJ1c19oZWFkKTsKLQl9Ci0KLQlpZiAoYXBzLT5pb19oZWFkKSB7Ci0JCWRiZygiICAgIElPIFJlc291cmNlczpcbiIpOwotCQlwcmludF9wY2lfcmVzb3VyY2UgKGFwcy0+aW9faGVhZCk7Ci0JfQotCi0JaWYgKGFwcy0+bWVtX2hlYWQpIHsKLQkJZGJnKCIgICAgTUVNIFJlc291cmNlczpcbiIpOwotCQlwcmludF9wY2lfcmVzb3VyY2UgKGFwcy0+bWVtX2hlYWQpOwotCX0KLQotCWlmIChhcHMtPnBfbWVtX2hlYWQpIHsKLQkJZGJnKCIgICAgUE1FTSBSZXNvdXJjZXM6XG4iKTsKLQkJcHJpbnRfcGNpX3Jlc291cmNlIChhcHMtPnBfbWVtX2hlYWQpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgcHJpbnRfcGNpX3Jlc291cmNlcyggc3RydWN0IGFjcGlfYnJpZGdlCSphYikKLXsKLQlpZiAoYWItPnRidXNfaGVhZCkgewotCQlkYmcoIiAgICBUb3RhbCBCVVMgUmVzb3VyY2VzOlxuIik7Ci0JCXByaW50X3BjaV9yZXNvdXJjZSAoYWItPnRidXNfaGVhZCk7Ci0JfQotCWlmIChhYi0+YnVzX2hlYWQpIHsKLQkJZGJnKCIgICAgQlVTIFJlc291cmNlczpcbiIpOwotCQlwcmludF9wY2lfcmVzb3VyY2UgKGFiLT5idXNfaGVhZCk7Ci0JfQotCi0JaWYgKGFiLT50aW9faGVhZCkgewotCQlkYmcoIiAgICBUb3RhbCBJTyBSZXNvdXJjZXM6XG4iKTsKLQkJcHJpbnRfcGNpX3Jlc291cmNlIChhYi0+dGlvX2hlYWQpOwotCX0KLQlpZiAoYWItPmlvX2hlYWQpIHsKLQkJZGJnKCIgICAgSU8gUmVzb3VyY2VzOlxuIik7Ci0JCXByaW50X3BjaV9yZXNvdXJjZSAoYWItPmlvX2hlYWQpOwotCX0KLQotCWlmIChhYi0+dG1lbV9oZWFkKSB7Ci0JCWRiZygiICAgIFRvdGFsIE1FTSBSZXNvdXJjZXM6XG4iKTsKLQkJcHJpbnRfcGNpX3Jlc291cmNlIChhYi0+dG1lbV9oZWFkKTsKLQl9Ci0JaWYgKGFiLT5tZW1faGVhZCkgewotCQlkYmcoIiAgICBNRU0gUmVzb3VyY2VzOlxuIik7Ci0JCXByaW50X3BjaV9yZXNvdXJjZSAoYWItPm1lbV9oZWFkKTsKLQl9Ci0KLQlpZiAoYWItPnRwX21lbV9oZWFkKSB7Ci0JCWRiZygiICAgIFRvdGFsIFBNRU0gUmVzb3VyY2VzOlxuIik7Ci0JCXByaW50X3BjaV9yZXNvdXJjZSAoYWItPnRwX21lbV9oZWFkKTsKLQl9Ci0JaWYgKGFiLT5wX21lbV9oZWFkKSB7Ci0JCWRiZygiICAgIFBNRU0gUmVzb3VyY2VzOlxuIik7Ci0JCXByaW50X3BjaV9yZXNvdXJjZSAoYWItPnBfbWVtX2hlYWQpOwotCX0KLQlpZiAoYWItPl9ocHApIHsKLQkJZGJnKCIgICAgX0hQUDogY2FjaGVfbGluZV9zaXplPTB4JXhcbiIsIGFiLT5faHBwLT5jYWNoZV9saW5lX3NpemUpOwotCQlkYmcoIiAgICBfSFBQOiBsYXRlbmN5IHRpbWVyICA9MHgleFxuIiwgYWItPl9ocHAtPmxhdGVuY3lfdGltZXIpOwotCQlkYmcoIiAgICBfSFBQOiBlbmFibGUgU0VSUiAgICA9MHgleFxuIiwgYWItPl9ocHAtPmVuYWJsZV9zZXJyKTsKLQkJZGJnKCIgICAgX0hQUDogZW5hYmxlIFBFUlIgICAgPTB4JXhcbiIsIGFiLT5faHBwLT5lbmFibGVfcGVycik7Ci0JfQotfQotCi1zdGF0aWMgaW50IHBjaWVocHJtX2RlbGV0ZV9yZXNvdXJjZSgKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICoqYXByaCwKLQl1bG9uZyBiYXNlLAotCXVsb25nIHNpemUpCi17Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqcmVzOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKnByZXZub2RlOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKnNwbGl0X25vZGU7Ci0JdWxvbmcgdGJhc2U7Ci0KLQlwY2llaHBfcmVzb3VyY2Vfc29ydF9hbmRfY29tYmluZShhcHJoKTsKLQotCWZvciAocmVzID0gKmFwcmg7IHJlczsgcmVzID0gcmVzLT5uZXh0KSB7Ci0JCWlmIChyZXMtPmJhc2UgPiBiYXNlKQotCQkJY29udGludWU7Ci0KLQkJaWYgKChyZXMtPmJhc2UgKyByZXMtPmxlbmd0aCkgPCAoYmFzZSArIHNpemUpKQotCQkJY29udGludWU7Ci0KLQkJaWYgKHJlcy0+YmFzZSA8IGJhc2UpIHsKLQkJCXRiYXNlID0gYmFzZTsKLQotCQkJaWYgKChyZXMtPmxlbmd0aCAtICh0YmFzZSAtIHJlcy0+YmFzZSkpIDwgc2l6ZSkKLQkJCQljb250aW51ZTsKLQotCQkJc3BsaXRfbm9kZSA9IChzdHJ1Y3QgcGNpX3Jlc291cmNlICopIGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2lfcmVzb3VyY2UpLCBHRlBfS0VSTkVMKTsKLQkJCWlmICghc3BsaXRfbm9kZSkKLQkJCQlyZXR1cm4gLUVOT01FTTsKLQotCQkJc3BsaXRfbm9kZS0+YmFzZSA9IHJlcy0+YmFzZTsKLQkJCXNwbGl0X25vZGUtPmxlbmd0aCA9IHRiYXNlIC0gcmVzLT5iYXNlOwotCQkJcmVzLT5iYXNlID0gdGJhc2U7Ci0JCQlyZXMtPmxlbmd0aCAtPSBzcGxpdF9ub2RlLT5sZW5ndGg7Ci0KLQkJCXNwbGl0X25vZGUtPm5leHQgPSByZXMtPm5leHQ7Ci0JCQlyZXMtPm5leHQgPSBzcGxpdF9ub2RlOwotCQl9Ci0KLQkJaWYgKHJlcy0+bGVuZ3RoID49IHNpemUpIHsKLQkJCXNwbGl0X25vZGUgPSAoc3RydWN0IHBjaV9yZXNvdXJjZSopIGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2lfcmVzb3VyY2UpLCBHRlBfS0VSTkVMKTsKLQkJCWlmICghc3BsaXRfbm9kZSkKLQkJCQlyZXR1cm4gLUVOT01FTTsKLQotCQkJc3BsaXRfbm9kZS0+YmFzZSA9IHJlcy0+YmFzZSArIHNpemU7Ci0JCQlzcGxpdF9ub2RlLT5sZW5ndGggPSByZXMtPmxlbmd0aCAtIHNpemU7Ci0JCQlyZXMtPmxlbmd0aCA9IHNpemU7Ci0KLQkJCXNwbGl0X25vZGUtPm5leHQgPSByZXMtPm5leHQ7Ci0JCQlyZXMtPm5leHQgPSBzcGxpdF9ub2RlOwotCQl9Ci0KLQkJaWYgKCphcHJoID09IHJlcykgewotCQkJKmFwcmggPSByZXMtPm5leHQ7Ci0JCX0gZWxzZSB7Ci0JCQlwcmV2bm9kZSA9ICphcHJoOwotCQkJd2hpbGUgKHByZXZub2RlLT5uZXh0ICE9IHJlcykKLQkJCQlwcmV2bm9kZSA9IHByZXZub2RlLT5uZXh0OwotCi0JCQlwcmV2bm9kZS0+bmV4dCA9IHJlcy0+bmV4dDsKLQkJfQotCQlyZXMtPm5leHQgPSBOVUxMOwotCQlrZnJlZShyZXMpOwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBwY2llaHBybV9kZWxldGVfcmVzb3VyY2VzKAotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKiphcHJoLAotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKnRoaXMKLQkpCi17Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqcmVzOwotCi0JZm9yIChyZXMgPSB0aGlzOyByZXM7IHJlcyA9IHJlcy0+bmV4dCkKLQkJcGNpZWhwcm1fZGVsZXRlX3Jlc291cmNlKGFwcmgsIHJlcy0+YmFzZSwgcmVzLT5sZW5ndGgpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcGNpZWhwcm1fYWRkX3Jlc291cmNlKAotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKiphcHJoLAotCXVsb25nIGJhc2UsCi0JdWxvbmcgc2l6ZSkKLXsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICpyZXM7Ci0KLQlmb3IgKHJlcyA9ICphcHJoOyByZXM7IHJlcyA9IHJlcy0+bmV4dCkgewotCQlpZiAoKHJlcy0+YmFzZSArIHJlcy0+bGVuZ3RoKSA9PSBiYXNlKSB7Ci0JCQlyZXMtPmxlbmd0aCArPSBzaXplOwotCQkJc2l6ZSA9IDBMOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKHJlcy0+bmV4dCA9PSAqYXByaCkKLQkJCWJyZWFrOwotCX0KLQotCWlmIChzaXplKSB7Ci0JCXJlcyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2lfcmVzb3VyY2UpLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFyZXMpIHsKLQkJCWVyciAoImFjcGlfcGNpZWhwcm06IGFsbG9jIGZvciByZXMgZmFpbFxuIik7Ci0JCQlyZXR1cm4gLUVOT01FTTsKLQkJfQotCQltZW1zZXQocmVzLCAwLCBzaXplb2YgKHN0cnVjdCBwY2lfcmVzb3VyY2UpKTsKLQotCQlyZXMtPmJhc2UgPSBiYXNlOwotCQlyZXMtPmxlbmd0aCA9IHNpemU7Ci0JCXJlcy0+bmV4dCA9ICphcHJoOwotCQkqYXByaCA9IHJlczsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBwY2llaHBybV9hZGRfcmVzb3VyY2VzKAotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKiphcHJoLAotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKnRoaXMKLQkpCi17Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqcmVzOwotCWludAlyYyA9IDA7Ci0KLQlmb3IgKHJlcyA9IHRoaXM7IHJlcyAmJiAhcmM7IHJlcyA9IHJlcy0+bmV4dCkKLQkJcmMgPSBwY2llaHBybV9hZGRfcmVzb3VyY2UoYXByaCwgcmVzLT5iYXNlLCByZXMtPmxlbmd0aCk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyB2b2lkIGFjcGlfcGFyc2VfaW8gKAotCXN0cnVjdCBhY3BpX2JyaWRnZQkJKmFiLAotCXVuaW9uIGFjcGlfcmVzb3VyY2VfZGF0YQkqZGF0YQotCSkKLXsKLQlzdHJ1Y3QgYWNwaV9yZXNvdXJjZV9pbwkqZGF0YWlvOwotCWRhdGFpbyA9IChzdHJ1Y3QgYWNwaV9yZXNvdXJjZV9pbyAqKSBkYXRhOwotCi0JZGJnKCJJbyBSZXNvdXJjZVxuIik7Ci0JZGJnKCIgICVkIGJpdCBkZWNvZGVcbiIsIEFDUElfREVDT0RFXzE2ID09IGRhdGFpby0+aW9fZGVjb2RlID8gMTY6MTApOwotCWRiZygiICBSYW5nZSBtaW5pbXVtIGJhc2U6ICUwOFhcbiIsIGRhdGFpby0+bWluX2Jhc2VfYWRkcmVzcyk7Ci0JZGJnKCIgIFJhbmdlIG1heGltdW0gYmFzZTogJTA4WFxuIiwgZGF0YWlvLT5tYXhfYmFzZV9hZGRyZXNzKTsKLQlkYmcoIiAgQWxpZ25tZW50OiAlMDhYXG4iLCBkYXRhaW8tPmFsaWdubWVudCk7Ci0JZGJnKCIgIFJhbmdlIExlbmd0aDogJTA4WFxuIiwgZGF0YWlvLT5yYW5nZV9sZW5ndGgpOwotfQotCi1zdGF0aWMgdm9pZCBhY3BpX3BhcnNlX2ZpeGVkX2lvICgKLQlzdHJ1Y3QgYWNwaV9icmlkZ2UJKmFiLAotCXVuaW9uIGFjcGlfcmVzb3VyY2VfZGF0YQkqZGF0YQotCSkKLXsKLQlzdHJ1Y3QgYWNwaV9yZXNvdXJjZV9maXhlZF9pbyAgKmRhdGFmaW87Ci0JZGF0YWZpbyA9IChzdHJ1Y3QgYWNwaV9yZXNvdXJjZV9maXhlZF9pbyAqKSBkYXRhOwotCi0JZGJnKCJGaXhlZCBJbyBSZXNvdXJjZVxuIik7Ci0JZGJnKCIgIFJhbmdlIGJhc2UgYWRkcmVzczogJTA4WCIsIGRhdGFmaW8tPmJhc2VfYWRkcmVzcyk7Ci0JZGJnKCIgIFJhbmdlIGxlbmd0aDogJTA4WCIsIGRhdGFmaW8tPnJhbmdlX2xlbmd0aCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGFjcGlfcGFyc2VfYWRkcmVzczE2XzMyICgKLQlzdHJ1Y3QgYWNwaV9icmlkZ2UJKmFiLAotCXVuaW9uIGFjcGlfcmVzb3VyY2VfZGF0YQkqZGF0YSwKLQlhY3BpX3Jlc291cmNlX3R5cGUJaWQKLQkpCi17Ci0JLyogCi0JICogYWNwaV9yZXNvdXJjZV9hZGRyZXNzMTYgPT0gYWNwaV9yZXNvdXJjZV9hZGRyZXNzMzIKLQkgKiBhY3BpX3Jlc291cmNlX2FkZHJlc3MxNiAqZGF0YTE2ID0gKGFjcGlfcmVzb3VyY2VfYWRkcmVzczE2ICopIGRhdGE7Ci0JICovCi0Jc3RydWN0IGFjcGlfcmVzb3VyY2VfYWRkcmVzczMyICpkYXRhMzIgPSAoc3RydWN0IGFjcGlfcmVzb3VyY2VfYWRkcmVzczMyICopIGRhdGE7Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqKmFwcmgsICoqdHByaDsKLQotCWlmIChpZCA9PSBBQ1BJX1JTVFlQRV9BRERSRVNTMTYpCi0JCWRiZygiYWNwaV9wY2llaHBybToxNi1CaXQgQWRkcmVzcyBTcGFjZSBSZXNvdXJjZVxuIik7Ci0JZWxzZQotCQlkYmcoImFjcGlfcGNpZWhwcm06MzItQml0IEFkZHJlc3MgU3BhY2UgUmVzb3VyY2VcbiIpOwotCi0Jc3dpdGNoIChkYXRhMzItPnJlc291cmNlX3R5cGUpIHsKLQljYXNlIEFDUElfTUVNT1JZX1JBTkdFOiAKLQkJZGJnKCIgIFJlc291cmNlIFR5cGU6IE1lbW9yeSBSYW5nZVxuIik7Ci0JCWFwcmggPSAmYWItPm1lbV9oZWFkOwotCQl0cHJoID0gJmFiLT50bWVtX2hlYWQ7Ci0KLQkJc3dpdGNoIChkYXRhMzItPmF0dHJpYnV0ZS5tZW1vcnkuY2FjaGVfYXR0cmlidXRlKSB7Ci0JCWNhc2UgQUNQSV9OT05fQ0FDSEVBQkxFX01FTU9SWToKLQkJCWRiZygiICBUeXBlIFNwZWNpZmljOiBOb25jYWNoZWFibGUgbWVtb3J5XG4iKTsKLQkJCWJyZWFrOyAKLQkJY2FzZSBBQ1BJX0NBQ0hBQkxFX01FTU9SWToKLQkJCWRiZygiICBUeXBlIFNwZWNpZmljOiBDYWNoZWFibGUgbWVtb3J5XG4iKTsKLQkJCWJyZWFrOyAKLQkJY2FzZSBBQ1BJX1dSSVRFX0NPTUJJTklOR19NRU1PUlk6Ci0JCQlkYmcoIiAgVHlwZSBTcGVjaWZpYzogV3JpdGUtY29tYmluaW5nIG1lbW9yeVxuIik7Ci0JCQlicmVhazsgCi0JCWNhc2UgQUNQSV9QUkVGRVRDSEFCTEVfTUVNT1JZOgotCQkJYXByaCA9ICZhYi0+cF9tZW1faGVhZDsKLQkJCWRiZygiICBUeXBlIFNwZWNpZmljOiBQcmVmZXRjaGFibGUgbWVtb3J5XG4iKTsKLQkJCWJyZWFrOyAKLQkJZGVmYXVsdDoKLQkJCWRiZygiICBUeXBlIFNwZWNpZmljOiBJbnZhbGlkIGNhY2hlIGF0dHJpYnV0ZVxuIik7Ci0JCQlicmVhazsKLQkJfQotCi0JCWRiZygiICBUeXBlIFNwZWNpZmljOiBSZWFkJXNcbiIsIEFDUElfUkVBRF9XUklURV9NRU1PUlkgPT0gZGF0YTMyLT5hdHRyaWJ1dGUubWVtb3J5LnJlYWRfd3JpdGVfYXR0cmlidXRlID8gIi9Xcml0ZSI6IiBPbmx5Iik7Ci0JCWJyZWFrOwotCi0JY2FzZSBBQ1BJX0lPX1JBTkdFOiAKLQkJZGJnKCIgIFJlc291cmNlIFR5cGU6IEkvTyBSYW5nZVxuIik7Ci0JCWFwcmggPSAmYWItPmlvX2hlYWQ7Ci0JCXRwcmggPSAmYWItPnRpb19oZWFkOwotCi0JCXN3aXRjaCAoZGF0YTMyLT5hdHRyaWJ1dGUuaW8ucmFuZ2VfYXR0cmlidXRlKSB7Ci0JCWNhc2UgQUNQSV9OT05fSVNBX09OTFlfUkFOR0VTOgotCQkJZGJnKCIgIFR5cGUgU3BlY2lmaWM6IE5vbi1JU0EgSW8gQWRkcmVzc2VzXG4iKTsKLQkJCWJyZWFrOyAKLQkJY2FzZSBBQ1BJX0lTQV9PTkxZX1JBTkdFUzoKLQkJCWRiZygiICBUeXBlIFNwZWNpZmljOiBJU0EgSW8gQWRkcmVzc2VzXG4iKTsKLQkJCWJyZWFrOyAKLQkJY2FzZSBBQ1BJX0VOVElSRV9SQU5HRToKLQkJCWRiZygiICBUeXBlIFNwZWNpZmljOiBJU0EgYW5kIG5vbi1JU0EgSW8gQWRkcmVzc2VzXG4iKTsKLQkJCWJyZWFrOyAKLQkJZGVmYXVsdDoKLQkJCWRiZygiICBUeXBlIFNwZWNpZmljOiBJbnZhbGlkIHJhbmdlIGF0dHJpYnV0ZVxuIik7Ci0JCQlicmVhazsKLQkJfQotCQlicmVhazsKLQotCWNhc2UgQUNQSV9CVVNfTlVNQkVSX1JBTkdFOiAKLQkJZGJnKCIgIFJlc291cmNlIFR5cGU6IEJ1cyBOdW1iZXIgUmFuZ2UoZml4ZWQpXG4iKTsKLQkJLyogZml4dXAgdG8gYmUgY29tcGF0aWJsZSB3aXRoIHRoZSByZXN0IG9mIHBocCBkcml2ZXIgKi8KLQkJZGF0YTMyLT5taW5fYWRkcmVzc19yYW5nZSsrOwotCQlkYXRhMzItPmFkZHJlc3NfbGVuZ3RoLS07Ci0JCWFwcmggPSAmYWItPmJ1c19oZWFkOwotCQl0cHJoID0gJmFiLT50YnVzX2hlYWQ7Ci0JCWJyZWFrOyAKLQlkZWZhdWx0OiAKLQkJZGJnKCIgIFJlc291cmNlIFR5cGU6IEludmFsaWQgcmVzb3VyY2UgdHlwZS4gRXhpdGluZy5cbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JZGJnKCIgIFJlc291cmNlICVzXG4iLCBBQ1BJX0NPTlNVTUVSID09IGRhdGEzMi0+cHJvZHVjZXJfY29uc3VtZXIgPyAiQ29uc3VtZXIiOiJQcm9kdWNlciIpOwotCWRiZygiICAlcyBkZWNvZGVcbiIsIEFDUElfU1VCX0RFQ09ERSA9PSBkYXRhMzItPmRlY29kZSA/ICJTdWJ0cmFjdGl2ZSI6IlBvc2l0aXZlIik7Ci0JZGJnKCIgIE1pbiBhZGRyZXNzIGlzICVzIGZpeGVkXG4iLCBBQ1BJX0FERFJFU1NfRklYRUQgPT0gZGF0YTMyLT5taW5fYWRkcmVzc19maXhlZCA/ICIiOiJub3QiKTsKLQlkYmcoIiAgTWF4IGFkZHJlc3MgaXMgJXMgZml4ZWRcbiIsIEFDUElfQUREUkVTU19GSVhFRCA9PSBkYXRhMzItPm1heF9hZGRyZXNzX2ZpeGVkID8gIiI6Im5vdCIpOwotCWRiZygiICBHcmFudWxhcml0eTogJTA4WFxuIiwgZGF0YTMyLT5ncmFudWxhcml0eSk7Ci0JZGJnKCIgIEFkZHJlc3MgcmFuZ2UgbWluOiAlMDhYXG4iLCBkYXRhMzItPm1pbl9hZGRyZXNzX3JhbmdlKTsKLQlkYmcoIiAgQWRkcmVzcyByYW5nZSBtYXg6ICUwOFhcbiIsIGRhdGEzMi0+bWF4X2FkZHJlc3NfcmFuZ2UpOwotCWRiZygiICBBZGRyZXNzIHRyYW5zbGF0aW9uIG9mZnNldDogJTA4WFxuIiwgZGF0YTMyLT5hZGRyZXNzX3RyYW5zbGF0aW9uX29mZnNldCk7Ci0JZGJnKCIgIEFkZHJlc3MgTGVuZ3RoOiAlMDhYXG4iLCBkYXRhMzItPmFkZHJlc3NfbGVuZ3RoKTsKLQotCWlmICgweEZGICE9IGRhdGEzMi0+cmVzb3VyY2Vfc291cmNlLmluZGV4KSB7Ci0JCWRiZygiICBSZXNvdXJjZSBTb3VyY2UgSW5kZXg6ICVYXG4iLCBkYXRhMzItPnJlc291cmNlX3NvdXJjZS5pbmRleCk7Ci0JCS8qIGRiZygiICBSZXNvdXJjZSBTb3VyY2U6ICVzXG4iLCBkYXRhMzItPnJlc291cmNlX3NvdXJjZS5zdHJpbmdfcHRyKTsgKi8KLQl9Ci0KLQlwY2llaHBybV9hZGRfcmVzb3VyY2UoYXByaCwgZGF0YTMyLT5taW5fYWRkcmVzc19yYW5nZSwgZGF0YTMyLT5hZGRyZXNzX2xlbmd0aCk7Ci19Ci0KLXN0YXRpYyBhY3BpX3N0YXR1cyBhY3BpX3BhcnNlX2NycygKLQlzdHJ1Y3QgYWNwaV9icmlkZ2UJKmFiLAotCXN0cnVjdCBhY3BpX3Jlc291cmNlCSpjcnNidWYKLQkpCi17Ci0JYWNwaV9zdGF0dXMJCXN0YXR1cyA9IEFFX09LOwotCXN0cnVjdCBhY3BpX3Jlc291cmNlCSpyZXNvdXJjZSA9IGNyc2J1ZjsKLQl1OAkJCQljb3VudCA9IDA7Ci0JdTgJCQkJZG9uZSA9IDA7Ci0KLQl3aGlsZSAoIWRvbmUpIHsKLQkJZGJnKCJhY3BpX3BjaWVocHJtOiBQQ0kgYnVzIDB4JXggUmVzb3VyY2Ugc3RydWN0dXJlICV4LlxuIiwgYWItPmJ1cywgY291bnQrKyk7Ci0JCXN3aXRjaCAocmVzb3VyY2UtPmlkKSB7Ci0JCWNhc2UgQUNQSV9SU1RZUEVfSVJROgotCQkJZGJnKCJJcnEgLS0tLS0tLS0gUmVzb3VyY2VcbiIpOwotCQkJYnJlYWs7IAotCQljYXNlIEFDUElfUlNUWVBFX0RNQToKLQkJCWRiZygiRE1BIC0tLS0tLS0tIFJlc291cmNlXG4iKTsKLQkJCWJyZWFrOyAKLQkJY2FzZSBBQ1BJX1JTVFlQRV9TVEFSVF9EUEY6Ci0JCQlkYmcoIlN0YXJ0IERQRiAtLS0tLS0tLSBSZXNvdXJjZVxuIik7Ci0JCQlicmVhazsgCi0JCWNhc2UgQUNQSV9SU1RZUEVfRU5EX0RQRjoKLQkJCWRiZygiRW5kIERQRiAtLS0tLS0tLSBSZXNvdXJjZVxuIik7Ci0JCQlicmVhazsgCi0JCWNhc2UgQUNQSV9SU1RZUEVfSU86Ci0JCQlhY3BpX3BhcnNlX2lvIChhYiwgJnJlc291cmNlLT5kYXRhKTsKLQkJCWJyZWFrOyAKLQkJY2FzZSBBQ1BJX1JTVFlQRV9GSVhFRF9JTzoKLQkJCWFjcGlfcGFyc2VfZml4ZWRfaW8gKGFiLCAmcmVzb3VyY2UtPmRhdGEpOwotCQkJYnJlYWs7IAotCQljYXNlIEFDUElfUlNUWVBFX1ZFTkRPUjoKLQkJCWRiZygiVmVuZG9yIC0tLS0tLS0tIFJlc291cmNlXG4iKTsKLQkJCWJyZWFrOyAKLQkJY2FzZSBBQ1BJX1JTVFlQRV9FTkRfVEFHOgotCQkJZGJnKCJFbmRfdGFnIC0tLS0tLS0tIFJlc291cmNlXG4iKTsKLQkJCWRvbmUgPSAxOwotCQkJYnJlYWs7IAotCQljYXNlIEFDUElfUlNUWVBFX01FTTI0OgotCQkJZGJnKCJNZW0yNCAtLS0tLS0tLSBSZXNvdXJjZVxuIik7Ci0JCQlicmVhazsgCi0JCWNhc2UgQUNQSV9SU1RZUEVfTUVNMzI6Ci0JCQlkYmcoIk1lbTMyIC0tLS0tLS0tIFJlc291cmNlXG4iKTsKLQkJCWJyZWFrOyAKLQkJY2FzZSBBQ1BJX1JTVFlQRV9GSVhFRF9NRU0zMjoKLQkJCWRiZygiRml4ZWQgTWVtMzIgLS0tLS0tLS0gUmVzb3VyY2VcbiIpOwotCQkJYnJlYWs7IAotCQljYXNlIEFDUElfUlNUWVBFX0FERFJFU1MxNjoKLQkJCWFjcGlfcGFyc2VfYWRkcmVzczE2XzMyKGFiLCAmcmVzb3VyY2UtPmRhdGEsIEFDUElfUlNUWVBFX0FERFJFU1MxNik7Ci0JCQlicmVhazsgCi0JCWNhc2UgQUNQSV9SU1RZUEVfQUREUkVTUzMyOgotCQkJYWNwaV9wYXJzZV9hZGRyZXNzMTZfMzIoYWIsICZyZXNvdXJjZS0+ZGF0YSwgQUNQSV9SU1RZUEVfQUREUkVTUzMyKTsKLQkJCWJyZWFrOyAKLQkJY2FzZSBBQ1BJX1JTVFlQRV9BRERSRVNTNjQ6Ci0JCQlpbmZvKCJBZGRyZXNzNjQgLS0tLS0tLS0gUmVzb3VyY2UgdW5wYXJzZWRcbiIpOwotCQkJYnJlYWs7IAotCQljYXNlIEFDUElfUlNUWVBFX0VYVF9JUlE6Ci0JCQlkYmcoIkV4dCBJcnEgLS0tLS0tLS0gUmVzb3VyY2VcbiIpOwotCQkJYnJlYWs7IAotCQlkZWZhdWx0OgotCQkJZGJnKCJJbnZhbGlkIC0tLS0tLS0tIHJlc291cmNlIHR5cGUgMHgleFxuIiwgcmVzb3VyY2UtPmlkKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJcmVzb3VyY2UgPSAoc3RydWN0IGFjcGlfcmVzb3VyY2UgKikgKChjaGFyICopcmVzb3VyY2UgKyByZXNvdXJjZS0+bGVuZ3RoKTsKLQl9Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi1zdGF0aWMgYWNwaV9zdGF0dXMgYWNwaV9nZXRfY3JzKCBzdHJ1Y3QgYWNwaV9icmlkZ2UJKmFiKQotewotCWFjcGlfc3RhdHVzCQlzdGF0dXM7Ci0Jc3RydWN0IGFjcGlfcmVzb3VyY2UJKmNyc2J1ZjsKLQotCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfY3JzKGFiLT5oYW5kbGUsICZjcnNidWYpOworCXN0YXR1cyA9IGFjcGlfZ2V0X29iamVjdF9pbmZvKGhhbmRsZSwgJmJ1ZmZlcik7CiAJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKSB7Ci0JCXN0YXR1cyA9IGFjcGlfcGFyc2VfY3JzKGFiLCBjcnNidWYpOwotCQlrZnJlZShjcnNidWYpOwotCi0JCXBjaWVocF9yZXNvdXJjZV9zb3J0X2FuZF9jb21iaW5lKCZhYi0+YnVzX2hlYWQpOwotCQlwY2llaHBfcmVzb3VyY2Vfc29ydF9hbmRfY29tYmluZSgmYWItPmlvX2hlYWQpOwotCQlwY2llaHBfcmVzb3VyY2Vfc29ydF9hbmRfY29tYmluZSgmYWItPm1lbV9oZWFkKTsKLQkJcGNpZWhwX3Jlc291cmNlX3NvcnRfYW5kX2NvbWJpbmUoJmFiLT5wX21lbV9oZWFkKTsKLQotCQlwY2llaHBybV9hZGRfcmVzb3VyY2VzICgmYWItPnRidXNfaGVhZCwgYWItPmJ1c19oZWFkKTsKLQkJcGNpZWhwcm1fYWRkX3Jlc291cmNlcyAoJmFiLT50aW9faGVhZCwgYWItPmlvX2hlYWQpOwotCQlwY2llaHBybV9hZGRfcmVzb3VyY2VzICgmYWItPnRtZW1faGVhZCwgYWItPm1lbV9oZWFkKTsKLQkJcGNpZWhwcm1fYWRkX3Jlc291cmNlcyAoJmFiLT50cF9tZW1faGVhZCwgYWItPnBfbWVtX2hlYWQpOwotCX0KLQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qIGZpbmQgYWNwaV9icmlkZ2UgZG93bndvcmQgZnJvbSBhYi4gICovCi1zdGF0aWMgc3RydWN0IGFjcGlfYnJpZGdlICoKLWZpbmRfYWNwaV9icmlkZ2VfYnlfYnVzKAotCXN0cnVjdCBhY3BpX2JyaWRnZSAqYWIsCi0JaW50IHNlZywKLQlpbnQgYnVzCQkvKiBwZGV2LT5zdWJvcmRpbmF0ZS0+bnVtYmVyICovCi0JKQotewotCXN0cnVjdCBhY3BpX2JyaWRnZQkqbGFiID0gTlVMTDsKLQotCWlmICghYWIpCi0JCXJldHVybiBOVUxMOwotCi0JaWYgKChhYi0+YnVzID09IGJ1cykgJiYgKGFiLT5zZWcgPT0gc2VnKSkKLQkJcmV0dXJuIGFiOwotCi0JaWYgKGFiLT5jaGlsZCkKLQkJbGFiID0gZmluZF9hY3BpX2JyaWRnZV9ieV9idXMoYWItPmNoaWxkLCBzZWcsIGJ1cyk7Ci0KLQlpZiAoIWxhYikKLQlpZiAoYWItPm5leHQpCi0JCWxhYiA9IGZpbmRfYWNwaV9icmlkZ2VfYnlfYnVzKGFiLT5uZXh0LCBzZWcsIGJ1cyk7Ci0KLQlyZXR1cm4gbGFiOwotfQotCi0vKgotICogQnVpbGQgYSBkZXZpY2UgdHJlZSBvZiBBQ1BJIFBDSSBCcmlkZ2VzCi0gKi8KLXN0YXRpYyB2b2lkIHBjaWVocHJtX2FjcGlfcmVnaXN0ZXJfYV9icmlkZ2UgKAotCXN0cnVjdCBhY3BpX2JyaWRnZQkqKmhlYWQsCi0Jc3RydWN0IGFjcGlfYnJpZGdlCSpwYWIsCS8qIHBhcmVudCBicmlkZ2UgdG8gd2hpY2ggY2hpbGQgYnJpZGdlIGlzIGFkZGVkICovCi0Jc3RydWN0IGFjcGlfYnJpZGdlCSpjYWIJLyogY2hpbGQgYnJpZGdlIHRvIGFkZCAqLwotCSkKLXsKLQlzdHJ1Y3QgYWNwaV9icmlkZ2UJKmxwYWI7Ci0Jc3RydWN0IGFjcGlfYnJpZGdlCSpsY2FiOwotCi0JbHBhYiA9IGZpbmRfYWNwaV9icmlkZ2VfYnlfYnVzKCpoZWFkLCBwYWItPnNlZywgcGFiLT5idXMpOwotCWlmICghbHBhYikgewotCQlpZiAoIShwYWItPnR5cGUgJiBCUklER0VfVFlQRV9IT1NUKSkKLQkJCXdhcm4oIlBDSSBwYXJlbnQgYnJpZGdlIHM6YigleDoleCkgbm90IGluIGxpc3QuXG4iLCBwYWItPnNlZywgcGFiLT5idXMpOwotCQlwYWItPm5leHQgPSAqaGVhZDsKLQkJKmhlYWQgPSBwYWI7Ci0JCWxwYWIgPSBwYWI7Ci0JfQotCi0JaWYgKChjYWItPnR5cGUgJiBCUklER0VfVFlQRV9IT1NUKSAmJiAocGFiID09IGNhYikpCi0JCXJldHVybjsKLQotCWxjYWIgPSBmaW5kX2FjcGlfYnJpZGdlX2J5X2J1cygqaGVhZCwgY2FiLT5zZWcsIGNhYi0+YnVzKTsKLQlpZiAobGNhYikgewotCQlpZiAoKHBhYi0+YnVzICE9IGxjYWItPnBhcmVudC0+YnVzKSB8fCAobGNhYi0+YnVzICE9IGNhYi0+YnVzKSkKLQkJCWVycigiUENJIGNoaWxkIGJyaWRnZSBzOmIoJXg6JXgpIGluIGxpc3Qgd2l0aCBkaWZmIHBhcmVudC5cbiIsIGNhYi0+c2VnLCBjYWItPmJ1cyk7Ci0JCXJldHVybjsKLQl9IGVsc2UKLQkJbGNhYiA9IGNhYjsKLQotCWxjYWItPnBhcmVudCA9IGxwYWI7Ci0JbGNhYi0+bmV4dCA9IGxwYWItPmNoaWxkOwotCWxwYWItPmNoaWxkID0gbGNhYjsKLX0KLQotc3RhdGljIGFjcGlfc3RhdHVzIHBjaWVocHJtX2FjcGlfYnVpbGRfcGhwX3Nsb3RzX2NhbGxiYWNrKAotCWFjcGlfaGFuZGxlCQloYW5kbGUsCi0JdTMyCQkJTGV2ZWwsCi0Jdm9pZAkJCSpjb250ZXh0LAotCXZvaWQJCQkqKnJldHZhbAotCSkKLXsKLQl1bG9uZwkJYnVzX251bTsKLQl1bG9uZwkJc2VnX251bTsKLQl1bG9uZwkJc3VuLCBhZHI7Ci0JdWxvbmcJCXBhZHIgPSAwOwotCWFjcGlfaGFuZGxlCQlwaGFuZGxlID0gTlVMTDsKLQlzdHJ1Y3QgYWNwaV9icmlkZ2UJKnBhYiA9IChzdHJ1Y3QgYWNwaV9icmlkZ2UgKiljb250ZXh0OwotCXN0cnVjdCBhY3BpX2JyaWRnZQkqbGFiOwotCWFjcGlfc3RhdHVzCQlzdGF0dXM7Ci0JdTgJCQkqcGF0aF9uYW1lID0gYWNwaV9wYXRoX25hbWUoaGFuZGxlKTsKLQotCS8qIGdldCBfU1VOICovCi0Jc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKGhhbmRsZSwgTUVUSE9EX05BTUVfX1NVTiwgTlVMTCwgJnN1bik7Ci0Jc3dpdGNoKHN0YXR1cykgewotCWNhc2UgQUVfTk9UX0ZPVU5EOgotCQlyZXR1cm4gQUVfT0s7Ci0JZGVmYXVsdDoKLQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCQllcnIoImFjcGlfcGNpZWhwcm06JXMgX1NVTiBmYWlsPTB4JXhcbiIsIHBhdGhfbmFtZSwgc3RhdHVzKTsKLQkJCXJldHVybiBzdGF0dXM7CisJCWluZm8gPSBidWZmZXIucG9pbnRlcjsKKwkJaWYgKChpbmZvLT52YWxpZCAmIEFDUElfVkFMSURfSElEKSAmJgorCQkJIXN0cmNtcChQQ0lfUk9PVF9ISURfU1RSSU5HLAorCQkJCQlpbmZvLT5oYXJkd2FyZV9pZC52YWx1ZSkpIHsKKwkJCWFjcGlfb3NfZnJlZShidWZmZXIucG9pbnRlcik7CisJCQlyZXR1cm4gMTsKKwkJfQorCQlpZiAoaW5mby0+dmFsaWQgJiBBQ1BJX1ZBTElEX0NJRCkgeworCQkJZm9yIChpPTA7IGkgPCBpbmZvLT5jb21wYXRpYmlsaXR5X2lkLmNvdW50OyBpKyspIHsKKwkJCQlpZiAoIXN0cmNtcChQQ0lfUk9PVF9ISURfU1RSSU5HLAorCQkJCQlpbmZvLT5jb21wYXRpYmlsaXR5X2lkLmlkW2ldLnZhbHVlKSkgeworCQkJCQlhY3BpX29zX2ZyZWUoYnVmZmVyLnBvaW50ZXIpOworCQkJCQlyZXR1cm4gMTsKKwkJCQl9CisJCQl9CiAJCX0KIAl9Ci0KLQkvKiBnZXQgX0FEUi4gX0FEUiBtdXN0IGV4aXN0IGlmIF9TVU4gZXhpc3RzICovCi0Jc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKGhhbmRsZSwgTUVUSE9EX05BTUVfX0FEUiwgTlVMTCwgJmFkcik7Ci0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCWVycigiYWNwaV9wY2llaHBybTolcyBfQURSIGZhaWw9MHgleFxuIiwgcGF0aF9uYW1lLCBzdGF0dXMpOwotCQlyZXR1cm4gc3RhdHVzOwotCX0KLQotCWRiZygiYWNwaV9wY2llaHBybTolcyBzdW49MHglMDh4IGFkcj0weCUwOHhcbiIsIHBhdGhfbmFtZSwgKHUzMilzdW4sICh1MzIpYWRyKTsKLQotCXN0YXR1cyA9IGFjcGlfZ2V0X3BhcmVudChoYW5kbGUsICZwaGFuZGxlKTsKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJZXJyKCJhY3BpX3BjaWVocHJtOiVzIGdldF9wYXJlbnQgZmFpbD0weCV4XG4iLCBwYXRoX25hbWUsIHN0YXR1cyk7Ci0JCXJldHVybiAoc3RhdHVzKTsKLQl9Ci0KLQlidXNfbnVtID0gcGFiLT5idXM7Ci0Jc2VnX251bSA9IHBhYi0+c2VnOwotCi0JaWYgKHBhYi0+YnVzID09IGJ1c19udW0pIHsKLQkJbGFiID0gcGFiOwotCX0gZWxzZSB7Ci0JCWRiZygiV0FSTjogcGFiIGlzIG5vdCBwYXJlbnRcbiIpOwotCQlsYWIgPSBmaW5kX2FjcGlfYnJpZGdlX2J5X2J1cyhwYWIsIHNlZ19udW0sIGJ1c19udW0pOwotCQlpZiAoIWxhYikgewotCQkJZGJnKCJhY3BpX3BjaWVocHJtOiBhbGxvYyBuZXcgUDJQIGJyaWRnZSgleCkgZm9yIHN1biglMDh4KVxuIiwgKHUzMilidXNfbnVtLCAodTMyKXN1bik7Ci0JCQlsYWIgPSAoc3RydWN0IGFjcGlfYnJpZGdlICopa21hbGxvYyhzaXplb2Yoc3RydWN0IGFjcGlfYnJpZGdlKSwgR0ZQX0tFUk5FTCk7Ci0JCQlpZiAoIWxhYikgewotCQkJCWVycigiYWNwaV9wY2llaHBybTogYWxsb2MgZm9yIGFiIGZhaWxcbiIpOwotCQkJCXJldHVybiBBRV9OT19NRU1PUlk7Ci0JCQl9Ci0JCQltZW1zZXQobGFiLCAwLCBzaXplb2Yoc3RydWN0IGFjcGlfYnJpZGdlKSk7Ci0KLQkJCWxhYi0+aGFuZGxlID0gcGhhbmRsZTsKLQkJCWxhYi0+cGJ1cyA9IHBhYi0+YnVzOwotCQkJbGFiLT5wZGV2aWNlID0gKGludCkocGFkciA+PiAxNikgJiAweGZmZmY7Ci0JCQlsYWItPnBmdW5jdGlvbiA9IChpbnQpKHBhZHIgJiAweGZmZmYpOwotCQkJbGFiLT5idXMgPSAoaW50KWJ1c19udW07Ci0JCQlsYWItPnNjYW5uZWQgPSAwOwotCQkJbGFiLT50eXBlID0gQlJJREdFX1RZUEVfUDJQOwotCi0JCQlwY2llaHBybV9hY3BpX3JlZ2lzdGVyX2FfYnJpZGdlICgmYWNwaV9icmlkZ2VzX2hlYWQsIHBhYiwgbGFiKTsKLQkJfSBlbHNlCi0JCQlkYmcoImFjcGlfcGNpZWhwcm06IGZvdW5kIFAyUCBicmlkZ2UoJXgpIGZvciBzdW4oJTA4eClcbiIsICh1MzIpYnVzX251bSwgKHUzMilzdW4pOwotCX0KLQotCWFjcGlfYWRkX3Nsb3RfdG9fcGhwX3Nsb3RzKGxhYiwgKGludClidXNfbnVtLCBoYW5kbGUsICh1MzIpYWRyLCAodTMyKXN1bik7Ci0KLQlyZXR1cm4gKHN0YXR1cyk7Ci19Ci0KLXN0YXRpYyBpbnQgcGNpZWhwcm1fYWNwaV9idWlsZF9waHBfc2xvdHMoCi0Jc3RydWN0IGFjcGlfYnJpZGdlCSphYiwKLQl1MzIJCQlkZXB0aAotCSkKLXsKLQlhY3BpX3N0YXR1cwlzdGF0dXM7Ci0JdTgJCSpwYXRoX25hbWUgPSBhY3BpX3BhdGhfbmFtZShhYi0+aGFuZGxlKTsKLQotCS8qIFdhbGsgZG93biB0aGlzIHBjaSBicmlkZ2UgdG8gZ2V0IF9TVU5zIGlmIGFueSBiZWhpbmQgUDJQICovCi0Jc3RhdHVzID0gYWNwaV93YWxrX25hbWVzcGFjZSAoIEFDUElfVFlQRV9ERVZJQ0UsCi0JCQkJYWItPmhhbmRsZSwKLQkJCQlkZXB0aCwKLQkJCQlwY2llaHBybV9hY3BpX2J1aWxkX3BocF9zbG90c19jYWxsYmFjaywKLQkJCQlhYiwKLQkJCQlOVUxMICk7Ci0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCWRiZygiYWNwaV9wY2llaHBybTolcyB3YWxrIGZvciBfU1VOIG9uIHBjaSBicmlkZ2Ugc2VnOmJ1cygleDoleCkgZmFpbD0weCV4XG4iLCBwYXRoX25hbWUsIGFiLT5zZWcsIGFiLT5idXMsIHN0YXR1cyk7Ci0JCXJldHVybiAtMTsKLQl9Ci0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgYnVpbGRfYV9icmlkZ2UoCi0Jc3RydWN0IGFjcGlfYnJpZGdlCSpwYWIsCi0Jc3RydWN0IGFjcGlfYnJpZGdlCSphYgotCSkKK2ludCBwY2llaHBfZ2V0X2hwX2h3X2NvbnRyb2xfZnJvbV9maXJtd2FyZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewotCXU4CQkqcGF0aF9uYW1lID0gYWNwaV9wYXRoX25hbWUoYWItPmhhbmRsZSk7Ci0KLQlwY2llaHBybV9hY3BpX3JlZ2lzdGVyX2FfYnJpZGdlICgmYWNwaV9icmlkZ2VzX2hlYWQsIHBhYiwgYWIpOwotCi0Jc3dpdGNoIChhYi0+dHlwZSkgewotCWNhc2UgQlJJREdFX1RZUEVfSE9TVDoKLQkJZGJnKCJhY3BpX3BjaWVocHJtOiBSZWdpc3RlcmVkIFBDSSBIT1NUIEJyaWRnZSglMDJ4KSAgICBvbiBzOmI6ZDpmKCUwMng6JTAyeDolMDJ4OiUwMngpIFslc11cbiIsCi0JCQlhYi0+YnVzLCBhYi0+c2VnLCBhYi0+cGJ1cywgYWItPnBkZXZpY2UsIGFiLT5wZnVuY3Rpb24sIHBhdGhfbmFtZSk7Ci0JCWJyZWFrOwotCWNhc2UgQlJJREdFX1RZUEVfUDJQOgotCQlkYmcoImFjcGlfcGNpZWhwcm06IFJlZ2lzdGVyZWQgUENJICBQMlAgQnJpZGdlKCUwMngtJTAyeCkgb24gczpiOmQ6ZiglMDJ4OiUwMng6JTAyeDolMDJ4KSBbJXNdXG4iLAotCQkJYWItPnBidXMsIGFiLT5idXMsIGFiLT5zZWcsIGFiLT5wYnVzLCBhYi0+cGRldmljZSwgYWItPnBmdW5jdGlvbiwgcGF0aF9uYW1lKTsKLQkJYnJlYWs7Ci0JfTsKLQotCS8qIGJ1aWxkIGFueSBpbW1lZGlhdGUgUEhQIHNsb3RzIHVuZGVyIHRoaXMgcGNpIGJyaWRnZSAqLwotCXBjaWVocHJtX2FjcGlfYnVpbGRfcGhwX3Nsb3RzKGFiLCAxKTsKLX0KLQotc3RhdGljIHN0cnVjdCBhY3BpX2JyaWRnZSAqIGFkZF9wMnBfYnJpZGdlKAotCWFjcGlfaGFuZGxlIGhhbmRsZSwKLQlzdHJ1Y3QgYWNwaV9icmlkZ2UJKnBhYiwJLyogcGFyZW50ICovCi0JdWxvbmcJYWRyCi0JKQotewotCXN0cnVjdCBhY3BpX2JyaWRnZQkqYWI7Ci0Jc3RydWN0IHBjaV9kZXYJKnBkZXY7Ci0JdWxvbmcJCWRldm51bSwgZnVuY251bTsKLQl1OAkJCSpwYXRoX25hbWUgPSBhY3BpX3BhdGhfbmFtZShoYW5kbGUpOwotCi0JYWIgPSAoc3RydWN0IGFjcGlfYnJpZGdlICopIGttYWxsb2MgKHNpemVvZihzdHJ1Y3QgYWNwaV9icmlkZ2UpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWFiKSB7Ci0JCWVycigiYWNwaV9wY2llaHBybTogYWxsb2MgZm9yIGFiIGZhaWxcbiIpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JbWVtc2V0KGFiLCAwLCBzaXplb2Yoc3RydWN0IGFjcGlfYnJpZGdlKSk7Ci0KLQlkZXZudW0gPSAoYWRyID4+IDE2KSAmIDB4ZmZmZjsKLQlmdW5jbnVtID0gYWRyICYgMHhmZmZmOwotCi0JcGRldiA9IHBjaV9maW5kX3Nsb3QocGFiLT5idXMsIFBDSV9ERVZGTihkZXZudW0sIGZ1bmNudW0pKTsKLQlpZiAoIXBkZXYgfHwgIXBkZXYtPnN1Ym9yZGluYXRlKSB7Ci0JCWVycigiYWNwaV9wY2llaHBybTolcyBpcyBub3QgYSBQMlAgQnJpZGdlXG4iLCBwYXRoX25hbWUpOwotCQlrZnJlZShhYik7Ci0JCXJldHVybiBOVUxMOworCWFjcGlfc3RhdHVzIHN0YXR1czsKKwlhY3BpX2hhbmRsZSBjaGFuZGxlLCBoYW5kbGUgPSBERVZJQ0VfQUNQSV9IQU5ETEUoJihkZXYtPmRldikpOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gZGV2OworCXU4ICpwYXRoX25hbWU7CisJLyoKKwkgKiBQZXIgUENJIGZpcm13YXJlIHNwZWNpZmljYXRpb24sIHdlIHNob3VsZCBydW4gdGhlIEFDUEkgX09TQworCSAqIG1ldGhvZCB0byBnZXQgY29udHJvbCBvZiBob3RwbHVnIGhhcmR3YXJlIGJlZm9yZSB1c2luZyBpdC4KKwkgKiBJZiBhbiBfT1NDIGlzIG1pc3NpbmcsIHdlIGxvb2sgZm9yIGFuIE9TSFAgdG8gZG8gdGhlIHNhbWUgdGhpbmcuCisJICogVG8gaGFuZGxlIGRpZmZlcmVudCBCSU9TIGJlaGF2aW9yLCB3ZSBsb29rIGZvciBfT1NDIGFuZCBPU0hQCisJICogd2l0aGluIHRoZSBzY29wZSBvZiB0aGUgaG90cGx1ZyBjb250cm9sbGVyIGFuZCBpdHMgcGFyZW50cywgdXB0bworCSAqIHRoZSBob3N0IGJyaWRnZSB1bmRlciB3aGljaCB0aGlzIGNvbnRyb2xsZXIgZXhpc3RzLgorCSAqLworCXdoaWxlICghaGFuZGxlKSB7CisJCS8qCisJCSAqIFRoaXMgaG90cGx1ZyBjb250cm9sbGVyIHdhcyBub3QgbGlzdGVkIGluIHRoZSBBQ1BJIG5hbWUKKwkJICogc3BhY2UgYXQgYWxsLiBUcnkgdG8gZ2V0IGFjcGkgaGFuZGxlIG9mIHBhcmVudCBwY2kgYnVzLgorCQkgKi8KKwkJaWYgKCFwZGV2IHx8ICFwZGV2LT5idXMtPnBhcmVudCkKKwkJCWJyZWFrOworCQlkYmcoIkNvdWxkIG5vdCBmaW5kICVzIGluIGFjcGkgbmFtZXNwYWNlLCB0cnlpbmcgcGFyZW50XG4iLAorCQkJCXBjaV9uYW1lKHBkZXYpKTsKKwkJaWYgKCFwZGV2LT5idXMtPnBhcmVudC0+c2VsZikKKwkJCS8qIFBhcmVudCBtdXN0IGJlIGEgaG9zdCBicmlkZ2UgKi8KKwkJCWhhbmRsZSA9IGFjcGlfZ2V0X3BjaV9yb290YnJpZGdlX2hhbmRsZSgKKwkJCQkJcGNpX2RvbWFpbl9ucihwZGV2LT5idXMtPnBhcmVudCksCisJCQkJCXBkZXYtPmJ1cy0+cGFyZW50LT5udW1iZXIpOworCQllbHNlCisJCQloYW5kbGUgPSBERVZJQ0VfQUNQSV9IQU5ETEUoCisJCQkJCSYocGRldi0+YnVzLT5wYXJlbnQtPnNlbGYtPmRldikpOworCQlwZGV2ID0gcGRldi0+YnVzLT5wYXJlbnQtPnNlbGY7CiAJfQogCi0JYWItPmhhbmRsZSA9IGhhbmRsZTsKLQlhYi0+c2VnID0gcGFiLT5zZWc7Ci0JYWItPnBidXMgPSBwYWItPmJ1czsJCS8qIG9yIHBkZXYtPmJ1cy0+bnVtYmVyICovCi0JYWItPnBkZXZpY2UgPSBkZXZudW07CQkvKiBvciBQQ0lfU0xPVChwZGV2LT5kZXZmbikgKi8KLQlhYi0+cGZ1bmN0aW9uID0gZnVuY251bTsJLyogb3IgUENJX0ZVTkMocGRldi0+ZGV2Zm4pICovCi0JYWItPmJ1cyA9IHBkZXYtPnN1Ym9yZGluYXRlLT5udW1iZXI7Ci0JYWItPnNjYW5uZWQgPSAwOwotCWFiLT50eXBlID0gQlJJREdFX1RZUEVfUDJQOwotCi0JZGJnKCJhY3BpX3BjaWVocHJtOiBQMlAoJXgtJXgpIG9uIHBjaT1iOmQ6ZigleDoleDoleCkgYWNwaT1iOmQ6ZigleDoleDoleCkgWyVzXVxuIiwKLQkJcGFiLT5idXMsIGFiLT5idXMsIHBkZXYtPmJ1cy0+bnVtYmVyLCBQQ0lfU0xPVChwZGV2LT5kZXZmbiksIFBDSV9GVU5DKHBkZXYtPmRldmZuKSwKLQkJcGFiLT5idXMsICh1MzIpZGV2bnVtLCAodTMyKWZ1bmNudW0sIHBhdGhfbmFtZSk7Ci0KLQlidWlsZF9hX2JyaWRnZShwYWIsIGFiKTsKLQotCXJldHVybiBhYjsKLX0KLQotc3RhdGljIGFjcGlfc3RhdHVzIHNjYW5fcDJwX2JyaWRnZSgKLQlhY3BpX2hhbmRsZQkJaGFuZGxlLAotCXUzMgkJCUxldmVsLAotCXZvaWQJCQkqY29udGV4dCwKLQl2b2lkCQkJKipyZXR2YWwKLQkpCi17Ci0Jc3RydWN0IGFjcGlfYnJpZGdlCSpwYWIgPSAoc3RydWN0IGFjcGlfYnJpZGdlICopY29udGV4dDsKLQlzdHJ1Y3QgYWNwaV9icmlkZ2UJKmFiOwotCWFjcGlfc3RhdHVzCQlzdGF0dXM7Ci0JdWxvbmcJCQlhZHIgPSAwOwotCXU4CQkJKnBhdGhfbmFtZSA9IGFjcGlfcGF0aF9uYW1lKGhhbmRsZSk7Ci0JdWxvbmcJCQlkZXZudW0sIGZ1bmNudW07Ci0Jc3RydWN0IHBjaV9kZXYJCSpwZGV2OwotCi0JLyogZ2V0IGRldmljZSwgZnVuY3Rpb24gKi8KLQlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX2ludGVnZXIoaGFuZGxlLCBNRVRIT0RfTkFNRV9fQURSLCBOVUxMLCAmYWRyKTsKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJaWYgKHN0YXR1cyAhPSBBRV9OT1RfRk9VTkQpCi0JCQllcnIoImFjcGlfcGNpZWhwcm06JXMgX0FEUiBmYWlsPTB4JXhcbiIsIHBhdGhfbmFtZSwgc3RhdHVzKTsKLQkJcmV0dXJuIEFFX09LOwotCX0KLQotCWRldm51bSA9IChhZHIgPj4gMTYpICYgMHhmZmZmOwotCWZ1bmNudW0gPSBhZHIgJiAweGZmZmY7Ci0KLQlwZGV2ID0gcGNpX2ZpbmRfc2xvdChwYWItPmJ1cywgUENJX0RFVkZOKGRldm51bSwgZnVuY251bSkpOwotCWlmICghcGRldikKLQkJcmV0dXJuIEFFX09LOwotCWlmICghcGRldi0+c3Vib3JkaW5hdGUpCi0JCXJldHVybiBBRV9PSzsKLQotCWFiID0gYWRkX3AycF9icmlkZ2UoaGFuZGxlLCBwYWIsIGFkcik7Ci0JaWYgKGFiKSB7Ci0JCXN0YXR1cyA9IGFjcGlfd2Fsa19uYW1lc3BhY2UgKCBBQ1BJX1RZUEVfREVWSUNFLAotCQkJCQloYW5kbGUsCi0JCQkJCSh1MzIpMSwKLQkJCQkJc2Nhbl9wMnBfYnJpZGdlLAotCQkJCQlhYiwKLQkJCQkJTlVMTCk7Ci0JCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKLQkJCWRiZygiYWNwaV9wY2llaHBybTolcyBmaW5kX3AycCBmYWlsPTB4JXhcbiIsIHBhdGhfbmFtZSwgc3RhdHVzKTsKLQl9Ci0KLQlyZXR1cm4gQUVfT0s7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgYWNwaV9icmlkZ2UgKiBhZGRfaG9zdF9icmlkZ2UoCi0JYWNwaV9oYW5kbGUgaGFuZGxlLAotCXVsb25nCXNlZ251bSwKLQl1bG9uZwlidXNudW0KLQkpCi17Ci0JdWxvbmcJCQlhZHIgPSAwOwotCWFjcGlfc3RhdHVzCQlzdGF0dXM7Ci0Jc3RydWN0IGFjcGlfYnJpZGdlCSphYjsKLQl1OAkJCSpwYXRoX25hbWUgPSBhY3BpX3BhdGhfbmFtZShoYW5kbGUpOwotCi0JLyogZ2V0IGRldmljZSwgZnVuY3Rpb246IGhvc3QgYnIgYWRyIGlzIGFsd2F5cyAwMDAwIHRob3VnaC4gICovCi0Jc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKGhhbmRsZSwgTUVUSE9EX05BTUVfX0FEUiwgTlVMTCwgJmFkcik7Ci0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCWVycigiYWNwaV9wY2llaHBybTolcyBfQURSIGZhaWw9MHgleFxuIiwgcGF0aF9uYW1lLCBzdGF0dXMpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JZGJnKCJhY3BpX3BjaWVocHJtOiBST09UIFBDSSBzZWcoMHgleClidXMoMHgleClkZXYoMHgleClmdW5jKDB4JXgpIFslc11cbiIsICh1MzIpc2VnbnVtLCAKLQkJKHUzMilidXNudW0sICh1MzIpKGFkciA+PiAxNikgJiAweGZmZmYsICh1MzIpYWRyICYgMHhmZmZmLCBwYXRoX25hbWUpOwotCi0JYWIgPSAoc3RydWN0IGFjcGlfYnJpZGdlICopIGttYWxsb2MgKHNpemVvZihzdHJ1Y3QgYWNwaV9icmlkZ2UpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWFiKSB7Ci0JCWVycigiYWNwaV9wY2llaHBybTogYWxsb2MgZm9yIGFiIGZhaWxcbiIpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JbWVtc2V0KGFiLCAwLCBzaXplb2Yoc3RydWN0IGFjcGlfYnJpZGdlKSk7Ci0KLQlhYi0+aGFuZGxlID0gaGFuZGxlOwotCWFiLT5zZWcgPSAoaW50KXNlZ251bTsKLQlhYi0+YnVzID0gYWItPnBidXMgPSAoaW50KWJ1c251bTsKLQlhYi0+cGRldmljZSA9IChpbnQpKGFkciA+PiAxNikgJiAweGZmZmY7Ci0JYWItPnBmdW5jdGlvbiA9IChpbnQpKGFkciAmIDB4ZmZmZik7Ci0JYWItPnNjYW5uZWQgPSAwOwotCWFiLT50eXBlID0gQlJJREdFX1RZUEVfSE9TVDsKLQotCS8qIGdldCByb290IHBjaSBicmlkZ2UncyBjdXJyZW50IHJlc291cmNlcyAqLwotCXN0YXR1cyA9IGFjcGlfZ2V0X2NycyhhYik7Ci0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCWVycigiYWNwaV9wY2llaHBybTolcyBldmFsdWF0ZSBfQ1JTIGZhaWw9MHgleFxuIiwgcGF0aF9uYW1lLCBzdGF0dXMpOwotCQlrZnJlZShhYik7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCXN0YXR1cyA9IHBjaV9vc2NfY29udHJvbF9zZXQgKE9TQ19QQ0lfRVhQUkVTU19OQVRJVkVfSFBfQ09OVFJPTCk7IAotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQllcnIoIiVzOiBzdGF0dXMgJXhcbiIsIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKLQkJb3NjX3J1bl9zdGF0dXMgPSAoc3RhdHVzID09IEFFX05PVF9GT1VORCkgPyBPU0NfTk9UX0VYSVNUIDogT1NDX1JVTl9GQUlMRUQ7Ci0JfSBlbHNlIHsKLQkJb3NjX3J1bl9zdGF0dXMgPSBOQ19SVU5fU1VDQ0VTUzsKLQl9CQotCWRiZygiJXM6IG9zY19ydW5fc3RhdHVzICV4XG4iLCBfX0ZVTkNUSU9OX18sIG9zY19ydW5fc3RhdHVzKTsKLQkKLQlidWlsZF9hX2JyaWRnZShhYiwgYWIpOwotCi0JcmV0dXJuIGFiOwotfQotCi1zdGF0aWMgYWNwaV9zdGF0dXMgYWNwaV9zY2FuX2Zyb21fcm9vdF9wY2lfY2FsbGJhY2sgKAotCWFjcGlfaGFuZGxlCWhhbmRsZSwKLQl1MzIJCQlMZXZlbCwKLQl2b2lkCQkqY29udGV4dCwKLQl2b2lkCQkqKnJldHZhbAotCSkKLXsKLQl1bG9uZwkJc2VnbnVtID0gMDsKLQl1bG9uZwkJYnVzbnVtID0gMDsKLQlhY3BpX3N0YXR1cwkJc3RhdHVzOwotCXN0cnVjdCBhY3BpX2JyaWRnZQkqYWI7Ci0JdTgJCQkqcGF0aF9uYW1lID0gYWNwaV9wYXRoX25hbWUoaGFuZGxlKTsKLQotCS8qIGdldCBidXMgbnVtYmVyIG9mIHRoaXMgcGNpIHJvb3QgYnJpZGdlICovCi0Jc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKGhhbmRsZSwgTUVUSE9EX05BTUVfX1NFRywgTlVMTCwgJnNlZ251bSk7Ci0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCWlmIChzdGF0dXMgIT0gQUVfTk9UX0ZPVU5EKSB7Ci0JCQllcnIoImFjcGlfcGNpZWhwcm06JXMgZXZhbHVhdGUgX1NFRyBmYWlsPTB4JXhcbiIsIHBhdGhfbmFtZSwgc3RhdHVzKTsKLQkJCXJldHVybiBzdGF0dXM7CisJd2hpbGUgKGhhbmRsZSkgeworCQlwYXRoX25hbWUgPSBhY3BpX3BhdGhfbmFtZShoYW5kbGUpOworCQlkYmcoIlRyeWluZyB0byBnZXQgaG90cGx1ZyBjb250cm9sIGZvciAlcyBcbiIsIHBhdGhfbmFtZSk7CisJCXN0YXR1cyA9IHBjaV9vc2NfY29udHJvbF9zZXQoaGFuZGxlLAorCQkJCU9TQ19QQ0lfRVhQUkVTU19OQVRJVkVfSFBfQ09OVFJPTCk7CisJCWlmIChzdGF0dXMgPT0gQUVfTk9UX0ZPVU5EKQorCQkJc3RhdHVzID0gYWNwaV9ydW5fb3NocChoYW5kbGUpOworCQlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpIHsKKwkJCWRiZygiR2FpbmVkIGNvbnRyb2wgZm9yIGhvdHBsdWcgSFcgZm9yIHBjaSAlcyAoJXMpXG4iLAorCQkJCXBjaV9uYW1lKGRldiksIHBhdGhfbmFtZSk7CisJCQlyZXR1cm4gMDsKIAkJfQotCQlzZWdudW0gPSAwOwotCX0KLQotCS8qIGdldCBidXMgbnVtYmVyIG9mIHRoaXMgcGNpIHJvb3QgYnJpZGdlICovCi0Jc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKGhhbmRsZSwgTUVUSE9EX05BTUVfX0JCTiwgTlVMTCwgJmJ1c251bSk7Ci0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCWVycigiYWNwaV9wY2llaHBybTolcyBldmFsdWF0ZSBfQkJOIGZhaWw9MHgleFxuIiwgcGF0aF9uYW1lLCBzdGF0dXMpOwotCQlyZXR1cm4gKHN0YXR1cyk7Ci0JfQotCi0JYWIgPSBhZGRfaG9zdF9icmlkZ2UoaGFuZGxlLCBzZWdudW0sIGJ1c251bSk7Ci0JaWYgKGFiKSB7Ci0JCXN0YXR1cyA9IGFjcGlfd2Fsa19uYW1lc3BhY2UgKCBBQ1BJX1RZUEVfREVWSUNFLAotCQkJCQloYW5kbGUsCi0JCQkJCTEsCi0JCQkJCXNjYW5fcDJwX2JyaWRnZSwKLQkJCQkJYWIsCi0JCQkJCU5VTEwpOworCQlpZiAoaXNfcm9vdF9icmlkZ2UoaGFuZGxlKSkKKwkJCWJyZWFrOworCQljaGFuZGxlID0gaGFuZGxlOworCQlzdGF0dXMgPSBhY3BpX2dldF9wYXJlbnQoY2hhbmRsZSwgJmhhbmRsZSk7CiAJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKLQkJCWRiZygiYWNwaV9wY2llaHBybTolcyBmaW5kX3AycCBmYWlsPTB4JXhcbiIsIHBhdGhfbmFtZSwgc3RhdHVzKTsKKwkJCWJyZWFrOwogCX0KIAotCXJldHVybiBBRV9PSzsKKwllcnIoIkNhbm5vdCBnZXQgY29udHJvbCBvZiBob3RwbHVnIGhhcmR3YXJlIGZvciBwY2kgJXNcbiIsCisJCQlwY2lfbmFtZShkZXYpKTsKKwlyZXR1cm4gLTE7CiB9CiAKLXN0YXRpYyBpbnQgcGNpZWhwcm1fYWNwaV9zY2FuX3BjaSAodm9pZCkKK3ZvaWQgcGNpZWhwX2dldF9ocF9wYXJhbXNfZnJvbV9maXJtd2FyZShzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQlzdHJ1Y3QgaG90cGx1Z19wYXJhbXMgKmhwcCkKIHsKLQlhY3BpX3N0YXR1cwlzdGF0dXM7CisJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfTk9UX0ZPVU5EOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gZGV2OwogCiAJLyoKLQkgKiBUQkQ6IHRyYXZlcnNlIExETSBkZXZpY2UgdHJlZSB3aXRoIHRoZSBoZWxwIG9mCi0JICogIHVuaWZpZWQgQUNQSSBhdWdtZW50ZWQgZm9yIHBocCBkZXZpY2UgcG9wdWxhdGlvbi4KKwkgKiBfSFBQIHNldHRpbmdzIGFwcGx5IHRvIGFsbCBjaGlsZCBidXNlcywgdW50aWwgYW5vdGhlciBfSFBQIGlzCisJICogZW5jb3VudGVyZWQuIElmIHdlIGRvbid0IGZpbmQgYW4gX0hQUCBmb3IgdGhlIGlucHV0IHBjaSBkZXYsCisJICogbG9vayBmb3IgaXQgaW4gdGhlIHBhcmVudCBkZXZpY2Ugc2NvcGUgc2luY2UgdGhhdCB3b3VsZCBhcHBseSB0bworCSAqIHRoaXMgcGNpIGRldi4gSWYgd2UgZG9uJ3QgZmluZCBhbnkgX0hQUCwgdXNlIGhhcmRjb2RlZCBkZWZhdWx0cwogCSAqLwotCXN0YXR1cyA9IGFjcGlfZ2V0X2RldmljZXMgKCBQQ0lfUk9PVF9ISURfU1RSSU5HLAotCQkJCWFjcGlfc2Nhbl9mcm9tX3Jvb3RfcGNpX2NhbGxiYWNrLAotCQkJCU5VTEwsCi0JCQkJTlVMTCApOwotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQllcnIoImFjcGlfcGNpZWhwcm06Z2V0X2RldmljZSBQQ0kgUk9PVCBISUQgZmFpbD0weCV4XG4iLCBzdGF0dXMpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCBwY2llaHBybV9pbml0KGVudW0gcGhwX2N0bHJfdHlwZSBjdGxyX3R5cGUpCi17Ci0JaW50CXJjOwotCi0JaWYgKGN0bHJfdHlwZSAhPSBQQ0kpCi0JCXJldHVybiAtRU5PREVWOwotCi0JZGJnKCJwY2llaHBybSBBQ1BJIGluaXQgPGVudGVyPlxuIik7Ci0JYWNwaV9icmlkZ2VzX2hlYWQgPSBOVUxMOwotCi0JLyogY29uc3RydWN0IFBDSSBidXM6ZGV2aWNlIHRyZWUgb2YgYWNwaV9oYW5kbGVzICovCi0JcmMgPSBwY2llaHBybV9hY3BpX3NjYW5fcGNpKCk7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7Ci0KLQlpZiAoKG9zaHBfcnVuX3N0YXR1cyAhPSBOQ19SVU5fU1VDQ0VTUykgJiYgKG9zY19ydW5fc3RhdHVzICE9IE5DX1JVTl9TVUNDRVNTKSkgewotCQllcnIoIkZhaWxzIHRvIGdhaW4gY29udHJvbCBvZiBuYXRpdmUgaG90LXBsdWdcbiIpOwotCQlyYyA9IC1FTk9ERVY7Ci0JfQotCi0JZGJnKCJwY2llaHBybSBBQ1BJIGluaXQgJXNcbiIsIChyYyk/ImZhaWwiOiJzdWNjZXNzIik7Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgdm9pZCBmcmVlX2Ffc2xvdChzdHJ1Y3QgYWNwaV9waHBfc2xvdCAqYXBzKQotewotCWRiZygiICAgICAgICBmcmVlIGEgcGhwIGZ1bmMgb2Ygc2xvdCgweCUwMngpIG9uIFBDSSBiOmQ6Zj0weCUwMng6JTAyeDolMDJ4XG4iLCBhcHMtPnN1biwgYXBzLT5idXMsIGFwcy0+ZGV2LCBhcHMtPmZ1bik7Ci0KLQlmcmVlX3BjaV9yZXNvdXJjZSAoYXBzLT5pb19oZWFkKTsKLQlmcmVlX3BjaV9yZXNvdXJjZSAoYXBzLT5idXNfaGVhZCk7Ci0JZnJlZV9wY2lfcmVzb3VyY2UgKGFwcy0+bWVtX2hlYWQpOwotCWZyZWVfcGNpX3Jlc291cmNlIChhcHMtPnBfbWVtX2hlYWQpOwotCi0Ja2ZyZWUoYXBzKTsKLX0KLQotc3RhdGljIHZvaWQgZnJlZV9hX2JyaWRnZSggc3RydWN0IGFjcGlfYnJpZGdlCSphYikKLXsKLQlzdHJ1Y3QgYWNwaV9waHBfc2xvdAkqYXBzLCAqbmV4dDsKLQotCXN3aXRjaCAoYWItPnR5cGUpIHsKLQljYXNlIEJSSURHRV9UWVBFX0hPU1Q6Ci0JCWRiZygiRnJlZSBBQ1BJIFBDSSBIT1NUIEJyaWRnZSgleCkgWyVzXSBvbiBzOmI6ZDpmKCV4OiV4OiV4OiV4KVxuIiwKLQkJCWFiLT5idXMsIGFjcGlfcGF0aF9uYW1lKGFiLT5oYW5kbGUpLCBhYi0+c2VnLCBhYi0+cGJ1cywgYWItPnBkZXZpY2UsIGFiLT5wZnVuY3Rpb24pOwotCQlicmVhazsKLQljYXNlIEJSSURHRV9UWVBFX1AyUDoKLQkJZGJnKCJGcmVlIEFDUEkgUENJIFAyUCBCcmlkZ2UoJXgtJXgpIFslc10gb24gczpiOmQ6ZigleDoleDoleDoleClcbiIsCi0JCQlhYi0+cGJ1cywgYWItPmJ1cywgYWNwaV9wYXRoX25hbWUoYWItPmhhbmRsZSksIGFiLT5zZWcsIGFiLT5wYnVzLCBhYi0+cGRldmljZSwgYWItPnBmdW5jdGlvbik7Ci0JCWJyZWFrOwotCX07Ci0KLQkvKiBmcmVlIHNsb3RzIGZpcnN0ICovCi0JZm9yIChhcHMgPSBhYi0+c2xvdHM7IGFwczsgYXBzID0gbmV4dCkgewotCQluZXh0ID0gYXBzLT5uZXh0OwotCQlmcmVlX2Ffc2xvdChhcHMpOwotCX0KLQotCWZyZWVfcGNpX3Jlc291cmNlIChhYi0+aW9faGVhZCk7Ci0JZnJlZV9wY2lfcmVzb3VyY2UgKGFiLT50aW9faGVhZCk7Ci0JZnJlZV9wY2lfcmVzb3VyY2UgKGFiLT5idXNfaGVhZCk7Ci0JZnJlZV9wY2lfcmVzb3VyY2UgKGFiLT50YnVzX2hlYWQpOwotCWZyZWVfcGNpX3Jlc291cmNlIChhYi0+bWVtX2hlYWQpOwotCWZyZWVfcGNpX3Jlc291cmNlIChhYi0+dG1lbV9oZWFkKTsKLQlmcmVlX3BjaV9yZXNvdXJjZSAoYWItPnBfbWVtX2hlYWQpOwotCWZyZWVfcGNpX3Jlc291cmNlIChhYi0+dHBfbWVtX2hlYWQpOwotCi0Ja2ZyZWUoYWIpOwotfQotCi1zdGF0aWMgdm9pZCBwY2llaHBybV9mcmVlX2JyaWRnZXMgKCBzdHJ1Y3QgYWNwaV9icmlkZ2UJKmFiKQotewotCWlmICghYWIpCi0JCXJldHVybjsKLQotCWlmIChhYi0+Y2hpbGQpCi0JCXBjaWVocHJtX2ZyZWVfYnJpZGdlcyAoYWItPmNoaWxkKTsKLQotCWlmIChhYi0+bmV4dCkKLQkJcGNpZWhwcm1fZnJlZV9icmlkZ2VzIChhYi0+bmV4dCk7Ci0KLQlmcmVlX2FfYnJpZGdlKGFiKTsKLX0KLQotdm9pZCBwY2llaHBybV9jbGVhbnVwKHZvaWQpCi17Ci0JcGNpZWhwcm1fZnJlZV9icmlkZ2VzIChhY3BpX2JyaWRnZXNfaGVhZCk7Ci19Ci0KLXN0YXRpYyBpbnQgZ2V0X251bWJlcl9vZl9zbG90cyAoCi0Jc3RydWN0IGFjcGlfYnJpZGdlCSphYiwKLQlpbnQJCQkJc2VsZm9ubHkKLQkpCi17Ci0Jc3RydWN0IGFjcGlfcGhwX3Nsb3QJKmFwczsKLQlpbnQJcHJldl9zbG90ID0gLTE7Ci0JaW50CXNsb3RfbnVtID0gMDsKLQotCWZvciAoIGFwcyA9IGFiLT5zbG90czsgYXBzOyBhcHMgPSBhcHMtPm5leHQpCi0JCWlmIChhcHMtPmRldiAhPSBwcmV2X3Nsb3QpIHsKLQkJCXByZXZfc2xvdCA9IGFwcy0+ZGV2OwotCQkJc2xvdF9udW0rKzsKLQkJfQotCi0JaWYgKGFiLT5jaGlsZCkKLQkJc2xvdF9udW0gKz0gZ2V0X251bWJlcl9vZl9zbG90cyAoYWItPmNoaWxkLCAwKTsKLQotCWlmIChzZWxmb25seSkKLQkJcmV0dXJuIHNsb3RfbnVtOwotCi0JaWYgKGFiLT5uZXh0KQotCQlzbG90X251bSArPSBnZXRfbnVtYmVyX29mX3Nsb3RzIChhYi0+bmV4dCwgMCk7Ci0KLQlyZXR1cm4gc2xvdF9udW07Ci19Ci0KLXN0YXRpYyBpbnQgcHJpbnRfYWNwaV9yZXNvdXJjZXMgKHN0cnVjdCBhY3BpX2JyaWRnZQkqYWIpCi17Ci0Jc3RydWN0IGFjcGlfcGhwX3Nsb3QJCSphcHM7Ci0JaW50CWk7Ci0KLQlzd2l0Y2ggKGFiLT50eXBlKSB7Ci0JY2FzZSBCUklER0VfVFlQRV9IT1NUOgotCQlkYmcoIlBDSSBIT1NUIEJyaWRnZSAoJXgpIFslc11cbiIsIGFiLT5idXMsIGFjcGlfcGF0aF9uYW1lKGFiLT5oYW5kbGUpKTsKLQkJYnJlYWs7Ci0JY2FzZSBCUklER0VfVFlQRV9QMlA6Ci0JCWRiZygiUENJIFAyUCBCcmlkZ2UgKCV4LSV4KSBbJXNdXG4iLCBhYi0+cGJ1cywgYWItPmJ1cywgYWNwaV9wYXRoX25hbWUoYWItPmhhbmRsZSkpOwotCQlicmVhazsKLQl9OwotCi0JcHJpbnRfcGNpX3Jlc291cmNlcyAoYWIpOwotCi0JZm9yICggaSA9IC0xLCBhcHMgPSBhYi0+c2xvdHM7IGFwczsgYXBzID0gYXBzLT5uZXh0KSB7Ci0JCWlmIChhcHMtPmRldiA9PSBpKQotCQkJY29udGludWU7Ci0JCWRiZygiICBTbG90IHN1bigleCkgczpiOmQ6ZiglMDJ4OiUwMng6JTAyeDolMDJ4KVxuIiwgYXBzLT5zdW4sIGFwcy0+c2VnLCBhcHMtPmJ1cywgYXBzLT5kZXYsIGFwcy0+ZnVuKTsKLQkJcHJpbnRfc2xvdF9yZXNvdXJjZXMoYXBzKTsKLQkJaSA9IGFwcy0+ZGV2OwotCX0KLQotCWlmIChhYi0+Y2hpbGQpCi0JCXByaW50X2FjcGlfcmVzb3VyY2VzIChhYi0+Y2hpbGQpOwotCi0JaWYgKGFiLT5uZXh0KQotCQlwcmludF9hY3BpX3Jlc291cmNlcyAoYWItPm5leHQpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCBwY2llaHBybV9wcmludF9waXJ0KHZvaWQpCi17Ci0JZGJnKCJQQ0lFSFBSTSBBQ1BJIFNsb3RzXG4iKTsKLQlpZiAoYWNwaV9icmlkZ2VzX2hlYWQpCi0JCXByaW50X2FjcGlfcmVzb3VyY2VzIChhY3BpX2JyaWRnZXNfaGVhZCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBhY3BpX3BocF9zbG90ICogZ2V0X2FjcGlfc2xvdCAoCi0Jc3RydWN0IGFjcGlfYnJpZGdlICphYiwKLQl1MzIgc3VuCi0JKQotewotCXN0cnVjdCBhY3BpX3BocF9zbG90CSphcHMgPSBOVUxMOwotCi0JZm9yICggYXBzID0gYWItPnNsb3RzOyBhcHM7IGFwcyA9IGFwcy0+bmV4dCkKLQkJaWYgKGFwcy0+c3VuID09IHN1bikKLQkJCXJldHVybiBhcHM7Ci0KLQlpZiAoIWFwcyAmJiBhYi0+Y2hpbGQpIHsKLQkJYXBzID0gKHN0cnVjdCBhY3BpX3BocF9zbG90ICopZ2V0X2FjcGlfc2xvdCAoYWItPmNoaWxkLCBzdW4pOwotCQlpZiAoYXBzKQotCQkJcmV0dXJuIGFwczsKLQl9Ci0KLQlpZiAoIWFwcyAmJiBhYi0+bmV4dCkgewotCQlhcHMgPSAoc3RydWN0IGFjcGlfcGhwX3Nsb3QgKilnZXRfYWNwaV9zbG90IChhYi0+bmV4dCwgc3VuKTsKLQkJaWYgKGFwcykKLQkJCXJldHVybiBhcHM7Ci0JfQotCi0JcmV0dXJuIGFwczsKLQotfQotCi0jaWYgMAotdm9pZCAqIHBjaWVocHJtX2dldF9zbG90KHN0cnVjdCBzbG90ICpzbG90KQotewotCXN0cnVjdCBhY3BpX2JyaWRnZQkqYWIgPSBhY3BpX2JyaWRnZXNfaGVhZDsKLQlzdHJ1Y3QgYWNwaV9waHBfc2xvdAkqYXBzID0gZ2V0X2FjcGlfc2xvdCAoYWIsIHNsb3QtPm51bWJlcik7Ci0KLQlhcHMtPnNsb3QgPSBzbG90OwotCi0JZGJnKCJHb3QgYWNwaSBzbG90IHN1bigleCk6IHM6YjpkOmYoJXg6JXg6JXg6JXgpXG4iLCBhcHMtPnN1biwgYXBzLT5zZWcsIGFwcy0+YnVzLCBhcHMtPmRldiwgYXBzLT5mdW4pOwotCi0JcmV0dXJuICh2b2lkICopYXBzOwotfQotI2VuZGlmCi0KLXN0YXRpYyB2b2lkIHBjaWVocHJtX2R1bXBfZnVuY19yZXMoIHN0cnVjdCBwY2lfZnVuYyAqZnVuKQotewotCXN0cnVjdCBwY2lfZnVuYyAqZnVuYyA9IGZ1bjsKLQotCWlmIChmdW5jLT5idXNfaGVhZCkgewotCQlkYmcoIjogICAgQlVTIFJlc291cmNlczpcbiIpOwotCQlwcmludF9wY2lfcmVzb3VyY2UgKGZ1bmMtPmJ1c19oZWFkKTsKLQl9Ci0JaWYgKGZ1bmMtPmlvX2hlYWQpIHsKLQkJZGJnKCI6ICAgIElPIFJlc291cmNlczpcbiIpOwotCQlwcmludF9wY2lfcmVzb3VyY2UgKGZ1bmMtPmlvX2hlYWQpOwotCX0KLQlpZiAoZnVuYy0+bWVtX2hlYWQpIHsKLQkJZGJnKCI6ICAgIE1FTSBSZXNvdXJjZXM6XG4iKTsKLQkJcHJpbnRfcGNpX3Jlc291cmNlIChmdW5jLT5tZW1faGVhZCk7Ci0JfQotCWlmIChmdW5jLT5wX21lbV9oZWFkKSB7Ci0JCWRiZygiOiAgICBQTUVNIFJlc291cmNlczpcbiIpOwotCQlwcmludF9wY2lfcmVzb3VyY2UgKGZ1bmMtPnBfbWVtX2hlYWQpOworCXdoaWxlIChwZGV2ICYmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkpIHsKKwkJYWNwaV9oYW5kbGUgaGFuZGxlID0gREVWSUNFX0FDUElfSEFORExFKCYocGRldi0+ZGV2KSk7CisJCWlmICghaGFuZGxlKQorCQkJYnJlYWs7CisJCXN0YXR1cyA9IGFjcGlfcnVuX2hwcChoYW5kbGUsIGhwcCk7CisJCWlmICghKHBkZXYtPmJ1cy0+cGFyZW50KSkKKwkJCWJyZWFrOworCQkvKiBDaGVjayBpZiBhIHBhcmVudCBvYmplY3Qgc3VwcG9ydHMgX0hQUCAqLworCQlwZGV2ID0gcGRldi0+YnVzLT5wYXJlbnQtPnNlbGY7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBwY2llaHBybV9kdW1wX2N0cmxfcmVzKCBzdHJ1Y3QgY29udHJvbGxlciAqY3RscikKLXsKLQlzdHJ1Y3QgY29udHJvbGxlciAqY3RybCA9IGN0bHI7Ci0KLQlpZiAoY3RybC0+YnVzX2hlYWQpIHsKLQkJZGJnKCI6ICAgIEJVUyBSZXNvdXJjZXM6XG4iKTsKLQkJcHJpbnRfcGNpX3Jlc291cmNlIChjdHJsLT5idXNfaGVhZCk7Ci0JfQotCWlmIChjdHJsLT5pb19oZWFkKSB7Ci0JCWRiZygiOiAgICBJTyBSZXNvdXJjZXM6XG4iKTsKLQkJcHJpbnRfcGNpX3Jlc291cmNlIChjdHJsLT5pb19oZWFkKTsKLQl9Ci0JaWYgKGN0cmwtPm1lbV9oZWFkKSB7Ci0JCWRiZygiOiAgICBNRU0gUmVzb3VyY2VzOlxuIik7Ci0JCXByaW50X3BjaV9yZXNvdXJjZSAoY3RybC0+bWVtX2hlYWQpOwotCX0KLQlpZiAoY3RybC0+cF9tZW1faGVhZCkgewotCQlkYmcoIjogICAgUE1FTSBSZXNvdXJjZXM6XG4iKTsKLQkJcHJpbnRfcGNpX3Jlc291cmNlIChjdHJsLT5wX21lbV9oZWFkKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgcGNpZWhwcm1fZ2V0X3VzZWRfcmVzb3VyY2VzICgKLQlzdHJ1Y3QgY29udHJvbGxlciAqY3RybCwKLQlzdHJ1Y3QgcGNpX2Z1bmMgKmZ1bmMKLQkpCi17Ci0JcmV0dXJuIHBjaWVocF9zYXZlX3VzZWRfcmVzb3VyY2VzIChjdHJsLCBmdW5jLCAhRElTQUJMRV9DQVJEKTsKLX0KLQotc3RhdGljIGludCBjb25maWd1cmVfZXhpc3RpbmdfZnVuY3Rpb24oCi0Jc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwsCi0Jc3RydWN0IHBjaV9mdW5jICpmdW5jCi0JKQotewotCWludCByYzsKLQotCS8qIHNlZSBob3cgbXVjaCByZXNvdXJjZXMgdGhlIGZ1bmMgaGFzIHVzZWQuICovCi0JcmMgPSBwY2llaHBybV9nZXRfdXNlZF9yZXNvdXJjZXMgKGN0cmwsIGZ1bmMpOwotCi0JaWYgKCFyYykgewotCQkvKiBzdWJ0cmFjdCB0aGUgcmVzb3VyY2VzIHVzZWQgYnkgdGhlIGZ1bmMgZnJvbSBjdHJsIHJlc291cmNlcyAqLwotCQlyYyAgPSBwY2llaHBybV9kZWxldGVfcmVzb3VyY2VzICgmY3RybC0+YnVzX2hlYWQsIGZ1bmMtPmJ1c19oZWFkKTsKLQkJcmMgfD0gcGNpZWhwcm1fZGVsZXRlX3Jlc291cmNlcyAoJmN0cmwtPmlvX2hlYWQsIGZ1bmMtPmlvX2hlYWQpOwotCQlyYyB8PSBwY2llaHBybV9kZWxldGVfcmVzb3VyY2VzICgmY3RybC0+bWVtX2hlYWQsIGZ1bmMtPm1lbV9oZWFkKTsKLQkJcmMgfD0gcGNpZWhwcm1fZGVsZXRlX3Jlc291cmNlcyAoJmN0cmwtPnBfbWVtX2hlYWQsIGZ1bmMtPnBfbWVtX2hlYWQpOwotCQlpZiAocmMpCi0JCQl3YXJuKCJhQ0VGOiBjYW5ub3QgZGVsIHVzZWQgcmVzb3VyY2VzXG4iKTsKLQl9IGVsc2UKLQkJZXJyKCJhQ0VGOiBjYW5ub3QgZ2V0IHVzZWQgcmVzb3VyY2VzXG4iKTsKLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBiaW5kX3BjaV9yZXNvdXJjZXNfdG9fc2xvdHMgKCBzdHJ1Y3QgY29udHJvbGxlciAqY3RybCkKLXsKLQlzdHJ1Y3QgcGNpX2Z1bmMgKmZ1bmMsIG5ld19mdW5jOwotCWludCBidXNuID0gY3RybC0+c2xvdF9idXM7Ci0JaW50IGRldm4sIGZ1bm47Ci0JdTMyCXZpZDsKLQotCWZvciAoZGV2biA9IDA7IGRldm4gPCAzMjsgZGV2bisrKSB7Ci0JCWZvciAoZnVubiA9IDA7IGZ1bm4gPCA4OyBmdW5uKyspIHsKLQkJCS8qCi0JCQlpZiAoZGV2biA9PSBjdHJsLT5kZXZpY2UgJiYgZnVubiA9PSBjdHJsLT5mdW5jdGlvbikKLQkJCQljb250aW51ZTsKLQkJCSovCi0JCQkvKiBmaW5kIG91dCBpZiB0aGlzIGVudHJ5IGlzIGZvciBhbiBvY2N1cGllZCBzbG90ICovCi0JCQl2aWQgPSAweEZGRkZGRkZGOwotCQkJcGNpX2J1c19yZWFkX2NvbmZpZ19kd29yZChjdHJsLT5wY2lfZGV2LT5zdWJvcmRpbmF0ZSwgUENJX0RFVkZOKGRldm4sIGZ1bm4pLCBQQ0lfVkVORE9SX0lELCAmdmlkKTsKLQotCQkJaWYgKHZpZCAhPSAweEZGRkZGRkZGKSB7Ci0JCQkJZGJnKCIlczogdmlkID0gJXhcbiIsIF9fRlVOQ1RJT05fXywgdmlkKTsKLQkJCQlmdW5jID0gcGNpZWhwX3Nsb3RfZmluZChidXNuLCBkZXZuLCBmdW5uKTsKLQkJCQlpZiAoIWZ1bmMpIHsKLQkJCQkJbWVtc2V0KCZuZXdfZnVuYywgMCwgc2l6ZW9mKHN0cnVjdCBwY2lfZnVuYykpOwotCQkJCQluZXdfZnVuYy5idXMgPSBidXNuOwotCQkJCQluZXdfZnVuYy5kZXZpY2UgPSBkZXZuOwotCQkJCQluZXdfZnVuYy5mdW5jdGlvbiA9IGZ1bm47Ci0JCQkJCW5ld19mdW5jLmlzX2FfYm9hcmQgPSAxOwotCQkJCQljb25maWd1cmVfZXhpc3RpbmdfZnVuY3Rpb24oY3RybCwgJm5ld19mdW5jKTsKLQkJCQkJcGNpZWhwcm1fZHVtcF9mdW5jX3JlcygmbmV3X2Z1bmMpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWNvbmZpZ3VyZV9leGlzdGluZ19mdW5jdGlvbihjdHJsLCBmdW5jKTsKLQkJCQkJcGNpZWhwcm1fZHVtcF9mdW5jX3JlcyhmdW5jKTsKLQkJCQl9Ci0JCQkJZGJnKCJhQ0NGOmV4aXN0aW5nIFBDSSAweCV4IEZ1bmMgUmVzb3VyY2VEdW1wXG4iLCBjdHJsLT5idXMpOwotCQkJfQotCQl9Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYmluZF9wY2lfcmVzb3VyY2VzKAotCXN0cnVjdCBjb250cm9sbGVyIAkqY3RybCwKLQlzdHJ1Y3QgYWNwaV9icmlkZ2UJKmFiCi0JKQotewotCWludAkJc3RhdHVzID0gMDsKLQotCWlmIChhYi0+YnVzX2hlYWQpIHsKLQkJZGJnKCJiYXByOiAgQlVTIFJlc291cmNlcyBhZGQgb24gUENJIDB4JXhcbiIsIGFiLT5idXMpOwotCQlzdGF0dXMgPSBwY2llaHBybV9hZGRfcmVzb3VyY2VzICgmY3RybC0+YnVzX2hlYWQsIGFiLT5idXNfaGVhZCk7Ci0JCWlmIChwY2llaHBybV9kZWxldGVfcmVzb3VyY2VzICgmYWItPmJ1c19oZWFkLCBjdHJsLT5idXNfaGVhZCkpCi0JCQl3YXJuKCJiYXByOiAgY2Fubm90IHN1YiBCVVMgUmVzb3VyY2Ugb24gUENJIDB4JXhcbiIsIGFiLT5idXMpOwotCQlpZiAoc3RhdHVzKSB7Ci0JCQllcnIoImJhcHI6ICBCVVMgUmVzb3VyY2UgYWRkIG9uIFBDSSAweCV4OiBmYWlsPTB4JXhcbiIsIGFiLT5idXMsIHN0YXR1cyk7Ci0JCQlyZXR1cm4gc3RhdHVzOwotCQl9Ci0JfSBlbHNlCi0JCWluZm8oImJhcHI6ICBObyBCVVMgUmVzb3VyY2Ugb24gUENJIDB4JXguXG4iLCBhYi0+YnVzKTsKLQotCWlmIChhYi0+aW9faGVhZCkgewotCQlkYmcoImJhcHI6ICBJTyBSZXNvdXJjZXMgYWRkIG9uIFBDSSAweCV4XG4iLCBhYi0+YnVzKTsKLQkJc3RhdHVzID0gcGNpZWhwcm1fYWRkX3Jlc291cmNlcyAoJmN0cmwtPmlvX2hlYWQsIGFiLT5pb19oZWFkKTsKLQkJaWYgKHBjaWVocHJtX2RlbGV0ZV9yZXNvdXJjZXMgKCZhYi0+aW9faGVhZCwgY3RybC0+aW9faGVhZCkpCi0JCQl3YXJuKCJiYXByOiAgY2Fubm90IHN1YiBJTyBSZXNvdXJjZSBvbiBQQ0kgMHgleFxuIiwgYWItPmJ1cyk7Ci0JCWlmIChzdGF0dXMpIHsKLQkJCWVycigiYmFwcjogIElPIFJlc291cmNlIGFkZCBvbiBQQ0kgMHgleDogZmFpbD0weCV4XG4iLCBhYi0+YnVzLCBzdGF0dXMpOwotCQkJcmV0dXJuIHN0YXR1czsKLQkJfQotCX0gZWxzZQotCQlpbmZvKCJiYXByOiAgTm8gIElPIFJlc291cmNlIG9uIFBDSSAweCV4LlxuIiwgYWItPmJ1cyk7Ci0KLQlpZiAoYWItPm1lbV9oZWFkKSB7Ci0JCWRiZygiYmFwcjogIE1FTSBSZXNvdXJjZXMgYWRkIG9uIFBDSSAweCV4XG4iLCBhYi0+YnVzKTsKLQkJc3RhdHVzID0gcGNpZWhwcm1fYWRkX3Jlc291cmNlcyAoJmN0cmwtPm1lbV9oZWFkLCBhYi0+bWVtX2hlYWQpOwotCQlpZiAocGNpZWhwcm1fZGVsZXRlX3Jlc291cmNlcyAoJmFiLT5tZW1faGVhZCwgY3RybC0+bWVtX2hlYWQpKQotCQkJd2FybigiYmFwcjogIGNhbm5vdCBzdWIgTUVNIFJlc291cmNlIG9uIFBDSSAweCV4XG4iLCBhYi0+YnVzKTsKLQkJaWYgKHN0YXR1cykgewotCQkJZXJyKCJiYXByOiAgTUVNIFJlc291cmNlIGFkZCBvbiBQQ0kgMHgleDogZmFpbD0weCV4XG4iLCBhYi0+YnVzLCBzdGF0dXMpOwotCQkJcmV0dXJuIHN0YXR1czsKLQkJfQotCX0gZWxzZQotCQlpbmZvKCJiYXByOiAgTm8gTUVNIFJlc291cmNlIG9uIFBDSSAweCV4LlxuIiwgYWItPmJ1cyk7Ci0KLQlpZiAoYWItPnBfbWVtX2hlYWQpIHsKLQkJZGJnKCJiYXByOiAgUE1FTSBSZXNvdXJjZXMgYWRkIG9uIFBDSSAweCV4XG4iLCBhYi0+YnVzKTsKLQkJc3RhdHVzID0gcGNpZWhwcm1fYWRkX3Jlc291cmNlcyAoJmN0cmwtPnBfbWVtX2hlYWQsIGFiLT5wX21lbV9oZWFkKTsKLQkJaWYgKHBjaWVocHJtX2RlbGV0ZV9yZXNvdXJjZXMgKCZhYi0+cF9tZW1faGVhZCwgY3RybC0+cF9tZW1faGVhZCkpCi0JCQl3YXJuKCJiYXByOiAgY2Fubm90IHN1YiBQTUVNIFJlc291cmNlIG9uIFBDSSAweCV4XG4iLCBhYi0+YnVzKTsKLQkJaWYgKHN0YXR1cykgewotCQkJZXJyKCJiYXByOiAgUE1FTSBSZXNvdXJjZSBhZGQgb24gUENJIDB4JXg6IGZhaWw9MHgleFxuIiwgYWItPmJ1cywgc3RhdHVzKTsKLQkJCXJldHVybiBzdGF0dXM7Ci0JCX0KLQl9IGVsc2UKLQkJaW5mbygiYmFwcjogIE5vIFBNRU0gUmVzb3VyY2Ugb24gUENJIDB4JXguXG4iLCBhYi0+YnVzKTsKLQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLXN0YXRpYyBpbnQgbm9fcGNpX3Jlc291cmNlcyggc3RydWN0IGFjcGlfYnJpZGdlICphYikKLXsKLQlyZXR1cm4gIShhYi0+cF9tZW1faGVhZCB8fCBhYi0+bWVtX2hlYWQgfHwgYWItPmlvX2hlYWQgfHwgYWItPmJ1c19oZWFkKTsKLX0KLQotc3RhdGljIGludCBmaW5kX3BjaV9icmlkZ2VfcmVzb3VyY2VzICgKLQlzdHJ1Y3QgY29udHJvbGxlciAqY3RybCwKLQlzdHJ1Y3QgYWNwaV9icmlkZ2UgKmFiCi0JKQotewotCWludAlyYyA9IDA7Ci0Jc3RydWN0IHBjaV9mdW5jIGZ1bmM7Ci0KLQltZW1zZXQoJmZ1bmMsIDAsIHNpemVvZihzdHJ1Y3QgcGNpX2Z1bmMpKTsKLQotCWZ1bmMuYnVzID0gYWItPnBidXM7Ci0JZnVuYy5kZXZpY2UgPSBhYi0+cGRldmljZTsKLQlmdW5jLmZ1bmN0aW9uID0gYWItPnBmdW5jdGlvbjsKLQlmdW5jLmlzX2FfYm9hcmQgPSAxOwotCi0JLyogR2V0IHVzZWQgcmVzb3VyY2VzIGZvciB0aGlzIFBDSSBicmlkZ2UgKi8KLQlyYyA9IHBjaWVocF9zYXZlX3VzZWRfcmVzb3VyY2VzIChjdHJsLCAmZnVuYywgIURJU0FCTEVfQ0FSRCk7Ci0KLQlhYi0+aW9faGVhZCA9IGZ1bmMuaW9faGVhZDsKLQlhYi0+bWVtX2hlYWQgPSBmdW5jLm1lbV9oZWFkOwotCWFiLT5wX21lbV9oZWFkID0gZnVuYy5wX21lbV9oZWFkOwotCWFiLT5idXNfaGVhZCA9IGZ1bmMuYnVzX2hlYWQ7Ci0JaWYgKGFiLT5idXNfaGVhZCkKLQkJcGNpZWhwcm1fZGVsZXRlX3Jlc291cmNlKCZhYi0+YnVzX2hlYWQsIGN0cmwtPnBjaV9kZXYtPnN1Ym9yZGluYXRlLT5udW1iZXIsIDEpOwotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGdldF9wY2lfcmVzb3VyY2VzX2Zyb21fYnJpZGdlKAotCXN0cnVjdCBjb250cm9sbGVyICpjdHJsLAotCXN0cnVjdCBhY3BpX2JyaWRnZSAqYWIKLQkpCi17Ci0JaW50CXJjID0gMDsKLQotCWRiZygiZ3JmYjogIEdldCBSZXNvdXJjZXMgZm9yIFBDSSAweCV4IGZyb20gYWN0dWFsIFBDSSBicmlkZ2UgMHgleC5cbiIsIGN0cmwtPmJ1cywgYWItPmJ1cyk7Ci0KLQlyYyA9IGZpbmRfcGNpX2JyaWRnZV9yZXNvdXJjZXMgKGN0cmwsIGFiKTsKLQotCXBjaWVocF9yZXNvdXJjZV9zb3J0X2FuZF9jb21iaW5lKCZhYi0+YnVzX2hlYWQpOwotCXBjaWVocF9yZXNvdXJjZV9zb3J0X2FuZF9jb21iaW5lKCZhYi0+aW9faGVhZCk7Ci0JcGNpZWhwX3Jlc291cmNlX3NvcnRfYW5kX2NvbWJpbmUoJmFiLT5tZW1faGVhZCk7Ci0JcGNpZWhwX3Jlc291cmNlX3NvcnRfYW5kX2NvbWJpbmUoJmFiLT5wX21lbV9oZWFkKTsKLQotCXBjaWVocHJtX2FkZF9yZXNvdXJjZXMgKCZhYi0+dGJ1c19oZWFkLCBhYi0+YnVzX2hlYWQpOwotCXBjaWVocHJtX2FkZF9yZXNvdXJjZXMgKCZhYi0+dGlvX2hlYWQsIGFiLT5pb19oZWFkKTsKLQlwY2llaHBybV9hZGRfcmVzb3VyY2VzICgmYWItPnRtZW1faGVhZCwgYWItPm1lbV9oZWFkKTsKLQlwY2llaHBybV9hZGRfcmVzb3VyY2VzICgmYWItPnRwX21lbV9oZWFkLCBhYi0+cF9tZW1faGVhZCk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZ2V0X3BjaV9yZXNvdXJjZXMoCi0Jc3RydWN0IGNvbnRyb2xsZXIJKmN0cmwsCi0Jc3RydWN0IGFjcGlfYnJpZGdlCSphYgotCSkKLXsKLQlpbnQJcmMgPSAwOwotCi0JaWYgKG5vX3BjaV9yZXNvdXJjZXMoYWIpKSB7Ci0JCWRiZygic3BicjpQQ0kgMHgleCBoYXMgbm8gcmVzb3VyY2VzLiBHZXQgcGFyZW50IHJlc291cmNlcy5cbiIsIGFiLT5idXMpOwotCQlyYyA9IGdldF9wY2lfcmVzb3VyY2VzX2Zyb21fYnJpZGdlKGN0cmwsIGFiKTsKLQl9Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLS8qCi0gKiBHZXQgcmVzb3VyY2VzIGZvciB0aGlzIGN0cmwuCi0gKiAgMS4gZ2V0IHRvdGFsIHJlc291cmNlcyBmcm9tIEFDUEkgX0NSUyBvciBicmlkZ2UgKHRoaXMgY3RybCkKLSAqICAyLiBmaW5kIHVzZWQgcmVzb3VyY2VzIG9mIGV4aXN0aW5nIGFkYXB0ZXJzCi0gKgkzLiBzdWJ0cmFjdCB1c2VkIHJlc291cmNlcyBmcm9tIHRvdGFsIHJlc291cmNlcwotICovCi1pbnQgcGNpZWhwcm1fZmluZF9hdmFpbGFibGVfcmVzb3VyY2VzKCBzdHJ1Y3QgY29udHJvbGxlciAqY3RybCkKLXsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBhY3BpX2JyaWRnZQkqYWI7Ci0KLQlhYiA9IGZpbmRfYWNwaV9icmlkZ2VfYnlfYnVzKGFjcGlfYnJpZGdlc19oZWFkLCBjdHJsLT5zZWcsIGN0cmwtPnBjaV9kZXYtPnN1Ym9yZGluYXRlLT5udW1iZXIpOwotCWlmICghYWIpIHsKLQkJZXJyKCJwZmFyOmNhbm5vdCBsb2NhdGUgYWNwaSBicmlkZ2Ugb2YgUENJIDB4JXguXG4iLCBjdHJsLT5wY2lfZGV2LT5zdWJvcmRpbmF0ZS0+bnVtYmVyKTsKLQkJcmV0dXJuIC0xOwotCX0KLQlpZiAobm9fcGNpX3Jlc291cmNlcyhhYikpIHsKLQkJcmMgPSBnZXRfcGNpX3Jlc291cmNlcyhjdHJsLCBhYik7Ci0JCWlmIChyYykgewotCQkJZXJyKCJwZmFyOmNhbm5vdCBnZXQgcGNpIHJlc291cmNlcyBvZiBQQ0kgMHgleC5cbiIsIGN0cmwtPnBjaV9kZXYtPnN1Ym9yZGluYXRlLT5udW1iZXIpOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0JfQotCi0JcmMgPSBiaW5kX3BjaV9yZXNvdXJjZXMoY3RybCwgYWIpOwotCWRiZygicGZhcjpwcmUtQmluZCBQQ0kgMHgleCBDdHJsIFJlc291cmNlIER1bXBcbiIsIGN0cmwtPnBjaV9kZXYtPnN1Ym9yZGluYXRlLT5udW1iZXIpOwotCXBjaWVocHJtX2R1bXBfY3RybF9yZXMoY3RybCk7Ci0KLQliaW5kX3BjaV9yZXNvdXJjZXNfdG9fc2xvdHMgKGN0cmwpOwotCi0JZGJnKCJwZmFyOnBvc3QtQmluZCBQQ0kgMHgleCBDdHJsIFJlc291cmNlIER1bXBcbiIsIGN0cmwtPnBjaV9kZXYtPnN1Ym9yZGluYXRlLT5udW1iZXIpOwotCXBjaWVocHJtX2R1bXBfY3RybF9yZXMoY3RybCk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLWludCBwY2llaHBybV9zZXRfaHBwKAotCXN0cnVjdCBjb250cm9sbGVyICpjdHJsLAotCXN0cnVjdCBwY2lfZnVuYyAqZnVuYywKLQl1OAljYXJkX3R5cGUKLQkpCi17Ci0Jc3RydWN0IGFjcGlfYnJpZGdlCSphYjsKLQlzdHJ1Y3QgcGNpX2J1cyBscGNpX2J1cywgKnBjaV9idXM7Ci0JaW50CQkJCXJjID0gMDsKLQl1bnNpZ25lZCBpbnQJZGV2Zm47Ci0JdTgJCQkJY2xzPSAweDA4OwkvKiBkZWZhdWx0IGNhY2hlIGxpbmUgc2l6ZQkqLwotCXU4CQkJCWx0ID0gMHg0MDsJLyogZGVmYXVsdCBsYXRlbmN5IHRpbWVyCSovCi0JdTgJCQkJZXAgPSAwOwotCXU4CQkJCWVzID0gMDsKLQotCW1lbWNweSgmbHBjaV9idXMsIGN0cmwtPnBjaV9idXMsIHNpemVvZihscGNpX2J1cykpOwotCXBjaV9idXMgPSAmbHBjaV9idXM7Ci0JcGNpX2J1cy0+bnVtYmVyID0gZnVuYy0+YnVzOwotCWRldmZuID0gUENJX0RFVkZOKGZ1bmMtPmRldmljZSwgZnVuYy0+ZnVuY3Rpb24pOwotCi0JYWIgPSBmaW5kX2FjcGlfYnJpZGdlX2J5X2J1cyhhY3BpX2JyaWRnZXNfaGVhZCwgY3RybC0+c2VnLCBjdHJsLT5idXMpOwotCi0JaWYgKGFiKSB7Ci0JCWlmIChhYi0+X2hwcCkgewotCQkJbHQgID0gKHU4KWFiLT5faHBwLT5sYXRlbmN5X3RpbWVyOwotCQkJY2xzID0gKHU4KWFiLT5faHBwLT5jYWNoZV9saW5lX3NpemU7Ci0JCQllcCAgPSAodTgpYWItPl9ocHAtPmVuYWJsZV9wZXJyOwotCQkJZXMgID0gKHU4KWFiLT5faHBwLT5lbmFibGVfc2VycjsKLQkJfSBlbHNlCi0JCQlkYmcoIl9ocHA6IG5vIF9ocHAgZm9yIEIvRC9GPSUjeC8lI3gvJSN4LiB1c2UgZGVmYXVsdCB2YWx1ZVxuIiwgZnVuYy0+YnVzLCBmdW5jLT5kZXZpY2UsIGZ1bmMtPmZ1bmN0aW9uKTsKLQl9IGVsc2UKLQkJZGJnKCJfaHBwOiBubyBhY3BpIGJyaWRnZSBmb3IgQi9EL0YgPSAlI3gvJSN4LyUjeC4gdXNlIGRlZmF1bHQgdmFsdWVcbiIsIGZ1bmMtPmJ1cywgZnVuYy0+ZGV2aWNlLCBmdW5jLT5mdW5jdGlvbik7Ci0KLQotCWlmIChjYXJkX3R5cGUgPT0gUENJX0hFQURFUl9UWVBFX0JSSURHRSkgewotCQkvKiBzZXQgc3Vib3JkaW5hdGUgTGF0ZW5jeSBUaW1lciAqLwotCQlyYyB8PSBwY2lfYnVzX3dyaXRlX2NvbmZpZ19ieXRlKHBjaV9idXMsIGRldmZuLCBQQ0lfU0VDX0xBVEVOQ1lfVElNRVIsIGx0KTsKLQl9Ci0KLQkvKiBzZXQgYmFzZSBMYXRlbmN5IFRpbWVyICovCi0JcmMgfD0gcGNpX2J1c193cml0ZV9jb25maWdfYnl0ZShwY2lfYnVzLCBkZXZmbiwgUENJX0xBVEVOQ1lfVElNRVIsIGx0KTsKLQlkYmcoIiAgc2V0IGxhdGVuY3kgdGltZXIgID0weCUwMng6ICV4XG4iLCBsdCwgcmMpOwotCi0JcmMgfD0gcGNpX2J1c193cml0ZV9jb25maWdfYnl0ZShwY2lfYnVzLCBkZXZmbiwgUENJX0NBQ0hFX0xJTkVfU0laRSwgY2xzKTsKLQlkYmcoIiAgc2V0IGNhY2hlX2xpbmVfc2l6ZT0weCUwMng6ICV4XG4iLCBjbHMsIHJjKTsKLQotCXJldHVybiByYzsKLX0KLQotdm9pZCBwY2llaHBybV9lbmFibGVfY2FyZCgKLQlzdHJ1Y3QgY29udHJvbGxlciAqY3RybCwKLQlzdHJ1Y3QgcGNpX2Z1bmMgKmZ1bmMsCi0JdTggY2FyZF90eXBlKQotewotCXUxNiBjb21tYW5kLCBjbWQsIGJjb21tYW5kLCBiY21kOwotCXN0cnVjdCBwY2lfYnVzIGxwY2lfYnVzLCAqcGNpX2J1czsKLQlzdHJ1Y3QgYWNwaV9icmlkZ2UJKmFiOwotCXVuc2lnbmVkIGludCBkZXZmbjsKLQlpbnQgcmM7Ci0KLQltZW1jcHkoJmxwY2lfYnVzLCBjdHJsLT5wY2lfYnVzLCBzaXplb2YobHBjaV9idXMpKTsKLQlwY2lfYnVzID0gJmxwY2lfYnVzOwotCXBjaV9idXMtPm51bWJlciA9IGZ1bmMtPmJ1czsKLQlkZXZmbiA9IFBDSV9ERVZGTihmdW5jLT5kZXZpY2UsIGZ1bmMtPmZ1bmN0aW9uKTsKLQotCXJjID0gcGNpX2J1c19yZWFkX2NvbmZpZ193b3JkKHBjaV9idXMsIGRldmZuLCBQQ0lfQ09NTUFORCwgJmNtZCk7Ci0KLQlpZiAoY2FyZF90eXBlID09IFBDSV9IRUFERVJfVFlQRV9CUklER0UpIHsKLQkJcmMgPSBwY2lfYnVzX3JlYWRfY29uZmlnX3dvcmQocGNpX2J1cywgZGV2Zm4sIFBDSV9CUklER0VfQ09OVFJPTCwgJmJjbWQpOwotCX0KLQotCWNvbW1hbmQgID0gY21kIHwgUENJX0NPTU1BTkRfTUFTVEVSIHwgUENJX0NPTU1BTkRfSU5WQUxJREFURQotCQl8IFBDSV9DT01NQU5EX0lPIHwgUENJX0NPTU1BTkRfTUVNT1JZOwotCWJjb21tYW5kICA9IGJjbWQgfCBQQ0lfQlJJREdFX0NUTF9OT19JU0E7Ci0KLQlhYiA9IGZpbmRfYWNwaV9icmlkZ2VfYnlfYnVzKGFjcGlfYnJpZGdlc19oZWFkLCBjdHJsLT5zZWcsIGN0cmwtPmJ1cyk7Ci0JaWYgKGFiKSB7Ci0JCWlmIChhYi0+X2hwcCkgewotCQkJaWYgKGFiLT5faHBwLT5lbmFibGVfcGVycikgewotCQkJCWNvbW1hbmQgfD0gUENJX0NPTU1BTkRfUEFSSVRZOwotCQkJCWJjb21tYW5kIHw9IFBDSV9CUklER0VfQ1RMX1BBUklUWTsKLQkJCX0gZWxzZSB7Ci0JCQkJY29tbWFuZCAmPSB+UENJX0NPTU1BTkRfUEFSSVRZOwotCQkJCWJjb21tYW5kICY9IH5QQ0lfQlJJREdFX0NUTF9QQVJJVFk7Ci0JCQl9Ci0JCQlpZiAoYWItPl9ocHAtPmVuYWJsZV9zZXJyKSB7Ci0JCQkJY29tbWFuZCB8PSBQQ0lfQ09NTUFORF9TRVJSOwotCQkJCWJjb21tYW5kIHw9IFBDSV9CUklER0VfQ1RMX1NFUlI7Ci0JCQl9IGVsc2UgewotCQkJCWNvbW1hbmQgJj0gflBDSV9DT01NQU5EX1NFUlI7Ci0JCQkJYmNvbW1hbmQgJj0gflBDSV9CUklER0VfQ1RMX1NFUlI7Ci0JCQl9Ci0JCX0gZWxzZQotCQkJZGJnKCJubyBfaHBwIGZvciBCL0QvRiA9ICUjeC8lI3gvJSN4LlxuIiwgZnVuYy0+YnVzLCBmdW5jLT5kZXZpY2UsIGZ1bmMtPmZ1bmN0aW9uKTsKLQl9IGVsc2UKLQkJZGJnKCJubyBhY3BpIGJyaWRnZSBmb3IgQi9EL0YgPSAlI3gvJSN4LyUjeC5cbiIsIGZ1bmMtPmJ1cywgZnVuYy0+ZGV2aWNlLCBmdW5jLT5mdW5jdGlvbik7Ci0KLQlpZiAoY29tbWFuZCAhPSBjbWQpIHsKLQkJcmMgPSBwY2lfYnVzX3dyaXRlX2NvbmZpZ193b3JkKHBjaV9idXMsIGRldmZuLCBQQ0lfQ09NTUFORCwgY29tbWFuZCk7Ci0JfQotCWlmICgoY2FyZF90eXBlID09IFBDSV9IRUFERVJfVFlQRV9CUklER0UpICYmIChiY29tbWFuZCAhPSBiY21kKSkgewotCQlyYyA9IHBjaV9idXNfd3JpdGVfY29uZmlnX3dvcmQocGNpX2J1cywgZGV2Zm4sIFBDSV9CUklER0VfQ09OVFJPTCwgYmNvbW1hbmQpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwcm1fbm9uYWNwaS5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBybV9ub25hY3BpLmMKaW5kZXggNzZjNzI3Yy4uMjkxODBkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBybV9ub25hY3BpLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBybV9ub25hY3BpLmMKQEAgLTI3LDQ3OSArMjcsMjEgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotCi0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpZmRlZiBDT05GSUdfSUE2NAotI2luY2x1ZGUgPGFzbS9pb3NhcGljLmg+Ci0jZW5kaWYKLQogI2luY2x1ZGUgInBjaWVocC5oIgotI2luY2x1ZGUgInBjaWVocHJtLmgiCi0jaW5jbHVkZSAicGNpZWhwcm1fbm9uYWNwaS5oIgogCi0KLXZvaWQgcGNpZWhwcm1fY2xlYW51cCh2b2lkKQordm9pZCBwY2llaHBfZ2V0X2hwX3BhcmFtc19mcm9tX2Zpcm13YXJlKHN0cnVjdCBwY2lfZGV2ICpkZXYsCisJCXN0cnVjdCBob3RwbHVnX3BhcmFtcyAqaHBwKQogewogCXJldHVybjsKIH0KIAotaW50IHBjaWVocHJtX3ByaW50X3BpcnQodm9pZCkKK2ludCBwY2llaHBfZ2V0X2hwX2h3X2NvbnRyb2xfZnJvbV9maXJtd2FyZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCXJldHVybiAwOwogfQotCi1pbnQgcGNpZWhwcm1fZ2V0X3BoeXNpY2FsX3Nsb3RfbnVtYmVyKHN0cnVjdCBjb250cm9sbGVyICpjdHJsLCB1MzIgKnN1biwgdTggYnVzbnVtLCB1OCBkZXZudW0pCi17Ci0KLQkqc3VuID0gKHU4KSAoY3RybC0+Zmlyc3Rfc2xvdCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIHZvaWQgcHJpbnRfcGNpX3Jlc291cmNlICggc3RydWN0IHBjaV9yZXNvdXJjZQkqYXByaCkKLXsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlCSpyZXM7Ci0KLQlmb3IgKHJlcyA9IGFwcmg7IHJlczsgcmVzID0gcmVzLT5uZXh0KQotCQlkYmcoIiAgICAgICAgYmFzZT0gMHgleCBsZW5ndGg9IDB4JXhcbiIsIHJlcy0+YmFzZSwgcmVzLT5sZW5ndGgpOwotfQotCi0KLXN0YXRpYyB2b2lkIHBocHJtX2R1bXBfZnVuY19yZXMoIHN0cnVjdCBwY2lfZnVuYyAqZnVuKQotewotCXN0cnVjdCBwY2lfZnVuYyAqZnVuYyA9IGZ1bjsKLQotCWlmIChmdW5jLT5idXNfaGVhZCkgewotCQlkYmcoIjogICAgQlVTIFJlc291cmNlczpcbiIpOwotCQlwcmludF9wY2lfcmVzb3VyY2UgKGZ1bmMtPmJ1c19oZWFkKTsKLQl9Ci0JaWYgKGZ1bmMtPmlvX2hlYWQpIHsKLQkJZGJnKCI6ICAgIElPIFJlc291cmNlczpcbiIpOwotCQlwcmludF9wY2lfcmVzb3VyY2UgKGZ1bmMtPmlvX2hlYWQpOwotCX0KLQlpZiAoZnVuYy0+bWVtX2hlYWQpIHsKLQkJZGJnKCI6ICAgIE1FTSBSZXNvdXJjZXM6XG4iKTsKLQkJcHJpbnRfcGNpX3Jlc291cmNlIChmdW5jLT5tZW1faGVhZCk7Ci0JfQotCWlmIChmdW5jLT5wX21lbV9oZWFkKSB7Ci0JCWRiZygiOiAgICBQTUVNIFJlc291cmNlczpcbiIpOwotCQlwcmludF9wY2lfcmVzb3VyY2UgKGZ1bmMtPnBfbWVtX2hlYWQpOwotCX0KLX0KLQotc3RhdGljIGludCBwaHBybV9nZXRfdXNlZF9yZXNvdXJjZXMgKAotCXN0cnVjdCBjb250cm9sbGVyICpjdHJsLAotCXN0cnVjdCBwY2lfZnVuYyAqZnVuYwotCSkKLXsKLQlyZXR1cm4gcGNpZWhwX3NhdmVfdXNlZF9yZXNvdXJjZXMgKGN0cmwsIGZ1bmMsICFESVNBQkxFX0NBUkQpOwotfQotCi1zdGF0aWMgaW50IHBocHJtX2RlbGV0ZV9yZXNvdXJjZSgKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICoqYXByaCwKLQl1bG9uZyBiYXNlLAotCXVsb25nIHNpemUpCi17Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqcmVzOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKnByZXZub2RlOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKnNwbGl0X25vZGU7Ci0JdWxvbmcgdGJhc2U7Ci0KLQlwY2llaHBfcmVzb3VyY2Vfc29ydF9hbmRfY29tYmluZShhcHJoKTsKLQotCWZvciAocmVzID0gKmFwcmg7IHJlczsgcmVzID0gcmVzLT5uZXh0KSB7Ci0JCWlmIChyZXMtPmJhc2UgPiBiYXNlKQotCQkJY29udGludWU7Ci0KLQkJaWYgKChyZXMtPmJhc2UgKyByZXMtPmxlbmd0aCkgPCAoYmFzZSArIHNpemUpKQotCQkJY29udGludWU7Ci0KLQkJaWYgKHJlcy0+YmFzZSA8IGJhc2UpIHsKLQkJCXRiYXNlID0gYmFzZTsKLQotCQkJaWYgKChyZXMtPmxlbmd0aCAtICh0YmFzZSAtIHJlcy0+YmFzZSkpIDwgc2l6ZSkKLQkJCQljb250aW51ZTsKLQotCQkJc3BsaXRfbm9kZSA9IChzdHJ1Y3QgcGNpX3Jlc291cmNlICopIGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2lfcmVzb3VyY2UpLCBHRlBfS0VSTkVMKTsKLQkJCWlmICghc3BsaXRfbm9kZSkKLQkJCQlyZXR1cm4gLUVOT01FTTsKLQotCQkJc3BsaXRfbm9kZS0+YmFzZSA9IHJlcy0+YmFzZTsKLQkJCXNwbGl0X25vZGUtPmxlbmd0aCA9IHRiYXNlIC0gcmVzLT5iYXNlOwotCQkJcmVzLT5iYXNlID0gdGJhc2U7Ci0JCQlyZXMtPmxlbmd0aCAtPSBzcGxpdF9ub2RlLT5sZW5ndGg7Ci0KLQkJCXNwbGl0X25vZGUtPm5leHQgPSByZXMtPm5leHQ7Ci0JCQlyZXMtPm5leHQgPSBzcGxpdF9ub2RlOwotCQl9Ci0KLQkJaWYgKHJlcy0+bGVuZ3RoID49IHNpemUpIHsKLQkJCXNwbGl0X25vZGUgPSAoc3RydWN0IHBjaV9yZXNvdXJjZSopIGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2lfcmVzb3VyY2UpLCBHRlBfS0VSTkVMKTsKLQkJCWlmICghc3BsaXRfbm9kZSkKLQkJCQlyZXR1cm4gLUVOT01FTTsKLQotCQkJc3BsaXRfbm9kZS0+YmFzZSA9IHJlcy0+YmFzZSArIHNpemU7Ci0JCQlzcGxpdF9ub2RlLT5sZW5ndGggPSByZXMtPmxlbmd0aCAtIHNpemU7Ci0JCQlyZXMtPmxlbmd0aCA9IHNpemU7Ci0KLQkJCXNwbGl0X25vZGUtPm5leHQgPSByZXMtPm5leHQ7Ci0JCQlyZXMtPm5leHQgPSBzcGxpdF9ub2RlOwotCQl9Ci0KLQkJaWYgKCphcHJoID09IHJlcykgewotCQkJKmFwcmggPSByZXMtPm5leHQ7Ci0JCX0gZWxzZSB7Ci0JCQlwcmV2bm9kZSA9ICphcHJoOwotCQkJd2hpbGUgKHByZXZub2RlLT5uZXh0ICE9IHJlcykKLQkJCQlwcmV2bm9kZSA9IHByZXZub2RlLT5uZXh0OwotCi0JCQlwcmV2bm9kZS0+bmV4dCA9IHJlcy0+bmV4dDsKLQkJfQotCQlyZXMtPm5leHQgPSBOVUxMOwotCQlrZnJlZShyZXMpOwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgaW50IHBocHJtX2RlbGV0ZV9yZXNvdXJjZXMoCi0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqKmFwcmgsCi0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqdGhpcwotCSkKLXsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICpyZXM7Ci0KLQlmb3IgKHJlcyA9IHRoaXM7IHJlczsgcmVzID0gcmVzLT5uZXh0KQotCQlwaHBybV9kZWxldGVfcmVzb3VyY2UoYXByaCwgcmVzLT5iYXNlLCByZXMtPmxlbmd0aCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgaW50IGNvbmZpZ3VyZV9leGlzdGluZ19mdW5jdGlvbigKLQlzdHJ1Y3QgY29udHJvbGxlciAqY3RybCwKLQlzdHJ1Y3QgcGNpX2Z1bmMgKmZ1bmMKLQkpCi17Ci0JaW50IHJjOwotCi0JLyogc2VlIGhvdyBtdWNoIHJlc291cmNlcyB0aGUgZnVuYyBoYXMgdXNlZC4gKi8KLQlyYyA9IHBocHJtX2dldF91c2VkX3Jlc291cmNlcyAoY3RybCwgZnVuYyk7Ci0KLQlpZiAoIXJjKSB7Ci0JCS8qIHN1YnRyYWN0IHRoZSByZXNvdXJjZXMgdXNlZCBieSB0aGUgZnVuYyBmcm9tIGN0cmwgcmVzb3VyY2VzICovCi0JCXJjICA9IHBocHJtX2RlbGV0ZV9yZXNvdXJjZXMgKCZjdHJsLT5idXNfaGVhZCwgZnVuYy0+YnVzX2hlYWQpOwotCQlyYyB8PSBwaHBybV9kZWxldGVfcmVzb3VyY2VzICgmY3RybC0+aW9faGVhZCwgZnVuYy0+aW9faGVhZCk7Ci0JCXJjIHw9IHBocHJtX2RlbGV0ZV9yZXNvdXJjZXMgKCZjdHJsLT5tZW1faGVhZCwgZnVuYy0+bWVtX2hlYWQpOwotCQlyYyB8PSBwaHBybV9kZWxldGVfcmVzb3VyY2VzICgmY3RybC0+cF9tZW1faGVhZCwgZnVuYy0+cF9tZW1faGVhZCk7Ci0JCWlmIChyYykKLQkJCXdhcm4oImFDRUY6IGNhbm5vdCBkZWwgdXNlZCByZXNvdXJjZXNcbiIpOwotCX0gZWxzZQotCQllcnIoImFDRUY6IGNhbm5vdCBnZXQgdXNlZCByZXNvdXJjZXNcbiIpOwotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IHBjaWVocHJtX2RlbGV0ZV9yZXNvdXJjZSgKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICoqYXByaCwKLQl1bG9uZyBiYXNlLAotCXVsb25nIHNpemUpCi17Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqcmVzOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKnByZXZub2RlOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKnNwbGl0X25vZGU7Ci0JdWxvbmcgdGJhc2U7Ci0KLQlwY2llaHBfcmVzb3VyY2Vfc29ydF9hbmRfY29tYmluZShhcHJoKTsKLQotCWZvciAocmVzID0gKmFwcmg7IHJlczsgcmVzID0gcmVzLT5uZXh0KSB7Ci0JCWlmIChyZXMtPmJhc2UgPiBiYXNlKQotCQkJY29udGludWU7Ci0KLQkJaWYgKChyZXMtPmJhc2UgKyByZXMtPmxlbmd0aCkgPCAoYmFzZSArIHNpemUpKQotCQkJY29udGludWU7Ci0KLQkJaWYgKHJlcy0+YmFzZSA8IGJhc2UpIHsKLQkJCXRiYXNlID0gYmFzZTsKLQotCQkJaWYgKChyZXMtPmxlbmd0aCAtICh0YmFzZSAtIHJlcy0+YmFzZSkpIDwgc2l6ZSkKLQkJCQljb250aW51ZTsKLQotCQkJc3BsaXRfbm9kZSA9IChzdHJ1Y3QgcGNpX3Jlc291cmNlICopIGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2lfcmVzb3VyY2UpLCBHRlBfS0VSTkVMKTsKLQkJCWlmICghc3BsaXRfbm9kZSkKLQkJCQlyZXR1cm4gLUVOT01FTTsKLQotCQkJc3BsaXRfbm9kZS0+YmFzZSA9IHJlcy0+YmFzZTsKLQkJCXNwbGl0X25vZGUtPmxlbmd0aCA9IHRiYXNlIC0gcmVzLT5iYXNlOwotCQkJcmVzLT5iYXNlID0gdGJhc2U7Ci0JCQlyZXMtPmxlbmd0aCAtPSBzcGxpdF9ub2RlLT5sZW5ndGg7Ci0KLQkJCXNwbGl0X25vZGUtPm5leHQgPSByZXMtPm5leHQ7Ci0JCQlyZXMtPm5leHQgPSBzcGxpdF9ub2RlOwotCQl9Ci0KLQkJaWYgKHJlcy0+bGVuZ3RoID49IHNpemUpIHsKLQkJCXNwbGl0X25vZGUgPSAoc3RydWN0IHBjaV9yZXNvdXJjZSopIGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2lfcmVzb3VyY2UpLCBHRlBfS0VSTkVMKTsKLQkJCWlmICghc3BsaXRfbm9kZSkKLQkJCQlyZXR1cm4gLUVOT01FTTsKLQotCQkJc3BsaXRfbm9kZS0+YmFzZSA9IHJlcy0+YmFzZSArIHNpemU7Ci0JCQlzcGxpdF9ub2RlLT5sZW5ndGggPSByZXMtPmxlbmd0aCAtIHNpemU7Ci0JCQlyZXMtPmxlbmd0aCA9IHNpemU7Ci0KLQkJCXNwbGl0X25vZGUtPm5leHQgPSByZXMtPm5leHQ7Ci0JCQlyZXMtPm5leHQgPSBzcGxpdF9ub2RlOwotCQl9Ci0KLQkJaWYgKCphcHJoID09IHJlcykgewotCQkJKmFwcmggPSByZXMtPm5leHQ7Ci0JCX0gZWxzZSB7Ci0JCQlwcmV2bm9kZSA9ICphcHJoOwotCQkJd2hpbGUgKHByZXZub2RlLT5uZXh0ICE9IHJlcykKLQkJCQlwcmV2bm9kZSA9IHByZXZub2RlLT5uZXh0OwotCi0JCQlwcmV2bm9kZS0+bmV4dCA9IHJlcy0+bmV4dDsKLQkJfQotCQlyZXMtPm5leHQgPSBOVUxMOwotCQlrZnJlZShyZXMpOwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBiaW5kX3BjaV9yZXNvdXJjZXNfdG9fc2xvdHMgKCBzdHJ1Y3QgY29udHJvbGxlciAqY3RybCkKLXsKLQlzdHJ1Y3QgcGNpX2Z1bmMgKmZ1bmMsIG5ld19mdW5jOwotCWludCBidXNuID0gY3RybC0+c2xvdF9idXM7Ci0JaW50IGRldm4sIGZ1bm47Ci0JdTMyCXZpZDsKLQotCWZvciAoZGV2biA9IDA7IGRldm4gPCAzMjsgZGV2bisrKSB7Ci0JCWZvciAoZnVubiA9IDA7IGZ1bm4gPCA4OyBmdW5uKyspIHsKLQkJCS8qCi0JCQlpZiAoZGV2biA9PSBjdHJsLT5kZXZpY2UgJiYgZnVubiA9PSBjdHJsLT5mdW5jdGlvbikKLQkJCQljb250aW51ZTsKLQkJCSovCi0JCQkvKiBmaW5kIG91dCBpZiB0aGlzIGVudHJ5IGlzIGZvciBhbiBvY2N1cGllZCBzbG90ICovCi0JCQl2aWQgPSAweEZGRkZGRkZGOwotCi0JCQlwY2lfYnVzX3JlYWRfY29uZmlnX2R3b3JkKGN0cmwtPnBjaV9kZXYtPnN1Ym9yZGluYXRlLCBQQ0lfREVWRk4oZGV2biwgZnVubiksIFBDSV9WRU5ET1JfSUQsICZ2aWQpOwotCi0JCQlpZiAodmlkICE9IDB4RkZGRkZGRkYpIHsKLQkJCQlkYmcoIiVzOiB2aWQgPSAleCBidXMgJXggZGV2ICV4IGZ1biAleFxuIiwgX19GVU5DVElPTl9fLAotCQkJCXZpZCwgYnVzbiwgZGV2biwgZnVubik7Ci0JCQkJZnVuYyA9IHBjaWVocF9zbG90X2ZpbmQoYnVzbiwgZGV2biwgZnVubik7Ci0JCQkJZGJnKCIlczogZnVuYyA9ICVwXG4iLCBfX0ZVTkNUSU9OX18sZnVuYyk7Ci0JCQkJaWYgKCFmdW5jKSB7Ci0JCQkJCW1lbXNldCgmbmV3X2Z1bmMsIDAsIHNpemVvZihzdHJ1Y3QgcGNpX2Z1bmMpKTsKLQkJCQkJbmV3X2Z1bmMuYnVzID0gYnVzbjsKLQkJCQkJbmV3X2Z1bmMuZGV2aWNlID0gZGV2bjsKLQkJCQkJbmV3X2Z1bmMuZnVuY3Rpb24gPSBmdW5uOwotCQkJCQluZXdfZnVuYy5pc19hX2JvYXJkID0gMTsKLQkJCQkJY29uZmlndXJlX2V4aXN0aW5nX2Z1bmN0aW9uKGN0cmwsICZuZXdfZnVuYyk7Ci0JCQkJCXBocHJtX2R1bXBfZnVuY19yZXMoJm5ld19mdW5jKTsKLQkJCQl9IGVsc2UgewotCQkJCQljb25maWd1cmVfZXhpc3RpbmdfZnVuY3Rpb24oY3RybCwgZnVuYyk7Ci0JCQkJCXBocHJtX2R1bXBfZnVuY19yZXMoZnVuYyk7Ci0JCQkJfQotCQkJCWRiZygiYUNDRjpleGlzdGluZyBQQ0kgMHgleCBGdW5jIFJlc291cmNlRHVtcFxuIiwgY3RybC0+YnVzKTsKLQkJCX0KLQkJfQotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBwaHBybV9kdW1wX2N0cmxfcmVzKCBzdHJ1Y3QgY29udHJvbGxlciAqY3RscikKLXsKLQlzdHJ1Y3QgY29udHJvbGxlciAqY3RybCA9IGN0bHI7Ci0KLQlpZiAoY3RybC0+YnVzX2hlYWQpIHsKLQkJZGJnKCI6ICAgIEJVUyBSZXNvdXJjZXM6XG4iKTsKLQkJcHJpbnRfcGNpX3Jlc291cmNlIChjdHJsLT5idXNfaGVhZCk7Ci0JfQotCWlmIChjdHJsLT5pb19oZWFkKSB7Ci0JCWRiZygiOiAgICBJTyBSZXNvdXJjZXM6XG4iKTsKLQkJcHJpbnRfcGNpX3Jlc291cmNlIChjdHJsLT5pb19oZWFkKTsKLQl9Ci0JaWYgKGN0cmwtPm1lbV9oZWFkKSB7Ci0JCWRiZygiOiAgICBNRU0gUmVzb3VyY2VzOlxuIik7Ci0JCXByaW50X3BjaV9yZXNvdXJjZSAoY3RybC0+bWVtX2hlYWQpOwotCX0KLQlpZiAoY3RybC0+cF9tZW1faGVhZCkgewotCQlkYmcoIjogICAgUE1FTSBSZXNvdXJjZXM6XG4iKTsKLQkJcHJpbnRfcGNpX3Jlc291cmNlIChjdHJsLT5wX21lbV9oZWFkKTsKLQl9Ci19Ci0KLS8qCi0gKiBwaHBybV9maW5kX2F2YWlsYWJsZV9yZXNvdXJjZXMKLSAqCi0gKiAgRmluZHMgYXZhaWxhYmxlIG1lbW9yeSwgSU8sIGFuZCBJUlEgcmVzb3VyY2VzIGZvciBwcm9ncmFtbWluZwotICogIGRldmljZXMgd2hpY2ggbWF5IGJlIGFkZGVkIHRvIHRoZSBzeXN0ZW0KLSAqICB0aGlzIGZ1bmN0aW9uIGlzIGZvciBob3QgcGx1ZyBBREQhCi0gKgotICogcmV0dXJucyAwIGlmIHN1Y2Nlc3MKLSAqLwotaW50IHBjaWVocHJtX2ZpbmRfYXZhaWxhYmxlX3Jlc291cmNlcyhzdHJ1Y3QgY29udHJvbGxlciAqY3RybCkKLXsKLQlzdHJ1Y3QgcGNpX2Z1bmMgZnVuYzsKLQl1MzIgcmM7Ci0KLQltZW1zZXQoJmZ1bmMsIDAsIHNpemVvZihzdHJ1Y3QgcGNpX2Z1bmMpKTsKLQotCWZ1bmMuYnVzID0gY3RybC0+YnVzOwotCWZ1bmMuZGV2aWNlID0gY3RybC0+ZGV2aWNlOwotCWZ1bmMuZnVuY3Rpb24gPSBjdHJsLT5mdW5jdGlvbjsKLQlmdW5jLmlzX2FfYm9hcmQgPSAxOwotCi0JLyogR2V0IHJlc291cmNlcyBmb3IgdGhpcyBQQ0kgYnJpZGdlICovCi0JcmMgPSBwY2llaHBfc2F2ZV91c2VkX3Jlc291cmNlcyAoY3RybCwgJmZ1bmMsICFESVNBQkxFX0NBUkQpOwotCWRiZygiJXM6IHBjaWVocF9zYXZlX3VzZWRfcmVzb3VyY2VzIHJjID0gJWRcbiIsIF9fRlVOQ1RJT05fXywgcmMpOwotCi0JaWYgKGZ1bmMubWVtX2hlYWQpCi0JCWZ1bmMubWVtX2hlYWQtPm5leHQgPSBjdHJsLT5tZW1faGVhZDsKLQljdHJsLT5tZW1faGVhZCA9IGZ1bmMubWVtX2hlYWQ7Ci0KLQlpZiAoZnVuYy5wX21lbV9oZWFkKQotCQlmdW5jLnBfbWVtX2hlYWQtPm5leHQgPSBjdHJsLT5wX21lbV9oZWFkOwotCWN0cmwtPnBfbWVtX2hlYWQgPSBmdW5jLnBfbWVtX2hlYWQ7Ci0KLQlpZiAoZnVuYy5pb19oZWFkKQotCQlmdW5jLmlvX2hlYWQtPm5leHQgPSBjdHJsLT5pb19oZWFkOwotCWN0cmwtPmlvX2hlYWQgPSBmdW5jLmlvX2hlYWQ7Ci0KLQlpZihmdW5jLmJ1c19oZWFkKQotCQlmdW5jLmJ1c19oZWFkLT5uZXh0ID0gY3RybC0+YnVzX2hlYWQ7Ci0JY3RybC0+YnVzX2hlYWQgPSBmdW5jLmJ1c19oZWFkOwotCi0JaWYgKGN0cmwtPmJ1c19oZWFkKQotCQlwY2llaHBybV9kZWxldGVfcmVzb3VyY2UoJmN0cmwtPmJ1c19oZWFkLCBjdHJsLT5wY2lfZGV2LT5zdWJvcmRpbmF0ZS0+bnVtYmVyLCAxKTsKLQkKLQlkYmcoIiVzOnByZS1CaW5kIFBDSSAweCV4IEN0cmwgUmVzb3VyY2UgRHVtcFxuIiwgX19GVU5DVElPTl9fLCBjdHJsLT5idXMpOwotCXBocHJtX2R1bXBfY3RybF9yZXMoY3RybCk7Ci0KLQlkYmcoIiVzOiBiZWZvcmUgYmluZF9wY2lfcmVzb3VyY2VzX3RvIHNsb3RzXG4iLCBfX0ZVTkNUSU9OX18pOwotCi0JYmluZF9wY2lfcmVzb3VyY2VzX3RvX3Nsb3RzIChjdHJsKTsKLQotCWRiZygiJXM6cG9zdC1CaW5kIFBDSSAweCV4IEN0cmwgUmVzb3VyY2UgRHVtcFxuIiwgX19GVU5DVElPTl9fLCBjdHJsLT5idXMpOwotCXBocHJtX2R1bXBfY3RybF9yZXMoY3RybCk7Ci0KLQlyZXR1cm4gKHJjKTsKLX0KLQotaW50IHBjaWVocHJtX3NldF9ocHAoCi0Jc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwsCi0Jc3RydWN0IHBjaV9mdW5jICpmdW5jLAotCXU4CWNhcmRfdHlwZSkKLXsKLQl1MzIgcmM7Ci0JdTggdGVtcF9ieXRlOwotCXN0cnVjdCBwY2lfYnVzIGxwY2lfYnVzLCAqcGNpX2J1czsKLQl1bnNpZ25lZCBpbnQJZGV2Zm47Ci0JbWVtY3B5KCZscGNpX2J1cywgY3RybC0+cGNpX2J1cywgc2l6ZW9mKGxwY2lfYnVzKSk7Ci0JcGNpX2J1cyA9ICZscGNpX2J1czsKLQlwY2lfYnVzLT5udW1iZXIgPSBmdW5jLT5idXM7Ci0JZGV2Zm4gPSBQQ0lfREVWRk4oZnVuYy0+ZGV2aWNlLCBmdW5jLT5mdW5jdGlvbik7Ci0KLQl0ZW1wX2J5dGUgPSAweDQwOwkvKiBoYXJkIGNvZGVkIHZhbHVlIGZvciBMVCAqLwotCWlmIChjYXJkX3R5cGUgPT0gUENJX0hFQURFUl9UWVBFX0JSSURHRSkgewotCQkvKiBzZXQgc3Vib3JkaW5hdGUgTGF0ZW5jeSBUaW1lciAqLwotCQlyYyA9IHBjaV9idXNfd3JpdGVfY29uZmlnX2J5dGUocGNpX2J1cywgZGV2Zm4sIFBDSV9TRUNfTEFURU5DWV9USU1FUiwgdGVtcF9ieXRlKTsKLQotCQlpZiAocmMpIHsKLQkJCWRiZygiJXM6IHNldCBzZWNvbmRhcnkgTFQgZXJyb3IuIGI6ZDpmKCUwMng6JTAyeDolMDJ4KVxuIiwgX19GVU5DVElPTl9fLCAKLQkJCQlmdW5jLT5idXMsIGZ1bmMtPmRldmljZSwgZnVuYy0+ZnVuY3Rpb24pOwotCQkJcmV0dXJuIHJjOwotCQl9Ci0JfQotCi0JLyogc2V0IGJhc2UgTGF0ZW5jeSBUaW1lciAqLwotCXJjID0gcGNpX2J1c193cml0ZV9jb25maWdfYnl0ZShwY2lfYnVzLCBkZXZmbiwgUENJX0xBVEVOQ1lfVElNRVIsIHRlbXBfYnl0ZSk7Ci0KLQlpZiAocmMpIHsKLQkJZGJnKCIlczogc2V0IExUIGVycm9yLiBiOmQ6ZiglMDJ4OiUwMng6JTAyeClcbiIsIF9fRlVOQ1RJT05fXywgZnVuYy0+YnVzLCBmdW5jLT5kZXZpY2UsIGZ1bmMtPmZ1bmN0aW9uKTsKLQkJcmV0dXJuIHJjOwotCX0KLQotCS8qIHNldCBDYWNoZSBMaW5lIHNpemUgKi8KLQl0ZW1wX2J5dGUgPSAweDA4OwkvKiBoYXJkIGNvZGVkIHZhbHVlIGZvciBDTFMgKi8KLQotCXJjID0gcGNpX2J1c193cml0ZV9jb25maWdfYnl0ZShwY2lfYnVzLCBkZXZmbiwgUENJX0NBQ0hFX0xJTkVfU0laRSwgdGVtcF9ieXRlKTsKLQotCWlmIChyYykgewotCQlkYmcoIiVzOiBzZXQgQ0xTIGVycm9yLiBiOmQ6ZiglMDJ4OiUwMng6JTAyeClcbiIsIF9fRlVOQ1RJT05fXywgZnVuYy0+YnVzLCBmdW5jLT5kZXZpY2UsIGZ1bmMtPmZ1bmN0aW9uKTsKLQl9Ci0KLQkvKiBzZXQgZW5hYmxlX3BlcnIgKi8KLQkvKiBzZXQgZW5hYmxlX3NlcnIgKi8KLQotCXJldHVybiByYzsKLX0KLQotdm9pZCBwY2llaHBybV9lbmFibGVfY2FyZCgKLQlzdHJ1Y3QgY29udHJvbGxlciAqY3RybCwKLQlzdHJ1Y3QgcGNpX2Z1bmMgKmZ1bmMsCi0JdTggY2FyZF90eXBlKQotewotCXUxNiBjb21tYW5kLCBiY29tbWFuZDsKLQlzdHJ1Y3QgcGNpX2J1cyBscGNpX2J1cywgKnBjaV9idXM7Ci0JdW5zaWduZWQgaW50IGRldmZuOwotCWludCByYzsKLQotCW1lbWNweSgmbHBjaV9idXMsIGN0cmwtPnBjaV9idXMsIHNpemVvZihscGNpX2J1cykpOwotCXBjaV9idXMgPSAmbHBjaV9idXM7Ci0JcGNpX2J1cy0+bnVtYmVyID0gZnVuYy0+YnVzOwotCWRldmZuID0gUENJX0RFVkZOKGZ1bmMtPmRldmljZSwgZnVuYy0+ZnVuY3Rpb24pOwotCi0JcmMgPSBwY2lfYnVzX3JlYWRfY29uZmlnX3dvcmQocGNpX2J1cywgZGV2Zm4sIFBDSV9DT01NQU5ELCAmY29tbWFuZCk7Ci0KLQljb21tYW5kIHw9IFBDSV9DT01NQU5EX1BBUklUWSB8IFBDSV9DT01NQU5EX1NFUlIKLQkJfCBQQ0lfQ09NTUFORF9NQVNURVIgfCBQQ0lfQ09NTUFORF9JTlZBTElEQVRFCi0JCXwgUENJX0NPTU1BTkRfSU8gfCBQQ0lfQ09NTUFORF9NRU1PUlk7Ci0KLQlyYyA9IHBjaV9idXNfd3JpdGVfY29uZmlnX3dvcmQocGNpX2J1cywgZGV2Zm4sIFBDSV9DT01NQU5ELCBjb21tYW5kKTsKLQotCWlmIChjYXJkX3R5cGUgPT0gUENJX0hFQURFUl9UWVBFX0JSSURHRSkgewotCi0JCXJjID0gcGNpX2J1c19yZWFkX2NvbmZpZ193b3JkKHBjaV9idXMsIGRldmZuLCBQQ0lfQlJJREdFX0NPTlRST0wsICZiY29tbWFuZCk7Ci0KLQkJYmNvbW1hbmQgfD0gUENJX0JSSURHRV9DVExfUEFSSVRZIHwgUENJX0JSSURHRV9DVExfU0VSUgotCQkJfCBQQ0lfQlJJREdFX0NUTF9OT19JU0E7Ci0KLQkJcmMgPSBwY2lfYnVzX3dyaXRlX2NvbmZpZ193b3JkKHBjaV9idXMsIGRldmZuLCBQQ0lfQlJJREdFX0NPTlRST0wsIGJjb21tYW5kKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgbGVnYWN5X3BjaWVocHJtX2luaXRfcGNpKHZvaWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBwY2llaHBybV9pbml0KGVudW0gcGhwX2N0bHJfdHlwZSBjdHJsX3R5cGUpCi17Ci0JaW50IHJldHZhbDsKLQotCXN3aXRjaCAoY3RybF90eXBlKSB7Ci0JY2FzZSBQQ0k6Ci0JCXJldHZhbCA9IGxlZ2FjeV9wY2llaHBybV9pbml0X3BjaSgpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR2YWwgPSAtRU5PREVWOwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gcmV0dmFsOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBybV9ub25hY3BpLmggYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocHJtX25vbmFjcGkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjEwNjAzYi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocHJtX25vbmFjcGkuaAorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qCi0gKiBQQ0lFSFBSTSBOT05BQ1BJOiBQSFAgUmVzb3VyY2UgTWFuYWdlciBmb3IgTm9uLUFDUEkvTGVnYWN5IHBsYXRmb3JtCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk1LDIwMDEgQ29tcGFxIENvbXB1dGVyIENvcnBvcmF0aW9uCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEgR3JlZyBLcm9haC1IYXJ0bWFuIChncmVnQGtyb2FoLmNvbSkKLSAqIENvcHlyaWdodCAoQykgMjAwMSBJQk0gQ29ycC4KLSAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA0IEludGVsIENvcnBvcmF0aW9uCi0gKgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdAotICogeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgotICogTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUKLSAqIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqCi0gKiBTZW5kIGZlZWRiYWNrIHRvIDxncmVnQGtyb2FoLmNvbT4sIDxrcmlzdGVuLmMuYWNjYXJkaUBpbnRlbC5jb20+Ci0gKgotICovCi0KLSNpZm5kZWYgX1BDSUVIUFJNX05PTkFDUElfSF8KLSNkZWZpbmUgX1BDSUVIUFJNX05PTkFDUElfSF8KLQotc3RydWN0IGlycV9pbmZvIHsKLQl1OCBidXMsIGRldmZuOwkJLyogYnVzLCBkZXZpY2UgYW5kIGZ1bmN0aW9uICovCi0Jc3RydWN0IHsKLQkJdTggbGluazsJLyogSVJRIGxpbmUgSUQsIGNoaXBzZXQgZGVwZW5kZW50LCAwPW5vdCByb3V0ZWQgKi8KLQkJdTE2IGJpdG1hcDsJLyogQXZhaWxhYmxlIElSUXMgKi8KLQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBpcnFbNF07Ci0JdTggc2xvdDsJCS8qIHNsb3QgbnVtYmVyLCAwPW9uYm9hcmQgKi8KLQl1OCByZnU7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IGlycV9yb3V0aW5nX3RhYmxlIHsKLQl1MzIgc2lnbmF0dXJlOwkJLyogUElSUV9TSUdOQVRVUkUgc2hvdWxkIGJlIGhlcmUgKi8KLQl1MTYgdmVyc2lvbjsJCS8qIFBJUlFfVkVSU0lPTiAqLwotCXUxNiBzaXplOwkJCS8qIFRhYmxlIHNpemUgaW4gYnl0ZXMgKi8KLQl1OCBydHJfYnVzLCBydHJfZGV2Zm47CS8qIFdoZXJlIHRoZSBpbnRlcnJ1cHQgcm91dGVyIGxpZXMgKi8KLQl1MTYgZXhjbHVzaXZlX2lycXM7CS8qIElSUXMgZGV2b3RlZCBleGNsdXNpdmVseSB0byBQQ0kgdXNhZ2UgKi8KLQl1MTYgcnRyX3ZlbmRvciwgcnRyX2RldmljZTsJLyogVmVuZG9yIGFuZCBkZXZpY2UgSUQgb2YgaW50ZXJydXB0IHJvdXRlciAqLwotCXUzMiBtaW5pcG9ydF9kYXRhOwkvKiBDcmFwICovCi0JdTggcmZ1WzExXTsKLQl1OCBjaGVja3N1bTsJCS8qIE1vZHVsbyAyNTYgY2hlY2tzdW0gbXVzdCBnaXZlIHplcm8gKi8KLQlzdHJ1Y3QgaXJxX2luZm8gc2xvdHNbMF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotI2VuZGlmCQkJCS8qIF9QQ0lFSFBSTV9OT05BQ1BJX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3JwYWRscGFyX2NvcmUuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcnBhZGxwYXJfY29yZS5jCmluZGV4IGZjYjY2YjkuLmNjMDM2MDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcnBhZGxwYXJfY29yZS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcnBhZGxwYXJfY29yZS5jCkBAIC0xMzQsNDMgKzEzNCw2IEBACiAJCXJwYWRscGFyX2NsYWltX29uZV9idXMoY2hpbGRfYnVzKTsKIH0KIAotc3RhdGljIGludCBwY2lfYWRkX3NlY29uZGFyeV9idXMoc3RydWN0IGRldmljZV9ub2RlICpkbiwKLQkJc3RydWN0IHBjaV9kZXYgKmJyaWRnZV9kZXYpCi17Ci0Jc3RydWN0IHBjaV9kbiAqcGRuID0gZG4tPmRhdGE7Ci0Jc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlID0gcGRuLT5waGI7Ci0Jc3RydWN0IHBjaV9idXMgKmNoaWxkOwotCXU4IHNlY19idXNubzsKLQotCS8qIEdldCBidXNubyBvZiBkb3duc3RyZWFtIGJ1cyAqLwotCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGJyaWRnZV9kZXYsIFBDSV9TRUNPTkRBUllfQlVTLCAmc2VjX2J1c25vKTsKLQotCS8qIEFsbG9jYXRlIGFuZCBhZGQgdG8gY2hpbGRyZW4gb2YgYnJpZGdlX2Rldi0+YnVzICovCi0JY2hpbGQgPSBwY2lfYWRkX25ld19idXMoYnJpZGdlX2Rldi0+YnVzLCBicmlkZ2VfZGV2LCBzZWNfYnVzbm8pOwotCWlmICghY2hpbGQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogY291bGQgbm90IGFkZCBzZWNvbmRhcnkgYnVzXG4iLCBfX0ZVTkNUSU9OX18pOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlzcHJpbnRmKGNoaWxkLT5uYW1lLCAiUENJIEJ1cyAjJTAyeCIsIGNoaWxkLT5udW1iZXIpOwotCi0JLyogRml4dXAgc3Vib3JkaW5hdGUgYnJpZGdlIGJhc2VzIGFuZCByZXNvdXJjZXMgKi8KLQlwY2liaW9zX2ZpeHVwX2J1cyhjaGlsZCk7Ci0KLQkvKiBDbGFpbSBuZXcgYnVzIHJlc291cmNlcyAqLwotCXJwYWRscGFyX2NsYWltX29uZV9idXMoYnJpZGdlX2Rldi0+YnVzKTsKLQotCWlmIChob3NlLT5sYXN0X2J1c25vIDwgY2hpbGQtPm51bWJlcikKLQkJaG9zZS0+bGFzdF9idXNubyA9IGNoaWxkLT5udW1iZXI7Ci0KLQlwZG4tPmJ1c3N1Ym5vID0gY2hpbGQtPm51bWJlcjsKLQotCS8qIGlvcmVtYXAoKSBmb3IgY2hpbGQgYnVzLCB3aGljaCBtYXkgb3IgbWF5IG5vdCBzdWNjZWVkICovCi0JcmVtYXBfYnVzX3JhbmdlKGNoaWxkKTsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgc3RydWN0IHBjaV9kZXYgKmRscGFyX2ZpbmRfbmV3X2RldihzdHJ1Y3QgcGNpX2J1cyAqcGFyZW50LAogCQkJCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldl9kbikKIHsKQEAgLTE4OCwyOSArMTUxLDQxIEBACiBzdGF0aWMgc3RydWN0IHBjaV9kZXYgKmRscGFyX3BjaV9hZGRfYnVzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4pCiB7CiAJc3RydWN0IHBjaV9kbiAqcGRuID0gZG4tPmRhdGE7Ci0Jc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlID0gcGRuLT5waGI7CisJc3RydWN0IHBjaV9jb250cm9sbGVyICpwaGIgPSBwZG4tPnBoYjsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gTlVMTDsKIAotCS8qIFNjYW4gcGhiIGJ1cyBmb3IgRUFEUyBkZXZpY2UsIGFkZGluZyBuZXcgb25lIHRvIGJ1cy0+ZGV2aWNlcyAqLwotCWlmICghcGNpX3NjYW5fc2luZ2xlX2RldmljZShob3NlLT5idXMsIHBkbi0+ZGV2Zm4pKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGZvdW5kIG5vIGRldmljZSBvbiBidXNcbiIsIF9fRlVOQ1RJT05fXyk7CisJcnBhcGhwX2VlaF9pbml0X25vZGVzKGRuKTsKKwkvKiBBZGQgRUFEUyBkZXZpY2UgdG8gUEhCIGJ1cywgYWRkaW5nIG5ldyBlbnRyeSB0byBidXMtPmRldmljZXMgKi8KKwlkZXYgPSBvZl9jcmVhdGVfcGNpX2RldihkbiwgcGhiLT5idXMsIHBkbi0+ZGV2Zm4pOworCWlmICghZGV2KSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBjcmVhdGUgcGNpIGRldiBmb3IgJXNcbiIsCisJCQkJX19GVU5DVElPTl9fLCBkbi0+ZnVsbF9uYW1lKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCisJaWYgKGRldi0+aGRyX3R5cGUgPT0gUENJX0hFQURFUl9UWVBFX0JSSURHRSB8fAorCSAgICBkZXYtPmhkcl90eXBlID09IFBDSV9IRUFERVJfVFlQRV9DQVJEQlVTKQorCQlvZl9zY2FuX3BjaV9icmlkZ2UoZG4sIGRldik7CisKKwlycGFwaHBfaW5pdF9uZXdfZGV2cyhkZXYtPnN1Ym9yZGluYXRlKTsKKworCS8qIENsYWltIG5ldyBidXMgcmVzb3VyY2VzICovCisJcnBhZGxwYXJfY2xhaW1fb25lX2J1cyhkZXYtPmJ1cyk7CisKKwkvKiBpb3JlbWFwKCkgZm9yIGNoaWxkIGJ1cywgd2hpY2ggbWF5IG9yIG1heSBub3Qgc3VjY2VlZCAqLworCSh2b2lkKSByZW1hcF9idXNfcmFuZ2UoZGV2LT5idXMpOworCiAJLyogQWRkIG5ldyBkZXZpY2VzIHRvIGdsb2JhbCBsaXN0cy4gIFJlZ2lzdGVyIGluIHByb2MsIHN5c2ZzLiAqLwotCXBjaV9idXNfYWRkX2RldmljZXMoaG9zZS0+YnVzKTsKKwlwY2lfYnVzX2FkZF9kZXZpY2VzKHBoYi0+YnVzKTsKIAogCS8qIENvbmZpcm0gbmV3IGJyaWRnZSBkZXYgd2FzIGNyZWF0ZWQgKi8KLQlkZXYgPSBkbHBhcl9maW5kX25ld19kZXYoaG9zZS0+YnVzLCBkbik7CisJZGV2ID0gZGxwYXJfZmluZF9uZXdfZGV2KHBoYi0+YnVzLCBkbik7CiAJaWYgKGRldikgewogCQlpZiAoZGV2LT5oZHJfdHlwZSAhPSBQQ0lfSEVBREVSX1RZUEVfQlJJREdFKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmV4cGVjdGVkIGhlYWRlciB0eXBlICVkXG4iLAogCQkJCV9fRlVOQ1RJT05fXywgZGV2LT5oZHJfdHlwZSk7CiAJCQlyZXR1cm4gTlVMTDsKIAkJfQotCi0JCWlmIChwY2lfYWRkX3NlY29uZGFyeV9idXMoZG4sIGRldikpCi0JCQlyZXR1cm4gTlVMTDsKIAl9CiAKIAlyZXR1cm4gZGV2OwpAQCAtMjE5LDcgKzE5NCw2IEBACiBzdGF0aWMgaW50IGRscGFyX2FkZF9wY2lfc2xvdChjaGFyICpkcmNfbmFtZSwgc3RydWN0IGRldmljZV9ub2RlICpkbikKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2OwotCWludCByYzsKIAogCWlmIChycGFwaHBfZmluZF9wY2lfYnVzKGRuKSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0yMzIsMTUgKzIwNiw2IEBACiAJCXJldHVybiAtRUlPOwogCX0KIAotCWlmIChkbi0+Y2hpbGQpIHsKLQkJcmMgPSBycGFwaHBfY29uZmlnX3BjaV9hZGFwdGVyKGRldi0+c3Vib3JkaW5hdGUpOwotCQlpZiAocmMgPCAwKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmFibGUgdG8gZW5hYmxlIHNsb3QgJXNcbiIsCi0JCQkJX19GVU5DVElPTl9fLCBkcmNfbmFtZSk7Ci0JCQlyZXR1cm4gLUVJTzsKLQkJfQotCX0KLQogCS8qIEFkZCBob3RwbHVnIHNsb3QgKi8KIAlpZiAocnBhcGhwX2FkZF9zbG90KGRuKSkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmFibGUgdG8gYWRkIGhvdHBsdWcgc2xvdCAlc1xuIiwKQEAgLTMwNiw3ICsyNzEsNyBAQAogewogCXN0cnVjdCBwY2lfY29udHJvbGxlciAqcGhiOwogCi0JaWYgKFBDSV9ETihkbiktPnBoYikgeworCWlmIChQQ0lfRE4oZG4pICYmIFBDSV9ETihkbiktPnBoYikgewogCQkvKiBQSEIgYWxyZWFkeSBleGlzdHMgKi8KIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtNDM1LDYgKzQwMCw4IEBACiAJCQkJX19GVU5DVElPTl9fLCBkcmNfbmFtZSk7CiAJCQlyZXR1cm4gLUVJTzsKIAkJfQorCX0gZWxzZSB7CisJCXJwYXBocF91bmNvbmZpZ19wY2lfYWRhcHRlcihidXMpOwogCX0KIAogCWlmICh1bm1hcF9idXNfcmFuZ2UoYnVzKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9ycGFwaHAuaCBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcnBhcGhwLmgKaW5kZXggNzFlYTVmOS4uNTdlYTcxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9ycGFwaHAuaAorKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3JwYXBocC5oCkBAIC05Myw2ICs5Myw4IEBACiBleHRlcm4gaW50IHJwYXBocF9lbmFibGVfcGNpX3Nsb3Qoc3RydWN0IHNsb3QgKnNsb3QpOwogZXh0ZXJuIGludCByZWdpc3Rlcl9wY2lfc2xvdChzdHJ1Y3Qgc2xvdCAqc2xvdCk7CiBleHRlcm4gaW50IHJwYXBocF9nZXRfcGNpX2FkYXB0ZXJfc3RhdHVzKHN0cnVjdCBzbG90ICpzbG90LCBpbnQgaXNfaW5pdCwgdTggKiB2YWx1ZSk7CitleHRlcm4gdm9pZCBycGFwaHBfaW5pdF9uZXdfZGV2cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKTsKK2V4dGVybiB2b2lkIHJwYXBocF9lZWhfaW5pdF9ub2RlcyhzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuKTsKIAogZXh0ZXJuIGludCBycGFwaHBfY29uZmlnX3BjaV9hZGFwdGVyKHN0cnVjdCBwY2lfYnVzICpidXMpOwogZXh0ZXJuIGludCBycGFwaHBfdW5jb25maWdfcGNpX2FkYXB0ZXIoc3RydWN0IHBjaV9idXMgKmJ1cyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3JwYXBocF9wY2kuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcnBhcGhwX3BjaS5jCmluZGV4IGY3YzEyZDcuLmE3ODU5YTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcnBhcGhwX3BjaS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcnBhcGhwX3BjaS5jCkBAIC0xNTQsOCArMTU0LDcgQEAKIH0KIAogLyogTXVzdCBiZSBjYWxsZWQgYmVmb3JlIHBjaV9idXNfYWRkX2RldmljZXMgKi8KLXN0YXRpYyB2b2lkIAotcnBhcGhwX2ZpeHVwX25ld19wY2lfZGV2aWNlcyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBpbnQgZml4X2J1cykKK3ZvaWQgcnBhcGhwX2ZpeHVwX25ld19wY2lfZGV2aWNlcyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBpbnQgZml4X2J1cykKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2OwogCkBAIC0xODQsNiArMTgzLDIwIEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBycGFwaHBfZWVoX2FkZF9idXNfZGV2aWNlKHN0cnVjdCBwY2lfYnVzICpidXMpCit7CisJc3RydWN0IHBjaV9kZXYgKmRldjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmYnVzLT5kZXZpY2VzLCBidXNfbGlzdCkgeworCQllZWhfYWRkX2RldmljZV9sYXRlKGRldik7CisJCWlmIChkZXYtPmhkcl90eXBlID09IFBDSV9IRUFERVJfVFlQRV9CUklER0UpIHsKKwkJCXN0cnVjdCBwY2lfYnVzICpzdWJidXMgPSBkZXYtPnN1Ym9yZGluYXRlOworCQkJaWYgKHN1YmJ1cykKKwkJCQlycGFwaHBfZWVoX2FkZF9idXNfZGV2aWNlIChzdWJidXMpOworCQl9CisJfQorfQorCiBzdGF0aWMgaW50IHJwYXBocF9wY2lfY29uZmlnX2JyaWRnZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCXU4IHNlY19idXNubzsKQEAgLTIxNyw2ICsyMzAsMTMgQEAKIAlyZXR1cm4gMDsKIH0KIAordm9pZCBycGFwaHBfaW5pdF9uZXdfZGV2cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKQoreworCXJwYXBocF9maXh1cF9uZXdfcGNpX2RldmljZXMoYnVzLCAwKTsKKwlycGFwaHBfZWVoX2FkZF9idXNfZGV2aWNlKGJ1cyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChycGFwaHBfaW5pdF9uZXdfZGV2cyk7CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogIHJwYXBocF9wY2lfY29uZmlnX3Nsb3QoKSB3aWxsICBjb25maWd1cmUgYWxsIGRldmljZXMgdW5kZXIgdGhlCiAgZ2l2ZW4gc2xvdC0+ZG4gYW5kIHJldHVybiB0aGUgdGhlIGZpcnN0IHBjaV9kZXYuCkBAIC0yMzMsMzYgKzI1Myw1MSBAQAogCWlmICghZG4gfHwgIWRuLT5jaGlsZCkKIAkJcmV0dXJuIE5VTEw7CiAKLQlzbG90bm8gPSBQQ0lfU0xPVChQQ0lfRE4oZG4tPmNoaWxkKS0+ZGV2Zm4pOworCWlmIChzeXN0ZW1jZmctPnBsYXRmb3JtID09IFBMQVRGT1JNX1BTRVJJRVNfTFBBUikgeworCQlvZl9zY2FuX2J1cyhkbiwgYnVzKTsKKwkJaWYgKGxpc3RfZW1wdHkoJmJ1cy0+ZGV2aWNlcykpIHsKKwkJCWVycigiJXM6IE5vIG5ldyBkZXZpY2UgZm91bmRcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQogCi0JLyogcGNpX3NjYW5fc2xvdCBzaG91bGQgZmluZCBhbGwgY2hpbGRyZW4gKi8KLQludW0gPSBwY2lfc2Nhbl9zbG90KGJ1cywgUENJX0RFVkZOKHNsb3RubywgMCkpOwotCWlmIChudW0pIHsKLQkJcnBhcGhwX2ZpeHVwX25ld19wY2lfZGV2aWNlcyhidXMsIDEpOworCQlycGFwaHBfaW5pdF9uZXdfZGV2cyhidXMpOwogCQlwY2lfYnVzX2FkZF9kZXZpY2VzKGJ1cyk7Ci0JfQotCWlmIChsaXN0X2VtcHR5KCZidXMtPmRldmljZXMpKSB7Ci0JCWVycigiJXM6IE5vIG5ldyBkZXZpY2UgZm91bmRcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmJ1cy0+ZGV2aWNlcywgYnVzX2xpc3QpIHsKLQkJaWYgKGRldi0+aGRyX3R5cGUgPT0gUENJX0hFQURFUl9UWVBFX0JSSURHRSkKLQkJCXJwYXBocF9wY2lfY29uZmlnX2JyaWRnZShkZXYpOworCQlkZXYgPSBsaXN0X2VudHJ5KCZidXMtPmRldmljZXMsIHN0cnVjdCBwY2lfZGV2LCBidXNfbGlzdCk7CisJfSBlbHNlIHsKKwkJc2xvdG5vID0gUENJX1NMT1QoUENJX0ROKGRuLT5jaGlsZCktPmRldmZuKTsKKworCQkvKiBwY2lfc2Nhbl9zbG90IHNob3VsZCBmaW5kIGFsbCBjaGlsZHJlbiAqLworCQludW0gPSBwY2lfc2Nhbl9zbG90KGJ1cywgUENJX0RFVkZOKHNsb3RubywgMCkpOworCQlpZiAobnVtKSB7CisJCQlycGFwaHBfZml4dXBfbmV3X3BjaV9kZXZpY2VzKGJ1cywgMSk7CisJCQlwY2lfYnVzX2FkZF9kZXZpY2VzKGJ1cyk7CisJCX0KKwkJaWYgKGxpc3RfZW1wdHkoJmJ1cy0+ZGV2aWNlcykpIHsKKwkJCWVycigiJXM6IE5vIG5ldyBkZXZpY2UgZm91bmRcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmJ1cy0+ZGV2aWNlcywgYnVzX2xpc3QpIHsKKwkJCWlmIChkZXYtPmhkcl90eXBlID09IFBDSV9IRUFERVJfVFlQRV9CUklER0UpCisJCQkJcnBhcGhwX3BjaV9jb25maWdfYnJpZGdlKGRldik7CisKKwkJCXJwYXBocF9lZWhfYWRkX2J1c19kZXZpY2UoYnVzKTsKKwkJfQogCX0KIAogCXJldHVybiBkZXY7CiB9CiAKLXN0YXRpYyB2b2lkIGVuYWJsZV9lZWgoc3RydWN0IGRldmljZV9ub2RlICpkbikKK3ZvaWQgcnBhcGhwX2VlaF9pbml0X25vZGVzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4pCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpzaWI7CiAKIAlmb3IgKHNpYiA9IGRuLT5jaGlsZDsgc2liOyBzaWIgPSBzaWItPnNpYmxpbmcpIAotCQllbmFibGVfZWVoKHNpYik7CisJCXJwYXBocF9lZWhfaW5pdF9ub2RlcyhzaWIpOwogCWVlaF9hZGRfZGV2aWNlX2Vhcmx5KGRuKTsKIAlyZXR1cm47CiAJCiB9CitFWFBPUlRfU1lNQk9MX0dQTChycGFwaHBfZWVoX2luaXRfbm9kZXMpOwogCiBzdGF0aWMgdm9pZCBwcmludF9zbG90X3BjaV9mdW5jcyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKQogewpAQCAtMjg5LDcgKzMyNCw3IEBACiAJaWYgKCFkbikKIAkJZ290byBleGl0OwogCi0JZW5hYmxlX2VlaChkbik7CisJcnBhcGhwX2VlaF9pbml0X25vZGVzKGRuKTsKIAlkZXYgPSBycGFwaHBfcGNpX2NvbmZpZ19zbG90KGJ1cyk7CiAJaWYgKCFkZXYpIHsKIAkJZXJyKCIlczogY2FuJ3QgZmluZCBhbnkgZGV2aWNlcy5cbiIsIF9fRlVOQ1RJT05fXyk7CkBAIC0zMzEsNiArMzY2LDcgQEAKIAl9CiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChycGFwaHBfdW5jb25maWdfcGNpX2FkYXB0ZXIpOwogCiBzdGF0aWMgaW50IHNldHVwX3BjaV9ob3RwbHVnX3Nsb3RfaW5mbyhzdHJ1Y3Qgc2xvdCAqc2xvdCkKIHsKQEAgLTQ0NCw4ICs0ODAsOCBAQAogCQlyZXR2YWwgPSBycGFwaHBfY29uZmlnX3BjaV9hZGFwdGVyKHNsb3QtPmJ1cyk7CiAJCWlmICghcmV0dmFsKSB7CiAJCQlzbG90LT5zdGF0ZSA9IENPTkZJR1VSRUQ7Ci0JCQlkYmcoIiVzOiBQQ0kgZGV2aWNlcyBpbiBzbG90WyVzXSBoYXMgYmVlbiBjb25maWd1cmVkXG4iLCAKLQkJCQlfX0ZVTkNUSU9OX18sIHNsb3QtPm5hbWUpOworCQkJaW5mbygiJXM6IGRldmljZXMgaW4gc2xvdFslc10gY29uZmlndXJlZFxuIiwKKwkJCQkJX19GVU5DVElPTl9fLCBzbG90LT5uYW1lKTsKIAkJfSBlbHNlIHsKIAkJCXNsb3QtPnN0YXRlID0gTk9UX0NPTkZJR1VSRUQ7CiAJCQlkYmcoIiVzOiBubyBwY2lfZGV2IHN0cnVjdCBmb3IgYWRhcHRlciBpbiBzbG90WyVzXVxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwX3BjaS5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBfcGNpLmMKaW5kZXggYjhlOTVhYy4uMzgwMDliYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBfcGNpLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBfcGNpLmMKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlICIuLi9wY2kuaCIKICNpbmNsdWRlICJzaHBjaHAuaCIKIAotdm9pZCBwcm9ncmFtX2Z3X3Byb3ZpZGVkX3ZhbHVlcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQorc3RhdGljIHZvaWQgcHJvZ3JhbV9md19wcm92aWRlZF92YWx1ZXMoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAl1MTYgcGNpX2NtZCwgcGNpX2JjdGw7CiAJc3RydWN0IHBjaV9kZXYgKmNkZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9tc2kuYyBiL2RyaXZlcnMvcGNpL21zaS5jCmluZGV4IGEyMDMzNTUuLjIwMmI3NTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL21zaS5jCisrKyBiL2RyaXZlcnMvcGNpL21zaS5jCkBAIC0yMyw2ICsyMyw4IEBACiAjaW5jbHVkZSAicGNpLmgiCiAjaW5jbHVkZSAibXNpLmgiCiAKKyNkZWZpbmUgTVNJX1RBUkdFVF9DUFUJCWZpcnN0X2NwdShjcHVfb25saW5lX21hcCkKKwogc3RhdGljIERFRklORV9TUElOTE9DSyhtc2lfbG9jayk7CiBzdGF0aWMgc3RydWN0IG1zaV9kZXNjKiBtc2lfZGVzY1tOUl9JUlFTXSA9IHsgWzAgLi4uIE5SX0lSUVMtMV0gPSBOVUxMIH07CiBzdGF0aWMga21lbV9jYWNoZV90KiBtc2lfY2FjaGVwOwpAQCAtOTIsNiArOTQsNyBAQAogCXN0cnVjdCBtc2lfZGVzYyAqZW50cnk7CiAJc3RydWN0IG1zZ19hZGRyZXNzIGFkZHJlc3M7CiAJdW5zaWduZWQgaW50IGlycSA9IHZlY3RvcjsKKwl1bnNpZ25lZCBpbnQgZGVzdF9jcHUgPSBmaXJzdF9jcHUoY3B1X21hc2spOwogCiAJZW50cnkgPSAoc3RydWN0IG1zaV9kZXNjICopbXNpX2Rlc2NbdmVjdG9yXTsKIAlpZiAoIWVudHJ5IHx8ICFlbnRyeS0+ZGV2KQpAQCAtMTA4LDkgKzExMSw5IEBACiAJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChlbnRyeS0+ZGV2LCBtc2lfbG93ZXJfYWRkcmVzc19yZWcocG9zKSwKIAkJCSZhZGRyZXNzLmxvX2FkZHJlc3MudmFsdWUpOwogCQlhZGRyZXNzLmxvX2FkZHJlc3MudmFsdWUgJj0gTVNJX0FERFJFU1NfREVTVF9JRF9NQVNLOwotCQlhZGRyZXNzLmxvX2FkZHJlc3MudmFsdWUgfD0gKGNwdV9tYXNrX3RvX2FwaWNpZChjcHVfbWFzaykgPDwKLQkJCU1TSV9UQVJHRVRfQ1BVX1NISUZUKTsKLQkJZW50cnktPm1zaV9hdHRyaWIuY3VycmVudF9jcHUgPSBjcHVfbWFza190b19hcGljaWQoY3B1X21hc2spOworCQlhZGRyZXNzLmxvX2FkZHJlc3MudmFsdWUgfD0gKGNwdV9waHlzaWNhbF9pZChkZXN0X2NwdSkgPDwKKwkJCQkJCQkJCU1TSV9UQVJHRVRfQ1BVX1NISUZUKTsKKwkJZW50cnktPm1zaV9hdHRyaWIuY3VycmVudF9jcHUgPSBjcHVfcGh5c2ljYWxfaWQoZGVzdF9jcHUpOwogCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGVudHJ5LT5kZXYsIG1zaV9sb3dlcl9hZGRyZXNzX3JlZyhwb3MpLAogCQkJYWRkcmVzcy5sb19hZGRyZXNzLnZhbHVlKTsKIAkJc2V0X25hdGl2ZV9pcnFfaW5mbyhpcnEsIGNwdV9tYXNrKTsKQEAgLTEyMyw5ICsxMjYsOSBAQAogCiAJCWFkZHJlc3MubG9fYWRkcmVzcy52YWx1ZSA9IHJlYWRsKGVudHJ5LT5tYXNrX2Jhc2UgKyBvZmZzZXQpOwogCQlhZGRyZXNzLmxvX2FkZHJlc3MudmFsdWUgJj0gTVNJX0FERFJFU1NfREVTVF9JRF9NQVNLOwotCQlhZGRyZXNzLmxvX2FkZHJlc3MudmFsdWUgfD0gKGNwdV9tYXNrX3RvX2FwaWNpZChjcHVfbWFzaykgPDwKLQkJCU1TSV9UQVJHRVRfQ1BVX1NISUZUKTsKLQkJZW50cnktPm1zaV9hdHRyaWIuY3VycmVudF9jcHUgPSBjcHVfbWFza190b19hcGljaWQoY3B1X21hc2spOworCQlhZGRyZXNzLmxvX2FkZHJlc3MudmFsdWUgfD0gKGNwdV9waHlzaWNhbF9pZChkZXN0X2NwdSkgPDwKKwkJCQkJCQkJCU1TSV9UQVJHRVRfQ1BVX1NISUZUKTsKKwkJZW50cnktPm1zaV9hdHRyaWIuY3VycmVudF9jcHUgPSBjcHVfcGh5c2ljYWxfaWQoZGVzdF9jcHUpOwogCQl3cml0ZWwoYWRkcmVzcy5sb19hZGRyZXNzLnZhbHVlLCBlbnRyeS0+bWFza19iYXNlICsgb2Zmc2V0KTsKIAkJc2V0X25hdGl2ZV9pcnFfaW5mbyhpcnEsIGNwdV9tYXNrKTsKIAkJYnJlYWs7CkBAIC0yNTksMTQgKzI2MiwxNSBAQAogc3RhdGljIHZvaWQgbXNpX2FkZHJlc3NfaW5pdChzdHJ1Y3QgbXNnX2FkZHJlc3MgKm1zaV9hZGRyZXNzKQogewogCXVuc2lnbmVkIGludAlkZXN0X2lkOworCXVuc2lnbmVkIGxvbmcJZGVzdF9waHlzX2lkID0gY3B1X3BoeXNpY2FsX2lkKE1TSV9UQVJHRVRfQ1BVKTsKIAogCW1lbXNldChtc2lfYWRkcmVzcywgMCwgc2l6ZW9mKHN0cnVjdCBtc2dfYWRkcmVzcykpOwogCW1zaV9hZGRyZXNzLT5oaV9hZGRyZXNzID0gKHUzMikwOwogCWRlc3RfaWQgPSAoTVNJX0FERFJFU1NfSEVBREVSIDw8IE1TSV9BRERSRVNTX0hFQURFUl9TSElGVCk7Ci0JbXNpX2FkZHJlc3MtPmxvX2FkZHJlc3MudS5kZXN0X21vZGUgPSBNU0lfREVTVF9NT0RFOworCW1zaV9hZGRyZXNzLT5sb19hZGRyZXNzLnUuZGVzdF9tb2RlID0gTVNJX1BIWVNJQ0FMX01PREU7CiAJbXNpX2FkZHJlc3MtPmxvX2FkZHJlc3MudS5yZWRpcmVjdGlvbl9oaW50ID0gTVNJX1JFRElSRUNUSU9OX0hJTlRfTU9ERTsKIAltc2lfYWRkcmVzcy0+bG9fYWRkcmVzcy51LmRlc3RfaWQgPSBkZXN0X2lkOwotCW1zaV9hZGRyZXNzLT5sb19hZGRyZXNzLnZhbHVlIHw9IChNU0lfVEFSR0VUX0NQVSA8PCBNU0lfVEFSR0VUX0NQVV9TSElGVCk7CisJbXNpX2FkZHJlc3MtPmxvX2FkZHJlc3MudmFsdWUgfD0gKGRlc3RfcGh5c19pZCA8PCBNU0lfVEFSR0VUX0NQVV9TSElGVCk7CiB9CiAKIHN0YXRpYyBpbnQgbXNpX2ZyZWVfdmVjdG9yKHN0cnVjdCBwY2lfZGV2KiBkZXYsIGludCB2ZWN0b3IsIGludCByZWFzc2lnbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2ktYWNwaS5jIGIvZHJpdmVycy9wY2kvcGNpLWFjcGkuYwppbmRleCBlOWUzN2FiLi5hOWIwMGNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2ktYWNwaS5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaS1hY3BpLmMKQEAgLTkxLDkgKzkxLDcgQEAKIHN0YXRpYyBhY3BpX3N0YXR1cyAgCiBhY3BpX3J1bl9vc2MgKAogCWFjcGlfaGFuZGxlCWhhbmRsZSwKLQl1MzIJCWxldmVsLAotCXZvaWQJCSpjb250ZXh0LAotCXZvaWQJCSoqcmV0dmFsICkKKwl2b2lkCQkqY29udGV4dCkKIHsKIAlhY3BpX3N0YXR1cwkJc3RhdHVzOwogCXN0cnVjdCBhY3BpX29iamVjdF9saXN0CWlucHV0OwpAQCAtMTg0LDcgKzE4Miw3IEBACiAgKgogICogQXR0ZW1wdCB0byB0YWtlIGNvbnRyb2wgZnJvbSBGaXJtd2FyZSBvbiByZXF1ZXN0ZWQgY29udHJvbCBiaXRzLgogICoqLwotYWNwaV9zdGF0dXMgcGNpX29zY19jb250cm9sX3NldCh1MzIgZmxhZ3MpCithY3BpX3N0YXR1cyBwY2lfb3NjX2NvbnRyb2xfc2V0KGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIGZsYWdzKQogewogCWFjcGlfc3RhdHVzCXN0YXR1czsKIAl1MzIJCWN0cmxzZXQ7CkBAIC0xOTgsMTAgKzE5Niw3IEBACiAJCXJldHVybiBBRV9TVVBQT1JUOwogCX0KIAljdHJsc2V0X2J1ZltPU0NfQ09OVFJPTF9UWVBFXSB8PSBjdHJsc2V0OwotCXN0YXR1cyA9IGFjcGlfZ2V0X2RldmljZXMgKCBQQ0lfUk9PVF9ISURfU1RSSU5HLAotCQkJCWFjcGlfcnVuX29zYywKLQkJCQljdHJsc2V0X2J1ZiwKLQkJCQlOVUxMICk7CisJc3RhdHVzID0gYWNwaV9ydW5fb3NjKGhhbmRsZSwgY3RybHNldF9idWYpOwogCWlmIChBQ1BJX0ZBSUxVUkUgKHN0YXR1cykpIHsKIAkJY3RybHNldF9idWZbT1NDX0NPTlRST0xfVFlQRV0gJj0gfmN0cmxzZXQ7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jIGIvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jCmluZGV4IDk0ZTY4YzUuLmE5MDQ2ZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYworKysgYi9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMKQEAgLTM3LDcgKzM3LDcgQEAKICAqIEFkZHMgYSBuZXcgZHluYW1pYyBwY2kgZGV2aWNlIElEIHRvIHRoaXMgZHJpdmVyLAogICogYW5kIGNhdXNlcyB0aGUgZHJpdmVyIHRvIHByb2JlIGZvciBhbGwgZGV2aWNlcyBhZ2Fpbi4KICAqLwotc3RhdGljIGlubGluZSBzc2l6ZV90CitzdGF0aWMgc3NpemVfdAogc3RvcmVfbmV3X2lkKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcml2ZXIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBwY2lfZHluaWQgKmR5bmlkOwpAQCAtMzY0LDE1ICszNjQsMTYgQEAKIH07CiAKIC8qKgotICogcGNpX3JlZ2lzdGVyX2RyaXZlciAtIHJlZ2lzdGVyIGEgbmV3IHBjaSBkcml2ZXIKKyAqIF9fcGNpX3JlZ2lzdGVyX2RyaXZlciAtIHJlZ2lzdGVyIGEgbmV3IHBjaSBkcml2ZXIKICAqIEBkcnY6IHRoZSBkcml2ZXIgc3RydWN0dXJlIHRvIHJlZ2lzdGVyCisgKiBAb3duZXI6IG93bmVyIG1vZHVsZSBvZiBkcnYKICAqIAogICogQWRkcyB0aGUgZHJpdmVyIHN0cnVjdHVyZSB0byB0aGUgbGlzdCBvZiByZWdpc3RlcmVkIGRyaXZlcnMuCiAgKiBSZXR1cm5zIGEgbmVnYXRpdmUgdmFsdWUgb24gZXJyb3IsIG90aGVyd2lzZSAwLiAKICAqIElmIG5vIGVycm9yIG9jY3VycmVkLCB0aGUgZHJpdmVyIHJlbWFpbnMgcmVnaXN0ZXJlZCBldmVuIGlmIAogICogbm8gZGV2aWNlIHdhcyBjbGFpbWVkIGR1cmluZyByZWdpc3RyYXRpb24uCiAgKi8KLWludCBwY2lfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBwY2lfZHJpdmVyICpkcnYpCitpbnQgX19wY2lfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBwY2lfZHJpdmVyICpkcnYsIHN0cnVjdCBtb2R1bGUgKm93bmVyKQogewogCWludCBlcnJvcjsKIApAQCAtMzg5LDcgKzM5MCw3IEBACiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIldhcm5pbmc6IFBDSSBkcml2ZXIgJXMgaGFzIGEgc3RydWN0ICIKIAkJCSJkZXZpY2VfZHJpdmVyIHNodXRkb3duIG1ldGhvZCwgcGxlYXNlIHVwZGF0ZSFcbiIsCiAJCQlkcnYtPm5hbWUpOwotCWRydi0+ZHJpdmVyLm93bmVyID0gZHJ2LT5vd25lcjsKKwlkcnYtPmRyaXZlci5vd25lciA9IG93bmVyOwogCWRydi0+ZHJpdmVyLmtvYmoua3R5cGUgPSAmcGNpX2RyaXZlcl9rb2JqX3R5cGU7CiAKIAlzcGluX2xvY2tfaW5pdCgmZHJ2LT5keW5pZHMubG9jayk7CkBAIC01MjYsNyArNTI3LDcgQEAKIAogRVhQT1JUX1NZTUJPTChwY2lfbWF0Y2hfaWQpOwogRVhQT1JUX1NZTUJPTChwY2lfbWF0Y2hfZGV2aWNlKTsKLUVYUE9SVF9TWU1CT0wocGNpX3JlZ2lzdGVyX2RyaXZlcik7CitFWFBPUlRfU1lNQk9MKF9fcGNpX3JlZ2lzdGVyX2RyaXZlcik7CiBFWFBPUlRfU1lNQk9MKHBjaV91bnJlZ2lzdGVyX2RyaXZlcik7CiBFWFBPUlRfU1lNQk9MKHBjaV9kZXZfZHJpdmVyKTsKIEVYUE9SVF9TWU1CT0wocGNpX2J1c190eXBlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS5jIGIvZHJpdmVycy9wY2kvcGNpLmMKaW5kZXggZTc0ZDc1OC4uOGUyODdhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpLmMKQEAgLTYzLDExICs2MywzOCBAQAogCXJldHVybiBtYXg7CiB9CiAKK3N0YXRpYyBpbnQgX19wY2lfZmluZF9uZXh0X2NhcChzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sIHU4IHBvcywgaW50IGNhcCkKK3sKKwl1OCBpZDsKKwlpbnQgdHRsID0gNDg7CisKKwl3aGlsZSAodHRsLS0pIHsKKwkJcGNpX2J1c19yZWFkX2NvbmZpZ19ieXRlKGJ1cywgZGV2Zm4sIHBvcywgJnBvcyk7CisJCWlmIChwb3MgPCAweDQwKQorCQkJYnJlYWs7CisJCXBvcyAmPSB+MzsKKwkJcGNpX2J1c19yZWFkX2NvbmZpZ19ieXRlKGJ1cywgZGV2Zm4sIHBvcyArIFBDSV9DQVBfTElTVF9JRCwKKwkJCQkJICZpZCk7CisJCWlmIChpZCA9PSAweGZmKQorCQkJYnJlYWs7CisJCWlmIChpZCA9PSBjYXApCisJCQlyZXR1cm4gcG9zOworCQlwb3MgKz0gUENJX0NBUF9MSVNUX05FWFQ7CisJfQorCXJldHVybiAwOworfQorCitpbnQgcGNpX2ZpbmRfbmV4dF9jYXBhYmlsaXR5KHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHBvcywgaW50IGNhcCkKK3sKKwlyZXR1cm4gX19wY2lfZmluZF9uZXh0X2NhcChkZXYtPmJ1cywgZGV2LT5kZXZmbiwKKwkJCQkgICBwb3MgKyBQQ0lfQ0FQX0xJU1RfTkVYVCwgY2FwKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHBjaV9maW5kX25leHRfY2FwYWJpbGl0eSk7CisKIHN0YXRpYyBpbnQgX19wY2lfYnVzX2ZpbmRfY2FwKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwgdTggaGRyX3R5cGUsIGludCBjYXApCiB7CiAJdTE2IHN0YXR1czsKLQl1OCBwb3MsIGlkOwotCWludCB0dGwgPSA0ODsKKwl1OCBwb3M7CiAKIAlwY2lfYnVzX3JlYWRfY29uZmlnX3dvcmQoYnVzLCBkZXZmbiwgUENJX1NUQVRVUywgJnN0YXR1cyk7CiAJaWYgKCEoc3RhdHVzICYgUENJX1NUQVRVU19DQVBfTElTVCkpCkBAIC03NiwyNCArMTAzLDE1IEBACiAJc3dpdGNoIChoZHJfdHlwZSkgewogCWNhc2UgUENJX0hFQURFUl9UWVBFX05PUk1BTDoKIAljYXNlIFBDSV9IRUFERVJfVFlQRV9CUklER0U6Ci0JCXBjaV9idXNfcmVhZF9jb25maWdfYnl0ZShidXMsIGRldmZuLCBQQ0lfQ0FQQUJJTElUWV9MSVNULCAmcG9zKTsKKwkJcG9zID0gUENJX0NBUEFCSUxJVFlfTElTVDsKIAkJYnJlYWs7CiAJY2FzZSBQQ0lfSEVBREVSX1RZUEVfQ0FSREJVUzoKLQkJcGNpX2J1c19yZWFkX2NvbmZpZ19ieXRlKGJ1cywgZGV2Zm4sIFBDSV9DQl9DQVBBQklMSVRZX0xJU1QsICZwb3MpOworCQlwb3MgPSBQQ0lfQ0JfQ0FQQUJJTElUWV9MSVNUOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gMDsKIAl9Ci0Jd2hpbGUgKHR0bC0tICYmIHBvcyA+PSAweDQwKSB7Ci0JCXBvcyAmPSB+MzsKLQkJcGNpX2J1c19yZWFkX2NvbmZpZ19ieXRlKGJ1cywgZGV2Zm4sIHBvcyArIFBDSV9DQVBfTElTVF9JRCwgJmlkKTsKLQkJaWYgKGlkID09IDB4ZmYpCi0JCQlicmVhazsKLQkJaWYgKGlkID09IGNhcCkKLQkJCXJldHVybiBwb3M7Ci0JCXBjaV9idXNfcmVhZF9jb25maWdfYnl0ZShidXMsIGRldmZuLCBwb3MgKyBQQ0lfQ0FQX0xJU1RfTkVYVCwgJnBvcyk7Ci0JfQotCXJldHVybiAwOworCXJldHVybiBfX3BjaV9maW5kX25leHRfY2FwKGJ1cywgZGV2Zm4sIHBvcywgY2FwKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9xdWlya3MuYyBiL2RyaXZlcnMvcGNpL3F1aXJrcy5jCmluZGV4IDU2MjdjZTEuLjNhNGY0OWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3F1aXJrcy5jCisrKyBiL2RyaXZlcnMvcGNpL3F1aXJrcy5jCkBAIC00NjIsMTEgKzQ2MiwxMSBAQAogCiAJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCAweDcwLCAmaG0pOwogCWhtICY9IFBDSV9CQVNFX0FERFJFU1NfSU9fTUFTSzsKLQlxdWlya19pb19yZWdpb24oZGV2LCBobSwgMTI4LCBQQ0lfQlJJREdFX1JFU09VUkNFUyArIDEsICJ2dDgyYzg2OCBIVy1tb24iKTsKKwlxdWlya19pb19yZWdpb24oZGV2LCBobSwgMTI4LCBQQ0lfQlJJREdFX1JFU09VUkNFUyArIDEsICJ2dDgyYzY4NiBIVy1tb24iKTsKIAogCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIDB4OTAsICZzbWIpOwogCXNtYiAmPSBQQ0lfQkFTRV9BRERSRVNTX0lPX01BU0s7Ci0JcXVpcmtfaW9fcmVnaW9uKGRldiwgc21iLCAxNiwgUENJX0JSSURHRV9SRVNPVVJDRVMgKyAyLCAidnQ4MmM4NjggU01CIik7CisJcXVpcmtfaW9fcmVnaW9uKGRldiwgc21iLCAxNiwgUENJX0JSSURHRV9SRVNPVVJDRVMgKyAyLCAidnQ4MmM2ODYgU01CIik7CiB9CiBERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9WSUEsCVBDSV9ERVZJQ0VfSURfVklBXzgyQzY4Nl80LAlxdWlya192dDgyYzY4Nl9hY3BpICk7CiAKQEAgLTEyNDMsNiArMTI0MywyMSBAQAogfQogREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfTkVUTU9TLCBQQ0lfQU5ZX0lELCBxdWlya19uZXRtb3MpOwogCisKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBmaXh1cF9yZXYxXzUzYzgxMChzdHJ1Y3QgcGNpX2RldiogZGV2KQoreworCS8qIHJldiAxIG5jcjUzYzgxMCBjaGlwcyBkb24ndCBzZXQgdGhlIGNsYXNzIGF0IGFsbCB3aGljaCBtZWFucworCSAqIHRoZXkgZG9uJ3QgZ2V0IHRoZWlyIHJlc291cmNlcyByZW1hcHBlZC4gRml4IHRoYXQgaGVyZS4KKwkgKi8KKworCWlmIChkZXYtPmNsYXNzID09IFBDSV9DTEFTU19OT1RfREVGSU5FRCkgeworCQlwcmludGsoS0VSTl9JTkZPICJOQ1IgNTNjODEwIHJldiAxIGRldGVjdGVkLCBzZXR0aW5nIFBDSSBjbGFzcy5cbiIpOworCQlkZXYtPmNsYXNzID0gUENJX0NMQVNTX1NUT1JBR0VfU0NTSTsKKwl9Cit9CitERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9OQ1IsIFBDSV9ERVZJQ0VfSURfTkNSXzUzQzgxMCwgZml4dXBfcmV2MV81M2M4MTApOworCisKIHN0YXRpYyB2b2lkIHBjaV9kb19maXh1cHMoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IHBjaV9maXh1cCAqZiwgc3RydWN0IHBjaV9maXh1cCAqZW5kKQogewogCXdoaWxlIChmIDwgZW5kKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9LY29uZmlnIGIvZHJpdmVycy9wY21jaWEvS2NvbmZpZwppbmRleCBjY2YyMDAzLi4zMDllYjU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9LY29uZmlnCisrKyBiL2RyaXZlcnMvcGNtY2lhL0tjb25maWcKQEAgLTE1Niw3ICsxNTYsNyBAQAogCiBjb25maWcgUENNQ0lBX004WFgKICAgICAgICAgdHJpc3RhdGUgIk1QQzh4eCBQQ01DSUEgc3VwcG9ydCIKLSAgICAgICAgZGVwZW5kcyBvbiBQQ01DSUEgJiYgUFBDCisgICAgICAgIGRlcGVuZHMgb24gUENNQ0lBICYmIFBQQyAmJiA4eHggCiAgICAgICAgIHNlbGVjdCBQQ0NBUkRfTk9OU1RBVElDCiAgICAgICAgIGhlbHAKICAgICAgICAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIFBvd2VyUEMgOHh4IHNlcmllcyBQQ01DSUEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL01ha2VmaWxlIGIvZHJpdmVycy9wY21jaWEvTWFrZWZpbGUKaW5kZXggZmUzNzU0MS4uYmNlY2Y1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9wY21jaWEvTWFrZWZpbGUKQEAgLTI1LDcgKzI1LDcgQEAKIG9iai0kKENPTkZJR19JODIzNjUpCQkJCSs9IGk4MjM2NS5vCiBvYmotJChDT05GSUdfSTgyMDkyKQkJCQkrPSBpODIwOTIubwogb2JqLSQoQ09ORklHX1RDSUMpCQkJCSs9IHRjaWMubwotb2JqLSQoQ09ORklHX1BDTUNJQV9NOFhYKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICs9IG04eHhfcGNtY2lhLm8KK29iai0kKENPTkZJR19QQ01DSUFfTThYWCkJCQkrPSBtOHh4X3BjbWNpYS5vCiBvYmotJChDT05GSUdfSEQ2NDQ2NV9QQ01DSUEpCQkJKz0gaGQ2NDQ2NV9zcy5vCiBvYmotJChDT05GSUdfUENNQ0lBX1NBMTEwMCkJCQkrPSBzYTExeHhfY29yZS5vIHNhMTEwMF9jcy5vCiBvYmotJChDT05GSUdfUENNQ0lBX1NBMTExMSkJCQkrPSBzYTExeHhfY29yZS5vIHNhMTExMV9jcy5vCkBAIC00NywxMCArNDcsMTAgQEAKIGF1MXgwMF9zcy0kKENPTkZJR19NSVBTX1BCMTUwMCkJCQkrPSBhdTEwMDBfcGIxeDAwLm8KIGF1MXgwMF9zcy0kKENPTkZJR19NSVBTX0RCMTAwMCkJCQkrPSBhdTEwMDBfZGIxeDAwLm8KIGF1MXgwMF9zcy0kKENPTkZJR19NSVBTX0RCMTEwMCkJCQkrPSBhdTEwMDBfZGIxeDAwLm8KLWF1MXgwMF9zcy0kKENPTkZJR19NSVBTX0RCMTIwMCkgICAgICAgICAgICAgICAgICs9IGF1MTAwMF9kYjF4MDAubworYXUxeDAwX3NzLSQoQ09ORklHX01JUFNfREIxMjAwKQkJCSs9IGF1MTAwMF9kYjF4MDAubwogYXUxeDAwX3NzLSQoQ09ORklHX01JUFNfREIxNTAwKQkJCSs9IGF1MTAwMF9kYjF4MDAubwogYXUxeDAwX3NzLSQoQ09ORklHX01JUFNfREIxNTUwKQkJCSs9IGF1MTAwMF9kYjF4MDAubwotYXUxeDAwX3NzLSQoQ09ORklHX01JUFNfWFhTMTUwMCkgICAgICAgICAgICAgICArPSBhdTEwMDBfeHhzMTUwMC5vCithdTF4MDBfc3MtJChDT05GSUdfTUlQU19YWFMxNTAwKQkJKz0gYXUxMDAwX3h4czE1MDAubwogCiBzYTExMTFfY3MteQkJCQkJKz0gc2ExMTExX2dlbmVyaWMubwogc2ExMTExX2NzLSQoQ09ORklHX0FTU0FCRVRfTkVQT05TRVQpCQkrPSBzYTExMDBfbmVwb25zZXQubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvYXUxMDAwX2RiMXgwMC5jIGIvZHJpdmVycy9wY21jaWEvYXUxMDAwX2RiMXgwMC5jCmluZGV4IDI0Y2ZlZTEuLmFiYzEzZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9kYjF4MDAuYworKysgYi9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfZGIxeDAwLmMKQEAgLTMwLDYgKzMwLDcgQEAKICAqCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfZ2VuZXJpYy5oIGIvZHJpdmVycy9wY21jaWEvYXUxMDAwX2dlbmVyaWMuaAppbmRleCBiMGU3OTA4Li5mMmM5NzBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfZ2VuZXJpYy5oCisrKyBiL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9nZW5lcmljLmgKQEAgLTIyLDYgKzIyLDggQEAKICNkZWZpbmUgX19BU01fQVUxMDAwX1BDTUNJQV9ICiAKIC8qIGluY2x1ZGUgdGhlIHdvcmxkICovCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKICNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvc3MuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9wYjF4MDAuYyBiL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9wYjF4MDAuYwppbmRleCBkNDE0YTNiLi5mZDU1MjJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfcGIxeDAwLmMKKysrIGIvZHJpdmVycy9wY21jaWEvYXUxMDAwX3BiMXgwMC5jCkBAIC0yMSw2ICsyMSw3IEBACiAgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKICAqICA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuCiAgKi8KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KQEAgLTMwLDcgKzMxLDYgQEAKICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAjaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfeHhzMTUwMC5jIGIvZHJpdmVycy9wY21jaWEvYXUxMDAwX3h4czE1MDAuYwppbmRleCBmMTEzYjY5Li4wMTg3NGIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfeHhzMTUwMC5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF94eHMxNTAwLmMKQEAgLTI3LDcgKzI3LDYgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtMzUsNyArMzQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2k4MjM2NS5jIGIvZHJpdmVycy9wY21jaWEvaTgyMzY1LmMKaW5kZXggN2NlNDU1ZC4uNGRkZDc2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvaTgyMzY1LmMKKysrIGIvZHJpdmVycy9wY21jaWEvaTgyMzY1LmMKQEAgLTEzNjYsNiArMTM2Niw3IEBACiAgICAgaWYgKHNvY2tldHMgPT0gMCkgewogCXByaW50aygibm90IGZvdW5kLlxuIik7CiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoJmk4MjM2NV9kZXZpY2UpOworCXJlbGVhc2VfcmVnaW9uKGkzNjVfYmFzZSwgMik7CiAJZHJpdmVyX3VucmVnaXN0ZXIoJmk4MjM2NV9kcml2ZXIpOwogCXJldHVybiAtRU5PREVWOwogICAgIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL204eHhfcGNtY2lhLmMgYi9kcml2ZXJzL3BjbWNpYS9tOHh4X3BjbWNpYS5jCmluZGV4IGY4YmVkODcuLjZkOWY3MWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL204eHhfcGNtY2lhLmMKKysrIGIvZHJpdmVycy9wY21jaWEvbTh4eF9wY21jaWEuYwpAQCAtMzksNyArMzksNiBAQAogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgotI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC01MCw2ICs0OSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIAogI2luY2x1ZGUgPGFzbS9tcGM4eHguaD4KICNpbmNsdWRlIDxhc20vOHh4X2ltbWFwLmg+CkBAIC01NDYsMjkgKzU0NiwxMSBAQAogCWZyZWVfaXJxKHBjbWNpYV9zY2hsdmwsIE5VTEwpOwogfQogCi0vKiBjb3BpZWQgZnJvbSB0Y2ljLmMgKi8KLQotc3RhdGljIGludCBtOHh4X2Rydl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlLCB1MzIgbGV2ZWwpCi17Ci0gICAgICAgIGludCByZXQgPSAwOwotICAgICAgICBpZiAobGV2ZWwgPT0gU1VTUEVORF9TQVZFX1NUQVRFKQotICAgICAgICAgICAgICAgIHJldCA9IHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoZGV2LCBzdGF0ZSk7Ci0gICAgICAgIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgbTh4eF9kcnZfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyIGxldmVsKQotewotICAgICAgICBpbnQgcmV0ID0gMDsKLSAgICAgICAgaWYgKGxldmVsID09IFJFU1VNRV9SRVNUT1JFX1NUQVRFKQotICAgICAgICAgICAgICAgIHJldCA9IHBjbWNpYV9zb2NrZXRfZGV2X3Jlc3VtZShkZXYpOwotICAgICAgICByZXR1cm4gcmV0OwotfQotCiBzdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgbTh4eF9kcml2ZXIgPSB7CiAgICAgICAgIC5uYW1lID0gIm04eHgtcGNtY2lhIiwKICAgICAgICAgLmJ1cyA9ICZwbGF0Zm9ybV9idXNfdHlwZSwKLSAgICAgICAgLnN1c3BlbmQgPSBtOHh4X2Rydl9zdXNwZW5kLAotICAgICAgICAucmVzdW1lID0gbTh4eF9kcnZfcmVzdW1lLAorICAgICAgICAuc3VzcGVuZCA9IHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQsCisgICAgICAgIC5yZXN1bWUgPSBwY21jaWFfc29ja2V0X2Rldl9yZXN1bWUsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtOHh4X2RldmljZSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9zaGFycHNsLmMgYi9kcml2ZXJzL3BjbWNpYS9weGEyeHhfc2hhcnBzbC5jCmluZGV4IGZlNWVhMzYuLjU2YzU4ODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9zaGFycHNsLmMKKysrIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X3NoYXJwc2wuYwpAQCAtMjIsMTYgKzIyLDIwIEBACiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9zY29vcC5oPgotI2lmZGVmIENPTkZJR19TQTExMDBfQ09MTElFCi0jaW5jbHVkZSA8YXNtL2FyY2gtc2ExMTAwL2NvbGxpZS5oPgotI2Vsc2UKLSNpbmNsdWRlIDxhc20vYXJjaC1weGEvcHhhLXJlZ3MuaD4KLSNlbmRpZgogCiAjaW5jbHVkZSAic29jX2NvbW1vbi5oIgogCiAjZGVmaW5lCU5PX0tFRVBfVlMgMHgwMDAxCiAKKy8qIFBDTUNJQSB0byBTY29vcCBsaW5rYWdlCisKKyAgIFRoZXJlIGlzIG5vIGVhc3kgd2F5IHRvIGxpbmsgbXVsdGlwbGUgc2Nvb3AgZGV2aWNlcyBpbnRvIG9uZQorICAgc2luZ2xlIGVudGl0eSBmb3IgdGhlIHB4YTJ4eF9wY21jaWEgZGV2aWNlIHNvIHRoaXMgc3RydWN0dXJlCisgICBpcyB1c2VkIHdoaWNoIGlzIHNldHVwIGJ5IHRoZSBwbGF0Zm9ybSBjb2RlCisqLworc3RydWN0IHNjb29wX3BjbWNpYV9jb25maWcgKnBsYXRmb3JtX3Njb29wX2NvbmZpZzsKKyNkZWZpbmUgU0NPT1BfREVWIHBsYXRmb3JtX3Njb29wX2NvbmZpZy0+ZGV2cworCiBzdGF0aWMgdm9pZCBzaGFycHNsX3BjbWNpYV9pbml0X3Jlc2V0KHN0cnVjdCBzY29vcF9wY21jaWFfZGV2ICpzY29vcGRldikKIHsKIAlyZXNldF9zY29vcChzY29vcGRldi0+ZGV2KTsKQEAgLTQzLDM4ICs0NywxNiBAQAogewogCWludCByZXQ7CiAKLSNpZm5kZWYgQ09ORklHX1NBMTEwMF9DT0xMSUUKLQkvKgotCSAqIFNldHVwIGRlZmF1bHQgc3RhdGUgb2YgR1BJTyBvdXRwdXRzCi0JICogYmVmb3JlIHdlIGVuYWJsZSB0aGVtIGFzIG91dHB1dHMuCi0JICovCi0JR1BTUihHUElPNDhfblBPRSkgPQotCQlHUElPX2JpdChHUElPNDhfblBPRSkgfAotCQlHUElPX2JpdChHUElPNDlfblBXRSkgfAotCQlHUElPX2JpdChHUElPNTBfblBJT1IpIHwKLQkJR1BJT19iaXQoR1BJTzUxX25QSU9XKSB8Ci0JCUdQSU9fYml0KEdQSU81Ml9uUENFXzEpIHwKLQkJR1BJT19iaXQoR1BJTzUzX25QQ0VfMik7Ci0KLQlweGFfZ3Bpb19tb2RlKEdQSU80OF9uUE9FX01EKTsKLQlweGFfZ3Bpb19tb2RlKEdQSU80OV9uUFdFX01EKTsKLQlweGFfZ3Bpb19tb2RlKEdQSU81MF9uUElPUl9NRCk7Ci0JcHhhX2dwaW9fbW9kZShHUElPNTFfblBJT1dfTUQpOwotCXB4YV9ncGlvX21vZGUoR1BJTzUyX25QQ0VfMV9NRCk7Ci0JcHhhX2dwaW9fbW9kZShHUElPNTNfblBDRV8yX01EKTsKLQlweGFfZ3Bpb19tb2RlKEdQSU81NF9wU0tUU0VMX01EKTsKLQlweGFfZ3Bpb19tb2RlKEdQSU81NV9uUFJFR19NRCk7Ci0JcHhhX2dwaW9fbW9kZShHUElPNTZfblBXQUlUX01EKTsKLQlweGFfZ3Bpb19tb2RlKEdQSU81N19uSU9JUzE2X01EKTsKLSNlbmRpZgorCWlmIChwbGF0Zm9ybV9zY29vcF9jb25maWctPnBjbWNpYV9pbml0KQorCQlwbGF0Zm9ybV9zY29vcF9jb25maWctPnBjbWNpYV9pbml0KCk7CiAKIAkvKiBSZWdpc3RlciBpbnRlcnJ1cHRzICovCi0JaWYgKHNjb29wX2RldnNbc2t0LT5ucl0uY2RfaXJxID49IDApIHsKKwlpZiAoU0NPT1BfREVWW3NrdC0+bnJdLmNkX2lycSA+PSAwKSB7CiAJCXN0cnVjdCBwY21jaWFfaXJxcyBjZF9pcnE7CiAKIAkJY2RfaXJxLnNvY2sgPSBza3QtPm5yOwotCQljZF9pcnEuaXJxICA9IHNjb29wX2RldnNbc2t0LT5ucl0uY2RfaXJxOwotCQljZF9pcnEuc3RyICA9IHNjb29wX2RldnNbc2t0LT5ucl0uY2RfaXJxX3N0cjsKKwkJY2RfaXJxLmlycSAgPSBTQ09PUF9ERVZbc2t0LT5ucl0uY2RfaXJxOworCQljZF9pcnEuc3RyICA9IFNDT09QX0RFVltza3QtPm5yXS5jZF9pcnFfc3RyOwogCQlyZXQgPSBzb2NfcGNtY2lhX3JlcXVlc3RfaXJxcyhza3QsICZjZF9pcnEsIDEpOwogCiAJCWlmIChyZXQpIHsKQEAgLTgzLDE5ICs2NSwxOSBAQAogCQl9CiAJfQogCi0Jc2t0LT5pcnEgPSBzY29vcF9kZXZzW3NrdC0+bnJdLmlycTsKKwlza3QtPmlycSA9IFNDT09QX0RFVltza3QtPm5yXS5pcnE7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgc2hhcnBzbF9wY21jaWFfaHdfc2h1dGRvd24oc3RydWN0IHNvY19wY21jaWFfc29ja2V0ICpza3QpCiB7Ci0JaWYgKHNjb29wX2RldnNbc2t0LT5ucl0uY2RfaXJxID49IDApIHsKKwlpZiAoU0NPT1BfREVWW3NrdC0+bnJdLmNkX2lycSA+PSAwKSB7CiAJCXN0cnVjdCBwY21jaWFfaXJxcyBjZF9pcnE7CiAKIAkJY2RfaXJxLnNvY2sgPSBza3QtPm5yOwotCQljZF9pcnEuaXJxICA9IHNjb29wX2RldnNbc2t0LT5ucl0uY2RfaXJxOwotCQljZF9pcnEuc3RyICA9IHNjb29wX2RldnNbc2t0LT5ucl0uY2RfaXJxX3N0cjsKKwkJY2RfaXJxLmlycSAgPSBTQ09PUF9ERVZbc2t0LT5ucl0uY2RfaXJxOworCQljZF9pcnEuc3RyICA9IFNDT09QX0RFVltza3QtPm5yXS5jZF9pcnFfc3RyOwogCQlzb2NfcGNtY2lhX2ZyZWVfaXJxcyhza3QsICZjZF9pcnEsIDEpOwogCX0KIH0KQEAgLTEwNSw5ICs4Nyw5IEBACiAJCQkJICAgIHN0cnVjdCBwY21jaWFfc3RhdGUgKnN0YXRlKQogewogCXVuc2lnbmVkIHNob3J0IGNwciwgY3NyOwotCXN0cnVjdCBkZXZpY2UgKnNjb29wID0gc2Nvb3BfZGV2c1tza3QtPm5yXS5kZXY7CisJc3RydWN0IGRldmljZSAqc2Nvb3AgPSBTQ09PUF9ERVZbc2t0LT5ucl0uZGV2OwogCi0JY3ByID0gcmVhZF9zY29vcF9yZWcoc2Nvb3BfZGV2c1tza3QtPm5yXS5kZXYsIFNDT09QX0NQUik7CisJY3ByID0gcmVhZF9zY29vcF9yZWcoU0NPT1BfREVWW3NrdC0+bnJdLmRldiwgU0NPT1BfQ1BSKTsKIAogCXdyaXRlX3Njb29wX3JlZyhzY29vcCwgU0NPT1BfSVJNLCAweDAwRkYpOwogCXdyaXRlX3Njb29wX3JlZyhzY29vcCwgU0NPT1BfSVNSLCAweDAwMDApOwpAQCAtMTE2LDIxICs5OCwyNSBAQAogCWlmIChjc3IgJiAweDAwMDQpIHsKIAkJLyogY2FyZCBlamVjdCAqLwogCQl3cml0ZV9zY29vcF9yZWcoc2Nvb3AsIFNDT09QX0NEUiwgMHgwMDAwKTsKLQkJc2Nvb3BfZGV2c1tza3QtPm5yXS5rZWVwX3ZzID0gTk9fS0VFUF9WUzsKKwkJU0NPT1BfREVWW3NrdC0+bnJdLmtlZXBfdnMgPSBOT19LRUVQX1ZTOwogCX0KLQllbHNlIGlmICghKHNjb29wX2RldnNbc2t0LT5ucl0ua2VlcF92cyAmIE5PX0tFRVBfVlMpKSB7CisJZWxzZSBpZiAoIShTQ09PUF9ERVZbc2t0LT5ucl0ua2VlcF92cyAmIE5PX0tFRVBfVlMpKSB7CiAJCS8qIGtlZXAgdnMxLHZzMiAqLwogCQl3cml0ZV9zY29vcF9yZWcoc2Nvb3AsIFNDT09QX0NEUiwgMHgwMDAwKTsKLQkJY3NyIHw9IHNjb29wX2RldnNbc2t0LT5ucl0ua2VlcF92czsKKwkJY3NyIHw9IFNDT09QX0RFVltza3QtPm5yXS5rZWVwX3ZzOwogCX0KIAllbHNlIGlmIChjcHIgJiAweDAwMDMpIHsKIAkJLyogcG93ZXIgb24gKi8KIAkJd3JpdGVfc2Nvb3BfcmVnKHNjb29wLCBTQ09PUF9DRFIsIDB4MDAwMCk7Ci0JCXNjb29wX2RldnNbc2t0LT5ucl0ua2VlcF92cyA9IChjc3IgJiAweDAwQzApOworCQlTQ09PUF9ERVZbc2t0LT5ucl0ua2VlcF92cyA9IChjc3IgJiAweDAwQzApOwogCX0KIAllbHNlIHsKIAkJLyogY2FyZCBkZXRlY3QgKi8KLQkJd3JpdGVfc2Nvb3BfcmVnKHNjb29wLCBTQ09PUF9DRFIsIDB4MDAwMik7CisJICAgICAgICBpZiAoKG1hY2hpbmVfaXNfc3BpdHooKSB8fCBtYWNoaW5lX2lzX2JvcnpvaSgpKSAmJiBza3QtPm5yID09IDEpIHsKKwkgICAgICAgICAgICAgICAgd3JpdGVfc2Nvb3BfcmVnKHNjb29wLCBTQ09PUF9DRFIsIDB4MDAwMCk7CisJICAgICAgICB9IGVsc2UgeworCQkgICAgICAgIHdyaXRlX3Njb29wX3JlZyhzY29vcCwgU0NPT1BfQ0RSLCAweDAwMDIpOworCSAgICAgICAgfQogCX0KIAogCXN0YXRlLT5kZXRlY3QgPSAoY3NyICYgMHgwMDA0KSA/IDAgOiAxOwpAQCAtMTQ0LDcgKzEzMCw2IEBACiAJaWYgKChjcHIgJiAweDAwODApICYmICgoY3ByICYgMHg4MDQwKSAhPSAweDgwNDApKSB7CiAJCXByaW50ayhLRVJOX0VSUiAic2hhcnBzbF9wY21jaWFfc29ja2V0X3N0YXRlKCk6IENQUj0lMDRYLCBMb3cgdm9sdGFnZSFcbiIsIGNwcik7CiAJfQotCiB9CiAKIApAQCAtMTUyLDcgKzEzNyw3IEBACiAJCQkJICAgICAgIGNvbnN0IHNvY2tldF9zdGF0ZV90ICpzdGF0ZSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBkZXZpY2UgKnNjb29wID0gc2Nvb3BfZGV2c1tza3QtPm5yXS5kZXY7CisJc3RydWN0IGRldmljZSAqc2Nvb3AgPSBTQ09PUF9ERVZbc2t0LT5ucl0uZGV2OwogCiAJdW5zaWduZWQgc2hvcnQgY3ByLCBuY3ByLCBjY3IsIG5jY3IsIG1jciwgbm1jciwgaW1yLCBuaW1yOwogCkBAIC0xNzcsOCArMTYyLDEzIEBACiAJbmNjciA9IChjY3IgPSByZWFkX3Njb29wX3JlZyhzY29vcCwgU0NPT1BfQ0NSKSkgJiB+MHgwMDgwOwogCW5pbXIgPSAoaW1yID0gcmVhZF9zY29vcF9yZWcoc2Nvb3AsIFNDT09QX0lNUikpICYgfjB4MDAzRTsKIAotCW5jcHIgfD0gKHN0YXRlLT5WY2MgPT0gMzMpID8gMHgwMDAxIDoKLQkJCQkoc3RhdGUtPlZjYyA9PSA1MCkgPyAweDAwMDIgOiAwOworCWlmICgobWFjaGluZV9pc19zcGl0eigpIHx8IG1hY2hpbmVfaXNfYm9yem9pKCkgfHwgbWFjaGluZV9pc19ha2l0YSgpKSAmJiBza3QtPm5yID09IDApIHsKKwkgICAgICAgIG5jcHIgfD0gKHN0YXRlLT5WY2MgPT0gMzMpID8gMHgwMDAyIDoKKwkJICAgICAgICAoc3RhdGUtPlZjYyA9PSA1MCkgPyAweDAwMDIgOiAwOworCX0gZWxzZSB7CisJICAgICAgICBuY3ByIHw9IChzdGF0ZS0+VmNjID09IDMzKSA/IDB4MDAwMSA6CisJCSAgICAgICAgKHN0YXRlLT5WY2MgPT0gNTApID8gMHgwMDAyIDogMDsKKwl9CiAJbm1jciB8PSAoc3RhdGUtPmZsYWdzJlNTX0lPQ0FSRCkgPyAweDAwMTAgOiAwOwogCW5jcHIgfD0gKHN0YXRlLT5mbGFncyZTU19PVVRQVVRfRU5BKSA/IDB4MDA4MCA6IDA7CiAJbmNjciB8PSAoc3RhdGUtPmZsYWdzJlNTX1JFU0VUKT8gMHgwMDgwOiAwOwpAQCAtMTkwLDE4ICsxODAsMjIgQEAKIAkJCSgoc2t0LT5zdGF0dXMmU1NfV1JQUk9UKSA/IDB4MDAwOCA6IDApOwogCiAJaWYgKCEobmNwciAmIDB4MDAwMykpIHsKLQkJc2Nvb3BfZGV2c1tza3QtPm5yXS5rZWVwX3JkID0gMDsKLQl9IGVsc2UgaWYgKCFzY29vcF9kZXZzW3NrdC0+bnJdLmtlZXBfcmQpIHsKKwkJU0NPT1BfREVWW3NrdC0+bnJdLmtlZXBfcmQgPSAwOworCX0gZWxzZSBpZiAoIVNDT09QX0RFVltza3QtPm5yXS5rZWVwX3JkKSB7CiAJCWlmIChuY2NyICYgMHgwMDgwKQotCQkJc2Nvb3BfZGV2c1tza3QtPm5yXS5rZWVwX3JkID0gMTsKKwkJCVNDT09QX0RFVltza3QtPm5yXS5rZWVwX3JkID0gMTsKIAkJZWxzZQogCQkJbmNjciB8PSAweDAwODA7CiAJfQogCiAJaWYgKG1jciAhPSBubWNyKQogCQl3cml0ZV9zY29vcF9yZWcoc2Nvb3AsIFNDT09QX01DUiwgbm1jcik7Ci0JaWYgKGNwciAhPSBuY3ByKQotCQl3cml0ZV9zY29vcF9yZWcoc2Nvb3AsIFNDT09QX0NQUiwgbmNwcik7CisJaWYgKGNwciAhPSBuY3ByKSB7CisJCWlmIChwbGF0Zm9ybV9zY29vcF9jb25maWctPnBvd2VyX2N0cmwpCisJCQlwbGF0Zm9ybV9zY29vcF9jb25maWctPnBvd2VyX2N0cmwoc2Nvb3AsIG5jcHIgLCBza3QtPm5yKTsKKwkJZWxzZQorCQkgICAgICAgIHdyaXRlX3Njb29wX3JlZyhzY29vcCwgU0NPT1BfQ1BSLCBuY3ByKTsKKwl9CiAJaWYgKGNjciAhPSBuY2NyKQogCQl3cml0ZV9zY29vcF9yZWcoc2Nvb3AsIFNDT09QX0NDUiwgbmNjcik7CiAJaWYgKGltciAhPSBuaW1yKQpAQCAtMjE0LDQzICsyMDgsNDMgQEAKIAogc3RhdGljIHZvaWQgc2hhcnBzbF9wY21jaWFfc29ja2V0X2luaXQoc3RydWN0IHNvY19wY21jaWFfc29ja2V0ICpza3QpCiB7Ci0Jc2hhcnBzbF9wY21jaWFfaW5pdF9yZXNldCgmc2Nvb3BfZGV2c1tza3QtPm5yXSk7CisJc2hhcnBzbF9wY21jaWFfaW5pdF9yZXNldCgmU0NPT1BfREVWW3NrdC0+bnJdKTsKIAogCS8qIEVuYWJsZSBpbnRlcnJ1cHQgKi8KLQl3cml0ZV9zY29vcF9yZWcoc2Nvb3BfZGV2c1tza3QtPm5yXS5kZXYsIFNDT09QX0lNUiwgMHgwMEMwKTsKLQl3cml0ZV9zY29vcF9yZWcoc2Nvb3BfZGV2c1tza3QtPm5yXS5kZXYsIFNDT09QX01DUiwgMHgwMTAxKTsKLQlzY29vcF9kZXZzW3NrdC0+bnJdLmtlZXBfdnMgPSBOT19LRUVQX1ZTOworCXdyaXRlX3Njb29wX3JlZyhTQ09PUF9ERVZbc2t0LT5ucl0uZGV2LCBTQ09PUF9JTVIsIDB4MDBDMCk7CisJd3JpdGVfc2Nvb3BfcmVnKFNDT09QX0RFVltza3QtPm5yXS5kZXYsIFNDT09QX01DUiwgMHgwMTAxKTsKKwlTQ09PUF9ERVZbc2t0LT5ucl0ua2VlcF92cyA9IE5PX0tFRVBfVlM7CiAKIAlpZiAobWFjaGluZV9pc19jb2xsaWUoKSkKIAkJLyogV2UgbmVlZCB0byBkaXNhYmxlIFNTX09VVFBVVF9FTkEgaGVyZS4gKi8KLQkJd3JpdGVfc2Nvb3BfcmVnKHNjb29wX2RldnNbc2t0LT5ucl0uZGV2LCBTQ09PUF9DUFIsIHJlYWRfc2Nvb3BfcmVnKHNjb29wX2RldnNbc2t0LT5ucl0uZGV2LCBTQ09PUF9DUFIpICYgfjB4MDA4MCk7CisJCXdyaXRlX3Njb29wX3JlZyhTQ09PUF9ERVZbc2t0LT5ucl0uZGV2LCBTQ09PUF9DUFIsIHJlYWRfc2Nvb3BfcmVnKFNDT09QX0RFVltza3QtPm5yXS5kZXYsIFNDT09QX0NQUikgJiB+MHgwMDgwKTsKIH0KIAogc3RhdGljIHZvaWQgc2hhcnBzbF9wY21jaWFfc29ja2V0X3N1c3BlbmQoc3RydWN0IHNvY19wY21jaWFfc29ja2V0ICpza3QpCiB7CiAJLyogQ0ZfQlVTX09GRiAqLwotCXNoYXJwc2xfcGNtY2lhX2luaXRfcmVzZXQoJnNjb29wX2RldnNbc2t0LT5ucl0pOworCXNoYXJwc2xfcGNtY2lhX2luaXRfcmVzZXQoJlNDT09QX0RFVltza3QtPm5yXSk7CiAKIAlpZiAobWFjaGluZV9pc19jb2xsaWUoKSkKIAkJLyogV2UgbmVlZCB0byBkaXNhYmxlIFNTX09VVFBVVF9FTkEgaGVyZS4gKi8KLQkJd3JpdGVfc2Nvb3BfcmVnKHNjb29wX2RldnNbc2t0LT5ucl0uZGV2LCBTQ09PUF9DUFIsIHJlYWRfc2Nvb3BfcmVnKHNjb29wX2RldnNbc2t0LT5ucl0uZGV2LCBTQ09PUF9DUFIpICYgfjB4MDA4MCk7CisJCXdyaXRlX3Njb29wX3JlZyhTQ09PUF9ERVZbc2t0LT5ucl0uZGV2LCBTQ09PUF9DUFIsIHJlYWRfc2Nvb3BfcmVnKFNDT09QX0RFVltza3QtPm5yXS5kZXYsIFNDT09QX0NQUikgJiB+MHgwMDgwKTsKIH0KIAogc3RhdGljIHN0cnVjdCBwY21jaWFfbG93X2xldmVsIHNoYXJwc2xfcGNtY2lhX29wcyA9IHsKLQkub3duZXIJCQkJPSBUSElTX01PRFVMRSwKLQkuaHdfaW5pdAkJCT0gc2hhcnBzbF9wY21jaWFfaHdfaW5pdCwKLQkuaHdfc2h1dGRvd24JCT0gc2hhcnBzbF9wY21jaWFfaHdfc2h1dGRvd24sCi0JLnNvY2tldF9zdGF0ZQkJPSBzaGFycHNsX3BjbWNpYV9zb2NrZXRfc3RhdGUsCi0JLmNvbmZpZ3VyZV9zb2NrZXQJPSBzaGFycHNsX3BjbWNpYV9jb25maWd1cmVfc29ja2V0LAotCS5zb2NrZXRfaW5pdAkJPSBzaGFycHNsX3BjbWNpYV9zb2NrZXRfaW5pdCwKLQkuc29ja2V0X3N1c3BlbmQJCT0gc2hhcnBzbF9wY21jaWFfc29ja2V0X3N1c3BlbmQsCi0JLmZpcnN0CQkJCT0gMCwKLQkubnIJCQkJCT0gMCwKKwkub3duZXIgICAgICAgICAgICAgICAgICA9IFRISVNfTU9EVUxFLAorCS5od19pbml0ICAgICAgICAgICAgICAgID0gc2hhcnBzbF9wY21jaWFfaHdfaW5pdCwKKwkuaHdfc2h1dGRvd24gICAgICAgICAgICA9IHNoYXJwc2xfcGNtY2lhX2h3X3NodXRkb3duLAorCS5zb2NrZXRfc3RhdGUgICAgICAgICAgID0gc2hhcnBzbF9wY21jaWFfc29ja2V0X3N0YXRlLAorCS5jb25maWd1cmVfc29ja2V0ICAgICAgID0gc2hhcnBzbF9wY21jaWFfY29uZmlndXJlX3NvY2tldCwKKwkuc29ja2V0X2luaXQgICAgICAgICAgICA9IHNoYXJwc2xfcGNtY2lhX3NvY2tldF9pbml0LAorCS5zb2NrZXRfc3VzcGVuZCAgICAgICAgID0gc2hhcnBzbF9wY21jaWFfc29ja2V0X3N1c3BlbmQsCisJLmZpcnN0ICAgICAgICAgICAgICAgICAgPSAwLAorCS5uciAgICAgICAgICAgICAgICAgICAgID0gMCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzaGFycHNsX3BjbWNpYV9kZXZpY2U7Ci0KICNpZmRlZiBDT05GSUdfU0ExMTAwX0NPTExJRQorI2luY2x1ZGUgInNhMTF4eF9iYXNlLmgiCisKIGludCBfX2luaXQgcGNtY2lhX2NvbGxpZV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldikKIHsKICAgICAgICBpbnQgcmV0ID0gLUVOT0RFVjsKQEAgLTI2MywxMSArMjU3LDEzIEBACiAKICNlbHNlCiAKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzaGFycHNsX3BjbWNpYV9kZXZpY2U7CisKIHN0YXRpYyBpbnQgX19pbml0IHNoYXJwc2xfcGNtY2lhX2luaXQodm9pZCkKIHsKIAlpbnQgcmV0OwogCi0Jc2hhcnBzbF9wY21jaWFfb3BzLm5yPXNjb29wX251bTsKKwlzaGFycHNsX3BjbWNpYV9vcHMubnI9cGxhdGZvcm1fc2Nvb3BfY29uZmlnLT5udW1fZGV2czsKIAlzaGFycHNsX3BjbWNpYV9kZXZpY2UgPSBrbWFsbG9jKHNpemVvZigqc2hhcnBzbF9wY21jaWFfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzaGFycHNsX3BjbWNpYV9kZXZpY2UpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMjc1LDcgKzI3MSw3IEBACiAJbWVtc2V0KHNoYXJwc2xfcGNtY2lhX2RldmljZSwgMCwgc2l6ZW9mKCpzaGFycHNsX3BjbWNpYV9kZXZpY2UpKTsKIAlzaGFycHNsX3BjbWNpYV9kZXZpY2UtPm5hbWUgPSAicHhhMnh4LXBjbWNpYSI7CiAJc2hhcnBzbF9wY21jaWFfZGV2aWNlLT5kZXYucGxhdGZvcm1fZGF0YSA9ICZzaGFycHNsX3BjbWNpYV9vcHM7Ci0Jc2hhcnBzbF9wY21jaWFfZGV2aWNlLT5kZXYucGFyZW50PXNjb29wX2RldnNbMF0uZGV2OworCXNoYXJwc2xfcGNtY2lhX2RldmljZS0+ZGV2LnBhcmVudD1wbGF0Zm9ybV9zY29vcF9jb25maWctPmRldnNbMF0uZGV2OwogCiAJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKHNoYXJwc2xfcGNtY2lhX2RldmljZSk7CiAJaWYgKHJldCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL2tleWJvYXJkLmggYi9kcml2ZXJzL3MzOTAvY2hhci9rZXlib2FyZC5oCmluZGV4IDNiNGRhNWEuLmY3YmY0NWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL2tleWJvYXJkLmgKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIva2V5Ym9hcmQuaApAQCAtNDEsMTQgKzQxLDE0IEBACiAvKgogICogSGVscGVyIEZ1bmN0aW9ucy4KICAqLwotZXh0ZXJuIGlubGluZSB2b2lkCitzdGF0aWMgaW5saW5lIHZvaWQKIGtiZF9wdXRfcXVldWUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGNoKQogewogCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgY2gsIDApOwogCXR0eV9zY2hlZHVsZV9mbGlwKHR0eSk7CiB9CiAKLWV4dGVybiBpbmxpbmUgdm9pZAorc3RhdGljIGlubGluZSB2b2lkCiBrYmRfcHV0c19xdWV1ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjaGFyICpjcCkKIHsKIAl3aGlsZSAoKmNwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9xZGlvLmggYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW8uaAppbmRleCA2YjhhYTZhLi4zMjhlMzFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW8uaAorKysgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW8uaApAQCAtMjY1LDcgKzI2NSw3IEBACiAvKgogICogU29tZSBpbnN0cnVjdGlvbnMgYXMgYXNzZW1ibHkKICAqLwotZXh0ZXJuIF9faW5saW5lX18gaW50IAorc3RhdGljIGlubGluZSBpbnQKIGRvX3NpZ2Ffc3luYyh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgbWFzazEsIHVuc2lnbmVkIGludCBtYXNrMikKIHsKIAlpbnQgY2M7CkBAIC0zMDAsNyArMzAwLDcgQEAKIAlyZXR1cm4gY2M7CiB9CiAKLWV4dGVybiBfX2lubGluZV9fIGludAorc3RhdGljIGlubGluZSBpbnQKIGRvX3NpZ2FfaW5wdXQodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IG1hc2spCiB7CiAJaW50IGNjOwpAQCAtMzM0LDcgKzMzNCw3IEBACiAJcmV0dXJuIGNjOwogfQogCi1leHRlcm4gX19pbmxpbmVfXyBpbnQKK3N0YXRpYyBpbmxpbmUgaW50CiBkb19zaWdhX291dHB1dCh1bnNpZ25lZCBsb25nIGlycSwgdW5zaWduZWQgbG9uZyBtYXNrLCBfX3UzMiAqYmIpCiB7CiAJaW50IGNjOwpAQCAtNDAxLDcgKzQwMSw3IEBACiAJcmV0dXJuIGNjOwogfQogCi1leHRlcm4gX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKIGRvX2NsZWFyX2dsb2JhbF9zdW1tYXJ5KHZvaWQpCiB7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vejkwbWFpbi5jIGIvZHJpdmVycy9zMzkwL2NyeXB0by96OTBtYWluLmMKaW5kZXggMDRjMmVmNy4uNDAxMGYyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NyeXB0by96OTBtYWluLmMKKysrIGIvZHJpdmVycy9zMzkwL2NyeXB0by96OTBtYWluLmMKQEAgLTM3LDcgKzM3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9rb2JqZWN0X3VldmVudC5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlICJ6OTBjcnlwdC5oIgogI2luY2x1ZGUgIno5MGNvbW1vbi5oIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L2NsYXcuYyBiL2RyaXZlcnMvczM5MC9uZXQvY2xhdy5jCmluZGV4IDFhMWMzZGUuLjZiNjNkMjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvY2xhdy5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvY2xhdy5jCkBAIC04OCw3ICs4OCw2IEBACiAjaW5jbHVkZSA8bGludXgvdGNwLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KIAogI2luY2x1ZGUgImN1MzA4OC5oIgogI2luY2x1ZGUgImNsYXcuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvZnNtLmggYi9kcml2ZXJzL3MzOTAvbmV0L2ZzbS5oCmluZGV4IDFiOGE3ZTcuLjViOTgyNTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvZnNtLmgKKysrIGIvZHJpdmVycy9zMzkwL25ldC9mc20uaApAQCAtMTQwLDcgKzE0MCw3IEBACiAgKiAgICAgICAgICAgICAgMSAgaWYgY3VycmVudCBzdGF0ZSBvciBldmVudCBpcyBvdXQgb2YgcmFuZ2UKICAqICAgICAgICAgICAgICAhMCBpZiBzdGF0ZSBhbmQgZXZlbnQgaW4gcmFuZ2UsIGJ1dCBubyBhY3Rpb24gZGVmaW5lZC4KICAqLwotZXh0ZXJuIF9faW5saW5lX18gaW50CitzdGF0aWMgaW5saW5lIGludAogZnNtX2V2ZW50KGZzbV9pbnN0YW5jZSAqZmksIGludCBldmVudCwgdm9pZCAqYXJnKQogewogCWZzbV9mdW5jdGlvbl90IHI7CkBAIC0xODgsNyArMTg4LDcgQEAKICAqIEBwYXJhbSBmaSAgICBQb2ludGVyIHRvIEZTTQogICogQHBhcmFtIHN0YXRlIFRoZSBuZXcgc3RhdGUgZm9yIHRoaXMgRlNNLgogICovCi1leHRlcm4gX19pbmxpbmVfXyB2b2lkCitzdGF0aWMgaW5saW5lIHZvaWQKIGZzbV9uZXdzdGF0ZShmc21faW5zdGFuY2UgKmZpLCBpbnQgbmV3c3RhdGUpCiB7CiAJYXRvbWljX3NldCgmZmktPnN0YXRlLG5ld3N0YXRlKTsKQEAgLTIwOCw3ICsyMDgsNyBAQAogICoKICAqIEByZXR1cm4gVGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIEZTTS4KICAqLwotZXh0ZXJuIF9faW5saW5lX18gaW50CitzdGF0aWMgaW5saW5lIGludAogZnNtX2dldHN0YXRlKGZzbV9pbnN0YW5jZSAqZmkpCiB7CiAJcmV0dXJuIGF0b21pY19yZWFkKCZmaS0+c3RhdGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9sY3MuYyBiL2RyaXZlcnMvczM5MC9uZXQvbGNzLmMKaW5kZXggMWM4YWQyZi4uZGE4YzUxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9sY3MuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L2xjcy5jCkBAIC04LDcgKzgsNyBAQAogICogICAgQXV0aG9yKHMpOiBPcmlnaW5hbCBDb2RlIHdyaXR0ZW4gYnkKICAqCQkJICBESiBCYXJyb3cgKGRqYmFycm93QGRlLmlibS5jb20sYmFycm93X2RqQHlhaG9vLmNvbSkKICAqCQkgUmV3cml0dGVuIGJ5Ci0gKgkJCSAgRnJhbmsgUGF2bGljIChwYXZsaWNAZGUuaWJtLmNvbSkgYW5kCisgKgkJCSAgRnJhbmsgUGF2bGljIChmcGF2bGljQGRlLmlibS5jb20pIGFuZAogICoJCSAJICBNYXJ0aW4gU2Nod2lkZWZza3kgPHNjaHdpZGVmc2t5QGRlLmlibS5jb20+CiAgKgogICogICAgJFJldmlzaW9uOiAxLjk5ICQJICREYXRlOiAyMDA1LzA1LzExIDA4OjEwOjE3ICQKQEAgLTIzNDIsNiArMjM0Miw2IEBACiBtb2R1bGVfaW5pdChsY3NfaW5pdF9tb2R1bGUpOwogbW9kdWxlX2V4aXQobGNzX2NsZWFudXBfbW9kdWxlKTsKIAotTU9EVUxFX0FVVEhPUigiRnJhbmsgUGF2bGljIDxwYXZsaWNAZGUuaWJtLmNvbT4iKTsKK01PRFVMRV9BVVRIT1IoIkZyYW5rIFBhdmxpYyA8ZnBhdmxpY0BkZS5pYm0uY29tPiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGguaCBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aC5oCmluZGV4IDM4YTI0NDEuLmQyMzhjN2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aC5oCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aC5oCkBAIC04LDYgKzgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3RyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KIAogI2luY2x1ZGUgPG5ldC9pcHY2Lmg+CiAjaW5jbHVkZSA8bGludXgvaW42Lmg+CkBAIC0yNCw3ICsyNSw3IEBACiAKICNpbmNsdWRlICJxZXRoX21wYy5oIgogCi0jZGVmaW5lIFZFUlNJT05fUUVUSF9IIAkJIiRSZXZpc2lvbjogMS4xNDIgJCIKKyNkZWZpbmUgVkVSU0lPTl9RRVRIX0ggCQkiJFJldmlzaW9uOiAxLjE1MiAkIgogCiAjaWZkZWYgQ09ORklHX1FFVEhfSVBWNgogI2RlZmluZSBRRVRIX1ZFUlNJT05fSVBWNiAJIjpJUHY2IgpAQCAtNzE4LDggKzcxOSw2IEBACiAJYXRvbWljX3QgcmVmY250OwogfTsKIAotI2RlZmluZSBRRVRIX0JST0FEQ0FTVF9XSVRIX0VDSE8gICAgMQotI2RlZmluZSBRRVRIX0JST0FEQ0FTVF9XSVRIT1VUX0VDSE8gMgogCiBzdHJ1Y3QgcWV0aF9jYXJkX2Jsa3QgewogCWludCB0aW1lX3RvdGFsOwpAQCAtNzI3LDggKzcyNiwxMCBAQAogCWludCBpbnRlcl9wYWNrZXRfanVtYm87CiB9OwogCi0KLQorI2RlZmluZSBRRVRIX0JST0FEQ0FTVF9XSVRIX0VDSE8gICAgMHgwMQorI2RlZmluZSBRRVRIX0JST0FEQ0FTVF9XSVRIT1VUX0VDSE8gMHgwMgorI2RlZmluZSBRRVRIX0xBWUVSMl9NQUNfUkVBRAkgICAgMHgwMQorI2RlZmluZSBRRVRIX0xBWUVSMl9NQUNfUkVHSVNURVJFRCAgMHgwMgogc3RydWN0IHFldGhfY2FyZF9pbmZvIHsKIAl1bnNpZ25lZCBzaG9ydCB1bml0X2FkZHIyOwogCXVuc2lnbmVkIHNob3J0IGN1bGE7CkBAIC03MzYsNyArNzM3LDcgQEAKIAlfX3UxNiBmdW5jX2xldmVsOwogCWNoYXIgbWNsX2xldmVsW1FFVEhfTUNMX0xFTkdUSCArIDFdOwogCWludCBndWVzdGxhbjsKLQlpbnQgbGF5ZXIyX21hY19yZWdpc3RlcmVkOworCWludCBtYWNfYml0czsKIAlpbnQgcG9ydG5hbWVfcmVxdWlyZWQ7CiAJaW50IHBvcnRubzsKIAljaGFyIHBvcnRuYW1lWzldOwpAQCAtNzQ5LDYgKzc1MCw3IEBACiAJaW50IHVuaXF1ZV9pZDsKIAlzdHJ1Y3QgcWV0aF9jYXJkX2Jsa3QgYmxrdDsKIAlfX3UzMiBjc3VtX21hc2s7CisJZW51bSBxZXRoX2lwYV9wcm9taXNjX21vZGVzIHByb21pc2NfbW9kZTsKIH07CiAKIHN0cnVjdCBxZXRoX2NhcmRfb3B0aW9ucyB7CkBAIC03NzUsNiArNzc3LDcgQEAKIGVudW0gcWV0aF90aHJlYWRzIHsKIAlRRVRIX1NFVF9JUF9USFJFQUQgID0gMSwKIAlRRVRIX1JFQ09WRVJfVEhSRUFEID0gMiwKKwlRRVRIX1NFVF9QUk9NSVNDX01PREVfVEhSRUFEID0gNCwKIH07CiAKIHN0cnVjdCBxZXRoX29zbl9pbmZvIHsKQEAgLTEwNzQsNiArMTA3NywyNiBAQAogCX0KIH0KIAorc3RhdGljIGlubGluZSBpbnQKK3FldGhfaXNkaWdpdChjaGFyICogYnVmKQoreworCXdoaWxlICgqYnVmKSB7CisJCWlmICghaXNkaWdpdCgqYnVmKyspKQorCQkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCitzdGF0aWMgaW5saW5lIGludAorcWV0aF9pc3hkaWdpdChjaGFyICogYnVmKQoreworCXdoaWxlICgqYnVmKSB7CisJCWlmICghaXN4ZGlnaXQoKmJ1ZisrKSkKKwkJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMTsKK30KKwogc3RhdGljIGlubGluZSB2b2lkCiBxZXRoX2lwYWRkcjRfdG9fc3RyaW5nKGNvbnN0IF9fdTggKmFkZHIsIGNoYXIgKmJ1ZikKIHsKQEAgLTEwOTAsMTggKzExMTMsMjcgQEAKIAlpbnQgaTsKIAogCXN0YXJ0ID0gYnVmOwotCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKLQkJaWYgKCEoZW5kID0gc3RyY2hyKHN0YXJ0LCAnLicpKSkKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCWlmIChpID09IDMpIHsKKwkJCWVuZCA9IHN0cmNocihzdGFydCwweGEpOworCQkJaWYgKGVuZCkKKwkJCQlsZW4gPSBlbmQgLSBzdGFydDsKKwkJCWVsc2UJCQorCQkJCWxlbiA9IHN0cmxlbihzdGFydCk7CisJCX0KKwkJZWxzZSB7CisJCQllbmQgPSBzdHJjaHIoc3RhcnQsICcuJyk7CisJCQlsZW4gPSBlbmQgLSBzdGFydDsKKwkJfQorCQlpZiAoKGxlbiA8PSAwKSB8fCAobGVuID4gMykpCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJbGVuID0gZW5kIC0gc3RhcnQ7CiAJCW1lbXNldChhYnVmLCAwLCA0KTsKIAkJc3RybmNweShhYnVmLCBzdGFydCwgbGVuKTsKKwkJaWYgKCFxZXRoX2lzZGlnaXQoYWJ1ZikpCisJCQlyZXR1cm4gLUVJTlZBTDsKIAkJYWRkcltpXSA9IHNpbXBsZV9zdHJ0b3VsKGFidWYsICZ0bXAsIDEwKTsKIAkJc3RhcnQgPSBlbmQgKyAxOwogCX0KLQltZW1zZXQoYWJ1ZiwgMCwgNCk7Ci0Jc3RyY3B5KGFidWYsIHN0YXJ0KTsKLQlhZGRyWzNdID0gc2ltcGxlX3N0cnRvdWwoYWJ1ZiwgJnRtcCwgMTApOwogCXJldHVybiAwOwogfQogCkBAIC0xMTI4LDE4ICsxMTYwLDI3IEBACiAKIAl0bXBfYWRkciA9ICh1MTYgKilhZGRyOwogCXN0YXJ0ID0gYnVmOwotCWZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHsKLQkJaWYgKCEoZW5kID0gc3RyY2hyKHN0YXJ0LCAnOicpKSkKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCWlmIChpID09IDcpIHsKKwkJCWVuZCA9IHN0cmNocihzdGFydCwweGEpOworCQkJaWYgKGVuZCkKKwkJCQlsZW4gPSBlbmQgLSBzdGFydDsKKwkJCWVsc2UKKwkJCQlsZW4gPSBzdHJsZW4oc3RhcnQpOworCQl9CisJCWVsc2UgeworCQkJZW5kID0gc3RyY2hyKHN0YXJ0LCAnOicpOworCQkJbGVuID0gZW5kIC0gc3RhcnQ7CisJCX0KKwkJaWYgKChsZW4gPD0gMCkgfHwgKGxlbiA+IDQpKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWxlbiA9IGVuZCAtIHN0YXJ0OwogCQltZW1zZXQoYWJ1ZiwgMCwgNSk7CiAJCXN0cm5jcHkoYWJ1Ziwgc3RhcnQsIGxlbik7CisJCWlmICghcWV0aF9pc3hkaWdpdChhYnVmKSkKKwkJCXJldHVybiAtRUlOVkFMOwogCQl0bXBfYWRkcltpXSA9IHNpbXBsZV9zdHJ0b3VsKGFidWYsICZ0bXAsIDE2KTsKIAkJc3RhcnQgPSBlbmQgKyAxOwogCX0KLQltZW1zZXQoYWJ1ZiwgMCwgNSk7Ci0Jc3RyY3B5KGFidWYsIHN0YXJ0KTsKLQl0bXBfYWRkcls3XSA9IHNpbXBsZV9zdHJ0b3VsKGFidWYsICZ0bXAsIDE2KTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX21haW4uYyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9tYWluLmMKaW5kZXggNjkyMDAzYy4uOTljY2ViMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX21haW4uYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbWFpbi5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqCi0gKiBsaW51eC9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbWFpbi5jICgkUmV2aXNpb246IDEuMjI0ICQpCisgKiBsaW51eC9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbWFpbi5jICgkUmV2aXNpb246IDEuMjQyICQpCiAgKgogICogTGludXggb24gelNlcmllcyBPU0EgRXhwcmVzcyBhbmQgSGlwZXJTb2NrZXRzIHN1cHBvcnQKICAqCkBAIC05LDEwICs5LDEwIEBACiAgKiAgICBBdXRob3Iocyk6IE9yaWdpbmFsIENvZGUgd3JpdHRlbiBieQogICoJCQkgIFV0eiBCYWNoZXIgKHV0ei5iYWNoZXJAZGUuaWJtLmNvbSkKICAqCQkgUmV3cml0dGVuIGJ5Ci0gKgkJCSAgRnJhbmsgUGF2bGljIChwYXZsaWNAZGUuaWJtLmNvbSkgYW5kCisgKgkJCSAgRnJhbmsgUGF2bGljIChmcGF2bGljQGRlLmlibS5jb20pIGFuZAogICoJCSAJICBUaG9tYXMgU3BhdHppZXIgPHRzcGF0QGRlLmlibS5jb20+CiAgKgotICogICAgJFJldmlzaW9uOiAxLjIyNCAkCSAkRGF0ZTogMjAwNS8wNS8wNCAyMDoxOToxOCAkCisgKiAgICAkUmV2aXNpb246IDEuMjQyICQJICREYXRlOiAyMDA1LzA1LzA0IDIwOjE5OjE4ICQKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTcyLDcgKzcyLDcgQEAKICNpbmNsdWRlICJxZXRoX2VkZHAuaCIKICNpbmNsdWRlICJxZXRoX3Rzby5oIgogCi0jZGVmaW5lIFZFUlNJT05fUUVUSF9DICIkUmV2aXNpb246IDEuMjI0ICQiCisjZGVmaW5lIFZFUlNJT05fUUVUSF9DICIkUmV2aXNpb246IDEuMjQyICQiCiBzdGF0aWMgY29uc3QgY2hhciAqdmVyc2lvbiA9ICJxZXRoIFMvMzkwIE9TQS1FeHByZXNzIGRyaXZlciI7CiAKIC8qKgpAQCAtMTYwLDYgKzE2MCw5IEBACiBxZXRoX3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqKTsKIAogc3RhdGljIHZvaWQKK3FldGhfc2V0YWRwX3Byb21pc2NfbW9kZShzdHJ1Y3QgcWV0aF9jYXJkICopOworCitzdGF0aWMgdm9pZAogcWV0aF9ub3RpZnlfcHJvY2Vzc2VzKHZvaWQpCiB7CiAJLypub3RpZnkgYWxsICByZWdpc3RlcmVkIHByb2Nlc3NlcyAqLwpAQCAtNjAyLDExICs2MDUsMjAgQEAKIAlpbnQgZm91bmQgPSAwOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShhZGRyLCAmY2FyZC0+aXBfbGlzdCwgZW50cnkpIHsKKwkJaWYgKGNhcmQtPm9wdGlvbnMubGF5ZXIyKSB7CisJCQlpZiAoKGFkZHItPnR5cGUgPT0gdG9kby0+dHlwZSkgJiYKKwkJCSAgICAobWVtY21wKCZhZGRyLT5tYWMsICZ0b2RvLT5tYWMsIAorCQkJCSAgICBPU0FfQUREUl9MRU4pID09IDApKSB7CisJCQkJZm91bmQgPSAxOworCQkJCWJyZWFrOworCQkJfQorCQkJY29udGludWU7CisJCX0gCiAJCWlmICgoYWRkci0+cHJvdG8gICAgID09IFFFVEhfUFJPVF9JUFY0KSAgJiYKIAkJICAgICh0b2RvLT5wcm90byAgICAgPT0gUUVUSF9QUk9UX0lQVjQpICAmJgogCQkgICAgKGFkZHItPnR5cGUgICAgICA9PSB0b2RvLT50eXBlKSAgICAgICYmCiAJCSAgICAoYWRkci0+dS5hNC5hZGRyID09IHRvZG8tPnUuYTQuYWRkcikgJiYKLQkJICAgIChhZGRyLT51LmE0Lm1hc2sgPT0gdG9kby0+dS5hNC5tYXNrKSAgICl7CisJCSAgICAoYWRkci0+dS5hNC5tYXNrID09IHRvZG8tPnUuYTQubWFzaykpIHsKIAkJCWZvdW5kID0gMTsKIAkJCWJyZWFrOwogCQl9CkBAIC02MTUsMTIgKzYyNywxMiBAQAogCQkgICAgKGFkZHItPnR5cGUgICAgICAgID09IHRvZG8tPnR5cGUpICAgICAgICAgJiYKIAkJICAgIChhZGRyLT51LmE2LnBmeGxlbiA9PSB0b2RvLT51LmE2LnBmeGxlbikgICYmCiAJCSAgICAobWVtY21wKCZhZGRyLT51LmE2LmFkZHIsICZ0b2RvLT51LmE2LmFkZHIsCi0JCQkgICAgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpID09IDApKSAgICAgeworCQkJICAgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKSA9PSAwKSkgewogCQkJZm91bmQgPSAxOwogCQkJYnJlYWs7CiAJCX0KIAl9Ci0JaWYgKGZvdW5kKXsKKwlpZiAoZm91bmQpIHsKIAkJYWRkci0+dXNlcnMgKz0gdG9kby0+dXNlcnM7CiAJCWlmIChhZGRyLT51c2VycyA8PSAwKXsKIAkJCSpfX2FkZHIgPSBhZGRyOwpAQCAtNjMyLDcgKzY0NCw3IEBACiAJCQlyZXR1cm4gMDsKIAkJfQogCX0KLQlpZiAodG9kby0+dXNlcnMgPiAwKXsKKwlpZiAodG9kby0+dXNlcnMgPiAwKSB7CiAJCS8qIGZvciBWSVBBIGFuZCBSWElQIGxpbWl0IHJlZmNvdW50IHRvIDEgKi8KIAkJaWYgKHRvZG8tPnR5cGUgIT0gUUVUSF9JUF9UWVBFX05PUk1BTCkKIAkJCXRvZG8tPnVzZXJzID0gMTsKQEAgLTY4MiwxMiArNjk0LDIyIEBACiAJCWlmICgoYWRkci0+dHlwZSA9PSBRRVRIX0lQX1RZUEVfREVMX0FMTF9NQykgJiYKIAkJICAgICh0bXAtPnR5cGUgPT0gUUVUSF9JUF9UWVBFX0RFTF9BTExfTUMpKQogCQkJcmV0dXJuIDA7CisJCWlmIChjYXJkLT5vcHRpb25zLmxheWVyMikgeworCQkJaWYgKCh0bXAtPnR5cGUJPT0gYWRkci0+dHlwZSkJJiYKKwkJCSAgICAodG1wLT5pc19tdWx0aWNhc3QgPT0gYWRkci0+aXNfbXVsdGljYXN0KSAmJgorCQkJICAgIChtZW1jbXAoJnRtcC0+bWFjLCAmYWRkci0+bWFjLCAKKwkJCQkgICAgT1NBX0FERFJfTEVOKSA9PSAwKSkgeworCQkJCWZvdW5kID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9IAkgCiAJCWlmICgodG1wLT5wcm90byAgICAgICAgPT0gUUVUSF9QUk9UX0lQVjQpICAgICAmJgogCQkgICAgKGFkZHItPnByb3RvICAgICAgID09IFFFVEhfUFJPVF9JUFY0KSAgICAgJiYKIAkJICAgICh0bXAtPnR5cGUgICAgICAgICA9PSBhZGRyLT50eXBlKSAgICAgICAgICYmCiAJCSAgICAodG1wLT5pc19tdWx0aWNhc3QgPT0gYWRkci0+aXNfbXVsdGljYXN0KSAmJgogCQkgICAgKHRtcC0+dS5hNC5hZGRyICAgID09IGFkZHItPnUuYTQuYWRkcikgICAgJiYKLQkJICAgICh0bXAtPnUuYTQubWFzayAgICA9PSBhZGRyLT51LmE0Lm1hc2spICAgICAgKXsKKwkJICAgICh0bXAtPnUuYTQubWFzayAgICA9PSBhZGRyLT51LmE0Lm1hc2spKSB7CiAJCQlmb3VuZCA9IDE7CiAJCQlicmVhazsKIAkJfQpAQCAtNjk3LDcgKzcxOSw3IEBACiAJCSAgICAodG1wLT5pc19tdWx0aWNhc3QgPT0gYWRkci0+aXNfbXVsdGljYXN0KSAgJiYKIAkJICAgICh0bXAtPnUuYTYucGZ4bGVuICA9PSBhZGRyLT51LmE2LnBmeGxlbikgICAmJgogCQkgICAgKG1lbWNtcCgmdG1wLT51LmE2LmFkZHIsICZhZGRyLT51LmE2LmFkZHIsCi0JCQkgICAgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpID09IDApICAgICAgICApeworCQkJICAgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKSA9PSAwKSkgewogCQkJZm91bmQgPSAxOwogCQkJYnJlYWs7CiAJCX0KQEAgLTcwNyw3ICs3MjksNyBAQAogCQkJdG1wLT51c2VycyArPSBhZGRyLT51c2VyczsKIAkJZWxzZQogCQkJdG1wLT51c2VycyArPSBhZGQ/IDE6LTE7Ci0JCWlmICh0bXAtPnVzZXJzID09IDApeworCQlpZiAodG1wLT51c2VycyA9PSAwKSB7CiAJCQlsaXN0X2RlbCgmdG1wLT5lbnRyeSk7CiAJCQlrZnJlZSh0bXApOwogCQl9CkBAIC03MzgsMTIgKzc2MCwxNSBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJjID0gMDsKIAotCVFFVEhfREJGX1RFWFQodHJhY2UsNCwiZGVsaXAiKTsKLQlpZiAoYWRkci0+cHJvdG8gPT0gUUVUSF9QUk9UX0lQVjQpCi0JCVFFVEhfREJGX0hFWCh0cmFjZSw0LCZhZGRyLT51LmE0LmFkZHIsNCk7CisJUUVUSF9EQkZfVEVYVCh0cmFjZSwgNCwgImRlbGlwIik7CisKKwlpZiAoY2FyZC0+b3B0aW9ucy5sYXllcjIpCisJCVFFVEhfREJGX0hFWCh0cmFjZSwgNCwgJmFkZHItPm1hYywgNik7CisJZWxzZSBpZiAoYWRkci0+cHJvdG8gPT0gUUVUSF9QUk9UX0lQVjQpCisJCVFFVEhfREJGX0hFWCh0cmFjZSwgNCwgJmFkZHItPnUuYTQuYWRkciwgNCk7CiAJZWxzZSB7Ci0JCVFFVEhfREJGX0hFWCh0cmFjZSw0LCZhZGRyLT51LmE2LmFkZHIsOCk7Ci0JCVFFVEhfREJGX0hFWCh0cmFjZSw0LCgoY2hhciAqKSZhZGRyLT51LmE2LmFkZHIpKzgsOCk7CisJCVFFVEhfREJGX0hFWCh0cmFjZSwgNCwgJmFkZHItPnUuYTYuYWRkciwgOCk7CisJCVFFVEhfREJGX0hFWCh0cmFjZSwgNCwgKChjaGFyICopJmFkZHItPnUuYTYuYWRkcikgKyA4LCA4KTsKIAl9CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmlwX2xvY2ssIGZsYWdzKTsKIAlyYyA9IF9fcWV0aF9pbnNlcnRfaXBfdG9kbyhjYXJkLCBhZGRyLCAwKTsKQEAgLTc1NywxMiArNzgyLDE0IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmMgPSAwOwogCi0JUUVUSF9EQkZfVEVYVCh0cmFjZSw0LCJhZGRpcCIpOwotCWlmIChhZGRyLT5wcm90byA9PSBRRVRIX1BST1RfSVBWNCkKLQkJUUVUSF9EQkZfSEVYKHRyYWNlLDQsJmFkZHItPnUuYTQuYWRkciw0KTsKKwlRRVRIX0RCRl9URVhUKHRyYWNlLCA0LCAiYWRkaXAiKTsKKwlpZiAoY2FyZC0+b3B0aW9ucy5sYXllcjIpCisJCVFFVEhfREJGX0hFWCh0cmFjZSwgNCwgJmFkZHItPm1hYywgNik7CisJZWxzZSBpZiAoYWRkci0+cHJvdG8gPT0gUUVUSF9QUk9UX0lQVjQpCisJCVFFVEhfREJGX0hFWCh0cmFjZSwgNCwgJmFkZHItPnUuYTQuYWRkciwgNCk7CiAJZWxzZSB7Ci0JCVFFVEhfREJGX0hFWCh0cmFjZSw0LCZhZGRyLT51LmE2LmFkZHIsOCk7Ci0JCVFFVEhfREJGX0hFWCh0cmFjZSw0LCgoY2hhciAqKSZhZGRyLT51LmE2LmFkZHIpKzgsOCk7CisJCVFFVEhfREJGX0hFWCh0cmFjZSwgNCwgJmFkZHItPnUuYTYuYWRkciwgOCk7CisJCVFFVEhfREJGX0hFWCh0cmFjZSwgNCwgKChjaGFyICopJmFkZHItPnUuYTYuYWRkcikgKyA4LCA4KTsKIAl9CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmlwX2xvY2ssIGZsYWdzKTsKIAlyYyA9IF9fcWV0aF9pbnNlcnRfaXBfdG9kbyhjYXJkLCBhZGRyLCAxKTsKQEAgLTc3NSw3ICs4MDIsNyBAQAogewogCXN0cnVjdCBxZXRoX2lwYWRkciAqYWRkciwgKnRtcDsKIAlpbnQgcmM7Ci0KK2FnYWluOgogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShhZGRyLCB0bXAsICZjYXJkLT5pcF9saXN0LCBlbnRyeSkgewogCQlpZiAoYWRkci0+aXNfbXVsdGljYXN0KSB7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5pcF9sb2NrLCAqZmxhZ3MpOwpAQCAtNzg0LDYgKzgxMSw3IEBACiAJCQlpZiAoIXJjKSB7CiAJCQkJbGlzdF9kZWwoJmFkZHItPmVudHJ5KTsKIAkJCQlrZnJlZShhZGRyKTsKKwkJCQlnb3RvIGFnYWluOwogCQkJfQogCQl9CiAJfQpAQCAtODUxLDYgKzg3OSw3IEBACiAKIHN0YXRpYyB2b2lkIHFldGhfZGVsZXRlX21jX2FkZHJlc3NlcyhzdHJ1Y3QgcWV0aF9jYXJkICopOwogc3RhdGljIHZvaWQgcWV0aF9hZGRfbXVsdGljYXN0X2lwdjQoc3RydWN0IHFldGhfY2FyZCAqKTsKK3N0YXRpYyB2b2lkIHFldGhfbGF5ZXIyX2FkZF9tdWx0aWNhc3Qoc3RydWN0IHFldGhfY2FyZCAqKTsKICNpZmRlZiBDT05GSUdfUUVUSF9JUFY2CiBzdGF0aWMgdm9pZCBxZXRoX2FkZF9tdWx0aWNhc3RfaXB2NihzdHJ1Y3QgcWV0aF9jYXJkICopOwogI2VuZGlmCkBAIC05MzksNiArOTY4LDI0IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBEcml2ZSB0aGUgU0VUX1BST01JU0NfTU9ERSB0aHJlYWQKKyAqLworc3RhdGljIGludAorcWV0aF9zZXRfcHJvbWlzY19tb2RlKHZvaWQgKnB0cikKK3sKKwlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gKHN0cnVjdCBxZXRoX2NhcmQgKikgcHRyOworCisJZGFlbW9uaXplKCJxZXRoX3NldHBybSIpOworCVFFVEhfREJGX1RFWFQodHJhY2UsNCwic2V0cHJtMSIpOworCWlmICghcWV0aF9kb19ydW5fdGhyZWFkKGNhcmQsIFFFVEhfU0VUX1BST01JU0NfTU9ERV9USFJFQUQpKQorCQlyZXR1cm4gMDsKKwlRRVRIX0RCRl9URVhUKHRyYWNlLDQsInNldHBybTIiKTsKKwlxZXRoX3NldGFkcF9wcm9taXNjX21vZGUoY2FyZCk7CisJcWV0aF9jbGVhcl90aHJlYWRfcnVubmluZ19iaXQoY2FyZCwgUUVUSF9TRVRfUFJPTUlTQ19NT0RFX1RIUkVBRCk7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQKIHFldGhfcmVjb3Zlcih2b2lkICpwdHIpCiB7CkBAIC0xMDA1LDYgKzEwNTIsOCBAQAogCiAJaWYgKHFldGhfZG9fc3RhcnRfdGhyZWFkKGNhcmQsIFFFVEhfU0VUX0lQX1RIUkVBRCkpCiAJCWtlcm5lbF90aHJlYWQocWV0aF9yZWdpc3Rlcl9pcF9hZGRyZXNzZXMsICh2b2lkICopY2FyZCxTSUdDSExEKTsKKwlpZiAocWV0aF9kb19zdGFydF90aHJlYWQoY2FyZCwgUUVUSF9TRVRfUFJPTUlTQ19NT0RFX1RIUkVBRCkpCisJCWtlcm5lbF90aHJlYWQocWV0aF9zZXRfcHJvbWlzY19tb2RlLCAodm9pZCAqKWNhcmQsIFNJR0NITEQpOwogCWlmIChxZXRoX2RvX3N0YXJ0X3RocmVhZChjYXJkLCBRRVRIX1JFQ09WRVJfVEhSRUFEKSkKIAkJa2VybmVsX3RocmVhZChxZXRoX3JlY292ZXIsICh2b2lkICopIGNhcmQsIFNJR0NITEQpOwogfQpAQCAtMzc0OSw3ICszNzk4LDcgQEAKIAogCWlmICggKGNhcmQtPmluZm8udHlwZSAhPSBRRVRIX0NBUkRfVFlQRV9PU04pICYmCiAJICAgICAoY2FyZC0+b3B0aW9ucy5sYXllcjIpICYmCi0JICAgICAoIWNhcmQtPmluZm8ubGF5ZXIyX21hY19yZWdpc3RlcmVkKSkgeworCSAgICAgKCEoY2FyZC0+aW5mby5tYWNfYml0cyAmIFFFVEhfTEFZRVIyX01BQ19SRUdJU1RFUkVEKSkpIHsKIAkJUUVUSF9EQkZfVEVYVCh0cmFjZSw0LCJub21hY2FkciIpOwogCQlyZXR1cm4gLUVQRVJNOwogCX0KQEAgLTQzMTEsNiArNDM2MCw4IEBACiBvdXQ6CiAJaWYgKGZsdXNoX2NvdW50KQogCQlxZXRoX2ZsdXNoX2J1ZmZlcnMocXVldWUsIDAsIHN0YXJ0X2luZGV4LCBmbHVzaF9jb3VudCk7CisJZWxzZSBpZiAoIWF0b21pY19yZWFkKCZxdWV1ZS0+c2V0X3BjaV9mbGFnc19jb3VudCkpCisJCWF0b21pY19zd2FwKCZxdWV1ZS0+c3RhdGUsIFFFVEhfT1VUX1FfTE9DS0VEX0ZMVVNIKTsKIAkvKgogCSAqIHF1ZXVlLT5zdGF0ZSB3aWxsIGdvIGZyb20gTE9DS0VEIC0+IFVOTE9DS0VEIG9yIGZyb20KIAkgKiBMT0NLRURfRkxVU0ggLT4gTE9DS0VEIGlmIG91dHB1dF9oYW5kbGVyIHdhbnRlZCB0byAnbm90aWZ5JyB1cwpAQCAtNDk3NSw2ICs1MDI2LDEwIEBACiAJCQkgICAgdW5zaWduZWQgbG9uZyk7CiAKIHN0YXRpYyBpbnQKK3FldGhfZGVmYXVsdF9zZXRhZGFwdGVycGFybXNfY2Ioc3RydWN0IHFldGhfY2FyZCAqY2FyZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHFldGhfcmVwbHkgKnJlcGx5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGRhdGEpOworc3RhdGljIGludAogcWV0aF9zZW5kX3NldGFzc3Bhcm1zKHN0cnVjdCBxZXRoX2NhcmQgKiwgc3RydWN0IHFldGhfY21kX2J1ZmZlciAqLAogCQkgICAgICBfX3UxNiwgbG9uZywKIAkJICAgICAgaW50ICgqcmVwbHlfY2IpCkBAIC01MzAxLDggKzUzNTYsNyBAQAogCXN0cnVjdCBxZXRoX2lwYWRkciAqYWRkcjsKIAogCVFFVEhfREJGX1RFWFQodHJhY2UsIDQsICJmcnZhZGRyNCIpOwotCWlmICghY2FyZC0+dmxhbmdycCkKLQkJcmV0dXJuOworCiAJcmN1X3JlYWRfbG9jaygpOwogCWluX2RldiA9IF9faW5fZGV2X2dldF9yY3UoY2FyZC0+dmxhbmdycC0+dmxhbl9kZXZpY2VzW3ZpZF0pOwogCWlmICghaW5fZGV2KQpAQCAtNTMzMCw4ICs1Mzg0LDcgQEAKIAlzdHJ1Y3QgcWV0aF9pcGFkZHIgKmFkZHI7CiAKIAlRRVRIX0RCRl9URVhUKHRyYWNlLCA0LCAiZnJ2YWRkcjYiKTsKLQlpZiAoIWNhcmQtPnZsYW5ncnApCi0JCXJldHVybjsKKwogCWluNl9kZXYgPSBpbjZfZGV2X2dldChjYXJkLT52bGFuZ3JwLT52bGFuX2RldmljZXNbdmlkXSk7CiAJaWYgKCFpbjZfZGV2KQogCQlyZXR1cm47CkBAIC01MzUxLDEwICs1NDA0LDM4IEBACiB9CiAKIHN0YXRpYyB2b2lkCitxZXRoX2ZyZWVfdmxhbl9hZGRyZXNzZXMoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgdW5zaWduZWQgc2hvcnQgdmlkKQoreworCWlmIChjYXJkLT5vcHRpb25zLmxheWVyMiB8fCAhY2FyZC0+dmxhbmdycCkKKwkJcmV0dXJuOworCXFldGhfZnJlZV92bGFuX2FkZHJlc3NlczQoY2FyZCwgdmlkKTsKKwlxZXRoX2ZyZWVfdmxhbl9hZGRyZXNzZXM2KGNhcmQsIHZpZCk7Cit9CisKK3N0YXRpYyBpbnQKK3FldGhfbGF5ZXIyX3NlbmRfc2V0ZGVsdmxhbl9jYihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBxZXRoX3JlcGx5ICpyZXBseSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGRhdGEpCit7CisgICAgICAgIHN0cnVjdCBxZXRoX2lwYV9jbWQgKmNtZDsKKworICAgICAgICBRRVRIX0RCRl9URVhUKHRyYWNlLCAyLCAiTDJzZHZjYiIpOworICAgICAgICBjbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKSBkYXRhOworICAgICAgICBpZiAoY21kLT5oZHIucmV0dXJuX2NvZGUpIHsKKwkJUFJJTlRfRVJSKCJFcnJvciBpbiBwcm9jZXNzaW5nIFZMQU4gJWkgb24gJXM6IDB4JXguICIKKwkJCSAgIkNvbnRpbnVpbmdcbiIsY21kLT5kYXRhLnNldGRlbHZsYW4udmxhbl9pZCwgCisJCQkgIFFFVEhfQ0FSRF9JRk5BTUUoY2FyZCksIGNtZC0+aGRyLnJldHVybl9jb2RlKTsKKwkJUUVUSF9EQkZfVEVYVF8odHJhY2UsIDIsICJMMlZMJTR4IiwgY21kLT5oZHIuY29tbWFuZCk7CisJCVFFVEhfREJGX1RFWFRfKHRyYWNlLCAyLCAiTDIlcyIsIENBUkRfQlVTX0lEKGNhcmQpKTsKKwkJUUVUSF9EQkZfVEVYVF8odHJhY2UsIDIsICJlcnIlZCIsIGNtZC0+aGRyLnJldHVybl9jb2RlKTsKKwl9CisgICAgICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CiBxZXRoX2xheWVyMl9zZW5kX3NldGRlbHZsYW4oc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgX191MTYgaSwKIAkJCSAgICBlbnVtIHFldGhfaXBhX2NtZHMgaXBhY21kKQogewotIAlpbnQgcmM7CiAJc3RydWN0IHFldGhfaXBhX2NtZCAqY21kOwogCXN0cnVjdCBxZXRoX2NtZF9idWZmZXIgKmlvYjsKIApAQCAtNTM2MiwxNSArNTQ0Myw4IEBACiAJaW9iID0gcWV0aF9nZXRfaXBhY21kX2J1ZmZlcihjYXJkLCBpcGFjbWQsIFFFVEhfUFJPVF9JUFY0KTsKIAljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKShpb2ItPmRhdGErSVBBX1BEVV9IRUFERVJfU0laRSk7CiAgICAgICAgIGNtZC0+ZGF0YS5zZXRkZWx2bGFuLnZsYW5faWQgPSBpOwotCi0JcmMgPSBxZXRoX3NlbmRfaXBhX2NtZChjYXJkLCBpb2IsIE5VTEwsIE5VTEwpOwotICAgICAgICBpZiAocmMpIHsKLSAgICAgICAgICAgICAgICBQUklOVF9FUlIoIkVycm9yIGluIHByb2Nlc3NpbmcgVkxBTiAlaSBvbiAlczogMHgleC4gIgotCQkJICAiQ29udGludWluZ1xuIixpLCBRRVRIX0NBUkRfSUZOQU1FKGNhcmQpLCByYyk7Ci0JCVFFVEhfREJGX1RFWFRfKHRyYWNlLCAyLCAiTDJWTCU0eCIsIGlwYWNtZCk7Ci0JCVFFVEhfREJGX1RFWFRfKHRyYWNlLCAyLCAiTDIlcyIsIENBUkRfQlVTX0lEKGNhcmQpKTsKLQkJUUVUSF9EQkZfVEVYVF8odHJhY2UsIDIsICJlcnIlZCIsIHJjKTsKLSAgICAgICAgfQorCXJldHVybiBxZXRoX3NlbmRfaXBhX2NtZChjYXJkLCBpb2IsIAorCQkJCSBxZXRoX2xheWVyMl9zZW5kX3NldGRlbHZsYW5fY2IsIE5VTEwpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtNTQyMCw4ICs1NDk0LDcgQEAKIAlxZXRoX2ZyZWVfdmxhbl9za2JzKGNhcmQsIHZpZCk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPnZsYW5sb2NrLCBmbGFncyk7CiAJLyogdW5yZWdpc3RlciBJUCBhZGRyZXNzZXMgb2YgdmxhbiBkZXZpY2UgKi8KLQlxZXRoX2ZyZWVfdmxhbl9hZGRyZXNzZXM0KGNhcmQsIHZpZCk7Ci0JcWV0aF9mcmVlX3ZsYW5fYWRkcmVzc2VzNihjYXJkLCB2aWQpOworCXFldGhfZnJlZV92bGFuX2FkZHJlc3NlcyhjYXJkLCB2aWQpOwogCWlmIChjYXJkLT52bGFuZ3JwKQogCQljYXJkLT52bGFuZ3JwLT52bGFuX2RldmljZXNbdmlkXSA9IE5VTEw7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+dmxhbmxvY2ssIGZsYWdzKTsKQEAgLTU0MzAsNiArNTUwMyw1OSBAQAogCXFldGhfc2V0X211bHRpY2FzdF9saXN0KGNhcmQtPmRldik7CiB9CiAjZW5kaWYKKy8qKgorICogRXhhbWluZSBoYXJkd2FyZSByZXNwb25zZSB0byBTRVRfUFJPTUlTQ19NT0RFCisgKi8KK3N0YXRpYyBpbnQKK3FldGhfc2V0YWRwX3Byb21pc2NfbW9kZV9jYihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCAKKwkJCSAgICBzdHJ1Y3QgcWV0aF9yZXBseSAqcmVwbHksCisJCQkgICAgdW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBxZXRoX2lwYV9jbWQgKmNtZDsKKwlzdHJ1Y3QgcWV0aF9pcGFjbWRfc2V0YWRwcGFybXMgKnNldHBhcm1zOworCisJUUVUSF9EQkZfVEVYVCh0cmFjZSw0LCJwcm1hZHBjYiIpOworCisJY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikgZGF0YTsKKwlzZXRwYXJtcyA9ICYoY21kLT5kYXRhLnNldGFkYXB0ZXJwYXJtcyk7CisJCisgICAgICAgIHFldGhfZGVmYXVsdF9zZXRhZGFwdGVycGFybXNfY2IoY2FyZCwgcmVwbHksICh1bnNpZ25lZCBsb25nKWNtZCk7CisJaWYgKGNtZC0+aGRyLnJldHVybl9jb2RlKSB7IAorCQlRRVRIX0RCRl9URVhUXyh0cmFjZSw0LCJwcm1yYyUyLjJ4IixjbWQtPmhkci5yZXR1cm5fY29kZSk7CQorCQlzZXRwYXJtcy0+ZGF0YS5tb2RlID0gU0VUX1BST01JU0NfTU9ERV9PRkY7CisJfQorCWNhcmQtPmluZm8ucHJvbWlzY19tb2RlID0gc2V0cGFybXMtPmRhdGEubW9kZTsKKwlyZXR1cm4gMDsKK30KKy8qCisgKiBTZXQgcHJvbWlzY3VvdXMgbW9kZSAob24gb3Igb2ZmKSAoU0VUX1BST01JU0NfTU9ERSBjb21tYW5kKQorICovCitzdGF0aWMgdm9pZAorcWV0aF9zZXRhZHBfcHJvbWlzY19tb2RlKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpCit7CisJZW51bSBxZXRoX2lwYV9wcm9taXNjX21vZGVzIG1vZGU7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGNhcmQtPmRldjsKKwlzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICppb2I7CisJc3RydWN0IHFldGhfaXBhX2NtZCAqY21kOworCisJUUVUSF9EQkZfVEVYVCh0cmFjZSwgNCwgInNldHByb20iKTsKKworCWlmICgoKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgJiYKKwkgICAgIChjYXJkLT5pbmZvLnByb21pc2NfbW9kZSA9PSBTRVRfUFJPTUlTQ19NT0RFX09OKSkgfHwKKwkgICAgKCEoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSAmJgorCSAgICAgKGNhcmQtPmluZm8ucHJvbWlzY19tb2RlID09IFNFVF9QUk9NSVNDX01PREVfT0ZGKSkpCisJCXJldHVybjsKKwltb2RlID0gU0VUX1BST01JU0NfTU9ERV9PRkY7CisJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykKKwkJbW9kZSA9IFNFVF9QUk9NSVNDX01PREVfT047CisJUUVUSF9EQkZfVEVYVF8odHJhY2UsIDQsICJtb2RlOiV4IiwgbW9kZSk7CisKKwlpb2IgPSBxZXRoX2dldF9hZGFwdGVyX2NtZChjYXJkLCBJUEFfU0VUQURQX1NFVF9QUk9NSVNDX01PREUsCisJCQlzaXplb2Yoc3RydWN0IHFldGhfaXBhY21kX3NldGFkcHBhcm1zKSk7CisJY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikoaW9iLT5kYXRhICsgSVBBX1BEVV9IRUFERVJfU0laRSk7CisJY21kLT5kYXRhLnNldGFkYXB0ZXJwYXJtcy5kYXRhLm1vZGUgPSBtb2RlOworCXFldGhfc2VuZF9pcGFfY21kKGNhcmQsIGlvYiwgcWV0aF9zZXRhZHBfcHJvbWlzY19tb2RlX2NiLCBOVUxMKTsKK30KIAogLyoqCiAgKiBzZXQgbXVsdGljYXN0IGFkZHJlc3Mgb24gY2FyZApAQCAtNTQ0NCwxMiArNTU3MCwyMiBAQAogCSAKIAlRRVRIX0RCRl9URVhUKHRyYWNlLDMsInNldG11bHRpIik7CiAJcWV0aF9kZWxldGVfbWNfYWRkcmVzc2VzKGNhcmQpOworCWlmIChjYXJkLT5vcHRpb25zLmxheWVyMikgeworCQlxZXRoX2xheWVyMl9hZGRfbXVsdGljYXN0KGNhcmQpOworCQlnb3RvIG91dDsKKwl9CiAJcWV0aF9hZGRfbXVsdGljYXN0X2lwdjQoY2FyZCk7CiAjaWZkZWYgQ09ORklHX1FFVEhfSVBWNgogCXFldGhfYWRkX211bHRpY2FzdF9pcHY2KGNhcmQpOwogI2VuZGlmCitvdXQ6CiAgCWlmIChxZXRoX3NldF90aHJlYWRfc3RhcnRfYml0KGNhcmQsIFFFVEhfU0VUX0lQX1RIUkVBRCkgPT0gMCkKIAkJc2NoZWR1bGVfd29yaygmY2FyZC0+a2VybmVsX3RocmVhZF9zdGFydGVyKTsKKwlpZiAoIXFldGhfYWRwX3N1cHBvcnRlZChjYXJkLCBJUEFfU0VUQURQX1NFVF9QUk9NSVNDX01PREUpKQorCQlyZXR1cm47CisJaWYgKHFldGhfc2V0X3RocmVhZF9zdGFydF9iaXQoY2FyZCwgUUVUSF9TRVRfUFJPTUlTQ19NT0RFX1RIUkVBRCk9PTApCisJCXNjaGVkdWxlX3dvcmsoJmNhcmQtPmtlcm5lbF90aHJlYWRfc3RhcnRlcik7CisKIH0KIAogc3RhdGljIGludApAQCAtNTY1Nyw2ICs1NzkzLDI0IEBACiAJaW5fZGV2X3B1dChpbjRfZGV2KTsKIH0KIAorc3RhdGljIHZvaWQKK3FldGhfbGF5ZXIyX2FkZF9tdWx0aWNhc3Qoc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKK3sKKwlzdHJ1Y3QgcWV0aF9pcGFkZHIgKmlwbTsKKwlzdHJ1Y3QgZGV2X21jX2xpc3QgKmRtOworCisJUUVUSF9EQkZfVEVYVCh0cmFjZSw0LCJMMmFkZG1jIik7CisJZm9yIChkbSA9IGNhcmQtPmRldi0+bWNfbGlzdDsgZG07IGRtID0gZG0tPm5leHQpIHsKKwkJaXBtID0gcWV0aF9nZXRfYWRkcl9idWZmZXIoUUVUSF9QUk9UX0lQVjQpOworCQlpZiAoIWlwbSkKKwkJCWNvbnRpbnVlOworCQltZW1jcHkoaXBtLT5tYWMsZG0tPmRtaV9hZGRyLE1BWF9BRERSX0xFTik7CisJCWlwbS0+aXNfbXVsdGljYXN0ID0gMTsKKwkJaWYgKCFxZXRoX2FkZF9pcChjYXJkLCBpcG0pKQorCQkJa2ZyZWUoaXBtKTsKKwl9Cit9CisKICNpZmRlZiBDT05GSUdfUUVUSF9JUFY2CiBzdGF0aWMgaW5saW5lIHZvaWQKIHFldGhfYWRkX21jNihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBzdHJ1Y3QgaW5ldDZfZGV2ICppbjZfZGV2KQpAQCAtNTgyNSwxMCArNTk3OSwxMCBAQAogCQlQUklOVF9XQVJOKCJFcnJvciBpbiByZWdpc3RlcmluZyBNQUMgYWRkcmVzcyBvbiAiIFwKIAkJCSAgICJkZXZpY2UgJXM6IHgleFxuIiwgQ0FSRF9CVVNfSUQoY2FyZCksCiAJCQkgICBjbWQtPmhkci5yZXR1cm5fY29kZSk7Ci0JCWNhcmQtPmluZm8ubGF5ZXIyX21hY19yZWdpc3RlcmVkID0gMDsKKwkJY2FyZC0+aW5mby5tYWNfYml0cyAmPSB+UUVUSF9MQVlFUjJfTUFDX1JFR0lTVEVSRUQ7CiAJCWNtZC0+aGRyLnJldHVybl9jb2RlID0gLUVJTzsKIAl9IGVsc2UgewotCQljYXJkLT5pbmZvLmxheWVyMl9tYWNfcmVnaXN0ZXJlZCA9IDE7CisJCWNhcmQtPmluZm8ubWFjX2JpdHMgfD0gUUVUSF9MQVlFUjJfTUFDX1JFR0lTVEVSRUQ7CiAJCW1lbWNweShjYXJkLT5kZXYtPmRldl9hZGRyLGNtZC0+ZGF0YS5zZXRkZWxtYWMubWFjLAogCQkgICAgICAgT1NBX0FERFJfTEVOKTsKIAkJUFJJTlRfSU5GTygiTUFDIGFkZHJlc3MgJTIuMng6JTIuMng6JTIuMng6JTIuMng6JTIuMng6JTIuMnggIgpAQCAtNTg2Niw3ICs2MDIwLDcgQEAKIAkJY21kLT5oZHIucmV0dXJuX2NvZGUgPSAtRUlPOwogCQlyZXR1cm4gMDsKIAl9Ci0JY2FyZC0+aW5mby5sYXllcjJfbWFjX3JlZ2lzdGVyZWQgPSAwOworCWNhcmQtPmluZm8ubWFjX2JpdHMgJj0gflFFVEhfTEFZRVIyX01BQ19SRUdJU1RFUkVEOwogCiAJcmV0dXJuIDA7CiB9CkBAIC01ODc0LDcgKzYwMjgsNyBAQAogcWV0aF9sYXllcjJfc2VuZF9kZWxtYWMoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgX191OCAqbWFjKQogewogCVFFVEhfREJGX1RFWFQodHJhY2UsIDIsICJMMkRlbG1hYyIpOwotCWlmICghY2FyZC0+aW5mby5sYXllcjJfbWFjX3JlZ2lzdGVyZWQpCisJaWYgKCEoY2FyZC0+aW5mby5tYWNfYml0cyAmIFFFVEhfTEFZRVIyX01BQ19SRUdJU1RFUkVEKSkKIAkJcmV0dXJuIDA7CiAJcmV0dXJuIHFldGhfbGF5ZXIyX3NlbmRfc2V0ZGVsbWFjKGNhcmQsIG1hYywgSVBBX0NNRF9ERUxWTUFDLAogCQkJCQkgIHFldGhfbGF5ZXIyX3NlbmRfZGVsbWFjX2NiKTsKQEAgLTU4OTYsNyArNjA1MCw3IEBACiAJY2FyZCA9IChzdHJ1Y3QgcWV0aF9jYXJkICopIGRldi0+cHJpdjsKIAogCWlmICghY2FyZC0+b3B0aW9ucy5sYXllcjIpIHsKLQkJUFJJTlRfV0FSTigiU2V0dGluZyBNQUMgYWRkcmVzcyBvbiAlcyBpcyBub3Qgc3VwcG9ydGVkIgorCQlQUklOVF9XQVJOKCJTZXR0aW5nIE1BQyBhZGRyZXNzIG9uICVzIGlzIG5vdCBzdXBwb3J0ZWQgIgogCQkJICAgImluIExheWVyIDMgbW9kZS5cbiIsIGRldi0+bmFtZSk7CiAJCVFFVEhfREJGX1RFWFQodHJhY2UsIDMsICJzZXRtY0xZMyIpOwogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CkBAIC02NDQxLDYgKzY1OTUsOCBAQAogCXJldHVybiAwOwogfQogCisKKwogc3RhdGljIGludAogcWV0aF9xdWVyeV9zZXRhZGFwdGVycGFybXNfY2Ioc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgc3RydWN0IHFldGhfcmVwbHkgKnJlcGx5LAogCQkJICAgICAgdW5zaWduZWQgbG9uZyBkYXRhKQpAQCAtNjQ4MSw4ICs2NjM3LDEzIEBACiAJUUVUSF9EQkZfVEVYVCh0cmFjZSw0LCJjaGdtYWNjYiIpOwogCiAJY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikgZGF0YTsKLQltZW1jcHkoY2FyZC0+ZGV2LT5kZXZfYWRkciwKLQkgICAgICAgJmNtZC0+ZGF0YS5zZXRhZGFwdGVycGFybXMuZGF0YS5jaGFuZ2VfYWRkci5hZGRyLE9TQV9BRERSX0xFTik7CisJaWYgKCFjYXJkLT5vcHRpb25zLmxheWVyMiB8fCBjYXJkLT5pbmZvLmd1ZXN0bGFuIHx8CisJICAgICEoY2FyZC0+aW5mby5tYWNfYml0cyAmIFFFVEhfTEFZRVIyX01BQ19SRUFEKSkgewkKKwkJbWVtY3B5KGNhcmQtPmRldi0+ZGV2X2FkZHIsCisJCSAgICAgICAmY21kLT5kYXRhLnNldGFkYXB0ZXJwYXJtcy5kYXRhLmNoYW5nZV9hZGRyLmFkZHIsCisJCSAgICAgICBPU0FfQUREUl9MRU4pOworCQljYXJkLT5pbmZvLm1hY19iaXRzIHw9IFFFVEhfTEFZRVIyX01BQ19SRUFEOworCX0KIAlxZXRoX2RlZmF1bHRfc2V0YWRhcHRlcnBhcm1zX2NiKGNhcmQsIHJlcGx5LCAodW5zaWduZWQgbG9uZykgY21kKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTY2MDIsNiArNjc2MywxMiBAQAogICAgICAgICBRRVRIX0RCRl9URVhUKHNldHVwLCAyLCAiZG9MMmluaXQiKTsKICAgICAgICAgUUVUSF9EQkZfVEVYVF8oc2V0dXAsIDIsICJkb0wyJXMiLCBDQVJEX0JVU19JRChjYXJkKSk7CiAKKwlyYyA9IHFldGhfcXVlcnlfc2V0YWRhcHRlcnBhcm1zKGNhcmQpOworCWlmIChyYykgeworCQlQUklOVF9XQVJOKCJjb3VsZCBub3QgcXVlcnkgYWRhcHRlciBwYXJhbWV0ZXJzIG9uIGRldmljZSAlczogIgorCQkJICAgIngleFxuIiwgQ0FSRF9CVVNfSUQoY2FyZCksIHJjKTsKKwl9CisKIAlyYyA9IHFldGhfc2V0YWRwcGFybXNfY2hhbmdlX21hY2FkZHIoY2FyZCk7CiAJaWYgKHJjKSB7CiAJCVBSSU5UX1dBUk4oImNvdWxkbid0IGdldCBNQUMgYWRkcmVzcyBvbiAiCkBAIC04NTQ4LDcgKzg3MTUsNyBAQAogRVhQT1JUX1NZTUJPTChxZXRoX29zbl9hc3Npc3QpOwogbW9kdWxlX2luaXQocWV0aF9pbml0KTsKIG1vZHVsZV9leGl0KHFldGhfZXhpdCk7Ci1NT0RVTEVfQVVUSE9SKCJGcmFuayBQYXZsaWMgPHBhdmxpY0BkZS5pYm0uY29tPiIpOworTU9EVUxFX0FVVEhPUigiRnJhbmsgUGF2bGljIDxmcGF2bGljQGRlLmlibS5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkxpbnV4IG9uIHpTZXJpZXMgT1NBIEV4cHJlc3MgYW5kIEhpcGVyU29ja2V0cyBzdXBwb3J0XG4iIFwKIAkJICAgICAgICAgICAgICAgICAgICAgICJDb3B5cmlnaHQgMjAwMCwyMDAzIElCTSBDb3Jwb3JhdGlvblxuIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9tcGMuYyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9tcGMuYwppbmRleCAzMGUwNTNkLi5mMGEwODBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbXBjLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX21wYy5jCkBAIC00LDcgKzQsNyBAQAogICogTGludXggb24gelNlcmllcyBPU0EgRXhwcmVzcyBhbmQgSGlwZXJTb2NrZXRzIHN1cHBvcnQKICAqCiAgKiBDb3B5cmlnaHQgMjAwMCwyMDAzIElCTSBDb3Jwb3JhdGlvbgotICogQXV0aG9yKHMpOiBGcmFuayBQYXZsaWMgPHBhdmxpY0BkZS5pYm0uY29tPgorICogQXV0aG9yKHMpOiBGcmFuayBQYXZsaWMgPGZwYXZsaWNAZGUuaWJtLmNvbT4KICAqIAkgICAgICBUaG9tYXMgU3BhdHppZXIgPHRzcGF0QGRlLmlibS5jb20+CiAgKgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbXBjLmggYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbXBjLmgKaW5kZXggN2VkYzVmMS4uNWY3MTQ4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX21wYy5oCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9tcGMuaApAQCAtNiw3ICs2LDcgQEAKICAqIENvcHlyaWdodCAyMDAwLDIwMDMgSUJNIENvcnBvcmF0aW9uCiAgKiBBdXRob3Iocyk6IFV0eiBCYWNoZXIgPHV0ei5iYWNoZXJAZGUuaWJtLmNvbT4KICAqICAgICAgICAgICAgVGhvbWFzIFNwYXR6aWVyIDx0c3BhdEBkZS5pYm0uY29tPgotICogICAgICAgICAgICBGcmFuayBQYXZsaWMgPHBhdmxpY0BkZS5pYm0uY29tPgorICogICAgICAgICAgICBGcmFuayBQYXZsaWMgPGZwYXZsaWNAZGUuaWJtLmNvbT4KICAqCiAgKi8KICNpZm5kZWYgX19RRVRIX01QQ19IX18KQEAgLTE0LDcgKzE0LDcgQEAKIAogI2luY2x1ZGUgPGFzbS9xZXRoLmg+CiAKLSNkZWZpbmUgVkVSU0lPTl9RRVRIX01QQ19IICIkUmV2aXNpb246IDEuNDMgJCIKKyNkZWZpbmUgVkVSU0lPTl9RRVRIX01QQ19IICIkUmV2aXNpb246IDEuNDQgJCIKIAogZXh0ZXJuIGNvbnN0IGNoYXIgKlZFUlNJT05fUUVUSF9NUENfQzsKIApAQCAtMjE3LDcgKzIxNyw3IEBACiAJSVBBX1NFVEFEUF9TRU5EX09TQV9NRVNTQUdFIAkJPSAweDAxMDAsCiAJSVBBX1NFVEFEUF9TRVRfU05NUF9DT05UUk9MIAkJPSAweDAyMDAsCiAJSVBBX1NFVEFEUF9SRUFEX1NOTVBfUEFSTVMgCQk9IDB4MDQwMCwKLQlJUEFfU0VUQURQX1dSSVRFX1NOTVBfUEFSTVMgCQk9IDB4MDgwMCwKKwlJUEFfU0VUQURQX1NFVF9QUk9NSVNDX01PREUJCT0gMHgwODAwLAogCUlQQV9TRVRBRFBfUVVFUllfQ0FSRF9JTkZPIAkJPSAweDEwMDAsCiB9OwogZW51bSBxZXRoX2lwYV9tYWNfb3BzIHsKQEAgLTIzMiw5ICsyMzIsMTIgQEAKIAlDSEFOR0VfQUREUl9BRERfQUREUiAJCT0gMSwKIAlDSEFOR0VfQUREUl9ERUxfQUREUiAJCT0gMiwKIAlDSEFOR0VfQUREUl9GTFVTSF9BRERSX1RBQkxFIAk9IDQsCi0KLQogfTsKK2VudW0gcWV0aF9pcGFfcHJvbWlzY19tb2RlcyB7CisJU0VUX1BST01JU0NfTU9ERV9PRkYJCT0gMCwKKwlTRVRfUFJPTUlTQ19NT0RFX09OCQk9IDEsCit9OworCiAvKiAoU0VUKURFTElQKE0pIElQQSBzdHVmZiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdHJ1Y3QgcWV0aF9pcGFjbWRfc2V0ZGVsaXA0IHsKIAlfX3U4ICAgaXBfYWRkcls0XTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9zeXMuYyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9zeXMuYwppbmRleCBmOTFhMDJkLi5kZGQ2MDE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfc3lzLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX3N5cy5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqCi0gKiBsaW51eC9kcml2ZXJzL3MzOTAvbmV0L3FldGhfc3lzLmMgKCRSZXZpc2lvbjogMS41NSAkKQorICogbGludXgvZHJpdmVycy9zMzkwL25ldC9xZXRoX3N5cy5jICgkUmV2aXNpb246IDEuNTggJCkKICAqCiAgKiBMaW51eCBvbiB6U2VyaWVzIE9TQSBFeHByZXNzIGFuZCBIaXBlclNvY2tldHMgc3VwcG9ydAogICogVGhpcyBmaWxlIGNvbnRhaW5zIGNvZGUgcmVsYXRlZCB0byBzeXNmcy4KQEAgLTgsNyArOCw3IEBACiAgKiBDb3B5cmlnaHQgMjAwMCwyMDAzIElCTSBDb3Jwb3JhdGlvbgogICoKICAqIEF1dGhvcihzKTogVGhvbWFzIFNwYXR6aWVyIDx0c3BhdEBkZS5pYm0uY29tPgotICogCSAgICAgIEZyYW5rIFBhdmxpYyA8cGF2bGljQGRlLmlibS5jb20+CisgKiAJICAgICAgRnJhbmsgUGF2bGljIDxmcGF2bGljQGRlLmlibS5jb20+CiAgKgogICovCiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgpAQCAtMjAsNyArMjAsNyBAQAogI2luY2x1ZGUgInFldGhfbXBjLmgiCiAjaW5jbHVkZSAicWV0aF9mcy5oIgogCi1jb25zdCBjaGFyICpWRVJTSU9OX1FFVEhfU1lTX0MgPSAiJFJldmlzaW9uOiAxLjU1ICQiOworY29uc3QgY2hhciAqVkVSU0lPTl9RRVRIX1NZU19DID0gIiRSZXZpc2lvbjogMS41OCAkIjsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMTExNyw3ICsxMTE3LDcgQEAKIAlzdGFydCA9IGJ1ZjsKIAkvKiBnZXQgYWRkcmVzcyBzdHJpbmcgKi8KIAllbmQgPSBzdHJjaHIoc3RhcnQsICcvJyk7Ci0JaWYgKCFlbmQpeworCWlmICghZW5kIHx8IChlbmQtc3RhcnQgPj0gNDkpKXsKIAkJUFJJTlRfV0FSTigiSW52YWxpZCBmb3JtYXQgZm9yIGlwYXRvX2FkZHgvZGVseC4gIgogCQkJICAgIlVzZSA8aXAgYWRkcj4vPG1hc2sgYml0cz5cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF90c28uaCBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF90c28uaAppbmRleCBhZDMzZTZmLi5lMjQ1YWYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfdHNvLmgKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX3Rzby5oCkBAIC01LDcgKzUsNyBAQAogICoKICAqIENvcHlyaWdodCAyMDA0IElCTSBDb3Jwb3JhdGlvbgogICoKLSAqICAgIEF1dGhvcihzKTogRnJhbmsgUGF2bGljIDxwYXZsaWNAZGUuaWJtLmNvbT4KKyAqICAgIEF1dGhvcihzKTogRnJhbmsgUGF2bGljIDxmcGF2bGljQGRlLmlibS5jb20+CiAgKgogICogICAgJFJldmlzaW9uOiAxLjcgJAkgJERhdGU6IDIwMDUvMDUvMDQgMjA6MTk6MTggJAogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zMzkwbWFjaC5oIGIvZHJpdmVycy9zMzkwL3MzOTBtYWNoLmgKaW5kZXggNGVhYTcwMS4uZDllYTdlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3MzOTBtYWNoLmgKKysrIGIvZHJpdmVycy9zMzkwL3MzOTBtYWNoLmgKQEAgLTg4LDcgKzg4LDcgQEAKICNkZWZpbmUgQ1JXX0VSQ19QRVJSSSAgICAweDA3IC8qIHBlcm0uIGVycm9yLCBmYWNpbGl0eSBpbml0ICovCiAjZGVmaW5lIENSV19FUkNfUE1PRCAgICAgMHgwOCAvKiBpbnN0YWxsZWQgcGFyYW1ldGVycyBtb2RpZmllZCAqLwogCi1leHRlcm4gX19pbmxpbmVfXyBpbnQgc3Rjcncoc3RydWN0IGNydyAqcGNydyApCitzdGF0aWMgaW5saW5lIGludCBzdGNydyhzdHJ1Y3QgY3J3ICpwY3J3ICkKIHsKICAgICAgICAgaW50IGNjb2RlOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NidXMvY2hhci9jcHdhdGNoZG9nLmMgYi9kcml2ZXJzL3NidXMvY2hhci9jcHdhdGNoZG9nLmMKaW5kZXggMDcxYWUyNC4uZmQyY2M3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zYnVzL2NoYXIvY3B3YXRjaGRvZy5jCisrKyBiL2RyaXZlcnMvc2J1cy9jaGFyL2Nwd2F0Y2hkb2cuYwpAQCAtNDA3LDcgKzQwNyw3IEBACiAJY2FzZSBXSU9DR1NUQVQ6CiAJCWxvY2tfa2VybmVsKCk7CiAJCXJ2YWwgPSB3ZF9pb2N0bChmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSwgZmlsZSwgY21kLCBhcmcpOwotCQlsb2NrX2tlcm5lbCgpOworCQl1bmxvY2tfa2VybmVsKCk7CiAJCWJyZWFrOwogCS8qIGV2ZXJ5dGhpbmcgZWxzZSBpcyBoYW5kbGVkIGJ5IHRoZSBnZW5lcmljIGNvbXBhdCBsYXllciAqLwogCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NidXMvY2hhci9kaXNwbGF5N3NlZy5jIGIvZHJpdmVycy9zYnVzL2NoYXIvZGlzcGxheTdzZWcuYwppbmRleCAzOWY1NDIxLi5jM2E1MWQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NidXMvY2hhci9kaXNwbGF5N3NlZy5jCisrKyBiL2RyaXZlcnMvc2J1cy9jaGFyL2Rpc3BsYXk3c2VnLmMKQEAgLTExOSw3ICsxMTksNyBAQAogewogCV9fdTggcmVncyA9IHJlYWRiKGQ3c19yZWdzKTsKIAlfX3U4IGlyZWcgPSAwOwotCWludCBlcnJvciA9IDAKKwlpbnQgZXJyb3IgPSAwOwogCiAJaWYgKEQ3U19NSU5PUiAhPSBpbWlub3IoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpKQogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTE2MSw3ICsxNjEsNyBAQAogCQl3cml0ZWIocmVncywgZDdzX3JlZ3MpOwogCQlicmVhazsKIAl9OwotCWxvY2tfa2VybmVsKCk7CisJdW5sb2NrX2tlcm5lbCgpOwogCiAJcmV0dXJuIGVycm9yOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zYnVzL2NoYXIvb3BlbnByb20uYyBiL2RyaXZlcnMvc2J1cy9jaGFyL29wZW5wcm9tLmMKaW5kZXggNTAyOGFjMi4uMzgzYTk1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zYnVzL2NoYXIvb3BlbnByb20uYworKysgYi9kcml2ZXJzL3NidXMvY2hhci9vcGVucHJvbS5jCkBAIC01OTYsNiArNTk2LDggQEAKIAkJbG9ja19rZXJuZWwoKTsKIAkJYnJlYWs7CiAJfQorCisJcmV0dXJuIHJ2YWw7CiB9CiAKIHN0YXRpYyBpbnQgb3BlbnByb21fb3BlbihzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgc3RydWN0IGZpbGUgKiBmaWxlKQpAQCAtNjIzLDYgKzYyNSw3IEBACiAJLm93bmVyID0JVEhJU19NT0RVTEUsCiAJLmxsc2VlayA9CW5vX2xsc2VlaywKIAkuaW9jdGwgPQlvcGVucHJvbV9pb2N0bCwKKwkuY29tcGF0X2lvY3RsID0Jb3BlbnByb21fY29tcGF0X2lvY3RsLAogCS5vcGVuID0JCW9wZW5wcm9tX29wZW4sCiAJLnJlbGVhc2UgPQlvcGVucHJvbV9yZWxlYXNlLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2J1cy9jaGFyL3J0Yy5jIGIvZHJpdmVycy9zYnVzL2NoYXIvcnRjLmMKaW5kZXggOWI5ODhiYS4uNTc3NGJkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zYnVzL2NoYXIvcnRjLmMKKysrIGIvZHJpdmVycy9zYnVzL2NoYXIvcnRjLmMKQEAgLTIxMCw2ICsyMTAsMjcgQEAKIAl9CiB9CiAKK3N0YXRpYyBsb25nIHJ0Y19jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCisJdW5zaWduZWQgbG9uZyBhcmcpCit7CisJaW50IHJ2YWwgPSAtRU5PSU9DVExDTUQ7CisKKwlzd2l0Y2ggKGNtZCkgeworCS8qCisJICogVGhlc2UgdHdvIGFyZSBzcGVjaWZpYyB0byB0aGlzIGRyaXZlciwgdGhlIGdlbmVyaWMgcnRjIGlvY3RscworCSAqIGFyZSBoYW5sZGVkIGVsc2V3aGVyZS4KKwkgKi8KKwljYXNlIFJUQ0dFVDoKKwljYXNlIFJUQ1NFVDoKKwkJbG9ja19rZXJuZWwoKTsKKwkJcnZhbCA9IHJ0Y19pb2N0bChmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSwgZmlsZSwgY21kLCBhcmcpOworCQl1bmxvY2tfa2VybmVsKCk7CisJCWJyZWFrOworCX0KKworCXJldHVybiBydmFsOworfQorCiBzdGF0aWMgaW50IHJ0Y19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewogCWludCByZXQ7CkBAIC0yMzcsNiArMjU4LDcgQEAKIAkub3duZXIgPQlUSElTX01PRFVMRSwKIAkubGxzZWVrID0Jbm9fbGxzZWVrLAogCS5pb2N0bCA9CXJ0Y19pb2N0bCwKKwkuY29tcGF0X2lvY3RsID0JcnRjX2NvbXBhdF9pb2N0bCwKIAkub3BlbiA9CQlydGNfb3BlbiwKIAkucmVsZWFzZSA9CXJ0Y19yZWxlYXNlLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS8zdy14eHh4LmggYi9kcml2ZXJzL3Njc2kvM3cteHh4eC5oCmluZGV4IDk4YmFkNzcuLjRmODFmYzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS8zdy14eHh4LmgKKysrIGIvZHJpdmVycy9zY3NpLzN3LXh4eHguaApAQCAtNTQsNyArNTQsNiBAQAogI2lmbmRlZiBfM1dfWFhYWF9ICiAjZGVmaW5lIF8zV19YWFhYX0gKIAotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAvKiBBRU4gc3RyaW5ncyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpLzUzYzd4eC5jIGIvZHJpdmVycy9zY3NpLzUzYzd4eC5jCmluZGV4IDdhMzNjNzAuLjljYjVkZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS81M2M3eHguYworKysgYi9kcml2ZXJzL3Njc2kvNTNjN3h4LmMKQEAgLTM0Myw3ICszNDMsNyBAQAogLyogU2l6ZSBvZiBldmVudCBsaXN0IChwZXIgaG9zdCBhZGFwdGVyKSAqLwogc3RhdGljIGludCB0cmFja19ldmVudHMgPSAwOwogc3RhdGljIHN0cnVjdCBTY3NpX0hvc3QgKmZpcnN0X2hvc3QgPSBOVUxMOwkvKiBIZWFkIG9mIGxpc3Qgb2YgTkNSIGJvYXJkcyAqLwotc3RhdGljIFNjc2lfSG9zdF9UZW1wbGF0ZSAqdGhlX3RlbXBsYXRlID0gTlVMTDsJCitzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqdGhlX3RlbXBsYXRlID0gTlVMTDsKIAogLyogTkNSNTNjNzEwIHNjcmlwdCBoYW5kbGluZyBjb2RlICovCiAKQEAgLTExMDMsNyArMTEwMyw3IEBACiB9CiAKIC8qIAotICogRnVuY3Rpb24gOiBpbnQgbmNyNTNjN3h4X2luaXQoU2NzaV9Ib3N0X1RlbXBsYXRlICp0cG50LCBpbnQgYm9hcmQsIGludCBjaGlwLAorICogRnVuY3Rpb24gOiBpbnQgbmNyNTNjN3h4X2luaXQoc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqdHBudCwgaW50IGJvYXJkLCBpbnQgY2hpcCwKICAqCXVuc2lnbmVkIGxvbmcgYmFzZSwgaW50IGlvX3BvcnQsIGludCBpcnEsIGludCBkbWEsIGxvbmcgbG9uZyBvcHRpb25zLAogICoJaW50IGNsb2NrKTsKICAqCkBAIC0xMTE4LDcgKzExMTgsNyBAQAogICovCiAKIGludCAKLW5jcjUzYzd4eF9pbml0IChTY3NpX0hvc3RfVGVtcGxhdGUgKnRwbnQsIGludCBib2FyZCwgaW50IGNoaXAsCituY3I1M2M3eHhfaW5pdCAoc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqdHBudCwgaW50IGJvYXJkLCBpbnQgY2hpcCwKICAgICB1bnNpZ25lZCBsb25nIGJhc2UsIGludCBpb19wb3J0LCBpbnQgaXJxLCBpbnQgZG1hLCAKICAgICBsb25nIGxvbmcgb3B0aW9ucywgaW50IGNsb2NrKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpLzUzYzd4eC5oIGIvZHJpdmVycy9zY3NpLzUzYzd4eC5oCmluZGV4IGQ5MDk4YmQuLjIxOGYzYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS81M2M3eHguaAorKysgYi9kcml2ZXJzL3Njc2kvNTNjN3h4LmgKQEAgLTE2MDAsNyArMTYwMCw3IEBACiAvKiBQYXJhbm9pZCBwZW9wbGUgY291bGQgdXNlIHBhbmljKCkgaGVyZS4gKi8KICNkZWZpbmUgRkFUQUwoaG9zdCkgc2h1dGRvd24oKGhvc3QpKTsKIAotZXh0ZXJuIGludCBuY3I1M2M3eHhfaW5pdChTY3NpX0hvc3RfVGVtcGxhdGUgKnRwbnQsIGludCBib2FyZCwgaW50IGNoaXAsCitleHRlcm4gaW50IG5jcjUzYzd4eF9pbml0KHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKnRwbnQsIGludCBib2FyZCwgaW50IGNoaXAsCiAJCQkgIHVuc2lnbmVkIGxvbmcgYmFzZSwgaW50IGlvX3BvcnQsIGludCBpcnEsIGludCBkbWEsCiAJCQkgIGxvbmcgbG9uZyBvcHRpb25zLCBpbnQgY2xvY2spOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvS2NvbmZpZyBiL2RyaXZlcnMvc2NzaS9LY29uZmlnCmluZGV4IGFmZWNhMzIuLjg0YzQyYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9LY29uZmlnCisrKyBiL2RyaXZlcnMvc2NzaS9LY29uZmlnCkBAIC0xMjk1LDI3ICsxMjk1LDYgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHFsb2dpY2Zhcy4KIAotY29uZmlnIFNDU0lfUUxPR0lDX0lTUAotCXRyaXN0YXRlICJRbG9naWMgSVNQIFNDU0kgc3VwcG9ydCAob2xkIGRyaXZlcikiCi0JZGVwZW5kcyBvbiBQQ0kgJiYgU0NTSSAmJiBCUk9LRU4KLQktLS1oZWxwLS0tCi0JICBUaGlzIGRyaXZlciB3b3JrcyBmb3IgYWxsIFFMb2dpYyBQQ0kgU0NTSSBob3N0IGFkYXB0ZXJzIChJUS1QQ0ksCi0JICBJUS1QQ0ktMTAsIElRX1BDSS1EKSBleGNlcHQgZm9yIHRoZSBQQ0ktYmFzaWMgY2FyZC4gIChUaGlzIGxhdHRlcgotCSAgY2FyZCBpcyBzdXBwb3J0ZWQgYnkgdGhlICJBTTUzLzc5Qzk3NCBQQ0kgU0NTSSIgZHJpdmVyLikKLQotCSAgSWYgeW91IHNheSBZIGhlcmUsIG1ha2Ugc3VyZSB0byBjaG9vc2UgIkJJT1MiIGF0IHRoZSBxdWVzdGlvbiAiUENJCi0JICBhY2Nlc3MgbW9kZSIuCi0KLQkgIFBsZWFzZSByZWFkIHRoZSBmaWxlIDxmaWxlOkRvY3VtZW50YXRpb24vc2NzaS9xbG9naWNpc3AudHh0Pi4gIFlvdQotCSAgc2hvdWxkIGFsc28gcmVhZCB0aGUgU0NTSS1IT1dUTywgYXZhaWxhYmxlIGZyb20KLQkgIDxodHRwOi8vd3d3LnRsZHAub3JnL2RvY3MuaHRtbCNob3d0bz4uCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHFsb2dpY2lzcC4KLQotCSAgVGhlc2UgZGF5cyB0aGUgaGFyZHdhcmUgaXMgYWxzbyBzdXBwb3J0ZWQgYnkgdGhlIG1vcmUgbW9kZXJuIHFsYTEyODAKLQkgIGRyaXZlci4gIEluIGRvdWJ0IHVzZSB0aGF0IG9uZSBpbnN0ZWFkIG9mIHFsb2dpY2lzcC4KLQogY29uZmlnIFNDU0lfUUxPR0lDX0ZDCiAJdHJpc3RhdGUgIlFsb2dpYyBJU1AgRkMgU0NTSSBzdXBwb3J0IgogCWRlcGVuZHMgb24gUENJICYmIFNDU0kKQEAgLTEzNDIsMTQgKzEzMjEsNiBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcWxhMTI4MC4KIAotY29uZmlnIFNDU0lfUUxPR0lDXzEyODBfMTA0MAotCWJvb2wgIlFsb2dpYyBRTEEgMTAyMC8xMDQwIFNDU0kgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFNDU0lfUUxPR0lDXzEyODAgJiYgU0NTSV9RTE9HSUNfSVNQIT15Ci0JaGVscAotCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhIFFMb2dpYyBJU1AxMDIwLzEwNDAgU0NTSSBob3N0IGFkYXB0ZXIgYW5kCi0JICBkbyBub3Qgd2FudCB0byB1c2UgdGhlIG9sZCBkcml2ZXIuICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgaW4KLQkgIHRoZSBxbGExMjgwIGRyaXZlciBmb3IgdGhvc2UgaG9zdCBhZGFwdGVycy4KLQogY29uZmlnIFNDU0lfUUxPR0lDUFRJCiAJdHJpc3RhdGUgIlBUSSBRbG9naWMsIElTUCBEcml2ZXIiCiAJZGVwZW5kcyBvbiBTQlVTICYmIFNDU0kKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9NYWtlZmlsZSBiL2RyaXZlcnMvc2NzaS9NYWtlZmlsZQppbmRleCBiODhiOGM0Li5mMDYyZWEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zY3NpL01ha2VmaWxlCkBAIC03OCw3ICs3OCw2IEBACiBvYmotJChDT05GSUdfU0NTSV9TWU01M0M0MTYpCSs9IHN5bTUzYzQxNi5vCiBvYmotJChDT05GSUdfU0NTSV9RTE9HSUNfRkFTKQkrPSBxbG9naWNmYXM0MDgubwlxbG9naWNmYXMubwogb2JqLSQoQ09ORklHX1BDTUNJQV9RTE9HSUMpCSs9IHFsb2dpY2ZhczQwOC5vCi1vYmotJChDT05GSUdfU0NTSV9RTE9HSUNfSVNQKQkrPSBxbG9naWNpc3AubyAKIG9iai0kKENPTkZJR19TQ1NJX1FMT0dJQ19GQykJKz0gcWxvZ2ljZmMubyAKIG9iai0kKENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwKQkrPSBxbGExMjgwLm8gCiBvYmotJChDT05GSUdfU0NTSV9RTEEyWFhYKQkrPSBxbGEyeHh4LwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL05DUjUzQzl4LmMgYi9kcml2ZXJzL3Njc2kvTkNSNTNDOXguYwppbmRleCAyNjE0NmE0Li42NDA1OTBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvTkNSNTNDOXguYworKysgYi9kcml2ZXJzL3Njc2kvTkNSNTNDOXguYwpAQCAtNTI5LDcgKzUyOSw3IEBACiAvKiBBbGxvY2F0ZSBzdHJ1Y3R1cmUgYW5kIGluc2VydCBiYXNpYyBkYXRhIHN1Y2ggYXMgU0NTSSBjaGlwIGZyZXF1ZW5jeQogICogZGF0YSBhbmQgYSBwb2ludGVyIHRvIHRoZSBkZXZpY2UKICAqLwotc3RydWN0IE5DUl9FU1AqIGVzcF9hbGxvY2F0ZShTY3NpX0hvc3RfVGVtcGxhdGUgKnRwbnQsIHZvaWQgKmVzcF9kZXYpCitzdHJ1Y3QgTkNSX0VTUCogZXNwX2FsbG9jYXRlKHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKnRwbnQsIHZvaWQgKmVzcF9kZXYpCiB7CiAJc3RydWN0IE5DUl9FU1AgKmVzcCwgKmVsaW5rOwogCXN0cnVjdCBTY3NpX0hvc3QgKmVzcF9ob3N0OwpAQCAtMTAwNiw3ICsxMDA2LDcgQEAKIAlzdHJ1Y3QgRVNQX3JlZ3MgKmVyZWdzID0gZXNwLT5lcmVnczsKIAlzdHJ1Y3QgZXNwX2RldmljZSAqZXNwX2RldjsKIAlTY3NpX0NtbmQgKlNDcHRyOwotCVNjc2lfRGV2aWNlICpTRHB0cjsKKwlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKlNEcHRyOwogCXZvbGF0aWxlIHVuY2hhciAqY21kcCA9IGVzcC0+ZXNwX2NvbW1hbmQ7CiAJdW5zaWduZWQgY2hhciB0aGVfZXNwX2NvbW1hbmQ7CiAJaW50IGx1biwgdGFyZ2V0OwpAQCAtMTY4Nyw3ICsxNjg3LDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBlc3BfY29ubmVjdChzdHJ1Y3QgTkNSX0VTUCAqZXNwLCBzdHJ1Y3QgRVNQX3JlZ3MgKmVyZWdzLAogCQkJICAgICAgIFNjc2lfQ21uZCAqc3ApCiB7Ci0JU2NzaV9EZXZpY2UgKmRwID0gc3AtPmRldmljZTsKKwlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKmRwID0gc3AtPmRldmljZTsKIAlzdHJ1Y3QgZXNwX2RldmljZSAqZXNwX2RldiA9IGRwLT5ob3N0ZGF0YTsKIAogCWlmKGVzcC0+cHJldl9zb2ZmICAhPSBlc3BfZGV2LT5zeW5jX21heF9vZmZzZXQgfHwKQEAgLTM2MDUsNyArMzYwNSw3IEBACiB9CiAjZW5kaWYKIAotaW50IGVzcF9zbGF2ZV9hbGxvYyhTY3NpX0RldmljZSAqU0RwdHIpCitpbnQgZXNwX3NsYXZlX2FsbG9jKHN0cnVjdCBzY3NpX2RldmljZSAqU0RwdHIpCiB7CiAJc3RydWN0IGVzcF9kZXZpY2UgKmVzcF9kZXYgPQogCQlrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZXNwX2RldmljZSksIEdGUF9BVE9NSUMpOwpAQCAtMzYxNyw3ICszNjE3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBlc3Bfc2xhdmVfZGVzdHJveShTY3NpX0RldmljZSAqU0RwdHIpCit2b2lkIGVzcF9zbGF2ZV9kZXN0cm95KHN0cnVjdCBzY3NpX2RldmljZSAqU0RwdHIpCiB7CiAJc3RydWN0IE5DUl9FU1AgKmVzcCA9IChzdHJ1Y3QgTkNSX0VTUCAqKSBTRHB0ci0+aG9zdC0+aG9zdGRhdGE7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9OQ1I1M0M5eC5oIGIvZHJpdmVycy9zY3NpL05DUjUzQzl4LmgKaW5kZXggMDZlN2VkZi4uNjVhOWIzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL05DUjUzQzl4LmgKKysrIGIvZHJpdmVycy9zY3NpL05DUjUzQzl4LmgKQEAgLTY1Myw3ICs2NTMsNyBAQAogCiAvKiBFeHRlcm5hbCBmdW5jdGlvbnMgKi8KIGV4dGVybiB2b2lkIGVzcF9ib290dXBfcmVzZXQoc3RydWN0IE5DUl9FU1AgKmVzcCwgc3RydWN0IEVTUF9yZWdzICplcmVncyk7Ci1leHRlcm4gc3RydWN0IE5DUl9FU1AgKmVzcF9hbGxvY2F0ZShTY3NpX0hvc3RfVGVtcGxhdGUgKiwgdm9pZCAqKTsKK2V4dGVybiBzdHJ1Y3QgTkNSX0VTUCAqZXNwX2FsbG9jYXRlKHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKiwgdm9pZCAqKTsKIGV4dGVybiB2b2lkIGVzcF9kZWFsbG9jYXRlKHN0cnVjdCBOQ1JfRVNQICopOwogZXh0ZXJuIHZvaWQgZXNwX3JlbGVhc2Uodm9pZCk7CiBleHRlcm4gdm9pZCBlc3BfaW5pdGlhbGl6ZShzdHJ1Y3QgTkNSX0VTUCAqKTsKQEAgLTY2NCw2ICs2NjQsNiBAQAogZXh0ZXJuIGludCBlc3BfcmVzZXQoU2NzaV9DbW5kICopOwogZXh0ZXJuIGludCBlc3BfcHJvY19pbmZvKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0LCBjaGFyICpidWZmZXIsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LCBpbnQgbGVuZ3RoLAogCQkJIGludCBpbm91dCk7Ci1leHRlcm4gaW50IGVzcF9zbGF2ZV9hbGxvYyhTY3NpX0RldmljZSAqKTsKLWV4dGVybiB2b2lkIGVzcF9zbGF2ZV9kZXN0cm95KFNjc2lfRGV2aWNlICopOworZXh0ZXJuIGludCBlc3Bfc2xhdmVfYWxsb2Moc3RydWN0IHNjc2lfZGV2aWNlICopOworZXh0ZXJuIHZvaWQgZXNwX3NsYXZlX2Rlc3Ryb3koc3RydWN0IHNjc2lfZGV2aWNlICopOwogI2VuZGlmIC8qICEoTkNSNTNDOVhfSCkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9OQ1I1M2M0MDZhLmMgYi9kcml2ZXJzL3Njc2kvTkNSNTNjNDA2YS5jCmluZGV4IDEzNTM3NjkuLmFlMzdkM2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9OQ1I1M2M0MDZhLmMKKysrIGIvZHJpdmVycy9zY3NpL05DUjUzYzQwNmEuYwpAQCAtNDQ3LDcgKzQ0Nyw3IEBACiB9CiAjZW5kaWYJCQkJLyogVVNFX1BJTyAqLwogCi1zdGF0aWMgaW50IF9faW5pdCBOQ1I1M2M0MDZhX2RldGVjdChTY3NpX0hvc3RfVGVtcGxhdGUgKiB0cG50KQorc3RhdGljIGludCBfX2luaXQgTkNSNTNjNDA2YV9kZXRlY3Qoc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqIHRwbnQpCiB7CiAJaW50IHByZXNlbnQgPSAwOwogCXN0cnVjdCBTY3NpX0hvc3QgKnNocG50ID0gTlVMTDsKQEAgLTEwNTcsNyArMTA1Nyw3IEBACiAgKiBVc2UgU0dfTk9ORSBpZiBETUEgbW9kZSBpcyBlbmFibGVkIQogICovCiAKLXN0YXRpYyBTY3NpX0hvc3RfVGVtcGxhdGUgZHJpdmVyX3RlbXBsYXRlID0gCitzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBkcml2ZXJfdGVtcGxhdGUgPQogewogICAgICAucHJvY19uYW1lICAgICAgICAgCT0gIk5DUjUzYzQwNmEiCQkvKiBwcm9jX25hbWUgKi8sICAgICAgICAKICAgICAgLm5hbWUgICAgICAgICAgICAgIAk9ICJOQ1I1M2M0MDZhIgkJLyogbmFtZSAqLywgICAgICAgICAgICAgCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYTIwOTEuYyBiL2RyaXZlcnMvc2NzaS9hMjA5MS5jCmluZGV4IGY3YTE3NTEuLjU0OTk2ZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hMjA5MS5jCisrKyBiL2RyaXZlcnMvc2NzaS9hMjA5MS5jCkBAIC0yLDcgKzIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogCkBAIC0xNzMsNyArMTcyLDcgQEAKICAgICB9CiB9CiAKLWludCBfX2luaXQgYTIwOTFfZGV0ZWN0KFNjc2lfSG9zdF9UZW1wbGF0ZSAqdHBudCkKK2ludCBfX2luaXQgYTIwOTFfZGV0ZWN0KHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKnRwbnQpCiB7CiAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgY2FsbGVkID0gMDsKICAgICBzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZTsKQEAgLTIzNCw3ICsyMzMsNyBAQAogCiAjZGVmaW5lIEhPU1RTX0MKIAotc3RhdGljIFNjc2lfSG9zdF9UZW1wbGF0ZSBkcml2ZXJfdGVtcGxhdGUgPSB7CitzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBkcml2ZXJfdGVtcGxhdGUgPSB7CiAJLnByb2NfbmFtZQkJPSAiQTI5MDEiLAogCS5uYW1lCQkJPSAiQ29tbW9kb3JlIEEyMDkxL0E1OTAgU0NTSSIsCiAJLmRldGVjdAkJCT0gYTIwOTFfZGV0ZWN0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2EyMDkxLmggYi9kcml2ZXJzL3Njc2kvYTIwOTEuaAppbmRleCA1NDk5Mzk3Li4yMmQ2YTEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYTIwOTEuaAorKysgYi9kcml2ZXJzL3Njc2kvYTIwOTEuaApAQCAtMTEsNyArMTEsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAotaW50IGEyMDkxX2RldGVjdChTY3NpX0hvc3RfVGVtcGxhdGUgKik7CitpbnQgYTIwOTFfZGV0ZWN0KHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKik7CiBpbnQgYTIwOTFfcmVsZWFzZShzdHJ1Y3QgU2NzaV9Ib3N0ICopOwogY29uc3QgY2hhciAqd2QzM2M5M19pbmZvKHZvaWQpOwogaW50IHdkMzNjOTNfcXVldWVjb21tYW5kKFNjc2lfQ21uZCAqLCB2b2lkICgqZG9uZSkoU2NzaV9DbW5kICopKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hMzAwMC5jIGIvZHJpdmVycy9zY3NpL2EzMDAwLmMKaW5kZXggMzA2Y2FmNS4uZjQyNWQ0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2EzMDAwLmMKKysrIGIvZHJpdmVycy9zY3NpL2EzMDAwLmMKQEAgLTE2OCw3ICsxNjgsNyBAQAogICAgIH0KIH0KIAotaW50IF9faW5pdCBhMzAwMF9kZXRlY3QoU2NzaV9Ib3N0X1RlbXBsYXRlICp0cG50KQoraW50IF9faW5pdCBhMzAwMF9kZXRlY3Qoc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqdHBudCkKIHsKICAgICB3ZDMzYzkzX3JlZ3MgcmVnczsKIApAQCAtMjIxLDcgKzIyMSw3IEBACiAKICNkZWZpbmUgSE9TVFNfQwogCi1zdGF0aWMgU2NzaV9Ib3N0X1RlbXBsYXRlIGRyaXZlcl90ZW1wbGF0ZSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGRyaXZlcl90ZW1wbGF0ZSA9IHsKIAkucHJvY19uYW1lCQk9ICJBMzAwMCIsCiAJLm5hbWUJCQk9ICJBbWlnYSAzMDAwIGJ1aWx0LWluIFNDU0kiLAogCS5kZXRlY3QJCQk9IGEzMDAwX2RldGVjdCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hMzAwMC5oIGIvZHJpdmVycy9zY3NpL2EzMDAwLmgKaW5kZXggYjFlZGE3My4uNTUzNWE2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2EzMDAwLmgKKysrIGIvZHJpdmVycy9zY3NpL2EzMDAwLmgKQEAgLTExLDcgKzExLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKLWludCBhMzAwMF9kZXRlY3QoU2NzaV9Ib3N0X1RlbXBsYXRlICopOworaW50IGEzMDAwX2RldGVjdChzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICopOwogaW50IGEzMDAwX3JlbGVhc2Uoc3RydWN0IFNjc2lfSG9zdCAqKTsKIGNvbnN0IGNoYXIgKndkMzNjOTNfaW5mbyh2b2lkKTsKIGludCB3ZDMzYzkzX3F1ZXVlY29tbWFuZChTY3NpX0NtbmQgKiwgdm9pZCAoKmRvbmUpKFNjc2lfQ21uZCAqKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWFjcmFpZC9hYWNoYmEuYyBiL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2FhY2hiYS5jCmluZGV4IDJhMTI4YTEuLjcxMzk2NTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2FhY2hiYS5jCisrKyBiL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2FhY2hiYS5jCkBAIC0xNTc5LDE4ICsxNTc5LDEwIEBACiAJCQlicmVhazsKIAl7CiAJCXU2NCBjYXBhY2l0eTsKLQkJY2hhciBjcFsxMl07Ci0JCXVuc2lnbmVkIGludCBvZmZzZXQgPSAwOworCQljaGFyIGNwWzEzXTsKIAogCQlkcHJpbnRrKChLRVJOX0RFQlVHICJSRUFEIENBUEFDSVRZXzE2IGNvbW1hbmQuXG4iKSk7CiAJCWNhcGFjaXR5ID0gZnNhX2Rldl9wdHJbY2lkXS5zaXplIC0gMTsKLQkJaWYgKHNjc2ljbWQtPmNtbmRbMTNdID4gMTIpIHsKLQkJCW9mZnNldCA9IHNjc2ljbWQtPmNtbmRbMTNdIC0gMTI7Ci0JCQlpZiAob2Zmc2V0ID4gc2l6ZW9mKGNwKSkKLQkJCQlicmVhazsKLQkJCW1lbXNldChjcCwgMCwgb2Zmc2V0KTsKLQkJCWFhY19pbnRlcm5hbF90cmFuc2ZlcihzY3NpY21kLCBjcCwgMCwgb2Zmc2V0KTsKLQkJfQogCQljcFswXSA9IChjYXBhY2l0eSA+PiA1NikgJiAweGZmOwogCQljcFsxXSA9IChjYXBhY2l0eSA+PiA0OCkgJiAweGZmOwogCQljcFsyXSA9IChjYXBhY2l0eSA+PiA0MCkgJiAweGZmOwpAQCAtMTYwMyw3ICsxNTk1LDE4IEBACiAJCWNwWzldID0gMDsKIAkJY3BbMTBdID0gMjsKIAkJY3BbMTFdID0gMDsKLQkJYWFjX2ludGVybmFsX3RyYW5zZmVyKHNjc2ljbWQsIGNwLCBvZmZzZXQsIHNpemVvZihjcCkpOworCQljcFsxMl0gPSAwOworCQlhYWNfaW50ZXJuYWxfdHJhbnNmZXIoc2NzaWNtZCwgY3AsIDAsCisJCSAgbWluKCh1bnNpZ25lZCBpbnQpc2NzaWNtZC0+Y21uZFsxM10sIHNpemVvZihjcCkpKTsKKwkJaWYgKHNpemVvZihjcCkgPCBzY3NpY21kLT5jbW5kWzEzXSkgeworCQkJdW5zaWduZWQgaW50IGxlbiwgb2Zmc2V0ID0gc2l6ZW9mKGNwKTsKKworCQkJbWVtc2V0KGNwLCAwLCBvZmZzZXQpOworCQkJZG8geworCQkJCWxlbiA9IG1pbihzY3NpY21kLT5jbW5kWzEzXS1vZmZzZXQsIHNpemVvZihjcCkpOworCQkJCWFhY19pbnRlcm5hbF90cmFuc2ZlcihzY3NpY21kLCBjcCwgb2Zmc2V0LCBsZW4pOworCQkJfSB3aGlsZSAoKG9mZnNldCArPSBsZW4pIDwgc2NzaWNtZC0+Y21uZFsxM10pOworCQl9CiAKIAkJLyogRG8gbm90IGNhY2hlIHBhcnRpdGlvbiB0YWJsZSBmb3IgYXJyYXlzICovCiAJCXNjc2ljbWQtPmRldmljZS0+cmVtb3ZhYmxlID0gMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2NvbW1zdXAuYyBiL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2NvbW1zdXAuYwppbmRleCA3MjNjMGNlLi4zOGQ2ZDAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWFjcmFpZC9jb21tc3VwLmMKKysrIGIvZHJpdmVycy9zY3NpL2FhY3JhaWQvY29tbXN1cC5jCkBAIC04MjAsNyArODIwLDcgQEAKIAkJCQlicmVhazsKIAogCQkJLyoKLQkJCSAqCUZpbmQgdGhlIFNjc2lfRGV2aWNlIGFzc29jaWF0ZWQgd2l0aCB0aGUgU0NTSQorCQkJICoJRmluZCB0aGUgc2NzaV9kZXZpY2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBTQ1NJCiAJCQkgKiBhZGRyZXNzLiBNYWtlIHN1cmUgd2UgaGF2ZSB0aGUgcmlnaHQgYXJyYXksIGFuZCBpZgogCQkJICogc28gc2V0IHRoZSBmbGFnIHRvIGluaXRpYXRlIGEgbmV3IHJlLWNvbmZpZyBvbmNlIHdlCiAJCQkgKiBzZWUgYW4gQWlmRW5Db25maWdDaGFuZ2UgQUlGIGNvbWUgdGhyb3VnaC4KQEAgLTk4Nyw3ICs5ODcsNyBAQAogCiAKIAkvKgotCSAqCUZpbmQgdGhlIFNjc2lfRGV2aWNlIGFzc29jaWF0ZWQgd2l0aCB0aGUgU0NTSSBhZGRyZXNzLAorCSAqCUZpbmQgdGhlIHNjc2lfZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCB0aGUgU0NTSSBhZGRyZXNzLAogCSAqIGFuZCBtYXJrIGl0IGFzIGNoYW5nZWQsIGludmFsaWRhdGluZyB0aGUgY2FjaGUuIFRoaXMgZGVhbHMKIAkgKiB3aXRoIGNoYW5nZXMgdG8gZXhpc3RpbmcgZGV2aWNlIElEcy4KIAkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hZHZhbnN5cy5jIGIvZHJpdmVycy9zY3NpL2FkdmFuc3lzLmMKaW5kZXggZjRjZmI4Zi4uMjhiOTMwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FkdmFuc3lzLmMKKysrIGIvZHJpdmVycy9zY3NpL2FkdmFuc3lzLmMKQEAgLTExNCw3ICsxMTQsNyBAQAogICAgICAgICAgICNpbmNsdWRlICJhZHZhbnN5cy5oIgogICAgICAgICAgICNlbmRpZgogCi0gICAgICAgIGFuZCBhZnRlciAic3RhdGljIFNjc2lfSG9zdF9UZW1wbGF0ZSBidWlsdGluX3Njc2lfaG9zdHNbXSA9IjoKKyAgICAgICAgYW5kIGFmdGVyICJzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBidWlsdGluX3Njc2lfaG9zdHNbXSA9IjoKIAogICAgICAgICAgICNpZmRlZiBDT05GSUdfU0NTSV9BRFZBTlNZUwogICAgICAgICAgIEFEVkFOU1lTLApAQCAtMTYwLDcgKzE2MCw3IEBACiAgICAgICAgICAgIC0tLSBEcml2ZXIgU3RydWN0dXJlcwogICAgICAgICAgICAtLS0gRHJpdmVyIERhdGEKICAgICAgICAgICAgLS0tIERyaXZlciBGdW5jdGlvbiBQcm90b3R5cGVzCi0gICAgICAgICAgIC0tLSBMaW51eCAnU2NzaV9Ib3N0X1RlbXBsYXRlJyBhbmQgYWR2YW5zeXNfc2V0dXAoKSBGdW5jdGlvbnMKKyAgICAgICAgICAgLS0tIExpbnV4ICdzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlJyBhbmQgYWR2YW5zeXNfc2V0dXAoKSBGdW5jdGlvbnMKICAgICAgICAgICAgLS0tIExvYWRhYmxlIERyaXZlciBTdXBwb3J0CiAgICAgICAgICAgIC0tLSBNaXNjZWxsYW5lb3VzIERyaXZlciBGdW5jdGlvbnMKICAgICAgICAgICAgLS0tIEZ1bmN0aW9ucyBSZXF1aXJlZCBieSB0aGUgQXNjIExpYnJhcnkKQEAgLTQwNjgsNyArNDA2OCw3IEBACiAKIAogLyoKLSAqIC0tLSBMaW51eCAnU2NzaV9Ib3N0X1RlbXBsYXRlJyBhbmQgYWR2YW5zeXNfc2V0dXAoKSBGdW5jdGlvbnMKKyAqIC0tLSBMaW51eCAnc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZScgYW5kIGFkdmFuc3lzX3NldHVwKCkgRnVuY3Rpb25zCiAgKi8KIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWR2YW5zeXMuaCBiL2RyaXZlcnMvc2NzaS9hZHZhbnN5cy5oCmluZGV4IDNmNGJkZTAuLjhlZTdmYjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hZHZhbnN5cy5oCisrKyBiL2RyaXZlcnMvc2NzaS9hZHZhbnN5cy5oCkBAIC0xOSw3ICsxOSw3IEBACiAjZGVmaW5lIF9BRFZBTlNZU19ICiAKIC8qCi0gKiBTY3NpX0hvc3RfVGVtcGxhdGUgZnVuY3Rpb24gcHJvdG90eXBlcy4KKyAqIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgZnVuY3Rpb24gcHJvdG90eXBlcy4KICAqLwogaW50IGFkdmFuc3lzX2RldGVjdChzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICopOwogaW50IGFkdmFuc3lzX3JlbGVhc2Uoc3RydWN0IFNjc2lfSG9zdCAqKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haGExNTJ4LmMgYi9kcml2ZXJzL3Njc2kvYWhhMTUyeC5jCmluZGV4IDliN2NhZjUuLjlkZjIzYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haGExNTJ4LmMKKysrIGIvZHJpdmVycy9zY3NpL2FoYTE1MnguYwpAQCAtNDI0LDcgKzQyNCw3IEBACiAKIHN0YXRpYyBpbnQgcmVnaXN0ZXJlZF9jb3VudD0wOwogc3RhdGljIHN0cnVjdCBTY3NpX0hvc3QgKmFoYTE1MnhfaG9zdFsyXTsKLXN0YXRpYyBTY3NpX0hvc3RfVGVtcGxhdGUgYWhhMTUyeF9kcml2ZXJfdGVtcGxhdGU7CitzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBhaGExNTJ4X2RyaXZlcl90ZW1wbGF0ZTsKIAogLyoKICAqIGludGVybmFsIHN0YXRlcyBvZiB0aGUgaG9zdApAQCAtMzQ2NCw3ICszNDY0LDcgQEAKIAlyZXR1cm4gdGhpc2xlbmd0aCA8IGxlbmd0aCA/IHRoaXNsZW5ndGggOiBsZW5ndGg7CiB9CiAKLXN0YXRpYyBTY3NpX0hvc3RfVGVtcGxhdGUgYWhhMTUyeF9kcml2ZXJfdGVtcGxhdGUgPSB7CitzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBhaGExNTJ4X2RyaXZlcl90ZW1wbGF0ZSA9IHsKIAkubW9kdWxlCQkJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCQkJPSBBSEExNTJYX1JFVklELAogCS5wcm9jX25hbWUJCQk9ICJhaGExNTJ4IiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haGExNTQyLmMgYi9kcml2ZXJzL3Njc2kvYWhhMTU0Mi5jCmluZGV4IDFiMWFkZmIuLjUxYmFkN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haGExNTQyLmMKKysrIGIvZHJpdmVycy9zY3NpL2FoYTE1NDIuYwpAQCAtMTAyMSw3ICsxMDIxLDcgQEAKICNlbmRpZgogCiAvKiByZXR1cm4gbm9uLXplcm8gb24gZGV0ZWN0aW9uICovCi1zdGF0aWMgaW50IF9faW5pdCBhaGExNTQyX2RldGVjdChTY3NpX0hvc3RfVGVtcGxhdGUgKiB0cG50KQorc3RhdGljIGludCBfX2luaXQgYWhhMTU0Ml9kZXRlY3Qoc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqIHRwbnQpCiB7CiAJdW5zaWduZWQgY2hhciBkbWFfY2hhbjsKIAl1bnNpZ25lZCBjaGFyIGlycV9sZXZlbDsKQEAgLTE3ODksNyArMTc4OSw3IEBACiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIAotc3RhdGljIFNjc2lfSG9zdF9UZW1wbGF0ZSBkcml2ZXJfdGVtcGxhdGUgPSB7CitzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBkcml2ZXJfdGVtcGxhdGUgPSB7CiAJLnByb2NfbmFtZQkJPSAiYWhhMTU0MiIsCiAJLm5hbWUJCQk9ICJBZGFwdGVjIDE1NDIiLAogCS5kZXRlY3QJCQk9IGFoYTE1NDJfZGV0ZWN0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FoYTE1NDIuaCBiL2RyaXZlcnMvc2NzaS9haGExNTQyLmgKaW5kZXggMzgyMWVlMS4uMWRiNTM4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FoYTE1NDIuaAorKysgYi9kcml2ZXJzL3Njc2kvYWhhMTU0Mi5oCkBAIC0xMzEsNyArMTMxLDcgQEAKIAkJCQkvKiBSRVFVRVNUIFNFTlNFICovCiB9OwogCi1zdGF0aWMgaW50IGFoYTE1NDJfZGV0ZWN0KFNjc2lfSG9zdF9UZW1wbGF0ZSAqKTsKK3N0YXRpYyBpbnQgYWhhMTU0Ml9kZXRlY3Qoc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqKTsKIHN0YXRpYyBpbnQgYWhhMTU0Ml9xdWV1ZWNvbW1hbmQoU2NzaV9DbW5kICosIHZvaWQgKCpkb25lKShTY3NpX0NtbmQgKikpOwogc3RhdGljIGludCBhaGExNTQyX2J1c19yZXNldChTY3NpX0NtbmQgKiBTQ3BudCk7CiBzdGF0aWMgaW50IGFoYTE1NDJfZGV2X3Jlc2V0KFNjc2lfQ21uZCAqIFNDcG50KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haGExNzQwLmMgYi9kcml2ZXJzL3Njc2kvYWhhMTc0MC5jCmluZGV4IDhmODVkY2MuLjRiOGM2YTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haGExNzQwLmMKKysrIGIvZHJpdmVycy9zY3NpL2FoYTE3NDAuYwpAQCAtNTcwLDcgKzU3MCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBTY3NpX0hvc3RfVGVtcGxhdGUgYWhhMTc0MF90ZW1wbGF0ZSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGFoYTE3NDBfdGVtcGxhdGUgPSB7CiAJLm1vZHVsZSAgICAgICAgICAgPSBUSElTX01PRFVMRSwKIAkucHJvY19uYW1lICAgICAgICA9ICJhaGExNzQwIiwKIAkucHJvY19pbmZvICAgICAgICA9IGFoYTE3NDBfcHJvY19pbmZvLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FoY2kuYyBiL2RyaXZlcnMvc2NzaS9haGNpLmMKaW5kZXggNDYxMjMxMi4uNTdlZjdhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FoY2kuYworKysgYi9kcml2ZXJzL3Njc2kvYWhjaS5jCkBAIC00Miw4ICs0Miw4IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgInNjc2kuaCIKICNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CiAjaW5jbHVkZSA8bGludXgvbGliYXRhLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKQEAgLTE5Niw3ICsxOTYsNyBAQAogc3RhdGljIGlubGluZSBpbnQgYWhjaV9ob3N0X2ludHIoc3RydWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CiBzdGF0aWMgdm9pZCBhaGNpX3JlbW92ZV9vbmUgKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKIAotc3RhdGljIFNjc2lfSG9zdF9UZW1wbGF0ZSBhaGNpX3NodCA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGFoY2lfc2h0ID0gewogCS5tb2R1bGUJCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQkJPSBEUlZfTkFNRSwKIAkuaW9jdGwJCQk9IGF0YV9zY3NpX2lvY3RsLApAQCAtMjU1LDcgKzI1NSw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhaGNpX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhaGNpX3BjaV90YmxbXSA9IHsKIAl7IFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MjY1MiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwKIAkgIGJvYXJkX2FoY2kgfSwgLyogSUNINiAqLwogCXsgUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyNjUzLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9vc20uYyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfb3NtLmMKaW5kZXggY2ZiNDZjMi4uMzFlOWY0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9vc20uYworKysgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X29zbS5jCkBAIC00MzYsMjkgKzQzNiwyMCBAQAogewogCXN0cnVjdAkgYWhkX3NvZnRjICphaGQ7CiAJc3RydWN0CSBhaGRfbGludXhfZGV2aWNlICpkZXYgPSBzY3NpX3RyYW5zcG9ydF9kZXZpY2VfZGF0YShjbWQtPmRldmljZSk7CisJaW50IHJ0biA9IFNDU0lfTUxRVUVVRV9IT1NUX0JVU1k7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWFoZCA9ICooc3RydWN0IGFoZF9zb2Z0YyAqKiljbWQtPmRldmljZS0+aG9zdC0+aG9zdGRhdGE7CiAKLQkvKgotCSAqIENsb3NlIHRoZSByYWNlIG9mIGEgY29tbWFuZCB0aGF0IHdhcyBpbiB0aGUgcHJvY2VzcyBvZgotCSAqIGJlaW5nIHF1ZXVlZCB0byB1cyBqdXN0IGFzIG91ciBzaW1xIHdhcyBmcm96ZW4uICBMZXQKLQkgKiBEViBjb21tYW5kcyB0aHJvdWdoIHNvIGxvbmcgYXMgd2UgYXJlIG9ubHkgZnJvemVuIHRvCi0JICogcGVyZm9ybSBEVi4KLQkgKi8KLQlpZiAoYWhkLT5wbGF0Zm9ybV9kYXRhLT5xZnJvemVuICE9IDApIHsKLQkJcHJpbnRmKCIlczogcXVldWUgZnJvemVuXG4iLCBhaGRfbmFtZShhaGQpKTsKKwlhaGRfbG9jayhhaGQsICZmbGFncyk7CisJaWYgKGFoZC0+cGxhdGZvcm1fZGF0YS0+cWZyb3plbiA9PSAwKSB7CisJCWNtZC0+c2NzaV9kb25lID0gc2NzaV9kb25lOworCQljbWQtPnJlc3VsdCA9IENBTV9SRVFfSU5QUk9HIDw8IDE2OworCQlydG4gPSBhaGRfbGludXhfcnVuX2NvbW1hbmQoYWhkLCBkZXYsIGNtZCk7CiAKLQkJcmV0dXJuIFNDU0lfTUxRVUVVRV9IT1NUX0JVU1k7CiAJfQotCi0JLyoKLQkgKiBTYXZlIHRoZSBjYWxsYmFjayBvbiBjb21wbGV0aW9uIGZ1bmN0aW9uLgotCSAqLwotCWNtZC0+c2NzaV9kb25lID0gc2NzaV9kb25lOwotCi0JY21kLT5yZXN1bHQgPSBDQU1fUkVRX0lOUFJPRyA8PCAxNjsKLQotCXJldHVybiBhaGRfbGludXhfcnVuX2NvbW1hbmQoYWhkLCBkZXYsIGNtZCk7CisJYWhkX3VubG9jayhhaGQsICZmbGFncyk7CisJcmV0dXJuIHJ0bjsKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2NzaV90YXJnZXQgKioKQEAgLTEwODEsNyArMTA3Miw2IEBACiAKIAkqKChzdHJ1Y3QgYWhkX3NvZnRjICoqKWhvc3QtPmhvc3RkYXRhKSA9IGFoZDsKIAlhaGRfbG9jayhhaGQsICZzKTsKLQlzY3NpX2Fzc2lnbl9sb2NrKGhvc3QsICZhaGQtPnBsYXRmb3JtX2RhdGEtPnNwaW5fbG9jayk7CiAJYWhkLT5wbGF0Zm9ybV9kYXRhLT5ob3N0ID0gaG9zdDsKIAlob3N0LT5jYW5fcXVldWUgPSBBSERfTUFYX1FVRVVFOwogCWhvc3QtPmNtZF9wZXJfbHVuID0gMjsKQEAgLTIwNjIsNiArMjA1Miw3IEBACiAJaW50ICAgIHdhaXQ7CiAJaW50ICAgIGRpc2Nvbm5lY3RlZDsKIAlhaGRfbW9kZV9zdGF0ZSBzYXZlZF9tb2RlczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJcGVuZGluZ19zY2IgPSBOVUxMOwogCXBhdXNlZCA9IEZBTFNFOwpAQCAtMjA3Nyw3ICsyMDY4LDcgQEAKIAkJcHJpbnRmKCIgMHgleCIsIGNtZC0+Y21uZFtjZGJfYnl0ZV0pOwogCXByaW50ZigiXG4iKTsKIAotCXNwaW5fbG9ja19pcnEoJmFoZC0+cGxhdGZvcm1fZGF0YS0+c3Bpbl9sb2NrKTsKKwlhaGRfbG9jayhhaGQsICZmbGFncyk7CiAKIAkvKgogCSAqIEZpcnN0IGRldGVybWluZSBpZiB3ZSBjdXJyZW50bHkgb3duIHRoaXMgY29tbWFuZC4KQEAgLTIyOTEsNyArMjI4Miw4IEBACiAJCWludCByZXQ7CiAKIAkJYWhkLT5wbGF0Zm9ybV9kYXRhLT5mbGFncyB8PSBBSERfU0NCX1VQX0VIX1NFTTsKLQkJc3Bpbl91bmxvY2tfaXJxKCZhaGQtPnBsYXRmb3JtX2RhdGEtPnNwaW5fbG9jayk7CisJCWFoZF91bmxvY2soYWhkLCAmZmxhZ3MpOworCiAJCWluaXRfdGltZXIoJnRpbWVyKTsKIAkJdGltZXIuZGF0YSA9ICh1X2xvbmcpYWhkOwogCQl0aW1lci5leHBpcmVzID0gamlmZmllcyArICg1ICogSFopOwpAQCAtMjMwNSw5ICsyMjk3LDggQEAKIAkJCXByaW50ZigiVGltZXIgRXhwaXJlZFxuIik7CiAJCQlyZXR2YWwgPSBGQUlMRUQ7CiAJCX0KLQkJc3Bpbl9sb2NrX2lycSgmYWhkLT5wbGF0Zm9ybV9kYXRhLT5zcGluX2xvY2spOwogCX0KLQlzcGluX3VubG9ja19pcnEoJmFoZC0+cGxhdGZvcm1fZGF0YS0+c3Bpbl9sb2NrKTsKKwkJYWhkX3VubG9jayhhaGQsICZmbGFncyk7CiAJcmV0dXJuIChyZXR2YWwpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X29zbS5oIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9vc20uaAppbmRleCAwNTJjNjYxLi5iYzQ0MjIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X29zbS5oCisrKyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfb3NtLmgKQEAgLTQ5LDcgKzQ5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X29zbS5jIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9vc20uYwppbmRleCAxODYxNDA3Li43ZmM2NDU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X29zbS5jCisrKyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfb3NtLmMKQEAgLTQ3NiwyNiArNDc2LDIwIEBACiB7CiAJc3RydWN0CSBhaGNfc29mdGMgKmFoYzsKIAlzdHJ1Y3QJIGFoY19saW51eF9kZXZpY2UgKmRldiA9IHNjc2lfdHJhbnNwb3J0X2RldmljZV9kYXRhKGNtZC0+ZGV2aWNlKTsKKwlpbnQgcnRuID0gU0NTSV9NTFFVRVVFX0hPU1RfQlVTWTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJYWhjID0gKihzdHJ1Y3QgYWhjX3NvZnRjICoqKWNtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YTsKIAotCS8qCi0JICogU2F2ZSB0aGUgY2FsbGJhY2sgb24gY29tcGxldGlvbiBmdW5jdGlvbi4KLQkgKi8KLQljbWQtPnNjc2lfZG9uZSA9IHNjc2lfZG9uZTsKKwlhaGNfbG9jayhhaGMsICZmbGFncyk7CisJaWYgKGFoYy0+cGxhdGZvcm1fZGF0YS0+cWZyb3plbiA9PSAwKSB7CisJCWNtZC0+c2NzaV9kb25lID0gc2NzaV9kb25lOworCQljbWQtPnJlc3VsdCA9IENBTV9SRVFfSU5QUk9HIDw8IDE2OworCQlydG4gPSBhaGNfbGludXhfcnVuX2NvbW1hbmQoYWhjLCBkZXYsIGNtZCk7CisJfQorCWFoY191bmxvY2soYWhjLCAmZmxhZ3MpOwogCi0JLyoKLQkgKiBDbG9zZSB0aGUgcmFjZSBvZiBhIGNvbW1hbmQgdGhhdCB3YXMgaW4gdGhlIHByb2Nlc3Mgb2YKLQkgKiBiZWluZyBxdWV1ZWQgdG8gdXMganVzdCBhcyBvdXIgc2ltcSB3YXMgZnJvemVuLiAgTGV0Ci0JICogRFYgY29tbWFuZHMgdGhyb3VnaCBzbyBsb25nIGFzIHdlIGFyZSBvbmx5IGZyb3plbiB0bwotCSAqIHBlcmZvcm0gRFYuCi0JICovCi0JaWYgKGFoYy0+cGxhdGZvcm1fZGF0YS0+cWZyb3plbiAhPSAwKQotCQlyZXR1cm4gU0NTSV9NTFFVRVVFX0hPU1RfQlVTWTsKLQotCWNtZC0+cmVzdWx0ID0gQ0FNX1JFUV9JTlBST0cgPDwgMTY7Ci0KLQlyZXR1cm4gYWhjX2xpbnV4X3J1bl9jb21tYW5kKGFoYywgZGV2LCBjbWQpOworCXJldHVybiBydG47CiB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHNjc2lfdGFyZ2V0ICoqCkBAIC0xMDc5LDcgKzEwNzMsNiBAQAogCiAJKigoc3RydWN0IGFoY19zb2Z0YyAqKilob3N0LT5ob3N0ZGF0YSkgPSBhaGM7CiAJYWhjX2xvY2soYWhjLCAmcyk7Ci0Jc2NzaV9hc3NpZ25fbG9jayhob3N0LCAmYWhjLT5wbGF0Zm9ybV9kYXRhLT5zcGluX2xvY2spOwogCWFoYy0+cGxhdGZvcm1fZGF0YS0+aG9zdCA9IGhvc3Q7CiAJaG9zdC0+Y2FuX3F1ZXVlID0gQUhDX01BWF9RVUVVRTsKIAlob3N0LT5jbWRfcGVyX2x1biA9IDI7CkBAIC0yMTExLDYgKzIxMDQsNyBAQAogCWludCAgICBwYXVzZWQ7CiAJaW50ICAgIHdhaXQ7CiAJaW50ICAgIGRpc2Nvbm5lY3RlZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJcGVuZGluZ19zY2IgPSBOVUxMOwogCXBhdXNlZCA9IEZBTFNFOwpAQCAtMjEyNSw3ICsyMTE5LDcgQEAKIAkJcHJpbnRmKCIgMHgleCIsIGNtZC0+Y21uZFtjZGJfYnl0ZV0pOwogCXByaW50ZigiXG4iKTsKIAotCXNwaW5fbG9ja19pcnEoJmFoYy0+cGxhdGZvcm1fZGF0YS0+c3Bpbl9sb2NrKTsKKwlhaGNfbG9jayhhaGMsICZmbGFncyk7CiAKIAkvKgogCSAqIEZpcnN0IGRldGVybWluZSBpZiB3ZSBjdXJyZW50bHkgb3duIHRoaXMgY29tbWFuZC4KQEAgLTIzNTcsNyArMjM1MSw4IEBACiAJCWludCByZXQ7CiAKIAkJYWhjLT5wbGF0Zm9ybV9kYXRhLT5mbGFncyB8PSBBSENfVVBfRUhfU0VNQVBIT1JFOwotCQlzcGluX3VubG9ja19pcnEoJmFoYy0+cGxhdGZvcm1fZGF0YS0+c3Bpbl9sb2NrKTsKKwkJYWhjX3VubG9jayhhaGMsICZmbGFncyk7CisKIAkJaW5pdF90aW1lcigmdGltZXIpOwogCQl0aW1lci5kYXRhID0gKHVfbG9uZylhaGM7CiAJCXRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgKDUgKiBIWik7CkBAIC0yMzcxLDEwICsyMzY2LDggQEAKIAkJCXByaW50ZigiVGltZXIgRXhwaXJlZFxuIik7CiAJCQlyZXR2YWwgPSBGQUlMRUQ7CiAJCX0KLQkJc3Bpbl9sb2NrX2lycSgmYWhjLT5wbGF0Zm9ybV9kYXRhLT5zcGluX2xvY2spOwotCX0KLQotCXNwaW5fdW5sb2NrX2lycSgmYWhjLT5wbGF0Zm9ybV9kYXRhLT5zcGluX2xvY2spOworCX0gZWxzZQorCQlhaGNfdW5sb2NrKGFoYywgJmZsYWdzKTsKIAlyZXR1cm4gKHJldHZhbCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfb3NtLmggYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X29zbS5oCmluZGV4IGJlOWVkYmUuLmYyYTk1NDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfb3NtLmgKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9vc20uaApAQCAtNjYsNyArNjYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4X29sZC5jIGIvZHJpdmVycy9zY3NpL2FpYzd4eHhfb2xkLmMKaW5kZXggODgwZTJkOS4uMzNkNTZjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzd4eHhfb2xkLmMKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHhfb2xkLmMKQEAgLTY1MTQsNyArNjUxNCw3IEBACiBzdGF0aWMgdm9pZAogYWljN3h4eF9pbml0X3RyYW5zaW5mbyhzdHJ1Y3QgYWljN3h4eF9ob3N0ICpwLCBzdHJ1Y3QgYWljX2Rldl9kYXRhICphaWNfZGV2KQogewotICBTY3NpX0RldmljZSAqc2RwbnQgPSBhaWNfZGV2LT5TRHB0cjsKKyAgc3RydWN0IHNjc2lfZGV2aWNlICpzZHBudCA9IGFpY19kZXYtPlNEcHRyOwogICB1bnNpZ25lZCBjaGFyIHRpbmRleDsKIAogICB0aW5kZXggPSBzZHBudC0+aWQgfCAoc2RwbnQtPmNoYW5uZWwgPDwgMyk7CkBAIC02NTgxLDcgKzY1ODEsNyBAQAogICogICBTZXQgdXAgdGhlIGluaXRpYWwgYWljX2RldiBzdHJ1Y3QgcG9pbnRlcnMKICAqLUYqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIGludAotYWljN3h4eF9zbGF2ZV9hbGxvYyhTY3NpX0RldmljZSAqU0RwdHIpCithaWM3eHh4X3NsYXZlX2FsbG9jKHN0cnVjdCBzY3NpX2RldmljZSAqU0RwdHIpCiB7CiAgIHN0cnVjdCBhaWM3eHh4X2hvc3QgKnAgPSAoc3RydWN0IGFpYzd4eHhfaG9zdCAqKVNEcHRyLT5ob3N0LT5ob3N0ZGF0YTsKICAgc3RydWN0IGFpY19kZXZfZGF0YSAqYWljX2RldjsKQEAgLTY2NDQsNyArNjY0NCw3IEBACiAgKiAgIHF1ZXVlaW5nIHRvIGJlIFtlbnxkaXNdYWJsZWQgZm9yIGEgc3BlY2lmaWMgYWRhcHRlci4KICAqLUYqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIHZvaWQKLWFpYzd4eHhfZGV2aWNlX3F1ZXVlX2RlcHRoKHN0cnVjdCBhaWM3eHh4X2hvc3QgKnAsIFNjc2lfRGV2aWNlICpkZXZpY2UpCithaWM3eHh4X2RldmljZV9xdWV1ZV9kZXB0aChzdHJ1Y3QgYWljN3h4eF9ob3N0ICpwLCBzdHJ1Y3Qgc2NzaV9kZXZpY2UgKmRldmljZSkKIHsKICAgaW50IHRhZ19lbmFibGVkID0gRkFMU0U7CiAgIHN0cnVjdCBhaWNfZGV2X2RhdGEgKmFpY19kZXYgPSBkZXZpY2UtPmhvc3RkYXRhOwpAQCAtNjczNCw3ICs2NzM0LDcgQEAKICAqICAgcHJlcGFyZSBmb3IgdGhpcyBkZXZpY2UgdG8gZ28gYXdheQogICotRioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgdm9pZAotYWljN3h4eF9zbGF2ZV9kZXN0cm95KFNjc2lfRGV2aWNlICpTRHB0cikKK2FpYzd4eHhfc2xhdmVfZGVzdHJveShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKlNEcHRyKQogewogICBzdHJ1Y3QgYWljX2Rldl9kYXRhICphaWNfZGV2ID0gU0RwdHItPmhvc3RkYXRhOwogCkBAIC02NzU0LDcgKzY3NTQsNyBAQAogICogICBkZXB0aHMsIGFsbG9jYXRlIGNvbW1hbmQgc3RydWN0cywgZXRjLgogICotRioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgaW50Ci1haWM3eHh4X3NsYXZlX2NvbmZpZ3VyZShTY3NpX0RldmljZSAqU0RwdHIpCithaWM3eHh4X3NsYXZlX2NvbmZpZ3VyZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKlNEcHRyKQogewogICBzdHJ1Y3QgYWljN3h4eF9ob3N0ICpwID0gKHN0cnVjdCBhaWM3eHh4X2hvc3QgKikgU0RwdHItPmhvc3QtPmhvc3RkYXRhOwogICBzdHJ1Y3QgYWljX2Rldl9kYXRhICphaWNfZGV2OwpAQCAtNzg2NSw3ICs3ODY1LDcgQEAKICAqICAgUmVnaXN0ZXIgYSBBZGFwdGVjIGFpYzd4eHggY2hpcCBTQ1NJIGNvbnRyb2xsZXIgd2l0aCB0aGUga2VybmVsLgogICotRioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgaW50Ci1haWM3eHh4X3JlZ2lzdGVyKFNjc2lfSG9zdF9UZW1wbGF0ZSAqdGVtcGxhdGUsIHN0cnVjdCBhaWM3eHh4X2hvc3QgKnAsCithaWM3eHh4X3JlZ2lzdGVyKHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKnRlbXBsYXRlLCBzdHJ1Y3QgYWljN3h4eF9ob3N0ICpwLAogICBpbnQgcmVzZXRfZGVsYXkpCiB7CiAgIGludCBpLCByZXN1bHQ7CkBAIC04NDEyLDcgKzg0MTIsNyBAQAogICogICBhbmQgYSBwb2ludGVyIHRvIGEgYWljN3h4eF9ob3N0IHN0cnVjdCB1cG9uIHN1Y2Nlc3MuCiAgKi1GKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyBzdHJ1Y3QgYWljN3h4eF9ob3N0ICoKLWFpYzd4eHhfYWxsb2MoU2NzaV9Ib3N0X1RlbXBsYXRlICpzaHQsIHN0cnVjdCBhaWM3eHh4X2hvc3QgKnRlbXApCithaWM3eHh4X2FsbG9jKHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKnNodCwgc3RydWN0IGFpYzd4eHhfaG9zdCAqdGVtcCkKIHsKICAgc3RydWN0IGFpYzd4eHhfaG9zdCAqcCA9IE5VTEw7CiAgIHN0cnVjdCBTY3NpX0hvc3QgKmhvc3Q7CkBAIC04OTkxLDcgKzg5OTEsNyBAQAogICogICAgICAgbWlkLWxldmVsIFNDU0kgY29kZSBpcyBvdmVyaGF1bGVkLgogICotRioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgaW50Ci1haWM3eHh4X2RldGVjdChTY3NpX0hvc3RfVGVtcGxhdGUgKnRlbXBsYXRlKQorYWljN3h4eF9kZXRlY3Qoc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqdGVtcGxhdGUpCiB7CiAgIHN0cnVjdCBhaWM3eHh4X2hvc3QgKnRlbXBfcCA9IE5VTEw7CiAgIHN0cnVjdCBhaWM3eHh4X2hvc3QgKmN1cnJlbnRfcCA9IE5VTEw7CkBAIC0xMTE2MSw3ICsxMTE2MSw3IEBACiBNT0RVTEVfVkVSU0lPTihBSUM3WFhYX0hfVkVSU0lPTik7CiAKIAotc3RhdGljIFNjc2lfSG9zdF9UZW1wbGF0ZSBkcml2ZXJfdGVtcGxhdGUgPSB7CitzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBkcml2ZXJfdGVtcGxhdGUgPSB7CiAJLnByb2NfaW5mbwkJPSBhaWM3eHh4X3Byb2NfaW5mbywKIAkuZGV0ZWN0CQkJPSBhaWM3eHh4X2RldGVjdCwKIAkucmVsZWFzZQkJPSBhaWM3eHh4X3JlbGVhc2UsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYW1pZ2E3eHguYyBiL2RyaXZlcnMvc2NzaS9hbWlnYTd4eC5jCmluZGV4IDVmMTM1NDYuLmMwODQ0ZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hbWlnYTd4eC5jCisrKyBiL2RyaXZlcnMvc2NzaS9hbWlnYTd4eC5jCkBAIC0xMSw3ICsxMSw2IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC96b3Jyby5oPgogI2luY2x1ZGUgPGxpbnV4L3N0YXQuaD4KQEAgLTMwLDcgKzI5LDcgQEAKICNpbmNsdWRlICJhbWlnYTd4eC5oIgogCiAKLXN0YXRpYyBpbnQgYW1pZ2E3eHhfcmVnaXN0ZXJfb25lKFNjc2lfSG9zdF9UZW1wbGF0ZSAqdHBudCwKK3N0YXRpYyBpbnQgYW1pZ2E3eHhfcmVnaXN0ZXJfb25lKHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKnRwbnQsCiAJCQkJIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKICAgICBsb25nIGxvbmcgb3B0aW9uczsKQEAgLTY2LDcgKzY1LDcgQEAKICAgICB7IDAgfQogfTsKIAotc3RhdGljIGludCBfX2luaXQgYW1pZ2E3eHhfem9ycm9fZGV0ZWN0KFNjc2lfSG9zdF9UZW1wbGF0ZSAqdHBudCkKK3N0YXRpYyBpbnQgX19pbml0IGFtaWdhN3h4X3pvcnJvX2RldGVjdChzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICp0cG50KQogewogICAgIGludCBudW0gPSAwLCBpOwogICAgIHN0cnVjdCB6b3Jyb19kZXYgKnogPSBOVUxMOwpAQCAtOTAsNyArODksNyBAQAogI2VuZGlmIC8qIENPTkZJR19aT1JSTyAqLwogCiAKLWludCBfX2luaXQgYW1pZ2E3eHhfZGV0ZWN0KFNjc2lfSG9zdF9UZW1wbGF0ZSAqdHBudCkKK2ludCBfX2luaXQgYW1pZ2E3eHhfZGV0ZWN0KHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKnRwbnQpCiB7CiAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgY2FsbGVkID0gMDsKICAgICBpbnQgbnVtID0gMDsKQEAgLTEyMyw3ICsxMjIsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgU2NzaV9Ib3N0X1RlbXBsYXRlIGRyaXZlcl90ZW1wbGF0ZSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGRyaXZlcl90ZW1wbGF0ZSA9IHsKIAkubmFtZQkJCT0gIkFtaWdhIE5DUjUzYzcxMCBTQ1NJIiwKIAkuZGV0ZWN0CQkJPSBhbWlnYTd4eF9kZXRlY3QsCiAJLnJlbGVhc2UJCT0gYW1pZ2E3eHhfcmVsZWFzZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hbWlnYTd4eC5oIGIvZHJpdmVycy9zY3NpL2FtaWdhN3h4LmgKaW5kZXggOGNjNTRhNS4uMWI2Mzc1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FtaWdhN3h4LmgKKysrIGIvZHJpdmVycy9zY3NpL2FtaWdhN3h4LmgKQEAgLTIsNyArMiw3IEBACiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCi1pbnQgYW1pZ2E3eHhfZGV0ZWN0KFNjc2lfSG9zdF9UZW1wbGF0ZSAqKTsKK2ludCBhbWlnYTd4eF9kZXRlY3Qoc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqKTsKIGNvbnN0IGNoYXIgKk5DUjUzYzd4MF9pbmZvKHZvaWQpOwogaW50IE5DUjUzYzd4eF9xdWV1ZV9jb21tYW5kKFNjc2lfQ21uZCAqLCB2b2lkICgqZG9uZSkoU2NzaV9DbW5kICopKTsKIGludCBOQ1I1M2M3eHhfYWJvcnQoU2NzaV9DbW5kICopOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FybS9hY29ybnNjc2kuYyBiL2RyaXZlcnMvc2NzaS9hcm0vYWNvcm5zY3NpLmMKaW5kZXggYmUyY2FlYy4uYjdiMjBjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FybS9hY29ybnNjc2kuYworKysgYi9kcml2ZXJzL3Njc2kvYXJtL2Fjb3Juc2NzaS5jCkBAIC04OTYsNyArODk2LDcgQEAKICAqIE5vdGVzICAgIDogdGhpcyB3aWxsIG9ubHkgYmUgb25lIFNHIGVudHJ5IG9yIGxlc3MKICAqLwogc3RhdGljCi12b2lkIGFjb3Juc2NzaV9kYXRhX3VwZGF0ZXB0cihBU19Ib3N0ICpob3N0LCBTY3NpX1BvaW50ZXIgKlNDcCwgdW5zaWduZWQgaW50IGxlbmd0aCkKK3ZvaWQgYWNvcm5zY3NpX2RhdGFfdXBkYXRlcHRyKEFTX0hvc3QgKmhvc3QsIHN0cnVjdCBzY3NpX3BvaW50ZXIgKlNDcCwgdW5zaWduZWQgaW50IGxlbmd0aCkKIHsKICAgICBTQ3AtPnB0ciArPSBsZW5ndGg7CiAgICAgU0NwLT50aGlzX3Jlc2lkdWFsIC09IGxlbmd0aDsKQEAgLTI4NjIsNyArMjg2Miw3IEBACiAJCQlpbnQgbGVuZ3RoLCBpbnQgaW5vdXQpCiB7CiAgICAgaW50IHBvcywgYmVnaW4gPSAwLCBkZXZpZHg7Ci0gICAgU2NzaV9EZXZpY2UgKnNjZDsKKyAgICBzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNjZDsKICAgICBBU19Ib3N0ICpob3N0OwogICAgIGNoYXIgKnAgPSBidWZmZXI7CiAKQEAgLTI5NzEsNyArMjk3MSw3IEBACiAgICAgcmV0dXJuIHBvczsKIH0KIAotc3RhdGljIFNjc2lfSG9zdF9UZW1wbGF0ZSBhY29ybnNjc2lfdGVtcGxhdGUgPSB7CitzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBhY29ybnNjc2lfdGVtcGxhdGUgPSB7CiAJLm1vZHVsZQkJCT0gVEhJU19NT0RVTEUsCiAJLnByb2NfaW5mbwkJPSBhY29ybnNjc2lfcHJvY19pbmZvLAogCS5uYW1lCQkJPSAiQWNvcm5TQ1NJIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hcm0vYWNvcm5zY3NpLmggYi9kcml2ZXJzL3Njc2kvYXJtL2Fjb3Juc2NzaS5oCmluZGV4IDAzODgxZjAuLjIxNDIyOTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hcm0vYWNvcm5zY3NpLmgKKysrIGIvZHJpdmVycy9zY3NpL2FybS9hY29ybnNjc2kuaApAQCAtMjkyLDcgKzI5Miw3IEBACiAJICAgIHVuc2lnbmVkIGNoYXIJdGFnOwkJLyogcmVjb25uZWN0ZWQgdGFnCQkJKi8KIAl9IHJlY29ubmVjdGVkOwogCi0JU2NzaV9Qb2ludGVyCVNDcDsJCQkvKiBjdXJyZW50IGNvbW1hbmRzIGRhdGEgcG9pbnRlcgkqLworCXN0cnVjdCBzY3NpX3BvaW50ZXIJU0NwOwkJCS8qIGN1cnJlbnQgY29tbWFuZHMgZGF0YSBwb2ludGVyCSovCiAKIAlNc2dRdWV1ZV90CW1zZ3M7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hcm0vYXJ4ZXNjc2kuYyBiL2RyaXZlcnMvc2NzaS9hcm0vYXJ4ZXNjc2kuYwppbmRleCAyOTgxMWY1Li44MDQxMjVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYXJtL2FyeGVzY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2FybS9hcnhlc2NzaS5jCkBAIC02NSw3ICs2NSw3IEBACiAgKiBSZXR1cm5zIDogMCBpZiB3ZSBzaG91bGQgbm90IHNldCBDTURfV0lUSERNQSBmb3IgdHJhbnNmZXIgaW5mbyBjb21tYW5kCiAgKi8KIHN0YXRpYyBmYXNkbWF0eXBlX3QKLWFyeGVzY3NpX2RtYV9zZXR1cChzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0LCBTY3NpX1BvaW50ZXIgKlNDcCwKK2FyeGVzY3NpX2RtYV9zZXR1cChzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0LCBzdHJ1Y3Qgc2NzaV9wb2ludGVyICpTQ3AsCiAJCSAgICAgICBmYXNkbWFkaXJfdCBkaXJlY3Rpb24sIGZhc2RtYXR5cGVfdCBtaW5fdHlwZSkKIHsKIAkvKgpAQCAtMTExLDcgKzExMSw3IEBACiAgKgkgICAgIHRyYW5zZmVyICAtIG1pbmltdW0gbnVtYmVyIG9mIGJ5dGVzIHdlIGV4cGVjdCB0byB0cmFuc2ZlcgogICovCiBzdGF0aWMgdm9pZAotYXJ4ZXNjc2lfZG1hX3BzZXVkbyhzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0LCBTY3NpX1BvaW50ZXIgKlNDcCwKK2FyeGVzY3NpX2RtYV9wc2V1ZG8oc3RydWN0IFNjc2lfSG9zdCAqaG9zdCwgc3RydWN0IHNjc2lfcG9pbnRlciAqU0NwLAogCQkgICAgZmFzZG1hZGlyX3QgZGlyZWN0aW9uLCBpbnQgdHJhbnNmZXIpCiB7CiAJc3RydWN0IGFyeGVzY3NpX2luZm8gKmluZm8gPSAoc3RydWN0IGFyeGVzY3NpX2luZm8gKilob3N0LT5ob3N0ZGF0YTsKQEAgLTE5Nyw3ICsxOTcsNyBAQAogICogUGFyYW1zICA6IGhvc3QgIC0gaG9zdAogICoJICAgICBTQ3BudCAtIGNvbW1hbmQKICAqLwotc3RhdGljIHZvaWQgYXJ4ZXNjc2lfZG1hX3N0b3Aoc3RydWN0IFNjc2lfSG9zdCAqaG9zdCwgU2NzaV9Qb2ludGVyICpTQ3ApCitzdGF0aWMgdm9pZCBhcnhlc2NzaV9kbWFfc3RvcChzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0LCBzdHJ1Y3Qgc2NzaV9wb2ludGVyICpTQ3ApCiB7CiAJLyoKIAkgKiBubyBETUEgdG8gc3RvcApAQCAtMjYxLDcgKzI2MSw3IEBACiAJcmV0dXJuIHBvczsKIH0KIAotc3RhdGljIFNjc2lfSG9zdF9UZW1wbGF0ZSBhcnhlc2NzaV90ZW1wbGF0ZSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGFyeGVzY3NpX3RlbXBsYXRlID0gewogCS5wcm9jX2luZm8JCQk9IGFyeGVzY3NpX3Byb2NfaW5mbywKIAkubmFtZQkJCQk9ICJBUlhFIFNDU0kgY2FyZCIsCiAJLmluZm8JCQkJPSBhcnhlc2NzaV9pbmZvLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FybS9jdW1hbmFfMS5jIGIvZHJpdmVycy9zY3NpL2FybS9jdW1hbmFfMS5jCmluZGV4IDI2NDk4NTUzLi44MWUyNjZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYXJtL2N1bWFuYV8xLmMKKysrIGIvZHJpdmVycy9zY3NpL2FybS9jdW1hbmFfMS5jCkBAIC0yMzgsNyArMjM4LDcgQEAKIAogI2luY2x1ZGUgIi4uL05DUjUzODAuYyIKIAotc3RhdGljIFNjc2lfSG9zdF9UZW1wbGF0ZSBjdW1hbmFzY3NpX3RlbXBsYXRlID0geworc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgY3VtYW5hc2NzaV90ZW1wbGF0ZSA9IHsKIAkubW9kdWxlCQkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJCT0gIkN1bWFuYSAxNi1iaXQgU0NTSSIsCiAJLmluZm8JCQk9IGN1bWFuYXNjc2lfaW5mbywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hcm0vY3VtYW5hXzIuYyBiL2RyaXZlcnMvc2NzaS9hcm0vY3VtYW5hXzIuYwppbmRleCAwZWYwNjQ0Li4zYTdhNDZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYXJtL2N1bWFuYV8yLmMKKysrIGIvZHJpdmVycy9zY3NpL2FybS9jdW1hbmFfMi5jCkBAIC0xNTcsNyArMTU3LDcgQEAKICAqIFJldHVybnMgIDogdHlwZSBvZiB0cmFuc2ZlciB0byBiZSBwZXJmb3JtZWQKICAqLwogc3RhdGljIGZhc2RtYXR5cGVfdAotY3VtYW5hc2NzaV8yX2RtYV9zZXR1cChzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0LCBTY3NpX1BvaW50ZXIgKlNDcCwKK2N1bWFuYXNjc2lfMl9kbWFfc2V0dXAoc3RydWN0IFNjc2lfSG9zdCAqaG9zdCwgc3RydWN0IHNjc2lfcG9pbnRlciAqU0NwLAogCQkgICAgICAgZmFzZG1hZGlyX3QgZGlyZWN0aW9uLCBmYXNkbWF0eXBlX3QgbWluX3R5cGUpCiB7CiAJc3RydWN0IGN1bWFuYXNjc2kyX2luZm8gKmluZm8gPSAoc3RydWN0IGN1bWFuYXNjc2kyX2luZm8gKilob3N0LT5ob3N0ZGF0YTsKQEAgLTIwOSw3ICsyMDksNyBAQAogICoJICAgICAgdHJhbnNmZXIgIC0gbWluaW11bSBudW1iZXIgb2YgYnl0ZXMgd2UgZXhwZWN0IHRvIHRyYW5zZmVyCiAgKi8KIHN0YXRpYyB2b2lkCi1jdW1hbmFzY3NpXzJfZG1hX3BzZXVkbyhzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0LCBTY3NpX1BvaW50ZXIgKlNDcCwKK2N1bWFuYXNjc2lfMl9kbWFfcHNldWRvKHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QsIHN0cnVjdCBzY3NpX3BvaW50ZXIgKlNDcCwKIAkJCWZhc2RtYWRpcl90IGRpcmVjdGlvbiwgaW50IHRyYW5zZmVyKQogewogCXN0cnVjdCBjdW1hbmFzY3NpMl9pbmZvICppbmZvID0gKHN0cnVjdCBjdW1hbmFzY3NpMl9pbmZvICopaG9zdC0+aG9zdGRhdGE7CkBAIC0yODMsNyArMjgzLDcgQEAKICAqCSAgICAgIFNDcG50IC0gY29tbWFuZAogICovCiBzdGF0aWMgdm9pZAotY3VtYW5hc2NzaV8yX2RtYV9zdG9wKHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QsIFNjc2lfUG9pbnRlciAqU0NwKQorY3VtYW5hc2NzaV8yX2RtYV9zdG9wKHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QsIHN0cnVjdCBzY3NpX3BvaW50ZXIgKlNDcCkKIHsKIAlzdHJ1Y3QgY3VtYW5hc2NzaTJfaW5mbyAqaW5mbyA9IChzdHJ1Y3QgY3VtYW5hc2NzaTJfaW5mbyAqKWhvc3QtPmhvc3RkYXRhOwogCWlmIChpbmZvLT5pbmZvLnNjc2kuZG1hICE9IE5PX0RNQSkgewpAQCAtMzgxLDcgKzM4MSw3IEBACiAJcmV0dXJuIHBvczsKIH0KIAotc3RhdGljIFNjc2lfSG9zdF9UZW1wbGF0ZSBjdW1hbmFzY3NpMl90ZW1wbGF0ZSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGN1bWFuYXNjc2kyX3RlbXBsYXRlID0gewogCS5tb2R1bGUJCQkJPSBUSElTX01PRFVMRSwKIAkucHJvY19pbmZvCQkJPSBjdW1hbmFzY3NpXzJfcHJvY19pbmZvLAogCS5uYW1lCQkJCT0gIkN1bWFuYSBTQ1NJIElJIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hcm0vZWNvc2NzaS5jIGIvZHJpdmVycy9zY3NpL2FybS9lY29zY3NpLmMKaW5kZXggZjhhN2ZkZC4uNmFkY2NjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FybS9lY29zY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2FybS9lY29zY3NpLmMKQEAgLTE1NSw3ICsxNTUsNyBAQAogCiAjaW5jbHVkZSAiLi4vTkNSNTM4MC5jIgogCi1zdGF0aWMgU2NzaV9Ib3N0X1RlbXBsYXRlIGVjb3Njc2lfdGVtcGxhdGUgPSAgeworc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgZWNvc2NzaV90ZW1wbGF0ZSA9ICB7CiAJLm1vZHVsZQkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJPSAiU2VyaWFsIFBvcnQgRWNvU0NTSSBOQ1I1MzgwIiwKIAkucHJvY19uYW1lCT0gImVjb3Njc2kiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FybS9lZXNveC5jIGIvZHJpdmVycy9zY3NpL2FybS9lZXNveC5jCmluZGV4IGNlNzExZjEuLjRkMWU4ZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hcm0vZWVzb3guYworKysgYi9kcml2ZXJzL3Njc2kvYXJtL2Vlc294LmMKQEAgLTE1OCw3ICsxNTgsNyBAQAogICogUmV0dXJucyAgOiB0eXBlIG9mIHRyYW5zZmVyIHRvIGJlIHBlcmZvcm1lZAogICovCiBzdGF0aWMgZmFzZG1hdHlwZV90Ci1lZXNveHNjc2lfZG1hX3NldHVwKHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QsIFNjc2lfUG9pbnRlciAqU0NwLAorZWVzb3hzY3NpX2RtYV9zZXR1cChzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0LCBzdHJ1Y3Qgc2NzaV9wb2ludGVyICpTQ3AsCiAJCSAgICAgICBmYXNkbWFkaXJfdCBkaXJlY3Rpb24sIGZhc2RtYXR5cGVfdCBtaW5fdHlwZSkKIHsKIAlzdHJ1Y3QgZWVzb3hzY3NpX2luZm8gKmluZm8gPSAoc3RydWN0IGVlc294c2NzaV9pbmZvICopaG9zdC0+aG9zdGRhdGE7CkBAIC0zNTMsNyArMzUzLDcgQEAKIH0KIAogc3RhdGljIHZvaWQKLWVlc294c2NzaV9kbWFfcHNldWRvKHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QsIFNjc2lfUG9pbnRlciAqU0NwLAorZWVzb3hzY3NpX2RtYV9wc2V1ZG8oc3RydWN0IFNjc2lfSG9zdCAqaG9zdCwgc3RydWN0IHNjc2lfcG9pbnRlciAqU0NwLAogCQkgICAgIGZhc2RtYWRpcl90IGRpciwgaW50IHRyYW5zZmVyX3NpemUpCiB7CiAJc3RydWN0IGVlc294c2NzaV9pbmZvICppbmZvID0gKHN0cnVjdCBlZXNveHNjc2lfaW5mbyAqKWhvc3QtPmhvc3RkYXRhOwpAQCAtMzcwLDcgKzM3MCw3IEBACiAgKgkgICAgICBTQ3BudCAtIGNvbW1hbmQKICAqLwogc3RhdGljIHZvaWQKLWVlc294c2NzaV9kbWFfc3RvcChzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0LCBTY3NpX1BvaW50ZXIgKlNDcCkKK2Vlc294c2NzaV9kbWFfc3RvcChzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0LCBzdHJ1Y3Qgc2NzaV9wb2ludGVyICpTQ3ApCiB7CiAJc3RydWN0IGVlc294c2NzaV9pbmZvICppbmZvID0gKHN0cnVjdCBlZXNveHNjc2lfaW5mbyAqKWhvc3QtPmhvc3RkYXRhOwogCWlmIChpbmZvLT5pbmZvLnNjc2kuZG1hICE9IE5PX0RNQSkKQEAgLTQ5OSw3ICs0OTksNyBAQAogc3RhdGljIERFVklDRV9BVFRSKGJ1c190ZXJtLCBTX0lSVUdPIHwgU19JV1VTUiwKIAkJICAgZWVzb3hzY3NpX3Nob3dfdGVybSwgZWVzb3hzY3NpX3N0b3JlX3Rlcm0pOwogCi1zdGF0aWMgU2NzaV9Ib3N0X1RlbXBsYXRlIGVlc294X3RlbXBsYXRlID0geworc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgZWVzb3hfdGVtcGxhdGUgPSB7CiAJLm1vZHVsZQkJCQk9IFRISVNfTU9EVUxFLAogCS5wcm9jX2luZm8JCQk9IGVlc294c2NzaV9wcm9jX2luZm8sCiAJLm5hbWUJCQkJPSAiRUVTT1ggU0NTSSIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYXJtL2ZhczIxNi5jIGIvZHJpdmVycy9zY3NpL2FybS9mYXMyMTYuYwppbmRleCA0NzcyZmIzLi4zZTEwNTNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYXJtL2ZhczIxNi5jCisrKyBiL2RyaXZlcnMvc2NzaS9hcm0vZmFzMjE2LmMKQEAgLTE3Myw3ICsxNzMsNyBAQAogCQlmYXMyMTZfcmVhZGIoaW5mbywgUkVHX0NUQ0gpKTsKIH0KIAotc3RhdGljIHZvaWQgcHJpbnRfU0NwKFNjc2lfUG9pbnRlciAqU0NwLCBjb25zdCBjaGFyICpwcmVmaXgsIGNvbnN0IGNoYXIgKnN1ZmZpeCkKK3N0YXRpYyB2b2lkIHByaW50X1NDcChzdHJ1Y3Qgc2NzaV9wb2ludGVyICpTQ3AsIGNvbnN0IGNoYXIgKnByZWZpeCwgY29uc3QgY2hhciAqc3VmZml4KQogewogCXByaW50aygiJXNwdHIgJXAgdGhpc19yZXNpZHVhbCAweCV4IGJ1ZmZlciAlcCBidWZmZXJzX3Jlc2lkdWFsIDB4JXglcyIsCiAJCXByZWZpeCwgU0NwLT5wdHIsIFNDcC0+dGhpc19yZXNpZHVhbCwgU0NwLT5idWZmZXIsCkBAIC02MjgsNyArNjI4LDcgQEAKICAqLwogc3RhdGljIHZvaWQgZmFzMjE2X3VwZGF0ZXB0cnMoRkFTMjE2X0luZm8gKmluZm8sIGludCBieXRlc190cmFuc2ZlcnJlZCkKIHsKLQlTY3NpX1BvaW50ZXIgKlNDcCA9ICZpbmZvLT5zY3NpLlNDcDsKKwlzdHJ1Y3Qgc2NzaV9wb2ludGVyICpTQ3AgPSAmaW5mby0+c2NzaS5TQ3A7CiAKIAlmYXMyMTZfY2hlY2ttYWdpYyhpbmZvKTsKIApAQCAtNjY4LDcgKzY2OCw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIGZhczIxNl9waW8oRkFTMjE2X0luZm8gKmluZm8sIGZhc2RtYWRpcl90IGRpcmVjdGlvbikKIHsKLQlTY3NpX1BvaW50ZXIgKlNDcCA9ICZpbmZvLT5zY3NpLlNDcDsKKwlzdHJ1Y3Qgc2NzaV9wb2ludGVyICpTQ3AgPSAmaW5mby0+c2NzaS5TQ3A7CiAKIAlmYXMyMTZfY2hlY2ttYWdpYyhpbmZvKTsKIApAQCAtMjU1OSw3ICsyNTU5LDcgQEAKIHsKIAlGQVMyMTZfSW5mbyAqaW5mbyA9IChGQVMyMTZfSW5mbyAqKVNDcG50LT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JU2NzaV9EZXZpY2UgKlNEcG50OworCXN0cnVjdCBzY3NpX2RldmljZSAqU0RwbnQ7CiAKIAlmYXMyMTZfY2hlY2ttYWdpYyhpbmZvKTsKIAlmYXMyMTZfbG9nKGluZm8sIExPR19FUlJPUiwgInJlc2V0dGluZyBidXMiKTsKQEAgLTMwMDAsNyArMzAwMCw3IEBACiBpbnQgZmFzMjE2X3ByaW50X2RldmljZXMoRkFTMjE2X0luZm8gKmluZm8sIGNoYXIgKmJ1ZmZlcikKIHsKIAlzdHJ1Y3QgZmFzMjE2X2RldmljZSAqZGV2OwotCVNjc2lfRGV2aWNlICpzY2Q7CisJc3RydWN0IHNjc2lfZGV2aWNlICpzY2Q7CiAJY2hhciAqcCA9IGJ1ZmZlcjsKIAogCXAgKz0gc3ByaW50ZihwLCAiRGV2aWNlL0x1biBUYWdnZWRRICAgICAgIFBhcml0eSAgIFN5bmNcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FybS9mYXMyMTYuaCBiL2RyaXZlcnMvc2NzaS9hcm0vZmFzMjE2LmgKaW5kZXggNjBhMmExMi4uNTQwOTE0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FybS9mYXMyMTYuaAorKysgYi9kcml2ZXJzL3Njc2kvYXJtL2ZhczIxNi5oCkBAIC0yNDMsNyArMjQzLDcgQEAKIAkJdW5zaWduZWQgaW50CWlycTsJCQkvKiBpbnRlcnJ1cHQJCQkJKi8KIAkJaW50CQlkbWE7CQkJLyogZG1hIGNoYW5uZWwJCQkJKi8KIAotCQlTY3NpX1BvaW50ZXIJU0NwOwkJCS8qIGN1cnJlbnQgY29tbWFuZHMgZGF0YSBwb2ludGVyCSovCisJCXN0cnVjdCBzY3NpX3BvaW50ZXIJU0NwOwkJCS8qIGN1cnJlbnQgY29tbWFuZHMgZGF0YSBwb2ludGVyCSovCiAKIAkJTXNnUXVldWVfdAltc2dzOwkJCS8qIG1lc3NhZ2UgcXVldWUgZm9yIGNvbm5lY3RlZCBkZXZpY2UJKi8KIApAQCAtMzA0LDkgKzMwNCw5IEBACiAJLyogZG1hICovCiAJc3RydWN0IHsKIAkJZmFzZG1hdHlwZV90CXRyYW5zZmVyX3R5cGU7CQkvKiBjdXJyZW50IHR5cGUgb2YgRE1BIHRyYW5zZmVyCQkqLwotCQlmYXNkbWF0eXBlX3QJKCpzZXR1cCkgKHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QsIFNjc2lfUG9pbnRlciAqU0NwLCBmYXNkbWFkaXJfdCBkaXJlY3Rpb24sIGZhc2RtYXR5cGVfdCBtaW5fZG1hKTsKLQkJdm9pZAkJKCpwc2V1ZG8pKHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QsIFNjc2lfUG9pbnRlciAqU0NwLCBmYXNkbWFkaXJfdCBkaXJlY3Rpb24sIGludCB0cmFuc2Zlcik7Ci0JCXZvaWQJCSgqc3RvcCkgIChzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0LCBTY3NpX1BvaW50ZXIgKlNDcCk7CisJCWZhc2RtYXR5cGVfdAkoKnNldHVwKSAoc3RydWN0IFNjc2lfSG9zdCAqaG9zdCwgc3RydWN0IHNjc2lfcG9pbnRlciAqU0NwLCBmYXNkbWFkaXJfdCBkaXJlY3Rpb24sIGZhc2RtYXR5cGVfdCBtaW5fZG1hKTsKKwkJdm9pZAkJKCpwc2V1ZG8pKHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QsIHN0cnVjdCBzY3NpX3BvaW50ZXIgKlNDcCwgZmFzZG1hZGlyX3QgZGlyZWN0aW9uLCBpbnQgdHJhbnNmZXIpOworCQl2b2lkCQkoKnN0b3ApICAoc3RydWN0IFNjc2lfSG9zdCAqaG9zdCwgc3RydWN0IHNjc2lfcG9pbnRlciAqU0NwKTsKIAl9IGRtYTsKIAogCS8qIG1pc2NlbGxhbmVvdXMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hcm0vb2FrLmMgYi9kcml2ZXJzL3Njc2kvYXJtL29hay5jCmluZGV4IGRlMjRiYjkuLmQ4MDZiMDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hcm0vb2FrLmMKKysrIGIvZHJpdmVycy9zY3NpL2FybS9vYWsuYwpAQCAtMTExLDcgKzExMSw3IEBACiAKICNpbmNsdWRlICIuLi9OQ1I1MzgwLmMiCiAKLXN0YXRpYyBTY3NpX0hvc3RfVGVtcGxhdGUgb2Frc2NzaV90ZW1wbGF0ZSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIG9ha3Njc2lfdGVtcGxhdGUgPSB7CiAJLm1vZHVsZQkJCT0gVEhJU19NT0RVTEUsCiAJLnByb2NfaW5mbwkJPSBvYWtzY3NpX3Byb2NfaW5mbywKIAkubmFtZQkJCT0gIk9hayAxNi1iaXQgU0NTSSIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYXJtL3Bvd2VydGVjLmMgYi9kcml2ZXJzL3Njc2kvYXJtL3Bvd2VydGVjLmMKaW5kZXggYWJkYTIxNi4uMzMzM2Q3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FybS9wb3dlcnRlYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9hcm0vcG93ZXJ0ZWMuYwpAQCAtMTMyLDcgKzEzMiw3IEBACiAgKiBSZXR1cm5zICA6IHR5cGUgb2YgdHJhbnNmZXIgdG8gYmUgcGVyZm9ybWVkCiAgKi8KIHN0YXRpYyBmYXNkbWF0eXBlX3QKLXBvd2VydGVjc2NzaV9kbWFfc2V0dXAoc3RydWN0IFNjc2lfSG9zdCAqaG9zdCwgU2NzaV9Qb2ludGVyICpTQ3AsCitwb3dlcnRlY3Njc2lfZG1hX3NldHVwKHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QsIHN0cnVjdCBzY3NpX3BvaW50ZXIgKlNDcCwKIAkJICAgICAgIGZhc2RtYWRpcl90IGRpcmVjdGlvbiwgZmFzZG1hdHlwZV90IG1pbl90eXBlKQogewogCXN0cnVjdCBwb3dlcnRlY19pbmZvICppbmZvID0gKHN0cnVjdCBwb3dlcnRlY19pbmZvICopaG9zdC0+aG9zdGRhdGE7CkBAIC0xNzQsNyArMTc0LDcgQEAKICAqCSAgICAgIFNDcG50IC0gY29tbWFuZAogICovCiBzdGF0aWMgdm9pZAotcG93ZXJ0ZWNzY3NpX2RtYV9zdG9wKHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QsIFNjc2lfUG9pbnRlciAqU0NwKQorcG93ZXJ0ZWNzY3NpX2RtYV9zdG9wKHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QsIHN0cnVjdCBzY3NpX3BvaW50ZXIgKlNDcCkKIHsKIAlzdHJ1Y3QgcG93ZXJ0ZWNfaW5mbyAqaW5mbyA9IChzdHJ1Y3QgcG93ZXJ0ZWNfaW5mbyAqKWhvc3QtPmhvc3RkYXRhOwogCWlmIChpbmZvLT5pbmZvLnNjc2kuZG1hICE9IE5PX0RNQSkKQEAgLTI5Myw3ICsyOTMsNyBAQAogc3RhdGljIERFVklDRV9BVFRSKGJ1c190ZXJtLCBTX0lSVUdPIHwgU19JV1VTUiwKIAkJICAgcG93ZXJ0ZWNzY3NpX3Nob3dfdGVybSwgcG93ZXJ0ZWNzY3NpX3N0b3JlX3Rlcm0pOwogCi1zdGF0aWMgU2NzaV9Ib3N0X1RlbXBsYXRlIHBvd2VydGVjc2NzaV90ZW1wbGF0ZSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIHBvd2VydGVjc2NzaV90ZW1wbGF0ZSA9IHsKIAkubW9kdWxlCQkJCT0gVEhJU19NT0RVTEUsCiAJLnByb2NfaW5mbwkJCT0gcG93ZXJ0ZWNzY3NpX3Byb2NfaW5mbywKIAkubmFtZQkJCQk9ICJQb3dlclRlYyBTQ1NJIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hcm0vc2NzaS5oIGIvZHJpdmVycy9zY3NpL2FybS9zY3NpLmgKaW5kZXggMTk5Mzc2NC4uNmRkNTQ0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FybS9zY3NpLmgKKysrIGIvZHJpdmVycy9zY3NpL2FybS9zY3NpLmgKQEAgLTE4LDcgKzE4LDcgQEAKICAqIFRoZSBzY2F0dGVyLWdhdGhlciBsaXN0IGhhbmRsaW5nLiAgVGhpcyBjb250YWlucyBhbGwKICAqIHRoZSB5dWNreSBzdHVmZiB0aGF0IG5lZWRzIHRvIGJlIGZpeGVkIHByb3Blcmx5LgogICovCi1zdGF0aWMgaW5saW5lIGludCBjb3B5X1NDcF90b19zZyhzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBTY3NpX1BvaW50ZXIgKlNDcCwgaW50IG1heCkKK3N0YXRpYyBpbmxpbmUgaW50IGNvcHlfU0NwX3RvX3NnKHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHN0cnVjdCBzY3NpX3BvaW50ZXIgKlNDcCwgaW50IG1heCkKIHsKIAlpbnQgYnVmcyA9IFNDcC0+YnVmZmVyc19yZXNpZHVhbDsKIApAQCAtMzIsNyArMzIsNyBAQAogCXJldHVybiBidWZzICsgMTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgbmV4dF9TQ3AoU2NzaV9Qb2ludGVyICpTQ3ApCitzdGF0aWMgaW5saW5lIGludCBuZXh0X1NDcChzdHJ1Y3Qgc2NzaV9wb2ludGVyICpTQ3ApCiB7CiAJaW50IHJldCA9IFNDcC0+YnVmZmVyc19yZXNpZHVhbDsKIAlpZiAocmV0KSB7CkBAIC00OSw3ICs0OSw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIGdldF9uZXh0X1NDcF9ieXRlKFNjc2lfUG9pbnRlciAqU0NwKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIGdldF9uZXh0X1NDcF9ieXRlKHN0cnVjdCBzY3NpX3BvaW50ZXIgKlNDcCkKIHsKIAljaGFyIGMgPSAqU0NwLT5wdHI7CiAKQEAgLTU5LDcgKzU5LDcgQEAKIAlyZXR1cm4gYzsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHB1dF9uZXh0X1NDcF9ieXRlKFNjc2lfUG9pbnRlciAqU0NwLCB1bnNpZ25lZCBjaGFyIGMpCitzdGF0aWMgaW5saW5lIHZvaWQgcHV0X25leHRfU0NwX2J5dGUoc3RydWN0IHNjc2lfcG9pbnRlciAqU0NwLCB1bnNpZ25lZCBjaGFyIGMpCiB7CiAJKlNDcC0+cHRyID0gYzsKIAlTQ3AtPnB0ciArPSAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2F0YV9waWl4LmMgYi9kcml2ZXJzL3Njc2kvYXRhX3BpaXguYwppbmRleCA3ZjhhYTFiLi44NTU0MjhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYXRhX3BpaXguYworKysgYi9kcml2ZXJzL3Njc2kvYXRhX3BpaXguYwpAQCAtNDYsNyArNDYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSAic2NzaS5oIgogI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CiAjaW5jbHVkZSA8bGludXgvbGliYXRhLmg+CiAKQEAgLTk2LDcgKzk1LDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGludCBpbl9tb2R1bGVfaW5pdCA9IDE7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwaWl4X3BjaV90YmxbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwaWl4X3BjaV90YmxbXSA9IHsKICNpZmRlZiBBVEFfRU5BQkxFX1BBVEEKIAl7IDB4ODA4NiwgMHg3MTExLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBwaWl4NF9wYXRhIH0sCiAJeyAweDgwODYsIDB4MjRkYiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgaWNoNV9wYXRhIH0sCkBAIC0xMjgsNyArMTI3LDcgQEAKIAkucmVtb3ZlCQkJPSBhdGFfcGNpX3JlbW92ZV9vbmUsCiB9OwogCi1zdGF0aWMgU2NzaV9Ib3N0X1RlbXBsYXRlIHBpaXhfc2h0ID0geworc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgcGlpeF9zaHQgPSB7CiAJLm1vZHVsZQkJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCQk9IERSVl9OQU1FLAogCS5pb2N0bAkJCT0gYXRhX3Njc2lfaW9jdGwsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYXRhcmlfTkNSNTM4MC5jIGIvZHJpdmVycy9zY3NpL2F0YXJpX05DUjUzODAuYwppbmRleCAyYzEyYmU3Li4yYWUzMWNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYXRhcmlfTkNSNTM4MC5jCisrKyBiL2RyaXZlcnMvc2NzaS9hdGFyaV9OQ1I1MzgwLmMKQEAgLTI1NSw3ICsyNTUsNyBAQAogICovCiAKIHN0YXRpYyBzdHJ1Y3QgU2NzaV9Ib3N0ICpmaXJzdF9pbnN0YW5jZSA9IE5VTEw7Ci1zdGF0aWMgU2NzaV9Ib3N0X1RlbXBsYXRlICp0aGVfdGVtcGxhdGUgPSBOVUxMOworc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKnRoZV90ZW1wbGF0ZSA9IE5VTEw7CiAKIC8qIE1hY3JvcyBlYXNlIGxpZmUuLi4gOi0pICovCiAjZGVmaW5lCVNFVFVQX0hPU1REQVRBKGluKQkJCQlcCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYXRhcmlfc2NzaS5jIGIvZHJpdmVycy9zY3NpL2F0YXJpX3Njc2kuYwppbmRleCBhZjhhZGI2Li5mNGMxY2E3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYXRhcmlfc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9hdGFyaV9zY3NpLmMKQEAgLTYwMCw3ICs2MDAsNyBAQAogI2VuZGlmCiAKIAotaW50IGF0YXJpX3Njc2lfZGV0ZWN0IChTY3NpX0hvc3RfVGVtcGxhdGUgKmhvc3QpCitpbnQgYXRhcmlfc2NzaV9kZXRlY3QgKHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKmhvc3QpCiB7CiAJc3RhdGljIGludCBjYWxsZWQgPSAwOwogCXN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlOwpAQCAtMTE0MSw3ICsxMTQxLDcgQEAKIAogI2luY2x1ZGUgImF0YXJpX05DUjUzODAuYyIKIAotc3RhdGljIFNjc2lfSG9zdF9UZW1wbGF0ZSBkcml2ZXJfdGVtcGxhdGUgPSB7CitzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBkcml2ZXJfdGVtcGxhdGUgPSB7CiAJLnByb2NfaW5mbwkJPSBhdGFyaV9zY3NpX3Byb2NfaW5mbywKIAkubmFtZQkJCT0gIkF0YXJpIG5hdGl2ZSBTQ1NJIiwKIAkuZGV0ZWN0CQkJPSBhdGFyaV9zY3NpX2RldGVjdCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hdGFyaV9zY3NpLmggYi9kcml2ZXJzL3Njc2kvYXRhcmlfc2NzaS5oCmluZGV4IGNjMTI1NjkuLmY5MTdiZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hdGFyaV9zY3NpLmgKKysrIGIvZHJpdmVycy9zY3NpL2F0YXJpX3Njc2kuaApAQCAtMTgsNyArMTgsNyBAQAogLyogKElfSEFWRV9PVkVSUlVOUyBzdHVmZiByZW1vdmVkKSAqLwogCiAjaWZuZGVmIEFTTQotaW50IGF0YXJpX3Njc2lfZGV0ZWN0IChTY3NpX0hvc3RfVGVtcGxhdGUgKik7CitpbnQgYXRhcmlfc2NzaV9kZXRlY3QgKHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKik7CiBjb25zdCBjaGFyICphdGFyaV9zY3NpX2luZm8gKHN0cnVjdCBTY3NpX0hvc3QgKik7CiBpbnQgYXRhcmlfc2NzaV9yZXNldCAoU2NzaV9DbW5kICosIHVuc2lnbmVkIGludCk7CiAjaWZkZWYgTU9EVUxFCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmx6MTIzMC5jIGIvZHJpdmVycy9zY3NpL2JsejEyMzAuYwppbmRleCA0Y2Q5ZmNmLi43NjNlNDA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmx6MTIzMC5jCisrKyBiL2RyaXZlcnMvc2NzaS9ibHoxMjMwLmMKQEAgLTk0LDcgKzk0LDcgQEAKIAkJCQkgKi8KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIERldGVjdGlvbiAqLwotaW50IF9faW5pdCBibHoxMjMwX2VzcF9kZXRlY3QoU2NzaV9Ib3N0X1RlbXBsYXRlICp0cG50KQoraW50IF9faW5pdCBibHoxMjMwX2VzcF9kZXRlY3Qoc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqdHBudCkKIHsKIAlzdHJ1Y3QgTkNSX0VTUCAqZXNwOwogCXN0cnVjdCB6b3Jyb19kZXYgKnogPSBOVUxMOwpAQCAtMzI4LDcgKzMyOCw3IEBACiB9CiAKIAotc3RhdGljIFNjc2lfSG9zdF9UZW1wbGF0ZSBkcml2ZXJfdGVtcGxhdGUgPSB7CitzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBkcml2ZXJfdGVtcGxhdGUgPSB7CiAJLnByb2NfbmFtZQkJPSAiZXNwLWJsejEyMzAiLAogCS5wcm9jX2luZm8JCT0gZXNwX3Byb2NfaW5mbywKIAkubmFtZQkJCT0gIkJsaXp6YXJkMTIzMCBTQ1NJIElWIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9ibHoyMDYwLmMgYi9kcml2ZXJzL3Njc2kvYmx6MjA2MC5jCmluZGV4IGM1MjIxZDAuLmQ3MmQwNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9ibHoyMDYwLmMKKysrIGIvZHJpdmVycy9zY3NpL2JsejIwNjAuYwpAQCAtOTAsNyArOTAsNyBAQAogCQkJCSAqLwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogRGV0ZWN0aW9uICovCi1pbnQgX19pbml0IGJsejIwNjBfZXNwX2RldGVjdChTY3NpX0hvc3RfVGVtcGxhdGUgKnRwbnQpCitpbnQgX19pbml0IGJsejIwNjBfZXNwX2RldGVjdChzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICp0cG50KQogewogCXN0cnVjdCBOQ1JfRVNQICplc3A7CiAJc3RydWN0IHpvcnJvX2RldiAqeiA9IE5VTEw7CkBAIC0yODIsNyArMjgyLDcgQEAKIH0KIAogCi1zdGF0aWMgU2NzaV9Ib3N0X1RlbXBsYXRlIGRyaXZlcl90ZW1wbGF0ZSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGRyaXZlcl90ZW1wbGF0ZSA9IHsKIAkucHJvY19uYW1lCQk9ICJlc3AtYmx6MjA2MCIsCiAJLnByb2NfaW5mbwkJPSBlc3BfcHJvY19pbmZvLAogCS5uYW1lCQkJPSAiQmxpenphcmQyMDYwIFNDU0kiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2J2bWU2MDAwLmMgYi9kcml2ZXJzL3Njc2kvYnZtZTYwMDAuYwppbmRleCAyOWM3ZWQzLi4yOTU4YjhjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYnZtZTYwMDAuYworKysgYi9kcml2ZXJzL3Njc2kvYnZtZTYwMDAuYwpAQCAtNyw3ICs3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L3pvcnJvLmg+CiAKICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KQEAgLTI0LDcgKzIzLDcgQEAKICNpbmNsdWRlPGxpbnV4L3N0YXQuaD4KIAogCi1pbnQgYnZtZTYwMDBfc2NzaV9kZXRlY3QoU2NzaV9Ib3N0X1RlbXBsYXRlICp0cG50KQoraW50IGJ2bWU2MDAwX3Njc2lfZGV0ZWN0KHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKnRwbnQpCiB7CiAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgY2FsbGVkID0gMDsKICAgICBpbnQgY2xvY2s7CkBAIC02MCw3ICs1OSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBTY3NpX0hvc3RfVGVtcGxhdGUgZHJpdmVyX3RlbXBsYXRlID0geworc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgZHJpdmVyX3RlbXBsYXRlID0gewogCS5uYW1lCQkJPSAiQlZNRTYwMDAgTkNSNTNjNzEwIFNDU0kiLAogCS5kZXRlY3QJCQk9IGJ2bWU2MDAwX3Njc2lfZGV0ZWN0LAogCS5yZWxlYXNlCQk9IGJ2bWU2MDAwX3Njc2lfcmVsZWFzZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9idm1lNjAwMC5oIGIvZHJpdmVycy9zY3NpL2J2bWU2MDAwLmgKaW5kZXggNDliNmJiYi4uN2M5YzAzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2J2bWU2MDAwLmgKKysrIGIvZHJpdmVycy9zY3NpL2J2bWU2MDAwLmgKQEAgLTMsNyArMyw3IEBACiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCi1pbnQgYnZtZTYwMDBfc2NzaV9kZXRlY3QoU2NzaV9Ib3N0X1RlbXBsYXRlICopOworaW50IGJ2bWU2MDAwX3Njc2lfZGV0ZWN0KHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKik7CiBjb25zdCBjaGFyICpOQ1I1M2M3eDBfaW5mbyh2b2lkKTsKIGludCBOQ1I1M2M3eHhfcXVldWVfY29tbWFuZChTY3NpX0NtbmQgKiwgdm9pZCAoKmRvbmUpKFNjc2lfQ21uZCAqKSk7CiBpbnQgTkNSNTNjN3h4X2Fib3J0KFNjc2lfQ21uZCAqKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9jeWJlcnN0b3JtLmMgYi9kcml2ZXJzL3Njc2kvY3liZXJzdG9ybS5jCmluZGV4IGJkYmNhODVkLi5mOWI5NDBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvY3liZXJzdG9ybS5jCisrKyBiL2RyaXZlcnMvc2NzaS9jeWJlcnN0b3JtLmMKQEAgLTEwNCw3ICsxMDQsNyBAQAogCQkJCSAqLwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogRGV0ZWN0aW9uICovCi1pbnQgX19pbml0IGN5YmVyX2VzcF9kZXRlY3QoU2NzaV9Ib3N0X1RlbXBsYXRlICp0cG50KQoraW50IF9faW5pdCBjeWJlcl9lc3BfZGV0ZWN0KHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKnRwbnQpCiB7CiAJc3RydWN0IE5DUl9FU1AgKmVzcDsKIAlzdHJ1Y3Qgem9ycm9fZGV2ICp6ID0gTlVMTDsKQEAgLTM1Myw3ICszNTMsNyBAQAogfQogCiAKLXN0YXRpYyBTY3NpX0hvc3RfVGVtcGxhdGUgZHJpdmVyX3RlbXBsYXRlID0geworc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgZHJpdmVyX3RlbXBsYXRlID0gewogCS5wcm9jX25hbWUJCT0gImVzcC1jeWJlcnN0b3JtIiwKIAkucHJvY19pbmZvCQk9IGVzcF9wcm9jX2luZm8sCiAJLm5hbWUJCQk9ICJDeWJlclN0b3JtIFNDU0kiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2N5YmVyc3Rvcm1JSS5jIGIvZHJpdmVycy9zY3NpL2N5YmVyc3Rvcm1JSS5jCmluZGV4IDg0NWQ5MjUuLmEzY2FhYmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9jeWJlcnN0b3JtSUkuYworKysgYi9kcml2ZXJzL3Njc2kvY3liZXJzdG9ybUlJLmMKQEAgLTgxLDcgKzgxLDcgQEAKIAkJCQkgKi8KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIERldGVjdGlvbiAqLwotaW50IF9faW5pdCBjeWJlcklJX2VzcF9kZXRlY3QoU2NzaV9Ib3N0X1RlbXBsYXRlICp0cG50KQoraW50IF9faW5pdCBjeWJlcklJX2VzcF9kZXRlY3Qoc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqdHBudCkKIHsKIAlzdHJ1Y3QgTkNSX0VTUCAqZXNwOwogCXN0cnVjdCB6b3Jyb19kZXYgKnogPSBOVUxMOwpAQCAtMjkwLDcgKzI5MCw3IEBACiB9CiAKIAotc3RhdGljIFNjc2lfSG9zdF9UZW1wbGF0ZSBkcml2ZXJfdGVtcGxhdGUgPSB7CitzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBkcml2ZXJfdGVtcGxhdGUgPSB7CiAJLnByb2NfbmFtZQkJPSAiZXNwLWN5YmVyc3Rvcm1JSSIsCiAJLnByb2NfaW5mbwkJPSBlc3BfcHJvY19pbmZvLAogCS5uYW1lCQkJPSAiQ3liZXJTdG9ybSBNayBJSSBTQ1NJIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9kZWNfZXNwLmMgYi9kcml2ZXJzL3Njc2kvZGVjX2VzcC5jCmluZGV4IDI1NmQ2YmEuLmEzNWVlNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9kZWNfZXNwLmMKKysrIGIvZHJpdmVycy9zY3NpL2RlY19lc3AuYwpAQCAtMTMzLDcgKzEzMyw3IEBACiAjaW5jbHVkZSAic2NzaV9tb2R1bGUuYyIKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIERldGVjdGlvbiAqLwotc3RhdGljIGludCBkZWNfZXNwX2RldGVjdChTY3NpX0hvc3RfVGVtcGxhdGUgKiB0cG50KQorc3RhdGljIGludCBkZWNfZXNwX2RldGVjdChzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICogdHBudCkKIHsKIAlzdHJ1Y3QgTkNSX0VTUCAqZXNwOwogCXN0cnVjdCBDb25maWdEZXYgKmVzcF9kZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZHB0aS5oIGIvZHJpdmVycy9zY3NpL2RwdGkuaAppbmRleCA0ODkxOTRhLi4yYWQyYTg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZHB0aS5oCisrKyBiL2RyaXZlcnMvc2NzaS9kcHRpLmgKQEAgLTQ0LDcgKzQ0LDcgQEAKIAogCiAvKgotICogU2NzaV9Ib3N0X1RlbXBsYXRlIChzZWUgaG9zdHMuaCkgCisgKiBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIChzZWUgaG9zdHMuaCkKICAqLwogCiAjZGVmaW5lIERQVF9EUklWRVJfTkFNRQkiQWRhcHRlYyBJMk8gUkFJRCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9kdGMuYyBiL2RyaXZlcnMvc2NzaS9kdGMuYwppbmRleCA4OTc3NDNiLi4zMTBkMmY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZHRjLmMKKysrIGIvZHJpdmVycy9zY3NpL2R0Yy5jCkBAIC0xOTksNyArMTk5LDcgQEAKICNlbmRpZgogCiAvKiAKLSAqIEZ1bmN0aW9uIDogaW50IGR0Y19kZXRlY3QoU2NzaV9Ib3N0X1RlbXBsYXRlICogdHBudCkKKyAqIEZ1bmN0aW9uIDogaW50IGR0Y19kZXRlY3Qoc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqIHRwbnQpCiAgKgogICogUHVycG9zZSA6IGRldGVjdHMgYW5kIGluaXRpYWxpemVzIERUQyAzMTgwLzMyODAgY29udHJvbGxlcnMKICAqCXRoYXQgd2VyZSBhdXRvcHJvYmVkLCBvdmVycmlkZGVuIG9uIHRoZSBMSUxPIGNvbW1hbmQgbGluZSwgCkBAIC0yMTEsNyArMjExLDcgQEAKICAqCiAqLwogCi1zdGF0aWMgaW50IF9faW5pdCBkdGNfZGV0ZWN0KFNjc2lfSG9zdF9UZW1wbGF0ZSAqIHRwbnQpCitzdGF0aWMgaW50IF9faW5pdCBkdGNfZGV0ZWN0KHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKiB0cG50KQogewogCXN0YXRpYyBpbnQgY3VycmVudF9vdmVycmlkZSA9IDAsIGN1cnJlbnRfYmFzZSA9IDA7CiAJc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2U7CkBAIC00NzEsNyArNDcxLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIFNjc2lfSG9zdF9UZW1wbGF0ZSBkcml2ZXJfdGVtcGxhdGUgPSB7CitzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBkcml2ZXJfdGVtcGxhdGUgPSB7CiAJLm5hbWUJCQkJPSAiRFRDIDMxODAvMzI4MCAiLAogCS5kZXRlY3QJCQkJPSBkdGNfZGV0ZWN0LAogCS5yZWxlYXNlCQkJPSBkdGNfcmVsZWFzZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9kdGMuaCBiL2RyaXZlcnMvc2NzaS9kdGMuaAppbmRleCAyNzdjZDAxLi4wYjIwNWY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZHRjLmgKKysrIGIvZHJpdmVycy9zY3NpL2R0Yy5oCkBAIC0zNSw3ICszNSw3IEBACiBzdGF0aWMgaW50IGR0Y19hYm9ydChTY3NpX0NtbmQgKik7CiBzdGF0aWMgaW50IGR0Y19iaW9zcGFyYW0oc3RydWN0IHNjc2lfZGV2aWNlICosIHN0cnVjdCBibG9ja19kZXZpY2UgKiwKIAkJICAgICAgICAgc2VjdG9yX3QsIGludCopOwotc3RhdGljIGludCBkdGNfZGV0ZWN0KFNjc2lfSG9zdF9UZW1wbGF0ZSAqKTsKK3N0YXRpYyBpbnQgZHRjX2RldGVjdChzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICopOwogc3RhdGljIGludCBkdGNfcXVldWVfY29tbWFuZChTY3NpX0NtbmQgKiwgdm9pZCAoKmRvbmUpKFNjc2lfQ21uZCAqKSk7CiBzdGF0aWMgaW50IGR0Y19idXNfcmVzZXQoU2NzaV9DbW5kICopOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZmFzdGxhbmUuYyBiL2RyaXZlcnMvc2NzaS9mYXN0bGFuZS5jCmluZGV4IGFlNDc2MTIuLmNjZWU2OGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9mYXN0bGFuZS5jCisrKyBiL2RyaXZlcnMvc2NzaS9mYXN0bGFuZS5jCkBAIC0xMjUsNyArMTI1LDcgQEAKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIERldGVjdGlvbiAqLwotaW50IF9faW5pdCBmYXN0bGFuZV9lc3BfZGV0ZWN0KFNjc2lfSG9zdF9UZW1wbGF0ZSAqdHBudCkKK2ludCBfX2luaXQgZmFzdGxhbmVfZXNwX2RldGVjdChzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICp0cG50KQogewogCXN0cnVjdCBOQ1JfRVNQICplc3A7CiAJc3RydWN0IHpvcnJvX2RldiAqeiA9IE5VTEw7CkBAIC0zOTgsNyArMzk4LDcgQEAKIH0KIAogCi1zdGF0aWMgU2NzaV9Ib3N0X1RlbXBsYXRlIGRyaXZlcl90ZW1wbGF0ZSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGRyaXZlcl90ZW1wbGF0ZSA9IHsKIAkucHJvY19uYW1lCQk9ICJlc3AtZmFzdGxhbmUiLAogCS5wcm9jX2luZm8JCT0gZXNwX3Byb2NfaW5mbywKIAkubmFtZQkJCT0gIkZhc3RsYW5lIFNDU0kiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2ZjYWwuYyBiL2RyaXZlcnMvc2NzaS9mY2FsLmMKaW5kZXggYTZmMTIwZC4uMDM0MTY1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2ZjYWwuYworKysgYi9kcml2ZXJzL3Njc2kvZmNhbC5jCkBAIC03MCw3ICs3MCw3IEBACiAKIHN0YXRpYyBpbnQgZmNhbF9lbmNvZGVfYWRkcihTY3NpX0NtbmQgKlNDcG50LCB1MTYgKmFkZHIsIGZjX2NoYW5uZWwgKmZjLCBmY3BfY21uZCAqZmNtZCk7CiAKLWludCBmY2FsX3NsYXZlX2NvbmZpZ3VyZShTY3NpX0RldmljZSAqZGV2aWNlKQoraW50IGZjYWxfc2xhdmVfY29uZmlndXJlKHN0cnVjdCBzY3NpX2RldmljZSAqZGV2aWNlKQogewogCWludCBkZXB0aF90b191c2U7CiAJCkBAIC04OSw3ICs4OSw3IEBACiAKIC8qIERldGVjdCBhbGwgRkMgQXJiaXRyYXRlZCBMb29wcyBhdHRhY2hlZCB0byB0aGUgbWFjaGluZS4KICAgIGZjNCBtb2R1bGUgaGFzIGRvbmUgYWxsIHRoZSB3b3JrIGZvciB1cy4uLiAqLwotaW50IF9faW5pdCBmY2FsX2RldGVjdChTY3NpX0hvc3RfVGVtcGxhdGUgKnRwbnQpCitpbnQgX19pbml0IGZjYWxfZGV0ZWN0KHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKnRwbnQpCiB7CiAJaW50IG5mY2FscyA9IDA7CiAJZmNfY2hhbm5lbCAqZmM7CkBAIC0yNDQsNyArMjQ0LDcgQEAKIAkJCVNQUklOVEYgKCIgIFtBTC1QQTogJTAyeCwgUG9ydCBXV046ICUwOHglMDh4LCBOb2RlIFdXTjogJTA4eCUwOHhdIE5vdCByZXNwb25kZWQgdG8gUFJMSVxuIiwKIAkJCQkgYWxwYSwgdTFbMF0sIHUxWzFdLCB1MlswXSwgdTJbMV0pOwogCQl9IGVsc2UgewotCQkJU2NzaV9EZXZpY2UgKnNjZDsKKwkJCXN0cnVjdCBzY3NpX2RldmljZSAqc2NkOwogCQkJc2hvc3RfZm9yX2VhY2hfZGV2aWNlKHNjZCwgaG9zdCkKIAkJCQlpZiAoc2NkLT5pZCA9PSB0YXJnZXQpIHsKIAkJCQkJU1BSSU5URiAoIiAgW0FMLVBBOiAlMDJ4LCBJZDogJTAyZCwgUG9ydCBXV046ICUwOHglMDh4LCBOb2RlIFdXTjogJTA4eCUwOHhdICAiLApAQCAtMjk3LDcgKzI5Nyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBTY3NpX0hvc3RfVGVtcGxhdGUgZHJpdmVyX3RlbXBsYXRlID0geworc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgZHJpdmVyX3RlbXBsYXRlID0gewogCS5uYW1lCQkJPSAiRmlicmUgQ2hhbm5lbCBBcmJpdHJhdGVkIExvb3AiLAogCS5kZXRlY3QJCQk9IGZjYWxfZGV0ZWN0LAogCS5yZWxlYXNlCQk9IGZjYWxfcmVsZWFzZSwJCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZmNhbC5oIGIvZHJpdmVycy9zY3NpL2ZjYWwuaAppbmRleCAyMWFhMzJlLi43ZmYyYzM0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2ZjYWwuaAorKysgYi9kcml2ZXJzL3Njc2kvZmNhbC5oCkBAIC0yMCw4ICsyMCw4IEBACiAgICBmb3IgYSBwYXJ0aWN1bGFyIGNoYW5uZWwgKi8KICNkZWZpbmUgRkNBTF9DQU5fUVVFVUUJCTUxMgogCi1pbnQgZmNhbF9kZXRlY3QoU2NzaV9Ib3N0X1RlbXBsYXRlICopOworaW50IGZjYWxfZGV0ZWN0KHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKik7CiBpbnQgZmNhbF9yZWxlYXNlKHN0cnVjdCBTY3NpX0hvc3QgKik7Ci1pbnQgZmNhbF9zbGF2ZV9jb25maWd1cmUoU2NzaV9EZXZpY2UgKik7CitpbnQgZmNhbF9zbGF2ZV9jb25maWd1cmUoc3RydWN0IHNjc2lfZGV2aWNlICopOwogCiAjZW5kaWYgLyogIShfRkNBTF9IKSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2ZkX21jcy5jIGIvZHJpdmVycy9zY3NpL2ZkX21jcy5jCmluZGV4IDZkNDQ2MDIuLmNjYTQ4NWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9mZF9tY3MuYworKysgYi9kcml2ZXJzL3Njc2kvZmRfbWNzLmMKQEAgLTM0Myw3ICszNDMsNyBAQAogCQlvdXRiKDB4MDEgfCBQQVJJVFlfTUFTSywgVE1DX0NudGxfcG9ydCk7CiB9CiAKLXN0YXRpYyBpbnQgZmRfbWNzX2RldGVjdChTY3NpX0hvc3RfVGVtcGxhdGUgKiB0cG50KQorc3RhdGljIGludCBmZF9tY3NfZGV0ZWN0KHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKiB0cG50KQogewogCWludCBsb29wOwogCXN0cnVjdCBTY3NpX0hvc3QgKnNocG50OwpAQCAtMTM0Myw3ICsxMzQzLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIFNjc2lfSG9zdF9UZW1wbGF0ZSBkcml2ZXJfdGVtcGxhdGUgPSB7CitzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBkcml2ZXJfdGVtcGxhdGUgPSB7CiAJLnByb2NfbmFtZQkJCT0gImZkX21jcyIsCiAJLnByb2NfaW5mbwkJCT0gZmRfbWNzX3Byb2NfaW5mbywKIAkuZGV0ZWN0CQkJCT0gZmRfbWNzX2RldGVjdCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9nX05DUjUzODAuYyBiL2RyaXZlcnMvc2NzaS9nX05DUjUzODAuYwppbmRleCBhM2FhNzI5Li40NTc1NmZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZ19OQ1I1MzgwLmMKKysrIGIvZHJpdmVycy9zY3NpL2dfTkNSNTM4MC5jCkBAIC0yODUsNyArMjg1LDcgQEAKICAqCUxvY2tzOiBub25lCiAgKi8KIAotaW50IF9faW5pdCBnZW5lcmljX05DUjUzODBfZGV0ZWN0KFNjc2lfSG9zdF9UZW1wbGF0ZSAqIHRwbnQpCitpbnQgX19pbml0IGdlbmVyaWNfTkNSNTM4MF9kZXRlY3Qoc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqIHRwbnQpCiB7CiAJc3RhdGljIGludCBjdXJyZW50X292ZXJyaWRlID0gMDsKIAlpbnQgY291bnQsIGk7CkBAIC03OTgsNyArNzk4LDcgQEAKIAlTY3NpX0NtbmQgKnB0cjsKIAlzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqaG9zdGRhdGE7CiAjaWZkZWYgTkNSNTM4MF9TVEFUUwotCVNjc2lfRGV2aWNlICpkZXY7CisJc3RydWN0IHNjc2lfZGV2aWNlICpkZXY7CiAJZXh0ZXJuIGNvbnN0IGNoYXIgKmNvbnN0IHNjc2lfZGV2aWNlX3R5cGVzW01BWF9TQ1NJX0RFVklDRV9DT0RFXTsKICNlbmRpZgogCkBAIC04OTksNyArODk5LDcgQEAKICN1bmRlZiBQUklOVFAKICN1bmRlZiBBTkRQCiAKLXN0YXRpYyBTY3NpX0hvc3RfVGVtcGxhdGUgZHJpdmVyX3RlbXBsYXRlID0geworc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgZHJpdmVyX3RlbXBsYXRlID0gewogCS5wcm9jX2luZm8gICAgICAJPSBnZW5lcmljX05DUjUzODBfcHJvY19pbmZvLAogCS5uYW1lICAgICAgICAgICAJPSAiR2VuZXJpYyBOQ1I1MzgwL05DUjUzQzQwMCBTY3NpIERyaXZlciIsCiAJLmRldGVjdCAgICAgICAgIAk9IGdlbmVyaWNfTkNSNTM4MF9kZXRlY3QsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZ19OQ1I1MzgwLmggYi9kcml2ZXJzL3Njc2kvZ19OQ1I1MzgwLmgKaW5kZXggYzhhZGM1YS4uNjU2ZmJlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2dfTkNSNTM4MC5oCisrKyBiL2RyaXZlcnMvc2NzaS9nX05DUjUzODAuaApAQCAtNDUsNyArNDUsNyBAQAogCiAjaWZuZGVmIEFTTQogc3RhdGljIGludCBnZW5lcmljX05DUjUzODBfYWJvcnQoU2NzaV9DbW5kICopOwotc3RhdGljIGludCBnZW5lcmljX05DUjUzODBfZGV0ZWN0KFNjc2lfSG9zdF9UZW1wbGF0ZSAqKTsKK3N0YXRpYyBpbnQgZ2VuZXJpY19OQ1I1MzgwX2RldGVjdChzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICopOwogc3RhdGljIGludCBnZW5lcmljX05DUjUzODBfcmVsZWFzZV9yZXNvdXJjZXMoc3RydWN0IFNjc2lfSG9zdCAqKTsKIHN0YXRpYyBpbnQgZ2VuZXJpY19OQ1I1MzgwX3F1ZXVlX2NvbW1hbmQoU2NzaV9DbW5kICosIHZvaWQgKCpkb25lKShTY3NpX0NtbmQgKikpOwogc3RhdGljIGludCBnZW5lcmljX05DUjUzODBfYnVzX3Jlc2V0KFNjc2lfQ21uZCAqKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9nZHRoLmMgYi9kcml2ZXJzL3Njc2kvZ2R0aC5jCmluZGV4IGFmNjgyMzAuLmE2ZGViMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9nZHRoLmMKKysrIGIvZHJpdmVycy9zY3NpL2dkdGguYwpAQCAtOTQsNyArOTQsNyBAQAogICogQnVnZml4IGZyZWVfaXJxKCkKICAqCiAgKiBSZXZpc2lvbiAxLjU2ICAyMDAxLzA4LzA5IDExOjE5OjM5ICBhY2hpbQotICogU2NzaV9Ib3N0X1RlbXBsYXRlIGNoYW5nZXMKKyAqIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgY2hhbmdlcwogICoKICAqIFJldmlzaW9uIDEuNTUgIDIwMDEvMDgvMDkgMTA6MTE6MjggIGFjaGltCiAgKiBDb21tYW5kIEhPU1RfVU5GUkVFWkVfSU8gYmVmb3JlIGNhY2hlIHNlcnZpY2UgaW5pdC4KQEAgLTQxNTMsNyArNDE1Myw3IEBACiAgICAgcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IGdkdGhfZGV0ZWN0KFNjc2lfSG9zdF9UZW1wbGF0ZSAqc2h0cCkKK3N0YXRpYyBpbnQgX19pbml0IGdkdGhfZGV0ZWN0KHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKnNodHApCiB7CiAgICAgc3RydWN0IFNjc2lfSG9zdCAqc2hwOwogICAgIGdkdGhfcGNpX3N0ciBwY2lzdHJbTUFYSEFdOwpAQCAtNTU2Miw3ICs1NTYyLDcgQEAKICNlbHNlCiAgICAgU2NzaV9DbW5kICAgICAgICpzY3A7CiAjZW5kaWYKLSAgICBTY3NpX0RldmljZSAgICAgKnNkZXY7CisgICAgc3RydWN0IHNjc2lfZGV2aWNlICAgICAqc2RldjsKICAgICBjaGFyICAgICAgICAgICAgY21uZFtNQVhfQ09NTUFORF9TSVpFXTsgICAKICAgICBtZW1zZXQoY21uZCwgMHhmZiwgTUFYX0NPTU1BTkRfU0laRSk7CiAKQEAgLTU2MjQsMTAgKzU2MjQsMTAgQEAKICAgICBnZHRoX2NtZF9zdHIgICAgZ2R0Y21kOwogI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMCkKICAgICBTY3NpX1JlcXVlc3QgICAgKnNycDsKLSAgICBTY3NpX0RldmljZSAgICAgKnNkZXY7CisgICAgc3RydWN0IHNjc2lfZGV2aWNlICAgICAqc2RldjsKICNlbHNlCiAgICAgU2NzaV9DbW5kICAgICAgICpzY3A7Ci0gICAgU2NzaV9EZXZpY2UgICAgICpzZGV2OworICAgIHN0cnVjdCBzY3NpX2RldmljZSAgICAgKnNkZXY7CiAjZW5kaWYKICAgICBjaGFyICAgICAgICAgICAgY21uZFtNQVhfQ09NTUFORF9TSVpFXTsgICAKICNlbmRpZgpAQCAtNTY4Myw3ICs1NjgzLDcgQEAKICAgICByZXR1cm4gTk9USUZZX09LOwogfQogCi1zdGF0aWMgU2NzaV9Ib3N0X1RlbXBsYXRlIGRyaXZlcl90ZW1wbGF0ZSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGRyaXZlcl90ZW1wbGF0ZSA9IHsKICAgICAgICAgLnByb2NfbmFtZSAgICAgICAgICAgICAgPSAiZ2R0aCIsIAogICAgICAgICAucHJvY19pbmZvICAgICAgICAgICAgICA9IGdkdGhfcHJvY19pbmZvLAogICAgICAgICAubmFtZSAgICAgICAgICAgICAgICAgICA9ICJHRFQgU0NTSSBEaXNrIEFycmF5IENvbnRyb2xsZXIiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2dkdGguaCBiL2RyaXZlcnMvc2NzaS9nZHRoLmgKaW5kZXggYzBmMWUzNC4uY2M0ODgyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2dkdGguaAorKysgYi9kcml2ZXJzL3Njc2kvZ2R0aC5oCkBAIC05NDQsOSArOTQ0LDkgQEAKICAgICB1bG9uZyAgICAgICAgICAgICAgIGRtYTMyX2NudCwgZG1hNjRfY250OyAgIC8qIHN0YXRpc3RpY3M6IERNQSBidWZmZXIgKi8KICNlbmRpZgogI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDQsMCkKLSAgICBTY3NpX0RldmljZSAgICAgICAgICpzZGV2OworICAgIHN0cnVjdCBzY3NpX2RldmljZSAgICAgICAgICpzZGV2OwogI2Vsc2UKLSAgICBTY3NpX0RldmljZSAgICAgICAgIHNkZXY7CisgICAgc3RydWN0IHNjc2lfZGV2aWNlICAgICAgICAgc2RldjsKICNlbmRpZgogfSBnZHRoX2hhX3N0cjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2dkdGhfcHJvYy5jIGIvZHJpdmVycy9zY3NpL2dkdGhfcHJvYy5jCmluZGV4IDFiZDAyZjguLjVlODY1N2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9nZHRoX3Byb2MuYworKysgYi9kcml2ZXJzL3Njc2kvZ2R0aF9wcm9jLmMKQEAgLTU0LDEwICs1NCwxMCBAQAogICAgIGludCAgICAgICAgICAgICByZXRfdmFsID0gLUVJTlZBTDsKICNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDApCiAgICAgU2NzaV9SZXF1ZXN0ICAgICpzY3A7Ci0gICAgU2NzaV9EZXZpY2UgICAgICpzZGV2OworICAgIHN0cnVjdCBzY3NpX2RldmljZSAgICAgKnNkZXY7CiAjZWxzZQogICAgIFNjc2lfQ21uZCAgICAgICAqc2NwOwotICAgIFNjc2lfRGV2aWNlICAgICAqc2RldjsKKyAgICBzdHJ1Y3Qgc2NzaV9kZXZpY2UgICAgICpzZGV2OwogI2VuZGlmCiAgICAgVFJBQ0UyKCgiZ2R0aF9zZXRfaW5mbygpIGhhICVkIGJ1cyAlZFxuIixoYW51bSxidXNudW0pKTsKIApAQCAtMjMyLDEwICsyMzIsMTAgQEAKICAgICBnZHRoX2V2dF9zdHIgKmVzdHI7CiAjaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwwKQogICAgIFNjc2lfUmVxdWVzdCAqc2NwOwotICAgIFNjc2lfRGV2aWNlICpzZGV2OyAKKyAgICBzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXY7CiAjZWxzZQogICAgIFNjc2lfQ21uZCAqc2NwOwotICAgIFNjc2lfRGV2aWNlICpzZGV2OworICAgIHN0cnVjdCBzY3NpX2RldmljZSAqc2RldjsKICNlbmRpZgogICAgIGNoYXIgaHJlY1sxNjFdOwogICAgIHN0cnVjdCB0aW1ldmFsIHR2OwpAQCAtMjc1LDcgKzI3NSw3IEBACiAgICAgc2NwLT5jbWRfbGVuID0gMTI7CiAgICAgc2NwLT51c2Vfc2cgPSAwOwogI2Vsc2UKLSAgICBtZW1zZXQoJnNkZXYsMCxzaXplb2YoU2NzaV9EZXZpY2UpKTsKKyAgICBtZW1zZXQoJnNkZXYsMCxzaXplb2Yoc3RydWN0IHNjc2lfZGV2aWNlKSk7CiAgICAgbWVtc2V0KCZzY3AsIDAsc2l6ZW9mKFNjc2lfQ21uZCkpOwogICAgIHNkZXYuaG9zdCA9IHNjcC5ob3N0ID0gaG9zdDsKICAgICBzZGV2LmlkID0gc2NwLnRhcmdldCA9IHNkZXYuaG9zdC0+dGhpc19pZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9ndnAxMS5jIGIvZHJpdmVycy9zY3NpL2d2cDExLmMKaW5kZXggZDEyMzQyZi4uNWIxNTQ0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2d2cDExLmMKKysrIGIvZHJpdmVycy9zY3NpL2d2cDExLmMKQEAgLTIsNyArMiw2IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAKQEAgLTE3MCw3ICsxNjksNyBAQAogCiAjZGVmaW5lIENIRUNLX1dEMzNDOTMKIAotaW50IF9faW5pdCBndnAxMV9kZXRlY3QoU2NzaV9Ib3N0X1RlbXBsYXRlICp0cG50KQoraW50IF9faW5pdCBndnAxMV9kZXRlY3Qoc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqdHBudCkKIHsKICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBjYWxsZWQgPSAwOwogICAgIHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlOwpAQCAtMzYyLDcgKzM2MSw3IEBACiAKICNpbmNsdWRlICJndnAxMS5oIgogCi1zdGF0aWMgU2NzaV9Ib3N0X1RlbXBsYXRlIGRyaXZlcl90ZW1wbGF0ZSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGRyaXZlcl90ZW1wbGF0ZSA9IHsKIAkucHJvY19uYW1lCQk9ICJHVlAxMSIsCiAJLm5hbWUJCQk9ICJHVlAgU2VyaWVzIElJIFNDU0kiLAogCS5kZXRlY3QJCQk9IGd2cDExX2RldGVjdCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9ndnAxMS5oIGIvZHJpdmVycy9zY3NpL2d2cDExLmgKaW5kZXggNTE0OGQ5Zi4uNTc1ZDIxOWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9ndnAxMS5oCisrKyBiL2RyaXZlcnMvc2NzaS9ndnAxMS5oCkBAIC0xMSw3ICsxMSw3IEBACiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCi1pbnQgZ3ZwMTFfZGV0ZWN0KFNjc2lfSG9zdF9UZW1wbGF0ZSAqKTsKK2ludCBndnAxMV9kZXRlY3Qoc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqKTsKIGludCBndnAxMV9yZWxlYXNlKHN0cnVjdCBTY3NpX0hvc3QgKik7CiBjb25zdCBjaGFyICp3ZDMzYzkzX2luZm8odm9pZCk7CiBpbnQgd2QzM2M5M19xdWV1ZWNvbW1hbmQoU2NzaV9DbW5kICosIHZvaWQgKCpkb25lKShTY3NpX0NtbmQgKikpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2libW1jYS5jIGIvZHJpdmVycy9zY3NpL2libW1jYS5jCmluZGV4IDg4N2E1YzMuLmI2MGMxYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pYm1tY2EuYworKysgYi9kcml2ZXJzL3Njc2kvaWJtbWNhLmMKQEAgLTE4LDEyICsxOCw2IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgotI2lmbmRlZiBMSU5VWF9WRVJTSU9OX0NPREUKLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+Ci0jZW5kaWYKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsNDUpCi0jZXJyb3IgIlRoaXMgZHJpdmVyIHdvcmtzIG9ubHkgd2l0aCBrZXJuZWwgMi41LjQ1IG9yIGhpZ2hlciEiCi0jZW5kaWYKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpAQCAtNDk4LDcgKzQ5Miw3IEBACiBzdGF0aWMgaW50IHByb2JlX2Rpc3BsYXkoaW50KTsKIHN0YXRpYyBpbnQgcHJvYmVfYnVzX21vZGUoaW50KTsKIHN0YXRpYyBpbnQgZGV2aWNlX2V4aXN0cyhpbnQsIGludCwgaW50ICosIGludCAqKTsKLXN0YXRpYyBzdHJ1Y3QgU2NzaV9Ib3N0ICppYm1tY2FfcmVnaXN0ZXIoU2NzaV9Ib3N0X1RlbXBsYXRlICosIGludCwgaW50LCBpbnQsIGNoYXIgKik7CitzdGF0aWMgc3RydWN0IFNjc2lfSG9zdCAqaWJtbWNhX3JlZ2lzdGVyKHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKiwgaW50LCBpbnQsIGludCwgY2hhciAqKTsKIHN0YXRpYyBpbnQgb3B0aW9uX3NldHVwKGNoYXIgKik7CiAvKiBsb2NhbCBmdW5jdGlvbnMgbmVlZGVkIGZvciBwcm9jX2luZm8gKi8KIHN0YXRpYyBpbnQgbGRuX2FjY2Vzc19sb2FkKGludCwgaW50KTsKQEAgLTE0ODksNyArMTQ4Myw3IEBACiAJcmV0dXJuIGxlbjsKIH0KIAotaW50IGlibW1jYV9kZXRlY3QoU2NzaV9Ib3N0X1RlbXBsYXRlICogc2NzaV90ZW1wbGF0ZSkKK2ludCBpYm1tY2FfZGV0ZWN0KHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKiBzY3NpX3RlbXBsYXRlKQogewogCXN0cnVjdCBTY3NpX0hvc3QgKnNocG50OwogCWludCBwb3J0LCBpZCwgaSwgaiwgaywgbGlzdF9zaXplLCBzbG90OwpAQCAtMTc0Miw3ICsxNzM2LDcgQEAKIAlyZXR1cm4gZm91bmQ7CQkvKiByZXR1cm4gdGhlIG51bWJlciBvZiBmb3VuZCBTQ1NJIGhvc3RzLiBTaG91bGQgYmUgMSBvciAwLiAqLwogfQogCi1zdGF0aWMgc3RydWN0IFNjc2lfSG9zdCAqaWJtbWNhX3JlZ2lzdGVyKFNjc2lfSG9zdF9UZW1wbGF0ZSAqIHNjc2lfdGVtcGxhdGUsIGludCBwb3J0LCBpbnQgaWQsIGludCBhZGFwdGVydHlwZSwgY2hhciAqaG9zdG5hbWUpCitzdGF0aWMgc3RydWN0IFNjc2lfSG9zdCAqaWJtbWNhX3JlZ2lzdGVyKHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKiBzY3NpX3RlbXBsYXRlLCBpbnQgcG9ydCwgaW50IGlkLCBpbnQgYWRhcHRlcnR5cGUsIGNoYXIgKmhvc3RuYW1lKQogewogCXN0cnVjdCBTY3NpX0hvc3QgKnNocG50OwogCWludCBpLCBqOwpAQCAtMjUwMCw3ICsyNDk0LDcgQEAKIAogX19zZXR1cCgiaWJtbWNhc2NzaT0iLCBvcHRpb25fc2V0dXApOwogCi1zdGF0aWMgU2NzaV9Ib3N0X1RlbXBsYXRlIGRyaXZlcl90ZW1wbGF0ZSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGRyaXZlcl90ZW1wbGF0ZSA9IHsKICAgICAgICAgICAucHJvY19uYW1lICAgICAgPSAiaWJtbWNhIiwKIAkgIC5wcm9jX2luZm8JICA9IGlibW1jYV9wcm9jX2luZm8sCiAgICAgICAgICAgLm5hbWUgICAgICAgICAgID0gIklCTSBTQ1NJLVN1YnN5c3RlbSIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaWJtbWNhLmggYi9kcml2ZXJzL3Njc2kvaWJtbWNhLmgKaW5kZXggNmQ2OGY2MC4uMDE3ZWUyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2libW1jYS5oCisrKyBiL2RyaXZlcnMvc2NzaS9pYm1tY2EuaApAQCAtMTEsNyArMTEsNyBAQAogLyogQ29tbW9uIGZvcndhcmQgZGVjbGFyYXRpb25zIGZvciBhbGwgTGludXgtdmVyc2lvbnM6ICovCiAKIC8qIEludGVyZmFjZXMgdG8gdGhlIG1pZGxldmVsIExpbnV4IFNDU0kgZHJpdmVyICovCi1zdGF0aWMgaW50IGlibW1jYV9kZXRlY3QgKFNjc2lfSG9zdF9UZW1wbGF0ZSAqKTsKK3N0YXRpYyBpbnQgaWJtbWNhX2RldGVjdCAoc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqKTsKIHN0YXRpYyBpbnQgaWJtbWNhX3JlbGVhc2UgKHN0cnVjdCBTY3NpX0hvc3QgKik7CiBzdGF0aWMgaW50IGlibW1jYV9xdWV1ZWNvbW1hbmQgKFNjc2lfQ21uZCAqLCB2b2lkICgqZG9uZSkgKFNjc2lfQ21uZCAqKSk7CiBzdGF0aWMgaW50IGlibW1jYV9hYm9ydCAoU2NzaV9DbW5kICopOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2lkZS1zY3NpLmMgYi9kcml2ZXJzL3Njc2kvaWRlLXNjc2kuYwppbmRleCBjODg4YWY0Li5lMTk2MGQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaWRlLXNjc2kuYworKysgYi9kcml2ZXJzL3Njc2kvaWRlLXNjc2kuYwpAQCAtMzk1LDYgKzM5NSw3IEBACiAJaW50IGxvZyA9IHRlc3RfYml0KElERVNDU0lfTE9HX0NNRCwgJnNjc2ktPmxvZyk7CiAJc3RydWN0IFNjc2lfSG9zdCAqaG9zdDsKIAl1OCAqc2NzaV9idWY7CisJaW50IGVycm9ycyA9IHJxLT5lcnJvcnM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmICghKHJxLT5mbGFncyAmIChSRVFfU1BFQ0lBTHxSRVFfU0VOU0UpKSkgewpAQCAtNDIxLDExICs0MjIsMTEgQEAKIAkJCXByaW50ayAoS0VSTl9XQVJOSU5HICJpZGUtc2NzaTogJXM6IHRpbWVkIG91dCBmb3IgJWx1XG4iLAogCQkJCQlkcml2ZS0+bmFtZSwgcGMtPnNjc2lfY21kLT5zZXJpYWxfbnVtYmVyKTsKIAkJcGMtPnNjc2lfY21kLT5yZXN1bHQgPSBESURfVElNRV9PVVQgPDwgMTY7Ci0JfSBlbHNlIGlmIChycS0+ZXJyb3JzID49IEVSUk9SX01BWCkgeworCX0gZWxzZSBpZiAoZXJyb3JzID49IEVSUk9SX01BWCkgewogCQlwYy0+c2NzaV9jbWQtPnJlc3VsdCA9IERJRF9FUlJPUiA8PCAxNjsKIAkJaWYgKGxvZykKIAkJCXByaW50ayAoImlkZS1zY3NpOiAlczogSS9PIGVycm9yIGZvciAlbHVcbiIsIGRyaXZlLT5uYW1lLCBwYy0+c2NzaV9jbWQtPnNlcmlhbF9udW1iZXIpOwotCX0gZWxzZSBpZiAocnEtPmVycm9ycykgeworCX0gZWxzZSBpZiAoZXJyb3JzKSB7CiAJCWlmIChsb2cpCiAJCQlwcmludGsgKCJpZGUtc2NzaTogJXM6IGNoZWNrIGNvbmRpdGlvbiBmb3IgJWx1XG4iLCBkcml2ZS0+bmFtZSwgcGMtPnNjc2lfY21kLT5zZXJpYWxfbnVtYmVyKTsKIAkJaWYgKCFpZGVzY3NpX2NoZWNrX2NvbmRpdGlvbihkcml2ZSwgcnEpKQpAQCAtODgxLDcgKzg4Miw3IEBACiAJc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBjbWQtPnJlcXVlc3QtPnJxX2Rpc2s7CiAKIAlpZiAoZGlzaykgewotCQlzdHJ1Y3QgU2NzaV9EZXZpY2VfVGVtcGxhdGUgKipwID0gZGlzay0+cHJpdmF0ZV9kYXRhOworCQlzdHJ1Y3Qgc3RydWN0IHNjc2lfZGV2aWNlX1RlbXBsYXRlICoqcCA9IGRpc2stPnByaXZhdGVfZGF0YTsKIAkJaWYgKHN0cmNtcCgoKnApLT5zY3NpX2RyaXZlcmZzX2RyaXZlci5uYW1lLCAic2ciKSA9PSAwKQogCQkJcmV0dXJuIHRlc3RfYml0KElERVNDU0lfU0dfVFJBTlNGT1JNLCAmc2NzaS0+dHJhbnNmb3JtKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaW4yMDAwLmMgYi9kcml2ZXJzL3Njc2kvaW4yMDAwLmMKaW5kZXggZmUzODdiNS4uMzRkYWEzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2luMjAwMC5jCisrKyBiL2RyaXZlcnMvc2NzaS9pbjIwMDAuYwpAQCAtMTg5OSw3ICsxODk5LDcgQEAKIH07CiAKIAotc3RhdGljIGludCBfX2luaXQgaW4yMDAwX2RldGVjdChTY3NpX0hvc3RfVGVtcGxhdGUgKiB0cG50KQorc3RhdGljIGludCBfX2luaXQgaW4yMDAwX2RldGVjdChzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICogdHBudCkKIHsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZTsKIAlzdHJ1Y3QgSU4yMDAwX2hvc3RkYXRhICpob3N0ZGF0YTsKQEAgLTIzMDUsNyArMjMwNSw3IEBACiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIAotc3RhdGljIFNjc2lfSG9zdF9UZW1wbGF0ZSBkcml2ZXJfdGVtcGxhdGUgPSB7CitzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBkcml2ZXJfdGVtcGxhdGUgPSB7CiAJLnByb2NfbmFtZSAgICAgICAJCT0gImluMjAwMCIsCiAJLnByb2NfaW5mbyAgICAgICAJCT0gaW4yMDAwX3Byb2NfaW5mbywKIAkubmFtZSAgICAgICAgICAgIAkJPSAiQWx3YXlzIElOMjAwMCIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaW4yMDAwLmggYi9kcml2ZXJzL3Njc2kvaW4yMDAwLmgKaW5kZXggYTI0MGI1Mi4uMGZiOGIwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2luMjAwMC5oCisrKyBiL2RyaXZlcnMvc2NzaS9pbjIwMDAuaApAQCAtMzk1LDcgKzM5NSw3IEBACiAjIGRlZmluZSBDTElTUElOX1VOTE9DSyhob3N0LGZsYWdzKSBzcGluX3VubG9ja19pcnFyZXN0b3JlKGhvc3QtPmhvc3RfbG9jaywgXAogCQkJCQkJCSAgIGZsYWdzKQogCi1zdGF0aWMgaW50IGluMjAwMF9kZXRlY3QoU2NzaV9Ib3N0X1RlbXBsYXRlICopIGluMjAwMF9fSU5JVDsKK3N0YXRpYyBpbnQgaW4yMDAwX2RldGVjdChzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICopIGluMjAwMF9fSU5JVDsKIHN0YXRpYyBpbnQgaW4yMDAwX3F1ZXVlY29tbWFuZChTY3NpX0NtbmQgKiwgdm9pZCAoKmRvbmUpKFNjc2lfQ21uZCAqKSk7CiBzdGF0aWMgaW50IGluMjAwMF9hYm9ydChTY3NpX0NtbmQgKik7CiBzdGF0aWMgdm9pZCBpbjIwMDBfc2V0dXAoY2hhciAqLCBpbnQgKikgaW4yMDAwX19JTklUOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2lwci5jIGIvZHJpdmVycy9zY3NpL2lwci5jCmluZGV4IGUwMDM5ZGYuLmZhMmNiMzU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaXByLmMKKysrIGIvZHJpdmVycy9zY3NpL2lwci5jCkBAIC05MSwxMSArOTEsMTQgQEAKIHN0YXRpYyBpbnQgaXByX3Rlc3Rtb2RlID0gMDsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXByX2Zhc3RmYWlsID0gMDsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXByX3RyYW5zb3BfdGltZW91dCA9IElQUl9PUEVSQVRJT05BTF9USU1FT1VUOworc3RhdGljIHVuc2lnbmVkIGludCBpcHJfZW5hYmxlX2NhY2hlID0gMTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaXByX2RlYnVnID0gMDsKK3N0YXRpYyBpbnQgaXByX2F1dG9fY3JlYXRlID0gMTsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soaXByX2RyaXZlcl9sb2NrKTsKIAogLyogVGhpcyB0YWJsZSBkZXNjcmliZXMgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gRE1BIGNvbnRyb2xsZXIgY2hpcHMgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaXByX2NoaXBfY2ZnX3QgaXByX2NoaXBfY2ZnW10gPSB7Ci0JeyAvKiBHZW1zdG9uZSBhbmQgQ2l0cmluZSAqLworCXsgLyogR2Vtc3RvbmUsIENpdHJpbmUsIGFuZCBPYnNpZGlhbiAqLwogCQkubWFpbGJveCA9IDB4MDA0MkMsCiAJCS5jYWNoZV9saW5lX3NpemUgPSAweDIwLAogCQl7CkBAIC0xMzAsNiArMTMzLDggQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaXByX2NoaXBfdCBpcHJfY2hpcFtdID0gewogCXsgUENJX1ZFTkRPUl9JRF9NWUxFWCwgUENJX0RFVklDRV9JRF9JQk1fR0VNU1RPTkUsICZpcHJfY2hpcF9jZmdbMF0gfSwKIAl7IFBDSV9WRU5ET1JfSURfSUJNLCBQQ0lfREVWSUNFX0lEX0lCTV9DSVRSSU5FLCAmaXByX2NoaXBfY2ZnWzBdIH0sCisJeyBQQ0lfVkVORE9SX0lEX0FEQVBURUMyLCBQQ0lfREVWSUNFX0lEX0FEQVBURUMyX09CU0lESUFOLCAmaXByX2NoaXBfY2ZnWzBdIH0sCisJeyBQQ0lfVkVORE9SX0lEX0lCTSwgUENJX0RFVklDRV9JRF9JQk1fT0JTSURJQU4sICZpcHJfY2hpcF9jZmdbMF0gfSwKIAl7IFBDSV9WRU5ET1JfSURfSUJNLCBQQ0lfREVWSUNFX0lEX0lCTV9TTklQRSwgJmlwcl9jaGlwX2NmZ1sxXSB9LAogCXsgUENJX1ZFTkRPUl9JRF9BREFQVEVDMiwgUENJX0RFVklDRV9JRF9BREFQVEVDMl9TQ0FNUCwgJmlwcl9jaGlwX2NmZ1sxXSB9CiB9OwpAQCAtMTUwLDYgKzE1NSwxMiBAQAogTU9EVUxFX1BBUk1fREVTQyhmYXN0ZmFpbCwgIlJlZHVjZSB0aW1lb3V0cyBhbmQgcmV0cmllcyIpOwogbW9kdWxlX3BhcmFtX25hbWVkKHRyYW5zb3BfdGltZW91dCwgaXByX3RyYW5zb3BfdGltZW91dCwgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0ModHJhbnNvcF90aW1lb3V0LCAiVGltZSBpbiBzZWNvbmRzIHRvIHdhaXQgZm9yIGFkYXB0ZXIgdG8gY29tZSBvcGVyYXRpb25hbCAoZGVmYXVsdDogMzAwKSIpOworbW9kdWxlX3BhcmFtX25hbWVkKGVuYWJsZV9jYWNoZSwgaXByX2VuYWJsZV9jYWNoZSwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoZW5hYmxlX2NhY2hlLCAiRW5hYmxlIGFkYXB0ZXIncyBub24tdm9sYXRpbGUgd3JpdGUgY2FjaGUgKGRlZmF1bHQ6IDEpIik7Cittb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsIGlwcl9kZWJ1ZywgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJFbmFibGUgZGV2aWNlIGRyaXZlciBkZWJ1Z2dpbmcgbG9nZ2luZy4gU2V0IHRvIDEgdG8gZW5hYmxlLiAoZGVmYXVsdDogMCkiKTsKK21vZHVsZV9wYXJhbV9uYW1lZChhdXRvX2NyZWF0ZSwgaXByX2F1dG9fY3JlYXRlLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhhdXRvX2NyZWF0ZSwgIkF1dG8tY3JlYXRlIHNpbmdsZSBkZXZpY2UgUkFJRCAwIGFycmF5cyB3aGVuIGluaXRpYWxpemVkIChkZWZhdWx0OiAxKSIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX1ZFUlNJT04oSVBSX0RSSVZFUl9WRVJTSU9OKTsKIApAQCAtMjg1LDEyICsyOTYsMTggQEAKIAkiMzExMDogRGV2aWNlIGJ1cyBlcnJvciwgbWVzc2FnZSBvciBjb21tYW5kIHBoYXNlIn0sCiAJezB4MDQ2NzA0MDAsIDAsIDEsCiAJIjkwOTE6IEluY29ycmVjdCBoYXJkd2FyZSBjb25maWd1cmF0aW9uIGNoYW5nZSBoYXMgYmVlbiBkZXRlY3RlZCJ9LAorCXsweDA0Njc4MDAwLCAwLCAxLAorCSI5MDczOiBJbnZhbGlkIG11bHRpLWFkYXB0ZXIgY29uZmlndXJhdGlvbiJ9LAogCXsweDA0NkUwMDAwLCAwLCAxLAogCSJGRkY0OiBDb21tYW5kIHRvIGxvZ2ljYWwgdW5pdCBmYWlsZWQifSwKIAl7MHgwNTI0MDAwMCwgMSwgMCwKIAkiSWxsZWdhbCByZXF1ZXN0LCBpbnZhbGlkIHJlcXVlc3QgdHlwZSBvciByZXF1ZXN0IHBhY2tldCJ9LAogCXsweDA1MjUwMDAwLCAwLCAwLAogCSJJbGxlZ2FsIHJlcXVlc3QsIGludmFsaWQgcmVzb3VyY2UgaGFuZGxlIn0sCisJezB4MDUyNTgwMDAsIDAsIDAsCisJIklsbGVnYWwgcmVxdWVzdCwgY29tbWFuZHMgbm90IGFsbG93ZWQgdG8gdGhpcyBkZXZpY2UifSwKKwl7MHgwNTI1ODEwMCwgMCwgMCwKKwkiSWxsZWdhbCByZXF1ZXN0LCBjb21tYW5kIG5vdCBhbGxvd2VkIHRvIGEgc2Vjb25kYXJ5IGFkYXB0ZXIifSwKIAl7MHgwNTI2MDAwMCwgMCwgMCwKIAkiSWxsZWdhbCByZXF1ZXN0LCBpbnZhbGlkIGZpZWxkIGluIHBhcmFtZXRlciBsaXN0In0sCiAJezB4MDUyNjAxMDAsIDAsIDAsCkBAIC0yOTksNiArMzE2LDggQEAKIAkiSWxsZWdhbCByZXF1ZXN0LCBwYXJhbWV0ZXIgdmFsdWUgaW52YWxpZCJ9LAogCXsweDA1MkMwMDAwLCAwLCAwLAogCSJJbGxlZ2FsIHJlcXVlc3QsIGNvbW1hbmQgc2VxdWVuY2UgZXJyb3IifSwKKwl7MHgwNTJDODAwMCwgMSwgMCwKKwkiSWxsZWdhbCByZXF1ZXN0LCBkdWFsIGFkYXB0ZXIgc3VwcG9ydCBub3QgZW5hYmxlZCJ9LAogCXsweDA2MDQwNTAwLCAwLCAxLAogCSI5MDMxOiBBcnJheSBwcm90ZWN0aW9uIHRlbXBvcmFyaWx5IHN1c3BlbmRlZCwgcHJvdGVjdGlvbiByZXN1bWluZyJ9LAogCXsweDA2MDQwNjAwLCAwLCAxLApAQCAtMzE1LDE4ICszMzQsMjYgQEAKIAkiMzAyOTogQSBkZXZpY2UgcmVwbGFjZW1lbnQgaGFzIG9jY3VycmVkIn0sCiAJezB4MDY0QzgwMDAsIDAsIDEsCiAJIjkwNTE6IElPQSBjYWNoZSBkYXRhIGV4aXN0cyBmb3IgYSBtaXNzaW5nIG9yIGZhaWxlZCBkZXZpY2UifSwKKwl7MHgwNjRDODEwMCwgMCwgMSwKKwkiOTA1NTogQXV4aWxpYXJ5IGNhY2hlIElPQSBjb250YWlucyBjYWNoZSBkYXRhIG5lZWRlZCBieSB0aGUgcHJpbWFyeSBJT0EifSwKIAl7MHgwNjY3MDEwMCwgMCwgMSwKIAkiOTAyNTogRGlzayB1bml0IGlzIG5vdCBzdXBwb3J0ZWQgYXQgaXRzIHBoeXNpY2FsIGxvY2F0aW9uIn0sCiAJezB4MDY2NzA2MDAsIDAsIDEsCiAJIjMwMjA6IElPQSBkZXRlY3RlZCBhIFNDU0kgYnVzIGNvbmZpZ3VyYXRpb24gZXJyb3IifSwKIAl7MHgwNjY3ODAwMCwgMCwgMSwKIAkiMzE1MDogU0NTSSBidXMgY29uZmlndXJhdGlvbiBlcnJvciJ9LAorCXsweDA2Njc4MTAwLCAwLCAxLAorCSI5MDc0OiBBc3ltbWV0cmljIGFkdmFuY2VkIGZ1bmN0aW9uIGRpc2sgY29uZmlndXJhdGlvbiJ9LAogCXsweDA2NjkwMjAwLCAwLCAxLAogCSI5MDQxOiBBcnJheSBwcm90ZWN0aW9uIHRlbXBvcmFyaWx5IHN1c3BlbmRlZCJ9LAogCXsweDA2Njk4MjAwLCAwLCAxLAogCSI5MDQyOiBDb3JydXB0IGFycmF5IHBhcml0eSBkZXRlY3RlZCBvbiBzcGVjaWZpZWQgZGV2aWNlIn0sCiAJezB4MDY2QjAyMDAsIDAsIDEsCiAJIjkwMzA6IEFycmF5IG5vIGxvbmdlciBwcm90ZWN0ZWQgZHVlIHRvIG1pc3Npbmcgb3IgZmFpbGVkIGRpc2sgdW5pdCJ9LAorCXsweDA2NkI4MDAwLCAwLCAxLAorCSI5MDcxOiBMaW5rIG9wZXJhdGlvbmFsIHRyYW5zaXRpb24ifSwKKwl7MHgwNjZCODEwMCwgMCwgMSwKKwkiOTA3MjogTGluayBub3Qgb3BlcmF0aW9uYWwgdHJhbnNpdGlvbiJ9LAogCXsweDA2NkI4MjAwLCAwLCAxLAogCSI5MDMyOiBBcnJheSBleHBvc2VkIGJ1dCBzdGlsbCBwcm90ZWN0ZWQifSwKIAl7MHgwNzI3MDAwMCwgMCwgMCwKQEAgLTc4OSw3ICs4MTYsNyBAQAogICoqLwogc3RhdGljIHZvaWQgaXByX2luaXRfcmVzX2VudHJ5KHN0cnVjdCBpcHJfcmVzb3VyY2VfZW50cnkgKnJlcykKIHsKLQlyZXMtPm5lZWRzX3N5bmNfY29tcGxldGUgPSAxOworCXJlcy0+bmVlZHNfc3luY19jb21wbGV0ZSA9IDA7CiAJcmVzLT5pbl9lcnAgPSAwOwogCXJlcy0+YWRkX3RvX21sID0gMDsKIAlyZXMtPmRlbF9mcm9tX21sID0gMDsKQEAgLTg4OSwyOSArOTE2LDc0IEBACiAKIC8qKgogICogaXByX2xvZ192cGQgLSBMb2cgdGhlIHBhc3NlZCBWUEQgdG8gdGhlIGVycm9yIGxvZy4KLSAqIEB2cGlkczoJCQl2ZW5kb3IvcHJvZHVjdCBpZCBzdHJ1Y3QKLSAqIEBzZXJpYWxfbnVtOgkJc2VyaWFsIG51bWJlciBzdHJpbmcKKyAqIEB2cGQ6CQl2ZW5kb3IvcHJvZHVjdCBpZC9zbiBzdHJ1Y3QKICAqCiAgKiBSZXR1cm4gdmFsdWU6CiAgKiAJbm9uZQogICoqLwotc3RhdGljIHZvaWQgaXByX2xvZ192cGQoc3RydWN0IGlwcl9zdGRfaW5xX3ZwaWRzICp2cGlkcywgdTggKnNlcmlhbF9udW0pCitzdGF0aWMgdm9pZCBpcHJfbG9nX3ZwZChzdHJ1Y3QgaXByX3ZwZCAqdnBkKQogewogCWNoYXIgYnVmZmVyW0lQUl9WRU5ET1JfSURfTEVOICsgSVBSX1BST0RfSURfTEVOCiAJCSAgICArIElQUl9TRVJJQUxfTlVNX0xFTl07CiAKLQltZW1jcHkoYnVmZmVyLCB2cGlkcy0+dmVuZG9yX2lkLCBJUFJfVkVORE9SX0lEX0xFTik7Ci0JbWVtY3B5KGJ1ZmZlciArIElQUl9WRU5ET1JfSURfTEVOLCB2cGlkcy0+cHJvZHVjdF9pZCwKKwltZW1jcHkoYnVmZmVyLCB2cGQtPnZwaWRzLnZlbmRvcl9pZCwgSVBSX1ZFTkRPUl9JRF9MRU4pOworCW1lbWNweShidWZmZXIgKyBJUFJfVkVORE9SX0lEX0xFTiwgdnBkLT52cGlkcy5wcm9kdWN0X2lkLAogCSAgICAgICBJUFJfUFJPRF9JRF9MRU4pOwogCWJ1ZmZlcltJUFJfVkVORE9SX0lEX0xFTiArIElQUl9QUk9EX0lEX0xFTl0gPSAnXDAnOwogCWlwcl9lcnIoIlZlbmRvci9Qcm9kdWN0IElEOiAlc1xuIiwgYnVmZmVyKTsKIAotCW1lbWNweShidWZmZXIsIHNlcmlhbF9udW0sIElQUl9TRVJJQUxfTlVNX0xFTik7CisJbWVtY3B5KGJ1ZmZlciwgdnBkLT5zbiwgSVBSX1NFUklBTF9OVU1fTEVOKTsKIAlidWZmZXJbSVBSX1NFUklBTF9OVU1fTEVOXSA9ICdcMCc7CiAJaXByX2VycigiICAgIFNlcmlhbCBOdW1iZXI6ICVzXG4iLCBidWZmZXIpOwogfQogCiAvKioKKyAqIGlwcl9sb2dfZXh0X3ZwZCAtIExvZyB0aGUgcGFzc2VkIGV4dGVuZGVkIFZQRCB0byB0aGUgZXJyb3IgbG9nLgorICogQHZwZDoJCXZlbmRvci9wcm9kdWN0IGlkL3NuL3d3biBzdHJ1Y3QKKyAqCisgKiBSZXR1cm4gdmFsdWU6CisgKiAJbm9uZQorICoqLworc3RhdGljIHZvaWQgaXByX2xvZ19leHRfdnBkKHN0cnVjdCBpcHJfZXh0X3ZwZCAqdnBkKQoreworCWlwcl9sb2dfdnBkKCZ2cGQtPnZwZCk7CisJaXByX2VycigiICAgIFdXTjogJTA4WCUwOFhcbiIsIGJlMzJfdG9fY3B1KHZwZC0+d3dpZFswXSksCisJCWJlMzJfdG9fY3B1KHZwZC0+d3dpZFsxXSkpOworfQorCisvKioKKyAqIGlwcl9sb2dfZW5oYW5jZWRfY2FjaGVfZXJyb3IgLSBMb2cgYSBjYWNoZSBlcnJvci4KKyAqIEBpb2FfY2ZnOglpb2EgY29uZmlnIHN0cnVjdAorICogQGhvc3RyY2I6CWhvc3RyY2Igc3RydWN0CisgKgorICogUmV0dXJuIHZhbHVlOgorICogCW5vbmUKKyAqKi8KK3N0YXRpYyB2b2lkIGlwcl9sb2dfZW5oYW5jZWRfY2FjaGVfZXJyb3Ioc3RydWN0IGlwcl9pb2FfY2ZnICppb2FfY2ZnLAorCQkJCQkgc3RydWN0IGlwcl9ob3N0cmNiICpob3N0cmNiKQoreworCXN0cnVjdCBpcHJfaG9zdHJjYl90eXBlXzEyX2Vycm9yICplcnJvciA9CisJCSZob3N0cmNiLT5oY2FtLnUuZXJyb3IudS50eXBlXzEyX2Vycm9yOworCisJaXByX2VycigiLS0tLS1DdXJyZW50IENvbmZpZ3VyYXRpb24tLS0tLVxuIik7CisJaXByX2VycigiQ2FjaGUgRGlyZWN0b3J5IENhcmQgSW5mb3JtYXRpb246XG4iKTsKKwlpcHJfbG9nX2V4dF92cGQoJmVycm9yLT5pb2FfdnBkKTsKKwlpcHJfZXJyKCJBZGFwdGVyIENhcmQgSW5mb3JtYXRpb246XG4iKTsKKwlpcHJfbG9nX2V4dF92cGQoJmVycm9yLT5jZmNfdnBkKTsKKworCWlwcl9lcnIoIi0tLS0tRXhwZWN0ZWQgQ29uZmlndXJhdGlvbi0tLS0tXG4iKTsKKwlpcHJfZXJyKCJDYWNoZSBEaXJlY3RvcnkgQ2FyZCBJbmZvcm1hdGlvbjpcbiIpOworCWlwcl9sb2dfZXh0X3ZwZCgmZXJyb3ItPmlvYV9sYXN0X2F0dGFjaGVkX3RvX2NmY192cGQpOworCWlwcl9lcnIoIkFkYXB0ZXIgQ2FyZCBJbmZvcm1hdGlvbjpcbiIpOworCWlwcl9sb2dfZXh0X3ZwZCgmZXJyb3ItPmNmY19sYXN0X2F0dGFjaGVkX3RvX2lvYV92cGQpOworCisJaXByX2VycigiQWRkaXRpb25hbCBJT0EgRGF0YTogJTA4WCAlMDhYICUwOFhcbiIsCisJCSAgICAgYmUzMl90b19jcHUoZXJyb3ItPmlvYV9kYXRhWzBdKSwKKwkJICAgICBiZTMyX3RvX2NwdShlcnJvci0+aW9hX2RhdGFbMV0pLAorCQkgICAgIGJlMzJfdG9fY3B1KGVycm9yLT5pb2FfZGF0YVsyXSkpOworfQorCisvKioKICAqIGlwcl9sb2dfY2FjaGVfZXJyb3IgLSBMb2cgYSBjYWNoZSBlcnJvci4KICAqIEBpb2FfY2ZnOglpb2EgY29uZmlnIHN0cnVjdAogICogQGhvc3RyY2I6CWhvc3RyY2Igc3RydWN0CkBAIC05MjcsMTcgKzk5OSwxNSBAQAogCiAJaXByX2VycigiLS0tLS1DdXJyZW50IENvbmZpZ3VyYXRpb24tLS0tLVxuIik7CiAJaXByX2VycigiQ2FjaGUgRGlyZWN0b3J5IENhcmQgSW5mb3JtYXRpb246XG4iKTsKLQlpcHJfbG9nX3ZwZCgmZXJyb3ItPmlvYV92cGlkcywgZXJyb3ItPmlvYV9zbik7CisJaXByX2xvZ192cGQoJmVycm9yLT5pb2FfdnBkKTsKIAlpcHJfZXJyKCJBZGFwdGVyIENhcmQgSW5mb3JtYXRpb246XG4iKTsKLQlpcHJfbG9nX3ZwZCgmZXJyb3ItPmNmY192cGlkcywgZXJyb3ItPmNmY19zbik7CisJaXByX2xvZ192cGQoJmVycm9yLT5jZmNfdnBkKTsKIAogCWlwcl9lcnIoIi0tLS0tRXhwZWN0ZWQgQ29uZmlndXJhdGlvbi0tLS0tXG4iKTsKIAlpcHJfZXJyKCJDYWNoZSBEaXJlY3RvcnkgQ2FyZCBJbmZvcm1hdGlvbjpcbiIpOwotCWlwcl9sb2dfdnBkKCZlcnJvci0+aW9hX2xhc3RfYXR0YWNoZWRfdG9fY2ZjX3ZwaWRzLAotCQkgICAgZXJyb3ItPmlvYV9sYXN0X2F0dGFjaGVkX3RvX2NmY19zbik7CisJaXByX2xvZ192cGQoJmVycm9yLT5pb2FfbGFzdF9hdHRhY2hlZF90b19jZmNfdnBkKTsKIAlpcHJfZXJyKCJBZGFwdGVyIENhcmQgSW5mb3JtYXRpb246XG4iKTsKLQlpcHJfbG9nX3ZwZCgmZXJyb3ItPmNmY19sYXN0X2F0dGFjaGVkX3RvX2lvYV92cGlkcywKLQkJICAgIGVycm9yLT5jZmNfbGFzdF9hdHRhY2hlZF90b19pb2Ffc24pOworCWlwcl9sb2dfdnBkKCZlcnJvci0+Y2ZjX2xhc3RfYXR0YWNoZWRfdG9faW9hX3ZwZCk7CiAKIAlpcHJfZXJyKCJBZGRpdGlvbmFsIElPQSBEYXRhOiAlMDhYICUwOFggJTA4WFxuIiwKIAkJICAgICBiZTMyX3RvX2NwdShlcnJvci0+aW9hX2RhdGFbMF0pLApAQCAtOTQ2LDYgKzEwMTYsNDYgQEAKIH0KIAogLyoqCisgKiBpcHJfbG9nX2VuaGFuY2VkX2NvbmZpZ19lcnJvciAtIExvZyBhIGNvbmZpZ3VyYXRpb24gZXJyb3IuCisgKiBAaW9hX2NmZzoJaW9hIGNvbmZpZyBzdHJ1Y3QKKyAqIEBob3N0cmNiOglob3N0cmNiIHN0cnVjdAorICoKKyAqIFJldHVybiB2YWx1ZToKKyAqIAlub25lCisgKiovCitzdGF0aWMgdm9pZCBpcHJfbG9nX2VuaGFuY2VkX2NvbmZpZ19lcnJvcihzdHJ1Y3QgaXByX2lvYV9jZmcgKmlvYV9jZmcsCisJCQkJCSAgc3RydWN0IGlwcl9ob3N0cmNiICpob3N0cmNiKQoreworCWludCBlcnJvcnNfbG9nZ2VkLCBpOworCXN0cnVjdCBpcHJfaG9zdHJjYl9kZXZpY2VfZGF0YV9lbnRyeV9lbmhhbmNlZCAqZGV2X2VudHJ5OworCXN0cnVjdCBpcHJfaG9zdHJjYl90eXBlXzEzX2Vycm9yICplcnJvcjsKKworCWVycm9yID0gJmhvc3RyY2ItPmhjYW0udS5lcnJvci51LnR5cGVfMTNfZXJyb3I7CisJZXJyb3JzX2xvZ2dlZCA9IGJlMzJfdG9fY3B1KGVycm9yLT5lcnJvcnNfbG9nZ2VkKTsKKworCWlwcl9lcnIoIkRldmljZSBFcnJvcnMgRGV0ZWN0ZWQvTG9nZ2VkOiAlZC8lZFxuIiwKKwkJYmUzMl90b19jcHUoZXJyb3ItPmVycm9yc19kZXRlY3RlZCksIGVycm9yc19sb2dnZWQpOworCisJZGV2X2VudHJ5ID0gZXJyb3ItPmRldjsKKworCWZvciAoaSA9IDA7IGkgPCBlcnJvcnNfbG9nZ2VkOyBpKyssIGRldl9lbnRyeSsrKSB7CisJCWlwcl9lcnJfc2VwYXJhdG9yOworCisJCWlwcl9waHlzX3Jlc19lcnIoaW9hX2NmZywgZGV2X2VudHJ5LT5kZXZfcmVzX2FkZHIsICJEZXZpY2UgJWQiLCBpICsgMSk7CisJCWlwcl9sb2dfZXh0X3ZwZCgmZGV2X2VudHJ5LT52cGQpOworCisJCWlwcl9lcnIoIi0tLS0tTmV3IERldmljZSBJbmZvcm1hdGlvbi0tLS0tXG4iKTsKKwkJaXByX2xvZ19leHRfdnBkKCZkZXZfZW50cnktPm5ld192cGQpOworCisJCWlwcl9lcnIoIkNhY2hlIERpcmVjdG9yeSBDYXJkIEluZm9ybWF0aW9uOlxuIik7CisJCWlwcl9sb2dfZXh0X3ZwZCgmZGV2X2VudHJ5LT5pb2FfbGFzdF93aXRoX2Rldl92cGQpOworCisJCWlwcl9lcnIoIkFkYXB0ZXIgQ2FyZCBJbmZvcm1hdGlvbjpcbiIpOworCQlpcHJfbG9nX2V4dF92cGQoJmRldl9lbnRyeS0+Y2ZjX2xhc3Rfd2l0aF9kZXZfdnBkKTsKKwl9Cit9CisKKy8qKgogICogaXByX2xvZ19jb25maWdfZXJyb3IgLSBMb2cgYSBjb25maWd1cmF0aW9uIGVycm9yLgogICogQGlvYV9jZmc6CWlvYSBjb25maWcgc3RydWN0CiAgKiBAaG9zdHJjYjoJaG9zdHJjYiBzdHJ1Y3QKQEAgLTk2NiwzMCArMTA3NiwyMiBAQAogCWlwcl9lcnIoIkRldmljZSBFcnJvcnMgRGV0ZWN0ZWQvTG9nZ2VkOiAlZC8lZFxuIiwKIAkJYmUzMl90b19jcHUoZXJyb3ItPmVycm9yc19kZXRlY3RlZCksIGVycm9yc19sb2dnZWQpOwogCi0JZGV2X2VudHJ5ID0gZXJyb3ItPmRldl9lbnRyeTsKKwlkZXZfZW50cnkgPSBlcnJvci0+ZGV2OwogCiAJZm9yIChpID0gMDsgaSA8IGVycm9yc19sb2dnZWQ7IGkrKywgZGV2X2VudHJ5KyspIHsKIAkJaXByX2Vycl9zZXBhcmF0b3I7CiAKLQkJaWYgKGRldl9lbnRyeS0+ZGV2X3Jlc19hZGRyLmJ1cyA+PSBJUFJfTUFYX05VTV9CVVNFUykgewotCQkJaXByX2VycigiRGV2aWNlICVkOiBtaXNzaW5nXG4iLCBpICsgMSk7Ci0JCX0gZWxzZSB7Ci0JCQlpcHJfZXJyKCJEZXZpY2UgJWQ6ICVkOiVkOiVkOiVkXG4iLCBpICsgMSwKLQkJCQlpb2FfY2ZnLT5ob3N0LT5ob3N0X25vLCBkZXZfZW50cnktPmRldl9yZXNfYWRkci5idXMsCi0JCQkJZGV2X2VudHJ5LT5kZXZfcmVzX2FkZHIudGFyZ2V0LCBkZXZfZW50cnktPmRldl9yZXNfYWRkci5sdW4pOwotCQl9Ci0JCWlwcl9sb2dfdnBkKCZkZXZfZW50cnktPmRldl92cGlkcywgZGV2X2VudHJ5LT5kZXZfc24pOworCQlpcHJfcGh5c19yZXNfZXJyKGlvYV9jZmcsIGRldl9lbnRyeS0+ZGV2X3Jlc19hZGRyLCAiRGV2aWNlICVkIiwgaSArIDEpOworCQlpcHJfbG9nX3ZwZCgmZGV2X2VudHJ5LT52cGQpOwogCiAJCWlwcl9lcnIoIi0tLS0tTmV3IERldmljZSBJbmZvcm1hdGlvbi0tLS0tXG4iKTsKLQkJaXByX2xvZ192cGQoJmRldl9lbnRyeS0+bmV3X2Rldl92cGlkcywgZGV2X2VudHJ5LT5uZXdfZGV2X3NuKTsKKwkJaXByX2xvZ192cGQoJmRldl9lbnRyeS0+bmV3X3ZwZCk7CiAKIAkJaXByX2VycigiQ2FjaGUgRGlyZWN0b3J5IENhcmQgSW5mb3JtYXRpb246XG4iKTsKLQkJaXByX2xvZ192cGQoJmRldl9lbnRyeS0+aW9hX2xhc3Rfd2l0aF9kZXZfdnBpZHMsCi0JCQkgICAgZGV2X2VudHJ5LT5pb2FfbGFzdF93aXRoX2Rldl9zbik7CisJCWlwcl9sb2dfdnBkKCZkZXZfZW50cnktPmlvYV9sYXN0X3dpdGhfZGV2X3ZwZCk7CiAKIAkJaXByX2VycigiQWRhcHRlciBDYXJkIEluZm9ybWF0aW9uOlxuIik7Ci0JCWlwcl9sb2dfdnBkKCZkZXZfZW50cnktPmNmY19sYXN0X3dpdGhfZGV2X3ZwaWRzLAotCQkJICAgIGRldl9lbnRyeS0+Y2ZjX2xhc3Rfd2l0aF9kZXZfc24pOworCQlpcHJfbG9nX3ZwZCgmZGV2X2VudHJ5LT5jZmNfbGFzdF93aXRoX2Rldl92cGQpOwogCiAJCWlwcl9lcnIoIkFkZGl0aW9uYWwgSU9BIERhdGE6ICUwOFggJTA4WCAlMDhYICUwOFggJTA4WFxuIiwKIAkJCWJlMzJfdG9fY3B1KGRldl9lbnRyeS0+aW9hX2RhdGFbMF0pLApAQCAtMTAwMSw2ICsxMTAzLDU3IEBACiB9CiAKIC8qKgorICogaXByX2xvZ19lbmhhbmNlZF9hcnJheV9lcnJvciAtIExvZyBhbiBhcnJheSBjb25maWd1cmF0aW9uIGVycm9yLgorICogQGlvYV9jZmc6CWlvYSBjb25maWcgc3RydWN0CisgKiBAaG9zdHJjYjoJaG9zdHJjYiBzdHJ1Y3QKKyAqCisgKiBSZXR1cm4gdmFsdWU6CisgKiAJbm9uZQorICoqLworc3RhdGljIHZvaWQgaXByX2xvZ19lbmhhbmNlZF9hcnJheV9lcnJvcihzdHJ1Y3QgaXByX2lvYV9jZmcgKmlvYV9jZmcsCisJCQkJCSBzdHJ1Y3QgaXByX2hvc3RyY2IgKmhvc3RyY2IpCit7CisJaW50IGksIG51bV9lbnRyaWVzOworCXN0cnVjdCBpcHJfaG9zdHJjYl90eXBlXzE0X2Vycm9yICplcnJvcjsKKwlzdHJ1Y3QgaXByX2hvc3RyY2JfYXJyYXlfZGF0YV9lbnRyeV9lbmhhbmNlZCAqYXJyYXlfZW50cnk7CisJY29uc3QgdTggemVyb19zbltJUFJfU0VSSUFMX05VTV9MRU5dID0geyBbMCAuLi4gSVBSX1NFUklBTF9OVU1fTEVOLTFdID0gJzAnIH07CisKKwllcnJvciA9ICZob3N0cmNiLT5oY2FtLnUuZXJyb3IudS50eXBlXzE0X2Vycm9yOworCisJaXByX2Vycl9zZXBhcmF0b3I7CisKKwlpcHJfZXJyKCJSQUlEICVzIEFycmF5IENvbmZpZ3VyYXRpb246ICVkOiVkOiVkOiVkXG4iLAorCQllcnJvci0+cHJvdGVjdGlvbl9sZXZlbCwKKwkJaW9hX2NmZy0+aG9zdC0+aG9zdF9ubywKKwkJZXJyb3ItPmxhc3RfZnVuY192c2V0X3Jlc19hZGRyLmJ1cywKKwkJZXJyb3ItPmxhc3RfZnVuY192c2V0X3Jlc19hZGRyLnRhcmdldCwKKwkJZXJyb3ItPmxhc3RfZnVuY192c2V0X3Jlc19hZGRyLmx1bik7CisKKwlpcHJfZXJyX3NlcGFyYXRvcjsKKworCWFycmF5X2VudHJ5ID0gZXJyb3ItPmFycmF5X21lbWJlcjsKKwludW1fZW50cmllcyA9IG1pbl90KHUzMiwgYmUzMl90b19jcHUoZXJyb3ItPm51bV9lbnRyaWVzKSwKKwkJCSAgICBzaXplb2YoZXJyb3ItPmFycmF5X21lbWJlcikpOworCisJZm9yIChpID0gMDsgaSA8IG51bV9lbnRyaWVzOyBpKyssIGFycmF5X2VudHJ5KyspIHsKKwkJaWYgKCFtZW1jbXAoYXJyYXlfZW50cnktPnZwZC52cGQuc24sIHplcm9fc24sIElQUl9TRVJJQUxfTlVNX0xFTikpCisJCQljb250aW51ZTsKKworCQlpZiAoYmUzMl90b19jcHUoZXJyb3ItPmV4cG9zZWRfbW9kZV9hZG4pID09IGkpCisJCQlpcHJfZXJyKCJFeHBvc2VkIEFycmF5IE1lbWJlciAlZDpcbiIsIGkpOworCQllbHNlCisJCQlpcHJfZXJyKCJBcnJheSBNZW1iZXIgJWQ6XG4iLCBpKTsKKworCQlpcHJfbG9nX2V4dF92cGQoJmFycmF5X2VudHJ5LT52cGQpOworCQlpcHJfcGh5c19yZXNfZXJyKGlvYV9jZmcsIGFycmF5X2VudHJ5LT5kZXZfcmVzX2FkZHIsICJDdXJyZW50IExvY2F0aW9uIik7CisJCWlwcl9waHlzX3Jlc19lcnIoaW9hX2NmZywgYXJyYXlfZW50cnktPmV4cGVjdGVkX2Rldl9yZXNfYWRkciwKKwkJCQkgIkV4cGVjdGVkIExvY2F0aW9uIik7CisKKwkJaXByX2Vycl9zZXBhcmF0b3I7CisJfQorfQorCisvKioKICAqIGlwcl9sb2dfYXJyYXlfZXJyb3IgLSBMb2cgYW4gYXJyYXkgY29uZmlndXJhdGlvbiBlcnJvci4KICAqIEBpb2FfY2ZnOglpb2EgY29uZmlnIHN0cnVjdAogICogQGhvc3RyY2I6CWhvc3RyY2Igc3RydWN0CkBAIC0xMDMyLDM2ICsxMTg1LDE5IEBACiAJYXJyYXlfZW50cnkgPSBlcnJvci0+YXJyYXlfbWVtYmVyOwogCiAJZm9yIChpID0gMDsgaSA8IDE4OyBpKyspIHsKLQkJaWYgKCFtZW1jbXAoYXJyYXlfZW50cnktPnNlcmlhbF9udW0sIHplcm9fc24sIElQUl9TRVJJQUxfTlVNX0xFTikpCisJCWlmICghbWVtY21wKGFycmF5X2VudHJ5LT52cGQuc24sIHplcm9fc24sIElQUl9TRVJJQUxfTlVNX0xFTikpCiAJCQljb250aW51ZTsKIAotCQlpZiAoYmUzMl90b19jcHUoZXJyb3ItPmV4cG9zZWRfbW9kZV9hZG4pID09IGkpIHsKKwkJaWYgKGJlMzJfdG9fY3B1KGVycm9yLT5leHBvc2VkX21vZGVfYWRuKSA9PSBpKQogCQkJaXByX2VycigiRXhwb3NlZCBBcnJheSBNZW1iZXIgJWQ6XG4iLCBpKTsKLQkJfSBlbHNlIHsKKwkJZWxzZQogCQkJaXByX2VycigiQXJyYXkgTWVtYmVyICVkOlxuIiwgaSk7Ci0JCX0KIAotCQlpcHJfbG9nX3ZwZCgmYXJyYXlfZW50cnktPnZwaWRzLCBhcnJheV9lbnRyeS0+c2VyaWFsX251bSk7CisJCWlwcl9sb2dfdnBkKCZhcnJheV9lbnRyeS0+dnBkKTsKIAotCQlpZiAoYXJyYXlfZW50cnktPmRldl9yZXNfYWRkci5idXMgPj0gSVBSX01BWF9OVU1fQlVTRVMpIHsKLQkJCWlwcl9lcnIoIkN1cnJlbnQgTG9jYXRpb246IHVua25vd25cbiIpOwotCQl9IGVsc2UgewotCQkJaXByX2VycigiQ3VycmVudCBMb2NhdGlvbjogJWQ6JWQ6JWQ6JWRcbiIsCi0JCQkJaW9hX2NmZy0+aG9zdC0+aG9zdF9ubywKLQkJCQlhcnJheV9lbnRyeS0+ZGV2X3Jlc19hZGRyLmJ1cywKLQkJCQlhcnJheV9lbnRyeS0+ZGV2X3Jlc19hZGRyLnRhcmdldCwKLQkJCQlhcnJheV9lbnRyeS0+ZGV2X3Jlc19hZGRyLmx1bik7Ci0JCX0KLQotCQlpZiAoYXJyYXlfZW50cnktPmV4cGVjdGVkX2Rldl9yZXNfYWRkci5idXMgPj0gSVBSX01BWF9OVU1fQlVTRVMpIHsKLQkJCWlwcl9lcnIoIkV4cGVjdGVkIExvY2F0aW9uOiB1bmtub3duXG4iKTsKLQkJfSBlbHNlIHsKLQkJCWlwcl9lcnIoIkV4cGVjdGVkIExvY2F0aW9uOiAlZDolZDolZDolZFxuIiwKLQkJCQlpb2FfY2ZnLT5ob3N0LT5ob3N0X25vLAotCQkJCWFycmF5X2VudHJ5LT5leHBlY3RlZF9kZXZfcmVzX2FkZHIuYnVzLAotCQkJCWFycmF5X2VudHJ5LT5leHBlY3RlZF9kZXZfcmVzX2FkZHIudGFyZ2V0LAotCQkJCWFycmF5X2VudHJ5LT5leHBlY3RlZF9kZXZfcmVzX2FkZHIubHVuKTsKLQkJfQorCQlpcHJfcGh5c19yZXNfZXJyKGlvYV9jZmcsIGFycmF5X2VudHJ5LT5kZXZfcmVzX2FkZHIsICJDdXJyZW50IExvY2F0aW9uIik7CisJCWlwcl9waHlzX3Jlc19lcnIoaW9hX2NmZywgYXJyYXlfZW50cnktPmV4cGVjdGVkX2Rldl9yZXNfYWRkciwKKwkJCQkgIkV4cGVjdGVkIExvY2F0aW9uIik7CiAKIAkJaXByX2Vycl9zZXBhcmF0b3I7CiAKQEAgLTEwNzMsNiArMTIwOSw4MCBAQAogfQogCiAvKioKKyAqIGlwcl9sb2dfaGV4X2RhdGEgLSBMb2cgYWRkaXRpb25hbCBoZXggSU9BIGVycm9yIGRhdGEuCisgKiBAZGF0YToJCUlPQSBlcnJvciBkYXRhCisgKiBAbGVuOgkJZGF0YSBsZW5ndGgKKyAqCisgKiBSZXR1cm4gdmFsdWU6CisgKiAJbm9uZQorICoqLworc3RhdGljIHZvaWQgaXByX2xvZ19oZXhfZGF0YSh1MzIgKmRhdGEsIGludCBsZW4pCit7CisJaW50IGk7CisKKwlpZiAobGVuID09IDApCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBsZW4gLyA0OyBpICs9IDQpIHsKKwkJaXByX2VycigiJTA4WDogJTA4WCAlMDhYICUwOFggJTA4WFxuIiwgaSo0LAorCQkJYmUzMl90b19jcHUoZGF0YVtpXSksCisJCQliZTMyX3RvX2NwdShkYXRhW2krMV0pLAorCQkJYmUzMl90b19jcHUoZGF0YVtpKzJdKSwKKwkJCWJlMzJfdG9fY3B1KGRhdGFbaSszXSkpOworCX0KK30KKworLyoqCisgKiBpcHJfbG9nX2VuaGFuY2VkX2R1YWxfaW9hX2Vycm9yIC0gTG9nIGFuIGVuaGFuY2VkIGR1YWwgYWRhcHRlciBlcnJvci4KKyAqIEBpb2FfY2ZnOglpb2EgY29uZmlnIHN0cnVjdAorICogQGhvc3RyY2I6CWhvc3RyY2Igc3RydWN0CisgKgorICogUmV0dXJuIHZhbHVlOgorICogCW5vbmUKKyAqKi8KK3N0YXRpYyB2b2lkIGlwcl9sb2dfZW5oYW5jZWRfZHVhbF9pb2FfZXJyb3Ioc3RydWN0IGlwcl9pb2FfY2ZnICppb2FfY2ZnLAorCQkJCQkgICAgc3RydWN0IGlwcl9ob3N0cmNiICpob3N0cmNiKQoreworCXN0cnVjdCBpcHJfaG9zdHJjYl90eXBlXzE3X2Vycm9yICplcnJvcjsKKworCWVycm9yID0gJmhvc3RyY2ItPmhjYW0udS5lcnJvci51LnR5cGVfMTdfZXJyb3I7CisJZXJyb3ItPmZhaWx1cmVfcmVhc29uW3NpemVvZihlcnJvci0+ZmFpbHVyZV9yZWFzb24pIC0gMV0gPSAnXDAnOworCisJaXByX2VycigiJXNcbiIsIGVycm9yLT5mYWlsdXJlX3JlYXNvbik7CisJaXByX2VycigiUmVtb3RlIEFkYXB0ZXIgVlBEOlxuIik7CisJaXByX2xvZ19leHRfdnBkKCZlcnJvci0+dnBkKTsKKwlpcHJfbG9nX2hleF9kYXRhKGVycm9yLT5kYXRhLAorCQkJIGJlMzJfdG9fY3B1KGhvc3RyY2ItPmhjYW0ubGVuZ3RoKSAtCisJCQkgKG9mZnNldG9mKHN0cnVjdCBpcHJfaG9zdHJjYl9lcnJvciwgdSkgKworCQkJICBvZmZzZXRvZihzdHJ1Y3QgaXByX2hvc3RyY2JfdHlwZV8xN19lcnJvciwgZGF0YSkpKTsKK30KKworLyoqCisgKiBpcHJfbG9nX2R1YWxfaW9hX2Vycm9yIC0gTG9nIGEgZHVhbCBhZGFwdGVyIGVycm9yLgorICogQGlvYV9jZmc6CWlvYSBjb25maWcgc3RydWN0CisgKiBAaG9zdHJjYjoJaG9zdHJjYiBzdHJ1Y3QKKyAqCisgKiBSZXR1cm4gdmFsdWU6CisgKiAJbm9uZQorICoqLworc3RhdGljIHZvaWQgaXByX2xvZ19kdWFsX2lvYV9lcnJvcihzdHJ1Y3QgaXByX2lvYV9jZmcgKmlvYV9jZmcsCisJCQkJICAgc3RydWN0IGlwcl9ob3N0cmNiICpob3N0cmNiKQoreworCXN0cnVjdCBpcHJfaG9zdHJjYl90eXBlXzA3X2Vycm9yICplcnJvcjsKKworCWVycm9yID0gJmhvc3RyY2ItPmhjYW0udS5lcnJvci51LnR5cGVfMDdfZXJyb3I7CisJZXJyb3ItPmZhaWx1cmVfcmVhc29uW3NpemVvZihlcnJvci0+ZmFpbHVyZV9yZWFzb24pIC0gMV0gPSAnXDAnOworCisJaXByX2VycigiJXNcbiIsIGVycm9yLT5mYWlsdXJlX3JlYXNvbik7CisJaXByX2VycigiUmVtb3RlIEFkYXB0ZXIgVlBEOlxuIik7CisJaXByX2xvZ192cGQoJmVycm9yLT52cGQpOworCWlwcl9sb2dfaGV4X2RhdGEoZXJyb3ItPmRhdGEsCisJCQkgYmUzMl90b19jcHUoaG9zdHJjYi0+aGNhbS5sZW5ndGgpIC0KKwkJCSAob2Zmc2V0b2Yoc3RydWN0IGlwcl9ob3N0cmNiX2Vycm9yLCB1KSArCisJCQkgIG9mZnNldG9mKHN0cnVjdCBpcHJfaG9zdHJjYl90eXBlXzA3X2Vycm9yLCBkYXRhKSkpOworfQorCisvKioKICAqIGlwcl9sb2dfZ2VuZXJpY19lcnJvciAtIExvZyBhbiBhZGFwdGVyIGVycm9yLgogICogQGlvYV9jZmc6CWlvYSBjb25maWcgc3RydWN0CiAgKiBAaG9zdHJjYjoJaG9zdHJjYiBzdHJ1Y3QKQEAgLTEwODMsMjIgKzEyOTMsOCBAQAogc3RhdGljIHZvaWQgaXByX2xvZ19nZW5lcmljX2Vycm9yKHN0cnVjdCBpcHJfaW9hX2NmZyAqaW9hX2NmZywKIAkJCQkgIHN0cnVjdCBpcHJfaG9zdHJjYiAqaG9zdHJjYikKIHsKLQlpbnQgaTsKLQlpbnQgaW9hX2RhdGFfbGVuID0gYmUzMl90b19jcHUoaG9zdHJjYi0+aGNhbS5sZW5ndGgpOwotCi0JaWYgKGlvYV9kYXRhX2xlbiA9PSAwKQotCQlyZXR1cm47Ci0KLQlpcHJfZXJyKCJJT0EgRXJyb3IgRGF0YTpcbiIpOwotCWlwcl9lcnIoIk9mZnNldCAgICAwIDEgMiAzICA0IDUgNiA3ICA4IDkgQSBCICBDIEQgRSBGXG4iKTsKLQotCWZvciAoaSA9IDA7IGkgPCBpb2FfZGF0YV9sZW4gLyA0OyBpICs9IDQpIHsKLQkJaXByX2VycigiJTA4WDogJTA4WCAlMDhYICUwOFggJTA4WFxuIiwgaSo0LAotCQkJYmUzMl90b19jcHUoaG9zdHJjYi0+aGNhbS51LnJhdy5kYXRhW2ldKSwKLQkJCWJlMzJfdG9fY3B1KGhvc3RyY2ItPmhjYW0udS5yYXcuZGF0YVtpKzFdKSwKLQkJCWJlMzJfdG9fY3B1KGhvc3RyY2ItPmhjYW0udS5yYXcuZGF0YVtpKzJdKSwKLQkJCWJlMzJfdG9fY3B1KGhvc3RyY2ItPmhjYW0udS5yYXcuZGF0YVtpKzNdKSk7Ci0JfQorCWlwcl9sb2dfaGV4X2RhdGEoaG9zdHJjYi0+aGNhbS51LnJhdy5kYXRhLAorCQkJIGJlMzJfdG9fY3B1KGhvc3RyY2ItPmhjYW0ubGVuZ3RoKSk7CiB9CiAKIC8qKgpAQCAtMTE3MiwxMSArMTM2OCwxMCBAQAogCiAJaWYgKGlvYV9jZmctPmxvZ19sZXZlbCA8IElQUl9ERUZBVUxUX0xPR19MRVZFTCkKIAkJcmV0dXJuOworCWlmIChiZTMyX3RvX2NwdShob3N0cmNiLT5oY2FtLmxlbmd0aCkgPiBzaXplb2YoaG9zdHJjYi0+aGNhbS51LnJhdykpCisJCWhvc3RyY2ItPmhjYW0ubGVuZ3RoID0gY3B1X3RvX2JlMzIoc2l6ZW9mKGhvc3RyY2ItPmhjYW0udS5yYXcpKTsKIAogCXN3aXRjaCAoaG9zdHJjYi0+aGNhbS5vdmVybGF5X2lkKSB7Ci0JY2FzZSBJUFJfSE9TVF9SQ0JfT1ZFUkxBWV9JRF8xOgotCQlpcHJfbG9nX2dlbmVyaWNfZXJyb3IoaW9hX2NmZywgaG9zdHJjYik7Ci0JCWJyZWFrOwogCWNhc2UgSVBSX0hPU1RfUkNCX09WRVJMQVlfSURfMjoKIAkJaXByX2xvZ19jYWNoZV9lcnJvcihpb2FfY2ZnLCBob3N0cmNiKTsKIAkJYnJlYWs7CkBAIC0xMTg3LDEzICsxMzgyLDI2IEBACiAJY2FzZSBJUFJfSE9TVF9SQ0JfT1ZFUkxBWV9JRF82OgogCQlpcHJfbG9nX2FycmF5X2Vycm9yKGlvYV9jZmcsIGhvc3RyY2IpOwogCQlicmVhazsKLQljYXNlIElQUl9IT1NUX1JDQl9PVkVSTEFZX0lEX0RFRkFVTFQ6Ci0JCWlwcl9sb2dfZ2VuZXJpY19lcnJvcihpb2FfY2ZnLCBob3N0cmNiKTsKKwljYXNlIElQUl9IT1NUX1JDQl9PVkVSTEFZX0lEXzc6CisJCWlwcl9sb2dfZHVhbF9pb2FfZXJyb3IoaW9hX2NmZywgaG9zdHJjYik7CiAJCWJyZWFrOworCWNhc2UgSVBSX0hPU1RfUkNCX09WRVJMQVlfSURfMTI6CisJCWlwcl9sb2dfZW5oYW5jZWRfY2FjaGVfZXJyb3IoaW9hX2NmZywgaG9zdHJjYik7CisJCWJyZWFrOworCWNhc2UgSVBSX0hPU1RfUkNCX09WRVJMQVlfSURfMTM6CisJCWlwcl9sb2dfZW5oYW5jZWRfY29uZmlnX2Vycm9yKGlvYV9jZmcsIGhvc3RyY2IpOworCQlicmVhazsKKwljYXNlIElQUl9IT1NUX1JDQl9PVkVSTEFZX0lEXzE0OgorCWNhc2UgSVBSX0hPU1RfUkNCX09WRVJMQVlfSURfMTY6CisJCWlwcl9sb2dfZW5oYW5jZWRfYXJyYXlfZXJyb3IoaW9hX2NmZywgaG9zdHJjYik7CisJCWJyZWFrOworCWNhc2UgSVBSX0hPU1RfUkNCX09WRVJMQVlfSURfMTc6CisJCWlwcl9sb2dfZW5oYW5jZWRfZHVhbF9pb2FfZXJyb3IoaW9hX2NmZywgaG9zdHJjYik7CisJCWJyZWFrOworCWNhc2UgSVBSX0hPU1RfUkNCX09WRVJMQVlfSURfMToKKwljYXNlIElQUl9IT1NUX1JDQl9PVkVSTEFZX0lEX0RFRkFVTFQ6CiAJZGVmYXVsdDoKLQkJZGV2X2VycigmaW9hX2NmZy0+cGRldi0+ZGV2LAotCQkJIlVua25vd24gZXJyb3IgcmVjZWl2ZWQuIE92ZXJsYXkgSUQ6ICVkXG4iLAotCQkJaG9zdHJjYi0+aGNhbS5vdmVybGF5X2lkKTsKKwkJaXByX2xvZ19nZW5lcmljX2Vycm9yKGlvYV9jZmcsIGhvc3RyY2IpOwogCQlicmVhazsKIAl9CiB9CkBAIC0xOTcyLDYgKzIxODAsMTAzIEBACiB9OwogI2VuZGlmCiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeworCWVudW0gaXByX2NhY2hlX3N0YXRlIHN0YXRlOworCWNoYXIgKm5hbWU7Cit9IGNhY2hlX3N0YXRlIFtdID0geworCXsgQ0FDSEVfTk9ORSwgIm5vbmUiIH0sCisJeyBDQUNIRV9ESVNBQkxFRCwgImRpc2FibGVkIiB9LAorCXsgQ0FDSEVfRU5BQkxFRCwgImVuYWJsZWQiIH0KK307CisKKy8qKgorICogaXByX3Nob3dfd3JpdGVfY2FjaGluZyAtIFNob3cgdGhlIHdyaXRlIGNhY2hpbmcgYXR0cmlidXRlCisgKiBAY2xhc3NfZGV2OgljbGFzcyBkZXZpY2Ugc3RydWN0CisgKiBAYnVmOgkJYnVmZmVyCisgKgorICogUmV0dXJuIHZhbHVlOgorICoJbnVtYmVyIG9mIGJ5dGVzIHByaW50ZWQgdG8gYnVmZmVyCisgKiovCitzdGF0aWMgc3NpemVfdCBpcHJfc2hvd193cml0ZV9jYWNoaW5nKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoY2xhc3NfZGV2KTsKKwlzdHJ1Y3QgaXByX2lvYV9jZmcgKmlvYV9jZmcgPSAoc3RydWN0IGlwcl9pb2FfY2ZnICopc2hvc3QtPmhvc3RkYXRhOworCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFncyA9IDA7CisJaW50IGksIGxlbiA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZShpb2FfY2ZnLT5ob3N0LT5ob3N0X2xvY2ssIGxvY2tfZmxhZ3MpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNhY2hlX3N0YXRlKTsgaSsrKSB7CisJCWlmIChjYWNoZV9zdGF0ZVtpXS5zdGF0ZSA9PSBpb2FfY2ZnLT5jYWNoZV9zdGF0ZSkgeworCQkJbGVuID0gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlc1xuIiwgY2FjaGVfc3RhdGVbaV0ubmFtZSk7CisJCQlicmVhazsKKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKGlvYV9jZmctPmhvc3QtPmhvc3RfbG9jaywgbG9ja19mbGFncyk7CisJcmV0dXJuIGxlbjsKK30KKworCisvKioKKyAqIGlwcl9zdG9yZV93cml0ZV9jYWNoaW5nIC0gRW5hYmxlL2Rpc2FibGUgYWRhcHRlciB3cml0ZSBjYWNoZQorICogQGNsYXNzX2RldjoJY2xhc3NfZGV2aWNlIHN0cnVjdAorICogQGJ1ZjoJCWJ1ZmZlcgorICogQGNvdW50OgkJYnVmZmVyIHNpemUKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZW5hYmxlL2Rpc2FibGUgYWRhcHRlciB3cml0ZSBjYWNoZS4KKyAqCisgKiBSZXR1cm4gdmFsdWU6CisgKiAJY291bnQgb24gc3VjY2VzcyAvIG90aGVyIG9uIGZhaWx1cmUKKyAqKi8KK3N0YXRpYyBzc2l6ZV90IGlwcl9zdG9yZV93cml0ZV9jYWNoaW5nKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldiwKKwkJCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbGFzc190b19zaG9zdChjbGFzc19kZXYpOworCXN0cnVjdCBpcHJfaW9hX2NmZyAqaW9hX2NmZyA9IChzdHJ1Y3QgaXByX2lvYV9jZmcgKilzaG9zdC0+aG9zdGRhdGE7CisJdW5zaWduZWQgbG9uZyBsb2NrX2ZsYWdzID0gMDsKKwllbnVtIGlwcl9jYWNoZV9zdGF0ZSBuZXdfc3RhdGUgPSBDQUNIRV9JTlZBTElEOworCWludCBpOworCisJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQlyZXR1cm4gLUVBQ0NFUzsKKwlpZiAoaW9hX2NmZy0+Y2FjaGVfc3RhdGUgPT0gQ0FDSEVfTk9ORSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjYWNoZV9zdGF0ZSk7IGkrKykgeworCQlpZiAoIXN0cm5jbXAoY2FjaGVfc3RhdGVbaV0ubmFtZSwgYnVmLCBzdHJsZW4oY2FjaGVfc3RhdGVbaV0ubmFtZSkpKSB7CisJCQluZXdfc3RhdGUgPSBjYWNoZV9zdGF0ZVtpXS5zdGF0ZTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKG5ld19zdGF0ZSAhPSBDQUNIRV9ESVNBQkxFRCAmJiBuZXdfc3RhdGUgIT0gQ0FDSEVfRU5BQkxFRCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZShpb2FfY2ZnLT5ob3N0LT5ob3N0X2xvY2ssIGxvY2tfZmxhZ3MpOworCWlmIChpb2FfY2ZnLT5jYWNoZV9zdGF0ZSA9PSBuZXdfc3RhdGUpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShpb2FfY2ZnLT5ob3N0LT5ob3N0X2xvY2ssIGxvY2tfZmxhZ3MpOworCQlyZXR1cm4gY291bnQ7CisJfQorCisJaW9hX2NmZy0+Y2FjaGVfc3RhdGUgPSBuZXdfc3RhdGU7CisJZGV2X2luZm8oJmlvYV9jZmctPnBkZXYtPmRldiwgIiVzIGFkYXB0ZXIgd3JpdGUgY2FjaGUuXG4iLAorCQkgbmV3X3N0YXRlID09IENBQ0hFX0VOQUJMRUQgPyAiRW5hYmxpbmciIDogIkRpc2FibGluZyIpOworCWlmICghaW9hX2NmZy0+aW5fcmVzZXRfcmVsb2FkKQorCQlpcHJfaW5pdGlhdGVfaW9hX3Jlc2V0KGlvYV9jZmcsIElQUl9TSFVURE9XTl9OT1JNQUwpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoaW9hX2NmZy0+aG9zdC0+aG9zdF9sb2NrLCBsb2NrX2ZsYWdzKTsKKwl3YWl0X2V2ZW50KGlvYV9jZmctPnJlc2V0X3dhaXRfcSwgIWlvYV9jZmctPmluX3Jlc2V0X3JlbG9hZCk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSBpcHJfaW9hX2NhY2hlX2F0dHIgPSB7CisJLmF0dHIgPSB7CisJCS5uYW1lID0JCSJ3cml0ZV9jYWNoZSIsCisJCS5tb2RlID0JCVNfSVJVR08gfCBTX0lXVVNSLAorCX0sCisJLnNob3cgPSBpcHJfc2hvd193cml0ZV9jYWNoaW5nLAorCS5zdG9yZSA9IGlwcl9zdG9yZV93cml0ZV9jYWNoaW5nCit9OworCiAvKioKICAqIGlwcl9zaG93X2Z3X3ZlcnNpb24gLSBTaG93IHRoZSBmaXJtd2FyZSB2ZXJzaW9uCiAgKiBAY2xhc3NfZGV2OgljbGFzcyBkZXZpY2Ugc3RydWN0CkBAIC0yMTEyLDYgKzI0MTcsNzQgQEAKIH07CiAKIC8qKgorICogaXByX3Nob3dfYWRhcHRlcl9zdGF0ZSAtIFNob3cgdGhlIGFkYXB0ZXIncyBzdGF0ZQorICogQGNsYXNzX2RldjoJY2xhc3MgZGV2aWNlIHN0cnVjdAorICogQGJ1ZjoJCWJ1ZmZlcgorICoKKyAqIFJldHVybiB2YWx1ZToKKyAqIAludW1iZXIgb2YgYnl0ZXMgcHJpbnRlZCB0byBidWZmZXIKKyAqKi8KK3N0YXRpYyBzc2l6ZV90IGlwcl9zaG93X2FkYXB0ZXJfc3RhdGUoc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2LCBjaGFyICpidWYpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbGFzc190b19zaG9zdChjbGFzc19kZXYpOworCXN0cnVjdCBpcHJfaW9hX2NmZyAqaW9hX2NmZyA9IChzdHJ1Y3QgaXByX2lvYV9jZmcgKilzaG9zdC0+aG9zdGRhdGE7CisJdW5zaWduZWQgbG9uZyBsb2NrX2ZsYWdzID0gMDsKKwlpbnQgbGVuOworCisJc3Bpbl9sb2NrX2lycXNhdmUoaW9hX2NmZy0+aG9zdC0+aG9zdF9sb2NrLCBsb2NrX2ZsYWdzKTsKKwlpZiAoaW9hX2NmZy0+aW9hX2lzX2RlYWQpCisJCWxlbiA9IHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAib2ZmbGluZVxuIik7CisJZWxzZQorCQlsZW4gPSBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIm9ubGluZVxuIik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShpb2FfY2ZnLT5ob3N0LT5ob3N0X2xvY2ssIGxvY2tfZmxhZ3MpOworCXJldHVybiBsZW47Cit9CisKKy8qKgorICogaXByX3N0b3JlX2FkYXB0ZXJfc3RhdGUgLSBDaGFuZ2UgYWRhcHRlciBzdGF0ZQorICogQGNsYXNzX2RldjoJY2xhc3NfZGV2aWNlIHN0cnVjdAorICogQGJ1ZjoJCWJ1ZmZlcgorICogQGNvdW50OgkJYnVmZmVyIHNpemUKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgY2hhbmdlIHRoZSBhZGFwdGVyJ3Mgc3RhdGUuCisgKgorICogUmV0dXJuIHZhbHVlOgorICogCWNvdW50IG9uIHN1Y2Nlc3MgLyBvdGhlciBvbiBmYWlsdXJlCisgKiovCitzdGF0aWMgc3NpemVfdCBpcHJfc3RvcmVfYWRhcHRlcl9zdGF0ZShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXYsCisJCQkJICAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoY2xhc3NfZGV2KTsKKwlzdHJ1Y3QgaXByX2lvYV9jZmcgKmlvYV9jZmcgPSAoc3RydWN0IGlwcl9pb2FfY2ZnICopc2hvc3QtPmhvc3RkYXRhOworCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKKwlpbnQgcmVzdWx0ID0gY291bnQ7CisKKwlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCisJCXJldHVybiAtRUFDQ0VTOworCisJc3Bpbl9sb2NrX2lycXNhdmUoaW9hX2NmZy0+aG9zdC0+aG9zdF9sb2NrLCBsb2NrX2ZsYWdzKTsKKwlpZiAoaW9hX2NmZy0+aW9hX2lzX2RlYWQgJiYgIXN0cm5jbXAoYnVmLCAib25saW5lIiwgNikpIHsKKwkJaW9hX2NmZy0+aW9hX2lzX2RlYWQgPSAwOworCQlpb2FfY2ZnLT5yZXNldF9yZXRyaWVzID0gMDsKKwkJaW9hX2NmZy0+aW5faW9hX2JyaW5nZG93biA9IDA7CisJCWlwcl9pbml0aWF0ZV9pb2FfcmVzZXQoaW9hX2NmZywgSVBSX1NIVVRET1dOX05PTkUpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKGlvYV9jZmctPmhvc3QtPmhvc3RfbG9jaywgbG9ja19mbGFncyk7CisJd2FpdF9ldmVudChpb2FfY2ZnLT5yZXNldF93YWl0X3EsICFpb2FfY2ZnLT5pbl9yZXNldF9yZWxvYWQpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlIGlwcl9pb2Ffc3RhdGVfYXR0ciA9IHsKKwkuYXR0ciA9IHsKKwkJLm5hbWUgPQkJInN0YXRlIiwKKwkJLm1vZGUgPQkJU19JUlVHTyB8IFNfSVdVU1IsCisJfSwKKwkuc2hvdyA9IGlwcl9zaG93X2FkYXB0ZXJfc3RhdGUsCisJLnN0b3JlID0gaXByX3N0b3JlX2FkYXB0ZXJfc3RhdGUKK307CisKKy8qKgogICogaXByX3N0b3JlX3Jlc2V0X2FkYXB0ZXIgLSBSZXNldCB0aGUgYWRhcHRlcgogICogQGNsYXNzX2RldjoJY2xhc3NfZGV2aWNlIHN0cnVjdAogICogQGJ1ZjoJCWJ1ZmZlcgpAQCAtMjE4Myw3ICsyNTU2LDcgQEAKIAkJbnVtX2VsZW0gPSBidWZfbGVuIC8gYnNpemVfZWxlbTsKIAogCS8qIEFsbG9jYXRlIGEgc2NhdHRlci9nYXRoZXIgbGlzdCBmb3IgdGhlIERNQSAqLwotCXNnbGlzdCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpcHJfc2dsaXN0KSArCisJc2dsaXN0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGlwcl9zZ2xpc3QpICsKIAkJCSAoc2l6ZW9mKHN0cnVjdCBzY2F0dGVybGlzdCkgKiAobnVtX2VsZW0gLSAxKSksCiAJCQkgR0ZQX0tFUk5FTCk7CiAKQEAgLTIxOTIsOSArMjU2NSw2IEBACiAJCXJldHVybiBOVUxMOwogCX0KIAotCW1lbXNldChzZ2xpc3QsIDAsIHNpemVvZihzdHJ1Y3QgaXByX3NnbGlzdCkgKwotCSAgICAgICAoc2l6ZW9mKHN0cnVjdCBzY2F0dGVybGlzdCkgKiAobnVtX2VsZW0gLSAxKSkpOwotCiAJc2NhdHRlcmxpc3QgPSBzZ2xpc3QtPnNjYXR0ZXJsaXN0OwogCiAJc2dsaXN0LT5vcmRlciA9IG9yZGVyOwpAQCAtMjI4OSwzMSArMjY1OSwyNCBAQAogfQogCiAvKioKLSAqIGlwcl9tYXBfdWNvZGVfYnVmZmVyIC0gTWFwIGEgbWljcm9jb2RlIGRvd25sb2FkIGJ1ZmZlcgorICogaXByX2J1aWxkX3Vjb2RlX2lvYWRsIC0gQnVpbGQgYSBtaWNyb2NvZGUgZG93bmxvYWQgSU9BREwKICAqIEBpcHJfY21kOglpcHIgY29tbWFuZCBzdHJ1Y3QKICAqIEBzZ2xpc3Q6CQlzY2F0dGVyL2dhdGhlciBsaXN0Ci0gKiBAbGVuOgkJdG90YWwgbGVuZ3RoIG9mIGRvd25sb2FkIGJ1ZmZlcgogICoKLSAqIE1hcHMgYSBtaWNyb2NvZGUgZG93bmxvYWQgc2NhdHRlci9nYXRoZXIgbGlzdCBmb3IgRE1BIGFuZAotICogYnVpbGRzIHRoZSBJT0FETC4KKyAqIEJ1aWxkcyBhIG1pY3JvY29kZSBkb3dubG9hZCBJT0EgZGF0YSBsaXN0IChJT0FETCkuCiAgKgotICogUmV0dXJuIHZhbHVlOgotICogCTAgb24gc3VjY2VzcyAvIC1FSU8gb24gZmFpbHVyZQogICoqLwotc3RhdGljIGludCBpcHJfbWFwX3Vjb2RlX2J1ZmZlcihzdHJ1Y3QgaXByX2NtbmQgKmlwcl9jbWQsCi0JCQkJc3RydWN0IGlwcl9zZ2xpc3QgKnNnbGlzdCwgaW50IGxlbikKK3N0YXRpYyB2b2lkIGlwcl9idWlsZF91Y29kZV9pb2FkbChzdHJ1Y3QgaXByX2NtbmQgKmlwcl9jbWQsCisJCQkJICBzdHJ1Y3QgaXByX3NnbGlzdCAqc2dsaXN0KQogewotCXN0cnVjdCBpcHJfaW9hX2NmZyAqaW9hX2NmZyA9IGlwcl9jbWQtPmlvYV9jZmc7CiAJc3RydWN0IGlwcl9pb2FyY2IgKmlvYXJjYiA9ICZpcHJfY21kLT5pb2FyY2I7CiAJc3RydWN0IGlwcl9pb2FkbF9kZXNjICppb2FkbCA9IGlwcl9jbWQtPmlvYWRsOwogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2NhdHRlcmxpc3QgPSBzZ2xpc3QtPnNjYXR0ZXJsaXN0OwogCWludCBpOwogCi0JaXByX2NtZC0+ZG1hX3VzZV9zZyA9IHBjaV9tYXBfc2coaW9hX2NmZy0+cGRldiwgc2NhdHRlcmxpc3QsCi0JCQkJCSBzZ2xpc3QtPm51bV9zZywgRE1BX1RPX0RFVklDRSk7Ci0KKwlpcHJfY21kLT5kbWFfdXNlX3NnID0gc2dsaXN0LT5udW1fZG1hX3NnOwogCWlvYXJjYi0+Y21kX3BrdC5mbGFnc19oaSB8PSBJUFJfRkxBR1NfSElfV1JJVEVfTk9UX1JFQUQ7Ci0JaW9hcmNiLT53cml0ZV9kYXRhX3RyYW5zZmVyX2xlbmd0aCA9IGNwdV90b19iZTMyKGxlbik7CisJaW9hcmNiLT53cml0ZV9kYXRhX3RyYW5zZmVyX2xlbmd0aCA9IGNwdV90b19iZTMyKHNnbGlzdC0+YnVmZmVyX2xlbik7CiAJaW9hcmNiLT53cml0ZV9pb2FkbF9sZW4gPQogCQljcHVfdG9fYmUzMihzaXplb2Yoc3RydWN0IGlwcl9pb2FkbF9kZXNjKSAqIGlwcl9jbWQtPmRtYV91c2Vfc2cpOwogCkBAIC0yMzI0LDE1ICsyNjg3LDUyIEBACiAJCQljcHVfdG9fYmUzMihzZ19kbWFfYWRkcmVzcygmc2NhdHRlcmxpc3RbaV0pKTsKIAl9CiAKLQlpZiAobGlrZWx5KGlwcl9jbWQtPmRtYV91c2Vfc2cpKSB7Ci0JCWlvYWRsW2ktMV0uZmxhZ3NfYW5kX2RhdGFfbGVuIHw9Ci0JCQljcHVfdG9fYmUzMihJUFJfSU9BRExfRkxBR1NfTEFTVCk7Ci0JfQotCWVsc2UgewotCQlkZXZfZXJyKCZpb2FfY2ZnLT5wZGV2LT5kZXYsICJwY2lfbWFwX3NnIGZhaWxlZCFcbiIpOworCWlvYWRsW2ktMV0uZmxhZ3NfYW5kX2RhdGFfbGVuIHw9CisJCWNwdV90b19iZTMyKElQUl9JT0FETF9GTEFHU19MQVNUKTsKK30KKworLyoqCisgKiBpcHJfdXBkYXRlX2lvYV91Y29kZSAtIFVwZGF0ZSBJT0EncyBtaWNyb2NvZGUKKyAqIEBpb2FfY2ZnOglpb2EgY29uZmlnIHN0cnVjdAorICogQHNnbGlzdDoJCXNjYXR0ZXIvZ2F0aGVyIGxpc3QKKyAqCisgKiBJbml0aWF0ZSBhbiBhZGFwdGVyIHJlc2V0IHRvIHVwZGF0ZSB0aGUgSU9BJ3MgbWljcm9jb2RlCisgKgorICogUmV0dXJuIHZhbHVlOgorICogCTAgb24gc3VjY2VzcyAvIC1FSU8gb24gZmFpbHVyZQorICoqLworc3RhdGljIGludCBpcHJfdXBkYXRlX2lvYV91Y29kZShzdHJ1Y3QgaXByX2lvYV9jZmcgKmlvYV9jZmcsCisJCQkJc3RydWN0IGlwcl9zZ2xpc3QgKnNnbGlzdCkKK3sKKwl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZShpb2FfY2ZnLT5ob3N0LT5ob3N0X2xvY2ssIGxvY2tfZmxhZ3MpOworCisJaWYgKGlvYV9jZmctPnVjb2RlX3NnbGlzdCkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGlvYV9jZmctPmhvc3QtPmhvc3RfbG9jaywgbG9ja19mbGFncyk7CisJCWRldl9lcnIoJmlvYV9jZmctPnBkZXYtPmRldiwKKwkJCSJNaWNyb2NvZGUgZG93bmxvYWQgYWxyZWFkeSBpbiBwcm9ncmVzc1xuIik7CiAJCXJldHVybiAtRUlPOwogCX0KIAorCXNnbGlzdC0+bnVtX2RtYV9zZyA9IHBjaV9tYXBfc2coaW9hX2NmZy0+cGRldiwgc2dsaXN0LT5zY2F0dGVybGlzdCwKKwkJCQkJc2dsaXN0LT5udW1fc2csIERNQV9UT19ERVZJQ0UpOworCisJaWYgKCFzZ2xpc3QtPm51bV9kbWFfc2cpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShpb2FfY2ZnLT5ob3N0LT5ob3N0X2xvY2ssIGxvY2tfZmxhZ3MpOworCQlkZXZfZXJyKCZpb2FfY2ZnLT5wZGV2LT5kZXYsCisJCQkiRmFpbGVkIHRvIG1hcCBtaWNyb2NvZGUgZG93bmxvYWQgYnVmZmVyIVxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCWlvYV9jZmctPnVjb2RlX3NnbGlzdCA9IHNnbGlzdDsKKwlpcHJfaW5pdGlhdGVfaW9hX3Jlc2V0KGlvYV9jZmcsIElQUl9TSFVURE9XTl9OT1JNQUwpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoaW9hX2NmZy0+aG9zdC0+aG9zdF9sb2NrLCBsb2NrX2ZsYWdzKTsKKwl3YWl0X2V2ZW50KGlvYV9jZmctPnJlc2V0X3dhaXRfcSwgIWlvYV9jZmctPmluX3Jlc2V0X3JlbG9hZCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZShpb2FfY2ZnLT5ob3N0LT5ob3N0X2xvY2ssIGxvY2tfZmxhZ3MpOworCWlvYV9jZmctPnVjb2RlX3NnbGlzdCA9IE5VTEw7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShpb2FfY2ZnLT5ob3N0LT5ob3N0X2xvY2ssIGxvY2tfZmxhZ3MpOwogCXJldHVybiAwOwogfQogCkBAIC0yMzU1LDcgKzI3NTUsNiBAQAogCXN0cnVjdCBpcHJfdWNvZGVfaW1hZ2VfaGVhZGVyICppbWFnZV9oZHI7CiAJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmd19lbnRyeTsKIAlzdHJ1Y3QgaXByX3NnbGlzdCAqc2dsaXN0OwotCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKIAljaGFyIGZuYW1lWzEwMF07CiAJY2hhciAqc3JjOwogCWludCBsZW4sIHJlc3VsdCwgZG5sZF9zaXplOwpAQCAtMjM5NiwzNSArMjc5NSwxNyBAQAogCWlmIChyZXN1bHQpIHsKIAkJZGV2X2VycigmaW9hX2NmZy0+cGRldi0+ZGV2LAogCQkJIk1pY3JvY29kZSBidWZmZXIgY29weSB0byBETUEgYnVmZmVyIGZhaWxlZFxuIik7Ci0JCWlwcl9mcmVlX3Vjb2RlX2J1ZmZlcihzZ2xpc3QpOwotCQlyZWxlYXNlX2Zpcm13YXJlKGZ3X2VudHJ5KTsKLQkJcmV0dXJuIHJlc3VsdDsKKwkJZ290byBvdXQ7CiAJfQogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoaW9hX2NmZy0+aG9zdC0+aG9zdF9sb2NrLCBsb2NrX2ZsYWdzKTsKKwlyZXN1bHQgPSBpcHJfdXBkYXRlX2lvYV91Y29kZShpb2FfY2ZnLCBzZ2xpc3QpOwogCi0JaWYgKGlvYV9jZmctPnVjb2RlX3NnbGlzdCkgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGlvYV9jZmctPmhvc3QtPmhvc3RfbG9jaywgbG9ja19mbGFncyk7Ci0JCWRldl9lcnIoJmlvYV9jZmctPnBkZXYtPmRldiwKLQkJCSJNaWNyb2NvZGUgZG93bmxvYWQgYWxyZWFkeSBpbiBwcm9ncmVzc1xuIik7Ci0JCWlwcl9mcmVlX3Vjb2RlX2J1ZmZlcihzZ2xpc3QpOwotCQlyZWxlYXNlX2Zpcm13YXJlKGZ3X2VudHJ5KTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCi0JaW9hX2NmZy0+dWNvZGVfc2dsaXN0ID0gc2dsaXN0OwotCWlwcl9pbml0aWF0ZV9pb2FfcmVzZXQoaW9hX2NmZywgSVBSX1NIVVRET1dOX05PUk1BTCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShpb2FfY2ZnLT5ob3N0LT5ob3N0X2xvY2ssIGxvY2tfZmxhZ3MpOwotCXdhaXRfZXZlbnQoaW9hX2NmZy0+cmVzZXRfd2FpdF9xLCAhaW9hX2NmZy0+aW5fcmVzZXRfcmVsb2FkKTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKGlvYV9jZmctPmhvc3QtPmhvc3RfbG9jaywgbG9ja19mbGFncyk7Ci0JaW9hX2NmZy0+dWNvZGVfc2dsaXN0ID0gTlVMTDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGlvYV9jZmctPmhvc3QtPmhvc3RfbG9jaywgbG9ja19mbGFncyk7Ci0KKwlpZiAoIXJlc3VsdCkKKwkJcmVzdWx0ID0gY291bnQ7CitvdXQ6CiAJaXByX2ZyZWVfdWNvZGVfYnVmZmVyKHNnbGlzdCk7CiAJcmVsZWFzZV9maXJtd2FyZShmd19lbnRyeSk7Ci0KLQlyZXR1cm4gY291bnQ7CisJcmV0dXJuIHJlc3VsdDsKIH0KIAogc3RhdGljIHN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlIGlwcl91cGRhdGVfZndfYXR0ciA9IHsKQEAgLTI0MzksOCArMjgyMCwxMCBAQAogCSZpcHJfZndfdmVyc2lvbl9hdHRyLAogCSZpcHJfbG9nX2xldmVsX2F0dHIsCiAJJmlwcl9kaWFnbm9zdGljc19hdHRyLAorCSZpcHJfaW9hX3N0YXRlX2F0dHIsCiAJJmlwcl9pb2FfcmVzZXRfYXR0ciwKIAkmaXByX3VwZGF0ZV9md19hdHRyLAorCSZpcHJfaW9hX2NhY2hlX2F0dHIsCiAJTlVMTCwKIH07CiAKQEAgLTI1NDgsMTQgKzI5MzEsMTMgQEAKIAl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3MgPSAwOwogCiAJRU5URVI7Ci0JZHVtcCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpcHJfZHVtcCksIEdGUF9LRVJORUwpOworCWR1bXAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaXByX2R1bXApLCBHRlBfS0VSTkVMKTsKIAogCWlmICghZHVtcCkgewogCQlpcHJfZXJyKCJEdW1wIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCW1lbXNldChkdW1wLCAwLCBzaXplb2Yoc3RydWN0IGlwcl9kdW1wKSk7CiAJa3JlZl9pbml0KCZkdW1wLT5rcmVmKTsKIAlkdW1wLT5pb2FfY2ZnID0gaW9hX2NmZzsKIApAQCAtMjgyNCw4ICszMjA2LDEwIEBACiAJaWYgKHJlcykgewogCQlpZiAoaXByX2lzX2FmX2Rhc2RfZGV2aWNlKHJlcykpCiAJCQlzZGV2LT50eXBlID0gVFlQRV9SQUlEOwotCQlpZiAoaXByX2lzX2FmX2Rhc2RfZGV2aWNlKHJlcykgfHwgaXByX2lzX2lvYV9yZXNvdXJjZShyZXMpKQorCQlpZiAoaXByX2lzX2FmX2Rhc2RfZGV2aWNlKHJlcykgfHwgaXByX2lzX2lvYV9yZXNvdXJjZShyZXMpKSB7CiAJCQlzZGV2LT5zY3NpX2xldmVsID0gNDsKKwkJCXNkZXYtPm5vX3VsZF9hdHRhY2ggPSAxOworCQl9CiAJCWlmIChpcHJfaXNfdnNldF9kZXZpY2UocmVzKSkgewogCQkJc2Rldi0+dGltZW91dCA9IElQUl9WU0VUX1JXX1RJTUVPVVQ7CiAJCQlibGtfcXVldWVfbWF4X3NlY3RvcnMoc2Rldi0+cmVxdWVzdF9xdWV1ZSwgSVBSX1ZTRVRfTUFYX1NFQ1RPUlMpOwpAQCAtMjg0OCwxMyArMzIzMiwxNCBAQAogICogaGFuZGxpbmcgbmV3IGNvbW1hbmRzLgogICoKICAqIFJldHVybiB2YWx1ZToKLSAqIAkwIG9uIHN1Y2Nlc3MKKyAqIAkwIG9uIHN1Y2Nlc3MgLyAtRU5YSU8gaWYgZGV2aWNlIGRvZXMgbm90IGV4aXN0CiAgKiovCiBzdGF0aWMgaW50IGlwcl9zbGF2ZV9hbGxvYyhzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCiB7CiAJc3RydWN0IGlwcl9pb2FfY2ZnICppb2FfY2ZnID0gKHN0cnVjdCBpcHJfaW9hX2NmZyAqKSBzZGV2LT5ob3N0LT5ob3N0ZGF0YTsKIAlzdHJ1Y3QgaXByX3Jlc291cmNlX2VudHJ5ICpyZXM7CiAJdW5zaWduZWQgbG9uZyBsb2NrX2ZsYWdzOworCWludCByYyA9IC1FTlhJTzsKIAogCXNkZXYtPmhvc3RkYXRhID0gTlVMTDsKIApAQCAtMjg2OCwxNCArMzI1MywxNiBAQAogCQkJcmVzLT5hZGRfdG9fbWwgPSAwOwogCQkJcmVzLT5pbl9lcnAgPSAwOwogCQkJc2Rldi0+aG9zdGRhdGEgPSByZXM7Ci0JCQlyZXMtPm5lZWRzX3N5bmNfY29tcGxldGUgPSAxOworCQkJaWYgKCFpcHJfaXNfbmFjYV9tb2RlbChyZXMpKQorCQkJCXJlcy0+bmVlZHNfc3luY19jb21wbGV0ZSA9IDE7CisJCQlyYyA9IDA7CiAJCQlicmVhazsKIAkJfQogCX0KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoaW9hX2NmZy0+aG9zdC0+aG9zdF9sb2NrLCBsb2NrX2ZsYWdzKTsKIAotCXJldHVybiAwOworCXJldHVybiByYzsKIH0KIAogLyoqCkBAIC0yOTM5LDcgKzMzMjYsNyBAQAogCWlvYV9jZmcgPSAoc3RydWN0IGlwcl9pb2FfY2ZnICopIHNjc2lfY21kLT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhOwogCXJlcyA9IHNjc2lfY21kLT5kZXZpY2UtPmhvc3RkYXRhOwogCi0JaWYgKCFyZXMgfHwgKCFpcHJfaXNfZ3Njc2kocmVzKSAmJiAhaXByX2lzX3ZzZXRfZGV2aWNlKHJlcykpKQorCWlmICghcmVzKQogCQlyZXR1cm4gRkFJTEVEOwogCiAJLyoKQEAgLTMxMzEsNyArMzUxOCw4IEBACiAJfQogCiAJbGlzdF9hZGRfdGFpbCgmaXByX2NtZC0+cXVldWUsICZpb2FfY2ZnLT5mcmVlX3EpOwotCXJlcy0+bmVlZHNfc3luY19jb21wbGV0ZSA9IDE7CisJaWYgKCFpcHJfaXNfbmFjYV9tb2RlbChyZXMpKQorCQlyZXMtPm5lZWRzX3N5bmNfY29tcGxldGUgPSAxOwogCiAJTEVBVkU7CiAJcmV0dXJuIChJUFJfSU9BU0NfU0VOU0VfS0VZKGlvYXNjKSA/IEZBSUxFRCA6IFNVQ0NFU1MpOwpAQCAtMzQzNSw3ICszODIzLDggQEAKIAl9CiAKIAlpZiAocmVzKSB7Ci0JCXJlcy0+bmVlZHNfc3luY19jb21wbGV0ZSA9IDE7CisJCWlmICghaXByX2lzX25hY2FfbW9kZWwocmVzKSkKKwkJCXJlcy0+bmVlZHNfc3luY19jb21wbGV0ZSA9IDE7CiAJCXJlcy0+aW5fZXJwID0gMDsKIAl9CiAJaXByX3VubWFwX3NnbGlzdChpb2FfY2ZnLCBpcHJfY21kKTsKQEAgLTM3MDUsNiArNDA5NCwzMCBAQAogfQogCiAvKioKKyAqIGlwcl9nZXRfYXV0b3NlbnNlIC0gQ29weSBhdXRvc2Vuc2UgZGF0YSB0byBzZW5zZSBidWZmZXIKKyAqIEBpcHJfY21kOglpcHIgY29tbWFuZCBzdHJ1Y3QKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNvcGllcyB0aGUgYXV0b3NlbnNlIGJ1ZmZlciB0byB0aGUgYnVmZmVyCisgKiBpbiB0aGUgc2NzaV9jbWQsIGlmIHRoZXJlIGlzIGF1dG9zZW5zZSBhdmFpbGFibGUuCisgKgorICogUmV0dXJuIHZhbHVlOgorICoJMSBpZiBhdXRvc2Vuc2Ugd2FzIGF2YWlsYWJsZSAvIDAgaWYgbm90CisgKiovCitzdGF0aWMgaW50IGlwcl9nZXRfYXV0b3NlbnNlKHN0cnVjdCBpcHJfY21uZCAqaXByX2NtZCkKK3sKKwlzdHJ1Y3QgaXByX2lvYXNhICppb2FzYSA9ICZpcHJfY21kLT5pb2FzYTsKKworCWlmICgoYmUzMl90b19jcHUoaW9hc2EtPmlvYXNjX3NwZWNpZmljKSAmCisJICAgICAoSVBSX0FERElUSU9OQUxfU1RBVFVTX0ZNVCB8IElQUl9BVVRPU0VOU0VfVkFMSUQpKSA9PSAwKQorCQlyZXR1cm4gMDsKKworCW1lbWNweShpcHJfY21kLT5zY3NpX2NtZC0+c2Vuc2VfYnVmZmVyLCBpb2FzYS0+YXV0b19zZW5zZS5kYXRhLAorCSAgICAgICBtaW5fdCh1MTYsIGJlMTZfdG9fY3B1KGlvYXNhLT5hdXRvX3NlbnNlLmF1dG9fc2Vuc2VfbGVuKSwKKwkJICAgU0NTSV9TRU5TRV9CVUZGRVJTSVpFKSk7CisJcmV0dXJuIDE7Cit9CisKKy8qKgogICogaXByX2VycF9zdGFydCAtIFByb2Nlc3MgYW4gZXJyb3IgcmVzcG9uc2UgZm9yIGEgU0NTSSBvcAogICogQGlvYV9jZmc6CWlvYSBjb25maWcgc3RydWN0CiAgKiBAaXByX2NtZDoJaXByIGNvbW1hbmQgc3RydWN0CkBAIC0zNzM0LDE0ICs0MTQ3LDE5IEBACiAKIAlzd2l0Y2ggKGlvYXNjICYgSVBSX0lPQVNDX0lPQVNDX01BU0spIHsKIAljYXNlIElQUl9JT0FTQ19BQk9SVEVEX0NNRF9URVJNX0JZX0hPU1Q6Ci0JCXNjc2lfY21kLT5yZXN1bHQgfD0gKERJRF9JTU1fUkVUUlkgPDwgMTYpOworCQlpZiAoaXByX2lzX25hY2FfbW9kZWwocmVzKSkKKwkJCXNjc2lfY21kLT5yZXN1bHQgfD0gKERJRF9BQk9SVCA8PCAxNik7CisJCWVsc2UKKwkJCXNjc2lfY21kLT5yZXN1bHQgfD0gKERJRF9JTU1fUkVUUlkgPDwgMTYpOwogCQlicmVhazsKIAljYXNlIElQUl9JT0FTQ19JUl9SRVNPVVJDRV9IQU5ETEU6CisJY2FzZSBJUFJfSU9BU0NfSVJfTk9fQ01EU19UT18yTkRfSU9BOgogCQlzY3NpX2NtZC0+cmVzdWx0IHw9IChESURfTk9fQ09OTkVDVCA8PCAxNik7CiAJCWJyZWFrOwogCWNhc2UgSVBSX0lPQVNDX0hXX1NFTF9USU1FT1VUOgogCQlzY3NpX2NtZC0+cmVzdWx0IHw9IChESURfTk9fQ09OTkVDVCA8PCAxNik7Ci0JCXJlcy0+bmVlZHNfc3luY19jb21wbGV0ZSA9IDE7CisJCWlmICghaXByX2lzX25hY2FfbW9kZWwocmVzKSkKKwkJCXJlcy0+bmVlZHNfc3luY19jb21wbGV0ZSA9IDE7CiAJCWJyZWFrOwogCWNhc2UgSVBSX0lPQVNDX1NZTkNfUkVRVUlSRUQ6CiAJCWlmICghcmVzLT5pbl9lcnApCkBAIC0zNzQ5LDYgKzQxNjcsNyBAQAogCQlzY3NpX2NtZC0+cmVzdWx0IHw9IChESURfSU1NX1JFVFJZIDw8IDE2KTsKIAkJYnJlYWs7CiAJY2FzZSBJUFJfSU9BU0NfTUVEX0RPX05PVF9SRUFMTE9DOiAvKiBwcmV2ZW50IHJldHJpZXMgKi8KKwljYXNlIElQUl9JT0FTQV9JUl9EVUFMX0lPQV9ESVNBQkxFRDoKIAkJc2NzaV9jbWQtPnJlc3VsdCB8PSAoRElEX1BBU1NUSFJPVUdIIDw8IDE2KTsKIAkJYnJlYWs7CiAJY2FzZSBJUFJfSU9BU0NfQlVTX1dBU19SRVNFVDoKQEAgLTM3NjAsMjEgKzQxNzksMjcgQEAKIAkJaWYgKCFyZXMtPnJlc2V0dGluZ19kZXZpY2UpCiAJCQlzY3NpX3JlcG9ydF9idXNfcmVzZXQoaW9hX2NmZy0+aG9zdCwgc2NzaV9jbWQtPmRldmljZS0+Y2hhbm5lbCk7CiAJCXNjc2lfY21kLT5yZXN1bHQgfD0gKERJRF9FUlJPUiA8PCAxNik7Ci0JCXJlcy0+bmVlZHNfc3luY19jb21wbGV0ZSA9IDE7CisJCWlmICghaXByX2lzX25hY2FfbW9kZWwocmVzKSkKKwkJCXJlcy0+bmVlZHNfc3luY19jb21wbGV0ZSA9IDE7CiAJCWJyZWFrOwogCWNhc2UgSVBSX0lPQVNDX0hXX0RFVl9CVVNfU1RBVFVTOgogCQlzY3NpX2NtZC0+cmVzdWx0IHw9IElQUl9JT0FTQ19TRU5TRV9TVEFUVVMoaW9hc2MpOwogCQlpZiAoSVBSX0lPQVNDX1NFTlNFX1NUQVRVUyhpb2FzYykgPT0gU0FNX1NUQVRfQ0hFQ0tfQ09ORElUSU9OKSB7Ci0JCQlpcHJfZXJwX2NhbmNlbF9hbGwoaXByX2NtZCk7Ci0JCQlyZXR1cm47CisJCQlpZiAoIWlwcl9nZXRfYXV0b3NlbnNlKGlwcl9jbWQpKSB7CisJCQkJaWYgKCFpcHJfaXNfbmFjYV9tb2RlbChyZXMpKSB7CisJCQkJCWlwcl9lcnBfY2FuY2VsX2FsbChpcHJfY21kKTsKKwkJCQkJcmV0dXJuOworCQkJCX0KKwkJCX0KIAkJfQotCQlyZXMtPm5lZWRzX3N5bmNfY29tcGxldGUgPSAxOworCQlpZiAoIWlwcl9pc19uYWNhX21vZGVsKHJlcykpCisJCQlyZXMtPm5lZWRzX3N5bmNfY29tcGxldGUgPSAxOwogCQlicmVhazsKIAljYXNlIElQUl9JT0FTQ19OUl9JTklUX0NNRF9SRVFVSVJFRDoKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJc2NzaV9jbWQtPnJlc3VsdCB8PSAoRElEX0VSUk9SIDw8IDE2KTsKLQkJaWYgKCFpcHJfaXNfdnNldF9kZXZpY2UocmVzKSkKKwkJaWYgKCFpcHJfaXNfdnNldF9kZXZpY2UocmVzKSAmJiAhaXByX2lzX25hY2FfbW9kZWwocmVzKSkKIAkJCXJlcy0+bmVlZHNfc3luY19jb21wbGV0ZSA9IDE7CiAJCWJyZWFrOwogCX0KQEAgLTQwNzMsNiArNDQ5OCw3IEBACiAJaW9hX2NmZy0+aW5fcmVzZXRfcmVsb2FkID0gMDsKIAlpb2FfY2ZnLT5hbGxvd19jbWRzID0gMTsKIAlpb2FfY2ZnLT5yZXNldF9jbWQgPSBOVUxMOworCWlvYV9jZmctPmRvb3JiZWxsIHw9IElQUl9SVU5USU1FX1JFU0VUOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShyZXMsICZpb2FfY2ZnLT51c2VkX3Jlc19xLCBxdWV1ZSkgewogCQlpZiAoaW9hX2NmZy0+YWxsb3dfbWxfYWRkX2RlbCAmJiAocmVzLT5hZGRfdG9fbWwgfHwgcmVzLT5kZWxfZnJvbV9tbCkpIHsKQEAgLTQxNDYsNyArNDU3Miw3IEBACiAJaXByX2NtZC0+am9iX3N0ZXAgPSBpcHJfaW9hX3Jlc2V0X2RvbmU7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlKHJlcywgJmlvYV9jZmctPnVzZWRfcmVzX3EsIHF1ZXVlKSB7Ci0JCWlmICghaXByX2lzX2FmX2Rhc2RfZGV2aWNlKHJlcykpCisJCWlmICghSVBSX0lTX0RBU0RfREVWSUNFKHJlcy0+Y2ZndGUuc3RkX2lucV9kYXRhKSkKIAkJCWNvbnRpbnVlOwogCiAJCWlwcl9jbWQtPnUucmVzID0gcmVzOwpAQCAtNDE3OSw2ICs0NjA1LDM2IEBACiB9CiAKIC8qKgorICogaXByX3NldHVwX3dyaXRlX2NhY2hlIC0gRGlzYWJsZSB3cml0ZSBjYWNoZSBpZiBuZWVkZWQKKyAqIEBpcHJfY21kOglpcHIgY29tbWFuZCBzdHJ1Y3QKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNldHMgdXAgYWRhcHRlcnMgd3JpdGUgY2FjaGUgdG8gZGVzaXJlZCBzZXR0aW5nCisgKgorICogUmV0dXJuIHZhbHVlOgorICogCUlQUl9SQ19KT0JfQ09OVElOVUUgLyBJUFJfUkNfSk9CX1JFVFVSTgorICoqLworc3RhdGljIGludCBpcHJfc2V0dXBfd3JpdGVfY2FjaGUoc3RydWN0IGlwcl9jbW5kICppcHJfY21kKQoreworCXN0cnVjdCBpcHJfaW9hX2NmZyAqaW9hX2NmZyA9IGlwcl9jbWQtPmlvYV9jZmc7CisKKwlpcHJfY21kLT5qb2Jfc3RlcCA9IGlwcl9zZXRfc3VwcG9ydGVkX2RldnM7CisJaXByX2NtZC0+dS5yZXMgPSBsaXN0X2VudHJ5KGlvYV9jZmctPnVzZWRfcmVzX3EubmV4dCwKKwkJCQkgICAgc3RydWN0IGlwcl9yZXNvdXJjZV9lbnRyeSwgcXVldWUpOworCisJaWYgKGlvYV9jZmctPmNhY2hlX3N0YXRlICE9IENBQ0hFX0RJU0FCTEVEKQorCQlyZXR1cm4gSVBSX1JDX0pPQl9DT05USU5VRTsKKworCWlwcl9jbWQtPmlvYXJjYi5yZXNfaGFuZGxlID0gY3B1X3RvX2JlMzIoSVBSX0lPQV9SRVNfSEFORExFKTsKKwlpcHJfY21kLT5pb2FyY2IuY21kX3BrdC5yZXF1ZXN0X3R5cGUgPSBJUFJfUlFUWVBFX0lPQUNNRDsKKwlpcHJfY21kLT5pb2FyY2IuY21kX3BrdC5jZGJbMF0gPSBJUFJfSU9BX1NIVVRET1dOOworCWlwcl9jbWQtPmlvYXJjYi5jbWRfcGt0LmNkYlsxXSA9IElQUl9TSFVURE9XTl9QUkVQQVJFX0ZPUl9OT1JNQUw7CisKKwlpcHJfZG9fcmVxKGlwcl9jbWQsIGlwcl9yZXNldF9pb2Ffam9iLCBpcHJfdGltZW91dCwgSVBSX0lOVEVSTkFMX1RJTUVPVVQpOworCisJcmV0dXJuIElQUl9SQ19KT0JfUkVUVVJOOworfQorCisvKioKICAqIGlwcl9nZXRfbW9kZV9wYWdlIC0gTG9jYXRlIHNwZWNpZmllZCBtb2RlIHBhZ2UKICAqIEBtb2RlX3BhZ2VzOgltb2RlIHBhZ2UgYnVmZmVyCiAgKiBAcGFnZV9jb2RlOglwYWdlIGNvZGUgdG8gZmluZApAQCAtNDM4OSwxMCArNDg0NSw3IEBACiAJCQkgICAgICBpb2FfY2ZnLT52cGRfY2JzX2RtYSArIG9mZnNldG9mKHN0cnVjdCBpcHJfbWlzY19jYnMsIG1vZGVfcGFnZXMpLAogCQkJICAgICAgbGVuZ3RoKTsKIAotCWlwcl9jbWQtPmpvYl9zdGVwID0gaXByX3NldF9zdXBwb3J0ZWRfZGV2czsKLQlpcHJfY21kLT51LnJlcyA9IGxpc3RfZW50cnkoaW9hX2NmZy0+dXNlZF9yZXNfcS5uZXh0LAotCQkJCSAgICBzdHJ1Y3QgaXByX3Jlc291cmNlX2VudHJ5LCBxdWV1ZSk7Ci0KKwlpcHJfY21kLT5qb2Jfc3RlcCA9IGlwcl9zZXR1cF93cml0ZV9jYWNoZTsKIAlpcHJfZG9fcmVxKGlwcl9jbWQsIGlwcl9yZXNldF9pb2Ffam9iLCBpcHJfdGltZW91dCwgSVBSX0lOVEVSTkFMX1RJTUVPVVQpOwogCiAJTEVBVkU7CkBAIC00NDMxLDYgKzQ4ODQsNTEgQEAKIH0KIAogLyoqCisgKiBpcHJfcmVzZXRfY21kX2ZhaWxlZCAtIEhhbmRsZSBmYWlsdXJlIG9mIElPQSByZXNldCBjb21tYW5kCisgKiBAaXByX2NtZDoJaXByIGNvbW1hbmQgc3RydWN0CisgKgorICogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBmYWlsdXJlIG9mIGFuIElPQSBicmluZ3VwIGNvbW1hbmQuCisgKgorICogUmV0dXJuIHZhbHVlOgorICogCUlQUl9SQ19KT0JfUkVUVVJOCisgKiovCitzdGF0aWMgaW50IGlwcl9yZXNldF9jbWRfZmFpbGVkKHN0cnVjdCBpcHJfY21uZCAqaXByX2NtZCkKK3sKKwlzdHJ1Y3QgaXByX2lvYV9jZmcgKmlvYV9jZmcgPSBpcHJfY21kLT5pb2FfY2ZnOworCXUzMiBpb2FzYyA9IGJlMzJfdG9fY3B1KGlwcl9jbWQtPmlvYXNhLmlvYXNjKTsKKworCWRldl9lcnIoJmlvYV9jZmctPnBkZXYtPmRldiwKKwkJIjB4JTAyWCBmYWlsZWQgd2l0aCBJT0FTQzogMHglMDhYXG4iLAorCQlpcHJfY21kLT5pb2FyY2IuY21kX3BrdC5jZGJbMF0sIGlvYXNjKTsKKworCWlwcl9pbml0aWF0ZV9pb2FfcmVzZXQoaW9hX2NmZywgSVBSX1NIVVRET1dOX05PTkUpOworCWxpc3RfYWRkX3RhaWwoJmlwcl9jbWQtPnF1ZXVlLCAmaW9hX2NmZy0+ZnJlZV9xKTsKKwlyZXR1cm4gSVBSX1JDX0pPQl9SRVRVUk47Cit9CisKKy8qKgorICogaXByX3Jlc2V0X21vZGVfc2Vuc2VfZmFpbGVkIC0gSGFuZGxlIGZhaWx1cmUgb2YgSU9BRlAgbW9kZSBzZW5zZQorICogQGlwcl9jbWQ6CWlwciBjb21tYW5kIHN0cnVjdAorICoKKyAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgZmFpbHVyZSBvZiBhIE1vZGUgU2Vuc2UgdG8gdGhlIElPQUZQLgorICogU29tZSBhZGFwdGVycyBkbyBub3QgaGFuZGxlIGFsbCBtb2RlIHBhZ2VzLgorICoKKyAqIFJldHVybiB2YWx1ZToKKyAqIAlJUFJfUkNfSk9CX0NPTlRJTlVFIC8gSVBSX1JDX0pPQl9SRVRVUk4KKyAqKi8KK3N0YXRpYyBpbnQgaXByX3Jlc2V0X21vZGVfc2Vuc2VfZmFpbGVkKHN0cnVjdCBpcHJfY21uZCAqaXByX2NtZCkKK3sKKwl1MzIgaW9hc2MgPSBiZTMyX3RvX2NwdShpcHJfY21kLT5pb2FzYS5pb2FzYyk7CisKKwlpZiAoaW9hc2MgPT0gSVBSX0lPQVNDX0lSX0lOVkFMSURfUkVRX1RZUEVfT1JfUEtUKSB7CisJCWlwcl9jbWQtPmpvYl9zdGVwID0gaXByX3NldHVwX3dyaXRlX2NhY2hlOworCQlyZXR1cm4gSVBSX1JDX0pPQl9DT05USU5VRTsKKwl9CisKKwlyZXR1cm4gaXByX3Jlc2V0X2NtZF9mYWlsZWQoaXByX2NtZCk7Cit9CisKKy8qKgogICogaXByX2lvYWZwX21vZGVfc2Vuc2VfcGFnZTI4IC0gSXNzdWUgTW9kZSBTZW5zZSBQYWdlIDI4IHRvIElPQQogICogQGlwcl9jbWQ6CWlwciBjb21tYW5kIHN0cnVjdAogICoKQEAgLTQ0NTEsNiArNDk0OSw3IEBACiAJCQkgICAgIHNpemVvZihzdHJ1Y3QgaXByX21vZGVfcGFnZXMpKTsKIAogCWlwcl9jbWQtPmpvYl9zdGVwID0gaXByX2lvYWZwX21vZGVfc2VsZWN0X3BhZ2UyODsKKwlpcHJfY21kLT5qb2Jfc3RlcF9mYWlsZWQgPSBpcHJfcmVzZXRfbW9kZV9zZW5zZV9mYWlsZWQ7CiAKIAlpcHJfZG9fcmVxKGlwcl9jbWQsIGlwcl9yZXNldF9pb2Ffam9iLCBpcHJfdGltZW91dCwgSVBSX0lOVEVSTkFMX1RJTUVPVVQpOwogCkBAIC00NjEyLDYgKzUxMTEsMjcgQEAKIH0KIAogLyoqCisgKiBpcHJfaW5xdWlyeV9wYWdlX3N1cHBvcnRlZCAtIElzIHRoZSBnaXZlbiBpbnF1aXJ5IHBhZ2Ugc3VwcG9ydGVkCisgKiBAcGFnZTA6CQlpbnF1aXJ5IHBhZ2UgMCBidWZmZXIKKyAqIEBwYWdlOgkJcGFnZSBjb2RlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZGV0ZXJtaW5lcyBpZiB0aGUgc3BlY2lmaWVkIGlucXVpcnkgcGFnZSBpcyBzdXBwb3J0ZWQuCisgKgorICogUmV0dXJuIHZhbHVlOgorICoJMSBpZiBwYWdlIGlzIHN1cHBvcnRlZCAvIDAgaWYgbm90CisgKiovCitzdGF0aWMgaW50IGlwcl9pbnF1aXJ5X3BhZ2Vfc3VwcG9ydGVkKHN0cnVjdCBpcHJfaW5xdWlyeV9wYWdlMCAqcGFnZTAsIHU4IHBhZ2UpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbWluX3QodTgsIHBhZ2UwLT5sZW4sIElQUl9JTlFVSVJZX1BBR0UwX0VOVFJJRVMpOyBpKyspCisJCWlmIChwYWdlMC0+cGFnZVtpXSA9PSBwYWdlKQorCQkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCiAgKiBpcHJfaW9hZnBfcGFnZTNfaW5xdWlyeSAtIFNlbmQgYSBQYWdlIDMgSW5xdWlyeSB0byB0aGUgYWRhcHRlci4KICAqIEBpcHJfY21kOglpcHIgY29tbWFuZCBzdHJ1Y3QKICAqCkBAIC00NjI0LDYgKzUxNDQsMzYgQEAKIHN0YXRpYyBpbnQgaXByX2lvYWZwX3BhZ2UzX2lucXVpcnkoc3RydWN0IGlwcl9jbW5kICppcHJfY21kKQogewogCXN0cnVjdCBpcHJfaW9hX2NmZyAqaW9hX2NmZyA9IGlwcl9jbWQtPmlvYV9jZmc7CisJc3RydWN0IGlwcl9pbnF1aXJ5X3BhZ2UwICpwYWdlMCA9ICZpb2FfY2ZnLT52cGRfY2JzLT5wYWdlMF9kYXRhOworCisJRU5URVI7CisKKwlpZiAoIWlwcl9pbnF1aXJ5X3BhZ2Vfc3VwcG9ydGVkKHBhZ2UwLCAxKSkKKwkJaW9hX2NmZy0+Y2FjaGVfc3RhdGUgPSBDQUNIRV9OT05FOworCisJaXByX2NtZC0+am9iX3N0ZXAgPSBpcHJfaW9hZnBfcXVlcnlfaW9hX2NmZzsKKworCWlwcl9pb2FmcF9pbnF1aXJ5KGlwcl9jbWQsIDEsIDMsCisJCQkgIGlvYV9jZmctPnZwZF9jYnNfZG1hICsgb2Zmc2V0b2Yoc3RydWN0IGlwcl9taXNjX2NicywgcGFnZTNfZGF0YSksCisJCQkgIHNpemVvZihzdHJ1Y3QgaXByX2lucXVpcnlfcGFnZTMpKTsKKworCUxFQVZFOworCXJldHVybiBJUFJfUkNfSk9CX1JFVFVSTjsKK30KKworLyoqCisgKiBpcHJfaW9hZnBfcGFnZTBfaW5xdWlyeSAtIFNlbmQgYSBQYWdlIDAgSW5xdWlyeSB0byB0aGUgYWRhcHRlci4KKyAqIEBpcHJfY21kOglpcHIgY29tbWFuZCBzdHJ1Y3QKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNlbmRzIGEgUGFnZSAwIGlucXVpcnkgdG8gdGhlIGFkYXB0ZXIKKyAqIHRvIHJldHJpZXZlIHN1cHBvcnRlZCBpbnF1aXJ5IHBhZ2VzLgorICoKKyAqIFJldHVybiB2YWx1ZToKKyAqIAlJUFJfUkNfSk9CX0NPTlRJTlVFIC8gSVBSX1JDX0pPQl9SRVRVUk4KKyAqKi8KK3N0YXRpYyBpbnQgaXByX2lvYWZwX3BhZ2UwX2lucXVpcnkoc3RydWN0IGlwcl9jbW5kICppcHJfY21kKQoreworCXN0cnVjdCBpcHJfaW9hX2NmZyAqaW9hX2NmZyA9IGlwcl9jbWQtPmlvYV9jZmc7CiAJY2hhciB0eXBlWzVdOwogCiAJRU5URVI7CkBAIC00NjMzLDExICs1MTgzLDExIEBACiAJdHlwZVs0XSA9ICdcMCc7CiAJaW9hX2NmZy0+dHlwZSA9IHNpbXBsZV9zdHJ0b3VsKChjaGFyICopdHlwZSwgTlVMTCwgMTYpOwogCi0JaXByX2NtZC0+am9iX3N0ZXAgPSBpcHJfaW9hZnBfcXVlcnlfaW9hX2NmZzsKKwlpcHJfY21kLT5qb2Jfc3RlcCA9IGlwcl9pb2FmcF9wYWdlM19pbnF1aXJ5OwogCi0JaXByX2lvYWZwX2lucXVpcnkoaXByX2NtZCwgMSwgMywKLQkJCSAgaW9hX2NmZy0+dnBkX2Nic19kbWEgKyBvZmZzZXRvZihzdHJ1Y3QgaXByX21pc2NfY2JzLCBwYWdlM19kYXRhKSwKLQkJCSAgc2l6ZW9mKHN0cnVjdCBpcHJfaW5xdWlyeV9wYWdlMykpOworCWlwcl9pb2FmcF9pbnF1aXJ5KGlwcl9jbWQsIDEsIDAsCisJCQkgIGlvYV9jZmctPnZwZF9jYnNfZG1hICsgb2Zmc2V0b2Yoc3RydWN0IGlwcl9taXNjX2NicywgcGFnZTBfZGF0YSksCisJCQkgIHNpemVvZihzdHJ1Y3QgaXByX2lucXVpcnlfcGFnZTApKTsKIAogCUxFQVZFOwogCXJldHVybiBJUFJfUkNfSk9CX1JFVFVSTjsKQEAgLTQ2NTcsNyArNTIwNyw3IEBACiAJc3RydWN0IGlwcl9pb2FfY2ZnICppb2FfY2ZnID0gaXByX2NtZC0+aW9hX2NmZzsKIAogCUVOVEVSOwotCWlwcl9jbWQtPmpvYl9zdGVwID0gaXByX2lvYWZwX3BhZ2UzX2lucXVpcnk7CisJaXByX2NtZC0+am9iX3N0ZXAgPSBpcHJfaW9hZnBfcGFnZTBfaW5xdWlyeTsKIAogCWlwcl9pb2FmcF9pbnF1aXJ5KGlwcl9jbWQsIDAsIDAsCiAJCQkgIGlvYV9jZmctPnZwZF9jYnNfZG1hICsgb2Zmc2V0b2Yoc3RydWN0IGlwcl9taXNjX2NicywgaW9hX3ZwZCksCkBAIC00ODE1LDcgKzUzNjUsNyBAQAogCX0KIAogCS8qIEVuYWJsZSBkZXN0cnVjdGl2ZSBkaWFnbm9zdGljcyBvbiBJT0EgKi8KLQl3cml0ZWwoSVBSX0RPT1JCRUxMLCBpb2FfY2ZnLT5yZWdzLnNldF91cHJvY19pbnRlcnJ1cHRfcmVnKTsKKwl3cml0ZWwoaW9hX2NmZy0+ZG9vcmJlbGwsIGlvYV9jZmctPnJlZ3Muc2V0X3Vwcm9jX2ludGVycnVwdF9yZWcpOwogCiAJd3JpdGVsKElQUl9QQ0lJX09QRVJfSU5URVJSVVBUUywgaW9hX2NmZy0+cmVncy5jbHJfaW50ZXJydXB0X21hc2tfcmVnKTsKIAlpbnRfcmVnID0gcmVhZGwoaW9hX2NmZy0+cmVncy5zZW5zZV9pbnRlcnJ1cHRfbWFza19yZWcpOwpAQCAtNTE0NywxMiArNTY5Nyw3IEBACiAJaXByX2NtZC0+aW9hcmNiLmNtZF9wa3QuY2RiWzddID0gKHNnbGlzdC0+YnVmZmVyX2xlbiAmIDB4MDBmZjAwKSA+PiA4OwogCWlwcl9jbWQtPmlvYXJjYi5jbWRfcGt0LmNkYls4XSA9IHNnbGlzdC0+YnVmZmVyX2xlbiAmIDB4MDAwMGZmOwogCi0JaWYgKGlwcl9tYXBfdWNvZGVfYnVmZmVyKGlwcl9jbWQsIHNnbGlzdCwgc2dsaXN0LT5idWZmZXJfbGVuKSkgewotCQlkZXZfZXJyKCZpb2FfY2ZnLT5wZGV2LT5kZXYsCi0JCQkiRmFpbGVkIHRvIG1hcCBtaWNyb2NvZGUgZG93bmxvYWQgYnVmZmVyXG4iKTsKLQkJcmV0dXJuIElQUl9SQ19KT0JfQ09OVElOVUU7Ci0JfQotCisJaXByX2J1aWxkX3Vjb2RlX2lvYWRsKGlwcl9jbWQsIHNnbGlzdCk7CiAJaXByX2NtZC0+am9iX3N0ZXAgPSBpcHJfcmVzZXRfdWNvZGVfZG93bmxvYWRfZG9uZTsKIAogCWlwcl9kb19yZXEoaXByX2NtZCwgaXByX3Jlc2V0X2lvYV9qb2IsIGlwcl90aW1lb3V0LApAQCAtNTIxNyw3ICs1NzYyLDYgQEAKIHN0YXRpYyB2b2lkIGlwcl9yZXNldF9pb2Ffam9iKHN0cnVjdCBpcHJfY21uZCAqaXByX2NtZCkKIHsKIAl1MzIgcmMsIGlvYXNjOwotCXVuc2lnbmVkIGxvbmcgc2NyYXRjaCA9IGlwcl9jbWQtPnUuc2NyYXRjaDsKIAlzdHJ1Y3QgaXByX2lvYV9jZmcgKmlvYV9jZmcgPSBpcHJfY21kLT5pb2FfY2ZnOwogCiAJZG8gewpAQCAtNTIzMywxNyArNTc3NywxMyBAQAogCQl9CiAKIAkJaWYgKElQUl9JT0FTQ19TRU5TRV9LRVkoaW9hc2MpKSB7Ci0JCQlkZXZfZXJyKCZpb2FfY2ZnLT5wZGV2LT5kZXYsCi0JCQkJIjB4JTAyWCBmYWlsZWQgd2l0aCBJT0FTQzogMHglMDhYXG4iLAotCQkJCWlwcl9jbWQtPmlvYXJjYi5jbWRfcGt0LmNkYlswXSwgaW9hc2MpOwotCi0JCQlpcHJfaW5pdGlhdGVfaW9hX3Jlc2V0KGlvYV9jZmcsIElQUl9TSFVURE9XTl9OT05FKTsKLQkJCWxpc3RfYWRkX3RhaWwoJmlwcl9jbWQtPnF1ZXVlLCAmaW9hX2NmZy0+ZnJlZV9xKTsKLQkJCXJldHVybjsKKwkJCXJjID0gaXByX2NtZC0+am9iX3N0ZXBfZmFpbGVkKGlwcl9jbWQpOworCQkJaWYgKHJjID09IElQUl9SQ19KT0JfUkVUVVJOKQorCQkJCXJldHVybjsKIAkJfQogCiAJCWlwcl9yZWluaXRfaXByX2NtbmQoaXByX2NtZCk7Ci0JCWlwcl9jbWQtPnUuc2NyYXRjaCA9IHNjcmF0Y2g7CisJCWlwcl9jbWQtPmpvYl9zdGVwX2ZhaWxlZCA9IGlwcl9yZXNldF9jbWRfZmFpbGVkOwogCQlyYyA9IGlwcl9jbWQtPmpvYl9zdGVwKGlwcl9jbWQpOwogCX0gd2hpbGUocmMgPT0gSVBSX1JDX0pPQl9DT05USU5VRSk7CiB9CkBAIC01NTE3LDE1ICs2MDU3LDEyIEBACiAJaW50IGksIHJjID0gLUVOT01FTTsKIAogCUVOVEVSOwotCWlvYV9jZmctPnJlc19lbnRyaWVzID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGlwcl9yZXNvdXJjZV9lbnRyeSkgKgorCWlvYV9jZmctPnJlc19lbnRyaWVzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGlwcl9yZXNvdXJjZV9lbnRyeSkgKgogCQkJCSAgICAgICBJUFJfTUFYX1BIWVNJQ0FMX0RFVlMsIEdGUF9LRVJORUwpOwogCiAJaWYgKCFpb2FfY2ZnLT5yZXNfZW50cmllcykKIAkJZ290byBvdXQ7CiAKLQltZW1zZXQoaW9hX2NmZy0+cmVzX2VudHJpZXMsIDAsCi0JICAgICAgIHNpemVvZihzdHJ1Y3QgaXByX3Jlc291cmNlX2VudHJ5KSAqIElQUl9NQVhfUEhZU0lDQUxfREVWUyk7Ci0KIAlmb3IgKGkgPSAwOyBpIDwgSVBSX01BWF9QSFlTSUNBTF9ERVZTOyBpKyspCiAJCWxpc3RfYWRkX3RhaWwoJmlvYV9jZmctPnJlc19lbnRyaWVzW2ldLnF1ZXVlLCAmaW9hX2NmZy0+ZnJlZV9yZXNfcSk7CiAKQEAgLTU1NjYsMTUgKzYxMDMsMTIgQEAKIAkJbGlzdF9hZGRfdGFpbCgmaW9hX2NmZy0+aG9zdHJjYltpXS0+cXVldWUsICZpb2FfY2ZnLT5ob3N0cmNiX2ZyZWVfcSk7CiAJfQogCi0JaW9hX2NmZy0+dHJhY2UgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaXByX3RyYWNlX2VudHJ5KSAqCisJaW9hX2NmZy0+dHJhY2UgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaXByX3RyYWNlX2VudHJ5KSAqCiAJCQkJIElQUl9OVU1fVFJBQ0VfRU5UUklFUywgR0ZQX0tFUk5FTCk7CiAKIAlpZiAoIWlvYV9jZmctPnRyYWNlKQogCQlnb3RvIG91dF9mcmVlX2hvc3RyY2JfZG1hOwogCi0JbWVtc2V0KGlvYV9jZmctPnRyYWNlLCAwLAotCSAgICAgICBzaXplb2Yoc3RydWN0IGlwcl90cmFjZV9lbnRyeSkgKiBJUFJfTlVNX1RSQUNFX0VOVFJJRVMpOwotCiAJcmMgPSAwOwogb3V0OgogCUxFQVZFOwpAQCAtNTY0Miw2ICs2MTc2LDkgQEAKIAlpb2FfY2ZnLT5ob3N0ID0gaG9zdDsKIAlpb2FfY2ZnLT5wZGV2ID0gcGRldjsKIAlpb2FfY2ZnLT5sb2dfbGV2ZWwgPSBpcHJfbG9nX2xldmVsOworCWlvYV9jZmctPmRvb3JiZWxsID0gSVBSX0RPT1JCRUxMOworCWlmICghaXByX2F1dG9fY3JlYXRlKQorCQlpb2FfY2ZnLT5kb29yYmVsbCB8PSBJUFJfUlVOVElNRV9SRVNFVDsKIAlzcHJpbnRmKGlvYV9jZmctPmV5ZV9jYXRjaGVyLCBJUFJfRVlFQ0FUQ0hFUik7CiAJc3ByaW50Zihpb2FfY2ZnLT50cmFjZV9zdGFydCwgSVBSX1RSQUNFX1NUQVJUX0xBQkVMKTsKIAlzcHJpbnRmKGlvYV9jZmctPmlwcl9mcmVlX2xhYmVsLCBJUFJfRlJFRVFfTEFCRUwpOwpAQCAtNTY2MCw2ICs2MTk3LDEwIEBACiAJSU5JVF9XT1JLKCZpb2FfY2ZnLT53b3JrX3EsIGlwcl93b3JrZXJfdGhyZWFkLCBpb2FfY2ZnKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZpb2FfY2ZnLT5yZXNldF93YWl0X3EpOwogCWlvYV9jZmctPnNkdF9zdGF0ZSA9IElOQUNUSVZFOworCWlmIChpcHJfZW5hYmxlX2NhY2hlKQorCQlpb2FfY2ZnLT5jYWNoZV9zdGF0ZSA9IENBQ0hFX0VOQUJMRUQ7CisJZWxzZQorCQlpb2FfY2ZnLT5jYWNoZV9zdGF0ZSA9IENBQ0hFX0RJU0FCTEVEOwogCiAJaXByX2luaXRpYWxpemVfYnVzX2F0dHIoaW9hX2NmZyk7CiAKQEAgLTYwMDgsNiArNjU0OSw3IEBACiAJaXByX3NjYW5fdnNldHMoaW9hX2NmZyk7CiAJc2NzaV9hZGRfZGV2aWNlKGlvYV9jZmctPmhvc3QsIElQUl9JT0FfQlVTLCBJUFJfSU9BX1RBUkdFVCwgSVBSX0lPQV9MVU4pOwogCWlvYV9jZmctPmFsbG93X21sX2FkZF9kZWwgPSAxOworCWlvYV9jZmctPmhvc3QtPm1heF9jaGFubmVsID0gSVBSX1ZTRVRfQlVTOwogCXNjaGVkdWxlX3dvcmsoJmlvYV9jZmctPndvcmtfcSk7CiAJcmV0dXJuIDA7CiB9CkBAIC02MDU1LDEyICs2NTk3LDMwIEBACiAJeyBQQ0lfVkVORE9SX0lEX0lCTSwgUENJX0RFVklDRV9JRF9JQk1fQ0lUUklORSwKIAkJUENJX1ZFTkRPUl9JRF9JQk0sIElQUl9TVUJTX0RFVl9JRF81NzFBLAogCSAgICAgIDAsIDAsIChrZXJuZWxfdWxvbmdfdCkmaXByX2NoaXBfY2ZnWzBdIH0sCisJeyBQQ0lfVkVORE9SX0lEX0lCTSwgUENJX0RFVklDRV9JRF9JQk1fQ0lUUklORSwKKwkJUENJX1ZFTkRPUl9JRF9JQk0sIElQUl9TVUJTX0RFVl9JRF81NzVCLAorCQkwLCAwLCAoa2VybmVsX3Vsb25nX3QpJmlwcl9jaGlwX2NmZ1swXSB9LAorCXsgUENJX1ZFTkRPUl9JRF9BREFQVEVDMiwgUENJX0RFVklDRV9JRF9BREFQVEVDMl9PQlNJRElBTiwKKwkgICAgICBQQ0lfVkVORE9SX0lEX0lCTSwgSVBSX1NVQlNfREVWX0lEXzU3MkEsCisJICAgICAgMCwgMCwgKGtlcm5lbF91bG9uZ190KSZpcHJfY2hpcF9jZmdbMF0gfSwKKwl7IFBDSV9WRU5ET1JfSURfQURBUFRFQzIsIFBDSV9ERVZJQ0VfSURfQURBUFRFQzJfT0JTSURJQU4sCisJICAgICAgUENJX1ZFTkRPUl9JRF9JQk0sIElQUl9TVUJTX0RFVl9JRF81NzJCLAorCSAgICAgIDAsIDAsIChrZXJuZWxfdWxvbmdfdCkmaXByX2NoaXBfY2ZnWzBdIH0sCisJeyBQQ0lfVkVORE9SX0lEX0lCTSwgUENJX0RFVklDRV9JRF9JQk1fT0JTSURJQU4sCisJICAgICAgUENJX1ZFTkRPUl9JRF9JQk0sIElQUl9TVUJTX0RFVl9JRF81NzJBLAorCSAgICAgIDAsIDAsIChrZXJuZWxfdWxvbmdfdCkmaXByX2NoaXBfY2ZnWzBdIH0sCisJeyBQQ0lfVkVORE9SX0lEX0lCTSwgUENJX0RFVklDRV9JRF9JQk1fT0JTSURJQU4sCisJICAgICAgUENJX1ZFTkRPUl9JRF9JQk0sIElQUl9TVUJTX0RFVl9JRF81NzJCLAorCSAgICAgIDAsIDAsIChrZXJuZWxfdWxvbmdfdCkmaXByX2NoaXBfY2ZnWzBdIH0sCiAJeyBQQ0lfVkVORE9SX0lEX0lCTSwgUENJX0RFVklDRV9JRF9JQk1fU05JUEUsCiAJCVBDSV9WRU5ET1JfSURfSUJNLCBJUFJfU1VCU19ERVZfSURfMjc4MCwKIAkJMCwgMCwgKGtlcm5lbF91bG9uZ190KSZpcHJfY2hpcF9jZmdbMV0gfSwKIAl7IFBDSV9WRU5ET1JfSURfQURBUFRFQzIsIFBDSV9ERVZJQ0VfSURfQURBUFRFQzJfU0NBTVAsCiAJCVBDSV9WRU5ET1JfSURfSUJNLCBJUFJfU1VCU19ERVZfSURfNTcxRSwKIAkJMCwgMCwgKGtlcm5lbF91bG9uZ190KSZpcHJfY2hpcF9jZmdbMV0gfSwKKwl7IFBDSV9WRU5ET1JfSURfQURBUFRFQzIsIFBDSV9ERVZJQ0VfSURfQURBUFRFQzJfU0NBTVAsCisJCVBDSV9WRU5ET1JfSURfSUJNLCBJUFJfU1VCU19ERVZfSURfNTcxRiwKKwkJMCwgMCwgKGtlcm5lbF91bG9uZ190KSZpcHJfY2hpcF9jZmdbMV0gfSwKIAl7IH0KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgaXByX3BjaV90YWJsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaXByLmggYi9kcml2ZXJzL3Njc2kvaXByLmgKaW5kZXggOGNmOTY3MS4uNmJlYzY3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2lwci5oCisrKyBiL2RyaXZlcnMvc2NzaS9pcHIuaApAQCAtMzYsMjMgKzM2LDggQEAKIC8qCiAgKiBMaXRlcmFscwogICovCi0jZGVmaW5lIElQUl9EUklWRVJfVkVSU0lPTiAiMi4wLjE0IgotI2RlZmluZSBJUFJfRFJJVkVSX0RBVEUgIihNYXkgMiwgMjAwNSkiCi0KLS8qCi0gKiBJUFJfREJHX1RSQUNFOiBTZXR0aW5nIHRoaXMgdG8gMSB3aWxsIHR1cm4gb24gc29tZSBnZW5lcmFsIGZ1bmN0aW9uIHRyYWNpbmcKLSAqCQkJcmVzdWx0aW5nIGluIGEgYnVuY2ggb2YgZXh0cmEgZGVidWdnaW5nIHByaW50a3MgdG8gdGhlIGNvbnNvbGUKLSAqCi0gKiBJUFJfREVCVUc6CVNldHRpbmcgdGhpcyB0byAxIHdpbGwgdHVybiBvbiBzb21lIGVycm9yIHBhdGggdHJhY2luZy4KLSAqCQkJRW5hYmxlcyB0aGUgaXByX3RyYWNlIG1hY3JvLgotICovCi0jaWZkZWYgSVBSX0RFQlVHX0FMTAotI2RlZmluZSBJUFJfREVCVUcJCQkJMQotI2RlZmluZSBJUFJfREJHX1RSQUNFCQkJMQotI2Vsc2UKLSNkZWZpbmUgSVBSX0RFQlVHCQkJCTAKLSNkZWZpbmUgSVBSX0RCR19UUkFDRQkJCTAKLSNlbmRpZgorI2RlZmluZSBJUFJfRFJJVkVSX1ZFUlNJT04gIjIuMS4wIgorI2RlZmluZSBJUFJfRFJJVkVSX0RBVEUgIihPY3RvYmVyIDMxLCAyMDA1KSIKIAogLyoKICAqIElQUl9NQVhfQ01EX1BFUl9MVU46IFRoaXMgZGVmaW5lcyB0aGUgbWF4aW11bSBudW1iZXIgb2Ygb3V0c3RhbmRpbmcKQEAgLTc2LDYgKzYxLDEwIEBACiAjZGVmaW5lIElQUl9TVUJTX0RFVl9JRF81NzFBCTB4MDJDMAogI2RlZmluZSBJUFJfU1VCU19ERVZfSURfNTcxQgkweDAyQkUKICNkZWZpbmUgSVBSX1NVQlNfREVWX0lEXzU3MUUgIDB4MDJCRgorI2RlZmluZSBJUFJfU1VCU19ERVZfSURfNTcxRgkweDAyRDUKKyNkZWZpbmUgSVBSX1NVQlNfREVWX0lEXzU3MkEJMHgwMkMxCisjZGVmaW5lIElQUl9TVUJTX0RFVl9JRF81NzJCCTB4MDJDMgorI2RlZmluZSBJUFJfU1VCU19ERVZfSURfNTc1QgkweDAzMEQKIAogI2RlZmluZSBJUFJfTkFNRQkJCQkiaXByIgogCkBAIC05NSw3ICs4NCwxMCBAQAogI2RlZmluZSBJUFJfSU9BU0NfSFdfREVWX0JVU19TVEFUVVMJCQkweDA0NDQ4NTAwCiAjZGVmaW5lCUlQUl9JT0FTQ19JT0FTQ19NQVNLCQkJMHhGRkZGRkYwMAogI2RlZmluZQlJUFJfSU9BU0NfU0NTSV9TVEFUVVNfTUFTSwkJMHgwMDAwMDBGRgorI2RlZmluZSBJUFJfSU9BU0NfSVJfSU5WQUxJRF9SRVFfVFlQRV9PUl9QS1QJMHgwNTI0MDAwMAogI2RlZmluZSBJUFJfSU9BU0NfSVJfUkVTT1VSQ0VfSEFORExFCQkweDA1MjUwMDAwCisjZGVmaW5lIElQUl9JT0FTQ19JUl9OT19DTURTX1RPXzJORF9JT0EJCTB4MDUyNTgxMDAKKyNkZWZpbmUgSVBSX0lPQVNBX0lSX0RVQUxfSU9BX0RJU0FCTEVECQkweDA1MkM4MDAwCiAjZGVmaW5lIElQUl9JT0FTQ19CVVNfV0FTX1JFU0VUCQkJMHgwNjI5MDAwMAogI2RlZmluZSBJUFJfSU9BU0NfQlVTX1dBU19SRVNFVF9CWV9PVEhFUgkJMHgwNjI5ODAwMAogI2RlZmluZSBJUFJfSU9BU0NfQUJPUlRFRF9DTURfVEVSTV9CWV9IT1NUCTB4MEI1QTAwMDAKQEAgLTEwNywxNCArOTksMTQgQEAKICNkZWZpbmUgSVBSX05VTV9MT0dfSENBTVMJCQkJMgogI2RlZmluZSBJUFJfTlVNX0NGR19DSEdfSENBTVMJCQkJMgogI2RlZmluZSBJUFJfTlVNX0hDQU1TCShJUFJfTlVNX0xPR19IQ0FNUyArIElQUl9OVU1fQ0ZHX0NIR19IQ0FNUykKLSNkZWZpbmUgSVBSX01BWF9OVU1fVEFSR0VUU19QRVJfQlVTCQkJMHgxMAorI2RlZmluZSBJUFJfTUFYX05VTV9UQVJHRVRTX1BFUl9CVVMJCQkyNTYKICNkZWZpbmUgSVBSX01BWF9OVU1fTFVOU19QRVJfVEFSR0VUCQkJMjU2CiAjZGVmaW5lIElQUl9NQVhfTlVNX1ZTRVRfTFVOU19QRVJfVEFSR0VUCTgKICNkZWZpbmUgSVBSX1ZTRVRfQlVTCQkJCQkweGZmCiAjZGVmaW5lIElQUl9JT0FfQlVTCQkJCQkJMHhmZgogI2RlZmluZSBJUFJfSU9BX1RBUkdFVAkJCQkJMHhmZgogI2RlZmluZSBJUFJfSU9BX0xVTgkJCQkJCTB4ZmYKLSNkZWZpbmUgSVBSX01BWF9OVU1fQlVTRVMJCQkJNAorI2RlZmluZSBJUFJfTUFYX05VTV9CVVNFUwkJCQk4CiAjZGVmaW5lIElQUl9NQVhfQlVTX1RPX1NDQU4JCQkJSVBSX01BWF9OVU1fQlVTRVMKIAogI2RlZmluZSBJUFJfTlVNX1JFU0VUX1JFTE9BRF9SRVRSSUVTCQkzCkBAIC0yMDUsNiArMTk3LDcgQEAKICNkZWZpbmUgSVBSX1NEVF9GTVQyX0VYUF9ST01fU0VMCQkJMHg4CiAjZGVmaW5lIElQUl9GTVQyX1NEVF9SRUFEWV9UT19VU0UJCQkweEM0RDRFM0YyCiAjZGVmaW5lIElQUl9ET09SQkVMTAkJCQkJMHg4MjgwMDAwMAorI2RlZmluZSBJUFJfUlVOVElNRV9SRVNFVAkJCQkweDQwMDAwMDAwCiAKICNkZWZpbmUgSVBSX1BDSUlfSU9BX1RSQU5TX1RPX09QRVIJCQkoMHg4MDAwMDAwMCA+PiAwKQogI2RlZmluZSBJUFJfUENJSV9JT0FSQ0JfWEZFUl9GQUlMRUQJCQkoMHg4MDAwMDAwMCA+PiAzKQpAQCAtMjYxLDYgKzI1NCwxNiBAQAogCXU4IHByb2R1Y3RfaWRbSVBSX1BST0RfSURfTEVOXTsKIH1fX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAorc3RydWN0IGlwcl92cGQgeworCXN0cnVjdCBpcHJfc3RkX2lucV92cGlkcyB2cGlkczsKKwl1OCBzbltJUFJfU0VSSUFMX05VTV9MRU5dOworfV9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgaXByX2V4dF92cGQgeworCXN0cnVjdCBpcHJfdnBkIHZwZDsKKwlfX2JlMzIgd3dpZFsyXTsKK31fX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwogc3RydWN0IGlwcl9zdGRfaW5xX2RhdGEgewogCXU4IHBlcmlfcXVhbF9kZXZfdHlwZTsKICNkZWZpbmUgSVBSX1NURF9JTlFfUEVSSV9RVUFMKHBlcmkpICgocGVyaSkgPj4gNSkKQEAgLTMwNCw2ICszMDcsMTAgQEAKICNkZWZpbmUgSVBSX1NVQlRZUEVfR0VORVJJQ19TQ1NJCTEKICNkZWZpbmUgSVBSX1NVQlRZUEVfVk9MVU1FX1NFVAkJMgogCisjZGVmaW5lIElQUl9RVUVVRUlOR19NT0RFTChyZXMpCSgoKChyZXMpLT5jZmd0ZS5mbGFncykgJiAweDcwKSA+PiA0KQorI2RlZmluZSBJUFJfUVVFVUVfRlJPWkVOX01PREVMCTAKKyNkZWZpbmUgSVBSX1FVRVVFX05BQ0FfTU9ERUwJCTEKKwogCXN0cnVjdCBpcHJfcmVzX2FkZHIgcmVzX2FkZHI7CiAJX19iZTMyIHJlc19oYW5kbGU7CiAJX19iZTMyIHJlc2VydmVkNFsyXTsKQEAgLTQxMCwyMyArNDE3LDI2IEBACiBzdHJ1Y3QgaXByX2lvYXNhX3ZzZXQgewogCV9fYmUzMiBmYWlsaW5nX2xiYV9oaTsKIAlfX2JlMzIgZmFpbGluZ19sYmFfbG87Ci0JX19iZTMyIGlvYV9kYXRhWzIyXTsKKwlfX2JlMzIgcmVzZXJ2ZWQ7CiB9X19hdHRyaWJ1dGVfXygocGFja2VkLCBhbGlnbmVkICg0KSkpOwogCiBzdHJ1Y3QgaXByX2lvYXNhX2FmX2Rhc2QgewogCV9fYmUzMiBmYWlsaW5nX2xiYTsKKwlfX2JlMzIgcmVzZXJ2ZWRbMl07CiB9X19hdHRyaWJ1dGVfXygocGFja2VkLCBhbGlnbmVkICg0KSkpOwogCiBzdHJ1Y3QgaXByX2lvYXNhX2dwZGQgewogCXU4IGVuZF9zdGF0ZTsKIAl1OCBidXNfcGhhc2U7CiAJX19iZTE2IHJlc2VydmVkOwotCV9fYmUzMiBpb2FfZGF0YVsyM107CisJX19iZTMyIGlvYV9kYXRhWzJdOwogfV9fYXR0cmlidXRlX18oKHBhY2tlZCwgYWxpZ25lZCAoNCkpKTsKIAotc3RydWN0IGlwcl9pb2FzYV9yYXcgewotCV9fYmUzMiBpb2FfZGF0YVsyNF07Ci19X19hdHRyaWJ1dGVfXygocGFja2VkLCBhbGlnbmVkICg0KSkpOworc3RydWN0IGlwcl9hdXRvX3NlbnNlIHsKKwlfX2JlMTYgYXV0b19zZW5zZV9sZW47CisJX19iZTE2IGlvYV9kYXRhX2xlbjsKKwlfX2JlMzIgZGF0YVtTQ1NJX1NFTlNFX0JVRkZFUlNJWkUvc2l6ZW9mKF9fYmUzMildOworfTsKIAogc3RydWN0IGlwcl9pb2FzYSB7CiAJX19iZTMyIGlvYXNjOwpAQCAtNDUzLDYgKzQ2Myw4IEBACiAJX19iZTMyIGZkX3Jlc19oYW5kbGU7CiAKIAlfX2JlMzIgaW9hc2Nfc3BlY2lmaWM7CS8qIHN0YXR1cyBjb2RlIHNwZWNpZmljIGZpZWxkICovCisjZGVmaW5lIElQUl9BRERJVElPTkFMX1NUQVRVU19GTVQJCTB4ODAwMDAwMDAKKyNkZWZpbmUgSVBSX0FVVE9TRU5TRV9WQUxJRAkJCTB4NDAwMDAwMDAKICNkZWZpbmUgSVBSX0lPQVNDX1NQRUNJRklDX01BU0sJCTB4MDBmZmZmZmYKICNkZWZpbmUgSVBSX0ZJRUxEX1BPSU5URVJfVkFMSUQJCSgweDgwMDAwMDAwID4+IDgpCiAjZGVmaW5lIElQUl9GSUVMRF9QT0lOVEVSX01BU0sJCTB4MDAwMGZmZmYKQEAgLTQ2MSw4ICs0NzMsOSBAQAogCQlzdHJ1Y3QgaXByX2lvYXNhX3ZzZXQgdnNldDsKIAkJc3RydWN0IGlwcl9pb2FzYV9hZl9kYXNkIGRhc2Q7CiAJCXN0cnVjdCBpcHJfaW9hc2FfZ3BkZCBncGRkOwotCQlzdHJ1Y3QgaXByX2lvYXNhX3JhdyByYXc7CiAJfSB1OworCisJc3RydWN0IGlwcl9hdXRvX3NlbnNlIGF1dG9fc2Vuc2U7CiB9X19hdHRyaWJ1dGVfXygocGFja2VkLCBhbGlnbmVkICg0KSkpOwogCiBzdHJ1Y3QgaXByX21vZGVfcGFybV9oZHIgewpAQCAtNTM2LDI4ICs1NDksNDkgQEAKIAl1OCBwYXRjaF9udW1iZXJbNF07CiB9X19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKKyNkZWZpbmUgSVBSX0lOUVVJUllfUEFHRTBfRU5UUklFUyAyMAorc3RydWN0IGlwcl9pbnF1aXJ5X3BhZ2UwIHsKKwl1OCBwZXJpX3F1YWxfZGV2X3R5cGU7CisJdTggcGFnZV9jb2RlOworCXU4IHJlc2VydmVkMTsKKwl1OCBsZW47CisJdTggcGFnZVtJUFJfSU5RVUlSWV9QQUdFMF9FTlRSSUVTXTsKK31fX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwogc3RydWN0IGlwcl9ob3N0cmNiX2RldmljZV9kYXRhX2VudHJ5IHsKLQlzdHJ1Y3QgaXByX3N0ZF9pbnFfdnBpZHMgZGV2X3ZwaWRzOwotCXU4IGRldl9zbltJUFJfU0VSSUFMX05VTV9MRU5dOworCXN0cnVjdCBpcHJfdnBkIHZwZDsKIAlzdHJ1Y3QgaXByX3Jlc19hZGRyIGRldl9yZXNfYWRkcjsKLQlzdHJ1Y3QgaXByX3N0ZF9pbnFfdnBpZHMgbmV3X2Rldl92cGlkczsKLQl1OCBuZXdfZGV2X3NuW0lQUl9TRVJJQUxfTlVNX0xFTl07Ci0Jc3RydWN0IGlwcl9zdGRfaW5xX3ZwaWRzIGlvYV9sYXN0X3dpdGhfZGV2X3ZwaWRzOwotCXU4IGlvYV9sYXN0X3dpdGhfZGV2X3NuW0lQUl9TRVJJQUxfTlVNX0xFTl07Ci0Jc3RydWN0IGlwcl9zdGRfaW5xX3ZwaWRzIGNmY19sYXN0X3dpdGhfZGV2X3ZwaWRzOwotCXU4IGNmY19sYXN0X3dpdGhfZGV2X3NuW0lQUl9TRVJJQUxfTlVNX0xFTl07CisJc3RydWN0IGlwcl92cGQgbmV3X3ZwZDsKKwlzdHJ1Y3QgaXByX3ZwZCBpb2FfbGFzdF93aXRoX2Rldl92cGQ7CisJc3RydWN0IGlwcl92cGQgY2ZjX2xhc3Rfd2l0aF9kZXZfdnBkOwogCV9fYmUzMiBpb2FfZGF0YVs1XTsKIH1fX2F0dHJpYnV0ZV9fKChwYWNrZWQsIGFsaWduZWQgKDQpKSk7CiAKK3N0cnVjdCBpcHJfaG9zdHJjYl9kZXZpY2VfZGF0YV9lbnRyeV9lbmhhbmNlZCB7CisJc3RydWN0IGlwcl9leHRfdnBkIHZwZDsKKwl1OCBjY2luWzRdOworCXN0cnVjdCBpcHJfcmVzX2FkZHIgZGV2X3Jlc19hZGRyOworCXN0cnVjdCBpcHJfZXh0X3ZwZCBuZXdfdnBkOworCXU4IG5ld19jY2luWzRdOworCXN0cnVjdCBpcHJfZXh0X3ZwZCBpb2FfbGFzdF93aXRoX2Rldl92cGQ7CisJc3RydWN0IGlwcl9leHRfdnBkIGNmY19sYXN0X3dpdGhfZGV2X3ZwZDsKK31fX2F0dHJpYnV0ZV9fKChwYWNrZWQsIGFsaWduZWQgKDQpKSk7CisKIHN0cnVjdCBpcHJfaG9zdHJjYl9hcnJheV9kYXRhX2VudHJ5IHsKLQlzdHJ1Y3QgaXByX3N0ZF9pbnFfdnBpZHMgdnBpZHM7Ci0JdTggc2VyaWFsX251bVtJUFJfU0VSSUFMX05VTV9MRU5dOworCXN0cnVjdCBpcHJfdnBkIHZwZDsKKwlzdHJ1Y3QgaXByX3Jlc19hZGRyIGV4cGVjdGVkX2Rldl9yZXNfYWRkcjsKKwlzdHJ1Y3QgaXByX3Jlc19hZGRyIGRldl9yZXNfYWRkcjsKK31fX2F0dHJpYnV0ZV9fKChwYWNrZWQsIGFsaWduZWQgKDQpKSk7CisKK3N0cnVjdCBpcHJfaG9zdHJjYl9hcnJheV9kYXRhX2VudHJ5X2VuaGFuY2VkIHsKKwlzdHJ1Y3QgaXByX2V4dF92cGQgdnBkOworCXU4IGNjaW5bNF07CiAJc3RydWN0IGlwcl9yZXNfYWRkciBleHBlY3RlZF9kZXZfcmVzX2FkZHI7CiAJc3RydWN0IGlwcl9yZXNfYWRkciBkZXZfcmVzX2FkZHI7CiB9X19hdHRyaWJ1dGVfXygocGFja2VkLCBhbGlnbmVkICg0KSkpOwogCiBzdHJ1Y3QgaXByX2hvc3RyY2JfdHlwZV9mZl9lcnJvciB7Ci0JX19iZTMyIGlvYV9kYXRhWzI0Nl07CisJX19iZTMyIGlvYV9kYXRhWzUwMl07CiB9X19hdHRyaWJ1dGVfXygocGFja2VkLCBhbGlnbmVkICg0KSkpOwogCiBzdHJ1Y3QgaXByX2hvc3RyY2JfdHlwZV8wMV9lcnJvciB7CkBAIC01NjgsNDcgKzYwMiw3NSBAQAogfV9fYXR0cmlidXRlX18oKHBhY2tlZCwgYWxpZ25lZCAoNCkpKTsKIAogc3RydWN0IGlwcl9ob3N0cmNiX3R5cGVfMDJfZXJyb3IgewotCXN0cnVjdCBpcHJfc3RkX2lucV92cGlkcyBpb2FfdnBpZHM7Ci0JdTggaW9hX3NuW0lQUl9TRVJJQUxfTlVNX0xFTl07Ci0Jc3RydWN0IGlwcl9zdGRfaW5xX3ZwaWRzIGNmY192cGlkczsKLQl1OCBjZmNfc25bSVBSX1NFUklBTF9OVU1fTEVOXTsKLQlzdHJ1Y3QgaXByX3N0ZF9pbnFfdnBpZHMgaW9hX2xhc3RfYXR0YWNoZWRfdG9fY2ZjX3ZwaWRzOwotCXU4IGlvYV9sYXN0X2F0dGFjaGVkX3RvX2NmY19zbltJUFJfU0VSSUFMX05VTV9MRU5dOwotCXN0cnVjdCBpcHJfc3RkX2lucV92cGlkcyBjZmNfbGFzdF9hdHRhY2hlZF90b19pb2FfdnBpZHM7Ci0JdTggY2ZjX2xhc3RfYXR0YWNoZWRfdG9faW9hX3NuW0lQUl9TRVJJQUxfTlVNX0xFTl07CisJc3RydWN0IGlwcl92cGQgaW9hX3ZwZDsKKwlzdHJ1Y3QgaXByX3ZwZCBjZmNfdnBkOworCXN0cnVjdCBpcHJfdnBkIGlvYV9sYXN0X2F0dGFjaGVkX3RvX2NmY192cGQ7CisJc3RydWN0IGlwcl92cGQgY2ZjX2xhc3RfYXR0YWNoZWRfdG9faW9hX3ZwZDsKIAlfX2JlMzIgaW9hX2RhdGFbM107Ci0JdTggcmVzZXJ2ZWRbODQ0XTsKK31fX2F0dHJpYnV0ZV9fKChwYWNrZWQsIGFsaWduZWQgKDQpKSk7CisKK3N0cnVjdCBpcHJfaG9zdHJjYl90eXBlXzEyX2Vycm9yIHsKKwlzdHJ1Y3QgaXByX2V4dF92cGQgaW9hX3ZwZDsKKwlzdHJ1Y3QgaXByX2V4dF92cGQgY2ZjX3ZwZDsKKwlzdHJ1Y3QgaXByX2V4dF92cGQgaW9hX2xhc3RfYXR0YWNoZWRfdG9fY2ZjX3ZwZDsKKwlzdHJ1Y3QgaXByX2V4dF92cGQgY2ZjX2xhc3RfYXR0YWNoZWRfdG9faW9hX3ZwZDsKKwlfX2JlMzIgaW9hX2RhdGFbM107CiB9X19hdHRyaWJ1dGVfXygocGFja2VkLCBhbGlnbmVkICg0KSkpOwogCiBzdHJ1Y3QgaXByX2hvc3RyY2JfdHlwZV8wM19lcnJvciB7Ci0Jc3RydWN0IGlwcl9zdGRfaW5xX3ZwaWRzIGlvYV92cGlkczsKLQl1OCBpb2Ffc25bSVBSX1NFUklBTF9OVU1fTEVOXTsKLQlzdHJ1Y3QgaXByX3N0ZF9pbnFfdnBpZHMgY2ZjX3ZwaWRzOwotCXU4IGNmY19zbltJUFJfU0VSSUFMX05VTV9MRU5dOworCXN0cnVjdCBpcHJfdnBkIGlvYV92cGQ7CisJc3RydWN0IGlwcl92cGQgY2ZjX3ZwZDsKIAlfX2JlMzIgZXJyb3JzX2RldGVjdGVkOwogCV9fYmUzMiBlcnJvcnNfbG9nZ2VkOwogCXU4IGlvYV9kYXRhWzEyXTsKLQlzdHJ1Y3QgaXByX2hvc3RyY2JfZGV2aWNlX2RhdGFfZW50cnkgZGV2X2VudHJ5WzNdOwotCXU4IHJlc2VydmVkWzQ0NF07CisJc3RydWN0IGlwcl9ob3N0cmNiX2RldmljZV9kYXRhX2VudHJ5IGRldlszXTsKK31fX2F0dHJpYnV0ZV9fKChwYWNrZWQsIGFsaWduZWQgKDQpKSk7CisKK3N0cnVjdCBpcHJfaG9zdHJjYl90eXBlXzEzX2Vycm9yIHsKKwlzdHJ1Y3QgaXByX2V4dF92cGQgaW9hX3ZwZDsKKwlzdHJ1Y3QgaXByX2V4dF92cGQgY2ZjX3ZwZDsKKwlfX2JlMzIgZXJyb3JzX2RldGVjdGVkOworCV9fYmUzMiBlcnJvcnNfbG9nZ2VkOworCXN0cnVjdCBpcHJfaG9zdHJjYl9kZXZpY2VfZGF0YV9lbnRyeV9lbmhhbmNlZCBkZXZbM107CiB9X19hdHRyaWJ1dGVfXygocGFja2VkLCBhbGlnbmVkICg0KSkpOwogCiBzdHJ1Y3QgaXByX2hvc3RyY2JfdHlwZV8wNF9lcnJvciB7Ci0Jc3RydWN0IGlwcl9zdGRfaW5xX3ZwaWRzIGlvYV92cGlkczsKLQl1OCBpb2Ffc25bSVBSX1NFUklBTF9OVU1fTEVOXTsKLQlzdHJ1Y3QgaXByX3N0ZF9pbnFfdnBpZHMgY2ZjX3ZwaWRzOwotCXU4IGNmY19zbltJUFJfU0VSSUFMX05VTV9MRU5dOworCXN0cnVjdCBpcHJfdnBkIGlvYV92cGQ7CisJc3RydWN0IGlwcl92cGQgY2ZjX3ZwZDsKIAl1OCBpb2FfZGF0YVsxMl07CiAJc3RydWN0IGlwcl9ob3N0cmNiX2FycmF5X2RhdGFfZW50cnkgYXJyYXlfbWVtYmVyWzEwXTsKIAlfX2JlMzIgZXhwb3NlZF9tb2RlX2FkbjsKIAlfX2JlMzIgYXJyYXlfaWQ7Ci0Jc3RydWN0IGlwcl9zdGRfaW5xX3ZwaWRzIGluY29tcF9kZXZfdnBpZHM7Ci0JdTggaW5jb21wX2Rldl9zbltJUFJfU0VSSUFMX05VTV9MRU5dOworCXN0cnVjdCBpcHJfdnBkIGluY29tcF9kZXZfdnBkOwogCV9fYmUzMiBpb2FfZGF0YTI7CiAJc3RydWN0IGlwcl9ob3N0cmNiX2FycmF5X2RhdGFfZW50cnkgYXJyYXlfbWVtYmVyMls4XTsKIAlzdHJ1Y3QgaXByX3Jlc19hZGRyIGxhc3RfZnVuY192c2V0X3Jlc19hZGRyOwogCXU4IHZzZXRfc2VyaWFsX251bVtJUFJfU0VSSUFMX05VTV9MRU5dOwogCXU4IHByb3RlY3Rpb25fbGV2ZWxbOF07Ci0JdTggcmVzZXJ2ZWRbMTI0XTsKK31fX2F0dHJpYnV0ZV9fKChwYWNrZWQsIGFsaWduZWQgKDQpKSk7CisKK3N0cnVjdCBpcHJfaG9zdHJjYl90eXBlXzE0X2Vycm9yIHsKKwlzdHJ1Y3QgaXByX2V4dF92cGQgaW9hX3ZwZDsKKwlzdHJ1Y3QgaXByX2V4dF92cGQgY2ZjX3ZwZDsKKwlfX2JlMzIgZXhwb3NlZF9tb2RlX2FkbjsKKwlfX2JlMzIgYXJyYXlfaWQ7CisJc3RydWN0IGlwcl9yZXNfYWRkciBsYXN0X2Z1bmNfdnNldF9yZXNfYWRkcjsKKwl1OCB2c2V0X3NlcmlhbF9udW1bSVBSX1NFUklBTF9OVU1fTEVOXTsKKwl1OCBwcm90ZWN0aW9uX2xldmVsWzhdOworCV9fYmUzMiBudW1fZW50cmllczsKKwlzdHJ1Y3QgaXByX2hvc3RyY2JfYXJyYXlfZGF0YV9lbnRyeV9lbmhhbmNlZCBhcnJheV9tZW1iZXJbMThdOworfV9fYXR0cmlidXRlX18oKHBhY2tlZCwgYWxpZ25lZCAoNCkpKTsKKworc3RydWN0IGlwcl9ob3N0cmNiX3R5cGVfMDdfZXJyb3IgeworCXU4IGZhaWx1cmVfcmVhc29uWzY0XTsKKwlzdHJ1Y3QgaXByX3ZwZCB2cGQ7CisJdTMyIGRhdGFbMjIyXTsKK31fX2F0dHJpYnV0ZV9fKChwYWNrZWQsIGFsaWduZWQgKDQpKSk7CisKK3N0cnVjdCBpcHJfaG9zdHJjYl90eXBlXzE3X2Vycm9yIHsKKwl1OCBmYWlsdXJlX3JlYXNvbls2NF07CisJc3RydWN0IGlwcl9leHRfdnBkIHZwZDsKKwl1MzIgZGF0YVs0NzZdOwogfV9fYXR0cmlidXRlX18oKHBhY2tlZCwgYWxpZ25lZCAoNCkpKTsKIAogc3RydWN0IGlwcl9ob3N0cmNiX2Vycm9yIHsKQEAgLTYyMiw2ICs2ODQsMTEgQEAKIAkJc3RydWN0IGlwcl9ob3N0cmNiX3R5cGVfMDJfZXJyb3IgdHlwZV8wMl9lcnJvcjsKIAkJc3RydWN0IGlwcl9ob3N0cmNiX3R5cGVfMDNfZXJyb3IgdHlwZV8wM19lcnJvcjsKIAkJc3RydWN0IGlwcl9ob3N0cmNiX3R5cGVfMDRfZXJyb3IgdHlwZV8wNF9lcnJvcjsKKwkJc3RydWN0IGlwcl9ob3N0cmNiX3R5cGVfMDdfZXJyb3IgdHlwZV8wN19lcnJvcjsKKwkJc3RydWN0IGlwcl9ob3N0cmNiX3R5cGVfMTJfZXJyb3IgdHlwZV8xMl9lcnJvcjsKKwkJc3RydWN0IGlwcl9ob3N0cmNiX3R5cGVfMTNfZXJyb3IgdHlwZV8xM19lcnJvcjsKKwkJc3RydWN0IGlwcl9ob3N0cmNiX3R5cGVfMTRfZXJyb3IgdHlwZV8xNF9lcnJvcjsKKwkJc3RydWN0IGlwcl9ob3N0cmNiX3R5cGVfMTdfZXJyb3IgdHlwZV8xN19lcnJvcjsKIAl9IHU7CiB9X19hdHRyaWJ1dGVfXygocGFja2VkLCBhbGlnbmVkICg0KSkpOwogCkBAIC02NTUsNiArNzIyLDEyIEBACiAjZGVmaW5lIElQUl9IT1NUX1JDQl9PVkVSTEFZX0lEXzMJCQkJMHgwMwogI2RlZmluZSBJUFJfSE9TVF9SQ0JfT1ZFUkxBWV9JRF80CQkJCTB4MDQKICNkZWZpbmUgSVBSX0hPU1RfUkNCX09WRVJMQVlfSURfNgkJCQkweDA2CisjZGVmaW5lIElQUl9IT1NUX1JDQl9PVkVSTEFZX0lEXzcJCQkJMHgwNworI2RlZmluZSBJUFJfSE9TVF9SQ0JfT1ZFUkxBWV9JRF8xMgkJCQkweDEyCisjZGVmaW5lIElQUl9IT1NUX1JDQl9PVkVSTEFZX0lEXzEzCQkJCTB4MTMKKyNkZWZpbmUgSVBSX0hPU1RfUkNCX09WRVJMQVlfSURfMTQJCQkJMHgxNAorI2RlZmluZSBJUFJfSE9TVF9SQ0JfT1ZFUkxBWV9JRF8xNgkJCQkweDE2CisjZGVmaW5lIElQUl9IT1NUX1JDQl9PVkVSTEFZX0lEXzE3CQkJCTB4MTcKICNkZWZpbmUgSVBSX0hPU1RfUkNCX09WRVJMQVlfSURfREVGQVVMVAkJCTB4RkYKIAogCXU4IHJlc2VydmVkMVszXTsKQEAgLTc0Myw2ICs4MTYsNyBAQAogCiBzdHJ1Y3QgaXByX21pc2NfY2JzIHsKIAlzdHJ1Y3QgaXByX2lvYV92cGQgaW9hX3ZwZDsKKwlzdHJ1Y3QgaXByX2lucXVpcnlfcGFnZTAgcGFnZTBfZGF0YTsKIAlzdHJ1Y3QgaXByX2lucXVpcnlfcGFnZTMgcGFnZTNfZGF0YTsKIAlzdHJ1Y3QgaXByX21vZGVfcGFnZXMgbW9kZV9wYWdlczsKIAlzdHJ1Y3QgaXByX3N1cHBvcnRlZF9kZXZpY2Ugc3VwcF9kZXY7CkBAIC04MTMsNiArODg3LDcgQEAKIHN0cnVjdCBpcHJfc2dsaXN0IHsKIAl1MzIgb3JkZXI7CiAJdTMyIG51bV9zZzsKKwl1MzIgbnVtX2RtYV9zZzsKIAl1MzIgYnVmZmVyX2xlbjsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2NhdHRlcmxpc3RbMV07CiB9OwpAQCAtODI1LDYgKzkwMCwxMyBAQAogCURVTVBfT0JUQUlORUQKIH07CiAKK2VudW0gaXByX2NhY2hlX3N0YXRlIHsKKwlDQUNIRV9OT05FLAorCUNBQ0hFX0RJU0FCTEVELAorCUNBQ0hFX0VOQUJMRUQsCisJQ0FDSEVfSU5WQUxJRAorfTsKKwogLyogUGVyLWNvbnRyb2xsZXIgZGF0YSAqLwogc3RydWN0IGlwcl9pb2FfY2ZnIHsKIAljaGFyIGV5ZV9jYXRjaGVyWzhdOwpAQCAtODQxLDYgKzkyMyw3IEBACiAJdTggYWxsb3dfY21kczoxOwogCXU4IGFsbG93X21sX2FkZF9kZWw6MTsKIAorCWVudW0gaXByX2NhY2hlX3N0YXRlIGNhY2hlX3N0YXRlOwogCXUxNiB0eXBlOyAvKiBDQ0lOIG9mIHRoZSBjYXJkICovCiAKIAl1OCBsb2dfbGV2ZWw7CkBAIC05MTEsNiArOTk0LDcgQEAKIAl1MTYgcmVzZXRfcmV0cmllczsKIAogCXUzMiBlcnJvcnNfbG9nZ2VkOworCXUzMiBkb29yYmVsbDsKIAogCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3Q7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXY7CkBAIC05NDgsNiArMTAzMiw3IEBACiAJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CiAJdm9pZCAoKmRvbmUpIChzdHJ1Y3QgaXByX2NtbmQgKik7CiAJaW50ICgqam9iX3N0ZXApIChzdHJ1Y3QgaXByX2NtbmQgKik7CisJaW50ICgqam9iX3N0ZXBfZmFpbGVkKSAoc3RydWN0IGlwcl9jbW5kICopOwogCXUxNiBjbWRfaW5kZXg7CiAJdTggc2Vuc2VfYnVmZmVyW1NDU0lfU0VOU0VfQlVGRkVSU0laRV07CiAJZG1hX2FkZHJfdCBzZW5zZV9idWZmZXJfZG1hOwpAQCAtMTA4MywxMSArMTE2OCw3IEBACiAvKgogICogTWFjcm9zCiAgKi8KLSNpZiBJUFJfREVCVUcKLSNkZWZpbmUgSVBSX0RCR19DTUQoQ01EKSBkbyB7IENNRDsgfSB3aGlsZSAoMCkKLSNlbHNlCi0jZGVmaW5lIElQUl9EQkdfQ01EKENNRCkKLSNlbmRpZgorI2RlZmluZSBJUFJfREJHX0NNRChDTUQpIGlmIChpcHJfZGVidWcpIHsgQ01EOyB9CiAKICNpZmRlZiBDT05GSUdfU0NTSV9JUFJfVFJBQ0UKICNkZWZpbmUgaXByX2NyZWF0ZV90cmFjZV9maWxlKGtvYmosIGF0dHIpIHN5c2ZzX2NyZWF0ZV9iaW5fZmlsZShrb2JqLCBhdHRyKQpAQCAtMTEzNSwxNiArMTIxNiwyMiBAQAogI2RlZmluZSBpcHJfcmVzX2RiZyhpb2FfY2ZnLCByZXMsIGZtdCwgLi4uKSBcCiAJSVBSX0RCR19DTUQoaXByX3Jlc19wcmludGsoS0VSTl9JTkZPLCBpb2FfY2ZnLCByZXMsIGZtdCwgIyNfX1ZBX0FSR1NfXykpCiAKKyNkZWZpbmUgaXByX3BoeXNfcmVzX2Vycihpb2FfY2ZnLCByZXMsIGZtdCwgLi4uKQkJCVwKK3sJCQkJCQkJCQlcCisJaWYgKChyZXMpLmJ1cyA+PSBJUFJfTUFYX05VTV9CVVNFUykgewkJCQlcCisJCWlwcl9lcnIoZm10IjogdW5rbm93blxuIiwgIyNfX1ZBX0FSR1NfXyk7CQlcCisJfSBlbHNlIHsJCQkJCQkJXAorCQlpcHJfZXJyKGZtdCI6ICVkOiVkOiVkOiVkXG4iLAkJCQlcCisJCQkjI19fVkFfQVJHU19fLCAoaW9hX2NmZyktPmhvc3QtPmhvc3Rfbm8sCVwKKwkJCShyZXMpLmJ1cywgKHJlcykudGFyZ2V0LCAocmVzKS5sdW4pOwkJXAorCX0JCQkJCQkJCVwKK30KKwogI2RlZmluZSBpcHJfdHJhY2UgaXByX2RiZygiJXM6ICVzOiBMaW5lOiAlZFxuIixcCiAJX19GSUxFX18sIF9fRlVOQ1RJT05fXywgX19MSU5FX18pCiAKLSNpZiBJUFJfREJHX1RSQUNFCi0jZGVmaW5lIEVOVEVSIHByaW50ayhLRVJOX0lORk8gSVBSX05BTUUiOiBFbnRlcmluZyAlc1xuIiwgX19GVU5DVElPTl9fKQotI2RlZmluZSBMRUFWRSBwcmludGsoS0VSTl9JTkZPIElQUl9OQU1FIjogTGVhdmluZyAlc1xuIiwgX19GVU5DVElPTl9fKQotI2Vsc2UKLSNkZWZpbmUgRU5URVIKLSNkZWZpbmUgTEVBVkUKLSNlbmRpZgorI2RlZmluZSBFTlRFUiBJUFJfREJHX0NNRChwcmludGsoS0VSTl9JTkZPIElQUl9OQU1FIjogRW50ZXJpbmcgJXNcbiIsIF9fRlVOQ1RJT05fXykpCisjZGVmaW5lIExFQVZFIElQUl9EQkdfQ01EKHByaW50ayhLRVJOX0lORk8gSVBSX05BTUUiOiBMZWF2aW5nICVzXG4iLCBfX0ZVTkNUSU9OX18pKQogCiAjZGVmaW5lIGlwcl9lcnJfc2VwYXJhdG9yIFwKIGlwcl9lcnIoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpCkBAIC0xMjE3LDYgKzEzMDQsMjAgQEAKIH0KIAogLyoqCisgKiBpcHJfaXNfbmFjYV9tb2RlbCAtIERldGVybWluZSBpZiBhIHJlc291cmNlIGlzIHVzaW5nIE5BQ0EgcXVldWVpbmcgbW9kZWwKKyAqIEByZXM6CXJlc291cmNlIGVudHJ5IHN0cnVjdAorICoKKyAqIFJldHVybiB2YWx1ZToKKyAqIAkxIGlmIE5BQ0EgcXVldWVpbmcgbW9kZWwgLyAwIGlmIG5vdCBOQUNBIHF1ZXVlaW5nIG1vZGVsCisgKiovCitzdGF0aWMgaW5saW5lIGludCBpcHJfaXNfbmFjYV9tb2RlbChzdHJ1Y3QgaXByX3Jlc291cmNlX2VudHJ5ICpyZXMpCit7CisJaWYgKGlwcl9pc19nc2NzaShyZXMpICYmIElQUl9RVUVVRUlOR19NT0RFTChyZXMpID09IElQUl9RVUVVRV9OQUNBX01PREVMKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworLyoqCiAgKiBpcHJfaXNfZGV2aWNlIC0gRGV0ZXJtaW5lIGlmIHJlc291cmNlIGFkZHJlc3MgaXMgdGhhdCBvZiBhIGRldmljZQogICogQHJlc19hZGRyOglyZXNvdXJjZSBhZGRyZXNzIHN0cnVjdAogICoKQEAgLTEyMjYsNyArMTMyNyw3IEBACiBzdGF0aWMgaW5saW5lIGludCBpcHJfaXNfZGV2aWNlKHN0cnVjdCBpcHJfcmVzX2FkZHIgKnJlc19hZGRyKQogewogCWlmICgocmVzX2FkZHItPmJ1cyA8IElQUl9NQVhfTlVNX0JVU0VTKSAmJgotCSAgICAocmVzX2FkZHItPnRhcmdldCA8IElQUl9NQVhfTlVNX1RBUkdFVFNfUEVSX0JVUykpCisJICAgIChyZXNfYWRkci0+dGFyZ2V0IDwgKElQUl9NQVhfTlVNX1RBUkdFVFNfUEVSX0JVUyAtIDEpKSkKIAkJcmV0dXJuIDE7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pcHMuYyBiL2RyaXZlcnMvc2NzaS9pcHMuYwppbmRleCBjZDliOTVkLi4zODgyZDQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaXBzLmMKKysrIGIvZHJpdmVycy9zY3NpL2lwcy5jCkBAIC0xMzksNiArMTM5LDcgQEAKIC8qICAgICAgICAgIC0gUmVtb3ZlIDMgdW51c2VkICJpbmxpbmUiIGZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qIDcuMTIueHggIC0gVXNlIFNUQVRJQyBmdW5jdGlvbnMgd2hlcmVldmVyIHBvc3NpYmxlICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgIC0gQ2xlYW4gdXAgZGVwcmVjYXRlZCBNT0RVTEVfUEFSTSBjYWxscyAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIDcuMTIuMDUgIC0gUmVtb3ZlIFZlcnNpb24gTWF0Y2hpbmcgcGVyIElCTSByZXF1ZXN0ICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKQEAgLTIxMCw3ICsyMTEsNyBAQAogICogRFJJVkVSX1ZFUgogICovCiAjZGVmaW5lIElQU19WRVJTSU9OX0hJR0ggICAgICAgICI3LjEyIgotI2RlZmluZSBJUFNfVkVSU0lPTl9MT1cgICAgICAgICAiLjAyICIKKyNkZWZpbmUgSVBTX1ZFUlNJT05fTE9XICAgICAgICAgIi4wNSAiCiAKICNpZiAhZGVmaW5lZChfX2kzODZfXykgJiYgIWRlZmluZWQoX19pYTY0X18pICYmICFkZWZpbmVkKF9feDg2XzY0X18pCiAjd2FybmluZyAiVGhpcyBkcml2ZXIgaGFzIG9ubHkgYmVlbiB0ZXN0ZWQgb24gdGhlIHg4Ni9pYTY0L3g4Nl82NCBwbGF0Zm9ybXMiCkBAIC0yNDcsNyArMjQ4LDcgQEAKIC8qCiAgKiBGdW5jdGlvbiBwcm90b3R5cGVzCiAgKi8KLXN0YXRpYyBpbnQgaXBzX2RldGVjdChTY3NpX0hvc3RfVGVtcGxhdGUgKik7CitzdGF0aWMgaW50IGlwc19kZXRlY3Qoc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqKTsKIHN0YXRpYyBpbnQgaXBzX3JlbGVhc2Uoc3RydWN0IFNjc2lfSG9zdCAqKTsKIHN0YXRpYyBpbnQgaXBzX2VoX2Fib3J0KFNjc2lfQ21uZCAqKTsKIHN0YXRpYyBpbnQgaXBzX2VoX3Jlc2V0KFNjc2lfQ21uZCAqKTsKQEAgLTM0Nyw4ICszNDgsNiBAQAogc3RhdGljIGludCBpcHNfaG9zdF9pbmZvKGlwc19oYV90ICosIGNoYXIgKiwgb2ZmX3QsIGludCk7CiBzdGF0aWMgdm9pZCBjb3B5X21lbV9pbmZvKElQU19JTkZPU1RSICosIGNoYXIgKiwgaW50KTsKIHN0YXRpYyBpbnQgY29weV9pbmZvKElQU19JTkZPU1RSICosIGNoYXIgKiwgLi4uKTsKLXN0YXRpYyBpbnQgaXBzX2dldF92ZXJzaW9uX2luZm8oaXBzX2hhX3QgKiBoYSwgZG1hX2FkZHJfdCwgaW50IGludHIpOwotc3RhdGljIHZvaWQgaXBzX3ZlcnNpb25fY2hlY2soaXBzX2hhX3QgKiBoYSwgaW50IGludHIpOwogc3RhdGljIGludCBpcHNfYWJvcnRfaW5pdChpcHNfaGFfdCAqIGhhLCBpbnQgaW5kZXgpOwogc3RhdGljIGludCBpcHNfaW5pdF9waGFzZTIoaW50IGluZGV4KTsKIApAQCAtMzc4LDcgKzM3Nyw3IEBACiBzdGF0aWMgZG1hX2FkZHJfdCBpcHNfZmxhc2hidXNhZGRyOwogc3RhdGljIGxvbmcgaXBzX0ZsYXNoRGF0YUluVXNlOwkJLyogQ0QgQm9vdCAtIEZsYXNoIERhdGEgSW4gVXNlIEZsYWcgKi8KIHN0YXRpYyB1aW50MzJfdCBNYXhMaXRlQ21kcyA9IDMyOwkvKiBNYXggQWN0aXZlIENtZHMgZm9yIGEgTGl0ZSBBZGFwdGVyICovCi1zdGF0aWMgU2NzaV9Ib3N0X1RlbXBsYXRlIGlwc19kcml2ZXJfdGVtcGxhdGUgPSB7CitzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBpcHNfZHJpdmVyX3RlbXBsYXRlID0gewogCS5kZXRlY3QJCQk9IGlwc19kZXRlY3QsCiAJLnJlbGVhc2UJCT0gaXBzX3JlbGVhc2UsCiAJLmluZm8JCQk9IGlwc19pbmZvLApAQCAtNDA2LDggKzQwNSw2IEBACiAjZW5kaWYKIH07CiAKLXN0YXRpYyBJUFNfREVGSU5FX0NPTVBBVF9UQUJMRSggQ29tcGF0YWJsZSApOwkvKiBWZXJzaW9uIENvbXBhdGFiaWxpdHkgVGFibGUgICAgICAqLwotCiAKIC8qIFRoaXMgdGFibGUgZGVzY3JpYmVzIGFsbCBTZXJ2ZVJBSUQgQWRhcHRlcnMgKi8KIHN0YXRpYyBzdHJ1Y3QgIHBjaV9kZXZpY2VfaWQgIGlwc19wY2lfdGFibGVbXSA9IHsKQEAgLTU5MCw3ICs1ODcsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyBpbnQKLWlwc19kZXRlY3QoU2NzaV9Ib3N0X1RlbXBsYXRlICogU0hUKQoraXBzX2RldGVjdChzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICogU0hUKQogewogCWludCBpOwogCkBAIC0xMjY1LDkgKzEyNjIsOSBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyB2b2lkCi1pcHNfc2VsZWN0X3F1ZXVlX2RlcHRoKHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QsIFNjc2lfRGV2aWNlICogc2NzaV9kZXZzKQoraXBzX3NlbGVjdF9xdWV1ZV9kZXB0aChzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0LCBzdHJ1Y3Qgc2NzaV9kZXZpY2UgKiBzY3NpX2RldnMpCiB7Ci0JU2NzaV9EZXZpY2UgKmRldmljZTsKKwlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKmRldmljZTsKIAlpcHNfaGFfdCAqaGE7CiAJaW50IGNvdW50ID0gMDsKIAlpbnQgbWluOwpAQCAtMTMxMCw3ICsxMzA3LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgaW50Ci1pcHNfc2xhdmVfY29uZmlndXJlKFNjc2lfRGV2aWNlICogU0RwdHIpCitpcHNfc2xhdmVfY29uZmlndXJlKHN0cnVjdCBzY3NpX2RldmljZSAqIFNEcHRyKQogewogCWlwc19oYV90ICpoYTsKIAlpbnQgbWluOwpAQCAtNTkzMCw3ICs1OTI3LDcgQEAKIAlzdHJuY3B5KChjaGFyICopIGhhLT5udnJhbS0+Ymlvc19oaWdoLCBoYS0+Ymlvc192ZXJzaW9uLCA0KTsKIAlzdHJuY3B5KChjaGFyICopIGhhLT5udnJhbS0+Ymlvc19sb3csIGhhLT5iaW9zX3ZlcnNpb24gKyA0LCA0KTsKIAotCWlwc192ZXJzaW9uX2NoZWNrKGhhLCBpbnRyKTsJLyogQ2hlY2sgQklPUy9GVy9Ecml2ZXIgVmVyc2lvbnMgKi8KKwloYS0+bnZyYW0tPnZlcnNpb25pbmcgPSAwOwkvKiBJbmRpY2F0ZSB0aGUgRHJpdmVyIERvZXMgTm90IFN1cHBvcnQgVmVyc2lvbmluZyAqLwogCiAJLyogbm93IHVwZGF0ZSB0aGUgcGFnZSAqLwogCWlmICghaXBzX3JlYWR3cml0ZV9wYWdlNShoYSwgVFJVRSwgaW50cikpIHsKQEAgLTY4NDcsMTM1ICs2ODQ0LDYgQEAKIAkJcmV0dXJuICgwKTsKIH0KIAotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogICBSb3V0aW5lIE5hbWU6IGlwc192ZXJzaW9uX2NoZWNrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICBEZXBlbmRlbmNpZXM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgIEFzc3VtZXMgdGhhdCBpcHNfcmVhZF9hZGFwdGVyX3N0YXR1cygpIGlzIGNhbGxlZCBmaXJzdCBmaWxsaW5nIGluICAgICAqLwotLyogICAgIHRoZSBkYXRhIGZvciBTdWJTeXN0ZW0gUGFyYW1ldGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgIENhbGxlZCBmcm9tIGlwc193cml0ZV9kcml2ZXJfc3RhdHVzKCkgc28gaXQgYWxzbyBhc3N1bWVzIE5WUkFNIFBhZ2UgNSAqLwotLyogICAgIERhdGEgaXMgYXZhaWxhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIHZvaWQKLWlwc192ZXJzaW9uX2NoZWNrKGlwc19oYV90ICogaGEsIGludCBpbnRyKQotewotCUlQU19WRVJTSU9OX0RBVEEgKlZlcnNpb25JbmZvOwotCXVpbnQ4X3QgRmlybXdhcmVWZXJzaW9uW0lQU19DT01QQVRfSURfTEVOR1RIICsgMV07Ci0JdWludDhfdCBCaW9zVmVyc2lvbltJUFNfQ09NUEFUX0lEX0xFTkdUSCArIDFdOwotCWludCBNYXRjaEVycm9yOwotCWludCByYzsKLQljaGFyIEJpb3NTdHJpbmdbMTBdOwotCWNoYXIgRmlybXdhcmVTdHJpbmdbMTBdOwotCi0JTUVUSE9EX1RSQUNFKCJpcHNfdmVyc2lvbl9jaGVjayIsIDEpOwotCi0JVmVyc2lvbkluZm8gPSAoIElQU19WRVJTSU9OX0RBVEEgKiApIGhhLT5pb2N0bF9kYXRhOwotCi0JbWVtc2V0KEZpcm13YXJlVmVyc2lvbiwgMCwgSVBTX0NPTVBBVF9JRF9MRU5HVEggKyAxKTsKLQltZW1zZXQoQmlvc1ZlcnNpb24sIDAsIElQU19DT01QQVRfSURfTEVOR1RIICsgMSk7Ci0KLQkvKiBHZXQgdGhlIENvbXBhdGlibGUgQklPUyBWZXJzaW9uIGZyb20gTlZSQU0gUGFnZSA1ICovCi0JbWVtY3B5KEJpb3NWZXJzaW9uLCBoYS0+bnZyYW0tPkJpb3NDb21wYXRpYmlsaXR5SUQsCi0JICAgICAgIElQU19DT01QQVRfSURfTEVOR1RIKTsKLQotCXJjID0gSVBTX0ZBSUxVUkU7Ci0JaWYgKGhhLT5zdWJzeXMtPnBhcmFtWzRdICYgSVBTX0dFVF9WRVJTSU9OX1NVUFBPUlQpIHsJLyogSWYgVmVyc2lvbmluZyBpcyBTdXBwb3J0ZWQgKi8KLQkJLyogR2V0IHRoZSBWZXJzaW9uIEluZm8gd2l0aCBhIEdldCBWZXJzaW9uIENvbW1hbmQgKi8KLQkJbWVtc2V0KCBWZXJzaW9uSW5mbywgMCwgc2l6ZW9mIChJUFNfVkVSU0lPTl9EQVRBKSk7Ci0JCXJjID0gaXBzX2dldF92ZXJzaW9uX2luZm8oaGEsIGhhLT5pb2N0bF9idXNhZGRyLCBpbnRyKTsKLQkJaWYgKHJjID09IElQU19TVUNDRVNTKQotCQkJbWVtY3B5KEZpcm13YXJlVmVyc2lvbiwgVmVyc2lvbkluZm8tPmNvbXBhdGliaWxpdHlJZCwKLQkJCSAgICAgICBJUFNfQ09NUEFUX0lEX0xFTkdUSCk7Ci0JfQotCi0JaWYgKHJjICE9IElQU19TVUNDRVNTKSB7CS8qIElmIERhdGEgTm90IE9idGFpbmFibGUgZnJvbSBhIEdldFZlcnNpb24gQ29tbWFuZCAqLwotCQkvKiBHZXQgdGhlIEZpcm13YXJlIFZlcnNpb24gZnJvbSBFbnF1aXJ5IERhdGEgKi8KLQkJbWVtY3B5KEZpcm13YXJlVmVyc2lvbiwgaGEtPmVucS0+Q29kZUJsa1ZlcnNpb24sCi0JCSAgICAgICBJUFNfQ09NUEFUX0lEX0xFTkdUSCk7Ci0JfQotCi0JLyogcHJpbnRrKEtFUk5fV0FSTklORyAiQWRhcHRlcidzIEJJT1MgVmVyc2lvbiAgPSAlc1xuIiwgQmlvc1ZlcnNpb24pOyAgICAgICAgICAqLwotCS8qIHByaW50ayhLRVJOX1dBUk5JTkcgIkJJT1MgQ29tcGF0aWJsZSBWZXJzaW9uID0gJXNcbiIsIElQU19DT01QQVRfQklPUyk7ICAgICAgKi8KLQkvKiBwcmludGsoS0VSTl9XQVJOSU5HICJBZGFwdGVyJ3MgRmlybXdhcmUgVmVyc2lvbiAgPSAlc1xuIiwgRmlybXdhcmVWZXJzaW9uKTsgICovCi0JLyogcHJpbnRrKEtFUk5fV0FSTklORyAiRmlybXdhcmUgQ29tcGF0aWJsZSBWZXJzaW9uID0gJXMgXG4iLCBDb21wYXRhYmxlWyBoYS0+bnZyYW0tPmFkYXB0ZXJfdHlwZSBdKTsgKi8KLQotCU1hdGNoRXJyb3IgPSAwOwotCi0JaWYgKHN0cm5jbXAKLQkgICAgKEZpcm13YXJlVmVyc2lvbiwgQ29tcGF0YWJsZVtoYS0+bnZyYW0tPmFkYXB0ZXJfdHlwZV0sCi0JICAgICBJUFNfQ09NUEFUX0lEX0xFTkdUSCkgIT0gMCkKLQkJTWF0Y2hFcnJvciA9IDE7Ci0KLQlpZiAoc3RybmNtcChCaW9zVmVyc2lvbiwgSVBTX0NPTVBBVF9CSU9TLCBJUFNfQ09NUEFUX0lEX0xFTkdUSCkgIT0gMCkKLQkJTWF0Y2hFcnJvciA9IDE7Ci0KLQloYS0+bnZyYW0tPnZlcnNpb25pbmcgPSAxOwkvKiBJbmRpY2F0ZSB0aGUgRHJpdmVyIFN1cHBvcnRzIFZlcnNpb25pbmcgKi8KLQotCWlmIChNYXRjaEVycm9yKSB7Ci0JCWhhLT5udnJhbS0+dmVyc2lvbl9taXNtYXRjaCA9IDE7Ci0JCWlmIChpcHNfY2RfYm9vdCA9PSAwKSB7Ci0JCQlzdHJuY3B5KCZCaW9zU3RyaW5nWzBdLCBoYS0+bnZyYW0tPmJpb3NfaGlnaCwgNCk7Ci0JCQlzdHJuY3B5KCZCaW9zU3RyaW5nWzRdLCBoYS0+bnZyYW0tPmJpb3NfbG93LCA0KTsKLQkJCUJpb3NTdHJpbmdbOF0gPSAwOwotCi0JCQlzdHJuY3B5KCZGaXJtd2FyZVN0cmluZ1swXSwgaGEtPmVucS0+Q29kZUJsa1ZlcnNpb24sIDgpOwotCQkJRmlybXdhcmVTdHJpbmdbOF0gPSAwOwotCi0JCQlJUFNfUFJJTlRLKEtFUk5fV0FSTklORywgaGEtPnBjaWRldiwKLQkJCQkgICAiV2FybmluZyAhICEgISBTZXJ2ZVJBSUQgVmVyc2lvbiBNaXNtYXRjaFxuIik7Ci0JCQlJUFNfUFJJTlRLKEtFUk5fV0FSTklORywgaGEtPnBjaWRldiwKLQkJCQkgICAiQmlvcyA9ICVzLCBGaXJtd2FyZSA9ICVzLCBEZXZpY2UgRHJpdmVyID0gJXMlc1xuIiwKLQkJCQkgICBCaW9zU3RyaW5nLCBGaXJtd2FyZVN0cmluZywgSVBTX1ZFUlNJT05fSElHSCwKLQkJCQkgICBJUFNfVkVSU0lPTl9MT1cpOwotCQkJSVBTX1BSSU5USyhLRVJOX1dBUk5JTkcsIGhhLT5wY2lkZXYsCi0JCQkJICAgIlRoZXNlIGxldmVscyBzaG91bGQgbWF0Y2ggdG8gYXZvaWQgcG9zc2libGUgY29tcGF0aWJpbGl0eSBwcm9ibGVtcy5cbiIpOwotCQl9Ci0JfSBlbHNlIHsKLQkJaGEtPm52cmFtLT52ZXJzaW9uX21pc21hdGNoID0gMDsKLQl9Ci0KLQlyZXR1cm47Ci19Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qICAgUm91dGluZSBOYW1lOiBpcHNfZ2V0X3ZlcnNpb25faW5mbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgUm91dGluZSBEZXNjcmlwdGlvbjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICBJc3N1ZSBhbiBpbnRlcm5hbCBHRVRWRVJTSU9OIENvbW1hbmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgUmV0dXJuIFZhbHVlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAwIGlmIFN1Y2Nlc3NmdWwsIGVsc2Ugbm9uLXplcm8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyBpbnQKLWlwc19nZXRfdmVyc2lvbl9pbmZvKGlwc19oYV90ICogaGEsIGRtYV9hZGRyX3QgQnVmZmVyLCBpbnQgaW50cikKLXsKLQlpcHNfc2NiX3QgKnNjYjsKLQlpbnQgcmM7Ci0KLQlNRVRIT0RfVFJBQ0UoImlwc19nZXRfdmVyc2lvbl9pbmZvIiwgMSk7Ci0KLQlzY2IgPSAmaGEtPnNjYnNbaGEtPm1heF9jbWRzIC0gMV07Ci0KLQlpcHNfaW5pdF9zY2IoaGEsIHNjYik7Ci0KLQlzY2ItPnRpbWVvdXQgPSBpcHNfY21kX3RpbWVvdXQ7Ci0Jc2NiLT5jZGJbMF0gPSBJUFNfQ01EX0dFVF9WRVJTSU9OX0lORk87Ci0Jc2NiLT5jbWQudmVyc2lvbl9pbmZvLm9wX2NvZGUgPSBJUFNfQ01EX0dFVF9WRVJTSU9OX0lORk87Ci0Jc2NiLT5jbWQudmVyc2lvbl9pbmZvLmNvbW1hbmRfaWQgPSBJUFNfQ09NTUFORF9JRChoYSwgc2NiKTsKLQlzY2ItPmNtZC52ZXJzaW9uX2luZm8ucmVzZXJ2ZWQgPSAwOwotCXNjYi0+Y21kLnZlcnNpb25faW5mby5jb3VudCA9IHNpemVvZiAoSVBTX1ZFUlNJT05fREFUQSk7Ci0Jc2NiLT5jbWQudmVyc2lvbl9pbmZvLnJlc2VydmVkMiA9IDA7Ci0Jc2NiLT5kYXRhX2xlbiA9IHNpemVvZiAoSVBTX1ZFUlNJT05fREFUQSk7Ci0Jc2NiLT5kYXRhX2J1c2FkZHIgPSBCdWZmZXI7Ci0Jc2NiLT5jbWQudmVyc2lvbl9pbmZvLmJ1ZmZlcl9hZGRyID0gQnVmZmVyOwotCXNjYi0+ZmxhZ3MgPSAwOwotCi0JLyogaXNzdWUgY29tbWFuZCAqLwotCXJjID0gaXBzX3NlbmRfd2FpdChoYSwgc2NiLCBpcHNfY21kX3RpbWVvdXQsIGludHIpOwotCXJldHVybiAocmMpOwotfQotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogUm91dGluZSBOYW1lOiBpcHNfYWJvcnRfaW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaXBzLmggYi9kcml2ZXJzL3Njc2kvaXBzLmgKaW5kZXggNTA1ZTk2Ny4uZjQ2YzM4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2lwcy5oCisrKyBiL2RyaXZlcnMvc2NzaS9pcHMuaApAQCAtNTAsNiArNTAsNyBAQAogI2lmbmRlZiBfSVBTX0hfCiAgICAjZGVmaW5lIF9JUFNfSF8KIAorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICAgICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogICAgI2luY2x1ZGUgPGFzbS9pby5oPgogCkBAIC00NDksMTMgKzQ1MCwxMyBAQAogICAgICovCiAjaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDApCiAgICBzdGF0aWMgaW50IGlwc19wcm9jMjRfaW5mbyhjaGFyICosIGNoYXIgKiosIG9mZl90LCBpbnQsIGludCwgaW50KTsKLSAgIHN0YXRpYyB2b2lkIGlwc19zZWxlY3RfcXVldWVfZGVwdGgoc3RydWN0IFNjc2lfSG9zdCAqLCBTY3NpX0RldmljZSAqKTsKKyAgIHN0YXRpYyB2b2lkIGlwc19zZWxlY3RfcXVldWVfZGVwdGgoc3RydWN0IFNjc2lfSG9zdCAqLCBzdHJ1Y3Qgc2NzaV9kZXZpY2UgKik7CiAgICBzdGF0aWMgaW50IGlwc19iaW9zcGFyYW0oRGlzayAqZGlzaywga2Rldl90IGRldiwgaW50IGdlb21bXSk7CiAjZWxzZQogICAgc3RhdGljIGludCBpcHNfcHJvY19pbmZvKHN0cnVjdCBTY3NpX0hvc3QgKiwgY2hhciAqLCBjaGFyICoqLCBvZmZfdCwgaW50LCBpbnQpOwogICAgc3RhdGljIGludCBpcHNfYmlvc3BhcmFtKHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldiwgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwKIAkJc2VjdG9yX3QgY2FwYWNpdHksIGludCBnZW9tW10pOwotICAgc3RhdGljIGludCBpcHNfc2xhdmVfY29uZmlndXJlKFNjc2lfRGV2aWNlICpTRHB0cik7CisgICBzdGF0aWMgaW50IGlwc19zbGF2ZV9jb25maWd1cmUoc3RydWN0IHNjc2lfZGV2aWNlICpTRHB0cik7CiAjZW5kaWYKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9qYXp6X2VzcC5jIGIvZHJpdmVycy9zY3NpL2phenpfZXNwLmMKaW5kZXggYTY0MmY3My4uMjM3MjhkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2phenpfZXNwLmMKKysrIGIvZHJpdmVycy9zY3NpL2phenpfZXNwLmMKQEAgLTUyLDcgKzUyLDcgQEAKIAkJCQkgKiB2aWEgUElPLgogCQkJCSAqLwogCi1pbnQgamF6el9lc3BfZGV0ZWN0KFNjc2lfSG9zdF9UZW1wbGF0ZSAqdHBudCk7CitpbnQgamF6el9lc3BfZGV0ZWN0KHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKnRwbnQpOwogc3RhdGljIGludCBqYXp6X2VzcF9yZWxlYXNlKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0KQogewogCWlmIChzaG9zdC0+aXJxKQpAQCAtNjUsNyArNjUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgU2NzaV9Ib3N0X1RlbXBsYXRlIGRyaXZlcl90ZW1wbGF0ZSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGRyaXZlcl90ZW1wbGF0ZSA9IHsKIAkucHJvY19uYW1lCQk9ICJqYXp6X2VzcCIsCiAJLnByb2NfaW5mbwkJPSAmZXNwX3Byb2NfaW5mbywKIAkubmFtZQkJCT0gIkVTUCAxMDAvMTAwYS8yMDAiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYmF0YS1jb3JlLmMgYi9kcml2ZXJzL3Njc2kvbGliYXRhLWNvcmUuYwppbmRleCAxYzFhN2NhLi5lNTFkOWE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbGliYXRhLWNvcmUuYworKysgYi9kcml2ZXJzL3Njc2kvbGliYXRhLWNvcmUuYwpAQCAtNTEsOCArNTEsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgotI2luY2x1ZGUgInNjc2kuaCIKICNpbmNsdWRlICJzY3NpX3ByaXYuaCIKKyNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CiAjaW5jbHVkZSA8bGludXgvbGliYXRhLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CkBAIC0xMTQ0LDcgKzExNDQsNyBAQAogCQkgKiBBVEEgc29mdHdhcmUgcmVzZXQgKFNSU1QsIHRoZSBkZWZhdWx0KSBkb2VzIG5vdCBhcHBlYXIKIAkJICogdG8gaGF2ZSB0aGlzIHByb2JsZW0uCiAJCSAqLwotCQlpZiAoKHVzaW5nX2VkZCkgJiYgKHFjLT50Zi5jb21tYW5kID09IEFUQV9DTURfSURfQVRBKSkgeworCQlpZiAoKHVzaW5nX2VkZCkgJiYgKGRldi0+Y2xhc3MgPT0gQVRBX0RFVl9BVEEpKSB7CiAJCQl1OCBlcnIgPSBxYy0+dGYuZmVhdHVyZTsKIAkJCWlmIChlcnIgJiBBVEFfQUJPUlRFRCkgewogCQkJCWRldi0+Y2xhc3MgPSBBVEFfREVWX0FUQVBJOwpAQCAtMjcxMyw3ICsyNzEzLDcgQEAKIC8qKgogICoJYXRhX3BvbGxfcWNfY29tcGxldGUgLSB0dXJuIGlycSBiYWNrIG9uIGFuZCBmaW5pc2ggcWMKICAqCUBxYzogQ29tbWFuZCB0byBjb21wbGV0ZQotICoJQGRydl9zdGF0OiBBVEEgc3RhdHVzIHJlZ2lzdGVyIGNvbnRlbnQKKyAqCUBlcnJfbWFzazogQVRBIHN0YXR1cyByZWdpc3RlciBjb250ZW50CiAgKgogICoJTE9DS0lORzoKICAqCU5vbmUuICAoZ3JhYnMgaG9zdCBsb2NrKQpAQCAtMjc0Nyw3ICsyNzQ3LDYgQEAKIAl1OCBzdGF0dXM7CiAJdW5zaWduZWQgaW50IHBvbGxfc3RhdGUgPSBIU01fU1RfVU5LTk9XTjsKIAl1bnNpZ25lZCBpbnQgcmVnX3N0YXRlID0gSFNNX1NUX1VOS05PV047Ci0JY29uc3QgdW5zaWduZWQgaW50IHRtb3V0X3N0YXRlID0gSFNNX1NUX1RNT1VUOwogCiAJc3dpdGNoIChhcC0+aHNtX3Rhc2tfc3RhdGUpIHsKIAljYXNlIEhTTV9TVDoKQEAgLTI3NjgsNyArMjc2Nyw3IEBACiAJc3RhdHVzID0gYXRhX2Noa19zdGF0dXMoYXApOwogCWlmIChzdGF0dXMgJiBBVEFfQlVTWSkgewogCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBhcC0+cGlvX3Rhc2tfdGltZW91dCkpIHsKLQkJCWFwLT5oc21fdGFza19zdGF0ZSA9IHRtb3V0X3N0YXRlOworCQkJYXAtPmhzbV90YXNrX3N0YXRlID0gSFNNX1NUX1RNT1VUOwogCQkJcmV0dXJuIDA7CiAJCX0KIAkJYXAtPmhzbV90YXNrX3N0YXRlID0gcG9sbF9zdGF0ZTsKQEAgLTM0NzgsNyArMzQ3Nyw3IEBACiAvKioKICAqCWF0YV9xY19jb21wbGV0ZSAtIENvbXBsZXRlIGFuIGFjdGl2ZSBBVEEgY29tbWFuZAogICoJQHFjOiBDb21tYW5kIHRvIGNvbXBsZXRlCi0gKglAZHJ2X3N0YXQ6IEFUQSBTdGF0dXMgcmVnaXN0ZXIgY29udGVudHMKKyAqCUBlcnJfbWFzazogQVRBIFN0YXR1cyByZWdpc3RlciBjb250ZW50cwogICoKICAqCUluZGljYXRlIHRvIHRoZSBtaWQgYW5kIHVwcGVyIGxheWVycyB0aGF0IGFuIEFUQQogICoJY29tbWFuZCBoYXMgY29tcGxldGVkLCB3aXRoIGVpdGhlciBhbiBvayBvciBub3Qtb2sgc3RhdHVzLgpAQCAtNDU2NCw2ICs0NTYzLDcgQEAKIAogCXByb2JlX2VudC0+aXJxID0gcGRldi0+aXJxOwogCXByb2JlX2VudC0+aXJxX2ZsYWdzID0gU0FfU0hJUlE7CisJcHJvYmVfZW50LT5wcml2YXRlX2RhdGEgPSBwb3J0WzBdLT5wcml2YXRlX2RhdGE7CiAKIAlpZiAocG9ydHMgJiBBVEFfUE9SVF9QUklNQVJZKSB7CiAJCXByb2JlX2VudC0+cG9ydFtwXS5jbWRfYWRkciA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTsKQEAgLTQ2MDAsNiArNDYwMCw3IEBACiAJcHJvYmVfZW50LT5sZWdhY3lfbW9kZSA9IDE7CiAJcHJvYmVfZW50LT5uX3BvcnRzID0gMTsKIAlwcm9iZV9lbnQtPmhhcmRfcG9ydF9ubyA9IHBvcnRfbnVtOworCXByb2JlX2VudC0+cHJpdmF0ZV9kYXRhID0gcG9ydC0+cHJpdmF0ZV9kYXRhOwogCiAJc3dpdGNoKHBvcnRfbnVtKQogCXsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9saWJhdGEtc2NzaS5jIGIvZHJpdmVycy9zY3NpL2xpYmF0YS1zY3NpLmMKaW5kZXggZWI2MDRiMC4uMjYxYmUyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYmF0YS1zY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2xpYmF0YS1zY3NpLmMKQEAgLTM3LDkgKzM3LDEwIEBACiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KLSNpbmNsdWRlICJzY3NpLmgiCiAjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfZWguaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfZGV2aWNlLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX3JlcXVlc3QuaD4KICNpbmNsdWRlIDxsaW51eC9saWJhdGEuaD4KICNpbmNsdWRlIDxsaW51eC9oZHJlZy5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CkBAIC0xMzEsNyArMTMyLDcgQEAKIAogLyoqCiAgKglhdGFfY21kX2lvY3RsIC0gSGFuZGxlciBmb3IgSERJT19EUklWRV9DTUQgaW9jdGwKLSAqCUBkZXY6IERldmljZSB0byB3aG9tIHdlIGFyZSBpc3N1aW5nIGNvbW1hbmQKKyAqCUBzY3NpZGV2OiBEZXZpY2UgdG8gd2hpY2ggd2UgYXJlIGlzc3VpbmcgY29tbWFuZAogICoJQGFyZzogVXNlciBwcm92aWRlZCBkYXRhIGZvciBpc3N1aW5nIGNvbW1hbmQKICAqCiAgKglMT0NLSU5HOgpAQCAtMTQ3LDcgKzE0OCw4IEBACiAJdTggc2NzaV9jbWRbTUFYX0NPTU1BTkRfU0laRV07CiAJdTggYXJnc1s0XSwgKmFyZ2J1ZiA9IE5VTEw7CiAJaW50IGFyZ3NpemUgPSAwOwotCXN0cnVjdCBzY3NpX3JlcXVlc3QgKnNyZXE7CisJc3RydWN0IHNjc2lfc2Vuc2VfaGRyIHNzaGRyOworCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRhdGFfZGlyOwogCiAJaWYgKE5VTEwgPT0gKHZvaWQgKilhcmcpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTU1LDEwICsxNTcsNiBAQAogCWlmIChjb3B5X2Zyb21fdXNlcihhcmdzLCBhcmcsIHNpemVvZihhcmdzKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0Jc3JlcSA9IHNjc2lfYWxsb2NhdGVfcmVxdWVzdChzY3NpZGV2LCBHRlBfS0VSTkVMKTsKLQlpZiAoIXNyZXEpCi0JCXJldHVybiAtRUlOVFI7Ci0KIAltZW1zZXQoc2NzaV9jbWQsIDAsIHNpemVvZihzY3NpX2NtZCkpOwogCiAJaWYgKGFyZ3NbM10pIHsKQEAgLTE3MiwxMSArMTcwLDExIEBACiAJCXNjc2lfY21kWzFdICA9ICg0IDw8IDEpOyAvKiBQSU8gRGF0YS1pbiAqLwogCQlzY3NpX2NtZFsyXSAgPSAweDBlOyAgICAgLyogbm8gb2ZmLmxpbmUgb3IgY2MsIHJlYWQgZnJvbSBkZXYsCiAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9jayBjb3VudCBpbiBzZWN0b3IgY291bnQgZmllbGQgKi8KLQkJc3JlcS0+c3JfZGF0YV9kaXJlY3Rpb24gPSBETUFfRlJPTV9ERVZJQ0U7CisJCWRhdGFfZGlyID0gRE1BX0ZST01fREVWSUNFOwogCX0gZWxzZSB7CiAJCXNjc2lfY21kWzFdICA9ICgzIDw8IDEpOyAvKiBOb24tZGF0YSAqLwogCQkvKiBzY3NpX2NtZFsyXSBpcyBhbHJlYWR5IDAgLS0gbm8gb2ZmLmxpbmUsIGNjLCBvciBkYXRhIHhmZXIgKi8KLQkJc3JlcS0+c3JfZGF0YV9kaXJlY3Rpb24gPSBETUFfTk9ORTsKKwkJZGF0YV9kaXIgPSBETUFfTk9ORTsKIAl9CiAKIAlzY3NpX2NtZFswXSA9IEFUQV8xNjsKQEAgLTE5NCw5ICsxOTIsOCBAQAogCiAJLyogR29vZCB2YWx1ZXMgZm9yIHRpbWVvdXQgYW5kIHJldHJpZXM/ICBWYWx1ZXMgYmVsb3cKIAkgICBmcm9tIHNjc2lfaW9jdGxfc2VuZF9jb21tYW5kKCkgZm9yIGRlZmF1bHQgY2FzZS4uLiAqLwotCXNjc2lfd2FpdF9yZXEoc3JlcSwgc2NzaV9jbWQsIGFyZ2J1ZiwgYXJnc2l6ZSwgKDEwKkhaKSwgNSk7Ci0KLQlpZiAoc3JlcS0+c3JfcmVzdWx0KSB7CisJaWYgKHNjc2lfZXhlY3V0ZV9yZXEoc2NzaWRldiwgc2NzaV9jbWQsIGRhdGFfZGlyLCBhcmdidWYsIGFyZ3NpemUsCisJCQkgICAgICZzc2hkciwgKDEwKkhaKSwgNSkpIHsKIAkJcmMgPSAtRUlPOwogCQlnb3RvIGVycm9yOwogCX0KQEAgLTIwNyw4ICsyMDQsNiBAQAogCSAmJiBjb3B5X3RvX3VzZXIoKHZvaWQgKikoYXJnICsgc2l6ZW9mKGFyZ3MpKSwgYXJnYnVmLCBhcmdzaXplKSkKIAkJcmMgPSAtRUZBVUxUOwogZXJyb3I6Ci0Jc2NzaV9yZWxlYXNlX3JlcXVlc3Qoc3JlcSk7Ci0KIAlpZiAoYXJnYnVmKQogCQlrZnJlZShhcmdidWYpOwogCkBAIC0yMTcsNyArMjEyLDcgQEAKIAogLyoqCiAgKglhdGFfdGFza19pb2N0bCAtIEhhbmRsZXIgZm9yIEhESU9fRFJJVkVfVEFTSyBpb2N0bAotICoJQGRldjogRGV2aWNlIHRvIHdob20gd2UgYXJlIGlzc3VpbmcgY29tbWFuZAorICoJQHNjc2lkZXY6IERldmljZSB0byB3aGljaCB3ZSBhcmUgaXNzdWluZyBjb21tYW5kCiAgKglAYXJnOiBVc2VyIHByb3ZpZGVkIGRhdGEgZm9yIGlzc3VpbmcgY29tbWFuZAogICoKICAqCUxPQ0tJTkc6CkBAIC0yMzEsNyArMjI2LDcgQEAKIAlpbnQgcmMgPSAwOwogCXU4IHNjc2lfY21kW01BWF9DT01NQU5EX1NJWkVdOwogCXU4IGFyZ3NbN107Ci0Jc3RydWN0IHNjc2lfcmVxdWVzdCAqc3JlcTsKKwlzdHJ1Y3Qgc2NzaV9zZW5zZV9oZHIgc3NoZHI7CiAKIAlpZiAoTlVMTCA9PSAodm9pZCAqKWFyZykKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0yNTAsMjYgKzI0NSwxMyBAQAogCXNjc2lfY21kWzEyXSA9IGFyZ3NbNV07CiAJc2NzaV9jbWRbMTRdID0gYXJnc1swXTsKIAotCXNyZXEgPSBzY3NpX2FsbG9jYXRlX3JlcXVlc3Qoc2NzaWRldiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFzcmVxKSB7Ci0JCXJjID0gLUVJTlRSOwotCQlnb3RvIGVycm9yOwotCX0KLQotCXNyZXEtPnNyX2RhdGFfZGlyZWN0aW9uID0gRE1BX05PTkU7CiAJLyogR29vZCB2YWx1ZXMgZm9yIHRpbWVvdXQgYW5kIHJldHJpZXM/ICBWYWx1ZXMgYmVsb3cKLQkgICBmcm9tIHNjc2lfaW9jdGxfc2VuZF9jb21tYW5kKCkgZm9yIGRlZmF1bHQgY2FzZS4uLiAqLwotCXNjc2lfd2FpdF9yZXEoc3JlcSwgc2NzaV9jbWQsIE5VTEwsIDAsICgxMCpIWiksIDUpOwotCi0JaWYgKHNyZXEtPnNyX3Jlc3VsdCkgeworCSAgIGZyb20gc2NzaV9pb2N0bF9zZW5kX2NvbW1hbmQoKSBmb3IgZGVmYXVsdCBjYXNlLi4uICovCQorCWlmIChzY3NpX2V4ZWN1dGVfcmVxKHNjc2lkZXYsIHNjc2lfY21kLCBETUFfTk9ORSwgTlVMTCwgMCwgJnNzaGRyLAorCQkJICAgICAoMTAqSFopLCA1KSkKIAkJcmMgPSAtRUlPOwotCQlnb3RvIGVycm9yOwotCX0KIAogCS8qIE5lZWQgY29kZSB0byByZXRyaWV2ZSBkYXRhIGZyb20gY2hlY2sgY29uZGl0aW9uPyAqLwotCi1lcnJvcjoKLQlzY3NpX3JlbGVhc2VfcmVxdWVzdChzcmVxKTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTQxNiw2ICszOTgsNyBAQAogCiAvKioKICAqCWF0YV90b19zZW5zZV9lcnJvciAtIGNvbnZlcnQgQVRBIGVycm9yIHRvIFNDU0kgZXJyb3IKKyAqCUBpZDogQVRBIGRldmljZSBudW1iZXIKICAqCUBkcnZfc3RhdDogdmFsdWUgY29udGFpbmVkIGluIEFUQSBzdGF0dXMgcmVnaXN0ZXIKICAqCUBkcnZfZXJyOiB2YWx1ZSBjb250YWluZWQgaW4gQVRBIGVycm9yIHJlZ2lzdGVyCiAgKglAc2s6IHRoZSBzZW5zZSBrZXkgd2UnbGwgZmlsbCBvdXQKQEAgLTExMjgsNiArMTExMSw4IEBACiAJCSAqIGxlbmd0aCAwIG1lYW5zIHRyYW5zZmVyIDAgYmxvY2sgb2YgZGF0YS4KIAkJICogSG93ZXZlciwgZm9yIEFUQSBSL1cgY29tbWFuZHMsIHNlY3RvciBjb3VudCAwIG1lYW5zCiAJCSAqIDI1NiBvciA2NTUzNiBzZWN0b3JzLCBub3QgMCBzZWN0b3JzIGFzIGluIFNDU0kuCisJCSAqCisJCSAqIFdBUk5JTkc6IG9uZSBvciB0d28gb2xkZXIgQVRBIGRyaXZlcyB0cmVhdCAwIGFzIDAuLi4KIAkJICovCiAJCWdvdG8gbm90aGluZ190b19kbzsKIApAQCAtMjIzMSw3ICsyMjE2LDcgQEAKIC8qKgogICoJYXRhX3Njc2lfcGFzc190aHJ1IC0gY29udmVydCBBVEEgcGFzcy10aHJ1IENEQiB0byB0YXNrZmlsZQogICoJQHFjOiBjb21tYW5kIHN0cnVjdHVyZSB0byBiZSBpbml0aWFsaXplZAotICoJQGNtZDogU0NTSSBjb21tYW5kIHRvIGNvbnZlcnQKKyAqCUBzY3NpY21kOiBTQ1NJIGNvbW1hbmQgdG8gY29udmVydAogICoKICAqCUhhbmRsZXMgZWl0aGVyIDEyIG9yIDE2LWJ5dGUgdmVyc2lvbnMgb2YgdGhlIENEQi4KICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2luaXQuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaW5pdC5jCmluZGV4IGM5MDcyMzguLjA3NDk4MTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaW5pdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaW5pdC5jCkBAIC0xNzA0LDcgKzE3MDQsNiBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbHBmY19kcml2ZXIgPSB7CiAJLm5hbWUJCT0gTFBGQ19EUklWRVJfTkFNRSwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLmlkX3RhYmxlCT0gbHBmY19pZF90YWJsZSwKIAkucHJvYmUJCT0gbHBmY19wY2lfcHJvYmVfb25lLAogCS5yZW1vdmUJCT0gX19kZXZleGl0X3AobHBmY19wY2lfcmVtb3ZlX29uZSksCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbWFjX2VzcC5jIGIvZHJpdmVycy9zY3NpL21hY19lc3AuYwppbmRleCBjOTRjOGRiLi5lMzFmYWRkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21hY19lc3AuYworKysgYi9kcml2ZXJzL3Njc2kvbWFjX2VzcC5jCkBAIC0zMDAsNyArMzAwLDcgQEAKICAqIE1vZGVsIGRlcGVuZGVudCBFU1Agc2V0dXAKICAqLwogCi1pbnQgbWFjX2VzcF9kZXRlY3QoU2NzaV9Ib3N0X1RlbXBsYXRlICogdHBudCkKK2ludCBtYWNfZXNwX2RldGVjdChzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICogdHBudCkKIHsKIAlpbnQgcXVpY2sgPSAwOwogCWludCBjaGlwbnVtLCBjaGlwc3ByZXNlbnQgPSAwOwpAQCAtNzMwLDcgKzczMCw3IEBACiAjZW5kaWYKIH0KIAotc3RhdGljIFNjc2lfSG9zdF9UZW1wbGF0ZSBkcml2ZXJfdGVtcGxhdGUgPSB7CitzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBkcml2ZXJfdGVtcGxhdGUgPSB7CiAJLnByb2NfbmFtZQkJPSAibWFjX2VzcCIsCiAJLm5hbWUJCQk9ICJNYWMgNTNDOXggU0NTSSIsCiAJLmRldGVjdAkJCT0gbWFjX2VzcF9kZXRlY3QsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbWFjX3Njc2kuYyBiL2RyaXZlcnMvc2NzaS9tYWNfc2NzaS5jCmluZGV4IDkyZDJjODMuLjc3N2Y5YmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tYWNfc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9tYWNfc2NzaS5jCkBAIC0yMjIsNyArMjIyLDcgQEAKICNlbmRpZgogCiAvKgotICogRnVuY3Rpb24gOiBpbnQgbWFjc2NzaV9kZXRlY3QoU2NzaV9Ib3N0X1RlbXBsYXRlICogdHBudCkKKyAqIEZ1bmN0aW9uIDogaW50IG1hY3Njc2lfZGV0ZWN0KHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKiB0cG50KQogICoKICAqIFB1cnBvc2UgOiBpbml0aWFsaXplcyBtYWMgTkNSNTM4MCBkcml2ZXIgYmFzZWQgb24gdGhlCiAgKgljb21tYW5kIGxpbmUgLyBjb21waWxlIHRpbWUgcG9ydCBhbmQgaXJxIGRlZmluaXRpb25zLgpAQCAtMjMzLDcgKzIzMyw3IEBACiAgKgogICovCiAgCi1pbnQgbWFjc2NzaV9kZXRlY3QoU2NzaV9Ib3N0X1RlbXBsYXRlICogdHBudCkKK2ludCBtYWNzY3NpX2RldGVjdChzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICogdHBudCkKIHsKICAgICBzdGF0aWMgaW50IGNhbGxlZCA9IDA7CiAgICAgaW50IGZsYWdzID0gMDsKQEAgLTU4MSw3ICs1ODEsNyBAQAogCiAjaW5jbHVkZSAiTkNSNTM4MC5jIgogCi1zdGF0aWMgU2NzaV9Ib3N0X1RlbXBsYXRlIGRyaXZlcl90ZW1wbGF0ZSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGRyaXZlcl90ZW1wbGF0ZSA9IHsKIAkucHJvY19uYW1lCQkJPSAiTWFjNTM4MCIsCiAJLnByb2NfaW5mbwkJCT0gbWFjc2NzaV9wcm9jX2luZm8sCiAJLm5hbWUJCQkJPSAiTWFjaW50b3NoIE5DUjUzODAgU0NTSSIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbWNhXzUzYzl4LmMgYi9kcml2ZXJzL3Njc2kvbWNhXzUzYzl4LmMKaW5kZXggMTk0Yzc1NC4uOTk4YThiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21jYV81M2M5eC5jCisrKyBiL2RyaXZlcnMvc2NzaS9tY2FfNTNjOXguYwpAQCAtMTAzLDcgKzEwMyw3IEBACiBzdGF0aWMgc3RydWN0IEVTUF9yZWdzIGVyZWdzOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogRGV0ZWN0aW9uICovCi1zdGF0aWMgaW50IG1jYV9lc3BfZGV0ZWN0KFNjc2lfSG9zdF9UZW1wbGF0ZSAqdHBudCkKK3N0YXRpYyBpbnQgbWNhX2VzcF9kZXRlY3Qoc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqdHBudCkKIHsKIAlzdHJ1Y3QgTkNSX0VTUCAqZXNwOwogCXN0YXRpYyBpbnQgaW9fcG9ydF9ieV9wb3NbXSA9IE1DQV81M0M5WF9JT19QT1JUUzsKQEAgLTQ0NCw3ICs0NDQsNyBAQAogCW91dGIoaW5iKFBTMl9TWVNfQ1RSKSAmIDB4M2YsIFBTMl9TWVNfQ1RSKTsKIH0KIAotc3RhdGljIFNjc2lfSG9zdF9UZW1wbGF0ZSBkcml2ZXJfdGVtcGxhdGUgPSB7CitzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBkcml2ZXJfdGVtcGxhdGUgPSB7CiAJLnByb2NfbmFtZQkJPSAibWNhXzUzYzl4IiwKIAkubmFtZQkJCT0gIk5DUiA1M2M5eCBTQ1NJIiwKIAkuZGV0ZWN0CQkJPSBtY2FfZXNwX2RldGVjdCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC5jIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkLmMKaW5kZXggNjFhNmZkOC4uZGZlYTM0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkLmMKKysrIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkLmMKQEAgLTM2Miw2ICszNjIsNyBAQAogCWFkYXB0ZXJfdAkqYWRhcHRlcjsKIAlzY2JfdAkqc2NiOwogCWludAlidXN5PTA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWFkYXB0ZXIgPSAoYWRhcHRlcl90ICopc2NtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YTsKIApAQCAtMzc3LDYgKzM3OCw3IEBACiAJICogcmV0dXJuIDAgaW4gdGhhdCBjYXNlLgogCSAqLwogCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmxvY2ssIGZsYWdzKTsKIAlzY2IgPSBtZWdhX2J1aWxkX2NtZChhZGFwdGVyLCBzY21kLCAmYnVzeSk7CiAKIAlpZihzY2IpIHsKQEAgLTM5Myw2ICszOTUsNyBAQAogCQl9CiAJCXJldHVybiAwOwogCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gYnVzeTsKIH0KQEAgLTE2ODMsNyArMTY4Niw3IEBACiAKIAlsaXN0X2Zvcl9lYWNoKHBvcywgJmFkYXB0ZXItPmNvbXBsZXRlZF9saXN0KSB7CiAKLQkJU2NzaV9Qb2ludGVyKiBzcG9zID0gKFNjc2lfUG9pbnRlciAqKXBvczsKKwkJc3RydWN0IHNjc2lfcG9pbnRlciogc3BvcyA9IChzdHJ1Y3Qgc2NzaV9wb2ludGVyICopcG9zOwogCiAJCWNtZCA9IGxpc3RfZW50cnkoc3BvcywgU2NzaV9DbW5kLCBTQ3ApOwogCQljbWQtPnNjc2lfZG9uZShjbWQpOwpAQCAtMTk4MSw3ICsxOTg0LDcgQEAKIAltYy5jbWQgPSBNRUdBX0NMVVNURVJfQ01EOwogCW1jLm9wY29kZSA9IE1FR0FfUkVTRVRfUkVTRVJWQVRJT05TOwogCi0JaWYoIG1lZ2FfaW50ZXJuYWxfY29tbWFuZChhZGFwdGVyLCBMT0NLX0lOVCwgJm1jLCBOVUxMKSAhPSAwICkgeworCWlmKCBtZWdhX2ludGVybmFsX2NvbW1hbmQoYWRhcHRlciwgJm1jLCBOVUxMKSAhPSAwICkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCQkJIm1lZ2FyYWlkOiByZXNlcnZhdGlvbiByZXNldCBmYWlsZWQuXG4iKTsKIAl9CkBAIC0zMDExLDcgKzMwMTQsNyBAQAogCQltYy5jbWQgPSBGQ19ORVdfQ09ORklHOwogCQltYy5vcGNvZGUgPSBPUF9EQ01EX1JFQURfQ09ORklHOwogCi0JCWlmKCBtZWdhX2ludGVybmFsX2NvbW1hbmQoYWRhcHRlciwgTE9DS19JTlQsICZtYywgTlVMTCkgKSB7CisJCWlmKCBtZWdhX2ludGVybmFsX2NvbW1hbmQoYWRhcHRlciwgJm1jLCBOVUxMKSApIHsKIAogCQkJbGVuID0gc3ByaW50ZihwYWdlLCAiNDBMRCByZWFkIGNvbmZpZyBmYWlsZWQuXG4iKTsKIApAQCAtMzAyOSwxMSArMzAzMiwxMSBAQAogCWVsc2UgewogCQltYy5jbWQgPSBORVdfUkVBRF9DT05GSUdfOExEOwogCi0JCWlmKCBtZWdhX2ludGVybmFsX2NvbW1hbmQoYWRhcHRlciwgTE9DS19JTlQsICZtYywgTlVMTCkgKSB7CisJCWlmKCBtZWdhX2ludGVybmFsX2NvbW1hbmQoYWRhcHRlciwgJm1jLCBOVUxMKSApIHsKIAogCQkJbWMuY21kID0gUkVBRF9DT05GSUdfOExEOwogCi0JCQlpZiggbWVnYV9pbnRlcm5hbF9jb21tYW5kKGFkYXB0ZXIsIExPQ0tfSU5ULCAmbWMsCisJCQlpZiggbWVnYV9pbnRlcm5hbF9jb21tYW5kKGFkYXB0ZXIsICZtYywKIAkJCQkJCU5VTEwpICl7CiAKIAkJCQlsZW4gPSBzcHJpbnRmKHBhZ2UsCkBAIC0zNjMyLDcgKzM2MzUsNyBAQAogCQkJLyoKIAkJCSAqIElzc3VlIHRoZSBjb21tYW5kCiAJCQkgKi8KLQkJCW1lZ2FfaW50ZXJuYWxfY29tbWFuZChhZGFwdGVyLCBMT0NLX0lOVCwgJm1jLCBwdGhydSk7CisJCQltZWdhX2ludGVybmFsX2NvbW1hbmQoYWRhcHRlciwgJm1jLCBwdGhydSk7CiAKIAkJCXJ2YWwgPSBtZWdhX25fdG9fbSgodm9pZCBfX3VzZXIgKilhcmcsICZtYyk7CiAKQEAgLTM3MTUsNyArMzcxOCw3IEBACiAJCQkvKgogCQkJICogSXNzdWUgdGhlIGNvbW1hbmQKIAkJCSAqLwotCQkJbWVnYV9pbnRlcm5hbF9jb21tYW5kKGFkYXB0ZXIsIExPQ0tfSU5ULCAmbWMsIE5VTEwpOworCQkJbWVnYV9pbnRlcm5hbF9jb21tYW5kKGFkYXB0ZXIsICZtYywgTlVMTCk7CiAKIAkJCXJ2YWwgPSBtZWdhX25fdG9fbSgodm9pZCBfX3VzZXIgKilhcmcsICZtYyk7CiAKQEAgLTQyMzQsNyArNDIzNyw3IEBACiAJbWMub3Bjb2RlID0gT1BfREVMX0xPR0RSVjsKIAltYy5zdWJvcGNvZGUgPSBsb2dkcnY7CiAKLQlydmFsID0gbWVnYV9pbnRlcm5hbF9jb21tYW5kKGFkYXB0ZXIsIExPQ0tfSU5ULCAmbWMsIE5VTEwpOworCXJ2YWwgPSBtZWdhX2ludGVybmFsX2NvbW1hbmQoYWRhcHRlciwgJm1jLCBOVUxMKTsKIAogCS8qIGxvZyB0aGlzIGV2ZW50ICovCiAJaWYocnZhbCkgewpAQCAtNDM2Nyw3ICs0MzcwLDcgQEAKIAogCW1jLnhmZXJhZGRyID0gKHUzMilkbWFfaGFuZGxlOwogCi0JaWYgKCBtZWdhX2ludGVybmFsX2NvbW1hbmQoYWRhcHRlciwgTE9DS19JTlQsICZtYywgTlVMTCkgIT0gMCApIHsKKwlpZiAoIG1lZ2FfaW50ZXJuYWxfY29tbWFuZChhZGFwdGVyLCAmbWMsIE5VTEwpICE9IDAgKSB7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTQ0MzUsNyArNDQzOCw3IEBACiAJbWMuY21kID0gTUVHQV9NQk9YQ01EX1BBU1NUSFJVOwogCW1jLnhmZXJhZGRyID0gKHUzMilwdGhydV9kbWFfaGFuZGxlOwogCi0JcnZhbCA9IG1lZ2FfaW50ZXJuYWxfY29tbWFuZChhZGFwdGVyLCBMT0NLX0lOVCwgJm1jLCBwdGhydSk7CisJcnZhbCA9IG1lZ2FfaW50ZXJuYWxfY29tbWFuZChhZGFwdGVyLCAmbWMsIHB0aHJ1KTsKIAogCXBjaV9mcmVlX2NvbnNpc3RlbnQocGRldiwgc2l6ZW9mKG1lZ2FfcGFzc3RocnUpLCBwdGhydSwKIAkJCXB0aHJ1X2RtYV9oYW5kbGUpOwpAQCAtNDQ0OSw3ICs0NDUyLDYgQEAKIC8qKgogICogbWVnYV9pbnRlcm5hbF9jb21tYW5kKCkKICAqIEBhZGFwdGVyIC0gcG9pbnRlciB0byBvdXIgc29mdCBzdGF0ZQotICogQGxzIC0gdGhlIHNjb3BlIG9mIHRoZSBleGNsdXNpb24gbG9jay4KICAqIEBtYyAtIHRoZSBtYWlsYm94IGNvbW1hbmQKICAqIEBwdGhydSAtIFBhc3N0aHJ1IHN0cnVjdHVyZSBmb3IgRENEQiBjb21tYW5kcwogICoKQEAgLTQ0NjMsOCArNDQ2NSw3IEBACiAgKiBOb3RlOiBwYXJhbWV0ZXIgJ3B0aHJ1JyBpcyBudWxsIGZvciBub24tcGFzc3RocnUgY29tbWFuZHMuCiAgKi8KIHN0YXRpYyBpbnQKLW1lZ2FfaW50ZXJuYWxfY29tbWFuZChhZGFwdGVyX3QgKmFkYXB0ZXIsIGxvY2tzY29wZV90IGxzLCBtZWdhY21kX3QgKm1jLAotCQltZWdhX3Bhc3N0aHJ1ICpwdGhydSApCittZWdhX2ludGVybmFsX2NvbW1hbmQoYWRhcHRlcl90ICphZGFwdGVyLCBtZWdhY21kX3QgKm1jLCBtZWdhX3Bhc3N0aHJ1ICpwdGhydSkKIHsKIAlTY3NpX0NtbmQJKnNjbWQ7CiAJc3RydWN0CXNjc2lfZGV2aWNlICpzZGV2OwpAQCAtNDUwOCwxNSArNDUwOSw4IEBACiAKIAlzY2ItPmlkeCA9IENNRElEX0lOVF9DTURTOwogCi0JLyoKLQkgKiBHZXQgdGhlIGxvY2sgb25seSBpZiB0aGUgY2FsbGVyIGhhcyBub3QgYWNxdWlyZWQgaXQgYWxyZWFkeQotCSAqLwotCWlmKCBscyA9PSBMT0NLX0lOVCApIHNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5sb2NrLCBmbGFncyk7Ci0KIAltZWdhcmFpZF9xdWV1ZShzY21kLCBtZWdhX2ludGVybmFsX2RvbmUpOwogCi0JaWYoIGxzID09IExPQ0tfSU5UICkgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+bG9jaywgZmxhZ3MpOwotCiAJd2FpdF9mb3JfY29tcGxldGlvbigmYWRhcHRlci0+aW50X3dhaXRxKTsKIAogCXJ2YWwgPSBzY21kLT5yZXN1bHQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQuaCBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC5oCmluZGV4IDRmYWNmNTUuLjZmOTA3ODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC5oCisrKyBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC5oCkBAIC05MjYsMTMgKzkyNiw2IEBACiAjZGVmaW5lIE1FR0FfU0dMSVNUCQkJMHgwMDAyCiAKIC8qCi0gKiBsb2Nrc2NvcGUgZGVmaW5pdGlvbnMsIGNhbGxlcnMgY2FuIHNwZWNpZnkgdGhlIGxvY2sgc2NvcGUgd2l0aCB0aGlzIGRhdGEKLSAqIHR5cGUuIExPQ0tfSU5UIHdvdWxkIG1lYW4gdGhlIGNhbGxlciBoYXMgbm90IGFjcXVpcmVkIHRoZSBsb2NrIGJlZm9yZQotICogbWFraW5nIHRoZSBjYWxsIGFuZCBMT0NLX0VYVCB3b3VsZCBtZWFuIG90aGVyd2lzZS4KLSAqLwotdHlwZWRlZiBlbnVtIHsgTE9DS19JTlQsIExPQ0tfRVhUIH0gbG9ja3Njb3BlX3Q7Ci0KLS8qCiAgKiBQYXJhbWV0ZXJzIGZvciB0aGUgaW8tbWFwcGVkIGNvbnRyb2xsZXJzCiAgKi8KIApAQCAtMTA2Miw4ICsxMDU1LDcgQEAKIHN0YXRpYyBpbnQgbWVnYV9kZWxfbG9nZHJ2KGFkYXB0ZXJfdCAqLCBpbnQpOwogc3RhdGljIGludCBtZWdhX2RvX2RlbF9sb2dkcnYoYWRhcHRlcl90ICosIGludCk7CiBzdGF0aWMgdm9pZCBtZWdhX2dldF9tYXhfc2dsKGFkYXB0ZXJfdCAqKTsKLXN0YXRpYyBpbnQgbWVnYV9pbnRlcm5hbF9jb21tYW5kKGFkYXB0ZXJfdCAqLCBsb2Nrc2NvcGVfdCwgbWVnYWNtZF90ICosCi0JCW1lZ2FfcGFzc3RocnUgKik7CitzdGF0aWMgaW50IG1lZ2FfaW50ZXJuYWxfY29tbWFuZChhZGFwdGVyX3QgKiwgbWVnYWNtZF90ICosIG1lZ2FfcGFzc3RocnUgKik7CiBzdGF0aWMgdm9pZCBtZWdhX2ludGVybmFsX2RvbmUoU2NzaV9DbW5kICopOwogc3RhdGljIGludCBtZWdhX3N1cHBvcnRfY2x1c3RlcihhZGFwdGVyX3QgKik7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhX2NvbW1vbi5oIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FfY29tbW9uLmgKaW5kZXggNjlkZjFhOS4uNDY3NTM0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FfY29tbW9uLmgKKysrIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FfY29tbW9uLmgKQEAgLTI1LDcgKzI1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KQEAgLTk3LDcgKzk2LDYgQEAKICAqIEBwYXJhbSBkcGNfaAkJCTogdGFza2xldCBoYW5kbGUKICAqIEBwYXJhbSBwZGV2CQkJOiBwY2kgY29uZmlndXJhdGlvbiBwb2ludGVyIGZvciBrZXJuZWwKICAqIEBwYXJhbSBob3N0CQkJOiBwb2ludGVyIHRvIGhvc3Qgc3RydWN0dXJlIG9mIG1pZC1sYXllcgotICogQHBhcmFtIGhvc3RfbG9jawkJOiBwb2ludGVyIHRvIGFwcHJvcHJpYXRlIGxvY2sKICAqIEBwYXJhbSBsb2NrCQkJOiBzeW5jaHJvbml6YXRpb24gbG9jayBmb3IgbWlkLWxheWVyIGFuZCBkcml2ZXIKICAqIEBwYXJhbSBxdWllc2NlbnQJCTogZHJpdmVyIGlzIHF1aWVzY2VudCBmb3Igbm93LgogICogQHBhcmFtIG91dHN0YW5kaW5nX2NtZHMJOiBudW1iZXIgb2YgY29tbWFuZHMgcGVuZGluZyBpbiB0aGUgZHJpdmVyCkBAIC0xNTIsNyArMTUwLDYgQEAKIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QJZHBjX2g7CiAJc3RydWN0IHBjaV9kZXYJCSpwZGV2OwogCXN0cnVjdCBTY3NpX0hvc3QJKmhvc3Q7Ci0Jc3BpbmxvY2tfdAkJKmhvc3RfbG9jazsKIAlzcGlubG9ja190CQlsb2NrOwogCXVpbnQ4X3QJCQlxdWllc2NlbnQ7CiAJaW50CQkJb3V0c3RhbmRpbmdfY21kczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9tYm94LmMgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfbWJveC5jCmluZGV4IDFhM2QxOTUuLjRiNWQ0MjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9tYm94LmMKKysrIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX21ib3guYwpAQCAtNTMzLDggKzUzMyw2IEBACiAKIAkvLyBJbml0aWFsaXplIHRoZSBzeW5jaHJvbml6YXRpb24gbG9jayBmb3Iga2VybmVsIGFuZCBMTEQKIAlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+bG9jayk7Ci0JYWRhcHRlci0+aG9zdF9sb2NrID0gJmFkYXB0ZXItPmxvY2s7Ci0KIAogCS8vIEluaXRpYWxpemUgdGhlIGNvbW1hbmQgcXVldWVzOiB0aGUgbGlzdCBvZiBmcmVlIFNDQnMgYW5kIHRoZSBsaXN0CiAJLy8gb2YgcGVuZGluZyBTQ0JzLgpAQCAtNzE1LDkgKzcxMyw2IEBACiAJU0NTSUhPU1QyQURBUChob3N0KQk9IChjYWRkcl90KWFkYXB0ZXI7CiAJYWRhcHRlci0+aG9zdAkJPSBob3N0OwogCi0JLy8gZXhwb3J0IHRoZSBwYXJhbWV0ZXJzIHJlcXVpcmVkIGJ5IHRoZSBtaWQtbGF5ZXIKLQlzY3NpX2Fzc2lnbl9sb2NrKGhvc3QsIGFkYXB0ZXItPmhvc3RfbG9jayk7Ci0KIAlob3N0LT5pcnEJCT0gYWRhcHRlci0+aXJxOwogCWhvc3QtPnVuaXF1ZV9pZAkJPSBhZGFwdGVyLT51bmlxdWVfaWQ7CiAJaG9zdC0+Y2FuX3F1ZXVlCQk9IGFkYXB0ZXItPm1heF9jbWRzOwpAQCAtMTU2MCwxMCArMTU1NSw2IEBACiAJc2NwLT5zY3NpX2RvbmUJPSBkb25lOwogCXNjcC0+cmVzdWx0CT0gMDsKIAotCWFzc2VydF9zcGluX2xvY2tlZChhZGFwdGVyLT5ob3N0X2xvY2spOwotCi0Jc3Bpbl91bmxvY2soYWRhcHRlci0+aG9zdF9sb2NrKTsKLQogCS8qCiAJICogQWxsb2NhdGUgYW5kIGJ1aWxkIGEgU0NCIHJlcXVlc3QKIAkgKiBpZl9idXN5IGZsYWcgd2lsbCBiZSBzZXQgaWYgbWVnYXJhaWRfbWJveF9idWlsZF9jbWQoKSBjb21tYW5kIGNvdWxkCkBAIC0xNTczLDIzICsxNTY0LDE2IEBACiAJICogcmV0dXJuIDAgaW4gdGhhdCBjYXNlLCBhbmQgd2Ugd291bGQgZG8gdGhlIGNhbGxiYWNrIHJpZ2h0IGF3YXkuCiAJICovCiAJaWZfYnVzeQk9IDA7Ci0Jc2NiCT0gbWVnYXJhaWRfbWJveF9idWlsZF9jbWQoYWRhcHRlciwgc2NwLCAmaWZfYnVzeSk7Ci0KLQlpZiAoc2NiKSB7Ci0JCW1lZ2FyYWlkX21ib3hfcnVucGVuZHEoYWRhcHRlciwgc2NiKTsKLQl9Ci0KLQlzcGluX2xvY2soYWRhcHRlci0+aG9zdF9sb2NrKTsKLQorCXNjYiA9IG1lZ2FyYWlkX21ib3hfYnVpbGRfY21kKGFkYXB0ZXIsIHNjcCwgJmlmX2J1c3kpOwogCWlmICghc2NiKSB7CS8vIGNvbW1hbmQgYWxyZWFkeSBjb21wbGV0ZWQKIAkJZG9uZShzY3ApOwogCQlyZXR1cm4gMDsKIAl9CiAKKwltZWdhcmFpZF9tYm94X3J1bnBlbmRxKGFkYXB0ZXIsIHNjYik7CiAJcmV0dXJuIGlmX2J1c3k7CiB9CiAKLQogLyoqCiAgKiBtZWdhcmFpZF9tYm94X2J1aWxkX2NtZCAtIHRyYW5zZm9ybSB0aGUgbWlkLWxheWVyIHNjc2kgY29tbWFuZCB0byBtZWdhcmFpZAogICogZmlybXdhcmUgbGluZ3VhCkBAIC0yNTQ2LDkgKzI1MzAsNyBAQAogCQltZWdhcmFpZF9kZWFsbG9jX3NjYihhZGFwdGVyLCBzY2IpOwogCiAJCS8vIHNlbmQgdGhlIHNjc2kgcGFja2V0IGJhY2sgdG8ga2VybmVsCi0JCXNwaW5fbG9jayhhZGFwdGVyLT5ob3N0X2xvY2spOwogCQlzY3AtPnNjc2lfZG9uZShzY3ApOwotCQlzcGluX3VubG9jayhhZGFwdGVyLT5ob3N0X2xvY2spOwogCX0KIAogCXJldHVybjsKQEAgLTI1NjMsNyArMjU0NSw3IEBACiAgKiBhYm9ydGVkLiBBbGwgdGhlIGNvbW1hbmRzIGlzc3VlZCB0byB0aGUgRi9XIG11c3QgY29tcGxldGUuCiAgKiovCiBzdGF0aWMgaW50Ci1fX21lZ2FyYWlkX2Fib3J0X2hhbmRsZXIoc3RydWN0IHNjc2lfY21uZCAqc2NwKQorbWVnYXJhaWRfYWJvcnRfaGFuZGxlcihzdHJ1Y3Qgc2NzaV9jbW5kICpzY3ApCiB7CiAJYWRhcHRlcl90CQkqYWRhcHRlcjsKIAltcmFpZF9kZXZpY2VfdAkJKnJhaWRfZGV2OwpAQCAtMjU3Nyw4ICsyNTU5LDYgQEAKIAlhZGFwdGVyCQk9IFNDUDJBREFQVEVSKHNjcCk7CiAJcmFpZF9kZXYJPSBBREFQMlJBSURERVYoYWRhcHRlcik7CiAKLQlhc3NlcnRfc3Bpbl9sb2NrZWQoYWRhcHRlci0+aG9zdF9sb2NrKTsKLQogCWNvbl9sb2coQ0xfQU5OLCAoS0VSTl9XQVJOSU5HCiAJCSJtZWdhcmFpZDogYWJvcnRpbmctJWxkIGNtZD0leCA8Yz0lZCB0PSVkIGw9JWQ+XG4iLAogCQlzY3AtPnNlcmlhbF9udW1iZXIsIHNjcC0+Y21uZFswXSwgU0NQMkNIQU5ORUwoc2NwKSwKQEAgLTI2NTgsNiArMjYzOCw3IEBACiAJLy8gdHJhdmVyc2UgdGhyb3VnaCB0aGUgbGlzdCBvZiBhbGwgU0NCLCBzaW5jZSBkcml2ZXIgZG9lcyBub3QKIAkvLyBtYWludGFpbiB0aGVzZSBTQ0JzIG9uIGFueSBsaXN0CiAJZm91bmQgPSAwOworCXNwaW5fbG9ja19pcnEoJmFkYXB0ZXItPmxvY2spOwogCWZvciAoaSA9IDA7IGkgPCBNQk9YX01BWF9TQ1NJX0NNRFM7IGkrKykgewogCQlzY2IgPSBhZGFwdGVyLT5rc2NiX2xpc3QgKyBpOwogCkBAIC0yNjgwLDYgKzI2NjEsNyBAQAogCQkJfQogCQl9CiAJfQorCXNwaW5fdW5sb2NrX2lycSgmYWRhcHRlci0+bG9jayk7CiAKIAlpZiAoIWZvdW5kKSB7CiAJCWNvbl9sb2coQ0xfQU5OLCAoS0VSTl9XQVJOSU5HCkBAIC0yNjk2LDIyICsyNjc4LDYgQEAKIAlyZXR1cm4gRkFJTEVEOwogfQogCi1zdGF0aWMgaW50Ci1tZWdhcmFpZF9hYm9ydF9oYW5kbGVyKHN0cnVjdCBzY3NpX2NtbmQgKnNjcCkKLXsKLQlhZGFwdGVyX3QJKmFkYXB0ZXI7Ci0JaW50IHJjOwotCi0JYWRhcHRlcgkJPSBTQ1AyQURBUFRFUihzY3ApOwotCi0Jc3Bpbl9sb2NrX2lycShhZGFwdGVyLT5ob3N0X2xvY2spOwotCXJjID0gX19tZWdhcmFpZF9hYm9ydF9oYW5kbGVyKHNjcCk7Ci0Jc3Bpbl91bmxvY2tfaXJxKGFkYXB0ZXItPmhvc3RfbG9jayk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLQogLyoqCiAgKiBtZWdhcmFpZF9yZXNldF9oYW5kbGVyIC0gZGV2aWNlIHJlc2V0IGhhZGxlciBmb3IgbWFpbGJveCBiYXNlZCBkcml2ZXIKICAqIEBzY3AJCTogcmVmZXJlbmNlIGNvbW1hbmQKQEAgLTI3MjMsNyArMjY4OSw3IEBACiAgKiBob3N0CiAgKiovCiBzdGF0aWMgaW50Ci1fX21lZ2FyYWlkX3Jlc2V0X2hhbmRsZXIoc3RydWN0IHNjc2lfY21uZCAqc2NwKQorbWVnYXJhaWRfcmVzZXRfaGFuZGxlcihzdHJ1Y3Qgc2NzaV9jbW5kICpzY3ApCiB7CiAJYWRhcHRlcl90CSphZGFwdGVyOwogCXNjYl90CQkqc2NiOwpAQCAtMjczOSwxMCArMjcwNSw2IEBACiAJYWRhcHRlcgkJPSBTQ1AyQURBUFRFUihzY3ApOwogCXJhaWRfZGV2CT0gQURBUDJSQUlEREVWKGFkYXB0ZXIpOwogCi0JYXNzZXJ0X3NwaW5fbG9ja2VkKGFkYXB0ZXItPmhvc3RfbG9jayk7Ci0KLQljb25fbG9nKENMX0FOTiwgKEtFUk5fV0FSTklORyAibWVnYXJhaWQ6IHJlc2V0aW5nIHRoZSBob3N0Li4uXG4iKSk7Ci0KIAkvLyByZXR1cm4gZmFpbHVyZSBpZiBhZGFwdGVyIGlzIG5vdCByZXNwb25kaW5nCiAJaWYgKHJhaWRfZGV2LT5od19lcnJvcikgewogCQljb25fbG9nKENMX0FOTiwgKEtFUk5fTk9USUNFCkBAIC0yNzc5LDggKzI3NDEsNiBAQAogCQkJYWRhcHRlci0+b3V0c3RhbmRpbmdfY21kcywgTUJPWF9SRVNFVF9XQUlUKSk7CiAJfQogCi0Jc3Bpbl91bmxvY2soYWRhcHRlci0+aG9zdF9sb2NrKTsKLQogCXJlY292ZXJ5X3dpbmRvdyA9IE1CT1hfUkVTRVRfV0FJVCArIE1CT1hfUkVTRVRfRVhUX1dBSVQ7CiAKIAlyZWNvdmVyaW5nID0gYWRhcHRlci0+b3V0c3RhbmRpbmdfY21kczsKQEAgLTI4MDYsNyArMjc2Niw3IEBACiAJCW1zbGVlcCgxMDAwKTsKIAl9CiAKLQlzcGluX2xvY2soYWRhcHRlci0+aG9zdF9sb2NrKTsKKwlzcGluX2xvY2soJmFkYXB0ZXItPmxvY2spOwogCiAJLy8gSWYgc3RpbGwgb3V0c3RhbmRpbmcgY29tbWFuZHMsIGJhaWwgb3V0CiAJaWYgKGFkYXB0ZXItPm91dHN0YW5kaW5nX2NtZHMpIHsKQEAgLTI4MTUsNyArMjc3NSw4IEBACiAKIAkJcmFpZF9kZXYtPmh3X2Vycm9yID0gMTsKIAotCQlyZXR1cm4gRkFJTEVEOworCQlydmFsID0gRkFJTEVEOworCQlnb3RvIG91dDsKIAl9CiAJZWxzZSB7CiAJCWNvbl9sb2coQ0xfQU5OLCAoS0VSTl9OT1RJQ0UKQEAgLTI4MjQsNyArMjc4NSwxMCBAQAogCiAKIAkvLyBJZiB0aGUgY29udHJvbGxlciBzdXBwb3J0cyBjbHVzdGVyaW5nLCByZXNldCByZXNlcnZhdGlvbnMKLQlpZiAoIWFkYXB0ZXItPmhhKSByZXR1cm4gU1VDQ0VTUzsKKwlpZiAoIWFkYXB0ZXItPmhhKSB7CisJCXJ2YWwgPSBTVUNDRVNTOworCQlnb3RvIG91dDsKKwl9CiAKIAkvLyBjbGVhciByZXNlcnZhdGlvbnMgaWYgYW55CiAJcmF3X21ib3hbMF0gPSBDTFVTVEVSX0NNRDsKQEAgLTI4NDEsMjIgKzI4MDUsMTEgQEAKIAkJCQkibWVnYXJhaWQ6IHJlc2VydmF0aW9uIHJlc2V0IGZhaWxlZFxuIikpOwogCX0KIAorIG91dDoKKwlzcGluX3VubG9ja19pcnEoJmFkYXB0ZXItPmxvY2spOwogCXJldHVybiBydmFsOwogfQogCi1zdGF0aWMgaW50Ci1tZWdhcmFpZF9yZXNldF9oYW5kbGVyKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKLXsKLQlpbnQgcmM7Ci0KLQlzcGluX2xvY2tfaXJxKGNtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0X2xvY2spOwotCXJjID0gX19tZWdhcmFpZF9yZXNldF9oYW5kbGVyKGNtZCk7Ci0Jc3Bpbl91bmxvY2tfaXJxKGNtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0X2xvY2spOwotCi0JcmV0dXJuIHJjOwotfQotCi0KIC8qCiAgKiBTVEFSVDogaW50ZXJuYWwgY29tbWFuZHMgbGlicmFyeQogICoKQEAgLTM3NzYsOSArMzcyOSw5IEBACiAJLyoKIAkgKiBTZXQgdGhlIHF1aWVzY2VudCBmbGFnIHRvIHN0b3AgaXNzdWluZyBjbWRzIHRvIEZXLgogCSAqLwotCXNwaW5fbG9ja19pcnFzYXZlKGFkYXB0ZXItPmhvc3RfbG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5sb2NrLCBmbGFncyk7CiAJYWRhcHRlci0+cXVpZXNjZW50Kys7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShhZGFwdGVyLT5ob3N0X2xvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5sb2NrLCBmbGFncyk7CiAKIAkvKgogCSAqIFdhaXQgdGlsbCB0aGVyZSBhcmUgbm8gbW9yZSBjbWRzIG91dHN0YW5kaW5nIGF0IEZXLiBUcnkgZm9yIGF0IG1vc3QKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9tbS5oIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX21tLmgKaW5kZXggN2UzNmM0Ni4uZWI4YzM5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX21tLmgKKysrIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX21tLmgKQEAgLTE4LDcgKzE4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXMuYyBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXMuYwppbmRleCA0MjQ1ZDA1Li4zYzMyZTY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzLmMKKysrIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhcy5jCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KQEAgLTc2NywxNyArNzY2LDEyIEBACiAJCXJldHVybiBGQUlMRUQ7CiAJfQogCi0Jc3Bpbl91bmxvY2soc2NtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0X2xvY2spOwotCiAJcmV0X3ZhbCA9IG1lZ2FzYXNfd2FpdF9mb3Jfb3V0c3RhbmRpbmcoaW5zdGFuY2UpOwotCiAJaWYgKHJldF92YWwgPT0gU1VDQ0VTUykKIAkJcHJpbnRrKEtFUk5fTk9USUNFICJtZWdhc2FzOiByZXNldCBzdWNjZXNzZnVsIFxuIik7CiAJZWxzZQogCQlwcmludGsoS0VSTl9FUlIgIm1lZ2FzYXM6IGZhaWxlZCB0byBkbyByZXNldFxuIik7CiAKLQlzcGluX2xvY2soc2NtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0X2xvY2spOwotCiAJcmV0dXJuIHJldF92YWw7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tdm1lMTQ3LmMgYi9kcml2ZXJzL3Njc2kvbXZtZTE0Ny5jCmluZGV4IDJmYjMxZWUuLmNiMzY3YzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tdm1lMTQ3LmMKKysrIGIvZHJpdmVycy9zY3NpL212bWUxNDcuYwpAQCAtMiw3ICsyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogCiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KQEAgLTY0LDcgKzYzLDcgQEAKICAgICBtMTQ3X3BjYy0+ZG1hX2NudHJsID0gMDsKIH0KIAotaW50IG12bWUxNDdfZGV0ZWN0KFNjc2lfSG9zdF9UZW1wbGF0ZSAqdHBudCkKK2ludCBtdm1lMTQ3X2RldGVjdChzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICp0cG50KQogewogICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGNhbGxlZCA9IDA7CiAgICAgd2QzM2M5M19yZWdzIHJlZ3M7CkBAIC0xMzEsNyArMTMwLDcgQEAKIAogI2luY2x1ZGUgIm12bWUxNDcuaCIKIAotc3RhdGljIFNjc2lfSG9zdF9UZW1wbGF0ZSBkcml2ZXJfdGVtcGxhdGUgPSB7CitzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBkcml2ZXJfdGVtcGxhdGUgPSB7CiAJLnByb2NfbmFtZQkJPSAiTVZNRTE0NyIsCiAJLm5hbWUJCQk9ICJNVk1FMTQ3IGJ1aWx0LWluIFNDU0kiLAogCS5kZXRlY3QJCQk9IG12bWUxNDdfZGV0ZWN0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL212bWUxNDcuaCBiL2RyaXZlcnMvc2NzaS9tdm1lMTQ3LmgKaW5kZXggZDg5MDNmMC4uMmY1NmQ2OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL212bWUxNDcuaAorKysgYi9kcml2ZXJzL3Njc2kvbXZtZTE0Ny5oCkBAIC0xMCw3ICsxMCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCi1pbnQgbXZtZTE0N19kZXRlY3QoU2NzaV9Ib3N0X1RlbXBsYXRlICopOworaW50IG12bWUxNDdfZGV0ZWN0KHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKik7CiBpbnQgbXZtZTE0N19yZWxlYXNlKHN0cnVjdCBTY3NpX0hvc3QgKik7CiBjb25zdCBjaGFyICp3ZDMzYzkzX2luZm8odm9pZCk7CiBpbnQgd2QzM2M5M19xdWV1ZWNvbW1hbmQoU2NzaV9DbW5kICosIHZvaWQgKCpkb25lKShTY3NpX0NtbmQgKikpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL212bWUxNnguYyBiL2RyaXZlcnMvc2NzaS9tdm1lMTZ4LmMKaW5kZXggYjJkOGQ4ZS4uODkwZTllMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL212bWUxNnguYworKysgYi9kcml2ZXJzL3Njc2kvbXZtZTE2eC5jCkBAIC03LDcgKzcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAKICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CkBAIC0yMiw3ICsyMSw3IEBACiAjaW5jbHVkZTxsaW51eC9zdGF0Lmg+CiAKIAotaW50IG12bWUxNnhfc2NzaV9kZXRlY3QoU2NzaV9Ib3N0X1RlbXBsYXRlICp0cG50KQoraW50IG12bWUxNnhfc2NzaV9kZXRlY3Qoc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqdHBudCkKIHsKICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBjYWxsZWQgPSAwOwogICAgIGludCBjbG9jazsKQEAgLTYyLDcgKzYxLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIFNjc2lfSG9zdF9UZW1wbGF0ZSBkcml2ZXJfdGVtcGxhdGUgPSB7CitzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBkcml2ZXJfdGVtcGxhdGUgPSB7CiAJLm5hbWUJCQk9ICJNVk1FMTZ4IE5DUjUzYzcxMCBTQ1NJIiwKIAkuZGV0ZWN0CQkJPSBtdm1lMTZ4X3Njc2lfZGV0ZWN0LAogCS5yZWxlYXNlCQk9IG12bWUxNnhfc2NzaV9yZWxlYXNlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL212bWUxNnguaCBiL2RyaXZlcnMvc2NzaS9tdm1lMTZ4LmgKaW5kZXggMjUxNzNjOC4uYzdhMTI1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL212bWUxNnguaAorKysgYi9kcml2ZXJzL3Njc2kvbXZtZTE2eC5oCkBAIC0zLDcgKzMsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAotaW50IG12bWUxNnhfc2NzaV9kZXRlY3QoU2NzaV9Ib3N0X1RlbXBsYXRlICopOworaW50IG12bWUxNnhfc2NzaV9kZXRlY3Qoc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqKTsKIGNvbnN0IGNoYXIgKk5DUjUzYzd4MF9pbmZvKHZvaWQpOwogaW50IE5DUjUzYzd4eF9xdWV1ZV9jb21tYW5kKFNjc2lfQ21uZCAqLCB2b2lkICgqZG9uZSkoU2NzaV9DbW5kICopKTsKIGludCBOQ1I1M2M3eHhfYWJvcnQoU2NzaV9DbW5kICopOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL25zcDMyLmMgYi9kcml2ZXJzL3Njc2kvbnNwMzIuYwppbmRleCBlNGZmNGYwLi5hMjc5ZWJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbnNwMzIuYworKysgYi9kcml2ZXJzL3Njc2kvbnNwMzIuYwpAQCAtMTk4LDcgKzE5OCw3IEBACiBzdGF0aWMgaW50ICBfX2luaXQgICAgaW5pdF9uc3AzMiAgKHZvaWQpOwogc3RhdGljIHZvaWQgX19leGl0ICAgIGV4aXRfbnNwMzIgICh2b2lkKTsKIAotLyogc3RydWN0IFNjc2lfSG9zdF9UZW1wbGF0ZSAqLworLyogc3RydWN0IHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKi8KICNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw1LDczKSkKIHN0YXRpYyBpbnQgICAgICAgICBuc3AzMl9wcm9jX2luZm8gICAoc3RydWN0IFNjc2lfSG9zdCAqLCBjaGFyICosIGNoYXIgKiosIG9mZl90LCBpbnQsIGludCk7CiAjZWxzZQpAQCAtMjA4LDcgKzIwOCw3IEBACiAjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNSw3MykpCiBzdGF0aWMgaW50ICAgICAgICAgbnNwMzJfZGV0ZWN0ICAgICAgKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKICNlbHNlCi1zdGF0aWMgaW50ICAgICAgICAgbnNwMzJfZGV0ZWN0ICAgICAgKFNjc2lfSG9zdF9UZW1wbGF0ZSAqKTsKK3N0YXRpYyBpbnQgICAgICAgICBuc3AzMl9kZXRlY3QgICAgICAoc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqKTsKICNlbmRpZgogc3RhdGljIGludCAgICAgICAgIG5zcDMyX3F1ZXVlY29tbWFuZChzdHJ1Y3Qgc2NzaV9jbW5kICosCiAJCXZvaWQgKCpkb25lKShzdHJ1Y3Qgc2NzaV9jbW5kICopKTsKQEAgLTI2ODMsNyArMjY4Myw3IEBACiAjZGVmaW5lIERFVEVDVF9PSyAxCiAjZGVmaW5lIERFVEVDVF9ORyAwCiAjZGVmaW5lIFBDSURFViAgICAoZGF0YS0+UGNpKQotc3RhdGljIGludCBuc3AzMl9kZXRlY3QoU2NzaV9Ib3N0X1RlbXBsYXRlICpzaHQpCitzdGF0aWMgaW50IG5zcDMyX2RldGVjdChzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICpzaHQpCiAjZW5kaWYKIHsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0OwkvKiByZWdpc3RlcmVkIGhvc3Qgc3RydWN0dXJlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbnNwMzIuaCBiL2RyaXZlcnMvc2NzaS9uc3AzMi5oCmluZGV4IDU2NjQzOTguLjVhZGRmOWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9uc3AzMi5oCisrKyBiL2RyaXZlcnMvc2NzaS9uc3AzMi5oCkBAIC0xNiw2ICsxNiw3IEBACiAjaWZuZGVmIF9OU1AzMl9ICiAjZGVmaW5lIF9OU1AzMl9ICiAKKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAvLyNkZWZpbmUgTlNQMzJfREVCVUcgOQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL29rdGFnb25fZXNwLmMgYi9kcml2ZXJzL3Njc2kvb2t0YWdvbl9lc3AuYwppbmRleCA1NzNkN2VmLi41ZDljOWFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvb2t0YWdvbl9lc3AuYworKysgYi9kcml2ZXJzL3Njc2kvb2t0YWdvbl9lc3AuYwpAQCAtMTE0LDcgKzExNCw3IEBACiAJCQkJICovCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBEZXRlY3Rpb24gKi8KLWludCBva3RhZ29uX2VzcF9kZXRlY3QoU2NzaV9Ib3N0X1RlbXBsYXRlICp0cG50KQoraW50IG9rdGFnb25fZXNwX2RldGVjdChzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICp0cG50KQogewogCXN0cnVjdCBOQ1JfRVNQICplc3A7CiAJc3RydWN0IHpvcnJvX2RldiAqeiA9IE5VTEw7CkBAIC01ODUsNyArNTg1LDcgQEAKIH0KIAogCi1zdGF0aWMgU2NzaV9Ib3N0X1RlbXBsYXRlIGRyaXZlcl90ZW1wbGF0ZSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGRyaXZlcl90ZW1wbGF0ZSA9IHsKIAkucHJvY19uYW1lCQk9ICJlc3Atb2t0YWdvbiIsCiAJLnByb2NfaW5mbwkJPSAmZXNwX3Byb2NfaW5mbywKIAkubmFtZQkJCT0gIkJTQyBPa3RhZ29uIFNDU0kiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3BhczE2LmMgYi9kcml2ZXJzL3Njc2kvcGFzMTYuYwppbmRleCA3MmJjOTQ3Li5mMDllOTRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcGFzMTYuYworKysgYi9kcml2ZXJzL3Njc2kvcGFzMTYuYwpAQCAtMzY5LDcgKzM2OSw3IEBACiB9CiAKIC8qIAotICogRnVuY3Rpb24gOiBpbnQgcGFzMTZfZGV0ZWN0KFNjc2lfSG9zdF9UZW1wbGF0ZSAqIHRwbnQpCisgKiBGdW5jdGlvbiA6IGludCBwYXMxNl9kZXRlY3Qoc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqIHRwbnQpCiAgKgogICogUHVycG9zZSA6IGRldGVjdHMgYW5kIGluaXRpYWxpemVzIFBBUzE2IGNvbnRyb2xsZXJzCiAgKgl0aGF0IHdlcmUgYXV0b3Byb2JlZCwgb3ZlcnJpZGRlbiBvbiB0aGUgTElMTyBjb21tYW5kIGxpbmUsIApAQCAtMzgxLDcgKzM4MSw3IEBACiAgKgogICovCiAKLWludCBfX2luaXQgcGFzMTZfZGV0ZWN0KFNjc2lfSG9zdF9UZW1wbGF0ZSAqIHRwbnQpCitpbnQgX19pbml0IHBhczE2X2RldGVjdChzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICogdHBudCkKIHsKICAgICBzdGF0aWMgaW50IGN1cnJlbnRfb3ZlcnJpZGUgPSAwOwogICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBjdXJyZW50X2Jhc2UgPSAwOwpAQCAtNjE1LDcgKzYxNSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBTY3NpX0hvc3RfVGVtcGxhdGUgZHJpdmVyX3RlbXBsYXRlID0geworc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgZHJpdmVyX3RlbXBsYXRlID0gewogCS5uYW1lICAgICAgICAgICA9ICJQcm8gQXVkaW8gU3BlY3RydW0tMTYgU0NTSSIsCiAJLmRldGVjdCAgICAgICAgID0gcGFzMTZfZGV0ZWN0LAogCS5yZWxlYXNlICAgICAgICA9IHBhczE2X3JlbGVhc2UsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcGFzMTYuaCBiL2RyaXZlcnMvc2NzaS9wYXMxNi5oCmluZGV4IDY1Y2UxY2MuLjhkYzViMWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9wYXMxNi5oCisrKyBiL2RyaXZlcnMvc2NzaS9wYXMxNi5oCkBAIC0xMTcsNyArMTE3LDcgQEAKIHN0YXRpYyBpbnQgcGFzMTZfYWJvcnQoU2NzaV9DbW5kICopOwogc3RhdGljIGludCBwYXMxNl9iaW9zcGFyYW0oc3RydWN0IHNjc2lfZGV2aWNlICosIHN0cnVjdCBibG9ja19kZXZpY2UgKiwKIAkJCSAgIHNlY3Rvcl90LCBpbnQqKTsKLXN0YXRpYyBpbnQgcGFzMTZfZGV0ZWN0KFNjc2lfSG9zdF9UZW1wbGF0ZSAqKTsKK3N0YXRpYyBpbnQgcGFzMTZfZGV0ZWN0KHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKik7CiBzdGF0aWMgaW50IHBhczE2X3F1ZXVlX2NvbW1hbmQoU2NzaV9DbW5kICosIHZvaWQgKCpkb25lKShTY3NpX0NtbmQgKikpOwogc3RhdGljIGludCBwYXMxNl9idXNfcmVzZXQoU2NzaV9DbW5kICopOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcGNpMjAwMC5oIGIvZHJpdmVycy9zY3NpL3BjaTIwMDAuaAppbmRleCBjNjVhZmM5Li4wZWJkOGNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcGNpMjAwMC5oCisrKyBiL2RyaXZlcnMvc2NzaS9wY2kyMDAwLmgKQEAgLTI2LDkgKzI2LDYgQEAKICNpZm5kZWYJUFNJX0VJREVfU0NTSU9QCiAjZGVmaW5lCVBTSV9FSURFX1NDU0lPUAkxCiAKLSNpZm5kZWYgTElOVVhfVkVSU0lPTl9DT0RFCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgotI2VuZGlmIAogI2RlZmluZQlMSU5VWFZFUlNJT04odixwLHMpICAgICgoKHYpPDwxNikgKyAoKHApPDw4KSArIChzKSkKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTE4Nyw3ICsxODQsNyBAQAogI2VuZGlmCiAKIC8vIGZ1bmN0aW9uIHByb3RvdHlwZXMKLWludCBQY2kyMDAwX0RldGVjdAkJCShTY3NpX0hvc3RfVGVtcGxhdGUgKnRwbnQpOworaW50IFBjaTIwMDBfRGV0ZWN0CQkJKHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKnRwbnQpOwogaW50IFBjaTIwMDBfQ29tbWFuZAkJCShTY3NpX0NtbmQgKlNDcG50KTsKIGludCBQY2kyMDAwX1F1ZXVlQ29tbWFuZAkoU2NzaV9DbW5kICpTQ3BudCwgdm9pZCAoKmRvbmUpKFNjc2lfQ21uZCAqKSk7CiBpbnQgUGNpMjAwMF9BYm9ydAkJCShTY3NpX0NtbmQgKlNDcG50KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9wY21jaWEvbnNwX2NzLmMgYi9kcml2ZXJzL3Njc2kvcGNtY2lhL25zcF9jcy5jCmluZGV4IDNkMmY3MTAuLjA1MGVhMTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9wY21jaWEvbnNwX2NzLmMKKysrIGIvZHJpdmVycy9zY3NpL3BjbWNpYS9uc3BfY3MuYwpAQCAtODEsNyArODEsNyBAQAogTU9EVUxFX1BBUk1fREVTQyhmcmVlX3BvcnRzLCAiUmVsZWFzZSBJTyBwb3J0cyBhZnRlciBjb25maWd1cmF0aW9uPyAoZGVmYXVsdDogMCAoPW5vKSkiKTsKIAogLyogL3Vzci9zcmMvbGludXgvZHJpdmVycy9zY3NpL2hvc3RzLmggKi8KLXN0YXRpYyBTY3NpX0hvc3RfVGVtcGxhdGUgbnNwX2RyaXZlcl90ZW1wbGF0ZSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIG5zcF9kcml2ZXJfdGVtcGxhdGUgPSB7CiAJLnByb2NfbmFtZQkgICAgICAgICA9ICJuc3BfY3MiLAogCS5wcm9jX2luZm8JCSA9IG5zcF9wcm9jX2luZm8sCiAJLm5hbWUJCQkgPSAiV29ya0JpdCBOaW5qYVNDU0ktMy8zMkJpKDE2Yml0KSIsCkBAIC0xMzEwLDcgKzEzMTAsNyBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIGxvb2sgZm9yIG5pbmphMyBjYXJkIGFuZCBpbml0IGlmIGZvdW5kCQkJICAqLwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyBzdHJ1Y3QgU2NzaV9Ib3N0ICpuc3BfZGV0ZWN0KFNjc2lfSG9zdF9UZW1wbGF0ZSAqc2h0KQorc3RhdGljIHN0cnVjdCBTY3NpX0hvc3QgKm5zcF9kZXRlY3Qoc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqc2h0KQogewogCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3Q7CS8qIHJlZ2lzdGVyZWQgaG9zdCBzdHJ1Y3R1cmUgKi8KIAluc3BfaHdfZGF0YSAqZGF0YV9iID0gJm5zcF9kYXRhX2Jhc2UsICpkYXRhOwpAQCAtMTM1OCw3ICsxMzU4LDcgQEAKIH0KIAogI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsMCkpCi1zdGF0aWMgaW50IG5zcF9kZXRlY3Rfb2xkKFNjc2lfSG9zdF9UZW1wbGF0ZSAqc2h0KQorc3RhdGljIGludCBuc3BfZGV0ZWN0X29sZChzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICpzaHQpCiB7CiAJaWYgKG5zcF9kZXRlY3Qoc2h0KSA9PSBOVUxMKSB7CiAJCXJldHVybiAwOwpAQCAtMTcxNyw3ICsxNzE3LDcgQEAKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0OwogCW5zcF9od19kYXRhICAgICAgKmRhdGEgPSAmbnNwX2RhdGFfYmFzZTsKICNpZiAhKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsNzQpKQotCVNjc2lfRGV2aWNlCSAqZGV2OworCXN0cnVjdCBzY3NpX2RldmljZQkgKmRldjsKIAlkZXZfbm9kZV90CSoqdGFpbCwgKm5vZGU7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3BjbWNpYS9uc3BfY3MuaCBiL2RyaXZlcnMvc2NzaS9wY21jaWEvbnNwX2NzLmgKaW5kZXggYzIwMWI1Mi4uZjhiOTQzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BjbWNpYS9uc3BfY3MuaAorKysgYi9kcml2ZXJzL3Njc2kvcGNtY2lhL25zcF9jcy5oCkBAIC0zMDMsOSArMzAzLDkgQEAKIHN0YXRpYyBpbnQgICAgICAgICBuc3BfY3NfZXZlbnQgIChldmVudF90IGV2ZW50LCBpbnQgcHJpb3JpdHksIGV2ZW50X2NhbGxiYWNrX2FyZ3NfdCAqYXJncyk7CiAKIC8qIExpbnV4IFNDU0kgc3Vic3lzdGVtIHNwZWNpZmljIGZ1bmN0aW9ucyAqLwotc3RhdGljIHN0cnVjdCBTY3NpX0hvc3QgKm5zcF9kZXRlY3QgICAgIChTY3NpX0hvc3RfVGVtcGxhdGUgKnNodCk7CitzdGF0aWMgc3RydWN0IFNjc2lfSG9zdCAqbnNwX2RldGVjdCAgICAgKHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKnNodCk7CiAjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNSwwKSkKLXN0YXRpYyAgICAgICAgaW50ICAgICAgICBuc3BfZGV0ZWN0X29sZCAoU2NzaV9Ib3N0X1RlbXBsYXRlICpzaHQpOworc3RhdGljICAgICAgICBpbnQgICAgICAgIG5zcF9kZXRlY3Rfb2xkIChzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICpzaHQpOwogc3RhdGljICAgICAgICBpbnQgICAgICAgIG5zcF9yZWxlYXNlX29sZChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaHBudCk7CiAjZW5kaWYKIHN0YXRpYyBjb25zdCAgY2hhciAgICAgICpuc3BfaW5mbyAgICAgICAoc3RydWN0IFNjc2lfSG9zdCAqc2hwbnQpOwpAQCAtMzQ1LDcgKzM0NSw3IEBACiBzdGF0aWMgaW50ICBuc3BfeGZlciAgICAgICAgICAgICAoU2NzaV9DbW5kICpTQ3BudCwgaW50IHBoYXNlKTsKIHN0YXRpYyBpbnQgIG5zcF9kYXRhcGhhc2VfYnlwYXNzIChTY3NpX0NtbmQgKlNDcG50KTsKIHN0YXRpYyBpbnQgIG5zcF9yZXNlbGVjdGVkICAgICAgIChTY3NpX0NtbmQgKlNDcG50KTsKLXN0YXRpYyBzdHJ1Y3QgU2NzaV9Ib3N0ICpuc3BfZGV0ZWN0KFNjc2lfSG9zdF9UZW1wbGF0ZSAqc2h0KTsKK3N0YXRpYyBzdHJ1Y3QgU2NzaV9Ib3N0ICpuc3BfZGV0ZWN0KHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKnNodCk7CiAKIC8qIEludGVycnVwdCBoYW5kbGVyICovCiAvL3N0YXRpYyBpcnFyZXR1cm5fdCBuc3BpbnRyKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3BjbWNpYS9xbG9naWNfc3R1Yi5jIGIvZHJpdmVycy9zY3NpL3BjbWNpYS9xbG9naWNfc3R1Yi5jCmluZGV4IDdhNTE2ZjM1Li5iYjA5MWE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcGNtY2lhL3Fsb2dpY19zdHViLmMKKysrIGIvZHJpdmVycy9zY3NpL3BjbWNpYS9xbG9naWNfc3R1Yi5jCkBAIC03Miw3ICs3Miw3IEBACiAjZGVmaW5lIERFQlVHKG4sIGFyZ3MuLi4pCiAjZW5kaWYKIAotc3RhdGljIFNjc2lfSG9zdF9UZW1wbGF0ZSBxbG9naWNmYXNfZHJpdmVyX3RlbXBsYXRlID0geworc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgcWxvZ2ljZmFzX2RyaXZlcl90ZW1wbGF0ZSA9IHsKIAkubW9kdWxlCQkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJCT0gcWxvZ2ljX25hbWUsCiAJLnByb2NfbmFtZQkJPSBxbG9naWNfbmFtZSwKQEAgLTEwOCw3ICsxMDgsNyBAQAogCiBzdGF0aWMgZGV2X2luZm9fdCBkZXZfaW5mbyA9ICJxbG9naWNfY3MiOwogCi1zdGF0aWMgc3RydWN0IFNjc2lfSG9zdCAqcWxvZ2ljX2RldGVjdChTY3NpX0hvc3RfVGVtcGxhdGUgKmhvc3QsCitzdGF0aWMgc3RydWN0IFNjc2lfSG9zdCAqcWxvZ2ljX2RldGVjdChzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICpob3N0LAogCQkJCWRldl9saW5rX3QgKmxpbmssIGludCBxYmFzZSwgaW50IHFsaXJxKQogewogCWludCBxbHR5cDsJCS8qIHR5cGUgb2YgY2hpcCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3BkY19hZG1hLmMgYi9kcml2ZXJzL3Njc2kvcGRjX2FkbWEuYwppbmRleCBhNTA1ODhjLi5mNTU3ZjE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcGRjX2FkbWEuYworKysgYi9kcml2ZXJzL3Njc2kvcGRjX2FkbWEuYwpAQCAtNDEsNyArNDEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSAic2NzaS5oIgogI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8bGludXgvbGliYXRhLmg+CkBAIC0xMzksNyArMTM4LDcgQEAKIHN0YXRpYyB2b2lkIGFkbWFfaXJxX2NsZWFyKHN0cnVjdCBhdGFfcG9ydCAqYXApOwogc3RhdGljIHZvaWQgYWRtYV9lbmdfdGltZW91dChzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKIAotc3RhdGljIFNjc2lfSG9zdF9UZW1wbGF0ZSBhZG1hX2F0YV9zaHQgPSB7CitzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBhZG1hX2F0YV9zaHQgPSB7CiAJLm1vZHVsZQkJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCQk9IERSVl9OQU1FLAogCS5pb2N0bAkJCT0gYXRhX3Njc2lfaW9jdGwsCkBAIC0xOTEsNyArMTkwLDcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGFkbWFfYXRhX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhZG1hX2F0YV9wY2lfdGJsW10gPSB7CiAJeyBQQ0lfVkVORE9SX0lEX1BEQywgMHgxODQxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLAogCSAgYm9hcmRfMTg0MV9pZHggfSwKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3BsdXRvLmMgYi9kcml2ZXJzL3Njc2kvcGx1dG8uYwppbmRleCBjODlkYTdkLi40NjYyNGFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcGx1dG8uYworKysgYi9kcml2ZXJzL3Njc2kvcGx1dG8uYwpAQCAtNzEsNyArNzEsNyBAQAogCQl1cCgmZmNfc2VtKTsKIH0KIAotaW50IHBsdXRvX3NsYXZlX2NvbmZpZ3VyZShTY3NpX0RldmljZSAqZGV2aWNlKQoraW50IHBsdXRvX3NsYXZlX2NvbmZpZ3VyZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKmRldmljZSkKIHsKIAlpbnQgZGVwdGhfdG9fdXNlOwogCkBAIC05MCwxMSArOTAsMTEgQEAKIAogLyogRGV0ZWN0IGFsbCBTU0FzIGF0dGFjaGVkIHRvIHRoZSBtYWNoaW5lLgogICAgVG8gYmUgZmFzdCwgZG8gaXQgb24gYWxsIG9ubGluZSBGQyBjaGFubmVscyBhdCB0aGUgc2FtZSB0aW1lLiAqLwotaW50IF9faW5pdCBwbHV0b19kZXRlY3QoU2NzaV9Ib3N0X1RlbXBsYXRlICp0cG50KQoraW50IF9faW5pdCBwbHV0b19kZXRlY3Qoc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqdHBudCkKIHsKIAlpbnQgaSwgcmV0cnksIG5wbHV0b3M7CiAJZmNfY2hhbm5lbCAqZmM7Ci0JU2NzaV9EZXZpY2UgZGV2OworCXN0cnVjdCBzY3NpX2RldmljZSBkZXY7CiAJREVGSU5FX1RJTUVSKGZjX3RpbWVyLCBwbHV0b19kZXRlY3RfdGltZW91dCwgMCwgMCk7CiAKIAl0cG50LT5wcm9jX25hbWUgPSAicGx1dG8iOwpAQCAtMzM5LDcgKzMzOSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBTY3NpX0hvc3RfVGVtcGxhdGUgZHJpdmVyX3RlbXBsYXRlID0geworc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgZHJpdmVyX3RlbXBsYXRlID0gewogCS5uYW1lCQkJPSAiU3BhcmMgU3RvcmFnZSBBcnJheSAxMDAvMjAwIiwKIAkuZGV0ZWN0CQkJPSBwbHV0b19kZXRlY3QsCiAJLnJlbGVhc2UJCT0gcGx1dG9fcmVsZWFzZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9wbHV0by5oIGIvZHJpdmVycy9zY3NpL3BsdXRvLmgKaW5kZXggYmViODQ0YS4uNWRhMjA2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BsdXRvLmgKKysrIGIvZHJpdmVycy9zY3NpL3BsdXRvLmgKQEAgLTM4LDEwICszOCwxMCBAQAogLyogVGhpcyBpcyB0aGUgbWF4IG51bWJlciBvZiBvdXRzdGFuZGluZyBTQ1NJIGNvbW1hbmRzIHBlciBwbHV0byAqLwogI2RlZmluZSBQTFVUT19DQU5fUVVFVUUJCTI1NAogCi1pbnQgcGx1dG9fZGV0ZWN0KFNjc2lfSG9zdF9UZW1wbGF0ZSAqKTsKK2ludCBwbHV0b19kZXRlY3Qoc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqKTsKIGludCBwbHV0b19yZWxlYXNlKHN0cnVjdCBTY3NpX0hvc3QgKik7CiBjb25zdCBjaGFyICogcGx1dG9faW5mbyhzdHJ1Y3QgU2NzaV9Ib3N0ICopOwotaW50IHBsdXRvX3NsYXZlX2NvbmZpZ3VyZShTY3NpX0RldmljZSAqKTsKK2ludCBwbHV0b19zbGF2ZV9jb25maWd1cmUoc3RydWN0IHNjc2lfZGV2aWNlICopOwogCiAjZW5kaWYgLyogIShfUExVVE9fSCkgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3BzaTI0MGkuYyBiL2RyaXZlcnMvc2NzaS9wc2kyNDBpLmMKaW5kZXggNDMyMmM5NS4uNWMyY2RmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BzaTI0MGkuYworKysgYi9kcml2ZXJzL3Njc2kvcHNpMjQwaS5jCkBAIC01MzgsNyArNTM4LDcgQEAKICAqCVJldHVybnM6CQlOdW1iZXIgb2YgYWRhcHRlcnMgZm91bmQuCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50IFBzaTI0MGlfRGV0ZWN0IChTY3NpX0hvc3RfVGVtcGxhdGUgKnRwbnQpCitzdGF0aWMgaW50IFBzaTI0MGlfRGV0ZWN0IChzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICp0cG50KQogCXsKIAlpbnQJCQkJCWJvYXJkOwogCWludAkJCQkJY291bnQgPSAwOwpAQCAtNjY5LDcgKzY2OSw3IEBACiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotc3RhdGljIFNjc2lfSG9zdF9UZW1wbGF0ZSBkcml2ZXJfdGVtcGxhdGUgPSB7CitzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBkcml2ZXJfdGVtcGxhdGUgPSB7CiAJLnByb2NfbmFtZQkJPSAicHNpMjQwaSIsIAogCS5uYW1lCQkJPSAiUFNJLTI0MEkgRUlERSBEaXNrIENvbnRyb2xsZXIiLAogCS5kZXRlY3QJCQk9IFBzaTI0MGlfRGV0ZWN0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTEyODAuYyBiL2RyaXZlcnMvc2NzaS9xbGExMjgwLmMKaW5kZXggNjM3ZmI2NS4uMDg3OGY5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTEyODAuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMTI4MC5jCkBAIC00NjUsNyArNDY1LDcgQEAKIAl9CiAJZGV2aWNlLT5xdWV1ZV9kZXB0aCA9IGRlcHRoOwogfQotc3RhdGljIGlubGluZSBzdHJ1Y3QgU2NzaV9Ib3N0ICpzY3NpX2hvc3RfYWxsb2MoU2NzaV9Ib3N0X1RlbXBsYXRlICp0LCBzaXplX3QgcykKK3N0YXRpYyBpbmxpbmUgc3RydWN0IFNjc2lfSG9zdCAqc2NzaV9ob3N0X2FsbG9jKHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKnQsIHNpemVfdCBzKQogewogCXJldHVybiBzY3NpX3JlZ2lzdGVyKHQsIHMpOwogfQpAQCAtNjM5LDEwICs2MzksOCBAQAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHFsYTEyODBfcGNpX3RibFtdID0gewogCXtQQ0lfVkVORE9SX0lEX1FMT0dJQywgUENJX0RFVklDRV9JRF9RTE9HSUNfSVNQMTIxNjAsCiAJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAotI2lmZGVmIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwXzEwNDAKIAl7UENJX1ZFTkRPUl9JRF9RTE9HSUMsIFBDSV9ERVZJQ0VfSURfUUxPR0lDX0lTUDEwMjAsCiAJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDF9LAotI2VuZGlmCiAJe1BDSV9WRU5ET1JfSURfUUxPR0lDLCBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1AxMDgwLAogCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAyfSwKIAl7UENJX1ZFTkRPUl9JRF9RTE9HSUMsIFBDSV9ERVZJQ0VfSURfUUxPR0lDX0lTUDEyNDAsCkBAIC0xMTc3LDcgKzExNzUsNyBAQAogCiAjaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgMHgwMjA2MDAKIHN0YXRpYyBpbnQKLXFsYTEyODBfZGV0ZWN0KFNjc2lfSG9zdF9UZW1wbGF0ZSAqdGVtcGxhdGUpCitxbGExMjgwX2RldGVjdChzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICp0ZW1wbGF0ZSkKIHsKIAlzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQgPSAmcWxhMTI4MF9wY2lfdGJsWzBdOwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gTlVMTDsKQEAgLTQ1MDcsNyArNDUwNSw3IEBACiAJLnVzZV9jbHVzdGVyaW5nCQk9IEVOQUJMRV9DTFVTVEVSSU5HLAogfTsKICNlbHNlCi1zdGF0aWMgU2NzaV9Ib3N0X1RlbXBsYXRlIHFsYTEyODBfZHJpdmVyX3RlbXBsYXRlID0geworc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgcWxhMTI4MF9kcml2ZXJfdGVtcGxhdGUgPSB7CiAJLnByb2NfbmFtZQkJPSAicWxhMTI4MCIsCiAJLm5hbWUJCQk9ICJRbG9naWMgSVNQIDEyODAvMTIxNjAiLAogCS5kZXRlY3QJCQk9IHFsYTEyODBfZGV0ZWN0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2RiZy5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2RiZy5jCmluZGV4IDg5NzkzYzEuLjVjNWQyMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kYmcuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGJnLmMKQEAgLTk3MCw3ICs5NzAsNyBAQAogCWludAkJcnZhbDsKIAl1aW50MzJfdAljbnQsIHRpbWVyOwogCXVpbnQzMl90CXJpc2NfYWRkcmVzczsKLQl1aW50MTZfdAltYls0XTsKKwl1aW50MTZfdAltYls0XSwgd2Q7CiAKIAl1aW50MzJfdAlzdGF0OwogCXN0cnVjdCBkZXZpY2VfcmVnXzI0eHggX19pb21lbSAqcmVnID0gJmhhLT5pb2Jhc2UtPmlzcDI0OwpAQCAtMTUxNCwxMCArMTUxNCwxMCBAQAogCiAJCVdSVF9SRUdfRFdPUkQoJnJlZy0+Y3RybF9zdGF0dXMsCiAJCSAgICBDU1JYX0lTUF9TT0ZUX1JFU0VUfENTUlhfRE1BX1NIVVRET1dOfE1XQl80MDk2X0JZVEVTKTsKLQkJUkRfUkVHX0RXT1JEKCZyZWctPmN0cmxfc3RhdHVzKTsKKwkJcGNpX3JlYWRfY29uZmlnX3dvcmQoaGEtPnBkZXYsIFBDSV9DT01NQU5ELCAmd2QpOwogCisJCXVkZWxheSgxMDApOwogCQkvKiBXYWl0IGZvciBmaXJtd2FyZSB0byBjb21wbGV0ZSBOVlJBTSBhY2Nlc3Nlcy4gKi8KLQkJdWRlbGF5KDUpOwogCQltYlswXSA9ICh1aW50MzJfdCkgUkRfUkVHX1dPUkQoJnJlZy0+bWFpbGJveDApOwogCQlmb3IgKGNudCA9IDEwMDAwIDsgY250ICYmIG1iWzBdOyBjbnQtLSkgewogCQkJdWRlbGF5KDUpOwpAQCAtMTUyNSw3ICsxNTI1LDcgQEAKIAkJCWJhcnJpZXIoKTsKIAkJfQogCi0JCXVkZWxheSgyMCk7CisJCS8qIFdhaXQgZm9yIHNvZnQtcmVzZXQgdG8gY29tcGxldGUuICovCiAJCWZvciAoY250ID0gMDsgY250IDwgMzAwMDA7IGNudCsrKSB7CiAJCQlpZiAoKFJEX1JFR19EV09SRCgmcmVnLT5jdHJsX3N0YXR1cykgJgogCQkJICAgIENTUlhfSVNQX1NPRlRfUkVTRVQpID09IDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW5pdC5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2luaXQuYwppbmRleCA3MmQ5MDkwLi4yZDcyMDEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW5pdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pbml0LmMKQEAgLTE0Nyw4ICsxNDcsOCBAQAogCQkJCQkgKiBMSVAgdG8gY29tcGxldGUKIAkJCQkJICovCiAKLQkJCQkJaWYgKGF0b21pY19yZWFkKCZoYS0+bG9vcF9zdGF0ZSkgPT0KLQkJCQkJICAgIExPT1BfRE9XTiAmJiByZXRyeS0tKSB7CisJCQkJCWlmIChhdG9taWNfcmVhZCgmaGEtPmxvb3Bfc3RhdGUpICE9CisJCQkJCSAgICBMT09QX1JFQURZICYmIHJldHJ5LS0pIHsKIAkJCQkJCWdvdG8gY2hlY2tfZndfcmVhZHlfYWdhaW47CiAJCQkJCX0KIAkJCQkJd2FpdF90aW1lLS07CkBAIC01NjcsNiArNTY3LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKIAlzdHJ1Y3QgZGV2aWNlX3JlZ18yNHh4IF9faW9tZW0gKnJlZyA9ICZoYS0+aW9iYXNlLT5pc3AyNDsKIAl1aW50MzJfdCBjbnQsIGQyOworCXVpbnQxNl90IHdkOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmhhLT5oYXJkd2FyZV9sb2NrLCBmbGFncyk7CiAKQEAgLTU4MSwxMCArNTgyLDEwIEBACiAKIAlXUlRfUkVHX0RXT1JEKCZyZWctPmN0cmxfc3RhdHVzLAogCSAgICBDU1JYX0lTUF9TT0ZUX1JFU0VUfENTUlhfRE1BX1NIVVRET1dOfE1XQl80MDk2X0JZVEVTKTsKLQlSRF9SRUdfRFdPUkQoJnJlZy0+Y3RybF9zdGF0dXMpOworCXBjaV9yZWFkX2NvbmZpZ193b3JkKGhhLT5wZGV2LCBQQ0lfQ09NTUFORCwgJndkKTsKIAorCXVkZWxheSgxMDApOwogCS8qIFdhaXQgZm9yIGZpcm13YXJlIHRvIGNvbXBsZXRlIE5WUkFNIGFjY2Vzc2VzLiAqLwotCXVkZWxheSg1KTsKIAlkMiA9ICh1aW50MzJfdCkgUkRfUkVHX1dPUkQoJnJlZy0+bWFpbGJveDApOwogCWZvciAoY250ID0gMTAwMDAgOyBjbnQgJiYgZDI7IGNudC0tKSB7CiAJCXVkZWxheSg1KTsKQEAgLTU5Miw3ICs1OTMsNyBAQAogCQliYXJyaWVyKCk7CiAJfQogCi0JdWRlbGF5KDIwKTsKKwkvKiBXYWl0IGZvciBzb2Z0LXJlc2V0IHRvIGNvbXBsZXRlLiAqLwogCWQyID0gUkRfUkVHX0RXT1JEKCZyZWctPmN0cmxfc3RhdHVzKTsKIAlmb3IgKGNudCA9IDYwMDAwMDAgOyBjbnQgJiYgKGQyICYgQ1NSWF9JU1BfU09GVF9SRVNFVCk7IGNudC0tKSB7CiAJCXVkZWxheSg1KTsKQEAgLTEyNTgsOSArMTI1OSwxNSBAQAogCXJ2YWwgPSBxbGEyeDAwX2dldF9hZGFwdGVyX2lkKGhhLAogCSAgICAmbG9vcF9pZCwgJmFsX3BhLCAmYXJlYSwgJmRvbWFpbiwgJnRvcG8pOwogCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKSB7Ci0JCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKLQkJICAgICJFUlJPUiAtLSBVbmFibGUgdG8gZ2V0IGhvc3QgbG9vcCBJRC5cbiIpOwotCQlzZXRfYml0KElTUF9BQk9SVF9ORUVERUQsICZoYS0+ZHBjX2ZsYWdzKTsKKwkJaWYgKExPT1BfTk9UX1JFQURZKGhhKSB8fCBhdG9taWNfcmVhZCgmaGEtPmxvb3BfZG93bl90aW1lcikgfHwKKwkJICAgIChydmFsID09IFFMQV9DT01NQU5EX0VSUk9SICYmIGxvb3BfaWQgPT0gMHg3KSkgeworCQkJREVCVUcyKHByaW50aygiJXMoJWxkKSBMb29wIGlzIGluIGEgdHJhbnNpdGlvbiBzdGF0ZVxuIiwKKwkJCSAgICBfX2Z1bmNfXywgaGEtPmhvc3Rfbm8pKTsKKwkJfSBlbHNlIHsKKwkJCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKKwkJCSAgICAiRVJST1IgLS0gVW5hYmxlIHRvIGdldCBob3N0IGxvb3AgSUQuXG4iKTsKKwkJCXNldF9iaXQoSVNQX0FCT1JUX05FRURFRCwgJmhhLT5kcGNfZmxhZ3MpOworCQl9CiAJCXJldHVybiAocnZhbCk7CiAJfQogCkBAIC0xNzg5LDcgKzE3OTYsNyBAQAogCX0KIAogCWlmIChydmFsID09IFFMQV9TVUNDRVNTICYmIHRlc3RfYml0KFJTQ05fVVBEQVRFLCAmZmxhZ3MpKSB7Ci0JCWlmICh0ZXN0X2JpdChMT09QX1JFU1lOQ19ORUVERUQsICZoYS0+ZHBjX2ZsYWdzKSkgeworCQlpZiAoTE9PUF9OT1RfUkVBRFkoaGEpKSB7CiAJCQlydmFsID0gUUxBX0ZVTkNUSU9OX0ZBSUxFRDsKIAkJfSBlbHNlIHsKIAkJCXJ2YWwgPSBxbGEyeDAwX2NvbmZpZ3VyZV9mYWJyaWMoaGEpOwpAQCAtMjM2Miw4ICsyMzY5LDcgQEAKIAkJaWYgKHFsYTJ4MDBfaXNfcmVzZXJ2ZWRfaWQoaGEsIGxvb3BfaWQpKQogCQkJY29udGludWU7CiAKLQkJaWYgKGF0b21pY19yZWFkKCZoYS0+bG9vcF9kb3duX3RpbWVyKSB8fAotCQkgICAgdGVzdF9iaXQoTE9PUF9SRVNZTkNfTkVFREVELCAmaGEtPmRwY19mbGFncykpCisJCWlmIChhdG9taWNfcmVhZCgmaGEtPmxvb3BfZG93bl90aW1lcikgfHwgTE9PUF9OT1RfUkVBRFkoaGEpKQogCQkJYnJlYWs7CiAKIAkJaWYgKHN3bCAhPSBOVUxMKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbWJ4LmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbWJ4LmMKaW5kZXggYWQzY2FjYi4uOTc0NmNkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX21ieC5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9tYnguYwpAQCAtODY4LDEwICs4NjgsNiBAQAogCURFQlVHMTEocHJpbnRrKCJxbGEyeDAwX2Fib3J0X2NvbW1hbmQoJWxkKTogZW50ZXJlZC5cbiIsIGhhLT5ob3N0X25vKTspCiAKIAlmY3BvcnQgPSBzcC0+ZmNwb3J0OwotCWlmIChhdG9taWNfcmVhZCgmaGEtPmxvb3Bfc3RhdGUpID09IExPT1BfRE9XTiB8fAotCSAgICBhdG9taWNfcmVhZCgmZmNwb3J0LT5zdGF0ZSkgPT0gRkNTX0RFVklDRV9MT1NUKSB7Ci0JCXJldHVybiAxOwotCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZoYS0+aGFyZHdhcmVfbG9jaywgZmxhZ3MpOwogCWZvciAoaGFuZGxlID0gMTsgaGFuZGxlIDwgTUFYX09VVFNUQU5ESU5HX0NPTU1BTkRTOyBoYW5kbGUrKykgewpAQCAtMTAwOCw2ICsxMDA0LDggQEAKIAltY3AtPnRvdiA9IDMwOwogCW1jcC0+ZmxhZ3MgPSAwOwogCXJ2YWwgPSBxbGEyeDAwX21haWxib3hfY29tbWFuZChoYSwgbWNwKTsKKwlpZiAobWNwLT5tYlswXSA9PSBNQlNfQ09NTUFORF9FUlJPUikKKwkJcnZhbCA9IFFMQV9DT01NQU5EX0VSUk9SOwogCiAJLyogUmV0dXJuIGRhdGEuICovCiAJKmlkID0gbWNwLT5tYlsxXTsKQEAgLTIxNzksMTAgKzIxNzcsNiBAQAogCURFQlVHMTEocHJpbnRrKCIlcyglbGQpOiBlbnRlcmVkLlxuIiwgX19mdW5jX18sIGhhLT5ob3N0X25vKTspCiAKIAlmY3BvcnQgPSBzcC0+ZmNwb3J0OwotCWlmIChhdG9taWNfcmVhZCgmaGEtPmxvb3Bfc3RhdGUpID09IExPT1BfRE9XTiB8fAotCSAgICBhdG9taWNfcmVhZCgmZmNwb3J0LT5zdGF0ZSkgPT0gRkNTX0RFVklDRV9MT1NUKSB7Ci0JCXJldHVybiBRTEFfRlVOQ1RJT05fRkFJTEVEOwotCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZoYS0+aGFyZHdhcmVfbG9jaywgZmxhZ3MpOwogCWZvciAoaGFuZGxlID0gMTsgaGFuZGxlIDwgTUFYX09VVFNUQU5ESU5HX0NPTU1BTkRTOyBoYW5kbGUrKykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX3N1cC5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX3N1cC5jCmluZGV4IDRiZWMwYjQuLmQ1NGQyYTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9zdXAuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfc3VwLmMKQEAgLTEyNiw2ICsxMjYsNyBAQAogCiAJLyogV2FpdCBmb3IgTlZSQU0gdG8gYmVjb21lIHJlYWR5ICovCiAJV1JUX1JFR19XT1JEKCZyZWctPm52cmFtLCBOVlJfU0VMRUNUKTsKKwlSRF9SRUdfV09SRCgmcmVnLT5udnJhbSk7CQkvKiBQQ0kgUG9zdGluZy4gKi8KIAlkbyB7CiAJCU5WUkFNX0RFTEFZKCk7CiAJCXdvcmQgPSBSRF9SRUdfV09SRCgmcmVnLT5udnJhbSk7CkBAIC0xNzgsNiArMTc5LDcgQEAKIAogCS8qIFdhaXQgZm9yIE5WUkFNIHRvIGJlY29tZSByZWFkeSAqLwogCVdSVF9SRUdfV09SRCgmcmVnLT5udnJhbSwgTlZSX1NFTEVDVCk7CisJUkRfUkVHX1dPUkQoJnJlZy0+bnZyYW0pOwkJLyogUENJIFBvc3RpbmcuICovCiAJZG8gewogCQlOVlJBTV9ERUxBWSgpOwogCQl3b3JkID0gUkRfUkVHX1dPUkQoJnJlZy0+bnZyYW0pOwpAQCAtMjM1LDYgKzIzNyw3IEBACiAJLyogUmVhZCBkYXRhIGZyb20gTlZSQU0uICovCiAJZm9yIChjbnQgPSAwOyBjbnQgPCAxNjsgY250KyspIHsKIAkJV1JUX1JFR19XT1JEKCZyZWctPm52cmFtLCBOVlJfU0VMRUNUIHwgTlZSX0NMT0NLKTsKKwkJUkRfUkVHX1dPUkQoJnJlZy0+bnZyYW0pOwkvKiBQQ0kgUG9zdGluZy4gKi8KIAkJTlZSQU1fREVMQVkoKTsKIAkJZGF0YSA8PD0gMTsKIAkJcmVnX2RhdGEgPSBSRF9SRUdfV09SRCgmcmVnLT5udnJhbSk7CkBAIC0zMzcsNiArMzQwLDcgQEAKIAogCQkvKiBXYWl0IGZvciBOVlJBTSB0byBiZWNvbWUgcmVhZHkuICovCiAJCVdSVF9SRUdfV09SRCgmcmVnLT5udnJhbSwgTlZSX1NFTEVDVCk7CisJCVJEX1JFR19XT1JEKCZyZWctPm52cmFtKTsJLyogUENJIFBvc3RpbmcuICovCiAJCWRvIHsKIAkJCU5WUkFNX0RFTEFZKCk7CiAJCQl3b3JkID0gUkRfUkVHX1dPUkQoJnJlZy0+bnZyYW0pOwpAQCAtMzg4LDYgKzM5Miw3IEBACiAKIAkvKiBXYWl0IGZvciBOVlJBTSB0byBiZWNvbWUgcmVhZHkuICovCiAJV1JUX1JFR19XT1JEKCZyZWctPm52cmFtLCBOVlJfU0VMRUNUKTsKKwlSRF9SRUdfV09SRCgmcmVnLT5udnJhbSk7CQkvKiBQQ0kgUG9zdGluZy4gKi8KIAlkbyB7CiAJCU5WUkFNX0RFTEFZKCk7CiAJCXdvcmQgPSBSRF9SRUdfV09SRCgmcmVnLT5udnJhbSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfdmVyc2lvbi5oIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX3ZlcnNpb24uaAppbmRleCAwZDU0NzJmLi5mNzkzN2Y3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfdmVyc2lvbi5oCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV92ZXJzaW9uLmgKQEAgLTcsOSArNyw5IEBACiAvKgogICogRHJpdmVyIHZlcnNpb24KICAqLwotI2RlZmluZSBRTEEyWFhYX1ZFUlNJT04gICAgICAiOC4wMS4wMC1rIgorI2RlZmluZSBRTEEyWFhYX1ZFUlNJT04gICAgICAiOC4wMS4wMy1rIgogCiAjZGVmaW5lIFFMQV9EUklWRVJfTUFKT1JfVkVSCTgKICNkZWZpbmUgUUxBX0RSSVZFUl9NSU5PUl9WRVIJMQotI2RlZmluZSBRTEFfRFJJVkVSX1BBVENIX1ZFUgkwCisjZGVmaW5lIFFMQV9EUklWRVJfUEFUQ0hfVkVSCTMKICNkZWZpbmUgUUxBX0RSSVZFUl9CRVRBX1ZFUgkwCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxvZ2ljZmFzLmMgYi9kcml2ZXJzL3Njc2kvcWxvZ2ljZmFzLmMKaW5kZXggNTVlNjk4Yi4uOTRiYWNhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Fsb2dpY2Zhcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbG9naWNmYXMuYwpAQCAtNDcsNyArNDcsNyBAQAogICoJTG9vayBmb3IgcWxvZ2ljIGNhcmQgYW5kIGluaXQgaWYgZm91bmQgCiAgKi8KICAKLXN0YXRpYyBzdHJ1Y3QgU2NzaV9Ib3N0ICpfX3Fsb2dpY2Zhc19kZXRlY3QoU2NzaV9Ib3N0X1RlbXBsYXRlICpob3N0LAorc3RhdGljIHN0cnVjdCBTY3NpX0hvc3QgKl9fcWxvZ2ljZmFzX2RldGVjdChzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICpob3N0LAogCQkJCQkJCQlpbnQgcWJhc2UsCiAJCQkJCQkJCWludCBxbGlycSkKIHsKQEAgLTE0Miw3ICsxNDIsNyBAQAogTU9EVUxFX1BBUk1fREVTQyhpb2Jhc2UsICJJL08gYWRkcmVzcyIpOwogTU9EVUxFX1BBUk1fREVTQyhpcnEsICJJUlEiKTsKIAotc3RhdGljIGludCBfX2RldmluaXQgcWxvZ2ljZmFzX2RldGVjdChTY3NpX0hvc3RfVGVtcGxhdGUgKnNodCkKK3N0YXRpYyBpbnQgX19kZXZpbml0IHFsb2dpY2Zhc19kZXRlY3Qoc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqc2h0KQogewogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0OwogCXN0cnVjdCBxbG9naWNmYXM0MDhfcHJpdiAqcHJpdjsKQEAgLTE4Myw3ICsxODMsNyBAQAogLyoKICAqCVRoZSBkcml2ZXIgdGVtcGxhdGUgaXMgYWxzbyBuZWVkZWQgZm9yIFBDTUNJQQogICovCi1zdGF0aWMgU2NzaV9Ib3N0X1RlbXBsYXRlIHFsb2dpY2Zhc19kcml2ZXJfdGVtcGxhdGUgPSB7CitzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBxbG9naWNmYXNfZHJpdmVyX3RlbXBsYXRlID0gewogCS5tb2R1bGUJCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQkJPSBxbG9naWNmYXNfbmFtZSwKIAkucHJvY19uYW1lCQk9IHFsb2dpY2Zhc19uYW1lLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Fsb2dpY2ZjLmMgYi9kcml2ZXJzL3Njc2kvcWxvZ2ljZmMuYwppbmRleCBhNGIzYjNmLi45NGVmM2YwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxvZ2ljZmMuYworKysgYi9kcml2ZXJzL3Njc2kvcWxvZ2ljZmMuYwpAQCAtNzExLDcgKzcxMSw3IEBACiB9CiAKIAotc3RhdGljIGludCBpc3AyeDAwX2RldGVjdChTY3NpX0hvc3RfVGVtcGxhdGUgKiB0bXB0KQorc3RhdGljIGludCBpc3AyeDAwX2RldGVjdChzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICogdG1wdCkKIHsKIAlpbnQgaG9zdHMgPSAwOwogCXVuc2lnbmVkIGxvbmcgd2FpdF90aW1lOwpAQCAtMjIxMCw3ICsyMjEwLDcgQEAKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi1zdGF0aWMgU2NzaV9Ib3N0X1RlbXBsYXRlIGRyaXZlcl90ZW1wbGF0ZSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGRyaXZlcl90ZW1wbGF0ZSA9IHsKICAgICAgICAgLmRldGVjdCAgICAgICAgICAgICAgICAgPSBpc3AyeDAwX2RldGVjdCwKICAgICAgICAgLnJlbGVhc2UgICAgICAgICAgICAgICAgPSBpc3AyeDAwX3JlbGVhc2UsCiAgICAgICAgIC5pbmZvICAgICAgICAgICAgICAgICAgID0gaXNwMngwMF9pbmZvLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Fsb2dpY2lzcC5jIGIvZHJpdmVycy9zY3NpL3Fsb2dpY2lzcC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzkyNjZiLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc2NzaS9xbG9naWNpc3AuYworKysgL2Rldi9udWxsCkBAIC0xLDE5MzQgKzAsMCBAQAotLyoKLSAqIFFMb2dpYyBJU1AxMDIwIEludGVsbGlnZW50IFNDU0kgUHJvY2Vzc29yIERyaXZlciAoUENJKQotICogV3JpdHRlbiBieSBFcmlrIEguIE1vZSwgZWhtQGNyaXMuY29tCi0gKiBDb3B5cmlnaHQgMTk5NSwgRXJpayBILiBNb2UKLSAqIENvcHlyaWdodCAxOTk2LCAxOTk3ICBNaWNoYWVsIEEuIEdyaWZmaXRoIDxncmlmQGFjbS5vcmc+Ci0gKiBDb3B5cmlnaHQgMjAwMCwgSmF5c29uIEMuIFZhbnR1eWwgPHZhbnR1eWxAY3NjLnNtc3UuZWR1PgotICogICAgICAgICAgICAgYW5kIEJyeW9uIFcuIFJvY2hlICAgIDxicnlvbkBjc2Muc21zdS5lZHU+Ci0gKgotICogNjQtYml0IGFkZHJlc3NpbmcgYWRkZWQgYnkgS2Fub2ogU2FyY2FyIDxrYW5vakBzZ2kuY29tPgotICogCQkJICAgYW5kIExlbyBEYWd1bSAgICA8ZGFndW1Ac2dpLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55Ci0gKiBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KLSNpbmNsdWRlICJzY3NpLmgiCi0jaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KLQotLyoKLSAqIFdpdGggdGhlIHFsb2dpYyBpbnRlcmZhY2UsIGV2ZXJ5IHF1ZXVlIHNsb3QgY2FuIGhvbGQgYSBTQ1NJCi0gKiBjb21tYW5kIHdpdGggdXAgdG8gNCBzY2F0dGVyL2dhdGhlciBlbnRyaWVzLiAgSWYgd2UgbmVlZCBtb3JlCi0gKiB0aGFuIDQgZW50cmllcywgY29udGludWF0aW9uIGVudHJpZXMgY2FuIGJlIHVzZWQgdGhhdCBob2xkCi0gKiBhbm90aGVyIDcgZW50cmllcyBlYWNoLiAgVW5saWtlIGZvciBvdGhlciBkcml2ZXJzLCB0aGlzIG1lYW5zCi0gKiB0aGF0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBzY2F0dGVyL2dhdGhlciBlbnRyaWVzIHdlIGNhbgotICogc3VwcG9ydCBhdCBhbnkgZ2l2ZW4gdGltZSBpcyBhIGZ1bmN0aW9uIG9mIHRoZSBudW1iZXIgb2YgcXVldWUKLSAqIHNsb3RzIGF2YWlsYWJsZS4gIFRoYXQgaXMsIGhvc3QtPmNhbl9xdWV1ZSBhbmQgaG9zdC0+c2dfdGFibGVzaXplCi0gKiBhcmUgZHluYW1pYyBhbmQgX25vdF8gaW5kZXBlbmRlbnQuICBUaGlzIGFsbCB3b3JrcyBmaW5lIGJlY2F1c2UKLSAqIHJlcXVlc3RzIGFyZSBxdWV1ZWQgc2VyaWFsbHkgYW5kIHRoZSBzY2F0dGVyL2dhdGhlciBsaW1pdCBpcwotICogZGV0ZXJtaW5lZCBmb3IgZWFjaCBxdWV1ZSByZXF1ZXN0IGFuZXcuCi0gKi8KLSNkZWZpbmUgUUxPR0lDSVNQX1JFUV9RVUVVRV9MRU4JNjMJLyogbXVzdCBiZSBwb3dlciBvZiB0d28gLSAxICovCi0jZGVmaW5lIFFMT0dJQ0lTUF9NQVhfU0cocWwpCSg0ICsgKChxbCkgPiAwKSA/IDcqKChxbCkgLSAxKSA6IDApCi0KLS8qIENvbmZpZ3VyYXRpb24gc2VjdGlvbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogU2V0IHRoZSBmb2xsb3dpbmcgbWFjcm8gdG8gMSB0byByZWxvYWQgdGhlIElTUDEwMjAncyBmaXJtd2FyZS4gIFRoaXMgaXMKLSAgIHRoZSBsYXRlc3QgZmlybXdhcmUgcHJvdmlkZWQgYnkgUUxvZ2ljLiAgVGhpcyBtYXkgYmUgYW4gZWFybGllci9sYXRlcgotICAgcmV2aXNpb24gdGhhbiBzdXBwbGllZCBieSB5b3VyIGJvYXJkLiAqLwotCi0jZGVmaW5lIFJFTE9BRF9GSVJNV0FSRQkJMQotCi0vKiBTZXQgdGhlIGZvbGxvd2luZyBtYWNybyB0byAxIHRvIHJlbG9hZCB0aGUgSVNQMTAyMCdzIGRlZmF1bHRzIGZyb20gbnZyYW0uCi0gICBJZiB5b3UgYXJlIG5vdCBzdXJlIG9mIHlvdXIgc2V0dGluZ3MsIGxlYXZlIHRoaXMgYWxvbmUsIHRoZSBkcml2ZXIgd2lsbAotICAgdXNlIGEgc2V0IG9mICdzYWZlJyBkZWZhdWx0cyAqLwotCi0jZGVmaW5lIFVTRV9OVlJBTV9ERUZBVUxUUwkwCi0KLS8qICBNYWNyb3MgdXNlZCBmb3IgZGVidWdnaW5nICovCi0KLSNkZWZpbmUgREVCVUdfSVNQMTAyMAkJMAotI2RlZmluZSBERUJVR19JU1AxMDIwX0lOVFIJMAotI2RlZmluZSBERUJVR19JU1AxMDIwX1NFVFVQCTAKLSNkZWZpbmUgVFJBQ0VfSVNQCQkwCi0KLSNkZWZpbmUgREVGQVVMVF9MT09QX0NPVU5UCTEwMDAwMDAKLQotLyogRW5kIENvbmZpZ3VyYXRpb24gc2VjdGlvbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0KLSNpZiBUUkFDRV9JU1AKLQotIyBkZWZpbmUgVFJBQ0VfQlVGX0xFTgkoMzIqMTAyNCkKLQotc3RydWN0IHsKLQl1X2xvbmcJCW5leHQ7Ci0Jc3RydWN0IHsKLQkJdV9sb25nCQl0aW1lOwotCQl1X2ludAkJaW5kZXg7Ci0JCXVfaW50CQlhZGRyOwotCQl1X2NoYXIgKgluYW1lOwotCX0gYnVmW1RSQUNFX0JVRl9MRU5dOwotfSB0cmFjZTsKLQotI2RlZmluZSBUUkFDRSh3LCBpLCBhKQkJCQkJCVwKLXsJCQkJCQkJCVwKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwkJCQkJXAotCQkJCQkJCQlcCi0JdHJhY2UuYnVmW3RyYWNlLm5leHRdLm5hbWUgID0gKHcpOwkJCVwKLQl0cmFjZS5idWZbdHJhY2UubmV4dF0udGltZSAgPSBqaWZmaWVzOwkJCVwKLQl0cmFjZS5idWZbdHJhY2UubmV4dF0uaW5kZXggPSAoaSk7CQkJXAotCXRyYWNlLmJ1Zlt0cmFjZS5uZXh0XS5hZGRyICA9IChsb25nKSAoYSk7CQlcCi0JdHJhY2UubmV4dCA9ICh0cmFjZS5uZXh0ICsgMSkgJiAoVFJBQ0VfQlVGX0xFTiAtIDEpOwlcCi19Ci0KLSNlbHNlCi0jIGRlZmluZSBUUkFDRSh3LCBpLCBhKQotI2VuZGlmCi0KLSNpZiBERUJVR19JU1AxMDIwCi0jZGVmaW5lIEVOVEVSKHgpCXByaW50aygiaXNwMTAyMCA6IGVudGVyaW5nICVzKClcbiIsIHgpOwotI2RlZmluZSBMRUFWRSh4KQlwcmludGsoImlzcDEwMjAgOiBsZWF2aW5nICVzKClcbiIsIHgpOwotI2RlZmluZSBERUJVRyh4KQl4Ci0jZWxzZQotI2RlZmluZSBFTlRFUih4KQotI2RlZmluZSBMRUFWRSh4KQotI2RlZmluZSBERUJVRyh4KQotI2VuZGlmIC8qIERFQlVHX0lTUDEwMjAgKi8KLQotI2lmIERFQlVHX0lTUDEwMjBfSU5UUgotI2RlZmluZSBFTlRFUl9JTlRSKHgpCXByaW50aygiaXNwMTAyMCA6IGVudGVyaW5nICVzKClcbiIsIHgpOwotI2RlZmluZSBMRUFWRV9JTlRSKHgpCXByaW50aygiaXNwMTAyMCA6IGxlYXZpbmcgJXMoKVxuIiwgeCk7Ci0jZGVmaW5lIERFQlVHX0lOVFIoeCkJeAotI2Vsc2UKLSNkZWZpbmUgRU5URVJfSU5UUih4KQotI2RlZmluZSBMRUFWRV9JTlRSKHgpCi0jZGVmaW5lIERFQlVHX0lOVFIoeCkKLSNlbmRpZiAvKiBERUJVRyBJU1AxMDIwX0lOVFIgKi8KLQotI2RlZmluZSBJU1AxMDIwX1JFVl9JRAkxCi0KLSNkZWZpbmUgTUFYX1RBUkdFVFMJMTYKLSNkZWZpbmUgTUFYX0xVTlMJOAotCi0vKiBob3N0IGNvbmZpZ3VyYXRpb24gYW5kIGNvbnRyb2wgcmVnaXN0ZXJzICovCi0jZGVmaW5lIEhPU1RfSENDUgkweGMwCS8qIGhvc3QgY29tbWFuZCBhbmQgY29udHJvbCAqLwotCi0vKiBwY2kgYnVzIGludGVyZmFjZSByZWdpc3RlcnMgKi8KLSNkZWZpbmUgUENJX0lEX0xPVwkweDAwCS8qIHZlbmRvciBpZCAqLwotI2RlZmluZSBQQ0lfSURfSElHSAkweDAyCS8qIGRldmljZSBpZCAqLwotI2RlZmluZSBJU1BfQ0ZHMAkweDA0CS8qIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgIzAgKi8KLSNkZWZpbmUgIElTUF9DRkcwX0hXTVNLICAweDAwMGYJLyogSGFyZHdhcmUgcmV2aXNpb24gbWFzayAqLwotI2RlZmluZSAgSVNQX0NGRzBfMTAyMAkgMHgwMDAxIC8qIElTUDEwMjAgKi8KLSNkZWZpbmUgIElTUF9DRkcwXzEwMjBBCSAweDAwMDIgLyogSVNQMTAyMEEgKi8KLSNkZWZpbmUgIElTUF9DRkcwXzEwNDAJIDB4MDAwMyAvKiBJU1AxMDQwICovCi0jZGVmaW5lICBJU1BfQ0ZHMF8xMDQwQQkgMHgwMDA0IC8qIElTUDEwNDBBICovCi0jZGVmaW5lICBJU1BfQ0ZHMF8xMDQwQgkgMHgwMDA1IC8qIElTUDEwNDBCICovCi0jZGVmaW5lICBJU1BfQ0ZHMF8xMDQwQwkgMHgwMDA2IC8qIElTUDEwNDBDICovCi0jZGVmaW5lIElTUF9DRkcxCTB4MDYJLyogY29uZmlndXJhdGlvbiByZWdpc3RlciAjMSAqLwotI2RlZmluZSAgSVNQX0NGRzFfRjEyOAkgMHgwMDQwCS8qIDEyOC1ieXRlIEZJRk8gdGhyZXNob2xkICovCi0jZGVmaW5lICBJU1BfQ0ZHMV9GNjQJIDB4MDAzMAkvKiAxMjgtYnl0ZSBGSUZPIHRocmVzaG9sZCAqLwotI2RlZmluZSAgSVNQX0NGRzFfRjMyCSAweDAwMjAJLyogMTI4LWJ5dGUgRklGTyB0aHJlc2hvbGQgKi8KLSNkZWZpbmUgIElTUF9DRkcxX0YxNgkgMHgwMDEwCS8qIDEyOC1ieXRlIEZJRk8gdGhyZXNob2xkICovCi0jZGVmaW5lICBJU1BfQ0ZHMV9CRU5BQgkgMHgwMDA0CS8qIEdsb2JhbCBCdXMgYnVyc3QgZW5hYmxlICovCi0jZGVmaW5lICBJU1BfQ0ZHMV9TWFAJIDB4MDAwMQkvKiBTWFAgcmVnaXN0ZXIgc2VsZWN0ICovCi0jZGVmaW5lIFBDSV9JTlRGX0NUTAkweDA4CS8qIHBjaSBpbnRlcmZhY2UgY29udHJvbCAqLwotI2RlZmluZSBQQ0lfSU5URl9TVFMJMHgwYQkvKiBwY2kgaW50ZXJmYWNlIHN0YXR1cyAqLwotI2RlZmluZSBQQ0lfU0VNQVBIT1JFCTB4MGMJLyogcGNpIHNlbWFwaG9yZSAqLwotI2RlZmluZSBQQ0lfTlZSQU0JMHgwZQkvKiBwY2kgbnZyYW0gaW50ZXJmYWNlICovCi0jZGVmaW5lIENETUFfQ09ORgkweDIwCS8qIENvbW1hbmQgRE1BIENvbmZpZyAqLwotI2RlZmluZSBERE1BX0NPTkYJMHg0MAkvKiBEYXRhIERNQSBDb25maWcgKi8KLSNkZWZpbmUgIERNQV9DT05GX1NFTkFCCSAweDAwMDgJLyogU1hQIHRvIERNQSBEYXRhIGVuYWJsZSAqLwotI2RlZmluZSAgRE1BX0NPTkZfUklSUQkgMHgwMDA0CS8qIFJJU0MgaW50ZXJydXB0IGVuYWJsZSAqLwotI2RlZmluZSAgRE1BX0NPTkZfQkVOQUIJIDB4MDAwMgkvKiBCdXMgYnVyc3QgZW5hYmxlICovCi0jZGVmaW5lICBETUFfQ09ORl9ESVIJIDB4MDAwMQkvKiBETUEgZGlyZWN0aW9uICgwPWZpZm8tPmhvc3QgMT1ob3N0LT5maWZvKSAqLwotCi0vKiBtYWlsYm94IHJlZ2lzdGVycyAqLwotI2RlZmluZSBNQk9YMAkJMHg3MAkvKiBtYWlsYm94IDAgKi8KLSNkZWZpbmUgTUJPWDEJCTB4NzIJLyogbWFpbGJveCAxICovCi0jZGVmaW5lIE1CT1gyCQkweDc0CS8qIG1haWxib3ggMiAqLwotI2RlZmluZSBNQk9YMwkJMHg3NgkvKiBtYWlsYm94IDMgKi8KLSNkZWZpbmUgTUJPWDQJCTB4NzgJLyogbWFpbGJveCA0ICovCi0jZGVmaW5lIE1CT1g1CQkweDdhCS8qIG1haWxib3ggNSAqLwotI2RlZmluZSBNQk9YNiAgICAgICAgICAgMHg3YyAgICAvKiBtYWlsYm94IDYgKi8KLSNkZWZpbmUgTUJPWDcgICAgICAgICAgIDB4N2UgICAgLyogbWFpbGJveCA3ICovCi0KLS8qIG1haWxib3ggY29tbWFuZCBjb21wbGV0ZSBzdGF0dXMgY29kZXMgKi8KLSNkZWZpbmUgTUJPWF9DT01NQU5EX0NPTVBMRVRFCQkweDQwMDAKLSNkZWZpbmUgSU5WQUxJRF9DT01NQU5ECQkJMHg0MDAxCi0jZGVmaW5lIEhPU1RfSU5URVJGQUNFX0VSUk9SCQkweDQwMDIKLSNkZWZpbmUgVEVTVF9GQUlMRUQJCQkweDQwMDMKLSNkZWZpbmUgQ09NTUFORF9FUlJPUgkJCTB4NDAwNQotI2RlZmluZSBDT01NQU5EX1BBUkFNX0VSUk9SCQkweDQwMDYKLQotLyogYXN5bmMgZXZlbnQgc3RhdHVzIGNvZGVzICovCi0jZGVmaW5lIEFTWU5DX1NDU0lfQlVTX1JFU0VUCQkweDgwMDEKLSNkZWZpbmUgU1lTVEVNX0VSUk9SCQkJMHg4MDAyCi0jZGVmaW5lIFJFUVVFU1RfVFJBTlNGRVJfRVJST1IJCTB4ODAwMwotI2RlZmluZSBSRVNQT05TRV9UUkFOU0ZFUl9FUlJPUgkJMHg4MDA0Ci0jZGVmaW5lIFJFUVVFU1RfUVVFVUVfV0FLRVVQCQkweDgwMDUKLSNkZWZpbmUgRVhFQ1VUSU9OX1RJTUVPVVRfUkVTRVQJCTB4ODAwNgotCi0jaWZkZWYgQ09ORklHX1FMX0lTUF9BNjQKLSNkZWZpbmUgSU9DQl9TRUdTICAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIENPTlRJTlVBVElPTl9TRUdTICAgICAgICAgICAgICAgNQotI2RlZmluZSBNQVhfQ09OVElOVUFUSU9OX0VOVFJJRVMgICAgICAgIDI1NAotI2Vsc2UKLSNkZWZpbmUgSU9DQl9TRUdTICAgICAgICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lIENPTlRJTlVBVElPTl9TRUdTICAgICAgICAgICAgICAgNwotI2VuZGlmIC8qIENPTkZJR19RTF9JU1BfQTY0ICovCi0KLXN0cnVjdCBFbnRyeV9oZWFkZXIgewotCXVfY2hhcgllbnRyeV90eXBlOwotCXVfY2hhcgllbnRyeV9jbnQ7Ci0JdV9jaGFyCXN5c19kZWZfMTsKLQl1X2NoYXIJZmxhZ3M7Ci19OwotCi0vKiBlbnRyeSBoZWFkZXIgdHlwZSBjb21tYW5kcyAqLwotI2lmZGVmIENPTkZJR19RTF9JU1BfQTY0Ci0jZGVmaW5lIEVOVFJZX0NPTU1BTkQgICAgICAgICAgIDkKLSNkZWZpbmUgRU5UUllfQ09OVElOVUFUSU9OICAgICAgMHhhCi0jZWxzZQotI2RlZmluZSBFTlRSWV9DT01NQU5ECQkxCi0jZGVmaW5lIEVOVFJZX0NPTlRJTlVBVElPTgkyCi0jZW5kaWYgLyogQ09ORklHX1FMX0lTUF9BNjQgKi8KLQotI2RlZmluZSBFTlRSWV9TVEFUVVMJCTMKLSNkZWZpbmUgRU5UUllfTUFSS0VSCQk0Ci0jZGVmaW5lIEVOVFJZX0VYVEVOREVEX0NPTU1BTkQJNQotCi0vKiBlbnRyeSBoZWFkZXIgZmxhZyBkZWZpbml0aW9ucyAqLwotI2RlZmluZSBFRkxBR19DT05USU5VQVRJT04JMQotI2RlZmluZSBFRkxBR19CVVNZCQkyCi0jZGVmaW5lIEVGTEFHX0JBRF9IRUFERVIJNAotI2RlZmluZSBFRkxBR19CQURfUEFZTE9BRAk4Ci0KLXN0cnVjdCBkYXRhc2VnIHsKLQl1X2ludAkJCWRfYmFzZTsKLSNpZmRlZiBDT05GSUdfUUxfSVNQX0E2NAotCXVfaW50ICAgICAgICAgICAgICAgICAgIGRfYmFzZV9oaTsKLSNlbmRpZgotCXVfaW50CQkJZF9jb3VudDsKLX07Ci0KLXN0cnVjdCBDb21tYW5kX0VudHJ5IHsKLQlzdHJ1Y3QgRW50cnlfaGVhZGVyCWhkcjsKLQl1X2ludAkJCWhhbmRsZTsKLQl1X2NoYXIJCQl0YXJnZXRfbHVuOwotCXVfY2hhcgkJCXRhcmdldF9pZDsKLQl1X3Nob3J0CQkJY2RiX2xlbmd0aDsKLQl1X3Nob3J0CQkJY29udHJvbF9mbGFnczsKLQl1X3Nob3J0CQkJcnN2ZDsKLQl1X3Nob3J0CQkJdGltZV9vdXQ7Ci0JdV9zaG9ydAkJCXNlZ21lbnRfY250OwotCXVfY2hhcgkJCWNkYlsxMl07Ci0jaWZkZWYgQ09ORklHX1FMX0lTUF9BNjQKLQl1X2ludCAgICAgICAgICAgICAgICAgICByc3ZkMTsKLQl1X2ludCAgICAgICAgICAgICAgICAgICByc3ZkMjsKLSNlbmRpZgotCXN0cnVjdCBkYXRhc2VnCQlkYXRhc2VnW0lPQ0JfU0VHU107Ci19OwotCi0vKiBjb21tYW5kIGVudHJ5IGNvbnRyb2wgZmxhZyBkZWZpbml0aW9ucyAqLwotI2RlZmluZSBDRkxBR19OT0RJU0MJCTB4MDEKLSNkZWZpbmUgQ0ZMQUdfSEVBRF9UQUcJCTB4MDIKLSNkZWZpbmUgQ0ZMQUdfT1JERVJFRF9UQUcJMHgwNAotI2RlZmluZSBDRkxBR19TSU1QTEVfVEFHCTB4MDgKLSNkZWZpbmUgQ0ZMQUdfVEFSX1JUTgkJMHgxMAotI2RlZmluZSBDRkxBR19SRUFECQkweDIwCi0jZGVmaW5lIENGTEFHX1dSSVRFCQkweDQwCi0KLXN0cnVjdCBFeHRfQ29tbWFuZF9FbnRyeSB7Ci0Jc3RydWN0IEVudHJ5X2hlYWRlcgloZHI7Ci0JdV9pbnQJCQloYW5kbGU7Ci0JdV9jaGFyCQkJdGFyZ2V0X2x1bjsKLQl1X2NoYXIJCQl0YXJnZXRfaWQ7Ci0JdV9zaG9ydAkJCWNkYl9sZW5ndGg7Ci0JdV9zaG9ydAkJCWNvbnRyb2xfZmxhZ3M7Ci0JdV9zaG9ydAkJCXJzdmQ7Ci0JdV9zaG9ydAkJCXRpbWVfb3V0OwotCXVfc2hvcnQJCQlzZWdtZW50X2NudDsKLQl1X2NoYXIJCQljZGJbNDRdOwotfTsKLQotc3RydWN0IENvbnRpbnVhdGlvbl9FbnRyeSB7Ci0Jc3RydWN0IEVudHJ5X2hlYWRlcgloZHI7Ci0jaWZuZGVmIENPTkZJR19RTF9JU1BfQTY0Ci0JdV9pbnQJCQlyZXNlcnZlZDsKLSNlbmRpZgotCXN0cnVjdCBkYXRhc2VnCQlkYXRhc2VnW0NPTlRJTlVBVElPTl9TRUdTXTsKLX07Ci0KLXN0cnVjdCBNYXJrZXJfRW50cnkgewotCXN0cnVjdCBFbnRyeV9oZWFkZXIJaGRyOwotCXVfaW50CQkJcmVzZXJ2ZWQ7Ci0JdV9jaGFyCQkJdGFyZ2V0X2x1bjsKLQl1X2NoYXIJCQl0YXJnZXRfaWQ7Ci0JdV9jaGFyCQkJbW9kaWZpZXI7Ci0JdV9jaGFyCQkJcnN2ZDsKLQl1X2NoYXIJCQlyc3Zkc1s1Ml07Ci19OwotCi0vKiBtYXJrZXIgZW50cnkgbW9kaWZpZXIgZGVmaW5pdGlvbnMgKi8KLSNkZWZpbmUgU1lOQ19ERVZJQ0UJMAotI2RlZmluZSBTWU5DX1RBUkdFVAkxCi0jZGVmaW5lIFNZTkNfQUxMCTIKLQotc3RydWN0IFN0YXR1c19FbnRyeSB7Ci0Jc3RydWN0IEVudHJ5X2hlYWRlcgloZHI7Ci0JdV9pbnQJCQloYW5kbGU7Ci0JdV9zaG9ydAkJCXNjc2lfc3RhdHVzOwotCXVfc2hvcnQJCQljb21wbGV0aW9uX3N0YXR1czsKLQl1X3Nob3J0CQkJc3RhdGVfZmxhZ3M7Ci0JdV9zaG9ydAkJCXN0YXR1c19mbGFnczsKLQl1X3Nob3J0CQkJdGltZTsKLQl1X3Nob3J0CQkJcmVxX3NlbnNlX2xlbjsKLQl1X2ludAkJCXJlc2lkdWFsOwotCXVfY2hhcgkJCXJzdmRbOF07Ci0JdV9jaGFyCQkJcmVxX3NlbnNlX2RhdGFbMzJdOwotfTsKLQotLyogc3RhdHVzIGVudHJ5IGNvbXBsZXRpb24gc3RhdHVzIGRlZmluaXRpb25zICovCi0jZGVmaW5lIENTX0NPTVBMRVRFCQkJMHgwMDAwCi0jZGVmaW5lIENTX0lOQ09NUExFVEUJCQkweDAwMDEKLSNkZWZpbmUgQ1NfRE1BX0VSUk9SCQkJMHgwMDAyCi0jZGVmaW5lIENTX1RSQU5TUE9SVF9FUlJPUgkJMHgwMDAzCi0jZGVmaW5lIENTX1JFU0VUX09DQ1VSUkVECQkweDAwMDQKLSNkZWZpbmUgQ1NfQUJPUlRFRAkJCTB4MDAwNQotI2RlZmluZSBDU19USU1FT1VUCQkJMHgwMDA2Ci0jZGVmaW5lIENTX0RBVEFfT1ZFUlJVTgkJCTB4MDAwNwotI2RlZmluZSBDU19DT01NQU5EX09WRVJSVU4JCTB4MDAwOAotI2RlZmluZSBDU19TVEFUVVNfT1ZFUlJVTgkJMHgwMDA5Ci0jZGVmaW5lIENTX0JBRF9NRVNTQUdFCQkJMHgwMDBhCi0jZGVmaW5lIENTX05PX01FU1NBR0VfT1VUCQkweDAwMGIKLSNkZWZpbmUgQ1NfRVhUX0lEX0ZBSUxFRAkJMHgwMDBjCi0jZGVmaW5lIENTX0lERV9NU0dfRkFJTEVECQkweDAwMGQKLSNkZWZpbmUgQ1NfQUJPUlRfTVNHX0ZBSUxFRAkJMHgwMDBlCi0jZGVmaW5lIENTX1JFSkVDVF9NU0dfRkFJTEVECQkweDAwMGYKLSNkZWZpbmUgQ1NfTk9QX01TR19GQUlMRUQJCTB4MDAxMAotI2RlZmluZSBDU19QQVJJVFlfRVJST1JfTVNHX0ZBSUxFRAkweDAwMTEKLSNkZWZpbmUgQ1NfREVWSUNFX1JFU0VUX01TR19GQUlMRUQJMHgwMDEyCi0jZGVmaW5lIENTX0lEX01TR19GQUlMRUQJCTB4MDAxMwotI2RlZmluZSBDU19VTkVYUF9CVVNfRlJFRQkJMHgwMDE0Ci0jZGVmaW5lIENTX0RBVEFfVU5ERVJSVU4JCTB4MDAxNQotCi0vKiBzdGF0dXMgZW50cnkgc3RhdGUgZmxhZyBkZWZpbml0aW9ucyAqLwotI2RlZmluZSBTRl9HT1RfQlVTCQkJMHgwMTAwCi0jZGVmaW5lIFNGX0dPVF9UQVJHRVQJCQkweDAyMDAKLSNkZWZpbmUgU0ZfU0VOVF9DREIJCQkweDA0MDAKLSNkZWZpbmUgU0ZfVFJBTlNGRVJSRURfREFUQQkJMHgwODAwCi0jZGVmaW5lIFNGX0dPVF9TVEFUVVMJCQkweDEwMDAKLSNkZWZpbmUgU0ZfR09UX1NFTlNFCQkJMHgyMDAwCi0KLS8qIHN0YXR1cyBlbnRyeSBzdGF0dXMgZmxhZyBkZWZpbml0aW9ucyAqLwotI2RlZmluZSBTVEZfRElTQ09OTkVDVAkJCTB4MDAwMQotI2RlZmluZSBTVEZfU1lOQ0hST05PVVMJCQkweDAwMDIKLSNkZWZpbmUgU1RGX1BBUklUWV9FUlJPUgkJMHgwMDA0Ci0jZGVmaW5lIFNURl9CVVNfUkVTRVQJCQkweDAwMDgKLSNkZWZpbmUgU1RGX0RFVklDRV9SRVNFVAkJMHgwMDEwCi0jZGVmaW5lIFNURl9BQk9SVEVECQkJMHgwMDIwCi0jZGVmaW5lIFNURl9USU1FT1VUCQkJMHgwMDQwCi0jZGVmaW5lIFNURl9ORUdPVElBVElPTgkJCTB4MDA4MAotCi0vKiBpbnRlcmZhY2UgY29udHJvbCBjb21tYW5kcyAqLwotI2RlZmluZSBJU1BfUkVTRVQJCQkweDAwMDEKLSNkZWZpbmUgSVNQX0VOX0lOVAkJCTB4MDAwMgotI2RlZmluZSBJU1BfRU5fUklTQwkJCTB4MDAwNAotCi0vKiBob3N0IGNvbnRyb2wgY29tbWFuZHMgKi8KLSNkZWZpbmUgSENDUl9OT1AJCQkweDAwMDAKLSNkZWZpbmUgSENDUl9SRVNFVAkJCTB4MTAwMAotI2RlZmluZSBIQ0NSX1BBVVNFCQkJMHgyMDAwCi0jZGVmaW5lIEhDQ1JfUkVMRUFTRQkJCTB4MzAwMAotI2RlZmluZSBIQ0NSX1NJTkdMRV9TVEVQCQkweDQwMDAKLSNkZWZpbmUgSENDUl9TRVRfSE9TVF9JTlRSCQkweDUwMDAKLSNkZWZpbmUgSENDUl9DTEVBUl9IT1NUX0lOVFIJCTB4NjAwMAotI2RlZmluZSBIQ0NSX0NMRUFSX1JJU0NfSU5UUgkJMHg3MDAwCi0jZGVmaW5lIEhDQ1JfQlBfRU5BQkxFCQkJMHg4MDAwCi0jZGVmaW5lIEhDQ1JfQklPU19ESVNBQkxFCQkweDkwMDAKLSNkZWZpbmUgSENDUl9URVNUX01PREUJCQkweGYwMDAKLQotI2RlZmluZSBSSVNDX0JVU1kJCQkweDAwMDQKLQotLyogbWFpbGJveCBjb21tYW5kcyAqLwotI2RlZmluZSBNQk9YX05PX09QCQkJMHgwMDAwCi0jZGVmaW5lIE1CT1hfTE9BRF9SQU0JCQkweDAwMDEKLSNkZWZpbmUgTUJPWF9FWEVDX0ZJUk1XQVJFCQkweDAwMDIKLSNkZWZpbmUgTUJPWF9EVU1QX1JBTQkJCTB4MDAwMwotI2RlZmluZSBNQk9YX1dSSVRFX1JBTV9XT1JECQkweDAwMDQKLSNkZWZpbmUgTUJPWF9SRUFEX1JBTV9XT1JECQkweDAwMDUKLSNkZWZpbmUgTUJPWF9NQUlMQk9YX1JFR19URVNUCQkweDAwMDYKLSNkZWZpbmUgTUJPWF9WRVJJRllfQ0hFQ0tTVU0JCTB4MDAwNwotI2RlZmluZSBNQk9YX0FCT1VUX0ZJUk1XQVJFCQkweDAwMDgKLSNkZWZpbmUgTUJPWF9DSEVDS19GSVJNV0FSRQkJMHgwMDBlCi0jZGVmaW5lIE1CT1hfSU5JVF9SRVFfUVVFVUUJCTB4MDAxMAotI2RlZmluZSBNQk9YX0lOSVRfUkVTX1FVRVVFCQkweDAwMTEKLSNkZWZpbmUgTUJPWF9FWEVDVVRFX0lPQ0IJCTB4MDAxMgotI2RlZmluZSBNQk9YX1dBS0VfVVAJCQkweDAwMTMKLSNkZWZpbmUgTUJPWF9TVE9QX0ZJUk1XQVJFCQkweDAwMTQKLSNkZWZpbmUgTUJPWF9BQk9SVAkJCTB4MDAxNQotI2RlZmluZSBNQk9YX0FCT1JUX0RFVklDRQkJMHgwMDE2Ci0jZGVmaW5lIE1CT1hfQUJPUlRfVEFSR0VUCQkweDAwMTcKLSNkZWZpbmUgTUJPWF9CVVNfUkVTRVQJCQkweDAwMTgKLSNkZWZpbmUgTUJPWF9TVE9QX1FVRVVFCQkJMHgwMDE5Ci0jZGVmaW5lIE1CT1hfU1RBUlRfUVVFVUUJCTB4MDAxYQotI2RlZmluZSBNQk9YX1NJTkdMRV9TVEVQX1FVRVVFCQkweDAwMWIKLSNkZWZpbmUgTUJPWF9BQk9SVF9RVUVVRQkJMHgwMDFjCi0jZGVmaW5lIE1CT1hfR0VUX0RFVl9RVUVVRV9TVEFUVVMJMHgwMDFkCi0jZGVmaW5lIE1CT1hfR0VUX0ZJUk1XQVJFX1NUQVRVUwkweDAwMWYKLSNkZWZpbmUgTUJPWF9HRVRfSU5JVF9TQ1NJX0lECQkweDAwMjAKLSNkZWZpbmUgTUJPWF9HRVRfU0VMRUNUX1RJTUVPVVQJCTB4MDAyMQotI2RlZmluZSBNQk9YX0dFVF9SRVRSWV9DT1VOVAkJMHgwMDIyCi0jZGVmaW5lIE1CT1hfR0VUX1RBR19BR0VfTElNSVQJCTB4MDAyMwotI2RlZmluZSBNQk9YX0dFVF9DTE9DS19SQVRFCQkweDAwMjQKLSNkZWZpbmUgTUJPWF9HRVRfQUNUX05FR19TVEFURQkJMHgwMDI1Ci0jZGVmaW5lIE1CT1hfR0VUX0FTWU5DX0RBVEFfU0VUVVBfVElNRQkweDAwMjYKLSNkZWZpbmUgTUJPWF9HRVRfUENJX1BBUkFNUwkJMHgwMDI3Ci0jZGVmaW5lIE1CT1hfR0VUX1RBUkdFVF9QQVJBTVMJCTB4MDAyOAotI2RlZmluZSBNQk9YX0dFVF9ERVZfUVVFVUVfUEFSQU1TCTB4MDAyOQotI2RlZmluZSBNQk9YX1NFVF9JTklUX1NDU0lfSUQJCTB4MDAzMAotI2RlZmluZSBNQk9YX1NFVF9TRUxFQ1RfVElNRU9VVAkJMHgwMDMxCi0jZGVmaW5lIE1CT1hfU0VUX1JFVFJZX0NPVU5UCQkweDAwMzIKLSNkZWZpbmUgTUJPWF9TRVRfVEFHX0FHRV9MSU1JVAkJMHgwMDMzCi0jZGVmaW5lIE1CT1hfU0VUX0NMT0NLX1JBVEUJCTB4MDAzNAotI2RlZmluZSBNQk9YX1NFVF9BQ1RJVkVfTkVHX1NUQVRFCTB4MDAzNQotI2RlZmluZSBNQk9YX1NFVF9BU1lOQ19EQVRBX1NFVFVQX1RJTUUJMHgwMDM2Ci0jZGVmaW5lIE1CT1hfU0VUX1BDSV9DT05UUk9MX1BBUkFNUwkweDAwMzcKLSNkZWZpbmUgTUJPWF9TRVRfVEFSR0VUX1BBUkFNUwkJMHgwMDM4Ci0jZGVmaW5lIE1CT1hfU0VUX0RFVl9RVUVVRV9QQVJBTVMJMHgwMDM5Ci0jZGVmaW5lIE1CT1hfUkVUVVJOX0JJT1NfQkxPQ0tfQUREUgkweDAwNDAKLSNkZWZpbmUgTUJPWF9XUklURV9GT1VSX1JBTV9XT1JEUwkweDAwNDEKLSNkZWZpbmUgTUJPWF9FWEVDX0JJT1NfSU9DQgkJMHgwMDQyCi0KLSNpZmRlZiBDT05GSUdfUUxfSVNQX0E2NAotI2RlZmluZSBNQk9YX0NNRF9JTklUX1JFUVVFU1RfUVVFVUVfNjQgICAgICAweDAwNTIKLSNkZWZpbmUgTUJPWF9DTURfSU5JVF9SRVNQT05TRV9RVUVVRV82NCAgICAgMHgwMDUzCi0jZW5kaWYgLyogQ09ORklHX1FMX0lTUF9BNjQgKi8KLQotI2luY2x1ZGUgInFsb2dpY2lzcF9hc20uYyIKLQotI2RlZmluZSBQQUNLQihhLCBiKQkJCSgoKGEpPDw0KXwoYikpCi0KLXN0YXRpYyBjb25zdCB1X2NoYXIgbWJveF9wYXJhbVtdID0gewotCVBBQ0tCKDEsIDEpLAkvKiBNQk9YX05PX09QICovCi0JUEFDS0IoNSwgNSksCS8qIE1CT1hfTE9BRF9SQU0gKi8KLQlQQUNLQigyLCAwKSwJLyogTUJPWF9FWEVDX0ZJUk1XQVJFICovCi0JUEFDS0IoNSwgNSksCS8qIE1CT1hfRFVNUF9SQU0gKi8KLQlQQUNLQigzLCAzKSwJLyogTUJPWF9XUklURV9SQU1fV09SRCAqLwotCVBBQ0tCKDIsIDMpLAkvKiBNQk9YX1JFQURfUkFNX1dPUkQgKi8KLQlQQUNLQig2LCA2KSwJLyogTUJPWF9NQUlMQk9YX1JFR19URVNUICovCi0JUEFDS0IoMiwgMyksCS8qIE1CT1hfVkVSSUZZX0NIRUNLU1VNCSovCi0JUEFDS0IoMSwgMyksCS8qIE1CT1hfQUJPVVRfRklSTVdBUkUgKi8KLQlQQUNLQigwLCAwKSwJLyogMHgwMDA5ICovCi0JUEFDS0IoMCwgMCksCS8qIDB4MDAwYSAqLwotCVBBQ0tCKDAsIDApLAkvKiAweDAwMGIgKi8KLQlQQUNLQigwLCAwKSwJLyogMHgwMDBjICovCi0JUEFDS0IoMCwgMCksCS8qIDB4MDAwZCAqLwotCVBBQ0tCKDEsIDIpLAkvKiBNQk9YX0NIRUNLX0ZJUk1XQVJFICovCi0JUEFDS0IoMCwgMCksCS8qIDB4MDAwZiAqLwotCVBBQ0tCKDUsIDUpLAkvKiBNQk9YX0lOSVRfUkVRX1FVRVVFICovCi0JUEFDS0IoNiwgNiksCS8qIE1CT1hfSU5JVF9SRVNfUVVFVUUgKi8KLQlQQUNLQig0LCA0KSwJLyogTUJPWF9FWEVDVVRFX0lPQ0IgKi8KLQlQQUNLQigyLCAyKSwJLyogTUJPWF9XQUtFX1VQCSovCi0JUEFDS0IoMSwgNiksCS8qIE1CT1hfU1RPUF9GSVJNV0FSRSAqLwotCVBBQ0tCKDQsIDQpLAkvKiBNQk9YX0FCT1JUICovCi0JUEFDS0IoMiwgMiksCS8qIE1CT1hfQUJPUlRfREVWSUNFICovCi0JUEFDS0IoMywgMyksCS8qIE1CT1hfQUJPUlRfVEFSR0VUICovCi0JUEFDS0IoMiwgMiksCS8qIE1CT1hfQlVTX1JFU0VUICovCi0JUEFDS0IoMiwgMyksCS8qIE1CT1hfU1RPUF9RVUVVRSAqLwotCVBBQ0tCKDIsIDMpLAkvKiBNQk9YX1NUQVJUX1FVRVVFICovCi0JUEFDS0IoMiwgMyksCS8qIE1CT1hfU0lOR0xFX1NURVBfUVVFVUUgKi8KLQlQQUNLQigyLCAzKSwJLyogTUJPWF9BQk9SVF9RVUVVRSAqLwotCVBBQ0tCKDIsIDQpLAkvKiBNQk9YX0dFVF9ERVZfUVVFVUVfU1RBVFVTICovCi0JUEFDS0IoMCwgMCksCS8qIDB4MDAxZSAqLwotCVBBQ0tCKDEsIDMpLAkvKiBNQk9YX0dFVF9GSVJNV0FSRV9TVEFUVVMgKi8KLQlQQUNLQigxLCAyKSwJLyogTUJPWF9HRVRfSU5JVF9TQ1NJX0lEICovCi0JUEFDS0IoMSwgMiksCS8qIE1CT1hfR0VUX1NFTEVDVF9USU1FT1VUICovCi0JUEFDS0IoMSwgMyksCS8qIE1CT1hfR0VUX1JFVFJZX0NPVU5UCSovCi0JUEFDS0IoMSwgMiksCS8qIE1CT1hfR0VUX1RBR19BR0VfTElNSVQgKi8KLQlQQUNLQigxLCAyKSwJLyogTUJPWF9HRVRfQ0xPQ0tfUkFURSAqLwotCVBBQ0tCKDEsIDIpLAkvKiBNQk9YX0dFVF9BQ1RfTkVHX1NUQVRFICovCi0JUEFDS0IoMSwgMiksCS8qIE1CT1hfR0VUX0FTWU5DX0RBVEFfU0VUVVBfVElNRSAqLwotCVBBQ0tCKDEsIDMpLAkvKiBNQk9YX0dFVF9QQ0lfUEFSQU1TICovCi0JUEFDS0IoMiwgNCksCS8qIE1CT1hfR0VUX1RBUkdFVF9QQVJBTVMgKi8KLQlQQUNLQigyLCA0KSwJLyogTUJPWF9HRVRfREVWX1FVRVVFX1BBUkFNUyAqLwotCVBBQ0tCKDAsIDApLAkvKiAweDAwMmEgKi8KLQlQQUNLQigwLCAwKSwJLyogMHgwMDJiICovCi0JUEFDS0IoMCwgMCksCS8qIDB4MDAyYyAqLwotCVBBQ0tCKDAsIDApLAkvKiAweDAwMmQgKi8KLQlQQUNLQigwLCAwKSwJLyogMHgwMDJlICovCi0JUEFDS0IoMCwgMCksCS8qIDB4MDAyZiAqLwotCVBBQ0tCKDIsIDIpLAkvKiBNQk9YX1NFVF9JTklUX1NDU0lfSUQgKi8KLQlQQUNLQigyLCAyKSwJLyogTUJPWF9TRVRfU0VMRUNUX1RJTUVPVVQgKi8KLQlQQUNLQigzLCAzKSwJLyogTUJPWF9TRVRfUkVUUllfQ09VTlQJKi8KLQlQQUNLQigyLCAyKSwJLyogTUJPWF9TRVRfVEFHX0FHRV9MSU1JVCAqLwotCVBBQ0tCKDIsIDIpLAkvKiBNQk9YX1NFVF9DTE9DS19SQVRFICovCi0JUEFDS0IoMiwgMiksCS8qIE1CT1hfU0VUX0FDVElWRV9ORUdfU1RBVEUgKi8KLQlQQUNLQigyLCAyKSwJLyogTUJPWF9TRVRfQVNZTkNfREFUQV9TRVRVUF9USU1FICovCi0JUEFDS0IoMywgMyksCS8qIE1CT1hfU0VUX1BDSV9DT05UUk9MX1BBUkFNUyAqLwotCVBBQ0tCKDQsIDQpLAkvKiBNQk9YX1NFVF9UQVJHRVRfUEFSQU1TICovCi0JUEFDS0IoNCwgNCksCS8qIE1CT1hfU0VUX0RFVl9RVUVVRV9QQVJBTVMgKi8KLQlQQUNLQigwLCAwKSwJLyogMHgwMDNhICovCi0JUEFDS0IoMCwgMCksCS8qIDB4MDAzYiAqLwotCVBBQ0tCKDAsIDApLAkvKiAweDAwM2MgKi8KLQlQQUNLQigwLCAwKSwJLyogMHgwMDNkICovCi0JUEFDS0IoMCwgMCksCS8qIDB4MDAzZSAqLwotCVBBQ0tCKDAsIDApLAkvKiAweDAwM2YgKi8KLQlQQUNLQigxLCAyKSwJLyogTUJPWF9SRVRVUk5fQklPU19CTE9DS19BRERSICovCi0JUEFDS0IoNiwgMSksCS8qIE1CT1hfV1JJVEVfRk9VUl9SQU1fV09SRFMgKi8KLQlQQUNLQigyLCAzKQkvKiBNQk9YX0VYRUNfQklPU19JT0NCICovCi0jaWZkZWYgQ09ORklHX1FMX0lTUF9BNjQKLQksUEFDS0IoMCwgMCksCS8qIDB4MDA0MyAqLwotCVBBQ0tCKDAsIDApLAkvKiAweDAwNDQgKi8KLQlQQUNLQigwLCAwKSwJLyogMHgwMDQ1ICovCi0JUEFDS0IoMCwgMCksCS8qIDB4MDA0NiAqLwotCVBBQ0tCKDAsIDApLAkvKiAweDAwNDcgKi8KLQlQQUNLQigwLCAwKSwJLyogMHgwMDQ4ICovCi0JUEFDS0IoMCwgMCksCS8qIDB4MDA0OSAqLwotCVBBQ0tCKDAsIDApLAkvKiAweDAwNGEgKi8KLQlQQUNLQigwLCAwKSwJLyogMHgwMDRiICovCi0JUEFDS0IoMCwgMCksCS8qIDB4MDA0YyAqLwotCVBBQ0tCKDAsIDApLAkvKiAweDAwNGQgKi8KLQlQQUNLQigwLCAwKSwJLyogMHgwMDRlICovCi0JUEFDS0IoMCwgMCksCS8qIDB4MDA0ZiAqLwotCVBBQ0tCKDAsIDApLAkvKiAweDAwNTAgKi8KLQlQQUNLQigwLCAwKSwJLyogMHgwMDUxICovCi0JUEFDS0IoOCwgOCksCS8qIE1CT1hfQ01EX0lOSVRfUkVRVUVTVF9RVUVVRV82NCAoMHgwMDUyKSAqLwotCVBBQ0tCKDgsIDgpCS8qIE1CT1hfQ01EX0lOSVRfUkVTUE9OU0VfUVVFVUVfNjQgKDB4MDA1MykgKi8KLSNlbmRpZiAvKiBDT05GSUdfUUxfSVNQX0E2NCAqLwotfTsKLQotI2RlZmluZSBNQVhfTUJPWF9DT01NQU5ECShzaXplb2YobWJveF9wYXJhbSkvc2l6ZW9mKHVfc2hvcnQpKQotCi1zdHJ1Y3QgaG9zdF9wYXJhbSB7Ci0JdV9zaG9ydAkJZmlmb190aHJlc2hvbGQ7Ci0JdV9zaG9ydAkJaG9zdF9hZGFwdGVyX2VuYWJsZTsKLQl1X3Nob3J0CQlpbml0aWF0b3Jfc2NzaV9pZDsKLQl1X3Nob3J0CQlidXNfcmVzZXRfZGVsYXk7Ci0JdV9zaG9ydAkJcmV0cnlfY291bnQ7Ci0JdV9zaG9ydAkJcmV0cnlfZGVsYXk7Ci0JdV9zaG9ydAkJYXN5bmNfZGF0YV9zZXR1cF90aW1lOwotCXVfc2hvcnQJCXJlcV9hY2tfYWN0aXZlX25lZ2F0aW9uOwotCXVfc2hvcnQJCWRhdGFfbGluZV9hY3RpdmVfbmVnYXRpb247Ci0JdV9zaG9ydAkJZGF0YV9kbWFfYnVyc3RfZW5hYmxlOwotCXVfc2hvcnQJCWNvbW1hbmRfZG1hX2J1cnN0X2VuYWJsZTsKLQl1X3Nob3J0CQl0YWdfYWdpbmc7Ci0JdV9zaG9ydAkJc2VsZWN0aW9uX3RpbWVvdXQ7Ci0JdV9zaG9ydAkJbWF4X3F1ZXVlX2RlcHRoOwotfTsKLQotLyoKLSAqIERldmljZSBGbGFnczoKLSAqCi0gKiBCaXQgIE5hbWUKLSAqIC0tLS0tLS0tLQotICogIDcgICBEaXNjb25uZWN0IFByaXZpbGVnZQotICogIDYgICBQYXJpdHkgQ2hlY2tpbmcKLSAqICA1ICAgV2lkZSBEYXRhIFRyYW5zZmVycwotICogIDQgICBTeW5jaHJvbm91cyBEYXRhIFRyYW5zZmVycwotICogIDMgICBUYWdnZWQgUXVldWluZwotICogIDIgICBBdXRvbWF0aWMgUmVxdWVzdCBTZW5zZQotICogIDEgICBTdG9wIFF1ZXVlIG9uIENoZWNrIENvbmRpdGlvbgotICogIDAgICBSZW5lZ290aWF0ZSBvbiBFcnJvcgotICovCi0KLXN0cnVjdCBkZXZfcGFyYW0gewotCXVfc2hvcnQJCWRldmljZV9mbGFnczsKLQl1X3Nob3J0CQlleGVjdXRpb25fdGhyb3R0bGU7Ci0JdV9zaG9ydAkJc3luY2hyb25vdXNfcGVyaW9kOwotCXVfc2hvcnQJCXN5bmNocm9ub3VzX29mZnNldDsKLQl1X3Nob3J0CQlkZXZpY2VfZW5hYmxlOwotCXVfc2hvcnQJCXJlc2VydmVkOyAvKiBwYWQgKi8KLX07Ci0KLS8qCi0gKiBUaGUgcmVzdWx0IHF1ZXVlIGNhbiBiZSBxdWl0ZSBhIGJpdCBzbWFsbGVyIHNpbmNlIGNvbnRpbnVhdGlvbiBlbnRyaWVzCi0gKiBkbyBub3Qgc2hvdyB1cCB0aGVyZToKLSAqLwotI2RlZmluZSBSRVNfUVVFVUVfTEVOCQkoKFFMT0dJQ0lTUF9SRVFfUVVFVUVfTEVOICsgMSkgLyA4IC0gMSkKLSNkZWZpbmUgUVVFVUVfRU5UUllfTEVOCQk2NAotI2RlZmluZSBRU0laRShlbnRyaWVzKSAgKCgoZW50cmllcykgKyAxKSAqIFFVRVVFX0VOVFJZX0xFTikKLQotc3RydWN0IGlzcF9xdWV1ZV9lbnRyeSB7Ci0JY2hhciBfX29wYXF1ZVtRVUVVRV9FTlRSWV9MRU5dOwotfTsKLQotc3RydWN0IGlzcDEwMjBfaG9zdGRhdGEgewotCXZvaWQgX19pb21lbSAqbWVtYWRkcjsKLQl1X2NoYXIJcmV2aXNpb247Ci0Jc3RydWN0CWhvc3RfcGFyYW0gaG9zdF9wYXJhbTsKLQlzdHJ1Y3QJZGV2X3BhcmFtIGRldl9wYXJhbVtNQVhfVEFSR0VUU107Ci0Jc3RydWN0CXBjaV9kZXYgKnBjaV9kZXY7Ci0JCi0Jc3RydWN0IGlzcF9xdWV1ZV9lbnRyeSAqcmVzX2NwdTsgLyogQ1BVLXNpZGUgYWRkcmVzcyBvZiByZXNwb25zZSBxdWV1ZS4gKi8KLQlzdHJ1Y3QgaXNwX3F1ZXVlX2VudHJ5ICpyZXFfY3B1OyAvKiBDUFUtc2l6ZSBhZGRyZXNzIG9mIHJlcXVlc3QgcXVldWUuICovCi0KLQkvKiByZXN1bHQgYW5kIHJlcXVlc3QgcXVldWVzIChzaGFyZWQgd2l0aCBpc3AxMDIwKTogKi8KLQl1X2ludAlyZXFfaW5fcHRyOwkJLyogaW5kZXggb2YgbmV4dCByZXF1ZXN0IHNsb3QgKi8KLQl1X2ludAlyZXNfb3V0X3B0cjsJCS8qIGluZGV4IG9mIG5leHQgcmVzdWx0IHNsb3QgKi8KLQotCS8qIHRoaXMgaXMgaGVyZSBzbyB0aGUgcXVldWVzIGFyZSBuaWNlbHkgYWxpZ25lZCAqLwotCWxvbmcJc2VuZF9tYXJrZXI7CQkvKiBkbyB3ZSBuZWVkIHRvIHNlbmQgYSBtYXJrZXI/ICovCi0KLQkvKiBUaGUgY21kLT5oYW5kbGUgaGFzIGEgZml4ZWQgc2l6ZSwgYW5kIGlzIG9ubHkgMzItYml0cy4gIFdlCi0JICogbmVlZCB0byB0YWtlIGNhcmUgdG8gaGFuZGxlIDY0LWJpdCBzeXN0ZW1zIGNvcnJlY3RseSB0aHVzIHdoYXQKLQkgKiB3ZSBhY3R1YWxseSBwbGFjZSBpbiBjbWQtPmhhbmRsZSBpcyBhbiBpbmRleCB0byB0aGUgZm9sbG93aW5nCi0JICogdGFibGUuICBLdWRvcyB0byBNYXR0IEphY29iIGZvciB0aGUgdGVjaG5pcXVlLiAgLURhdmVNCi0JICovCi0JU2NzaV9DbW5kICpjbWRfc2xvdHNbUUxPR0lDSVNQX1JFUV9RVUVVRV9MRU4gKyAxXTsKLQotCWRtYV9hZGRyX3QgcmVzX2RtYTsJLyogUENJIHNpZGUgdmlldyBvZiByZXNwb25zZSBxdWV1ZSAqLwotCWRtYV9hZGRyX3QgcmVxX2RtYTsJLyogUENJIHNpZGUgdmlldyBvZiByZXF1ZXN0IHF1ZXVlICovCi19OwotCi0vKiBxdWV1ZSBsZW5ndGgncyBfbXVzdF8gYmUgcG93ZXIgb2YgdHdvOiAqLwotI2RlZmluZSBRVUVVRV9ERVBUSChpbiwgb3V0LCBxbCkJKChpbiAtIG91dCkgJiAocWwpKQotI2RlZmluZSBSRVFfUVVFVUVfREVQVEgoaW4sIG91dCkJUVVFVUVfREVQVEgoaW4sIG91dCwgCQkgICAgIFwKLQkJCQkJCSAgICBRTE9HSUNJU1BfUkVRX1FVRVVFX0xFTikKLSNkZWZpbmUgUkVTX1FVRVVFX0RFUFRIKGluLCBvdXQpCVFVRVVFX0RFUFRIKGluLCBvdXQsIFJFU19RVUVVRV9MRU4pCi0KLXN0YXRpYyB2b2lkCWlzcDEwMjBfZW5hYmxlX2lycXMoc3RydWN0IFNjc2lfSG9zdCAqKTsKLXN0YXRpYyB2b2lkCWlzcDEwMjBfZGlzYWJsZV9pcnFzKHN0cnVjdCBTY3NpX0hvc3QgKik7Ci1zdGF0aWMgaW50CWlzcDEwMjBfaW5pdChzdHJ1Y3QgU2NzaV9Ib3N0ICopOwotc3RhdGljIGludAlpc3AxMDIwX3Jlc2V0X2hhcmR3YXJlKHN0cnVjdCBTY3NpX0hvc3QgKik7Ci1zdGF0aWMgaW50CWlzcDEwMjBfc2V0X2RlZmF1bHRzKHN0cnVjdCBTY3NpX0hvc3QgKik7Ci1zdGF0aWMgaW50CWlzcDEwMjBfbG9hZF9wYXJhbWV0ZXJzKHN0cnVjdCBTY3NpX0hvc3QgKik7Ci1zdGF0aWMgaW50CWlzcDEwMjBfbWJveF9jb21tYW5kKHN0cnVjdCBTY3NpX0hvc3QgKiwgdV9zaG9ydCBbXSk7IAotc3RhdGljIGludAlpc3AxMDIwX3JldHVybl9zdGF0dXMoc3RydWN0IFN0YXR1c19FbnRyeSAqKTsKLXN0YXRpYyB2b2lkCWlzcDEwMjBfaW50cl9oYW5kbGVyKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKLXN0YXRpYyBpcnFyZXR1cm5fdCBkb19pc3AxMDIwX2ludHJfaGFuZGxlcihpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKik7Ci0KLSNpZiBVU0VfTlZSQU1fREVGQVVMVFMKLXN0YXRpYyBpbnQJaXNwMTAyMF9nZXRfZGVmYXVsdHMoc3RydWN0IFNjc2lfSG9zdCAqKTsKLXN0YXRpYyBpbnQJaXNwMTAyMF92ZXJpZnlfbnZyYW0oc3RydWN0IFNjc2lfSG9zdCAqKTsKLXN0YXRpYyB1X3Nob3J0CWlzcDEwMjBfcmVhZF9udnJhbV93b3JkKHN0cnVjdCBTY3NpX0hvc3QgKiwgdV9zaG9ydCk7Ci0jZW5kaWYKLQotI2lmIERFQlVHX0lTUDEwMjAKLXN0YXRpYyB2b2lkCWlzcDEwMjBfcHJpbnRfc2NzaV9jbWQoU2NzaV9DbW5kICopOwotI2VuZGlmCi0jaWYgREVCVUdfSVNQMTAyMF9JTlRSCi1zdGF0aWMgdm9pZAlpc3AxMDIwX3ByaW50X3N0YXR1c19lbnRyeShzdHJ1Y3QgU3RhdHVzX0VudHJ5ICopOwotI2VuZGlmCi0KLS8qIG1lbWFkZHIgc2hvdWxkIGJlIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIG1lbW1hcHBlZCBwb3J0IGkvbyBpcyBiZWluZyB1c2VkCi0gKiBub24tbnVsbCBtZW1hZGRyID09IG1tYXAnZAotICogSlYgNy1KYW4tMjAwMAotICovCi1zdGF0aWMgaW5saW5lIHVfc2hvcnQgaXNwX2ludyhzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0LCBsb25nIG9mZnNldCkKLXsKLQlzdHJ1Y3QgaXNwMTAyMF9ob3N0ZGF0YSAqaCA9IChzdHJ1Y3QgaXNwMTAyMF9ob3N0ZGF0YSAqKWhvc3QtPmhvc3RkYXRhOwotCWlmIChoLT5tZW1hZGRyKQotCQlyZXR1cm4gcmVhZHcoaC0+bWVtYWRkciArIG9mZnNldCk7Ci0JZWxzZQotCQlyZXR1cm4gaW53KGhvc3QtPmlvX3BvcnQgKyBvZmZzZXQpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaXNwX291dHcodV9zaG9ydCB2YWwsIHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QsIGxvbmcgb2Zmc2V0KQotewotCXN0cnVjdCBpc3AxMDIwX2hvc3RkYXRhICpoID0gKHN0cnVjdCBpc3AxMDIwX2hvc3RkYXRhICopaG9zdC0+aG9zdGRhdGE7Ci0JaWYgKGgtPm1lbWFkZHIpCi0JCXdyaXRldyh2YWwsIGgtPm1lbWFkZHIgKyBvZmZzZXQpOwotCWVsc2UKLQkJb3V0dyh2YWwsIGhvc3QtPmlvX3BvcnQgKyBvZmZzZXQpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaXNwMTAyMF9lbmFibGVfaXJxcyhzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0KQotewotCWlzcF9vdXR3KElTUF9FTl9JTlR8SVNQX0VOX1JJU0MsIGhvc3QsIFBDSV9JTlRGX0NUTCk7Ci19Ci0KLQotc3RhdGljIGlubGluZSB2b2lkIGlzcDEwMjBfZGlzYWJsZV9pcnFzKHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QpCi17Ci0JaXNwX291dHcoMHgwLCBob3N0LCBQQ0lfSU5URl9DVEwpOwotfQotCi0KLXN0YXRpYyBpbnQgaXNwMTAyMF9kZXRlY3QoU2NzaV9Ib3N0X1RlbXBsYXRlICp0bXB0KQotewotCWludCBob3N0cyA9IDA7Ci0Jc3RydWN0IFNjc2lfSG9zdCAqaG9zdDsKLQlzdHJ1Y3QgaXNwMTAyMF9ob3N0ZGF0YSAqaG9zdGRhdGE7Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBOVUxMOwotCi0JRU5URVIoImlzcDEwMjBfZGV0ZWN0Iik7Ci0KLQl0bXB0LT5wcm9jX25hbWUgPSAiaXNwMTAyMCI7Ci0KLQl3aGlsZSAoKHBkZXYgPSBwY2lfZmluZF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9RTE9HSUMsIFBDSV9ERVZJQ0VfSURfUUxPR0lDX0lTUDEwMjAsIHBkZXYpKSkKLQl7Ci0JCWlmIChwY2lfZW5hYmxlX2RldmljZShwZGV2KSkKLQkJCWNvbnRpbnVlOwotCi0JCWhvc3QgPSBzY3NpX3JlZ2lzdGVyKHRtcHQsIHNpemVvZihzdHJ1Y3QgaXNwMTAyMF9ob3N0ZGF0YSkpOwotCQlpZiAoIWhvc3QpCi0JCQljb250aW51ZTsKLQotCQlob3N0ZGF0YSA9IChzdHJ1Y3QgaXNwMTAyMF9ob3N0ZGF0YSAqKSBob3N0LT5ob3N0ZGF0YTsKLQotCQltZW1zZXQoaG9zdGRhdGEsIDAsIHNpemVvZihzdHJ1Y3QgaXNwMTAyMF9ob3N0ZGF0YSkpOwotCi0JCWhvc3RkYXRhLT5wY2lfZGV2ID0gcGRldjsKLQotCQlpZiAoaXNwMTAyMF9pbml0KGhvc3QpKQotCQkJZ290byBmYWlsX2FuZF91bnJlZ2lzdGVyOwotCi0JCWlmIChpc3AxMDIwX3Jlc2V0X2hhcmR3YXJlKGhvc3QpCi0jaWYgVVNFX05WUkFNX0RFRkFVTFRTCi0JCSAgICB8fCBpc3AxMDIwX2dldF9kZWZhdWx0cyhob3N0KQotI2Vsc2UKLQkJICAgIHx8IGlzcDEwMjBfc2V0X2RlZmF1bHRzKGhvc3QpCi0jZW5kaWYgLyogVVNFX05WUkFNX0RFRkFVTFRTICovCi0JCSAgICB8fCBpc3AxMDIwX2xvYWRfcGFyYW1ldGVycyhob3N0KSkgewotCQkJZ290byBmYWlsX3VuaW5pdDsKLQkJfQotCi0JCWhvc3QtPnRoaXNfaWQgPSBob3N0ZGF0YS0+aG9zdF9wYXJhbS5pbml0aWF0b3Jfc2NzaV9pZDsKLQkJaG9zdC0+bWF4X3NlY3RvcnMgPSA2NDsKLQotCQlpZiAocmVxdWVzdF9pcnEoaG9zdC0+aXJxLCBkb19pc3AxMDIwX2ludHJfaGFuZGxlciwgU0FfSU5URVJSVVBUIHwgU0FfU0hJUlEsCi0JCQkJInFsb2dpY2lzcCIsIGhvc3QpKQotCQl7Ci0JCQlwcmludGsoInFsb2dpY2lzcCA6IGludGVycnVwdCAlZCBhbHJlYWR5IGluIHVzZVxuIiwKLQkJCSAgICAgICBob3N0LT5pcnEpOwotCQkJZ290byBmYWlsX3VuaW5pdDsKLQkJfQotCi0JCWlzcF9vdXR3KDB4MCwgaG9zdCwgUENJX1NFTUFQSE9SRSk7Ci0JCWlzcF9vdXR3KEhDQ1JfQ0xFQVJfUklTQ19JTlRSLCBob3N0LCBIT1NUX0hDQ1IpOwotCQlpc3AxMDIwX2VuYWJsZV9pcnFzKGhvc3QpOwotCi0JCWhvc3RzKys7Ci0JCWNvbnRpbnVlOwotCi0JZmFpbF91bmluaXQ6Ci0JCWlvdW5tYXAoaG9zdGRhdGEtPm1lbWFkZHIpOwotCQlyZWxlYXNlX3JlZ2lvbihob3N0LT5pb19wb3J0LCAweGZmKTsKLQlmYWlsX2FuZF91bnJlZ2lzdGVyOgotCQlpZiAoaG9zdGRhdGEtPnJlc19jcHUpCi0JCQlwY2lfZnJlZV9jb25zaXN0ZW50KGhvc3RkYXRhLT5wY2lfZGV2LAotCQkJCQkgICAgUVNJWkUoUkVTX1FVRVVFX0xFTiksCi0JCQkJCSAgICBob3N0ZGF0YS0+cmVzX2NwdSwKLQkJCQkJICAgIGhvc3RkYXRhLT5yZXNfZG1hKTsKLQkJaWYgKGhvc3RkYXRhLT5yZXFfY3B1KQotCQkJcGNpX2ZyZWVfY29uc2lzdGVudChob3N0ZGF0YS0+cGNpX2RldiwKLQkJCQkJICAgIFFTSVpFKFFMT0dJQ0lTUF9SRVFfUVVFVUVfTEVOKSwKLQkJCQkJICAgIGhvc3RkYXRhLT5yZXFfY3B1LAotCQkJCQkgICAgaG9zdGRhdGEtPnJlcV9kbWEpOwotCQlzY3NpX3VucmVnaXN0ZXIoaG9zdCk7Ci0JfQotCi0JTEVBVkUoImlzcDEwMjBfZGV0ZWN0Iik7Ci0KLQlyZXR1cm4gaG9zdHM7Ci19Ci0KLQotc3RhdGljIGludCBpc3AxMDIwX3JlbGVhc2Uoc3RydWN0IFNjc2lfSG9zdCAqaG9zdCkKLXsKLQlzdHJ1Y3QgaXNwMTAyMF9ob3N0ZGF0YSAqaG9zdGRhdGE7Ci0KLQlFTlRFUigiaXNwMTAyMF9yZWxlYXNlIik7Ci0KLQlob3N0ZGF0YSA9IChzdHJ1Y3QgaXNwMTAyMF9ob3N0ZGF0YSAqKSBob3N0LT5ob3N0ZGF0YTsKLQotCWlzcF9vdXR3KDB4MCwgaG9zdCwgUENJX0lOVEZfQ1RMKTsKLQlmcmVlX2lycShob3N0LT5pcnEsIGhvc3QpOwotCi0JaW91bm1hcChob3N0ZGF0YS0+bWVtYWRkcik7Ci0KLQlyZWxlYXNlX3JlZ2lvbihob3N0LT5pb19wb3J0LCAweGZmKTsKLQotCUxFQVZFKCJpc3AxMDIwX3JlbGVhc2UiKTsKLQotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyBjb25zdCBjaGFyICppc3AxMDIwX2luZm8oc3RydWN0IFNjc2lfSG9zdCAqaG9zdCkKLXsKLQlzdGF0aWMgY2hhciBidWZbODBdOwotCXN0cnVjdCBpc3AxMDIwX2hvc3RkYXRhICpob3N0ZGF0YTsKLQotCUVOVEVSKCJpc3AxMDIwX2luZm8iKTsKLQotCWhvc3RkYXRhID0gKHN0cnVjdCBpc3AxMDIwX2hvc3RkYXRhICopIGhvc3QtPmhvc3RkYXRhOwotCXNwcmludGYoYnVmLAotCQkiUUxvZ2ljIElTUDEwMjAgU0NTSSBvbiBQQ0kgYnVzICUwMnggZGV2aWNlICUwMnggaXJxICVkICVzIGJhc2UgMHglbHgiLAotCQlob3N0ZGF0YS0+cGNpX2Rldi0+YnVzLT5udW1iZXIsIGhvc3RkYXRhLT5wY2lfZGV2LT5kZXZmbiwgaG9zdC0+aXJxLAotCQkoaG9zdGRhdGEtPm1lbWFkZHIgPyAiTUVNIiA6ICJJL08iKSwKLQkJKGhvc3RkYXRhLT5tZW1hZGRyID8gKHVuc2lnbmVkIGxvbmcpaG9zdGRhdGEtPm1lbWFkZHIgOiBob3N0LT5pb19wb3J0KSk7Ci0KLQlMRUFWRSgiaXNwMTAyMF9pbmZvIik7Ci0KLQlyZXR1cm4gYnVmOwotfQotCi0KLS8qCi0gKiBUaGUgbWlkZGxlIFNDU0kgbGF5ZXIgZW5zdXJlcyB0aGF0IHF1ZXVlY29tbWFuZCBuZXZlciBnZXRzIGludm9rZWQKLSAqIGNvbmN1cnJlbnRseSB3aXRoIGl0c2VsZiBvciB0aGUgaW50ZXJydXB0IGhhbmRsZXIgKHRob3VnaCB0aGUKLSAqIGludGVycnVwdCBoYW5kbGVyIG1heSBjYWxsIHRoaXMgcm91dGluZSBhcyBwYXJ0IG9mCi0gKiByZXF1ZXN0LWNvbXBsZXRpb24gaGFuZGxpbmcpLgotICovCi1zdGF0aWMgaW50IGlzcDEwMjBfcXVldWVjb21tYW5kKFNjc2lfQ21uZCAqQ21uZCwgdm9pZCAoKmRvbmUpKFNjc2lfQ21uZCAqKSkKLXsKLQlpbnQgaSwgbiwgbnVtX2ZyZWU7Ci0JdV9pbnQgaW5fcHRyLCBvdXRfcHRyOwotCXN0cnVjdCBkYXRhc2VnICogZHM7Ci0Jc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKLQlzdHJ1Y3QgQ29tbWFuZF9FbnRyeSAqY21kOwotCXN0cnVjdCBDb250aW51YXRpb25fRW50cnkgKmNvbnQ7Ci0Jc3RydWN0IFNjc2lfSG9zdCAqaG9zdDsKLQlzdHJ1Y3QgaXNwMTAyMF9ob3N0ZGF0YSAqaG9zdGRhdGE7Ci0JZG1hX2FkZHJfdAlkbWFfYWRkcjsKLQotCUVOVEVSKCJpc3AxMDIwX3F1ZXVlY29tbWFuZCIpOwotCi0JaG9zdCA9IENtbmQtPmRldmljZS0+aG9zdDsKLQlob3N0ZGF0YSA9IChzdHJ1Y3QgaXNwMTAyMF9ob3N0ZGF0YSAqKSBob3N0LT5ob3N0ZGF0YTsKLQlDbW5kLT5zY3NpX2RvbmUgPSBkb25lOwotCi0JREVCVUcoaXNwMTAyMF9wcmludF9zY3NpX2NtZChDbW5kKSk7Ci0KLQlvdXRfcHRyID0gaXNwX2ludyhob3N0LCArIE1CT1g0KTsKLQlpbl9wdHIgID0gaG9zdGRhdGEtPnJlcV9pbl9wdHI7Ci0KLQlERUJVRyhwcmludGsoInFsb2dpY2lzcCA6IHJlcXVlc3QgcXVldWUgZGVwdGggJWRcbiIsCi0JCSAgICAgUkVRX1FVRVVFX0RFUFRIKGluX3B0ciwgb3V0X3B0cikpKTsKLQotCWNtZCA9IChzdHJ1Y3QgQ29tbWFuZF9FbnRyeSAqKSAmaG9zdGRhdGEtPnJlcV9jcHVbaW5fcHRyXTsKLQlpbl9wdHIgPSAoaW5fcHRyICsgMSkgJiBRTE9HSUNJU1BfUkVRX1FVRVVFX0xFTjsKLQlpZiAoaW5fcHRyID09IG91dF9wdHIpIHsKLQkJcHJpbnRrKCJxbG9naWNpc3AgOiByZXF1ZXN0IHF1ZXVlIG92ZXJmbG93XG4iKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JaWYgKGhvc3RkYXRhLT5zZW5kX21hcmtlcikgewotCQlzdHJ1Y3QgTWFya2VyX0VudHJ5ICptYXJrZXI7Ci0KLQkJVFJBQ0UoInF1ZXVlIG1hcmtlciIsIGluX3B0ciwgMCk7Ci0KLQkJREVCVUcocHJpbnRrKCJxbG9naWNpc3AgOiBhZGRpbmcgbWFya2VyIGVudHJ5XG4iKSk7Ci0JCW1hcmtlciA9IChzdHJ1Y3QgTWFya2VyX0VudHJ5ICopIGNtZDsKLQkJbWVtc2V0KG1hcmtlciwgMCwgc2l6ZW9mKHN0cnVjdCBNYXJrZXJfRW50cnkpKTsKLQotCQltYXJrZXItPmhkci5lbnRyeV90eXBlID0gRU5UUllfTUFSS0VSOwotCQltYXJrZXItPmhkci5lbnRyeV9jbnQgPSAxOwotCQltYXJrZXItPm1vZGlmaWVyID0gU1lOQ19BTEw7Ci0KLQkJaG9zdGRhdGEtPnNlbmRfbWFya2VyID0gMDsKLQotCQlpZiAoKChpbl9wdHIgKyAxKSAmIFFMT0dJQ0lTUF9SRVFfUVVFVUVfTEVOKSA9PSBvdXRfcHRyKSB7Ci0JCQlpc3Bfb3V0dyhpbl9wdHIsIGhvc3QsIE1CT1g0KTsKLQkJCWhvc3RkYXRhLT5yZXFfaW5fcHRyID0gaW5fcHRyOwotCQkJcHJpbnRrKCJxbG9naWNpc3AgOiByZXF1ZXN0IHF1ZXVlIG92ZXJmbG93XG4iKTsKLQkJCXJldHVybiAxOwotCQl9Ci0JCWNtZCA9IChzdHJ1Y3QgQ29tbWFuZF9FbnRyeSAqKSAmaG9zdGRhdGEtPnJlcV9jcHVbaW5fcHRyXTsKLQkJaW5fcHRyID0gKGluX3B0ciArIDEpICYgUUxPR0lDSVNQX1JFUV9RVUVVRV9MRU47Ci0JfQotCi0JVFJBQ0UoInF1ZXVlIGNvbW1hbmQiLCBpbl9wdHIsIENtbmQpOwotCi0JbWVtc2V0KGNtZCwgMCwgc2l6ZW9mKHN0cnVjdCBDb21tYW5kX0VudHJ5KSk7Ci0KLQljbWQtPmhkci5lbnRyeV90eXBlID0gRU5UUllfQ09NTUFORDsKLQljbWQtPmhkci5lbnRyeV9jbnQgPSAxOwotCi0JY21kLT50YXJnZXRfbHVuID0gQ21uZC0+ZGV2aWNlLT5sdW47Ci0JY21kLT50YXJnZXRfaWQgPSBDbW5kLT5kZXZpY2UtPmlkOwotCWNtZC0+Y2RiX2xlbmd0aCA9IGNwdV90b19sZTE2KENtbmQtPmNtZF9sZW4pOwotCWNtZC0+Y29udHJvbF9mbGFncyA9IGNwdV90b19sZTE2KENGTEFHX1JFQUQgfCBDRkxBR19XUklURSk7Ci0JY21kLT50aW1lX291dCA9IGNwdV90b19sZTE2KDMwKTsKLQotCW1lbWNweShjbWQtPmNkYiwgQ21uZC0+Y21uZCwgQ21uZC0+Y21kX2xlbik7Ci0KLQlpZiAoQ21uZC0+dXNlX3NnKSB7Ci0JCWludCBzZ19jb3VudDsKLQotCQlzZyA9IChzdHJ1Y3Qgc2NhdHRlcmxpc3QgKikgQ21uZC0+cmVxdWVzdF9idWZmZXI7Ci0JCWRzID0gY21kLT5kYXRhc2VnOwotCi0JCXNnX2NvdW50ID0gcGNpX21hcF9zZyhob3N0ZGF0YS0+cGNpX2Rldiwgc2csIENtbmQtPnVzZV9zZywKLQkJCQkgICAgICBDbW5kLT5zY19kYXRhX2RpcmVjdGlvbik7Ci0KLQkJY21kLT5zZWdtZW50X2NudCA9IGNwdV90b19sZTE2KHNnX2NvdW50KTsKLQotCQkvKiBmaWxsIGluIGZpcnN0IGZvdXIgc2cgZW50cmllczogKi8KLQkJbiA9IHNnX2NvdW50OwotCQlpZiAobiA+IElPQ0JfU0VHUykKLQkJCW4gPSBJT0NCX1NFR1M7Ci0JCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLQkJCWRtYV9hZGRyID0gc2dfZG1hX2FkZHJlc3Moc2cpOwotCQkJZHNbaV0uZF9iYXNlICA9IGNwdV90b19sZTMyKCh1MzIpIGRtYV9hZGRyKTsKLSNpZmRlZiBDT05GSUdfUUxfSVNQX0E2NAotCQkJZHNbaV0uZF9iYXNlX2hpID0gY3B1X3RvX2xlMzIoKHUzMikgKGRtYV9hZGRyPj4zMikpOwotI2VuZGlmIC8qIENPTkZJR19RTF9JU1BfQTY0ICovCi0JCQlkc1tpXS5kX2NvdW50ID0gY3B1X3RvX2xlMzIoc2dfZG1hX2xlbihzZykpOwotCQkJKytzZzsKLQkJfQotCQlzZ19jb3VudCAtPSBJT0NCX1NFR1M7Ci0KLQkJd2hpbGUgKHNnX2NvdW50ID4gMCkgewotCQkJKytjbWQtPmhkci5lbnRyeV9jbnQ7Ci0JCQljb250ID0gKHN0cnVjdCBDb250aW51YXRpb25fRW50cnkgKikKLQkJCQkmaG9zdGRhdGEtPnJlcV9jcHVbaW5fcHRyXTsKLQkJCWluX3B0ciA9IChpbl9wdHIgKyAxKSAmIFFMT0dJQ0lTUF9SRVFfUVVFVUVfTEVOOwotCQkJaWYgKGluX3B0ciA9PSBvdXRfcHRyKSB7Ci0JCQkJcHJpbnRrKCJpc3AxMDIwOiB1bmV4cGVjdGVkIHJlcXVlc3QgcXVldWUgIgotCQkJCSAgICAgICAib3ZlcmZsb3dcbiIpOwotCQkJCXJldHVybiAxOwotCQkJfQotCQkJVFJBQ0UoInF1ZXVlIGNvbnRpbnVhdGlvbiIsIGluX3B0ciwgMCk7Ci0JCQljb250LT5oZHIuZW50cnlfdHlwZSA9IEVOVFJZX0NPTlRJTlVBVElPTjsKLQkJCWNvbnQtPmhkci5lbnRyeV9jbnQgID0gMDsKLQkJCWNvbnQtPmhkci5zeXNfZGVmXzEgID0gMDsKLQkJCWNvbnQtPmhkci5mbGFncyAgICAgID0gMDsKLSNpZm5kZWYgQ09ORklHX1FMX0lTUF9BNjQKLQkJCWNvbnQtPnJlc2VydmVkID0gMDsKLSNlbmRpZgotCQkJZHMgPSBjb250LT5kYXRhc2VnOwotCQkJbiA9IHNnX2NvdW50OwotCQkJaWYgKG4gPiBDT05USU5VQVRJT05fU0VHUykKLQkJCQluID0gQ09OVElOVUFUSU9OX1NFR1M7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7Ci0JCQkJZG1hX2FkZHIgPSBzZ19kbWFfYWRkcmVzcyhzZyk7Ci0JCQkJZHNbaV0uZF9iYXNlID0gY3B1X3RvX2xlMzIoKHUzMikgZG1hX2FkZHIpOwotI2lmZGVmIENPTkZJR19RTF9JU1BfQTY0Ci0JCQkJZHNbaV0uZF9iYXNlX2hpID0gY3B1X3RvX2xlMzIoKHUzMikoZG1hX2FkZHI+PjMyKSk7Ci0jZW5kaWYgLyogQ09ORklHX1FMX0lTUF9BNjQgKi8KLQkJCQlkc1tpXS5kX2NvdW50ID0gY3B1X3RvX2xlMzIoc2dfZG1hX2xlbihzZykpOwotCQkJCSsrc2c7Ci0JCQl9Ci0JCQlzZ19jb3VudCAtPSBuOwotCQl9Ci0JfSBlbHNlIGlmIChDbW5kLT5yZXF1ZXN0X2J1ZmZsZW4pIHsKLQkJLypDbW5kLT5TQ3AucHRyID0gKGNoYXIgKikodW5zaWduZWQgbG9uZykqLwotCQlkbWFfYWRkciA9IHBjaV9tYXBfc2luZ2xlKGhvc3RkYXRhLT5wY2lfZGV2LAotCQkJCSAgICAgICBDbW5kLT5yZXF1ZXN0X2J1ZmZlciwKLQkJCQkgICAgICAgQ21uZC0+cmVxdWVzdF9idWZmbGVuLAotCQkJCSAgICAgICBDbW5kLT5zY19kYXRhX2RpcmVjdGlvbik7Ci0JCUNtbmQtPlNDcC5wdHIgPSAoY2hhciAqKSh1bnNpZ25lZCBsb25nKSBkbWFfYWRkcjsKLQotCQljbWQtPmRhdGFzZWdbMF0uZF9iYXNlID0KLQkJCWNwdV90b19sZTMyKCh1MzIpIGRtYV9hZGRyKTsKLSNpZmRlZiBDT05GSUdfUUxfSVNQX0E2NAotCQljbWQtPmRhdGFzZWdbMF0uZF9iYXNlX2hpID0KLQkJCWNwdV90b19sZTMyKCh1MzIpIChkbWFfYWRkcj4+MzIpKTsKLSNlbmRpZiAvKiBDT05GSUdfUUxfSVNQX0E2NCAqLwotCQljbWQtPmRhdGFzZWdbMF0uZF9jb3VudCA9Ci0JCQljcHVfdG9fbGUzMigodTMyKUNtbmQtPnJlcXVlc3RfYnVmZmxlbik7Ci0JCWNtZC0+c2VnbWVudF9jbnQgPSBjcHVfdG9fbGUxNigxKTsKLQl9IGVsc2UgewotCQljbWQtPmRhdGFzZWdbMF0uZF9iYXNlID0gMDsKLSNpZmRlZiBDT05GSUdfUUxfSVNQX0E2NAotCQljbWQtPmRhdGFzZWdbMF0uZF9iYXNlX2hpID0gMDsKLSNlbmRpZiAvKiBDT05GSUdfUUxfSVNQX0E2NCAqLwotCQljbWQtPmRhdGFzZWdbMF0uZF9jb3VudCA9IDA7Ci0JCWNtZC0+c2VnbWVudF9jbnQgPSBjcHVfdG9fbGUxNigxKTsgLyogU2hvdWxkbid0IHRoaXMgYmUgMD8gKi8KLQl9Ci0KLQkvKiBDb21taXR0ZWQsIHJlY29yZCBTY3NpX0NtZCBzbyB3ZSBjYW4gZmluZCBpdCBsYXRlci4gKi8KLQljbWQtPmhhbmRsZSA9IGluX3B0cjsKLQlob3N0ZGF0YS0+Y21kX3Nsb3RzW2luX3B0cl0gPSBDbW5kOwotCi0JaXNwX291dHcoaW5fcHRyLCBob3N0LCBNQk9YNCk7Ci0JaG9zdGRhdGEtPnJlcV9pbl9wdHIgPSBpbl9wdHI7Ci0KLQludW1fZnJlZSA9IFFMT0dJQ0lTUF9SRVFfUVVFVUVfTEVOIC0gUkVRX1FVRVVFX0RFUFRIKGluX3B0ciwgb3V0X3B0cik7Ci0JaG9zdC0+Y2FuX3F1ZXVlID0gaG9zdC0+aG9zdF9idXN5ICsgbnVtX2ZyZWU7Ci0JaG9zdC0+c2dfdGFibGVzaXplID0gUUxPR0lDSVNQX01BWF9TRyhudW1fZnJlZSk7Ci0KLQlMRUFWRSgiaXNwMTAyMF9xdWV1ZWNvbW1hbmQiKTsKLQotCXJldHVybiAwOwotfQotCi0KLSNkZWZpbmUgQVNZTkNfRVZFTlRfSU5URVJSVVBUCTB4MDEKLQotaXJxcmV0dXJuX3QgZG9faXNwMTAyMF9pbnRyX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gZGV2X2lkOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZShob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKLQlpc3AxMDIwX2ludHJfaGFuZGxlcihpcnEsIGRldl9pZCwgcmVncyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKLQotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotdm9pZCBpc3AxMDIwX2ludHJfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCVNjc2lfQ21uZCAqQ21uZDsKLQlzdHJ1Y3QgU3RhdHVzX0VudHJ5ICpzdHM7Ci0Jc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IGRldl9pZDsKLQlzdHJ1Y3QgaXNwMTAyMF9ob3N0ZGF0YSAqaG9zdGRhdGE7Ci0JdV9pbnQgaW5fcHRyLCBvdXRfcHRyOwotCXVfc2hvcnQgc3RhdHVzOwotCi0JRU5URVJfSU5UUigiaXNwMTAyMF9pbnRyX2hhbmRsZXIiKTsKLQotCWhvc3RkYXRhID0gKHN0cnVjdCBpc3AxMDIwX2hvc3RkYXRhICopIGhvc3QtPmhvc3RkYXRhOwotCi0JREVCVUdfSU5UUihwcmludGsoInFsb2dpY2lzcCA6IGludGVycnVwdCBvbiBsaW5lICVkXG4iLCBpcnEpKTsKLQotCWlmICghKGlzcF9pbncoaG9zdCwgUENJX0lOVEZfU1RTKSAmIDB4MDQpKSB7Ci0JCS8qIHNwdXJpb3VzIGludGVycnVwdHMgY2FuIGhhcHBlbiBsZWdhbGx5ICovCi0JCURFQlVHX0lOVFIocHJpbnRrKCJxbG9naWNpc3A6IGdvdCBzcHVyaW91cyBpbnRlcnJ1cHRcbiIpKTsKLQkJcmV0dXJuOwotCX0KLQlpbl9wdHIgPSBpc3BfaW53KGhvc3QsIE1CT1g1KTsKLQlpc3Bfb3V0dyhIQ0NSX0NMRUFSX1JJU0NfSU5UUiwgaG9zdCwgSE9TVF9IQ0NSKTsKLQotCWlmICgoaXNwX2ludyhob3N0LCBQQ0lfU0VNQVBIT1JFKSAmIEFTWU5DX0VWRU5UX0lOVEVSUlVQVCkpIHsKLQkJc3RhdHVzID0gaXNwX2ludyhob3N0LCBNQk9YMCk7Ci0KLQkJREVCVUdfSU5UUihwcmludGsoInFsb2dpY2lzcCA6IG1ib3ggY29tcGxldGlvbiBzdGF0dXM6ICV4XG4iLAotCQkJCSAgc3RhdHVzKSk7Ci0KLQkJc3dpdGNoIChzdGF0dXMpIHsKLQkJICAgICAgY2FzZSBBU1lOQ19TQ1NJX0JVU19SRVNFVDoKLQkJICAgICAgY2FzZSBFWEVDVVRJT05fVElNRU9VVF9SRVNFVDoKLQkJCWhvc3RkYXRhLT5zZW5kX21hcmtlciA9IDE7Ci0JCQlicmVhazsKLQkJICAgICAgY2FzZSBJTlZBTElEX0NPTU1BTkQ6Ci0JCSAgICAgIGNhc2UgSE9TVF9JTlRFUkZBQ0VfRVJST1I6Ci0JCSAgICAgIGNhc2UgQ09NTUFORF9FUlJPUjoKLQkJICAgICAgY2FzZSBDT01NQU5EX1BBUkFNX0VSUk9SOgotCQkJcHJpbnRrKCJxbG9naWNpc3AgOiBiYWQgbWFpbGJveCByZXR1cm4gc3RhdHVzXG4iKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWlzcF9vdXR3KDB4MCwgaG9zdCwgUENJX1NFTUFQSE9SRSk7Ci0JfQotCW91dF9wdHIgPSBob3N0ZGF0YS0+cmVzX291dF9wdHI7Ci0KLQlERUJVR19JTlRSKHByaW50aygicWxvZ2ljaXNwIDogcmVzcG9uc2UgcXVldWUgdXBkYXRlXG4iKSk7Ci0JREVCVUdfSU5UUihwcmludGsoInFsb2dpY2lzcCA6IHJlc3BvbnNlIHF1ZXVlIGRlcHRoICVkXG4iLAotCQkJICBRVUVVRV9ERVBUSChpbl9wdHIsIG91dF9wdHIsIFJFU19RVUVVRV9MRU4pKSk7Ci0KLQl3aGlsZSAob3V0X3B0ciAhPSBpbl9wdHIpIHsKLQkJdV9pbnQgY21kX3Nsb3Q7Ci0KLQkJc3RzID0gKHN0cnVjdCBTdGF0dXNfRW50cnkgKikgJmhvc3RkYXRhLT5yZXNfY3B1W291dF9wdHJdOwotCQlvdXRfcHRyID0gKG91dF9wdHIgKyAxKSAmIFJFU19RVUVVRV9MRU47Ci0KLQkJY21kX3Nsb3QgPSBzdHMtPmhhbmRsZTsKLQkJQ21uZCA9IGhvc3RkYXRhLT5jbWRfc2xvdHNbY21kX3Nsb3RdOwotCQlob3N0ZGF0YS0+Y21kX3Nsb3RzW2NtZF9zbG90XSA9IE5VTEw7Ci0KLQkJVFJBQ0UoImRvbmUiLCBvdXRfcHRyLCBDbW5kKTsKLQotCQlpZiAobGUxNl90b19jcHUoc3RzLT5jb21wbGV0aW9uX3N0YXR1cykgPT0gQ1NfUkVTRVRfT0NDVVJSRUQKLQkJICAgIHx8IGxlMTZfdG9fY3B1KHN0cy0+Y29tcGxldGlvbl9zdGF0dXMpID09IENTX0FCT1JURUQKLQkJICAgIHx8IChsZTE2X3RvX2NwdShzdHMtPnN0YXR1c19mbGFncykgJiBTVEZfQlVTX1JFU0VUKSkKLQkJCWhvc3RkYXRhLT5zZW5kX21hcmtlciA9IDE7Ci0KLQkJaWYgKGxlMTZfdG9fY3B1KHN0cy0+c3RhdGVfZmxhZ3MpICYgU0ZfR09UX1NFTlNFKQotCQkJbWVtY3B5KENtbmQtPnNlbnNlX2J1ZmZlciwgc3RzLT5yZXFfc2Vuc2VfZGF0YSwKLQkJCSAgICAgICBzaXplb2YoQ21uZC0+c2Vuc2VfYnVmZmVyKSk7Ci0KLQkJREVCVUdfSU5UUihpc3AxMDIwX3ByaW50X3N0YXR1c19lbnRyeShzdHMpKTsKLQotCQlpZiAoc3RzLT5oZHIuZW50cnlfdHlwZSA9PSBFTlRSWV9TVEFUVVMpCi0JCQlDbW5kLT5yZXN1bHQgPSBpc3AxMDIwX3JldHVybl9zdGF0dXMoc3RzKTsKLQkJZWxzZQotCQkJQ21uZC0+cmVzdWx0ID0gRElEX0VSUk9SIDw8IDE2OwotCi0JCWlmIChDbW5kLT51c2Vfc2cpCi0JCQlwY2lfdW5tYXBfc2coaG9zdGRhdGEtPnBjaV9kZXYsCi0JCQkJICAgICAoc3RydWN0IHNjYXR0ZXJsaXN0ICopQ21uZC0+YnVmZmVyLAotCQkJCSAgICAgQ21uZC0+dXNlX3NnLAotCQkJCSAgICAgQ21uZC0+c2NfZGF0YV9kaXJlY3Rpb24pOwotCQllbHNlIGlmIChDbW5kLT5yZXF1ZXN0X2J1ZmZsZW4pCi0JCQlwY2lfdW5tYXBfc2luZ2xlKGhvc3RkYXRhLT5wY2lfZGV2LAotI2lmZGVmIENPTkZJR19RTF9JU1BfQTY0Ci0JCQkJCSAoZG1hX2FkZHJfdCkoKGxvbmcpQ21uZC0+U0NwLnB0ciksCi0jZWxzZQotCQkJCQkgKHUzMikoKGxvbmcpQ21uZC0+U0NwLnB0ciksCi0jZW5kaWYKLQkJCQkJIENtbmQtPnJlcXVlc3RfYnVmZmxlbiwKLQkJCQkJIENtbmQtPnNjX2RhdGFfZGlyZWN0aW9uKTsKLQotCQlpc3Bfb3V0dyhvdXRfcHRyLCBob3N0LCBNQk9YNSk7Ci0JCSgqQ21uZC0+c2NzaV9kb25lKShDbW5kKTsKLQl9Ci0JaG9zdGRhdGEtPnJlc19vdXRfcHRyID0gb3V0X3B0cjsKLQotCUxFQVZFX0lOVFIoImlzcDEwMjBfaW50cl9oYW5kbGVyIik7Ci19Ci0KLQotc3RhdGljIGludCBpc3AxMDIwX3JldHVybl9zdGF0dXMoc3RydWN0IFN0YXR1c19FbnRyeSAqc3RzKQotewotCWludCBob3N0X3N0YXR1cyA9IERJRF9FUlJPUjsKLSNpZiBERUJVR19JU1AxMDIwX0lOVFIKLQlzdGF0aWMgY2hhciAqcmVhc29uW10gPSB7Ci0JCSJESURfT0siLAotCQkiRElEX05PX0NPTk5FQ1QiLAotCQkiRElEX0JVU19CVVNZIiwKLQkJIkRJRF9USU1FX09VVCIsCi0JCSJESURfQkFEX1RBUkdFVCIsCi0JCSJESURfQUJPUlQiLAotCQkiRElEX1BBUklUWSIsCi0JCSJESURfRVJST1IiLAotCQkiRElEX1JFU0VUIiwKLQkJIkRJRF9CQURfSU5UUiIKLQl9OwotI2VuZGlmIC8qIERFQlVHX0lTUDEwMjBfSU5UUiAqLwotCi0JRU5URVIoImlzcDEwMjBfcmV0dXJuX3N0YXR1cyIpOwotCi0JREVCVUcocHJpbnRrKCJxbG9naWNpc3AgOiBjb21wbGV0aW9uIHN0YXR1cyA9IDB4JTA0eFxuIiwKLQkJICAgICBsZTE2X3RvX2NwdShzdHMtPmNvbXBsZXRpb25fc3RhdHVzKSkpOwotCi0Jc3dpdGNoKGxlMTZfdG9fY3B1KHN0cy0+Y29tcGxldGlvbl9zdGF0dXMpKSB7Ci0JICAgICAgY2FzZSBDU19DT01QTEVURToKLQkJaG9zdF9zdGF0dXMgPSBESURfT0s7Ci0JCWJyZWFrOwotCSAgICAgIGNhc2UgQ1NfSU5DT01QTEVURToKLQkJaWYgKCEobGUxNl90b19jcHUoc3RzLT5zdGF0ZV9mbGFncykgJiBTRl9HT1RfQlVTKSkKLQkJCWhvc3Rfc3RhdHVzID0gRElEX05PX0NPTk5FQ1Q7Ci0JCWVsc2UgaWYgKCEobGUxNl90b19jcHUoc3RzLT5zdGF0ZV9mbGFncykgJiBTRl9HT1RfVEFSR0VUKSkKLQkJCWhvc3Rfc3RhdHVzID0gRElEX0JBRF9UQVJHRVQ7Ci0JCWVsc2UgaWYgKCEobGUxNl90b19jcHUoc3RzLT5zdGF0ZV9mbGFncykgJiBTRl9TRU5UX0NEQikpCi0JCQlob3N0X3N0YXR1cyA9IERJRF9FUlJPUjsKLQkJZWxzZSBpZiAoIShsZTE2X3RvX2NwdShzdHMtPnN0YXRlX2ZsYWdzKSAmIFNGX1RSQU5TRkVSUkVEX0RBVEEpKQotCQkJaG9zdF9zdGF0dXMgPSBESURfRVJST1I7Ci0JCWVsc2UgaWYgKCEobGUxNl90b19jcHUoc3RzLT5zdGF0ZV9mbGFncykgJiBTRl9HT1RfU1RBVFVTKSkKLQkJCWhvc3Rfc3RhdHVzID0gRElEX0VSUk9SOwotCQllbHNlIGlmICghKGxlMTZfdG9fY3B1KHN0cy0+c3RhdGVfZmxhZ3MpICYgU0ZfR09UX1NFTlNFKSkKLQkJCWhvc3Rfc3RhdHVzID0gRElEX0VSUk9SOwotCQlicmVhazsKLQkgICAgICBjYXNlIENTX0RNQV9FUlJPUjoKLQkgICAgICBjYXNlIENTX1RSQU5TUE9SVF9FUlJPUjoKLQkJaG9zdF9zdGF0dXMgPSBESURfRVJST1I7Ci0JCWJyZWFrOwotCSAgICAgIGNhc2UgQ1NfUkVTRVRfT0NDVVJSRUQ6Ci0JCWhvc3Rfc3RhdHVzID0gRElEX1JFU0VUOwotCQlicmVhazsKLQkgICAgICBjYXNlIENTX0FCT1JURUQ6Ci0JCWhvc3Rfc3RhdHVzID0gRElEX0FCT1JUOwotCQlicmVhazsKLQkgICAgICBjYXNlIENTX1RJTUVPVVQ6Ci0JCWhvc3Rfc3RhdHVzID0gRElEX1RJTUVfT1VUOwotCQlicmVhazsKLQkgICAgICBjYXNlIENTX0RBVEFfT1ZFUlJVTjoKLQkgICAgICBjYXNlIENTX0NPTU1BTkRfT1ZFUlJVTjoKLQkgICAgICBjYXNlIENTX1NUQVRVU19PVkVSUlVOOgotCSAgICAgIGNhc2UgQ1NfQkFEX01FU1NBR0U6Ci0JICAgICAgY2FzZSBDU19OT19NRVNTQUdFX09VVDoKLQkgICAgICBjYXNlIENTX0VYVF9JRF9GQUlMRUQ6Ci0JICAgICAgY2FzZSBDU19JREVfTVNHX0ZBSUxFRDoKLQkgICAgICBjYXNlIENTX0FCT1JUX01TR19GQUlMRUQ6Ci0JICAgICAgY2FzZSBDU19OT1BfTVNHX0ZBSUxFRDoKLQkgICAgICBjYXNlIENTX1BBUklUWV9FUlJPUl9NU0dfRkFJTEVEOgotCSAgICAgIGNhc2UgQ1NfREVWSUNFX1JFU0VUX01TR19GQUlMRUQ6Ci0JICAgICAgY2FzZSBDU19JRF9NU0dfRkFJTEVEOgotCSAgICAgIGNhc2UgQ1NfVU5FWFBfQlVTX0ZSRUU6Ci0JCWhvc3Rfc3RhdHVzID0gRElEX0VSUk9SOwotCQlicmVhazsKLQkgICAgICBjYXNlIENTX0RBVEFfVU5ERVJSVU46Ci0JCWhvc3Rfc3RhdHVzID0gRElEX09LOwotCQlicmVhazsKLQkgICAgICBkZWZhdWx0OgotCQlwcmludGsoInFsb2dpY2lzcCA6IHVua25vd24gY29tcGxldGlvbiBzdGF0dXMgMHglMDR4XG4iLAotCQkgICAgICAgbGUxNl90b19jcHUoc3RzLT5jb21wbGV0aW9uX3N0YXR1cykpOwotCQlob3N0X3N0YXR1cyA9IERJRF9FUlJPUjsKLQkJYnJlYWs7Ci0JfQotCi0JREVCVUdfSU5UUihwcmludGsoInFsb2dpY2lzcCA6IGhvc3Qgc3RhdHVzICglcykgc2NzaSBzdGF0dXMgJXhcbiIsCi0JCQkgIHJlYXNvbltob3N0X3N0YXR1c10sIGxlMTZfdG9fY3B1KHN0cy0+c2NzaV9zdGF0dXMpKSk7Ci0KLQlMRUFWRSgiaXNwMTAyMF9yZXR1cm5fc3RhdHVzIik7Ci0KLQlyZXR1cm4gKGxlMTZfdG9fY3B1KHN0cy0+c2NzaV9zdGF0dXMpICYgU1RBVFVTX01BU0spIHwgKGhvc3Rfc3RhdHVzIDw8IDE2KTsKLX0KLQotCi1zdGF0aWMgaW50IGlzcDEwMjBfYmlvc3BhcmFtKHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldiwgc3RydWN0IGJsb2NrX2RldmljZSAqbiwKLQkJc2VjdG9yX3QgY2FwYWNpdHksIGludCBpcFtdKQotewotCWludCBzaXplID0gY2FwYWNpdHk7Ci0KLQlFTlRFUigiaXNwMTAyMF9iaW9zcGFyYW0iKTsKLQotCWlwWzBdID0gNjQ7Ci0JaXBbMV0gPSAzMjsKLQlpcFsyXSA9IHNpemUgPj4gMTE7Ci0JaWYgKGlwWzJdID4gMTAyNCkgewotCQlpcFswXSA9IDI1NTsKLQkJaXBbMV0gPSA2MzsKLQkJaXBbMl0gPSBzaXplIC8gKGlwWzBdICogaXBbMV0pOwotI2lmIDAKLQkJaWYgKGlwWzJdID4gMTAyMykKLQkJCWlwWzJdID0gMTAyMzsKLSNlbmRpZgkJCQotCX0KLQotCUxFQVZFKCJpc3AxMDIwX2Jpb3NwYXJhbSIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIGludCBpc3AxMDIwX3Jlc2V0X2hhcmR3YXJlKHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QpCi17Ci0JdV9zaG9ydCBwYXJhbVs2XTsKLQlpbnQgbG9vcF9jb3VudDsKLQotCUVOVEVSKCJpc3AxMDIwX3Jlc2V0X2hhcmR3YXJlIik7Ci0KLQlpc3Bfb3V0dyhJU1BfUkVTRVQsIGhvc3QsIFBDSV9JTlRGX0NUTCk7Ci0JdWRlbGF5KDEwMCk7Ci0JaXNwX291dHcoSENDUl9SRVNFVCwgaG9zdCwgSE9TVF9IQ0NSKTsKLQl1ZGVsYXkoMTAwKTsKLQlpc3Bfb3V0dyhIQ0NSX1JFTEVBU0UsIGhvc3QsIEhPU1RfSENDUik7Ci0JaXNwX291dHcoSENDUl9CSU9TX0RJU0FCTEUsIGhvc3QsIEhPU1RfSENDUik7Ci0KLQlsb29wX2NvdW50ID0gREVGQVVMVF9MT09QX0NPVU5UOwotCXdoaWxlICgtLWxvb3BfY291bnQgJiYgaXNwX2ludyhob3N0LCBIT1NUX0hDQ1IpID09IFJJU0NfQlVTWSkgewotCQliYXJyaWVyKCk7Ci0JCWNwdV9yZWxheCgpOwotCX0KLQlpZiAoIWxvb3BfY291bnQpCi0JCXByaW50aygicWxvZ2ljaXNwOiByZXNldF9oYXJkd2FyZSBsb29wIHRpbWVvdXRcbiIpOwotCi0JaXNwX291dHcoMCwgaG9zdCwgSVNQX0NGRzEpOwotCi0jaWYgREVCVUdfSVNQMTAyMAotCXByaW50aygicWxvZ2ljaXNwIDogbWJveCAwIDB4JTA0eCBcbiIsIGlzcF9pbncoaG9zdCwgTUJPWDApKTsKLQlwcmludGsoInFsb2dpY2lzcCA6IG1ib3ggMSAweCUwNHggXG4iLCBpc3BfaW53KGhvc3QsIE1CT1gxKSk7Ci0JcHJpbnRrKCJxbG9naWNpc3AgOiBtYm94IDIgMHglMDR4IFxuIiwgaXNwX2ludyhob3N0LCBNQk9YMikpOwotCXByaW50aygicWxvZ2ljaXNwIDogbWJveCAzIDB4JTA0eCBcbiIsIGlzcF9pbncoaG9zdCwgTUJPWDMpKTsKLQlwcmludGsoInFsb2dpY2lzcCA6IG1ib3ggNCAweCUwNHggXG4iLCBpc3BfaW53KGhvc3QsIE1CT1g0KSk7Ci0JcHJpbnRrKCJxbG9naWNpc3AgOiBtYm94IDUgMHglMDR4IFxuIiwgaXNwX2ludyhob3N0LCBNQk9YNSkpOwotI2VuZGlmIC8qIERFQlVHX0lTUDEwMjAgKi8KLQotCXBhcmFtWzBdID0gTUJPWF9OT19PUDsKLQlpc3AxMDIwX21ib3hfY29tbWFuZChob3N0LCBwYXJhbSk7Ci0JaWYgKHBhcmFtWzBdICE9IE1CT1hfQ09NTUFORF9DT01QTEVURSkgewotCQlwcmludGsoInFsb2dpY2lzcCA6IE5PUCB0ZXN0IGZhaWxlZFxuIik7Ci0JCXJldHVybiAxOwotCX0KLQotCURFQlVHKHByaW50aygicWxvZ2ljaXNwIDogbG9hZGluZyByaXNjIHJhbVxuIikpOwotCi0jaWYgUkVMT0FEX0ZJUk1XQVJFCi0JZm9yIChsb29wX2NvdW50ID0gMDsgbG9vcF9jb3VudCA8IHJpc2NfY29kZV9sZW5ndGgwMTsgbG9vcF9jb3VudCsrKSB7Ci0JCXBhcmFtWzBdID0gTUJPWF9XUklURV9SQU1fV09SRDsKLQkJcGFyYW1bMV0gPSByaXNjX2NvZGVfYWRkcjAxICsgbG9vcF9jb3VudDsKLQkJcGFyYW1bMl0gPSByaXNjX2NvZGUwMVtsb29wX2NvdW50XTsKLQkJaXNwMTAyMF9tYm94X2NvbW1hbmQoaG9zdCwgcGFyYW0pOwotCQlpZiAocGFyYW1bMF0gIT0gTUJPWF9DT01NQU5EX0NPTVBMRVRFKSB7Ci0JCQlwcmludGsoInFsb2dpY2lzcCA6IGZpcm13YXJlIGxvYWQgZmFpbHVyZSBhdCAlZFxuIiwKLQkJCSAgICBsb29wX2NvdW50KTsKLQkJCXJldHVybiAxOwotCQl9Ci0JfQotI2VuZGlmIC8qIFJFTE9BRF9GSVJNV0FSRSAqLwotCi0JREVCVUcocHJpbnRrKCJxbG9naWNpc3AgOiB2ZXJpZnlpbmcgY2hlY2tzdW1cbiIpKTsKLQotCXBhcmFtWzBdID0gTUJPWF9WRVJJRllfQ0hFQ0tTVU07Ci0JcGFyYW1bMV0gPSByaXNjX2NvZGVfYWRkcjAxOwotCi0JaXNwMTAyMF9tYm94X2NvbW1hbmQoaG9zdCwgcGFyYW0pOwotCi0JaWYgKHBhcmFtWzBdICE9IE1CT1hfQ09NTUFORF9DT01QTEVURSkgewotCQlwcmludGsoInFsb2dpY2lzcCA6IHJhbSBjaGVja3N1bSBmYWlsdXJlXG4iKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JREVCVUcocHJpbnRrKCJxbG9naWNpc3AgOiBleGVjdXRpbmcgZmlybXdhcmVcbiIpKTsKLQotCXBhcmFtWzBdID0gTUJPWF9FWEVDX0ZJUk1XQVJFOwotCXBhcmFtWzFdID0gcmlzY19jb2RlX2FkZHIwMTsKLQotCWlzcDEwMjBfbWJveF9jb21tYW5kKGhvc3QsIHBhcmFtKTsKLQotCXBhcmFtWzBdID0gTUJPWF9BQk9VVF9GSVJNV0FSRTsKLQotCWlzcDEwMjBfbWJveF9jb21tYW5kKGhvc3QsIHBhcmFtKTsKLQotCWlmIChwYXJhbVswXSAhPSBNQk9YX0NPTU1BTkRfQ09NUExFVEUpIHsKLQkJcHJpbnRrKCJxbG9naWNpc3AgOiBhYm91dCBmaXJtd2FyZSBmYWlsdXJlXG4iKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JREVCVUcocHJpbnRrKCJxbG9naWNpc3AgOiBmaXJtd2FyZSBtYWpvciByZXZpc2lvbiAlZFxuIiwgcGFyYW1bMV0pKTsKLQlERUJVRyhwcmludGsoInFsb2dpY2lzcCA6IGZpcm13YXJlIG1pbm9yIHJldmlzaW9uICVkXG4iLCBwYXJhbVsyXSkpOwotCi0JTEVBVkUoImlzcDEwMjBfcmVzZXRfaGFyZHdhcmUiKTsKLQotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyBpbnQgaXNwMTAyMF9pbml0KHN0cnVjdCBTY3NpX0hvc3QgKnNoKQotewotCXVfbG9uZyBpb19iYXNlLCBtZW1fYmFzZSwgaW9fZmxhZ3MsIG1lbV9mbGFnczsKLQlzdHJ1Y3QgaXNwMTAyMF9ob3N0ZGF0YSAqaG9zdGRhdGE7Ci0JdV9jaGFyIHJldmlzaW9uOwotCXVfaW50IGlycTsKLQl1X3Nob3J0IGNvbW1hbmQ7Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXY7Ci0KLQlFTlRFUigiaXNwMTAyMF9pbml0Iik7Ci0KLQlob3N0ZGF0YSA9IChzdHJ1Y3QgaXNwMTAyMF9ob3N0ZGF0YSAqKSBzaC0+aG9zdGRhdGE7Ci0JcGRldiA9IGhvc3RkYXRhLT5wY2lfZGV2OwotCi0JaWYgKHBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIFBDSV9DT01NQU5ELCAmY29tbWFuZCkKLQkgICAgfHwgcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgUENJX0NMQVNTX1JFVklTSU9OLCAmcmV2aXNpb24pKQotCXsKLQkJcHJpbnRrKCJxbG9naWNpc3AgOiBlcnJvciByZWFkaW5nIFBDSSBjb25maWd1cmF0aW9uXG4iKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JaW9fYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTsKLQltZW1fYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAxKTsKLQlpb19mbGFncyA9IHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCAwKTsKLQltZW1fZmxhZ3MgPSBwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgMSk7Ci0JaXJxID0gcGRldi0+aXJxOwotCi0JaWYgKHBkZXYtPnZlbmRvciAhPSBQQ0lfVkVORE9SX0lEX1FMT0dJQykgewotCQlwcmludGsoInFsb2dpY2lzcCA6IDB4JTA0eCBpcyBub3QgUUxvZ2ljIHZlbmRvciBJRFxuIiwKLQkJICAgICAgIHBkZXYtPnZlbmRvcik7Ci0JCXJldHVybiAxOwotCX0KLQotCWlmIChwZGV2LT5kZXZpY2UgIT0gUENJX0RFVklDRV9JRF9RTE9HSUNfSVNQMTAyMCkgewotCQlwcmludGsoInFsb2dpY2lzcCA6IDB4JTA0eCBkb2VzIG5vdCBtYXRjaCBJU1AxMDIwIGRldmljZSBpZFxuIiwKLQkJICAgICAgIHBkZXYtPmRldmljZSk7Ci0JCXJldHVybiAxOwotCX0KLQotI2lmZGVmIF9fYWxwaGFfXwotCS8qIEZvcmNlIEFMUEhBIHRvIHVzZSBidXMgSS9PIGFuZCBub3QgYnVzIE1FTS4KLQkgICBUaGlzIGlzIHRvIGF2b2lkIGhhdmluZyB0byB1c2UgSEFFX01FTSByZWdpc3RlcnMsCi0JICAgd2hpY2ggaXMgYnJva2VuIG9uIHNvbWUgcGxhdGZvcm1zIGFuZCB3aXRoIFNNUC4gICovCi0JY29tbWFuZCAmPSB+UENJX0NPTU1BTkRfTUVNT1JZOyAKLSNlbmRpZgotCi0Jc2gtPmlvX3BvcnQgPSBpb19iYXNlOwotCi0JaWYgKCFyZXF1ZXN0X3JlZ2lvbihzaC0+aW9fcG9ydCwgMHhmZiwgInFsb2dpY2lzcCIpKSB7Ci0JCXByaW50aygicWxvZ2ljaXNwIDogaS9vIHJlZ2lvbiAweCVseC0weCVseCBhbHJlYWR5ICIKLQkJICAgICAgICJpbiB1c2VcbiIsCi0JCSAgICAgICBzaC0+aW9fcG9ydCwgc2gtPmlvX3BvcnQgKyAweGZmKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0gCWlmICgoY29tbWFuZCAmIFBDSV9DT01NQU5EX01FTU9SWSkgJiYKLSAJICAgICgobWVtX2ZsYWdzICYgMSkgPT0gMCkpIHsKLSAJCWhvc3RkYXRhLT5tZW1hZGRyID0gaW9yZW1hcChtZW1fYmFzZSwgUEFHRV9TSVpFKTsKLQkJaWYgKCFob3N0ZGF0YS0+bWVtYWRkcikgewotIAkJCXByaW50aygicWxvZ2ljaXNwIDogaS9vIHJlbWFwcGluZyBmYWlsZWQuXG4iKTsKLQkJCWdvdG8gb3V0X3JlbGVhc2U7Ci0JCX0KLSAJfSBlbHNlIHsKLQkJaWYgKGNvbW1hbmQgJiBQQ0lfQ09NTUFORF9JTyAmJiAoaW9fZmxhZ3MgJiAzKSAhPSAxKSB7Ci0JCQlwcmludGsoInFsb2dpY2lzcCA6IGkvbyBtYXBwaW5nIGlzIGRpc2FibGVkXG4iKTsKLQkJCWdvdG8gb3V0X3JlbGVhc2U7Ci0gCQl9Ci0gCQlob3N0ZGF0YS0+bWVtYWRkciA9IE5VTEw7IC8qIHplcm8gdG8gc2lnbmlmeSBubyBpL28gbWFwcGluZyAqLwotIAkJbWVtX2Jhc2UgPSAwOwotCX0KLQotCWlmIChyZXZpc2lvbiAhPSBJU1AxMDIwX1JFVl9JRCkKLQkJcHJpbnRrKCJxbG9naWNpc3AgOiBuZXcgaXNwMTAyMCByZXZpc2lvbiBJRCAoJWQpXG4iLCByZXZpc2lvbik7Ci0KLQlpZiAoaXNwX2ludyhzaCwgIFBDSV9JRF9MT1cpICE9IFBDSV9WRU5ET1JfSURfUUxPR0lDCi0JICAgIHx8IGlzcF9pbncoc2gsIFBDSV9JRF9ISUdIKSAhPSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1AxMDIwKQotCXsKLQkJcHJpbnRrKCJxbG9naWNpc3AgOiBjYW4ndCBkZWNvZGUgJXMgYWRkcmVzcyBzcGFjZSAweCVseFxuIiwKLQkJICAgICAgIChpb19iYXNlID8gIkkvTyIgOiAiTUVNIiksCi0JCSAgICAgICAoaW9fYmFzZSA/IGlvX2Jhc2UgOiBtZW1fYmFzZSkpOwotCQlnb3RvIG91dF91bm1hcDsKLQl9Ci0KLQlob3N0ZGF0YS0+cmV2aXNpb24gPSByZXZpc2lvbjsKLQotCXNoLT5pcnEgPSBpcnE7Ci0Jc2gtPm1heF9pZCA9IE1BWF9UQVJHRVRTOwotCXNoLT5tYXhfbHVuID0gTUFYX0xVTlM7Ci0KLQlob3N0ZGF0YS0+cmVzX2NwdSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGhvc3RkYXRhLT5wY2lfZGV2LAotCQkJCQkJIFFTSVpFKFJFU19RVUVVRV9MRU4pLAotCQkJCQkJICZob3N0ZGF0YS0+cmVzX2RtYSk7Ci0JaWYgKGhvc3RkYXRhLT5yZXNfY3B1ID09IE5VTEwpIHsKLQkJcHJpbnRrKCJxbG9naWNpc3AgOiBjYW4ndCBhbGxvY2F0ZSByZXNwb25zZSBxdWV1ZVxuIik7Ci0JCWdvdG8gb3V0X3VubWFwOwotCX0KLQotCWhvc3RkYXRhLT5yZXFfY3B1ID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoaG9zdGRhdGEtPnBjaV9kZXYsCi0JCQkJCQkgUVNJWkUoUUxPR0lDSVNQX1JFUV9RVUVVRV9MRU4pLAotCQkJCQkJICZob3N0ZGF0YS0+cmVxX2RtYSk7Ci0JaWYgKGhvc3RkYXRhLT5yZXFfY3B1ID09IE5VTEwpIHsKLQkJcGNpX2ZyZWVfY29uc2lzdGVudChob3N0ZGF0YS0+cGNpX2RldiwKLQkJCQkgICAgUVNJWkUoUkVTX1FVRVVFX0xFTiksCi0JCQkJICAgIGhvc3RkYXRhLT5yZXNfY3B1LAotCQkJCSAgICBob3N0ZGF0YS0+cmVzX2RtYSk7Ci0JCXByaW50aygicWxvZ2ljaXNwIDogY2FuJ3QgYWxsb2NhdGUgcmVxdWVzdCBxdWV1ZVxuIik7Ci0JCWdvdG8gb3V0X3VubWFwOwotCX0KLQotCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwotCi0JTEVBVkUoImlzcDEwMjBfaW5pdCIpOwotCi0JcmV0dXJuIDA7Ci0KLW91dF91bm1hcDoKLQlpb3VubWFwKGhvc3RkYXRhLT5tZW1hZGRyKTsKLW91dF9yZWxlYXNlOgotCXJlbGVhc2VfcmVnaW9uKHNoLT5pb19wb3J0LCAweGZmKTsKLQlyZXR1cm4gMTsKLX0KLQotCi0jaWYgVVNFX05WUkFNX0RFRkFVTFRTCi0KLXN0YXRpYyBpbnQgaXNwMTAyMF9nZXRfZGVmYXVsdHMoc3RydWN0IFNjc2lfSG9zdCAqaG9zdCkKLXsKLQlpbnQgaTsKLQl1X3Nob3J0IHZhbHVlOwotCXN0cnVjdCBpc3AxMDIwX2hvc3RkYXRhICpob3N0ZGF0YSA9Ci0JCShzdHJ1Y3QgaXNwMTAyMF9ob3N0ZGF0YSAqKSBob3N0LT5ob3N0ZGF0YTsKLQotCUVOVEVSKCJpc3AxMDIwX2dldF9kZWZhdWx0cyIpOwotCi0JaWYgKCFpc3AxMDIwX3ZlcmlmeV9udnJhbShob3N0KSkgewotCQlwcmludGsoInFsb2dpY2lzcCA6IG52cmFtIGNoZWNrc3VtIGZhaWx1cmVcbiIpOwotCQlwcmludGsoInFsb2dpY2lzcCA6IGF0dGVtcHRpbmcgdG8gdXNlIGRlZmF1bHQgcGFyYW1ldGVyc1xuIik7Ci0JCXJldHVybiBpc3AxMDIwX3NldF9kZWZhdWx0cyhob3N0KTsKLQl9Ci0KLQl2YWx1ZSA9IGlzcDEwMjBfcmVhZF9udnJhbV93b3JkKGhvc3QsIDIpOwotCWhvc3RkYXRhLT5ob3N0X3BhcmFtLmZpZm9fdGhyZXNob2xkID0gKHZhbHVlID4+IDgpICYgMHgwMzsKLQlob3N0ZGF0YS0+aG9zdF9wYXJhbS5ob3N0X2FkYXB0ZXJfZW5hYmxlID0gKHZhbHVlID4+IDExKSAmIDB4MDE7Ci0JaG9zdGRhdGEtPmhvc3RfcGFyYW0uaW5pdGlhdG9yX3Njc2lfaWQgPSAodmFsdWUgPj4gMTIpICYgMHgwZjsKLQotCXZhbHVlID0gaXNwMTAyMF9yZWFkX252cmFtX3dvcmQoaG9zdCwgMyk7Ci0JaG9zdGRhdGEtPmhvc3RfcGFyYW0uYnVzX3Jlc2V0X2RlbGF5ID0gdmFsdWUgJiAweGZmOwotCWhvc3RkYXRhLT5ob3N0X3BhcmFtLnJldHJ5X2NvdW50ID0gdmFsdWUgPj4gODsKLQotCXZhbHVlID0gaXNwMTAyMF9yZWFkX252cmFtX3dvcmQoaG9zdCwgNCk7Ci0JaG9zdGRhdGEtPmhvc3RfcGFyYW0ucmV0cnlfZGVsYXkgPSB2YWx1ZSAmIDB4ZmY7Ci0JaG9zdGRhdGEtPmhvc3RfcGFyYW0uYXN5bmNfZGF0YV9zZXR1cF90aW1lID0gKHZhbHVlID4+IDgpICYgMHgwZjsKLQlob3N0ZGF0YS0+aG9zdF9wYXJhbS5yZXFfYWNrX2FjdGl2ZV9uZWdhdGlvbiA9ICh2YWx1ZSA+PiAxMikgJiAweDAxOwotCWhvc3RkYXRhLT5ob3N0X3BhcmFtLmRhdGFfbGluZV9hY3RpdmVfbmVnYXRpb24gPSAodmFsdWUgPj4gMTMpICYgMHgwMTsKLQlob3N0ZGF0YS0+aG9zdF9wYXJhbS5kYXRhX2RtYV9idXJzdF9lbmFibGUgPSAodmFsdWUgPj4gMTQpICYgMHgwMTsKLQlob3N0ZGF0YS0+aG9zdF9wYXJhbS5jb21tYW5kX2RtYV9idXJzdF9lbmFibGUgPSAodmFsdWUgPj4gMTUpOwotCi0JdmFsdWUgPSBpc3AxMDIwX3JlYWRfbnZyYW1fd29yZChob3N0LCA1KTsKLQlob3N0ZGF0YS0+aG9zdF9wYXJhbS50YWdfYWdpbmcgPSB2YWx1ZSAmIDB4ZmY7Ci0KLQl2YWx1ZSA9IGlzcDEwMjBfcmVhZF9udnJhbV93b3JkKGhvc3QsIDYpOwotCWhvc3RkYXRhLT5ob3N0X3BhcmFtLnNlbGVjdGlvbl90aW1lb3V0ID0gdmFsdWUgJiAweGZmZmY7Ci0KLQl2YWx1ZSA9IGlzcDEwMjBfcmVhZF9udnJhbV93b3JkKGhvc3QsIDcpOwotCWhvc3RkYXRhLT5ob3N0X3BhcmFtLm1heF9xdWV1ZV9kZXB0aCA9IHZhbHVlICYgMHhmZmZmOwotCi0jaWYgREVCVUdfSVNQMTAyMF9TRVRVUAotCXByaW50aygicWxvZ2ljaXNwIDogZmlmbyB0aHJlc2hvbGQ9JWRcbiIsCi0JICAgICAgIGhvc3RkYXRhLT5ob3N0X3BhcmFtLmZpZm9fdGhyZXNob2xkKTsKLQlwcmludGsoInFsb2dpY2lzcCA6IGluaXRpYXRvciBzY3NpIGlkPSVkXG4iLAotCSAgICAgICBob3N0ZGF0YS0+aG9zdF9wYXJhbS5pbml0aWF0b3Jfc2NzaV9pZCk7Ci0JcHJpbnRrKCJxbG9naWNpc3AgOiBidXMgcmVzZXQgZGVsYXk9JWRcbiIsCi0JICAgICAgIGhvc3RkYXRhLT5ob3N0X3BhcmFtLmJ1c19yZXNldF9kZWxheSk7Ci0JcHJpbnRrKCJxbG9naWNpc3AgOiByZXRyeSBjb3VudD0lZFxuIiwKLQkgICAgICAgaG9zdGRhdGEtPmhvc3RfcGFyYW0ucmV0cnlfY291bnQpOwotCXByaW50aygicWxvZ2ljaXNwIDogcmV0cnkgZGVsYXk9JWRcbiIsCi0JICAgICAgIGhvc3RkYXRhLT5ob3N0X3BhcmFtLnJldHJ5X2RlbGF5KTsKLQlwcmludGsoInFsb2dpY2lzcCA6IGFzeW5jIGRhdGEgc2V0dXAgdGltZT0lZFxuIiwKLQkgICAgICAgaG9zdGRhdGEtPmhvc3RfcGFyYW0uYXN5bmNfZGF0YV9zZXR1cF90aW1lKTsKLQlwcmludGsoInFsb2dpY2lzcCA6IHJlcS9hY2sgYWN0aXZlIG5lZ2F0aW9uPSVkXG4iLAotCSAgICAgICBob3N0ZGF0YS0+aG9zdF9wYXJhbS5yZXFfYWNrX2FjdGl2ZV9uZWdhdGlvbik7Ci0JcHJpbnRrKCJxbG9naWNpc3AgOiBkYXRhIGxpbmUgYWN0aXZlIG5lZ2F0aW9uPSVkXG4iLAotCSAgICAgICBob3N0ZGF0YS0+aG9zdF9wYXJhbS5kYXRhX2xpbmVfYWN0aXZlX25lZ2F0aW9uKTsKLQlwcmludGsoInFsb2dpY2lzcCA6IGRhdGEgRE1BIGJ1cnN0IGVuYWJsZT0lZFxuIiwKLQkgICAgICAgaG9zdGRhdGEtPmhvc3RfcGFyYW0uZGF0YV9kbWFfYnVyc3RfZW5hYmxlKTsKLQlwcmludGsoInFsb2dpY2lzcCA6IGNvbW1hbmQgRE1BIGJ1cnN0IGVuYWJsZT0lZFxuIiwKLQkgICAgICAgaG9zdGRhdGEtPmhvc3RfcGFyYW0uY29tbWFuZF9kbWFfYnVyc3RfZW5hYmxlKTsKLQlwcmludGsoInFsb2dpY2lzcCA6IHRhZyBhZ2UgbGltaXQ9JWRcbiIsCi0JICAgICAgIGhvc3RkYXRhLT5ob3N0X3BhcmFtLnRhZ19hZ2luZyk7Ci0JcHJpbnRrKCJxbG9naWNpc3AgOiBzZWxlY3Rpb24gdGltZW91dCBsaW1pdD0lZFxuIiwKLQkgICAgICAgaG9zdGRhdGEtPmhvc3RfcGFyYW0uc2VsZWN0aW9uX3RpbWVvdXQpOwotCXByaW50aygicWxvZ2ljaXNwIDogbWF4IHF1ZXVlIGRlcHRoPSVkXG4iLAotCSAgICAgICBob3N0ZGF0YS0+aG9zdF9wYXJhbS5tYXhfcXVldWVfZGVwdGgpOwotI2VuZGlmIC8qIERFQlVHX0lTUDEwMjBfU0VUVVAgKi8KLQotCWZvciAoaSA9IDA7IGkgPCBNQVhfVEFSR0VUUzsgaSsrKSB7Ci0KLQkJdmFsdWUgPSBpc3AxMDIwX3JlYWRfbnZyYW1fd29yZChob3N0LCAxNCArIGkgKiAzKTsKLQkJaG9zdGRhdGEtPmRldl9wYXJhbVtpXS5kZXZpY2VfZmxhZ3MgPSB2YWx1ZSAmIDB4ZmY7Ci0JCWhvc3RkYXRhLT5kZXZfcGFyYW1baV0uZXhlY3V0aW9uX3Rocm90dGxlID0gdmFsdWUgPj4gODsKLQotCQl2YWx1ZSA9IGlzcDEwMjBfcmVhZF9udnJhbV93b3JkKGhvc3QsIDE1ICsgaSAqIDMpOwotCQlob3N0ZGF0YS0+ZGV2X3BhcmFtW2ldLnN5bmNocm9ub3VzX3BlcmlvZCA9IHZhbHVlICYgMHhmZjsKLQkJaG9zdGRhdGEtPmRldl9wYXJhbVtpXS5zeW5jaHJvbm91c19vZmZzZXQgPSAodmFsdWUgPj4gOCkgJiAweDBmOwotCQlob3N0ZGF0YS0+ZGV2X3BhcmFtW2ldLmRldmljZV9lbmFibGUgPSAodmFsdWUgPj4gMTIpICYgMHgwMTsKLQotI2lmIERFQlVHX0lTUDEwMjBfU0VUVVAKLQkJcHJpbnRrKCJxbG9naWNpc3AgOiB0YXJnZXQgMHglMDJ4XG4iLCBpKTsKLQkJcHJpbnRrKCJxbG9naWNpc3AgOiAgICAgZGV2aWNlIGZsYWdzPTB4JTAyeFxuIiwKLQkJICAgICAgIGhvc3RkYXRhLT5kZXZfcGFyYW1baV0uZGV2aWNlX2ZsYWdzKTsKLQkJcHJpbnRrKCJxbG9naWNpc3AgOiAgICAgZXhlY3V0aW9uIHRocm90dGxlPSVkXG4iLAotCQkgICAgICAgaG9zdGRhdGEtPmRldl9wYXJhbVtpXS5leGVjdXRpb25fdGhyb3R0bGUpOwotCQlwcmludGsoInFsb2dpY2lzcCA6ICAgICBzeW5jaHJvbm91cyBwZXJpb2Q9JWRcbiIsCi0JCSAgICAgICBob3N0ZGF0YS0+ZGV2X3BhcmFtW2ldLnN5bmNocm9ub3VzX3BlcmlvZCk7Ci0JCXByaW50aygicWxvZ2ljaXNwIDogICAgIHN5bmNocm9ub3VzIG9mZnNldD0lZFxuIiwKLQkJICAgICAgIGhvc3RkYXRhLT5kZXZfcGFyYW1baV0uc3luY2hyb25vdXNfb2Zmc2V0KTsKLQkJcHJpbnRrKCJxbG9naWNpc3AgOiAgICAgZGV2aWNlIGVuYWJsZT0lZFxuIiwKLQkJICAgICAgIGhvc3RkYXRhLT5kZXZfcGFyYW1baV0uZGV2aWNlX2VuYWJsZSk7Ci0jZW5kaWYgLyogREVCVUdfSVNQMTAyMF9TRVRVUCAqLwotCX0KLQotCUxFQVZFKCJpc3AxMDIwX2dldF9kZWZhdWx0cyIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLQotI2RlZmluZSBJU1AxMDIwX05WUkFNX0xFTgkweDQwCi0jZGVmaW5lIElTUDEwMjBfTlZSQU1fU0lHMQkweDUzNDkKLSNkZWZpbmUgSVNQMTAyMF9OVlJBTV9TSUcyCTB4MjA1MAotCi1zdGF0aWMgaW50IGlzcDEwMjBfdmVyaWZ5X252cmFtKHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QpCi17Ci0JaW50CWk7Ci0JdV9zaG9ydCB2YWx1ZTsKLQl1X2NoYXIgY2hlY2tzdW0gPSAwOwotCi0JZm9yIChpID0gMDsgaSA8IElTUDEwMjBfTlZSQU1fTEVOOyBpKyspIHsKLQkJdmFsdWUgPSBpc3AxMDIwX3JlYWRfbnZyYW1fd29yZChob3N0LCBpKTsKLQotCQlzd2l0Y2ggKGkpIHsKLQkJICAgICAgY2FzZSAwOgotCQkJaWYgKHZhbHVlICE9IElTUDEwMjBfTlZSQU1fU0lHMSkgcmV0dXJuIDA7Ci0JCQlicmVhazsKLQkJICAgICAgY2FzZSAxOgotCQkJaWYgKHZhbHVlICE9IElTUDEwMjBfTlZSQU1fU0lHMikgcmV0dXJuIDA7Ci0JCQlicmVhazsKLQkJICAgICAgY2FzZSAyOgotCQkJaWYgKCh2YWx1ZSAmIDB4ZmYpICE9IDB4MDIpIHJldHVybiAwOwotCQkJYnJlYWs7Ci0JCX0KLQkJY2hlY2tzdW0gKz0gdmFsdWUgJiAweGZmOwotCQljaGVja3N1bSArPSB2YWx1ZSA+PiA4OwotCX0KLQotCXJldHVybiAoY2hlY2tzdW0gPT0gMCk7Ci19Ci0KLSNkZWZpbmUgTlZSQU1fREVMQVkoKSB1ZGVsYXkoMikgLyogMiBtaWNyb3NlY29uZCBkZWxheSAqLwotCi0KLXVfc2hvcnQgaXNwMTAyMF9yZWFkX252cmFtX3dvcmQoc3RydWN0IFNjc2lfSG9zdCAqaG9zdCwgdV9zaG9ydCBieXRlKQotewotCWludCBpOwotCXVfc2hvcnQgdmFsdWUsIG91dHB1dCwgaW5wdXQ7Ci0KLQlieXRlICY9IDB4M2Y7IGJ5dGUgfD0gMHgwMTgwOwotCi0JZm9yIChpID0gODsgaSA+PSAwOyBpLS0pIHsKLQkJb3V0cHV0ID0gKChieXRlID4+IGkpICYgMHgxKSA/IDB4NCA6IDB4MDsKLQkJaXNwX291dHcob3V0cHV0IHwgMHgyLCBob3N0LCBQQ0lfTlZSQU0pOyBOVlJBTV9ERUxBWSgpOwotCQlpc3Bfb3V0dyhvdXRwdXQgfCAweDMsIGhvc3QsIFBDSV9OVlJBTSk7IE5WUkFNX0RFTEFZKCk7Ci0JCWlzcF9vdXR3KG91dHB1dCB8IDB4MiwgaG9zdCwgUENJX05WUkFNKTsgTlZSQU1fREVMQVkoKTsKLQl9Ci0KLQlmb3IgKGkgPSAweGYsIHZhbHVlID0gMDsgaSA+PSAwOyBpLS0pIHsKLQkJdmFsdWUgPDw9IDE7Ci0JCWlzcF9vdXR3KDB4MywgaG9zdCwgUENJX05WUkFNKTsgTlZSQU1fREVMQVkoKTsKLQkJaW5wdXQgPSBpc3BfaW53KGhvc3QsIFBDSV9OVlJBTSk7IE5WUkFNX0RFTEFZKCk7Ci0JCWlzcF9vdXR3KDB4MiwgaG9zdCwgUENJX05WUkFNKTsgTlZSQU1fREVMQVkoKTsKLQkJaWYgKGlucHV0ICYgMHg4KSB2YWx1ZSB8PSAxOwotCX0KLQotCWlzcF9vdXR3KDB4MCwgaG9zdCwgUENJX05WUkFNKTsgTlZSQU1fREVMQVkoKTsKLQotCXJldHVybiB2YWx1ZTsKLX0KLQotI2VuZGlmIC8qIFVTRV9OVlJBTV9ERUZBVUxUUyAqLwotCi0KLXN0YXRpYyBpbnQgaXNwMTAyMF9zZXRfZGVmYXVsdHMoc3RydWN0IFNjc2lfSG9zdCAqaG9zdCkKLXsKLQlzdHJ1Y3QgaXNwMTAyMF9ob3N0ZGF0YSAqaG9zdGRhdGEgPQotCQkoc3RydWN0IGlzcDEwMjBfaG9zdGRhdGEgKikgaG9zdC0+aG9zdGRhdGE7Ci0JaW50IGk7Ci0KLQlFTlRFUigiaXNwMTAyMF9zZXRfZGVmYXVsdHMiKTsKLQotCWhvc3RkYXRhLT5ob3N0X3BhcmFtLmZpZm9fdGhyZXNob2xkID0gMjsKLQlob3N0ZGF0YS0+aG9zdF9wYXJhbS5ob3N0X2FkYXB0ZXJfZW5hYmxlID0gMTsKLQlob3N0ZGF0YS0+aG9zdF9wYXJhbS5pbml0aWF0b3Jfc2NzaV9pZCA9IDc7Ci0JaG9zdGRhdGEtPmhvc3RfcGFyYW0uYnVzX3Jlc2V0X2RlbGF5ID0gMzsKLQlob3N0ZGF0YS0+aG9zdF9wYXJhbS5yZXRyeV9jb3VudCA9IDA7Ci0JaG9zdGRhdGEtPmhvc3RfcGFyYW0ucmV0cnlfZGVsYXkgPSAxOwotCWhvc3RkYXRhLT5ob3N0X3BhcmFtLmFzeW5jX2RhdGFfc2V0dXBfdGltZSA9IDY7Ci0JaG9zdGRhdGEtPmhvc3RfcGFyYW0ucmVxX2Fja19hY3RpdmVfbmVnYXRpb24gPSAxOwotCWhvc3RkYXRhLT5ob3N0X3BhcmFtLmRhdGFfbGluZV9hY3RpdmVfbmVnYXRpb24gPSAxOwotCWhvc3RkYXRhLT5ob3N0X3BhcmFtLmRhdGFfZG1hX2J1cnN0X2VuYWJsZSA9IDE7Ci0JaG9zdGRhdGEtPmhvc3RfcGFyYW0uY29tbWFuZF9kbWFfYnVyc3RfZW5hYmxlID0gMTsKLQlob3N0ZGF0YS0+aG9zdF9wYXJhbS50YWdfYWdpbmcgPSA4OwotCWhvc3RkYXRhLT5ob3N0X3BhcmFtLnNlbGVjdGlvbl90aW1lb3V0ID0gMjUwOwotCWhvc3RkYXRhLT5ob3N0X3BhcmFtLm1heF9xdWV1ZV9kZXB0aCA9IDI1NjsKLQotCWZvciAoaSA9IDA7IGkgPCBNQVhfVEFSR0VUUzsgaSsrKSB7Ci0JCWhvc3RkYXRhLT5kZXZfcGFyYW1baV0uZGV2aWNlX2ZsYWdzID0gMHhmZDsKLQkJaG9zdGRhdGEtPmRldl9wYXJhbVtpXS5leGVjdXRpb25fdGhyb3R0bGUgPSAxNjsKLQkJaG9zdGRhdGEtPmRldl9wYXJhbVtpXS5zeW5jaHJvbm91c19wZXJpb2QgPSAyNTsKLQkJaG9zdGRhdGEtPmRldl9wYXJhbVtpXS5zeW5jaHJvbm91c19vZmZzZXQgPSAxMjsKLQkJaG9zdGRhdGEtPmRldl9wYXJhbVtpXS5kZXZpY2VfZW5hYmxlID0gMTsKLQl9Ci0KLQlMRUFWRSgiaXNwMTAyMF9zZXRfZGVmYXVsdHMiKTsKLQotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyBpbnQgaXNwMTAyMF9sb2FkX3BhcmFtZXRlcnMoc3RydWN0IFNjc2lfSG9zdCAqaG9zdCkKLXsKLQlpbnQgaSwgazsKLSNpZmRlZiBDT05GSUdfUUxfSVNQX0E2NAotCXVfbG9uZyBxdWV1ZV9hZGRyOwotCXVfc2hvcnQgcGFyYW1bOF07Ci0jZWxzZQotCXVfaW50IHF1ZXVlX2FkZHI7Ci0JdV9zaG9ydCBwYXJhbVs2XTsKLSNlbmRpZgotCXVfc2hvcnQgaXNwX2NmZzEsIGh3cmV2OwotCXN0cnVjdCBpc3AxMDIwX2hvc3RkYXRhICpob3N0ZGF0YSA9Ci0JCShzdHJ1Y3QgaXNwMTAyMF9ob3N0ZGF0YSAqKSBob3N0LT5ob3N0ZGF0YTsKLQotCUVOVEVSKCJpc3AxMDIwX2xvYWRfcGFyYW1ldGVycyIpOwotCi0JaHdyZXYgPSBpc3BfaW53KGhvc3QsIElTUF9DRkcwKSAmIElTUF9DRkcwX0hXTVNLOwotCWlzcF9jZmcxID0gSVNQX0NGRzFfRjY0IHwgSVNQX0NGRzFfQkVOQUI7Ci0JaWYgKGh3cmV2ID09IElTUF9DRkcwXzEwNDBBKSB7Ci0JCS8qIEJ1c3RlZCBmaWZvLCBzYXlzIG1qYWNvYi4gKi8KLQkJaXNwX2NmZzEgJj0gSVNQX0NGRzFfQkVOQUI7Ci0JfQotCi0JaXNwX291dHcoaXNwX2ludyhob3N0LCBJU1BfQ0ZHMSkgfCBpc3BfY2ZnMSwgaG9zdCwgSVNQX0NGRzEpOwotCWlzcF9vdXR3KGlzcF9pbncoaG9zdCwgQ0RNQV9DT05GKSB8IERNQV9DT05GX0JFTkFCLCBob3N0LCBDRE1BX0NPTkYpOwotCWlzcF9vdXR3KGlzcF9pbncoaG9zdCwgRERNQV9DT05GKSB8IERNQV9DT05GX0JFTkFCLCBob3N0LCBERE1BX0NPTkYpOwotCi0JcGFyYW1bMF0gPSBNQk9YX1NFVF9JTklUX1NDU0lfSUQ7Ci0JcGFyYW1bMV0gPSBob3N0ZGF0YS0+aG9zdF9wYXJhbS5pbml0aWF0b3Jfc2NzaV9pZDsKLQotCWlzcDEwMjBfbWJveF9jb21tYW5kKGhvc3QsIHBhcmFtKTsKLQotCWlmIChwYXJhbVswXSAhPSBNQk9YX0NPTU1BTkRfQ09NUExFVEUpIHsKLQkJcHJpbnRrKCJxbG9naWNpc3AgOiBzZXQgaW5pdGlhdG9yIGlkIGZhaWx1cmVcbiIpOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQlwYXJhbVswXSA9IE1CT1hfU0VUX1JFVFJZX0NPVU5UOwotCXBhcmFtWzFdID0gaG9zdGRhdGEtPmhvc3RfcGFyYW0ucmV0cnlfY291bnQ7Ci0JcGFyYW1bMl0gPSBob3N0ZGF0YS0+aG9zdF9wYXJhbS5yZXRyeV9kZWxheTsKLQotCWlzcDEwMjBfbWJveF9jb21tYW5kKGhvc3QsIHBhcmFtKTsKLQotCWlmIChwYXJhbVswXSAhPSBNQk9YX0NPTU1BTkRfQ09NUExFVEUpIHsKLQkJcHJpbnRrKCJxbG9naWNpc3AgOiBzZXQgcmV0cnkgY291bnQgZmFpbHVyZVxuIik7Ci0JCXJldHVybiAxOwotCX0KLQotCXBhcmFtWzBdID0gTUJPWF9TRVRfQVNZTkNfREFUQV9TRVRVUF9USU1FOwotCXBhcmFtWzFdID0gaG9zdGRhdGEtPmhvc3RfcGFyYW0uYXN5bmNfZGF0YV9zZXR1cF90aW1lOwotCi0JaXNwMTAyMF9tYm94X2NvbW1hbmQoaG9zdCwgcGFyYW0pOwotCi0JaWYgKHBhcmFtWzBdICE9IE1CT1hfQ09NTUFORF9DT01QTEVURSkgewotCQlwcmludGsoInFsb2dpY2lzcCA6IGFzeW5jIGRhdGEgc2V0dXAgdGltZSBmYWlsdXJlXG4iKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JcGFyYW1bMF0gPSBNQk9YX1NFVF9BQ1RJVkVfTkVHX1NUQVRFOwotCXBhcmFtWzFdID0gKGhvc3RkYXRhLT5ob3N0X3BhcmFtLnJlcV9hY2tfYWN0aXZlX25lZ2F0aW9uIDw8IDQpCi0JCXwgKGhvc3RkYXRhLT5ob3N0X3BhcmFtLmRhdGFfbGluZV9hY3RpdmVfbmVnYXRpb24gPDwgNSk7Ci0KLQlpc3AxMDIwX21ib3hfY29tbWFuZChob3N0LCBwYXJhbSk7Ci0KLQlpZiAocGFyYW1bMF0gIT0gTUJPWF9DT01NQU5EX0NPTVBMRVRFKSB7Ci0JCXByaW50aygicWxvZ2ljaXNwIDogc2V0IGFjdGl2ZSBuZWdhdGlvbiBzdGF0ZSBmYWlsdXJlXG4iKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JcGFyYW1bMF0gPSBNQk9YX1NFVF9QQ0lfQ09OVFJPTF9QQVJBTVM7Ci0JcGFyYW1bMV0gPSBob3N0ZGF0YS0+aG9zdF9wYXJhbS5kYXRhX2RtYV9idXJzdF9lbmFibGUgPDwgMTsKLQlwYXJhbVsyXSA9IGhvc3RkYXRhLT5ob3N0X3BhcmFtLmNvbW1hbmRfZG1hX2J1cnN0X2VuYWJsZSA8PCAxOwotCi0JaXNwMTAyMF9tYm94X2NvbW1hbmQoaG9zdCwgcGFyYW0pOwotCi0JaWYgKHBhcmFtWzBdICE9IE1CT1hfQ09NTUFORF9DT01QTEVURSkgewotCQlwcmludGsoInFsb2dpY2lzcCA6IHNldCBwY2kgY29udHJvbCBwYXJhbWV0ZXIgZmFpbHVyZVxuIik7Ci0JCXJldHVybiAxOwotCX0KLQotCXBhcmFtWzBdID0gTUJPWF9TRVRfVEFHX0FHRV9MSU1JVDsKLQlwYXJhbVsxXSA9IGhvc3RkYXRhLT5ob3N0X3BhcmFtLnRhZ19hZ2luZzsKLQotCWlzcDEwMjBfbWJveF9jb21tYW5kKGhvc3QsIHBhcmFtKTsKLQotCWlmIChwYXJhbVswXSAhPSBNQk9YX0NPTU1BTkRfQ09NUExFVEUpIHsKLQkJcHJpbnRrKCJxbG9naWNpc3AgOiBzZXQgdGFnIGFnZSBsaW1pdCBmYWlsdXJlXG4iKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JcGFyYW1bMF0gPSBNQk9YX1NFVF9TRUxFQ1RfVElNRU9VVDsKLQlwYXJhbVsxXSA9IGhvc3RkYXRhLT5ob3N0X3BhcmFtLnNlbGVjdGlvbl90aW1lb3V0OwotCi0JaXNwMTAyMF9tYm94X2NvbW1hbmQoaG9zdCwgcGFyYW0pOwotCi0JaWYgKHBhcmFtWzBdICE9IE1CT1hfQ09NTUFORF9DT01QTEVURSkgewotCQlwcmludGsoInFsb2dpY2lzcCA6IHNldCBzZWxlY3Rpb24gdGltZW91dCBmYWlsdXJlXG4iKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IE1BWF9UQVJHRVRTOyBpKyspIHsKLQotCQlpZiAoIWhvc3RkYXRhLT5kZXZfcGFyYW1baV0uZGV2aWNlX2VuYWJsZSkKLQkJCWNvbnRpbnVlOwotCi0JCXBhcmFtWzBdID0gTUJPWF9TRVRfVEFSR0VUX1BBUkFNUzsKLQkJcGFyYW1bMV0gPSBpIDw8IDg7Ci0JCXBhcmFtWzJdID0gaG9zdGRhdGEtPmRldl9wYXJhbVtpXS5kZXZpY2VfZmxhZ3MgPDwgODsKLQkJcGFyYW1bM10gPSAoaG9zdGRhdGEtPmRldl9wYXJhbVtpXS5zeW5jaHJvbm91c19vZmZzZXQgPDwgOCkKLQkJCXwgaG9zdGRhdGEtPmRldl9wYXJhbVtpXS5zeW5jaHJvbm91c19wZXJpb2Q7Ci0KLQkJaXNwMTAyMF9tYm94X2NvbW1hbmQoaG9zdCwgcGFyYW0pOwotCi0JCWlmIChwYXJhbVswXSAhPSBNQk9YX0NPTU1BTkRfQ09NUExFVEUpIHsKLQkJCXByaW50aygicWxvZ2ljaXNwIDogc2V0IHRhcmdldCBwYXJhbWV0ZXIgZmFpbHVyZVxuIik7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCi0JCWZvciAoayA9IDA7IGsgPCBNQVhfTFVOUzsgaysrKSB7Ci0KLQkJCXBhcmFtWzBdID0gTUJPWF9TRVRfREVWX1FVRVVFX1BBUkFNUzsKLQkJCXBhcmFtWzFdID0gKGkgPDwgOCkgfCBrOwotCQkJcGFyYW1bMl0gPSBob3N0ZGF0YS0+aG9zdF9wYXJhbS5tYXhfcXVldWVfZGVwdGg7Ci0JCQlwYXJhbVszXSA9IGhvc3RkYXRhLT5kZXZfcGFyYW1baV0uZXhlY3V0aW9uX3Rocm90dGxlOwotCi0JCQlpc3AxMDIwX21ib3hfY29tbWFuZChob3N0LCBwYXJhbSk7Ci0KLQkJCWlmIChwYXJhbVswXSAhPSBNQk9YX0NPTU1BTkRfQ09NUExFVEUpIHsKLQkJCQlwcmludGsoInFsb2dpY2lzcCA6IHNldCBkZXZpY2UgcXVldWUgIgotCQkJCSAgICAgICAicGFyYW1ldGVyIGZhaWx1cmVcbiIpOwotCQkJCXJldHVybiAxOwotCQkJfQotCQl9Ci0JfQotCi0JcXVldWVfYWRkciA9IGhvc3RkYXRhLT5yZXNfZG1hOwotI2lmZGVmIENPTkZJR19RTF9JU1BfQTY0Ci0JcGFyYW1bMF0gPSBNQk9YX0NNRF9JTklUX1JFU1BPTlNFX1FVRVVFXzY0OwotI2Vsc2UKLQlwYXJhbVswXSA9IE1CT1hfSU5JVF9SRVNfUVVFVUU7Ci0jZW5kaWYKLQlwYXJhbVsxXSA9IFJFU19RVUVVRV9MRU4gKyAxOwotCXBhcmFtWzJdID0gKHVfc2hvcnQpIChxdWV1ZV9hZGRyID4+IDE2KTsKLQlwYXJhbVszXSA9ICh1X3Nob3J0KSAocXVldWVfYWRkciAmIDB4ZmZmZik7Ci0JcGFyYW1bNF0gPSAwOwotCXBhcmFtWzVdID0gMDsKLSNpZmRlZiBDT05GSUdfUUxfSVNQX0E2NAotCXBhcmFtWzZdID0gKHVfc2hvcnQpIChxdWV1ZV9hZGRyID4+IDQ4KTsKLQlwYXJhbVs3XSA9ICh1X3Nob3J0KSAocXVldWVfYWRkciA+PiAzMik7Ci0jZW5kaWYKLQotCWlzcDEwMjBfbWJveF9jb21tYW5kKGhvc3QsIHBhcmFtKTsKLQotCWlmIChwYXJhbVswXSAhPSBNQk9YX0NPTU1BTkRfQ09NUExFVEUpIHsKLQkJcHJpbnRrKCJxbG9naWNpc3AgOiBzZXQgcmVzcG9uc2UgcXVldWUgZmFpbHVyZVxuIik7Ci0JCXJldHVybiAxOwotCX0KLQotCXF1ZXVlX2FkZHIgPSBob3N0ZGF0YS0+cmVxX2RtYTsKLSNpZmRlZiBDT05GSUdfUUxfSVNQX0E2NAotCXBhcmFtWzBdID0gTUJPWF9DTURfSU5JVF9SRVFVRVNUX1FVRVVFXzY0OwotI2Vsc2UKLQlwYXJhbVswXSA9IE1CT1hfSU5JVF9SRVFfUVVFVUU7Ci0jZW5kaWYKLQlwYXJhbVsxXSA9IFFMT0dJQ0lTUF9SRVFfUVVFVUVfTEVOICsgMTsKLQlwYXJhbVsyXSA9ICh1X3Nob3J0KSAocXVldWVfYWRkciA+PiAxNik7Ci0JcGFyYW1bM10gPSAodV9zaG9ydCkgKHF1ZXVlX2FkZHIgJiAweGZmZmYpOwotCXBhcmFtWzRdID0gMDsKLQotI2lmZGVmIENPTkZJR19RTF9JU1BfQTY0Ci0JcGFyYW1bNV0gPSAwOwotCXBhcmFtWzZdID0gKHVfc2hvcnQpIChxdWV1ZV9hZGRyID4+IDQ4KTsKLQlwYXJhbVs3XSA9ICh1X3Nob3J0KSAocXVldWVfYWRkciA+PiAzMik7Ci0jZW5kaWYKLQotCWlzcDEwMjBfbWJveF9jb21tYW5kKGhvc3QsIHBhcmFtKTsKLQotCWlmIChwYXJhbVswXSAhPSBNQk9YX0NPTU1BTkRfQ09NUExFVEUpIHsKLQkJcHJpbnRrKCJxbG9naWNpc3AgOiBzZXQgcmVxdWVzdCBxdWV1ZSBmYWlsdXJlXG4iKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JTEVBVkUoImlzcDEwMjBfbG9hZF9wYXJhbWV0ZXJzIik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi0vKgotICogY3VycmVudGx5LCB0aGlzIGlzIG9ubHkgY2FsbGVkIGR1cmluZyBpbml0aWFsaXphdGlvbiBvciBhYm9ydC9yZXNldCwKLSAqIGF0IHdoaWNoIHRpbWVzIGludGVycnVwdHMgYXJlIGRpc2FibGVkLCBzbyBwb2xsaW5nIGlzIE9LLCBJIGd1ZXNzLi4uCi0gKi8KLXN0YXRpYyBpbnQgaXNwMTAyMF9tYm94X2NvbW1hbmQoc3RydWN0IFNjc2lfSG9zdCAqaG9zdCwgdV9zaG9ydCBwYXJhbVtdKQotewotCWludCBsb29wX2NvdW50OwotCi0JaWYgKG1ib3hfcGFyYW1bcGFyYW1bMF1dID09IDApCi0JCXJldHVybiAxOwotCi0JbG9vcF9jb3VudCA9IERFRkFVTFRfTE9PUF9DT1VOVDsKLQl3aGlsZSAoLS1sb29wX2NvdW50ICYmIGlzcF9pbncoaG9zdCwgSE9TVF9IQ0NSKSAmIDB4MDA4MCkgewotCQliYXJyaWVyKCk7Ci0JCWNwdV9yZWxheCgpOwotCX0KLQlpZiAoIWxvb3BfY291bnQpCi0JCXByaW50aygicWxvZ2ljaXNwOiBtYm94X2NvbW1hbmQgbG9vcCB0aW1lb3V0ICMxXG4iKTsKLQotCXN3aXRjaChtYm94X3BhcmFtW3BhcmFtWzBdXSA+PiA0KSB7Ci0JICAgICAgY2FzZSA4OiBpc3Bfb3V0dyhwYXJhbVs3XSwgaG9zdCwgTUJPWDcpOwotCSAgICAgIGNhc2UgNzogaXNwX291dHcocGFyYW1bNl0sIGhvc3QsIE1CT1g2KTsKLQkgICAgICBjYXNlIDY6IGlzcF9vdXR3KHBhcmFtWzVdLCBob3N0LCBNQk9YNSk7Ci0JICAgICAgY2FzZSA1OiBpc3Bfb3V0dyhwYXJhbVs0XSwgaG9zdCwgTUJPWDQpOwotCSAgICAgIGNhc2UgNDogaXNwX291dHcocGFyYW1bM10sIGhvc3QsIE1CT1gzKTsKLQkgICAgICBjYXNlIDM6IGlzcF9vdXR3KHBhcmFtWzJdLCBob3N0LCBNQk9YMik7Ci0JICAgICAgY2FzZSAyOiBpc3Bfb3V0dyhwYXJhbVsxXSwgaG9zdCwgTUJPWDEpOwotCSAgICAgIGNhc2UgMTogaXNwX291dHcocGFyYW1bMF0sIGhvc3QsIE1CT1gwKTsKLQl9Ci0KLQlpc3Bfb3V0dygweDAsIGhvc3QsIFBDSV9TRU1BUEhPUkUpOwotCWlzcF9vdXR3KEhDQ1JfQ0xFQVJfUklTQ19JTlRSLCBob3N0LCBIT1NUX0hDQ1IpOwotCWlzcF9vdXR3KEhDQ1JfU0VUX0hPU1RfSU5UUiwgaG9zdCwgSE9TVF9IQ0NSKTsKLQotCWxvb3BfY291bnQgPSBERUZBVUxUX0xPT1BfQ09VTlQ7Ci0Jd2hpbGUgKC0tbG9vcF9jb3VudCAmJiAhKGlzcF9pbncoaG9zdCwgUENJX0lOVEZfU1RTKSAmIDB4MDQpKSB7Ci0JCWJhcnJpZXIoKTsKLQkJY3B1X3JlbGF4KCk7Ci0JfQotCWlmICghbG9vcF9jb3VudCkKLQkJcHJpbnRrKCJxbG9naWNpc3A6IG1ib3hfY29tbWFuZCBsb29wIHRpbWVvdXQgIzJcbiIpOwotCi0JbG9vcF9jb3VudCA9IERFRkFVTFRfTE9PUF9DT1VOVDsKLQl3aGlsZSAoLS1sb29wX2NvdW50ICYmIGlzcF9pbncoaG9zdCwgTUJPWDApID09IDB4MDQpIHsKLQkJYmFycmllcigpOwotCQljcHVfcmVsYXgoKTsKLQl9Ci0JaWYgKCFsb29wX2NvdW50KQotCQlwcmludGsoInFsb2dpY2lzcDogbWJveF9jb21tYW5kIGxvb3AgdGltZW91dCAjM1xuIik7Ci0KLQlzd2l0Y2gobWJveF9wYXJhbVtwYXJhbVswXV0gJiAweGYpIHsKLQkgICAgICBjYXNlIDg6IHBhcmFtWzddID0gaXNwX2ludyhob3N0LCBNQk9YNyk7Ci0JICAgICAgY2FzZSA3OiBwYXJhbVs2XSA9IGlzcF9pbncoaG9zdCwgTUJPWDYpOwotCSAgICAgIGNhc2UgNjogcGFyYW1bNV0gPSBpc3BfaW53KGhvc3QsIE1CT1g1KTsKLQkgICAgICBjYXNlIDU6IHBhcmFtWzRdID0gaXNwX2ludyhob3N0LCBNQk9YNCk7Ci0JICAgICAgY2FzZSA0OiBwYXJhbVszXSA9IGlzcF9pbncoaG9zdCwgTUJPWDMpOwotCSAgICAgIGNhc2UgMzogcGFyYW1bMl0gPSBpc3BfaW53KGhvc3QsIE1CT1gyKTsKLQkgICAgICBjYXNlIDI6IHBhcmFtWzFdID0gaXNwX2ludyhob3N0LCBNQk9YMSk7Ci0JICAgICAgY2FzZSAxOiBwYXJhbVswXSA9IGlzcF9pbncoaG9zdCwgTUJPWDApOwotCX0KLQotCWlzcF9vdXR3KDB4MCwgaG9zdCwgUENJX1NFTUFQSE9SRSk7Ci0JaXNwX291dHcoSENDUl9DTEVBUl9SSVNDX0lOVFIsIGhvc3QsIEhPU1RfSENDUik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi0jaWYgREVCVUdfSVNQMTAyMF9JTlRSCi0KLXZvaWQgaXNwMTAyMF9wcmludF9zdGF0dXNfZW50cnkoc3RydWN0IFN0YXR1c19FbnRyeSAqc3RhdHVzKQotewotCWludCBpOwotCi0JcHJpbnRrKCJxbG9naWNpc3AgOiBlbnRyeSBjb3VudCA9IDB4JTAyeCwgdHlwZSA9IDB4JTAyeCwgZmxhZ3MgPSAweCUwMnhcbiIsCi0JICAgICAgIHN0YXR1cy0+aGRyLmVudHJ5X2NudCwgc3RhdHVzLT5oZHIuZW50cnlfdHlwZSwgc3RhdHVzLT5oZHIuZmxhZ3MpOwotCXByaW50aygicWxvZ2ljaXNwIDogc2NzaSBzdGF0dXMgPSAweCUwNHgsIGNvbXBsZXRpb24gc3RhdHVzID0gMHglMDR4XG4iLAotCSAgICAgICBsZTE2X3RvX2NwdShzdGF0dXMtPnNjc2lfc3RhdHVzKSwgbGUxNl90b19jcHUoc3RhdHVzLT5jb21wbGV0aW9uX3N0YXR1cykpOwotCXByaW50aygicWxvZ2ljaXNwIDogc3RhdGUgZmxhZ3MgPSAweCUwNHgsIHN0YXR1cyBmbGFncyA9IDB4JTA0eFxuIiwKLQkgICAgICAgbGUxNl90b19jcHUoc3RhdHVzLT5zdGF0ZV9mbGFncyksIGxlMTZfdG9fY3B1KHN0YXR1cy0+c3RhdHVzX2ZsYWdzKSk7Ci0JcHJpbnRrKCJxbG9naWNpc3AgOiB0aW1lID0gMHglMDR4LCByZXF1ZXN0IHNlbnNlIGxlbmd0aCA9IDB4JTA0eFxuIiwKLQkgICAgICAgbGUxNl90b19jcHUoc3RhdHVzLT50aW1lKSwgbGUxNl90b19jcHUoc3RhdHVzLT5yZXFfc2Vuc2VfbGVuKSk7Ci0JcHJpbnRrKCJxbG9naWNpc3AgOiByZXNpZHVhbCB0cmFuc2ZlciBsZW5ndGggPSAweCUwOHhcbiIsCi0JICAgICAgIGxlMzJfdG9fY3B1KHN0YXR1cy0+cmVzaWR1YWwpKTsKLQotCWZvciAoaSA9IDA7IGkgPCBsZTE2X3RvX2NwdShzdGF0dXMtPnJlcV9zZW5zZV9sZW4pOyBpKyspCi0JCXByaW50aygicWxvZ2ljaXNwIDogc2Vuc2UgZGF0YSA9IDB4JTAyeFxuIiwgc3RhdHVzLT5yZXFfc2Vuc2VfZGF0YVtpXSk7Ci19Ci0KLSNlbmRpZiAvKiBERUJVR19JU1AxMDIwX0lOVFIgKi8KLQotCi0jaWYgREVCVUdfSVNQMTAyMAotCi12b2lkIGlzcDEwMjBfcHJpbnRfc2NzaV9jbWQoU2NzaV9DbW5kICpjbWQpCi17Ci0JaW50IGk7Ci0KLQlwcmludGsoInFsb2dpY2lzcCA6IHRhcmdldCA9IDB4JTAyeCwgbHVuID0gMHglMDJ4LCBjbWRfbGVuID0gMHglMDJ4XG4iLAotCSAgICAgICBjbWQtPnRhcmdldCwgY21kLT5sdW4sIGNtZC0+Y21kX2xlbik7Ci0JcHJpbnRrKCJxbG9naWNpc3AgOiBjb21tYW5kID0gIik7Ci0JZm9yIChpID0gMDsgaSA8IGNtZC0+Y21kX2xlbjsgaSsrKQotCQlwcmludGsoIjB4JTAyeCAiLCBjbWQtPmNtbmRbaV0pOwotCXByaW50aygiXG4iKTsKLX0KLQotI2VuZGlmIC8qIERFQlVHX0lTUDEwMjAgKi8KLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1zdGF0aWMgU2NzaV9Ib3N0X1RlbXBsYXRlIGRyaXZlcl90ZW1wbGF0ZSA9IHsKLQkuZGV0ZWN0CQkJPSBpc3AxMDIwX2RldGVjdCwKLQkucmVsZWFzZQkJPSBpc3AxMDIwX3JlbGVhc2UsCi0JLmluZm8JCQk9IGlzcDEwMjBfaW5mbywJCi0JLnF1ZXVlY29tbWFuZAkJPSBpc3AxMDIwX3F1ZXVlY29tbWFuZCwKLQkuYmlvc19wYXJhbQkJPSBpc3AxMDIwX2Jpb3NwYXJhbSwKLQkuY2FuX3F1ZXVlCQk9IFFMT0dJQ0lTUF9SRVFfUVVFVUVfTEVOLAotCS50aGlzX2lkCQk9IC0xLAotCS5zZ190YWJsZXNpemUJCT0gUUxPR0lDSVNQX01BWF9TRyhRTE9HSUNJU1BfUkVRX1FVRVVFX0xFTiksCi0JLmNtZF9wZXJfbHVuCQk9IDEsCi0JLnVzZV9jbHVzdGVyaW5nCQk9IERJU0FCTEVfQ0xVU1RFUklORywKLX07Ci0jaW5jbHVkZSAic2NzaV9tb2R1bGUuYyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbG9naWNpc3BfYXNtLmMgYi9kcml2ZXJzL3Njc2kvcWxvZ2ljaXNwX2FzbS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWE0YmVjLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc2NzaS9xbG9naWNpc3BfYXNtLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMDM0ICswLDAgQEAKLS8qCi0gKiAgICAgIEZpcm13YXJlIFZlcnNpb24gNy42My4wMCAoMTI6MDcgSmFuIDI3LCAxOTk5KQotICovCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgcmlzY19jb2RlX3ZlcnNpb24gPSA3KjEwMjQrNjM7Ci0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCByaXNjX2NvZGVfYWRkcjAxID0gMHgxMDAwIDsKLQotI2lmIFJFTE9BRF9GSVJNV0FSRQotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgcmlzY19jb2RlMDFbXSA9IHsKLQkweDAwNzgsIDB4MTAzYSwgMHgwMDAwLCAweDNmMTQsIDB4MDAwMCwgMHgyMDQzLCAweDRmNTAsIDB4NTk1MiwKLQkweDQ5NDcsIDB4NDg1NCwgMHgyMDMxLCAweDM5MzksIDB4MzUyMCwgMHg1MTRjLCAweDRmNDcsIDB4NDk0MywKLQkweDIwNDMsIDB4NGY1MiwgMHg1MDRmLCAweDUyNDEsIDB4NTQ0OSwgMHg0ZjRlLCAweDIwNDksIDB4NTM1MCwKLQkweDMxMzAsIDB4MzIzMCwgMHgyMDQ5LCAweDJmNTQsIDB4MjA0NiwgMHg2OTcyLCAweDZkNzcsIDB4NjE3MiwKLQkweDY1MjAsIDB4MjA1NiwgMHg2NTcyLCAweDczNjksIDB4NmY2ZSwgMHgyMDMwLCAweDM3MmUsIDB4MzYzMywKLQkweDIwMjAsIDB4MjA0MywgMHg3NTczLCAweDc0NmYsIDB4NmQ2NSwgMHg3MjIwLCAweDRlNmYsIDB4MmUyMCwKLQkweDMwMzAsIDB4MjA1MCwgMHg3MjZmLCAweDY0NzUsIDB4NjM3NCwgMHgyMDRlLCAweDZmMmUsIDB4MjAyMCwKLQkweDMwMzEsIDB4MjAyNCwgMHgyMDAxLCAweDA0ZmQsIDB4MjAwNCwgMHhhMDgyLCAweDAwMDUsIDB4MDA0OCwKLQkweDEwNDUsIDB4MDAzOCwgMHgxMDRiLCAweDAwNzgsIDB4MTA0NywgMHgwMDI4LCAweDEwNGIsIDB4MjBiOSwKLQkweDEyMTIsIDB4MDA3OCwgMHgxMDRkLCAweDIwYjksIDB4MjIyMiwgMHgyMGMxLCAweDAwMDgsIDB4MjA3MSwKLQkweDAwMTAsIDB4NzBjMywgMHgwMDA0LCAweDIwYzksIDB4NzZmZiwgMHgyMDg5LCAweDExODYsIDB4NzBjNywKLQkweDQ5NTMsIDB4NzBjYiwgMHg1MDIwLCAweDcwY2YsIDB4MjAyMCwgMHg3MGQzLCAweDAwMDcsIDB4M2YwMCwKLQkweDcwZDYsIDB4MjBjMSwgMHgwMDA4LCAweDIwMTksIDB4MDAwMCwgMHgyMDA5LCAweGZlZmYsIDB4MjEwMCwKLQkweDIwMGIsIDB4YTVhNSwgMHhhMWVjLCAweDdmZmYsIDB4MmQ2NCwgMHgyMDZiLCAweDBhMGEsIDB4YWRkYywKLQkweDNmZmYsIDB4MmI1NCwgMHgyMDViLCAweDUwNTAsIDB4MjExNCwgMHhhMjg2LCAweGE1YTUsIDB4MDA0MCwKLQkweDEwYmYsIDB4YTM4NiwgMHgwMDBmLCAweDAwNDAsIDB4MTA4NSwgMHgyYzZhLCAweDJhNWEsIDB4MjBjMSwKLQkweDAwMDAsIDB4MjAxOSwgMHgwMDBmLCAweDAwNzgsIDB4MTA2NSwgMHgyYzZhLCAweDJhNWEsIDB4MjBjMSwKLQkweDAwMDgsIDB4MjAwOSwgMHg3ZmZmLCAweDIxNDgsIDB4Mjk0NCwgMHgyMDRiLCAweDBhMGEsIDB4YTliYywKLQkweDNmZmYsIDB4MjczNCwgMHgyMDNiLCAweDUwNTAsIDB4MjExNCwgMHhhMjg2LCAweDBhMGEsIDB4MDA0MCwKLQkweDEwYTksIDB4Mjg0YSwgMHgyNjNhLCAweDIwYzEsIDB4MDAwNCwgMHgyMDA5LCAweDNmZmYsIDB4MjEzNCwKLQkweDIwMGIsIDB4NTA1MCwgMHgyMTE0LCAweGEyODYsIDB4NTA1MCwgMHgwMDQwLCAweDEwYWEsIDB4MDA3OCwKLQkweDExOGUsIDB4Mjg0YSwgMHgyNjNhLCAweDk4YzAsIDB4YTE4OCwgMHgxMDAwLCAweDIxMmMsIDB4MjAwYiwKLQkweGE1YTUsIDB4MjExNCwgMHhhMjg2LCAweGE1YTUsIDB4MDA0MCwgMHgxMGJjLCAweDI1MGEsIDB4YTE4YSwKLQkweDEwMDAsIDB4OThjMSwgMHgwMDc4LCAweDEwYzEsIDB4MjUwYSwgMHgwMDc4LCAweDEwYzEsIDB4MmM2YSwKLQkweDJhNWEsIDB4MjEzMCwgMHhhMThhLCAweDAwNDAsIDB4MjEyOCwgMHhhMWEyLCAweDUwMDAsIDB4ODQyNCwKLQkweDg0MjQsIDB4ODQyNCwgMHg4NDI0LCAweDg0MjQsIDB4ODQyNCwgMHhhMTkyLCAweDc3MDAsIDB4MjAwOSwKLQkweDAwMDAsIDB4MjAwMSwgMHgwMDMxLCAweDEwNzgsIDB4MWM5ZCwgMHgyMjE4LCAweDIwNzksIDB4NTAwMCwKLQkweDJmYTAsIDB4MjQwOCwgMHgyMDExLCAweDAwMDAsIDB4MjBhOSwgMHgwMDQwLCAweDQyYTQsIDB4ODEwOSwKLQkweDAwYzAsIDB4MTBkYywgMHg3ZWYyLCAweDg1MjgsIDB4N2RlNiwgMHg3Y2VhLCAweDdiZWUsIDB4Nzg4MywKLQkweDAwMDAsIDB4MjAzMSwgMHgwMDMwLCAweDc4Y2YsIDB4MDEwMSwgMHg3ODBiLCAweDAwMDIsIDB4NzgwZiwKLQkweDAwMDIsIDB4Nzg0ZiwgMHgwMDAzLCAweDIwNjksIDB4NTA0MCwgMHgyMDAxLCAweDA0ZmQsIDB4MjAwNCwKLQkweGEwODIsIDB4MDAwNSwgMHgwMDQ4LCAweDExMDQsIDB4MDAzOCwgMHgxMTAwLCAweDAwNzgsIDB4MTEwOCwKLQkweDY4MWIsIDB4MDAzYywgMHgwMDc4LCAweDExMGEsIDB4MDBhOCwgMHgxMTA4LCAweDY4MWIsIDB4MDAzYywKLQkweDY4MWIsIDB4MDAyOCwgMHg2ODA3LCAweDAwMDcsIDB4NjgwYiwgMHgwMGZhLCAweDY4MGYsIDB4MDAwOCwKLQkweDY4MTMsIDB4MDAwNSwgMHg2ODIzLCAweDAwMDAsIDB4NjgyNywgMHgwMDA2LCAweDY4MTcsIDB4MDAwOCwKLQkweDY4MmIsIDB4MDAwMCwgMHg2ODFmLCAweDAwMTksIDB4MjA2OSwgMHg1MjgwLCAweDIwMTEsIDB4MDAyMCwKLQkweDIwMDksIDB4MDAxMCwgMHg2ODBiLCAweDA4MGMsIDB4NjgwZiwgMHgwMDE5LCAweDY4MDMsIDB4ZmQwMCwKLQkweDY4MDcsIDB4MDAxOCwgMHg2YTFhLCAweDJkMDAsIDB4YTBlOCwgMHgwMDA4LCAweGEyOTAsIDB4MDAwNCwKLQkweDgxMDksIDB4MDBjMCwgMHgxMTIyLCAweDIwNjksIDB4NTMwMCwgMHgyMDA5LCAweDAwMDIsIDB4MjBhOSwKLQkweDAxMDAsIDB4NjgzNywgMHgwMDAwLCAweDY4MGIsIDB4MDA0MCwgMHg3YmYwLCAweGEzODYsIDB4ZmVmZiwKLQkweDAwYzAsIDB4MTE0OCwgMHg2ODE3LCAweDAxMDAsIDB4NjgxZiwgMHgwMDY0LCAweDAwNzgsIDB4MTE0YywKLQkweDY4MTcsIDB4MDA2NCwgMHg2ODFmLCAweDAwMDIsIDB4YWRlOCwgMHgwMDEwLCAweDAwNzAsIDB4MTE1MiwKLQkweDAwNzgsIDB4MTEzOSwgMHg4MTA5LCAweDAwYzAsIDB4MTEzNywgMHgxMDc4LCAweDIxZTksIDB4MTA3OCwKLQkweDQ2ZTksIDB4MTA3OCwgMHgxOTQ2LCAweDEwNzgsIDB4NGJkZiwgMHgzMjAwLCAweGEwODUsIDB4MDAwZCwKLQkweDIwOTAsIDB4NzBjMywgMHgwMDAwLCAweDAwOTAsIDB4MTE2YywgMHg3MGMwLCAweGEwODYsIDB4MDAwMiwKLQkweDAwYzAsIDB4MTE2YywgMHgxMDc4LCAweDEyODQsIDB4MTA3OCwgMHgxMTk2LCAweDc4Y2MsIDB4YTAwNSwKLQkweDAwYzAsIDB4MTE3YSwgMHgxMDc4LCAweDFjYzYsIDB4MDAxMCwgMHgxMTgwLCAweDAwNjgsIDB4MTE4MCwKLQkweDEwNzgsIDB4MjBjOCwgMHgwMDEwLCAweDExODAsIDB4MDA2OCwgMHgxMTgwLCAweDEwNzgsIDB4MWEyYiwKLQkweDAwZTAsIDB4MTE2YywgMHgxMDc4LCAweDRhNjYsIDB4MDA3OCwgMHgxMTZjLCAweDExOGUsIDB4MTE5MCwKLQkweDIzZWEsIDB4MjNlYSwgMHg0NzZhLCAweDQ3NmEsIDB4MjNlYSwgMHgyM2VhLCAweDAwNzgsIDB4MTE4ZSwKLQkweDAwNzgsIDB4MTE5MCwgMHgwMDc4LCAweDExOTIsIDB4MDA3OCwgMHgxMTk0LCAweDAwNjgsIDB4MTIwMSwKLQkweDIwNjEsIDB4MDAwMCwgMHg2MDE4LCAweGEwODQsIDB4MDAwMSwgMHgwMGMwLCAweDEyMDEsIDB4NzgxNCwKLQkweGEwMDUsIDB4MDBjMCwgMHgxMWE3LCAweDAwMTAsIDB4MTIwMiwgMHgwMDc4LCAweDEyMDEsIDB4MjAwOSwKLQkweDUwNWIsIDB4MjEwNCwgMHhhMDA1LCAweDAwYzAsIDB4MTIwMSwgMHgyMDA5LCAweDUwNjQsIDB4MjAwYiwKLQkweDAwMDAsIDB4NzkxNCwgMHhhMTg2LCAweDAwNDIsIDB4MDBjMCwgMHgxMWNjLCAweDc4MTYsIDB4MjAwOSwKLQkweDUwNjIsIDB4MjE2NCwgMHgyMDBiLCAweDAwMDAsIDB4NjAxOCwgMHg3MGM2LCAweDYwMTQsIDB4NzBjYSwKLQkweDYxMWMsIDB4YTE4YywgMHhmZjAwLCAweDYwMjAsIDB4YTA4NCwgMHgwMGZmLCAweGExMDUsIDB4NzBjZSwKLQkweDEwNzgsIDB4MTkyYiwgMHgwMDc4LCAweDExZmYsIDB4NzgxNCwgMHhhMDg2LCAweDAwMTgsIDB4MDBjMCwKLQkweDExZDMsIDB4MTA3OCwgMHgxNjVhLCAweDc4MTcsIDB4MDAwMCwgMHgyMDA5LCAweDUwNjIsIDB4MjEwNCwKLQkweGEwNjUsIDB4MDA0MCwgMHgxMWVmLCAweDBjN2UsIDB4NjA5YywgMHgyMDYwLCAweDEwNzgsIDB4MTk5NiwKLQkweDBjN2YsIDB4NjA5ZiwgMHgwMDAwLCAweDEwNzgsIDB4MTczMCwgMHgyMDA5LCAweDAwMGMsIDB4NjAwNywKLQkweDAxMDMsIDB4MTA3OCwgMHgxOTA3LCAweDAwYzAsIDB4MTFmYiwgMHgxMDc4LCAweDE5MmIsIDB4MjAwOSwKLQkweDUwNjIsIDB4MjAwYiwgMHgwMDAwLCAweDIwMDksIDB4NTA1YywgMHgyMTA0LCAweDIwMGIsIDB4MDAwMCwKLQkweGEwMDUsIDB4MDA0MCwgMHgxMWZmLCAweDIwMDEsIDB4NDAwNSwgMHgwMDc4LCAweDEyODYsIDB4MDA3OCwKLQkweDEyODQsIDB4MDA3YywgMHg3MGMzLCAweDAwMDAsIDB4NzBjNywgMHgwMDAwLCAweDcwY2IsIDB4MDAwMCwKLQkweDcwY2YsIDB4MDAwMCwgMHg3MGMwLCAweGEwYmMsIDB4ZmZjMCwgMHgwMGMwLCAweDEyNTIsIDB4MjAzOCwKLQkweDAwNzksIDB4MTIxMiwgMHgxMjg0LCAweDEyZTUsIDB4MTJhOSwgMHgxMmZlLCAweDEzMGQsIDB4MTMxMywKLQkweDEyYTAsIDB4MTc0OCwgMHgxMzE3LCAweDEyOTgsIDB4MTJhZCwgMHgxMmFmLCAweDEyYjEsIDB4MTJiMywKLQkweDE3NGQsIDB4MTI5OCwgMHgxMzI5LCAweDEzNjAsIDB4MTY3MiwgMHgxNzQyLCAweDEyYjUsIDB4MTU5MSwKLQkweDE1YWQsIDB4MTVjOSwgMHgxNWY0LCAweDE1NGEsIDB4MTU1OCwgMHgxNTZjLCAweDE1ODAsIDB4MTNkZiwKLQkweDEyOTgsIDB4MTM4ZCwgMHgxMzkzLCAweDEzOTgsIDB4MTM5ZCwgMHgxM2EzLCAweDEzYTgsIDB4MTNhZCwKLQkweDEzYjIsIDB4MTNiNywgMHgxM2JiLCAweDEzZDAsIDB4MTNkYywgMHgxMjk4LCAweDEyOTgsIDB4MTI5OCwKLQkweDEyOTgsIDB4MTNlYiwgMHgxM2Y0LCAweDE0MDMsIDB4MTQyOSwgMHgxNDMzLCAweDE0M2EsIDB4MTQ4MCwKLQkweDE0OGYsIDB4MTQ5ZSwgMHgxNGIwLCAweDE1MmEsIDB4MTUzYSwgMHgxMjk4LCAweDEyOTgsIDB4MTI5OCwKLQkweDEyOTgsIDB4MTUzZiwgMHhhMGJjLCAweGZmYTAsIDB4MDBjMCwgMHgxMjk4LCAweDIwMzgsIDB4YTA4NCwKLQkweDAwMWYsIDB4MDA3OSwgMHgxMjViLCAweDE3ODYsIDB4MTc4OSwgMHgxNzk5LCAweDEyOTgsIDB4MTI5OCwKLQkweDE4ZDgsIDB4MThmNSwgMHgxMjk4LCAweDEyOTgsIDB4MTI5OCwgMHgxOGY5LCAweDE5MDEsIDB4MTI5OCwKLQkweDEyOTgsIDB4MTI5OCwgMHgxMjk4LCAweDEyZGIsIDB4MTJmNCwgMHgxMzFmLCAweDEzNTYsIDB4MTY2OCwKLQkweDE3NjQsIDB4MTc3OCwgMHgxMjk4LCAweDE4MjksIDB4MTI5OCwgMHgxOGI0LCAweDE4YmUsIDB4MThjMiwKLQkweDE4ZDAsIDB4MTI5OCwgMHgxMjk4LCAweDcyY2EsIDB4NzFjNiwgMHgyMDAxLCAweDQwMDYsIDB4MDA3OCwKLQkweDEyODYsIDB4NzNjZSwgMHg3MmNhLCAweDcxYzYsIDB4MjAwMSwgMHg0MDAwLCAweDcwYzIsIDB4MDA2OCwKLQkweDEyODcsIDB4MjA2MSwgMHgwMDAwLCAweDYwMWIsIDB4MDAwMSwgMHgyMDkxLCAweDUwMDAsIDB4MDBlMCwKLQkweDEyOGYsIDB4MDBlMCwgMHgxMjkxLCAweDAwNjgsIDB4MTI5MSwgMHgyMDkxLCAweDQwODAsIDB4MDA3YywKLQkweDcwYzMsIDB4NDAwMSwgMHgwMDc4LCAweDEyODcsIDB4NzBjMywgMHg0MDA2LCAweDAwNzgsIDB4MTI4NywKLQkweDIwOTksIDB4MDA0MSwgMHgyMGExLCAweDAwNDEsIDB4MjBhOSwgMHgwMDA1LCAweDUzYTMsIDB4MDA3OCwKLQkweDEyODQsIDB4NzBjNCwgMHg3MGMzLCAweDAwMDQsIDB4MDA3YSwgMHgwMDc4LCAweDEyODQsIDB4MDA3OCwKLQkweDEyODQsIDB4MDA3OCwgMHgxMjg0LCAweDAwNzgsIDB4MTI4NCwgMHgyMDkxLCAweDgwMDAsIDB4NzBjMywKLQkweDAwMDAsIDB4NzBjNywgMHg0OTUzLCAweDcwY2IsIDB4NTAyMCwgMHg3MGNmLCAweDIwMjAsIDB4NzBkMywKLQkweDAwMDcsIDB4M2YwMCwgMHg3MGQ2LCAweDIwNzksIDB4MDAwMCwgMHg3ODFiLCAweDAwMDEsIDB4MjAzMSwKLQkweDAwMzAsIDB4MjA1OSwgMHgxMDAwLCAweDIwMjksIDB4MDQ1NywgMHgyMDUxLCAweDA0NzAsIDB4MjA2MSwKLQkweDA0NzIsIDB4MjBiOSwgMHhmZmZmLCAweDIwYzEsIDB4MDAwMCwgMHgyMDkxLCAweDUwMDAsIDB4MjA5MSwKLQkweDQwODAsIDB4MDA3OCwgMHgwNDU1LCAweDEwNzgsIDB4MWIzNiwgMHgwMGMwLCAweDEyOWMsIDB4NzVkOCwKLQkweDc0ZGMsIDB4NzVkYSwgMHg3NGRlLCAweDAwNzgsIDB4MTJlOCwgMHgyMDI5LCAweDAwMDAsIDB4MjUyMCwKLQkweDcxZDAsIDB4NzNjOCwgMHg3MmNjLCAweDcwYzQsIDB4MTA3OCwgMHgxYTcwLCAweDAwNDAsIDB4MTI4NCwKLQkweDcwYzMsIDB4NDAwMiwgMHgwMDc4LCAweDEyODQsIDB4MTA3OCwgMHgxYjM2LCAweDAwYzAsIDB4MTI5YywKLQkweDc1ZDgsIDB4NzRkYywgMHg3NWRhLCAweDc0ZGUsIDB4MDA3OCwgMHgxMzAxLCAweDIwMjksIDB4MDAwMCwKLQkweDI1MjAsIDB4NzFkMCwgMHg3M2M4LCAweDcyY2MsIDB4NzBjNCwgMHgxMDc4LCAweDFhZDAsIDB4MDA0MCwKLQkweDEyODQsIDB4NzBjMywgMHg0MDAyLCAweDAwNzgsIDB4MTI4NCwgMHg3MWM0LCAweDcwYzgsIDB4MjExNCwKLQkweDIwMGEsIDB4MDA3OCwgMHgxMjgyLCAweDcxYzQsIDB4MjExNCwgMHgwMDc4LCAweDEyODIsIDB4NzBjNywKLQkweDAwMDcsIDB4NzBjYiwgMHgwMDNmLCAweDcwY2YsIDB4MDAwMCwgMHgwMDc4LCAweDEyODQsIDB4MTA3OCwKLQkweDFiMzYsIDB4MDBjMCwgMHgxMjljLCAweDc1ZDgsIDB4NzZkYywgMHg3NWRhLCAweDc2ZGUsIDB4MDA3OCwKLQkweDEzMmMsIDB4MjAyOSwgMHgwMDAwLCAweDI1MzAsIDB4NzBjNCwgMHg3MmM4LCAweDczY2MsIDB4NzRkMCwKLQkweDcwYzYsIDB4NzJjYSwgMHg3M2NlLCAweDc0ZDIsIDB4YTAwNSwgMHgwMDQwLCAweDEzNTAsIDB4ODAwMSwKLQkweDc4OTIsIDB4YTA4NCwgMHhmYzAwLCAweDAwNDAsIDB4MTM0NSwgMHg3OGNjLCAweGEwODUsIDB4MDAwMSwKLQkweDc4Y2UsIDB4MjAwMSwgMHg0MDA1LCAweDAwNzgsIDB4MTI4NiwgMHg3YTlhLCAweDdiOWUsIDB4N2RhMiwKLQkweDdlYTYsIDB4N2M5NiwgMHg3OGNjLCAweGEwODQsIDB4ZmZmYywgMHg3OGNlLCAweDAwNzgsIDB4MTM1NCwKLQkweDc4Y2MsIDB4YTA4NSwgMHgwMDAxLCAweDc4Y2UsIDB4MDA3OCwgMHgxMjg0LCAweDEwNzgsIDB4MWIzNiwKLQkweDAwYzAsIDB4MTI5YywgMHg3NWQ4LCAweDc2ZGMsIDB4NzVkYSwgMHg3NmRlLCAweDAwNzgsIDB4MTM2MywKLQkweDIwMjksIDB4MDAwMCwgMHgyNTMwLCAweDcwYzQsIDB4NzJjOCwgMHg3M2NjLCAweDc0ZDQsIDB4NzBjNiwKLQkweDcyY2EsIDB4NzNjZSwgMHg3NGQ2LCAweGEwMDUsIDB4MDA0MCwgMHgxMzg3LCAweDgwMDEsIDB4NzhhZSwKLQkweGEwODQsIDB4ZmMwMCwgMHgwMDQwLCAweDEzN2MsIDB4NzhjYywgMHhhMDg1LCAweDAxMDAsIDB4NzhjZSwKLQkweDIwMDEsIDB4NDAwNSwgMHgwMDc4LCAweDEyODYsIDB4N2FiNiwgMHg3YmJhLCAweDdkYmUsIDB4N2VjMiwKLQkweDdjYjIsIDB4NzhjYywgMHhhMDg0LCAweGZjZmYsIDB4NzhjZSwgMHgwMDc4LCAweDEzOGIsIDB4NzhjYywKLQkweGEwODUsIDB4MDEwMCwgMHg3OGNlLCAweDAwNzgsIDB4MTI4NCwgMHgyMDA5LCAweDUwNjEsIDB4MjEwYywKLQkweDdhZWMsIDB4MDA3OCwgMHgxMjgyLCAweDIwMDksIDB4NTA0MSwgMHgyMTBjLCAweDAwNzgsIDB4MTI4MywKLQkweDIwMDksIDB4NTA0MiwgMHgyMTBjLCAweDAwNzgsIDB4MTI4MywgMHgyMDYxLCAweDUwNDAsIDB4NjEwYywKLQkweDYyMTAsIDB4MDA3OCwgMHgxMjgyLCAweDIwMDksIDB4NTA0NSwgMHgyMTBjLCAweDAwNzgsIDB4MTI4MywKLQkweDIwMDksIDB4NTA0NiwgMHgyMTBjLCAweDAwNzgsIDB4MTI4MywgMHgyMDA5LCAweDUwNDgsIDB4MjEwYywKLQkweDAwNzgsIDB4MTI4MywgMHgyMDA5LCAweDUwNDksIDB4MjEwYywgMHgwMDc4LCAweDEyODMsIDB4NzkwOCwKLQkweDdhMGMsIDB4MDA3OCwgMHgxMjgyLCAweDcxYzQsIDB4ODEwNywgMHhhMDg0LCAweDAwMGYsIDB4ODAwMywKLQkweDgwMDMsIDB4ODAwMywgMHhhMGU4LCAweDUyODAsIDB4NmEwMCwgMHg2ODA0LCAweGEwODQsIDB4MDAwOCwKLQkweDAwNDAsIDB4MTNjZCwgMHg2YjA4LCAweDAwNzgsIDB4MTNjZSwgMHg2YjBjLCAweDAwNzgsIDB4MTI4MSwKLQkweDc3YzQsIDB4MTA3OCwgMHgxOTU2LCAweDIwOTEsIDB4ODAwMCwgMHg2YjFjLCAweDZhMTQsIDB4MjA5MSwKLQkweDgwMDEsIDB4MjcwOCwgMHgwMDc4LCAweDEyODEsIDB4Nzk0YywgMHgwMDc4LCAweDEyODMsIDB4NzdjNCwKLQkweDEwNzgsIDB4MTk1NiwgMHgyMDkxLCAweDgwMDAsIDB4NjkwOCwgMHg2YTE4LCAweDZiMTAsIDB4MjA5MSwKLQkweDgwMDEsIDB4MDA3OCwgMHgxMjgxLCAweDcxYzQsIDB4YTE4MiwgMHgwMDEwLCAweDAwYzgsIDB4MTI3YywKLQkweDEwNzgsIDB4MjJjMSwgMHgwMDc4LCAweDEyODEsIDB4NzFjNCwgMHhhMTgyLCAweDAwMTAsIDB4MDBjOCwKLQkweDEyN2MsIDB4MjAxMSwgMHg1MDQxLCAweDIyMDQsIDB4MDA3ZSwgMHgyMTEyLCAweDEwNzgsIDB4MjI3YSwKLQkweDAxN2YsIDB4MDA3OCwgMHgxMjgzLCAweDcxYzQsIDB4MjAxMSwgMHgxNDIxLCAweDIwYTksIDB4MDAwOCwKLQkweDIyMDQsIDB4YTEwNiwgMHgwMDQwLCAweDE0MTMsIDB4ODIxMCwgMHgwMDcwLCAweDE0MTEsIDB4MDA3OCwKLQkweDE0MDgsIDB4MDA3OCwgMHgxMjdjLCAweGEyOTIsIDB4MTQyMSwgMHgwMjdlLCAweDIwMTEsIDB4NTA0MiwKLQkweDIyMDQsIDB4MjExMiwgMHgwMTdmLCAweDAwN2UsIDB4MTA3OCwgMHgyMjg2LCAweDAxN2YsIDB4MDA3OCwKLQkweDEyODMsIDB4MDNlOCwgMHgwMGZhLCAweDAxZjQsIDB4MDJlZSwgMHgwMDY0LCAweDAwMTksIDB4MDAzMiwKLQkweDAwNGIsIDB4MjA2MSwgMHg1MDQwLCAweDYxMGMsIDB4NjIxMCwgMHg3MGM0LCAweDYwMGUsIDB4NzBjOCwKLQkweDYwMTIsIDB4MDA3OCwgMHgxMjgyLCAweDIwNjEsIDB4NTA0MCwgMHg2MTE0LCAweDcwYzQsIDB4NjAxNiwKLQkweDAwNzgsIDB4MTI4MywgMHgyMDYxLCAweDUwNDAsIDB4NzFjNCwgMHgyMDExLCAweDAwMDQsIDB4NjAxZiwKLQkweDAwMTksIDB4MjAxOSwgMHgxMjEyLCAweGExODYsIDB4MDAyOCwgMHgwMDQwLCAweDE0NWIsIDB4MjAxMSwKLQkweDAwMDUsIDB4NjAxZiwgMHgwMDE5LCAweDIwMTksIDB4MTIxMiwgMHhhMTg2LCAweDAwMzIsIDB4MDA0MCwKLQkweDE0NWIsIDB4MjAxMSwgMHgwMDA2LCAweDYwMWYsIDB4MDAwYywgMHgyMDE5LCAweDIyMjIsIDB4YTE4NiwKLQkweDAwM2MsIDB4MDBjMCwgMHgxMjdjLCAweDYwMTgsIDB4MDA3ZSwgMHg2MTFhLCAweDc4MDAsIDB4YTA4NCwKLQkweDAwMDEsIDB4MDBjMCwgMHgxNDc2LCAweDIwMDEsIDB4MDRmZCwgMHgyMDA0LCAweGEwODIsIDB4MDAwNSwKLQkweDAwNDgsIDB4MTQ2ZSwgMHgwMDM4LCAweDE0NzIsIDB4MDA3OCwgMHgxNDc2LCAweDAwMjgsIDB4MTQ3MiwKLQkweDAwNzgsIDB4MTQ3NiwgMHgyMDE5LCAweDIyMjIsIDB4MDA3OCwgMHgxNDc4LCAweDIwMTksIDB4MTIxMiwKLQkweDIzYjgsIDB4MTA3OCwgMHgyMjk3LCAweDEwNzgsIDB4NGJkZiwgMHgwMTdmLCAweDAwNzgsIDB4MTI4MywKLQkweDcxYzQsIDB4YTE4NCwgMHhmZmNmLCAweDAwYzAsIDB4MTI3YywgMHgyMDExLCAweDUwNDgsIDB4MjIwNCwKLQkweDIxMTIsIDB4MDA3ZSwgMHgxMDc4LCAweDIyYjksIDB4MDE3ZiwgMHgwMDc4LCAweDEyODMsIDB4NzFjNCwKLQkweGExODIsIDB4MDAxMCwgMHgwMGM4LCAweDEyN2MsIDB4MjAxMSwgMHg1MDQ5LCAweDIyMDQsIDB4MDA3ZSwKLQkweDIxMTIsIDB4MTA3OCwgMHgyMmE4LCAweDAxN2YsIDB4MDA3OCwgMHgxMjgzLCAweDcxYzQsIDB4NzJjOCwKLQkweGExODQsIDB4ZmZmZCwgMHgwMGMwLCAweDEyN2IsIDB4YTI4NCwgMHhmZmZkLCAweDAwYzAsIDB4MTI3YiwKLQkweDIxMDAsIDB4NzkwOCwgMHg3ODBhLCAweDIyMDAsIDB4N2EwYywgMHg3ODBlLCAweDAwNzgsIDB4MTI4MiwKLQkweDcxYzQsIDB4ODEwNywgMHhhMDg0LCAweDAwMGYsIDB4ODAwMywgMHg4MDAzLCAweDgwMDMsIDB4YTBlOCwKLQkweDUyODAsIDB4MjAxOSwgMHgwMDAwLCAweDcyYzgsIDB4YTI4NCwgMHgwMDgwLCAweDAwNDAsIDB4MTRjNiwKLQkweDZjMTQsIDB4ODRmZiwgMHgwMGMwLCAweDE0YzYsIDB4NjgxNywgMHgwMDQwLCAweGEyODQsIDB4MDA0MCwKLQkweDAwNDAsIDB4MTRkMCwgMHg2YzEwLCAweDg0ZmYsIDB4MDBjMCwgMHgxNGQwLCAweDY4MTMsIDB4MDAwMSwKLQkweDY4MDAsIDB4MDA3ZSwgMHhhMjI2LCAweDAwNDAsIDB4MTRmMywgMHg2YTAyLCAweGE0ODQsIDB4MjAwMCwKLQkweDAwNDAsIDB4MTRkYywgMHhhMzlkLCAweDAwMTAsIDB4YTQ4NCwgMHgxMDAwLCAweDAwNDAsIDB4MTRlMiwKLQkweGEzOWQsIDB4MDAwOCwgMHhhNDg0LCAweDQwMDAsIDB4MDA0MCwgMHgxNGYzLCAweDgxMGYsIDB4YTI4NCwKLQkweDQwMDAsIDB4MDA0MCwgMHgxNGVmLCAweDEwNzgsIDB4MjJkYiwgMHgwMDc4LCAweDE0ZjMsIDB4MTA3OCwKLQkweDIyY2QsIDB4MDA3OCwgMHgxNGYzLCAweDcyY2MsIDB4NjgwOCwgMHhhMjA2LCAweDAwNDAsIDB4MTUyMiwKLQkweGEyYTQsIDB4MDBmZiwgMHgyMDYxLCAweDUwNDAsIDB4NjExOCwgMHhhMTg2LCAweDAwMjgsIDB4MDA0MCwKLQkweDE1MDksIDB4YTE4NiwgMHgwMDMyLCAweDAwNDAsIDB4MTUwZiwgMHhhMTg2LCAweDAwM2MsIDB4MDA0MCwKLQkweDE1MTUsIDB4YTQ4MiwgMHgwMDY0LCAweDAwNDgsIDB4MTUxZiwgMHgwMDc4LCAweDE1MTksIDB4YTQ4MiwKLQkweDAwNTAsIDB4MDA0OCwgMHgxNTFmLCAweDAwNzgsIDB4MTUxOSwgMHhhNDgyLCAweDAwNDMsIDB4MDA0OCwKLQkweDE1MWYsIDB4NzFjNCwgMHg3MWM2LCAweDAyN2YsIDB4NzJjYSwgMHgwMDc4LCAweDEyN2QsIDB4NmEwYSwKLQkweGEzOWQsIDB4MDAwYSwgMHg2ODA0LCAweGEzMDUsIDB4NjgwNiwgMHgwMjdmLCAweDZiMGMsIDB4NzFjNCwKLQkweDAwNzgsIDB4MTI4MSwgMHg3N2M0LCAweDEwNzgsIDB4MTk1NiwgMHgyMDkxLCAweDgwMDAsIDB4NmExNCwKLQkweDZiMWMsIDB4MjA5MSwgMHg4MDAxLCAweDcwYzgsIDB4NjgxNiwgMHg3MGNjLCAweDY4MWUsIDB4MjcwOCwKLQkweDAwNzgsIDB4MTI4MSwgMHg3MGM0LCAweDc5NGMsIDB4Nzg0ZSwgMHgwMDc4LCAweDEyODMsIDB4NzFjNCwKLQkweDcyYzgsIDB4NzNjYywgMHhhMTgyLCAweDAwMTAsIDB4MDBjOCwgMHgxMjdjLCAweDEwNzgsIDB4MjJlOSwKLQkweDAwNzgsIDB4MTI4MSwgMHg3N2M0LCAweDEwNzgsIDB4MTk1NiwgMHgyMDkxLCAweDgwMDAsIDB4NmEwOCwKLQkweGEyOTUsIDB4MDAwMiwgMHg2YTBhLCAweDIwOTEsIDB4ODAwMSwgMHgyNzA4LCAweDAwNzgsIDB4MTI4MiwKLQkweDc3YzQsIDB4MTA3OCwgMHgxOTU2LCAweDIwOTEsIDB4ODAwMCwgMHg2YTA4LCAweGEyOTQsIDB4ZmZmOSwKLQkweDZhMGEsIDB4NjgwNCwgMHhhMDA1LCAweDAwNDAsIDB4MTU2NywgMHgxMDc4LCAweDIxYjEsIDB4MjA5MSwKLQkweDgwMDEsIDB4MjcwOCwgMHgwMDc4LCAweDEyODIsIDB4NzdjNCwgMHgxMDc4LCAweDE5NTYsIDB4MjA5MSwKLQkweDgwMDAsIDB4NmEwOCwgMHhhMjk1LCAweDAwMDQsIDB4NmEwYSwgMHg2ODA0LCAweGEwMDUsIDB4MDA0MCwKLQkweDE1N2IsIDB4MTA3OCwgMHgyMWIxLCAweDIwOTEsIDB4ODAwMSwgMHgyNzA4LCAweDAwNzgsIDB4MTI4MiwKLQkweDc3YzQsIDB4MjA0MSwgMHgwMDAxLCAweDIwNDksIDB4MDAwNSwgMHgyMDUxLCAweDAwMjAsIDB4MjA5MSwKLQkweDgwMDAsIDB4MTA3OCwgMHgxOTYzLCAweDIwOTEsIDB4ODAwMSwgMHgyNzA4LCAweDZhMDgsIDB4MDA3OCwKLQkweDEyODIsIDB4NzdjNCwgMHg3MmM4LCAweDczY2MsIDB4NzdjNiwgMHg3MmNhLCAweDczY2UsIDB4MTA3OCwKLQkweDE5YzQsIDB4MDBjMCwgMHgxNWE5LCAweDY4MTgsIDB4YTAwNSwgMHgwMDQwLCAweDE1YTksIDB4MjcwOCwKLQkweDEwNzgsIDB4MjJmOSwgMHgwMGMwLCAweDE1YTksIDB4NzgxNywgMHgwMDE1LCAweDIwOTEsIDB4ODAwMSwKLQkweDAwN2MsIDB4MjA5MSwgMHg4MDAxLCAweDAwNzgsIDB4MTI4NCwgMHg3N2M0LCAweDc3YzYsIDB4MjA0MSwKLQkweDAwMjEsIDB4MjA0OSwgMHgwMDA1LCAweDIwNTEsIDB4MDAyMCwgMHgyMDkxLCAweDgwMDAsIDB4MTA3OCwKLQkweDE5NjMsIDB4MjA2MSwgMHg1MDQwLCAweDYwNmYsIDB4MDAwMywgMHg2NzgyLCAweDYwOTMsIDB4MDAwZiwKLQkweDYwNzMsIDB4MDAwMCwgMHg3ODE3LCAweDAwMTYsIDB4MTA3OCwgMHgyMWIxLCAweDIwOTEsIDB4ODAwMSwKLQkweDAwN2MsIDB4NzdjOCwgMHg3N2NhLCAweDc3YzQsIDB4NzdjNiwgMHhhN2JjLCAweGZmMDAsIDB4MjA5MSwKLQkweDgwMDAsIDB4MjA2MSwgMHg1MDQwLCAweDYwNmYsIDB4MDAwMiwgMHg2MDczLCAweDAwMDAsIDB4Njc4MiwKLQkweDYwOTMsIDB4MDAwZiwgMHg3ODE3LCAweDAwMTcsIDB4MTA3OCwgMHgyMWIxLCAweDIwOTEsIDB4ODAwMSwKLQkweDIwNDEsIDB4MDAyMSwgMHgyMDQ5LCAweDAwMDQsIDB4MjA1MSwgMHgwMDEwLCAweDIwOTEsIDB4ODAwMCwKLQkweDEwNzgsIDB4MTk2MywgMHg3MGM4LCAweDY4MzYsIDB4ODczOCwgMHhhNzg0LCAweDAwMWYsIDB4MDBjMCwKLQkweDE1ZTgsIDB4MjA5MSwgMHg4MDAxLCAweDAwN2MsIDB4NzhjYywgMHhhMDg0LCAweDAwMDMsIDB4MDBjMCwKLQkweDE2MTgsIDB4MjAzOSwgMHgwMDAwLCAweDIwNDEsIDB4MDAyMSwgMHgyMDQ5LCAweDAwMDQsIDB4MjA1MSwKLQkweDAwMDgsIDB4MTA3OCwgMHgxOTU2LCAweDIwOTEsIDB4ODAwMCwgMHg2ODA4LCAweGE4MGQsIDB4NjkwYSwKLQkweDIwOTEsIDB4ODAwMSwgMHg4NzM4LCAweGE3ODQsIDB4MDAxZiwgMHgwMGMwLCAweDE2MDEsIDB4YTdiYywKLQkweGZmMDAsIDB4ODczZiwgMHg4NzM4LCAweDg3M2YsIDB4YTc4NCwgMHgwZjAwLCAweDAwYzAsIDB4MTYwMSwKLQkweDIwOTEsIDB4ODAwMCwgMHgyMDY5LCAweDAxMDAsIDB4NjgzMCwgMHhhMDg0LCAweDAwNDAsIDB4MDA0MCwKLQkweDE2NDEsIDB4Njg0YiwgMHgwMDA0LCAweDIwYTksIDB4MDAxNCwgMHg2ODQ4LCAweGEwODQsIDB4MDAwNCwKLQkweDAwNDAsIDB4MTYyZSwgMHgwMDcwLCAweDE2MmUsIDB4MDA3OCwgMHgxNjI1LCAweDY4NGIsIDB4MDAwOSwKLQkweDIwYTksIDB4MDAxNCwgMHg2ODQ4LCAweGEwODQsIDB4MDAwMSwgMHgwMDQwLCAweDE2M2IsIDB4MDA3MCwKLQkweDE2M2IsIDB4MDA3OCwgMHgxNjMyLCAweDIwYTksIDB4MDBmYSwgMHgwMDcwLCAweDE2NDEsIDB4MDA3OCwKLQkweDE2M2QsIDB4MjA3OSwgMHg1MDAwLCAweDc4MTcsIDB4MDAxOCwgMHgyMDYxLCAweDUwNDAsIDB4NjA2ZiwKLQkweDAwMDEsIDB4NjA3MywgMHgwMDAwLCAweDYwOTMsIDB4MDAwZiwgMHg3OGNjLCAweGEwODUsIDB4MDAwMiwKLQkweDc4Y2UsIDB4NjgwOCwgMHhhMDg0LCAweGZmZmQsIDB4NjgwYSwgMHg2ODFiLCAweDAwNDgsIDB4MjA5MSwKLQkweDgwMDEsIDB4MDA3YywgMHg3OGNjLCAweGEwODQsIDB4ZmZmZCwgMHg3OGNlLCAweGEwODQsIDB4MDAwMSwKLQkweDAwYzAsIDB4MTY2NCwgMHgxMDc4LCAweDFhMGUsIDB4NzFjNCwgMHg3MWM2LCAweDc5NGEsIDB4MDA3YywKLQkweDEwNzgsIDB4MWIzNiwgMHgwMGMwLCAweDEyOWMsIDB4NzVkOCwgMHg3NGRjLCAweDc1ZGEsIDB4NzRkZSwKLQkweDAwNzgsIDB4MTY3NSwgMHgyMDI5LCAweDAwMDAsIDB4MjUyMCwgMHg3MWM0LCAweDczYzgsIDB4NzJjYywKLQkweDcxYzYsIDB4NzNjYSwgMHg3MmNlLCAweDIwNzksIDB4NTAwMCwgMHgyMDkxLCAweDgwMDAsIDB4MTA3OCwKLQkweDE5MTEsIDB4MjA5MSwgMHg4MDAxLCAweDAwNDAsIDB4MTcyYywgMHgyMGE5LCAweDAwMDUsIDB4MjBhMSwKLQkweDUwMTgsIDB4MjA5MSwgMHg4MDAwLCAweDQxYTEsIDB4MjA5MSwgMHg4MDAxLCAweDIwMDksIDB4MDAyMCwKLQkweDEwNzgsIDB4MTkwYywgMHgwMDQwLCAweDE2OTgsIDB4MTA3OCwgMHgxOTJiLCAweDAwNzgsIDB4MTcyYywKLQkweDYwMDQsIDB4YTA4NCwgMHhmZjAwLCAweDgwMDcsIDB4ODAwOSwgMHgwMDQwLCAweDE2ZmIsIDB4MGM3ZSwKLQkweDJjNjgsIDB4MjA5MSwgMHg4MDAwLCAweDEwNzgsIDB4MTkxMSwgMHgyMDkxLCAweDgwMDEsIDB4MDA0MCwKLQkweDE2Y2MsIDB4MmMwMCwgMHg2ODllLCAweDgxMDksIDB4MDBjMCwgMHgxNmEwLCAweDYwOWYsIDB4MDAwMCwKLQkweDBjN2YsIDB4MGM3ZSwgMHg3MjE4LCAweDczMWMsIDB4NzQyMCwgMHg3NTI0LCAweDJjNjgsIDB4Njg5YywKLQkweGEwNjUsIDB4MDA0MCwgMHgxNmZhLCAweDIwMDksIDB4MDAyMCwgMHgxMDc4LCAweDE5MGMsIDB4MDBjMCwKLQkweDE2ZTMsIDB4NjAwNCwgMHhhMDg0LCAweDAwZmYsIDB4YTA4NiwgMHgwMDAyLCAweDAwYzAsIDB4MTZjYywKLQkweDJkMDAsIDB4NjAwMiwgMHgwMDc4LCAweDE2YjIsIDB4MGM3ZiwgMHgwYzdlLCAweDYwOWMsIDB4MjA2MCwKLQkweDEwNzgsIDB4MTk5NiwgMHgwYzdmLCAweDYwOWYsIDB4MDAwMCwgMHgxMDc4LCAweDE3MzAsIDB4MjAwOSwKLQkweDAwMGMsIDB4NjAwOCwgMHhhMDg1LCAweDAyMDAsIDB4NjAwYSwgMHgxMDc4LCAweDE5MDcsIDB4MTA3OCwKLQkweDE5MmIsIDB4MDA3OCwgMHgxNzJjLCAweDBjN2YsIDB4MGM3ZSwgMHg2MDljLCAweDIwNjAsIDB4MTA3OCwKLQkweDE5OTYsIDB4MGM3ZiwgMHg2MDlmLCAweDAwMDAsIDB4MTA3OCwgMHgxNzMwLCAweDIwMDksIDB4MDAwYywKLQkweDYwMDcsIDB4MDEwMywgMHg2MDFiLCAweDAwMDMsIDB4MTA3OCwgMHgxOTA3LCAweDEwNzgsIDB4MTkyYiwKLQkweDAwNzgsIDB4MTcyYywgMHgwYzdmLCAweDc0YzQsIDB4NzNjOCwgMHg3MmNjLCAweDYwMTQsIDB4MjA5MSwKLQkweDgwMDAsIDB4NzgxNywgMHgwMDEyLCAweDBlN2UsIDB4MjA3MSwgMHg1MDQwLCAweDcwNmYsIDB4MDAwNSwKLQkweDcwNzMsIDB4MDAwMCwgMHg3Mzc2LCAweDcyN2EsIDB4NzQ3ZSwgMHg3MDgyLCAweDcwODcsIDB4MDAwMCwKLQkweDJjMDAsIDB4NzA4YSwgMHg3MDhmLCAweDAwMDAsIDB4YTAyZSwgMHgyNTMwLCAweDYxMWMsIDB4NjFhMiwKLQkweGExODQsIDB4MDA2MCwgMHgwMDQwLCAweDE3MWUsIDB4MTA3OCwgMHg0NjdmLCAweDBlN2YsIDB4NjU5NiwKLQkweDY1YTYsIDB4NjY5YSwgMHg2NmFhLCAweDYwYWYsIDB4MDAwMCwgMHg2MGIzLCAweDAwMDAsIDB4MTA3OCwKLQkweDIxYjEsIDB4MjA5MSwgMHg4MDAxLCAweDAwN2MsIDB4NzBjMywgMHg0MDA1LCAweDAwNzgsIDB4MTI4NywKLQkweDIwYTksIDB4MDAwNSwgMHgyMDk5LCAweDUwMTgsIDB4MjA5MSwgMHg4MDAwLCAweDUzMGEsIDB4MjA5MSwKLQkweDgwMDEsIDB4MjEwMCwgMHhhMjEwLCAweGEzOTksIDB4MDAwMCwgMHhhNGExLCAweDAwMDAsIDB4YTVhOSwKLQkweDAwMDAsIDB4MDA3YywgMHg3MWM0LCAweDcwYzcsIDB4MDAwMCwgMHg3OTA2LCAweDAwNzgsIDB4MTI4NCwKLQkweDcxYzQsIDB4NzFjNiwgMHgyMTY4LCAweDAwNzgsIDB4MTc0ZiwgMHgyMDY5LCAweDEwMDAsIDB4NjkwYywKLQkweGEwMTYsIDB4MmQwNCwgMHhhMjEwLCAweDhkNjgsIDB4ODEwOSwgMHgwMGMwLCAweDE3NTEsIDB4YTI4NSwKLQkweDAwMDAsIDB4MDBjMCwgMHgxNzVmLCAweDcwYzMsIDB4NDAwMCwgMHgwMDc4LCAweDE3NjEsIDB4NzBjMywKLQkweDQwMDMsIDB4NzBjYSwgMHgwMDc4LCAweDEyODcsIDB4MjAxMSwgMHg1MDY3LCAweDIyMGMsIDB4NzBjNCwKLQkweDgwMDMsIDB4MDA0OCwgMHgxNzcxLCAweDEwNzgsIDB4M2I0OSwgMHhhMTg0LCAweDdmZmYsIDB4MDA3OCwKLQkweDE3NzUsIDB4MTA3OCwgMHgzYjNjLCAweGExODUsIDB4ODAwMCwgMHgyMDEyLCAweDAwNzgsIDB4MTI4MywKLQkweDcxYzQsIDB4MTA3OCwgMHgzYjMzLCAweDYxMDAsIDB4MjAwMSwgMHg1MDY3LCAweDIwMDQsIDB4YTA4NCwKLQkweDgwMDAsIDB4YTEwZCwgMHg2MjA0LCAweDYzMDgsIDB4MDA3OCwgMHgxMjgxLCAweDc5ZTQsIDB4MDA3OCwKLQkweDEyODMsIDB4NzFjNCwgMHg3MWM2LCAweDIxOTgsIDB4MjBhMSwgMHgwMDQyLCAweDIwYTksIDB4MDAwNCwKLQkweDUzYTMsIDB4MjFhMCwgMHgyMDk5LCAweDAwNDIsIDB4MjBhOSwgMHgwMDA0LCAweDUzYTMsIDB4MDA3OCwKLQkweDEyODQsIDB4NzBjNCwgMHgyMDY4LCAweDIwNzksIDB4NTAwMCwgMHgyMDkxLCAweDgwMDAsIDB4MTA3OCwKLQkweDE5MTEsIDB4MjA5MSwgMHg4MDAxLCAweDAwNDAsIDB4MTgyNSwgMHg2MDA3LCAweDAwMDEsIDB4NjAwYiwKLQkweDAwMDAsIDB4NjAyYiwgMHgwMDAwLCAweDYwMWIsIDB4MDAwNiwgMHg2YTEwLCAweGEyOGMsIDB4MDAwZiwKLQkweGEyODQsIDB4MDBmMCwgMHg4MDAzLCAweDgwMDMsIDB4ODAwMywgMHg4MDAzLCAweGExMDUsIDB4NjAxNiwKLQkweGEyODQsIDB4MDgwMCwgMHgwMDQwLCAweDE3YzAsIDB4NjAxYiwgMHgwMDBhLCAweDAwNzgsIDB4MTdjNiwKLQkweGEyODQsIDB4MTAwMCwgMHgwMDQwLCAweDE3YzYsIDB4NjAxYiwgMHgwMDBjLCAweGEyODQsIDB4MDMwMCwKLQkweDAwNDAsIDB4MTdjZiwgMHg2MDJiLCAweDAwMDEsIDB4ODAwNCwgMHg4MDA0LCAweDgwMDQsIDB4YTA4NSwKLQkweDAwMDEsIDB4NjAxZSwgMHg2MDIzLCAweDAwMDAsIDB4NjAyNywgMHgwMDAwLCAweGEyODQsIDB4MDQwMCwKLQkweDAwNDAsIDB4MTdkYywgMHg2MDJiLCAweDAwMDAsIDB4MjBhOSwgMHgwMDA2LCAweGFjODAsIDB4MDAwYiwKLQkweDIwYTAsIDB4YWQ4MCwgMHgwMDA1LCAweDIwOTgsIDB4NTNhMywgMHhhMjg0LCAweDAzMDAsIDB4MDBjMCwKLQkweDE3ZjEsIDB4NjA0NiwgMHg2MDRhLCAweDYwNGUsIDB4NjA1MiwgMHg2MDk2LCAweDYwOWEsIDB4MDA3OCwKLQkweDE3ZmIsIDB4NjgwMCwgMHg2MDQ2LCAweDY4MDQsIDB4NjA0YSwgMHg2ZTA4LCAweDY2NGUsIDB4NmQwYywKLQkweDY1NTIsIDB4NjU5NiwgMHg2NjlhLCAweDYwMTQsIDB4MjA5MSwgMHg4MDAwLCAweDc4MTcsIDB4MDA0MiwKLQkweDJjMDgsIDB4MjA2MSwgMHg1MDQwLCAweDYwNmYsIDB4MDAwNSwgMHg2MDczLCAweDAwMDAsIDB4NjA3NywKLQkweDAwMDAsIDB4NjA3YiwgMHgwMDAwLCAweDYwN2YsIDB4MDAwMCwgMHg2MDgyLCAweDYxOGEsIDB4YTI4NCwKLQkweDA0MDAsIDB4NjA4ZSwgMHgyMDkxLCAweDgwMDEsIDB4MGU3ZSwgMHgyMDcxLCAweDAwMjAsIDB4NzAwNywKLQkweDAwMGEsIDB4NzAwNywgMHgwMDAyLCAweDcwMDMsIDB4MDAwMCwgMHgwZTdmLCAweDIwOTEsIDB4ODAwMCwKLQkweDEwNzgsIDB4MjFiMSwgMHgyMDkxLCAweDgwMDEsIDB4MDA3YywgMHg3MGMzLCAweDQwMDUsIDB4MDA3OCwKLQkweDEyODcsIDB4MGM3ZSwgMHgwZDdlLCAweDBlN2UsIDB4MGY3ZSwgMHgyMDkxLCAweDgwMDAsIDB4MjA3MSwKLQkweDUwNDAsIDB4MjA3OSwgMHgwMTAwLCAweDIwNjEsIDB4MDAxMCwgMHg3MGEwLCAweGEwNmQsIDB4MDA0MCwKLQkweDE4YWEsIDB4NmEwNCwgMHhhMjk0LCAweDAwZmYsIDB4YTI4NiwgMHgwMDA3LCAweDAwNDAsIDB4MTg0NCwKLQkweGEyODYsIDB4MDAwZiwgMHgwMGMwLCAweDE4YWEsIDB4NjkxYywgMHhhMTg0LCAweDAwODAsIDB4MDBjMCwKLQkweDE4YWEsIDB4NjgyNCwgMHhhMThjLCAweGZmMDAsIDB4YTA4NSwgMHgwMDE5LCAweDY4MjYsIDB4NzFiMCwKLQkweDgxZmYsIDB4MDA0MCwgMHgxODY1LCAweDBkN2UsIDB4MjA2OSwgMHgwMDIwLCAweDY5MDgsIDB4NjgwOCwKLQkweGExMDYsIDB4MDBjMCwgMHgxODU2LCAweDY5MGMsIDB4NjgwYywgMHhhMTA2LCAweDAwYzAsIDB4MTg1YiwKLQkweGExODQsIDB4MDBmZiwgMHgwMGMwLCAweDE4NWIsIDB4MGQ3ZiwgMHg3OGI4LCAweGEwODQsIDB4ODAxZiwKLQkweDAwYzAsIDB4MTg2NSwgMHg3ODQ4LCAweGEwODUsIDB4MDAwYywgMHg3ODRhLCAweDcxYjAsIDB4ODFmZiwKLQkweDAwNDAsIDB4MTg4OCwgMHg3MGIzLCAweDAwMDAsIDB4MGQ3ZSwgMHgyMDY5LCAweDAwMjAsIDB4NjgwNywKLQkweDAwMDgsIDB4NjgwNCwgMHhhMDg0LCAweDAwMDgsIDB4MDBjMCwgMHgxODc5LCAweDY4MDcsIDB4MDAwOCwKLQkweDY4MDQsIDB4YTA4NCwgMHgwMDA4LCAweDAwYzAsIDB4MTg4MCwgMHg2ODA3LCAweDAwMDIsIDB4MGQ3ZiwKLQkweDYxYzQsIDB4NjJjOCwgMHg2M2NjLCAweDYxYzYsIDB4NjJjYSwgMHg2M2NlLCAweDBlN2UsIDB4MjA3MSwKLQkweDUwMDAsIDB4NzI2NiwgMHg3MzZhLCAweGFlODAsIDB4MDAxOSwgMHgwZTdmLCAweDEwNzgsIDB4NDU5OCwKLQkweDc4YTMsIDB4MDAwMCwgMHg3ODU4LCAweGEwODQsIDB4ZWRmZiwgMHg3ODVhLCAweDcwYjQsIDB4YTA4MCwKLQkweDAwZGEsIDB4NzgxYSwgMHgwZjdmLCAweDBlN2YsIDB4MGQ3ZiwgMHgwYzdmLCAweDIwOTEsIDB4ODAwMSwKLQkweDAwNzgsIDB4MTI4NCwgMHgwZjdmLCAweDBlN2YsIDB4MGQ3ZiwgMHgwYzdmLCAweDIwOTEsIDB4ODAwMSwKLQkweDIwMDEsIDB4NDAwNSwgMHgwMDc4LCAweDEyODYsIDB4Nzk4MCwgMHg3MWM2LCAweDcxYzQsIDB4YTE4MiwKLQkweDAwMDMsIDB4MDBjOCwgMHgxMjdjLCAweDc5ODIsIDB4MDA3OCwgMHgxMjg0LCAweDc5ODAsIDB4NzFjNiwKLQkweDAwNzgsIDB4MTI4NCwgMHg3OTc0LCAweDcxYzYsIDB4NzFjNCwgMHg3OTc2LCAweDc5NzgsIDB4NzFjYSwKLQkweDcxYzgsIDB4Nzk3YSwgMHg3OTdjLCAweDcxY2UsIDB4NzFjYywgMHg3OTdlLCAweDAwNzgsIDB4MTI4NCwKLQkweDc5NzQsIDB4NzFjNiwgMHg3OTc4LCAweDcxY2EsIDB4Nzk3YywgMHg3MWNlLCAweDAwNzgsIDB4MTI4NCwKLQkweDc5MDAsIDB4NzFjNiwgMHg3MWM0LCAweDc5MDIsIDB4MjAwMSwgMHgwNGZkLCAweDIwMDQsIDB4YTA4MiwKLQkweDAwMDUsIDB4MDA0OCwgMHgxOGU3LCAweDAwMzgsIDB4MThlOSwgMHgwMDc4LCAweDE4ZjMsIDB4MDBhOCwKLQkweDE4ZjMsIDB4YTE4YywgMHgwMDAxLCAweDAwYzAsIDB4MThmMSwgMHgyMGI5LCAweDIyMjIsIDB4MDA3OCwKLQkweDE4ZjMsIDB4MjBiOSwgMHgxMjEyLCAweDAwNzgsIDB4MTI4NCwgMHg3OTAwLCAweDcxYzYsIDB4MDA3OCwKLQkweDEyODQsIDB4MjAwOSwgMHg1MDc0LCAweDIxMDQsIDB4NzBjNiwgMHg3MGM0LCAweDIwMGEsIDB4MDA3OCwKLQkweDEyODQsIDB4MjAwOSwgMHg1MDc0LCAweDIxMDQsIDB4NzBjNiwgMHgwMDc4LCAweDEyODQsIDB4YWM4MCwKLQkweDAwMDEsIDB4MTA3OCwgMHgxYWYyLCAweDAwN2MsIDB4YWM4MCwgMHgwMDAxLCAweDEwNzgsIDB4MWE5MiwKLQkweDAwN2MsIDB4Nzg1MCwgMHhhMDY1LCAweDAwNDAsIDB4MTkxOSwgMHgyYzA0LCAweDc4NTIsIDB4MjA2MywKLQkweDAwMDAsIDB4MDA3YywgMHgwZjdlLCAweDIwNzksIDB4NTAwMCwgMHg3ODUwLCAweGEwNmQsIDB4MDA0MCwKLQkweDE5MjksIDB4MmQwNCwgMHg3ODUyLCAweDY4MDMsIDB4MDAwMCwgMHg2ODA3LCAweDAwMDAsIDB4NjgwYiwKLQkweDAwMDAsIDB4MGY3ZiwgMHgwMDdjLCAweDIwOTEsIDB4ODAwMCwgMHgwZjdlLCAweDIwNzksIDB4NTAwMCwKLQkweDc4NTAsIDB4MjA2MiwgMHgyYzAwLCAweGEwMDUsIDB4MDBjMCwgMHgxOTM4LCAweDEwNzgsIDB4MjNjYSwKLQkweDc4NTIsIDB4MGY3ZiwgMHgyMDkxLCAweDgwMDEsIDB4MDA3YywgMHgwZjdlLCAweDIwNzksIDB4NTAwMCwKLQkweDc4NTAsIDB4MjA2YSwgMHgyZDAwLCAweDc4NTIsIDB4MGY3ZiwgMHgwMDdjLCAweDIwMTEsIDB4NzcwMCwKLQkweDdhNTIsIDB4N2JlYywgMHg4MzE5LCAweDAwNDAsIDB4MTk1MywgMHhhMjgwLCAweDAwMzEsIDB4MjAxMiwKLQkweDIwMTAsIDB4MDA3OCwgMHgxOTRhLCAweDIwMTMsIDB4MDAwMCwgMHgwMDdjLCAweGE3ODQsIDB4MGYwMCwKLQkweDgwMGIsIDB4YTc4NCwgMHgwMDFmLCAweDgwMDMsIDB4ODAwMywgMHg4MDAzLCAweDgwMDMsIDB4YTEwNSwKLQkweGEwZTgsIDB4NTMwMCwgMHgwMDdjLCAweDEwNzgsIDB4MTk1NiwgMHgyOTAwLCAweDY4MmEsIDB4MmEwMCwKLQkweDY4MmUsIDB4NjgwOCwgMHhhMDg0LCAweGZmZWYsIDB4YTgwZCwgMHg2OTBhLCAweDIwMDksIDB4NTA1MiwKLQkweDIxMGMsIDB4NjgwNCwgMHhhMDA1LCAweDAwNDAsIDB4MTk5NSwgMHhhMTE2LCAweDAwYzAsIDB4MTk4MCwKLQkweDIwNjAsIDB4NjAwMCwgMHg2ODA2LCAweDAxN2UsIDB4MjAwYiwgMHgwMDAwLCAweDAwNzgsIDB4MTk4MywKLQkweDIwMDksIDB4MDAwMCwgMHgwMTdlLCAweDY4MDQsIDB4YTA2NSwgMHgwMDQwLCAweDE5OTIsIDB4NjAwMCwKLQkweDY4MDYsIDB4MTA3OCwgMHgxOWEzLCAweDEwNzgsIDB4MWM0MiwgMHg2ODEwLCAweDgwMDEsIDB4NjgxMiwKLQkweDAwYzAsIDB4MTk4MywgMHgwMTdmLCAweDY5MDIsIDB4NjkwNiwgMHgwMDdjLCAweGEwNjUsIDB4MDA0MCwKLQkweDE5YTIsIDB4NjA5YywgMHg2MDlmLCAweDAwMDAsIDB4MjAwOCwgMHgxMDc4LCAweDE5MmIsIDB4MjEwMCwKLQkweDAwNzgsIDB4MTk5NiwgMHgwMDdjLCAweDYwMDcsIDB4MDEwMywgMHg2MDhmLCAweDAwMDAsIDB4MjBhOSwKLQkweDAwMWMsIDB4YWM4MCwgMHgwMDA1LCAweDIwYTAsIDB4MjAwMSwgMHgwMDAwLCAweDQwYTQsIDB4NjgyOCwKLQkweDYwMWEsIDB4NjgyYywgMHg2MDIyLCAweDAwN2MsIDB4MGU3ZSwgMHgyMDcxLCAweDUwNDAsIDB4NzA0YywKLQkweGEwOGMsIDB4MDIwMCwgMHgwMGMwLCAweDE5YzIsIDB4YTA4OCwgMHg1MDgwLCAweDJkMGEsIDB4ODAwMCwKLQkweDcwNGUsIDB4YTAwNiwgMHgwZTdmLCAweDAwN2MsIDB4MTA3OCwgMHgxOTU2LCAweDIwOTEsIDB4ODAwMCwKLQkweDY4MDQsIDB4NzgxZSwgMHhhMDY1LCAweDAwNDAsIDB4MWEwZCwgMHgwMDc4LCAweDE5ZDUsIDB4MmMwMCwKLQkweDc4MWUsIDB4NjAwMCwgMHhhMDY1LCAweDAwNDAsIDB4MWEwZCwgMHg2MDBjLCAweGEzMDYsIDB4MDBjMCwKLQkweDE5Y2YsIDB4NjAxMCwgMHhhMjA2LCAweDAwYzAsIDB4MTljZiwgMHgyYzI4LCAweDIwMDEsIDB4NTA1MiwKLQkweDIwMDQsIDB4YWMwNiwgMHgwMGMwLCAweDE5ZTYsIDB4MDA3OCwgMHgxYTBiLCAweDY4MDQsIDB4YWMwNiwKLQkweDAwYzAsIDB4MTlmMywgMHg2MDAwLCAweGEwNjUsIDB4NjgwNiwgMHgwMGMwLCAweDE5ZmQsIDB4NjgwMywKLQkweDAwMDAsIDB4MDA3OCwgMHgxOWZkLCAweDY0MDAsIDB4NzgxYywgMHgyMDYwLCAweDY0MDIsIDB4YTQ4NiwKLQkweDAwMDAsIDB4MDBjMCwgMHgxOWZkLCAweDJjMDAsIDB4NjgwMiwgMHgyNTYwLCAweDEwNzgsIDB4MTlhMywKLQkweDYwMWIsIDB4MDAwNSwgMHg2MDIzLCAweDAwMjAsIDB4MTA3OCwgMHgxYzQyLCAweDY4MTAsIDB4ODAwMSwKLQkweDEwNTAsIDB4MjNjYSwgMHg2ODEyLCAweGEwODUsIDB4ZmZmZiwgMHgwMDdjLCAweDIwMzksIDB4MDAwMCwKLQkweDIwNDEsIDB4MDAyMSwgMHgyMDQ5LCAweDAwMDQsIDB4MjA1MSwgMHgwMDA4LCAweDIwOTEsIDB4ODAwMCwKLQkweDEwNzgsIDB4MTk2MywgMHg4NzM4LCAweGE3ODQsIDB4MDAxZiwgMHgwMGMwLCAweDFhMTgsIDB4YTdiYywKLQkweGZmMDAsIDB4ODczZiwgMHg4NzM4LCAweDg3M2YsIDB4YTc4NCwgMHgwZjAwLCAweDAwYzAsIDB4MWExOCwKLQkweDIwOTEsIDB4ODAwMSwgMHgwMDdjLCAweDIwNjEsIDB4MDAwMCwgMHg2MDE4LCAweGEwODQsIDB4MDAwMSwKLQkweDAwYzAsIDB4MWEzYywgMHgyMDkxLCAweDgwMDAsIDB4NzhlMCwgMHg3OGUzLCAweDAwMDAsIDB4MjA5MSwKLQkweDgwMDEsIDB4YTAwNSwgMHgwMGMwLCAweDFhM2QsIDB4MDA3YywgMHhhMDhjLCAweGZmZjAsIDB4MDA0MCwKLQkweDFhNDMsIDB4MTA3OCwgMHgyM2NhLCAweDAwNzksIDB4MWE0NSwgMHgxYTU1LCAweDFhNTgsIDB4MWE1ZSwKLQkweDFhNjIsIDB4MWE1NiwgMHgxYTY2LCAweDFhNmMsIDB4MWE1NiwgMHgxYTU2LCAweDFjMGMsIDB4MWMzMCwKLQkweDFjMzQsIDB4MWE1NiwgMHgxYTU2LCAweDFhNTYsIDB4MWE1NiwgMHgwMDdjLCAweDEwNzgsIDB4MjNjYSwKLQkweDEwNzgsIDB4MWEwZSwgMHgyMDAxLCAweDgwMDEsIDB4MDA3OCwgMHgxYzNhLCAweDIwMDEsIDB4ODAwMywKLQkweDAwNzgsIDB4MWMzYSwgMHgyMDAxLCAweDgwMDQsIDB4MDA3OCwgMHgxYzNhLCAweDEwNzgsIDB4MWEwZSwKLQkweDIwMDEsIDB4ODAwNiwgMHgwMDc4LCAweDFjM2EsIDB4MjAwMSwgMHg4MDA3LCAweDAwNzgsIDB4MWMzYSwKLQkweDIwMzAsIDB4MjEzOCwgMHhhNzgyLCAweDAwMjEsIDB4MDA0OCwgMHgxYTc4LCAweDIwMDksIDB4MDAyMCwKLQkweDI2MDAsIDB4MTA3OCwgMHgxYTkyLCAweDAwYzAsIDB4MWE5MSwgMHhhN2JhLCAweDAwMjAsIDB4MDA0OCwKLQkweDFhOTAsIDB4MDA0MCwgMHgxYTkwLCAweDI3MDgsIDB4YTZiMCwgMHgwMDIwLCAweGEyOTAsIDB4MDA0MCwKLQkweGEzOTksIDB4MDAwMCwgMHhhNGExLCAweDAwMDAsIDB4YTVhOSwgMHgwMDAwLCAweDAwNzgsIDB4MWE3MiwKLQkweGEwMDYsIDB4MDA3YywgMHg4MWZmLCAweDAwNDAsIDB4MWFjZCwgMHgyMDk5LCAweDAwMzAsIDB4MjBhMCwKLQkweDcwMGMsIDB4YTA4NCwgMHgwMGZmLCAweDAwNDAsIDB4MWFhNCwgMHg3MDA3LCAweDAwMDQsIDB4NzAwNCwKLQkweGEwODQsIDB4MDAwNCwgMHgwMGMwLCAweDFhOWYsIDB4MjFhOCwgMHg3MDE3LCAweDAwMDAsIDB4ODEwYiwKLQkweDcxMTIsIDB4NzIxYSwgMHg3MzFlLCAweDc0MjIsIDB4NzUyNiwgMHg3ODBjLCAweGEwODUsIDB4MDAwMSwKLQkweDcwMDIsIDB4NzAwNywgMHgwMDAxLCAweDIwMDEsIDB4MDRmZCwgMHgyMDA0LCAweGEwODIsIDB4MDAwNSwKLQkweDAwYzgsIDB4MWFjMSwgMHgyMDA5LCAweDAwMjIsIDB4MjEwNCwgMHhhMDg0LCAweDQwMDAsIDB4MDBjMCwKLQkweDFhYjMsIDB4NzAwOCwgMHg4MDBiLCAweDAwYzgsIDB4MWFiMywgMHg3MDA3LCAweDAwMDIsIDB4YTA4YywKLQkweDAxZTAsIDB4MDBjMCwgMHgxYWNkLCAweDUzYTUsIDB4YTAwNiwgMHg3MDAzLCAweDAwMDAsIDB4MDA3YywKLQkweDIwMzAsIDB4MjEzOCwgMHhhNzgyLCAweDAwMjEsIDB4MDA0OCwgMHgxYWQ4LCAweDIwMDksIDB4MDAyMCwKLQkweDI2MDAsIDB4MTA3OCwgMHgxYWYyLCAweDAwYzAsIDB4MWFmMSwgMHhhN2JhLCAweDAwMjAsIDB4MDA0OCwKLQkweDFhZjAsIDB4MDA0MCwgMHgxYWYwLCAweDI3MDgsIDB4YTZiMCwgMHgwMDIwLCAweGEyOTAsIDB4MDA0MCwKLQkweGEzOTksIDB4MDAwMCwgMHhhNGExLCAweDAwMDAsIDB4YTVhOSwgMHgwMDAwLCAweDAwNzgsIDB4MWFkMiwKLQkweGEwMDYsIDB4MDA3YywgMHg4MWZmLCAweDAwNDAsIDB4MWIzMywgMHgyMDk4LCAweDIwYTEsIDB4MDAzMCwKLQkweDcwMGMsIDB4YTA4NCwgMHgwMGZmLCAweDAwNDAsIDB4MWIwNCwgMHg3MDA3LCAweDAwMDQsIDB4NzAwNCwKLQkweGEwODQsIDB4MDAwNCwgMHgwMGMwLCAweDFhZmYsIDB4MjFhOCwgMHg3MDE3LCAweDAwMDAsIDB4ODEwYiwKLQkweDcxMTIsIDB4NzIxYSwgMHg3MzFlLCAweDc0MjIsIDB4NzUyNiwgMHg3ODBjLCAweGEwODUsIDB4MDAwMCwKLQkweDcwMDIsIDB4NTNhNiwgMHg3MDA3LCAweDAwMDEsIDB4MjAwMSwgMHgwNGZkLCAweDIwMDQsIDB4YTA4MiwKLQkweDAwMDUsIDB4MDBjOCwgMHgxYjIyLCAweDIwMDksIDB4MDAyMiwgMHgyMTA0LCAweGEwODQsIDB4NDAwMCwKLQkweDAwYzAsIDB4MWIxNCwgMHg3MDEwLCAweGEwODQsIDB4ZjAwMCwgMHgwMDQwLCAweDFiMmIsIDB4NzAwNywKLQkweDAwMDgsIDB4MDA3OCwgMHgxYjJmLCAweDcxMDgsIDB4ODEwMywgMHgwMGM4LCAweDFiMTQsIDB4NzAwNywKLQkweDAwMDIsIDB4YTE4NCwgMHgwMWUwLCAweDcwMDMsIDB4MDAwMCwgMHgwMDdjLCAweDIwMDEsIDB4MDRmZCwKLQkweDIwMDQsIDB4YTA4MiwgMHgwMDA0LCAweDAwYzgsIDB4MWIzZiwgMHgwMDc4LCAweDFiNDIsIDB4YTAwNiwKLQkweDAwNzgsIDB4MWI0NCwgMHhhMDg1LCAweDAwMDEsIDB4MDA3YywgMHgwZTdlLCAweDIwNzEsIDB4NTAwMCwKLQkweDJkMDgsIDB4NzA1OCwgMHg2ODAyLCAweGEwMDUsIDB4MDBjMCwgMHgxYjRmLCAweDcxNWUsIDB4NzE1YSwKLQkweDBlN2YsIDB4MDA3YywgMHgyYzA4LCAweDc4NTgsIDB4NjAwMiwgMHhhMDA1LCAweDAwYzAsIDB4MWI1OSwKLQkweDc5NWUsIDB4Nzk1YSwgMHgwMDdjLCAweDIwOTEsIDB4ODAwMCwgMHg2MDAzLCAweDAwMDAsIDB4MmMwOCwKLQkweDc4NWMsIDB4YTA2NSwgMHgwMGMwLCAweDFiNjcsIDB4Nzk1YSwgMHgwMDc4LCAweDFiNjgsIDB4NjEwMiwKLQkweDc5NWUsIDB4MjA5MSwgMHg4MDAxLCAweDEwNzgsIDB4MjFjZSwgMHgwMDdjLCAweDBlN2UsIDB4MjA3MSwKLQkweDUwMDAsIDB4NzA1OCwgMHhhMDZkLCAweDAwNDAsIDB4MWI3YywgMHg2ODAwLCAweDcwNWEsIDB4YTAwNSwKLQkweDAwYzAsIDB4MWI3YiwgMHg3MDVlLCAweDhkZmYsIDB4MGU3ZiwgMHgwMDdjLCAweDBkN2UsIDB4MGM3ZSwKLQkweDBmN2UsIDB4MjA3OSwgMHg1MDAwLCAweGFmODAsIDB4MDAxNiwgMHgyMDYwLCAweDYwMDAsIDB4YTAwNSwKLQkweDAwNDAsIDB4MWJhYywgMHgyMDY4LCAweDY4MTQsIDB4YTMwNiwgMHgwMGMwLCAweDFiOTUsIDB4NjgyOCwKLQkweGEwODQsIDB4MDBmZiwgMHhhNDA2LCAweDAwNDAsIDB4MWI5OCwgMHgyZDYwLCAweDAwNzgsIDB4MWI4NiwKLQkweDY4MDAsIDB4YTAwNSwgMHg2MDAyLCAweDAwYzAsIDB4MWJhNCwgMHhhZjgwLCAweDAwMTYsIDB4YWMwNiwKLQkweDAwNDAsIDB4MWJhMywgMHgyYzAwLCAweDc4NWUsIDB4MGQ3ZSwgMHg2ODljLCAweGEwMDUsIDB4MDA0MCwKLQkweDFiYWIsIDB4MTA3OCwgMHgxOTk2LCAweDAwN2YsIDB4MGY3ZiwgMHgwYzdmLCAweDBkN2YsIDB4YTAwNSwKLQkweDAwN2MsIDB4MGQ3ZSwgMHgwYzdlLCAweDBmN2UsIDB4MjA3OSwgMHg1MDAwLCAweGFmODAsIDB4MDAxNiwKLQkweDIwNjAsIDB4NjAwMCwgMHhhMDA1LCAweDAwNDAsIDB4MWJkYiwgMHgyMDY4LCAweDY4MTQsIDB4YTA4NCwKLQkweDAwZmYsIDB4YTMwNiwgMHgwMDQwLCAweDFiYzcsIDB4MmQ2MCwgMHgwMDc4LCAweDFiYjksIDB4NjgwMCwKLQkweGEwMDUsIDB4NjAwMiwgMHgwMGMwLCAweDFiZDMsIDB4YWY4MCwgMHgwMDE2LCAweGFjMDYsIDB4MDA0MCwKLQkweDFiZDIsIDB4MmMwMCwgMHg3ODVlLCAweDBkN2UsIDB4Njg5YywgMHhhMDA1LCAweDAwNDAsIDB4MWJkYSwKLQkweDEwNzgsIDB4MTk5NiwgMHgwMDdmLCAweDBmN2YsIDB4MGM3ZiwgMHgwZDdmLCAweGEwMDUsIDB4MDA3YywKLQkweDBkN2UsIDB4MGM3ZSwgMHgwZjdlLCAweDIwNzksIDB4NTAwMCwgMHhhZjgwLCAweDAwMTYsIDB4MjA2MCwKLQkweDYwMDAsIDB4YTA2ZCwgMHgwMDQwLCAweDFjMDcsIDB4NjgxNCwgMHhhMzA2LCAweDAwNDAsIDB4MWJmMywKLQkweDJkNjAsIDB4MDA3OCwgMHgxYmU4LCAweDY4MDAsIDB4YTAwNSwgMHg2MDAyLCAweDAwYzAsIDB4MWJmZiwKLQkweGFmODAsIDB4MDAxNiwgMHhhYzA2LCAweDAwNDAsIDB4MWJmZSwgMHgyYzAwLCAweDc4NWUsIDB4MGQ3ZSwKLQkweDY4OWMsIDB4YTAwNSwgMHgwMDQwLCAweDFjMDYsIDB4MTA3OCwgMHgxOTk2LCAweDAwN2YsIDB4MGY3ZiwKLQkweDBjN2YsIDB4MGQ3ZiwgMHhhMDA1LCAweDAwN2MsIDB4MjA5MSwgMHg4MDAwLCAweDIwNjksIDB4NTA0MCwKLQkweDY4MDAsIDB4YTA4NiwgMHgwMDAwLCAweDAwNDAsIDB4MWMxYSwgMHgyMDkxLCAweDgwMDEsIDB4NzhlMywKLQkweDAwMDksIDB4MDA3YywgMHg2ODgwLCAweGEwYmMsIDB4ZmYwMCwgMHgyMDQxLCAweDAwMjEsIDB4MjA0OSwKLQkweDAwMDQsIDB4MjA1MSwgMHgwMDEwLCAweDEwNzgsIDB4MTk2MywgMHg4NzM4LCAweGE3ODQsIDB4MDAxZiwKLQkweDAwYzAsIDB4MWMyMywgMHgyMDkxLCAweDgwMDEsIDB4MjAwMSwgMHg4MDBhLCAweDAwNzgsIDB4MWMzYSwKLQkweDIwMDEsIDB4ODAwYywgMHgwMDc4LCAweDFjM2EsIDB4MTA3OCwgMHgxYTBlLCAweDIwMDEsIDB4ODAwZCwKLQkweDAwNzgsIDB4MWMzYSwgMHg3MGMyLCAweDIwNjEsIDB4MDAwMCwgMHg2MDFiLCAweDAwMDEsIDB4MjA5MSwKLQkweDQwODAsIDB4MDA3YywgMHg2MDA0LCAweDJjMDgsIDB4MjA2MywgMHgwMDAwLCAweDc4ODQsIDB4ODAwMCwKLQkweDc4ODYsIDB4Nzg4OCwgMHhhMDA1LCAweDc5OGEsIDB4MDA0MCwgMHgxYzUxLCAweDJjMDIsIDB4MDA3OCwKLQkweDFjNTIsIDB4Nzk4ZSwgMHgwMDdjLCAweDY4MDcsIDB4MDEwMywgMHgwYzdlLCAweDIwNjEsIDB4NTAwMCwKLQkweDJkMDgsIDB4MjA2YiwgMHgwMDAwLCAweDYwODQsIDB4ODAwMCwgMHg2MDg2LCAweDYwODgsIDB4YTAwNSwKLQkweDYxOGEsIDB4MDA0MCwgMHgxYzY2LCAweDJkMDIsIDB4MDA3OCwgMHgxYzY3LCAweDYxOGUsIDB4MGM3ZiwKLQkweDAwN2MsIDB4MTA3OCwgMHgxYzdhLCAweDAwNDAsIDB4MWM3OSwgMHgwYzdlLCAweDYwOWMsIDB4YTA2NSwKLQkweDAwNDAsIDB4MWM3NCwgMHgxMDc4LCAweDE5OTYsIDB4MGM3ZiwgMHg2MDlmLCAweDAwMDAsIDB4MTA3OCwKLQkweDE5MmIsIDB4MDA3YywgMHg3ODhjLCAweGEwNjUsIDB4MDA0MCwgMHgxYzhjLCAweDIwOTEsIDB4ODAwMCwKLQkweDc4ODQsIDB4ODAwMSwgMHg3ODg2LCAweDJjMDQsIDB4Nzg4ZSwgMHhhMDA1LCAweDAwYzAsIDB4MWM4YSwKLQkweDc4OGEsIDB4ODAwMCwgMHgyMDkxLCAweDgwMDEsIDB4MDA3YywgMHgyMGE5LCAweDAwMTAsIDB4YTAwNiwKLQkweDgwMDQsIDB4ODA4NiwgMHg4MThlLCAweDAwYzgsIDB4MWM5NiwgMHhhMjAwLCAweDAwNzAsIDB4MWM5YSwKLQkweDAwNzgsIDB4MWM5MSwgMHg4MDg2LCAweDgxOGUsIDB4MDA3YywgMHgxNTdlLCAweDIwYTksIDB4MDAxMCwKLQkweGEwMDUsIDB4MDA0MCwgMHgxY2MwLCAweGExMWEsIDB4MDBjOCwgMHgxY2MwLCAweDgyMTMsIDB4ODE4ZCwKLQkweDAwNDgsIDB4MWNiMSwgMHhhMTFhLCAweDAwYzgsIDB4MWNiMiwgMHgwMDcwLCAweDFjYjgsIDB4MDA3OCwKLQkweDFjYTYsIDB4YTExYSwgMHgyMzA4LCAweDgyMTAsIDB4MDA3MCwgMHgxY2I4LCAweDAwNzgsIDB4MWNhNiwKLQkweDAwN2UsIDB4MzIwMCwgMHhhMDg0LCAweGY3ZmYsIDB4MjA4MCwgMHgwMDdmLCAweDE1N2YsIDB4MDA3YywKLQkweDAwN2UsIDB4MzIwMCwgMHhhMDg1LCAweDA4MDAsIDB4MDA3OCwgMHgxY2JjLCAweDc5OTQsIDB4NzBkMCwKLQkweGExMDYsIDB4MDA0MCwgMHgxZDM0LCAweDIwOTEsIDB4ODAwMCwgMHgyMDcxLCAweDAwMjAsIDB4NzAwNCwKLQkweGEwMDUsIDB4MDBjMCwgMHgxZDM0LCAweDcwMDgsIDB4NzIwOCwgMHhhMjA2LCAweDAwYzAsIDB4MWQzNCwKLQkweGEyODYsIDB4MDAwOCwgMHgwMGMwLCAweDFkMzQsIDB4MjA3MSwgMHgwMDEwLCAweDEwNzgsIDB4MTkxMSwKLQkweDAwNDAsIDB4MWQzNCwgMHg3YTljLCAweDdiOTgsIDB4N2NhNCwgMHg3ZGEwLCAweGExODQsIDB4ZmYwMCwKLQkweDAwNDAsIDB4MWQwMiwgMHgyMDMxLCAweDAwMDAsIDB4ODEwYiwgMHg4NmI1LCAweDgxMGIsIDB4ODZiNSwKLQkweDgxMGIsIDB4ODZiNSwgMHg4MTBiLCAweDg2YjUsIDB4ODEwYiwgMHg4NmI1LCAweDgxMGIsIDB4ODZiNSwKLQkweDIxMDAsIDB4YTIxMCwgMHgyNjAwLCAweGEzMTksIDB4YTRhMSwgMHgwMDAwLCAweGE1YTksIDB4MDAwMCwKLQkweDAwNzgsIDB4MWQwYywgMHg4MTA3LCAweDgwMDQsIDB4ODAwNCwgMHhhMjEwLCAweGEzOTksIDB4MDAwMCwKLQkweGE0YTEsIDB4MDAwMCwgMHhhNWE5LCAweDAwMDAsIDB4MjAwOSwgMHgwMDIwLCAweDEwNzgsIDB4MTkwYywKLQkweDIwOTEsIDB4ODAwMSwgMHgwMDQwLCAweDFkMmIsIDB4MTA3OCwgMHgxOTJiLCAweDc4YTgsIDB4ODAwMCwKLQkweDc4YWEsIDB4YTA4NiwgMHgwMDAyLCAweDAwYzAsIDB4MWQzNCwgMHgyMDkxLCAweDgwMDAsIDB4NzhlMywKLQkweDAwMDIsIDB4NzhhYiwgMHgwMDAwLCAweDc4Y2MsIDB4YTA4NSwgMHgwMDAzLCAweDc4Y2UsIDB4MjA5MSwKLQkweDgwMDEsIDB4MDA3OCwgMHgxZDM0LCAweDc4YWIsIDB4MDAwMCwgMHgxMDc4LCAweDIwOGIsIDB4NjAwNCwKLQkweGEwODQsIDB4MDAwZiwgMHgwMDc5LCAweDFkMzksIDB4MjA3MSwgMHgwMDEwLCAweDIwOTEsIDB4ODAwMSwKLQkweDAwN2MsIDB4MWQ0OSwgMHgxZDZiLCAweDFkOTEsIDB4MWQ0OSwgMHgxZGFlLCAweDFkNTgsIDB4MWYwZCwKLQkweDFmMjgsIDB4MWQ0OSwgMHgxZDY1LCAweDFkOGIsIDB4MWRmNiwgMHgxZTYzLCAweDFlYjMsIDB4MWVjNSwKLQkweDFmMjQsIDB4MjAzOSwgMHgwNDAwLCAweDc4ZGMsIDB4YTcwNSwgMHg3OGRlLCAweDYwMDgsIDB4YTcwNSwKLQkweDYwMGEsIDB4MTA3OCwgMHgxZmE2LCAweDYwOWMsIDB4NzhkYSwgMHgxMDc4LCAweDIwNzMsIDB4MDA3YywKLQkweDc4ZGMsIDB4YTA4NCwgMHgwMTAwLCAweDAwNDAsIDB4MWQ1ZiwgMHgwMDc4LCAweDFkNDksIDB4NjAxYywKLQkweGEwODUsIDB4MDA4MCwgMHg2MDFlLCAweDAwNzgsIDB4MWQ3MiwgMHgxMDc4LCAweDFiMzYsIDB4MDBjMCwKLQkweDFkNDksIDB4MTA3OCwgMHgyMGE1LCAweDc4ZGMsIDB4YTA4NCwgMHgwMTAwLCAweDAwNDAsIDB4MWQ3MiwKLQkweDAwNzgsIDB4MWQ0OSwgMHg3OGRmLCAweDAwMDAsIDB4NjAwNCwgMHg4MDA3LCAweGEwODQsIDB4MDBmZiwKLQkweDc4ZDIsIDB4ODAwMSwgMHg2MDlmLCAweDAwMDAsIDB4MDA0MCwgMHgxZDg4LCAweDEwNzgsIDB4MWZhNiwKLQkweDAwNDAsIDB4MWQ4OCwgMHg3OGRjLCAweGEwODUsIDB4MDEwMCwgMHg3OGRlLCAweDAwNzgsIDB4MWQ4YSwKLQkweDEwNzgsIDB4MWZjYSwgMHgwMDdjLCAweDEwNzgsIDB4MWIzNiwgMHgwMGMwLCAweDFkNDksIDB4MTA3OCwKLQkweDIwYTEsIDB4NzhkYywgMHhhMDhjLCAweDBlMDAsIDB4MDBjMCwgMHgxZDlhLCAweGEwODQsIDB4MDEwMCwKLQkweDAwYzAsIDB4MWQ5YywgMHgwMDc4LCAweDFkNDksIDB4MTA3OCwgMHgxZmE2LCAweDAwYzAsIDB4MWRhZCwKLQkweDYxMDQsIDB4YTE4YywgMHgwMGZmLCAweGExODYsIDB4MDAwNywgMHgwMDQwLCAweDFmNjMsIDB4YTE4NiwKLQkweDAwMGYsIDB4MDA0MCwgMHgxZjYzLCAweDEwNzgsIDB4MWZjYSwgMHgwMDdjLCAweDc4ZGMsIDB4YTA4NCwKLQkweDAxMDAsIDB4MDA0MCwgMHgxZGI1LCAweDAwNzgsIDB4MWQ0OSwgMHg3OGRmLCAweDAwMDAsIDB4NjcxNCwKLQkweDIwMTEsIDB4MDAwMSwgMHgyMGE5LCAweDAwMDEsIDB4NjAxOCwgMHhhMDg0LCAweDAwZmYsIDB4YTAwNSwKLQkweDAwNDAsIDB4MWRkOCwgMHgyMDExLCAweDAwMDEsIDB4YTdiYywgMHhmZjAwLCAweDIwYTksIDB4MDAyMCwKLQkweGEwOGUsIDB4MDAwMSwgMHgwMDQwLCAweDFkZDgsIDB4MjAzOSwgMHgwMDAwLCAweDIwMTEsIDB4MDAwMiwKLQkweDIwYTksIDB4MDEwMCwgMHhhMDhlLCAweDAwMDIsIDB4MDA0MCwgMHgxZGQ4LCAweDAwNzgsIDB4MWRmMywKLQkweDEwNzgsIDB4MTk1NiwgMHgyMDkxLCAweDgwMDAsIDB4NjgyYiwgMHgwMDAwLCAweDY4MmYsIDB4MDAwMCwKLQkweDY4MDgsIDB4YTA4NCwgMHhmZmRlLCAweDY4MGEsIDB4YWRlOCwgMHgwMDEwLCAweDIwOTEsIDB4ODAwMSwKLQkweDAwNzAsIDB4MWRlYywgMHgwMDc4LCAweDFkZGEsIDB4ODIxMSwgMHgwMDQwLCAweDFkZjMsIDB4MjBhOSwKLQkweDAxMDAsIDB4MDA3OCwgMHgxZGRhLCAweDEwNzgsIDB4MTkyYiwgMHgwMDdjLCAweDIwMDEsIDB4NTA2NywKLQkweDIwMDQsIDB4YTA4NCwgMHg4MDAwLCAweDAwNDAsIDB4MWY4YiwgMHg2MTE0LCAweDEwNzgsIDB4MjBjMiwKLQkweDY5MDAsIDB4YTE4NCwgMHgwMDAxLCAweDAwNDAsIDB4MWUxNywgMHg2MDI4LCAweGEwODQsIDB4MDBmZiwKLQkweDAwYzAsIDB4MWY4MywgMHg2ODAwLCAweGEwODQsIDB4MDAwMSwgMHgwMDQwLCAweDFmOGIsIDB4NjgwMywKLQkweDAwMDAsIDB4NjgwYiwgMHgwMDAwLCAweDY4MDcsIDB4MDAwMCwgMHgwMDc4LCAweDFmOTMsIDB4MjAxMSwKLQkweDAwMDEsIDB4NjAyMCwgMHhhMDg0LCAweDQwMDAsIDB4MDA0MCwgMHgxZTIwLCAweGEyOTUsIDB4MDAwMiwKLQkweDYwMjAsIDB4YTA4NCwgMHgwMTAwLCAweDAwNDAsIDB4MWUyNywgMHhhMjk1LCAweDAwMDgsIDB4NjAxYywKLQkweGEwODQsIDB4MDAwMiwgMHgwMDQwLCAweDFlMmUsIDB4YTI5NSwgMHgwMDA0LCAweDYwMmMsIDB4YTA4YywKLQkweDAwZmYsIDB4YTE4MiwgMHgwMDAyLCAweDAwNDgsIDB4MWY4ZiwgMHhhMTgyLCAweDAwMWIsIDB4MDBjOCwKLQkweDFmOGYsIDB4MDA0MCwgMHgxZjhmLCAweDY5MGUsIDB4NjAyYywgMHg4MDA3LCAweGEwOGMsIDB4MDBmZiwKLQkweGExODIsIDB4MDAwMiwgMHgwMDQ4LCAweDFmOGYsIDB4YTE4MiwgMHgwMDFiLCAweDAwYzgsIDB4MWY4ZiwKLQkweDAwNDAsIDB4MWY4ZiwgMHg2OTEyLCAweDYwMzAsIDB4YTAwNSwgMHgwMGMwLCAweDFlNTEsIDB4MjAwMSwKLQkweDAwMWUsIDB4ODAwMCwgMHg2ODE2LCAweDYwMjgsIDB4YTA4NCwgMHgwMGZmLCAweDAwNDAsIDB4MWY4YiwKLQkweDY4MDYsIDB4NjAyOCwgMHg4MDA3LCAweGEwODQsIDB4MDBmZiwgMHgwMDQwLCAweDFmOGIsIDB4NjgwYSwKLQkweDZhMDIsIDB4MDA3OCwgMHgxZjkzLCAweDIwMDEsIDB4NTA2NywgMHgyMDA0LCAweGEwODQsIDB4ODAwMCwKLQkweDAwNDAsIDB4MWY4YiwgMHg2MTE0LCAweDEwNzgsIDB4MjBjMiwgMHgyMDkxLCAweDgwMDAsIDB4NmEwNCwKLQkweDZiMDgsIDB4NjQxOCwgMHhhNDg0LCAweDAwMDMsIDB4MDA0MCwgMHgxZTg5LCAweDYxMjgsIDB4YTE4YywKLQkweDAwZmYsIDB4ODAwMSwgMHgwMGMwLCAweDFlODIsIDB4MjEwMCwgMHhhMjEwLCAweDAwNDgsIDB4MWVhZiwKLQkweDAwNzgsIDB4MWU4OSwgMHg4MDAxLCAweDAwYzAsIDB4MWVhZiwgMHgyMTAwLCAweGEyMTIsIDB4MDA0OCwKLQkweDFlYWYsIDB4YTQ4NCwgMHgwMDBjLCAweDAwNDAsIDB4MWVhMywgMHg2MTI4LCAweDgxMGYsIDB4YTE4YywKLQkweDAwZmYsIDB4YTA4MiwgMHgwMDA0LCAweDAwYzAsIDB4MWU5YiwgMHgyMTAwLCAweGEzMTgsIDB4MDA0OCwKLQkweDFlYWYsIDB4MDA3OCwgMHgxZWEzLCAweGEwODIsIDB4MDAwNCwgMHgwMGMwLCAweDFlYWYsIDB4MjEwMCwKLQkweGEzMWEsIDB4MDA0OCwgMHgxZWFmLCAweDYwMzAsIDB4YTAwNSwgMHgwMDQwLCAweDFlYTksIDB4ODAwMCwKLQkweDY4MTYsIDB4NmEwNiwgMHg2YjBhLCAweDIwOTEsIDB4ODAwMSwgMHgwMDc4LCAweDFmOTMsIDB4MjA5MSwKLQkweDgwMDEsIDB4MDA3OCwgMHgxZjhmLCAweDYxMTQsIDB4MTA3OCwgMHgyMGMyLCAweDIwOTEsIDB4ODAwMCwKLQkweDZiMDgsIDB4ODMxOCwgMHgwMDQ4LCAweDFlYzEsIDB4NmIwYSwgMHgyMDkxLCAweDgwMDEsIDB4MDA3OCwKLQkweDFmYTIsIDB4MjA5MSwgMHg4MDAxLCAweDAwNzgsIDB4MWY4ZiwgMHg2MDI0LCAweDgwMDcsIDB4YTA4NCwKLQkweDAwZmYsIDB4MDA0MCwgMHgxZWUzLCAweGEwODYsIDB4MDA4MCwgMHgwMGMwLCAweDFmMGIsIDB4MjBhOSwKLQkweDAwMDgsIDB4MjA2OSwgMHg3NDEwLCAweDIwOTEsIDB4ODAwMCwgMHg2ODAwLCAweGEwODQsIDB4ZmNmZiwKLQkweDY4MDIsIDB4YWRlOCwgMHgwMDA4LCAweDAwNzAsIDB4MWVkZiwgMHgwMDc4LCAweDFlZDUsIDB4MjA5MSwKLQkweDgwMDEsIDB4MDA3OCwgMHgxZjkzLCAweDYwMjgsIDB4YTAxNSwgMHgwMDQwLCAweDFmMGIsIDB4NjExNCwKLQkweDEwNzgsIDB4MjBjMiwgMHgwZDdlLCAweGFkZTgsIDB4MDAwNywgMHgyMDkxLCAweDgwMDAsIDB4NjgwMCwKLQkweGEwMGQsIDB4MDA0MCwgMHgxZjA4LCAweGEyMDYsIDB4MDA0MCwgMHgxZWY5LCAweDIxNjgsIDB4MDA3OCwKLQkweDFlZWYsIDB4MGM3ZSwgMHgyMTYwLCAweDYwMDAsIDB4NjgwMiwgMHgxMDc4LCAweDE5MmIsIDB4MGM3ZiwKLQkweDBkN2YsIDB4NjgwOCwgMHg4MDAwLCAweDY4MGEsIDB4MjA5MSwgMHg4MDAxLCAweDAwNzgsIDB4MWZhMiwKLQkweDIwOTEsIDB4ODAwMSwgMHgwZDdmLCAweDAwNzgsIDB4MWY4YiwgMHg2MTE0LCAweDEwNzgsIDB4MjBjMiwKLQkweDY4MDAsIDB4YTA4NCwgMHgwMDAxLCAweDAwNDAsIDB4MWY3YiwgMHgyMDkxLCAweDgwMDAsIDB4NmEwNCwKLQkweDgyMTAsIDB4MDA0OCwgMHgxZjIwLCAweDZhMDYsIDB4MjA5MSwgMHg4MDAxLCAweDAwNzgsIDB4MWZhMiwKLQkweDIwOTEsIDB4ODAwMSwgMHgwMDc4LCAweDFmOGYsIDB4MTA3OCwgMHgxYjM2LCAweDAwYzAsIDB4MWQ0OSwKLQkweDYxMTQsIDB4MTA3OCwgMHgyMGMyLCAweDYwYmUsIDB4NjkwMCwgMHhhMTg0LCAweDAwMDgsIDB4MDA0MCwKLQkweDFmMzUsIDB4NjAyMCwgMHhhMDg1LCAweDAxMDAsIDB4NjAyMiwgMHhhMTg0LCAweDAwMDEsIDB4MDA0MCwKLQkweDFmOGIsIDB4YTE4NCwgMHgwMTAwLCAweDAwYzAsIDB4MWY3NywgMHhhMTg0LCAweDAyMDAsIDB4MDBjMCwKLQkweDFmNzMsIDB4NjgxYywgMHhhMDA1LCAweDAwYzAsIDB4MWY3ZiwgMHg2MDA0LCAweGEwODQsIDB4MDBmZiwKLQkweGEwODYsIDB4MDAwZiwgMHgwMGMwLCAweDFmNGUsIDB4MTA3OCwgMHgyMGE1LCAweDc4ZGYsIDB4MDAwMCwKLQkweDYwMDQsIDB4ODAwNywgMHhhMDg0LCAweDAwZmYsIDB4NzhkMiwgMHg4MDAxLCAweDYwOWYsIDB4MDAwMCwKLQkweDAwNDAsIDB4MWY2MywgMHgxMDc4LCAweDFmYTYsIDB4MDA0MCwgMHgxZjYzLCAweDc4ZGMsIDB4YTA4NSwKLQkweDAxMDAsIDB4NzhkZSwgMHgwMDdjLCAweDc4ZDcsIDB4MDAwMCwgMHg3OGRiLCAweDAwMDAsIDB4NjAyNCwKLQkweGEwODQsIDB4ZmYwMCwgMHg2MDI2LCAweDEwNzgsIDB4MzlhYSwgMHgwMDQwLCAweDFjYzYsIDB4MTA3OCwKLQkweDFiNWIsIDB4MDA3OCwgMHgxY2M2LCAweDIwMDksIDB4MDAxNywgMHgwMDc4LCAweDFmOTUsIDB4MjAwOSwKLQkweDAwMGUsIDB4MDA3OCwgMHgxZjk1LCAweDIwMDksIDB4MDAwNywgMHgwMDc4LCAweDFmOTUsIDB4MjAwOSwKLQkweDAwMzUsIDB4MDA3OCwgMHgxZjk1LCAweDIwMDksIDB4MDAzZSwgMHgwMDc4LCAweDFmOTUsIDB4MjAwOSwKLQkweDAwMDQsIDB4MDA3OCwgMHgxZjk1LCAweDIwMDksIDB4MDAwNiwgMHgwMDc4LCAweDFmOTUsIDB4MjAwOSwKLQkweDAwMTYsIDB4MDA3OCwgMHgxZjk1LCAweDIwMDksIDB4MDAwMSwgMHg2MDI0LCAweGEwODQsIDB4ZmYwMCwKLQkweGExMDUsIDB4NjAyNiwgMHgyMDkxLCAweDgwMDAsIDB4MTA3OCwgMHgxYzQyLCAweDIwOTEsIDB4ODAwMSwKLQkweDAwNzgsIDB4MWNjNiwgMHgxMDc4LCAweDE5MmIsIDB4MDA3OCwgMHgxY2M2LCAweDc4ZDQsIDB4YTA2ZCwKLQkweDAwYzAsIDB4MWZiMSwgMHgyYzAwLCAweDc4ZDYsIDB4NzhkYSwgMHg2MDlmLCAweDAwMDAsIDB4MDA3OCwKLQkweDFmYmQsIDB4MmMwMCwgMHg2ODllLCAweDYwOWYsIDB4MDAwMCwgMHg3OGQ2LCAweDJkMDAsIDB4NjAwMiwKLQkweDc4ZDgsIDB4YWQwNiwgMHgwMGMwLCAweDFmYmQsIDB4NjAwMiwgMHg3OGQwLCAweDgwMDEsIDB4NzhkMiwKLQkweDAwYzAsIDB4MWZjOSwgMHg3OGRjLCAweGEwODQsIDB4ZmVmZiwgMHg3OGRlLCAweDc4ZDgsIDB4MjA2MCwKLQkweGEwMDYsIDB4MDA3YywgMHhhMDJlLCAweDI1MzAsIDB4NjExYywgMHg2MWEyLCAweGExODQsIDB4ZTFmZiwKLQkweDYwMWUsIDB4YTE4NCwgMHgwMDYwLCAweDAwNDAsIDB4MWZkOSwgMHgwZTdlLCAweDEwNzgsIDB4NDY3ZiwKLQkweDBlN2YsIDB4NjU5NiwgMHg2NWE2LCAweDY2OWEsIDB4NjZhYSwgMHg2MGFmLCAweDAwMDAsIDB4NjBiMywKLQkweDAwMDAsIDB4NjcxNCwgMHgxMDc4LCAweDE5NTYsIDB4MjA5MSwgMHg4MDAwLCAweDYwYTAsIDB4YTA4NCwKLQkweDgwMDAsIDB4MDBjMCwgMHgyMDAwLCAweDY4MDgsIDB4YTA4NCwgMHgwMDAxLCAweDAwNDAsIDB4MjAwMCwKLQkweDIwOTEsIDB4ODAwMSwgMHgxMDc4LCAweDE5YTMsIDB4MjA5MSwgMHg4MDAwLCAweDEwNzgsIDB4MWM0MiwKLQkweDIwOTEsIDB4ODAwMSwgMHg3OGQ3LCAweDAwMDAsIDB4NzhkYiwgMHgwMDAwLCAweDAwNzgsIDB4MjA3MiwKLQkweDYwMjQsIDB4YTA5NiwgMHgwMDAxLCAweDAwYzAsIDB4MjAwNywgMHg4MDAwLCAweDYwMjYsIDB4NmExMCwKLQkweDY4MTQsIDB4MjA5MSwgMHg4MDAxLCAweGEyMDIsIDB4MDA0OCwgMHgyMDE2LCAweDAwNDAsIDB4MjAxNiwKLQkweDIwMzksIDB4MDIwMCwgMHgxMDc4LCAweDIwNzMsIDB4MDA3OCwgMHgyMDcyLCAweDJjMDgsIDB4MjA5MSwKLQkweDgwMDAsIDB4NjBhMCwgMHhhMDg0LCAweDgwMDAsIDB4MDA0MCwgMHgyMDQzLCAweDY4MDAsIDB4YTA2NSwKLQkweDAwNDAsIDB4MjA0OCwgMHg2YTA0LCAweDBlN2UsIDB4MjA3MSwgMHg1MDQwLCAweDcwMDAsIDB4YTA4NCwKLQkweDAwMDEsIDB4MDA0MCwgMHgyMDNkLCAweDcwNDgsIDB4YTIwNiwgMHgwMGMwLCAweDIwM2QsIDB4NmIwNCwKLQkweDIzMWMsIDB4MjE2MCwgMHg2MzAyLCAweDIzMDAsIDB4YTAwNSwgMHgwMGMwLCAweDIwMzgsIDB4NjkwMiwKLQkweDIyNjAsIDB4NjEwMiwgMHgwZTdmLCAweDAwNzgsIDB4MjA0ZiwgMHgyMTYwLCAweDYyMDIsIDB4NjkwNiwKLQkweDBlN2YsIDB4MDA3OCwgMHgyMDRmLCAweDY4MDAsIDB4YTA2NSwgMHgwMDQwLCAweDIwNDgsIDB4NjEwMiwKLQkweDY5MDIsIDB4MDBjMCwgMHgyMDRjLCAweDY5MDYsIDB4MjE2MCwgMHg2MDAzLCAweDAwMDAsIDB4MjE2MCwKLQkweDYwYTAsIDB4YTA4NCwgMHg4MDAwLCAweDAwNDAsIDB4MjA1OSwgMHg2ODA4LCAweGEwODQsIDB4ZmZmYywKLQkweDY4MGEsIDB4NjgxMCwgMHg4MDAwLCAweDY4MTIsIDB4MjA5MSwgMHg4MDAxLCAweDY4MDgsIDB4YTA4YywKLQkweDAwNDAsIDB4MDA0MCwgMHgyMDY4LCAweGEwODYsIDB4MDA0MCwgMHg2ODBhLCAweDEwNzgsIDB4MTliNCwKLQkweDIwOTEsIDB4ODAwMCwgMHgxMDc4LCAweDIxYjEsIDB4MjA5MSwgMHg4MDAxLCAweDc4ZGIsIDB4MDAwMCwKLQkweDc4ZDcsIDB4MDAwMCwgMHgwMDdjLCAweDYwMDgsIDB4YTcwNSwgMHg2MDBhLCAweDIwOTEsIDB4ODAwMCwKLQkweDEwNzgsIDB4MWM0MiwgMHgyMDkxLCAweDgwMDEsIDB4NzhkOCwgMHhhMDY1LCAweDAwNDAsIDB4MjA4NiwKLQkweDYwOWMsIDB4NzhkYSwgMHg2MDlmLCAweDAwMDAsIDB4MDA3OCwgMHgyMDc2LCAweDc4ZDcsIDB4MDAwMCwKLQkweDc4ZGIsIDB4MDAwMCwgMHgwMDdjLCAweDc5OTAsIDB4Nzg5NCwgMHg4MDAwLCAweGExMGEsIDB4MDBjOCwKLQkweDIwOTIsIDB4YTAwNiwgMHg3ODk2LCAweDcwZDIsIDB4NzgwNCwgMHhhMDA1LCAweDAwNDAsIDB4MjBhMCwKLQkweDgwMDEsIDB4NzgwNiwgMHgwMGMwLCAweDIwYTAsIDB4MDA2OCwgMHgyMGEwLCAweDIwOTEsIDB4NDA4MCwKLQkweDAwN2MsIDB4MjAzOSwgMHgyMGI5LCAweDAwNzgsIDB4MjBhNywgMHgyMDM5LCAweDIwYmYsIDB4MjcwNCwKLQkweGEwMDUsIDB4MDA0MCwgMHgyMGI4LCAweGFjMDAsIDB4MjA2OCwgMHg2YjA4LCAweDZjMGMsIDB4NjkxMCwKLQkweDZhMTQsIDB4NjkwYSwgMHg2YTBlLCAweDZiMTIsIDB4NmMxNiwgMHg4NzM4LCAweDAwNzgsIDB4MjBhNywKLQkweDAwN2MsIDB4MDAwMywgMHgwMDA5LCAweDAwMGYsIDB4MDAxNSwgMHgwMDFiLCAweDAwMDAsIDB4MDAxNSwKLQkweDAwMWIsIDB4MDAwMCwgMHgwYzdlLCAweDEwNzgsIDB4M2IzMywgMHgyYzY4LCAweDBjN2YsIDB4MDA3YywKLQkweDAwMTAsIDB4MjEzOSwgMHgwMDY4LCAweDIxMzksIDB4MjAyOSwgMHgwMDAwLCAweDc4Y2IsIDB4MDAwMCwKLQkweDc4OGMsIDB4YTA2NSwgMHgwMDQwLCAweDIxMzIsIDB4MjAwOSwgMHg1MDc0LCAweDIxMDQsIDB4YTA4NCwKLQkweDAwMDEsIDB4MDA0MCwgMHgyMTAwLCAweDYwMDQsIDB4YTA4NiwgMHgwMTAzLCAweDAwYzAsIDB4MjEwMCwKLQkweDYwMTgsIDB4YTAwNSwgMHgwMGMwLCAweDIxMDAsIDB4NjAxNCwgMHhhMDA1LCAweDAwYzAsIDB4MjEwMCwKLQkweDBkN2UsIDB4MjA2OSwgMHgwMDAwLCAweDY4MTgsIDB4YTA4NCwgMHgwMDAxLCAweDAwYzAsIDB4MjBmZiwKLQkweDYwMGMsIDB4NzBjNiwgMHg2MDEwLCAweDcwY2EsIDB4NzBjMywgMHg4MDIwLCAweDY4MWIsIDB4MDAwMSwKLQkweDIwOTEsIDB4NDA4MCwgMHgwZDdmLCAweDEwNzgsIDB4MWM2OSwgMHgwMDc4LCAweDIxMzcsIDB4MGQ3ZiwKLQkweDEwNzgsIDB4MjEzYSwgMHgwMDQwLCAweDIxMzIsIDB4NjIwNCwgMHhhMjk0LCAweDAwZmYsIDB4YTI5NiwKLQkweDAwMDMsIDB4MDA0MCwgMHgyMTEyLCAweDYyMDQsIDB4YTI5NiwgMHgwMTEwLCAweDAwYzAsIDB4MjEyMCwKLQkweDc4Y2IsIDB4MDAwMSwgMHg2MjA0LCAweGEyOTQsIDB4ZmYwMCwgMHg4MjE3LCAweDgyMTEsIDB4MDA0MCwKLQkweDIxMjAsIDB4ODVmZiwgMHgwMGMwLCAweDIxMzIsIDB4ODIxMCwgMHhhMjAyLCAweDAwYzgsIDB4MjEzMiwKLQkweDA1N2UsIDB4MTA3OCwgMHgyMTQ5LCAweDA1N2YsIDB4MDA0MCwgMHgyMTJkLCAweDc4ZTAsIDB4YTA4NiwKLQkweDAwMDMsIDB4MDA0MCwgMHgyMTMyLCAweDAwNzgsIDB4MjEyMCwgMHg4NTI4LCAweDc4YzgsIDB4YTAwNSwKLQkweDAwNDAsIDB4MjBkMCwgMHg4NWZmLCAweDAwNDAsIDB4MjEzOSwgMHgyMDkxLCAweDQwODAsIDB4NzhiMCwKLQkweDcwZDYsIDB4MDA3YywgMHg3YmFjLCAweDc5YjAsIDB4NzBkNCwgMHhhMTAyLCAweDAwYzAsIDB4MjE0MywKLQkweDIzMDAsIDB4YTAwNSwgMHgwMDdjLCAweDAwNDgsIDB4MjE0NywgMHhhMzAyLCAweDAwN2MsIDB4ODAwMiwKLQkweDAwN2MsIDB4MjAwMSwgMHgwNGZkLCAweDIwMDQsIDB4YTA4MiwgMHgwMDA1LCAweDAwYzgsIDB4MjE2MywKLQkweDIwOTEsIDB4ODAwMCwgMHgyMDcxLCAweDAwMjAsIDB4NzAwNCwgMHhhMDA1LCAweDAwYzAsIDB4MjE5OCwKLQkweDcwMDgsIDB4NzIwOCwgMHhhMjA2LCAweDAwYzAsIDB4MjE5OCwgMHhhMjg2LCAweDAwMDgsIDB4MDBjMCwKLQkweDIxOTgsIDB4MjA3MSwgMHgwMDEwLCAweDEwNzgsIDB4MjE5ZCwgMHgyMDA5LCAweDAwMjAsIDB4NjAwNCwKLQkweGEwODYsIDB4MDEwMywgMHgwMGMwLCAweDIxNzIsIDB4NjAyOCwgMHhhMDA1LCAweDAwYzAsIDB4MjE3MiwKLQkweDIwMDksIDB4MDAwYywgMHgxMDc4LCAweDE5MDcsIDB4MDA0MCwgMHgyMThiLCAweDc4YzQsIDB4ODAwMCwKLQkweDc4YzYsIDB4YTA4NiwgMHgwMDAyLCAweDAwYzAsIDB4MjE5OCwgMHgyMDkxLCAweDgwMDAsIDB4NzhlMywKLQkweDAwMDMsIDB4NzhjNywgMHgwMDAwLCAweDc4Y2MsIDB4YTA4NSwgMHgwMzAwLCAweDc4Y2UsIDB4MjA5MSwKLQkweDgwMDEsIDB4MDA3OCwgMHgyMTk4LCAweDc4YzcsIDB4MDAwMCwgMHgxMDc4LCAweDFjNjksIDB4NzlhYywKLQkweDc4YjAsIDB4ODAwMCwgMHhhMTBhLCAweDAwYzgsIDB4MjE5NiwgMHhhMDA2LCAweDc4YjIsIDB4YTAwNiwKLQkweDIwNzEsIDB4MDAxMCwgMHgyMDkxLCAweDgwMDEsIDB4MDA3YywgMHg4MTA3LCAweDgwMDQsIDB4ODAwNCwKLQkweDdhYjgsIDB4N2JiNCwgMHg3Y2MwLCAweDdkYmMsIDB4YTIxMCwgMHhhMzk5LCAweDAwMDAsIDB4YTRhMSwKLQkweDAwMDAsIDB4YTVhOSwgMHgwMDAwLCAweDAwN2MsIDB4MjAwOSwgMHg1MDViLCAweDIwOTEsIDB4ODAwMCwKLQkweDIwMGEsIDB4MGY3ZSwgMHgwZTdlLCAweDIwNzEsIDB4NTA0MCwgMHg3MDAwLCAweGEwODYsIDB4MDAwMCwKLQkweDAwYzAsIDB4MjFjYiwgMHgyMDA5LCAweDUwMTIsIDB4MjEwNCwgMHhhMDA1LCAweDAwYzAsIDB4MjFjYiwKLQkweDIwNzksIDB4MDEwMCwgMHg3ODMwLCAweGEwODQsIDB4MDBjMCwgMHgwMGMwLCAweDIxY2IsIDB4MDAxOCwKLQkweDIxY2IsIDB4NzgxYiwgMHgwMDRiLCAweDBlN2YsIDB4MGY3ZiwgMHgwMDdjLCAweDBmN2UsIDB4MGU3ZSwKLQkweDIwNzEsIDB4NTA0MCwgMHgyMDkxLCAweDgwMDAsIDB4NzAwMCwgMHhhMDg2LCAweDAwMDAsIDB4MDBjMCwKLQkweDIxZTQsIDB4MjA3OSwgMHgwMTAwLCAweDc4MzAsIDB4YTA4NCwgMHgwMGMwLCAweDAwYzAsIDB4MjFlNCwKLQkweDAwMTgsIDB4MjFlNCwgMHg3ODFiLCAweDAwNGQsIDB4MjA5MSwgMHg4MDAxLCAweDBlN2YsIDB4MGY3ZiwKLQkweDAwN2MsIDB4MTI3ZSwgMHgyMDkxLCAweDIzMDAsIDB4MjA3MSwgMHg1MDQwLCAweDIwNzksIDB4MDEwMCwKLQkweDc4NGIsIDB4MDAwZiwgMHgwMDk4LCAweDIxZjcsIDB4NzgzOCwgMHgwMDc4LCAweDIxZjAsIDB4MjBhOSwKLQkweDAwNDAsIDB4NzgwMCwgMHhhMDgyLCAweDAwMDQsIDB4MDA0OCwgMHgyMjAwLCAweDIwYTksIDB4MDA2MCwKLQkweDc4OWIsIDB4MDAwMCwgMHg3OGFmLCAweDAwMDAsIDB4NzhhZiwgMHgwMDAwLCAweDAwNzAsIDB4MjIwYSwKLQkweDAwNzgsIDB4MjIwMiwgMHg3ODAwLCAweGEwODIsIDB4MDAwNCwgMHgwMDQ4LCAweDIyMTksIDB4NzBiNywKLQkweDAwOWIsIDB4MjAxOSwgMHg0ZGE0LCAweDEwNzgsIDB4MjI1NSwgMHg3MDJmLCAweDgwMDEsIDB4MDA3OCwKLQkweDIyMjUsIDB4NzBiNywgMHgwMDAwLCAweDIwMTksIDB4NGMxYywgMHgxMDc4LCAweDIyNTUsIDB4MjAxOSwKLQkweDRjNWIsIDB4MTA3OCwgMHgyMjU1LCAweDcwMmYsIDB4ODAwMCwgMHg3MDAzLCAweDAwMDAsIDB4MTA3OCwKLQkweDIzNWUsIDB4NzAwNCwgMHhhMDg0LCAweDAwMGYsIDB4MDE3ZSwgMHgyMDA5LCAweDA0ZmQsIDB4MjEwYywKLQkweGExOGEsIDB4MDAwNSwgMHgwMDQ4LCAweDIyM2EsIDB4MDAzOCwgMHgyMjQwLCAweGEwODUsIDB4NjI4MCwKLQkweDAwNzgsIDB4MjI0MiwgMHgwMDI4LCAweDIyNDAsIDB4YTA4NSwgMHg2MjgwLCAweDAwNzgsIDB4MjI0MiwKLQkweGEwODUsIDB4NjJjMCwgMHgwMTdmLCAweDc4MDYsIDB4NzgwZiwgMHhiMjA0LCAweDc4NDMsIDB4MDBkOCwKLQkweDc4NTMsIDB4MDA4MCwgMHg3ODBiLCAweDAwMDgsIDB4NzA0NywgMHgwMDA4LCAweDcwNTMsIDB4NTA3ZiwKLQkweDcwNGYsIDB4MDAwMCwgMHgxMjdmLCAweDIwMDAsIDB4MDA3YywgMHgxMzdlLCAweDE0N2UsIDB4MTU3ZSwKLQkweDA0N2UsIDB4MjBhMSwgMHgwMTJiLCAweDIzMDQsIDB4YTAwNSwgMHg3ODlhLCAweDAwNDAsIDB4MjI3NSwKLQkweDgzMTgsIDB4MjMyNCwgMHg4MzE4LCAweDIzOTgsIDB4MjRhOCwgMHhhNDg0LCAweGZmMDAsIDB4MDA0MCwKLQkweDIyNmQsIDB4YTQ4MiwgMHgwMTAwLCAweDIwYTksIDB4MDEwMCwgMHgyMDIwLCAweDUzYTYsIDB4YTAwNSwKLQkweDAwYzAsIDB4MjI2NCwgMHgzMzE4LCAweDAwNzgsIDB4MjI1YiwgMHgwNDdmLCAweDE1N2YsIDB4MTQ3ZiwKLQkweDEzN2YsIDB4MDA3YywgMHhhMThjLCAweDAwMGYsIDB4MjAxMSwgMHgwMTAxLCAweDIyMDQsIDB4YTA4NCwKLQkweGZmZjAsIDB4YTEwNSwgMHgyMDEyLCAweDEwNzgsIDB4MjM1ZSwgMHgwMDdjLCAweDIwMTEsIDB4MDEwMSwKLQkweDIwYTksIDB4MDAwOSwgMHg4MTBiLCAweDAwNzAsIDB4MjI4ZiwgMHgwMDc4LCAweDIyOGEsIDB4YTE4YywKLQkweDBlMDAsIDB4MjIwNCwgMHhhMDg0LCAweGYxZmYsIDB4YTEwNSwgMHgyMDEyLCAweDAwN2MsIDB4MjAwOSwKLQkweDAxMDEsIDB4MjBhOSwgMHgwMDA1LCAweDgyMTMsIDB4MDA3MCwgMHgyMmEwLCAweDAwNzgsIDB4MjI5YiwKLQkweGEyOTQsIDB4MDBlMCwgMHgyMTA0LCAweGEwODQsIDB4ZmYxZiwgMHhhMjA1LCAweDIwMGEsIDB4MDA3YywKLQkweDIwMTEsIDB4MDEwMSwgMHgyMGE5LCAweDAwMGMsIDB4ODEwYiwgMHgwMDcwLCAweDIyYjEsIDB4MDA3OCwKLQkweDIyYWMsIDB4YTE4YywgMHhmMDAwLCAweDIyMDQsIDB4YTA4NCwgMHgwZmZmLCAweGExMDUsIDB4MjAxMiwKLQkweDAwN2MsIDB4MjAxMSwgMHgwMTAyLCAweDIyMDQsIDB4YTA4NCwgMHhmZmNmLCAweGExMDUsIDB4MjAxMiwKLQkweDAwN2MsIDB4ODEwMywgMHg4MDAzLCAweGEwODAsIDB4MDAyMCwgMHgwYzdlLCAweDIwNjEsIDB4MDEwMCwKLQkweDYwOWEsIDB4NjJhYywgMHg2M2FjLCAweDBjN2YsIDB4MDA3YywgMHg4MTAzLCAweDgwMDMsIDB4YTA4MCwKLQkweDAwMjIsIDB4MGM3ZSwgMHgyMDYxLCAweDAxMDAsIDB4NjA5YSwgMHg2MGE0LCAweGEwODQsIDB4ZmZkZiwKLQkweDYwYWUsIDB4MGM3ZiwgMHgwMDdjLCAweDgxMDMsIDB4ODAwMywgMHhhMDgwLCAweDAwMjIsIDB4MGM3ZSwKLQkweDIwNjEsIDB4MDEwMCwgMHg2MDlhLCAweDYwYTQsIDB4YTA4NSwgMHgwMDIwLCAweDYwYWUsIDB4MGM3ZiwKLQkweDAwN2MsIDB4ODEwMywgMHg4MDAzLCAweGEwODAsIDB4MDAyMCwgMHgwYzdlLCAweDIwNjEsIDB4MDEwMCwKLQkweDYwOWEsIDB4NjBhNCwgMHg2MmFlLCAweDIwMTAsIDB4NjBhNCwgMHg2M2FlLCAweDIwMTgsIDB4MGM3ZiwKLQkweDAwN2MsIDB4MjA5MSwgMHg4MDAwLCAweDBjN2UsIDB4MGU3ZSwgMHg2ODE4LCAweGEwMDUsIDB4MDA0MCwKLQkweDIzM2MsIDB4MjA2MSwgMHg3NDAwLCAweDEwNzgsIDB4MjM0NCwgMHgwMDQwLCAweDIzMjgsIDB4MjBhOSwKLQkweDAwMDAsIDB4MjA2MSwgMHg3MzAwLCAweDBjN2UsIDB4MTA3OCwgMHgyMzQ0LCAweDAwNDAsIDB4MjMxOCwKLQkweDBjN2YsIDB4OGM2MCwgMHgwMDcwLCAweDIzMTYsIDB4MDA3OCwgMHgyMzBiLCAweDAwNzgsIDB4MjMzYywKLQkweDAwN2YsIDB4YTA4MiwgMHg3MzAwLCAweDIwNzEsIDB4NTA0MCwgMHg3MDg2LCAweDcxODIsIDB4MjAwMSwKLQkweDAwMDQsIDB4NzA2ZSwgMHg3MDkzLCAweDAwMGYsIDB4MTA3OCwgMHgyMWFjLCAweDAwNzgsIDB4MjMzOCwKLQkweDYwYzAsIDB4YTAwNSwgMHgwMGMwLCAweDIzM2MsIDB4MjA3MSwgMHg1MDQwLCAweDcxODIsIDB4MmMwMCwKLQkweDcwOGEsIDB4MjAwMSwgMHgwMDA2LCAweDcwNmUsIDB4NzA5MywgMHgwMDBmLCAweDEwNzgsIDB4MjFhYywKLQkweDIwMDEsIDB4MDAwMCwgMHgwMDc4LCAweDIzM2UsIDB4MjAwMSwgMHgwMDAxLCAweDIwOTEsIDB4ODAwMSwKLQkweGEwMDUsIDB4MGU3ZiwgMHgwYzdmLCAweDAwN2MsIDB4MmMwNCwgMHhhMDA1LCAweDAwNDAsIDB4MjM1YiwKLQkweDIwNjAsIDB4NjAwYywgMHhhMzA2LCAweDAwYzAsIDB4MjM1OCwgMHg2MDEwLCAweGEyMDYsIDB4MDBjMCwKLQkweDIzNTgsIDB4NjAxNCwgMHhhMTA2LCAweDAwYzAsIDB4MjM1OCwgMHhhMDA2LCAweDAwNzgsIDB4MjM1ZCwKLQkweDYwMDAsIDB4MDA3OCwgMHgyMzQ1LCAweGEwODUsIDB4MDAwMSwgMHgwMDdjLCAweDIwMTEsIDB4NTA0MSwKLQkweDIyMGMsIDB4YTE4YywgMHgwMDBmLCAweDIwMTEsIDB4MDEzYiwgMHgyMjA0LCAweGEwODQsIDB4MDEwMCwKLQkweDAwNDAsIDB4MjM3NCwgMHgyMDIxLCAweGZmMDQsIDB4MjEyMiwgMHg4MTBiLCAweDgxMGIsIDB4ODEwYiwKLQkweDgxMGIsIDB4YTE4ZCwgMHgwZjAwLCAweDIxMDQsIDB4MDA3YywgMHgwZTdlLCAweDY4ZTQsIDB4YTA4YywKLQkweDAwMjAsIDB4MDA0MCwgMHgyM2M4LCAweGEwODQsIDB4MDAwNiwgMHgwMGMwLCAweDIzYzgsIDB4NjAxNCwKLQkweDgwMDcsIDB4YTA4NCwgMHgwMDBmLCAweDgwMDMsIDB4ODAwMywgMHg4MDAzLCAweGEwZjAsIDB4NTI4MCwKLQkweDcwMDQsIDB4YTA4NCwgMHgwMDBhLCAweDAwYzAsIDB4MjNjOCwgMHg3MTA4LCAweGExOTQsIDB4ZmYwMCwKLQkweDAwNDAsIDB4MjNjOCwgMHhhMThjLCAweDAwZmYsIDB4MjAwMSwgMHgwMDBjLCAweGExMDYsIDB4MDA0MCwKLQkweDIzYWYsIDB4MjAwMSwgMHgwMDEyLCAweGExMDYsIDB4MDA0MCwgMHgyM2IzLCAweDIwMDEsIDB4MDAxNCwKLQkweGExMDYsIDB4MDA0MCwgMHgyM2I3LCAweDIwMDEsIDB4MDAxOSwgMHhhMTA2LCAweDAwNDAsIDB4MjNiYiwKLQkweDIwMDEsIDB4MDAzMiwgMHhhMTA2LCAweDAwNDAsIDB4MjNiZiwgMHgwMDc4LCAweDIzYzMsIDB4MjAwOSwKLQkweDAwMTIsIDB4MDA3OCwgMHgyM2M1LCAweDIwMDksIDB4MDAxNCwgMHgwMDc4LCAweDIzYzUsIDB4MjAwOSwKLQkweDAwMTksIDB4MDA3OCwgMHgyM2M1LCAweDIwMDksIDB4MDAyMCwgMHgwMDc4LCAweDIzYzUsIDB4MjAwOSwKLQkweDAwM2YsIDB4MDA3OCwgMHgyM2M1LCAweDIwMTEsIDB4MDAwMCwgMHgyMTAwLCAweGEyMDUsIDB4NzAwYSwKLQkweDBlN2YsIDB4MDA3YywgMHgwMDY4LCAweDIzY2EsIDB4MjA5MSwgMHg4MDAwLCAweDIwNzEsIDB4MDAwMCwKLQkweDAwN2UsIDB4NzAxOCwgMHhhMDg0LCAweDAwMDEsIDB4MDBjMCwgMHgyM2QxLCAweDAwN2YsIDB4MjA3MSwKLQkweDAwMTAsIDB4NzBjYSwgMHgwMDdmLCAweDcwYzYsIDB4NzBjMywgMHg4MDAyLCAweDcwZGIsIDB4MDczZiwKLQkweDcwZGYsIDB4MDAwMCwgMHgyMDcxLCAweDAwMDAsIDB4NzAxYiwgMHgwMDAxLCAweDIwOTEsIDB4NDA4MCwKLQkweDAwNzgsIDB4MjNlOCwgMHgxMDdlLCAweDAwN2UsIDB4MTI3ZSwgMHgyMDkxLCAweDIzMDAsIDB4N2YzYywKLQkweDdlNTgsIDB4N2MzMCwgMHg3ZDM4LCAweDc3YzIsIDB4NzRjNiwgMHg3NmNhLCAweDc1Y2UsIDB4YTU5NCwKLQkweDAwM2YsIDB4YTQ5YywgMHgwMDAzLCAweGE0ODQsIDB4MDAwZiwgMHgwMDc5LCAweDIzZmYsIDB4MjQxMSwKLQkweDI0MTEsIDB4MjQxMSwgMHgyNzRiLCAweDM5MDcsIDB4MjQwZiwgMHgyNDQwLCAweDI0NGEsIDB4MjQwZiwKLQkweDI0MGYsIDB4MjQwZiwgMHgyNDBmLCAweDI0MGYsIDB4MjQwZiwgMHgyNDBmLCAweDI0MGYsIDB4MTA3OCwKLQkweDIzY2EsIDB4ODUwNywgMHhhMDg0LCAweDAwMWYsIDB4MDA3OSwgMHgyNDE2LCAweDI0NTQsIDB4Mjc0YiwKLQkweDI5MDUsIDB4MmEwMiwgMHgyYTJhLCAweDJjYzMsIDB4MmY2ZSwgMHgyZmIxLCAweDJmZmMsIDB4MzA4MSwKLQkweDMxMzksIDB4MzFlMiwgMHgyNDQwLCAweDI4MjcsIDB4MmY0MywgMHgyNDM2LCAweDNjNzgsIDB4M2M5OCwKLQkweDNlNWUsIDB4M2U2YSwgMHgzZjNmLCAweDI0MzYsIDB4MjQzNiwgMHg0MDEyLCAweDQwMTYsIDB4M2M3NiwKLQkweDI0MzYsIDB4M2RjOSwgMHgyNDM2LCAweDNiNTYsIDB4MjQ0YSwgMHgyNDM2LCAweDEwNzgsIDB4MjNjYSwKLQkweDAwMTgsIDB4MjNlZiwgMHgxMjdmLCAweDIwOTEsIDB4ODAwMSwgMHgwMDdmLCAweDEwN2YsIDB4MDA3YywKLQkweDIwMTksIDB4NGNmZCwgMHgxMDc4LCAweDIyNTUsIDB4NzAyZiwgMHgwMDAxLCAweDc4MWIsIDB4MDA0ZiwKLQkweDAwNzgsIDB4MjQzOCwgMHgyMDE5LCAweDRjNWIsIDB4MTA3OCwgMHgyMjU1LCAweDcwMmYsIDB4ODAwMCwKLQkweDc4MWIsIDB4MDBkNSwgMHgwMDc4LCAweDI0MzgsIDB4NzI0MiwgMHgyMDA5LCAweDUwMGYsIDB4MjAwYiwKLQkweDAwMDAsIDB4YTU4NCwgMHgwMDAxLCAweDAwYzAsIDB4M2I2YSwgMHgwMDQwLCAweDI0NzEsIDB4MTA3OCwKLQkweDIzY2EsIDB4NzAwMywgMHgwMDAwLCAweDcwNGIsIDB4MDAwMCwgMHg3MDQzLCAweDAwMDAsIDB4NzAzNywKLQkweDAwMDAsIDB4MTA3OCwgMHgzOGRlLCAweDAwMTgsIDB4MjNlZiwgMHgyMDA5LCAweDUwMGYsIDB4MjAwYiwKLQkweDAwMDAsIDB4NzA2OCwgMHhhMDA1LCAweDAwYzAsIDB4MjUzYywgMHg3MDZjLCAweGEwODQsIDB4MDAwNywKLQkweDAwNzksIDB4MjQ3YSwgMHgyNTczLCAweDI0ODIsIDB4MjQ4ZSwgMHgyNGFiLCAweDI0Y2QsIDB4MjUxYSwKLQkweDI0ZjMsIDB4MjQ4MiwgMHgxMDc4LCAweDM4YzYsIDB4MjAwOSwgMHgwMDQ4LCAweDEwNzgsIDB4MmUwZiwKLQkweDAwYzAsIDB4MjQ4YywgMHg3MDAzLCAweDAwMDQsIDB4MDA3OCwgMHgyNDM4LCAweDEwNzgsIDB4MzhjNiwKLQkweDAwYzAsIDB4MjRhOSwgMHg3MDgwLCAweDgwMDcsIDB4Nzg4MiwgMHg3ODliLCAweDAwMTAsIDB4NzhhYiwKLQkweDAwMGMsIDB4Nzg5YiwgMHgwMDYwLCAweDc4YWIsIDB4MDAwMSwgMHg3ODViLCAweDAwMDQsIDB4MjAwOSwKLQkweDAwZTUsIDB4MTA3OCwgMHgyZTAzLCAweDAwYzAsIDB4MjRhOSwgMHg3MDAzLCAweDAwMDQsIDB4NzA5MywKLQkweDAwMGYsIDB4MDA3OCwgMHgyNDM4LCAweDEwNzgsIDB4MzhjNiwgMHgwMGMwLCAweDI0Y2IsIDB4NzE4MCwKLQkweDgxMDcsIDB4Nzg4MiwgMHg3ODliLCAweDAwMTAsIDB4YTE4YywgMHgwMDFmLCAweGExOGQsIDB4MDBjMCwKLQkweDc5YWEsIDB4NzhhYiwgMHgwMDA2LCAweDc4OWIsIDB4MDA2MCwgMHg3OGFiLCAweDAwMDIsIDB4Nzg1YiwKLQkweDAwMDQsIDB4MjAwOSwgMHgwMGU1LCAweDEwNzgsIDB4MmUwMywgMHgwMGMwLCAweDI0Y2IsIDB4NzAwMywKLQkweDAwMDQsIDB4NzA5MywgMHgwMDBmLCAweDAwNzgsIDB4MjQzOCwgMHgxMDc4LCAweDM4YzYsIDB4MDBjMCwKLQkweDI0ZjEsIDB4NzE4MCwgMHg4MTA3LCAweDc4ODIsIDB4Nzg5YiwgMHgwMDEwLCAweGExOGMsIDB4MDAxZiwKLQkweGExOGQsIDB4MDBjMCwgMHg3OWFhLCAweDc4YWIsIDB4MDAyMCwgMHg3MTg0LCAweDc5YWEsIDB4NzhhYiwKLQkweDAwMGQsIDB4Nzg5YiwgMHgwMDYwLCAweDc4YWIsIDB4MDAwNCwgMHg3ODViLCAweDAwMDQsIDB4MjAwOSwKLQkweDAwZTUsIDB4MTA3OCwgMHgyZTAzLCAweDAwYzAsIDB4MjRmMSwgMHg3MDAzLCAweDAwMDQsIDB4NzA5MywKLQkweDAwMGYsIDB4MDA3OCwgMHgyNDM4LCAweDEwNzgsIDB4MzhjNiwgMHgwMGMwLCAweDI1MTgsIDB4NzE4MCwKLQkweDgxMDcsIDB4Nzg4MiwgMHg3ODliLCAweDAwMTAsIDB4YTE4YywgMHgwMDFmLCAweGExOGQsIDB4MDBjMCwKLQkweDc5YWEsIDB4NzhhYiwgMHgwMDA2LCAweDc4OWIsIDB4MDA2MCwgMHg3OGFiLCAweDAwMDIsIDB4Nzg1YiwKLQkweDAwMDQsIDB4MjAwOSwgMHgwMGU1LCAweDEwNzgsIDB4MmUwMywgMHgwMGMwLCAweDI1MTgsIDB4NzA4OCwKLQkweDcwOGIsIDB4MDAwMCwgMHgyMDY4LCAweDcwNGEsIDB4NzAwMywgMHgwMDAyLCAweDcwOTMsIDB4MDAwZiwKLQkweDAwNzgsIDB4MjQzOCwgMHgxMDc4LCAweDM4YzYsIDB4MDBjMCwgMHgyNDM4LCAweDcwODgsIDB4MjA2OCwKLQkweDZmMTQsIDB4MTA3OCwgMHgzN2JkLCAweDJjNTAsIDB4MTA3OCwgMHgzOTc4LCAweDc4OWIsIDB4MDAxMCwKLQkweDY4MTQsIDB4YTA4NCwgMHgwMDFmLCAweGEwODUsIDB4MDA4MCwgMHg3OGFhLCAweDZlMWMsIDB4MjA0MSwKLQkweDAwMDEsIDB4NzA4YywgMHhhMDg0LCAweDA0MDAsIDB4MjAwMSwgMHgwMDA0LCAweDAwNDAsIDB4MjUzYSwKLQkweDIwMDEsIDB4MDAwNiwgMHgwMDc4LCAweDI2NWIsIDB4MTA3OCwgMHgzOGM2LCAweDAwYzAsIDB4MjQzOCwKLQkweDc4OWIsIDB4MDAxMCwgMHg3MDY4LCAweDIwNjgsIDB4NmYxNCwgMHgxMDc4LCAweDM3YmQsIDB4MmM1MCwKLQkweDEwNzgsIDB4Mzk3OCwgMHg2MDA4LCAweGEwODUsIDB4MDAxMCwgMHg2MDBhLCAweDY4MjQsIDB4YTAwNSwKLQkweDAwNDAsIDB4MjU1YSwgMHhhMDgyLCAweDAwMDYsIDB4MDA0OCwgMHgyNTU4LCAweDAwNzgsIDB4MjU1YSwKLQkweDY4MjcsIDB4MDAwNSwgMHg2YjE0LCAweGEzOWMsIDB4MDAxZiwgMHhhMzlkLCAweDAwYzAsIDB4NzA1OCwKLQkweGEwODQsIDB4ODAwMCwgMHgwMDQwLCAweDI1NjgsIDB4YTY4NCwgMHgwMDAxLCAweDAwNDAsIDB4MjU2YSwKLQkweGEzOWMsIDB4ZmZiZiwgMHg3YmFhLCAweDIwMzEsIDB4MDAyMCwgMHgyMDQxLCAweDAwMDEsIDB4MjAwMSwKLQkweDAwMDMsIDB4MDA3OCwgMHgyNjViLCAweDAwMTgsIDB4MjNlZiwgMHg3NDRjLCAweGE0ODUsIDB4MDAwMCwKLQkweDAwNDAsIDB4MjU4ZCwgMHhhMDgwLCAweDUwODAsIDB4MjAzMCwgMHg3MTUwLCAweDgxMDgsIDB4YTEyYSwKLQkweDAwNDgsIDB4MjU4NCwgMHgyMDA5LCAweDUwODAsIDB4MjE2NCwgMHg2NTA0LCAweDg1ZmYsIDB4MDBjMCwKLQkweDI1OWUsIDB4ODQyMSwgMHgwMGMwLCAweDI1N2UsIDB4NzE1MiwgMHg3MDAzLCAweDAwMDAsIDB4NzA0YiwKLQkweDAwMDAsIDB4NzA0MCwgMHhhMDA1LCAweDAwNDAsIDB4M2I2YSwgMHgwMDc4LCAweDI0MzgsIDB4NzY0YywKLQkweGE2YjAsIDB4NTA4MCwgMHg3MTUwLCAweDI2MDAsIDB4MDA3OCwgMHgyNTg5LCAweDcxNTIsIDB4MjU2OCwKLQkweDI1NTgsIDB4NzU0YSwgMHgyYzUwLCAweDYwMzQsIDB4YTA4NSwgMHgwMDAwLCAweDAwYzAsIDB4MjU5YiwKLQkweDY3MDgsIDB4NzczYSwgMHhhNzg0LCAweDAzM2YsIDB4MDA0MCwgMHgyNWQ0LCAweGE3ODQsIDB4MDAyMSwKLQkweDAwYzAsIDB4MjU5YiwgMHhhNzg0LCAweDAwMDIsIDB4MDA0MCwgMHgyNWJkLCAweGE3ODQsIDB4MDAwNCwKLQkweDAwNDAsIDB4MjU5YiwgMHhhN2JjLCAweGZmZmIsIDB4NjcwYSwgMHhhNzg0LCAweDAwMDgsIDB4MDBjMCwKLQkweDI1OWIsIDB4YTc4NCwgMHgwMDEwLCAweDAwYzAsIDB4MjU5YiwgMHhhNzg0LCAweDAyMDAsIDB4MDBjMCwKLQkweDI1OWIsIDB4YTc4NCwgMHgwMTAwLCAweDAwNDAsIDB4MjVkNCwgMHg2MDE4LCAweGEwMDUsIDB4MDBjMCwKLQkweDI1OWIsIDB4YTdiYywgMHhmZWZmLCAweDY3MGEsIDB4NjgyMywgMHgwMDAwLCAweDZlMWMsIDB4YTY4NCwKLQkweDAwMGUsIDB4NjExOCwgMHgwMDQwLCAweDI1ZTQsIDB4NjAxYywgMHhhMTAyLCAweDAwNDgsIDB4MjVlNywKLQkweDAwNDAsIDB4MjVlNywgMHgwMDc4LCAweDI1OTcsIDB4ODFmZiwgMHgwMGMwLCAweDI1OTcsIDB4NjhjMywKLQkweDAwMDAsIDB4YTc4NCwgMHgwMDgwLCAweDAwYzAsIDB4MjVlZiwgMHg3MDBjLCAweDYwMjIsIDB4YTdiYywKLQkweGZmN2YsIDB4NjcwYSwgMHgxMDc4LCAweDM5NzgsIDB4MDAxOCwgMHgyM2VmLCAweDc4OWIsIDB4MDAxMCwKLQkweGEwNDYsIDB4MTA3OCwgMHgzOGM2LCAweDAwYzAsIDB4MjQzOCwgMHg2YjE0LCAweGEzOWMsIDB4MDAxZiwKLQkweGEzOWQsIDB4MDBjMCwgMHg3MDU4LCAweGEwODQsIDB4ODAwMCwgMHgwMDQwLCAweDI2MGIsIDB4YTY4NCwKLQkweDAwMDEsIDB4MDA0MCwgMHgyNjBkLCAweGEzOWMsIDB4ZmZiZiwgMHhhNjg0LCAweDAwMTAsIDB4MDA0MCwKLQkweDI2MTMsIDB4YTM5ZCwgMHgwMDIwLCAweDdiYWEsIDB4ODg0MCwgMHhhNjg0LCAweDAwMGUsIDB4MDBjMCwKLQkweDI2MWUsIDB4YTdiZCwgMHgwMDEwLCAweDY3MGEsIDB4MDA3OCwgMHgyNjU5LCAweDcxNTgsIDB4YTE4YywKLQkweDA4MDAsIDB4MDA0MCwgMHgzM2Q3LCAweDIwMTEsIDB4MDAyMCwgMHhhNjg0LCAweDAwMDgsIDB4MDBjMCwKLQkweDI2MmYsIDB4ODIxMCwgMHhhNjg0LCAweDAwMDIsIDB4MDBjMCwgMHgyNjJmLCAweDgyMTAsIDB4N2FhYSwKLQkweDg4NDAsIDB4MTA3OCwgMHgzOGRlLCAweDZhMTQsIDB4NjEwYywgMHg4MTA4LCAweGExOGMsIDB4MDBmZiwKLQkweGExZTAsIDB4NzMwMCwgMHgyYzY0LCAweDhjZmYsIDB4MDA0MCwgMHgyNjUwLCAweDYwMTQsIDB4YTIwNiwKLQkweDAwYzAsIDB4MjYzYSwgMHg2MGI4LCAweDgwMDEsIDB4NjBiYSwgMHgwMGMwLCAweDI2MzUsIDB4MGM3ZSwKLQkweDJhNjAsIDB4NjAwOCwgMHhhMDg1LCAweDAxMDAsIDB4NjAwYSwgMHgwYzdmLCAweDAwNzgsIDB4MjU3MywKLQkweDEwNzgsIDB4MzhjNiwgMHgwMGMwLCAweDI0MzgsIDB4MmE2MCwgMHg2MTBlLCAweDc5YWEsIDB4ODg0MCwKLQkweDcxMzIsIDB4MjAwMSwgMHgwMDAxLCAweDAwN2UsIDB4NzE1YywgMHhhMTg0LCAweDAwMTgsIDB4MDA0MCwKLQkweDI2NzYsIDB4YTE4NCwgMHgwMDEwLCAweDAwNDAsIDB4MjY2OSwgMHgxMDc4LCAweDM1ZDYsIDB4MDBjMCwKLQkweDI2OTksIDB4YTE4NCwgMHgwMDA4LCAweDAwNDAsIDB4MjY3NiwgMHg2OWEwLCAweGExODQsIDB4MDYwMCwKLQkweDAwYzAsIDB4MjY3NiwgMHgxMDc4LCAweDM0YzcsIDB4MDA3OCwgMHgyNjk5LCAweDY5YTAsIDB4YTE4NCwKLQkweDA4MDAsIDB4MDA0MCwgMHgyNjhkLCAweDBjN2UsIDB4MDI3ZSwgMHgyOTYwLCAweDYwMDAsIDB4YTA4NSwKLQkweDIwMDAsIDB4NjAwMiwgMHg2MTA0LCAweGExOGQsIDB4MDAxMCwgMHg2MTA2LCAweDAyN2YsIDB4MGM3ZiwKLQkweDEwNzgsIDB4MzVkNiwgMHgwMGMwLCAweDI2OTksIDB4NjlhMCwgMHhhMTg0LCAweDAyMDAsIDB4MDA0MCwKLQkweDI2OTUsIDB4MTA3OCwgMHgzNTE2LCAweDAwNzgsIDB4MjY5OSwgMHhhMTg0LCAweDA0MDAsIDB4MDBjMCwKLQkweDI2NzIsIDB4NjlhMCwgMHhhMTg0LCAweDEwMDAsIDB4MDA0MCwgMHgyNmE0LCAweDY5MTQsIDB4YTE4YywKLQkweGZmMDAsIDB4ODEwZiwgMHgxMDc4LCAweDIyY2QsIDB4MDA3ZiwgMHg3MDAyLCAweGE2OGMsIDB4MDBlMCwKLQkweGE2ODQsIDB4MDA2MCwgMHgwMDQwLCAweDI2YjIsIDB4YTA4NiwgMHgwMDYwLCAweDAwYzAsIDB4MjZiMiwKLQkweGExOGQsIDB4NDAwMCwgMHg4OGZmLCAweDAwNDAsIDB4MjZiNywgMHhhMThkLCAweDAwMDQsIDB4Nzk1YSwKLQkweDY5YjYsIDB4Nzg5YiwgMHgwMDYwLCAweDI4MDAsIDB4NzhhYSwgMHg3ODliLCAweDAwNjEsIDB4NjgxOCwKLQkweGEwOGQsIDB4ODAwMCwgMHhhMDg0LCAweDdmZmYsIDB4NjkxYSwgMHhhNjhjLCAweDAwODAsIDB4MDA0MCwKLQkweDI2ZDYsIDB4NzA5NywgMHgwMDAwLCAweGEwOGEsIDB4MDAwZCwgMHgwMDUwLCAweDI2ZDQsIDB4YTA4YSwKLQkweDAwMGMsIDB4NzE5NiwgMHgyMDAxLCAweDAwMGMsIDB4ODAwYywgMHg3MTlhLCAweDc4YWEsIDB4ODAwOCwKLQkweDgxMGMsIDB4MDA0MCwgMHgzM2RkLCAweGExOGMsIDB4MDBmOCwgMHgwMGMwLCAweDMzZGQsIDB4MTU3ZSwKLQkweDEzN2UsIDB4MTQ3ZSwgMHgyMGExLCAweDAxMmIsIDB4Nzg5YiwgMHgwMDAwLCAweDgwMDAsIDB4ODBhYywKLQkweGFkODAsIDB4MDAwYiwgMHgyMDk4LCAweDUzYTYsIDB4MTQ3ZiwgMHgxMzdmLCAweDE1N2YsIDB4NjgxNCwKLQkweDgwMDcsIDB4Nzg4MiwgMHg2ZDk0LCAweDdkZDYsIDB4N2RkZSwgMHg2ZTk4LCAweDdlZDIsIDB4N2VkYSwKLQkweDEwNzgsIDB4MzhjNiwgMHgwMGMwLCAweDI3MGQsIDB4NzAyYywgMHg4MDAzLCAweDAwNDgsIDB4MjcwNiwKLQkweDIwMTksIDB4NGM1YiwgMHgxMDc4LCAweDIyNTUsIDB4NzAyZiwgMHg4MDAwLCAweDc4MzAsIDB4YTA4NCwKLQkweDAwYzAsIDB4MDBjMCwgMHgyNzBkLCAweDAwOTgsIDB4MjcxNSwgMHg2MDA4LCAweGEwODQsIDB4ZmZlZiwKLQkweDYwMGEsIDB4MTA3OCwgMHgzOGRlLCAweDAwNzgsIDB4MjQ2MSwgMHg3MjAwLCAweGEyODQsIDB4MDAwNywKLQkweGEwODYsIDB4MDAwMSwgMHgwMGMwLCAweDI3MjIsIDB4NzgxYiwgMHgwMDRmLCAweDEwNzgsIDB4MzhkZSwKLQkweDAwNzgsIDB4MjczMywgMHg2YWI0LCAweGEyOTUsIDB4MjAwMCwgMHg3YTVhLCAweDc4MWIsIDB4MDA0ZiwKLQkweDEwNzgsIDB4MzhkZSwgMHg3MjAwLCAweDI1MDAsIDB4YTYwNSwgMHgwMDQwLCAweDI3MzMsIDB4YTI4NCwKLQkweDAwMDcsIDB4MTA3OSwgMHgyNzQxLCAweGFkODAsIDB4MDAwOSwgMHg3MDM2LCAweGEyODQsIDB4MDAwNywKLQkweGEwODYsIDB4MDAwMSwgMHgwMGMwLCAweDI0MzgsIDB4NjAxOCwgMHg4MDAwLCAweDYwMWEsIDB4MDA3OCwKLQkweDI0MzgsIDB4Mjc0OSwgMHg0OGY3LCAweDQ4ZjcsIDB4NDhlNiwgMHg0OGY3LCAweDI3NDksIDB4NDhlNiwKLQkweDI3NDksIDB4MTA3OCwgMHgyM2NhLCAweDEwNzgsIDB4MzhjNiwgMHgwZjdlLCAweDIwNzksIDB4NTAwMCwKLQkweDc4Y2MsIDB4MGY3ZiwgMHhhMDg0LCAweDAwMDEsIDB4MDA0MCwgMHgyNzZmLCAweDcwNmMsIDB4YTA4NiwKLQkweDAwMDEsIDB4MDBjMCwgMHgyNzVlLCAweDcwNmUsIDB4MDA3OCwgMHgyODAyLCAweDcwNmMsIDB4YTA4NiwKLQkweDAwMDUsIDB4MDBjMCwgMHgyNzZkLCAweDcwODgsIDB4MjA2OCwgMHg2ODFiLCAweDAwMDQsIDB4NjgxNywKLQkweDAwMDAsIDB4NjgyMCwgMHhhMDg1LCAweDAwMDgsIDB4NjgyMiwgMHg3MDZmLCAweDAwMDAsIDB4MjAxMSwKLQkweDAwMDQsIDB4NzE2YywgMHhhMTg2LCAweDAwMDEsIDB4MDA0MCwgMHgyNzkwLCAweGExODYsIDB4MDAwNywKLQkweDAwYzAsIDB4Mjc4MCwgMHgyMDA5LCAweDUwMzgsIDB4MjAwYiwgMHgwMDA1LCAweDAwNzgsIDB4Mjc5MCwKLQkweDIwMDksIDB4NTAxMywgMHgyMTA0LCAweDIwMDksIDB4NTAxMiwgMHgyMDBhLCAweDIwMDksIDB4NTAzOCwKLQkweDIwMGIsIDB4MDAwMSwgMHg3MDZmLCAweDAwMDAsIDB4NzA3MywgMHgwMDAxLCAweDAwNzgsIDB4Mjc5MiwKLQkweDcwNmYsIDB4MDAwMCwgMHgxMDc4LCAweDQ2MzMsIDB4MTU3ZSwgMHgyMGE5LCAweDAwMTAsIDB4MjAzOSwKLQkweDAwMDAsIDB4MTA3OCwgMHgzNmIwLCAweGE3YjgsIDB4MDEwMCwgMHgwMDcwLCAweDI3YTEsIDB4MDA3OCwKLQkweDI3OTksIDB4MTU3ZiwgMHg3MDAwLCAweDAwNzksIDB4MjdhNSwgMHgyN2QzLCAweDI3YmEsIDB4MjdiYSwKLQkweDI3YWQsIDB4MjdkMywgMHgyN2QzLCAweDI3ZDMsIDB4MjdkMywgMHgyMDIxLCAweDUwNWEsIDB4MjQwNCwKLQkweGEwMDUsIDB4MDA0MCwgMHgyN2QzLCAweGFkMDYsIDB4MDBjMCwgMHgyN2JhLCAweDY4MDAsIDB4MjAyMiwKLQkweDAwNzgsIDB4MjdjYSwgMHg2ODIwLCAweGEwODQsIDB4MDAwMSwgMHgwMGMwLCAweDI3YzYsIDB4NmYxNCwKLQkweDEwNzgsIDB4MzdiZCwgMHgxMDc4LCAweDMzYWUsIDB4MDA3OCwgMHgyN2NhLCAweDcwNjAsIDB4MjA2MCwKLQkweDY4MDAsIDB4NjAwMiwgMHg2YTFhLCAweDY4MTcsIDB4MDAwMCwgMHg2ODIwLCAweGEwODUsIDB4MDAwOCwKLQkweDY4MjIsIDB4MTA3OCwgMHgxYzUzLCAweDIwMjEsIDB4NzQwMCwgMHgxMDc4LCAweDI4MGYsIDB4MjAyMSwKLQkweDUwNWEsIDB4MTA3OCwgMHgyODBmLCAweDE1N2UsIDB4MjBhOSwgMHgwMDAwLCAweDIwMjEsIDB4NzMwMCwKLQkweDEwNzgsIDB4MjgwZiwgMHg4NDIwLCAweDAwNzAsIDB4MjdlNywgMHgwMDc4LCAweDI3ZTAsIDB4MjA2MSwKLQkweDUzMDAsIDB4MjAyMSwgMHgwMDAyLCAweDIwYTksIDB4MDEwMCwgMHg2MDE4LCAweDYxMTAsIDB4ODFmZiwKLQkweDAwNDAsIDB4MjdmNiwgMHhhMTAyLCAweDAwNTAsIDB4MjdmNiwgMHg2MDEyLCAweDYwMWIsIDB4MDAwMCwKLQkweGFjZTAsIDB4MDAxMCwgMHgwMDcwLCAweDI3ZmUsIDB4MDA3OCwgMHgyN2VkLCAweDg0MjEsIDB4MDBjMCwKLQkweDI3ZWIsIDB4MTU3ZiwgMHg3MDljLCAweGEwODQsIDB4ODAwMCwgMHgwMDQwLCAweDI4MDksIDB4MTA3OCwKLQkweDM5Y2MsIDB4NzAwMywgMHgwMDAwLCAweDcwNGIsIDB4MDAwMCwgMHgwMDc4LCAweDI0MzgsIDB4MDQ3ZSwKLQkweDI0MDQsIDB4YTAwNSwgMHgwMDQwLCAweDI4MjMsIDB4MjA2OCwgMHg2ODAwLCAweDAwN2UsIDB4NmExYSwKLQkweDY4MTcsIDB4MDAwMCwgMHg2ODIwLCAweGEwODUsIDB4MDAwOCwgMHg2ODIyLCAweDEwNzgsIDB4MWM1MywKLQkweDAwN2YsIDB4MDA3OCwgMHgyODExLCAweDA0N2YsIDB4MjAyMywgMHgwMDAwLCAweDAwN2MsIDB4YTI4MiwKLQkweDAwMDMsIDB4MDA1MCwgMHgyODJkLCAweDEwNzgsIDB4MjNjYSwgMHgyMzAwLCAweDAwNzksIDB4MjgzMCwKLQkweDI4MzMsIDB4MjhhNiwgMHgyOGMzLCAweGEyODIsIDB4MDAwMiwgMHgwMDQwLCAweDI4MzksIDB4MTA3OCwKLQkweDIzY2EsIDB4NzA2YywgMHg3MDZmLCAweDAwMDAsIDB4NzA5MywgMHgwMDAwLCAweDAwNzksIDB4Mjg0MCwKLQkweDI4NDgsIDB4Mjg0OCwgMHgyODRhLCAweDI4N2UsIDB4MzNlMywgMHgyODQ4LCAweDI4N2UsIDB4Mjg0OCwKLQkweDEwNzgsIDB4MjNjYSwgMHg3NzgwLCAweDEwNzgsIDB4MzZiMCwgMHg3NzgwLCAweGE3YmMsIDB4MGYwMCwKLQkweDEwNzgsIDB4MzdiZCwgMHg2MDE4LCAweGEwMDUsIDB4MDA0MCwgMHgyODc1LCAweDIwMjEsIDB4NzQwMCwKLQkweDIwMDksIDB4MDAwNCwgMHgyMDExLCAweDAwMTAsIDB4MTA3OCwgMHgyOGRlLCAweDAwNDAsIDB4Mjg3NSwKLQkweDE1N2UsIDB4MjBhOSwgMHgwMDAwLCAweDIwMjEsIDB4NzMwMCwgMHgwNDdlLCAweDIwMDksIDB4MDAwNCwKLQkweDIwMTEsIDB4MDAxMCwgMHgxMDc4LCAweDI4ZGUsIDB4MDQ3ZiwgMHgwMDQwLCAweDI4NzQsIDB4ODQyMCwKLQkweDAwNzAsIDB4Mjg3NCwgMHgwMDc4LCAweDI4NjUsIDB4MTU3ZiwgMHg4NzM4LCAweGE3ODQsIDB4MDAxZiwKLQkweDAwYzAsIDB4Mjg1MCwgMHgwMDc4LCAweDI0NjEsIDB4MDA3OCwgMHgyNDYxLCAweDc3ODAsIDB4MTA3OCwKLQkweDM3YmQsIDB4NjAxOCwgMHhhMDA1LCAweDAwNDAsIDB4MjhhNCwgMHgyMDIxLCAweDc0MDAsIDB4MjAwOSwKLQkweDAwMDUsIDB4MjAxMSwgMHgwMDIwLCAweDEwNzgsIDB4MjhkZSwgMHgwMDQwLCAweDI4YTQsIDB4MTU3ZSwKLQkweDIwYTksIDB4MDAwMCwgMHgyMDIxLCAweDczMDAsIDB4MDQ3ZSwgMHgyMDA5LCAweDAwMDUsIDB4MjAxMSwKLQkweDAwMjAsIDB4MTA3OCwgMHgyOGRlLCAweDA0N2YsIDB4MDA0MCwgMHgyOGEzLCAweDg0MjAsIDB4MDA3MCwKLQkweDI4YTMsIDB4MDA3OCwgMHgyODk0LCAweDE1N2YsIDB4MDA3OCwgMHgyNDYxLCAweDIyMDAsIDB4MDA3OSwKLQkweDI4YTksIDB4MjhhYywgMHgyOGFlLCAweDI4YWUsIDB4MTA3OCwgMHgyM2NhLCAweDIwMDksIDB4MDAxMiwKLQkweDcwNmMsIDB4YTA4NiwgMHgwMDAyLCAweDAwNDAsIDB4MjhiNywgMHgyMDA5LCAweDAwMGUsIDB4NjgxOCwKLQkweGEwODQsIDB4ODAwMCwgMHgwMDQwLCAweDI4YmQsIDB4NjkxYSwgMHg3MDZmLCAweDAwMDAsIDB4NzA3MywKLQkweDAwMDEsIDB4MDA3OCwgMHgzODU0LCAweDIyMDAsIDB4MDA3OSwgMHgyOGM2LCAweDI4Y2IsIDB4MjhhZSwKLQkweDI4YzksIDB4MTA3OCwgMHgyM2NhLCAweDEwNzgsIDB4NDYzMywgMHg3MDAwLCAweGEwODYsIDB4MDAwMSwKLQkweDAwYzAsIDB4MzM3MywgMHgxMDc4LCAweDMzYzQsIDB4NjAwOCwgMHhhMDg0LCAweGZmZWYsIDB4NjAwYSwKLQkweDEwNzgsIDB4MzM2NiwgMHgwMDQwLCAweDMzNzMsIDB4MDA3OCwgMHgyNTczLCAweDI0MDQsIDB4YTAwNSwKLQkweDAwNDAsIDB4MjkwMSwgMHgyMDY4LCAweDJkMDQsIDB4MDA3ZSwgMHg2ODE0LCAweGE3MDYsIDB4MDA0MCwKLQkweDI4ZWQsIDB4MmQyMCwgMHgwMDdmLCAweDAwNzgsIDB4MjhkZiwgMHgwMDdmLCAweDIwMjIsIDB4NjkxYSwKLQkweDY4MTcsIDB4MDAwMCwgMHg2ODIwLCAweGEyMDUsIDB4NjgyMiwgMHgxMDc4LCAweDFjNTMsIDB4NjAxMCwKLQkweDgwMDEsIDB4NjAxMiwgMHg2MDA4LCAweGEwODQsIDB4ZmZlZiwgMHg2MDBhLCAweDEwNzgsIDB4MzNjNCwKLQkweDAwN2MsIDB4YTA4NSwgMHgwMDAxLCAweDAwNzgsIDB4MjkwMCwgMHgyMzAwLCAweDAwNzksIDB4MjkwOCwKLQkweDI5MGQsIDB4MjkwYiwgMHgyOWE2LCAweDEwNzgsIDB4MjNjYSwgMHg3OGVjLCAweGEwODQsIDB4MDAwMSwKLQkweDAwYzAsIDB4MjkyMSwgMHg3MDAwLCAweGEwODYsIDB4MDAwNCwgMHgwMGMwLCAweDI5MTksIDB4MDA3OCwKLQkweDI5NDQsIDB4MTA3OCwgMHgzM2M0LCAweDYwMDgsIDB4YTA4NCwgMHhmZmVmLCAweDYwMGEsIDB4MDA3OCwKLQkweDMzNzMsIDB4NzhlNCwgMHhhMDA1LCAweDAwZDAsIDB4Mjk0NCwgMHgwMDE4LCAweDI0MzgsIDB4MjAwOCwKLQkweGEwODQsIDB4MDAzMCwgMHgwMGMwLCAweDI5MzAsIDB4NzgxYiwgMHgwMDRmLCAweDAwNzgsIDB4MjQzOCwKLQkweDc4ZWMsIDB4YTA4NCwgMHgwMDAzLCAweDAwNDAsIDB4MjkyYywgMHgyMTAwLCAweGEwODQsIDB4MDAwNywKLQkweDAwNzksIDB4MjkzYSwgMHgyOTdkLCAweDI5ODgsIDB4Mjk2ZSwgMHgyOTQyLCAweDM4YjksIDB4MzhiOSwKLQkweDI5NDIsIDB4Mjk5NywgMHgxMDc4LCAweDIzY2EsIDB4NzAwMCwgMHhhMDg2LCAweDAwMDQsIDB4MDBjMCwKLQkweDI5NWUsIDB4NzA2YywgMHhhMDg2LCAweDAwMDIsIDB4MDBjMCwgMHgyOTU0LCAweDIwMTEsIDB4MDAwMiwKLQkweDIwMTksIDB4MDAwMCwgMHgwMDc4LCAweDI4MjcsIDB4NzA2YywgMHhhMDg2LCAweDAwMDYsIDB4MDA0MCwKLQkweDI5NGUsIDB4NzA2YywgMHhhMDg2LCAweDAwMDQsIDB4MDA0MCwgMHgyOTRlLCAweDc5ZTQsIDB4YTE4NCwKLQkweDAwMzAsIDB4MDA0MCwgMHgyOTY4LCAweDc4ZWMsIDB4YTA4NCwgMHgwMDAzLCAweDAwYzAsIDB4Mjk2YSwKLQkweDAwNzgsIDB4MmY0MywgMHgyMDAxLCAweDAwMDMsIDB4MDA3OCwgMHgyY2Q3LCAweDY4MTgsIDB4YTA4NCwKLQkweDgwMDAsIDB4MDA0MCwgMHgyOTc1LCAweDY4MWIsIDB4MDAxZCwgMHgxMDc4LCAweDM2OGYsIDB4NzgyYiwKLQkweDMwMDgsIDB4NzgxYiwgMHgwMDU2LCAweDAwNzgsIDB4MjQzOCwgMHg2ODE4LCAweGEwODQsIDB4ODAwMCwKLQkweDAwNDAsIDB4Mjk4NCwgMHg2ODFiLCAweDAwMWQsIDB4MTA3OCwgMHgzNjhmLCAweDAwNzgsIDB4Mzg4NCwKLQkweDY4MTgsIDB4YTA4NCwgMHg4MDAwLCAweDAwNDAsIDB4Mjk4ZiwgMHg2ODFiLCAweDAwMWQsIDB4MTA3OCwKLQkweDM2OGYsIDB4NzgyYiwgMHgzMDA4LCAweDc4MWIsIDB4MDBkMiwgMHgwMDc4LCAweDI0MzgsIDB4NjgxOCwKLQkweGEwODQsIDB4ODAwMCwgMHgwMDQwLCAweDI5OWUsIDB4NjgxYiwgMHgwMDFkLCAweDEwNzgsIDB4MzY4ZiwKLQkweDc4MmIsIDB4MzAwOCwgMHg3ODFiLCAweDAwOTMsIDB4MDA3OCwgMHgyNDM4LCAweGE1ODQsIDB4MDAwZiwKLQkweDAwYzAsIDB4MjljMywgMHg3MDAwLCAweDAwNzksIDB4MjlhZCwgMHgyNDYxLCAweDI5YjcsIDB4MjliNSwKLQkweDMzNzMsIDB4MzM3MywgMHgzMzczLCAweDMzNzMsIDB4MjliNSwgMHgxMDc4LCAweDIzY2EsIDB4MTA3OCwKLQkweDMzYzQsIDB4NjAwOCwgMHhhMDg0LCAweGZmZWYsIDB4NjAwYSwgMHgxMDc4LCAweDMzNjYsIDB4MDA0MCwKLQkweDMzNzMsIDB4MDA3OCwgMHgyNTczLCAweDc4ZTQsIDB4YTAwNSwgMHgwMGQwLCAweDI5NDQsIDB4MDAxOCwKLQkweDI5NDQsIDB4MjAwOCwgMHhhMDg0LCAweDAwMzAsIDB4MDBjMCwgMHgyOWQyLCAweDc4MWIsIDB4MDA0ZiwKLQkweDAwNzgsIDB4MjQzOCwgMHg3OGVjLCAweGEwODQsIDB4MDAwMywgMHgwMDQwLCAweDI5Y2UsIDB4MjEwMCwKLQkweGExODQsIDB4MDAwNywgMHgwMDc5LCAweDI5ZGMsIDB4MjllZSwgMHgyOWYyLCAweDI5ZTYsIDB4MjllNCwKLQkweDM4YjksIDB4MzhiOSwgMHgyOWU0LCAweDM4YWYsIDB4MTA3OCwgMHgyM2NhLCAweDEwNzgsIDB4MzY5NywKLQkweDc4MmIsIDB4MzAwOCwgMHg3ODFiLCAweDAwNTYsIDB4MDA3OCwgMHgyNDM4LCAweDEwNzgsIDB4MzY5NywKLQkweDAwNzgsIDB4Mzg4NCwgMHgxMDc4LCAweDM2OTcsIDB4NzgyYiwgMHgzMDA4LCAweDc4MWIsIDB4MDBkMiwKLQkweDAwNzgsIDB4MjQzOCwgMHgxMDc4LCAweDM2OTcsIDB4NzgyYiwgMHgzMDA4LCAweDc4MWIsIDB4MDA5MywKLQkweDAwNzgsIDB4MjQzOCwgMHgyMzAwLCAweDAwNzksIDB4MmEwNSwgMHgyYTBhLCAweDJhMDgsIDB4MmEwYywKLQkweDEwNzgsIDB4MjNjYSwgMHgwMDc4LCAweDMwODEsIDB4NjgxYiwgMHgwMDA4LCAweDc4YTMsIDB4MDAwMCwKLQkweDc5ZTQsIDB4YTE4NCwgMHgwMDMwLCAweDAwNDAsIDB4MzA4MSwgMHg3OGVjLCAweGEwODQsIDB4MDAwMywKLQkweDAwNDAsIDB4MzA4MSwgMHhhMTg0LCAweDAwMDcsIDB4MDA3OSwgMHgyYTFlLCAweDJhMjYsIDB4MjlmMiwKLQkweDI5NmUsIDB4Mzg1NCwgMHgzOGI5LCAweDM4YjksIDB4MmEyNiwgMHgzOGFmLCAweDEwNzgsIDB4Mzg2OCwKLQkweDAwNzgsIDB4MjQzOCwgMHhhMjgyLCAweDAwMDUsIDB4MDA1MCwgMHgyYTMwLCAweDEwNzgsIDB4MjNjYSwKLQkweDIzMDAsIDB4MDA3OSwgMHgyYTMzLCAweDJhMzYsIDB4MmM4NCwgMHgyYzkyLCAweDIyMDAsIDB4MDA3OSwKLQkweDJhMzksIDB4MmE1MywgMHgyYTQwLCAweDJhNTMsIDB4MmEzZSwgMHgyYzY5LCAweDEwNzgsIDB4MjNjYSwKLQkweDc4OWIsIDB4MDAxOCwgMHg3OGE4LCAweGEwODQsIDB4MDBmZiwgMHhhMDgyLCAweDAwMjAsIDB4MDA0OCwKLQkweDM2NmIsIDB4YTA4YSwgMHgwMDA0LCAweDAwYzgsIDB4MzY2YiwgMHgwMDc5LCAweDJhNGYsIDB4MzY2YiwKLQkweDM2NmIsIDB4MzY2YiwgMHgzNjE5LCAweDc4OWIsIDB4MDAxOCwgMHg3OWE4LCAweGExODQsIDB4MDA4MCwKLQkweDAwNDAsIDB4MmE2NCwgMHgwMDc4LCAweDM2NmIsIDB4NzAwMCwgMHhhMDA1LCAweDAwYzAsIDB4MmE1YSwKLQkweDIwMTEsIDB4MDAwNCwgMHgwMDc4LCAweDMxZjUsIDB4YTE4NCwgMHgwMGZmLCAweGEwOGEsIDB4MDAxMCwKLQkweDAwYzgsIDB4MzY2YiwgMHgwMDc5LCAweDJhNmMsIDB4MmE3ZSwgMHgyYTdjLCAweDJhOTYsIDB4MmE5YSwKLQkweDJiNTUsIDB4MzY2YiwgMHgzNjZiLCAweDJiNTcsIDB4MzY2YiwgMHgzNjZiLCAweDJjNjUsIDB4MmM2NSwKLQkweDM2NmIsIDB4MzY2YiwgMHgzNjZiLCAweDJjNjcsIDB4MTA3OCwgMHgyM2NhLCAweGE2ODQsIDB4MTAwMCwKLQkweDAwNDAsIDB4MmE4YiwgMHgyMDAxLCAweDA1MDAsIDB4ODAwMCwgMHg4MDAwLCAweDc4M2EsIDB4NzgxYiwKLQkweDAwOTEsIDB4MDA3OCwgMHgyNDM4LCAweDY4MTgsIDB4YTA4NCwgMHg4MDAwLCAweDAwNDAsIDB4MmE5NCwKLQkweDY4MWIsIDB4MDAxZCwgMHgwMDc4LCAweDJhODIsIDB4MDA3OCwgMHgzODU0LCAweDY4MWIsIDB4MDAxZCwKLQkweDAwNzgsIDB4MzY3YiwgMHg2OTIwLCAweDY5MjIsIDB4YTY4NCwgMHgxODAwLCAweDAwYzAsIDB4MmFkYiwKLQkweDY4MjAsIDB4YTA4NCwgMHgwMDAxLCAweDAwYzAsIDB4MmFlMSwgMHg2ODE4LCAweGEwODYsIDB4MDAwOCwKLQkweDAwYzAsIDB4MmFhYywgMHg2ODFiLCAweDAwMDAsIDB4YTY4NCwgMHgwNDAwLCAweDAwNDAsIDB4MmI1MSwKLQkweGE2ODQsIDB4MDA4MCwgMHgwMDQwLCAweDJhZDcsIDB4NzA5NywgMHgwMDAwLCAweDY4MTgsIDB4YTA4NCwKLQkweDAwM2YsIDB4YTA4YSwgMHgwMDBkLCAweDAwNTAsIDB4MmFkNywgMHhhMDhhLCAweDAwMGMsIDB4NzE5NiwKLQkweDIwMDEsIDB4MDAwYywgMHg4MDBjLCAweDcxOWEsIDB4Nzg5YiwgMHgwMDYxLCAweDc4YWEsIDB4MTU3ZSwKLQkweDEzN2UsIDB4MTQ3ZSwgMHgyMGExLCAweDAxMmIsIDB4Nzg5YiwgMHgwMDAwLCAweDgwMDAsIDB4ODBhYywKLQkweGFkODAsIDB4MDAwYiwgMHgyMDk4LCAweDUzYTYsIDB4MTQ3ZiwgMHgxMzdmLCAweDE1N2YsIDB4NzgxYiwKLQkweDAwNTgsIDB4MDA3OCwgMHgyNDM4LCAweGE2ODQsIDB4MTAwMCwgMHgwMDQwLCAweDJhZTEsIDB4MDA3OCwKLQkweDI0MzgsIDB4YTY4NCwgMHgwMDYwLCAweDAwNDAsIDB4MmI0ZCwgMHhhNjg0LCAweDA4MDAsIDB4MDA0MCwKLQkweDJiNGQsIDB4YTY4NCwgMHg4MDAwLCAweDAwYzAsIDB4MmFlZiwgMHgwMDc4LCAweDJiMDksIDB4YTZiNCwKLQkweDdmZmYsIDB4N2U1YSwgMHg2ZWI2LCAweDc4OWIsIDB4MDA3NiwgMHg3YWFjLCAweDc5YWMsIDB4NzhhYywKLQkweDgwMWIsIDB4MDBjOCwgMHgyYWZjLCAweDgwMDAsIDB4YTA4NCwgMHgwMDNmLCAweGExMDgsIDB4YTI5MSwKLQkweDAwMDAsIDB4NmI5OCwgMHgyMTAwLCAweGEzMDIsIDB4NjhiMiwgMHg2Yjk0LCAweDIyMDAsIDB4YTMwMywKLQkweDY4YWUsIDB4YTY4NCwgMHg0MDAwLCAweDAwNDAsIDB4MmIxMSwgMHhhNmI0LCAweGJmZmYsIDB4N2U1YSwKLQkweDZlYjYsIDB4NzAwMCwgMHhhMDg2LCAweDAwMDMsIDB4MDBjMCwgMHgyYjFlLCAweDEwNzgsIDB4NDZlOSwKLQkweDEwNzgsIDB4NDhlNiwgMHg3ODFiLCAweDAwNjQsIDB4MDA3OCwgMHgyNDM4LCAweGEwMDYsIDB4MTA3OCwKLQkweDQ5ZWQsIDB4NmFiMCwgMHg2OWFjLCAweDZjOTgsIDB4NmI5NCwgMHgyMjAwLCAweGExMDUsIDB4MDA0MCwKLQkweDJiMmQsIDB4MjIwMCwgMHhhNDIyLCAweDIxMDAsIDB4YTMxYiwgMHg2Y2FhLCAweDdjZDIsIDB4N2NkYSwKLQkweDZiYTYsIDB4N2JkNiwgMHg3YmRlLCAweDIzMDAsIDB4YTQwNSwgMHgwMGMwLCAweDJiM2YsIDB4YTZiNSwKLQkweDQwMDAsIDB4N2U1YSwgMHg2ZWI2LCAweDc4MWIsIDB4MDA2NCwgMHgwMDc4LCAweDI0MzgsIDB4NzgxYiwKLQkweDAwNjQsIDB4MjIwMCwgMHhhMTE1LCAweDAwYzAsIDB4MmI0OSwgMHgxMDc4LCAweDQ4ZjcsIDB4MDA3OCwKLQkweDI0MzgsIDB4MTA3OCwgMHg0OTQyLCAweDAwNzgsIDB4MjQzOCwgMHg3ODFiLCAweDAwNjUsIDB4MDA3OCwKLQkweDI0MzgsIDB4NzgxYiwgMHgwMDU4LCAweDAwNzgsIDB4MjQzOCwgMHgxMDc4LCAweDIzY2EsIDB4MDA3OCwKLQkweDJiYjgsIDB4NjkyMCwgMHhhMTg0LCAweDAxMDAsIDB4MDA0MCwgMHgyYjZmLCAweGExOGMsIDB4ZmVmZiwKLQkweDY5MjIsIDB4MGM3ZSwgMHg3MDU0LCAweDIwNjAsIDB4NjAwMCwgMHhhMDg0LCAweGVmZmYsIDB4NjAwMiwKLQkweDYwMDQsIDB4YTA4NCwgMHhmZmY1LCAweDYwMDYsIDB4MGM3ZiwgMHgwMDc4LCAweDJiYTcsIDB4YTE4NCwKLQkweDAyMDAsIDB4MDA0MCwgMHgyYmE3LCAweGExOGMsIDB4ZmRmZiwgMHg2OTIyLCAweDBjN2UsIDB4NzA1NCwKLQkweDIwNjAsIDB4NjAwMCwgMHhhMDg0LCAweGRmZmYsIDB4NjAwMiwgMHg2MDA0LCAweGEwODQsIDB4ZmZlZiwKLQkweDYwMDYsIDB4MjAwOCwgMHgyYzQ4LCAweDBjN2YsIDB4YTE4NCwgMHgwMDA4LCAweDAwNDAsIDB4MmJhNywKLQkweDEwNzgsIDB4MzdiOSwgMHgxMDc4LCAweDM0YzcsIDB4ODhmZiwgMHgwMDQwLCAweDJiYTcsIDB4Nzg5YiwKLQkweDAwNjAsIDB4MjgwMCwgMHg3OGFhLCAweDdlNTgsIDB4YTZiNSwgMHgwMDA0LCAweDdlNWEsIDB4YTY4NCwKLQkweDA0MDAsIDB4MDBjMCwgMHgyYmExLCAweDc4MmIsIDB4MzAwOCwgMHg3ODFiLCAweDAwNTYsIDB4MDA3OCwKLQkweDI0MzgsIDB4NzgyYiwgMHgzMDA4LCAweDc4MWIsIDB4MDA2NSwgMHgwMDc4LCAweDI0MzgsIDB4N2U1OCwKLQkweGE2ODQsIDB4MDQwMCwgMHgwMGMwLCAweDJiYjAsIDB4NzgxYiwgMHgwMDU4LCAweDAwNzgsIDB4MjQzOCwKLQkweDc4MWIsIDB4MDA2NSwgMHgwMDc4LCAweDI0MzgsIDB4MDA3OCwgMHgzNjczLCAweDAwNzgsIDB4MzY3MywKLQkweDIwMTksIDB4MDAwMCwgMHg3OTkwLCAweGExOGMsIDB4MDAwNywgMHgwMDQwLCAweDJiYjYsIDB4Nzg5YiwKLQkweDAwMTAsIDB4NzhhOCwgMHhhMDk0LCAweDAwZmYsIDB4YTI4NiwgMHgwMDAxLCAweDAwYzAsIDB4MmJmNiwKLQkweDIzMDAsIDB4N2NhOCwgMHhhNDAwLCAweDIwMTgsIDB4YTEwMiwgMHgwMDQwLCAweDJiZWUsIDB4MDA0OCwKLQkweDJiZDMsIDB4MDA3OCwgMHgyYmYwLCAweGEzODAsIDB4MDAwMiwgMHhhMTAyLCAweDAwYzgsIDB4MmJlZSwKLQkweDY5MjAsIDB4YTE4YywgMHhmY2ZmLCAweDY5MjIsIDB4MGM3ZSwgMHg3MDU0LCAweDIwNjAsIDB4NjAwMCwKLQkweGEwODQsIDB4ZWZlZiwgMHg2MDAyLCAweDYwMDQsIDB4YTA4NCwgMHhmZmU1LCAweDYwMDYsIDB4MGM3ZiwKLQkweDdlNTgsIDB4YTZiNCwgMHhmZmZiLCAweDdlNWEsIDB4MDA3OCwgMHgyYmE4LCAweDAwNzgsIDB4MmI1OSwKLQkweDI0YTgsIDB4N2FhOCwgMHgwMGYwLCAweDJiZjAsIDB4MDA3OCwgMHgyYmMxLCAweGEyODQsIDB4MDBmMCwKLQkweGEwODYsIDB4MDAyMCwgMHgwMGMwLCAweDJjNTYsIDB4ODMxOCwgMHg4MzE4LCAweDIzMDAsIDB4YTEwMiwKLQkweDAwNDAsIDB4MmMwNiwgMHgwMDQ4LCAweDJjMDYsIDB4MDA3OCwgMHgyYzUzLCAweGEyODYsIDB4MDAyMywKLQkweDAwNDAsIDB4MmJiNiwgMHg2ODFjLCAweGEwODQsIDB4ZmZmMSwgMHg2ODFlLCAweDdlNTgsIDB4YTY4NCwKLQkweGZmZjEsIDB4YTA4NSwgMHgwMDEwLCAweDIwMzAsIDB4N2U1YSwgMHg2MDA4LCAweGEwODUsIDB4MDAxMCwKLQkweDYwMGEsIDB4MGM3ZSwgMHg3MDU0LCAweDIwNjAsIDB4NjAwNCwgMHgyMDA4LCAweDJjNDgsIDB4MGM3ZiwKLQkweGExODQsIDB4MDAxMCwgMHgwMDQwLCAweDJjMmEsIDB4MTA3OCwgMHgzN2I5LCAweDEwNzgsIDB4MzVkNiwKLQkweDAwNzgsIDB4MmMzOSwgMHgwYzdlLCAweDcwNTQsIDB4MjA2MCwgMHg2MDA0LCAweDIwMDgsIDB4MmM0OCwKLQkweDBjN2YsIDB4YTE4NCwgMHgwMDA4LCAweDAwNDAsIDB4MmJhNywgMHgxMDc4LCAweDM3YjksIDB4MTA3OCwKLQkweDM0YzcsIDB4ODhmZiwgMHgwMDQwLCAweDJiYTcsIDB4Nzg5YiwgMHgwMDYwLCAweDI4MDAsIDB4NzhhYSwKLQkweGE2YjUsIDB4MDAwNCwgMHg3ZTVhLCAweGE2ODQsIDB4MDQwMCwgMHgwMGMwLCAweDJjNGQsIDB4NzgyYiwKLQkweDMwMDgsIDB4NzgxYiwgMHgwMDU2LCAweDAwNzgsIDB4MjQzOCwgMHg3ODJiLCAweDMwMDgsIDB4NzgxYiwKLQkweDAwNjUsIDB4MDA3OCwgMHgyNDM4LCAweDdhYTgsIDB4MDA3OCwgMHgyYmMxLCAweDgzMTgsIDB4MjMwMCwKLQkweGExMDIsIDB4MDA0MCwgMHgyYzVmLCAweDAwNDgsIDB4MmM1ZiwgMHgwMDc4LCAweDJiYzEsIDB4YTI4NCwKLQkweDAwODAsIDB4MDBjMCwgMHgzNjdiLCAweDAwNzgsIDB4MzY3MywgMHgwMDc4LCAweDM2N2IsIDB4MDA3OCwKLQkweDM2NmIsIDB4Nzg5YiwgMHgwMDE4LCAweDc4YTgsIDB4YTA4NCwgMHgwMGZmLCAweGEwOGUsIDB4MDAwMSwKLQkweDAwNDAsIDB4MmM3NCwgMHgxMDc4LCAweDIzY2EsIDB4N2FhOCwgMHhhMjk0LCAweDAwZmYsIDB4NzhhOCwKLQkweGEwODQsIDB4MDBmZiwgMHhhMDhhLCAweDAwMDQsIDB4MDBjOCwgMHgzNjZiLCAweDAwNzksIDB4MmM4MCwKLQkweDM2NmIsIDB4MzQxNCwgMHgzNjZiLCAweDM1NmIsIDB4YTI4MiwgMHgwMDAwLCAweDAwYzAsIDB4MmM4YSwKLQkweDEwNzgsIDB4MjNjYSwgMHgxMDc4LCAweDM2OGYsIDB4NzgyYiwgMHgzMDA4LCAweDc4MWIsIDB4MDA2NSwKLQkweDAwNzgsIDB4MjQzOCwgMHhhMjgyLCAweDAwMDMsIDB4MDBjMCwgMHgyYzk4LCAweDEwNzgsIDB4MjNjYSwKLQkweGE0ODQsIDB4ODAwMCwgMHgwMGMwLCAweDJjYmIsIDB4NzA2YywgMHhhMDA1LCAweDAwNDAsIDB4MmNhMiwKLQkweDEwNzgsIDB4MjNjYSwgMHg2ZjE0LCAweDc3ODIsIDB4YTdiYywgMHgwZjAwLCAweDEwNzgsIDB4MzdiZCwKLQkweDYwMDgsIDB4YTA4NSwgMHgwMDIxLCAweDYwMGEsIDB4ODczOCwgMHhhNzg0LCAweDAwMWYsIDB4MDBjMCwKLQkweDJjYTYsIDB4MTA3OCwgMHgzNjkzLCAweDcwNmYsIDB4MDAwMiwgMHgyMDA5LCAweDUwMzgsIDB4MjAwYiwKLQkweDAwMDksIDB4MDA3OCwgMHgyY2JkLCAweDEwNzgsIDB4MzY5ZiwgMHg3ODJiLCAweDMwMDgsIDB4NzgxYiwKLQkweDAwNjUsIDB4MDA3OCwgMHgyNDM4LCAweGEyODIsIDB4MDAwNCwgMHgwMDUwLCAweDJjYzksIDB4MTA3OCwKLQkweDIzY2EsIDB4MjMwMCwgMHgwMDc5LCAweDJjY2MsIDB4MmNjZiwgMHgyZGI4LCAweDJkZWIsIDB4YTI4NiwKLQkweDAwMDMsIDB4MDA0MCwgMHgyY2Q1LCAweDEwNzgsIDB4MjNjYSwgMHgyMDAxLCAweDAwMDAsIDB4MDA3ZSwKLQkweDY4YzAsIDB4YTAwNSwgMHgwMDQwLCAweDJjZGUsIDB4NzAwMywgMHgwMDAzLCAweDY4YTAsIDB4YTA4NCwKLQkweDIwMDAsIDB4MDA0MCwgMHgyY2U3LCAweDYwMDgsIDB4YTA4NSwgMHgwMDAyLCAweDYwMGEsIDB4MDA3ZiwKLQkweDcwM2UsIDB4NzAwMCwgMHhhMDg0LCAweDAwMDcsIDB4MDA3OSwgMHgyY2VlLCAweDI0NjEsIDB4MmNmOCwKLQkweDJjZjgsIDB4MmVlZCwgMHgyZjI5LCAweDI0NjEsIDB4MmYyOSwgMHgyY2Y2LCAweDEwNzgsIDB4MjNjYSwKLQkweGE2ODQsIDB4MTAwMCwgMHgwMGMwLCAweDJkMDAsIDB4MTA3OCwgMHg0NjMzLCAweDAwNDAsIDB4MmQ5MiwKLQkweDc4NjgsIDB4YTA4YywgMHgwMGZmLCAweDAwNDAsIDB4MmQ0OCwgMHhhMTg2LCAweDAwMDgsIDB4MDBjMCwKLQkweDJkMTcsIDB4MTA3OCwgMHgzM2M0LCAweDYwMDgsIDB4YTA4NCwgMHhmZmVmLCAweDYwMGEsIDB4MTA3OCwKLQkweDMzNjYsIDB4MDA0MCwgMHgyZDQ4LCAweDEwNzgsIDB4NDYzMywgMHgwMDc4LCAweDJkMmYsIDB4YTE4NiwKLQkweDAwMjgsIDB4MDBjMCwgMHgyZDQ4LCAweDEwNzgsIDB4NDYzMywgMHg2MDA4LCAweGEwODQsIDB4ZmZlZiwKLQkweDYwMGEsIDB4NjAxOCwgMHhhMDA1LCAweDAwNDAsIDB4MmQyZiwgMHg4MDAxLCAweDYwMWEsIDB4YTAwNSwKLQkweDAwNDAsIDB4MmQyZiwgMHg4MDAxLCAweGEwMDUsIDB4MDA0MCwgMHgyZDJmLCAweDYwMWUsIDB4NjgyMCwKLQkweGEwODQsIDB4MDAwMSwgMHgwMDQwLCAweDI0NjEsIDB4NjgyMCwgMHhhMDg0LCAweGZmZmUsIDB4NjgyMiwKLQkweDcwNjAsIDB4MGM3ZSwgMHgyMDYwLCAweDY4MDAsIDB4NjAwMiwgMHgwYzdmLCAweDYwMDQsIDB4NjgwMiwKLQkweGEwMDUsIDB4MmQwMCwgMHgwMGMwLCAweDJkNDUsIDB4NjAwMiwgMHg2MDA2LCAweDAwNzgsIDB4MjQ2MSwKLQkweDAxN2UsIDB4MTA3OCwgMHgyZTFjLCAweDAxN2YsIDB4YTY4NCwgMHhkZjAwLCAweDY4MWUsIDB4NjgyYiwKLQkweDAwMDAsIDB4NmYxNCwgMHg4MWZmLCAweDAwNDAsIDB4MmQ5MiwgMHhhMTg2LCAweDAwMDIsIDB4MDBjMCwKLQkweDJkOTIsIDB4YTY4NCwgMHgwODAwLCAweDAwYzAsIDB4MmQ2NSwgMHhhNjg0LCAweDAwNjAsIDB4MDA0MCwKLQkweDJkNjUsIDB4NzhkOCwgMHg3YWRjLCAweDY4MmUsIDB4NmEzMiwgMHg2ODIwLCAweGEwODQsIDB4MDgwMCwKLQkweDAwYzAsIDB4MmQ5MiwgMHg4NzE3LCAweGEyOTQsIDB4MDAwZiwgMHg4MjEzLCAweDgyMTMsIDB4ODIxMywKLQkweGEyOTAsIDB4NTI4MCwgMHhhMjkwLCAweDAwMDAsIDB4MjIxYywgMHhhMzg0LCAweDAxMDAsIDB4MDBjMCwKLQkweDJkN2IsIDB4MDA3OCwgMHgyZDgxLCAweDgyMTAsIDB4MjIwNCwgMHhhMDg1LCAweDAwMTgsIDB4MjAxMiwKLQkweDgyMTEsIDB4YTM4NCwgMHgwNDAwLCAweDAwNDAsIDB4MmQ4ZSwgMHg2OGEwLCAweGEwODQsIDB4MDEwMCwKLQkweDAwYzAsIDB4MmQ4ZSwgMHgxMDc4LCAweDJlYTAsIDB4MDA3OCwgMHgyNDYxLCAweDYwMDgsIDB4YTA4NSwKLQkweDAwMDIsIDB4NjAwYSwgMHg2OTE2LCAweDY4MTgsIDB4YTA4NCwgMHg4MDAwLCAweDAwNDAsIDB4MmQ5YSwKLQkweDcwM2MsIDB4NjgxYSwgMHhhNjhjLCAweGRmMDAsIDB4NjkxZSwgMHgxMDc4LCAweDMzYjUsIDB4MTA3OCwKLQkweDMzYzQsIDB4MDBjMCwgMHgyZGE3LCAweDYwMDgsIDB4YTA4NCwgMHhmZmVmLCAweDYwMGEsIDB4NjgyMCwKLQkweGEwODQsIDB4MDAwMSwgMHgwMGMwLCAweDJkYjAsIDB4MTA3OCwgMHgzM2FlLCAweDAwNzgsIDB4MmRiNCwKLQkweDcwNjAsIDB4MjA2MCwgMHg2ODAwLCAweDYwMDIsIDB4MTA3OCwgMHgxYzUzLCAweDAwNzgsIDB4MjQ2MSwKLQkweGEyODIsIDB4MDAwNCwgMHgwMDQ4LCAweDJkYmUsIDB4MTA3OCwgMHgyM2NhLCAweDIyMDAsIDB4MDA3OSwKLQkweDJkYzEsIDB4MmRiYywgMHgyZGM1LCAweDJkZDIsIDB4MmRjNSwgMHg3MDAwLCAweGEwODYsIDB4MDAwNSwKLQkweDAwNDAsIDB4MmRjZSwgMHgxMDc4LCAweDM2OGYsIDB4NzgyYiwgMHgzMDA4LCAweDc4MWIsIDB4MDA2NSwKLQkweDAwNzgsIDB4MjQzOCwgMHg3ODkwLCAweDgwMDcsIDB4ODAwMSwgMHhhMDg0LCAweDAwMDcsIDB4YTA4MCwKLQkweDAwMTgsIDB4Nzg5YSwgMHg3OWE4LCAweGExOGMsIDB4MDBmZiwgMHhhMTg2LCAweDAwMDMsIDB4MDA0MCwKLQkweDJkZTcsIDB4YTE4NiwgMHgwMDAwLCAweDAwNDAsIDB4MmRlNywgMHgwMDc4LCAweDM2NmIsIDB4NzgxYiwKLQkweDAwNjUsIDB4MDA3OCwgMHgyNDM4LCAweDY4MjAsIDB4YTA4NSwgMHgwMDA0LCAweDY4MjIsIDB4ODJmZiwKLQkweDAwYzAsIDB4MmRmNiwgMHgxMDc4LCAweDM2OGYsIDB4MDA3OCwgMHgyZGZkLCAweDgyMTEsIDB4MDA0MCwKLQkweDJkZmIsIDB4MTA3OCwgMHgyM2NhLCAweDEwNzgsIDB4MzY5ZiwgMHg3ODJiLCAweDMwMDgsIDB4NzgxYiwKLQkweDAwNjUsIDB4MDA3OCwgMHgyNDM4LCAweDcwMmMsIDB4ODAwMywgMHgwMDQ4LCAweDJlMGQsIDB4MjAxOSwKLQkweDRjNWIsIDB4MTA3OCwgMHgyMjU1LCAweDcwMmYsIDB4ODAwMCwgMHgxMDc4LCAweDM4ZGUsIDB4NzgzMCwKLQkweGEwODQsIDB4MDBjMCwgMHgwMGMwLCAweDJlMTksIDB4MDAxOCwgMHgyZTE5LCAweDc5MWEsIDB4YTAwNiwKLQkweDAwN2MsIDB4YTA4NSwgMHgwMDAxLCAweDAwN2MsIDB4YTY4NCwgMHgwMDYwLCAweDAwYzAsIDB4MmUyNiwKLQkweDY4MmYsIDB4MDAwMCwgMHg2ODMzLCAweDAwMDAsIDB4MDA3OCwgMHgyZTlmLCAweGE2ODQsIDB4MDgwMCwKLQkweDAwYzAsIDB4MmU0OCwgMHg2OGI0LCAweGEwODQsIDB4NDgwMCwgMHhhNjM1LCAweGE2ODQsIDB4MDgwMCwKLQkweDAwYzAsIDB4MmU0OCwgMHg2OTk4LCAweDZhOTQsIDB4NjkyZSwgMHg2YTMyLCAweDcwM2MsIDB4YTAwNSwKLQkweDAwYzAsIDB4MmU0MCwgMHgyMjAwLCAweGExMDUsIDB4MDA0MCwgMHgyZTQ3LCAweDcwM2YsIDB4MDAxNSwKLQkweDcwMDAsIDB4YTA4NiwgMHgwMDA2LCAweDAwNDAsIDB4MmU0NywgMHgxMDc4LCAweDQ2MzMsIDB4MDA3YywKLQkweGE2ODQsIDB4MDAyMCwgMHgwMDQwLCAweDJlNmEsIDB4YTY4NCwgMHg0MDAwLCAweDAwNDAsIDB4MmU1NiwKLQkweDY4MmYsIDB4MDAwMCwgMHg2ODMzLCAweDAwMDAsIDB4MDA3OCwgMHgyZTQwLCAweDY4YjQsIDB4YTA4NCwKLQkweDQ4MDAsIDB4YTYzNSwgMHhhNjg0LCAweDQwMDAsIDB4MDBjMCwgMHgyZTUwLCAweDcwM2MsIDB4YTAwNSwKLQkweDAwYzAsIDB4MmU2NCwgMHg3MDNmLCAweDAwMTUsIDB4NzlkOCwgMHg3YWRjLCAweDY5MmUsIDB4NmEzMiwKLQkweDAwNzgsIDB4MmU0MCwgMHhhNjg0LCAweDQwMDAsIDB4MDA0MCwgMHgyZTc0LCAweDY4MmYsIDB4MDAwMCwKLQkweDY4MzMsIDB4MDAwMCwgMHgwMDc4LCAweDJlNDAsIDB4NjhiNCwgMHhhMDg0LCAweDQ4MDAsIDB4YTYzNSwKLQkweGE2ODQsIDB4NDAwMCwgMHgwMGMwLCAweDJlNmUsIDB4NzAzYywgMHhhMDA1LCAweDAwYzAsIDB4MmU4MiwKLQkweDcwM2YsIDB4MDAxNSwgMHg3OWQ4LCAweDdhZGMsIDB4NzhkMCwgMHg4MGZiLCAweDAwYzgsIDB4MmU4OSwKLQkweDgwMDAsIDB4YTA4NCwgMHgwMDNmLCAweGExMDgsIDB4YTI5MSwgMHgwMDAwLCAweDY5MmUsIDB4NmEzMiwKLQkweDIxMDAsIDB4YTIwNSwgMHgwMGMwLCAweDJlOTYsIDB4MDA3OCwgMHgyZTQwLCAweDcwMDAsIDB4YTA4NiwKLQkweDAwMDYsIDB4MDA0MCwgMHgyZTlmLCAweDEwNzgsIDB4NDllZCwgMHgwMDc4LCAweDJlNDAsIDB4MDA3YywKLQkweDYwMDgsIDB4YTA4NSwgMHgwMjAwLCAweDYwMGEsIDB4YTM4NCwgMHgwMjAwLCAweDAwNDAsIDB4MmVhYywKLQkweDYwMDgsIDB4YTA4NSwgMHgwMDAyLCAweDYwMGEsIDB4NjgxYiwgMHgwMDA2LCAweDY4OGYsIDB4MDAwMCwKLQkweDY4OTMsIDB4MDAwMCwgMHg2YTMwLCAweDY5MmMsIDB4NmEzZSwgMHg2OTQyLCAweDY4MmYsIDB4MDAwMywKLQkweDY4MzMsIDB4MDAwMCwgMHg2ODM3LCAweDAwMjAsIDB4Njg5NywgMHgwMDAwLCAweDY4OWIsIDB4MDAyMCwKLQkweDY4YjMsIDB4MDAwMCwgMHg2OGFmLCAweDAwMDAsIDB4NzAwMCwgMHgwMDc5LCAweDJlYzcsIDB4MjQ2MSwKLQkweDJlZDEsIDB4MmVkYSwgMHgyZWNmLCAweDJlY2YsIDB4MmVjZiwgMHgyZWNmLCAweDJlY2YsIDB4MTA3OCwKLQkweDIzY2EsIDB4NjgyMCwgMHhhMDg0LCAweDAwMDEsIDB4MDBjMCwgMHgyZWRhLCAweDEwNzgsIDB4MzNhZSwKLQkweDAwNzgsIDB4MmVlMCwgMHg3MDYwLCAweDJjNTAsIDB4MjA2MCwgMHg2ODAwLCAweDYwMDIsIDB4MmE2MCwKLQkweDIwMjEsIDB4NTA1YSwgMHgyNDA0LCAweGEwMDUsIDB4MDA0MCwgMHgyZWU5LCAweDIwMjAsIDB4MDA3OCwKLQkweDJlZTIsIDB4MmQyMiwgMHgyMDZiLCAweDAwMDAsIDB4MDA3YywgMHgxMDc4LCAweDMzYjUsIDB4MTA3OCwKLQkweDMzYzQsIDB4NjAwOCwgMHhhMDg0LCAweGZkZmYsIDB4NjAwYSwgMHg2ODJiLCAweDAwMDAsIDB4Nzg5YiwKLQkweDAwMGUsIDB4NmYxNCwgMHg2ODE3LCAweDAwMDIsIDB4MTA3OCwgMHg0YTM1LCAweGE2ODQsIDB4MDgwMCwKLQkweDAwNDAsIDB4MmYwNiwgMHg2OTFjLCAweGExOGQsIDB4MjAwMCwgMHg2OTFlLCAweDY4MTgsIDB4YTA4NCwKLQkweDgwMDAsIDB4MDA0MCwgMHgyZjE2LCAweDc4NjgsIDB4YTA4YywgMHgwMGZmLCAweDAwNDAsIDB4MmYxNCwKLQkweDY4MWIsIDB4MDAxZSwgMHgwMDc4LCAweDJmMTYsIDB4NjgxYiwgMHgwMDAwLCAweDIwMjEsIDB4NTA1YSwKLQkweDI0MDQsIDB4YWQwNiwgMHgwMDQwLCAweDJmMWQsIDB4NzQ2MCwgMHg2ODAwLCAweDIwMjIsIDB4NjhjMywKLQkweDAwMDAsIDB4NmEzYywgMHg2OTQwLCAweDZhMzIsIDB4NjkyZSwgMHgxMDc4LCAweDFjNTMsIDB4MDA3OCwKLQkweDI0NjEsIDB4MTA3OCwgMHgyZTFjLCAweDY4MmIsIDB4MDAwMCwgMHgyMDAxLCAweDAwMGUsIDB4NmYxNCwKLQkweDEwNzgsIDB4MzhlNCwgMHhhMDhjLCAweDAwZmYsIDB4NjkxNiwgMHg2ODE4LCAweGEwODQsIDB4ODAwMCwKLQkweDAwNDAsIDB4MmYzYywgMHg3MDNjLCAweDY4MWEsIDB4YTY4YywgMHhkZjAwLCAweDY5MWUsIDB4NzA2ZiwKLQkweDAwMDAsIDB4MDA3OCwgMHgyNDYxLCAweDcwMDAsIDB4YTAwNSwgMHgwMGMwLCAweDJmNDksIDB4MDA3OCwKLQkweDI0NjEsIDB4YTAwNiwgMHgxMDc4LCAweDQ2MzMsIDB4NjgxNywgMHgwMDAwLCAweDY4MWIsIDB4MDAxNCwKLQkweGE2OGMsIDB4ZGYwMCwgMHg2OTFlLCAweDY4MmIsIDB4MDAwMCwgMHg2ODIwLCAweGEwODUsIDB4MDBmZiwKLQkweDY4MjIsIDB4NzAwMCwgMHgwMDc5LCAweDJmNWMsIDB4MjQ2MSwgMHgyZjY2LCAweDJmNjYsIDB4MmY2OCwKLQkweDJmNjgsIDB4MmY2OCwgMHgyZjY4LCAweDJmNjQsIDB4MTA3OCwgMHgyM2NhLCAweDEwNzgsIDB4MzNjNCwKLQkweDYwMDgsIDB4YTA4NCwgMHhmZmVmLCAweDYwMGEsIDB4MDA3OCwgMHgzMzdlLCAweDIzMDAsIDB4MDA3OSwKLQkweDJmNzEsIDB4MmY3NCwgMHgyZjc2LCAweDJmYWYsIDB4MTA3OCwgMHgyM2NhLCAweDcwMDAsIDB4MDA3OSwKLQkweDJmNzksIDB4MjQ2MSwgMHgyZjgzLCAweDJmODMsIDB4MmY5ZSwgMHgyZjgzLCAweDJmYWIsIDB4MmY5ZSwKLQkweDJmODEsIDB4MTA3OCwgMHgyM2NhLCAweGE2ODQsIDB4MDA2MCwgMHhhMDg2LCAweDAwNjAsIDB4MDBjMCwKLQkweDJmOWEsIDB4YTZiNCwgMHhmZmRmLCAweGE2YjQsIDB4YmZmZiwgMHhhNmI1LCAweDIwMDAsIDB4N2U1YSwKLQkweDY4MWMsIDB4YTA4NCwgMHhmZmRmLCAweDY4MWUsIDB4MTA3OCwgMHg0NjMzLCAweDEwNzgsIDB4NDhmNywKLQkweDAwNzgsIDB4Mzg1NCwgMHhhNjg0LCAweDIwMDAsIDB4MDA0MCwgMHgyZjhkLCAweDY4MTgsIDB4YTA4NCwKLQkweDgwMDAsIDB4MDA0MCwgMHgyZmFiLCAweDY4MWIsIDB4MDAxNSwgMHhhNjg0LCAweDQwMDAsIDB4MDA0MCwKLQkweDJmYWIsIDB4NjgxYiwgMHgwMDA3LCAweDEwNzgsIDB4Mzg2OCwgMHgwMDc4LCAweDI0MzgsIDB4MTA3OCwKLQkweDIzY2EsIDB4MjMwMCwgMHgwMDc5LCAweDJmYjQsIDB4MmZiNywgMHgyZmI5LCAweDJmZWMsIDB4MTA3OCwKLQkweDIzY2EsIDB4NzAwMCwgMHgwMDc5LCAweDJmYmMsIDB4MjQ2MSwgMHgyZmM2LCAweDJmYzYsIDB4MmZlMSwKLQkweDJmYzYsIDB4MmZlOCwgMHgyZmUxLCAweDJmYzQsIDB4MTA3OCwgMHgyM2NhLCAweGE2ODQsIDB4MDA2MCwKLQkweGEwODYsIDB4MDA2MCwgMHgwMGMwLCAweDJmZGQsIDB4YTZiNCwgMHhmZmJmLCAweGE2YjQsIDB4YmZmZiwKLQkweGE2YjUsIDB4MjAwMCwgMHg3ZTVhLCAweDY4MWMsIDB4YTA4NCwgMHhmZmJmLCAweDY4MWUsIDB4MTA3OCwKLQkweDQ2MzMsIDB4MTA3OCwgMHg0OGY3LCAweDAwNzgsIDB4Mzg1NCwgMHhhNjg0LCAweDIwMDAsIDB4MDA0MCwKLQkweDJmZDAsIDB4NjgxOCwgMHhhMDg0LCAweDgwMDAsIDB4MDA0MCwgMHgyZmU4LCAweDY4MWIsIDB4MDAwNywKLQkweDc4MWIsIDB4MDBkMiwgMHgwMDc4LCAweDI0MzgsIDB4NjgyMCwgMHhhMDg1LCAweDAwMDQsIDB4NjgyMiwKLQkweDEwNzgsIDB4MzgxZiwgMHhhNmI1LCAweDA4MDAsIDB4MTA3OCwgMHgzNjhmLCAweDc4MmIsIDB4MzAwOCwKLQkweDc4MWIsIDB4MDA2NSwgMHgwMDc4LCAweDI0MzgsIDB4MjMwMCwgMHgwMDc5LCAweDJmZmYsIDB4MzAwMiwKLQkweDMwMDQsIDB4MzAwNiwgMHgxMDc4LCAweDIzY2EsIDB4MDA3OCwgMHgzNjdiLCAweGE2ODQsIDB4MDQwMCwKLQkweDAwYzAsIDB4MzAyZiwgMHg3OWU0LCAweGExODQsIDB4MDAyMCwgMHgwMDQwLCAweDMwMTYsIDB4NzhlYywKLQkweGEwODQsIDB4MDAwMywgMHgwMDQwLCAweDMwMTYsIDB4NzgyYiwgMHgzMDA5LCAweDc4OWIsIDB4MDA2MCwKLQkweDc4YWIsIDB4MDAwMCwgMHhhNjg0LCAweGZmZmIsIDB4Nzg1YSwgMHg3OWU0LCAweGExODQsIDB4MDAyMCwKLQkweDAwNDAsIDB4MzAyNywgMHg3OGVjLCAweGEwODQsIDB4MDAwMywgMHgwMGMwLCAweDMwMmIsIDB4MjAwMSwKLQkweDAwMTQsIDB4MDA3OCwgMHgyY2Q3LCAweGExODQsIDB4MDAwNywgMHgwMDc5LCAweDMwNjcsIDB4N2E5MCwKLQkweGEyOTQsIDB4MDAwNywgMHg3ODliLCAweDAwNjAsIDB4NzlhOCwgMHg4MWZmLCAweDAwNDAsIDB4MzA2NSwKLQkweDc4OWIsIDB4MDAxMCwgMHg3YmE4LCAweGEzODQsIDB4MDAwMSwgMHgwMGMwLCAweDMwNTYsIDB4N2JhOCwKLQkweDdiYTgsIDB4YTM4NiwgMHgwMDAxLCAweDAwYzAsIDB4MzA0OSwgMHgyMDA5LCAweGZmZjcsIDB4MDA3OCwKLQkweDMwNGYsIDB4YTM4NiwgMHgwMDAzLCAweDAwYzAsIDB4MzA1NiwgMHgyMDA5LCAweGZmZWYsIDB4MGM3ZSwKLQkweDcwNTQsIDB4MjA2MCwgMHg2MDA0LCAweGExMDQsIDB4NjAwNiwgMHgwYzdmLCAweDc4OWIsIDB4MDA2MCwKLQkweDc4YWIsIDB4MDAwMCwgMHhhNjg0LCAweGZmZmIsIDB4Nzg1YSwgMHg3ODJiLCAweDMwMDksIDB4NjkyMCwKLQkweGExOGMsIDB4ZmRmZiwgMHhhMThjLCAweGZlZmYsIDB4NjkyMiwgMHgwMDc4LCAweDM4NTQsIDB4Mjk3ZCwKLQkweDI5ODgsIDB4MzA3MSwgMHgzMDc5LCAweDMwNmYsIDB4MzA2ZiwgMHgzODU0LCAweDM4NTQsIDB4MTA3OCwKLQkweDIzY2EsIDB4NjkyMCwgMHhhMThjLCAweGZkZmYsIDB4YTE4YywgMHhmZWZmLCAweDY5MjIsIDB4MDA3OCwKLQkweDM4NWUsIDB4NjkyMCwgMHhhMThjLCAweGZkZmYsIDB4YTE4YywgMHhmZWZmLCAweDY5MjIsIDB4MDA3OCwKLQkweDM4NTQsIDB4NzllNCwgMHhhMTg0LCAweDAwMzAsIDB4MDA0MCwgMHgzMDhiLCAweDc4ZWMsIDB4YTA4NCwKLQkweDAwMDMsIDB4MDBjMCwgMHgzMGIyLCAweDcwMDAsIDB4YTA4NiwgMHgwMDA0LCAweDAwYzAsIDB4MzBhNSwKLQkweDcwNmMsIDB4YTA4NiwgMHgwMDAyLCAweDAwYzAsIDB4MzA5YiwgMHgyMDExLCAweDAwMDIsIDB4MjAxOSwKLQkweDAwMDAsIDB4MDA3OCwgMHgyODI3LCAweDcwNmMsIDB4YTA4NiwgMHgwMDA2LCAweDAwNDAsIDB4MzA5NSwKLQkweDcwNmMsIDB4YTA4NiwgMHgwMDA0LCAweDAwNDAsIDB4MzA5NSwgMHg3MDAwLCAweGEwODYsIDB4MDAwMCwKLQkweDAwNDAsIDB4MjQzOCwgMHg2ODE4LCAweGEwODUsIDB4ODAwMCwgMHg2ODFhLCAweDIwMDEsIDB4MDAxNCwKLQkweDAwNzgsIDB4MmNkNywgMHhhMTg0LCAweDAwMDcsIDB4MDA3OSwgMHgzMGI2LCAweDM4NTQsIDB4Mzg1NCwKLQkweDMwYmUsIDB4Mzg1NCwgMHgzOGI5LCAweDM4YjksIDB4Mzg1NCwgMHgzODU0LCAweGE2ODQsIDB4MDA4MCwKLQkweDAwNDAsIDB4MzBlZCwgMHg3MTk0LCAweDgxZmYsIDB4MDA0MCwgMHgzMGVkLCAweGExODIsIDB4MDAwZCwKLQkweDAwZDAsIDB4MzBjZSwgMHg3MDk3LCAweDAwMDAsIDB4MDA3OCwgMHgzMGQzLCAweGExODIsIDB4MDAwYywKLQkweDcwOTYsIDB4MjAwOSwgMHgwMDBjLCAweDc4OWIsIDB4MDA2MSwgMHg3OWFhLCAweDE1N2UsIDB4MTM3ZSwKLQkweDE0N2UsIDB4NzA5OCwgMHg4MTE0LCAweGEyMTAsIDB4NzI5YSwgMHhhMDgwLCAweDAwMGIsIDB4YWQwMCwKLQkweDIwOTgsIDB4MjBhMSwgMHgwMTJiLCAweDc4OWIsIDB4MDAwMCwgMHg4MTA4LCAweDgxYWMsIDB4NTNhNiwKLQkweDE0N2YsIDB4MTM3ZiwgMHgxNTdmLCAweDAwNzgsIDB4Mzg1ZSwgMHhhNjg0LCAweDA0MDAsIDB4MDBjMCwKLQkweDMxMmUsIDB4NjgyMCwgMHhhMDg0LCAweDAwMDEsIDB4MDA0MCwgMHgzODVlLCAweGE2OGMsIDB4MDA2MCwKLQkweGE2ODQsIDB4MDA2MCwgMHgwMDQwLCAweDMxMDIsIDB4YTA4NiwgMHgwMDYwLCAweDAwYzAsIDB4MzEwMiwKLQkweGExOGQsIDB4NDAwMCwgMHhhMThjLCAweGZmZmIsIDB4Nzk1YSwgMHg2OWI2LCAweDc4OWIsIDB4MDA2MCwKLQkweDc4YWIsIDB4MDAwMCwgMHg3ODliLCAweDAwNjEsIDB4NjgxOCwgMHhhMDg1LCAweDgwMDAsIDB4NjgxYSwKLQkweDc4YWEsIDB4ODAwOCwgMHg4MTBjLCAweDAwNDAsIDB4MzNkZCwgMHhhMThjLCAweDAwZjgsIDB4MDBjMCwKLQkweDMzZGQsIDB4MTU3ZSwgMHgxMzdlLCAweDE0N2UsIDB4MjBhMSwgMHgwMTJiLCAweDc4OWIsIDB4MDAwMCwKLQkweDgwMDAsIDB4ODBhYywgMHhhZDgwLCAweDAwMGIsIDB4MjA5OCwgMHg1M2E2LCAweDE0N2YsIDB4MTM3ZiwKLQkweDE1N2YsIDB4NjgxNCwgMHg4MDA3LCAweDc4ODIsIDB4MDA3OCwgMHgzODVlLCAweDY4MTgsIDB4YTA4NCwKLQkweDgwMDAsIDB4MDA0MCwgMHgzMTM1LCAweDY4MWIsIDB4MDAwOCwgMHg3ODFiLCAweDAwYzgsIDB4MDA3OCwKLQkweDI0MzgsIDB4MjMwMCwgMHgwMDc5LCAweDMxM2MsIDB4MzE0MSwgMHgzMWUwLCAweDMxM2YsIDB4MTA3OCwKLQkweDIzY2EsIDB4NzAwMCwgMHhhMDg0LCAweDAwMDcsIDB4MDA3OSwgMHgzMTQ2LCAweDI0NjEsIDB4MzE1MCwKLQkweDMxODUsIDB4MzE1YiwgMHgzMTRlLCAweDI0NjEsIDB4MzE0ZSwgMHgzMTRlLCAweDEwNzgsIDB4MjNjYSwKLQkweDY4MWMsIDB4YTA4NCwgMHgyMDAwLCAweDAwNDAsIDB4MzE2OSwgMHg2MDA4LCAweGEwODUsIDB4MDAwMiwKLQkweDYwMGEsIDB4MDA3OCwgMHgzMTY5LCAweDY4YzAsIDB4YTAwNSwgMHgwMGMwLCAweDMxODUsIDB4NjkyMCwKLQkweGExOGQsIDB4MDAwMSwgMHg2OTIyLCAweDY4YzMsIDB4MDAwMSwgMHg2ODAwLCAweDcwNmEsIDB4MDA3OCwKLQkweDMxN2YsIDB4NjkyMCwgMHhhMThkLCAweDAwMDEsIDB4NjkyMiwgMHg2ODAwLCAweDYwMDYsIDB4YTAwNSwKLQkweDAwYzAsIDB4MzE3MywgMHg2MDAyLCAweDY4MWMsIDB4YTA4NCwgMHgwMDBlLCAweDAwNDAsIDB4MzE3ZiwKLQkweDcwMTQsIDB4NjhiYSwgMHg3MTMwLCAweGExODgsIDB4NzMwMCwgMHgwMDc4LCAweDMxODEsIDB4MjAwOSwKLQkweDc0MDAsIDB4MjEwNCwgMHg2ODAyLCAweDJkMGEsIDB4NzE2MiwgMHg2ZWI2LCAweGE2ODQsIDB4MDA2MCwKLQkweDAwNDAsIDB4MzFkZSwgMHhhNjg0LCAweDA4MDAsIDB4MDBjMCwgMHgzMTk5LCAweGE2ODQsIDB4N2ZmZiwKLQkweDY4YjYsIDB4Njg5NCwgMHg2OGE2LCAweDY4OTgsIDB4NjhhYSwgMHgxMDc4LCAweDQ2MzMsIDB4MDA3OCwKLQkweDMxZGUsIDB4YTY4NCwgMHgwMDIwLCAweDAwNDAsIDB4MzFhZSwgMHg2OGMwLCAweGEwMDUsIDB4MDA0MCwKLQkweDMxYTUsIDB4MTA3OCwgMHg0YTM1LCAweDAwNzgsIDB4MzFhOCwgMHhhMDA2LCAweDEwNzgsIDB4NDllZCwKLQkweDc5ZDgsIDB4N2FkYywgMHg2OWFhLCAweDZhYTYsIDB4MDA3OCwgMHgzMWI0LCAweDEwNzgsIDB4MzdjYSwKLQkweDY5YWEsIDB4NmFhNiwgMHgxMDc4LCAweDQ5ZWQsIDB4YTY4NCwgMHg4MDAwLCAweDAwNDAsIDB4MzFkZSwKLQkweGE2ODQsIDB4N2ZmZiwgMHg2OGI2LCAweDIwMDEsIDB4MDA3NiwgMHgxMDc4LCAweDM4ZTQsIDB4MjAxMCwKLQkweDIwMDEsIDB4MDA3OCwgMHgxMDc4LCAweDM4ZTQsIDB4MjAwOCwgMHhhNjg0LCAweDAwMjAsIDB4MDBjMCwKLQkweDMxZDYsIDB4MjAwMSwgMHgwMDdhLCAweDEwNzgsIDB4MzhlNCwgMHg4MDFiLCAweDAwYzgsIDB4MzFkMSwKLQkweDgwMDAsIDB4YTA4NCwgMHgwMDNmLCAweGExMDgsIDB4YTI5MSwgMHgwMDAwLCAweDZiOTgsIDB4MjEwMCwKLQkweGEzMDIsIDB4NjhiMiwgMHg2Yjk0LCAweDIyMDAsIDB4YTMwMywgMHg2OGFlLCAweDAwNzgsIDB4MjQ2MSwKLQkweDAwNzgsIDB4MzY3YiwgMHg3MDM3LCAweDAwMDAsIDB4YTI4MiwgMHgwMDA2LCAweDAwNTAsIDB4MzFlYSwKLQkweDEwNzgsIDB4MjNjYSwgMHg3MDAwLCAweGEwODQsIDB4MDAwNywgMHgxMGMwLCAweDM5OGEsIDB4MjMwMCwKLQkweDAwNzksIDB4MzFmMiwgMHgzMWY1LCAweDMyMWUsIDB4MzIzMiwgMHgyMjAwLCAweDAwNzksIDB4MzFmOCwKLQkweDMyMWMsIDB4MzY3YiwgMHgzMWZlLCAweDMyMWMsIDB4MzI0ZSwgMHgzMjkwLCAweDcwMDMsIDB4MDAwNSwKLQkweDIwMDEsIDB4NzUxMCwgMHgyMDY4LCAweDcwNGEsIDB4MTU3ZSwgMHgyMGE5LCAweDAwMzEsIDB4MjAwMywKLQkweDAwMDAsIDB4ODAwMCwgMHgwMDcwLCAweDMyMGUsIDB4MDA3OCwgMHgzMjA3LCAweDE1N2YsIDB4YWQ4MCwKLQkweDAwMDksIDB4NzAzNiwgMHg2ODE3LCAweDAwMDAsIDB4NjhiNywgMHgwNzAwLCAweDY4MjMsIDB4MDgwMCwKLQkweDY4MjcsIDB4MDAwMywgMHgwMDc4LCAweDM2NmIsIDB4MTA3OCwgMHgyM2NhLCAweDcwMDMsIDB4MDAwNSwKLQkweDIwMDEsIDB4NzUxMCwgMHgyMDY4LCAweDcwNGEsIDB4YWQ4MCwgMHgwMDA5LCAweDcwMzYsIDB4MjIwMCwKLQkweDAwNzksIDB4MzIyYSwgMHgzNjdiLCAweDMyMzAsIDB4MzIzMCwgMHgzMjRlLCAweDMyMzAsIDB4MzY3YiwKLQkweDEwNzgsIDB4MjNjYSwgMHg3MDAzLCAweDAwMDUsIDB4MjAwMSwgMHg3NTEwLCAweDIwNjgsIDB4NzA0YSwKLQkweGFkODAsIDB4MDAwOSwgMHg3MDM2LCAweDIyMDAsIDB4MDA3OSwgMHgzMjNlLCAweDMyNDYsIDB4MzI0NCwKLQkweDMyNDQsIDB4MzI0NiwgMHgzMjQ0LCAweDMyNDYsIDB4MTA3OCwgMHgyM2NhLCAweDEwNzgsIDB4MzY5ZiwKLQkweDc4MmIsIDB4MzAwOCwgMHg3ODFiLCAweDAwNjUsIDB4MDA3OCwgMHgyNDM4LCAweDcwMDMsIDB4MDAwMiwKLQkweDdhODAsIDB4YTI5NCwgMHgwZjAwLCAweDc4OWIsIDB4MDAxOCwgMHg3Y2E4LCAweGE0ODQsIDB4MDAxZiwKLQkweGEyMTUsIDB4MjA2OSwgMHg3NDAwLCAweDJkMDQsIDB4MmQwOCwgMHg3MTYyLCAweDIwNjgsIDB4YTAwNSwKLQkweDAwNDAsIDB4MzI2OSwgMHg2ODE0LCAweGEyMDYsIDB4MDA0MCwgMHgzMjg1LCAweDY4MDAsIDB4MDA3OCwKLQkweDMyNWMsIDB4NzAwMywgMHgwMDA1LCAweDIwMDEsIDB4NzUxMCwgMHgyMDY4LCAweDcwNGEsIDB4NzAzNiwKLQkweDE1N2UsIDB4MjBhOSwgMHgwMDMxLCAweDIwMDMsIDB4MDAwMCwgMHg4MDAwLCAweDAwNzAsIDB4MzI3YSwKLQkweDAwNzgsIDB4MzI3MywgMHgxNTdmLCAweGFkODAsIDB4MDAwOSwgMHg3MDM2LCAweDZhMTYsIDB4NjhiNywKLQkweDA3MDAsIDB4NjgyMywgMHgwODAwLCAweDY4MjcsIDB4MDAwMywgMHg2ZWI0LCAweDdlNWEsIDB4NjgyMCwKLQkweGEwODQsIDB4MGMwMCwgMHgwMDQwLCAweDMyZGYsIDB4MTA3OCwgMHgzNjk3LCAweDAwNzgsIDB4MzJkZiwKLQkweDcwMDMsIDB4MDAwMiwgMHg3YTgwLCAweGEyOTQsIDB4MGYwMCwgMHg3ODliLCAweDAwMTgsIDB4N2NhOCwKLQkweGE0ODQsIDB4MDAxZiwgMHhhMjE1LCAweDc5YTgsIDB4NzlhOCwgMHhhMThjLCAweDAwZmYsIDB4YTFlOCwKLQkweDczMDAsIDB4MmQwNCwgMHgyZDA4LCAweDcxNjIsIDB4MjA2OCwgMHhhMDA1LCAweDAwNDAsIDB4MzJhZiwKLQkweDY4MTQsIDB4YTIwNiwgMHgwMDQwLCAweDMyY2EsIDB4NjgwMCwgMHgwMDc4LCAweDMyYTIsIDB4NzAwMywKLQkweDAwMDUsIDB4MjAwMSwgMHg3NTEwLCAweDIwNjgsIDB4NzA0YSwgMHgxNTdlLCAweDIwYTksIDB4MDAzMSwKLQkweDIwMDMsIDB4MDAwMCwgMHg4MDAwLCAweDAwNzAsIDB4MzJiZiwgMHgwMDc4LCAweDMyYjgsIDB4MTU3ZiwKLQkweGFkODAsIDB4MDAwOSwgMHg3MDM2LCAweDZhMTYsIDB4NjhiNywgMHgwNzAwLCAweDY4MjMsIDB4MDgwMCwKLQkweDY4MjcsIDB4MDAwMywgMHg2ZWI0LCAweDdlNWEsIDB4NjgyMCwgMHhhMDg0LCAweDBjMDAsIDB4MDA0MCwKLQkweDMyZGYsIDB4YTA4NCwgMHgwODAwLCAweDAwNDAsIDB4MzJkOSwgMHgxMDc4LCAweDM2OWIsIDB4MDA3OCwKLQkweDMyZGYsIDB4MTA3OCwgMHgzNjk3LCAweDcwOGIsIDB4MDAwMCwgMHgwMDc4LCAweDMyZGYsIDB4MDI3ZSwKLQkweDgyMDcsIDB4YTA4NCwgMHgwMDBmLCAweDgwMDMsIDB4ODAwMywgMHg4MDAzLCAweGEwODAsIDB4NTI4MCwKLQkweDIwNjAsIDB4NzA1NiwgMHg2MDAwLCAweDcwNWEsIDB4NjAwNCwgMHg3MDVlLCAweGE2ODQsIDB4MDA2MCwKLQkweDAwNDAsIDB4MzMzNywgMHg2Yjk4LCAweDZjOTQsIDB4NjlhYywgMHg2OGIwLCAweGExMDUsIDB4MDBjMCwKLQkweDMzMTksIDB4N2JkMiwgMHg3YmRhLCAweDdjZDYsIDB4N2NkZSwgMHhhNmI0LCAweGI3ZmYsIDB4N2U1YSwKLQkweGE2ODQsIDB4MDA2MCwgMHhhMDg2LCAweDAwNjAsIDB4MDA0MCwgMHgzMzM3LCAweDY4YzAsIDB4YTAwNSwKLQkweDAwNDAsIDB4MzMxMiwgMHg3MDAzLCAweDAwMDMsIDB4NjgyYiwgMHgwMDAwLCAweDEwNzgsIDB4NDhlNiwKLQkweDAwNzgsIDB4MzMxNCwgMHgxMDc4LCAweDQ4ZjcsIDB4YTZiNSwgMHgyMDAwLCAweDdlNWEsIDB4MDA3OCwKLQkweDMzMzcsIDB4NjhiMCwgMHhhMzFhLCAweDIxMDAsIDB4YTQyMywgMHgyNDAwLCAweGEzMDUsIDB4MDA0MCwKLQkweDMzMzcsIDB4N2JkMiwgMHg3YmRhLCAweDdjZDYsIDB4N2NkZSwgMHg2OGIwLCAweGE2YjQsIDB4YmZmZiwKLQkweDdlNWEsIDB4MDA3ZSwgMHg2OGMwLCAweGEwMDUsIDB4MDA3ZiwgMHgwMDQwLCAweDMzMzUsIDB4NzAwMywKLQkweDAwMDMsIDB4MTA3OCwgMHg0OGU2LCAweDAwNzgsIDB4MzMzNywgMHgxMDc4LCAweDQ5NDIsIDB4MDc3ZiwKLQkweDEwNzgsIDB4MzdiZCwgMHgyMDA5LCAweDAwNjUsIDB4YTY4NCwgMHgwMDA0LCAweDAwNDAsIDB4MzM1OCwKLQkweDc4ZTQsIDB4YTA4NCwgMHgwMDMwLCAweDAwNDAsIDB4MzM1MCwgMHg3OGVjLCAweGEwODQsIDB4MDAwMywKLQkweDAwNDAsIDB4MzM1MCwgMHg3ODJiLCAweDMwMDgsIDB4MjAwOSwgMHgwMDY1LCAweDAwNzgsIDB4MzM1OCwKLQkweDBmN2UsIDB4MjA3OSwgMHg1MDAwLCAweDEwNzgsIDB4NDYzMywgMHgwZjdmLCAweDAwNDAsIDB4MjQ2MSwKLQkweDc5MWEsIDB4MmQwMCwgMHg3MDRhLCAweDgyMDcsIDB4YTA4NCwgMHgwMDBmLCAweDgwMDMsIDB4ODAwMywKLQkweDgwMDMsIDB4YTA4MCwgMHg1MjgwLCAweDIwNDgsIDB4MDA3OCwgMHgyNDM4LCAweDYwMjAsIDB4YTAwNSwKLQkweDAwNDAsIDB4MzM3MiwgMHg4MDAxLCAweDYwMjIsIDB4NjAwOCwgMHhhMDg1LCAweDAwMDgsIDB4NjAwYSwKLQkweDcwMTAsIDB4NjAyNiwgMHgwMDdjLCAweGEwMDYsIDB4MTA3OCwgMHg0NjMzLCAweDY4MTcsIDB4MDAwMCwKLQkweDY4MWIsIDB4MDAwMSwgMHg2ODIzLCAweDAwNDAsIDB4NjgxZiwgMHgwMTAwLCAweDcwMDAsIDB4YTA4NCwKLQkweDAwMDcsIDB4MDA3OSwgMHgzMzgzLCAweDI0NjEsIDB4MzM4ZCwgMHgzMzhkLCAweDMzYWEsIDB4MzM5NSwKLQkweDMzOTMsIDB4MzM5NSwgMHgzMzhiLCAweDEwNzgsIDB4MjNjYSwgMHgxMDc4LCAweDMzYjUsIDB4MTA3OCwKLQkweDMzYWUsIDB4MTA3OCwgMHgxYzUzLCAweDAwNzgsIDB4MjQ2MSwgMHg3MDZjLCAweDcwNmYsIDB4MDAwMCwKLQkweDcwOTMsIDB4MDAwMCwgMHgwMDc5LCAweDMzOWMsIDB4MzNhNiwgMHgzM2E2LCAweDMzYTQsIDB4MzNhNCwKLQkweDMzYTQsIDB4MzNhNiwgMHgzM2E0LCAweDMzYTYsIDB4MDA3OSwgMHgyODQwLCAweDcwNmYsIDB4MDAwMCwKLQkweDAwNzgsIDB4MjQ2MSwgMHg2ODFiLCAweDAwMDAsIDB4MDA3OCwgMHgyZWVkLCAweDY4MDAsIDB4YTAwNSwKLQkweDAwYzAsIDB4MzNiMywgMHg2MDAyLCAweDYwMDYsIDB4MDA3YywgMHg2MDEwLCAweGEwMDUsIDB4MDA0MCwKLQkweDMzYmUsIDB4ODAwMSwgMHgwMGQwLCAweDMzYmUsIDB4MTA3OCwgMHgyM2NhLCAweDYwMTIsIDB4NjAwOCwKLQkweGEwODQsIDB4ZmZlZiwgMHg2MDBhLCAweDAwN2MsIDB4NjAxOCwgMHhhMDA1LCAweDAwNDAsIDB4MzNjYSwKLQkweDgwMDEsIDB4NjAxYSwgMHgwMDdjLCAweDEwNzgsIDB4MzhkZSwgMHg2ODFiLCAweDAwMTgsIDB4MDA3OCwKLQkweDM0MDEsIDB4MTA3OCwgMHgzOGRlLCAweDY4MWIsIDB4MDAxOSwgMHgwMDc4LCAweDM0MDEsIDB4MTA3OCwKLQkweDM4ZGUsIDB4NjgxYiwgMHgwMDFhLCAweDAwNzgsIDB4MzQwMSwgMHgxMDc4LCAweDM4ZGUsIDB4NjgxYiwKLQkweDAwMDMsIDB4MDA3OCwgMHgzNDAxLCAweDc3ODAsIDB4MTA3OCwgMHgzN2JkLCAweDcxODQsIDB4YTE4YywKLQkweDAwZmYsIDB4YTFlOCwgMHg3MzAwLCAweDJkMDQsIDB4MmQwOCwgMHgyMDY4LCAweGEwMDUsIDB4MDBjMCwKLQkweDMzZjMsIDB4MDA3OCwgMHgyNDYxLCAweDY4MTQsIDB4NzI4MCwgMHhhMjA2LCAweDAwNDAsIDB4MzNmYiwKLQkweDY4MDAsIDB4MDA3OCwgMHgzM2VjLCAweDY4MDAsIDB4MjAwYSwgMHg2ODFiLCAweDAwMDUsIDB4NzA4YiwKLQkweDAwMDAsIDB4MTA3OCwgMHgzM2I1LCAweDY4MjAsIDB4YTA4NCwgMHgwMDAxLCAweDAwYzAsIDB4MzQwYSwKLQkweDEwNzgsIDB4MzNhZSwgMHgxMDc4LCAweDMzYzQsIDB4NjgxZiwgMHgwMDAwLCAweDY4MjMsIDB4MDAyMCwKLQkweDEwNzgsIDB4MWM1MywgMHgwMDc4LCAweDI0NjEsIDB4YTI4MiwgMHgwMDAzLCAweDAwYzAsIDB4MzY2YiwKLQkweDdkYTgsIDB4YTVhYywgMHgwMGZmLCAweDdjYTgsIDB4YTRhNCwgMHgwMGZmLCAweDY5MjAsIDB4YTE4ZCwKLQkweDAwODAsIDB4NjkyMiwgMHhhMTg0LCAweDAxMDAsIDB4MDA0MCwgMHgzNDc4LCAweGExOGMsIDB4ZmVmZiwKLQkweDY5MjIsIDB4YTRhNCwgMHgwMGZmLCAweDAwNDAsIDB4MzQ2MiwgMHhhNDgyLCAweDAwMGMsIDB4MDA0OCwKLQkweDM0MzUsIDB4MDA0MCwgMHgzNDM1LCAweDIwMjEsIDB4MDAwYywgMHg4NTJiLCAweDg1MmIsIDB4MTA3OCwKLQkweDM3MmUsIDB4MDA0MCwgMHgzNDNmLCAweDEwNzgsIDB4MzUzMSwgMHgwMDc4LCAweDM0NmIsIDB4MTA3OCwKLQkweDM2ZTksIDB4MGM3ZSwgMHgyOTYwLCAweDYwMDQsIDB4YTA4NCwgMHhmZmY1LCAweDYwMDYsIDB4MTA3OCwKLQkweDM1NTgsIDB4MGM3ZiwgMHg2OTIwLCAweGExOGQsIDB4MDEwMCwgMHg2OTIyLCAweDdlNTgsIDB4YTZiNSwKLQkweDAwMDQsIDB4N2U1YSwgMHhhNjg0LCAweDA0MDAsIDB4MDBjMCwgMHgzNDVjLCAweDc4MmIsIDB4MzAwOCwKLQkweDc4MWIsIDB4MDA1NiwgMHgwMDc4LCAweDI0MzgsIDB4NzgyYiwgMHgzMDA4LCAweDc4MWIsIDB4MDA2NSwKLQkweDAwNzgsIDB4MjQzOCwgMHgwYzdlLCAweDI5NjAsIDB4NjAwNCwgMHhhMDg0LCAweGZmZjUsIDB4NjAwNiwKLQkweDEwNzgsIDB4MzU1OCwgMHgwYzdmLCAweDdlNTgsIDB4YTY4NCwgMHgwNDAwLCAweDAwYzAsIDB4MzQ3NCwKLQkweDc4MWIsIDB4MDA1OCwgMHgwMDc4LCAweDI0MzgsIDB4NzgxYiwgMHgwMDY1LCAweDAwNzgsIDB4MjQzOCwKLQkweDBjN2UsIDB4NzA1NCwgMHgyMDYwLCAweDYxMDAsIDB4YTE4YywgMHgxMDAwLCAweDAwNDAsIDB4MzRiOCwKLQkweDYyMDgsIDB4ODIxNywgMHhhMjk0LCAweDAwZmYsIDB4YTI4MiwgMHgwMDBjLCAweDAwNDgsIDB4MzQ4YywKLQkweDAwNDAsIDB4MzQ4YywgMHgyMDExLCAweDAwMGMsIDB4MjQwMCwgMHhhMjAyLCAweDAwYzgsIDB4MzQ5MSwKLQkweDIyMjAsIDB4NjIwOCwgMHhhMjk0LCAweDAwZmYsIDB4NzAxOCwgMHhhMDg2LCAweDAwMjgsIDB4MDBjMCwKLQkweDM0YTEsIDB4YTI4MiwgMHgwMDE5LCAweDAwYzgsIDB4MzRhNywgMHgyMDExLCAweDAwMTksIDB4MDA3OCwKLQkweDM0YTcsIDB4YTI4MiwgMHgwMDBjLCAweDAwYzgsIDB4MzRhNywgMHgyMDExLCAweDAwMGMsIDB4MjIwMCwKLQkweGE1MDIsIDB4MDBjOCwgMHgzNGFjLCAweDIyMjgsIDB4MTA3OCwgMHgzNmVkLCAweDg1MmIsIDB4ODUyYiwKLQkweDEwNzgsIDB4MzcyZSwgMHgwMDQwLCAweDM0YjgsIDB4MTA3OCwgMHgzNTMxLCAweDAwNzgsIDB4MzRiYywKLQkweDEwNzgsIDB4MzZlOSwgMHgxMDc4LCAweDM1NTgsIDB4Nzg1OCwgMHhhMDg1LCAweDAwMDQsIDB4Nzg1YSwKLQkweDBjN2YsIDB4NzgyYiwgMHgzMDA4LCAweDc4MWIsIDB4MDA2NSwgMHgwMDc4LCAweDI0MzgsIDB4MGM3ZSwKLQkweDI5NjAsIDB4NjAwMCwgMHhhMDg0LCAweDEwMDAsIDB4MDBjMCwgMHgzNGRmLCAweDYwMTAsIDB4YTA4NCwKLQkweDAwMGYsIDB4MDBjMCwgMHgzNGQ5LCAweDYxMDQsIDB4YTE4YywgMHhmZmY1LCAweDYxMDYsIDB4MGM3ZiwKLQkweDAwN2MsIDB4MjAxMSwgMHgwMDMyLCAweDIwMTksIDB4MDAwMCwgMHgwMDc4LCAweDM1MDYsIDB4NjhhMCwKLQkweGEwODQsIDB4MDIwMCwgMHgwMGMwLCAweDM0ZDksIDB4NjIwOCwgMHhhMjk0LCAweDAwZmYsIDB4NzAxOCwKLQkweGEwODYsIDB4MDAyOCwgMHgwMGMwLCAweDM0ZjQsIDB4YTI4MiwgMHgwMDE5LCAweDAwYzgsIDB4MzRmYSwKLQkweDIwMTEsIDB4MDAxOSwgMHgwMDc4LCAweDM0ZmEsIDB4YTI4MiwgMHgwMDBjLCAweDAwYzgsIDB4MzRmYSwKLQkweDIwMTEsIDB4MDAwYywgMHg2MzA4LCAweDgzMWYsIDB4YTM5YywgMHgwMGZmLCAweGEzODIsIDB4MDAwYywKLQkweDAwNDgsIDB4MzUwNiwgMHgwMDQwLCAweDM1MDYsIDB4MjAxOSwgMHgwMDBjLCAweDc4YWIsIDB4MDAwMSwKLQkweDc4YWIsIDB4MDAwMywgMHg3OGFiLCAweDAwMDEsIDB4N2FhYSwgMHg3YmFhLCAweGE4YzAsIDB4MDAwNSwKLQkweDY4MjAsIDB4YTA4NSwgMHgwMTAwLCAweDY4MjIsIDB4MGM3ZiwgMHgwMDdjLCAweDBjN2UsIDB4Mjk2MCwKLQkweGExOGMsIDB4ZmZmNSwgMHg2MTA2LCAweDIwMTEsIDB4MDAzMiwgMHgyMDE5LCAweDAwMDAsIDB4MDA3OCwKLQkweDM1MjEsIDB4NzhhYiwgMHgwMDAxLCAweDc4YWIsIDB4MDAwMywgMHg3OGFiLCAweDAwMDEsIDB4N2FhYSwKLQkweDdiYWEsIDB4YThjMCwgMHgwMDA1LCAweDY4MjAsIDB4YTA4NSwgMHgwMTAwLCAweDY4MjIsIDB4MGM3ZiwKLQkweDAwN2MsIDB4MGM3ZSwgMHg3MTU0LCAweDIxNjAsIDB4MTA3OCwgMHgzNTM4LCAweDBjN2YsIDB4MDA3YywKLQkweDIwMDgsIDB4YTA4NCwgMHhmZmYwLCAweGE0MjUsIDB4N2M4NiwgMHg2MDE4LCAweDc4OWEsIDB4N2NhZSwKLQkweDY0MTIsIDB4NzhhNCwgMHhhMDg0LCAweGZmZjgsIDB4YTE4YywgMHgwMDA3LCAweGExMDUsIDB4NzhhNiwKLQkweDYwMTYsIDB4Nzg4YSwgMHhhNGE0LCAweDAwMGYsIDB4ODQyNywgMHg4MjA0LCAweDgwMDQsIDB4YTA4NCwKLQkweDAwZmYsIDB4YTQwNSwgMHg2MDBlLCAweDYwMDQsIDB4YTA4NCwgMHhmZmY1LCAweDYwMDYsIDB4MDA3YywKLQkweDBjN2UsIDB4NzA1NCwgMHgyMDYwLCAweDEwNzgsIDB4MzU1ZiwgMHgwYzdmLCAweDAwN2MsIDB4NjAxOCwKLQkweDc4OWEsIDB4NzhhNCwgMHhhMDg0LCAweGZmZjAsIDB4NzhhNiwgMHg2MDEyLCAweDc4ODQsIDB4YTA4NCwKLQkweGZmZjAsIDB4Nzg4NiwgMHgwMDdjLCAweGEyODIsIDB4MDAwMiwgMHgwMGMwLCAweDM2NmIsIDB4N2FhOCwKLQkweDY5MjAsIDB4YTE4ZCwgMHgwMDgwLCAweDY5MjIsIDB4YTE4NCwgMHgwMjAwLCAweDAwNDAsIDB4MzViNCwKLQkweGExOGMsIDB4ZmRmZiwgMHg2OTIyLCAweGEyOTQsIDB4MDBmZiwgMHhhMjgyLCAweDAwMDIsIDB4MDBjOCwKLQkweDM2NmIsIDB4MTA3OCwgMHgzNWZkLCAweDEwNzgsIDB4MzU1OCwgMHhhOTgwLCAweDAwMDEsIDB4MjAwYywKLQkweDEwNzgsIDB4MzdiOSwgMHgxMDc4LCAweDM0YzcsIDB4ODhmZiwgMHgwMDQwLCAweDM1YTcsIDB4Nzg5YiwKLQkweDAwNjAsIDB4MjgwMCwgMHg3OGFhLCAweDdlNTgsIDB4YTZiNSwgMHgwMDA0LCAweDdlNWEsIDB4YTY4NCwKLQkweDA0MDAsIDB4MDBjMCwgMHgzNWExLCAweDc4MmIsIDB4MzAwOCwgMHg3ODFiLCAweDAwNTYsIDB4MDA3OCwKLQkweDI0MzgsIDB4NzgyYiwgMHgzMDA4LCAweDc4MWIsIDB4MDA2NSwgMHgwMDc4LCAweDI0MzgsIDB4N2U1OCwKLQkweGE2ODQsIDB4MDQwMCwgMHgwMGMwLCAweDM1YjAsIDB4NzgxYiwgMHgwMDU4LCAweDAwNzgsIDB4MjQzOCwKLQkweDc4MWIsIDB4MDA2NSwgMHgwMDc4LCAweDI0MzgsIDB4YTI4MiwgMHgwMDAyLCAweDAwYzgsIDB4MzViYywKLQkweGEyODQsIDB4MDAwMSwgMHgwMDQwLCAweDM1YzYsIDB4NzE1NCwgMHhhMTg4LCAweDAwMDAsIDB4MjEwYywKLQkweGExOGMsIDB4MjAwMCwgMHgwMGMwLCAweDM1YzYsIDB4MjAxMSwgMHgwMDAwLCAweDEwNzgsIDB4MzZkYiwKLQkweDEwNzgsIDB4MzVmZCwgMHgxMDc4LCAweDM1NTgsIDB4Nzg1OCwgMHhhMDg1LCAweDAwMDQsIDB4Nzg1YSwKLQkweDc4MmIsIDB4MzAwOCwgMHg3ODFiLCAweDAwNjUsIDB4MDA3OCwgMHgyNDM4LCAweDBjN2UsIDB4MDI3ZSwKLQkweDI5NjAsIDB4NjAwMCwgMHgyMDExLCAweDAwMDEsIDB4YTA4NCwgMHgyMDAwLCAweDAwYzAsIDB4MzVlZCwKLQkweDYwMTQsIDB4YTA4NCwgMHgwMDQwLCAweDAwYzAsIDB4MzVlYiwgMHhhMThjLCAweGZmZWYsIDB4NjEwNiwKLQkweGEwMDYsIDB4MDA3OCwgMHgzNWZhLCAweDIwMTEsIDB4MDAwMCwgMHg3OGFiLCAweDAwMDEsIDB4NzhhYiwKLQkweDAwMDIsIDB4NzhhYiwgMHgwMDAzLCAweDdhYWEsIDB4YThjMCwgMHgwMDA0LCAweDY4MjAsIDB4YTA4NSwKLQkweDAyMDAsIDB4NjgyMiwgMHgwMjdmLCAweDBjN2YsIDB4MDA3YywgMHgwYzdlLCAweDcwNTQsIDB4MjA2MCwKLQkweDEwNzgsIDB4MzYwNCwgMHgwYzdmLCAweDAwN2MsIDB4ODJmZiwgMHgwMDQwLCAweDM2MDksIDB4MjAxMSwKLQkweDAwNDAsIDB4NjAxOCwgMHhhMDgwLCAweDAwMDIsIDB4Nzg5YSwgMHg3OGE0LCAweGEwODQsIDB4ZmZiZiwKLQkweGEyMDUsIDB4NzhhNiwgMHg3ODhhLCAweDYwMTYsIDB4NjAwNCwgMHhhMDg0LCAweGZmZWYsIDB4NjAwNiwKLQkweDAwN2MsIDB4MDA3ZSwgMHg3MDAwLCAweGEwODYsIDB4MDAwMywgMHgwMDQwLCAweDM2MjIsIDB4MDA3ZiwKLQkweDAwNzgsIDB4MzYyNSwgMHgwMDdmLCAweDAwNzgsIDB4MzY2NywgMHhhNjg0LCAweDAwMjAsIDB4MDA0MCwKLQkweDM2NjcsIDB4Nzg4OCwgMHhhMDg0LCAweDAwNDAsIDB4MDA0MCwgMHgzNjY3LCAweDdiYjgsIDB4YTM4NCwKLQkweDAwM2YsIDB4ODMxYiwgMHgwMGM4LCAweDM2MzUsIDB4ODAwMCwgMHhhMDA1LCAweDAwNDAsIDB4MzY0YiwKLQkweDgzMWIsIDB4MDBjOCwgMHgzNjNlLCAweDgwMDEsIDB4MDA0MCwgMHgzNjYzLCAweGE2ODQsIDB4NDAwMCwKLQkweDAwNDAsIDB4MzY0YiwgMHg3OGI4LCAweDgwMWIsIDB4MDBjOCwgMHgzNjQ3LCAweDgwMDAsIDB4YTA4NCwKLQkweDAwM2YsIDB4MDBjMCwgMHgzNjYzLCAweGE2YjQsIDB4YmZmZiwgMHg3ZTVhLCAweDc5ZDgsIDB4N2FkYywKLQkweDIwMDEsIDB4MDAwMSwgMHhhMTA4LCAweDAwYzgsIDB4MzY1NywgMHhhMjkxLCAweDAwMDAsIDB4NzlkMiwKLQkweDc5ZGEsIDB4N2FkNiwgMHg3YWRlLCAweDEwNzgsIDB4NDllZCwgMHg3ODFiLCAweDAwNjQsIDB4MTA3OCwKLQkweDQ4NzIsIDB4MDA3OCwgMHgyNDM4LCAweDc4MWIsIDB4MDA2NCwgMHgwMDc4LCAweDI0MzgsIDB4NzgxYiwKLQkweDAwNjUsIDB4MDA3OCwgMHgyNDM4LCAweDEwNzgsIDB4MzZhMywgMHg3ODJiLCAweDMwMDgsIDB4NzgxYiwKLQkweDAwNjUsIDB4MDA3OCwgMHgyNDM4LCAweDEwNzgsIDB4MzY4ZiwgMHg3ODJiLCAweDMwMDgsIDB4NzgxYiwKLQkweDAwNjUsIDB4MDA3OCwgMHgyNDM4LCAweDY4MjcsIDB4MDAwMiwgMHgxMDc4LCAweDM2OTcsIDB4NzhlNCwKLQkweGEwODQsIDB4MDAzMCwgMHgwMDQwLCAweDI0NjEsIDB4NzhlYywgMHhhMDg0LCAweDAwMDMsIDB4MDA0MCwKLQkweDI0NjEsIDB4NzgyYiwgMHgzMDA4LCAweDc4MWIsIDB4MDA2NSwgMHgwMDc4LCAweDI0MzgsIDB4MjAwMSwKLQkweDAwMDUsIDB4MDA3OCwgMHgzNmE1LCAweDIwMDEsIDB4MDAwYywgMHgwMDc4LCAweDM2YTUsIDB4MjAwMSwKLQkweDAwMDYsIDB4MDA3OCwgMHgzNmE1LCAweDIwMDEsIDB4MDAwZCwgMHgwMDc4LCAweDM2YTUsIDB4MjAwMSwKLQkweDAwMDksIDB4MDA3OCwgMHgzNmE1LCAweDIwMDEsIDB4MDAwNywgMHg3ODliLCAweDAwMTAsIDB4NzhhYSwKLQkweDc4OWIsIDB4MDA2MCwgMHg3OGFiLCAweDAwMDEsIDB4YTZiNSwgMHgwMDA0LCAweDdlNWEsIDB4MDA3YywKLQkweDA3N2UsIDB4ODczZiwgMHhhN2JjLCAweDAwMGYsIDB4ODczYiwgMHg4NzNiLCAweDg3MDMsIDB4YTBlMCwKLQkweDUyODAsIDB4YTdiOCwgMHgwMDIwLCAweDdmOWEsIDB4NzlhNCwgMHhhMTg0LCAweDAwMGYsIDB4MDA0MCwKLQkweDM2YzksIDB4YTE4NCwgMHhmZmYwLCAweDc4YTYsIDB4NjAxMiwgMHg2MDA0LCAweGEwODUsIDB4MDAwOCwKLQkweDYwMDYsIDB4ODczOCwgMHg4NzM4LCAweDdmOWEsIDB4NzlhNCwgMHhhMTg0LCAweDAwNDAsIDB4MDA0MCwKLQkweDM2ZDksIDB4YTE4NCwgMHhmZmJmLCAweDc4YTYsIDB4NjAxNiwgMHg2MDA0LCAweGEwODUsIDB4MDAxMCwKLQkweDYwMDYsIDB4MDc3ZiwgMHgwMDdjLCAweDc4OWIsIDB4MDAxMCwgMHg3OGFiLCAweDAwMDEsIDB4NzhhYiwKLQkweDAwMDIsIDB4NzhhYiwgMHgwMDAzLCAweDdhYWEsIDB4Nzg5YiwgMHgwMDYwLCAweDc4YWIsIDB4MDAwNCwKLQkweDAwN2MsIDB4MjAyMSwgMHgwMDAwLCAweDIwMjksIDB4MDAzMiwgMHg3ODliLCAweDAwMTAsIDB4NzhhYiwKLQkweDAwMDEsIDB4NzhhYiwgMHgwMDAzLCAweDc4YWIsIDB4MDAwMSwgMHg3ZGFhLCAweDdjYWEsIDB4Nzg5YiwKLQkweDAwNjAsIDB4NzhhYiwgMHgwMDA1LCAweDAwN2MsIDB4MTU3ZSwgMHg4MDA3LCAweGEwODQsIDB4MDBmZiwKLQkweDgwMDMsIDB4ODAwMywgMHhhMDgwLCAweDAwMjAsIDB4Nzg5YSwgMHg3OWE0LCAweGExOGMsIDB4ZmZmMCwKLQkweDIwMDEsIDB4NTA0NiwgMHgyMDA0LCAweGEwODIsIDB4MDAyOCwgMHgwMDQwLCAweDM3MTcsIDB4MjAyMSwKLQkweDM3YTAsIDB4MjAxOSwgMHgwMDE0LCAweDIwYTksIDB4MDAwYywgMHgwMDc4LCAweDM3MWQsIDB4MjAyMSwKLQkweDM3YWMsIDB4MjAxOSwgMHgwMDE5LCAweDIwYTksIDB4MDAwZCwgMHgyMDExLCAweDAwNjQsIDB4MjQwNCwKLQkweGEwODQsIDB4ZmZmMCwgMHhhMTA2LCAweDAwNDAsIDB4MzcyYywgMHg4NDIwLCAweDIzMDAsIDB4YTIxMCwKLQkweDAwNzAsIDB4MzcyYywgMHgwMDc4LCAweDM3MWYsIDB4MTU3ZiwgMHgwMDdjLCAweDE1N2UsIDB4MjAwOSwKLQkweDUwNDYsIDB4MjEwYywgMHhhMTgyLCAweDAwMzIsIDB4MDA0OCwgMHgzNzQyLCAweDAwNDAsIDB4Mzc0NiwKLQkweDIwMDksIDB4Mzc5MiwgMHgyMDE5LCAweDAwMTEsIDB4MjBhOSwgMHgwMDBlLCAweDIwMTEsIDB4MDAzMiwKLQkweDAwNzgsIDB4Mzc1OCwgMHhhMTgyLCAweDAwMjgsIDB4MDA0MCwgMHgzNzUwLCAweDIwMDksIDB4MzdhMCwKLQkweDIwMTksIDB4MDAxNCwgMHgyMGE5LCAweDAwMGMsIDB4MjAxMSwgMHgwMDY0LCAweDAwNzgsIDB4Mzc1OCwKLQkweDIwMDksIDB4MzdhYywgMHgyMDE5LCAweDAwMTksIDB4MjBhOSwgMHgwMDBkLCAweDIwMTEsIDB4MDA2NCwKLQkweDIyMDAsIDB4YTUwMiwgMHgwMDQwLCAweDM3NjgsIDB4MDA0OCwgMHgzNzY4LCAweDgxMDgsIDB4MjMwMCwKLQkweGEyMTAsIDB4MDA3MCwgMHgzNzY1LCAweDAwNzgsIDB4Mzc1OCwgMHgxNTdmLCAweGEwMDYsIDB4MDA3YywKLQkweDE1N2YsIDB4YTU4MiwgMHgwMDY0LCAweDAwYzgsIDB4Mzc3NywgMHg3ODA4LCAweGEwODUsIDB4MDA3MCwKLQkweDc4MGEsIDB4NzA0NCwgMHhhMDg1LCAweDAwNzAsIDB4NzA0NiwgMHgwMDc4LCAweDM3NzcsIDB4NzhlYywKLQkweGEwODQsIDB4MDMwMCwgMHgwMDQwLCAweDM3N2YsIDB4MjEwNCwgMHgwMDc4LCAweDM3OTAsIDB4MjEwNCwKLQkweGEwOWUsIDB4MTEwMiwgMHgwMGMwLCAweDM3OTAsIDB4MjAwMSwgMHgwNGZkLCAweDIwMDQsIDB4YTA4MiwKLQkweDAwMDUsIDB4MDA0OCwgMHgzNzhmLCAweDIwMDEsIDB4MTIwMSwgMHgwMDc4LCAweDM3OTAsIDB4MjEwNCwKLQkweGEwMDUsIDB4MDA3YywgMHgxMTAyLCAweDMwMDIsIDB4MzIwMiwgMHg0MjAzLCAweDQ0MDMsIDB4NTQwNCwKLQkweDU2MDQsIDB4NjYwNSwgMHg2ODA1LCAweDc4MDYsIDB4N2EwNiwgMHgwYzA3LCAweDBjMDcsIDB4MGUwNywKLQkweDMyMDIsIDB4NDIwMiwgMHg1MjAyLCAweDYyMDIsIDB4NzIwMiwgMHg2NjA1LCAweDc2MDUsIDB4NzgwNSwKLQkweDdhMDUsIDB4N2MwNSwgMHg3ZTA1LCAweDdmMDUsIDB4MjIwMiwgMHgzMjAyLCAweDQyMDIsIDB4NTIwMiwKLQkweDU0MDQsIDB4NjQwNCwgMHg3NDA0LCAweDc2MDQsIDB4NzgwNCwgMHg3YTA0LCAweDdjMDQsIDB4N2UwNCwKLQkweDdmMDQsIDB4Nzg5YiwgMHgwMDEwLCAweGEwNDYsIDB4MDA3YywgMHhhNzg0LCAweDBmMDAsIDB4ODAwYiwKLQkweGE3ODQsIDB4MDAxZiwgMHg4MDAzLCAweDgwMDMsIDB4ODAwMywgMHg4MDAzLCAweGExMDUsIDB4YTBlMCwKLQkweDUzMDAsIDB4MDA3YywgMHg3OWQ4LCAweDdhZGMsIDB4NzhkMCwgMHg4MDFiLCAweDAwYzgsIDB4MzdkMSwKLQkweDgwMDAsIDB4YTA4NCwgMHgwMDNmLCAweGExMDgsIDB4YTI5MSwgMHgwMDAwLCAweDAwN2MsIDB4MGY3ZSwKLQkweDIwNzksIDB4MDEwMCwgMHgyMDA5LCAweDUwNDAsIDB4MjA5MSwgMHg4MDAwLCAweDIxMDQsIDB4MDA3OSwKLQkweDM3ZTEsIDB4MzgxNywgMHgzN2ViLCAweDM3ZWIsIDB4MzdlYiwgMHgzN2ViLCAweDM3ZWIsIDB4MzdlYiwKLQkweDM4MWIsIDB4MTA3OCwgMHgyM2NhLCAweDc4NGIsIDB4MDAwNCwgMHg3ODQ4LCAweGEwODQsIDB4MDAwNCwKLQkweDAwYzAsIDB4MzdlZCwgMHg3ODRiLCAweDAwMDgsIDB4Nzg0OCwgMHhhMDg0LCAweDAwMDgsIDB4MDBjMCwKLQkweDM3ZjQsIDB4NjhiNCwgMHhhMDg1LCAweDQwMDAsIDB4NjhiNiwgMHg3ODU4LCAweGEwODUsIDB4NDAwMCwKLQkweDc4NWEsIDB4NzgzMCwgMHhhMDg0LCAweDAwODAsIDB4MDBjMCwgMHgzODE3LCAweDAwMTgsIDB4MzgxNywKLQkweDY4MWMsIDB4YTA4NCwgMHgwMDIwLCAweDAwYzAsIDB4MzgxNSwgMHgwZTdlLCAweDIwNzEsIDB4NTA0MCwKLQkweDEwNzgsIDB4Mzg2OCwgMHgwZTdmLCAweDAwNzgsIDB4MzgxNywgMHg3ODFiLCAweDAwZDIsIDB4MjA5MSwKLQkweDgwMDEsIDB4MGY3ZiwgMHgwMDdjLCAweDEwNzgsIDB4M2E0MiwgMHgwMDc4LCAweDM4MTcsIDB4MGM3ZSwKLQkweDY4MTQsIDB4ODAwNywgMHhhMDg0LCAweDAwMGYsIDB4ODAwMywgMHg4MDAzLCAweDgwMDMsIDB4YTBlMCwKLQkweDUyODAsIDB4NjAwNCwgMHhhMDg0LCAweDAwMGEsIDB4MDBjMCwgMHgzODUyLCAweDYxMDgsIDB4YTE5NCwKLQkweGZmMDAsIDB4MDA0MCwgMHgzODUyLCAweGExOGMsIDB4MDBmZiwgMHgyMDAxLCAweDAwMTksIDB4YTEwNiwKLQkweDAwNDAsIDB4Mzg0MSwgMHgyMDAxLCAweDAwMzIsIDB4YTEwNiwgMHgwMDQwLCAweDM4NDUsIDB4MDA3OCwKLQkweDM4NDksIDB4MjAwOSwgMHgwMDIwLCAweDAwNzgsIDB4Mzg0YiwgMHgyMDA5LCAweDAwM2YsIDB4MDA3OCwKLQkweDM4NGIsIDB4MjAxMSwgMHgwMDAwLCAweDIxMDAsIDB4YTIwNSwgMHg2MDBhLCAweDYwMDQsIDB4YTA4NSwKLQkweDAwMDIsIDB4NjAwNiwgMHgwYzdmLCAweDAwN2MsIDB4NzgxYiwgMHgwMDY1LCAweDAwNzgsIDB4MjQzOCwKLQkweDc4MmIsIDB4MzAwOCwgMHg3ODFiLCAweDAwNjUsIDB4MDA3OCwgMHgyNDM4LCAweDc4MWIsIDB4MDA1OCwKLQkweDAwNzgsIDB4MjQzOCwgMHg3ODJiLCAweDMwMDgsIDB4NzgxYiwgMHgwMDU2LCAweDAwNzgsIDB4MjQzOCwKLQkweDIwMDksIDB4NTAyMCwgMHgyMTBjLCAweGExODYsIDB4MDAwMCwgMHgwMDQwLCAweDM4N2MsIDB4YTE4NiwKLQkweDAwMDEsIDB4MDA0MCwgMHgzODdmLCAweDIwMDksIDB4NTAzOCwgMHgyMDBiLCAweDAwMGIsIDB4NzA2ZiwKLQkweDAwMDEsIDB4NzgxYiwgMHgwMDQ4LCAweDAwN2MsIDB4NzgxYiwgMHgwMGNjLCAweDAwN2MsIDB4MjAwOSwKLQkweDUwMzgsIDB4MjAwYiwgMHgwMDBhLCAweDAwN2MsIDB4MjAwOSwgMHg1MDIwLCAweDIxMGMsIDB4YTE4NiwKLQkweDAwMDAsIDB4MDA0MCwgMHgzODlmLCAweGExODYsIDB4MDAwMSwgMHgwMDQwLCAweDM4OTksIDB4MjAwOSwKLQkweDUwMzgsIDB4MjAwYiwgMHgwMDBiLCAweDcwNmYsIDB4MDAwMSwgMHg3ODFiLCAweDAwNDgsIDB4MDA3OCwKLQkweDI0MzgsIDB4MjAwOSwgMHg1MDM4LCAweDIwMGIsIDB4MDAwYSwgMHgwMDc4LCAweDI0MzgsIDB4NzgyYiwKLQkweDMwMDgsIDB4NzgxYiwgMHgwMGNjLCAweDAwNzgsIDB4MjQzOCwgMHg3ODFiLCAweDAwZDIsIDB4MDA3OCwKLQkweDI0MzgsIDB4NzgyYiwgMHgzMDA4LCAweDc4MWIsIDB4MDBkMiwgMHgwMDc4LCAweDI0MzgsIDB4NzgxYiwKLQkweDAwOTMsIDB4MDA3OCwgMHgyNDM4LCAweDc4MmIsIDB4MzAwOCwgMHg3ODFiLCAweDAwOTMsIDB4MDA3OCwKLQkweDI0MzgsIDB4NjgxOCwgMHhhMDg0LCAweDgwMDAsIDB4MDA0MCwgMHgzOGMwLCAweDY4MWIsIDB4MDAxZCwKLQkweDcwNmYsIDB4MDAwMSwgMHg3ODFiLCAweDAwNDgsIDB4MDA3OCwgMHgyNDM4LCAweDAwN2UsIDB4NzgzMCwKLQkweGEwODQsIDB4MDBjMCwgMHgwMGMwLCAweDM4ZGMsIDB4NzgwOCwgMHhhMDg0LCAweGZmZmMsIDB4NzgwYSwKLQkweDAwMDUsIDB4MDAwNSwgMHgwMDA1LCAweDAwMDUsIDB4NzhlYywgMHhhMDg0LCAweDAwMjEsIDB4MDA0MCwKLQkweDM4ZGMsIDB4NzA0NCwgMHg3ODBhLCAweGEwMDUsIDB4MDA3ZiwgMHgwMDdjLCAweDcwNDQsIDB4YTA4NSwKLQkweDAwMDIsIDB4NzA0NiwgMHg3ODBhLCAweDAwN2MsIDB4MDA3ZSwgMHg3ODMwLCAweGEwODQsIDB4MDA0MCwKLQkweDAwYzAsIDB4MzhlNSwgMHgwMDk4LCAweDM4ZjAsIDB4MDA3ZiwgMHg3ODlhLCAweDc4YWMsIDB4MDA3YywKLQkweDc4MDgsIDB4YTA4NCwgMHhmZmZkLCAweDc4MGEsIDB4MDAwNSwgMHgwMDA1LCAweDAwMDUsIDB4MDAwNSwKLQkweDc4ZWMsIDB4YTA4NCwgMHgwMDIxLCAweDAwNDAsIDB4MzhmZiwgMHgwMDk4LCAweDM4ZmQsIDB4MDA3ZiwKLQkweDc4OWEsIDB4NzhhYywgMHgwMDdlLCAweDcwNDQsIDB4NzgwYSwgMHgwMDdmLCAweDAwN2MsIDB4NzhlYywKLQkweGEwODQsIDB4MDAwMiwgMHgwMGMwLCAweDQ2MWQsIDB4YTc4NCwgMHgwMDdkLCAweDAwYzAsIDB4MzkxMywKLQkweDI3MDAsIDB4MTA3OCwgMHgyM2NhLCAweGE3ODQsIDB4MDAwMSwgMHgwMGMwLCAweDJmNDMsIDB4YTc4NCwKLQkweDAwNzAsIDB4MDA0MCwgMHgzOTIzLCAweDBjN2UsIDB4MmQ2MCwgMHgyZjY4LCAweDEwNzgsIDB4MjM3NSwKLQkweDJkNzgsIDB4MmM2OCwgMHgwYzdmLCAweGE3ODQsIDB4MDAwOCwgMHgwMDQwLCAweDM5MzAsIDB4Nzg0YiwKLQkweDAwMDgsIDB4NzhlYywgMHhhMDg0LCAweDAwMDMsIDB4MDA0MCwgMHgyNDYxLCAweDAwNzgsIDB4Mzg1NCwKLQkweGE3ODQsIDB4MDAwNCwgMHgwMDQwLCAweDM5NjMsIDB4NzhiOCwgMHhhMDg0LCAweDQwMDEsIDB4MDA0MCwKLQkweDM5NjMsIDB4Nzg0YiwgMHgwMDA4LCAweDc4ZWMsIDB4YTA4NCwgMHgwMDAzLCAweDAwNDAsIDB4MjQ2MSwKLQkweDc4ZTQsIDB4YTA4NCwgMHgwMDA3LCAweGEwODYsIDB4MDAwMSwgMHgwMGMwLCAweDM5NjMsIDB4NzhjMCwKLQkweGEwODUsIDB4NDgwMCwgMHgyMDMwLCAweDdlNWEsIDB4NzgxYiwgMHgwMGQyLCAweDAwNzgsIDB4MjQzOCwKLQkweDc4NGIsIDB4MDAwOCwgMHg2ODE4LCAweGEwODQsIDB4ODAwMCwgMHgwMDQwLCAweDM5NWYsIDB4NjgxYiwKLQkweDAwMTUsIDB4YTY4NCwgMHg0MDAwLCAweDAwNDAsIDB4Mzk1ZiwgMHg2ODFiLCAweDAwMDcsIDB4MTA3OCwKLQkweDM4NjgsIDB4MDA3OCwgMHgyNDM4LCAweDY4MWIsIDB4MDAwMywgMHg3ODU4LCAweGEwODQsIDB4M2YwMCwKLQkweDY4MWUsIDB4NjgyZiwgMHgwMDAwLCAweDY4MzMsIDB4MDAwMCwgMHg3ODRiLCAweDAwMDgsIDB4NzhlYywKLQkweGEwODQsIDB4MDAwMywgMHgwMDQwLCAweDI5NDQsIDB4MDAxOCwgMHgyNDM4LCAweDAwNzgsIDB4MzY3MywKLQkweDZiMTQsIDB4ODMwNywgMHhhMDg0LCAweDAwMGYsIDB4ODAwMywgMHg4MDAzLCAweDgwMDMsIDB4YTA4MCwKLQkweDUyODAsIDB4MjA2MCwgMHgyMDQ4LCAweDcwNTYsIDB4NjAwMCwgMHg3MDVhLCAweDYwMDQsIDB4NzA1ZSwKLQkweDJhNjAsIDB4MDA3YywgMHgwMDc5LCAweDM5OGMsIDB4Mzk5NCwgMHgzOTk1LCAweDM5OTQsIDB4Mzk5NywKLQkweDM5OTQsIDB4Mzk5NCwgMHgzOTk0LCAweDM5OWMsIDB4MDA3YywgMHgxMDc4LCAweDMzYzQsIDB4MTA3OCwKLQkweDQ2MzMsIDB4NzAzOCwgMHg2MDBhLCAweDAwN2MsIDB4NzBhMCwgMHhhMDA1LCAweDAwNDAsIDB4MzlhOSwKLQkweDIwNjgsIDB4MTA3OCwgMHgxYjQ1LCAweDEwNzgsIDB4NDViNSwgMHgxMDc4LCAweDQ1YmMsIDB4NzBhMywKLQkweDAwMDAsIDB4MDA3YywgMHgwZTdlLCAweDIwOTEsIDB4ODAwMCwgMHgyMDcxLCAweDUwNDAsIDB4NzAwMCwKLQkweGEwODYsIDB4MDAwNywgMHgwMGMwLCAweDM5YzAsIDB4NjExMCwgMHg3MGJjLCAweGExMDYsIDB4MDBjMCwKLQkweDM5YzAsIDB4MGU3ZiwgMHgxMDc4LCAweDFiNTIsIDB4MTA3OCwgMHgzOWM2LCAweGEwMDYsIDB4MDA3YywKLQkweDIwOTEsIDB4ODAwMSwgMHgwZTdmLCAweGEwODUsIDB4MDAwMSwgMHgwMDdjLCAweDBmN2UsIDB4MGU3ZSwKLQkweDIwNzEsIDB4NTA0MCwgMHgwMDc4LCAweDIxZDksIDB4Nzg1YiwgMHgwMDAwLCAweDcwYWYsIDB4MDAwZSwKLQkweDIwMDksIDB4MDEwMCwgMHgwMTdlLCAweDcwYTAsIDB4YTA2ZCwgMHgwMDQwLCAweDM5ZGIsIDB4NzBhMywKLQkweDAwMDAsIDB4MDA3OCwgMHgzOWUxLCAweDcwYjMsIDB4MDAwMCwgMHgxMDc4LCAweDFiNmUsIDB4MDA0MCwKLQkweDM5ZTcsIDB4NzBhYywgMHg2ODI2LCAweDEwNzgsIDB4M2FjMiwgMHgwMDc4LCAweDM5ZGIsIDB4MDE3ZiwKLQkweDE1N2UsIDB4MGM3ZSwgMHgwZDdlLCAweDIwYTksIDB4MDAwOCwgMHgyMDYxLCAweDc0MTAsIDB4NjAwMCwKLQkweGExMDUsIDB4NjAwMiwgMHg2MDFjLCAweGEwNmQsIDB4MDA0MCwgMHgzOWZmLCAweDY4MDAsIDB4NjAxZSwKLQkweDEwNzgsIDB4MTkzZCwgMHg2MDA4LCAweDgwMDAsIDB4NjAwYSwgMHgwMDc4LCAweDM5ZjIsIDB4NjAxOCwKLQkweGEwNmQsIDB4MDA0MCwgMHgzYTA5LCAweDY4MDAsIDB4NjAxYSwgMHgxMDc4LCAweDE5M2QsIDB4MDA3OCwKLQkweDM5ZmYsIDB4YWNlMCwgMHgwMDA4LCAweDAwNzAsIDB4M2EwZiwgMHgwMDc4LCAweDM5ZWYsIDB4NzA5YywKLQkweGEwODQsIDB4ODAwMCwgMHgwMDQwLCAweDNhMTYsIDB4MTA3OCwgMHgzYjNjLCAweDBkN2YsIDB4MGM3ZiwKLQkweDE1N2YsIDB4MDA3YywgMHgxMjdlLCAweDIwOTEsIDB4MjMwMCwgMHg2ODA0LCAweGEwODQsIDB4MDAwZiwKLQkweDAwNzksIDB4M2EyMiwgMHgzYTMyLCAweDNhMzIsIDB4M2EzMiwgMHgzYTMyLCAweDNhMzIsIDB4M2EzMiwKLQkweDNhMzQsIDB4M2EzYSwgMHgzYTMyLCAweDNhMzIsIDB4M2EzMiwgMHgzYTMyLCAweDNhMzIsIDB4M2EzYywKLQkweDNhMzIsIDB4M2EzNCwgMHgxMDc4LCAweDIzY2EsIDB4MTA3OCwgMHg0NDY2LCAweDEwNzgsIDB4MTkzZCwKLQkweDAwNzgsIDB4M2E0MCwgMHg2ODI3LCAweDAwMGIsIDB4MTA3OCwgMHg0NDY2LCAweDEwNzgsIDB4M2FjMiwKLQkweDEyN2YsIDB4MDA3YywgMHgxMjdlLCAweDIwOTEsIDB4MjMwMCwgMHgwMDk4LCAweDNhNWUsIDB4NzgzMCwKLQkweGEwODQsIDB4MDBjMCwgMHgwMGMwLCAweDNhNWUsIDB4MGQ3ZSwgMHgxMDc4LCAweDQ1YzUsIDB4MmQwMCwKLQkweDY4MmUsIDB4MjAwOSwgMHgwMDA0LCAweDIwMDEsIDB4MDAwMCwgMHg2ODI3LCAweDAwODQsIDB4MTA3OCwKLQkweDQ1N2UsIDB4MTA3OCwgMHgzYWMyLCAweDBkN2YsIDB4MDA3OCwgMHgzYTkwLCAweDc5NDgsIDB4YTE4NSwKLQkweDQwMDAsIDB4Nzg0YSwgMHgwMDk4LCAweDNhNjcsIDB4Nzk0YSwgMHgwMDc4LCAweDNhNGMsIDB4NzgyOCwKLQkweGEwODYsIDB4MTgzNCwgMHgwMGMwLCAweDNhNzAsIDB4YTE4NSwgMHgwMDA0LCAweDAwNzgsIDB4M2E3NywKLQkweDc4MjgsIDB4YTE4NiwgMHgxODE0LCAweDAwYzAsIDB4M2E2NCwgMHhhMTg1LCAweDAwMGMsIDB4Nzg0YSwKLQkweDc4OWIsIDB4MDAwZSwgMHg3OGFiLCAweDAwMDIsIDB4Nzg1OCwgMHhhMDg0LCAweDAwZmYsIDB4YTA4NSwKLQkweDA0MDAsIDB4Nzg1YSwgMHg3MGI0LCAweGEwODAsIDB4MDA5MSwgMHg3ODFhLCAweDY4MjcsIDB4MDAwMiwKLQkweDY4MjcsIDB4MDA4NCwgMHgyMDA5LCAweDAwMDQsIDB4MjAwMSwgMHgwMDAwLCAweDEwNzgsIDB4NDU3ZSwKLQkweDEyN2YsIDB4MDA3YywgMHgwZDdlLCAweDZiMTQsIDB4MTA3OCwgMHgxYmUwLCAweDAwNDAsIDB4M2E5ZiwKLQkweDIwNjgsIDB4NjgyNywgMHgwMDAyLCAweDEwNzgsIDB4M2FjMiwgMHgwMDc4LCAweDNhOTQsIDB4MGQ3ZiwKLQkweDAwN2MsIDB4MGQ3ZSwgMHg2YjE0LCAweDZjMjgsIDB4YTRhNCwgMHgwMGZmLCAweDEwNzgsIDB4MWI3ZSwKLQkweDAwNDAsIDB4M2FhZiwgMHgyMDY4LCAweDY4MjcsIDB4MDAwMiwgMHgxMDc4LCAweDNhYzIsIDB4MGQ3ZiwKLQkweDAwN2MsIDB4MGQ3ZSwgMHg2YjE0LCAweGEzOWMsIDB4MDBmZiwgMHgxMDc4LCAweDFiYjEsIDB4MDA0MCwKLQkweDNhYzAsIDB4MjA2OCwgMHg2ODI3LCAweDAwMDIsIDB4MTA3OCwgMHgzYWMyLCAweDAwNzgsIDB4M2FiNSwKLQkweDBkN2YsIDB4MDA3YywgMHgwYzdlLCAweDY5MTQsIDB4MTA3OCwgMHgzYjMzLCAweDY5MDQsIDB4YTE4YywKLQkweDAwZmYsIDB4YTE4NiwgMHgwMDA2LCAweDAwNDAsIDB4M2FkZCwgMHhhMTg2LCAweDAwMGQsIDB4MDA0MCwKLQkweDNhZmMsIDB4YTE4NiwgMHgwMDE3LCAweDAwYzAsIDB4M2FkOSwgMHgxMDc4LCAweDE5M2QsIDB4MDA3OCwKLQkweDNhZGIsIDB4MTA3OCwgMHgxYzU1LCAweDBjN2YsIDB4MDA3YywgMHg2MDA0LCAweDgwMDEsIDB4MDA0OCwKLQkweDNhZmEsIDB4NjAwNiwgMHgyMDA5LCAweDAwMDAsIDB4YTY4NCwgMHgwMDAxLCAweDAwYzAsIDB4M2FlYSwKLQkweGExOGQsIDB4ODAwMCwgMHhhNjg0LCAweDAwMDQsIDB4MDA0MCwgMHgzYWYwLCAweGExOGQsIDB4MDAwMiwKLQkweDY5MWUsIDB4NjgyMywgMHgwMDAwLCAweDcxMDQsIDB4ODEwZiwgMHg2ODE4LCAweGExMDUsIDB4NjgxYSwKLQkweDAwNzgsIDB4M2FkOSwgMHgxMDc4LCAweDIzY2EsIDB4NjAxOCwgMHhhMDA1LCAweDAwYzAsIDB4M2IwYiwKLQkweDYwMDgsIDB4ODAwMSwgMHgwMDQ4LCAweDNiMGIsIDB4NjAwYSwgMHg2MDFjLCAweDY4MDIsIDB4MmQwMCwKLQkweDYwMWUsIDB4MDA3OCwgMHgzYjIxLCAweGFjODgsIDB4MDAwNiwgMHgyMTA0LCAweGEwMDUsIDB4MDA0MCwKLQkweDNiMTQsIDB4MjAwOCwgMHgwMDc4LCAweDNiMGQsIDB4NjgwMiwgMHgyZDBhLCAweDYwMDgsIDB4ODAwMSwKLQkweDAwNDgsIDB4M2FkYiwgMHg2MDBhLCAweDYwMTgsIDB4MjA2OCwgMHg2ODAwLCAweDYwMWEsIDB4MDA3OCwKLQkweDNiMDUsIDB4MTU3ZSwgMHgxMzdlLCAweDE0N2UsIDB4MGM3ZSwgMHgwZDdlLCAweDEwNzgsIDB4MTkxYSwKLQkweDJkYTAsIDB4MTM3ZiwgMHgyMGE5LCAweDAwMzEsIDB4NTNhMywgMHgwYzdmLCAweDE0N2YsIDB4MTM3ZiwKLQkweDE1N2YsIDB4MDA3OCwgMHgzYWQ5LCAweGExODQsIDB4MDAxZiwgMHg4MDAzLCAweDgwMDMsIDB4ODAwMywKLQkweGEwODAsIDB4NzQxMCwgMHgyMDYwLCAweDAwN2MsIDB4MjAxOSwgMHg1MDUxLCAweDIzMDQsIDB4YTA4NSwKLQkweDAwMDEsIDB4MjAxYSwgMHgyMDE5LCAweDAxMDIsIDB4MjMwNCwgMHhhMDg1LCAweDAwMDEsIDB4MjAxYSwKLQkweDAwN2MsIDB4MjAxOSwgMHg1MDUxLCAweDIzMDQsIDB4YTA4NCwgMHhmZmZlLCAweDIwMWEsIDB4MjAxOSwKLQkweDAxMDIsIDB4MjMwNCwgMHhhMDg0LCAweGZmZmUsIDB4MjAxYSwgMHgwMDdjLCAweDc5OTAsIDB4YTE4YywKLQkweGZmZjgsIDB4Nzk5MiwgMHg3MGI0LCAweGEwODAsIDB4MDBkOCwgMHg3ODFhLCAweDAwNzgsIDB4MjQzOCwKLQkweDcwYTMsIDB4MDAwMCwgMHg3MDAzLCAweDAwMDAsIDB4NzA0MywgMHgwMDAxLCAweDcwMzcsIDB4MDAwMCwKLQkweDAwMTgsIDB4MjNlZiwgMHgxMDc4LCAweDFiNmUsIDB4MDA0MCwgMHgzYjkxLCAweDIwMDksIDB4NTAwZiwKLQkweDIwMGIsIDB4MDAwMCwgMHg2OGJjLCAweDIwNjAsIDB4NjEwMCwgMHhhMTg0LCAweDAzMDAsIDB4MDA0MCwKLQkweDNiODUsIDB4NjgyNywgMHgwMDBlLCAweGEwODQsIDB4MDIwMCwgMHgwMDQwLCAweDNiODEsIDB4NjgyNywKLQkweDAwMTcsIDB4MTA3OCwgMHgzYWMyLCAweDAwNzgsIDB4M2I2MCwgMHg3MDAwLCAweGEwODYsIDB4MDAwNywKLQkweDAwYzAsIDB4M2JlMywgMHgyZDAwLCAweDcwYTIsIDB4YWQ4MCwgMHgwMDBmLCAweDcwMzYsIDB4MDA3OCwKLQkweDNiOTgsIDB4NzA0MCwgMHhhMDg2LCAweDAwMDEsIDB4MDA0MCwgMHgyNDcxLCAweDAwNzgsIDB4MjQzOCwKLQkweDIwMzEsIDB4MDAwMCwgMHg2OTFjLCAweGExODQsIDB4MDAwMiwgMHgwMDQwLCAweDNiYTEsIDB4YTZiNSwKLQkweDAwMDQsIDB4YTE4NCwgMHgwMGMwLCAweDgwMDMsIDB4ODAwMywgMHg4MDA3LCAweGEwODAsIDB4M2M3MiwKLQkweDIwMDQsIDB4YTYzNSwgMHg2ODIwLCAweGEwODQsIDB4MDQwMCwgMHgwMDQwLCAweDNiYjksIDB4Nzg5YiwKLQkweDAwMTgsIDB4NzhhYiwgMHgwMDAzLCAweDc4OWIsIDB4MDA4MSwgMHg3OGFiLCAweDAwMDEsIDB4YTZiNSwKLQkweDEwMDAsIDB4NjgyMCwgMHhhMDg0LCAweDgwMDAsIDB4MDA0MCwgMHgzYmM1LCAweGE2YjUsIDB4MDQwMCwKLQkweDc4OWIsIDB4MDAwZSwgMHg2ODI0LCAweDgwMDcsIDB4NzhhYSwgMHhhNjg0LCAweDAyMDAsIDB4MDA0MCwKLQkweDNiZGYsIDB4NjgyYywgMHg3OGQyLCAweDY4MzAsIDB4NzhkNiwgMHhhNjg0LCAweDAxMDAsIDB4MDA0MCwKLQkweDNiZGQsIDB4NjgyYywgMHhhMDg0LCAweDAwMDEsIDB4MDA0MCwgMHgzYmRkLCAweDc4ODgsIDB4YTA4NCwKLQkweDAwNDAsIDB4MDA0MCwgMHgzYmRkLCAweGE2YjUsIDB4ODAwMCwgMHgxMDc4LCAweDQ1YWQsIDB4N2U1YSwKLQkweDZlYjYsIDB4MDA3OCwgMHg0NWU0LCAweDEwNzgsIDB4MzhjNiwgMHgwMGMwLCAweDNjNmMsIDB4NzAyYywKLQkweDgwMDQsIDB4MDA0OCwgMHgzYmYxLCAweDIwMTksIDB4NGNmZCwgMHgxMDc4LCAweDIyNTUsIDB4NzAyZiwKLQkweDAwMDEsIDB4MjAxMSwgMHgwMDAxLCAweDIwMzEsIDB4MTAwMCwgMHg3ODliLCAweDAwMTgsIDB4NjgxNCwKLQkweGEwODQsIDB4MDAxZiwgMHhhMDg1LCAweDAwODAsIDB4NzhhYSwgMHg2OTFjLCAweGExODQsIDB4MDAwMiwKLQkweDAwNDAsIDB4M2MwYSwgMHhhNmI1LCAweDAwMDQsIDB4NzhhYiwgMHgwMDIwLCAweDY4MjgsIDB4NzhhYSwKLQkweGEyOTAsIDB4MDAwMiwgMHg2ODIwLCAweGEwODQsIDB4ODAwMCwgMHgwMDQwLCAweDNjMTgsIDB4YTZiNSwKLQkweDA0MDAsIDB4Nzg5YiwgMHgwMDBlLCAweDY4MjQsIDB4ODAwNywgMHg3OGFhLCAweDAwNzgsIDB4M2MyNiwKLQkweDY4MWMsIDB4YTA4NCwgMHg4MDAwLCAweDAwYzAsIDB4M2MyNiwgMHhhNmI1LCAweDA4MDAsIDB4NjgyMCwKLQkweGEwODQsIDB4MDEwMCwgMHgwMDQwLCAweDNjMjYsIDB4YTZiNSwgMHg0MDAwLCAweDY4MWMsIDB4YTA4NCwKLQkweDAwYzAsIDB4ODAwMywgMHg4MDAzLCAweDgwMDcsIDB4YTA4MCwgMHgzYzcyLCAweDIwMDQsIDB4YTYzNSwKLQkweGE2ODQsIDB4MDEwMCwgMHgwMDQwLCAweDNjNDAsIDB4NjgyYywgMHhhMDg0LCAweDAwMDEsIDB4MDA0MCwKLQkweDNjNDAsIDB4Nzg4OCwgMHhhMDg0LCAweDAwNDAsIDB4MDA0MCwgMHgzYzQwLCAweGE2YjUsIDB4ODAwMCwKLQkweDc4OWIsIDB4MDA3ZSwgMHg3ZWFlLCAweDZlYjYsIDB4NjgxNCwgMHg4MDA3LCAweDc4YWEsIDB4Nzg4MiwKLQkweDdhYWEsIDB4NzgzMCwgMHhhMDg0LCAweDAwYzAsIDB4MDBjMCwgMHgzYzZjLCAweDAwMTgsIDB4M2M2YywKLQkweDcwYjQsIDB4YTA4MCwgMHgwMGRkLCAweDc4MWEsIDB4MTA3OCwgMHgzOGRlLCAweGE2ODQsIDB4MDIwMCwKLQkweDAwNDAsIDB4M2M2MCwgMHg2ODJjLCAweDc4ZDIsIDB4NjgzMCwgMHg3OGQ2LCAweDEwNzgsIDB4NDVhZCwKLQkweDJkMDAsIDB4NzBhMiwgMHg3MDRhLCAweDY4MTAsIDB4NzBiZSwgMHg3MDAzLCAweDAwMDcsIDB4YWQ4MCwKLQkweDAwMGYsIDB4NzAzNiwgMHgwMDc4LCAweDI0MzgsIDB4MTA3OCwgMHgxYjQ1LCAweDEwNzgsIDB4MzhkZSwKLQkweDAwNzgsIDB4MjQzOCwgMHgwMDAwLCAweDAzMDAsIDB4MDIwMCwgMHgwMDAwLCAweDEwNzgsIDB4MjNjYSwKLQkweDIzMDAsIDB4MDA3OSwgMHgzYzdiLCAweDNjN2UsIDB4M2M3ZSwgMHgzYzgwLCAweDEwNzgsIDB4MjNjYSwKLQkweDEwNzgsIDB4NDViYywgMHg2OTI0LCAweGExODQsIDB4MDBmZiwgMHhhMDg2LCAweDAwMGEsIDB4MDA0MCwKLQkweDNjOTIsIDB4YTE4NCwgMHhmZjAwLCAweGEwODUsIDB4MDAwYSwgMHg2ODI2LCAweDEwNzgsIDB4MWI0NSwKLQkweDAwNzgsIDB4M2I2MCwgMHgyMDAxLCAweDAwMGEsIDB4MTA3OCwgMHg0NTRjLCAweDAwNzgsIDB4M2I2MCwKLQkweGEyODIsIDB4MDAwNSwgMHgwMDUwLCAweDNjOWUsIDB4MTA3OCwgMHgyM2NhLCAweDcwMDAsIDB4YTA4NCwKLQkweDAwMDcsIDB4MTBjMCwgMHgzOThhLCAweDEwNzgsIDB4MTkxYSwgMHgwMGMwLCAweDNjYmQsIDB4YTY4NCwKLQkweDAwMDQsIDB4MDA0MCwgMHgzY2FmLCAweDIwMDEsIDB4MjgwMCwgMHgwMDc4LCAweDNjYjEsIDB4MjAwMSwKLQkweDA4MDAsIDB4NzFiNCwgMHhhMTg4LCAweDAwOTEsIDB4Nzg5YiwgMHgwMDBlLCAweDc4YWEsIDB4MjAzMSwKLQkweDA0MDAsIDB4N2U1YSwgMHg3OTFhLCAweDAwNzgsIDB4MjQzOCwgMHg2ODA3LCAweDAxMDYsIDB4NjgwYiwKLQkweDAwMDAsIDB4Njg5ZiwgMHgwMDAwLCAweDY4MjcsIDB4MDAwMCwgMHhhMzg2LCAweDAwMDIsIDB4MDBjMCwKLQkweDNjZGUsIDB4YTI4NiwgMHgwMDAyLCAweDAwYzAsIDB4M2NkZSwgMHg3OGEwLCAweGEwMDUsIDB4MDBjMCwKLQkweDNjZGUsIDB4YTQ4NCwgMHg4MDAwLCAweDAwYzAsIDB4M2NkZSwgMHg3OGU0LCAweGEwODQsIDB4MDAwOCwKLQkweDAwNDAsIDB4M2NkZSwgMHhhNmI1LCAweDAwMDgsIDB4MjAxOSwgMHgwMDAwLCAweDEwNzgsIDB4NDBkMywKLQkweDJkMDAsIDB4NzBhMiwgMHg3MDRhLCAweDcwMDMsIDB4MDAwNywgMHg3MDM3LCAweDAwMDAsIDB4NjgyNCwKLQkweGEwODQsIDB4MDA4MCwgMHgwMDQwLCAweDNjZjAsIDB4MTA3OCwgMHg0MTgwLCAweDAwNzgsIDB4MjQzOCwKLQkweDIzMDAsIDB4MDA3OSwgMHgzY2YzLCAweDNjZjYsIDB4M2Q3NywgMHgzZDk2LCAweDIyMDAsIDB4MDA3OSwKLQkweDNjZjksIDB4M2NmZSwgMHgzZDBlLCAweDNkMzQsIDB4M2Q0MCwgMHgzZDYzLCAweDIwMjksIDB4MDAwMSwKLQkweGEwMjYsIDB4MjAxMSwgMHgwMDAwLCAweDEwNzgsIDB4NDI4ZCwgMHgwMDc5LCAweDNkMDcsIDB4M2QwYywKLQkweDI0MzgsIDB4M2I2MCwgMHgzZDBjLCAweDNkMGMsIDB4MTA3OCwgMHgyM2NhLCAweDc5OTAsIDB4YTE4YywKLQkweDAwMDcsIDB4MDBjMCwgMHgzZDE1LCAweDIwMDksIDB4MDAwOCwgMHgyMDExLCAweDAwMDEsIDB4YTY4NCwKLQkweDAwMDQsIDB4MDA0MCwgMHgzZDFkLCAweDIwMTEsIDB4MDAwMywgMHgyMjIwLCAweGExMmEsIDB4MjAxMSwKLQkweDAwMDEsIDB4MTA3OCwgMHg0MjhkLCAweDAwNzksIDB4M2QyNSwgMHgzZDJhLCAweDI0MzgsIDB4M2I2MCwKLQkweDNkMzIsIDB4M2QyYywgMHgwMDc4LCAweDQ1ZWEsIDB4NzBhYiwgMHgzZDMwLCAweDAwNzgsIDB4MjQzOCwKLQkweDAwNzgsIDB4M2QyYSwgMHgxMDc4LCAweDIzY2EsIDB4YTY4NCwgMHgwMDEwLCAweDAwNDAsIDB4M2QzZSwKLQkweDEwNzgsIDB4NDE0ZiwgMHgwMDQwLCAweDNkM2UsIDB4MDA3OCwgMHgyNDM4LCAweDAwNzgsIDB4NDFiYywKLQkweDYwMDAsIDB4YTA4NCwgMHgwMDAyLCAweDAwNDAsIDB4M2Q1ZCwgMHg3MGI0LCAweGEwODAsIDB4MDBjZCwKLQkweDc4MWEsIDB4MGQ3ZSwgMHgxMDc4LCAweDQ1YzUsIDB4MmQwMCwgMHg2ODJlLCAweDY4MjcsIDB4MDAwMCwKLQkweDEwNzgsIDB4M2FjMiwgMHgwZDdmLCAweDEwNzgsIDB4MTkzZCwgMHg3MDAzLCAweDAwMDAsIDB4NzAzNywKLQkweDAwMDAsIDB4NzA0YiwgMHgwMDAwLCAweDAwNzgsIDB4M2I2MCwgMHhhNjg0LCAweDAwMDQsIDB4MDBjMCwKLQkweDNkNjMsIDB4MDA3OCwgMHg0NWVhLCAweDYwMDAsIDB4YTA4NCwgMHgwMDA0LCAweDAwYzAsIDB4M2Q3NSwKLQkweDYwMDAsIDB4YTA4NCwgMHgwMDAxLCAweDAwNDAsIDB4M2Q3NSwgMHg3MGFiLCAweDNkNzUsIDB4MjAwMSwKLQkweDAwMDcsIDB4MTA3OCwgMHg0NTQ0LCAweDAwNzgsIDB4NDVmMCwgMHgwMDc4LCAweDQ1ZWEsIDB4MjIwMCwKLQkweDAwNzksIDB4M2Q3YSwgMHgzZDdmLCAweDNkN2YsIDB4M2Q3ZiwgMHgzZDgxLCAweDNkN2YsIDB4MTA3OCwKLQkweDIzY2EsIDB4NzBhNywgMHgzZDg1LCAweDAwNzgsIDB4NDVmNiwgMHgyMDExLCAweDAwMTgsIDB4MTA3OCwKLQkweDQyODcsIDB4MDA3OSwgMHgzZDhiLCAweDNkOTAsIDB4MjQzOCwgMHgzYjYwLCAweDNkOTIsIDB4M2Q5NCwKLQkweDEwNzgsIDB4MjNjYSwgMHgxMDc4LCAweDIzY2EsIDB4MTA3OCwgMHgyM2NhLCAweDIyMDAsIDB4MDA3OSwKLQkweDNkOTksIDB4M2Q5ZSwgMHgzZGEwLCAweDNkYTAsIDB4M2Q5ZSwgMHgzZDllLCAweDEwNzgsIDB4MjNjYSwKLQkweDc4ZTQsIDB4YTA4NCwgMHgwMDA4LCAweDAwNDAsIDB4M2RiNSwgMHg3MGE3LCAweDNkYTksIDB4MDA3OCwKLQkweDQ1ZjYsIDB4MjAxMSwgMHgwMDA0LCAweDEwNzgsIDB4NDI4NywgMHgwMDc5LCAweDNkYWYsIDB4M2RiNSwKLQkweDI0MzgsIDB4M2I2MCwgMHgzZGI1LCAweDNkYmYsIDB4M2RjMywgMHg3MGFiLCAweDNkYmQsIDB4MjAwMSwKLQkweDAwMDMsIDB4MTA3OCwgMHg0NTQ0LCAweDAwNzgsIDB4NDVmMCwgMHgwMDc4LCAweDQ1ZWEsIDB4NzBhYiwKLQkweDNkYjUsIDB4MDA3OCwgMHgyNDM4LCAweDcwYWIsIDB4M2RjNywgMHgwMDc4LCAweDI0MzgsIDB4MDA3OCwKLQkweDNkYmQsIDB4YTI4MiwgMHgwMDAzLCAweDAwNTAsIDB4M2RjZiwgMHgxMDc4LCAweDIzY2EsIDB4YTM4NiwKLQkweDAwMDIsIDB4MDBjMCwgMHgzZGU4LCAweGEyODYsIDB4MDAwMiwgMHgwMGMwLCAweDNkZWUsIDB4NzhhMCwKLQkweGEwMDUsIDB4MDBjMCwgMHgzZGVlLCAweGE0ODQsIDB4ODAwMCwgMHgwMGMwLCAweDNkZWUsIDB4NzhlNCwKLQkweGEwODQsIDB4MDAwOCwgMHgwMDQwLCAweDNkZTgsIDB4YTZiNSwgMHgwMDA4LCAweDIwMTksIDB4MDAwMCwKLQkweGE2ODQsIDB4MDAwOCwgMHgwMDQwLCAweDNkZWUsIDB4MTA3OCwgMHg0MTJjLCAweDY4MTAsIDB4NzBiZSwKLQkweDcwMDMsIDB4MDAwNywgMHgyMzAwLCAweDAwNzksIDB4M2RmNSwgMHgzZGY4LCAweDNlMjUsIDB4M2UyZCwKLQkweDIyMDAsIDB4MDA3OSwgMHgzZGZiLCAweDNlMDAsIDB4M2RmZSwgMHgzZTE5LCAweDEwNzgsIDB4MjNjYSwKLQkweDc5OTAsIDB4YTFhYywgMHgwMDA3LCAweGEwMjYsIDB4MjAxMSwgMHgwMDAxLCAweDEwNzgsIDB4NDI4ZCwKLQkweDAwNzksIDB4M2UwYSwgMHgzZTBmLCAweDI0MzgsIDB4M2I2MCwgMHgzZTE3LCAweDNlMTEsIDB4MDA3OCwKLQkweDQ1ZWEsIDB4NzBhYiwgMHgzZTE1LCAweDAwNzgsIDB4MjQzOCwgMHgwMDc4LCAweDNlMGYsIDB4MTA3OCwKLQkweDIzY2EsIDB4YTY4NCwgMHgwMDEwLCAweDAwNDAsIDB4M2UyMywgMHgxMDc4LCAweDQxNGYsIDB4MDA0MCwKLQkweDNlMjMsIDB4MDA3OCwgMHgyNDM4LCAweDAwNzgsIDB4NDFiYywgMHgyMjAwLCAweDAwNzksIDB4M2UyOCwKLQkweDNlMmIsIDB4M2UyYiwgMHgzZTJiLCAweDEwNzgsIDB4MjNjYSwgMHgyMjAwLCAweDAwNzksIDB4M2UzMCwKLQkweDNlMzMsIDB4M2UzNSwgMHgzZTM1LCAweDEwNzgsIDB4MjNjYSwgMHg3OGU0LCAweGEwODQsIDB4MDAwOCwKLQkweDAwNDAsIDB4M2U0YSwgMHg3MGE3LCAweDNlM2UsIDB4MDA3OCwgMHg0NWY2LCAweDIwMTEsIDB4MDAwNCwKLQkweDEwNzgsIDB4NDI4NywgMHgwMDc5LCAweDNlNDQsIDB4M2U0YSwgMHgyNDM4LCAweDNiNjAsIDB4M2U0YSwKLQkweDNlNTQsIDB4M2U1OCwgMHg3MGFiLCAweDNlNTIsIDB4MjAwMSwgMHgwMDAzLCAweDEwNzgsIDB4NDU0NCwKLQkweDAwNzgsIDB4NDVmMCwgMHgwMDc4LCAweDQ1ZWEsIDB4NzBhYiwgMHgzZTRhLCAweDAwNzgsIDB4MjQzOCwKLQkweDcwYWIsIDB4M2U1YywgMHgwMDc4LCAweDI0MzgsIDB4MDA3OCwgMHgzZTUyLCAweDIzMDAsIDB4MDA3OSwKLQkweDNlNjEsIDB4M2U2NiwgMHgzZTY4LCAweDNlNjQsIDB4MTA3OCwgMHgyM2NhLCAweDcwYTQsIDB4MDA3YSwKLQkweDcwYTQsIDB4MDA3YSwgMHhhMjgyLCAweDAwMDIsIDB4MDA1MCwgMHgzZTcwLCAweDEwNzgsIDB4MjNjYSwKLQkweGE2ODQsIDB4MDIwMCwgMHgwMDQwLCAweDNlN2EsIDB4MTA3OCwgMHg0NWI1LCAweDEwNzgsIDB4NDI2ZiwKLQkweDEwNzgsIDB4NDViYywgMHgyMzAwLCAweDAwNzksIDB4M2U3ZCwgMHgzZTgwLCAweDNlYTQsIDB4M2YwYSwKLQkweGEyODYsIDB4MDAwMSwgMHgwMDQwLCAweDNlODYsIDB4MTA3OCwgMHgyM2NhLCAweGE2ODQsIDB4MDIwMCwKLQkweDAwNDAsIDB4M2U4ZSwgMHgxMDc4LCAweDQ1YjUsIDB4MTA3OCwgMHg0NWJjLCAweDIwMDEsIDB4MDAwMSwKLQkweDEwNzgsIDB4NDU0YywgMHg3OGI4LCAweGEwODQsIDB4YzAwMSwgMHgwMDQwLCAweDNlYTAsIDB4Nzg0OCwKLQkweGEwODUsIDB4MDAwOCwgMHg3ODRhLCAweDc4NDgsIDB4YTA4NCwgMHgwMDA4LCAweDAwYzAsIDB4M2U5YiwKLQkweDcwMDMsIDB4MDAwMCwgMHgwMDc4LCAweDNiNjAsIDB4MjIwMCwgMHgwMDc5LCAweDNlYTcsIDB4M2VhOSwKLQkweDNlZGEsIDB4NzBhNywgMHgzZWFkLCAweDAwNzgsIDB4NDVmNiwgMHgyMDExLCAweDAwMGQsIDB4MTA3OCwKLQkweDQyODcsIDB4MDA3OSwgMHgzZWIzLCAweDNlYmEsIDB4MjQzOCwgMHgzYjYwLCAweDNlYzIsIDB4M2VjYSwKLQkweDNlZDAsIDB4M2VkMiwgMHhhNmI0LCAweDAwZmYsIDB4YTZiNSwgMHgwNDAwLCAweDZlYjYsIDB4N2U1YSwKLQkweDAwNzgsIDB4NDVlNCwgMHhhNmI0LCAweDAwZmYsIDB4YTZiNSwgMHgwNDAwLCAweDZlYjYsIDB4N2U1YSwKLQkweDAwNzgsIDB4NDVlNCwgMHg3MGFiLCAweDNlY2UsIDB4MDA3OCwgMHgyNDM4LCAweDAwNzgsIDB4M2ViYSwKLQkweDEwNzgsIDB4MjNjYSwgMHg3MGFiLCAweDNlZDYsIDB4MDA3OCwgMHgyNDM4LCAweDEwNzgsIDB4NDVmYywKLQkweDAwNzgsIDB4MjQzOCwgMHg3MGE3LCAweDNlZGUsIDB4MDA3OCwgMHg0NWY2LCAweDIwMTEsIDB4MDAxMiwKLQkweDEwNzgsIDB4NDI4NywgMHgwMDc5LCAweDNlZTQsIDB4M2VlYSwgMHgyNDM4LCAweDNiNjAsIDB4M2VmNiwKLQkweDNlZmUsIDB4M2YwNCwgMHhhNmI0LCAweDAwZmYsIDB4YTZiNSwgMHgwNDAwLCAweDZlYjYsIDB4N2U1YSwKLQkweDcwYjQsIDB4YTA4MCwgMHgwMGE1LCAweDc4MWEsIDB4MDA3OCwgMHgyNDM4LCAweGE2YjQsIDB4MDBmZiwKLQkweGE2YjUsIDB4MDQwMCwgMHg2ZWI2LCAweDdlNWEsIDB4MDA3OCwgMHg0NWU0LCAweDcwYWIsIDB4M2YwMiwKLQkweDAwNzgsIDB4MjQzOCwgMHgwMDc4LCAweDNlZWEsIDB4NzBhYiwgMHgzZjA4LCAweDAwNzgsIDB4MjQzOCwKLQkweDAwNzgsIDB4M2VmNiwgMHhhMjg2LCAweDAwMDEsIDB4MDA0MCwgMHgzZjEwLCAweDEwNzgsIDB4MjNjYSwKLQkweDcwYTcsIDB4M2YxNCwgMHgwMDc4LCAweDQ1ZjYsIDB4MjAxMSwgMHgwMDE1LCAweDEwNzgsIDB4NDI4NywKLQkweDAwNzksIDB4M2YxYSwgMHgzZjFmLCAweDI0MzgsIDB4M2I2MCwgMHgzZjJkLCAweDNmMzksIDB4YTZiNCwKLQkweDAwZmYsIDB4YTZiNSwgMHgwNDAwLCAweDZlYjYsIDB4N2U1YSwgMHg3ODNiLCAweDEzMDEsIDB4NzBiNCwKLQkweGEwODAsIDB4MDBiNSwgMHg3ODFhLCAweDAwNzgsIDB4MjQzOCwgMHhhNmI0LCAweDAwZmYsIDB4YTZiNSwKLQkweDA0MDAsIDB4NmViNiwgMHg3ZTVhLCAweDcwYjQsIDB4YTA4MCwgMHgwMGE1LCAweDc4MWEsIDB4MDA3OCwKLQkweDI0MzgsIDB4NzBhYiwgMHgzZjNkLCAweDAwNzgsIDB4MjQzOCwgMHgwMDc4LCAweDNmMWYsIDB4YTI4MiwKLQkweDAwMDMsIDB4MDA1MCwgMHgzZjQ1LCAweDEwNzgsIDB4MjNjYSwgMHgyMzAwLCAweDAwNzksIDB4M2Y0OCwKLQkweDNmNGIsIDB4M2Y4MiwgMHgzZmRkLCAweGEyODYsIDB4MDAwMSwgMHgwMDQwLCAweDNmNTEsIDB4MTA3OCwKLQkweDIzY2EsIDB4NjgwNCwgMHhhMDg0LCAweDAwZmYsIDB4YTA4NiwgMHgwMDA2LCAweDAwYzAsIDB4M2Y1ZSwKLQkweDEwNzgsIDB4M2FjMiwgMHg3MDAzLCAweDAwMDAsIDB4MDA3OCwgMHgzYjYwLCAweDY4M2IsIDB4MDAwMCwKLQkweDY4MzcsIDB4MDAwMCwgMHhhNjg0LCAweDAyMDAsIDB4MDA0MCwgMHgzZjZjLCAweDEwNzgsIDB4NDViNSwKLQkweDEwNzgsIDB4NDI2ZiwgMHgxMDc4LCAweDQ1YmMsIDB4MjAwMSwgMHgwMDAxLCAweDEwNzgsIDB4NDU0YywKLQkweDc4YjgsIDB4YTA4NCwgMHhjMDAxLCAweDAwNDAsIDB4M2Y3ZSwgMHg3ODQ4LCAweGEwODUsIDB4MDAwOCwKLQkweDc4NGEsIDB4Nzg0OCwgMHhhMDg0LCAweDAwMDgsIDB4MDBjMCwgMHgzZjc5LCAweDcwMDMsIDB4MDAwMCwKLQkweDAwNzgsIDB4M2I2MCwgMHgyMjAwLCAweDAwNzksIDB4M2Y4NSwgMHgzZjg3LCAweDNmYjgsIDB4NzBhNywKLQkweDNmOGIsIDB4MDA3OCwgMHg0NWY2LCAweDIwMTEsIDB4MDAwZCwgMHgxMDc4LCAweDQyODcsIDB4MDA3OSwKLQkweDNmOTEsIDB4M2Y5OCwgMHgyNDM4LCAweDNiNjAsIDB4M2ZhMCwgMHgzZmE4LCAweDNmYWUsIDB4M2ZiMCwKLQkweGE2YjQsIDB4MDBmZiwgMHhhNmI1LCAweDA4MDAsIDB4NmViNiwgMHg3ZTVhLCAweDAwNzgsIDB4NDVlNCwKLQkweGE2YjQsIDB4MDBmZiwgMHhhNmI1LCAweDA4MDAsIDB4NmViNiwgMHg3ZTVhLCAweDAwNzgsIDB4NDVlNCwKLQkweDcwYWIsIDB4M2ZhYywgMHgwMDc4LCAweDI0MzgsIDB4MDA3OCwgMHgzZjk4LCAweDEwNzgsIDB4MjNjYSwKLQkweDcwYWIsIDB4M2ZiNCwgMHgwMDc4LCAweDI0MzgsIDB4MTA3OCwgMHg0NWZjLCAweDAwNzgsIDB4MjQzOCwKLQkweDcwYTcsIDB4M2ZiYywgMHgwMDc4LCAweDQ1ZjYsIDB4MjAxMSwgMHgwMDA1LCAweDEwNzgsIDB4NDI4NywKLQkweDAwNzksIDB4M2ZjMiwgMHgzZmM3LCAweDI0MzgsIDB4M2I2MCwgMHgzZmNmLCAweDNmZDcsIDB4YTZiNCwKLQkweDAwZmYsIDB4YTZiNSwgMHgwODAwLCAweDZlYjYsIDB4N2U1YSwgMHgwMDc4LCAweDQ1ZTQsIDB4YTZiNCwKLQkweDAwZmYsIDB4YTZiNSwgMHgwODAwLCAweDZlYjYsIDB4N2U1YSwgMHgwMDc4LCAweDQ1ZTQsIDB4NzBhYiwKLQkweDNmZGIsIDB4MDA3OCwgMHgyNDM4LCAweDAwNzgsIDB4M2ZjNywgMHhhMjg2LCAweDAwMDEsIDB4MDA0MCwKLQkweDNmZTMsIDB4MTA3OCwgMHgyM2NhLCAweDcwYTcsIDB4M2ZlNywgMHgwMDc4LCAweDQ1ZjYsIDB4MjAxMSwKLQkweDAwMDYsIDB4MTA3OCwgMHg0Mjg3LCAweDAwNzksIDB4M2ZlZCwgMHgzZmYyLCAweDI0MzgsIDB4M2I2MCwKLQkweDNmZjgsIDB4NDAwMiwgMHhhNmI1LCAweDA4MDAsIDB4NmViNiwgMHg3ZTVhLCAweDAwNzgsIDB4NDVlNCwKLQkweGE2YjQsIDB4MDBmZiwgMHhhNmI1LCAweDA4MDAsIDB4NmViNiwgMHhhNmI1LCAweDQwMDAsIDB4N2U1YSwKLQkweDAwNzgsIDB4NDVlNCwgMHg3MGFiLCAweDQwMDYsIDB4MDA3OCwgMHgyNDM4LCAweDAwNzgsIDB4M2ZmMiwKLQkweDIzMDAsIDB4MDA3OSwgMHg0MDBiLCAweDQwMTAsIDB4NDAwZSwgMHg0MDBlLCAweDEwNzgsIDB4MjNjYSwKLQkweDEwNzgsIDB4MjNjYSwgMHgyMzAwLCAweDcxYTgsIDB4YTAwNSwgMHgwMTdhLCAweDY4MTAsIDB4NzBiZSwKLQkweGEyODIsIDB4MDAwMywgMHgwMDUwLCAweDQwMWUsIDB4MTA3OCwgMHgyM2NhLCAweDIzMDAsIDB4MDA3OSwKLQkweDQwMjEsIDB4NDAyNCwgMHg0MDM3LCAweDQwNTksIDB4ODJmZiwgMHgwMGMwLCAweDQwMjksIDB4MTA3OCwKLQkweDIzY2EsIDB4YTY4NCwgMHgwMjAwLCAweDAwNDAsIDB4NDAzMSwgMHgxMDc4LCAweDQ1YjUsIDB4MTA3OCwKLQkweDQ1YmMsIDB4MjAwMSwgMHgwMDAxLCAweDEwNzgsIDB4NDU0YywgMHgwMDc4LCAweDI0MzgsIDB4YTI5NiwKLQkweDAwMDIsIDB4MDA0MCwgMHg0MDQwLCAweDgyZmYsIDB4MDA0MCwgMHg0MDQwLCAweDEwNzgsIDB4MjNjYSwKLQkweDcwYTcsIDB4NDA0NCwgMHgwMDc4LCAweDQ1ZjYsIDB4MjAxMSwgMHgwMDE4LCAweDEwNzgsIDB4NDI4NywKLQkweDAwNzksIDB4NDA0YSwgMHg0MDRmLCAweDI0MzgsIDB4M2I2MCwgMHg0MDUxLCAweDQwNTMsIDB4MDA3OCwKLQkweDQ1ZTQsIDB4MDA3OCwgMHg0NWU0LCAweDcwYWIsIDB4NDA1NywgMHgwMDc4LCAweDI0MzgsIDB4MDA3OCwKLQkweDQwNGYsIDB4MjIwMCwgMHgwMDc5LCAweDQwNWMsIDB4NDA1ZSwgMHg0MDc3LCAweDcwYTcsIDB4NDA2MiwKLQkweDAwNzgsIDB4NDVmNiwgMHgyMDExLCAweDAwMTcsIDB4MTA3OCwgMHg0Mjg3LCAweDAwNzksIDB4NDA2OCwKLQkweDQwNmQsIDB4MjQzOCwgMHgzYjYwLCAweDQwNmYsIDB4NDA3MSwgMHgwMDc4LCAweDQ1ZTQsIDB4MDA3OCwKLQkweDQ1ZTQsIDB4NzBhYiwgMHg0MDc1LCAweDAwNzgsIDB4MjQzOCwgMHgwMDc4LCAweDQwNmQsIDB4YTQ4NCwKLQkweDgwMDAsIDB4MDBjMCwgMHg0MGMxLCAweGE2ODQsIDB4MDEwMCwgMHgwMDQwLCAweDQwOGIsIDB4MTA3OCwKLQkweDQ1YjUsIDB4MTA3OCwgMHg0MjZmLCAweDEwNzgsIDB4NDViYywgMHg3ODQ4LCAweGEwODUsIDB4MDAwYywKLQkweDc4NGEsIDB4MDA3OCwgMHg0MDhmLCAweDc4ZDgsIDB4NzhkMiwgMHg3OGRjLCAweDc4ZDYsIDB4YTZiNCwKLQkweGVmZmYsIDB4N2U1YSwgMHg3MGE3LCAweDQwOTYsIDB4MDA3OCwgMHg0NWY2LCAweDIwMTEsIDB4MDAwZCwKLQkweDEwNzgsIDB4NDI4NywgMHgwMDc5LCAweDQwOWMsIDB4NDBhMywgMHgyNDM4LCAweDNiNjAsIDB4NDBhMywKLQkweDQwYjEsIDB4NDBiNywgMHg0MGI5LCAweGE2ODQsIDB4MDEwMCwgMHgwMDQwLCAweDQwYWYsIDB4MTA3OCwKLQkweDQ1NzMsIDB4NjgyYywgMHg3OGQyLCAweDY4MzAsIDB4NzhkNiwgMHgxMDc4LCAweDQ1YWQsIDB4MDA3OCwKLQkweDQ1ZTQsIDB4NzBhYiwgMHg0MGI1LCAweDAwNzgsIDB4MjQzOCwgMHgwMDc4LCAweDQwYTMsIDB4MTA3OCwKLQkweDIzY2EsIDB4NzBhYiwgMHg0MGJkLCAweDAwNzgsIDB4MjQzOCwgMHgxMDc4LCAweDQ1ZmMsIDB4MDA3OCwKLQkweDI0MzgsIDB4MTA3OCwgMHg0NWJjLCAweDcwYWIsIDB4NDBjYiwgMHgyMDAxLCAweDAwMDMsIDB4MTA3OCwKLQkweDQ1NDQsIDB4MDA3OCwgMHg0NWYwLCAweDEwNzgsIDB4NDVhZCwgMHg2ODJjLCAweDc4ZDIsIDB4NjgzMCwKLQkweDc4ZDYsIDB4MDA3OCwgMHg0NWU0LCAweDcwYjgsIDB4NjgxMiwgMHg3MGJlLCAweDgwMDAsIDB4NzBiYSwKLQkweDY4MWIsIDB4MDAwMCwgMHhhNjg0LCAweDAwMDgsIDB4MDA0MCwgMHg0MGY2LCAweDE1N2UsIDB4MTM3ZSwKLQkweDE0N2UsIDB4Nzg5MCwgMHg4MDA0LCAweDgwMDQsIDB4ODAwNCwgMHg4MDA0LCAweGEwODQsIDB4MDAwZiwKLQkweDY4MWEsIDB4ODBhYywgMHg3ODliLCAweDAwMDAsIDB4YWY4MCwgMHgwMDJiLCAweDIwOTgsIDB4YWQ4MCwKLQkweDAwMGIsIDB4MjBhMCwgMHg1M2E1LCAweDE0N2YsIDB4MTM3ZiwgMHgxNTdmLCAweGE2YzQsIDB4MGYwMCwKLQkweGE2ODQsIDB4MDAwMiwgMHgwMGMwLCAweDQxMDIsIDB4NjkyYywgMHg4MTBkLCAweDgxMGQsIDB4ODEwZCwKLQkweDAwNzgsIDB4NDEwZiwgMHg3ODliLCAweDAwMTAsIDB4NzlhYywgMHgwMDc4LCAweDQxMGYsIDB4MDE3ZSwKLQkweDIwMDksIDB4MDAwNSwgMHgyMDAxLCAweDNkMDAsIDB4MTA3OCwgMHg0NTdlLCAweDAxN2YsIDB4YTE4NCwKLQkweDAwMWYsIDB4YTgwNSwgMHg2ODE2LCAweDEwNzgsIDB4M2IzMywgMHg2OGJlLCAweGE2ODQsIDB4MDAwNCwKLQkweDAwNDAsIDB4NDEyMCwgMHhhMThjLCAweGZmMDAsIDB4NzhhOCwgMHhhMDg0LCAweDAwZmYsIDB4YTEwNSwKLQkweDY4MmEsIDB4YTZiNCwgMHgwMGZmLCAweDYwMDAsIDB4YTA4NCwgMHgwMDA4LCAweDAwNDAsIDB4NDEyYSwKLQkweGE2YjUsIDB4NDAwMCwgMHg2ZWI2LCAweDAwN2MsIDB4MTU3ZSwgMHgxMzdlLCAweDE0N2UsIDB4NjkxOCwKLQkweDc4OTAsIDB4ODAwNCwgMHg4MDA0LCAweDgwMDQsIDB4ODAwNCwgMHhhMDg0LCAweDAwMGYsIDB4MDA3ZSwKLQkweGExMDAsIDB4NjgxYSwgMHgwMDdmLCAweDgwMDAsIDB4ODAwNCwgMHgwMDQwLCAweDQxNGIsIDB4MjBhOCwKLQkweDgxMDQsIDB4YTA4MCwgMHgwMDBiLCAweGFkMDAsIDB4MjBhMCwgMHg3ODliLCAweDAwMDAsIDB4YWY4MCwKLQkweDAwMmIsIDB4MjA5OCwgMHg1M2E1LCAweDE0N2YsIDB4MTM3ZiwgMHgxNTdmLCAweDAwN2MsIDB4NjgyYywKLQkweGEwODQsIDB4MDAyMCwgMHgwMGMwLCAweDQxNTcsIDB4NjIwYywgMHgwMDc4LCAweDQxNTgsIDB4NjIxMCwKLQkweDZiMTgsIDB4MjMwMCwgMHhhMjAyLCAweDAwNDAsIDB4NDE3OCwgMHgyMDE4LCAweGEzODIsIDB4MDAwZSwKLQkweDAwNDgsIDB4NDE2OCwgMHgwMDQwLCAweDQxNjgsIDB4MjAxOSwgMHgwMDBlLCAweDAwNzgsIDB4NDE2YywKLQkweDc4NTgsIDB4YTA4NCwgMHhmZmVmLCAweDc4NWEsIDB4NzgzYiwgMHgxYjAxLCAweDc4OTMsIDB4MDAwMCwKLQkweDdiYTIsIDB4NzBiNCwgMHhhMDgwLCAweDAwOGUsIDB4NzgxYSwgMHhhMDg1LCAweDAwMDEsIDB4MDA3YywKLQkweDc4NTgsIDB4YTA4NCwgMHhmZmVmLCAweDc4NWEsIDB4Nzg5MywgMHgwMDAwLCAweGEwMDYsIDB4MDA3YywKLQkweDY5MDQsIDB4YTE4YywgMHgwMGZmLCAweGExOTYsIDB4MDAwNywgMHgwMDQwLCAweDQxOGQsIDB4YTE5NiwKLQkweDAwMGYsIDB4MDA0MCwgMHg0MThkLCAweDY4MDcsIDB4MDExNywgMHg2OTE0LCAweDEwNzgsIDB4M2IzMywKLQkweDYxMDAsIDB4ODEwNCwgMHgwMGM4LCAweDQxYTgsIDB4NjAxYywgMHhhMDA1LCAweDAwNDAsIDB4NDE5YywKLQkweDIwMDEsIDB4MDgwMCwgMHgwMDc4LCAweDQxYWEsIDB4MGQ3ZSwgMHg2ODI0LCAweDAwN2UsIDB4MTA3OCwKLQkweDQ1YzUsIDB4MDA3ZiwgMHg2ODI2LCAweDJkMDAsIDB4NjgyZSwgMHgxMDc4LCAweDNhYzIsIDB4MGQ3ZiwKLQkweDIwMDEsIDB4MDIwMCwgMHg2ODI2LCAweDgwMDcsIDB4Nzg5YiwgMHgwMDBlLCAweDc4YWEsIDB4NjgyMCwKLQkweGEwODUsIDB4ODAwMCwgMHg2ODIyLCAweDIwMzEsIDB4MDQwMCwgMHg2ZWI2LCAweDdlNWEsIDB4NzFiNCwKLQkweGExODgsIDB4MDA5MSwgMHg3OTFhLCAweDAwN2MsIDB4YTZjNCwgMHgwZjAwLCAweGE2ODQsIDB4MDAwMiwKLQkweDAwYzAsIDB4NDFjZiwgMHg2OTJjLCAweDgxMGQsIDB4ODEwZCwgMHg4MTBkLCAweGExODQsIDB4MDAxZiwKLQkweGE4MDUsIDB4NjgxNiwgMHgxMDc4LCAweDNiMzMsIDB4NjhiZSwgMHgwMDc4LCAweDQxZDIsIDB4NjkxNCwKLQkweDEwNzgsIDB4M2IzMywgMHg2MTAwLCAweDgxMDQsIDB4MDBjOCwgMHg0MjFjLCAweGExODQsIDB4MDMwMCwKLQkweDAwNDAsIDB4NDFkZSwgMHg2ODA3LCAweDAxMTcsIDB4MDA3OCwgMHg0MWZjLCAweDYwMDQsIDB4YTAwNSwKLQkweDAwYzAsIDB4NDIwNSwgMHg2ODA3LCAweDAxMTcsIDB4NjAxYywgMHhhMDA1LCAweDAwYzAsIDB4NDFmMiwKLQkweDBkN2UsIDB4MTA3OCwgMHg0NWM1LCAweDY4MjcsIDB4MDAzNCwgMHgyZDAwLCAweDY4MmUsIDB4MTA3OCwKLQkweDNhYzIsIDB4MGQ3ZiwgMHhhNjg0LCAweDAwMDQsIDB4MDA0MCwgMHg0MWZjLCAweDIwMzEsIDB4MDQwMCwKLQkweDIwMDEsIDB4MjgwMCwgMHgwMDc4LCAweDQyMDAsIDB4MjAzMSwgMHgwNDAwLCAweDIwMDEsIDB4MDgwMCwKLQkweDcxYjQsIDB4YTE4OCwgMHgwMDkxLCAweDAwNzgsIDB4NDI0YSwgMHg2MDE4LCAweGEwMDUsIDB4MDBjMCwKLQkweDQxZjIsIDB4NjAxYywgMHhhMDA1LCAweDAwYzAsIDB4NDFmMiwgMHg2ODlmLCAweDAwMDAsIDB4NjgyNywKLQkweDAwM2QsIDB4YTY4NCwgMHgwMDAxLCAweDAwNDAsIDB4NDI1OCwgMHhhNmI1LCAweDA4MDAsIDB4NzFiNCwKLQkweGExODgsIDB4MDBhZSwgMHgwMDc4LCAweDQyNTMsIDB4NjgwNywgMHgwMTE3LCAweDIwMzEsIDB4MDQwMCwKLQkweDY5MmMsIDB4YTE4YywgMHgwMGZmLCAweGExODYsIDB4MDAxMiwgMHgwMGMwLCAweDQyMmQsIDB4MjAwMSwKLQkweDQyNjUsIDB4MjAwOSwgMHgwMDAxLCAweDAwNzgsIDB4NDIzZSwgMHhhMTg2LCAweDAwMDMsIDB4MDBjMCwKLQkweDQyMzcsIDB4MjAwMSwgMHg0MjY2LCAweDIwMDksIDB4MDAxMiwgMHgwMDc4LCAweDQyM2UsIDB4MjAwMSwKLQkweDAyMDAsIDB4NzFiNCwgMHhhMTg4LCAweDAwOTEsIDB4MDA3OCwgMHg0MjRhLCAweDEwNzgsIDB4NDU5OCwKLQkweDc4YTMsIDB4MDAwMCwgMHg2ODFjLCAweGEwODUsIDB4MDA0MCwgMHg2ODFlLCAweDcxYjQsIDB4YTE4OCwKLQkweDAwZGEsIDB4YTAwNiwgMHg2ODI2LCAweDgwMDcsIDB4Nzg5YiwgMHgwMDBlLCAweDc4YWEsIDB4NjgyMCwKLQkweGEwODUsIDB4ODAwMCwgMHg2ODIyLCAweDZlYjYsIDB4N2U1YSwgMHg3OTFhLCAweDAwNzgsIDB4MjQzOCwKLQkweDZlYjYsIDB4MTA3OCwgMHgzYWMyLCAweDY4MTAsIDB4NzBiZSwgMHg3MDAzLCAweDAwMDcsIDB4NzBhMywKLQkweDAwMDAsIDB4NzA0YiwgMHgwMDAwLCAweDAwNzgsIDB4MjQzOCwgMHgwMDIzLCAweDAwNzAsIDB4MDAwNSwKLQkweDAwMDAsIDB4MGEwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAyNSwgMHgwMDAwLCAweDAwMDAsIDB4NjgzYiwKLQkweDAwMDAsIDB4NjgzNywgMHgwMDAwLCAweGE2ODQsIDB4MDIwMCwgMHgwMDQwLCAweDQyODYsIDB4NzhiOCwKLQkweGEwOGMsIDB4MDAxZiwgMHhhMDg0LCAweDgwMDAsIDB4MDA0MCwgMHg0MjdmLCAweDgxMDgsIDB4NzhkOCwKLQkweGExMDAsIDB4NjgzNiwgMHg3OGRjLCAweGEwODEsIDB4MDAwMCwgMHg2ODNhLCAweDAwN2MsIDB4Nzk5MCwKLQkweDgxMGYsIDB4YTVhYywgMHgwMDA3LCAweDIwMjEsIDB4MDAwMCwgMHhhNDgwLCAweDAwMTAsIDB4Nzg5YSwKLQkweDc5YTgsIDB4YTE4YywgMHgwMGZmLCAweGExODQsIDB4MDA4MCwgMHgwMGMwLCAweDQyYjUsIDB4YTE4MiwKLQkweDAwMjAsIDB4MDBjOCwgMHg0MmNmLCAweGExODIsIDB4MDAxMiwgMHgwMGM4LCAweDQ1MzYsIDB4MjEwMCwKLQkweDEwNzksIDB4NDJhMywgMHgwMDdjLCAweDQ1MzYsIDB4NDQ3ZSwgMHg0NTM2LCAweDQ1MzYsIDB4NDJkYywKLQkweDQyZGYsIDB4NDMxOSwgMHg0MzRmLCAweDQzODEsIDB4NDM4NCwgMHg0NTM2LCAweDQ1MzYsIDB4NDMzYSwKLQkweDQzYTgsIDB4NDNlMiwgMHg0NTM2LCAweDQ1MzYsIDB4NDQwOSwgMHhhMThjLCAweDAwMWYsIDB4NjgxNCwKLQkweGEwODQsIDB4MDAxZiwgMHhhMTA2LCAweDAwNDAsIDB4NDJjYywgMHg3MGI0LCAweGEwODAsIDB4MDBjZCwKLQkweDc4MWEsIDB4MjAwMSwgMHgwMDE0LCAweDEwNzgsIDB4NDU0YywgMHgxMDc4LCAweDQ1YmMsIDB4NzAwMywKLQkweDAwMDAsIDB4MjAwMSwgMHgwMDAyLCAweDAwN2MsIDB4MjAwMSwgMHgwMDAwLCAweDAwN2MsIDB4YTE4MiwKLQkweDAwMjQsIDB4MDBjOCwgMHg0NTM2LCAweGExODQsIDB4MDAwMywgMHgxMDc5LCAweDQyYTMsIDB4MDA3YywKLQkweDQ1MzYsIDB4NDUzNiwgMHg0NTM2LCAweDQ1MzYsIDB4MTA3OCwgMHg0NTM2LCAweDAwN2MsIDB4MjIwMCwKLQkweDAwNzksIDB4NDJlMiwgMHg0NDBjLCAweDQ0MGMsIDB4NDMwNiwgMHg0MzA2LCAweDQzMDYsIDB4NDMwNiwKLQkweDQzMDYsIDB4NDMwNiwgMHg0MzA2LCAweDQzMDYsIDB4NDMwNCwgMHg0MzA2LCAweDQyZmIsIDB4NDMwNiwKLQkweDQzMDYsIDB4NDMwNiwgMHg0MzA2LCAweDQzMDYsIDB4NDMwZSwgMHg0MzExLCAweDQ0MGMsIDB4NDMxMSwKLQkweDQzMDYsIDB4NDMwNiwgMHg0MzA2LCAweDBjN2UsIDB4MDc3ZSwgMHg2ZjE0LCAweDEwNzgsIDB4MzZiMCwKLQkweDA3N2YsIDB4MGM3ZiwgMHgwMDc4LCAweDQzMDYsIDB4MTA3OCwgMHg0NGQxLCAweDY4MjcsIDB4MDJiMywKLQkweDIwMDksIDB4MDAwYiwgMHgyMDAxLCAweDQ4MDAsIDB4MDA3OCwgMHg0NDQwLCAweDEwNzgsIDB4NDUyYiwKLQkweDAwN2MsIDB4NjgyNywgMHgwMDkzLCAweDIwMDksIDB4MDAwYiwgMHgyMDAxLCAweDQ4MDAsIDB4MDA3OCwKLQkweDQ0MjgsIDB4MmQ1OCwgMHg2ODA0LCAweGEwODQsIDB4MDBmZiwgMHhhMDg2LCAweDAwMDYsIDB4MDBjMCwKLQkweDQzMjMsIDB4NjgwNywgMHgwMTE3LCAweDY4MjcsIDB4MDAwMiwgMHgxMDc4LCAweDQ1YzUsIDB4NjgyNywKLQkweDAwMzYsIDB4NjkzMiwgMHgyZDAwLCAweDY4MmUsIDB4MGQ3ZSwgMHgxMDc4LCAweDNhOTIsIDB4MTA3OCwKLQkweDQ0NjYsIDB4MmI2OCwgMHgxMDc4LCAweDNhYzIsIDB4MGQ3ZiwgMHgxMDc4LCAweDNhYzIsIDB4MjAwMSwKLQkweDAwMDIsIDB4MDA3YywgMHgxMDc4LCAweDQ0NjYsIDB4MjAwMSwgMHgwMDE3LCAweDEwNzgsIDB4NDU0YywKLQkweDcwYTMsIDB4MDAwMCwgMHgyMDA5LCAweDUwMzgsIDB4MjAwYiwgMHgwMDA2LCAweDcwYWYsIDB4MDAxNywKLQkweDIwMDksIDB4MDIwMCwgMHgxMDc4LCAweDM5ZDIsIDB4MjAwMSwgMHgwMDAxLCAweDAwN2MsIDB4MjIwMCwKLQkweDAwNzksIDB4NDM1MiwgMHg0NDBjLCAweDQ0M2QsIDB4NDQzZCwgMHg0NDNkLCAweDQzNzMsIDB4NDQ0ZCwKLQkweDQzNzksIDB4NDQ0ZCwgMHg0NDRkLCAweDQ0NTAsIDB4NDQ1MCwgMHg0NDU1LCAweDQ0NTUsIDB4NDM2YiwKLQkweDQzNmIsIDB4NDQzZCwgMHg0NDNkLCAweDQ0NGQsIDB4NDQzZCwgMHg0Mzc5LCAweDQ0MGMsIDB4NDM3OSwKLQkweDQzNzksIDB4NDM3OSwgMHg0Mzc5LCAweDY4MjcsIDB4MDA4NCwgMHgyMDA5LCAweDAwMGIsIDB4MjAwMSwKLQkweDQzMDAsIDB4MDA3OCwgMHg0NDVmLCAweDIwMDksIDB4MDAwYiwgMHgyMDAxLCAweDQzMDAsIDB4MDA3OCwKLQkweDQ0NDAsIDB4NjgyNywgMHgwMDkzLCAweDIwMDksIDB4MDAwYiwgMHgyMDAxLCAweDQzMDAsIDB4MDA3OCwKLQkweDQ0MjgsIDB4MjAwMSwgMHgwMDAwLCAweDAwN2MsIDB4MjIwMCwgMHgwMDc5LCAweDQzODcsIDB4NDQwYywKLQkweDQzYTAsIDB4NDNhMCwgMHg0M2EwLCAweDQzYTAsIDB4NDQ0ZCwgMHg0NDRkLCAweDQ0NGQsIDB4NDQ0ZCwKLQkweDQ0NGQsIDB4NDQ0ZCwgMHg0NDRkLCAweDQ0NGQsIDB4NDNhMCwgMHg0M2EwLCAweDQzYTAsIDB4NDNhMCwKLQkweDQ0NGQsIDB4NDNhMCwgMHg0M2EwLCAweDQ0NGQsIDB4NDQ0ZCwgMHg0NDRkLCAweDQ0NGQsIDB4NDQwYywKLQkweDY4MjcsIDB4MDA5MywgMHgyMDA5LCAweDAwMGIsIDB4MjAwMSwgMHg0MzAwLCAweDAwNzgsIDB4NDQyOCwKLQkweGE2ODQsIDB4MDAwNCwgMHgwMGMwLCAweDQzYmMsIDB4NjgwNCwgMHhhMDg0LCAweDAwZmYsIDB4YTA4NiwKLQkweDAwMDYsIDB4MDBjMCwgMHg0NTM2LCAweDEwNzgsIDB4NDQ2NiwgMHg2ODA3LCAweDAxMTcsIDB4MTA3OCwKLQkweDNhYzIsIDB4MjAwMSwgMHgwMDAyLCAweDAwN2MsIDB4NjAwMCwgMHhhMDg0LCAweDAwMDQsIDB4MDA0MCwKLQkweDQ1MzYsIDB4MmQ1OCwgMHg2ODA0LCAweGEwODQsIDB4MDBmZiwgMHhhMDg2LCAweDAwMDYsIDB4MDBjMCwKLQkweDQzY2IsIDB4NjgwNywgMHgwMTE3LCAweDY4MjcsIDB4MDAwMiwgMHgxMDc4LCAweDQ1YzUsIDB4NjgyNywKLQkweDAwMzYsIDB4NjkzMiwgMHgyZDAwLCAweDY4MmUsIDB4MGQ3ZSwgMHgxMDc4LCAweDNhYTEsIDB4MTA3OCwKLQkweDQ0NjYsIDB4MmI2OCwgMHgxMDc4LCAweDNhYzIsIDB4MGQ3ZiwgMHgxMDc4LCAweDNhYzIsIDB4MjAwMSwKLQkweDAwMDIsIDB4MDA3YywgMHg2MDAwLCAweGEwODQsIDB4MDAwNCwgMHgwMDQwLCAweDQ1MzYsIDB4MmQ1OCwKLQkweDZhMDQsIDB4YTI5NCwgMHgwMGZmLCAweGEyODYsIDB4MDAwNiwgMHgwMGMwLCAweDQzZjEsIDB4NjgwNywKLQkweDAxMTcsIDB4NjgyNywgMHgwMDAyLCAweDJkNTgsIDB4MTA3OCwgMHg0NWM1LCAweDY4MjcsIDB4MDAzNiwKLQkweDY5MzIsIDB4MmQwMCwgMHg2ODJlLCAweDBkN2UsIDB4MTA3OCwgMHgzYWIxLCAweDEwNzgsIDB4NDQ2NiwKLQkweDJiNjgsIDB4MTA3OCwgMHgzYWMyLCAweDBkN2YsIDB4MTA3OCwgMHgzYWMyLCAweDIwMDEsIDB4MDAwMiwKLQkweDAwN2MsIDB4MTA3OCwgMHg0NTM2LCAweDAwN2MsIDB4NzBiNCwgMHhhMDgwLCAweDAwY2QsIDB4NzgxYSwKLQkweDIwMDEsIDB4MDAwMSwgMHgxMDc4LCAweDQ1NGMsIDB4MTA3OCwgMHg0NWJjLCAweDcwMDMsIDB4MDAwMCwKLQkweDIwMDEsIDB4MDAwMiwgMHgwMDdjLCAweDEwNzgsIDB4NDU3ZSwgMHgxMDc4LCAweDQ1YjUsIDB4MTA3OCwKLQkweDQyNmYsIDB4MTA3OCwgMHg0MTgwLCAweDEwNzgsIDB4NDViYywgMHgyMDAxLCAweDAwMDEsIDB4MDA3YywKLQkweDEwNzgsIDB4NDU3ZSwgMHgxMDc4LCAweDQ1YjUsIDB4MTA3OCwgMHg0MjZmLCAweDcwYjQsIDB4YTA4MCwKLQkweDAwY2QsIDB4NzgxYSwgMHgyMDAxLCAweDAwMTMsIDB4MTA3OCwgMHg0NTRjLCAweDEwNzgsIDB4NDViYywKLQkweDcwMDMsIDB4MDAwMCwgMHgyMDAxLCAweDAwMDIsIDB4MDA3YywgMHgxMDc4LCAweDQ1MzYsIDB4MDA3YywKLQkweDEwNzgsIDB4NDU3ZSwgMHgxMDc4LCAweDQ1YjUsIDB4MTA3OCwgMHg0MjZmLCAweDEwNzgsIDB4NDE4MCwKLQkweDEwNzgsIDB4NDViYywgMHgyMDAxLCAweDAwMDEsIDB4MDA3YywgMHgyMDAxLCAweDAwMDMsIDB4MDA3YywKLQkweDEwNzgsIDB4NDRkMSwgMHgyMDAxLCAweDAwMDAsIDB4MDA3YywgMHgwYzdlLCAweDA3N2UsIDB4NmYxNCwKLQkweDEwNzgsIDB4MzZiMCwgMHgwNzdmLCAweDBjN2YsIDB4MjAwMSwgMHgwMDAwLCAweDAwN2MsIDB4MTA3OCwKLQkweDQ1N2UsIDB4MTA3OCwgMHg0NTM2LCAweDIwMDEsIDB4MDAwNiwgMHgwMDdjLCAweDY5MDQsIDB4YTE4YywKLQkweDAwZmYsIDB4YTE4NiwgMHgwMDA3LCAweDAwNDAsIDB4NDQ3MSwgMHhhMTg2LCAweDAwMGYsIDB4MDBjMCwKLQkweDQ0NzUsIDB4MTA3OCwgMHg0NWI1LCAweDEwNzgsIDB4NDI2ZiwgMHg3MGI0LCAweGEwODAsIDB4MDBjZCwKLQkweDc4MWEsIDB4MTA3OCwgMHg0NWJjLCAweDcwMDMsIDB4MDAwMCwgMHgwMDdjLCAweDdhYTgsIDB4YTI5NCwKLQkweDAwZmYsIDB4NzhhOCwgMHhhMDg0LCAweDAwZmYsIDB4YTA4YSwgMHgwMDA0LCAweDAwYzgsIDB4NDUzNiwKLQkweDEwNzksIDB4NDQ4YiwgMHgwMDdjLCAweDQ1MzYsIDB4NDQ4ZiwgMHg0NTM2LCAweDQ0ZGYsIDB4YTI4MiwKLQkweDAwMDMsIDB4MDA0MCwgMHg0NDk2LCAweDEwNzgsIDB4NDUzNiwgMHgwMDdjLCAweDdkYTgsIDB4YTVhYywKLQkweDAwZmYsIDB4N2NhOCwgMHhhNGE0LCAweDAwZmYsIDB4YTQ4MiwgMHgwMDBjLCAweDAwNDgsIDB4NDRhNCwKLQkweDAwNDAsIDB4NDRhNCwgMHgyMDIxLCAweDAwMGMsIDB4NzAxYywgMHhhNTAyLCAweDAwYzgsIDB4NDRhOSwKLQkweDc1MWMsIDB4MTA3OCwgMHg0NTFjLCAweDg1MmIsIDB4ODUyYiwgMHgxMDc4LCAweDM3MmUsIDB4MDA0MCwKLQkweDQ0YjUsIDB4MTA3OCwgMHg0NGMzLCAweDAwNzgsIDB4NDRiOSwgMHgxMDc4LCAweDQ1MTgsIDB4MTA3OCwKLQkweDQ0ZDEsIDB4YTZiNSwgMHgxMDAwLCAweDdlNWEsIDB4NzBiNCwgMHhhMDgwLCAweDAwYjksIDB4NzgxYSwKLQkweDIwMDEsIDB4MDAwNCwgMHgwMDdjLCAweDBjN2UsIDB4NjkxNCwgMHg4MTBmLCAweGExOGMsIDB4MDAwZiwKLQkweDgxMGIsIDB4ODEwYiwgMHg4MTBiLCAweGExZTAsIDB4NTI4MCwgMHgxMDc4LCAweDM1MzgsIDB4MGM3ZiwKLQkweDAwN2MsIDB4MGM3ZSwgMHg2ODE0LCAweDgwMDcsIDB4YTA4NCwgMHgwMDBmLCAweDgwMDMsIDB4ODAwMywKLQkweDgwMDMsIDB4YTBlMCwgMHg1MjgwLCAweDEwNzgsIDB4MzU1ZiwgMHgwYzdmLCAweDAwN2MsIDB4YTI4MiwKLQkweDAwMDIsIDB4MDBjMCwgMHg0NTM2LCAweDdhYTgsIDB4YTI5NCwgMHgwMGZmLCAweGEyODQsIDB4ZmZmZSwKLQkweDAwNDAsIDB4NDRlYywgMHgyMDExLCAweDAwMDEsIDB4MTA3OCwgMHg0NTBhLCAweDEwNzgsIDB4NDRmYywKLQkweDEwNzgsIDB4NDRkMSwgMHhhNmI1LCAweDEwMDAsIDB4N2U1YSwgMHg3MGI0LCAweGEwODAsIDB4MDBiOSwKLQkweDc4MWEsIDB4MjAwMSwgMHgwMDA0LCAweDAwN2MsIDB4MGM3ZSwgMHg2ODE0LCAweDgwMDcsIDB4YTA4NCwKLQkweDAwMGYsIDB4ODAwMywgMHg4MDAzLCAweDgwMDMsIDB4YTBlMCwgMHg1MjgwLCAweDEwNzgsIDB4MzYwNCwKLQkweDBjN2YsIDB4MDA3YywgMHg3ODliLCAweDAwMTgsIDB4NzhhYiwgMHgwMDAxLCAweDc4YWIsIDB4MDAwMiwKLQkweDc4YWIsIDB4MDAwMywgMHg3YWFhLCAweDc4OWIsIDB4MDA4MSwgMHg3OGFiLCAweDAwMDQsIDB4MDA3YywKLQkweDIwMjEsIDB4MDAwMCwgMHgyMDI5LCAweDAwMzIsIDB4Nzg5YiwgMHgwMDE4LCAweDc4YWIsIDB4MDAwMSwKLQkweDc4YWIsIDB4MDAwMywgMHg3OGFiLCAweDAwMDEsIDB4N2RhYSwgMHg3Y2FhLCAweDc4OWIsIDB4MDA4MSwKLQkweDc4YWIsIDB4MDAwNSwgMHgwMDdjLCAweDIwMDEsIDB4MDAwMywgMHgxMDc4LCAweDQ1NDQsIDB4NzBiNCwKLQkweGEwODAsIDB4MDBiOSwgMHg3ODFhLCAweDIwMDEsIDB4MDAwNSwgMHgwMDdjLCAweDIwMDEsIDB4MDAwNywKLQkweDEwNzgsIDB4NDU0NCwgMHhhNmI1LCAweDEwMDAsIDB4N2U1YSwgMHg3MGI0LCAweGEwODAsIDB4MDBiOSwKLQkweDc4MWEsIDB4MjAwMSwgMHgwMDA0LCAweDAwN2MsIDB4Nzg5YiwgMHgwMDE4LCAweDc4YWEsIDB4Nzg5YiwKLQkweDAwODEsIDB4NzhhYiwgMHgwMDAxLCAweDAwN2MsIDB4NjkwNCwgMHhhMThjLCAweDAwZmYsIDB4YTE5NiwKLQkweDAwMDcsIDB4MDA0MCwgMHg0NTVhLCAweGExOTYsIDB4MDAwZiwgMHgwMDQwLCAweDQ1NWEsIDB4MTA3OCwKLQkweDE5M2QsIDB4MDA3YywgMHg2OTI0LCAweGExOTQsIDB4MDAzZiwgMHgwMGMwLCAweDQ1NjMsIDB4YTE4YywKLQkweGZmYzAsIDB4YTEwNSwgMHg2ODI2LCAweDEwNzgsIDB4M2FjMiwgMHg2OTFjLCAweGExODQsIDB4MDEwMCwKLQkweDAwNDAsIDB4NDU3MiwgMHgxMDc4LCAweDFiN2UsIDB4NjkxNCwgMHgxMDc4LCAweDNiMzMsIDB4NjIwNCwKLQkweDgyMTAsIDB4NjIwNiwgMHgwMDdjLCAweDY5MmMsIDB4NjgzNCwgMHg2ODJlLCAweGExMTIsIDB4NjkzMCwKLQkweDY4MzgsIDB4NjgzMiwgMHhhMTFiLCAweGEyMDAsIDB4YTMwMSwgMHgwMDdjLCAweDBjN2UsIDB4YWRlMCwKLQkweDAwMTgsIDB4NjAwMywgMHgwMDcwLCAweDYxMDYsIDB4NjAwYiwgMHgwMDAwLCAweDYwMGYsIDB4MGEwMCwKLQkweDYwMTMsIDB4MDAwMCwgMHg2MDE3LCAweDAwMDAsIDB4ODAwNywgMHg2MDFhLCAweDYwMWYsIDB4MDAwMCwKLQkweDYwMjMsIDB4MDAwMCwgMHgwYzdmLCAweDY4MjQsIDB4YTA4NSwgMHgwMDgwLCAweDY4MjYsIDB4MDA3YywKLQkweDE1N2UsIDB4MTM3ZSwgMHgxNDdlLCAweDIwOTgsIDB4YWY4MCwgMHgwMDJkLCAweDIwYTAsIDB4ODFhYywKLQkweDAwNDAsIDB4NDVhMywgMHg1M2E2LCAweGExODQsIDB4MDAwMSwgMHgwMDQwLCAweDQ1YTksIDB4MzMwNCwKLQkweDc4YmUsIDB4MTQ3ZiwgMHgxMzdmLCAweDE1N2YsIDB4MDA3YywgMHg3MGIwLCAweGEwMDUsIDB4MTBjMCwKLQkweDIzY2EsIDB4NzBiMywgMHg4MDAwLCAweDAwNzgsIDB4NDhmNywgMHg3MWIwLCAweDgxZmYsIDB4MDA0MCwKLQkweDQ1YmIsIDB4MTA3OCwgMHg0OWVkLCAweDAwN2MsIDB4NzFiMCwgMHg4MWZmLCAweDAwNDAsIDB4NDVjNCwKLQkweDcwYjMsIDB4MDAwMCwgMHgxMDc4LCAweDQ2MzMsIDB4MDA3YywgMHgwYzdlLCAweDBkN2UsIDB4MTA3OCwKLQkweDE5MWEsIDB4MGM3ZiwgMHgxNTdlLCAweDEzN2UsIDB4MTQ3ZSwgMHgyZGEwLCAweDJjOTgsIDB4MjBhOSwKLQkweDAwMzEsIDB4NTNhMywgMHgxNDdmLCAweDEzN2YsIDB4MTU3ZiwgMHg2ODA3LCAweDAxMGQsIDB4NjgwYiwKLQkweDAwMDAsIDB4NzAwNCwgMHg4MDA3LCAweDY4MWEsIDB4NjgyMywgMHgwMDAwLCAweDY4MWYsIDB4MDAwMCwKLQkweDY4OWYsIDB4MDAwMCwgMHgwYzdmLCAweDAwN2MsIDB4NzBiNCwgMHhhMDgwLCAweDAwOTEsIDB4NzgxYSwKLQkweDAwNzgsIDB4MjQzOCwgMHg3MGI0LCAweGEwODAsIDB4MDA4MSwgMHg3ODFhLCAweDAwNzgsIDB4MjQzOCwKLQkweDcwYjQsIDB4YTA4MCwgMHgwMGI5LCAweDc4MWEsIDB4MDA3OCwgMHgyNDM4LCAweDcwYjQsIDB4YTA4MCwKLQkweDAwYzMsIDB4NzgxYSwgMHgwMDc4LCAweDI0MzgsIDB4NjkwNCwgMHhhMThjLCAweDAwZmYsIDB4YTE5NiwKLQkweDAwMDcsIDB4MDA0MCwgMHg0NjA5LCAweGExOTYsIDB4MDAwZiwgMHgwMDQwLCAweDQ2MDksIDB4NjgwNywKLQkweDAxMTcsIDB4MjAwMSwgMHgwMjAwLCAweDY4MjYsIDB4ODAwNywgMHg3ODliLCAweDAwMGUsIDB4NzhhYSwKLQkweDY4MjAsIDB4YTA4NSwgMHg4MDAwLCAweDY4MjIsIDB4MjAzMSwgMHgwNDAwLCAweDZlYjYsIDB4N2U1YSwKLQkweDcxYjQsIDB4YTE4OCwgMHgwMDkxLCAweDc5MWEsIDB4MDA3YywgMHgxMDc4LCAweDQ1YmMsIDB4Nzg0OCwKLQkweGEwODUsIDB4MDAwYywgMHg3ODRhLCAweDcwYjQsIDB4YTA4MCwgMHgwMGNkLCAweDc4MWEsIDB4MjAwOSwKLQkweDAwMGIsIDB4MjAwMSwgMHg0NDAwLCAweDEwNzgsIDB4NDU3ZSwgMHgyMDAxLCAweDAwMTMsIDB4MTA3OCwKLQkweDQ1NGMsIDB4MDA3OCwgMHgzYjYwLCAweDEyN2UsIDB4MjA5MSwgMHgyMjAwLCAweDIwNDksIDB4NDYzMywKLQkweDcwMDAsIDB4NzIwNCwgMHhhMjA1LCAweDcyMGMsIDB4YTIxNSwgMHg3MDA4LCAweGEwODQsIDB4ZmZmNywKLQkweGEyMDUsIDB4MDA0MCwgMHg0NjQ1LCAweDAwNzgsIDB4NDY0YSwgMHg3MDAzLCAweDAwMDAsIDB4MTI3ZiwKLQkweDIwMDAsIDB4MDA3YywgMHg3MDAwLCAweGEwODQsIDB4MDAwMSwgMHgwMGMwLCAweDQ2NzgsIDB4NzEwOCwKLQkweDgxMDMsIDB4MDBjOCwgMHg0NjU3LCAweDEwNzgsIDB4NDc3YSwgMHgwMDc4LCAweDQ2NGYsIDB4NzAwYywKLQkweGEwOGMsIDB4MDBmZiwgMHgwMDQwLCAweDQ2NzgsIDB4NzAwNCwgMHg4MDA0LCAweDAwYzgsIDB4NDY2ZiwKLQkweDcwMTQsIDB4YTAwNSwgMHgwMGMwLCAweDQ2NmIsIDB4NzAxMCwgMHhhMDA1LCAweDAwNDAsIDB4NDY2ZiwKLQkweGExMDIsIDB4MDBjOCwgMHg0NjRmLCAweDcwMDcsIDB4MDAxMCwgMHgwMDc4LCAweDQ2NzgsIDB4OGFmZiwKLQkweDAwNDAsIDB4NDY3OCwgMHgxMDc4LCAweDQ5YzQsIDB4MDBjMCwgMHg0NjcyLCAweDAwNDAsIDB4NDY0ZiwKLQkweDEwNzgsIDB4NDcwMywgMHg3MDAzLCAweDAwMDAsIDB4MTI3ZiwgMHgyMDAwLCAweDAwN2MsIDB4MDE3ZSwKLQkweDYxMDQsIDB4YTE4YywgMHgwMGZmLCAweGExODYsIDB4MDAwNywgMHgwMDQwLCAweDQ2OGIsIDB4YTE4ZSwKLQkweDAwMGYsIDB4MDBjMCwgMHg0NjhlLCAweDYwNDAsIDB4MDA3OCwgMHg0NjhmLCAweDY0MjgsIDB4MDE3ZiwKLQkweDg0ZmYsIDB4MDA0MCwgMHg0NmI5LCAweDJjNzAsIDB4NzAwNCwgMHhhMGJjLCAweDAwMGYsIDB4YTdiOCwKLQkweDQ2YzksIDB4MjczYywgMHg4N2ZiLCAweDAwYzAsIDB4NDZhNywgMHgwMDQ4LCAweDQ2YTEsIDB4MTA3OCwKLQkweDIzY2EsIDB4NjA5YywgMHhhMDc1LCAweDAwNDAsIDB4NDZiOSwgMHgwMDc4LCAweDQ2OTQsIDB4MjcwNCwKLQkweGFlNjgsIDB4NjgwOCwgMHhhNjMwLCAweDY4MGMsIDB4YTUyOSwgMHg4NDIxLCAweDAwNDAsIDB4NDZiOSwKLQkweDg3MzgsIDB4MjcwNCwgMHhhMDA1LCAweDAwYzAsIDB4NDZhOCwgMHg3MDljLCAweGEwNzUsIDB4MDBjMCwKLQkweDQ2OTQsIDB4MDA3YywgMHgwMDAwLCAweDAwMDUsIDB4MDAwOSwgMHgwMDBkLCAweDAwMTEsIDB4MDAxNSwKLQkweDAwMTksIDB4MDAxZCwgMHgwMDAwLCAweDAwMDMsIDB4MDAwOSwgMHgwMDBmLCAweDAwMTUsIDB4MDAxYiwKLQkweDAwMDAsIDB4MDAwMCwgMHg0NmJlLCAweDQ2YmIsIDB4MDAwMCwgMHgwMDAwLCAweDgwMDAsIDB4MDAwMCwKLQkweDQ2YmUsIDB4MDAwMCwgMHg0NmM2LCAweDQ2YzMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKLQkweDQ2YzYsIDB4MDAwMCwgMHg0NmMxLCAweDQ2YzEsIDB4MDAwMCwgMHgwMDAwLCAweDgwMDAsIDB4MDAwMCwKLQkweDQ2YzEsIDB4MDAwMCwgMHg0NmM3LCAweDQ2YzcsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKLQkweDQ2YzcsIDB4MTI3ZSwgMHgyMDkxLCAweDIyMDAsIDB4MjA3OSwgMHg1MDAwLCAweDIwNzEsIDB4MDAxMCwKLQkweDcwMDcsIDB4MDAwYSwgMHg3MDA3LCAweDAwMDIsIDB4NzAwMywgMHgwMDAwLCAweDIwNzEsIDB4MDAyMCwKLQkweDcwMDcsIDB4MDAwYSwgMHg3MDA3LCAweDAwMDIsIDB4NzAwMywgMHgwMDAwLCAweDIwNDksIDB4MDAwMCwKLQkweDEyN2YsIDB4MjAwMCwgMHgwMDdjLCAweDIwNDksIDB4NDcwMywgMHgyMDE5LCAweDAwMDAsIDB4NzAwNCwKLQkweDgwMDQsIDB4MDBjOCwgMHg0NzU2LCAweDcwMDcsIDB4MDAxMiwgMHg3MTA4LCAweDcwMDgsIDB4YTEwNiwKLQkweDAwYzAsIDB4NDcwZCwgMHhhMTg0LCAweDAxZTAsIDB4MDA0MCwgMHg0NzE4LCAweDEwNzgsIDB4MjNjYSwKLQkweDIwMDEsIDB4MDRmZCwgMHgyMDA0LCAweGEwODIsIDB4MDAwNSwgMHgwMGM4LCAweDQ3MjMsIDB4YTE4NCwKLQkweDQwMDAsIDB4MDBjMCwgMHg0NzBkLCAweGExOWMsIDB4MzAwYywgMHhhMzg2LCAweDIwMDQsIDB4MDA0MCwKLQkweDQ3MzEsIDB4YTM4NiwgMHgwMDA4LCAweDAwNDAsIDB4NDczYywgMHhhMzg2LCAweDIwMGMsIDB4MDBjMCwKLQkweDQ3MGQsIDB4NzIwMCwgMHg4MjA0LCAweDAwNDgsIDB4NDczYywgMHg3MzBjLCAweGEzODQsIDB4MDBmZiwKLQkweDAwNDAsIDB4NDczYywgMHgxMDc4LCAweDIzY2EsIDB4NzAwNywgMHgwMDEyLCAweDcwMDAsIDB4YTA4NCwKLQkweDAwMDEsIDB4MDBjMCwgMHg0NzU2LCAweDcwMDgsIDB4YTA4NCwgMHgwMWUwLCAweDAwYzAsIDB4NDc1NiwKLQkweDczMTAsIDB4NzAxNCwgMHhhMzA1LCAweDAwNDAsIDB4NDc1NiwgMHg3MTBjLCAweGExODQsIDB4MDMwMCwKLQkweDAwYzAsIDB4NDc1NiwgMHhhMTg0LCAweDAwZmYsIDB4MDBjMCwgMHg0NzAzLCAweDcwMDcsIDB4MDAxMiwKLQkweDcwMDcsIDB4MDAwOCwgMHg3MDA0LCAweGEwODQsIDB4MDAwOCwgMHgwMGMwLCAweDQ3NWEsIDB4NzAwNywKLQkweDAwMTIsIDB4NzEwOCwgMHg4MTAzLCAweDAwNDgsIDB4NDc1ZiwgMHg3MDAzLCAweDAwMDAsIDB4MjA0OSwKLQkweDAwMDAsIDB4MDA3YywgMHgxMDdlLCAweDAwN2UsIDB4MTI3ZSwgMHgxNTdlLCAweDIwOTEsIDB4MjIwMCwKLQkweDcxMDgsIDB4MTA3OCwgMHg0NzdhLCAweDE1N2YsIDB4MTI3ZiwgMHgyMDkxLCAweDgwMDEsIDB4MDA3ZiwKLQkweDEwN2YsIDB4MDA3YywgMHg3MjA0LCAweDc1MDAsIDB4NzMwYywgMHhhMzg0LCAweDAzMDAsIDB4MDBjMCwKLQkweDQ3YTEsIDB4YTE4NCwgMHgwMWUwLCAweDAwYzAsIDB4NDdjNSwgMHg3MTA4LCAweGExODQsIDB4MDFlMCwKLQkweDAwYzAsIDB4NDdjNSwgMHgyMDAxLCAweDA0ZmQsIDB4MjAwNCwgMHhhMDgyLCAweDAwMDUsIDB4MDBjOCwKLQkweDQ3OTUsIDB4YTE4NCwgMHg0MDAwLCAweDAwYzAsIDB4NDc4NSwgMHhhMTg0LCAweDAwMDcsIDB4MDA3OSwKLQkweDQ3OTksIDB4NDdhMywgMHg0N2I1LCAweDQ3YTEsIDB4NDdiNSwgMHg0N2ExLCAweDQ4MDEsIDB4NDdhMSwKLQkweDQ3ZmYsIDB4MTA3OCwgMHgyM2NhLCAweDcwMDQsIDB4YTA4NCwgMHgwMDEwLCAweGEwODUsIDB4MDAwMiwKLQkweDcwMDYsIDB4OGFmZiwgMHgwMGMwLCAweDQ3YjAsIDB4MjA0OSwgMHgwMDAwLCAweDAwNzgsIDB4NDdiNCwKLQkweDEwNzgsIDB4NDljNCwgMHgwMGMwLCAweDQ3YjAsIDB4MDA3YywgMHg3MDA0LCAweGEwODQsIDB4MDAxMCwKLQkweGEwODUsIDB4MDAwMiwgMHg3MDA2LCAweDhhZmYsIDB4MDBjMCwgMHg0N2MwLCAweDAwNzgsIDB4NDdjNCwKLQkweDEwNzgsIDB4NDljNCwgMHgwMGMwLCAweDQ3YzAsIDB4MDA3YywgMHg3MDA3LCAweDAwMTIsIDB4NzEwOCwKLQkweDAwZTAsIDB4NDdjOCwgMHgyMDkxLCAweDYwMDAsIDB4MDBlMCwgMHg0N2NjLCAweDIwOTEsIDB4NjAwMCwKLQkweDcwMDcsIDB4MDAxMiwgMHg3MDA3LCAweDAwMDgsIDB4NzAwNCwgMHhhMDg0LCAweDAwMDgsIDB4MDBjMCwKLQkweDQ3ZDQsIDB4NzAwNywgMHgwMDEyLCAweDcxMDgsIDB4ODEwMywgMHgwMDQ4LCAweDQ3ZDksIDB4NzAwMywKLQkweDAwMDAsIDB4NzAwMCwgMHhhMDA1LCAweDAwYzAsIDB4NDdlZCwgMHg3MDA0LCAweGEwMDUsIDB4MDBjMCwKLQkweDQ3ZWQsIDB4NzAwYywgMHhhMDA1LCAweDAwNDAsIDB4NDdlZiwgMHgwMDc4LCAweDQ3ZDAsIDB4MjA0OSwKLQkweDAwMDAsIDB4MTA3OCwgMHgzN2Q3LCAweDY4MTgsIDB4YTA4NCwgMHg4MDAwLCAweDAwNDAsIDB4NDdmYSwKLQkweDY4MWIsIDB4MDAwMiwgMHgwMDdjLCAweDEwNzgsIDB4MjNjYSwgMHgxMDc4LCAweDIzY2EsIDB4MTA3OCwKLQkweDQ4NWQsIDB4NzIxMCwgMHg3MTE0LCAweDcwMGMsIDB4YTA5YywgMHgwMGZmLCAweDI4MDAsIDB4YTMwMCwKLQkweGEyMTEsIDB4YTE4OSwgMHgwMDAwLCAweDEwNzgsIDB4NDg1ZCwgMHgyNzA0LCAweDJjNTgsIDB4YWM2MCwKLQkweDYzMDgsIDB4MjIwMCwgMHhhMzIyLCAweDYzMGMsIDB4MjEwMCwgMHhhMzFiLCAweDI0MDAsIDB4YTMwNSwKLQkweDAwNDAsIDB4NDgyNCwgMHgwMGM4LCAweDQ4MjQsIDB4ODQxMiwgMHg4MjEwLCAweDgzMGEsIDB4YTE4OSwKLQkweDAwMDAsIDB4MmI2MCwgMHgwMDc4LCAweDQ4MGIsIDB4MmI2MCwgMHg4YTA3LCAweDAwN2UsIDB4NjAwNCwKLQkweGEwODQsIDB4MDAwOCwgMHgwMDQwLCAweDQ4MzAsIDB4YTdiYSwgMHg0NmMzLCAweDAwNzgsIDB4NDgzMiwKLQkweGE3YmEsIDB4NDZiYiwgMHgwMDdmLCAweGE3M2QsIDB4MmMwMCwgMHg2ODg2LCAweDZmOGEsIDB4NmM5MiwKLQkweDZiOGUsIDB4NzAwNywgMHgwMDEyLCAweDEwNzgsIDB4NDcwMywgMHgwMDdjLCAweDg3MzgsIDB4MjcwNCwKLQkweGEwMDUsIDB4MDBjMCwgMHg0ODUxLCAweDYwOWMsIDB4YTAwNSwgMHgwMDQwLCAweDQ4NWEsIDB4MjA2MCwKLQkweDYwMDQsIDB4YTA4NCwgMHgwMDBmLCAweGEwODAsIDB4NDZjOSwgMHgyMDNjLCAweDg3ZmIsIDB4MTA0MCwKLQkweDIzY2EsIDB4OGE1MSwgMHgwMDQwLCAweDQ4NTksIDB4NzAwOCwgMHhhMDg0LCAweDAwMDMsIDB4YTA4NiwKLQkweDAwMDMsIDB4MDA3YywgMHgyMDUxLCAweDAwMDAsIDB4MDA3YywgMHg4YTUwLCAweDg3MzksIDB4MjcwNCwKLQkweGEwMDQsIDB4MDBjMCwgMHg0ODcxLCAweDYwMDAsIDB4YTA2NCwgMHgwMGMwLCAweDQ4NjgsIDB4MmQ2MCwKLQkweDYwMDQsIDB4YTA4NCwgMHgwMDBmLCAweGEwODAsIDB4NDZkOSwgMHgyMDNjLCAweDg3ZmIsIDB4MTA0MCwKLQkweDIzY2EsIDB4MDA3YywgMHgxMjdlLCAweDBkN2UsIDB4MjA5MSwgMHgyMjAwLCAweDBkN2YsIDB4Njg4NCwKLQkweDIwNjAsIDB4Njg4OCwgMHg2YjhjLCAweDZjOTAsIDB4ODA1NywgMHhhYWQ0LCAweDAwZmYsIDB4YTA4NCwKLQkweDAwZmYsIDB4MDA3ZSwgMHg2ODA0LCAweGEwODQsIDB4MDAwOCwgMHgwMDdmLCAweDAwNDAsIDB4NDg4YywKLQkweGEwYjgsIDB4NDZjMywgMHgwMDc4LCAweDQ4OGUsIDB4YTBiOCwgMHg0NmJiLCAweDdlMDgsIDB4YTZiNSwKLQkweDAwMGMsIDB4NjkwNCwgMHhhMThjLCAweDAwZmYsIDB4YTE4NiwgMHgwMDA3LCAweDAwNDAsIDB4NDg5YywKLQkweGExOGUsIDB4MDAwZiwgMHgwMGMwLCAweDQ4YTUsIDB4NjgxYywgMHhhMDg0LCAweDAwNDAsIDB4MDA0MCwKLQkweDQ4YWMsIDB4YTZiNSwgMHgwMDAxLCAweDAwNzgsIDB4NDhhYywgMHg2ODFjLCAweGEwODQsIDB4MDA0MCwKLQkweDAwNDAsIDB4NDhhYywgMHhhNmI1LCAweDAwMDEsIDB4NzAwNywgMHgwMDA0LCAweDcwMDQsIDB4YTA4NCwKLQkweDAwMDQsIDB4MDBjMCwgMHg0OGFlLCAweDI0MDAsIDB4YTMwNSwgMHgwMGMwLCAweDQ4YjksIDB4MDA3OCwKLQkweDQ4ZGYsIDB4MmM1OCwgMHgyNzA0LCAweDYxMDQsIDB4YWM2MCwgMHg2MDAwLCAweGE0MDAsIDB4NzAxYSwKLQkweDYwMDQsIDB4YTMwMSwgMHg3MDFlLCAweGExODQsIDB4MDAwOCwgMHgwMDQwLCAweDQ4Y2YsIDB4NjAxMCwKLQkweGEwODEsIDB4MDAwMCwgMHg3MDIyLCAweDYwMTQsIDB4YTA4MSwgMHgwMDAwLCAweDcwMjYsIDB4NjIwOCwKLQkweDI0MDAsIDB4YTIwMiwgMHg3MDEyLCAweDYyMGMsIDB4MjMwMCwgMHhhMjAzLCAweDcwMTYsIDB4NzYwMiwKLQkweDcwMDcsIDB4MDAwMSwgMHgyYjYwLCAweDEwNzgsIDB4NDgzZSwgMHgwMDc4LCAweDQ4ZTEsIDB4MTA3OCwKLQkweDQ5YzQsIDB4MDBjMCwgMHg0OGRmLCAweDEyN2YsIDB4MjAwMCwgMHgwMDdjLCAweDEyN2UsIDB4MGQ3ZSwKLQkweDIwOTEsIDB4MjIwMCwgMHgwZDdmLCAweDcwMDcsIDB4MDAwNCwgMHg3MDA0LCAweGEwODQsIDB4MDAwNCwKLQkweDAwYzAsIDB4NDhlZCwgMHg3MDAzLCAweDAwMDgsIDB4MTI3ZiwgMHgyMDAwLCAweDAwN2MsIDB4MTI3ZSwKLQkweDBkN2UsIDB4MjA5MSwgMHgyMjAwLCAweDBkN2YsIDB4MjA0OSwgMHg0OGY3LCAweDcwMDcsIDB4MDAwNCwKLQkweDcwMDQsIDB4YTA4NCwgMHgwMDA0LCAweDAwYzAsIDB4NDkwMCwgMHg3ZTA4LCAweGE2YjUsIDB4MDAwYywKLQkweDY5MDQsIDB4YTE4YywgMHgwMGZmLCAweGExODYsIDB4MDAwNywgMHgwMDQwLCAweDQ5MTMsIDB4YTE4ZSwKLQkweDAwMGYsIDB4MDBjMCwgMHg0OTFlLCAweDY4MWMsIDB4YTA4NCwgMHgwMDQwLCAweDAwNDAsIDB4NDkxYSwKLQkweGE2YjUsIDB4MDAwMSwgMHg2ODQwLCAweDIwNTAsIDB4MDA3OCwgMHg0OTI3LCAweDY4MWMsIDB4YTA4NCwKLQkweDAwMjAsIDB4MDBjMCwgMHg0OTI1LCAweGE2YjUsIDB4MDAwMSwgMHg2ODI4LCAweDIwNTAsIDB4MmQ2MCwKLQkweDYwMDQsIDB4YTBiYywgMHgwMDBmLCAweGE3YjgsIDB4NDZjOSwgMHgyNzNjLCAweDg3ZmIsIDB4MDBjMCwKLQkweDQ5M2IsIDB4MDA0OCwgMHg0OTM1LCAweDEwNzgsIDB4MjNjYSwgMHg2ODljLCAweGEwNjUsIDB4MDA0MCwKLQkweDQ5M2YsIDB4MDA3OCwgMHg0OTI4LCAweDEwNzgsIDB4NDljNCwgMHgwMGMwLCAweDQ5M2IsIDB4MTI3ZiwKLQkweDIwMDAsIDB4MDA3YywgMHgxMjdlLCAweDAwN2UsIDB4MDE3ZSwgMHgwZDdlLCAweDIwOTEsIDB4MjIwMCwKLQkweDBkN2YsIDB4MDM3ZiwgMHgwNDdmLCAweDdlMDgsIDB4YTZiNSwgMHgwMDBjLCAweDY5MDQsIDB4YTE4YywKLQkweDAwZmYsIDB4YTE4NiwgMHgwMDA3LCAweDAwNDAsIDB4NDk1OSwgMHhhMThlLCAweDAwMGYsIDB4MDBjMCwKLQkweDQ5NjIsIDB4NjgxYywgMHhhMDg0LCAweDAwNDAsIDB4MDA0MCwgMHg0OTY5LCAweGE2YjUsIDB4MDAwMSwKLQkweDAwNzgsIDB4NDk2OSwgMHg2ODFjLCAweGEwODQsIDB4MDA0MCwgMHgwMDQwLCAweDQ5NjksIDB4YTZiNSwKLQkweDAwMDEsIDB4MjA0OSwgMHg0OTQyLCAweDAxN2UsIDB4NjkwNCwgMHhhMThjLCAweDAwZmYsIDB4YTE4NiwKLQkweDAwMDcsIDB4MDA0MCwgMHg0OTc3LCAweGExOGUsIDB4MDAwZiwgMHgwMGMwLCAweDQ5N2EsIDB4Njg0MCwKLQkweDAwNzgsIDB4NDk3YiwgMHg2ODI4LCAweDAxN2YsIDB4YTA1NSwgMHgwMDQwLCAweDQ5YzEsIDB4MmQ3MCwKLQkweDJlNjAsIDB4NzAwNCwgMHhhMGJjLCAweDAwMGYsIDB4YTdiOCwgMHg0NmM5LCAweDI3M2MsIDB4ODdmYiwKLQkweDAwYzAsIDB4NDk5NSwgMHgwMDQ4LCAweDQ5OGUsIDB4MTA3OCwgMHgyM2NhLCAweDcwOWMsIDB4YTA3NSwKLQkweDIwNjAsIDB4MDA0MCwgMHg0OWMxLCAweDAwNzgsIDB4NDk4MSwgMHgyNzA0LCAweGFlNjgsIDB4NjgwOCwKLQkweGE0MjIsIDB4NjgwYywgMHhhMzFiLCAweDAwNDgsIDB4NDlhZSwgMHg4YTUxLCAweDAwYzAsIDB4NDlhMiwKLQkweDEwNzgsIDB4MjNjYSwgMHg4NzM4LCAweDI3MDQsIDB4YTAwNSwgMHgwMGMwLCAweDQ5OTYsIDB4NzA5YywKLQkweGEwNzUsIDB4MjA2MCwgMHgwMDQwLCAweDQ5YzEsIDB4MDA3OCwgMHg0OTgxLCAweDg0MjIsIDB4ODQyMCwKLQkweDgzMWEsIDB4YTM5OSwgMHgwMDAwLCAweDY5MDgsIDB4MjQwMCwgMHhhMTIyLCAweDY5MGMsIDB4MjMwMCwKLQkweGExMWIsIDB4MDBjOCwgMHg0OWJkLCAweDEwNzgsIDB4MjNjYSwgMHgyMDcxLCAweDAwMjAsIDB4MDA3OCwKLQkweDQ4YWMsIDB4MTI3ZiwgMHgyMDAwLCAweDAwN2MsIDB4NzAwOCwgMHhhMDg0LCAweDAwMDMsIDB4YTA4NiwKLQkweDAwMDMsIDB4MDA0MCwgMHg0OWVjLCAweDI3MDQsIDB4YWMwOCwgMHgyMTA0LCAweDcwMWEsIDB4ODEwOCwKLQkweDIxMDQsIDB4NzAxZSwgMHg4MTA4LCAweDIxMDQsIDB4NzAxMiwgMHg4MTA4LCAweDIxMDQsIDB4NzAxNiwKLQkweDYwMDQsIDB4YTA4NCwgMHgwMDA4LCAweDAwNDAsIDB4NDllMywgMHg4MTA4LCAweDIxMDQsIDB4NzAyMiwKLQkweDgxMDgsIDB4MjEwNCwgMHg3MDI2LCAweDc2MDIsIDB4NzAwNCwgMHhhMDg0LCAweDAwMTAsIDB4YTA4NSwKLQkweDAwMDEsIDB4NzAwNiwgMHgxMDc4LCAweDQ4M2UsIDB4MDA3YywgMHgxMjdlLCAweDAwN2UsIDB4MGQ3ZSwKLQkweDIwOTEsIDB4MjIwMCwgMHgyMDQ5LCAweDQ5ZWQsIDB4MGQ3ZiwgMHgwODdmLCAweDcxMDgsIDB4YTE4NCwKLQkweDAwMDMsIDB4MDBjMCwgMHg0YTE3LCAweDAxN2UsIDB4NjkwNCwgMHhhMThjLCAweDAwZmYsIDB4YTE4NiwKLQkweDAwMDcsIDB4MDA0MCwgMHg0YTA3LCAweGExOGUsIDB4MDAwZiwgMHgwMGMwLCAweDRhMGEsIDB4Njg0MCwKLQkweDAwNzgsIDB4NGEwYiwgMHg2ODI4LCAweDAxN2YsIDB4YTAwNSwgMHgwMDQwLCAweDRhMjUsIDB4MDA3OCwKLQkweDQ2NGEsIDB4MDAyMCwgMHg0YTE3LCAweDEwNzgsIDB4NDgwMSwgMHgwMDc4LCAweDRhMjUsIDB4MDBhMCwKLQkweDRhMWUsIDB4NzEwOCwgMHgxMDc4LCAweDQ3N2EsIDB4MDA3OCwgMHg0OWY2LCAweDcwMDcsIDB4MDAxMCwKLQkweDAwYTAsIDB4NGEyMCwgMHg3MTA4LCAweDEwNzgsIDB4NDc3YSwgMHg3MDA4LCAweGEwODYsIDB4MDAwOCwKLQkweDAwYzAsIDB4NDlmNiwgMHg3MDAwLCAweGEwMDUsIDB4MDBjMCwgMHg0OWY2LCAweDcwMDMsIDB4MDAwMCwKLQkweDIwNDksIDB4MDAwMCwgMHgxMjdmLCAweDIwMDAsIDB4MDA3YywgMHgxMjdlLCAweDE0N2UsIDB4MTM3ZSwKLQkweDE1N2UsIDB4MGM3ZSwgMHgwZDdlLCAweDIwOTEsIDB4MjIwMCwgMHgwZDdmLCAweDIwNDksIDB4NGEzNSwKLQkweGFkODAsIDB4MDAxMSwgMHgyMGEwLCAweDIwOTksIDB4MDAzMSwgMHg3MDBjLCAweGEwODQsIDB4MDBmZiwKLQkweDY4MmEsIDB4NzAwNywgMHgwMDA4LCAweDcwMDcsIDB4MDAwMiwgMHg3MDAzLCAweDAwMDEsIDB4MDA0MCwKLQkweDRhNTQsIDB4ODAwMCwgMHg4MGFjLCAweDUzYTUsIDB4NzAwNywgMHgwMDA0LCAweDcwMDQsIDB4YTA4NCwKLQkweDAwMDQsIDB4MDBjMCwgMHg0YTU2LCAweDBjN2YsIDB4MjA0OSwgMHgwMDAwLCAweDcwMDMsIDB4MDAwMCwKLQkweDE1N2YsIDB4MTM3ZiwgMHgxNDdmLCAweDEyN2YsIDB4MjAwMCwgMHgwMDdjLCAweDIwOTEsIDB4NjAwMCwKLQkweDIwOTEsIDB4ODAwMCwgMHg3OGNjLCAweGEwMDUsIDB4MDA0MCwgMHg0YTdkLCAweDc5OTQsIDB4NzBkMCwKLQkweGExMDYsIDB4MDBjMCwgMHg0YTdkLCAweDc4MDQsIDB4YTAwNSwgMHgwMDQwLCAweDRhN2QsIDB4NzgwNywKLQkweDAwMDAsIDB4MDA2OCwgMHg0YTdkLCAweDIwOTEsIDB4NDA4MCwgMHg3ODIwLCAweDgwMDEsIDB4NzgyMiwKLQkweDAwYzAsIDB4NGFkOCwgMHg3ODI0LCAweDc4MjIsIDB4MjA2OSwgMHg1MDQwLCAweDY4MDAsIDB4YTA4NCwKLQkweDAwMDcsIDB4MDA0MCwgMHg0YTliLCAweGEwODYsIDB4MDAwMiwgMHgwMDQwLCAweDRhOWIsIDB4NjgzNCwKLQkweGEwMGQsIDB4MDA0MCwgMHg0YTliLCAweDIxMDQsIDB4YTAwNSwgMHgwMDQwLCAweDRhOWIsIDB4ODAwMSwKLQkweDIwMGEsIDB4MDA0MCwgMHg0YjgwLCAweDc4NDgsIDB4YTAwNSwgMHgwMDQwLCAweDRhYTksIDB4ODAwMSwKLQkweDc4NGEsIDB4MDBjMCwgMHg0YWE5LCAweDIwMDksIDB4MDEwMiwgMHg2ODQ0LCAweDIwMGEsIDB4MTA3OCwKLQkweDIxYjEsIDB4Njg5MCwgMHhhMDA1LCAweDAwNDAsIDB4NGFiNSwgMHg4MDAxLCAweDY4OTIsIDB4MDBjMCwKLQkweDRhYjUsIDB4Njg2ZiwgMHgwMDAwLCAweDY4NzMsIDB4MDAwMSwgMHgyMDYxLCAweDUzMDAsIDB4MjBhOSwKLQkweDAxMDAsIDB4MjAwOSwgMHgwMDAyLCAweDYwMzQsIDB4YTAwNSwgMHgwMDQwLCAweDRhY2IsIDB4ODAwMSwKLQkweDYwMzYsIDB4MDBjMCwgMHg0YWNiLCAweDYwMTAsIDB4YTAwNSwgMHgwMDQwLCAweDRhY2IsIDB4MDE3ZSwKLQkweDEwNzgsIDB4MjFiMSwgMHgwMTdmLCAweGFjZTAsIDB4MDAxMCwgMHgwMDcwLCAweDRhZDEsIDB4MDA3OCwKLQkweDRhYmIsIDB4ODEwOSwgMHgwMDQwLCAweDRhZDgsIDB4MjBhOSwgMHgwMTAwLCAweDAwNzgsIDB4NGFiYiwKLQkweDEwNzgsIDB4NGFlNSwgMHgxMDc4LCAweDRiMGEsIDB4MjAwOSwgMHg1MDUxLCAweDIxMDQsIDB4MjAwOSwKLQkweDAxMDIsIDB4MjAwYSwgMHgyMDkxLCAweDgwMDEsIDB4MDA3YywgMHg3ODM0LCAweDgwMDEsIDB4NzgzNiwKLQkweDAwYzAsIDB4NGIwOSwgMHg3ODM4LCAweDc4MzYsIDB4MjA5MSwgMHg4MDAwLCAweDc4NDQsIDB4YTAwNSwKLQkweDAwYzAsIDB4NGFmNCwgMHgyMDAxLCAweDAxMDEsIDB4ODAwMSwgMHg3ODQ2LCAweGEwODAsIDB4NzMwMCwKLQkweDIwNDAsIDB4MjAwNCwgMHhhMDY1LCAweDAwNDAsIDB4NGIwOSwgMHg2MDI0LCAweGEwMDUsIDB4MDA0MCwKLQkweDRiMDUsIDB4ODAwMSwgMHg2MDI2LCAweDAwNDAsIDB4NGIzOSwgMHg2MDAwLCAweDJjNDAsIDB4MDA3OCwKLQkweDRhZmEsIDB4MDA3YywgMHg3ODI4LCAweDgwMDEsIDB4NzgyYSwgMHgwMGMwLCAweDRiMzgsIDB4NzgyYywKLQkweDc4MmEsIDB4NzgzMCwgMHhhMDA1LCAweDAwYzAsIDB4NGIxNywgMHgyMDAxLCAweDAyMDAsIDB4ODAwMSwKLQkweDc4MzIsIDB4ODAwMywgMHg4MDAzLCAweDgwMDMsIDB4ODAwMywgMHhhMDkwLCAweDUzMDAsIDB4YTI5OCwKLQkweDAwMDIsIDB4MjMwNCwgMHhhMDg0LCAweDAwMDgsIDB4MDA0MCwgMHg0YjM4LCAweGEyOTAsIDB4MDAwOSwKLQkweDIyMDQsIDB4YTAwNSwgMHgwMDQwLCAweDRiMzAsIDB4ODAwMSwgMHgyMDEyLCAweDAwYzAsIDB4NGIzOCwKLQkweDIzMDQsIDB4YTA4NCwgMHhmZmY3LCAweGEwODUsIDB4MDA4MCwgMHgyMDFhLCAweDEwNzgsIDB4MjFiMSwKLQkweDAwN2MsIDB4MjA2OSwgMHg1MDQwLCAweDY4MDAsIDB4YTAwNSwgMHgwMDQwLCAweDRiNDMsIDB4Njg0OCwKLQkweGFjMDYsIDB4MDA0MCwgMHg0YjgwLCAweDYwMWIsIDB4MDAwNiwgMHg2MGI0LCAweGEwODQsIDB4M2YwMCwKLQkweDYwMWUsIDB4NjAyMCwgMHhhMDg0LCAweDAwZmYsIDB4YTA4NSwgMHgwMDYwLCAweDYwMjIsIDB4NjAwMCwKLQkweDIwNDIsIDB4NjcxNCwgMHg2ZjgyLCAweDEwNzgsIDB4MTk1NiwgMHg2ODE4LCAweGEwMDUsIDB4MDA0MCwKLQkweDRiNWIsIDB4ODAwMSwgMHg2ODFhLCAweDY4MDgsIDB4YTA4NCwgMHhmZmVmLCAweDY4MGEsIDB4NjgxMCwKLQkweDgwMDEsIDB4MDBkMCwgMHg0YjY1LCAweDEwNzgsIDB4MjNjYSwgMHg2ODEyLCAweDYwMmYsIDB4MDAwMCwKLQkweDYwMzMsIDB4MDAwMCwgMHgyYzY4LCAweDEwNzgsIDB4MWM1MywgMHgyMDY5LCAweDUwNDAsIDB4Nzk0NCwKLQkweGExODQsIDB4MDEwMCwgMHgyMDAxLCAweDAwMDYsIDB4Njg2ZSwgMHgwMGMwLCAweDRiN2IsIDB4Njk4NiwKLQkweDIwMDEsIDB4MDAwNCwgMHg2ODZlLCAweDEwNzgsIDB4MjFhYywgMHgyMDkxLCAweDgwMDEsIDB4MDA3YywKLQkweDIwNjksIDB4MDEwMCwgMHgyMDA5LCAweDUwNDAsIDB4MjEwNCwgMHhhMDg0LCAweDAwMDcsIDB4MDA0MCwKLQkweDRiZGMsIDB4YTA4NiwgMHgwMDA3LCAweDAwYzAsIDB4NGI5NiwgMHgwZDdlLCAweDIwMDksIDB4NTA1MiwKLQkweDIxNmMsIDB4MTA3OCwgMHgzYTFhLCAweDBkN2YsIDB4MDA3OCwgMHg0YmRjLCAweDIwMDksIDB4NTA1MiwKLQkweDIxNjQsIDB4MTA3OCwgMHgyMzc1LCAweDYwMWIsIDB4MDAwNiwgMHg2ODU4LCAweGEwODQsIDB4M2YwMCwKLQkweDYwMWUsIDB4NjAyMCwgMHhhMDg0LCAweDAwZmYsIDB4YTA4NSwgMHgwMDQ4LCAweDYwMjIsIDB4NjAyZiwKLQkweDAwMDAsIDB4NjAzMywgMHgwMDAwLCAweDY4MzAsIDB4YTA4NCwgMHgwMDQwLCAweDAwNDAsIDB4NGJkMCwKLQkweDY4NGIsIDB4MDAwNCwgMHgyMGE5LCAweDAwMTQsIDB4Njg0OCwgMHhhMDg0LCAweDAwMDQsIDB4MDA0MCwKLQkweDRiYmQsIDB4MDA3MCwgMHg0YmJkLCAweDAwNzgsIDB4NGJiNCwgMHg2ODRiLCAweDAwMDksIDB4MjBhOSwKLQkweDAwMTQsIDB4Njg0OCwgMHhhMDg0LCAweDAwMDEsIDB4MDA0MCwgMHg0YmNhLCAweDAwNzAsIDB4NGJjYSwKLQkweDAwNzgsIDB4NGJjMSwgMHgyMGE5LCAweDAwZmEsIDB4MDA3MCwgMHg0YmQwLCAweDAwNzgsIDB4NGJjYywKLQkweDY4MDgsIDB4YTA4NCwgMHhmZmZkLCAweDY4MGEsIDB4NjgxYiwgMHgwMDQ4LCAweDIwMDksIDB4NTA1YiwKLQkweDIwMGIsIDB4MDAwNywgMHg3ODRjLCAweDc4NGEsIDB4MjA5MSwgMHg4MDAxLCAweDAwN2MsIDB4MjA3OSwKLQkweDUwMDAsIDB4MTA3OCwgMHg0YzBhLCAweDEwNzgsIDB4NGJlZSwgMHgxMDc4LCAweDRiZmMsIDB4NzgzMywKLQkweDAwMDAsIDB4Nzg0NywgMHgwMDAwLCAweDc4NGIsIDB4MDAwMCwgMHgwMDdjLCAweDIwMTksIDB4MDAwMywKLQkweDIwMTEsIDB4NTA0NiwgMHgyMjA0LCAweGEwODYsIDB4MDAzYywgMHgwMDQwLCAweDRiZjksIDB4MjAxOSwKLQkweDAwMDIsIDB4N2IyYSwgMHg3YjJlLCAweDAwN2MsIDB4MjAxOSwgMHgwMDM5LCAweDIwMTEsIDB4NTA0NiwKLQkweDIyMDQsIDB4YTA4NiwgMHgwMDNjLCAweDAwNDAsIDB4NGMwNywgMHgyMDE5LCAweDAwMjcsIDB4N2IzNiwKLQkweDdiM2EsIDB4MDA3YywgMHgyMDE5LCAweDM5NzEsIDB4MjAxMSwgMHg1MDQ2LCAweDIyMDQsIDB4YTA4NiwKLQkweDAwM2MsIDB4MDA0MCwgMHg0YzE1LCAweDIwMTksIDB4MjYyNiwgMHg3YjIyLCAweDdiMjYsIDB4NzgzZiwKLQkweDAwMDAsIDB4Nzg0MywgMHgwMDBhLCAweDAwN2MsIDB4MDAyMCwgMHgwMDJiLCAweDAwMDAsIDB4MDAyMCwKLQkweDAwMDAsIDB4MDAyMCwgMHgwMDAwLCAweDAwMjAsIDB4MDAwMCwgMHgwMDIwLCAweDAwMDAsIDB4MDAyMCwKLQkweDAwMDAsIDB4MDAyMCwgMHgwMDAwLCAweDAwMjAsIDB4MDAwMCwgMHgwMDIwLCAweDAwMDAsIDB4MDAyMCwKLQkweDAwMDAsIDB4MDAyMCwgMHgwMDAwLCAweDAwMjAsIDB4MDAwMCwgMHgwMDIwLCAweDAwMDAsIDB4MDAyMCwKLQkweDAwMDAsIDB4MDAyMCwgMHgwMDAwLCAweDAwMjAsIDB4MDAwMCwgMHgwMDIwLCAweDAwMDAsIDB4MDAxNCwKLQkweDAwMTQsIDB4OTg0OSwgMHgwMDE0LCAweDAwMTQsIDB4MDAxNCwgMHgwMDE0LCAweDAwMTQsIDB4MDAxNCwKLQkweDAwMTQsIDB4MDA4MCwgMHgwMDBmLCAweDAwMDAsIDB4MDIwMSwgMHgwNjA0LCAweDBjMDgsIDB4MjEyMCwKLQkweDQwMjIsIDB4Zjg4MCwgMHgwMDE4LCAweDMwMGIsIDB4YTIwMSwgMHgwMDE0LCAweGEyMDAsIDB4MDAxNCwKLQkweGEyMDAsIDB4MDIxNCwgMHgwMDAwLCAweDAwNmMsIDB4MDAwMiwgMHgwMDE0LCAweDk4ZDUsIDB4MDA5ZSwKLQkweDAwOWIsIDB4YTIwMiwgMHg4ODM4LCAweDM4MDYsIDB4ODgzOSwgMHgyMGMzLCAweDA4NjQsIDB4OTg4OSwKLQkweDI4YzEsIDB4OWNiNiwgMHhhMjAzLCAweDMwMGMsIDB4Mjg0NiwgMHg4MTYxLCAweDg0NmEsIDB4ODMwMCwKLQkweDE4NTYsIDB4ODgzYSwgMHg5ODY1LCAweDI4ZjIsIDB4OWM5NSwgMHg5ODU4LCAweDMwMGMsIDB4MjhlMSwKLQkweDljOTUsIDB4MjgwOSwgMHhhMjA2LCAweDY0YzAsIDB4NjdhMCwgMHg2ZmMwLCAweDE4MTQsIDB4ODgzYiwKLQkweDc4MmMsIDB4Nzg2ZCwgMHg5ODc5LCAweDI4MmIsIDB4YTIwNywgMHg2NGEwLCAweDY3YTAsIDB4NmZjMCwKLQkweDE4MTQsIDB4ODgzYiwgMHg3ODIyLCAweDg4M2UsIDB4OTg3ZCwgMHg4NTc2LCAweDg2NzcsIDB4MjA2YiwKLQkweDI4YzEsIDB4OWNiNiwgMHgyMDQ0LCAweDIxMDMsIDB4MjBhMiwgMHgyMDgxLCAweDk4NjUsIDB4YTIwOSwKLQkweDI5MDEsIDB4OTg5MSwgMHgwMDE0LCAweGEyMDUsIDB4YTMwMCwgMHgxODcyLCAweDg3OWEsIDB4ODgzYywKLQkweDFmZTIsIDB4YzYwMSwgMHhhMjBhLCAweDg1NmUsIDB4MDcwNCwgMHg5Yzk1LCAweDAwMTQsIDB4YTIwNCwKLQkweGEzMDAsIDB4MzAwOSwgMHgxOWUyLCAweGY4NjgsIDB4ODE3NiwgMHg4NmViLCAweDg1ZWIsIDB4ODcyZSwKLQkweDg3YTksIDB4ODgzZiwgMHgwOGU2LCAweDk4OTUsIDB4Zjg4MSwgMHg5ODkwLCAweGM4MDEsIDB4MDAxNCwKLQkweGY4YzEsIDB4MDAxNiwgMHg4NWIyLCAweDgwZjAsIDB4OTUzMiwgMHhmYjAyLCAweDFkZTIsIDB4MDAxNCwKLQkweDg1MzIsIDB4ZjI0MSwgMHgwMDE0LCAweDFkZTIsIDB4ODRhOCwgMHhkN2EwLCAweDFmZTYsIDB4MDAxNCwKLQkweGEyMDgsIDB4NjA0MywgMHg4MDA4LCAweDFkYzEsIDB4MDAxNiwgMHg4MzAwLCAweDgxNjAsIDB4ODQyYSwKLQkweGYwNDEsIDB4MzAwOCwgMHg4NGE4LCAweDExZDYsIDB4NzA0MiwgMHgyMGRkLCAweDAwMTEsIDB4MjBkNSwKLQkweDg4MjIsIDB4MDAxNiwgMHg4MDAwLCAweDI4NDcsIDB4MTAxMSwgMHg5OGM4LCAweDgwMDAsIDB4YTAwMCwKLQkweDI4MDIsIDB4MTAxMSwgMHg5OGNlLCAweDk4NjUsIDB4MjgzZSwgMHgxMDExLCAweDk4ZDIsIDB4YTIwYiwKLQkweDAwMTcsIDB4MzAwYywgMHhhMzAwLCAweDFkZTIsIDB4ZGI4MSwgMHgwMDE0LCAweDAyMTAsIDB4OThkZiwKLQkweDAwMTQsIDB4MjZlMCwgMHg4NzNhLCAweGZiMDIsIDB4MTlmMiwgMHgxZmUyLCAweDAwMTQsIDB4YTIwZCwKLQkweDM4MDYsIDB4MDIxMCwgMHg5Y2JiLCAweDA3MDQsIDB4MDAwMCwgMHgwMDZjLCAweDAwMDIsIDB4OTg0ZiwKLQkweDAwMTQsIDB4MDA5ZSwgMHgwMGEwLCAweDAwMTcsIDB4NjBmZiwgMHgzMDBjLCAweDg3MjAsIDB4YTIxMSwKLQkweDljZDAsIDB4ODc3MiwgMHg4ODM3LCAweDIxMDEsIDB4OTg3YSwgMHgxMGQyLCAweDc4ZTIsIDB4OWNkMywKLQkweDk4NTksIDB4ZDk4NCwgMHhmMGUyLCAweGYwYTEsIDB4OThjZCwgMHgwMDE0LCAweDg4MzEsIDB4ZDE2NiwKLQkweDg4MzAsIDB4ODAwZiwgMHg5NDAxLCAweGI1MjAsIDB4YzgwMiwgMHg4ODIwLCAweDk4N2EsIDB4MjMwMSwKLQkweDk4N2EsIDB4MTBkMiwgMHg3OGU0LCAweDljZDMsIDB4ODgyMSwgMHg4ODIwLCAweDk4NTksIDB4ZjEyMywKLQkweGYxNDIsIDB4ZjEwMSwgMHg5OGM2LCAweDEwZDIsIDB4NzBmNiwgMHg4ODMyLCAweDgyMDMsIDB4ODcwYywKLQkweGQ5OWUsIDB4NjAwMSwgMHgwMDE0LCAweDY4NDUsIDB4MDIxNCwgMHhhMjFiLCAweDljZDAsIDB4MjAwMSwKLQkweDk4YzUsIDB4ODIwMSwgMHgxODUyLCAweGQxODQsIDB4ZDE2MywgMHg4ODM0LCAweDgwMDEsIDB4OTg4ZCwKLQkweDMwMjcsIDB4ODRhOCwgMHgxYTU2LCAweDg4MzMsIDB4MDAxNCwgMHhhMjE4LCAweDY5ODEsIDB4OWNiYywKLQkweDZiMmEsIDB4NjkwMiwgMHgxODM0LCAweDk4OWQsIDB4MTgxNCwgMHg4MDEwLCAweDg1OTIsIDB4ODAyNiwKLQkweDg0YjksIDB4NzAyMSwgMHgwMDE0LCAweGEzMDAsIDB4NjllMSwgMHg5Y2E5LCAweDY5NGIsIDB4YTIxMywKLQkweDE0NjIsIDB4YTIxMywgMHg4MDAwLCAweDE2ZTEsIDB4OThiNSwgMHg4MDIzLCAweDE2ZTEsIDB4ODAwMSwKLQkweDEwZjEsIDB4MDAxNiwgMHg2OTY5LCAweGEyMTQsIDB4NjFjMiwgMHg4MDAyLCAweDE0ZTEsIDB4ODAwNCwKLQkweDE2ZTEsIDB4MDEwMSwgMHgzMDBhLCAweDg4MjcsIDB4MDAxNCwgMHhhMjE3LCAweDljYmMsIDB4MDAxNCwKLQkweGEzMDAsIDB4ODE4MSwgMHg4NDJhLCAweDg0YTgsIDB4MWNlNiwgMHg4ODJjLCAweDAwMTYsIDB4YTIxMiwKLQkweDljZDAsIDB4MTBkMiwgMHg3MGU0LCAweDAwMDQsIDB4ODAwNywgMHg5NDI0LCAweGNjMWEsIDB4OWNkMywKLQkweDk4YzUsIDB4ODgyNywgMHgzMDBhLCAweDAwMTMsIDB4ODAwMCwgMHg4NGE0LCAweDAwMTYsIDB4MTFjMiwKLQkweDIxMWUsIDB4ODcwZSwgMHhhMjFkLCAweDAwMTQsIDB4ODc4ZSwgMHgwMDE2LCAweGEyMWMsIDB4MTAzNSwKLQkweDk4OTEsIDB4YTIxMCwgMHhhMDAwLCAweDgwMTAsIDB4ODU5MiwgMHg4NTNiLCAweGQwNDQsIDB4ODAyMiwKLQkweDM4MDcsIDB4ODRiYiwgMHg5OGVhLCAweDgwMjEsIDB4MzgwNywgMHg4NGI5LCAweDMwMGMsIDB4ODE3ZSwKLQkweDg3MmIsIDB4ODc3MiwgMHg5ODkxLCAweDAwMDAsIDB4MDAyMCwgMHgwMDJiLCAweDAwMDAsIDB4MDAyMCwKLQkweDAwMDAsIDB4MDAyMCwgMHgwMDAwLCAweDAwMjAsIDB4MDAwMCwgMHgwMDIwLCAweDAwMDAsIDB4MDAyMCwKLQkweDAwMDAsIDB4MDAyMCwgMHgwMDAwLCAweDAwMjAsIDB4MDAwMCwgMHgwMDIwLCAweDAwMDAsIDB4MDAyMCwKLQkweDAwMDAsIDB4MDAyMCwgMHgwMDAwLCAweDAwMjAsIDB4MDAwMCwgMHgwMDIwLCAweDAwMDAsIDB4MDAyMCwKLQkweDAwMDAsIDB4MDAyMCwgMHgwMDAwLCAweDAwMjAsIDB4MDAwMCwgMHgwMDIwLCAweDAwMDAsIDB4MDAxNCwKLQkweDAwMTQsIDB4OTg0OSwgMHgwMDE0LCAweDAwMTQsIDB4OThlYSwgMHg5OGQ1LCAweDAwMTQsIDB4MDAxNCwKLQkweDAwMTQsIDB4MDA4MCwgMHgwMTNmLCAweDAwMDAsIDB4MDIwMSwgMHgwNjA0LCAweDBjMDgsIDB4MjEyMCwKLQkweDQwMjIsIDB4Zjg4MCwgMHgwMDE4LCAweDMwMGIsIDB4YTIwMSwgMHgwMDE0LCAweGEyMDAsIDB4MDAxNCwKLQkweGEyMDAsIDB4MDIxNCwgMHhhMjAyLCAweDg4MzgsIDB4MzgwNiwgMHg4ODM5LCAweDIwYzMsIDB4MDg2NCwKLQkweGE4MzMsIDB4MjhjMSwgMHg5Y2I2LCAweGEyMDMsIDB4MzAwYywgMHgyODQ2LCAweDgxNjEsIDB4ODQ2YSwKLQkweDgzMDAsIDB4MTg1NiwgMHg4ODNhLCAweGE4MDQsIDB4MjhmMiwgMHg5Yzk1LCAweGE4ZjQsIDB4MzAwYywKLQkweDI4ZTEsIDB4OWM5NSwgMHgyODA5LCAweGEyMDYsIDB4NjRjMCwgMHg2N2EwLCAweDZmYzAsIDB4MTgxNCwKLQkweDg4M2IsIDB4NzgyYywgMHg3ODZkLCAweGE4MDgsIDB4MjgyYiwgMHhhMjA3LCAweDY0YTAsIDB4NjdhMCwKLQkweDZmYzAsIDB4MTgxNCwgMHg4ODNiLCAweDc4MjIsIDB4ODgzZSwgMHhhODAyLCAweDg1NzYsIDB4ODY3NywKLQkweDIwNmIsIDB4MjhjMSwgMHg5Y2I2LCAweDIwNDQsIDB4MjEwMywgMHgyMGEyLCAweDIwODEsIDB4YThlMCwKLQkweGEyMDksIDB4MjkwMSwgMHhhODA5LCAweDAwMTQsIDB4YTIwNSwgMHhhMzAwLCAweDE4NzIsIDB4ODc5YSwKLQkweDg4M2MsIDB4MWZlMiwgMHhjNjAxLCAweGEyMGEsIDB4ODU2ZSwgMHgwNzA0LCAweDljOTUsIDB4MDAxNCwKLQkweGEyMDQsIDB4YTMwMCwgMHgzMDA5LCAweDE5ZTIsIDB4Zjg2OCwgMHg4MTc2LCAweDg2ZWIsIDB4ODVlYiwKLQkweDg3MmUsIDB4ODdhOSwgMHg4ODNmLCAweDA4ZTYsIDB4YThmMywgMHhmODgxLCAweGE4ZWMsIDB4YzgwMSwKLQkweDAwMTQsIDB4ZjhjMSwgMHgwMDE2LCAweDg1YjIsIDB4ODBmMCwgMHg5NTMyLCAweGZiMDIsIDB4MWRlMiwKLQkweDAwMTQsIDB4ODUzMiwgMHhmMjQxLCAweDAwMTQsIDB4MWRlMiwgMHg4NGE4LCAweGQ3YTAsIDB4MWZlNiwKLQkweDAwMTQsIDB4YTIwOCwgMHg2MDQzLCAweDgwMDgsIDB4MWRjMSwgMHgwMDE2LCAweDgzMDAsIDB4ODE2MCwKLQkweDg0MmEsIDB4ZjA0MSwgMHgzMDA4LCAweDg0YTgsIDB4MTFkNiwgMHg3MDQyLCAweDIwZGQsIDB4MDAxMSwKLQkweDIwZDUsIDB4ODgyMiwgMHgwMDE2LCAweDgwMDAsIDB4Mjg0NywgMHgxMDExLCAweGE4ZmMsIDB4ODAwMCwKLQkweGEwMDAsIDB4MjgwMiwgMHgxMDExLCAweGE4ZmQsIDB4YTg5MywgMHgyODNlLCAweDEwMTEsIDB4YThmZCwKLQkweGEyMGIsIDB4MDAxNywgMHgzMDBjLCAweGEzMDAsIDB4MWRlMiwgMHhkYjgxLCAweDAwMTQsIDB4MDIxMCwKLQkweGE4MDEsIDB4MDAxNCwgMHgyNmUwLCAweDg3M2EsIDB4ZmIwMiwgMHgxOWYyLCAweDFmZTIsIDB4MDAxNCwKLQkweGEyMGQsIDB4MzgwNiwgMHgwMjEwLCAweDljYmIsIDB4MDcwNCwgMHgwMDE3LCAweDYwZmYsIDB4MzAwYywKLQkweDg3MjAsIDB4YTIxMSwgMHg5ZDZiLCAweDg3NzIsIDB4ODgzNywgMHgyMTAxLCAweGE4MjEsIDB4MTBkMiwKLQkweDc4ZTIsIDB4OWQ2ZSwgMHhhOGZjLCAweGQ5ODQsIDB4ZjBlMiwgMHhmMGExLCAweGE4NmMsIDB4MDAxNCwKLQkweDg4MzEsIDB4ZDE2NiwgMHg4ODMwLCAweDgwMGYsIDB4OTQwMSwgMHhiNTIwLCAweGM4MDIsIDB4ODgyMCwKLQkweGE4MGYsIDB4MjMwMSwgMHhhODBkLCAweDEwZDIsIDB4NzhlNCwgMHg5ZDZlLCAweDg4MjEsIDB4ODgyMCwKLQkweGE4ZTYsIDB4ZjEyMywgMHhmMTQyLCAweGYxMDEsIDB4YTg0ZiwgMHgxMGQyLCAweDcwZjYsIDB4ODgzMiwKLQkweDgyMDMsIDB4ODcwYywgMHhkOTllLCAweDYwMDEsIDB4MDAxNCwgMHg2ODQ1LCAweDAyMTQsIDB4YTIxYiwKLQkweDlkNmIsIDB4MjAwMSwgMHhhODQwLCAweDgyMDEsIDB4MTg1MiwgMHhkMTg0LCAweGQxNjMsIDB4ODgzNCwKLQkweDgwMDEsIDB4YTgwMSwgMHgzMDI3LCAweDg0YTgsIDB4MWE1NiwgMHg4ODMzLCAweDAwMTQsIDB4YTIxOCwKLQkweDY5ODEsIDB4OWQ1NywgMHg2YjJhLCAweDY5MDIsIDB4MTgzNCwgMHhhODA1LCAweDE4MTQsIDB4ODAxMCwKLQkweDg1OTIsIDB4ODAyNiwgMHg4NGI5LCAweDcwMjEsIDB4MDAxNCwgMHhhMzAwLCAweDY5ZTEsIDB4OWQ0NCwKLQkweDY5NGIsIDB4YTIxMywgMHgxNDYyLCAweGEyMTMsIDB4ODAwMCwgMHgxNmUxLCAweGE4MGMsIDB4ODAyMywKLQkweDE2ZTEsIDB4ODAwMSwgMHgxMGYxLCAweDAwMTYsIDB4Njk2OSwgMHhhMjE0LCAweDYxYzIsIDB4ODAwMiwKLQkweDE0ZTEsIDB4ODAwNCwgMHgxNmUxLCAweDAxMDEsIDB4MzAwYSwgMHg4ODI3LCAweDAwMTQsIDB4YTIxNywKLQkweDlkNTcsIDB4MDAxNCwgMHhhMzAwLCAweDgxODEsIDB4ODQyYSwgMHg4NGE4LCAweDFjZTYsIDB4ODgyYywKLQkweDAwMTYsIDB4YTIxMiwgMHg5ZDZiLCAweDEwZDIsIDB4NzBlNCwgMHgwMDA0LCAweDgwMDcsIDB4OTQyNCwKLQkweGNjMWEsIDB4OWQ2ZSwgMHhhOGY4LCAweDg4MjcsIDB4MzAwYSwgMHgwMDEzLCAweDgwMDAsIDB4ODRhNCwKLQkweDAwMTYsIDB4MTFjMiwgMHgyMTFlLCAweDg3MGUsIDB4YTIxZCwgMHgwMDE0LCAweDg3OGUsIDB4MDAxNiwKLQkweGEyMWMsIDB4MTAzNSwgMHhhOGI0LCAweGEyMTAsIDB4MzgwNywgMHgzMDBjLCAweDgxN2UsIDB4ODcyYiwKLQkweDg3NzIsIDB4YThhZCwgMHgwMDAwLCAweDhlYzYKLX07Ci0KLSNlbmRpZiAvKiBSRUxPQURfRklSTVdBUkUgKi8KLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IHJpc2NfY29kZV9sZW5ndGgwMSA9IDB4M2YxNDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9yYWlkX2NsYXNzLmMgYi9kcml2ZXJzL3Njc2kvcmFpZF9jbGFzcy5jCmluZGV4IGNhYTBjMzYuLjViMWMxMjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9yYWlkX2NsYXNzLmMKKysrIGIvZHJpdmVycy9zY3NpL3JhaWRfY2xhc3MuYwpAQCAtMSw1ICsxLDEzIEBACiAvKgotICogUkFJRCBBdHRyaWJ1dGVzCisgKiByYWlkX2NsYXNzLmMgLSBpbXBsZW1lbnRhdGlvbiBvZiBhIHNpbXBsZSByYWlkIHZpc3VhbGlzYXRpb24gY2xhc3MKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgLSBKYW1lcyBCb3R0b21sZXkgPEphbWVzLkJvdHRvbWxleUBzdGVlbGV5ZS5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIEdQTHYyCisgKgorICogVGhpcyBjbGFzcyBpcyBkZXNpZ25lZCB0byBhbGxvdyByYWlkIGF0dHJpYnV0ZXMgdG8gYmUgdmlzdWFsaXNlZCBhbmQKKyAqIG1hbmlwdWxhdGVkIGluIGEgZm9ybSBpbmRlcGVuZGVudCBvZiB0aGUgdW5kZXJseWluZyByYWlkLiAgVWx0aW1hdGVseSB0aGlzCisgKiBzaG91bGQgd29yayBmb3IgYm90aCBoYXJkd2FyZSBhbmQgc29mdHdhcmUgcmFpZHMuCiAgKi8KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC0yNCw3ICszMiw3IEBACiAKIHN0cnVjdCByYWlkX2NvbXBvbmVudCB7CiAJc3RydWN0IGxpc3RfaGVhZCBub2RlOwotCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgY2xhc3NfZGV2aWNlIGNkZXY7CiAJaW50IG51bTsKIH07CiAKQEAgLTc0LDExICs4MiwxMCBAQAogCiAJQlVHX09OKGNsYXNzX2dldF9kZXZkYXRhKGNkZXYpKTsKIAotCXJkID0ga21hbGxvYyhzaXplb2YoKnJkKSwgR0ZQX0tFUk5FTCk7CisJcmQgPSBremFsbG9jKHNpemVvZigqcmQpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXJkKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCW1lbXNldChyZCwgMCwgc2l6ZW9mKCpyZCkpOwogCUlOSVRfTElTVF9IRUFEKCZyZC0+Y29tcG9uZW50X2xpc3QpOwogCWNsYXNzX3NldF9kZXZkYXRhKGNkZXYsIHJkKTsKIAkJCkBAIC05MCwxNSArOTcsMTUgQEAKIHsKIAlzdHJ1Y3QgcmFpZF9kYXRhICpyZCA9IGNsYXNzX2dldF9kZXZkYXRhKGNkZXYpOwogCXN0cnVjdCByYWlkX2NvbXBvbmVudCAqcmMsICpuZXh0OworCWRldl9wcmludGsoS0VSTl9FUlIsIGRldiwgIlJBSUQgUkVNT1ZFXG4iKTsKIAljbGFzc19zZXRfZGV2ZGF0YShjZGV2LCBOVUxMKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmMsIG5leHQsICZyZC0+Y29tcG9uZW50X2xpc3QsIG5vZGUpIHsKLQkJY2hhciBidWZbNDBdOwotCQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiY29tcG9uZW50LSVkIiwgcmMtPm51bSk7CiAJCWxpc3RfZGVsKCZyYy0+bm9kZSk7Ci0JCXN5c2ZzX3JlbW92ZV9saW5rKCZjZGV2LT5rb2JqLCBidWYpOwotCQlrZnJlZShyYyk7CisJCWRldl9wcmludGsoS0VSTl9FUlIsIHJjLT5jZGV2LmRldiwgIlJBSUQgQ09NUE9ORU5UIFJFTU9WRVxuIik7CisJCWNsYXNzX2RldmljZV91bnJlZ2lzdGVyKCZyYy0+Y2Rldik7CiAJfQotCWtmcmVlKGNsYXNzX2dldF9kZXZkYXRhKGNkZXYpKTsKKwlkZXZfcHJpbnRrKEtFUk5fRVJSLCBkZXYsICJSQUlEIFJFTU9WRSBET05FXG4iKTsKKwlrZnJlZShyZCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTExMiwxMCArMTE5LDExIEBACiAJZW51bSByYWlkX3N0YXRlCXZhbHVlOwogCWNoYXIJCSpuYW1lOwogfSByYWlkX3N0YXRlc1tdID0gewotCXsgUkFJRF9BQ1RJVkUsICJhY3RpdmUiIH0sCi0JeyBSQUlEX0RFR1JBREVELCAiZGVncmFkZWQiIH0sCi0JeyBSQUlEX1JFU1lOQ0lORywgInJlc3luY2luZyIgfSwKLQl7IFJBSURfT0ZGTElORSwgIm9mZmxpbmUiIH0sCisJeyBSQUlEX1NUQVRFX1VOS05PV04sICJ1bmtub3duIiB9LAorCXsgUkFJRF9TVEFURV9BQ1RJVkUsICJhY3RpdmUiIH0sCisJeyBSQUlEX1NUQVRFX0RFR1JBREVELCAiZGVncmFkZWQiIH0sCisJeyBSQUlEX1NUQVRFX1JFU1lOQ0lORywgInJlc3luY2luZyIgfSwKKwl7IFJBSURfU1RBVEVfT0ZGTElORSwgIm9mZmxpbmUiIH0sCiB9OwogCiBzdGF0aWMgY29uc3QgY2hhciAqcmFpZF9zdGF0ZV9uYW1lKGVudW0gcmFpZF9zdGF0ZSBzdGF0ZSkKQEAgLTEzMiw2ICsxNDAsMzMgQEAKIAlyZXR1cm4gbmFtZTsKIH0KIAorc3RhdGljIHN0cnVjdCB7CisJZW51bSByYWlkX2xldmVsIHZhbHVlOworCWNoYXIgKm5hbWU7Cit9IHJhaWRfbGV2ZWxzW10gPSB7CisJeyBSQUlEX0xFVkVMX1VOS05PV04sICJ1bmtub3duIiB9LAorCXsgUkFJRF9MRVZFTF9MSU5FQVIsICJsaW5lYXIiIH0sCisJeyBSQUlEX0xFVkVMXzAsICJyYWlkMCIgfSwKKwl7IFJBSURfTEVWRUxfMSwgInJhaWQxIiB9LAorCXsgUkFJRF9MRVZFTF8zLCAicmFpZDMiIH0sCisJeyBSQUlEX0xFVkVMXzQsICJyYWlkNCIgfSwKKwl7IFJBSURfTEVWRUxfNSwgInJhaWQ1IiB9LAorCXsgUkFJRF9MRVZFTF82LCAicmFpZDYiIH0sCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqcmFpZF9sZXZlbF9uYW1lKGVudW0gcmFpZF9sZXZlbCBsZXZlbCkKK3sKKwlpbnQgaTsKKwljaGFyICpuYW1lID0gTlVMTDsKKworCWZvciAoaSA9IDA7IGkgPCBzaXplb2YocmFpZF9sZXZlbHMpL3NpemVvZihyYWlkX2xldmVsc1swXSk7IGkrKykgeworCQlpZiAocmFpZF9sZXZlbHNbaV0udmFsdWUgPT0gbGV2ZWwpIHsKKwkJCW5hbWUgPSByYWlkX2xldmVsc1tpXS5uYW1lOworCQkJYnJlYWs7CisJCX0KKwl9CisJcmV0dXJuIG5hbWU7Cit9CiAKICNkZWZpbmUgcmFpZF9hdHRyX3Nob3dfaW50ZXJuYWwoYXR0ciwgZm10LCB2YXIsIGNvZGUpCQkJXAogc3RhdGljIHNzaXplX3QgcmFpZF9zaG93XyMjYXR0cihzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCVwKQEAgLTE2MSwxMSArMTk2LDIyIEBACiAKICNkZWZpbmUgcmFpZF9hdHRyX3JvKGF0dHIpCXJhaWRfYXR0cl9yb19pbnRlcm5hbChhdHRyLCApCiAjZGVmaW5lIHJhaWRfYXR0cl9yb19mbihhdHRyKQlyYWlkX2F0dHJfcm9faW50ZXJuYWwoYXR0ciwgQVRUUl9DT0RFKGF0dHIpKQotI2RlZmluZSByYWlkX2F0dHJfcm9fc3RhdGUoYXR0cikJcmFpZF9hdHRyX3JvX3N0YXRlcyhhdHRyLCBhdHRyLCBBVFRSX0NPREUoYXR0cikpCisjZGVmaW5lIHJhaWRfYXR0cl9yb19zdGF0ZShhdHRyKQlyYWlkX2F0dHJfcm9fc3RhdGVzKGF0dHIsIGF0dHIsICkKKyNkZWZpbmUgcmFpZF9hdHRyX3JvX3N0YXRlX2ZuKGF0dHIpCXJhaWRfYXR0cl9yb19zdGF0ZXMoYXR0ciwgYXR0ciwgQVRUUl9DT0RFKGF0dHIpKQogCi1yYWlkX2F0dHJfcm8obGV2ZWwpOworCityYWlkX2F0dHJfcm9fc3RhdGUobGV2ZWwpOwogcmFpZF9hdHRyX3JvX2ZuKHJlc3luYyk7Ci1yYWlkX2F0dHJfcm9fc3RhdGUoc3RhdGUpOworcmFpZF9hdHRyX3JvX3N0YXRlX2ZuKHN0YXRlKTsKKworc3RhdGljIHZvaWQgcmFpZF9jb21wb25lbnRfcmVsZWFzZShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2KQoreworCXN0cnVjdCByYWlkX2NvbXBvbmVudCAqcmMgPSBjb250YWluZXJfb2YoY2Rldiwgc3RydWN0IHJhaWRfY29tcG9uZW50LAorCQkJCQkJIGNkZXYpOworCWRldl9wcmludGsoS0VSTl9FUlIsIHJjLT5jZGV2LmRldiwgIkNPTVBPTkVOVCBSRUxFQVNFXG4iKTsKKwlwdXRfZGV2aWNlKHJjLT5jZGV2LmRldik7CisJa2ZyZWUocmMpOworfQogCiB2b2lkIHJhaWRfY29tcG9uZW50X2FkZChzdHJ1Y3QgcmFpZF90ZW1wbGF0ZSAqcixzdHJ1Y3QgZGV2aWNlICpyYWlkX2RldiwKIAkJCXN0cnVjdCBkZXZpY2UgKmNvbXBvbmVudF9kZXYpCkBAIC0xNzUsMzQgKzIyMSwzNiBAQAogCQkJCQkJICAgICAgcmFpZF9kZXYpOwogCXN0cnVjdCByYWlkX2NvbXBvbmVudCAqcmM7CiAJc3RydWN0IHJhaWRfZGF0YSAqcmQgPSBjbGFzc19nZXRfZGV2ZGF0YShjZGV2KTsKLQljaGFyIGJ1Zls0MF07CiAKLQlyYyA9IGttYWxsb2Moc2l6ZW9mKCpyYyksIEdGUF9LRVJORUwpOworCXJjID0ga3phbGxvYyhzaXplb2YoKnJjKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFyYykKIAkJcmV0dXJuOwogCiAJSU5JVF9MSVNUX0hFQUQoJnJjLT5ub2RlKTsKLQlyYy0+ZGV2ID0gY29tcG9uZW50X2RldjsKKwljbGFzc19kZXZpY2VfaW5pdGlhbGl6ZSgmcmMtPmNkZXYpOworCXJjLT5jZGV2LnJlbGVhc2UgPSByYWlkX2NvbXBvbmVudF9yZWxlYXNlOworCXJjLT5jZGV2LmRldiA9IGdldF9kZXZpY2UoY29tcG9uZW50X2Rldik7CiAJcmMtPm51bSA9IHJkLT5jb21wb25lbnRfY291bnQrKzsKIAotCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICJjb21wb25lbnQtJWQiLCByYy0+bnVtKTsKKwlzbnByaW50ZihyYy0+Y2Rldi5jbGFzc19pZCwgc2l6ZW9mKHJjLT5jZGV2LmNsYXNzX2lkKSwKKwkJICJjb21wb25lbnQtJWQiLCByYy0+bnVtKTsKIAlsaXN0X2FkZF90YWlsKCZyYy0+bm9kZSwgJnJkLT5jb21wb25lbnRfbGlzdCk7Ci0Jc3lzZnNfY3JlYXRlX2xpbmsoJmNkZXYtPmtvYmosICZjb21wb25lbnRfZGV2LT5rb2JqLCBidWYpOworCXJjLT5jZGV2LnBhcmVudCA9IGNkZXY7CisJcmMtPmNkZXYuY2xhc3MgPSAmcmFpZF9jbGFzcy5jbGFzczsKKwljbGFzc19kZXZpY2VfYWRkKCZyYy0+Y2Rldik7CiB9CiBFWFBPUlRfU1lNQk9MKHJhaWRfY29tcG9uZW50X2FkZCk7CiAKIHN0cnVjdCByYWlkX3RlbXBsYXRlICoKIHJhaWRfY2xhc3NfYXR0YWNoKHN0cnVjdCByYWlkX2Z1bmN0aW9uX3RlbXBsYXRlICpmdCkKIHsKLQlzdHJ1Y3QgcmFpZF9pbnRlcm5hbCAqaSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCByYWlkX2ludGVybmFsKSwKKwlzdHJ1Y3QgcmFpZF9pbnRlcm5hbCAqaSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByYWlkX2ludGVybmFsKSwKIAkJCQkJICBHRlBfS0VSTkVMKTsKIAlpbnQgY291bnQgPSAwOwogCiAJaWYgKHVubGlrZWx5KCFpKSkKIAkJcmV0dXJuIE5VTEw7CiAKLQltZW1zZXQoaSwgMCwgc2l6ZW9mKCppKSk7Ci0KIAlpLT5mID0gZnQ7CiAKIAlpLT5yLnJhaWRfYXR0cnMuYWMuY2xhc3MgPSAmcmFpZF9jbGFzcy5jbGFzczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zYXRhX212LmMgYi9kcml2ZXJzL3Njc2kvc2F0YV9tdi5jCmluZGV4IDBmNDY5ZTMuLjI1N2MxMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zYXRhX212LmMKKysrIGIvZHJpdmVycy9zY3NpL3NhdGFfbXYuYwpAQCAtMzAsOCArMzAsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLSNpbmNsdWRlICJzY3NpLmgiCiAjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpYmF0YS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCkBAIC0yNzAsNyArMjcwLDcgQEAKIHN0YXRpYyB2b2lkIG12X2VuZ190aW1lb3V0KHN0cnVjdCBhdGFfcG9ydCAqYXApOwogc3RhdGljIGludCBtdl9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCk7CiAKLXN0YXRpYyBTY3NpX0hvc3RfVGVtcGxhdGUgbXZfc2h0ID0geworc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgbXZfc2h0ID0gewogCS5tb2R1bGUJCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQkJPSBEUlZfTkFNRSwKIAkuaW9jdGwJCQk9IGF0YV9zY3NpX2lvY3RsLApAQCAtMzQ5LDcgKzM0OSw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBtdl9wY2lfdGJsW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgbXZfcGNpX3RibFtdID0gewogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTUFSVkVMTCwgMHg1MDQwKSwgMCwgMCwgY2hpcF81MDR4fSwKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01BUlZFTEwsIDB4NTA0MSksIDAsIDAsIGNoaXBfNTA0eH0sCiAJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NQVJWRUxMLCAweDUwODApLCAwLCAwLCBjaGlwXzUwOHh9LApAQCAtMzU5LDYgKzM1OSw4IEBACiAJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NQVJWRUxMLCAweDYwNDEpLCAwLCAwLCBjaGlwXzYwNHh9LAogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTUFSVkVMTCwgMHg2MDgwKSwgMCwgMCwgY2hpcF82MDh4fSwKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01BUlZFTEwsIDB4NjA4MSksIDAsIDAsIGNoaXBfNjA4eH0sCisKKwl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FEQVBURUMyLCAweDAyNDEpLCAwLCAwLCBjaGlwXzYwNHh9LAogCXt9CQkJLyogdGVybWluYXRlIGxpc3QgKi8KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zYXRhX252LmMgYi9kcml2ZXJzL3Njc2kvc2F0YV9udi5jCmluZGV4IGQ1NzM4ODguLjQ5NTQ4OTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zYXRhX252LmMKKysrIGIvZHJpdmVycy9zY3NpL3NhdGFfbnYuYwpAQCAtNjIsNyArNjIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSAic2NzaS5oIgogI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CiAjaW5jbHVkZSA8bGludXgvbGliYXRhLmg+CiAKQEAgLTEzOCw3ICsxMzcsNyBAQAogCUNLODA0CiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgbnZfcGNpX3RibFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIG52X3BjaV90YmxbXSA9IHsKIAl7IFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0UyU19TQVRBLAogCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBORk9SQ0UyIH0sCiAJeyBQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFM1NfU0FUQSwKQEAgLTIxOSw3ICsyMTgsNyBAQAogCS5yZW1vdmUJCQk9IGF0YV9wY2lfcmVtb3ZlX29uZSwKIH07CiAKLXN0YXRpYyBTY3NpX0hvc3RfVGVtcGxhdGUgbnZfc2h0ID0geworc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgbnZfc2h0ID0gewogCS5tb2R1bGUJCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQkJPSBEUlZfTkFNRSwKIAkuaW9jdGwJCQk9IGF0YV9zY3NpX2lvY3RsLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NhdGFfcHJvbWlzZS5jIGIvZHJpdmVycy9zY3NpL3NhdGFfcHJvbWlzZS5jCmluZGV4IGI0MWM5NzcuLjI0MmQ5MDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zYXRhX3Byb21pc2UuYworKysgYi9kcml2ZXJzL3Njc2kvc2F0YV9wcm9taXNlLmMKQEAgLTM5LDggKzM5LDggQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgInNjc2kuaCIKICNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CiAjaW5jbHVkZSA8bGludXgvbGliYXRhLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSAic2F0YV9wcm9taXNlLmgiCkBAIC05NCw3ICs5NCw3IEBACiBzdGF0aWMgaW50IHBkY19xY19pc3N1ZV9wcm90KHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOwogCiAKLXN0YXRpYyBTY3NpX0hvc3RfVGVtcGxhdGUgcGRjX2F0YV9zaHQgPSB7CitzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBwZGNfYXRhX3NodCA9IHsKIAkubW9kdWxlCQkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJCT0gRFJWX05BTUUsCiAJLmlvY3RsCQkJPSBhdGFfc2NzaV9pb2N0bCwKQEAgLTE5Myw3ICsxOTMsNyBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGRjX2F0YV9wY2lfdGJsW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGRjX2F0YV9wY2lfdGJsW10gPSB7CiAJeyBQQ0lfVkVORE9SX0lEX1BST01JU0UsIDB4MzM3MSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwKIAkgIGJvYXJkXzIwMzd4IH0sCiAJeyBQQ0lfVkVORE9SX0lEX1BST01JU0UsIDB4MzU3MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zYXRhX3FzdG9yLmMgYi9kcml2ZXJzL3Njc2kvc2F0YV9xc3Rvci5jCmluZGV4IDY1NTAyYzEuLmIyZjYzMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zYXRhX3FzdG9yLmMKKysrIGIvZHJpdmVycy9zY3NpL3NhdGFfcXN0b3IuYwpAQCAtMzYsNyArMzYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSAic2NzaS5oIgogI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8bGludXgvbGliYXRhLmg+CkBAIC0xMjgsNyArMTI3LDcgQEAKIHN0YXRpYyB2b2lkIHFzX2lycV9jbGVhcihzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKIHN0YXRpYyB2b2lkIHFzX2VuZ190aW1lb3V0KHN0cnVjdCBhdGFfcG9ydCAqYXApOwogCi1zdGF0aWMgU2NzaV9Ib3N0X1RlbXBsYXRlIHFzX2F0YV9zaHQgPSB7CitzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBxc19hdGFfc2h0ID0gewogCS5tb2R1bGUJCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQkJPSBEUlZfTkFNRSwKIAkuaW9jdGwJCQk9IGF0YV9zY3NpX2lvY3RsLApAQCAtMTg1LDcgKzE4NCw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBxc19hdGFfcGNpX3RibFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHFzX2F0YV9wY2lfdGJsW10gPSB7CiAJeyBQQ0lfVkVORE9SX0lEX1BEQywgMHgyMDY4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLAogCSAgYm9hcmRfMjA2OF9pZHggfSwKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NhdGFfc2lsLmMgYi9kcml2ZXJzL3Njc2kvc2F0YV9zaWwuYwppbmRleCA0MzVmN2UwLi4zNjA5MTg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2F0YV9zaWwuYworKysgYi9kcml2ZXJzL3Njc2kvc2F0YV9zaWwuYwpAQCAtNDIsNyArNDIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSAic2NzaS5oIgogI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CiAjaW5jbHVkZSA8bGludXgvbGliYXRhLmg+CiAKQEAgLTg4LDcgKzg3LDcgQEAKIHN0YXRpYyB2b2lkIHNpbF9wb3N0X3NldF9tb2RlIChzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKIAogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc2lsX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzaWxfcGNpX3RibFtdID0gewogCXsgMHgxMDk1LCAweDMxMTIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIHNpbF8zMTEyX20xNXcgfSwKIAl7IDB4MTA5NSwgMHgwMjQwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBzaWxfMzExMl9tMTV3IH0sCiAJeyAweDEwOTUsIDB4MzUxMiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgc2lsXzMxMTIgfSwKQEAgLTEzMSw3ICsxMzAsNyBAQAogCS5yZW1vdmUJCQk9IGF0YV9wY2lfcmVtb3ZlX29uZSwKIH07CiAKLXN0YXRpYyBTY3NpX0hvc3RfVGVtcGxhdGUgc2lsX3NodCA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIHNpbF9zaHQgPSB7CiAJLm1vZHVsZQkJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCQk9IERSVl9OQU1FLAogCS5pb2N0bAkJCT0gYXRhX3Njc2lfaW9jdGwsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2F0YV9zaWwyNC5jIGIvZHJpdmVycy9zY3NpL3NhdGFfc2lsMjQuYwppbmRleCBlNmM4ZTg5Li5kMzE5OGQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2F0YV9zaWwyNC5jCisrKyBiL2RyaXZlcnMvc2NzaS9zYXRhX3NpbDI0LmMKQEAgLTM3LDcgKzM3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+Ci0jaW5jbHVkZSAic2NzaS5oIgorI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CiAjaW5jbHVkZSA8bGludXgvbGliYXRhLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKQEAgLTI0MCw3ICsyNDAsNyBAQAogc3RhdGljIHZvaWQgc2lsMjRfaG9zdF9zdG9wKHN0cnVjdCBhdGFfaG9zdF9zZXQgKmhvc3Rfc2V0KTsKIHN0YXRpYyBpbnQgc2lsMjRfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc2lsMjRfcGNpX3RibFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNpbDI0X3BjaV90YmxbXSA9IHsKIAl7IDB4MTA5NSwgMHgzMTI0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBCSURfU0lMMzEyNCB9LAogCXsgMHgxMDk1LCAweDMxMzIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIEJJRF9TSUwzMTMyIH0sCiAJeyAweDEwOTUsIDB4MzEzMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQklEX1NJTDMxMzEgfSwKQEAgLTI1NSw3ICsyNTUsNyBAQAogCS5yZW1vdmUJCQk9IGF0YV9wY2lfcmVtb3ZlX29uZSwgLyogc2FmZT8gKi8KIH07CiAKLXN0YXRpYyBTY3NpX0hvc3RfVGVtcGxhdGUgc2lsMjRfc2h0ID0geworc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgc2lsMjRfc2h0ID0gewogCS5tb2R1bGUJCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQkJPSBEUlZfTkFNRSwKIAkuaW9jdGwJCQk9IGF0YV9zY3NpX2lvY3RsLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NhdGFfc2lzLmMgYi9kcml2ZXJzL3Njc2kvc2F0YV9zaXMuYwppbmRleCA0MjI4OGJlLi4zMmUxMjYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2F0YV9zaXMuYworKysgYi9kcml2ZXJzL3Njc2kvc2F0YV9zaXMuYwpAQCAtMzksNyArMzksNiBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSAic2NzaS5oIgogI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CiAjaW5jbHVkZSA8bGludXgvbGliYXRhLmg+CiAKQEAgLTY4LDcgKzY3LDcgQEAKIHN0YXRpYyB1MzIgc2lzX3Njcl9yZWFkIChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBpbnQgc2NfcmVnKTsKIHN0YXRpYyB2b2lkIHNpc19zY3Jfd3JpdGUgKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGludCBzY19yZWcsIHUzMiB2YWwpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc2lzX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzaXNfcGNpX3RibFtdID0gewogCXsgUENJX1ZFTkRPUl9JRF9TSSwgMHgxODAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIHNpc18xODAgfSwKIAl7IFBDSV9WRU5ET1JfSURfU0ksIDB4MTgxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBzaXNfMTgwIH0sCiAJeyBQQ0lfVkVORE9SX0lEX1NJLCAweDE4MiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgc2lzXzE4MCB9LApAQCAtODMsNyArODIsNyBAQAogCS5yZW1vdmUJCQk9IGF0YV9wY2lfcmVtb3ZlX29uZSwKIH07CiAKLXN0YXRpYyBTY3NpX0hvc3RfVGVtcGxhdGUgc2lzX3NodCA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIHNpc19zaHQgPSB7CiAJLm1vZHVsZQkJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCQk9IERSVl9OQU1FLAogCS5pb2N0bAkJCT0gYXRhX3Njc2lfaW9jdGwsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2F0YV9zdncuYyBiL2RyaXZlcnMvc2NzaS9zYXRhX3N2dy5jCmluZGV4IGRiNjE1ZmYuLjU3ZTVhOWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zYXRhX3N2dy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zYXRhX3N2dy5jCkBAIC00NSw3ICs0NSw2IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLSNpbmNsdWRlICJzY3NpLmgiCiAjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KICNpbmNsdWRlIDxsaW51eC9saWJhdGEuaD4KIApAQCAtMjg0LDcgKzI4Myw3IEBACiAjZW5kaWYgLyogQ09ORklHX1BQQ19PRiAqLwogCiAKLXN0YXRpYyBTY3NpX0hvc3RfVGVtcGxhdGUgazJfc2F0YV9zaHQgPSB7CitzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBrMl9zYXRhX3NodCA9IHsKIAkubW9kdWxlCQkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJCT0gRFJWX05BTUUsCiAJLmlvY3RsCQkJPSBhdGFfc2NzaV9pb2N0bCwKQEAgLTQ2Nyw3ICs0NjYsNyBAQAogICogMHgyNGEgaXMgZGV2aWNlIElEIGZvciBCQ001Nzg1IChha2EgSFQxMDAwKSBIVCBzb3V0aGJyaWRnZSBpbnRlZ3JhdGVkIFNBVEEKICAqIGNvbnRyb2xsZXIKICAqICovCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgazJfc2F0YV9wY2lfdGJsW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgazJfc2F0YV9wY2lfdGJsW10gPSB7CiAJeyAweDExNjYsIDB4MDI0MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgNCB9LAogCXsgMHgxMTY2LCAweDAyNDEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDQgfSwKIAl7IDB4MTE2NiwgMHgwMjQyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCA4IH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2F0YV9zeDQuYyBiL2RyaXZlcnMvc2NzaS9zYXRhX3N4NC5jCmluZGV4IGY4NTliYmQuLmI0YmJlNDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zYXRhX3N4NC5jCisrKyBiL2RyaXZlcnMvc2NzaS9zYXRhX3N4NC5jCkBAIC0zOSw4ICszOSw4IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLSNpbmNsdWRlICJzY3NpLmgiCiAjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpYmF0YS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgInNhdGFfcHJvbWlzZS5oIgpAQCAtMTc3LDcgKzE3Nyw3IEBACiBzdGF0aWMgaW50IHBkYzIwNjIxX3FjX2lzc3VlX3Byb3Qoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CiAKIAotc3RhdGljIFNjc2lfSG9zdF9UZW1wbGF0ZSBwZGNfc2F0YV9zaHQgPSB7CitzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBwZGNfc2F0YV9zaHQgPSB7CiAJLm1vZHVsZQkJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCQk9IERSVl9OQU1FLAogCS5pb2N0bAkJCT0gYXRhX3Njc2lfaW9jdGwsCkBAIC0yMjksNyArMjI5LDcgQEAKIAogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBkY19zYXRhX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwZGNfc2F0YV9wY2lfdGJsW10gPSB7CiAJeyBQQ0lfVkVORE9SX0lEX1BST01JU0UsIDB4NjYyMiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwKIAkgIGJvYXJkXzIwNjIxIH0sCiAJeyB9CS8qIHRlcm1pbmF0ZSBsaXN0ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2F0YV91bGkuYyBiL2RyaXZlcnMvc2NzaS9zYXRhX3VsaS5jCmluZGV4IGE1ZTI0NWMuLmIyNDIyYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zYXRhX3VsaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9zYXRhX3VsaS5jCkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLSNpbmNsdWRlICJzY3NpLmgiCiAjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KICNpbmNsdWRlIDxsaW51eC9saWJhdGEuaD4KIApAQCAtNTYsNyArNTUsNyBAQAogc3RhdGljIHUzMiB1bGlfc2NyX3JlYWQgKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGludCBzY19yZWcpOwogc3RhdGljIHZvaWQgdWxpX3Njcl93cml0ZSAoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgaW50IHNjX3JlZywgdTMyIHZhbCk7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCB1bGlfcGNpX3RibFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHVsaV9wY2lfdGJsW10gPSB7CiAJeyBQQ0lfVkVORE9SX0lEX0FMLCAweDUyODksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIHVsaV81Mjg5IH0sCiAJeyBQQ0lfVkVORE9SX0lEX0FMLCAweDUyODcsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIHVsaV81Mjg3IH0sCiAJeyBQQ0lfVkVORE9SX0lEX0FMLCAweDUyODEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIHVsaV81MjgxIH0sCkBAIC03MSw3ICs3MCw3IEBACiAJLnJlbW92ZQkJCT0gYXRhX3BjaV9yZW1vdmVfb25lLAogfTsKIAotc3RhdGljIFNjc2lfSG9zdF9UZW1wbGF0ZSB1bGlfc2h0ID0geworc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgdWxpX3NodCA9IHsKIAkubW9kdWxlCQkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJCT0gRFJWX05BTUUsCiAJLmlvY3RsCQkJPSBhdGFfc2NzaV9pb2N0bCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zYXRhX3ZpYS5jIGIvZHJpdmVycy9zY3NpL3NhdGFfdmlhLmMKaW5kZXggYjNlY2RiZS4uYzc2MjE1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NhdGFfdmlhLmMKKysrIGIvZHJpdmVycy9zY3NpL3NhdGFfdmlhLmMKQEAgLTQyLDcgKzQyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgInNjc2kuaCIKICNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpYmF0YS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpAQCAtNzYsNyArNzUsNyBAQAogc3RhdGljIHUzMiBzdmlhX3Njcl9yZWFkIChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBpbnQgc2NfcmVnKTsKIHN0YXRpYyB2b2lkIHN2aWFfc2NyX3dyaXRlIChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBpbnQgc2NfcmVnLCB1MzIgdmFsKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHN2aWFfcGNpX3RibFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHN2aWFfcGNpX3RibFtdID0gewogCXsgMHgxMTA2LCAweDMxNDksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIHZ0NjQyMCB9LAogCXsgMHgxMTA2LCAweDMyNDksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIHZ0NjQyMSB9LAogCkBAIC05MCw3ICs4OSw3IEBACiAJLnJlbW92ZQkJCT0gYXRhX3BjaV9yZW1vdmVfb25lLAogfTsKIAotc3RhdGljIFNjc2lfSG9zdF9UZW1wbGF0ZSBzdmlhX3NodCA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIHN2aWFfc2h0ID0gewogCS5tb2R1bGUJCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQkJPSBEUlZfTkFNRSwKIAkuaW9jdGwJCQk9IGF0YV9zY3NpX2lvY3RsLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NhdGFfdnNjLmMgYi9kcml2ZXJzL3Njc2kvc2F0YV92c2MuYwppbmRleCBiYjg0YmEwLi43N2E2ZTRiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NhdGFfdnNjLmMKKysrIGIvZHJpdmVycy9zY3NpL3NhdGFfdnNjLmMKQEAgLTQzLDcgKzQzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgInNjc2kuaCIKICNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpYmF0YS5oPgogCkBAIC0yMTksNyArMjE4LDcgQEAKIH0KIAogCi1zdGF0aWMgU2NzaV9Ib3N0X1RlbXBsYXRlIHZzY19zYXRhX3NodCA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIHZzY19zYXRhX3NodCA9IHsKIAkubW9kdWxlCQkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJCT0gRFJWX05BTUUsCiAJLmlvY3RsCQkJPSBhdGFfc2NzaV9pb2N0bCwKQEAgLTQwMSw3ICs0MDAsNyBAQAogICogMHg4MDg2LzB4MzIwMCBpcyB0aGUgSW50ZWwgMzEyNDQsIHdoaWNoIGlzIHN1cHBvc2VkIHRvIGJlIGlkZW50aWNhbAogICogY29tcGF0aWJpbGl0eSBpcyB1bnRlc3RlZCBhcyBvZiB5ZXQKICAqLwotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHZzY19zYXRhX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCB2c2Nfc2F0YV9wY2lfdGJsW10gPSB7CiAJeyAweDE3MjUsIDB4NzE3NCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMHgxMDYwMCwgMHhGRkZGRkYsIDAgfSwKIAl7IDB4ODA4NiwgMHgzMjAwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAweDEwNjAwLCAweEZGRkZGRiwgMCB9LAogCXsgfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfZGVidWcuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX2RlYnVnLmMKaW5kZXggYWFkZjA1MS4uM2RlZDlkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfZGVidWcuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9kZWJ1Zy5jCkBAIC00OCwxMCArNDgsNiBAQAogCiAjaW5jbHVkZSA8bGludXgvc3RhdC5oPgogCi0jaWZuZGVmIExJTlVYX1ZFUlNJT05fQ09ERQotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KLSNlbmRpZgotCiAjaW5jbHVkZSAic2NzaV9sb2dnaW5nLmgiCiAjaW5jbHVkZSAic2NzaV9kZWJ1Zy5oIgogCkBAIC0xODIsNyArMTc4LDcgQEAKIH07CiBzdGF0aWMgc3RydWN0IHNkZWJ1Z19xdWV1ZWRfY21kIHF1ZXVlZF9hcnJbU0NTSV9ERUJVR19DQU5RVUVVRV07CiAKLXN0YXRpYyBTY3NpX0hvc3RfVGVtcGxhdGUgc2RlYnVnX2RyaXZlcl90ZW1wbGF0ZSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIHNkZWJ1Z19kcml2ZXJfdGVtcGxhdGUgPSB7CiAJLnByb2NfaW5mbyA9CQlzY3NpX2RlYnVnX3Byb2NfaW5mbywKIAkubmFtZSA9CQkJIlNDU0kgREVCVUciLAogCS5pbmZvID0JCQlzY3NpX2RlYnVnX2luZm8sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9lcnJvci5jIGIvZHJpdmVycy9zY3NpL3Njc2lfZXJyb3IuYwppbmRleCAwYzViMDJkLi4xOGM1ZDI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9lcnJvci5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX2Vycm9yLmMKQEAgLTQxNyw0MyArNDE3LDE1IEBACiB9CiAKIC8qKgotICogc2NzaV9laF90aW1lc19vdXQgLSB0aW1lb3V0IGZ1bmN0aW9uIGZvciBlcnJvciBoYW5kbGluZy4KLSAqIEBzY21kOglDbWQgdGhhdCBpcyB0aW1pbmcgb3V0LgotICoKLSAqIE5vdGVzOgotICogICAgRHVyaW5nIGVycm9yIGhhbmRsaW5nLCB0aGUga2VybmVsIHRocmVhZCB3aWxsIGJlIHNsZWVwaW5nIHdhaXRpbmcKLSAqICAgIGZvciBzb21lIGFjdGlvbiB0byBjb21wbGV0ZSBvbiB0aGUgZGV2aWNlLiAgb3VyIG9ubHkgam9iIGlzIHRvCi0gKiAgICByZWNvcmQgdGhhdCBpdCB0aW1lZCBvdXQsIGFuZCB0byB3YWtlIHVwIHRoZSB0aHJlYWQuCi0gKiovCi1zdGF0aWMgdm9pZCBzY3NpX2VoX3RpbWVzX291dChzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kKQotewotCXNjbWQtPmVoX2VmbGFncyB8PSBTQ1NJX0VIX1JFQ19USU1FT1VUOwotCVNDU0lfTE9HX0VSUk9SX1JFQ09WRVJZKDMsIHByaW50aygiJXM6IHNjbWQ6JXBcbiIsIF9fRlVOQ1RJT05fXywKLQkJCQkJICBzY21kKSk7Ci0KLQl1cChzY21kLT5kZXZpY2UtPmhvc3QtPmVoX2FjdGlvbik7Ci19Ci0KLS8qKgogICogc2NzaV9laF9kb25lIC0gQ29tcGxldGlvbiBmdW5jdGlvbiBmb3IgZXJyb3IgaGFuZGxpbmcuCiAgKiBAc2NtZDoJQ21kIHRoYXQgaXMgZG9uZS4KICAqKi8KIHN0YXRpYyB2b2lkIHNjc2lfZWhfZG9uZShzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kKQogewotCS8qCi0JICogaWYgdGhlIHRpbWVvdXQgaGFuZGxlciBpcyBhbHJlYWR5IHJ1bm5pbmcsIHRoZW4ganVzdCBzZXQgdGhlCi0JICogZmxhZyB3aGljaCBzYXlzIHdlIGZpbmlzaGVkIGxhdGUsIGFuZCByZXR1cm4uICB3ZSBoYXZlIG5vCi0JICogd2F5IG9mIHN0b3BwaW5nIHRoZSB0aW1lb3V0IGhhbmRsZXIgZnJvbSBydW5uaW5nLCBzbyB3ZSBtdXN0Ci0JICogYWx3YXlzIGRlZmVyIHRvIGl0LgotCSAqLwotCWlmIChkZWxfdGltZXIoJnNjbWQtPmVoX3RpbWVvdXQpKSB7Ci0JCXNjbWQtPnJlcXVlc3QtPnJxX3N0YXR1cyA9IFJRX1NDU0lfRE9ORTsKLQotCQlTQ1NJX0xPR19FUlJPUl9SRUNPVkVSWSgzLCBwcmludGsoIiVzIHNjbWQ6ICVwIHJlc3VsdDogJXhcbiIsCi0JCQkJCSAgIF9fRlVOQ1RJT05fXywgc2NtZCwgc2NtZC0+cmVzdWx0KSk7Ci0KLQkJdXAoc2NtZC0+ZGV2aWNlLT5ob3N0LT5laF9hY3Rpb24pOwotCX0KKwlTQ1NJX0xPR19FUlJPUl9SRUNPVkVSWSgzLAorCQlwcmludGsoIiVzIHNjbWQ6ICVwIHJlc3VsdDogJXhcbiIsCisJCQlfX0ZVTkNUSU9OX18sIHNjbWQsIHNjbWQtPnJlc3VsdCkpOworCWNvbXBsZXRlKHNjbWQtPmRldmljZS0+aG9zdC0+ZWhfYWN0aW9uKTsKIH0KIAogLyoqCkBAIC00NjEsMTAgKzQzMyw2IEBACiAgKiBAc2NtZDoJU0NTSSBDbWQgdG8gc2VuZC4KICAqIEB0aW1lb3V0OglUaW1lb3V0IGZvciBjbWQuCiAgKgotICogTm90ZXM6Ci0gKiAgICBUaGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHN0cnVjdHVyZXMgaXMgcXVpdGUgYSBiaXQgZGlmZmVyZW50IGluCi0gKiAgICB0aGlzIGNhc2UsIGFuZCBmdXJ0aGVybW9yZSwgdGhlcmUgaXMgYSBkaWZmZXJlbnQgY29tcGxldGlvbiBoYW5kbGVyCi0gKiAgICB2cyBzY3NpX2Rpc3BhdGNoX2NtZC4KICAqIFJldHVybiB2YWx1ZToKICAqICAgIFNVQ0NFU1Mgb3IgRkFJTEVEIG9yIE5FRURTX1JFVFJZCiAgKiovCkBAIC00NzIsMjQgKzQ0MCwxNiBAQAogewogCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldiA9IHNjbWQtPmRldmljZTsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IHNkZXYtPmhvc3Q7Ci0JREVDTEFSRV9NVVRFWF9MT0NLRUQoc2VtKTsKKwlERUNMQVJFX0NPTVBMRVRJT04oZG9uZSk7CisJdW5zaWduZWQgbG9uZyB0aW1lbGVmdDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBydG4gPSBTVUNDRVNTOworCWludCBydG47CiAKLQkvKgotCSAqIHdlIHdpbGwgdXNlIGEgcXVldWVkIGNvbW1hbmQgaWYgcG9zc2libGUsIG90aGVyd2lzZSB3ZSB3aWxsCi0JICogZW11bGF0ZSB0aGUgcXVldWluZyBhbmQgY2FsbGluZyBvZiBjb21wbGV0aW9uIGZ1bmN0aW9uIG91cnNlbHZlcy4KLQkgKi8KIAlpZiAoc2Rldi0+c2NzaV9sZXZlbCA8PSBTQ1NJXzIpCiAJCXNjbWQtPmNtbmRbMV0gPSAoc2NtZC0+Y21uZFsxXSAmIDB4MWYpIHwKIAkJCShzZGV2LT5sdW4gPDwgNSAmIDB4ZTApOwogCi0Jc2NzaV9hZGRfdGltZXIoc2NtZCwgdGltZW91dCwgc2NzaV9laF90aW1lc19vdXQpOwotCi0JLyoKLQkgKiBzZXQgdXAgdGhlIHNlbWFwaG9yZSBzbyB3ZSB3YWl0IGZvciB0aGUgY29tbWFuZCB0byBjb21wbGV0ZS4KLQkgKi8KLQlzaG9zdC0+ZWhfYWN0aW9uID0gJnNlbTsKKwlzaG9zdC0+ZWhfYWN0aW9uID0gJmRvbmU7CiAJc2NtZC0+cmVxdWVzdC0+cnFfc3RhdHVzID0gUlFfU0NTSV9CVVNZOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwpAQCAtNDk3LDQ3ICs0NTcsMjkgQEAKIAlzaG9zdC0+aG9zdHQtPnF1ZXVlY29tbWFuZChzY21kLCBzY3NpX2VoX2RvbmUpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCi0JZG93bigmc2VtKTsKLQlzY3NpX2xvZ19jb21wbGV0aW9uKHNjbWQsIFNVQ0NFU1MpOworCXRpbWVsZWZ0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZkb25lLCB0aW1lb3V0KTsKIAorCXNjbWQtPnJlcXVlc3QtPnJxX3N0YXR1cyA9IFJRX1NDU0lfRE9ORTsKIAlzaG9zdC0+ZWhfYWN0aW9uID0gTlVMTDsKIAotCS8qCi0JICogc2VlIGlmIHRpbWVvdXQuICBpZiBzbywgdGVsbCB0aGUgaG9zdCB0byBmb3JnZXQgYWJvdXQgaXQuCi0JICogaW4gb3RoZXIgd29yZHMsIHdlIGRvbid0IHdhbnQgYSBjYWxsYmFjayBhbnkgbW9yZS4KLQkgKi8KLQlpZiAoc2NtZC0+ZWhfZWZsYWdzICYgU0NTSV9FSF9SRUNfVElNRU9VVCkgewotCQlzY21kLT5laF9lZmxhZ3MgJj0gflNDU0lfRUhfUkVDX1RJTUVPVVQ7CisJc2NzaV9sb2dfY29tcGxldGlvbihzY21kLCBTVUNDRVNTKTsKIAotCQkvKgotCQkgKiBhcyBmYXIgYXMgdGhlIGxvdyBsZXZlbCBkcml2ZXIgaXMKLQkJICogY29uY2VybmVkLCB0aGlzIGNvbW1hbmQgaXMgc3RpbGwgYWN0aXZlLCBzbwotCQkgKiB3ZSBtdXN0IGdpdmUgdGhlIGxvdyBsZXZlbCBkcml2ZXIgYSBjaGFuY2UKLQkJICogdG8gYWJvcnQgaXQuIChkYikgCi0JCSAqCi0JCSAqIEZJWE1FKGVyaWMpIC0gd2UgYXJlIG5vdCB0cmFja2luZyB3aGV0aGVyIHdlIGNvdWxkCi0JCSAqIGFib3J0IGEgdGltZWQgb3V0IGNvbW1hbmQgb3Igbm90LiAgbm90IHN1cmUgaG93Ci0JCSAqIHdlIHNob3VsZCB0cmVhdCB0aGVtIGRpZmZlcmVudGx5IGFueXdheXMuCi0JCSAqLwotCQlpZiAoc2hvc3QtPmhvc3R0LT5laF9hYm9ydF9oYW5kbGVyKQotCQkJc2hvc3QtPmhvc3R0LT5laF9hYm9ydF9oYW5kbGVyKHNjbWQpOwotCQkJCi0JCXNjbWQtPnJlcXVlc3QtPnJxX3N0YXR1cyA9IFJRX1NDU0lfRE9ORTsKLQkJcnRuID0gRkFJTEVEOwotCX0KLQotCVNDU0lfTE9HX0VSUk9SX1JFQ09WRVJZKDMsIHByaW50aygiJXM6IHNjbWQ6ICVwLCBydG46JXhcbiIsCi0JCQkJCSAgX19GVU5DVElPTl9fLCBzY21kLCBydG4pKTsKKwlTQ1NJX0xPR19FUlJPUl9SRUNPVkVSWSgzLAorCQlwcmludGsoIiVzOiBzY21kOiAlcCwgdGltZWxlZnQ6ICVsZFxuIiwKKwkJCV9fRlVOQ1RJT05fXywgc2NtZCwgdGltZWxlZnQpKTsKIAogCS8qCi0JICogbm93IGV4YW1pbmUgdGhlIGFjdHVhbCBzdGF0dXMgY29kZXMgdG8gc2VlIHdoZXRoZXIgdGhlIGNvbW1hbmQKLQkgKiBhY3R1YWxseSBkaWQgY29tcGxldGUgbm9ybWFsbHkuCisJICogSWYgdGhlcmUgaXMgdGltZSBsZWZ0IHNjc2lfZWhfZG9uZSBnb3QgY2FsbGVkLCBhbmQgd2Ugd2lsbAorCSAqIGV4YW1pbmUgdGhlIGFjdHVhbCBzdGF0dXMgY29kZXMgdG8gc2VlIHdoZXRoZXIgdGhlIGNvbW1hbmQKKwkgKiBhY3R1YWxseSBkaWQgY29tcGxldGUgbm9ybWFsbHksIGVsc2UgdGVsbCB0aGUgaG9zdCB0byBmb3JnZXQKKwkgKiBhYm91dCB0aGlzIGNvbW1hbmQuCiAJICovCi0JaWYgKHJ0biA9PSBTVUNDRVNTKSB7CisJaWYgKHRpbWVsZWZ0KSB7CiAJCXJ0biA9IHNjc2lfZWhfY29tcGxldGVkX25vcm1hbGx5KHNjbWQpOwogCQlTQ1NJX0xPR19FUlJPUl9SRUNPVkVSWSgzLAogCQkJcHJpbnRrKCIlczogc2NzaV9laF9jb21wbGV0ZWRfbm9ybWFsbHkgJXhcbiIsCiAJCQkgICAgICAgX19GVU5DVElPTl9fLCBydG4pKTsKKwogCQlzd2l0Y2ggKHJ0bikgewogCQljYXNlIFNVQ0NFU1M6CiAJCWNhc2UgTkVFRFNfUkVUUlk6CkBAIC01NDcsNiArNDg5LDE1IEBACiAJCQlydG4gPSBGQUlMRUQ7CiAJCQlicmVhazsKIAkJfQorCX0gZWxzZSB7CisJCS8qCisJCSAqIEZJWE1FKGVyaWMpIC0gd2UgYXJlIG5vdCB0cmFja2luZyB3aGV0aGVyIHdlIGNvdWxkCisJCSAqIGFib3J0IGEgdGltZWQgb3V0IGNvbW1hbmQgb3Igbm90LiAgbm90IHN1cmUgaG93CisJCSAqIHdlIHNob3VsZCB0cmVhdCB0aGVtIGRpZmZlcmVudGx5IGFueXdheXMuCisJCSAqLworCQlpZiAoc2hvc3QtPmhvc3R0LT5laF9hYm9ydF9oYW5kbGVyKQorCQkJc2hvc3QtPmhvc3R0LT5laF9hYm9ydF9oYW5kbGVyKHNjbWQpOworCQlydG4gPSBGQUlMRUQ7CiAJfQogCiAJcmV0dXJuIHJ0bjsKQEAgLTE1NzEsNTAgKzE1MjIsNDEgQEAKIH0KIAogLyoqCi0gKiBzY3NpX2Vycm9yX2hhbmRsZXIgLSBIYW5kbGUgZXJyb3JzL3RpbWVvdXRzIG9mIFNDU0kgY21kcy4KKyAqIHNjc2lfZXJyb3JfaGFuZGxlciAtIFNDU0kgZXJyb3IgaGFuZGxlciB0aHJlYWQKICAqIEBkYXRhOglIb3N0IGZvciB3aGljaCB3ZSBhcmUgcnVubmluZy4KICAqCiAgKiBOb3RlczoKLSAqICAgIFRoaXMgaXMgYWx3YXlzIHJ1biBpbiB0aGUgY29udGV4dCBvZiBhIGtlcm5lbCB0aHJlYWQuICBUaGUgaWRlYSBpcwotICogICAgdGhhdCB3ZSBzdGFydCB0aGlzIHRoaW5nIHVwIHdoZW4gdGhlIGtlcm5lbCBzdGFydHMgdXAgKG9uZSBwZXIgaG9zdAotICogICAgdGhhdCB3ZSBkZXRlY3QpLCBhbmQgaXQgaW1tZWRpYXRlbHkgZ29lcyB0byBzbGVlcCBhbmQgd2FpdHMgZm9yIHNvbWUKLSAqICAgIGV2ZW50IChpLmUuIGZhaWx1cmUpLiAgV2hlbiB0aGlzIHRha2VzIHBsYWNlLCB3ZSBoYXZlIHRoZSBqb2Igb2YKLSAqICAgIHRyeWluZyB0byB1bmphbSB0aGUgYnVzIGFuZCByZXN0YXJ0aW5nIHRoaW5ncy4KKyAqICAgIFRoaXMgaXMgdGhlIG1haW4gZXJyb3IgaGFuZGxpbmcgbG9vcC4gIFRoaXMgaXMgcnVuIGFzIGEga2VybmVsIHRocmVhZAorICogICAgZm9yIGV2ZXJ5IFNDU0kgaG9zdCBhbmQgaGFuZGxlcyBhbGwgZXJyb3IgaGFuZGxpbmcgYWN0aXZpdHkuCiAgKiovCiBpbnQgc2NzaV9lcnJvcl9oYW5kbGVyKHZvaWQgKmRhdGEpCiB7Ci0Jc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSAoc3RydWN0IFNjc2lfSG9zdCAqKSBkYXRhOwotCWludCBydG47CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBkYXRhOwogCiAJY3VycmVudC0+ZmxhZ3MgfD0gUEZfTk9GUkVFWkU7CiAKLQkKIAkvKgotCSAqIE5vdGUgLSB3ZSBhbHdheXMgdXNlIFRBU0tfSU5URVJSVVBUSUJMRSBldmVuIGlmIHRoZSBtb2R1bGUKLQkgKiB3YXMgbG9hZGVkIGFzIHBhcnQgb2YgdGhlIGtlcm5lbC4gIFRoZSByZWFzb24gaXMgdGhhdAotCSAqIFVOSU5URVJSVVBUSUJMRSB3b3VsZCBjYXVzZSB0aGlzIHRocmVhZCB0byBiZSBjb3VudGVkIGluCi0JICogdGhlIGxvYWQgYXZlcmFnZSBhcyBhIHJ1bm5pbmcgcHJvY2VzcywgYW5kIGFuIGludGVycnVwdGlibGUKLQkgKiB3YWl0IGRvZXNuJ3QuCisJICogV2UgdXNlIFRBU0tfSU5URVJSVVBUSUJMRSBzbyB0aGF0IHRoZSB0aHJlYWQgaXMgbm90CisJICogY291bnRlZCBhZ2FpbnN0IHRoZSBsb2FkIGF2ZXJhZ2UgYXMgYSBydW5uaW5nIHByb2Nlc3MuCisJICogV2UgbmV2ZXIgYWN0dWFsbHkgZ2V0IGludGVycnVwdGVkIGJlY2F1c2Uga3RocmVhZF9ydW4KKwkgKiBkaXNhYmxlcyBzaW5nYWwgZGVsaXZlcnkgZm9yIHRoZSBjcmVhdGVkIHRocmVhZC4KIAkgKi8KIAlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwogCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7CiAJCWlmIChzaG9zdC0+aG9zdF9mYWlsZWQgPT0gMCB8fAogCQkgICAgc2hvc3QtPmhvc3RfZmFpbGVkICE9IHNob3N0LT5ob3N0X2J1c3kpIHsKLQkJCVNDU0lfTE9HX0VSUk9SX1JFQ09WRVJZKDEsIHByaW50aygiRXJyb3IgaGFuZGxlciIKLQkJCQkJCQkgICIgc2NzaV9laF8lZCIKLQkJCQkJCQkgICIgc2xlZXBpbmdcbiIsCi0JCQkJCQkJICBzaG9zdC0+aG9zdF9ubykpOworCQkJU0NTSV9MT0dfRVJST1JfUkVDT1ZFUlkoMSwKKwkJCQlwcmludGsoIkVycm9yIGhhbmRsZXIgc2NzaV9laF8lZCBzbGVlcGluZ1xuIiwKKwkJCQkJc2hvc3QtPmhvc3Rfbm8pKTsKIAkJCXNjaGVkdWxlKCk7CiAJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwogCQkJY29udGludWU7CiAJCX0KIAogCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7Ci0JCVNDU0lfTE9HX0VSUk9SX1JFQ09WRVJZKDEsIHByaW50aygiRXJyb3IgaGFuZGxlciIKLQkJCQkJCSAgIiBzY3NpX2VoXyVkIHdha2luZyIKLQkJCQkJCSAgIiB1cFxuIixzaG9zdC0+aG9zdF9ubykpOwotCi0JCXNob3N0LT5laF9hY3RpdmUgPSAxOworCQlTQ1NJX0xPR19FUlJPUl9SRUNPVkVSWSgxLAorCQkJcHJpbnRrKCJFcnJvciBoYW5kbGVyIHNjc2lfZWhfJWQgd2FraW5nIHVwXG4iLAorCQkJCXNob3N0LT5ob3N0X25vKSk7CiAKIAkJLyoKIAkJICogV2UgaGF2ZSBhIGhvc3QgdGhhdCBpcyBmYWlsaW5nIGZvciBzb21lIHJlYXNvbi4gIEZpZ3VyZSBvdXQKQEAgLTE2MjIsMTIgKzE1NjQsMTAgQEAKIAkJICogSWYgd2UgZmFpbCwgd2UgZW5kIHVwIHRha2luZyB0aGUgdGhpbmcgb2ZmbGluZS4KIAkJICovCiAJCWlmIChzaG9zdC0+aG9zdHQtPmVoX3N0cmF0ZWd5X2hhbmRsZXIpIAotCQkJcnRuID0gc2hvc3QtPmhvc3R0LT5laF9zdHJhdGVneV9oYW5kbGVyKHNob3N0KTsKKwkJCXNob3N0LT5ob3N0dC0+ZWhfc3RyYXRlZ3lfaGFuZGxlcihzaG9zdCk7CiAJCWVsc2UKIAkJCXNjc2lfdW5qYW1faG9zdChzaG9zdCk7CiAKLQkJc2hvc3QtPmVoX2FjdGl2ZSA9IDA7Ci0KIAkJLyoKIAkJICogTm90ZSAtIGlmIHRoZSBhYm92ZSBmYWlscyBjb21wbGV0ZWx5LCB0aGUgYWN0aW9uIGlzIHRvIHRha2UKIAkJICogaW5kaXZpZHVhbCBkZXZpY2VzIG9mZmxpbmUgYW5kIGZsdXNoIHRoZSBxdWV1ZSBvZiBhbnkKQEAgLTE2MzgsMTUgKzE1NzgsMTAgQEAKIAkJc2NzaV9yZXN0YXJ0X29wZXJhdGlvbnMoc2hvc3QpOwogCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwogCX0KLQogCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKIAotCVNDU0lfTE9HX0VSUk9SX1JFQ09WRVJZKDEsIHByaW50aygiRXJyb3IgaGFuZGxlciBzY3NpX2VoXyVkIgotCQkJCQkgICIgZXhpdGluZ1xuIixzaG9zdC0+aG9zdF9ubykpOwotCi0JLyoKLQkgKiBNYWtlIHN1cmUgdGhhdCBub2JvZHkgdHJpZXMgdG8gd2FrZSB1cyB1cCBhZ2Fpbi4KLQkgKi8KKwlTQ1NJX0xPR19FUlJPUl9SRUNPVkVSWSgxLAorCQlwcmludGsoIkVycm9yIGhhbmRsZXIgc2NzaV9laF8lZCBleGl0aW5nXG4iLCBzaG9zdC0+aG9zdF9ubykpOwogCXNob3N0LT5laGFuZGxlciA9IE5VTEw7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jCmluZGV4IGU0MGM4YjYuLmNlOWQ3M2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jCkBAIC0yNTQsNTUgKzI1NCw2IEBACiB9CiBFWFBPUlRfU1lNQk9MKHNjc2lfZG9fcmVxKTsKIAotLyogVGhpcyBpcyB0aGUgZW5kIHJvdXRpbmUgd2UgZ2V0IHRvIGlmIGEgY29tbWFuZCB3YXMgbmV2ZXIgYXR0YWNoZWQKLSAqIHRvIHRoZSByZXF1ZXN0LiAgU2ltcGx5IGNvbXBsZXRlIHRoZSByZXF1ZXN0IHdpdGhvdXQgY2hhbmdpbmcKLSAqIHJxX3N0YXR1czsgdGhpcyB3aWxsIGNhdXNlIGEgRFJJVkVSX0VSUk9SLiAqLwotc3RhdGljIHZvaWQgc2NzaV93YWl0X3JlcV9lbmRfaW8oc3RydWN0IHJlcXVlc3QgKnJlcSkKLXsKLQlCVUdfT04oIXJlcS0+d2FpdGluZyk7Ci0KLQljb21wbGV0ZShyZXEtPndhaXRpbmcpOwotfQotCi12b2lkIHNjc2lfd2FpdF9yZXEoc3RydWN0IHNjc2lfcmVxdWVzdCAqc3JlcSwgY29uc3Qgdm9pZCAqY21uZCwgdm9pZCAqYnVmZmVyLAotCQkgICB1bnNpZ25lZCBidWZmbGVuLCBpbnQgdGltZW91dCwgaW50IHJldHJpZXMpCi17Ci0JREVDTEFSRV9DT01QTEVUSU9OKHdhaXQpOwotCWludCB3cml0ZSA9IChzcmVxLT5zcl9kYXRhX2RpcmVjdGlvbiA9PSBETUFfVE9fREVWSUNFKTsKLQlzdHJ1Y3QgcmVxdWVzdCAqcmVxOwotCi0JcmVxID0gYmxrX2dldF9yZXF1ZXN0KHNyZXEtPnNyX2RldmljZS0+cmVxdWVzdF9xdWV1ZSwgd3JpdGUsCi0JCQkgICAgICBfX0dGUF9XQUlUKTsKLQlpZiAoYnVmZmxlbiAmJiBibGtfcnFfbWFwX2tlcm4oc3JlcS0+c3JfZGV2aWNlLT5yZXF1ZXN0X3F1ZXVlLCByZXEsCi0JCQkJICAgICAgIGJ1ZmZlciwgYnVmZmxlbiwgX19HRlBfV0FJVCkpIHsKLQkJc3JlcS0+c3JfcmVzdWx0ID0gRFJJVkVSX0VSUk9SIDw8IDI0OwotCQlibGtfcHV0X3JlcXVlc3QocmVxKTsKLQkJcmV0dXJuOwotCX0KLQotCXJlcS0+ZmxhZ3MgfD0gUkVRX05PTUVSR0U7Ci0JcmVxLT53YWl0aW5nID0gJndhaXQ7Ci0JcmVxLT5lbmRfaW8gPSBzY3NpX3dhaXRfcmVxX2VuZF9pbzsKLQlyZXEtPmNtZF9sZW4gPSBDT01NQU5EX1NJWkUoKCh1OCAqKWNtbmQpWzBdKTsKLQlyZXEtPnNlbnNlID0gc3JlcS0+c3Jfc2Vuc2VfYnVmZmVyOwotCXJlcS0+c2Vuc2VfbGVuID0gMDsKLQltZW1jcHkocmVxLT5jbWQsIGNtbmQsIHJlcS0+Y21kX2xlbik7Ci0JcmVxLT50aW1lb3V0ID0gdGltZW91dDsKLQlyZXEtPmZsYWdzIHw9IFJFUV9CTE9DS19QQzsKLQlyZXEtPnJxX2Rpc2sgPSBOVUxMOwotCWJsa19pbnNlcnRfcmVxdWVzdChzcmVxLT5zcl9kZXZpY2UtPnJlcXVlc3RfcXVldWUsIHJlcSwKLQkJCSAgIHNyZXEtPnNyX2RhdGFfZGlyZWN0aW9uID09IERNQV9UT19ERVZJQ0UsIE5VTEwpOwotCXdhaXRfZm9yX2NvbXBsZXRpb24oJndhaXQpOwotCXNyZXEtPnNyX3JlcXVlc3QtPndhaXRpbmcgPSBOVUxMOwotCXNyZXEtPnNyX3Jlc3VsdCA9IHJlcS0+ZXJyb3JzOwotCWlmIChyZXEtPmVycm9ycykKLQkJc3JlcS0+c3JfcmVzdWx0IHw9IChEUklWRVJfRVJST1IgPDwgMjQpOwotCi0JYmxrX3B1dF9yZXF1ZXN0KHJlcSk7Ci19Ci0KLUVYUE9SVF9TWU1CT0woc2NzaV93YWl0X3JlcSk7Ci0KIC8qKgogICogc2NzaV9leGVjdXRlIC0gaW5zZXJ0IHJlcXVlc3QgYW5kIHdhaXQgZm9yIHRoZSByZXN1bHQKICAqIEBzZGV2OglzY3NpIGRldmljZQpAQCAtNTkxLDEwICs1NDIsMTcgQEAKIAogdm9pZCBzY3NpX25leHRfY29tbWFuZChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCiB7Ci0Jc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBjbWQtPmRldmljZS0+cmVxdWVzdF9xdWV1ZTsKKwlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYgPSBjbWQtPmRldmljZTsKKwlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IHNkZXYtPnJlcXVlc3RfcXVldWU7CisKKwkvKiBuZWVkIHRvIGhvbGQgYSByZWZlcmVuY2Ugb24gdGhlIGRldmljZSBiZWZvcmUgd2UgbGV0IGdvIG9mIHRoZSBjbWQgKi8KKwlnZXRfZGV2aWNlKCZzZGV2LT5zZGV2X2dlbmRldik7CiAKIAlzY3NpX3B1dF9jb21tYW5kKGNtZCk7CiAJc2NzaV9ydW5fcXVldWUocSk7CisKKwkvKiBvayB0byByZW1vdmUgZGV2aWNlIG5vdyAqLworCXB1dF9kZXZpY2UoJnNkZXYtPnNkZXZfZ2VuZGV2KTsKIH0KIAogdm9pZCBzY3NpX3J1bl9ob3N0X3F1ZXVlcyhzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3ByaXYuaCBiL2RyaXZlcnMvc2NzaS9zY3NpX3ByaXYuaAppbmRleCBkMDVmNzc4Li5kNjMyZDllIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9wcml2LmgKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfcHJpdi5oCkBAIC0yMiw3ICsyMiw2IEBACiAgKiBTY3NpIEVycm9yIEhhbmRsZXIgRmxhZ3MKICAqLwogI2RlZmluZSBTQ1NJX0VIX0NBTkNFTF9DTUQJMHgwMDAxCS8qIENhbmNlbCB0aGlzIGNtZCAqLwotI2RlZmluZSBTQ1NJX0VIX1JFQ19USU1FT1VUCTB4MDAwMgkvKiBFSCByZXRyeSB0aW1lZCBvdXQgKi8KIAogI2RlZmluZSBTQ1NJX1NFTlNFX1ZBTElEKHNjbWQpIFwKIAkoKChzY21kKS0+c2Vuc2VfYnVmZmVyWzBdICYgMHg3MCkgPT0gMHg3MCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYwppbmRleCA3ZWIzYTJkLi4zNzQ4NTNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jCkBAIC05LDcgKzksNyBAQAogICogZ2xvYmFsIHZhcmlhYmxlIChib290IG9yIG1vZHVsZSBsb2FkIHRpbWUpIHNldHRpbmdzLgogICoKICAqIEEgc3BlY2lmaWMgTFVOIGlzIHNjYW5uZWQgdmlhIGFuIElOUVVJUlkgY29tbWFuZDsgaWYgdGhlIExVTiBoYXMgYQotICogZGV2aWNlIGF0dGFjaGVkLCBhIFNjc2lfRGV2aWNlIGlzIGFsbG9jYXRlZCBhbmQgc2V0dXAgZm9yIGl0LgorICogZGV2aWNlIGF0dGFjaGVkLCBhIHNjc2lfZGV2aWNlIGlzIGFsbG9jYXRlZCBhbmQgc2V0dXAgZm9yIGl0LgogICoKICAqIEZvciBldmVyeSBpZCBvZiBldmVyeSBjaGFubmVsIG9uIHRoZSBnaXZlbiBob3N0OgogICoKQEAgLTE3LDcgKzE3LDcgQEAKICAqIAlkZXZpY2Ugb3Igc3RvcmFnZSBhdHRhY2hlZCB0byBMVU4gMCk6CiAgKgogICogCQlJZiBMVU4gMCBoYXMgYSBkZXZpY2UgYXR0YWNoZWQsIGFsbG9jYXRlIGFuZCBzZXR1cCBhCi0gKiAJCVNjc2lfRGV2aWNlIGZvciBpdC4KKyAqIAkJc2NzaV9kZXZpY2UgZm9yIGl0LgogICoKICAqIAkJSWYgdGFyZ2V0IGlzIFNDU0ktMyBvciB1cCwgaXNzdWUgYSBSRVBPUlQgTFVOLCBhbmQgc2NhbgogICogCQlhbGwgb2YgdGhlIExVTnMgcmV0dXJuZWQgYnkgdGhlIFJFUE9SVCBMVU47IGVsc2UsCkBAIC00NDEsNyArNDQxLDcgQEAKICAqCiAgKiAgICAgSWYgdGhlIElOUVVJUlkgaXMgc3VjY2Vzc2Z1bCwgemVybyBpcyByZXR1cm5lZCBhbmQgdGhlCiAgKiAgICAgSU5RVUlSWSBkYXRhIGlzIGluIEBpbnFfcmVzdWx0OyB0aGUgc2NzaV9sZXZlbCBhbmQgSU5RVUlSWSBsZW5ndGgKLSAqICAgICBhcmUgY29waWVkIHRvIHRoZSBTY3NpX0RldmljZSBhbnkgZmxhZ3MgdmFsdWUgaXMgc3RvcmVkIGluICpAYmZsYWdzLgorICogICAgIGFyZSBjb3BpZWQgdG8gdGhlIHNjc2lfZGV2aWNlIGFueSBmbGFncyB2YWx1ZSBpcyBzdG9yZWQgaW4gKkBiZmxhZ3MuCiAgKiovCiBzdGF0aWMgaW50IHNjc2lfcHJvYmVfbHVuKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgY2hhciAqaW5xX3Jlc3VsdCwKIAkJCSAgaW50IHJlc3VsdF9sZW4sIGludCAqYmZsYWdzKQpAQCAtNTA5LDggKzUwOSw4IEBACiAJCS8qCiAJCSAqIEdldCBhbnkgZmxhZ3MgZm9yIHRoaXMgZGV2aWNlLgogCQkgKgotCQkgKiBYWFggYWRkIGEgYmZsYWdzIHRvIFNjc2lfRGV2aWNlLCBhbmQgcmVwbGFjZSB0aGUKLQkJICogY29ycmVzcG9uZGluZyBiaXQgZmllbGRzIGluIFNjc2lfRGV2aWNlLCBzbyBiZmxhZ3MKKwkJICogWFhYIGFkZCBhIGJmbGFncyB0byBzY3NpX2RldmljZSwgYW5kIHJlcGxhY2UgdGhlCisJCSAqIGNvcnJlc3BvbmRpbmcgYml0IGZpZWxkcyBpbiBzY3NpX2RldmljZSwgc28gYmZsYWdzCiAJCSAqIG5lZWQgbm90IGJlIHBhc3NlZCBhcyBhbiBhcmd1bWVudC4KIAkJICovCiAJCSpiZmxhZ3MgPSBzY3NpX2dldF9kZXZpY2VfZmxhZ3Moc2RldiwgJmlucV9yZXN1bHRbOF0sCkBAIC01OTIsMjEgKzU5MiwyMSBAQAogfQogCiAvKioKLSAqIHNjc2lfYWRkX2x1biAtIGFsbG9jYXRlIGFuZCBmdWxseSBpbml0aWFsemUgYSBTY3NpX0RldmljZQotICogQHNkZXZzY2FuOglob2xkcyBpbmZvcm1hdGlvbiB0byBiZSBzdG9yZWQgaW4gdGhlIG5ldyBTY3NpX0RldmljZQotICogQHNkZXZuZXc6CXN0b3JlIHRoZSBhZGRyZXNzIG9mIHRoZSBuZXdseSBhbGxvY2F0ZWQgU2NzaV9EZXZpY2UKKyAqIHNjc2lfYWRkX2x1biAtIGFsbG9jYXRlIGFuZCBmdWxseSBpbml0aWFsemUgYSBzY3NpX2RldmljZQorICogQHNkZXZzY2FuOglob2xkcyBpbmZvcm1hdGlvbiB0byBiZSBzdG9yZWQgaW4gdGhlIG5ldyBzY3NpX2RldmljZQorICogQHNkZXZuZXc6CXN0b3JlIHRoZSBhZGRyZXNzIG9mIHRoZSBuZXdseSBhbGxvY2F0ZWQgc2NzaV9kZXZpY2UKICAqIEBpbnFfcmVzdWx0Oglob2xkcyB0aGUgcmVzdWx0IG9mIGEgcHJldmlvdXMgSU5RVUlSWSB0byB0aGUgTFVOCiAgKiBAYmZsYWdzOglibGFjay93aGl0ZSBsaXN0IGZsYWcKICAqCiAgKiBEZXNjcmlwdGlvbjoKLSAqICAgICBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhIFNjc2lfRGV2aWNlIG1hdGNoaW5nIHNkZXZzY2FuLiBPcHRpb25hbGx5CisgKiAgICAgQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYSBzY3NpX2RldmljZSBtYXRjaGluZyBzZGV2c2Nhbi4gT3B0aW9uYWxseQogICogICAgIHNldCBmaWVsZHMgYmFzZWQgb24gdmFsdWVzIGluICpAYmZsYWdzLiBJZiBAc2Rldm5ldyBpcyBub3QKLSAqICAgICBOVUxMLCBzdG9yZSB0aGUgYWRkcmVzcyBvZiB0aGUgbmV3IFNjc2lfRGV2aWNlIGluICpAc2Rldm5ldyAobmVlZGVkCisgKiAgICAgTlVMTCwgc3RvcmUgdGhlIGFkZHJlc3Mgb2YgdGhlIG5ldyBzY3NpX2RldmljZSBpbiAqQHNkZXZuZXcgKG5lZWRlZAogICogICAgIHdoZW4gc2Nhbm5pbmcgYSBwYXJ0aWN1bGFyIExVTikuCiAgKgogICogUmV0dXJuOgotICogICAgIFNDU0lfU0NBTl9OT19SRVNQT05TRTogY291bGQgbm90IGFsbG9jYXRlIG9yIHNldHVwIGEgU2NzaV9EZXZpY2UKLSAqICAgICBTQ1NJX1NDQU5fTFVOX1BSRVNFTlQ6IGEgbmV3IFNjc2lfRGV2aWNlIHdhcyBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkCisgKiAgICAgU0NTSV9TQ0FOX05PX1JFU1BPTlNFOiBjb3VsZCBub3QgYWxsb2NhdGUgb3Igc2V0dXAgYSBzY3NpX2RldmljZQorICogICAgIFNDU0lfU0NBTl9MVU5fUFJFU0VOVDogYSBuZXcgc2NzaV9kZXZpY2Ugd2FzIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQKICAqKi8KIHN0YXRpYyBpbnQgc2NzaV9hZGRfbHVuKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgY2hhciAqaW5xX3Jlc3VsdCwgaW50ICpiZmxhZ3MpCiB7CkBAIC02NzQsNyArNjc0LDcgQEAKIAkgKgogCSAqIFRoZSBhYm92ZSBpcyB2YWd1ZSwgYXMgaXQgaW1wbGllcyB0aGF0IHdlIGNvdWxkIHRyZWF0IDAwMSBhbmQKIAkgKiAwMTEgdGhlIHNhbWUuIFN0YXkgY29tcGF0aWJsZSB3aXRoIHByZXZpb3VzIGNvZGUsIGFuZCBjcmVhdGUgYQotCSAqIFNjc2lfRGV2aWNlIGZvciBhIFBRIG9mIDEKKwkgKiBzY3NpX2RldmljZSBmb3IgYSBQUSBvZiAxCiAJICoKIAkgKiBEb24ndCBzZXQgdGhlIGRldmljZSBvZmZsaW5lIGhlcmU7IHJhdGhlciBsZXQgdGhlIHVwcGVyCiAJICogbGV2ZWwgZHJpdmVycyBldmFsIHRoZSBQUSB0byBkZWNpZGUgd2hldGhlciB0aGV5IHNob3VsZApAQCAtNzg0LDggKzc4NCw4IEBACiAgKiBzY3NpX3Byb2JlX2FuZF9hZGRfbHVuIC0gcHJvYmUgYSBMVU4sIGlmIGEgTFVOIGlzIGZvdW5kIGFkZCBpdAogICogQHN0YXJnZXQ6CXBvaW50ZXIgdG8gdGFyZ2V0IGRldmljZSBzdHJ1Y3R1cmUKICAqIEBsdW46CUxVTiBvZiB0YXJnZXQgZGV2aWNlCi0gKiBAc2RldnNjYW46CXByb2JlIHRoZSBMVU4gY29ycmVzcG9uZGluZyB0byB0aGlzIFNjc2lfRGV2aWNlCi0gKiBAc2Rldm5ldzoJc3RvcmUgdGhlIHZhbHVlIG9mIGFueSBuZXcgU2NzaV9EZXZpY2UgYWxsb2NhdGVkCisgKiBAc2RldnNjYW46CXByb2JlIHRoZSBMVU4gY29ycmVzcG9uZGluZyB0byB0aGlzIHNjc2lfZGV2aWNlCisgKiBAc2Rldm5ldzoJc3RvcmUgdGhlIHZhbHVlIG9mIGFueSBuZXcgc2NzaV9kZXZpY2UgYWxsb2NhdGVkCiAgKiBAYmZsYWdzcDoJc3RvcmUgYmZsYWdzIGhlcmUgaWYgbm90IE5VTEwKICAqCiAgKiBEZXNjcmlwdGlvbjoKQEAgLTc5MywxMCArNzkzLDEwIEBACiAgKiAgICAgYWxsb2NhdGUgYW5kIHNldCBpdCB1cCBieSBjYWxsaW5nIHNjc2lfYWRkX2x1bi4KICAqCiAgKiBSZXR1cm46Ci0gKiAgICAgU0NTSV9TQ0FOX05PX1JFU1BPTlNFOiBjb3VsZCBub3QgYWxsb2NhdGUgb3Igc2V0dXAgYSBTY3NpX0RldmljZQorICogICAgIFNDU0lfU0NBTl9OT19SRVNQT05TRTogY291bGQgbm90IGFsbG9jYXRlIG9yIHNldHVwIGEgc2NzaV9kZXZpY2UKICAqICAgICBTQ1NJX1NDQU5fVEFSR0VUX1BSRVNFTlQ6IHRhcmdldCByZXNwb25kZWQsIGJ1dCBubyBkZXZpY2UgaXMKICAqICAgICAgICAgYXR0YWNoZWQgYXQgdGhlIExVTgotICogICAgIFNDU0lfU0NBTl9MVU5fUFJFU0VOVDogYSBuZXcgU2NzaV9EZXZpY2Ugd2FzIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQKKyAqICAgICBTQ1NJX1NDQU5fTFVOX1BSRVNFTlQ6IGEgbmV3IHNjc2lfZGV2aWNlIHdhcyBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkCiAgKiovCiBzdGF0aWMgaW50IHNjc2lfcHJvYmVfYW5kX2FkZF9sdW4oc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0LAogCQkJCSAgdWludCBsdW4sIGludCAqYmZsYWdzcCwKQEAgLTEwNDYsNyArMTA0Niw3IEBACiAKIC8qKgogICogc2NzaV9yZXBvcnRfbHVuX3NjYW4gLSBTY2FuIHVzaW5nIFNDU0kgUkVQT1JUIExVTiByZXN1bHRzCi0gKiBAc2RldnNjYW46CXNjYW4gdGhlIGhvc3QsIGNoYW5uZWwsIGFuZCBpZCBvZiB0aGlzIFNjc2lfRGV2aWNlCisgKiBAc2RldnNjYW46CXNjYW4gdGhlIGhvc3QsIGNoYW5uZWwsIGFuZCBpZCBvZiB0aGlzIHNjc2lfZGV2aWNlCiAgKgogICogRGVzY3JpcHRpb246CiAgKiAgICAgSWYgQHNkZXZzY2FuIGlzIGZvciBhIFNDU0ktMyBvciB1cCBkZXZpY2UsIHNlbmQgYSBSRVBPUlQgTFVOCkBAIC0xMDc0LDYgKzEwNzQsNyBAQAogCXN0cnVjdCBzY3NpX3NlbnNlX2hkciBzc2hkcjsKIAlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXY7CiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBkZXZfdG9fc2hvc3QoJnN0YXJnZXQtPmRldik7CisJaW50IHJldCA9IDA7CiAKIAkvKgogCSAqIE9ubHkgc3VwcG9ydCBTQ1NJLTMgYW5kIHVwIGRldmljZXMgaWYgQkxJU1RfTk9SRVBPUlRMVU4gaXMgbm90IHNldC4KQEAgLTExNjksOCArMTE3MCw4IEBACiAJCS8qCiAJCSAqIFRoZSBkZXZpY2UgcHJvYmFibHkgZG9lcyBub3Qgc3VwcG9ydCBhIFJFUE9SVCBMVU4gY29tbWFuZAogCQkgKi8KLQkJa2ZyZWUobHVuX2RhdGEpOwotCQlyZXR1cm4gMTsKKwkJcmV0ID0gMTsKKwkJZ290byBvdXRfZXJyOwogCX0KIAogCS8qCkBAIC0xMjM4LDYgKzEyMzksNyBAQAogCQl9CiAJfQogCisgb3V0X2VycjoKIAlrZnJlZShsdW5fZGF0YSk7CiAgb3V0OgogCXNjc2lfZGV2aWNlX3B1dChzZGV2KTsKQEAgLTEyNDYsNyArMTI0OCw3IEBACiAJCSAqIHRoZSBzZGV2IHdlIHVzZWQgZGlkbid0IGFwcGVhciBpbiB0aGUgcmVwb3J0IGx1bnMgc2NhbgogCQkgKi8KIAkJc2NzaV9kZXN0cm95X3NkZXYoc2Rldik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogc3RydWN0IHNjc2lfZGV2aWNlICpfX3Njc2lfYWRkX2RldmljZShzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCwgdWludCBjaGFubmVsLApAQCAtMTQ3MiwxNiArMTQ3NCwxNiBAQAogLyoKICAqIEZ1bmN0aW9uOiAgICBzY3NpX2dldF9ob3N0X2RldigpCiAgKgotICogUHVycG9zZTogICAgIENyZWF0ZSBhIFNjc2lfRGV2aWNlIHRoYXQgcG9pbnRzIHRvIHRoZSBob3N0IGFkYXB0ZXIgaXRzZWxmLgorICogUHVycG9zZTogICAgIENyZWF0ZSBhIHNjc2lfZGV2aWNlIHRoYXQgcG9pbnRzIHRvIHRoZSBob3N0IGFkYXB0ZXIgaXRzZWxmLgogICoKLSAqIEFyZ3VtZW50czogICBTSHBudCAgIC0gSG9zdCB0aGF0IG5lZWRzIGEgU2NzaV9EZXZpY2UKKyAqIEFyZ3VtZW50czogICBTSHBudCAgIC0gSG9zdCB0aGF0IG5lZWRzIGEgc2NzaV9kZXZpY2UKICAqCiAgKiBMb2NrIHN0YXR1czogTm9uZSBhc3N1bWVkLgogICoKLSAqIFJldHVybnM6ICAgICBUaGUgU2NzaV9EZXZpY2Ugb3IgTlVMTAorICogUmV0dXJuczogICAgIFRoZSBzY3NpX2RldmljZSBvciBOVUxMCiAgKgogICogTm90ZXM6Ci0gKglBdHRhY2ggYSBzaW5nbGUgU2NzaV9EZXZpY2UgdG8gdGhlIFNjc2lfSG9zdCAtIHRoaXMgc2hvdWxkCisgKglBdHRhY2ggYSBzaW5nbGUgc2NzaV9kZXZpY2UgdG8gdGhlIFNjc2lfSG9zdCAtIHRoaXMgc2hvdWxkCiAgKgliZSBtYWRlIHRvIGxvb2sgbGlrZSBhICJwc2V1ZG8tZGV2aWNlIiB0aGF0IHBvaW50cyB0byB0aGUKICAqCUhBIGl0c2VsZi4KICAqCkBAIC0xNTE4LDcgKzE1MjAsNyBAQAogICoKICAqIFB1cnBvc2U6ICAgICBGcmVlIGEgc2NzaV9kZXZpY2UgdGhhdCBwb2ludHMgdG8gdGhlIGhvc3QgYWRhcHRlciBpdHNlbGYuCiAgKgotICogQXJndW1lbnRzOiAgIFNIcG50ICAgLSBIb3N0IHRoYXQgbmVlZHMgYSBTY3NpX0RldmljZQorICogQXJndW1lbnRzOiAgIFNIcG50ICAgLSBIb3N0IHRoYXQgbmVlZHMgYSBzY3NpX2RldmljZQogICoKICAqIExvY2sgc3RhdHVzOiBOb25lIGFzc3VtZWQuCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfc3lzZnMuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3N5c2ZzLmMKaW5kZXggNzJhNjU1MC4uNDYzNDkyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfc3lzZnMuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9zeXNmcy5jCkBAIC02OTEsMTYgKzY5MSwxOSBAQAogCiB2b2lkIF9fc2NzaV9yZW1vdmVfZGV2aWNlKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKIHsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmc2Rldi0+c2Rldl9nZW5kZXY7CisKIAlpZiAoc2NzaV9kZXZpY2Vfc2V0X3N0YXRlKHNkZXYsIFNERVZfQ0FOQ0VMKSAhPSAwKQogCQlyZXR1cm47CiAKIAljbGFzc19kZXZpY2VfdW5yZWdpc3Rlcigmc2Rldi0+c2Rldl9jbGFzc2Rldik7Ci0JZGV2aWNlX2RlbCgmc2Rldi0+c2Rldl9nZW5kZXYpOworCXRyYW5zcG9ydF9yZW1vdmVfZGV2aWNlKGRldik7CisJZGV2aWNlX2RlbChkZXYpOwogCXNjc2lfZGV2aWNlX3NldF9zdGF0ZShzZGV2LCBTREVWX0RFTCk7CiAJaWYgKHNkZXYtPmhvc3QtPmhvc3R0LT5zbGF2ZV9kZXN0cm95KQogCQlzZGV2LT5ob3N0LT5ob3N0dC0+c2xhdmVfZGVzdHJveShzZGV2KTsKLQl0cmFuc3BvcnRfdW5yZWdpc3Rlcl9kZXZpY2UoJnNkZXYtPnNkZXZfZ2VuZGV2KTsKLQlwdXRfZGV2aWNlKCZzZGV2LT5zZGV2X2dlbmRldik7CisJdHJhbnNwb3J0X2Rlc3Ryb3lfZGV2aWNlKGRldik7CisJcHV0X2RldmljZShkZXYpOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3R5cGVkZWZzLmggYi9kcml2ZXJzL3Njc2kvc2NzaV90eXBlZGVmcy5oCmluZGV4IDZjNDMxMzIuLjI5ZjAzOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3R5cGVkZWZzLmgKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfdHlwZWRlZnMuaApAQCAtMSw2ICsxLDMgQEAKIAotdHlwZWRlZiBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIFNjc2lfSG9zdF9UZW1wbGF0ZTsKLXR5cGVkZWYgc3RydWN0IHNjc2lfZGV2aWNlIFNjc2lfRGV2aWNlOwogdHlwZWRlZiBzdHJ1Y3Qgc2NzaV9jbW5kIFNjc2lfQ21uZDsKIHR5cGVkZWYgc3RydWN0IHNjc2lfcmVxdWVzdCBTY3NpX1JlcXVlc3Q7Ci10eXBlZGVmIHN0cnVjdCBzY3NpX3BvaW50ZXIgU2NzaV9Qb2ludGVyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NkLmMgYi9kcml2ZXJzL3Njc2kvc2QuYwppbmRleCBiYjViMjQyLi44NjEzYTEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2QuYworKysgYi9kcml2ZXJzL3Njc2kvc2QuYwpAQCAtNzY5LDIwICs3NjksMTYgQEAKIHN0YXRpYyBpbnQgc2RfcHJlcGFyZV9mbHVzaChyZXF1ZXN0X3F1ZXVlX3QgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSkKIHsKIAlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYgPSBxLT5xdWV1ZWRhdGE7Ci0Jc3RydWN0IHNjc2lfZGlzayAqc2RrcCA9IHNjc2lfZGlza19nZXRfZnJvbV9kZXYoJnNkZXYtPnNkZXZfZ2VuZGV2KTsKLQlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3Qgc2NzaV9kaXNrICpzZGtwID0gZGV2X2dldF9kcnZkYXRhKCZzZGV2LT5zZGV2X2dlbmRldik7CiAKLQlpZiAoc2RrcCkgewotCQlpZiAoc2RrcC0+V0NFKSB7Ci0JCQltZW1zZXQocnEtPmNtZCwgMCwgc2l6ZW9mKHJxLT5jbWQpKTsKLQkJCXJxLT5mbGFncyB8PSBSRVFfQkxPQ0tfUEMgfCBSRVFfU09GVEJBUlJJRVI7Ci0JCQlycS0+dGltZW91dCA9IFNEX1RJTUVPVVQ7Ci0JCQlycS0+Y21kWzBdID0gU1lOQ0hST05JWkVfQ0FDSEU7Ci0JCQlyZXQgPSAxOwotCQl9Ci0JCXNjc2lfZGlza19wdXQoc2RrcCk7Ci0JfQotCXJldHVybiByZXQ7CisJaWYgKCFzZGtwIHx8ICFzZGtwLT5XQ0UpCisJCXJldHVybiAwOworCisJbWVtc2V0KHJxLT5jbWQsIDAsIHNpemVvZihycS0+Y21kKSk7CisJcnEtPmZsYWdzIHw9IFJFUV9CTE9DS19QQyB8IFJFUV9TT0ZUQkFSUklFUjsKKwlycS0+dGltZW91dCA9IFNEX1RJTUVPVVQ7CisJcnEtPmNtZFswXSA9IFNZTkNIUk9OSVpFX0NBQ0hFOworCXJldHVybiAxOwogfQogCiBzdGF0aWMgdm9pZCBzZF9yZXNjYW4oc3RydWN0IGRldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NlYWdhdGUuYyBiL2RyaXZlcnMvc2NzaS9zZWFnYXRlLmMKaW5kZXggYTBjYWNlOS4uMGZmODNkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NlYWdhdGUuYworKysgYi9kcml2ZXJzL3Njc2kvc2VhZ2F0ZS5jCkBAIC00MTgsNyArNDE4LDcgQEAKICNkZWZpbmUgVUxPT1AoIGkgKSBmb3IgKGNsb2NrID0gaSo4OzspCiAjZGVmaW5lIFRJTUVPVVQgKCEoY2xvY2stLSkpCiAKLWludCBfX2luaXQgc2VhZ2F0ZV9zdDB4X2RldGVjdCAoU2NzaV9Ib3N0X1RlbXBsYXRlICogdHBudCkKK2ludCBfX2luaXQgc2VhZ2F0ZV9zdDB4X2RldGVjdCAoc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqIHRwbnQpCiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2U7CiAJaW50IGksIGo7CkBAIC0xNjQ5LDcgKzE2NDksNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgU2NzaV9Ib3N0X1RlbXBsYXRlIGRyaXZlcl90ZW1wbGF0ZSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGRyaXZlcl90ZW1wbGF0ZSA9IHsKIAkuZGV0ZWN0ICAgICAgICAgCT0gc2VhZ2F0ZV9zdDB4X2RldGVjdCwKIAkucmVsZWFzZSAgICAgICAgCT0gc2VhZ2F0ZV9zdDB4X3JlbGVhc2UsCiAJLmluZm8gICAgICAgICAgIAk9IHNlYWdhdGVfc3QweF9pbmZvLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NlYWdhdGUuaCBiL2RyaXZlcnMvc2NzaS9zZWFnYXRlLmgKaW5kZXggODg4OWZmMWEuLmZiNWYzODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zZWFnYXRlLmgKKysrIGIvZHJpdmVycy9zY3NpL3NlYWdhdGUuaApAQCAtOSw3ICs5LDcgQEAKICNpZm5kZWYgX1NFQUdBVEVfSAogI2RlZmluZSBTRUFHQVRFX0gKIAotc3RhdGljIGludCBzZWFnYXRlX3N0MHhfZGV0ZWN0KFNjc2lfSG9zdF9UZW1wbGF0ZSAqKTsKK3N0YXRpYyBpbnQgc2VhZ2F0ZV9zdDB4X2RldGVjdChzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICopOwogc3RhdGljIGludCBzZWFnYXRlX3N0MHhfcXVldWVfY29tbWFuZChTY3NpX0NtbmQgKiwgdm9pZCAoKmRvbmUpKFNjc2lfQ21uZCAqKSk7CiAKIHN0YXRpYyBpbnQgc2VhZ2F0ZV9zdDB4X2Fib3J0KFNjc2lfQ21uZCAqKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zZy5jIGIvZHJpdmVycy9zY3NpL3NnLmMKaW5kZXggNjJlM2YzNC4uNzJlYzU5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NnLmMKKysrIGIvZHJpdmVycy9zY3NpL3NnLmMKQEAgLTY4LDEwICs2OCw2IEBACiBzdGF0aWMgdm9pZCBzZ19wcm9jX2NsZWFudXAodm9pZCk7CiAjZW5kaWYKIAotI2lmbmRlZiBMSU5VWF9WRVJTSU9OX0NPREUKLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+Ci0jZW5kaWYJCQkJLyogTElOVVhfVkVSU0lPTl9DT0RFICovCi0KICNkZWZpbmUgU0dfQUxMT1dfRElPX0RFRiAwCiAjZGVmaW5lIFNHX0FMTE9XX0RJT19DT0RFIC8qIGNvbXBpbGUgb3V0IGJ5IGNvbW1lbnRpbmcgdGhpcyBkZWZpbmUgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NnaXdkOTMuYyBiL2RyaXZlcnMvc2NzaS9zZ2l3ZDkzLmMKaW5kZXggMDlmZDIwMy4uYmYyY2ViNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NnaXdkOTMuYworKysgYi9kcml2ZXJzL3Njc2kvc2dpd2Q5My5jCkBAIC0xNSw3ICsxNSw2IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KQEAgLTIxOCw3ICsyMTcsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IFNjc2lfSG9zdCAqIF9faW5pdCBzZ2l3ZDkzX3NldHVwX3Njc2koCi0JU2NzaV9Ib3N0X1RlbXBsYXRlICpTR0libG93cywgaW50IHVuaXQsIGludCBpcnEsCisJc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqU0dJYmxvd3MsIGludCB1bml0LCBpbnQgaXJxLAogCXN0cnVjdCBocGMzX3Njc2lyZWdzICpocmVncywgdW5zaWduZWQgY2hhciAqd2RyZWdzKQogewogCXN0cnVjdCBpcDIyX2hvc3RkYXRhICpoZGF0YTsKQEAgLTI2Niw3ICsyNjUsNyBAQAogCXJldHVybiBOVUxMOwogfQogCi1pbnQgX19pbml0IHNnaXdkOTNfZGV0ZWN0KFNjc2lfSG9zdF9UZW1wbGF0ZSAqU0dJYmxvd3MpCitpbnQgX19pbml0IHNnaXdkOTNfZGV0ZWN0KHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKlNHSWJsb3dzKQogewogCWludCBmb3VuZCA9IDA7CiAKQEAgLTMyNSw3ICszMjQsNyBAQAogICogYXJndW1lbnRzIG5vdCB3aXRoIHBvaW50ZXJzLiAgU28gdGhpcyBpcyBnb2luZyB0byBibG93IHVwIGJlYXV0eWZ1bGx5CiAgKiBvbiA2NC1iaXQgc3lzdGVtcyB3aXRoIG1lbW9yeSBvdXRzaWRlIHRoZSBjb21wYXQgYWRkcmVzcyBzcGFjZXMuCiAgKi8KLXN0YXRpYyBTY3NpX0hvc3RfVGVtcGxhdGUgZHJpdmVyX3RlbXBsYXRlID0geworc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgZHJpdmVyX3RlbXBsYXRlID0gewogCS5wcm9jX25hbWUJCT0gIlNHSVdEOTMiLAogCS5uYW1lCQkJPSAiU0dJIFdEOTMiLAogCS5kZXRlY3QJCQk9IHNnaXdkOTNfZGV0ZWN0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3N1bjNfTkNSNTM4MC5jIGIvZHJpdmVycy9zY3NpL3N1bjNfTkNSNTM4MC5jCmluZGV4IDdlMTk1ODkuLmMwNDFiZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zdW4zX05DUjUzODAuYworKysgYi9kcml2ZXJzL3Njc2kvc3VuM19OQ1I1MzgwLmMKQEAgLTI1Nyw3ICsyNTcsNyBAQAogICovCiAKIHN0YXRpYyBzdHJ1Y3QgU2NzaV9Ib3N0ICpmaXJzdF9pbnN0YW5jZSA9IE5VTEw7Ci1zdGF0aWMgU2NzaV9Ib3N0X1RlbXBsYXRlICp0aGVfdGVtcGxhdGUgPSBOVUxMOworc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKnRoZV90ZW1wbGF0ZSA9IE5VTEw7CiAKIC8qIE1hY3JvcyBlYXNlIGxpZmUuLi4gOi0pICovCiAjZGVmaW5lCVNFVFVQX0hPU1REQVRBKGluKQkJCQlcCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc3VuM19zY3NpLmMgYi9kcml2ZXJzL3Njc2kvc3VuM19zY3NpLmMKaW5kZXggZTNlYTk5Zi4uODM3MTczNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3N1bjNfc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9zdW4zX3Njc2kuYwpAQCAtMTg1LDcgKzE4NSw3IEBACiBzdGF0aWMgc3RydWN0IFNjc2lfSG9zdCAqZGVmYXVsdF9pbnN0YW5jZTsKIAogLyoKLSAqIEZ1bmN0aW9uIDogaW50IHN1bjNzY3NpX2RldGVjdChTY3NpX0hvc3RfVGVtcGxhdGUgKiB0cG50KQorICogRnVuY3Rpb24gOiBpbnQgc3VuM3Njc2lfZGV0ZWN0KHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKiB0cG50KQogICoKICAqIFB1cnBvc2UgOiBpbml0aWFsaXplcyBtYWMgTkNSNTM4MCBkcml2ZXIgYmFzZWQgb24gdGhlCiAgKgljb21tYW5kIGxpbmUgLyBjb21waWxlIHRpbWUgcG9ydCBhbmQgaXJxIGRlZmluaXRpb25zLgpAQCAtMTk2LDcgKzE5Niw3IEBACiAgKgogICovCiAgCi1pbnQgc3VuM3Njc2lfZGV0ZWN0KFNjc2lfSG9zdF9UZW1wbGF0ZSAqIHRwbnQpCitpbnQgc3VuM3Njc2lfZGV0ZWN0KHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKiB0cG50KQogewogCXVuc2lnbmVkIGxvbmcgaW9hZGRyOwogCXN0YXRpYyBpbnQgY2FsbGVkID0gMDsKQEAgLTYyMSw3ICs2MjEsNyBAQAogCQogI2luY2x1ZGUgInN1bjNfTkNSNTM4MC5jIgogCi1zdGF0aWMgU2NzaV9Ib3N0X1RlbXBsYXRlIGRyaXZlcl90ZW1wbGF0ZSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGRyaXZlcl90ZW1wbGF0ZSA9IHsKIAkubmFtZQkJCT0gU1VOM19TQ1NJX05BTUUsCiAJLmRldGVjdAkJCT0gc3VuM3Njc2lfZGV0ZWN0LAogCS5yZWxlYXNlCQk9IHN1bjNzY3NpX3JlbGVhc2UsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc3VuM19zY3NpLmggYi9kcml2ZXJzL3Njc2kvc3VuM19zY3NpLmgKaW5kZXggMTU1MjgyYi4uODM0ZGFiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3N1bjNfc2NzaS5oCisrKyBiL2RyaXZlcnMvc2NzaS9zdW4zX3Njc2kuaApAQCAtNDgsNyArNDgsNyBAQAogI2RlZmluZSBJT0JBU0VfU1VOM19WTUVTQ1NJIDB4ZmYyMDAwMDAKIAogc3RhdGljIGludCBzdW4zc2NzaV9hYm9ydCAoU2NzaV9DbW5kICopOwotc3RhdGljIGludCBzdW4zc2NzaV9kZXRlY3QgKFNjc2lfSG9zdF9UZW1wbGF0ZSAqKTsKK3N0YXRpYyBpbnQgc3VuM3Njc2lfZGV0ZWN0IChzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICopOwogc3RhdGljIGNvbnN0IGNoYXIgKnN1bjNzY3NpX2luZm8gKHN0cnVjdCBTY3NpX0hvc3QgKik7CiBzdGF0aWMgaW50IHN1bjNzY3NpX2J1c19yZXNldChTY3NpX0NtbmQgKik7CiBzdGF0aWMgaW50IHN1bjNzY3NpX3F1ZXVlX2NvbW1hbmQgKFNjc2lfQ21uZCAqLCB2b2lkICgqZG9uZSkoU2NzaV9DbW5kICopKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zdW4zX3Njc2lfdm1lLmMgYi9kcml2ZXJzL3Njc2kvc3VuM19zY3NpX3ZtZS5jCmluZGV4IDlhY2I1ZGQuLjAwOGE4MmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zdW4zX3Njc2lfdm1lLmMKKysrIGIvZHJpdmVycy9zY3NpL3N1bjNfc2NzaV92bWUuYwpAQCAtMTI3LDcgKzEyNyw3IEBACiBzdGF0aWMgc3RydWN0IFNjc2lfSG9zdCAqZGVmYXVsdF9pbnN0YW5jZTsKIAogLyoKLSAqIEZ1bmN0aW9uIDogaW50IHN1bjNzY3NpX2RldGVjdChTY3NpX0hvc3RfVGVtcGxhdGUgKiB0cG50KQorICogRnVuY3Rpb24gOiBpbnQgc3VuM3Njc2lfZGV0ZWN0KHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKiB0cG50KQogICoKICAqIFB1cnBvc2UgOiBpbml0aWFsaXplcyBtYWMgTkNSNTM4MCBkcml2ZXIgYmFzZWQgb24gdGhlCiAgKgljb21tYW5kIGxpbmUgLyBjb21waWxlIHRpbWUgcG9ydCBhbmQgaXJxIGRlZmluaXRpb25zLgpAQCAtMTM4LDcgKzEzOCw3IEBACiAgKgogICovCiAgCi1zdGF0aWMgaW50IHN1bjNzY3NpX2RldGVjdChTY3NpX0hvc3RfVGVtcGxhdGUgKiB0cG50KQorc3RhdGljIGludCBzdW4zc2NzaV9kZXRlY3Qoc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqIHRwbnQpCiB7CiAJdW5zaWduZWQgbG9uZyBpb2FkZHIsIGlycSA9IDA7CiAJc3RhdGljIGludCBjYWxsZWQgPSAwOwpAQCAtNTY0LDcgKzU2NCw3IEBACiAKICNpbmNsdWRlICJzdW4zX05DUjUzODAuYyIKIAotc3RhdGljIFNjc2lfSG9zdF9UZW1wbGF0ZSBkcml2ZXJfdGVtcGxhdGUgPSB7CitzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBkcml2ZXJfdGVtcGxhdGUgPSB7CiAJLm5hbWUJCQk9IFNVTjNfU0NTSV9OQU1FLAogCS5kZXRlY3QJCQk9IHN1bjNzY3NpX2RldGVjdCwKIAkucmVsZWFzZQkJPSBzdW4zc2NzaV9yZWxlYXNlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3N1bjN4X2VzcC5jIGIvZHJpdmVycy9zY3NpL3N1bjN4X2VzcC5jCmluZGV4IDA5ZDc2MzkuLmNjOTkwYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zdW4zeF9lc3AuYworKysgYi9kcml2ZXJzL3Njc2kvc3VuM3hfZXNwLmMKQEAgLTQ3LDcgKzQ3LDcgQEAKIC8qIERldGVjdGluZyBFU1AgY2hpcHMgb24gdGhlIG1hY2hpbmUuICBUaGlzIGlzIHRoZSBzaW1wbGUgYW5kIGVhc3kKICAqIHZlcnNpb24uCiAgKi8KLWludCBzdW4zeF9lc3BfZGV0ZWN0KFNjc2lfSG9zdF9UZW1wbGF0ZSAqdHBudCkKK2ludCBzdW4zeF9lc3BfZGV0ZWN0KHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKnRwbnQpCiB7CiAJc3RydWN0IE5DUl9FU1AgKmVzcDsKIAlzdHJ1Y3QgQ29uZmlnRGV2ICplc3BfZGV2OwpAQCAtMzY3LDcgKzM2Nyw3IEBACiAKIH0KIAotc3RhdGljIFNjc2lfSG9zdF9UZW1wbGF0ZSBkcml2ZXJfdGVtcGxhdGUgPSB7CitzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBkcml2ZXJfdGVtcGxhdGUgPSB7CiAJLnByb2NfbmFtZQkJPSAic3VuM3hfZXNwIiwKIAkucHJvY19pbmZvCQk9ICZlc3BfcHJvY19pbmZvLAogCS5uYW1lCQkJPSAiU3VuIEVTUCAxMDAvMTAwYS8yMDAiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3N5bTUzYzQxNi5jIGIvZHJpdmVycy9zY3NpL3N5bTUzYzQxNi5jCmluZGV4IDkzZGM3YjYuLjg2NDAyNTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zeW01M2M0MTYuYworKysgYi9kcml2ZXJzL3Njc2kvc3ltNTNjNDE2LmMKQEAgLTYzMyw3ICs2MzMsNyBAQAogCX0KIH0KIAotaW50IF9faW5pdCBzeW01M2M0MTZfZGV0ZWN0KFNjc2lfSG9zdF9UZW1wbGF0ZSAqdHBudCkKK2ludCBfX2luaXQgc3ltNTNjNDE2X2RldGVjdChzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICp0cG50KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IFNjc2lfSG9zdCAqIHNocG50ID0gTlVMTDsKQEAgLTg0OSw3ICs4NDksNyBAQAogCiAjZW5kaWYKIAotc3RhdGljIFNjc2lfSG9zdF9UZW1wbGF0ZSBkcml2ZXJfdGVtcGxhdGUgPSB7CitzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBkcml2ZXJfdGVtcGxhdGUgPSB7CiAJLnByb2NfbmFtZSA9CQkic3ltNTNjNDE2IiwKIAkubmFtZSA9CQkJIlN5bWJpb3MgTG9naWMgNTNjNDE2IiwKIAkuZGV0ZWN0ID0JCXN5bTUzYzQxNl9kZXRlY3QsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc3ltNTNjNDE2LmggYi9kcml2ZXJzL3Njc2kvc3ltNTNjNDE2LmgKaW5kZXggZmQ2YjEyMC4uNzc4NjBkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3N5bTUzYzQxNi5oCisrKyBiL2RyaXZlcnMvc2NzaS9zeW01M2M0MTYuaApAQCAtMjIsNyArMjIsNyBAQAogCiAjZGVmaW5lIFNZTTUzQzQxNl9TQ1NJX0lEIDcKIAotc3RhdGljIGludCBzeW01M2M0MTZfZGV0ZWN0KFNjc2lfSG9zdF9UZW1wbGF0ZSAqKTsKK3N0YXRpYyBpbnQgc3ltNTNjNDE2X2RldGVjdChzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICopOwogc3RhdGljIGNvbnN0IGNoYXIgKnN5bTUzYzQxNl9pbmZvKHN0cnVjdCBTY3NpX0hvc3QgKik7CiBzdGF0aWMgaW50IHN5bTUzYzQxNl9yZWxlYXNlKHN0cnVjdCBTY3NpX0hvc3QgKik7CiBzdGF0aWMgaW50IHN5bTUzYzQxNl9xdWV1ZWNvbW1hbmQoU2NzaV9DbW5kICosIHZvaWQgKCpkb25lKShTY3NpX0NtbmQgKikpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3QxMjguYyBiL2RyaXZlcnMvc2NzaS90MTI4LmMKaW5kZXggZjRiNzgwZS4uMjEzMDVmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3QxMjguYworKysgYi9kcml2ZXJzL3Njc2kvdDEyOC5jCkBAIC0xODMsNyArMTgzLDcgQEAKIH0KIAogLyogCi0gKiBGdW5jdGlvbiA6IGludCB0MTI4X2RldGVjdChTY3NpX0hvc3RfVGVtcGxhdGUgKiB0cG50KQorICogRnVuY3Rpb24gOiBpbnQgdDEyOF9kZXRlY3Qoc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqIHRwbnQpCiAgKgogICogUHVycG9zZSA6IGRldGVjdHMgYW5kIGluaXRpYWxpemVzIFQxMjgsVDEyOEYsIG9yIFQyMjggY29udHJvbGxlcnMKICAqCXRoYXQgd2VyZSBhdXRvcHJvYmVkLCBvdmVycmlkZGVuIG9uIHRoZSBMSUxPIGNvbW1hbmQgbGluZSwgCkBAIC0xOTUsNyArMTk1LDcgQEAKICAqCiAgKi8KIAotaW50IF9faW5pdCB0MTI4X2RldGVjdChTY3NpX0hvc3RfVGVtcGxhdGUgKiB0cG50KXsKK2ludCBfX2luaXQgdDEyOF9kZXRlY3Qoc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqIHRwbnQpewogICAgIHN0YXRpYyBpbnQgY3VycmVudF9vdmVycmlkZSA9IDAsIGN1cnJlbnRfYmFzZSA9IDA7CiAgICAgc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2U7CiAgICAgdW5zaWduZWQgbG9uZyBiYXNlOwpAQCAtNDMwLDcgKzQzMCw3IEBACiAKICNpbmNsdWRlICJOQ1I1MzgwLmMiCiAKLXN0YXRpYyBTY3NpX0hvc3RfVGVtcGxhdGUgZHJpdmVyX3RlbXBsYXRlID0geworc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgZHJpdmVyX3RlbXBsYXRlID0gewogCS5uYW1lICAgICAgICAgICA9ICJUcmFudG9yIFQxMjgvVDEyOEYvVDIyOCIsCiAJLmRldGVjdCAgICAgICAgID0gdDEyOF9kZXRlY3QsCiAJLnJlbGVhc2UgICAgICAgID0gdDEyOF9yZWxlYXNlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3QxMjguaCBiL2RyaXZlcnMvc2NzaS90MTI4LmgKaW5kZXggNTk2ZjNhMy4uNjQ2ZTg0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3QxMjguaAorKysgYi9kcml2ZXJzL3Njc2kvdDEyOC5oCkBAIC05NSw3ICs5NSw3IEBACiBzdGF0aWMgaW50IHQxMjhfYWJvcnQoU2NzaV9DbW5kICopOwogc3RhdGljIGludCB0MTI4X2Jpb3NwYXJhbShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKiwgc3RydWN0IGJsb2NrX2RldmljZSAqLAogCQkJICBzZWN0b3JfdCwgaW50Kik7Ci1zdGF0aWMgaW50IHQxMjhfZGV0ZWN0KFNjc2lfSG9zdF9UZW1wbGF0ZSAqKTsKK3N0YXRpYyBpbnQgdDEyOF9kZXRlY3Qoc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqKTsKIHN0YXRpYyBpbnQgdDEyOF9xdWV1ZV9jb21tYW5kKFNjc2lfQ21uZCAqLCB2b2lkICgqZG9uZSkoU2NzaV9DbW5kICopKTsKIHN0YXRpYyBpbnQgdDEyOF9idXNfcmVzZXQoU2NzaV9DbW5kICopOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvdTE0LTM0Zi5jIGIvZHJpdmVycy9zY3NpL3UxNC0zNGYuYwppbmRleCAxY2UyOWJhLi4zM2NkOTBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvdTE0LTM0Zi5jCisrKyBiL2RyaXZlcnMvc2NzaS91MTQtMzRmLmMKQEAgLTI4Miw3ICsyODIsNyBAQAogICogIGNsdXN0ZXJpbmcgaXMgZW5hYmxlZC4gRU5BQkxFX0NMVVNURVJJTkcgcHJvdmlkZXMgYSBwZXJmb3JtYW5jZSBpbmNyZWFzZQogICogIHVwIHRvIDUwJSBvbiBzZXF1ZW50aWFsIGFjY2Vzcy4KICAqCi0gKiAgU2luY2UgdGhlIFNjc2lfSG9zdF9UZW1wbGF0ZSBzdHJ1Y3R1cmUgaXMgc2hhcmVkIGFtb25nIGFsbCAxNEYgYW5kIDM0RiwKKyAqICBTaW5jZSB0aGUgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBzdHJ1Y3R1cmUgaXMgc2hhcmVkIGFtb25nIGFsbCAxNEYgYW5kIDM0RiwKICAqICB0aGUgbGFzdCBzZXR0aW5nIG9mIHVzZV9jbHVzdGVyaW5nIGlzIGluIGVmZmVjdCBmb3IgYWxsIG9mIHRoZXNlIGJvYXJkcy4KICAqCiAgKiAgSGVyZSBhIHNhbXBsZSBjb25maWd1cmF0aW9uIHVzaW5nIHR3byBVMTRGIGJvYXJkczoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS91bHRyYXN0b3IuYyBiL2RyaXZlcnMvc2NzaS91bHRyYXN0b3IuYwppbmRleCA0ODY1NTFiLi5lNjgxNjgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvdWx0cmFzdG9yLmMKKysrIGIvZHJpdmVycy9zY3NpL3VsdHJhc3Rvci5jCkBAIC0zNDMsNyArMzQzLDcgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgaW50IHVsdHJhc3Rvcl8xNGZfZGV0ZWN0KFNjc2lfSG9zdF9UZW1wbGF0ZSAqIHRwbnQpCitzdGF0aWMgaW50IHVsdHJhc3Rvcl8xNGZfZGV0ZWN0KHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKiB0cG50KQogewogICAgIHNpemVfdCBpOwogICAgIHVuc2lnbmVkIGNoYXIgaW5fYnl0ZSwgdmVyc2lvbl9ieXRlID0gMDsKQEAgLTUyNSw3ICs1MjUsNyBAQAogICAgIHJldHVybiBGQUxTRTsKIH0KIAotc3RhdGljIGludCB1bHRyYXN0b3JfMjRmX2RldGVjdChTY3NpX0hvc3RfVGVtcGxhdGUgKiB0cG50KQorc3RhdGljIGludCB1bHRyYXN0b3JfMjRmX2RldGVjdChzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICogdHBudCkKIHsKICAgaW50IGk7CiAgIHN0cnVjdCBTY3NpX0hvc3QgKiBzaHBudCA9IE5VTEw7CkBAIC02MzcsNyArNjM3LDcgQEAKICAgcmV0dXJuIEZBTFNFOwogfQogCi1zdGF0aWMgaW50IHVsdHJhc3Rvcl9kZXRlY3QoU2NzaV9Ib3N0X1RlbXBsYXRlICogdHBudCkKK3N0YXRpYyBpbnQgdWx0cmFzdG9yX2RldGVjdChzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICogdHBudCkKIHsKIAl0cG50LT5wcm9jX25hbWUgPSAidWx0cmFzdG9yIjsKIAlyZXR1cm4gdWx0cmFzdG9yXzE0Zl9kZXRlY3QodHBudCkgfHwgdWx0cmFzdG9yXzI0Zl9kZXRlY3QodHBudCk7CkBAIC0xMTg0LDcgKzExODQsNyBAQAogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLXN0YXRpYyBTY3NpX0hvc3RfVGVtcGxhdGUgZHJpdmVyX3RlbXBsYXRlID0geworc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgZHJpdmVyX3RlbXBsYXRlID0gewogCS5uYW1lICAgICAgICAgICAgICA9ICJVbHRyYVN0b3IgMTRGLzI0Ri8zNEYiLAogCS5kZXRlY3QgICAgICAgICAgICA9IHVsdHJhc3Rvcl9kZXRlY3QsCiAJLnJlbGVhc2UJICAgPSB1bHRyYXN0b3JfcmVsZWFzZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS91bHRyYXN0b3IuaCBiL2RyaXZlcnMvc2NzaS91bHRyYXN0b3IuaAppbmRleCAwYTBmOGRmLi5kYTc1OWExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvdWx0cmFzdG9yLmgKKysrIGIvZHJpdmVycy9zY3NpL3VsdHJhc3Rvci5oCkBAIC0xMyw3ICsxMyw3IEBACiAjaWZuZGVmIF9VTFRSQVNUT1JfSAogI2RlZmluZSBfVUxUUkFTVE9SX0gKIAotc3RhdGljIGludCB1bHRyYXN0b3JfZGV0ZWN0KFNjc2lfSG9zdF9UZW1wbGF0ZSAqKTsKK3N0YXRpYyBpbnQgdWx0cmFzdG9yX2RldGVjdChzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICopOwogc3RhdGljIGNvbnN0IGNoYXIgKnVsdHJhc3Rvcl9pbmZvKHN0cnVjdCBTY3NpX0hvc3QgKiBzaHBudCk7CiBzdGF0aWMgaW50IHVsdHJhc3Rvcl9xdWV1ZWNvbW1hbmQoU2NzaV9DbW5kICosIHZvaWQgKCpkb25lKShTY3NpX0NtbmQgKikpOwogc3RhdGljIGludCB1bHRyYXN0b3JfYWJvcnQoU2NzaV9DbW5kICopOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3dkMzNjOTMuYyBiL2RyaXZlcnMvc2NzaS93ZDMzYzkzLmMKaW5kZXggNTc1NDQ0NS4uZmQ2M2FkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3dkMzNjOTMuYworKysgYi9kcml2ZXJzL3Njc2kvd2QzM2M5My5jCkBAIC03Nyw3ICs3Nyw2IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvODI1MC5jIGIvZHJpdmVycy9zZXJpYWwvODI1MC5jCmluZGV4IDk4ODIwNjAuLjM3NDI3NTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsLzgyNTAuYworKysgYi9kcml2ZXJzL3NlcmlhbC84MjUwLmMKQEAgLTIzODEsOSArMjM4MSw5IEBACiAgKiBsaXN0IGlzIHRlcm1pbmF0ZWQgd2l0aCBhIHplcm8gZmxhZ3MgZW50cnksIHdoaWNoIG1lYW5zIHdlIGV4cGVjdAogICogYWxsIGVudHJpZXMgdG8gaGF2ZSBhdCBsZWFzdCBVUEZfQk9PVF9BVVRPQ09ORiBzZXQuCiAgKi8KLXN0YXRpYyBpbnQgX19kZXZpbml0IHNlcmlhbDgyNTBfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBfX2RldmluaXQgc2VyaWFsODI1MF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBsYXRfc2VyaWFsODI1MF9wb3J0ICpwID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCAqcCA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IHVhcnRfcG9ydCBwb3J0OwogCWludCByZXQsIGk7CiAKQEAgLTIzOTksMTIgKzIzOTksMTIgQEAKIAkJcG9ydC5mbGFncwk9IHAtPmZsYWdzOwogCQlwb3J0Lm1hcGJhc2UJPSBwLT5tYXBiYXNlOwogCQlwb3J0Lmh1YjYJPSBwLT5odWI2OwotCQlwb3J0LmRldgk9IGRldjsKKwkJcG9ydC5kZXYJPSAmZGV2LT5kZXY7CiAJCWlmIChzaGFyZV9pcnFzKQogCQkJcG9ydC5mbGFncyB8PSBVUEZfU0hBUkVfSVJROwogCQlyZXQgPSBzZXJpYWw4MjUwX3JlZ2lzdGVyX3BvcnQoJnBvcnQpOwogCQlpZiAocmV0IDwgMCkgewotCQkJZGV2X2VycihkZXYsICJ1bmFibGUgdG8gcmVnaXN0ZXIgcG9ydCBhdCBpbmRleCAlZCAiCisJCQlkZXZfZXJyKCZkZXYtPmRldiwgInVuYWJsZSB0byByZWdpc3RlciBwb3J0IGF0IGluZGV4ICVkICIKIAkJCQkiKElPJWx4IE1FTSVseCBJUlElZCk6ICVkXG4iLCBpLAogCQkJCXAtPmlvYmFzZSwgcC0+bWFwYmFzZSwgcC0+aXJxLCByZXQpOwogCQl9CkBAIC0yNDE1LDU0ICsyNDE1LDU1IEBACiAvKgogICogUmVtb3ZlIHNlcmlhbCBwb3J0cyByZWdpc3RlcmVkIGFnYWluc3QgYSBwbGF0Zm9ybSBkZXZpY2UuCiAgKi8KLXN0YXRpYyBpbnQgX19kZXZleGl0IHNlcmlhbDgyNTBfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19kZXZleGl0IHNlcmlhbDgyNTBfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBVQVJUX05SOyBpKyspIHsKIAkJc3RydWN0IHVhcnRfODI1MF9wb3J0ICp1cCA9ICZzZXJpYWw4MjUwX3BvcnRzW2ldOwogCi0JCWlmICh1cC0+cG9ydC5kZXYgPT0gZGV2KQorCQlpZiAodXAtPnBvcnQuZGV2ID09ICZkZXYtPmRldikKIAkJCXNlcmlhbDgyNTBfdW5yZWdpc3Rlcl9wb3J0KGkpOwogCX0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzZXJpYWw4MjUwX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHNlcmlhbDgyNTBfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBVQVJUX05SOyBpKyspIHsKIAkJc3RydWN0IHVhcnRfODI1MF9wb3J0ICp1cCA9ICZzZXJpYWw4MjUwX3BvcnRzW2ldOwogCi0JCWlmICh1cC0+cG9ydC50eXBlICE9IFBPUlRfVU5LTk9XTiAmJiB1cC0+cG9ydC5kZXYgPT0gZGV2KQorCQlpZiAodXAtPnBvcnQudHlwZSAhPSBQT1JUX1VOS05PV04gJiYgdXAtPnBvcnQuZGV2ID09ICZkZXYtPmRldikKIAkJCXVhcnRfc3VzcGVuZF9wb3J0KCZzZXJpYWw4MjUwX3JlZywgJnVwLT5wb3J0KTsKIAl9CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzZXJpYWw4MjUwX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHNlcmlhbDgyNTBfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBVQVJUX05SOyBpKyspIHsKIAkJc3RydWN0IHVhcnRfODI1MF9wb3J0ICp1cCA9ICZzZXJpYWw4MjUwX3BvcnRzW2ldOwogCi0JCWlmICh1cC0+cG9ydC50eXBlICE9IFBPUlRfVU5LTk9XTiAmJiB1cC0+cG9ydC5kZXYgPT0gZGV2KQorCQlpZiAodXAtPnBvcnQudHlwZSAhPSBQT1JUX1VOS05PV04gJiYgdXAtPnBvcnQuZGV2ID09ICZkZXYtPmRldikKIAkJCXVhcnRfcmVzdW1lX3BvcnQoJnNlcmlhbDgyNTBfcmVnLCAmdXAtPnBvcnQpOwogCX0KIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgc2VyaWFsODI1MF9pc2FfZHJpdmVyID0gewotCS5uYW1lCQk9ICJzZXJpYWw4MjUwIiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNlcmlhbDgyNTBfaXNhX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gc2VyaWFsODI1MF9wcm9iZSwKIAkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHNlcmlhbDgyNTBfcmVtb3ZlKSwKIAkuc3VzcGVuZAk9IHNlcmlhbDgyNTBfc3VzcGVuZCwKIAkucmVzdW1lCQk9IHNlcmlhbDgyNTBfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJzZXJpYWw4MjUwIiwKKwl9LAogfTsKIAogLyoKQEAgLTI2MDgsNyArMjYwOSw3IEBACiAKIAlzZXJpYWw4MjUwX3JlZ2lzdGVyX3BvcnRzKCZzZXJpYWw4MjUwX3JlZywgJnNlcmlhbDgyNTBfaXNhX2RldnMtPmRldik7CiAKLQlyZXQgPSBkcml2ZXJfcmVnaXN0ZXIoJnNlcmlhbDgyNTBfaXNhX2RyaXZlcik7CisJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzZXJpYWw4MjUwX2lzYV9kcml2ZXIpOwogCWlmIChyZXQgPT0gMCkKIAkJZ290byBvdXQ7CiAKQEAgLTI2MzAsNyArMjYzMSw3IEBACiAJICovCiAJc2VyaWFsODI1MF9pc2FfZGV2cyA9IE5VTEw7CiAKLQlkcml2ZXJfdW5yZWdpc3Rlcigmc2VyaWFsODI1MF9pc2FfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc2VyaWFsODI1MF9pc2FfZHJpdmVyKTsKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcihpc2FfZGV2KTsKIAogCXVhcnRfdW5yZWdpc3Rlcl9kcml2ZXIoJnNlcmlhbDgyNTBfcmVnKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2lteC5jIGIvZHJpdmVycy9zZXJpYWwvaW14LmMKaW5kZXggNGE1NGZmNS4uMzU1Y2Q5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvaW14LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvaW14LmMKQEAgLTkyMSw5ICs5MjEsOSBAQAogCS5jb25zICAgICAgICAgICA9IElNWF9DT05TT0xFLAogfTsKIAotc3RhdGljIGludCBzZXJpYWxfaW14X3N1c3BlbmQoc3RydWN0IGRldmljZSAqX2RldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBzZXJpYWxfaW14X3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0gICAgICAgIHN0cnVjdCBpbXhfcG9ydCAqc3BvcnQgPSBkZXZfZ2V0X2RydmRhdGEoX2Rldik7CisgICAgICAgIHN0cnVjdCBpbXhfcG9ydCAqc3BvcnQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCiAgICAgICAgIGlmIChzcG9ydCkKICAgICAgICAgICAgICAgICB1YXJ0X3N1c3BlbmRfcG9ydCgmaW14X3JlZywgJnNwb3J0LT5wb3J0KTsKQEAgLTkzMSw5ICs5MzEsOSBAQAogICAgICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzZXJpYWxfaW14X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpfZGV2KQorc3RhdGljIGludCBzZXJpYWxfaW14X3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0gICAgICAgIHN0cnVjdCBpbXhfcG9ydCAqc3BvcnQgPSBkZXZfZ2V0X2RydmRhdGEoX2Rldik7CisgICAgICAgIHN0cnVjdCBpbXhfcG9ydCAqc3BvcnQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCiAgICAgICAgIGlmIChzcG9ydCkKICAgICAgICAgICAgICAgICB1YXJ0X3Jlc3VtZV9wb3J0KCZpbXhfcmVnLCAmc3BvcnQtPnBvcnQpOwpAQCAtOTQxLDIxICs5NDEsMTkgQEAKICAgICAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2VyaWFsX2lteF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpfZGV2KQorc3RhdGljIGludCBzZXJpYWxfaW14X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoX2Rldik7Ci0KLQlpbXhfcG9ydHNbZGV2LT5pZF0ucG9ydC5kZXYgPSBfZGV2OworCWlteF9wb3J0c1tkZXYtPmlkXS5wb3J0LmRldiA9ICZkZXYtPmRldjsKIAl1YXJ0X2FkZF9vbmVfcG9ydCgmaW14X3JlZywgJmlteF9wb3J0c1tkZXYtPmlkXS5wb3J0KTsKLQlkZXZfc2V0X2RydmRhdGEoX2RldiwgJmlteF9wb3J0c1tkZXYtPmlkXSk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCAmaW14X3BvcnRzW2Rldi0+aWRdKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzZXJpYWxfaW14X3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpfZGV2KQorc3RhdGljIGludCBzZXJpYWxfaW14X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGlteF9wb3J0ICpzcG9ydCA9IGRldl9nZXRfZHJ2ZGF0YShfZGV2KTsKKwlzdHJ1Y3QgaW14X3BvcnQgKnNwb3J0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAotCWRldl9zZXRfZHJ2ZGF0YShfZGV2LCBOVUxMKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOwogCiAJaWYgKHNwb3J0KQogCQl1YXJ0X3JlbW92ZV9vbmVfcG9ydCgmaW14X3JlZywgJnNwb3J0LT5wb3J0KTsKQEAgLTk2MywxNCArOTYxLDE1IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBzZXJpYWxfaW14X2RyaXZlciA9IHsKLSAgICAgICAgLm5hbWUgICAgICAgICAgID0gImlteC11YXJ0IiwKLSAgICAgICAgLmJ1cyAgICAgICAgICAgID0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc2VyaWFsX2lteF9kcml2ZXIgPSB7CiAgICAgICAgIC5wcm9iZSAgICAgICAgICA9IHNlcmlhbF9pbXhfcHJvYmUsCiAgICAgICAgIC5yZW1vdmUgICAgICAgICA9IHNlcmlhbF9pbXhfcmVtb3ZlLAogCiAJLnN1c3BlbmQJPSBzZXJpYWxfaW14X3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBzZXJpYWxfaW14X3Jlc3VtZSwKKwkuZHJpdmVyCQk9IHsKKwkgICAgICAgIC5uYW1lCT0gImlteC11YXJ0IiwKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgaW14X3NlcmlhbF9pbml0KHZvaWQpCkBAIC05ODUsNyArOTg0LDcgQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gZHJpdmVyX3JlZ2lzdGVyKCZzZXJpYWxfaW14X2RyaXZlcik7CisJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzZXJpYWxfaW14X2RyaXZlcik7CiAJaWYgKHJldCAhPSAwKQogCQl1YXJ0X3VucmVnaXN0ZXJfZHJpdmVyKCZpbXhfcmVnKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvbXBjNTJ4eF91YXJ0LmMgYi9kcml2ZXJzL3NlcmlhbC9tcGM1Mnh4X3VhcnQuYwppbmRleCAwZGQwOGEwLi41ZDNjYjg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9tcGM1Mnh4X3VhcnQuYworKysgYi9kcml2ZXJzL3NlcmlhbC9tcGM1Mnh4X3VhcnQuYwpAQCAtNzE3LDEwICs3MTcsOSBAQAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAKIHN0YXRpYyBpbnQgX19kZXZpbml0Ci1tcGM1Mnh4X3VhcnRfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorbXBjNTJ4eF91YXJ0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7Ci0Jc3RydWN0IHJlc291cmNlICpyZXMgPSBwZGV2LT5yZXNvdXJjZTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IGRldi0+cmVzb3VyY2U7CiAKIAlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gTlVMTDsKIAlpbnQgaSwgaWR4LCByZXQ7CkBAIC03NjEsMTcgKzc2MCwxNyBAQAogCS8qIEFkZCB0aGUgcG9ydCB0byB0aGUgdWFydCBzdWItc3lzdGVtICovCiAJcmV0ID0gdWFydF9hZGRfb25lX3BvcnQoJm1wYzUyeHhfdWFydF9kcml2ZXIsIHBvcnQpOwogCWlmICghcmV0KQotCQlkZXZfc2V0X2RydmRhdGEoZGV2LCAodm9pZCopcG9ydCk7CisJCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgKHZvaWQqKXBvcnQpOwogCiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludAotbXBjNTJ4eF91YXJ0X3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCittcGM1Mnh4X3VhcnRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gKHN0cnVjdCB1YXJ0X3BvcnQgKikgZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdWFydF9wb3J0ICopIHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOwogCiAJaWYgKHBvcnQpCiAJCXVhcnRfcmVtb3ZlX29uZV9wb3J0KCZtcGM1Mnh4X3VhcnRfZHJpdmVyLCBwb3J0KTsKQEAgLTc4MSw5ICs3ODAsOSBAQAogCiAjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50Ci1tcGM1Mnh4X3VhcnRfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK21wYzUyeHhfdWFydF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSAoc3RydWN0IHVhcnRfcG9ydCAqKSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gKHN0cnVjdCB1YXJ0X3BvcnQgKikgcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAogCWlmIChzcG9ydCkKIAkJdWFydF9zdXNwZW5kX3BvcnQoJm1wYzUyeHhfdWFydF9kcml2ZXIsIHBvcnQpOwpAQCAtNzkyLDkgKzc5MSw5IEBACiB9CiAKIHN0YXRpYyBpbnQKLW1wYzUyeHhfdWFydF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQorbXBjNTJ4eF91YXJ0X3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdWFydF9wb3J0ICopIGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSAoc3RydWN0IHVhcnRfcG9ydCAqKSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJaWYgKHBvcnQpCiAJCXVhcnRfcmVzdW1lX3BvcnQoJm1wYzUyeHhfdWFydF9kcml2ZXIsIHBvcnQpOwpAQCAtODAzLDE1ICs4MDIsMTYgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgbXBjNTJ4eF91YXJ0X3BsYXRmb3JtX2RyaXZlciA9IHsKLQkubmFtZQkJPSAibXBjNTJ4eC1wc2MiLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXBjNTJ4eF91YXJ0X3BsYXRmb3JtX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gbXBjNTJ4eF91YXJ0X3Byb2JlLAogCS5yZW1vdmUJCT0gbXBjNTJ4eF91YXJ0X3JlbW92ZSwKICNpZmRlZiBDT05GSUdfUE0KIAkuc3VzcGVuZAk9IG1wYzUyeHhfdWFydF9zdXNwZW5kLAogCS5yZXN1bWUJCT0gbXBjNTJ4eF91YXJ0X3Jlc3VtZSwKICNlbmRpZgorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJtcGM1Mnh4LXBzYyIsCisJfSwKIH07CiAKIApAQCAtODI4LDcgKzgyOCw3IEBACiAKIAlyZXQgPSB1YXJ0X3JlZ2lzdGVyX2RyaXZlcigmbXBjNTJ4eF91YXJ0X2RyaXZlcik7CiAJaWYgKHJldCA9PSAwKSB7Ci0JCXJldCA9IGRyaXZlcl9yZWdpc3RlcigmbXBjNTJ4eF91YXJ0X3BsYXRmb3JtX2RyaXZlcik7CisJCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbXBjNTJ4eF91YXJ0X3BsYXRmb3JtX2RyaXZlcik7CiAJCWlmIChyZXQpCiAJCQl1YXJ0X3VucmVnaXN0ZXJfZHJpdmVyKCZtcGM1Mnh4X3VhcnRfZHJpdmVyKTsKIAl9CkBAIC04MzksNyArODM5LDcgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdAogbXBjNTJ4eF91YXJ0X2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmbXBjNTJ4eF91YXJ0X3BsYXRmb3JtX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm1wYzUyeHhfdWFydF9wbGF0Zm9ybV9kcml2ZXIpOwogCXVhcnRfdW5yZWdpc3Rlcl9kcml2ZXIoJm1wYzUyeHhfdWFydF9kcml2ZXIpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9tcHNjLmMgYi9kcml2ZXJzL3NlcmlhbC9tcHNjLmMKaW5kZXggYmE4ODM4Yi4uOGY4M2U0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvbXBzYy5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL21wc2MuYwpAQCAtMTU1MSwxNSArMTU1MSwxNCBAQAogfQogCiBzdGF0aWMgaW50Ci1tcHNjX3NoYXJlZF9kcnZfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorbXBzY19zaGFyZWRfZHJ2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCQkqcGQgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgbXBzY19zaGFyZWRfcGRhdGEJKnBkYXRhOwogCWludAkJCQkgcmMgPSAtRU5PREVWOwogCi0JaWYgKHBkLT5pZCA9PSAwKSB7Ci0JCWlmICghKHJjID0gbXBzY19zaGFyZWRfbWFwX3JlZ3MocGQpKSkgIHsKLQkJCXBkYXRhID0gKHN0cnVjdCBtcHNjX3NoYXJlZF9wZGF0YSAqKWRldi0+cGxhdGZvcm1fZGF0YTsKKwlpZiAoZGV2LT5pZCA9PSAwKSB7CisJCWlmICghKHJjID0gbXBzY19zaGFyZWRfbWFwX3JlZ3MoZGV2KSkpICB7CisJCQlwZGF0YSA9IChzdHJ1Y3QgbXBzY19zaGFyZWRfcGRhdGEgKilkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCiAJCQltcHNjX3NoYXJlZF9yZWdzLk1QU0NfTVJSX20gPSBwZGF0YS0+bXJyX3ZhbDsKIAkJCW1wc2Nfc2hhcmVkX3JlZ3MuTVBTQ19SQ1JSX209IHBkYXRhLT5yY3JyX3ZhbDsKQEAgLTE1NzcsMTIgKzE1NzYsMTEgQEAKIH0KIAogc3RhdGljIGludAotbXBzY19zaGFyZWRfZHJ2X3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCittcHNjX3NoYXJlZF9kcnZfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCSpwZCA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCWludAlyYyA9IC1FTk9ERVY7CiAKLQlpZiAocGQtPmlkID09IDApIHsKKwlpZiAoZGV2LT5pZCA9PSAwKSB7CiAJCW1wc2Nfc2hhcmVkX3VubWFwX3JlZ3MoKTsKIAkJbXBzY19zaGFyZWRfcmVncy5NUFNDX01SUl9tID0gMDsKIAkJbXBzY19zaGFyZWRfcmVncy5NUFNDX1JDUlJfbSA9IDA7CkBAIC0xNTk1LDExICsxNTkzLDEyIEBACiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgbXBzY19zaGFyZWRfZHJpdmVyID0gewotCS5uYW1lCT0gTVBTQ19TSEFSRURfTkFNRSwKLQkuYnVzCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXBzY19zaGFyZWRfZHJpdmVyID0gewogCS5wcm9iZQk9IG1wc2Nfc2hhcmVkX2Rydl9wcm9iZSwKIAkucmVtb3ZlCT0gbXBzY19zaGFyZWRfZHJ2X3JlbW92ZSwKKwkuZHJpdmVyCT0geworCQkubmFtZSA9IE1QU0NfU0hBUkVEX05BTUUsCisJfSwKIH07CiAKIC8qCkBAIC0xNzMyLDE5ICsxNzMxLDE4IEBACiB9CiAKIHN0YXRpYyBpbnQKLW1wc2NfZHJ2X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK21wc2NfZHJ2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCSpwZCA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXN0cnVjdCBtcHNjX3BvcnRfaW5mbwkqcGk7CiAJaW50CQkJcmMgPSAtRU5PREVWOwogCi0JcHJfZGVidWcoIm1wc2NfZHJ2X3Byb2JlOiBBZGRpbmcgTVBTQyAlZFxuIiwgcGQtPmlkKTsKKwlwcl9kZWJ1ZygibXBzY19kcnZfcHJvYmU6IEFkZGluZyBNUFNDICVkXG4iLCBkZXYtPmlkKTsKIAotCWlmIChwZC0+aWQgPCBNUFNDX05VTV9DVExSUykgewotCQlwaSA9ICZtcHNjX3BvcnRzW3BkLT5pZF07CisJaWYgKGRldi0+aWQgPCBNUFNDX05VTV9DVExSUykgeworCQlwaSA9ICZtcHNjX3BvcnRzW2Rldi0+aWRdOwogCi0JCWlmICghKHJjID0gbXBzY19kcnZfbWFwX3JlZ3MocGksIHBkKSkpIHsKLQkJCW1wc2NfZHJ2X2dldF9wbGF0Zm9ybV9kYXRhKHBpLCBwZCwgcGQtPmlkKTsKKwkJaWYgKCEocmMgPSBtcHNjX2Rydl9tYXBfcmVncyhwaSwgZGV2KSkpIHsKKwkJCW1wc2NfZHJ2X2dldF9wbGF0Zm9ybV9kYXRhKHBpLCBkZXYsIGRldi0+aWQpOwogCiAJCQlpZiAoIShyYyA9IG1wc2NfbWFrZV9yZWFkeShwaSkpKQogCQkJCWlmICghKHJjID0gdWFydF9hZGRfb25lX3BvcnQoJm1wc2NfcmVnLApAQCAtMTc2NCwyNyArMTc2MiwyNiBAQAogfQogCiBzdGF0aWMgaW50Ci1tcHNjX2Rydl9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorbXBzY19kcnZfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCSpwZCA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXByX2RlYnVnKCJtcHNjX2Rydl9leGl0OiBSZW1vdmluZyBNUFNDICVkXG4iLCBkZXYtPmlkKTsKIAotCXByX2RlYnVnKCJtcHNjX2Rydl9leGl0OiBSZW1vdmluZyBNUFNDICVkXG4iLCBwZC0+aWQpOwotCi0JaWYgKHBkLT5pZCA8IE1QU0NfTlVNX0NUTFJTKSB7Ci0JCXVhcnRfcmVtb3ZlX29uZV9wb3J0KCZtcHNjX3JlZywgJm1wc2NfcG9ydHNbcGQtPmlkXS5wb3J0KTsKLQkJbXBzY19yZWxlYXNlX3BvcnQoKHN0cnVjdCB1YXJ0X3BvcnQgKikmbXBzY19wb3J0c1twZC0+aWRdLnBvcnQpOwotCQltcHNjX2Rydl91bm1hcF9yZWdzKCZtcHNjX3BvcnRzW3BkLT5pZF0pOworCWlmIChkZXYtPmlkIDwgTVBTQ19OVU1fQ1RMUlMpIHsKKwkJdWFydF9yZW1vdmVfb25lX3BvcnQoJm1wc2NfcmVnLCAmbXBzY19wb3J0c1tkZXYtPmlkXS5wb3J0KTsKKwkJbXBzY19yZWxlYXNlX3BvcnQoKHN0cnVjdCB1YXJ0X3BvcnQgKikmbXBzY19wb3J0c1tkZXYtPmlkXS5wb3J0KTsKKwkJbXBzY19kcnZfdW5tYXBfcmVncygmbXBzY19wb3J0c1tkZXYtPmlkXSk7CiAJCXJldHVybiAwOwogCX0KIAllbHNlCiAJCXJldHVybiAtRU5PREVWOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgbXBzY19kcml2ZXIgPSB7Ci0JLm5hbWUJPSBNUFNDX0NUTFJfTkFNRSwKLQkuYnVzCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXBzY19kcml2ZXIgPSB7CiAJLnByb2JlCT0gbXBzY19kcnZfcHJvYmUsCiAJLnJlbW92ZQk9IG1wc2NfZHJ2X3JlbW92ZSwKKwkuZHJpdmVyCT0geworCQkubmFtZSA9IE1QU0NfQ1RMUl9OQU1FLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdApAQCAtMTc5OCw5ICsxNzk1LDkgQEAKIAltZW1zZXQoJm1wc2Nfc2hhcmVkX3JlZ3MsIDAsIHNpemVvZihtcHNjX3NoYXJlZF9yZWdzKSk7CiAKIAlpZiAoIShyYyA9IHVhcnRfcmVnaXN0ZXJfZHJpdmVyKCZtcHNjX3JlZykpKSB7Ci0JCWlmICghKHJjID0gZHJpdmVyX3JlZ2lzdGVyKCZtcHNjX3NoYXJlZF9kcml2ZXIpKSkgewotCQkJaWYgKChyYyA9IGRyaXZlcl9yZWdpc3RlcigmbXBzY19kcml2ZXIpKSkgewotCQkJCWRyaXZlcl91bnJlZ2lzdGVyKCZtcHNjX3NoYXJlZF9kcml2ZXIpOworCQlpZiAoIShyYyA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbXBzY19zaGFyZWRfZHJpdmVyKSkpIHsKKwkJCWlmICgocmMgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm1wc2NfZHJpdmVyKSkpIHsKKwkJCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbXBzY19zaGFyZWRfZHJpdmVyKTsKIAkJCQl1YXJ0X3VucmVnaXN0ZXJfZHJpdmVyKCZtcHNjX3JlZyk7CiAJCQl9CiAJCX0KQEAgLTE4MTUsOCArMTgxMiw4IEBACiBzdGF0aWMgdm9pZCBfX2V4aXQKIG1wc2NfZHJ2X2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmbXBzY19kcml2ZXIpOwotCWRyaXZlcl91bnJlZ2lzdGVyKCZtcHNjX3NoYXJlZF9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZtcHNjX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm1wc2Nfc2hhcmVkX2RyaXZlcik7CiAJdWFydF91bnJlZ2lzdGVyX2RyaXZlcigmbXBzY19yZWcpOwogCW1lbXNldChtcHNjX3BvcnRzLCAwLCBzaXplb2YobXBzY19wb3J0cykpOwogCW1lbXNldCgmbXBzY19zaGFyZWRfcmVncywgMCwgc2l6ZW9mKG1wc2Nfc2hhcmVkX3JlZ3MpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3B4YS5jIGIvZHJpdmVycy9zZXJpYWwvcHhhLmMKaW5kZXggMTZiMmY5NC4uZmY1ZTYzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvcHhhLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvcHhhLmMKQEAgLTgwNSw5ICs4MDUsOSBAQAogCS5jb25zCQk9IFBYQV9DT05TT0xFLAogfTsKIAotc3RhdGljIGludCBzZXJpYWxfcHhhX3N1c3BlbmQoc3RydWN0IGRldmljZSAqX2RldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBzZXJpYWxfcHhhX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0gICAgICAgIHN0cnVjdCB1YXJ0X3B4YV9wb3J0ICpzcG9ydCA9IGRldl9nZXRfZHJ2ZGF0YShfZGV2KTsKKyAgICAgICAgc3RydWN0IHVhcnRfcHhhX3BvcnQgKnNwb3J0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAogICAgICAgICBpZiAoc3BvcnQpCiAgICAgICAgICAgICAgICAgdWFydF9zdXNwZW5kX3BvcnQoJnNlcmlhbF9weGFfcmVnLCAmc3BvcnQtPnBvcnQpOwpAQCAtODE1LDkgKzgxNSw5IEBACiAgICAgICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNlcmlhbF9weGFfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKl9kZXYpCitzdGF0aWMgaW50IHNlcmlhbF9weGFfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLSAgICAgICAgc3RydWN0IHVhcnRfcHhhX3BvcnQgKnNwb3J0ID0gZGV2X2dldF9kcnZkYXRhKF9kZXYpOworICAgICAgICBzdHJ1Y3QgdWFydF9weGFfcG9ydCAqc3BvcnQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCiAgICAgICAgIGlmIChzcG9ydCkKICAgICAgICAgICAgICAgICB1YXJ0X3Jlc3VtZV9wb3J0KCZzZXJpYWxfcHhhX3JlZywgJnNwb3J0LT5wb3J0KTsKQEAgLTgyNSwyMSArODI1LDE5IEBACiAgICAgICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNlcmlhbF9weGFfcHJvYmUoc3RydWN0IGRldmljZSAqX2RldikKK3N0YXRpYyBpbnQgc2VyaWFsX3B4YV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKF9kZXYpOwotCi0Jc2VyaWFsX3B4YV9wb3J0c1tkZXYtPmlkXS5wb3J0LmRldiA9IF9kZXY7CisJc2VyaWFsX3B4YV9wb3J0c1tkZXYtPmlkXS5wb3J0LmRldiA9ICZkZXYtPmRldjsKIAl1YXJ0X2FkZF9vbmVfcG9ydCgmc2VyaWFsX3B4YV9yZWcsICZzZXJpYWxfcHhhX3BvcnRzW2Rldi0+aWRdLnBvcnQpOwotCWRldl9zZXRfZHJ2ZGF0YShfZGV2LCAmc2VyaWFsX3B4YV9wb3J0c1tkZXYtPmlkXSk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCAmc2VyaWFsX3B4YV9wb3J0c1tkZXYtPmlkXSk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2VyaWFsX3B4YV9yZW1vdmUoc3RydWN0IGRldmljZSAqX2RldikKK3N0YXRpYyBpbnQgc2VyaWFsX3B4YV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCB1YXJ0X3B4YV9wb3J0ICpzcG9ydCA9IGRldl9nZXRfZHJ2ZGF0YShfZGV2KTsKKwlzdHJ1Y3QgdWFydF9weGFfcG9ydCAqc3BvcnQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCi0JZGV2X3NldF9kcnZkYXRhKF9kZXYsIE5VTEwpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CiAKIAlpZiAoc3BvcnQpCiAJCXVhcnRfcmVtb3ZlX29uZV9wb3J0KCZzZXJpYWxfcHhhX3JlZywgJnNwb3J0LT5wb3J0KTsKQEAgLTg0NywxNCArODQ1LDE1IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBzZXJpYWxfcHhhX2RyaXZlciA9IHsKLSAgICAgICAgLm5hbWUgICAgICAgICAgID0gInB4YTJ4eC11YXJ0IiwKLSAgICAgICAgLmJ1cyAgICAgICAgICAgID0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc2VyaWFsX3B4YV9kcml2ZXIgPSB7CiAgICAgICAgIC5wcm9iZSAgICAgICAgICA9IHNlcmlhbF9weGFfcHJvYmUsCiAgICAgICAgIC5yZW1vdmUgICAgICAgICA9IHNlcmlhbF9weGFfcmVtb3ZlLAogCiAJLnN1c3BlbmQJPSBzZXJpYWxfcHhhX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBzZXJpYWxfcHhhX3Jlc3VtZSwKKwkuZHJpdmVyCQk9IHsKKwkgICAgICAgIC5uYW1lCT0gInB4YTJ4eC11YXJ0IiwKKwl9LAogfTsKIAogaW50IF9faW5pdCBzZXJpYWxfcHhhX2luaXQodm9pZCkKQEAgLTg2NSw3ICs4NjQsNyBAQAogCWlmIChyZXQgIT0gMCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IGRyaXZlcl9yZWdpc3Rlcigmc2VyaWFsX3B4YV9kcml2ZXIpOworCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc2VyaWFsX3B4YV9kcml2ZXIpOwogCWlmIChyZXQgIT0gMCkKIAkJdWFydF91bnJlZ2lzdGVyX2RyaXZlcigmc2VyaWFsX3B4YV9yZWcpOwogCkBAIC04NzQsNyArODczLDcgQEAKIAogdm9pZCBfX2V4aXQgc2VyaWFsX3B4YV9leGl0KHZvaWQpCiB7Ci0gICAgICAgIGRyaXZlcl91bnJlZ2lzdGVyKCZzZXJpYWxfcHhhX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNlcmlhbF9weGFfZHJpdmVyKTsKIAl1YXJ0X3VucmVnaXN0ZXJfZHJpdmVyKCZzZXJpYWxfcHhhX3JlZyk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3MzYzI0MTAuYyBiL2RyaXZlcnMvc2VyaWFsL3MzYzI0MTAuYwppbmRleCAwMzY3OTIzLi40NzY4MWM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zM2MyNDEwLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvczNjMjQxMC5jCkBAIC0xMDkyLDE0ICsxMDkyLDEzIEBACiAKIHN0YXRpYyBpbnQgcHJvYmVfaW5kZXggPSAwOwogCi1zdGF0aWMgaW50IHMzYzI0eHhfc2VyaWFsX3Byb2JlKHN0cnVjdCBkZXZpY2UgKl9kZXYsCitzdGF0aWMgaW50IHMzYzI0eHhfc2VyaWFsX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwKIAkJCQlzdHJ1Y3QgczNjMjR4eF91YXJ0X2luZm8gKmluZm8pCiB7CiAJc3RydWN0IHMzYzI0eHhfdWFydF9wb3J0ICpvdXJwb3J0OwotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiA9IHRvX3BsYXRmb3JtX2RldmljZShfZGV2KTsKIAlpbnQgcmV0OwogCi0JZGJnKCJzM2MyNHh4X3NlcmlhbF9wcm9iZSglcCwgJXApICVkXG4iLCBfZGV2LCBpbmZvLCBwcm9iZV9pbmRleCk7CisJZGJnKCJzM2MyNHh4X3NlcmlhbF9wcm9iZSglcCwgJXApICVkXG4iLCBkZXYsIGluZm8sIHByb2JlX2luZGV4KTsKIAogCW91cnBvcnQgPSAmczNjMjR4eF9zZXJpYWxfcG9ydHNbcHJvYmVfaW5kZXhdOwogCXByb2JlX2luZGV4Kys7CkBAIC0xMTEyLDcgKzExMTEsNyBAQAogCiAJZGJnKCIlczogYWRkaW5nIHBvcnRcbiIsIF9fRlVOQ1RJT05fXyk7CiAJdWFydF9hZGRfb25lX3BvcnQoJnMzYzI0eHhfdWFydF9kcnYsICZvdXJwb3J0LT5wb3J0KTsKLQlkZXZfc2V0X2RydmRhdGEoX2RldiwgJm91cnBvcnQtPnBvcnQpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgJm91cnBvcnQtPnBvcnQpOwogCiAJcmV0dXJuIDA7CiAKQEAgLTExMjAsOSArMTExOSw5IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBzM2MyNHh4X3NlcmlhbF9yZW1vdmUoc3RydWN0IGRldmljZSAqX2RldikKK3N0YXRpYyBpbnQgczNjMjR4eF9zZXJpYWxfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gczNjMjR4eF9kZXZfdG9fcG9ydChfZGV2KTsKKwlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gczNjMjR4eF9kZXZfdG9fcG9ydCgmZGV2LT5kZXYpOwogCiAJaWYgKHBvcnQpCiAJCXVhcnRfcmVtb3ZlX29uZV9wb3J0KCZzM2MyNHh4X3VhcnRfZHJ2LCBwb3J0KTsKQEAgLTExMzQsOSArMTEzMyw5IEBACiAKICNpZmRlZiBDT05GSUdfUE0KIAotc3RhdGljIGludCBzM2MyNHh4X3NlcmlhbF9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBzM2MyNHh4X3NlcmlhbF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSBzM2MyNHh4X2Rldl90b19wb3J0KGRldik7CisJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IHMzYzI0eHhfZGV2X3RvX3BvcnQoJmRldi0+ZGV2KTsKIAogCWlmIChwb3J0KQogCQl1YXJ0X3N1c3BlbmRfcG9ydCgmczNjMjR4eF91YXJ0X2RydiwgcG9ydCk7CkBAIC0xMTQ0LDkgKzExNDMsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHMzYzI0eHhfc2VyaWFsX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHMzYzI0eHhfc2VyaWFsX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IHMzYzI0eHhfZGV2X3RvX3BvcnQoZGV2KTsKKwlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gczNjMjR4eF9kZXZfdG9fcG9ydCgmZGV2LT5kZXYpOwogCXN0cnVjdCBzM2MyNHh4X3VhcnRfcG9ydCAqb3VycG9ydCA9IHRvX291cnBvcnQocG9ydCk7CiAKIAlpZiAocG9ydCkgewpAQCAtMTE2NSwxMSArMTE2NCwxMSBAQAogI2RlZmluZSBzM2MyNHh4X3NlcmlhbF9yZXN1bWUgIE5VTEwKICNlbmRpZgogCi1zdGF0aWMgaW50IHMzYzI0eHhfc2VyaWFsX2luaXQoc3RydWN0IGRldmljZV9kcml2ZXIgKmRydiwKK3N0YXRpYyBpbnQgczNjMjR4eF9zZXJpYWxfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyICpkcnYsCiAJCQkgICAgICAgc3RydWN0IHMzYzI0eHhfdWFydF9pbmZvICppbmZvKQogewogCWRiZygiczNjMjR4eF9zZXJpYWxfaW5pdCglcCwlcClcbiIsIGRydiwgaW5mbyk7Ci0JcmV0dXJuIGRyaXZlcl9yZWdpc3RlcihkcnYpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoZHJ2KTsKIH0KIAogCkBAIC0xMjI4LDE5ICsxMjI3LDIwIEBACiAJLnJlc2V0X3BvcnQJPSBzM2MyNDAwX3NlcmlhbF9yZXNldHBvcnQsCiB9OwogCi1zdGF0aWMgaW50IHMzYzI0MDBfc2VyaWFsX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgczNjMjQwMF9zZXJpYWxfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXJldHVybiBzM2MyNHh4X3NlcmlhbF9wcm9iZShkZXYsICZzM2MyNDAwX3VhcnRfaW5mKTsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHMzYzI0MDBfc2VyaWFsX2RydiA9IHsKLQkubmFtZQkJPSAiczNjMjQwMC11YXJ0IiwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzM2MyNDAwX3NlcmlhbF9kcnYgPSB7CiAJLnByb2JlCQk9IHMzYzI0MDBfc2VyaWFsX3Byb2JlLAogCS5yZW1vdmUJCT0gczNjMjR4eF9zZXJpYWxfcmVtb3ZlLAogCS5zdXNwZW5kCT0gczNjMjR4eF9zZXJpYWxfc3VzcGVuZCwKIAkucmVzdW1lCQk9IHMzYzI0eHhfc2VyaWFsX3Jlc3VtZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAiczNjMjQwMC11YXJ0IiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKIH07CiAKIHN0YXRpYyBpbmxpbmUgaW50IHMzYzI0MDBfc2VyaWFsX2luaXQodm9pZCkKQEAgLTEyNTAsNyArMTI1MCw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzM2MyNDAwX3NlcmlhbF9leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJnMzYzI0MDBfc2VyaWFsX2Rydik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnMzYzI0MDBfc2VyaWFsX2Rydik7CiB9CiAKICNkZWZpbmUgczNjMjQwMF91YXJ0X2luZl9hdCAmczNjMjQwMF91YXJ0X2luZgpAQCAtMTMzMiwxOSArMTMzMiwyMCBAQAogCiAvKiBkZXZpY2UgbWFuYWdlbWVudCAqLwogCi1zdGF0aWMgaW50IHMzYzI0MTBfc2VyaWFsX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgczNjMjQxMF9zZXJpYWxfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXJldHVybiBzM2MyNHh4X3NlcmlhbF9wcm9iZShkZXYsICZzM2MyNDEwX3VhcnRfaW5mKTsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHMzYzI0MTBfc2VyaWFsX2RydiA9IHsKLQkubmFtZQkJPSAiczNjMjQxMC11YXJ0IiwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzM2MyNDEwX3NlcmlhbF9kcnYgPSB7CiAJLnByb2JlCQk9IHMzYzI0MTBfc2VyaWFsX3Byb2JlLAogCS5yZW1vdmUJCT0gczNjMjR4eF9zZXJpYWxfcmVtb3ZlLAogCS5zdXNwZW5kCT0gczNjMjR4eF9zZXJpYWxfc3VzcGVuZCwKIAkucmVzdW1lCQk9IHMzYzI0eHhfc2VyaWFsX3Jlc3VtZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAiczNjMjQxMC11YXJ0IiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKIH07CiAKIHN0YXRpYyBpbmxpbmUgaW50IHMzYzI0MTBfc2VyaWFsX2luaXQodm9pZCkKQEAgLTEzNTQsNyArMTM1NSw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzM2MyNDEwX3NlcmlhbF9leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJnMzYzI0MTBfc2VyaWFsX2Rydik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnMzYzI0MTBfc2VyaWFsX2Rydik7CiB9CiAKICNkZWZpbmUgczNjMjQxMF91YXJ0X2luZl9hdCAmczNjMjQxMF91YXJ0X2luZgpAQCAtMTQ5MywyMCArMTQ5NCwyMSBAQAogCiAvKiBkZXZpY2UgbWFuYWdlbWVudCAqLwogCi1zdGF0aWMgaW50IHMzYzI0NDBfc2VyaWFsX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgczNjMjQ0MF9zZXJpYWxfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCWRiZygiczNjMjQ0MF9zZXJpYWxfcHJvYmU6IGRldj0lcFxuIiwgZGV2KTsKIAlyZXR1cm4gczNjMjR4eF9zZXJpYWxfcHJvYmUoZGV2LCAmczNjMjQ0MF91YXJ0X2luZik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBzM2MyNDQwX3NlcmlhbF9kcnYgPSB7Ci0JLm5hbWUJCT0gInMzYzI0NDAtdWFydCIsCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgczNjMjQ0MF9zZXJpYWxfZHJ2ID0gewogCS5wcm9iZQkJPSBzM2MyNDQwX3NlcmlhbF9wcm9iZSwKIAkucmVtb3ZlCQk9IHMzYzI0eHhfc2VyaWFsX3JlbW92ZSwKIAkuc3VzcGVuZAk9IHMzYzI0eHhfc2VyaWFsX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBzM2MyNHh4X3NlcmlhbF9yZXN1bWUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gInMzYzI0NDAtdWFydCIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCiB9OwogCiAKQEAgLTE1MTcsNyArMTUxOSw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzM2MyNDQwX3NlcmlhbF9leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJnMzYzI0NDBfc2VyaWFsX2Rydik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnMzYzI0NDBfc2VyaWFsX2Rydik7CiB9CiAKICNkZWZpbmUgczNjMjQ0MF91YXJ0X2luZl9hdCAmczNjMjQ0MF91YXJ0X2luZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc2ExMTAwLmMgYi9kcml2ZXJzL3NlcmlhbC9zYTExMDAuYwppbmRleCBlZDYxOGNjLi5mZDlkZWVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zYTExMDAuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zYTExMDAuYwpAQCAtODM0LDkgKzgzNCw5IEBACiAJLmNvbnMJCQk9IFNBMTEwMF9DT05TT0xFLAogfTsKIAotc3RhdGljIGludCBzYTExMDBfc2VyaWFsX3N1c3BlbmQoc3RydWN0IGRldmljZSAqX2RldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBzYTExMDBfc2VyaWFsX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0Jc3RydWN0IHNhMTEwMF9wb3J0ICpzcG9ydCA9IGRldl9nZXRfZHJ2ZGF0YShfZGV2KTsKKwlzdHJ1Y3Qgc2ExMTAwX3BvcnQgKnNwb3J0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAogCWlmIChzcG9ydCkKIAkJdWFydF9zdXNwZW5kX3BvcnQoJnNhMTEwMF9yZWcsICZzcG9ydC0+cG9ydCk7CkBAIC04NDQsOSArODQ0LDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzYTExMDBfc2VyaWFsX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpfZGV2KQorc3RhdGljIGludCBzYTExMDBfc2VyaWFsX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHNhMTEwMF9wb3J0ICpzcG9ydCA9IGRldl9nZXRfZHJ2ZGF0YShfZGV2KTsKKwlzdHJ1Y3Qgc2ExMTAwX3BvcnQgKnNwb3J0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAogCWlmIChzcG9ydCkKIAkJdWFydF9yZXN1bWVfcG9ydCgmc2ExMTAwX3JlZywgJnNwb3J0LT5wb3J0KTsKQEAgLTg1NCw5ICs4NTQsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNhMTEwMF9zZXJpYWxfcHJvYmUoc3RydWN0IGRldmljZSAqX2RldikKK3N0YXRpYyBpbnQgc2ExMTAwX3NlcmlhbF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKF9kZXYpOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gZGV2LT5yZXNvdXJjZTsKIAlpbnQgaTsKIApAQCAtODY5LDkgKzg2OCw5IEBACiAJCQlpZiAoc2ExMTAwX3BvcnRzW2ldLnBvcnQubWFwYmFzZSAhPSByZXMtPnN0YXJ0KQogCQkJCWNvbnRpbnVlOwogCi0JCQlzYTExMDBfcG9ydHNbaV0ucG9ydC5kZXYgPSBfZGV2OworCQkJc2ExMTAwX3BvcnRzW2ldLnBvcnQuZGV2ID0gJmRldi0+ZGV2OwogCQkJdWFydF9hZGRfb25lX3BvcnQoJnNhMTEwMF9yZWcsICZzYTExMDBfcG9ydHNbaV0ucG9ydCk7Ci0JCQlkZXZfc2V0X2RydmRhdGEoX2RldiwgJnNhMTEwMF9wb3J0c1tpXSk7CisJCQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsICZzYTExMDBfcG9ydHNbaV0pOwogCQkJYnJlYWs7CiAJCX0KIAl9CkBAIC04NzksMTEgKzg3OCwxMSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNhMTEwMF9zZXJpYWxfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKl9kZXYpCitzdGF0aWMgaW50IHNhMTEwMF9zZXJpYWxfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHNhMTEwMF9wb3J0ICpzcG9ydCA9IGRldl9nZXRfZHJ2ZGF0YShfZGV2KTsKKwlzdHJ1Y3Qgc2ExMTAwX3BvcnQgKnNwb3J0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKLQlkZXZfc2V0X2RydmRhdGEoX2RldiwgTlVMTCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAKIAlpZiAoc3BvcnQpCiAJCXVhcnRfcmVtb3ZlX29uZV9wb3J0KCZzYTExMDBfcmVnLCAmc3BvcnQtPnBvcnQpOwpAQCAtODkxLDEzICs4OTAsMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHNhMTF4MF9zZXJpYWxfZHJpdmVyID0gewotCS5uYW1lCQk9ICJzYTExeDAtdWFydCIsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzYTExeDBfc2VyaWFsX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gc2ExMTAwX3NlcmlhbF9wcm9iZSwKIAkucmVtb3ZlCQk9IHNhMTEwMF9zZXJpYWxfcmVtb3ZlLAogCS5zdXNwZW5kCT0gc2ExMTAwX3NlcmlhbF9zdXNwZW5kLAogCS5yZXN1bWUJCT0gc2ExMTAwX3NlcmlhbF9yZXN1bWUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gInNhMTF4MC11YXJ0IiwKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgc2ExMTAwX3NlcmlhbF9pbml0KHZvaWQpCkBAIC05MTAsNyArOTEwLDcgQEAKIAogCXJldCA9IHVhcnRfcmVnaXN0ZXJfZHJpdmVyKCZzYTExMDBfcmVnKTsKIAlpZiAocmV0ID09IDApIHsKLQkJcmV0ID0gZHJpdmVyX3JlZ2lzdGVyKCZzYTExeDBfc2VyaWFsX2RyaXZlcik7CisJCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc2ExMXgwX3NlcmlhbF9kcml2ZXIpOwogCQlpZiAocmV0KQogCQkJdWFydF91bnJlZ2lzdGVyX2RyaXZlcigmc2ExMTAwX3JlZyk7CiAJfQpAQCAtOTE5LDcgKzkxOSw3IEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBzYTExMDBfc2VyaWFsX2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3Rlcigmc2ExMXgwX3NlcmlhbF9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzYTExeDBfc2VyaWFsX2RyaXZlcik7CiAJdWFydF91bnJlZ2lzdGVyX2RyaXZlcigmc2ExMTAwX3JlZyk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3ZyNDF4eF9zaXUuYyBiL2RyaXZlcnMvc2VyaWFsL3ZyNDF4eF9zaXUuYwppbmRleCAwMTY5NmIzLi44NjVkNGRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC92cjQxeHhfc2l1LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvdnI0MXh4X3NpdS5jCkBAIC05MjQsNyArOTI0LDcgQEAKIAkuY29ucwkJPSBTRVJJQUxfVlI0MVhYX0NPTlNPTEUsCiB9OwogCi1zdGF0aWMgaW50IHNpdV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHNpdV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHVhcnRfcG9ydCAqcG9ydDsKIAlpbnQgbnVtLCBpLCByZXR2YWw7CkBAIC05NDEsNyArOTQxLDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKIAkJcG9ydCA9ICZzaXVfdWFydF9wb3J0c1tpXTsKIAkJcG9ydC0+b3BzID0gJnNpdV91YXJ0X29wczsKLQkJcG9ydC0+ZGV2ID0gZGV2OworCQlwb3J0LT5kZXYgPSAmZGV2LT5kZXY7CiAKIAkJcmV0dmFsID0gdWFydF9hZGRfb25lX3BvcnQoJnNpdV91YXJ0X2RyaXZlciwgcG9ydCk7CiAJCWlmIChyZXR2YWwgPCAwKSB7CkBAIC05NTgsMTQgKzk1OCwxNCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNpdV9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBzaXVfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0OwogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IHNpdV91YXJ0X2RyaXZlci5ucjsgaSsrKSB7CiAJCXBvcnQgPSAmc2l1X3VhcnRfcG9ydHNbaV07Ci0JCWlmIChwb3J0LT5kZXYgPT0gZGV2KSB7CisJCWlmIChwb3J0LT5kZXYgPT0gJmRldi0+ZGV2KSB7CiAJCQl1YXJ0X3JlbW92ZV9vbmVfcG9ydCgmc2l1X3VhcnRfZHJpdmVyLCBwb3J0KTsKIAkJCXBvcnQtPmRldiA9IE5VTEw7CiAJCX0KQEAgLTk3Niw3ICs5NzYsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNpdV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBzaXVfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0OwogCWludCBpOwpAQCAtOTg0LDcgKzk4NCw3IEBACiAJZm9yIChpID0gMDsgaSA8IHNpdV91YXJ0X2RyaXZlci5ucjsgaSsrKSB7CiAJCXBvcnQgPSAmc2l1X3VhcnRfcG9ydHNbaV07CiAJCWlmICgocG9ydC0+dHlwZSA9PSBQT1JUX1ZSNDFYWF9TSVUgfHwKLQkJICAgICBwb3J0LT50eXBlID09IFBPUlRfVlI0MVhYX0RTSVUpICYmIHBvcnQtPmRldiA9PSBkZXYpCisJCSAgICAgcG9ydC0+dHlwZSA9PSBQT1JUX1ZSNDFYWF9EU0lVKSAmJiBwb3J0LT5kZXYgPT0gJmRldi0+ZGV2KQogCQkJdWFydF9zdXNwZW5kX3BvcnQoJnNpdV91YXJ0X2RyaXZlciwgcG9ydCk7CiAKIAl9CkBAIC05OTIsNyArOTkyLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzaXVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgc2l1X3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHVhcnRfcG9ydCAqcG9ydDsKIAlpbnQgaTsKQEAgLTEwMDAsNyArMTAwMCw3IEBACiAJZm9yIChpID0gMDsgaSA8IHNpdV91YXJ0X2RyaXZlci5ucjsgaSsrKSB7CiAJCXBvcnQgPSAmc2l1X3VhcnRfcG9ydHNbaV07CiAJCWlmICgocG9ydC0+dHlwZSA9PSBQT1JUX1ZSNDFYWF9TSVUgfHwKLQkJICAgICBwb3J0LT50eXBlID09IFBPUlRfVlI0MVhYX0RTSVUpICYmIHBvcnQtPmRldiA9PSBkZXYpCisJCSAgICAgcG9ydC0+dHlwZSA9PSBQT1JUX1ZSNDFYWF9EU0lVKSAmJiBwb3J0LT5kZXYgPT0gJmRldi0+ZGV2KQogCQkJdWFydF9yZXN1bWVfcG9ydCgmc2l1X3VhcnRfZHJpdmVyLCBwb3J0KTsKIAl9CiAKQEAgLTEwMDksMTMgKzEwMDksMTQgQEAKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNpdV9wbGF0Zm9ybV9kZXZpY2U7CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBzaXVfZGV2aWNlX2RyaXZlciA9IHsKLQkubmFtZQkJPSAiU0lVIiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNpdV9kZXZpY2VfZHJpdmVyID0gewogCS5wcm9iZQkJPSBzaXVfcHJvYmUsCiAJLnJlbW92ZQkJPSBzaXVfcmVtb3ZlLAogCS5zdXNwZW5kCT0gc2l1X3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBzaXVfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJTSVUiLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCB2cjQxeHhfc2l1X2luaXQodm9pZCkKQEAgLTEwMjYsNyArMTAyNyw3IEBACiAJaWYgKElTX0VSUihzaXVfcGxhdGZvcm1fZGV2aWNlKSkKIAkJcmV0dXJuIFBUUl9FUlIoc2l1X3BsYXRmb3JtX2RldmljZSk7CiAKLQlyZXR2YWwgPSBkcml2ZXJfcmVnaXN0ZXIoJnNpdV9kZXZpY2VfZHJpdmVyKTsKKwlyZXR2YWwgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnNpdV9kZXZpY2VfZHJpdmVyKTsKIAlpZiAocmV0dmFsIDwgMCkKIAkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoc2l1X3BsYXRmb3JtX2RldmljZSk7CiAKQEAgLTEwMzUsNyArMTAzNiw3IEBACiAKIHN0YXRpYyB2b2lkIF9fZGV2ZXhpdCB2cjQxeHhfc2l1X2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3Rlcigmc2l1X2RldmljZV9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzaXVfZGV2aWNlX2RyaXZlcik7CiAKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihzaXVfcGxhdGZvcm1fZGV2aWNlKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGVsZXBob255L2l4ai5oIGIvZHJpdmVycy90ZWxlcGhvbnkvaXhqLmgKaW5kZXggNTFlM2Y3Zi4uZmJlYTQ1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy90ZWxlcGhvbnkvaXhqLmgKKysrIGIvZHJpdmVycy90ZWxlcGhvbnkvaXhqLmgKQEAgLTQwLDcgKzQwLDYgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNkZWZpbmUgSVhKX1ZFUlNJT04gMzAzMQogCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNpbmNsdWRlIDxsaW51eC9peGp1c2VyLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZHVtbXlfaGNkLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZHVtbXlfaGNkLmMKaW5kZXggOTc1YWNlMy4uMWU0MDc3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2R1bW15X2hjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9kdW1teV9oY2QuYwpAQCAtNDksNyArNDksNiBAQAogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxsaW51eC91c2JfZ2FkZ2V0Lmg+CkBAIC04OTcsNyArODk2LDcgQEAKICNlbmRpZgogfQogCi1zdGF0aWMgaW50IGR1bW15X3VkY19wcm9iZSAoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBkdW1teV91ZGNfcHJvYmUgKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZHVtbXkJKmR1bSA9IHRoZV9jb250cm9sbGVyOwogCWludAkJcmM7CkBAIC05MTAsNyArOTA5LDcgQEAKIAlkdW0tPmdhZGdldC5pc19vdGcgPSAoZHVtbXlfdG9faGNkKGR1bSktPnNlbGYub3RnX3BvcnQgIT0gMCk7CiAKIAlzdHJjcHkgKGR1bS0+Z2FkZ2V0LmRldi5idXNfaWQsICJnYWRnZXQiKTsKLQlkdW0tPmdhZGdldC5kZXYucGFyZW50ID0gZGV2OworCWR1bS0+Z2FkZ2V0LmRldi5wYXJlbnQgPSAmZGV2LT5kZXY7CiAJZHVtLT5nYWRnZXQuZGV2LnJlbGVhc2UgPSBkdW1teV9nYWRnZXRfcmVsZWFzZTsKIAlyYyA9IGRldmljZV9yZWdpc3RlciAoJmR1bS0+Z2FkZ2V0LmRldik7CiAJaWYgKHJjIDwgMCkKQEAgLTkyMCwyNiArOTE5LDI2IEBACiAJdXNiX2J1c19nZXQgKCZkdW1teV90b19oY2QgKGR1bSktPnNlbGYpOwogI2VuZGlmCiAKLQlkZXZfc2V0X2RydmRhdGEgKGRldiwgZHVtKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YSAoZGV2LCBkdW0pOwogCWRldmljZV9jcmVhdGVfZmlsZSAoJmR1bS0+Z2FkZ2V0LmRldiwgJmRldl9hdHRyX2Z1bmN0aW9uKTsKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyBpbnQgZHVtbXlfdWRjX3JlbW92ZSAoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBkdW1teV91ZGNfcmVtb3ZlIChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGR1bW15CSpkdW0gPSBkZXZfZ2V0X2RydmRhdGEgKGRldik7CisJc3RydWN0IGR1bW15CSpkdW0gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YSAoZGV2KTsKIAotCWRldl9zZXRfZHJ2ZGF0YSAoZGV2LCBOVUxMKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YSAoZGV2LCBOVUxMKTsKIAlkZXZpY2VfcmVtb3ZlX2ZpbGUgKCZkdW0tPmdhZGdldC5kZXYsICZkZXZfYXR0cl9mdW5jdGlvbik7CiAJZGV2aWNlX3VucmVnaXN0ZXIgKCZkdW0tPmdhZGdldC5kZXYpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGR1bW15X3VkY19zdXNwZW5kIChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgZHVtbXlfdWRjX3N1c3BlbmQgKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCXN0cnVjdCBkdW1teQkqZHVtID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGR1bW15CSpkdW0gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCi0JZGV2X2RiZyAoZGV2LCAiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisJZGV2X2RiZyAoJmRldi0+ZGV2LCAiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CiAJc3Bpbl9sb2NrX2lycSAoJmR1bS0+bG9jayk7CiAJZHVtLT51ZGNfc3VzcGVuZGVkID0gMTsKIAlzZXRfbGlua19zdGF0ZSAoZHVtKTsKQEAgLTk1MCwyOSArOTQ5LDMwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZHVtbXlfdWRjX3Jlc3VtZSAoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBkdW1teV91ZGNfcmVzdW1lIChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGR1bW15CSpkdW0gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZHVtbXkJKmR1bSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKLQlkZXZfZGJnIChkZXYsICIlc1xuIiwgX19GVU5DVElPTl9fKTsKKwlkZXZfZGJnICgmZGV2LT5kZXYsICIlc1xuIiwgX19GVU5DVElPTl9fKTsKIAlzcGluX2xvY2tfaXJxICgmZHVtLT5sb2NrKTsKIAlkdW0tPnVkY19zdXNwZW5kZWQgPSAwOwogCXNldF9saW5rX3N0YXRlIChkdW0pOwogCXNwaW5fdW5sb2NrX2lycSAoJmR1bS0+bG9jayk7CiAKLQlkZXYtPnBvd2VyLnBvd2VyX3N0YXRlID0gUE1TR19PTjsKKwlkZXYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IFBNU0dfT047CiAJdXNiX2hjZF9wb2xsX3JoX3N0YXR1cyAoZHVtbXlfdG9faGNkIChkdW0pKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGR1bW15X3VkY19kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gKGNoYXIgKikgZ2FkZ2V0X25hbWUsCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZHVtbXlfdWRjX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gZHVtbXlfdWRjX3Byb2JlLAogCS5yZW1vdmUJCT0gZHVtbXlfdWRjX3JlbW92ZSwKIAkuc3VzcGVuZAk9IGR1bW15X3VkY19zdXNwZW5kLAogCS5yZXN1bWUJCT0gZHVtbXlfdWRjX3Jlc3VtZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAoY2hhciAqKSBnYWRnZXRfbmFtZSwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKIH07CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0xODk5LDE0ICsxODk5LDE0IEBACiAJLmJ1c19yZXN1bWUgPQkJZHVtbXlfYnVzX3Jlc3VtZSwKIH07CiAKLXN0YXRpYyBpbnQgZHVtbXlfaGNkX3Byb2JlIChzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGR1bW15X2hjZF9wcm9iZSAoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCB1c2JfaGNkCQkqaGNkOwogCWludAkJCXJldHZhbDsKIAogCWRldl9pbmZvIChkZXYsICIlcywgZHJpdmVyICIgRFJJVkVSX1ZFUlNJT04gIlxuIiwgZHJpdmVyX2Rlc2MpOwogCi0JaGNkID0gdXNiX2NyZWF0ZV9oY2QgKCZkdW1teV9oY2QsIGRldiwgZGV2LT5idXNfaWQpOworCWhjZCA9IHVzYl9jcmVhdGVfaGNkICgmZHVtbXlfaGNkLCAmZGV2LT5kZXYsIGRldi0+ZGV2LmJ1c19pZCk7CiAJaWYgKCFoY2QpCiAJCXJldHVybiAtRU5PTUVNOwogCXRoZV9jb250cm9sbGVyID0gaGNkX3RvX2R1bW15IChoY2QpOwpAQCAtMTkxOSw0OCArMTkxOSw0OSBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLXN0YXRpYyBpbnQgZHVtbXlfaGNkX3JlbW92ZSAoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBkdW1teV9oY2RfcmVtb3ZlIChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHVzYl9oY2QJCSpoY2Q7CiAKLQloY2QgPSBkZXZfZ2V0X2RydmRhdGEgKGRldik7CisJaGNkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEgKGRldik7CiAJdXNiX3JlbW92ZV9oY2QgKGhjZCk7CiAJdXNiX3B1dF9oY2QgKGhjZCk7CiAJdGhlX2NvbnRyb2xsZXIgPSBOVUxMOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGR1bW15X2hjZF9zdXNwZW5kIChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgZHVtbXlfaGNkX3N1c3BlbmQgKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVjdCB1c2JfaGNkCQkqaGNkOwogCi0JZGV2X2RiZyAoZGV2LCAiJXNcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JaGNkID0gZGV2X2dldF9kcnZkYXRhIChkZXYpOworCWRldl9kYmcgKCZkZXYtPmRldiwgIiVzXG4iLCBfX0ZVTkNUSU9OX18pOworCWhjZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhIChkZXYpOwogCiAJaGNkLT5zdGF0ZSA9IEhDX1NUQVRFX1NVU1BFTkRFRDsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBkdW1teV9oY2RfcmVzdW1lIChzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGR1bW15X2hjZF9yZXN1bWUgKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgdXNiX2hjZAkJKmhjZDsKIAotCWRldl9kYmcgKGRldiwgIiVzXG4iLCBfX0ZVTkNUSU9OX18pOwotCWhjZCA9IGRldl9nZXRfZHJ2ZGF0YSAoZGV2KTsKKwlkZXZfZGJnICgmZGV2LT5kZXYsICIlc1xuIiwgX19GVU5DVElPTl9fKTsKKwloY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YSAoZGV2KTsKIAloY2QtPnN0YXRlID0gSENfU1RBVEVfUlVOTklORzsKIAogCXVzYl9oY2RfcG9sbF9yaF9zdGF0dXMgKGhjZCk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBkdW1teV9oY2RfZHJpdmVyID0gewotCS5uYW1lCQk9IChjaGFyICopIGRyaXZlcl9uYW1lLAotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGR1bW15X2hjZF9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IGR1bW15X2hjZF9wcm9iZSwKIAkucmVtb3ZlCQk9IGR1bW15X2hjZF9yZW1vdmUsCiAJLnN1c3BlbmQJPSBkdW1teV9oY2Rfc3VzcGVuZCwKIAkucmVzdW1lCQk9IGR1bW15X2hjZF9yZXN1bWUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gKGNoYXIgKikgZHJpdmVyX25hbWUsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCiB9OwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMTk5NiwxMSArMTk5NywxMSBAQAogCWlmICh1c2JfZGlzYWJsZWQgKCkpCiAJCXJldHVybiAtRU5PREVWOwogCi0JcmV0dmFsID0gZHJpdmVyX3JlZ2lzdGVyICgmZHVtbXlfaGNkX2RyaXZlcik7CisJcmV0dmFsID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyICgmZHVtbXlfaGNkX2RyaXZlcik7CiAJaWYgKHJldHZhbCA8IDApCiAJCXJldHVybiByZXR2YWw7CiAKLQlyZXR2YWwgPSBkcml2ZXJfcmVnaXN0ZXIgKCZkdW1teV91ZGNfZHJpdmVyKTsKKwlyZXR2YWwgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIgKCZkdW1teV91ZGNfZHJpdmVyKTsKIAlpZiAocmV0dmFsIDwgMCkKIAkJZ290byBlcnJfcmVnaXN0ZXJfdWRjX2RyaXZlcjsKIApAQCAtMjAxNiw5ICsyMDE3LDkgQEAKIGVycl9yZWdpc3Rlcl91ZGM6CiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIgKCZ0aGVfaGNkX3BkZXYpOwogZXJyX3JlZ2lzdGVyX2hjZDoKLQlkcml2ZXJfdW5yZWdpc3RlciAoJmR1bW15X3VkY19kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyICgmZHVtbXlfdWRjX2RyaXZlcik7CiBlcnJfcmVnaXN0ZXJfdWRjX2RyaXZlcjoKLQlkcml2ZXJfdW5yZWdpc3RlciAoJmR1bW15X2hjZF9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyICgmZHVtbXlfaGNkX2RyaXZlcik7CiAJcmV0dXJuIHJldHZhbDsKIH0KIG1vZHVsZV9pbml0IChpbml0KTsKQEAgLTIwMjcsNyArMjAyOCw3IEBACiB7CiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIgKCZ0aGVfdWRjX3BkZXYpOwogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyICgmdGhlX2hjZF9wZGV2KTsKLQlkcml2ZXJfdW5yZWdpc3RlciAoJmR1bW15X3VkY19kcml2ZXIpOwotCWRyaXZlcl91bnJlZ2lzdGVyICgmZHVtbXlfaGNkX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIgKCZkdW1teV91ZGNfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlciAoJmR1bW15X2hjZF9kcml2ZXIpOwogfQogbW9kdWxlX2V4aXQgKGNsZWFudXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2dva3VfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZ29rdV91ZGMuYwppbmRleCA2NTQ0Njk3Li5iMGYzY2Q2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZ29rdV91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZ29rdV91ZGMuYwpAQCAtMTk3MCw3ICsxOTcwLDYgQEAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBnb2t1X3BjaV9kcml2ZXIgPSB7CiAJLm5hbWUgPQkJKGNoYXIgKikgZHJpdmVyX25hbWUsCiAJLmlkX3RhYmxlID0JcGNpX2lkcywKLQkub3duZXIgPQlUSElTX01PRFVMRSwKIAogCS5wcm9iZSA9CWdva3VfcHJvYmUsCiAJLnJlbW92ZSA9CWdva3VfcmVtb3ZlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2xoN2E0MHhfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbGg3YTQweF91ZGMuYwppbmRleCBiYzYyNjlmLi5lMDJmZWE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvbGg3YTQweF91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbGg3YTQweF91ZGMuYwpAQCAtMjA4NSwyMSArMjA4NSwyMSBAQAogLyoKICAqIAlwcm9iZSAtIGJpbmRzIHRvIHRoZSBwbGF0Zm9ybSBkZXZpY2UKICAqLwotc3RhdGljIGludCBsaDdhNDB4X3VkY19wcm9iZShzdHJ1Y3QgZGV2aWNlICpfZGV2KQorc3RhdGljIGludCBsaDdhNDB4X3VkY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBsaDdhNDB4X3VkYyAqZGV2ID0gJm1lbW9yeTsKIAlpbnQgcmV0dmFsOwogCi0JREVCVUcoIiVzOiAlcFxuIiwgX19GVU5DVElPTl9fLCBfZGV2KTsKKwlERUJVRygiJXM6ICVwXG4iLCBfX0ZVTkNUSU9OX18sIHBkZXYpOwogCiAJc3Bpbl9sb2NrX2luaXQoJmRldi0+bG9jayk7Ci0JZGV2LT5kZXYgPSBfZGV2OworCWRldi0+ZGV2ID0gJnBkZXYtPmRldjsKIAogCWRldmljZV9pbml0aWFsaXplKCZkZXYtPmdhZGdldC5kZXYpOwotCWRldi0+Z2FkZ2V0LmRldi5wYXJlbnQgPSBfZGV2OworCWRldi0+Z2FkZ2V0LmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OwogCiAJdGhlX2NvbnRyb2xsZXIgPSBkZXY7Ci0JZGV2X3NldF9kcnZkYXRhKF9kZXYsIGRldik7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZGV2KTsKIAogCXVkY19kaXNhYmxlKGRldik7CiAJdWRjX3JlaW5pdChkZXYpOwpAQCAtMjExOSwxMSArMjExOSwxMSBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLXN0YXRpYyBpbnQgbGg3YTQweF91ZGNfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKl9kZXYpCitzdGF0aWMgaW50IGxoN2E0MHhfdWRjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBsaDdhNDB4X3VkYyAqZGV2ID0gX2Rldi0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGxoN2E0MHhfdWRjICpkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAotCURFQlVHKCIlczogJXBcbiIsIF9fRlVOQ1RJT05fXywgZGV2KTsKKwlERUJVRygiJXM6ICVwXG4iLCBfX0ZVTkNUSU9OX18sIHBkZXYpOwogCiAJdWRjX2Rpc2FibGUoZGV2KTsKIAlyZW1vdmVfcHJvY19maWxlcygpOwpAQCAtMjEzMSw3ICsyMTMxLDcgQEAKIAogCWZyZWVfaXJxKElSUV9VU0JJTlRSLCBkZXYpOwogCi0JZGV2X3NldF9kcnZkYXRhKF9kZXYsIDApOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIDApOwogCiAJdGhlX2NvbnRyb2xsZXIgPSAwOwogCkBAIC0yMTQwLDI2ICsyMTQwLDI3IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciB1ZGNfZHJpdmVyID0gewotCS5uYW1lID0gKGNoYXIgKilkcml2ZXJfbmFtZSwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKLQkuYnVzID0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdWRjX2RyaXZlciA9IHsKIAkucHJvYmUgPSBsaDdhNDB4X3VkY19wcm9iZSwKIAkucmVtb3ZlID0gbGg3YTQweF91ZGNfcmVtb3ZlCiAJICAgIC8qIEZJWE1FIHBvd2VyIG1hbmFnZW1lbnQgc3VwcG9ydCAqLwogCSAgICAvKiAuc3VzcGVuZCA9IC4uLiBkaXNhYmxlIFVEQyAqLwogCSAgICAvKiAucmVzdW1lID0gLi4uIHJlLWVuYWJsZSBVREMgKi8KKwkuZHJpdmVyCT0geworCQkubmFtZSA9IChjaGFyICopZHJpdmVyX25hbWUsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCB1ZGNfaW5pdCh2b2lkKQogewogCURFQlVHKCIlczogJXMgdmVyc2lvbiAlc1xuIiwgX19GVU5DVElPTl9fLCBkcml2ZXJfbmFtZSwgRFJJVkVSX1ZFUlNJT04pOwotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJnVkY19kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnVkY19kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgdWRjX2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmdWRjX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnVkY19kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdCh1ZGNfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvbGg3YTQweF91ZGMuaCBiL2RyaXZlcnMvdXNiL2dhZGdldC9saDdhNDB4X3VkYy5oCmluZGV4IDFiYjQ1NWMuLjliMmU2ZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9saDdhNDB4X3VkYy5oCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9saDdhNDB4X3VkYy5oCkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvbmV0MjI4MC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L25ldDIyODAuYwppbmRleCAwZGM2YmIwLi5jMzJlMWY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvbmV0MjI4MC5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9uZXQyMjgwLmMKQEAgLTI5NDgsNyArMjk0OCw2IEBACiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbmV0MjI4MF9wY2lfZHJpdmVyID0gewogCS5uYW1lID0JCShjaGFyICopIGRyaXZlcl9uYW1lLAogCS5pZF90YWJsZSA9CXBjaV9pZHMsCi0JLm93bmVyID0JVEhJU19NT0RVTEUsCiAKIAkucHJvYmUgPQluZXQyMjgwX3Byb2JlLAogCS5yZW1vdmUgPQluZXQyMjgwX3JlbW92ZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9vbWFwX3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L29tYXBfdWRjLmMKaW5kZXggMzg3NjkyYS4uYTg5NzJkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L29tYXBfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L29tYXBfdWRjLmMKQEAgLTI3MDcsMTggKzI3MDcsMTcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBfX2luaXQgb21hcF91ZGNfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBfX2luaXQgb21hcF91ZGNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCSpvZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJaW50CQkJc3RhdHVzID0gLUVOT0RFVjsKIAlpbnQJCQlobWM7CiAJc3RydWN0IG90Z190cmFuc2NlaXZlcgkqeGNlaXYgPSBOVUxMOwogCWNvbnN0IGNoYXIJCSp0eXBlID0gTlVMTDsKLQlzdHJ1Y3Qgb21hcF91c2JfY29uZmlnCSpjb25maWcgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IG9tYXBfdXNiX2NvbmZpZwkqY29uZmlnID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAKIAkvKiBOT1RFOiAgImtub3dzIiB0aGUgb3JkZXIgb2YgdGhlIHJlc291cmNlcyEgKi8KLQlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihvZGV2LT5yZXNvdXJjZVswXS5zdGFydCwgCi0JCQlvZGV2LT5yZXNvdXJjZVswXS5lbmQgLSBvZGV2LT5yZXNvdXJjZVswXS5zdGFydCArIDEsCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocGRldi0+cmVzb3VyY2VbMF0uc3RhcnQsIAorCQkJcGRldi0+cmVzb3VyY2VbMF0uZW5kIC0gcGRldi0+cmVzb3VyY2VbMF0uc3RhcnQgKyAxLAogCQkJZHJpdmVyX25hbWUpKSB7CiAJCURCRygicmVxdWVzdF9tZW1fcmVnaW9uIGZhaWxlZFxuIik7CiAJCXJldHVybiAtRUJVU1k7CkBAIC0yODAzLDcgKzI4MDIsNyBAQAogCUlORk8oImhtYyBtb2RlICVkLCAlcyB0cmFuc2NlaXZlclxuIiwgaG1jLCB0eXBlKTsKIAogCS8qIGEgImdhZGdldCIgYWJzdHJhY3RzL3ZpcnR1YWxpemVzIHRoZSBjb250cm9sbGVyICovCi0Jc3RhdHVzID0gb21hcF91ZGNfc2V0dXAob2RldiwgeGNlaXYpOworCXN0YXR1cyA9IG9tYXBfdWRjX3NldHVwKHBkZXYsIHhjZWl2KTsKIAlpZiAoc3RhdHVzKSB7CiAJCWdvdG8gY2xlYW51cDA7CiAJfQpAQCAtMjgyMSwyOCArMjgyMCwyOCBAQAogCQl1ZGMtPmNscl9oYWx0ID0gVURDX1JFU0VUX0VQOwogCiAJLyogVVNCIGdlbmVyYWwgcHVycG9zZSBJUlE6ICBlcDAsIHN0YXRlIGNoYW5nZXMsIGRtYSwgZXRjICovCi0Jc3RhdHVzID0gcmVxdWVzdF9pcnEob2Rldi0+cmVzb3VyY2VbMV0uc3RhcnQsIG9tYXBfdWRjX2lycSwKKwlzdGF0dXMgPSByZXF1ZXN0X2lycShwZGV2LT5yZXNvdXJjZVsxXS5zdGFydCwgb21hcF91ZGNfaXJxLAogCQkJU0FfU0FNUExFX1JBTkRPTSwgZHJpdmVyX25hbWUsIHVkYyk7CiAJaWYgKHN0YXR1cyAhPSAwKSB7CiAJCUVSUiggImNhbid0IGdldCBpcnEgJWxkLCBlcnIgJWRcbiIsCi0JCQlvZGV2LT5yZXNvdXJjZVsxXS5zdGFydCwgc3RhdHVzKTsKKwkJCXBkZXYtPnJlc291cmNlWzFdLnN0YXJ0LCBzdGF0dXMpOwogCQlnb3RvIGNsZWFudXAxOwogCX0KIAogCS8qIFVTQiAibm9uLWlzbyIgSVJRIChQSU8gZm9yIGFsbCBidXQgZXAwKSAqLwotCXN0YXR1cyA9IHJlcXVlc3RfaXJxKG9kZXYtPnJlc291cmNlWzJdLnN0YXJ0LCBvbWFwX3VkY19waW9faXJxLAorCXN0YXR1cyA9IHJlcXVlc3RfaXJxKHBkZXYtPnJlc291cmNlWzJdLnN0YXJ0LCBvbWFwX3VkY19waW9faXJxLAogCQkJU0FfU0FNUExFX1JBTkRPTSwgIm9tYXBfdWRjIHBpbyIsIHVkYyk7CiAJaWYgKHN0YXR1cyAhPSAwKSB7CiAJCUVSUiggImNhbid0IGdldCBpcnEgJWxkLCBlcnIgJWRcbiIsCi0JCQlvZGV2LT5yZXNvdXJjZVsyXS5zdGFydCwgc3RhdHVzKTsKKwkJCXBkZXYtPnJlc291cmNlWzJdLnN0YXJ0LCBzdGF0dXMpOwogCQlnb3RvIGNsZWFudXAyOwogCX0KICNpZmRlZglVU0VfSVNPCi0Jc3RhdHVzID0gcmVxdWVzdF9pcnEob2Rldi0+cmVzb3VyY2VbM10uc3RhcnQsIG9tYXBfdWRjX2lzb19pcnEsCisJc3RhdHVzID0gcmVxdWVzdF9pcnEocGRldi0+cmVzb3VyY2VbM10uc3RhcnQsIG9tYXBfdWRjX2lzb19pcnEsCiAJCQlTQV9JTlRFUlJVUFQsICJvbWFwX3VkYyBpc28iLCB1ZGMpOwogCWlmIChzdGF0dXMgIT0gMCkgewogCQlFUlIoImNhbid0IGdldCBpcnEgJWxkLCBlcnIgJWRcbiIsCi0JCQlvZGV2LT5yZXNvdXJjZVszXS5zdGFydCwgc3RhdHVzKTsKKwkJCXBkZXYtPnJlc291cmNlWzNdLnN0YXJ0LCBzdGF0dXMpOwogCQlnb3RvIGNsZWFudXAzOwogCX0KICNlbmRpZgpAQCAtMjg1MywxMSArMjg1MiwxMSBAQAogCiAjaWZkZWYJVVNFX0lTTwogY2xlYW51cDM6Ci0JZnJlZV9pcnEob2Rldi0+cmVzb3VyY2VbMl0uc3RhcnQsIHVkYyk7CisJZnJlZV9pcnEocGRldi0+cmVzb3VyY2VbMl0uc3RhcnQsIHVkYyk7CiAjZW5kaWYKIAogY2xlYW51cDI6Ci0JZnJlZV9pcnEob2Rldi0+cmVzb3VyY2VbMV0uc3RhcnQsIHVkYyk7CisJZnJlZV9pcnEocGRldi0+cmVzb3VyY2VbMV0uc3RhcnQsIHVkYyk7CiAKIGNsZWFudXAxOgogCWtmcmVlICh1ZGMpOwpAQCAtMjg2NiwxNCArMjg2NSwxMyBAQAogY2xlYW51cDA6CiAJaWYgKHhjZWl2KQogCQlwdXRfZGV2aWNlKHhjZWl2LT5kZXYpOwotCXJlbGVhc2VfbWVtX3JlZ2lvbihvZGV2LT5yZXNvdXJjZVswXS5zdGFydCwKLQkJCW9kZXYtPnJlc291cmNlWzBdLmVuZCAtIG9kZXYtPnJlc291cmNlWzBdLnN0YXJ0ICsgMSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKHBkZXYtPnJlc291cmNlWzBdLnN0YXJ0LAorCQkJcGRldi0+cmVzb3VyY2VbMF0uZW5kIC0gcGRldi0+cmVzb3VyY2VbMF0uc3RhcnQgKyAxKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCi1zdGF0aWMgaW50IF9fZXhpdCBvbWFwX3VkY19yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBfX2V4aXQgb21hcF91ZGNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZQkqb2RldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCURFQ0xBUkVfQ09NUExFVElPTihkb25lKTsKIAogCWlmICghdWRjKQpAQCAtMjg5MSwxMyArMjg4OSwxMyBAQAogCXJlbW92ZV9wcm9jX2ZpbGUoKTsKIAogI2lmZGVmCVVTRV9JU08KLQlmcmVlX2lycShvZGV2LT5yZXNvdXJjZVszXS5zdGFydCwgdWRjKTsKKwlmcmVlX2lycShwZGV2LT5yZXNvdXJjZVszXS5zdGFydCwgdWRjKTsKICNlbmRpZgotCWZyZWVfaXJxKG9kZXYtPnJlc291cmNlWzJdLnN0YXJ0LCB1ZGMpOwotCWZyZWVfaXJxKG9kZXYtPnJlc291cmNlWzFdLnN0YXJ0LCB1ZGMpOworCWZyZWVfaXJxKHBkZXYtPnJlc291cmNlWzJdLnN0YXJ0LCB1ZGMpOworCWZyZWVfaXJxKHBkZXYtPnJlc291cmNlWzFdLnN0YXJ0LCB1ZGMpOwogCi0JcmVsZWFzZV9tZW1fcmVnaW9uKG9kZXYtPnJlc291cmNlWzBdLnN0YXJ0LAotCQkJb2Rldi0+cmVzb3VyY2VbMF0uZW5kIC0gb2Rldi0+cmVzb3VyY2VbMF0uc3RhcnQgKyAxKTsKKwlyZWxlYXNlX21lbV9yZWdpb24ocGRldi0+cmVzb3VyY2VbMF0uc3RhcnQsCisJCQlwZGV2LT5yZXNvdXJjZVswXS5lbmQgLSBwZGV2LT5yZXNvdXJjZVswXS5zdGFydCArIDEpOwogCiAJZGV2aWNlX3VucmVnaXN0ZXIoJnVkYy0+Z2FkZ2V0LmRldik7CiAJd2FpdF9mb3JfY29tcGxldGlvbigmZG9uZSk7CkBAIC0yOTE1LDcgKzI5MTMsNyBAQAogICogbWF5IGludm9sdmUgdGFsa2luZyB0byBhbiBleHRlcm5hbCB0cmFuc2NlaXZlciAoZS5nLiBpc3AxMzAxKS4KICAqLwogCi1zdGF0aWMgaW50IG9tYXBfdWRjX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3QgbWVzc2FnZSkKK3N0YXRpYyBpbnQgb21hcF91ZGNfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKQogewogCXUzMglkZXZzdGF0OwogCkBAIC0yOTM1LDcgKzI5MzMsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG9tYXBfdWRjX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IG9tYXBfdWRjX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJREJHKCJyZXN1bWUgKyB3YWtldXAvU1JQXG4iKTsKIAlvbWFwX3B1bGx1cCgmdWRjLT5nYWRnZXQsIDEpOwpAQCAtMjk0NywxNCArMjk0NSwxNSBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgdWRjX2RyaXZlciA9IHsKLQkubmFtZQkJPSAoY2hhciAqKSBkcml2ZXJfbmFtZSwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB1ZGNfZHJpdmVyID0gewogCS5wcm9iZQkJPSBvbWFwX3VkY19wcm9iZSwKIAkucmVtb3ZlCQk9IF9fZXhpdF9wKG9tYXBfdWRjX3JlbW92ZSksCiAJLnN1c3BlbmQJPSBvbWFwX3VkY19zdXNwZW5kLAogCS5yZXN1bWUJCT0gb21hcF91ZGNfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLm5hbWUJPSAoY2hhciAqKSBkcml2ZXJfbmFtZSwKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgdWRjX2luaXQodm9pZCkKQEAgLTI5NjUsMTMgKzI5NjQsMTMgQEAKICNlbmRpZgogCQkiJXNcbiIsIGRyaXZlcl9kZXNjLAogCQl1c2VfZG1hID8gICIgKGRtYSkiIDogIiIpOwotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJnVkY19kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnVkY19kcml2ZXIpOwogfQogbW9kdWxlX2luaXQodWRjX2luaXQpOwogCiBzdGF0aWMgdm9pZCBfX2V4aXQgdWRjX2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmdWRjX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnVkY19kcml2ZXIpOwogfQogbW9kdWxlX2V4aXQodWRjX2V4aXQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMnh4X3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTJ4eF91ZGMuYwppbmRleCBlZTljZDc4Li5iYjAyOGM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMnh4X3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyeHhfdWRjLmMKQEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KQEAgLTI0MzMsNyArMjQzMiw3IEBACiAvKgogICogCXByb2JlIC0gYmluZHMgdG8gdGhlIHBsYXRmb3JtIGRldmljZQogICovCi1zdGF0aWMgaW50IF9faW5pdCBweGEyeHhfdWRjX3Byb2JlKHN0cnVjdCBkZXZpY2UgKl9kZXYpCitzdGF0aWMgaW50IF9faW5pdCBweGEyeHhfdWRjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHB4YTJ4eF91ZGMgKmRldiA9ICZtZW1vcnk7CiAJaW50IHJldHZhbCwgb3V0X2RtYSA9IDE7CkBAIC0yNDk2LDE5ICsyNDk1LDE5IEBACiAjZW5kaWYKIAogCS8qIG90aGVyIG5vbi1zdGF0aWMgcGFydHMgb2YgaW5pdCAqLwotCWRldi0+ZGV2ID0gX2RldjsKLQlkZXYtPm1hY2ggPSBfZGV2LT5wbGF0Zm9ybV9kYXRhOworCWRldi0+ZGV2ID0gJnBkZXYtPmRldjsKKwlkZXYtPm1hY2ggPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAogCWluaXRfdGltZXIoJmRldi0+dGltZXIpOwogCWRldi0+dGltZXIuZnVuY3Rpb24gPSB1ZGNfd2F0Y2hkb2c7CiAJZGV2LT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGRldjsKIAogCWRldmljZV9pbml0aWFsaXplKCZkZXYtPmdhZGdldC5kZXYpOwotCWRldi0+Z2FkZ2V0LmRldi5wYXJlbnQgPSBfZGV2OwotCWRldi0+Z2FkZ2V0LmRldi5kbWFfbWFzayA9IF9kZXYtPmRtYV9tYXNrOworCWRldi0+Z2FkZ2V0LmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OworCWRldi0+Z2FkZ2V0LmRldi5kbWFfbWFzayA9IHBkZXYtPmRldi5kbWFfbWFzazsKIAogCXRoZV9jb250cm9sbGVyID0gZGV2OwotCWRldl9zZXRfZHJ2ZGF0YShfZGV2LCBkZXYpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRldik7CiAKIAl1ZGNfZGlzYWJsZShkZXYpOwogCXVkY19yZWluaXQoZGV2KTsKQEAgLTI1NjAsMTQgKzI1NTksMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgcHhhMnh4X3VkY19zaHV0ZG93bihzdHJ1Y3QgZGV2aWNlICpfZGV2KQorc3RhdGljIHZvaWQgcHhhMnh4X3VkY19zaHV0ZG93bihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpfZGV2KQogewogCXB1bGx1cF9vZmYoKTsKIH0KIAotc3RhdGljIGludCBfX2V4aXQgcHhhMnh4X3VkY19yZW1vdmUoc3RydWN0IGRldmljZSAqX2RldikKK3N0YXRpYyBpbnQgX19leGl0IHB4YTJ4eF91ZGNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHB4YTJ4eF91ZGMgKmRldiA9IGRldl9nZXRfZHJ2ZGF0YShfZGV2KTsKKwlzdHJ1Y3QgcHhhMnh4X3VkYyAqZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKIAl1ZGNfZGlzYWJsZShkZXYpOwogCXJlbW92ZV9wcm9jX2ZpbGVzKCk7CkBAIC0yNTgxLDcgKzI1ODAsNyBAQAogCQlmcmVlX2lycShMVUJCT0NLX1VTQl9ESVNDX0lSUSwgZGV2KTsKIAkJZnJlZV9pcnEoTFVCQk9DS19VU0JfSVJRLCBkZXYpOwogCX0KLQlkZXZfc2V0X2RydmRhdGEoX2RldiwgTlVMTCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAJdGhlX2NvbnRyb2xsZXIgPSBOVUxMOwogCXJldHVybiAwOwogfQpAQCAtMjYwMiw5ICsyNjAxLDkgQEAKICAqIFZCVVMgSVJRcyBzaG91bGQgcHJvYmFibHkgYmUgaWdub3JlZCBzbyB0aGF0IHRoZSBQWEEgZGV2aWNlIGp1c3QgYWN0cwogICogImRlYWQiIHRvIFVTQiBob3N0cyB1bnRpbCBzeXN0ZW0gcmVzdW1lLgogICovCi1zdGF0aWMgaW50IHB4YTJ4eF91ZGNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgcHhhMnh4X3VkY19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCXN0cnVjdCBweGEyeHhfdWRjCSp1ZGMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgcHhhMnh4X3VkYwkqdWRjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAogCWlmICghdWRjLT5tYWNoLT51ZGNfY29tbWFuZCkKIAkJV0FSTigiVVNCIGhvc3Qgd29uJ3QgZGV0ZWN0IGRpc2Nvbm5lY3QhXG4iKTsKQEAgLTI2MTMsOSArMjYxMiw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcHhhMnh4X3VkY19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBweGEyeHhfdWRjX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHB4YTJ4eF91ZGMJKnVkYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBweGEyeHhfdWRjCSp1ZGMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJcHVsbHVwKHVkYywgMSk7CiAKQEAgLTI2MjksMjcgKzI2MjgsMjggQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHVkY19kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gInB4YTJ4eC11ZGMiLAotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHVkY19kcml2ZXIgPSB7CiAJLnByb2JlCQk9IHB4YTJ4eF91ZGNfcHJvYmUsCiAJLnNodXRkb3duCT0gcHhhMnh4X3VkY19zaHV0ZG93biwKIAkucmVtb3ZlCQk9IF9fZXhpdF9wKHB4YTJ4eF91ZGNfcmVtb3ZlKSwKIAkuc3VzcGVuZAk9IHB4YTJ4eF91ZGNfc3VzcGVuZCwKIAkucmVzdW1lCQk9IHB4YTJ4eF91ZGNfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLm5hbWUJPSAicHhhMnh4LXVkYyIsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHVkY19pbml0KHZvaWQpCiB7CiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHZlcnNpb24gJXNcbiIsIGRyaXZlcl9uYW1lLCBEUklWRVJfVkVSU0lPTik7Ci0JcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmdWRjX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmdWRjX2RyaXZlcik7CiB9CiBtb2R1bGVfaW5pdCh1ZGNfaW5pdCk7CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCB1ZGNfZXhpdCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZ1ZGNfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdWRjX2RyaXZlcik7CiB9CiBtb2R1bGVfZXhpdCh1ZGNfZXhpdCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9ybmRpcy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3JuZGlzLmMKaW5kZXggMDZiNmViYS4uOTY4OWVmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3JuZGlzLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3JuZGlzLmMKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLXBjaS5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXBjaS5jCmluZGV4IDE0NTAwODguLmRmZDliZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1wY2kuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcGNpLmMKQEAgLTM4Myw3ICszODMsNiBAQAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGVoY2lfcGNpX2RyaXZlciA9IHsKIAkubmFtZSA9CQkoY2hhciAqKSBoY2RfbmFtZSwKIAkuaWRfdGFibGUgPQlwY2lfaWRzLAotCS5vd25lciA9IAlUSElTX01PRFVMRSwKIAogCS5wcm9iZSA9CXVzYl9oY2RfcGNpX3Byb2JlLAogCS5yZW1vdmUgPQl1c2JfaGNkX3BjaV9yZW1vdmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2hjX2NyaXN2MTAuYyBiL2RyaXZlcnMvdXNiL2hvc3QvaGNfY3Jpc3YxMC5jCmluZGV4IGE4MjY3Y2YuLjBlYWFiZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvaGNfY3Jpc3YxMC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvaGNfY3Jpc3YxMC5jCkBAIC0xNCw3ICsxNCw2IEBACiAjaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9pc3AxMTZ4LWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9pc3AxMTZ4LWhjZC5jCmluZGV4IGY5YzNmNWIuLjgyZjY0OTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTE2eC1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDExNngtaGNkLmMKQEAgLTE2MzMsMTcgKzE2MzMsMTUgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIGludCBfX2luaXRfb3JfbW9kdWxlIGlzcDExNnhfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19pbml0X29yX21vZHVsZSBpc3AxMTZ4X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IGlzcDExNnggKmlzcDExNng7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAogCWlmICghaGNkKQogCQlyZXR1cm4gMDsKIAlpc3AxMTZ4ID0gaGNkX3RvX2lzcDExNngoaGNkKTsKLQlwZGV2ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHBsYXRmb3JtX2RldmljZSwgZGV2KTsKIAlyZW1vdmVfZGVidWdfZmlsZShpc3AxMTZ4KTsKIAl1c2JfcmVtb3ZlX2hjZChoY2QpOwogCkBAIC0xNjYwLDE4ICsxNjU4LDE2IEBACiAKICNkZWZpbmUgcmVzb3VyY2VfbGVuKHIpICgoKHIpLT5lbmQgLSAociktPnN0YXJ0KSArIDEpCiAKLXN0YXRpYyBpbnQgX19pbml0IGlzcDExNnhfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBfX2luaXQgaXNwMTE2eF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCB1c2JfaGNkICpoY2Q7CiAJc3RydWN0IGlzcDExNnggKmlzcDExNng7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKIAlzdHJ1Y3QgcmVzb3VyY2UgKmFkZHIsICpkYXRhOwogCXZvaWQgX19pb21lbSAqYWRkcl9yZWc7CiAJdm9pZCBfX2lvbWVtICpkYXRhX3JlZzsKIAlpbnQgaXJxOwogCWludCByZXQgPSAwOwogCi0JcGRldiA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UsIGRldik7CiAJaWYgKHBkZXYtPm51bV9yZXNvdXJjZXMgPCAzKSB7CiAJCXJldCA9IC1FTk9ERVY7CiAJCWdvdG8gZXJyMTsKQEAgLTE2ODUsNyArMTY4MSw3IEBACiAJCWdvdG8gZXJyMTsKIAl9CiAKLQlpZiAoZGV2LT5kbWFfbWFzaykgeworCWlmIChwZGV2LT5kZXYuZG1hX21hc2spIHsKIAkJREJHKCJETUEgbm90IHN1cHBvcnRlZFxuIik7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gZXJyMTsKQEAgLTE3MTEsNyArMTcwNyw3IEBACiAJfQogCiAJLyogYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgaGNkICovCi0JaGNkID0gdXNiX2NyZWF0ZV9oY2QoJmlzcDExNnhfaGNfZHJpdmVyLCBkZXYsIGRldi0+YnVzX2lkKTsKKwloY2QgPSB1c2JfY3JlYXRlX2hjZCgmaXNwMTE2eF9oY19kcml2ZXIsICZwZGV2LT5kZXYsIHBkZXYtPmRldi5idXNfaWQpOwogCWlmICghaGNkKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyNTsKQEAgLTE3MjMsNyArMTcxOSw3IEBACiAJaXNwMTE2eC0+YWRkcl9yZWcgPSBhZGRyX3JlZzsKIAlzcGluX2xvY2tfaW5pdCgmaXNwMTE2eC0+bG9jayk7CiAJSU5JVF9MSVNUX0hFQUQoJmlzcDExNngtPmFzeW5jKTsKLQlpc3AxMTZ4LT5ib2FyZCA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKwlpc3AxMTZ4LT5ib2FyZCA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCiAJaWYgKCFpc3AxMTZ4LT5ib2FyZCkgewogCQlFUlIoIlBsYXRmb3JtIGRhdGEgc3RydWN0dXJlIG5vdCBpbml0aWFsaXplZFxuIik7CkBAIC0xNzY0LDEzICsxNzYwLDEzIEBACiAvKgogICBTdXNwZW5kIG9mIHBsYXRmb3JtIGRldmljZQogKi8KLXN0YXRpYyBpbnQgaXNwMTE2eF9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBpc3AxMTZ4X3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJaW50IHJldCA9IDA7CiAKIAlWREJHKCIlczogc3RhdGUgJXhcbiIsIF9fZnVuY19fLCBzdGF0ZSk7CiAKLQlkZXYtPnBvd2VyLnBvd2VyX3N0YXRlID0gc3RhdGU7CisJZGV2LT5kZXYucG93ZXIucG93ZXJfc3RhdGUgPSBzdGF0ZTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xNzc4LDEzICsxNzc0LDEzIEBACiAvKgogICBSZXN1bWUgcGxhdGZvcm0gZGV2aWNlCiAqLwotc3RhdGljIGludCBpc3AxMTZ4X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGlzcDExNnhfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlpbnQgcmV0ID0gMDsKIAotCVZEQkcoIiVzOiAgc3RhdGUgJXhcbiIsIF9fZnVuY19fLCBkZXYtPnBvd2VyLnBvd2VyX3N0YXRlKTsKKwlWREJHKCIlczogIHN0YXRlICV4XG4iLCBfX2Z1bmNfXywgZGV2LT5kZXYucG93ZXIucG93ZXJfc3RhdGUpOwogCi0JZGV2LT5wb3dlci5wb3dlcl9zdGF0ZSA9IFBNU0dfT047CisJZGV2LT5kZXYucG93ZXIucG93ZXJfc3RhdGUgPSBQTVNHX09OOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTE3OTYsMTMgKzE3OTIsMTQgQEAKIAogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBpc3AxMTZ4X2RyaXZlciA9IHsKLQkubmFtZSA9IChjaGFyICopaGNkX25hbWUsCi0JLmJ1cyA9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGlzcDExNnhfZHJpdmVyID0gewogCS5wcm9iZSA9IGlzcDExNnhfcHJvYmUsCiAJLnJlbW92ZSA9IGlzcDExNnhfcmVtb3ZlLAogCS5zdXNwZW5kID0gaXNwMTE2eF9zdXNwZW5kLAogCS5yZXN1bWUgPSBpc3AxMTZ4X3Jlc3VtZSwKKwkuZHJpdmVyCT0geworCQkubmFtZSA9IChjaGFyICopaGNkX25hbWUsCisJfSwKIH07CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMTgxMywxNCArMTgxMCwxNCBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAogCUlORk8oImRyaXZlciAlcywgJXNcbiIsIGhjZF9uYW1lLCBEUklWRVJfVkVSU0lPTik7Ci0JcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmaXNwMTE2eF9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmlzcDExNnhfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoaXNwMTE2eF9pbml0KTsKIAogc3RhdGljIHZvaWQgX19leGl0IGlzcDExNnhfY2xlYW51cCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZpc3AxMTZ4X2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmlzcDExNnhfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2V4aXQoaXNwMTE2eF9jbGVhbnVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1hdTF4eHguYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1hdTF4eHguYwppbmRleCBmMGM3OGNmLi5kOWNmM2IzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktYXUxeHh4LmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWF1MXh4eC5jCkBAIC0yMjUsOSArMjI1LDggQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIGludCBvaGNpX2hjZF9hdTF4eHhfZHJ2X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgb2hjaV9oY2RfYXUxeHh4X2Rydl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlpbnQgcmV0OwogCiAJcHJfZGVidWcgKCJJbiBvaGNpX2hjZF9hdTF4eHhfZHJ2X3Byb2JlIik7CkBAIC0yMzksMzkgKzIzOCwzNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgb2hjaV9oY2RfYXUxeHh4X2Rydl9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBvaGNpX2hjZF9hdTF4eHhfZHJ2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKLQlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHVzYl9oY2QgKmhjZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCiAJdXNiX2hjZF9hdTF4eHhfcmVtb3ZlKGhjZCwgcGRldik7CiAJcmV0dXJuIDA7CiB9CiAJLypUQkQqLwotLypzdGF0aWMgaW50IG9oY2lfaGNkX2F1MXh4eF9kcnZfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCisvKnN0YXRpYyBpbnQgb2hjaV9oY2RfYXUxeHh4X2Rydl9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7Ci0Jc3RydWN0IHVzYl9oY2QgKmhjZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJcmV0dXJuIDA7CiB9Ci1zdGF0aWMgaW50IG9oY2lfaGNkX2F1MXh4eF9kcnZfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgb2hjaV9oY2RfYXUxeHh4X2Rydl9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKLQlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHVzYl9oY2QgKmhjZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKIAlyZXR1cm4gMDsKIH0KICovCiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBvaGNpX2hjZF9hdTF4eHhfZHJpdmVyID0gewotCS5uYW1lCQk9ICJhdTF4eHgtb2hjaSIsCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb2hjaV9oY2RfYXUxeHh4X2RyaXZlciA9IHsKIAkucHJvYmUJCT0gb2hjaV9oY2RfYXUxeHh4X2Rydl9wcm9iZSwKIAkucmVtb3ZlCQk9IG9oY2lfaGNkX2F1MXh4eF9kcnZfcmVtb3ZlLAogCS8qLnN1c3BlbmQJPSBvaGNpX2hjZF9hdTF4eHhfZHJ2X3N1c3BlbmQsICovCiAJLyoucmVzdW1lCT0gb2hjaV9oY2RfYXUxeHh4X2Rydl9yZXN1bWUsICovCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gImF1MXh4eC1vaGNpIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IG9oY2lfaGNkX2F1MXh4eF9pbml0ICh2b2lkKQpAQCAtMjgwLDEyICsyNzcsMTIgQEAKIAlwcl9kZWJ1ZyAoImJsb2NrIHNpemVzOiBlZCAlZCB0ZCAlZFxuIiwKIAkJc2l6ZW9mIChzdHJ1Y3QgZWQpLCBzaXplb2YgKHN0cnVjdCB0ZCkpOwogCi0JcmV0dXJuIGRyaXZlcl9yZWdpc3Rlcigmb2hjaV9oY2RfYXUxeHh4X2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmb2hjaV9oY2RfYXUxeHh4X2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBvaGNpX2hjZF9hdTF4eHhfY2xlYW51cCAodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3Rlcigmb2hjaV9oY2RfYXUxeHh4X2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm9oY2lfaGNkX2F1MXh4eF9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdCAob2hjaV9oY2RfYXUxeHh4X2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWxoN2E0MDQuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1saDdhNDA0LmMKaW5kZXggMzM2Yzc2Ni4uMDgxZWMzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWxoN2E0MDQuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktbGg3YTQwNC5jCkBAIC0yMDQsOSArMjA0LDggQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIGludCBvaGNpX2hjZF9saDdhNDA0X2Rydl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IG9oY2lfaGNkX2xoN2E0MDRfZHJ2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCWludCByZXQ7CiAKIAlwcl9kZWJ1ZyAoIkluIG9oY2lfaGNkX2xoN2E0MDRfZHJ2X3Byb2JlIik7CkBAIC0yMTgsNDAgKzIxNywzOCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgb2hjaV9oY2RfbGg3YTQwNF9kcnZfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgb2hjaV9oY2RfbGg3YTQwNF9kcnZfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwotCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAogCXVzYl9oY2RfbGg3YTQwNF9yZW1vdmUoaGNkLCBwZGV2KTsKIAlyZXR1cm4gMDsKIH0KIAkvKlRCRCovCi0vKnN0YXRpYyBpbnQgb2hjaV9oY2RfbGg3YTQwNF9kcnZfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCisvKnN0YXRpYyBpbnQgb2hjaV9oY2RfbGg3YTQwNF9kcnZfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwotCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAogCXJldHVybiAwOwogfQotc3RhdGljIGludCBvaGNpX2hjZF9saDdhNDA0X2Rydl9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBvaGNpX2hjZF9saDdhNDA0X2Rydl9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKLQlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHVzYl9oY2QgKmhjZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKIAogCXJldHVybiAwOwogfQogKi8KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIG9oY2lfaGNkX2xoN2E0MDRfZHJpdmVyID0gewotCS5uYW1lCQk9ICJsaDdhNDA0LW9oY2kiLAotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG9oY2lfaGNkX2xoN2E0MDRfZHJpdmVyID0gewogCS5wcm9iZQkJPSBvaGNpX2hjZF9saDdhNDA0X2Rydl9wcm9iZSwKIAkucmVtb3ZlCQk9IG9oY2lfaGNkX2xoN2E0MDRfZHJ2X3JlbW92ZSwKIAkvKi5zdXNwZW5kCT0gb2hjaV9oY2RfbGg3YTQwNF9kcnZfc3VzcGVuZCwgKi8KIAkvKi5yZXN1bWUJPSBvaGNpX2hjZF9saDdhNDA0X2Rydl9yZXN1bWUsICovCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gImxoN2E0MDQtb2hjaSIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBvaGNpX2hjZF9saDdhNDA0X2luaXQgKHZvaWQpCkBAIC0yNjAsMTIgKzI1NywxMiBAQAogCXByX2RlYnVnICgiYmxvY2sgc2l6ZXM6IGVkICVkIHRkICVkXG4iLAogCQlzaXplb2YgKHN0cnVjdCBlZCksIHNpemVvZiAoc3RydWN0IHRkKSk7CiAKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZvaGNpX2hjZF9saDdhNDA0X2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmb2hjaV9oY2RfbGg3YTQwNF9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgb2hjaV9oY2RfbGg3YTQwNF9jbGVhbnVwICh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZvaGNpX2hjZF9saDdhNDA0X2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm9oY2lfaGNkX2xoN2E0MDRfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQgKG9oY2lfaGNkX2xoN2E0MDRfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktb21hcC5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLW9tYXAuYwppbmRleCBlNDZjYzU0Li5jOWUyOWQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktb21hcC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1vbWFwLmMKQEAgLTQzMywyNCArNDMzLDIyIEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBpbnQgb2hjaV9oY2Rfb21hcF9kcnZfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBvaGNpX2hjZF9vbWFwX2Rydl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0JcmV0dXJuIHVzYl9oY2Rfb21hcF9wcm9iZSgmb2hjaV9vbWFwX2hjX2RyaXZlciwKLQkJCQl0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KSk7CisJcmV0dXJuIHVzYl9oY2Rfb21hcF9wcm9iZSgmb2hjaV9vbWFwX2hjX2RyaXZlciwgZGV2KTsKIH0KIAotc3RhdGljIGludCBvaGNpX2hjZF9vbWFwX2Rydl9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBvaGNpX2hjZF9vbWFwX2Rydl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKLQlzdHJ1Y3QgdXNiX2hjZAkJKmhjZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB1c2JfaGNkCQkqaGNkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3Qgb2hjaV9oY2QJCSpvaGNpID0gaGNkX3RvX29oY2kgKGhjZCk7CiAKLQl1c2JfaGNkX29tYXBfcmVtb3ZlKGhjZCwgcGRldik7CisJdXNiX2hjZF9vbWFwX3JlbW92ZShoY2QsIGRldik7CiAJaWYgKG9oY2ktPnRyYW5zY2VpdmVyKSB7CiAJCSh2b2lkKSBvdGdfc2V0X2hvc3Qob2hjaS0+dHJhbnNjZWl2ZXIsIDApOwogCQlwdXRfZGV2aWNlKG9oY2ktPnRyYW5zY2VpdmVyLT5kZXYpOwogCX0KLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00NTksOSArNDU3LDkgQEAKIAogI2lmZGVmCUNPTkZJR19QTQogCi1zdGF0aWMgaW50IG9oY2lfb21hcF9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCitzdGF0aWMgaW50IG9oY2lfb21hcF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCiB7Ci0Jc3RydWN0IG9oY2lfaGNkCSpvaGNpID0gaGNkX3RvX29oY2koZGV2X2dldF9kcnZkYXRhKGRldikpOworCXN0cnVjdCBvaGNpX2hjZAkqb2hjaSA9IGhjZF90b19vaGNpKHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldikpOwogCiAJaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIG9oY2ktPm5leHRfc3RhdGVjaGFuZ2UpKQogCQltc2xlZXAoNSk7CkBAIC00NzMsOSArNDcxLDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBvaGNpX29tYXBfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgb2hjaV9vbWFwX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IG9oY2lfaGNkCSpvaGNpID0gaGNkX3RvX29oY2koZGV2X2dldF9kcnZkYXRhKGRldikpOworCXN0cnVjdCBvaGNpX2hjZAkqb2hjaSA9IGhjZF90b19vaGNpKHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldikpOwogCiAJaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIG9oY2ktPm5leHRfc3RhdGVjaGFuZ2UpKQogCQltc2xlZXAoNSk7CkBAIC00OTQsMTYgKzQ5MiwxNyBAQAogLyoKICAqIERyaXZlciBkZWZpbml0aW9uIHRvIHJlZ2lzdGVyIHdpdGggdGhlIE9NQVAgYnVzCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBvaGNpX2hjZF9vbWFwX2RyaXZlciA9IHsKLQkubmFtZQkJPSAib2hjaSIsCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb2hjaV9oY2Rfb21hcF9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IG9oY2lfaGNkX29tYXBfZHJ2X3Byb2JlLAogCS5yZW1vdmUJCT0gb2hjaV9oY2Rfb21hcF9kcnZfcmVtb3ZlLAogI2lmZGVmCUNPTkZJR19QTQogCS5zdXNwZW5kCT0gb2hjaV9vbWFwX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBvaGNpX29tYXBfcmVzdW1lLAogI2VuZGlmCisJLmRyaXZlcgkJPSB7CisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCQkubmFtZQk9ICJvaGNpIiwKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgb2hjaV9oY2Rfb21hcF9pbml0ICh2b2lkKQpAQCAtNTE1LDEyICs1MTQsMTIgQEAKIAlwcl9kZWJ1ZygiJXM6IGJsb2NrIHNpemVzOiBlZCAlWmQgdGQgJVpkXG4iLCBoY2RfbmFtZSwKIAkJc2l6ZW9mIChzdHJ1Y3QgZWQpLCBzaXplb2YgKHN0cnVjdCB0ZCkpOwogCi0JcmV0dXJuIGRyaXZlcl9yZWdpc3Rlcigmb2hjaV9oY2Rfb21hcF9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm9oY2lfaGNkX29tYXBfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IG9oY2lfaGNkX29tYXBfY2xlYW51cCAodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3Rlcigmb2hjaV9oY2Rfb21hcF9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZvaGNpX2hjZF9vbWFwX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0IChvaGNpX2hjZF9vbWFwX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXBjaS5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXBjaS5jCmluZGV4IDdjZTFkOWUuLmE1OWU1MzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wY2kuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcGNpLmMKQEAgLTIxOCw3ICsyMTgsNiBAQAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG9oY2lfcGNpX2RyaXZlciA9IHsKIAkubmFtZSA9CQkoY2hhciAqKSBoY2RfbmFtZSwKIAkuaWRfdGFibGUgPQlwY2lfaWRzLAotCS5vd25lciA9CVRISVNfTU9EVUxFLAogCiAJLnByb2JlID0JdXNiX2hjZF9wY2lfcHJvYmUsCiAJLnJlbW92ZSA9CXVzYl9oY2RfcGNpX3JlbW92ZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wcGMtc29jLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcHBjLXNvYy5jCmluZGV4IDkyY2Y2ZjQuLjE4NzU1NzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wcGMtc29jLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXBwYy1zb2MuYwpAQCAtMTcyLDkgKzE3Miw4IEBACiAJLnN0YXJ0X3BvcnRfcmVzZXQgPQlvaGNpX3N0YXJ0X3BvcnRfcmVzZXQsCiB9OwogCi1zdGF0aWMgaW50IG9oY2lfaGNkX3BwY19zb2NfZHJ2X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgb2hjaV9oY2RfcHBjX3NvY19kcnZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJaW50IHJldDsKIAogCWlmICh1c2JfZGlzYWJsZWQoKSkKQEAgLTE4NCwyNSArMTgzLDI1IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBvaGNpX2hjZF9wcGNfc29jX2Rydl9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBvaGNpX2hjZF9wcGNfc29jX2Rydl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7Ci0Jc3RydWN0IHVzYl9oY2QgKmhjZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJdXNiX2hjZF9wcGNfc29jX3JlbW92ZShoY2QsIHBkZXYpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgb2hjaV9oY2RfcHBjX3NvY19kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gInBwYy1zb2Mtb2hjaSIsCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb2hjaV9oY2RfcHBjX3NvY19kcml2ZXIgPSB7CiAJLnByb2JlCQk9IG9oY2lfaGNkX3BwY19zb2NfZHJ2X3Byb2JlLAogCS5yZW1vdmUJCT0gb2hjaV9oY2RfcHBjX3NvY19kcnZfcmVtb3ZlLAogI2lmZGVmCUNPTkZJR19QTQogCS8qLnN1c3BlbmQJPSBvaGNpX2hjZF9wcGNfc29jX2Rydl9zdXNwZW5kLCovCiAJLyoucmVzdW1lCT0gb2hjaV9oY2RfcHBjX3NvY19kcnZfcmVzdW1lLCovCiAjZW5kaWYKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAicHBjLXNvYy1vaGNpIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IG9oY2lfaGNkX3BwY19zb2NfaW5pdCh2b2lkKQpAQCAtMjExLDEyICsyMTAsMTIgQEAKIAlwcl9kZWJ1ZygiYmxvY2sgc2l6ZXM6IGVkICVkIHRkICVkXG4iLCBzaXplb2Yoc3RydWN0IGVkKSwKIAkJCQkJCQlzaXplb2Yoc3RydWN0IHRkKSk7CiAKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZvaGNpX2hjZF9wcGNfc29jX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmb2hjaV9oY2RfcHBjX3NvY19kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgb2hjaV9oY2RfcHBjX3NvY19jbGVhbnVwKHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJm9oY2lfaGNkX3BwY19zb2NfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmb2hjaV9oY2RfcHBjX3NvY19kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChvaGNpX2hjZF9wcGNfc29jX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXB4YTI3eC5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXB4YTI3eC5jCmluZGV4IDU5ZTIwNTYuLjlkNjVlYzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1weGEyN3guYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcHhhMjd4LmMKQEAgLTI5MCw5ICsyOTAsOCBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgaW50IG9oY2lfaGNkX3B4YTI3eF9kcnZfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBvaGNpX2hjZF9weGEyN3hfZHJ2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCWludCByZXQ7CiAKIAlwcl9kZWJ1ZyAoIkluIG9oY2lfaGNkX3B4YTI3eF9kcnZfcHJvYmUiKTsKQEAgLTMwNCw0MSArMzAzLDM5IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBvaGNpX2hjZF9weGEyN3hfZHJ2X3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IG9oY2lfaGNkX3B4YTI3eF9kcnZfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwotCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKIAl1c2JfaGNkX3B4YTI3eF9yZW1vdmUoaGNkLCBwZGV2KTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBvaGNpX2hjZF9weGEyN3hfZHJ2X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IG9oY2lfaGNkX3B4YTI3eF9kcnZfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLS8vCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKLS8vCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKy8vCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCXByaW50aygiJXM6IG5vdCBpbXBsZW1lbnRlZCB5ZXRcbiIsIF9fRlVOQ1RJT05fXyk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBvaGNpX2hjZF9weGEyN3hfZHJ2X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IG9oY2lfaGNkX3B4YTI3eF9kcnZfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLS8vCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKLS8vCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKy8vCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCXByaW50aygiJXM6IG5vdCBpbXBsZW1lbnRlZCB5ZXRcbiIsIF9fRlVOQ1RJT05fXyk7CiAKIAlyZXR1cm4gMDsKIH0KIAogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgb2hjaV9oY2RfcHhhMjd4X2RyaXZlciA9IHsKLQkubmFtZQkJPSAicHhhMjd4LW9oY2kiLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb2hjaV9oY2RfcHhhMjd4X2RyaXZlciA9IHsKIAkucHJvYmUJCT0gb2hjaV9oY2RfcHhhMjd4X2Rydl9wcm9iZSwKIAkucmVtb3ZlCQk9IG9oY2lfaGNkX3B4YTI3eF9kcnZfcmVtb3ZlLAogCS5zdXNwZW5kCT0gb2hjaV9oY2RfcHhhMjd4X2Rydl9zdXNwZW5kLCAKLQkucmVzdW1lCQk9IG9oY2lfaGNkX3B4YTI3eF9kcnZfcmVzdW1lLCAKKwkucmVzdW1lCQk9IG9oY2lfaGNkX3B4YTI3eF9kcnZfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJweGEyN3gtb2hjaSIsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IG9oY2lfaGNkX3B4YTI3eF9pbml0ICh2b2lkKQpAQCAtMzQ3LDEyICszNDQsMTIgQEAKIAlwcl9kZWJ1ZyAoImJsb2NrIHNpemVzOiBlZCAlZCB0ZCAlZFxuIiwKIAkJc2l6ZW9mIChzdHJ1Y3QgZWQpLCBzaXplb2YgKHN0cnVjdCB0ZCkpOwogCi0JcmV0dXJuIGRyaXZlcl9yZWdpc3Rlcigmb2hjaV9oY2RfcHhhMjd4X2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmb2hjaV9oY2RfcHhhMjd4X2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBvaGNpX2hjZF9weGEyN3hfY2xlYW51cCAodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3Rlcigmb2hjaV9oY2RfcHhhMjd4X2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm9oY2lfaGNkX3B4YTI3eF9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdCAob2hjaV9oY2RfcHhhMjd4X2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXMzYzI0MTAuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1zM2MyNDEwLmMKaW5kZXggZWUxZmM2MC4uMzVjYzk0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXMzYzI0MTAuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktczNjMjQxMC5jCkBAIC00NTksMzkgKzQ1OSwzOCBAQAogCiAvKiBkZXZpY2UgZHJpdmVyICovCiAKLXN0YXRpYyBpbnQgb2hjaV9oY2RfczNjMjQxMF9kcnZfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBvaGNpX2hjZF9zM2MyNDEwX2Rydl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlyZXR1cm4gdXNiX2hjZF9zM2MyNDEwX3Byb2JlKCZvaGNpX3MzYzI0MTBfaGNfZHJpdmVyLCBwZGV2KTsKIH0KIAotc3RhdGljIGludCBvaGNpX2hjZF9zM2MyNDEwX2Rydl9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBvaGNpX2hjZF9zM2MyNDEwX2Rydl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7Ci0Jc3RydWN0IHVzYl9oY2QgKmhjZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAogCXVzYl9oY2RfczNjMjQxMF9yZW1vdmUoaGNkLCBwZGV2KTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIG9oY2lfaGNkX3MzYzI0MTBfZHJpdmVyID0gewotCS5uYW1lCQk9ICJzM2MyNDEwLW9oY2kiLAotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG9oY2lfaGNkX3MzYzI0MTBfZHJpdmVyID0gewogCS5wcm9iZQkJPSBvaGNpX2hjZF9zM2MyNDEwX2Rydl9wcm9iZSwKIAkucmVtb3ZlCQk9IG9oY2lfaGNkX3MzYzI0MTBfZHJ2X3JlbW92ZSwKIAkvKi5zdXNwZW5kCT0gb2hjaV9oY2RfczNjMjQxMF9kcnZfc3VzcGVuZCwgKi8KIAkvKi5yZXN1bWUJPSBvaGNpX2hjZF9zM2MyNDEwX2Rydl9yZXN1bWUsICovCisJLmRyaXZlcgkJPSB7CisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCQkubmFtZQk9ICJzM2MyNDEwLW9oY2kiLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBvaGNpX2hjZF9zM2MyNDEwX2luaXQgKHZvaWQpCiB7Ci0JcmV0dXJuIGRyaXZlcl9yZWdpc3Rlcigmb2hjaV9oY2RfczNjMjQxMF9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm9oY2lfaGNkX3MzYzI0MTBfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IG9oY2lfaGNkX3MzYzI0MTBfY2xlYW51cCAodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3Rlcigmb2hjaV9oY2RfczNjMjQxMF9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZvaGNpX2hjZF9zM2MyNDEwX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0IChvaGNpX2hjZF9zM2MyNDEwX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9zbDgxMS1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTEtaGNkLmMKaW5kZXggNTYwN2MwYS4uYTc3MjJhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9zbDgxMS1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3NsODExLWhjZC5jCkBAIC0xNjMxLDI0ICsxNjMxLDIxIEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiBzdGF0aWMgaW50IF9fZGV2ZXhpdAotc2w4MTFoX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzbDgxMWhfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgdXNiX2hjZAkJKmhjZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB1c2JfaGNkCQkqaGNkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3Qgc2w4MTEJCSpzbDgxMSA9IGhjZF90b19zbDgxMShoY2QpOwotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJKnBkZXY7CiAJc3RydWN0IHJlc291cmNlCQkqcmVzOwogCi0JcGRldiA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UsIGRldik7Ci0KIAlyZW1vdmVfZGVidWdfZmlsZShzbDgxMSk7CiAJdXNiX3JlbW92ZV9oY2QoaGNkKTsKIAogCS8qIHNvbWUgcGxhdGZvcm1zIG1heSB1c2UgSU9SRVNPVVJDRV9JTyAqLwotCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMSk7CisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKGRldiwgSU9SRVNPVVJDRV9NRU0sIDEpOwogCWlmIChyZXMpCiAJCWlvdW5tYXAoc2w4MTEtPmRhdGFfcmVnKTsKIAotCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCWlmIChyZXMpCiAJCWlvdW5tYXAoc2w4MTEtPmFkZHJfcmVnKTsKIApAQCAtMTY1NywxMSArMTY1NCwxMCBAQAogfQogCiBzdGF0aWMgaW50IF9fZGV2aW5pdAotc2w4MTFoX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3NsODExaF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHVzYl9oY2QJCSpoY2Q7CiAJc3RydWN0IHNsODExCQkqc2w4MTE7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZQkqcGRldjsKIAlzdHJ1Y3QgcmVzb3VyY2UJCSphZGRyLCAqZGF0YTsKIAlpbnQJCQlpcnE7CiAJdm9pZCBfX2lvbWVtCQkqYWRkcl9yZWc7CkBAIC0xNjc0LDI0ICsxNjcwLDIzIEBACiAJICogc3BlY2lmaWMgcGxhdGZvcm1fZGF0YS4gIHdlIGRvbid0IHByb2JlIGZvciBJUlFzLCBhbmQgZG8gb25seQogCSAqIG1pbmltYWwgc2FuaXR5IGNoZWNraW5nLgogCSAqLwotCXBkZXYgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlLCBkZXYpOwotCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7Ci0JaWYgKHBkZXYtPm51bV9yZXNvdXJjZXMgPCAzIHx8IGlycSA8IDApCisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShkZXYsIDApOworCWlmIChkZXYtPm51bV9yZXNvdXJjZXMgPCAzIHx8IGlycSA8IDApCiAJCXJldHVybiAtRU5PREVWOwogCiAJLyogcmVmdXNlIHRvIGNvbmZ1c2UgdXNiY29yZSAqLwotCWlmIChkZXYtPmRtYV9tYXNrKSB7CisJaWYgKGRldi0+ZGV2LmRtYV9tYXNrKSB7CiAJCURCRygibm8gd2Ugd29uJ3QgZG1hXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJLyogdGhlIGNoaXAgbWF5IGJlIHdpcmVkIGZvciBlaXRoZXIga2luZCBvZiBhZGRyZXNzaW5nICovCi0JYWRkciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7Ci0JZGF0YSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMSk7CisJYWRkciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlkYXRhID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKGRldiwgSU9SRVNPVVJDRV9NRU0sIDEpOwogCXJldHZhbCA9IC1FQlVTWTsKIAlpZiAoIWFkZHIgfHwgIWRhdGEpIHsKLQkJYWRkciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lPLCAwKTsKLQkJZGF0YSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lPLCAxKTsKKwkJYWRkciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShkZXYsIElPUkVTT1VSQ0VfSU8sIDApOworCQlkYXRhID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKGRldiwgSU9SRVNPVVJDRV9JTywgMSk7CiAJCWlmICghYWRkciB8fCAhZGF0YSkKIAkJCXJldHVybiAtRU5PREVWOwogCQlpb2FkZHIgPSAxOwpAQCAtMTcxMyw3ICsxNzA4LDcgQEAKIAl9CiAKIAkvKiBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBoY2QgKi8KLQloY2QgPSB1c2JfY3JlYXRlX2hjZCgmc2w4MTFoX2hjX2RyaXZlciwgZGV2LCBkZXYtPmJ1c19pZCk7CisJaGNkID0gdXNiX2NyZWF0ZV9oY2QoJnNsODExaF9oY19kcml2ZXIsICZkZXYtPmRldiwgZGV2LT5kZXYuYnVzX2lkKTsKIAlpZiAoIWhjZCkgewogCQlyZXR2YWwgPSAtRU5PTUVNOwogCQlnb3RvIGVycjU7CkBAIC0xNzIzLDcgKzE3MTgsNyBAQAogCiAJc3Bpbl9sb2NrX2luaXQoJnNsODExLT5sb2NrKTsKIAlJTklUX0xJU1RfSEVBRCgmc2w4MTEtPmFzeW5jKTsKLQlzbDgxMS0+Ym9hcmQgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisJc2w4MTEtPmJvYXJkID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlpbml0X3RpbWVyKCZzbDgxMS0+dGltZXIpOwogCXNsODExLT50aW1lci5mdW5jdGlvbiA9IHNsODExaF90aW1lcjsKIAlzbDgxMS0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBzbDgxMTsKQEAgLTE3ODUsOSArMTc4MCw5IEBACiAgKi8KIAogc3RhdGljIGludAotc2w4MTFoX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzbDgxMWhfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlzdHJ1Y3QgdXNiX2hjZAkqaGNkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHVzYl9oY2QJKmhjZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IHNsODExCSpzbDgxMSA9IGhjZF90b19zbDgxMShoY2QpOwogCWludAkJcmV0dmFsID0gMDsKIApAQCAtMTc5NiwyNyArMTc5MSwyNyBAQAogCWVsc2UgaWYgKHN0YXRlLmV2ZW50ID09IFBNX0VWRU5UX1NVU1BFTkQpCiAJCXBvcnRfcG93ZXIoc2w4MTEsIDApOwogCWlmIChyZXR2YWwgPT0gMCkKLQkJZGV2LT5wb3dlci5wb3dlcl9zdGF0ZSA9IHN0YXRlOworCQlkZXYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IHN0YXRlOwogCXJldHVybiByZXR2YWw7CiB9CiAKIHN0YXRpYyBpbnQKLXNsODExaF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQorc2w4MTFoX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHVzYl9oY2QJKmhjZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB1c2JfaGNkCSpoY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBzbDgxMQkqc2w4MTEgPSBoY2RfdG9fc2w4MTEoaGNkKTsKIAogCS8qIHdpdGggbm8gImNoZWNrIHRvIHNlZSBpZiBWQlVTIGlzIHN0aWxsIHBvd2VyZWQiIGJvYXJkIGhvb2ssCiAJICogbGV0J3MgYXNzdW1lIGl0J2Qgb25seSBiZSBwb3dlcmVkIHRvIGVuYWJsZSByZW1vdGUgd2FrZXVwLgogCSAqLwotCWlmIChkZXYtPnBvd2VyLnBvd2VyX3N0YXRlLmV2ZW50ID09IFBNX0VWRU5UX1NVU1BFTkQKKwlpZiAoZGV2LT5kZXYucG93ZXIucG93ZXJfc3RhdGUuZXZlbnQgPT0gUE1fRVZFTlRfU1VTUEVORAogCQkJfHwgIWhjZC0+Y2FuX3dha2V1cCkgewogCQlzbDgxMS0+cG9ydDEgPSAwOwogCQlwb3J0X3Bvd2VyKHNsODExLCAxKTsKIAkJcmV0dXJuIDA7CiAJfQogCi0JZGV2LT5wb3dlci5wb3dlcl9zdGF0ZSA9IFBNU0dfT047CisJZGV2LT5kZXYucG93ZXIucG93ZXJfc3RhdGUgPSBQTVNHX09OOwogCXJldHVybiBzbDgxMWhfYnVzX3Jlc3VtZShoY2QpOwogfQogCkBAIC0xODI5LDE2ICsxODI0LDE2IEBACiAKIAogLyogdGhpcyBkcml2ZXIgaXMgZXhwb3J0ZWQgc28gc2w4MTFfY3MgY2FuIGRlcGVuZCBvbiBpdCAqLwotc3RydWN0IGRldmljZV9kcml2ZXIgc2w4MTFoX2RyaXZlciA9IHsKLQkubmFtZSA9CQkoY2hhciAqKSBoY2RfbmFtZSwKLQkuYnVzID0JCSZwbGF0Zm9ybV9idXNfdHlwZSwKLQkub3duZXIgPQlUSElTX01PRFVMRSwKLQorc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzbDgxMWhfZHJpdmVyID0gewogCS5wcm9iZSA9CXNsODExaF9wcm9iZSwKIAkucmVtb3ZlID0JX19kZXZleGl0X3Aoc2w4MTFoX3JlbW92ZSksCiAKIAkuc3VzcGVuZCA9CXNsODExaF9zdXNwZW5kLAogCS5yZXN1bWUgPQlzbDgxMWhfcmVzdW1lLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0JKGNoYXIgKikgaGNkX25hbWUsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCiB9OwogRVhQT1JUX1NZTUJPTChzbDgxMWhfZHJpdmVyKTsKIApAQCAtMTg1MCwxMiArMTg0NSwxMiBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAogCUlORk8oImRyaXZlciAlcywgJXNcbiIsIGhjZF9uYW1lLCBEUklWRVJfVkVSU0lPTik7Ci0JcmV0dXJuIGRyaXZlcl9yZWdpc3Rlcigmc2w4MTFoX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc2w4MTFoX2RyaXZlcik7CiB9CiBtb2R1bGVfaW5pdChzbDgxMWhfaW5pdCk7CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBzbDgxMWhfY2xlYW51cCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZzbDgxMWhfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc2w4MTFoX2RyaXZlcik7CiB9CiBtb2R1bGVfZXhpdChzbDgxMWhfY2xlYW51cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaGNkLmMKaW5kZXggMTVlMGE1MS4uZDMzY2UzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC91aGNpLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1oY2QuYwpAQCAtODMxLDcgKzgzMSw2IEBACiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgdWhjaV9wY2lfZHJpdmVyID0gewogCS5uYW1lID0JCShjaGFyICopaGNkX25hbWUsCiAJLmlkX3RhYmxlID0JdWhjaV9wY2lfaWRzLAotCS5vd25lciA9CVRISVNfTU9EVUxFLAogCiAJLnByb2JlID0JdXNiX2hjZF9wY2lfcHJvYmUsCiAJLnJlbW92ZSA9CXVzYl9oY2RfcGNpX3JlbW92ZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2ltYWdlL21pY3JvdGVrLmMgYi9kcml2ZXJzL3VzYi9pbWFnZS9taWNyb3Rlay5jCmluZGV4IGM4OWQwNzYuLjYxYTI2MDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2ltYWdlL21pY3JvdGVrLmMKKysrIGIvZHJpdmVycy91c2IvaW1hZ2UvbWljcm90ZWsuYwpAQCAtNjMyLDcgKzYzMiw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIFNjc2lfSG9zdF9UZW1wbGF0ZSBtdHNfc2NzaV9ob3N0X3RlbXBsYXRlID0geworc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgbXRzX3Njc2lfaG9zdF90ZW1wbGF0ZSA9IHsKIAkubW9kdWxlCQkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJCT0gIm1pY3JvdGVrWDYiLAogCS5wcm9jX25hbWUJCT0gIm1pY3JvdGVrWDYiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy1pZi5jIGIvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy1pZi5jCmluZGV4IGI3N2U2NWMuLjU1MjRmZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MtaWYuYworKysgYi9kcml2ZXJzL3VzYi9tZWRpYS9wd2MvcHdjLWlmLmMKQEAgLTYyLDYgKzYyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKICNpbmNsdWRlICJwd2MuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MuaCBiL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MuaAppbmRleCAyNjc4NjlkLi42ZGQ3NmJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tZWRpYS9wd2MvcHdjLmgKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy5oCkBAIC0yNSw4ICsyNSw2IEBACiAjaWZuZGVmIFBXQ19ICiAjZGVmaW5lIFBXQ19ICiAKLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+Ci0KICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3c5OTY4Y2YuYyBiL2RyaXZlcnMvdXNiL21lZGlhL3c5OTY4Y2YuYwppbmRleCBmMzZjMGI2Li42NzYxMmM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tZWRpYS93OTk2OGNmLmMKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvdzk5NjhjZi5jCkBAIC0yNSw3ICsyNSw2IEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4gICAgICAgICAgICAgICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2Mvc2lzdXNidmdhL3Npc3VzYi5jIGIvZHJpdmVycy91c2IvbWlzYy9zaXN1c2J2Z2Evc2lzdXNiLmMKaW5kZXggYzk0NmM5YS4uNDFlZjJiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9zaXN1c2J2Z2Evc2lzdXNiLmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy9zaXN1c2J2Z2Evc2lzdXNiLmMKQEAgLTM3LDcgKzM3LDYgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9zaXN1c2J2Z2Evc2lzdXNiLmggYi9kcml2ZXJzL3VzYi9taXNjL3Npc3VzYnZnYS9zaXN1c2IuaAppbmRleCA0MDFmZjIxLi4xZDdhNzdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL3Npc3VzYnZnYS9zaXN1c2IuaAorKysgYi9kcml2ZXJzL3VzYi9taXNjL3Npc3VzYnZnYS9zaXN1c2IuaApAQCAtMzcsNiArMzcsNyBAQAogI2lmbmRlZiBfU0lTVVNCX0hfCiAjZGVmaW5lIF9TSVNVU0JfSF8KIAorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpZmRlZiBDT05GSUdfQ09NUEFUCiAjaWYgTElOVVhfVkVSU0lPTl9DT0RFIDw9IEtFUk5FTF9WRVJTSU9OKDIsNiwxMCkKICNpbmNsdWRlIDxsaW51eC9pb2N0bDMyLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3Npc3VzYnZnYS9zaXN1c2JfY29uLmMgYi9kcml2ZXJzL3VzYi9taXNjL3Npc3VzYnZnYS9zaXN1c2JfY29uLmMKaW5kZXggMjQ1ODQ0Ni4uYmU1YzFhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9zaXN1c2J2Z2Evc2lzdXNiX2Nvbi5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2Mvc2lzdXNidmdhL3Npc3VzYl9jb24uYwpAQCAtNDgsNyArNDgsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3Npc3VzYnZnYS9zaXN1c2JfaW5pdC5jIGIvZHJpdmVycy91c2IvbWlzYy9zaXN1c2J2Z2Evc2lzdXNiX2luaXQuYwppbmRleCBmMjhiYzI0Li4wNDRmYTQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL3Npc3VzYnZnYS9zaXN1c2JfaW5pdC5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2Mvc2lzdXNidmdhL3Npc3VzYl9pbml0LmMKQEAgLTM3LDcgKzM3LDYgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL0tjb25maWcgYi9kcml2ZXJzL3ZpZGVvL0tjb25maWcKaW5kZXggNDRiNmNhMi4uMjViNmNhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9LY29uZmlnCisrKyBiL2RyaXZlcnMvdmlkZW8vS2NvbmZpZwpAQCAtNTkzLDM4ICs1OTMsNiBAQAogCSAgZnJhbWVidWZmZXIuICBQcm9kdWN0IHNwZWNzIGF0CiAJICA8aHR0cDovL3d3dy5lcmQuZXBzb24uY29tL3ZkYy9odG1sL3Byb2R1Y3RzLmh0bT4uCiAKLWNvbmZpZyBGQl9FMTM1NgotCXRyaXN0YXRlICJFcHNvbiBTRUQxMzU2IGZyYW1lYnVmZmVyIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBGQiAmJiBFWFBFUklNRU5UQUwgJiYgUENJICYmIE1JUFMKLQotY29uZmlnIFBCMTAwMF9DUlQKLQlib29sICJVc2UgQ1JUIG9uIFBiMTAwMCAoSjY1KSIKLQlkZXBlbmRzIG9uIE1JUFNfUEIxMDAwPXkgJiYgRkJfRTEzNTYKLQotY29uZmlnIFBCMTAwMF9OVFNDCi0JYm9vbCAiVXNlIENvbXBzaXRlIE5UU0Mgb24gUGIxMDAwIChKNjMpIgotCWRlcGVuZHMgb24gTUlQU19QQjEwMDA9eSAmJiBGQl9FMTM1NgotCi1jb25maWcgUEIxMDAwX1RGVAotCWJvb2wgIlVzZSBURlQgUGFuZWwgb24gUGIxMDAwIChKNjQpIgotCWRlcGVuZHMgb24gTUlQU19QQjEwMDA9eSAmJiBGQl9FMTM1NgotCi1jb25maWcgUEIxNTAwX0NSVAotCWJvb2wgIlVzZSBDUlQgb24gUGIxNTAwICIgaWYgTUlQU19QQjE1MDA9eQotCWRlcGVuZHMgb24gRkJfRTEzNTYKLQotY29uZmlnIFBCMTUwMF9DUlQKLQlwcm9tcHQgIlVzZSBDUlQgb24gUGIxMTAwICIKLQlkZXBlbmRzIG9uIEZCX0UxMzU2ICYmIE1JUFNfUEIxMTAwPXkKLQotY29uZmlnIFBCMTUwMF9URlQKLQlib29sICJVc2UgVEZUIFBhbmVsIG9uIFBiMTUwMCAiIGlmIE1JUFNfUEIxNTAwPXkKLQlkZXBlbmRzIG9uIEZCX0UxMzU2Ci0KLWNvbmZpZyBQQjE1MDBfVEZUCi0JcHJvbXB0ICJVc2UgVEZUIFBhbmVsIG9uIFBiMTEwMCAiCi0JZGVwZW5kcyBvbiBGQl9FMTM1NiAmJiBNSVBTX1BCMTEwMD15Ci0KIGNvbmZpZyBGQl9TMUQxM1hYWAogCXRyaXN0YXRlICJFcHNvbiBTMUQxM1hYWCBmcmFtZWJ1ZmZlciBzdXBwb3J0IgogCWRlcGVuZHMgb24gRkIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYWNvcm5mYi5jIGIvZHJpdmVycy92aWRlby9hY29ybmZiLmMKaW5kZXggMTkzYjQ4Mi4uNzUwY2ViYiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hY29ybmZiLmMKKysrIGIvZHJpdmVycy92aWRlby9hY29ybmZiLmMKQEAgLTEyNzksNyArMTI3OSw3IEBACiAJcHJpbnRrKCJhY29ybmZiOiBmcmVlZCAlZEsgbWVtb3J5XG4iLCBtYl9mcmVlZCk7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IGFjb3JuZmJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBfX2luaXQgYWNvcm5mYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJdW5zaWduZWQgbG9uZyBzaXplOwogCXVfaW50IGhfc3luYywgdl9zeW5jOwpAQCAtMTI5Miw3ICsxMjkyLDcgQEAKIAogCWFjb3JuZmJfaW5pdF9mYmluZm8oKTsKIAotCWN1cnJlbnRfcGFyLmRldiA9IGRldjsKKwljdXJyZW50X3Bhci5kZXYgPSAmZGV2LT5kZXY7CiAKIAlpZiAoY3VycmVudF9wYXIubW9udHlwZSA9PSAtMSkKIAkJY3VycmVudF9wYXIubW9udHlwZSA9IGFjb3JuZmJfZGV0ZWN0X21vbml0b3J0eXBlKCk7CkBAIC0xNDUzLDE1ICsxNDUzLDE2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBhY29ybmZiX2RyaXZlciA9IHsKLQkubmFtZQk9ICJhY29ybmZiIiwKLQkuYnVzCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYWNvcm5mYl9kcml2ZXIgPSB7CiAJLnByb2JlCT0gYWNvcm5mYl9wcm9iZSwKKwkuZHJpdmVyCT0geworCQkubmFtZQk9ICJhY29ybmZiIiwKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgYWNvcm5mYl9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmYWNvcm5mYl9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmFjb3JuZmJfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoYWNvcm5mYl9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYW1iYS1jbGNkLmMgYi9kcml2ZXJzL3ZpZGVvL2FtYmEtY2xjZC5jCmluZGV4IDQ2N2ExZDcuLmEzYzJjNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYW1iYS1jbGNkLmMKKysrIGIvZHJpdmVycy92aWRlby9hbWJhLWNsY2QuYwpAQCAtNTE4LDcgKzUxOCw3IEBACiAJLmlkX3RhYmxlCT0gY2xjZGZiX2lkX3RhYmxlLAogfTsKIAotaW50IF9faW5pdCBhbWJhX2NsY2RmYl9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBhbWJhX2NsY2RmYl9pbml0KHZvaWQpCiB7CiAJaWYgKGZiX2dldF9vcHRpb25zKCJhbWJhZmIiLCBOVUxMKSkKIAkJcmV0dXJuIC1FTk9ERVY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2FyY2ZiLmMgYi9kcml2ZXJzL3ZpZGVvL2FyY2ZiLmMKaW5kZXggYTFmYzhiYi4uMDgwZGI4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hcmNmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYXJjZmIuYwpAQCAtNTE0LDkgKzUxNCw4IEBACiAJLmZiX2lvY3RsIAk9IGFyY2ZiX2lvY3RsLAogfTsKIAotc3RhdGljIGludCBfX2luaXQgYXJjZmJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2aWNlKQorc3RhdGljIGludCBfX2luaXQgYXJjZmJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXZpY2UpOwogCXN0cnVjdCBmYl9pbmZvICppbmZvOwogCWludCByZXR2YWwgPSAtRU5PTUVNOwogCWludCB2aWRlb21lbW9yeXNpemU7CkBAIC01NTksNyArNTU4LDcgQEAKIAlyZXR2YWwgPSByZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKTsKIAlpZiAocmV0dmFsIDwgMCkKIAkJZ290byBlcnIxOwotCWRldl9zZXRfZHJ2ZGF0YSgmZGV2LT5kZXYsIGluZm8pOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgaW5mbyk7CiAJaWYgKGlycSkgewogCQlwYXItPmlycSA9IGlycTsKIAkJaWYgKHJlcXVlc3RfaXJxKHBhci0+aXJxLCAmYXJjZmJfaW50ZXJydXB0LCBTQV9TSElSUSwKQEAgLTYwMCw5ICs1OTksOSBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLXN0YXRpYyBpbnQgYXJjZmJfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKK3N0YXRpYyBpbnQgYXJjZmJfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXZpY2UpOworCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAogCWlmIChpbmZvKSB7CiAJCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIoaW5mbyk7CkBAIC02MTIsMTEgKzYxMSwxMiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgYXJjZmJfZHJpdmVyID0gewotCS5uYW1lCT0gImFyY2ZiIiwKLQkuYnVzCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXJjZmJfZHJpdmVyID0gewogCS5wcm9iZQk9IGFyY2ZiX3Byb2JlLAogCS5yZW1vdmUgPSBhcmNmYl9yZW1vdmUsCisJLmRyaXZlcgk9IHsKKwkJLm5hbWUJPSAiYXJjZmIiLAorCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqYXJjZmJfZGV2aWNlOwpAQCAtNjI4LDcgKzYyOCw3IEBACiAJaWYgKCFhcmNmYl9lbmFibGUpCiAJCXJldHVybiAtRU5YSU87CiAKLQlyZXQgPSBkcml2ZXJfcmVnaXN0ZXIoJmFyY2ZiX2RyaXZlcik7CisJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZhcmNmYl9kcml2ZXIpOwogCWlmICghcmV0KSB7CiAJCWFyY2ZiX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygiYXJjZmIiLCAwKTsKIAkJaWYgKGFyY2ZiX2RldmljZSkgewpAQCAtNjM4LDcgKzYzOCw3IEBACiAJCX0KIAkJaWYgKHJldCkgewogCQkJcGxhdGZvcm1fZGV2aWNlX3B1dChhcmNmYl9kZXZpY2UpOwotCQkJZHJpdmVyX3VucmVnaXN0ZXIoJmFyY2ZiX2RyaXZlcik7CisJCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYXJjZmJfZHJpdmVyKTsKIAkJfQogCX0KIAlyZXR1cm4gcmV0OwpAQCAtNjQ4LDcgKzY0OCw3IEBACiBzdGF0aWMgdm9pZCBfX2V4aXQgYXJjZmJfZXhpdCh2b2lkKQogewogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGFyY2ZiX2RldmljZSk7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJmFyY2ZiX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmFyY2ZiX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9wYXJhbShudW1fY29scywgdWxvbmcsIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvYmFja2xpZ2h0LmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9iYWNrbGlnaHQuYwppbmRleCBhY2M4MWNiLi45ZDUwMTVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9iYWNrbGlnaHQuYworKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9iYWNrbGlnaHQuYwpAQCAtNSw3ICs1LDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9jb3JnaV9ibC5jIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvY29yZ2lfYmwuYwppbmRleCA0ODY3NDk4Li42YTIxOWIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9jb3JnaV9ibC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2NvcmdpX2JsLmMKQEAgLTQ4LDYgKzQ4LDEyIEBACiAJY29yZ2libF9tYWNoX3NldF9pbnRlbnNpdHkoaW50ZW5zaXR5KTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJsX2xvY2ssIGZsYWdzKTsKKworIAljb3JnaV9raWNrX2JhdHQgPSBzeW1ib2xfZ2V0KHNoYXJwc2xfYmF0dGVyeV9raWNrKTsKKyAJaWYgKGNvcmdpX2tpY2tfYmF0dCkgeworIAkJY29yZ2lfa2lja19iYXR0KCk7CisgCQlzeW1ib2xfcHV0KHNoYXJwc2xfYmF0dGVyeV9raWNrKTsKKyAJfQogfQogCiBzdGF0aWMgdm9pZCBjb3JnaWJsX2JsYW5rKGludCBibGFuaykKQEAgLTczLDEzICs3OSwxMyBAQAogfQogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IGNvcmdpYmxfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgY29yZ2libF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCWNvcmdpYmxfYmxhbmsoRkJfQkxBTktfUE9XRVJET1dOKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjb3JnaWJsX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGNvcmdpYmxfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAljb3JnaWJsX2JsYW5rKEZCX0JMQU5LX1VOQkxBTkspOwogCXJldHVybiAwOwpAQCAtMTM3LDkgKzE0Myw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqY29yZ2lfYmFja2xpZ2h0X2RldmljZTsKIAotc3RhdGljIGludCBfX2luaXQgY29yZ2libF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9faW5pdCBjb3JnaWJsX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IGNvcmdpYmxfbWFjaGluZm8gKm1hY2hpbmZvID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBjb3JnaWJsX21hY2hpbmZvICptYWNoaW5mbyA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCiAJY29yZ2libF9kYXRhLm1heF9icmlnaHRuZXNzID0gbWFjaGluZm8tPm1heF9pbnRlbnNpdHk7CiAJY29yZ2libF9tYWNoX3NldF9pbnRlbnNpdHkgPSBtYWNoaW5mby0+c2V0X2JsX2ludGVuc2l0eTsKQEAgLTE1Niw3ICsxNjIsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGNvcmdpYmxfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgY29yZ2libF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCWJhY2tsaWdodF9kZXZpY2VfdW5yZWdpc3Rlcihjb3JnaV9iYWNrbGlnaHRfZGV2aWNlKTsKIApAQCAtMTY2LDIzICsxNzIsMjQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGNvcmdpYmxfZHJpdmVyID0gewotCS5uYW1lCQk9ICJjb3JnaS1ibCIsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBjb3JnaWJsX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gY29yZ2libF9wcm9iZSwKIAkucmVtb3ZlCQk9IGNvcmdpYmxfcmVtb3ZlLAogCS5zdXNwZW5kCT0gY29yZ2libF9zdXNwZW5kLAogCS5yZXN1bWUJCT0gY29yZ2libF9yZXN1bWUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gImNvcmdpLWJsIiwKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgY29yZ2libF9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmY29yZ2libF9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmNvcmdpYmxfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGNvcmdpYmxfZXhpdCh2b2lkKQogewotIAlkcml2ZXJfdW5yZWdpc3RlcigmY29yZ2libF9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZjb3JnaWJsX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGNvcmdpYmxfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9sY2QuYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2xjZC5jCmluZGV4IDQ3MGU2ZjAuLjY4YzY5MDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2xjZC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2xjZC5jCkBAIC01LDcgKzUsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vY2ZiaW1nYmx0LmMgYi9kcml2ZXJzL3ZpZGVvL2NmYmltZ2JsdC5jCmluZGV4IGRhNjY0Y2UuLmE3NzcwYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY2ZiaW1nYmx0LmMKKysrIGIvZHJpdmVycy92aWRlby9jZmJpbWdibHQuYwpAQCAtODAsMTAgKzgwLDEyIEBACiAjZGVmaW5lIExFRlRfUE9TKGJwcCkgICAgICAgICAgKDMyIC0gYnBwKQogI2RlZmluZSBTSElGVF9ISUdIKHZhbCwgYml0cykgICgodmFsKSA+PiAoYml0cykpCiAjZGVmaW5lIFNISUZUX0xPVyh2YWwsIGJpdHMpICAgKCh2YWwpIDw8IChiaXRzKSkKKyNkZWZpbmUgQklUX05SKGIpICAgICAgICAgICAgICAoNyAtIChiKSkKICNlbHNlCiAjZGVmaW5lIExFRlRfUE9TKGJwcCkgICAgICAgICAgKDApCiAjZGVmaW5lIFNISUZUX0hJR0godmFsLCBiaXRzKSAgKCh2YWwpIDw8IChiaXRzKSkKICNkZWZpbmUgU0hJRlRfTE9XKHZhbCwgYml0cykgICAoKHZhbCkgPj4gKGJpdHMpKQorI2RlZmluZSBCSVRfTlIoYikgICAgICAgICAgICAgIChiKQogI2VuZGlmCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBjb2xvcl9pbWFnZWJsaXQoY29uc3Qgc3RydWN0IGZiX2ltYWdlICppbWFnZSwgCkBAIC0xNzcsNyArMTc5LDcgQEAKIAogCQl3aGlsZSAoai0tKSB7CiAJCQlsLS07Ci0JCQljb2xvciA9ICgqcyAmICgxIDw8IGwpKSA/IGZnY29sb3IgOiBiZ2NvbG9yOworCQkJY29sb3IgPSAoKnMgJiAxIDw8IChCSVRfTlIobCkpKSA/IGZnY29sb3IgOiBiZ2NvbG9yOwogCQkJY29sb3IgPDw9IExFRlRfUE9TKGJwcCk7CiAJCQl2YWwgfD0gU0hJRlRfSElHSChjb2xvciwgc2hpZnQpOwogCQkJCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvS2NvbmZpZyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9LY29uZmlnCmluZGV4IGZhZGY3YzUuLjk0YzVmMTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9LY29uZmlnCisrKyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9LY29uZmlnCkBAIC0xMDEsNiArMTAxLDE2IEBACiAJaGVscAogCSAgTG93LWxldmVsIGZyYW1lYnVmZmVyLWJhc2VkIGNvbnNvbGUgZHJpdmVyLgogCitjb25maWcgRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTgorICAgICAgIGJvb2wgIkZyYW1lYnVmZmVyIENvbnNvbGUgUm90YXRpb24iCisgICAgICAgZGVwZW5kcyBvbiBGUkFNRUJVRkZFUl9DT05TT0xFCisgICAgICAgaGVscAorICAgICAgICAgRW5hYmxlIGRpc3BsYXkgcm90YXRpb24gZm9yIHRoZSBmcmFtZWJ1ZmZlciBjb25zb2xlLiAgVGhpcyBpcyBkb25lCisgICAgICAgICBpbiBzb2Z0d2FyZSBhbmQgbWF5IGJlIHNpZ25pZmljYW50bHkgc2xvd2VyIHRoYW4gYSBub3JtYWxseSBvcmllbnRlZAorICAgICAgICAgZGlzcGxheS4gIE5vdGUgdGhhdCB0aGUgcm90YXRpb24gaXMgZG9uZSBhdCB0aGUgY29uc29sZSBsZXZlbCBvbmx5CisgICAgICAgICBzdWNoIHRoYXQgb3RoZXIgdXNlcnMgb2YgdGhlIGZyYW1lYnVmZmVyIHdpbGwgcmVtYWluIG5vcm1hbGx5CisgICAgICAgICBvcmllbnRlZC4KKwogY29uZmlnIFNUSV9DT05TT0xFCiAgICAgICAgIHRyaXN0YXRlICJTVEkgdGV4dCBjb25zb2xlIiAKICAgICAgICAgZGVwZW5kcyBvbiBQQVJJU0MKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9NYWtlZmlsZSBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9NYWtlZmlsZQppbmRleCA1MjIyNjI4Li5mZWQ2MDBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy92aWRlby9jb25zb2xlL01ha2VmaWxlCkBAIC0zMSw2ICszMSwxMCBAQAogaWZlcSAoJChDT05GSUdfRkJfVElMRUJMSVRUSU5HKSx5KQogb2JqLSQoQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEUpICAgICArPSB0aWxlYmxpdC5vCiBlbmRpZgoraWZlcSAoJChDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTikseSkKK29iai0kKENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFKSAgICAgKz0gZmJjb25fcm90YXRlLm8gZmJjb25fY3cubyBmYmNvbl91ZC5vIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmJjb25fY2N3Lm8KK2VuZGlmCiAKIG9iai0kKENPTkZJR19GQl9TVEkpICAgICAgICAgICAgICArPSBzdGljb3JlLm8gZm9udC5vCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9iaXRibGl0LmMgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvYml0YmxpdC5jCmluZGV4IDY3ODU3YjMuLmU2NWZjM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9iaXRibGl0LmMKKysrIGIvZHJpdmVycy92aWRlby9jb25zb2xlL2JpdGJsaXQuYwpAQCAtMjIsMzUgKzIyLDYgQEAKIC8qCiAgKiBBY2NlbGVyYXRlZCBoYW5kbGVycy4KICAqLwotI2RlZmluZSBGQkNPTl9BVFRSSUJVVEVfVU5ERVJMSU5FIDEKLSNkZWZpbmUgRkJDT05fQVRUUklCVVRFX1JFVkVSU0UgICAyCi0jZGVmaW5lIEZCQ09OX0FUVFJJQlVURV9CT0xEICAgICAgNAotCi1zdGF0aWMgaW5saW5lIGludCByZWFsX3koc3RydWN0IGRpc3BsYXkgKnAsIGludCB5cG9zKQotewotCWludCByb3dzID0gcC0+dnJvd3M7Ci0KLQl5cG9zICs9IHAtPnlzY3JvbGw7Ci0JcmV0dXJuIHlwb3MgPCByb3dzID8geXBvcyA6IHlwb3MgLSByb3dzOwotfQotCi0KLXN0YXRpYyBpbmxpbmUgaW50IGdldF9hdHRyaWJ1dGUoc3RydWN0IGZiX2luZm8gKmluZm8sIHUxNiBjKQotewotCWludCBhdHRyaWJ1dGUgPSAwOwotCi0JaWYgKGZiX2dldF9jb2xvcl9kZXB0aCgmaW5mby0+dmFyLCAmaW5mby0+Zml4KSA9PSAxKSB7Ci0JCWlmIChhdHRyX3VuZGVybGluZShjKSkKLQkJCWF0dHJpYnV0ZSB8PSBGQkNPTl9BVFRSSUJVVEVfVU5ERVJMSU5FOwotCQlpZiAoYXR0cl9yZXZlcnNlKGMpKQotCQkJYXR0cmlidXRlIHw9IEZCQ09OX0FUVFJJQlVURV9SRVZFUlNFOwotCQlpZiAoYXR0cl9ib2xkKGMpKQotCQkJYXR0cmlidXRlIHw9IEZCQ09OX0FUVFJJQlVURV9CT0xEOwotCX0KLQotCXJldHVybiBhdHRyaWJ1dGU7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfYXR0cih1OCAqZHN0LCB1OCAqc3JjLCBpbnQgYXR0cmlidXRlLAogCQkJICAgICAgIHN0cnVjdCB2Y19kYXRhICp2YykKIHsKQEAgLTQxOCw2ICszODksMTggQEAKIAlvcHMtPmN1cnNvcl9yZXNldCA9IDA7CiB9CiAKK3N0YXRpYyBpbnQgYml0X3VwZGF0ZV9zdGFydChzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgZmJjb25fb3BzICpvcHMgPSBpbmZvLT5mYmNvbl9wYXI7CisJaW50IGVycjsKKworCWVyciA9IGZiX3Bhbl9kaXNwbGF5KGluZm8sICZvcHMtPnZhcik7CisJb3BzLT52YXIueG9mZnNldCA9IGluZm8tPnZhci54b2Zmc2V0OworCW9wcy0+dmFyLnlvZmZzZXQgPSBpbmZvLT52YXIueW9mZnNldDsKKwlvcHMtPnZhci52bW9kZSA9IGluZm8tPnZhci52bW9kZTsKKwlyZXR1cm4gZXJyOworfQorCiB2b2lkIGZiY29uX3NldF9iaXRvcHMoc3RydWN0IGZiY29uX29wcyAqb3BzKQogewogCW9wcy0+Ym1vdmUgPSBiaXRfYm1vdmU7CkBAIC00MjUsNiArNDA4LDExIEBACiAJb3BzLT5wdXRjcyA9IGJpdF9wdXRjczsKIAlvcHMtPmNsZWFyX21hcmdpbnMgPSBiaXRfY2xlYXJfbWFyZ2luczsKIAlvcHMtPmN1cnNvciA9IGJpdF9jdXJzb3I7CisJb3BzLT51cGRhdGVfc3RhcnQgPSBiaXRfdXBkYXRlX3N0YXJ0OworCW9wcy0+cm90YXRlX2ZvbnQgPSBOVUxMOworCisJaWYgKG9wcy0+cm90YXRlKQorCQlmYmNvbl9zZXRfcm90YXRlKG9wcyk7CiB9CiAKIEVYUE9SVF9TWU1CT0woZmJjb25fc2V0X2JpdG9wcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb24uYyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbi5jCmluZGV4IDNjZjFiNjEuLmU3ODAyZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbi5jCkBAIC0xMDcsNiArMTA3LDggQEAKIH07CiAKIHN0cnVjdCBkaXNwbGF5IGZiX2Rpc3BsYXlbTUFYX05SX0NPTlNPTEVTXTsKK0VYUE9SVF9TWU1CT0woZmJfZGlzcGxheSk7CisKIHN0YXRpYyBzaWduZWQgY2hhciBjb24yZmJfbWFwW01BWF9OUl9DT05TT0xFU107CiBzdGF0aWMgc2lnbmVkIGNoYXIgY29uMmZiX21hcF9ib290W01BWF9OUl9DT05TT0xFU107CiBzdGF0aWMgaW50IGxvZ29faGVpZ2h0OwpAQCAtMTMwLDYgKzEzMiw5IEBACiAvKiBjdXJyZW50IGZiX2luZm8gKi8KIHN0YXRpYyBpbnQgaW5mb19pZHggPSAtMTsKIAorLyogY29uc29sZSByb3RhdGlvbiAqLworc3RhdGljIGludCByb3RhdGU7CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uc3cgZmJfY29uOwogCiAjZGVmaW5lIENNX1NPRlRCQUNLCSg4KQpAQCAtMTc2LDcgKzE4MSw2IEBACiAvKgogICogIEludGVybmFsIHJvdXRpbmVzCiAgKi8KLXN0YXRpYyBfX2lubGluZV9fIGludCByZWFsX3koc3RydWN0IGRpc3BsYXkgKnAsIGludCB5cG9zKTsKIHN0YXRpYyBfX2lubGluZV9fIHZvaWQgeXdyYXBfdXAoc3RydWN0IHZjX2RhdGEgKnZjLCBpbnQgY291bnQpOwogc3RhdGljIF9faW5saW5lX18gdm9pZCB5d3JhcF9kb3duKHN0cnVjdCB2Y19kYXRhICp2YywgaW50IGNvdW50KTsKIHN0YXRpYyBfX2lubGluZV9fIHZvaWQgeXBhbl91cChzdHJ1Y3QgdmNfZGF0YSAqdmMsIGludCBjb3VudCk7CkBAIC0xODksNiArMTkzLDggQEAKIAkJCSAgICAgIGludCB1bml0KTsKIHN0YXRpYyB2b2lkIGZiY29uX3JlZHJhd19tb3ZlKHN0cnVjdCB2Y19kYXRhICp2Yywgc3RydWN0IGRpc3BsYXkgKnAsCiAJCQkgICAgICBpbnQgbGluZSwgaW50IGNvdW50LCBpbnQgZHkpOworc3RhdGljIHZvaWQgZmJjb25fbW9kZWNoYW5nZWQoc3RydWN0IGZiX2luZm8gKmluZm8pOworc3RhdGljIHZvaWQgZmJjb25fc2V0X2FsbF92Y3Moc3RydWN0IGZiX2luZm8gKmluZm8pOwogCiAjaWZkZWYgQ09ORklHX01BQwogLyoKQEAgLTIwMyw2ICsyMDksODggQEAKIH0KICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04KK3N0YXRpYyBpbmxpbmUgdm9pZCBmYmNvbl9zZXRfcm90YXRpb24oc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCBkaXNwbGF5ICpwKQoreworCXN0cnVjdCBmYmNvbl9vcHMgKm9wcyA9IGluZm8tPmZiY29uX3BhcjsKKworCWlmICghKGluZm8tPmZsYWdzICYgRkJJTkZPX01JU0NfVElMRUJMSVRUSU5HKSAmJgorCSAgICBwLT5jb25fcm90YXRlIDwgNCkKKwkJb3BzLT5yb3RhdGUgPSBwLT5jb25fcm90YXRlOworCWVsc2UKKwkJb3BzLT5yb3RhdGUgPSAwOworfQorCitzdGF0aWMgdm9pZCBmYmNvbl9yb3RhdGUoc3RydWN0IGZiX2luZm8gKmluZm8sIHUzMiByb3RhdGUpCit7CisJc3RydWN0IGZiY29uX29wcyAqb3BzPSBpbmZvLT5mYmNvbl9wYXI7CisJc3RydWN0IGZiX2luZm8gKmZiX2luZm87CisKKwlpZiAoIW9wcyB8fCBvcHMtPmN1cnJjb24gPT0gLTEpCisJCXJldHVybjsKKworCWZiX2luZm8gPSByZWdpc3RlcmVkX2ZiW2NvbjJmYl9tYXBbb3BzLT5jdXJyY29uXV07CisKKwlpZiAoaW5mbyA9PSBmYl9pbmZvKSB7CisJCXN0cnVjdCBkaXNwbGF5ICpwID0gJmZiX2Rpc3BsYXlbb3BzLT5jdXJyY29uXTsKKworCQlpZiAocm90YXRlIDwgNCkKKwkJCXAtPmNvbl9yb3RhdGUgPSByb3RhdGU7CisJCWVsc2UKKwkJCXAtPmNvbl9yb3RhdGUgPSAwOworCisJCWZiY29uX21vZGVjaGFuZ2VkKGluZm8pOworCX0KK30KKworc3RhdGljIHZvaWQgZmJjb25fcm90YXRlX2FsbChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgdTMyIHJvdGF0ZSkKK3sKKwlzdHJ1Y3QgZmJjb25fb3BzICpvcHMgPSBpbmZvLT5mYmNvbl9wYXI7CisJc3RydWN0IHZjX2RhdGEgKnZjOworCXN0cnVjdCBkaXNwbGF5ICpwOworCWludCBpOworCisJaWYgKCFvcHMgfHwgb3BzLT5jdXJyY29uIDwgMCB8fCByb3RhdGUgPiAzKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX05SX0NPTlNPTEVTOyBpKyspIHsKKwkJdmMgPSB2Y19jb25zW2ldLmQ7CisJCWlmICghdmMgfHwgdmMtPnZjX21vZGUgIT0gS0RfVEVYVCB8fAorCQkgICAgcmVnaXN0ZXJlZF9mYltjb24yZmJfbWFwW2ldXSAhPSBpbmZvKQorCQkJY29udGludWU7CisKKwkJcCA9ICZmYl9kaXNwbGF5W3ZjLT52Y19udW1dOworCQlwLT5jb25fcm90YXRlID0gcm90YXRlOworCX0KKworCWZiY29uX3NldF9hbGxfdmNzKGluZm8pOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBmYmNvbl9zZXRfcm90YXRpb24oc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCBkaXNwbGF5ICpwKQoreworCXN0cnVjdCBmYmNvbl9vcHMgKm9wcyA9IGluZm8tPmZiY29uX3BhcjsKKworCW9wcy0+cm90YXRlID0gRkJfUk9UQVRFX1VSOworfQorCitzdGF0aWMgdm9pZCBmYmNvbl9yb3RhdGUoc3RydWN0IGZiX2luZm8gKmluZm8sIHUzMiByb3RhdGUpCit7CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBmYmNvbl9yb3RhdGVfYWxsKHN0cnVjdCBmYl9pbmZvICppbmZvLCB1MzIgcm90YXRlKQoreworCXJldHVybjsKK30KKyNlbmRpZiAvKiBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiAqLworCitzdGF0aWMgaW50IGZiY29uX2dldF9yb3RhdGUoc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJc3RydWN0IGZiY29uX29wcyAqb3BzID0gaW5mby0+ZmJjb25fcGFyOworCisJcmV0dXJuIChvcHMpID8gb3BzLT5yb3RhdGUgOiAwOworfQorCiBzdGF0aWMgaW5saW5lIGludCBmYmNvbl9pc19pbmFjdGl2ZShzdHJ1Y3QgdmNfZGF0YSAqdmMsIHN0cnVjdCBmYl9pbmZvICppbmZvKQogewogCXN0cnVjdCBmYmNvbl9vcHMgKm9wcyA9IGluZm8tPmZiY29uX3BhcjsKQEAgLTQyMiw2ICs1MTAsMTQgQEAKIAkJCQlsYXN0X2ZiX3ZjID0gc2ltcGxlX3N0cnRvdWwob3B0aW9ucywgJm9wdGlvbnMsIDEwKSAtIDE7CiAJCQlmYmNvbl9pc19kZWZhdWx0ID0gMDsgCiAJCX0JCisKKwkJaWYgKCFzdHJuY21wKG9wdGlvbnMsICJyb3RhdGU6IiwgNykpIHsKKwkJCW9wdGlvbnMgKz0gNzsKKwkJCWlmICgqb3B0aW9ucykKKwkJCQlyb3RhdGUgPSBzaW1wbGVfc3RydG91bChvcHRpb25zLCAmb3B0aW9ucywgMCk7CisJCQlpZiAocm90YXRlID4gMykKKwkJCQlyb3RhdGUgPSAwOworCQl9CiAJfQogCXJldHVybiAwOwogfQpAQCAtNDgwLDYgKzU3Niw3IEBACiAJCQkgICAgICAgaW50IGNvbHMsIGludCByb3dzLCBpbnQgbmV3X2NvbHMsIGludCBuZXdfcm93cykKIHsKIAkvKiBOZWVkIHRvIG1ha2Ugcm9vbSBmb3IgdGhlIGxvZ28gKi8KKwlzdHJ1Y3QgZmJjb25fb3BzICpvcHMgPSBpbmZvLT5mYmNvbl9wYXI7CiAJaW50IGNudCwgZXJhc2UgPSB2Yy0+dmNfdmlkZW9fZXJhc2VfY2hhciwgc3RlcDsKIAl1bnNpZ25lZCBzaG9ydCAqc2F2ZSA9IE5VTEwsICpyLCAqcTsKIApAQCAtNDg5LDcgKzU4Niw3IEBACiAJICovCiAJaWYgKGZiX2dldF9jb2xvcl9kZXB0aCgmaW5mby0+dmFyLCAmaW5mby0+Zml4KSA9PSAxKQogCQllcmFzZSAmPSB+MHg0MDA7Ci0JbG9nb19oZWlnaHQgPSBmYl9wcmVwYXJlX2xvZ28oaW5mbyk7CisJbG9nb19oZWlnaHQgPSBmYl9wcmVwYXJlX2xvZ28oaW5mbywgb3BzLT5yb3RhdGUpOwogCWxvZ29fbGluZXMgPSAobG9nb19oZWlnaHQgKyB2Yy0+dmNfZm9udC5oZWlnaHQgLSAxKSAvCiAJCXZjLT52Y19mb250LmhlaWdodDsKIAlxID0gKHVuc2lnbmVkIHNob3J0ICopICh2Yy0+dmNfb3JpZ2luICsKQEAgLTU1OCwxNiArNjU1LDI0IEBACiAKIAlpZiAoKGluZm8tPmZsYWdzICYgRkJJTkZPX01JU0NfVElMRUJMSVRUSU5HKSkKIAkJZmJjb25fc2V0X3RpbGVvcHModmMsIGluZm8sIHAsIG9wcyk7Ci0JZWxzZQorCWVsc2UgeworCQlzdHJ1Y3QgZGlzcGxheSAqZGlzcDsKKworCQlkaXNwID0gKHApID8gcCA6ICZmYl9kaXNwbGF5W3ZjLT52Y19udW1dOworCQlmYmNvbl9zZXRfcm90YXRpb24oaW5mbywgZGlzcCk7CiAJCWZiY29uX3NldF9iaXRvcHMob3BzKTsKKwl9CiB9CiAjZWxzZQogc3RhdGljIHZvaWQgc2V0X2JsaXR0aW5nX3R5cGUoc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKIAkJCSAgICAgIHN0cnVjdCBkaXNwbGF5ICpwKQogewogCXN0cnVjdCBmYmNvbl9vcHMgKm9wcyA9IGluZm8tPmZiY29uX3BhcjsKKwlzdHJ1Y3QgZGlzcGxheSAqZGlzcDsKIAogCWluZm8tPmZsYWdzICY9IH5GQklORk9fTUlTQ19USUxFQkxJVFRJTkc7CisJZGlzcCA9IChwKSA/IHAgOiAmZmJfZGlzcGxheVt2Yy0+dmNfbnVtXTsKKwlmYmNvbl9zZXRfcm90YXRpb24oaW5mbywgZGlzcCk7CiAJZmJjb25fc2V0X2JpdG9wcyhvcHMpOwogfQogI2VuZGlmIC8qIENPTkZJR19NSVNDX1RJTEVCTElUVElORyAqLwpAQCAtNjI3LDYgKzczMiw3IEBACiAJCWZiY29uX2RlbF9jdXJzb3JfdGltZXIob2xkaW5mbyk7CiAJCWtmcmVlKG9wcy0+Y3Vyc29yX3N0YXRlLm1hc2spOwogCQlrZnJlZShvcHMtPmN1cnNvcl9kYXRhKTsKKwkJa2ZyZWUob3BzLT5mb250YnVmZmVyKTsKIAkJa2ZyZWUob2xkaW5mby0+ZmJjb25fcGFyKTsKIAkJb2xkaW5mby0+ZmJjb25fcGFyID0gTlVMTDsKIAkJbW9kdWxlX3B1dChvbGRpbmZvLT5mYm9wcy0+b3duZXIpOwpAQCAtODI3LDcgKzkzMyw5IEBACiAJbWVtc2V0KG9wcywgMCwgc2l6ZW9mKHN0cnVjdCBmYmNvbl9vcHMpKTsKIAlvcHMtPmN1cnJjb24gPSAtMTsKIAlvcHMtPmdyYXBoaWNzID0gMTsKKwlvcHMtPmN1cl9yb3RhdGUgPSAtMTsKIAlpbmZvLT5mYmNvbl9wYXIgPSBvcHM7CisJcC0+Y29uX3JvdGF0ZSA9IHJvdGF0ZTsKIAlzZXRfYmxpdHRpbmdfdHlwZSh2YywgaW5mbywgTlVMTCk7CiAKIAlpZiAoaW5mby0+Zml4LnR5cGUgIT0gRkJfVFlQRV9URVhUKSB7CkBAIC04NjYsOCArOTc0LDEwIEBACiAJCXZjLT52Y19mb250LmNoYXJjb3VudCA9IDI1NjsgLyogRklYTUUgIE5lZWQgdG8gc3VwcG9ydCBtb3JlIGZvbnRzICovCiAJfQogCi0JY29scyA9IGluZm8tPnZhci54cmVzIC8gdmMtPnZjX2ZvbnQud2lkdGg7Ci0Jcm93cyA9IGluZm8tPnZhci55cmVzIC8gdmMtPnZjX2ZvbnQuaGVpZ2h0OworCWNvbHMgPSBGQkNPTl9TV0FQKG9wcy0+cm90YXRlLCBpbmZvLT52YXIueHJlcywgaW5mby0+dmFyLnlyZXMpOworCXJvd3MgPSBGQkNPTl9TV0FQKG9wcy0+cm90YXRlLCBpbmZvLT52YXIueXJlcywgaW5mby0+dmFyLnhyZXMpOworCWNvbHMgLz0gdmMtPnZjX2ZvbnQud2lkdGg7CisJcm93cyAvPSB2Yy0+dmNfZm9udC5oZWlnaHQ7CiAJdmNfcmVzaXplKHZjLCBjb2xzLCByb3dzKTsKIAogCURQUklOVEsoIm1vZGU6ICAgJXNcbiIsIGluZm8tPmZpeC5pZCk7CkBAIC05NTMsOCArMTA2Myw2IEBACiAJICAgIChpbmZvLT5maXgudHlwZSA9PSBGQl9UWVBFX1RFWFQpKQogCQlsb2dvID0gMDsKIAotCWluZm8tPnZhci54b2Zmc2V0ID0gaW5mby0+dmFyLnlvZmZzZXQgPSBwLT55c2Nyb2xsID0gMDsJLyogcmVzZXQgd3JhcC9wYW4gKi8KLQogCWlmICh2YXJfdG9fZGlzcGxheShwLCAmaW5mby0+dmFyLCBpbmZvKSkKIAkJcmV0dXJuOwogCkBAIC05ODYsMTMgKzEwOTQsMTggQEAKIAlpZiAoISp2Yy0+dmNfdW5pX3BhZ2VkaXJfbG9jKQogCQljb25fY29weV91bmltYXAodmMsIHN2Yyk7CiAKKwlvcHMgPSBpbmZvLT5mYmNvbl9wYXI7CisJcC0+Y29uX3JvdGF0ZSA9IHJvdGF0ZTsKKwlzZXRfYmxpdHRpbmdfdHlwZSh2YywgaW5mbywgTlVMTCk7CisKIAljb2xzID0gdmMtPnZjX2NvbHM7CiAJcm93cyA9IHZjLT52Y19yb3dzOwotCW5ld19jb2xzID0gaW5mby0+dmFyLnhyZXMgLyB2Yy0+dmNfZm9udC53aWR0aDsKLQluZXdfcm93cyA9IGluZm8tPnZhci55cmVzIC8gdmMtPnZjX2ZvbnQuaGVpZ2h0OworCW5ld19jb2xzID0gRkJDT05fU1dBUChvcHMtPnJvdGF0ZSwgaW5mby0+dmFyLnhyZXMsIGluZm8tPnZhci55cmVzKTsKKwluZXdfcm93cyA9IEZCQ09OX1NXQVAob3BzLT5yb3RhdGUsIGluZm8tPnZhci55cmVzLCBpbmZvLT52YXIueHJlcyk7CisJbmV3X2NvbHMgLz0gdmMtPnZjX2ZvbnQud2lkdGg7CisJbmV3X3Jvd3MgLz0gdmMtPnZjX2ZvbnQuaGVpZ2h0OwogCXZjX3Jlc2l6ZSh2YywgbmV3X2NvbHMsIG5ld19yb3dzKTsKIAotCW9wcyA9IGluZm8tPmZiY29uX3BhcjsKIAkvKgogCSAqIFdlIG11c3QgYWx3YXlzIHNldCB0aGUgbW9kZS4gVGhlIG1vZGUgb2YgdGhlIHByZXZpb3VzIGNvbnNvbGUKIAkgKiBkcml2ZXIgY291bGQgYmUgaW4gdGhlIHNhbWUgcmVzb2x1dGlvbiBidXQgd2UgYXJlIHVzaW5nIGRpZmZlcmVudApAQCAtMTAzMCw2ICsxMTQzLDEyIEBACiAKIAlpZiAodmMgPT0gc3ZjICYmIHNvZnRiYWNrX2J1ZikKIAkJZmJjb25fdXBkYXRlX3NvZnRiYWNrKHZjKTsKKworCWlmIChvcHMtPnJvdGF0ZV9mb250ICYmIG9wcy0+cm90YXRlX2ZvbnQoaW5mbywgdmMsIHApKSB7CisJCW9wcy0+cm90YXRlID0gRkJfUk9UQVRFX1VSOworCQlzZXRfYmxpdHRpbmdfdHlwZSh2YywgaW5mbywgcCk7CisJfQorCiB9CiAKIHN0YXRpYyB2b2lkIGZiY29uX2RlaW5pdChzdHJ1Y3QgdmNfZGF0YSAqdmMpCkBAIC0xMDY2LDE1ICsxMTg1LDYgQEAKICAqICByZXN0cmljdGlvbiBpcyBzaW1wbGljaXR5ICYgZWZmaWNpZW5jeSBhdCB0aGUgbW9tZW50LgogICovCiAKLXN0YXRpYyBfX2lubGluZV9fIGludCByZWFsX3koc3RydWN0IGRpc3BsYXkgKnAsIGludCB5cG9zKQotewotCWludCByb3dzID0gcC0+dnJvd3M7Ci0KLQl5cG9zICs9IHAtPnlzY3JvbGw7Ci0JcmV0dXJuIHlwb3MgPCByb3dzID8geXBvcyA6IHlwb3MgLSByb3dzOwotfQotCi0KIHN0YXRpYyB2b2lkIGZiY29uX2NsZWFyKHN0cnVjdCB2Y19kYXRhICp2YywgaW50IHN5LCBpbnQgc3gsIGludCBoZWlnaHQsCiAJCQlpbnQgd2lkdGgpCiB7CkBAIC0xMTYyLDEzICsxMjcyLDYgQEAKIHN0YXRpYyBpbnQgc2Nyb2xsYmFja19tYXggPSAwOwogc3RhdGljIGludCBzY3JvbGxiYWNrX2N1cnJlbnQgPSAwOwogCi1zdGF0aWMgaW50IHVwZGF0ZV92YXIoaW50IGNvbiwgc3RydWN0IGZiX2luZm8gKmluZm8pCi17Ci0JaWYgKGNvbiA9PSAoKHN0cnVjdCBmYmNvbl9vcHMgKilpbmZvLT5mYmNvbl9wYXIpLT5jdXJyY29uKQotCQlyZXR1cm4gZmJfcGFuX2Rpc3BsYXkoaW5mbywgJmluZm8tPnZhcik7Ci0JcmV0dXJuIDA7Ci19Ci0KIC8qCiAgKiBJZiBubyB2YyBpcyBleGlzdGVudCB5ZXQsIGp1c3Qgc2V0IHN0cnVjdCBkaXNwbGF5CiAgKi8KQEAgLTExNzgsNyArMTI4MSw2IEBACiAJc3RydWN0IGRpc3BsYXkgKnAgPSAmZmJfZGlzcGxheVt1bml0XTsKIAlzdHJ1Y3QgZGlzcGxheSAqdCA9ICZmYl9kaXNwbGF5W2ZnX2NvbnNvbGVdOwogCi0JdmFyLT54b2Zmc2V0ID0gdmFyLT55b2Zmc2V0ID0gcC0+eXNjcm9sbCA9IDA7CiAJaWYgKHZhcl90b19kaXNwbGF5KHAsIHZhciwgaW5mbykpCiAJCXJldHVybjsKIApAQCAtMTE5NCw5ICsxMjk2LDkgQEAKIAlzdHJ1Y3QgZGlzcGxheSAqcCA9ICZmYl9kaXNwbGF5W3ZjLT52Y19udW1dLCAqdDsKIAlzdHJ1Y3QgdmNfZGF0YSAqKmRlZmF1bHRfbW9kZSA9IHZjLT52Y19kaXNwbGF5X2ZnOwogCXN0cnVjdCB2Y19kYXRhICpzdmMgPSAqZGVmYXVsdF9tb2RlOworCXN0cnVjdCBmYmNvbl9vcHMgKm9wcyA9IGluZm8tPmZiY29uX3BhcjsKIAlpbnQgcm93cywgY29scywgY2hhcmNudCA9IDI1NjsKIAotCXZhci0+eG9mZnNldCA9IHZhci0+eW9mZnNldCA9IHAtPnlzY3JvbGwgPSAwOwogCWlmICh2YXJfdG9fZGlzcGxheShwLCB2YXIsIGluZm8pKQogCQlyZXR1cm47CiAJdCA9ICZmYl9kaXNwbGF5W3N2Yy0+dmNfbnVtXTsKQEAgLTEyMTMsOSArMTMxNSwxMCBAQAogCiAJdmFyLT5hY3RpdmF0ZSA9IEZCX0FDVElWQVRFX05PVzsKIAlpbmZvLT52YXIuYWN0aXZhdGUgPSB2YXItPmFjdGl2YXRlOwotCWluZm8tPnZhci55b2Zmc2V0ID0gaW5mby0+dmFyLnhvZmZzZXQgPSAwOworCXZhci0+eW9mZnNldCA9IGluZm8tPnZhci55b2Zmc2V0OworCXZhci0+eG9mZnNldCA9IGluZm8tPnZhci54b2Zmc2V0OwogCWZiX3NldF92YXIoaW5mbywgdmFyKTsKLQorCW9wcy0+dmFyID0gaW5mby0+dmFyOwogCXZjLT52Y19jYW5fZG9fY29sb3IgPSAoZmJfZ2V0X2NvbG9yX2RlcHRoKCZpbmZvLT52YXIsICZpbmZvLT5maXgpIT0xKTsKIAl2Yy0+dmNfY29tcGxlbWVudF9tYXNrID0gdmMtPnZjX2Nhbl9kb19jb2xvciA/IDB4NzcwMCA6IDB4MDgwMDsKIAlpZiAoY2hhcmNudCA9PSAyNTYpIHsKQEAgLTEyMzEsOSArMTMzNCwxMiBAQAogCWlmICghKnZjLT52Y191bmlfcGFnZWRpcl9sb2MpCiAJCWNvbl9jb3B5X3VuaW1hcCh2Yywgc3ZjKTsKIAotCWNvbHMgPSB2YXItPnhyZXMgLyB2Yy0+dmNfZm9udC53aWR0aDsKLQlyb3dzID0gdmFyLT55cmVzIC8gdmMtPnZjX2ZvbnQuaGVpZ2h0OworCWNvbHMgPSBGQkNPTl9TV0FQKG9wcy0+cm90YXRlLCBpbmZvLT52YXIueHJlcywgaW5mby0+dmFyLnlyZXMpOworCXJvd3MgPSBGQkNPTl9TV0FQKG9wcy0+cm90YXRlLCBpbmZvLT52YXIueXJlcywgaW5mby0+dmFyLnhyZXMpOworCWNvbHMgLz0gdmMtPnZjX2ZvbnQud2lkdGg7CisJcm93cyAvPSB2Yy0+dmNfZm9udC5oZWlnaHQ7CiAJdmNfcmVzaXplKHZjLCBjb2xzLCByb3dzKTsKKwogCWlmIChDT05fSVNfVklTSUJMRSh2YykpIHsKIAkJdXBkYXRlX3NjcmVlbih2Yyk7CiAJCWlmIChzb2Z0YmFja19idWYpCkBAIC0xMjQ0LDE1ICsxMzUwLDE2IEBACiBzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHl3cmFwX3VwKHN0cnVjdCB2Y19kYXRhICp2YywgaW50IGNvdW50KQogewogCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcmVnaXN0ZXJlZF9mYltjb24yZmJfbWFwW3ZjLT52Y19udW1dXTsKKwlzdHJ1Y3QgZmJjb25fb3BzICpvcHMgPSBpbmZvLT5mYmNvbl9wYXI7CiAJc3RydWN0IGRpc3BsYXkgKnAgPSAmZmJfZGlzcGxheVt2Yy0+dmNfbnVtXTsKIAkKIAlwLT55c2Nyb2xsICs9IGNvdW50OwogCWlmIChwLT55c2Nyb2xsID49IHAtPnZyb3dzKQkvKiBEZWFsIHdpdGggd3JhcCAqLwogCQlwLT55c2Nyb2xsIC09IHAtPnZyb3dzOwotCWluZm8tPnZhci54b2Zmc2V0ID0gMDsKLQlpbmZvLT52YXIueW9mZnNldCA9IHAtPnlzY3JvbGwgKiB2Yy0+dmNfZm9udC5oZWlnaHQ7Ci0JaW5mby0+dmFyLnZtb2RlIHw9IEZCX1ZNT0RFX1lXUkFQOwotCXVwZGF0ZV92YXIodmMtPnZjX251bSwgaW5mbyk7CisJb3BzLT52YXIueG9mZnNldCA9IDA7CisJb3BzLT52YXIueW9mZnNldCA9IHAtPnlzY3JvbGwgKiB2Yy0+dmNfZm9udC5oZWlnaHQ7CisJb3BzLT52YXIudm1vZGUgfD0gRkJfVk1PREVfWVdSQVA7CisJb3BzLT51cGRhdGVfc3RhcnQoaW5mbyk7CiAJc2Nyb2xsYmFja19tYXggKz0gY291bnQ7CiAJaWYgKHNjcm9sbGJhY2tfbWF4ID4gc2Nyb2xsYmFja19waHlzX21heCkKIAkJc2Nyb2xsYmFja19tYXggPSBzY3JvbGxiYWNrX3BoeXNfbWF4OwpAQCAtMTI2MiwxNSArMTM2OSwxNiBAQAogc3RhdGljIF9faW5saW5lX18gdm9pZCB5d3JhcF9kb3duKHN0cnVjdCB2Y19kYXRhICp2YywgaW50IGNvdW50KQogewogCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcmVnaXN0ZXJlZF9mYltjb24yZmJfbWFwW3ZjLT52Y19udW1dXTsKKwlzdHJ1Y3QgZmJjb25fb3BzICpvcHMgPSBpbmZvLT5mYmNvbl9wYXI7CiAJc3RydWN0IGRpc3BsYXkgKnAgPSAmZmJfZGlzcGxheVt2Yy0+dmNfbnVtXTsKIAkKIAlwLT55c2Nyb2xsIC09IGNvdW50OwogCWlmIChwLT55c2Nyb2xsIDwgMCkJLyogRGVhbCB3aXRoIHdyYXAgKi8KIAkJcC0+eXNjcm9sbCArPSBwLT52cm93czsKLQlpbmZvLT52YXIueG9mZnNldCA9IDA7Ci0JaW5mby0+dmFyLnlvZmZzZXQgPSBwLT55c2Nyb2xsICogdmMtPnZjX2ZvbnQuaGVpZ2h0OwotCWluZm8tPnZhci52bW9kZSB8PSBGQl9WTU9ERV9ZV1JBUDsKLQl1cGRhdGVfdmFyKHZjLT52Y19udW0sIGluZm8pOworCW9wcy0+dmFyLnhvZmZzZXQgPSAwOworCW9wcy0+dmFyLnlvZmZzZXQgPSBwLT55c2Nyb2xsICogdmMtPnZjX2ZvbnQuaGVpZ2h0OworCW9wcy0+dmFyLnZtb2RlIHw9IEZCX1ZNT0RFX1lXUkFQOworCW9wcy0+dXBkYXRlX3N0YXJ0KGluZm8pOwogCXNjcm9sbGJhY2tfbWF4IC09IGNvdW50OwogCWlmIChzY3JvbGxiYWNrX21heCA8IDApCiAJCXNjcm9sbGJhY2tfbWF4ID0gMDsKQEAgLTEyODksMTAgKzEzOTcsMTEgQEAKIAkJCSAgICAwLCAwLCAwLCB2Yy0+dmNfcm93cywgdmMtPnZjX2NvbHMpOwogCQlwLT55c2Nyb2xsIC09IHAtPnZyb3dzIC0gdmMtPnZjX3Jvd3M7CiAJfQotCWluZm8tPnZhci54b2Zmc2V0ID0gMDsKLQlpbmZvLT52YXIueW9mZnNldCA9IHAtPnlzY3JvbGwgKiB2Yy0+dmNfZm9udC5oZWlnaHQ7Ci0JaW5mby0+dmFyLnZtb2RlICY9IH5GQl9WTU9ERV9ZV1JBUDsKLQl1cGRhdGVfdmFyKHZjLT52Y19udW0sIGluZm8pOworCisJb3BzLT52YXIueG9mZnNldCA9IDA7CisJb3BzLT52YXIueW9mZnNldCA9IHAtPnlzY3JvbGwgKiB2Yy0+dmNfZm9udC5oZWlnaHQ7CisJb3BzLT52YXIudm1vZGUgJj0gfkZCX1ZNT0RFX1lXUkFQOworCW9wcy0+dXBkYXRlX3N0YXJ0KGluZm8pOwogCWZiY29uX2NsZWFyX21hcmdpbnModmMsIDEpOwogCXNjcm9sbGJhY2tfbWF4ICs9IGNvdW50OwogCWlmIChzY3JvbGxiYWNrX21heCA+IHNjcm9sbGJhY2tfcGh5c19tYXgpCkBAIC0xMzAzLDYgKzE0MTIsNyBAQAogc3RhdGljIF9faW5saW5lX18gdm9pZCB5cGFuX3VwX3JlZHJhdyhzdHJ1Y3QgdmNfZGF0YSAqdmMsIGludCB0LCBpbnQgY291bnQpCiB7CiAJc3RydWN0IGZiX2luZm8gKmluZm8gPSByZWdpc3RlcmVkX2ZiW2NvbjJmYl9tYXBbdmMtPnZjX251bV1dOworCXN0cnVjdCBmYmNvbl9vcHMgKm9wcyA9IGluZm8tPmZiY29uX3BhcjsKIAlzdHJ1Y3QgZGlzcGxheSAqcCA9ICZmYl9kaXNwbGF5W3ZjLT52Y19udW1dOwogCWludCByZWRyYXcgPSAwOwogCkBAIC0xMzEyLDEyICsxNDIyLDEzIEBACiAJCXJlZHJhdyA9IDE7CiAJfQogCi0JaW5mby0+dmFyLnhvZmZzZXQgPSAwOwotCWluZm8tPnZhci55b2Zmc2V0ID0gcC0+eXNjcm9sbCAqIHZjLT52Y19mb250LmhlaWdodDsKLQlpbmZvLT52YXIudm1vZGUgJj0gfkZCX1ZNT0RFX1lXUkFQOwogCWlmIChyZWRyYXcpCiAJCWZiY29uX3JlZHJhd19tb3ZlKHZjLCBwLCB0ICsgY291bnQsIHZjLT52Y19yb3dzIC0gY291bnQsIHQpOwotCXVwZGF0ZV92YXIodmMtPnZjX251bSwgaW5mbyk7CisKKwlvcHMtPnZhci54b2Zmc2V0ID0gMDsKKwlvcHMtPnZhci55b2Zmc2V0ID0gcC0+eXNjcm9sbCAqIHZjLT52Y19mb250LmhlaWdodDsKKwlvcHMtPnZhci52bW9kZSAmPSB+RkJfVk1PREVfWVdSQVA7CisJb3BzLT51cGRhdGVfc3RhcnQoaW5mbyk7CiAJZmJjb25fY2xlYXJfbWFyZ2lucyh2YywgMSk7CiAJc2Nyb2xsYmFja19tYXggKz0gY291bnQ7CiAJaWYgKHNjcm9sbGJhY2tfbWF4ID4gc2Nyb2xsYmFja19waHlzX21heCkKQEAgLTEzMzcsMTAgKzE0NDgsMTEgQEAKIAkJCSAgICAwLCB2Yy0+dmNfcm93cywgdmMtPnZjX2NvbHMpOwogCQlwLT55c2Nyb2xsICs9IHAtPnZyb3dzIC0gdmMtPnZjX3Jvd3M7CiAJfQotCWluZm8tPnZhci54b2Zmc2V0ID0gMDsKLQlpbmZvLT52YXIueW9mZnNldCA9IHAtPnlzY3JvbGwgKiB2Yy0+dmNfZm9udC5oZWlnaHQ7Ci0JaW5mby0+dmFyLnZtb2RlICY9IH5GQl9WTU9ERV9ZV1JBUDsKLQl1cGRhdGVfdmFyKHZjLT52Y19udW0sIGluZm8pOworCisJb3BzLT52YXIueG9mZnNldCA9IDA7CisJb3BzLT52YXIueW9mZnNldCA9IHAtPnlzY3JvbGwgKiB2Yy0+dmNfZm9udC5oZWlnaHQ7CisJb3BzLT52YXIudm1vZGUgJj0gfkZCX1ZNT0RFX1lXUkFQOworCW9wcy0+dXBkYXRlX3N0YXJ0KGluZm8pOwogCWZiY29uX2NsZWFyX21hcmdpbnModmMsIDEpOwogCXNjcm9sbGJhY2tfbWF4IC09IGNvdW50OwogCWlmIChzY3JvbGxiYWNrX21heCA8IDApCkBAIC0xMzUxLDYgKzE0NjMsNyBAQAogc3RhdGljIF9faW5saW5lX18gdm9pZCB5cGFuX2Rvd25fcmVkcmF3KHN0cnVjdCB2Y19kYXRhICp2YywgaW50IHQsIGludCBjb3VudCkKIHsKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHJlZ2lzdGVyZWRfZmJbY29uMmZiX21hcFt2Yy0+dmNfbnVtXV07CisJc3RydWN0IGZiY29uX29wcyAqb3BzID0gaW5mby0+ZmJjb25fcGFyOwogCXN0cnVjdCBkaXNwbGF5ICpwID0gJmZiX2Rpc3BsYXlbdmMtPnZjX251bV07CiAJaW50IHJlZHJhdyA9IDA7CiAKQEAgLTEzNTksMTIgKzE0NzIsMTQgQEAKIAkJcC0+eXNjcm9sbCArPSBwLT52cm93cyAtIHZjLT52Y19yb3dzOwogCQlyZWRyYXcgPSAxOwogCX0KLQlpbmZvLT52YXIueG9mZnNldCA9IDA7Ci0JaW5mby0+dmFyLnlvZmZzZXQgPSBwLT55c2Nyb2xsICogdmMtPnZjX2ZvbnQuaGVpZ2h0OwotCWluZm8tPnZhci52bW9kZSAmPSB+RkJfVk1PREVfWVdSQVA7CisKIAlpZiAocmVkcmF3KQogCQlmYmNvbl9yZWRyYXdfbW92ZSh2YywgcCwgdCwgdmMtPnZjX3Jvd3MgLSBjb3VudCwgdCArIGNvdW50KTsKLQl1cGRhdGVfdmFyKHZjLT52Y19udW0sIGluZm8pOworCisJb3BzLT52YXIueG9mZnNldCA9IDA7CisJb3BzLT52YXIueW9mZnNldCA9IHAtPnlzY3JvbGwgKiB2Yy0+dmNfZm9udC5oZWlnaHQ7CisJb3BzLT52YXIudm1vZGUgJj0gfkZCX1ZNT0RFX1lXUkFQOworCW9wcy0+dXBkYXRlX3N0YXJ0KGluZm8pOwogCWZiY29uX2NsZWFyX21hcmdpbnModmMsIDEpOwogCXNjcm9sbGJhY2tfbWF4IC09IGNvdW50OwogCWlmIChzY3JvbGxiYWNrX21heCA8IDApCkBAIC0xODM4LDMxICsxOTUzLDQxIEBACiAJCSAgIGhlaWdodCwgd2lkdGgpOwogfQogCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIHVwZGF0ZXNjcm9sbG1vZGUoc3RydWN0IGRpc3BsYXkgKnAsIHN0cnVjdCBmYl9pbmZvICppbmZvLAorc3RhdGljIF9faW5saW5lX18gdm9pZCB1cGRhdGVzY3JvbGxtb2RlKHN0cnVjdCBkaXNwbGF5ICpwLAorCQkJCQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKIAkJCQkJc3RydWN0IHZjX2RhdGEgKnZjKQogeworCXN0cnVjdCBmYmNvbl9vcHMgKm9wcyA9IGluZm8tPmZiY29uX3BhcjsKIAlpbnQgZmggPSB2Yy0+dmNfZm9udC5oZWlnaHQ7CiAJaW50IGNhcCA9IGluZm8tPmZsYWdzOwotCWludCBnb29kX3BhbiA9IChjYXAgJiBGQklORk9fSFdBQ0NFTF9ZUEFOKQotCQkgJiYgZGl2aWRlcyhpbmZvLT5maXgueXBhbnN0ZXAsIHZjLT52Y19mb250LmhlaWdodCkKLQkJICYmIGluZm8tPnZhci55cmVzX3ZpcnR1YWwgPiBpbmZvLT52YXIueXJlczsKLQlpbnQgZ29vZF93cmFwID0gKGNhcCAmIEZCSU5GT19IV0FDQ0VMX1lXUkFQKQotCQkgJiYgZGl2aWRlcyhpbmZvLT5maXgueXdyYXBzdGVwLCB2Yy0+dmNfZm9udC5oZWlnaHQpCi0JCSAmJiBkaXZpZGVzKHZjLT52Y19mb250LmhlaWdodCwgaW5mby0+dmFyLnlyZXNfdmlydHVhbCk7CisJdTE2IHQgPSAwOworCWludCB5cGFuID0gRkJDT05fU1dBUChvcHMtPnJvdGF0ZSwgaW5mby0+Zml4LnlwYW5zdGVwLAorCQkJCSAgaW5mby0+Zml4LnhwYW5zdGVwKTsKKwlpbnQgeXdyYXAgPSBGQkNPTl9TV0FQKG9wcy0+cm90YXRlLCBpbmZvLT5maXgueXdyYXBzdGVwLCB0KTsKKwlpbnQgeXJlcyA9IEZCQ09OX1NXQVAob3BzLT5yb3RhdGUsIGluZm8tPnZhci55cmVzLCBpbmZvLT52YXIueHJlcyk7CisJaW50IHZ5cmVzID0gRkJDT05fU1dBUChvcHMtPnJvdGF0ZSwgaW5mby0+dmFyLnlyZXNfdmlydHVhbCwKKwkJCQkgICBpbmZvLT52YXIueHJlc192aXJ0dWFsKTsKKwlpbnQgZ29vZF9wYW4gPSAoY2FwICYgRkJJTkZPX0hXQUNDRUxfWVBBTikgJiYKKwkJZGl2aWRlcyh5cGFuLCB2Yy0+dmNfZm9udC5oZWlnaHQpICYmIHZ5cmVzID4geXJlczsKKwlpbnQgZ29vZF93cmFwID0gKGNhcCAmIEZCSU5GT19IV0FDQ0VMX1lXUkFQKSAmJgorCQlkaXZpZGVzKHl3cmFwLCB2Yy0+dmNfZm9udC5oZWlnaHQpICYmCisJCWRpdmlkZXModmMtPnZjX2ZvbnQuaGVpZ2h0LCB2eXJlcyk7CiAJaW50IHJlYWRpbmdfZmFzdCA9IGNhcCAmIEZCSU5GT19SRUFEU19GQVNUOwotCWludCBmYXN0X2NvcHlhcmVhID0gKGNhcCAmIEZCSU5GT19IV0FDQ0VMX0NPUFlBUkVBKSAmJiAhKGNhcCAmIEZCSU5GT19IV0FDQ0VMX0RJU0FCTEVEKTsKLQlpbnQgZmFzdF9pbWFnZWJsaXQgPSAoY2FwICYgRkJJTkZPX0hXQUNDRUxfSU1BR0VCTElUKSAmJiAhKGNhcCAmIEZCSU5GT19IV0FDQ0VMX0RJU0FCTEVEKTsKKwlpbnQgZmFzdF9jb3B5YXJlYSA9IChjYXAgJiBGQklORk9fSFdBQ0NFTF9DT1BZQVJFQSkgJiYKKwkJIShjYXAgJiBGQklORk9fSFdBQ0NFTF9ESVNBQkxFRCk7CisJaW50IGZhc3RfaW1hZ2VibGl0ID0gKGNhcCAmIEZCSU5GT19IV0FDQ0VMX0lNQUdFQkxJVCkgJiYKKwkJIShjYXAgJiBGQklORk9fSFdBQ0NFTF9ESVNBQkxFRCk7CiAKLQlwLT52cm93cyA9IGluZm8tPnZhci55cmVzX3ZpcnR1YWwvZmg7Ci0JaWYgKGluZm8tPnZhci55cmVzID4gKGZoICogKHZjLT52Y19yb3dzICsgMSkpKQotCQlwLT52cm93cyAtPSAoaW5mby0+dmFyLnlyZXMgLSAoZmggKiB2Yy0+dmNfcm93cykpIC8gZmg7Ci0JaWYgKChpbmZvLT52YXIueXJlcyAlIGZoKSAmJiAoaW5mby0+dmFyLnlyZXNfdmlydHVhbCAlIGZoIDwKLQkJCQkgICAgICBpbmZvLT52YXIueXJlcyAlIGZoKSkKKwlwLT52cm93cyA9IHZ5cmVzL2ZoOworCWlmICh5cmVzID4gKGZoICogKHZjLT52Y19yb3dzICsgMSkpKQorCQlwLT52cm93cyAtPSAoeXJlcyAtIChmaCAqIHZjLT52Y19yb3dzKSkgLyBmaDsKKwlpZiAoKHlyZXMgJSBmaCkgJiYgKHZ5cmVzICUgZmggPCB5cmVzICUgZmgpKQogCQlwLT52cm93cy0tOwogCiAJaWYgKGdvb2Rfd3JhcCB8fCBnb29kX3BhbikgewogCQlpZiAocmVhZGluZ19mYXN0IHx8IGZhc3RfY29weWFyZWEpCi0JCQlwLT5zY3JvbGxtb2RlID0gZ29vZF93cmFwID8gU0NST0xMX1dSQVBfTU9WRSA6IFNDUk9MTF9QQU5fTU9WRTsKKwkJCXAtPnNjcm9sbG1vZGUgPSBnb29kX3dyYXAgPworCQkJCVNDUk9MTF9XUkFQX01PVkUgOiBTQ1JPTExfUEFOX01PVkU7CiAJCWVsc2UKIAkJCXAtPnNjcm9sbG1vZGUgPSBnb29kX3dyYXAgPyBTQ1JPTExfUkVEUkFXIDoKIAkJCQlTQ1JPTExfUEFOX1JFRFJBVzsKQEAgLTE4NzgsMTcgKzIwMDMsMjMgQEAKIAkJCXVuc2lnbmVkIGludCBoZWlnaHQpCiB7CiAJc3RydWN0IGZiX2luZm8gKmluZm8gPSByZWdpc3RlcmVkX2ZiW2NvbjJmYl9tYXBbdmMtPnZjX251bV1dOworCXN0cnVjdCBmYmNvbl9vcHMgKm9wcyA9IGluZm8tPmZiY29uX3BhcjsKIAlzdHJ1Y3QgZGlzcGxheSAqcCA9ICZmYl9kaXNwbGF5W3ZjLT52Y19udW1dOwogCXN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyB2YXIgPSBpbmZvLT52YXI7Ci0JaW50IHhfZGlmZiwgeV9kaWZmOwotCWludCBmdyA9IHZjLT52Y19mb250LndpZHRoOwotCWludCBmaCA9IHZjLT52Y19mb250LmhlaWdodDsKKwlpbnQgeF9kaWZmLCB5X2RpZmYsIHZpcnRfdywgdmlydF9oLCB2aXJ0X2Z3LCB2aXJ0X2ZoOwogCi0JdmFyLnhyZXMgPSB3aWR0aCAqIGZ3OwotCXZhci55cmVzID0gaGVpZ2h0ICogZmg7CisJdmlydF93ID0gRkJDT05fU1dBUChvcHMtPnJvdGF0ZSwgd2lkdGgsIGhlaWdodCk7CisJdmlydF9oID0gRkJDT05fU1dBUChvcHMtPnJvdGF0ZSwgaGVpZ2h0LCB3aWR0aCk7CisJdmlydF9mdyA9IEZCQ09OX1NXQVAob3BzLT5yb3RhdGUsIHZjLT52Y19mb250LndpZHRoLAorCQkJCSB2Yy0+dmNfZm9udC5oZWlnaHQpOworCXZpcnRfZmggPSBGQkNPTl9TV0FQKG9wcy0+cm90YXRlLCB2Yy0+dmNfZm9udC5oZWlnaHQsCisJCQkJIHZjLT52Y19mb250LndpZHRoKTsKKwl2YXIueHJlcyA9IHZpcnRfdyAqIHZpcnRfZnc7CisJdmFyLnlyZXMgPSB2aXJ0X2ggKiB2aXJ0X2ZoOwogCXhfZGlmZiA9IGluZm8tPnZhci54cmVzIC0gdmFyLnhyZXM7CiAJeV9kaWZmID0gaW5mby0+dmFyLnlyZXMgLSB2YXIueXJlczsKLQlpZiAoeF9kaWZmIDwgMCB8fCB4X2RpZmYgPiBmdyB8fCAoeV9kaWZmIDwgMCB8fCB5X2RpZmYgPiBmaCkpIHsKKwlpZiAoeF9kaWZmIDwgMCB8fCB4X2RpZmYgPiB2aXJ0X2Z3IHx8CisJICAgIHlfZGlmZiA8IDAgfHwgeV9kaWZmID4gdmlydF9maCkgewogCQlzdHJ1Y3QgZmJfdmlkZW9tb2RlICptb2RlOwogCiAJCURQUklOVEsoImF0dGVtcHRpbmcgcmVzaXplICVpeCVpXG4iLCB2YXIueHJlcywgdmFyLnlyZXMpOwpAQCAtMTg5OCw3ICsyMDI5LDcgQEAKIAkJZGlzcGxheV90b192YXIoJnZhciwgcCk7CiAJCWZiX3ZpZGVvbW9kZV90b192YXIoJnZhciwgbW9kZSk7CiAKLQkJaWYgKHdpZHRoID4gdmFyLnhyZXMvZncgfHwgaGVpZ2h0ID4gdmFyLnlyZXMvZmgpCisJCWlmICh2aXJ0X3cgPiB2YXIueHJlcy92aXJ0X2Z3IHx8IHZpcnRfaCA+IHZhci55cmVzL3ZpcnRfZmgpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAogCQlEUFJJTlRLKCJyZXNpemUgbm93ICVpeCVpXG4iLCB2YXIueHJlcywgdmFyLnlyZXMpOwpAQCAtMTkwOCw2ICsyMDM5LDcgQEAKIAkJCWZiX3NldF92YXIoaW5mbywgJnZhcik7CiAJCX0KIAkJdmFyX3RvX2Rpc3BsYXkocCwgJmluZm8tPnZhciwgaW5mbyk7CisJCW9wcy0+dmFyID0gaW5mby0+dmFyOwogCX0KIAl1cGRhdGVzY3JvbGxtb2RlKHAsIGluZm8sIHZjKTsKIAlyZXR1cm4gMDsKQEAgLTE5MTYsMTEgKzIwNDgsMTMgQEAKIHN0YXRpYyBpbnQgZmJjb25fc3dpdGNoKHN0cnVjdCB2Y19kYXRhICp2YykKIHsKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgKm9sZF9pbmZvID0gTlVMTDsKKwlzdHJ1Y3QgZmJjb25fb3BzICpvcHM7CiAJc3RydWN0IGRpc3BsYXkgKnAgPSAmZmJfZGlzcGxheVt2Yy0+dmNfbnVtXTsKIAlzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gdmFyOwogCWludCBpLCBwcmV2X2NvbnNvbGU7CiAKIAlpbmZvID0gcmVnaXN0ZXJlZF9mYltjb24yZmJfbWFwW3ZjLT52Y19udW1dXTsKKwlvcHMgPSBpbmZvLT5mYmNvbl9wYXI7CiAKIAlpZiAoc29mdGJhY2tfdG9wKSB7CiAJCWlmIChzb2Z0YmFja19saW5lcykKQEAgLTE5MzksNyArMjA3Myw3IEBACiAJCWxvZ29fc2hvd24gPSBGQkNPTl9MT0dPX0NBTlNIT1c7CiAJfQogCi0JcHJldl9jb25zb2xlID0gKChzdHJ1Y3QgZmJjb25fb3BzICopaW5mby0+ZmJjb25fcGFyKS0+Y3VycmNvbjsKKwlwcmV2X2NvbnNvbGUgPSBvcHMtPmN1cnJjb247CiAJaWYgKHByZXZfY29uc29sZSAhPSAtMSkKIAkJb2xkX2luZm8gPSByZWdpc3RlcmVkX2ZiW2NvbjJmYl9tYXBbcHJldl9jb25zb2xlXV07CiAJLyoKQEAgLTE5NTIsOSArMjA4Niw5IEBACiAJICovCiAJZm9yIChpID0gMDsgaSA8IEZCX01BWDsgaSsrKSB7CiAJCWlmIChyZWdpc3RlcmVkX2ZiW2ldICE9IE5VTEwgJiYgcmVnaXN0ZXJlZF9mYltpXS0+ZmJjb25fcGFyKSB7Ci0JCQlzdHJ1Y3QgZmJjb25fb3BzICpvcHMgPSByZWdpc3RlcmVkX2ZiW2ldLT5mYmNvbl9wYXI7CisJCQlzdHJ1Y3QgZmJjb25fb3BzICpvID0gcmVnaXN0ZXJlZF9mYltpXS0+ZmJjb25fcGFyOwogCi0JCQlvcHMtPmN1cnJjb24gPSB2Yy0+dmNfbnVtOworCQkJby0+Y3VycmNvbiA9IHZjLT52Y19udW07CiAJCX0KIAl9CiAJbWVtc2V0KCZ2YXIsIDAsIHNpemVvZihzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8pKTsKQEAgLTE5NjYsOCArMjEwMCwxMSBAQAogCSAqIGluIGZiX3NldF92YXIoKQogCSAqLwogCWluZm8tPnZhci5hY3RpdmF0ZSA9IHZhci5hY3RpdmF0ZTsKLQlpbmZvLT52YXIueW9mZnNldCA9IGluZm8tPnZhci54b2Zmc2V0ID0gcC0+eXNjcm9sbCA9IDA7CisJdmFyLnlvZmZzZXQgPSBpbmZvLT52YXIueW9mZnNldDsKKwl2YXIueG9mZnNldCA9IGluZm8tPnZhci54b2Zmc2V0OworCXZhci52bW9kZSA9IGluZm8tPnZhci52bW9kZTsKIAlmYl9zZXRfdmFyKGluZm8sICZ2YXIpOworCW9wcy0+dmFyID0gaW5mby0+dmFyOwogCiAJaWYgKG9sZF9pbmZvICE9IE5VTEwgJiYgb2xkX2luZm8gIT0gaW5mbykgewogCQlpZiAoaW5mby0+ZmJvcHMtPmZiX3NldF9wYXIpCkBAIC0xOTc3LDcgKzIxMTQsMTIgQEAKIAl9CiAKIAlzZXRfYmxpdHRpbmdfdHlwZSh2YywgaW5mbywgcCk7Ci0JKChzdHJ1Y3QgZmJjb25fb3BzICopaW5mby0+ZmJjb25fcGFyKS0+Y3Vyc29yX3Jlc2V0ID0gMTsKKwlvcHMtPmN1cnNvcl9yZXNldCA9IDE7CisKKwlpZiAob3BzLT5yb3RhdGVfZm9udCAmJiBvcHMtPnJvdGF0ZV9mb250KGluZm8sIHZjLCBwKSkgeworCQlvcHMtPnJvdGF0ZSA9IEZCX1JPVEFURV9VUjsKKwkJc2V0X2JsaXR0aW5nX3R5cGUodmMsIGluZm8sIHApOworCX0KIAogCXZjLT52Y19jYW5fZG9fY29sb3IgPSAoZmJfZ2V0X2NvbG9yX2RlcHRoKCZpbmZvLT52YXIsICZpbmZvLT5maXgpIT0xKTsKIAl2Yy0+dmNfY29tcGxlbWVudF9tYXNrID0gdmMtPnZjX2Nhbl9kb19jb2xvciA/IDB4NzcwMCA6IDB4MDgwMDsKQEAgLTE5OTcsMTAgKzIxMzksMTEgQEAKIAkJc2Nyb2xsYmFja19waHlzX21heCA9IDA7CiAJCWJyZWFrOwogCX0KKwogCXNjcm9sbGJhY2tfbWF4ID0gMDsKIAlzY3JvbGxiYWNrX2N1cnJlbnQgPSAwOwotCi0JdXBkYXRlX3Zhcih2Yy0+dmNfbnVtLCBpbmZvKTsKKwlvcHMtPnZhci54b2Zmc2V0ID0gb3BzLT52YXIueW9mZnNldCA9IHAtPnlzY3JvbGwgPSAwOworCW9wcy0+dXBkYXRlX3N0YXJ0KGluZm8pOwogCWZiY29uX3NldF9wYWxldHRlKHZjLCBjb2xvcl90YWJsZSk7IAkKIAlmYmNvbl9jbGVhcl9tYXJnaW5zKHZjLCAwKTsKIApAQCAtMjAwOCw3ICsyMTUxLDcgQEAKIAogCQlsb2dvX3Nob3duID0gZmdfY29uc29sZTsKIAkJLyogVGhpcyBpcyBwcm90ZWN0ZWQgYWJvdmUgYnkgaW5pdG1lbV9mcmVlZCAqLwotCQlmYl9zaG93X2xvZ28oaW5mbyk7CisJCWZiX3Nob3dfbG9nbyhpbmZvLCBvcHMtPnJvdGF0ZSk7CiAJCXVwZGF0ZV9yZWdpb24odmMsCiAJCQkgICAgICB2Yy0+dmNfb3JpZ2luICsgdmMtPnZjX3NpemVfcm93ICogdmMtPnZjX3RvcCwKIAkJCSAgICAgIHZjLT52Y19zaXplX3JvdyAqICh2Yy0+dmNfYm90dG9tIC0KQEAgLTIwNDcsNiArMjE5MCw3IEBACiAJCQl2YXIuYWN0aXZhdGUgPSBGQl9BQ1RJVkFURV9OT1cgfCBGQl9BQ1RJVkFURV9GT1JDRTsKIAkJCWZiX3NldF92YXIoaW5mbywgJnZhcik7CiAJCQlvcHMtPmdyYXBoaWNzID0gMDsKKwkJCW9wcy0+dmFyID0gaW5mby0+dmFyOwogCQl9CiAJfQogCkBAIC0yMTM1LDYgKzIyNzksNyBAQAogCQkJICAgICBjb25zdCB1OCAqIGRhdGEsIGludCB1c2VyZm9udCkKIHsKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHJlZ2lzdGVyZWRfZmJbY29uMmZiX21hcFt2Yy0+dmNfbnVtXV07CisJc3RydWN0IGZiY29uX29wcyAqb3BzID0gaW5mby0+ZmJjb25fcGFyOwogCXN0cnVjdCBkaXNwbGF5ICpwID0gJmZiX2Rpc3BsYXlbdmMtPnZjX251bV07CiAJaW50IHJlc2l6ZTsKIAlpbnQgY250OwpAQCAtMjIxNCw5ICsyMzU5LDEzIEBACiAJfQogCiAJaWYgKHJlc2l6ZSkgewotCQkvKiByZXNldCB3cmFwL3BhbiAqLwotCQlpbmZvLT52YXIueG9mZnNldCA9IGluZm8tPnZhci55b2Zmc2V0ID0gcC0+eXNjcm9sbCA9IDA7Ci0JCXZjX3Jlc2l6ZSh2YywgaW5mby0+dmFyLnhyZXMgLyB3LCBpbmZvLT52YXIueXJlcyAvIGgpOworCQlpbnQgY29scywgcm93czsKKworCQljb2xzID0gRkJDT05fU1dBUChvcHMtPnJvdGF0ZSwgaW5mby0+dmFyLnhyZXMsIGluZm8tPnZhci55cmVzKTsKKwkJcm93cyA9IEZCQ09OX1NXQVAob3BzLT5yb3RhdGUsIGluZm8tPnZhci55cmVzLCBpbmZvLT52YXIueHJlcyk7CisJCWNvbHMgLz0gdzsKKwkJcm93cyAvPSBoOworCQl2Y19yZXNpemUodmMsIGNvbHMsIHJvd3MpOwogCQlpZiAoQ09OX0lTX1ZJU0lCTEUodmMpICYmIHNvZnRiYWNrX2J1ZikKIAkJCWZiY29uX3VwZGF0ZV9zb2Z0YmFjayh2Yyk7CiAJfSBlbHNlIGlmIChDT05fSVNfVklTSUJMRSh2YykKQEAgLTI0NDQsNiArMjU5Myw3IEBACiBzdGF0aWMgaW50IGZiY29uX3Njcm9sbGRlbHRhKHN0cnVjdCB2Y19kYXRhICp2YywgaW50IGxpbmVzKQogewogCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcmVnaXN0ZXJlZF9mYltjb24yZmJfbWFwW2ZnX2NvbnNvbGVdXTsKKwlzdHJ1Y3QgZmJjb25fb3BzICpvcHMgPSBpbmZvLT5mYmNvbl9wYXI7CiAJc3RydWN0IGRpc3BsYXkgKnAgPSAmZmJfZGlzcGxheVtmZ19jb25zb2xlXTsKIAlpbnQgb2Zmc2V0LCBsaW1pdCwgc2Nyb2xsYmFja19vbGQ7CiAKQEAgLTI1MjAsOSArMjY3MCwxMSBAQAogCQlvZmZzZXQgKz0gbGltaXQ7CiAJZWxzZSBpZiAob2Zmc2V0ID49IGxpbWl0KQogCQlvZmZzZXQgLT0gbGltaXQ7Ci0JaW5mby0+dmFyLnhvZmZzZXQgPSAwOwotCWluZm8tPnZhci55b2Zmc2V0ID0gb2Zmc2V0ICogdmMtPnZjX2ZvbnQuaGVpZ2h0OwotCXVwZGF0ZV92YXIodmMtPnZjX251bSwgaW5mbyk7CisKKwlvcHMtPnZhci54b2Zmc2V0ID0gMDsKKwlvcHMtPnZhci55b2Zmc2V0ID0gb2Zmc2V0ICogdmMtPnZjX2ZvbnQuaGVpZ2h0OworCW9wcy0+dXBkYXRlX3N0YXJ0KGluZm8pOworCiAJaWYgKCFzY3JvbGxiYWNrX2N1cnJlbnQpCiAJCWZiY29uX2N1cnNvcih2YywgQ01fRFJBVyk7CiAJcmV0dXJuIDA7CkBAIC0yNTcwLDIyICsyNzIyLDI1IEBACiAJaWYgKCFvcHMgfHwgb3BzLT5jdXJyY29uIDwgMCkKIAkJcmV0dXJuOwogCXZjID0gdmNfY29uc1tvcHMtPmN1cnJjb25dLmQ7Ci0JaWYgKHZjLT52Y19tb2RlICE9IEtEX1RFWFQgfHwgcmVnaXN0ZXJlZF9mYltjb24yZmJfbWFwW29wcy0+Y3VycmNvbl1dICE9IGluZm8pCisJaWYgKHZjLT52Y19tb2RlICE9IEtEX1RFWFQgfHwKKwkgICAgcmVnaXN0ZXJlZF9mYltjb24yZmJfbWFwW29wcy0+Y3VycmNvbl1dICE9IGluZm8pCiAJCXJldHVybjsKIAogCXAgPSAmZmJfZGlzcGxheVt2Yy0+dmNfbnVtXTsKLQotCWluZm8tPnZhci54b2Zmc2V0ID0gaW5mby0+dmFyLnlvZmZzZXQgPSBwLT55c2Nyb2xsID0gMDsKKwlzZXRfYmxpdHRpbmdfdHlwZSh2YywgaW5mbywgcCk7CiAKIAlpZiAoQ09OX0lTX1ZJU0lCTEUodmMpKSB7CiAJCXZhcl90b19kaXNwbGF5KHAsICZpbmZvLT52YXIsIGluZm8pOwotCQljb2xzID0gaW5mby0+dmFyLnhyZXMgLyB2Yy0+dmNfZm9udC53aWR0aDsKLQkJcm93cyA9IGluZm8tPnZhci55cmVzIC8gdmMtPnZjX2ZvbnQuaGVpZ2h0OworCQljb2xzID0gRkJDT05fU1dBUChvcHMtPnJvdGF0ZSwgaW5mby0+dmFyLnhyZXMsIGluZm8tPnZhci55cmVzKTsKKwkJcm93cyA9IEZCQ09OX1NXQVAob3BzLT5yb3RhdGUsIGluZm8tPnZhci55cmVzLCBpbmZvLT52YXIueHJlcyk7CisJCWNvbHMgLz0gdmMtPnZjX2ZvbnQud2lkdGg7CisJCXJvd3MgLz0gdmMtPnZjX2ZvbnQuaGVpZ2h0OwogCQl2Y19yZXNpemUodmMsIGNvbHMsIHJvd3MpOwogCQl1cGRhdGVzY3JvbGxtb2RlKHAsIGluZm8sIHZjKTsKIAkJc2Nyb2xsYmFja19tYXggPSAwOwogCQlzY3JvbGxiYWNrX2N1cnJlbnQgPSAwOwotCQl1cGRhdGVfdmFyKHZjLT52Y19udW0sIGluZm8pOworCQlvcHMtPnZhci54b2Zmc2V0ID0gb3BzLT52YXIueW9mZnNldCA9IHAtPnlzY3JvbGwgPSAwOworCQlvcHMtPnVwZGF0ZV9zdGFydChpbmZvKTsKIAkJZmJjb25fc2V0X3BhbGV0dGUodmMsIGNvbG9yX3RhYmxlKTsKIAkJdXBkYXRlX3NjcmVlbih2Yyk7CiAJCWlmIChzb2Z0YmFja19idWYpCkBAIC0yNjEwLDE4ICsyNzY1LDIwIEBACiAJCQljb250aW51ZTsKIAogCQlwID0gJmZiX2Rpc3BsYXlbdmMtPnZjX251bV07Ci0KLQkJaW5mby0+dmFyLnhvZmZzZXQgPSBpbmZvLT52YXIueW9mZnNldCA9IHAtPnlzY3JvbGwgPSAwOworCQlzZXRfYmxpdHRpbmdfdHlwZSh2YywgaW5mbywgcCk7CiAJCXZhcl90b19kaXNwbGF5KHAsICZpbmZvLT52YXIsIGluZm8pOwotCQljb2xzID0gaW5mby0+dmFyLnhyZXMgLyB2Yy0+dmNfZm9udC53aWR0aDsKLQkJcm93cyA9IGluZm8tPnZhci55cmVzIC8gdmMtPnZjX2ZvbnQuaGVpZ2h0OworCQljb2xzID0gRkJDT05fU1dBUChvcHMtPnJvdGF0ZSwgaW5mby0+dmFyLnhyZXMsIGluZm8tPnZhci55cmVzKTsKKwkJcm93cyA9IEZCQ09OX1NXQVAob3BzLT5yb3RhdGUsIGluZm8tPnZhci55cmVzLCBpbmZvLT52YXIueHJlcyk7CisJCWNvbHMgLz0gdmMtPnZjX2ZvbnQud2lkdGg7CisJCXJvd3MgLz0gdmMtPnZjX2ZvbnQuaGVpZ2h0OwogCQl2Y19yZXNpemUodmMsIGNvbHMsIHJvd3MpOwogCiAJCWlmIChDT05fSVNfVklTSUJMRSh2YykpIHsKIAkJCXVwZGF0ZXNjcm9sbG1vZGUocCwgaW5mbywgdmMpOwogCQkJc2Nyb2xsYmFja19tYXggPSAwOwogCQkJc2Nyb2xsYmFja19jdXJyZW50ID0gMDsKLQkJCXVwZGF0ZV92YXIodmMtPnZjX251bSwgaW5mbyk7CisJCQlvcHMtPnZhci54b2Zmc2V0ID0gb3BzLT52YXIueW9mZnNldCA9IHAtPnlzY3JvbGwgPSAwOworCQkJb3BzLT51cGRhdGVfc3RhcnQoaW5mbyk7CiAJCQlmYmNvbl9zZXRfcGFsZXR0ZSh2YywgY29sb3JfdGFibGUpOwogCQkJdXBkYXRlX3NjcmVlbih2Yyk7CiAJCQlpZiAoc29mdGJhY2tfYnVmKQpAQCAtMjc3MSw2ICsyOTI4LDE0IEBACiAJY2FzZSBGQl9FVkVOVF9ORVdfTU9ERUxJU1Q6CiAJCWZiY29uX25ld19tb2RlbGlzdChpbmZvKTsKIAkJYnJlYWs7CisJY2FzZSBGQl9FVkVOVF9TRVRfQ09OX1JPVEFURToKKwkJZmJjb25fcm90YXRlKGluZm8sICooaW50ICopZXZlbnQtPmRhdGEpOworCQlicmVhazsKKwljYXNlIEZCX0VWRU5UX0dFVF9DT05fUk9UQVRFOgorCQlyZXQgPSBmYmNvbl9nZXRfcm90YXRlKGluZm8pOworCQlicmVhazsKKwljYXNlIEZCX0VWRU5UX1NFVF9DT05fUk9UQVRFX0FMTDoKKwkJZmJjb25fcm90YXRlX2FsbChpbmZvLCAqKGludCAqKWV2ZW50LT5kYXRhKTsKIAl9CiAKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uLmggYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb24uaAppbmRleCBiNjhlMGUyLi5hY2NmZDdiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uLmgKKysrIGIvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uLmgKQEAgLTI3LDE1ICsyNywxNSBAQAogICAgICovCiAKIHN0cnVjdCBkaXNwbGF5IHsKLSAgICAvKiBGaWxsZWQgaW4gYnkgdGhlIGZyYW1lIGJ1ZmZlciBkZXZpY2UgKi8KLSAgICB1X3Nob3J0IGludmVyc2U7ICAgICAgICAgICAgICAgIC8qICE9IDAgdGV4dCBibGFjayBvbiB3aGl0ZSBhcyBkZWZhdWx0ICovCiAgICAgLyogRmlsbGVkIGluIGJ5IHRoZSBsb3ctbGV2ZWwgY29uc29sZSBkcml2ZXIgKi8KICAgICBjb25zdCB1X2NoYXIgKmZvbnRkYXRhOwogICAgIGludCB1c2VyZm9udDsgICAgICAgICAgICAgICAgICAgLyogIT0gMCBpZiBmb250ZGF0YSBrbWFsbG9jKCllZCAqLwogICAgIHVfc2hvcnQgc2Nyb2xsbW9kZTsgICAgICAgICAgICAgLyogU2Nyb2xsIE1ldGhvZCAqLworICAgIHVfc2hvcnQgaW52ZXJzZTsgICAgICAgICAgICAgICAgLyogIT0gMCB0ZXh0IGJsYWNrIG9uIHdoaXRlIGFzIGRlZmF1bHQgKi8KICAgICBzaG9ydCB5c2Nyb2xsOyAgICAgICAgICAgICAgICAgIC8qIEhhcmR3YXJlIHNjcm9sbGluZyAqLwogICAgIGludCB2cm93czsgICAgICAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIHZpcnR1YWwgcm93cyAqLwogICAgIGludCBjdXJzb3Jfc2hhcGU7CisgICAgaW50IGNvbl9yb3RhdGU7CiAgICAgdTMyIHhyZXNfdmlydHVhbDsKICAgICB1MzIgeXJlc192aXJ0dWFsOwogICAgIHUzMiBoZWlnaHQ7CkBAIC01Miw2ICs1Miw4IEBACiAgICAgc3RydWN0IGZiX3ZpZGVvbW9kZSAqbW9kZTsKIH07CiAKK2V4dGVybiBzdHJ1Y3QgZGlzcGxheSBmYl9kaXNwbGF5W107CisKIHN0cnVjdCBmYmNvbl9vcHMgewogCXZvaWQgKCpibW92ZSkoc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgaW50IHN5LAogCQkgICAgICBpbnQgc3gsIGludCBkeSwgaW50IGR4LCBpbnQgaGVpZ2h0LCBpbnQgd2lkdGgpOwpAQCAtNjMsOCArNjUsMTIgQEAKIAl2b2lkICgqY2xlYXJfbWFyZ2lucykoc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKIAkJCSAgICAgIGludCBib3R0b21fb25seSk7CiAJdm9pZCAoKmN1cnNvcikoc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKLQkJICAgICAgIHN0cnVjdCBkaXNwbGF5ICpwLCBpbnQgbW9kZSwgaW50IHNvZnRiYWNrX2xpbmVzLCBpbnQgZmcsIGludCBiZyk7Ci0KKwkJICAgICAgIHN0cnVjdCBkaXNwbGF5ICpwLCBpbnQgbW9kZSwgaW50IHNvZnRiYWNrX2xpbmVzLAorCQkgICAgICAgaW50IGZnLCBpbnQgYmcpOworCWludCAgKCp1cGRhdGVfc3RhcnQpKHN0cnVjdCBmYl9pbmZvICppbmZvKTsKKwlpbnQgICgqcm90YXRlX2ZvbnQpKHN0cnVjdCBmYl9pbmZvICppbmZvLCBzdHJ1Y3QgdmNfZGF0YSAqdmMsCisJCQkgICAgc3RydWN0IGRpc3BsYXkgKnApOworCXN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyB2YXI7ICAvKiBjb3B5IG9mIHRoZSBjdXJyZW50IGZiX3Zhcl9zY3JlZW5pbmZvICovCiAJc3RydWN0IHRpbWVyX2xpc3QgY3Vyc29yX3RpbWVyOyAvKiBDdXJzb3IgdGltZXIgKi8KIAlzdHJ1Y3QgZmJfY3Vyc29yIGN1cnNvcl9zdGF0ZTsKICAgICAgICAgaW50ICAgIGN1cnJjb247CSAgICAgICAgICAgICAgICAvKiBDdXJyZW50IFZDLiAqLwpAQCAtNzMsNyArNzksMTIgQEAKIAlpbnQgICAgYmxhbmtfc3RhdGU7CiAJaW50ICAgIGdyYXBoaWNzOwogCWludCAgICBmbGFnczsKKwlpbnQgICAgcm90YXRlOworCWludCAgICBjdXJfcm90YXRlOwogCWNoYXIgICpjdXJzb3JfZGF0YTsKKwl1OCAgICAqZm9udGJ1ZmZlcjsKKwl1OCAgICAqZm9udGRhdGE7CisJdTMyICAgIGZkX3NpemU7CiB9OwogICAgIC8qCiAgICAgICogIEF0dHJpYnV0ZSBEZWNvZGluZwpAQCAtMTY4LDQgKzE3OSw0NyBAQAogI2VuZGlmCiBleHRlcm4gdm9pZCBmYmNvbl9zZXRfYml0b3BzKHN0cnVjdCBmYmNvbl9vcHMgKm9wcyk7CiBleHRlcm4gaW50ICBzb2Z0X2N1cnNvcihzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IGZiX2N1cnNvciAqY3Vyc29yKTsKKworI2RlZmluZSBGQkNPTl9BVFRSSUJVVEVfVU5ERVJMSU5FIDEKKyNkZWZpbmUgRkJDT05fQVRUUklCVVRFX1JFVkVSU0UgICAyCisjZGVmaW5lIEZCQ09OX0FUVFJJQlVURV9CT0xEICAgICAgNAorCitzdGF0aWMgaW5saW5lIGludCByZWFsX3koc3RydWN0IGRpc3BsYXkgKnAsIGludCB5cG9zKQoreworCWludCByb3dzID0gcC0+dnJvd3M7CisKKwl5cG9zICs9IHAtPnlzY3JvbGw7CisJcmV0dXJuIHlwb3MgPCByb3dzID8geXBvcyA6IHlwb3MgLSByb3dzOworfQorCisKK3N0YXRpYyBpbmxpbmUgaW50IGdldF9hdHRyaWJ1dGUoc3RydWN0IGZiX2luZm8gKmluZm8sIHUxNiBjKQoreworCWludCBhdHRyaWJ1dGUgPSAwOworCisJaWYgKGZiX2dldF9jb2xvcl9kZXB0aCgmaW5mby0+dmFyLCAmaW5mby0+Zml4KSA9PSAxKSB7CisJCWlmIChhdHRyX3VuZGVybGluZShjKSkKKwkJCWF0dHJpYnV0ZSB8PSBGQkNPTl9BVFRSSUJVVEVfVU5ERVJMSU5FOworCQlpZiAoYXR0cl9yZXZlcnNlKGMpKQorCQkJYXR0cmlidXRlIHw9IEZCQ09OX0FUVFJJQlVURV9SRVZFUlNFOworCQlpZiAoYXR0cl9ib2xkKGMpKQorCQkJYXR0cmlidXRlIHw9IEZCQ09OX0FUVFJJQlVURV9CT0xEOworCX0KKworCXJldHVybiBhdHRyaWJ1dGU7Cit9CisKKyNkZWZpbmUgRkJDT05fU1dBUChpLHIsdikgKHsgXAorICAgICAgICB0eXBlb2YocikgX3IgPSAocik7ICBcCisgICAgICAgIHR5cGVvZih2KSBfdiA9ICh2KTsgIFwKKyAgICAgICAgKHZvaWQpICgmX3IgPT0gJl92KTsgXAorICAgICAgICAoaSA9PSBGQl9ST1RBVEVfVVIgfHwgaSA9PSBGQl9ST1RBVEVfVUQpID8gX3IgOiBfdjsgfSkKKworI2lmZGVmIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OCitleHRlcm4gdm9pZCBmYmNvbl9zZXRfcm90YXRlKHN0cnVjdCBmYmNvbl9vcHMgKm9wcyk7CisjZWxzZQorI2RlZmluZSBmYmNvbl9zZXRfcm90YXRlKHgpIGRvIHt9IHdoaWxlKDApCisjZW5kaWYgLyogQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04gKi8KKwogI2VuZGlmIC8qIF9WSURFT19GQkNPTl9IICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbl9jY3cuYyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbl9jY3cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODBhYWJhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uX2Njdy5jCkBAIC0wLDAgKzEsNDI4IEBACisvKgorICogIGxpbnV4L2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbl9jY3cuYyAtLSBTb2Z0d2FyZSBSb3RhdGlvbiAtIDI3MCBkZWdyZWVzCisgKgorICogICAgICBDb3B5cmlnaHQgKEMpIDIwMDUgQW50b25pbm8gRGFwbGFzIDxhZGFwbGFzIEBwb2wubmV0PgorICoKKyAqICBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlIGZvcgorICogIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvZmIuaD4KKyNpbmNsdWRlIDxsaW51eC92dF9rZXJuLmg+CisjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgorI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgImZiY29uLmgiCisjaW5jbHVkZSAiZmJjb25fcm90YXRlLmgiCisKKy8qCisgKiBSb3RhdGlvbiAyNzAgZGVncmVlcworICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjY3dfdXBkYXRlX2F0dHIodTggKmRzdCwgdTggKnNyYywgaW50IGF0dHJpYnV0ZSwKKwkJCQkgIHN0cnVjdCB2Y19kYXRhICp2YykKK3sKKwlpbnQgaSwgaiwgb2Zmc2V0ID0gKHZjLT52Y19mb250LmhlaWdodCA8IDEwKSA/IDEgOiAyOworCWludCB3aWR0aCA9ICh2Yy0+dmNfZm9udC5oZWlnaHQgKyA3KSA+PiAzOworCWludCBtb2QgPSB2Yy0+dmNfZm9udC5oZWlnaHQgJSA4OworCXU4IGMsIG1zayA9IH4oMHhmZiA8PCBvZmZzZXQpLCBtc2sxID0gMDsKKworCWlmIChtb2QpCisJCW1zayA8PD0gKDggLSBtb2QpOworCisJaWYgKG9mZnNldCA+IG1vZCkKKwkJc2V0X2JpdChGQkNPTl9CSVQoNyksICh2b2lkICopJm1zazEpOworCisJZm9yIChpID0gMDsgaSA8IHZjLT52Y19mb250LndpZHRoOyBpKyspIHsKKwkJZm9yIChqID0gMDsgaiA8IHdpZHRoOyBqKyspIHsKKwkJCWMgPSAqc3JjOworCisJCQlpZiAoYXR0cmlidXRlICYgRkJDT05fQVRUUklCVVRFX1VOREVSTElORSkgeworCQkJCWlmIChqID09IHdpZHRoIC0gMSkKKwkJCQkJYyB8PSBtc2s7CisKKwkJCQlpZiAobXNrMSAmJiBqID09IHdpZHRoIC0gMikKKwkJCQkJYyB8PSBtc2sxOworCQkJfQorCisJCQlpZiAoYXR0cmlidXRlICYgRkJDT05fQVRUUklCVVRFX0JPTEQgJiYgaSkKKwkJCQkqKGRzdCAtIHdpZHRoKSB8PSBjOworCisJCQlpZiAoYXR0cmlidXRlICYgRkJDT05fQVRUUklCVVRFX1JFVkVSU0UpCisJCQkJYyA9IH5jOworCQkJc3JjKys7CisJCQkqZHN0KysgPSBjOworCQl9CisJfQorfQorCisKK3N0YXRpYyB2b2lkIGNjd19ibW92ZShzdHJ1Y3QgdmNfZGF0YSAqdmMsIHN0cnVjdCBmYl9pbmZvICppbmZvLCBpbnQgc3ksCisJCSAgICAgaW50IHN4LCBpbnQgZHksIGludCBkeCwgaW50IGhlaWdodCwgaW50IHdpZHRoKQoreworCXN0cnVjdCBkaXNwbGF5ICpwID0gJmZiX2Rpc3BsYXlbdmMtPnZjX251bV07CisJc3RydWN0IGZiX2NvcHlhcmVhIGFyZWE7CisJdTMyIHZ5cmVzID0gR0VUVllSRVMocC0+c2Nyb2xsbW9kZSwgaW5mbyk7CisKKwlhcmVhLnN4ID0gc3kgKiB2Yy0+dmNfZm9udC5oZWlnaHQ7CisJYXJlYS5zeSA9IHZ5cmVzIC0gKChzeCArIHdpZHRoKSAqIHZjLT52Y19mb250LndpZHRoKTsKKwlhcmVhLmR4ID0gZHkgKiB2Yy0+dmNfZm9udC5oZWlnaHQ7CisJYXJlYS5keSA9IHZ5cmVzIC0gKChkeCArIHdpZHRoKSAqIHZjLT52Y19mb250LndpZHRoKTsKKwlhcmVhLndpZHRoID0gaGVpZ2h0ICogdmMtPnZjX2ZvbnQuaGVpZ2h0OworCWFyZWEuaGVpZ2h0ICA9IHdpZHRoICogdmMtPnZjX2ZvbnQud2lkdGg7CisKKwlpbmZvLT5mYm9wcy0+ZmJfY29weWFyZWEoaW5mbywgJmFyZWEpOworfQorCitzdGF0aWMgdm9pZCBjY3dfY2xlYXIoc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgaW50IHN5LAorCQkgICAgIGludCBzeCwgaW50IGhlaWdodCwgaW50IHdpZHRoKQoreworCXN0cnVjdCBkaXNwbGF5ICpwID0gJmZiX2Rpc3BsYXlbdmMtPnZjX251bV07CisJc3RydWN0IGZiX2ZpbGxyZWN0IHJlZ2lvbjsKKwlpbnQgYmdzaGlmdCA9ICh2Yy0+dmNfaGlfZm9udF9tYXNrKSA/IDEzIDogMTI7CisJdTMyIHZ5cmVzID0gR0VUVllSRVMocC0+c2Nyb2xsbW9kZSwgaW5mbyk7CisKKwlyZWdpb24uY29sb3IgPSBhdHRyX2JnY29sX2VjKGJnc2hpZnQsdmMpOworCXJlZ2lvbi5keCA9IHN5ICogdmMtPnZjX2ZvbnQuaGVpZ2h0OworCXJlZ2lvbi5keSA9IHZ5cmVzIC0gKChzeCArIHdpZHRoKSAqIHZjLT52Y19mb250LndpZHRoKTsKKwlyZWdpb24uaGVpZ2h0ID0gd2lkdGggKiB2Yy0+dmNfZm9udC53aWR0aDsKKwlyZWdpb24ud2lkdGggPSBoZWlnaHQgKiB2Yy0+dmNfZm9udC5oZWlnaHQ7CisJcmVnaW9uLnJvcCA9IFJPUF9DT1BZOworCisJaW5mby0+ZmJvcHMtPmZiX2ZpbGxyZWN0KGluZm8sICZyZWdpb24pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2N3X3B1dGNzX2FsaWduZWQoc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKKwkJCQkgICAgY29uc3QgdTE2ICpzLCB1MzIgYXR0ciwgdTMyIGNudCwKKwkJCQkgICAgdTMyIGRfcGl0Y2gsIHUzMiBzX3BpdGNoLCB1MzIgY2VsbHNpemUsCisJCQkJICAgIHN0cnVjdCBmYl9pbWFnZSAqaW1hZ2UsIHU4ICpidWYsIHU4ICpkc3QpCit7CisJc3RydWN0IGZiY29uX29wcyAqb3BzID0gaW5mby0+ZmJjb25fcGFyOworCXUxNiBjaGFybWFzayA9IHZjLT52Y19oaV9mb250X21hc2sgPyAweDFmZiA6IDB4ZmY7CisJdTMyIGlkeCA9ICh2Yy0+dmNfZm9udC5oZWlnaHQgKyA3KSA+PiAzOworCXU4ICpzcmM7CisKKwl3aGlsZSAoY250LS0pIHsKKwkJc3JjID0gb3BzLT5mb250YnVmZmVyICsgKHNjcl9yZWFkdyhzLS0pICYgY2hhcm1hc2spKmNlbGxzaXplOworCisJCWlmIChhdHRyKSB7CisJCQljY3dfdXBkYXRlX2F0dHIoYnVmLCBzcmMsIGF0dHIsIHZjKTsKKwkJCXNyYyA9IGJ1ZjsKKwkJfQorCisJCWlmIChsaWtlbHkoaWR4ID09IDEpKQorCQkJX19mYl9wYWRfYWxpZ25lZF9idWZmZXIoZHN0LCBkX3BpdGNoLCBzcmMsIGlkeCwKKwkJCQkJCXZjLT52Y19mb250LndpZHRoKTsKKwkJZWxzZQorCQkJZmJfcGFkX2FsaWduZWRfYnVmZmVyKGRzdCwgZF9waXRjaCwgc3JjLCBpZHgsCisJCQkJCSAgICAgIHZjLT52Y19mb250LndpZHRoKTsKKworCQlkc3QgKz0gZF9waXRjaCAqIHZjLT52Y19mb250LndpZHRoOworCX0KKworCWluZm8tPmZib3BzLT5mYl9pbWFnZWJsaXQoaW5mbywgaW1hZ2UpOworfQorCitzdGF0aWMgdm9pZCBjY3dfcHV0Y3Moc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKKwkJICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnMsIGludCBjb3VudCwgaW50IHl5LCBpbnQgeHgsCisJCSAgICAgIGludCBmZywgaW50IGJnKQoreworCXN0cnVjdCBmYl9pbWFnZSBpbWFnZTsKKwlzdHJ1Y3QgZGlzcGxheSAqcCA9ICZmYl9kaXNwbGF5W3ZjLT52Y19udW1dOworCXN0cnVjdCBmYmNvbl9vcHMgKm9wcyA9IGluZm8tPmZiY29uX3BhcjsKKwl1MzIgd2lkdGggPSAodmMtPnZjX2ZvbnQuaGVpZ2h0ICsgNykvODsKKwl1MzIgY2VsbHNpemUgPSB3aWR0aCAqIHZjLT52Y19mb250LndpZHRoOworCXUzMiBtYXhjbnQgPSBpbmZvLT5waXhtYXAuc2l6ZS9jZWxsc2l6ZTsKKwl1MzIgc2Nhbl9hbGlnbiA9IGluZm8tPnBpeG1hcC5zY2FuX2FsaWduIC0gMTsKKwl1MzIgYnVmX2FsaWduID0gaW5mby0+cGl4bWFwLmJ1Zl9hbGlnbiAtIDE7CisJdTMyIGNudCwgcGl0Y2gsIHNpemU7CisJdTMyIGF0dHJpYnV0ZSA9IGdldF9hdHRyaWJ1dGUoaW5mbywgc2NyX3JlYWR3KHMpKTsKKwl1OCAqZHN0LCAqYnVmID0gTlVMTDsKKwl1MzIgdnlyZXMgPSBHRVRWWVJFUyhwLT5zY3JvbGxtb2RlLCBpbmZvKTsKKworCWlmICghb3BzLT5mb250YnVmZmVyKQorCQlyZXR1cm47CisKKwlpbWFnZS5mZ19jb2xvciA9IGZnOworCWltYWdlLmJnX2NvbG9yID0gYmc7CisJaW1hZ2UuZHggPSB5eSAqIHZjLT52Y19mb250LmhlaWdodDsKKwlpbWFnZS5keSA9IHZ5cmVzIC0gKCh4eCArIGNvdW50KSAqIHZjLT52Y19mb250LndpZHRoKTsKKwlpbWFnZS53aWR0aCA9IHZjLT52Y19mb250LmhlaWdodDsKKwlpbWFnZS5kZXB0aCA9IDE7CisKKwlpZiAoYXR0cmlidXRlKSB7CisJCWJ1ZiA9IGttYWxsb2MoY2VsbHNpemUsIEdGUF9LRVJORUwpOworCQlpZiAoIWJ1ZikKKwkJCXJldHVybjsKKwl9CisKKwlzICs9IGNvdW50IC0gMTsKKworCXdoaWxlIChjb3VudCkgeworCQlpZiAoY291bnQgPiBtYXhjbnQpCisJCQljbnQgPSBtYXhjbnQ7CisJCWVsc2UKKwkJCWNudCA9IGNvdW50OworCisJCWltYWdlLmhlaWdodCA9IHZjLT52Y19mb250LndpZHRoICogY250OworCQlwaXRjaCA9ICgoaW1hZ2Uud2lkdGggKyA3KSA+PiAzKSArIHNjYW5fYWxpZ247CisJCXBpdGNoICY9IH5zY2FuX2FsaWduOworCQlzaXplID0gcGl0Y2ggKiBpbWFnZS5oZWlnaHQgKyBidWZfYWxpZ247CisJCXNpemUgJj0gfmJ1Zl9hbGlnbjsKKwkJZHN0ID0gZmJfZ2V0X2J1ZmZlcl9vZmZzZXQoaW5mbywgJmluZm8tPnBpeG1hcCwgc2l6ZSk7CisJCWltYWdlLmRhdGEgPSBkc3Q7CisJCWNjd19wdXRjc19hbGlnbmVkKHZjLCBpbmZvLCBzLCBhdHRyaWJ1dGUsIGNudCwgcGl0Y2gsCisJCQkJIHdpZHRoLCBjZWxsc2l6ZSwgJmltYWdlLCBidWYsIGRzdCk7CisJCWltYWdlLmR5ICs9IGltYWdlLmhlaWdodDsKKwkJY291bnQgLT0gY250OworCQlzIC09IGNudDsKKwl9CisKKwkvKiBidWYgaXMgYWx3YXlzIE5VTEwgZXhjZXB0IHdoZW4gaW4gbW9ub2Nocm9tZSBtb2RlLCBzbyBpbiB0aGlzIGNhc2UKKwkgICBpdCdzIGEgZ2FpbiB0byBjaGVjayBidWYgYWdhaW5zdCBOVUxMIGV2ZW4gdGhvdWdoIGtmcmVlKCkgaGFuZGxlcworCSAgIE5VTEwgcG9pbnRlcnMganVzdCBmaW5lICovCisJaWYgKHVubGlrZWx5KGJ1ZikpCisJCWtmcmVlKGJ1Zik7CisKK30KKworc3RhdGljIHZvaWQgY2N3X2NsZWFyX21hcmdpbnMoc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKKwkJCSAgICAgaW50IGJvdHRvbV9vbmx5KQoreworCXVuc2lnbmVkIGludCBjdyA9IHZjLT52Y19mb250LndpZHRoOworCXVuc2lnbmVkIGludCBjaCA9IHZjLT52Y19mb250LmhlaWdodDsKKwl1bnNpZ25lZCBpbnQgcncgPSBpbmZvLT52YXIueXJlcyAtICh2Yy0+dmNfY29scypjdyk7CisJdW5zaWduZWQgaW50IGJoID0gaW5mby0+dmFyLnhyZXMgLSAodmMtPnZjX3Jvd3MqY2gpOworCXVuc2lnbmVkIGludCBicyA9IHZjLT52Y19yb3dzKmNoOworCXN0cnVjdCBmYl9maWxscmVjdCByZWdpb247CisJaW50IGJnc2hpZnQgPSAodmMtPnZjX2hpX2ZvbnRfbWFzaykgPyAxMyA6IDEyOworCisJcmVnaW9uLmNvbG9yID0gYXR0cl9iZ2NvbF9lYyhiZ3NoaWZ0LHZjKTsKKwlyZWdpb24ucm9wID0gUk9QX0NPUFk7CisKKwlpZiAocncgJiYgIWJvdHRvbV9vbmx5KSB7CisJCXJlZ2lvbi5keCA9IDA7CisJCXJlZ2lvbi5keSA9IGluZm8tPnZhci55b2Zmc2V0OworCQlyZWdpb24uaGVpZ2h0ID0gcnc7CisJCXJlZ2lvbi53aWR0aCA9IGluZm8tPnZhci54cmVzX3ZpcnR1YWw7CisJCWluZm8tPmZib3BzLT5mYl9maWxscmVjdChpbmZvLCAmcmVnaW9uKTsKKwl9CisKKwlpZiAoYmgpIHsKKwkJcmVnaW9uLmR4ID0gaW5mby0+dmFyLnhvZmZzZXQgKyBiczsKKwkJcmVnaW9uLmR5ID0gMDsKKyAgICAgICAgICAgICAgICByZWdpb24uaGVpZ2h0ID0gaW5mby0+dmFyLnlyZXNfdmlydHVhbDsKKyAgICAgICAgICAgICAgICByZWdpb24ud2lkdGggPSBiaDsKKwkJaW5mby0+ZmJvcHMtPmZiX2ZpbGxyZWN0KGluZm8sICZyZWdpb24pOworCX0KK30KKworc3RhdGljIHZvaWQgY2N3X2N1cnNvcihzdHJ1Y3QgdmNfZGF0YSAqdmMsIHN0cnVjdCBmYl9pbmZvICppbmZvLAorCQkgICAgICBzdHJ1Y3QgZGlzcGxheSAqcCwgaW50IG1vZGUsIGludCBzb2Z0YmFja19saW5lcywKKwkJICAgICAgaW50IGZnLCBpbnQgYmcpCit7CisJc3RydWN0IGZiX2N1cnNvciBjdXJzb3I7CisJc3RydWN0IGZiY29uX29wcyAqb3BzID0gKHN0cnVjdCBmYmNvbl9vcHMgKikgaW5mby0+ZmJjb25fcGFyOworCXVuc2lnbmVkIHNob3J0IGNoYXJtYXNrID0gdmMtPnZjX2hpX2ZvbnRfbWFzayA/IDB4MWZmIDogMHhmZjsKKwlpbnQgdyA9ICh2Yy0+dmNfZm9udC5oZWlnaHQgKyA3KSA+PiAzLCBjOworCWludCB5ID0gcmVhbF95KHAsIHZjLT52Y195KTsKKwlpbnQgYXR0cmlidXRlLCB1c2Vfc3cgPSAodmMtPnZjX2N1cnNvcl90eXBlICYgMHgxMCk7CisJaW50IGVyciA9IDEsIGR4LCBkeTsKKwljaGFyICpzcmM7CisJdTMyIHZ5cmVzID0gR0VUVllSRVMocC0+c2Nyb2xsbW9kZSwgaW5mbyk7CisKKwlpZiAoIW9wcy0+Zm9udGJ1ZmZlcikKKwkJcmV0dXJuOworCisJY3Vyc29yLnNldCA9IDA7CisKKwlpZiAoc29mdGJhY2tfbGluZXMpIHsKKwkJaWYgKHkgKyBzb2Z0YmFja19saW5lcyA+PSB2Yy0+dmNfcm93cykgeworCQkJbW9kZSA9IENNX0VSQVNFOworCQkJb3BzLT5jdXJzb3JfZmxhc2ggPSAwOworCQkJcmV0dXJuOworCQl9IGVsc2UKKwkJCXkgKz0gc29mdGJhY2tfbGluZXM7CisJfQorCisgCWMgPSBzY3JfcmVhZHcoKHUxNiAqKSB2Yy0+dmNfcG9zKTsKKwlhdHRyaWJ1dGUgPSBnZXRfYXR0cmlidXRlKGluZm8sIGMpOworCXNyYyA9IG9wcy0+Zm9udGJ1ZmZlciArICgoYyAmIGNoYXJtYXNrKSAqICh3ICogdmMtPnZjX2ZvbnQud2lkdGgpKTsKKworCWlmIChvcHMtPmN1cnNvcl9zdGF0ZS5pbWFnZS5kYXRhICE9IHNyYyB8fAorCSAgICBvcHMtPmN1cnNvcl9yZXNldCkgeworCSAgICBvcHMtPmN1cnNvcl9zdGF0ZS5pbWFnZS5kYXRhID0gc3JjOworCSAgICBjdXJzb3Iuc2V0IHw9IEZCX0NVUl9TRVRJTUFHRTsKKwl9CisKKwlpZiAoYXR0cmlidXRlKSB7CisJCXU4ICpkc3Q7CisKKwkJZHN0ID0ga21hbGxvYyh3ICogdmMtPnZjX2ZvbnQud2lkdGgsIEdGUF9BVE9NSUMpOworCQlpZiAoIWRzdCkKKwkJCXJldHVybjsKKwkJa2ZyZWUob3BzLT5jdXJzb3JfZGF0YSk7CisJCW9wcy0+Y3Vyc29yX2RhdGEgPSBkc3Q7CisJCWNjd191cGRhdGVfYXR0cihkc3QsIHNyYywgYXR0cmlidXRlLCB2Yyk7CisJCXNyYyA9IGRzdDsKKwl9CisKKwlpZiAob3BzLT5jdXJzb3Jfc3RhdGUuaW1hZ2UuZmdfY29sb3IgIT0gZmcgfHwKKwkgICAgb3BzLT5jdXJzb3Jfc3RhdGUuaW1hZ2UuYmdfY29sb3IgIT0gYmcgfHwKKwkgICAgb3BzLT5jdXJzb3JfcmVzZXQpIHsKKwkJb3BzLT5jdXJzb3Jfc3RhdGUuaW1hZ2UuZmdfY29sb3IgPSBmZzsKKwkJb3BzLT5jdXJzb3Jfc3RhdGUuaW1hZ2UuYmdfY29sb3IgPSBiZzsKKwkJY3Vyc29yLnNldCB8PSBGQl9DVVJfU0VUQ01BUDsKKwl9CisKKwlpZiAob3BzLT5jdXJzb3Jfc3RhdGUuaW1hZ2UuaGVpZ2h0ICE9IHZjLT52Y19mb250LndpZHRoIHx8CisJICAgIG9wcy0+Y3Vyc29yX3N0YXRlLmltYWdlLndpZHRoICE9IHZjLT52Y19mb250LmhlaWdodCB8fAorCSAgICBvcHMtPmN1cnNvcl9yZXNldCkgeworCQlvcHMtPmN1cnNvcl9zdGF0ZS5pbWFnZS5oZWlnaHQgPSB2Yy0+dmNfZm9udC53aWR0aDsKKwkJb3BzLT5jdXJzb3Jfc3RhdGUuaW1hZ2Uud2lkdGggPSB2Yy0+dmNfZm9udC5oZWlnaHQ7CisJCWN1cnNvci5zZXQgfD0gRkJfQ1VSX1NFVFNJWkU7CisJfQorCisJZHggPSB5ICogdmMtPnZjX2ZvbnQuaGVpZ2h0OworCWR5ID0gdnlyZXMgLSAoKHZjLT52Y194ICsgMSkgKiB2Yy0+dmNfZm9udC53aWR0aCk7CisKKwlpZiAob3BzLT5jdXJzb3Jfc3RhdGUuaW1hZ2UuZHggIT0gZHggfHwKKwkgICAgb3BzLT5jdXJzb3Jfc3RhdGUuaW1hZ2UuZHkgIT0gZHkgfHwKKwkgICAgb3BzLT5jdXJzb3JfcmVzZXQpIHsKKwkJb3BzLT5jdXJzb3Jfc3RhdGUuaW1hZ2UuZHggPSBkeDsKKwkJb3BzLT5jdXJzb3Jfc3RhdGUuaW1hZ2UuZHkgPSBkeTsKKwkJY3Vyc29yLnNldCB8PSBGQl9DVVJfU0VUUE9TOworCX0KKworCWlmIChvcHMtPmN1cnNvcl9zdGF0ZS5ob3QueCB8fCBvcHMtPmN1cnNvcl9zdGF0ZS5ob3QueSB8fAorCSAgICBvcHMtPmN1cnNvcl9yZXNldCkgeworCQlvcHMtPmN1cnNvcl9zdGF0ZS5ob3QueCA9IGN1cnNvci5ob3QueSA9IDA7CisJCWN1cnNvci5zZXQgfD0gRkJfQ1VSX1NFVEhPVDsKKwl9CisKKwlpZiAoY3Vyc29yLnNldCAmIEZCX0NVUl9TRVRTSVpFIHx8CisJICAgIHZjLT52Y19jdXJzb3JfdHlwZSAhPSBwLT5jdXJzb3Jfc2hhcGUgfHwKKwkgICAgb3BzLT5jdXJzb3Jfc3RhdGUubWFzayA9PSBOVUxMIHx8CisJICAgIG9wcy0+Y3Vyc29yX3Jlc2V0KSB7CisJCWNoYXIgKnRtcCwgKm1hc2sgPSBrbWFsbG9jKHcqdmMtPnZjX2ZvbnQud2lkdGgsIEdGUF9BVE9NSUMpOworCQlpbnQgY3VyX2hlaWdodCwgc2l6ZSwgaSA9IDA7CisJCWludCB3aWR0aCA9ICh2Yy0+dmNfZm9udC53aWR0aCArIDcpLzg7CisKKwkJaWYgKCFtYXNrKQorCQkJcmV0dXJuOworCisJCXRtcCA9IGttYWxsb2Mod2lkdGggKiB2Yy0+dmNfZm9udC5oZWlnaHQsIEdGUF9BVE9NSUMpOworCisJCWlmICghdG1wKSB7CisJCQlrZnJlZShtYXNrKTsKKwkJCXJldHVybjsKKwkJfQorCisJCWtmcmVlKG9wcy0+Y3Vyc29yX3N0YXRlLm1hc2spOworCQlvcHMtPmN1cnNvcl9zdGF0ZS5tYXNrID0gbWFzazsKKworCQlwLT5jdXJzb3Jfc2hhcGUgPSB2Yy0+dmNfY3Vyc29yX3R5cGU7CisJCWN1cnNvci5zZXQgfD0gRkJfQ1VSX1NFVFNIQVBFOworCisJCXN3aXRjaCAocC0+Y3Vyc29yX3NoYXBlICYgQ1VSX0hXTUFTSykgeworCQljYXNlIENVUl9OT05FOgorCQkJY3VyX2hlaWdodCA9IDA7CisJCQlicmVhazsKKwkJY2FzZSBDVVJfVU5ERVJMSU5FOgorCQkJY3VyX2hlaWdodCA9ICh2Yy0+dmNfZm9udC5oZWlnaHQgPCAxMCkgPyAxIDogMjsKKwkJCWJyZWFrOworCQljYXNlIENVUl9MT1dFUl9USElSRDoKKwkJCWN1cl9oZWlnaHQgPSB2Yy0+dmNfZm9udC5oZWlnaHQvMzsKKwkJCWJyZWFrOworCQljYXNlIENVUl9MT1dFUl9IQUxGOgorCQkJY3VyX2hlaWdodCA9IHZjLT52Y19mb250LmhlaWdodCA+PiAxOworCQkJYnJlYWs7CisJCWNhc2UgQ1VSX1RXT19USElSRFM6CisJCQljdXJfaGVpZ2h0ID0gKHZjLT52Y19mb250LmhlaWdodCA8PCAxKS8zOworCQkJYnJlYWs7CisJCWNhc2UgQ1VSX0JMT0NLOgorCQlkZWZhdWx0OgorCQkJY3VyX2hlaWdodCA9IHZjLT52Y19mb250LmhlaWdodDsKKwkJCWJyZWFrOworCQl9CisKKwkJc2l6ZSA9ICh2Yy0+dmNfZm9udC5oZWlnaHQgLSBjdXJfaGVpZ2h0KSAqIHdpZHRoOworCQl3aGlsZSAoc2l6ZS0tKQorCQkJdG1wW2krK10gPSAwOworCQlzaXplID0gY3VyX2hlaWdodCAqIHdpZHRoOworCQl3aGlsZSAoc2l6ZS0tKQorCQkJdG1wW2krK10gPSAweGZmOworCQltZW1zZXQobWFzaywgMCwgdyAqIHZjLT52Y19mb250LndpZHRoKTsKKwkJcm90YXRlX2Njdyh0bXAsIG1hc2ssIHZjLT52Y19mb250LndpZHRoLCB2Yy0+dmNfZm9udC5oZWlnaHQpOworCQlrZnJlZSh0bXApOworCX0KKworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgQ01fRVJBU0U6CisJCW9wcy0+Y3Vyc29yX3N0YXRlLmVuYWJsZSA9IDA7CisJCWJyZWFrOworCWNhc2UgQ01fRFJBVzoKKwljYXNlIENNX01PVkU6CisJZGVmYXVsdDoKKwkJb3BzLT5jdXJzb3Jfc3RhdGUuZW5hYmxlID0gKHVzZV9zdykgPyAwIDogMTsKKwkJYnJlYWs7CisJfQorCisJY3Vyc29yLmltYWdlLmRhdGEgPSBzcmM7CisJY3Vyc29yLmltYWdlLmZnX2NvbG9yID0gb3BzLT5jdXJzb3Jfc3RhdGUuaW1hZ2UuZmdfY29sb3I7CisJY3Vyc29yLmltYWdlLmJnX2NvbG9yID0gb3BzLT5jdXJzb3Jfc3RhdGUuaW1hZ2UuYmdfY29sb3I7CisJY3Vyc29yLmltYWdlLmR4ID0gb3BzLT5jdXJzb3Jfc3RhdGUuaW1hZ2UuZHg7CisJY3Vyc29yLmltYWdlLmR5ID0gb3BzLT5jdXJzb3Jfc3RhdGUuaW1hZ2UuZHk7CisJY3Vyc29yLmltYWdlLmhlaWdodCA9IG9wcy0+Y3Vyc29yX3N0YXRlLmltYWdlLmhlaWdodDsKKwljdXJzb3IuaW1hZ2Uud2lkdGggPSBvcHMtPmN1cnNvcl9zdGF0ZS5pbWFnZS53aWR0aDsKKwljdXJzb3IuaG90LnggPSBvcHMtPmN1cnNvcl9zdGF0ZS5ob3QueDsKKwljdXJzb3IuaG90LnkgPSBvcHMtPmN1cnNvcl9zdGF0ZS5ob3QueTsKKwljdXJzb3IubWFzayA9IG9wcy0+Y3Vyc29yX3N0YXRlLm1hc2s7CisJY3Vyc29yLmVuYWJsZSA9IG9wcy0+Y3Vyc29yX3N0YXRlLmVuYWJsZTsKKwljdXJzb3IuaW1hZ2UuZGVwdGggPSAxOworCWN1cnNvci5yb3AgPSBST1BfWE9SOworCisJaWYgKGluZm8tPmZib3BzLT5mYl9jdXJzb3IpCisJCWVyciA9IGluZm8tPmZib3BzLT5mYl9jdXJzb3IoaW5mbywgJmN1cnNvcik7CisKKwlpZiAoZXJyKQorCQlzb2Z0X2N1cnNvcihpbmZvLCAmY3Vyc29yKTsKKworCW9wcy0+Y3Vyc29yX3Jlc2V0ID0gMDsKK30KKworaW50IGNjd191cGRhdGVfc3RhcnQoc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJc3RydWN0IGZiY29uX29wcyAqb3BzID0gaW5mby0+ZmJjb25fcGFyOworCXN0cnVjdCBkaXNwbGF5ICpwID0gJmZiX2Rpc3BsYXlbb3BzLT5jdXJyY29uXTsKKwl1MzIgeW9mZnNldDsKKwl1MzIgdnlyZXMgPSBHRVRWWVJFUyhwLT5zY3JvbGxtb2RlLCBpbmZvKTsKKwlpbnQgZXJyOworCisJeW9mZnNldCA9ICh2eXJlcyAtIGluZm8tPnZhci55cmVzKSAtIG9wcy0+dmFyLnhvZmZzZXQ7CisJb3BzLT52YXIueG9mZnNldCA9IG9wcy0+dmFyLnlvZmZzZXQ7CisJb3BzLT52YXIueW9mZnNldCA9IHlvZmZzZXQ7CisJZXJyID0gZmJfcGFuX2Rpc3BsYXkoaW5mbywgJm9wcy0+dmFyKTsKKwlvcHMtPnZhci54b2Zmc2V0ID0gaW5mby0+dmFyLnhvZmZzZXQ7CisJb3BzLT52YXIueW9mZnNldCA9IGluZm8tPnZhci55b2Zmc2V0OworCW9wcy0+dmFyLnZtb2RlID0gaW5mby0+dmFyLnZtb2RlOworCXJldHVybiBlcnI7Cit9CisKK3ZvaWQgZmJjb25fcm90YXRlX2NjdyhzdHJ1Y3QgZmJjb25fb3BzICpvcHMpCit7CisJb3BzLT5ibW92ZSA9IGNjd19ibW92ZTsKKwlvcHMtPmNsZWFyID0gY2N3X2NsZWFyOworCW9wcy0+cHV0Y3MgPSBjY3dfcHV0Y3M7CisJb3BzLT5jbGVhcl9tYXJnaW5zID0gY2N3X2NsZWFyX21hcmdpbnM7CisJb3BzLT5jdXJzb3IgPSBjY3dfY3Vyc29yOworCW9wcy0+dXBkYXRlX3N0YXJ0ID0gY2N3X3VwZGF0ZV9zdGFydDsKK30KK0VYUE9SVF9TWU1CT0woZmJjb25fcm90YXRlX2Njdyk7CisKK01PRFVMRV9BVVRIT1IoIkFudG9uaW5vIERhcGxhcyA8YWRhcGxhc0Bwb2wubmV0PiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb25zb2xlIFJvdGF0aW9uICgyNzAgZGVncmVlcykgU3VwcG9ydCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uX2N3LmMgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb25fY3cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzZmM2I2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uX2N3LmMKQEAgLTAsMCArMSw0MTIgQEAKKy8qCisgKiAgbGludXgvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uX3VkLmMgLS0gU29mdHdhcmUgUm90YXRpb24gLSA5MCBkZWdyZWVzCisgKgorICogICAgICBDb3B5cmlnaHQgKEMpIDIwMDUgQW50b25pbm8gRGFwbGFzIDxhZGFwbGFzIEBwb2wubmV0PgorICoKKyAqICBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlIGZvcgorICogIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvZmIuaD4KKyNpbmNsdWRlIDxsaW51eC92dF9rZXJuLmg+CisjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgorI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgImZiY29uLmgiCisjaW5jbHVkZSAiZmJjb25fcm90YXRlLmgiCisKKy8qCisgKiBSb3RhdGlvbiA5MCBkZWdyZWVzCisgKi8KKworc3RhdGljIGlubGluZSB2b2lkIGN3X3VwZGF0ZV9hdHRyKHU4ICpkc3QsIHU4ICpzcmMsIGludCBhdHRyaWJ1dGUsCisJCQkJICBzdHJ1Y3QgdmNfZGF0YSAqdmMpCit7CisJaW50IGksIGosIG9mZnNldCA9ICh2Yy0+dmNfZm9udC5oZWlnaHQgPCAxMCkgPyAxIDogMjsKKwlpbnQgd2lkdGggPSAodmMtPnZjX2ZvbnQuaGVpZ2h0ICsgNykgPj4gMzsKKwl1OCBjLCB0ID0gMCwgbXNrID0gfigweGZmID4+IG9mZnNldCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgdmMtPnZjX2ZvbnQud2lkdGg7IGkrKykgeworCQlmb3IgKGogPSAwOyBqIDwgd2lkdGg7IGorKykgeworCQkJYyA9ICpzcmM7CisJCQlpZiAoYXR0cmlidXRlICYgRkJDT05fQVRUUklCVVRFX1VOREVSTElORSAmJiAhaikKKwkJCQljIHw9IG1zazsKKwkJCWlmIChhdHRyaWJ1dGUgJiBGQkNPTl9BVFRSSUJVVEVfQk9MRCAmJiBpKQorCQkJCWMgfD0gKihzcmMtd2lkdGgpOworCQkJaWYgKGF0dHJpYnV0ZSAmIEZCQ09OX0FUVFJJQlVURV9SRVZFUlNFKQorCQkJCWMgPSB+YzsKKwkJCXNyYysrOworCQkJKmRzdCsrID0gYzsKKwkJCXQgPSBjOworCQl9CisJfQorfQorCisKK3N0YXRpYyB2b2lkIGN3X2Jtb3ZlKHN0cnVjdCB2Y19kYXRhICp2Yywgc3RydWN0IGZiX2luZm8gKmluZm8sIGludCBzeSwKKwkJICAgICBpbnQgc3gsIGludCBkeSwgaW50IGR4LCBpbnQgaGVpZ2h0LCBpbnQgd2lkdGgpCit7CisJc3RydWN0IGRpc3BsYXkgKnAgPSAmZmJfZGlzcGxheVt2Yy0+dmNfbnVtXTsKKwlzdHJ1Y3QgZmJfY29weWFyZWEgYXJlYTsKKwl1MzIgdnhyZXMgPSBHRVRWWFJFUyhwLT5zY3JvbGxtb2RlLCBpbmZvKTsKKworCWFyZWEuc3ggPSB2eHJlcyAtICgoc3kgKyBoZWlnaHQpICogdmMtPnZjX2ZvbnQuaGVpZ2h0KTsKKwlhcmVhLnN5ID0gc3ggKiB2Yy0+dmNfZm9udC53aWR0aDsKKwlhcmVhLmR4ID0gdnhyZXMgLSAoKGR5ICsgaGVpZ2h0KSAqIHZjLT52Y19mb250LmhlaWdodCk7CisJYXJlYS5keSA9IGR4ICogdmMtPnZjX2ZvbnQud2lkdGg7CisJYXJlYS53aWR0aCA9IGhlaWdodCAqIHZjLT52Y19mb250LmhlaWdodDsKKwlhcmVhLmhlaWdodCAgPSB3aWR0aCAqIHZjLT52Y19mb250LndpZHRoOworCisJaW5mby0+ZmJvcHMtPmZiX2NvcHlhcmVhKGluZm8sICZhcmVhKTsKK30KKworc3RhdGljIHZvaWQgY3dfY2xlYXIoc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgaW50IHN5LAorCQkgICAgIGludCBzeCwgaW50IGhlaWdodCwgaW50IHdpZHRoKQoreworCXN0cnVjdCBkaXNwbGF5ICpwID0gJmZiX2Rpc3BsYXlbdmMtPnZjX251bV07CisJc3RydWN0IGZiX2ZpbGxyZWN0IHJlZ2lvbjsKKwlpbnQgYmdzaGlmdCA9ICh2Yy0+dmNfaGlfZm9udF9tYXNrKSA/IDEzIDogMTI7CisJdTMyIHZ4cmVzID0gR0VUVlhSRVMocC0+c2Nyb2xsbW9kZSwgaW5mbyk7CisKKwlyZWdpb24uY29sb3IgPSBhdHRyX2JnY29sX2VjKGJnc2hpZnQsdmMpOworCXJlZ2lvbi5keCA9IHZ4cmVzIC0gKChzeSArIGhlaWdodCkgKiB2Yy0+dmNfZm9udC5oZWlnaHQpOworCXJlZ2lvbi5keSA9IHN4ICogIHZjLT52Y19mb250LndpZHRoOworCXJlZ2lvbi5oZWlnaHQgPSB3aWR0aCAqIHZjLT52Y19mb250LndpZHRoOworCXJlZ2lvbi53aWR0aCA9IGhlaWdodCAqIHZjLT52Y19mb250LmhlaWdodDsKKwlyZWdpb24ucm9wID0gUk9QX0NPUFk7CisKKwlpbmZvLT5mYm9wcy0+ZmJfZmlsbHJlY3QoaW5mbywgJnJlZ2lvbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjd19wdXRjc19hbGlnbmVkKHN0cnVjdCB2Y19kYXRhICp2Yywgc3RydWN0IGZiX2luZm8gKmluZm8sCisJCQkJICAgIGNvbnN0IHUxNiAqcywgdTMyIGF0dHIsIHUzMiBjbnQsCisJCQkJICAgIHUzMiBkX3BpdGNoLCB1MzIgc19waXRjaCwgdTMyIGNlbGxzaXplLAorCQkJCSAgICBzdHJ1Y3QgZmJfaW1hZ2UgKmltYWdlLCB1OCAqYnVmLCB1OCAqZHN0KQoreworCXN0cnVjdCBmYmNvbl9vcHMgKm9wcyA9IGluZm8tPmZiY29uX3BhcjsKKwl1MTYgY2hhcm1hc2sgPSB2Yy0+dmNfaGlfZm9udF9tYXNrID8gMHgxZmYgOiAweGZmOworCXUzMiBpZHggPSAodmMtPnZjX2ZvbnQuaGVpZ2h0ICsgNykgPj4gMzsKKwl1OCAqc3JjOworCisJd2hpbGUgKGNudC0tKSB7CisJCXNyYyA9IG9wcy0+Zm9udGJ1ZmZlciArIChzY3JfcmVhZHcocysrKSAmIGNoYXJtYXNrKSpjZWxsc2l6ZTsKKworCQlpZiAoYXR0cikgeworCQkJY3dfdXBkYXRlX2F0dHIoYnVmLCBzcmMsIGF0dHIsIHZjKTsKKwkJCXNyYyA9IGJ1ZjsKKwkJfQorCisJCWlmIChsaWtlbHkoaWR4ID09IDEpKQorCQkJX19mYl9wYWRfYWxpZ25lZF9idWZmZXIoZHN0LCBkX3BpdGNoLCBzcmMsIGlkeCwKKwkJCQkJCXZjLT52Y19mb250LndpZHRoKTsKKwkJZWxzZQorCQkJZmJfcGFkX2FsaWduZWRfYnVmZmVyKGRzdCwgZF9waXRjaCwgc3JjLCBpZHgsCisJCQkJCSAgICAgIHZjLT52Y19mb250LndpZHRoKTsKKworCQlkc3QgKz0gZF9waXRjaCAqIHZjLT52Y19mb250LndpZHRoOworCX0KKworCWluZm8tPmZib3BzLT5mYl9pbWFnZWJsaXQoaW5mbywgaW1hZ2UpOworfQorCitzdGF0aWMgdm9pZCBjd19wdXRjcyhzdHJ1Y3QgdmNfZGF0YSAqdmMsIHN0cnVjdCBmYl9pbmZvICppbmZvLAorCQkgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqcywgaW50IGNvdW50LCBpbnQgeXksIGludCB4eCwKKwkJICAgICAgaW50IGZnLCBpbnQgYmcpCit7CisJc3RydWN0IGZiX2ltYWdlIGltYWdlOworCXN0cnVjdCBkaXNwbGF5ICpwID0gJmZiX2Rpc3BsYXlbdmMtPnZjX251bV07CisJc3RydWN0IGZiY29uX29wcyAqb3BzID0gaW5mby0+ZmJjb25fcGFyOworCXUzMiB3aWR0aCA9ICh2Yy0+dmNfZm9udC5oZWlnaHQgKyA3KS84OworCXUzMiBjZWxsc2l6ZSA9IHdpZHRoICogdmMtPnZjX2ZvbnQud2lkdGg7CisJdTMyIG1heGNudCA9IGluZm8tPnBpeG1hcC5zaXplL2NlbGxzaXplOworCXUzMiBzY2FuX2FsaWduID0gaW5mby0+cGl4bWFwLnNjYW5fYWxpZ24gLSAxOworCXUzMiBidWZfYWxpZ24gPSBpbmZvLT5waXhtYXAuYnVmX2FsaWduIC0gMTsKKwl1MzIgY250LCBwaXRjaCwgc2l6ZTsKKwl1MzIgYXR0cmlidXRlID0gZ2V0X2F0dHJpYnV0ZShpbmZvLCBzY3JfcmVhZHcocykpOworCXU4ICpkc3QsICpidWYgPSBOVUxMOworCXUzMiB2eHJlcyA9IEdFVFZYUkVTKHAtPnNjcm9sbG1vZGUsIGluZm8pOworCisJaWYgKCFvcHMtPmZvbnRidWZmZXIpCisJCXJldHVybjsKKworCWltYWdlLmZnX2NvbG9yID0gZmc7CisJaW1hZ2UuYmdfY29sb3IgPSBiZzsKKwlpbWFnZS5keCA9IHZ4cmVzIC0gKCh5eSArIDEpICogdmMtPnZjX2ZvbnQuaGVpZ2h0KTsKKwlpbWFnZS5keSA9IHh4ICogdmMtPnZjX2ZvbnQud2lkdGg7CisJaW1hZ2Uud2lkdGggPSB2Yy0+dmNfZm9udC5oZWlnaHQ7CisJaW1hZ2UuZGVwdGggPSAxOworCisJaWYgKGF0dHJpYnV0ZSkgeworCQlidWYgPSBrbWFsbG9jKGNlbGxzaXplLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFidWYpCisJCQlyZXR1cm47CisJfQorCisJd2hpbGUgKGNvdW50KSB7CisJCWlmIChjb3VudCA+IG1heGNudCkKKwkJCWNudCA9IG1heGNudDsKKwkJZWxzZQorCQkJY250ID0gY291bnQ7CisKKwkJaW1hZ2UuaGVpZ2h0ID0gdmMtPnZjX2ZvbnQud2lkdGggKiBjbnQ7CisJCXBpdGNoID0gKChpbWFnZS53aWR0aCArIDcpID4+IDMpICsgc2Nhbl9hbGlnbjsKKwkJcGl0Y2ggJj0gfnNjYW5fYWxpZ247CisJCXNpemUgPSBwaXRjaCAqIGltYWdlLmhlaWdodCArIGJ1Zl9hbGlnbjsKKwkJc2l6ZSAmPSB+YnVmX2FsaWduOworCQlkc3QgPSBmYl9nZXRfYnVmZmVyX29mZnNldChpbmZvLCAmaW5mby0+cGl4bWFwLCBzaXplKTsKKwkJaW1hZ2UuZGF0YSA9IGRzdDsKKwkJY3dfcHV0Y3NfYWxpZ25lZCh2YywgaW5mbywgcywgYXR0cmlidXRlLCBjbnQsIHBpdGNoLAorCQkJCSB3aWR0aCwgY2VsbHNpemUsICZpbWFnZSwgYnVmLCBkc3QpOworCQlpbWFnZS5keSArPSBpbWFnZS5oZWlnaHQ7CisJCWNvdW50IC09IGNudDsKKwkJcyArPSBjbnQ7CisJfQorCisJLyogYnVmIGlzIGFsd2F5cyBOVUxMIGV4Y2VwdCB3aGVuIGluIG1vbm9jaHJvbWUgbW9kZSwgc28gaW4gdGhpcyBjYXNlCisJICAgaXQncyBhIGdhaW4gdG8gY2hlY2sgYnVmIGFnYWluc3QgTlVMTCBldmVuIHRob3VnaCBrZnJlZSgpIGhhbmRsZXMKKwkgICBOVUxMIHBvaW50ZXJzIGp1c3QgZmluZSAqLworCWlmICh1bmxpa2VseShidWYpKQorCQlrZnJlZShidWYpOworCit9CisKK3N0YXRpYyB2b2lkIGN3X2NsZWFyX21hcmdpbnMoc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKKwkJCSAgICAgaW50IGJvdHRvbV9vbmx5KQoreworCXVuc2lnbmVkIGludCBjdyA9IHZjLT52Y19mb250LndpZHRoOworCXVuc2lnbmVkIGludCBjaCA9IHZjLT52Y19mb250LmhlaWdodDsKKwl1bnNpZ25lZCBpbnQgcncgPSBpbmZvLT52YXIueXJlcyAtICh2Yy0+dmNfY29scypjdyk7CisJdW5zaWduZWQgaW50IGJoID0gaW5mby0+dmFyLnhyZXMgLSAodmMtPnZjX3Jvd3MqY2gpOworCXVuc2lnbmVkIGludCBycyA9IGluZm8tPnZhci55cmVzIC0gcnc7CisJc3RydWN0IGZiX2ZpbGxyZWN0IHJlZ2lvbjsKKwlpbnQgYmdzaGlmdCA9ICh2Yy0+dmNfaGlfZm9udF9tYXNrKSA/IDEzIDogMTI7CisKKwlyZWdpb24uY29sb3IgPSBhdHRyX2JnY29sX2VjKGJnc2hpZnQsdmMpOworCXJlZ2lvbi5yb3AgPSBST1BfQ09QWTsKKworCWlmIChydyAmJiAhYm90dG9tX29ubHkpIHsKKwkJcmVnaW9uLmR4ID0gMDsKKwkJcmVnaW9uLmR5ID0gaW5mby0+dmFyLnlvZmZzZXQgKyByczsKKwkJcmVnaW9uLmhlaWdodCA9IHJ3OworCQlyZWdpb24ud2lkdGggPSBpbmZvLT52YXIueHJlc192aXJ0dWFsOworCQlpbmZvLT5mYm9wcy0+ZmJfZmlsbHJlY3QoaW5mbywgJnJlZ2lvbik7CisJfQorCisJaWYgKGJoKSB7CisJCXJlZ2lvbi5keCA9IGluZm8tPnZhci54b2Zmc2V0OworCQlyZWdpb24uZHkgPSBpbmZvLT52YXIueW9mZnNldDsKKyAgICAgICAgICAgICAgICByZWdpb24uaGVpZ2h0ID0gaW5mby0+dmFyLnlyZXM7CisgICAgICAgICAgICAgICAgcmVnaW9uLndpZHRoID0gYmg7CisJCWluZm8tPmZib3BzLT5mYl9maWxscmVjdChpbmZvLCAmcmVnaW9uKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGN3X2N1cnNvcihzdHJ1Y3QgdmNfZGF0YSAqdmMsIHN0cnVjdCBmYl9pbmZvICppbmZvLAorCQkgICAgICBzdHJ1Y3QgZGlzcGxheSAqcCwgaW50IG1vZGUsIGludCBzb2Z0YmFja19saW5lcywKKwkJICAgICAgaW50IGZnLCBpbnQgYmcpCit7CisJc3RydWN0IGZiX2N1cnNvciBjdXJzb3I7CisJc3RydWN0IGZiY29uX29wcyAqb3BzID0gKHN0cnVjdCBmYmNvbl9vcHMgKikgaW5mby0+ZmJjb25fcGFyOworCXVuc2lnbmVkIHNob3J0IGNoYXJtYXNrID0gdmMtPnZjX2hpX2ZvbnRfbWFzayA/IDB4MWZmIDogMHhmZjsKKwlpbnQgdyA9ICh2Yy0+dmNfZm9udC5oZWlnaHQgKyA3KSA+PiAzLCBjOworCWludCB5ID0gcmVhbF95KHAsIHZjLT52Y195KTsKKwlpbnQgYXR0cmlidXRlLCB1c2Vfc3cgPSAodmMtPnZjX2N1cnNvcl90eXBlICYgMHgxMCk7CisJaW50IGVyciA9IDEsIGR4LCBkeTsKKwljaGFyICpzcmM7CisJdTMyIHZ4cmVzID0gR0VUVlhSRVMocC0+c2Nyb2xsbW9kZSwgaW5mbyk7CisKKwlpZiAoIW9wcy0+Zm9udGJ1ZmZlcikKKwkJcmV0dXJuOworCisJY3Vyc29yLnNldCA9IDA7CisKKwlpZiAoc29mdGJhY2tfbGluZXMpIHsKKwkJaWYgKHkgKyBzb2Z0YmFja19saW5lcyA+PSB2Yy0+dmNfcm93cykgeworCQkJbW9kZSA9IENNX0VSQVNFOworCQkJb3BzLT5jdXJzb3JfZmxhc2ggPSAwOworCQkJcmV0dXJuOworCQl9IGVsc2UKKwkJCXkgKz0gc29mdGJhY2tfbGluZXM7CisJfQorCisgCWMgPSBzY3JfcmVhZHcoKHUxNiAqKSB2Yy0+dmNfcG9zKTsKKwlhdHRyaWJ1dGUgPSBnZXRfYXR0cmlidXRlKGluZm8sIGMpOworCXNyYyA9IG9wcy0+Zm9udGJ1ZmZlciArICgoYyAmIGNoYXJtYXNrKSAqICh3ICogdmMtPnZjX2ZvbnQud2lkdGgpKTsKKworCWlmIChvcHMtPmN1cnNvcl9zdGF0ZS5pbWFnZS5kYXRhICE9IHNyYyB8fAorCSAgICBvcHMtPmN1cnNvcl9yZXNldCkgeworCSAgICBvcHMtPmN1cnNvcl9zdGF0ZS5pbWFnZS5kYXRhID0gc3JjOworCSAgICBjdXJzb3Iuc2V0IHw9IEZCX0NVUl9TRVRJTUFHRTsKKwl9CisKKwlpZiAoYXR0cmlidXRlKSB7CisJCXU4ICpkc3Q7CisKKwkJZHN0ID0ga21hbGxvYyh3ICogdmMtPnZjX2ZvbnQud2lkdGgsIEdGUF9BVE9NSUMpOworCQlpZiAoIWRzdCkKKwkJCXJldHVybjsKKwkJa2ZyZWUob3BzLT5jdXJzb3JfZGF0YSk7CisJCW9wcy0+Y3Vyc29yX2RhdGEgPSBkc3Q7CisJCWN3X3VwZGF0ZV9hdHRyKGRzdCwgc3JjLCBhdHRyaWJ1dGUsIHZjKTsKKwkJc3JjID0gZHN0OworCX0KKworCWlmIChvcHMtPmN1cnNvcl9zdGF0ZS5pbWFnZS5mZ19jb2xvciAhPSBmZyB8fAorCSAgICBvcHMtPmN1cnNvcl9zdGF0ZS5pbWFnZS5iZ19jb2xvciAhPSBiZyB8fAorCSAgICBvcHMtPmN1cnNvcl9yZXNldCkgeworCQlvcHMtPmN1cnNvcl9zdGF0ZS5pbWFnZS5mZ19jb2xvciA9IGZnOworCQlvcHMtPmN1cnNvcl9zdGF0ZS5pbWFnZS5iZ19jb2xvciA9IGJnOworCQljdXJzb3Iuc2V0IHw9IEZCX0NVUl9TRVRDTUFQOworCX0KKworCWlmIChvcHMtPmN1cnNvcl9zdGF0ZS5pbWFnZS5oZWlnaHQgIT0gdmMtPnZjX2ZvbnQud2lkdGggfHwKKwkgICAgb3BzLT5jdXJzb3Jfc3RhdGUuaW1hZ2Uud2lkdGggIT0gdmMtPnZjX2ZvbnQuaGVpZ2h0IHx8CisJICAgIG9wcy0+Y3Vyc29yX3Jlc2V0KSB7CisJCW9wcy0+Y3Vyc29yX3N0YXRlLmltYWdlLmhlaWdodCA9IHZjLT52Y19mb250LndpZHRoOworCQlvcHMtPmN1cnNvcl9zdGF0ZS5pbWFnZS53aWR0aCA9IHZjLT52Y19mb250LmhlaWdodDsKKwkJY3Vyc29yLnNldCB8PSBGQl9DVVJfU0VUU0laRTsKKwl9CisKKwlkeCA9IHZ4cmVzIC0gKCh5ICogdmMtPnZjX2ZvbnQuaGVpZ2h0KSArIHZjLT52Y19mb250LmhlaWdodCk7CisJZHkgPSB2Yy0+dmNfeCAqIHZjLT52Y19mb250LndpZHRoOworCisJaWYgKG9wcy0+Y3Vyc29yX3N0YXRlLmltYWdlLmR4ICE9IGR4IHx8CisJICAgIG9wcy0+Y3Vyc29yX3N0YXRlLmltYWdlLmR5ICE9IGR5IHx8CisJICAgIG9wcy0+Y3Vyc29yX3Jlc2V0KSB7CisJCW9wcy0+Y3Vyc29yX3N0YXRlLmltYWdlLmR4ID0gZHg7CisJCW9wcy0+Y3Vyc29yX3N0YXRlLmltYWdlLmR5ID0gZHk7CisJCWN1cnNvci5zZXQgfD0gRkJfQ1VSX1NFVFBPUzsKKwl9CisKKwlpZiAob3BzLT5jdXJzb3Jfc3RhdGUuaG90LnggfHwgb3BzLT5jdXJzb3Jfc3RhdGUuaG90LnkgfHwKKwkgICAgb3BzLT5jdXJzb3JfcmVzZXQpIHsKKwkJb3BzLT5jdXJzb3Jfc3RhdGUuaG90LnggPSBjdXJzb3IuaG90LnkgPSAwOworCQljdXJzb3Iuc2V0IHw9IEZCX0NVUl9TRVRIT1Q7CisJfQorCisJaWYgKGN1cnNvci5zZXQgJiBGQl9DVVJfU0VUU0laRSB8fAorCSAgICB2Yy0+dmNfY3Vyc29yX3R5cGUgIT0gcC0+Y3Vyc29yX3NoYXBlIHx8CisJICAgIG9wcy0+Y3Vyc29yX3N0YXRlLm1hc2sgPT0gTlVMTCB8fAorCSAgICBvcHMtPmN1cnNvcl9yZXNldCkgeworCQljaGFyICp0bXAsICptYXNrID0ga21hbGxvYyh3KnZjLT52Y19mb250LndpZHRoLCBHRlBfQVRPTUlDKTsKKwkJaW50IGN1cl9oZWlnaHQsIHNpemUsIGkgPSAwOworCQlpbnQgd2lkdGggPSAodmMtPnZjX2ZvbnQud2lkdGggKyA3KS84OworCisJCWlmICghbWFzaykKKwkJCXJldHVybjsKKworCQl0bXAgPSBrbWFsbG9jKHdpZHRoICogdmMtPnZjX2ZvbnQuaGVpZ2h0LCBHRlBfQVRPTUlDKTsKKworCQlpZiAoIXRtcCkgeworCQkJa2ZyZWUobWFzayk7CisJCQlyZXR1cm47CisJCX0KKworCQlrZnJlZShvcHMtPmN1cnNvcl9zdGF0ZS5tYXNrKTsKKwkJb3BzLT5jdXJzb3Jfc3RhdGUubWFzayA9IG1hc2s7CisKKwkJcC0+Y3Vyc29yX3NoYXBlID0gdmMtPnZjX2N1cnNvcl90eXBlOworCQljdXJzb3Iuc2V0IHw9IEZCX0NVUl9TRVRTSEFQRTsKKworCQlzd2l0Y2ggKHAtPmN1cnNvcl9zaGFwZSAmIENVUl9IV01BU0spIHsKKwkJY2FzZSBDVVJfTk9ORToKKwkJCWN1cl9oZWlnaHQgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgQ1VSX1VOREVSTElORToKKwkJCWN1cl9oZWlnaHQgPSAodmMtPnZjX2ZvbnQuaGVpZ2h0IDwgMTApID8gMSA6IDI7CisJCQlicmVhazsKKwkJY2FzZSBDVVJfTE9XRVJfVEhJUkQ6CisJCQljdXJfaGVpZ2h0ID0gdmMtPnZjX2ZvbnQuaGVpZ2h0LzM7CisJCQlicmVhazsKKwkJY2FzZSBDVVJfTE9XRVJfSEFMRjoKKwkJCWN1cl9oZWlnaHQgPSB2Yy0+dmNfZm9udC5oZWlnaHQgPj4gMTsKKwkJCWJyZWFrOworCQljYXNlIENVUl9UV09fVEhJUkRTOgorCQkJY3VyX2hlaWdodCA9ICh2Yy0+dmNfZm9udC5oZWlnaHQgPDwgMSkvMzsKKwkJCWJyZWFrOworCQljYXNlIENVUl9CTE9DSzoKKwkJZGVmYXVsdDoKKwkJCWN1cl9oZWlnaHQgPSB2Yy0+dmNfZm9udC5oZWlnaHQ7CisJCQlicmVhazsKKwkJfQorCisJCXNpemUgPSAodmMtPnZjX2ZvbnQuaGVpZ2h0IC0gY3VyX2hlaWdodCkgKiB3aWR0aDsKKwkJd2hpbGUgKHNpemUtLSkKKwkJCXRtcFtpKytdID0gMDsKKwkJc2l6ZSA9IGN1cl9oZWlnaHQgKiB3aWR0aDsKKwkJd2hpbGUgKHNpemUtLSkKKwkJCXRtcFtpKytdID0gMHhmZjsKKwkJbWVtc2V0KG1hc2ssIDAsIHcgKiB2Yy0+dmNfZm9udC53aWR0aCk7CisJCXJvdGF0ZV9jdyh0bXAsIG1hc2ssIHZjLT52Y19mb250LndpZHRoLCB2Yy0+dmNfZm9udC5oZWlnaHQpOworCQlrZnJlZSh0bXApOworCX0KKworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgQ01fRVJBU0U6CisJCW9wcy0+Y3Vyc29yX3N0YXRlLmVuYWJsZSA9IDA7CisJCWJyZWFrOworCWNhc2UgQ01fRFJBVzoKKwljYXNlIENNX01PVkU6CisJZGVmYXVsdDoKKwkJb3BzLT5jdXJzb3Jfc3RhdGUuZW5hYmxlID0gKHVzZV9zdykgPyAwIDogMTsKKwkJYnJlYWs7CisJfQorCisJY3Vyc29yLmltYWdlLmRhdGEgPSBzcmM7CisJY3Vyc29yLmltYWdlLmZnX2NvbG9yID0gb3BzLT5jdXJzb3Jfc3RhdGUuaW1hZ2UuZmdfY29sb3I7CisJY3Vyc29yLmltYWdlLmJnX2NvbG9yID0gb3BzLT5jdXJzb3Jfc3RhdGUuaW1hZ2UuYmdfY29sb3I7CisJY3Vyc29yLmltYWdlLmR4ID0gb3BzLT5jdXJzb3Jfc3RhdGUuaW1hZ2UuZHg7CisJY3Vyc29yLmltYWdlLmR5ID0gb3BzLT5jdXJzb3Jfc3RhdGUuaW1hZ2UuZHk7CisJY3Vyc29yLmltYWdlLmhlaWdodCA9IG9wcy0+Y3Vyc29yX3N0YXRlLmltYWdlLmhlaWdodDsKKwljdXJzb3IuaW1hZ2Uud2lkdGggPSBvcHMtPmN1cnNvcl9zdGF0ZS5pbWFnZS53aWR0aDsKKwljdXJzb3IuaG90LnggPSBvcHMtPmN1cnNvcl9zdGF0ZS5ob3QueDsKKwljdXJzb3IuaG90LnkgPSBvcHMtPmN1cnNvcl9zdGF0ZS5ob3QueTsKKwljdXJzb3IubWFzayA9IG9wcy0+Y3Vyc29yX3N0YXRlLm1hc2s7CisJY3Vyc29yLmVuYWJsZSA9IG9wcy0+Y3Vyc29yX3N0YXRlLmVuYWJsZTsKKwljdXJzb3IuaW1hZ2UuZGVwdGggPSAxOworCWN1cnNvci5yb3AgPSBST1BfWE9SOworCisJaWYgKGluZm8tPmZib3BzLT5mYl9jdXJzb3IpCisJCWVyciA9IGluZm8tPmZib3BzLT5mYl9jdXJzb3IoaW5mbywgJmN1cnNvcik7CisKKwlpZiAoZXJyKQorCQlzb2Z0X2N1cnNvcihpbmZvLCAmY3Vyc29yKTsKKworCW9wcy0+Y3Vyc29yX3Jlc2V0ID0gMDsKK30KKworaW50IGN3X3VwZGF0ZV9zdGFydChzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgZmJjb25fb3BzICpvcHMgPSBpbmZvLT5mYmNvbl9wYXI7CisJc3RydWN0IGRpc3BsYXkgKnAgPSAmZmJfZGlzcGxheVtvcHMtPmN1cnJjb25dOworCXUzMiB2eHJlcyA9IEdFVFZYUkVTKHAtPnNjcm9sbG1vZGUsIGluZm8pOworCXUzMiB4b2Zmc2V0OworCWludCBlcnI7CisKKwl4b2Zmc2V0ID0gdnhyZXMgLSAoaW5mby0+dmFyLnhyZXMgKyBvcHMtPnZhci55b2Zmc2V0KTsKKwlvcHMtPnZhci55b2Zmc2V0ID0gb3BzLT52YXIueG9mZnNldDsKKwlvcHMtPnZhci54b2Zmc2V0ID0geG9mZnNldDsKKwllcnIgPSBmYl9wYW5fZGlzcGxheShpbmZvLCAmb3BzLT52YXIpOworCW9wcy0+dmFyLnhvZmZzZXQgPSBpbmZvLT52YXIueG9mZnNldDsKKwlvcHMtPnZhci55b2Zmc2V0ID0gaW5mby0+dmFyLnlvZmZzZXQ7CisJb3BzLT52YXIudm1vZGUgPSBpbmZvLT52YXIudm1vZGU7CisJcmV0dXJuIGVycjsKK30KKwordm9pZCBmYmNvbl9yb3RhdGVfY3coc3RydWN0IGZiY29uX29wcyAqb3BzKQoreworCW9wcy0+Ym1vdmUgPSBjd19ibW92ZTsKKwlvcHMtPmNsZWFyID0gY3dfY2xlYXI7CisJb3BzLT5wdXRjcyA9IGN3X3B1dGNzOworCW9wcy0+Y2xlYXJfbWFyZ2lucyA9IGN3X2NsZWFyX21hcmdpbnM7CisJb3BzLT5jdXJzb3IgPSBjd19jdXJzb3I7CisJb3BzLT51cGRhdGVfc3RhcnQgPSBjd191cGRhdGVfc3RhcnQ7Cit9CitFWFBPUlRfU1lNQk9MKGZiY29uX3JvdGF0ZV9jdyk7CisKK01PRFVMRV9BVVRIT1IoIkFudG9uaW5vIERhcGxhcyA8YWRhcGxhc0Bwb2wubmV0PiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb25zb2xlIFJvdGF0aW9uICg5MCBkZWdyZWVzKSBTdXBwb3J0Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb25fcm90YXRlLmMgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb25fcm90YXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWMwZGQ4ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbl9yb3RhdGUuYwpAQCAtMCwwICsxLDExNyBAQAorLyoKKyAqICBsaW51eC9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb25fcm90YXRlLmMgLS0gU29mdHdhcmUgUm90YXRpb24KKyAqCisgKiAgICAgIENvcHlyaWdodCAoQykgMjAwNSBBbnRvbmlubyBEYXBsYXMgPGFkYXBsYXMgQHBvbC5uZXQ+CisgKgorICogIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUgZm9yCisgKiAgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorI2luY2x1ZGUgPGxpbnV4L3Z0X2tlcm4uaD4KKyNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSAiZmJjb24uaCIKKyNpbmNsdWRlICJmYmNvbl9yb3RhdGUuaCIKKworc3RhdGljIGludCBmYmNvbl9yb3RhdGVfZm9udChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IHZjX2RhdGEgKnZjLAorCQkJICAgICBzdHJ1Y3QgZGlzcGxheSAqcCkKK3sKKwlzdHJ1Y3QgZmJjb25fb3BzICpvcHMgPSBpbmZvLT5mYmNvbl9wYXI7CisJaW50IGxlbiwgZXJyID0gMDsKKwlpbnQgc19jZWxsc2l6ZSwgZF9jZWxsc2l6ZSwgaTsKKwljb25zdCB1OCAqc3JjOworCXU4ICpkc3Q7CisKKwlpZiAodmMtPnZjX2ZvbnQuZGF0YSA9PSBvcHMtPmZvbnRkYXRhICYmCisJICAgIHAtPmNvbl9yb3RhdGUgPT0gb3BzLT5jdXJfcm90YXRlKQorCQlnb3RvIGZpbmlzaGVkOworCisJc3JjID0gb3BzLT5mb250ZGF0YSA9IHZjLT52Y19mb250LmRhdGE7CisJb3BzLT5jdXJfcm90YXRlID0gcC0+Y29uX3JvdGF0ZTsKKwlsZW4gPSAoIXAtPnVzZXJmb250KSA/IDI1NiA6IEZOVENIQVJDTlQoc3JjKTsKKwlzX2NlbGxzaXplID0gKCh2Yy0+dmNfZm9udC53aWR0aCArIDcpLzgpICoKKwkJdmMtPnZjX2ZvbnQuaGVpZ2h0OworCWRfY2VsbHNpemUgPSBzX2NlbGxzaXplOworCisJaWYgKG9wcy0+cm90YXRlID09IEZCX1JPVEFURV9DVyB8fAorCSAgICBvcHMtPnJvdGF0ZSA9PSBGQl9ST1RBVEVfQ0NXKQorCQlkX2NlbGxzaXplID0gKCh2Yy0+dmNfZm9udC5oZWlnaHQgKyA3KS84KSAqCisJCQl2Yy0+dmNfZm9udC53aWR0aDsKKworCWlmIChpbmZvLT5mYm9wcy0+ZmJfc3luYykKKwkJaW5mby0+ZmJvcHMtPmZiX3N5bmMoaW5mbyk7CisKKwlpZiAob3BzLT5mZF9zaXplIDwgZF9jZWxsc2l6ZSAqIGxlbikgeworCQlkc3QgPSBrbWFsbG9jKGRfY2VsbHNpemUgKiBsZW4sIEdGUF9LRVJORUwpOworCisJCWlmIChkc3QgPT0gTlVMTCkgeworCQkJZXJyID0gLUVOT01FTTsKKwkJCWdvdG8gZmluaXNoZWQ7CisJCX0KKworCQlvcHMtPmZkX3NpemUgPSBkX2NlbGxzaXplICogbGVuOworCQlrZnJlZShvcHMtPmZvbnRidWZmZXIpOworCQlvcHMtPmZvbnRidWZmZXIgPSBkc3Q7CisJfQorCisJZHN0ID0gb3BzLT5mb250YnVmZmVyOworCW1lbXNldChkc3QsIDAsIG9wcy0+ZmRfc2l6ZSk7CisKKwlzd2l0Y2ggKG9wcy0+cm90YXRlKSB7CisJY2FzZSBGQl9ST1RBVEVfVUQ6CisJCWZvciAoaSA9IGxlbjsgaS0tOyApIHsKKwkJCXJvdGF0ZV91ZChzcmMsIGRzdCwgdmMtPnZjX2ZvbnQud2lkdGgsCisJCQkJICB2Yy0+dmNfZm9udC5oZWlnaHQpOworCisJCQlzcmMgKz0gc19jZWxsc2l6ZTsKKwkJCWRzdCArPSBkX2NlbGxzaXplOworCQl9CisJCWJyZWFrOworCWNhc2UgRkJfUk9UQVRFX0NXOgorCQlmb3IgKGkgPSBsZW47IGktLTsgKSB7CisJCQlyb3RhdGVfY3coc3JjLCBkc3QsIHZjLT52Y19mb250LndpZHRoLAorCQkJCSAgdmMtPnZjX2ZvbnQuaGVpZ2h0KTsKKwkJCXNyYyArPSBzX2NlbGxzaXplOworCQkJZHN0ICs9IGRfY2VsbHNpemU7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBGQl9ST1RBVEVfQ0NXOgorCQlmb3IgKGkgPSBsZW47IGktLTsgKSB7CisJCQlyb3RhdGVfY2N3KHNyYywgZHN0LCB2Yy0+dmNfZm9udC53aWR0aCwKKwkJCQkgICB2Yy0+dmNfZm9udC5oZWlnaHQpOworCQkJc3JjICs9IHNfY2VsbHNpemU7CisJCQlkc3QgKz0gZF9jZWxsc2l6ZTsKKwkJfQorCQlicmVhazsKKwl9CisKK2ZpbmlzaGVkOgorCXJldHVybiBlcnI7Cit9CisKK3ZvaWQgZmJjb25fc2V0X3JvdGF0ZShzdHJ1Y3QgZmJjb25fb3BzICpvcHMpCit7CisJb3BzLT5yb3RhdGVfZm9udCA9IGZiY29uX3JvdGF0ZV9mb250OworCisJc3dpdGNoKG9wcy0+cm90YXRlKSB7CisJY2FzZSBGQl9ST1RBVEVfQ1c6CisJCWZiY29uX3JvdGF0ZV9jdyhvcHMpOworCQlicmVhazsKKwljYXNlIEZCX1JPVEFURV9VRDoKKwkJZmJjb25fcm90YXRlX3VkKG9wcyk7CisJCWJyZWFrOworCWNhc2UgRkJfUk9UQVRFX0NDVzoKKwkJZmJjb25fcm90YXRlX2NjdyhvcHMpOworCQlicmVhazsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKGZiY29uX3NldF9yb3RhdGUpOworCitNT0RVTEVfQVVUSE9SKCJBbnRvbmlubyBEYXBsYXMgPGFkYXBsYXNAcG9sLm5ldD4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29uc29sZSBSb3RhdGlvbiBTdXBwb3J0Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb25fcm90YXRlLmggYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb25fcm90YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTBjNjcyMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbl9yb3RhdGUuaApAQCAtMCwwICsxLDEwNSBAQAorLyoKKyAqICBsaW51eC9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb25fcm90YXRlLmggLS0gU29mdHdhcmUgRGlzcGxheSBSb3RhdGlvbgorICoKKyAqCUNvcHlyaWdodCAoQykgMjAwNSBBbnRvbmlubyBEYXBsYXMgPGFkYXBsYXNAcG9sLm5ldD4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfRkJDT05fUk9UQVRFX0gKKyNkZWZpbmUgX0ZCQ09OX1JPVEFURV9ICisKKyNkZWZpbmUgRk5UQ0hBUkNOVChmZCkJKCgoaW50ICopKGZkKSlbLTNdKQorCisjZGVmaW5lIEdFVFZZUkVTKHMsaSkgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChzID09IFNDUk9MTF9SRURSQVcgfHwgcyA9PSBTQ1JPTExfTU9WRSkgPyBcCisgICAgICAgIChpKS0+dmFyLnlyZXMgOiAoaSktPnZhci55cmVzX3ZpcnR1YWw7IH0pCisKKyNkZWZpbmUgR0VUVlhSRVMocyxpKSAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKHMgPT0gU0NST0xMX1JFRFJBVyB8fCBzID09IFNDUk9MTF9NT1ZFIHx8ICEoaSktPmZpeC54cGFuc3RlcCkgPyBcCisgICAgICAgIChpKS0+dmFyLnhyZXMgOiAoaSktPnZhci54cmVzX3ZpcnR1YWw7IH0pCisKKy8qCisgKiBUaGUgYml0bWFwIGlzIGFsd2F5cyBiaWcgZW5kaWFuCisgKi8KKyNpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKKyNkZWZpbmUgRkJDT05fQklUKGIpICg3IC0gKGIpKQorI2Vsc2UKKyNkZWZpbmUgRkJDT05fQklUKGIpIChiKQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgaW50IHBhdHRlcm5fdGVzdF9iaXQodTMyIHgsIHUzMiB5LCB1MzIgcGl0Y2gsIGNvbnN0IGNoYXIgKnBhdCkKK3sKKwl1MzIgdG1wID0gKHkgKiBwaXRjaCkgKyB4LCBpbmRleCA9IHRtcCAvIDgsICBiaXQgPSB0bXAgJSA4OworCisJcGF0ICs9aW5kZXg7CisJcmV0dXJuICh0ZXN0X2JpdChGQkNPTl9CSVQoYml0KSwgKHZvaWQgKilwYXQpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBhdHRlcm5fc2V0X2JpdCh1MzIgeCwgdTMyIHksIHUzMiBwaXRjaCwgY2hhciAqcGF0KQoreworCXUzMiB0bXAgPSAoeSAqIHBpdGNoKSArIHgsIGluZGV4ID0gdG1wIC8gOCwgYml0ID0gdG1wICUgODsKKworCXBhdCArPSBpbmRleDsKKwlzZXRfYml0KEZCQ09OX0JJVChiaXQpLCAodm9pZCAqKXBhdCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByb3RhdGVfdWQoY29uc3QgY2hhciAqaW4sIGNoYXIgKm91dCwgdTMyIHdpZHRoLCB1MzIgaGVpZ2h0KQoreworCWludCBpLCBqOworCWludCBzaGlmdCA9IHdpZHRoICUgODsKKworCXdpZHRoID0gKHdpZHRoICsgNykgJiB+NzsKKworCWZvciAoaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykgeworCQlmb3IgKGogPSAwOyBqIDwgd2lkdGg7IGorKykgeworCQkJaWYgKHBhdHRlcm5fdGVzdF9iaXQoaiwgaSwgd2lkdGgsIGluKSkKKwkJCQlwYXR0ZXJuX3NldF9iaXQod2lkdGggLSAoMSArIGogKyBzaGlmdCksCisJCQkJCQloZWlnaHQgLSAoMSArIGkpLAorCQkJCQkJd2lkdGgsIG91dCk7CisJCX0KKworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIHJvdGF0ZV9jdyhjb25zdCBjaGFyICppbiwgY2hhciAqb3V0LCB1MzIgd2lkdGgsIHUzMiBoZWlnaHQpCit7CisJaW50IGksIGosIGggPSBoZWlnaHQsIHcgPSB3aWR0aDsKKwlpbnQgc2hpZnQgPSAoOCAtIChoZWlnaHQgJSA4KSkgJiA3OworCisJd2lkdGggPSAod2lkdGggKyA3KSAmIH43OworCWhlaWdodCA9IChoZWlnaHQgKyA3KSAmIH43OworCisJZm9yIChpID0gMDsgaSA8IGg7IGkrKykgeworCQlmb3IgKGogPSAwOyBqIDwgdzsgaisrKSB7CisJCQlpZiAocGF0dGVybl90ZXN0X2JpdChqLCBpLCB3aWR0aCwgaW4pKQorCQkJCXBhdHRlcm5fc2V0X2JpdChoZWlnaHQgLSAxIC0gaSAtIHNoaWZ0LCBqLAorCQkJCQkJaGVpZ2h0LCBvdXQpOworCisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByb3RhdGVfY2N3KGNvbnN0IGNoYXIgKmluLCBjaGFyICpvdXQsIHUzMiB3aWR0aCwgdTMyIGhlaWdodCkKK3sKKwlpbnQgaSwgaiwgaCA9IGhlaWdodCwgdyA9IHdpZHRoOworCWludCBzaGlmdCA9IHdpZHRoICUgODsKKworCXdpZHRoID0gKHdpZHRoICsgNykgJiB+NzsKKwloZWlnaHQgPSAoaGVpZ2h0ICsgNykgJiB+NzsKKworCWZvciAoaSA9IDA7IGkgPCBoOyBpKyspIHsKKwkJZm9yIChqID0gMDsgaiA8IHc7IGorKykgeworCQkJaWYgKHBhdHRlcm5fdGVzdF9iaXQoaiwgaSwgd2lkdGgsIGluKSkKKwkJCQlwYXR0ZXJuX3NldF9iaXQoaSwgd2lkdGggLSAxIC0gaiAtIHNoaWZ0LAorCQkJCQkJaGVpZ2h0LCBvdXQpOworCQl9CisJfQorfQorCitleHRlcm4gdm9pZCBmYmNvbl9yb3RhdGVfY3coc3RydWN0IGZiY29uX29wcyAqb3BzKTsKK2V4dGVybiB2b2lkIGZiY29uX3JvdGF0ZV91ZChzdHJ1Y3QgZmJjb25fb3BzICpvcHMpOworZXh0ZXJuIHZvaWQgZmJjb25fcm90YXRlX2NjdyhzdHJ1Y3QgZmJjb25fb3BzICpvcHMpOworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb25fdWQuYyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbl91ZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlMWQ5ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb25fdWQuYwpAQCAtMCwwICsxLDQ1NCBAQAorLyoKKyAqICBsaW51eC9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb25fdWQuYyAtLSBTb2Z0d2FyZSBSb3RhdGlvbiAtIDE4MCBkZWdyZWVzCisgKgorICogICAgICBDb3B5cmlnaHQgKEMpIDIwMDUgQW50b25pbm8gRGFwbGFzIDxhZGFwbGFzIEBwb2wubmV0PgorICoKKyAqICBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlIGZvcgorICogIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvZmIuaD4KKyNpbmNsdWRlIDxsaW51eC92dF9rZXJuLmg+CisjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgorI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgImZiY29uLmgiCisjaW5jbHVkZSAiZmJjb25fcm90YXRlLmgiCisKKy8qCisgKiBSb3RhdGlvbiAxODAgZGVncmVlcworICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1ZF91cGRhdGVfYXR0cih1OCAqZHN0LCB1OCAqc3JjLCBpbnQgYXR0cmlidXRlLAorCQkJCSAgc3RydWN0IHZjX2RhdGEgKnZjKQoreworCWludCBpLCBvZmZzZXQgPSAodmMtPnZjX2ZvbnQuaGVpZ2h0IDwgMTApID8gMSA6IDI7CisJaW50IHdpZHRoID0gKHZjLT52Y19mb250LndpZHRoICsgNykgPj4gMzsKKwl1bnNpZ25lZCBpbnQgY2VsbHNpemUgPSB2Yy0+dmNfZm9udC5oZWlnaHQgKiB3aWR0aDsKKwl1OCBjOworCisJb2Zmc2V0ID0gb2Zmc2V0ICogd2lkdGg7CisKKwlmb3IgKGkgPSAwOyBpIDwgY2VsbHNpemU7IGkrKykgeworCQljID0gc3JjW2ldOworCQlpZiAoYXR0cmlidXRlICYgRkJDT05fQVRUUklCVVRFX1VOREVSTElORSAmJiBpIDwgb2Zmc2V0KQorCQkJYyA9IDB4ZmY7CisJCWlmIChhdHRyaWJ1dGUgJiBGQkNPTl9BVFRSSUJVVEVfQk9MRCkKKwkJCWMgfD0gYyA8PCAxOworCQlpZiAoYXR0cmlidXRlICYgRkJDT05fQVRUUklCVVRFX1JFVkVSU0UpCisJCQljID0gfmM7CisJCWRzdFtpXSA9IGM7CisJfQorfQorCisKK3N0YXRpYyB2b2lkIHVkX2Jtb3ZlKHN0cnVjdCB2Y19kYXRhICp2Yywgc3RydWN0IGZiX2luZm8gKmluZm8sIGludCBzeSwKKwkJICAgICBpbnQgc3gsIGludCBkeSwgaW50IGR4LCBpbnQgaGVpZ2h0LCBpbnQgd2lkdGgpCit7CisJc3RydWN0IGRpc3BsYXkgKnAgPSAmZmJfZGlzcGxheVt2Yy0+dmNfbnVtXTsKKwlzdHJ1Y3QgZmJfY29weWFyZWEgYXJlYTsKKwl1MzIgdnlyZXMgPSBHRVRWWVJFUyhwLT5zY3JvbGxtb2RlLCBpbmZvKTsKKwl1MzIgdnhyZXMgPSBHRVRWWFJFUyhwLT5zY3JvbGxtb2RlLCBpbmZvKTsKKworCWFyZWEuc3kgPSB2eXJlcyAtICgoc3kgKyBoZWlnaHQpICogdmMtPnZjX2ZvbnQuaGVpZ2h0KTsKKwlhcmVhLnN4ID0gdnhyZXMgLSAoKHN4ICsgd2lkdGgpICogdmMtPnZjX2ZvbnQud2lkdGgpOworCWFyZWEuZHkgPSB2eXJlcyAtICgoZHkgKyBoZWlnaHQpICogdmMtPnZjX2ZvbnQuaGVpZ2h0KTsKKwlhcmVhLmR4ID0gdnhyZXMgLSAoKGR4ICsgd2lkdGgpICogdmMtPnZjX2ZvbnQud2lkdGgpOworCWFyZWEuaGVpZ2h0ID0gaGVpZ2h0ICogdmMtPnZjX2ZvbnQuaGVpZ2h0OworCWFyZWEud2lkdGggID0gd2lkdGggKiB2Yy0+dmNfZm9udC53aWR0aDsKKworCWluZm8tPmZib3BzLT5mYl9jb3B5YXJlYShpbmZvLCAmYXJlYSk7Cit9CisKK3N0YXRpYyB2b2lkIHVkX2NsZWFyKHN0cnVjdCB2Y19kYXRhICp2Yywgc3RydWN0IGZiX2luZm8gKmluZm8sIGludCBzeSwKKwkJICAgICBpbnQgc3gsIGludCBoZWlnaHQsIGludCB3aWR0aCkKK3sKKwlzdHJ1Y3QgZGlzcGxheSAqcCA9ICZmYl9kaXNwbGF5W3ZjLT52Y19udW1dOworCXN0cnVjdCBmYl9maWxscmVjdCByZWdpb247CisJaW50IGJnc2hpZnQgPSAodmMtPnZjX2hpX2ZvbnRfbWFzaykgPyAxMyA6IDEyOworCXUzMiB2eXJlcyA9IEdFVFZZUkVTKHAtPnNjcm9sbG1vZGUsIGluZm8pOworCXUzMiB2eHJlcyA9IEdFVFZYUkVTKHAtPnNjcm9sbG1vZGUsIGluZm8pOworCisJcmVnaW9uLmNvbG9yID0gYXR0cl9iZ2NvbF9lYyhiZ3NoaWZ0LHZjKTsKKwlyZWdpb24uZHkgPSB2eXJlcyAtICgoc3kgKyBoZWlnaHQpICogdmMtPnZjX2ZvbnQuaGVpZ2h0KTsKKwlyZWdpb24uZHggPSB2eHJlcyAtICgoc3ggKyB3aWR0aCkgKiAgdmMtPnZjX2ZvbnQud2lkdGgpOworCXJlZ2lvbi53aWR0aCA9IHdpZHRoICogdmMtPnZjX2ZvbnQud2lkdGg7CisJcmVnaW9uLmhlaWdodCA9IGhlaWdodCAqIHZjLT52Y19mb250LmhlaWdodDsKKwlyZWdpb24ucm9wID0gUk9QX0NPUFk7CisKKwlpbmZvLT5mYm9wcy0+ZmJfZmlsbHJlY3QoaW5mbywgJnJlZ2lvbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1ZF9wdXRjc19hbGlnbmVkKHN0cnVjdCB2Y19kYXRhICp2Yywgc3RydWN0IGZiX2luZm8gKmluZm8sCisJCQkJICAgIGNvbnN0IHUxNiAqcywgdTMyIGF0dHIsIHUzMiBjbnQsCisJCQkJICAgIHUzMiBkX3BpdGNoLCB1MzIgc19waXRjaCwgdTMyIGNlbGxzaXplLAorCQkJCSAgICBzdHJ1Y3QgZmJfaW1hZ2UgKmltYWdlLCB1OCAqYnVmLCB1OCAqZHN0KQoreworCXN0cnVjdCBmYmNvbl9vcHMgKm9wcyA9IGluZm8tPmZiY29uX3BhcjsKKwl1MTYgY2hhcm1hc2sgPSB2Yy0+dmNfaGlfZm9udF9tYXNrID8gMHgxZmYgOiAweGZmOworCXUzMiBpZHggPSB2Yy0+dmNfZm9udC53aWR0aCA+PiAzOworCXU4ICpzcmM7CisKKwl3aGlsZSAoY250LS0pIHsKKwkJc3JjID0gb3BzLT5mb250YnVmZmVyICsgKHNjcl9yZWFkdyhzLS0pICYgY2hhcm1hc2spKmNlbGxzaXplOworCisJCWlmIChhdHRyKSB7CisJCQl1ZF91cGRhdGVfYXR0cihidWYsIHNyYywgYXR0ciwgdmMpOworCQkJc3JjID0gYnVmOworCQl9CisKKwkJaWYgKGxpa2VseShpZHggPT0gMSkpCisJCQlfX2ZiX3BhZF9hbGlnbmVkX2J1ZmZlcihkc3QsIGRfcGl0Y2gsIHNyYywgaWR4LAorCQkJCQkJaW1hZ2UtPmhlaWdodCk7CisJCWVsc2UKKwkJCWZiX3BhZF9hbGlnbmVkX2J1ZmZlcihkc3QsIGRfcGl0Y2gsIHNyYywgaWR4LAorCQkJCQkgICAgICBpbWFnZS0+aGVpZ2h0KTsKKworCQlkc3QgKz0gc19waXRjaDsKKwl9CisKKwlpbmZvLT5mYm9wcy0+ZmJfaW1hZ2VibGl0KGluZm8sIGltYWdlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHVkX3B1dGNzX3VuYWxpZ25lZChzdHJ1Y3QgdmNfZGF0YSAqdmMsCisJCQkJICAgICAgc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IHUxNiAqcywKKwkJCQkgICAgICB1MzIgYXR0ciwgdTMyIGNudCwgdTMyIGRfcGl0Y2gsCisJCQkJICAgICAgdTMyIHNfcGl0Y2gsIHUzMiBjZWxsc2l6ZSwKKwkJCQkgICAgICBzdHJ1Y3QgZmJfaW1hZ2UgKmltYWdlLCB1OCAqYnVmLAorCQkJCSAgICAgIHU4ICpkc3QpCit7CisJc3RydWN0IGZiY29uX29wcyAqb3BzID0gaW5mby0+ZmJjb25fcGFyOworCXUxNiBjaGFybWFzayA9IHZjLT52Y19oaV9mb250X21hc2sgPyAweDFmZiA6IDB4ZmY7CisJdTMyIHNoaWZ0X2xvdyA9IDAsIG1vZCA9IHZjLT52Y19mb250LndpZHRoICUgODsKKwl1MzIgc2hpZnRfaGlnaCA9IDg7CisJdTMyIGlkeCA9IHZjLT52Y19mb250LndpZHRoID4+IDM7CisJdTggKnNyYzsKKworCXdoaWxlIChjbnQtLSkgeworCQlzcmMgPSBvcHMtPmZvbnRidWZmZXIgKyAoc2NyX3JlYWR3KHMtLSkgJiBjaGFybWFzaykqY2VsbHNpemU7CisKKwkJaWYgKGF0dHIpIHsKKwkJCXVkX3VwZGF0ZV9hdHRyKGJ1Ziwgc3JjLCBhdHRyLCB2Yyk7CisJCQlzcmMgPSBidWY7CisJCX0KKworCQlmYl9wYWRfdW5hbGlnbmVkX2J1ZmZlcihkc3QsIGRfcGl0Y2gsIHNyYywgaWR4LAorCQkJCQlpbWFnZS0+aGVpZ2h0LCBzaGlmdF9oaWdoLAorCQkJCQlzaGlmdF9sb3csIG1vZCk7CisJCXNoaWZ0X2xvdyArPSBtb2Q7CisJCWRzdCArPSAoc2hpZnRfbG93ID49IDgpID8gc19waXRjaCA6IHNfcGl0Y2ggLSAxOworCQlzaGlmdF9sb3cgJj0gNzsKKwkJc2hpZnRfaGlnaCA9IDggLSBzaGlmdF9sb3c7CisJfQorCisJaW5mby0+ZmJvcHMtPmZiX2ltYWdlYmxpdChpbmZvLCBpbWFnZSk7CisKK30KKworc3RhdGljIHZvaWQgdWRfcHV0Y3Moc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKKwkJICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnMsIGludCBjb3VudCwgaW50IHl5LCBpbnQgeHgsCisJCSAgICAgIGludCBmZywgaW50IGJnKQoreworCXN0cnVjdCBmYl9pbWFnZSBpbWFnZTsKKwlzdHJ1Y3QgZGlzcGxheSAqcCA9ICZmYl9kaXNwbGF5W3ZjLT52Y19udW1dOworCXN0cnVjdCBmYmNvbl9vcHMgKm9wcyA9IGluZm8tPmZiY29uX3BhcjsKKwl1MzIgd2lkdGggPSAodmMtPnZjX2ZvbnQud2lkdGggKyA3KS84OworCXUzMiBjZWxsc2l6ZSA9IHdpZHRoICogdmMtPnZjX2ZvbnQuaGVpZ2h0OworCXUzMiBtYXhjbnQgPSBpbmZvLT5waXhtYXAuc2l6ZS9jZWxsc2l6ZTsKKwl1MzIgc2Nhbl9hbGlnbiA9IGluZm8tPnBpeG1hcC5zY2FuX2FsaWduIC0gMTsKKwl1MzIgYnVmX2FsaWduID0gaW5mby0+cGl4bWFwLmJ1Zl9hbGlnbiAtIDE7CisJdTMyIG1vZCA9IHZjLT52Y19mb250LndpZHRoICUgOCwgY250LCBwaXRjaCwgc2l6ZTsKKwl1MzIgYXR0cmlidXRlID0gZ2V0X2F0dHJpYnV0ZShpbmZvLCBzY3JfcmVhZHcocykpOworCXU4ICpkc3QsICpidWYgPSBOVUxMOworCXUzMiB2eXJlcyA9IEdFVFZZUkVTKHAtPnNjcm9sbG1vZGUsIGluZm8pOworCXUzMiB2eHJlcyA9IEdFVFZYUkVTKHAtPnNjcm9sbG1vZGUsIGluZm8pOworCisJaWYgKCFvcHMtPmZvbnRidWZmZXIpCisJCXJldHVybjsKKworCWltYWdlLmZnX2NvbG9yID0gZmc7CisJaW1hZ2UuYmdfY29sb3IgPSBiZzsKKwlpbWFnZS5keSA9IHZ5cmVzIC0gKCh5eSAqIHZjLT52Y19mb250LmhlaWdodCkgKyB2Yy0+dmNfZm9udC5oZWlnaHQpOworCWltYWdlLmR4ID0gdnhyZXMgLSAoKHh4ICsgY291bnQpICogdmMtPnZjX2ZvbnQud2lkdGgpOworCWltYWdlLmhlaWdodCA9IHZjLT52Y19mb250LmhlaWdodDsKKwlpbWFnZS5kZXB0aCA9IDE7CisKKwlpZiAoYXR0cmlidXRlKSB7CisJCWJ1ZiA9IGttYWxsb2MoY2VsbHNpemUsIEdGUF9LRVJORUwpOworCQlpZiAoIWJ1ZikKKwkJCXJldHVybjsKKwl9CisKKwlzICs9IGNvdW50IC0gMTsKKworCXdoaWxlIChjb3VudCkgeworCQlpZiAoY291bnQgPiBtYXhjbnQpCisJCQljbnQgPSBtYXhjbnQ7CisJCWVsc2UKKwkJCWNudCA9IGNvdW50OworCisJCWltYWdlLndpZHRoID0gdmMtPnZjX2ZvbnQud2lkdGggKiBjbnQ7CisJCXBpdGNoID0gKChpbWFnZS53aWR0aCArIDcpID4+IDMpICsgc2Nhbl9hbGlnbjsKKwkJcGl0Y2ggJj0gfnNjYW5fYWxpZ247CisJCXNpemUgPSBwaXRjaCAqIGltYWdlLmhlaWdodCArIGJ1Zl9hbGlnbjsKKwkJc2l6ZSAmPSB+YnVmX2FsaWduOworCQlkc3QgPSBmYl9nZXRfYnVmZmVyX29mZnNldChpbmZvLCAmaW5mby0+cGl4bWFwLCBzaXplKTsKKwkJaW1hZ2UuZGF0YSA9IGRzdDsKKworCQlpZiAoIW1vZCkKKwkJCXVkX3B1dGNzX2FsaWduZWQodmMsIGluZm8sIHMsIGF0dHJpYnV0ZSwgY250LCBwaXRjaCwKKwkJCQkJIHdpZHRoLCBjZWxsc2l6ZSwgJmltYWdlLCBidWYsIGRzdCk7CisJCWVsc2UKKwkJCXVkX3B1dGNzX3VuYWxpZ25lZCh2YywgaW5mbywgcywgYXR0cmlidXRlLCBjbnQsIHBpdGNoLAorCQkJCQkgICB3aWR0aCwgY2VsbHNpemUsICZpbWFnZSwKKwkJCQkJICAgYnVmLCBkc3QpOworCisJCWltYWdlLmR4ICs9IGltYWdlLndpZHRoOworCQljb3VudCAtPSBjbnQ7CisJCXMgLT0gY250OworCQl4eCArPSBjbnQ7CisJfQorCisJLyogYnVmIGlzIGFsd2F5cyBOVUxMIGV4Y2VwdCB3aGVuIGluIG1vbm9jaHJvbWUgbW9kZSwgc28gaW4gdGhpcyBjYXNlCisJICAgaXQncyBhIGdhaW4gdG8gY2hlY2sgYnVmIGFnYWluc3QgTlVMTCBldmVuIHRob3VnaCBrZnJlZSgpIGhhbmRsZXMKKwkgICBOVUxMIHBvaW50ZXJzIGp1c3QgZmluZSAqLworCWlmICh1bmxpa2VseShidWYpKQorCQlrZnJlZShidWYpOworCit9CisKK3N0YXRpYyB2b2lkIHVkX2NsZWFyX21hcmdpbnMoc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKKwkJCSAgICAgaW50IGJvdHRvbV9vbmx5KQoreworCXVuc2lnbmVkIGludCBjdyA9IHZjLT52Y19mb250LndpZHRoOworCXVuc2lnbmVkIGludCBjaCA9IHZjLT52Y19mb250LmhlaWdodDsKKwl1bnNpZ25lZCBpbnQgcncgPSBpbmZvLT52YXIueHJlcyAtICh2Yy0+dmNfY29scypjdyk7CisJdW5zaWduZWQgaW50IGJoID0gaW5mby0+dmFyLnlyZXMgLSAodmMtPnZjX3Jvd3MqY2gpOworCXN0cnVjdCBmYl9maWxscmVjdCByZWdpb247CisJaW50IGJnc2hpZnQgPSAodmMtPnZjX2hpX2ZvbnRfbWFzaykgPyAxMyA6IDEyOworCisJcmVnaW9uLmNvbG9yID0gYXR0cl9iZ2NvbF9lYyhiZ3NoaWZ0LHZjKTsKKwlyZWdpb24ucm9wID0gUk9QX0NPUFk7CisKKwlpZiAocncgJiYgIWJvdHRvbV9vbmx5KSB7CisJCXJlZ2lvbi5keSA9IDA7CisJCXJlZ2lvbi5keCA9IGluZm8tPnZhci54b2Zmc2V0OworCQlyZWdpb24ud2lkdGggID0gcnc7CisJCXJlZ2lvbi5oZWlnaHQgPSBpbmZvLT52YXIueXJlc192aXJ0dWFsOworCQlpbmZvLT5mYm9wcy0+ZmJfZmlsbHJlY3QoaW5mbywgJnJlZ2lvbik7CisJfQorCisJaWYgKGJoKSB7CisJCXJlZ2lvbi5keSA9IGluZm8tPnZhci55b2Zmc2V0OworCQlyZWdpb24uZHggPSBpbmZvLT52YXIueG9mZnNldDsKKyAgICAgICAgICAgICAgICByZWdpb24uaGVpZ2h0ICA9IGJoOworICAgICAgICAgICAgICAgIHJlZ2lvbi53aWR0aCA9IGluZm8tPnZhci54cmVzOworCQlpbmZvLT5mYm9wcy0+ZmJfZmlsbHJlY3QoaW5mbywgJnJlZ2lvbik7CisJfQorfQorCitzdGF0aWMgdm9pZCB1ZF9jdXJzb3Ioc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKKwkJICAgICAgc3RydWN0IGRpc3BsYXkgKnAsIGludCBtb2RlLCBpbnQgc29mdGJhY2tfbGluZXMsCisJCSAgICAgIGludCBmZywgaW50IGJnKQoreworCXN0cnVjdCBmYl9jdXJzb3IgY3Vyc29yOworCXN0cnVjdCBmYmNvbl9vcHMgKm9wcyA9IChzdHJ1Y3QgZmJjb25fb3BzICopIGluZm8tPmZiY29uX3BhcjsKKwl1bnNpZ25lZCBzaG9ydCBjaGFybWFzayA9IHZjLT52Y19oaV9mb250X21hc2sgPyAweDFmZiA6IDB4ZmY7CisJaW50IHcgPSAodmMtPnZjX2ZvbnQud2lkdGggKyA3KSA+PiAzLCBjOworCWludCB5ID0gcmVhbF95KHAsIHZjLT52Y195KTsKKwlpbnQgYXR0cmlidXRlLCB1c2Vfc3cgPSAodmMtPnZjX2N1cnNvcl90eXBlICYgMHgxMCk7CisJaW50IGVyciA9IDEsIGR4LCBkeTsKKwljaGFyICpzcmM7CisJdTMyIHZ5cmVzID0gR0VUVllSRVMocC0+c2Nyb2xsbW9kZSwgaW5mbyk7CisJdTMyIHZ4cmVzID0gR0VUVlhSRVMocC0+c2Nyb2xsbW9kZSwgaW5mbyk7CisKKwlpZiAoIW9wcy0+Zm9udGJ1ZmZlcikKKwkJcmV0dXJuOworCisJY3Vyc29yLnNldCA9IDA7CisKKwlpZiAoc29mdGJhY2tfbGluZXMpIHsKKwkJaWYgKHkgKyBzb2Z0YmFja19saW5lcyA+PSB2Yy0+dmNfcm93cykgeworCQkJbW9kZSA9IENNX0VSQVNFOworCQkJb3BzLT5jdXJzb3JfZmxhc2ggPSAwOworCQkJcmV0dXJuOworCQl9IGVsc2UKKwkJCXkgKz0gc29mdGJhY2tfbGluZXM7CisJfQorCisgCWMgPSBzY3JfcmVhZHcoKHUxNiAqKSB2Yy0+dmNfcG9zKTsKKwlhdHRyaWJ1dGUgPSBnZXRfYXR0cmlidXRlKGluZm8sIGMpOworCXNyYyA9IG9wcy0+Zm9udGJ1ZmZlciArICgoYyAmIGNoYXJtYXNrKSAqICh3ICogdmMtPnZjX2ZvbnQuaGVpZ2h0KSk7CisKKwlpZiAob3BzLT5jdXJzb3Jfc3RhdGUuaW1hZ2UuZGF0YSAhPSBzcmMgfHwKKwkgICAgb3BzLT5jdXJzb3JfcmVzZXQpIHsKKwkgICAgb3BzLT5jdXJzb3Jfc3RhdGUuaW1hZ2UuZGF0YSA9IHNyYzsKKwkgICAgY3Vyc29yLnNldCB8PSBGQl9DVVJfU0VUSU1BR0U7CisJfQorCisJaWYgKGF0dHJpYnV0ZSkgeworCQl1OCAqZHN0OworCisJCWRzdCA9IGttYWxsb2ModyAqIHZjLT52Y19mb250LmhlaWdodCwgR0ZQX0FUT01JQyk7CisJCWlmICghZHN0KQorCQkJcmV0dXJuOworCQlrZnJlZShvcHMtPmN1cnNvcl9kYXRhKTsKKwkJb3BzLT5jdXJzb3JfZGF0YSA9IGRzdDsKKwkJdWRfdXBkYXRlX2F0dHIoZHN0LCBzcmMsIGF0dHJpYnV0ZSwgdmMpOworCQlzcmMgPSBkc3Q7CisJfQorCisJaWYgKG9wcy0+Y3Vyc29yX3N0YXRlLmltYWdlLmZnX2NvbG9yICE9IGZnIHx8CisJICAgIG9wcy0+Y3Vyc29yX3N0YXRlLmltYWdlLmJnX2NvbG9yICE9IGJnIHx8CisJICAgIG9wcy0+Y3Vyc29yX3Jlc2V0KSB7CisJCW9wcy0+Y3Vyc29yX3N0YXRlLmltYWdlLmZnX2NvbG9yID0gZmc7CisJCW9wcy0+Y3Vyc29yX3N0YXRlLmltYWdlLmJnX2NvbG9yID0gYmc7CisJCWN1cnNvci5zZXQgfD0gRkJfQ1VSX1NFVENNQVA7CisJfQorCisJaWYgKG9wcy0+Y3Vyc29yX3N0YXRlLmltYWdlLmhlaWdodCAhPSB2Yy0+dmNfZm9udC5oZWlnaHQgfHwKKwkgICAgb3BzLT5jdXJzb3Jfc3RhdGUuaW1hZ2Uud2lkdGggIT0gdmMtPnZjX2ZvbnQud2lkdGggfHwKKwkgICAgb3BzLT5jdXJzb3JfcmVzZXQpIHsKKwkJb3BzLT5jdXJzb3Jfc3RhdGUuaW1hZ2UuaGVpZ2h0ID0gdmMtPnZjX2ZvbnQuaGVpZ2h0OworCQlvcHMtPmN1cnNvcl9zdGF0ZS5pbWFnZS53aWR0aCA9IHZjLT52Y19mb250LndpZHRoOworCQljdXJzb3Iuc2V0IHw9IEZCX0NVUl9TRVRTSVpFOworCX0KKworCWR5ID0gdnlyZXMgLSAoKHkgKiB2Yy0+dmNfZm9udC5oZWlnaHQpICsgdmMtPnZjX2ZvbnQuaGVpZ2h0KTsKKwlkeCA9IHZ4cmVzIC0gKCh2Yy0+dmNfeCAqIHZjLT52Y19mb250LndpZHRoKSArIHZjLT52Y19mb250LndpZHRoKTsKKworCWlmIChvcHMtPmN1cnNvcl9zdGF0ZS5pbWFnZS5keCAhPSBkeCB8fAorCSAgICBvcHMtPmN1cnNvcl9zdGF0ZS5pbWFnZS5keSAhPSBkeSB8fAorCSAgICBvcHMtPmN1cnNvcl9yZXNldCkgeworCQlvcHMtPmN1cnNvcl9zdGF0ZS5pbWFnZS5keCA9IGR4OworCQlvcHMtPmN1cnNvcl9zdGF0ZS5pbWFnZS5keSA9IGR5OworCQljdXJzb3Iuc2V0IHw9IEZCX0NVUl9TRVRQT1M7CisJfQorCisJaWYgKG9wcy0+Y3Vyc29yX3N0YXRlLmhvdC54IHx8IG9wcy0+Y3Vyc29yX3N0YXRlLmhvdC55IHx8CisJICAgIG9wcy0+Y3Vyc29yX3Jlc2V0KSB7CisJCW9wcy0+Y3Vyc29yX3N0YXRlLmhvdC54ID0gY3Vyc29yLmhvdC55ID0gMDsKKwkJY3Vyc29yLnNldCB8PSBGQl9DVVJfU0VUSE9UOworCX0KKworCWlmIChjdXJzb3Iuc2V0ICYgRkJfQ1VSX1NFVFNJWkUgfHwKKwkgICAgdmMtPnZjX2N1cnNvcl90eXBlICE9IHAtPmN1cnNvcl9zaGFwZSB8fAorCSAgICBvcHMtPmN1cnNvcl9zdGF0ZS5tYXNrID09IE5VTEwgfHwKKwkgICAgb3BzLT5jdXJzb3JfcmVzZXQpIHsKKwkJY2hhciAqbWFzayA9IGttYWxsb2Modyp2Yy0+dmNfZm9udC5oZWlnaHQsIEdGUF9BVE9NSUMpOworCQlpbnQgY3VyX2hlaWdodCwgc2l6ZSwgaSA9IDA7CisJCXU4IG1zayA9IDB4ZmY7CisKKwkJaWYgKCFtYXNrKQorCQkJcmV0dXJuOworCisJCWtmcmVlKG9wcy0+Y3Vyc29yX3N0YXRlLm1hc2spOworCQlvcHMtPmN1cnNvcl9zdGF0ZS5tYXNrID0gbWFzazsKKworCQlwLT5jdXJzb3Jfc2hhcGUgPSB2Yy0+dmNfY3Vyc29yX3R5cGU7CisJCWN1cnNvci5zZXQgfD0gRkJfQ1VSX1NFVFNIQVBFOworCisJCXN3aXRjaCAocC0+Y3Vyc29yX3NoYXBlICYgQ1VSX0hXTUFTSykgeworCQljYXNlIENVUl9OT05FOgorCQkJY3VyX2hlaWdodCA9IDA7CisJCQlicmVhazsKKwkJY2FzZSBDVVJfVU5ERVJMSU5FOgorCQkJY3VyX2hlaWdodCA9ICh2Yy0+dmNfZm9udC5oZWlnaHQgPCAxMCkgPyAxIDogMjsKKwkJCWJyZWFrOworCQljYXNlIENVUl9MT1dFUl9USElSRDoKKwkJCWN1cl9oZWlnaHQgPSB2Yy0+dmNfZm9udC5oZWlnaHQvMzsKKwkJCWJyZWFrOworCQljYXNlIENVUl9MT1dFUl9IQUxGOgorCQkJY3VyX2hlaWdodCA9IHZjLT52Y19mb250LmhlaWdodCA+PiAxOworCQkJYnJlYWs7CisJCWNhc2UgQ1VSX1RXT19USElSRFM6CisJCQljdXJfaGVpZ2h0ID0gKHZjLT52Y19mb250LmhlaWdodCA8PCAxKS8zOworCQkJYnJlYWs7CisJCWNhc2UgQ1VSX0JMT0NLOgorCQlkZWZhdWx0OgorCQkJY3VyX2hlaWdodCA9IHZjLT52Y19mb250LmhlaWdodDsKKwkJCWJyZWFrOworCQl9CisKKwkJc2l6ZSA9IGN1cl9oZWlnaHQgKiB3OworCisJCXdoaWxlIChzaXplLS0pCisJCQltYXNrW2krK10gPSBtc2s7CisKKwkJc2l6ZSA9ICh2Yy0+dmNfZm9udC5oZWlnaHQgLSBjdXJfaGVpZ2h0KSAqIHc7CisKKwkJd2hpbGUgKHNpemUtLSkKKwkJCW1hc2tbaSsrXSA9IH5tc2s7CisJfQorCisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBDTV9FUkFTRToKKwkJb3BzLT5jdXJzb3Jfc3RhdGUuZW5hYmxlID0gMDsKKwkJYnJlYWs7CisJY2FzZSBDTV9EUkFXOgorCWNhc2UgQ01fTU9WRToKKwlkZWZhdWx0OgorCQlvcHMtPmN1cnNvcl9zdGF0ZS5lbmFibGUgPSAodXNlX3N3KSA/IDAgOiAxOworCQlicmVhazsKKwl9CisKKwljdXJzb3IuaW1hZ2UuZGF0YSA9IHNyYzsKKwljdXJzb3IuaW1hZ2UuZmdfY29sb3IgPSBvcHMtPmN1cnNvcl9zdGF0ZS5pbWFnZS5mZ19jb2xvcjsKKwljdXJzb3IuaW1hZ2UuYmdfY29sb3IgPSBvcHMtPmN1cnNvcl9zdGF0ZS5pbWFnZS5iZ19jb2xvcjsKKwljdXJzb3IuaW1hZ2UuZHggPSBvcHMtPmN1cnNvcl9zdGF0ZS5pbWFnZS5keDsKKwljdXJzb3IuaW1hZ2UuZHkgPSBvcHMtPmN1cnNvcl9zdGF0ZS5pbWFnZS5keTsKKwljdXJzb3IuaW1hZ2UuaGVpZ2h0ID0gb3BzLT5jdXJzb3Jfc3RhdGUuaW1hZ2UuaGVpZ2h0OworCWN1cnNvci5pbWFnZS53aWR0aCA9IG9wcy0+Y3Vyc29yX3N0YXRlLmltYWdlLndpZHRoOworCWN1cnNvci5ob3QueCA9IG9wcy0+Y3Vyc29yX3N0YXRlLmhvdC54OworCWN1cnNvci5ob3QueSA9IG9wcy0+Y3Vyc29yX3N0YXRlLmhvdC55OworCWN1cnNvci5tYXNrID0gb3BzLT5jdXJzb3Jfc3RhdGUubWFzazsKKwljdXJzb3IuZW5hYmxlID0gb3BzLT5jdXJzb3Jfc3RhdGUuZW5hYmxlOworCWN1cnNvci5pbWFnZS5kZXB0aCA9IDE7CisJY3Vyc29yLnJvcCA9IFJPUF9YT1I7CisKKwlpZiAoaW5mby0+ZmJvcHMtPmZiX2N1cnNvcikKKwkJZXJyID0gaW5mby0+ZmJvcHMtPmZiX2N1cnNvcihpbmZvLCAmY3Vyc29yKTsKKworCWlmIChlcnIpCisJCXNvZnRfY3Vyc29yKGluZm8sICZjdXJzb3IpOworCisJb3BzLT5jdXJzb3JfcmVzZXQgPSAwOworfQorCitpbnQgdWRfdXBkYXRlX3N0YXJ0KHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN0cnVjdCBmYmNvbl9vcHMgKm9wcyA9IGluZm8tPmZiY29uX3BhcjsKKwlzdHJ1Y3QgZGlzcGxheSAqcCA9ICZmYl9kaXNwbGF5W29wcy0+Y3VycmNvbl07CisJdTMyIHhvZmZzZXQsIHlvZmZzZXQ7CisJdTMyIHZ5cmVzID0gR0VUVllSRVMocC0+c2Nyb2xsbW9kZSwgaW5mbyk7CisJdTMyIHZ4cmVzID0gR0VUVlhSRVMocC0+c2Nyb2xsbW9kZSwgaW5mbyk7CisJaW50IGVycjsKKworCXhvZmZzZXQgPSAodnhyZXMgLSBpbmZvLT52YXIueHJlcykgLSBvcHMtPnZhci54b2Zmc2V0OworCXlvZmZzZXQgPSAodnlyZXMgLSBpbmZvLT52YXIueXJlcykgLSBvcHMtPnZhci55b2Zmc2V0OworCW9wcy0+dmFyLnhvZmZzZXQgPSB4b2Zmc2V0OworCW9wcy0+dmFyLnlvZmZzZXQgPSB5b2Zmc2V0OworCWVyciA9IGZiX3Bhbl9kaXNwbGF5KGluZm8sICZvcHMtPnZhcik7CisJb3BzLT52YXIueG9mZnNldCA9IGluZm8tPnZhci54b2Zmc2V0OworCW9wcy0+dmFyLnlvZmZzZXQgPSBpbmZvLT52YXIueW9mZnNldDsKKwlvcHMtPnZhci52bW9kZSA9IGluZm8tPnZhci52bW9kZTsKKwlyZXR1cm4gZXJyOworfQorCit2b2lkIGZiY29uX3JvdGF0ZV91ZChzdHJ1Y3QgZmJjb25fb3BzICpvcHMpCit7CisJb3BzLT5ibW92ZSA9IHVkX2Jtb3ZlOworCW9wcy0+Y2xlYXIgPSB1ZF9jbGVhcjsKKwlvcHMtPnB1dGNzID0gdWRfcHV0Y3M7CisJb3BzLT5jbGVhcl9tYXJnaW5zID0gdWRfY2xlYXJfbWFyZ2luczsKKwlvcHMtPmN1cnNvciA9IHVkX2N1cnNvcjsKKwlvcHMtPnVwZGF0ZV9zdGFydCA9IHVkX3VwZGF0ZV9zdGFydDsKK30KK0VYUE9SVF9TWU1CT0woZmJjb25fcm90YXRlX3VkKTsKKworTU9EVUxFX0FVVEhPUigiQW50b25pbm8gRGFwbGFzIDxhZGFwbGFzQHBvbC5uZXQ+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbnNvbGUgUm90YXRpb24gKDE4MCBkZWdyZWVzKSBTdXBwb3J0Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvdGlsZWJsaXQuYyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS90aWxlYmxpdC5jCmluZGV4IDdmNzZlMmMuLmNiMjUzMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS90aWxlYmxpdC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS90aWxlYmxpdC5jCkBAIC0xMTgsNiArMTE4LDE4IEBACiAJaW5mby0+dGlsZW9wcy0+ZmJfdGlsZWN1cnNvcihpbmZvLCAmY3Vyc29yKTsKIH0KIAorc3RhdGljIGludCB0aWxlX3VwZGF0ZV9zdGFydChzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgZmJjb25fb3BzICpvcHMgPSBpbmZvLT5mYmNvbl9wYXI7CisJaW50IGVycjsKKworCWVyciA9IGZiX3Bhbl9kaXNwbGF5KGluZm8sICZvcHMtPnZhcik7CisJb3BzLT52YXIueG9mZnNldCA9IGluZm8tPnZhci54b2Zmc2V0OworCW9wcy0+dmFyLnlvZmZzZXQgPSBpbmZvLT52YXIueW9mZnNldDsKKwlvcHMtPnZhci52bW9kZSA9IGluZm8tPnZhci52bW9kZTsKKwlyZXR1cm4gZXJyOworfQorCiB2b2lkIGZiY29uX3NldF90aWxlb3BzKHN0cnVjdCB2Y19kYXRhICp2Yywgc3RydWN0IGZiX2luZm8gKmluZm8sCiAJCSAgICAgICBzdHJ1Y3QgZGlzcGxheSAqcCwgc3RydWN0IGZiY29uX29wcyAqb3BzKQogewpAQCAtMTI4LDYgKzE0MCw3IEBACiAJb3BzLT5wdXRjcyA9IHRpbGVfcHV0Y3M7CiAJb3BzLT5jbGVhcl9tYXJnaW5zID0gdGlsZV9jbGVhcl9tYXJnaW5zOwogCW9wcy0+Y3Vyc29yID0gdGlsZV9jdXJzb3I7CisJb3BzLT51cGRhdGVfc3RhcnQgPSB0aWxlX3VwZGF0ZV9zdGFydDsKIAogCWlmIChwKSB7CiAJCW1hcC53aWR0aCA9IHZjLT52Y19mb250LndpZHRoOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9kbmZiLmMgYi9kcml2ZXJzL3ZpZGVvL2RuZmIuYwppbmRleCA5NTdhM2FkLi41YWJkM2NiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2RuZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2RuZmIuYwpAQCAtMjI3LDkgKzIyNyw4IEBACiAgKiBJbml0aWFsaXphdGlvbgogICovCiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IGRuZmJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2aWNlKQorc3RhdGljIGludCBfX2RldmluaXQgZG5mYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldmljZSk7CiAJc3RydWN0IGZiX2luZm8gKmluZm87CiAJaW50IGVyciA9IDA7CiAKQEAgLTI1Nyw3ICsyNTYsNyBAQAogCQlmcmFtZWJ1ZmZlcl9yZWxlYXNlKGluZm8pOwogCQlyZXR1cm4gZXJyOwogCX0KLQlkZXZfc2V0X2RydmRhdGEoJmRldi0+ZGV2LCBpbmZvKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIGluZm8pOwogCiAJLyogbm93IHdlIGhhdmUgcmVnaXN0ZXJlZCB3ZSBjYW4gc2FmZWx5IHNldHVwIHRoZSBoYXJkd2FyZSAqLwogCW91dF84KEFQX0NPTlRST0xfM0EsIFJFU0VUX0NSRUcpOwpAQCAtMjcxLDEwICsyNzAsMTEgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgZG5mYl9kcml2ZXIgPSB7Ci0JLm5hbWUJPSAiZG5mYiIsCi0JLmJ1cwk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGRuZmJfZHJpdmVyID0gewogCS5wcm9iZQk9IGRuZmJfcHJvYmUsCisJLmRyaXZlcgk9IHsKKwkJLm5hbWUJPSAiZG5mYiIsCisJfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGRuZmJfZGV2aWNlID0gewpAQCAtMjg4LDEyICsyODgsMTIgQEAKIAlpZiAoZmJfZ2V0X29wdGlvbnMoImRuZmIiLCBOVUxMKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlyZXQgPSBkcml2ZXJfcmVnaXN0ZXIoJmRuZmJfZHJpdmVyKTsKKwlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmRuZmJfZHJpdmVyKTsKIAogCWlmICghcmV0KSB7CiAJCXJldCA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZG5mYl9kZXZpY2UpOwogCQlpZiAocmV0KQotCQkJZHJpdmVyX3VucmVnaXN0ZXIoJmRuZmJfZHJpdmVyKTsKKwkJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZkbmZiX2RyaXZlcik7CiAJfQogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2Vwc29uMTM1NWZiLmMgYi9kcml2ZXJzL3ZpZGVvL2Vwc29uMTM1NWZiLmMKaW5kZXggNmE4MWExZC4uM2IwZTcxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9lcHNvbjEzNTVmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZXBzb24xMzU1ZmIuYwpAQCAtNjA5LDkgKzYwOSw5IEBACiB7CiB9CiAKLXN0YXRpYyBpbnQgZXBzb24xMzU1ZmJfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKK3N0YXRpYyBpbnQgZXBzb24xMzU1ZmJfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXZpY2UpOworCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgZXBzb24xMzU1X3BhciAqcGFyID0gaW5mby0+cGFyOwogCiAJYmFja2xpZ2h0X2VuYWJsZSgwKTsKQEAgLTYzMiw5ICs2MzIsOCBAQAogCXJldHVybiAwOwogfQogCi1pbnQgX19pbml0IGVwc29uMTM1NWZiX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKK2ludCBfX2luaXQgZXBzb24xMzU1ZmJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXZpY2UpOwogCXN0cnVjdCBlcHNvbjEzNTVfcGFyICpkZWZhdWx0X3BhcjsKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKIAl1OCByZXZpc2lvbjsKQEAgLTcxMyw3ICs3MTIsNyBAQAogCS8qCiAJICogT3VyIGRyaXZlciBkYXRhLgogCSAqLwotCWRldl9zZXRfZHJ2ZGF0YSgmZGV2LT5kZXYsIGluZm8pOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgaW5mbyk7CiAKIAlwcmludGsoS0VSTl9JTkZPICJmYiVkOiAlcyBmcmFtZSBidWZmZXIgZGV2aWNlXG4iLAogCSAgICAgICBpbmZvLT5ub2RlLCBpbmZvLT5maXguaWQpOwpAQCAtNzIxLDE1ICs3MjAsMTYgQEAKIAlyZXR1cm4gMDsKIAogICAgICAgYmFpbDoKLQllcHNvbjEzNTVmYl9yZW1vdmUoZGV2aWNlKTsKKwllcHNvbjEzNTVmYl9yZW1vdmUoZGV2KTsKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBlcHNvbjEzNTVmYl9kcml2ZXIgPSB7Ci0JLm5hbWUJPSAiZXBzb24xMzU1ZmIiLAotCS5idXMJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBlcHNvbjEzNTVmYl9kcml2ZXIgPSB7CiAJLnByb2JlCT0gZXBzb24xMzU1ZmJfcHJvYmUsCiAJLnJlbW92ZQk9IGVwc29uMTM1NWZiX3JlbW92ZSwKKwkuZHJpdmVyCT0geworCQkubmFtZQk9ICJlcHNvbjEzNTVmYiIsCisJfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGVwc29uMTM1NWZiX2RldmljZSA9IHsKQEAgLTc0NywxMSArNzQ3LDExIEBACiAJaWYgKGZiX2dldF9vcHRpb25zKCJlcHNvbjEzNTVmYiIsIE5VTEwpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXJldCA9IGRyaXZlcl9yZWdpc3RlcigmZXBzb24xMzU1ZmJfZHJpdmVyKTsKKwlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmVwc29uMTM1NWZiX2RyaXZlcik7CiAJaWYgKCFyZXQpIHsKIAkJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZlcHNvbjEzNTVmYl9kZXZpY2UpOwogCQlpZiAocmV0KQotCQkJZHJpdmVyX3VucmVnaXN0ZXIoJmVwc29uMTM1NWZiX2RyaXZlcik7CisJCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZXBzb24xMzU1ZmJfZHJpdmVyKTsKIAl9CiAJcmV0dXJuIHJldDsKIH0KQEAgLTc2Miw3ICs3NjIsNyBAQAogc3RhdGljIHZvaWQgX19leGl0IGVwc29uMTM1NWZiX2V4aXQodm9pZCkKIHsKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcigmZXBzb24xMzU1ZmJfZGV2aWNlKTsKLQlkcml2ZXJfdW5yZWdpc3RlcigmZXBzb24xMzU1ZmJfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZXBzb24xMzU1ZmJfZHJpdmVyKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mYm1lbS5jIGIvZHJpdmVycy92aWRlby9mYm1lbS5jCmluZGV4IGUyNjY3ZGQuLjlmMTgwMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZmJtZW0uYworKysgYi9kcml2ZXJzL3ZpZGVvL2ZibWVtLmMKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAorI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpAQCAtMzIzLDkgKzMyNCwxMDMgQEAKIAljb25zdCBzdHJ1Y3QgbGludXhfbG9nbyAqbG9nbzsKIH0gZmJfbG9nbzsKIAotaW50IGZiX3ByZXBhcmVfbG9nbyhzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3N0YXRpYyB2b2lkIGZiX3JvdGF0ZV9sb2dvX3VkKGNvbnN0IHU4ICppbiwgdTggKm91dCwgdTMyIHdpZHRoLCB1MzIgaGVpZ2h0KQoreworCXUzMiBzaXplID0gd2lkdGggKiBoZWlnaHQsIGk7CisKKwlvdXQgKz0gc2l6ZSAtIDE7CisKKwlmb3IgKGkgPSBzaXplOyBpLS07ICkKKwkJKm91dC0tID0gKmluKys7Cit9CisKK3N0YXRpYyB2b2lkIGZiX3JvdGF0ZV9sb2dvX2N3KGNvbnN0IHU4ICppbiwgdTggKm91dCwgdTMyIHdpZHRoLCB1MzIgaGVpZ2h0KQoreworCWludCBpLCBqLCB3ID0gd2lkdGggLSAxOworCisJZm9yIChpID0gMDsgaSA8IGhlaWdodDsgaSsrKQorCQlmb3IgKGogPSAwOyBqIDwgd2lkdGg7IGorKykKKwkJCW91dFtoZWlnaHQgKiBqICsgdyAtIGldID0gKmluKys7Cit9CisKK3N0YXRpYyB2b2lkIGZiX3JvdGF0ZV9sb2dvX2Njdyhjb25zdCB1OCAqaW4sIHU4ICpvdXQsIHUzMiB3aWR0aCwgdTMyIGhlaWdodCkKK3sKKwlpbnQgaSwgaiwgdyA9IHdpZHRoIC0gMTsKKworCWZvciAoaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykKKwkJZm9yIChqID0gMDsgaiA8IHdpZHRoOyBqKyspCisJCQlvdXRbaGVpZ2h0ICogKHcgLSBqKSArIGldID0gKmluKys7Cit9CisKK3N0YXRpYyB2b2lkIGZiX3JvdGF0ZV9sb2dvKHN0cnVjdCBmYl9pbmZvICppbmZvLCB1OCAqZHN0LAorCQkJICAgc3RydWN0IGZiX2ltYWdlICppbWFnZSwgaW50IHJvdGF0ZSkKK3sKKwl1MzIgdG1wOworCisJaWYgKHJvdGF0ZSA9PSBGQl9ST1RBVEVfVUQpIHsKKwkJaW1hZ2UtPmR4ID0gaW5mby0+dmFyLnhyZXMgLSBpbWFnZS0+d2lkdGg7CisJCWltYWdlLT5keSA9IGluZm8tPnZhci55cmVzIC0gaW1hZ2UtPmhlaWdodDsKKwkJZmJfcm90YXRlX2xvZ29fdWQoaW1hZ2UtPmRhdGEsIGRzdCwgaW1hZ2UtPndpZHRoLAorCQkJCSAgaW1hZ2UtPmhlaWdodCk7CisJfSBlbHNlIGlmIChyb3RhdGUgPT0gRkJfUk9UQVRFX0NXKSB7CisJCXRtcCA9IGltYWdlLT53aWR0aDsKKwkJaW1hZ2UtPndpZHRoID0gaW1hZ2UtPmhlaWdodDsKKwkJaW1hZ2UtPmhlaWdodCA9IHRtcDsKKwkJaW1hZ2UtPmR4ID0gaW5mby0+dmFyLnhyZXMgLSBpbWFnZS0+aGVpZ2h0OworCQlmYl9yb3RhdGVfbG9nb19jdyhpbWFnZS0+ZGF0YSwgZHN0LCBpbWFnZS0+d2lkdGgsCisJCQkJICBpbWFnZS0+aGVpZ2h0KTsKKwl9IGVsc2UgaWYgKHJvdGF0ZSA9PSBGQl9ST1RBVEVfQ0NXKSB7CisJCXRtcCA9IGltYWdlLT53aWR0aDsKKwkJaW1hZ2UtPndpZHRoID0gaW1hZ2UtPmhlaWdodDsKKwkJaW1hZ2UtPmhlaWdodCA9IHRtcDsKKwkJaW1hZ2UtPmR5ID0gaW5mby0+dmFyLnlyZXMgLSBpbWFnZS0+d2lkdGg7CisJCWZiX3JvdGF0ZV9sb2dvX2NjdyhpbWFnZS0+ZGF0YSwgZHN0LCBpbWFnZS0+d2lkdGgsCisJCQkJICAgaW1hZ2UtPmhlaWdodCk7CisJfQorCisJaW1hZ2UtPmRhdGEgPSBkc3Q7Cit9CisKK3N0YXRpYyB2b2lkIGZiX2RvX3Nob3dfbG9nbyhzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IGZiX2ltYWdlICppbWFnZSwKKwkJCSAgICBpbnQgcm90YXRlKQoreworCWludCB4OworCisJaWYgKHJvdGF0ZSA9PSBGQl9ST1RBVEVfVVIpIHsKKwkJZm9yICh4ID0gMDsgeCA8IG51bV9vbmxpbmVfY3B1cygpICYmCisJCQkgICAgIHggKiAoZmJfbG9nby5sb2dvLT53aWR0aCArIDgpIDw9CisJCQkgICAgIGluZm8tPnZhci54cmVzIC0gZmJfbG9nby5sb2dvLT53aWR0aDsgeCsrKSB7CisJCQlpbmZvLT5mYm9wcy0+ZmJfaW1hZ2VibGl0KGluZm8sIGltYWdlKTsKKwkJCWltYWdlLT5keCArPSBmYl9sb2dvLmxvZ28tPndpZHRoICsgODsKKwkJfQorCX0gZWxzZSBpZiAocm90YXRlID09IEZCX1JPVEFURV9VRCkgeworCQlmb3IgKHggPSAwOyB4IDwgbnVtX29ubGluZV9jcHVzKCkgJiYKKwkJCSAgICAgeCAqIChmYl9sb2dvLmxvZ28tPndpZHRoICsgOCkgPD0KKwkJCSAgICAgaW5mby0+dmFyLnhyZXMgLSBmYl9sb2dvLmxvZ28tPndpZHRoOyB4KyspIHsKKwkJCWluZm8tPmZib3BzLT5mYl9pbWFnZWJsaXQoaW5mbywgaW1hZ2UpOworCQkJaW1hZ2UtPmR4IC09IGZiX2xvZ28ubG9nby0+d2lkdGggKyA4OworCQl9CisJfSBlbHNlIGlmIChyb3RhdGUgPT0gRkJfUk9UQVRFX0NXKSB7CisJCWZvciAoeCA9IDA7IHggPCBudW1fb25saW5lX2NwdXMoKSAmJgorCQkJICAgICB4ICogKGZiX2xvZ28ubG9nby0+d2lkdGggKyA4KSA8PQorCQkJICAgICBpbmZvLT52YXIueXJlcyAtIGZiX2xvZ28ubG9nby0+d2lkdGg7IHgrKykgeworCQkJaW5mby0+ZmJvcHMtPmZiX2ltYWdlYmxpdChpbmZvLCBpbWFnZSk7CisJCQlpbWFnZS0+ZHkgKz0gZmJfbG9nby5sb2dvLT53aWR0aCArIDg7CisJCX0KKwl9IGVsc2UgaWYgKHJvdGF0ZSA9PSBGQl9ST1RBVEVfQ0NXKSB7CisJCWZvciAoeCA9IDA7IHggPCBudW1fb25saW5lX2NwdXMoKSAmJgorCQkJICAgICB4ICogKGZiX2xvZ28ubG9nby0+d2lkdGggKyA4KSA8PQorCQkJICAgICBpbmZvLT52YXIueXJlcyAtIGZiX2xvZ28ubG9nby0+d2lkdGg7IHgrKykgeworCQkJaW5mby0+ZmJvcHMtPmZiX2ltYWdlYmxpdChpbmZvLCBpbWFnZSk7CisJCQlpbWFnZS0+ZHkgLT0gZmJfbG9nby5sb2dvLT53aWR0aCArIDg7CisJCX0KKwl9Cit9CisKK2ludCBmYl9wcmVwYXJlX2xvZ28oc3RydWN0IGZiX2luZm8gKmluZm8sIGludCByb3RhdGUpCiB7CiAJaW50IGRlcHRoID0gZmJfZ2V0X2NvbG9yX2RlcHRoKCZpbmZvLT52YXIsICZpbmZvLT5maXgpOworCWludCB5cmVzOwogCiAJbWVtc2V0KCZmYl9sb2dvLCAwLCBzaXplb2Yoc3RydWN0IGxvZ29fZGF0YSkpOwogCkBAIC0zNTgsMTAgKzQ1MywxNiBAQAogCS8qIFJldHVybiBpZiBubyBzdWl0YWJsZSBsb2dvIHdhcyBmb3VuZCAqLwogCWZiX2xvZ28ubG9nbyA9IGZiX2ZpbmRfbG9nbyhkZXB0aCk7CiAJCi0JaWYgKCFmYl9sb2dvLmxvZ28gfHwgZmJfbG9nby5sb2dvLT5oZWlnaHQgPiBpbmZvLT52YXIueXJlcykgeworCWlmIChyb3RhdGUgPT0gRkJfUk9UQVRFX1VSIHx8IHJvdGF0ZSA9PSBGQl9ST1RBVEVfVUQpCisJCXlyZXMgPSBpbmZvLT52YXIueXJlczsKKwllbHNlCisJCXlyZXMgPSBpbmZvLT52YXIueHJlczsKKworCWlmIChmYl9sb2dvLmxvZ28gJiYgZmJfbG9nby5sb2dvLT5oZWlnaHQgPiB5cmVzKSB7CiAJCWZiX2xvZ28ubG9nbyA9IE5VTEw7CiAJCXJldHVybiAwOwogCX0KKwogCS8qIFdoYXQgZGVwdGggd2UgYXNrZWQgZm9yIG1pZ2h0IGJlIGRpZmZlcmVudCBmcm9tIHdoYXQgd2UgZ2V0ICovCiAJaWYgKGZiX2xvZ28ubG9nby0+dHlwZSA9PSBMSU5VWF9MT0dPX0NMVVQyMjQpCiAJCWZiX2xvZ28uZGVwdGggPSA4OwpAQCAtMzcyLDEyICs0NzMsMTEgQEAKIAlyZXR1cm4gZmJfbG9nby5sb2dvLT5oZWlnaHQ7CiB9CiAKLWludCBmYl9zaG93X2xvZ28oc3RydWN0IGZiX2luZm8gKmluZm8pCitpbnQgZmJfc2hvd19sb2dvKHN0cnVjdCBmYl9pbmZvICppbmZvLCBpbnQgcm90YXRlKQogewogCXUzMiAqcGFsZXR0ZSA9IE5VTEwsICpzYXZlZF9wc2V1ZG9fcGFsZXR0ZSA9IE5VTEw7Ci0JdW5zaWduZWQgY2hhciAqbG9nb19uZXcgPSBOVUxMOworCXVuc2lnbmVkIGNoYXIgKmxvZ29fbmV3ID0gTlVMTCwgKmxvZ29fcm90YXRlID0gTlVMTDsKIAlzdHJ1Y3QgZmJfaW1hZ2UgaW1hZ2U7Ci0JaW50IHg7CiAKIAkvKiBSZXR1cm4gaWYgdGhlIGZyYW1lIGJ1ZmZlciBpcyBub3QgbWFwcGVkIG9yIHN1c3BlbmRlZCAqLwogCWlmIChmYl9sb2dvLmxvZ28gPT0gTlVMTCB8fCBpbmZvLT5zdGF0ZSAhPSBGQklORk9fU1RBVEVfUlVOTklORykKQEAgLTQxNywyNSArNTE3LDMwIEBACiAJCWZiX3NldF9sb2dvKGluZm8sIGZiX2xvZ28ubG9nbywgbG9nb19uZXcsIGZiX2xvZ28uZGVwdGgpOwogCX0KIAorCWltYWdlLmR4ID0gMDsKKwlpbWFnZS5keSA9IDA7CiAJaW1hZ2Uud2lkdGggPSBmYl9sb2dvLmxvZ28tPndpZHRoOwogCWltYWdlLmhlaWdodCA9IGZiX2xvZ28ubG9nby0+aGVpZ2h0OwotCWltYWdlLmR5ID0gMDsKIAotCWZvciAoeCA9IDA7IHggPCBudW1fb25saW5lX2NwdXMoKSAqIChmYl9sb2dvLmxvZ28tPndpZHRoICsgOCkgJiYKLQkgICAgIHggPD0gaW5mby0+dmFyLnhyZXMtZmJfbG9nby5sb2dvLT53aWR0aDsgeCArPSAoZmJfbG9nby5sb2dvLT53aWR0aCArIDgpKSB7Ci0JCWltYWdlLmR4ID0geDsKLQkJaW5mby0+ZmJvcHMtPmZiX2ltYWdlYmxpdChpbmZvLCAmaW1hZ2UpOworCWlmIChyb3RhdGUpIHsKKwkJbG9nb19yb3RhdGUgPSBrbWFsbG9jKGZiX2xvZ28ubG9nby0+d2lkdGggKgorCQkJCSAgICAgIGZiX2xvZ28ubG9nby0+aGVpZ2h0LCBHRlBfS0VSTkVMKTsKKwkJaWYgKGxvZ29fcm90YXRlKQorCQkJZmJfcm90YXRlX2xvZ28oaW5mbywgbG9nb19yb3RhdGUsICZpbWFnZSwgcm90YXRlKTsKIAl9Ci0JCisKKwlmYl9kb19zaG93X2xvZ28oaW5mbywgJmltYWdlLCByb3RhdGUpOworCiAJa2ZyZWUocGFsZXR0ZSk7CiAJaWYgKHNhdmVkX3BzZXVkb19wYWxldHRlICE9IE5VTEwpCiAJCWluZm8tPnBzZXVkb19wYWxldHRlID0gc2F2ZWRfcHNldWRvX3BhbGV0dGU7CiAJa2ZyZWUobG9nb19uZXcpOworCWtmcmVlKGxvZ29fcm90YXRlKTsKIAlyZXR1cm4gZmJfbG9nby5sb2dvLT5oZWlnaHQ7CiB9CiAjZWxzZQotaW50IGZiX3ByZXBhcmVfbG9nbyhzdHJ1Y3QgZmJfaW5mbyAqaW5mbykgeyByZXR1cm4gMDsgfQotaW50IGZiX3Nob3dfbG9nbyhzdHJ1Y3QgZmJfaW5mbyAqaW5mbykgeyByZXR1cm4gMDsgfQoraW50IGZiX3ByZXBhcmVfbG9nbyhzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgaW50IHJvdGF0ZSkgeyByZXR1cm4gMDsgfQoraW50IGZiX3Nob3dfbG9nbyhzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgaW50IHJvdGF0ZSkgeyByZXR1cm4gMDsgfQogI2VuZGlmIC8qIENPTkZJR19MT0dPICovCiAKIHN0YXRpYyBpbnQgZmJtZW1fcmVhZF9wcm9jKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsCkBAIC04MjksMTggKzkzNCwxNTQgQEAKIH0KIAogI2lmZGVmIENPTkZJR19DT01QQVQKK3N0cnVjdCBmYl9maXhfc2NyZWVuaW5mbzMyIHsKKwljaGFyCQkJaWRbMTZdOworCWNvbXBhdF9jYWRkcl90CQlzbWVtX3N0YXJ0OworCXUzMgkJCXNtZW1fbGVuOworCXUzMgkJCXR5cGU7CisJdTMyCQkJdHlwZV9hdXg7CisJdTMyCQkJdmlzdWFsOworCXUxNgkJCXhwYW5zdGVwOworCXUxNgkJCXlwYW5zdGVwOworCXUxNgkJCXl3cmFwc3RlcDsKKwl1MzIJCQlsaW5lX2xlbmd0aDsKKwljb21wYXRfY2FkZHJfdAkJbW1pb19zdGFydDsKKwl1MzIJCQltbWlvX2xlbjsKKwl1MzIJCQlhY2NlbDsKKwl1MTYJCQlyZXNlcnZlZFszXTsKK307CisKK3N0cnVjdCBmYl9jbWFwMzIgeworCXUzMgkJCXN0YXJ0OworCXUzMgkJCWxlbjsKKwljb21wYXRfY2FkZHJfdAlyZWQ7CisJY29tcGF0X2NhZGRyX3QJZ3JlZW47CisJY29tcGF0X2NhZGRyX3QJYmx1ZTsKKwljb21wYXRfY2FkZHJfdAl0cmFuc3A7Cit9OworCitzdGF0aWMgaW50IGZiX2dldHB1dF9jbWFwKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IGZiX2NtYXBfdXNlciBfX3VzZXIgKmNtYXA7CisJc3RydWN0IGZiX2NtYXAzMiBfX3VzZXIgKmNtYXAzMjsKKwlfX3UzMiBkYXRhOworCWludCBlcnI7CisKKwljbWFwID0gY29tcGF0X2FsbG9jX3VzZXJfc3BhY2Uoc2l6ZW9mKCpjbWFwKSk7CisJY21hcDMyID0gY29tcGF0X3B0cihhcmcpOworCisJaWYgKGNvcHlfaW5fdXNlcigmY21hcC0+c3RhcnQsICZjbWFwMzItPnN0YXJ0LCAyICogc2l6ZW9mKF9fdTMyKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJaWYgKGdldF91c2VyKGRhdGEsICZjbWFwMzItPnJlZCkgfHwKKwkgICAgcHV0X3VzZXIoY29tcGF0X3B0cihkYXRhKSwgJmNtYXAtPnJlZCkgfHwKKwkgICAgZ2V0X3VzZXIoZGF0YSwgJmNtYXAzMi0+Z3JlZW4pIHx8CisJICAgIHB1dF91c2VyKGNvbXBhdF9wdHIoZGF0YSksICZjbWFwLT5ncmVlbikgfHwKKwkgICAgZ2V0X3VzZXIoZGF0YSwgJmNtYXAzMi0+Ymx1ZSkgfHwKKwkgICAgcHV0X3VzZXIoY29tcGF0X3B0cihkYXRhKSwgJmNtYXAtPmJsdWUpIHx8CisJICAgIGdldF91c2VyKGRhdGEsICZjbWFwMzItPnRyYW5zcCkgfHwKKwkgICAgcHV0X3VzZXIoY29tcGF0X3B0cihkYXRhKSwgJmNtYXAtPnRyYW5zcCkpCisJCXJldHVybiAtRUZBVUxUOworCisJZXJyID0gZmJfaW9jdGwoaW5vZGUsIGZpbGUsIGNtZCwgKHVuc2lnbmVkIGxvbmcpIGNtYXApOworCisJaWYgKCFlcnIpIHsKKwkJaWYgKGNvcHlfaW5fdXNlcigmY21hcDMyLT5zdGFydCwKKwkJCQkgJmNtYXAtPnN0YXJ0LAorCQkJCSAyICogc2l6ZW9mKF9fdTMyKSkpCisJCQllcnIgPSAtRUZBVUxUOworCX0KKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGRvX2ZzY3JlZW5pbmZvX3RvX3VzZXIoc3RydWN0IGZiX2ZpeF9zY3JlZW5pbmZvICpmaXgsCisJCQkJICBzdHJ1Y3QgZmJfZml4X3NjcmVlbmluZm8zMiBfX3VzZXIgKmZpeDMyKQoreworCV9fdTMyIGRhdGE7CisJaW50IGVycjsKKworCWVyciA9IGNvcHlfdG9fdXNlcigmZml4MzItPmlkLCAmZml4LT5pZCwgc2l6ZW9mKGZpeDMyLT5pZCkpOworCisJZGF0YSA9IChfX3UzMikgKHVuc2lnbmVkIGxvbmcpIGZpeC0+c21lbV9zdGFydDsKKwllcnIgfD0gcHV0X3VzZXIoZGF0YSwgJmZpeDMyLT5zbWVtX3N0YXJ0KTsKKworCWVyciB8PSBwdXRfdXNlcihmaXgtPnNtZW1fbGVuLCAmZml4MzItPnNtZW1fbGVuKTsKKwllcnIgfD0gcHV0X3VzZXIoZml4LT50eXBlLCAmZml4MzItPnR5cGUpOworCWVyciB8PSBwdXRfdXNlcihmaXgtPnR5cGVfYXV4LCAmZml4MzItPnR5cGVfYXV4KTsKKwllcnIgfD0gcHV0X3VzZXIoZml4LT52aXN1YWwsICZmaXgzMi0+dmlzdWFsKTsKKwllcnIgfD0gcHV0X3VzZXIoZml4LT54cGFuc3RlcCwgJmZpeDMyLT54cGFuc3RlcCk7CisJZXJyIHw9IHB1dF91c2VyKGZpeC0+eXBhbnN0ZXAsICZmaXgzMi0+eXBhbnN0ZXApOworCWVyciB8PSBwdXRfdXNlcihmaXgtPnl3cmFwc3RlcCwgJmZpeDMyLT55d3JhcHN0ZXApOworCWVyciB8PSBwdXRfdXNlcihmaXgtPmxpbmVfbGVuZ3RoLCAmZml4MzItPmxpbmVfbGVuZ3RoKTsKKworCWRhdGEgPSAoX191MzIpICh1bnNpZ25lZCBsb25nKSBmaXgtPm1taW9fc3RhcnQ7CisJZXJyIHw9IHB1dF91c2VyKGRhdGEsICZmaXgzMi0+bW1pb19zdGFydCk7CisKKwllcnIgfD0gcHV0X3VzZXIoZml4LT5tbWlvX2xlbiwgJmZpeDMyLT5tbWlvX2xlbik7CisJZXJyIHw9IHB1dF91c2VyKGZpeC0+YWNjZWwsICZmaXgzMi0+YWNjZWwpOworCWVyciB8PSBjb3B5X3RvX3VzZXIoZml4MzItPnJlc2VydmVkLCBmaXgtPnJlc2VydmVkLAorCQkJICAgIHNpemVvZihmaXgtPnJlc2VydmVkKSk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGZiX2dldF9mc2NyZWVuaW5mbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwltbV9zZWdtZW50X3Qgb2xkX2ZzOworCXN0cnVjdCBmYl9maXhfc2NyZWVuaW5mbyBmaXg7CisJc3RydWN0IGZiX2ZpeF9zY3JlZW5pbmZvMzIgX191c2VyICpmaXgzMjsKKwlpbnQgZXJyOworCisJZml4MzIgPSBjb21wYXRfcHRyKGFyZyk7CisKKwlvbGRfZnMgPSBnZXRfZnMoKTsKKwlzZXRfZnMoS0VSTkVMX0RTKTsKKwllcnIgPSBmYl9pb2N0bChpbm9kZSwgZmlsZSwgY21kLCAodW5zaWduZWQgbG9uZykgJmZpeCk7CisJc2V0X2ZzKG9sZF9mcyk7CisKKwlpZiAoIWVycikKKwkJZXJyID0gZG9fZnNjcmVlbmluZm9fdG9fdXNlcigmZml4LCBmaXgzMik7CisKKwlyZXR1cm4gZXJyOworfQorCiBzdGF0aWMgbG9uZwogZmJfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlpbnQgZmJpZHggPSBpbWlub3IoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlpbnQgZmJpZHggPSBpbWlub3IoaW5vZGUpOwogCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcmVnaXN0ZXJlZF9mYltmYmlkeF07CiAJc3RydWN0IGZiX29wcyAqZmIgPSBpbmZvLT5mYm9wczsKLQlsb25nIHJldDsKKwlsb25nIHJldCA9IC1FTk9JT0NUTENNRDsKIAotCWlmIChmYi0+ZmJfY29tcGF0X2lvY3RsID09IE5VTEwpCi0JCXJldHVybiAtRU5PSU9DVExDTUQ7CiAJbG9ja19rZXJuZWwoKTsKLQlyZXQgPSBmYi0+ZmJfY29tcGF0X2lvY3RsKGZpbGUsIGNtZCwgYXJnLCBpbmZvKTsKKwlzd2l0Y2goY21kKSB7CisJY2FzZSBGQklPR0VUX1ZTQ1JFRU5JTkZPOgorCWNhc2UgRkJJT1BVVF9WU0NSRUVOSU5GTzoKKwljYXNlIEZCSU9QQU5fRElTUExBWToKKwljYXNlIEZCSU9HRVRfQ09OMkZCTUFQOgorCWNhc2UgRkJJT1BVVF9DT04yRkJNQVA6CisJCWFyZyA9ICh1bnNpZ25lZCBsb25nKSBjb21wYXRfcHRyKGFyZyk7CisJY2FzZSBGQklPQkxBTks6CisJCXJldCA9IGZiX2lvY3RsKGlub2RlLCBmaWxlLCBjbWQsIGFyZyk7CisJCWJyZWFrOworCisJY2FzZSBGQklPR0VUX0ZTQ1JFRU5JTkZPOgorCQlyZXQgPSBmYl9nZXRfZnNjcmVlbmluZm8oaW5vZGUsIGZpbGUsIGNtZCwgYXJnKTsKKwkJYnJlYWs7CisKKwljYXNlIEZCSU9HRVRDTUFQOgorCWNhc2UgRkJJT1BVVENNQVA6CisJCXJldCA9IGZiX2dldHB1dF9jbWFwKGlub2RlLCBmaWxlLCBjbWQsIGFyZyk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJaWYgKGZiLT5mYl9jb21wYXRfaW9jdGwpCisJCQlyZXQgPSBmYi0+ZmJfY29tcGF0X2lvY3RsKGZpbGUsIGNtZCwgYXJnLCBpbmZvKTsKKwkJYnJlYWs7CisJfQogCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTIxNSw2ICsxNDU2LDI4IEBACiAJcmV0dXJuIGVycjsKIH0KIAorLyoqCisgKiBmYl9jb25fZHVpdCAtIHVzZXI8LT5mYmNvbiBwYXNzdGhyb3VnaAorICogQGluZm86IHN0cnVjdCBmYl9pbmZvCisgKiBAZXZlbnQ6IG5vdGlmaWNhdGlvbiBldmVudCB0byBiZSBwYXNzZWQgdG8gZmJjb24KKyAqIEBkYXRhOiBwcml2YXRlIGRhdGEKKyAqCisgKiBERVNDUklQVElPTgorICogVGhpcyBmdW5jdGlvbiBpcyBhbiBmYmNvbi11c2VyIGV2ZW50IHBhc3NpbmcgY2hhbm5lbAorICogd2hpY2ggYnlwYXNzZXMgZmJkZXYuICBUaGlzIGlzIGhvcGVmdWxseSB0ZW1wb3JhcnkKKyAqIHVudGlsIGEgdXNlciBpbnRlcmZhY2UgZm9yIGZiY29uIGlzIGNyZWF0ZWQKKyAqLworaW50IGZiX2Nvbl9kdWl0KHN0cnVjdCBmYl9pbmZvICppbmZvLCBpbnQgZXZlbnQsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGZiX2V2ZW50IGV2bnQ7CisKKwlldm50LmluZm8gPSBpbmZvOworCWV2bnQuZGF0YSA9IGRhdGE7CisKKwlyZXR1cm4gbm90aWZpZXJfY2FsbF9jaGFpbigmZmJfbm90aWZpZXJfbGlzdCwgZXZlbnQsICZldm50KTsKK30KK0VYUE9SVF9TWU1CT0woZmJfY29uX2R1aXQpOworCiBzdGF0aWMgY2hhciAqdmlkZW9fb3B0aW9uc1tGQl9NQVhdOwogc3RhdGljIGludCBvZm9ubHk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJzeXNmcy5jIGIvZHJpdmVycy92aWRlby9mYnN5c2ZzLmMKaW5kZXggMDA3YzhlOS4uMDhkYWM5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9mYnN5c2ZzLmMKKysrIGIvZHJpdmVycy92aWRlby9mYnN5c2ZzLmMKQEAgLTIxMyw2ICsyMTMsNzAgQEAKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwgZmJfaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsKTsKIH0KIAorc3RhdGljIHNzaXplX3Qgc3RvcmVfcm90YXRlKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldmljZSwgY29uc3QgY2hhciAqYnVmLAorCQkJICAgIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgZmJfaW5mbyAqZmJfaW5mbyA9IGNsYXNzX2dldF9kZXZkYXRhKGNsYXNzX2RldmljZSk7CisJc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvIHZhcjsKKwljaGFyICoqbGFzdCA9IE5VTEw7CisJaW50IGVycjsKKworCXZhciA9IGZiX2luZm8tPnZhcjsKKwl2YXIucm90YXRlID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBsYXN0LCAwKTsKKworCWlmICgoZXJyID0gYWN0aXZhdGUoZmJfaW5mbywgJnZhcikpKQorCQlyZXR1cm4gZXJyOworCisJcmV0dXJuIGNvdW50OworfQorCisKK3N0YXRpYyBzc2l6ZV90IHNob3dfcm90YXRlKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldmljZSwgY2hhciAqYnVmKQoreworCXN0cnVjdCBmYl9pbmZvICpmYl9pbmZvID0gY2xhc3NfZ2V0X2RldmRhdGEoY2xhc3NfZGV2aWNlKTsKKworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCBmYl9pbmZvLT52YXIucm90YXRlKTsKK30KKworc3RhdGljIHNzaXplX3Qgc3RvcmVfY29uX3JvdGF0ZShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXZpY2UsCisJCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGZiX2luZm8gKmZiX2luZm8gPSBjbGFzc19nZXRfZGV2ZGF0YShjbGFzc19kZXZpY2UpOworCWludCByb3RhdGU7CisJY2hhciAqKmxhc3QgPSBOVUxMOworCisJYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCXJvdGF0ZSA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgbGFzdCwgMCk7CisJZmJfY29uX2R1aXQoZmJfaW5mbywgRkJfRVZFTlRfU0VUX0NPTl9ST1RBVEUsICZyb3RhdGUpOworCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX2Nvbl9yb3RhdGVfYWxsKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldmljZSwKKwkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgZmJfaW5mbyAqZmJfaW5mbyA9IGNsYXNzX2dldF9kZXZkYXRhKGNsYXNzX2RldmljZSk7CisJaW50IHJvdGF0ZTsKKwljaGFyICoqbGFzdCA9IE5VTEw7CisKKwlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJcm90YXRlID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBsYXN0LCAwKTsKKwlmYl9jb25fZHVpdChmYl9pbmZvLCBGQl9FVkVOVF9TRVRfQ09OX1JPVEFURV9BTEwsICZyb3RhdGUpOworCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfY29uX3JvdGF0ZShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXZpY2UsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgZmJfaW5mbyAqZmJfaW5mbyA9IGNsYXNzX2dldF9kZXZkYXRhKGNsYXNzX2RldmljZSk7CisJaW50IHJvdGF0ZTsKKworCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwlyb3RhdGUgPSBmYl9jb25fZHVpdChmYl9pbmZvLCBGQl9FVkVOVF9HRVRfQ09OX1JPVEFURSwgTlVMTCk7CisJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCByb3RhdGUpOworfQorCiBzdGF0aWMgc3NpemVfdCBzdG9yZV92aXJ0dWFsKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldmljZSwKIAkJCSAgICAgY29uc3QgY2hhciAqIGJ1Ziwgc2l6ZV90IGNvdW50KQogewpAQCAtNDQwLDYgKzUwNCw5IEBACiAJX19BVFRSKHZpcnR1YWxfc2l6ZSwgU19JUlVHT3xTX0lXVVNSLCBzaG93X3ZpcnR1YWwsIHN0b3JlX3ZpcnR1YWwpLAogCV9fQVRUUihuYW1lLCBTX0lSVUdPLCBzaG93X25hbWUsIE5VTEwpLAogCV9fQVRUUihzdHJpZGUsIFNfSVJVR08sIHNob3dfc3RyaWRlLCBOVUxMKSwKKwlfX0FUVFIocm90YXRlLCBTX0lSVUdPfFNfSVdVU1IsIHNob3dfcm90YXRlLCBzdG9yZV9yb3RhdGUpLAorCV9fQVRUUihjb25fcm90YXRlLCBTX0lSVUdPfFNfSVdVU1IsIHNob3dfY29uX3JvdGF0ZSwgc3RvcmVfY29uX3JvdGF0ZSksCisJX19BVFRSKGNvbl9yb3RhdGVfYWxsLCBTX0lXVVNSLCBOVUxMLCBzdG9yZV9jb25fcm90YXRlX2FsbCksCiB9OwogCiBpbnQgZmJfaW5pdF9jbGFzc19kZXZpY2Uoc3RydWN0IGZiX2luZm8gKmZiX2luZm8pCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2diZWZiLmMgYi9kcml2ZXJzL3ZpZGVvL2diZWZiLmMKaW5kZXggOWQ1ZTRmMy4uZDc0NGM1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9nYmVmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZ2JlZmIuYwpAQCAtMTEwNSwxMiArMTEwNSwxMSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBnYmVmYl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9faW5pdCBnYmVmYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwX2RldikKIHsKIAlpbnQgaSwgcmV0ID0gMDsKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKIAlzdHJ1Y3QgZ2JlZmJfcGFyICpwYXI7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcF9kZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKICNpZm5kZWYgTU9EVUxFCiAJY2hhciAqb3B0aW9ucyA9IE5VTEw7CiAjZW5kaWYKQEAgLTEyMDQsOCArMTIwMyw4IEBACiAJCWdvdG8gb3V0X2diZV91bm1hcDsKIAl9CiAKLQlkZXZfc2V0X2RydmRhdGEoJnBfZGV2LT5kZXYsIGluZm8pOwotCWdiZWZiX2NyZWF0ZV9zeXNmcyhkZXYpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBfZGV2LCBpbmZvKTsKKwlnYmVmYl9jcmVhdGVfc3lzZnMoJnBfZGV2LT5kZXYpOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiZmIlZDogJXMgcmV2ICVkIEAgMHglMDh4IHVzaW5nICVka0IgbWVtb3J5XG4iLAogCSAgICAgICBpbmZvLT5ub2RlLCBpbmZvLT5maXguaWQsIGdiZV9yZXZpc2lvbiwgKHVuc2lnbmVkKSBHQkVfQkFTRSwKQEAgLTEyMzEsMTAgKzEyMzAsOSBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZleGl0IGdiZWZiX3JlbW92ZShzdHJ1Y3QgZGV2aWNlKiBkZXYpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBnYmVmYl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSogcF9kZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcF9kZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKLQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YSgmcF9kZXYtPmRldik7CisJc3RydWN0IGZiX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwX2Rldik7CiAKIAl1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGluZm8pOwogCWdiZV90dXJuX29mZigpOwpAQCAtMTI1MiwxOCArMTI1MCwxOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgZ2JlZmJfZHJpdmVyID0gewotCS5uYW1lID0gImdiZWZiIiwKLQkuYnVzID0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZ2JlZmJfZHJpdmVyID0gewogCS5wcm9iZSA9IGdiZWZiX3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChnYmVmYl9yZW1vdmUpLAorCS5kcml2ZXIJPSB7CisJCS5uYW1lID0gImdiZWZiIiwKKwl9LAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmdiZWZiX2RldmljZTsKIAogaW50IF9faW5pdCBnYmVmYl9pbml0KHZvaWQpCiB7Ci0JaW50IHJldCA9IGRyaXZlcl9yZWdpc3RlcigmZ2JlZmJfZHJpdmVyKTsKKwlpbnQgcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZnYmVmYl9kcml2ZXIpOwogCWlmICghcmV0KSB7CiAJCWdiZWZiX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygiZ2JlZmIiLCAwKTsKIAkJaWYgKGdiZWZiX2RldmljZSkgewpAQCAtMTI3Myw3ICsxMjcyLDcgQEAKIAkJfQogCQlpZiAocmV0KSB7CiAJCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KGdiZWZiX2RldmljZSk7Ci0JCQlkcml2ZXJfdW5yZWdpc3RlcigmZ2JlZmJfZHJpdmVyKTsKKwkJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZnYmVmYl9kcml2ZXIpOwogCQl9CiAJfQogCXJldHVybiByZXQ7CkBAIC0xMjgyLDcgKzEyODEsNyBAQAogdm9pZCBfX2V4aXQgZ2JlZmJfZXhpdCh2b2lkKQogewogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGdiZWZiX2RldmljZSk7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJmdiZWZiX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmdiZWZiX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGdiZWZiX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9pbXhmYi5jIGIvZHJpdmVycy92aWRlby9pbXhmYi5jCmluZGV4IGUyMGI5ZjMuLjU5MjRjYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vaW14ZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2lteGZiLmMKQEAgLTQyMywxOCArNDIzLDE4IEBACiAgKiBQb3dlciBtYW5hZ2VtZW50IGhvb2tzLiAgTm90ZSB0aGF0IHdlIHdvbid0IGJlIGNhbGxlZCBmcm9tIElSUSBjb250ZXh0LAogICogdW5saWtlIHRoZSBibGFuayBmdW5jdGlvbnMgYWJvdmUsIHNvIHdlIG1heSBzbGVlcC4KICAqLwotc3RhdGljIGludCBpbXhmYl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBpbXhmYl9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCXN0cnVjdCBpbXhmYl9pbmZvICpmYmkgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgaW14ZmJfaW5mbyAqZmJpID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAlwcl9kZWJ1ZygiJXNcbiIsX19GVU5DVElPTl9fKTsKIAogCWlteGZiX2Rpc2FibGVfY29udHJvbGxlcihmYmkpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGlteGZiX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGlteGZiX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGlteGZiX2luZm8gKmZiaSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBpbXhmYl9pbmZvICpmYmkgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCXByX2RlYnVnKCIlc1xuIixfX0ZVTkNUSU9OX18pOwogCiAJaW14ZmJfZW5hYmxlX2NvbnRyb2xsZXIoZmJpKTsKQEAgLTUzOCw5ICs1MzgsOCBAQAogCXJldHVybiBmYmktPm1hcF9jcHUgPyAwIDogLUVOT01FTTsKIH0KIAotc3RhdGljIGludCBfX2luaXQgaW14ZmJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBfX2luaXQgaW14ZmJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJc3RydWN0IGlteGZiX2luZm8gKmZiaTsKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKIAlzdHJ1Y3QgaW14ZmJfbWFjaF9pbmZvICppbmY7CkBAIC01NTMsMjEgKzU1MiwyMSBAQAogCWlmKCFyZXMpCiAJCXJldHVybiAtRU5PREVWOwogCi0JaW5mID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCWluZiA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCWlmKCFpbmYpIHsKIAkJZGV2X2VycihkZXYsIk5vIHBsYXRmb3JtX2RhdGEgYXZhaWxhYmxlXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JaW5mbyA9IGZyYW1lYnVmZmVyX2FsbG9jKHNpemVvZihzdHJ1Y3QgaW14ZmJfaW5mbyksIGRldik7CisJaW5mbyA9IGZyYW1lYnVmZmVyX2FsbG9jKHNpemVvZihzdHJ1Y3QgaW14ZmJfaW5mbyksICZwZGV2LT5kZXYpOwogCWlmKCFpbmZvKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCWZiaSA9IGluZm8tPnBhcjsKIAotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGluZm8pOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGluZm8pOwogCi0JcmV0ID0gaW14ZmJfaW5pdF9mYmluZm8oZGV2KTsKKwlyZXQgPSBpbXhmYl9pbml0X2ZiaW5mbygmcGRldi0+ZGV2KTsKIAlpZiggcmV0IDwgMCApCiAJCWdvdG8gZmFpbGVkX2luaXQ7CiAKQEAgLTYyMSwyMiArNjIwLDIxIEBACiAJZmJfZGVhbGxvY19jbWFwKCZpbmZvLT5jbWFwKTsKIGZhaWxlZF9jbWFwOgogCWlmICghaW5mLT5maXhlZF9zY3JlZW5fY3B1KQotCQlkbWFfZnJlZV93cml0ZWNvbWJpbmUoZGV2LGZiaS0+bWFwX3NpemUsZmJpLT5tYXBfY3B1LAorCQlkbWFfZnJlZV93cml0ZWNvbWJpbmUoJnBkZXYtPmRldixmYmktPm1hcF9zaXplLGZiaS0+bWFwX2NwdSwKIAkJICAgICAgICAgICBmYmktPm1hcF9kbWEpOwogZmFpbGVkX21hcDoKIAlrZnJlZShpbmZvLT5wc2V1ZG9fcGFsZXR0ZSk7CiBmYWlsZWRfcmVnczoKIAlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0KTsKIGZhaWxlZF9pbml0OgotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCWZyYW1lYnVmZmVyX3JlbGVhc2UoaW5mbyk7CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBpbXhmYl9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBpbXhmYl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7Ci0Jc3RydWN0IGZiX2luZm8gKmluZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBpbXhmYl9pbmZvICpmYmkgPSBpbmZvLT5wYXI7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAKQEAgLTY1MSwzNiArNjQ5LDM3IEBACiAJZnJhbWVidWZmZXJfcmVsZWFzZShpbmZvKTsKIAogCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAogCXJldHVybiAwOwogfQogCi12b2lkICBpbXhmYl9zaHV0ZG93bihzdHJ1Y3QgZGV2aWNlICogZGV2KQordm9pZCAgaW14ZmJfc2h1dGRvd24oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqIGRldikKIHsKLQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgaW14ZmJfaW5mbyAqZmJpID0gaW5mby0+cGFyOwogCWlteGZiX2Rpc2FibGVfY29udHJvbGxlcihmYmkpOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgaW14ZmJfZHJpdmVyID0gewotCS5uYW1lCQk9ICJpbXgtZmIiLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaW14ZmJfZHJpdmVyID0gewogCS5wcm9iZQkJPSBpbXhmYl9wcm9iZSwKIAkuc3VzcGVuZAk9IGlteGZiX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBpbXhmYl9yZXN1bWUsCiAJLnJlbW92ZQkJPSBpbXhmYl9yZW1vdmUsCiAJLnNodXRkb3duCT0gaW14ZmJfc2h1dGRvd24sCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gImlteC1mYiIsCisJfSwKIH07CiAKIGludCBfX2luaXQgaW14ZmJfaW5pdCh2b2lkKQogewotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJmlteGZiX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmaW14ZmJfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGlteGZiX2NsZWFudXAodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmaW14ZmJfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmaW14ZmJfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoaW14ZmJfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYmRydi5jIGIvZHJpdmVycy92aWRlby9pbnRlbGZiL2ludGVsZmJkcnYuYwppbmRleCAwNzk5Yjk5Li40Mjc2ODllIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYmRydi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vaW50ZWxmYi9pbnRlbGZiZHJ2LmMKQEAgLTEyMiw3ICsxMjIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vaW50ZWxmYi9pbnRlbGZiaHcuYyBiL2RyaXZlcnMvdmlkZW8vaW50ZWxmYi9pbnRlbGZiaHcuYwppbmRleCBhYzk0YzJlLi42MjRjNGJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYmh3LmMKKysrIGIvZHJpdmVycy92aWRlby9pbnRlbGZiL2ludGVsZmJody5jCkBAIC0zNCw3ICszNCw2IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9tb2RlZGIuYyBiL2RyaXZlcnMvdmlkZW8vbW9kZWRiLmMKaW5kZXggMTc4OWE1Mi4uMWRhMmY4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9tb2RlZGIuYworKysgYi9kcml2ZXJzL3ZpZGVvL21vZGVkYi5jCkBAIC0yNTEsNiArMjUxLDEwIEBACiAJTlVMTCwgNjAsIDE5MjAsIDEyMDAsIDUxNzcsIDEyOCwgMzM2LCAxLCAzOCwgMjA4LCAzLAogCUZCX1NZTkNfSE9SX0hJR0hfQUNUIHwgRkJfU1lOQ19WRVJUX0hJR0hfQUNULAogCUZCX1ZNT0RFX05PTklOVEVSTEFDRUQKKyAgICB9LCB7CisJLyogMTE1Mng3NjgsIDYwIEh6LCBQb3dlckJvb2sgRzQgVGl0YW5pdW0gSSBhbmQgSUkgKi8KKwlOVUxMLCA2MCwgMTE1MiwgNzY4LCAxNTM4NiwgMTU4LCAyNiwgMjksIDMsIDEzNiwgNiwKKwlGQl9TWU5DX0hPUl9ISUdIX0FDVHxGQl9TWU5DX1ZFUlRfSElHSF9BQ1QsIEZCX1ZNT0RFX05PTklOVEVSTEFDRUQKICAgICB9LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9weGFmYi5jIGIvZHJpdmVycy92aWRlby9weGFmYi5jCmluZGV4IGYzMDVhNWIuLjdiNGNkMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vcHhhZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3B4YWZiLmMKQEAgLTk4MCwxNyArOTgwLDE3IEBACiAgKiBQb3dlciBtYW5hZ2VtZW50IGhvb2tzLiAgTm90ZSB0aGF0IHdlIHdvbid0IGJlIGNhbGxlZCBmcm9tIElSUSBjb250ZXh0LAogICogdW5saWtlIHRoZSBibGFuayBmdW5jdGlvbnMgYWJvdmUsIHNvIHdlIG1heSBzbGVlcC4KICAqLwotc3RhdGljIGludCBweGFmYl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBweGFmYl9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCXN0cnVjdCBweGFmYl9pbmZvICpmYmkgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgcHhhZmJfaW5mbyAqZmJpID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAogCXNldF9jdHJscl9zdGF0ZShmYmksIENfRElTQUJMRV9QTSk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcHhhZmJfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgcHhhZmJfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcHhhZmJfaW5mbyAqZmJpID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHB4YWZiX2luZm8gKmZiaSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKIAlzZXRfY3RybHJfc3RhdGUoZmJpLCBDX0VOQUJMRV9QTSk7CiAJcmV0dXJuIDA7CkBAIC0xMjY4LDcgKzEyNjgsNyBAQAogfQogI2VuZGlmCiAKLWludCBfX2luaXQgcHhhZmJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQoraW50IF9faW5pdCBweGFmYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHB4YWZiX2luZm8gKmZiaTsKIAlzdHJ1Y3QgcHhhZmJfbWFjaF9pbmZvICppbmY7CkBAIC0xMjc2LDE0ICsxMjc2LDE0IEBACiAKIAlkZXZfZGJnKGRldiwgInB4YWZiX3Byb2JlXG4iKTsKIAotCWluZiA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKwlpbmYgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXJldCA9IC1FTk9NRU07CiAJZmJpID0gTlVMTDsKIAlpZiAoIWluZikKIAkJZ290byBmYWlsZWQ7CiAKICNpZmRlZiBDT05GSUdfRkJfUFhBX1BBUkFNRVRFUlMKLQlyZXQgPSBweGFmYl9wYXJzZV9vcHRpb25zKGRldiwgZ19vcHRpb25zKTsKKwlyZXQgPSBweGFmYl9wYXJzZV9vcHRpb25zKCZkZXYtPmRldiwgZ19vcHRpb25zKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBmYWlsZWQ7CiAjZW5kaWYKQEAgLTEyOTMsMzYgKzEyOTMsMzYgQEAKIAkgKiBhIHdhcm5pbmcgaXMgZ2l2ZW4uICovCiAKICAgICAgICAgaWYgKGluZi0+bGNjcjAgJiBMQ0NSMF9JTlZBTElEX0NPTkZJR19NQVNLKQotICAgICAgICAgICAgICAgIGRldl93YXJuKGRldiwgIm1hY2hpbmUgTENDUjAgc2V0dGluZyBjb250YWlucyBpbGxlZ2FsIGJpdHM6ICUwOHhcbiIsCisgICAgICAgICAgICAgICAgZGV2X3dhcm4oJmRldi0+ZGV2LCAibWFjaGluZSBMQ0NSMCBzZXR0aW5nIGNvbnRhaW5zIGlsbGVnYWwgYml0czogJTA4eFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGluZi0+bGNjcjAgJiBMQ0NSMF9JTlZBTElEX0NPTkZJR19NQVNLKTsKICAgICAgICAgaWYgKGluZi0+bGNjcjMgJiBMQ0NSM19JTlZBTElEX0NPTkZJR19NQVNLKQotICAgICAgICAgICAgICAgIGRldl93YXJuKGRldiwgIm1hY2hpbmUgTENDUjMgc2V0dGluZyBjb250YWlucyBpbGxlZ2FsIGJpdHM6ICUwOHhcbiIsCisgICAgICAgICAgICAgICAgZGV2X3dhcm4oJmRldi0+ZGV2LCAibWFjaGluZSBMQ0NSMyBzZXR0aW5nIGNvbnRhaW5zIGlsbGVnYWwgYml0czogJTA4eFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGluZi0+bGNjcjMgJiBMQ0NSM19JTlZBTElEX0NPTkZJR19NQVNLKTsKICAgICAgICAgaWYgKGluZi0+bGNjcjAgJiBMQ0NSMF9EUEQgJiYKIAkgICAgKChpbmYtPmxjY3IwICYgTENDUjBfUEFTKSAhPSBMQ0NSMF9QYXMgfHwKIAkgICAgIChpbmYtPmxjY3IwICYgTENDUjBfU0RTKSAhPSBMQ0NSMF9TbmdsIHx8CiAJICAgICAoaW5mLT5sY2NyMCAmIExDQ1IwX0NNUykgIT0gTENDUjBfTW9ubykpCi0gICAgICAgICAgICAgICAgZGV2X3dhcm4oZGV2LCAiRG91YmxlIFBpeGVsIERhdGEgKERQRCkgbW9kZSBpcyBvbmx5IHZhbGlkIGluIHBhc3NpdmUgbW9ubyIKKyAgICAgICAgICAgICAgICBkZXZfd2FybigmZGV2LT5kZXYsICJEb3VibGUgUGl4ZWwgRGF0YSAoRFBEKSBtb2RlIGlzIG9ubHkgdmFsaWQgaW4gcGFzc2l2ZSBtb25vIgogCQkJICIgc2luZ2xlIHBhbmVsIG1vZGVcbiIpOwogICAgICAgICBpZiAoKGluZi0+bGNjcjAgJiBMQ0NSMF9QQVMpID09IExDQ1IwX0FjdCAmJgogCSAgICAoaW5mLT5sY2NyMCAmIExDQ1IwX1NEUykgPT0gTENDUjBfRHVhbCkKLSAgICAgICAgICAgICAgICBkZXZfd2FybihkZXYsICJEdWFsIHBhbmVsIG9ubHkgdmFsaWQgaW4gcGFzc2l2ZSBtb2RlXG4iKTsKKyAgICAgICAgICAgICAgICBkZXZfd2FybigmZGV2LT5kZXYsICJEdWFsIHBhbmVsIG9ubHkgdmFsaWQgaW4gcGFzc2l2ZSBtb2RlXG4iKTsKICAgICAgICAgaWYgKChpbmYtPmxjY3IwICYgTENDUjBfUEFTKSA9PSBMQ0NSMF9QYXMgJiYKICAgICAgICAgICAgICAoaW5mLT51cHBlcl9tYXJnaW4gfHwgaW5mLT5sb3dlcl9tYXJnaW4pKQotICAgICAgICAgICAgICAgIGRldl93YXJuKGRldiwgIlVwcGVyIGFuZCBsb3dlciBtYXJnaW5zIG11c3QgYmUgMCBpbiBwYXNzaXZlIG1vZGVcbiIpOworICAgICAgICAgICAgICAgIGRldl93YXJuKCZkZXYtPmRldiwgIlVwcGVyIGFuZCBsb3dlciBtYXJnaW5zIG11c3QgYmUgMCBpbiBwYXNzaXZlIG1vZGVcbiIpOwogI2VuZGlmCiAKLQlkZXZfZGJnKGRldiwgImdvdCBhICVkeCVkeCVkIExDRFxuIixpbmYtPnhyZXMsIGluZi0+eXJlcywgaW5mLT5icHApOworCWRldl9kYmcoJmRldi0+ZGV2LCAiZ290IGEgJWR4JWR4JWQgTENEXG4iLGluZi0+eHJlcywgaW5mLT55cmVzLCBpbmYtPmJwcCk7CiAJaWYgKGluZi0+eHJlcyA9PSAwIHx8IGluZi0+eXJlcyA9PSAwIHx8IGluZi0+YnBwID09IDApIHsKLQkJZGV2X2VycihkZXYsICJJbnZhbGlkIHJlc29sdXRpb24gb3IgYml0IGRlcHRoXG4iKTsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJJbnZhbGlkIHJlc29sdXRpb24gb3IgYml0IGRlcHRoXG4iKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBmYWlsZWQ7CiAJfQogCXB4YWZiX2JhY2tsaWdodF9wb3dlciA9IGluZi0+cHhhZmJfYmFja2xpZ2h0X3Bvd2VyOwogCXB4YWZiX2xjZF9wb3dlciA9IGluZi0+cHhhZmJfbGNkX3Bvd2VyOwotCWZiaSA9IHB4YWZiX2luaXRfZmJpbmZvKGRldik7CisJZmJpID0gcHhhZmJfaW5pdF9mYmluZm8oJmRldi0+ZGV2KTsKIAlpZiAoIWZiaSkgewotCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBpbml0aWFsaXplIGZyYW1lYnVmZmVyIGRldmljZVxuIik7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiRmFpbGVkIHRvIGluaXRpYWxpemUgZnJhbWVidWZmZXIgZGV2aWNlXG4iKTsKIAkJcmV0ID0gLUVOT01FTTsgLy8gb25seSByZWFzb24gZm9yIHB4YWZiX2luaXRfZmJpbmZvIHRvIGZhaWwgaXMga21hbGxvYwogCQlnb3RvIGZhaWxlZDsKIAl9CkBAIC0xMzMwLDE0ICsxMzMwLDE0IEBACiAJLyogSW5pdGlhbGl6ZSB2aWRlbyBtZW1vcnkgKi8KIAlyZXQgPSBweGFmYl9tYXBfdmlkZW9fbWVtb3J5KGZiaSk7CiAJaWYgKHJldCkgewotCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSB2aWRlbyBSQU06ICVkXG4iLCByZXQpOworCQlkZXZfZXJyKCZkZXYtPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSB2aWRlbyBSQU06ICVkXG4iLCByZXQpOwogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGZhaWxlZDsKIAl9CiAKIAlyZXQgPSByZXF1ZXN0X2lycShJUlFfTENELCBweGFmYl9oYW5kbGVfaXJxLCBTQV9JTlRFUlJVUFQsICJMQ0QiLCBmYmkpOwogCWlmIChyZXQpIHsKLQkJZGV2X2VycihkZXYsICJyZXF1ZXN0X2lycSBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQlkZXZfZXJyKCZkZXYtPmRldiwgInJlcXVlc3RfaXJxIGZhaWxlZDogJWRcbiIsIHJldCk7CiAJCXJldCA9IC1FQlVTWTsKIAkJZ290byBmYWlsZWQ7CiAJfQpAQCAtMTM0OSwxMSArMTM0OSwxMSBAQAogCXB4YWZiX2NoZWNrX3ZhcigmZmJpLT5mYi52YXIsICZmYmktPmZiKTsKIAlweGFmYl9zZXRfcGFyKCZmYmktPmZiKTsKIAotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGZiaSk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBmYmkpOwogCiAJcmV0ID0gcmVnaXN0ZXJfZnJhbWVidWZmZXIoJmZiaS0+ZmIpOwogCWlmIChyZXQgPCAwKSB7Ci0JCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGZyYW1lYnVmZmVyIGRldmljZTogJWRcbiIsIHJldCk7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGZyYW1lYnVmZmVyIGRldmljZTogJWRcbiIsIHJldCk7CiAJCWdvdG8gZmFpbGVkOwogCX0KIApAQCAtMTM3NiwxOSArMTM3NiwyMCBAQAogCXJldHVybiAwOwogCiBmYWlsZWQ6Ci0JZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKIAlrZnJlZShmYmkpOwogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBweGFmYl9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gInB4YTJ4eC1mYiIsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBweGFmYl9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IHB4YWZiX3Byb2JlLAogI2lmZGVmIENPTkZJR19QTQogCS5zdXNwZW5kCT0gcHhhZmJfc3VzcGVuZCwKIAkucmVzdW1lCQk9IHB4YWZiX3Jlc3VtZSwKICNlbmRpZgorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJweGEyeHgtZmIiLAorCX0sCiB9OwogCiAjaWZuZGVmIE1PRFVMRQpAQCAtMTQxNSw3ICsxNDE2LDcgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJcHhhZmJfc2V0dXAob3B0aW9uKTsKICNlbmRpZgotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJnB4YWZiX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmcHhhZmJfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQocHhhZmJfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3E0MGZiLmMgYi9kcml2ZXJzL3ZpZGVvL3E0MGZiLmMKaW5kZXggYmZjNDFmMi4uZmM5MWRiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9xNDBmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vcTQwZmIuYwpAQCAtODYsOSArODYsOCBAQAogCS5mYl9pbWFnZWJsaXQJPSBjZmJfaW1hZ2VibGl0LAogfTsKIAotc3RhdGljIGludCBfX2luaXQgcTQwZmJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2aWNlKQorc3RhdGljIGludCBfX2luaXQgcTQwZmJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXZpY2UpOwogCXN0cnVjdCBmYl9pbmZvICppbmZvOwogCiAJaWYgKCFNQUNIX0lTX1E0MCkKQEAgLTEyOCwxMCArMTI3LDExIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBxNDBmYl9kcml2ZXIgPSB7Ci0JLm5hbWUJPSAicTQwZmIiLAotCS5idXMJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBxNDBmYl9kcml2ZXIgPSB7CiAJLnByb2JlCT0gcTQwZmJfcHJvYmUsCisJLmRyaXZlcgk9IHsKKwkJLm5hbWUJPSAicTQwZmIiLAorCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBxNDBmYl9kZXZpY2UgPSB7CkBAIC0xNDUsMTIgKzE0NSwxMiBAQAogCWlmIChmYl9nZXRfb3B0aW9ucygicTQwZmIiLCBOVUxMKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlyZXQgPSBkcml2ZXJfcmVnaXN0ZXIoJnE0MGZiX2RyaXZlcik7CisJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZxNDBmYl9kcml2ZXIpOwogCiAJaWYgKCFyZXQpIHsKIAkJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZxNDBmYl9kZXZpY2UpOwogCQlpZiAocmV0KQotCQkJZHJpdmVyX3VucmVnaXN0ZXIoJnE0MGZiX2RyaXZlcik7CisJCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmcTQwZmJfZHJpdmVyKTsKIAl9CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vczFkMTN4eHhmYi5jIGIvZHJpdmVycy92aWRlby9zMWQxM3h4eGZiLmMKaW5kZXggM2VkYmQxNC4uZTVkMGY5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zMWQxM3h4eGZiLmMKKysrIGIvZHJpdmVycy92aWRlby9zMWQxM3h4eGZiLmMKQEAgLTUwMywxMCArNTAzLDkgQEAKIAogCiBzdGF0aWMgaW50Ci1zMWQxM3h4eGZiX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzMWQxM3h4eGZiX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBmYl9pbmZvICppbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IHMxZDEzeHh4ZmJfcGFyICpwYXIgPSBOVUxMOwogCiAJaWYgKGluZm8pIHsKQEAgLTUzNCw5ICs1MzMsOCBAQAogfQogCiBzdGF0aWMgaW50IF9fZGV2aW5pdAotczFkMTN4eHhmYl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzMWQxM3h4eGZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXN0cnVjdCBzMWQxM3h4eGZiX3BhciAqZGVmYXVsdF9wYXI7CiAJc3RydWN0IGZiX2luZm8gKmluZm87CiAJc3RydWN0IHMxZDEzeHh4ZmJfcGRhdGEgKnBkYXRhID0gTlVMTDsKQEAgLTU0OCw4ICs1NDYsOCBAQAogCXByaW50ayhLRVJOX0lORk8gIkVwc29uIFMxRDEzWFhYIEZCIERyaXZlclxuIik7CiAKIAkvKiBlbmFibGUgcGxhdGZvcm0tZGVwZW5kZW50IGhhcmR3YXJlIGdsdWUsIGlmIGFueSAqLwotCWlmIChkZXYtPnBsYXRmb3JtX2RhdGEpCi0JCXBkYXRhID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCWlmIChwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSkKKwkJcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAogCWlmIChwZGF0YSAmJiBwZGF0YS0+cGxhdGZvcm1faW5pdF92aWRlbykKIAkJcGRhdGEtPnBsYXRmb3JtX2luaXRfdmlkZW8oKTsKQEAgLTU3MiwxNCArNTcwLDE0IEBACiAKIAlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihwZGV2LT5yZXNvdXJjZVswXS5zdGFydCwKIAkJcGRldi0+cmVzb3VyY2VbMF0uZW5kIC0gcGRldi0+cmVzb3VyY2VbMF0uc3RhcnQgKzEsICJzMWQxM3h4eGZiIG1lbSIpKSB7Ci0JCWRldl9kYmcoZGV2LCAicmVxdWVzdF9tZW1fcmVnaW9uIGZhaWxlZFxuIik7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgInJlcXVlc3RfbWVtX3JlZ2lvbiBmYWlsZWRcbiIpOwogCQlyZXQgPSAtRUJVU1k7CiAJCWdvdG8gYmFpbDsKIAl9CiAKIAlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihwZGV2LT5yZXNvdXJjZVsxXS5zdGFydCwKIAkJcGRldi0+cmVzb3VyY2VbMV0uZW5kIC0gcGRldi0+cmVzb3VyY2VbMV0uc3RhcnQgKzEsICJzMWQxM3h4eGZiIHJlZ3MiKSkgewotCQlkZXZfZGJnKGRldiwgInJlcXVlc3RfbWVtX3JlZ2lvbiBmYWlsZWRcbiIpOworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJyZXF1ZXN0X21lbV9yZWdpb24gZmFpbGVkXG4iKTsKIAkJcmV0ID0gLUVCVVNZOwogCQlnb3RvIGJhaWw7CiAJfQpAQCAtNjQwLDcgKzYzOCw3IEBACiAJCWdvdG8gYmFpbDsKIAl9CiAKLQlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgaW5mbyk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaW5mbyk7CiAKIAlwcmludGsoS0VSTl9JTkZPICJmYiVkOiAlcyBmcmFtZSBidWZmZXIgZGV2aWNlXG4iLAogCSAgICAgICBpbmZvLT5ub2RlLCBpbmZvLT5maXguaWQpOwpAQCAtNjQ4LDE1ICs2NDYsMTUgQEAKIAlyZXR1cm4gMDsKIAogYmFpbDoKLQlzMWQxM3h4eGZiX3JlbW92ZShkZXYpOworCXMxZDEzeHh4ZmJfcmVtb3ZlKHBkZXYpOwogCXJldHVybiByZXQ7CiAKIH0KIAogI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBzMWQxM3h4eGZiX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHMxZDEzeHh4ZmJfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgczFkMTN4eHhmYl9wYXIgKnMxZGZiID0gaW5mby0+cGFyOwogCXN0cnVjdCBzMWQxM3h4eGZiX3BkYXRhICpwZGF0YSA9IE5VTEw7CiAKQEAgLTY2NCw4ICs2NjIsOCBAQAogCWxjZF9lbmFibGUoczFkZmIsIDApOwogCWNydF9lbmFibGUoczFkZmIsIDApOwogCi0JaWYgKGRldi0+cGxhdGZvcm1fZGF0YSkKLQkJcGRhdGEgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisJaWYgKGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEpCisJCXBkYXRhID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAogI2lmIDAKIAlpZiAoIXMxZGZiLT5kaXNwX3NhdmUpCkBAIC03MDEsOSArNjk5LDkgQEAKIAkJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgczFkMTN4eHhmYl9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBzMWQxM3h4eGZiX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGZiX2luZm8gKmluZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IHMxZDEzeHh4ZmJfcGFyICpzMWRmYiA9IGluZm8tPnBhcjsKIAlzdHJ1Y3QgczFkMTN4eHhmYl9wZGF0YSAqcGRhdGEgPSBOVUxMOwogCkBAIC03MTQsOCArNzEyLDggQEAKIAl3aGlsZSAoKHMxZDEzeHh4ZmJfcmVhZHJlZyhzMWRmYiwgUzFEUkVHX1BTX1NUQVRVUykgJiAweDAxKSkKIAkJdWRlbGF5KDEwKTsKIAotCWlmIChkZXYtPnBsYXRmb3JtX2RhdGEpCi0JCXBkYXRhID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCWlmIChkZXYtPmRldi5wbGF0Zm9ybV9kYXRhKQorCQlwZGF0YSA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAKIAlpZiAoczFkZmItPnJlZ3Nfc2F2ZSkgewogCQkvKiB3aWxsIHdyaXRlIFJPIHJlZ3MsICpzaG91bGQqIGdldCBhd2F5IHdpdGggaXQgOikgKi8KQEAgLTc0MSwxNSArNzM5LDE2IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX1BNICovCiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBzMWQxM3h4eGZiX2RyaXZlciA9IHsKLQkubmFtZQkJPSBTMURfREVWSUNFTkFNRSwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHMxZDEzeHh4ZmJfZHJpdmVyID0gewogCS5wcm9iZQkJPSBzMWQxM3h4eGZiX3Byb2JlLAogCS5yZW1vdmUJCT0gczFkMTN4eHhmYl9yZW1vdmUsCiAjaWZkZWYgQ09ORklHX1BNCiAJLnN1c3BlbmQJPSBzMWQxM3h4eGZiX3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBzMWQxM3h4eGZiX3Jlc3VtZQorCS5yZXN1bWUJCT0gczFkMTN4eHhmYl9yZXN1bWUsCiAjZW5kaWYKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSBTMURfREVWSUNFTkFNRSwKKwl9LAogfTsKIAogCkBAIC03NTksMTQgKzc1OCwxNCBAQAogCWlmIChmYl9nZXRfb3B0aW9ucygiczFkMTN4eHhmYiIsIE5VTEwpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJnMxZDEzeHh4ZmJfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzMWQxM3h4eGZiX2RyaXZlcik7CiB9CiAKIAogc3RhdGljIHZvaWQgX19leGl0CiBzMWQxM3h4eGZiX2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmczFkMTN4eHhmYl9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzMWQxM3h4eGZiX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KHMxZDEzeHh4ZmJfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3MzYzI0MTBmYi5jIGIvZHJpdmVycy92aWRlby9zM2MyNDEwZmIuYwppbmRleCA4NTVhNjc3Li5jZTZlNzQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3MzYzI0MTBmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vczNjMjQxMGZiLmMKQEAgLTYzNCwxOSArNjM0LDE4IEBACiAKIHN0YXRpYyBjaGFyIGRyaXZlcl9uYW1lW109InMzYzI0MTBmYiI7CiAKLWludCBfX2luaXQgczNjMjQxMGZiX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK2ludCBfX2luaXQgczNjMjQxMGZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHMzYzI0MTBmYl9pbmZvICppbmZvOwogCXN0cnVjdCBmYl9pbmZvCSAgICpmYmluZm87Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXN0cnVjdCBzM2MyNDEwZmJfaHcgKm1yZWdzOwogCWludCByZXQ7CiAJaW50IGlycTsKIAlpbnQgaTsKIAotCW1hY2hfaW5mbyA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKwltYWNoX2luZm8gPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlpZiAobWFjaF9pbmZvID09IE5VTEwpIHsKLQkJZGV2X2VycihkZXYsIm5vIHBsYXRmb3JtIGRhdGEgZm9yIGxjZCwgY2Fubm90IGF0dGFjaFxuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwibm8gcGxhdGZvcm0gZGF0YSBmb3IgbGNkLCBjYW5ub3QgYXR0YWNoXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC02NTQsMTEgKzY1MywxMSBAQAogCiAJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKIAlpZiAoaXJxIDwgMCkgewotCQlkZXZfZXJyKGRldiwgIm5vIGlycSBmb3IgZGV2aWNlXG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gaXJxIGZvciBkZXZpY2VcbiIpOwogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQlmYmluZm8gPSBmcmFtZWJ1ZmZlcl9hbGxvYyhzaXplb2Yoc3RydWN0IHMzYzI0MTBmYl9pbmZvKSwgZGV2KTsKKwlmYmluZm8gPSBmcmFtZWJ1ZmZlcl9hbGxvYyhzaXplb2Yoc3RydWN0IHMzYzI0MTBmYl9pbmZvKSwgJnBkZXYtPmRldik7CiAJaWYgKCFmYmluZm8pIHsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQpAQCAtNjY2LDcgKzY2NSw3IEBACiAKIAlpbmZvID0gZmJpbmZvLT5wYXI7CiAJaW5mby0+ZmIgPSBmYmluZm87Ci0JZGV2X3NldF9kcnZkYXRhKGRldiwgZmJpbmZvKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBmYmluZm8pOwogCiAJczNjMjQxMGZiX2luaXRfcmVnaXN0ZXJzKGluZm8pOwogCkBAIC02NzYsNyArNjc1LDcgQEAKIAogCW1lbWNweSgmaW5mby0+cmVncywgJm1hY2hfaW5mby0+cmVncywgc2l6ZW9mKGluZm8tPnJlZ3MpKTsKIAotCWluZm8tPm1hY2hfaW5mbwkJICAgID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCWluZm8tPm1hY2hfaW5mbwkJICAgID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAKIAlmYmluZm8tPmZpeC50eXBlCSAgICA9IEZCX1RZUEVfUEFDS0VEX1BJWEVMUzsKIAlmYmluZm8tPmZpeC50eXBlX2F1eAkgICAgPSAwOwpAQCAtNzM1LDcgKzczNCw3IEBACiAKIAlyZXQgPSByZXF1ZXN0X2lycShpcnEsIHMzYzI0MTBmYl9pcnEsIFNBX0lOVEVSUlVQVCwgcGRldi0+bmFtZSwgaW5mbyk7CiAJaWYgKHJldCkgewotCQlkZXZfZXJyKGRldiwgImNhbm5vdCBnZXQgaXJxICVkIC0gZXJyICVkXG4iLCBpcnEsIHJldCk7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCBnZXQgaXJxICVkIC0gZXJyICVkXG4iLCBpcnEsIHJldCk7CiAJCXJldCA9IC1FQlVTWTsKIAkJZ290byByZWxlYXNlX21lbTsKIAl9CkBAIC03NzMsNyArNzcyLDcgQEAKIAl9CiAKIAkvKiBjcmVhdGUgZGV2aWNlIGZpbGVzICovCi0JZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2RlYnVnKTsKKwlkZXZpY2VfY3JlYXRlX2ZpbGUoJnBkZXYtPmRldiwgJmRldl9hdHRyX2RlYnVnKTsKIAogCXByaW50ayhLRVJOX0lORk8gImZiJWQ6ICVzIGZyYW1lIGJ1ZmZlciBkZXZpY2VcbiIsCiAJCWZiaW5mby0+bm9kZSwgZmJpbmZvLT5maXguaWQpOwpAQCAtODE2LDEwICs4MTUsOSBAQAogLyoKICAqICBDbGVhbnVwCiAgKi8KLXN0YXRpYyBpbnQgczNjMjQxMGZiX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHMzYzI0MTBmYl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7Ci0Jc3RydWN0IGZiX2luZm8JICAgKmZiaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBmYl9pbmZvCSAgICpmYmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgczNjMjQxMGZiX2luZm8gKmluZm8gPSBmYmluZm8tPnBhcjsKIAlpbnQgaXJxOwogCkBAIC04NDcsOSArODQ1LDkgQEAKIAogLyogc3VzcGVuZCBhbmQgcmVzdW1lIHN1cHBvcnQgZm9yIHRoZSBsY2QgY29udHJvbGxlciAqLwogCi1zdGF0aWMgaW50IHMzYzI0MTBmYl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBzM2MyNDEwZmJfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlzdHJ1Y3QgZmJfaW5mbwkgICAqZmJpbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGZiX2luZm8JICAgKmZiaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IHMzYzI0MTBmYl9pbmZvICppbmZvID0gZmJpbmZvLT5wYXI7CiAKIAlzM2MyNDEwZmJfc3RvcF9sY2QoKTsKQEAgLTg2NCw5ICs4NjIsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHMzYzI0MTBmYl9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBzM2MyNDEwZmJfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgZmJfaW5mbwkgICAqZmJpbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGZiX2luZm8JICAgKmZiaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IHMzYzI0MTBmYl9pbmZvICppbmZvID0gZmJpbmZvLT5wYXI7CiAKIAljbGtfZW5hYmxlKGluZm8tPmNsayk7CkBAIC04ODIsMjQgKzg4MCwyNSBAQAogI2RlZmluZSBzM2MyNDEwZmJfcmVzdW1lICBOVUxMCiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHMzYzI0MTBmYl9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gInMzYzI0MTAtbGNkIiwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzM2MyNDEwZmJfZHJpdmVyID0gewogCS5wcm9iZQkJPSBzM2MyNDEwZmJfcHJvYmUsCisJLnJlbW92ZQkJPSBzM2MyNDEwZmJfcmVtb3ZlLAogCS5zdXNwZW5kCT0gczNjMjQxMGZiX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBzM2MyNDEwZmJfcmVzdW1lLAotCS5yZW1vdmUJCT0gczNjMjQxMGZiX3JlbW92ZQorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJzM2MyNDEwLWxjZCIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCiB9OwogCiBpbnQgX19kZXZpbml0IHMzYzI0MTBmYl9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmczNjMjQxMGZiX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmczNjMjQxMGZiX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBzM2MyNDEwZmJfY2xlYW51cCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZzM2MyNDEwZmJfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmczNjMjQxMGZiX2RyaXZlcik7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zYTExMDBmYi5jIGIvZHJpdmVycy92aWRlby9zYTExMDBmYi5jCmluZGV4IGE1MTg0NTcuLjJlYTEzNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vc2ExMTAwZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3NhMTEwMGZiLmMKQEAgLTEzMDgsMTcgKzEzMDgsMTcgQEAKICAqIFBvd2VyIG1hbmFnZW1lbnQgaG9va3MuICBOb3RlIHRoYXQgd2Ugd29uJ3QgYmUgY2FsbGVkIGZyb20gSVJRIGNvbnRleHQsCiAgKiB1bmxpa2UgdGhlIGJsYW5rIGZ1bmN0aW9ucyBhYm92ZSwgc28gd2UgbWF5IHNsZWVwLgogICovCi1zdGF0aWMgaW50IHNhMTEwMGZiX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHNhMTEwMGZiX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0Jc3RydWN0IHNhMTEwMGZiX2luZm8gKmZiaSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBzYTExMDBmYl9pbmZvICpmYmkgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJc2V0X2N0cmxyX3N0YXRlKGZiaSwgQ19ESVNBQkxFX1BNKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzYTExMDBmYl9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBzYTExMDBmYl9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBzYTExMDBmYl9pbmZvICpmYmkgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgc2ExMTAwZmJfaW5mbyAqZmJpID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAogCXNldF9jdHJscl9zdGF0ZShmYmksIENfRU5BQkxFX1BNKTsKIAlyZXR1cm4gMDsKQEAgLTE0NTIsNyArMTQ1Miw3IEBACiAJcmV0dXJuIGZiaTsKIH0KIAotc3RhdGljIGludCBfX2luaXQgc2ExMTAwZmJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBfX2luaXQgc2ExMTAwZmJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc2ExMTAwZmJfaW5mbyAqZmJpOwogCWludCByZXQ7CkBAIC0xNDYwLDcgKzE0NjAsNyBAQAogCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKDB4YjAxMDAwMDAsIDB4MTAwMDAsICJMQ0QiKSkKIAkJcmV0dXJuIC1FQlVTWTsKIAotCWZiaSA9IHNhMTEwMGZiX2luaXRfZmJpbmZvKGRldik7CisJZmJpID0gc2ExMTAwZmJfaW5pdF9mYmluZm8oJnBkZXYtPmRldik7CiAJcmV0ID0gLUVOT01FTTsKIAlpZiAoIWZiaSkKIAkJZ290byBmYWlsZWQ7CkBAIC0xNDg4LDcgKzE0ODgsNyBAQAogCSAqLwogCXNhMTEwMGZiX2NoZWNrX3ZhcigmZmJpLT5mYi52YXIsICZmYmktPmZiKTsKIAotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGZiaSk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZmJpKTsKIAogCXJldCA9IHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCZmYmktPmZiKTsKIAlpZiAocmV0IDwgMCkKQEAgLTE1MDUsMTggKzE1MDUsMTkgQEAKIAlyZXR1cm4gMDsKIAogZmFpbGVkOgotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCWtmcmVlKGZiaSk7CiAJcmVsZWFzZV9tZW1fcmVnaW9uKDB4YjAxMDAwMDAsIDB4MTAwMDApOwogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBzYTExMDBmYl9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gInNhMTF4MC1mYiIsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzYTExMDBmYl9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IHNhMTEwMGZiX3Byb2JlLAogCS5zdXNwZW5kCT0gc2ExMTAwZmJfc3VzcGVuZCwKIAkucmVzdW1lCQk9IHNhMTEwMGZiX3Jlc3VtZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAic2ExMXgwLWZiIiwKKwl9LAogfTsKIAogaW50IF9faW5pdCBzYTExMDBmYl9pbml0KHZvaWQpCkBAIC0xNTI0LDcgKzE1MjUsNyBAQAogCWlmIChmYl9nZXRfb3B0aW9ucygic2ExMTAwZmIiLCBOVUxMKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZzYTExMDBmYl9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnNhMTEwMGZiX2RyaXZlcik7CiB9CiAKIGludCBfX2luaXQgc2ExMTAwZmJfc2V0dXAoY2hhciAqb3B0aW9ucykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vc2F2YWdlL3NhdmFnZWZiX2RyaXZlci5jIGIvZHJpdmVycy92aWRlby9zYXZhZ2Uvc2F2YWdlZmJfZHJpdmVyLmMKaW5kZXggZjBkZmIzNS4uMDllMmYyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zYXZhZ2Uvc2F2YWdlZmJfZHJpdmVyLmMKKysrIGIvZHJpdmVycy92aWRlby9zYXZhZ2Uvc2F2YWdlZmJfZHJpdmVyLmMKQEAgLTEzMTUsMTAgKzEzMTUsMTQgQEAKIAlpbmZvLT5maXgubGluZV9sZW5ndGggPSBpbmZvLT52YXIueHJlc192aXJ0dWFsICoKIAkJaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsIC8gODsKIAotCWlmIChpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwgPT0gOCkKKwlpZiAoaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsID09IDgpIHsKIAkJaW5mby0+Zml4LnZpc3VhbCAgICAgID0gRkJfVklTVUFMX1BTRVVET0NPTE9SOwotCWVsc2UKKwkJaW5mby0+Zml4LnhwYW5zdGVwICAgID0gNDsKKwl9IGVsc2UgewogCQlpbmZvLT5maXgudmlzdWFsICAgICAgPSBGQl9WSVNVQUxfVFJVRUNPTE9SOworCQlpbmZvLT5maXgueHBhbnN0ZXAgICAgPSAyOworCX0KKwogfQogCiAjaWYgZGVmaW5lZChDT05GSUdfRkJfU0FWQUdFX0FDQ0VMKQpAQCAtMTM2Myw3ICsxMzY3LDYgQEAKIAlwYXItPm1pbkNsb2NrID0gMTAwMDA7CiAKIAlzYXZhZ2VmYl9zZXRfcGFyX2ludCAocGFyKTsKLQlzYXZhZ2VmYl91cGRhdGVfc3RhcnQgKHBhciwgdmFyKTsKIAlmYl9zZXRfY21hcCAoJmluZm8tPmNtYXAsIGluZm8pOwogCXNhdmFnZWZiX3NldF9maXgoaW5mbyk7CiAJc2F2YWdlZmJfc2V0X2NsaXAoaW5mbyk7CkBAIC0xODczLDcgKzE4NzYsNiBAQAogCiAJaW5mby0+Zml4LnR5cGUJICAgPSBGQl9UWVBFX1BBQ0tFRF9QSVhFTFM7CiAJaW5mby0+Zml4LnR5cGVfYXV4CSAgID0gMDsKLQlpbmZvLT5maXgueHBhbnN0ZXAJICAgPSAyOwogCWluZm8tPmZpeC55cGFuc3RlcAkgICA9IDE7CiAJaW5mby0+Zml4Lnl3cmFwc3RlcCAgID0gMDsKIAlpbmZvLT5maXguYWNjZWwgICAgICAgPSBpZC0+ZHJpdmVyX2RhdGE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3NnaXZ3ZmIuYyBiL2RyaXZlcnMvdmlkZW8vc2dpdndmYi5jCmluZGV4IDJlODc2OWQuLjcwNTQ2NjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vc2dpdndmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vc2dpdndmYi5jCkBAIC03NTAsOSArNzUwLDggQEAKIC8qCiAgKiAgSW5pdGlhbGlzYXRpb24KICAqLwotc3RhdGljIGludCBfX2luaXQgc2dpdndmYl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgaW50IF9faW5pdCBzZ2l2d2ZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2aWNlKTsKIAlzdHJ1Y3Qgc2dpdndfcGFyICpwYXI7CiAJc3RydWN0IGZiX2luZm8gKmluZm87CiAJY2hhciAqbW9uaXRvcjsKQEAgLTgxMyw3ICs4MTIsNyBAQAogCQlnb3RvIGZhaWxfcmVnaXN0ZXJfZnJhbWVidWZmZXI7CiAJfQogCi0JZGV2X3NldF9kcnZkYXRhKCZkZXYtPmRldiwgaW5mbyk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBpbmZvKTsKIAogCXByaW50ayhLRVJOX0lORk8gImZiJWQ6IFNHSSBEQkUgZnJhbWUgYnVmZmVyIGRldmljZSwgdXNpbmcgJWxkSyBvZiB2aWRlbyBtZW1vcnkgYXQgJSNseFxuIiwgICAgICAKIAkJaW5mby0+bm9kZSwgc2dpdndmYl9tZW1fc2l6ZSA+PiAxMCwgc2dpdndmYl9tZW1fcGh5cyk7CkBAIC04MzEsOSArODMwLDkgQEAKIAlyZXR1cm4gLUVOWElPOwogfQogCi1zdGF0aWMgaW50IHNnaXZ3ZmJfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKK3N0YXRpYyBpbnQgc2dpdndmYl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBmYl9pbmZvICppbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldmljZSk7CisJc3RydWN0IGZiX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJaWYgKGluZm8pIHsKIAkJc3RydWN0IHNnaXZ3X3BhciAqcGFyID0gaW5mby0+cGFyOwpAQCAtODQ3LDExICs4NDYsMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHNnaXZ3ZmJfZHJpdmVyID0gewotCS5uYW1lCT0gInNnaXZ3ZmIiLAotCS5idXMJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzZ2l2d2ZiX2RyaXZlciA9IHsKIAkucHJvYmUJPSBzZ2l2d2ZiX3Byb2JlLAogCS5yZW1vdmUJPSBzZ2l2d2ZiX3JlbW92ZSwKKwkuZHJpdmVyCT0geworCQkubmFtZQk9ICJzZ2l2d2ZiIiwKKwl9LAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNnaXZ3ZmJfZGV2aWNlOwpAQCAtODY3LDcgKzg2Nyw3IEBACiAJCXJldHVybiAtRU5PREVWOwogCXNnaXZ3ZmJfc2V0dXAob3B0aW9uKTsKICNlbmRpZgotCXJldCA9IGRyaXZlcl9yZWdpc3Rlcigmc2dpdndmYl9kcml2ZXIpOworCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc2dpdndmYl9kcml2ZXIpOwogCWlmICghcmV0KSB7CiAJCXNnaXZ3ZmJfZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJzZ2l2d2ZiIiwgMCk7CiAJCWlmIChzZ2l2d2ZiX2RldmljZSkgewpAQCAtODc1LDcgKzg3NSw3IEBACiAJCX0gZWxzZQogCQkJcmV0ID0gLUVOT01FTTsKIAkJaWYgKHJldCkgewotCQkJZHJpdmVyX3VucmVnaXN0ZXIoJnNnaXZ3ZmJfZHJpdmVyKTsKKwkJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzZ2l2d2ZiX2RyaXZlcik7CiAJCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KHNnaXZ3ZmJfZGV2aWNlKTsKIAkJfQogCX0KQEAgLTg5MCw3ICs4OTAsNyBAQAogc3RhdGljIHZvaWQgX19leGl0IHNnaXZ3ZmJfZXhpdCh2b2lkKQogewogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHNnaXZ3ZmJfZGV2aWNlKTsKLQlkcml2ZXJfdW5yZWdpc3Rlcigmc2dpdndmYl9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzZ2l2d2ZiX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9leGl0KHNnaXZ3ZmJfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3Zlc2FmYi5jIGIvZHJpdmVycy92aWRlby92ZXNhZmIuYwppbmRleCBlMjVlYWUxLi4yYzNhYTJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3Zlc2FmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vdmVzYWZiLmMKQEAgLTI0NSw5ICsyNDUsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCB2ZXNhZmJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2aWNlKQorc3RhdGljIGludCBfX2luaXQgdmVzYWZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2aWNlKTsKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKIAlpbnQgaSwgZXJyOwogCXVuc2lnbmVkIGludCBzaXplX3Ztb2RlOwpAQCAtNDgwLDEwICs0NzksMTEgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgdmVzYWZiX2RyaXZlciA9IHsKLQkubmFtZQk9ICJ2ZXNhZmIiLAotCS5idXMJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB2ZXNhZmJfZHJpdmVyID0gewogCS5wcm9iZQk9IHZlc2FmYl9wcm9iZSwKKwkuZHJpdmVyCT0geworCQkubmFtZQk9ICJ2ZXNhZmIiLAorCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB2ZXNhZmJfZGV2aWNlID0gewpAQCAtNDk4LDEyICs0OTgsMTIgQEAKIAkvKiBpZ25vcmUgZXJyb3IgcmV0dXJuIG9mIGZiX2dldF9vcHRpb25zICovCiAJZmJfZ2V0X29wdGlvbnMoInZlc2FmYiIsICZvcHRpb24pOwogCXZlc2FmYl9zZXR1cChvcHRpb24pOwotCXJldCA9IGRyaXZlcl9yZWdpc3RlcigmdmVzYWZiX2RyaXZlcik7CisJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ2ZXNhZmJfZHJpdmVyKTsKIAogCWlmICghcmV0KSB7CiAJCXJldCA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmdmVzYWZiX2RldmljZSk7CiAJCWlmIChyZXQpCi0JCQlkcml2ZXJfdW5yZWdpc3RlcigmdmVzYWZiX2RyaXZlcik7CisJCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdmVzYWZiX2RyaXZlcik7CiAJfQogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZmYi5jIGIvZHJpdmVycy92aWRlby92ZmIuYwppbmRleCA4Nzk0ZGM1Li5mZmExYWQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3ZmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vdmZiLmMKQEAgLTQwMyw5ICs0MDMsOCBAQAogCS8vIFRoaXMgaXMgY2FsbGVkIHdoZW4gdGhlIHJlZmVyZW5jZSBjb3VudCBnb2VzIHRvIHplcm8uCiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IHZmYl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgaW50IF9faW5pdCB2ZmJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXZpY2UpOwogCXN0cnVjdCBmYl9pbmZvICppbmZvOwogCWludCByZXR2YWwgPSAtRU5PTUVNOwogCkBAIC00NDcsNyArNDQ2LDcgQEAKIAlyZXR2YWwgPSByZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKTsKIAlpZiAocmV0dmFsIDwgMCkKIAkJZ290byBlcnIyOwotCWRldl9zZXRfZHJ2ZGF0YSgmZGV2LT5kZXYsIGluZm8pOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgaW5mbyk7CiAKIAlwcmludGsoS0VSTl9JTkZPCiAJICAgICAgICJmYiVkOiBWaXJ0dWFsIGZyYW1lIGJ1ZmZlciBkZXZpY2UsIHVzaW5nICVsZEsgb2YgdmlkZW8gbWVtb3J5XG4iLApAQCAtNDYyLDkgKzQ2MSw5IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAotc3RhdGljIGludCB2ZmJfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKK3N0YXRpYyBpbnQgdmZiX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGZiX2luZm8gKmluZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2aWNlKTsKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKIAlpZiAoaW5mbykgewogCQl1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGluZm8pOwpAQCAtNDc0LDExICs0NzMsMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHZmYl9kcml2ZXIgPSB7Ci0JLm5hbWUJPSAidmZiIiwKLQkuYnVzCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdmZiX2RyaXZlciA9IHsKIAkucHJvYmUJPSB2ZmJfcHJvYmUsCiAJLnJlbW92ZSA9IHZmYl9yZW1vdmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSAidmZiIiwKKwl9LAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdmZiX2RldmljZSA9IHsKQEAgLTUwNCwxMiArNTA0LDEyIEBACiAJaWYgKCF2ZmJfZW5hYmxlKQogCQlyZXR1cm4gLUVOWElPOwogCi0JcmV0ID0gZHJpdmVyX3JlZ2lzdGVyKCZ2ZmJfZHJpdmVyKTsKKwlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnZmYl9kcml2ZXIpOwogCiAJaWYgKCFyZXQpIHsKIAkJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ2ZmJfZGV2aWNlKTsKIAkJaWYgKHJldCkKLQkJCWRyaXZlcl91bnJlZ2lzdGVyKCZ2ZmJfZHJpdmVyKTsKKwkJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ2ZmJfZHJpdmVyKTsKIAl9CiAJcmV0dXJuIHJldDsKIH0KQEAgLTUyMCw3ICs1MjAsNyBAQAogc3RhdGljIHZvaWQgX19leGl0IHZmYl9leGl0KHZvaWQpCiB7CiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoJnZmYl9kZXZpY2UpOwotCWRyaXZlcl91bnJlZ2lzdGVyKCZ2ZmJfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdmZiX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9leGl0KHZmYl9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmdhMTZmYi5jIGIvZHJpdmVycy92aWRlby92Z2ExNmZiLmMKaW5kZXggNjkwYmI2Zi4uMjI2YWU4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby92Z2ExNmZiLmMKKysrIGIvZHJpdmVycy92aWRlby92Z2ExNmZiLmMKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9mYi5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPHZpZGVvL3ZnYS5oPgpAQCAtNTEsMzUgKzUyLDMzIEBACiAgKiBjYXJkIHBhcmFtZXRlcnMKICAqLwogCi1zdGF0aWMgc3RydWN0IGZiX2luZm8gdmdhMTZmYjsgCi0KLXN0YXRpYyBzdHJ1Y3QgdmdhMTZmYl9wYXIgeworc3RydWN0IHZnYTE2ZmJfcGFyIHsKIAkvKiBzdHJ1Y3R1cmUgaG9sZGluZyBvcmlnaW5hbCBWR0EgcmVnaXN0ZXIgc2V0dGluZ3Mgd2hlbiB0aGUKICAgICAgICAgICAgc2NyZWVuIGlzIGJsYW5rZWQgKi8KIAlzdHJ1Y3QgewotCQl1bnNpZ25lZCBjaGFyCVNlcUN0cmxJbmRleDsJCS8qIFNlcXVlbmNlciBJbmRleCByZWcuICAgKi8KLQkJdW5zaWduZWQgY2hhcglDcnRDdHJsSW5kZXg7CQkvKiBDUlQtQ29udHIuIEluZGV4IHJlZy4gICovCi0JCXVuc2lnbmVkIGNoYXIJQ3J0TWlzY0lPOwkJLyogTWlzY2VsbGFuZW91cyByZWdpc3RlciAqLwotCQl1bnNpZ25lZCBjaGFyCUhvcml6b250YWxUb3RhbDsJLyogQ1JULUNvbnRyb2xsZXI6MDBoICovCi0JCXVuc2lnbmVkIGNoYXIJSG9yaXpEaXNwbGF5RW5kOwkvKiBDUlQtQ29udHJvbGxlcjowMWggKi8KLQkJdW5zaWduZWQgY2hhcglTdGFydEhvcml6UmV0cmFjZTsJLyogQ1JULUNvbnRyb2xsZXI6MDRoICovCi0JCXVuc2lnbmVkIGNoYXIJRW5kSG9yaXpSZXRyYWNlOwkvKiBDUlQtQ29udHJvbGxlcjowNWggKi8KLQkJdW5zaWduZWQgY2hhcglPdmVyZmxvdzsJCS8qIENSVC1Db250cm9sbGVyOjA3aCAqLwotCQl1bnNpZ25lZCBjaGFyCVN0YXJ0VmVydFJldHJhY2U7CS8qIENSVC1Db250cm9sbGVyOjEwaCAqLwotCQl1bnNpZ25lZCBjaGFyCUVuZFZlcnRSZXRyYWNlOwkJLyogQ1JULUNvbnRyb2xsZXI6MTFoICovCi0JCXVuc2lnbmVkIGNoYXIJTW9kZUNvbnRyb2w7CQkvKiBDUlQtQ29udHJvbGxlcjoxN2ggKi8KLQkJdW5zaWduZWQgY2hhcglDbG9ja2luZ01vZGU7CQkvKiBTZXEtQ29udHJvbGxlcjowMWggKi8KKwkJdW5zaWduZWQgY2hhcglTZXFDdHJsSW5kZXg7CSAgLyogU2VxdWVuY2VyIEluZGV4IHJlZy4gICAqLworCQl1bnNpZ25lZCBjaGFyCUNydEN0cmxJbmRleDsJICAvKiBDUlQtQ29udHIuIEluZGV4IHJlZy4gICovCisJCXVuc2lnbmVkIGNoYXIJQ3J0TWlzY0lPOwkgIC8qIE1pc2NlbGxhbmVvdXMgcmVnaXN0ZXIgKi8KKwkJdW5zaWduZWQgY2hhcglIb3Jpem9udGFsVG90YWw7ICAvKiBDUlQtQ29udHJvbGxlcjowMGggKi8KKwkJdW5zaWduZWQgY2hhcglIb3JpekRpc3BsYXlFbmQ7ICAvKiBDUlQtQ29udHJvbGxlcjowMWggKi8KKwkJdW5zaWduZWQgY2hhcglTdGFydEhvcml6UmV0cmFjZTsvKiBDUlQtQ29udHJvbGxlcjowNGggKi8KKwkJdW5zaWduZWQgY2hhcglFbmRIb3JpelJldHJhY2U7ICAvKiBDUlQtQ29udHJvbGxlcjowNWggKi8KKwkJdW5zaWduZWQgY2hhcglPdmVyZmxvdzsJICAvKiBDUlQtQ29udHJvbGxlcjowN2ggKi8KKwkJdW5zaWduZWQgY2hhcglTdGFydFZlcnRSZXRyYWNlOyAvKiBDUlQtQ29udHJvbGxlcjoxMGggKi8KKwkJdW5zaWduZWQgY2hhcglFbmRWZXJ0UmV0cmFjZTsJICAvKiBDUlQtQ29udHJvbGxlcjoxMWggKi8KKwkJdW5zaWduZWQgY2hhcglNb2RlQ29udHJvbDsJICAvKiBDUlQtQ29udHJvbGxlcjoxN2ggKi8KKwkJdW5zaWduZWQgY2hhcglDbG9ja2luZ01vZGU7CSAgLyogU2VxLUNvbnRyb2xsZXI6MDFoICovCiAJfSB2Z2Ffc3RhdGU7CiAJc3RydWN0IHZnYXN0YXRlIHN0YXRlOwogCWF0b21pY190IHJlZl9jb3VudDsKIAlpbnQgcGFsZXR0ZV9ibGFua2VkLCB2ZXNhX2JsYW5rZWQsIG1vZGUsIGlzVkdBOwogCXU4IG1pc2MsIHBlbF9tc2ssIHZzcywgY2xrZGl2OwogCXU4IGNydGNbVkdBX0NSVF9DXTsKLX0gdmdhMTZfcGFyOworfTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gdmdhMTZmYl9kZWZpbmVkID0geworc3RhdGljIHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyB2Z2ExNmZiX2RlZmluZWQgX19pbml0ZGF0YSA9IHsKIAkueHJlcwkJPSA2NDAsCiAJLnlyZXMJCT0gNDgwLAogCS54cmVzX3ZpcnR1YWwJPSA2NDAsCkBAIC0yMDUsNyArMjA0LDcgQEAKIHN0YXRpYyB2b2lkIHZnYTE2ZmJfcGFuX3ZhcihzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgCiAJCQkgICAgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIpCiB7Ci0Jc3RydWN0IHZnYTE2ZmJfcGFyICpwYXIgPSAoc3RydWN0IHZnYTE2ZmJfcGFyICopIGluZm8tPnBhcjsKKwlzdHJ1Y3QgdmdhMTZmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKIAl1MzIgeG9mZnNldCwgcG9zOwogCiAJeG9mZnNldCA9IHZhci0+eG9mZnNldDsKQEAgLTMwMCw3ICsyOTksNyBAQAogCiBzdGF0aWMgaW50IHZnYTE2ZmJfb3BlbihzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgaW50IHVzZXIpCiB7Ci0Jc3RydWN0IHZnYTE2ZmJfcGFyICpwYXIgPSAoc3RydWN0IHZnYTE2ZmJfcGFyICopIGluZm8tPnBhcjsKKwlzdHJ1Y3QgdmdhMTZmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKIAlpbnQgY250ID0gYXRvbWljX3JlYWQoJnBhci0+cmVmX2NvdW50KTsKIAogCWlmICghY250KSB7CkBAIC0zMTUsNyArMzE0LDcgQEAKIAogc3RhdGljIGludCB2Z2ExNmZiX3JlbGVhc2Uoc3RydWN0IGZiX2luZm8gKmluZm8sIGludCB1c2VyKQogewotCXN0cnVjdCB2Z2ExNmZiX3BhciAqcGFyID0gKHN0cnVjdCB2Z2ExNmZiX3BhciAqKSBpbmZvLT5wYXI7CisJc3RydWN0IHZnYTE2ZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7CiAJaW50IGNudCA9IGF0b21pY19yZWFkKCZwYXItPnJlZl9jb3VudCk7CiAKIAlpZiAoIWNudCkKQEAgLTMzMCw3ICszMjksNyBAQAogc3RhdGljIGludCB2Z2ExNmZiX2NoZWNrX3ZhcihzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwKIAkJCSAgICAgc3RydWN0IGZiX2luZm8gKmluZm8pCiB7Ci0Jc3RydWN0IHZnYTE2ZmJfcGFyICpwYXIgPSAoc3RydWN0IHZnYTE2ZmJfcGFyICopIGluZm8tPnBhcjsKKwlzdHJ1Y3QgdmdhMTZmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKIAl1MzIgeHJlcywgcmlnaHQsIGhzbGVuLCBsZWZ0LCB4dG90YWw7CiAJdTMyIHlyZXMsIGxvd2VyLCB2c2xlbiwgdXBwZXIsIHl0b3RhbDsKIAl1MzIgdnhyZXMsIHhvZmZzZXQsIHZ5cmVzLCB5b2Zmc2V0OwpAQCAtNTM1LDcgKzUzNCw3IEBACiAKIHN0YXRpYyBpbnQgdmdhMTZmYl9zZXRfcGFyKHN0cnVjdCBmYl9pbmZvICppbmZvKQogewotCXN0cnVjdCB2Z2ExNmZiX3BhciAqcGFyID0gKHN0cnVjdCB2Z2ExNmZiX3BhciAqKSBpbmZvLT5wYXI7CisJc3RydWN0IHZnYTE2ZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7CiAJdTggZ2RjW1ZHQV9HRlhfQ107CiAJdTggc2VxW1ZHQV9TRVFfQ107CiAJdTggYXRjW1ZHQV9BVFRfQ107CkBAIC02NzcsNyArNjc2LDcgQEAKIAkJCSAgICAgdW5zaWduZWQgYmx1ZSwgdW5zaWduZWQgdHJhbnNwLAogCQkJICAgICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKLQlzdHJ1Y3QgdmdhMTZmYl9wYXIgKnBhciA9IChzdHJ1Y3QgdmdhMTZmYl9wYXIgKikgaW5mby0+cGFyOworCXN0cnVjdCB2Z2ExNmZiX3BhciAqcGFyID0gaW5mby0+cGFyOwogCWludCBncmF5OwogCiAJLyoKQEAgLTg1MCw3ICs4NDksNyBAQAogLyogMCB1bmJsYW5rLCAxIGJsYW5rLCAyIG5vIHZzeW5jLCAzIG5vIGhzeW5jLCA0IG9mZiAqLwogc3RhdGljIGludCB2Z2ExNmZiX2JsYW5rKGludCBibGFuaywgc3RydWN0IGZiX2luZm8gKmluZm8pCiB7Ci0Jc3RydWN0IHZnYTE2ZmJfcGFyICpwYXIgPSAoc3RydWN0IHZnYTE2ZmJfcGFyICopIGluZm8tPnBhcjsKKwlzdHJ1Y3QgdmdhMTZmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKIAogCXN3aXRjaCAoYmxhbmspIHsKIAljYXNlIEZCX0JMQU5LX1VOQkxBTks6CQkJCS8qIFVuYmxhbmsgKi8KQEAgLTEyMDEsNyArMTIwMCw3IEBACiB7CiAJY2hhciBfX2lvbWVtICp3aGVyZSA9IGluZm8tPnNjcmVlbl9iYXNlICsgKGltYWdlLT5keC84KSArCiAJCWltYWdlLT5keSAqIGluZm8tPmZpeC5saW5lX2xlbmd0aDsKLQlzdHJ1Y3QgdmdhMTZmYl9wYXIgKnBhciA9IChzdHJ1Y3QgdmdhMTZmYl9wYXIgKikgaW5mby0+cGFyOworCXN0cnVjdCB2Z2ExNmZiX3BhciAqcGFyID0gaW5mby0+cGFyOwogCWNoYXIgKmNkYXQgPSAoY2hhciAqKSBpbWFnZS0+ZGF0YTsKIAljaGFyIF9faW9tZW0gKmRzdDsKIAlpbnQgeCwgeTsKQEAgLTEyNjYsNyArMTI2NSw3IEBACiAJLyoKIAkgKiBEcmF3IGxvZ28gCiAJICovCi0Jc3RydWN0IHZnYTE2ZmJfcGFyICpwYXIgPSAoc3RydWN0IHZnYTE2ZmJfcGFyICopIGluZm8tPnBhcjsKKwlzdHJ1Y3QgdmdhMTZmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKIAljaGFyIF9faW9tZW0gKndoZXJlID0KIAkJaW5mby0+c2NyZWVuX2Jhc2UgKyBpbWFnZS0+ZHkgKiBpbmZvLT5maXgubGluZV9sZW5ndGggKwogCQlpbWFnZS0+ZHgvODsKQEAgLTEzNDMsOSArMTM0MiwxMTcgQEAKIH0KICNlbmRpZgogCitzdGF0aWMgaW50IF9faW5pdCB2Z2ExNmZiX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2aWNlKTsKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKKwlzdHJ1Y3QgdmdhMTZmYl9wYXIgKnBhcjsKKwlpbnQgaTsKKwlpbnQgcmV0ID0gMDsKKworCXByaW50ayhLRVJOX0RFQlVHICJ2Z2ExNmZiOiBpbml0aWFsaXppbmdcbiIpOworCWluZm8gPSBmcmFtZWJ1ZmZlcl9hbGxvYyhzaXplb2Yoc3RydWN0IHZnYTE2ZmJfcGFyKSwgJmRldi0+ZGV2KTsKKworCWlmICghaW5mbykgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycl9mYl9hbGxvYzsKKwl9CisKKwkvKiBYWFggc2hhcmUgVkdBX0ZCX1BIWVMgYW5kIEkvTyByZWdpb24gd2l0aCB2Z2Fjb24gYW5kIG90aGVycyAqLworCWluZm8tPnNjcmVlbl9iYXNlID0gKHZvaWQgX19pb21lbSAqKVZHQV9NQVBfTUVNKFZHQV9GQl9QSFlTKTsKKworCWlmICghaW5mby0+c2NyZWVuX2Jhc2UpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ2Z2ExNmZiOiB1bmFibGUgdG8gbWFwIGRldmljZVxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2lvcmVtYXA7CisJfQorCisJcHJpbnRrKEtFUk5fSU5GTyAidmdhMTZmYjogbWFwcGVkIHRvIDB4JXBcbiIsIGluZm8tPnNjcmVlbl9iYXNlKTsKKwlwYXIgPSBpbmZvLT5wYXI7CisKKwlwYXItPmlzVkdBID0gT1JJR19WSURFT19JU1ZHQTsKKwlwYXItPnBhbGV0dGVfYmxhbmtlZCA9IDA7CisJcGFyLT52ZXNhX2JsYW5rZWQgPSAwOworCisJaSA9IHBhci0+aXNWR0E/IDYgOiAyOworCQorCXZnYTE2ZmJfZGVmaW5lZC5yZWQubGVuZ3RoICAgPSBpOworCXZnYTE2ZmJfZGVmaW5lZC5ncmVlbi5sZW5ndGggPSBpOworCXZnYTE2ZmJfZGVmaW5lZC5ibHVlLmxlbmd0aCAgPSBpOwkKKworCS8qIG5hbWUgc2hvdWxkIG5vdCBkZXBlbmQgb24gRUdBL1ZHQSAqLworCWluZm8tPmZib3BzID0gJnZnYTE2ZmJfb3BzOworCWluZm8tPnZhciA9IHZnYTE2ZmJfZGVmaW5lZDsKKwlpbmZvLT5maXggPSB2Z2ExNmZiX2ZpeDsKKwlpbmZvLT5mbGFncyA9IEZCSU5GT19GTEFHX0RFRkFVTFQgfAorCQlGQklORk9fSFdBQ0NFTF9ZUEFOOworCisJaSA9IChpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwgPT0gOCkgPyAyNTYgOiAxNjsKKwlyZXQgPSBmYl9hbGxvY19jbWFwKCZpbmZvLT5jbWFwLCBpLCAwKTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX0VSUiAidmdhMTZmYjogdW5hYmxlIHRvIGFsbG9jYXRlIGNvbG9ybWFwXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfYWxsb2NfY21hcDsKKwl9CisKKwlpZiAodmdhMTZmYl9jaGVja192YXIoJmluZm8tPnZhciwgaW5mbykpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ2Z2ExNmZiOiB1bmFibGUgdG8gdmFsaWRhdGUgdmFyaWFibGVcbiIpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGVycl9jaGVja192YXI7CisJfQorCisJdmdhMTZmYl91cGRhdGVfZml4KGluZm8pOworCisJaWYgKHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGluZm8pIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgInZnYTE2ZmI6IHVuYWJsZSB0byByZWdpc3RlciBmcmFtZWJ1ZmZlclxuIik7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyX2NoZWNrX3ZhcjsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICJmYiVkOiAlcyBmcmFtZSBidWZmZXIgZGV2aWNlXG4iLAorCSAgICAgICBpbmZvLT5ub2RlLCBpbmZvLT5maXguaWQpOworCWRldl9zZXRfZHJ2ZGF0YShkZXZpY2UsIGluZm8pOworCisJcmV0dXJuIDA7CisKKyBlcnJfY2hlY2tfdmFyOgorCWZiX2RlYWxsb2NfY21hcCgmaW5mby0+Y21hcCk7CisgZXJyX2FsbG9jX2NtYXA6CisJaW91bm1hcChpbmZvLT5zY3JlZW5fYmFzZSk7CisgZXJyX2lvcmVtYXA6CisJZnJhbWVidWZmZXJfcmVsZWFzZShpbmZvKTsKKyBlcnJfZmJfYWxsb2M6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB2Z2ExNmZiX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCit7CisJc3RydWN0IGZiX2luZm8gKmluZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2aWNlKTsKKworCWlmIChpbmZvKSB7CisJCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIoaW5mbyk7CisJCWlvdW5tYXAoaW5mby0+c2NyZWVuX2Jhc2UpOworCQlmYl9kZWFsbG9jX2NtYXAoJmluZm8tPmNtYXApOworCS8qIFhYWCB1bnNoYXJlIFZHQSByZWdpb25zICovCisJCWZyYW1lYnVmZmVyX3JlbGVhc2UoaW5mbyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciB2Z2ExNmZiX2RyaXZlciA9IHsKKwkubmFtZSA9ICJ2Z2ExNmZiIiwKKwkuYnVzICA9ICZwbGF0Zm9ybV9idXNfdHlwZSwKKwkucHJvYmUgPSB2Z2ExNmZiX3Byb2JlLAorCS5yZW1vdmUgPSB2Z2ExNmZiX3JlbW92ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHZnYTE2ZmJfZGV2aWNlID0geworCS5uYW1lID0gInZnYTE2ZmIiLAorfTsKKwogc3RhdGljIGludCBfX2luaXQgdmdhMTZmYl9pbml0KHZvaWQpCiB7Ci0JaW50IGk7CiAJaW50IHJldDsKICNpZm5kZWYgTU9EVUxFCiAJY2hhciAqb3B0aW9uID0gTlVMTDsKQEAgLTEzNTUsNzcgKzE0NjIsMjEgQEAKIAogCXZnYTE2ZmJfc2V0dXAob3B0aW9uKTsKICNlbmRpZgotCXByaW50ayhLRVJOX0RFQlVHICJ2Z2ExNmZiOiBpbml0aWFsaXppbmdcbiIpOworCXJldCA9IGRyaXZlcl9yZWdpc3RlcigmdmdhMTZmYl9kcml2ZXIpOwogCi0JLyogWFhYIHNoYXJlIFZHQV9GQl9QSFlTIGFuZCBJL08gcmVnaW9uIHdpdGggdmdhY29uIGFuZCBvdGhlcnMgKi8KLQotCXZnYTE2ZmIuc2NyZWVuX2Jhc2UgPSAodm9pZCBfX2lvbWVtICopVkdBX01BUF9NRU0oVkdBX0ZCX1BIWVMpOwotCWlmICghdmdhMTZmYi5zY3JlZW5fYmFzZSkgewotCQlwcmludGsoS0VSTl9FUlIgInZnYTE2ZmI6IHVuYWJsZSB0byBtYXAgZGV2aWNlXG4iKTsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBlcnJfaW9yZW1hcDsKLQl9Ci0JcHJpbnRrKEtFUk5fSU5GTyAidmdhMTZmYjogbWFwcGVkIHRvIDB4JXBcbiIsIHZnYTE2ZmIuc2NyZWVuX2Jhc2UpOwotCi0JdmdhMTZfcGFyLmlzVkdBID0gT1JJR19WSURFT19JU1ZHQTsKLQl2Z2ExNl9wYXIucGFsZXR0ZV9ibGFua2VkID0gMDsKLQl2Z2ExNl9wYXIudmVzYV9ibGFua2VkID0gMDsKLQotCWkgPSB2Z2ExNl9wYXIuaXNWR0E/IDYgOiAyOwotCQotCXZnYTE2ZmJfZGVmaW5lZC5yZWQubGVuZ3RoICAgPSBpOwotCXZnYTE2ZmJfZGVmaW5lZC5ncmVlbi5sZW5ndGggPSBpOwotCXZnYTE2ZmJfZGVmaW5lZC5ibHVlLmxlbmd0aCAgPSBpOwkKLQotCS8qIG5hbWUgc2hvdWxkIG5vdCBkZXBlbmQgb24gRUdBL1ZHQSAqLwotCXZnYTE2ZmIuZmJvcHMgPSAmdmdhMTZmYl9vcHM7Ci0JdmdhMTZmYi52YXIgPSB2Z2ExNmZiX2RlZmluZWQ7Ci0JdmdhMTZmYi5maXggPSB2Z2ExNmZiX2ZpeDsKLQl2Z2ExNmZiLnBhciA9ICZ2Z2ExNl9wYXI7Ci0JdmdhMTZmYi5mbGFncyA9IEZCSU5GT19GTEFHX0RFRkFVTFQgfAotCQlGQklORk9fSFdBQ0NFTF9ZUEFOOwotCi0JaSA9ICh2Z2ExNmZiX2RlZmluZWQuYml0c19wZXJfcGl4ZWwgPT0gOCkgPyAyNTYgOiAxNjsKLQlyZXQgPSBmYl9hbGxvY19jbWFwKCZ2Z2ExNmZiLmNtYXAsIGksIDApOwotCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJ2Z2ExNmZiOiB1bmFibGUgdG8gYWxsb2NhdGUgY29sb3JtYXBcbiIpOwotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycl9hbGxvY19jbWFwOworCWlmICghcmV0KSB7CisJCXJldCA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmdmdhMTZmYl9kZXZpY2UpOworCQlpZiAocmV0KQorCQkJZHJpdmVyX3VucmVnaXN0ZXIoJnZnYTE2ZmJfZHJpdmVyKTsKIAl9CiAKLQlpZiAodmdhMTZmYl9jaGVja192YXIoJnZnYTE2ZmIudmFyLCAmdmdhMTZmYikpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJ2Z2ExNmZiOiB1bmFibGUgdG8gdmFsaWRhdGUgdmFyaWFibGVcbiIpOwotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIGVycl9jaGVja192YXI7Ci0JfQotCi0JdmdhMTZmYl91cGRhdGVfZml4KCZ2Z2ExNmZiKTsKLQotCWlmIChyZWdpc3Rlcl9mcmFtZWJ1ZmZlcigmdmdhMTZmYikgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAidmdhMTZmYjogdW5hYmxlIHRvIHJlZ2lzdGVyIGZyYW1lYnVmZmVyXG4iKTsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBlcnJfY2hlY2tfdmFyOwotCX0KLQotCXByaW50ayhLRVJOX0lORk8gImZiJWQ6ICVzIGZyYW1lIGJ1ZmZlciBkZXZpY2VcbiIsCi0JICAgICAgIHZnYTE2ZmIubm9kZSwgdmdhMTZmYi5maXguaWQpOwotCi0JcmV0dXJuIDA7Ci0KLSBlcnJfY2hlY2tfdmFyOgotCWZiX2RlYWxsb2NfY21hcCgmdmdhMTZmYi5jbWFwKTsKLSBlcnJfYWxsb2NfY21hcDoKLQlpb3VubWFwKHZnYTE2ZmIuc2NyZWVuX2Jhc2UpOwotIGVycl9pb3JlbWFwOgogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCB2Z2ExNmZiX2V4aXQodm9pZCkKIHsKLSAgICB1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCZ2Z2ExNmZiKTsKLSAgICBpb3VubWFwKHZnYTE2ZmIuc2NyZWVuX2Jhc2UpOwotICAgIGZiX2RlYWxsb2NfY21hcCgmdmdhMTZmYi5jbWFwKTsKLSAgICAvKiBYWFggdW5zaGFyZSBWR0EgcmVnaW9ucyAqLworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKCZ2Z2ExNmZiX2RldmljZSk7CisJZHJpdmVyX3VucmVnaXN0ZXIoJnZnYTE2ZmJfZHJpdmVyKTsKIH0KIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92Z2FzdGF0ZS5jIGIvZHJpdmVycy92aWRlby92Z2FzdGF0ZS5jCmluZGV4IGNhOTI5NDAuLmQ5ZTAxZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdmdhc3RhdGUuYworKysgYi9kcml2ZXJzL3ZpZGVvL3ZnYXN0YXRlLmMKQEAgLTQ4NSwxMSArNDg1LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmZGVmIE1PRFVMRQotaW50IGluaXRfbW9kdWxlKHZvaWQpIHsgcmV0dXJuIDA7IH07Ci12b2lkIGNsZWFudXBfbW9kdWxlKHZvaWQpIHt9OwotI2VuZGlmCi0KIEVYUE9SVF9TWU1CT0woc2F2ZV92Z2EpOwogRVhQT1JUX1NZTUJPTChyZXN0b3JlX3ZnYSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdzEwMGZiLmMgYi9kcml2ZXJzL3ZpZGVvL3cxMDBmYi5jCmluZGV4IDQ4ZTcwZjEuLmRhYTQ2MDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdzEwMGZiLmMKKysrIGIvZHJpdmVycy92aWRlby93MTAwZmIuYwpAQCAtNDM3LDkgKzQzNyw5IEBACiAJfQogfQogCi1zdGF0aWMgaW50IHcxMDBmYl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCB3MTAwZmJfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgdzEwMGZiX3BhciAqcGFyPWluZm8tPnBhcjsKIAlzdHJ1Y3QgdzEwMF90Z19pbmZvICp0ZyA9IHBhci0+bWFjaC0+dGc7CiAKQEAgLTQ1Miw5ICs0NTIsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHcxMDBmYl9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCB3MTAwZmJfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgdzEwMGZiX3BhciAqcGFyPWluZm8tPnBhcjsKIAlzdHJ1Y3QgdzEwMF90Z19pbmZvICp0ZyA9IHBhci0+bWFjaC0+dGc7CiAKQEAgLTQ3MywxMyArNDczLDEyIEBACiAjZW5kaWYKIAogCi1pbnQgX19pbml0IHcxMDBmYl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitpbnQgX19pbml0IHcxMDBmYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCWludCBlcnIgPSAtRUlPOwogCXN0cnVjdCB3MTAwZmJfbWFjaF9pbmZvICppbmY7CiAJc3RydWN0IGZiX2luZm8gKmluZm8gPSBOVUxMOwogCXN0cnVjdCB3MTAwZmJfcGFyICpwYXI7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXN0cnVjdCByZXNvdXJjZSAqbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAl1bnNpZ25lZCBpbnQgY2hpcF9pZDsKIApAQCAtNTIyLDkgKzUyMSw5IEBACiAJfQogCiAJcGFyID0gaW5mby0+cGFyOwotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGluZm8pOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGluZm8pOwogCi0JaW5mID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCWluZiA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXBhci0+Y2hpcF9pZCA9IGNoaXBfaWQ7CiAJcGFyLT5tYWNoID0gaW5mOwogCXBhci0+ZmFzdHBsbF9tb2RlID0gMDsKQEAgLTYwMCwxMCArNTk5LDEwIEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9mYXN0cGxsY2xrKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcmVnX3JlYWQpOwotCWRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9yZWdfd3JpdGUpOwotCWRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9mbGlwKTsKKwlkZXZpY2VfY3JlYXRlX2ZpbGUoJnBkZXYtPmRldiwgJmRldl9hdHRyX2Zhc3RwbGxjbGspOworCWRldmljZV9jcmVhdGVfZmlsZSgmcGRldi0+ZGV2LCAmZGV2X2F0dHJfcmVnX3JlYWQpOworCWRldmljZV9jcmVhdGVfZmlsZSgmcGRldi0+ZGV2LCAmZGV2X2F0dHJfcmVnX3dyaXRlKTsKKwlkZXZpY2VfY3JlYXRlX2ZpbGUoJnBkZXYtPmRldiwgJmRldl9hdHRyX2ZsaXApOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiZmIlZDogJXMgZnJhbWUgYnVmZmVyIGRldmljZVxuIiwgaW5mby0+bm9kZSwgaW5mby0+Zml4LmlkKTsKIAlyZXR1cm4gMDsKQEAgLTYyMiwxNSArNjIxLDE1IEBACiB9CiAKIAotc3RhdGljIGludCB3MTAwZmJfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgdzEwMGZiX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBmYl9pbmZvICppbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGZiX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgdzEwMGZiX3BhciAqcGFyPWluZm8tPnBhcjsKIAotCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9mYXN0cGxsY2xrKTsKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcmVnX3JlYWQpOwotCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9yZWdfd3JpdGUpOwotCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9mbGlwKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnBkZXYtPmRldiwgJmRldl9hdHRyX2Zhc3RwbGxjbGspOworCWRldmljZV9yZW1vdmVfZmlsZSgmcGRldi0+ZGV2LCAmZGV2X2F0dHJfcmVnX3JlYWQpOworCWRldmljZV9yZW1vdmVfZmlsZSgmcGRldi0+ZGV2LCAmZGV2X2F0dHJfcmVnX3dyaXRlKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnBkZXYtPmRldiwgJmRldl9hdHRyX2ZsaXApOwogCiAJdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKTsKIApAQCAtMTQ0OCwyMyArMTQ0NywyNCBAQAogCXdyaXRlbCgweDAwMDAwMDAyLCByZW1hcHBlZF9yZWdzICsgbW1HRU5fSU5UX1NUQVRVUyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciB3MTAwZmJfZHJpdmVyID0gewotCS5uYW1lCQk9ICJ3MTAwZmIiLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdzEwMGZiX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gdzEwMGZiX3Byb2JlLAogCS5yZW1vdmUJCT0gdzEwMGZiX3JlbW92ZSwKIAkuc3VzcGVuZAk9IHcxMDBmYl9zdXNwZW5kLAogCS5yZXN1bWUJCT0gdzEwMGZiX3Jlc3VtZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAidzEwMGZiIiwKKwl9LAogfTsKIAogaW50IF9fZGV2aW5pdCB3MTAwZmJfaW5pdCh2b2lkKQogewotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJncxMDBmYl9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJncxMDBmYl9kcml2ZXIpOwogfQogCiB2b2lkIF9fZXhpdCB3MTAwZmJfY2xlYW51cCh2b2lkKQogewotIAlkcml2ZXJfdW5yZWdpc3RlcigmdzEwMGZiX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJncxMDBmYl9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdCh3MTAwZmJfaW5pdCk7CmRpZmYgLS1naXQgYS9mcy85cC92ZnNfZmlsZS5jIGIvZnMvOXAvdmZzX2ZpbGUuYwppbmRleCBiYmMzY2M2Li44OWM4NDlkIDEwMDY0NAotLS0gYS9mcy85cC92ZnNfZmlsZS5jCisrKyBiL2ZzLzlwL3Zmc19maWxlLmMKQEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2luZXQuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvaWRyLmg+CmRpZmYgLS1naXQgYS9mcy9LY29uZmlnIGIvZnMvS2NvbmZpZwppbmRleCA3ZDZhZTM2Li5kNTI1NWU2IDEwMDY0NAotLS0gYS9mcy9LY29uZmlnCisrKyBiL2ZzL0tjb25maWcKQEAgLTE2MDEsOSArMTYwMSwxMCBAQAogCSAgUEMgb3BlcmF0aW5nIHN5c3RlbXMuICBUaGUgQ0lGUyBwcm90b2NvbCBpcyBmdWxseSBzdXBwb3J0ZWQgYnkgCiAJICBmaWxlIHNlcnZlcnMgc3VjaCBhcyBXaW5kb3dzIDIwMDAgKGluY2x1ZGluZyBXaW5kb3dzIDIwMDMsIE5UIDQgIAogCSAgYW5kIFdpbmRvd3MgWFApIGFzIHdlbGwgYnkgU2FtYmEgKHdoaWNoIHByb3ZpZGVzIGV4Y2VsbGVudCBDSUZTCi0JICBzZXJ2ZXIgc3VwcG9ydCBmb3IgTGludXggYW5kIG1hbnkgb3RoZXIgb3BlcmF0aW5nIHN5c3RlbXMpLiBDdXJyZW50bHkKLQkgIHlvdSBtdXN0IHVzZSB0aGUgc21iZnMgY2xpZW50IGZpbGVzeXN0ZW0gdG8gYWNjZXNzIG9sZGVyIFNNQiBzZXJ2ZXJzCi0JICBzdWNoIGFzIFdpbmRvd3MgOXggYW5kIE9TLzIuCisJICBzZXJ2ZXIgc3VwcG9ydCBmb3IgTGludXggYW5kIG1hbnkgb3RoZXIgb3BlcmF0aW5nIHN5c3RlbXMpLiBMaW1pdGVkCisJICBzdXBwb3J0IGZvciBXaW5kb3dzIE1FIGFuZCBzaW1pbGFyIHNlcnZlcnMgaXMgcHJvdmlkZWQgYXMgd2VsbC4gCisJICBZb3UgbXVzdCB1c2UgdGhlIHNtYmZzIGNsaWVudCBmaWxlc3lzdGVtIHRvIGFjY2VzcyBvbGRlciBTTUIgc2VydmVycworCSAgc3VjaCBhcyBPUy8yIGFuZCBET1MuCiAKIAkgIFRoZSBpbnRlbnQgb2YgdGhlIGNpZnMgbW9kdWxlIGlzIHRvIHByb3ZpZGUgYW4gYWR2YW5jZWQKIAkgIG5ldHdvcmsgZmlsZSBzeXN0ZW0gY2xpZW50IGZvciBtb3VudGluZyB0byBDSUZTIGNvbXBsaWFudCBzZXJ2ZXJzLCAKQEAgLTE2MTQsNyArMTYxNSw3IEBACiAJICBjaWZzIGlmIHJ1bm5pbmcgb25seSBhIChTYW1iYSkgc2VydmVyLiBJdCBpcyBwb3NzaWJsZSB0byBlbmFibGUgYm90aAogCSAgc21iZnMgYW5kIGNpZnMgKGUuZy4gaWYgeW91IGFyZSB1c2luZyBDSUZTIGZvciBhY2Nlc3NpbmcgV2luZG93cyAyMDAzCiAJICBhbmQgU2FtYmEgMyBzZXJ2ZXJzLCBhbmQgc21iZnMgZm9yIGFjY2Vzc2luZyBvbGQgc2VydmVycykuIElmIHlvdSBuZWVkIAotCSAgdG8gbW91bnQgdG8gU2FtYmEgb3IgV2luZG93cyAyMDAzIHNlcnZlcnMgZnJvbSB0aGlzIG1hY2hpbmUsIHNheSBZLgorCSAgdG8gbW91bnQgdG8gU2FtYmEgb3IgV2luZG93cyBmcm9tIHRoaXMgbWFjaGluZSwgc2F5IFkuCiAKIGNvbmZpZyBDSUZTX1NUQVRTCiAgICAgICAgIGJvb2wgIkNJRlMgc3RhdGlzdGljcyIKQEAgLTE2MjMsOCArMTYyNCwyMiBAQAogICAgICAgICAgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgY2F1c2Ugc3RhdGlzdGljcyBmb3IgZWFjaCBzZXJ2ZXIgc2hhcmUKIAkgIG1vdW50ZWQgYnkgdGhlIGNpZnMgY2xpZW50IHRvIGJlIGRpc3BsYXllZCBpbiAvcHJvYy9mcy9jaWZzL1N0YXRzCiAKK2NvbmZpZyBDSUZTX1NUQVRTMgorCWJvb2wgIkNJRlMgZXh0ZW5kZWQgc3RhdGlzdGljcyIKKwlkZXBlbmRzIG9uIENJRlNfU1RBVFMKKwloZWxwCisJICBFbmFibGluZyB0aGlzIG9wdGlvbiB3aWxsIGFsbG93IG1vcmUgZGV0YWlsZWQgc3RhdGlzdGljcyBvbiBTTUIKKwkgIHJlcXVlc3QgdGltaW5nIHRvIGJlIGRpc3BsYXllZCBpbiAvcHJvYy9mcy9jaWZzL0RlYnVnRGF0YSBhbmQgYWxzbworCSAgYWxsb3cgb3B0aW9uYWwgbG9nZ2luZyBvZiBzbG93IHJlc3BvbnNlcyB0byBkbWVzZyAoZGVwZW5kaW5nIG9uIHRoZQorCSAgdmFsdWUgb2YgL3Byb2MvZnMvY2lmcy9jaWZzRllJLCBzZWUgZnMvY2lmcy9SRUFETUUgZm9yIG1vcmUgZGV0YWlscykuCisJICBUaGVzZSBhZGRpdGlvbmFsIHN0YXRpc3RpY3MgbWF5IGhhdmUgYSBtaW5vciBlZmZlY3Qgb24gcGVyZm9ybWFuY2UKKwkgIGFuZCBtZW1vcnkgdXRpbGl6YXRpb24uCisKKwkgIFVubGVzcyB5b3UgYXJlIGEgZGV2ZWxvcGVyIG9yIGFyZSBkb2luZyBuZXR3b3JrIHBlcmZvcm1hbmNlIGFuYWx5c2lzCisJICBvciB0dW5pbmcsIHNheSBOLgorCiBjb25maWcgQ0lGU19YQVRUUgotICAgICAgICBib29sICJDSUZTIGV4dGVuZGVkIGF0dHJpYnV0ZXMgKEVYUEVSSU1FTlRBTCkiCisgICAgICAgIGJvb2wgIkNJRlMgZXh0ZW5kZWQgYXR0cmlidXRlcyIKICAgICAgICAgZGVwZW5kcyBvbiBDSUZTCiAgICAgICAgIGhlbHAKICAgICAgICAgICBFeHRlbmRlZCBhdHRyaWJ1dGVzIGFyZSBuYW1lOnZhbHVlIHBhaXJzIGFzc29jaWF0ZWQgd2l0aCBpbm9kZXMgYnkKQEAgLTE2MzYsMTEgKzE2NTEsMTEgQEAKICAgICAgICAgICBwcmVmYWNlZCBieSB0aGUgdXNlciBuYW1lc3BhY2UgcHJlZml4LiBUaGUgc3lzdGVtIG5hbWVzcGFjZQogICAgICAgICAgICh1c2VkIGJ5IHNvbWUgZmlsZXN5c3RlbXMgdG8gc3RvcmUgQUNMcykgaXMgbm90IHN1cHBvcnRlZCBhdAogICAgICAgICAgIHRoaXMgdGltZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgIElmIHVuc3VyZSwgc2F5IE4uCiAKIGNvbmZpZyBDSUZTX1BPU0lYCi0gICAgICAgIGJvb2wgIkNJRlMgUE9TSVggRXh0ZW5zaW9ucyAoRVhQRVJJTUVOVEFMKSIKKyAgICAgICAgYm9vbCAiQ0lGUyBQT1NJWCBFeHRlbnNpb25zIgogICAgICAgICBkZXBlbmRzIG9uIENJRlNfWEFUVFIKICAgICAgICAgaGVscAogICAgICAgICAgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgY2F1c2UgdGhlIGNpZnMgY2xpZW50IHRvIGF0dGVtcHQgdG8KQEAgLTE2NTMsMTAgKzE2NjgsMjggQEAKIAogY29uZmlnIENJRlNfRVhQRVJJTUVOVEFMCiAJICBib29sICJDSUZTIEV4cGVyaW1lbnRhbCBGZWF0dXJlcyAoRVhQRVJJTUVOVEFMKSIKLQkgIGRlcGVuZHMgb24gQ0lGUworCSAgZGVwZW5kcyBvbiBDSUZTICYmIEVYUEVSSU1FTlRBTAogCSAgaGVscAotCSAgICBFbmFibGVzIGNpZnMgZmVhdHVyZXMgdW5kZXIgdGVzdGluZy4gVGhlc2UgZmVhdHVyZXMKLQkgICAgYXJlIGhpZ2hseSBleHBlcmltZW50YWwuICBJZiB1bnN1cmUsIHNheSBOLgorCSAgICBFbmFibGVzIGNpZnMgZmVhdHVyZXMgdW5kZXIgdGVzdGluZy4gVGhlc2UgZmVhdHVyZXMgYXJlCisJICAgIGV4cGVyaW1lbnRhbCBhbmQgY3VycmVudGx5IGluY2x1ZGUgc3VwcG9ydCBmb3Igd3JpdGVwYWdlcworCSAgICAobXVsdGlwYWdlIHdyaXRlYmVoaW5kIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cykgYW5kIGRpcmVjdG9yeQorCSAgICBjaGFuZ2Ugbm90aWZpY2F0aW9uIGllIGZjbnRsKEZfRE5PVElGWSkgYXMgd2VsbCBhcyBzb21lIHNlY3VyaXR5CisJICAgIGltcHJvdmVtZW50cy4gIFNvbWUgYWxzbyBkZXBlbmQgb24gc2V0dGluZyBhdCBydW50aW1lIHRoZQorCSAgICBwc2V1ZG8tZmlsZSAvcHJvYy9mcy9jaWZzL0V4cGVyaW1lbnRhbCAod2hpY2ggaXMgZGlzYWJsZWQgYnkKKwkgICAgZGVmYXVsdCkuIFNlZSB0aGUgZmlsZSBmcy9jaWZzL1JFQURNRSBmb3IgbW9yZSBkZXRhaWxzLgorCisJICAgIElmIHVuc3VyZSwgc2F5IE4uCisKK2NvbmZpZyBDSUZTX1VQQ0FMTAorCSAgYm9vbCAiQ0lGUyBLZXJiZXJvcy9TUE5FR08gYWR2YW5jZWQgc2Vzc2lvbiBzZXR1cCAoRVhQRVJJTUVOVEFMKSIKKwkgIGRlcGVuZHMgb24gQ0lGU19FWFBFUklNRU5UQUwKKwkgIHNlbGVjdCBDT05ORUNUT1IKKwkgIGhlbHAKKwkgICAgRW5hYmxlcyBhbiB1cGNhbGwgbWVjaGFuaXNtIGZvciBDSUZTIHdoaWNoIHdpbGwgYmUgdXNlZCB0byBjb250YWN0CisJICAgIHVzZXJzcGFjZSBoZWxwZXIgdXRpbGl0aWVzIHRvIHByb3ZpZGUgU1BORUdPIHBhY2thZ2VkIEtlcmJlcm9zCisJICAgIHRpY2tldHMgd2hpY2ggYXJlIG5lZWRlZCB0byBtb3VudCB0byBjZXJ0YWluIHNlY3VyZSBzZXJ2ZXJzCisJICAgIChmb3Igd2hpY2ggbW9yZSBzZWN1cmUgS2VyYmVyb3MgYXV0aGVudGljYXRpb24gaXMgcmVxdWlyZWQpLiBJZgorCSAgICB1bnN1cmUsIHNheSBOLgogCiBjb25maWcgTkNQX0ZTCiAJdHJpc3RhdGUgIk5DUCBmaWxlIHN5c3RlbSBzdXBwb3J0ICh0byBtb3VudCBOZXRXYXJlIHZvbHVtZXMpIgpkaWZmIC0tZ2l0IGEvZnMvYWRmcy9hZGZzLmggYi9mcy9hZGZzL2FkZnMuaAppbmRleCBmZDUyODQzLi5mNmNkMDEzIDEwMDY0NAotLS0gYS9mcy9hZGZzL2FkZnMuaAorKysgYi9mcy9hZGZzL2FkZnMuaApAQCAtMTIsNyArMTIsNiBAQAogI2RlZmluZSBBREZTX05EQV9QVUJMSUNfUkVBRAkoMSA8PCA1KQogI2RlZmluZSBBREZTX05EQV9QVUJMSUNfV1JJVEUJKDEgPDwgNikKIAotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlICJkaXJfZi5oIgogCiBzdHJ1Y3QgYnVmZmVyX2hlYWQ7CmRpZmYgLS1naXQgYS9mcy9iaW5mbXRfbWlzYy5jIGIvZnMvYmluZm10X21pc2MuYwppbmRleCA4YWUwZGI2Li4yNTY4ZWI0IDEwMDY0NAotLS0gYS9mcy9iaW5mbXRfbWlzYy5jCisrKyBiL2ZzL2JpbmZtdF9taXNjLmMKQEAgLTE1MCw3ICsxNTAsNyBAQAogCiAJCS8qIGlmIHRoZSBiaW5hcnkgaXMgbm90IHJlYWRhYmxlIHRoYW4gZW5mb3JjZSBtbS0+ZHVtcGFibGU9MAogCQkgICByZWdhcmRsZXNzIG9mIHRoZSBpbnRlcnByZXRlcidzIHBlcm1pc3Npb25zICovCi0JCWlmIChwZXJtaXNzaW9uKGJwcm0tPmZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLCBNQVlfUkVBRCwgTlVMTCkpCisJCWlmIChmaWxlX3Blcm1pc3Npb24oYnBybS0+ZmlsZSwgTUFZX1JFQUQpKQogCQkJYnBybS0+aW50ZXJwX2ZsYWdzIHw9IEJJTlBSTV9GTEFHU19FTkZPUkNFX05PTkRVTVA7CiAKIAkJYWxsb3dfd3JpdGVfYWNjZXNzKGJwcm0tPmZpbGUpOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9DSEFOR0VTIGIvZnMvY2lmcy9DSEFOR0VTCmluZGV4IDViYWIyNGYuLmVhYjM3NTAgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvQ0hBTkdFUworKysgYi9mcy9jaWZzL0NIQU5HRVMKQEAgLTIsNyArMiw3IEBACiAtLS0tLS0tLS0tLS0KIERlZmVyIGNsb3NlIG9mIGEgZmlsZSBoYW5kbGUgc2xpZ2h0bHkgaWYgcGVuZGluZyB3cml0ZXMgZGVwZW5kIG9uIHRoYXQgZmlsZSBoYW5kbGUKICh0aGlzIHJlZHVjZXMgdGhlIEVCQURGIGJhZCBmaWxlIGhhbmRsZSBlcnJvcnMgdGhhdCBjYW4gYmUgbG9nZ2VkIHVuZGVyIGhlYXZ5Ci1zdHJlc3Mgb24gd3JpdGVzKS4KK3N0cmVzcyBvbiB3cml0ZXMpLiBNb2RpZnkgY2lmcyBLY29uZmlnIG9wdGlvbnMgdG8gZXhwb3NlIENPTkZJR19DSUZTX1NUQVRTMiAKIAogVmVyc2lvbiAxLjM4CiAtLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc191bmljb2RlLmMgYi9mcy9jaWZzL2NpZnNfdW5pY29kZS5jCmluZGV4IDk5YTA5NmQuLjRlMTIwNTMgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc191bmljb2RlLmMKKysrIGIvZnMvY2lmcy9jaWZzX3VuaWNvZGUuYwpAQCAtNzQsMTAgKzc0LDExIEBACiAJCQljRVJST1IoMSwKIAkJCSAgICAgICAoImNpZnNfc3RydG9VQ1M6IGNoYXIydW5pIHJldHVybmVkICVkIiwKIAkJCQljaGFybGVuKSk7Ci0JCQl0b1tpXSA9IGNwdV90b19sZTE2KDB4MDAzZik7CS8qIGEgcXVlc3Rpb24gbWFyayAqLworCQkJLyogQSBxdWVzdGlvbiBtYXJrICovCisJCQl0b1tpXSA9ICh3Y2hhcl90KWNwdV90b19sZTE2KDB4MDAzZik7CiAJCQljaGFybGVuID0gMTsKIAkJfSBlbHNlIAotCQkJdG9baV0gPSBjcHVfdG9fbGUxNih0b1tpXSk7CisJCQl0b1tpXSA9ICh3Y2hhcl90KWNwdV90b19sZTE2KHRvW2ldKTsKIAogCX0KIApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzZnMuYyBiL2ZzL2NpZnMvY2lmc2ZzLmMKaW5kZXggODc3MDk1YS4uNjgyYjAyMyAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzZnMuYworKysgYi9mcy9jaWZzL2NpZnNmcy5jCkBAIC00MDUsNiArNDA1LDcgQEAKIH07CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19DSUZTX0VYUEVSSU1FTlRBTAogc3RhdGljIHZvaWQgY2lmc191bW91bnRfYmVnaW4oc3RydWN0IHN1cGVyX2Jsb2NrICogc2Jsb2NrKQogewogCXN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2I7CkBAIC00MjIsMTYgKzQyMywxOCBAQAogCQl0Y29uLT50aWRTdGF0dXMgPSBDaWZzRXhpdGluZzsKIAl1cCgmdGNvbi0+dGNvblNlbSk7CiAKKwkvKiBjYW5jZWxfYnJsX3JlcXVlc3RzKHRjb24pOyAqLworCS8qIGNhbmNlbF9ub3RpZnlfcmVxdWVzdHModGNvbik7ICovCiAJaWYodGNvbi0+c2VzICYmIHRjb24tPnNlcy0+c2VydmVyKQogCXsKLQkJY0VSUk9SKDEsKCJ3YWtlIHVwIHRhc2tzIG5vdyAtIHVtb3VudCBiZWdpbiBub3QgY29tcGxldGUiKSk7CisJCWNGWUkoMSwoIndha2UgdXAgdGFza3Mgbm93IC0gdW1vdW50IGJlZ2luIG5vdCBjb21wbGV0ZSIpKTsKIAkJd2FrZV91cF9hbGwoJnRjb24tPnNlcy0+c2VydmVyLT5yZXF1ZXN0X3EpOwogCX0KIC8qIEJCIEZJWE1FIC0gZmluaXNoIGFkZCBjaGVja3MgZm9yIHRpZFN0YXR1cyBCQiAqLwogCiAJcmV0dXJuOwogfQotCQorI2VuZGlmCQogCiBzdGF0aWMgaW50IGNpZnNfcmVtb3VudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgKmZsYWdzLCBjaGFyICpkYXRhKQogewpAQCAtNDUwLDcgKzQ1Myw5IEBACiAgICB1bmxlc3MgbGF0ZXIgd2UgYWRkIGxhenkgY2xvc2Ugb2YgaW5vZGVzIG9yIHVubGVzcyB0aGUga2VybmVsIGZvcmdldHMgdG8gY2FsbAogICAgdXMgd2l0aCB0aGUgc2FtZSBudW1iZXIgb2YgcmVsZWFzZXMgKGNsb3NlcykgYXMgb3BlbnMgKi8KIAkuc2hvd19vcHRpb25zID0gY2lmc19zaG93X29wdGlvbnMsCi0vKgkudW1vdW50X2JlZ2luICAgPSBjaWZzX3Vtb3VudF9iZWdpbiwgKi8gLyogQkIgZmluaXNoIGluIHRoZSBmdXR1cmUgKi8KKyNpZmRlZiBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwKKwkudW1vdW50X2JlZ2luICAgPSBjaWZzX3Vtb3VudF9iZWdpbiwKKyNlbmRpZgogCS5yZW1vdW50X2ZzID0gY2lmc19yZW1vdW50LAogfTsKIApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzcHJvdG8uaCBiL2ZzL2NpZnMvY2lmc3Byb3RvLmgKaW5kZXggZDMwMTE0OWIxLi4xYjczZjRmIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNwcm90by5oCisrKyBiL2ZzL2NpZnMvY2lmc3Byb3RvLmgKQEAgLTI0MiwxMSArMjQyLDExIEBACiAJCQljb25zdCBpbnQgbmV0ZmlkLCBjb25zdCB1bnNpZ25lZCBpbnQgY291bnQsCiAJCQljb25zdCBfX3U2NCBvZmZzZXQsIHVuc2lnbmVkIGludCAqbmJ5dGVzLCAKIAkJCXN0cnVjdCBrdmVjICppb3YsIGNvbnN0IGludCBudmVjLCBjb25zdCBpbnQgbG9uZ19vcCk7CisjZW5kaWYgLyogQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMICovCiBleHRlcm4gaW50IENJRlNHZXRTcnZJbm9kZU51bWJlcihjb25zdCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uLAogCQkJY29uc3QgdW5zaWduZWQgY2hhciAqc2VhcmNoTmFtZSwgX191NjQgKiBpbm9kZV9udW1iZXIsCiAJCQljb25zdCBzdHJ1Y3QgbmxzX3RhYmxlICpubHNfY29kZXBhZ2UsIAogCQkJaW50IHJlbWFwX3NwZWNpYWxfY2hhcnMpOwotI2VuZGlmIC8qIENPTkZJR19DSUZTX0VYUEVSSU1FTlRBTCAqLwogZXh0ZXJuIGludCBjaWZzX2NvbnZlcnRVQ1NwYXRoKGNoYXIgKnRhcmdldCwgY29uc3QgX19sZTE2ICpzb3VyY2UsIGludCBtYXhsZW4sCiAJCQljb25zdCBzdHJ1Y3QgbmxzX3RhYmxlICogY29kZXBhZ2UpOwogZXh0ZXJuIGludCBjaWZzQ29udmVydFRvVUNTKF9fbGUxNiAqIHRhcmdldCwgY29uc3QgY2hhciAqc291cmNlLCBpbnQgbWF4bGVuLApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzc21iLmMgYi9mcy9jaWZzL2NpZnNzbWIuYwppbmRleCA5MzEyYmZjLi5hNTNjNTk2IDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNzbWIuYworKysgYi9mcy9jaWZzL2NpZnNzbWIuYwpAQCAtMjk1OSw3ICsyOTU5LDYgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLSNpZmRlZiBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwKIGludAogQ0lGU0dldFNydklub2RlTnVtYmVyKGNvbnN0IGludCB4aWQsIHN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb24sCiAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2VhcmNoTmFtZSwKQEAgLTMwNTMsNyArMzA1Miw2IEBACiAJCWdvdG8gR2V0SW5vZGVOdW1iZXJSZXRyeTsKIAlyZXR1cm4gcmM7CiB9Ci0jZW5kaWYgLyogQ0lGU19FWFBFUklNRU5UQUwgKi8KIAogaW50CiBDSUZTR2V0REZTUmVmZXIoY29uc3QgaW50IHhpZCwgc3RydWN0IGNpZnNTZXNJbmZvICpzZXMsCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NuX2NpZnMuaCBiL2ZzL2NpZnMvY25fY2lmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhNTljY2EKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9jaWZzL2NuX2NpZnMuaApAQCAtMCwwICsxLDM3IEBACisvKgorICogICBmcy9jaWZzL2NuX2NpZnMuaAorICoKKyAqICAgQ29weXJpZ2h0IChjKSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzICBDb3JwLiwgMjAwMgorICogICBBdXRob3Iocyk6IFN0ZXZlIEZyZW5jaCAoc2ZyZW5jaEB1cy5pYm0uY29tKQorICoKKyAqICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisgKiAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUKKyAqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2lmbmRlZiBfQ05fQ0lGU19ICisjZGVmaW5lIF9DTl9DSUZTX0gKKyNpZmRlZiBDT05GSUdfQ0lGU19VUENBTEwKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Nvbm5lY3Rvci5oPgorCitzdHJ1Y3QgY2lmc191cGNhbGwgeworCWNoYXIgc2lnbmF0dXJlWzRdOyAvKiBDSUZTICovCisJZW51bSBjb21tYW5kIHsKKwkJQ0lGU19HRVRfSVAgPSAweDAwMDAwMDAxLCAgIC8qIGdldCBpcCBhZGRyZXNzIGZvciBob3N0bmFtZSAqLworCQlDSUZTX0dFVF9TRUNCTE9CID0gMHgwMDAwMDAwMiwgLyogZ2V0IFNQTkVHTyB3cmFwcGVkIGJsb2IgKi8KKwl9IGNvbW1hbmQ7CisJLyogdW5pb24gY2lmcyB1cGNhbGwgZGF0YSBmb2xsb3dzICovCit9OworI2VuZGlmIC8qIENJRlNfVVBDQUxMICovCisjZW5kaWYgLyogX0NOX0NJRlNfSCAqLwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jb25uZWN0LmMgYi9mcy9jaWZzL2Nvbm5lY3QuYwppbmRleCA0NTBhYjc1Li4yY2I2MjA3IDEwMDY0NAotLS0gYS9mcy9jaWZzL2Nvbm5lY3QuYworKysgYi9mcy9jaWZzL2Nvbm5lY3QuYwpAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgIm50bG1zc3AuaCIKICNpbmNsdWRlICJudGVyci5oIgogI2luY2x1ZGUgInJmYzEwMDJwZHUuaCIKKyNpbmNsdWRlICJjbl9jaWZzLmgiCiAKICNkZWZpbmUgQ0lGU19QT1JUIDQ0NQogI2RlZmluZSBSRkMxMDAxX1BPUlQgMTM5CmRpZmYgLS1naXQgYS9mcy9jaWZzL2lub2RlLmMgYi9mcy9jaWZzL2lub2RlLmMKaW5kZXggOTEyZDQwMS4uOTIzZDA3MSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9pbm9kZS5jCisrKyBiL2ZzL2NpZnMvaW5vZGUuYwpAQCAtMjgzLDcgKzI4Myw2IEBACiAJCQkgICB0aGVyZSBXaW5kb3dzIHNlcnZlciBvciBuZXR3b3JrIGFwcGxpYW5jZXMgZm9yIHdoaWNoCiAJCQkgICBJbmRleE51bWJlciBmaWVsZCBpcyBub3QgZ3VhcmFudGVlZCB1bmlxdWU/ICovCiAKLSNpZmRlZiBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwJCQogCQkJaWYgKGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYgQ0lGU19NT1VOVF9TRVJWRVJfSU5VTSl7CiAJCQkJaW50IHJjMSA9IDA7CiAJCQkJX191NjQgaW5vZGVfbnVtOwpAQCAtMjk5LDcgKzI5OCw2IEBACiAJCQkJfSBlbHNlIC8qIGRvIHdlIG5lZWQgY2FzdCBvciBoYXNoIHRvIGlubz8gKi8KIAkJCQkJKCpwaW5vZGUpLT5pX2lubyA9IGlub2RlX251bTsKIAkJCX0gLyogZWxzZSBpbm8gaW5jcmVtZW50ZWQgdG8gdW5pcXVlIG51bSBpbiBuZXdfaW5vZGUqLwotI2VuZGlmIC8qIENJRlNfRVhQRVJJTUVOVEFMICovCiAJCQlpbnNlcnRfaW5vZGVfaGFzaCgqcGlub2RlKTsKIAkJfQogCQlpbm9kZSA9ICpwaW5vZGU7CmRpZmYgLS1naXQgYS9mcy9jb21wYXRfaW9jdGwuYyBiL2ZzL2NvbXBhdF9pb2N0bC5jCmluZGV4IDQ5MDk3NTQuLjI2MzAwZmMgMTAwNjQ0Ci0tLSBhL2ZzL2NvbXBhdF9pb2N0bC5jCisrKyBiL2ZzL2NvbXBhdF9pb2N0bC5jCkBAIC04NDAsMTQ2ICs4NDAsNiBAQAogCXJldHVybiBlcnIgPyAtRUZBVUxUIDogMDsKIH0KIAotc3RydWN0IGZiX2ZpeF9zY3JlZW5pbmZvMzIgewotCWNoYXIJCQlpZFsxNl07Ci0gICAgICAgIGNvbXBhdF9jYWRkcl90CXNtZW1fc3RhcnQ7Ci0JdTMyCQkJc21lbV9sZW47Ci0JdTMyCQkJdHlwZTsKLQl1MzIJCQl0eXBlX2F1eDsKLQl1MzIJCQl2aXN1YWw7Ci0JdTE2CQkJeHBhbnN0ZXA7Ci0JdTE2CQkJeXBhbnN0ZXA7Ci0JdTE2CQkJeXdyYXBzdGVwOwotCXUzMgkJCWxpbmVfbGVuZ3RoOwotICAgICAgICBjb21wYXRfY2FkZHJfdAltbWlvX3N0YXJ0OwotCXUzMgkJCW1taW9fbGVuOwotCXUzMgkJCWFjY2VsOwotCXUxNgkJCXJlc2VydmVkWzNdOwotfTsKLQotc3RydWN0IGZiX2NtYXAzMiB7Ci0JdTMyCQkJc3RhcnQ7Ci0JdTMyCQkJbGVuOwotCWNvbXBhdF9jYWRkcl90CXJlZDsKLQljb21wYXRfY2FkZHJfdAlncmVlbjsKLQljb21wYXRfY2FkZHJfdAlibHVlOwotCWNvbXBhdF9jYWRkcl90CXRyYW5zcDsKLX07Ci0KLXN0YXRpYyBpbnQgZmJfZ2V0cHV0X2NtYXAodW5zaWduZWQgaW50IGZkLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKLXsKLQlzdHJ1Y3QgZmJfY21hcF91c2VyIF9fdXNlciAqY21hcDsKLQlzdHJ1Y3QgZmJfY21hcDMyIF9fdXNlciAqY21hcDMyOwotCV9fdTMyIGRhdGE7Ci0JaW50IGVycjsKLQotCWNtYXAgPSBjb21wYXRfYWxsb2NfdXNlcl9zcGFjZShzaXplb2YoKmNtYXApKTsKLQljbWFwMzIgPSBjb21wYXRfcHRyKGFyZyk7Ci0KLQlpZiAoY29weV9pbl91c2VyKCZjbWFwLT5zdGFydCwgJmNtYXAzMi0+c3RhcnQsIDIgKiBzaXplb2YoX191MzIpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlpZiAoZ2V0X3VzZXIoZGF0YSwgJmNtYXAzMi0+cmVkKSB8fAotCSAgICBwdXRfdXNlcihjb21wYXRfcHRyKGRhdGEpLCAmY21hcC0+cmVkKSB8fAotCSAgICBnZXRfdXNlcihkYXRhLCAmY21hcDMyLT5ncmVlbikgfHwKLQkgICAgcHV0X3VzZXIoY29tcGF0X3B0cihkYXRhKSwgJmNtYXAtPmdyZWVuKSB8fAotCSAgICBnZXRfdXNlcihkYXRhLCAmY21hcDMyLT5ibHVlKSB8fAotCSAgICBwdXRfdXNlcihjb21wYXRfcHRyKGRhdGEpLCAmY21hcC0+Ymx1ZSkgfHwKLQkgICAgZ2V0X3VzZXIoZGF0YSwgJmNtYXAzMi0+dHJhbnNwKSB8fAotCSAgICBwdXRfdXNlcihjb21wYXRfcHRyKGRhdGEpLCAmY21hcC0+dHJhbnNwKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQllcnIgPSBzeXNfaW9jdGwoZmQsIGNtZCwgKHVuc2lnbmVkIGxvbmcpIGNtYXApOwotCi0JaWYgKCFlcnIpIHsKLQkJaWYgKGNvcHlfaW5fdXNlcigmY21hcDMyLT5zdGFydCwKLQkJCQkgJmNtYXAtPnN0YXJ0LAotCQkJCSAyICogc2l6ZW9mKF9fdTMyKSkpCi0JCQllcnIgPSAtRUZBVUxUOwotCX0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IGRvX2ZzY3JlZW5pbmZvX3RvX3VzZXIoc3RydWN0IGZiX2ZpeF9zY3JlZW5pbmZvICpmaXgsCi0JCQkJICBzdHJ1Y3QgZmJfZml4X3NjcmVlbmluZm8zMiBfX3VzZXIgKmZpeDMyKQotewotCV9fdTMyIGRhdGE7Ci0JaW50IGVycjsKLQotCWVyciA9IGNvcHlfdG9fdXNlcigmZml4MzItPmlkLCAmZml4LT5pZCwgc2l6ZW9mKGZpeDMyLT5pZCkpOwotCi0JZGF0YSA9IChfX3UzMikgKHVuc2lnbmVkIGxvbmcpIGZpeC0+c21lbV9zdGFydDsKLQllcnIgfD0gcHV0X3VzZXIoZGF0YSwgJmZpeDMyLT5zbWVtX3N0YXJ0KTsKLQotCWVyciB8PSBwdXRfdXNlcihmaXgtPnNtZW1fbGVuLCAmZml4MzItPnNtZW1fbGVuKTsKLQllcnIgfD0gcHV0X3VzZXIoZml4LT50eXBlLCAmZml4MzItPnR5cGUpOwotCWVyciB8PSBwdXRfdXNlcihmaXgtPnR5cGVfYXV4LCAmZml4MzItPnR5cGVfYXV4KTsKLQllcnIgfD0gcHV0X3VzZXIoZml4LT52aXN1YWwsICZmaXgzMi0+dmlzdWFsKTsKLQllcnIgfD0gcHV0X3VzZXIoZml4LT54cGFuc3RlcCwgJmZpeDMyLT54cGFuc3RlcCk7Ci0JZXJyIHw9IHB1dF91c2VyKGZpeC0+eXBhbnN0ZXAsICZmaXgzMi0+eXBhbnN0ZXApOwotCWVyciB8PSBwdXRfdXNlcihmaXgtPnl3cmFwc3RlcCwgJmZpeDMyLT55d3JhcHN0ZXApOwotCWVyciB8PSBwdXRfdXNlcihmaXgtPmxpbmVfbGVuZ3RoLCAmZml4MzItPmxpbmVfbGVuZ3RoKTsKLQotCWRhdGEgPSAoX191MzIpICh1bnNpZ25lZCBsb25nKSBmaXgtPm1taW9fc3RhcnQ7Ci0JZXJyIHw9IHB1dF91c2VyKGRhdGEsICZmaXgzMi0+bW1pb19zdGFydCk7Ci0KLQllcnIgfD0gcHV0X3VzZXIoZml4LT5tbWlvX2xlbiwgJmZpeDMyLT5tbWlvX2xlbik7Ci0JZXJyIHw9IHB1dF91c2VyKGZpeC0+YWNjZWwsICZmaXgzMi0+YWNjZWwpOwotCWVyciB8PSBjb3B5X3RvX3VzZXIoZml4MzItPnJlc2VydmVkLCBmaXgtPnJlc2VydmVkLAotCQkJICAgIHNpemVvZihmaXgtPnJlc2VydmVkKSk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IGZiX2dldF9mc2NyZWVuaW5mbyh1bnNpZ25lZCBpbnQgZmQsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQotewotCW1tX3NlZ21lbnRfdCBvbGRfZnM7Ci0Jc3RydWN0IGZiX2ZpeF9zY3JlZW5pbmZvIGZpeDsKLQlzdHJ1Y3QgZmJfZml4X3NjcmVlbmluZm8zMiBfX3VzZXIgKmZpeDMyOwotCWludCBlcnI7Ci0KLQlmaXgzMiA9IGNvbXBhdF9wdHIoYXJnKTsKLQotCW9sZF9mcyA9IGdldF9mcygpOwotCXNldF9mcyhLRVJORUxfRFMpOwotCWVyciA9IHN5c19pb2N0bChmZCwgY21kLCAodW5zaWduZWQgbG9uZykgJmZpeCk7Ci0Jc2V0X2ZzKG9sZF9mcyk7Ci0KLQlpZiAoIWVycikKLQkJZXJyID0gZG9fZnNjcmVlbmluZm9fdG9fdXNlcigmZml4LCBmaXgzMik7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IGZiX2lvY3RsX3RyYW5zKHVuc2lnbmVkIGludCBmZCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCi17Ci0JaW50IGVycjsKLQotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBGQklPR0VUX0ZTQ1JFRU5JTkZPOgotCQllcnIgPSBmYl9nZXRfZnNjcmVlbmluZm8oZmQsY21kLCBhcmcpOwotCQlicmVhazsKLQotICAJY2FzZSBGQklPR0VUQ01BUDoKLQljYXNlIEZCSU9QVVRDTUFQOgotCQllcnIgPSBmYl9nZXRwdXRfY21hcChmZCwgY21kLCBhcmcpOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCWRvIHsKLQkJCXN0YXRpYyBpbnQgY291bnQ7Ci0JCQlpZiAoKytjb3VudCA8PSAyMCkKLQkJCQlwcmludGsoIiVzOiBVbmtub3duIGZiIGlvY3RsIGNtZCBmZCglZCkgIgotCQkJCSAgICAgICAiY21kKCUwOHgpIGFyZyglMDhseClcbiIsCi0JCQkJICAgICAgIF9fRlVOQ1RJT05fXywgZmQsIGNtZCwgYXJnKTsKLQkJfSB3aGlsZSgwKTsKLQkJZXJyID0gLUVOT1NZUzsKLQkJYnJlYWs7Ci0JfTsKLQotCXJldHVybiBlcnI7Ci19Ci0KIHN0YXRpYyBpbnQgaGRpb19pb2N0bF90cmFucyh1bnNpZ25lZCBpbnQgZmQsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCW1tX3NlZ21lbnRfdCBvbGRfZnMgPSBnZXRfZnMoKTsKQEAgLTI5NTMsMTAgKzI4MTMsNyBAQAogSEFORExFX0lPQ1RMKDB4MTI2MCwgYnJva2VuX2Jsa2dldHNpemUpCiBIQU5ETEVfSU9DVEwoQkxLRlJBR0VULCB3X2xvbmcpCiBIQU5ETEVfSU9DVEwoQkxLU0VDVEdFVCwgd19sb25nKQotSEFORExFX0lPQ1RMKEZCSU9HRVRfRlNDUkVFTklORk8sIGZiX2lvY3RsX3RyYW5zKQogSEFORExFX0lPQ1RMKEJMS1BHLCBibGtwZ19pb2N0bF90cmFucykKLUhBTkRMRV9JT0NUTChGQklPR0VUQ01BUCwgZmJfaW9jdGxfdHJhbnMpCi1IQU5ETEVfSU9DVEwoRkJJT1BVVENNQVAsIGZiX2lvY3RsX3RyYW5zKQogSEFORExFX0lPQ1RMKEhESU9fR0VUX0tFRVBTRVRUSU5HUywgaGRpb19pb2N0bF90cmFucykKIEhBTkRMRV9JT0NUTChIRElPX0dFVF9VTk1BU0tJTlRSLCBoZGlvX2lvY3RsX3RyYW5zKQogSEFORExFX0lPQ1RMKEhESU9fR0VUX0RNQSwgaGRpb19pb2N0bF90cmFucykKQEAgLTMwNTEsNiArMjkwOCwxNiBAQAogQ09NUEFUSUJMRV9JT0NUTChUSU9DR0xUQykKIENPTVBBVElCTEVfSU9DVEwoVElPQ1NMVEMpCiAjZW5kaWYKKyNpZmRlZiBUSU9DU1RBUlQKKy8qCisgKiBGb3IgdGhlc2UgdHdvIHdlIGhhdmUgZGVmaW50aW9ucyBpbiBpb2N0bHMuaCBhbmQvb3IgdGVybWlvcy5oIG9uCisgKiBzb21lIGFyY2hpdGVjdHVyZXMgYnV0IG5vIGFjdHVhbCBpbXBsZW1lbnRpb24uICBTb21lIGFwcGxpY2F0aW9ucworICogbGlrZSBiYXNoIGNhbGwgdGhlbSBpZiB0aGV5IGFyZSBkZWZpbmVkIGluIHRoZSBoZWFkZXJzLCBzbyB3ZSBwcm92aWRlCisgKiBlbnRyaWVzIGhlcmUgdG8gYXZvaWQgc3lzbG9nIG1lc3NhZ2Ugc3Bldy4KKyAqLworQ09NUEFUSUJMRV9JT0NUTChUSU9DU1RBUlQpCitDT01QQVRJQkxFX0lPQ1RMKFRJT0NTVE9QKQorI2VuZGlmCiAvKiBVc2JkZXZmcyAqLwogSEFORExFX0lPQ1RMKFVTQkRFVkZTX0NPTlRST0wzMiwgZG9fdXNiZGV2ZnNfY29udHJvbCkKIEhBTkRMRV9JT0NUTChVU0JERVZGU19CVUxLMzIsIGRvX3VzYmRldmZzX2J1bGspCmRpZmYgLS1naXQgYS9mcy9leGVjLmMgYi9mcy9leGVjLmMKaW5kZXggY2Q2YzU3NC4uYzQ2NmZlYyAxMDA2NDQKLS0tIGEvZnMvZXhlYy5jCisrKyBiL2ZzL2V4ZWMuYwpAQCAtMTM1LDcgKzEzNSw3IEBACiAJaWYgKCFTX0lTUkVHKG5kLmRlbnRyeS0+ZF9pbm9kZS0+aV9tb2RlKSkKIAkJZ290byBleGl0OwogCi0JZXJyb3IgPSBwZXJtaXNzaW9uKG5kLmRlbnRyeS0+ZF9pbm9kZSwgTUFZX1JFQUQgfCBNQVlfRVhFQywgJm5kKTsKKwllcnJvciA9IHZmc19wZXJtaXNzaW9uKCZuZCwgTUFZX1JFQUQgfCBNQVlfRVhFQyk7CiAJaWYgKGVycm9yKQogCQlnb3RvIGV4aXQ7CiAKQEAgLTQ5NSw3ICs0OTUsNyBAQAogCQlmaWxlID0gRVJSX1BUUigtRUFDQ0VTKTsKIAkJaWYgKCEobmQubW50LT5tbnRfZmxhZ3MgJiBNTlRfTk9FWEVDKSAmJgogCQkgICAgU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkgewotCQkJaW50IGVyciA9IHBlcm1pc3Npb24oaW5vZGUsIE1BWV9FWEVDLCAmbmQpOworCQkJaW50IGVyciA9IHZmc19wZXJtaXNzaW9uKCZuZCwgTUFZX0VYRUMpOwogCQkJaWYgKCFlcnIgJiYgIShpbm9kZS0+aV9tb2RlICYgMDExMSkpCiAJCQkJZXJyID0gLUVBQ0NFUzsKIAkJCWZpbGUgPSBFUlJfUFRSKGVycik7CkBAIC01OTAsNiArNTkwLDcgQEAKIAlzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCAqc2lnID0gdHNrLT5zaWduYWw7CiAJc3RydWN0IHNpZ2hhbmRfc3RydWN0ICpuZXdzaWdoYW5kLCAqb2xkc2lnaGFuZCA9IHRzay0+c2lnaGFuZDsKIAlzcGlubG9ja190ICpsb2NrID0gJm9sZHNpZ2hhbmQtPnNpZ2xvY2s7CisJc3RydWN0IHRhc2tfc3RydWN0ICpsZWFkZXIgPSBOVUxMOwogCWludCBjb3VudDsKIAogCS8qCkBAIC02NjUsNyArNjY2LDcgQEAKIAkgKiBhbmQgdG8gYXNzdW1lIGl0cyBQSUQ6CiAJICovCiAJaWYgKCF0aHJlYWRfZ3JvdXBfbGVhZGVyKGN1cnJlbnQpKSB7Ci0JCXN0cnVjdCB0YXNrX3N0cnVjdCAqbGVhZGVyID0gY3VycmVudC0+Z3JvdXBfbGVhZGVyLCAqcGFyZW50OworCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudDsKIAkJc3RydWN0IGRlbnRyeSAqcHJvY19kZW50cnkxLCAqcHJvY19kZW50cnkyOwogCQl1bnNpZ25lZCBsb25nIGV4aXRfc3RhdGUsIHB0cmFjZTsKIApAQCAtNjc0LDYgKzY3NSw3IEBACiAJCSAqIEl0IHNob3VsZCBhbHJlYWR5IGJlIHpvbWJpZSBhdCB0aGlzIHBvaW50LCBtb3N0CiAJCSAqIG9mIHRoZSB0aW1lLgogCQkgKi8KKwkJbGVhZGVyID0gY3VycmVudC0+Z3JvdXBfbGVhZGVyOwogCQl3aGlsZSAobGVhZGVyLT5leGl0X3N0YXRlICE9IEVYSVRfWk9NQklFKQogCQkJeWllbGQoKTsKIApAQCAtNzMzLDcgKzczNSw2IEBACiAJCXByb2NfcGlkX2ZsdXNoKHByb2NfZGVudHJ5Mik7CiAKIAkJQlVHX09OKGV4aXRfc3RhdGUgIT0gRVhJVF9aT01CSUUpOwotCQlyZWxlYXNlX3Rhc2sobGVhZGVyKTsKICAgICAgICAgfQogCiAJLyoKQEAgLTc0Myw4ICs3NDQsMTEgQEAKIAlzaWctPmZsYWdzID0gMDsKIAogbm9fdGhyZWFkX2dyb3VwOgotCUJVR19PTihhdG9taWNfcmVhZCgmc2lnLT5jb3VudCkgIT0gMSk7CiAJZXhpdF9pdGltZXJzKHNpZyk7CisJaWYgKGxlYWRlcikKKwkJcmVsZWFzZV90YXNrKGxlYWRlcik7CisKKwlCVUdfT04oYXRvbWljX3JlYWQoJnNpZy0+Y291bnQpICE9IDEpOwogCiAJaWYgKGF0b21pY19yZWFkKCZvbGRzaWdoYW5kLT5jb3VudCkgPT0gMSkgewogCQkvKgpAQCAtODkyLDcgKzg5Niw3IEBACiAJZmx1c2hfdGhyZWFkKCk7CiAKIAlpZiAoYnBybS0+ZV91aWQgIT0gY3VycmVudC0+ZXVpZCB8fCBicHJtLT5lX2dpZCAhPSBjdXJyZW50LT5lZ2lkIHx8IAotCSAgICBwZXJtaXNzaW9uKGJwcm0tPmZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLE1BWV9SRUFELCBOVUxMKSB8fAorCSAgICBmaWxlX3Blcm1pc3Npb24oYnBybS0+ZmlsZSwgTUFZX1JFQUQpIHx8CiAJICAgIChicHJtLT5pbnRlcnBfZmxhZ3MgJiBCSU5QUk1fRkxBR1NfRU5GT1JDRV9OT05EVU1QKSkgewogCQlzdWlkX2tleXMoY3VycmVudCk7CiAJCWN1cnJlbnQtPm1tLT5kdW1wYWJsZSA9IHN1aWRfZHVtcGFibGU7CmRpZmYgLS1naXQgYS9mcy9leHQyL0NIQU5HRVMgYi9mcy9leHQyL0NIQU5HRVMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhNWFhZjAuLjAwMDAwMDAKLS0tIGEvZnMvZXh0Mi9DSEFOR0VTCisrKyAvZGV2L251bGwKQEAgLTEsMTU3ICswLDAgQEAKLUNoYW5nZXMgZnJvbSB2ZXJzaW9uIDAuNWEgdG8gdmVyc2lvbiAwLjViCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCS0gTm93IHRoYXQgd2UgaGF2ZSBzeXNjdGwoKSwgdGhlIGltbXV0YWJsZSBmbGFnIGNhbm5vdCBiZSBjaGFuZ2VkIHdoZW4KLQkgIHRoZSBzeXN0ZW0gaXMgcnVubmluZyBhdCBzZWN1cml0eSBsZXZlbCA+IDAuCi0JLSBTb21lIGNsZWFudXBzIGluIHRoZSBjb2RlLgotCS0gTW9yZSBjb25zaXN0ZW5jeSBjaGVja3Mgb24gZGlyZWN0b3JpZXMuCi0JLSBUaGUgZXh0Mi5kaWZmIHBhdGNoIGZyb20gVG9tIE1heSA8ZnRvbUBuZXRjb20uY29tPiBoYXMgYmVlbgotCSAgaW50ZWdyYXRlZC4gIFRoaXMgcGF0Y2ggcmVwbGFjZXMgZXhwZW5zaXZlICIvIiBhbmQgIiUiIHdpdGgKLQkgIGNoZWFwICI+PiIgYW5kICImIiB3aGVyZSBwb3NzaWJsZS4KLQotQ2hhbmdlcyBmcm9tIHZlcnNpb24gMC41IHRvIHZlcnNpb24gMC41YQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCS0gWmVybyB0aGUgcGFydGlhbCBibG9jayBmb2xsb3dpbmcgdGhlIGVuZCBvZiB0aGUgZmlsZSB3aGVuIGEgZmlsZQotCSAgaXMgdHJ1bmNhdGVkLgotCS0gRGF0ZXMgdXBkYXRlZCBpbiB0aGUgY29weXJpZ2h0LgotCS0gTW9yZSBjaGVja3Mgd2hlbiB0aGUgZmlsZXN5c3RlbSBpcyBtb3VudGVkOiB0aGUgY291bnQgb2YgYmxvY2tzLAotCSAgZnJhZ21lbnRzLCBhbmQgaW5vZGVzIHBlciBncm91cCBpcyBjaGVja2VkIGFnYWluc3QgdGhlIGJsb2NrIHNpemUuCi0JLSBUaGUgYnVmZmVycyB1c2VkIGJ5IHRoZSBlcnJvciByb3V0aW5lcyBhcmUgbm93IHN0YXRpYyB2YXJpYWJsZXMsIHRvCi0JICBhdm9pZCB1c2luZyBzcGFjZSBvbiB0aGUga2VybmVsIHN0YWNrLCBhcyByZXF1ZXN0ZWQgYnkgTGludXMuCi0JLSBTb21lIGNsZWFudXBzIGluIHRoZSBlcnJvciBtZXNzYWdlcyAoc29tZSB2ZXJzaW9ucyBvZiBzeXNsb2cgY29udGFpbgotCSAgYSBidWcgd2hpY2ggdHJ1bmNhdGVzIGFuIGVycm9yIG1lc3NhZ2UgaWYgaXQgY29udGFpbnMgJ1xuJykuCi0JLSBDaGVjayB0aGF0IG5vIGRhdGEgY2FuIGJlIHdyaXR0ZW4gdG8gYSBmaWxlIHBhc3QgdGhlIDJHQiBsaW1pdC4KLQktIFRoZSBmYW1vdXMgcmVhZGRpcigpIGJ1ZyBoYXMgYmVlbiBmaXhlZCBieSBTdGVwaGVuIFR3ZWVkaWUuCi0JLSBBZGRlZCBhIHJldmlzaW9uIGxldmVsIGluIHRoZSBzdXBlcmJsb2NrLgotCS0gRnVsbCBzdXBwb3J0IGZvciBPX1NZTkMgZmxhZyBvZiB0aGUgb3BlbiBzeXN0ZW0gY2FsbC4KLQktIE5ldyBtb3VudCBvcHRpb25zOiBgcmVzdWlkPSN1aWQnIGFuZCBgcmVzZ2lkPSNnaWQnLiAgYHJlc3VpZCcgY2F1c2VzCi0JICBleHQyZnMgdG8gY29uc2lkZXIgdXNlciAjdWlkIGxpa2Ugcm9vdCBmb3IgdGhlIHJlc2VydmVkIGJsb2Nrcy4KLQkgIGByZXNnaWQnIGFjdHMgdGhlIHNhbWUgd2F5IHdpdGggZ3JvdXAgI2dpZC4gIE5ldyBmaWVsZHMgaW4gdGhlCi0JICBzdXBlcmJsb2NrIGNvbnRhaW4gZGVmYXVsdCB2YWx1ZXMgZm9yIHJlc3VpZCBhbmQgcmVzZ2lkIGFuZCBjYW4KLQkgIGJlIG1vZGlmaWVkIGJ5IHR1bmUyZnMuCi0JICBJZGVhIGNvbWVzIGZyb20gUmVuZSBDb3VnbmVuYyA8Y291Z25lbmNAcmVudXguZnJtdWcuZnIubmV0Pi4KLQktIE5ldyBtb3VudCBvcHRpb25zOiBgYnNkZGYnIGFuZCBgbWluaXhkZicuICBgYnNkZGYnIGNhdXNlcyBleHQyZnMKLQkgIHRvIHJlbW92ZSB0aGUgYmxvY2tzIHVzZWQgZm9yIEZTIHN0cnVjdHVyZXMgZnJvbSB0aGUgdG90YWwgYmxvY2sKLQkgIGNvdW50IGluIHN0YXRmcy4gIFdpdGggYG1pbml4ZGYnLCBleHQyZnMgbWltaWNzIE1pbml4IGJlaGF2aW9yCi0JICBpbiBzdGF0ZnMgKGkuZS4gaXQgcmV0dXJucyB0aGUgdG90YWwgbnVtYmVyIG9mIGJsb2NrcyBvbiB0aGUKLQkgIHBhcnRpdGlvbikuICBUaGlzIGlzIGludGVuZGVkIHRvIG1ha2UgYmRlIGhhcHB5IDotKQotCS0gTmV3IGZpbGUgYXR0cmlidXRlczoKLQkgIC0gSW1tdXRhYmxlIGZpbGVzIGNhbm5vdCBiZSBtb2RpZmllZC4gIERhdGEgY2Fubm90IGJlIHdyaXR0ZW4gdG8KLQkgICAgdGhlc2UgZmlsZXMuICBUaGV5IGNhbm5vdCBiZSByZW1vdmVkLCByZW5hbWVkIGFuZCBuZXcgbGlua3MgY2Fubm90Ci0JICAgIGJlIGNyZWF0ZWQuICBFdmVuIHJvb3QgY2Fubm90IG1vZGlmeSB0aGUgZmlsZXMuICBIZSBoYXMgdG8gcmVtb3ZlCi0JICAgIHRoZSBpbW11dGFibGUgYXR0cmlidXRlIGZpcnN0LgotCSAgLSBBcHBlbmQtb25seSBmaWxlczogY2FuIG9ubHkgYmUgd3JpdHRlbiBpbiBhcHBlbmQtbW9kZSB3aGVuIHdyaXRpbmcuCi0JICAgIFRoZXkgY2Fubm90IGJlIHJlbW92ZWQsIHJlbmFtZWQgYW5kIG5ldyBsaW5rcyBjYW5ub3QgYmUgY3JlYXRlZC4KLQkgICAgTm90ZTogZmlsZXMgbWF5IG9ubHkgYmUgYWRkZWQgdG8gYW4gYXBwZW5kLW9ubHkgZGlyZWN0b3J5LgotCSAgLSBOby1kdW1wIGZpbGVzOiB0aGUgYXR0cmlidXRlIGlzIG5vdCB1c2VkIGJ5IHRoZSBrZXJuZWwuICBNeSBwb3J0Ci0JICAgIG9mIGR1bXAgdXNlcyBpdCB0byBhdm9pZCBiYWNraW5nIHVwIGZpbGVzIHdoaWNoIGFyZSBub3QgaW1wb3J0YW50LgotCS0gTmV3IGNoZWNrIGluIGV4dDJfY2hlY2tfZGlyX2VudHJ5OiB0aGUgaW5vZGUgbnVtYmVyIGlzIGNoZWNrZWQuCi0JLSBTdXBwb3J0IGZvciBiaWcgZmlsZSBzeXN0ZW1zOiB0aGUgY29weSBvZiB0aGUgRlMgZGVzY3JpcHRvciBpcyBub3cKLQkgIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCAocHJldmlvdXMgdmVyc2lvbnMgdXNlZCBhIGZpeGVkIHNpemUgYXJyYXkpLgotCSAgVGhpcyBhbGxvd3MgdG8gbW91bnQgMkdCKyBGUy4KLQktIFJlb3JnYW5pemF0aW9uIG9mIHRoZSBleHQyX2lub2RlIHN0cnVjdHVyZSB0byBhbGxvdyBvdGhlciBvcGVyYXRpbmcKLQkgIHN5c3RlbXMgdG8gY3JlYXRlIHNwZWNpZmljIGZpZWxkcyBpZiB0aGV5IHVzZSBleHQyZnMgYXMgdGhlaXIgbmF0aXZlCi0JICBmaWxlIHN5c3RlbS4gIEN1cnJlbnRseSwgZXh0MmZzIGlzIG9ubHkgaW1wbGVtZW50ZWQgaW4gTGludXggYnV0Ci0JICB3aWxsIHNvb24gYmUgcGFydCBvZiBHbnUgSHVyZCBhbmQgb2YgTWFzaXguCi0KLUNoYW5nZXMgZnJvbSB2ZXJzaW9uIDAuNGIgdG8gdmVyc2lvbiAwLjUKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQktIE5ldyBzdXBlcmJsb2NrIGZpZWxkczogc19sYXN0Y2hlY2sgYW5kIHNfY2hlY2tpbnRlcnZhbCBhZGRlZAotCSAgYnkgVXdlIE9oc2UgPHV3ZUB0aXJrYS5ndW4uZGU+IHRvIGltcGxlbWVudCB0aW1lZGVwZW5kZW50IGNoZWNrcwotCSAgb2YgdGhlIGZpbGUgc3lzdGVtCi0JLSBSZWFsIHJhbmRvbSBudW1iZXJzIGZvciBzZWN1cmUgcm0gYWRkZWQgYnkgUGllcnJlIGRlbCBQZXJ1Z2lhCi0JICA8ZGVscGVydWdAZ2xhLmVjb2xlZG9jLmlicC5mcj4KLQktIFRoZSBtb3VudCB3YXJuaW5ncyByZWxhdGVkIHRvIHRoZSBzdGF0ZSBvZiBhIGZzIGFyZSBub3QgcHJpbnRlZAotCSAgaWYgdGhlIGZzIGlzIG1vdW50ZWQgcmVhZC1vbmx5LCBpZGVhIGJ5IE5pY2sgSG9sbG93YXkKLQkgIDxhbGZpZUBkY3Mud2Fyd2ljay5hYy51az4KLQotQ2hhbmdlcyBmcm9tIHZlcnNpb24gMC40YSB0byB2ZXJzaW9uIDAuNGIKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0JLSBDb3B5cmlnaHRzIGNoYW5nZWQgdG8gaW5jbHVkZSB0aGUgbmFtZSBvZiBteSBsYWJvcmF0b3J5LgotCS0gQ2xlYW4gdXAgb2YgYmFsbG9jLmMgYW5kIGlhbGxvYy5jLgotCS0gTW9yZSBjb25zaXN0ZW5jeSBjaGVja3MuCi0JLSBCbG9jayBwcmVhbGxvY2F0aW9uIGFkZGVkIGJ5IFN0ZXBoZW4gVHdlZWRpZS4KLQktIERpcmVjdCByZWFkcyBvZiBkaXJlY3RvcmllcyBkaXNhbGxvd2VkLgotCS0gUmVhZGFoZWFkIGltcGxlbWVudGVkIGluIHJlYWRkaXIgYnkgU3RlcGhlbiBUd2VlZGllLgotCS0gQnVncyBpbiBibG9jayBhbmQgaW5vZGVzIGFsbG9jYXRpb24gZml4ZWQuCi0JLSBSZWFkYWhlYWQgaW1wbGVtZW50ZWQgaW4gZXh0Ml9maW5kX2VudHJ5IGJ5IENoaXAgU2FsemVuYmVyZy4KLQktIE5ldyBtb3VudCBvcHRpb25zOgotCSAgYGNoZWNrPW5vbmV8bm9ybWFsfHN0cmljdCcKLQkgIGBkZWJ1ZycKLQkgIGBlcnJvcnM9Y29udGludWV8cmVtb3VudC1yb3xwYW5pYycKLQkgIGBncnBpZCcsIGBic2Rncm91cHMnCi0JICBgbm9jaGVjaycKLQkgIGBub2dycGlkJywgYHN5c3Zncm91cHMnCi0JLSB0cnVuY2F0ZSgpIG5vdyB0cmllcyB0byBkZWFsbG9jYXRlIGNvbnRpZ3VvdXMgYmxvY2tzIGluIGEgc2luZ2xlIGNhbGwKLQkgIHRvIGV4dDJfZnJlZV9ibG9ja3MoKS4KLQktIGxvdHMgb2YgY29zbWV0aWMgY2hhbmdlcy4KLQotQ2hhbmdlcyBmcm9tIHZlcnNpb24gMC40IHRvIHZlcnNpb24gMC40YQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAgICAtIHRoZSBgc3luYycgb3B0aW9uIHN1cHBvcnQgaXMgbm93IGNvbXBsZXRlLiAgVmVyc2lvbiAwLjQgd2FzIG5vdAotICAgICAgICAgIHN1cHBvcnRpbmcgaXQgd2hlbiB0cnVuY2F0aW5nIGEgZmlsZS4gIEkgaGF2ZSB0ZXN0ZWQgdGhlIHN5bmNocm9ub3VzCi0gICAgICAgICAgd3JpdGVzIGFuZCB0aGV5IHdvcmsgYnV0IHRoZXkgbWFrZSB0aGUgc3lzdGVtIHZlcnkgc2xvdyA6LSggIEkgaGF2ZQotICAgICAgICAgIHRvIHdvcmsgYWdhaW4gb24gdGhpcyB0byBtYWtlIGl0IGZhc3Rlci4KLSAgICAgICAgLSB3aGVuIGRldGVjdGluZyBhbiBlcnJvciBvbiBhIG1vdW50ZWQgZmlsZXN5c3RlbSwgdmVyc2lvbiAwLjQgdXNlZAotICAgICAgICAgIHRvIHRyeSB0byB3cml0ZSBhIGZsYWcgaW4gdGhlIHN1cGVyIGJsb2NrIGV2ZW4gaWYgdGhlIGZpbGVzeXN0ZW0gaGFkCi0gICAgICAgICAgYmVlbiBtb3VudGVkIHJlYWQtb25seS4gIFRoaXMgaXMgZml4ZWQuCi0gICAgICAgIC0gdGhlIGBzYj0jJyBvcHRpb24gbm93IGNhdXNlcyB0aGUga2VybmVsIGNvZGUgdG8gdXNlIHRoZSBmaWxlc3lzdGVtCi0gICAgICAgICAgZGVzY3JpcHRvcnMgbG9jYXRlZCBhdCBibG9jayAjKzEuICBWZXJzaW9uIDAuNCB1c2VkIHRoZSBzdXBlcmJsb2NrCi0gICAgICAgICAgYmFja3VwIGxvY2F0ZWQgYXQgYmxvY2sgIyBidXQgdXNlZCB0aGUgbWFpbiBjb3B5IG9mIHRoZSBkZXNjcmlwdG9ycy4KLSAgICAgICAgLSBhIG5ldyBmaWxlIGF0dHJpYnV0ZSBgUycgaXMgc3VwcG9ydGVkLiAgVGhpcyBhdHRyaWJ1dGUgY2F1c2VzCi0gICAgICAgICAgc3luY2hyb25vdXMgd3JpdGVzIGJ1dCBpcyBhcHBsaWVkIHRvIGEgZmlsZSBub3QgdG8gdGhlIGVudGlyZSBmaWxlCi0gICAgICAgICAgc3lzdGVtICh0aGFua3MgdG8gTWljaGFlbCBLcmFlaGUgPGtyYWVoZUBiYWt1bmluLm5vcnRoLmRlPiBmb3IKLSAgICAgICAgICBzdWdnZXN0aW5nIGl0KS4KLSAgICAgICAgLSB0aGUgZGlyZWN0b3J5IGNhY2hlIGlzIGluaGliaXRlZCBieSBkZWZhdWx0LiAgVGhlIGNhY2hlIG1hbmFnZW1lbnQKLSAgICAgICAgICBjb2RlIHNlZW1zIHRvIGJlIGJ1Z2d5IGFuZCBJIGhhdmUgdG8gbG9vayBhdCBpdCBjYXJlZnVsbHkgYmVmb3JlCi0gICAgICAgICAgdXNpbmcgaXQgYWdhaW4uCi0gICAgICAgIC0gZGVsZXRpbmcgYSBmaWxlIHdpdGggdGhlIGBzJyBhdHRyaWJ1dGUgKHNlY3VyZSBkZWxldGlvbikgY2F1c2VzIGl0cwotICAgICAgICAgIGJsb2NrcyB0byBiZSBvdmVyd3JpdHRlbiB3aXRoIHJhbmRvbSB2YWx1ZXMgbm90IHdpdGggemVyb3MgKHRoYW5rcyB0bwotICAgICAgICAgIE1pY2hhZWwgQS4gR3JpZmZpdGggPGdyaWZAY3MudWNyLmVkdT4gZm9yIHN1Z2dlc3RpbmcgaXQpLgotICAgICAgICAtIGxvdHMgb2YgY29zbWV0aWMgY2hhbmdlcyBoYXZlIGJlZW4gbWFkZS4KLQotQ2hhbmdlcyBmcm9tIHZlcnNpb24gMC4zIHRvIHZlcnNpb24gMC40Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgICAgLSBUaHJlZSBuZXcgbW91bnQgb3B0aW9ucyBhcmUgc3VwcG9ydGVkOiBgY2hlY2snLCBgc3luYycgYW5kIGBzYj0jJy4KLSAgICAgICAgICBgY2hlY2snIHRlbGxzIHRoZSBrZXJuZWwgY29kZSB0byBtYWtlIG1vcmUgY29uc2lzdGVuY3kgY2hlY2tzCi0gICAgICAgICAgd2hlbiB0aGUgZmlsZSBzeXN0ZW0gaXMgbW91bnRlZC4gIEN1cnJlbnRseSwgdGhlIGtlcm5lbCBjb2RlIGNoZWNrcwotICAgICAgICAgIHRoYXQgdGhlIGJsb2NrcyBhbmQgaW5vZGVzIGJpdG1hcHMgYXJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgZnJlZQotICAgICAgICAgIGJsb2NrcyBhbmQgaW5vZGVzIGNvdW50cy4gIE1vcmUgY2hlY2tzIHdpbGwgYmUgYWRkZWQgaW4gZnV0dXJlCi0gICAgICAgICAgcmVsZWFzZXMuCi0gICAgICAgICAgYHN5bmMnIHRlbGxzIHRoZSBrZXJuZWwgY29kZSB0byB1c2Ugc3luY2hyb25vdXMgd3JpdGVzIHdoZW4gdXBkYXRpbmcKLSAgICAgICAgICBhbiBpbm9kZSwgYSBiaXRtYXAsIGEgZGlyZWN0b3J5IGVudHJ5IG9yIGFuIGluZGlyZWN0IGJsb2NrLiAgVGhpcwotICAgICAgICAgIGNhbiBtYWtlIHRoZSBmaWxlIHN5c3RlbSBtdWNoIHNsb3dlciBidXQgY2FuIGJlIGEgYmlnIHdpbiBmb3IgZmlsZXMKLSAgICAgICAgICByZWNvdmVyeSBpbiBjYXNlIG9mIGEgY3Jhc2ggKGFuZCB3ZSBjYW4gbm93IHNheSB0byB0aGUgQlNEIGZvbGtzCi0gICAgICAgICAgdGhhdCBMaW51eCBhbHNvIHN1cHBvcnRzIHN5bmNocm9ub3VzIHVwZGF0ZXMgOi0pLgotICAgICAgICAgIGBzYj0jJyB0ZWxscyB0aGUga2VybmVsIGNvZGUgdG8gdXNlIGFuIGFsdGVybmF0ZSBzdXBlciBibG9jayBpbnN0ZWFkCi0gICAgICAgICAgb2YgaXRzIG1hc3RlciBjb3B5LiAgYCMnIGlzIHRoZSBudW1iZXIgb2YgdGhlIGJsb2NrIChjb3VudGVkIGluCi0gICAgICAgICAgMTAyNCBieXRlcyBibG9ja3MpIHdoaWNoIGNvbnRhaW5zIHRoZSBhbHRlcm5hdGUgc3VwZXIgYmxvY2suCi0gICAgICAgICAgQW4gZXh0MiBmaWxlIHN5c3RlbSB0eXBpY2FsbHkgY29udGFpbnMgYmFja3VwcyBvZiB0aGUgc3VwZXIgYmxvY2sKLSAgICAgICAgICBhdCBibG9ja3MgODE5MywgMTYzODUsIGFuZCBzbyBvbi4KLSAgICAgICAgLSBJIGhhdmUgY2hhbmdlIHRoZSBtZWFuaW5nIG9mIHRoZSB2YWxpZCBmbGFnIHVzZWQgYnkgZTJmc2NrLiAgaXQKLSAgICAgICAgICBub3cgY29udGFpbnMgdGhlIHN0YXRlIG9mIHRoZSBmaWxlIHN5c3RlbS4gIElmIHRoZSBrZXJuZWwgY29kZQotICAgICAgICAgIGRldGVjdHMgYW4gaW5jb25zaXN0ZW5jeSB3aGlsZSB0aGUgZmlsZSBzeXN0ZW0gaXMgbW91bnRlZCwgaXQgZmxhZ3MKLSAgICAgICAgICBpdCBhcyBlcnJvbmVvdXMgYW5kIGUyZnNjayB3aWxsIGRldGVjdCB0aGF0IG9uIG5leHQgcnVuLgotICAgICAgICAtIFRoZSBzdXBlciBibG9jayBub3cgY29udGFpbnMgYSBtb3VudCBjb3VudGVyLiAgVGhpcyBjb3VudGVyIGlzCi0gICAgICAgICAgaW5jcmVtZW50ZWQgZWFjaCB0aW1lIHRoZSBmaWxlIHN5c3RlbSBpcyBtb3VudGVkIHJlYWQvd3JpdGUuICAgV2hlbgotICAgICAgICAgIHRoaXMgY291bnRlciBiZWNvbWVzIGJpZ2dlciB0aGFuIGEgbWF4aW1hbCBtb3VudCBjb3VudHMgKGFsc28gc3RvcmVkCi0gICAgICAgICAgaW4gdGhlIHN1cGVyIGJsb2NrKSwgZTJmc2NrIGNoZWNrcyB0aGUgZmlsZSBzeXN0ZW0sIGV2ZW4gaWYgaXQgaGFkCi0gICAgICAgICAgYmVlbiB1bm1vdW50ZWQgY2xlYW5seSwgYW5kIHJlc2V0cyB0aGlzIGNvdW50ZXIgdG8gMC4KLSAgICAgICAgLSBGaWxlIGF0dHJpYnV0ZXMgYXJlIG5vdyBzdXBwb3J0ZWQuICBPbmUgY2FuIGFzc29jaWF0ZSBhIHNldCBvZgotICAgICAgICAgIGF0dHJpYnV0ZXMgdG8gYSBmaWxlLiAgVGhyZWUgYXR0cmlidXRlcyBhcmUgZGVmaW5lZDoKLSAgICAgICAgICBgYyc6IHRoZSBmaWxlIGlzIG1hcmtlZCBmb3IgYXV0b21hdGljIGNvbXByZXNzaW9uLAotICAgICAgICAgIGBzJzogdGhlIGZpbGUgaXMgbWFya2VkIGZvciBzZWN1cmUgZGVsZXRpb246IHdoZW4gdGhlIGZpbGUgaXMKLSAgICAgICAgICBkZWxldGVkLCBpdHMgYmxvY2tzIGFyZSB6ZXJvZWQgYW5kIHdyaXR0ZW4gYmFjayB0byB0aGUgZGlzaywKLSAgICAgICAgICBgdSc6IHRoZSBmaWxlIGlzIG1hcmtlZCBmb3IgdW5kZWxldGlvbjogd2hlbiB0aGUgZmlsZSBpcyBkZWxldGVkLAotICAgICAgICAgIGl0cyBjb250ZW50cyBhcmUgc2F2ZWQgdG8gYWxsb3cgYSBmdXR1cmUgdW5kZWxldGlvbi4KLSAgICAgICAgICBDdXJyZW50bHksIG9ubHkgdGhlIGBzJyBhdHRyaWJ1dGUgaXMgaW1wbGVtZW50ZWQgaW4gdGhlIGtlcm5lbAotICAgICAgICAgIGNvZGUuICBTdXBwb3J0IGZvciB0aGUgb3RoZXIgYXR0cmlidXRlcyB3aWxsIGJlIGFkZGVkIGluIGEgZnV0dXJlCi0gICAgICAgICAgcmVsZWFzZS4KLSAgICAgICAgLSBhIGZldyBidWdzIHJlbGF0ZWQgdG8gdGltZXMgdXBkYXRlcyBoYXZlIGJlZW4gZml4ZWQgYnkgQnJ1Y2UKLSAgICAgICAgICBFdmFucyBhbmQgbWUuCi0gICAgICAgIC0gYSBidWcgcmVsYXRlZCB0byB0aGUgbGlua3MgY291bnQgb2YgZGVsZXRlZCBpbm9kZXMgaGFzIGJlZW4gZml4ZWQuCi0gICAgICAgICAgUHJldmlvdXMgdmVyc2lvbnMgdXNlZCB0byBrZWVwIHRoZSBsaW5rcyBjb3VudCBzZXQgdG8gMSB3aGVuIGEgZmlsZQotICAgICAgICAgIHdhcyBkZWxldGVkLiAgVGhlIG5ldyB2ZXJzaW9uIG5vdyBzZXRzIGxpbmtzX2NvdW50IHRvIDAgd2hlbiBkZWxldGluZwotICAgICAgICAgIHRoZSBsYXN0IGxpbmsuCi0gICAgICAgIC0gYSByYWNlIGNvbmRpdGlvbiB3aGVuIGRlYWxsb2NhdGluZyBhbiBpbm9kZSBoYXMgYmVlbiBmaXhlZCBieQotICAgICAgICAgIFN0ZXBoZW4gVHdlZWRpZS4KLQpkaWZmIC0tZ2l0IGEvZnMvZXh0Mi9iYWxsb2MuYyBiL2ZzL2V4dDIvYmFsbG9jLmMKaW5kZXggNjU5MWFiZS4uYmI2OTA4MCAxMDA2NDQKLS0tIGEvZnMvZXh0Mi9iYWxsb2MuYworKysgYi9mcy9leHQyL2JhbGxvYy5jCkBAIC02MjQsNzYgKzYyNCwzIEBACiAJcmV0dXJuIEVYVDJfU0Ioc2IpLT5zX2dkYl9jb3VudDsKIH0KIAotI2lmZGVmIENPTkZJR19FWFQyX0NIRUNLCi0vKiBDYWxsZWQgYXQgbW91bnQtdGltZSwgc3VwZXItYmxvY2sgaXMgbG9ja2VkICovCi12b2lkIGV4dDJfY2hlY2tfYmxvY2tzX2JpdG1hcCAoc3RydWN0IHN1cGVyX2Jsb2NrICogc2IpCi17Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpiaXRtYXBfYmggPSBOVUxMOwotCXN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICogZXM7Ci0JdW5zaWduZWQgbG9uZyBkZXNjX2NvdW50LCBiaXRtYXBfY291bnQsIHgsIGo7Ci0JdW5zaWduZWQgbG9uZyBkZXNjX2Jsb2NrczsKLQlzdHJ1Y3QgZXh0Ml9ncm91cF9kZXNjICogZGVzYzsKLQlpbnQgaTsKLQotCWVzID0gRVhUMl9TQihzYiktPnNfZXM7Ci0JZGVzY19jb3VudCA9IDA7Ci0JYml0bWFwX2NvdW50ID0gMDsKLQlkZXNjID0gTlVMTDsKLQlmb3IgKGkgPSAwOyBpIDwgRVhUMl9TQihzYiktPnNfZ3JvdXBzX2NvdW50OyBpKyspIHsKLQkJZGVzYyA9IGV4dDJfZ2V0X2dyb3VwX2Rlc2MgKHNiLCBpLCBOVUxMKTsKLQkJaWYgKCFkZXNjKQotCQkJY29udGludWU7Ci0JCWRlc2NfY291bnQgKz0gbGUxNl90b19jcHUoZGVzYy0+YmdfZnJlZV9ibG9ja3NfY291bnQpOwotCQlicmVsc2UoYml0bWFwX2JoKTsKLQkJYml0bWFwX2JoID0gcmVhZF9ibG9ja19iaXRtYXAoc2IsIGkpOwotCQlpZiAoIWJpdG1hcF9iaCkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChleHQyX2JnX2hhc19zdXBlcihzYiwgaSkgJiYKLQkJCQkhZXh0Ml90ZXN0X2JpdCgwLCBiaXRtYXBfYmgtPmJfZGF0YSkpCi0JCQlleHQyX2Vycm9yKHNiLCBfX0ZVTkNUSU9OX18sCi0JCQkJICAgIlN1cGVyYmxvY2sgaW4gZ3JvdXAgJWQgaXMgbWFya2VkIGZyZWUiLCBpKTsKLQotCQlkZXNjX2Jsb2NrcyA9IGV4dDJfYmdfbnVtX2dkYihzYiwgaSk7Ci0JCWZvciAoaiA9IDA7IGogPCBkZXNjX2Jsb2NrczsgaisrKQotCQkJaWYgKCFleHQyX3Rlc3RfYml0KGogKyAxLCBiaXRtYXBfYmgtPmJfZGF0YSkpCi0JCQkJZXh0Ml9lcnJvcihzYiwgX19GVU5DVElPTl9fLAotCQkJCQkgICAiRGVzY3JpcHRvciBibG9jayAjJWxkIGluIGdyb3VwICIKLQkJCQkJICAgIiVkIGlzIG1hcmtlZCBmcmVlIiwgaiwgaSk7Ci0KLQkJaWYgKCFibG9ja19pbl91c2UobGUzMl90b19jcHUoZGVzYy0+YmdfYmxvY2tfYml0bWFwKSwKLQkJCQkJc2IsIGJpdG1hcF9iaC0+Yl9kYXRhKSkKLQkJCWV4dDJfZXJyb3Ioc2IsICJleHQyX2NoZWNrX2Jsb2Nrc19iaXRtYXAiLAotCQkJCSAgICAiQmxvY2sgYml0bWFwIGZvciBncm91cCAlZCBpcyBtYXJrZWQgZnJlZSIsCi0JCQkJICAgIGkpOwotCi0JCWlmICghYmxvY2tfaW5fdXNlKGxlMzJfdG9fY3B1KGRlc2MtPmJnX2lub2RlX2JpdG1hcCksCi0JCQkJCXNiLCBiaXRtYXBfYmgtPmJfZGF0YSkpCi0JCQlleHQyX2Vycm9yKHNiLCAiZXh0Ml9jaGVja19ibG9ja3NfYml0bWFwIiwKLQkJCQkgICAgIklub2RlIGJpdG1hcCBmb3IgZ3JvdXAgJWQgaXMgbWFya2VkIGZyZWUiLAotCQkJCSAgICBpKTsKLQotCQlmb3IgKGogPSAwOyBqIDwgRVhUMl9TQihzYiktPnNfaXRiX3Blcl9ncm91cDsgaisrKQotCQkJaWYgKCFibG9ja19pbl91c2UobGUzMl90b19jcHUoZGVzYy0+YmdfaW5vZGVfdGFibGUpICsgaiwKLQkJCQkJCXNiLCBiaXRtYXBfYmgtPmJfZGF0YSkpCi0JCQkJZXh0Ml9lcnJvciAoc2IsICJleHQyX2NoZWNrX2Jsb2Nrc19iaXRtYXAiLAotCQkJCQkgICAgIkJsb2NrICMlbGQgb2YgdGhlIGlub2RlIHRhYmxlIGluICIKLQkJCQkJICAgICJncm91cCAlZCBpcyBtYXJrZWQgZnJlZSIsIGosIGkpOwotCi0JCXggPSBleHQyX2NvdW50X2ZyZWUoYml0bWFwX2JoLCBzYi0+c19ibG9ja3NpemUpOwotCQlpZiAobGUxNl90b19jcHUoZGVzYy0+YmdfZnJlZV9ibG9ja3NfY291bnQpICE9IHgpCi0JCQlleHQyX2Vycm9yIChzYiwgImV4dDJfY2hlY2tfYmxvY2tzX2JpdG1hcCIsCi0JCQkJICAgICJXcm9uZyBmcmVlIGJsb2NrcyBjb3VudCBmb3IgZ3JvdXAgJWQsICIKLQkJCQkgICAgInN0b3JlZCA9ICVkLCBjb3VudGVkID0gJWx1IiwgaSwKLQkJCQkgICAgbGUxNl90b19jcHUoZGVzYy0+YmdfZnJlZV9ibG9ja3NfY291bnQpLCB4KTsKLQkJYml0bWFwX2NvdW50ICs9IHg7Ci0JfQotCWlmIChsZTMyX3RvX2NwdShlcy0+c19mcmVlX2Jsb2Nrc19jb3VudCkgIT0gYml0bWFwX2NvdW50KQotCQlleHQyX2Vycm9yIChzYiwgImV4dDJfY2hlY2tfYmxvY2tzX2JpdG1hcCIsCi0JCQkiV3JvbmcgZnJlZSBibG9ja3MgY291bnQgaW4gc3VwZXIgYmxvY2ssICIKLQkJCSJzdG9yZWQgPSAlbHUsIGNvdW50ZWQgPSAlbHUiLAotCQkJKHVuc2lnbmVkIGxvbmcpbGUzMl90b19jcHUoZXMtPnNfZnJlZV9ibG9ja3NfY291bnQpLAotCQkJYml0bWFwX2NvdW50KTsKLQlicmVsc2UoYml0bWFwX2JoKTsKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZnMvZXh0Mi9pYWxsb2MuYyBiL2ZzL2V4dDIvaWFsbG9jLmMKaW5kZXggZTJkNjIwOC4uNzQ3MTRhZiAxMDA2NDQKLS0tIGEvZnMvZXh0Mi9pYWxsb2MuYworKysgYi9mcy9leHQyL2lhbGxvYy5jCkBAIC03MDAsNDMgKzcwMCwzIEBACiAJcmV0dXJuIGNvdW50OwogfQogCi0jaWZkZWYgQ09ORklHX0VYVDJfQ0hFQ0sKLS8qIENhbGxlZCBhdCBtb3VudC10aW1lLCBzdXBlci1ibG9jayBpcyBsb2NrZWQgKi8KLXZvaWQgZXh0Ml9jaGVja19pbm9kZXNfYml0bWFwIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzYikKLXsKLQlzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayAqIGVzID0gRVhUMl9TQihzYiktPnNfZXM7Ci0JdW5zaWduZWQgbG9uZyBkZXNjX2NvdW50ID0gMCwgYml0bWFwX2NvdW50ID0gMDsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJpdG1hcF9iaCA9IE5VTEw7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgRVhUMl9TQihzYiktPnNfZ3JvdXBzX2NvdW50OyBpKyspIHsKLQkJc3RydWN0IGV4dDJfZ3JvdXBfZGVzYyAqZGVzYzsKLQkJdW5zaWduZWQgeDsKLQotCQlkZXNjID0gZXh0Ml9nZXRfZ3JvdXBfZGVzYyhzYiwgaSwgTlVMTCk7Ci0JCWlmICghZGVzYykKLQkJCWNvbnRpbnVlOwotCQlkZXNjX2NvdW50ICs9IGxlMTZfdG9fY3B1KGRlc2MtPmJnX2ZyZWVfaW5vZGVzX2NvdW50KTsKLQkJYnJlbHNlKGJpdG1hcF9iaCk7Ci0JCWJpdG1hcF9iaCA9IHJlYWRfaW5vZGVfYml0bWFwKHNiLCBpKTsKLQkJaWYgKCFiaXRtYXBfYmgpCi0JCQljb250aW51ZTsKLQkJCi0JCXggPSBleHQyX2NvdW50X2ZyZWUoYml0bWFwX2JoLCBFWFQyX0lOT0RFU19QRVJfR1JPVVAoc2IpIC8gOCk7Ci0JCWlmIChsZTE2X3RvX2NwdShkZXNjLT5iZ19mcmVlX2lub2Rlc19jb3VudCkgIT0geCkKLQkJCWV4dDJfZXJyb3IgKHNiLCAiZXh0Ml9jaGVja19pbm9kZXNfYml0bWFwIiwKLQkJCQkgICAgIldyb25nIGZyZWUgaW5vZGVzIGNvdW50IGluIGdyb3VwICVkLCAiCi0JCQkJICAgICJzdG9yZWQgPSAlZCwgY291bnRlZCA9ICVsdSIsIGksCi0JCQkJICAgIGxlMTZfdG9fY3B1KGRlc2MtPmJnX2ZyZWVfaW5vZGVzX2NvdW50KSwgeCk7Ci0JCWJpdG1hcF9jb3VudCArPSB4OwotCX0KLQlicmVsc2UoYml0bWFwX2JoKTsKLQlpZiAocGVyY3B1X2NvdW50ZXJfcmVhZCgmRVhUMl9TQihzYiktPnNfZnJlZWlub2Rlc19jb3VudGVyKSAhPQotCQkJCWJpdG1hcF9jb3VudCkKLQkJZXh0Ml9lcnJvcihzYiwgImV4dDJfY2hlY2tfaW5vZGVzX2JpdG1hcCIsCi0JCQkgICAgIldyb25nIGZyZWUgaW5vZGVzIGNvdW50IGluIHN1cGVyIGJsb2NrLCAiCi0JCQkgICAgInN0b3JlZCA9ICVsdSwgY291bnRlZCA9ICVsdSIsCi0JCQkgICAgKHVuc2lnbmVkIGxvbmcpbGUzMl90b19jcHUoZXMtPnNfZnJlZV9pbm9kZXNfY291bnQpLAotCQkJICAgIGJpdG1hcF9jb3VudCk7Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL2V4dDIvc3VwZXIuYyBiL2ZzL2V4dDIvc3VwZXIuYwppbmRleCAzYzBjN2M2Li5lNGVkNGIzIDEwMDY0NAotLS0gYS9mcy9leHQyL3N1cGVyLmMKKysrIGIvZnMvZXh0Mi9zdXBlci5jCkBAIC0yODEsNyArMjgxLDcgQEAKIGVudW0gewogCU9wdF9ic2RfZGYsIE9wdF9taW5peF9kZiwgT3B0X2dycGlkLCBPcHRfbm9ncnBpZCwKIAlPcHRfcmVzZ2lkLCBPcHRfcmVzdWlkLCBPcHRfc2IsIE9wdF9lcnJfY29udCwgT3B0X2Vycl9wYW5pYywKLQlPcHRfZXJyX3JvLCBPcHRfbm91aWQzMiwgT3B0X2NoZWNrLCBPcHRfbm9jaGVjaywgT3B0X2RlYnVnLAorCU9wdF9lcnJfcm8sIE9wdF9ub3VpZDMyLCBPcHRfbm9jaGVjaywgT3B0X2RlYnVnLAogCU9wdF9vbGRhbGxvYywgT3B0X29ybG92LCBPcHRfbm9iaCwgT3B0X3VzZXJfeGF0dHIsIE9wdF9ub3VzZXJfeGF0dHIsCiAJT3B0X2FjbCwgT3B0X25vYWNsLCBPcHRfeGlwLCBPcHRfaWdub3JlLCBPcHRfZXJyLCBPcHRfcXVvdGEsCiAJT3B0X3VzcnF1b3RhLCBPcHRfZ3JwcXVvdGEKQEAgLTMwMyw3ICszMDMsNiBAQAogCXtPcHRfbm91aWQzMiwgIm5vdWlkMzIifSwKIAl7T3B0X25vY2hlY2ssICJjaGVjaz1ub25lIn0sCiAJe09wdF9ub2NoZWNrLCAibm9jaGVjayJ9LAotCXtPcHRfY2hlY2ssICJjaGVjayJ9LAogCXtPcHRfZGVidWcsICJkZWJ1ZyJ9LAogCXtPcHRfb2xkYWxsb2MsICJvbGRhbGxvYyJ9LAogCXtPcHRfb3Jsb3YsICJvcmxvdiJ9LApAQCAtMzc2LDEzICszNzUsNiBAQAogCQljYXNlIE9wdF9ub3VpZDMyOgogCQkJc2V0X29wdCAoc2JpLT5zX21vdW50X29wdCwgTk9fVUlEMzIpOwogCQkJYnJlYWs7Ci0JCWNhc2UgT3B0X2NoZWNrOgotI2lmZGVmIENPTkZJR19FWFQyX0NIRUNLCi0JCQlzZXRfb3B0IChzYmktPnNfbW91bnRfb3B0LCBDSEVDSyk7Ci0jZWxzZQotCQkJcHJpbnRrKCJFWFQyIENoZWNrIG9wdGlvbiBub3Qgc3VwcG9ydGVkXG4iKTsKLSNlbmRpZgotCQkJYnJlYWs7CiAJCWNhc2UgT3B0X25vY2hlY2s6CiAJCQljbGVhcl9vcHQgKHNiaS0+c19tb3VudF9vcHQsIENIRUNLKTsKIAkJCWJyZWFrOwpAQCAtNTAzLDEyICs0OTUsNiBAQAogCQkJRVhUMl9CTE9DS1NfUEVSX0dST1VQKHNiKSwKIAkJCUVYVDJfSU5PREVTX1BFUl9HUk9VUChzYiksCiAJCQlzYmktPnNfbW91bnRfb3B0KTsKLSNpZmRlZiBDT05GSUdfRVhUMl9DSEVDSwotCWlmICh0ZXN0X29wdCAoc2IsIENIRUNLKSkgewotCQlleHQyX2NoZWNrX2Jsb2Nrc19iaXRtYXAgKHNiKTsKLQkJZXh0Ml9jaGVja19pbm9kZXNfYml0bWFwIChzYik7Ci0JfQotI2VuZGlmCiAJcmV0dXJuIHJlczsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvZXh0My9iYWxsb2MuYyBiL2ZzL2V4dDMvYmFsbG9jLmMKaW5kZXggNzk5MmQyMS4uYWUxMTQ4YyAxMDA2NDQKLS0tIGEvZnMvZXh0My9iYWxsb2MuYworKysgYi9mcy9leHQzL2JhbGxvYy5jCkBAIC0xNTE3LDc2ICsxNTE3LDMgQEAKIAlyZXR1cm4gRVhUM19TQihzYiktPnNfZ2RiX2NvdW50OwogfQogCi0jaWZkZWYgQ09ORklHX0VYVDNfQ0hFQ0sKLS8qIENhbGxlZCBhdCBtb3VudC10aW1lLCBzdXBlci1ibG9jayBpcyBsb2NrZWQgKi8KLXZvaWQgZXh0M19jaGVja19ibG9ja3NfYml0bWFwIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzYikKLXsKLQlzdHJ1Y3QgZXh0M19zdXBlcl9ibG9jayAqZXM7Ci0JdW5zaWduZWQgbG9uZyBkZXNjX2NvdW50LCBiaXRtYXBfY291bnQsIHgsIGo7Ci0JdW5zaWduZWQgbG9uZyBkZXNjX2Jsb2NrczsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJpdG1hcF9iaCA9IE5VTEw7Ci0Jc3RydWN0IGV4dDNfZ3JvdXBfZGVzYyAqZ2RwOwotCWludCBpOwotCi0JZXMgPSBFWFQzX1NCKHNiKS0+c19lczsKLQlkZXNjX2NvdW50ID0gMDsKLQliaXRtYXBfY291bnQgPSAwOwotCWdkcCA9IE5VTEw7Ci0JZm9yIChpID0gMDsgaSA8IEVYVDNfU0Ioc2IpLT5zX2dyb3Vwc19jb3VudDsgaSsrKSB7Ci0JCWdkcCA9IGV4dDNfZ2V0X2dyb3VwX2Rlc2MgKHNiLCBpLCBOVUxMKTsKLQkJaWYgKCFnZHApCi0JCQljb250aW51ZTsKLQkJZGVzY19jb3VudCArPSBsZTE2X3RvX2NwdShnZHAtPmJnX2ZyZWVfYmxvY2tzX2NvdW50KTsKLQkJYnJlbHNlKGJpdG1hcF9iaCk7Ci0JCWJpdG1hcF9iaCA9IHJlYWRfYmxvY2tfYml0bWFwKHNiLCBpKTsKLQkJaWYgKGJpdG1hcF9iaCA9PSBOVUxMKQotCQkJY29udGludWU7Ci0KLQkJaWYgKGV4dDNfYmdfaGFzX3N1cGVyKHNiLCBpKSAmJgotCQkJCSFleHQzX3Rlc3RfYml0KDAsIGJpdG1hcF9iaC0+Yl9kYXRhKSkKLQkJCWV4dDNfZXJyb3Ioc2IsIF9fRlVOQ1RJT05fXywKLQkJCQkgICAiU3VwZXJibG9jayBpbiBncm91cCAlZCBpcyBtYXJrZWQgZnJlZSIsIGkpOwotCi0JCWRlc2NfYmxvY2tzID0gZXh0M19iZ19udW1fZ2RiKHNiLCBpKTsKLQkJZm9yIChqID0gMDsgaiA8IGRlc2NfYmxvY2tzOyBqKyspCi0JCQlpZiAoIWV4dDNfdGVzdF9iaXQoaiArIDEsIGJpdG1hcF9iaC0+Yl9kYXRhKSkKLQkJCQlleHQzX2Vycm9yKHNiLCBfX0ZVTkNUSU9OX18sCi0JCQkJCSAgICJEZXNjcmlwdG9yIGJsb2NrICMlbGQgaW4gZ3JvdXAgIgotCQkJCQkgICAiJWQgaXMgbWFya2VkIGZyZWUiLCBqLCBpKTsKLQotCQlpZiAoIWJsb2NrX2luX3VzZSAobGUzMl90b19jcHUoZ2RwLT5iZ19ibG9ja19iaXRtYXApLAotCQkJCQkJc2IsIGJpdG1hcF9iaC0+Yl9kYXRhKSkKLQkJCWV4dDNfZXJyb3IgKHNiLCAiZXh0M19jaGVja19ibG9ja3NfYml0bWFwIiwKLQkJCQkgICAgIkJsb2NrIGJpdG1hcCBmb3IgZ3JvdXAgJWQgaXMgbWFya2VkIGZyZWUiLAotCQkJCSAgICBpKTsKLQotCQlpZiAoIWJsb2NrX2luX3VzZSAobGUzMl90b19jcHUoZ2RwLT5iZ19pbm9kZV9iaXRtYXApLAotCQkJCQkJc2IsIGJpdG1hcF9iaC0+Yl9kYXRhKSkKLQkJCWV4dDNfZXJyb3IgKHNiLCAiZXh0M19jaGVja19ibG9ja3NfYml0bWFwIiwKLQkJCQkgICAgIklub2RlIGJpdG1hcCBmb3IgZ3JvdXAgJWQgaXMgbWFya2VkIGZyZWUiLAotCQkJCSAgICBpKTsKLQotCQlmb3IgKGogPSAwOyBqIDwgRVhUM19TQihzYiktPnNfaXRiX3Blcl9ncm91cDsgaisrKQotCQkJaWYgKCFibG9ja19pbl91c2UgKGxlMzJfdG9fY3B1KGdkcC0+YmdfaW5vZGVfdGFibGUpICsgaiwKLQkJCQkJCQlzYiwgYml0bWFwX2JoLT5iX2RhdGEpKQotCQkJCWV4dDNfZXJyb3IgKHNiLCAiZXh0M19jaGVja19ibG9ja3NfYml0bWFwIiwKLQkJCQkJICAgICJCbG9jayAjJWQgb2YgdGhlIGlub2RlIHRhYmxlIGluICIKLQkJCQkJICAgICJncm91cCAlZCBpcyBtYXJrZWQgZnJlZSIsIGosIGkpOwotCi0JCXggPSBleHQzX2NvdW50X2ZyZWUoYml0bWFwX2JoLCBzYi0+c19ibG9ja3NpemUpOwotCQlpZiAobGUxNl90b19jcHUoZ2RwLT5iZ19mcmVlX2Jsb2Nrc19jb3VudCkgIT0geCkKLQkJCWV4dDNfZXJyb3IgKHNiLCAiZXh0M19jaGVja19ibG9ja3NfYml0bWFwIiwKLQkJCQkgICAgIldyb25nIGZyZWUgYmxvY2tzIGNvdW50IGZvciBncm91cCAlZCwgIgotCQkJCSAgICAic3RvcmVkID0gJWQsIGNvdW50ZWQgPSAlbHUiLCBpLAotCQkJCSAgICBsZTE2X3RvX2NwdShnZHAtPmJnX2ZyZWVfYmxvY2tzX2NvdW50KSwgeCk7Ci0JCWJpdG1hcF9jb3VudCArPSB4OwotCX0KLQlicmVsc2UoYml0bWFwX2JoKTsKLQlpZiAobGUzMl90b19jcHUoZXMtPnNfZnJlZV9ibG9ja3NfY291bnQpICE9IGJpdG1hcF9jb3VudCkKLQkJZXh0M19lcnJvciAoc2IsICJleHQzX2NoZWNrX2Jsb2Nrc19iaXRtYXAiLAotCQkJIldyb25nIGZyZWUgYmxvY2tzIGNvdW50IGluIHN1cGVyIGJsb2NrLCAiCi0JCQkic3RvcmVkID0gJWx1LCBjb3VudGVkID0gJWx1IiwKLQkJCSh1bnNpZ25lZCBsb25nKWxlMzJfdG9fY3B1KGVzLT5zX2ZyZWVfYmxvY2tzX2NvdW50KSwKLQkJCWJpdG1hcF9jb3VudCk7Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL2V4dDMvaWFsbG9jLmMgYi9mcy9leHQzL2lhbGxvYy5jCmluZGV4IGRmM2Y1MTcuLjllNGEyNDMgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvaWFsbG9jLmMKKysrIGIvZnMvZXh0My9pYWxsb2MuYwpAQCAtNzU2LDQ0ICs3NTYsMyBAQAogCXJldHVybiBjb3VudDsKIH0KIAotI2lmZGVmIENPTkZJR19FWFQzX0NIRUNLCi0vKiBDYWxsZWQgYXQgbW91bnQtdGltZSwgc3VwZXItYmxvY2sgaXMgbG9ja2VkICovCi12b2lkIGV4dDNfY2hlY2tfaW5vZGVzX2JpdG1hcCAoc3RydWN0IHN1cGVyX2Jsb2NrICogc2IpCi17Ci0Jc3RydWN0IGV4dDNfc3VwZXJfYmxvY2sgKiBlczsKLQl1bnNpZ25lZCBsb25nIGRlc2NfY291bnQsIGJpdG1hcF9jb3VudCwgeDsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJpdG1hcF9iaCA9IE5VTEw7Ci0Jc3RydWN0IGV4dDNfZ3JvdXBfZGVzYyAqIGdkcDsKLQlpbnQgaTsKLQotCWVzID0gRVhUM19TQihzYiktPnNfZXM7Ci0JZGVzY19jb3VudCA9IDA7Ci0JYml0bWFwX2NvdW50ID0gMDsKLQlnZHAgPSBOVUxMOwotCWZvciAoaSA9IDA7IGkgPCBFWFQzX1NCKHNiKS0+c19ncm91cHNfY291bnQ7IGkrKykgewotCQlnZHAgPSBleHQzX2dldF9ncm91cF9kZXNjIChzYiwgaSwgTlVMTCk7Ci0JCWlmICghZ2RwKQotCQkJY29udGludWU7Ci0JCWRlc2NfY291bnQgKz0gbGUxNl90b19jcHUoZ2RwLT5iZ19mcmVlX2lub2Rlc19jb3VudCk7Ci0JCWJyZWxzZShiaXRtYXBfYmgpOwotCQliaXRtYXBfYmggPSByZWFkX2lub2RlX2JpdG1hcChzYiwgaSk7Ci0JCWlmICghYml0bWFwX2JoKQotCQkJY29udGludWU7Ci0KLQkJeCA9IGV4dDNfY291bnRfZnJlZShiaXRtYXBfYmgsIEVYVDNfSU5PREVTX1BFUl9HUk9VUChzYikgLyA4KTsKLQkJaWYgKGxlMTZfdG9fY3B1KGdkcC0+YmdfZnJlZV9pbm9kZXNfY291bnQpICE9IHgpCi0JCQlleHQzX2Vycm9yIChzYiwgImV4dDNfY2hlY2tfaW5vZGVzX2JpdG1hcCIsCi0JCQkJICAgICJXcm9uZyBmcmVlIGlub2RlcyBjb3VudCBpbiBncm91cCAlZCwgIgotCQkJCSAgICAic3RvcmVkID0gJWQsIGNvdW50ZWQgPSAlbHUiLCBpLAotCQkJCSAgICBsZTE2X3RvX2NwdShnZHAtPmJnX2ZyZWVfaW5vZGVzX2NvdW50KSwgeCk7Ci0JCWJpdG1hcF9jb3VudCArPSB4OwotCX0KLQlicmVsc2UoYml0bWFwX2JoKTsKLQlpZiAobGUzMl90b19jcHUoZXMtPnNfZnJlZV9pbm9kZXNfY291bnQpICE9IGJpdG1hcF9jb3VudCkKLQkJZXh0M19lcnJvciAoc2IsICJleHQzX2NoZWNrX2lub2Rlc19iaXRtYXAiLAotCQkJICAgICJXcm9uZyBmcmVlIGlub2RlcyBjb3VudCBpbiBzdXBlciBibG9jaywgIgotCQkJICAgICJzdG9yZWQgPSAlbHUsIGNvdW50ZWQgPSAlbHUiLAotCQkJICAgICh1bnNpZ25lZCBsb25nKWxlMzJfdG9fY3B1KGVzLT5zX2ZyZWVfaW5vZGVzX2NvdW50KSwKLQkJCSAgICBiaXRtYXBfY291bnQpOwotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9mcy9leHQzL3N1cGVyLmMgYi9mcy9leHQzL3N1cGVyLmMKaW5kZXggZjU5NDk4OS4uNGU2NzMwNiAxMDA2NDQKLS0tIGEvZnMvZXh0My9zdXBlci5jCisrKyBiL2ZzL2V4dDMvc3VwZXIuYwpAQCAtNjI1LDcgKzYyNSw3IEBACiBlbnVtIHsKIAlPcHRfYnNkX2RmLCBPcHRfbWluaXhfZGYsIE9wdF9ncnBpZCwgT3B0X25vZ3JwaWQsCiAJT3B0X3Jlc2dpZCwgT3B0X3Jlc3VpZCwgT3B0X3NiLCBPcHRfZXJyX2NvbnQsIE9wdF9lcnJfcGFuaWMsIE9wdF9lcnJfcm8sCi0JT3B0X25vdWlkMzIsIE9wdF9jaGVjaywgT3B0X25vY2hlY2ssIE9wdF9kZWJ1ZywgT3B0X29sZGFsbG9jLCBPcHRfb3Jsb3YsCisJT3B0X25vdWlkMzIsIE9wdF9ub2NoZWNrLCBPcHRfZGVidWcsIE9wdF9vbGRhbGxvYywgT3B0X29ybG92LAogCU9wdF91c2VyX3hhdHRyLCBPcHRfbm91c2VyX3hhdHRyLCBPcHRfYWNsLCBPcHRfbm9hY2wsCiAJT3B0X3Jlc2VydmF0aW9uLCBPcHRfbm9yZXNlcnZhdGlvbiwgT3B0X25vbG9hZCwgT3B0X25vYmgsCiAJT3B0X2NvbW1pdCwgT3B0X2pvdXJuYWxfdXBkYXRlLCBPcHRfam91cm5hbF9pbnVtLApAQCAtNjUyLDcgKzY1Miw2IEBACiAJe09wdF9ub3VpZDMyLCAibm91aWQzMiJ9LAogCXtPcHRfbm9jaGVjaywgIm5vY2hlY2sifSwKIAl7T3B0X25vY2hlY2ssICJjaGVjaz1ub25lIn0sCi0Je09wdF9jaGVjaywgImNoZWNrIn0sCiAJe09wdF9kZWJ1ZywgImRlYnVnIn0sCiAJe09wdF9vbGRhbGxvYywgIm9sZGFsbG9jIn0sCiAJe09wdF9vcmxvdiwgIm9ybG92In0sCkBAIC03NzMsMTQgKzc3Miw2IEBACiAJCWNhc2UgT3B0X25vdWlkMzI6CiAJCQlzZXRfb3B0IChzYmktPnNfbW91bnRfb3B0LCBOT19VSUQzMik7CiAJCQlicmVhazsKLQkJY2FzZSBPcHRfY2hlY2s6Ci0jaWZkZWYgQ09ORklHX0VYVDNfQ0hFQ0sKLQkJCXNldF9vcHQgKHNiaS0+c19tb3VudF9vcHQsIENIRUNLKTsKLSNlbHNlCi0JCQlwcmludGsoS0VSTl9FUlIKLQkJCSAgICAgICAiRVhUMyBDaGVjayBvcHRpb24gbm90IHN1cHBvcnRlZFxuIik7Ci0jZW5kaWYKLQkJCWJyZWFrOwogCQljYXNlIE9wdF9ub2NoZWNrOgogCQkJY2xlYXJfb3B0IChzYmktPnNfbW91bnRfb3B0LCBDSEVDSyk7CiAJCQlicmVhazsKQEAgLTExMTUsMTIgKzExMDYsNiBAQAogCX0gZWxzZSB7CiAJCXByaW50aygiaW50ZXJuYWwgam91cm5hbFxuIik7CiAJfQotI2lmZGVmIENPTkZJR19FWFQzX0NIRUNLCi0JaWYgKHRlc3Rfb3B0IChzYiwgQ0hFQ0spKSB7Ci0JCWV4dDNfY2hlY2tfYmxvY2tzX2JpdG1hcCAoc2IpOwotCQlleHQzX2NoZWNrX2lub2Rlc19iaXRtYXAgKHNiKTsKLQl9Ci0jZW5kaWYKIAlyZXR1cm4gcmVzOwogfQogCmRpZmYgLS1naXQgYS9mcy9mYXQvaW5vZGUuYyBiL2ZzL2ZhdC9pbm9kZS5jCmluZGV4IGUyZWZmZTIuLmEwZjliOWYgMTAwNjQ0Ci0tLSBhL2ZzL2ZhdC9pbm9kZS5jCisrKyBiL2ZzL2ZhdC9pbm9kZS5jCkBAIC04NDYsNyArODQ2LDcgQEAKIAl7T3B0X2VyciwgTlVMTH0KIH07CiAKLXN0YXRpYyBpbnQgcGFyc2Vfb3B0aW9ucyhjaGFyICpvcHRpb25zLCBpbnQgaXNfdmZhdCwgaW50ICpkZWJ1ZywKK3N0YXRpYyBpbnQgcGFyc2Vfb3B0aW9ucyhjaGFyICpvcHRpb25zLCBpbnQgaXNfdmZhdCwgaW50IHNpbGVudCwgaW50ICpkZWJ1ZywKIAkJCSBzdHJ1Y3QgZmF0X21vdW50X29wdGlvbnMgKm9wdHMpCiB7CiAJY2hhciAqcDsKQEAgLTEwMDgsOCArMTAwOCwxMSBAQAogCQkJYnJlYWs7CiAJCS8qIHVua25vd24gb3B0aW9uICovCiAJCWRlZmF1bHQ6Ci0JCQlwcmludGsoS0VSTl9FUlIgIkZBVDogVW5yZWNvZ25pemVkIG1vdW50IG9wdGlvbiBcIiVzXCIgIgotCQkJICAgICAgICJvciBtaXNzaW5nIHZhbHVlXG4iLCBwKTsKKwkJCWlmICghc2lsZW50KSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJICAgICAgICJGQVQ6IFVucmVjb2duaXplZCBtb3VudCBvcHRpb24gXCIlc1wiICIKKwkJCQkgICAgICAgIm9yIG1pc3NpbmcgdmFsdWVcbiIsIHApOworCQkJfQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAl9CkBAIC0xMDkxLDcgKzEwOTQsNyBAQAogCXNiLT5zX2V4cG9ydF9vcCA9ICZmYXRfZXhwb3J0X29wczsKIAlzYmktPmRpcl9vcHMgPSBmc19kaXJfaW5vZGVfb3BzOwogCi0JZXJyb3IgPSBwYXJzZV9vcHRpb25zKGRhdGEsIGlzdmZhdCwgJmRlYnVnLCAmc2JpLT5vcHRpb25zKTsKKwllcnJvciA9IHBhcnNlX29wdGlvbnMoZGF0YSwgaXN2ZmF0LCBzaWxlbnQsICZkZWJ1ZywgJnNiaS0+b3B0aW9ucyk7CiAJaWYgKGVycm9yKQogCQlnb3RvIG91dF9mYWlsOwogCmRpZmYgLS1naXQgYS9mcy9oZnMvaGZzX2ZzLmggYi9mcy9oZnMvaGZzX2ZzLmgKaW5kZXggYWFlMDE5YS4uY2M1ZGNkNSAxMDA2NDQKLS0tIGEvZnMvaGZzL2hmc19mcy5oCisrKyBiL2ZzL2hmcy9oZnNfZnMuaApAQCAtOSw3ICs5LDYgQEAKICNpZm5kZWYgX0xJTlVYX0hGU19GU19ICiAjZGVmaW5lIF9MSU5VWF9IRlNfRlNfSAogCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CmRpZmYgLS1naXQgYS9mcy9oZnMvaW5vZGUuYyBiL2ZzL2hmcy9pbm9kZS5jCmluZGV4IDNmNjgwYzUuLmQ0OTkzOTNhIDEwMDY0NAotLS0gYS9mcy9oZnMvaW5vZGUuYworKysgYi9mcy9oZnMvaW5vZGUuYwpAQCAtMTIsNyArMTIsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L21wYWdlLmg+CiAKICNpbmNsdWRlICJoZnNfZnMuaCIKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvYm5vZGUuYyBiL2ZzL2hmc3BsdXMvYm5vZGUuYwppbmRleCBiODVhYmM2Li45MzBjZDkyIDEwMDY0NAotLS0gYS9mcy9oZnNwbHVzL2Jub2RlLmMKKysrIGIvZnMvaGZzcGx1cy9ibm9kZS5jCkBAIC0xMyw3ICsxMyw2IEBACiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KIAogI2luY2x1ZGUgImhmc3BsdXNfZnMuaCIKICNpbmNsdWRlICJoZnNwbHVzX3Jhdy5oIgpkaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9kaXIuYyBiL2ZzL2hmc3BsdXMvZGlyLmMKaW5kZXggN2JkYTc2Ni4uNTBjOGY0NGIgMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvZGlyLmMKKysrIGIvZnMvaGZzcGx1cy9kaXIuYwpAQCAtMTMsNyArMTMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KIAogI2luY2x1ZGUgImhmc3BsdXNfZnMuaCIKICNpbmNsdWRlICJoZnNwbHVzX3Jhdy5oIgpkaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9leHRlbnRzLmMgYi9mcy9oZnNwbHVzL2V4dGVudHMuYwppbmRleCBlNzIzNWNhLi5lM2ZmNTZhIDEwMDY0NAotLS0gYS9mcy9oZnNwbHVzL2V4dGVudHMuYworKysgYi9mcy9oZnNwbHVzL2V4dGVudHMuYwpAQCAtMTEsNyArMTEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogCiAjaW5jbHVkZSAiaGZzcGx1c19mcy5oIgogI2luY2x1ZGUgImhmc3BsdXNfcmF3LmgiCmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaCBiL2ZzL2hmc3BsdXMvaGZzcGx1c19mcy5oCmluZGV4IDJiYzBjZGQuLmM2MGU1NjMgMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvaGZzcGx1c19mcy5oCisrKyBiL2ZzL2hmc3BsdXMvaGZzcGx1c19mcy5oCkBAIC0xMSw3ICsxMSw2IEBACiAjZGVmaW5lIF9MSU5VWF9IRlNQTFVTX0ZTX0gKIAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAjaW5jbHVkZSAiaGZzcGx1c19yYXcuaCIKIApkaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9pbm9kZS5jIGIvZnMvaGZzcGx1cy9pbm9kZS5jCmluZGV4IGYyMDU3NzMuLmZjOTg1ODMgMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvaW5vZGUuYworKysgYi9mcy9oZnNwbHVzL2lub2RlLmMKQEAgLTExLDcgKzExLDYgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9tcGFnZS5oPgogCiAjaW5jbHVkZSAiaGZzcGx1c19mcy5oIgpkaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9zdXBlci5jIGIvZnMvaGZzcGx1cy9zdXBlci5jCmluZGV4IDQ1MmZjMWYuLjBjZTFjNDUgMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvc3VwZXIuYworKysgYi9mcy9oZnNwbHVzL3N1cGVyLmMKQEAgLTE0LDcgKzE0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC92ZnMuaD4KICNpbmNsdWRlIDxsaW51eC9ubHMuaD4KIApkaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy93cmFwcGVyLmMgYi9mcy9oZnNwbHVzL3dyYXBwZXIuYwppbmRleCAwYzUxZDYzLi45NTQ1NWU4IDEwMDY0NAotLS0gYS9mcy9oZnNwbHVzL3dyYXBwZXIuYworKysgYi9mcy9oZnNwbHVzL3dyYXBwZXIuYwpAQCAtMTIsNyArMTIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2Nkcm9tLmg+CiAjaW5jbHVkZSA8bGludXgvZ2VuaGQuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgogCiAjaW5jbHVkZSAiaGZzcGx1c19mcy5oIgpkaWZmIC0tZ2l0IGEvZnMvaG9zdGZzL2hvc3Rmc19rZXJuLmMgYi9mcy9ob3N0ZnMvaG9zdGZzX2tlcm4uYwppbmRleCBhMzNmYjFkLi40Njg0ZWI3IDEwMDY0NAotLS0gYS9mcy9ob3N0ZnMvaG9zdGZzX2tlcm4uYworKysgYi9mcy9ob3N0ZnMvaG9zdGZzX2tlcm4uYwpAQCAtOCw3ICs4LDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CmRpZmYgLS1naXQgYS9mcy9ocGZzL2ZpbGUuYyBiL2ZzL2hwZnMvZmlsZS5jCmluZGV4IGFiMTQ0ZGEuLjdjOTk1YWMgMTAwNjQ0Ci0tLSBhL2ZzL2hwZnMvZmlsZS5jCisrKyBiL2ZzL2hwZnMvZmlsZS5jCkBAIC0xMTQsMTEgKzExNCw4IEBACiAJc3NpemVfdCByZXR2YWw7CiAKIAlyZXR2YWwgPSBnZW5lcmljX2ZpbGVfd3JpdGUoZmlsZSwgYnVmLCBjb3VudCwgcHBvcyk7Ci0JaWYgKHJldHZhbCA+IDApIHsKLQkJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOwotCQlpbm9kZS0+aV9tdGltZSA9IENVUlJFTlRfVElNRV9TRUM7Ci0JCWhwZnNfaShpbm9kZSktPmlfZGlydHkgPSAxOwotCX0KKwlpZiAocmV0dmFsID4gMCkKKwkJaHBmc19pKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKS0+aV9kaXJ0eSA9IDE7CiAJcmV0dXJuIHJldHZhbDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvaHVnZXRsYmZzL2lub2RlLmMgYi9mcy9odWdldGxiZnMvaW5vZGUuYwppbmRleCBlMDI2YzgwLi42NDk4M2FiIDEwMDY0NAotLS0gYS9mcy9odWdldGxiZnMvaW5vZGUuYworKysgYi9mcy9odWdldGxiZnMvaW5vZGUuYwpAQCAtNjMsNyArNjMsNyBAQAogICoKICAqIFJlc3VsdCBpcyBpbiBieXRlcyB0byBiZSBjb21wYXRpYmxlIHdpdGggaXNfaHVnZXBhZ2VfbWVtX2Vub3VnaCgpCiAgKi8KLXVuc2lnbmVkIGxvbmcKK3N0YXRpYyB1bnNpZ25lZCBsb25nCiBodWdlX3BhZ2VzX25lZWRlZChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJaW50IGk7CmRpZmYgLS1naXQgYS9mcy9pbm90aWZ5LmMgYi9mcy9pbm90aWZ5LmMKaW5kZXggOWZiYWViZi4uYmY3Y2UxZCAxMDA2NDQKLS0tIGEvZnMvaW5vdGlmeS5jCisrKyBiL2ZzL2lub3RpZnkuYwpAQCAtMzcyLDcgKzM3Miw3IEBACiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAJLyogeW91IGNhbiBvbmx5IHdhdGNoIGFuIGlub2RlIGlmIHlvdSBoYXZlIHJlYWQgcGVybWlzc2lvbnMgb24gaXQgKi8KLQllcnJvciA9IHBlcm1pc3Npb24obmQtPmRlbnRyeS0+ZF9pbm9kZSwgTUFZX1JFQUQsIE5VTEwpOworCWVycm9yID0gdmZzX3Blcm1pc3Npb24obmQsIE1BWV9SRUFEKTsKIAlpZiAoZXJyb3IpIAogCQlwYXRoX3JlbGVhc2UobmQpOwogCXJldHVybiBlcnJvcjsKZGlmZiAtLWdpdCBhL2ZzL2pmcy9uYW1laS5jIGIvZnMvamZzL25hbWVpLmMKaW5kZXggMWFiZTczNC4uNGFiYmU4NiAxMDA2NDQKLS0tIGEvZnMvamZzL25hbWVpLmMKKysrIGIvZnMvamZzL25hbWVpLmMKQEAgLTgyNyw2ICs4MjcsNyBAQAogCS8qIHVwZGF0ZSBvYmplY3QgaW5vZGUgKi8KIAlpcC0+aV9ubGluaysrOwkJLyogZm9yIG5ldyBsaW5rICovCiAJaXAtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7CisJZGlyLT5pX2N0aW1lID0gZGlyLT5pX210aW1lID0gQ1VSUkVOVF9USU1FOwogCW1hcmtfaW5vZGVfZGlydHkoZGlyKTsKIAlhdG9taWNfaW5jKCZpcC0+aV9jb3VudCk7CiAKQEAgLTEwMjQsNiArMTAyNSw4IEBACiAJaW5zZXJ0X2lub2RlX2hhc2goaXApOwogCW1hcmtfaW5vZGVfZGlydHkoaXApOwogCisJZGlwLT5pX2N0aW1lID0gZGlwLT5pX210aW1lID0gQ1VSUkVOVF9USU1FOworCW1hcmtfaW5vZGVfZGlydHkoZGlwKTsKIAkvKgogCSAqIGNvbW1pdCB1cGRhdGUgb2YgcGFyZW50IGRpcmVjdG9yeSBhbmQgbGluayBvYmplY3QKIAkgKi8KZGlmZiAtLWdpdCBhL2ZzL25hbWVpLmMgYi9mcy9uYW1laS5jCmluZGV4IGIzZjhhMTkuLjZkYmJkNDIgMTAwNjQ0Ci0tLSBhL2ZzL25hbWVpLmMKKysrIGIvZnMvbmFtZWkuYwpAQCAtMjU2LDYgKzI1NiwzOCBAQAogCXJldHVybiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKGlub2RlLCBtYXNrLCBuZCk7CiB9CiAKKy8qKgorICogdmZzX3Blcm1pc3Npb24gIC0gIGNoZWNrIGZvciBhY2Nlc3MgcmlnaHRzIHRvIGEgZ2l2ZW4gcGF0aAorICogQG5kOgkJbG9va3VwIHJlc3VsdCB0aGF0IGRlc2NyaWJlcyB0aGUgcGF0aAorICogQG1hc2s6CXJpZ2h0IHRvIGNoZWNrIGZvciAoJU1BWV9SRUFELCAlTUFZX1dSSVRFLCAlTUFZX0VYRUMpCisgKgorICogVXNlZCB0byBjaGVjayBmb3IgcmVhZC93cml0ZS9leGVjdXRlIHBlcm1pc3Npb25zIG9uIGEgcGF0aC4KKyAqIFdlIHVzZSAiZnN1aWQiIGZvciB0aGlzLCBsZXR0aW5nIHVzIHNldCBhcmJpdHJhcnkgcGVybWlzc2lvbnMKKyAqIGZvciBmaWxlc3lzdGVtIGFjY2VzcyB3aXRob3V0IGNoYW5naW5nIHRoZSAibm9ybWFsIiB1aWRzIHdoaWNoCisgKiBhcmUgdXNlZCBmb3Igb3RoZXIgdGhpbmdzLgorICovCitpbnQgdmZzX3Blcm1pc3Npb24oc3RydWN0IG5hbWVpZGF0YSAqbmQsIGludCBtYXNrKQoreworCXJldHVybiBwZXJtaXNzaW9uKG5kLT5kZW50cnktPmRfaW5vZGUsIG1hc2ssIG5kKTsKK30KKworLyoqCisgKiBmaWxlX3Blcm1pc3Npb24gIC0gIGNoZWNrIGZvciBhZGRpdGlvbmFsIGFjY2VzcyByaWdodHMgdG8gYSBnaXZlbiBmaWxlCisgKiBAZmlsZToJZmlsZSB0byBjaGVjayBhY2Nlc3MgcmlnaHRzIGZvcgorICogQG1hc2s6CXJpZ2h0IHRvIGNoZWNrIGZvciAoJU1BWV9SRUFELCAlTUFZX1dSSVRFLCAlTUFZX0VYRUMpCisgKgorICogVXNlZCB0byBjaGVjayBmb3IgcmVhZC93cml0ZS9leGVjdXRlIHBlcm1pc3Npb25zIG9uIGFuIGFscmVhZHkgb3BlbmVkCisgKiBmaWxlLgorICoKKyAqIE5vdGU6CisgKglEbyBub3QgdXNlIHRoaXMgZnVuY3Rpb24gaW4gbmV3IGNvZGUuICBBbGwgYWNjZXNzIGNoZWNrcyBzaG91bGQKKyAqCWJlIGRvbmUgdXNpbmcgdmZzX3Blcm1pc3Npb24oKS4KKyAqLworaW50IGZpbGVfcGVybWlzc2lvbihzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1hc2spCit7CisJcmV0dXJuIHBlcm1pc3Npb24oZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUsIG1hc2ssIE5VTEwpOworfQorCiAvKgogICogZ2V0X3dyaXRlX2FjY2VzcygpIGdldHMgd3JpdGUgcGVybWlzc2lvbiBmb3IgYSBmaWxlLgogICogcHV0X3dyaXRlX2FjY2VzcygpIHJlbGVhc2VzIHRoaXMgd3JpdGUgcGVybWlzc2lvbi4KQEAgLTc2NSw5ICs3OTcsOCBAQAogCiAJCW5kLT5mbGFncyB8PSBMT09LVVBfQ09OVElOVUU7CiAJCWVyciA9IGV4ZWNfcGVybWlzc2lvbl9saXRlKGlub2RlLCBuZCk7Ci0JCWlmIChlcnIgPT0gLUVBR0FJTikgeyAKLQkJCWVyciA9IHBlcm1pc3Npb24oaW5vZGUsIE1BWV9FWEVDLCBuZCk7Ci0JCX0KKwkJaWYgKGVyciA9PSAtRUFHQUlOKQorCQkJZXJyID0gdmZzX3Blcm1pc3Npb24obmQsIE1BWV9FWEVDKTsKICAJCWlmIChlcnIpCiAJCQlicmVhazsKIApAQCAtMTEwOSw4ICsxMTQwLDkgQEAKICAqIEBvcGVuX2ZsYWdzOiBvcGVuIGludGVudCBmbGFncwogICogQGNyZWF0ZV9tb2RlOiBjcmVhdGUgaW50ZW50IGZsYWdzCiAgKi8KLWludCBwYXRoX2xvb2t1cF9jcmVhdGUoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgaW50IGxvb2t1cF9mbGFncywKLQkJc3RydWN0IG5hbWVpZGF0YSAqbmQsIGludCBvcGVuX2ZsYWdzLCBpbnQgY3JlYXRlX21vZGUpCitzdGF0aWMgaW50IHBhdGhfbG9va3VwX2NyZWF0ZShjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQgbG9va3VwX2ZsYWdzLAorCQkJICAgICAgc3RydWN0IG5hbWVpZGF0YSAqbmQsIGludCBvcGVuX2ZsYWdzLAorCQkJICAgICAgaW50IGNyZWF0ZV9tb2RlKQogewogCXJldHVybiBfX3BhdGhfbG9va3VwX2ludGVudF9vcGVuKG5hbWUsIGxvb2t1cF9mbGFnc3xMT09LVVBfQ1JFQVRFLCBuZCwKIAkJCW9wZW5fZmxhZ3MsIGNyZWF0ZV9tb2RlKTsKQEAgLTExNzMsOSArMTIwNSw5IEBACiAJcmV0dXJuIGRlbnRyeTsKIH0KIAotc3RydWN0IGRlbnRyeSAqIGxvb2t1cF9oYXNoKHN0cnVjdCBxc3RyICpuYW1lLCBzdHJ1Y3QgZGVudHJ5ICogYmFzZSkKK3N0cnVjdCBkZW50cnkgKiBsb29rdXBfaGFzaChzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKIHsKLQlyZXR1cm4gX19sb29rdXBfaGFzaChuYW1lLCBiYXNlLCBOVUxMKTsKKwlyZXR1cm4gX19sb29rdXBfaGFzaCgmbmQtPmxhc3QsIG5kLT5kZW50cnksIG5kKTsKIH0KIAogLyogU01QLXNhZmUgKi8KQEAgLTExOTksNyArMTIzMSw3IEBACiAJfQogCXRoaXMuaGFzaCA9IGVuZF9uYW1lX2hhc2goaGFzaCk7CiAKLQlyZXR1cm4gbG9va3VwX2hhc2goJnRoaXMsIGJhc2UpOworCXJldHVybiBfX2xvb2t1cF9oYXNoKCZ0aGlzLCBiYXNlLCBOVUxMKTsKIGFjY2VzczoKIAlyZXR1cm4gRVJSX1BUUigtRUFDQ0VTKTsKIH0KQEAgLTE0MDcsNyArMTQzOSw3IEBACiAJaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkgJiYgKGZsYWcgJiBGTU9ERV9XUklURSkpCiAJCXJldHVybiAtRUlTRElSOwogCi0JZXJyb3IgPSBwZXJtaXNzaW9uKGlub2RlLCBhY2NfbW9kZSwgbmQpOworCWVycm9yID0gdmZzX3Blcm1pc3Npb24obmQsIGFjY19tb2RlKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIApAQCAtMTUzMiw3ICsxNTY0LDcgQEAKIAlkaXIgPSBuZC0+ZGVudHJ5OwogCW5kLT5mbGFncyAmPSB+TE9PS1VQX1BBUkVOVDsKIAlkb3duKCZkaXItPmRfaW5vZGUtPmlfc2VtKTsKLQlwYXRoLmRlbnRyeSA9IF9fbG9va3VwX2hhc2goJm5kLT5sYXN0LCBuZC0+ZGVudHJ5LCBuZCk7CisJcGF0aC5kZW50cnkgPSBsb29rdXBfaGFzaChuZCk7CiAJcGF0aC5tbnQgPSBuZC0+bW50OwogCiBkb19sYXN0OgpAQCAtMTYzNCw3ICsxNjY2LDcgQEAKIAl9CiAJZGlyID0gbmQtPmRlbnRyeTsKIAlkb3duKCZkaXItPmRfaW5vZGUtPmlfc2VtKTsKLQlwYXRoLmRlbnRyeSA9IF9fbG9va3VwX2hhc2goJm5kLT5sYXN0LCBuZC0+ZGVudHJ5LCBuZCk7CisJcGF0aC5kZW50cnkgPSBsb29rdXBfaGFzaChuZCk7CiAJcGF0aC5tbnQgPSBuZC0+bW50OwogCV9fcHV0bmFtZShuZC0+bGFzdC5uYW1lKTsKIAlnb3RvIGRvX2xhc3Q7CkBAIC0xNjY2LDcgKzE2OTgsNyBAQAogCS8qCiAJICogRG8gdGhlIGZpbmFsIGxvb2t1cC4KIAkgKi8KLQlkZW50cnkgPSBsb29rdXBfaGFzaCgmbmQtPmxhc3QsIG5kLT5kZW50cnkpOworCWRlbnRyeSA9IGxvb2t1cF9oYXNoKG5kKTsKIAlpZiAoSVNfRVJSKGRlbnRyeSkpCiAJCWdvdG8gZmFpbDsKIApAQCAtMTkwMSw3ICsxOTMzLDcgQEAKIAkJCWdvdG8gZXhpdDE7CiAJfQogCWRvd24oJm5kLmRlbnRyeS0+ZF9pbm9kZS0+aV9zZW0pOwotCWRlbnRyeSA9IGxvb2t1cF9oYXNoKCZuZC5sYXN0LCBuZC5kZW50cnkpOworCWRlbnRyeSA9IGxvb2t1cF9oYXNoKCZuZCk7CiAJZXJyb3IgPSBQVFJfRVJSKGRlbnRyeSk7CiAJaWYgKCFJU19FUlIoZGVudHJ5KSkgewogCQllcnJvciA9IHZmc19ybWRpcihuZC5kZW50cnktPmRfaW5vZGUsIGRlbnRyeSk7CkBAIC0xOTcwLDcgKzIwMDIsNyBAQAogCWlmIChuZC5sYXN0X3R5cGUgIT0gTEFTVF9OT1JNKQogCQlnb3RvIGV4aXQxOwogCWRvd24oJm5kLmRlbnRyeS0+ZF9pbm9kZS0+aV9zZW0pOwotCWRlbnRyeSA9IGxvb2t1cF9oYXNoKCZuZC5sYXN0LCBuZC5kZW50cnkpOworCWRlbnRyeSA9IGxvb2t1cF9oYXNoKCZuZCk7CiAJZXJyb3IgPSBQVFJfRVJSKGRlbnRyeSk7CiAJaWYgKCFJU19FUlIoZGVudHJ5KSkgewogCQkvKiBXaHkgbm90IGJlZm9yZT8gQmVjYXVzZSB3ZSB3YW50IGNvcnJlY3QgZXJyb3IgdmFsdWUgKi8KQEAgLTIzMTMsNyArMjM0NSw3IEBACiAKIAl0cmFwID0gbG9ja19yZW5hbWUobmV3X2Rpciwgb2xkX2Rpcik7CiAKLQlvbGRfZGVudHJ5ID0gbG9va3VwX2hhc2goJm9sZG5kLmxhc3QsIG9sZF9kaXIpOworCW9sZF9kZW50cnkgPSBsb29rdXBfaGFzaCgmb2xkbmQpOwogCWVycm9yID0gUFRSX0VSUihvbGRfZGVudHJ5KTsKIAlpZiAoSVNfRVJSKG9sZF9kZW50cnkpKQogCQlnb3RvIGV4aXQzOwpAQCAtMjMzMyw3ICsyMzY1LDcgQEAKIAllcnJvciA9IC1FSU5WQUw7CiAJaWYgKG9sZF9kZW50cnkgPT0gdHJhcCkKIAkJZ290byBleGl0NDsKLQluZXdfZGVudHJ5ID0gbG9va3VwX2hhc2goJm5ld25kLmxhc3QsIG5ld19kaXIpOworCW5ld19kZW50cnkgPSBsb29rdXBfaGFzaCgmbmV3bmQpOwogCWVycm9yID0gUFRSX0VSUihuZXdfZGVudHJ5KTsKIAlpZiAoSVNfRVJSKG5ld19kZW50cnkpKQogCQlnb3RvIGV4aXQ0OwpAQCAtMjUzNiw2ICsyNTY4LDggQEAKIEVYUE9SVF9TWU1CT0wocGF0aF9yZWxlYXNlKTsKIEVYUE9SVF9TWU1CT0wocGF0aF93YWxrKTsKIEVYUE9SVF9TWU1CT0wocGVybWlzc2lvbik7CitFWFBPUlRfU1lNQk9MKHZmc19wZXJtaXNzaW9uKTsKK0VYUE9SVF9TWU1CT0woZmlsZV9wZXJtaXNzaW9uKTsKIEVYUE9SVF9TWU1CT0wodW5sb2NrX3JlbmFtZSk7CiBFWFBPUlRfU1lNQk9MKHZmc19jcmVhdGUpOwogRVhQT1JUX1NZTUJPTCh2ZnNfZm9sbG93X2xpbmspOwpkaWZmIC0tZ2l0IGEvZnMvbmFtZXNwYWNlLmMgYi9mcy9uYW1lc3BhY2UuYwppbmRleCBjYWE5MTg3Li4yMDE5ODk5ZiAxMDA2NDQKLS0tIGEvZnMvbmFtZXNwYWNlLmMKKysrIGIvZnMvbmFtZXNwYWNlLmMKQEAgLTYzNyw3ICs2MzcsNyBAQAogCQlpZiAoY3VycmVudC0+dWlkICE9IG5kLT5kZW50cnktPmRfaW5vZGUtPmlfdWlkKQogCQkJcmV0dXJuIC1FUEVSTTsKIAl9Ci0JaWYgKHBlcm1pc3Npb24obmQtPmRlbnRyeS0+ZF9pbm9kZSwgTUFZX1dSSVRFLCBuZCkpCisJaWYgKHZmc19wZXJtaXNzaW9uKG5kLCBNQVlfV1JJVEUpKQogCQlyZXR1cm4gLUVQRVJNOwogCXJldHVybiAwOwogI2VuZGlmCmRpZmYgLS1naXQgYS9mcy9uY3Bmcy9pb2N0bC5jIGIvZnMvbmNwZnMvaW9jdGwuYwppbmRleCA4OGRmNzkzLi5mZDNlZmRjIDEwMDY0NAotLS0gYS9mcy9uY3Bmcy9pb2N0bC5jCisrKyBiL2ZzL25jcGZzL2lvY3RsLmMKQEAgLTMwLDExICszMCwxMyBAQAogI2RlZmluZSBOQ1BfUEFDS0VUX1NJWkVfSU5URVJOQUwgNjU1MzYKIAogc3RhdGljIGludAotbmNwX2dldF9mc19pbmZvKHN0cnVjdCBuY3Bfc2VydmVyKiBzZXJ2ZXIsIHN0cnVjdCBpbm9kZSogaW5vZGUsIHN0cnVjdCBuY3BfZnNfaW5mbyBfX3VzZXIgKmFyZykKK25jcF9nZXRfZnNfaW5mbyhzdHJ1Y3QgbmNwX3NlcnZlciAqIHNlcnZlciwgc3RydWN0IGZpbGUgKmZpbGUsCisJCXN0cnVjdCBuY3BfZnNfaW5mbyBfX3VzZXIgKmFyZykKIHsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CiAJc3RydWN0IG5jcF9mc19pbmZvIGluZm87CiAKLQlpZiAoKHBlcm1pc3Npb24oaW5vZGUsIE1BWV9XUklURSwgTlVMTCkgIT0gMCkKKwlpZiAoKGZpbGVfcGVybWlzc2lvbihmaWxlLCBNQVlfV1JJVEUpICE9IDApCiAJICAgICYmIChjdXJyZW50LT51aWQgIT0gc2VydmVyLT5tLm1vdW50ZWRfdWlkKSkgewogCQlyZXR1cm4gLUVBQ0NFUzsKIAl9CkBAIC01OCwxMSArNjAsMTMgQEAKIH0KIAogc3RhdGljIGludAotbmNwX2dldF9mc19pbmZvX3YyKHN0cnVjdCBuY3Bfc2VydmVyKiBzZXJ2ZXIsIHN0cnVjdCBpbm9kZSogaW5vZGUsIHN0cnVjdCBuY3BfZnNfaW5mb192MiBfX3VzZXIgKiBhcmcpCituY3BfZ2V0X2ZzX2luZm9fdjIoc3RydWN0IG5jcF9zZXJ2ZXIgKiBzZXJ2ZXIsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkgICBzdHJ1Y3QgbmNwX2ZzX2luZm9fdjIgX191c2VyICogYXJnKQogeworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKIAlzdHJ1Y3QgbmNwX2ZzX2luZm9fdjIgaW5mbzI7CiAKLQlpZiAoKHBlcm1pc3Npb24oaW5vZGUsIE1BWV9XUklURSwgTlVMTCkgIT0gMCkKKwlpZiAoKGZpbGVfcGVybWlzc2lvbihmaWxlLCBNQVlfV1JJVEUpICE9IDApCiAJICAgICYmIChjdXJyZW50LT51aWQgIT0gc2VydmVyLT5tLm1vdW50ZWRfdWlkKSkgewogCQlyZXR1cm4gLUVBQ0NFUzsKIAl9CkBAIC0xOTAsNyArMTk0LDcgQEAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgTkNQX0lPQ19OQ1BSRVFVRVNUOgogCi0JCWlmICgocGVybWlzc2lvbihpbm9kZSwgTUFZX1dSSVRFLCBOVUxMKSAhPSAwKQorCQlpZiAoKGZpbGVfcGVybWlzc2lvbihmaWxwLCBNQVlfV1JJVEUpICE9IDApCiAJCSAgICAmJiAoY3VycmVudC0+dWlkICE9IHNlcnZlci0+bS5tb3VudGVkX3VpZCkpIHsKIAkJCXJldHVybiAtRUFDQ0VTOwogCQl9CkBAIC0yNDUsMTYgKzI0OSwxNiBAQAogCQlyZXR1cm4gbmNwX2Nvbm5fbG9nZ2VkX2luKGlub2RlLT5pX3NiKTsKIAogCWNhc2UgTkNQX0lPQ19HRVRfRlNfSU5GTzoKLQkJcmV0dXJuIG5jcF9nZXRfZnNfaW5mbyhzZXJ2ZXIsIGlub2RlLCBhcmdwKTsKKwkJcmV0dXJuIG5jcF9nZXRfZnNfaW5mbyhzZXJ2ZXIsIGZpbHAsIGFyZ3ApOwogCiAJY2FzZSBOQ1BfSU9DX0dFVF9GU19JTkZPX1YyOgotCQlyZXR1cm4gbmNwX2dldF9mc19pbmZvX3YyKHNlcnZlciwgaW5vZGUsIGFyZ3ApOworCQlyZXR1cm4gbmNwX2dldF9mc19pbmZvX3YyKHNlcnZlciwgZmlscCwgYXJncCk7CiAKIAljYXNlIE5DUF9JT0NfR0VUTU9VTlRVSUQyOgogCQl7CiAJCQl1bnNpZ25lZCBsb25nIHRtcCA9IHNlcnZlci0+bS5tb3VudGVkX3VpZDsKIAotCQkJaWYgKCAgIChwZXJtaXNzaW9uKGlub2RlLCBNQVlfUkVBRCwgTlVMTCkgIT0gMCkKKwkJCWlmICgoZmlsZV9wZXJtaXNzaW9uKGZpbHAsIE1BWV9SRUFEKSAhPSAwKQogCQkJICAgICYmIChjdXJyZW50LT51aWQgIT0gc2VydmVyLT5tLm1vdW50ZWRfdWlkKSkKIAkJCXsKIAkJCQlyZXR1cm4gLUVBQ0NFUzsKQEAgLTI2OCw3ICsyNzIsNyBAQAogCQl7CiAJCQlzdHJ1Y3QgbmNwX3NldHJvb3RfaW9jdGwgc3I7CiAKLQkJCWlmICggICAocGVybWlzc2lvbihpbm9kZSwgTUFZX1JFQUQsIE5VTEwpICE9IDApCisJCQlpZiAoKGZpbGVfcGVybWlzc2lvbihmaWxwLCBNQVlfUkVBRCkgIT0gMCkKIAkJCSAgICAmJiAoY3VycmVudC0+dWlkICE9IHNlcnZlci0+bS5tb3VudGVkX3VpZCkpCiAJCQl7CiAJCQkJcmV0dXJuIC1FQUNDRVM7CkBAIC0zNDMsNyArMzQ3LDcgQEAKIAogI2lmZGVmIENPTkZJR19OQ1BGU19QQUNLRVRfU0lHTklORwkKIAljYXNlIE5DUF9JT0NfU0lHTl9JTklUOgotCQlpZiAoKHBlcm1pc3Npb24oaW5vZGUsIE1BWV9XUklURSwgTlVMTCkgIT0gMCkKKwkJaWYgKChmaWxlX3Blcm1pc3Npb24oZmlscCwgTUFZX1dSSVRFKSAhPSAwKQogCQkgICAgJiYgKGN1cnJlbnQtPnVpZCAhPSBzZXJ2ZXItPm0ubW91bnRlZF91aWQpKQogCQl7CiAJCQlyZXR1cm4gLUVBQ0NFUzsKQEAgLTM2Niw3ICszNzAsNyBAQAogCQlyZXR1cm4gMDsJCQogCQkKICAgICAgICAgY2FzZSBOQ1BfSU9DX1NJR05fV0FOVEVEOgotCQlpZiAoICAgKHBlcm1pc3Npb24oaW5vZGUsIE1BWV9SRUFELCBOVUxMKSAhPSAwKQorCQlpZiAoKGZpbGVfcGVybWlzc2lvbihmaWxwLCBNQVlfUkVBRCkgIT0gMCkKIAkJICAgICYmIChjdXJyZW50LT51aWQgIT0gc2VydmVyLT5tLm1vdW50ZWRfdWlkKSkKIAkJewogCQkJcmV0dXJuIC1FQUNDRVM7CkBAIC0zNzksNyArMzgzLDcgQEAKIAkJewogCQkJaW50IG5ld3N0YXRlOwogCi0JCQlpZiAoICAgKHBlcm1pc3Npb24oaW5vZGUsIE1BWV9XUklURSwgTlVMTCkgIT0gMCkKKwkJCWlmICgoZmlsZV9wZXJtaXNzaW9uKGZpbHAsIE1BWV9XUklURSkgIT0gMCkKIAkJCSAgICAmJiAoY3VycmVudC0+dWlkICE9IHNlcnZlci0+bS5tb3VudGVkX3VpZCkpCiAJCQl7CiAJCQkJcmV0dXJuIC1FQUNDRVM7CkBAIC00MDAsNyArNDA0LDcgQEAKIAogI2lmZGVmIENPTkZJR19OQ1BGU19JT0NUTF9MT0NLSU5HCiAJY2FzZSBOQ1BfSU9DX0xPQ0tVTkxPQ0s6Ci0JCWlmICggICAocGVybWlzc2lvbihpbm9kZSwgTUFZX1dSSVRFLCBOVUxMKSAhPSAwKQorCQlpZiAoKGZpbGVfcGVybWlzc2lvbihmaWxwLCBNQVlfV1JJVEUpICE9IDApCiAJCSAgICAmJiAoY3VycmVudC0+dWlkICE9IHNlcnZlci0+bS5tb3VudGVkX3VpZCkpCiAJCXsKIAkJCXJldHVybiAtRUFDQ0VTOwpAQCAtNjA1LDcgKzYwOSw3IEBACiAjZW5kaWYgLyogQ09ORklHX05DUEZTX05MUyAqLwogCiAJY2FzZSBOQ1BfSU9DX1NFVERFTlRSWVRUTDoKLQkJaWYgKChwZXJtaXNzaW9uKGlub2RlLCBNQVlfV1JJVEUsIE5VTEwpICE9IDApICYmCisJCWlmICgoZmlsZV9wZXJtaXNzaW9uKGZpbHAsIE1BWV9XUklURSkgIT0gMCkgJiYKIAkJCQkgKGN1cnJlbnQtPnVpZCAhPSBzZXJ2ZXItPm0ubW91bnRlZF91aWQpKQogCQkJcmV0dXJuIC1FQUNDRVM7CiAJCXsKQEAgLTYzNSw3ICs2MzksNyBAQAogICAgICAgICAgICBzbyB3ZSBoYXZlIHRoaXMgb3V0IG9mIHN3aXRjaCAqLwogCWlmIChjbWQgPT0gTkNQX0lPQ19HRVRNT1VOVFVJRCkgewogCQlfX2tlcm5lbF91aWRfdCB1aWQgPSAwOwotCQlpZiAoKHBlcm1pc3Npb24oaW5vZGUsIE1BWV9SRUFELCBOVUxMKSAhPSAwKQorCQlpZiAoKGZpbGVfcGVybWlzc2lvbihmaWxwLCBNQVlfUkVBRCkgIT0gMCkKIAkJICAgICYmIChjdXJyZW50LT51aWQgIT0gc2VydmVyLT5tLm1vdW50ZWRfdWlkKSkgewogCQkJcmV0dXJuIC1FQUNDRVM7CiAJCX0KZGlmZiAtLWdpdCBhL2ZzL29wZW4uYyBiL2ZzL29wZW4uYwppbmRleCA2ZTgxMzY3Li5mNTNhNWI5IDEwMDY0NAotLS0gYS9mcy9vcGVuLmMKKysrIGIvZnMvb3Blbi5jCkBAIC0yNDAsNyArMjQwLDcgQEAKIAlpZiAoIVNfSVNSRUcoaW5vZGUtPmlfbW9kZSkpCiAJCWdvdG8gZHB1dF9hbmRfb3V0OwogCi0JZXJyb3IgPSBwZXJtaXNzaW9uKGlub2RlLE1BWV9XUklURSwmbmQpOworCWVycm9yID0gdmZzX3Blcm1pc3Npb24oJm5kLCBNQVlfV1JJVEUpOwogCWlmIChlcnJvcikKIAkJZ290byBkcHV0X2FuZF9vdXQ7CiAKQEAgLTM5NCw3ICszOTQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgZ290byBkcHV0X2FuZF9vdXQ7CiAKIAkJaWYgKGN1cnJlbnQtPmZzdWlkICE9IGlub2RlLT5pX3VpZCAmJgotCQkgICAgKGVycm9yID0gcGVybWlzc2lvbihpbm9kZSxNQVlfV1JJVEUsJm5kKSkgIT0gMCkKKwkJICAgIChlcnJvciA9IHZmc19wZXJtaXNzaW9uKCZuZCwgTUFZX1dSSVRFKSkgIT0gMCkKIAkJCWdvdG8gZHB1dF9hbmRfb3V0OwogCX0KIAlkb3duKCZpbm9kZS0+aV9zZW0pOwpAQCAtNDQ3LDcgKzQ0Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGRwdXRfYW5kX291dDsKIAogCQlpZiAoY3VycmVudC0+ZnN1aWQgIT0gaW5vZGUtPmlfdWlkICYmCi0JCSAgICAoZXJyb3IgPSBwZXJtaXNzaW9uKGlub2RlLE1BWV9XUklURSwmbmQpKSAhPSAwKQorCQkgICAgKGVycm9yID0gdmZzX3Blcm1pc3Npb24oJm5kLCBNQVlfV1JJVEUpKSAhPSAwKQogCQkJZ290byBkcHV0X2FuZF9vdXQ7CiAJfQogCWRvd24oJmlub2RlLT5pX3NlbSk7CkBAIC01MDYsNyArNTA2LDcgQEAKIAogCXJlcyA9IF9fdXNlcl93YWxrKGZpbGVuYW1lLCBMT09LVVBfRk9MTE9XfExPT0tVUF9BQ0NFU1MsICZuZCk7CiAJaWYgKCFyZXMpIHsKLQkJcmVzID0gcGVybWlzc2lvbihuZC5kZW50cnktPmRfaW5vZGUsIG1vZGUsICZuZCk7CisJCXJlcyA9IHZmc19wZXJtaXNzaW9uKCZuZCwgbW9kZSk7CiAJCS8qIFN1UyB2MiByZXF1aXJlcyB3ZSByZXBvcnQgYSByZWFkIG9ubHkgZnMgdG9vICovCiAJCWlmKCFyZXMgJiYgKG1vZGUgJiBTX0lXT1RIKSAmJiBJU19SRE9OTFkobmQuZGVudHJ5LT5kX2lub2RlKQogCQkgICAmJiAhc3BlY2lhbF9maWxlKG5kLmRlbnRyeS0+ZF9pbm9kZS0+aV9tb2RlKSkKQEAgLTUzMCw3ICs1MzAsNyBAQAogCWlmIChlcnJvcikKIAkJZ290byBvdXQ7CiAKLQllcnJvciA9IHBlcm1pc3Npb24obmQuZGVudHJ5LT5kX2lub2RlLE1BWV9FWEVDLCZuZCk7CisJZXJyb3IgPSB2ZnNfcGVybWlzc2lvbigmbmQsIE1BWV9FWEVDKTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gZHB1dF9hbmRfb3V0OwogCkBAIC01NjMsNyArNTYzLDcgQEAKIAlpZiAoIVNfSVNESVIoaW5vZGUtPmlfbW9kZSkpCiAJCWdvdG8gb3V0X3B1dGY7CiAKLQllcnJvciA9IHBlcm1pc3Npb24oaW5vZGUsIE1BWV9FWEVDLCBOVUxMKTsKKwllcnJvciA9IGZpbGVfcGVybWlzc2lvbihmaWxlLCBNQVlfRVhFQyk7CiAJaWYgKCFlcnJvcikKIAkJc2V0X2ZzX3B3ZChjdXJyZW50LT5mcywgbW50LCBkZW50cnkpOwogb3V0X3B1dGY6CkBAIC01ODEsNyArNTgxLDcgQEAKIAlpZiAoZXJyb3IpCiAJCWdvdG8gb3V0OwogCi0JZXJyb3IgPSBwZXJtaXNzaW9uKG5kLmRlbnRyeS0+ZF9pbm9kZSxNQVlfRVhFQywmbmQpOworCWVycm9yID0gdmZzX3Blcm1pc3Npb24oJm5kLCBNQVlfRVhFQyk7CiAJaWYgKGVycm9yKQogCQlnb3RvIGRwdXRfYW5kX291dDsKIApkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvZmlsZS5jIGIvZnMvcmVpc2VyZnMvZmlsZS5jCmluZGV4IGMyMGJhYmQuLjc4OTJhODYgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL2ZpbGUuYworKysgYi9mcy9yZWlzZXJmcy9maWxlLmMKQEAgLTI1MSwxMiArMjUxLDEyIEBACiAJCQkJCQkgICAgICAgYmxvY2tzX3RvX2FsbG9jYXRlLAogCQkJCQkJICAgICAgIGJsb2Nrc190b19hbGxvY2F0ZSk7CiAJCQlpZiAocmVzICE9IENBUlJZX09OKSB7Ci0JCQkJcmVzID0gLUVOT1NQQzsKKwkJCQlyZXMgPSByZXMgPT0gUVVPVEFfRVhDRUVERUQgPyAtRURRVU9UIDogLUVOT1NQQzsKIAkJCQlwYXRocmVsc2UoJnBhdGgpOwogCQkJCWdvdG8gZXJyb3JfZXhpdDsKIAkJCX0KIAkJfSBlbHNlIHsKLQkJCXJlcyA9IC1FTk9TUEM7CisJCQlyZXMgPSByZXMgPT0gUVVPVEFfRVhDRUVERUQgPyAtRURRVU9UIDogLUVOT1NQQzsKIAkJCXBhdGhyZWxzZSgmcGF0aCk7CiAJCQlnb3RvIGVycm9yX2V4aXQ7CiAJCX0KZGlmZiAtLWdpdCBhL2ZzL3VkZi9maWxlLmMgYi9mcy91ZGYvZmlsZS5jCmluZGV4IGJiNDBkNjMuLjAxZjUyMGMgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi9maWxlLmMKKysrIGIvZnMvdWRmL2ZpbGUuYwpAQCAtMTg2LDcgKzE4Niw3IEBACiB7CiAJaW50IHJlc3VsdCA9IC1FSU5WQUw7CiAKLQlpZiAoIHBlcm1pc3Npb24oaW5vZGUsIE1BWV9SRUFELCBOVUxMKSAhPSAwICkKKwlpZiAoIGZpbGVfcGVybWlzc2lvbihmaWxwLCBNQVlfUkVBRCkgIT0gMCApCiAJewogCQl1ZGZfZGVidWcoIm5vIHBlcm1pc3Npb24gdG8gYWNjZXNzIGlub2RlICVsdVxuIiwKIAkJCQkJCWlub2RlLT5pX2lubyk7CmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19saW51eC5oIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfbGludXguaAppbmRleCA0NGZlZDEwLi5kOGUyMWJhIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19saW51eC5oCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2xpbnV4LmgKQEAgLTcyLDcgKzcyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvc29ydC5oPgogCiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnMuaCBiL2ZzL3hmcy94ZnMuaAppbmRleCA5OWI1MGQyLi4xYTQ4ZGJiIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzLmgKKysrIGIvZnMveGZzL3hmcy5oCkBAIC0xNywxMiArMTcsNSBAQAogICovCiAjaWZuZGVmIF9fWEZTX0hfXwogI2RlZmluZSBfX1hGU19IX18KLQotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDApCiAjaW5jbHVkZSA8bGludXgtMi42L3hmc19saW51eC5oPgotI2Vsc2UKLSNpbmNsdWRlIDxsaW51eC0yLjQveGZzX2xpbnV4Lmg+Ci0jZW5kaWYKLQogI2VuZGlmCS8qIF9fWEZTX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19kbWFwaS5oIGIvZnMveGZzL3hmc19kbWFwaS5oCmluZGV4IDVhNWM3YTYuLjg2NGJmNjkgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZG1hcGkuaAorKysgYi9mcy94ZnMveGZzX2RtYXBpLmgKQEAgLTE4LDYgKzE4LDcgQEAKICNpZm5kZWYgX19YRlNfRE1BUElfSF9fCiAjZGVmaW5lIF9fWEZTX0RNQVBJX0hfXwogCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogLyoJVmFsdWVzIHVzZWQgdG8gZGVmaW5lIHRoZSBvbi1kaXNrIHZlcnNpb24gb2YgZG1fYXR0cm5hbWVfdC4gQWxsCiAgKglvbi1kaXNrIGF0dHJpYnV0ZSBuYW1lcyBzdGFydCB3aXRoIHRoZSA4LWJ5dGUgc3RyaW5nICJTR0lfRE1JXyIuCiAgKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvaWRlLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9pZGUuaAppbmRleCA2ODkzNGEyLi42MTI2YWZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hbHBoYS9pZGUuaAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9pZGUuaApAQCAtMTUsMTAgKzE1LDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCi0jaWZuZGVmIE1BWF9IV0lGUwotI2RlZmluZSBNQVhfSFdJRlMJQ09ORklHX0lERV9NQVhfSFdJRlMKLSNlbmRpZgotCiAjZGVmaW5lIElERV9BUkNIX09CU09MRVRFX0RFRkFVTFRTCiAKIHN0YXRpYyBpbmxpbmUgaW50IGlkZV9kZWZhdWx0X2lycSh1bnNpZ25lZCBsb25nIGJhc2UpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvaGFyZHdhcmUuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9oYXJkd2FyZS5oCmluZGV4IDU1ZDg1ZWUuLmNmYjQxM2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9oYXJkd2FyZS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9oYXJkd2FyZS5oCkBAIC00NCw1ICs0NCw2IEBACiAjaW5jbHVkZSAiaXhkcDQyNS5oIgogI2luY2x1ZGUgImNveW90ZS5oIgogI2luY2x1ZGUgInBycG1jMTEwMC5oIgorI2luY2x1ZGUgIm5zbHUyLmgiCiAKICNlbmRpZiAgLyogX0FTTV9BUkNIX0hBUkRXQVJFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9pcnFzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvaXJxcy5oCmluZGV4IGNhODA4MjguLjJjZjQ5MzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9pcnFzLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwNHh4L2lycXMuaApAQCAtOTMsNCArOTMsMTEgQEAKICNkZWZpbmUJSVJRX0NPWU9URV9QQ0lfU0xPVDEJSVJRX0lYUDRYWF9HUElPMTEKICNkZWZpbmUJSVJRX0NPWU9URV9JREUJCUlSUV9JWFA0WFhfR1BJTzUKIAorLyoKKyAqIE5TTFUyIGJvYXJkIElSUXMKKyAqLworI2RlZmluZSAgICAgICAgSVJRX05TTFUyX1BDSV9JTlRBICAgICAgSVJRX0lYUDRYWF9HUElPMTEKKyNkZWZpbmUgICAgICAgIElSUV9OU0xVMl9QQ0lfSU5UQiAgICAgIElSUV9JWFA0WFhfR1BJTzEwCisjZGVmaW5lICAgICAgICBJUlFfTlNMVTJfUENJX0lOVEMgICAgICBJUlFfSVhQNFhYX0dQSU85CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwNHh4L25zbHUyLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvbnNsdTIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGIzNDdhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwNHh4L25zbHUyLmgKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9uc2x1Mi5oCisgKgorICogTlNMVTIgcGxhdGZvcm0gc3BlY2lmaWMgZGVmaW5pdGlvbnMKKyAqCisgKiBBdXRob3I6IE1hcmsgUmFrZXMgPG1yYWtlcyBBVCBtYWMuY29tPgorICogTWFpbnRhaW5lcnM6IGh0dHA6Ly93d3cubnNsdTItbGludXgub3JnCisgKgorICogYmFzZWQgb24gaXhkcDQyNS5oOgorICoJQ29weXJpZ2h0IDIwMDQgKGMpIE1vbnRhVmlzdGEsIFNvZnR3YXJlLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX0hBUkRXQVJFX0hfXworI2Vycm9yICJEbyBub3QgaW5jbHVkZSB0aGlzIGRpcmVjdGx5LCBpbnN0ZWFkICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4iCisjZW5kaWYKKworI2RlZmluZSBOU0xVMl9GTEFTSF9CQVNFCUlYUDRYWF9FWFBfQlVTX0NTMF9CQVNFX1BIWVMKKyNkZWZpbmUgTlNMVTJfRkxBU0hfU0laRQlJWFA0WFhfRVhQX0JVU19DU1hfUkVHSU9OX1NJWkUKKworI2RlZmluZSBOU0xVMl9TREFfUElOCQk3CisjZGVmaW5lIE5TTFUyX1NDTF9QSU4JCTYKKworLyoKKyAqIE5TTFUyIFBDSSBJUlFzCisgKi8KKyNkZWZpbmUgTlNMVTJfUENJX01BWF9ERVYJMworI2RlZmluZSBOU0xVMl9QQ0lfSVJRX0xJTkVTCTMKKworCisvKiBQQ0kgY29udHJvbGxlciBHUElPIHRvIElSUSBwaW4gbWFwcGluZ3MgKi8KKyNkZWZpbmUgTlNMVTJfUENJX0lOVEFfUElOCTExCisjZGVmaW5lIE5TTFUyX1BDSV9JTlRCX1BJTgkxMAorI2RlZmluZSBOU0xVMl9QQ0lfSU5UQ19QSU4JOQorI2RlZmluZSBOU0xVMl9QQ0lfSU5URF9QSU4JOAorCisKKy8qIE5TTFUyIFRpbWVyICovCisjZGVmaW5lIE5TTFUyX0ZSRVEgNjYwMDAwMDAKKyNkZWZpbmUgTlNMVTJfQ0xPQ0tfVElDS19SQVRFICgoKE5TTFUyX0ZSRVEgLyBIWiAmIH5JWFA0WFhfT1NUX1JFTE9BRF9NQVNLKSArIDEpICogSFopCisjZGVmaW5lIE5TTFUyX0NMT0NLX1RJQ0tTX1BFUl9VU0VDICgoTlNMVTJfQ0xPQ0tfVElDS19SQVRFICsgVVNFQ19QRVJfU0VDLzIpIC8gVVNFQ19QRVJfU0VDKQorCisvKiBHUElPICovCisKKyNkZWZpbmUgTlNMVTJfR1BJTzAJCTAKKyNkZWZpbmUgTlNMVTJfR1BJTzEJCTEKKyNkZWZpbmUgTlNMVTJfR1BJTzIJCTIKKyNkZWZpbmUgTlNMVTJfR1BJTzMJCTMKKyNkZWZpbmUgTlNMVTJfR1BJTzQJCTQKKyNkZWZpbmUgTlNMVTJfR1BJTzUJCTUKKyNkZWZpbmUgTlNMVTJfR1BJTzYJCTYKKyNkZWZpbmUgTlNMVTJfR1BJTzcJCTcKKyNkZWZpbmUgTlNMVTJfR1BJTzgJCTgKKyNkZWZpbmUgTlNMVTJfR1BJTzkJCTkKKyNkZWZpbmUgTlNMVTJfR1BJTzEwCQkxMAorI2RlZmluZSBOU0xVMl9HUElPMTEJCTExCisjZGVmaW5lIE5TTFUyX0dQSU8xMgkJMTIKKyNkZWZpbmUgTlNMVTJfR1BJTzEzCQkxMworI2RlZmluZSBOU0xVMl9HUElPMTQJCTE0CisjZGVmaW5lIE5TTFUyX0dQSU8xNQkJMTUKKworLyogQnV0dG9ucyAqLworCisjZGVmaW5lIE5TTFUyX1BCX0dQSU8JCU5TTFUyX0dQSU81CisjZGVmaW5lIE5TTFUyX1BPX0dQSU8JCU5TTFUyX0dQSU84CS8qIHBvd2VyIG9mZiAqLworI2RlZmluZSBOU0xVMl9SQl9HUElPCQlOU0xVMl9HUElPMTIKKworI2RlZmluZSBOU0xVMl9QQl9JUlEJCUlSUV9JWFA0WFhfR1BJTzUKKyNkZWZpbmUgTlNMVTJfUkJfSVJRCQlJUlFfSVhQNFhYX0dQSU8xMgorCisjZGVmaW5lIE5TTFUyX1BCX0JNCQkoMUwgPDwgTlNMVTJfUEJfR1BJTykKKyNkZWZpbmUgTlNMVTJfUE9fQk0JCSgxTCA8PCBOU0xVMl9QT19HUElPKQorI2RlZmluZSBOU0xVMl9SQl9CTQkJKDFMIDw8IE5TTFUyX1JCX0dQSU8pCisKKy8qIEJ1enplciAqLworCisjZGVmaW5lIE5TTFUyX0dQSU9fQlVaWgkJNAorI2RlZmluZSBOU0xVMl9CWl9CTQkJKDFMIDw8IE5TTFUyX0dQSU9fQlVaWikKKy8qIExFRHMgKi8KKworI2RlZmluZSBOU0xVMl9MRURfUkVECQlOU0xVMl9HUElPMAorI2RlZmluZSBOU0xVMl9MRURfR1JOCQlOU0xVMl9HUElPMQorCisjZGVmaW5lIE5TTFUyX0xFRF9SRURfQk0JKDFMIDw8IE5TTFUyX0xFRF9SRUQpCisjZGVmaW5lIE5TTFUyX0xFRF9HUk5fQk0JKDFMIDw8IE5TTFUyX0xFRF9HUk4pCisKKyNkZWZpbmUgTlNMVTJfTEVEX0RJU0sxCQlOU0xVMl9HUElPMgorI2RlZmluZSBOU0xVMl9MRURfRElTSzIJCU5TTFUyX0dQSU8zCisKKyNkZWZpbmUgTlNMVTJfTEVEX0RJU0sxX0JNCSgxTCA8PCBOU0xVMl9HUElPMikKKyNkZWZpbmUgTlNMVTJfTEVEX0RJU0syX0JNCSgxTCA8PCBOU0xVMl9HUElPMykKKworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLWg0LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLWg0LmgKaW5kZXggZDY0ZWU5Mi4uMzNlYTI5YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC1oNC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvYm9hcmQtaDQuaApAQCAtMzQsNSArMzQsMTEgQEAKICNkZWZpbmUgT01BUDI0WFhfRVRIUl9TVEFSVCAgICAgICAgICAgICAweDA4MDAwMzAwCiAjZGVmaW5lIE9NQVAyNFhYX0VUSFJfR1BJT19JUlEJCTkyCiAKKyNkZWZpbmUgSDRfQ1MwX0JBU0UJCSAgICAgMHgwNDAwMDAwMAorCisjZGVmaW5lIEg0X0NTMF9CQVNFCQkgICAgIDB4MDQwMDAwMDAKKworI2RlZmluZSBINF9DUzBfQkFTRQkJICAgICAweDA0MDAwMDAwCisKICNlbmRpZiAvKiAgX19BU01fQVJDSF9PTUFQX0g0X0ggKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC1pbm5vdmF0b3IuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvYm9hcmQtaW5ub3ZhdG9yLmgKaW5kZXggNzk1NzRlMC4uYjNjZjMzNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC1pbm5vdmF0b3IuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLWlubm92YXRvci5oCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfT01BUF9JTk5PVkFUT1JfSAogI2RlZmluZSBfX0FTTV9BUkNIX09NQVBfSU5OT1ZBVE9SX0gKIAotI2lmIGRlZmluZWQgKENPTkZJR19BUkNIX09NQVAxNTEwKQorI2lmIGRlZmluZWQgKENPTkZJR19BUkNIX09NQVAxNVhYKQogCiAjaWZuZGVmIE9NQVBfU0RSQU1fREVWSUNFCiAjZGVmaW5lIE9NQVBfU0RSQU1fREVWSUNFCQkJRDI1Nk1fMVgxNl80QgpAQCAtNDQsNyArNDQsNyBAQAogdW5zaWduZWQgY2hhciBmcGdhX3JlYWQoaW50IHJlZyk7CiAjZW5kaWYKIAotI2VuZGlmIC8qIENPTkZJR19BUkNIX09NQVAxNTEwICovCisjZW5kaWYgLyogQ09ORklHX0FSQ0hfT01BUDE1WFggKi8KIAogI2lmIGRlZmluZWQgKENPTkZJR19BUkNIX09NQVAxNlhYKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2Nsb2NrLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2Nsb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQwYzI5NwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvY2xvY2suaApAQCAtMCwwICsxLDkxIEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvY2xvY2suaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA1IE5va2lhIGNvcnBvcmF0aW9uCisgKiAgV3JpdHRlbiBieSBUdXVra2EgVGlra2FuZW4gPHR1dWtrYS50aWtrYW5lbkBlbGVrdHJvYml0LmNvbT4KKyAqICBCYXNlZCBvbiBjbG9ja3MuaCBieSBUb255IExpbmRncmVuLCBHb3Jkb24gTWNOdXR0IGFuZCBSaWRnZVJ1biwgSW5jCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9fQVJDSF9BUk1fT01BUF9DTE9DS19ICisjZGVmaW5lIF9fQVJDSF9BUk1fT01BUF9DTE9DS19ICisKK3N0cnVjdCBtb2R1bGU7CisKK3N0cnVjdCBjbGsgeworCXN0cnVjdCBsaXN0X2hlYWQJbm9kZTsKKwlzdHJ1Y3QgbW9kdWxlCQkqb3duZXI7CisJY29uc3QgY2hhcgkJKm5hbWU7CisJc3RydWN0IGNsawkJKnBhcmVudDsKKwl1bnNpZ25lZCBsb25nCQlyYXRlOworCV9fdTMyCQkJZmxhZ3M7CisJdm9pZCBfX2lvbWVtCQkqZW5hYmxlX3JlZzsKKwlfX3U4CQkJZW5hYmxlX2JpdDsKKwlfX3U4CQkJcmF0ZV9vZmZzZXQ7CisJX191OAkJCXNyY19vZmZzZXQ7CisJX19zOAkJCXVzZWNvdW50OworCXZvaWQJCQkoKnJlY2FsYykoc3RydWN0IGNsayAqKTsKKwlpbnQJCQkoKnNldF9yYXRlKShzdHJ1Y3QgY2xrICosIHVuc2lnbmVkIGxvbmcpOworCWxvbmcJCQkoKnJvdW5kX3JhdGUpKHN0cnVjdCBjbGsgKiwgdW5zaWduZWQgbG9uZyk7CisJdm9pZAkJCSgqaW5pdCkoc3RydWN0IGNsayAqKTsKKwlpbnQJCQkoKmVuYWJsZSkoc3RydWN0IGNsayAqKTsKKwl2b2lkCQkJKCpkaXNhYmxlKShzdHJ1Y3QgY2xrICopOworfTsKKworc3RydWN0IGNsa19mdW5jdGlvbnMgeworCWludAkJKCpjbGtfZW5hYmxlKShzdHJ1Y3QgY2xrICpjbGspOworCXZvaWQJCSgqY2xrX2Rpc2FibGUpKHN0cnVjdCBjbGsgKmNsayk7CisJaW50CQkoKmNsa191c2UpKHN0cnVjdCBjbGsgKmNsayk7CisJdm9pZAkJKCpjbGtfdW51c2UpKHN0cnVjdCBjbGsgKmNsayk7CisJbG9uZwkJKCpjbGtfcm91bmRfcmF0ZSkoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpOworCWludAkJKCpjbGtfc2V0X3JhdGUpKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKKwlpbnQJCSgqY2xrX3NldF9wYXJlbnQpKHN0cnVjdCBjbGsgKmNsaywgc3RydWN0IGNsayAqcGFyZW50KTsKKwlzdHJ1Y3QgY2xrICoJKCpjbGtfZ2V0X3BhcmVudCkoc3RydWN0IGNsayAqY2xrKTsKKwl2b2lkCQkoKmNsa19hbGxvd19pZGxlKShzdHJ1Y3QgY2xrICpjbGspOworCXZvaWQJCSgqY2xrX2RlbnlfaWRsZSkoc3RydWN0IGNsayAqY2xrKTsKK307CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgbXB1cmF0ZTsKK2V4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIGNsb2NrczsKK2V4dGVybiBzcGlubG9ja190IGNsb2NrZndfbG9jazsKKworZXh0ZXJuIGludCBjbGtfaW5pdChzdHJ1Y3QgY2xrX2Z1bmN0aW9ucyAqIGN1c3RvbV9jbG9ja3MpOworZXh0ZXJuIGludCBjbGtfcmVnaXN0ZXIoc3RydWN0IGNsayAqY2xrKTsKK2V4dGVybiB2b2lkIGNsa191bnJlZ2lzdGVyKHN0cnVjdCBjbGsgKmNsayk7CitleHRlcm4gdm9pZCBwcm9wYWdhdGVfcmF0ZShzdHJ1Y3QgY2xrICpjbGspOworZXh0ZXJuIHZvaWQgZm9sbG93cGFyZW50X3JlY2FsYyhzdHJ1Y3QgY2xrICogY2xrKTsKK2V4dGVybiB2b2lkIGNsa19hbGxvd19pZGxlKHN0cnVjdCBjbGsgKmNsayk7CitleHRlcm4gdm9pZCBjbGtfZGVueV9pZGxlKHN0cnVjdCBjbGsgKmNsayk7CisKKy8qIENsb2NrIGZsYWdzICovCisjZGVmaW5lIFJBVEVfQ0tDVEwJCSgxIDw8IDApCS8qIE1haW4gZml4ZWQgcmF0aW8gY2xvY2tzICovCisjZGVmaW5lIFJBVEVfRklYRUQJCSgxIDw8IDEpCS8qIEZpeGVkIGNsb2NrIHJhdGUgKi8KKyNkZWZpbmUgUkFURV9QUk9QQUdBVEVTCQkoMSA8PCAyKQkvKiBQcm9ncmFtIGNoaWxkcmVuIHRvbyAqLworI2RlZmluZSBWSVJUVUFMX0NMT0NLCQkoMSA8PCAzKQkvKiBDb21wb3NpdGUgY2xvY2sgZnJvbSB0YWJsZSAqLworI2RlZmluZSBBTFdBWVNfRU5BQkxFRAkJKDEgPDwgNCkJLyogQ2xvY2sgY2Fubm90IGJlIGRpc2FibGVkICovCisjZGVmaW5lIEVOQUJMRV9SRUdfMzJCSVQJKDEgPDwgNSkJLyogVXNlIDMyLWJpdCBhY2Nlc3MgKi8KKyNkZWZpbmUgVklSVFVBTF9JT19BRERSRVNTCSgxIDw8IDYpCS8qIENsb2NrIGluIHZpcnR1YWwgYWRkcmVzcyAqLworI2RlZmluZSBDTE9DS19JRExFX0NPTlRST0wJKDEgPDwgNykKKyNkZWZpbmUgQ0xPQ0tfTk9fSURMRV9QQVJFTlQJKDEgPDwgOCkKKyNkZWZpbmUgREVMQVlFRF9BUFAJCSgxIDw8IDkpCS8qIERlbGF5IGFwcGxpY2F0aW9uIG9mIGNsb2NrICovCisjZGVmaW5lIENPTkZJR19QQVJUSUNJUEFOVAkoMSA8PCAxMCkJLyogRnVuZGFtZW50YWwgY2xvY2sgKi8KKyNkZWZpbmUgQ01fTVBVX1NFTDEJCSgxIDw8IDExKQkvKiBEb21haW4gZGl2aWRlci9zb3VyY2UgKi8KKyNkZWZpbmUgQ01fRFNQX1NFTDEJCSgxIDw8IDEyKQorI2RlZmluZSBDTV9HRlhfU0VMMQkJKDEgPDwgMTMpCisjZGVmaW5lIENNX01PREVNX1NFTDEJCSgxIDw8IDE0KQorI2RlZmluZSBDTV9DT1JFX1NFTDEJCSgxIDw8IDE1KQkvKiBTZXRzIGRpdmlkZXIgZm9yIG1hbnkgKi8KKyNkZWZpbmUgQ01fQ09SRV9TRUwyCQkoMSA8PCAxNikJLyogc2V0cyBwYXJlbnQgZm9yIEdQVCAqLworI2RlZmluZSBDTV9XS1VQX1NFTDEJCSgxIDw8IDE3KQorI2RlZmluZSBDTV9QTExfU0VMMQkJKDEgPDwgMTgpCisjZGVmaW5lIENNX1BMTF9TRUwyCQkoMSA8PCAxOSkKKyNkZWZpbmUgQ01fU1lTQ0xLT1VUX1NFTDEJKDEgPDwgMjApCisjZGVmaW5lIENMT0NLX0lOX09NQVA3MzAJKDEgPDwgMjEpCisjZGVmaW5lIENMT0NLX0lOX09NQVAxNTEwCSgxIDw8IDIyKQorI2RlZmluZSBDTE9DS19JTl9PTUFQMTZYWAkoMSA8PCAyMykKKyNkZWZpbmUgQ0xPQ0tfSU5fT01BUDI0MlgJKDEgPDwgMjQpCisjZGVmaW5lIENMT0NLX0lOX09NQVAyNDNYCSgxIDw8IDI1KQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvY29tbW9uLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2NvbW1vbi5oCmluZGV4IDJhNjc2YjQuLjA4ZDU4YWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvY29tbW9uLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9jb21tb24uaApAQCAtMzEsNiArMzEsNiBAQAogCiBleHRlcm4gdm9pZCBvbWFwX21hcF9jb21tb25faW8odm9pZCk7CiBleHRlcm4gc3RydWN0IHN5c190aW1lciBvbWFwX3RpbWVyOwotZXh0ZXJuIHZvaWQgb21hcF9zZXJpYWxfaW5pdChpbnQgcG9ydHNbXSk7CitleHRlcm4gdm9pZCBvbWFwX3NlcmlhbF9pbml0KHZvaWQpOwogCiAjZW5kaWYgLyogX19BUkNIX0FSTV9NQUNIX09NQVBfQ09NTU9OX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvY3B1LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2NwdS5oCmluZGV4IDExMTllMmIuLmVjN2ViNjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvY3B1LmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9jcHUuaApAQCAtMjgsMTIgKzI4LDcgQEAKIAogZXh0ZXJuIHVuc2lnbmVkIGludCBzeXN0ZW1fcmV2OwogCi0jZGVmaW5lIE9NQVBfRElFX0lEXzAJCTB4ZmZmZTE4MDAKLSNkZWZpbmUgT01BUF9ESUVfSURfMQkJMHhmZmZlMTgwNAotI2RlZmluZSBPTUFQX1BST0RVQ1RJT05fSURfMAkweGZmZmUyMDAwCi0jZGVmaW5lIE9NQVBfUFJPRFVDVElPTl9JRF8xCTB4ZmZmZTIwMDQKLSNkZWZpbmUgT01BUDMyX0lEXzAJCTB4ZmZmZWQ0MDAKLSNkZWZpbmUgT01BUDMyX0lEXzEJCTB4ZmZmZWQ0MDQKKyNkZWZpbmUgb21hcDJfY3B1X3JldigpCQkoKHN5c3RlbV9yZXYgPj4gOCkgJiAweDBmKQogCiAvKgogICogVGVzdCBpZiBtdWx0aWNvcmUgT01BUCBzdXBwb3J0IGlzIG5lZWRlZApAQCAtNTAsNyArNDUsNyBAQAogIyAgZGVmaW5lIE9NQVBfTkFNRSBvbWFwNzMwCiAjIGVuZGlmCiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTUxMAorI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNVhYCiAjIGlmZGVmIE9NQVBfTkFNRQogIyAgdW5kZWYgIE1VTFRJX09NQVAxCiAjICBkZWZpbmUgTVVMVElfT01BUDEKQEAgLTc5LDkgKzc0LDExIEBACiAgKiBNYWNyb3MgdG8gZ3JvdXAgT01BUCBpbnRvIGNwdSBjbGFzc2VzLgogICogVGhlc2UgY2FuIGJlIHVzZWQgaW4gbW9zdCBwbGFjZXMuCiAgKiBjcHVfaXNfb21hcDd4eCgpOglUcnVlIGZvciBPTUFQNzMwCi0gKiBjcHVfaXNfb21hcDE1eHgoKToJVHJ1ZSBmb3IgT01BUDE1MTAgYW5kIE9NQVA1OTEwCisgKiBjcHVfaXNfb21hcDE1eHgoKToJVHJ1ZSBmb3IgT01BUDE1MTAsIE9NQVA1OTEwIGFuZCBPTUFQMzEwCiAgKiBjcHVfaXNfb21hcDE2eHgoKToJVHJ1ZSBmb3IgT01BUDE2MTAsIE9NQVA1OTEyIGFuZCBPTUFQMTcxMAotICogY3B1X2lzX29tYXAyNHh4KCk6CVRydWUgZm9yIE9NQVAyNDIwCisgKiBjcHVfaXNfb21hcDI0eHgoKToJVHJ1ZSBmb3IgT01BUDI0MjAsIE9NQVAyNDIyLCBPTUFQMjQyMywgT01BUDI0MzAKKyAqIGNwdV9pc19vbWFwMjQyeCgpOglUcnVlIGZvciBPTUFQMjQyMCwgT01BUDI0MjIsIE9NQVAyNDIzCisgKiBjcHVfaXNfb21hcDI0M3goKToJVHJ1ZSBmb3IgT01BUDI0MzAKICAqLwogI2RlZmluZSBHRVRfT01BUF9DTEFTUwkoc3lzdGVtX3JldiAmIDB4ZmYpCiAKQEAgLTkxLDIyICs4OCwzNSBAQAogCXJldHVybiAoR0VUX09NQVBfQ0xBU1MgPT0gKGlkKSkgPyAxIDogMDsJXAogfQogCisjZGVmaW5lIEdFVF9PTUFQX1NVQkNMQVNTCSgoc3lzdGVtX3JldiA+PiAyMCkgJiAweDBmZmYpCisKKyNkZWZpbmUgSVNfT01BUF9TVUJDTEFTUyhzdWJjbGFzcywgaWQpCQkJXAorc3RhdGljIGlubGluZSBpbnQgaXNfb21hcCAjI3N1YmNsYXNzICh2b2lkKQkJXAorewkJCQkJCQlcCisJcmV0dXJuIChHRVRfT01BUF9TVUJDTEFTUyA9PSAoaWQpKSA/IDEgOiAwOwlcCit9CisKIElTX09NQVBfQ0xBU1MoN3h4LCAweDA3KQogSVNfT01BUF9DTEFTUygxNXh4LCAweDE1KQogSVNfT01BUF9DTEFTUygxNnh4LCAweDE2KQogSVNfT01BUF9DTEFTUygyNHh4LCAweDI0KQogCitJU19PTUFQX1NVQkNMQVNTKDI0MngsIDB4MjQyKQorSVNfT01BUF9TVUJDTEFTUygyNDN4LCAweDI0MykKKwogI2RlZmluZSBjcHVfaXNfb21hcDd4eCgpCQkwCiAjZGVmaW5lIGNwdV9pc19vbWFwMTV4eCgpCQkwCiAjZGVmaW5lIGNwdV9pc19vbWFwMTZ4eCgpCQkwCiAjZGVmaW5lIGNwdV9pc19vbWFwMjR4eCgpCQkwCisjZGVmaW5lIGNwdV9pc19vbWFwMjQyeCgpCQkwCisjZGVmaW5lIGNwdV9pc19vbWFwMjQzeCgpCQkwCiAKICNpZiBkZWZpbmVkKE1VTFRJX09NQVAxKQogIyBpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA3MzApCiAjICB1bmRlZiAgY3B1X2lzX29tYXA3eHgKICMgIGRlZmluZSBjcHVfaXNfb21hcDd4eCgpCQlpc19vbWFwN3h4KCkKICMgZW5kaWYKLSMgaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTUxMCkKKyMgaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTVYWCkKICMgIHVuZGVmICBjcHVfaXNfb21hcDE1eHgKICMgIGRlZmluZSBjcHVfaXNfb21hcDE1eHgoKQkJaXNfb21hcDE1eHgoKQogIyBlbmRpZgpAQCAtMTE5LDcgKzEyOSw3IEBACiAjICB1bmRlZiAgY3B1X2lzX29tYXA3eHgKICMgIGRlZmluZSBjcHVfaXNfb21hcDd4eCgpCQkxCiAjIGVuZGlmCi0jIGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE1MTApCisjIGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE1WFgpCiAjICB1bmRlZiAgY3B1X2lzX29tYXAxNXh4CiAjICBkZWZpbmUgY3B1X2lzX29tYXAxNXh4KCkJCTEKICMgZW5kaWYKQEAgLTEyOSwxMyArMTM5LDE4IEBACiAjIGVuZGlmCiAjIGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpCiAjICB1bmRlZiAgY3B1X2lzX29tYXAyNHh4CisjICB1bmRlZiAgY3B1X2lzX29tYXAyNDJ4CisjICB1bmRlZiAgY3B1X2lzX29tYXAyNDN4CiAjICBkZWZpbmUgY3B1X2lzX29tYXAyNHh4KCkJCTEKKyMgIGRlZmluZSBjcHVfaXNfb21hcDI0MngoKQkJaXNfb21hcDI0MngoKQorIyAgZGVmaW5lIGNwdV9pc19vbWFwMjQzeCgpCQlpc19vbWFwMjQzeCgpCiAjIGVuZGlmCiAjZW5kaWYKIAogLyoKICAqIE1hY3JvcyB0byBkZXRlY3QgaW5kaXZpZHVhbCBjcHUgdHlwZXMuCiAgKiBUaGVzZSBhcmUgb25seSByYXJlbHkgbmVlZGVkLgorICogY3B1X2lzX29tYXAzMzAoKToJVHJ1ZSBmb3IgT01BUDMzMAogICogY3B1X2lzX29tYXA3MzAoKToJVHJ1ZSBmb3IgT01BUDczMAogICogY3B1X2lzX29tYXAxNTEwKCk6CVRydWUgZm9yIE9NQVAxNTEwCiAgKiBjcHVfaXNfb21hcDE2MTAoKToJVHJ1ZSBmb3IgT01BUDE2MTAKQEAgLTE0NCw2ICsxNTksOSBAQAogICogY3B1X2lzX29tYXAxNjIxKCk6CVRydWUgZm9yIE9NQVAxNjIxCiAgKiBjcHVfaXNfb21hcDE3MTAoKToJVHJ1ZSBmb3IgT01BUDE3MTAKICAqIGNwdV9pc19vbWFwMjQyMCgpOglUcnVlIGZvciBPTUFQMjQyMAorICogY3B1X2lzX29tYXAyNDIyKCk6CVRydWUgZm9yIE9NQVAyNDIyCisgKiBjcHVfaXNfb21hcDI0MjMoKToJVHJ1ZSBmb3IgT01BUDI0MjMKKyAqIGNwdV9pc19vbWFwMjQzMCgpOglUcnVlIGZvciBPTUFQMjQzMAogICovCiAjZGVmaW5lIEdFVF9PTUFQX1RZUEUJKChzeXN0ZW1fcmV2ID4+IDE2KSAmIDB4ZmZmZikKIApAQCAtMTUzLDYgKzE3MSw3IEBACiAJcmV0dXJuIChHRVRfT01BUF9UWVBFID09IChpZCkpID8gMSA6IDA7CQlcCiB9CiAKK0lTX09NQVBfVFlQRSgzMTAsIDB4MDMxMCkKIElTX09NQVBfVFlQRSg3MzAsIDB4MDczMCkKIElTX09NQVBfVFlQRSgxNTEwLCAweDE1MTApCiBJU19PTUFQX1RZUEUoMTYxMCwgMHgxNjEwKQpAQCAtMTYxLDcgKzE4MCwxMSBAQAogSVNfT01BUF9UWVBFKDE2MjEsIDB4MTYyMSkKIElTX09NQVBfVFlQRSgxNzEwLCAweDE3MTApCiBJU19PTUFQX1RZUEUoMjQyMCwgMHgyNDIwKQorSVNfT01BUF9UWVBFKDI0MjIsIDB4MjQyMikKK0lTX09NQVBfVFlQRSgyNDIzLCAweDI0MjMpCitJU19PTUFQX1RZUEUoMjQzMCwgMHgyNDMwKQogCisjZGVmaW5lIGNwdV9pc19vbWFwMzEwKCkJCTAKICNkZWZpbmUgY3B1X2lzX29tYXA3MzAoKQkJMAogI2RlZmluZSBjcHVfaXNfb21hcDE1MTAoKQkJMAogI2RlZmluZSBjcHVfaXNfb21hcDE2MTAoKQkJMApAQCAtMTcwLDMxICsxOTMsMzMgQEAKICNkZWZpbmUgY3B1X2lzX29tYXAxNjIxKCkJCTAKICNkZWZpbmUgY3B1X2lzX29tYXAxNzEwKCkJCTAKICNkZWZpbmUgY3B1X2lzX29tYXAyNDIwKCkJCTAKKyNkZWZpbmUgY3B1X2lzX29tYXAyNDIyKCkJCTAKKyNkZWZpbmUgY3B1X2lzX29tYXAyNDIzKCkJCTAKKyNkZWZpbmUgY3B1X2lzX29tYXAyNDMwKCkJCTAKIAogI2lmIGRlZmluZWQoTVVMVElfT01BUDEpCiAjIGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDczMCkKICMgIHVuZGVmICBjcHVfaXNfb21hcDczMAogIyAgZGVmaW5lIGNwdV9pc19vbWFwNzMwKCkJCWlzX29tYXA3MzAoKQogIyBlbmRpZgotIyBpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNTEwKQotIyAgdW5kZWYgIGNwdV9pc19vbWFwMTUxMAotIyAgZGVmaW5lIGNwdV9pc19vbWFwMTUxMCgpCQlpc19vbWFwMTUxMCgpCi0jIGVuZGlmCiAjZWxzZQogIyBpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA3MzApCiAjICB1bmRlZiAgY3B1X2lzX29tYXA3MzAKICMgIGRlZmluZSBjcHVfaXNfb21hcDczMCgpCQkxCiAjIGVuZGlmCi0jIGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE1MTApCi0jICB1bmRlZiAgY3B1X2lzX29tYXAxNTEwCi0jICBkZWZpbmUgY3B1X2lzX29tYXAxNTEwKCkJCTEKLSMgZW5kaWYKICNlbmRpZgogCiAvKgogICogV2hldGhlciB3ZSBoYXZlIE1VTFRJX09NQVAxIG9yIG5vdCwgd2Ugc3RpbGwgbmVlZCB0byBkaXN0aW5ndWlzaAotICogYmV0d2VlbiAxNjExQi81OTEyIGFuZCAxNzEwLgorICogYmV0d2VlbiAzMzAgdnMuIDE1MTAgYW5kIDE2MTFCLzU5MTIgdnMuIDE3MTAuCiAgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNVhYKQorIyB1bmRlZiAgY3B1X2lzX29tYXAzMTAKKyMgdW5kZWYgIGNwdV9pc19vbWFwMTUxMAorIyBkZWZpbmUgY3B1X2lzX29tYXAzMTAoKQkJaXNfb21hcDMxMCgpCisjIGRlZmluZSBjcHVfaXNfb21hcDE1MTAoKQkJaXNfb21hcDE1MTAoKQorI2VuZGlmCisKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNlhYKQogIyB1bmRlZiAgY3B1X2lzX29tYXAxNjEwCiAjIHVuZGVmICBjcHVfaXNfb21hcDE2MTEKQEAgLTIwOCw5ICsyMzMsMjAgQEAKICMgZGVmaW5lIGNwdV9pc19vbWFwMTcxMCgpCQlpc19vbWFwMTcxMCgpCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0MjApCi0jICB1bmRlZiAgY3B1X2lzX29tYXAyNDIwCi0jICBkZWZpbmUgY3B1X2lzX29tYXAyNDIwKCkJCTEKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKQorIyB1bmRlZiAgY3B1X2lzX29tYXAyNDIwCisjIHVuZGVmICBjcHVfaXNfb21hcDI0MjIKKyMgdW5kZWYgIGNwdV9pc19vbWFwMjQyMworIyB1bmRlZiAgY3B1X2lzX29tYXAyNDMwCisjIGRlZmluZSBjcHVfaXNfb21hcDI0MjAoKQkJaXNfb21hcDI0MjAoKQorIyBkZWZpbmUgY3B1X2lzX29tYXAyNDIyKCkJCWlzX29tYXAyNDIyKCkKKyMgZGVmaW5lIGNwdV9pc19vbWFwMjQyMygpCQlpc19vbWFwMjQyMygpCisjIGRlZmluZSBjcHVfaXNfb21hcDI0MzAoKQkJaXNfb21hcDI0MzAoKQogI2VuZGlmCiAKKy8qIE1hY3JvcyB0byBkZXRlY3QgaWYgd2UgaGF2ZSBPTUFQMSBvciBPTUFQMiAqLworI2RlZmluZSBjcHVfY2xhc3NfaXNfb21hcDEoKQkoY3B1X2lzX29tYXA3MzAoKSB8fCBjcHVfaXNfb21hcDE1eHgoKSB8fCBcCisJCQkJY3B1X2lzX29tYXAxNnh4KCkpCisjZGVmaW5lIGNwdV9jbGFzc19pc19vbWFwMigpCWNwdV9pc19vbWFwMjR4eCgpCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9kbWEuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZG1hLmgKaW5kZXggMDRlYmVmNS4uY2NiY2I1OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9kbWEuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2RtYS5oCkBAIC0yMiw5ICsyMiwxMDkgQEAKICNkZWZpbmUgX19BU01fQVJDSF9ETUFfSAogCiAjZGVmaW5lIE1BWF9ETUFfQUREUkVTUwkJCTB4ZmZmZmZmZmYKKyNkZWZpbmUgTUFYX0RNQV9DSEFOTkVMUwkJMAorCisvKiBIYXJkd2FyZSByZWdpc3RlcnMgZm9yIG9tYXAxICovCisjZGVmaW5lIE9NQVBfRE1BX0JBU0UJCQkoMHhmZmZlZDgwMCkKKyNkZWZpbmUgT01BUF9ETUFfR0NSCQkJKE9NQVBfRE1BX0JBU0UgKyAweDQwMCkKKyNkZWZpbmUgT01BUF9ETUFfR1NDUgkJCShPTUFQX0RNQV9CQVNFICsgMHg0MDQpCisjZGVmaW5lIE9NQVBfRE1BX0dSU1QJCQkoT01BUF9ETUFfQkFTRSArIDB4NDA4KQorI2RlZmluZSBPTUFQX0RNQV9IV19JRAkJCShPTUFQX0RNQV9CQVNFICsgMHg0NDIpCisjZGVmaW5lIE9NQVBfRE1BX1BDSDJfSUQJCShPTUFQX0RNQV9CQVNFICsgMHg0NDQpCisjZGVmaW5lIE9NQVBfRE1BX1BDSDBfSUQJCShPTUFQX0RNQV9CQVNFICsgMHg0NDYpCisjZGVmaW5lIE9NQVBfRE1BX1BDSDFfSUQJCShPTUFQX0RNQV9CQVNFICsgMHg0NDgpCisjZGVmaW5lIE9NQVBfRE1BX1BDSEdfSUQJCShPTUFQX0RNQV9CQVNFICsgMHg0NGEpCisjZGVmaW5lIE9NQVBfRE1BX1BDSERfSUQJCShPTUFQX0RNQV9CQVNFICsgMHg0NGMpCisjZGVmaW5lIE9NQVBfRE1BX0NBUFNfMF9VCQkoT01BUF9ETUFfQkFTRSArIDB4NDRlKQorI2RlZmluZSBPTUFQX0RNQV9DQVBTXzBfTAkJKE9NQVBfRE1BX0JBU0UgKyAweDQ1MCkKKyNkZWZpbmUgT01BUF9ETUFfQ0FQU18xX1UJCShPTUFQX0RNQV9CQVNFICsgMHg0NTIpCisjZGVmaW5lIE9NQVBfRE1BX0NBUFNfMV9MCQkoT01BUF9ETUFfQkFTRSArIDB4NDU0KQorI2RlZmluZSBPTUFQX0RNQV9DQVBTXzIJCQkoT01BUF9ETUFfQkFTRSArIDB4NDU2KQorI2RlZmluZSBPTUFQX0RNQV9DQVBTXzMJCQkoT01BUF9ETUFfQkFTRSArIDB4NDU4KQorI2RlZmluZSBPTUFQX0RNQV9DQVBTXzQJCQkoT01BUF9ETUFfQkFTRSArIDB4NDVhKQorI2RlZmluZSBPTUFQX0RNQV9QQ0gyX1NSCQkoT01BUF9ETUFfQkFTRSArIDB4NDYwKQorI2RlZmluZSBPTUFQX0RNQV9QQ0gwX1NSCQkoT01BUF9ETUFfQkFTRSArIDB4NDgwKQorI2RlZmluZSBPTUFQX0RNQV9QQ0gxX1NSCQkoT01BUF9ETUFfQkFTRSArIDB4NDgyKQorI2RlZmluZSBPTUFQX0RNQV9QQ0hEX1NSCQkoT01BUF9ETUFfQkFTRSArIDB4NGMwKQorCisvKiBIYXJkd2FyZSByZWdpc3RlcnMgZm9yIG9tYXAyICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9CQVNFCQkoTDRfMjRYWF9CQVNFICsgMHg1NjAwMCkKKyNkZWZpbmUgT01BUF9ETUE0X1JFVklTSU9OCQkoT01BUDI0WFhfRE1BX0JBU0UgKyAweDAwKQorI2RlZmluZSBPTUFQX0RNQTRfR0NSX1JFRwkJKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg3OCkKKyNkZWZpbmUgT01BUF9ETUE0X0lSUVNUQVRVU19MMAkJKE9NQVAyNFhYX0RNQV9CQVNFICsgMHgwOCkKKyNkZWZpbmUgT01BUF9ETUE0X0lSUVNUQVRVU19MMQkJKE9NQVAyNFhYX0RNQV9CQVNFICsgMHgwYykKKyNkZWZpbmUgT01BUF9ETUE0X0lSUVNUQVRVU19MMgkJKE9NQVAyNFhYX0RNQV9CQVNFICsgMHgxMCkKKyNkZWZpbmUgT01BUF9ETUE0X0lSUVNUQVRVU19MMwkJKE9NQVAyNFhYX0RNQV9CQVNFICsgMHgxNCkKKyNkZWZpbmUgT01BUF9ETUE0X0lSUUVOQUJMRV9MMAkJKE9NQVAyNFhYX0RNQV9CQVNFICsgMHgxOCkKKyNkZWZpbmUgT01BUF9ETUE0X0lSUUVOQUJMRV9MMQkJKE9NQVAyNFhYX0RNQV9CQVNFICsgMHgxYykKKyNkZWZpbmUgT01BUF9ETUE0X0lSUUVOQUJMRV9MMgkJKE9NQVAyNFhYX0RNQV9CQVNFICsgMHgyMCkKKyNkZWZpbmUgT01BUF9ETUE0X0lSUUVOQUJMRV9MMwkJKE9NQVAyNFhYX0RNQV9CQVNFICsgMHgyNCkKKyNkZWZpbmUgT01BUF9ETUE0X1NZU1NUQVRVUwkJKE9NQVAyNFhYX0RNQV9CQVNFICsgMHgyOCkKKyNkZWZpbmUgT01BUF9ETUE0X0NBUFNfMAkJKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg2NCkKKyNkZWZpbmUgT01BUF9ETUE0X0NBUFNfMgkJKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg2YykKKyNkZWZpbmUgT01BUF9ETUE0X0NBUFNfMwkJKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg3MCkKKyNkZWZpbmUgT01BUF9ETUE0X0NBUFNfNAkJKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg3NCkKKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAxCiAKICNkZWZpbmUgT01BUF9MT0dJQ0FMX0RNQV9DSF9DT1VOVAkxNwogCisvKiBDb21tb24gY2hhbm5lbCBzcGVjaWZpYyByZWdpc3RlcnMgZm9yIG9tYXAxICovCisjZGVmaW5lIE9NQVBfRE1BX0NTRFBfUkVHKG4pCQlfX1JFRzE2KE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgwMCkKKyNkZWZpbmUgT01BUF9ETUFfQ0NSX1JFRyhuKQkJX19SRUcxNihPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MDIpCisjZGVmaW5lIE9NQVBfRE1BX0NJQ1JfUkVHKG4pCQlfX1JFRzE2KE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgwNCkKKyNkZWZpbmUgT01BUF9ETUFfQ1NSX1JFRyhuKQkJX19SRUcxNihPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MDYpCisjZGVmaW5lIE9NQVBfRE1BX0NFTl9SRUcobikJCV9fUkVHMTYoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDEwKQorI2RlZmluZSBPTUFQX0RNQV9DRk5fUkVHKG4pCQlfX1JFRzE2KE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgxMikKKyNkZWZpbmUgT01BUF9ETUFfQ1NGSV9SRUcobikJCV9fUkVHMTYoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDE0KQorI2RlZmluZSBPTUFQX0RNQV9DU0VJX1JFRyhuKQkJX19SRUcxNihPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MTYpCisjZGVmaW5lIE9NQVBfRE1BX0NTQUNfUkVHKG4pCQlfX1JFRzE2KE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgxOCkKKyNkZWZpbmUgT01BUF9ETUFfQ0RBQ19SRUcobikJCV9fUkVHMTYoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDFhKQorI2RlZmluZSBPTUFQX0RNQV9DREVJX1JFRyhuKQkJX19SRUcxNihPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MWMpCisjZGVmaW5lIE9NQVBfRE1BX0NERklfUkVHKG4pCQlfX1JFRzE2KE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgxZSkKKyNkZWZpbmUgT01BUF9ETUFfQ0xOS19DVFJMX1JFRyhuKQlfX1JFRzE2KE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgyOCkKKworI2Vsc2UKKworI2RlZmluZSBPTUFQX0xPR0lDQUxfRE1BX0NIX0NPVU5UCTMyCS8qIFJFVklTSVQ6IElzIHRoaXMgMzIgKyAyPyAqLworCisvKiBDb21tb24gY2hhbm5lbCBzcGVjaWZpYyByZWdpc3RlcnMgZm9yIG9tYXAyICovCisjZGVmaW5lIE9NQVBfRE1BX0NDUl9SRUcobikJCV9fUkVHMzIoT01BUDI0WFhfRE1BX0JBU0UgKyAweDYwICogKG4pICsgMHg4MCkKKyNkZWZpbmUgT01BUF9ETUFfQ0xOS19DVFJMX1JFRyhuKQlfX1JFRzMyKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg2MCAqIChuKSArIDB4ODQpCisjZGVmaW5lIE9NQVBfRE1BX0NJQ1JfUkVHKG4pCQlfX1JFRzMyKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg2MCAqIChuKSArIDB4ODgpCisjZGVmaW5lIE9NQVBfRE1BX0NTUl9SRUcobikJCV9fUkVHMzIoT01BUDI0WFhfRE1BX0JBU0UgKyAweDYwICogKG4pICsgMHg4YykKKyNkZWZpbmUgT01BUF9ETUFfQ1NEUF9SRUcobikJCV9fUkVHMzIoT01BUDI0WFhfRE1BX0JBU0UgKyAweDYwICogKG4pICsgMHg5MCkKKyNkZWZpbmUgT01BUF9ETUFfQ0VOX1JFRyhuKQkJX19SRUczMihPTUFQMjRYWF9ETUFfQkFTRSArIDB4NjAgKiAobikgKyAweDk0KQorI2RlZmluZSBPTUFQX0RNQV9DRk5fUkVHKG4pCQlfX1JFRzMyKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg2MCAqIChuKSArIDB4OTgpCisjZGVmaW5lIE9NQVBfRE1BX0NTRUlfUkVHKG4pCQlfX1JFRzMyKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg2MCAqIChuKSArIDB4YTQpCisjZGVmaW5lIE9NQVBfRE1BX0NTRklfUkVHKG4pCQlfX1JFRzMyKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg2MCAqIChuKSArIDB4YTgpCisjZGVmaW5lIE9NQVBfRE1BX0NERUlfUkVHKG4pCQlfX1JFRzMyKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg2MCAqIChuKSArIDB4YWMpCisjZGVmaW5lIE9NQVBfRE1BX0NERklfUkVHKG4pCQlfX1JFRzMyKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg2MCAqIChuKSArIDB4YjApCisjZGVmaW5lIE9NQVBfRE1BX0NTQUNfUkVHKG4pCQlfX1JFRzMyKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg2MCAqIChuKSArIDB4YjQpCisjZGVmaW5lIE9NQVBfRE1BX0NEQUNfUkVHKG4pCQlfX1JFRzMyKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg2MCAqIChuKSArIDB4YjgpCisKKyNlbmRpZgorCisvKiBDaGFubmVsIHNwZWNpZmljIHJlZ2lzdGVycyBvbmx5IG9uIG9tYXAxICovCisjZGVmaW5lIE9NQVAxX0RNQV9DU1NBX0xfUkVHKG4pCQlfX1JFRzE2KE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgwOCkKKyNkZWZpbmUgT01BUDFfRE1BX0NTU0FfVV9SRUcobikJCV9fUkVHMTYoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDBhKQorI2RlZmluZSBPTUFQMV9ETUFfQ0RTQV9MX1JFRyhuKQkJX19SRUcxNihPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MGMpCisjZGVmaW5lIE9NQVAxX0RNQV9DRFNBX1VfUkVHKG4pCQlfX1JFRzE2KE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgwZSkKKyNkZWZpbmUgT01BUDFfRE1BX0NPTE9SX0xfUkVHKG4pCV9fUkVHMTYoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDIwKQorI2RlZmluZSBPTUFQMV9ETUFfQ0NSMl9SRUcobikJCV9fUkVHMTYoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDI0KQorI2RlZmluZSBPTUFQMV9ETUFfQ09MT1JfVV9SRUcobikJX19SRUcxNihPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MjIpCisjZGVmaW5lIE9NQVAxX0RNQV9MQ0hfQ1RSTF9SRUcobikJX19SRUcxNihPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MmEpCisKKy8qIENoYW5uZWwgc3BlY2lmaWMgcmVnaXN0ZXJzIG9ubHkgb24gb21hcDIgKi8KKyNkZWZpbmUgT01BUDJfRE1BX0NTU0FfUkVHKG4pCQlfX1JFRzMyKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg2MCAqIChuKSArIDB4OWMpCisjZGVmaW5lIE9NQVAyX0RNQV9DRFNBX1JFRyhuKQkJX19SRUczMihPTUFQMjRYWF9ETUFfQkFTRSArIDB4NjAgKiAobikgKyAweGEwKQorI2RlZmluZSBPTUFQMl9ETUFfQ0NFTl9SRUcobikJCV9fUkVHMzIoT01BUDI0WFhfRE1BX0JBU0UgKyAweDYwICogKG4pICsgMHhiYykKKyNkZWZpbmUgT01BUDJfRE1BX0NDRk5fUkVHKG4pCQlfX1JFRzMyKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg2MCAqIChuKSArIDB4YzApCisjZGVmaW5lIE9NQVAyX0RNQV9DT0xPUl9SRUcobikJCV9fUkVHMzIoT01BUDI0WFhfRE1BX0JBU0UgKyAweDYwICogKG4pICsgMHhjNCkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogRE1BIGNoYW5uZWxzIGZvciBvbWFwMSAqLwogI2RlZmluZSBPTUFQX0RNQV9OT19ERVZJQ0UJCTAKICNkZWZpbmUgT01BUF9ETUFfTUNTSTFfVFgJCTEKICNkZWZpbmUgT01BUF9ETUFfTUNTSTFfUlgJCTIKQEAgLTg1LDI5ICsxODUsNzIgQEAKICNkZWZpbmUgT01BUF9ETUFfTU1DMl9SWAkJNTUKICNkZWZpbmUgT01BUF9ETUFfQ1JZUFRPX0RFU19PVVQJCTU2CiAKKy8qIERNQSBjaGFubmVscyBmb3IgMjR4eCAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfTk9fREVWSUNFCQkwCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9YVElfRE1BCQkxCS8qIFNfRE1BXzAgKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX0VYVF9ORE1BX1JFUTAJMgkvKiBTX0RNQV8xICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9FWFRfTkRNQV9SRVExCTMJLyogU19ETUFfMiAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfR1BNQwkJNAkvKiBTX0RNQV8zICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9HRlgJCTUJLyogU19ETUFfNCAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfRFNTCQk2CS8qIFNfRE1BXzUgKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX1ZMWU5RX1RYCQk3CS8qIFNfRE1BXzYgKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX0NXVAkJOAkvKiBTX0RNQV83ICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9BRVNfVFgJCTkJLyogU19ETUFfOCAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfQUVTX1JYCQkxMAkvKiBTX0RNQV85ICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9ERVNfVFgJCTExCS8qIFNfRE1BXzEwICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9ERVNfUlgJCTEyCS8qIFNfRE1BXzExICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9TSEExTUQ1X1JYCQkxMwkvKiBTX0RNQV8xMiAqLwogCi0jZGVmaW5lIE9NQVBfRE1BX0JBU0UJCQkoMHhmZmZlZDgwMCkKLSNkZWZpbmUgT01BUF9ETUFfR0NSCQkJKE9NQVBfRE1BX0JBU0UgKyAweDQwMCkKLSNkZWZpbmUgT01BUF9ETUFfR1NDUgkJCShPTUFQX0RNQV9CQVNFICsgMHg0MDQpCi0jZGVmaW5lIE9NQVBfRE1BX0dSU1QJCQkoT01BUF9ETUFfQkFTRSArIDB4NDA4KQotI2RlZmluZSBPTUFQX0RNQV9IV19JRAkJCShPTUFQX0RNQV9CQVNFICsgMHg0NDIpCi0jZGVmaW5lIE9NQVBfRE1BX1BDSDJfSUQJCShPTUFQX0RNQV9CQVNFICsgMHg0NDQpCi0jZGVmaW5lIE9NQVBfRE1BX1BDSDBfSUQJCShPTUFQX0RNQV9CQVNFICsgMHg0NDYpCi0jZGVmaW5lIE9NQVBfRE1BX1BDSDFfSUQJCShPTUFQX0RNQV9CQVNFICsgMHg0NDgpCi0jZGVmaW5lIE9NQVBfRE1BX1BDSEdfSUQJCShPTUFQX0RNQV9CQVNFICsgMHg0NGEpCi0jZGVmaW5lIE9NQVBfRE1BX1BDSERfSUQJCShPTUFQX0RNQV9CQVNFICsgMHg0NGMpCi0jZGVmaW5lIE9NQVBfRE1BX0NBUFNfMF9VCQkoT01BUF9ETUFfQkFTRSArIDB4NDRlKQotI2RlZmluZSBPTUFQX0RNQV9DQVBTXzBfTAkJKE9NQVBfRE1BX0JBU0UgKyAweDQ1MCkKLSNkZWZpbmUgT01BUF9ETUFfQ0FQU18xX1UJCShPTUFQX0RNQV9CQVNFICsgMHg0NTIpCi0jZGVmaW5lIE9NQVBfRE1BX0NBUFNfMV9MCQkoT01BUF9ETUFfQkFTRSArIDB4NDU0KQotI2RlZmluZSBPTUFQX0RNQV9DQVBTXzIJCQkoT01BUF9ETUFfQkFTRSArIDB4NDU2KQotI2RlZmluZSBPTUFQX0RNQV9DQVBTXzMJCQkoT01BUF9ETUFfQkFTRSArIDB4NDU4KQotI2RlZmluZSBPTUFQX0RNQV9DQVBTXzQJCQkoT01BUF9ETUFfQkFTRSArIDB4NDVhKQotI2RlZmluZSBPTUFQX0RNQV9QQ0gyX1NSCQkoT01BUF9ETUFfQkFTRSArIDB4NDYwKQotI2RlZmluZSBPTUFQX0RNQV9QQ0gwX1NSCQkoT01BUF9ETUFfQkFTRSArIDB4NDgwKQotI2RlZmluZSBPTUFQX0RNQV9QQ0gxX1NSCQkoT01BUF9ETUFfQkFTRSArIDB4NDgyKQotI2RlZmluZSBPTUFQX0RNQV9QQ0hEX1NSCQkoT01BUF9ETUFfQkFTRSArIDB4NGMwKQorI2RlZmluZSBPTUFQMjRYWF9ETUFfRUFDX0FDX1JECQkxNwkvKiBTX0RNQV8xNiAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfRUFDX0FDX1dSCQkxOAkvKiBTX0RNQV8xNyAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfRUFDX01EX1VMX1JECTE5CS8qIFNfRE1BXzE4ICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9FQUNfTURfVUxfV1IJMjAJLyogU19ETUFfMTkgKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX0VBQ19NRF9ETF9SRAkyMQkvKiBTX0RNQV8yMCAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfRUFDX01EX0RMX1dSCTIyCS8qIFNfRE1BXzIxICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9FQUNfQlRfVUxfUkQJMjMJLyogU19ETUFfMjIgKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX0VBQ19CVF9VTF9XUgkyNAkvKiBTX0RNQV8yMyAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfRUFDX0JUX0RMX1JECTI1CS8qIFNfRE1BXzI0ICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9FQUNfQlRfRExfV1IJMjYJLyogU19ETUFfMjUgKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX0kyQzFfVFgJCTI3CS8qIFNfRE1BXzI2ICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9JMkMxX1JYCQkyOAkvKiBTX0RNQV8yNyAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfSTJDMl9UWAkJMjkJLyogU19ETUFfMjggKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX0kyQzJfUlgJCTMwCS8qIFNfRE1BXzI5ICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9NQ0JTUDFfVFgJCTMxCS8qIFNETUFfMzAgKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX01DQlNQMV9SWAkJMzIJLyogU0RNQV8zMSAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfTUNCU1AyX1RYCQkzMwkvKiBTRE1BXzMyICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9NQ0JTUDJfUlgJCTM0CS8qIFNETUFfMzMgKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX1NQSTFfVFgwCQkzNQkvKiBTRE1BXzM0ICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9TUEkxX1JYMAkJMzYJLyogU0RNQV8zNSAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfU1BJMV9UWDEJCTM3CS8qIFNETUFfMzYgKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX1NQSTFfUlgxCQkzOAkvKiBTRE1BXzM3ICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9TUEkxX1RYMgkJMzkJLyogU0RNQV8zOCAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfU1BJMV9SWDIJCTQwCS8qIFNETUFfMzkgKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX1NQSTFfVFgzCQk0MQkvKiBTRE1BXzQwICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9TUEkxX1JYMwkJNDIJLyogU0RNQV80MSAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfU1BJMl9UWDAJCTQzCS8qIFNETUFfNDIgKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX1NQSTJfUlgwCQk0NAkvKiBTRE1BXzQzICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9TUEkyX1RYMQkJNDUJLyogU0RNQV80NCAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfU1BJMl9SWDEJCTQ2CS8qIFNETUFfNDUgKi8KIAorI2RlZmluZSBPTUFQMjRYWF9ETUFfVUFSVDFfVFgJCTQ5CS8qIFNETUFfNDggKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX1VBUlQxX1JYCQk1MAkvKiBTRE1BXzQ5ICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9VQVJUMl9UWAkJNTEJLyogU0RNQV81MCAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfVUFSVDJfUlgJCTUyCS8qIFNETUFfNTEgKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX1VBUlQzX1RYCQk1MwkvKiBTRE1BXzUyICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9VQVJUM19SWAkJNTQJLyogU0RNQV81MyAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfVVNCX1cyRkNfVFgwCTU1CS8qIFNETUFfNTQgKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX1VTQl9XMkZDX1JYMAk1NgkvKiBTRE1BXzU1ICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9VU0JfVzJGQ19UWDEJNTcJLyogU0RNQV81NiAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfVVNCX1cyRkNfUlgxCTU4CS8qIFNETUFfNTcgKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX1VTQl9XMkZDX1RYMgk1OQkvKiBTRE1BXzU4ICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9VU0JfVzJGQ19SWDIJNjAJLyogU0RNQV81OSAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfTU1DMV9UWAkJNjEJLyogU0RNQV82MCAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfTU1DMV9SWAkJNjIJLyogU0RNQV82MSAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfTVMJCQk2MwkvKiBTRE1BXzYyICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIEhhcmR3YXJlIHJlZ2lzdGVycyBmb3IgTENEIERNQSAqLwogI2RlZmluZSBPTUFQMTUxMF9ETUFfTENEX0JBU0UJCSgweGZmZmVkYjAwKQogI2RlZmluZSBPTUFQMTUxMF9ETUFfTENEX0NUUkwJCShPTUFQMTUxMF9ETUFfTENEX0JBU0UgKyAweDAwKQogI2RlZmluZSBPTUFQMTUxMF9ETUFfTENEX1RPUF9GMV9MCShPTUFQMTUxMF9ETUFfTENEX0JBU0UgKyAweDAyKQpAQCAtMTE2LDcgKzI1OSw3IEBACiAjZGVmaW5lIE9NQVAxNTEwX0RNQV9MQ0RfQk9UX0YxX1UJKE9NQVAxNTEwX0RNQV9MQ0RfQkFTRSArIDB4MDgpCiAKICNkZWZpbmUgT01BUDE2MTBfRE1BX0xDRF9CQVNFCQkoMHhmZmZlZTMwMCkKLSNkZWZpbmUgT01BUDE2MTBfRE1BX0xDRF9DU0RQICAgICAgCShPTUFQMTYxMF9ETUFfTENEX0JBU0UgKyAweGMwKQorI2RlZmluZSBPTUFQMTYxMF9ETUFfTENEX0NTRFAJCShPTUFQMTYxMF9ETUFfTENEX0JBU0UgKyAweGMwKQogI2RlZmluZSBPTUFQMTYxMF9ETUFfTENEX0NDUgkJKE9NQVAxNjEwX0RNQV9MQ0RfQkFTRSArIDB4YzIpCiAjZGVmaW5lIE9NQVAxNjEwX0RNQV9MQ0RfQ1RSTAkJKE9NQVAxNjEwX0RNQV9MQ0RfQkFTRSArIDB4YzQpCiAjZGVmaW5lIE9NQVAxNjEwX0RNQV9MQ0RfVE9QX0IxX0wJKE9NQVAxNjEwX0RNQV9MQ0RfQkFTRSArIDB4YzgpCkBAIC0xMzQsMzcgKzI3NywxOCBAQAogI2RlZmluZSBPTUFQMTYxMF9ETUFfTENEX0xDSF9DVFJMCShPTUFQMTYxMF9ETUFfTENEX0JBU0UgKyAweGVhKQogI2RlZmluZSBPTUFQMTYxMF9ETUFfTENEX1NSQ19GSV9CMV9VCShPTUFQMTYxMF9ETUFfTENEX0JBU0UgKyAweGY0KQogCi0KLS8qIEV2ZXJ5IExDaCBoYXMgaXRzIG93biBzZXQgb2YgdGhlIHJlZ2lzdGVycyBiZWxvdyAqLwotI2RlZmluZSBPTUFQX0RNQV9DU0RQKG4pCQkoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDAwKQotI2RlZmluZSBPTUFQX0RNQV9DQ1IobikJCQkoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDAyKQotI2RlZmluZSBPTUFQX0RNQV9DSUNSKG4pCQkoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDA0KQotI2RlZmluZSBPTUFQX0RNQV9DU1IobikJCQkoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDA2KQotI2RlZmluZSBPTUFQX0RNQV9DU1NBX0wobikJCShPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MDgpCi0jZGVmaW5lIE9NQVBfRE1BX0NTU0FfVShuKQkJKE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgwYSkKLSNkZWZpbmUgT01BUF9ETUFfQ0RTQV9MKG4pCQkoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDBjKQotI2RlZmluZSBPTUFQX0RNQV9DRFNBX1UobikJCShPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MGUpCi0jZGVmaW5lIE9NQVBfRE1BX0NFTihuKQkJCShPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MTApCi0jZGVmaW5lIE9NQVBfRE1BX0NGTihuKQkJCShPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MTIpCi0jZGVmaW5lIE9NQVBfRE1BX0NTRkkobikJCShPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MTQpCi0jZGVmaW5lIE9NQVBfRE1BX0NTRUkobikJCShPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MTYpCi0jZGVmaW5lIE9NQVBfRE1BX0NTQUMobikJCShPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MTgpCi0jZGVmaW5lIE9NQVBfRE1BX0NEQUMobikJCShPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MWEpCi0jZGVmaW5lIE9NQVBfRE1BX0NERUkobikJCShPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MWMpCi0jZGVmaW5lIE9NQVBfRE1BX0NERkkobikJCShPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MWUpCi0jZGVmaW5lIE9NQVBfRE1BX0NPTE9SX0wobikJCShPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MjApCi0jZGVmaW5lIE9NQVBfRE1BX0NPTE9SX1UobikJCShPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MjIpCi0jZGVmaW5lIE9NQVBfRE1BX0NDUjIobikJCShPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MjQpCi0jZGVmaW5lIE9NQVBfRE1BX0NMTktfQ1RSTChuKQkJKE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgyOCkKLSNkZWZpbmUgT01BUF9ETUFfTENIX0NUUkwobikJCShPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MmEpCi0KLSNkZWZpbmUgT01BUF9ETUFfVE9VVF9JUlEJCSgxIDw8IDApCisjZGVmaW5lIE9NQVBfRE1BX1RPVVRfSVJRCQkoMSA8PCAwKQkvKiBPbmx5IG9uIG9tYXAxICovCiAjZGVmaW5lIE9NQVBfRE1BX0RST1BfSVJRCQkoMSA8PCAxKQogI2RlZmluZSBPTUFQX0RNQV9IQUxGX0lSUQkJKDEgPDwgMikKICNkZWZpbmUgT01BUF9ETUFfRlJBTUVfSVJRCQkoMSA8PCAzKQogI2RlZmluZSBPTUFQX0RNQV9MQVNUX0lSUQkJKDEgPDwgNCkKICNkZWZpbmUgT01BUF9ETUFfQkxPQ0tfSVJRCQkoMSA8PCA1KQotI2RlZmluZSBPTUFQX0RNQV9TWU5DX0lSUQkJKDEgPDwgNikKKyNkZWZpbmUgT01BUDFfRE1BX1NZTkNfSVJRCQkoMSA8PCA2KQorI2RlZmluZSBPTUFQMl9ETUFfUEtUX0lSUQkJKDEgPDwgNykKKyNkZWZpbmUgT01BUDJfRE1BX1RSQU5TX0VSUl9JUlEJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVAyX0RNQV9TRUNVUkVfRVJSX0lSUQkoMSA8PCA5KQorI2RlZmluZSBPTUFQMl9ETUFfU1VQRVJWSVNPUl9FUlJfSVJRCSgxIDw8IDEwKQorI2RlZmluZSBPTUFQMl9ETUFfTUlTQUxJR05FRF9FUlJfSVJRCSgxIDw8IDExKQogCiAjZGVmaW5lIE9NQVBfRE1BX0RBVEFfVFlQRV9TOAkJMHgwMAogI2RlZmluZSBPTUFQX0RNQV9EQVRBX1RZUEVfUzE2CQkweDAxCkBAIC0xOTQsNiArMzE4LDcgQEAKIAlPTUFQX0xDRF9ETUFfQjJfQk9UVE9NCiB9OwogCisvKiBSRVZJU0lUOiBDaGVjayBpZiBCVVJTVF80IGlzIHJlYWxseSAxIChvciAyKSAqLwogZW51bSBvbWFwX2RtYV9idXJzdF9tb2RlIHsKIAlPTUFQX0RNQV9EQVRBX0JVUlNUX0RJUyA9IDAsCiAJT01BUF9ETUFfREFUQV9CVVJTVF80LApAQCAtMjA2LDYgKzMzMSwzMSBAQAogCU9NQVBfRE1BX1RSQU5TUEFSRU5UX0NPUFkKIH07CiAKK3N0cnVjdCBvbWFwX2RtYV9jaGFubmVsX3BhcmFtcyB7CisJaW50IGRhdGFfdHlwZTsJCS8qIGRhdGEgdHlwZSA4LDE2LDMyICovCisJaW50IGVsZW1fY291bnQ7CQkvKiBudW1iZXIgb2YgZWxlbWVudHMgaW4gYSBmcmFtZSAqLworCWludCBmcmFtZV9jb3VudDsJLyogbnVtYmVyIG9mIGZyYW1lcyBpbiBhIGVsZW1lbnQgKi8KKworCWludCBzcmNfcG9ydDsJCS8qIE9ubHkgb24gT01BUDEgUkVWSVNJVDogSXMgdGhpcyBuZWVkZWQ/ICovCisJaW50IHNyY19hbW9kZTsJCS8qIGNvbnN0YW50ICwgcG9zdCBpbmNyZW1lbnQsIGluZGV4ZWQgLCBkb3VibGUgaW5kZXhlZCAqLworCWludCBzcmNfc3RhcnQ7CQkvKiBzb3VyY2UgYWRkcmVzcyA6IHBoeXNpY2FsICovCisJaW50IHNyY19laTsJCS8qIHNvdXJjZSBlbGVtZW50IGluZGV4ICovCisJaW50IHNyY19maTsJCS8qIHNvdXJjZSBmcmFtZSBpbmRleCAqLworCisJaW50IGRzdF9wb3J0OwkJLyogT25seSBvbiBPTUFQMSBSRVZJU0lUOiBJcyB0aGlzIG5lZWRlZD8gKi8KKwlpbnQgZHN0X2Ftb2RlOwkJLyogY29uc3RhbnQgLCBwb3N0IGluY3JlbWVudCwgaW5kZXhlZCAsIGRvdWJsZSBpbmRleGVkICovCisJaW50IGRzdF9zdGFydDsJCS8qIHNvdXJjZSBhZGRyZXNzIDogcGh5c2ljYWwgKi8KKwlpbnQgZHN0X2VpOwkJLyogc291cmNlIGVsZW1lbnQgaW5kZXggKi8KKwlpbnQgZHN0X2ZpOwkJLyogc291cmNlIGZyYW1lIGluZGV4ICovCisKKwlpbnQgdHJpZ2dlcjsJCS8qIHRyaWdnZXIgYXR0YWNoZWQgaWYgdGhlIGNoYW5uZWwgaXMgc3luY2hyb25pemVkICovCisJaW50IHN5bmNfbW9kZTsJCS8qIHN5Y24gb24gZWxlbWVudCwgZnJhbWUgLCBibG9jayBvciBwYWNrZXQgKi8KKwlpbnQgc3JjX29yX2RzdF9zeW5jaDsJLyogc291cmNlIHN5bmNoKDEpIG9yIGRlc3RpbmF0aW9uIHN5bmNoKDApICovCisKKwlpbnQgaWU7CQkJLyogaW50ZXJydXB0IGVuYWJsZWQgKi8KK307CisKKwogZXh0ZXJuIHZvaWQgb21hcF9zZXRfZG1hX3ByaW9yaXR5KGludCBkc3RfcG9ydCwgaW50IHByaW9yaXR5KTsKIGV4dGVybiBpbnQgb21hcF9yZXF1ZXN0X2RtYShpbnQgZGV2X2lkLCBjb25zdCBjaGFyICpkZXZfbmFtZSwKIAkJCSAgICB2b2lkICgqIGNhbGxiYWNrKShpbnQgbGNoLCB1MTYgY2hfc3RhdHVzLCB2b2lkICpkYXRhKSwKQEAgLTIxNywyNCArMzY3LDMwIEBACiBleHRlcm4gdm9pZCBvbWFwX3N0b3BfZG1hKGludCBsY2gpOwogZXh0ZXJuIHZvaWQgb21hcF9zZXRfZG1hX3RyYW5zZmVyX3BhcmFtcyhpbnQgbGNoLCBpbnQgZGF0YV90eXBlLAogCQkJCQkgaW50IGVsZW1fY291bnQsIGludCBmcmFtZV9jb3VudCwKLQkJCQkJIGludCBzeW5jX21vZGUpOworCQkJCQkgaW50IHN5bmNfbW9kZSwKKwkJCQkJIGludCBkbWFfdHJpZ2dlciwgaW50IHNyY19vcl9kc3Rfc3luY2gpOwogZXh0ZXJuIHZvaWQgb21hcF9zZXRfZG1hX2NvbG9yX21vZGUoaW50IGxjaCwgZW51bSBvbWFwX2RtYV9jb2xvcl9tb2RlIG1vZGUsCiAJCQkJICAgIHUzMiBjb2xvcik7CiAKIGV4dGVybiB2b2lkIG9tYXBfc2V0X2RtYV9zcmNfcGFyYW1zKGludCBsY2gsIGludCBzcmNfcG9ydCwgaW50IHNyY19hbW9kZSwKLQkJCQkgICAgdW5zaWduZWQgbG9uZyBzcmNfc3RhcnQpOworCQkJCSAgICB1bnNpZ25lZCBsb25nIHNyY19zdGFydCwKKwkJCQkgICAgaW50IHNyY19laSwgaW50IHNyY19maSk7CiBleHRlcm4gdm9pZCBvbWFwX3NldF9kbWFfc3JjX2luZGV4KGludCBsY2gsIGludCBlaWR4LCBpbnQgZmlkeCk7CiBleHRlcm4gdm9pZCBvbWFwX3NldF9kbWFfc3JjX2RhdGFfcGFjayhpbnQgbGNoLCBpbnQgZW5hYmxlKTsKIGV4dGVybiB2b2lkIG9tYXBfc2V0X2RtYV9zcmNfYnVyc3RfbW9kZShpbnQgbGNoLAogCQkJCQllbnVtIG9tYXBfZG1hX2J1cnN0X21vZGUgYnVyc3RfbW9kZSk7CiAKIGV4dGVybiB2b2lkIG9tYXBfc2V0X2RtYV9kZXN0X3BhcmFtcyhpbnQgbGNoLCBpbnQgZGVzdF9wb3J0LCBpbnQgZGVzdF9hbW9kZSwKLQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgZGVzdF9zdGFydCk7CisJCQkJICAgICB1bnNpZ25lZCBsb25nIGRlc3Rfc3RhcnQsCisJCQkJICAgICBpbnQgZHN0X2VpLCBpbnQgZHN0X2ZpKTsKIGV4dGVybiB2b2lkIG9tYXBfc2V0X2RtYV9kZXN0X2luZGV4KGludCBsY2gsIGludCBlaWR4LCBpbnQgZmlkeCk7CiBleHRlcm4gdm9pZCBvbWFwX3NldF9kbWFfZGVzdF9kYXRhX3BhY2soaW50IGxjaCwgaW50IGVuYWJsZSk7CiBleHRlcm4gdm9pZCBvbWFwX3NldF9kbWFfZGVzdF9idXJzdF9tb2RlKGludCBsY2gsCiAJCQkJCSBlbnVtIG9tYXBfZG1hX2J1cnN0X21vZGUgYnVyc3RfbW9kZSk7CiAKK2V4dGVybiB2b2lkIG9tYXBfc2V0X2RtYV9wYXJhbXMoaW50IGxjaCwKKwkJCQlzdHJ1Y3Qgb21hcF9kbWFfY2hhbm5lbF9wYXJhbXMgKiBwYXJhbXMpOworCiBleHRlcm4gdm9pZCBvbWFwX2RtYV9saW5rX2xjaCAoaW50IGxjaF9oZWFkLCBpbnQgbGNoX3F1ZXVlKTsKIGV4dGVybiB2b2lkIG9tYXBfZG1hX3VubGlua19sY2ggKGludCBsY2hfaGVhZCwgaW50IGxjaF9xdWV1ZSk7CiAKQEAgLTI0NCw5ICs0MDAsNiBAQAogZXh0ZXJuIHZvaWQgb21hcF9jbGVhcl9kbWEoaW50IGxjaCk7CiBleHRlcm4gaW50IG9tYXBfZG1hX3J1bm5pbmcodm9pZCk7CiAKLS8qIFJldHVybnMgMSBpZiB0aGUgRE1BIG1vZHVsZSBpcyBpbiBPTUFQMTUxMC1jb21wYXRpYmxlIG1vZGUsIDAgb3RoZXJ3aXNlICovCi1leHRlcm4gaW50IG9tYXBfZG1hX2luXzE1MTBfbW9kZSh2b2lkKTsKLQogLyogTENEIERNQSBmdW5jdGlvbnMgKi8KIGV4dGVybiBpbnQgb21hcF9yZXF1ZXN0X2xjZF9kbWEodm9pZCAoKiBjYWxsYmFjaykodTE2IHN0YXR1cywgdm9pZCAqZGF0YSksCiAJCQkJdm9pZCAqZGF0YSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2VudHJ5LW1hY3JvLlMgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2VudHJ5LW1hY3JvLlMKaW5kZXggMGQyOWI5Yy4uZjg4MTRhOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9lbnRyeS1tYWNyby5TCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZW50cnktbWFjcm8uUwpAQCAtMTAsNiArMTAsMjAgQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDEpCiAKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA3MzApICYmIFwKKwkoZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTVYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTZYWCkpCisjZXJyb3IgIkZJWE1FOiBPTUFQNzMwIGRvZXNuJ3Qgc3VwcG9ydCBtdWx0aXBsZS1PTUFQIgorI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNzMwKQorI2RlZmluZSBJTlRfSUgyX0lSUQkJSU5UXzczMF9JSDJfSVJRCisjZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNVhYKQorI2RlZmluZSBJTlRfSUgyX0lSUQkJSU5UXzE1MTBfSUgyX0lSUQorI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTZYWCkKKyNkZWZpbmUgSU5UX0lIMl9JUlEJCUlOVF8xNjEwX0lIMl9JUlEKKyNlbHNlCisjd2FybmluZyAiSUgyIElSUSBkZWZhdWx0ZWQiCisjZGVmaW5lIElOVF9JSDJfSVJRCQlJTlRfMTUxMF9JSDJfSVJRCisjZW5kaWYKKwogIAkJLm1hY3JvCWRpc2FibGVfZmlxCiAJCS5lbmRtCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZnBnYS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9mcGdhLmgKaW5kZXggNjc2ODA3ZC4uNmE4ODNlMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9mcGdhLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9mcGdhLmgKQEAgLTE5LDcgKzE5LDcgQEAKICNpZm5kZWYgX19BU01fQVJDSF9PTUFQX0ZQR0FfSAogI2RlZmluZSBfX0FTTV9BUkNIX09NQVBfRlBHQV9ICiAKLSNpZiBkZWZpbmVkKENPTkZJR19NQUNIX09NQVBfSU5OT1ZBVE9SKSAmJiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNTEwKQorI2lmIGRlZmluZWQoQ09ORklHX01BQ0hfT01BUF9JTk5PVkFUT1IpICYmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE1WFgpCiBleHRlcm4gdm9pZCBvbWFwMTUxMF9mcGdhX2luaXRfaXJxKHZvaWQpOwogI2Vsc2UKICNkZWZpbmUgb21hcDE1MTBfZnBnYV9pbml0X2lycSgpCSgwKQpAQCAtNzcsNiArNzcsOCBAQAogI2RlZmluZSBIMlAyX0RCR19GUEdBX0xPQURfTUVURVJfU0laRQkxMQogI2RlZmluZSBIMlAyX0RCR19GUEdBX0xPQURfTUVURVJfTUFTSwkoKDEgPDwgSDJQMl9EQkdfRlBHQV9MT0FEX01FVEVSX1NJWkUpIC0gMSkKIAorI2RlZmluZSBIMlAyX0RCR19GUEdBX1AyX0xFRF9USU1FUgkJKDEgPDwgMCkKKyNkZWZpbmUgSDJQMl9EQkdfRlBHQV9QMl9MRURfSURMRQkJKDEgPDwgMSkKIAogLyoKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ncGlvLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2dwaW8uaAppbmRleCA3NGNiMmI5Li4xYjM4ODU3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2dwaW8uaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2dwaW8uaApAQCAtNjcsNyArNjcsNyBAQAogCiAjZGVmaW5lIE9NQVBfR1BJT19JUlEobnIpCShPTUFQX0dQSU9fSVNfTVBVSU8obnIpID8gXAogCQkJCSBJSF9NUFVJT19CQVNFICsgKChucikgJiAweDBmKSA6IFwKLQkJCQkgSUhfR1BJT19CQVNFICsgKChucikgJiAweDNmKSkKKwkJCQkgSUhfR1BJT19CQVNFICsgKG5yKSkKIAogZXh0ZXJuIGludCBvbWFwX2dwaW9faW5pdCh2b2lkKTsJLyogQ2FsbCBmcm9tIGJvYXJkIGluaXQgb25seSAqLwogZXh0ZXJuIGludCBvbWFwX3JlcXVlc3RfZ3BpbyhpbnQgZ3Bpbyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2hhcmR3YXJlLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2hhcmR3YXJlLmgKaW5kZXggNjAyMDFlMS4uNTQwNmI4NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9oYXJkd2FyZS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvaGFyZHdhcmUuaApAQCAtMjY3LDggKzI2Nyw2IEBACiAjZGVmaW5lIE9NQVBfTFBHMl9MQ1IJCQkoT01BUF9MUEcyX0JBU0UgKyAweDAwKQogI2RlZmluZSBPTUFQX0xQRzJfUE1SCQkJKE9NQVBfTFBHMl9CQVNFICsgMHgwNCkKIAotI2lmbmRlZiBfX0FTU0VNQkxFUl9fCi0KIC8qCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIFByb2Nlc3NvciBzcGVjaWZpYyBkZWZpbmVzCkBAIC0yNzcsMTMgKzI3NSwxMSBAQAogCiAjaW5jbHVkZSAib21hcDczMC5oIgogI2luY2x1ZGUgIm9tYXAxNTEwLmgiCi0KLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMjRYWAogI2luY2x1ZGUgIm9tYXAyNHh4LmgiCi0jZW5kaWYKLQogI2luY2x1ZGUgIm9tYXAxNnh4LmgiCiAKKyNpZm5kZWYgX19BU1NFTUJMRVJfXworCiAvKgogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBCb2FyZCBzcGVjaWZpYyBkZWZpbmVzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2lvLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2lvLmgKaW5kZXggM2Q1YmNkNS4uZjViY2M5YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9pby5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvaW8uaApAQCAtNTIsMjMgKzUyLDMzIEBACiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIAorI2RlZmluZSBQQ0lPX0JBU0UJMAorCiAjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMSkKKwogI2RlZmluZSBJT19QSFlTCQkweEZGRkIwMDAwCi0jZGVmaW5lIElPX09GRlNFVCAgICAgIC0weDAxMDAwMDAwCS8qIFZpcnR1YWwgSU8gPSAweGZlZmIwMDAwICovCisjZGVmaW5lIElPX09GRlNFVAkweDAxMDAwMDAwCS8qIFZpcnR1YWwgSU8gPSAweGZlZmIwMDAwICovCiAjZGVmaW5lIElPX1NJWkUJCTB4NDAwMDAKKyNkZWZpbmUgSU9fVklSVAkJKElPX1BIWVMgLSBJT19PRkZTRVQpCisjZGVmaW5lIElPX0FERFJFU1MocGEpCSgocGEpIC0gSU9fT0ZGU0VUKQorI2RlZmluZSBpb19wMnYocGEpCSgocGEpIC0gSU9fT0ZGU0VUKQorI2RlZmluZSBpb192MnAodmEpCSgodmEpICsgSU9fT0ZGU0VUKQogCiAjZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyKQotI2RlZmluZSBJT19QSFlTCQkweDQ4MDAwMDAwCS8qIEw0IHBlcmlwaGVyYWxzOyBvdGhlciBzdHVmZiBoYXMgdG8gYmUgbWFwcGVkICoKLQkJCQkJICogbWFudWFsbHkuICovCi0jZGVmaW5lIElPX09GRlNFVAkweDkwMDAwMDAwCS8qIFZpcnR1YWwgSU8gPSAweGQ4MDAwMDAwICovCi0jZGVmaW5lIElPX1NJWkUJCTB4MDgwMDAwMDAKLSNlbmRpZgogCi0jZGVmaW5lIElPX1ZJUlQJCShJT19QSFlTICsgSU9fT0ZGU0VUKQotI2RlZmluZSBJT19BRERSRVNTKHgpCSgoeCkgKyBJT19PRkZTRVQpCi0jZGVmaW5lIFBDSU9fQkFTRQkwCi0jZGVmaW5lIGlvX3Aydih4KQkoKHgpICsgSU9fT0ZGU0VUKQotI2RlZmluZSBpb192MnAoeCkJKCh4KSAtIElPX09GRlNFVCkKKy8qIFdlIG1hcCBib3RoIEwzIGFuZCBMNCBvbiBPTUFQMiAqLworI2RlZmluZSBMM18yNFhYX1BIWVMJTDNfMjRYWF9CQVNFCS8qIDB4NjgwMDAwMDAgKi8KKyNkZWZpbmUgTDNfMjRYWF9WSVJUCTB4ZjgwMDAwMDAKKyNkZWZpbmUgTDNfMjRYWF9TSVpFCVNaXzFNCQkvKiA0NGtCIG9mIDEyOE1CIHVzZWQsIHdhbnQgMU1CIHNlY3QgKi8KKyNkZWZpbmUgTDRfMjRYWF9QSFlTCUw0XzI0WFhfQkFTRQkvKiAweDQ4MDAwMDAwICovCisjZGVmaW5lIEw0XzI0WFhfVklSVAkweGQ4MDAwMDAwCisjZGVmaW5lIEw0XzI0WFhfU0laRQlTWl8xTQkJLyogMU1CIG9mIDEyOE1CIHVzZWQsIHdhbnQgMU1CIHNlY3QgKi8KKyNkZWZpbmUgSU9fT0ZGU0VUCTB4OTAwMDAwMDAKKyNkZWZpbmUgSU9fQUREUkVTUyhwYSkJKChwYSkgKyBJT19PRkZTRVQpCS8qIFdvcmtzIGZvciBMMyBhbmQgTDQgKi8KKyNkZWZpbmUgaW9fcDJ2KHBhKQkoKHBhKSArIElPX09GRlNFVCkJLyogV29ya3MgZm9yIEwzIGFuZCBMNCAqLworI2RlZmluZSBpb192MnAodmEpCSgodmEpIC0gSU9fT0ZGU0VUKQkvKiBXb3JrcyBmb3IgTDMgYW5kIEw0ICovCisKKyNlbmRpZgogCiAjaWZuZGVmIF9fQVNTRU1CTEVSX18KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9pcnFzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2lycXMuaAppbmRleCA3NGUxMDhjLi45Nzc5Njg2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2lycXMuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2lycXMuaApAQCAtMjIsOCArMjIsOCBAQAogICoJIGFyZSBkaWZmZXJlbnQuCiAgKi8KIAotI2lmbmRlZiBfX0FTTV9BUkNIX09NQVAxNTEwX0lSUVNfSAotI2RlZmluZSBfX0FTTV9BUkNIX09NQVAxNTEwX0lSUVNfSAorI2lmbmRlZiBfX0FTTV9BUkNIX09NQVAxNVhYX0lSUVNfSAorI2RlZmluZSBfX0FTTV9BUkNIX09NQVAxNVhYX0lSUVNfSAogCiAvKgogICogSVJRIG51bWJlcnMgZm9yIGludGVycnVwdCBoYW5kbGVyIDEKQEAgLTMxLDcgKzMxLDYgQEAKICAqIE5PVEU6IFNlZSBhbHNvIHRoZSBPTUFQLTE1MTAgYW5kIDE2MTAgc3BlY2lmaWMgSVJRIG51bWJlcnMgYmVsb3cKICAqCiAgKi8KLSNkZWZpbmUgSU5UX0lIMl9JUlEJCTAKICNkZWZpbmUgSU5UX0NBTUVSQQkJMQogI2RlZmluZSBJTlRfRklRCQkJMwogI2RlZmluZSBJTlRfUlREWAkJNgpAQCAtNjAsNiArNTksNyBAQAogLyoKICAqIE9NQVAtMTUxMCBzcGVjaWZpYyBJUlEgbnVtYmVycyBmb3IgaW50ZXJydXB0IGhhbmRsZXIgMQogICovCisjZGVmaW5lIElOVF8xNTEwX0lIMl9JUlEJMAogI2RlZmluZSBJTlRfMTUxMF9SRVMyCQkyCiAjZGVmaW5lIElOVF8xNTEwX1NQSV9UWAkJNAogI2RlZmluZSBJTlRfMTUxMF9TUElfUlgJCTUKQEAgLTcxLDYgKzcxLDcgQEAKIC8qCiAgKiBPTUFQLTE2MTAgc3BlY2lmaWMgSVJRIG51bWJlcnMgZm9yIGludGVycnVwdCBoYW5kbGVyIDEKICAqLworI2RlZmluZSBJTlRfMTYxMF9JSDJfSVJRCTAKICNkZWZpbmUgSU5UXzE2MTBfSUgyX0ZJUQkyCiAjZGVmaW5lIElOVF8xNjEwX01jQlNQMl9UWAk0CiAjZGVmaW5lIElOVF8xNjEwX01jQlNQMl9SWAk1CkBAIC0yMzEsNiArMjMyLDEyIEBACiAjZGVmaW5lIElOVF83MzBfRE1BX0NIMTUJKDYyICsgSUgyX0JBU0UpCiAjZGVmaW5lIElOVF83MzBfTkFORAkJKDYzICsgSUgyX0JBU0UpCiAKKyNkZWZpbmUgSU5UXzI0WFhfU1lTX05JUlEJNworI2RlZmluZSBJTlRfMjRYWF9TRE1BX0lSUTAJMTIKKyNkZWZpbmUgSU5UXzI0WFhfU0RNQV9JUlExCTEzCisjZGVmaW5lIElOVF8yNFhYX1NETUFfSVJRMgkxNAorI2RlZmluZSBJTlRfMjRYWF9TRE1BX0lSUTMJMTUKKyNkZWZpbmUgSU5UXzI0WFhfRFNTX0lSUQkyNQogI2RlZmluZSBJTlRfMjRYWF9HUElPX0JBTksxCTI5CiAjZGVmaW5lIElOVF8yNFhYX0dQSU9fQkFOSzIJMzAKICNkZWZpbmUgSU5UXzI0WFhfR1BJT19CQU5LMwkzMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9tZW1vcnkuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvbWVtb3J5LmgKaW5kZXggYmY1NDViNi4uZGY1MGRkNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9tZW1vcnkuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL21lbW9yeS5oCkBAIC02MSw3ICs2MSw3IEBACiAgKiBOb3RlIHRoYXQgdGhlIGlzX2xidXNfZGV2aWNlKCkgdGVzdCBpcyBub3QgdmVyeSBlZmZpY2llbnQgb24gMTUxMAogICogYmVjYXVzZSBvZiB0aGUgc3RybmNtcCgpLgogICovCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1MTAKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAogCiAvKgogICogT01BUC0xNTEwIExvY2FsIEJ1cyBhZGRyZXNzIG9mZnNldApAQCAtODQsNyArODQsNyBAQAogCQkJCQl2aXJ0X3RvX2xidXMoYWRkcikgOiBcCiAJCQkJCV9fdmlydF90b19idXMoYWRkcik7fSkKIAotI2VuZGlmCS8qIENPTkZJR19BUkNIX09NQVAxNTEwICovCisjZW5kaWYJLyogQ09ORklHX0FSQ0hfT01BUDE1WFggKi8KIAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvbWVuZWxhdXMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvbWVuZWxhdXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmJlOGI4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9tZW5lbGF1cy5oCkBAIC0wLDAgKzEsMjIgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL21lbmVsYXVzLmgKKyAqCisgKiBGdW5jdGlvbnMgdG8gYWNjZXNzIE1lbmVsYXVzIHBvd2VyIG1hbmFnZW1lbnQgY2hpcAorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9NRU5FTEFVU19ICisjZGVmaW5lIF9fQVNNX0FSQ0hfTUVORUxBVVNfSAorCitleHRlcm4gdm9pZCBtZW5lbGF1c19tbWNfcmVnaXN0ZXIodm9pZCAoKmNhbGxiYWNrKSh1OCBjYXJkX21hc2spLAorCQkJCSAgdW5zaWduZWQgbG9uZyBkYXRhKTsKK2V4dGVybiB2b2lkIG1lbmVsYXVzX21tY19yZW1vdmUodm9pZCk7CitleHRlcm4gdm9pZCBtZW5lbGF1c19tbWNfb3BlbmRyYWluKGludCBlbmFibGUpOworCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkgJiYgZGVmaW5lZChDT05GSUdfTUVORUxBVVMpCisjZGVmaW5lIG9tYXBfaGFzX21lbmVsYXVzKCkJMQorI2Vsc2UKKyNkZWZpbmUgb21hcF9oYXNfbWVuZWxhdXMoKQkwCisjZW5kaWYKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvbXV4LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL211eC5oCmluZGV4IDFiMWFkNDEuLjEzNDE1YTlhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL211eC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvbXV4LmgKQEAgLTQsNyArNCw3IEBACiAgKiBUYWJsZSBvZiB0aGUgT21hcCByZWdpc3RlciBjb25maWd1cmF0aW9ucyBmb3IgdGhlIEZVTkNfTVVYIGFuZAogICogUFVMTF9EV04gY29tYmluYXRpb25zLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMyBOb2tpYSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwNSBOb2tpYSBDb3Jwb3JhdGlvbgogICoKICAqIFdyaXR0ZW4gYnkgVG9ueSBMaW5kZ3JlbiA8dG9ueS5saW5kZ3JlbkBub2tpYS5jb20+CiAgKgpAQCAtNTgsNiArNTgsMTYgQEAKIAkJCQkJLnB1X3BkX3JlZyA9IFBVX1BEX1NFTF8jI3JlZywgXAogCQkJCQkucHVfcGRfdmFsID0gc3RhdHVzLAogCisjZGVmaW5lIE1VWF9SRUdfNzMwKHJlZywgbW9kZV9vZmZzZXQsIG1vZGUpIC5tdXhfcmVnX25hbWUgPSAiT01BUDczMF9JT19DT05GXyIjcmVnLCBcCisJCQkJCS5tdXhfcmVnID0gT01BUDczMF9JT19DT05GXyMjcmVnLCBcCisJCQkJCS5tYXNrX29mZnNldCA9IG1vZGVfb2Zmc2V0LCBcCisJCQkJCS5tYXNrID0gbW9kZSwKKworI2RlZmluZSBQVUxMX1JFR183MzAocmVnLCBiaXQsIHN0YXR1cykJLnB1bGxfbmFtZSA9ICJPTUFQNzMwX0lPX0NPTkZfIiNyZWcsIFwKKwkJCQkJLnB1bGxfcmVnID0gT01BUDczMF9JT19DT05GXyMjcmVnLCBcCisJCQkJCS5wdWxsX2JpdCA9IGJpdCwgXAorCQkJCQkucHVsbF92YWwgPSBzdGF0dXMsCisKICNlbHNlCiAKICNkZWZpbmUgTVVYX1JFRyhyZWcsIG1vZGVfb2Zmc2V0LCBtb2RlKSAubXV4X3JlZyA9IEZVTkNfTVVYX0NUUkxfIyNyZWcsIFwKQEAgLTcxLDYgKzgxLDE1IEBACiAjZGVmaW5lIFBVX1BEX1JFRyhyZWcsIHN0YXR1cykJCS5wdV9wZF9yZWcgPSBQVV9QRF9TRUxfIyNyZWcsIFwKIAkJCQkJLnB1X3BkX3ZhbCA9IHN0YXR1cywKIAorI2RlZmluZSBNVVhfUkVHXzczMChyZWcsIG1vZGVfb2Zmc2V0LCBtb2RlKSBcCisJCQkJCS5tdXhfcmVnID0gT01BUDczMF9JT19DT05GXyMjcmVnLCBcCisJCQkJCS5tYXNrX29mZnNldCA9IG1vZGVfb2Zmc2V0LCBcCisJCQkJCS5tYXNrID0gbW9kZSwKKworI2RlZmluZSBQVUxMX1JFR183MzAocmVnLCBiaXQsIHN0YXR1cykJLnB1bGxfcmVnID0gT01BUDczMF9JT19DT05GXyMjcmVnLCBcCisJCQkJCS5wdWxsX2JpdCA9IGJpdCwgXAorCQkJCQkucHVsbF92YWwgPSBzdGF0dXMsCisKICNlbmRpZiAvKiBDT05GSUdfT01BUF9NVVhfREVCVUcgKi8KIAogI2RlZmluZSBNVVhfQ0ZHKGRlc2MsIG11eF9yZWcsIG1vZGVfb2Zmc2V0LCBtb2RlLAlcCkBAIC04NCwxMyArMTAzLDQ0IEBACiAJUFVfUERfUkVHKHB1X3BkX3JlZywgcHVfcGRfc3RhdHVzKQkJXAogfSwKIAorCisvKgorICogT01BUDczMCBoYXMgYSBzbGlnaHRseSBkaWZmZXJlbnQgY29uZmlnIGZvciB0aGUgcGluIG11eC4KKyAqIC0gY29uZmlnIHJlZ3MgYXJlIHRoZSBPTUFQNzMwX0lPX0NPTkZfeCByZWdzIChzZWUgb21hcDczMC5oKSByZWdzIGFuZAorICogICBub3QgdGhlIEZVTkNfTVVYX0NUUkxfeCByZWdzIGZyb20gaGFyZHdhcmUuaAorICogLSBmb3IgcHVsbC11cC9kb3duLCBvbmx5IGhhcyBvbmUgZW5hYmxlIGJpdCB3aGljaCBpcyBpcyBpbiB0aGUgc2FtZSByZWdpc3RlcgorICogICBhcyBtdXggY29uZmlnCisgKi8KKyNkZWZpbmUgTVVYX0NGR183MzAoZGVzYywgbXV4X3JlZywgbW9kZV9vZmZzZXQsIG1vZGUsCVwKKwkJICAgcHVsbF9yZWcsIHB1bGxfYml0LCBwdWxsX3N0YXR1cywJXAorCQkgICBwdV9wZF9yZWcsIHB1X3BkX3N0YXR1cywgZGVidWdfc3RhdHVzKVwKK3sJCQkJCQkJXAorCS5uYW1lID0JIGRlc2MsCQkJCQlcCisJLmRlYnVnID0gZGVidWdfc3RhdHVzLAkJCQlcCisJTVVYX1JFR183MzAobXV4X3JlZywgbW9kZV9vZmZzZXQsIG1vZGUpCQlcCisJUFVMTF9SRUdfNzMwKG11eF9yZWcsIHB1bGxfYml0LCBwdWxsX3N0YXR1cykJXAorCVBVX1BEX1JFRyhwdV9wZF9yZWcsIHB1X3BkX3N0YXR1cykJCVwKK30sCisKKyNkZWZpbmUgTVVYX0NGR18yNFhYKGRlc2MsIHJlZ19vZmZzZXQsIG1vZGUsCQkJXAorCQkJCXB1bGxfZW4sIHB1bGxfbW9kZSwgZGJnKQlcCit7CQkJCQkJCQlcCisJLm5hbWUJCT0gZGVzYywJCQkJCVwKKwkuZGVidWcJCT0gZGJnLAkJCQkJXAorCS5tdXhfcmVnCT0gcmVnX29mZnNldCwJCQkJXAorCS5tYXNrCQk9IG1vZGUsCQkJCQlcCisJLnB1bGxfdmFsCT0gcHVsbF9lbiwJCQkJXAorCS5wdV9wZF92YWwJPSBwdWxsX21vZGUsCQkJCVwKK30sCisKKwogI2RlZmluZSBQVUxMX0RJU0FCTEVECTAKICNkZWZpbmUgUFVMTF9FTkFCTEVECTEKIAogI2RlZmluZSBQVUxMX0RPV04JMAogI2RlZmluZSBQVUxMX1VQCQkxCiAKLXR5cGVkZWYgc3RydWN0IHsKK3N0cnVjdCBwaW5fY29uZmlnIHsKIAljaGFyICpuYW1lOwogCXVuc2lnbmVkIGNoYXIgYnVzeTsKIAl1bnNpZ25lZCBjaGFyIGRlYnVnOwpAQCAtMTA4LDEzICsxNTgsMjMgQEAKIAljb25zdCBjaGFyICpwdV9wZF9uYW1lOwogCWNvbnN0IHVuc2lnbmVkIGludCBwdV9wZF9yZWc7CiAJY29uc3QgdW5zaWduZWQgY2hhciBwdV9wZF92YWw7Ci19IHJlZ19jZmdfc2V0OworfTsKIAotLyoKLSAqIExvb2t1cCB0YWJsZSBmb3IgRlVOQ19NVVggYW5kIFBVTExfRFdOIHJlZ2lzdGVyIGNvbWJpbmF0aW9ucyBmb3IgZWFjaAotICogZGV2aWNlLiBTZWUgYWxzbyByZWdfY2ZnX3RhYmxlIGJlbG93IGZvciB0aGUgcmVnaXN0ZXIgdmFsdWVzLgotICovCi10eXBlZGVmIGVudW0geworZW51bSBvbWFwNzMwX2luZGV4IHsKKwkvKiBPTUFQIDczMCBrZXlib2FyZCAqLworCUUyXzczMF9LQlIwLAorCUo3XzczMF9LQlIxLAorCUUxXzczMF9LQlIyLAorCUYzXzczMF9LQlIzLAorCUQyXzczMF9LQlI0LAorCUMyXzczMF9LQkMwLAorCUQzXzczMF9LQkMxLAorCUU0XzczMF9LQkMyLAorCUY0XzczMF9LQkMzLAorCUUzXzczMF9LQkM0LAorfTsKKworZW51bSBvbWFwMXh4eF9pbmRleCB7CiAJLyogVUFSVDEgKEJUX1VBUlRfR0FUSU5HKSovCiAJVUFSVDFfVFggPSAwLAogCVVBUlQxX1JUUywKQEAgLTMzMSwyNDUgKzM5MSwzNCBAQAogCVYxMF8xNjEwX0NGX0lSRVEsCiAJVzEwXzE2MTBfQ0ZfUkVTRVQsCiAJVzExXzE2MTBfQ0ZfQ0QxLAotfSByZWdfY2ZnX3Q7Ci0KLSNpZiBkZWZpbmVkKF9fTVVYX0NfXykgJiYgZGVmaW5lZChDT05GSUdfT01BUF9NVVgpCi0KLS8qCi0gKiBUYWJsZSBvZiB2YXJpb3VzIEZVTkNfTVVYIGFuZCBQVUxMX0RXTiBjb21iaW5hdGlvbnMgZm9yIGVhY2ggZGV2aWNlLgotICogU2VlIGFsc28gcmVnX2NmZ190IGFib3ZlIGZvciB0aGUgbG9va3VwIHRhYmxlLgotICovCi1zdGF0aWMgY29uc3QgcmVnX2NmZ19zZXQgX19pbml0ZGF0YV9vcl9tb2R1bGUKLXJlZ19jZmdfdGFibGVbXSA9IHsKLS8qCi0gKgkgZGVzY3JpcHRpb24JCW11eCAgbW9kZSAgIG11eAkgcHVsbCBwdWxsICBwdWxsICBwdV9wZAkgcHUgIGRiZwotICoJCQkJcmVnICBvZmZzZXQgbW9kZSByZWcgIGJpdCAgIGVuYQkgIHJlZwotICovCi1NVVhfQ0ZHKCJVQVJUMV9UWCIsCQkgOSwgICAyMSwgICAgMSwJICAyLCAgIDMsICAgMCwJIE5BLAkgMCwgIDApCi1NVVhfQ0ZHKCJVQVJUMV9SVFMiLAkJIDksICAgMTIsICAgIDEsCSAgMiwgICAwLCAgIDAsCSBOQSwJIDAsICAwKQotCi0vKiBVQVJUMiAoQ09NX1VBUlRfR0FUSU5HKSwgY29uZmxpY3RzIHdpdGggVVNCMiAqLwotTVVYX0NGRygiVUFSVDJfVFgiLAkJIEMsICAgMjcsICAgIDEsCSAgMywgICAzLCAgIDAsCSBOQSwJIDAsICAwKQotTVVYX0NGRygiVUFSVDJfUlgiLAkJIEMsICAgMTgsICAgIDAsCSAgMywgICAxLCAgIDEsCSBOQSwJIDAsICAwKQotTVVYX0NGRygiVUFSVDJfQ1RTIiwJCSBDLCAgIDIxLCAgICAwLAkgIDMsICAgMSwgICAxLAkgTkEsCSAwLCAgMCkKLU1VWF9DRkcoIlVBUlQyX1JUUyIsCQkgQywgICAyNCwgICAgMSwJICAzLCAgIDIsICAgMCwJIE5BLAkgMCwgIDApCi0KLS8qIFVBUlQzIChHSUdBX1VBUlRfR0FUSU5HKSAqLwotTVVYX0NGRygiVUFSVDNfVFgiLAkJIDYsICAgIDAsICAgIDEsCSAgMCwgIDMwLCAgIDAsCSBOQSwJIDAsICAwKQotTVVYX0NGRygiVUFSVDNfUlgiLAkJIDYsICAgIDMsICAgIDAsCSAgMCwgIDMxLCAgIDEsCSBOQSwJIDAsICAwKQotTVVYX0NGRygiVUFSVDNfQ1RTIiwJCSA1LCAgIDEyLCAgICAyLAkgIDAsICAyNCwgICAwLAkgTkEsCSAwLCAgMCkKLU1VWF9DRkcoIlVBUlQzX1JUUyIsCQkgNSwgICAxNSwgICAgMiwJICAwLCAgMjUsICAgMCwJIE5BLAkgMCwgIDApCi1NVVhfQ0ZHKCJVQVJUM19DTEtSRVEiLAkJIDksICAgMjcsICAgIDAsCSAgMiwgICA1LCAgIDAsCSBOQSwJIDAsICAwKQotTVVYX0NGRygiVUFSVDNfQkNMSyIsCQkgQSwgICAgMCwgICAgMCwJICAyLCAgIDYsICAgMCwJIE5BLAkgMCwgIDApCi1NVVhfQ0ZHKCJZMTVfMTYxMF9VQVJUM19SVFMiLAkgQSwgICAgMCwgICAgMSwJICAyLCAgIDYsICAgMCwJIE5BLAkgMCwgIDApCi0KLS8qIFBXVCAmIFBXTCwgY29uZmxpY3RzIHdpdGggVUFSVDMgKi8KLU1VWF9DRkcoIlBXVCIsCQkgCSA2LCAgICAwLCAgICAyLAkgIDAsICAzMCwgICAwLAkgTkEsCSAwLCAgMCkKLU1VWF9DRkcoIlBXTCIsCQkgCSA2LCAgICAzLCAgICAxLAkgIDAsICAzMSwgICAxLAkgTkEsCSAwLCAgMCkKLQotLyogVVNCIGludGVybmFsIG1hc3RlciBnZW5lcmljICovCi1NVVhfQ0ZHKCJSMThfVVNCX1ZCVVMiLAkJIDcsICAgIDksICAgIDIsCSAgMSwgIDExLCAgIDAsCSBOQSwJIDAsICAxKQotTVVYX0NGRygiUjE4XzE1MTBfVVNCX0dQSU8wIiwJIDcsICAgIDksICAgIDAsCSAgMSwgIDExLCAgIDEsCSBOQSwJIDAsICAxKQotLyogd29ya3MgYXJvdW5kIGVycmF0dW06ICBXNF9VU0JfUFVFTiBhbmQgVzRfVVNCX1BVRElTIGFyZSBzd2l0Y2hlZCEgKi8KLU1VWF9DRkcoIlc0X1VTQl9QVUVOIiwJCSBELCAgICAzLCAgICAzLAkgIDMsICAgNSwgICAxLAkgTkEsCSAwLCAgMSkKLU1VWF9DRkcoIlc0X1VTQl9DTEtPIiwJCSBELCAgICAzLCAgICAxLAkgIDMsICAgNSwgICAwLAkgTkEsCSAwLCAgMSkKLU1VWF9DRkcoIlc0X1VTQl9ISUdIWiIsCQkgRCwgICAgMywgICAgNCwJICAzLCAgIDUsICAgMCwJICAzLAkgMCwgIDEpCi1NVVhfQ0ZHKCJXNF9HUElPNTgiLAkJIEQsICAgIDMsICAgIDcsCSAgMywgICA1LCAgIDAsCSAgMywJIDAsICAxKQotCi0vKiBVU0IxIG1hc3RlciAqLwotTVVYX0NGRygiVVNCMV9TVVNQIiwJCSA4LCAgIDI3LCAgICAyLAkgIDEsICAyNywgICAwLAkgTkEsCSAwLCAgMSkKLU1VWF9DRkcoIlVTQjFfU0UwIiwJCSA5LCAgICAwLCAgICAyLAkgIDEsICAyOCwgICAwLAkgTkEsCSAwLCAgMSkKLU1VWF9DRkcoIlcxM18xNjEwX1VTQjFfU0UwIiwJIDksICAgIDAsICAgIDQsCSAgMSwgIDI4LCAgIDAsCSBOQSwJIDAsICAxKQotTVVYX0NGRygiVVNCMV9UWEVOIiwJCSA5LCAgICAzLCAgICAyLAkgIDEsICAyOSwgICAwLAkgTkEsCSAwLCAgMSkKLU1VWF9DRkcoIlVTQjFfVFhEIiwJCSA5LCAgIDI0LCAgICAxLAkgIDIsICAgNCwgICAwLAkgTkEsCSAwLCAgMSkKLU1VWF9DRkcoIlVTQjFfVlAiLAkJIEEsICAgIDMsICAgIDEsCSAgMiwgICA3LCAgIDAsCSBOQSwJIDAsICAxKQotTVVYX0NGRygiVVNCMV9WTSIsCQkgQSwgICAgNiwgICAgMSwJICAyLCAgIDgsICAgMCwJIE5BLAkgMCwgIDEpCi1NVVhfQ0ZHKCJVU0IxX1JDViIsCQkgQSwgICAgOSwgICAgMSwJICAyLCAgIDksICAgMCwJIE5BLAkgMCwgIDEpCi1NVVhfQ0ZHKCJVU0IxX1NQRUVEIiwJCSBBLCAgIDEyLCAgICAyLAkgIDIsICAxMCwgICAwLAkgTkEsCSAwLCAgMSkKLU1VWF9DRkcoIlIxM18xNjEwX1VTQjFfU1BFRUQiLAkgQSwgICAxMiwgICAgNSwJICAyLCAgMTAsICAgMCwJIE5BLAkgMCwgIDEpCi1NVVhfQ0ZHKCJSMTNfMTcxMF9VU0IxX1NFTyIsCSBBLCAgIDEyLCAgICA1LCAgIDIsICAxMCwgICAwLCAgIE5BLCAgICAgMCwgIDEpCi0KLS8qIFVTQjIgbWFzdGVyICovCi1NVVhfQ0ZHKCJVU0IyX1NVU1AiLAkJIEIsICAgIDMsICAgIDEsCSAgMiwgIDE3LCAgIDAsCSBOQSwJIDAsICAxKQotTVVYX0NGRygiVVNCMl9WUCIsCQkgQiwgICAgNiwgICAgMSwJICAyLCAgMTgsICAgMCwJIE5BLAkgMCwgIDEpCi1NVVhfQ0ZHKCJVU0IyX1RYRU4iLAkJIEIsICAgIDksICAgIDEsCSAgMiwgIDE5LCAgIDAsCSBOQSwJIDAsICAxKQotTVVYX0NGRygiVVNCMl9WTSIsCQkgQywgICAxOCwgICAgMSwJICAzLCAgIDAsICAgMCwJIE5BLAkgMCwgIDEpCi1NVVhfQ0ZHKCJVU0IyX1JDViIsCQkgQywgICAyMSwgICAgMSwJICAzLCAgIDEsICAgMCwJIE5BLAkgMCwgIDEpCi1NVVhfQ0ZHKCJVU0IyX1NFMCIsCQkgQywgICAyNCwgICAgMiwJICAzLCAgIDIsICAgMCwJIE5BLAkgMCwgIDEpCi1NVVhfQ0ZHKCJVU0IyX1RYRCIsCQkgQywgICAyNywgICAgMiwJICAzLCAgIDMsICAgMCwJIE5BLAkgMCwgIDEpCi0KLS8qIE9NQVAtMTUxMCBHUElPICovCi1NVVhfQ0ZHKCJSMThfMTUxMF9HUElPMCIsCSA3LCAgICA5LCAgICAwLCAgIDEsICAxMSwgICAxLCAgICAwLCAgICAgMCwgIDEpCi1NVVhfQ0ZHKCJSMTlfMTUxMF9HUElPMSIsCSA3LCAgICA2LCAgICAwLCAgIDEsICAxMCwgICAxLCAgICAwLCAgICAgMCwgIDEpCi1NVVhfQ0ZHKCJNMTRfMTUxMF9HUElPMiIsCSA3LCAgICAzLCAgICAwLCAgIDEsICAgOSwgICAxLCAgICAwLCAgICAgMCwgIDEpCi0KLS8qIE9NQVAxNjEwIEdQSU8gKi8KLU1VWF9DRkcoIlAxOF8xNjEwX0dQSU8zIiwJIDcsICAgIDAsICAgIDAsICAgMSwgICA4LCAgIDAsICAgTkEsICAgICAwLCAgMSkKLU1VWF9DRkcoIlkxNV8xNjEwX0dQSU8xNyIsCSBBLCAgICAwLCAgICA3LCAgIDIsICAgNiwgICAwLCAgIE5BLCAgICAgMCwgIDEpCi0KLS8qIE9NQVAtMTcxMCBHUElPICovCi1NVVhfQ0ZHKCJSMThfMTcxMF9HUElPMCIsICAgICAgICA3LCAgICA5LCAgICAwLCAgIDEsICAxMSwgICAxLCAgICAxLCAgICAgMSwgIDEpCi1NVVhfQ0ZHKCJWMl8xNzEwX0dQSU8xMCIsICAgICAgICBGLCAgIDI3LCAgICAxLCAgIDQsICAgMywgICAxLCAgICA0LCAgICAgMSwgIDEpCi1NVVhfQ0ZHKCJOMjFfMTcxMF9HUElPMTQiLCAgICAgICA2LCAgICA5LCAgICAwLCAgIDEsICAgMSwgICAxLCAgICAxLCAgICAgMSwgIDEpCi1NVVhfQ0ZHKCJXMTVfMTcxMF9HUElPNDAiLCAgICAgICA5LCAgIDI3LCAgICA3LCAgIDIsICAgNSwgICAxLCAgICAyLCAgICAgMSwgIDEpCi0KLS8qIE1QVUlPICovCi1NVVhfQ0ZHKCJNUFVJTzIiLAkJIDcsICAgMTgsICAgIDAsCSAgMSwgIDE0LCAgIDEsCSBOQSwJIDAsICAxKQotTVVYX0NGRygiTjE1XzE2MTBfTVBVSU8yIiwJIDcsICAgMTgsICAgIDAsCSAgMSwgIDE0LCAgIDEsCSAgMSwJIDAsICAxKQotTVVYX0NGRygiTVBVSU80IiwJCSA3LCAgIDE1LCAgICAwLAkgIDEsICAxMywgICAxLAkgTkEsCSAwLCAgMSkKLU1VWF9DRkcoIk1QVUlPNSIsCQkgNywgICAxMiwgICAgMCwJICAxLCAgMTIsICAgMSwJIE5BLAkgMCwgIDEpCi0KLU1VWF9DRkcoIlQyMF8xNjEwX01QVUlPNSIsCSA3LCAgIDEyLCAgICAwLAkgIDEsICAxMiwgICAwLAkgIDMsCSAwLCAgMSkKLU1VWF9DRkcoIlcxMV8xNjEwX01QVUlPNiIsCTEwLCAgIDE1LCAgICAyLAkgIDMsICAgOCwgICAwLAkgIDMsCSAwLCAgMSkKLU1VWF9DRkcoIlYxMF8xNjEwX01QVUlPNyIsCSBBLCAgIDI0LCAgICAyLAkgIDIsICAxNCwgICAwLAkgIDIsCSAwLCAgMSkKLU1VWF9DRkcoIlcxMV8xNjEwX01QVUlPOSIsCTEwLCAgIDE1LCAgICAxLAkgIDMsICAgOCwgICAwLAkgIDMsCSAwLCAgMSkKLU1VWF9DRkcoIlYxMF8xNjEwX01QVUlPMTAiLAkgQSwgICAyNCwgICAgMSwJICAyLCAgMTQsICAgMCwJICAyLAkgMCwgIDEpCi1NVVhfQ0ZHKCJXMTBfMTYxMF9NUFVJTzExIiwJIEEsICAgMTgsICAgIDIsCSAgMiwgIDExLCAgIDAsCSAgMiwJIDAsICAxKQotTVVYX0NGRygiRTIwXzE2MTBfTVBVSU8xMyIsCSAzLCAgIDIxLCAgICAxLAkgIDAsICAgNywgICAwLAkgIDAsCSAwLCAgMSkKLU1VWF9DRkcoIlUyMF8xNjEwX01QVUlPMTQiLAkgOSwgICAgNiwgICAgNiwJICAwLCAgMzAsICAgMCwJICAwLAkgMCwgIDEpCi1NVVhfQ0ZHKCJFMTlfMTYxMF9NUFVJTzE1IiwJIDMsICAgMTgsICAgIDEsCSAgMCwgICA2LCAgIDAsCSAgMCwJIDAsICAxKQotCi0vKiBNQ0JTUDIgKi8KLU1VWF9DRkcoIk1DQlNQMl9DTEtSIiwJCSBDLCAgICA2LCAgICAwLAkgIDIsICAyNywgICAxLAkgTkEsCSAwLCAgMSkKLU1VWF9DRkcoIk1DQlNQMl9DTEtYIiwJCSBDLCAgICA5LCAgICAwLAkgIDIsICAyOSwgICAxLAkgTkEsCSAwLCAgMSkKLU1VWF9DRkcoIk1DQlNQMl9EUiIsCQkgQywgICAgMCwgICAgMCwJICAyLCAgMjYsICAgMSwJIE5BLAkgMCwgIDEpCi1NVVhfQ0ZHKCJNQ0JTUDJfRFgiLAkJIEMsICAgMTUsICAgIDAsCSAgMiwgIDMxLCAgIDEsCSBOQSwJIDAsICAxKQotTVVYX0NGRygiTUNCU1AyX0ZTUiIsCQkgQywgICAxMiwgICAgMCwJICAyLCAgMzAsICAgMSwJIE5BLAkgMCwgIDEpCi1NVVhfQ0ZHKCJNQ0JTUDJfRlNYIiwJCSBDLCAgICAzLCAgICAwLAkgIDIsICAyNywgICAxLAkgTkEsCSAwLCAgMSkKLQotLyogTUNCU1AzIE5PVEU6IE1vZGUgbXVzdCAxIGZvciBjbG9jayAqLwotTVVYX0NGRygiTUNCU1AzX0NMS1giLAkJIDksICAgIDMsICAgIDEsCSAgMSwgIDI5LCAgIDAsCSBOQSwJIDAsICAxKQotCi0vKiBNaXNjIGJhbGxvdXRzICovCi1NVVhfQ0ZHKCJCQUxMT1VUX1Y4X0FSTUlPMyIsCSBCLCAgIDE4LCAgICAwLAkgIDIsICAyNSwgICAxLAkgTkEsCSAwLCAgMSkKLU1VWF9DRkcoIk4yMF9IRFEiLAkgICAgICAgNiwgICAxOCwgICAgMSwgICAxLCAgIDQsICAgMCwgICAgMSwgICAgIDQsICAwKQotCi0vKiBPTUFQLTE2MTAgTU1DMiAqLwotTVVYX0NGRygiVzhfMTYxMF9NTUMyX0RBVDAiLAkgQiwgICAyMSwgICAgNiwJICAyLCAgMjMsICAgMSwJICAyLAkgMSwgIDEpCi1NVVhfQ0ZHKCJWOF8xNjEwX01NQzJfREFUMSIsCSBCLCAgIDI3LCAgICA2LAkgIDIsICAyNSwgICAxLAkgIDIsCSAxLCAgMSkKLU1VWF9DRkcoIlcxNV8xNjEwX01NQzJfREFUMiIsCSA5LCAgIDEyLCAgICA2LAkgIDIsICAgNSwgICAxLAkgIDIsCSAxLCAgMSkKLU1VWF9DRkcoIlIxMF8xNjEwX01NQzJfREFUMyIsCSBCLCAgIDE4LCAgICA2LAkgIDIsICAyMiwgICAxLAkgIDIsCSAxLCAgMSkKLU1VWF9DRkcoIlkxMF8xNjEwX01NQzJfQ0xLIiwJIEIsICAgIDMsICAgIDYsCSAgMiwgIDE3LCAgIDAsCSAgMiwJIDAsICAxKQotTVVYX0NGRygiWThfMTYxMF9NTUMyX0NNRCIsCSBCLCAgIDI0LCAgICA2LAkgIDIsICAyNCwgICAxLAkgIDIsCSAxLCAgMSkKLU1VWF9DRkcoIlY5XzE2MTBfTU1DMl9DTURESVIiLAkgQiwgICAxMiwgICAgNiwJICAyLCAgMjAsICAgMCwJICAyLAkgMSwgIDEpCi1NVVhfQ0ZHKCJWNV8xNjEwX01NQzJfREFURElSMCIsCSBCLCAgIDE1LCAgICA2LAkgIDIsICAyMSwgICAwLAkgIDIsCSAxLCAgMSkKLU1VWF9DRkcoIlcxOV8xNjEwX01NQzJfREFURElSMSIsIDgsICAgMTUsICAgIDYsCSAgMSwgIDIzLCAgIDAsCSAgMSwJIDEsICAxKQotTVVYX0NGRygiUjE4XzE2MTBfTU1DMl9DTEtJTiIsCSA3LCAgICA5LCAgICA2LAkgIDEsICAxMSwgICAwLAkgIDEsCTExLCAgMSkKLQotLyogT01BUC0xNjEwIEV4dGVybmFsIFRyYWNlIEludGVyZmFjZSAqLwotTVVYX0NGRygiTTE5XzE2MTBfRVRNX1BTVEFUMCIsCSA1LCAgIDI3LCAgICAxLAkgIDAsICAyOSwgICAwLAkgIDAsCSAwLCAgMSkKLU1VWF9DRkcoIkwxNV8xNjEwX0VUTV9QU1RBVDEiLAkgNSwgICAyNCwgICAgMSwJICAwLCAgMjgsICAgMCwJICAwLAkgMCwgIDEpCi1NVVhfQ0ZHKCJMMThfMTYxMF9FVE1fUFNUQVQyIiwJIDUsICAgMjEsICAgIDEsCSAgMCwgIDI3LCAgIDAsCSAgMCwJIDAsICAxKQotTVVYX0NGRygiTDE5XzE2MTBfRVRNX0QwIiwJIDUsICAgMTgsICAgIDEsCSAgMCwgIDI2LCAgIDAsCSAgMCwJIDAsICAxKQotTVVYX0NGRygiSjE5XzE2MTBfRVRNX0Q2IiwJIDUsICAgIDAsICAgIDEsCSAgMCwgIDIwLCAgIDAsCSAgMCwJIDAsICAxKQotTVVYX0NGRygiSjE4XzE2MTBfRVRNX0Q3IiwJIDUsICAgMjcsICAgIDEsCSAgMCwgIDE5LCAgIDAsCSAgMCwJIDAsICAxKQotCi0vKiBPTUFQMTZYWCBHUElPICovCi1NVVhfQ0ZHKCJQMjBfMTYxMF9HUElPNCIsCSA2LCAgIDI3LCAgICAwLAkgIDEsICAgNywgICAwLAkgIDEsCSAxLCAgMSkKLU1VWF9DRkcoIlY5XzE2MTBfR1BJTzciLAkgQiwgICAxMiwgICAgMSwJICAyLCAgMjAsICAgMCwJICAyLAkgMSwgIDEpCi1NVVhfQ0ZHKCJXOF8xNjEwX0dQSU85IiwJIEIsICAgMjEsICAgIDAsCSAgMiwgIDIzLCAgIDAsCSAgMiwJIDEsICAxKQotTVVYX0NGRygiTjIwXzE2MTBfR1BJTzExIiwgICAgICAgNiwgICAxOCwgICAgMCwgICAxLCAgIDQsICAgMCwgICAgMSwgICAgIDEsICAxKQotTVVYX0NGRygiTjE5XzE2MTBfR1BJTzEzIiwJIDYsICAgMTIsICAgIDAsCSAgMSwgICAyLCAgIDAsCSAgMSwJIDEsICAxKQotTVVYX0NGRygiUDEwXzE2MTBfR1BJTzIyIiwJIEMsICAgIDAsICAgIDcsCSAgMiwgIDI2LCAgIDAsCSAgMiwJIDEsICAxKQotTVVYX0NGRygiVjVfMTYxMF9HUElPMjQiLAkgQiwgICAxNSwgICAgNywJICAyLCAgMjEsICAgMCwJICAyLAkgMSwgIDEpCi1NVVhfQ0ZHKCJBQTIwXzE2MTBfR1BJT180MSIsCSA5LCAgICA5LCAgICA3LAkgIDEsICAzMSwgICAwLAkgIDEsCSAxLCAgMSkKLU1VWF9DRkcoIlcxOV8xNjEwX0dQSU80OCIsCSA4LCAgIDE1LCAgICA3LCAgIDEsICAyMywgICAxLCAgICAxLCAgICAgMCwgIDEpCi1NVVhfQ0ZHKCJNN18xNjEwX0dQSU82MiIsCTEwLCAgICAwLCAgICAwLCAgIDQsICAyNCwgICAwLCAgICA0LCAgICAgMCwgIDEpCi1NVVhfQ0ZHKCJWMTRfMTZYWF9HUElPMzciLAkgOSwgICAxOCwgICAgNywJICAyLCAgIDIsICAgMCwJICAyLAkgMiwgIDApCi1NVVhfQ0ZHKCJSOV8xNlhYX0dQSU8xOCIsCSBDLCAgIDE4LCAgICA3LCAgIDMsICAgMCwgICAwLCAgICAzLCAgICAgMCwgIDApCi1NVVhfQ0ZHKCJMMTRfMTZYWF9HUElPNDkiLAkgNiwgICAgMywgICAgNywgICAwLCAgMzEsICAgMCwgICAgMCwgICAgMzEsICAwKQotCi0vKiBPTUFQLTE2MTAgdVdpcmUgKi8KLU1VWF9DRkcoIlYxOV8xNjEwX1VXSVJFX1NDTEsiLAkgOCwgICAgNiwgICAgMCwJICAxLCAgMjAsICAgMCwJICAxLAkgMSwgIDEpCi1NVVhfQ0ZHKCJVMThfMTYxMF9VV0lSRV9TREkiLAkgOCwgICAgMCwgICAgMCwJICAxLCAgMTgsICAgMCwJICAxLAkgMSwgIDEpCi1NVVhfQ0ZHKCJXMjFfMTYxMF9VV0lSRV9TRE8iLAkgOCwgICAgMywgICAgMCwJICAxLCAgMTksICAgMCwJICAxLAkgMSwgIDEpCi1NVVhfQ0ZHKCJOMTRfMTYxMF9VV0lSRV9DUzAiLAkgOCwgICAgOSwgICAgMSwJICAxLCAgMjEsICAgMCwJICAxLAkgMSwgIDEpCi1NVVhfQ0ZHKCJQMTVfMTYxMF9VV0lSRV9DUzMiLAkgOCwgICAxMiwgICAgMSwJICAxLCAgMjIsICAgMCwJICAxLAkgMSwgIDEpCi1NVVhfQ0ZHKCJOMTVfMTYxMF9VV0lSRV9DUzEiLAkgNywgICAxOCwgICAgMiwJICAxLCAgMTQsICAgMCwJIE5BLAkgMCwgIDEpCi0KLS8qIE9NQVAtMTYxMCBGbGFzaCAqLwotTVVYX0NGRygiTDNfMTYxMF9GTEFTSF9DUzJCX09FIiwxMCwgICAgNiwgICAgMSwJIE5BLCAgIDAsICAgMCwJIE5BLAkgMCwgIDEpCi1NVVhfQ0ZHKCJNOF8xNjEwX0ZMQVNIX0NTMkJfV0UiLDEwLCAgICAzLCAgICAxLAkgTkEsICAgMCwgICAwLAkgTkEsCSAwLCAgMSkKLQotLyogRmlyc3QgTU1DIGludGVyZmFjZSwgc2FtZSBvbiAxNTEwLCAxNjEwIGFuZCAxNzEwICovCi1NVVhfQ0ZHKCJNTUNfQ01EIiwJCSBBLCAgIDI3LCAgICAwLAkgIDIsICAxNSwgICAxLAkgIDIsCSAxLCAgMSkKLU1VWF9DRkcoIk1NQ19EQVQxIiwJCSBBLCAgIDI0LCAgICAwLAkgIDIsICAxNCwgICAxLAkgIDIsCSAxLCAgMSkKLU1VWF9DRkcoIk1NQ19EQVQyIiwJCSBBLCAgIDE4LCAgICAwLAkgIDIsICAxMiwgICAxLAkgIDIsCSAxLCAgMSkKLU1VWF9DRkcoIk1NQ19EQVQwIiwJCSBCLCAgICAwLCAgICAwLAkgIDIsICAxNiwgICAxLAkgIDIsCSAxLCAgMSkKLU1VWF9DRkcoIk1NQ19DTEsiLAkJIEEsICAgMjEsICAgIDAsCSBOQSwgICAwLCAgIDAsCSBOQSwJIDAsICAxKQotTVVYX0NGRygiTU1DX0RBVDMiLAkJMTAsICAgMTUsICAgIDAsCSAgMywgICA4LCAgIDEsCSAgMywJIDEsICAxKQotTVVYX0NGRygiTTE1XzE3MTBfTU1DX0NMS0kiLAkgNiwgICAyMSwgICAgMiwgICAwLCAgIDAsICAgMCwgICBOQSwgICAgIDAsICAxKQotTVVYX0NGRygiUDE5XzE3MTBfTU1DX0NNRERJUiIsCSA2LCAgIDI0LCAgICA2LCAgIDAsICAgMCwgICAwLCAgIE5BLCAgICAgMCwgIDEpCi1NVVhfQ0ZHKCJQMjBfMTcxMF9NTUNfREFURElSMCIsCSA2LCAgIDI3LCAgICA1LCAgIDAsICAgMCwgICAwLCAgIE5BLCAgICAgMCwgIDEpCi0KLS8qIE9NQVAtMTYxMCBVU0IwIGFsdGVybmF0ZSBjb25maWd1cmF0aW9uICovCi1NVVhfQ0ZHKCJXOV9VU0IwX1RYRU4iLAkJIEIsICAgOSwgICAgIDUsCSAgMiwgIDE5LCAgIDAsCSAgMiwJIDAsICAxKQotTVVYX0NGRygiQUE5X1VTQjBfVlAiLAkJIEIsICAgNiwgICAgIDUsCSAgMiwgIDE4LCAgIDAsCSAgMiwJIDAsICAxKQotTVVYX0NGRygiWTVfVVNCMF9SQ1YiLAkJIEMsICAyMSwgICAgIDUsCSAgMywgICAxLCAgIDAsCSAgMSwJIDAsICAxKQotTVVYX0NGRygiUjlfVVNCMF9WTSIsCQkgQywgIDE4LCAgICAgNSwJICAzLCAgIDAsICAgMCwJICAzLAkgMCwgIDEpCi1NVVhfQ0ZHKCJWNl9VU0IwX1RYRCIsCQkgQywgIDI3LCAgICAgNSwJICAzLCAgIDMsICAgMCwJICAzLAkgMCwgIDEpCi1NVVhfQ0ZHKCJXNV9VU0IwX1NFMCIsCQkgQywgIDI0LCAgICAgNSwJICAzLCAgIDIsICAgMCwJICAzLAkgMCwgIDEpCi1NVVhfQ0ZHKCJWOV9VU0IwX1NQRUVEIiwJIEIsICAxMiwgICAgIDUsCSAgMiwgIDIwLCAgIDAsCSAgMiwJIDAsICAxKQotTVVYX0NGRygiWTEwX1VTQjBfU1VTUCIsCSBCLCAgIDMsICAgICA1LAkgIDIsICAxNywgICAwLAkgIDIsCSAwLCAgMSkKLQotLyogVVNCMiBpbnRlcmZhY2UgKi8KLU1VWF9DRkcoIlc5X1VTQjJfVFhFTiIsCQkgQiwgICA5LCAgICAgMSwJIE5BLCAgIDAsICAgMCwJIE5BLAkgMCwgIDEpCi1NVVhfQ0ZHKCJBQTlfVVNCMl9WUCIsCQkgQiwgICA2LCAgICAgMSwJIE5BLCAgIDAsICAgMCwJIE5BLAkgMCwgIDEpCi1NVVhfQ0ZHKCJZNV9VU0IyX1JDViIsCQkgQywgIDIxLCAgICAgMSwJIE5BLCAgIDAsICAgMCwJIE5BLAkgMCwgIDEpCi1NVVhfQ0ZHKCJSOV9VU0IyX1ZNIiwJCSBDLCAgMTgsICAgICAxLAkgTkEsICAgMCwgICAwLAkgTkEsCSAwLCAgMSkKLU1VWF9DRkcoIlY2X1VTQjJfVFhEIiwJCSBDLCAgMjcsICAgICAyLAkgTkEsICAgMCwgICAwLAkgTkEsCSAwLCAgMSkKLU1VWF9DRkcoIlc1X1VTQjJfU0UwIiwJCSBDLCAgMjQsICAgICAyLAkgTkEsICAgMCwgICAwLAkgTkEsCSAwLCAgMSkKLQotLyogMTZYWCBVQVJUICovCi1NVVhfQ0ZHKCJSMTNfMTYxMF9VQVJUMV9UWCIsCSBBLCAgMTIsICAgICA2LAkgIDIsICAxMCwgICAwLAkgIDIsCTEwLCAgMSkKLU1VWF9DRkcoIlYxNF8xNlhYX1VBUlQxX1JYIiwJIDksICAxOCwgICAgIDAsCSAgMiwgICAyLCAgIDAsCSAgMiwJIDIsICAxKQotTVVYX0NGRygiUjE0XzE2MTBfVUFSVDFfQ1RTIiwJIDksICAxNSwgICAgIDAsCSAgMiwgICAxLCAgIDAsCSAgMiwJIDEsICAxKQotTVVYX0NGRygiQUExNV8xNjEwX1VBUlQxX1JUUyIsCSA5LCAgMTIsICAgICAxLAkgIDIsICAgMCwgICAwLAkgIDIsCSAwLCAgMSkKLU1VWF9DRkcoIlI5XzE2WFhfVUFSVDJfUlgiLAkgQywgIDE4LCAgICAgMCwgICAzLCAgIDAsICAgMCwgICAgMywgICAgIDAsICAxKQotTVVYX0NGRygiTDE0XzE2WFhfVUFSVDNfUlgiLAkgNiwgICAzLCAgICAgMCwgICAwLCAgMzEsICAgMCwgICAgMCwgICAgMzEsICAxKQotCi0vKiBJMkMgaW50ZXJmYWNlICovCi1NVVhfQ0ZHKCJJMkNfU0NMIiwJCSA3LCAgMjQsICAgICAwLAkgTkEsICAgMCwgICAwLAkgTkEsCSAwLCAgMCkKLU1VWF9DRkcoIkkyQ19TREEiLAkJIDcsICAyNywgICAgIDAsCSBOQSwgICAwLCAgIDAsCSBOQSwJIDAsICAwKQotCi0vKiBLZXlwYWQgKi8KLU1VWF9DRkcoIkYxOF8xNjEwX0tCQzAiLAkgMywgIDE1LCAgICAgMCwJICAwLCAgIDUsICAgMSwJICAwLAkgMCwgIDApCi1NVVhfQ0ZHKCJEMjBfMTYxMF9LQkMxIiwJIDMsICAxMiwgICAgIDAsCSAgMCwgICA0LCAgIDEsCSAgMCwJIDAsICAwKQotTVVYX0NGRygiRDE5XzE2MTBfS0JDMiIsCSAzLCAgIDksICAgICAwLAkgIDAsICAgMywgICAxLAkgIDAsCSAwLCAgMCkKLU1VWF9DRkcoIkUxOF8xNjEwX0tCQzMiLAkgMywgICA2LCAgICAgMCwJICAwLCAgIDIsICAgMSwJICAwLAkgMCwgIDApCi1NVVhfQ0ZHKCJDMjFfMTYxMF9LQkM0IiwJIDMsICAgMywgICAgIDAsCSAgMCwgICAxLCAgIDEsCSAgMCwJIDAsICAwKQotTVVYX0NGRygiRzE4XzE2MTBfS0JSMCIsCSA0LCAgIDAsICAgICAwLAkgIDAsICAgMTAsICAxLAkgIDAsCSAxLCAgMCkKLU1VWF9DRkcoIkYxOV8xNjEwX0tCUjEiLAkgMywgICAyNywgICAgMCwJICAwLCAgIDksICAgMSwJICAwLAkgMSwgIDApCi1NVVhfQ0ZHKCJIMTRfMTYxMF9LQlIyIiwJIDMsICAgMjQsICAgIDAsCSAgMCwgICA4LCAgIDEsCSAgMCwJIDEsICAwKQotTVVYX0NGRygiRTIwXzE2MTBfS0JSMyIsCSAzLCAgIDIxLCAgICAwLAkgIDAsICAgNywgICAxLAkgIDAsCSAxLCAgMCkKLU1VWF9DRkcoIkUxOV8xNjEwX0tCUjQiLAkgMywgICAxOCwgICAgMCwJICAwLCAgIDYsICAgMSwJICAwLAkgMSwgIDApCi1NVVhfQ0ZHKCJOMTlfMTYxMF9LQlI1IiwJIDYsICAxMiwgICAgIDEsCSAgMSwgICAyLCAgIDEsCSAgMSwJIDEsICAwKQotCi0vKiBQb3dlciBtYW5hZ2VtZW50ICovCi1NVVhfQ0ZHKCJUMjBfMTYxMF9MT1dfUFdSIiwJIDcsICAgMTIsICAgIDEsCSAgTkEsICAgMCwgICAwLCAgIE5BLAkgMCwgIDApCi0KLS8qIE1DTEsgU2V0dGluZ3MgKi8KLU1VWF9DRkcoIlY1XzE3MTBfTUNMS19PTiIsCSBCLCAgIDE1LCAgICAwLAkgIE5BLCAgIDAsICAgMCwgICBOQSwJIDAsICAwKQotTVVYX0NGRygiVjVfMTcxMF9NQ0xLX09GRiIsCSBCLCAgIDE1LCAgICA2LAkgIE5BLCAgIDAsICAgMCwgICBOQSwJIDAsICAwKQotTVVYX0NGRygiUjEwXzE2MTBfTUNMS19PTiIsCSBCLCAgIDE4LCAgICAwLAkgIE5BLCAgMjIsICAgMCwJICBOQSwJIDEsICAwKQotTVVYX0NGRygiUjEwXzE2MTBfTUNMS19PRkYiLAkgQiwgICAxOCwgICAgNiwJICAyLCAgIDIyLCAgIDEsCSAgMiwJIDEsICAxKQotCi0vKiBDb21wYWN0Rmxhc2ggY29udHJvbGxlciwgY29uZmxpY3RzIHdpdGggTU1DMSAqLwotTVVYX0NGRygiUDExXzE2MTBfQ0ZfQ0QyIiwJIEEsICAgMjcsICAgIDMsCSAgMiwgICAxNSwgICAxLAkgIDIsCSAxLCAgMSkKLU1VWF9DRkcoIlIxMV8xNjEwX0NGX0lPSVMxNiIsCSBCLCAgICAwLCAgICAzLAkgIDIsICAgMTYsICAgMSwJICAyLAkgMSwgIDEpCi1NVVhfQ0ZHKCJWMTBfMTYxMF9DRl9JUkVRIiwJIEEsICAgMjQsICAgIDMsCSAgMiwgICAxNCwgICAwLAkgIDIsCSAwLCAgMSkKLU1VWF9DRkcoIlcxMF8xNjEwX0NGX1JFU0VUIiwJIEEsICAgMTgsICAgIDMsCSAgMiwgICAxMiwgICAxLAkgIDIsCSAxLCAgMSkKLU1VWF9DRkcoIlcxMV8xNjEwX0NGX0NEMSIsCTEwLCAgIDE1LCAgICAzLAkgIDMsICAgIDgsICAgMSwJICAzLAkgMSwgIDEpCiB9OwogCi0jZW5kaWYJLyogX19NVVhfQ19fICovCitlbnVtIG9tYXAyNHh4X2luZGV4IHsKKwkvKiAyNHh4IEkyQyAqLworCU0xOV8yNFhYX0kyQzFfU0NMLAorCUwxNV8yNFhYX0kyQzFfU0RBLAorCUoxNV8yNFhYX0kyQzJfU0NMLAorCUgxOV8yNFhYX0kyQzJfU0RBLAorCisJLyogMjR4eCBNZW5lbGF1cyBpbnRlcnJ1cHQgKi8KKwlXMTlfMjRYWF9TWVNfTklSUSwKKworCS8qIDI0eHggR1BJTyAqLworCVkyMF8yNFhYX0dQSU82MCwKKwlNMTVfMjRYWF9HUElPOTIsCit9OwogCiAjaWZkZWYJQ09ORklHX09NQVBfTVVYCiAvKiBzZXR1cCBwaW4gbXV4aW5nIGluIExpbnV4ICovCi1leHRlcm4gaW50IG9tYXBfY2ZnX3JlZyhyZWdfY2ZnX3QgcmVnX2NmZyk7CitleHRlcm4gaW50IG9tYXAxX211eF9pbml0KHZvaWQpOworZXh0ZXJuIGludCBvbWFwMl9tdXhfaW5pdCh2b2lkKTsKK2V4dGVybiBpbnQgb21hcF9tdXhfcmVnaXN0ZXIoc3RydWN0IHBpbl9jb25maWcgKiBwaW5zLCB1bnNpZ25lZCBsb25nIHNpemUpOworZXh0ZXJuIGludCBvbWFwX2NmZ19yZWcodW5zaWduZWQgbG9uZyByZWdfY2ZnKTsKICNlbHNlCiAvKiBib290IGxvYWRlciBkb2VzIGl0IGFsbCAobm8gd2FybmluZ3MgZnJvbSBDT05GSUdfT01BUF9NVVhfV0FSTklOR1MpICovCi1zdGF0aWMgaW5saW5lIGludCBvbWFwX2NmZ19yZWcocmVnX2NmZ190IHJlZ19jZmcpIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgaW50IG9tYXAxX211eF9pbml0KHZvaWQpIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgaW50IG9tYXAyX211eF9pbml0KHZvaWQpIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgaW50IG9tYXBfY2ZnX3JlZyh1bnNpZ25lZCBsb25nIHJlZ19jZmcpIHsgcmV0dXJuIDA7IH0KICNlbmRpZgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvb21hcDE1MTAuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvb21hcDE1MTAuaAppbmRleCBmMDg2YTM5Li5jNTc1ZDM1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL29tYXAxNTEwLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9vbWFwMTUxMC5oCkBAIC0yNSw4ICsyNSw4IEBACiAgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwogCi0jaWZuZGVmIF9fQVNNX0FSQ0hfT01BUDE1MTBfSAotI2RlZmluZSBfX0FTTV9BUkNIX09NQVAxNTEwX0gKKyNpZm5kZWYgX19BU01fQVJDSF9PTUFQMTVYWF9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfT01BUDE1WFhfSAogCiAvKgogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNDQsNSArNDQsNSBAQAogI2RlZmluZSBPTUFQMTUxMF9EU1BSRUdfU0laRQlTWl8xMjhLCiAjZGVmaW5lIE9NQVAxNTEwX0RTUFJFR19TVEFSVAkweEUxMDAwMDAwCiAKLSNlbmRpZiAvKiAgX19BU01fQVJDSF9PTUFQMTUxMF9IICovCisjZW5kaWYgLyogIF9fQVNNX0FSQ0hfT01BUDE1WFhfSCAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL29tYXAyNHh4LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL29tYXAyNHh4LmgKaW5kZXggYTkxMDU0Ni4uNmU1OTgwNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9vbWFwMjR4eC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvb21hcDI0eHguaApAQCAtMSwxNSArMSwyNCBAQAogI2lmbmRlZiBfX0FTTV9BUkNIX09NQVAyNFhYX0gKICNkZWZpbmUgX19BU01fQVJDSF9PTUFQMjRYWF9ICiAKLSNkZWZpbmUgT01BUDI0WFhfTDRfSU9fQkFTRQkweDQ4MDAwMDAwCisvKgorICogUGxlYXNlIHBsYWNlIG9ubHkgYmFzZSBkZWZpbmVzIGhlcmUgYW5kIHB1dCB0aGUgcmVzdCBpbiBkZXZpY2UKKyAqIHNwZWNpZmljIGhlYWRlcnMuIE5vdGUgYWxzbyB0aGF0IHNvbWUgb2YgdGhlc2UgZGVmaW5lcyBhcmUgbmVlZGVkCisgKiBmb3Igb21hcDEgdG8gY29tcGlsZSB3aXRob3V0IGFkZGluZyBpZmRlZnMuCisgKi8KKworI2RlZmluZSBMNF8yNFhYX0JBU0UJCTB4NDgwMDAwMDAKKyNkZWZpbmUgTDNfMjRYWF9CQVNFCQkweDY4MDAwMDAwCiAKIC8qIGludGVycnVwdCBjb250cm9sbGVyICovCi0jZGVmaW5lIE9NQVAyNFhYX0lDX0JBU0UJKE9NQVAyNFhYX0w0X0lPX0JBU0UgKyAweGZlMDAwKQorI2RlZmluZSBPTUFQMjRYWF9JQ19CQVNFCShMNF8yNFhYX0JBU0UgKyAweGZlMDAwKQogI2RlZmluZSBWQV9JQ19CQVNFCQlJT19BRERSRVNTKE9NQVAyNFhYX0lDX0JBU0UpCi0KICNkZWZpbmUgT01BUDI0WFhfSVZBX0lOVENfQkFTRQkweDQwMDAwMDAwCi0KICNkZWZpbmUgSVJRX1NJUl9JUlEJCTB4MDA0MAogCisjZGVmaW5lIE9NQVAyNFhYXzMyS1NZTkNUX0JBU0UJKEw0XzI0WFhfQkFTRSArIDB4NDAwMCkKKyNkZWZpbmUgT01BUDI0WFhfUFJDTV9CQVNFCShMNF8yNFhYX0JBU0UgKyAweDgwMDApCisjZGVmaW5lIE9NQVAyNFhYX1NEUkNfQkFTRQkoTDNfMjRYWF9CQVNFICsgMHg5MDAwKQorCiAjZW5kaWYgLyogX19BU01fQVJDSF9PTUFQMjRYWF9IICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvb21hcGZiLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL29tYXBmYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiYTI2MjIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL29tYXBmYi5oCkBAIC0wLDAgKzEsMjgxIEBACisvKgorICogRmlsZTogaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9vbWFwZmIuaAorICoKKyAqIEZyYW1lYnVmZmVyIGRyaXZlciBmb3IgVEkgT01BUCBib2FyZHMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgTm9raWEgQ29ycG9yYXRpb24KKyAqIEF1dGhvcjogSW1yZSBEZWFrIDxpbXJlLmRlYWtAbm9raWEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZm5kZWYgX19PTUFQRkJfSAorI2RlZmluZSBfX09NQVBGQl9ICisKKy8qIElPQ1RMIGNvbW1hbmRzLiAqLworCisjZGVmaW5lIE9NQVBfSU9XKG51bSwgZHR5cGUpCV9JT1coJ08nLCBudW0sIGR0eXBlKQorI2RlZmluZSBPTUFQX0lPUihudW0sIGR0eXBlKQlfSU9SKCdPJywgbnVtLCBkdHlwZSkKKyNkZWZpbmUgT01BUF9JT1dSKG51bSwgZHR5cGUpCV9JT1dSKCdPJywgbnVtLCBkdHlwZSkKKyNkZWZpbmUgT01BUF9JTyhudW0pCQlfSU8oJ08nLCBudW0pCisKKyNkZWZpbmUgT01BUEZCX01JUlJPUgkJT01BUF9JT1coMzEsIGludCkKKyNkZWZpbmUgT01BUEZCX1NZTkNfR0ZYCQlPTUFQX0lPKDM3KQorI2RlZmluZSBPTUFQRkJfVlNZTkMJCU9NQVBfSU8oMzgpCisjZGVmaW5lIE9NQVBGQl9TRVRfVVBEQVRFX01PREUJT01BUF9JT1coNDAsIGVudW0gb21hcGZiX3VwZGF0ZV9tb2RlKQorI2RlZmluZSBPTUFQRkJfR0VUX0NBUFMJCU9NQVBfSU9SKDQyLCB1bnNpZ25lZCBsb25nKQorI2RlZmluZSBPTUFQRkJfR0VUX1VQREFURV9NT0RFCU9NQVBfSU9XKDQzLCBlbnVtIG9tYXBmYl91cGRhdGVfbW9kZSkKKyNkZWZpbmUgT01BUEZCX0xDRF9URVNUCQlPTUFQX0lPVyg0NSwgaW50KQorI2RlZmluZSBPTUFQRkJfQ1RSTF9URVNUCU9NQVBfSU9XKDQ2LCBpbnQpCisjZGVmaW5lIE9NQVBGQl9VUERBVEVfV0lORE9XCU9NQVBfSU9XKDQ3LCBzdHJ1Y3Qgb21hcGZiX3VwZGF0ZV93aW5kb3cpCisjZGVmaW5lIE9NQVBGQl9TRVRVUF9QTEFORQlPTUFQX0lPVyg0OCwgc3RydWN0IG9tYXBmYl9zZXR1cF9wbGFuZSkKKyNkZWZpbmUgT01BUEZCX0VOQUJMRV9QTEFORQlPTUFQX0lPVyg0OSwgc3RydWN0IG9tYXBmYl9lbmFibGVfcGxhbmUpCisjZGVmaW5lIE9NQVBGQl9TRVRfQ09MT1JfS0VZCU9NQVBfSU9XKDUwLCBzdHJ1Y3Qgb21hcGZiX2NvbG9yX2tleSkKKworI2RlZmluZSBPTUFQRkJfQ0FQU19HRU5FUklDX01BU0sJMHgwMDAwMGZmZgorI2RlZmluZSBPTUFQRkJfQ0FQU19MQ0RDX01BU0sJCTB4MDBmZmYwMDAKKyNkZWZpbmUgT01BUEZCX0NBUFNfUEFORUxfTUFTSwkJMHhmZjAwMDAwMAorCisjZGVmaW5lIE9NQVBGQl9DQVBTX01BTlVBTF9VUERBVEUJMHgwMDAwMTAwMAorI2RlZmluZSBPTUFQRkJfQ0FQU19TRVRfQkFDS0xJR0hUCTB4MDEwMDAwMDAKKworLyogVmFsdWVzIGZyb20gRFNQIG11c3QgbWFwIHRvIGxvd2VyIDE2LWJpdHMgKi8KKyNkZWZpbmUgT01BUEZCX0ZPUk1BVF9NQVNLICAgICAgICAgMHgwMGZmCisjZGVmaW5lIE9NQVBGQl9GT1JNQVRfRkxBR19ET1VCTEUgIDB4MDEwMAorCitlbnVtIG9tYXBmYl9jb2xvcl9mb3JtYXQgeworCU9NQVBGQl9DT0xPUl9SR0I1NjUgPSAwLAorCU9NQVBGQl9DT0xPUl9ZVVY0MjIsCisJT01BUEZCX0NPTE9SX1lVVjQyMCwKKwlPTUFQRkJfQ09MT1JfQ0xVVF84QlBQLAorCU9NQVBGQl9DT0xPUl9DTFVUXzRCUFAsCisJT01BUEZCX0NPTE9SX0NMVVRfMkJQUCwKKwlPTUFQRkJfQ09MT1JfQ0xVVF8xQlBQLAorfTsKKworc3RydWN0IG9tYXBmYl91cGRhdGVfd2luZG93IHsKKwl1MzIgeCwgeTsKKwl1MzIgd2lkdGgsIGhlaWdodDsKKwl1MzIgZm9ybWF0OworfTsKKworZW51bSBvbWFwZmJfcGxhbmUgeworCU9NQVBGQl9QTEFORV9HRlggPSAwLAorCU9NQVBGQl9QTEFORV9WSUQxLAorCU9NQVBGQl9QTEFORV9WSUQyLAorfTsKKworZW51bSBvbWFwZmJfY2hhbm5lbF9vdXQgeworCU9NQVBGQl9DSEFOTkVMX09VVF9MQ0QgPSAwLAorCU9NQVBGQl9DSEFOTkVMX09VVF9ESUdJVCwKK307CisKK3N0cnVjdCBvbWFwZmJfc2V0dXBfcGxhbmUgeworCXU4ICBwbGFuZTsKKwl1OCAgY2hhbm5lbF9vdXQ7CisJdTMyIG9mZnNldDsKKwl1MzIgcG9zX3gsIHBvc195OworCXUzMiB3aWR0aCwgaGVpZ2h0OworCXUzMiBjb2xvcl9tb2RlOworfTsKKworc3RydWN0IG9tYXBmYl9lbmFibGVfcGxhbmUgeworCXU4ICBwbGFuZTsKKwl1OCAgZW5hYmxlOworfTsKKworZW51bSBvbWFwZmJfY29sb3Jfa2V5X3R5cGUgeworCU9NQVBGQl9DT0xPUl9LRVlfRElTQUJMRUQgPSAwLAorCU9NQVBGQl9DT0xPUl9LRVlfR0ZYX0RTVCwKKwlPTUFQRkJfQ09MT1JfS0VZX1ZJRF9TUkMsCit9OworCitzdHJ1Y3Qgb21hcGZiX2NvbG9yX2tleSB7CisJdTggIGNoYW5uZWxfb3V0OworCXUzMiBiYWNrZ3JvdW5kOworCXUzMiB0cmFuc19rZXk7CisJdTggIGtleV90eXBlOworfTsKKworZW51bSBvbWFwZmJfdXBkYXRlX21vZGUgeworCU9NQVBGQl9VUERBVEVfRElTQUJMRUQgPSAwLAorCU9NQVBGQl9BVVRPX1VQREFURSwKKwlPTUFQRkJfTUFOVUFMX1VQREFURQorfTsKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorCisjZGVmaW5lIE9NQVBfTENEQ19JTlZfVlNZTkMgICAgICAgICAgICAgMHgwMDAxCisjZGVmaW5lIE9NQVBfTENEQ19JTlZfSFNZTkMgICAgICAgICAgICAgMHgwMDAyCisjZGVmaW5lIE9NQVBfTENEQ19JTlZfUElYX0NMT0NLICAgICAgICAgMHgwMDA0CisjZGVmaW5lIE9NQVBfTENEQ19JTlZfT1VUUFVUX0VOICAgICAgICAgMHgwMDA4CisjZGVmaW5lIE9NQVBfTENEQ19IU1ZTX1JJU0lOR19FREdFICAgICAgMHgwMDEwCisjZGVmaW5lIE9NQVBfTENEQ19IU1ZTX09QUE9TSVRFICAgICAgICAgMHgwMDIwCisKKyNkZWZpbmUgT01BUF9MQ0RDX1NJR05BTF9NQVNLCQkweDAwM2YKKworI2RlZmluZSBPTUFQX0xDRENfUEFORUxfVEZUCQkweDAxMDAKKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAxCisjZGVmaW5lIE9NQVBGQl9QTEFORV9OVU0JCTEKKyNlbHNlCisjZGVmaW5lIE9NQVBGQl9QTEFORV9OVU0JCTMKKyNlbmRpZgorCitzdHJ1Y3Qgb21hcGZiX2RldmljZTsKKworc3RydWN0IGxjZF9wYW5lbCB7CisJY29uc3QgY2hhcgkqbmFtZTsKKwlpbnQJCWNvbmZpZzsJCS8qIFRGVC9TVE4sIHNpZ25hbCBpbnZlcnNpb24gKi8KKwlpbnQJCWJwcDsJCS8qIFBpeGVsIGZvcm1hdCBpbiBmYiBtZW0gKi8KKwlpbnQJCWRhdGFfbGluZXM7CS8qIExpbmVzIG9uIExDRCBIVyBpbnRlcmZhY2UgKi8KKworCWludAkJeF9yZXMsIHlfcmVzOworCWludAkJcGl4ZWxfY2xvY2s7CS8qIEluIGtIeiAqLworCWludAkJaHN3OwkJLyogSG9yaXpvbnRhbCBzeW5jaHJvbml6YXRpb24KKwkJCQkJICAgcHVsc2Ugd2lkdGggKi8KKwlpbnQJCWhmcDsJCS8qIEhvcml6b250YWwgZnJvbnQgcG9yY2ggKi8KKwlpbnQJCWhicDsJCS8qIEhvcml6b250YWwgYmFjayBwb3JjaCAqLworCWludAkJdnN3OwkJLyogVmVydGljYWwgc3luY2hyb25pemF0aW9uCisJCQkJCSAgIHB1bHNlIHdpZHRoICovCisJaW50CQl2ZnA7CQkvKiBWZXJ0aWNhbCBmcm9udCBwb3JjaCAqLworCWludAkJdmJwOwkJLyogVmVydGljYWwgYmFjayBwb3JjaCAqLworCWludAkJYWNiOwkJLyogYWMtYmlhcyBwaW4gZnJlcXVlbmN5ICovCisJaW50CQlwY2Q7CQkvKiBwaXhlbCBjbG9jayBkaXZpZGVyLgorCQkJCQkgICBPYnNvbGV0ZSB1c2UgcGl4ZWxfY2xvY2sgaW5zdGVhZCAqLworCisJaW50CQkoKmluaXQpCQkoc3RydWN0IG9tYXBmYl9kZXZpY2UgKmZiZGV2KTsKKwl2b2lkCQkoKmNsZWFudXApCSh2b2lkKTsKKwlpbnQJCSgqZW5hYmxlKQkodm9pZCk7CisJdm9pZAkJKCpkaXNhYmxlKQkodm9pZCk7CisJdW5zaWduZWQgbG9uZwkoKmdldF9jYXBzKQkodm9pZCk7CisJaW50CQkoKnNldF9ia2xpZ2h0X2xldmVsKSh1bnNpZ25lZCBpbnQgbGV2ZWwpOworCXVuc2lnbmVkIGludAkoKmdldF9ia2xpZ2h0X2xldmVsKSh2b2lkKTsKKwl1bnNpZ25lZCBpbnQJKCpnZXRfYmtsaWdodF9tYXgpICAodm9pZCk7CisJaW50CQkoKnJ1bl90ZXN0KQkoaW50IHRlc3RfbnVtKTsKK307CisKK3N0cnVjdCBvbWFwZmJfZGV2aWNlOworCitzdHJ1Y3QgZXh0aWZfdGltaW5ncyB7CisJaW50IGNzX29uX3RpbWU7CisJaW50IGNzX29mZl90aW1lOworCWludCB3ZV9vbl90aW1lOworCWludCB3ZV9vZmZfdGltZTsKKwlpbnQgcmVfb25fdGltZTsKKwlpbnQgcmVfb2ZmX3RpbWU7CisJaW50IHdlX2N5Y2xlX3RpbWU7CisJaW50IHJlX2N5Y2xlX3RpbWU7CisJaW50IGNzX3B1bHNlX3dpZHRoOworCWludCBhY2Nlc3NfdGltZTsKK307CisKK3N0cnVjdCBsY2RfY3RybF9leHRpZiB7CisJaW50ICAoKmluaXQpCQkodm9pZCk7CisJdm9pZCAoKmNsZWFudXApCQkodm9pZCk7CisJdm9pZCAoKnNldF90aW1pbmdzKQkoY29uc3Qgc3RydWN0IGV4dGlmX3RpbWluZ3MgKnRpbWluZ3MpOworCXZvaWQgKCp3cml0ZV9jb21tYW5kKQkodTMyIGNtZCk7CisJdTMyICAoKnJlYWRfZGF0YSkJKHZvaWQpOworCXZvaWQgKCp3cml0ZV9kYXRhKQkodTMyIGRhdGEpOworCXZvaWQgKCp0cmFuc2Zlcl9hcmVhKQkoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAorCQkJCSB2b2lkIChjYWxsYmFjaykodm9pZCAqIGRhdGEpLCB2b2lkICpkYXRhKTsKK307CisKK3N0cnVjdCBsY2RfY3RybCB7CisJY29uc3QgY2hhcgkqbmFtZTsKKwl2b2lkCQkqZGF0YTsKKworCWludAkJKCppbml0KQkJICAoc3RydWN0IG9tYXBmYl9kZXZpY2UgKmZiZGV2LAorCQkJCQkgICBpbnQgZXh0X21vZGUsIGludCByZXFfdnJhbV9zaXplKTsKKwl2b2lkCQkoKmNsZWFudXApCSAgKHZvaWQpOworCXZvaWQJCSgqZ2V0X3ZyYW1fbGF5b3V0KSh1bnNpZ25lZCBsb25nICpzaXplLAorCQkJCQkgICB2b2lkICoqdmlydF9iYXNlLAorCQkJCQkgICBkbWFfYWRkcl90ICpwaHlzX2Jhc2UpOworCXVuc2lnbmVkIGxvbmcJKCpnZXRfY2FwcykJICAodm9pZCk7CisJaW50CQkoKnNldF91cGRhdGVfbW9kZSkoZW51bSBvbWFwZmJfdXBkYXRlX21vZGUgbW9kZSk7CisJZW51bSBvbWFwZmJfdXBkYXRlX21vZGUgKCpnZXRfdXBkYXRlX21vZGUpKHZvaWQpOworCWludAkJKCpzZXR1cF9wbGFuZSkJICAoaW50IHBsYW5lLCBpbnQgY2hhbm5lbF9vdXQsCisJCQkJCSAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAorCQkJCQkgICBpbnQgc2NyZWVuX3dpZHRoLAorCQkJCQkgICBpbnQgcG9zX3gsIGludCBwb3NfeSwgaW50IHdpZHRoLAorCQkJCQkgICBpbnQgaGVpZ2h0LCBpbnQgY29sb3JfbW9kZSk7CisJaW50CQkoKmVuYWJsZV9wbGFuZSkJICAoaW50IHBsYW5lLCBpbnQgZW5hYmxlKTsKKwlpbnQJCSgqdXBkYXRlX3dpbmRvdykgIChzdHJ1Y3Qgb21hcGZiX3VwZGF0ZV93aW5kb3cgKndpbiwKKwkJCQkJICAgdm9pZCAoKmNhbGxiYWNrKSh2b2lkICopLAorCQkJCQkgICB2b2lkICpjYWxsYmFja19kYXRhKTsKKwl2b2lkCQkoKnN5bmMpCQkgICh2b2lkKTsKKwl2b2lkCQkoKnN1c3BlbmQpCSAgKHZvaWQpOworCXZvaWQJCSgqcmVzdW1lKQkgICh2b2lkKTsKKwlpbnQJCSgqcnVuX3Rlc3QpCSAgKGludCB0ZXN0X251bSk7CisJaW50CQkoKnNldGNvbHJlZykJICAodV9pbnQgcmVnbm8sIHUxNiByZWQsIHUxNiBncmVlbiwKKwkJCQkJICAgdTE2IGJsdWUsIHUxNiB0cmFuc3AsCisJCQkJCSAgIGludCB1cGRhdGVfaHdfbWVtKTsKKwlpbnQJCSgqc2V0X2NvbG9yX2tleSkgIChzdHJ1Y3Qgb21hcGZiX2NvbG9yX2tleSAqY2spOworCit9OworCitlbnVtIG9tYXBmYl9zdGF0ZSB7CisJT01BUEZCX0RJU0FCTEVECT0gMCwKKwlPTUFQRkJfU1VTUEVOREVEPSA5OSwKKwlPTUFQRkJfQUNUSVZFCT0gMTAwCit9OworCitzdHJ1Y3Qgb21hcGZiX2RldmljZSB7CisJaW50CQkJc3RhdGU7CisJaW50ICAgICAgICAgICAgICAgICAgICAgZXh0X2xjZGM7ICAgICAgICAgICAgICAgLyogVXNpbmcgZXh0ZXJuYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTENEIGNvbnRyb2xsZXIgKi8KKwlzdHJ1Y3Qgc2VtYXBob3JlCXJxdWV1ZV9zZW1hOworCisJdm9pZAkJCSp2cmFtX3ZpcnRfYmFzZTsKKwlkbWFfYWRkcl90CQl2cmFtX3BoeXNfYmFzZTsKKwl1bnNpZ25lZCBsb25nCQl2cmFtX3NpemU7CisKKwlpbnQJCQljb2xvcl9tb2RlOworCWludAkJCXBhbGV0dGVfc2l6ZTsKKwlpbnQJCQltaXJyb3I7CisJdTMyCQkJcHNldWRvX3BhbGV0dGVbMTddOworCisJc3RydWN0IGxjZF9wYW5lbAkqcGFuZWw7CQkJLyogTENEIHBhbmVsICovCisJc3RydWN0IGxjZF9jdHJsICAgICAgICAgKmN0cmw7CQkJLyogTENEIGNvbnRyb2xsZXIgKi8KKwlzdHJ1Y3QgbGNkX2N0cmwJCSppbnRfY3RybDsJCS8qIGludGVybmFsIExDRCBjdHJsICovCisJc3RydWN0IGxjZF9jdHJsX2V4dGlmCSpleHRfaWY7CQkvKiBMQ0QgY3RybCBleHRlcm5hbAorCQkJCQkJCSAgIGludGVyZmFjZSAqLworCXN0cnVjdCBmYl9pbmZvCQkqZmJfaW5mbzsKKworCXN0cnVjdCBkZXZpY2UJCSpkZXY7Cit9OworCitleHRlcm4gc3RydWN0IGxjZF9wYW5lbCBoM19wYW5lbDsKK2V4dGVybiBzdHJ1Y3QgbGNkX3BhbmVsIGgyX3BhbmVsOworZXh0ZXJuIHN0cnVjdCBsY2RfcGFuZWwgcDJfcGFuZWw7CitleHRlcm4gc3RydWN0IGxjZF9wYW5lbCBvc2tfcGFuZWw7CitleHRlcm4gc3RydWN0IGxjZF9wYW5lbCBpbm5vdmF0b3IxNjEwX3BhbmVsOworZXh0ZXJuIHN0cnVjdCBsY2RfcGFuZWwgaW5ub3ZhdG9yMTUxMF9wYW5lbDsKKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAxCitleHRlcm4gc3RydWN0IGxjZF9jdHJsIG9tYXAxX2xjZF9jdHJsOworI2Vsc2UKK2V4dGVybiBzdHJ1Y3QgbGNkX2N0cmwgb21hcDJfZGlzcF9jdHJsOworI2VuZGlmCisKK2V4dGVybiB2b2lkIG9tYXBmYl93cml0ZV9maXJzdF9waXhlbChzdHJ1Y3Qgb21hcGZiX2RldmljZSAqZmJkZXYsIHUxNiBwaXh2YWwpOworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX19PTUFQRkJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9wbS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9wbS5oCmluZGV4IGZiZDc0MmQuLjdjNzkwNDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvcG0uaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3BtLmgKQEAgLTk4LDcgKzk4LDE0IEBACiAjZGVmaW5lIE9NQVAxNjEwX0lETEVDVDMJCTB4ZmZmZWNlMjQKICNkZWZpbmUgT01BUDE2MTBfSURMRV9MT09QX1JFUVVFU1QJMHgwNDAwCiAKLSNpZiAgICAgIWRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE1MTApICYmIFwKKyNkZWZpbmUgT01BUDczMF9JRExFQ1QxX1NMRUVQX1ZBTAkweDE2YzcKKyNkZWZpbmUgT01BUDczMF9JRExFQ1QyX1NMRUVQX1ZBTAkweDA5YzcKKyNkZWZpbmUgT01BUDczMF9JRExFQ1QzX1ZBTAkJMHgzZgorI2RlZmluZSBPTUFQNzMwX0lETEVDVDMJCTB4ZmZmZWNlMjQKKyNkZWZpbmUgT01BUDczMF9JRExFX0xPT1BfUkVRVUVTVAkweDBDMDAKKworI2lmICAgICAhZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNzMwKSAmJiBcCisJIWRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE1WFgpICYmIFwKIAkhZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTZYWCkgJiYgXAogCSFkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKQogI2Vycm9yICJQb3dlciBtYW5hZ2VtZW50IGZvciB0aGlzIHByb2Nlc3NvciBub3QgaW1wbGVtZW50ZWQgeWV0IgpAQCAtMTA3LDggKzExNCwxMCBAQAogI2lmbmRlZiBfX0FTU0VNQkxFUl9fCiBleHRlcm4gdm9pZCBvbWFwX3BtX2lkbGUodm9pZCk7CiBleHRlcm4gdm9pZCBvbWFwX3BtX3N1c3BlbmQodm9pZCk7CitleHRlcm4gdm9pZCBvbWFwNzMwX2NwdV9zdXNwZW5kKHVuc2lnbmVkIHNob3J0LCB1bnNpZ25lZCBzaG9ydCk7CiBleHRlcm4gdm9pZCBvbWFwMTUxMF9jcHVfc3VzcGVuZCh1bnNpZ25lZCBzaG9ydCwgdW5zaWduZWQgc2hvcnQpOwogZXh0ZXJuIHZvaWQgb21hcDE2MTBfY3B1X3N1c3BlbmQodW5zaWduZWQgc2hvcnQsIHVuc2lnbmVkIHNob3J0KTsKK2V4dGVybiB2b2lkIG9tYXA3MzBfaWRsZV9sb29wX3N1c3BlbmQodm9pZCk7CiBleHRlcm4gdm9pZCBvbWFwMTUxMF9pZGxlX2xvb3Bfc3VzcGVuZCh2b2lkKTsKIGV4dGVybiB2b2lkIG9tYXAxNjEwX2lkbGVfbG9vcF9zdXNwZW5kKHZvaWQpOwogCkBAIC0xMTgsNiArMTI3LDggQEAKICNkZWZpbmUgb21hcF9zZXJpYWxfd2FrZV90cmlnZ2VyKHgpCXt9CiAjZW5kaWYJLyogQ09ORklHX09NQVBfU0VSSUFMX1dBS0UgKi8KIAorZXh0ZXJuIHVuc2lnbmVkIGludCBvbWFwNzMwX2NwdV9zdXNwZW5kX3N6OworZXh0ZXJuIHVuc2lnbmVkIGludCBvbWFwNzMwX2lkbGVfbG9vcF9zdXNwZW5kX3N6OwogZXh0ZXJuIHVuc2lnbmVkIGludCBvbWFwMTUxMF9jcHVfc3VzcGVuZF9zejsKIGV4dGVybiB1bnNpZ25lZCBpbnQgb21hcDE1MTBfaWRsZV9sb29wX3N1c3BlbmRfc3o7CiBleHRlcm4gdW5zaWduZWQgaW50IG9tYXAxNjEwX2NwdV9zdXNwZW5kX3N6OwpAQCAtMTMxLDYgKzE0MiwxMCBAQAogI2RlZmluZSBVTFBEX1JFU1RPUkUoeCkgb21hcF93cml0ZXcoKHVscGRfc2xlZXBfc2F2ZVtVTFBEX1NMRUVQX1NBVkVfIyN4XSksICh4KSkKICNkZWZpbmUgVUxQRF9TSE9XKHgpIHVscGRfc2xlZXBfc2F2ZVtVTFBEX1NMRUVQX1NBVkVfIyN4XQogCisjZGVmaW5lIE1QVUk3MzBfU0FWRSh4KSBtcHVpNzMwX3NsZWVwX3NhdmVbTVBVSTczMF9TTEVFUF9TQVZFXyMjeF0gPSBvbWFwX3JlYWRsKHgpCisjZGVmaW5lIE1QVUk3MzBfUkVTVE9SRSh4KSBvbWFwX3dyaXRlbCgobXB1aTczMF9zbGVlcF9zYXZlW01QVUk3MzBfU0xFRVBfU0FWRV8jI3hdKSwgKHgpKQorI2RlZmluZSBNUFVJNzMwX1NIT1coeCkgbXB1aTczMF9zbGVlcF9zYXZlW01QVUk3MzBfU0xFRVBfU0FWRV8jI3hdCisKICNkZWZpbmUgTVBVSTE1MTBfU0FWRSh4KSBtcHVpMTUxMF9zbGVlcF9zYXZlW01QVUkxNTEwX1NMRUVQX1NBVkVfIyN4XSA9IG9tYXBfcmVhZGwoeCkKICNkZWZpbmUgTVBVSTE1MTBfUkVTVE9SRSh4KSBvbWFwX3dyaXRlbCgobXB1aTE1MTBfc2xlZXBfc2F2ZVtNUFVJMTUxMF9TTEVFUF9TQVZFXyMjeF0pLCAoeCkpCiAjZGVmaW5lIE1QVUkxNTEwX1NIT1coeCkgbXB1aTE1MTBfc2xlZXBfc2F2ZVtNUFVJMTUxMF9TTEVFUF9TQVZFXyMjeF0KQEAgLTE4OCwxMyArMjAzLDM0IEBACiAJTVBVSTE1MTBfU0xFRVBfU0FWRV9FTUlGU19DT05GSUcsCiAJTVBVSTE1MTBfU0xFRVBfU0FWRV9PTUFQX0lIMV9NSVIsCiAJTVBVSTE1MTBfU0xFRVBfU0FWRV9PTUFQX0lIMl9NSVIsCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTUxMCkKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNVhYKQogCU1QVUkxNTEwX1NMRUVQX1NBVkVfU0laRQogI2Vsc2UKIAlNUFVJMTUxMF9TTEVFUF9TQVZFX1NJWkUgPSAwCiAjZW5kaWYKIH07CiAKK2VudW0gbXB1aTczMF9zYXZlX3N0YXRlIHsKKwlNUFVJNzMwX1NMRUVQX1NBVkVfU1RBUlQgPSAwLAorCS8qCisJICogTVBVSSByZWdpc3RlcnMgMzIgYml0cworCSAqLworCU1QVUk3MzBfU0xFRVBfU0FWRV9NUFVJX0NUUkwsCisJTVBVSTczMF9TTEVFUF9TQVZFX01QVUlfRFNQX0JPT1RfQ09ORklHLAorCU1QVUk3MzBfU0xFRVBfU0FWRV9NUFVJX0RTUF9BUElfQ09ORklHLAorCU1QVUk3MzBfU0xFRVBfU0FWRV9NUFVJX0RTUF9TVEFUVVMsCisJTVBVSTczMF9TTEVFUF9TQVZFX0VNSUZGX1NEUkFNX0NPTkZJRywKKwlNUFVJNzMwX1NMRUVQX1NBVkVfRU1JRlNfQ09ORklHLAorCU1QVUk3MzBfU0xFRVBfU0FWRV9PTUFQX0lIMV9NSVIsCisJTVBVSTczMF9TTEVFUF9TQVZFX09NQVBfSUgyXzBfTUlSLAorCU1QVUk3MzBfU0xFRVBfU0FWRV9PTUFQX0lIMl8xX01JUiwKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA3MzApCisJTVBVSTczMF9TTEVFUF9TQVZFX1NJWkUKKyNlbHNlCisJTVBVSTczMF9TTEVFUF9TQVZFX1NJWkUgPSAwCisjZW5kaWYKK307CisKIGVudW0gbXB1aTE2MTBfc2F2ZV9zdGF0ZSB7CiAJTVBVSTE2MTBfU0xFRVBfU0FWRV9TVEFSVCA9IDAsCiAJLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvcHJjbS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9wcmNtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I0OGE1YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvcHJjbS5oCkBAIC0wLDAgKzEsNDI5IEBACisvKgorICogcHJjbS5oIC0gQWNjZXNzIGRlZmluYXRpb25zIGZvciB1c2UgaW4gT01BUDI0WFggY2xvY2sgYW5kIHBvd2VyIG1hbmFnZW1lbnQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUk1fQVJDSF9EUE1fUFJDTV9ICisjZGVmaW5lIF9fQVNNX0FSTV9BUkNIX0RQTV9QUkNNX0gKKworLyogU0VUX1BFUkZPUk1BTkNFX0xFVkVMIFBBUkFNRVRFUlMgKi8KKyNkZWZpbmUgUFJDTV9IQUxGX1NQRUVEIDEKKyNkZWZpbmUgUFJDTV9GVUxMX1NQRUVEIDIKKworI2lmbmRlZiBfX0FTU0VNQkxFUl9fCisKKyNkZWZpbmUgUFJDTV9SRUczMihvZmZzZXQpCV9fUkVHMzIoT01BUDI0WFhfUFJDTV9CQVNFICsgKG9mZnNldCkpCisKKyNkZWZpbmUgUFJDTV9SRVZJU0lPTgkJUFJDTV9SRUczMigweDAwMCkKKyNkZWZpbmUgUFJDTV9TWVNDT05GSUcJCVBSQ01fUkVHMzIoMHgwMTApCisjZGVmaW5lIFBSQ01fSVJRU1RBVFVTX01QVQlQUkNNX1JFRzMyKDB4MDE4KQorI2RlZmluZSBQUkNNX0lSUUVOQUJMRV9NUFUJUFJDTV9SRUczMigweDAxQykKKyNkZWZpbmUgUFJDTV9WT0xUQ1RSTAkJUFJDTV9SRUczMigweDA1MCkKKyNkZWZpbmUgUFJDTV9WT0xUU1QJCVBSQ01fUkVHMzIoMHgwNTQpCisjZGVmaW5lIFBSQ01fQ0xLU1JDX0NUUkwJUFJDTV9SRUczMigweDA2MCkKKyNkZWZpbmUgUFJDTV9DTEtPVVRfQ1RSTAlQUkNNX1JFRzMyKDB4MDcwKQorI2RlZmluZSBQUkNNX0NMS0VNVUxfQ1RSTAlQUkNNX1JFRzMyKDB4MDc4KQorI2RlZmluZSBQUkNNX0NMS0NGR19DVFJMCVBSQ01fUkVHMzIoMHgwODApCisjZGVmaW5lIFBSQ01fQ0xLQ0ZHX1NUQVRVUwlQUkNNX1JFRzMyKDB4MDg0KQorI2RlZmluZSBQUkNNX1ZPTFRTRVRVUAkJUFJDTV9SRUczMigweDA5MCkKKyNkZWZpbmUgUFJDTV9DTEtTU0VUVVAJCVBSQ01fUkVHMzIoMHgwOTQpCisjZGVmaW5lIFBSQ01fUE9MQ1RSTAkJUFJDTV9SRUczMigweDA5OCkKKworLyogR0VORVJBTCBQVVJQT1NFICovCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTEJUFJDTV9SRUczMigweDBCMCkKKyNkZWZpbmUgR0VORVJBTF9QVVJQT1NFMglQUkNNX1JFRzMyKDB4MEI0KQorI2RlZmluZSBHRU5FUkFMX1BVUlBPU0UzCVBSQ01fUkVHMzIoMHgwQjgpCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTQJUFJDTV9SRUczMigweDBCQykKKyNkZWZpbmUgR0VORVJBTF9QVVJQT1NFNQlQUkNNX1JFRzMyKDB4MEMwKQorI2RlZmluZSBHRU5FUkFMX1BVUlBPU0U2CVBSQ01fUkVHMzIoMHgwQzQpCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTcJUFJDTV9SRUczMigweDBDOCkKKyNkZWZpbmUgR0VORVJBTF9QVVJQT1NFOAlQUkNNX1JFRzMyKDB4MENDKQorI2RlZmluZSBHRU5FUkFMX1BVUlBPU0U5CVBSQ01fUkVHMzIoMHgwRDApCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTEwCVBSQ01fUkVHMzIoMHgwRDQpCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTExCVBSQ01fUkVHMzIoMHgwRDgpCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTEyCVBSQ01fUkVHMzIoMHgwREMpCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTEzCVBSQ01fUkVHMzIoMHgwRTApCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTE0CVBSQ01fUkVHMzIoMHgwRTQpCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTE1CVBSQ01fUkVHMzIoMHgwRTgpCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTE2CVBSQ01fUkVHMzIoMHgwRUMpCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTE3CVBSQ01fUkVHMzIoMHgwRjApCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTE4CVBSQ01fUkVHMzIoMHgwRjQpCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTE5CVBSQ01fUkVHMzIoMHgwRjgpCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTIwCVBSQ01fUkVHMzIoMHgwRkMpCisKKy8qIE1QVSAqLworI2RlZmluZSBDTV9DTEtTRUxfTVBVCQlQUkNNX1JFRzMyKDB4MTQwKQorI2RlZmluZSBDTV9DTEtTVENUUkxfTVBVCVBSQ01fUkVHMzIoMHgxNDgpCisjZGVmaW5lIFJNX1JTVFNUX01QVQkJUFJDTV9SRUczMigweDE1OCkKKyNkZWZpbmUgUE1fV0tERVBfTVBVCQlQUkNNX1JFRzMyKDB4MUM4KQorI2RlZmluZSBQTV9FVkdFTkNUUkxfTVBVCVBSQ01fUkVHMzIoMHgxRDQpCisjZGVmaW5lIFBNX0VWRUdFTk9OVElNX01QVQlQUkNNX1JFRzMyKDB4MUQ4KQorI2RlZmluZSBQTV9FVkVHRU5PRkZUSU1fTVBVCVBSQ01fUkVHMzIoMHgxREMpCisjZGVmaW5lIFBNX1BXU1RDVFJMX01QVQkJUFJDTV9SRUczMigweDFFMCkKKyNkZWZpbmUgUE1fUFdTVFNUX01QVQkJUFJDTV9SRUczMigweDFFNCkKKworLyogQ09SRSAqLworI2RlZmluZSBDTV9GQ0xLRU4xX0NPUkUJCVBSQ01fUkVHMzIoMHgyMDApCisjZGVmaW5lIENNX0ZDTEtFTjJfQ09SRQkJUFJDTV9SRUczMigweDIwNCkKKyNkZWZpbmUgQ01fRkNMS0VOM19DT1JFCQlQUkNNX1JFRzMyKDB4MjA4KQorI2RlZmluZSBDTV9JQ0xLRU4xX0NPUkUJCVBSQ01fUkVHMzIoMHgyMTApCisjZGVmaW5lIENNX0lDTEtFTjJfQ09SRQkJUFJDTV9SRUczMigweDIxNCkKKyNkZWZpbmUgQ01fSUNMS0VOM19DT1JFCQlQUkNNX1JFRzMyKDB4MjE4KQorI2RlZmluZSBDTV9JQ0xLRU40X0NPUkUJCVBSQ01fUkVHMzIoMHgyMUMpCisjZGVmaW5lIENNX0lETEVTVDFfQ09SRQkJUFJDTV9SRUczMigweDIyMCkKKyNkZWZpbmUgQ01fSURMRVNUMl9DT1JFCQlQUkNNX1JFRzMyKDB4MjI0KQorI2RlZmluZSBDTV9JRExFU1QzX0NPUkUJCVBSQ01fUkVHMzIoMHgyMjgpCisjZGVmaW5lIENNX0lETEVTVDRfQ09SRQkJUFJDTV9SRUczMigweDIyQykKKyNkZWZpbmUgQ01fQVVUT0lETEUxX0NPUkUJUFJDTV9SRUczMigweDIzMCkKKyNkZWZpbmUgQ01fQVVUT0lETEUyX0NPUkUJUFJDTV9SRUczMigweDIzNCkKKyNkZWZpbmUgQ01fQVVUT0lETEUzX0NPUkUJUFJDTV9SRUczMigweDIzOCkKKyNkZWZpbmUgQ01fQVVUT0lETEU0X0NPUkUJUFJDTV9SRUczMigweDIzQykKKyNkZWZpbmUgQ01fQ0xLU0VMMV9DT1JFCQlQUkNNX1JFRzMyKDB4MjQwKQorI2RlZmluZSBDTV9DTEtTRUwyX0NPUkUJCVBSQ01fUkVHMzIoMHgyNDQpCisjZGVmaW5lIENNX0NMS1NUQ1RSTF9DT1JFCVBSQ01fUkVHMzIoMHgyNDgpCisjZGVmaW5lIFBNX1dLRU4xX0NPUkUJCVBSQ01fUkVHMzIoMHgyQTApCisjZGVmaW5lIFBNX1dLRU4yX0NPUkUJCVBSQ01fUkVHMzIoMHgyQTQpCisjZGVmaW5lIFBNX1dLU1QxX0NPUkUJCVBSQ01fUkVHMzIoMHgyQjApCisjZGVmaW5lIFBNX1dLU1QyX0NPUkUJCVBSQ01fUkVHMzIoMHgyQjQpCisjZGVmaW5lIFBNX1dLREVQX0NPUkUJCVBSQ01fUkVHMzIoMHgyQzgpCisjZGVmaW5lIFBNX1BXU1RDVFJMX0NPUkUJUFJDTV9SRUczMigweDJFMCkKKyNkZWZpbmUgUE1fUFdTVFNUX0NPUkUJCVBSQ01fUkVHMzIoMHgyRTQpCisKKy8qIEdGWCAqLworI2RlZmluZSBDTV9GQ0xLRU5fR0ZYCQlQUkNNX1JFRzMyKDB4MzAwKQorI2RlZmluZSBDTV9JQ0xLRU5fR0ZYCQlQUkNNX1JFRzMyKDB4MzEwKQorI2RlZmluZSBDTV9JRExFU1RfR0ZYCQlQUkNNX1JFRzMyKDB4MzIwKQorI2RlZmluZSBDTV9DTEtTRUxfR0ZYCQlQUkNNX1JFRzMyKDB4MzQwKQorI2RlZmluZSBDTV9DTEtTVENUUkxfR0ZYCVBSQ01fUkVHMzIoMHgzNDgpCisjZGVmaW5lIFJNX1JTVENUUkxfR0ZYCQlQUkNNX1JFRzMyKDB4MzUwKQorI2RlZmluZSBSTV9SU1RTVF9HRlgJCVBSQ01fUkVHMzIoMHgzNTgpCisjZGVmaW5lIFBNX1dLREVQX0dGWAkJUFJDTV9SRUczMigweDNDOCkKKyNkZWZpbmUgUE1fUFdTVENUUkxfR0ZYCQlQUkNNX1JFRzMyKDB4M0UwKQorI2RlZmluZSBQTV9QV1NUU1RfR0ZYCQlQUkNNX1JFRzMyKDB4M0U0KQorCisvKiBXQUtFLVVQICovCisjZGVmaW5lIENNX0ZDTEtFTl9XS1VQCQlQUkNNX1JFRzMyKDB4NDAwKQorI2RlZmluZSBDTV9JQ0xLRU5fV0tVUAkJUFJDTV9SRUczMigweDQxMCkKKyNkZWZpbmUgQ01fSURMRVNUX1dLVVAJCVBSQ01fUkVHMzIoMHg0MjApCisjZGVmaW5lIENNX0FVVE9JRExFX1dLVVAJUFJDTV9SRUczMigweDQzMCkKKyNkZWZpbmUgQ01fQ0xLU0VMX1dLVVAJCVBSQ01fUkVHMzIoMHg0NDApCisjZGVmaW5lIFJNX1JTVENUUkxfV0tVUAkJUFJDTV9SRUczMigweDQ1MCkKKyNkZWZpbmUgUk1fUlNUVElNRV9XS1VQCQlQUkNNX1JFRzMyKDB4NDU0KQorI2RlZmluZSBSTV9SU1RTVF9XS1VQCQlQUkNNX1JFRzMyKDB4NDU4KQorI2RlZmluZSBQTV9XS0VOX1dLVVAJCVBSQ01fUkVHMzIoMHg0QTApCisjZGVmaW5lIFBNX1dLU1RfV0tVUAkJUFJDTV9SRUczMigweDRCMCkKKworLyogQ0xPQ0tTICovCisjZGVmaW5lIENNX0NMS0VOX1BMTAkJUFJDTV9SRUczMigweDUwMCkKKyNkZWZpbmUgQ01fSURMRVNUX0NLR0VOCQlQUkNNX1JFRzMyKDB4NTIwKQorI2RlZmluZSBDTV9BVVRPSURMRV9QTEwJCVBSQ01fUkVHMzIoMHg1MzApCisjZGVmaW5lIENNX0NMS1NFTDFfUExMCQlQUkNNX1JFRzMyKDB4NTQwKQorI2RlZmluZSBDTV9DTEtTRUwyX1BMTAkJUFJDTV9SRUczMigweDU0NCkKKworLyogRFNQICovCisjZGVmaW5lIENNX0ZDTEtFTl9EU1AJCVBSQ01fUkVHMzIoMHg4MDApCisjZGVmaW5lIENNX0lDTEtFTl9EU1AJCVBSQ01fUkVHMzIoMHg4MTApCisjZGVmaW5lIENNX0lETEVTVF9EU1AJCVBSQ01fUkVHMzIoMHg4MjApCisjZGVmaW5lIENNX0FVVE9JRExFX0RTUAkJUFJDTV9SRUczMigweDgzMCkKKyNkZWZpbmUgQ01fQ0xLU0VMX0RTUAkJUFJDTV9SRUczMigweDg0MCkKKyNkZWZpbmUgQ01fQ0xLU1RDVFJMX0RTUAlQUkNNX1JFRzMyKDB4ODQ4KQorI2RlZmluZSBSTV9SU1RDVFJMX0RTUAkJUFJDTV9SRUczMigweDg1MCkKKyNkZWZpbmUgUk1fUlNUU1RfRFNQCQlQUkNNX1JFRzMyKDB4ODU4KQorI2RlZmluZSBQTV9XS0VOX0RTUAkJUFJDTV9SRUczMigweDhBMCkKKyNkZWZpbmUgUE1fV0tERVBfRFNQCQlQUkNNX1JFRzMyKDB4OEM4KQorI2RlZmluZSBQTV9QV1NUQ1RSTF9EU1AJCVBSQ01fUkVHMzIoMHg4RTApCisjZGVmaW5lIFBNX1BXU1RTVF9EU1AJCVBSQ01fUkVHMzIoMHg4RTQpCisjZGVmaW5lIFBSQ01fSVJRU1RBVFVTX0RTUAlQUkNNX1JFRzMyKDB4OEYwKQorI2RlZmluZSBQUkNNX0lSUUVOQUJMRV9EU1AJUFJDTV9SRUczMigweDhGNCkKKworLyogSVZBICovCisjZGVmaW5lIFBSQ01fSVJRU1RBVFVTX0lWQQlQUkNNX1JFRzMyKDB4OEY4KQorI2RlZmluZSBQUkNNX0lSUUVOQUJMRV9JVkEJUFJDTV9SRUczMigweDhGQykKKworLyogTW9kZW0gb24gMjQzMCAqLworI2RlZmluZSBDTV9GQ0xLRU5fTURNCQlQUkNNX1JFRzMyKDB4QzAwKQorI2RlZmluZSBDTV9JQ0xLRU5fTURNCQlQUkNNX1JFRzMyKDB4QzEwKQorI2RlZmluZSBDTV9JRExFU1RfTURNCQlQUkNNX1JFRzMyKDB4QzIwKQorI2RlZmluZSBDTV9DTEtTRUxfTURNCQlQUkNNX1JFRzMyKDB4QzQwKQorCisvKiBGSVhNRTogTW92ZSB0byBoZWFkZXIgZm9yIDI0MzAgKi8KKyNkZWZpbmUgRElTUF9CQVNFCQkoT01BUDI0WFhfTDRfSU9fQkFTRSsweDUwMDAwKQorI2RlZmluZSBESVNQX1JFRzMyKG9mZnNldCkJX19SRUczMihESVNQX0JBU0UgKyAob2Zmc2V0KSkKKworI2RlZmluZSBPTUFQMjRYWF9HUE1DX0JBU0UJKEwzXzI0WFhfQkFTRSArIDB4YTAwMCkKKyNkZWZpbmUgR1BNQ19CQVNFCQkoT01BUDI0WFhfR1BNQ19CQVNFKQorI2RlZmluZSBHUE1DX1JFRzMyKG9mZnNldCkJX19SRUczMihHUE1DX0JBU0UgKyAob2Zmc2V0KSkKKworI2RlZmluZSBHUFQxX0JBU0UJCShPTUFQMjRYWF9HUFQxKQorI2RlZmluZSBHUFQxX1JFRzMyKG9mZnNldCkJX19SRUczMihHUFQxX0JBU0UgKyAob2Zmc2V0KSkKKworLyogTWlzYyBzeXNjb25maWcgKi8KKyNkZWZpbmUgRElTUENfU1lTQ09ORklHCQlESVNQX1JFRzMyKDB4NDEwKQorI2RlZmluZSBTUElfQkFTRQkJKE9NQVAyNFhYX0w0X0lPX0JBU0UrMHg5ODAwMCkKKyNkZWZpbmUgTUNTUEkxX1NZU0NPTkZJRwlfX1JFRzMyKFNQSV9CQVNFICsgMHgxMCkKKyNkZWZpbmUgTUNTUEkyX1NZU0NPTkZJRwlfX1JFRzMyKFNQSV9CQVNFKzB4MjAwMCArIDB4MTApCisKKy8vI2RlZmluZSBEU1BfTU1VX1NZU0NPTkZJRwkweDVBMDAwMDEwCisjZGVmaW5lIENBTUVSQV9NTVVfU1lTQ09ORklHCV9fUkVHMzIoRElTUF9CQVNFKzB4MkMxMCkKKy8vI2RlZmluZSBJVkFfTU1VX1NZU0NPTkZJRwkweDVEMDAwMDEwCisvLyNkZWZpbmUgRFNQX0RNQV9TWVNDT05GSUcJMHgwMEZDQzAyQworI2RlZmluZSBDQU1FUkFfRE1BX1NZU0NPTkZJRwlfX1JFRzMyKERJU1BfQkFTRSsweDI4MkMpCisjZGVmaW5lIFNZU1RFTV9ETUFfU1lTQ09ORklHCV9fUkVHMzIoRElTUF9CQVNFKzB4NjAyQykKKyNkZWZpbmUgR1BNQ19TWVNDT05GSUcJCUdQTUNfUkVHMzIoMHgwMTApCisjZGVmaW5lIE1BSUxCT1hFU19TWVNDT05GSUcJX19SRUczMihPTUFQMjRYWF9MNF9JT19CQVNFKzB4OTQwMTApCisjZGVmaW5lIFVBUlQxX1NZU0NPTkZJRwkJX19SRUczMihPTUFQMjRYWF9MNF9JT19CQVNFKzB4NkEwNTQpCisjZGVmaW5lIFVBUlQyX1NZU0NPTkZJRwkJX19SRUczMihPTUFQMjRYWF9MNF9JT19CQVNFKzB4NkMwNTQpCisjZGVmaW5lIFVBUlQzX1NZU0NPTkZJRwkJX19SRUczMihPTUFQMjRYWF9MNF9JT19CQVNFKzB4NkUwNTQpCisvLyNkZWZpbmUgSVZBX1NZU0NPTkZJRwkJMHg1QzA2MDAxMAorI2RlZmluZSBTRFJDX1NZU0NPTkZJRwkJX19SRUczMihPTUFQMjRYWF9TRFJDX0JBU0UrMHgxMCkKKyNkZWZpbmUgU01TX1NZU0NPTkZJRwkJX19SRUczMihPTUFQMjRYWF9TTVNfQkFTRSsweDEwKQorI2RlZmluZSBTU0lfU1lTQ09ORklHCQlfX1JFRzMyKERJU1BfQkFTRSsweDgwMTApCisvLyNkZWZpbmUgVkxZTlFfU1lTQ09ORklHCTB4NjdGRkZFMTAKKworLyogcmt3IC0gZ29vZCBjYW5uaWRhdGVzIGZvciBQTV8gdG8gc3RhcnQgd2hhdCBubSB3YXMgdHJ5aW5nICovCisjZGVmaW5lIE9NQVAyNFhYX0dQVDIJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4MkEwMDApCisjZGVmaW5lIE9NQVAyNFhYX0dQVDMJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4NzgwMDApCisjZGVmaW5lIE9NQVAyNFhYX0dQVDQJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4N0EwMDApCisjZGVmaW5lIE9NQVAyNFhYX0dQVDUJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4N0MwMDApCisjZGVmaW5lIE9NQVAyNFhYX0dQVDYJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4N0UwMDApCisjZGVmaW5lIE9NQVAyNFhYX0dQVDcJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4ODAwMDApCisjZGVmaW5lIE9NQVAyNFhYX0dQVDgJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4ODIwMDApCisjZGVmaW5lIE9NQVAyNFhYX0dQVDkJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4ODQwMDApCisjZGVmaW5lIE9NQVAyNFhYX0dQVDEwCQkoT01BUDI0WFhfTDRfSU9fQkFTRSsweDg2MDAwKQorI2RlZmluZSBPTUFQMjRYWF9HUFQxMQkJKE9NQVAyNFhYX0w0X0lPX0JBU0UrMHg4ODAwMCkKKyNkZWZpbmUgT01BUDI0WFhfR1BUMTIJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4OEEwMDApCisKKyNkZWZpbmUgR1BUSU1FUjFfU1lTQ09ORklHCUdQVDFfUkVHMzIoMHgwMTApCisjZGVmaW5lIEdQVElNRVIyX1NZU0NPTkZJRwlfX1JFRzMyKE9NQVAyNFhYX0dQVDIgKyAweDEwKQorI2RlZmluZSBHUFRJTUVSM19TWVNDT05GSUcJX19SRUczMihPTUFQMjRYWF9HUFQzICsgMHgxMCkKKyNkZWZpbmUgR1BUSU1FUjRfU1lTQ09ORklHCV9fUkVHMzIoT01BUDI0WFhfR1BUNCArIDB4MTApCisjZGVmaW5lIEdQVElNRVI1X1NZU0NPTkZJRwlfX1JFRzMyKE9NQVAyNFhYX0dQVDUgKyAweDEwKQorI2RlZmluZSBHUFRJTUVSNl9TWVNDT05GSUcJX19SRUczMihPTUFQMjRYWF9HUFQ2ICsgMHgxMCkKKyNkZWZpbmUgR1BUSU1FUjdfU1lTQ09ORklHCV9fUkVHMzIoT01BUDI0WFhfR1BUNyArIDB4MTApCisjZGVmaW5lIEdQVElNRVI4X1NZU0NPTkZJRwlfX1JFRzMyKE9NQVAyNFhYX0dQVDggKyAweDEwKQorI2RlZmluZSBHUFRJTUVSOV9TWVNDT05GSUcJX19SRUczMihPTUFQMjRYWF9HUFQ5ICsgMHgxMCkKKyNkZWZpbmUgR1BUSU1FUjEwX1NZU0NPTkZJRwlfX1JFRzMyKE9NQVAyNFhYX0dQVDEwICsgMHgxMCkKKyNkZWZpbmUgR1BUSU1FUjExX1NZU0NPTkZJRwlfX1JFRzMyKE9NQVAyNFhYX0dQVDExICsgMHgxMCkKKyNkZWZpbmUgR1BUSU1FUjEyX1NZU0NPTkZJRwlfX1JFRzMyKE9NQVAyNFhYX0dQVDEyICsgMHgxMCkKKworI2RlZmluZSBHUElPWF9CQVNFKFgpCQkoT01BUDI0WFhfR1BJT19CQVNFKygweDIwMDAqKChYKS0xKSkpCisKKyNkZWZpbmUgR1BJTzFfU1lTQ09ORklHCQlfX1JFRzMyKChHUElPWF9CQVNFKDEpKzB4MTApKQorI2RlZmluZSBHUElPMl9TWVNDT05GSUcJCV9fUkVHMzIoKEdQSU9YX0JBU0UoMikrMHgxMCkpCisjZGVmaW5lIEdQSU8zX1NZU0NPTkZJRwkJX19SRUczMigoR1BJT1hfQkFTRSgzKSsweDEwKSkKKyNkZWZpbmUgR1BJTzRfU1lTQ09ORklHCQlfX1JFRzMyKChHUElPWF9CQVNFKDQpKzB4MTApKQorCisvKiBHUCBUSU1FUiAxICovCisjZGVmaW5lIEdQVElNRVIxX1RJU1RBVAkJR1BUMV9SRUczMigweDAxNCkKKyNkZWZpbmUgR1BUSU1FUjFfVElTUgkJR1BUMV9SRUczMigweDAxOCkKKyNkZWZpbmUgR1BUSU1FUjFfVElFUgkJR1BUMV9SRUczMigweDAxQykKKyNkZWZpbmUgR1BUSU1FUjFfVFdFUgkJR1BUMV9SRUczMigweDAyMCkKKyNkZWZpbmUgR1BUSU1FUjFfVENMUgkJR1BUMV9SRUczMigweDAyNCkKKyNkZWZpbmUgR1BUSU1FUjFfVENSUgkJR1BUMV9SRUczMigweDAyOCkKKyNkZWZpbmUgR1BUSU1FUjFfVExEUgkJR1BUMV9SRUczMigweDAyQykKKyNkZWZpbmUgR1BUSU1FUjFfVFRHUgkJR1BUMV9SRUczMigweDAzMCkKKyNkZWZpbmUgR1BUSU1FUjFfVFdQUwkJR1BUMV9SRUczMigweDAzNCkKKyNkZWZpbmUgR1BUSU1FUjFfVE1BUgkJR1BUMV9SRUczMigweDAzOCkKKyNkZWZpbmUgR1BUSU1FUjFfVENBUjEJCUdQVDFfUkVHMzIoMHgwM0MpCisjZGVmaW5lIEdQVElNRVIxX1RTSUNSCQlHUFQxX1JFRzMyKDB4MDQwKQorI2RlZmluZSBHUFRJTUVSMV9UQ0FSMgkJR1BUMV9SRUczMigweDA0NCkKKworLyogcmt3IC0tIGJhc2UgZml4IHVwIHBsZWFzZS4uLiAqLworI2RlZmluZSBHUFRJTUVSM19USVNSCQlfX1JFRzMyKE9NQVAyNFhYX0w0X0lPX0JBU0UrMHg3ODAxOCkKKworLyogU0RSQyAqLworI2RlZmluZSBTRFJDX0RMTEFfQ1RSTAkJX19SRUczMihPTUFQMjRYWF9TRFJDX0JBU0UrMHgwNjApCisjZGVmaW5lIFNEUkNfRExMQV9TVEFUVVMJX19SRUczMihPTUFQMjRYWF9TRFJDX0JBU0UrMHgwNjQpCisjZGVmaW5lIFNEUkNfRExMQl9DVFJMCQlfX1JFRzMyKE9NQVAyNFhYX1NEUkNfQkFTRSsweDA2OCkKKyNkZWZpbmUgU0RSQ19ETExCX1NUQVRVUwlfX1JFRzMyKE9NQVAyNFhYX1NEUkNfQkFTRSsweDA2QykKKyNkZWZpbmUgU0RSQ19QT1dFUgkJX19SRUczMihPTUFQMjRYWF9TRFJDX0JBU0UrMHgwNzApCisjZGVmaW5lIFNEUkNfTVJfMAkJX19SRUczMihPTUFQMjRYWF9TRFJDX0JBU0UrMHgwODQpCisKKy8qIEdQSU8gMSAqLworI2RlZmluZSBHUElPMV9CQVNFCQlHUElPWF9CQVNFKDEpCisjZGVmaW5lIEdQSU8xX1JFRzMyKG9mZnNldCkJX19SRUczMihHUElPMV9CQVNFICsgKG9mZnNldCkpCisjZGVmaW5lIEdQSU8xX0lSUUVOQUJMRTEJR1BJTzFfUkVHMzIoMHgwMUMpCisjZGVmaW5lIEdQSU8xX0lSUVNUQVRVUzEJR1BJTzFfUkVHMzIoMHgwMTgpCisjZGVmaW5lIEdQSU8xX0lSUUVOQUJMRTIJR1BJTzFfUkVHMzIoMHgwMkMpCisjZGVmaW5lIEdQSU8xX0lSUVNUQVRVUzIJR1BJTzFfUkVHMzIoMHgwMjgpCisjZGVmaW5lIEdQSU8xX1dBS0VVUEVOQUJMRQlHUElPMV9SRUczMigweDAyMCkKKyNkZWZpbmUgR1BJTzFfUklTSU5HREVURUNUCUdQSU8xX1JFRzMyKDB4MDQ4KQorI2RlZmluZSBHUElPMV9EQVRBSU4JCUdQSU8xX1JFRzMyKDB4MDM4KQorI2RlZmluZSBHUElPMV9PRQkJR1BJTzFfUkVHMzIoMHgwMzQpCisjZGVmaW5lIEdQSU8xX0RBVEFPVVQJCUdQSU8xX1JFRzMyKDB4MDNDKQorCisvKiBHUElPMiAqLworI2RlZmluZSBHUElPMl9CQVNFCQlHUElPWF9CQVNFKDIpCisjZGVmaW5lIEdQSU8yX1JFRzMyKG9mZnNldCkJX19SRUczMihHUElPMl9CQVNFICsgKG9mZnNldCkpCisjZGVmaW5lIEdQSU8yX0lSUUVOQUJMRTEJR1BJTzJfUkVHMzIoMHgwMUMpCisjZGVmaW5lIEdQSU8yX0lSUVNUQVRVUzEJR1BJTzJfUkVHMzIoMHgwMTgpCisjZGVmaW5lIEdQSU8yX0lSUUVOQUJMRTIJR1BJTzJfUkVHMzIoMHgwMkMpCisjZGVmaW5lIEdQSU8yX0lSUVNUQVRVUzIJR1BJTzJfUkVHMzIoMHgwMjgpCisjZGVmaW5lIEdQSU8yX1dBS0VVUEVOQUJMRQlHUElPMl9SRUczMigweDAyMCkKKyNkZWZpbmUgR1BJTzJfUklTSU5HREVURUNUCUdQSU8yX1JFRzMyKDB4MDQ4KQorI2RlZmluZSBHUElPMl9EQVRBSU4JCUdQSU8yX1JFRzMyKDB4MDM4KQorI2RlZmluZSBHUElPMl9PRQkJR1BJTzJfUkVHMzIoMHgwMzQpCisjZGVmaW5lIEdQSU8yX0RBVEFPVVQJCUdQSU8yX1JFRzMyKDB4MDNDKQorCisvKiBHUElPIDMgKi8KKyNkZWZpbmUgR1BJTzNfQkFTRQkJR1BJT1hfQkFTRSgzKQorI2RlZmluZSBHUElPM19SRUczMihvZmZzZXQpCV9fUkVHMzIoR1BJTzNfQkFTRSArIChvZmZzZXQpKQorI2RlZmluZSBHUElPM19JUlFFTkFCTEUxCUdQSU8zX1JFRzMyKDB4MDFDKQorI2RlZmluZSBHUElPM19JUlFTVEFUVVMxCUdQSU8zX1JFRzMyKDB4MDE4KQorI2RlZmluZSBHUElPM19JUlFFTkFCTEUyCUdQSU8zX1JFRzMyKDB4MDJDKQorI2RlZmluZSBHUElPM19JUlFTVEFUVVMyCUdQSU8zX1JFRzMyKDB4MDI4KQorI2RlZmluZSBHUElPM19XQUtFVVBFTkFCTEUJR1BJTzNfUkVHMzIoMHgwMjApCisjZGVmaW5lIEdQSU8zX1JJU0lOR0RFVEVDVAlHUElPM19SRUczMigweDA0OCkKKyNkZWZpbmUgR1BJTzNfRkFMTElOR0RFVEVDVAlHUElPM19SRUczMigweDA0QykKKyNkZWZpbmUgR1BJTzNfREFUQUlOCQlHUElPM19SRUczMigweDAzOCkKKyNkZWZpbmUgR1BJTzNfT0UJCUdQSU8zX1JFRzMyKDB4MDM0KQorI2RlZmluZSBHUElPM19EQVRBT1VUCQlHUElPM19SRUczMigweDAzQykKKyNkZWZpbmUgR1BJTzNfREVCT1VOQ0VOQUJMRQlHUElPM19SRUczMigweDA1MCkKKyNkZWZpbmUgR1BJTzNfREVCT1VOQ0lOR1RJTUUJR1BJTzNfUkVHMzIoMHgwNTQpCisKKy8qIEdQSU8gNCAqLworI2RlZmluZSBHUElPNF9CQVNFCQlHUElPWF9CQVNFKDQpCisjZGVmaW5lIEdQSU80X1JFRzMyKG9mZnNldCkJX19SRUczMihHUElPNF9CQVNFICsgKG9mZnNldCkpCisjZGVmaW5lIEdQSU80X0lSUUVOQUJMRTEJR1BJTzRfUkVHMzIoMHgwMUMpCisjZGVmaW5lIEdQSU80X0lSUVNUQVRVUzEJR1BJTzRfUkVHMzIoMHgwMTgpCisjZGVmaW5lIEdQSU80X0lSUUVOQUJMRTIJR1BJTzRfUkVHMzIoMHgwMkMpCisjZGVmaW5lIEdQSU80X0lSUVNUQVRVUzIJR1BJTzRfUkVHMzIoMHgwMjgpCisjZGVmaW5lIEdQSU80X1dBS0VVUEVOQUJMRQlHUElPNF9SRUczMigweDAyMCkKKyNkZWZpbmUgR1BJTzRfUklTSU5HREVURUNUCUdQSU80X1JFRzMyKDB4MDQ4KQorI2RlZmluZSBHUElPNF9GQUxMSU5HREVURUNUCUdQSU80X1JFRzMyKDB4MDRDKQorI2RlZmluZSBHUElPNF9EQVRBSU4JCUdQSU80X1JFRzMyKDB4MDM4KQorI2RlZmluZSBHUElPNF9PRQkJR1BJTzRfUkVHMzIoMHgwMzQpCisjZGVmaW5lIEdQSU80X0RBVEFPVVQJCUdQSU80X1JFRzMyKDB4MDNDKQorI2RlZmluZSBHUElPNF9ERUJPVU5DRU5BQkxFCUdQSU80X1JFRzMyKDB4MDUwKQorI2RlZmluZSBHUElPNF9ERUJPVU5DSU5HVElNRQlHUElPNF9SRUczMigweDA1NCkKKworCisvKiBJTyBDT05GSUcgKi8KKyNkZWZpbmUgQ09OVFJPTF9CQVNFCQkoT01BUDI0WFhfQ1RSTF9CQVNFKQorI2RlZmluZSBDT05UUk9MX1JFRzMyKG9mZnNldCkJX19SRUczMihDT05UUk9MX0JBU0UgKyAob2Zmc2V0KSkKKworI2RlZmluZSBDT05UUk9MX1BBRENPTkZfU1BJMV9OQ1MyCUNPTlRST0xfUkVHMzIoMHgxMDQpCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9TWVNfWFRBTE9VVAlDT05UUk9MX1JFRzMyKDB4MTM0KQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfVUFSVDFfUlgJQ09OVFJPTF9SRUczMigweDBDOCkKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX01DQlNQMV9EWAlDT05UUk9MX1JFRzMyKDB4MTBDKQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfR1BNQ19OQ1M0CUNPTlRST0xfUkVHMzIoMHgwOTApCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9EU1NfRDUJCUNPTlRST0xfUkVHMzIoMHgwQjgpCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9EU1NfRDkJCUNPTlRST0xfUkVHMzIoMHgwQkMpCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9EU1NfRDEzCQlDT05UUk9MX1JFRzMyKDB4MEMwKQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRFNTX1ZTWU5DCUNPTlRST0xfUkVHMzIoMHgwQ0MpCisKKy8qIENPTlRST0wgKi8KKyNkZWZpbmUgQ09OVFJPTF9ERVZDT05GCQlDT05UUk9MX1JFRzMyKDB4Mjc0KQorCisvKiBJTlRFUlJVUFQgQ09OVFJPTExFUiAqLworI2RlZmluZSBJTlRDX0JBU0UJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4ZmUwMDApCisjZGVmaW5lIElOVENfUkVHMzIob2Zmc2V0KQlfX1JFRzMyKElOVENfQkFTRSArIChvZmZzZXQpKQorCisjZGVmaW5lIElOVEMxX1VfQkFTRQkJSU5UQ19SRUczMigweDAwMCkKKyNkZWZpbmUgSU5UQ19NSVIwCQlJTlRDX1JFRzMyKDB4MDg0KQorI2RlZmluZSBJTlRDX01JUl9TRVQwCQlJTlRDX1JFRzMyKDB4MDhDKQorI2RlZmluZSBJTlRDX01JUl9DTEVBUjAJCUlOVENfUkVHMzIoMHgwODgpCisjZGVmaW5lIElOVENfSVNSX0NMRUFSMAkJSU5UQ19SRUczMigweDA5NCkKKyNkZWZpbmUgSU5UQ19NSVIxCQlJTlRDX1JFRzMyKDB4MEE0KQorI2RlZmluZSBJTlRDX01JUl9TRVQxCQlJTlRDX1JFRzMyKDB4MEFDKQorI2RlZmluZSBJTlRDX01JUl9DTEVBUjEJCUlOVENfUkVHMzIoMHgwQTgpCisjZGVmaW5lIElOVENfSVNSX0NMRUFSMQkJSU5UQ19SRUczMigweDBCNCkKKyNkZWZpbmUgSU5UQ19NSVIyCQlJTlRDX1JFRzMyKDB4MEM0KQorI2RlZmluZSBJTlRDX01JUl9TRVQyCQlJTlRDX1JFRzMyKDB4MENDKQorI2RlZmluZSBJTlRDX01JUl9DTEVBUjIJCUlOVENfUkVHMzIoMHgwQzgpCisjZGVmaW5lIElOVENfSVNSX0NMRUFSMgkJSU5UQ19SRUczMigweDBENCkKKyNkZWZpbmUgSU5UQ19TSVJfSVJRCQlJTlRDX1JFRzMyKDB4MDQwKQorI2RlZmluZSBJTlRDX0NPTlRST0wJCUlOVENfUkVHMzIoMHgwNDgpCisjZGVmaW5lIElOVENfSUxSMTEJCUlOVENfUkVHMzIoMHgxMkMpCisjZGVmaW5lIElOVENfSUxSMzIJCUlOVENfUkVHMzIoMHgxODApCisjZGVmaW5lIElOVENfSUxSMzcJCUlOVENfUkVHMzIoMHgxOTQpCisjZGVmaW5lIElOVENfU1lTQ09ORklHCQlJTlRDX1JFRzMyKDB4MDEwKQorCisvKiBSQU0gRklSRVdBTEwgKi8KKyNkZWZpbmUgUkFNRldfQkFTRQkJKDB4NjgwMDUwMDApCisjZGVmaW5lIFJBTUZXX1JFRzMyKG9mZnNldCkJX19SRUczMihSQU1GV19CQVNFICsgKG9mZnNldCkpCisKKyNkZWZpbmUgUkFNRldfUkVRSU5GT1BFUk0wCVJBTUZXX1JFRzMyKDB4MDQ4KQorI2RlZmluZSBSQU1GV19SRUFEUEVSTTAJCVJBTUZXX1JFRzMyKDB4MDUwKQorI2RlZmluZSBSQU1GV19XUklURVBFUk0wCVJBTUZXX1JFRzMyKDB4MDU4KQorCisvKiBHUE1DIENTMSBGUEdBIE9OIFVTRVIgSU5URVJGQUNFIE1PRFVMRSAqLworLy8jZGVmaW5lIERFQlVHX0JPQVJEX0xFRF9SRUdJU1RFUiAweDA0MDAwMDE0CisKKy8qIEdQTUMgQ1MwICovCisjZGVmaW5lIEdQTUNfQ09ORklHMV8wCQlHUE1DX1JFRzMyKDB4MDYwKQorI2RlZmluZSBHUE1DX0NPTkZJRzJfMAkJR1BNQ19SRUczMigweDA2NCkKKyNkZWZpbmUgR1BNQ19DT05GSUczXzAJCUdQTUNfUkVHMzIoMHgwNjgpCisjZGVmaW5lIEdQTUNfQ09ORklHNF8wCQlHUE1DX1JFRzMyKDB4MDZDKQorI2RlZmluZSBHUE1DX0NPTkZJRzVfMAkJR1BNQ19SRUczMigweDA3MCkKKyNkZWZpbmUgR1BNQ19DT05GSUc2XzAJCUdQTUNfUkVHMzIoMHgwNzQpCisjZGVmaW5lIEdQTUNfQ09ORklHN18wCQlHUE1DX1JFRzMyKDB4MDc4KQorCisvKiBHUE1DIENTMSAqLworI2RlZmluZSBHUE1DX0NPTkZJRzFfMQkJR1BNQ19SRUczMigweDA5MCkKKyNkZWZpbmUgR1BNQ19DT05GSUcyXzEJCUdQTUNfUkVHMzIoMHgwOTQpCisjZGVmaW5lIEdQTUNfQ09ORklHM18xCQlHUE1DX1JFRzMyKDB4MDk4KQorI2RlZmluZSBHUE1DX0NPTkZJRzRfMQkJR1BNQ19SRUczMigweDA5QykKKyNkZWZpbmUgR1BNQ19DT05GSUc1XzEJCUdQTUNfUkVHMzIoMHgwYTApCisjZGVmaW5lIEdQTUNfQ09ORklHNl8xCQlHUE1DX1JFRzMyKDB4MGE0KQorI2RlZmluZSBHUE1DX0NPTkZJRzdfMQkJR1BNQ19SRUczMigweDBhOCkKKworLyogRFNTICovCisjZGVmaW5lIERTU19DT05UUk9MCQlESVNQX1JFRzMyKDB4MDQwKQorI2RlZmluZSBESVNQQ19DT05UUk9MCQlESVNQX1JFRzMyKDB4NDQwKQorI2RlZmluZSBESVNQQ19TWVNTVEFUVVMJCURJU1BfUkVHMzIoMHg0MTQpCisjZGVmaW5lIERJU1BDX0lSUVNUQVRVUwkJRElTUF9SRUczMigweDQxOCkKKyNkZWZpbmUgRElTUENfSVJRRU5BQkxFCQlESVNQX1JFRzMyKDB4NDFDKQorI2RlZmluZSBESVNQQ19DT05GSUcJCURJU1BfUkVHMzIoMHg0NDQpCisjZGVmaW5lIERJU1BDX0RFRkFVTFRfQ09MT1IwCURJU1BfUkVHMzIoMHg0NEMpCisjZGVmaW5lIERJU1BDX0RFRkFVTFRfQ09MT1IxCURJU1BfUkVHMzIoMHg0NTApCisjZGVmaW5lIERJU1BDX1RSQU5TX0NPTE9SMAlESVNQX1JFRzMyKDB4NDU0KQorI2RlZmluZSBESVNQQ19UUkFOU19DT0xPUjEJRElTUF9SRUczMigweDQ1OCkKKyNkZWZpbmUgRElTUENfTElORV9OVU1CRVIJRElTUF9SRUczMigweDQ2MCkKKyNkZWZpbmUgRElTUENfVElNSU5HX0gJCURJU1BfUkVHMzIoMHg0NjQpCisjZGVmaW5lIERJU1BDX1RJTUlOR19WCQlESVNQX1JFRzMyKDB4NDY4KQorI2RlZmluZSBESVNQQ19QT0xfRlJFUQkJRElTUF9SRUczMigweDQ2QykKKyNkZWZpbmUgRElTUENfRElWSVNPUgkJRElTUF9SRUczMigweDQ3MCkKKyNkZWZpbmUgRElTUENfU0laRV9ESUcJCURJU1BfUkVHMzIoMHg0NzgpCisjZGVmaW5lIERJU1BDX1NJWkVfTENECQlESVNQX1JFRzMyKDB4NDdDKQorI2RlZmluZSBESVNQQ19HRlhfQkEwCQlESVNQX1JFRzMyKDB4NDgwKQorI2RlZmluZSBESVNQQ19HRlhfQkExCQlESVNQX1JFRzMyKDB4NDg0KQorI2RlZmluZSBESVNQQ19HRlhfUE9TSVRJT04JRElTUF9SRUczMigweDQ4OCkKKyNkZWZpbmUgRElTUENfR0ZYX1NJWkUJCURJU1BfUkVHMzIoMHg0OEMpCisjZGVmaW5lIERJU1BDX0dGWF9BVFRSSUJVVEVTCURJU1BfUkVHMzIoMHg0QTApCisjZGVmaW5lIERJU1BDX0dGWF9GSUZPX1RIUkVTSE9MRAlESVNQX1JFRzMyKDB4NEE0KQorI2RlZmluZSBESVNQQ19HRlhfUk9XX0lOQwlESVNQX1JFRzMyKDB4NEFDKQorI2RlZmluZSBESVNQQ19HRlhfUElYRUxfSU5DCURJU1BfUkVHMzIoMHg0QjApCisjZGVmaW5lIERJU1BDX0dGWF9XSU5ET1dfU0tJUAlESVNQX1JFRzMyKDB4NEI0KQorI2RlZmluZSBESVNQQ19HRlhfVEFCTEVfQkEJRElTUF9SRUczMigweDRCOCkKKyNkZWZpbmUgRElTUENfREFUQV9DWUNMRTEJRElTUF9SRUczMigweDVENCkKKyNkZWZpbmUgRElTUENfREFUQV9DWUNMRTIJRElTUF9SRUczMigweDVEOCkKKyNkZWZpbmUgRElTUENfREFUQV9DWUNMRTMJRElTUF9SRUczMigweDVEQykKKworLyogV2FrZSB1cCBkZWZpbmUgZm9yIGJvYXJkICovCisjZGVmaW5lIEdQSU85NwkJCSgxIDw8IDEpCisjZGVmaW5lIEdQSU84OAkJCSgxIDw8IDI0KQorCisjZW5kaWYgLyogX19BU1NFTUJMRVJfXyAqLworCisjZW5kaWYKKworCisKKworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3NyYW0uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvc3JhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3MmNjYmYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3NyYW0uaApAQCAtMCwwICsxLDM4IEBACisvKgorICogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9zcmFtLmgKKyAqCisgKiBJbnRlcmZhY2UgZm9yIGZ1bmN0aW9ucyB0aGF0IG5lZWQgdG8gYmUgcnVuIGluIGludGVybmFsIFNSQU0KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19BUkNIX0FSTV9PTUFQX1NSQU1fSAorI2RlZmluZSBfX0FSQ0hfQVJNX09NQVBfU1JBTV9ICisKK2V4dGVybiB2b2lkICogb21hcF9zcmFtX3B1c2godm9pZCAqIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpOworZXh0ZXJuIHZvaWQgb21hcF9zcmFtX3JlcHJvZ3JhbV9jbG9jayh1MzIgZHBsbGN0bCwgdTMyIGNrY3RsKTsKKworZXh0ZXJuIHZvaWQgb21hcDJfc3JhbV9kZHJfaW5pdCh1MzIgKnNsb3dfZGxsX2N0cmwsIHUzMiBmYXN0X2RsbF9jdHJsLAorCQkJCXUzMiBiYXNlX2NzLCB1MzIgZm9yY2VfdW5sb2NrKTsKK2V4dGVybiB2b2lkIG9tYXAyX3NyYW1fcmVwcm9ncmFtX3NkcmModTMyIHBlcmZfbGV2ZWwsIHUzMiBkbGxfdmFsLAorCQkJCSAgICAgIHUzMiBtZW1fdHlwZSk7CitleHRlcm4gdTMyIG9tYXAyX3NldF9wcmNtKHUzMiBkcGxsX2N0cmxfdmFsLCB1MzIgc2RyY19yZnJfdmFsLCBpbnQgYnlwYXNzKTsKKworCisvKiBEbyBub3QgdXNlIHRoZXNlICovCitleHRlcm4gdm9pZCBzcmFtX3JlcHJvZ3JhbV9jbG9jayh1MzIgY2tjdGwsIHUzMiBkcGxsY3RsKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHNyYW1fcmVwcm9ncmFtX2Nsb2NrX3N6OworCitleHRlcm4gdm9pZCBzcmFtX2Rkcl9pbml0KHUzMiAqc2xvd19kbGxfY3RybCwgdTMyIGZhc3RfZGxsX2N0cmwsCisJCQkgIHUzMiBiYXNlX2NzLCB1MzIgZm9yY2VfdW5sb2NrKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHNyYW1fZGRyX2luaXRfc3o7CisKK2V4dGVybiB1MzIgc3JhbV9zZXRfcHJjbSh1MzIgZHBsbF9jdHJsX3ZhbCwgdTMyIHNkcmNfcmZyX3ZhbCwgaW50IGJ5cGFzcyk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBzcmFtX3NldF9wcmNtX3N6OworCitleHRlcm4gdm9pZCBzcmFtX3JlcHJvZ3JhbV9zZHJjKHUzMiBwZXJmX2xldmVsLCB1MzIgZGxsX3ZhbCwgdTMyIG1lbV90eXBlKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHNyYW1fcmVwcm9ncmFtX3NkcmNfc3o7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvc3lzdGVtLmgKaW5kZXggZmYzN2JjMi4uYjQzY2RkMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9zeXN0ZW0uaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3N5c3RlbS5oCkBAIC02LDE4ICs2LDIxIEBACiAjZGVmaW5lIF9fQVNNX0FSQ0hfU1lTVEVNX0gKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9jbG9jay5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9wcmNtLmg+CisKKyNpZm5kZWYgQ09ORklHX01BQ0hfVk9JQ0VCTFVFCisjZGVmaW5lIHZvaWNlYmx1ZV9yZXNldCgpCQlkbyB7fSB3aGlsZSAoMCkKKyNlbmRpZgogCiBzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9pZGxlKHZvaWQpCiB7CiAJY3B1X2RvX2lkbGUoKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlKQorc3RhdGljIGlubGluZSB2b2lkIG9tYXAxX2FyY2hfcmVzZXQoY2hhciBtb2RlKQogewotCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE2WFgKIAkvKgogCSAqIFdvcmthcm91bmQgZm9yIDU5MTIvMTYxMWIgYnVnIG1lbnRpb25lZCBpbiBzcHJ6MjA5ZC5wZGYgcC4gMjgKIAkgKiAiR2xvYmFsIFNvZnR3YXJlIFJlc2V0IEFmZmVjdHMgVHJhZmZpYyBDb250cm9sbGVyIEZyZXF1ZW5jeSIuCkBAIC0yNywxMyArMzAsMzEgQEAKIAkJCQkgRFBMTF9DVEwpOwogCQlvbWFwX3dyaXRldygweDgsIEFSTV9SU1RDVDEpOwogCX0KLSNlbmRpZgotI2lmZGVmIENPTkZJR19NQUNIX1ZPSUNFQkxVRQorCiAJaWYgKG1hY2hpbmVfaXNfdm9pY2VibHVlKCkpCiAJCXZvaWNlYmx1ZV9yZXNldCgpOwogCWVsc2UKLSNlbmRpZgogCQlvbWFwX3dyaXRldygxLCBBUk1fUlNUQ1QxKTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIG9tYXAyX2FyY2hfcmVzZXQoY2hhciBtb2RlKQoreworCXUzMiByYXRlOworCXN0cnVjdCBjbGsgKnZjbGssICpzY2xrOworCisJdmNsayA9IGNsa19nZXQoTlVMTCwgInZpcnRfcHJjbV9zZXQiKTsKKwlzY2xrID0gY2xrX2dldChOVUxMLCAic3lzX2NrIik7CisJcmF0ZSA9IGNsa19nZXRfcmF0ZShzY2xrKTsKKwljbGtfc2V0X3JhdGUodmNsaywgcmF0ZSk7CS8qIGdvIHRvIGJ5cGFzcyBmb3IgT01BUCBsaW1pdGF0aW9uICovCisJUk1fUlNUQ1RSTF9XS1VQIHw9IDI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSkKK3sKKwlpZiAoIWNwdV9pc19vbWFwMjR4eCgpKQorCQlvbWFwMV9hcmNoX3Jlc2V0KG1vZGUpOworCWVsc2UKKwkJb21hcDJfYXJjaF9yZXNldChtb2RlKTsKK30KKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3RpbWV4LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3RpbWV4LmgKaW5kZXggYjYxZGRiNC4uMjFmMmUzNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC90aW1leC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvdGltZXguaApAQCAtMjgsNiArMjgsMTQgQEAKICNpZiAhZGVmaW5lZChfX0FTTV9BUkNIX09NQVBfVElNRVhfSCkKICNkZWZpbmUgX19BU01fQVJDSF9PTUFQX1RJTUVYX0gKIAorLyoKKyAqIE9NQVAgMzJLSHogdGltZXIgdXBkYXRlcyB0aW1lIG9uZSBqaWZmaWUgYXQgYSB0aW1lIGZyb20gYSBzZWNvbmRhcnkgdGltZXIsCisgKiBhbmQgdGhhdCdzIHdoeSB0aGUgQ0xPQ0tfVElDS19SQVRFIGlzIG5vdCAzMjc2OC4KKyAqLworI2lmZGVmIENPTkZJR19PTUFQXzMyS19USU1FUgorI2RlZmluZSBDTE9DS19USUNLX1JBVEUJCShDT05GSUdfT01BUF8zMktfVElNRVJfSFopCisjZWxzZQogI2RlZmluZSBDTE9DS19USUNLX1JBVEUJCShIWiAqIDEwMDAwMFVMKQorI2VuZGlmCiAKICNlbmRpZiAvKiBfX0FTTV9BUkNIX09NQVBfVElNRVhfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC91bmNvbXByZXNzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3VuY29tcHJlc3MuaAppbmRleCAzNTQ1Yzg2Li5jNzE4MjY0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3VuY29tcHJlc3MuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3VuY29tcHJlc3MuaApAQCAtMzYsMTAgKzM2LDE0IEBACiAJdm9sYXRpbGUgdTggKiB1YXJ0ID0gMDsKIAlpbnQgc2hpZnQgPSAyOwogCisjaWZkZWYgQ09ORklHX01BQ0hfT01BUF9QQUxNVEUKKwlyZXR1cm47CisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19BUkNIX09NQVAKICNpZmRlZglDT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMwogCXVhcnQgPSAodm9sYXRpbGUgdTggKikoT01BUF9VQVJUM19CQVNFKTsKLSNlbGlmCUNPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQyCisjZWxpZiBkZWZpbmVkKENPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQyKQogCXVhcnQgPSAodm9sYXRpbGUgdTggKikoT01BUF9VQVJUMl9CQVNFKTsKICNlbHNlCiAJdWFydCA9ICh2b2xhdGlsZSB1OCAqKShPTUFQX1VBUlQxX0JBU0UpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3NoYXJwc2wuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9zaGFycHNsLmgKaW5kZXggMzExZjJiYi4uMGI0MzQ5NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3NoYXJwc2wuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvc2hhcnBzbC5oCkBAIC0yMSwxMiArMjEsMTggQEAKIAl2b2lkICgqd2FpdF9oc3luYykodm9pZCk7CiB9OwogCisKIC8qCiAgKiBTaGFycFNMIEJhY2tsaWdodAogICovCi0KIHN0cnVjdCBjb3JnaWJsX21hY2hpbmZvIHsKIAlpbnQgbWF4X2ludGVuc2l0eTsKIAl2b2lkICgqc2V0X2JsX2ludGVuc2l0eSkoaW50IGludGVuc2l0eSk7CiB9OworZXh0ZXJuIHZvaWQgY29yZ2libF9saW1pdF9pbnRlbnNpdHkoaW50IGxpbWl0KTsKIAorCisvKgorICogU2hhcnBTTCBCYXR0ZXJ5L1BNIERyaXZlcgorICovCitleHRlcm4gdm9pZCBzaGFycHNsX2JhdHRlcnlfa2ljayh2b2lkKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9zc3AuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9zc3AuaAppbmRleCA2ZWM2N2IwLi45NDk4NzhjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvc3NwLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3NzcC5oCkBAIC0xOCw2ICsxOCwxMSBAQAogI2lmbmRlZiBTU1BfSAogI2RlZmluZSBTU1BfSAogCisvKgorICogU1NQIGluaXRpYWxpc2F0aW9uIGZsYWdzCisgKi8KKyNkZWZpbmUgU1NQX05PX0lSUQkweDEJCS8qIGRvbid0IHJlZ2lzdGVyIGFuIGlycSBoYW5kbGVyIGluIFNTUCBkcml2ZXIgKi8KKwogc3RydWN0IHNzcF9zdGF0ZSB7CiAJdTMyCWNyMDsKIAl1MzIgY3IxOwpAQCAtMzEsNiArMzYsNyBAQAogCXUzMiBmbGFnczsKIAl1MzIgcHNwX2ZsYWdzOwogCXUzMiBzcGVlZDsKKwlpbnQgaXJxOwogfTsKIAogaW50IHNzcF93cml0ZV93b3JkKHN0cnVjdCBzc3BfZGV2ICpkZXYsIHUzMiBkYXRhKTsKQEAgLTQwLDcgKzQ2LDcgQEAKIHZvaWQgc3NwX2Rpc2FibGUoc3RydWN0IHNzcF9kZXYgKmRldik7CiB2b2lkIHNzcF9zYXZlX3N0YXRlKHN0cnVjdCBzc3BfZGV2ICpkZXYsIHN0cnVjdCBzc3Bfc3RhdGUgKnNzcCk7CiB2b2lkIHNzcF9yZXN0b3JlX3N0YXRlKHN0cnVjdCBzc3BfZGV2ICpkZXYsIHN0cnVjdCBzc3Bfc3RhdGUgKnNzcCk7Ci1pbnQgc3NwX2luaXQoc3RydWN0IHNzcF9kZXYgKmRldiwgdTMyIHBvcnQpOworaW50IHNzcF9pbml0KHN0cnVjdCBzc3BfZGV2ICpkZXYsIHUzMiBwb3J0LCB1MzIgaW5pdF9mbGFncyk7CiBpbnQgc3NwX2NvbmZpZyhzdHJ1Y3Qgc3NwX2RldiAqZGV2LCB1MzIgbW9kZSwgdTMyIGZsYWdzLCB1MzIgcHNwX2ZsYWdzLCB1MzIgc3BlZWQpOwogdm9pZCBzc3BfZXhpdChzdHJ1Y3Qgc3NwX2RldiAqZGV2KTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcmVhbHZpZXcvZW50cnktbWFjcm8uUyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXJlYWx2aWV3L2VudHJ5LW1hY3JvLlMKaW5kZXggNGRmNDY5Yi4uNjI4OGZhZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcmVhbHZpZXcvZW50cnktbWFjcm8uUworKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1yZWFsdmlldy9lbnRyeS1tYWNyby5TCkBAIC02MSwzICs2MSwxNCBAQAogCQlzdHJjYwlcaXJxc3RhdCwgW1xiYXNlLCAjR0lDX0NQVV9FT0ldCiAJCWNtcGNzCVxpcnFuciwgXGlycW5yCiAJCS5lbmRtCisKKwkJLyogQXMgYWJvdmUsIHRoaXMgYXNzdW1lcyB0aGF0IGlycXN0YXQgYW5kIGJhc2UgYXJlIHByZXNlcnZlZC4uICovCisKKwkJLm1hY3JvIHRlc3RfZm9yX2x0aXJxLCBpcnFuciwgaXJxc3RhdCwgYmFzZSwgdG1wCisJCWJpYwlcaXJxbnIsIFxpcnFzdGF0LCAjMHgxYzAwCisJCW1vdiAJXHRtcCwgIzAKKwkJY21wCVxpcnFuciwgIzI5CisJCW1vdmVxCVx0bXAsICMxCisJCXN0cmVxCVxpcnFzdGF0LCBbXGJhc2UsICNHSUNfQ1BVX0VPSV0KKwkJY21wCVx0bXAsICMwCisJCS5lbmRtCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1yZWFsdmlldy9pcnFzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1yZWFsdmlldy9pcnFzLmgKaW5kZXggZmYzNzY0OS4uYzE2MjIzYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcmVhbHZpZXcvaXJxcy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXJlYWx2aWV3L2lycXMuaApAQCAtMjEsNiArMjEsOSBAQAogCiAjaW5jbHVkZSA8YXNtL2FyY2gvcGxhdGZvcm0uaD4KIAorI2RlZmluZSBJUlFfTE9DQUxUSU1FUgkJCTI5CisjZGVmaW5lIElSUV9MT0NBTFdET0cJCQkzMAorCiAvKiAKICAqICBJUlEgaW50ZXJydXB0cyBkZWZpbml0aW9ucyBhcmUgdGhlIHNhbWUgdGhlIElOVCBkZWZpbml0aW9ucwogICogIGhlbGQgd2l0aGluIHBsYXRmb3JtLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXJlYWx2aWV3L3BsYXRmb3JtLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1yZWFsdmlldy9wbGF0Zm9ybS5oCmluZGV4IGFlZjliMzYuLjE4ZDdjMTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXJlYWx2aWV3L3BsYXRmb3JtLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcmVhbHZpZXcvcGxhdGZvcm0uaApAQCAtMjA5LDYgKzIwOSw4IEBACiAjZWxzZQogI2RlZmluZSBSRUFMVklFV19NUENPUkVfU0NVX0JBU0UJMHgxMDEwMDAwMAkvKiAgU0NVIHJlZ2lzdGVycyAqLwogI2RlZmluZSBSRUFMVklFV19HSUNfQ1BVX0JBU0UJCTB4MTAxMDAxMDAJLyogR2VuZXJpYyBpbnRlcnJ1cHQgY29udHJvbGxlciBDUFUgaW50ZXJmYWNlICovCisjZGVmaW5lIFJFQUxWSUVXX1RXRF9CQVNFCQkweDEwMTAwNzAwCisjZGVmaW5lIFJFQUxWSUVXX1RXRF9TSVpFCQkweDAwMDAwMTAwCiAjZGVmaW5lIFJFQUxWSUVXX0dJQ19ESVNUX0JBU0UJCTB4MTAxMDEwMDAJLyogR2VuZXJpYyBpbnRlcnJ1cHQgY29udHJvbGxlciBkaXN0cmlidXRvciAqLwogI2VuZGlmCiAjZGVmaW5lIFJFQUxWSUVXX1NNQ19CQVNFICAgICAgICAgICAgIDB4MTAwODAwMDAJLyogU01DICovCkBAIC0zMDUsOSArMzA3LDYgQEAKICNkZWZpbmUgSU5UX1RTUEVOSU5UCQkJMzAJLyogVG91Y2hzY3JlZW4gcGVuICovCiAjZGVmaW5lIElOVF9UU0tQQURJTlQJCQkzMQkvKiBUb3VjaHNjcmVlbiBrZXlwYWQgKi8KICNlbHNlCi0jZGVmaW5lIElOVF9MT0NBTFRJTUVSCQkJMjkKLSNkZWZpbmUgSU5UX0xPQ0FMV0RPRwkJCTMwCi0KICNkZWZpbmUgSU5UX0FBQ0kJCQkwCiAjZGVmaW5lIElOVF9USU1FUklOVDBfMQkJCTEKICNkZWZpbmUgSU5UX1RJTUVSSU5UMl8zCQkJMgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC91bmNvbXByZXNzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3VuY29tcHJlc3MuaAppbmRleCBkN2E0YTgzLi5kZGQxNTc4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3VuY29tcHJlc3MuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3VuY29tcHJlc3MuaApAQCAtMTE2LDYgKzExNiw4IEBACiAJfQogfQogCisjZGVmaW5lIF9fcmF3X3dyaXRlbChkLGFkKSBkbyB7ICooKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKShhZCkpID0gKGQpOyB9IHdoaWxlKDApCisKIC8qIENPTkZJR19TM0MyNDEwX0JPT1RfV0FUQ0hET0cKICAqCiAgKiBTaW1wbGUgYm9vdC10aW1lIHdhdGNoZG9nIHNldHVwLCB0byByZWJvb3QgdGhlIHN5c3RlbSBpZiB0aGVyZSBpcwpAQCAtMTI2LDggKzEyOCw2IEBACiAKICNkZWZpbmUgV0RPR19DT1VOVCAoMHhmZjAwKQogCi0jZGVmaW5lIF9fcmF3X3dyaXRlbChkLGFkKSBkbyB7ICooKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKShhZCkpID0gKGQpOyB9IHdoaWxlKDApCi0KIHN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2RlY29tcF93ZG9nKHZvaWQpCiB7CiAJX19yYXdfd3JpdGVsKFdET0dfQ09VTlQsIFMzQzI0MTBfV1RDTlQpOwpAQCAtMTQ1LDYgKzE0NSwyNCBAQAogI2RlZmluZSBhcmNoX2RlY29tcF93ZG9nKCkKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX1MzQzI0MTBfQk9PVF9FUlJPUl9SRVNFVAorCitzdGF0aWMgdm9pZCBhcmNoX2RlY29tcF9lcnJvcihjb25zdCBjaGFyICp4KQoreworCXB1dHN0cigiXG5cbiIpOworCXB1dHN0cih4KTsKKwlwdXRzdHIoIlxuXG4gLS0gU3lzdGVtIHJlc2V0dGluZ1xuIik7CisKKwlfX3Jhd193cml0ZWwoMHg0MDAwLCBTM0MyNDEwX1dUREFUKTsKKwlfX3Jhd193cml0ZWwoMHg0MDAwLCBTM0MyNDEwX1dUQ05UKTsKKwlfX3Jhd193cml0ZWwoUzNDMjQxMF9XVENPTl9FTkFCTEUgfCBTM0MyNDEwX1dUQ09OX0RJVjEyOCB8IFMzQzI0MTBfV1RDT05fUlNURU4gfCBTM0MyNDEwX1dUQ09OX1BSRVNDQUxFKDB4NDApLCBTM0MyNDEwX1dUQ09OKTsKKworCXdoaWxlKDEpOworfQorCisjZGVmaW5lIGFyY2hfZXJyb3IgYXJjaF9kZWNvbXBfZXJyb3IKKyNlbmRpZgorCiBzdGF0aWMgdm9pZCBlcnJvcihjaGFyICplcnIpOwogCiBzdGF0aWMgdm9pZApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2Fzc2VtYmxlci5oIGIvaW5jbHVkZS9hc20tYXJtL2Fzc2VtYmxlci5oCmluZGV4IDY5YTI4ZjkuLmYzMWFjOTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hc3NlbWJsZXIuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXNzZW1ibGVyLmgKQEAgLTgzLDEwICs4MywxMyBAQAogICogU2F2ZSB0aGUgY3VycmVudCBJUlEgc3RhdGUgYW5kIGRpc2FibGUgSVJRcy4gIE5vdGUgdGhhdCB0aGlzIG1hY3JvCiAgKiBhc3N1bWVzIEZJUXMgYXJlIGVuYWJsZWQsIGFuZCB0aGF0IHRoZSBwcm9jZXNzb3IgaXMgaW4gU1ZDIG1vZGUuCiAgKi8KLQkubWFjcm8Jc2F2ZV9hbmRfZGlzYWJsZV9pcnFzLCBvbGRjcHNyLCB0ZW1wCisJLm1hY3JvCXNhdmVfYW5kX2Rpc2FibGVfaXJxcywgb2xkY3BzcgogCW1ycwlcb2xkY3BzciwgY3BzcgotCW1vdglcdGVtcCwgI1BTUl9JX0JJVCB8IE1PREVfU1ZDCi0JbXNyCWNwc3JfYywgXHRlbXAKKyNpZiBfX0xJTlVYX0FSTV9BUkNIX18gPj0gNgorCWNwc2lkCWkKKyNlbHNlCisJbXNyCWNwc3JfYywgI1BTUl9JX0JJVCB8IE1PREVfU1ZDCisjZW5kaWYKIAkuZW5kbQogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2hhcmRpcnEuaCBiL2luY2x1ZGUvYXNtLWFybS9oYXJkaXJxLmgKaW5kZXggZTVjY2I2Yi4uMWNiYjE3MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2hhcmRpcnEuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vaGFyZGlycS5oCkBAIC04LDYgKzgsNyBAQAogCiB0eXBlZGVmIHN0cnVjdCB7CiAJdW5zaWduZWQgaW50IF9fc29mdGlycV9wZW5kaW5nOworCXVuc2lnbmVkIGludCBsb2NhbF90aW1lcl9pcnFzOwogfSBfX19fY2FjaGVsaW5lX2FsaWduZWQgaXJxX2NwdXN0YXRfdDsKIAogI2luY2x1ZGUgPGxpbnV4L2lycV9jcHVzdGF0Lmg+CS8qIFN0YW5kYXJkIG1hcHBpbmdzIGZvciBpcnFfY3B1c3RhdF90IGFib3ZlICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvc2Nvb3AuaCBiL2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS9zY29vcC5oCmluZGV4IGE4ZjEwMTMuLmQzN2JmNzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS9zY29vcC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS9zY29vcC5oCkBAIC01Miw4ICs1MiwxNCBAQAogCXVuc2lnbmVkIGNoYXIga2VlcF9yZDsKIH07CiAKLWV4dGVybiBpbnQgc2Nvb3BfbnVtOwotZXh0ZXJuIHN0cnVjdCBzY29vcF9wY21jaWFfZGV2ICpzY29vcF9kZXZzOworc3RydWN0IHNjb29wX3BjbWNpYV9jb25maWcgeworCXN0cnVjdCBzY29vcF9wY21jaWFfZGV2ICpkZXZzOworCWludCBudW1fZGV2czsKKwl2b2lkICgqcGNtY2lhX2luaXQpKHZvaWQpOworCXZvaWQgKCpwb3dlcl9jdHJsKShzdHJ1Y3QgZGV2aWNlICpzY29vcCwgdW5zaWduZWQgc2hvcnQgY3ByLCBpbnQgbnIpOworfTsKKworZXh0ZXJuIHN0cnVjdCBzY29vcF9wY21jaWFfY29uZmlnICpwbGF0Zm9ybV9zY29vcF9jb25maWc7CiAKIHZvaWQgcmVzZXRfc2Nvb3Aoc3RydWN0IGRldmljZSAqZGV2KTsKIHVuc2lnbmVkIHNob3J0IHNldF9zY29vcF9ncGlvKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgc2hvcnQgYml0KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9tYWNoL2ZsYXNoLmggYi9pbmNsdWRlL2FzbS1hcm0vbWFjaC9mbGFzaC5oCmluZGV4IGNkNTc0MzYuLjA1YjAyOWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9tYWNoL2ZsYXNoLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL21hY2gvZmxhc2guaApAQCAtMTEsNiArMTEsNyBAQAogI2RlZmluZSBBU01BUk1fTUFDSF9GTEFTSF9ICiAKIHN0cnVjdCBtdGRfcGFydGl0aW9uOworc3RydWN0IG10ZF9pbmZvOwogCiAvKgogICogbWFwX25hbWU6CXRoZSBtYXAgcHJvYmUgZnVuY3Rpb24gbmFtZQpAQCAtMTksNiArMjAsNyBAQAogICogaW5pdDoJbWV0aG9kIGNhbGxlZCBhdCBkcml2ZXIvZGV2aWNlIGluaXRpYWxpc2F0aW9uCiAgKiBleGl0OgltZXRob2QgY2FsbGVkIGF0IGRyaXZlci9kZXZpY2UgcmVtb3ZhbAogICogc2V0X3ZwcDoJbWV0aG9kIGNhbGxlZCB0byBlbmFibGUgb3IgZGlzYWJsZSBWUFAKKyAqIG1tY29udHJvbDoJbWV0aG9kIGNhbGxlZCB0byBlbmFibGUgb3IgZGlzYWJsZSBTeW5jLiBCdXJzdCBSZWFkIGluIE9uZU5BTkQKICAqIHBhcnRzOglvcHRpb25hbCBhcnJheSBvZiBtdGRfcGFydGl0aW9ucyBmb3Igc3RhdGljIHBhcnRpdGlvbmluZwogICogbnJfcGFydHM6CW51bWJlciBvZiBtdGRfcGFydGl0aW9ucyBmb3Igc3RhdGljIHBhcnRpdG9uaW5nCiAgKi8KQEAgLTI5LDYgKzMxLDcgQEAKIAlpbnQJCSgqaW5pdCkodm9pZCk7CiAJdm9pZAkJKCpleGl0KSh2b2lkKTsKIAl2b2lkCQkoKnNldF92cHApKGludCBvbik7CisJdm9pZAkJKCptbWNvbnRyb2wpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgc3luY19yZWFkKTsKIAlzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqcGFydHM7CiAJdW5zaWduZWQgaW50CW5yX3BhcnRzOwogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9zbXAuaCBiL2luY2x1ZGUvYXNtLWFybS9zbXAuaAppbmRleCA1NTFjZDNjLi41YTcyZTUwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vc21wLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL3NtcC5oCkBAIC0zNyw2ICszNywxMSBAQAogZXh0ZXJuIHZvaWQgc2hvd19pcGlfbGlzdChzdHJ1Y3Qgc2VxX2ZpbGUgKnApOwogCiAvKgorICogQ2FsbGVkIGZyb20gYXNzZW1ibHkgY29kZSwgdGhpcyBoYW5kbGVzIGFuIElQSS4KKyAqLworYXNtbGlua2FnZSB2b2lkIGRvX0lQSShzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisKKy8qCiAgKiBNb3ZlIGdsb2JhbCBkYXRhIGludG8gcGVyLXByb2Nlc3NvciBzdG9yYWdlLgogICovCiBleHRlcm4gdm9pZCBzbXBfc3RvcmVfY3B1X2luZm8odW5zaWduZWQgaW50IGNwdWlkKTsKQEAgLTQ3LDEyICs1MiwyMyBAQAogZXh0ZXJuIHZvaWQgc21wX2Nyb3NzX2NhbGwoY3B1bWFza190IGNhbGxtYXApOwogCiAvKgorICogQnJvYWRjYXN0IGEgdGltZXIgaW50ZXJydXB0IHRvIHRoZSBvdGhlciBDUFVzLgorICovCitleHRlcm4gdm9pZCBzbXBfc2VuZF90aW1lcih2b2lkKTsKKworLyoKICAqIEJvb3QgYSBzZWNvbmRhcnkgQ1BVLCBhbmQgYXNzaWduIGl0IHRoZSBzcGVjaWZpZWQgaWRsZSB0YXNrLgogICogVGhpcyBhbHNvIGdpdmVzIHVzIHRoZSBpbml0aWFsIHN0YWNrIHRvIHVzZSBmb3IgdGhpcyBDUFUuCiAgKi8KIGV4dGVybiBpbnQgYm9vdF9zZWNvbmRhcnkodW5zaWduZWQgaW50IGNwdSwgc3RydWN0IHRhc2tfc3RydWN0ICopOwogCiAvKgorICogQ2FsbGVkIGZyb20gcGxhdGZvcm0gc3BlY2lmaWMgYXNzZW1ibHkgY29kZSwgdGhpcyBpcyB0aGUKKyAqIHNlY29uZGFyeSBDUFUgZW50cnkgcG9pbnQuCisgKi8KK2FzbWxpbmthZ2Ugdm9pZCBzZWNvbmRhcnlfc3RhcnRfa2VybmVsKHZvaWQpOworCisvKgogICogUGVyZm9ybSBwbGF0Zm9ybSBzcGVjaWZpYyBpbml0aWFsaXNhdGlvbiBvZiB0aGUgc3BlY2lmaWVkIENQVS4KICAqLwogZXh0ZXJuIHZvaWQgcGxhdGZvcm1fc2Vjb25kYXJ5X2luaXQodW5zaWduZWQgaW50IGNwdSk7CkBAIC03Niw0ICs5Miw0MiBAQAogZXh0ZXJuIGludCBwbGF0Zm9ybV9jcHVfa2lsbCh1bnNpZ25lZCBpbnQgY3B1KTsKIGV4dGVybiB2b2lkIHBsYXRmb3JtX2NwdV9lbmFibGUodW5zaWduZWQgaW50IGNwdSk7CiAKKyNpZmRlZiBDT05GSUdfTE9DQUxfVElNRVJTCisvKgorICogU2V0dXAgYSBsb2NhbCB0aW1lciBpbnRlcnJ1cHQgZm9yIGEgQ1BVLgorICovCitleHRlcm4gdm9pZCBsb2NhbF90aW1lcl9zZXR1cCh1bnNpZ25lZCBpbnQgY3B1KTsKKworLyoKKyAqIFN0b3AgYSBsb2NhbCB0aW1lciBpbnRlcnJ1cHQuCisgKi8KK2V4dGVybiB2b2lkIGxvY2FsX3RpbWVyX3N0b3AodW5zaWduZWQgaW50IGNwdSk7CisKKy8qCisgKiBQbGF0Zm9ybSBwcm92aWRlcyB0aGlzIHRvIGFja25vd2xlZGdlIGEgbG9jYWwgdGltZXIgSVJRCisgKi8KK2V4dGVybiBpbnQgbG9jYWxfdGltZXJfYWNrKHZvaWQpOworCisjZWxzZQorCitzdGF0aWMgaW5saW5lIHZvaWQgbG9jYWxfdGltZXJfc2V0dXAodW5zaWduZWQgaW50IGNwdSkKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIGxvY2FsX3RpbWVyX3N0b3AodW5zaWduZWQgaW50IGNwdSkKK3sKK30KKworI2VuZGlmCisKKy8qCisgKiBzaG93IGxvY2FsIGludGVycnVwdCBpbmZvCisgKi8KK2V4dGVybiB2b2lkIHNob3dfbG9jYWxfaXJxcyhzdHJ1Y3Qgc2VxX2ZpbGUgKik7CisKKy8qCisgKiBDYWxsZWQgZnJvbSBhc3NlbWJseSwgdGhpcyBpcyB0aGUgbG9jYWwgdGltZXIgSVJRIGhhbmRsZXIKKyAqLworYXNtbGlua2FnZSB2b2lkIGRvX2xvY2FsX3RpbWVyKHN0cnVjdCBwdF9yZWdzICopOworCiAjZW5kaWYgLyogaWZuZGVmIF9fQVNNX0FSTV9TTVBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9pZGUuaCBiL2luY2x1ZGUvYXNtLWkzODYvaWRlLmgKaW5kZXggNzlkZmFiOC4uNDU0NDQwMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9pZGUuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2lkZS5oCkBAIC00MSw2ICs0MSwxMiBAQAogCiBzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGlkZV9kZWZhdWx0X2lvX2Jhc2UoaW50IGluZGV4KQogeworCS8qCisJICoJSWYgUENJIGlzIHByZXNlbnQgdGhlbiBpdCBpcyBub3Qgc2FmZSB0byBwb2tlIGFyb3VuZAorCSAqCXRoZSBvdGhlciBsZWdhY3kgSURFIHBvcnRzLiBPbmx5IDB4MWYwIGFuZCAweDE3MCBhcmUKKwkgKglkZWZpbmVkIGNvbXBhdGliaWxpdHkgbW9kZSBwb3J0cyBmb3IgUENJLiBBIHVzZXIgY2FuIAorCSAqCW92ZXJyaWRlIHRoaXMgdXNpbmcgaWRlPSBidXQgd2UgbXVzdCBkZWZhdWx0IHNhZmUuCisJICovCiAJaWYgKHBjaV9maW5kX2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBOVUxMKSA9PSBOVUxMKSB7CiAJCXN3aXRjaChpbmRleCkgewogCQkJY2FzZSAyOiByZXR1cm4gMHgxZTg7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L21zaS5oIGIvaW5jbHVkZS9hc20taTM4Ni9tc2kuaAppbmRleCBiODUzOTMwLi5mMDQxZDQ0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L21zaS5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvbXNpLmgKQEAgLTEwLDEzICsxMCw2IEBACiAjaW5jbHVkZSA8bWFjaF9hcGljLmg+CiAKICNkZWZpbmUgTEFTVF9ERVZJQ0VfVkVDVE9SCQkyMzIKLSNkZWZpbmUgTVNJX0RFU1RfTU9ERQkJCU1TSV9MT0dJQ0FMX01PREUKLSNkZWZpbmUgTVNJX1RBUkdFVF9DUFVfU0hJRlQJCTEyCi0KLSNpZmRlZiBDT05GSUdfU01QCi0jZGVmaW5lIE1TSV9UQVJHRVRfQ1BVCQlsb2dpY2FsX3NtcF9wcm9jZXNzb3JfaWQoKQotI2Vsc2UKLSNkZWZpbmUgTVNJX1RBUkdFVF9DUFUJY3B1X3RvX2xvZ2ljYWxfYXBpY2lkKGZpcnN0X2NwdShjcHVfb25saW5lX21hcCkpCi0jZW5kaWYKKyNkZWZpbmUgTVNJX1RBUkdFVF9DUFVfU0hJRlQJMTIKIAogI2VuZGlmIC8qIEFTTV9NU0lfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9zbXAuaCBiL2luY2x1ZGUvYXNtLWkzODYvc21wLmgKaW5kZXggMTMyNTAxOS4uNjFkM2FiOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9zbXAuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3NtcC5oCkBAIC00NSw2ICs0NSw4IEBACiAjZGVmaW5lIE1BWF9BUElDSUQgMjU2CiBleHRlcm4gdTggeDg2X2NwdV90b19hcGljaWRbXTsKIAorI2RlZmluZSBjcHVfcGh5c2ljYWxfaWQoY3B1KQl4ODZfY3B1X3RvX2FwaWNpZFtjcHVdCisKICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKIGV4dGVybiB2b2lkIGNwdV9leGl0X2NsZWFyKHZvaWQpOwogZXh0ZXJuIHZvaWQgY3B1X3VuaW5pdCh2b2lkKTsKQEAgLTkyLDYgKzk0LDEwIEBACiBleHRlcm4gdm9pZCBfX2NwdV9kaWUodW5zaWduZWQgaW50IGNwdSk7CiAjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLwogCisjZWxzZSAvKiBDT05GSUdfU01QICovCisKKyNkZWZpbmUgY3B1X3BoeXNpY2FsX2lkKGNwdSkJCWJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZAorCiAjZGVmaW5lIE5PX1BST0NfSUQJCTB4RkYJCS8qIE5vIHByb2Nlc3NvciBtYWdpYyBtYXJrZXIgKi8KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L2tkZWJ1Zy5oIGIvaW5jbHVkZS9hc20taWE2NC9rZGVidWcuaAppbmRleCA0ZDM3NmUxLi44YjAxYTA4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L2tkZWJ1Zy5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQva2RlYnVnLmgKQEAgLTIyLDYgKzIyLDkgQEAKICAqIDIwMDUtQXByICAgICBSdXN0eSBMeW5jaCA8cnVzdHkubHluY2hAaW50ZWwuY29tPiBhbmQgQW5pbCBTIEtlc2hhdmFtdXJ0aHkKICAqICAgICAgICAgICAgICA8YW5pbC5zLmtlc2hhdmFtdXJ0aHlAaW50ZWwuY29tPiBhZG9wdGVkIGZyb20KICAqICAgICAgICAgICAgICBpbmNsdWRlL2FzbS14ODZfNjQva2RlYnVnLmgKKyAqCisgKiAyMDA1LU9jdAlLZWl0aCBPd2VucyA8a2Fvc0BzZ2kuY29tPi4gIEV4cGFuZCBub3RpZnlfZGllIHRvIGNvdmVyIG1vcmUKKyAqCQlldmVudHMuCiAgKi8KICNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgogCkBAIC0zNSwxMyArMzgsMzYgQEAKIAlpbnQgc2lnbnI7CiB9OwogCi1pbnQgcmVnaXN0ZXJfZGllX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpOworZXh0ZXJuIGludCByZWdpc3Rlcl9kaWVfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICopOworZXh0ZXJuIGludCB1bnJlZ2lzdGVyX2RpZV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKik7CiBleHRlcm4gc3RydWN0IG5vdGlmaWVyX2Jsb2NrICppYTY0ZGllX2NoYWluOwogCiBlbnVtIGRpZV92YWwgewogCURJRV9CUkVBSyA9IDEsCi0JRElFX1NTLAorCURJRV9GQVVMVCwKKwlESUVfT09QUywKIAlESUVfUEFHRV9GQVVMVCwKKwlESUVfTUFDSElORV9IQUxULAorCURJRV9NQUNISU5FX1JFU1RBUlQsCisJRElFX01DQV9NT05BUkNIX0VOVEVSLAorCURJRV9NQ0FfTU9OQVJDSF9QUk9DRVNTLAorCURJRV9NQ0FfTU9OQVJDSF9MRUFWRSwKKwlESUVfTUNBX1NMQVZFX0VOVEVSLAorCURJRV9NQ0FfU0xBVkVfUFJPQ0VTUywKKwlESUVfTUNBX1NMQVZFX0xFQVZFLAorCURJRV9NQ0FfUkVORFpWT1VTX0VOVEVSLAorCURJRV9NQ0FfUkVORFpWT1VTX1BST0NFU1MsCisJRElFX01DQV9SRU5EWlZPVVNfTEVBVkUsCisJRElFX0lOSVRfTU9OQVJDSF9FTlRFUiwKKwlESUVfSU5JVF9NT05BUkNIX1BST0NFU1MsCisJRElFX0lOSVRfTU9OQVJDSF9MRUFWRSwKKwlESUVfSU5JVF9TTEFWRV9FTlRFUiwKKwlESUVfSU5JVF9TTEFWRV9QUk9DRVNTLAorCURJRV9JTklUX1NMQVZFX0xFQVZFLAorCURJRV9LREVCVUdfRU5URVIsCisJRElFX0tERUJVR19MRUFWRSwKKwlESUVfS0RVTVBfRU5URVIsCisJRElFX0tEVU1QX0xFQVZFLAogfTsKIAogc3RhdGljIGlubGluZSBpbnQgbm90aWZ5X2RpZShlbnVtIGRpZV92YWwgdmFsLCBjaGFyICpzdHIsIHN0cnVjdCBwdF9yZWdzICpyZWdzLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9tbXVfY29udGV4dC5oIGIvaW5jbHVkZS9hc20taWE2NC9tbXVfY29udGV4dC5oCmluZGV4IDhkNmU3MmYuLmI1YzY1MDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvbW11X2NvbnRleHQuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L21tdV9jb250ZXh0LmgKQEAgLTcsMTIgKzcsMTMgQEAKICAqLwogCiAvKgotICogUm91dGluZXMgdG8gbWFuYWdlIHRoZSBhbGxvY2F0aW9uIG9mIHRhc2sgY29udGV4dCBudW1iZXJzLiAgVGFzayBjb250ZXh0IG51bWJlcnMgYXJlCi0gKiB1c2VkIHRvIHJlZHVjZSBvciBlbGltaW5hdGUgdGhlIG5lZWQgdG8gcGVyZm9ybSBUTEIgZmx1c2hlcyBkdWUgdG8gY29udGV4dCBzd2l0Y2hlcy4KLSAqIENvbnRleHQgbnVtYmVycyBhcmUgaW1wbGVtZW50ZWQgdXNpbmcgaWEtNjQgcmVnaW9uIGlkcy4gIFNpbmNlIHRoZSBJQS02NCBUTEIgZG9lcyBub3QKLSAqIGNvbnNpZGVyIHRoZSByZWdpb24gbnVtYmVyIHdoZW4gcGVyZm9ybWluZyBhIFRMQiBsb29rdXAsIHdlIG5lZWQgdG8gYXNzaWduIGEgdW5pcXVlCi0gKiByZWdpb24gaWQgdG8gZWFjaCByZWdpb24gaW4gYSBwcm9jZXNzLiAgV2UgdXNlIHRoZSBsZWFzdCBzaWduaWZpY2FudCB0aHJlZSBiaXRzIGluIGEKLSAqIHJlZ2lvbiBpZCBmb3IgdGhpcyBwdXJwb3NlLgorICogUm91dGluZXMgdG8gbWFuYWdlIHRoZSBhbGxvY2F0aW9uIG9mIHRhc2sgY29udGV4dCBudW1iZXJzLiAgVGFzayBjb250ZXh0CisgKiBudW1iZXJzIGFyZSB1c2VkIHRvIHJlZHVjZSBvciBlbGltaW5hdGUgdGhlIG5lZWQgdG8gcGVyZm9ybSBUTEIgZmx1c2hlcworICogZHVlIHRvIGNvbnRleHQgc3dpdGNoZXMuICBDb250ZXh0IG51bWJlcnMgYXJlIGltcGxlbWVudGVkIHVzaW5nIGlhLTY0CisgKiByZWdpb24gaWRzLiAgU2luY2UgdGhlIElBLTY0IFRMQiBkb2VzIG5vdCBjb25zaWRlciB0aGUgcmVnaW9uIG51bWJlciB3aGVuCisgKiBwZXJmb3JtaW5nIGEgVExCIGxvb2t1cCwgd2UgbmVlZCB0byBhc3NpZ24gYSB1bmlxdWUgcmVnaW9uIGlkIHRvIGVhY2gKKyAqIHJlZ2lvbiBpbiBhIHByb2Nlc3MuICBXZSB1c2UgdGhlIGxlYXN0IHNpZ25pZmljYW50IHRocmVlIGJpdHMgaW4gYXJlZ2lvbgorICogaWQgZm9yIHRoaXMgcHVycG9zZS4KICAqLwogCiAjZGVmaW5lIElBNjRfUkVHSU9OX0lEX0tFUk5FTAkwIC8qIHRoZSBrZXJuZWwncyByZWdpb24gaWQgKHRsYi5jIGRlcGVuZHMgb24gdGhpcyBiZWluZyAwKSAqLwpAQCAtMzIsMTMgKzMzLDE3IEBACiBzdHJ1Y3QgaWE2NF9jdHggewogCXNwaW5sb2NrX3QgbG9jazsKIAl1bnNpZ25lZCBpbnQgbmV4dDsJLyogbmV4dCBjb250ZXh0IG51bWJlciB0byB1c2UgKi8KLQl1bnNpZ25lZCBpbnQgbGltaXQ7CS8qIG5leHQgPj0gbGltaXQgPT4gbXVzdCBjYWxsIHdyYXBfbW11X2NvbnRleHQoKSAqLwotCXVuc2lnbmVkIGludCBtYXhfY3R4OwkvKiBtYXguIGNvbnRleHQgdmFsdWUgc3VwcG9ydGVkIGJ5IGFsbCBDUFVzICovCisJdW5zaWduZWQgaW50IGxpbWl0OyAgICAgLyogYXZhaWxhYmxlIGZyZWUgcmFuZ2UgKi8KKwl1bnNpZ25lZCBpbnQgbWF4X2N0eDsgICAvKiBtYXguIGNvbnRleHQgdmFsdWUgc3VwcG9ydGVkIGJ5IGFsbCBDUFVzICovCisJCQkJLyogY2FsbCB3cmFwX21tdV9jb250ZXh0IHdoZW4gbmV4dCA+PSBtYXggKi8KKwl1bnNpZ25lZCBsb25nICpiaXRtYXA7ICAvKiBiaXRtYXAgc2l6ZSBpcyBtYXhfY3R4KzEgKi8KKwl1bnNpZ25lZCBsb25nICpmbHVzaG1hcDsvKiBwZW5kaW5nIHJpZCB0byBiZSBmbHVzaGVkICovCiB9OwogCiBleHRlcm4gc3RydWN0IGlhNjRfY3R4IGlhNjRfY3R4OwogREVDTEFSRV9QRVJfQ1BVKHU4LCBpYTY0X25lZWRfdGxiX2ZsdXNoKTsKIAorZXh0ZXJuIHZvaWQgbW11X2NvbnRleHRfaW5pdCAodm9pZCk7CiBleHRlcm4gdm9pZCB3cmFwX21tdV9jb250ZXh0IChzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZApAQCAtNDcsMTAgKzUyLDEwIEBACiB9CiAKIC8qCi0gKiBXaGVuIHRoZSBjb250ZXh0IGNvdW50ZXIgd3JhcHMgYXJvdW5kIGFsbCBUTEJzIG5lZWQgdG8gYmUgZmx1c2hlZCBiZWNhdXNlIGFuIG9sZAotICogY29udGV4dCBudW1iZXIgbWlnaHQgaGF2ZSBiZWVuIHJldXNlZC4gVGhpcyBpcyBzaWduYWxsZWQgYnkgdGhlIGlhNjRfbmVlZF90bGJfZmx1c2gKLSAqIHBlci1DUFUgdmFyaWFibGUsIHdoaWNoIGlzIGNoZWNrZWQgaW4gdGhlIHJvdXRpbmUgYmVsb3cuIENhbGxlZCBieSBhY3RpdmF0ZV9tbSgpLgotICogPGVmb2NodEBlc3MubmVjLmRlPgorICogV2hlbiB0aGUgY29udGV4dCBjb3VudGVyIHdyYXBzIGFyb3VuZCBhbGwgVExCcyBuZWVkIHRvIGJlIGZsdXNoZWQgYmVjYXVzZQorICogYW4gb2xkIGNvbnRleHQgbnVtYmVyIG1pZ2h0IGhhdmUgYmVlbiByZXVzZWQuIFRoaXMgaXMgc2lnbmFsbGVkIGJ5IHRoZQorICogaWE2NF9uZWVkX3RsYl9mbHVzaCBwZXItQ1BVIHZhcmlhYmxlLCB3aGljaCBpcyBjaGVja2VkIGluIHRoZSByb3V0aW5lCisgKiBiZWxvdy4gQ2FsbGVkIGJ5IGFjdGl2YXRlX21tKCkuIDxlZm9jaHRAZXNzLm5lYy5kZT4KICAqLwogc3RhdGljIGlubGluZSB2b2lkCiBkZWxheWVkX3RsYl9mbHVzaCAodm9pZCkKQEAgLTYwLDExICs2NSw5IEBACiAKIAlpZiAodW5saWtlbHkoX19pYTY0X3Blcl9jcHVfdmFyKGlhNjRfbmVlZF90bGJfZmx1c2gpKSkgewogCQlzcGluX2xvY2tfaXJxc2F2ZSgmaWE2NF9jdHgubG9jaywgZmxhZ3MpOwotCQl7Ci0JCQlpZiAoX19pYTY0X3Blcl9jcHVfdmFyKGlhNjRfbmVlZF90bGJfZmx1c2gpKSB7Ci0JCQkJbG9jYWxfZmx1c2hfdGxiX2FsbCgpOwotCQkJCV9faWE2NF9wZXJfY3B1X3ZhcihpYTY0X25lZWRfdGxiX2ZsdXNoKSA9IDA7Ci0JCQl9CisJCWlmIChfX2lhNjRfcGVyX2NwdV92YXIoaWE2NF9uZWVkX3RsYl9mbHVzaCkpIHsKKwkJCWxvY2FsX2ZsdXNoX3RsYl9hbGwoKTsKKwkJCV9faWE2NF9wZXJfY3B1X3ZhcihpYTY0X25lZWRfdGxiX2ZsdXNoKSA9IDA7CiAJCX0KIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWE2NF9jdHgubG9jaywgZmxhZ3MpOwogCX0KQEAgLTc2LDIwICs3OSwyNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJbnZfbW1fY29udGV4dF90IGNvbnRleHQgPSBtbS0+Y29udGV4dDsKIAotCWlmICh1bmxpa2VseSghY29udGV4dCkpIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlhNjRfY3R4LmxvY2ssIGZsYWdzKTsKLQkJewotCQkJLyogcmUtY2hlY2ssIG5vdyB0aGF0IHdlJ3ZlIGdvdCB0aGUgbG9jazogKi8KLQkJCWNvbnRleHQgPSBtbS0+Y29udGV4dDsKLQkJCWlmIChjb250ZXh0ID09IDApIHsKLQkJCQljcHVzX2NsZWFyKG1tLT5jcHVfdm1fbWFzayk7Ci0JCQkJaWYgKGlhNjRfY3R4Lm5leHQgPj0gaWE2NF9jdHgubGltaXQpCi0JCQkJCXdyYXBfbW11X2NvbnRleHQobW0pOwotCQkJCW1tLT5jb250ZXh0ID0gY29udGV4dCA9IGlhNjRfY3R4Lm5leHQrKzsKLQkJCX0KKwlpZiAobGlrZWx5KGNvbnRleHQpKQorCQlnb3RvIG91dDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpYTY0X2N0eC5sb2NrLCBmbGFncyk7CisJLyogcmUtY2hlY2ssIG5vdyB0aGF0IHdlJ3ZlIGdvdCB0aGUgbG9jazogKi8KKwljb250ZXh0ID0gbW0tPmNvbnRleHQ7CisJaWYgKGNvbnRleHQgPT0gMCkgeworCQljcHVzX2NsZWFyKG1tLT5jcHVfdm1fbWFzayk7CisJCWlmIChpYTY0X2N0eC5uZXh0ID49IGlhNjRfY3R4LmxpbWl0KSB7CisJCQlpYTY0X2N0eC5uZXh0ID0gZmluZF9uZXh0X3plcm9fYml0KGlhNjRfY3R4LmJpdG1hcCwKKwkJCQkJaWE2NF9jdHgubWF4X2N0eCwgaWE2NF9jdHgubmV4dCk7CisJCQlpYTY0X2N0eC5saW1pdCA9IGZpbmRfbmV4dF9iaXQoaWE2NF9jdHguYml0bWFwLAorCQkJCQlpYTY0X2N0eC5tYXhfY3R4LCBpYTY0X2N0eC5uZXh0KTsKKwkJCWlmIChpYTY0X2N0eC5uZXh0ID49IGlhNjRfY3R4Lm1heF9jdHgpCisJCQkJd3JhcF9tbXVfY29udGV4dChtbSk7CiAJCX0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWE2NF9jdHgubG9jaywgZmxhZ3MpOworCQltbS0+Y29udGV4dCA9IGNvbnRleHQgPSBpYTY0X2N0eC5uZXh0Kys7CisJCV9fc2V0X2JpdChjb250ZXh0LCBpYTY0X2N0eC5iaXRtYXApOwogCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpYTY0X2N0eC5sb2NrLCBmbGFncyk7CitvdXQ6CiAJLyoKIAkgKiBFbnN1cmUgd2UncmUgbm90IHN0YXJ0aW5nIHRvIHVzZSAiY29udGV4dCIgYmVmb3JlIGFueSBvbGQKIAkgKiB1c2VzIG9mIGl0IGFyZSBnb25lIGZyb20gb3VyIFRMQi4KQEAgLTEwMCw4ICsxMTAsOCBAQAogfQogCiAvKgotICogSW5pdGlhbGl6ZSBjb250ZXh0IG51bWJlciB0byBzb21lIHNhbmUgdmFsdWUuICBNTSBpcyBndWFyYW50ZWVkIHRvIGJlIGEgYnJhbmQtbmV3Ci0gKiBhZGRyZXNzLXNwYWNlLCBzbyBubyBUTEIgZmx1c2hpbmcgaXMgbmVlZGVkLCBldmVyLgorICogSW5pdGlhbGl6ZSBjb250ZXh0IG51bWJlciB0byBzb21lIHNhbmUgdmFsdWUuICBNTSBpcyBndWFyYW50ZWVkIHRvIGJlIGEKKyAqIGJyYW5kLW5ldyBhZGRyZXNzLXNwYWNlLCBzbyBubyBUTEIgZmx1c2hpbmcgaXMgbmVlZGVkLCBldmVyLgogICovCiBzdGF0aWMgaW5saW5lIGludAogaW5pdF9uZXdfY29udGV4dCAoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKQEAgLTE2Miw3ICsxNzIsMTAgQEAKIAkJaWYgKCFjcHVfaXNzZXQoc21wX3Byb2Nlc3Nvcl9pZCgpLCBtbS0+Y3B1X3ZtX21hc2spKQogCQkJY3B1X3NldChzbXBfcHJvY2Vzc29yX2lkKCksIG1tLT5jcHVfdm1fbWFzayk7CiAJCXJlbG9hZF9jb250ZXh0KGNvbnRleHQpOwotCQkvKiBpbiB0aGUgdW5saWtlbHkgZXZlbnQgb2YgYSBUTEItZmx1c2ggYnkgYW5vdGhlciB0aHJlYWQsIHJlZG8gdGhlIGxvYWQ6ICovCisJCS8qCisJCSAqIGluIHRoZSB1bmxpa2VseSBldmVudCBvZiBhIFRMQi1mbHVzaCBieSBhbm90aGVyIHRocmVhZCwKKwkJICogcmVkbyB0aGUgbG9hZC4KKwkJICovCiAJfSB3aGlsZSAodW5saWtlbHkoY29udGV4dCAhPSBtbS0+Y29udGV4dCkpOwogfQogCkBAIC0xNzUsOCArMTg4LDggQEAKIGFjdGl2YXRlX21tIChzdHJ1Y3QgbW1fc3RydWN0ICpwcmV2LCBzdHJ1Y3QgbW1fc3RydWN0ICpuZXh0KQogewogCS8qCi0JICogV2UgbWF5IGdldCBpbnRlcnJ1cHRzIGhlcmUsIGJ1dCB0aGF0J3MgT0sgYmVjYXVzZSBpbnRlcnJ1cHQgaGFuZGxlcnMgY2Fubm90Ci0JICogdG91Y2ggdXNlci1zcGFjZS4KKwkgKiBXZSBtYXkgZ2V0IGludGVycnVwdHMgaGVyZSwgYnV0IHRoYXQncyBPSyBiZWNhdXNlIGludGVycnVwdAorCSAqIGhhbmRsZXJzIGNhbm5vdCB0b3VjaCB1c2VyLXNwYWNlLgogCSAqLwogCWlhNjRfc2V0X2tyKElBNjRfS1JfUFRfQkFTRSwgX19wYShuZXh0LT5wZ2QpKTsKIAlhY3RpdmF0ZV9jb250ZXh0KG5leHQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9tc2kuaCBiL2luY2x1ZGUvYXNtLWlhNjQvbXNpLmgKaW5kZXggNjBmMjEzNy4uOTc4OTBmNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9tc2kuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L21zaS5oCkBAIC0xMiw5ICsxMiw2IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2ludHJfZ2F0ZSAoaW50IG5yLCB2b2lkICpmdW5jKSB7fQogI2RlZmluZSBJT19BUElDX1ZFQ1RPUihpcnEpCShpcnEpCiAjZGVmaW5lIGFja19BUElDX2lycQkJaWE2NF9lb2kKLSNkZWZpbmUgY3B1X21hc2tfdG9fYXBpY2lkKG1hc2spIGNwdV9waHlzaWNhbF9pZChmaXJzdF9jcHUobWFzaykpCi0jZGVmaW5lIE1TSV9ERVNUX01PREUJCU1TSV9QSFlTSUNBTF9NT0RFCi0jZGVmaW5lIE1TSV9UQVJHRVRfQ1BVCSgoaWE2NF9nZXRyZWcoX0lBNjRfUkVHX0NSX0xJRCkgPj4gMTYpICYgMHhmZmZmKQogI2RlZmluZSBNU0lfVEFSR0VUX0NQVV9TSElGVAk0CiAKICNlbmRpZiAvKiBBU01fTVNJX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvdGxiZmx1c2guaCBiL2luY2x1ZGUvYXNtLWlhNjQvdGxiZmx1c2guaAppbmRleCBiNjVjNjI3Li5hMzViMzIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L3RsYmZsdXNoLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC90bGJmbHVzaC5oCkBAIC01MSw2ICs1MSw3IEBACiAJaWYgKCFtbSkKIAkJcmV0dXJuOwogCisJc2V0X2JpdChtbS0+Y29udGV4dCwgaWE2NF9jdHguZmx1c2htYXApOwogCW1tLT5jb250ZXh0ID0gMDsKIAogCWlmIChhdG9taWNfcmVhZCgmbW0tPm1tX3VzZXJzKSA9PSAwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvYWJzX2FkZHIuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvYWJzX2FkZHIuaApzaW1pbGFyaXR5IGluZGV4IDk0JQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wcGM2NC9hYnNfYWRkci5oCnJlbmFtZSB0byBpbmNsdWRlL2FzbS1wb3dlcnBjL2Fic19hZGRyLmgKaW5kZXggZGMzZmMzZi4uMTg0MTUxMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjNjQvYWJzX2FkZHIuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2Fic19hZGRyLmgKQEAgLTEsNSArMSw1IEBACi0jaWZuZGVmIF9BQlNfQUREUl9ICi0jZGVmaW5lIF9BQlNfQUREUl9ICisjaWZuZGVmIF9BU01fUE9XRVJQQ19BQlNfQUREUl9ICisjZGVmaW5lIF9BU01fUE9XRVJQQ19BQlNfQUREUl9ICiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIApAQCAtNzAsNCArNzAsNCBAQAogI2RlZmluZSBpc2VyaWVzX2h2X2FkZHIodmlydGFkZHIpCVwKIAkoMHg4MDAwMDAwMDAwMDAwMDAwIHwgdmlydF90b19hYnModmlydGFkZHIpKQogCi0jZW5kaWYgLyogX0FCU19BRERSX0ggKi8KKyNlbmRpZiAvKiBfQVNNX1BPV0VSUENfQUJTX0FERFJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9hc20tY29tcGF0LmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2FzbS1jb21wYXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjEzM2VmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9hc20tY29tcGF0LmgKQEAgLTAsMCArMSw1NSBAQAorI2lmbmRlZiBfQVNNX1BPV0VSUENfQVNNX0NPTVBBVF9ICisjZGVmaW5lIF9BU01fUE9XRVJQQ19BU01fQ09NUEFUX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorCisjaWZkZWYgX19BU1NFTUJMWV9fCisjICBkZWZpbmUgc3RyaW5naWZ5X2luX2MoLi4uKQlfX1ZBX0FSR1NfXworIyAgZGVmaW5lIEFTTV9DT05TVCh4KQkJeAorI2Vsc2UKKy8qIFRoaXMgdmVyc2lvbiBvZiBzdHJpbmdpZnkgd2lsbCBkZWFsIHdpdGggY29tbWFzLi4uICovCisjICBkZWZpbmUgX19zdHJpbmdpZnlfaW5fYyguLi4pCSNfX1ZBX0FSR1NfXworIyAgZGVmaW5lIHN0cmluZ2lmeV9pbl9jKC4uLikJX19zdHJpbmdpZnlfaW5fYyhfX1ZBX0FSR1NfXykgIiAiCisjICBkZWZpbmUgX19BU01fQ09OU1QoeCkJeCMjVUwKKyMgIGRlZmluZSBBU01fQ09OU1QoeCkJCV9fQVNNX0NPTlNUKHgpCisjZW5kaWYKKworI2lmZGVmIF9fcG93ZXJwYzY0X18KKworLyogb3BlcmF0aW9ucyBmb3IgbG9uZ3MgYW5kIHBvaW50ZXJzICovCisjZGVmaW5lIFBQQ19MTAkJc3RyaW5naWZ5X2luX2MobGQpCisjZGVmaW5lIFBQQ19TVEwJCXN0cmluZ2lmeV9pbl9jKHN0ZCkKKyNkZWZpbmUgUFBDX0xDTVBJCXN0cmluZ2lmeV9pbl9jKGNtcGRpKQorI2RlZmluZSBQUENfTE9ORwlzdHJpbmdpZnlfaW5fYygubGxvbmcpCisjZGVmaW5lIFBQQ19UTE5FSQlzdHJpbmdpZnlfaW5fYyh0ZG5laSkKKyNkZWZpbmUgUFBDX0xMQVJYCXN0cmluZ2lmeV9pbl9jKGxkYXJ4KQorI2RlZmluZSBQUENfU1RMQ1gJc3RyaW5naWZ5X2luX2Moc3RkY3guKQorI2RlZmluZSBQUENfQ05UTFpMCXN0cmluZ2lmeV9pbl9jKGNudGx6ZCkKKworI2Vsc2UgLyogMzItYml0ICovCisKKy8qIG9wZXJhdGlvbnMgZm9yIGxvbmdzIGFuZCBwb2ludGVycyAqLworI2RlZmluZSBQUENfTEwJCXN0cmluZ2lmeV9pbl9jKGx3eikKKyNkZWZpbmUgUFBDX1NUTAkJc3RyaW5naWZ5X2luX2Moc3R3KQorI2RlZmluZSBQUENfTENNUEkJc3RyaW5naWZ5X2luX2MoY21wd2kpCisjZGVmaW5lIFBQQ19MT05HCXN0cmluZ2lmeV9pbl9jKC5sb25nKQorI2RlZmluZSBQUENfVExORUkJc3RyaW5naWZ5X2luX2ModHduZWkpCisjZGVmaW5lIFBQQ19MTEFSWAlzdHJpbmdpZnlfaW5fYyhsd2FyeCkKKyNkZWZpbmUgUFBDX1NUTENYCXN0cmluZ2lmeV9pbl9jKHN0d2N4LikKKyNkZWZpbmUgUFBDX0NOVExaTAlzdHJpbmdpZnlfaW5fYyhjbnRsencpCisKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0lCTTQwNV9FUlI3NworLyogRXJyYXR1bSAjNzcgb24gdGhlIDQwNSBtZWFucyB3ZSBuZWVkIGEgc3luYyBvciBkY2J0IGJlZm9yZSBldmVyeQorICogc3R3Y3guICBUaGUgb2xkIEFUT01JQ19TWU5DX0ZJWCBjb3ZlcmVkIHNvbWUgYnV0IG5vdCBhbGwgb2YgdGhpcy4KKyAqLworI2RlZmluZSBQUEM0MDVfRVJSNzcocmEscmIpCXN0cmluZ2lmeV9pbl9jKGRjYnQJcmEsIHJiOykKKyNkZWZpbmUJUFBDNDA1X0VSUjc3X1NZTkMJc3RyaW5naWZ5X2luX2Moc3luYzspCisjZWxzZQorI2RlZmluZSBQUEM0MDVfRVJSNzcocmEscmIpCisjZGVmaW5lIFBQQzQwNV9FUlI3N19TWU5DCisjZW5kaWYKKworI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19BU01fQ09NUEFUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvYXRvbWljLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2F0b21pYy5oCmluZGV4IGVkNGIzNDUuLjljMGIzNzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvYXRvbWljLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9hdG9taWMuaApAQCAtOSwyMSArOSwxMyBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogI2luY2x1ZGUgPGFzbS9zeW5jaC5oPgorI2luY2x1ZGUgPGFzbS9hc20tY29tcGF0Lmg+CiAKICNkZWZpbmUgQVRPTUlDX0lOSVQoaSkJCXsgKGkpIH0KIAogI2RlZmluZSBhdG9taWNfcmVhZCh2KQkJKCh2KS0+Y291bnRlcikKICNkZWZpbmUgYXRvbWljX3NldCh2LGkpCQkoKCh2KS0+Y291bnRlcikgPSAoaSkpCiAKLS8qIEVycmF0dW0gIzc3IG9uIHRoZSA0MDUgbWVhbnMgd2UgbmVlZCBhIHN5bmMgb3IgZGNidCBiZWZvcmUgZXZlcnkgc3R3Y3guCi0gKiBUaGUgb2xkIEFUT01JQ19TWU5DX0ZJWCBjb3ZlcmVkIHNvbWUgYnV0IG5vdCBhbGwgb2YgdGhpcy4KLSAqLwotI2lmZGVmIENPTkZJR19JQk00MDVfRVJSNzcKLSNkZWZpbmUgUFBDNDA1X0VSUjc3KHJhLHJiKQkiZGNidCAiICNyYSAiLCIgI3JiICI7IgotI2Vsc2UKLSNkZWZpbmUgUFBDNDA1X0VSUjc3KHJhLHJiKQotI2VuZGlmCi0KIHN0YXRpYyBfX2lubGluZV9fIHZvaWQgYXRvbWljX2FkZChpbnQgYSwgYXRvbWljX3QgKnYpCiB7CiAJaW50IHQ7CkBAIC0yMDUsNSArMTk3LDE4MyBAQAogI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWNfaW5jKCkgICAgIHNtcF9tYigpCiAjZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpICAgICAgc21wX21iKCkKIAorI2lmZGVmIF9fcG93ZXJwYzY0X18KKwordHlwZWRlZiBzdHJ1Y3QgeyB2b2xhdGlsZSBsb25nIGNvdW50ZXI7IH0gYXRvbWljNjRfdDsKKworI2RlZmluZSBBVE9NSUM2NF9JTklUKGkpCXsgKGkpIH0KKworI2RlZmluZSBhdG9taWM2NF9yZWFkKHYpCSgodiktPmNvdW50ZXIpCisjZGVmaW5lIGF0b21pYzY0X3NldCh2LGkpCSgoKHYpLT5jb3VudGVyKSA9IChpKSkKKworc3RhdGljIF9faW5saW5lX18gdm9pZCBhdG9taWM2NF9hZGQobG9uZyBhLCBhdG9taWM2NF90ICp2KQoreworCWxvbmcgdDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorIjE6CWxkYXJ4CSUwLDAsJTMJCSMgYXRvbWljNjRfYWRkXG5cCisJYWRkCSUwLCUyLCUwXG5cCisJc3RkY3guCSUwLDAsJTMgXG5cCisJYm5lLQkxYiIKKwk6ICI9JnIiICh0KSwgIj1tIiAodi0+Y291bnRlcikKKwk6ICJyIiAoYSksICJyIiAoJnYtPmNvdW50ZXIpLCAibSIgKHYtPmNvdW50ZXIpCisJOiAiY2MiKTsKK30KKworc3RhdGljIF9faW5saW5lX18gbG9uZyBhdG9taWM2NF9hZGRfcmV0dXJuKGxvbmcgYSwgYXRvbWljNjRfdCAqdikKK3sKKwlsb25nIHQ7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwlFSUVJT19PTl9TTVAKKyIxOglsZGFyeAklMCwwLCUyCQkjIGF0b21pYzY0X2FkZF9yZXR1cm5cblwKKwlhZGQJJTAsJTEsJTBcblwKKwlzdGRjeC4JJTAsMCwlMiBcblwKKwlibmUtCTFiIgorCUlTWU5DX09OX1NNUAorCTogIj0mciIgKHQpCisJOiAiciIgKGEpLCAiciIgKCZ2LT5jb3VudGVyKQorCTogImNjIiwgIm1lbW9yeSIpOworCisJcmV0dXJuIHQ7Cit9CisKKyNkZWZpbmUgYXRvbWljNjRfYWRkX25lZ2F0aXZlKGEsIHYpCShhdG9taWM2NF9hZGRfcmV0dXJuKChhKSwgKHYpKSA8IDApCisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgYXRvbWljNjRfc3ViKGxvbmcgYSwgYXRvbWljNjRfdCAqdikKK3sKKwlsb25nIHQ7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKyIxOglsZGFyeAklMCwwLCUzCQkjIGF0b21pYzY0X3N1YlxuXAorCXN1YmYJJTAsJTIsJTBcblwKKwlzdGRjeC4JJTAsMCwlMyBcblwKKwlibmUtCTFiIgorCTogIj0mciIgKHQpLCAiPW0iICh2LT5jb3VudGVyKQorCTogInIiIChhKSwgInIiICgmdi0+Y291bnRlciksICJtIiAodi0+Y291bnRlcikKKwk6ICJjYyIpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBsb25nIGF0b21pYzY0X3N1Yl9yZXR1cm4obG9uZyBhLCBhdG9taWM2NF90ICp2KQoreworCWxvbmcgdDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCUVJRUlPX09OX1NNUAorIjE6CWxkYXJ4CSUwLDAsJTIJCSMgYXRvbWljNjRfc3ViX3JldHVyblxuXAorCXN1YmYJJTAsJTEsJTBcblwKKwlzdGRjeC4JJTAsMCwlMiBcblwKKwlibmUtCTFiIgorCUlTWU5DX09OX1NNUAorCTogIj0mciIgKHQpCisJOiAiciIgKGEpLCAiciIgKCZ2LT5jb3VudGVyKQorCTogImNjIiwgIm1lbW9yeSIpOworCisJcmV0dXJuIHQ7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgYXRvbWljNjRfaW5jKGF0b21pYzY0X3QgKnYpCit7CisJbG9uZyB0OworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisiMToJbGRhcngJJTAsMCwlMgkJIyBhdG9taWM2NF9pbmNcblwKKwlhZGRpYwklMCwlMCwxXG5cCisJc3RkY3guCSUwLDAsJTIgXG5cCisJYm5lLQkxYiIKKwk6ICI9JnIiICh0KSwgIj1tIiAodi0+Y291bnRlcikKKwk6ICJyIiAoJnYtPmNvdW50ZXIpLCAibSIgKHYtPmNvdW50ZXIpCisJOiAiY2MiKTsKK30KKworc3RhdGljIF9faW5saW5lX18gbG9uZyBhdG9taWM2NF9pbmNfcmV0dXJuKGF0b21pYzY0X3QgKnYpCit7CisJbG9uZyB0OworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJRUlFSU9fT05fU01QCisiMToJbGRhcngJJTAsMCwlMQkJIyBhdG9taWM2NF9pbmNfcmV0dXJuXG5cCisJYWRkaWMJJTAsJTAsMVxuXAorCXN0ZGN4LgklMCwwLCUxIFxuXAorCWJuZS0JMWIiCisJSVNZTkNfT05fU01QCisJOiAiPSZyIiAodCkKKwk6ICJyIiAoJnYtPmNvdW50ZXIpCisJOiAiY2MiLCAibWVtb3J5Iik7CisKKwlyZXR1cm4gdDsKK30KKworLyoKKyAqIGF0b21pYzY0X2luY19hbmRfdGVzdCAtIGluY3JlbWVudCBhbmQgdGVzdAorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWM2NF90CisgKgorICogQXRvbWljYWxseSBpbmNyZW1lbnRzIEB2IGJ5IDEKKyAqIGFuZCByZXR1cm5zIHRydWUgaWYgdGhlIHJlc3VsdCBpcyB6ZXJvLCBvciBmYWxzZSBmb3IgYWxsCisgKiBvdGhlciBjYXNlcy4KKyAqLworI2RlZmluZSBhdG9taWM2NF9pbmNfYW5kX3Rlc3QodikgKGF0b21pYzY0X2luY19yZXR1cm4odikgPT0gMCkKKworc3RhdGljIF9faW5saW5lX18gdm9pZCBhdG9taWM2NF9kZWMoYXRvbWljNjRfdCAqdikKK3sKKwlsb25nIHQ7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKyIxOglsZGFyeAklMCwwLCUyCQkjIGF0b21pYzY0X2RlY1xuXAorCWFkZGljCSUwLCUwLC0xXG5cCisJc3RkY3guCSUwLDAsJTJcblwKKwlibmUtCTFiIgorCTogIj0mciIgKHQpLCAiPW0iICh2LT5jb3VudGVyKQorCTogInIiICgmdi0+Y291bnRlciksICJtIiAodi0+Y291bnRlcikKKwk6ICJjYyIpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBsb25nIGF0b21pYzY0X2RlY19yZXR1cm4oYXRvbWljNjRfdCAqdikKK3sKKwlsb25nIHQ7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwlFSUVJT19PTl9TTVAKKyIxOglsZGFyeAklMCwwLCUxCQkjIGF0b21pYzY0X2RlY19yZXR1cm5cblwKKwlhZGRpYwklMCwlMCwtMVxuXAorCXN0ZGN4LgklMCwwLCUxXG5cCisJYm5lLQkxYiIKKwlJU1lOQ19PTl9TTVAKKwk6ICI9JnIiICh0KQorCTogInIiICgmdi0+Y291bnRlcikKKwk6ICJjYyIsICJtZW1vcnkiKTsKKworCXJldHVybiB0OworfQorCisjZGVmaW5lIGF0b21pYzY0X3N1Yl9hbmRfdGVzdChhLCB2KQkoYXRvbWljNjRfc3ViX3JldHVybigoYSksICh2KSkgPT0gMCkKKyNkZWZpbmUgYXRvbWljNjRfZGVjX2FuZF90ZXN0KHYpCShhdG9taWM2NF9kZWNfcmV0dXJuKCh2KSkgPT0gMCkKKworLyoKKyAqIEF0b21pY2FsbHkgdGVzdCAqdiBhbmQgZGVjcmVtZW50IGlmIGl0IGlzIGdyZWF0ZXIgdGhhbiAwLgorICogVGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIG9sZCB2YWx1ZSBvZiAqdiBtaW51cyAxLgorICovCitzdGF0aWMgX19pbmxpbmVfXyBsb25nIGF0b21pYzY0X2RlY19pZl9wb3NpdGl2ZShhdG9taWM2NF90ICp2KQoreworCWxvbmcgdDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCUVJRUlPX09OX1NNUAorIjE6CWxkYXJ4CSUwLDAsJTEJCSMgYXRvbWljNjRfZGVjX2lmX3Bvc2l0aXZlXG5cCisJYWRkaWMuCSUwLCUwLC0xXG5cCisJYmx0LQkyZlxuXAorCXN0ZGN4LgklMCwwLCUxXG5cCisJYm5lLQkxYiIKKwlJU1lOQ19PTl9TTVAKKwkiXG5cCisyOiIJOiAiPSZyIiAodCkKKwk6ICJyIiAoJnYtPmNvdW50ZXIpCisJOiAiY2MiLCAibWVtb3J5Iik7CisKKwlyZXR1cm4gdDsKK30KKworI2VuZGlmIC8qIF9fcG93ZXJwYzY0X18gKi8KKwogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfQVNNX1BPV0VSUENfQVRPTUlDX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2F1eHZlYy5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9hdXh2ZWMuaAppbmRleCA3OWQ4YzQ3Li4xOWEwOTliIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2F1eHZlYy5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvYXV4dmVjLmgKQEAgLTE0LDggKzE0LDYgQEAKIC8qIFRoZSB2RFNPIGxvY2F0aW9uLiBXZSBoYXZlIHRvIHVzZSB0aGUgc2FtZSB2YWx1ZSBhcyB4ODYgZm9yIGdsaWJjJ3MKICAqIHNha2UgOi0pCiAgKi8KLSNpZmRlZiBfX3Bvd2VycGM2NF9fCiAjZGVmaW5lIEFUX1NZU0lORk9fRUhEUgkJMzMKLSNlbmRpZgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvYml0b3BzLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2JpdG9wcy5oCmluZGV4IGRjMjVjNTMuLjU3MjcyMjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvYml0b3BzLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9iaXRvcHMuaApAQCAtNDAsNiArNDAsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSA8YXNtL2FzbS1jb21wYXQuaD4KICNpbmNsdWRlIDxhc20vc3luY2guaD4KIAogLyoKQEAgLTUyLDE2ICs1Myw2IEBACiAjZGVmaW5lIEJJVE9QX1dPUkQobnIpCQkoKG5yKSAvIEJJVFNfUEVSX0xPTkcpCiAjZGVmaW5lIEJJVE9QX0xFX1NXSVpaTEUJKChCSVRTX1BFUl9MT05HLTEpICYgfjB4NykKIAotI2lmZGVmIENPTkZJR19QUEM2NAotI2RlZmluZSBMQVJYTAkJImxkYXJ4IgotI2RlZmluZSBTVENYTAkJInN0ZGN4LiIKLSNkZWZpbmUgQ05UTFpMCQkiY250bHpkIgotI2Vsc2UKLSNkZWZpbmUgTEFSWEwJCSJsd2FyeCIKLSNkZWZpbmUgU1RDWEwJCSJzdHdjeC4iCi0jZGVmaW5lIENOVExaTAkJImNudGx6dyIKLSNlbmRpZgotCiBzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHNldF9iaXQoaW50IG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKQogewogCXVuc2lnbmVkIGxvbmcgb2xkOwpAQCAtNjksMTAgKzYwLDEwIEBACiAJdW5zaWduZWQgbG9uZyAqcCA9ICgodW5zaWduZWQgbG9uZyAqKWFkZHIpICsgQklUT1BfV09SRChucik7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLSIxOiIJTEFSWEwgIgklMCwwLCUzCSMgc2V0X2JpdFxuIgorIjE6IglQUENfTExBUlggIiUwLDAsJTMJIyBzZXRfYml0XG4iCiAJIm9yCSUwLCUwLCUyXG4iCiAJUFBDNDA1X0VSUjc3KDAsJTMpCi0JU1RDWEwgIgklMCwwLCUzXG4iCisJUFBDX1NUTENYICIlMCwwLCUzXG4iCiAJImJuZS0JMWIiCiAJOiAiPSZyIihvbGQpLCAiPW0iKCpwKQogCTogInIiKG1hc2spLCAiciIocCksICJtIigqcCkKQEAgLTg2LDEwICs3NywxMCBAQAogCXVuc2lnbmVkIGxvbmcgKnAgPSAoKHVuc2lnbmVkIGxvbmcgKilhZGRyKSArIEJJVE9QX1dPUkQobnIpOwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0iMToiCUxBUlhMICIJJTAsMCwlMwkjIHNldF9iaXRcbiIKKyIxOiIJUFBDX0xMQVJYICIlMCwwLCUzCSMgY2xlYXJfYml0XG4iCiAJImFuZGMJJTAsJTAsJTJcbiIKIAlQUEM0MDVfRVJSNzcoMCwlMykKLQlTVENYTCAiCSUwLDAsJTNcbiIKKwlQUENfU1RMQ1ggIiUwLDAsJTNcbiIKIAkiYm5lLQkxYiIKIAk6ICI9JnIiKG9sZCksICI9bSIoKnApCiAJOiAiciIobWFzayksICJyIihwKSwgIm0iKCpwKQpAQCAtMTAzLDEwICs5NCwxMCBAQAogCXVuc2lnbmVkIGxvbmcgKnAgPSAoKHVuc2lnbmVkIGxvbmcgKilhZGRyKSArIEJJVE9QX1dPUkQobnIpOwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0iMToiCUxBUlhMICIJJTAsMCwlMwkjIHNldF9iaXRcbiIKKyIxOiIJUFBDX0xMQVJYICIlMCwwLCUzCSMgY2hhbmdlX2JpdFxuIgogCSJ4b3IJJTAsJTAsJTJcbiIKIAlQUEM0MDVfRVJSNzcoMCwlMykKLQlTVENYTCAiCSUwLDAsJTNcbiIKKwlQUENfU1RMQ1ggIiUwLDAsJTNcbiIKIAkiYm5lLQkxYiIKIAk6ICI9JnIiKG9sZCksICI9bSIoKnApCiAJOiAiciIobWFzayksICJyIihwKSwgIm0iKCpwKQpAQCAtMTIyLDEwICsxMTMsMTAgQEAKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKAogCUVJRUlPX09OX1NNUAotIjE6IglMQVJYTCAiCSUwLDAsJTMJCSMgdGVzdF9hbmRfc2V0X2JpdFxuIgorIjE6IglQUENfTExBUlggIiUwLDAsJTMJCSMgdGVzdF9hbmRfc2V0X2JpdFxuIgogCSJvcgklMSwlMCwlMiBcbiIKIAlQUEM0MDVfRVJSNzcoMCwlMykKLQlTVENYTCAiCSUxLDAsJTMgXG4iCisJUFBDX1NUTENYICIlMSwwLCUzIFxuIgogCSJibmUtCTFiIgogCUlTWU5DX09OX1NNUAogCTogIj0mciIgKG9sZCksICI9JnIiICh0KQpAQCAtMTQ0LDEwICsxMzUsMTAgQEAKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKAogCUVJRUlPX09OX1NNUAotIjE6IglMQVJYTCAiCSUwLDAsJTMJCSMgdGVzdF9hbmRfY2xlYXJfYml0XG4iCisiMToiCVBQQ19MTEFSWCAiJTAsMCwlMwkJIyB0ZXN0X2FuZF9jbGVhcl9iaXRcbiIKIAkiYW5kYwklMSwlMCwlMiBcbiIKIAlQUEM0MDVfRVJSNzcoMCwlMykKLQlTVENYTCAiCSUxLDAsJTMgXG4iCisJUFBDX1NUTENYICIlMSwwLCUzIFxuIgogCSJibmUtCTFiIgogCUlTWU5DX09OX1NNUAogCTogIj0mciIgKG9sZCksICI9JnIiICh0KQpAQCAtMTY2LDEwICsxNTcsMTAgQEAKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKAogCUVJRUlPX09OX1NNUAotIjE6IglMQVJYTCAiCSUwLDAsJTMJCSMgdGVzdF9hbmRfY2hhbmdlX2JpdFxuIgorIjE6IglQUENfTExBUlggIiUwLDAsJTMJCSMgdGVzdF9hbmRfY2hhbmdlX2JpdFxuIgogCSJ4b3IJJTEsJTAsJTIgXG4iCiAJUFBDNDA1X0VSUjc3KDAsJTMpCi0JU1RDWEwgIgklMSwwLCUzIFxuIgorCVBQQ19TVExDWCAiJTEsMCwlMyBcbiIKIAkiYm5lLQkxYiIKIAlJU1lOQ19PTl9TTVAKIAk6ICI9JnIiIChvbGQpLCAiPSZyIiAodCkKQEAgLTE4NCw5ICsxNzUsOSBAQAogICAgICAgICB1bnNpZ25lZCBsb25nIG9sZDsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKAotIjE6IglMQVJYTCAiCSUwLDAsJTMgICAgICAgICAjIHNldF9iaXRcbiIKKyIxOiIJUFBDX0xMQVJYICIlMCwwLCUzICAgICAgICAgIyBzZXRfYml0c1xuIgogCSJvcgklMCwlMCwlMlxuIgotCVNUQ1hMICIJJTAsMCwlM1xuIgorCVBQQ19TVExDWCAiJTAsMCwlM1xuIgogCSJibmUtCTFiIgogCTogIj0mciIgKG9sZCksICI9bSIgKCphZGRyKQogCTogInIiIChtYXNrKSwgInIiIChhZGRyKSwgIm0iICgqYWRkcikKQEAgLTI2OCw3ICsyNTksNyBAQAogewogCWludCBsejsKIAotCWFzbSAoQ05UTFpMICIgJTAsJTEiIDogIj1yIiAobHopIDogInIiICh4KSk7CisJYXNtIChQUENfQ05UTFpMICIlMCwlMSIgOiAiPXIiIChseikgOiAiciIgKHgpKTsKIAlyZXR1cm4gQklUU19QRVJfTE9ORyAtIDEgLSBsejsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9idWcuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvYnVnLmgKaW5kZXggZDYyNWVlNS4uYjAwMWVjYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9idWcuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2J1Zy5oCkBAIC0xLDYgKzEsNyBAQAogI2lmbmRlZiBfQVNNX1BPV0VSUENfQlVHX0gKICNkZWZpbmUgX0FTTV9QT1dFUlBDX0JVR19ICiAKKyNpbmNsdWRlIDxhc20vYXNtLWNvbXBhdC5oPgogLyoKICAqIERlZmluZSBhbiBpbGxlZ2FsIGluc3RyIHRvIHRyYXAgb24gdGhlIGJ1Zy4KICAqIFdlIGRvbid0IHVzZSAwIGJlY2F1c2UgdGhhdCBtYXJrcyB0aGUgZW5kIG9mIGEgZnVuY3Rpb24KQEAgLTExLDE0ICsxMiw2IEBACiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKLSNpZmRlZiBfX3Bvd2VycGM2NF9fCi0jZGVmaW5lIEJVR19UQUJMRV9FTlRSWQkJIi5sbG9uZyIKLSNkZWZpbmUgQlVHX1RSQVBfT1AJCSJ0ZG5laSIKLSNlbHNlIAotI2RlZmluZSBCVUdfVEFCTEVfRU5UUlkJCSIubG9uZyIKLSNkZWZpbmUgQlVHX1RSQVBfT1AJCSJ0d25laSIKLSNlbmRpZiAvKiBfX3Bvd2VycGM2NF9fICovCi0KIHN0cnVjdCBidWdfZW50cnkgewogCXVuc2lnbmVkIGxvbmcJYnVnX2FkZHI7CiAJbG9uZwkJbGluZTsKQEAgLTQwLDE2ICszMywxNiBAQAogCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJCSBcCiAJCSIxOgl0d2kgMzEsMCwwXG4iCQkJCQkgXAogCQkiLnNlY3Rpb24gX19idWdfdGFibGUsXCJhXCJcbiIJCQkJIFwKLQkJIlx0IkJVR19UQUJMRV9FTlRSWSIJMWIsJTAsJTEsJTJcbiIJCQkgXAorCQkiXHQiUFBDX0xPTkciCTFiLCUwLCUxLCUyXG4iCQkJIFwKIAkJIi5wcmV2aW91cyIJCQkJCQkgXAogCQk6IDogImkiIChfX0xJTkVfXyksICJpIiAoX19GSUxFX18pLCAiaSIgKF9fRlVOQ1RJT05fXykpOyBcCiB9IHdoaWxlICgwKQogCiAjZGVmaW5lIEJVR19PTih4KSBkbyB7CQkJCQkJXAogCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJXAotCQkiMToJIkJVR19UUkFQX09QIgklMCwwXG4iCQkJXAorCQkiMToJIlBQQ19UTE5FSSIJJTAsMFxuIgkJCVwKIAkJIi5zZWN0aW9uIF9fYnVnX3RhYmxlLFwiYVwiXG4iCQkJXAotCQkiXHQiQlVHX1RBQkxFX0VOVFJZIgkxYiwlMSwlMiwlM1xuIgkJXAorCQkiXHQiUFBDX0xPTkciCTFiLCUxLCUyLCUzXG4iCQlcCiAJCSIucHJldmlvdXMiCQkJCQlcCiAJCTogOiAiciIgKChsb25nKSh4KSksICJpIiAoX19MSU5FX18pLAkJXAogCQkgICAgImkiIChfX0ZJTEVfXyksICJpIiAoX19GVU5DVElPTl9fKSk7CVwKQEAgLTU3LDkgKzUwLDkgQEAKIAogI2RlZmluZSBXQVJOX09OKHgpIGRvIHsJCQkJCQlcCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQlcCi0JCSIxOgkiQlVHX1RSQVBfT1AiCSUwLDBcbiIJCQlcCisJCSIxOgkiUFBDX1RMTkVJIgklMCwwXG4iCQkJXAogCQkiLnNlY3Rpb24gX19idWdfdGFibGUsXCJhXCJcbiIJCQlcCi0JCSJcdCJCVUdfVEFCTEVfRU5UUlkiCTFiLCUxLCUyLCUzXG4iCQlcCisJCSJcdCJQUENfTE9ORyIJMWIsJTEsJTIsJTNcbiIJCVwKIAkJIi5wcmV2aW91cyIJCQkJCVwKIAkJOiA6ICJyIiAoKGxvbmcpKHgpKSwJCQkJXAogCQkgICAgImkiIChfX0xJTkVfXyArIEJVR19XQVJOSU5HX1RSQVApLAkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9jYWNoZS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9jYWNoZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2Y2U1MDIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2NhY2hlLmgKQEAgLTAsMCArMSw0MCBAQAorI2lmbmRlZiBfQVNNX1BPV0VSUENfQ0FDSEVfSAorI2RlZmluZSBfQVNNX1BPV0VSUENfQ0FDSEVfSAorCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKy8qIGJ5dGVzIHBlciBMMSBjYWNoZSBsaW5lICovCisjaWYgZGVmaW5lZChDT05GSUdfOHh4KSB8fCBkZWZpbmVkKENPTkZJR180MDNHQ1gpCisjZGVmaW5lIEwxX0NBQ0hFX1NISUZUCQk0CisjZGVmaW5lIE1BWF9DT1BZX1BSRUZFVENICTEKKyNlbGlmIGRlZmluZWQoQ09ORklHX1BQQzMyKQorI2RlZmluZSBMMV9DQUNIRV9TSElGVAkJNQorI2RlZmluZSBNQVhfQ09QWV9QUkVGRVRDSAk0CisjZWxzZSAvKiBDT05GSUdfUFBDNjQgKi8KKyNkZWZpbmUgTDFfQ0FDSEVfU0hJRlQJCTcKKyNlbmRpZgorCisjZGVmaW5lCUwxX0NBQ0hFX0JZVEVTCQkoMSA8PCBMMV9DQUNIRV9TSElGVCkKKworI2RlZmluZQlTTVBfQ0FDSEVfQllURVMJCUwxX0NBQ0hFX0JZVEVTCisjZGVmaW5lIEwxX0NBQ0hFX1NISUZUX01BWAk3IC8qIGxhcmdlc3QgTDEgd2hpY2ggdGhpcyBhcmNoIHN1cHBvcnRzICovCisKKyNpZiBkZWZpbmVkKF9fcG93ZXJwYzY0X18pICYmICFkZWZpbmVkKF9fQVNTRU1CTFlfXykKK3N0cnVjdCBwcGM2NF9jYWNoZXMgeworCXUzMglkc2l6ZTsJCQkvKiBMMSBkLWNhY2hlIHNpemUgKi8KKwl1MzIJZGxpbmVfc2l6ZTsJCS8qIEwxIGQtY2FjaGUgbGluZSBzaXplCSovCisJdTMyCWxvZ19kbGluZV9zaXplOworCXUzMglkbGluZXNfcGVyX3BhZ2U7CisJdTMyCWlzaXplOwkJCS8qIEwxIGktY2FjaGUgc2l6ZSAqLworCXUzMglpbGluZV9zaXplOwkJLyogTDEgaS1jYWNoZSBsaW5lIHNpemUJKi8KKwl1MzIJbG9nX2lsaW5lX3NpemU7CisJdTMyCWlsaW5lc19wZXJfcGFnZTsKK307CisKK2V4dGVybiBzdHJ1Y3QgcHBjNjRfY2FjaGVzIHBwYzY0X2NhY2hlczsKKyNlbmRpZiAvKiBfX3Bvd2VycGM2NF9fICYmICEgX19BU1NFTUJMWV9fICovCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisjZW5kaWYgLyogX0FTTV9QT1dFUlBDX0NBQ0hFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvY2FjaGVmbHVzaC5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9jYWNoZWZsdXNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE3NDBjOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvY2FjaGVmbHVzaC5oCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2lmbmRlZiBfQVNNX1BPV0VSUENfQ0FDSEVGTFVTSF9ICisjZGVmaW5lIF9BU01fUE9XRVJQQ19DQUNIRUZMVVNIX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8YXNtL2NwdXRhYmxlLmg+CisKKy8qCisgKiBObyBjYWNoZSBmbHVzaGluZyBpcyByZXF1aXJlZCB3aGVuIGFkZHJlc3MgbWFwcGluZ3MgYXJlIGNoYW5nZWQsCisgKiBiZWNhdXNlIHRoZSBjYWNoZXMgb24gUG93ZXJQQ3MgYXJlIHBoeXNpY2FsbHkgYWRkcmVzc2VkLgorICovCisjZGVmaW5lIGZsdXNoX2NhY2hlX2FsbCgpCQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9jYWNoZV9tbShtbSkJCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2NhY2hlX3JhbmdlKHZtYSwgc3RhcnQsIGVuZCkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9jYWNoZV9wYWdlKHZtYSwgdm1hZGRyLCBwZm4pCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfaWNhY2hlX3BhZ2Uodm1hLCBwYWdlKQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9jYWNoZV92bWFwKHN0YXJ0LCBlbmQpCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2NhY2hlX3Z1bm1hcChzdGFydCwgZW5kKQkJZG8geyB9IHdoaWxlICgwKQorCitleHRlcm4gdm9pZCBmbHVzaF9kY2FjaGVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSk7CisjZGVmaW5lIGZsdXNoX2RjYWNoZV9tbWFwX2xvY2sobWFwcGluZykJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfZGNhY2hlX21tYXBfdW5sb2NrKG1hcHBpbmcpCWRvIHsgfSB3aGlsZSAoMCkKKworZXh0ZXJuIHZvaWQgX19mbHVzaF9pY2FjaGVfcmFuZ2UodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfaWNhY2hlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc3RvcCkKK3sKKwlpZiAoIWNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX0NPSEVSRU5UX0lDQUNIRSkpCisJCV9fZmx1c2hfaWNhY2hlX3JhbmdlKHN0YXJ0LCBzdG9wKTsKK30KKworZXh0ZXJuIHZvaWQgZmx1c2hfaWNhY2hlX3VzZXJfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQkJICAgIHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkJICAgIGludCBsZW4pOworZXh0ZXJuIHZvaWQgX19mbHVzaF9kY2FjaGVfaWNhY2hlKHZvaWQgKnBhZ2VfdmEpOworZXh0ZXJuIHZvaWQgZmx1c2hfZGNhY2hlX2ljYWNoZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKTsKKyNpZiBkZWZpbmVkKENPTkZJR19QUEMzMikgJiYgIWRlZmluZWQoQ09ORklHX0JPT0tFKQorZXh0ZXJuIHZvaWQgX19mbHVzaF9kY2FjaGVfaWNhY2hlX3BoeXModW5zaWduZWQgbG9uZyBwaHlzYWRkcik7CisjZW5kaWYgLyogQ09ORklHX1BQQzMyICYmICFDT05GSUdfQk9PS0UgKi8KKworZXh0ZXJuIHZvaWQgZmx1c2hfZGNhY2hlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc3RvcCk7CisjaWZkZWYgQ09ORklHX1BQQzMyCitleHRlcm4gdm9pZCBjbGVhbl9kY2FjaGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBzdG9wKTsKK2V4dGVybiB2b2lkIGludmFsaWRhdGVfZGNhY2hlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc3RvcCk7CisjZW5kaWYgLyogQ09ORklHX1BQQzMyICovCisjaWZkZWYgQ09ORklHX1BQQzY0CitleHRlcm4gdm9pZCBmbHVzaF9pbnZhbF9kY2FjaGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBzdG9wKTsKK2V4dGVybiB2b2lkIGZsdXNoX2RjYWNoZV9waHlzX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc3RvcCk7CisjZW5kaWYKKworI2RlZmluZSBjb3B5X3RvX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIHZhZGRyLCBkc3QsIHNyYywgbGVuKSBcCisJZG8geyBcCisJCW1lbWNweShkc3QsIHNyYywgbGVuKTsgXAorCQlmbHVzaF9pY2FjaGVfdXNlcl9yYW5nZSh2bWEsIHBhZ2UsIHZhZGRyLCBsZW4pOyBcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgY29weV9mcm9tX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIHZhZGRyLCBkc3QsIHNyYywgbGVuKSBcCisJbWVtY3B5KGRzdCwgc3JjLCBsZW4pCisKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19DQUNIRUZMVVNIX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L2NvbXBhdC5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9jb21wYXQuaApzaW1pbGFyaXR5IGluZGV4IDk3JQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wcGM2NC9jb21wYXQuaApyZW5hbWUgdG8gaW5jbHVkZS9hc20tcG93ZXJwYy9jb21wYXQuaAppbmRleCA2ZWM2MmNkLi40ZGI0MzYwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGM2NC9jb21wYXQuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2NvbXBhdC5oCkBAIC0xLDUgKzEsNSBAQAotI2lmbmRlZiBfQVNNX1BQQzY0X0NPTVBBVF9ICi0jZGVmaW5lIF9BU01fUFBDNjRfQ09NUEFUX0gKKyNpZm5kZWYgX0FTTV9QT1dFUlBDX0NPTVBBVF9ICisjZGVmaW5lIF9BU01fUE9XRVJQQ19DT01QQVRfSAogLyoKICAqIEFyY2hpdGVjdHVyZSBzcGVjaWZpYyBjb21wYXRpYmlsaXR5IHR5cGVzCiAgKi8KQEAgLTQ5LDcgKzQ5LDcgQEAKIAljb21wYXRfZGV2X3QJc3RfZGV2OwogCWNvbXBhdF9pbm9fdAlzdF9pbm87CiAJY29tcGF0X21vZGVfdAlzdF9tb2RlOwotCWNvbXBhdF9ubGlua190CXN0X25saW5rOwkKKwljb21wYXRfbmxpbmtfdAlzdF9ubGluazsKIAlfX2NvbXBhdF91aWQzMl90CXN0X3VpZDsKIAlfX2NvbXBhdF9naWQzMl90CXN0X2dpZDsKIAljb21wYXRfZGV2X3QJc3RfcmRldjsKQEAgLTIwMiw0ICsyMDIsNCBAQAogCWNvbXBhdF91bG9uZ190IF9fdW51c2VkNjsKIH07CiAKLSNlbmRpZiAvKiBfQVNNX1BQQzY0X0NPTVBBVF9IICovCisjZW5kaWYgLyogX0FTTV9QT1dFUlBDX0NPTVBBVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2NwdXRhYmxlLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2NwdXRhYmxlLmgKaW5kZXggNzlhMDU1Ni4uMDRlMjcyNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9jcHV0YWJsZS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvY3B1dGFibGUuaApAQCAtMiw3ICsyLDcgQEAKICNkZWZpbmUgX19BU01fUE9XRVJQQ19DUFVUQUJMRV9ICiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLSNpbmNsdWRlIDxhc20vcHBjX2FzbS5oPiAvKiBmb3IgQVNNX0NPTlNUICovCisjaW5jbHVkZSA8YXNtL2FzbS1jb21wYXQuaD4KIAogI2RlZmluZSBQUENfRkVBVFVSRV8zMgkJCTB4ODAwMDAwMDAKICNkZWZpbmUgUFBDX0ZFQVRVUkVfNjQJCQkweDQwMDAwMDAwCkBAIC0xNiw2ICsxNiwxMCBAQAogI2RlZmluZSBQUENfRkVBVFVSRV9IQVNfRUZQX1NJTkdMRQkweDAwNDAwMDAwCiAjZGVmaW5lIFBQQ19GRUFUVVJFX0hBU19FRlBfRE9VQkxFCTB4MDAyMDAwMDAKICNkZWZpbmUgUFBDX0ZFQVRVUkVfTk9fVEIJCTB4MDAxMDAwMDAKKyNkZWZpbmUgUFBDX0ZFQVRVUkVfUE9XRVI0CQkweDAwMDgwMDAwCisjZGVmaW5lIFBQQ19GRUFUVVJFX1BPV0VSNQkJMHgwMDA0MDAwMAorI2RlZmluZSBQUENfRkVBVFVSRV9QT1dFUjVfUExVUwkJMHgwMDAyMDAwMAorI2RlZmluZSBQUENfRkVBVFVSRV9DRUxMCQkweDAwMDEwMDAwCiAKICNpZmRlZiBfX0tFUk5FTF9fCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9jdXJyZW50LmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2N1cnJlbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmNkNGE5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9jdXJyZW50LmgKQEAgLTAsMCArMSwyNyBAQAorI2lmbmRlZiBfQVNNX1BPV0VSUENfQ1VSUkVOVF9ICisjZGVmaW5lIF9BU01fUE9XRVJQQ19DVVJSRU5UX0gKKworLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworc3RydWN0IHRhc2tfc3RydWN0OworCisjaWZkZWYgX19wb3dlcnBjNjRfXworI2luY2x1ZGUgPGFzbS9wYWNhLmg+CisKKyNkZWZpbmUgY3VycmVudAkJKGdldF9wYWNhKCktPl9fY3VycmVudCkKKworI2Vsc2UKKworLyoKKyAqIFdlIGtlZXAgYGN1cnJlbnQnIGluIHIyIGZvciBzcGVlZC4KKyAqLworcmVnaXN0ZXIgc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyZW50IGFzbSAoInIyIik7CisKKyNlbmRpZgorCisjZW5kaWYgLyogX0FTTV9QT1dFUlBDX0NVUlJFTlRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9lZWhfZXZlbnQuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvZWVoX2V2ZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE2OGEzMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvZWVoX2V2ZW50LmgKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqCWVlaF9ldmVudC5oCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA1IExpbmFzIFZlcHN0YXMgPGxpbmFzQGxpbmFzLm9yZz4KKyAqLworCisjaWZuZGVmIEFTTV9QUEM2NF9FRUhfRVZFTlRfSAorI2RlZmluZSBBU01fUFBDNjRfRUVIX0VWRU5UX0gKKworLyoqIEVFSCBldmVudCAtLSBzdHJ1Y3R1cmUgaG9sZGluZyBwY2kgY29udHJvbGxlciBkYXRhIHRoYXQgZGVzY3JpYmVzCisgKiAgYSBjaGFuZ2UgaW4gdGhlIGlzb2xhdGlvbiBzdGF0dXMgb2YgYSBQQ0kgc2xvdC4gIEEgcG9pbnRlcgorICogIHRvIHRoaXMgc3RydWN0IGlzIHBhc3NlZCBhcyB0aGUgZGF0YSBwb2ludGVyIGluIGEgbm90aWZ5IGNhbGxiYWNrLgorICovCitzdHJ1Y3QgZWVoX2V2ZW50IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICBsaXN0OworCXN0cnVjdCBkZXZpY2Vfbm9kZSAJKmRuOyAgIC8qIHN0cnVjdCBkZXZpY2Ugbm9kZSAqLworCXN0cnVjdCBwY2lfZGV2ICAgICAgICpkZXY7ICAvKiBhZmZlY3RlZCBkZXZpY2UgKi8KKwlpbnQgICAgICAgICAgICAgICAgICBzdGF0ZTsKKwlpbnQgdGltZV91bmF2YWlsOyAgICAvKiBtaWxsaXNlY29uZHMgdW50aWwgZGV2aWNlIG1pZ2h0IGJlIGF2YWlsYWJsZSAqLworfTsKKworLyoqCisgKiBlZWhfc2VuZF9mYWlsdXJlX2V2ZW50IC0gZ2VuZXJhdGUgYSBQQ0kgZXJyb3IgZXZlbnQKKyAqIEBkZXYgcGNpIGRldmljZQorICoKKyAqIFRoaXMgcm91dGluZSBidWlsZHMgYSBQQ0kgZXJyb3IgZXZlbnQgd2hpY2ggd2lsbCBiZSBkZWxpdmVyZWQKKyAqIHRvIGFsbCBsaXN0ZW5lcnMgb24gdGhlIHBlaF9ub3RpZmllcl9jaGFpbi4KKyAqCisgKiBUaGlzIHJvdXRpbmUgY2FuIGJlIGNhbGxlZCB3aXRoaW4gYW4gaW50ZXJydXB0IGNvbnRleHQ7CisgKiB0aGUgYWN0dWFsIGV2ZW50IHdpbGwgYmUgZGVsaXZlcmVkIGluIGEgbm9ybWFsIGNvbnRleHQKKyAqIChmcm9tIGEgd29ya3F1ZXVlKS4KKyAqLworaW50IGVlaF9zZW5kX2ZhaWx1cmVfZXZlbnQgKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHBjaV9kZXYgKmRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzZXRfc3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRpbWVfdW5hdmFpbCk7CisKKyNlbmRpZiAvKiBBU01fUFBDNjRfRUVIX0VWRU5UX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvZWxmLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2VsZi5oCmluZGV4IGZlYWMzNDUuLjNkY2Q2NWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvZWxmLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9lbGYuaApAQCAtMjY5LDE0ICsyNjksMTIgQEAKIGV4dGVybiBpbnQgaWNhY2hlX2JzaXplOwogZXh0ZXJuIGludCB1Y2FjaGVfYnNpemU7CiAKLSNpZmRlZiBfX3Bvd2VycGM2NF9fCisvKiB2RFNPIGhhcyBhcmNoX3NldHVwX2FkZGl0aW9uYWxfcGFnZXMgKi8KKyNkZWZpbmUgQVJDSF9IQVNfU0VUVVBfQURESVRJT05BTF9QQUdFUwogc3RydWN0IGxpbnV4X2JpbnBybTsKLSNkZWZpbmUgQVJDSF9IQVNfU0VUVVBfQURESVRJT05BTF9QQUdFUwkvKiB2RFNPIGhhcyBhcmNoX3NldHVwX2FkZGl0aW9uYWxfcGFnZXMgKi8KLWV4dGVybiBpbnQgYXJjaF9zZXR1cF9hZGRpdGlvbmFsX3BhZ2VzKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sIGludCBleGVjdXRhYmxlX3N0YWNrKTsKK2V4dGVybiBpbnQgYXJjaF9zZXR1cF9hZGRpdGlvbmFsX3BhZ2VzKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sCisJCQkJICAgICAgIGludCBleGVjdXRhYmxlX3N0YWNrKTsKICNkZWZpbmUgVkRTT19BVVhfRU5UKGEsYikgTkVXX0FVWF9FTlQoYSxiKTsKLSNlbHNlCi0jZGVmaW5lIFZEU09fQVVYX0VOVChhLGIpCi0jZW5kaWYgLyogX19wb3dlcnBjNjRfXyAqLwogCiAvKgogICogVGhlIHJlcXVpcmVtZW50cyBoZXJlIGFyZToKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvZmlybXdhcmUuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvZmlybXdhcmUuaAppbmRleCA4MDZjMTQyLi4xMmZhYmJjYjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvZmlybXdhcmUuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2Zpcm13YXJlLmgKQEAgLTQzLDYgKzQzLDcgQEAKICNkZWZpbmUgRldfRkVBVFVSRV9JU0VSSUVTCSgxVUw8PDIxKQogCiBlbnVtIHsKKyNpZmRlZiBDT05GSUdfUFBDNjQKIAlGV19GRUFUVVJFX1BTRVJJRVNfUE9TU0lCTEUgPSBGV19GRUFUVVJFX1BGVCB8IEZXX0ZFQVRVUkVfVENFIHwKIAkJRldfRkVBVFVSRV9TUFJHMCB8IEZXX0ZFQVRVUkVfREFCUiB8IEZXX0ZFQVRVUkVfQ09QWSB8CiAJCUZXX0ZFQVRVUkVfQVNSIHwgRldfRkVBVFVSRV9ERUJVRyB8IEZXX0ZFQVRVUkVfVEVSTSB8CkBAIC03MCw2ICs3MSwxMSBAQAogCQlGV19GRUFUVVJFX0lTRVJJRVNfQUxXQVlTICYKICNlbmRpZgogCQlGV19GRUFUVVJFX1BPU1NJQkxFLAorCisjZWxzZSAvKiBDT05GSUdfUFBDNjQgKi8KKwlGV19GRUFUVVJFX1BPU1NJQkxFID0gMCwKKwlGV19GRUFUVVJFX0FMV0FZUyA9IDAsCisjZW5kaWYKIH07CiAKIC8qIFRoaXMgaXMgdXNlZCB0byBpZGVudGlmeSBmaXJtd2FyZSBmZWF0dXJlcyB3aGljaCBhcmUgYXZhaWxhYmxlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2Z1dGV4LmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2Z1dGV4LmgKaW5kZXggMzdjOTRlNS4uZjAzMTlkNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9mdXRleC5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvZnV0ZXguaApAQCAtNywxMyArNywxNCBAQAogI2luY2x1ZGUgPGFzbS9lcnJuby5oPgogI2luY2x1ZGUgPGFzbS9zeW5jaC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8YXNtL3BwY19hc20uaD4KKyNpbmNsdWRlIDxhc20vYXNtLWNvbXBhdC5oPgogCiAjZGVmaW5lIF9fZnV0ZXhfYXRvbWljX29wKGluc24sIHJldCwgb2xkdmFsLCB1YWRkciwgb3BhcmcpIFwKICAgX19hc21fXyBfX3ZvbGF0aWxlICggXAogCVNZTkNfT05fU01QIFwKICIxOglsd2FyeAklMCwwLCUyXG4iIFwKIAlpbnNuIFwKKwlQUEM0MDVfRVJSNzcoMCwgJTIpIFwKICIyOglzdHdjeC4JJTEsMCwlMlxuIiBcCiAJImJuZS0JMWJcbiIgXAogCSJsaQklMSwwXG4iIFwKQEAgLTIzLDcgKzI0LDcgQEAKIAkiLnByZXZpb3VzXG4iIFwKIAkiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIiBcCiAJIi5hbGlnbiAzXG4iIFwKLQlEQVRBTCAiIDFiLDRiLDJiLDRiXG4iIFwKKwlQUENfTE9ORyAiMWIsNGIsMmIsNGJcbiIgXAogCSIucHJldmlvdXMiIFwKIAk6ICI9JnIiIChvbGR2YWwpLCAiPSZyIiAocmV0KSBcCiAJOiAiYiIgKHVhZGRyKSwgImkiICgtRUZBVUxUKSwgIjEiIChvcGFyZykgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvaHZjYWxsLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2h2Y2FsbC5oCnNpbWlsYXJpdHkgaW5kZXggOTclCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBwYzY0L2h2Y2FsbC5oCnJlbmFtZSB0byBpbmNsdWRlL2FzbS1wb3dlcnBjL2h2Y2FsbC5oCmluZGV4IGFiN2MzY2YuLmQzNmRhNjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYzY0L2h2Y2FsbC5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvaHZjYWxsLmgKQEAgLTEsNSArMSw1IEBACi0jaWZuZGVmIF9QUEM2NF9IVkNBTExfSAotI2RlZmluZSBfUFBDNjRfSFZDQUxMX0gKKyNpZm5kZWYgX0FTTV9QT1dFUlBDX0hWQ0FMTF9ICisjZGVmaW5lIF9BU01fUE9XRVJQQ19IVkNBTExfSAogCiAjZGVmaW5lIEhWU0MJCQkubG9uZyAweDQ0MDAwMDIyCiAKQEAgLTEzOCw3ICsxMzgsNyBAQAogICovCiBsb25nIHBscGFyX2hjYWxsX25vcmV0cyh1bnNpZ25lZCBsb25nIG9wY29kZSwgLi4uKTsKIAotLyogCisvKgogICogU3BlY2lhbCBoY2FsbCBpbnRlcmZhY2UgZm9yIGlibXZldGggc3VwcG9ydC4KICAqIFRha2VzIDggaW5wdXQgcGFybXMuIFJldHVybnMgYSByYyBhbmQgc3RvcmVzIHRoZQogICogUjQgcmV0dXJuIHZhbHVlIGluICpvdXQxLgpAQCAtMTUzLDExICsxNTMsMTEgQEAKIAkJCSAgIHVuc2lnbmVkIGxvbmcgYXJnNywKIAkJCSAgIHVuc2lnbmVkIGxvbmcgYXJnOCwKIAkJCSAgIHVuc2lnbmVkIGxvbmcgKm91dDEpOwotIAorCiAvKiBwbHBhcl9oY2FsbF80b3V0KCkKICAqCi0gKiBzYW1lIGFzIHBscGFyX2hjYWxsIGV4Y2VwdCB3aXRoIDQgb3V0cHV0IGFyZ3VtZW50cy4gIAotICogCisgKiBzYW1lIGFzIHBscGFyX2hjYWxsIGV4Y2VwdCB3aXRoIDQgb3V0cHV0IGFyZ3VtZW50cy4KKyAqCiAgKi8KIGxvbmcgcGxwYXJfaGNhbGxfNG91dCh1bnNpZ25lZCBsb25nIG9wY29kZSwKIAkJICAgICAgdW5zaWduZWQgbG9uZyBhcmcxLApAQCAtMTcwLDQgKzE3MCw0IEBACiAJCSAgICAgIHVuc2lnbmVkIGxvbmcgKm91dDQpOwogCiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCi0jZW5kaWYgLyogX1BQQzY0X0hWQ0FMTF9IICovCisjZW5kaWYgLyogX0FTTV9QT1dFUlBDX0hWQ0FMTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2h3X2lycS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9od19pcnEuaAppbmRleCBjMzdiMzFiLi4yNmI4OWQ4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2h3X2lycS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvaHdfaXJxLmgKQEAgLTEyLDcgKzEyLDYgQEAKICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAKIGV4dGVybiB2b2lkIHRpbWVyX2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqKTsKLWV4dGVybiB2b2lkIHBwY19pcnFfZGlzcGF0Y2hfaGFuZGxlcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGlycSk7CiAKICNpZmRlZiBDT05GSUdfUFBDX0lTRVJJRVMKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9pcnEuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvaXJxLmgKaW5kZXggYjM5MzVlYS4uOGViN2U4NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9pcnEuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2lycS5oCkBAIC0zODksNiArMzg5LDcgQEAKICNkZWZpbmUJU0lVX0lOVF9USU1FUjQJCSgodWludCkweDBmICsgQ1BNX0lSUV9PRkZTRVQpCiAjZGVmaW5lCVNJVV9JTlRfVE1DTlQJCSgodWludCkweDEwICsgQ1BNX0lSUV9PRkZTRVQpCiAjZGVmaW5lCVNJVV9JTlRfUElUCQkoKHVpbnQpMHgxMSArIENQTV9JUlFfT0ZGU0VUKQorI2RlZmluZQlTSVVfSU5UX1BDSQkJKCh1aW50KTB4MTIgKyBDUE1fSVJRX09GRlNFVCkKICNkZWZpbmUJU0lVX0lOVF9JUlExCQkoKHVpbnQpMHgxMyArIENQTV9JUlFfT0ZGU0VUKQogI2RlZmluZQlTSVVfSU5UX0lSUTIJCSgodWludCkweDE0ICsgQ1BNX0lSUV9PRkZTRVQpCiAjZGVmaW5lCVNJVV9JTlRfSVJRMwkJKCh1aW50KTB4MTUgKyBDUE1fSVJRX09GRlNFVCkKQEAgLTQyOSw3ICs0MzAsNiBAQAogI2RlZmluZSBOUl9NQVNLX1dPUkRTCSgoTlJfSVJRUyArIDMxKSAvIDMyKQogLyogcGVkYW50aWM6IHRoZXNlIGFyZSBsb25nIGJlY2F1c2UgdGhleSBhcmUgdXNlZCB3aXRoIHNldF9iaXQgLS1SUiAqLwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcHBjX2NhY2hlZF9pcnFfbWFza1tOUl9NQVNLX1dPUkRTXTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIHBwY19sb3N0X2ludGVycnVwdHNbTlJfTUFTS19XT1JEU107CiBleHRlcm4gYXRvbWljX3QgcHBjX25fbG9zdF9pbnRlcnJ1cHRzOwogCiAjZGVmaW5lIHZpcnRfaXJxX2NyZWF0ZV9tYXBwaW5nKHgpCSh4KQpAQCAtNDg4LDggKzQ4OCw4IEBACiAKIGV4dGVybiB2b2lkIGlycV9jdHhfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIGNhbGxfZG9fc29mdGlycShzdHJ1Y3QgdGhyZWFkX2luZm8gKnRwKTsKLWV4dGVybiBpbnQgY2FsbF9oYW5kbGVfSVJRX2V2ZW50KGludCBpcnEsIHN0cnVjdCBwdF9yZWdzICpyZWdzLAotCQkJc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uLCBzdHJ1Y3QgdGhyZWFkX2luZm8gKnRwKTsKK2V4dGVybiBpbnQgY2FsbF9fX2RvX0lSUShpbnQgaXJxLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKKwkJc3RydWN0IHRocmVhZF9pbmZvICp0cCk7CiAKICNkZWZpbmUgX19BUkNIX0hBU19ET19TT0ZUSVJRCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L2xwcGFjYS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9scHBhY2EuaApzaW1pbGFyaXR5IGluZGV4IDk3JQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wcGM2NC9scHBhY2EuaApyZW5hbWUgdG8gaW5jbHVkZS9hc20tcG93ZXJwYy9scHBhY2EuaAppbmRleCA5ZTJhNmMwLi5jMWJlZGFiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGM2NC9scHBhY2EuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2xwcGFjYS5oCkBAIC0xNiw4ICsxNiw4IEBACiAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCiAgKi8KLSNpZm5kZWYgX0FTTV9MUFBBQ0FfSAotI2RlZmluZSBfQVNNX0xQUEFDQV9ICisjaWZuZGVmIF9BU01fUE9XRVJQQ19MUFBBQ0FfSAorI2RlZmluZSBfQVNNX1BPV0VSUENfTFBQQUNBX0gKIAogLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogLy8KQEAgLTI4LDggKzI4LDcgQEAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogCi1zdHJ1Y3QgbHBwYWNhCi17CitzdHJ1Y3QgbHBwYWNhIHsKIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIC8vIENBQ0hFX0xJTkVfMSAweDAwMDAgLSAweDAwN0YgQ29udGFpbnMgcmVhZC1vbmx5IGRhdGEKIC8vIE5PVEU6IFRoZSB4RHluWHl6IGZpZWxkcyBhcmUgZmllbGRzIHRoYXQgd2lsbCBiZSBkeW5hbWljYWxseSBjaGFuZ2VkIGJ5CkBAIC0xMjksNCArMTI4LDQgQEAKIAl1OAlwbWNfc2F2ZV9hcmVhWzI1Nl07CS8vIFBNQyBpbnRlcnJ1cHQgQXJlYSAgICAgICAgICAgeDAwLXhGRgogfTsKIAotI2VuZGlmIC8qIF9BU01fTFBQQUNBX0ggKi8KKyNlbmRpZiAvKiBfQVNNX1BPV0VSUENfTFBQQUNBX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L3BhY2EuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcGFjYS5oCnNpbWlsYXJpdHkgaW5kZXggOTUlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBwYzY0L3BhY2EuaApyZW5hbWUgdG8gaW5jbHVkZS9hc20tcG93ZXJwYy9wYWNhLmgKaW5kZXggYmNjYWNkNi4uOTJjNzY1YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjNjQvcGFjYS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcGFjYS5oCkBAIC0xLDExICsxLDggQEAKLSNpZm5kZWYgX1BQQzY0X1BBQ0FfSAotI2RlZmluZSBfUFBDNjRfUEFDQV9ICi0KIC8qCi0gKiBpbmNsdWRlL2FzbS1wcGM2NC9wYWNhLmgKKyAqIGluY2x1ZGUvYXNtLXBvd2VycGMvcGFjYS5oCiAgKgotICogVGhpcyBjb250cm9sIGJsb2NrIGRlZmluZXMgdGhlIFBBQ0Egd2hpY2ggZGVmaW5lcyB0aGUgcHJvY2Vzc29yIAotICogc3BlY2lmaWMgZGF0YSBmb3IgZWFjaCBsb2dpY2FsIHByb2Nlc3NvciBvbiB0aGUgc3lzdGVtLiAgCisgKiBUaGlzIGNvbnRyb2wgYmxvY2sgZGVmaW5lcyB0aGUgUEFDQSB3aGljaCBkZWZpbmVzIHRoZSBwcm9jZXNzb3IKKyAqIHNwZWNpZmljIGRhdGEgZm9yIGVhY2ggbG9naWNhbCBwcm9jZXNzb3Igb24gdGhlIHN5c3RlbS4KICAqIFRoZXJlIGFyZSBzb21lIHBvaW50ZXJzIGRlZmluZWQgdGhhdCBhcmUgdXRpbGl6ZWQgYnkgUExJQy4KICAqCiAgKiBDIDIwMDEgUFBDIDY0IFRlYW0sIElCTSBDb3JwCkBAIC0xNCw3ICsxMSw5IEBACiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCiAgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovICAgIAorICovCisjaWZuZGVmIF9BU01fUE9XRVJQQ19QQUNBX0gKKyNkZWZpbmUgX0FTTV9QT1dFUlBDX1BBQ0FfSAogCiAjaW5jbHVkZQk8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZQk8YXNtL3R5cGVzLmg+CkBAIC0xMTgsNCArMTE3LDQgQEAKIAogZXh0ZXJuIHN0cnVjdCBwYWNhX3N0cnVjdCBwYWNhW107CiAKLSNlbmRpZiAvKiBfUFBDNjRfUEFDQV9IICovCisjZW5kaWYgLyogX0FTTV9QT1dFUlBDX1BBQ0FfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9wbWMuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcG1jLmgKaW5kZXggMmYzYzNmYy4uNWY0MWYzYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9wbWMuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3BtYy5oCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogCiB0eXBlZGVmIHZvaWQgKCpwZXJmX2lycV90KShzdHJ1Y3QgcHRfcmVncyAqKTsKK2V4dGVybiBwZXJmX2lycV90IHBlcmZfaXJxOwogCiBpbnQgcmVzZXJ2ZV9wbWNfaGFyZHdhcmUocGVyZl9pcnFfdCBuZXdfcGVyZl9pcnEpOwogdm9pZCByZWxlYXNlX3BtY19oYXJkd2FyZSh2b2lkKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcHBjLXBjaS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wcGMtcGNpLmgKaW5kZXggMTNhYWNmZi4uOTg5NmZhZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9wcGMtcGNpLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wcGMtcGNpLmgKQEAgLTI2LDYgKzI2LDEwIEBACiAKIGV4dGVybiBzdHJ1Y3QgcGNpX2RldiAqcHBjNjRfaXNhYnJpZGdlX2RldjsJLyogbWF5IGJlIE5VTEwgaWYgbm8gSVNBIGJ1cyAqLwogCisvKiogQnVzIFVuaXQgSUQgbWFjcm9zOyBnZXQgbG93IGFuZCBoaSAzMi1iaXRzIG9mIHRoZSA2NC1iaXQgQlVJRCAqLworI2RlZmluZSBCVUlEX0hJKGJ1aWQpICgoYnVpZCkgPj4gMzIpCisjZGVmaW5lIEJVSURfTE8oYnVpZCkgKChidWlkKSAmIDB4ZmZmZmZmZmYpCisKIC8qIFBDSSBkZXZpY2Vfbm9kZSBvcGVyYXRpb25zICovCiBzdHJ1Y3QgZGV2aWNlX25vZGU7CiB0eXBlZGVmIHZvaWQgKigqdHJhdmVyc2VfZnVuYykoc3RydWN0IGRldmljZV9ub2RlICptZSwgdm9pZCAqZGF0YSk7CkBAIC0zNiwxMCArNDAsNiBAQAogdm9pZCBwY2lfZGV2c19waGJfaW5pdF9keW5hbWljKHN0cnVjdCBwY2lfY29udHJvbGxlciAqcGhiKTsKIHZvaWQgX19kZXZpbml0IHNjYW5fcGhiKHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSk7CiAKLS8qIFBDSSBhZGRyZXNzIGNhY2hlIG1hbmFnZW1lbnQgcm91dGluZXMgKi8KLXZvaWQgcGNpX2FkZHJfY2FjaGVfaW5zZXJ0X2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKLXZvaWQgcGNpX2FkZHJfY2FjaGVfcmVtb3ZlX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKLQogLyogRnJvbSBydGFzX3BjaS5oICovCiB2b2lkIGluaXRfcGNpX2NvbmZpZ190b2tlbnMgKHZvaWQpOwogdW5zaWduZWQgbG9uZyBnZXRfcGhiX2J1aWQgKHN0cnVjdCBkZXZpY2Vfbm9kZSAqKTsKQEAgLTUyLDQgKzUyLDQ4IEBACiBleHRlcm4gdW5zaWduZWQgbG9uZyBwY2lfYXNzaWduX2FsbF9idXNlczsKIGV4dGVybiBpbnQgcGNpX3JlYWRfaXJxX2xpbmUoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYpOwogCisvKiAtLS0tIEVFSCBpbnRlcm5hbC11c2Utb25seSByZWxhdGVkIHJvdXRpbmVzIC0tLS0gKi8KKyNpZmRlZiBDT05GSUdfRUVICisvKioKKyAqIHJ0YXNfc2V0X3Nsb3RfcmVzZXQgLS0gdW5mcmVlemUgYSBmcm96ZW4gc2xvdAorICoKKyAqIENsZWFyIHRoZSBFRUgtZnJvemVuIGNvbmRpdGlvbiBvbiBhIHNsb3QuICBUaGlzIHJvdXRpbmUKKyAqIGRvZXMgdGhpcyBieSBhc3NlcnRpbmcgdGhlIFBDSSAjUlNUIGxpbmUgZm9yIDEvOHRoIG9mCisgKiBhIHNlY29uZDsgdGhpcyByb3V0aW5lIHdpbGwgc2xlZXAgd2hpbGUgdGhlIGFkYXB0ZXIgaXMKKyAqIGJlaW5nIHJlc2V0LgorICovCit2b2lkIHJ0YXNfc2V0X3Nsb3RfcmVzZXQgKHN0cnVjdCBwY2lfZG4gKik7CisKKy8qKiAKKyAqIGVlaF9yZXN0b3JlX2JhcnMgLSBSZXN0b3JlIGRldmljZSBjb25maWd1cmF0aW9uIGluZm8uCisgKgorICogQSByZXNldCBvZiBhIFBDSSBkZXZpY2Ugd2lsbCBjbGVhciBvdXQgaXRzIGNvbmZpZyBzcGFjZS4KKyAqIFRoaXMgcm91dGluZXMgd2lsbCByZXN0b3JlIHRoZSBjb25maWcgc3BhY2UgZm9yIHRoaXMKKyAqIGRldmljZSwgYW5kIGlzIGNoaWxkcmVuLCB0byB2YWx1ZXMgcHJldmlvdXNseSBvYnRhaW5lZAorICogZnJvbSB0aGUgZmlybXdhcmUuCisgKi8KK3ZvaWQgZWVoX3Jlc3RvcmVfYmFycyhzdHJ1Y3QgcGNpX2RuICopOworCisvKioKKyAqIHJ0YXNfY29uZmlndXJlX2JyaWRnZSAtLSBmaXJtd2FyZSBpbml0aWFsaXphdGlvbiBvZiBwY2kgYnJpZGdlCisgKgorICogQXNrIHRoZSBmaXJtd2FyZSB0byBjb25maWd1cmUgYWxsIFBDSSBicmlkZ2VzIGRldmljZXMKKyAqIGxvY2F0ZWQgYmVoaW5kIHRoZSBpbmRpY2F0ZWQgbm9kZS4gUmVxdWlyZWQgYWZ0ZXIgYQorICogcGNpIGRldmljZSByZXNldC4gRG9lcyBlc3NlbnRpYWxseSB0aGUgc2FtZSBoaW5nIGFzCisgKiBlZWhfcmVzdG9yZV9iYXJzLCBidXQgZm9yIGJyZGdlcywgYW5kIGxldHMgZmlybXdhcmUgCisgKiBkbyB0aGUgd29yay4KKyAqLwordm9pZCBydGFzX2NvbmZpZ3VyZV9icmlkZ2Uoc3RydWN0IHBjaV9kbiAqKTsKKworaW50IHJ0YXNfd3JpdGVfY29uZmlnKHN0cnVjdCBwY2lfZG4gKiwgaW50IHdoZXJlLCBpbnQgc2l6ZSwgdTMyIHZhbCk7CisKKy8qKgorICogbWFyayBhbmQgY2xlYXIgc2xvdHM6IGZpbmQgInBhcnRpdGlvbiBlbmRwb2ludCIgUEUgYW5kIHNldCBvciAKKyAqIGNsZWFyIHRoZSBmbGFncyBmb3IgZWFjaCBzdWJub2RlIG9mIHRoZSBQRS4KKyAqLwordm9pZCBlZWhfbWFya19zbG90IChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuLCBpbnQgbW9kZV9mbGFnKTsKK3ZvaWQgZWVoX2NsZWFyX3Nsb3QgKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4sIGludCBtb2RlX2ZsYWcpOworCisjZW5kaWYKKwogI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19QUENfUENJX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcHBjX2FzbS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wcGNfYXNtLmgKaW5kZXggYzUzNGNhNC4uYzI3YmFhMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9wcGNfYXNtLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wcGNfYXNtLmgKQEAgLTYsOCArNiwxMyBAQAogCiAjaW5jbHVkZSA8bGludXgvc3RyaW5naWZ5Lmg+CiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL2FzbS1jb21wYXQuaD4KIAotI2lmZGVmIF9fQVNTRU1CTFlfXworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNlcnJvciBfX0ZJTEVfXyBzaG91bGQgb25seSBiZSB1c2VkIGluIGFzc2VtYmxlciBmaWxlcworI2Vsc2UKKworI2RlZmluZSBTWkwJCQkoQklUU19QRVJfTE9ORy84KQogCiAvKgogICogTWFjcm9zIGZvciBzdG9yaW5nIHJlZ2lzdGVycyBpbnRvIGFuZCBsb2FkaW5nIHJlZ2lzdGVycyBmcm9tCkBAIC0xODQsMTIgKzE4OSw2IEBACiAJb3JpcyAgICByZWcscmVnLChsYWJlbClAaDsgICAgICAgICAgICAgICAgICAgICAgXAogCW9yaSAgICAgcmVnLHJlZywobGFiZWwpQGw7CiAKLS8qIG9wZXJhdGlvbnMgZm9yIGxvbmdzIGFuZCBwb2ludGVycyAqLwotI2RlZmluZSBMREwJbGQKLSNkZWZpbmUgU1RMCXN0ZAotI2RlZmluZSBDTVBJCWNtcGRpCi0jZGVmaW5lIFNaTAk4Ci0KIC8qIG9mZnNldHMgZm9yIHN0YWNrIGZyYW1lIGxheW91dCAqLwogI2RlZmluZSBMUlNBVkUJMTYKIApAQCAtMjAzLDEyICsyMDIsNiBAQAogCiAjZGVmaW5lIE9GRihuYW1lKQluYW1lQGwKIAotLyogb3BlcmF0aW9ucyBmb3IgbG9uZ3MgYW5kIHBvaW50ZXJzICovCi0jZGVmaW5lIExETAlsd3oKLSNkZWZpbmUgU1RMCXN0dwotI2RlZmluZSBDTVBJCWNtcHdpCi0jZGVmaW5lIFNaTAk0Ci0KIC8qIG9mZnNldHMgZm9yIHN0YWNrIGZyYW1lIGxheW91dCAqLwogI2RlZmluZSBMUlNBVkUJNAogCkBAIC0yNjYsMTUgKzI1OSw2IEBACiAjZW5kaWYKIAogCi0jaWZkZWYgQ09ORklHX0lCTTQwNV9FUlI3NwotI2RlZmluZSBQUEM0MDVfRVJSNzcocmEscmIpCWRjYnQJcmEsIHJiOwotI2RlZmluZQlQUEM0MDVfRVJSNzdfU1lOQwlzeW5jOwotI2Vsc2UKLSNkZWZpbmUgUFBDNDA1X0VSUjc3KHJhLHJiKQotI2RlZmluZSBQUEM0MDVfRVJSNzdfU1lOQwotI2VuZGlmCi0KLQogI2lmZGVmIENPTkZJR19JQk00NDBFUF9FUlI0MgogI2RlZmluZSBQUEM0NDBFUF9FUlI0MiBpc3luYwogI2Vsc2UKQEAgLTUwMiwxNyArNDg2LDYgQEAKICNkZWZpbmUgTl9TTElORQk2OAogI2RlZmluZSBOX1NPCTEwMAogCi0jZGVmaW5lIEFTTV9DT05TVCh4KSB4Ci0jZWxzZQotICAjZGVmaW5lIF9fQVNNX0NPTlNUKHgpIHgjI1VMCi0gICNkZWZpbmUgQVNNX0NPTlNUKHgpIF9fQVNNX0NPTlNUKHgpCi0KLSNpZmRlZiBDT05GSUdfUFBDNjQKLSNkZWZpbmUgREFUQUwJIi5sbG9uZyIKLSNlbHNlCi0jZGVmaW5lIERBVEFMCSIubG9uZyIKLSNlbmRpZgotCiAjZW5kaWYgLyogIF9fQVNTRU1CTFlfXyAqLwogCiAjZW5kaWYgLyogX0FTTV9QT1dFUlBDX1BQQ19BU01fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9wcm9jZXNzb3IuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcHJvY2Vzc29yLmgKaW5kZXggMWRjNGJmNy4uZDEyMzgyZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9wcm9jZXNzb3IuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3Byb2Nlc3Nvci5oCkBAIC0xNyw2NSArMTcsNzEgQEAKICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KLSNpZmRlZiBDT05GSUdfUFBDNjQKLSNpbmNsdWRlIDxhc20vc3lzdGVtY2ZnLmg+Ci0jZW5kaWYKIAotI2lmZGVmIENPTkZJR19QUEMzMgotLyogMzItYml0IHBsYXRmb3JtIHR5cGVzICovCi0vKiBXZSBvbmx5IG5lZWQgdG8gZGVmaW5lIGEgbmV3IF9NQUNIX3h4eCBmb3IgbWFjaGluZXMgd2hpY2ggYXJlIHBhcnQgb2YKLSAqIGEgY29uZmlndXJhdGlvbiB3aGljaCBzdXBwb3J0cyBtb3JlIHRoYW4gb25lIHR5cGUgb2YgZGlmZmVyZW50IG1hY2hpbmUuCi0gKiBUaGlzIGlzIGN1cnJlbnRseSBsaW1pdGVkIHRvIENPTkZJR19QUENfTVVMVElQTEFURk9STSBhbmQgQ0hSUC9QUmVQL1BNYWMuCi0gKiAtLSBUb20KKy8qIFdlIGRvIF9ub3RfIHdhbnQgdG8gZGVmaW5lIG5ldyBtYWNoaW5lIHR5cGVzIGF0IGFsbCwgdGhvc2UgbXVzdCBkaWUKKyAqIGluIGZhdm9yIG9mIHVzaW5nIHRoZSBkZXZpY2UtdHJlZQorICogLS0gQmVuSC4KICAqLwotI2RlZmluZSBfTUFDSF9wcmVwCTB4MDAwMDAwMDEKLSNkZWZpbmUgX01BQ0hfUG1hYwkweDAwMDAwMDAyCS8qIHBtYWMgb3IgcG1hYyBjbG9uZSAobm9uLWNocnApICovCi0jZGVmaW5lIF9NQUNIX2NocnAJMHgwMDAwMDAwNAkvKiBjaHJwIG1hY2hpbmUgKi8KIAotLyogc2VlIHJlc2lkdWFsLmggZm9yIHRoZXNlICovCisvKiBQbGF0Zm9ybXMgY29kZXMgKHRvIGJlIG9ic29sZXRlZCkgKi8KKyNkZWZpbmUgUExBVEZPUk1fUFNFUklFUwkweDAxMDAKKyNkZWZpbmUgUExBVEZPUk1fUFNFUklFU19MUEFSCTB4MDEwMQorI2RlZmluZSBQTEFURk9STV9JU0VSSUVTX0xQQVIJMHgwMjAxCisjZGVmaW5lIFBMQVRGT1JNX0xQQVIJCTB4MDAwMQorI2RlZmluZSBQTEFURk9STV9QT1dFUk1BQwkweDA0MDAKKyNkZWZpbmUgUExBVEZPUk1fTUFQTEUJCTB4MDUwMAorI2RlZmluZSBQTEFURk9STV9QUkVQCQkweDA2MDAKKyNkZWZpbmUgUExBVEZPUk1fQ0hSUAkJMHgwNzAwCisjZGVmaW5lIFBMQVRGT1JNX0NFTEwJCTB4MTAwMAorCisvKiBDb21wYXQgcGxhdGZvcm0gY29kZXMgZm9yIDMyIGJpdHMgKi8KKyNkZWZpbmUgX01BQ0hfcHJlcAlQTEFURk9STV9QUkVQCisjZGVmaW5lIF9NQUNIX1BtYWMJUExBVEZPUk1fUE9XRVJNQUMKKyNkZWZpbmUgX01BQ0hfY2hycAlQTEFURk9STV9DSFJQCisKKy8qIFBSRVAgc3ViLXBsYXRmb3JtIHR5cGVzIHNlZSByZXNpZHVhbC5oIGZvciB0aGVzZSAqLwogI2RlZmluZSBfUFJFUF9Nb3Rvcm9sYQkweDAxCS8qIG1vdG9yb2xhIHByZXAgKi8KICNkZWZpbmUgX1BSRVBfRmlybQkweDAyCS8qIGZpcm13b3JrcyBwcmVwICovCiAjZGVmaW5lIF9QUkVQX0lCTQkweDAwCS8qIGlibSBwcmVwICovCiAjZGVmaW5lIF9QUkVQX0J1bGwJMHgwMwkvKiBidWxsIHByZXAgKi8KIAotLyogdGhlc2UgYXJlIGFyYml0cmFyeSAqLworLyogQ0hSUCBzdWItcGxhdGZvcm0gdHlwZXMuIFRoZXNlIGFyZSBhcmJpdHJhcnkgKi8KICNkZWZpbmUgX0NIUlBfTW90b3JvbGEJMHgwNAkvKiBtb3Rvcm9sYSBjaHJwLCB0aGUgY29icmEgKi8KICNkZWZpbmUgX0NIUlBfSUJNCTB4MDUJLyogSUJNIGNocnAsIHRoZSBsb25ndHJhaWwgYW5kIGxvbmd0cmFpbCAyICovCiAjZGVmaW5lIF9DSFJQX1BlZ2Fzb3MJMHgwNgkvKiBHZW5lc2kvYnBsYW4ncyBQZWdhc29zIGFuZCBQZWdhc29zMiAqLwogCi0jaWZkZWYgQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNCisjZGVmaW5lIHBsYXRmb3JtX2lzX3BzZXJpZXMoKQkoX21hY2hpbmUgPT0gUExBVEZPUk1fUFNFUklFUyB8fCBcCisJCQkJIF9tYWNoaW5lID09IFBMQVRGT1JNX1BTRVJJRVNfTFBBUikKKyNkZWZpbmUgcGxhdGZvcm1faXNfbHBhcigpCSghIShfbWFjaGluZSAmIFBMQVRGT1JNX0xQQVIpKQorCisjaWYgZGVmaW5lZChDT05GSUdfUFBDX01VTFRJUExBVEZPUk0pCiBleHRlcm4gaW50IF9tYWNoaW5lOwogCisjaWZkZWYgQ09ORklHX1BQQzMyCisKIC8qIHdoYXQga2luZCBvZiBwcmVwIHdvcmtzdGF0aW9uIHdlIGFyZSAqLwogZXh0ZXJuIGludCBfcHJlcF90eXBlOwogZXh0ZXJuIGludCBfY2hycF90eXBlOwogCiAvKgogICogVGhpcyBpcyB1c2VkIHRvIGlkZW50aWZ5IHRoZSBib2FyZCB0eXBlIGZyb20gYSBnaXZlbiBQUmVQIGJvYXJkCi0gKiB2ZW5kb3IuIEJvYXJkIHJldmlzaW9uIGlzIGFsc28gbWFkZSBhdmFpbGFibGUuCisgKiB2ZW5kb3IuIEJvYXJkIHJldmlzaW9uIGlzIGFsc28gbWFkZSBhdmFpbGFibGUuIFRoaXMgd2lsbCBiZSBtb3ZlZAorICogZWxzZXdoZXJlIHNvb24KICAqLwogZXh0ZXJuIHVuc2lnbmVkIGNoYXIgdWNTeXN0ZW1UeXBlOwogZXh0ZXJuIHVuc2lnbmVkIGNoYXIgdWNCb2FyZFJldjsKIGV4dGVybiB1bnNpZ25lZCBjaGFyIHVjQm9hcmRSZXZNYWosIHVjQm9hcmRSZXZNaW47CisKKyNlbmRpZiAvKiBDT05GSUdfUFBDMzIgKi8KKworI2VsaWYgZGVmaW5lZChDT05GSUdfUFBDX0lTRVJJRVMpCisvKgorICogaVNlcmllcyBpcyBzb29uIHRvIGJlY29tZSBNVUxUSVBMQVRGT1JNIGhvcGVmdWxseSAuLi4KKyAqLworI2RlZmluZSBfbWFjaGluZSBQTEFURk9STV9JU0VSSUVTX0xQQVIKICNlbHNlCiAjZGVmaW5lIF9tYWNoaW5lIDAKICNlbmRpZiAvKiBDT05GSUdfUFBDX01VTFRJUExBVEZPUk0gKi8KLSNlbmRpZiAvKiBDT05GSUdfUFBDMzIgKi8KLQotI2lmZGVmIENPTkZJR19QUEM2NAotLyogUGxhdGZvcm1zIHN1cHBvcnRlZCBieSBQUEM2NCAqLwotI2RlZmluZSBQTEFURk9STV9QU0VSSUVTICAgICAgMHgwMTAwCi0jZGVmaW5lIFBMQVRGT1JNX1BTRVJJRVNfTFBBUiAweDAxMDEKLSNkZWZpbmUgUExBVEZPUk1fSVNFUklFU19MUEFSIDB4MDIwMQotI2RlZmluZSBQTEFURk9STV9MUEFSICAgICAgICAgMHgwMDAxCi0jZGVmaW5lIFBMQVRGT1JNX1BPV0VSTUFDICAgICAweDA0MDAKLSNkZWZpbmUgUExBVEZPUk1fTUFQTEUgICAgICAgIDB4MDUwMAotI2RlZmluZSBQTEFURk9STV9DRUxMICAgICAgICAgMHgxMDAwCi0KLS8qIENvbXBhdGliaWxpdHkgd2l0aCBkcml2ZXJzIGNvbWluZyBmcm9tIFBQQzMyIHdvcmxkICovCi0jZGVmaW5lIF9tYWNoaW5lCShzeXN0ZW1jZmctPnBsYXRmb3JtKQotI2RlZmluZSBfTUFDSF9QbWFjCVBMQVRGT1JNX1BPV0VSTUFDCi0jZW5kaWYKIAogLyoKICAqIERlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgbWFjcm8gdGhhdCByZXR1cm5zIGN1cnJlbnQKQEAgLTE3MSw4ICsxNzcsOCBAQAogI2lmZGVmIENPTkZJR19QUEM2NAogCXVuc2lnbmVkIGxvbmcJc3RhcnRfdGI7CS8qIFN0YXJ0IHB1cnIgd2hlbiBwcm9jIHN3aXRjaGVkIGluICovCiAJdW5zaWduZWQgbG9uZwlhY2N1bV90YjsJLyogVG90YWwgYWNjdW1pbGF0ZWQgcHVyciBmb3IgcHJvY2VzcyAqLwotCXVuc2lnbmVkIGxvbmcJdmRzb19iYXNlOwkvKiBiYXNlIG9mIHRoZSB2RFNPIGxpYnJhcnkgKi8KICNlbmRpZgorCXVuc2lnbmVkIGxvbmcJdmRzb19iYXNlOwkvKiBiYXNlIG9mIHRoZSB2RFNPIGxpYnJhcnkgKi8KIAl1bnNpZ25lZCBsb25nCWRhYnI7CQkvKiBEYXRhIGFkZHJlc3MgYnJlYWtwb2ludCByZWdpc3RlciAqLwogI2lmZGVmIENPTkZJR19BTFRJVkVDCiAJLyogQ29tcGxldGUgQWx0aVZlYyByZWdpc3RlciBzZXQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcmVnLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3JlZy5oCmluZGV4IDQ4OWNmNGMuLmViMzkyZDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcmVnLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9yZWcuaApAQCAtMTYsNyArMTYsMTEgQEAKIC8qIFBpY2t1cCBCb29rIEUgc3BlY2lmaWMgcmVnaXN0ZXJzLiAqLwogI2lmIGRlZmluZWQoQ09ORklHX0JPT0tFKSB8fCBkZWZpbmVkKENPTkZJR180MHgpCiAjaW5jbHVkZSA8YXNtL3JlZ19ib29rZS5oPgotI2VuZGlmCisjZW5kaWYgLyogQ09ORklHX0JPT0tFIHx8IENPTkZJR180MHggKi8KKworI2lmZGVmIENPTkZJR184eHgKKyNpbmNsdWRlIDxhc20vcmVnXzh4eC5oPgorI2VuZGlmIC8qIENPTkZJR184eHggKi8KIAogI2RlZmluZSBNU1JfU0ZfTEcJNjMgICAgICAgICAgICAgIC8qIEVuYWJsZSA2NCBiaXQgbW9kZSAqLwogI2RlZmluZSBNU1JfSVNGX0xHCTYxICAgICAgICAgICAgICAvKiBJbnRlcnJ1cHQgNjRiIG1vZGUgdmFsaWQgb24gNjMwICovCkBAIC0zNTksNiArMzYzLDcgQEAKICNkZWZpbmUgU1BSTl9SUEEJMHgzRDYJLyogUmVxdWlyZWQgUGh5c2ljYWwgQWRkcmVzcyBSZWdpc3RlciAqLwogI2RlZmluZSBTUFJOX1NEQQkweDNCRgkvKiBTYW1wbGVkIERhdGEgQWRkcmVzcyBSZWdpc3RlciAqLwogI2RlZmluZSBTUFJOX1NEUjEJMHgwMTkJLyogTU1VIEhhc2ggQmFzZSBSZWdpc3RlciAqLworI2RlZmluZSBTUFJOX0FTUgkweDExOCAgIC8qIEFkZHJlc3MgU3BhY2UgUmVnaXN0ZXIgKi8KICNkZWZpbmUgU1BSTl9TSUEJMHgzQkIJLyogU2FtcGxlZCBJbnN0cnVjdGlvbiBBZGRyZXNzIFJlZ2lzdGVyICovCiAjZGVmaW5lIFNQUk5fU1BSRzAJMHgxMTAJLyogU3BlY2lhbCBQdXJwb3NlIFJlZ2lzdGVyIEdlbmVyYWwgMCAqLwogI2RlZmluZSBTUFJOX1NQUkcxCTB4MTExCS8qIFNwZWNpYWwgUHVycG9zZSBSZWdpc3RlciBHZW5lcmFsIDEgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcmVnXzh4eC5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9yZWdfOHh4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThlYTM0NgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcmVnXzh4eC5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb250YWlucyByZWdpc3RlciBkZWZpbml0aW9ucyBjb21tb24gdG8gUG93ZXJQQyA4eHggQ1BVcy4gIE5vdGljZQorICovCisjaWZuZGVmIF9BU01fUE9XRVJQQ19SRUdfOHh4X0gKKyNkZWZpbmUgX0FTTV9QT1dFUlBDX1JFR184eHhfSAorCisvKiBDYWNoZSBjb250cm9sIG9uIHRoZSBNUEM4eHggaXMgcHJvdmlkZWQgdGhyb3VnaCBzb21lIGFkZGl0aW9uYWwKKyAqIHNwZWNpYWwgcHVycG9zZSByZWdpc3RlcnMuCisgKi8KKyNkZWZpbmUgU1BSTl9JQ19DU1QJNTYwCS8qIEluc3RydWN0aW9uIGNhY2hlIGNvbnRyb2wvc3RhdHVzICovCisjZGVmaW5lIFNQUk5fSUNfQURSCTU2MQkvKiBBZGRyZXNzIG5lZWRlZCBmb3Igc29tZSBjb21tYW5kcyAqLworI2RlZmluZSBTUFJOX0lDX0RBVAk1NjIJLyogUmVhZC1vbmx5IGRhdGEgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BSTl9EQ19DU1QJNTY4CS8qIERhdGEgY2FjaGUgY29udHJvbC9zdGF0dXMgKi8KKyNkZWZpbmUgU1BSTl9EQ19BRFIJNTY5CS8qIEFkZHJlc3MgbmVlZGVkIGZvciBzb21lIGNvbW1hbmRzICovCisjZGVmaW5lIFNQUk5fRENfREFUCTU3MAkvKiBSZWFkLW9ubHkgZGF0YSByZWdpc3RlciAqLworCisvKiBDb21tYW5kcy4gIE9ubHkgdGhlIGZpcnN0IGZldyBhcmUgYXZhaWxhYmxlIHRvIHRoZSBpbnN0cnVjdGlvbiBjYWNoZS4KKyovCisjZGVmaW5lCUlEQ19FTkFCTEUJMHgwMjAwMDAwMAkvKiBDYWNoZSBlbmFibGUgKi8KKyNkZWZpbmUgSURDX0RJU0FCTEUJMHgwNDAwMDAwMAkvKiBDYWNoZSBkaXNhYmxlICovCisjZGVmaW5lIElEQ19MRExDSwkweDA2MDAwMDAwCS8qIExvYWQgYW5kIGxvY2sgKi8KKyNkZWZpbmUgSURDX1VOTElORQkweDA4MDAwMDAwCS8qIFVubG9jayBsaW5lICovCisjZGVmaW5lIElEQ19VTkFMTAkweDBhMDAwMDAwCS8qIFVubG9jayBhbGwgKi8KKyNkZWZpbmUgSURDX0lOVkFMTAkweDBjMDAwMDAwCS8qIEludmFsaWRhdGUgYWxsICovCisKKyNkZWZpbmUgRENfRkxJTkUJMHgwZTAwMDAwMAkvKiBGbHVzaCBkYXRhIGNhY2hlIGxpbmUgKi8KKyNkZWZpbmUgRENfU0ZXVAkJMHgwMTAwMDAwMAkvKiBTZXQgZm9yY2VkIHdyaXRldGhyb3VnaCBtb2RlICovCisjZGVmaW5lIERDX0NGV1QJCTB4MDMwMDAwMDAJLyogQ2xlYXIgZm9yY2VkIHdyaXRldGhyb3VnaCBtb2RlICovCisjZGVmaW5lIERDX1NMRVMJCTB4MDUwMDAwMDAJLyogU2V0IGxpdHRsZSBlbmRpYW4gc3dhcCBtb2RlICovCisjZGVmaW5lIERDX0NMRVMJCTB4MDcwMDAwMDAJLyogQ2xlYXIgbGl0dGxlIGVuZGlhbiBzd2FwIG1vZGUgKi8KKworLyogU3RhdHVzLgorKi8KKyNkZWZpbmUgSURDX0VOQUJMRUQJMHg4MDAwMDAwMAkvKiBDYWNoZSBpcyBlbmFibGVkICovCisjZGVmaW5lIElEQ19DRVJSMQkweDAwMjAwMDAwCS8qIENhY2hlIGVycm9yIDEgKi8KKyNkZWZpbmUgSURDX0NFUlIyCTB4MDAxMDAwMDAJLyogQ2FjaGUgZXJyb3IgMiAqLworI2RlZmluZSBJRENfQ0VSUjMJMHgwMDA4MDAwMAkvKiBDYWNoZSBlcnJvciAzICovCisKKyNkZWZpbmUgRENfREZXVAkJMHg0MDAwMDAwMAkvKiBEYXRhIGNhY2hlIGlzIGZvcmNlZCB3cml0ZSB0aHJvdWdoICovCisjZGVmaW5lIERDX0xFUwkJMHgyMDAwMDAwMAkvKiBDYWNoZXMgYXJlIGxpdHRsZSBlbmRpYW4gbW9kZSAqLworCisjZW5kaWYgLyogX0FTTV9QT1dFUlBDX1JFR184eHhfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL3NpZ25hbC5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9zaWduYWwuaApzaW1pbGFyaXR5IGluZGV4IDgyJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wcGMvc2lnbmFsLmgKcmVuYW1lIHRvIGluY2x1ZGUvYXNtLXBvd2VycGMvc2lnbmFsLmgKaW5kZXggY2FmNmVkZS4uNjk0YzhkMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjL3NpZ25hbC5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvc2lnbmFsLmgKQEAgLTEsMTggKzEsMTEgQEAKLSNpZm5kZWYgX0FTTVBQQ19TSUdOQUxfSAotI2RlZmluZSBfQVNNUFBDX1NJR05BTF9ICisjaWZuZGVmIF9BU01fUE9XRVJQQ19TSUdOQUxfSAorI2RlZmluZSBfQVNNX1BPV0VSUENfU0lHTkFMX0gKIAotI2lmZGVmIF9fS0VSTkVMX18KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLQotLyogQXZvaWQgdG9vIG1hbnkgaGVhZGVyIG9yZGVyaW5nIHByb2JsZW1zLiAgKi8KLXN0cnVjdCBzaWdpbmZvOwotCi0vKiBNb3N0IHRoaW5ncyBzaG91bGQgYmUgY2xlYW4gZW5vdWdoIHRvIHJlZGVmaW5lIHRoaXMgYXQgd2lsbCwgaWYgY2FyZQotICAgaXMgdGFrZW4gdG8gbWFrZSBsaWJjIG1hdGNoLiAgKi8KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2RlZmluZSBfTlNJRwkJNjQKLSNkZWZpbmUgX05TSUdfQlBXCTMyCisjZGVmaW5lIF9OU0lHX0JQVwlCSVRTX1BFUl9MT05HCiAjZGVmaW5lIF9OU0lHX1dPUkRTCShfTlNJRyAvIF9OU0lHX0JQVykKIAogdHlwZWRlZiB1bnNpZ25lZCBsb25nIG9sZF9zaWdzZXRfdDsJCS8qIGF0IGxlYXN0IDMyIGJpdHMgKi8KQEAgLTc3LDE5ICs3MCwxOSBAQAogICogU0FfT05FU0hPVCBhbmQgU0FfTk9NQVNLIGFyZSB0aGUgaGlzdG9yaWNhbCBMaW51eCBuYW1lcyBmb3IgdGhlIFNpbmdsZQogICogVW5peCBuYW1lcyBSRVNFVEhBTkQgYW5kIE5PREVGRVIgcmVzcGVjdGl2ZWx5LgogICovCi0jZGVmaW5lIFNBX05PQ0xEU1RPUAkweDAwMDAwMDAxCi0jZGVmaW5lIFNBX05PQ0xEV0FJVAkweDAwMDAwMDAyCi0jZGVmaW5lIFNBX1NJR0lORk8JMHgwMDAwMDAwNAotI2RlZmluZSBTQV9PTlNUQUNLCTB4MDgwMDAwMDAKLSNkZWZpbmUgU0FfUkVTVEFSVAkweDEwMDAwMDAwCi0jZGVmaW5lIFNBX05PREVGRVIJMHg0MDAwMDAwMAotI2RlZmluZSBTQV9SRVNFVEhBTkQJMHg4MDAwMDAwMAorI2RlZmluZSBTQV9OT0NMRFNUT1AJMHgwMDAwMDAwMVUKKyNkZWZpbmUgU0FfTk9DTERXQUlUCTB4MDAwMDAwMDJVCisjZGVmaW5lIFNBX1NJR0lORk8JMHgwMDAwMDAwNFUKKyNkZWZpbmUgU0FfT05TVEFDSwkweDA4MDAwMDAwVQorI2RlZmluZSBTQV9SRVNUQVJUCTB4MTAwMDAwMDBVCisjZGVmaW5lIFNBX05PREVGRVIJMHg0MDAwMDAwMFUKKyNkZWZpbmUgU0FfUkVTRVRIQU5ECTB4ODAwMDAwMDBVCiAKICNkZWZpbmUgU0FfTk9NQVNLCVNBX05PREVGRVIKICNkZWZpbmUgU0FfT05FU0hPVAlTQV9SRVNFVEhBTkQKLSNkZWZpbmUgU0FfSU5URVJSVVBUCTB4MjAwMDAwMDAgLyogZHVtbXkgLS0gaWdub3JlZCAqLworI2RlZmluZSBTQV9JTlRFUlJVUFQJMHgyMDAwMDAwMHUgLyogZHVtbXkgLS0gaWdub3JlZCAqLwogCi0jZGVmaW5lIFNBX1JFU1RPUkVSCTB4MDQwMDAwMDAKKyNkZWZpbmUgU0FfUkVTVE9SRVIJMHgwNDAwMDAwMFUKIAogLyoKICAqIHNpZ2FsdHN0YWNrIGNvbnRyb2xzCkBAIC0xMjcsMTAgKzEyMCwxMyBAQAogfSBzdGFja190OwogCiAjaWZkZWYgX19LRVJORUxfXwotI2luY2x1ZGUgPGFzbS9zaWdjb250ZXh0Lmg+CitzdHJ1Y3QgcHRfcmVnczsKK2V4dGVybiBpbnQgZG9fc2lnbmFsKHNpZ3NldF90ICpvbGRzZXQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK2V4dGVybiBpbnQgZG9fc2lnbmFsMzIoc2lnc2V0X3QgKm9sZHNldCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwogI2RlZmluZSBwdHJhY2Vfc2lnbmFsX2RlbGl2ZXIocmVncywgY29va2llKSBkbyB7IH0gd2hpbGUgKDApCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCisjaWZuZGVmIF9fcG93ZXJwYzY0X18KIC8qCiAgKiBUaGVzZSBhcmUgcGFyYW1ldGVycyB0byBkYmdfc2lncmV0dXJuIHN5c2NhbGwuICBUaGV5IGVuYWJsZSBvcgogICogZGlzYWJsZSBjZXJ0YWluIGRlYnVnZ2luZyB0aGluZ3MgdGhhdCBjYW4gYmUgZG9uZSBmcm9tIHNpZ25hbApAQCAtMTQ5LDUgKzE0NSw2IEBACiAKIC8qIEVuYWJsZSBvciBkaXNhYmxlIGJyYW5jaCB0cmFjaW5nLiAgVGhlIHZhbHVlIHNldHMgdGhlIHN0YXRlLiAqLwogI2RlZmluZSBTSUdfREJHX0JSQU5DSF9UUkFDSU5HCQkyCisjZW5kaWYgLyogISBfX3Bvd2VycGM2NF9fICovCiAKLSNlbmRpZgorI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19TSUdOQUxfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9zcGFyc2VtZW0uaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvc3BhcnNlbWVtLmgKaW5kZXggMWM5NWFiOS4uYmExYjM0ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9zcGFyc2VtZW0uaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3NwYXJzZW1lbS5oCkBAIC04LDggKzgsMTIgQEAKICAqIE1BWF9QSFlTTUVNX0JJVFMJCTJeTjogaG93IG11Y2ggbWVtb3J5IHdlIGNhbiBoYXZlIGluIHRoYXQgc3BhY2UKICAqLwogI2RlZmluZSBTRUNUSU9OX1NJWkVfQklUUyAgICAgICAyNAotI2RlZmluZSBNQVhfUEhZU0FERFJfQklUUyAgICAgICAzOAotI2RlZmluZSBNQVhfUEhZU01FTV9CSVRTICAgICAgICAzNgorI2RlZmluZSBNQVhfUEhZU0FERFJfQklUUyAgICAgICA0NAorI2RlZmluZSBNQVhfUEhZU01FTV9CSVRTICAgICAgICA0NAorCisjaWZkZWYgQ09ORklHX01FTU9SWV9IT1RQTFVHCitleHRlcm4gdm9pZCBjcmVhdGVfc2VjdGlvbl9tYXBwaW5nKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTsKKyNlbmRpZiAvKiBDT05GSUdfTUVNT1JZX0hPVFBMVUcgKi8KIAogI2VuZGlmIC8qIENPTkZJR19TUEFSU0VNRU0gKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvc3lzdGVtLmgKaW5kZXggMzUzNmE1Yy4uNTM0MWI3NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9zeXN0ZW0uaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3N5c3RlbS5oCkBAIC04LDcgKzgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogCiAjaW5jbHVkZSA8YXNtL2h3X2lycS5oPgotI2luY2x1ZGUgPGFzbS9wcGNfYXNtLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogCiAvKgpAQCAtMTgwLDYgKzE3OSw3IEBACiBleHRlcm4gdW5zaWduZWQgaW50IHJ0YXNfZGF0YTsKIGV4dGVybiBpbnQgbWVtX2luaXRfZG9uZTsJLyogc2V0IG9uIGJvb3Qgb25jZSBrbWFsbG9jIGNhbiBiZSBjYWxsZWQgKi8KIGV4dGVybiB1bnNpZ25lZCBsb25nIG1lbW9yeV9saW1pdDsKK2V4dGVybiB1bnNpZ25lZCBsb25nIGtsaW1pdDsKIAogZXh0ZXJuIGludCBwb3dlcnNhdmVfbmFwOwkvKiBzZXQgaWYgbmFwIG1vZGUgY2FuIGJlIHVzZWQgaW4gaWRsZSBsb29wICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L3RjZS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy90Y2UuaApzaW1pbGFyaXR5IGluZGV4IDk1JQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wcGM2NC90Y2UuaApyZW5hbWUgdG8gaW5jbHVkZS9hc20tcG93ZXJwYy90Y2UuaAppbmRleCBkNDBiNmI0Li5kMDk5ZDUyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGM2NC90Y2UuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3RjZS5oCkBAIC0xOCw4ICsxOCw4IEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKICAqLwogCi0jaWZuZGVmIF9BU01fVENFX0gKLSNkZWZpbmUgX0FTTV9UQ0VfSAorI2lmbmRlZiBfQVNNX1BPV0VSUENfVENFX0gKKyNkZWZpbmUgX0FTTV9QT1dFUlBDX1RDRV9ICiAKIC8qCiAgKiBUY2VzIGNvbWUgaW4gdHdvIGZvcm1hdHMsIG9uZSBmb3IgdGhlIHZpcnR1YWwgYnVzIGFuZCBhIGRpZmZlcmVudApAQCAtNjEsNCArNjEsNCBAQAogfTsKIAogCi0jZW5kaWYKKyNlbmRpZiAvKiBfQVNNX1BPV0VSUENfVENFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvdG9wb2xvZ3kuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdG9wb2xvZ3kuaAppbmRleCAyNTEyZTM4Li4wMTVkMjg3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3RvcG9sb2d5LmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy90b3BvbG9neS5oCkBAIC05LDE1ICs5LDcgQEAKIAogc3RhdGljIGlubGluZSBpbnQgY3B1X3RvX25vZGUoaW50IGNwdSkKIHsKLQlpbnQgbm9kZTsKLQotCW5vZGUgPSBudW1hX2NwdV9sb29rdXBfdGFibGVbY3B1XTsKLQotI2lmZGVmIERFQlVHX05VTUEKLQlCVUdfT04obm9kZSA9PSAtMSk7Ci0jZW5kaWYKLQotCXJldHVybiBub2RlOworCXJldHVybiBudW1hX2NwdV9sb29rdXBfdGFibGVbY3B1XTsKIH0KIAogI2RlZmluZSBwYXJlbnRfbm9kZShub2RlKQkobm9kZSkKQEAgLTM3LDggKzI5LDYgQEAKICNkZWZpbmUgcGNpYnVzX3RvX25vZGUobm9kZSkgICAgKC0xKQogI2RlZmluZSBwY2lidXNfdG9fY3B1bWFzayhidXMpCShjcHVfb25saW5lX21hcCkKIAotI2RlZmluZSBucl9jcHVzX25vZGUobm9kZSkJKG5yX2NwdXNfaW5fbm9kZVtub2RlXSkKLQogLyogc2NoZWRfZG9tYWlucyBTRF9OT0RFX0lOSVQgZm9yIFBQQzY0IG1hY2hpbmVzICovCiAjZGVmaW5lIFNEX05PREVfSU5JVCAoc3RydWN0IHNjaGVkX2RvbWFpbikgewkJXAogCS5zcGFuCQkJPSBDUFVfTUFTS19OT05FLAlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3VhY2Nlc3MuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdWFjY2Vzcy5oCmluZGV4IDMzYWY3MzAuLjM4NzJlOTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvdWFjY2Vzcy5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdWFjY2Vzcy5oCkBAIC0xMjAsMTQgKzEyMCw2IEBACiAKIGV4dGVybiBsb25nIF9fcHV0X3VzZXJfYmFkKHZvaWQpOwogCi0jaWZkZWYgX19wb3dlcnBjNjRfXwotI2RlZmluZSBfX0VYX1RBQkxFX0FMSUdOCSIzIgotI2RlZmluZSBfX0VYX1RBQkxFX1RZUEUJCSJsbG9uZyIKLSNlbHNlCi0jZGVmaW5lIF9fRVhfVEFCTEVfQUxJR04JIjIiCi0jZGVmaW5lIF9fRVhfVEFCTEVfVFlQRQkJImxvbmciCi0jZW5kaWYKLQogLyoKICAqIFdlIGRvbid0IHRlbGwgZ2NjIHRoYXQgd2UgYXJlIGFjY2Vzc2luZyBtZW1vcnksIGJ1dCB0aGlzIGlzIE9LCiAgKiBiZWNhdXNlIHdlIGRvIG5vdCB3cml0ZSB0byBhbnkgbWVtb3J5IGdjYyBrbm93cyBhYm91dCwgc28gdGhlcmUKQEAgLTE0MiwxMSArMTM0LDEyIEBACiAJCSIJYiAyYlxuIgkJCQkJXAogCQkiLnByZXZpb3VzXG4iCQkJCQlcCiAJCSIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCQkJXAotCQkiCS5hbGlnbiAiIF9fRVhfVEFCTEVfQUxJR04gIlxuIgkJXAotCQkiCS4iX19FWF9UQUJMRV9UWVBFIiAxYiwzYlxuIgkJXAorCQkiCS5iYWxpZ24gJTVcbiIJCQkJXAorCQkJUFBDX0xPTkcgIjFiLDNiXG4iCQkJXAogCQkiLnByZXZpb3VzIgkJCQkJXAogCQk6ICI9ciIgKGVycikJCQkJCVwKLQkJOiAiciIgKHgpLCAiYiIgKGFkZHIpLCAiaSIgKC1FRkFVTFQpLCAiMCIgKGVycikpCisJCTogInIiICh4KSwgImIiIChhZGRyKSwgImkiICgtRUZBVUxUKSwgIjAiIChlcnIpLFwKKwkJICAiaSIoc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSkKIAogI2lmZGVmIF9fcG93ZXJwYzY0X18KICNkZWZpbmUgX19wdXRfdXNlcl9hc20yKHgsIHB0ciwgcmV0dmFsKQkJCQlcCkBAIC0xNjIsMTIgKzE1NSwxMyBAQAogCQkiCWIgM2JcbiIJCQkJCVwKIAkJIi5wcmV2aW91c1xuIgkJCQkJXAogCQkiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgkJCVwKLQkJIgkuYWxpZ24gIiBfX0VYX1RBQkxFX0FMSUdOICJcbiIJCVwKLQkJIgkuIiBfX0VYX1RBQkxFX1RZUEUgIiAxYiw0YlxuIgkJXAotCQkiCS4iIF9fRVhfVEFCTEVfVFlQRSAiIDJiLDRiXG4iCQlcCisJCSIJLmJhbGlnbiAlNVxuIgkJCQlcCisJCQlQUENfTE9ORyAiMWIsNGJcbiIJCQlcCisJCQlQUENfTE9ORyAiMmIsNGJcbiIJCQlcCiAJCSIucHJldmlvdXMiCQkJCQlcCiAJCTogIj1yIiAoZXJyKQkJCQkJXAotCQk6ICJyIiAoeCksICJiIiAoYWRkciksICJpIiAoLUVGQVVMVCksICIwIiAoZXJyKSkKKwkJOiAiciIgKHgpLCAiYiIgKGFkZHIpLCAiaSIgKC1FRkFVTFQpLCAiMCIgKGVyciksXAorCQkgICJpIihzaXplb2YodW5zaWduZWQgbG9uZykpKQogI2VuZGlmIC8qIF9fcG93ZXJwYzY0X18gKi8KIAogI2RlZmluZSBfX3B1dF91c2VyX3NpemUoeCwgcHRyLCBzaXplLCByZXR2YWwpCQkJXApAQCAtMjEzLDExICsyMDcsMTIgQEAKIAkJIgliIDJiXG4iCQkJCVwKIAkJIi5wcmV2aW91c1xuIgkJCQlcCiAJCSIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCQlcCi0JCSIJLmFsaWduICJfX0VYX1RBQkxFX0FMSUdOICJcbiIJXAotCQkiCS4iIF9fRVhfVEFCTEVfVFlQRSAiIDFiLDNiXG4iCVwKKwkJIgkuYmFsaWduICU1XG4iCQkJXAorCQkJUFBDX0xPTkcgIjFiLDNiXG4iCQlcCiAJCSIucHJldmlvdXMiCQkJCVwKIAkJOiAiPXIiIChlcnIpLCAiPXIiICh4KQkJCVwKLQkJOiAiYiIgKGFkZHIpLCAiaSIgKC1FRkFVTFQpLCAiMCIgKGVycikpCisJCTogImIiIChhZGRyKSwgImkiICgtRUZBVUxUKSwgIjAiIChlcnIpLAlcCisJCSAgImkiKHNpemVvZih1bnNpZ25lZCBsb25nKSkpCiAKICNpZmRlZiBfX3Bvd2VycGM2NF9fCiAjZGVmaW5lIF9fZ2V0X3VzZXJfYXNtMih4LCBhZGRyLCBlcnIpCQkJXApAQCAtMjM1LDEyICsyMzAsMTMgQEAKIAkJIgliIDNiXG4iCQkJCVwKIAkJIi5wcmV2aW91c1xuIgkJCQlcCiAJCSIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCQlcCi0JCSIJLmFsaWduICIgX19FWF9UQUJMRV9BTElHTiAiXG4iCVwKLQkJIgkuIiBfX0VYX1RBQkxFX1RZUEUgIiAxYiw0YlxuIglcCi0JCSIJLiIgX19FWF9UQUJMRV9UWVBFICIgMmIsNGJcbiIJXAorCQkiCS5iYWxpZ24gJTVcbiIJCQlcCisJCQlQUENfTE9ORyAiMWIsNGJcbiIJCVwKKwkJCVBQQ19MT05HICIyYiw0YlxuIgkJXAogCQkiLnByZXZpb3VzIgkJCQlcCiAJCTogIj1yIiAoZXJyKSwgIj0mciIgKHgpCQkJXAotCQk6ICJiIiAoYWRkciksICJpIiAoLUVGQVVMVCksICIwIiAoZXJyKSkKKwkJOiAiYiIgKGFkZHIpLCAiaSIgKC1FRkFVTFQpLCAiMCIgKGVyciksCVwKKwkJICAiaSIoc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSkKICNlbmRpZiAvKiBfX3Bvd2VycGM2NF9fICovCiAKICNkZWZpbmUgX19nZXRfdXNlcl9zaXplKHgsIHB0ciwgc2l6ZSwgcmV0dmFsKQkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L3VkYmcuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdWRiZy5oCnNpbWlsYXJpdHkgaW5kZXggOTAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBwYzY0L3VkYmcuaApyZW5hbWUgdG8gaW5jbHVkZS9hc20tcG93ZXJwYy91ZGJnLmgKaW5kZXggZTNiOTI3OS4uYTM4MzM4MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjNjQvdWRiZy5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdWRiZy5oCkBAIC0xLDkgKzEsMyBAQAotI2lmbmRlZiBfX1VEQkdfSERSCi0jZGVmaW5lIF9fVURCR19IRFIKLQotI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotCiAvKgogICogYyAyMDAxIFBQQyA2NCBUZWFtLCBJQk0gQ29ycAogICoKQEAgLTEzLDYgKzcsMTIgQEAKICAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAorI2lmbmRlZiBfQVNNX1BPV0VSUENfVURCR19ICisjZGVmaW5lIF9BU01fUE9XRVJQQ19VREJHX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCiBleHRlcm4gdm9pZCAoKnVkYmdfcHV0YykodW5zaWduZWQgY2hhciBjKTsKIGV4dGVybiB1bnNpZ25lZCBjaGFyICgqdWRiZ19nZXRjKSh2b2lkKTsKIGV4dGVybiBpbnQgKCp1ZGJnX2dldGNfcG9sbCkodm9pZCk7CkBAIC0yOCw0ICsyOCw0IEBACiAKIHN0cnVjdCBkZXZpY2Vfbm9kZTsKIGV4dGVybiB2b2lkIHVkYmdfaW5pdF9zY2Moc3RydWN0IGRldmljZV9ub2RlICpucCk7Ci0jZW5kaWYKKyNlbmRpZiAvKiBfQVNNX1BPV0VSUENfVURCR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC92ZHNvLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3Zkc28uaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcHBjNjQvdmRzby5oCnJlbmFtZSB0byBpbmNsdWRlL2FzbS1wb3dlcnBjL3Zkc28uaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy92ZHNvX2RhdGFwYWdlLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3Zkc29fZGF0YXBhZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzMyM2I1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy92ZHNvX2RhdGFwYWdlLmgKQEAgLTAsMCArMSwxMDggQEAKKyNpZm5kZWYgX1ZEU09fREFUQVBBR0VfSAorI2RlZmluZSBfVkRTT19EQVRBUEFHRV9ICisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgUGV0ZXIgQmVyZ25lciA8YmVyZ25lckB2bmV0LmlibS5jb20+LCBJQk0KKyAqIENvcHlyaWdodCAoQykgMjAwNSBCZW5qYW1pbiBIZXJyZW5zY2htaWR5IDxiZW5oQGtlcm5lbC5jcmFzaGluZy5vcmc+LAorICogCQkgICAgICBJQk0gQ29ycC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKworLyoKKyAqIE5vdGUgYWJvdXQgdGhpcyBzdHJ1Y3R1cmU6CisgKgorICogVGhpcyBzdHJ1Y3R1cmUgd2FzIGhpc3RvcmljYWxseSBjYWxsZWQgc3lzdGVtY2ZnIGFuZCBleHBvc2VkIHRvCisgKiB1c2VybGFuZCB2aWEgL3Byb2MvcHBjNjQvc3lzdGVtY2ZnLiBVbmZvcnR1bmF0ZWx5LCB0aGlzIGJlY2FtZSBhbgorICogQUJJIGlzc3VlIGFzIHNvbWUgcHJvcHJpZXRhcnkgc29mdHdhcmUgc3RhcnRlZCByZWx5aW5nIG9uIGJlaW5nIGFibGUKKyAqIHRvIG1tYXAoKSBpdCwgdGh1cyB3ZSBoYXZlIHRvIGtlZXAgdGhlIGJhc2UgbGF5b3V0IGF0IGxlYXN0IGZvciBhCisgKiBmZXcga2VybmVsIHZlcnNpb25zLgorICoKKyAqIEhvd2V2ZXIsIHNpbmNlIHBwYzMyIGRvZXNuJ3Qgc3VmZmVyIGZyb20gdGhpcyBiYWNrd2FyZCBoYW5kaWNhcCwKKyAqIGEgc2ltcGxlciB2ZXJzaW9uIG9mIHRoZSBkYXRhIHN0cnVjdHVyZSBpcyB1c2VkIHRoZXJlIHdpdGggb25seSB0aGUKKyAqIGZpZWxkcyBhY3R1YWxseSB1c2VkIGJ5IHRoZSB2RFNPLgorICoKKyAqLworCisvKgorICogSWYgdGhlIG1ham9yIHZlcnNpb24gY2hhbmdlcyB3ZSBhcmUgaW5jb21wYXRpYmxlLgorICogTWlub3IgdmVyc2lvbiBjaGFuZ2VzIGFyZSBhIGhpbnQuCisgKi8KKyNkZWZpbmUgU1lTVEVNQ0ZHX01BSk9SIDEKKyNkZWZpbmUgU1lTVEVNQ0ZHX01JTk9SIDEKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgorCisjZGVmaW5lIFNZU0NBTExfTUFQX1NJWkUgICAgICAoKF9fTlJfc3lzY2FsbHMgKyAzMSkgLyAzMikKKworLyoKKyAqIFNvIGhlcmUgaXMgdGhlIHBwYzY0IGJhY2t3YXJkIGNvbXBhdGlibGUgdmVyc2lvbgorICovCisKKyNpZmRlZiBDT05GSUdfUFBDNjQKKworc3RydWN0IHZkc29fZGF0YSB7CisJX191OCAgZXllX2NhdGNoZXJbMTZdOwkJLyogRXllY2F0Y2hlcjogU1lTVEVNQ0ZHOlBQQzY0CTB4MDAgKi8KKwlzdHJ1Y3QgewkJCS8qIFN5c3RlbWNmZyB2ZXJzaW9uIG51bWJlcnMJICAgICAqLworCQlfX3UzMiBtYWpvcjsJCS8qIE1ham9yIG51bWJlcgkJCTB4MTAgKi8KKwkJX191MzIgbWlub3I7CQkvKiBNaW5vciBudW1iZXIJCQkweDE0ICovCisJfSB2ZXJzaW9uOworCisJX191MzIgcGxhdGZvcm07CQkJLyogUGxhdGZvcm0gZmxhZ3MJCTB4MTggKi8KKwlfX3UzMiBwcm9jZXNzb3I7CQkvKiBQcm9jZXNzb3IgdHlwZQkJMHgxQyAqLworCV9fdTY0IHByb2Nlc3NvckNvdW50OwkJLyogIyBvZiBwaHlzaWNhbCBwcm9jZXNzb3JzCTB4MjAgKi8KKwlfX3U2NCBwaHlzaWNhbE1lbW9yeVNpemU7CS8qIFNpemUgb2YgcmVhbCBtZW1vcnkoQikJMHgyOCAqLworCV9fdTY0IHRiX29yaWdfc3RhbXA7CQkvKiBUaW1lYmFzZSBhdCBib290CQkweDMwICovCisJX191NjQgdGJfdGlja3NfcGVyX3NlYzsJCS8qIFRpbWViYXNlIHRpY3MgLyBzZWMJCTB4MzggKi8KKwlfX3U2NCB0Yl90b194czsJCQkvKiBJbnZlcnNlIG9mIFRCIHRvIDJeMjAJMHg0MCAqLworCV9fdTY0IHN0YW1wX3hzZWM7CQkvKgkJCQkweDQ4ICovCisJX191NjQgdGJfdXBkYXRlX2NvdW50OwkJLyogVGltZWJhc2UgYXRvbWljaXR5IGN0cgkweDUwICovCisJX191MzIgdHpfbWludXRlc3dlc3Q7CQkvKiBNaW51dGVzIHdlc3Qgb2YgR3JlZW53aWNoCTB4NTggKi8KKwlfX3UzMiB0el9kc3R0aW1lOwkJLyogVHlwZSBvZiBkc3QgY29ycmVjdGlvbgkweDVDICovCisJX191MzIgZGNhY2hlX3NpemU7CQkvKiBMMSBkLWNhY2hlIHNpemUJCTB4NjAgKi8KKwlfX3UzMiBkY2FjaGVfbGluZV9zaXplOwkJLyogTDEgZC1jYWNoZSBsaW5lIHNpemUJCTB4NjQgKi8KKwlfX3UzMiBpY2FjaGVfc2l6ZTsJCS8qIEwxIGktY2FjaGUgc2l6ZQkJMHg2OCAqLworCV9fdTMyIGljYWNoZV9saW5lX3NpemU7CQkvKiBMMSBpLWNhY2hlIGxpbmUgc2l6ZQkJMHg2QyAqLworCisJLyogdGhvc2UgYWRkaXRpb25hbCBvbmVzIGRvbid0IGhhdmUgdG8gYmUgbG9jYXRlZCBhbnl3aGVyZQorCSAqIHNwZWNpYWwgYXMgdGhleSB3ZXJlIG5vdCBwYXJ0IG9mIHRoZSBvcmlnaW5hbCBzeXN0ZW1jZmcKKwkgKi8KKwlfX3M2NCB3dG9tX2Nsb2NrX3NlYzsJCQkvKiBXYWxsIHRvIG1vbm90b25pYyBjbG9jayAqLworCV9fczMyIHd0b21fY2xvY2tfbnNlYzsKKyAgIAlfX3UzMiBzeXNjYWxsX21hcF82NFtTWVNDQUxMX01BUF9TSVpFXTsgLyogbWFwIG9mIHN5c2NhbGxzICAqLworICAgCV9fdTMyIHN5c2NhbGxfbWFwXzMyW1NZU0NBTExfTUFQX1NJWkVdOyAvKiBtYXAgb2Ygc3lzY2FsbHMgKi8KK307CisKKyNlbHNlIC8qIENPTkZJR19QUEM2NCAqLworCisvKgorICogQW5kIGhlcmUgaXMgdGhlIHNpbXBsZXIgMzIgYml0cyB2ZXJzaW9uCisgKi8KK3N0cnVjdCB2ZHNvX2RhdGEgeworCV9fdTY0IHRiX29yaWdfc3RhbXA7CQkvKiBUaW1lYmFzZSBhdCBib290CQkweDMwICovCisJX191NjQgdGJfdGlja3NfcGVyX3NlYzsJCS8qIFRpbWViYXNlIHRpY3MgLyBzZWMJCTB4MzggKi8KKwlfX3U2NCB0Yl90b194czsJCQkvKiBJbnZlcnNlIG9mIFRCIHRvIDJeMjAJMHg0MCAqLworCV9fdTY0IHN0YW1wX3hzZWM7CQkvKgkJCQkweDQ4ICovCisJX191MzIgdGJfdXBkYXRlX2NvdW50OwkJLyogVGltZWJhc2UgYXRvbWljaXR5IGN0cgkweDUwICovCisJX191MzIgdHpfbWludXRlc3dlc3Q7CQkvKiBNaW51dGVzIHdlc3Qgb2YgR3JlZW53aWNoCTB4NTggKi8KKwlfX3UzMiB0el9kc3R0aW1lOwkJLyogVHlwZSBvZiBkc3QgY29ycmVjdGlvbgkweDVDICovCisJX19zMzIgd3RvbV9jbG9ja19zZWM7CQkJLyogV2FsbCB0byBtb25vdG9uaWMgY2xvY2sgKi8KKwlfX3MzMiB3dG9tX2Nsb2NrX25zZWM7CisgICAJX191MzIgc3lzY2FsbF9tYXBfMzJbU1lTQ0FMTF9NQVBfU0laRV07IC8qIG1hcCBvZiBzeXNjYWxscyAqLworfTsKKworI2VuZGlmIC8qIENPTkZJR19QUEM2NCAqLworCisjaWZkZWYgX19LRVJORUxfXworZXh0ZXJuIHN0cnVjdCB2ZHNvX2RhdGEgKnZkc29fZGF0YTsKKyNlbmRpZgorCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKyNlbmRpZiAvKiBfU1lTVEVNQ0ZHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMveG1vbi5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy94bW9uLmgKaW5kZXggYWNlMjA3Mi4uNDNmNzEyOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy94bW9uLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy94bW9uLmgKQEAgLTcsNyArNyw2IEBACiBleHRlcm4gaW50IHhtb24oc3RydWN0IHB0X3JlZ3MgKmV4Y3ApOwogZXh0ZXJuIHZvaWQgeG1vbl9wcmludGYoY29uc3QgY2hhciAqZm10LCAuLi4pOwogZXh0ZXJuIHZvaWQgeG1vbl9pbml0KGludCk7Ci1leHRlcm4gdm9pZCB4bW9uX21hcF9zY2Modm9pZCk7CiAKICNlbmRpZgogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvY2FjaGUuaCBiL2luY2x1ZGUvYXNtLXBwYy9jYWNoZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTE1N2QwLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXBwYy9jYWNoZS5oCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotLyoKLSAqIGluY2x1ZGUvYXNtLXBwYy9jYWNoZS5oCi0gKi8KLSNpZmRlZiBfX0tFUk5FTF9fCi0jaWZuZGVmIF9fQVJDSF9QUENfQ0FDSEVfSAotI2RlZmluZSBfX0FSQ0hfUFBDX0NBQ0hFX0gKLQotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgotCi0vKiBieXRlcyBwZXIgTDEgY2FjaGUgbGluZSAqLwotI2lmIGRlZmluZWQoQ09ORklHXzh4eCkgfHwgZGVmaW5lZChDT05GSUdfNDAzR0NYKQotI2RlZmluZSBMMV9DQUNIRV9TSElGVAk0Ci0jZGVmaW5lIE1BWF9DT1BZX1BSRUZFVENICTEKLSNlbGlmIGRlZmluZWQoQ09ORklHX1BQQzY0QlJJREdFKQotI2RlZmluZSBMMV9DQUNIRV9TSElGVAk3Ci0jZGVmaW5lIE1BWF9DT1BZX1BSRUZFVENICTEKLSNlbHNlCi0jZGVmaW5lIEwxX0NBQ0hFX1NISUZUCTUKLSNkZWZpbmUgTUFYX0NPUFlfUFJFRkVUQ0gJNAotI2VuZGlmCi0KLSNkZWZpbmUJTDFfQ0FDSEVfQllURVMJKDEgPDwgTDFfQ0FDSEVfU0hJRlQpCi0KLSNkZWZpbmUJU01QX0NBQ0hFX0JZVEVTIEwxX0NBQ0hFX0JZVEVTCi0jZGVmaW5lIEwxX0NBQ0hFX1NISUZUX01BWCA3CS8qIGxhcmdlc3QgTDEgd2hpY2ggdGhpcyBhcmNoIHN1cHBvcnRzICovCi0KLSNkZWZpbmUJTDFfQ0FDSEVfQUxJR04oeCkgICAgICAgKCgoeCkrKEwxX0NBQ0hFX0JZVEVTLTEpKSZ+KEwxX0NBQ0hFX0JZVEVTLTEpKQotI2RlZmluZQlMMV9DQUNIRV9QQUdFUwkJOAotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotZXh0ZXJuIHZvaWQgY2xlYW5fZGNhY2hlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc3RvcCk7Ci1leHRlcm4gdm9pZCBmbHVzaF9kY2FjaGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBzdG9wKTsKLWV4dGVybiB2b2lkIGludmFsaWRhdGVfZGNhY2hlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc3RvcCk7Ci1leHRlcm4gdm9pZCBmbHVzaF9kY2FjaGVfYWxsKHZvaWQpOwotI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwotCi0vKiBwcmVwIHJlZ2lzdGVycyBmb3IgTDIgKi8KLSNkZWZpbmUgQ0FDSEVDUkJBICAgICAgIDB4ODAwMDA4MjMgICAgICAvKiBDYWNoZSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIGFkZHJlc3MgKi8KLSNkZWZpbmUgTDJDQUNIRV9NQVNLCTB4MDMJLyogTWFzayBmb3IgMiBMMiBDYWNoZSBiaXRzICovCi0jZGVmaW5lIEwyQ0FDSEVfNTEyS0IJMHgwMAkvKiA1MTJLQiAqLwotI2RlZmluZSBMMkNBQ0hFXzI1NktCCTB4MDEJLyogMjU2S0IgKi8KLSNkZWZpbmUgTDJDQUNIRV8xTUIJMHgwMgkvKiAxTUIgKi8KLSNkZWZpbmUgTDJDQUNIRV9OT05FCTB4MDMJLyogTk9ORSAqLwotI2RlZmluZSBMMkNBQ0hFX1BBUklUWSAgMHgwOCAgICAvKiBNYXNrIGZvciBMMiBDYWNoZSBQYXJpdHkgUHJvdGVjdGVkIGJpdCAqLwotCi0jaWZkZWYgQ09ORklHXzh4eAotLyogQ2FjaGUgY29udHJvbCBvbiB0aGUgTVBDOHh4IGlzIHByb3ZpZGVkIHRocm91Z2ggc29tZSBhZGRpdGlvbmFsCi0gKiBzcGVjaWFsIHB1cnBvc2UgcmVnaXN0ZXJzLgotICovCi0jZGVmaW5lIFNQUk5fSUNfQ1NUCTU2MAkvKiBJbnN0cnVjdGlvbiBjYWNoZSBjb250cm9sL3N0YXR1cyAqLwotI2RlZmluZSBTUFJOX0lDX0FEUgk1NjEJLyogQWRkcmVzcyBuZWVkZWQgZm9yIHNvbWUgY29tbWFuZHMgKi8KLSNkZWZpbmUgU1BSTl9JQ19EQVQJNTYyCS8qIFJlYWQtb25seSBkYXRhIHJlZ2lzdGVyICovCi0jZGVmaW5lIFNQUk5fRENfQ1NUCTU2OAkvKiBEYXRhIGNhY2hlIGNvbnRyb2wvc3RhdHVzICovCi0jZGVmaW5lIFNQUk5fRENfQURSCTU2OQkvKiBBZGRyZXNzIG5lZWRlZCBmb3Igc29tZSBjb21tYW5kcyAqLwotI2RlZmluZSBTUFJOX0RDX0RBVAk1NzAJLyogUmVhZC1vbmx5IGRhdGEgcmVnaXN0ZXIgKi8KLQotLyogQ29tbWFuZHMuICBPbmx5IHRoZSBmaXJzdCBmZXcgYXJlIGF2YWlsYWJsZSB0byB0aGUgaW5zdHJ1Y3Rpb24gY2FjaGUuCi0qLwotI2RlZmluZQlJRENfRU5BQkxFCTB4MDIwMDAwMDAJLyogQ2FjaGUgZW5hYmxlICovCi0jZGVmaW5lIElEQ19ESVNBQkxFCTB4MDQwMDAwMDAJLyogQ2FjaGUgZGlzYWJsZSAqLwotI2RlZmluZSBJRENfTERMQ0sJMHgwNjAwMDAwMAkvKiBMb2FkIGFuZCBsb2NrICovCi0jZGVmaW5lIElEQ19VTkxJTkUJMHgwODAwMDAwMAkvKiBVbmxvY2sgbGluZSAqLwotI2RlZmluZSBJRENfVU5BTEwJMHgwYTAwMDAwMAkvKiBVbmxvY2sgYWxsICovCi0jZGVmaW5lIElEQ19JTlZBTEwJMHgwYzAwMDAwMAkvKiBJbnZhbGlkYXRlIGFsbCAqLwotCi0jZGVmaW5lIERDX0ZMSU5FCTB4MGUwMDAwMDAJLyogRmx1c2ggZGF0YSBjYWNoZSBsaW5lICovCi0jZGVmaW5lIERDX1NGV1QJCTB4MDEwMDAwMDAJLyogU2V0IGZvcmNlZCB3cml0ZXRocm91Z2ggbW9kZSAqLwotI2RlZmluZSBEQ19DRldUCQkweDAzMDAwMDAwCS8qIENsZWFyIGZvcmNlZCB3cml0ZXRocm91Z2ggbW9kZSAqLwotI2RlZmluZSBEQ19TTEVTCQkweDA1MDAwMDAwCS8qIFNldCBsaXR0bGUgZW5kaWFuIHN3YXAgbW9kZSAqLwotI2RlZmluZSBEQ19DTEVTCQkweDA3MDAwMDAwCS8qIENsZWFyIGxpdHRsZSBlbmRpYW4gc3dhcCBtb2RlICovCi0KLS8qIFN0YXR1cy4KLSovCi0jZGVmaW5lIElEQ19FTkFCTEVECTB4ODAwMDAwMDAJLyogQ2FjaGUgaXMgZW5hYmxlZCAqLwotI2RlZmluZSBJRENfQ0VSUjEJMHgwMDIwMDAwMAkvKiBDYWNoZSBlcnJvciAxICovCi0jZGVmaW5lIElEQ19DRVJSMgkweDAwMTAwMDAwCS8qIENhY2hlIGVycm9yIDIgKi8KLSNkZWZpbmUgSURDX0NFUlIzCTB4MDAwODAwMDAJLyogQ2FjaGUgZXJyb3IgMyAqLwotCi0jZGVmaW5lIERDX0RGV1QJCTB4NDAwMDAwMDAJLyogRGF0YSBjYWNoZSBpcyBmb3JjZWQgd3JpdGUgdGhyb3VnaCAqLwotI2RlZmluZSBEQ19MRVMJCTB4MjAwMDAwMDAJLyogQ2FjaGVzIGFyZSBsaXR0bGUgZW5kaWFuIG1vZGUgKi8KLSNlbmRpZiAvKiBDT05GSUdfOHh4ICovCi0KLSNlbmRpZgotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9jYWNoZWZsdXNoLmggYi9pbmNsdWRlL2FzbS1wcGMvY2FjaGVmbHVzaC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YTI0M2VmLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXBwYy9jYWNoZWZsdXNoLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0vKgotICogaW5jbHVkZS9hc20tcHBjL2NhY2hlZmx1c2guaAotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KLSAqICAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0jaWZkZWYgX19LRVJORUxfXwotI2lmbmRlZiBfUFBDX0NBQ0hFRkxVU0hfSAotI2RlZmluZSBfUFBDX0NBQ0hFRkxVU0hfSAotCi0jaW5jbHVkZSA8bGludXgvbW0uaD4KLQotLyoKLSAqIE5vIGNhY2hlIGZsdXNoaW5nIGlzIHJlcXVpcmVkIHdoZW4gYWRkcmVzcyBtYXBwaW5ncyBhcmUKLSAqIGNoYW5nZWQsIGJlY2F1c2UgdGhlIGNhY2hlcyBvbiBQb3dlclBDcyBhcmUgcGh5c2ljYWxseQotICogYWRkcmVzc2VkLiAgLS0gcGF1bHVzCi0gKiBBbHNvLCB3aGVuIFNNUCB3ZSB1c2UgdGhlIGNvaGVyZW5jeSAoTSkgYml0IG9mIHRoZQotICogQkFUcyBhbmQgUFRFcy4gIC0tIENvcnQKLSAqLwotI2RlZmluZSBmbHVzaF9jYWNoZV9hbGwoKQkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBmbHVzaF9jYWNoZV9tbShtbSkJCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZmx1c2hfY2FjaGVfcmFuZ2Uodm1hLCBhLCBiKQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZsdXNoX2NhY2hlX3BhZ2Uodm1hLCBwLCBwZm4pCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZmx1c2hfaWNhY2hlX3BhZ2Uodm1hLCBwYWdlKQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZsdXNoX2NhY2hlX3ZtYXAoc3RhcnQsIGVuZCkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBmbHVzaF9jYWNoZV92dW5tYXAoc3RhcnQsIGVuZCkJZG8geyB9IHdoaWxlICgwKQotCi1leHRlcm4gdm9pZCBmbHVzaF9kY2FjaGVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSk7Ci0jZGVmaW5lIGZsdXNoX2RjYWNoZV9tbWFwX2xvY2sobWFwcGluZykJCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZmx1c2hfZGNhY2hlX21tYXBfdW5sb2NrKG1hcHBpbmcpCWRvIHsgfSB3aGlsZSAoMCkKLQotZXh0ZXJuIHZvaWQgZmx1c2hfaWNhY2hlX3JhbmdlKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOwotZXh0ZXJuIHZvaWQgZmx1c2hfaWNhY2hlX3VzZXJfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCXN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIGFkZHIsIGludCBsZW4pOwotCi0jZGVmaW5lIGNvcHlfdG9fdXNlcl9wYWdlKHZtYSwgcGFnZSwgdmFkZHIsIGRzdCwgc3JjLCBsZW4pIFwKLWRvIHsgbWVtY3B5KGRzdCwgc3JjLCBsZW4pOyBcCi0gICAgIGZsdXNoX2ljYWNoZV91c2VyX3JhbmdlKHZtYSwgcGFnZSwgdmFkZHIsIGxlbik7IFwKLX0gd2hpbGUgKDApCi0jZGVmaW5lIGNvcHlfZnJvbV91c2VyX3BhZ2Uodm1hLCBwYWdlLCB2YWRkciwgZHN0LCBzcmMsIGxlbikgXAotCW1lbWNweShkc3QsIHNyYywgbGVuKQotCi1leHRlcm4gdm9pZCBfX2ZsdXNoX2RjYWNoZV9pY2FjaGUodm9pZCAqcGFnZV92YSk7Ci1leHRlcm4gdm9pZCBfX2ZsdXNoX2RjYWNoZV9pY2FjaGVfcGh5cyh1bnNpZ25lZCBsb25nIHBoeXNhZGRyKTsKLWV4dGVybiB2b2lkIGZsdXNoX2RjYWNoZV9pY2FjaGVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSk7Ci0jZW5kaWYgLyogX1BQQ19DQUNIRUZMVVNIX0ggKi8KLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvY3VycmVudC5oIGIvaW5jbHVkZS9hc20tcHBjL2N1cnJlbnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGQ0MTUwMS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvY3VycmVudC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotI2lmZGVmIF9fS0VSTkVMX18KLSNpZm5kZWYgX1BQQ19DVVJSRU5UX0gKLSNkZWZpbmUgX1BQQ19DVVJSRU5UX0gKLQotLyoKLSAqIFdlIGtlZXAgYGN1cnJlbnQnIGluIHIyIGZvciBzcGVlZC4KLSAqLwotcmVnaXN0ZXIgc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyZW50IGFzbSAoInIyIik7Ci0KLSNlbmRpZiAvKiAhKF9QUENfQ1VSUkVOVF9IKSAqLwotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9tcGM4M3h4LmggYi9pbmNsdWRlL2FzbS1wcGMvbXBjODN4eC5oCmluZGV4IGJiMWIwNTcuLmNlMjEyMjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy9tcGM4M3h4LmgKKysrIGIvaW5jbHVkZS9hc20tcHBjL21wYzgzeHguaApAQCAtMTA3LDYgKzEwNyw3IEBACiAJTVBDODN4eF9TRUMyLAogCU1QQzgzeHhfVVNCMl9EUiwKIAlNUEM4M3h4X1VTQjJfTVBILAorCU1QQzgzeHhfTURJTywKIH07CiAKICNlbmRpZiAvKiBDT05GSUdfODN4eCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL3BhZ2UuaCBiL2luY2x1ZGUvYXNtLXBwYy9wYWdlLmgKaW5kZXggZmM0NGY3Yy4uNTM4ZTBjOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjL3BhZ2UuaAorKysgYi9pbmNsdWRlL2FzbS1wcGMvcGFnZS5oCkBAIC0xLDkgKzEsMTIgQEAKICNpZm5kZWYgX1BQQ19QQUdFX0gKICNkZWZpbmUgX1BQQ19QQUdFX0gKIAorI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGFzbS9hc20tY29tcGF0Lmg+CisKIC8qIFBBR0VfU0hJRlQgZGV0ZXJtaW5lcyB0aGUgcGFnZSBzaXplICovCiAjZGVmaW5lIFBBR0VfU0hJRlQJMTIKLSNkZWZpbmUgUEFHRV9TSVpFCSgxVUwgPDwgUEFHRV9TSElGVCkKKyNkZWZpbmUgUEFHRV9TSVpFCShBU01fQ09OU1QoMSkgPDwgUEFHRV9TSElGVCkKIAogLyoKICAqIFN1YnRsZTogdGhpcyBpcyBhbiBpbnQgKG5vdCBhbiB1bnNpZ25lZCBsb25nKSBhbmQgc28gaXQKQEAgLTE2OSw1ICsxNzIsOCBAQAogI2RlZmluZSBWTV9EQVRBX0RFRkFVTFRfRkxBR1MJKFZNX1JFQUQgfCBWTV9XUklURSB8IFZNX0VYRUMgfCBcCiAJCQkJIFZNX01BWVJFQUQgfCBWTV9NQVlXUklURSB8IFZNX01BWUVYRUMpCiAKKy8qIFdlIGRvIGRlZmluZSBBVF9TWVNJTkZPX0VIRFIgYnV0IGRvbid0IHVzZSB0aGUgZ2F0ZSBtZWNhbmlzbSAqLworI2RlZmluZSBfX0hBVkVfQVJDSF9HQVRFX0FSRUEJCTEKKwogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfUFBDX1BBR0VfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvY2FjaGUuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L2NhY2hlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyMTQwYTcuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tcHBjNjQvY2FjaGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLS8qCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCi0gKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0jaWZuZGVmIF9fQVJDSF9QUEM2NF9DQUNIRV9ICi0jZGVmaW5lIF9fQVJDSF9QUEM2NF9DQUNIRV9ICi0KLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4KLQotLyogYnl0ZXMgcGVyIEwxIGNhY2hlIGxpbmUgKi8KLSNkZWZpbmUgTDFfQ0FDSEVfU0hJRlQJNwotI2RlZmluZSBMMV9DQUNIRV9CWVRFUwkoMSA8PCBMMV9DQUNIRV9TSElGVCkKLQotI2RlZmluZSBTTVBfQ0FDSEVfQllURVMgTDFfQ0FDSEVfQllURVMKLSNkZWZpbmUgTDFfQ0FDSEVfU0hJRlRfTUFYIDcJLyogbGFyZ2VzdCBMMSB3aGljaCB0aGlzIGFyY2ggc3VwcG9ydHMgKi8KLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLQotc3RydWN0IHBwYzY0X2NhY2hlcyB7Ci0JdTMyCWRzaXplOwkJCS8qIEwxIGQtY2FjaGUgc2l6ZSAqLwotCXUzMglkbGluZV9zaXplOwkJLyogTDEgZC1jYWNoZSBsaW5lIHNpemUJKi8KLQl1MzIJbG9nX2RsaW5lX3NpemU7Ci0JdTMyCWRsaW5lc19wZXJfcGFnZTsKLQl1MzIJaXNpemU7CQkJLyogTDEgaS1jYWNoZSBzaXplICovCi0JdTMyCWlsaW5lX3NpemU7CQkvKiBMMSBpLWNhY2hlIGxpbmUgc2l6ZQkqLwotCXUzMglsb2dfaWxpbmVfc2l6ZTsKLQl1MzIJaWxpbmVzX3Blcl9wYWdlOwotfTsKLQotZXh0ZXJuIHN0cnVjdCBwcGM2NF9jYWNoZXMgcHBjNjRfY2FjaGVzOwotCi0jZW5kaWYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9jYWNoZWZsdXNoLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9jYWNoZWZsdXNoLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmYmMwOGIuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tcHBjNjQvY2FjaGVmbHVzaC5oCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotI2lmbmRlZiBfUFBDNjRfQ0FDSEVGTFVTSF9ICi0jZGVmaW5lIF9QUEM2NF9DQUNIRUZMVVNIX0gKLQotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8YXNtL2NwdXRhYmxlLmg+Ci0KLS8qCi0gKiBObyBjYWNoZSBmbHVzaGluZyBpcyByZXF1aXJlZCB3aGVuIGFkZHJlc3MgbWFwcGluZ3MgYXJlCi0gKiBjaGFuZ2VkLCBiZWNhdXNlIHRoZSBjYWNoZXMgb24gUG93ZXJQQ3MgYXJlIHBoeXNpY2FsbHkKLSAqIGFkZHJlc3NlZC4KLSAqLwotI2RlZmluZSBmbHVzaF9jYWNoZV9hbGwoKQkJCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZmx1c2hfY2FjaGVfbW0obW0pCQkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBmbHVzaF9jYWNoZV9yYW5nZSh2bWEsIHN0YXJ0LCBlbmQpCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZmx1c2hfY2FjaGVfcGFnZSh2bWEsIHZtYWRkciwgcGZuKQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZsdXNoX2ljYWNoZV9wYWdlKHZtYSwgcGFnZSkJCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZmx1c2hfY2FjaGVfdm1hcChzdGFydCwgZW5kKQkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBmbHVzaF9jYWNoZV92dW5tYXAoc3RhcnQsIGVuZCkJCWRvIHsgfSB3aGlsZSAoMCkKLQotZXh0ZXJuIHZvaWQgZmx1c2hfZGNhY2hlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpOwotI2RlZmluZSBmbHVzaF9kY2FjaGVfbW1hcF9sb2NrKG1hcHBpbmcpCQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZsdXNoX2RjYWNoZV9tbWFwX3VubG9jayhtYXBwaW5nKQlkbyB7IH0gd2hpbGUgKDApCi0KLWV4dGVybiB2b2lkIF9fZmx1c2hfaWNhY2hlX3JhbmdlKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOwotZXh0ZXJuIHZvaWQgZmx1c2hfaWNhY2hlX3VzZXJfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCQkJICAgIHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkJICAgIGludCBsZW4pOwotCi1leHRlcm4gdm9pZCBmbHVzaF9kY2FjaGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBzdG9wKTsKLWV4dGVybiB2b2lkIGZsdXNoX2RjYWNoZV9waHlzX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc3RvcCk7Ci1leHRlcm4gdm9pZCBmbHVzaF9pbnZhbF9kY2FjaGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBzdG9wKTsKLQotI2RlZmluZSBjb3B5X3RvX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIHZhZGRyLCBkc3QsIHNyYywgbGVuKSBcCi1kbyB7IG1lbWNweShkc3QsIHNyYywgbGVuKTsgXAotICAgICBmbHVzaF9pY2FjaGVfdXNlcl9yYW5nZSh2bWEsIHBhZ2UsIHZhZGRyLCBsZW4pOyBcCi19IHdoaWxlICgwKQotI2RlZmluZSBjb3B5X2Zyb21fdXNlcl9wYWdlKHZtYSwgcGFnZSwgdmFkZHIsIGRzdCwgc3JjLCBsZW4pIFwKLQltZW1jcHkoZHN0LCBzcmMsIGxlbikKLQotZXh0ZXJuIHZvaWQgX19mbHVzaF9kY2FjaGVfaWNhY2hlKHZvaWQgKnBhZ2VfdmEpOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfaWNhY2hlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc3RvcCkKLXsKLQlpZiAoIWNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX0NPSEVSRU5UX0lDQUNIRSkpCi0JCV9fZmx1c2hfaWNhY2hlX3JhbmdlKHN0YXJ0LCBzdG9wKTsKLX0KLQotI2VuZGlmIC8qIF9QUEM2NF9DQUNIRUZMVVNIX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L2N1cnJlbnQuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L2N1cnJlbnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTJkZGM2MC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1wcGM2NC9jdXJyZW50LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0jaWZuZGVmIF9QUEM2NF9DVVJSRU5UX0gKLSNkZWZpbmUgX1BQQzY0X0NVUlJFTlRfSAotCi0jaW5jbHVkZSA8YXNtL3BhY2EuaD4KLQotLyoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KLSAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2RlZmluZSBnZXRfY3VycmVudCgpICAgKGdldF9wYWNhKCktPl9fY3VycmVudCkKLSNkZWZpbmUgY3VycmVudCAgICAgICAgIGdldF9jdXJyZW50KCkKLQotI2VuZGlmIC8qICEoX1BQQzY0X0NVUlJFTlRfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L2VlaC5oIGIvaW5jbHVkZS9hc20tcHBjNjQvZWVoLmgKaW5kZXggNDBjOGViNS4uODlmMjZhYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjNjQvZWVoLmgKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvZWVoLmgKQEAgLTEsNCArMSw0IEBACi0vKiAKKy8qCiAgKiBlZWguaAogICogQ29weXJpZ2h0IChDKSAyMDAxICBEYXZlIEVuZ2VicmV0c2VuICYgVG9kZCBJbmdsZXR0IElCTSBDb3Jwb3JhdGlvbi4KICAqCkBAIC02LDEyICs2LDEyIEBACiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKICAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKiAKKyAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICogCisgKgogICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKQEAgLTI3LDggKzI3LDYgQEAKIAogc3RydWN0IHBjaV9kZXY7CiBzdHJ1Y3QgZGV2aWNlX25vZGU7Ci1zdHJ1Y3QgZGV2aWNlX25vZGU7Ci1zdHJ1Y3Qgbm90aWZpZXJfYmxvY2s7CiAKICNpZmRlZiBDT05GSUdfRUVICiAKQEAgLTM3LDYgKzM1LDEwIEBACiAjZGVmaW5lIEVFSF9NT0RFX05PQ0hFQ0sJKDE8PDEpCiAjZGVmaW5lIEVFSF9NT0RFX0lTT0xBVEVECSgxPDwyKQogCisvKiBNYXggbnVtYmVyIG9mIEVFSCBmcmVlemVzIGFsbG93ZWQgYmVmb3JlIHdlIGNvbnNpZGVyIHRoZSBkZXZpY2UKKyAqIHRvIGJlIHBlcm1hbmVudGx5IGRpc2FibGVkLiAqLworI2RlZmluZSBFRUhfTUFYX0FMTE9XRURfRlJFRVpFUyA1CisKIHZvaWQgX19pbml0IGVlaF9pbml0KHZvaWQpOwogdW5zaWduZWQgbG9uZyBlZWhfY2hlY2tfZmFpbHVyZShjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKnRva2VuLAogCQkJCXVuc2lnbmVkIGxvbmcgdmFsKTsKQEAgLTU5LDM2ICs2MSwxNCBAQAogICogZWVoX3JlbW92ZV9kZXZpY2UgLSB1bmRvIEVFSCBzZXR1cCBmb3IgdGhlIGluZGljYXRlZCBwY2kgZGV2aWNlCiAgKiBAZGV2OiBwY2kgZGV2aWNlIHRvIGJlIHJlbW92ZWQKICAqCi0gKiBUaGlzIHJvdXRpbmUgc2hvdWxkIGJlIHdoZW4gYSBkZXZpY2UgaXMgcmVtb3ZlZCBmcm9tIGEgcnVubmluZwotICogc3lzdGVtIChlLmcuIGJ5IGhvdHBsdWcgb3IgZGxwYXIpLgorICogVGhpcyByb3V0aW5lIHNob3VsZCBiZSBjYWxsZWQgd2hlbiBhIGRldmljZSBpcyByZW1vdmVkIGZyb20KKyAqIGEgcnVubmluZyBzeXN0ZW0gKGUuZy4gYnkgaG90cGx1ZyBvciBkbHBhcikuICBJdCB1bnJlZ2lzdGVycworICogdGhlIFBDSSBkZXZpY2UgZnJvbSB0aGUgRUVIIHN1YnN5c3RlbS4gIEkvTyBlcnJvcnMgYWZmZWN0aW5nCisgKiB0aGlzIGRldmljZSB3aWxsIG5vIGxvbmdlciBiZSBkZXRlY3RlZCBhZnRlciB0aGlzIGNhbGw7IHRodXMsCisgKiBpL28gZXJyb3JzIGFmZmVjdGluZyB0aGlzIHNsb3QgbWF5IGxlYXZlIHRoaXMgZGV2aWNlIHVudXNhYmxlLgogICovCiB2b2lkIGVlaF9yZW1vdmVfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICopOwogCi0jZGVmaW5lIEVFSF9ESVNBQkxFCQkwCi0jZGVmaW5lIEVFSF9FTkFCTEUJCTEKLSNkZWZpbmUgRUVIX1JFTEVBU0VfTE9BRFNUT1JFCTIKLSNkZWZpbmUgRUVIX1JFTEVBU0VfRE1BCQkzCi0KLS8qKgotICogTm90aWZpZXIgZXZlbnQgZmxhZ3MuCi0gKi8KLSNkZWZpbmUgRUVIX05PVElGWV9GUkVFWkUgIDEKLQotLyoqIEVFSCBldmVudCAtLSBzdHJ1Y3R1cmUgaG9sZGluZyBwY2kgc2xvdCBkYXRhIHRoYXQgZGVzY3JpYmVzCi0gKiAgYSBjaGFuZ2UgaW4gdGhlIGlzb2xhdGlvbiBzdGF0dXMgb2YgYSBQQ0kgc2xvdC4gIEEgcG9pbnRlcgotICogIHRvIHRoaXMgc3RydWN0IGlzIHBhc3NlZCBhcyB0aGUgZGF0YSBwb2ludGVyIGluIGEgbm90aWZ5IGNhbGxiYWNrLgotICovCi1zdHJ1Y3QgZWVoX2V2ZW50IHsKLQlzdHJ1Y3QgbGlzdF9oZWFkICAgICBsaXN0OwotCXN0cnVjdCBwY2lfZGV2ICAgICAgICpkZXY7Ci0Jc3RydWN0IGRldmljZV9ub2RlICAgKmRuOwotCWludCAgICAgICAgICAgICAgICAgIHJlc2V0X3N0YXRlOwotfTsKLQotLyoqIFJlZ2lzdGVyIHRvIGZpbmQgb3V0IGFib3V0IEVFSCBldmVudHMuICovCi1pbnQgZWVoX3JlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpOwotaW50IGVlaF91bnJlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpOwotCiAvKioKICAqIEVFSF9QT1NTSUJMRV9FUlJPUigpIC0tIHRlc3QgZm9yIHBvc3NpYmxlIE1NSU8gZmFpbHVyZS4KICAqCkBAIC0xMjksNyArMTA5LDcgQEAKICNkZWZpbmUgRUVIX0lPX0VSUk9SX1ZBTFVFKHNpemUpICgtMVVMKQogI2VuZGlmIC8qIENPTkZJR19FRUggKi8KIAotLyogCisvKgogICogTU1JTyByZWFkL3dyaXRlIG9wZXJhdGlvbnMgd2l0aCBFRUggc3VwcG9ydC4KICAqLwogc3RhdGljIGlubGluZSB1OCBlZWhfcmVhZGIoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvbW11LmggYi9pbmNsdWRlL2FzbS1wcGM2NC9tbXUuaAppbmRleCA0YzE4YTVjLi4xYTdlMGFmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGM2NC9tbXUuaAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9tbXUuaApAQCAtMTQsNyArMTQsNyBAQAogI2RlZmluZSBfUFBDNjRfTU1VX0hfCiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLSNpbmNsdWRlIDxhc20vcHBjX2FzbS5oPiAvKiBmb3IgQVNNX0NPTlNUICovCisjaW5jbHVkZSA8YXNtL2FzbS1jb21wYXQuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogCiAvKgpAQCAtMjI0LDkgKzIyNCwxMiBAQAogCQkJICAgICB1bnNpZ25lZCBsb25nIHBzdGFydCwgdW5zaWduZWQgbG9uZyBtb2RlLAogCQkJICAgICBpbnQgcHNpemUpOwogCitleHRlcm4gdm9pZCBodGFiX2luaXRpYWxpemUodm9pZCk7CitleHRlcm4gdm9pZCBodGFiX2luaXRpYWxpemVfc2Vjb25kYXJ5KHZvaWQpOwogZXh0ZXJuIHZvaWQgaHB0ZV9pbml0X25hdGl2ZSh2b2lkKTsKIGV4dGVybiB2b2lkIGhwdGVfaW5pdF9scGFyKHZvaWQpOwogZXh0ZXJuIHZvaWQgaHB0ZV9pbml0X2lTZXJpZXModm9pZCk7CitleHRlcm4gdm9pZCBtbV9pbml0X3BwYzY0KHZvaWQpOwogCiBleHRlcm4gbG9uZyBwU2VyaWVzX2xwYXJfaHB0ZV9pbnNlcnQodW5zaWduZWQgbG9uZyBocHRlX2dyb3VwLAogCQkJCSAgICAgdW5zaWduZWQgbG9uZyB2YSwgdW5zaWduZWQgbG9uZyBwcnBuLApAQCAtMjQ1LDYgKzI0OCw3IEBACiAKIGV4dGVybiB2b2lkIHN0YWJzX2FsbG9jKHZvaWQpOwogZXh0ZXJuIHZvaWQgc2xiX2luaXRpYWxpemUodm9pZCk7CitleHRlcm4gdm9pZCBzdGFiX2luaXRpYWxpemUodW5zaWduZWQgbG9uZyBzdGFiKTsKIAogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9tbXpvbmUuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L21tem9uZS5oCmluZGV4IDgwYTcwOGUuLjU0OTU4ZDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYzY0L21tem9uZS5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L21tem9uZS5oCkBAIC04LDE1ICs4LDE0IEBACiAjZGVmaW5lIF9BU01fTU1aT05FX0hfCiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLSNpbmNsdWRlIDxhc20vc21wLmg+CiAKLS8qIGdlbmVyaWMgbm9uLWxpbmVhciBtZW1vcnkgc3VwcG9ydDoKKy8qCisgKiBnZW5lcmljIG5vbi1saW5lYXIgbWVtb3J5IHN1cHBvcnQ6CiAgKgogICogMSkgd2Ugd2lsbCBub3Qgc3BsaXQgbWVtb3J5IGludG8gbW9yZSBjaHVua3MgdGhhbiB3aWxsIGZpdCBpbnRvIHRoZQogICogICAgZmxhZ3MgZmllbGQgb2YgdGhlIHN0cnVjdCBwYWdlCiAgKi8KIAotCiAjaWZkZWYgQ09ORklHX05FRURfTVVMVElQTEVfTk9ERVMKIAogZXh0ZXJuIHN0cnVjdCBwZ2xpc3RfZGF0YSAqbm9kZV9kYXRhW107CkBAIC0zMCwzNiArMjksMTEgQEAKICAqLwogCiBleHRlcm4gaW50IG51bWFfY3B1X2xvb2t1cF90YWJsZVtdOwotZXh0ZXJuIGNoYXIgKm51bWFfbWVtb3J5X2xvb2t1cF90YWJsZTsKIGV4dGVybiBjcHVtYXNrX3QgbnVtYV9jcHVtYXNrX2xvb2t1cF90YWJsZVtdOwotZXh0ZXJuIGludCBucl9jcHVzX2luX25vZGVbXTsKLQotLyogMTZNQiByZWdpb25zICovCi0jZGVmaW5lIE1FTU9SWV9JTkNSRU1FTlRfU0hJRlQgMjQKLSNkZWZpbmUgTUVNT1JZX0lOQ1JFTUVOVCAoMVVMIDw8IE1FTU9SWV9JTkNSRU1FTlRfU0hJRlQpCi0KLS8qIE5VTUEgZGVidWdnaW5nLCB3aWxsIG5vdCB3b3JrIG9uIGEgRExQQVIgbWFjaGluZSAqLwotI3VuZGVmIERFQlVHX05VTUEKLQotc3RhdGljIGlubGluZSBpbnQgcGFfdG9fbmlkKHVuc2lnbmVkIGxvbmcgcGEpCi17Ci0JaW50IG5pZDsKLQotCW5pZCA9IG51bWFfbWVtb3J5X2xvb2t1cF90YWJsZVtwYSA+PiBNRU1PUllfSU5DUkVNRU5UX1NISUZUXTsKLQotI2lmZGVmIERFQlVHX05VTUEKLQkvKiB0aGUgcGh5c2ljYWwgYWRkcmVzcyBwYXNzZWQgaW4gaXMgbm90IGluIHRoZSBtYXAgZm9yIHRoZSBzeXN0ZW0gKi8KLQlpZiAobmlkID09IC0xKSB7Ci0JCXByaW50aygiYmFkIGFkZHJlc3M6ICVseFxuIiwgcGEpOwotCQlCVUcoKTsKLQl9CisjaWZkZWYgQ09ORklHX01FTU9SWV9IT1RQTFVHCitleHRlcm4gdW5zaWduZWQgbG9uZyBtYXhfcGZuOwogI2VuZGlmCiAKLQlyZXR1cm4gbmlkOwotfQotCi0jZGVmaW5lIG5vZGVfbG9jYWxucihwZm4sIG5pZCkJKChwZm4pIC0gTk9ERV9EQVRBKG5pZCktPm5vZGVfc3RhcnRfcGZuKQotCiAvKgogICogRm9sbG93aW5nIGFyZSBtYWNyb3MgdGhhdCBlYWNoIG51bWEgaW1wbG1lbnRhdGlvbiBtdXN0IGRlZmluZS4KICAqLwpAQCAtNjcsMzkgKzQxLDEwIEBACiAjZGVmaW5lIG5vZGVfc3RhcnRfcGZuKG5pZCkJKE5PREVfREFUQShuaWQpLT5ub2RlX3N0YXJ0X3BmbikKICNkZWZpbmUgbm9kZV9lbmRfcGZuKG5pZCkJKE5PREVfREFUQShuaWQpLT5ub2RlX2VuZF9wZm4pCiAKLSNpZmRlZiBDT05GSUdfRElTQ09OVElHTUVNCi0KLS8qCi0gKiBHaXZlbiBhIGtlcm5lbCBhZGRyZXNzLCBmaW5kIHRoZSBob21lIG5vZGUgb2YgdGhlIHVuZGVybHlpbmcgbWVtb3J5LgotICovCi0jZGVmaW5lIGt2YWRkcl90b19uaWQoa2FkZHIpCXBhX3RvX25pZChfX3BhKGthZGRyKSkKLQotI2RlZmluZSBwZm5fdG9fbmlkKHBmbikJCXBhX3RvX25pZCgodW5zaWduZWQgbG9uZykocGZuKSA8PCBQQUdFX1NISUZUKQotCi0vKiBXcml0dGVuIHRoaXMgd2F5IHRvIGF2b2lkIGV2YWx1YXRpbmcgYXJndW1lbnRzIHR3aWNlICovCi0jZGVmaW5lIGRpc2NvbnRpZ21lbV9wZm5fdG9fcGFnZShwZm4pIFwKLSh7IFwKLQl1bnNpZ25lZCBsb25nIF9fdG1wID0gcGZuOyBcCi0JKE5PREVfREFUQShwZm5fdG9fbmlkKF9fdG1wKSktPm5vZGVfbWVtX21hcCArIFwKLQkgbm9kZV9sb2NhbG5yKF9fdG1wLCBwZm5fdG9fbmlkKF9fdG1wKSkpOyBcCi19KQotCi0jZGVmaW5lIGRpc2NvbnRpZ21lbV9wYWdlX3RvX3BmbihwKSBcCi0oeyBcCi0Jc3RydWN0IHBhZ2UgKl9fdG1wID0gcDsgXAotCSgoKF9fdG1wKSAtIHBhZ2Vfem9uZShfX3RtcCktPnpvbmVfbWVtX21hcCkgKyBcCi0JIHBhZ2Vfem9uZShfX3RtcCktPnpvbmVfc3RhcnRfcGZuKTsgXAotfSkKLQotLyogWFhYIGZpeCBmb3IgZGlzY29udGlndW91cyBwaHlzaWNhbCBtZW1vcnkgKi8KLSNkZWZpbmUgZGlzY29udGlnbWVtX3Bmbl92YWxpZChwZm4pCQkoKHBmbikgPCBudW1fcGh5c3BhZ2VzKQotCi0jZW5kaWYgLyogQ09ORklHX0RJU0NPTlRJR01FTSAqLwotCiAjZW5kaWYgLyogQ09ORklHX05FRURfTVVMVElQTEVfTk9ERVMgKi8KIAogI2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfRUFSTFlfUEZOX1RPX05JRAotI2RlZmluZSBlYXJseV9wZm5fdG9fbmlkKHBmbikgIHBhX3RvX25pZCgoKHVuc2lnbmVkIGxvbmcpcGZuKSA8PCBQQUdFX1NISUZUKQorZXh0ZXJuIGludCBfX2luaXQgZWFybHlfcGZuX3RvX25pZCh1bnNpZ25lZCBsb25nIHBmbik7CiAjZW5kaWYKIAogI2VuZGlmIC8qIF9BU01fTU1aT05FX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9wYWdlLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9wYWdlLmgKaW5kZXggODJjZTE4Ny4uM2VmYzMyOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjNjQvcGFnZS5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L3BhZ2UuaApAQCAtMTEsNyArMTEsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLSNpbmNsdWRlIDxhc20vcHBjX2FzbS5oPiAvKiBmb3IgQVNNX0NPTlNUICovCisjaW5jbHVkZSA8YXNtL2FzbS1jb21wYXQuaD4KIAogLyoKICAqIFdlIHN1cHBvcnQgZWl0aGVyIDRrIG9yIDY0ayBzb2Z0d2FyZSBwYWdlIHNpemUuIFdoZW4gdXNpbmcgNjRrIHBhZ2VzCkBAIC0yNzksMTEgKzI3OSw2IEBACiAKICNkZWZpbmUgX192YSh4KSAoKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKHgpICsgS0VSTkVMQkFTRSkpCiAKLSNpZmRlZiBDT05GSUdfRElTQ09OVElHTUVNCi0jZGVmaW5lIHBhZ2VfdG9fcGZuKHBhZ2UpCWRpc2NvbnRpZ21lbV9wYWdlX3RvX3BmbihwYWdlKQotI2RlZmluZSBwZm5fdG9fcGFnZShwZm4pCWRpc2NvbnRpZ21lbV9wZm5fdG9fcGFnZShwZm4pCi0jZGVmaW5lIHBmbl92YWxpZChwZm4pCQlkaXNjb250aWdtZW1fcGZuX3ZhbGlkKHBmbikKLSNlbmRpZgogI2lmZGVmIENPTkZJR19GTEFUTUVNCiAjZGVmaW5lIHBmbl90b19wYWdlKHBmbikJKG1lbV9tYXAgKyAocGZuKSkKICNkZWZpbmUgcGFnZV90b19wZm4ocGFnZSkJKCh1bnNpZ25lZCBsb25nKSgocGFnZSkgLSBtZW1fbWFwKSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L3BjaS1icmlkZ2UuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L3BjaS1icmlkZ2UuaAppbmRleCA2MGNmOGM4Li5lZmJkYWVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGM2NC9wY2ktYnJpZGdlLmgKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvcGNpLWJyaWRnZS5oCkBAIC02Myw3ICs2Myw2IEBACiAJaW50CWRldmZuOwkJCS8qIGZvciBwY2kgZGV2aWNlcyAqLwogCWludAllZWhfbW9kZTsJCS8qIFNlZSBlZWguaCBmb3IgcG9zc2libGUgRUVIX01PREVzICovCiAJaW50CWVlaF9jb25maWdfYWRkcjsKLQlpbnQJZWVoX2NhcGFibGU7CQkvKiBmcm9tIGZpcm13YXJlICovCiAJaW50IAllZWhfY2hlY2tfY291bnQ7CS8qICMgdGltZXMgZHJpdmVyIGlnbm9yZWQgZXJyb3IgKi8KIAlpbnQgCWVlaF9mcmVlemVfY291bnQ7CS8qICMgdGltZXMgdGhpcyBkZXZpY2UgZnJvemUgdXAuICovCiAJaW50CWVlaF9pc19icmlkZ2U7CQkvKiBkZXZpY2UgaXMgcGNpLXRvLXBjaSBicmlkZ2UgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L3BnYWxsb2MuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L3BnYWxsb2MuaAppbmRleCA5OGRhMGU0Li5kY2YzNjIyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGM2NC9wZ2FsbG9jLmgKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvcGdhbGxvYy5oCkBAIC0xMCw4ICsxMCw4IEBACiAKICNpZmRlZiBDT05GSUdfUFBDXzY0S19QQUdFUwogI2RlZmluZSBQVEVfQ0FDSEVfTlVNCTAKLSNkZWZpbmUgUE1EX0NBQ0hFX05VTQkwCi0jZGVmaW5lIFBHRF9DQUNIRV9OVU0JMQorI2RlZmluZSBQTURfQ0FDSEVfTlVNCTEKKyNkZWZpbmUgUEdEX0NBQ0hFX05VTQkyCiAjZWxzZQogI2RlZmluZSBQVEVfQ0FDSEVfTlVNCTAKICNkZWZpbmUgUE1EX0NBQ0hFX05VTQkxCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9wcm9tLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9wcm9tLmgKaW5kZXggNzZiYjAyNi4uZGRmZTE4NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjNjQvcHJvbS5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L3Byb20uaApAQCAtMjA0LDYgKzIwNCw4IEBACiBleHRlcm4gdW5zaWduZWQgbG9uZyBwcm9tX2luaXQodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywKIAl1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKIGV4dGVybiB2b2lkIGZpbmlzaF9kZXZpY2VfdHJlZSh2b2lkKTsKK2V4dGVybiB2b2lkIHVuZmxhdHRlbl9kZXZpY2VfdHJlZSh2b2lkKTsKK2V4dGVybiB2b2lkIGVhcmx5X2luaXRfZGV2dHJlZSh2b2lkICopOwogZXh0ZXJuIGludCBkZXZpY2VfaXNfY29tcGF0aWJsZShzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldmljZSwgY29uc3QgY2hhciAqKTsKIGV4dGVybiBpbnQgbWFjaGluZV9pc19jb21wYXRpYmxlKGNvbnN0IGNoYXIgKmNvbXBhdCk7CiBleHRlcm4gdW5zaWduZWQgY2hhciAqZ2V0X3Byb3BlcnR5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwgY29uc3QgY2hhciAqbmFtZSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L3NpZ25hbC5oIGIvaW5jbHVkZS9hc20tcHBjNjQvc2lnbmFsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzMmRmN2RkLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXBwYzY0L3NpZ25hbC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTMyICswLDAgQEAKLSNpZm5kZWYgX0FTTVBQQzY0X1NJR05BTF9ICi0jZGVmaW5lIF9BU01QUEM2NF9TSUdOQUxfSAotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgotI2luY2x1ZGUgPGFzbS9zaWdpbmZvLmg+Ci0KLS8qIEF2b2lkIHRvbyBtYW55IGhlYWRlciBvcmRlcmluZyBwcm9ibGVtcy4gICovCi1zdHJ1Y3Qgc2lnaW5mbzsKLQotI2RlZmluZSBfTlNJRwkJNjQKLSNkZWZpbmUgX05TSUdfQlBXCTY0Ci0jZGVmaW5lIF9OU0lHX1dPUkRTCShfTlNJRyAvIF9OU0lHX0JQVykKLQotdHlwZWRlZiB1bnNpZ25lZCBsb25nIG9sZF9zaWdzZXRfdDsJCS8qIGF0IGxlYXN0IDMyIGJpdHMgKi8KLQotdHlwZWRlZiBzdHJ1Y3QgewotCXVuc2lnbmVkIGxvbmcgc2lnW19OU0lHX1dPUkRTXTsKLX0gc2lnc2V0X3Q7Ci0KLSNkZWZpbmUgU0lHSFVQCQkgMQotI2RlZmluZSBTSUdJTlQJCSAyCi0jZGVmaW5lIFNJR1FVSVQJCSAzCi0jZGVmaW5lIFNJR0lMTAkJIDQKLSNkZWZpbmUgU0lHVFJBUAkJIDUKLSNkZWZpbmUgU0lHQUJSVAkJIDYKLSNkZWZpbmUgU0lHSU9UCQkgNgotI2RlZmluZSBTSUdCVVMJCSA3Ci0jZGVmaW5lIFNJR0ZQRQkJIDgKLSNkZWZpbmUgU0lHS0lMTAkJIDkKLSNkZWZpbmUgU0lHVVNSMQkJMTAKLSNkZWZpbmUgU0lHU0VHVgkJMTEKLSNkZWZpbmUgU0lHVVNSMgkJMTIKLSNkZWZpbmUgU0lHUElQRQkJMTMKLSNkZWZpbmUgU0lHQUxSTQkJMTQKLSNkZWZpbmUgU0lHVEVSTQkJMTUKLSNkZWZpbmUgU0lHU1RLRkxUCTE2Ci0jZGVmaW5lIFNJR0NITEQJCTE3Ci0jZGVmaW5lIFNJR0NPTlQJCTE4Ci0jZGVmaW5lIFNJR1NUT1AJCTE5Ci0jZGVmaW5lIFNJR1RTVFAJCTIwCi0jZGVmaW5lIFNJR1RUSU4JCTIxCi0jZGVmaW5lIFNJR1RUT1UJCTIyCi0jZGVmaW5lIFNJR1VSRwkJMjMKLSNkZWZpbmUgU0lHWENQVQkJMjQKLSNkZWZpbmUgU0lHWEZTWgkJMjUKLSNkZWZpbmUgU0lHVlRBTFJNCTI2Ci0jZGVmaW5lIFNJR1BST0YJCTI3Ci0jZGVmaW5lIFNJR1dJTkNICTI4Ci0jZGVmaW5lIFNJR0lPCQkyOQotI2RlZmluZSBTSUdQT0xMCQlTSUdJTwotLyoKLSNkZWZpbmUgU0lHTE9TVAkJMjkKLSovCi0jZGVmaW5lIFNJR1BXUgkJMzAKLSNkZWZpbmUgU0lHU1lTCQkzMQotI2RlZmluZQlTSUdVTlVTRUQJMzEKLQotLyogVGhlc2Ugc2hvdWxkIG5vdCBiZSBjb25zaWRlcmVkIGNvbnN0YW50cyBmcm9tIHVzZXJsYW5kLiAgKi8KLSNkZWZpbmUgU0lHUlRNSU4JMzIKLSNkZWZpbmUgU0lHUlRNQVgJX05TSUcKLQotLyoKLSAqIFNBX0ZMQUdTIHZhbHVlczoKLSAqCi0gKiBTQV9PTlNUQUNLIGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLCBidXQgd2lsbCBhbGxvdyBzaWdhbHRzdGFjaygyKS4KLSAqIFNBX0lOVEVSUlVQVCBpcyBhIG5vLW9wLCBidXQgbGVmdCBkdWUgdG8gaGlzdG9yaWNhbCByZWFzb25zLiBVc2UgdGhlCi0gKiBTQV9SRVNUQVJUIGZsYWcgdG8gZ2V0IHJlc3RhcnRpbmcgc2lnbmFscyAod2hpY2ggd2VyZSB0aGUgZGVmYXVsdCBsb25nIGFnbykKLSAqIFNBX05PQ0xEU1RPUCBmbGFnIHRvIHR1cm4gb2ZmIFNJR0NITEQgd2hlbiBjaGlsZHJlbiBzdG9wLgotICogU0FfUkVTRVRIQU5EIGNsZWFycyB0aGUgaGFuZGxlciB3aGVuIHRoZSBzaWduYWwgaXMgZGVsaXZlcmVkLgotICogU0FfTk9DTERXQUlUIGZsYWcgb24gU0lHQ0hMRCB0byBpbmhpYml0IHpvbWJpZXMuCi0gKiBTQV9OT0RFRkVSIHByZXZlbnRzIHRoZSBjdXJyZW50IHNpZ25hbCBmcm9tIGJlaW5nIG1hc2tlZCBpbiB0aGUgaGFuZGxlci4KLSAqCi0gKiBTQV9PTkVTSE9UIGFuZCBTQV9OT01BU0sgYXJlIHRoZSBoaXN0b3JpY2FsIExpbnV4IG5hbWVzIGZvciB0aGUgU2luZ2xlCi0gKiBVbml4IG5hbWVzIFJFU0VUSEFORCBhbmQgTk9ERUZFUiByZXNwZWN0aXZlbHkuCi0gKi8KLSNkZWZpbmUgU0FfTk9DTERTVE9QCTB4MDAwMDAwMDF1Ci0jZGVmaW5lIFNBX05PQ0xEV0FJVAkweDAwMDAwMDAydQotI2RlZmluZSBTQV9TSUdJTkZPCTB4MDAwMDAwMDR1Ci0jZGVmaW5lIFNBX09OU1RBQ0sJMHgwODAwMDAwMHUKLSNkZWZpbmUgU0FfUkVTVEFSVAkweDEwMDAwMDAwdQotI2RlZmluZSBTQV9OT0RFRkVSCTB4NDAwMDAwMDB1Ci0jZGVmaW5lIFNBX1JFU0VUSEFORAkweDgwMDAwMDAwdQotCi0jZGVmaW5lIFNBX05PTUFTSwlTQV9OT0RFRkVSCi0jZGVmaW5lIFNBX09ORVNIT1QJU0FfUkVTRVRIQU5ECi0jZGVmaW5lIFNBX0lOVEVSUlVQVAkweDIwMDAwMDAwdSAvKiBkdW1teSAtLSBpZ25vcmVkICovCi0KLSNkZWZpbmUgU0FfUkVTVE9SRVIJMHgwNDAwMDAwMHUKLQotLyogCi0gKiBzaWdhbHRzdGFjayBjb250cm9scwotICovCi0jZGVmaW5lIFNTX09OU1RBQ0sJMQotI2RlZmluZSBTU19ESVNBQkxFCTIKLQotI2RlZmluZSBNSU5TSUdTVEtTWgkyMDQ4Ci0jZGVmaW5lIFNJR1NUS1NaCTgxOTIKLQotI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NpZ25hbC5oPgotCi1zdHJ1Y3Qgb2xkX3NpZ2FjdGlvbiB7Ci0JX19zaWdoYW5kbGVyX3Qgc2FfaGFuZGxlcjsKLQlvbGRfc2lnc2V0X3Qgc2FfbWFzazsKLQl1bnNpZ25lZCBsb25nIHNhX2ZsYWdzOwotCV9fc2lncmVzdG9yZV90IHNhX3Jlc3RvcmVyOwotfTsKLQotc3RydWN0IHNpZ2FjdGlvbiB7Ci0JX19zaWdoYW5kbGVyX3Qgc2FfaGFuZGxlcjsKLQl1bnNpZ25lZCBsb25nIHNhX2ZsYWdzOwotCV9fc2lncmVzdG9yZV90IHNhX3Jlc3RvcmVyOwotCXNpZ3NldF90IHNhX21hc2s7CQkvKiBtYXNrIGxhc3QgZm9yIGV4dGVuc2liaWxpdHkgKi8KLX07Ci0KLXN0cnVjdCBrX3NpZ2FjdGlvbiB7Ci0Jc3RydWN0IHNpZ2FjdGlvbiBzYTsKLX07Ci0KLXR5cGVkZWYgc3RydWN0IHNpZ2FsdHN0YWNrIHsKLQl2b2lkIF9fdXNlciAqc3Nfc3A7Ci0JaW50IHNzX2ZsYWdzOwotCXNpemVfdCBzc19zaXplOwotfSBzdGFja190OwotCi1zdHJ1Y3QgcHRfcmVnczsKLXN0cnVjdCB0aW1lc3BlYzsKLWV4dGVybiBpbnQgZG9fc2lnbmFsKHNpZ3NldF90ICpvbGRzZXQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKLWV4dGVybiBpbnQgZG9fc2lnbmFsMzIoc2lnc2V0X3QgKm9sZHNldCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwotI2RlZmluZSBwdHJhY2Vfc2lnbmFsX2RlbGl2ZXIocmVncywgY29va2llKSBkbyB7IH0gd2hpbGUgKDApCi0KLSNlbmRpZiAvKiBfQVNNUFBDNjRfU0lHTkFMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tcHBjNjQvc3lzdGVtLmgKaW5kZXggMGNkZDY2Yy4uYmY5YTZhYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjNjQvc3lzdGVtLmgKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvc3lzdGVtLmgKQEAgLTE0OSw2ICsxNDksOCBAQAogZXh0ZXJuIHN0cnVjdCB0YXNrX3N0cnVjdCAqIF9zd2l0Y2goc3RydWN0IHRocmVhZF9zdHJ1Y3QgKnByZXYsCiAJCQkJICAgIHN0cnVjdCB0aHJlYWRfc3RydWN0ICpuZXh0KTsKIAorZXh0ZXJuIHVuc2lnbmVkIGxvbmcga2xpbWl0OworCiBleHRlcm4gaW50IHBvd2Vyc2F2ZV9uYXA7CS8qIHNldCBpZiBuYXAgbW9kZSBjYW4gYmUgdXNlZCBpbiBpZGxlIGxvb3AgKi8KIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L3N5c3RlbWNmZy5oIGIvaW5jbHVkZS9hc20tcHBjNjQvc3lzdGVtY2ZnLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliODZiNTMuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tcHBjNjQvc3lzdGVtY2ZnLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0jaWZuZGVmIF9TWVNURU1DRkdfSAotI2RlZmluZSBfU1lTVEVNQ0ZHX0gKLQotLyogCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDIgUGV0ZXIgQmVyZ25lciA8YmVyZ25lckB2bmV0LmlibS5jb20+LCBJQk0KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCi0gKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLS8qIENoYW5nZSBBY3Rpdml0eToKLSAqIDIwMDIvMDkvMzAgOiBiZXJnbmVyICA6IENyZWF0ZWQKLSAqIEVuZCBDaGFuZ2UgQWN0aXZpdHkgCi0gKi8KLQotLyoKLSAqIElmIHRoZSBtYWpvciB2ZXJzaW9uIGNoYW5nZXMgd2UgYXJlIGluY29tcGF0aWJsZS4KLSAqIE1pbm9yIHZlcnNpb24gY2hhbmdlcyBhcmUgYSBoaW50LgotICovCi0jZGVmaW5lIFNZU1RFTUNGR19NQUpPUiAxCi0jZGVmaW5lIFNZU1RFTUNGR19NSU5PUiAxCi0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0KLSNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KLQotI2RlZmluZSBTWVNDQUxMX01BUF9TSVpFICAgICAgKChfX05SX3N5c2NhbGxzICsgMzEpIC8gMzIpCi0KLXN0cnVjdCBzeXN0ZW1jZmcgewotCV9fdTggIGV5ZV9jYXRjaGVyWzE2XTsJCS8qIEV5ZWNhdGNoZXI6IFNZU1RFTUNGRzpQUEM2NAkweDAwICovCi0Jc3RydWN0IHsJCQkvKiBTeXN0ZW1jZmcgdmVyc2lvbiBudW1iZXJzCSAgICAgKi8KLQkJX191MzIgbWFqb3I7CQkvKiBNYWpvciBudW1iZXIJCQkweDEwICovCi0JCV9fdTMyIG1pbm9yOwkJLyogTWlub3IgbnVtYmVyCQkJMHgxNCAqLwotCX0gdmVyc2lvbjsKLQotCV9fdTMyIHBsYXRmb3JtOwkJCS8qIFBsYXRmb3JtIGZsYWdzCQkweDE4ICovCi0JX191MzIgcHJvY2Vzc29yOwkJLyogUHJvY2Vzc29yIHR5cGUJCTB4MUMgKi8KLQlfX3U2NCBwcm9jZXNzb3JDb3VudDsJCS8qICMgb2YgcGh5c2ljYWwgcHJvY2Vzc29ycwkweDIwICovCi0JX191NjQgcGh5c2ljYWxNZW1vcnlTaXplOwkvKiBTaXplIG9mIHJlYWwgbWVtb3J5KEIpCTB4MjggKi8KLQlfX3U2NCB0Yl9vcmlnX3N0YW1wOwkJLyogVGltZWJhc2UgYXQgYm9vdAkJMHgzMCAqLwotCV9fdTY0IHRiX3RpY2tzX3Blcl9zZWM7CQkvKiBUaW1lYmFzZSB0aWNzIC8gc2VjCQkweDM4ICovCi0JX191NjQgdGJfdG9feHM7CQkJLyogSW52ZXJzZSBvZiBUQiB0byAyXjIwCTB4NDAgKi8KLQlfX3U2NCBzdGFtcF94c2VjOwkJLyoJCQkJMHg0OCAqLwotCV9fdTY0IHRiX3VwZGF0ZV9jb3VudDsJCS8qIFRpbWViYXNlIGF0b21pY2l0eSBjdHIJMHg1MCAqLwotCV9fdTMyIHR6X21pbnV0ZXN3ZXN0OwkJLyogTWludXRlcyB3ZXN0IG9mIEdyZWVud2ljaAkweDU4ICovCi0JX191MzIgdHpfZHN0dGltZTsJCS8qIFR5cGUgb2YgZHN0IGNvcnJlY3Rpb24JMHg1QyAqLwotCS8qIG5leHQgZm91ciBhcmUgbm8gbG9uZ2VyIHVzZWQgZXhjZXB0IHRvIGJlIGV4cG9ydGVkIHRvIC9wcm9jICovCi0JX191MzIgZGNhY2hlX3NpemU7CQkvKiBMMSBkLWNhY2hlIHNpemUJCTB4NjAgKi8KLQlfX3UzMiBkY2FjaGVfbGluZV9zaXplOwkJLyogTDEgZC1jYWNoZSBsaW5lIHNpemUJCTB4NjQgKi8KLQlfX3UzMiBpY2FjaGVfc2l6ZTsJCS8qIEwxIGktY2FjaGUgc2l6ZQkJMHg2OCAqLwotCV9fdTMyIGljYWNoZV9saW5lX3NpemU7CQkvKiBMMSBpLWNhY2hlIGxpbmUgc2l6ZQkJMHg2QyAqLwotICAgCV9fdTMyIHN5c2NhbGxfbWFwXzY0W1NZU0NBTExfTUFQX1NJWkVdOyAvKiBtYXAgb2YgYXZhaWxhYmxlIHN5c2NhbGxzIDB4NzAgKi8KLSAgIAlfX3UzMiBzeXNjYWxsX21hcF8zMltTWVNDQUxMX01BUF9TSVpFXTsgLyogbWFwIG9mIGF2YWlsYWJsZSBzeXNjYWxscyAqLwotfTsKLQotI2lmZGVmIF9fS0VSTkVMX18KLWV4dGVybiBzdHJ1Y3Qgc3lzdGVtY2ZnICpzeXN0ZW1jZmc7Ci0jZW5kaWYKLQotI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwotCi0jZW5kaWYgLyogX1NZU1RFTUNGR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL2RlYnVnLmggYi9pbmNsdWRlL2FzbS1zMzkwL2RlYnVnLmgKaW5kZXggNzEyNzAzMC4uMjM0NTBlZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC9kZWJ1Zy5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvZGVidWcuaApAQCAtMTI5LDcgKzEyOSw3IEBACiAKIHZvaWQgZGVidWdfc3RvcF9hbGwodm9pZCk7CiAKLWV4dGVybiBpbmxpbmUgZGVidWdfZW50cnlfdCogCitzdGF0aWMgaW5saW5lIGRlYnVnX2VudHJ5X3QqCiBkZWJ1Z19ldmVudChkZWJ1Z19pbmZvX3QqIGlkLCBpbnQgbGV2ZWwsIHZvaWQqIGRhdGEsIGludCBsZW5ndGgpCiB7CiAJaWYgKCghaWQpIHx8IChsZXZlbCA+IGlkLT5sZXZlbCkgfHwgKGlkLT5wYWdlc19wZXJfYXJlYSA9PSAwKSkKQEAgLTEzNyw3ICsxMzcsNyBAQAogICAgICAgICByZXR1cm4gZGVidWdfZXZlbnRfY29tbW9uKGlkLGxldmVsLGRhdGEsbGVuZ3RoKTsKIH0KIAotZXh0ZXJuIGlubGluZSBkZWJ1Z19lbnRyeV90KiAKK3N0YXRpYyBpbmxpbmUgZGVidWdfZW50cnlfdCoKIGRlYnVnX2ludF9ldmVudChkZWJ1Z19pbmZvX3QqIGlkLCBpbnQgbGV2ZWwsIHVuc2lnbmVkIGludCB0YWcpCiB7CiAgICAgICAgIHVuc2lnbmVkIGludCB0PXRhZzsKQEAgLTE0Niw3ICsxNDYsNyBAQAogICAgICAgICByZXR1cm4gZGVidWdfZXZlbnRfY29tbW9uKGlkLGxldmVsLCZ0LHNpemVvZih1bnNpZ25lZCBpbnQpKTsKIH0KIAotZXh0ZXJuIGlubGluZSBkZWJ1Z19lbnRyeV90ICoKK3N0YXRpYyBpbmxpbmUgZGVidWdfZW50cnlfdCAqCiBkZWJ1Z19sb25nX2V2ZW50IChkZWJ1Z19pbmZvX3QqIGlkLCBpbnQgbGV2ZWwsIHVuc2lnbmVkIGxvbmcgdGFnKQogewogICAgICAgICB1bnNpZ25lZCBsb25nIHQ9dGFnOwpAQCAtMTU1LDcgKzE1NSw3IEBACiAgICAgICAgIHJldHVybiBkZWJ1Z19ldmVudF9jb21tb24oaWQsbGV2ZWwsJnQsc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKIH0KIAotZXh0ZXJuIGlubGluZSBkZWJ1Z19lbnRyeV90KiAKK3N0YXRpYyBpbmxpbmUgZGVidWdfZW50cnlfdCoKIGRlYnVnX3RleHRfZXZlbnQoZGVidWdfaW5mb190KiBpZCwgaW50IGxldmVsLCBjb25zdCBjaGFyKiB0eHQpCiB7CiAJaWYgKCghaWQpIHx8IChsZXZlbCA+IGlkLT5sZXZlbCkgfHwgKGlkLT5wYWdlc19wZXJfYXJlYSA9PSAwKSkKQEAgLTE2OCw3ICsxNjgsNyBAQAogCV9fYXR0cmlidXRlX18gKChmb3JtYXQocHJpbnRmLCAzLCA0KSkpOwogCiAKLWV4dGVybiBpbmxpbmUgZGVidWdfZW50cnlfdCogCitzdGF0aWMgaW5saW5lIGRlYnVnX2VudHJ5X3QqCiBkZWJ1Z19leGNlcHRpb24oZGVidWdfaW5mb190KiBpZCwgaW50IGxldmVsLCB2b2lkKiBkYXRhLCBpbnQgbGVuZ3RoKQogewogCWlmICgoIWlkKSB8fCAobGV2ZWwgPiBpZC0+bGV2ZWwpIHx8IChpZC0+cGFnZXNfcGVyX2FyZWEgPT0gMCkpCkBAIC0xNzYsNyArMTc2LDcgQEAKICAgICAgICAgcmV0dXJuIGRlYnVnX2V4Y2VwdGlvbl9jb21tb24oaWQsbGV2ZWwsZGF0YSxsZW5ndGgpOwogfQogCi1leHRlcm4gaW5saW5lIGRlYnVnX2VudHJ5X3QqIAorc3RhdGljIGlubGluZSBkZWJ1Z19lbnRyeV90KgogZGVidWdfaW50X2V4Y2VwdGlvbihkZWJ1Z19pbmZvX3QqIGlkLCBpbnQgbGV2ZWwsIHVuc2lnbmVkIGludCB0YWcpCiB7CiAgICAgICAgIHVuc2lnbmVkIGludCB0PXRhZzsKQEAgLTE4NSw3ICsxODUsNyBAQAogICAgICAgICByZXR1cm4gZGVidWdfZXhjZXB0aW9uX2NvbW1vbihpZCxsZXZlbCwmdCxzaXplb2YodW5zaWduZWQgaW50KSk7CiB9CiAKLWV4dGVybiBpbmxpbmUgZGVidWdfZW50cnlfdCAqIAorc3RhdGljIGlubGluZSBkZWJ1Z19lbnRyeV90ICoKIGRlYnVnX2xvbmdfZXhjZXB0aW9uIChkZWJ1Z19pbmZvX3QqIGlkLCBpbnQgbGV2ZWwsIHVuc2lnbmVkIGxvbmcgdGFnKQogewogICAgICAgICB1bnNpZ25lZCBsb25nIHQ9dGFnOwpAQCAtMTk0LDcgKzE5NCw3IEBACiAgICAgICAgIHJldHVybiBkZWJ1Z19leGNlcHRpb25fY29tbW9uKGlkLGxldmVsLCZ0LHNpemVvZih1bnNpZ25lZCBsb25nKSk7CiB9CiAKLWV4dGVybiBpbmxpbmUgZGVidWdfZW50cnlfdCogCitzdGF0aWMgaW5saW5lIGRlYnVnX2VudHJ5X3QqCiBkZWJ1Z190ZXh0X2V4Y2VwdGlvbihkZWJ1Z19pbmZvX3QqIGlkLCBpbnQgbGV2ZWwsIGNvbnN0IGNoYXIqIHR4dCkKIHsKIAlpZiAoKCFpZCkgfHwgKGxldmVsID4gaWQtPmxldmVsKSB8fCAoaWQtPnBhZ2VzX3Blcl9hcmVhID09IDApKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9lYmNkaWMuaCBiL2luY2x1ZGUvYXNtLXMzOTAvZWJjZGljLmgKaW5kZXggMjBlODFlOC4uNGNiYzMzNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC9lYmNkaWMuaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL2ViY2RpYy5oCkBAIC0yMSw3ICsyMSw3IEBACiBleHRlcm4gX191OCBfZWJjX3RvbG93ZXJbXTsgLyogRUJDRElDIC0+IGxvd2VyY2FzZSAqLwogZXh0ZXJuIF9fdTggX2ViY190b3VwcGVyW107IC8qIEVCQ0RJQyAtPiB1cHBlcmNhc2UgKi8KIAotZXh0ZXJuIF9faW5saW5lX18gdm9pZAorc3RhdGljIGlubGluZSB2b2lkCiBjb2RlcGFnZV9jb252ZXJ0KGNvbnN0IF9fdTggKmNvZGVwYWdlLCB2b2xhdGlsZSBfX3U4ICogYWRkciwgdW5zaWduZWQgbG9uZyBucikKIHsKIAlpZiAobnItLSA8PSAwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9pby5oIGIvaW5jbHVkZS9hc20tczM5MC9pby5oCmluZGV4IDgxODhmZGMuLjcxZjU1ZWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvaW8uaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL2lvLmgKQEAgLTI0LDcgKzI0LDcgQEAKICAqIENoYW5nZSB2aXJ0dWFsIGFkZHJlc3NlcyB0byBwaHlzaWNhbCBhZGRyZXNzZXMgYW5kIHZ2LgogICogVGhlc2UgYXJlIHByZXR0eSB0cml2aWFsCiAgKi8KLWV4dGVybiBpbmxpbmUgdW5zaWduZWQgbG9uZyB2aXJ0X3RvX3BoeXModm9sYXRpbGUgdm9pZCAqIGFkZHJlc3MpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdmlydF90b19waHlzKHZvbGF0aWxlIHZvaWQgKiBhZGRyZXNzKQogewogCXVuc2lnbmVkIGxvbmcgcmVhbF9hZGRyZXNzOwogCV9fYXNtX18gKApAQCAtNDIsNyArNDIsNyBAQAogICAgICAgICByZXR1cm4gcmVhbF9hZGRyZXNzOwogfQogCi1leHRlcm4gaW5saW5lIHZvaWQgKiBwaHlzX3RvX3ZpcnQodW5zaWduZWQgbG9uZyBhZGRyZXNzKQorc3RhdGljIGlubGluZSB2b2lkICogcGh5c190b192aXJ0KHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKICAgICAgICAgcmV0dXJuIF9faW9fdmlydChhZGRyZXNzKTsKIH0KQEAgLTU0LDcgKzU0LDcgQEAKIAogZXh0ZXJuIHZvaWQgKiBfX2lvcmVtYXAodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBmbGFncyk7CiAKLWV4dGVybiBpbmxpbmUgdm9pZCAqIGlvcmVtYXAgKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUpCitzdGF0aWMgaW5saW5lIHZvaWQgKiBpb3JlbWFwICh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplKQogewogICAgICAgICByZXR1cm4gX19pb3JlbWFwKG9mZnNldCwgc2l6ZSwgMCk7CiB9CkBAIC02NCw3ICs2NCw3IEBACiAgKiBpdCdzIHVzZWZ1bCBpZiBzb21lIGNvbnRyb2wgcmVnaXN0ZXJzIGFyZSBpbiBzdWNoIGFuIGFyZWEgYW5kIHdyaXRlIGNvbWJpbmluZwogICogb3IgcmVhZCBjYWNoaW5nIGlzIG5vdCBkZXNpcmFibGU6CiAgKi8KLWV4dGVybiBpbmxpbmUgdm9pZCAqIGlvcmVtYXBfbm9jYWNoZSAodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCAqIGlvcmVtYXBfbm9jYWNoZSAodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKICAgICAgICAgcmV0dXJuIF9faW9yZW1hcChvZmZzZXQsIHNpemUsIDApOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9sb3djb3JlLmggYi9pbmNsdWRlL2FzbS1zMzkwL2xvd2NvcmUuaAppbmRleCBjNmY1MWM5Li5kYjA2MDZjMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC9sb3djb3JlLmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC9sb3djb3JlLmgKQEAgLTM0Niw3ICszNDYsNyBAQAogI2RlZmluZSBTMzkwX2xvd2NvcmUgKCooKHN0cnVjdCBfbG93Y29yZSAqKSAwKSkKIGV4dGVybiBzdHJ1Y3QgX2xvd2NvcmUgKmxvd2NvcmVfcHRyW107CiAKLWV4dGVybiBfX2lubGluZV9fIHZvaWQgc2V0X3ByZWZpeChfX3UzMiBhZGRyZXNzKQorc3RhdGljIGlubGluZSB2b2lkIHNldF9wcmVmaXgoX191MzIgYWRkcmVzcykKIHsKICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzcHggJTAiIDogOiAibSIgKGFkZHJlc3MpIDogIm1lbW9yeSIgKTsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvbW11X2NvbnRleHQuaCBiL2luY2x1ZGUvYXNtLXMzOTAvbW11X2NvbnRleHQuaAppbmRleCAzYTNiYjNmLi5iY2YyNGE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL21tdV9jb250ZXh0LmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC9tbXVfY29udGV4dC5oCkBAIC00NCw3ICs0NCw3IEBACiAKICNkZWZpbmUgZGVhY3RpdmF0ZV9tbSh0c2ssbW0pCWRvIHsgfSB3aGlsZSAoMCkKIAotZXh0ZXJuIGlubGluZSB2b2lkIGFjdGl2YXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKnByZXYsCitzdGF0aWMgaW5saW5lIHZvaWQgYWN0aXZhdGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqcHJldiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbW1fc3RydWN0ICpuZXh0KQogewogICAgICAgICBzd2l0Y2hfbW0ocHJldiwgbmV4dCwgY3VycmVudCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLXMzOTAvcGd0YWJsZS5oCmluZGV4IDliZTc0MWIuLjg1OWI1ZTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvcGd0YWJsZS5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvcGd0YWJsZS5oCkBAIC0zMTksNyArMzE5LDcgQEAKICAqIHdpdGhpbiBhIHBhZ2UgdGFibGUgYXJlIGRpcmVjdGx5IG1vZGlmaWVkLiAgVGh1cywgdGhlIGZvbGxvd2luZwogICogaG9vayBpcyBtYWRlIGF2YWlsYWJsZS4KICAqLwotZXh0ZXJuIGlubGluZSB2b2lkIHNldF9wdGUocHRlX3QgKnB0ZXB0ciwgcHRlX3QgcHRldmFsKQorc3RhdGljIGlubGluZSB2b2lkIHNldF9wdGUocHRlX3QgKnB0ZXB0ciwgcHRlX3QgcHRldmFsKQogewogCSpwdGVwdHIgPSBwdGV2YWw7CiB9CkBAIC0zMzAsNjMgKzMzMCw2MyBAQAogICovCiAjaWZuZGVmIF9fczM5MHhfXwogCi1leHRlcm4gaW5saW5lIGludCBwZ2RfcHJlc2VudChwZ2RfdCBwZ2QpIHsgcmV0dXJuIDE7IH0KLWV4dGVybiBpbmxpbmUgaW50IHBnZF9ub25lKHBnZF90IHBnZCkgICAgeyByZXR1cm4gMDsgfQotZXh0ZXJuIGlubGluZSBpbnQgcGdkX2JhZChwZ2RfdCBwZ2QpICAgICB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIGludCBwZ2RfcHJlc2VudChwZ2RfdCBwZ2QpIHsgcmV0dXJuIDE7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHBnZF9ub25lKHBnZF90IHBnZCkgICAgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSBpbnQgcGdkX2JhZChwZ2RfdCBwZ2QpICAgICB7IHJldHVybiAwOyB9CiAKLWV4dGVybiBpbmxpbmUgaW50IHBtZF9wcmVzZW50KHBtZF90IHBtZCkgeyByZXR1cm4gcG1kX3ZhbChwbWQpICYgX1NFR19QUkVTRU5UOyB9Ci1leHRlcm4gaW5saW5lIGludCBwbWRfbm9uZShwbWRfdCBwbWQpICAgIHsgcmV0dXJuIHBtZF92YWwocG1kKSAmIF9QQUdFX1RBQkxFX0lOVjsgfQotZXh0ZXJuIGlubGluZSBpbnQgcG1kX2JhZChwbWRfdCBwbWQpCitzdGF0aWMgaW5saW5lIGludCBwbWRfcHJlc2VudChwbWRfdCBwbWQpIHsgcmV0dXJuIHBtZF92YWwocG1kKSAmIF9TRUdfUFJFU0VOVDsgfQorc3RhdGljIGlubGluZSBpbnQgcG1kX25vbmUocG1kX3QgcG1kKSAgICB7IHJldHVybiBwbWRfdmFsKHBtZCkgJiBfUEFHRV9UQUJMRV9JTlY7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHBtZF9iYWQocG1kX3QgcG1kKQogewogCXJldHVybiAocG1kX3ZhbChwbWQpICYgKH5QQUdFX01BU0sgJiB+X1BBR0VfVEFCTEVfSU5WKSkgIT0gX1BBR0VfVEFCTEU7CiB9CiAKICNlbHNlIC8qIF9fczM5MHhfXyAqLwogCi1leHRlcm4gaW5saW5lIGludCBwZ2RfcHJlc2VudChwZ2RfdCBwZ2QpCitzdGF0aWMgaW5saW5lIGludCBwZ2RfcHJlc2VudChwZ2RfdCBwZ2QpCiB7CiAJcmV0dXJuIChwZ2RfdmFsKHBnZCkgJiB+UEFHRV9NQVNLKSA9PSBfUEdEX0VOVFJZOwogfQogCi1leHRlcm4gaW5saW5lIGludCBwZ2Rfbm9uZShwZ2RfdCBwZ2QpCitzdGF0aWMgaW5saW5lIGludCBwZ2Rfbm9uZShwZ2RfdCBwZ2QpCiB7CiAJcmV0dXJuIHBnZF92YWwocGdkKSAmIF9QR0RfRU5UUllfSU5WOwogfQogCi1leHRlcm4gaW5saW5lIGludCBwZ2RfYmFkKHBnZF90IHBnZCkKK3N0YXRpYyBpbmxpbmUgaW50IHBnZF9iYWQocGdkX3QgcGdkKQogewogCXJldHVybiAocGdkX3ZhbChwZ2QpICYgKH5QQUdFX01BU0sgJiB+X1BHRF9FTlRSWV9JTlYpKSAhPSBfUEdEX0VOVFJZOwogfQogCi1leHRlcm4gaW5saW5lIGludCBwbWRfcHJlc2VudChwbWRfdCBwbWQpCitzdGF0aWMgaW5saW5lIGludCBwbWRfcHJlc2VudChwbWRfdCBwbWQpCiB7CiAJcmV0dXJuIChwbWRfdmFsKHBtZCkgJiB+UEFHRV9NQVNLKSA9PSBfUE1EX0VOVFJZOwogfQogCi1leHRlcm4gaW5saW5lIGludCBwbWRfbm9uZShwbWRfdCBwbWQpCitzdGF0aWMgaW5saW5lIGludCBwbWRfbm9uZShwbWRfdCBwbWQpCiB7CiAJcmV0dXJuIHBtZF92YWwocG1kKSAmIF9QTURfRU5UUllfSU5WOwogfQogCi1leHRlcm4gaW5saW5lIGludCBwbWRfYmFkKHBtZF90IHBtZCkKK3N0YXRpYyBpbmxpbmUgaW50IHBtZF9iYWQocG1kX3QgcG1kKQogewogCXJldHVybiAocG1kX3ZhbChwbWQpICYgKH5QQUdFX01BU0sgJiB+X1BNRF9FTlRSWV9JTlYpKSAhPSBfUE1EX0VOVFJZOwogfQogCiAjZW5kaWYgLyogX19zMzkweF9fICovCiAKLWV4dGVybiBpbmxpbmUgaW50IHB0ZV9ub25lKHB0ZV90IHB0ZSkKK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV9ub25lKHB0ZV90IHB0ZSkKIHsKIAlyZXR1cm4gKHB0ZV92YWwocHRlKSAmIF9QQUdFX0lOVkFMSURfTUFTSykgPT0gX1BBR0VfSU5WQUxJRF9FTVBUWTsKIH0KIAotZXh0ZXJuIGlubGluZSBpbnQgcHRlX3ByZXNlbnQocHRlX3QgcHRlKQorc3RhdGljIGlubGluZSBpbnQgcHRlX3ByZXNlbnQocHRlX3QgcHRlKQogewogCXJldHVybiAhKHB0ZV92YWwocHRlKSAmIF9QQUdFX0lOVkFMSUQpIHx8CiAJCShwdGVfdmFsKHB0ZSkgJiBfUEFHRV9JTlZBTElEX01BU0spID09IF9QQUdFX0lOVkFMSURfTk9ORTsKIH0KIAotZXh0ZXJuIGlubGluZSBpbnQgcHRlX2ZpbGUocHRlX3QgcHRlKQorc3RhdGljIGlubGluZSBpbnQgcHRlX2ZpbGUocHRlX3QgcHRlKQogewogCXJldHVybiAocHRlX3ZhbChwdGUpICYgX1BBR0VfSU5WQUxJRF9NQVNLKSA9PSBfUEFHRV9JTlZBTElEX0ZJTEU7CiB9CkBAIC0zOTcsMTIgKzM5NywxMiBAQAogICogcXVlcnkgZnVuY3Rpb25zIHB0ZV93cml0ZS9wdGVfZGlydHkvcHRlX3lvdW5nIG9ubHkgd29yayBpZgogICogcHRlX3ByZXNlbnQoKSBpcyB0cnVlLiBVbmRlZmluZWQgYmVoYXZpb3VyIGlmIG5vdC4uCiAgKi8KLWV4dGVybiBpbmxpbmUgaW50IHB0ZV93cml0ZShwdGVfdCBwdGUpCitzdGF0aWMgaW5saW5lIGludCBwdGVfd3JpdGUocHRlX3QgcHRlKQogewogCXJldHVybiAocHRlX3ZhbChwdGUpICYgX1BBR0VfUk8pID09IDA7CiB9CiAKLWV4dGVybiBpbmxpbmUgaW50IHB0ZV9kaXJ0eShwdGVfdCBwdGUpCitzdGF0aWMgaW5saW5lIGludCBwdGVfZGlydHkocHRlX3QgcHRlKQogewogCS8qIEEgcHRlIGlzIG5laXRoZXIgY2xlYW4gbm9yIGRpcnR5IG9uIHMvMzkwLiBUaGUgZGlydHkgYml0CiAJICogaXMgaW4gdGhlIHN0b3JhZ2Uga2V5LiBTZWUgcGFnZV90ZXN0X2FuZF9jbGVhcl9kaXJ0eSBmb3IKQEAgLTQxMSw3ICs0MTEsNyBAQAogCXJldHVybiAwOwogfQogCi1leHRlcm4gaW5saW5lIGludCBwdGVfeW91bmcocHRlX3QgcHRlKQorc3RhdGljIGlubGluZSBpbnQgcHRlX3lvdW5nKHB0ZV90IHB0ZSkKIHsKIAkvKiBBIHB0ZSBpcyBuZWl0aGVyIHlvdW5nIG5vciBvbGQgb24gcy8zOTAuIFRoZSB5b3VuZyBiaXQKIAkgKiBpcyBpbiB0aGUgc3RvcmFnZSBrZXkuIFNlZSBwYWdlX3Rlc3RfYW5kX2NsZWFyX3lvdW5nIGZvcgpAQCAtNDIwLDcgKzQyMCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLWV4dGVybiBpbmxpbmUgaW50IHB0ZV9yZWFkKHB0ZV90IHB0ZSkKK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV9yZWFkKHB0ZV90IHB0ZSkKIHsKIAkvKiBBbGwgcGFnZXMgYXJlIHJlYWRhYmxlIHNpbmNlIHdlIGRvbid0IHVzZSB0aGUgZmV0Y2gKIAkgKiBwcm90ZWN0aW9uIGJpdCBpbiB0aGUgc3RvcmFnZSBrZXkuCkBAIC00MzQsOSArNDM0LDkgQEAKIAogI2lmbmRlZiBfX3MzOTB4X18KIAotZXh0ZXJuIGlubGluZSB2b2lkIHBnZF9jbGVhcihwZ2RfdCAqIHBnZHApICAgICAgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgcGdkX2NsZWFyKHBnZF90ICogcGdkcCkgICAgICB7IH0KIAotZXh0ZXJuIGlubGluZSB2b2lkIHBtZF9jbGVhcihwbWRfdCAqIHBtZHApCitzdGF0aWMgaW5saW5lIHZvaWQgcG1kX2NsZWFyKHBtZF90ICogcG1kcCkKIHsKIAlwbWRfdmFsKHBtZHBbMF0pID0gX1BBR0VfVEFCTEVfSU5WOwogCXBtZF92YWwocG1kcFsxXSkgPSBfUEFHRV9UQUJMRV9JTlY7CkBAIC00NDYsMTIgKzQ0NiwxMiBAQAogCiAjZWxzZSAvKiBfX3MzOTB4X18gKi8KIAotZXh0ZXJuIGlubGluZSB2b2lkIHBnZF9jbGVhcihwZ2RfdCAqIHBnZHApCitzdGF0aWMgaW5saW5lIHZvaWQgcGdkX2NsZWFyKHBnZF90ICogcGdkcCkKIHsKIAlwZ2RfdmFsKCpwZ2RwKSA9IF9QR0RfRU5UUllfSU5WIHwgX1BHRF9FTlRSWTsKIH0KIAotZXh0ZXJuIGlubGluZSB2b2lkIHBtZF9jbGVhcihwbWRfdCAqIHBtZHApCitzdGF0aWMgaW5saW5lIHZvaWQgcG1kX2NsZWFyKHBtZF90ICogcG1kcCkKIHsKIAlwbWRfdmFsKCpwbWRwKSA9IF9QTURfRU5UUllfSU5WIHwgX1BNRF9FTlRSWTsKIAlwbWRfdmFsMSgqcG1kcCkgPSBfUE1EX0VOVFJZX0lOViB8IF9QTURfRU5UUlk7CkBAIC00NTksNyArNDU5LDcgQEAKIAogI2VuZGlmIC8qIF9fczM5MHhfXyAqLwogCi1leHRlcm4gaW5saW5lIHZvaWQgcHRlX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKQorc3RhdGljIGlubGluZSB2b2lkIHB0ZV9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCkKIHsKIAlwdGVfdmFsKCpwdGVwKSA9IF9QQUdFX0lOVkFMSURfRU1QVFk7CiB9CkBAIC00NjgsMTQgKzQ2OCwxNCBAQAogICogVGhlIGZvbGxvd2luZyBwdGUgbW9kaWZpY2F0aW9uIGZ1bmN0aW9ucyBvbmx5IHdvcmsgaWYKICAqIHB0ZV9wcmVzZW50KCkgaXMgdHJ1ZS4gVW5kZWZpbmVkIGJlaGF2aW91ciBpZiBub3QuLgogICovCi1leHRlcm4gaW5saW5lIHB0ZV90IHB0ZV9tb2RpZnkocHRlX3QgcHRlLCBwZ3Byb3RfdCBuZXdwcm90KQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbW9kaWZ5KHB0ZV90IHB0ZSwgcGdwcm90X3QgbmV3cHJvdCkKIHsKIAlwdGVfdmFsKHB0ZSkgJj0gUEFHRV9NQVNLOwogCXB0ZV92YWwocHRlKSB8PSBwZ3Byb3RfdmFsKG5ld3Byb3QpOwogCXJldHVybiBwdGU7CiB9CiAKLWV4dGVybiBpbmxpbmUgcHRlX3QgcHRlX3dycHJvdGVjdChwdGVfdCBwdGUpCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV93cnByb3RlY3QocHRlX3QgcHRlKQogewogCS8qIERvIG5vdCBjbG9iYmVyIF9QQUdFX0lOVkFMSURfTk9ORSBwYWdlcyEgICovCiAJaWYgKCEocHRlX3ZhbChwdGUpICYgX1BBR0VfSU5WQUxJRCkpCkBAIC00ODMsMTMgKzQ4MywxMyBAQAogCXJldHVybiBwdGU7CiB9CiAKLWV4dGVybiBpbmxpbmUgcHRlX3QgcHRlX21rd3JpdGUocHRlX3QgcHRlKSAKK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rd3JpdGUocHRlX3QgcHRlKQogewogCXB0ZV92YWwocHRlKSAmPSB+X1BBR0VfUk87CiAJcmV0dXJuIHB0ZTsKIH0KIAotZXh0ZXJuIGlubGluZSBwdGVfdCBwdGVfbWtjbGVhbihwdGVfdCBwdGUpCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta2NsZWFuKHB0ZV90IHB0ZSkKIHsKIAkvKiBUaGUgb25seSB1c2VyIG9mIHB0ZV9ta2NsZWFuIGlzIHRoZSBmb3JrKCkgY29kZS4KIAkgICBXZSBtdXN0ICpub3QqIGNsZWFyIHRoZSAqcGh5c2ljYWwqIHBhZ2UgZGlydHkgYml0CkBAIC00OTgsNyArNDk4LDcgQEAKIAlyZXR1cm4gcHRlOwogfQogCi1leHRlcm4gaW5saW5lIHB0ZV90IHB0ZV9ta2RpcnR5KHB0ZV90IHB0ZSkKK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rZGlydHkocHRlX3QgcHRlKQogewogCS8qIFdlIGRvIG5vdCBleHBsaWNpdGx5IHNldCB0aGUgZGlydHkgYml0IGJlY2F1c2UgdGhlCiAJICogc3NrZSBpbnN0cnVjdGlvbiBpcyBzbG93LiBJdCBpcyBmYXN0ZXIgdG8gbGV0IHRoZQpAQCAtNTA3LDcgKzUwNyw3IEBACiAJcmV0dXJuIHB0ZTsKIH0KIAotZXh0ZXJuIGlubGluZSBwdGVfdCBwdGVfbWtvbGQocHRlX3QgcHRlKQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtvbGQocHRlX3QgcHRlKQogewogCS8qIFMvMzkwIGRvZXNuJ3Qga2VlcCBpdHMgZGlydHkvcmVmZXJlbmNlZCBiaXQgaW4gdGhlIHB0ZS4KIAkgKiBUaGVyZSBpcyBubyBwb2ludCBpbiBjbGVhcmluZyB0aGUgcmVhbCByZWZlcmVuY2VkIGJpdC4KQEAgLTUxNSw3ICs1MTUsNyBAQAogCXJldHVybiBwdGU7CiB9CiAKLWV4dGVybiBpbmxpbmUgcHRlX3QgcHRlX21reW91bmcocHRlX3QgcHRlKQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt5b3VuZyhwdGVfdCBwdGUpCiB7CiAJLyogUy8zOTAgZG9lc24ndCBrZWVwIGl0cyBkaXJ0eS9yZWZlcmVuY2VkIGJpdCBpbiB0aGUgcHRlLgogCSAqIFRoZXJlIGlzIG5vIHBvaW50IGluIHNldHRpbmcgdGhlIHJlYWwgcmVmZXJlbmNlZCBiaXQuCkBAIC02OTUsNyArNjk1LDcgQEAKICNpZm5kZWYgX19zMzkweF9fCiAKIC8qIEZpbmQgYW4gZW50cnkgaW4gdGhlIHNlY29uZC1sZXZlbCBwYWdlIHRhYmxlLi4gKi8KLWV4dGVybiBpbmxpbmUgcG1kX3QgKiBwbWRfb2Zmc2V0KHBnZF90ICogZGlyLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCitzdGF0aWMgaW5saW5lIHBtZF90ICogcG1kX29mZnNldChwZ2RfdCAqIGRpciwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQogewogICAgICAgICByZXR1cm4gKHBtZF90ICopIGRpcjsKIH0KQEAgLTc1OCw3ICs3NTgsNyBAQAogI2Vsc2UKICNkZWZpbmUgX19TV1BfT0ZGU0VUX01BU0sgKH4wVUwgPj4gMTEpCiAjZW5kaWYKLWV4dGVybiBpbmxpbmUgcHRlX3QgbWtfc3dhcF9wdGUodW5zaWduZWQgbG9uZyB0eXBlLCB1bnNpZ25lZCBsb25nIG9mZnNldCkKK3N0YXRpYyBpbmxpbmUgcHRlX3QgbWtfc3dhcF9wdGUodW5zaWduZWQgbG9uZyB0eXBlLCB1bnNpZ25lZCBsb25nIG9mZnNldCkKIHsKIAlwdGVfdCBwdGU7CiAJb2Zmc2V0ICY9IF9fU1dQX09GRlNFVF9NQVNLOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9zaWdwLmggYi9pbmNsdWRlL2FzbS1zMzkwL3NpZ3AuaAppbmRleCAzOTc5YmMzLi5mYzU2NDU4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL3NpZ3AuaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL3NpZ3AuaApAQCAtNjcsNyArNjcsNyBAQAogLyoKICAqIFNpZ25hbCBwcm9jZXNzb3IKICAqLwotZXh0ZXJuIF9faW5saW5lX18gc2lncF9jY29kZQorc3RhdGljIGlubGluZSBzaWdwX2Njb2RlCiBzaWduYWxfcHJvY2Vzc29yKF9fdTE2IGNwdV9hZGRyLCBzaWdwX29yZGVyX2NvZGUgb3JkZXJfY29kZSkKIHsKIAlzaWdwX2Njb2RlIGNjb2RlOwpAQCAtODYsNyArODYsNyBAQAogLyoKICAqIFNpZ25hbCBwcm9jZXNzb3Igd2l0aCBwYXJhbWV0ZXIKICAqLwotZXh0ZXJuIF9faW5saW5lX18gc2lncF9jY29kZQorc3RhdGljIGlubGluZSBzaWdwX2Njb2RlCiBzaWduYWxfcHJvY2Vzc29yX3AoX191MzIgcGFyYW1ldGVyLCBfX3UxNiBjcHVfYWRkciwKIAkJICAgc2lncF9vcmRlcl9jb2RlIG9yZGVyX2NvZGUpCiB7CkBAIC0xMDcsNyArMTA3LDcgQEAKIC8qCiAgKiBTaWduYWwgcHJvY2Vzc29yIHdpdGggcGFyYW1ldGVyIGFuZCByZXR1cm4gc3RhdHVzCiAgKi8KLWV4dGVybiBfX2lubGluZV9fIHNpZ3BfY2NvZGUKK3N0YXRpYyBpbmxpbmUgc2lncF9jY29kZQogc2lnbmFsX3Byb2Nlc3Nvcl9wcyhfX3UzMiAqc3RhdHVzcHRyLCBfX3UzMiBwYXJhbWV0ZXIsCiAJCSAgICBfX3UxNiBjcHVfYWRkciwgc2lncF9vcmRlcl9jb2RlIG9yZGVyX2NvZGUpCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL3NtcC5oIGIvaW5jbHVkZS9hc20tczM5MC9zbXAuaAppbmRleCBkZDUwZTU3Li5hMmFlNzYyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL3NtcC5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvc21wLmgKQEAgLTUyLDcgKzUyLDcgQEAKIGV4dGVybiBpbnQgc21wX2dldF9jcHUoY3B1bWFza190IGNwdV9tYXApOwogZXh0ZXJuIHZvaWQgc21wX3B1dF9jcHUoaW50IGNwdSk7CiAKLWV4dGVybiBfX2lubGluZV9fIF9fdTE2IGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCh2b2lkKQorc3RhdGljIGlubGluZSBfX3UxNiBoYXJkX3NtcF9wcm9jZXNzb3JfaWQodm9pZCkKIHsKICAgICAgICAgX191MTYgY3B1X2FkZHJlc3M7CiAgCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9pZGUuaCBiL2luY2x1ZGUvYXNtLXNoL2lkZS5oCmluZGV4IGY0MmNmMzkuLjcxMWRhZDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL2lkZS5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL2lkZS5oCkBAIC0xNiwxMCArMTYsNiBAQAogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKLSNpZm5kZWYgTUFYX0hXSUZTCi0jZGVmaW5lIE1BWF9IV0lGUwlDT05GSUdfSURFX01BWF9IV0lGUwotI2VuZGlmCi0KICNkZWZpbmUgaWRlX2RlZmF1bHRfaW9fY3RsKGJhc2UpCSgwKQogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvaWRlX2lvcHMuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoNjQvaWRlLmggYi9pbmNsdWRlL2FzbS1zaDY0L2lkZS5oCmluZGV4IDZmZDUxNGRhLi44NTJmNTBhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaDY0L2lkZS5oCisrKyBiL2luY2x1ZGUvYXNtLXNoNjQvaWRlLmgKQEAgLTE3LDEwICsxNyw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAotI2lmbmRlZiBNQVhfSFdJRlMKLSNkZWZpbmUgTUFYX0hXSUZTCUNPTkZJR19JREVfTUFYX0hXSUZTCi0jZW5kaWYKLQogLyogV2l0aG91dCB0aGlzLCB0aGUgaW5pdGlhbGlzYXRpb24gb2YgUENJIElERSBjYXJkcyBlbmQgdXAgY2FsbGluZwogICogaWRlX2luaXRfaHdpZl9wb3J0cywgd2hpY2ggd29uJ3Qgd29yay4gKi8KICNpZmRlZiBDT05GSUdfQkxLX0RFVl9JREVQQ0kKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9tc2kuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9tc2kuaAppbmRleCA4NWM0MjdlLi4zNTZlMGU4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvbXNpLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L21zaS5oCkBAIC0xMSw4ICsxMSw2IEBACiAjaW5jbHVkZSA8YXNtL3NtcC5oPgogCiAjZGVmaW5lIExBU1RfREVWSUNFX1ZFQ1RPUgkJMjMyCi0jZGVmaW5lIE1TSV9ERVNUX01PREUJCQlNU0lfTE9HSUNBTF9NT0RFCi0jZGVmaW5lIE1TSV9UQVJHRVRfQ1BVX1NISUZUCQkxMgotI2RlZmluZSBNU0lfVEFSR0VUX0NQVQkJCWxvZ2ljYWxfc21wX3Byb2Nlc3Nvcl9pZCgpCisjZGVmaW5lIE1TSV9UQVJHRVRfQ1BVX1NISUZUCTEyCiAKICNlbmRpZiAvKiBBU01fTVNJX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9zbXAuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9zbXAuaAppbmRleCBjNTdjZTQwLi5iOWZiMjE3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvc21wLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L3NtcC5oCkBAIC0xMzUsNSArMTM1LDExIEBACiB9CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19TTVAKKyNkZWZpbmUgY3B1X3BoeXNpY2FsX2lkKGNwdSkJCXg4Nl9jcHVfdG9fYXBpY2lkW2NwdV0KKyNlbHNlCisjZGVmaW5lIGNwdV9waHlzaWNhbF9pZChjcHUpCQlib290X2NwdV9pZAorI2VuZGlmCisKICNlbmRpZgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NvbXBhdF9pb2N0bC5oIGIvaW5jbHVkZS9saW51eC9jb21wYXRfaW9jdGwuaAppbmRleCBlY2IwZDM5Li4yMjA5YWQzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NvbXBhdF9pb2N0bC5oCisrKyBiL2luY2x1ZGUvbGludXgvY29tcGF0X2lvY3RsLmgKQEAgLTEwLDYgKzEwLDEwIEBACiAjZGVmaW5lIFVMT05HX0lPQ1RMKGNtZCkgIEhBTkRMRV9JT0NUTCgoY21kKSwoaW9jdGxfdHJhbnNfaGFuZGxlcl90KXN5c19pb2N0bCkKICNlbmRpZgogCisKK0NPTVBBVElCTEVfSU9DVEwoMHg0QjUwKSAgIC8qIEtER0hXQ0xLIC0gbm90IGluIHRoZSBrZXJuZWwsIGJ1dCBkb24ndCBjb21wbGFpbiAqLworQ09NUEFUSUJMRV9JT0NUTCgweDRCNTEpICAgLyogS0RTSFdDTEsgLSBub3QgaW4gdGhlIGtlcm5lbCwgYnV0IGRvbid0IGNvbXBsYWluICovCisKIC8qIEJpZyBUICovCiBDT01QQVRJQkxFX0lPQ1RMKFRDR0VUQSkKIENPTVBBVElCTEVfSU9DVEwoVENTRVRBKQpAQCAtNTIsMTMgKzU2LDYgQEAKIENPTVBBVElCTEVfSU9DVEwoVElPQ0dQVE4pCiBDT01QQVRJQkxFX0lPQ1RMKFRJT0NTUFRMQ0spCiBDT01QQVRJQkxFX0lPQ1RMKFRJT0NTRVJHRVRMU1IpCi0vKiBCaWcgRiAqLwotQ09NUEFUSUJMRV9JT0NUTChGQklPQkxBTkspCi1DT01QQVRJQkxFX0lPQ1RMKEZCSU9HRVRfVlNDUkVFTklORk8pCi1DT01QQVRJQkxFX0lPQ1RMKEZCSU9QVVRfVlNDUkVFTklORk8pCi1DT01QQVRJQkxFX0lPQ1RMKEZCSU9QQU5fRElTUExBWSkKLUNPTVBBVElCTEVfSU9DVEwoRkJJT0dFVF9DT04yRkJNQVApCi1DT01QQVRJQkxFX0lPQ1RMKEZCSU9QVVRfQ09OMkZCTUFQKQogLyogTGl0dGxlIGYgKi8KIENPTVBBVElCTEVfSU9DVEwoRklPQ0xFWCkKIENPTVBBVElCTEVfSU9DVEwoRklPTkNMRVgpCkBAIC04MSw2ICs3OCw4IEBACiBDT01QQVRJQkxFX0lPQ1RMKEhESU9fRFJJVkVfVEFTSykKIENPTVBBVElCTEVfSU9DVEwoSERJT19TRVRfUElPX01PREUpCiBDT01QQVRJQkxFX0lPQ1RMKEhESU9fU0VUX05JQ0UpCitDT01QQVRJQkxFX0lPQ1RMKEhESU9fU0VUX0tFRVBTRVRUSU5HUykKK0NPTVBBVElCTEVfSU9DVEwoSERJT19TQ0FOX0hXSUYpCiAvKiAweDAyIC0tIEZsb3BweSBpb2N0bHMgKi8KIENPTVBBVElCTEVfSU9DVEwoRkRNU0dPTikKIENPTVBBVElCTEVfSU9DVEwoRkRNU0dPRkYpCkBAIC05OSw2ICs5OCw3IEBACiBDT01QQVRJQkxFX0lPQ1RMKEZERk1UVFJLKQogQ09NUEFUSUJMRV9JT0NUTChGRFJBV0NNRCkKIC8qIDB4MTIgKi8KK0NPTVBBVElCTEVfSU9DVEwoQkxLUkFTRVQpCiBDT01QQVRJQkxFX0lPQ1RMKEJMS1JPU0VUKQogQ09NUEFUSUJMRV9JT0NUTChCTEtST0dFVCkKIENPTVBBVElCTEVfSU9DVEwoQkxLUlJQQVJUKQpAQCAtMjYyLDYgKzI2Miw3IEBACiAvKiBMaXR0bGUgbSAqLwogQ09NUEFUSUJMRV9JT0NUTChNVElPQ1RPUCkKIC8qIFNvY2tldCBsZXZlbCBzdHVmZiAqLworQ09NUEFUSUJMRV9JT0NUTChGSU9RU0laRSkKIENPTVBBVElCTEVfSU9DVEwoRklPU0VUT1dOKQogQ09NUEFUSUJMRV9JT0NUTChTSU9DU1BHUlApCiBDT01QQVRJQkxFX0lPQ1RMKEZJT0dFVE9XTikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29ubmVjdG9yLmggYi9pbmNsdWRlL2xpbnV4L2Nvbm5lY3Rvci5oCmluZGV4IGM1NzY5YzYuLmFkMWEyMmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY29ubmVjdG9yLmgKKysrIGIvaW5jbHVkZS9saW51eC9jb25uZWN0b3IuaApAQCAtMzIsNiArMzIsOCBAQAogICovCiAjZGVmaW5lIENOX0lEWF9QUk9DCQkJMHgxCiAjZGVmaW5lIENOX1ZBTF9QUk9DCQkJMHgxCisjZGVmaW5lIENOX0lEWF9DSUZTCQkJMHgyCisjZGVmaW5lIENOX1ZBTF9DSUZTICAgICAgICAgICAgICAgICAgICAgMHgxCiAKICNkZWZpbmUgQ05fTkVUTElOS19VU0VSUwkJMQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NwdS5oIGIvaW5jbHVkZS9saW51eC9jcHUuaAppbmRleCAxZjdiMmMwLi40M2M0NDUzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NwdS5oCisrKyBiL2luY2x1ZGUvbGludXgvY3B1LmgKQEAgLTQyLDYgKzQyLDcgQEAKIC8qIE5lZWQgdG8ga25vdyBhYm91dCBDUFVzIGdvaW5nIHVwL2Rvd24/ICovCiBleHRlcm4gaW50IHJlZ2lzdGVyX2NwdV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTsKIGV4dGVybiB2b2lkIHVucmVnaXN0ZXJfY3B1X25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpOworZXh0ZXJuIGludCBjdXJyZW50X2luX2NwdV9ob3RwbHVnKHZvaWQpOwogCiBpbnQgY3B1X3VwKHVuc2lnbmVkIGludCBjcHUpOwogCkBAIC01NCw2ICs1NSwxMCBAQAogc3RhdGljIGlubGluZSB2b2lkIHVucmVnaXN0ZXJfY3B1X25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCiB7CiB9CitzdGF0aWMgaW5saW5lIGludCBjdXJyZW50X2luX2NwdV9ob3RwbHVnKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CiAKICNlbmRpZiAvKiBDT05GSUdfU01QICovCiBleHRlcm4gc3RydWN0IHN5c2Rldl9jbGFzcyBjcHVfc3lzZGV2X2NsYXNzOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9lZXByb20uaCBiL2luY2x1ZGUvbGludXgvZWVwcm9tLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4YWZkOWQuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9lZXByb20uaAorKysgL2Rldi9udWxsCkBAIC0xLDEzNiArMCwwIEBACi0vKiBjcmVkaXQgd2luYm9uZC04NDAuYwotICovCi0jaW5jbHVkZSA8YXNtL2lvLmg+Ci1zdHJ1Y3QgZWVwcm9tX29wcyB7Ci0Jdm9pZAkoKnNldF9jcykodm9pZCAqZWUpOwotCXZvaWQJKCpjbGVhcl9jcykodm9pZCAqZWUpOwotfTsKLQotI2RlZmluZSBFRVBPTF9FRURJCTB4MDEKLSNkZWZpbmUgRUVQT0xfRUVETwkweDAyCi0jZGVmaW5lIEVFUE9MX0VFQ0xLCTB4MDQKLSNkZWZpbmUgRUVQT0xfRUVTRUwJMHgwOAotCi1zdHJ1Y3QgZWVwcm9tIHsKLQl2b2lkICpkZXY7Ci0Jc3RydWN0IGVlcHJvbV9vcHMgKm9wczsKLQotCXZvaWQgX19pb21lbSAqCWFkZHI7Ci0KLQl1bnNpZ25lZAllZV9hZGRyX2JpdHM7Ci0KLQl1bnNpZ25lZAllZXNlbDsKLQl1bnNpZ25lZAllZWNsazsKLQl1bnNpZ25lZAllZWRvOwotCXVuc2lnbmVkCWVlZGk7Ci0JdW5zaWduZWQJcG9sYXJpdHk7Ci0JdW5zaWduZWQJZWVfc3RhdGU7Ci0KLQlzcGlubG9ja190CSpsb2NrOwotCXUzMgkJKmNhY2hlOwotfTsKLQotCi11OCAgIGVlcHJvbV9yZWFkYihzdHJ1Y3QgZWVwcm9tICplZSwgdW5zaWduZWQgYWRkcmVzcyk7Ci12b2lkIGVlcHJvbV9yZWFkKHN0cnVjdCBlZXByb20gKmVlLCB1bnNpZ25lZCBhZGRyZXNzLCB1OCAqYnl0ZXMsCi0JCXVuc2lnbmVkIGNvdW50KTsKLXZvaWQgZWVwcm9tX3dyaXRlYihzdHJ1Y3QgZWVwcm9tICplZSwgdW5zaWduZWQgYWRkcmVzcywgdTggZGF0YSk7Ci12b2lkIGVlcHJvbV93cml0ZShzdHJ1Y3QgZWVwcm9tICplZSwgdW5zaWduZWQgYWRkcmVzcywgdTggKmJ5dGVzLAotCQl1bnNpZ25lZCBjb3VudCk7Ci0KLS8qIFRoZSBFRVBST00gY29tbWFuZHMgaW5jbHVkZSB0aGUgYWx3YXktc2V0IGxlYWRpbmcgYml0LiAqLwotZW51bSBFRVBST01fQ21kcyB7Ci0gICAgICAgIEVFX1dyaXRlQ21kPSg1IDw8IDYpLCBFRV9SZWFkQ21kPSg2IDw8IDYpLCBFRV9FcmFzZUNtZD0oNyA8PCA2KSwKLX07Ci0KLXZvaWQgc2V0dXBfZWVfbWVtX2JpdGJhbmdlcihzdHJ1Y3QgZWVwcm9tICplZSwgdm9pZCBfX2lvbWVtICptZW1hZGRyLCBpbnQgZWVzZWxfYml0LCBpbnQgZWVjbGtfYml0LCBpbnQgZWVkb19iaXQsIGludCBlZWRpX2JpdCwgdW5zaWduZWQgcG9sYXJpdHkpCi17Ci0JZWUtPmFkZHIgPSBtZW1hZGRyOwotCWVlLT5lZXNlbCA9IDEgPDwgZWVzZWxfYml0OwotCWVlLT5lZWNsayA9IDEgPDwgZWVjbGtfYml0OwotCWVlLT5lZWRvID0gMSA8PCBlZWRvX2JpdDsKLQllZS0+ZWVkaSA9IDEgPDwgZWVkaV9iaXQ7Ci0KLQllZS0+cG9sYXJpdHkgPSBwb2xhcml0eTsKLQotCSplZS0+Y2FjaGUgPSByZWFkbChlZS0+YWRkcik7Ci19Ci0KLS8qIGZvby4gcHV0IHRoaXMgaW4gYSAuYyBmaWxlICovCi1zdGF0aWMgaW5saW5lIHZvaWQgZWVwcm9tX3VwZGF0ZShzdHJ1Y3QgZWVwcm9tICplZSwgdTMyIG1hc2ssIGludCBwb2wpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1MzIgZGF0YTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKGVlLT5sb2NrLCBmbGFncyk7Ci0JZGF0YSA9ICplZS0+Y2FjaGU7Ci0KLQlkYXRhICY9IH5tYXNrOwotCWlmIChwb2wpCi0JCWRhdGEgfD0gbWFzazsKLQotCSplZS0+Y2FjaGUgPSBkYXRhOwotLy9wcmludGsoInVwZGF0ZTogJTA4eFxuIiwgZGF0YSk7Ci0Jd3JpdGVsKGRhdGEsIGVlLT5hZGRyKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGVlLT5sb2NrLCBmbGFncyk7Ci19Ci0KLXZvaWQgZWVwcm9tX2Nsa19sbyhzdHJ1Y3QgZWVwcm9tICplZSkKLXsKLQlpbnQgcG9sID0gISEoZWUtPnBvbGFyaXR5ICYgRUVQT0xfRUVDTEspOwotCi0JZWVwcm9tX3VwZGF0ZShlZSwgZWUtPmVlY2xrLCBwb2wpOwotCXVkZWxheSgyKTsKLX0KLQotdm9pZCBlZXByb21fY2xrX2hpKHN0cnVjdCBlZXByb20gKmVlKQotewotCWludCBwb2wgPSAhIShlZS0+cG9sYXJpdHkgJiBFRVBPTF9FRUNMSyk7Ci0KLQllZXByb21fdXBkYXRlKGVlLCBlZS0+ZWVjbGssICFwb2wpOwotCXVkZWxheSgyKTsKLX0KLQotdm9pZCBlZXByb21fc2VuZF9hZGRyKHN0cnVjdCBlZXByb20gKmVlLCB1bnNpZ25lZCBhZGRyZXNzKQotewotCWludCBwb2wgPSAhIShlZS0+cG9sYXJpdHkgJiBFRVBPTF9FRURJKTsKLQl1bnNpZ25lZCBpOwotCWFkZHJlc3MgfD0gNiA8PCA2OwotCi0gICAgICAgIC8qIFNoaWZ0IHRoZSByZWFkIGNvbW1hbmQgYml0cyBvdXQuICovCi0gICAgICAgIGZvciAoaT0wOyBpPDExOyBpKyspIHsKLQkJZWVwcm9tX3VwZGF0ZShlZSwgZWUtPmVlZGksICgoYWRkcmVzcyA+PiAxMCkgJiAxKSBeIHBvbCk7Ci0JCWFkZHJlc3MgPDw9IDE7Ci0JCWVlcHJvbV9jbGtfaGkoZWUpOwotCQllZXByb21fY2xrX2xvKGVlKTsKLSAgICAgICAgfQotCWVlcHJvbV91cGRhdGUoZWUsIGVlLT5lZWRpLCBwb2wpOwotfQotCi11MTYgICBlZXByb21fcmVhZHcoc3RydWN0IGVlcHJvbSAqZWUsIHVuc2lnbmVkIGFkZHJlc3MpCi17Ci0JdW5zaWduZWQgaTsKLQl1MTYJcmVzID0gMDsKLQotCWVlcHJvbV9jbGtfbG8oZWUpOwotCWVlcHJvbV91cGRhdGUoZWUsIGVlLT5lZXNlbCwgMSBeICEhKGVlLT5wb2xhcml0eSAmIEVFUE9MX0VFU0VMKSk7Ci0JZWVwcm9tX3NlbmRfYWRkcihlZSwgYWRkcmVzcyk7Ci0KLQlmb3IgKGk9MDsgaTwxNjsgaSsrKSB7Ci0JCXUzMiBkYXRhOwotCQllZXByb21fY2xrX2hpKGVlKTsKLQkJcmVzIDw8PSAxOwotCQlkYXRhID0gcmVhZGwoZWUtPmFkZHIpOwotLy9wcmludGsoImVlcHJvbV9yZWFkdzogJTA4eFxuIiwgZGF0YSk7Ci0JCXJlcyB8PSAhIShkYXRhICYgZWUtPmVlZG8pIF4gISEoZWUtPnBvbGFyaXR5ICYgRUVQT0xfRUVETyk7Ci0JCWVlcHJvbV9jbGtfbG8oZWUpOwotCX0KLQllZXByb21fdXBkYXRlKGVlLCBlZS0+ZWVzZWwsIDAgXiAhIShlZS0+cG9sYXJpdHkgJiBFRVBPTF9FRVNFTCkpOwotCi0JcmV0dXJuIHJlczsKLX0KLQotCi12b2lkIGVlcHJvbV93cml0ZWIoc3RydWN0IGVlcHJvbSAqZWUsIHVuc2lnbmVkIGFkZHJlc3MsIHU4IGRhdGEpCi17Ci19CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZiLmggYi9pbmNsdWRlL2xpbnV4L2ZiLmgKaW5kZXggZTdmZjk4ZS4uMDRhNThmMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mYi5oCisrKyBiL2luY2x1ZGUvbGludXgvZmIuaApAQCAtMjAxLDYgKzIwMSwxNCBAQAogI2RlZmluZSBGQl9WTU9ERV9TTU9PVEhfWFBBTgk1MTIJLyogc21vb3RoIHhwYW4gcG9zc2libGUgKGludGVybmFsbHkgdXNlZCkgKi8KICNkZWZpbmUgRkJfVk1PREVfQ09OVVBEQVRFCTUxMgkvKiBkb24ndCB1cGRhdGUgeC95b2Zmc2V0CSovCiAKKy8qCisgKiBEaXNwbGF5IHJvdGF0aW9uIHN1cHBvcnQKKyAqLworI2RlZmluZSBGQl9ST1RBVEVfVVIgICAgICAwCisjZGVmaW5lIEZCX1JPVEFURV9DVyAgICAgIDEKKyNkZWZpbmUgRkJfUk9UQVRFX1VEICAgICAgMgorI2RlZmluZSBGQl9ST1RBVEVfQ0NXICAgICAzCisKICNkZWZpbmUgUElDT1MyS0haKGEpICgxMDAwMDAwMDAwVUwvKGEpKQogI2RlZmluZSBLSFoyUElDT1MoYSkgKDEwMDAwMDAwMDBVTC8oYSkpCiAKQEAgLTQ4OSw5ICs0OTcsOSBAQAogI2RlZmluZSBGQl9FVkVOVF9NT0RFX0RFTEVURSAgICAgICAgICAgIDB4MDQKIC8qICAgICAgQSBkcml2ZXIgcmVnaXN0ZXJlZCBpdHNlbGYgKi8KICNkZWZpbmUgRkJfRVZFTlRfRkJfUkVHSVNURVJFRCAgICAgICAgICAweDA1Ci0vKiAgICAgIGdldCBjb25zb2xlIHRvIGZyYW1lYnVmZmVyIG1hcHBpbmcgKi8KKy8qICAgICAgQ09OU09MRS1TUEVDSUZJQzogZ2V0IGNvbnNvbGUgdG8gZnJhbWVidWZmZXIgbWFwcGluZyAqLwogI2RlZmluZSBGQl9FVkVOVF9HRVRfQ09OU09MRV9NQVAgICAgICAgIDB4MDYKLS8qICAgICAgc2V0IGNvbnNvbGUgdG8gZnJhbWVidWZmZXIgbWFwcGluZyAqLworLyogICAgICBDT05TT0xFLVNQRUNJRklDOiBzZXQgY29uc29sZSB0byBmcmFtZWJ1ZmZlciBtYXBwaW5nICovCiAjZGVmaW5lIEZCX0VWRU5UX1NFVF9DT05TT0xFX01BUCAgICAgICAgMHgwNwogLyogICAgICBBIGRpc3BsYXkgYmxhbmsgaXMgcmVxdWVzdGVkICAgICAgICovCiAjZGVmaW5lIEZCX0VWRU5UX0JMQU5LICAgICAgICAgICAgICAgICAgMHgwOApAQCAtNTAwLDYgKzUwOCwxMiBAQAogLyoJVGhlIHJlc29sdXRpb24gb2YgdGhlIHBhc3NlZCBpbiBmYl9pbmZvIGFib3V0IHRvIGNoYW5nZSBhbmQKICAgICAgICAgYWxsIHZjJ3Mgc2hvdWxkIGJlIGNoYW5nZWQgICAgICAgICAqLwogI2RlZmluZSBGQl9FVkVOVF9NT0RFX0NIQU5HRV9BTEwJMHgwQQorLyogICAgICBDT05TT0xFLVNQRUNJRklDOiBzZXQgY29uc29sZSByb3RhdGlvbiAqLworI2RlZmluZSBGQl9FVkVOVF9TRVRfQ09OX1JPVEFURSAgICAgICAgIDB4MEIKKy8qICAgICAgQ09OU09MRS1TUEVDSUZJQzogZ2V0IGNvbnNvbGUgcm90YXRpb24gKi8KKyNkZWZpbmUgRkJfRVZFTlRfR0VUX0NPTl9ST1RBVEUgICAgICAgICAweDBDCisvKiAgICAgIENPTlNPTEUtU1BFQ0lGSUM6IHJvdGF0ZSBhbGwgY29uc29sZXMgKi8KKyNkZWZpbmUgRkJfRVZFTlRfU0VUX0NPTl9ST1RBVEVfQUxMICAgICAweDBECiAKIHN0cnVjdCBmYl9ldmVudCB7CiAJc3RydWN0IGZiX2luZm8gKmluZm87CkBAIC04MTcsOCArODMxLDggQEAKIC8qIGRyaXZlcnMvdmlkZW8vZmJtZW0uYyAqLwogZXh0ZXJuIGludCByZWdpc3Rlcl9mcmFtZWJ1ZmZlcihzdHJ1Y3QgZmJfaW5mbyAqZmJfaW5mbyk7CiBleHRlcm4gaW50IHVucmVnaXN0ZXJfZnJhbWVidWZmZXIoc3RydWN0IGZiX2luZm8gKmZiX2luZm8pOwotZXh0ZXJuIGludCBmYl9wcmVwYXJlX2xvZ28oc3RydWN0IGZiX2luZm8gKmZiX2luZm8pOwotZXh0ZXJuIGludCBmYl9zaG93X2xvZ28oc3RydWN0IGZiX2luZm8gKmZiX2luZm8pOworZXh0ZXJuIGludCBmYl9wcmVwYXJlX2xvZ28oc3RydWN0IGZiX2luZm8gKmZiX2luZm8sIGludCByb3RhdGUpOworZXh0ZXJuIGludCBmYl9zaG93X2xvZ28oc3RydWN0IGZiX2luZm8gKmZiX2luZm8sIGludCByb3RhdGUpOwogZXh0ZXJuIGNoYXIqIGZiX2dldF9idWZmZXJfb2Zmc2V0KHN0cnVjdCBmYl9pbmZvICppbmZvLCBzdHJ1Y3QgZmJfcGl4bWFwICpidWYsIHUzMiBzaXplKTsKIGV4dGVybiB2b2lkIGZiX3BhZF91bmFsaWduZWRfYnVmZmVyKHU4ICpkc3QsIHUzMiBkX3BpdGNoLCB1OCAqc3JjLCB1MzIgaWR4LAogCQkJCXUzMiBoZWlnaHQsIHUzMiBzaGlmdF9oaWdoLCB1MzIgc2hpZnRfbG93LCB1MzIgbW9kKTsKQEAgLTgyOCw2ICs4NDIsNyBAQAogCQkJICAgICAgc3RydWN0IGZiX2ZpeF9zY3JlZW5pbmZvICpmaXgpOwogZXh0ZXJuIGludCBmYl9nZXRfb3B0aW9ucyhjaGFyICpuYW1lLCBjaGFyICoqb3B0aW9uKTsKIGV4dGVybiBpbnQgZmJfbmV3X21vZGVsaXN0KHN0cnVjdCBmYl9pbmZvICppbmZvKTsKK2V4dGVybiBpbnQgZmJfY29uX2R1aXQoc3RydWN0IGZiX2luZm8gKmluZm8sIGludCBldmVudCwgdm9pZCAqZGF0YSk7CiAKIGV4dGVybiBzdHJ1Y3QgZmJfaW5mbyAqcmVnaXN0ZXJlZF9mYltGQl9NQVhdOwogZXh0ZXJuIGludCBudW1fcmVnaXN0ZXJlZF9mYjsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnMuaCBiL2luY2x1ZGUvbGludXgvZnMuaAppbmRleCAxYjVmNTAyLi5jYzM1YjZhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9mcy5oCkBAIC04NzQsNiArODc0LDcgQEAKIC8qCiAgKiBWRlMgaGVscGVyIGZ1bmN0aW9ucy4uCiAgKi8KK2V4dGVybiBpbnQgdmZzX3Blcm1pc3Npb24oc3RydWN0IG5hbWVpZGF0YSAqLCBpbnQpOwogZXh0ZXJuIGludCB2ZnNfY3JlYXRlKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICosIGludCwgc3RydWN0IG5hbWVpZGF0YSAqKTsKIGV4dGVybiBpbnQgdmZzX21rZGlyKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICosIGludCk7CiBleHRlcm4gaW50IHZmc19ta25vZChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqLCBpbnQsIGRldl90KTsKQEAgLTg4OSw2ICs4OTAsMTEgQEAKIGV4dGVybiB2b2lkIGRlbnRyeV91bmhhc2goc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKIAogLyoKKyAqIFZGUyBmaWxlIGhlbHBlciBmdW5jdGlvbnMuCisgKi8KK2V4dGVybiBpbnQgZmlsZV9wZXJtaXNzaW9uKHN0cnVjdCBmaWxlICosIGludCk7CisKKy8qCiAgKiBGaWxlIHR5cGVzCiAgKgogICogTk9URSEgVGhlc2UgbWF0Y2ggYml0cyAxMi4uMTUgb2Ygc3RhdC5zdF9tb2RlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzX2VuZXRfcGQuaCBiL2luY2x1ZGUvbGludXgvZnNfZW5ldF9wZC5oCmluZGV4IGJlZjIzYmIuLjc4M2M0NzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnNfZW5ldF9wZC5oCisrKyBiL2luY2x1ZGUvbGludXgvZnNfZW5ldF9wZC5oCkBAIC0xNiw3ICsxNiw2IEBACiAjaWZuZGVmIEZTX0VORVRfUERfSAogI2RlZmluZSBGU19FTkVUX1BEX0gKIAotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KIAogI2RlZmluZSBGU19FTkVUX05BTUUJImZzX2VuZXQiCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2dlbmV0bGluay5oIGIvaW5jbHVkZS9saW51eC9nZW5ldGxpbmsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGYxMmE0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9nZW5ldGxpbmsuaApAQCAtMCwwICsxLDUxIEBACisjaWZuZGVmIF9fTElOVVhfR0VORVJJQ19ORVRMSU5LX0gKKyNkZWZpbmUgX19MSU5VWF9HRU5FUklDX05FVExJTktfSAorCisjaW5jbHVkZSA8bGludXgvbmV0bGluay5oPgorCisjZGVmaW5lIEdFTkxfTkFNU0laCTE2CS8qIGxlbmd0aCBvZiBmYW1pbHkgbmFtZSAqLworCisjZGVmaW5lIEdFTkxfTUlOX0lECU5MTVNHX01JTl9UWVBFCisjZGVmaW5lIEdFTkxfTUFYX0lECTEwMjMKKworc3RydWN0IGdlbmxtc2doZHIgeworCV9fdTgJY21kOworCV9fdTgJdmVyc2lvbjsKKwlfX3UxNglyZXNlcnZlZDsKK307CisKKyNkZWZpbmUgR0VOTF9IRFJMRU4JTkxNU0dfQUxJR04oc2l6ZW9mKHN0cnVjdCBnZW5sbXNnaGRyKSkKKworLyoKKyAqIExpc3Qgb2YgcmVzZXJ2ZWQgc3RhdGljIGdlbmVyaWMgbmV0bGluayBpZGVudGlmaWVyczoKKyAqLworI2RlZmluZSBHRU5MX0lEX0dFTkVSQVRFCTAKKyNkZWZpbmUgR0VOTF9JRF9DVFJMCQlOTE1TR19NSU5fVFlQRQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvbnRyb2xsZXIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworZW51bSB7CisJQ1RSTF9DTURfVU5TUEVDLAorCUNUUkxfQ01EX05FV0ZBTUlMWSwKKwlDVFJMX0NNRF9ERUxGQU1JTFksCisJQ1RSTF9DTURfR0VURkFNSUxZLAorCUNUUkxfQ01EX05FV09QUywKKwlDVFJMX0NNRF9ERUxPUFMsCisJQ1RSTF9DTURfR0VUT1BTLAorCV9fQ1RSTF9DTURfTUFYLAorfTsKKworI2RlZmluZSBDVFJMX0NNRF9NQVggKF9fQ1RSTF9DTURfTUFYIC0gMSkKKworZW51bSB7CisJQ1RSTF9BVFRSX1VOU1BFQywKKwlDVFJMX0FUVFJfRkFNSUxZX0lELAorCUNUUkxfQVRUUl9GQU1JTFlfTkFNRSwKKwlfX0NUUkxfQVRUUl9NQVgsCit9OworCisjZGVmaW5lIENUUkxfQVRUUl9NQVggKF9fQ1RSTF9BVFRSX01BWCAtIDEpCisKKyNlbmRpZgkvKiBfX0xJTlVYX0dFTkVSSUNfTkVUTElOS19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2kyYy1pZC5oIGIvaW5jbHVkZS9saW51eC9pMmMtaWQuaAppbmRleCAxY2U0YjU0Li43NGFiYWVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2kyYy1pZC5oCisrKyBiL2luY2x1ZGUvbGludXgvaTJjLWlkLmgKQEAgLTI3LDEwICsyNywxMCBAQAogICogLS0tLSBEcml2ZXIgdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqICAgICAgIGRldmljZSBpZCBuYW1lICsgbnVtYmVyICAgICAgICBmdW5jdGlvbiBkZXNjcmlwdGlvbiwgaTJjIGFkZHJlc3MoZXMpCiAgKgotICogIFJhbmdlIDEwMDAtMTk5OSByYW5nZSBpcyBkZWZpbmVkIGluIHNlbnNvcnMvc2Vuc29ycy5oIAotICogIFJhbmdlIDB4MTAwIC0gMHgxZmYgaXMgZm9yIFY0TDIgQ29tbW9uIENvbXBvbmVudHMgCisgKiAgUmFuZ2UgMTAwMC0xOTk5IHJhbmdlIGlzIGRlZmluZWQgaW4gc2Vuc29ycy9zZW5zb3JzLmgKKyAqICBSYW5nZSAweDEwMCAtIDB4MWZmIGlzIGZvciBWNEwyIENvbW1vbiBDb21wb25lbnRzCiAgKiAgUmFuZ2UgMHhmMDAwIC0gMHhmZmZmIGlzIHJlc2VydmVkIGZvciBsb2NhbCBleHBlcmltZW50YXRpb24sIGFuZCBzaG91bGQKLSAqICAgICAgICBuZXZlciBiZSB1c2VkIGluIG9mZmljaWFsIGRyaXZlcnMgCisgKiAgICAgICAgbmV2ZXIgYmUgdXNlZCBpbiBvZmZpY2lhbCBkcml2ZXJzCiAgKi8KIAogI2RlZmluZSBJMkNfRFJJVkVSSURfTVNQMzQwMAkgMQpAQCAtOTksNyArOTksMTQgQEAKICNkZWZpbmUgSTJDX0RSSVZFUklEX01BWDY5MDAJNjMJLyogTUFYNjkwMCByZWFsLXRpbWUgY2xvY2sJKi8KICNkZWZpbmUgSTJDX0RSSVZFUklEX1NBQTcxMTRICTY0CS8qIHZpZGVvIGRlY29kZXIJCSovCiAjZGVmaW5lIEkyQ19EUklWRVJJRF9EUzEzNzQJNjUJLyogRFMxMzc0IHJlYWwgdGltZSBjbG9jawkqLwotCisjZGVmaW5lIEkyQ19EUklWRVJJRF9UREE5ODc0CTY2CS8qIFRWIHNvdW5kIGRlY29kZXIJCSovCisjZGVmaW5lIEkyQ19EUklWRVJJRF9TQUE2NzUySFMJNjcJLyogTVBFRzIgZW5jb2RlcgkJKi8KKyNkZWZpbmUgSTJDX0RSSVZFUklEX1RWRUVQUk9NCTY4CS8qIFRWIEVFUFJPTQkJCSovCisjZGVmaW5lIEkyQ19EUklWRVJJRF9XTTg3NzUJNjkJLyogd204Nzc1IGF1ZGlvIHByb2Nlc3NvcgkqLworI2RlZmluZSBJMkNfRFJJVkVSSURfQ1M1M0wzMkEJNzAJLyogY3M1M2wzMmEgYXVkaW8gcHJvY2Vzc29yCSovCisjZGVmaW5lIEkyQ19EUklWRVJJRF9DWDI1ODQwCTcxCS8qIGN4MjU4NHggdmlkZW8gZW5jb2RlcgkqLworI2RlZmluZSBJMkNfRFJJVkVSSURfU0FBNzEyNwk3MgkvKiBzYWE3MTI0IHZpZGVvIGVuY29kZXIJKi8KKyNkZWZpbmUgSTJDX0RSSVZFUklEX1NBQTcxMVgJNzMJLyogc2FhNzExeCB2aWRlbyBlbmNvZGVycwkqLwogCiAjZGVmaW5lIEkyQ19EUklWRVJJRF9FWFAwCTB4RjAJLyogZXhwZXJpbWVudGFsIHVzZSBpZCdzCSovCiAjZGVmaW5lIEkyQ19EUklWRVJJRF9FWFAxCTB4RjEKQEAgLTExMSw3ICsxMTgsNyBAQAogI2RlZmluZSBJMkNfRFJJVkVSSURfQVJQICAgICAgICA5MDIgICAgLyogU01CdXMgQVJQIENsaWVudCAgICAgICAgICAgICAgKi8KICNkZWZpbmUgSTJDX0RSSVZFUklEX0FMRVJUICAgICAgOTAzICAgIC8qIFNNQnVzIEFsZXJ0IFJlc3BvbmRlciBDbGllbnQgICovCiAKLS8qIElEcyAtLSAgIFVzZSBEUklWRVJJRHMgMTAwMC0xOTk5IGZvciBzZW5zb3JzLiAKKy8qIElEcyAtLSAgIFVzZSBEUklWRVJJRHMgMTAwMC0xOTk5IGZvciBzZW5zb3JzLgogICAgVGhlc2Ugd2VyZSBvcmlnaW5hbGx5IGluIHNlbnNvcnMuaCBpbiB0aGUgbG1fc2Vuc29ycyBwYWNrYWdlICovCiAjZGVmaW5lIEkyQ19EUklWRVJJRF9MTTc4IDEwMDIKICNkZWZpbmUgSTJDX0RSSVZFUklEX0xNNzUgMTAwMwpAQCAtMTkwLDYgKzE5Nyw3IEBACiAjZGVmaW5lIEkyQ19IV19CX05WSURJQQkJMHgwMTAwMWMgLyogbnZpZGlhIGZyYW1lYnVmZmVyIGRyaXZlciAqLwogI2RlZmluZSBJMkNfSFdfQl9TQVZBR0UJCTB4MDEwMDFkIC8qIHNhdmFnZSBmcmFtZWJ1ZmZlciBkcml2ZXIgKi8KICNkZWZpbmUgSTJDX0hXX0JfUkFERU9OCQkweDAxMDAxZSAvKiByYWRlb24gZnJhbWVidWZmZXIgZHJpdmVyICovCisjZGVmaW5lIEkyQ19IV19CX0VNMjhYWAkJMHgwMTAwMWYgLyogZW0yOHh4IHZpZGVvIGNhcHR1cmUgY2FyZHMgKi8KIAogLyogLS0tIFBDRiA4NTg0IGJhc2VkIGFsZ29yaXRobXMJCQkJCSovCiAjZGVmaW5lIEkyQ19IV19QX0xQCQkweDAyMDAwMCAvKiBQYXJhbGxlbCBwb3J0IGludGVyZmFjZSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZGUuaCBiL2luY2x1ZGUvbGludXgvaWRlLmgKaW5kZXggMzQ2MWFiYy4uYWM4YjI1ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lkZS5oCkBAIC0yMzAsNiArMjMwLDcgQEAKIAlpbnQJCWRtYTsJCQkvKiBvdXIgZG1hIGVudHJ5ICovCiAJaWRlX2Fja19pbnRyX3QJKmFja19pbnRyOwkJLyogYWNrbm93bGVkZ2UgaW50ZXJydXB0ICovCiAJaHdpZl9jaGlwc2V0X3QgIGNoaXBzZXQ7CisJc3RydWN0IGRldmljZQkqZGV2OwogfSBod19yZWdzX3Q7CiAKIC8qCkBAIC0yNjYsNiArMjY3LDEwIEBACiAKICNpbmNsdWRlIDxhc20vaWRlLmg+CiAKKyNpZm5kZWYgTUFYX0hXSUZTCisjZGVmaW5lIE1BWF9IV0lGUwlDT05GSUdfSURFX01BWF9IV0lGUworI2VuZGlmCisKIC8qIG5lZWRlZCBvbiBhbHBoYSwgeDg2L3g4Nl82NCwgaWE2NCwgbWlwcywgcHBjMzIgYW5kIHNoICovCiAjaWZuZGVmIElERV9BUkNIX09CU09MRVRFX0RFRkFVTFRTCiAjIGRlZmluZSBpZGVfZGVmYXVsdF9pb19iYXNlKGluZGV4KQkoMCkKQEAgLTEzMjQsNyArMTMyOSw4IEBACiBleHRlcm4gaW50IGlkZXByb2JlX2luaXQodm9pZCk7CiAKIGV4dGVybiB2b2lkIGlkZV9zY2FuX3BjaWJ1cyhpbnQgc2Nhbl9kaXJlY3Rpb24pIF9faW5pdDsKLWV4dGVybiBpbnQgaWRlX3BjaV9yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHBjaV9kcml2ZXIgKmRyaXZlcik7CitleHRlcm4gaW50IF9faWRlX3BjaV9yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHBjaV9kcml2ZXIgKmRyaXZlciwgc3RydWN0IG1vZHVsZSAqb3duZXIpOworI2RlZmluZSBpZGVfcGNpX3JlZ2lzdGVyX2RyaXZlcihkKSBfX2lkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKGQsIFRISVNfTU9EVUxFKQogZXh0ZXJuIHZvaWQgaWRlX3BjaV91bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgcGNpX2RyaXZlciAqZHJpdmVyKTsKIHZvaWQgaWRlX3BjaV9zZXR1cF9wb3J0cyhzdHJ1Y3QgcGNpX2RldiAqLCBzdHJ1Y3QgaWRlX3BjaV9kZXZpY2VfcyAqLCBpbnQsIGF0YV9pbmRleF90ICopOwogZXh0ZXJuIHZvaWQgaWRlX3NldHVwX3BjaV9ub2lzZSAoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IGlkZV9wY2lfZGV2aWNlX3MgKmQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl9ldGhlci5oIGIvaW5jbHVkZS9saW51eC9pZl9ldGhlci5oCmluZGV4IGQyMWMzMDUuLmZlMjZkNDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWZfZXRoZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lmX2V0aGVyLmgKQEAgLTIxLDYgKzIxLDggQEAKICNpZm5kZWYgX0xJTlVYX0lGX0VUSEVSX0gKICNkZWZpbmUgX0xJTlVYX0lGX0VUSEVSX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIC8qCiAgKglJRUVFIDgwMi4zIEV0aGVybmV0IG1hZ2ljIGNvbnN0YW50cy4gIFRoZSBmcmFtZSBzaXplcyBvbWl0IHRoZSBwcmVhbWJsZQogICoJYW5kIEZDUy9DUkMgKGZyYW1lIGNoZWNrIHNlcXVlbmNlKS4gCkBAIC0xMDAsNyArMTAyLDcgQEAKIHN0cnVjdCBldGhoZHIgewogCXVuc2lnbmVkIGNoYXIJaF9kZXN0W0VUSF9BTEVOXTsJLyogZGVzdGluYXRpb24gZXRoIGFkZHIJKi8KIAl1bnNpZ25lZCBjaGFyCWhfc291cmNlW0VUSF9BTEVOXTsJLyogc291cmNlIGV0aGVyIGFkZHIJKi8KLQl1bnNpZ25lZCBzaG9ydAloX3Byb3RvOwkJLyogcGFja2V0IHR5cGUgSUQgZmllbGQJKi8KKwlfX2JlMTYJCWhfcHJvdG87CQkvKiBwYWNrZXQgdHlwZSBJRCBmaWVsZAkqLwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogI2lmZGVmIF9fS0VSTkVMX18KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWZfcHBwLmggYi9pbmNsdWRlL2xpbnV4L2lmX3BwcC5oCmluZGV4IDU3MmFmZjcuLjc2ODM3MmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWZfcHBwLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZl9wcHAuaApAQCAtMjEsNyArMjEsNyBAQAogICovCiAKIC8qCi0gKiAgPT1GSUxFVkVSU0lPTiAyMDAwMDcyND09CisgKiAgPT1GSUxFVkVSU0lPTiAyMDA1MDgxMj09CiAgKgogICogIE5PVEUgVE8gTUFJTlRBSU5FUlM6CiAgKiAgICAgSWYgeW91IG1vZGlmeSB0aGlzIGZpbGUgYXQgYWxsLCBwbGVhc2Ugc2V0IHRoZSBhYm92ZSBkYXRlLgpAQCAtMzUsNiArMzUsOCBAQAogI2lmbmRlZiBfSUZfUFBQX0hfCiAjZGVmaW5lIF9JRl9QUFBfSF8KIAorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisKIC8qCiAgKiBQYWNrZXQgc2l6ZXMKICAqLwpAQCAtNzAsNyArNzIsOCBAQAogI2RlZmluZSBTQ19MT0dfUkFXSU4JMHgwMDA4MDAwMAkvKiBsb2cgYWxsIGNoYXJzIHJlY2VpdmVkICovCiAjZGVmaW5lIFNDX0xPR19GTFVTSAkweDAwMTAwMDAwCS8qIGxvZyBhbGwgY2hhcnMgZmx1c2hlZCAqLwogI2RlZmluZQlTQ19TWU5DCQkweDAwMjAwMDAwCS8qIHN5bmNocm9ub3VzIHNlcmlhbCBtb2RlICovCi0jZGVmaW5lCVNDX01BU0sJCTB4MGYyMDBmZmYJLyogYml0cyB0aGF0IHVzZXIgY2FuIGNoYW5nZSAqLworI2RlZmluZQlTQ19NVVNUX0NPTVAgICAgMHgwMDQwMDAwMAkvKiBubyB1bmNvbXByZXNzZWQgcGFja2V0cyBtYXkgYmUgc2VudCBvciByZWNlaXZlZCAqLworI2RlZmluZQlTQ19NQVNLCQkweDBmNjAwZmZmCS8qIGJpdHMgdGhhdCB1c2VyIGNhbiBjaGFuZ2UgKi8KIAogLyogc3RhdGUgYml0cyAqLwogI2RlZmluZSBTQ19YTUlUX0JVU1kJMHgxMDAwMDAwMAkvKiAodXNlZCBieSBpc2RuX3BwcD8pICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lmX3dhbnBpcGVfY29tbW9uLmggYi9pbmNsdWRlL2xpbnV4L2lmX3dhbnBpcGVfY29tbW9uLmgKaW5kZXggZjI1ZmVjOC4uNmU1NDYxZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZl93YW5waXBlX2NvbW1vbi5oCisrKyBiL2luY2x1ZGUvbGludXgvaWZfd2FucGlwZV9jb21tb24uaApAQCAtMTcsOCArMTcsNiBAQAogI2lmbmRlZiBfV0FOUElQRV9TT0NLX0RSSVZFUl9DT01NT05fSAogI2RlZmluZSBfV0FOUElQRV9TT0NLX0RSSVZFUl9DT01NT05fSAogCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgotCiB0eXBlZGVmIHN0cnVjdCB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKnNsYXZlOwogCWF0b21pY190IHBhY2tldF9zZW50OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pc3RhbGxpb24uaCBiL2luY2x1ZGUvbGludXgvaXN0YWxsaW9uLmgKaW5kZXggNWY0ZWU2NC4uMWY5OTY2MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pc3RhbGxpb24uaAorKysgYi9pbmNsdWRlL2xpbnV4L2lzdGFsbGlvbi5oCkBAIC0yMSw4ICsyMSw2IEBACiAgKglGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmCV9JU1RBTExJT05fSAogI2RlZmluZQlfSVNUQUxMSU9OX0gKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGliYXRhLmggYi9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oCmluZGV4IGRjZDE3ZTcuLmFkNTk5NjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbGliYXRhLmgKKysrIGIvaW5jbHVkZS9saW51eC9saWJhdGEuaApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxsaW51eC9hdGEuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KQEAgLTIxNCw3ICsyMTUsNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQJbm9kZTsKIAlzdHJ1Y3QgZGV2aWNlIAkJKmRldjsKIAljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyAqcG9ydF9vcHM7Ci0JU2NzaV9Ib3N0X1RlbXBsYXRlCSpzaHQ7CisJc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqc2h0OwogCXN0cnVjdCBhdGFfaW9wb3J0cwlwb3J0W0FUQV9NQVhfUE9SVFNdOwogCXVuc2lnbmVkIGludAkJbl9wb3J0czsKIAl1bnNpZ25lZCBpbnQJCWhhcmRfcG9ydF9ubzsKQEAgLTM5OCwxMiArMzk5LDEzIEBACiB9OwogCiBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyB7Ci0JU2NzaV9Ib3N0X1RlbXBsYXRlCSpzaHQ7CisJc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZQkqc2h0OwogCXVuc2lnbmVkIGxvbmcJCWhvc3RfZmxhZ3M7CiAJdW5zaWduZWQgbG9uZwkJcGlvX21hc2s7CiAJdW5zaWduZWQgbG9uZwkJbXdkbWFfbWFzazsKIAl1bnNpZ25lZCBsb25nCQl1ZG1hX21hc2s7CiAJY29uc3Qgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgKnBvcnRfb3BzOworCXZvaWQgCQkJKnByaXZhdGVfZGF0YTsKIH07CiAKIHN0cnVjdCBhdGFfdGltaW5nIHsKQEAgLTQzMyw3ICs0MzUsNyBAQAogI2VuZGlmIC8qIENPTkZJR19QQ0kgKi8KIGV4dGVybiBpbnQgYXRhX2RldmljZV9hZGQoY29uc3Qgc3RydWN0IGF0YV9wcm9iZV9lbnQgKmVudCk7CiBleHRlcm4gdm9pZCBhdGFfaG9zdF9zZXRfcmVtb3ZlKHN0cnVjdCBhdGFfaG9zdF9zZXQgKmhvc3Rfc2V0KTsKLWV4dGVybiBpbnQgYXRhX3Njc2lfZGV0ZWN0KFNjc2lfSG9zdF9UZW1wbGF0ZSAqc2h0KTsKK2V4dGVybiBpbnQgYXRhX3Njc2lfZGV0ZWN0KHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKnNodCk7CiBleHRlcm4gaW50IGF0YV9zY3NpX2lvY3RsKHN0cnVjdCBzY3NpX2RldmljZSAqZGV2LCBpbnQgY21kLCB2b2lkIF9fdXNlciAqYXJnKTsKIGV4dGVybiBpbnQgYXRhX3Njc2lfcXVldWVjbWQoc3RydWN0IHNjc2lfY21uZCAqY21kLCB2b2lkICgqZG9uZSkoc3RydWN0IHNjc2lfY21uZCAqKSk7CiBleHRlcm4gaW50IGF0YV9zY3NpX2Vycm9yKHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdGQvY2ZpLmggYi9pbmNsdWRlL2xpbnV4L210ZC9jZmkuaAppbmRleCAzOWYxNDMwLi4zYzllYTRiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L210ZC9jZmkuaAorKysgYi9pbmNsdWRlL2xpbnV4L210ZC9jZmkuaApAQCAtOCw3ICs4LDYgQEAKICNkZWZpbmUgX19NVERfQ0ZJX0hfXwogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXRkL210ZC5oIGIvaW5jbHVkZS9saW51eC9tdGQvbXRkLmgKaW5kZXggZTk1ZDA0Ni4uYjZmMmZkYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tdGQvbXRkLmgKKysrIGIvaW5jbHVkZS9saW51eC9tdGQvbXRkLmgKQEAgLTE0LDcgKzE0LDYgQEAKICNlbmRpZgogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdWlvLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25hbWVpLmggYi9pbmNsdWRlL2xpbnV4L25hbWVpLmgKaW5kZXggMWM5NzVkMC4uNDU1NjYwZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uYW1laS5oCisrKyBiL2luY2x1ZGUvbGludXgvbmFtZWkuaApAQCAtNzQsNyArNzQsNyBAQAogZXh0ZXJuIHZvaWQgcmVsZWFzZV9vcGVuX2ludGVudChzdHJ1Y3QgbmFtZWlkYXRhICopOwogCiBleHRlcm4gc3RydWN0IGRlbnRyeSAqIGxvb2t1cF9vbmVfbGVuKGNvbnN0IGNoYXIgKiwgc3RydWN0IGRlbnRyeSAqLCBpbnQpOwotZXh0ZXJuIHN0cnVjdCBkZW50cnkgKiBsb29rdXBfaGFzaChzdHJ1Y3QgcXN0ciAqLCBzdHJ1Y3QgZGVudHJ5ICopOworZXh0ZXJuIHN0cnVjdCBkZW50cnkgKiBsb29rdXBfaGFzaChzdHJ1Y3QgbmFtZWlkYXRhICopOwogCiBleHRlcm4gaW50IGZvbGxvd19kb3duKHN0cnVjdCB2ZnNtb3VudCAqKiwgc3RydWN0IGRlbnRyeSAqKik7CiBleHRlcm4gaW50IGZvbGxvd191cChzdHJ1Y3QgdmZzbW91bnQgKiosIHN0cnVjdCBkZW50cnkgKiopOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKaW5kZXggYzZlZmNlNC4uOTM2ZjhiNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCkBAIC05MjcsNiArOTI3LDEzIEBACiBleHRlcm4gaW50CQl3ZWlnaHRfcDsKIGV4dGVybiBpbnQJCW5ldGRldl9zZXRfbWFzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXRfZGV2aWNlICptYXN0ZXIpOwogZXh0ZXJuIGludCBza2JfY2hlY2tzdW1faGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgaW53YXJkKTsKKyNpZmRlZiBDT05GSUdfQlVHCitleHRlcm4gdm9pZCBuZXRkZXZfcnhfY3N1bV9mYXVsdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgbmV0ZGV2X3J4X2NzdW1fZmF1bHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKK30KKyNlbmRpZgogLyogcnggc2tiIHRpbWVzdGFtcHMgKi8KIGV4dGVybiB2b2lkCQluZXRfZW5hYmxlX3RpbWVzdGFtcCh2b2lkKTsKIGV4dGVybiB2b2lkCQluZXRfZGlzYWJsZV90aW1lc3RhbXAodm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29tbW9uLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQzOWI1MQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb21tb24uaApAQCAtMCwwICsxLDE1OSBAQAorI2lmbmRlZiBfTkZfQ09OTlRSQUNLX0NPTU1PTl9ICisjZGVmaW5lIF9ORl9DT05OVFJBQ0tfQ09NTU9OX0gKKy8qIENvbm5lY3Rpb24gc3RhdGUgdHJhY2tpbmcgZm9yIG5ldGZpbHRlci4gIFRoaXMgaXMgc2VwYXJhdGVkIGZyb20sCisgICBidXQgcmVxdWlyZWQgYnksIHRoZSBOQVQgbGF5ZXI7IGl0IGNhbiBhbHNvIGJlIHVzZWQgYnkgYW4gaXB0YWJsZXMKKyAgIGV4dGVuc2lvbi4gKi8KK2VudW0gaXBfY29ubnRyYWNrX2luZm8KK3sKKwkvKiBQYXJ0IG9mIGFuIGVzdGFibGlzaGVkIGNvbm5lY3Rpb24gKGVpdGhlciBkaXJlY3Rpb24pLiAqLworCUlQX0NUX0VTVEFCTElTSEVELAorCisJLyogTGlrZSBORVcsIGJ1dCByZWxhdGVkIHRvIGFuIGV4aXN0aW5nIGNvbm5lY3Rpb24sIG9yIElDTVAgZXJyb3IKKwkgICAoaW4gZWl0aGVyIGRpcmVjdGlvbikuICovCisJSVBfQ1RfUkVMQVRFRCwKKworCS8qIFN0YXJ0ZWQgYSBuZXcgY29ubmVjdGlvbiB0byB0cmFjayAob25seQorICAgICAgICAgICBJUF9DVF9ESVJfT1JJR0lOQUwpOyBtYXkgYmUgYSByZXRyYW5zbWlzc2lvbi4gKi8KKwlJUF9DVF9ORVcsCisKKwkvKiA+PSB0aGlzIGluZGljYXRlcyByZXBseSBkaXJlY3Rpb24gKi8KKwlJUF9DVF9JU19SRVBMWSwKKworCS8qIE51bWJlciBvZiBkaXN0aW5jdCBJUF9DVCB0eXBlcyAobm8gTkVXIGluIHJlcGx5IGRpcm4pLiAqLworCUlQX0NUX05VTUJFUiA9IElQX0NUX0lTX1JFUExZICogMiAtIDEKK307CisKKy8qIEJpdHNldCByZXByZXNlbnRpbmcgc3RhdHVzIG9mIGNvbm5lY3Rpb24uICovCitlbnVtIGlwX2Nvbm50cmFja19zdGF0dXMgeworCS8qIEl0J3MgYW4gZXhwZWN0ZWQgY29ubmVjdGlvbjogYml0IDAgc2V0LiAgVGhpcyBiaXQgbmV2ZXIgY2hhbmdlZCAqLworCUlQU19FWFBFQ1RFRF9CSVQgPSAwLAorCUlQU19FWFBFQ1RFRCA9ICgxIDw8IElQU19FWFBFQ1RFRF9CSVQpLAorCisJLyogV2UndmUgc2VlbiBwYWNrZXRzIGJvdGggd2F5czogYml0IDEgc2V0LiAgQ2FuIGJlIHNldCwgbm90IHVuc2V0LiAqLworCUlQU19TRUVOX1JFUExZX0JJVCA9IDEsCisJSVBTX1NFRU5fUkVQTFkgPSAoMSA8PCBJUFNfU0VFTl9SRVBMWV9CSVQpLAorCisJLyogQ29ubnRyYWNrIHNob3VsZCBuZXZlciBiZSBlYXJseS1leHBpcmVkLiAqLworCUlQU19BU1NVUkVEX0JJVCA9IDIsCisJSVBTX0FTU1VSRUQgPSAoMSA8PCBJUFNfQVNTVVJFRF9CSVQpLAorCisJLyogQ29ubmVjdGlvbiBpcyBjb25maXJtZWQ6IG9yaWdpbmF0aW5nIHBhY2tldCBoYXMgbGVmdCBib3ggKi8KKwlJUFNfQ09ORklSTUVEX0JJVCA9IDMsCisJSVBTX0NPTkZJUk1FRCA9ICgxIDw8IElQU19DT05GSVJNRURfQklUKSwKKworCS8qIENvbm5lY3Rpb24gbmVlZHMgc3JjIG5hdCBpbiBvcmlnIGRpci4gIFRoaXMgYml0IG5ldmVyIGNoYW5nZWQuICovCisJSVBTX1NSQ19OQVRfQklUID0gNCwKKwlJUFNfU1JDX05BVCA9ICgxIDw8IElQU19TUkNfTkFUX0JJVCksCisKKwkvKiBDb25uZWN0aW9uIG5lZWRzIGRzdCBuYXQgaW4gb3JpZyBkaXIuICBUaGlzIGJpdCBuZXZlciBjaGFuZ2VkLiAqLworCUlQU19EU1RfTkFUX0JJVCA9IDUsCisJSVBTX0RTVF9OQVQgPSAoMSA8PCBJUFNfRFNUX05BVF9CSVQpLAorCisJLyogQm90aCB0b2dldGhlci4gKi8KKwlJUFNfTkFUX01BU0sgPSAoSVBTX0RTVF9OQVQgfCBJUFNfU1JDX05BVCksCisKKwkvKiBDb25uZWN0aW9uIG5lZWRzIFRDUCBzZXF1ZW5jZSBhZGp1c3RlZC4gKi8KKwlJUFNfU0VRX0FESlVTVF9CSVQgPSA2LAorCUlQU19TRVFfQURKVVNUID0gKDEgPDwgSVBTX1NFUV9BREpVU1RfQklUKSwKKworCS8qIE5BVCBpbml0aWFsaXphdGlvbiBiaXRzLiAqLworCUlQU19TUkNfTkFUX0RPTkVfQklUID0gNywKKwlJUFNfU1JDX05BVF9ET05FID0gKDEgPDwgSVBTX1NSQ19OQVRfRE9ORV9CSVQpLAorCisJSVBTX0RTVF9OQVRfRE9ORV9CSVQgPSA4LAorCUlQU19EU1RfTkFUX0RPTkUgPSAoMSA8PCBJUFNfRFNUX05BVF9ET05FX0JJVCksCisKKwkvKiBCb3RoIHRvZ2V0aGVyICovCisJSVBTX05BVF9ET05FX01BU0sgPSAoSVBTX0RTVF9OQVRfRE9ORSB8IElQU19TUkNfTkFUX0RPTkUpLAorCisJLyogQ29ubmVjdGlvbiBpcyBkeWluZyAocmVtb3ZlZCBmcm9tIGxpc3RzKSwgY2FuIG5vdCBiZSB1bnNldC4gKi8KKwlJUFNfRFlJTkdfQklUID0gOSwKKwlJUFNfRFlJTkcgPSAoMSA8PCBJUFNfRFlJTkdfQklUKSwKK307CisKKy8qIENvbm5lY3Rpb24gdHJhY2tpbmcgZXZlbnQgYml0cyAqLworZW51bSBpcF9jb25udHJhY2tfZXZlbnRzCit7CisJLyogTmV3IGNvbm50cmFjayAqLworCUlQQ1RfTkVXX0JJVCA9IDAsCisJSVBDVF9ORVcgPSAoMSA8PCBJUENUX05FV19CSVQpLAorCisJLyogRXhwZWN0ZWQgY29ubmVjdGlvbiAqLworCUlQQ1RfUkVMQVRFRF9CSVQgPSAxLAorCUlQQ1RfUkVMQVRFRCA9ICgxIDw8IElQQ1RfUkVMQVRFRF9CSVQpLAorCisJLyogRGVzdHJveWVkIGNvbm50cmFjayAqLworCUlQQ1RfREVTVFJPWV9CSVQgPSAyLAorCUlQQ1RfREVTVFJPWSA9ICgxIDw8IElQQ1RfREVTVFJPWV9CSVQpLAorCisJLyogVGltZXIgaGFzIGJlZW4gcmVmcmVzaGVkICovCisJSVBDVF9SRUZSRVNIX0JJVCA9IDMsCisJSVBDVF9SRUZSRVNIID0gKDEgPDwgSVBDVF9SRUZSRVNIX0JJVCksCisKKwkvKiBTdGF0dXMgaGFzIGNoYW5nZWQgKi8KKwlJUENUX1NUQVRVU19CSVQgPSA0LAorCUlQQ1RfU1RBVFVTID0gKDEgPDwgSVBDVF9TVEFUVVNfQklUKSwKKworCS8qIFVwZGF0ZSBvZiBwcm90b2NvbCBpbmZvICovCisJSVBDVF9QUk9UT0lORk9fQklUID0gNSwKKwlJUENUX1BST1RPSU5GTyA9ICgxIDw8IElQQ1RfUFJPVE9JTkZPX0JJVCksCisKKwkvKiBWb2xhdGlsZSBwcm90b2NvbCBpbmZvICovCisJSVBDVF9QUk9UT0lORk9fVk9MQVRJTEVfQklUID0gNiwKKwlJUENUX1BST1RPSU5GT19WT0xBVElMRSA9ICgxIDw8IElQQ1RfUFJPVE9JTkZPX1ZPTEFUSUxFX0JJVCksCisKKwkvKiBOZXcgaGVscGVyIGZvciBjb25udHJhY2sgKi8KKwlJUENUX0hFTFBFUl9CSVQgPSA3LAorCUlQQ1RfSEVMUEVSID0gKDEgPDwgSVBDVF9IRUxQRVJfQklUKSwKKworCS8qIFVwZGF0ZSBvZiBoZWxwZXIgaW5mbyAqLworCUlQQ1RfSEVMUElORk9fQklUID0gOCwKKwlJUENUX0hFTFBJTkZPID0gKDEgPDwgSVBDVF9IRUxQSU5GT19CSVQpLAorCisJLyogVm9sYXRpbGUgaGVscGVyIGluZm8gKi8KKwlJUENUX0hFTFBJTkZPX1ZPTEFUSUxFX0JJVCA9IDksCisJSVBDVF9IRUxQSU5GT19WT0xBVElMRSA9ICgxIDw8IElQQ1RfSEVMUElORk9fVk9MQVRJTEVfQklUKSwKKworCS8qIE5BVCBpbmZvICovCisJSVBDVF9OQVRJTkZPX0JJVCA9IDEwLAorCUlQQ1RfTkFUSU5GTyA9ICgxIDw8IElQQ1RfTkFUSU5GT19CSVQpLAorCisJLyogQ291bnRlciBoaWdoZXN0IGJpdCBoYXMgYmVlbiBzZXQgKi8KKwlJUENUX0NPVU5URVJfRklMTElOR19CSVQgPSAxMSwKKwlJUENUX0NPVU5URVJfRklMTElORyA9ICgxIDw8IElQQ1RfQ09VTlRFUl9GSUxMSU5HX0JJVCksCit9OworCitlbnVtIGlwX2Nvbm50cmFja19leHBlY3RfZXZlbnRzIHsKKwlJUEVYUF9ORVdfQklUID0gMCwKKwlJUEVYUF9ORVcgPSAoMSA8PCBJUEVYUF9ORVdfQklUKSwKK307CisKKyNpZmRlZiBfX0tFUk5FTF9fCitzdHJ1Y3QgaXBfY29ubnRyYWNrX2NvdW50ZXIKK3sKKwl1X2ludDMyX3QgcGFja2V0czsKKwl1X2ludDMyX3QgYnl0ZXM7Cit9OworCitzdHJ1Y3QgaXBfY29ubnRyYWNrX3N0YXQKK3sKKwl1bnNpZ25lZCBpbnQgc2VhcmNoZWQ7CisJdW5zaWduZWQgaW50IGZvdW5kOworCXVuc2lnbmVkIGludCBuZXc7CisJdW5zaWduZWQgaW50IGludmFsaWQ7CisJdW5zaWduZWQgaW50IGlnbm9yZTsKKwl1bnNpZ25lZCBpbnQgZGVsZXRlOworCXVuc2lnbmVkIGludCBkZWxldGVfbGlzdDsKKwl1bnNpZ25lZCBpbnQgaW5zZXJ0OworCXVuc2lnbmVkIGludCBpbnNlcnRfZmFpbGVkOworCXVuc2lnbmVkIGludCBkcm9wOworCXVuc2lnbmVkIGludCBlYXJseV9kcm9wOworCXVuc2lnbmVkIGludCBlcnJvcjsKKwl1bnNpZ25lZCBpbnQgZXhwZWN0X25ldzsKKwl1bnNpZ25lZCBpbnQgZXhwZWN0X2NyZWF0ZTsKKwl1bnNpZ25lZCBpbnQgZXhwZWN0X2RlbGV0ZTsKK307CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfTkZfQ09OTlRSQUNLX0NPTU1PTl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfZnRwLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfZnRwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ0YTQxYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19mdHAuaApAQCAtMCwwICsxLDQ0IEBACisjaWZuZGVmIF9ORl9DT05OVFJBQ0tfRlRQX0gKKyNkZWZpbmUgX05GX0NPTk5UUkFDS19GVFBfSAorLyogRlRQIHRyYWNraW5nLiAqLworCisvKiBUaGlzIGVudW0gaXMgZXhwb3NlZCB0byB1c2Vyc3BhY2UgKi8KK2VudW0gaXBfY3RfZnRwX3R5cGUKK3sKKwkvKiBQT1JUIGNvbW1hbmQgZnJvbSBjbGllbnQgKi8KKwlJUF9DVF9GVFBfUE9SVCwKKwkvKiBQQVNWIHJlc3BvbnNlIGZyb20gc2VydmVyICovCisJSVBfQ1RfRlRQX1BBU1YsCisJLyogRVBSVCBjb21tYW5kIGZyb20gY2xpZW50ICovCisJSVBfQ1RfRlRQX0VQUlQsCisJLyogRVBTViByZXNwb25zZSBmcm9tIHNlcnZlciAqLworCUlQX0NUX0ZUUF9FUFNWLAorfTsKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2RlZmluZSBGVFBfUE9SVAkyMQorCisjZGVmaW5lIE5VTV9TRVFfVE9fUkVNRU1CRVIgMgorLyogVGhpcyBzdHJ1Y3R1cmUgZXhpc3RzIG9ubHkgb25jZSBwZXIgbWFzdGVyICovCitzdHJ1Y3QgaXBfY3RfZnRwX21hc3RlciB7CisJLyogVmFsaWQgc2VxIHBvc2l0aW9ucyBmb3IgY21kIG1hdGNoaW5nIGFmdGVyIG5ld2xpbmUgKi8KKwl1X2ludDMyX3Qgc2VxX2FmdF9ubFtJUF9DVF9ESVJfTUFYXVtOVU1fU0VRX1RPX1JFTUVNQkVSXTsKKwkvKiAwIG1lYW5zIHNlcV9tYXRjaF9hZnRfbmwgbm90IHNldCAqLworCWludCBzZXFfYWZ0X25sX251bVtJUF9DVF9ESVJfTUFYXTsKK307CisKK3N0cnVjdCBpcF9jb25udHJhY2tfZXhwZWN0OworCisvKiBGb3IgTkFUIHRvIGhvb2sgaW4gd2hlbiB3ZSBmaW5kIGEgcGFja2V0IHdoaWNoIGRlc2NyaWJlcyB3aGF0IG90aGVyCisgKiBjb25uZWN0aW9uIHdlIHNob3VsZCBleHBlY3QuICovCitleHRlcm4gdW5zaWduZWQgaW50ICgqaXBfbmF0X2Z0cF9ob29rKShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCisJCQkJICAgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkJCSAgICAgICBlbnVtIGlwX2N0X2Z0cF90eXBlIHR5cGUsCisJCQkJICAgICAgIHVuc2lnbmVkIGludCBtYXRjaG9mZiwKKwkJCQkgICAgICAgdW5zaWduZWQgaW50IG1hdGNobGVuLAorCQkJCSAgICAgICBzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCAqZXhwLAorCQkJCSAgICAgICB1MzIgKnNlcSk7CisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX05GX0NPTk5UUkFDS19GVFBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NjdHAuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zY3RwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg5OTRkOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zY3RwLmgKQEAgLTAsMCArMSwyNyBAQAorI2lmbmRlZiBfTkZfQ09OTlRSQUNLX1NDVFBfSAorI2RlZmluZSBfTkZfQ09OTlRSQUNLX1NDVFBfSAorLyogU0NUUCB0cmFja2luZy4gKi8KKworI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGVfY29tbW9uLmg+CisKK2VudW0gc2N0cF9jb25udHJhY2sgeworCVNDVFBfQ09OTlRSQUNLX05PTkUsCisJU0NUUF9DT05OVFJBQ0tfQ0xPU0VELAorCVNDVFBfQ09OTlRSQUNLX0NPT0tJRV9XQUlULAorCVNDVFBfQ09OTlRSQUNLX0NPT0tJRV9FQ0hPRUQsCisJU0NUUF9DT05OVFJBQ0tfRVNUQUJMSVNIRUQsCisJU0NUUF9DT05OVFJBQ0tfU0hVVERPV05fU0VOVCwKKwlTQ1RQX0NPTk5UUkFDS19TSFVURE9XTl9SRUNELAorCVNDVFBfQ09OTlRSQUNLX1NIVVRET1dOX0FDS19TRU5ULAorCVNDVFBfQ09OTlRSQUNLX01BWAorfTsKKworc3RydWN0IGlwX2N0X3NjdHAKK3sKKwllbnVtIHNjdHBfY29ubnRyYWNrIHN0YXRlOworCisJdV9pbnQzMl90IHZ0YWdbSVBfQ1RfRElSX01BWF07CisJdV9pbnQzMl90IHR0YWdbSVBfQ1RfRElSX01BWF07Cit9OworCisjZW5kaWYgLyogX05GX0NPTk5UUkFDS19TQ1RQX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190Y3AuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190Y3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmZlZWZmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RjcC5oCkBAIC0wLDAgKzEsNTYgQEAKKyNpZm5kZWYgX05GX0NPTk5UUkFDS19UQ1BfSAorI2RlZmluZSBfTkZfQ09OTlRSQUNLX1RDUF9ICisvKiBUQ1AgdHJhY2tpbmcuICovCisKKy8qIFRoaXMgaXMgZXhwb3NlZCB0byB1c2Vyc3BhY2UgKGN0bmV0bGluaykgKi8KK2VudW0gdGNwX2Nvbm50cmFjayB7CisJVENQX0NPTk5UUkFDS19OT05FLAorCVRDUF9DT05OVFJBQ0tfU1lOX1NFTlQsCisJVENQX0NPTk5UUkFDS19TWU5fUkVDViwKKwlUQ1BfQ09OTlRSQUNLX0VTVEFCTElTSEVELAorCVRDUF9DT05OVFJBQ0tfRklOX1dBSVQsCisJVENQX0NPTk5UUkFDS19DTE9TRV9XQUlULAorCVRDUF9DT05OVFJBQ0tfTEFTVF9BQ0ssCisJVENQX0NPTk5UUkFDS19USU1FX1dBSVQsCisJVENQX0NPTk5UUkFDS19DTE9TRSwKKwlUQ1BfQ09OTlRSQUNLX0xJU1RFTiwKKwlUQ1BfQ09OTlRSQUNLX01BWCwKKwlUQ1BfQ09OTlRSQUNLX0lHTk9SRQorfTsKKworLyogV2luZG93IHNjYWxpbmcgaXMgYWR2ZXJ0aXNlZCBieSB0aGUgc2VuZGVyICovCisjZGVmaW5lIElQX0NUX1RDUF9GTEFHX1dJTkRPV19TQ0FMRQkJMHgwMQorCisvKiBTQUNLIGlzIHBlcm1pdHRlZCBieSB0aGUgc2VuZGVyICovCisjZGVmaW5lIElQX0NUX1RDUF9GTEFHX1NBQ0tfUEVSTQkJMHgwMgorCisvKiBUaGlzIHNlbmRlciBzZW50IEZJTiBmaXJzdCAqLworI2RlZmluZSBJUF9DVF9UQ1BfRkxBR19DTE9TRV9JTklUCQkweDAzCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKK3N0cnVjdCBpcF9jdF90Y3Bfc3RhdGUgeworCXVfaW50MzJfdAl0ZF9lbmQ7CQkvKiBtYXggb2Ygc2VxICsgbGVuICovCisJdV9pbnQzMl90CXRkX21heGVuZDsJLyogbWF4IG9mIGFjayArIG1heCh3aW4sIDEpICovCisJdV9pbnQzMl90CXRkX21heHdpbjsJLyogbWF4KHdpbikgKi8KKwl1X2ludDhfdAl0ZF9zY2FsZTsJLyogd2luZG93IHNjYWxlIGZhY3RvciAqLworCXVfaW50OF90CWxvb3NlOwkJLyogdXNlZCB3aGVuIGNvbm5lY3Rpb24gcGlja2VkIHVwIGZyb20gdGhlIG1pZGRsZSAqLworCXVfaW50OF90CWZsYWdzOwkJLyogcGVyIGRpcmVjdGlvbiBvcHRpb25zICovCit9OworCitzdHJ1Y3QgaXBfY3RfdGNwCit7CisJc3RydWN0IGlwX2N0X3RjcF9zdGF0ZSBzZWVuWzJdOwkvKiBjb25uZWN0aW9uIHBhcmFtZXRlcnMgcGVyIGRpcmVjdGlvbiAqLworCXVfaW50OF90CXN0YXRlOwkJLyogc3RhdGUgb2YgdGhlIGNvbm5lY3Rpb24gKGVudW0gdGNwX2Nvbm50cmFjaykgKi8KKwkvKiBGb3IgZGV0ZWN0aW5nIHN0YWxlIGNvbm5lY3Rpb25zICovCisJdV9pbnQ4X3QJbGFzdF9kaXI7CS8qIERpcmVjdGlvbiBvZiB0aGUgbGFzdCBwYWNrZXQgKGVudW0gaXBfY29ubnRyYWNrX2RpcikgKi8KKwl1X2ludDhfdAlyZXRyYW5zOwkvKiBOdW1iZXIgb2YgcmV0cmFuc21pdHRlZCBwYWNrZXRzICovCisJdV9pbnQ4X3QJbGFzdF9pbmRleDsJLyogSW5kZXggb2YgdGhlIGxhc3QgcGFja2V0ICovCisJdV9pbnQzMl90CWxhc3Rfc2VxOwkvKiBMYXN0IHNlcXVlbmNlIG51bWJlciBzZWVuIGluIGRpciAqLworCXVfaW50MzJfdAlsYXN0X2FjazsJLyogTGFzdCBzZXF1ZW5jZSBudW1iZXIgc2VlbiBpbiBvcHBvc2l0ZSBkaXIgKi8KKwl1X2ludDMyX3QJbGFzdF9lbmQ7CS8qIExhc3Qgc2VxICsgbGVuICovCit9OworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX05GX0NPTk5UUkFDS19UQ1BfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlX2NvbW1vbi5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlX2NvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlMTQ1ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGVfY29tbW9uLmgKQEAgLTAsMCArMSwxMyBAQAorI2lmbmRlZiBfTkZfQ09OTlRSQUNLX1RVUExFX0NPTU1PTl9ICisjZGVmaW5lIF9ORl9DT05OVFJBQ0tfVFVQTEVfQ09NTU9OX0gKKworZW51bSBpcF9jb25udHJhY2tfZGlyCit7CisJSVBfQ1RfRElSX09SSUdJTkFMLAorCUlQX0NUX0RJUl9SRVBMWSwKKwlJUF9DVF9ESVJfTUFYCit9OworCisjZGVmaW5lIENUSU5GTzJESVIoY3RpbmZvKSAoKGN0aW5mbykgPj0gSVBfQ1RfSVNfUkVQTFkgPyBJUF9DVF9ESVJfUkVQTFkgOiBJUF9DVF9ESVJfT1JJR0lOQUwpCisKKyNlbmRpZiAvKiBfTkZfQ09OTlRSQUNLX1RVUExFX0NPTU1PTl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmsuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGluay5oCmluZGV4IGYwOGU4NzAuLjcyOTc1ZmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGluay5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGluay5oCkBAIC0xNDYsNyArMTQ2LDcgQEAKIGV4dGVybiBpbnQgbmZuZXRsaW5rX3N1YnN5c19yZWdpc3RlcihzdHJ1Y3QgbmZuZXRsaW5rX3N1YnN5c3RlbSAqbik7CiBleHRlcm4gaW50IG5mbmV0bGlua19zdWJzeXNfdW5yZWdpc3RlcihzdHJ1Y3QgbmZuZXRsaW5rX3N1YnN5c3RlbSAqbik7CiAKLWV4dGVybiBpbnQgbmZhdHRyX3BhcnNlKHN0cnVjdCBuZmF0dHIgKnRiW10sIGludCBtYXhhdHRyLCAKK2V4dGVybiB2b2lkIG5mYXR0cl9wYXJzZShzdHJ1Y3QgbmZhdHRyICp0YltdLCBpbnQgbWF4YXR0ciwgCiAJCQlzdHJ1Y3QgbmZhdHRyICpuZmEsIGludCBsZW4pOwogCiAjZGVmaW5lIG5mYXR0cl9wYXJzZV9uZXN0ZWQodGIsIG1heCwgbmZhKSBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFjay5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2suaAppbmRleCBkMDc4YmI5Li5iMzQzMmFiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFjay5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrLmgKQEAgLTEsMTMyICsxLDcgQEAKICNpZm5kZWYgX0lQX0NPTk5UUkFDS19ICiAjZGVmaW5lIF9JUF9DT05OVFJBQ0tfSAotLyogQ29ubmVjdGlvbiBzdGF0ZSB0cmFja2luZyBmb3IgbmV0ZmlsdGVyLiAgVGhpcyBpcyBzZXBhcmF0ZWQgZnJvbSwKLSAgIGJ1dCByZXF1aXJlZCBieSwgdGhlIE5BVCBsYXllcjsgaXQgY2FuIGFsc28gYmUgdXNlZCBieSBhbiBpcHRhYmxlcwotICAgZXh0ZW5zaW9uLiAqLwotZW51bSBpcF9jb25udHJhY2tfaW5mbwotewotCS8qIFBhcnQgb2YgYW4gZXN0YWJsaXNoZWQgY29ubmVjdGlvbiAoZWl0aGVyIGRpcmVjdGlvbikuICovCi0JSVBfQ1RfRVNUQUJMSVNIRUQsCiAKLQkvKiBMaWtlIE5FVywgYnV0IHJlbGF0ZWQgdG8gYW4gZXhpc3RpbmcgY29ubmVjdGlvbiwgb3IgSUNNUCBlcnJvcgotCSAgIChpbiBlaXRoZXIgZGlyZWN0aW9uKS4gKi8KLQlJUF9DVF9SRUxBVEVELAotCi0JLyogU3RhcnRlZCBhIG5ldyBjb25uZWN0aW9uIHRvIHRyYWNrIChvbmx5Ci0gICAgICAgICAgIElQX0NUX0RJUl9PUklHSU5BTCk7IG1heSBiZSBhIHJldHJhbnNtaXNzaW9uLiAqLwotCUlQX0NUX05FVywKLQotCS8qID49IHRoaXMgaW5kaWNhdGVzIHJlcGx5IGRpcmVjdGlvbiAqLwotCUlQX0NUX0lTX1JFUExZLAotCi0JLyogTnVtYmVyIG9mIGRpc3RpbmN0IElQX0NUIHR5cGVzIChubyBORVcgaW4gcmVwbHkgZGlybikuICovCi0JSVBfQ1RfTlVNQkVSID0gSVBfQ1RfSVNfUkVQTFkgKiAyIC0gMQotfTsKLQotLyogQml0c2V0IHJlcHJlc2VudGluZyBzdGF0dXMgb2YgY29ubmVjdGlvbi4gKi8KLWVudW0gaXBfY29ubnRyYWNrX3N0YXR1cyB7Ci0JLyogSXQncyBhbiBleHBlY3RlZCBjb25uZWN0aW9uOiBiaXQgMCBzZXQuICBUaGlzIGJpdCBuZXZlciBjaGFuZ2VkICovCi0JSVBTX0VYUEVDVEVEX0JJVCA9IDAsCi0JSVBTX0VYUEVDVEVEID0gKDEgPDwgSVBTX0VYUEVDVEVEX0JJVCksCi0KLQkvKiBXZSd2ZSBzZWVuIHBhY2tldHMgYm90aCB3YXlzOiBiaXQgMSBzZXQuICBDYW4gYmUgc2V0LCBub3QgdW5zZXQuICovCi0JSVBTX1NFRU5fUkVQTFlfQklUID0gMSwKLQlJUFNfU0VFTl9SRVBMWSA9ICgxIDw8IElQU19TRUVOX1JFUExZX0JJVCksCi0KLQkvKiBDb25udHJhY2sgc2hvdWxkIG5ldmVyIGJlIGVhcmx5LWV4cGlyZWQuICovCi0JSVBTX0FTU1VSRURfQklUID0gMiwKLQlJUFNfQVNTVVJFRCA9ICgxIDw8IElQU19BU1NVUkVEX0JJVCksCi0KLQkvKiBDb25uZWN0aW9uIGlzIGNvbmZpcm1lZDogb3JpZ2luYXRpbmcgcGFja2V0IGhhcyBsZWZ0IGJveCAqLwotCUlQU19DT05GSVJNRURfQklUID0gMywKLQlJUFNfQ09ORklSTUVEID0gKDEgPDwgSVBTX0NPTkZJUk1FRF9CSVQpLAotCi0JLyogQ29ubmVjdGlvbiBuZWVkcyBzcmMgbmF0IGluIG9yaWcgZGlyLiAgVGhpcyBiaXQgbmV2ZXIgY2hhbmdlZC4gKi8KLQlJUFNfU1JDX05BVF9CSVQgPSA0LAotCUlQU19TUkNfTkFUID0gKDEgPDwgSVBTX1NSQ19OQVRfQklUKSwKLQotCS8qIENvbm5lY3Rpb24gbmVlZHMgZHN0IG5hdCBpbiBvcmlnIGRpci4gIFRoaXMgYml0IG5ldmVyIGNoYW5nZWQuICovCi0JSVBTX0RTVF9OQVRfQklUID0gNSwKLQlJUFNfRFNUX05BVCA9ICgxIDw8IElQU19EU1RfTkFUX0JJVCksCi0KLQkvKiBCb3RoIHRvZ2V0aGVyLiAqLwotCUlQU19OQVRfTUFTSyA9IChJUFNfRFNUX05BVCB8IElQU19TUkNfTkFUKSwKLQotCS8qIENvbm5lY3Rpb24gbmVlZHMgVENQIHNlcXVlbmNlIGFkanVzdGVkLiAqLwotCUlQU19TRVFfQURKVVNUX0JJVCA9IDYsCi0JSVBTX1NFUV9BREpVU1QgPSAoMSA8PCBJUFNfU0VRX0FESlVTVF9CSVQpLAotCi0JLyogTkFUIGluaXRpYWxpemF0aW9uIGJpdHMuICovCi0JSVBTX1NSQ19OQVRfRE9ORV9CSVQgPSA3LAotCUlQU19TUkNfTkFUX0RPTkUgPSAoMSA8PCBJUFNfU1JDX05BVF9ET05FX0JJVCksCi0KLQlJUFNfRFNUX05BVF9ET05FX0JJVCA9IDgsCi0JSVBTX0RTVF9OQVRfRE9ORSA9ICgxIDw8IElQU19EU1RfTkFUX0RPTkVfQklUKSwKLQotCS8qIEJvdGggdG9nZXRoZXIgKi8KLQlJUFNfTkFUX0RPTkVfTUFTSyA9IChJUFNfRFNUX05BVF9ET05FIHwgSVBTX1NSQ19OQVRfRE9ORSksCi0KLQkvKiBDb25uZWN0aW9uIGlzIGR5aW5nIChyZW1vdmVkIGZyb20gbGlzdHMpLCBjYW4gbm90IGJlIHVuc2V0LiAqLwotCUlQU19EWUlOR19CSVQgPSA5LAotCUlQU19EWUlORyA9ICgxIDw8IElQU19EWUlOR19CSVQpLAotfTsKLQotLyogQ29ubmVjdGlvbiB0cmFja2luZyBldmVudCBiaXRzICovCi1lbnVtIGlwX2Nvbm50cmFja19ldmVudHMKLXsKLQkvKiBOZXcgY29ubnRyYWNrICovCi0JSVBDVF9ORVdfQklUID0gMCwKLQlJUENUX05FVyA9ICgxIDw8IElQQ1RfTkVXX0JJVCksCi0KLQkvKiBFeHBlY3RlZCBjb25uZWN0aW9uICovCi0JSVBDVF9SRUxBVEVEX0JJVCA9IDEsCi0JSVBDVF9SRUxBVEVEID0gKDEgPDwgSVBDVF9SRUxBVEVEX0JJVCksCi0KLQkvKiBEZXN0cm95ZWQgY29ubnRyYWNrICovCi0JSVBDVF9ERVNUUk9ZX0JJVCA9IDIsCi0JSVBDVF9ERVNUUk9ZID0gKDEgPDwgSVBDVF9ERVNUUk9ZX0JJVCksCi0KLQkvKiBUaW1lciBoYXMgYmVlbiByZWZyZXNoZWQgKi8KLQlJUENUX1JFRlJFU0hfQklUID0gMywKLQlJUENUX1JFRlJFU0ggPSAoMSA8PCBJUENUX1JFRlJFU0hfQklUKSwKLQotCS8qIFN0YXR1cyBoYXMgY2hhbmdlZCAqLwotCUlQQ1RfU1RBVFVTX0JJVCA9IDQsCi0JSVBDVF9TVEFUVVMgPSAoMSA8PCBJUENUX1NUQVRVU19CSVQpLAotCi0JLyogVXBkYXRlIG9mIHByb3RvY29sIGluZm8gKi8KLQlJUENUX1BST1RPSU5GT19CSVQgPSA1LAotCUlQQ1RfUFJPVE9JTkZPID0gKDEgPDwgSVBDVF9QUk9UT0lORk9fQklUKSwKLQotCS8qIFZvbGF0aWxlIHByb3RvY29sIGluZm8gKi8KLQlJUENUX1BST1RPSU5GT19WT0xBVElMRV9CSVQgPSA2LAotCUlQQ1RfUFJPVE9JTkZPX1ZPTEFUSUxFID0gKDEgPDwgSVBDVF9QUk9UT0lORk9fVk9MQVRJTEVfQklUKSwKLQotCS8qIE5ldyBoZWxwZXIgZm9yIGNvbm50cmFjayAqLwotCUlQQ1RfSEVMUEVSX0JJVCA9IDcsCi0JSVBDVF9IRUxQRVIgPSAoMSA8PCBJUENUX0hFTFBFUl9CSVQpLAotCi0JLyogVXBkYXRlIG9mIGhlbHBlciBpbmZvICovCi0JSVBDVF9IRUxQSU5GT19CSVQgPSA4LAotCUlQQ1RfSEVMUElORk8gPSAoMSA8PCBJUENUX0hFTFBJTkZPX0JJVCksCi0KLQkvKiBWb2xhdGlsZSBoZWxwZXIgaW5mbyAqLwotCUlQQ1RfSEVMUElORk9fVk9MQVRJTEVfQklUID0gOSwKLQlJUENUX0hFTFBJTkZPX1ZPTEFUSUxFID0gKDEgPDwgSVBDVF9IRUxQSU5GT19WT0xBVElMRV9CSVQpLAotCi0JLyogTkFUIGluZm8gKi8KLQlJUENUX05BVElORk9fQklUID0gMTAsCi0JSVBDVF9OQVRJTkZPID0gKDEgPDwgSVBDVF9OQVRJTkZPX0JJVCksCi0KLQkvKiBDb3VudGVyIGhpZ2hlc3QgYml0IGhhcyBiZWVuIHNldCAqLwotCUlQQ1RfQ09VTlRFUl9GSUxMSU5HX0JJVCA9IDExLAotCUlQQ1RfQ09VTlRFUl9GSUxMSU5HID0gKDEgPDwgSVBDVF9DT1VOVEVSX0ZJTExJTkdfQklUKSwKLX07Ci0KLWVudW0gaXBfY29ubnRyYWNrX2V4cGVjdF9ldmVudHMgewotCUlQRVhQX05FV19CSVQgPSAwLAotCUlQRVhQX05FVyA9ICgxIDw8IElQRVhQX05FV19CSVQpLAotfTsKKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvbW1vbi5oPgogCiAjaWZkZWYgX19LRVJORUxfXwogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgpAQCAtMTk0LDEyICs2OSw2IEBACiAjZGVmaW5lIElQX05GX0FTU0VSVCh4KQogI2VuZGlmCiAKLXN0cnVjdCBpcF9jb25udHJhY2tfY291bnRlcgotewotCXVfaW50MzJfdCBwYWNrZXRzOwotCXVfaW50MzJfdCBieXRlczsKLX07Ci0KIHN0cnVjdCBpcF9jb25udHJhY2tfaGVscGVyOwogCiBzdHJ1Y3QgaXBfY29ubnRyYWNrCkBAIC00MjYsMjUgKzI5NSw2IEBACiAKIGV4dGVybiB1bnNpZ25lZCBpbnQgaXBfY29ubnRyYWNrX2h0YWJsZV9zaXplOwogIAotc3RydWN0IGlwX2Nvbm50cmFja19zdGF0Ci17Ci0JdW5zaWduZWQgaW50IHNlYXJjaGVkOwotCXVuc2lnbmVkIGludCBmb3VuZDsKLQl1bnNpZ25lZCBpbnQgbmV3OwotCXVuc2lnbmVkIGludCBpbnZhbGlkOwotCXVuc2lnbmVkIGludCBpZ25vcmU7Ci0JdW5zaWduZWQgaW50IGRlbGV0ZTsKLQl1bnNpZ25lZCBpbnQgZGVsZXRlX2xpc3Q7Ci0JdW5zaWduZWQgaW50IGluc2VydDsKLQl1bnNpZ25lZCBpbnQgaW5zZXJ0X2ZhaWxlZDsKLQl1bnNpZ25lZCBpbnQgZHJvcDsKLQl1bnNpZ25lZCBpbnQgZWFybHlfZHJvcDsKLQl1bnNpZ25lZCBpbnQgZXJyb3I7Ci0JdW5zaWduZWQgaW50IGV4cGVjdF9uZXc7Ci0JdW5zaWduZWQgaW50IGV4cGVjdF9jcmVhdGU7Ci0JdW5zaWduZWQgaW50IGV4cGVjdF9kZWxldGU7Ci19OwotCiAjZGVmaW5lIENPTk5UUkFDS19TVEFUX0lOQyhjb3VudCkgKF9fZ2V0X2NwdV92YXIoaXBfY29ubnRyYWNrX3N0YXQpLmNvdW50KyspCiAKICNpZmRlZiBDT05GSUdfSVBfTkZfQ09OTlRSQUNLX0VWRU5UUwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfZnRwLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19mdHAuaAppbmRleCA1ZjA2NDI5Li42MzgxMTkzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19mdHAuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19mdHAuaApAQCAtMSw0MyArMSw2IEBACiAjaWZuZGVmIF9JUF9DT05OVFJBQ0tfRlRQX0gKICNkZWZpbmUgX0lQX0NPTk5UUkFDS19GVFBfSAotLyogRlRQIHRyYWNraW5nLiAqLwogCi0jaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfZnRwLmg+CiAKLSNkZWZpbmUgRlRQX1BPUlQJMjEKLQotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLQotZW51bSBpcF9jdF9mdHBfdHlwZQotewotCS8qIFBPUlQgY29tbWFuZCBmcm9tIGNsaWVudCAqLwotCUlQX0NUX0ZUUF9QT1JULAotCS8qIFBBU1YgcmVzcG9uc2UgZnJvbSBzZXJ2ZXIgKi8KLQlJUF9DVF9GVFBfUEFTViwKLQkvKiBFUFJUIGNvbW1hbmQgZnJvbSBjbGllbnQgKi8KLQlJUF9DVF9GVFBfRVBSVCwKLQkvKiBFUFNWIHJlc3BvbnNlIGZyb20gc2VydmVyICovCi0JSVBfQ1RfRlRQX0VQU1YsCi19OwotCi0jZGVmaW5lIE5VTV9TRVFfVE9fUkVNRU1CRVIgMgotLyogVGhpcyBzdHJ1Y3R1cmUgZXhpc3RzIG9ubHkgb25jZSBwZXIgbWFzdGVyICovCi1zdHJ1Y3QgaXBfY3RfZnRwX21hc3RlciB7Ci0JLyogVmFsaWQgc2VxIHBvc2l0aW9ucyBmb3IgY21kIG1hdGNoaW5nIGFmdGVyIG5ld2xpbmUgKi8KLQl1X2ludDMyX3Qgc2VxX2FmdF9ubFtJUF9DVF9ESVJfTUFYXVtOVU1fU0VRX1RPX1JFTUVNQkVSXTsKLQkvKiAwIG1lYW5zIHNlcV9tYXRjaF9hZnRfbmwgbm90IHNldCAqLwotCWludCBzZXFfYWZ0X25sX251bVtJUF9DVF9ESVJfTUFYXTsKLX07Ci0KLXN0cnVjdCBpcF9jb25udHJhY2tfZXhwZWN0OwotCi0vKiBGb3IgTkFUIHRvIGhvb2sgaW4gd2hlbiB3ZSBmaW5kIGEgcGFja2V0IHdoaWNoIGRlc2NyaWJlcyB3aGF0IG90aGVyCi0gKiBjb25uZWN0aW9uIHdlIHNob3VsZCBleHBlY3QuICovCi1leHRlcm4gdW5zaWduZWQgaW50ICgqaXBfbmF0X2Z0cF9ob29rKShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCi0JCQkJICAgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAotCQkJCSAgICAgICBlbnVtIGlwX2N0X2Z0cF90eXBlIHR5cGUsCi0JCQkJICAgICAgIHVuc2lnbmVkIGludCBtYXRjaG9mZiwKLQkJCQkgICAgICAgdW5zaWduZWQgaW50IG1hdGNobGVuLAotCQkJCSAgICAgICBzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCAqZXhwLAotCQkJCSAgICAgICB1MzIgKnNlcSk7CiAjZW5kaWYgLyogX0lQX0NPTk5UUkFDS19GVFBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfaWNtcC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfaWNtcC5oCmluZGV4IGYxNjY0YWIuLmVlZDVlZTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX2ljbXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19pY21wLmgKQEAgLTEsMTEgKzEsNiBAQAogI2lmbmRlZiBfSVBfQ09OTlRSQUNLX0lDTVBfSAogI2RlZmluZSBfSVBfQ09OTlRSQUNLX0lDTVBfSAotLyogSUNNUCB0cmFja2luZy4gKi8KLSNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAKLXN0cnVjdCBpcF9jdF9pY21wCi17Ci0JLyogT3B0aW1pemF0aW9uOiB3aGVuIG51bWJlciBpbiA9PSBudW1iZXIgb3V0LCBmb3JnZXQgaW1tZWRpYXRlbHkuICovCi0JYXRvbWljX3QgY291bnQ7Ci19OworI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvaXB2NC9uZl9jb25udHJhY2tfaWNtcC5oPgorCiAjZW5kaWYgLyogX0lQX0NPTk5UUkFDS19JQ01QX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX3NjdHAuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX3NjdHAuaAppbmRleCA3YThkODY5Li40MDk5YTA0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19zY3RwLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfc2N0cC5oCkBAIC0xLDI1ICsxLDYgQEAKICNpZm5kZWYgX0lQX0NPTk5UUkFDS19TQ1RQX0gKICNkZWZpbmUgX0lQX0NPTk5UUkFDS19TQ1RQX0gKLS8qIFNDVFAgdHJhY2tpbmcuICovCiAKLWVudW0gc2N0cF9jb25udHJhY2sgewotCVNDVFBfQ09OTlRSQUNLX05PTkUsCi0JU0NUUF9DT05OVFJBQ0tfQ0xPU0VELAotCVNDVFBfQ09OTlRSQUNLX0NPT0tJRV9XQUlULAotCVNDVFBfQ09OTlRSQUNLX0NPT0tJRV9FQ0hPRUQsCi0JU0NUUF9DT05OVFJBQ0tfRVNUQUJMSVNIRUQsCi0JU0NUUF9DT05OVFJBQ0tfU0hVVERPV05fU0VOVCwKLQlTQ1RQX0NPTk5UUkFDS19TSFVURE9XTl9SRUNELAotCVNDVFBfQ09OTlRSQUNLX1NIVVRET1dOX0FDS19TRU5ULAotCVNDVFBfQ09OTlRSQUNLX01BWAotfTsKLQotc3RydWN0IGlwX2N0X3NjdHAKLXsKLQllbnVtIHNjdHBfY29ubnRyYWNrIHN0YXRlOwotCi0JdV9pbnQzMl90IHZ0YWdbSVBfQ1RfRElSX01BWF07Ci0JdV9pbnQzMl90IHR0YWdbSVBfQ1RfRElSX01BWF07Ci19OworI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2N0cC5oPgogCiAjZW5kaWYgLyogX0lQX0NPTk5UUkFDS19TQ1RQX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX3RjcC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfdGNwLmgKaW5kZXggMTZkYTA0NC4uODc2YjhmYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfdGNwLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfdGNwLmgKQEAgLTEsNTEgKzEsNiBAQAogI2lmbmRlZiBfSVBfQ09OTlRSQUNLX1RDUF9ICiAjZGVmaW5lIF9JUF9DT05OVFJBQ0tfVENQX0gKLS8qIFRDUCB0cmFja2luZy4gKi8KIAotZW51bSB0Y3BfY29ubnRyYWNrIHsKLQlUQ1BfQ09OTlRSQUNLX05PTkUsCi0JVENQX0NPTk5UUkFDS19TWU5fU0VOVCwKLQlUQ1BfQ09OTlRSQUNLX1NZTl9SRUNWLAotCVRDUF9DT05OVFJBQ0tfRVNUQUJMSVNIRUQsCi0JVENQX0NPTk5UUkFDS19GSU5fV0FJVCwKLQlUQ1BfQ09OTlRSQUNLX0NMT1NFX1dBSVQsCi0JVENQX0NPTk5UUkFDS19MQVNUX0FDSywKLQlUQ1BfQ09OTlRSQUNLX1RJTUVfV0FJVCwKLQlUQ1BfQ09OTlRSQUNLX0NMT1NFLAotCVRDUF9DT05OVFJBQ0tfTElTVEVOLAotCVRDUF9DT05OVFJBQ0tfTUFYLAotCVRDUF9DT05OVFJBQ0tfSUdOT1JFCi19OwotCi0vKiBXaW5kb3cgc2NhbGluZyBpcyBhZHZlcnRpc2VkIGJ5IHRoZSBzZW5kZXIgKi8KLSNkZWZpbmUgSVBfQ1RfVENQX0ZMQUdfV0lORE9XX1NDQUxFCQkweDAxCi0KLS8qIFNBQ0sgaXMgcGVybWl0dGVkIGJ5IHRoZSBzZW5kZXIgKi8KLSNkZWZpbmUgSVBfQ1RfVENQX0ZMQUdfU0FDS19QRVJNCQkweDAyCi0KLS8qIFRoaXMgc2VuZGVyIHNlbnQgRklOIGZpcnN0ICovCi0jZGVmaW5lIElQX0NUX1RDUF9GTEFHX0NMT1NFX0lOSVQJCTB4MDMKLQotc3RydWN0IGlwX2N0X3RjcF9zdGF0ZSB7Ci0JdV9pbnQzMl90CXRkX2VuZDsJCS8qIG1heCBvZiBzZXEgKyBsZW4gKi8KLQl1X2ludDMyX3QJdGRfbWF4ZW5kOwkvKiBtYXggb2YgYWNrICsgbWF4KHdpbiwgMSkgKi8KLQl1X2ludDMyX3QJdGRfbWF4d2luOwkvKiBtYXgod2luKSAqLwotCXVfaW50OF90CXRkX3NjYWxlOwkvKiB3aW5kb3cgc2NhbGUgZmFjdG9yICovCi0JdV9pbnQ4X3QJbG9vc2U7CQkvKiB1c2VkIHdoZW4gY29ubmVjdGlvbiBwaWNrZWQgdXAgZnJvbSB0aGUgbWlkZGxlICovCi0JdV9pbnQ4X3QJZmxhZ3M7CQkvKiBwZXIgZGlyZWN0aW9uIG9wdGlvbnMgKi8KLX07Ci0KLXN0cnVjdCBpcF9jdF90Y3AKLXsKLQlzdHJ1Y3QgaXBfY3RfdGNwX3N0YXRlIHNlZW5bMl07CS8qIGNvbm5lY3Rpb24gcGFyYW1ldGVycyBwZXIgZGlyZWN0aW9uICovCi0JdV9pbnQ4X3QJc3RhdGU7CQkvKiBzdGF0ZSBvZiB0aGUgY29ubmVjdGlvbiAoZW51bSB0Y3BfY29ubnRyYWNrKSAqLwotCS8qIEZvciBkZXRlY3Rpbmcgc3RhbGUgY29ubmVjdGlvbnMgKi8KLQl1X2ludDhfdAlsYXN0X2RpcjsJLyogRGlyZWN0aW9uIG9mIHRoZSBsYXN0IHBhY2tldCAoZW51bSBpcF9jb25udHJhY2tfZGlyKSAqLwotCXVfaW50OF90CXJldHJhbnM7CS8qIE51bWJlciBvZiByZXRyYW5zbWl0dGVkIHBhY2tldHMgKi8KLQl1X2ludDhfdAlsYXN0X2luZGV4OwkvKiBJbmRleCBvZiB0aGUgbGFzdCBwYWNrZXQgKi8KLQl1X2ludDMyX3QJbGFzdF9zZXE7CS8qIExhc3Qgc2VxdWVuY2UgbnVtYmVyIHNlZW4gaW4gZGlyICovCi0JdV9pbnQzMl90CWxhc3RfYWNrOwkvKiBMYXN0IHNlcXVlbmNlIG51bWJlciBzZWVuIGluIG9wcG9zaXRlIGRpciAqLwotCXVfaW50MzJfdAlsYXN0X2VuZDsJLyogTGFzdCBzZXEgKyBsZW4gKi8KLX07CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190Y3AuaD4KIAogI2VuZGlmIC8qIF9JUF9DT05OVFJBQ0tfVENQX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX3R1cGxlLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja190dXBsZS5oCmluZGV4IDMyMzJkYjEuLjJmZGFiZGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX3R1cGxlLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfdHVwbGUuaApAQCAtMiw2ICsyLDcgQEAKICNkZWZpbmUgX0lQX0NPTk5UUkFDS19UVVBMRV9ICiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGVfY29tbW9uLmg+CiAKIC8qIEEgYHR1cGxlJyBpcyBhIHN0cnVjdHVyZSBjb250YWluaW5nIHRoZSBpbmZvcm1hdGlvbiB0byB1bmlxdWVseQogICBpZGVudGlmeSBhIGNvbm5lY3Rpb24uICBpZS4gaWYgdHdvIHBhY2tldHMgaGF2ZSB0aGUgc2FtZSB0dXBsZSwgdGhleQpAQCAtODgsMTMgKzg5LDYgQEAKIAkJKHR1cGxlKS0+ZHN0LnUuYWxsID0gMDsJCQkJXAogCX0gd2hpbGUgKDApCiAKLWVudW0gaXBfY29ubnRyYWNrX2RpcgotewotCUlQX0NUX0RJUl9PUklHSU5BTCwKLQlJUF9DVF9ESVJfUkVQTFksCi0JSVBfQ1RfRElSX01BWAotfTsKLQogI2lmZGVmIF9fS0VSTkVMX18KIAogI2RlZmluZSBEVU1QX1RVUExFKHRwKQkJCQkJCVwKQEAgLTEwMyw4ICs5Nyw2IEBACiAgICAgICAgTklQUVVBRCgodHApLT5zcmMuaXApLCBudG9ocygodHApLT5zcmMudS5hbGwpLAkJXAogICAgICAgIE5JUFFVQUQoKHRwKS0+ZHN0LmlwKSwgbnRvaHMoKHRwKS0+ZHN0LnUuYWxsKSkKIAotI2RlZmluZSBDVElORk8yRElSKGN0aW5mbykgKChjdGluZm8pID49IElQX0NUX0lTX1JFUExZID8gSVBfQ1RfRElSX1JFUExZIDogSVBfQ1RfRElSX09SSUdJTkFMKQotCiAvKiBJZiB3ZSdyZSB0aGUgZmlyc3QgdHVwbGUsIGl0J3MgdGhlIG9yaWdpbmFsIGRpci4gKi8KICNkZWZpbmUgRElSRUNUSU9OKGgpICgoZW51bSBpcF9jb25udHJhY2tfZGlyKShoKS0+dHVwbGUuZHN0LmRpcikKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni5oCmluZGV4IGVkY2MyYzYuLjUzYjI5ODMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2LmgKQEAgLTU5LDYgKzU5LDcgQEAKIAogZW51bSBuZl9pcDZfaG9va19wcmlvcml0aWVzIHsKIAlORl9JUDZfUFJJX0ZJUlNUID0gSU5UX01JTiwKKwlORl9JUDZfUFJJX0NPTk5UUkFDS19ERUZSQUcgPSAtNDAwLAogCU5GX0lQNl9QUklfU0VMSU5VWF9GSVJTVCA9IC0yMjUsCiAJTkZfSVA2X1BSSV9DT05OVFJBQ0sgPSAtMjAwLAogCU5GX0lQNl9QUklfQlJJREdFX1NBQk9UQUdFX0ZPUldBUkQgPSAtMTc1LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRsaW5rLmggYi9pbmNsdWRlL2xpbnV4L25ldGxpbmsuaAppbmRleCBiYTI1Y2E4Li42YTJjY2Y3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGxpbmsuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGxpbmsuaApAQCAtNzEsNyArNzEsOCBAQAogCiAjZGVmaW5lIE5MTVNHX0FMSUdOVE8JNAogI2RlZmluZSBOTE1TR19BTElHTihsZW4pICggKChsZW4pK05MTVNHX0FMSUdOVE8tMSkgJiB+KE5MTVNHX0FMSUdOVE8tMSkgKQotI2RlZmluZSBOTE1TR19MRU5HVEgobGVuKSAoKGxlbikrTkxNU0dfQUxJR04oc2l6ZW9mKHN0cnVjdCBubG1zZ2hkcikpKQorI2RlZmluZSBOTE1TR19IRFJMRU4JICgoaW50KSBOTE1TR19BTElHTihzaXplb2Yoc3RydWN0IG5sbXNnaGRyKSkpCisjZGVmaW5lIE5MTVNHX0xFTkdUSChsZW4pICgobGVuKStOTE1TR19BTElHTihOTE1TR19IRFJMRU4pKQogI2RlZmluZSBOTE1TR19TUEFDRShsZW4pIE5MTVNHX0FMSUdOKE5MTVNHX0xFTkdUSChsZW4pKQogI2RlZmluZSBOTE1TR19EQVRBKG5saCkgICgodm9pZCopKCgoY2hhciopbmxoKSArIE5MTVNHX0xFTkdUSCgwKSkpCiAjZGVmaW5lIE5MTVNHX05FWFQobmxoLGxlbikJICgobGVuKSAtPSBOTE1TR19BTElHTigobmxoKS0+bmxtc2dfbGVuKSwgXApAQCAtODYsNiArODcsOCBAQAogI2RlZmluZSBOTE1TR19ET05FCQkweDMJLyogRW5kIG9mIGEgZHVtcAkqLwogI2RlZmluZSBOTE1TR19PVkVSUlVOCQkweDQJLyogRGF0YSBsb3N0CQkqLwogCisjZGVmaW5lIE5MTVNHX01JTl9UWVBFCQkweDEwCS8qIDwgMHgxMDogcmVzZXJ2ZWQgY29udHJvbCBtZXNzYWdlcyAqLworCiBzdHJ1Y3Qgbmxtc2dlcnIKIHsKIAlpbnQJCWVycm9yOwpAQCAtMTA4LDYgKzExMSwyNSBAQAogCU5FVExJTktfQ09OTkVDVEVELAogfTsKIAorLyoKKyAqICA8LS0tLS0tLSBOTEFfSERSTEVOIC0tLS0tLT4gPC0tIE5MQV9BTElHTihwYXlsb2FkKS0tPgorICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSstIC0gLSstIC0gLSAtIC0gLSAtIC0gLSAtKy0gLSAtKworICogfCAgICAgICAgSGVhZGVyICAgICAgIHwgUGFkIHwgICAgIFBheWxvYWQgICAgICAgfCBQYWQgfAorICogfCAgIChzdHJ1Y3QgbmxhdHRyKSAgIHwgaW5nIHwgICAgICAgICAgICAgICAgICAgfCBpbmcgfAorICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSstIC0gLSstIC0gLSAtIC0gLSAtIC0gLSAtKy0gLSAtKworICogIDwtLS0tLS0tLS0tLS0tLSBubGF0dHItPm5sYV9sZW4gLS0tLS0tLS0tLS0tLS0+CisgKi8KKworc3RydWN0IG5sYXR0cgoreworCV9fdTE2ICAgICAgICAgICBubGFfbGVuOworCV9fdTE2ICAgICAgICAgICBubGFfdHlwZTsKK307CisKKyNkZWZpbmUgTkxBX0FMSUdOVE8JCTQKKyNkZWZpbmUgTkxBX0FMSUdOKGxlbikJCSgoKGxlbikgKyBOTEFfQUxJR05UTyAtIDEpICYgfihOTEFfQUxJR05UTyAtIDEpKQorI2RlZmluZSBOTEFfSERSTEVOCQkoKGludCkgTkxBX0FMSUdOKHNpemVvZihzdHJ1Y3QgbmxhdHRyKSkpCisKICNpZmRlZiBfX0tFUk5FTF9fCiAKICNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaS1hY3BpLmggYi9pbmNsdWRlL2xpbnV4L3BjaS1hY3BpLmgKaW5kZXggODU3MTI2YS4uNDg3N2UzNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wY2ktYWNwaS5oCisrKyBiL2luY2x1ZGUvbGludXgvcGNpLWFjcGkuaApAQCAtNDcsMTQgKzQ3LDE1IEBACiAJCQkJT1NDX1BDSV9FWFBSRVNTX0NBUF9TVFJVQ1RVUkVfQ09OVFJPTCkKIAogI2lmZGVmIENPTkZJR19BQ1BJCi1leHRlcm4gYWNwaV9zdGF0dXMgcGNpX29zY19jb250cm9sX3NldCh1MzIgZmxhZ3MpOworZXh0ZXJuIGFjcGlfc3RhdHVzIHBjaV9vc2NfY29udHJvbF9zZXQoYWNwaV9oYW5kbGUgaGFuZGxlLCB1MzIgZmxhZ3MpOwogZXh0ZXJuIGFjcGlfc3RhdHVzIHBjaV9vc2Nfc3VwcG9ydF9zZXQodTMyIGZsYWdzKTsKICNlbHNlCiAjaWYgIWRlZmluZWQoYWNwaV9zdGF0dXMpCiB0eXBlZGVmIHUzMiAJCWFjcGlfc3RhdHVzOwogI2RlZmluZSBBRV9FUlJPUiAgICAgIAkoYWNwaV9zdGF0dXMpICgweDAwMDEpCiAjZW5kaWYgICAgCi1zdGF0aWMgaW5saW5lIGFjcGlfc3RhdHVzIHBjaV9vc2NfY29udHJvbF9zZXQodTMyIGZsYWdzKSB7cmV0dXJuIEFFX0VSUk9SO30KK3N0YXRpYyBpbmxpbmUgYWNwaV9zdGF0dXMgcGNpX29zY19jb250cm9sX3NldChhY3BpX2hhbmRsZSBoYW5kbGUsIHUzMiBmbGFncykKK3tyZXR1cm4gQUVfRVJST1I7fQogc3RhdGljIGlubGluZSBhY3BpX3N0YXR1cyBwY2lfb3NjX3N1cHBvcnRfc2V0KHUzMiBmbGFncykge3JldHVybiBBRV9FUlJPUjt9IAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpLmggYi9pbmNsdWRlL2xpbnV4L3BjaS5oCmluZGV4IDM1OTZhYzkuLmRlNjkwY2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpLmgKKysrIGIvaW5jbHVkZS9saW51eC9wY2kuaApAQCAtMjM2LDcgKzIzNiw2IEBACiBzdHJ1Y3QgcGNpX2RyaXZlciB7CiAJc3RydWN0IGxpc3RfaGVhZCBub2RlOwogCWNoYXIgKm5hbWU7Ci0Jc3RydWN0IG1vZHVsZSAqb3duZXI7CiAJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkX3RhYmxlOwkvKiBtdXN0IGJlIG5vbi1OVUxMIGZvciBwcm9iZSB0byBiZSBjYWxsZWQgKi8KIAlpbnQgICgqcHJvYmUpICAoc3RydWN0IHBjaV9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKTsJLyogTmV3IGRldmljZSBpbnNlcnRlZCAqLwogCXZvaWQgKCpyZW1vdmUpIChzdHJ1Y3QgcGNpX2RldiAqZGV2KTsJLyogRGV2aWNlIHJlbW92ZWQgKE5VTEwgaWYgbm90IGEgaG90LXBsdWcgY2FwYWJsZSBkcml2ZXIpICovCkBAIC0zMzgsNiArMzM3LDcgQEAKIHN0cnVjdCBwY2lfZGV2ICpwY2lfZmluZF9kZXZpY2VfcmV2ZXJzZSAodW5zaWduZWQgaW50IHZlbmRvciwgdW5zaWduZWQgaW50IGRldmljZSwgY29uc3Qgc3RydWN0IHBjaV9kZXYgKmZyb20pOwogc3RydWN0IHBjaV9kZXYgKnBjaV9maW5kX3Nsb3QgKHVuc2lnbmVkIGludCBidXMsIHVuc2lnbmVkIGludCBkZXZmbik7CiBpbnQgcGNpX2ZpbmRfY2FwYWJpbGl0eSAoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IGNhcCk7CitpbnQgcGNpX2ZpbmRfbmV4dF9jYXBhYmlsaXR5IChzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBwb3MsIGludCBjYXApOwogaW50IHBjaV9maW5kX2V4dF9jYXBhYmlsaXR5IChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgY2FwKTsKIHN0cnVjdCBwY2lfYnVzICogcGNpX2ZpbmRfbmV4dF9idXMoY29uc3Qgc3RydWN0IHBjaV9idXMgKmZyb20pOwogCkBAIC00MzIsOCArNDMyLDEzIEBACiAJCQkgICB2b2lkICphbGlnbmZfZGF0YSk7CiB2b2lkIHBjaV9lbmFibGVfYnJpZGdlcyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKTsKIAotLyogTmV3LXN0eWxlIHByb2Jpbmcgc3VwcG9ydGluZyBob3QtcGx1Z2dhYmxlIGRldmljZXMgKi8KLWludCBwY2lfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBwY2lfZHJpdmVyICopOworLyogUHJvcGVyIHByb2Jpbmcgc3VwcG9ydGluZyBob3QtcGx1Z2dhYmxlIGRldmljZXMgKi8KK2ludCBfX3BjaV9yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHBjaV9kcml2ZXIgKiwgc3RydWN0IG1vZHVsZSAqKTsKK3N0YXRpYyBpbmxpbmUgaW50IHBjaV9yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHBjaV9kcml2ZXIgKmRyaXZlcikKK3sKKwlyZXR1cm4gX19wY2lfcmVnaXN0ZXJfZHJpdmVyKGRyaXZlciwgVEhJU19NT0RVTEUpOworfQorCiB2b2lkIHBjaV91bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgcGNpX2RyaXZlciAqKTsKIHZvaWQgcGNpX3JlbW92ZV9iZWhpbmRfYnJpZGdlKHN0cnVjdCBwY2lfZGV2ICopOwogc3RydWN0IHBjaV9kcml2ZXIgKnBjaV9kZXZfZHJpdmVyKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICopOwpAQCAtNTQ3LDkgKzU1MiwxMSBAQAogc3RhdGljIGlubGluZSB2b2lkIHBjaV9kaXNhYmxlX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KSB7IH0KIHN0YXRpYyBpbmxpbmUgaW50IHBjaV9zZXRfZG1hX21hc2soc3RydWN0IHBjaV9kZXYgKmRldiwgdTY0IG1hc2spIHsgcmV0dXJuIC1FSU87IH0KIHN0YXRpYyBpbmxpbmUgaW50IHBjaV9hc3NpZ25fcmVzb3VyY2Uoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IGkpIHsgcmV0dXJuIC1FQlVTWTt9CitzdGF0aWMgaW5saW5lIGludCBfX3BjaV9yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHBjaV9kcml2ZXIgKmRydiwgc3RydWN0IG1vZHVsZSAqb3duZXIpIHsgcmV0dXJuIDA7fQogc3RhdGljIGlubGluZSBpbnQgcGNpX3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgcGNpX2RyaXZlciAqZHJ2KSB7IHJldHVybiAwO30KIHN0YXRpYyBpbmxpbmUgdm9pZCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHBjaV9kcml2ZXIgKmRydikgeyB9CiBzdGF0aWMgaW5saW5lIGludCBwY2lfZmluZF9jYXBhYmlsaXR5IChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgY2FwKSB7cmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHBjaV9maW5kX25leHRfY2FwYWJpbGl0eSAoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggcG9zdCwgaW50IGNhcCkgeyByZXR1cm4gMDsgfQogc3RhdGljIGlubGluZSBpbnQgcGNpX2ZpbmRfZXh0X2NhcGFiaWxpdHkgKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBjYXApIHtyZXR1cm4gMDsgfQogc3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX21hdGNoX2RldmljZShjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWRzLCBjb25zdCBzdHJ1Y3QgcGNpX2RldiAqZGV2KSB7IHJldHVybiBOVUxMOyB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oIGIvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKaW5kZXggOWE5NmYwNS4uZDAwZjhiYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKKysrIGIvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKQEAgLTM4Nyw2ICszODcsNyBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05TX1NDMTEwMF9TTUkJMHgwNTExCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlNfU0MxMTAwX1hCVVMJMHgwNTE1CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlNfODc0MTAJCTB4ZDAwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05TX0NTNTUzNV9JREUJMHgwMDJkCiAKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9UU0VORwkJMHgxMDBjCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVFNFTkdfVzMyUF8yCTB4MzIwMgpAQCAtNDQxLDYgKzQ0Miw3IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSUJNX1NOSVBFCQkweDAxODAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JQk1fQ0lUUklORQkJMHgwMjhDCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSUJNX0dFTVNUT05FCQkweEIxNjYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JQk1fT0JTSURJQU4JCTB4MDJCRAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lCTV9JQ09NX0RFVl9JRF8xCTB4MDAzMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lCTV9JQ09NX0RFVl9JRF8yCTB4MDIxOQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lCTV9JQ09NX1YyX1RXT19QT1JUU19SVlgJCTB4MDIxQQpAQCAtNDg3LDYgKzQ4OSw4IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EXzgxNTFfMAkweDc0NTQKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfODEzMV9BUElDICAgICAweDc0NTAKIAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9DUzU1MzZfSURFCTB4MjA5QQorCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfVFJJREVOVAkJMHgxMDIzCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVFJJREVOVF80RFdBVkVfRFgJMHgyMDAwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVFJJREVOVF80RFdBVkVfTlgJMHgyMDAxCkBAIC0yMTQ0LDYgKzIxNDgsNyBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FEQVBURUMyXzc4OTlCCTB4MDBjMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FEQVBURUMyXzc4OTlECTB4MDBjMwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FEQVBURUMyXzc4OTlQCTB4MDBjZgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FEQVBURUMyX09CU0lESUFOICAgMHgwNTAwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURBUFRFQzJfU0NBTVAJMHgwNTAzCiAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waG9uZWRldi5oIGIvaW5jbHVkZS9saW51eC9waG9uZWRldi5oCmluZGV4IGQ1NDA0OWUuLmEwZTMxYWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGhvbmVkZXYuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Bob25lZGV2LmgKQEAgLTIsNyArMiw2IEBACiAjZGVmaW5lIF9fTElOVVhfUEhPTkVERVZfSAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RldmljZS5oCmluZGV4IDFhMTY1YjcuLjE3ZTMzNmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kZXZpY2UuaApAQCAtNDMsNCArNDMsMTkgQEAKIGV4dGVybiBpbnQgcGxhdGZvcm1fZGV2aWNlX2FkZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKIGV4dGVybiB2b2lkIHBsYXRmb3JtX2RldmljZV9wdXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7CiAKK3N0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgeworCWludCAoKnByb2JlKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICopOworCWludCAoKnJlbW92ZSkoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqKTsKKwl2b2lkICgqc2h1dGRvd24pKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKik7CisJaW50ICgqc3VzcGVuZCkoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqLCBwbV9tZXNzYWdlX3Qgc3RhdGUpOworCWludCAoKnJlc3VtZSkoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqKTsKKwlzdHJ1Y3QgZGV2aWNlX2RyaXZlciBkcml2ZXI7Cit9OworCitleHRlcm4gaW50IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcihzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyICopOworZXh0ZXJuIHZvaWQgcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoc3RydWN0IHBsYXRmb3JtX2RyaXZlciAqKTsKKworI2RlZmluZSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShfZGV2KQlkZXZfZ2V0X2RydmRhdGEoJihfZGV2KS0+ZGV2KQorI2RlZmluZSBwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShfZGV2LGRhdGEpCWRldl9zZXRfZHJ2ZGF0YSgmKF9kZXYpLT5kZXYsIChkYXRhKSkKKwogI2VuZGlmIC8qIF9QTEFURk9STV9ERVZJQ0VfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHBwLWNvbXAuaCBiL2luY2x1ZGUvbGludXgvcHBwLWNvbXAuaAppbmRleCA3MjI3ZTY1Li5lODZhN2E1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BwcC1jb21wLmgKKysrIGIvaW5jbHVkZS9saW51eC9wcHAtY29tcC5oCkBAIC0xMTEsNiArMTExLDggQEAKIAogCS8qIFVzZWQgaW4gbG9ja2luZyBjb21wcmVzc29yIG1vZHVsZXMgKi8KIAlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKKwkvKiBFeHRyYSBza2Igc3BhY2UgbmVlZGVkIGJ5IHRoZSBjb21wcmVzc29yIGFsZ29yaXRobSAqLworCXVuc2lnbmVkIGludCBjb21wX2V4dHJhOwogfTsKIAogLyoKQEAgLTE5MSw2ICsxOTMsMTMgQEAKICNkZWZpbmUgREVGTEFURV9DSEtfU0VRVUVOQ0UJMAogCiAvKgorICogRGVmaW5pdGlvbnMgZm9yIE1QUEUuCisgKi8KKworI2RlZmluZSBDSV9NUFBFICAgICAgICAgICAgICAgIDE4ICAgICAgLyogY29uZmlnIG9wdGlvbiBmb3IgTVBQRSAqLworI2RlZmluZSBDSUxFTl9NUFBFICAgICAgICAgICAgICA2ICAgICAgLyogbGVuZ3RoIG9mIGNvbmZpZyBvcHRpb24gKi8KKworLyoKICAqIERlZmluaXRpb25zIGZvciBvdGhlciwgYXMgeWV0IHVuc3VwcG9ydGVkLCBjb21wcmVzc2lvbiBtZXRob2RzLgogICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHJvY19mcy5oIGIvaW5jbHVkZS9saW51eC9wcm9jX2ZzLmgKaW5kZXggNjVjZWVhYS4uNzQ0ODhlNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wcm9jX2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9wcm9jX2ZzLmgKQEAgLTY2LDYgKzY2LDcgQEAKIAl3cml0ZV9wcm9jX3QgKndyaXRlX3Byb2M7CiAJYXRvbWljX3QgY291bnQ7CQkvKiB1c2UgY291bnQgKi8KIAlpbnQgZGVsZXRlZDsJCS8qIGRlbGV0ZSBmbGFnICovCisJdm9pZCAqc2V0OwogfTsKIAogc3RydWN0IGtjb3JlX2xpc3QgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yYWlkL2JpdG1hcC5oIGIvaW5jbHVkZS9saW51eC9yYWlkL2JpdG1hcC5oCmluZGV4IDlkZTk5MTkuLjg5OTQzNzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmFpZC9iaXRtYXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JhaWQvYml0bWFwLmgKQEAgLTYsNyArNiwxMyBAQAogI2lmbmRlZiBCSVRNQVBfSAogI2RlZmluZSBCSVRNQVBfSCAxCiAKLSNkZWZpbmUgQklUTUFQX01BSk9SIDMKKyNkZWZpbmUgQklUTUFQX01BSk9SX0xPIDMKKy8qIHZlcnNpb24gNCBpbnNpc3RzIHRoZSBiaXRtYXAgaXMgaW4gbGl0dGxlLWVuZGlhbiBvcmRlcgorICogd2l0aCB2ZXJzaW9uIDMsIGl0IGlzIGhvc3QtZW5kaWFuIHdoaWNoIGlzIG5vbi1wb3J0YWJsZQorICovCisjZGVmaW5lIEJJVE1BUF9NQUpPUl9ISSA0CisjZGVmaW5lCUJJVE1BUF9NQUpPUl9IT1NURU5ESUFOIDMKKwogI2RlZmluZSBCSVRNQVBfTUlOT1IgMzkKIAogLyoKQEAgLTEzMyw3ICsxMzksOCBAQAogLyogdXNlIHRoZXNlIGZvciBiaXRtYXAtPmZsYWdzIGFuZCBiaXRtYXAtPnNiLT5zdGF0ZSBiaXQtZmllbGRzICovCiBlbnVtIGJpdG1hcF9zdGF0ZSB7CiAJQklUTUFQX0FDVElWRSA9IDB4MDAxLCAvKiB0aGUgYml0bWFwIGlzIGluIHVzZSAqLwotCUJJVE1BUF9TVEFMRSAgPSAweDAwMiAgLyogdGhlIGJpdG1hcCBmaWxlIGlzIG91dCBvZiBkYXRlIG9yIGhhZCAtRUlPICovCisJQklUTUFQX1NUQUxFICA9IDB4MDAyLCAgLyogdGhlIGJpdG1hcCBmaWxlIGlzIG91dCBvZiBkYXRlIG9yIGhhZCAtRUlPICovCisJQklUTUFQX0hPU1RFTkRJQU4gPSAweDgwMDAsCiB9OwogCiAvKiB0aGUgc3VwZXJibG9jayBhdCB0aGUgZnJvbnQgb2YgdGhlIGJpdG1hcCBmaWxlIC0tIGxpdHRsZSBlbmRpYW4gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmFpZC9tZC5oIGIvaW5jbHVkZS9saW51eC9yYWlkL21kLmgKaW5kZXggZmZhMzE2Yy4uMTNlN2M0YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yYWlkL21kLmgKKysrIGIvaW5jbHVkZS9saW51eC9yYWlkL21kLmgKQEAgLTY2LDggKzY2LDEwIEBACiAgKiAgICAgYW5kIG1ham9yX3ZlcnNpb24vbWlub3JfdmVyc2lvbiBhY2NvcmRpbmdseQogICogPj0yIG1lYW5zIHRoYXQgSW50ZXJuYWwgYml0bWFwcyBhcmUgc3VwcG9ydGVkIGJ5IHNldHRpbmcgTURfU0JfQklUTUFQX1BSRVNFTlQKICAqICAgICBpbiB0aGUgc3VwZXIgc3RhdHVzIGJ5dGUKKyAqID49MyBtZWFucyB0aGF0IGJpdG1hcCBzdXBlcmJsb2NrIHZlcnNpb24gNCBpcyBzdXBwb3J0ZWQsIHdoaWNoIHVzZXMKKyAqICAgICBsaXR0bGUtZW5kaW5nIHJlcHJlc2VudGF0aW9uIHJhdGhlciB0aGFuIGhvc3QtZW5kaWFuCiAgKi8KLSNkZWZpbmUgTURfUEFUQ0hMRVZFTF9WRVJTSU9OICAgICAgICAgICAyCisjZGVmaW5lIE1EX1BBVENITEVWRUxfVkVSU0lPTiAgICAgICAgICAgMwogCiBleHRlcm4gaW50IHJlZ2lzdGVyX21kX3BlcnNvbmFsaXR5IChpbnQgcF9udW0sIG1ka19wZXJzb25hbGl0eV90ICpwKTsKIGV4dGVybiBpbnQgdW5yZWdpc3Rlcl9tZF9wZXJzb25hbGl0eSAoaW50IHBfbnVtKTsKQEAgLTg3LDYgKzg5LDcgQEAKIAogZXh0ZXJuIHZvaWQgbWRfc3VwZXJfd3JpdGUobWRkZXZfdCAqbWRkZXYsIG1ka19yZGV2X3QgKnJkZXYsCiAJCQkgICBzZWN0b3JfdCBzZWN0b3IsIGludCBzaXplLCBzdHJ1Y3QgcGFnZSAqcGFnZSk7CitleHRlcm4gdm9pZCBtZF9zdXBlcl93YWl0KG1kZGV2X3QgKm1kZGV2KTsKIGV4dGVybiBpbnQgc3luY19wYWdlX2lvKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IHNlY3RvciwgaW50IHNpemUsCiAJCQlzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IHJ3KTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yYWlkL21kX2suaCBiL2luY2x1ZGUvbGludXgvcmFpZC9tZF9rLmgKaW5kZXggZWJjZTk0OS4uNDY2MjlhMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yYWlkL21kX2suaAorKysgYi9pbmNsdWRlL2xpbnV4L3JhaWQvbWRfay5oCkBAIC0xMDUsNiArMTA1LDggQEAKIAlpbnQJCXNiX3NpemU7CS8qIGJ5dGVzIGluIHRoZSBzdXBlcmJsb2NrICovCiAJaW50CQlwcmVmZXJyZWRfbWlub3I7CS8qIGF1dG9ydW4gc3VwcG9ydCAqLwogCisJc3RydWN0IGtvYmplY3QJa29iajsKKwogCS8qIEEgZGV2aWNlIGNhbiBiZSBpbiBvbmUgb2YgdGhyZWUgc3RhdGVzIGJhc2VkIG9uIHR3byBmbGFnczoKIAkgKiBOb3Qgd29ya2luZzogICBmYXVsdHk9PTEgaW5fc3luYz09MAogCSAqIEZ1bGx5IHdvcmtpbmc6IGZhdWx0eT09MCBpbl9zeW5jPT0xCkBAIC0xMTUsMTEgKzExNywxMiBAQAogCSAqIEl0IGNhbiBuZXZlciBoYXZlIGZhdWx0eT09MSwgaW5fc3luYz09MQogCSAqIFRoaXMgcmVkdWNlcyB0aGUgYnVyZGVuIG9mIHRlc3RpbmcgbXVsdGlwbGUgZmxhZ3MgaW4gbWFueSBjYXNlcwogCSAqLwotCWludCBmYXVsdHk7CQkJLyogaWYgZmF1bHR5IGRvIG5vdCBpc3N1ZSBJTyByZXF1ZXN0cyAqLwotCWludCBpbl9zeW5jOwkJCS8qIGRldmljZSBpcyBhIGZ1bGwgbWVtYmVyIG9mIHRoZSBhcnJheSAqLwogCi0JdW5zaWduZWQgbG9uZwlmbGFnczsJCS8qIFNob3VsZCBpbmNsdWRlIGZhdWx0eSBhbmQgaW5fc3luYyBoZXJlLiAqLworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisjZGVmaW5lCUZhdWx0eQkJMQkJLyogZGV2aWNlIGlzIGtub3duIHRvIGhhdmUgYSBmYXVsdCAqLworI2RlZmluZQlJbl9zeW5jCQkyCQkvKiBkZXZpY2UgaXMgaW5fc3luYyB3aXRoIHJlc3Qgb2YgYXJyYXkgKi8KICNkZWZpbmUJV3JpdGVNb3N0bHkJNAkJLyogQXZvaWQgcmVhZGluZyBpZiBhdCBhbGwgcG9zc2libGUgKi8KKyNkZWZpbmUJQmFycmllcnNOb3RzdXBwCTUJCS8qIEJJT19SV19CQVJSSUVSIGlzIG5vdCBzdXBwb3J0ZWQgKi8KIAogCWludCBkZXNjX25yOwkJCS8qIGRlc2NyaXB0b3IgaW5kZXggaW4gdGhlIHN1cGVyYmxvY2sgKi8KIAlpbnQgcmFpZF9kaXNrOwkJCS8qIHJvbGUgb2YgZGV2aWNlIGluIGFycmF5ICovCkBAIC0xMzIsNiArMTM1LDkgQEAKIAkJCQkJICogb25seSBtYWludGFpbmVkIGZvciBhcnJheXMgdGhhdAogCQkJCQkgKiBzdXBwb3J0IGhvdCByZW1vdmFsCiAJCQkJCSAqLworCWF0b21pY190CXJlYWRfZXJyb3JzOwkvKiBudW1iZXIgb2YgY29uc2VjdXRpdmUgcmVhZCBlcnJvcnMgdGhhdAorCQkJCQkgKiB3ZSBoYXZlIHRyaWVkIHRvIGlnbm9yZS4KKwkJCQkJICovCiB9OwogCiB0eXBlZGVmIHN0cnVjdCBtZGtfcGVyc29uYWxpdHlfcyBtZGtfcGVyc29uYWxpdHlfdDsKQEAgLTE0OCw2ICsxNTQsOCBAQAogCiAJc3RydWN0IGdlbmRpc2sJCQkqZ2VuZGlzazsKIAorCXN0cnVjdCBrb2JqZWN0CQkJa29iajsKKwogCS8qIFN1cGVyYmxvY2sgaW5mb3JtYXRpb24gKi8KIAlpbnQJCQkJbWFqb3JfdmVyc2lvbiwKIAkJCQkJbWlub3JfdmVyc2lvbiwKQEAgLTE3MSw2ICsxNzksMTAgQEAKIAlzZWN0b3JfdAkJCXJlc3luY19tYXJrX2NudDsvKiBibG9ja3Mgd3JpdHRlbiBhdCByZXN5bmNfbWFyayAqLwogCiAJc2VjdG9yX3QJCQlyZXN5bmNfbWF4X3NlY3RvcnM7IC8qIG1heSBiZSBzZXQgYnkgcGVyc29uYWxpdHkgKi8KKworCXNlY3Rvcl90CQkJcmVzeW5jX21pc21hdGNoZXM7IC8qIGNvdW50IG9mIHNlY3RvcnMgd2hlcmUKKwkJCQkJCQkgICAgKiBwYXJpdHkvcmVwbGljYSBtaXNtYXRjaCBmb3VuZAorCQkJCQkJCSAgICAqLwogCS8qIHJlY292ZXJ5L3Jlc3luYyBmbGFncyAKIAkgKiBORUVERUQ6ICAgd2UgbWlnaHQgbmVlZCB0byBzdGFydCBhIHJlc3luYy9yZWNvdmVyCiAJICogUlVOTklORzogIGEgdGhyZWFkIGlzIHJ1bm5pbmcsIG9yIGFib3V0IHRvIGJlIHN0YXJ0ZWQKQEAgLTE3OCw2ICsxOTAsOCBAQAogCSAqIEVSUjogICAgICBhbmQgSU8gZXJyb3Igd2FzIGRldGVjdGVkIC0gYWJvcnQgdGhlIHJlc3luYy9yZWNvdmVyeQogCSAqIElOVFI6ICAgICBzb21lb25lIHJlcXVlc3RlZCBhIChjbGVhbikgZWFybHkgYWJvcnQuCiAJICogRE9ORTogICAgIHRocmVhZCBpcyBkb25lIGFuZCBpcyB3YWl0aW5nIHRvIGJlIHJlYXBlZAorCSAqIFJFUVVFU1Q6ICB1c2VyLXNwYWNlIGhhcyByZXF1ZXN0ZWQgYSBzeW5jICh1c2VkIHdpdGggU1lOQykKKwkgKiBDSEVDSzogICAgdXNlci1zcGFjZSByZXF1ZXN0IGZvciBmb3IgY2hlY2stb25seSwgbm8gcmVwYWlyCiAJICovCiAjZGVmaW5lCU1EX1JFQ09WRVJZX1JVTk5JTkcJMAogI2RlZmluZQlNRF9SRUNPVkVSWV9TWU5DCTEKQEAgLTE4NSw2ICsxOTksOCBAQAogI2RlZmluZQlNRF9SRUNPVkVSWV9JTlRSCTMKICNkZWZpbmUJTURfUkVDT1ZFUllfRE9ORQk0CiAjZGVmaW5lCU1EX1JFQ09WRVJZX05FRURFRAk1CisjZGVmaW5lCU1EX1JFQ09WRVJZX1JFUVVFU1RFRAk2CisjZGVmaW5lCU1EX1JFQ09WRVJZX0NIRUNLCTcKIAl1bnNpZ25lZCBsb25nCQkJcmVjb3Zlcnk7CiAKIAlpbnQJCQkJaW5fc3luYzsJLyoga25vdyB0byBub3QgbmVlZCByZXN5bmMgKi8KQEAgLTE5NSw2ICsyMTEsMTMgQEAKIAlpbnQJCQkJZGVncmFkZWQ7CS8qIHdoZXRoZXIgbWQgc2hvdWxkIGNvbnNpZGVyCiAJCQkJCQkJICogYWRkaW5nIGEgc3BhcmUKIAkJCQkJCQkgKi8KKwlpbnQJCQkJYmFycmllcnNfd29yazsJLyogaW5pdGlhbGlzZWQgdG8gdHJ1ZSwgY2xlYXJlZCBhcyBzb29uCisJCQkJCQkJICogYXMgYSBiYXJyaWVyIHJlcXVlc3QgdG8gc2xhdmUKKwkJCQkJCQkgKiBmYWlscy4gIE9ubHkgc3VwcG9ydGVkCisJCQkJCQkJICovCisJc3RydWN0IGJpbwkJCSpiaW9saXN0OyAJLyogYmlvcyB0aGF0IG5lZWQgdG8gYmUgcmV0cmllZAorCQkJCQkJCSAqIGJlY2F1c2UgQklPX1JXX0JBUlJJRVIgaXMgbm90IHN1cHBvcnRlZAorCQkJCQkJCSAqLwogCiAJYXRvbWljX3QJCQlyZWNvdmVyeV9hY3RpdmU7IC8qIGJsb2NrcyBzY2hlZHVsZWQsIGJ1dCBub3Qgd3JpdHRlbiAqLwogCXdhaXRfcXVldWVfaGVhZF90CQlyZWNvdmVyeV93YWl0OwpAQCAtMjMyLDcgKzI1NSw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCByZGV2X2RlY19wZW5kaW5nKG1ka19yZGV2X3QgKnJkZXYsIG1kZGV2X3QgKm1kZGV2KQogewotCWludCBmYXVsdHkgPSByZGV2LT5mYXVsdHk7CisJaW50IGZhdWx0eSA9IHRlc3RfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKTsKIAlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmcmRldi0+bnJfcGVuZGluZykgJiYgZmF1bHR5KQogCQlzZXRfYml0KE1EX1JFQ09WRVJZX05FRURFRCwgJm1kZGV2LT5yZWNvdmVyeSk7CiB9CkBAIC0yNzAsNiArMjkzLDEzIEBACiB9OwogCiAKK3N0cnVjdCBtZF9zeXNmc19lbnRyeSB7CisJc3RydWN0IGF0dHJpYnV0ZSBhdHRyOworCXNzaXplX3QgKCpzaG93KShtZGRldl90ICosIGNoYXIgKik7CisJc3NpemVfdCAoKnN0b3JlKShtZGRldl90ICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKK307CisKKwogc3RhdGljIGlubGluZSBjaGFyICogbWRuYW1lIChtZGRldl90ICogbWRkZXYpCiB7CiAJcmV0dXJuIG1kZGV2LT5nZW5kaXNrID8gbWRkZXYtPmdlbmRpc2stPmRpc2tfbmFtZSA6ICJtZFgiOwpAQCAtMzA0LDEwICszMzQsOCBAQAogCW1kZGV2X3QJCQkqbWRkZXY7CiAJd2FpdF9xdWV1ZV9oZWFkX3QJd3F1ZXVlOwogCXVuc2lnbmVkIGxvbmcgICAgICAgICAgIGZsYWdzOwotCXN0cnVjdCBjb21wbGV0aW9uCSpldmVudDsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QJKnRzazsKIAl1bnNpZ25lZCBsb25nCQl0aW1lb3V0OwotCWNvbnN0IGNoYXIJCSpuYW1lOwogfSBtZGtfdGhyZWFkX3Q7CiAKICNkZWZpbmUgVEhSRUFEX1dBS0VVUCAgMApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yYWlkL3JhaWQxLmggYi9pbmNsdWRlL2xpbnV4L3JhaWQvcmFpZDEuaAppbmRleCA2MGUxOWI2Li4yOTJiOThmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JhaWQvcmFpZDEuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JhaWQvcmFpZDEuaApAQCAtMTEwLDcgKzExMCw5IEBACiAjZGVmaW5lCVIxQklPX1VwdG9kYXRlCTAKICNkZWZpbmUJUjFCSU9fSXNTeW5jCTEKICNkZWZpbmUJUjFCSU9fRGVncmFkZWQJMgotI2RlZmluZQlSMUJJT19CZWhpbmRJTyAgIDMKKyNkZWZpbmUJUjFCSU9fQmVoaW5kSU8JMworI2RlZmluZQlSMUJJT19CYXJyaWVyCTQKKyNkZWZpbmUgUjFCSU9fQmFycmllclJldHJ5IDUKIC8qIEZvciB3cml0ZS1iZWhpbmQgcmVxdWVzdHMsIHdlIGNhbGwgYmlfZW5kX2lvIHdoZW4KICAqIHRoZSBsYXN0IG5vbi13cml0ZS1iZWhpbmQgZGV2aWNlIGNvbXBsZXRlcywgcHJvdmlkaW5nCiAgKiBhbnkgd3JpdGUgd2FzIHN1Y2Nlc3NmdWwuICBPdGhlcndpc2Ugd2UgY2FsbCB3aGVuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JhaWQvcmFpZDUuaCBiL2luY2x1ZGUvbGludXgvcmFpZC9yYWlkNS5oCmluZGV4IDE3NmZjNjUuLmYwMjViYTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmFpZC9yYWlkNS5oCisrKyBiL2luY2x1ZGUvbGludXgvcmFpZC9yYWlkNS5oCkBAIC0xNTQsNiArMTU0LDggQEAKICNkZWZpbmUJUjVfV2FudHdyaXRlCTUKICNkZWZpbmUJUjVfU3luY2lvCTYJLyogdGhpcyBpbyBuZWVkIHRvIGJlIGFjY291bnRlZCBhcyByZXN5bmMgaW8gKi8KICNkZWZpbmUJUjVfT3ZlcmxhcAk3CS8qIFRoZXJlIGlzIGEgcGVuZGluZyBvdmVybGFwcGluZyByZXF1ZXN0IG9uIHRoaXMgYmxvY2sgKi8KKyNkZWZpbmUJUjVfUmVhZEVycm9yCTgJLyogc2VlbiBhIHJlYWQgZXJyb3IgaGVyZSByZWNlbnRseSAqLworI2RlZmluZQlSNV9SZVdyaXRlCTkJLyogaGF2ZSB0cmllZCB0byBvdmVyLXdyaXRlIHRoZSByZWFkZXJyb3IgKi8KIAogLyoKICAqIFdyaXRlIG1ldGhvZApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yYWlkX2NsYXNzLmggYi9pbmNsdWRlL2xpbnV4L3JhaWRfY2xhc3MuaAppbmRleCBhNzExMjNjLi40ODgzMWVhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JhaWRfY2xhc3MuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JhaWRfY2xhc3MuaApAQCAtMSw0ICsxLDkgQEAKIC8qCisgKiByYWlkX2NsYXNzLmggLSBhIGdlbmVyaWMgcmFpZCB2aXN1YWxpc2F0aW9uIGNsYXNzCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA1IC0gSmFtZXMgQm90dG9tbGV5IDxKYW1lcy5Cb3R0b21sZXlAc3RlZWxleWUuY29tPgorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciBHUEx2MgogICovCiAjaW5jbHVkZSA8bGludXgvdHJhbnNwb3J0X2NsYXNzLmg+CiAKQEAgLTE0LDIwICsxOSwzNSBAQAogfTsKIAogZW51bSByYWlkX3N0YXRlIHsKLQlSQUlEX0FDVElWRSA9IDEsCi0JUkFJRF9ERUdSQURFRCwKLQlSQUlEX1JFU1lOQ0lORywKLQlSQUlEX09GRkxJTkUsCisJUkFJRF9TVEFURV9VTktOT1dOID0gMCwKKwlSQUlEX1NUQVRFX0FDVElWRSwKKwlSQUlEX1NUQVRFX0RFR1JBREVELAorCVJBSURfU1RBVEVfUkVTWU5DSU5HLAorCVJBSURfU1RBVEVfT0ZGTElORSwKK307CisKK2VudW0gcmFpZF9sZXZlbCB7CisJUkFJRF9MRVZFTF9VTktOT1dOID0gMCwKKwlSQUlEX0xFVkVMX0xJTkVBUiwKKwlSQUlEX0xFVkVMXzAsCisJUkFJRF9MRVZFTF8xLAorCVJBSURfTEVWRUxfMywKKwlSQUlEX0xFVkVMXzQsCisJUkFJRF9MRVZFTF81LAorCVJBSURfTEVWRUxfNiwKIH07CiAKIHN0cnVjdCByYWlkX2RhdGEgewogCXN0cnVjdCBsaXN0X2hlYWQgY29tcG9uZW50X2xpc3Q7CiAJaW50IGNvbXBvbmVudF9jb3VudDsKLQlpbnQgbGV2ZWw7CisJZW51bSByYWlkX2xldmVsIGxldmVsOwogCWVudW0gcmFpZF9zdGF0ZSBzdGF0ZTsKIAlpbnQgcmVzeW5jOwogfTsKIAorLyogcmVzeW5jIGNvbXBsZXRlIGdvZXMgZnJvbSAwIHRvIHRoaXMgKi8KKyNkZWZpbmUgUkFJRF9NQVhfUkVTWU5DCQkoMTAwMDApCisKICNkZWZpbmUgREVGSU5FX1JBSURfQVRUUklCVVRFKHR5cGUsIGF0dHIpCQkJCSAgICAgIFwKIHN0YXRpYyBpbmxpbmUgdm9pZAkJCQkJCQkgICAgICBcCiByYWlkX3NldF8jI2F0dHIoc3RydWN0IHJhaWRfdGVtcGxhdGUgKnIsIHN0cnVjdCBkZXZpY2UgKmRldiwgdHlwZSB2YWx1ZSkgeyAgICBcCkBAIC00OCw3ICs2OCw3IEBACiAJcmV0dXJuIHJkLT5hdHRyOwkJCQkJCSAgICAgIFwKIH0KIAotREVGSU5FX1JBSURfQVRUUklCVVRFKGludCwgbGV2ZWwpCitERUZJTkVfUkFJRF9BVFRSSUJVVEUoZW51bSByYWlkX2xldmVsLCBsZXZlbCkKIERFRklORV9SQUlEX0FUVFJJQlVURShpbnQsIHJlc3luYykKIERFRklORV9SQUlEX0FUVFJJQlVURShlbnVtIHJhaWRfc3RhdGUsIHN0YXRlKQogCQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCmluZGV4IDAzYjY4YTcuLjJiYmY5NjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKQEAgLTkwOSw2ICs5MDksNyBAQAogI2RlZmluZSBQRl9TWU5DV1JJVEUJMHgwMDIwMDAwMAkvKiBJIGFtIGRvaW5nIGEgc3luYyB3cml0ZSAqLwogI2RlZmluZSBQRl9CT1JST1dFRF9NTQkweDAwNDAwMDAwCS8qIEkgYW0gYSBrdGhyZWFkIGRvaW5nIHVzZV9tbSAqLwogI2RlZmluZSBQRl9SQU5ET01JWkUJMHgwMDgwMDAwMAkvKiByYW5kb21pemUgdmlydHVhbCBhZGRyZXNzIHNwYWNlICovCisjZGVmaW5lIFBGX0hPVFBMVUdfQ1BVCTB4MDEwMDAwMDAJLyogQ3VycmVudGx5IHBlcmZvcm1pbmcgQ1BVIGhvdHBsdWcgKi8KIAogLyoKICAqIE9ubHkgdGhlIF9jdXJyZW50XyB0YXNrIGNhbiByZWFkL3dyaXRlIHRvIHRzay0+ZmxhZ3MsIGJ1dCBvdGhlcgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaCBiL2luY2x1ZGUvbGludXgvc2tidWZmLmgKaW5kZXggZmRmYjhmZS4uMGE4ZWE4YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCkBAIC0yNzQsNiArMjc0LDkgQEAKICNpZiBkZWZpbmVkKENPTkZJR19JUF9WUykgfHwgZGVmaW5lZChDT05GSUdfSVBfVlNfTU9EVUxFKQogCV9fdTgJCQlpcHZzX3Byb3BlcnR5OjE7CiAjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19ORl9DT05OVFJBQ0spIHx8IGRlZmluZWQoQ09ORklHX05GX0NPTk5UUkFDS19NT0RVTEUpCisJc3RydWN0IHNrX2J1ZmYJCSpuZmN0X3JlYXNtOworI2VuZGlmCiAjaWZkZWYgQ09ORklHX0JSSURHRV9ORVRGSUxURVIKIAlzdHJ1Y3QgbmZfYnJpZGdlX2luZm8JKm5mX2JyaWRnZTsKICNlbmRpZgpAQCAtMTIzMyw4ICsxMjM2LDcgQEAKIGV4dGVybiBpbnQJICAgICAgIHNrYl9jb3B5X2RhdGFncmFtX2lvdmVjKGNvbnN0IHN0cnVjdCBza19idWZmICpmcm9tLAogCQkJCQkgICAgICAgaW50IG9mZnNldCwgc3RydWN0IGlvdmVjICp0bywKIAkJCQkJICAgICAgIGludCBzaXplKTsKLWV4dGVybiBpbnQJICAgICAgIHNrYl9jb3B5X2FuZF9jc3VtX2RhdGFncmFtX2lvdmVjKGNvbnN0Ci0JCQkJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwKK2V4dGVybiBpbnQJICAgICAgIHNrYl9jb3B5X2FuZF9jc3VtX2RhdGFncmFtX2lvdmVjKHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJCQkJaW50IGhsZW4sCiAJCQkJCQkJc3RydWN0IGlvdmVjICppb3YpOwogZXh0ZXJuIHZvaWQJICAgICAgIHNrYl9mcmVlX2RhdGFncmFtKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CkBAIC0xMzAyLDYgKzEzMDQsMzAgQEAKIAogZXh0ZXJuIHZvaWQgX19uZXRfdGltZXN0YW1wKHN0cnVjdCBza19idWZmICpza2IpOwogCitleHRlcm4gdW5zaWduZWQgaW50IF9fc2tiX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IpOworCisvKioKKyAqCXNrYl9jaGVja3N1bV9jb21wbGV0ZSAtIENhbGN1bGF0ZSBjaGVja3N1bSBvZiBhbiBlbnRpcmUgcGFja2V0CisgKglAc2tiOiBwYWNrZXQgdG8gcHJvY2VzcworICoKKyAqCVRoaXMgZnVuY3Rpb24gY2FsY3VsYXRlcyB0aGUgY2hlY2tzdW0gb3ZlciB0aGUgZW50aXJlIHBhY2tldCBwbHVzCisgKgl0aGUgdmFsdWUgb2Ygc2tiLT5jc3VtLiAgVGhlIGxhdHRlciBjYW4gYmUgdXNlZCB0byBzdXBwbHkgdGhlCisgKgljaGVja3N1bSBvZiBhIHBzZXVkbyBoZWFkZXIgYXMgdXNlZCBieSBUQ1AvVURQLiAgSXQgcmV0dXJucyB0aGUKKyAqCWNoZWNrc3VtLgorICoKKyAqCUZvciBwcm90b2NvbHMgdGhhdCBjb250YWluIGNvbXBsZXRlIGNoZWNrc3VtcyBzdWNoIGFzIElDTVAvVENQL1VEUCwKKyAqCXRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gdmVyaWZ5IHRoYXQgY2hlY2tzdW0gb24gcmVjZWl2ZWQKKyAqCXBhY2tldHMuICBJbiB0aGF0IGNhc2UgdGhlIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gemVybyBpZiB0aGUKKyAqCWNoZWNrc3VtIGlzIGNvcnJlY3QuICBJbiBwYXJ0aWN1bGFyLCB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHplcm8KKyAqCWlmIHNrYi0+aXBfc3VtbWVkIGlzIENIRUNLU1VNX1VOTkVDRVNTQVJZIHdoaWNoIGluZGljYXRlcyB0aGF0IHRoZQorICoJaGFyZHdhcmUgaGFzIGFscmVhZHkgdmVyaWZpZWQgdGhlIGNvcnJlY3RuZXNzIG9mIHRoZSBjaGVja3N1bS4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2tiX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IpCit7CisJcmV0dXJuIHNrYi0+aXBfc3VtbWVkICE9IENIRUNLU1VNX1VOTkVDRVNTQVJZICYmCisJCV9fc2tiX2NoZWNrc3VtX2NvbXBsZXRlKHNrYik7Cit9CisKICNpZmRlZiBDT05GSUdfTkVURklMVEVSCiBzdGF0aWMgaW5saW5lIHZvaWQgbmZfY29ubnRyYWNrX3B1dChzdHJ1Y3QgbmZfY29ubnRyYWNrICpuZmN0KQogewpAQCAtMTMxMywxMCArMTMzOSwyNiBAQAogCWlmIChuZmN0KQogCQlhdG9taWNfaW5jKCZuZmN0LT51c2UpOwogfQorI2lmIGRlZmluZWQoQ09ORklHX05GX0NPTk5UUkFDSykgfHwgZGVmaW5lZChDT05GSUdfTkZfQ09OTlRSQUNLX01PRFVMRSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBuZl9jb25udHJhY2tfZ2V0X3JlYXNtKHN0cnVjdCBza19idWZmICpza2IpCit7CisJaWYgKHNrYikKKwkJYXRvbWljX2luYygmc2tiLT51c2Vycyk7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgbmZfY29ubnRyYWNrX3B1dF9yZWFzbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWlmIChza2IpCisJCWtmcmVlX3NrYihza2IpOworfQorI2VuZGlmCiBzdGF0aWMgaW5saW5lIHZvaWQgbmZfcmVzZXQoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAluZl9jb25udHJhY2tfcHV0KHNrYi0+bmZjdCk7CiAJc2tiLT5uZmN0ID0gTlVMTDsKKyNpZiBkZWZpbmVkKENPTkZJR19ORl9DT05OVFJBQ0spIHx8IGRlZmluZWQoQ09ORklHX05GX0NPTk5UUkFDS19NT0RVTEUpCisJbmZfY29ubnRyYWNrX3B1dF9yZWFzbShza2ItPm5mY3RfcmVhc20pOworCXNrYi0+bmZjdF9yZWFzbSA9IE5VTEw7CisjZW5kaWYKIH0KIAogI2lmZGVmIENPTkZJR19CUklER0VfTkVURklMVEVSCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N0YWxsaW9uLmggYi9pbmNsdWRlL2xpbnV4L3N0YWxsaW9uLmgKaW5kZXggZTg5Yjc3Yi4uMTNhMzdmMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdGFsbGlvbi5oCisrKyBiL2luY2x1ZGUvbGludXgvc3RhbGxpb24uaApAQCAtMjEsOCArMjEsNiBAQAogICoJRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZglfU1RBTExJT05fSAogI2RlZmluZQlfU1RBTExJT05fSApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zeXNjdGwuaCBiL2luY2x1ZGUvbGludXgvc3lzY3RsLmgKaW5kZXggZmM4ZTM2Ny4uYWIyNzkxYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zeXNjdGwuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N5c2N0bC5oCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KIAogc3RydWN0IGZpbGU7CitzdHJ1Y3QgY29tcGxldGlvbjsKIAogI2RlZmluZSBDVExfTUFYTkFNRSAxMAkJLyogaG93IG1hbnkgcGF0aCBjb21wb25lbnRzIGRvIHdlIGFsbG93IGluIGEKIAkJCQkgICBjYWxsIHRvIHN5c2N0bD8gICBJbiBvdGhlciB3b3Jkcywgd2hhdCBpcwpAQCAtMjA0LDYgKzIwNSw3IEBACiAJTkVUX0VDT05FVD0xNiwKIAlORVRfU0NUUD0xNywKIAlORVRfTExDPTE4LAorCU5FVF9ORVRGSUxURVI9MTksCiB9OwogCiAvKiAvcHJvYy9zeXMva2VybmVsL3JhbmRvbSAqLwpAQCAtMjY5LDYgKzI3MSw0MiBAQAogCU5FVF9VTklYX01BWF9ER1JBTV9RTEVOPTMsCiB9OwogCisvKiAvcHJvYy9zeXMvbmV0L25ldGZpbHRlciAqLworZW51bQoreworCU5FVF9ORl9DT05OVFJBQ0tfTUFYPTEsCisJTkVUX05GX0NPTk5UUkFDS19UQ1BfVElNRU9VVF9TWU5fU0VOVD0yLAorCU5FVF9ORl9DT05OVFJBQ0tfVENQX1RJTUVPVVRfU1lOX1JFQ1Y9MywKKwlORVRfTkZfQ09OTlRSQUNLX1RDUF9USU1FT1VUX0VTVEFCTElTSEVEPTQsCisJTkVUX05GX0NPTk5UUkFDS19UQ1BfVElNRU9VVF9GSU5fV0FJVD01LAorCU5FVF9ORl9DT05OVFJBQ0tfVENQX1RJTUVPVVRfQ0xPU0VfV0FJVD02LAorCU5FVF9ORl9DT05OVFJBQ0tfVENQX1RJTUVPVVRfTEFTVF9BQ0s9NywKKwlORVRfTkZfQ09OTlRSQUNLX1RDUF9USU1FT1VUX1RJTUVfV0FJVD04LAorCU5FVF9ORl9DT05OVFJBQ0tfVENQX1RJTUVPVVRfQ0xPU0U9OSwKKwlORVRfTkZfQ09OTlRSQUNLX1VEUF9USU1FT1VUPTEwLAorCU5FVF9ORl9DT05OVFJBQ0tfVURQX1RJTUVPVVRfU1RSRUFNPTExLAorCU5FVF9ORl9DT05OVFJBQ0tfSUNNUF9USU1FT1VUPTEyLAorCU5FVF9ORl9DT05OVFJBQ0tfR0VORVJJQ19USU1FT1VUPTEzLAorCU5FVF9ORl9DT05OVFJBQ0tfQlVDS0VUUz0xNCwKKwlORVRfTkZfQ09OTlRSQUNLX0xPR19JTlZBTElEPTE1LAorCU5FVF9ORl9DT05OVFJBQ0tfVENQX1RJTUVPVVRfTUFYX1JFVFJBTlM9MTYsCisJTkVUX05GX0NPTk5UUkFDS19UQ1BfTE9PU0U9MTcsCisJTkVUX05GX0NPTk5UUkFDS19UQ1BfQkVfTElCRVJBTD0xOCwKKwlORVRfTkZfQ09OTlRSQUNLX1RDUF9NQVhfUkVUUkFOUz0xOSwKKwlORVRfTkZfQ09OTlRSQUNLX1NDVFBfVElNRU9VVF9DTE9TRUQ9MjAsCisJTkVUX05GX0NPTk5UUkFDS19TQ1RQX1RJTUVPVVRfQ09PS0lFX1dBSVQ9MjEsCisJTkVUX05GX0NPTk5UUkFDS19TQ1RQX1RJTUVPVVRfQ09PS0lFX0VDSE9FRD0yMiwKKwlORVRfTkZfQ09OTlRSQUNLX1NDVFBfVElNRU9VVF9FU1RBQkxJU0hFRD0yMywKKwlORVRfTkZfQ09OTlRSQUNLX1NDVFBfVElNRU9VVF9TSFVURE9XTl9TRU5UPTI0LAorCU5FVF9ORl9DT05OVFJBQ0tfU0NUUF9USU1FT1VUX1NIVVRET1dOX1JFQ0Q9MjUsCisJTkVUX05GX0NPTk5UUkFDS19TQ1RQX1RJTUVPVVRfU0hVVERPV05fQUNLX1NFTlQ9MjYsCisJTkVUX05GX0NPTk5UUkFDS19DT1VOVD0yNywKKwlORVRfTkZfQ09OTlRSQUNLX0lDTVBWNl9USU1FT1VUPTI4LAorCU5FVF9ORl9DT05OVFJBQ0tfRlJBRzZfVElNRU9VVD0yOSwKKwlORVRfTkZfQ09OTlRSQUNLX0ZSQUc2X0xPV19USFJFU0g9MzAsCisJTkVUX05GX0NPTk5UUkFDS19GUkFHNl9ISUdIX1RIUkVTSD0zMSwKK307CisKIC8qIC9wcm9jL3N5cy9uZXQvaXB2NCAqLwogZW51bQogewpAQCAtMzUyLDYgKzM5MCw3IEBACiAJTkVUX1RDUF9CSUNfQkVUQT0xMDgsCiAJTkVUX0lQVjRfSUNNUF9FUlJPUlNfVVNFX0lOQk9VTkRfSUZBRERSPTEwOSwKIAlORVRfVENQX0NPTkdfQ09OVFJPTD0xMTAsCisJTkVUX1RDUF9BQkM9MTExLAogfTsKIAogZW51bSB7CkBAIC05MjUsNiArOTY0LDggQEAKIHsKIAljdGxfdGFibGUgKmN0bF90YWJsZTsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGN0bF9lbnRyeTsKKwlpbnQgdXNlZDsKKwlzdHJ1Y3QgY29tcGxldGlvbiAqdW5yZWdpc3RlcmluZzsKIH07CiAKIHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICogcmVnaXN0ZXJfc3lzY3RsX3RhYmxlKGN0bF90YWJsZSAqIHRhYmxlLCAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGNwLmggYi9pbmNsdWRlL2xpbnV4L3RjcC5oCmluZGV4IGFjNGNhNDQuLjBlMWRhNjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdGNwLmgKKysrIGIvaW5jbHVkZS9saW51eC90Y3AuaApAQCAtMzA3LDYgKzMwNywyMSBAQAogCXN0cnVjdCB0Y3Bfc2Fja19ibG9jayBkdXBsaWNhdGVfc2Fja1sxXTsgLyogRC1TQUNLIGJsb2NrICovCiAJc3RydWN0IHRjcF9zYWNrX2Jsb2NrIHNlbGVjdGl2ZV9hY2tzWzRdOyAvKiBUaGUgU0FDS1MgdGhlbXNlbHZlcyovCiAKKwlzdHJ1Y3QgdGNwX3NhY2tfYmxvY2sgcmVjdl9zYWNrX2NhY2hlWzRdOworCisJLyogZnJvbSBTVENQLCByZXRyYW5zIHF1ZXVlIGhpbnRpbmcgKi8KKwlzdHJ1Y3Qgc2tfYnVmZiogbG9zdF9za2JfaGludDsKKworCXN0cnVjdCBza19idWZmICpzY29yZWJvYXJkX3NrYl9oaW50OworCXN0cnVjdCBza19idWZmICpyZXRyYW5zbWl0X3NrYl9oaW50OworCXN0cnVjdCBza19idWZmICpmb3J3YXJkX3NrYl9oaW50OworCXN0cnVjdCBza19idWZmICpmYXN0cGF0aF9za2JfaGludDsKKworCWludCAgICAgZmFzdHBhdGhfY250X2hpbnQ7CisJaW50ICAgICBsb3N0X2NudF9oaW50OworCWludCAgICAgcmV0cmFuc21pdF9jbnRfaGludDsKKwlpbnQgICAgIGZvcndhcmRfY250X2hpbnQ7CisKIAlfX3UxNglhZHZtc3M7CQkvKiBBZHZlcnRpc2VkIE1TUwkJCSovCiAJX191MTYJcHJpb3Jfc3N0aHJlc2g7IC8qIHNzdGhyZXNoIHNhdmVkIGF0IHJlY292ZXJ5IHN0YXJ0CSovCiAJX191MzIJbG9zdF9vdXQ7CS8qIExvc3QgcGFja2V0cwkJCSovCkBAIC0zMjYsNiArMzQxLDcgQEAKIAlfX3UzMglzbmRfdXA7CQkvKiBVcmdlbnQgcG9pbnRlcgkJKi8KIAogCV9fdTMyCXRvdGFsX3JldHJhbnM7CS8qIFRvdGFsIHJldHJhbnNtaXRzIGZvciBlbnRpcmUgY29ubmVjdGlvbiAqLworCV9fdTMyCWJ5dGVzX2Fja2VkOwkvKiBBcHByb3ByaWF0ZSBCeXRlIENvdW50aW5nIC0gUkZDMzQ2NSAqLwogCiAJdW5zaWduZWQgaW50CQlrZWVwYWxpdmVfdGltZTsJICAvKiB0aW1lIGJlZm9yZSBrZWVwIGFsaXZlIHRha2VzIHBsYWNlICovCiAJdW5zaWduZWQgaW50CQlrZWVwYWxpdmVfaW50dmw7ICAvKiB0aW1lIGludGVydmFsIGJldHdlZW4ga2VlcCBhbGl2ZSBwcm9iZXMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlkZW9kZXYuaCBiL2luY2x1ZGUvbGludXgvdmlkZW9kZXYuaAppbmRleCAxY2M4YzMxLi45MTE0MDA5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2LmgKKysrIGIvaW5jbHVkZS9saW51eC92aWRlb2Rldi5oCkBAIC0xLDU3ICsxLDE2IEBACiAjaWZuZGVmIF9fTElOVVhfVklERU9ERVZfSAogI2RlZmluZSBfX0xJTlVYX1ZJREVPREVWX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAotI2RlZmluZSBIQVZFX1Y0TDIgMQorI2RlZmluZSBIQVZFX1Y0TDEgMQorCiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KIAotc3RydWN0IHZpZGVvX2RldmljZQotewotCS8qIGRldmljZSBpbmZvICovCi0Jc3RydWN0IGRldmljZSAqZGV2OwotCWNoYXIgbmFtZVszMl07Ci0JaW50IHR5cGU7ICAgICAgIC8qIHY0bDEgKi8KLQlpbnQgdHlwZTI7ICAgICAgLyogdjRsMiAqLwotCWludCBoYXJkd2FyZTsKLQlpbnQgbWlub3I7Ci0KLQkvKiBkZXZpY2Ugb3BzICsgY2FsbGJhY2tzICovCi0Jc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZm9wczsKLQl2b2lkICgqcmVsZWFzZSkoc3RydWN0IHZpZGVvX2RldmljZSAqdmZkKTsKLQotCi0JLyogb2Jzb2xldGUgLS0gZm9wcy0+b3duZXIgaXMgdXNlZCBpbnN0ZWFkICovCi0Jc3RydWN0IG1vZHVsZSAqb3duZXI7Ci0JLyogZGV2LT5kcml2ZXJfZGF0YSB3aWxsIGJlIHVzZWQgaW5zdGVhZCBzb21lIGRheS4KLQkgKiBVc2UgdGhlIHZpZGVvX3tnZXR8c2V0fV9kcnZkYXRhKCkgaGVscGVyIGZ1bmN0aW9ucywKLQkgKiBzbyB0aGUgc3dpdGNoIG92ZXIgd2lsbCBiZSB0cmFuc3BhcmVudCBmb3IgeW91LgotCSAqIE9yIHVzZSB7cGNpfHVzYn1fe2dldHxzZXR9X2RydmRhdGEoKSBkaXJlY3RseS4gKi8KLQl2b2lkICpwcml2OwotCi0JLyogZm9yIHZpZGVvZGV2LmMgaW50ZW5hbCB1c2FnZSAtLSBwbGVhc2UgZG9uJ3QgdG91Y2ggKi8KLQlpbnQgdXNlcnM7ICAgICAgICAgICAgICAgICAgICAgLyogdmlkZW9fZXhjbHVzaXZlX3tvcGVufGNsb3NlfSAuLi4gKi8KLQlzdHJ1Y3Qgc2VtYXBob3JlIGxvY2s7ICAgICAgICAgLyogLi4uIGhlbHBlciBmdW5jdGlvbiB1c2VzIHRoZXNlICAgKi8KLQljaGFyIGRldmZzX25hbWVbNjRdOyAgICAgICAgICAgLyogZGV2ZnMgKi8KLQlzdHJ1Y3QgY2xhc3NfZGV2aWNlIGNsYXNzX2RldjsgLyogc3lzZnMgKi8KLX07Ci0KLSNkZWZpbmUgVklERU9fTUFKT1IJODEKLQotI2RlZmluZSBWRkxfVFlQRV9HUkFCQkVSCTAKLSNkZWZpbmUgVkZMX1RZUEVfVkJJCQkxCi0jZGVmaW5lIFZGTF9UWVBFX1JBRElPCQkyCi0jZGVmaW5lIFZGTF9UWVBFX1ZUWAkJMwotCi1leHRlcm4gaW50IHZpZGVvX3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgdmlkZW9fZGV2aWNlICosIGludCB0eXBlLCBpbnQgbnIpOwotZXh0ZXJuIHZvaWQgdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IHZpZGVvX2RldmljZSAqKTsKIGV4dGVybiBzdHJ1Y3QgdmlkZW9fZGV2aWNlKiB2aWRlb19kZXZkYXRhKHN0cnVjdCBmaWxlKik7CiAKICNkZWZpbmUgdG9fdmlkZW9fZGV2aWNlKGNkKSBjb250YWluZXJfb2YoY2QsIHN0cnVjdCB2aWRlb19kZXZpY2UsIGNsYXNzX2RldikKQEAgLTY4LDExICsyNyw3IEBACiAJY2xhc3NfZGV2aWNlX3JlbW92ZV9maWxlKCZ2ZmQtPmNsYXNzX2RldiwgYXR0cik7CiB9CiAKLS8qIGhlbHBlciBmdW5jdGlvbnMgdG8gYWxsb2MgLyByZWxlYXNlIHN0cnVjdCB2aWRlb19kZXZpY2UsIHRoZQotICAgbGF0ZXIgY2FuIGJlIHVzZWQgZm9yIHZpZGVvX2RldmljZS0+cmVsZWFzZSgpICovCi1zdHJ1Y3QgdmlkZW9fZGV2aWNlICp2aWRlb19kZXZpY2VfYWxsb2Modm9pZCk7Ci12b2lkIHZpZGVvX2RldmljZV9yZWxlYXNlKHN0cnVjdCB2aWRlb19kZXZpY2UgKnZmZCk7Ci0KKyNpZiBPQlNPTEVURV9PV05FUiAvKiB0byBiZSByZW1vdmVkIGluIDIuNi4xNSAqLwogLyogaGVscGVyIGZ1bmN0aW9ucyB0byBhY2Nlc3MgZHJpdmVyIHByaXZhdGUgZGF0YS4gKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCAqdmlkZW9fZ2V0X2RydmRhdGEoc3RydWN0IHZpZGVvX2RldmljZSAqZGV2KQogewpAQCAtODMsMzAgKzM4LDEyIEBACiB7CiAJZGV2LT5wcml2ID0gZGF0YTsKIH0KKyNlbmRpZgogCiBleHRlcm4gaW50IHZpZGVvX2V4Y2x1c2l2ZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKIGV4dGVybiBpbnQgdmlkZW9fZXhjbHVzaXZlX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOwotZXh0ZXJuIGludCB2aWRlb191c2VyY29weShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCSAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcsCi0JCQkgIGludCAoKmZ1bmMpKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAotCQkJCSAgICAgIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykpOwogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIAotI2RlZmluZSBWSURfVFlQRV9DQVBUVVJFCTEJLyogQ2FuIGNhcHR1cmUgKi8KLSNkZWZpbmUgVklEX1RZUEVfVFVORVIJCTIJLyogQ2FuIHR1bmUgKi8KLSNkZWZpbmUgVklEX1RZUEVfVEVMRVRFWFQJNAkvKiBEb2VzIHRlbGV0ZXh0ICovCi0jZGVmaW5lIFZJRF9UWVBFX09WRVJMQVkJOAkvKiBPdmVybGF5IG9udG8gZnJhbWUgYnVmZmVyICovCi0jZGVmaW5lIFZJRF9UWVBFX0NIUk9NQUtFWQkxNgkvKiBPdmVybGF5IGJ5IGNocm9tYWtleSAqLwotI2RlZmluZSBWSURfVFlQRV9DTElQUElORwkzMgkvKiBDYW4gY2xpcCAqLwotI2RlZmluZSBWSURfVFlQRV9GUkFNRVJBTQk2NAkvKiBVc2VzIHRoZSBmcmFtZSBidWZmZXIgbWVtb3J5ICovCi0jZGVmaW5lIFZJRF9UWVBFX1NDQUxFUwkJMTI4CS8qIFNjYWxhYmxlICovCi0jZGVmaW5lIFZJRF9UWVBFX01PTk9DSFJPTUUJMjU2CS8qIE1vbm9jaHJvbWUgb25seSAqLwotI2RlZmluZSBWSURfVFlQRV9TVUJDQVBUVVJFCTUxMgkvKiBDYW4gY2FwdHVyZSBzdWJhcmVhcyBvZiB0aGUgaW1hZ2UgKi8KLSNkZWZpbmUgVklEX1RZUEVfTVBFR19ERUNPREVSCTEwMjQJLyogQ2FuIGRlY29kZSBNUEVHIHN0cmVhbXMgKi8KLSNkZWZpbmUgVklEX1RZUEVfTVBFR19FTkNPREVSCTIwNDgJLyogQ2FuIGVuY29kZSBNUEVHIHN0cmVhbXMgKi8KLSNkZWZpbmUgVklEX1RZUEVfTUpQRUdfREVDT0RFUgk0MDk2CS8qIENhbiBkZWNvZGUgTUpQRUcgc3RyZWFtcyAqLwotI2RlZmluZSBWSURfVFlQRV9NSlBFR19FTkNPREVSCTgxOTIJLyogQ2FuIGVuY29kZSBNSlBFRyBzdHJlYW1zICovCi0KIHN0cnVjdCB2aWRlb19jYXBhYmlsaXR5CiB7CiAJY2hhciBuYW1lWzMyXTsKQEAgLTIwMiw5ICsxMzksOSBAQAogI2RlZmluZSBWSURFT19TT1VORF9TVEVSRU8JMgogI2RlZmluZSBWSURFT19TT1VORF9MQU5HMQk0CiAjZGVmaW5lIFZJREVPX1NPVU5EX0xBTkcyCTgKLSAgICAgICAgX191MTYgICBtb2RlOwotICAgICAgICBfX3UxNgliYWxhbmNlOwkvKiBTdGVyZW8gYmFsYW5jZSAqLwotICAgICAgICBfX3UxNglzdGVwOwkJLyogU3RlcCBhY3R1YWwgdm9sdW1lIHVzZXMgKi8KKwlfX3UxNiAgIG1vZGU7CisJX191MTYJYmFsYW5jZTsJLyogU3RlcmVvIGJhbGFuY2UgKi8KKwlfX3UxNglzdGVwOwkJLyogU3RlcCBhY3R1YWwgdm9sdW1lIHVzZXMgKi8KIH07CiAKIHN0cnVjdCB2aWRlb19jbGlwCkBAIC0yNjAsOSArMTk3LDYgQEAKIAlfX3UzMglmbGFnczsKIH07CiAKLQotI2RlZmluZSBWSURFT19NQVhfRlJBTUUJCTMyCi0KIHN0cnVjdCB2aWRlb19tYnVmCiB7CiAJaW50CXNpemU7CQkvKiBUb3RhbCBtZW1vcnkgdG8gbWFwICovCkBAIC0yNzAsMTAgKzIwNCw4IEBACiAJaW50CW9mZnNldHNbVklERU9fTUFYX0ZSQU1FXTsKIH07CiAKLQogI2RlZmluZSAJVklERU9fTk9fVU5JVAkoLTEpCiAKLQogc3RydWN0IHZpZGVvX3VuaXQKIHsKIAlpbnQgCXZpZGVvOwkJLyogVmlkZW8gbWlub3IgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlkZW9kZXYyLmggYi9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2Mi5oCmluZGV4IDg5YTA1NTcuLmExMTRmZmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmlkZW9kZXYyLmgKKysrIGIvaW5jbHVkZS9saW51eC92aWRlb2RldjIuaApAQCAtMTUsMTYgKzE1LDk5IEBACiAgKi8KICNpZmRlZiBfX0tFUk5FTF9fCiAjaW5jbHVkZSA8bGludXgvdGltZS5oPiAvKiBuZWVkIHN0cnVjdCB0aW1ldmFsICovCisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2VuZGlmCiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4gLyogbmVlZCBfX3VzZXIgKi8KIAorCisjZGVmaW5lIE9CU09MRVRFX09XTkVSIDEgLyogSXQgd2lsbCBiZSByZW1vdmVkIGZvciAyLjYuMTUgKi8KKyNkZWZpbmUgSEFWRV9WNEwyIDEKKworLyoKKyAqIENvbW1vbiBzdHVmZiBmb3IgYm90aCBWNEwxIGFuZCBWNEwyCisgKiBNb3ZlZCBmcm9tIHZpZGVvZGV2LmgKKyAqLworCisjZGVmaW5lIFZJREVPX01BWF9GUkFNRSAgICAgICAgICAgICAgIDMyCisKKyNkZWZpbmUgVklEX1RZUEVfQ0FQVFVSRQkxCS8qIENhbiBjYXB0dXJlICovCisjZGVmaW5lIFZJRF9UWVBFX1RVTkVSCQkyCS8qIENhbiB0dW5lICovCisjZGVmaW5lIFZJRF9UWVBFX1RFTEVURVhUCTQJLyogRG9lcyB0ZWxldGV4dCAqLworI2RlZmluZSBWSURfVFlQRV9PVkVSTEFZCTgJLyogT3ZlcmxheSBvbnRvIGZyYW1lIGJ1ZmZlciAqLworI2RlZmluZSBWSURfVFlQRV9DSFJPTUFLRVkJMTYJLyogT3ZlcmxheSBieSBjaHJvbWFrZXkgKi8KKyNkZWZpbmUgVklEX1RZUEVfQ0xJUFBJTkcJMzIJLyogQ2FuIGNsaXAgKi8KKyNkZWZpbmUgVklEX1RZUEVfRlJBTUVSQU0JNjQJLyogVXNlcyB0aGUgZnJhbWUgYnVmZmVyIG1lbW9yeSAqLworI2RlZmluZSBWSURfVFlQRV9TQ0FMRVMJCTEyOAkvKiBTY2FsYWJsZSAqLworI2RlZmluZSBWSURfVFlQRV9NT05PQ0hST01FCTI1NgkvKiBNb25vY2hyb21lIG9ubHkgKi8KKyNkZWZpbmUgVklEX1RZUEVfU1VCQ0FQVFVSRQk1MTIJLyogQ2FuIGNhcHR1cmUgc3ViYXJlYXMgb2YgdGhlIGltYWdlICovCisjZGVmaW5lIFZJRF9UWVBFX01QRUdfREVDT0RFUgkxMDI0CS8qIENhbiBkZWNvZGUgTVBFRyBzdHJlYW1zICovCisjZGVmaW5lIFZJRF9UWVBFX01QRUdfRU5DT0RFUgkyMDQ4CS8qIENhbiBlbmNvZGUgTVBFRyBzdHJlYW1zICovCisjZGVmaW5lIFZJRF9UWVBFX01KUEVHX0RFQ09ERVIJNDA5NgkvKiBDYW4gZGVjb2RlIE1KUEVHIHN0cmVhbXMgKi8KKyNkZWZpbmUgVklEX1RZUEVfTUpQRUdfRU5DT0RFUgk4MTkyCS8qIENhbiBlbmNvZGUgTUpQRUcgc3RyZWFtcyAqLworCisjaWZkZWYgX19LRVJORUxfXworCisjZGVmaW5lIFZGTF9UWVBFX0dSQUJCRVIJMAorI2RlZmluZSBWRkxfVFlQRV9WQkkJCTEKKyNkZWZpbmUgVkZMX1RZUEVfUkFESU8JCTIKKyNkZWZpbmUgVkZMX1RZUEVfVlRYCQkzCisKK3N0cnVjdCB2aWRlb19kZXZpY2UKK3sKKwkvKiBkZXZpY2UgaW5mbyAqLworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwljaGFyIG5hbWVbMzJdOworCWludCB0eXBlOyAgICAgICAvKiB2NGwxICovCisJaW50IHR5cGUyOyAgICAgIC8qIHY0bDIgKi8KKwlpbnQgaGFyZHdhcmU7CisJaW50IG1pbm9yOworCisJLyogZGV2aWNlIG9wcyArIGNhbGxiYWNrcyAqLworCXN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmZvcHM7CisJdm9pZCAoKnJlbGVhc2UpKHN0cnVjdCB2aWRlb19kZXZpY2UgKnZmZCk7CisKKworI2lmIE9CU09MRVRFX09XTkVSIC8qIHRvIGJlIHJlbW92ZWQgaW4gMi42LjE1ICovCisJLyogb2Jzb2xldGUgLS0gZm9wcy0+b3duZXIgaXMgdXNlZCBpbnN0ZWFkICovCisJc3RydWN0IG1vZHVsZSAqb3duZXI7CisJLyogZGV2LT5kcml2ZXJfZGF0YSB3aWxsIGJlIHVzZWQgaW5zdGVhZCBzb21lIGRheS4KKwkgKiBVc2UgdGhlIHZpZGVvX3tnZXR8c2V0fV9kcnZkYXRhKCkgaGVscGVyIGZ1bmN0aW9ucywKKwkgKiBzbyB0aGUgc3dpdGNoIG92ZXIgd2lsbCBiZSB0cmFuc3BhcmVudCBmb3IgeW91LgorCSAqIE9yIHVzZSB7cGNpfHVzYn1fe2dldHxzZXR9X2RydmRhdGEoKSBkaXJlY3RseS4gKi8KKwl2b2lkICpwcml2OworI2VuZGlmCisKKwkvKiBmb3IgdmlkZW9kZXYuYyBpbnRlbmFsIHVzYWdlIC0tIHBsZWFzZSBkb24ndCB0b3VjaCAqLworCWludCB1c2VyczsgICAgICAgICAgICAgICAgICAgICAvKiB2aWRlb19leGNsdXNpdmVfe29wZW58Y2xvc2V9IC4uLiAqLworCXN0cnVjdCBzZW1hcGhvcmUgbG9jazsgICAgICAgICAvKiAuLi4gaGVscGVyIGZ1bmN0aW9uIHVzZXMgdGhlc2UgICAqLworCWNoYXIgZGV2ZnNfbmFtZVs2NF07ICAgICAgICAgICAvKiBkZXZmcyAqLworCXN0cnVjdCBjbGFzc19kZXZpY2UgY2xhc3NfZGV2OyAvKiBzeXNmcyAqLworfTsKKworI2RlZmluZSBWSURFT19NQUpPUgk4MQorCitleHRlcm4gaW50IHZpZGVvX3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgdmlkZW9fZGV2aWNlICosIGludCB0eXBlLCBpbnQgbnIpOworZXh0ZXJuIHZvaWQgdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IHZpZGVvX2RldmljZSAqKTsKK2V4dGVybiBpbnQgdmlkZW9fdXNlcmNvcHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnLAorCQkJICBpbnQgKCpmdW5jKShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpKTsKKworLyogaGVscGVyIGZ1bmN0aW9ucyB0byBhbGxvYyAvIHJlbGVhc2Ugc3RydWN0IHZpZGVvX2RldmljZSwgdGhlCisgICBsYXRlciBjYW4gYmUgdXNlZCBmb3IgdmlkZW9fZGV2aWNlLT5yZWxlYXNlKCkgKi8KK3N0cnVjdCB2aWRlb19kZXZpY2UgKnZpZGVvX2RldmljZV9hbGxvYyh2b2lkKTsKK3ZvaWQgdmlkZW9fZGV2aWNlX3JlbGVhc2Uoc3RydWN0IHZpZGVvX2RldmljZSAqdmZkKTsKKworI2VuZGlmCisKIC8qCiAgKglNIEkgUyBDIEUgTCBMIEEgTiBFIE8gVSBTCiAgKi8KIAogLyogIEZvdXItY2hhcmFjdGVyLWNvZGUgKEZPVVJDQykgKi8KICNkZWZpbmUgdjRsMl9mb3VyY2MoYSxiLGMsZClcCi0gICAgICAgICgoKF9fdTMyKShhKTw8MCl8KChfX3UzMikoYik8PDgpfCgoX191MzIpKGMpPDwxNil8KChfX3UzMikoZCk8PDI0KSkKKwkoKChfX3UzMikoYSk8PDApfCgoX191MzIpKGIpPDw4KXwoKF9fdTMyKShjKTw8MTYpfCgoX191MzIpKGQpPDwyNCkpCiAKIC8qCiAgKglFIE4gVSBNIFMKQEAgLTE1NCwyMCArMjM3LDIwIEBACiB9OwogCiAvKiBWYWx1ZXMgZm9yICdjYXBhYmlsaXRpZXMnIGZpZWxkICovCi0jZGVmaW5lIFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUJICAgICAgICAweDAwMDAwMDAxICAvKiBJcyBhIHZpZGVvIGNhcHR1cmUgZGV2aWNlICovCi0jZGVmaW5lIFY0TDJfQ0FQX1ZJREVPX09VVFBVVAkgICAgICAgIDB4MDAwMDAwMDIgIC8qIElzIGEgdmlkZW8gb3V0cHV0IGRldmljZSAqLwotI2RlZmluZSBWNEwyX0NBUF9WSURFT19PVkVSTEFZCSAgICAgICAgMHgwMDAwMDAwNCAgLyogQ2FuIGRvIHZpZGVvIG92ZXJsYXkgKi8KLSNkZWZpbmUgVjRMMl9DQVBfVkJJX0NBUFRVUkUJICAgICAgICAweDAwMDAwMDEwICAvKiBJcyBhIHJhdyBWQkkgY2FwdHVyZSBkZXZpY2UgKi8KLSNkZWZpbmUgVjRMMl9DQVBfVkJJX09VVFBVVAkgICAgICAgIDB4MDAwMDAwMjAgIC8qIElzIGEgcmF3IFZCSSBvdXRwdXQgZGV2aWNlICovCisjZGVmaW5lIFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUJCTB4MDAwMDAwMDEgIC8qIElzIGEgdmlkZW8gY2FwdHVyZSBkZXZpY2UgKi8KKyNkZWZpbmUgVjRMMl9DQVBfVklERU9fT1VUUFVUCQkweDAwMDAwMDAyICAvKiBJcyBhIHZpZGVvIG91dHB1dCBkZXZpY2UgKi8KKyNkZWZpbmUgVjRMMl9DQVBfVklERU9fT1ZFUkxBWQkJMHgwMDAwMDAwNCAgLyogQ2FuIGRvIHZpZGVvIG92ZXJsYXkgKi8KKyNkZWZpbmUgVjRMMl9DQVBfVkJJX0NBUFRVUkUJCTB4MDAwMDAwMTAgIC8qIElzIGEgcmF3IFZCSSBjYXB0dXJlIGRldmljZSAqLworI2RlZmluZSBWNEwyX0NBUF9WQklfT1VUUFVUCQkweDAwMDAwMDIwICAvKiBJcyBhIHJhdyBWQkkgb3V0cHV0IGRldmljZSAqLwogI2lmIDEKICNkZWZpbmUgVjRMMl9DQVBfU0xJQ0VEX1ZCSV9DQVBUVVJFCTB4MDAwMDAwNDAgIC8qIElzIGEgc2xpY2VkIFZCSSBjYXB0dXJlIGRldmljZSAqLwogI2RlZmluZSBWNEwyX0NBUF9TTElDRURfVkJJX09VVFBVVAkweDAwMDAwMDgwICAvKiBJcyBhIHNsaWNlZCBWQkkgb3V0cHV0IGRldmljZSAqLwogI2VuZGlmCi0jZGVmaW5lIFY0TDJfQ0FQX1JEU19DQVBUVVJFCSAgICAgICAgMHgwMDAwMDEwMCAgLyogUkRTIGRhdGEgY2FwdHVyZSAqLworI2RlZmluZSBWNEwyX0NBUF9SRFNfQ0FQVFVSRQkJMHgwMDAwMDEwMCAgLyogUkRTIGRhdGEgY2FwdHVyZSAqLwogCi0jZGVmaW5lIFY0TDJfQ0FQX1RVTkVSCQkgICAgICAgIDB4MDAwMTAwMDAgIC8qIGhhcyBhIHR1bmVyICovCi0jZGVmaW5lIFY0TDJfQ0FQX0FVRElPCQkgICAgICAgIDB4MDAwMjAwMDAgIC8qIGhhcyBhdWRpbyBzdXBwb3J0ICovCi0jZGVmaW5lIFY0TDJfQ0FQX1JBRElPCQkgICAgICAgIDB4MDAwNDAwMDAgIC8qIGlzIGEgcmFkaW8gZGV2aWNlICovCisjZGVmaW5lIFY0TDJfQ0FQX1RVTkVSCQkJMHgwMDAxMDAwMCAgLyogaGFzIGEgdHVuZXIgKi8KKyNkZWZpbmUgVjRMMl9DQVBfQVVESU8JCQkweDAwMDIwMDAwICAvKiBoYXMgYXVkaW8gc3VwcG9ydCAqLworI2RlZmluZSBWNEwyX0NBUF9SQURJTwkJCTB4MDAwNDAwMDAgIC8qIGlzIGEgcmFkaW8gZGV2aWNlICovCiAKICNkZWZpbmUgVjRMMl9DQVBfUkVBRFdSSVRFICAgICAgICAgICAgICAweDAxMDAwMDAwICAvKiByZWFkL3dyaXRlIHN5c3RlbWNhbGxzICovCiAjZGVmaW5lIFY0TDJfQ0FQX0FTWU5DSU8gICAgICAgICAgICAgICAgMHgwMjAwMDAwMCAgLyogYXN5bmMgSS9PICovCkBAIC0xNzksMTMgKzI2MiwxMyBAQAogCiBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0CiB7Ci0JX191MzIgICAgICAgICAJIAl3aWR0aDsKLQlfX3UzMgkgICAgICAgICAJaGVpZ2h0OwotCV9fdTMyCSAgICAgICAgIAlwaXhlbGZvcm1hdDsKKwlfX3UzMiAgICAgICAgIAkJd2lkdGg7CisJX191MzIJCQloZWlnaHQ7CisJX191MzIJCQlwaXhlbGZvcm1hdDsKIAllbnVtIHY0bDJfZmllbGQgIAlmaWVsZDsKIAlfX3UzMiAgICAgICAgICAgIAlieXRlc3BlcmxpbmU7CS8qIGZvciBwYWRkaW5nLCB6ZXJvIGlmIHVudXNlZCAqLwotCV9fdTMyICAgICAgICAgIAkgCXNpemVpbWFnZTsKLSAgICAgICAgZW51bSB2NGwyX2NvbG9yc3BhY2UJY29sb3JzcGFjZTsKKwlfX3UzMiAgICAgICAgICAJCXNpemVpbWFnZTsKKwllbnVtIHY0bDJfY29sb3JzcGFjZQljb2xvcnNwYWNlOwogCV9fdTMyCQkJcHJpdjsJCS8qIHByaXZhdGUgZGF0YSwgZGVwZW5kcyBvbiBwaXhlbGZvcm1hdCAqLwogfTsKIApAQCAtMjM4LDEyICszMjEsMTIgQEAKICAqLwogc3RydWN0IHY0bDJfZm10ZGVzYwogewotCV9fdTMyCSAgICAgICAgICAgIGluZGV4OyAgICAgICAgICAgICAvKiBGb3JtYXQgbnVtYmVyICAgICAgKi8KKwlfX3UzMgkJICAgIGluZGV4OyAgICAgICAgICAgICAvKiBGb3JtYXQgbnVtYmVyICAgICAgKi8KIAllbnVtIHY0bDJfYnVmX3R5cGUgIHR5cGU7ICAgICAgICAgICAgICAvKiBidWZmZXIgdHlwZSAgICAgICAgKi8KIAlfX3UzMiAgICAgICAgICAgICAgIGZsYWdzOwotCV9fdTgJICAgICAgICAgICAgZGVzY3JpcHRpb25bMzJdOyAgIC8qIERlc2NyaXB0aW9uIHN0cmluZyAqLwotCV9fdTMyCSAgICAgICAgICAgIHBpeGVsZm9ybWF0OyAgICAgICAvKiBGb3JtYXQgZm91cmNjICAgICAgKi8KLQlfX3UzMgkgICAgICAgICAgICByZXNlcnZlZFs0XTsKKwlfX3U4CQkgICAgZGVzY3JpcHRpb25bMzJdOyAgIC8qIERlc2NyaXB0aW9uIHN0cmluZyAqLworCV9fdTMyCQkgICAgcGl4ZWxmb3JtYXQ7ICAgICAgIC8qIEZvcm1hdCBmb3VyY2MgICAgICAqLworCV9fdTMyCQkgICAgcmVzZXJ2ZWRbNF07CiB9OwogCiAjZGVmaW5lIFY0TDJfRk1UX0ZMQUdfQ09NUFJFU1NFRCAweDAwMDEKQEAgLTM5Myw3ICs0NzYsNyBAQAogI2RlZmluZSBWNEwyX0pQRUdfTUFSS0VSX0RSSSAoMTw8NSkgICAgLyogRGVmaW5lIFJlc3RhcnQgSW50ZXJ2YWwgKi8KICNkZWZpbmUgVjRMMl9KUEVHX01BUktFUl9DT00gKDE8PDYpICAgIC8qIENvbW1lbnQgc2VnbWVudCAqLwogI2RlZmluZSBWNEwyX0pQRUdfTUFSS0VSX0FQUCAoMTw8NykgICAgLyogQXBwIHNlZ21lbnQsIGRyaXZlciB3aWxsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBhbGx3YXlzIHVzZSBBUFAwICovCisJCQkJCSogYWxsd2F5cyB1c2UgQVBQMCAqLwogfTsKIAogCkBAIC00MDIsMTAgKzQ4NSwxMCBAQAogICovCiBzdHJ1Y3QgdjRsMl9yZXF1ZXN0YnVmZmVycwogewotCV9fdTMyCSAgICAgICAgICAgICAgICBjb3VudDsKKwlfX3UzMgkJCWNvdW50OwogCWVudW0gdjRsMl9idWZfdHlwZSAgICAgIHR5cGU7CiAJZW51bSB2NGwyX21lbW9yeSAgICAgICAgbWVtb3J5OwotCV9fdTMyCSAgICAgICAgICAgICAgICByZXNlcnZlZFsyXTsKKwlfX3UzMgkJCXJlc2VydmVkWzJdOwogfTsKIAogc3RydWN0IHY0bDJfYnVmZmVyCkBAIC01MTEsOSArNTk0LDkgQEAKIAogc3RydWN0IHY0bDJfY3JvcGNhcCB7CiAJZW51bSB2NGwyX2J1Zl90eXBlICAgICAgdHlwZTsKLSAgICAgICAgc3RydWN0IHY0bDJfcmVjdCAgICAgICAgYm91bmRzOwotICAgICAgICBzdHJ1Y3QgdjRsMl9yZWN0ICAgICAgICBkZWZyZWN0OwotICAgICAgICBzdHJ1Y3QgdjRsMl9mcmFjdCAgICAgICBwaXhlbGFzcGVjdDsKKwlzdHJ1Y3QgdjRsMl9yZWN0ICAgICAgICBib3VuZHM7CisJc3RydWN0IHY0bDJfcmVjdCAgICAgICAgZGVmcmVjdDsKKwlzdHJ1Y3QgdjRsMl9mcmFjdCAgICAgICBwaXhlbGFzcGVjdDsKIH07CiAKIHN0cnVjdCB2NGwyX2Nyb3AgewpAQCAtNTQ0LDYgKzYyNyw3IEBACiAKICNkZWZpbmUgVjRMMl9TVERfTlRTQ19NICAgICAgICAgKCh2NGwyX3N0ZF9pZCkweDAwMDAxMDAwKQogI2RlZmluZSBWNEwyX1NURF9OVFNDX01fSlAgICAgICAoKHY0bDJfc3RkX2lkKTB4MDAwMDIwMDApCisjZGVmaW5lIFY0TDJfU1REX05UU0NfNDQzICAgICAgICgodjRsMl9zdGRfaWQpMHgwMDAwNDAwMCkKIAogI2RlZmluZSBWNEwyX1NURF9TRUNBTV9CICAgICAgICAoKHY0bDJfc3RkX2lkKTB4MDAwMTAwMDApCiAjZGVmaW5lIFY0TDJfU1REX1NFQ0FNX0QgICAgICAgICgodjRsMl9zdGRfaWQpMHgwMDAyMDAwMCkKQEAgLTU4MSwxMyArNjY1LDE0IEBACiAKICNkZWZpbmUgVjRMMl9TVERfNTI1XzYwCQkoVjRMMl9TVERfUEFMX00JCXxcCiAJCQkJIFY0TDJfU1REX1BBTF82MAl8XAotCQkJCSBWNEwyX1NURF9OVFNDKQorCQkJCSBWNEwyX1NURF9OVFNDCQl8XAorCQkJCSBWNEwyX1NURF9OVFNDXzQ0MykKICNkZWZpbmUgVjRMMl9TVERfNjI1XzUwCQkoVjRMMl9TVERfUEFMCQl8XAogCQkJCSBWNEwyX1NURF9QQUxfTgkJfFwKIAkJCQkgVjRMMl9TVERfUEFMX05jCXxcCiAJCQkJIFY0TDJfU1REX1NFQ0FNKQogI2RlZmluZSBWNEwyX1NURF9BVFNDICAgICAgICAgICAoVjRMMl9TVERfQVRTQ184X1ZTQiAgICB8XAotCQkgICAgICAgICAgICAgICAgIFY0TDJfU1REX0FUU0NfMTZfVlNCKQorCQkJCSBWNEwyX1NURF9BVFNDXzE2X1ZTQikKIAogI2RlZmluZSBWNEwyX1NURF9VTktOT1dOICAgICAgICAwCiAjZGVmaW5lIFY0TDJfU1REX0FMTCAgICAgICAgICAgIChWNEwyX1NURF81MjVfNjAJfFwKQEAgLTU5NSw3ICs2ODAsNyBAQAogCiBzdHJ1Y3QgdjRsMl9zdGFuZGFyZAogewotCV9fdTMyCSAgICAgICAJICAgICBpbmRleDsKKwlfX3UzMgkJICAgICBpbmRleDsKIAl2NGwyX3N0ZF9pZCAgICAgICAgICBpZDsKIAlfX3U4CQkgICAgIG5hbWVbMjRdOwogCXN0cnVjdCB2NGwyX2ZyYWN0ICAgIGZyYW1lcGVyaW9kOyAvKiBGcmFtZXMsIG5vdCBmaWVsZHMgKi8KQEAgLTYxMCw5ICs2OTUsOSBAQAogc3RydWN0IHY0bDJfaW5wdXQKIHsKIAlfX3UzMgkgICAgIGluZGV4OwkJLyogIFdoaWNoIGlucHV0ICovCi0JX191OAkgICAgIG5hbWVbMzJdOwkgICAgICAgIC8qICBMYWJlbCAqLworCV9fdTgJICAgICBuYW1lWzMyXTsJCS8qICBMYWJlbCAqLwogCV9fdTMyCSAgICAgdHlwZTsJCS8qICBUeXBlIG9mIGlucHV0ICovCi0JX191MzIJICAgICBhdWRpb3NldDsJICAgICAgICAvKiAgQXNzb2NpYXRlZCBhdWRpb3MgKGJpdGZpZWxkKSAqLworCV9fdTMyCSAgICAgYXVkaW9zZXQ7CQkvKiAgQXNzb2NpYXRlZCBhdWRpb3MgKGJpdGZpZWxkKSAqLwogCV9fdTMyICAgICAgICB0dW5lcjsgICAgICAgICAgICAgLyogIEFzc29jaWF0ZWQgdHVuZXIgKi8KIAl2NGwyX3N0ZF9pZCAgc3RkOwogCV9fdTMyCSAgICAgc3RhdHVzOwpAQCAtNjQ3LDkgKzczMiw5IEBACiBzdHJ1Y3QgdjRsMl9vdXRwdXQKIHsKIAlfX3UzMgkgICAgIGluZGV4OwkJLyogIFdoaWNoIG91dHB1dCAqLwotCV9fdTgJICAgICBuYW1lWzMyXTsJICAgICAgICAvKiAgTGFiZWwgKi8KKwlfX3U4CSAgICAgbmFtZVszMl07CQkvKiAgTGFiZWwgKi8KIAlfX3UzMgkgICAgIHR5cGU7CQkvKiAgVHlwZSBvZiBvdXRwdXQgKi8KLQlfX3UzMgkgICAgIGF1ZGlvc2V0OwkgICAgICAgIC8qICBBc3NvY2lhdGVkIGF1ZGlvcyAoYml0ZmllbGQpICovCisJX191MzIJICAgICBhdWRpb3NldDsJCS8qICBBc3NvY2lhdGVkIGF1ZGlvcyAoYml0ZmllbGQpICovCiAJX191MzIJICAgICBtb2R1bGF0b3I7ICAgICAgICAgLyogIEFzc29jaWF0ZWQgbW9kdWxhdG9yICovCiAJdjRsMl9zdGRfaWQgIHN0ZDsKIAlfX3UzMgkgICAgIHJlc2VydmVkWzRdOwpAQCAtNjcxLDEyICs3NTYsMTIgQEAKIC8qICBVc2VkIGluIHRoZSBWSURJT0NfUVVFUllDVFJMIGlvY3RsIGZvciBxdWVyeWluZyBjb250cm9scyAqLwogc3RydWN0IHY0bDJfcXVlcnljdHJsCiB7Ci0JX191MzIJICAgICAgICAgICAgIGlkOworCV9fdTMyCQkgICAgIGlkOwogCWVudW0gdjRsMl9jdHJsX3R5cGUgIHR5cGU7CiAJX191OAkJICAgICBuYW1lWzMyXTsJLyogV2hhdGV2ZXIgKi8KIAlfX3MzMgkJICAgICBtaW5pbXVtOwkvKiBOb3RlIHNpZ25lZG5lc3MgKi8KIAlfX3MzMgkJICAgICBtYXhpbXVtOwotCV9fczMyCSAgICAgICAgICAgICBzdGVwOworCV9fczMyCQkgICAgIHN0ZXA7CiAJX19zMzIJCSAgICAgZGVmYXVsdF92YWx1ZTsKIAlfX3UzMiAgICAgICAgICAgICAgICBmbGFnczsKIAlfX3UzMgkJICAgICByZXNlcnZlZFsyXTsKQEAgLTc3OSwxMCArODY0LDEwIEBACiAKIHN0cnVjdCB2NGwyX2ZyZXF1ZW5jeQogewotCV9fdTMyCSAgICAgICAgICAgICAgdHVuZXI7CisJX191MzIJCSAgICAgIHR1bmVyOwogCWVudW0gdjRsMl90dW5lcl90eXBlICB0eXBlOwotICAgICAgICBfX3UzMgkgICAgICAgICAgICAgIGZyZXF1ZW5jeTsKLQlfX3UzMgkgICAgICAgICAgICAgIHJlc2VydmVkWzhdOworCV9fdTMyCQkgICAgICBmcmVxdWVuY3k7CisJX191MzIJCSAgICAgIHJlc2VydmVkWzhdOwogfTsKIAogLyoKQEAgLTgwMiw2ICs4ODcsNyBAQAogCiAvKiAgRmxhZ3MgZm9yIHRoZSAnbW9kZScgZmllbGQgKi8KICNkZWZpbmUgVjRMMl9BVURNT0RFX0FWTAkJMHgwMDAwMQorI2RlZmluZSBWNEwyX0FVRE1PREVfMzJCSVRTCQkweDAwMDAyCiAKIHN0cnVjdCB2NGwyX2F1ZGlvb3V0CiB7CkBAIC04NDYsMTQgKzkzMiwxNCBAQAogCiBzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2Zvcm1hdAogewotICAgICAgICBfX3UxNiAgIHNlcnZpY2Vfc2V0OwotICAgICAgICAvKiBzZXJ2aWNlX2xpbmVzWzBdWy4uLl0gc3BlY2lmaWVzIGxpbmVzIDAtMjMgKDEtMjMgdXNlZCkgb2YgdGhlIGZpcnN0IGZpZWxkCi0gICAgICAgICAgIHNlcnZpY2VfbGluZXNbMV1bLi4uXSBzcGVjaWZpZXMgbGluZXMgMC0yMyAoMS0yMyB1c2VkKSBvZiB0aGUgc2Vjb25kIGZpZWxkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXF1YWxzIGZyYW1lIGxpbmVzIDMxMy0zMzYgZm9yIDYyNSBsaW5lIHZpZGVvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhbmRhcmRzLCAyNjMtMjg2IGZvciA1MjUgbGluZSBzdGFuZGFyZHMpICovCi0gICAgICAgIF9fdTE2ICAgc2VydmljZV9saW5lc1syXVsyNF07Ci0gICAgICAgIF9fdTMyICAgaW9fc2l6ZTsKLSAgICAgICAgX191MzIgICByZXNlcnZlZFsyXTsgICAgICAgICAgICAvKiBtdXN0IGJlIHplcm8gKi8KKwlfX3UxNiAgIHNlcnZpY2Vfc2V0OworCS8qIHNlcnZpY2VfbGluZXNbMF1bLi4uXSBzcGVjaWZpZXMgbGluZXMgMC0yMyAoMS0yMyB1c2VkKSBvZiB0aGUgZmlyc3QgZmllbGQKKwkgICBzZXJ2aWNlX2xpbmVzWzFdWy4uLl0gc3BlY2lmaWVzIGxpbmVzIDAtMjMgKDEtMjMgdXNlZCkgb2YgdGhlIHNlY29uZCBmaWVsZAorCQkJCSAoZXF1YWxzIGZyYW1lIGxpbmVzIDMxMy0zMzYgZm9yIDYyNSBsaW5lIHZpZGVvCisJCQkJICBzdGFuZGFyZHMsIDI2My0yODYgZm9yIDUyNSBsaW5lIHN0YW5kYXJkcykgKi8KKwlfX3UxNiAgIHNlcnZpY2VfbGluZXNbMl1bMjRdOworCV9fdTMyICAgaW9fc2l6ZTsKKwlfX3UzMiAgIHJlc2VydmVkWzJdOyAgICAgICAgICAgIC8qIG11c3QgYmUgemVybyAqLwogfTsKIAogI2RlZmluZSBWNEwyX1NMSUNFRF9URUxFVEVYVF9CICAgICAgICAgICgweDAwMDEpCkBAIC04NjYsMjIgKzk1MiwyMiBAQAogCiBzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2NhcAogewotICAgICAgICBfX3UxNiAgIHNlcnZpY2Vfc2V0OwotICAgICAgICAvKiBzZXJ2aWNlX2xpbmVzWzBdWy4uLl0gc3BlY2lmaWVzIGxpbmVzIDAtMjMgKDEtMjMgdXNlZCkgb2YgdGhlIGZpcnN0IGZpZWxkCi0gICAgICAgICAgIHNlcnZpY2VfbGluZXNbMV1bLi4uXSBzcGVjaWZpZXMgbGluZXMgMC0yMyAoMS0yMyB1c2VkKSBvZiB0aGUgc2Vjb25kIGZpZWxkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXF1YWxzIGZyYW1lIGxpbmVzIDMxMy0zMzYgZm9yIDYyNSBsaW5lIHZpZGVvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhbmRhcmRzLCAyNjMtMjg2IGZvciA1MjUgbGluZSBzdGFuZGFyZHMpICovCi0gICAgICAgIF9fdTE2ICAgc2VydmljZV9saW5lc1syXVsyNF07Ci0gICAgICAgIF9fdTMyICAgcmVzZXJ2ZWRbNF07ICAgIC8qIG11c3QgYmUgMCAqLworCV9fdTE2ICAgc2VydmljZV9zZXQ7CisJLyogc2VydmljZV9saW5lc1swXVsuLi5dIHNwZWNpZmllcyBsaW5lcyAwLTIzICgxLTIzIHVzZWQpIG9mIHRoZSBmaXJzdCBmaWVsZAorCSAgIHNlcnZpY2VfbGluZXNbMV1bLi4uXSBzcGVjaWZpZXMgbGluZXMgMC0yMyAoMS0yMyB1c2VkKSBvZiB0aGUgc2Vjb25kIGZpZWxkCisJCQkJIChlcXVhbHMgZnJhbWUgbGluZXMgMzEzLTMzNiBmb3IgNjI1IGxpbmUgdmlkZW8KKwkJCQkgIHN0YW5kYXJkcywgMjYzLTI4NiBmb3IgNTI1IGxpbmUgc3RhbmRhcmRzKSAqLworCV9fdTE2ICAgc2VydmljZV9saW5lc1syXVsyNF07CisJX191MzIgICByZXNlcnZlZFs0XTsgICAgLyogbXVzdCBiZSAwICovCiB9OwogCiBzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2RhdGEKIHsKLSAgICAgICAgX191MzIgICBpZDsKLSAgICAgICAgX191MzIgICBmaWVsZDsgICAgICAgICAgLyogMDogZmlyc3QgZmllbGQsIDE6IHNlY29uZCBmaWVsZCAqLwotICAgICAgICBfX3UzMiAgIGxpbmU7ICAgICAgICAgICAvKiAxLTIzICovCi0gICAgICAgIF9fdTMyICAgcmVzZXJ2ZWQ7ICAgICAgIC8qIG11c3QgYmUgMCAqLwotICAgICAgICBfX3U4ICAgIGRhdGFbNDhdOworCV9fdTMyICAgaWQ7CisJX191MzIgICBmaWVsZDsgICAgICAgICAgLyogMDogZmlyc3QgZmllbGQsIDE6IHNlY29uZCBmaWVsZCAqLworCV9fdTMyICAgbGluZTsgICAgICAgICAgIC8qIDEtMjMgKi8KKwlfX3UzMiAgIHJlc2VydmVkOyAgICAgICAvKiBtdXN0IGJlIDAgKi8KKwlfX3U4ICAgIGRhdGFbNDhdOwogfTsKICNlbmRpZgogCkBAIC04OTYsOSArOTgyLDkgQEAKIAllbnVtIHY0bDJfYnVmX3R5cGUgdHlwZTsKIAl1bmlvbgogCXsKLQkJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdAkgICAgICAgIHBpeDsgICAgIC8vIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRQotCQlzdHJ1Y3QgdjRsMl93aW5kb3cJICAgICAgICB3aW47ICAgICAvLyBWNEwyX0JVRl9UWVBFX1ZJREVPX09WRVJMQVkKLQkJc3RydWN0IHY0bDJfdmJpX2Zvcm1hdAkgICAgICAgIHZiaTsgICAgIC8vIFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkUKKwkJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdAkJcGl4OyAgICAgLy8gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFCisJCXN0cnVjdCB2NGwyX3dpbmRvdwkJd2luOyAgICAgLy8gVjRMMl9CVUZfVFlQRV9WSURFT19PVkVSTEFZCisJCXN0cnVjdCB2NGwyX3ZiaV9mb3JtYXQJCXZiaTsgICAgIC8vIFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkUKICNpZiAxCiAJCXN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZm9ybWF0CXNsaWNlZDsgIC8vIFY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9DQVBUVVJFCiAjZW5kaWYKQEAgLTk4MSw2ICsxMDY3LDcgQEAKICNpZiAxCiAjZGVmaW5lIFZJRElPQ19HX1NMSUNFRF9WQklfQ0FQIF9JT1IgICgnVicsIDY5LCBzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2NhcCkKICNlbmRpZgorI2RlZmluZSBWSURJT0NfTE9HX1NUQVRVUyAgICAgICBfSU8gICAoJ1YnLCA3MCkKIAogLyogZm9yIGNvbXBhdGliaWxpdHksIHdpbGwgZ28gYXdheSBzb21lIGRheSAqLwogI2RlZmluZSBWSURJT0NfT1ZFUkxBWV9PTEQgICAgIAlfSU9XUiAoJ1YnLCAxNCwgaW50KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9hdWRpb2NoaXAuaCBiL2luY2x1ZGUvbWVkaWEvYXVkaW9jaGlwLmgKaW5kZXggYTdjZWVlOS4uYjdkNGIwOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9hdWRpb2NoaXAuaAorKysgYi9pbmNsdWRlL21lZGlhL2F1ZGlvY2hpcC5oCkBAIC00LDYgKzQsMjMgQEAKICNpZm5kZWYgQVVESU9DSElQX0gKICNkZWZpbmUgQVVESU9DSElQX0gKIAorZW51bSBhdWRpb2NoaXAgeworCUFVRElPX0NISVBfTk9ORSwKKwlBVURJT19DSElQX1VOS05PV04sCisJLyogUHJvdmlkZWQgYnkgdmlkZW8gY2hpcCAqLworCUFVRElPX0NISVBfSU5URVJOQUwsCisJLyogUHJvdmlkZWQgYnkgdHZhdWRpby5jICovCisJQVVESU9fQ0hJUF9UREE4NDI1LAorCUFVRElPX0NISVBfVEVBNjMwMCwKKwlBVURJT19DSElQX1RFQTY0MjAsCisJQVVESU9fQ0hJUF9UREE5ODQwLAorCUFVRElPX0NISVBfVERBOTg1WCwKKwlBVURJT19DSElQX1REQTk4NzQsCisJQVVESU9fQ0hJUF9QSUMxNkM1NCwKKwkvKiBQcm92aWRlZCBieSBtc3AzNDAwLmMgKi8KKwlBVURJT19DSElQX01TUDM0WFgKK307CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogLyogdjRsIGRldmljZSB3YXMgb3BlbmVkIGluIFJhZGlvIG1vZGUgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvaWQuaCBiL2luY2x1ZGUvbWVkaWEvaWQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmQwMmM5NC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL21lZGlhL2lkLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0vKgotICovCi0KLS8qIEZJWE1FOiB0aGlzIHRlbXBvcmFyZWx5LCB1bnRpbCB0aGVzZSBhcmUgaW5jbHVkZWQgaW4gbGludXgvaTJjLWlkLmggKi8KLQotLyogZHJpdmVycyAqLwotI2lmbmRlZiAgSTJDX0RSSVZFUklEX1RWTUlYRVIKLSMgZGVmaW5lIEkyQ19EUklWRVJJRF9UVk1JWEVSIEkyQ19EUklWRVJJRF9FWFAwCi0jZW5kaWYKLSNpZm5kZWYgIEkyQ19EUklWRVJJRF9UVkFVRElPCi0jIGRlZmluZSBJMkNfRFJJVkVSSURfVFZBVURJTyBJMkNfRFJJVkVSSURfRVhQMQotI2VuZGlmCi0KLS8qIGNoaXBzICovCi0jaWZuZGVmICBJMkNfRFJJVkVSSURfRFBMMzUxOAotIyBkZWZpbmUgSTJDX0RSSVZFUklEX0RQTDM1MTggSTJDX0RSSVZFUklEX0VYUDIKLSNlbmRpZgotI2lmbmRlZiAgSTJDX0RSSVZFUklEX1REQTk4NzMKLSMgZGVmaW5lIEkyQ19EUklWRVJJRF9UREE5ODczIEkyQ19EUklWRVJJRF9FWFAzCi0jZW5kaWYKLSNpZm5kZWYgIEkyQ19EUklWRVJJRF9UREE5ODc1Ci0jIGRlZmluZSBJMkNfRFJJVkVSSURfVERBOTg3NSBJMkNfRFJJVkVSSURfRVhQMCs0Ci0jZW5kaWYKLSNpZm5kZWYgIEkyQ19EUklWRVJJRF9QSUMxNkM1NF9QVjk1MQotIyBkZWZpbmUgSTJDX0RSSVZFUklEX1BJQzE2QzU0X1BWOTUxIEkyQ19EUklWRVJJRF9FWFAwKzUKLSNlbmRpZgotI2lmbmRlZiAgSTJDX0RSSVZFUklEX1REQTc0MzIKLSMgZGVmaW5lIEkyQ19EUklWRVJJRF9UREE3NDMyIEkyQ19EUklWRVJJRF9FWFAwKzYKLSNlbmRpZgotI2lmbmRlZiAgSTJDX0RSSVZFUklEX1REQTk4NzQKLSMgZGVmaW5lIEkyQ19EUklWRVJJRF9UREE5ODc0IEkyQ19EUklWRVJJRF9FWFAwKzcKLSNlbmRpZgotI2lmbmRlZiAgSTJDX0RSSVZFUklEX1NBQTY3NTJIUwotIyBkZWZpbmUgSTJDX0RSSVZFUklEX1NBQTY3NTJIUyBJMkNfRFJJVkVSSURfRVhQMCs4Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvaXItY29tbW9uLmggYi9pbmNsdWRlL21lZGlhL2lyLWNvbW1vbi5oCmluZGV4IDAxYjU2ODIuLjBmMWJhOTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvaXItY29tbW9uLmgKKysrIGIvaW5jbHVkZS9tZWRpYS9pci1jb21tb24uaApAQCAtMjAsOCArMjAsMTAgQEAKICAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaWZuZGVmIF9JUl9DT01NT04KKyNkZWZpbmUgX0lSX0NPTU1PTgogCisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KIAogI2RlZmluZSBJUl9UWVBFX1JDNSAgICAgMQogI2RlZmluZSBJUl9UWVBFX1BEICAgICAgMiAvKiBQdWxzZSBkaXN0YW5jZSBlbmNvZGVkIElSICovCkBAIC02MSw2ICs2Myw4IEBACiBpbnQgIGlyX2RlY29kZV9iaXBoYXNlKHUzMiAqc2FtcGxlcywgaW50IGNvdW50LCBpbnQgbG93LCBpbnQgaGlnaCk7CiBpbnQgIGlyX2RlY29kZV9wdWxzZWRpc3RhbmNlKHUzMiAqc2FtcGxlcywgaW50IGNvdW50LCBpbnQgbG93LCBpbnQgaGlnaCk7CiAKKyNlbmRpZgorCiAvKgogICogTG9jYWwgdmFyaWFibGVzOgogICogYy1iYXNpYy1vZmZzZXQ6IDgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvaXIta2JkLWkyYy5oIGIvaW5jbHVkZS9tZWRpYS9pci1rYmQtaTJjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBmYTU3ZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbWVkaWEvaXIta2JkLWkyYy5oCkBAIC0wLDAgKzEsMjIgQEAKKyNpZm5kZWYgX0lSX0kyQworI2RlZmluZSBfSVJfSTJDCisKKyNpbmNsdWRlIDxtZWRpYS9pci1jb21tb24uaD4KKworc3RydWN0IElSX2kyYzsKKworc3RydWN0IElSX2kyYyB7CisJSVJfS0VZVEFCX1RZUEUgICAgICAgICAqaXJfY29kZXM7CisJc3RydWN0IGkyY19jbGllbnQgICAgICBjOworCXN0cnVjdCBpbnB1dF9kZXYgICAgICAgKmlucHV0OworCXN0cnVjdCBpcl9pbnB1dF9zdGF0ZSAgaXI7CisKKwkvKiBVc2VkIHRvIGF2b2lkIGZhc3QgcmVwZWF0aW5nICovCisJdW5zaWduZWQgY2hhciAgICAgICAgICBvbGQ7CisKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgICAgIHdvcms7CisJc3RydWN0IHRpbWVyX2xpc3QgICAgICB0aW1lcjsKKwljaGFyICAgICAgICAgICAgICAgICAgIHBoeXNbMzJdOworCWludCAgICAgICAgICAgICAgICAgICAgKCpnZXRfa2V5KShzdHJ1Y3QgSVJfaTJjKiwgdTMyKiwgdTMyKik7Cit9OworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3NhYTcxNDZfdnYuaCBiL2luY2x1ZGUvbWVkaWEvc2FhNzE0Nl92di5oCmluZGV4IGYzYWEyNGYuLjY0NjkxNzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvc2FhNzE0Nl92di5oCisrKyBiL2luY2x1ZGUvbWVkaWEvc2FhNzE0Nl92di5oCkBAIC0xLDcgKzEsNyBAQAogI2lmbmRlZiBfX1NBQTcxNDZfVlZfXwogI2RlZmluZSBfX1NBQTcxNDZfVlZfXwogCi0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KIAogI2luY2x1ZGUgPG1lZGlhL3NhYTcxNDYuaD4KICNpbmNsdWRlIDxtZWRpYS92aWRlby1idWYuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdHVuZXIuaCBiL2luY2x1ZGUvbWVkaWEvdHVuZXIuaAppbmRleCA0YWQwOGUyLi45MTg0ZTUzIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3R1bmVyLmgKKysrIGIvaW5jbHVkZS9tZWRpYS90dW5lci5oCkBAIC05NSw3ICs5NSw3IEBACiAjZGVmaW5lIFRVTkVSX1RIT01TT05fRFRUNzYxMAkJNTIKICNkZWZpbmUgVFVORVJfUEhJTElQU19GUTEyODYJCTUzCiAjZGVmaW5lIFRVTkVSX1BISUxJUFNfVERBODI5MAkJNTQKLSNkZWZpbmUgVFVORVJfTEdfUEFMX1RBUEUJCTU1CS8qIEhhdXBwYXVnZSBQVlItMTUwIFBBTCAqLworI2RlZmluZSBUVU5FUl9UQ0xfMjAwMk1CCQk1NQkvKiBIYXVwcGF1Z2UgUFZSLTE1MCBQQUwgKi8KIAogI2RlZmluZSBUVU5FUl9QSElMSVBTX0ZRMTIxNkFNRV9NSzQJNTYJLyogSGF1cHBhdWdlIFBWUi0xNTAgUEFMICovCiAjZGVmaW5lIFRVTkVSX1BISUxJUFNfRlExMjM2QV9NSzQJNTcJLyogSGF1cHBhdWdlIFBWUi01MDBNQ0UgTlRTQyAqLwpAQCAtMTEwLDYgKzExMCw5IEBACiAjZGVmaW5lIFRVTkVSX0xHX1REVlNfSDA2MkYJCTY0CS8qIERWaUNPIEZ1c2lvbkhEVFYgNSAqLwogI2RlZmluZSBUVU5FUl9ZTUVDX1RWRjY2VDVfQl9ERkYJNjUJLyogQWNvcnAgWTg3OEYgKi8KICNkZWZpbmUgVFVORVJfTEdfTlRTQ19UQUxOX01JTkkJCTY2CisjZGVmaW5lIFRVTkVSX1BISUxJUFNfVEQxMzE2CQk2NworCisjZGVmaW5lIFRVTkVSX1BISUxJUFNfVFVWMTIzNkQJCTY4CS8qIEFUSSBIRFRWIFdvbmRlciAqLwogCiAjZGVmaW5lIE5PVFVORVIgMAogI2RlZmluZSBQQUwgICAgIDEJLyogUEFMX0JHICovCkBAIC0xNDUsNiArMTQ4LDcgQEAKICMgZGVmaW5lIFREQTk4ODdfSU5URVJDQVJSSUVSICAgICAgICAoMTw8NCkKICMgZGVmaW5lIFREQTk4ODdfUE9SVDFfQUNUSVZFICAgICAgICAoMTw8NSkKICMgZGVmaW5lIFREQTk4ODdfUE9SVDJfQUNUSVZFICAgICAgICAoMTw8NikKKyMgZGVmaW5lIFREQTk4ODdfSU5URVJDQVJSSUVSX05UU0MgICAoMTw8NykKIC8qIGNvbmZpZyBvcHRpb25zICovCiAjIGRlZmluZSBUREE5ODg3X0RFRU1QSEFTSVNfTUFTSyAgICAgKDM8PDE2KQogIyBkZWZpbmUgVERBOTg4N19ERUVNUEhBU0lTX05PTkUgICAgICgxPDwxNikKQEAgLTE4OCw4ICsxOTIsMTEgQEAKIAl1bnNpZ25lZCBpbnQgcmFkaW9faWYyOwogCiAJLyogdXNlZCBieSB0ZGE4MjkwICovCi0JdW5zaWduZWQgY2hhciBpMmNfZWFzeV9tb2RlWzJdOwotCXVuc2lnbmVkIGNoYXIgaTJjX3NldF9mcmVxWzhdOworCXVuc2lnbmVkIGNoYXIgdGRhODI5MF9lYXN5X21vZGU7CisJdW5zaWduZWQgY2hhciB0ZGE4Mjd4X2xwc2VsOworCXVuc2lnbmVkIGNoYXIgdGRhODI3eF9hZGRyOworCXVuc2lnbmVkIGNoYXIgdGRhODI3eF92ZXI7CisJdW5zaWduZWQgaW50IHNnSUY7CiAKIAkvKiBmdW5jdGlvbiBwdHJzICovCiAJdm9pZCAoKnR2X2ZyZXEpKHN0cnVjdCBpMmNfY2xpZW50ICpjLCB1bnNpZ25lZCBpbnQgZnJlcSk7CkBAIC0yMDQsMjAgKzIxMSwyMSBAQAogCiBleHRlcm4gaW50IG1pY3JvdHVuZV9pbml0KHN0cnVjdCBpMmNfY2xpZW50ICpjKTsKIGV4dGVybiBpbnQgdGRhODI5MF9pbml0KHN0cnVjdCBpMmNfY2xpZW50ICpjKTsKK2V4dGVybiBpbnQgdGRhODI5MF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqYyk7CiBleHRlcm4gaW50IHRlYTU3NjdfdHVuZXJfaW5pdChzdHJ1Y3QgaTJjX2NsaWVudCAqYyk7CiBleHRlcm4gaW50IGRlZmF1bHRfdHVuZXJfaW5pdChzdHJ1Y3QgaTJjX2NsaWVudCAqYyk7CiBleHRlcm4gaW50IHRlYTU3NjdfYXV0b2RldGVjdGlvbihzdHJ1Y3QgaTJjX2NsaWVudCAqYyk7CiAKICNkZWZpbmUgdHVuZXJfd2FybihmbXQsIGFyZy4uLikgZG8ge1wKIAlwcmludGsoS0VSTl9XQVJOSU5HICIlcyAlZC0lMDR4OiAiIGZtdCwgdC0+aTJjLmRyaXZlci0+bmFtZSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgdC0+aTJjLmFkYXB0ZXItPm5yLCB0LT5pMmMuYWRkciAsICMjYXJnKTsgfSB3aGlsZSAoMCkKKwkJCXQtPmkyYy5hZGFwdGVyLT5uciwgdC0+aTJjLmFkZHIgLCAjI2FyZyk7IH0gd2hpbGUgKDApCiAjZGVmaW5lIHR1bmVyX2luZm8oZm10LCBhcmcuLi4pIGRvIHtcCiAJcHJpbnRrKEtFUk5fSU5GTyAiJXMgJWQtJTA0eDogIiBmbXQsIHQtPmkyYy5kcml2ZXItPm5hbWUsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIHQtPmkyYy5hZGFwdGVyLT5uciwgdC0+aTJjLmFkZHIgLCAjI2FyZyk7IH0gd2hpbGUgKDApCisJCQl0LT5pMmMuYWRhcHRlci0+bnIsIHQtPmkyYy5hZGRyICwgIyNhcmcpOyB9IHdoaWxlICgwKQogI2RlZmluZSB0dW5lcl9kYmcoZm10LCBhcmcuLi4pIGRvIHtcCiAJaWYgKHR1bmVyX2RlYnVnKSBcCi0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fREVCVUcgIiVzICVkLSUwNHg6ICIgZm10LCB0LT5pMmMuZHJpdmVyLT5uYW1lLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICB0LT5pMmMuYWRhcHRlci0+bnIsIHQtPmkyYy5hZGRyICwgIyNhcmcpOyB9IHdoaWxlICgwKQorCQlwcmludGsoS0VSTl9ERUJVRyAiJXMgJWQtJTA0eDogIiBmbXQsIHQtPmkyYy5kcml2ZXItPm5hbWUsIFwKKwkJCXQtPmkyYy5hZGFwdGVyLT5uciwgdC0+aTJjLmFkZHIgLCAjI2FyZyk7IH0gd2hpbGUgKDApCiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdmlkZW8tYnVmLmggYi9pbmNsdWRlL21lZGlhL3ZpZGVvLWJ1Zi5oCmluZGV4IGFlOGQ3YTAuLjhlY2ZkNzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvdmlkZW8tYnVmLmgKKysrIGIvaW5jbHVkZS9tZWRpYS92aWRlby1idWYuaApAQCAtMTcsNyArMTcsNyBAQAogICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KIAogI2RlZmluZSBVTlNFVCAoLTFVKQogCkBAIC0xNzcsNyArMTc3LDcgQEAKIH07CiAKIHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSB7Ci0gICAgICAgIHN0cnVjdCBzZW1hcGhvcmUgICAgICAgICAgIGxvY2s7CisJc3RydWN0IHNlbWFwaG9yZSAgICAgICAgICAgbG9jazsKIAlzcGlubG9ja190ICAgICAgICAgICAgICAgICAqaXJxbG9jazsKIAlzdHJ1Y3QgcGNpX2RldiAgICAgICAgICAgICAqcGNpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvYmx1ZXRvb3RoLmggYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvYmx1ZXRvb3RoLmgKaW5kZXggZTQyZDcyOC4uOTExY2ViNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2JsdWV0b290aC5oCisrKyBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9ibHVldG9vdGguaApAQCAtNTcsOCArNTcsNiBAQAogI2RlZmluZSBCVF9EQkcoZm10LCBhcmcuLi4pICBwcmludGsoS0VSTl9JTkZPICIlczogIiBmbXQgIlxuIiAsIF9fRlVOQ1RJT05fXyAsICMjIGFyZykKICNkZWZpbmUgQlRfRVJSKGZtdCwgYXJnLi4uKSAgcHJpbnRrKEtFUk5fRVJSICAiJXM6ICIgZm10ICJcbiIgLCBfX0ZVTkNUSU9OX18gLCAjIyBhcmcpCiAKLWV4dGVybiBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2NfYnQ7Ci0KIC8qIENvbm5lY3Rpb24gYW5kIHNvY2tldCBzdGF0ZXMgKi8KIGVudW0gewogCUJUX0NPTk5FQ1RFRCA9IDEsIC8qIEVxdWFsIHRvIFRDUF9FU1RBQkxJU0hFRCB0byBtYWtlIG5ldCBjb2RlIGhhcHB5ICovCkBAIC0xNzcsNCArMTc1LDYgQEAKIGV4dGVybiBpbnQgYnRfc3lzZnNfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIGJ0X3N5c2ZzX2NsZWFudXAodm9pZCk7CiAKK2V4dGVybiBzdHJ1Y3QgY2xhc3MgYnRfY2xhc3M7CisKICNlbmRpZiAvKiBfX0JMVUVUT09USF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpLmggYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpLmgKaW5kZXggZmEyZDEyYi4uYjA2YTJkMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaS5oCisrKyBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2kuaApAQCAtMTg0LDEwICsxODQsMTAgQEAKIHN0cnVjdCBoY2lfcnBfcmVhZF9sb2NfdmVyc2lvbiB7CiAJX191OCAgICAgc3RhdHVzOwogCV9fdTggICAgIGhjaV92ZXI7Ci0JX191MTYgICAgaGNpX3JldjsKKwlfX2xlMTYgICBoY2lfcmV2OwogCV9fdTggICAgIGxtcF92ZXI7Ci0JX191MTYgICAgbWFudWZhY3R1cmVyOwotCV9fdTE2ICAgIGxtcF9zdWJ2ZXI7CisJX19sZTE2ICAgbWFudWZhY3R1cmVyOworCV9fbGUxNiAgIGxtcF9zdWJ2ZXI7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogI2RlZmluZSBPQ0ZfUkVBRF9MT0NBTF9GRUFUVVJFUwkweDAwMDMKQEAgLTE5OSwxMCArMTk5LDEwIEBACiAjZGVmaW5lIE9DRl9SRUFEX0JVRkZFUl9TSVpFCTB4MDAwNQogc3RydWN0IGhjaV9ycF9yZWFkX2J1ZmZlcl9zaXplIHsKIAlfX3U4ICAgICBzdGF0dXM7Ci0JX191MTYgICAgYWNsX210dTsKKwlfX2xlMTYgICBhY2xfbXR1OwogCV9fdTggICAgIHNjb19tdHU7Ci0JX191MTYgICAgYWNsX21heF9wa3Q7Ci0JX191MTYgICAgc2NvX21heF9wa3Q7CisJX19sZTE2ICAgYWNsX21heF9wa3Q7CisJX19sZTE2ICAgc2NvX21heF9wa3Q7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogI2RlZmluZSBPQ0ZfUkVBRF9CRF9BRERSCTB4MDAwOQpAQCAtMjY3LDIxICsyNjcsMjEgQEAKIAogI2RlZmluZSBPQ0ZfUkVBRF9WT0lDRV9TRVRUSU5HCTB4MDAyNQogc3RydWN0IGhjaV9ycF9yZWFkX3ZvaWNlX3NldHRpbmcgewotCV9fdTgJc3RhdHVzOwotCV9fdTE2CXZvaWNlX3NldHRpbmc7CisJX191OCAgICAgc3RhdHVzOworCV9fbGUxNiAgIHZvaWNlX3NldHRpbmc7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogI2RlZmluZSBPQ0ZfV1JJVEVfVk9JQ0VfU0VUVElORwkweDAwMjYKIHN0cnVjdCBoY2lfY3Bfd3JpdGVfdm9pY2Vfc2V0dGluZyB7Ci0JX191MTYJdm9pY2Vfc2V0dGluZzsKKwlfX2xlMTYgICB2b2ljZV9zZXR0aW5nOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKICNkZWZpbmUgT0NGX0hPU1RfQlVGRkVSX1NJWkUJMHgwMDMzCiBzdHJ1Y3QgaGNpX2NwX2hvc3RfYnVmZmVyX3NpemUgewotCV9fdTE2ICAgIGFjbF9tdHU7CisJX19sZTE2ICAgYWNsX210dTsKIAlfX3U4ICAgICBzY29fbXR1OwotCV9fdTE2ICAgIGFjbF9tYXhfcGt0OwotCV9fdTE2ICAgIHNjb19tYXhfcGt0OworCV9fbGUxNiAgIGFjbF9tYXhfcGt0OworCV9fbGUxNiAgIHNjb19tYXhfcGt0OwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIC8qIExpbmsgQ29udHJvbCAqLwpAQCAtMjg5LDEwICsyODksMTAgQEAKICNkZWZpbmUgT0NGX0NSRUFURV9DT05OCQkweDAwMDUKIHN0cnVjdCBoY2lfY3BfY3JlYXRlX2Nvbm4gewogCWJkYWRkcl90IGJkYWRkcjsKLQlfX3UxNiAgICBwa3RfdHlwZTsKKwlfX2xlMTYgICBwa3RfdHlwZTsKIAlfX3U4ICAgICBwc2Nhbl9yZXBfbW9kZTsKIAlfX3U4ICAgICBwc2Nhbl9tb2RlOwotCV9fdTE2ICAgIGNsb2NrX29mZnNldDsKKwlfX2xlMTYgICBjbG9ja19vZmZzZXQ7CiAJX191OCAgICAgcm9sZV9zd2l0Y2g7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIApAQCAtMzEwLDE0ICszMTAsMTQgQEAKIAogI2RlZmluZSBPQ0ZfRElTQ09OTkVDVAkweDAwMDYKIHN0cnVjdCBoY2lfY3BfZGlzY29ubmVjdCB7Ci0JX191MTYgICAgaGFuZGxlOworCV9fbGUxNiAgIGhhbmRsZTsKIAlfX3U4ICAgICByZWFzb247CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogI2RlZmluZSBPQ0ZfQUREX1NDTwkweDAwMDcKIHN0cnVjdCBoY2lfY3BfYWRkX3NjbyB7Ci0JX191MTYgICAgaGFuZGxlOwotCV9fdTE2ICAgIHBrdF90eXBlOworCV9fbGUxNiAgIGhhbmRsZTsKKwlfX2xlMTYgICBwa3RfdHlwZTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAjZGVmaW5lIE9DRl9JTlFVSVJZCQkweDAwMDEKQEAgLTM1NCw1NiArMzU0LDU2IEBACiAKICNkZWZpbmUgT0NGX0NIQU5HRV9DT05OX1BUWVBFCTB4MDAwRgogc3RydWN0IGhjaV9jcF9jaGFuZ2VfY29ubl9wdHlwZSB7Ci0JX191MTYgICAgaGFuZGxlOwotCV9fdTE2ICAgIHBrdF90eXBlOworCV9fbGUxNiAgIGhhbmRsZTsKKwlfX2xlMTYgICBwa3RfdHlwZTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAjZGVmaW5lIE9DRl9BVVRIX1JFUVVFU1RFRAkweDAwMTEKIHN0cnVjdCBoY2lfY3BfYXV0aF9yZXF1ZXN0ZWQgewotCV9fdTE2ICAgIGhhbmRsZTsKKwlfX2xlMTYgICBoYW5kbGU7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogI2RlZmluZSBPQ0ZfU0VUX0NPTk5fRU5DUllQVAkweDAwMTMKIHN0cnVjdCBoY2lfY3Bfc2V0X2Nvbm5fZW5jcnlwdCB7Ci0JX191MTYgICAgaGFuZGxlOworCV9fbGUxNiAgIGhhbmRsZTsKIAlfX3U4ICAgICBlbmNyeXB0OwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKICNkZWZpbmUgT0NGX0NIQU5HRV9DT05OX0xJTktfS0VZIDB4MDAxNQogc3RydWN0IGhjaV9jcF9jaGFuZ2VfY29ubl9saW5rX2tleSB7Ci0JX191MTYgICAgaGFuZGxlOworCV9fbGUxNiAgIGhhbmRsZTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAjZGVmaW5lIE9DRl9SRUFEX1JFTU9URV9GRUFUVVJFUyAweDAwMUIKIHN0cnVjdCBoY2lfY3BfcmVhZF9ybXRfZmVhdHVyZXMgewotCV9fdTE2ICAgIGhhbmRsZTsKKwlfX2xlMTYgICBoYW5kbGU7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogI2RlZmluZSBPQ0ZfUkVBRF9SRU1PVEVfVkVSU0lPTiAweDAwMUQKIHN0cnVjdCBoY2lfY3BfcmVhZF9ybXRfdmVyc2lvbiB7Ci0JX191MTYgICAgaGFuZGxlOworCV9fbGUxNiAgIGhhbmRsZTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKiBMaW5rIFBvbGljeSAqLwogI2RlZmluZSBPR0ZfTElOS19QT0xJQ1kJIDB4MDIgICAKICNkZWZpbmUgT0NGX1JPTEVfRElTQ09WRVJZCTB4MDAwOQogc3RydWN0IGhjaV9jcF9yb2xlX2Rpc2NvdmVyeSB7Ci0JX191MTYgICAgaGFuZGxlOworCV9fbGUxNiAgIGhhbmRsZTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogc3RydWN0IGhjaV9ycF9yb2xlX2Rpc2NvdmVyeSB7CiAJX191OCAgICAgc3RhdHVzOwotCV9fdTE2ICAgIGhhbmRsZTsKKwlfX2xlMTYgICBoYW5kbGU7CiAJX191OCAgICAgcm9sZTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAjZGVmaW5lIE9DRl9SRUFEX0xJTktfUE9MSUNZCTB4MDAwQwogc3RydWN0IGhjaV9jcF9yZWFkX2xpbmtfcG9saWN5IHsKLQlfX3UxNiAgICBoYW5kbGU7CisJX19sZTE2ICAgaGFuZGxlOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiBzdHJ1Y3QgaGNpX3JwX3JlYWRfbGlua19wb2xpY3kgewogCV9fdTggICAgIHN0YXR1czsKLQlfX3UxNiAgICBoYW5kbGU7Ci0JX191MTYgICAgcG9saWN5OworCV9fbGUxNiAgIGhhbmRsZTsKKwlfX2xlMTYgICBwb2xpY3k7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogI2RlZmluZSBPQ0ZfU1dJVENIX1JPTEUJMHgwMDBCCkBAIC00MTQsMTIgKzQxNCwxMiBAQAogCiAjZGVmaW5lIE9DRl9XUklURV9MSU5LX1BPTElDWQkweDAwMEQKIHN0cnVjdCBoY2lfY3Bfd3JpdGVfbGlua19wb2xpY3kgewotCV9fdTE2ICAgIGhhbmRsZTsKLQlfX3UxNiAgICBwb2xpY3k7CisJX19sZTE2ICAgaGFuZGxlOworCV9fbGUxNiAgIHBvbGljeTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogc3RydWN0IGhjaV9ycF93cml0ZV9saW5rX3BvbGljeSB7CiAJX191OCAgICAgc3RhdHVzOwotCV9fdTE2ICAgIGhhbmRsZTsKKwlfX2xlMTYgICBoYW5kbGU7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogLyogU3RhdHVzIHBhcmFtcyAqLwpAQCAtNDQxLDcgKzQ0MSw3IEBACiAJX191OCAgICAgcHNjYW5fcGVyaW9kX21vZGU7CiAJX191OCAgICAgcHNjYW5fbW9kZTsKIAlfX3U4ICAgICBkZXZfY2xhc3NbM107Ci0JX191MTYgICAgY2xvY2tfb2Zmc2V0OworCV9fbGUxNiAgIGNsb2NrX29mZnNldDsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAjZGVmaW5lIEhDSV9FVl9JTlFVSVJZX1JFU1VMVF9XSVRIX1JTU0kJMHgyMgpAQCAtNDUwLDcgKzQ1MCw3IEBACiAJX191OCAgICAgcHNjYW5fcmVwX21vZGU7CiAJX191OCAgICAgcHNjYW5fcGVyaW9kX21vZGU7CiAJX191OCAgICAgZGV2X2NsYXNzWzNdOwotCV9fdTE2ICAgIGNsb2NrX29mZnNldDsKKwlfX2xlMTYgICBjbG9ja19vZmZzZXQ7CiAJX19zOCAgICAgcnNzaTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogc3RydWN0IGlucXVpcnlfaW5mb193aXRoX3Jzc2lfYW5kX3BzY2FuX21vZGUgewpAQCAtNDU5LDcgKzQ1OSw3IEBACiAJX191OCAgICAgcHNjYW5fcGVyaW9kX21vZGU7CiAJX191OCAgICAgcHNjYW5fbW9kZTsKIAlfX3U4ICAgICBkZXZfY2xhc3NbM107Ci0JX191MTYgICAgY2xvY2tfb2Zmc2V0OworCV9fbGUxNiAgIGNsb2NrX29mZnNldDsKIAlfX3M4ICAgICByc3NpOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKQEAgLTQ2OSw3ICs0NjksNyBAQAogCV9fdTggICAgIHBzY2FuX3JlcF9tb2RlOwogCV9fdTggICAgIHBzY2FuX3BlcmlvZF9tb2RlOwogCV9fdTggICAgIGRldl9jbGFzc1szXTsKLQlfX3UxNiAgICBjbG9ja19vZmZzZXQ7CisJX19sZTE2ICAgY2xvY2tfb2Zmc2V0OwogCV9fczggICAgIHJzc2k7CiAJX191OCAgICAgZGF0YVsyNDBdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CkBAIC00NzcsNyArNDc3LDcgQEAKICNkZWZpbmUgSENJX0VWX0NPTk5fQ09NUExFVEUgCTB4MDMKIHN0cnVjdCBoY2lfZXZfY29ubl9jb21wbGV0ZSB7CiAJX191OCAgICAgc3RhdHVzOwotCV9fdTE2ICAgIGhhbmRsZTsKKwlfX2xlMTYgICBoYW5kbGU7CiAJYmRhZGRyX3QgYmRhZGRyOwogCV9fdTggICAgIGxpbmtfdHlwZTsKIAlfX3U4ICAgICBlbmNyX21vZGU7CkBAIC00OTMsMjcgKzQ5MywyNyBAQAogI2RlZmluZSBIQ0lfRVZfRElTQ09OTl9DT01QTEVURQkweDA1CiBzdHJ1Y3QgaGNpX2V2X2Rpc2Nvbm5fY29tcGxldGUgewogCV9fdTggICAgIHN0YXR1czsKLQlfX3UxNiAgICBoYW5kbGU7CisJX19sZTE2ICAgaGFuZGxlOwogCV9fdTggICAgIHJlYXNvbjsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAjZGVmaW5lIEhDSV9FVl9BVVRIX0NPTVBMRVRFCTB4MDYKIHN0cnVjdCBoY2lfZXZfYXV0aF9jb21wbGV0ZSB7CiAJX191OCAgICAgc3RhdHVzOwotCV9fdTE2ICAgIGhhbmRsZTsKKwlfX2xlMTYgICBoYW5kbGU7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogI2RlZmluZSBIQ0lfRVZfRU5DUllQVF9DSEFOR0UJMHgwOAogc3RydWN0IGhjaV9ldl9lbmNyeXB0X2NoYW5nZSB7CiAJX191OCAgICAgc3RhdHVzOwotCV9fdTE2ICAgIGhhbmRsZTsKKwlfX2xlMTYgICBoYW5kbGU7CiAJX191OCAgICAgZW5jcnlwdDsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAjZGVmaW5lIEhDSV9FVl9DSEFOR0VfQ09OTl9MSU5LX0tFWV9DT01QTEVURQkweDA5CiBzdHJ1Y3QgaGNpX2V2X2NoYW5nZV9jb25uX2xpbmtfa2V5X2NvbXBsZXRlIHsKIAlfX3U4ICAgICBzdGF0dXM7Ci0JX191MTYgICAgaGFuZGxlOworCV9fbGUxNiAgIGhhbmRsZTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAjZGVmaW5lIEhDSV9FVl9RT1NfU0VUVVBfQ09NUExFVEUJMHgwRApAQCAtNTI2LDIxICs1MjYsMjEgQEAKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogc3RydWN0IGhjaV9ldl9xb3Nfc2V0dXBfY29tcGxldGUgewogCV9fdTggICAgIHN0YXR1czsKLQlfX3UxNiAgICBoYW5kbGU7CisJX19sZTE2ICAgaGFuZGxlOwogCXN0cnVjdCAgIGhjaV9xb3MgcW9zOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKICNkZWZpbmUgSENJX0VWX0NNRF9DT01QTEVURSAJMHgwRQogc3RydWN0IGhjaV9ldl9jbWRfY29tcGxldGUgewogCV9fdTggICAgIG5jbWQ7Ci0JX191MTYgICAgb3Bjb2RlOworCV9fbGUxNiAgIG9wY29kZTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAjZGVmaW5lIEhDSV9FVl9DTURfU1RBVFVTIAkweDBGCiBzdHJ1Y3QgaGNpX2V2X2NtZF9zdGF0dXMgewogCV9fdTggICAgIHN0YXR1czsKIAlfX3U4ICAgICBuY21kOwotCV9fdTE2ICAgIG9wY29kZTsKKwlfX2xlMTYgICBvcGNvZGU7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogI2RlZmluZSBIQ0lfRVZfTlVNX0NPTVBfUEtUUwkweDEzCkBAIC01NTksOSArNTU5LDkgQEAKICNkZWZpbmUgSENJX0VWX01PREVfQ0hBTkdFCTB4MTQKIHN0cnVjdCBoY2lfZXZfbW9kZV9jaGFuZ2UgewogCV9fdTggICAgIHN0YXR1czsKLQlfX3UxNiAgICBoYW5kbGU7CisJX19sZTE2ICAgaGFuZGxlOwogCV9fdTggICAgIG1vZGU7Ci0JX191MTYgICAgaW50ZXJ2YWw7CisJX19sZTE2ICAgaW50ZXJ2YWw7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogI2RlZmluZSBIQ0lfRVZfUElOX0NPREVfUkVRCTB4MTYKQEAgLTU4NCwyNCArNTg0LDI0IEBACiAjZGVmaW5lIEhDSV9FVl9STVRfRkVBVFVSRVMJMHgwQgogc3RydWN0IGhjaV9ldl9ybXRfZmVhdHVyZXMgewogCV9fdTggICAgIHN0YXR1czsKLQlfX3UxNiAgICBoYW5kbGU7CisJX19sZTE2ICAgaGFuZGxlOwogCV9fdTggICAgIGZlYXR1cmVzWzhdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKICNkZWZpbmUgSENJX0VWX1JNVF9WRVJTSU9OCTB4MEMKIHN0cnVjdCBoY2lfZXZfcm10X3ZlcnNpb24gewogCV9fdTggICAgIHN0YXR1czsKLQlfX3UxNiAgICBoYW5kbGU7CisJX19sZTE2ICAgaGFuZGxlOwogCV9fdTggICAgIGxtcF92ZXI7Ci0JX191MTYgICAgbWFudWZhY3R1cmVyOwotCV9fdTE2ICAgIGxtcF9zdWJ2ZXI7CisJX19sZTE2ICAgbWFudWZhY3R1cmVyOworCV9fbGUxNiAgIGxtcF9zdWJ2ZXI7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogI2RlZmluZSBIQ0lfRVZfQ0xPQ0tfT0ZGU0VUCTB4MDFDCiBzdHJ1Y3QgaGNpX2V2X2Nsb2NrX29mZnNldCB7CiAJX191OCAgICAgc3RhdHVzOwotCV9fdTE2ICAgIGhhbmRsZTsKLQlfX3UxNiAgICBjbG9ja19vZmZzZXQ7CisJX19sZTE2ICAgaGFuZGxlOworCV9fbGUxNiAgIGNsb2NrX29mZnNldDsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAjZGVmaW5lIEhDSV9FVl9QU0NBTl9SRVBfTU9ERQkweDIwCkBAIC02MzgsNyArNjM4LDcgQEAKICNkZWZpbmUgSENJX1NDT19IRFJfU0laRSAgICAgMwogCiBzdHJ1Y3QgaGNpX2NvbW1hbmRfaGRyIHsKLQlfX3UxNiAJb3Bjb2RlOwkJLyogT0NGICYgT0dGICovCisJX19sZTE2IAlvcGNvZGU7CQkvKiBPQ0YgJiBPR0YgKi8KIAlfX3U4IAlwbGVuOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKQEAgLTY0OCwyMiArNjQ4LDIyIEBACiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogc3RydWN0IGhjaV9hY2xfaGRyIHsKLQlfX3UxNiAJaGFuZGxlOwkJLyogSGFuZGxlICYgRmxhZ3MoUEIsIEJDKSAqLwotCV9fdTE2IAlkbGVuOworCV9fbGUxNiAJaGFuZGxlOwkJLyogSGFuZGxlICYgRmxhZ3MoUEIsIEJDKSAqLworCV9fbGUxNiAJZGxlbjsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiBzdHJ1Y3QgaGNpX3Njb19oZHIgewotCV9fdTE2IAloYW5kbGU7CisJX19sZTE2IAloYW5kbGU7CiAJX191OCAJZGxlbjsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKiBDb21tYW5kIG9wY29kZSBwYWNrL3VucGFjayAqLwotI2RlZmluZSBoY2lfb3Bjb2RlX3BhY2sob2dmLCBvY2YpCShfX3UxNikoKG9jZiAmIDB4MDNmZil8KG9nZiA8PCAxMCkpCisjZGVmaW5lIGhjaV9vcGNvZGVfcGFjayhvZ2YsIG9jZikJKF9fdTE2KSAoKG9jZiAmIDB4MDNmZil8KG9nZiA8PCAxMCkpCiAjZGVmaW5lIGhjaV9vcGNvZGVfb2dmKG9wKQkJKG9wID4+IDEwKQogI2RlZmluZSBoY2lfb3Bjb2RlX29jZihvcCkJCShvcCAmIDB4MDNmZikKIAogLyogQUNMIGhhbmRsZSBhbmQgZmxhZ3MgcGFjay91bnBhY2sgKi8KLSNkZWZpbmUgaGNpX2hhbmRsZV9wYWNrKGgsIGYpCShfX3UxNikoKGggJiAweDBmZmYpfChmIDw8IDEyKSkKKyNkZWZpbmUgaGNpX2hhbmRsZV9wYWNrKGgsIGYpCShfX3UxNikgKChoICYgMHgwZmZmKXwoZiA8PCAxMikpCiAjZGVmaW5lIGhjaV9oYW5kbGUoaCkJCShoICYgMHgwZmZmKQogI2RlZmluZSBoY2lfZmxhZ3MoaCkJCShoID4+IDEyKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaCBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oCmluZGV4IDdmOTMzZjMuLmJiOWY4MWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oCisrKyBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oCkBAIC0yNSw3ICsyNSw2IEBACiAjaWZuZGVmIF9fSENJX0NPUkVfSAogI2RlZmluZSBfX0hDSV9DT1JFX0gKIAotI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxuZXQvYmx1ZXRvb3RoL2hjaS5oPgogCiAvKiBIQ0kgdXBwZXIgcHJvdG9jb2xzICovCkBAIC0zNCw4ICszMyw2IEBACiAKICNkZWZpbmUgSENJX0lOSVRfVElNRU9VVCAoSFogKiAxMCkKIAotZXh0ZXJuIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY19idF9oY2k7Ci0KIC8qIEhDSSBDb3JlIHN0cnVjdHVyZXMgKi8KIAogc3RydWN0IGlucXVpcnlfZGF0YSB7CkBAIC00NCw3ICs0MSw3IEBACiAJX191OAkJcHNjYW5fcGVyaW9kX21vZGU7CiAJX191OAkJcHNjYW5fbW9kZTsKIAlfX3U4CQlkZXZfY2xhc3NbM107Ci0JX191MTYJCWNsb2NrX29mZnNldDsKKwlfX2xlMTYJCWNsb2NrX29mZnNldDsKIAlfX3M4CQlyc3NpOwogfTsKIApAQCAtMTI2LDEwICsxMjMsNiBAQAogCiAJYXRvbWljX3QgCQlwcm9taXNjOwogCi0jaWZkZWYgQ09ORklHX1BST0NfRlMKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkJKnByb2M7Ci0jZW5kaWYKLQogCXN0cnVjdCBjbGFzc19kZXZpY2UJY2xhc3NfZGV2OwogCiAJc3RydWN0IG1vZHVsZSAJCSpvd25lcjsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9yZmNvbW0uaCBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9yZmNvbW0uaAppbmRleCBlNjU2YmU3Li5iYmZhYzg2IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvcmZjb21tLmgKKysrIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL3JmY29tbS5oCkBAIC0zNTEsNiArMzUxLDQgQEAKIGludCAgcmZjb21tX2luaXRfdHR5cyh2b2lkKTsKIHZvaWQgcmZjb21tX2NsZWFudXBfdHR5cyh2b2lkKTsKIAotZXh0ZXJuIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY19idF9yZmNvbW07Ci0KICNlbmRpZiAvKiBfX1JGQ09NTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9nZW5ldGxpbmsuaCBiL2luY2x1ZGUvbmV0L2dlbmV0bGluay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyZDhiMWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC9nZW5ldGxpbmsuaApAQCAtMCwwICsxLDE1NCBAQAorI2lmbmRlZiBfX05FVF9HRU5FUklDX05FVExJTktfSAorI2RlZmluZSBfX05FVF9HRU5FUklDX05FVExJTktfSAorCisjaW5jbHVkZSA8bGludXgvZ2VuZXRsaW5rLmg+CisjaW5jbHVkZSA8bmV0L25ldGxpbmsuaD4KKworLyoqCisgKiBzdHJ1Y3QgZ2VubF9mYW1pbHkgLSBnZW5lcmljIG5ldGxpbmsgZmFtaWx5CisgKiBAaWQ6IHByb3RvY29sIGZhbWlseSBpZGVuZml0aWVyCisgKiBAaGRyc2l6ZTogbGVuZ3RoIG9mIHVzZXIgc3BlY2lmaWMgaGVhZGVyIGluIGJ5dGVzCisgKiBAbmFtZTogbmFtZSBvZiBmYW1pbHkKKyAqIEB2ZXJzaW9uOiBwcm90b2NvbCB2ZXJzaW9uCisgKiBAbWF4YXR0cjogbWF4aW11bSBudW1iZXIgb2YgYXR0cmlidXRlcyBzdXBwb3J0ZWQKKyAqIEBhdHRyYnVmOiBidWZmZXIgdG8gc3RvcmUgcGFyc2VkIGF0dHJpYnV0ZXMKKyAqIEBvcHNfbGlzdDogbGlzdCBvZiBhbGwgYXNzaWduZWQgb3BlcmF0aW9ucworICogQGZhbWlseV9saXN0OiBmYW1pbHkgbGlzdAorICovCitzdHJ1Y3QgZ2VubF9mYW1pbHkKK3sKKwl1bnNpZ25lZCBpbnQJCWlkOworCXVuc2lnbmVkIGludAkJaGRyc2l6ZTsKKwljaGFyCQkJbmFtZVtHRU5MX05BTVNJWl07CisJdW5zaWduZWQgaW50CQl2ZXJzaW9uOworCXVuc2lnbmVkIGludAkJbWF4YXR0cjsKKwlzdHJ1Y3QgbW9kdWxlICoJCW93bmVyOworCXN0cnVjdCBubGF0dHIgKioJYXR0cmJ1ZjsJLyogcHJpdmF0ZSAqLworCXN0cnVjdCBsaXN0X2hlYWQJb3BzX2xpc3Q7CS8qIHByaXZhdGUgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCWZhbWlseV9saXN0OwkvKiBwcml2YXRlICovCit9OworCisjZGVmaW5lIEdFTkxfQURNSU5fUEVSTQkJMHgwMQorCisvKioKKyAqIHN0cnVjdCBnZW5sX2luZm8gLSByZWNlaXZpbmcgaW5mb3JtYXRpb24KKyAqIEBzbmRfc2VxOiBzZW5kaW5nIHNlcXVlbmNlIG51bWJlcgorICogQHNuZF9waWQ6IG5ldGxpbmsgcGlkIG9mIHNlbmRlcgorICogQG5saGRyOiBuZXRsaW5rIG1lc3NhZ2UgaGVhZGVyCisgKiBAZ2VubGhkcjogZ2VuZXJpYyBuZXRsaW5rIG1lc3NhZ2UgaGVhZGVyCisgKiBAdXNlcmhkcjogdXNlciBzcGVjaWZpYyBoZWFkZXIKKyAqIEBhdHRyczogbmV0bGluayBhdHRyaWJ1dGVzCisgKi8KK3N0cnVjdCBnZW5sX2luZm8KK3sKKwl1MzIJCQlzbmRfc2VxOworCXUzMgkJCXNuZF9waWQ7CisJc3RydWN0IG5sbXNnaGRyICoJbmxoZHI7CisJc3RydWN0IGdlbmxtc2doZHIgKglnZW5saGRyOworCXZvaWQgKgkJCXVzZXJoZHI7CisJc3RydWN0IG5sYXR0ciAqKglhdHRyczsKK307CisKKy8qKgorICogc3RydWN0IGdlbmxfb3BzIC0gZ2VuZXJpYyBuZXRsaW5rIG9wZXJhdGlvbnMKKyAqIEBjbWQ6IGNvbW1hbmQgaWRlbnRpZmllcgorICogQGZsYWdzOiBmbGFncworICogQHBvbGljeTogYXR0cmlidXRlIHZhbGlkYXRpb24gcG9saWN5CisgKiBAZG9pdDogc3RhbmRhcmQgY29tbWFuZCBjYWxsYmFjaworICogQGR1bXBpdDogY2FsbGJhY2sgZm9yIGR1bXBlcnMKKyAqIEBvcHNfbGlzdDogb3BlcmF0aW9ucyBsaXN0CisgKi8KK3N0cnVjdCBnZW5sX29wcworeworCXVuc2lnbmVkIGludAkJY21kOworCXVuc2lnbmVkIGludAkJZmxhZ3M7CisJc3RydWN0IG5sYV9wb2xpY3kJKnBvbGljeTsKKwlpbnQJCSAgICAgICAoKmRvaXQpKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICAgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pOworCWludAkJICAgICAgICgqZHVtcGl0KShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKTsKKwlzdHJ1Y3QgbGlzdF9oZWFkCW9wc19saXN0OworfTsKKworZXh0ZXJuIGludCBnZW5sX3JlZ2lzdGVyX2ZhbWlseShzdHJ1Y3QgZ2VubF9mYW1pbHkgKmZhbWlseSk7CitleHRlcm4gaW50IGdlbmxfdW5yZWdpc3Rlcl9mYW1pbHkoc3RydWN0IGdlbmxfZmFtaWx5ICpmYW1pbHkpOworZXh0ZXJuIGludCBnZW5sX3JlZ2lzdGVyX29wcyhzdHJ1Y3QgZ2VubF9mYW1pbHkgKiwgc3RydWN0IGdlbmxfb3BzICpvcHMpOworZXh0ZXJuIGludCBnZW5sX3VucmVnaXN0ZXJfb3BzKHN0cnVjdCBnZW5sX2ZhbWlseSAqLCBzdHJ1Y3QgZ2VubF9vcHMgKm9wcyk7CisKK2V4dGVybiBzdHJ1Y3Qgc29jayAqZ2VubF9zb2NrOworCisvKioKKyAqIGdlbmxtc2dfcHV0IC0gQWRkIGdlbmVyaWMgbmV0bGluayBoZWFkZXIgdG8gbmV0bGluayBtZXNzYWdlCisgKiBAc2tiOiBzb2NrZXQgYnVmZmVyIGhvbGRpbmcgdGhlIG1lc3NhZ2UKKyAqIEBwaWQ6IG5ldGxpbmsgcGlkIHRoZSBtZXNzYWdlIGlzIGFkZHJlc3NlZCB0bworICogQHNlcTogc2VxdWVuY2UgbnVtYmVyICh1c3VhbGx5IHRoZSBvbmUgb2YgdGhlIHNlbmRlcikKKyAqIEB0eXBlOiBuZXRsaW5rIG1lc3NhZ2UgdHlwZQorICogQGhkcmxlbjogbGVuZ3RoIG9mIHRoZSB1c2VyIHNwZWNpZmljIGhlYWRlcgorICogQGZsYWdzIG5ldGxpbmsgbWVzc2FnZSBmbGFncworICogQGNtZDogZ2VuZXJpYyBuZXRsaW5rIGNvbW1hbmQKKyAqIEB2ZXJzaW9uOiB2ZXJzaW9uCisgKgorICogUmV0dXJucyBwb2ludGVyIHRvIHVzZXIgc3BlY2lmaWMgaGVhZGVyCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCAqZ2VubG1zZ19wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSwKKwkJCQlpbnQgdHlwZSwgaW50IGhkcmxlbiwgaW50IGZsYWdzLAorCQkJCXU4IGNtZCwgdTggdmVyc2lvbikKK3sKKwlzdHJ1Y3Qgbmxtc2doZHIgKm5saDsKKwlzdHJ1Y3QgZ2VubG1zZ2hkciAqaGRyOworCisJbmxoID0gbmxtc2dfcHV0KHNrYiwgcGlkLCBzZXEsIHR5cGUsIEdFTkxfSERSTEVOICsgaGRybGVuLCBmbGFncyk7CisJaWYgKG5saCA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCWhkciA9IG5sbXNnX2RhdGEobmxoKTsKKwloZHItPmNtZCA9IGNtZDsKKwloZHItPnZlcnNpb24gPSB2ZXJzaW9uOworCWhkci0+cmVzZXJ2ZWQgPSAwOworCisJcmV0dXJuIChjaGFyICopIGhkciArIEdFTkxfSERSTEVOOworfQorCisvKioKKyAqIGdlbmxtc2dfZW5kIC0gRmluYWxpemUgYSBnZW5lcmljIG5ldGxpbmsgbWVzc2FnZQorICogQHNrYjogc29ja2V0IGJ1ZmZlciB0aGUgbWVzc2FnZSBpcyBzdG9yZWQgaW4KKyAqIEBoZHI6IHVzZXIgc3BlY2lmaWMgaGVhZGVyCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGdlbmxtc2dfZW5kKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmhkcikKK3sKKwlyZXR1cm4gbmxtc2dfZW5kKHNrYiwgaGRyIC0gR0VOTF9IRFJMRU4gLSBOTE1TR19IRFJMRU4pOworfQorCisvKioKKyAqIGdlbmxtc2dfY2FuY2VsIC0gQ2FuY2VsIGNvbnN0cnVjdGlvbiBvZiBhIGdlbmVyaWMgbmV0bGluayBtZXNzYWdlCisgKiBAc2tiOiBzb2NrZXQgYnVmZmVyIHRoZSBtZXNzYWdlIGlzIHN0b3JlZCBpbgorICogQGhkcjogZ2VuZXJpYyBuZXRsaW5rIG1lc3NhZ2UgaGVhZGVyCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGdlbmxtc2dfY2FuY2VsKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmhkcikKK3sKKwlyZXR1cm4gbmxtc2dfY2FuY2VsKHNrYiwgaGRyIC0gR0VOTF9IRFJMRU4gLSBOTE1TR19IRFJMRU4pOworfQorCisvKioKKyAqIGdlbmxtc2dfbXVsdGljYXN0IC0gbXVsdGljYXN0IGEgbmV0bGluayBtZXNzYWdlCisgKiBAc2tiOiBuZXRsaW5rIG1lc3NhZ2UgYXMgc29ja2V0IGJ1ZmZlcgorICogQHBpZDogb3duIG5ldGxpbmsgcGlkIHRvIGF2b2lkIHNlbmRpbmcgdG8geW91cnNlbGYKKyAqIEBncm91cDogbXVsdGljYXN0IGdyb3VwIGlkCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGdlbmxtc2dfbXVsdGljYXN0KHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsCisJCQkJICAgIHVuc2lnbmVkIGludCBncm91cCkKK3sKKwlyZXR1cm4gbmxtc2dfbXVsdGljYXN0KGdlbmxfc29jaywgc2tiLCBwaWQsIGdyb3VwKTsKK30KKworLyoqCisgKiBnZW5sbXNnX3VuaWNhc3QgLSB1bmljYXN0IGEgbmV0bGluayBtZXNzYWdlCisgKiBAc2tiOiBuZXRsaW5rIG1lc3NhZ2UgYXMgc29ja2V0IGJ1ZmZlcgorICogQHBpZDogbmV0bGluayBwaWQgb2YgdGhlIGRlc3RpbmF0aW9uIHNvY2tldAorICovCitzdGF0aWMgaW5saW5lIGludCBnZW5sbXNnX3VuaWNhc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCkKK3sKKwlyZXR1cm4gbmxtc2dfdW5pY2FzdChnZW5sX3NvY2ssIHNrYiwgcGlkKTsKK30KKworI2VuZGlmCS8qIF9fTkVUX0dFTkVSSUNfTkVUTElOS19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pZWVlODAyMTEuaCBiL2luY2x1ZGUvbmV0L2llZWU4MDIxMS5oCmluZGV4IDVlMzhkY2EuLmI5M2ZkOGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2llZWU4MDIxMS5oCisrKyBiL2luY2x1ZGUvbmV0L2llZWU4MDIxMS5oCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CS8qIEFSUkFZX1NJWkUgKi8KICNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgogCi0jZGVmaW5lIElFRUU4MDIxMV9WRVJTSU9OICJnaXQtMS4xLjYiCisjZGVmaW5lIElFRUU4MDIxMV9WRVJTSU9OICJnaXQtMS4xLjciCiAKICNkZWZpbmUgSUVFRTgwMjExX0RBVEFfTEVOCQkyMzA0CiAvKiBNYXhpbXVtIHNpemUgZm9yIHRoZSBNQS1VTklUREFUQSBwcmltaXRpdmUsIDgwMi4xMSBzdGFuZGFyZCBzZWN0aW9uCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pZWVlODAyMTFfY3J5cHQuaCBiL2luY2x1ZGUvbmV0L2llZWU4MDIxMV9jcnlwdC5oCmluZGV4IDBhMWMyZDguLjIyNWZjNzUxIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pZWVlODAyMTFfY3J5cHQuaAorKysgYi9pbmNsdWRlL25ldC9pZWVlODAyMTFfY3J5cHQuaApAQCAtMzEsNiArMzEsNyBAQAogCiBzdHJ1Y3QgaWVlZTgwMjExX2NyeXB0b19vcHMgewogCWNvbnN0IGNoYXIgKm5hbWU7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCiAJLyogaW5pdCBuZXcgY3J5cHRvIGNvbnRleHQgKGUuZy4sIGFsbG9jYXRlIHByaXZhdGUgZGF0YSBzcGFjZSwKIAkgKiBzZWxlY3QgSVYsIGV0Yy4pOyByZXR1cm5zIE5VTEwgb24gZmFpbHVyZSBvciBwb2ludGVyIHRvIGFsbG9jYXRlZApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXB2Ni5oIGIvaW5jbHVkZS9uZXQvaXB2Ni5oCmluZGV4IDY1ZWM4NjYuLjZhZGRiNGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwdjYuaAorKysgYi9pbmNsdWRlL25ldC9pcHY2LmgKQEAgLTI1MiwxMiArMjUyLDI1IEBACiAJCQkJCSAgIGNoYXIgKiwKIAkJCQkJICAgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOwogCi0KLWV4dGVybiBpbnQJCWlwdjZfYWRkcl90eXBlKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcik7CitleHRlcm4gaW50IF9faXB2Nl9hZGRyX3R5cGUoY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKTsKK3N0YXRpYyBpbmxpbmUgaW50IGlwdjZfYWRkcl90eXBlKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcikKK3sKKwlyZXR1cm4gX19pcHY2X2FkZHJfdHlwZShhZGRyKSAmIDB4ZmZmZjsKK30KIAogc3RhdGljIGlubGluZSBpbnQgaXB2Nl9hZGRyX3Njb3BlKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcikKIHsKLQlyZXR1cm4gaXB2Nl9hZGRyX3R5cGUoYWRkcikgJiBJUFY2X0FERFJfU0NPUEVfTUFTSzsKKwlyZXR1cm4gX19pcHY2X2FkZHJfdHlwZShhZGRyKSAmIElQVjZfQUREUl9TQ09QRV9NQVNLOworfQorCitzdGF0aWMgaW5saW5lIGludCBfX2lwdjZfYWRkcl9zcmNfc2NvcGUoaW50IHR5cGUpCit7CisJcmV0dXJuICh0eXBlID09IElQVjZfQUREUl9BTlkgPyBfX0lQVjZfQUREUl9TQ09QRV9JTlZBTElEIDogKHR5cGUgPj4gMTYpKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgaXB2Nl9hZGRyX3NyY19zY29wZShjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpCit7CisJcmV0dXJuIF9faXB2Nl9hZGRyX3NyY19zY29wZShfX2lwdjZfYWRkcl90eXBlKGFkZHIpKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgaXB2Nl9hZGRyX2NtcChjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmExLCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmEyKQpAQCAtMzQxLDYgKzM1NCw1NCBAQAogfQogCiAvKgorICogZmluZCB0aGUgZmlyc3QgZGlmZmVyZW50IGJpdCBiZXR3ZWVuIHR3byBhZGRyZXNzZXMKKyAqIGxlbmd0aCBvZiBhZGRyZXNzIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMmJpdHMKKyAqLworc3RhdGljIGlubGluZSBpbnQgX19pcHY2X2FkZHJfZGlmZihjb25zdCB2b2lkICp0b2tlbjEsIGNvbnN0IHZvaWQgKnRva2VuMiwgaW50IGFkZHJsZW4pCit7CisJY29uc3QgX191MzIgKmExID0gdG9rZW4xLCAqYTIgPSB0b2tlbjI7CisJaW50IGk7CisKKwlhZGRybGVuID4+PSAyOworCisJZm9yIChpID0gMDsgaSA8IGFkZHJsZW47IGkrKykgeworCQlfX3UzMiB4YiA9IGExW2ldIF4gYTJbaV07CisJCWlmICh4YikgeworCQkJaW50IGogPSAzMTsKKworCQkJeGIgPSBudG9obCh4Yik7CisJCQl3aGlsZSAoKHhiICYgKDEgPDwgaikpID09IDApCisJCQkJai0tOworCisJCQlyZXR1cm4gKGkgKiAzMiArIDMxIC0gaik7CisJCX0KKwl9CisKKwkvKgorCSAqCXdlIHNob3VsZCAqbmV2ZXIqIGdldCB0byB0aGlzIHBvaW50IHNpbmNlIHRoYXQgCisJICoJd291bGQgbWVhbiB0aGUgYWRkcnMgYXJlIGVxdWFsCisJICoKKwkgKglIb3dldmVyLCB3ZSBkbyBnZXQgdG8gaXQgOCkgQW5kIGV4YWNseSwgd2hlbgorCSAqCWFkZHJlc3NlcyBhcmUgZXF1YWwgOCkKKwkgKgorCSAqCWlwIHJvdXRlIGFkZCAxMTExOjovMTI4IHZpYSAuLi4KKwkgKglpcCByb3V0ZSBhZGQgMTExMTo6LzY0IHZpYSAuLi4KKwkgKglhbmQgd2UgYXJlIGhlcmUuCisJICoKKwkgKglJZGVhbGx5LCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBzdG9wIGNvbXBhcmlzb24KKwkgKglhdCBwcmVmaXggbGVuZ3RoLiBJdCBkb2VzIG5vdCwgYnV0IGl0IGlzIHN0aWxsIE9LLAorCSAqCWlmIHJldHVybmVkIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBwcmVmaXggbGVuZ3RoLgorCSAqCQkJCQktLUFOSyAoOTgwODAzKQorCSAqLworCXJldHVybiAoYWRkcmxlbiA8PCA1KTsKK30KKworc3RhdGljIGlubGluZSBpbnQgaXB2Nl9hZGRyX2RpZmYoY29uc3Qgc3RydWN0IGluNl9hZGRyICphMSwgY29uc3Qgc3RydWN0IGluNl9hZGRyICphMikKK3sKKwlyZXR1cm4gX19pcHY2X2FkZHJfZGlmZihhMSwgYTIsIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKTsKK30KKworLyoKICAqCVByb3RvdHlwZXMgZXhwb3J0ZWQgYnkgaXB2NgogICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9pcHY0L25mX2Nvbm50cmFja19pY21wLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvaXB2NC9uZl9jb25udHJhY2tfaWNtcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkZDIyY2YKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvaXB2NC9uZl9jb25udHJhY2tfaWNtcC5oCkBAIC0wLDAgKzEsMTEgQEAKKyNpZm5kZWYgX05GX0NPTk5UUkFDS19JQ01QX0gKKyNkZWZpbmUgX05GX0NPTk5UUkFDS19JQ01QX0gKKy8qIElDTVAgdHJhY2tpbmcuICovCisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorCitzdHJ1Y3QgaXBfY3RfaWNtcAoreworCS8qIE9wdGltaXphdGlvbjogd2hlbiBudW1iZXIgaW4gPT0gbnVtYmVyIG91dCwgZm9yZ2V0IGltbWVkaWF0ZWx5LiAqLworCWF0b21pY190IGNvdW50OworfTsKKyNlbmRpZiAvKiBfTkZfQ09OTlRSQUNLX0lDTVBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL2lwdjQvbmZfY29ubnRyYWNrX2lwdjQuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9pcHY0L25mX2Nvbm50cmFja19pcHY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjViMDgxYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9pcHY0L25mX2Nvbm50cmFja19pcHY0LmgKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIElQdjQgc3VwcG9ydCBmb3IgbmZfY29ubnRyYWNrLgorICoKKyAqIDIzIE1hciAyMDA0OiBZYXN1eXVraSBLb3pha2FpIEAgVVNBR0kgPHlhc3V5dWtpLmtvemFrYWlAdG9zaGliYS5jby5qcD4KKyAqCS0gbW92ZSBMMyBwcm90b2NvbCBkZXBlbmRlbnQgcGFydCBmcm9tIGluY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvCisgKgkgIGlwX2Nvbm50YXJjay5oCisgKi8KKworI2lmbmRlZiBfTkZfQ09OTlRSQUNLX0lQVjRfSAorI2RlZmluZSBfTkZfQ09OTlRSQUNLX0lQVjRfSAorCisjaWZkZWYgQ09ORklHX0lQX05GX05BVF9ORUVERUQKKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9uYXQuaD4KKworLyogcGVyIGNvbm50cmFjazogbmF0IGFwcGxpY2F0aW9uIGhlbHBlciBwcml2YXRlIGRhdGEgKi8KK3VuaW9uIGlwX2Nvbm50cmFja19uYXRfaGVscCB7CisgICAgICAgIC8qIGluc2VydCBuYXQgaGVscGVyIHByaXZhdGUgZGF0YSBoZXJlICovCit9OworCitzdHJ1Y3QgbmZfY29ubnRyYWNrX2lwdjRfbmF0IHsKKwlzdHJ1Y3QgaXBfbmF0X2luZm8gaW5mbzsKKwl1bmlvbiBpcF9jb25udHJhY2tfbmF0X2hlbHAgaGVscDsKKyNpZiBkZWZpbmVkKENPTkZJR19JUF9ORl9UQVJHRVRfTUFTUVVFUkFERSkgfHwgXAorCWRlZmluZWQoQ09ORklHX0lQX05GX1RBUkdFVF9NQVNRVUVSQURFX01PRFVMRSkKKwlpbnQgbWFzcV9pbmRleDsKKyNlbmRpZgorfTsKKyNlbmRpZiAvKiBDT05GSUdfSVBfTkZfTkFUX05FRURFRCAqLworCitzdHJ1Y3QgbmZfY29ubnRyYWNrX2lwdjQgeworI2lmZGVmIENPTkZJR19JUF9ORl9OQVRfTkVFREVECisJc3RydWN0IG5mX2Nvbm50cmFja19pcHY0X25hdCAqbmF0OworI2VuZGlmCit9OworCisvKiBSZXR1cm5zIG5ldyBza19idWZmLCBvciBOVUxMICovCitzdHJ1Y3Qgc2tfYnVmZiAqCituZl9jdF9pcHY0X2N0X2dhdGhlcl9mcmFncyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKworLyogY2FsbCB0byBjcmVhdGUgYW4gZXhwbGljaXQgZGVwZW5kZW5jeSBvbiBuZl9jb25udHJhY2tfbDNwcm90b19pcHY0LiAqLworZXh0ZXJuIHZvaWQgbmVlZF9pcF9jb25udHJhY2sodm9pZCk7CisKKyNlbmRpZiAvKl9ORl9DT05OVFJBQ0tfSVBWNF9IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9pcHY2L25mX2Nvbm50cmFja19pY21wdjYuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9pcHY2L25mX2Nvbm50cmFja19pY21wdjYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjU5MWFmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL2lwdjYvbmZfY29ubnRyYWNrX2ljbXB2Ni5oCkBAIC0wLDAgKzEsMjcgQEAKKy8qCisgKiBJQ01QdjYgdHJhY2tpbmcuCisgKgorICogMjEgQXBsIDIwMDQ6IFlhc3V5dWtpIEtvemFrYWkgQFVTQUdJIDx5YXN1eXVraS5rb3pha2FpQHRvc2hpYmEuY28uanA+CisgKgktIHNlcGFyYXRlZCBmcm9tIG5mX2Nvbm50cmFja19pY21wLmgKKyAqCisgKiBEZXJpdmVkIGZyb20gaW5jbHVkZS9saW51eC9uZXRmaXRlcl9pcHY0L2lwX2Nvbm50cmFja19pY21wLmgKKyAqLworCisjaWZuZGVmIF9ORl9DT05OVFJBQ0tfSUNNUFY2X0gKKyNkZWZpbmUgX05GX0NPTk5UUkFDS19JQ01QVjZfSAorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKworI2lmbmRlZiBJQ01QVjZfTklfUVVFUlkKKyNkZWZpbmUgSUNNUFY2X05JX1FVRVJZIDEzOQorI2VuZGlmCisjaWZuZGVmIElDTVBWNl9OSV9SRVBMWQorI2RlZmluZSBJQ01QVjZfTklfUkVQTFkgMTQwCisjZW5kaWYKKworc3RydWN0IG5mX2N0X2ljbXB2NgoreworCS8qIE9wdGltaXphdGlvbjogd2hlbiBudW1iZXIgaW4gPT0gbnVtYmVyIG91dCwgZm9yZ2V0IGltbWVkaWF0ZWx5LiAqLworCWF0b21pY190IGNvdW50OworfTsKKworI2VuZGlmIC8qIF9ORl9DT05OVFJBQ0tfSUNNUFY2X0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzQ4MjU2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oCkBAIC0wLDAgKzEsMzU0IEBACisvKgorICogQ29ubmVjdGlvbiBzdGF0ZSB0cmFja2luZyBmb3IgbmV0ZmlsdGVyLiAgVGhpcyBpcyBzZXBhcmF0ZWQgZnJvbSwKKyAqIGJ1dCByZXF1aXJlZCBieSwgdGhlIChmdXR1cmUpIE5BVCBsYXllcjsgaXQgY2FuIGFsc28gYmUgdXNlZCBieSBhbiBpcHRhYmxlcworICogZXh0ZW5zaW9uLgorICoKKyAqIDE2IERlYyAyMDAzOiBZYXN1eXVraSBLb3pha2FpIEBVU0FHSSA8eWFzdXl1a2kua296YWthaUB0b3NoaWJhLmNvLmpwPgorICoJLSBnZW5lcmFsaXplIEwzIHByb3RvY29sIGRlcGVuZGVudCBwYXJ0LgorICoKKyAqIERlcml2ZWQgZnJvbSBpbmNsdWRlL2xpbnV4L25ldGZpdGVyX2lwdjQvaXBfY29ubnRyYWNrLmgKKyAqLworCisjaWZuZGVmIF9ORl9DT05OVFJBQ0tfSAorI2RlZmluZSBfTkZfQ09OTlRSQUNLX0gKKworI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29tbW9uLmg+CisKKyNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisKKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RjcC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2N0cC5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvaXB2NC9uZl9jb25udHJhY2tfaWNtcC5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvaXB2Ni9uZl9jb25udHJhY2tfaWNtcHY2Lmg+CisKKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190dXBsZS5oPgorCisvKiBwZXIgY29ubnRyYWNrOiBwcm90b2NvbCBwcml2YXRlIGRhdGEgKi8KK3VuaW9uIG5mX2Nvbm50cmFja19wcm90byB7CisJLyogaW5zZXJ0IGNvbm50cmFjayBwcm90byBwcml2YXRlIGRhdGEgaGVyZSAqLworCXN0cnVjdCBpcF9jdF9zY3RwIHNjdHA7CisJc3RydWN0IGlwX2N0X3RjcCB0Y3A7CisJc3RydWN0IGlwX2N0X2ljbXAgaWNtcDsKKwlzdHJ1Y3QgbmZfY3RfaWNtcHY2IGljbXB2NjsKK307CisKK3VuaW9uIG5mX2Nvbm50cmFja19leHBlY3RfcHJvdG8geworCS8qIGluc2VydCBleHBlY3QgcHJvdG8gcHJpdmF0ZSBkYXRhIGhlcmUgKi8KK307CisKKy8qIEFkZCBwcm90b2NvbCBoZWxwZXIgaW5jbHVkZSBmaWxlIGhlcmUgKi8KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Z0cC5oPgorCisvKiBwZXIgY29ubnRyYWNrOiBhcHBsaWNhdGlvbiBoZWxwZXIgcHJpdmF0ZSBkYXRhICovCit1bmlvbiBuZl9jb25udHJhY2tfaGVscCB7CisJLyogaW5zZXJ0IGNvbm50cmFjayBoZWxwZXIgcHJpdmF0ZSBkYXRhIChtYXN0ZXIpIGhlcmUgKi8KKwlzdHJ1Y3QgaXBfY3RfZnRwX21hc3RlciBjdF9mdHBfaW5mbzsKK307CisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorCisjaWZkZWYgQ09ORklHX05FVEZJTFRFUl9ERUJVRworI2RlZmluZSBORl9DVF9BU1NFUlQoeCkJCQkJCQkJXAorZG8gewkJCQkJCQkJCVwKKwlpZiAoISh4KSkJCQkJCQkJXAorCQkvKiBXb29haCEgIEknbSB0cmlwcGluZyBteSBjb25udHJhY2sgaW4gYSBmcmVuenkgb2YJXAorCQkgICBuZXRwbGF5Li4uICovCQkJCQlcCisJCXByaW50aygiTkZfQ1RfQVNTRVJUOiAlczolaSglcylcbiIsCQkJXAorCQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX0ZVTkNUSU9OX18pOwkJXAorfSB3aGlsZSgwKQorI2Vsc2UKKyNkZWZpbmUgTkZfQ1RfQVNTRVJUKHgpCisjZW5kaWYKKworc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXI7CisKKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL2lwdjQvbmZfY29ubnRyYWNrX2lwdjQuaD4KK3N0cnVjdCBuZl9jb25uCit7CisJLyogVXNhZ2UgY291bnQgaW4gaGVyZSBpcyAxIGZvciBoYXNoIHRhYmxlL2Rlc3RydWN0IHRpbWVyLCAxIHBlciBza2IsCisgICAgICAgICAgIHBsdXMgMSBmb3IgYW55IGNvbm5lY3Rpb24ocykgd2UgYXJlIGBtYXN0ZXInIGZvciAqLworCXN0cnVjdCBuZl9jb25udHJhY2sgY3RfZ2VuZXJhbDsKKworCS8qIFhYWCBzaG91bGQgSSBtb3ZlIHRoaXMgdG8gdGhlIHRhaWwgPyAtIFkuSyAqLworCS8qIFRoZXNlIGFyZSBteSB0dXBsZXM7IG9yaWdpbmFsIGFuZCByZXBseSAqLworCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCB0dXBsZWhhc2hbSVBfQ1RfRElSX01BWF07CisKKwkvKiBIYXZlIHdlIHNlZW4gdHJhZmZpYyBib3RoIHdheXMgeWV0PyAoYml0c2V0KSAqLworCXVuc2lnbmVkIGxvbmcgc3RhdHVzOworCisJLyogVGltZXIgZnVuY3Rpb247IGRyb3BzIHJlZmNudCB3aGVuIGl0IGdvZXMgb2ZmLiAqLworCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVvdXQ7CisKKyNpZmRlZiBDT05GSUdfTkZfQ1RfQUNDVAorCS8qIEFjY291bnRpbmcgSW5mb3JtYXRpb24gKHNhbWUgY2FjaGUgbGluZSBhcyBvdGhlciB3cml0dGVuIG1lbWJlcnMpICovCisJc3RydWN0IGlwX2Nvbm50cmFja19jb3VudGVyIGNvdW50ZXJzW0lQX0NUX0RJUl9NQVhdOworI2VuZGlmCisJLyogSWYgd2Ugd2VyZSBleHBlY3RlZCBieSBhbiBleHBlY3RhdGlvbiwgdGhpcyB3aWxsIGJlIGl0ICovCisJc3RydWN0IG5mX2Nvbm4gKm1hc3RlcjsKKwkKKwkvKiBDdXJyZW50IG51bWJlciBvZiBleHBlY3RlZCBjb25uZWN0aW9ucyAqLworCXVuc2lnbmVkIGludCBleHBlY3Rpbmc7CisKKwkvKiBIZWxwZXIuIGlmIGFueSAqLworCXN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXI7CisKKwkvKiBmZWF0dXJlcyAtIG5hdCwgaGVscGVyLCAuLi4gdXNlZCBieSBhbGxvY2F0aW5nIHN5c3RlbSAqLworCXVfaW50MzJfdCBmZWF0dXJlczsKKworCS8qIFN0b3JhZ2UgcmVzZXJ2ZWQgZm9yIG90aGVyIG1vZHVsZXM6ICovCisKKwl1bmlvbiBuZl9jb25udHJhY2tfcHJvdG8gcHJvdG87CisKKyNpZiBkZWZpbmVkKENPTkZJR19ORl9DT05OVFJBQ0tfTUFSSykKKwl1X2ludDMyX3QgbWFyazsKKyNlbmRpZgorCisJLyogVGhlc2UgbWVtYmVycyBhcmUgZHluYW1pY2FsbHkgYWxsb2NhdGVkLiAqLworCisJdW5pb24gbmZfY29ubnRyYWNrX2hlbHAgKmhlbHA7CisKKwkvKiBMYXllciAzIGRlcGVuZGVudCBtZW1iZXJzLiAoZXg6IE5BVCkgKi8KKwl1bmlvbiB7CisJCXN0cnVjdCBuZl9jb25udHJhY2tfaXB2NCAqaXB2NDsKKwl9IGwzcHJvdG87CisJdm9pZCAqZGF0YVswXTsKK307CisKK3N0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0Cit7CisJLyogSW50ZXJuYWwgbGlua2VkIGxpc3QgKGdsb2JhbCBleHBlY3RhdGlvbiBsaXN0KSAqLworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKworCS8qIFdlIGV4cGVjdCB0aGlzIHR1cGxlLCB3aXRoIHRoZSBmb2xsb3dpbmcgbWFzayAqLworCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgdHVwbGUsIG1hc2s7CisgCisJLyogRnVuY3Rpb24gdG8gY2FsbCBhZnRlciBzZXR1cCBhbmQgaW5zZXJ0aW9uICovCisJdm9pZCAoKmV4cGVjdGZuKShzdHJ1Y3QgbmZfY29ubiAqbmV3LAorCQkJIHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICp0aGlzKTsKKworCS8qIFRoZSBjb25udHJhY2sgb2YgdGhlIG1hc3RlciBjb25uZWN0aW9uICovCisJc3RydWN0IG5mX2Nvbm4gKm1hc3RlcjsKKworCS8qIFRpbWVyIGZ1bmN0aW9uOyBkZWxldGVzIHRoZSBleHBlY3RhdGlvbi4gKi8KKwlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lb3V0OworCisJLyogVXNhZ2UgY291bnQuICovCisJYXRvbWljX3QgdXNlOworCisJLyogRmxhZ3MgKi8KKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CisKKyNpZmRlZiBDT05GSUdfTkZfTkFUX05FRURFRAorCS8qIFRoaXMgaXMgdGhlIG9yaWdpbmFsIHBlci1wcm90byBwYXJ0LCB1c2VkIHRvIG1hcCB0aGUKKwkgKiBleHBlY3RlZCBjb25uZWN0aW9uIHRoZSB3YXkgdGhlIHJlY2lwaWVudCBleHBlY3RzLiAqLworCXVuaW9uIG5mX2Nvbm50cmFja19tYW5pcF9wcm90byBzYXZlZF9wcm90bzsKKwkvKiBEaXJlY3Rpb24gcmVsYXRpdmUgdG8gdGhlIG1hc3RlciBjb25uZWN0aW9uLiAqLworCWVudW0gaXBfY29ubnRyYWNrX2RpciBkaXI7CisjZW5kaWYKK307CisKKyNkZWZpbmUgTkZfQ1RfRVhQRUNUX1BFUk1BTkVOVCAweDEKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbmZfY29ubiAqCituZl9jdF90dXBsZWhhc2hfdG9fY3RyYWNrKGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCAqaGFzaCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGhhc2gsIHN0cnVjdCBuZl9jb25uLAorCQkJICAgIHR1cGxlaGFzaFtoYXNoLT50dXBsZS5kc3QuZGlyXSk7Cit9CisKKy8qIGdldCBtYXN0ZXIgY29ubnRyYWNrIHZpYSBtYXN0ZXIgZXhwZWN0YXRpb24gKi8KKyNkZWZpbmUgbWFzdGVyX2N0KGNvbm50cikgKGNvbm50ci0+bWFzdGVyKQorCisvKiBBbHRlciByZXBseSB0dXBsZSAobWF5YmUgYWx0ZXIgaGVscGVyKS4gKi8KK2V4dGVybiB2b2lkCituZl9jb25udHJhY2tfYWx0ZXJfcmVwbHkoc3RydWN0IG5mX2Nvbm4gKmNvbm50cmFjaywKKwkJCSBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICpuZXdyZXBseSk7CisKKy8qIElzIHRoaXMgdHVwbGUgdGFrZW4/IChpZ25vcmluZyBhbnkgYmVsb25naW5nIHRvIHRoZSBnaXZlbgorICAgY29ubnRyYWNrKS4gKi8KK2V4dGVybiBpbnQKK25mX2Nvbm50cmFja190dXBsZV90YWtlbihjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSwKKwkJCSBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqaWdub3JlZF9jb25udHJhY2spOworCisvKiBSZXR1cm4gY29ubnRyYWNrX2luZm8gYW5kIHR1cGxlIGhhc2ggZm9yIGdpdmVuIHNrYi4gKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IG5mX2Nvbm4gKgorbmZfY3RfZ2V0KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGVudW0gaXBfY29ubnRyYWNrX2luZm8gKmN0aW5mbykKK3sKKwkqY3RpbmZvID0gc2tiLT5uZmN0aW5mbzsKKwlyZXR1cm4gKHN0cnVjdCBuZl9jb25uICopc2tiLT5uZmN0OworfQorCisvKiBkZWNyZW1lbnQgcmVmZXJlbmNlIGNvdW50IG9uIGEgY29ubnRyYWNrICovCitzdGF0aWMgaW5saW5lIHZvaWQgbmZfY3RfcHV0KHN0cnVjdCBuZl9jb25uICpjdCkKK3sKKwlORl9DVF9BU1NFUlQoY3QpOworCW5mX2Nvbm50cmFja19wdXQoJmN0LT5jdF9nZW5lcmFsKTsKK30KKworLyogY2FsbCB0byBjcmVhdGUgYW4gZXhwbGljaXQgZGVwZW5kZW5jeSBvbiBuZl9jb25udHJhY2suICovCitleHRlcm4gdm9pZCBuZWVkX25mX2Nvbm50cmFjayh2b2lkKTsKKworZXh0ZXJuIGludCBuZl9jdF9pbnZlcnRfdHVwbGVwcihzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICppbnZlcnNlLAorCQkJCWNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKm9yaWcpOworCitleHRlcm4gdm9pZCBfX25mX2N0X3JlZnJlc2hfYWNjdChzdHJ1Y3QgbmZfY29ubiAqY3QsCisJCQkJIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkJCSBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSB1bnNpZ25lZCBsb25nIGV4dHJhX2ppZmZpZXMsCisJCQkJIGludCBkb19hY2N0KTsKKworLyogUmVmcmVzaCBjb25udHJhY2sgZm9yIHRoaXMgbWFueSBqaWZmaWVzIGFuZCBkbyBhY2NvdW50aW5nICovCitzdGF0aWMgaW5saW5lIHZvaWQgbmZfY3RfcmVmcmVzaF9hY2N0KHN0cnVjdCBuZl9jb25uICpjdCwKKwkJCQkgICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZXh0cmFfamlmZmllcykKK3sKKwlfX25mX2N0X3JlZnJlc2hfYWNjdChjdCwgY3RpbmZvLCBza2IsIGV4dHJhX2ppZmZpZXMsIDEpOworfQorCisvKiBSZWZyZXNoIGNvbm50cmFjayBmb3IgdGhpcyBtYW55IGppZmZpZXMgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBuZl9jdF9yZWZyZXNoKHN0cnVjdCBuZl9jb25uICpjdCwKKwkJCQkgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgdW5zaWduZWQgbG9uZyBleHRyYV9qaWZmaWVzKQoreworCV9fbmZfY3RfcmVmcmVzaF9hY2N0KGN0LCAwLCBza2IsIGV4dHJhX2ppZmZpZXMsIDApOworfQorCisvKiBUaGVzZSBhcmUgZm9yIE5BVC4gIElja3kuICovCisvKiBVcGRhdGUgVENQIHdpbmRvdyB0cmFja2luZyBkYXRhIHdoZW4gTkFUIG1hbmdsZXMgdGhlIHBhY2tldCAqLworZXh0ZXJuIHZvaWQgbmZfY29ubnRyYWNrX3RjcF91cGRhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgdW5zaWduZWQgaW50IGRhdGFvZmYsCisJCQkJICAgIHN0cnVjdCBuZl9jb25uICpjb25udHJhY2ssCisJCQkJICAgIGludCBkaXIpOworCisvKiBDYWxsIG1lIHdoZW4gYSBjb25udHJhY2sgaXMgZGVzdHJveWVkLiAqLworZXh0ZXJuIHZvaWQgKCpuZl9jb25udHJhY2tfZGVzdHJveWVkKShzdHJ1Y3QgbmZfY29ubiAqY29ubnRyYWNrKTsKKworLyogRmFrZSBjb25udHJhY2sgZW50cnkgZm9yIHVudHJhY2tlZCBjb25uZWN0aW9ucyAqLworZXh0ZXJuIHN0cnVjdCBuZl9jb25uIG5mX2Nvbm50cmFja191bnRyYWNrZWQ7CisKK2V4dGVybiBpbnQgbmZfY3Rfbm9fZGVmcmFnOworCisvKiBJdGVyYXRlIG92ZXIgYWxsIGNvbm50cmFja3M6IGlmIGl0ZXIgcmV0dXJucyB0cnVlLCBpdCdzIGRlbGV0ZWQuICovCitleHRlcm4gdm9pZAorbmZfY3RfaXRlcmF0ZV9jbGVhbnVwKGludCAoKml0ZXIpKHN0cnVjdCBuZl9jb25uICppLCB2b2lkICpkYXRhKSwgdm9pZCAqZGF0YSk7CitleHRlcm4gdm9pZCBuZl9jb25udHJhY2tfZnJlZShzdHJ1Y3QgbmZfY29ubiAqY3QpOworZXh0ZXJuIHN0cnVjdCBuZl9jb25uICoKK25mX2Nvbm50cmFja19hbGxvYyhjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICpvcmlnLAorCQkgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICpyZXBsKTsKKworLyogSXQncyBjb25maXJtZWQgaWYgaXQgaXMsIG9yIGhhcyBiZWVuIGluIHRoZSBoYXNoIHRhYmxlLiAqLworc3RhdGljIGlubGluZSBpbnQgbmZfY3RfaXNfY29uZmlybWVkKHN0cnVjdCBuZl9jb25uICpjdCkKK3sKKwlyZXR1cm4gdGVzdF9iaXQoSVBTX0NPTkZJUk1FRF9CSVQsICZjdC0+c3RhdHVzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgbmZfY3RfaXNfZHlpbmcoc3RydWN0IG5mX2Nvbm4gKmN0KQoreworCXJldHVybiB0ZXN0X2JpdChJUFNfRFlJTkdfQklULCAmY3QtPnN0YXR1cyk7Cit9CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplOworCisjZGVmaW5lIE5GX0NUX1NUQVRfSU5DKGNvdW50KSAoX19nZXRfY3B1X3ZhcihuZl9jb25udHJhY2tfc3RhdCkuY291bnQrKykKKworI2lmZGVmIENPTkZJR19ORl9DT05OVFJBQ0tfRVZFTlRTCisjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKworc3RydWN0IG5mX2Nvbm50cmFja19lY2FjaGUgeworCXN0cnVjdCBuZl9jb25uICpjdDsKKwl1bnNpZ25lZCBpbnQgZXZlbnRzOworfTsKK0RFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgbmZfY29ubnRyYWNrX2VjYWNoZSwgbmZfY29ubnRyYWNrX2VjYWNoZSk7CisKKyNkZWZpbmUgQ09OTlRSQUNLX0VDQUNIRSh4KQkoX19nZXRfY3B1X3ZhcihuZl9jb25udHJhY2tfZWNhY2hlKS54KQorCitleHRlcm4gc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZl9jb25udHJhY2tfY2hhaW47CitleHRlcm4gc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZl9jb25udHJhY2tfZXhwZWN0X2NoYWluOworCitzdGF0aWMgaW5saW5lIGludCBuZl9jb25udHJhY2tfcmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKK3sKKwlyZXR1cm4gbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJm5mX2Nvbm50cmFja19jaGFpbiwgbmIpOworfQorCitzdGF0aWMgaW5saW5lIGludCBuZl9jb25udHJhY2tfdW5yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKQoreworCXJldHVybiBub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyKCZuZl9jb25udHJhY2tfY2hhaW4sIG5iKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK25mX2Nvbm50cmFja19leHBlY3RfcmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKK3sKKwlyZXR1cm4gbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJm5mX2Nvbm50cmFja19leHBlY3RfY2hhaW4sIG5iKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK25mX2Nvbm50cmFja19leHBlY3RfdW5yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKQoreworCXJldHVybiBub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyKCZuZl9jb25udHJhY2tfZXhwZWN0X2NoYWluLCBuYik7Cit9CisKK2V4dGVybiB2b2lkIG5mX2N0X2RlbGl2ZXJfY2FjaGVkX2V2ZW50cyhjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QpOworZXh0ZXJuIHZvaWQgX19uZl9jdF9ldmVudF9jYWNoZV9pbml0KHN0cnVjdCBuZl9jb25uICpjdCk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorbmZfY29ubnRyYWNrX2V2ZW50X2NhY2hlKGVudW0gaXBfY29ubnRyYWNrX2V2ZW50cyBldmVudCwKKwkJCSBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBuZl9jb25uICpjdCA9IChzdHJ1Y3QgbmZfY29ubiAqKXNrYi0+bmZjdDsKKwlzdHJ1Y3QgbmZfY29ubnRyYWNrX2VjYWNoZSAqZWNhY2hlOworCisJbG9jYWxfYmhfZGlzYWJsZSgpOworCWVjYWNoZSA9ICZfX2dldF9jcHVfdmFyKG5mX2Nvbm50cmFja19lY2FjaGUpOworCWlmIChjdCAhPSBlY2FjaGUtPmN0KQorCQlfX25mX2N0X2V2ZW50X2NhY2hlX2luaXQoY3QpOworCWVjYWNoZS0+ZXZlbnRzIHw9IGV2ZW50OworCWxvY2FsX2JoX2VuYWJsZSgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbmZfY29ubnRyYWNrX2V2ZW50KGVudW0gaXBfY29ubnRyYWNrX2V2ZW50cyBldmVudCwKKwkJCQkgICAgICBzdHJ1Y3QgbmZfY29ubiAqY3QpCit7CisJaWYgKG5mX2N0X2lzX2NvbmZpcm1lZChjdCkgJiYgIW5mX2N0X2lzX2R5aW5nKGN0KSkKKwkJbm90aWZpZXJfY2FsbF9jaGFpbigmbmZfY29ubnRyYWNrX2NoYWluLCBldmVudCwgY3QpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK25mX2Nvbm50cmFja19leHBlY3RfZXZlbnQoZW51bSBpcF9jb25udHJhY2tfZXhwZWN0X2V2ZW50cyBldmVudCwKKwkJCSAgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cCkKK3sKKwlub3RpZmllcl9jYWxsX2NoYWluKCZuZl9jb25udHJhY2tfZXhwZWN0X2NoYWluLCBldmVudCwgZXhwKTsKK30KKyNlbHNlIC8qIENPTkZJR19ORl9DT05OVFJBQ0tfRVZFTlRTICovCitzdGF0aWMgaW5saW5lIHZvaWQgbmZfY29ubnRyYWNrX2V2ZW50X2NhY2hlKGVudW0gaXBfY29ubnRyYWNrX2V2ZW50cyBldmVudCwKKwkJCQkJICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgbmZfY29ubnRyYWNrX2V2ZW50KGVudW0gaXBfY29ubnRyYWNrX2V2ZW50cyBldmVudCwKKwkJCQkgICAgICBzdHJ1Y3QgbmZfY29ubiAqY3QpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgbmZfY3RfZGVsaXZlcl9jYWNoZWRfZXZlbnRzKGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCkge30KK3N0YXRpYyBpbmxpbmUgdm9pZAorbmZfY29ubnRyYWNrX2V4cGVjdF9ldmVudChlbnVtIGlwX2Nvbm50cmFja19leHBlY3RfZXZlbnRzIGV2ZW50LAorCQkJICBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwKSB7fQorI2VuZGlmIC8qIENPTkZJR19ORl9DT05OVFJBQ0tfRVZFTlRTICovCisKKy8qIG5vIGhlbHBlciwgbm8gbmF0ICovCisjZGVmaW5lCU5GX0NUX0ZfQkFTSUMJMAorLyogZm9yIGhlbHBlciAqLworI2RlZmluZQlORl9DVF9GX0hFTFAJMQorLyogZm9yIG5hdC4gKi8KKyNkZWZpbmUJTkZfQ1RfRl9OQVQJMgorI2RlZmluZSBORl9DVF9GX05VTQk0CisKK2V4dGVybiBpbnQKK25mX2Nvbm50cmFja19yZWdpc3Rlcl9jYWNoZSh1X2ludDMyX3QgZmVhdHVyZXMsIGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBzaXplLAorCQkJICAgIGludCAoKmluaXRfY29ubnRyYWNrKShzdHJ1Y3QgbmZfY29ubiAqLCB1X2ludDMyX3QpKTsKK2V4dGVybiB2b2lkCituZl9jb25udHJhY2tfdW5yZWdpc3Rlcl9jYWNoZSh1X2ludDMyX3QgZmVhdHVyZXMpOworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9ORl9DT05OVFJBQ0tfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb21wYXQuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29tcGF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NhYzE5ZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29tcGF0LmgKQEAgLTAsMCArMSwxMDggQEAKKyNpZm5kZWYgX05GX0NPTk5UUkFDS19DT01QQVRfSAorI2RlZmluZSBfTkZfQ09OTlRSQUNLX0NPTVBBVF9ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpZiBkZWZpbmVkKENPTkZJR19JUF9ORl9DT05OVFJBQ0spIHx8IGRlZmluZWQoQ09ORklHX0lQX05GX0NPTk5UUkFDS19NT0RVTEUpCisKKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2suaD4KKworI2lmZGVmIENPTkZJR19JUF9ORl9DT05OVFJBQ0tfTUFSSworc3RhdGljIGlubGluZSB1X2ludDMyX3QgKm5mX2N0X2dldF9tYXJrKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCXVfaW50MzJfdCAqY3RpbmZvKQoreworCXN0cnVjdCBpcF9jb25udHJhY2sgKmN0ID0gaXBfY29ubnRyYWNrX2dldChza2IsIGN0aW5mbyk7CisKKwlpZiAoY3QpCisJCXJldHVybiAmY3QtPm1hcms7CisJZWxzZQorCQlyZXR1cm4gTlVMTDsKK30KKyNlbmRpZiAvKiBDT05GSUdfSVBfTkZfQ09OTlRSQUNLX01BUksgKi8KKworI2lmZGVmIENPTkZJR19JUF9ORl9DVF9BQ0NUCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpcF9jb25udHJhY2tfY291bnRlciAqCituZl9jdF9nZXRfY291bnRlcnMoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwllbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbzsKKwlzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCA9IGlwX2Nvbm50cmFja19nZXQoc2tiLCAmY3RpbmZvKTsKKworCWlmIChjdCkKKwkJcmV0dXJuIGN0LT5jb3VudGVyczsKKwllbHNlCisJCXJldHVybiBOVUxMOworfQorI2VuZGlmIC8qIENPTkZJR19JUF9ORl9DVF9BQ0NUICovCisKK3N0YXRpYyBpbmxpbmUgaW50IG5mX2N0X2lzX3VudHJhY2tlZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXJldHVybiAoc2tiLT5uZmN0ID09ICZpcF9jb25udHJhY2tfdW50cmFja2VkLmN0X2dlbmVyYWwpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbmZfY3RfdW50cmFjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXNrYi0+bmZjdCA9ICZpcF9jb25udHJhY2tfdW50cmFja2VkLmN0X2dlbmVyYWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG5mX2N0X2dldF9jdGluZm8oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvICpjdGluZm8pCit7CisJc3RydWN0IGlwX2Nvbm50cmFjayAqY3QgPSBpcF9jb25udHJhY2tfZ2V0KHNrYiwgY3RpbmZvKTsKKwlyZXR1cm4gKGN0ICE9IE5VTEwpOworfQorCisjZWxzZSAvKiBDT05GSUdfSVBfTkZfQ09OTlRSQUNLICovCisKKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL2lwdjQvbmZfY29ubnRyYWNrX2lwdjQuaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oPgorCisjaWZkZWYgQ09ORklHX05GX0NPTk5UUkFDS19NQVJLCisKK3N0YXRpYyBpbmxpbmUgdV9pbnQzMl90ICpuZl9jdF9nZXRfbWFyayhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQl1X2ludDMyX3QgKmN0aW5mbykKK3sKKwlzdHJ1Y3QgbmZfY29ubiAqY3QgPSBuZl9jdF9nZXQoc2tiLCBjdGluZm8pOworCisJaWYgKGN0KQorCQlyZXR1cm4gJmN0LT5tYXJrOworCWVsc2UKKwkJcmV0dXJuIE5VTEw7Cit9CisjZW5kaWYgLyogQ09ORklHX05GX0NPTk5UUkFDS19NQVJLICovCisKKyNpZmRlZiBDT05GSUdfTkZfQ1RfQUNDVAorc3RhdGljIGlubGluZSBzdHJ1Y3QgaXBfY29ubnRyYWNrX2NvdW50ZXIgKgorbmZfY3RfZ2V0X2NvdW50ZXJzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCit7CisJZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm87CisJc3RydWN0IG5mX2Nvbm4gKmN0ID0gbmZfY3RfZ2V0KHNrYiwgJmN0aW5mbyk7CisKKwlpZiAoY3QpCisJCXJldHVybiBjdC0+Y291bnRlcnM7CisJZWxzZQorCQlyZXR1cm4gTlVMTDsKK30KKyNlbmRpZiAvKiBDT05GSUdfTkZfQ1RfQUNDVCAqLworCitzdGF0aWMgaW5saW5lIGludCBuZl9jdF9pc191bnRyYWNrZWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlyZXR1cm4gKHNrYi0+bmZjdCA9PSAmbmZfY29ubnRyYWNrX3VudHJhY2tlZC5jdF9nZW5lcmFsKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG5mX2N0X3VudHJhY2soc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlza2ItPm5mY3QgPSAmbmZfY29ubnRyYWNrX3VudHJhY2tlZC5jdF9nZW5lcmFsOworfQorCitzdGF0aWMgaW5saW5lIGludCBuZl9jdF9nZXRfY3RpbmZvKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyAqY3RpbmZvKQoreworCXN0cnVjdCBuZl9jb25uICpjdCA9IG5mX2N0X2dldChza2IsIGN0aW5mbyk7CisJcmV0dXJuIChjdCAhPSBOVUxMKTsKK30KKworI2VuZGlmIC8qIENPTkZJR19JUF9ORl9DT05OVFJBQ0sgKi8KKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9ORl9DT05OVFJBQ0tfQ09NUEFUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGEyNTQ1MgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5oCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBUaGlzIGhlYWRlciBpcyB1c2VkIHRvIHNoYXJlIGNvcmUgZnVuY3Rpb25hbGl0eSBiZXR3ZWVuIHRoZQorICogc3RhbmRhbG9uZSBjb25uZWN0aW9uIHRyYWNraW5nIG1vZHVsZSwgYW5kIHRoZSBjb21wYXRpYmlsaXR5IGxheWVyJ3MgdXNlCisgKiBvZiBjb25uZWN0aW9uIHRyYWNraW5nLgorICoKKyAqIDE2IERlYyAyMDAzOiBZYXN1eXVraSBLb3pha2FpIEBVU0FHSSA8eWFzdXl1a2kua296YWthaUB0b3NoaWJhLmNvLmpwPgorICoJLSBnZW5lcmFsaXplIEwzIHByb3RvY29sIGRlcGVuZGVudCBwYXJ0LgorICoKKyAqIERlcml2ZWQgZnJvbSBpbmNsdWRlL2xpbnV4L25ldGZpdGVyX2lwdjQvaXBfY29ubnRyYWNrX2NvcmUuaAorICovCisKKyNpZm5kZWYgX05GX0NPTk5UUkFDS19DT1JFX0gKKyNkZWZpbmUgX05GX0NPTk5UUkFDS19DT1JFX0gKKworI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci5oPgorCisvKiBUaGlzIGhlYWRlciBpcyB1c2VkIHRvIHNoYXJlIGNvcmUgZnVuY3Rpb25hbGl0eSBiZXR3ZWVuIHRoZQorICAgc3RhbmRhbG9uZSBjb25uZWN0aW9uIHRyYWNraW5nIG1vZHVsZSwgYW5kIHRoZSBjb21wYXRpYmlsaXR5IGxheWVyJ3MgdXNlCisgICBvZiBjb25uZWN0aW9uIHRyYWNraW5nLiAqLworZXh0ZXJuIHVuc2lnbmVkIGludCBuZl9jb25udHJhY2tfaW4oaW50IHBmLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgaG9va251bSwKKwkJCQkgICAgc3RydWN0IHNrX2J1ZmYgKipwc2tiKTsKKworZXh0ZXJuIGludCBuZl9jb25udHJhY2tfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIG5mX2Nvbm50cmFja19jbGVhbnVwKHZvaWQpOworCitzdHJ1Y3QgbmZfY29ubnRyYWNrX2wzcHJvdG87CitleHRlcm4gc3RydWN0IG5mX2Nvbm50cmFja19sM3Byb3RvICpuZl9jdF9maW5kX2wzcHJvdG8odV9pbnQxNl90IHBmKTsKKy8qIExpa2UgYWJvdmUsIGJ1dCB5b3UgYWxyZWFkeSBoYXZlIGNvbm50cmFjayByZWFkIGxvY2suICovCitleHRlcm4gc3RydWN0IG5mX2Nvbm50cmFja19sM3Byb3RvICpfX25mX2N0X2ZpbmRfbDNwcm90byh1X2ludDE2X3QgbDNwcm90byk7CisKK3N0cnVjdCBuZl9jb25udHJhY2tfcHJvdG9jb2w7CisKK2V4dGVybiBpbnQKK25mX2N0X2dldF90dXBsZShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQl1bnNpZ25lZCBpbnQgbmhvZmYsCisJCXVuc2lnbmVkIGludCBkYXRhb2ZmLAorCQl1X2ludDE2X3QgbDNudW0sCisJCXVfaW50OF90IHByb3RvbnVtLAorCQlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSwKKwkJY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19sM3Byb3RvICpsM3Byb3RvLAorCQljb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3Byb3RvY29sICpwcm90b2NvbCk7CisKK2V4dGVybiBpbnQKK25mX2N0X2ludmVydF90dXBsZShzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICppbnZlcnNlLAorCQkgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICpvcmlnLAorCQkgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2wzcHJvdG8gKmwzcHJvdG8sCisJCSAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfcHJvdG9jb2wgKnByb3RvY29sKTsKKworLyogRmluZCBhIGNvbm5lY3Rpb24gY29ycmVzcG9uZGluZyB0byBhIHR1cGxlLiAqLworZXh0ZXJuIHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCAqCituZl9jb25udHJhY2tfZmluZF9nZXQoY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsCisJCSAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25uICppZ25vcmVkX2Nvbm50cmFjayk7CisKK2V4dGVybiBpbnQgX19uZl9jb25udHJhY2tfY29uZmlybShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpOworCisvKiBDb25maXJtIGEgY29ubmVjdGlvbjogcmV0dXJucyBORl9EUk9QIGlmIHBhY2tldCBtdXN0IGJlIGRyb3BwZWQuICovCitzdGF0aWMgaW5saW5lIGludCBuZl9jb25udHJhY2tfY29uZmlybShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpCit7CisJc3RydWN0IG5mX2Nvbm4gKmN0ID0gKHN0cnVjdCBuZl9jb25uICopKCpwc2tiKS0+bmZjdDsKKwlpbnQgcmV0ID0gTkZfQUNDRVBUOworCisJaWYgKGN0KSB7CisJCWlmICghbmZfY3RfaXNfY29uZmlybWVkKGN0KSkKKwkJCXJldCA9IF9fbmZfY29ubnRyYWNrX2NvbmZpcm0ocHNrYik7CisJCW5mX2N0X2RlbGl2ZXJfY2FjaGVkX2V2ZW50cyhjdCk7CisJfQorCXJldHVybiByZXQ7Cit9CisKK2V4dGVybiB2b2lkIF9fbmZfY29ubnRyYWNrX2F0dGFjaChzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKK2V4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkICpuZl9jb25udHJhY2tfaGFzaDsKK2V4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIG5mX2Nvbm50cmFja19leHBlY3RfbGlzdDsKK2V4dGVybiByd2xvY2tfdCBuZl9jb25udHJhY2tfbG9jayA7CisjZW5kaWYgLyogX05GX0NPTk5UUkFDS19DT1JFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhNjZiMmEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlcnMuCisgKgorICogMTYgRGVjIDIwMDM6IFlhc3V5dWtpIEtvemFrYWkgQFVTQUdJIDx5YXN1eXVraS5rb3pha2FpQHRvc2hpYmEuY28uanA+CisgKgktIGdlbmVyYWxpemUgTDMgcHJvdG9jb2wgZGVwZW5kZW50IHBhcnQuCisgKgorICogRGVyaXZlZCBmcm9tIGluY2x1ZGUvbGludXgvbmV0Zml0ZXJfaXB2NC9pcF9jb25udHJhY2tfaGVscGVyLmgKKyAqLworCisjaWZuZGVmIF9ORl9DT05OVFJBQ0tfSEVMUEVSX0gKKyNkZWZpbmUgX05GX0NPTk5UUkFDS19IRUxQRVJfSAorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmg+CisKK3N0cnVjdCBtb2R1bGU7CisKK3N0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyCit7CQorCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsgCQkvKiBJbnRlcm5hbCB1c2UuICovCisKKwljb25zdCBjaGFyICpuYW1lOwkJLyogbmFtZSBvZiB0aGUgbW9kdWxlICovCisJc3RydWN0IG1vZHVsZSAqbWU7CQkvKiBwb2ludGVyIHRvIHNlbGYgKi8KKwl1bnNpZ25lZCBpbnQgbWF4X2V4cGVjdGVkOwkvKiBNYXhpbXVtIG51bWJlciBvZiBjb25jdXJyZW50IAorCQkJCQkgKiBleHBlY3RlZCBjb25uZWN0aW9ucyAqLworCXVuc2lnbmVkIGludCB0aW1lb3V0OwkJLyogdGltZW91dCBmb3IgZXhwZWN0ZWRzICovCisKKwkvKiBNYXNrIG9mIHRoaW5ncyB3ZSB3aWxsIGhlbHAgKGNvbXBhcmVkIGFnYWluc3Qgc2VydmVyIHJlc3BvbnNlKSAqLworCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgdHVwbGU7CisJc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSBtYXNrOworCQorCS8qIEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBkYXRhIHBhc3NlczsgcmV0dXJuIHZlcmRpY3QsIG9yIC0xIHRvCisgICAgICAgICAgIGludmFsaWRhdGUuICovCisJaW50ICgqaGVscCkoc3RydWN0IHNrX2J1ZmYgKipwc2tiLAorCQkgICAgdW5zaWduZWQgaW50IHByb3RvZmYsCisJCSAgICBzdHJ1Y3QgbmZfY29ubiAqY3QsCisJCSAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGNvbm50cmFja2luZm8pOworfTsKKworZXh0ZXJuIGludCBuZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICopOworZXh0ZXJuIHZvaWQgbmZfY29ubnRyYWNrX2hlbHBlcl91bnJlZ2lzdGVyKHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICopOworCisvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgYW4gZXhwZWN0YXRpb246IHRoaXMgaXMgbWFuZGF0b3J5IGJlZm9yZSBjYWxsaW5nCisgICBuZl9jb25udHJhY2tfZXhwZWN0X3JlbGF0ZWQuICBZb3Ugd2lsbCBoYXZlIHRvIGNhbGwgcHV0IGFmdGVyd2FyZHMuICovCitleHRlcm4gc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKgorbmZfY29ubnRyYWNrX2V4cGVjdF9hbGxvYyhzdHJ1Y3QgbmZfY29ubiAqbWFzdGVyKTsKK2V4dGVybiB2b2lkIG5mX2Nvbm50cmFja19leHBlY3RfcHV0KHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHApOworCisvKiBBZGQgYW4gZXhwZWN0ZWQgY29ubmVjdGlvbjogY2FuIGhhdmUgbW9yZSB0aGFuIG9uZSBwZXIgY29ubmVjdGlvbiAqLworZXh0ZXJuIGludCBuZl9jb25udHJhY2tfZXhwZWN0X3JlbGF0ZWQoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cCk7CitleHRlcm4gdm9pZCBuZl9jb25udHJhY2tfdW5leHBlY3RfcmVsYXRlZChzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwKTsKKworI2VuZGlmIC8qX05GX0NPTk5UUkFDS19IRUxQRVJfSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG8uaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90by5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxNjYzZTUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG8uaApAQCAtMCwwICsxLDkzIEBACisvKgorICogQ29weXJpZ2h0IChDKTIwMDMsMjAwNCBVU0FHSS9XSURFIFByb2plY3QKKyAqCisgKiBIZWFkZXIgZm9yIHVzZSBpbiBkZWZpbmluZyBhIGdpdmVuIEwzIHByb3RvY29sIGZvciBjb25uZWN0aW9uIHRyYWNraW5nLgorICoKKyAqIEF1dGhvcjoKKyAqCVlhc3V5dWtpIEtvemFrYWkgQFVTQUdJCTx5YXN1eXVraS5rb3pha2FpQHRvc2hpYmEuY28uanA+CisgKgorICogRGVyaXZlZCBmcm9tIGluY2x1ZGUvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX3Byb3RvY29sLmgKKyAqLworCisjaWZuZGVmIF9ORl9DT05OVFJBQ0tfTDNQUk9UT19ICisjZGVmaW5lIF9ORl9DT05OVFJBQ0tfTDNQUk9UT19ICisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oPgorCitzdHJ1Y3QgbmZfY29ubnRyYWNrX2wzcHJvdG8KK3sKKwkvKiBOZXh0IHBvaW50ZXIuICovCisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCisJLyogTDMgUHJvdG9jb2wgRmFtaWx5IG51bWJlci4gZXgpIFBGX0lORVQgKi8KKwl1X2ludDE2X3QgbDNwcm90bzsKKworCS8qIFByb3RvY29sIG5hbWUgKi8KKwljb25zdCBjaGFyICpuYW1lOworCisJLyoKKwkgKiBUcnkgdG8gZmlsbCBpbiB0aGUgdGhpcmQgYXJnOiBuaG9mZiBpcyBvZmZzZXQgb2YgbDMgcHJvdG8KKyAgICAgICAgICogaGRyLiAgUmV0dXJuIHRydWUgaWYgcG9zc2libGUuCisJICovCisJaW50ICgqcGt0X3RvX3R1cGxlKShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbmhvZmYsCisJCQkgICAgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpOworCisJLyoKKwkgKiBJbnZlcnQgdGhlIHBlci1wcm90byBwYXJ0IG9mIHRoZSB0dXBsZTogaWUuIHR1cm4geG1pdCBpbnRvIHJlcGx5LgorCSAqIFNvbWUgcGFja2V0cyBjYW4ndCBiZSBpbnZlcnRlZDogcmV0dXJuIDAgaW4gdGhhdCBjYXNlLgorCSAqLworCWludCAoKmludmVydF90dXBsZSkoc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqaW52ZXJzZSwKKwkJCSAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICpvcmlnKTsKKworCS8qIFByaW50IG91dCB0aGUgcGVyLXByb3RvY29sIHBhcnQgb2YgdGhlIHR1cGxlLiAqLworCWludCAoKnByaW50X3R1cGxlKShzdHJ1Y3Qgc2VxX2ZpbGUgKnMsCisJCQkgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICopOworCisJLyogUHJpbnQgb3V0IHRoZSBwcml2YXRlIHBhcnQgb2YgdGhlIGNvbm50cmFjay4gKi8KKwlpbnQgKCpwcmludF9jb25udHJhY2spKHN0cnVjdCBzZXFfZmlsZSAqcywgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKik7CisKKwkvKiBSZXR1cm5zIHZlcmRpY3QgZm9yIHBhY2tldCwgb3IgLTEgZm9yIGludmFsaWQuICovCisJaW50ICgqcGFja2V0KShzdHJ1Y3QgbmZfY29ubiAqY29ubnRyYWNrLAorCQkgICAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkgICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbyk7CisKKwkvKgorCSAqIENhbGxlZCB3aGVuIGEgbmV3IGNvbm5lY3Rpb24gZm9yIHRoaXMgcHJvdG9jb2wgZm91bmQ7CisJICogcmV0dXJucyBUUlVFIGlmIGl0J3MgT0suICBJZiBzbywgcGFja2V0KCkgY2FsbGVkIG5leHQuCisJICovCisJaW50ICgqbmV3KShzdHJ1Y3QgbmZfY29ubiAqY29ubnRyYWNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKworCS8qIENhbGxlZCB3aGVuIGEgY29ubnRyYWNrIGVudHJ5IGlzIGRlc3Ryb3llZCAqLworCXZvaWQgKCpkZXN0cm95KShzdHJ1Y3QgbmZfY29ubiAqY29ubnRyYWNrKTsKKworCS8qCisJICogQ2FsbGVkIGJlZm9yZSB0cmFja2luZy4gCisJICoJKmRhdGFvZmY6IG9mZnNldCBvZiBwcm90b2NvbCBoZWFkZXIgKFRDUCwgVURQLC4uLikgaW4gKnBza2IKKwkgKgkqcHJvdG9udW06IHByb3RvY29sIG51bWJlcgorCSAqLworCWludCAoKnByZXBhcmUpKHN0cnVjdCBza19idWZmICoqcHNrYiwgdW5zaWduZWQgaW50IGhvb2tudW0sCisJCSAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGFvZmYsIHVfaW50OF90ICpwcm90b251bSk7CisKKwl1X2ludDMyX3QgKCpnZXRfZmVhdHVyZXMpKGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKTsKKworCS8qIE1vZHVsZSAoaWYgYW55KSB3aGljaCB0aGlzIGlzIGNvbm5lY3RlZCB0by4gKi8KKwlzdHJ1Y3QgbW9kdWxlICptZTsKK307CisKK2V4dGVybiBzdHJ1Y3QgbmZfY29ubnRyYWNrX2wzcHJvdG8gKm5mX2N0X2wzcHJvdG9zW0FGX01BWF07CisKKy8qIFByb3RvY29sIHJlZ2lzdHJhdGlvbi4gKi8KK2V4dGVybiBpbnQgbmZfY29ubnRyYWNrX2wzcHJvdG9fcmVnaXN0ZXIoc3RydWN0IG5mX2Nvbm50cmFja19sM3Byb3RvICpwcm90byk7CitleHRlcm4gdm9pZCBuZl9jb25udHJhY2tfbDNwcm90b191bnJlZ2lzdGVyKHN0cnVjdCBuZl9jb25udHJhY2tfbDNwcm90byAqcHJvdG8pOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBuZl9jb25udHJhY2tfbDNwcm90byAqCituZl9jdF9maW5kX2wzcHJvdG8odV9pbnQxNl90IGwzcHJvdG8pCit7CisJcmV0dXJuIG5mX2N0X2wzcHJvdG9zW2wzcHJvdG9dOworfQorCisvKiBFeGlzdGluZyBidWlsdC1pbiBwcm90b2NvbHMgKi8KK2V4dGVybiBzdHJ1Y3QgbmZfY29ubnRyYWNrX2wzcHJvdG8gbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NDsKK2V4dGVybiBzdHJ1Y3QgbmZfY29ubnRyYWNrX2wzcHJvdG8gbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NjsKK2V4dGVybiBzdHJ1Y3QgbmZfY29ubnRyYWNrX2wzcHJvdG8gbmZfY29ubnRyYWNrX2dlbmVyaWNfbDNwcm90bzsKKyNlbmRpZiAvKl9ORl9DT05OVFJBQ0tfTDNQUk9UT19IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9jb2wuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9jb2wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2FmZGEzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b2NvbC5oCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICogSGVhZGVyIGZvciB1c2UgaW4gZGVmaW5pbmcgYSBnaXZlbiBwcm90b2NvbCBmb3IgY29ubmVjdGlvbiB0cmFja2luZy4KKyAqCisgKiAxNiBEZWMgMjAwMzogWWFzdXl1a2kgS296YWthaSBAVVNBR0kgPHlhc3V5dWtpLmtvemFrYWlAdG9zaGliYS5jby5qcD4KKyAqCS0gZ2VuZXJhbGl6ZWQgTDMgcHJvdG9jb2wgZGVwZW5kZW50IHBhcnQuCisgKgorICogRGVyaXZlZCBmcm9tIGluY2x1ZGUvbGludXgvbmV0Zml0ZXJfaXB2NC9pcF9jb25udHJhY2tfcHJvdGNvbC5oCisgKi8KKworI2lmbmRlZiBfTkZfQ09OTlRSQUNLX1BST1RPQ09MX0gKKyNkZWZpbmUgX05GX0NPTk5UUkFDS19QUk9UT0NPTF9ICisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaD4KKworc3RydWN0IHNlcV9maWxlOworCitzdHJ1Y3QgbmZfY29ubnRyYWNrX3Byb3RvY29sCit7CisJLyogTmV4dCBwb2ludGVyLiAqLworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKworCS8qIEwzIFByb3RvY29sIG51bWJlci4gKi8KKwl1X2ludDE2X3QgbDNwcm90bzsKKworCS8qIFByb3RvY29sIG51bWJlci4gKi8KKwl1X2ludDhfdCBwcm90bzsKKworCS8qIFByb3RvY29sIG5hbWUgKi8KKwljb25zdCBjaGFyICpuYW1lOworCisJLyogVHJ5IHRvIGZpbGwgaW4gdGhlIHRoaXJkIGFyZzogZGF0YW9mZiBpcyBvZmZzZXQgcGFzdCBuZXR3b3JrIHByb3RvY29sCisgICAgICAgICAgIGhkci4gIFJldHVybiB0cnVlIGlmIHBvc3NpYmxlLiAqLworCWludCAoKnBrdF90b190dXBsZSkoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwKKwkJCSAgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSk7CisKKwkvKiBJbnZlcnQgdGhlIHBlci1wcm90byBwYXJ0IG9mIHRoZSB0dXBsZTogaWUuIHR1cm4geG1pdCBpbnRvIHJlcGx5LgorCSAqIFNvbWUgcGFja2V0cyBjYW4ndCBiZSBpbnZlcnRlZDogcmV0dXJuIDAgaW4gdGhhdCBjYXNlLgorCSAqLworCWludCAoKmludmVydF90dXBsZSkoc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqaW52ZXJzZSwKKwkJCSAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICpvcmlnKTsKKworCS8qIFByaW50IG91dCB0aGUgcGVyLXByb3RvY29sIHBhcnQgb2YgdGhlIHR1cGxlLiBSZXR1cm4gbGlrZSBzZXFfKiAqLworCWludCAoKnByaW50X3R1cGxlKShzdHJ1Y3Qgc2VxX2ZpbGUgKnMsCisJCQkgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICopOworCisJLyogUHJpbnQgb3V0IHRoZSBwcml2YXRlIHBhcnQgb2YgdGhlIGNvbm50cmFjay4gKi8KKwlpbnQgKCpwcmludF9jb25udHJhY2spKHN0cnVjdCBzZXFfZmlsZSAqcywgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKik7CisKKwkvKiBSZXR1cm5zIHZlcmRpY3QgZm9yIHBhY2tldCwgb3IgLTEgZm9yIGludmFsaWQuICovCisJaW50ICgqcGFja2V0KShzdHJ1Y3QgbmZfY29ubiAqY29ubnRyYWNrLAorCQkgICAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkgICAgICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwKKwkJICAgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCisJCSAgICAgIGludCBwZiwKKwkJICAgICAgdW5zaWduZWQgaW50IGhvb2tudW0pOworCisJLyogQ2FsbGVkIHdoZW4gYSBuZXcgY29ubmVjdGlvbiBmb3IgdGhpcyBwcm90b2NvbCBmb3VuZDsKKwkgKiByZXR1cm5zIFRSVUUgaWYgaXQncyBPSy4gIElmIHNvLCBwYWNrZXQoKSBjYWxsZWQgbmV4dC4gKi8KKwlpbnQgKCpuZXcpKHN0cnVjdCBuZl9jb25uICpjb25udHJhY2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCisJCSAgIHVuc2lnbmVkIGludCBkYXRhb2ZmKTsKKworCS8qIENhbGxlZCB3aGVuIGEgY29ubnRyYWNrIGVudHJ5IGlzIGRlc3Ryb3llZCAqLworCXZvaWQgKCpkZXN0cm95KShzdHJ1Y3QgbmZfY29ubiAqY29ubnRyYWNrKTsKKworCWludCAoKmVycm9yKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgZGF0YW9mZiwKKwkJICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvICpjdGluZm8sCisJCSAgICAgaW50IHBmLCB1bnNpZ25lZCBpbnQgaG9va251bSk7CisKKwkvKiBNb2R1bGUgKGlmIGFueSkgd2hpY2ggdGhpcyBpcyBjb25uZWN0ZWQgdG8uICovCisJc3RydWN0IG1vZHVsZSAqbWU7Cit9OworCisvKiBFeGlzdGluZyBidWlsdC1pbiBwcm90b2NvbHMgKi8KK2V4dGVybiBzdHJ1Y3QgbmZfY29ubnRyYWNrX3Byb3RvY29sIG5mX2Nvbm50cmFja19wcm90b2NvbF90Y3A2OworZXh0ZXJuIHN0cnVjdCBuZl9jb25udHJhY2tfcHJvdG9jb2wgbmZfY29ubnRyYWNrX3Byb3RvY29sX3VkcDQ7CitleHRlcm4gc3RydWN0IG5mX2Nvbm50cmFja19wcm90b2NvbCBuZl9jb25udHJhY2tfcHJvdG9jb2xfdWRwNjsKK2V4dGVybiBzdHJ1Y3QgbmZfY29ubnRyYWNrX3Byb3RvY29sIG5mX2Nvbm50cmFja19nZW5lcmljX3Byb3RvY29sOworCisjZGVmaW5lIE1BWF9ORl9DVF9QUk9UTyAyNTYKK2V4dGVybiBzdHJ1Y3QgbmZfY29ubnRyYWNrX3Byb3RvY29sICoqbmZfY3RfcHJvdG9zW1BGX01BWF07CisKK2V4dGVybiBzdHJ1Y3QgbmZfY29ubnRyYWNrX3Byb3RvY29sICoKK25mX2N0X2ZpbmRfcHJvdG8odV9pbnQxNl90IGwzcHJvdG8sIHVfaW50OF90IHByb3RvY29sKTsKKworLyogUHJvdG9jb2wgcmVnaXN0cmF0aW9uLiAqLworZXh0ZXJuIGludCBuZl9jb25udHJhY2tfcHJvdG9jb2xfcmVnaXN0ZXIoc3RydWN0IG5mX2Nvbm50cmFja19wcm90b2NvbCAqcHJvdG8pOworZXh0ZXJuIHZvaWQgbmZfY29ubnRyYWNrX3Byb3RvY29sX3VucmVnaXN0ZXIoc3RydWN0IG5mX2Nvbm50cmFja19wcm90b2NvbCAqcHJvdG8pOworCisvKiBMb2cgaW52YWxpZCBwYWNrZXRzICovCitleHRlcm4gdW5zaWduZWQgaW50IG5mX2N0X2xvZ19pbnZhbGlkOworCisjaWZkZWYgQ09ORklHX1NZU0NUTAorI2lmZGVmIERFQlVHX0lOVkFMSURfUEFDS0VUUworI2RlZmluZSBMT0dfSU5WQUxJRChwcm90bykgXAorCShuZl9jdF9sb2dfaW52YWxpZCA9PSAocHJvdG8pIHx8IG5mX2N0X2xvZ19pbnZhbGlkID09IElQUFJPVE9fUkFXKQorI2Vsc2UKKyNkZWZpbmUgTE9HX0lOVkFMSUQocHJvdG8pIFwKKwkoKG5mX2N0X2xvZ19pbnZhbGlkID09IChwcm90bykgfHwgbmZfY3RfbG9nX2ludmFsaWQgPT0gSVBQUk9UT19SQVcpIFwKKwkgJiYgbmV0X3JhdGVsaW1pdCgpKQorI2VuZGlmCisjZWxzZQorI2RlZmluZSBMT0dfSU5WQUxJRChwcm90bykgMAorI2VuZGlmIC8qIENPTkZJR19TWVNDVEwgKi8KKworI2VuZGlmIC8qX05GX0NPTk5UUkFDS19QUk9UT0NPTF9IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGUuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGNlNzkwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190dXBsZS5oCkBAIC0wLDAgKzEsMTkwIEBACisvKgorICogRGVmaW5pdGlvbnMgYW5kIERlY2xhcmF0aW9ucyBmb3IgdHVwbGUuCisgKgorICogMTYgRGVjIDIwMDM6IFlhc3V5dWtpIEtvemFrYWkgQFVTQUdJIDx5YXN1eXVraS5rb3pha2FpQHRvc2hpYmEuY28uanA+CisgKgktIGdlbmVyYWxpemUgTDMgcHJvdG9jb2wgZGVwZW5kZW50IHBhcnQuCisgKgorICogRGVyaXZlZCBmcm9tIGluY2x1ZGUvbGludXgvbmV0Zml0ZXJfaXB2NC9pcF9jb25udHJhY2tfdHVwbGUuaAorICovCisKKyNpZm5kZWYgX05GX0NPTk5UUkFDS19UVVBMRV9ICisjZGVmaW5lIF9ORl9DT05OVFJBQ0tfVFVQTEVfSAorCisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190dXBsZV9jb21tb24uaD4KKworLyogQSBgdHVwbGUnIGlzIGEgc3RydWN0dXJlIGNvbnRhaW5pbmcgdGhlIGluZm9ybWF0aW9uIHRvIHVuaXF1ZWx5CisgIGlkZW50aWZ5IGEgY29ubmVjdGlvbi4gIGllLiBpZiB0d28gcGFja2V0cyBoYXZlIHRoZSBzYW1lIHR1cGxlLCB0aGV5CisgIGFyZSBpbiB0aGUgc2FtZSBjb25uZWN0aW9uOyBpZiBub3QsIHRoZXkgYXJlIG5vdC4KKworICBXZSBkaXZpZGUgdGhlIHN0cnVjdHVyZSBhbG9uZyAibWFuaXB1bGF0YWJsZSIgYW5kCisgICJub24tbWFuaXB1bGF0YWJsZSIgbGluZXMsIGZvciB0aGUgYmVuZWZpdCBvZiB0aGUgTkFUIGNvZGUuCisqLworCisjZGVmaW5lIE5GX0NUX1RVUExFX0wzU0laRQk0CisKKy8qIFRoZSBsMyBwcm90b2NvbC1zcGVjaWZpYyBtYW5pcHVsYWJsZSBwYXJ0cyBvZiB0aGUgdHVwbGU6IGFsd2F5cyBpbgorICAgbmV0d29yayBvcmRlciEgKi8KK3VuaW9uIG5mX2Nvbm50cmFja19tYW5fbDNwcm90byB7CisJdV9pbnQzMl90IGFsbFtORl9DVF9UVVBMRV9MM1NJWkVdOworCXVfaW50MzJfdCBpcDsKKwl1X2ludDMyX3QgaXA2WzRdOworfTsKKworLyogVGhlIHByb3RvY29sLXNwZWNpZmljIG1hbmlwdWxhYmxlIHBhcnRzIG9mIHRoZSB0dXBsZTogYWx3YXlzIGluCisgICBuZXR3b3JrIG9yZGVyISAqLwordW5pb24gbmZfY29ubnRyYWNrX21hbl9wcm90bworeworCS8qIEFkZCBvdGhlciBwcm90b2NvbHMgaGVyZS4gKi8KKwl1X2ludDE2X3QgYWxsOworCisJc3RydWN0IHsKKwkJdV9pbnQxNl90IHBvcnQ7CisJfSB0Y3A7CisJc3RydWN0IHsKKwkJdV9pbnQxNl90IHBvcnQ7CisJfSB1ZHA7CisJc3RydWN0IHsKKwkJdV9pbnQxNl90IGlkOworCX0gaWNtcDsKKwlzdHJ1Y3QgeworCQl1X2ludDE2X3QgcG9ydDsKKwl9IHNjdHA7Cit9OworCisvKiBUaGUgbWFuaXB1bGFibGUgcGFydCBvZiB0aGUgdHVwbGUuICovCitzdHJ1Y3QgbmZfY29ubnRyYWNrX21hbgoreworCXVuaW9uIG5mX2Nvbm50cmFja19tYW5fbDNwcm90byB1MzsKKwl1bmlvbiBuZl9jb25udHJhY2tfbWFuX3Byb3RvIHU7CisJLyogTGF5ZXIgMyBwcm90b2NvbCAqLworCXVfaW50MTZfdCBsM251bTsKK307CisKKy8qIFRoaXMgY29udGFpbnMgdGhlIGluZm9ybWF0aW9uIHRvIGRpc3Rpbmd1aXNoIGEgY29ubmVjdGlvbi4gKi8KK3N0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUKK3sKKwlzdHJ1Y3QgbmZfY29ubnRyYWNrX21hbiBzcmM7CisKKwkvKiBUaGVzZSBhcmUgdGhlIHBhcnRzIG9mIHRoZSB0dXBsZSB3aGljaCBhcmUgZml4ZWQuICovCisJc3RydWN0IHsKKwkJdW5pb24geworCQkJdV9pbnQzMl90IGFsbFtORl9DVF9UVVBMRV9MM1NJWkVdOworCQkJdV9pbnQzMl90IGlwOworCQkJdV9pbnQzMl90IGlwNls0XTsKKwkJfSB1MzsKKwkJdW5pb24geworCQkJLyogQWRkIG90aGVyIHByb3RvY29scyBoZXJlLiAqLworCQkJdV9pbnQxNl90IGFsbDsKKworCQkJc3RydWN0IHsKKwkJCQl1X2ludDE2X3QgcG9ydDsKKwkJCX0gdGNwOworCQkJc3RydWN0IHsKKwkJCQl1X2ludDE2X3QgcG9ydDsKKwkJCX0gdWRwOworCQkJc3RydWN0IHsKKwkJCQl1X2ludDhfdCB0eXBlLCBjb2RlOworCQkJfSBpY21wOworCQkJc3RydWN0IHsKKwkJCQl1X2ludDE2X3QgcG9ydDsKKwkJCX0gc2N0cDsKKwkJfSB1OworCisJCS8qIFRoZSBwcm90b2NvbC4gKi8KKwkJdV9pbnQ4X3QgcHJvdG9udW07CisKKwkJLyogVGhlIGRpcmVjdGlvbiAoZm9yIHR1cGxlaGFzaCkgKi8KKwkJdV9pbnQ4X3QgZGlyOworCX0gZHN0OworfTsKKworLyogVGhpcyBpcyBvcHRpbWl6ZWQgb3Bwb3NlZCB0byBhIG1lbXNldCBvZiB0aGUgd2hvbGUgc3RydWN0dXJlLiAgRXZlcnl0aGluZyB3ZQorICogcmVhbGx5IGNhcmUgYWJvdXQgaXMgdGhlICBzb3VyY2UvZGVzdGluYXRpb24gdW5pb25zICovCisjZGVmaW5lIE5GX0NUX1RVUExFX1VfQkxBTksodHVwbGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCVwKKyAgICAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJXAorICAgICAgICAgICAgICAgICh0dXBsZSktPnNyYy51LmFsbCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgIAlcCisgICAgICAgICAgICAgICAgKHR1cGxlKS0+ZHN0LnUuYWxsID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgCVwKKwkJbWVtc2V0KCYodHVwbGUpLT5zcmMudTMsIDAsIHNpemVvZigodHVwbGUpLT5zcmMudTMpKTsJXAorCQltZW1zZXQoJih0dXBsZSktPmRzdC51MywgMCwgc2l6ZW9mKCh0dXBsZSktPmRzdC51MykpOwlcCisgICAgICAgIH0gd2hpbGUgKDApCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNkZWZpbmUgTkZfQ1RfRFVNUF9UVVBMRSh0cCkJCQkJCQkgICAgXAorREVCVUdQKCJ0dXBsZSAlcDogJXUgJXUgJTA0eDolMDR4OiUwNHg6JTA0eDolMDR4OiUwNHg6JTA0eDolMDR4ICVodSAtPiAlMDR4OiUwNHg6JTA0eDolMDR4OiUwNHg6JTA0eDolMDR4OiUwNHggJWh1XG4iLAkJCQkJICAgIFwKKwkodHApLCAodHApLT5zcmMubDNudW0sICh0cCktPmRzdC5wcm90b251bSwJCQkgICAgXAorCU5JUDYoKihzdHJ1Y3QgaW42X2FkZHIgKikodHApLT5zcmMudTMuYWxsKSwgbnRvaHMoKHRwKS0+c3JjLnUuYWxsKSwgXAorCU5JUDYoKihzdHJ1Y3QgaW42X2FkZHIgKikodHApLT5kc3QudTMuYWxsKSwgbnRvaHMoKHRwKS0+ZHN0LnUuYWxsKSkKKworLyogSWYgd2UncmUgdGhlIGZpcnN0IHR1cGxlLCBpdCdzIHRoZSBvcmlnaW5hbCBkaXIuICovCisjZGVmaW5lIE5GX0NUX0RJUkVDVElPTihoKQkJCQkJCVwKKwkoKGVudW0gaXBfY29ubnRyYWNrX2RpcikoaCktPnR1cGxlLmRzdC5kaXIpCisKKy8qIENvbm5lY3Rpb25zIGhhdmUgdHdvIGVudHJpZXMgaW4gdGhlIGhhc2ggdGFibGU6IG9uZSBmb3IgZWFjaCB3YXkgKi8KK3N0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaAoreworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKworCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgdHVwbGU7Cit9OworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCitzdGF0aWMgaW5saW5lIGludCBuZl9jdF90dXBsZV9zcmNfZXF1YWwoY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdDEsCisJCQkJICAgICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0MikKK3sgCisJcmV0dXJuICh0MS0+c3JjLnUzLmFsbFswXSA9PSB0Mi0+c3JjLnUzLmFsbFswXSAmJgorCQl0MS0+c3JjLnUzLmFsbFsxXSA9PSB0Mi0+c3JjLnUzLmFsbFsxXSAmJgorCQl0MS0+c3JjLnUzLmFsbFsyXSA9PSB0Mi0+c3JjLnUzLmFsbFsyXSAmJgorCQl0MS0+c3JjLnUzLmFsbFszXSA9PSB0Mi0+c3JjLnUzLmFsbFszXSAmJgorCQl0MS0+c3JjLnUuYWxsID09IHQyLT5zcmMudS5hbGwgJiYKKwkJdDEtPnNyYy5sM251bSA9PSB0Mi0+c3JjLmwzbnVtICYmCisJCXQxLT5kc3QucHJvdG9udW0gPT0gdDItPmRzdC5wcm90b251bSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG5mX2N0X3R1cGxlX2RzdF9lcXVhbChjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0MSwKKwkJCQkgICAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnQyKQoreworCXJldHVybiAodDEtPmRzdC51My5hbGxbMF0gPT0gdDItPmRzdC51My5hbGxbMF0gJiYKKwkJdDEtPmRzdC51My5hbGxbMV0gPT0gdDItPmRzdC51My5hbGxbMV0gJiYKKwkJdDEtPmRzdC51My5hbGxbMl0gPT0gdDItPmRzdC51My5hbGxbMl0gJiYKKwkJdDEtPmRzdC51My5hbGxbM10gPT0gdDItPmRzdC51My5hbGxbM10gJiYKKwkJdDEtPmRzdC51LmFsbCA9PSB0Mi0+ZHN0LnUuYWxsICYmCisJCXQxLT5zcmMubDNudW0gPT0gdDItPnNyYy5sM251bSAmJgorCQl0MS0+ZHN0LnByb3RvbnVtID09IHQyLT5kc3QucHJvdG9udW0pOworfQorCitzdGF0aWMgaW5saW5lIGludCBuZl9jdF90dXBsZV9lcXVhbChjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0MSwKKwkJCQkgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdDIpCit7CisJcmV0dXJuIG5mX2N0X3R1cGxlX3NyY19lcXVhbCh0MSwgdDIpICYmIG5mX2N0X3R1cGxlX2RzdF9lcXVhbCh0MSwgdDIpOworfQorCitzdGF0aWMgaW5saW5lIGludCBuZl9jdF90dXBsZV9tYXNrX2NtcChjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0LAorCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSwKKwkJCQkgICAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqbWFzaykKK3sKKwlpbnQgY291bnQgPSAwOworCisgICAgICAgIGZvciAoY291bnQgPSAwOyBjb3VudCA8IE5GX0NUX1RVUExFX0wzU0laRTsgY291bnQrKyl7CisgICAgICAgICAgICAgICAgaWYgKCh0LT5zcmMudTMuYWxsW2NvdW50XSBeIHR1cGxlLT5zcmMudTMuYWxsW2NvdW50XSkgJgorICAgICAgICAgICAgICAgICAgICBtYXNrLT5zcmMudTMuYWxsW2NvdW50XSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChjb3VudCA9IDA7IGNvdW50IDwgTkZfQ1RfVFVQTEVfTDNTSVpFOyBjb3VudCsrKXsKKyAgICAgICAgICAgICAgICBpZiAoKHQtPmRzdC51My5hbGxbY291bnRdIF4gdHVwbGUtPmRzdC51My5hbGxbY291bnRdKSAmCisgICAgICAgICAgICAgICAgICAgIG1hc2stPmRzdC51My5hbGxbY291bnRdKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICBpZiAoKHQtPnNyYy51LmFsbCBeIHR1cGxlLT5zcmMudS5hbGwpICYgbWFzay0+c3JjLnUuYWxsIHx8CisgICAgICAgICAgICAodC0+ZHN0LnUuYWxsIF4gdHVwbGUtPmRzdC51LmFsbCkgJiBtYXNrLT5kc3QudS5hbGwgfHwKKyAgICAgICAgICAgICh0LT5zcmMubDNudW0gXiB0dXBsZS0+c3JjLmwzbnVtKSAmIG1hc2stPnNyYy5sM251bSB8fAorICAgICAgICAgICAgKHQtPmRzdC5wcm90b251bSBeIHR1cGxlLT5kc3QucHJvdG9udW0pICYgbWFzay0+ZHN0LnByb3RvbnVtKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIHJldHVybiAxOworfQorCisjZW5kaWYgLyogX05GX0NPTk5UUkFDS19UVVBMRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRsaW5rLmggYi9pbmNsdWRlL25ldC9uZXRsaW5rLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQwYzI2YQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L25ldGxpbmsuaApAQCAtMCwwICsxLDg4MyBAQAorI2lmbmRlZiBfX05FVF9ORVRMSU5LX0gKKyNkZWZpbmUgX19ORVRfTkVUTElOS19ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGxpbmsuaD4KKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAgICAgICAgIE5ldGxpbmsgTWVzc2FnZXMgYW5kIEF0dHJpYnV0ZXMgSW50ZXJmYWNlIChBcyBTZWVuIE9uIFRWKQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZXMgSW50ZXJmYWNlCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBNZXNzYWdlIEZvcm1hdDoKKyAqICAgIDwtLS0gbmxtc2dfdG90YWxfc2l6ZShwYXlsb2FkKSAgLS0tPgorICogICAgPC0tIG5sbXNnX21zZ19zaXplKHBheWxvYWQpIC0+CisgKiAgICstLS0tLS0tLS0tKy0gLSAtKy0tLS0tLS0tLS0tLS0rLSAtIC0rLS0tLS0tLS0gLSAtCisgKiAgIHwgbmxtc2doZHIgfCBQYWQgfCAgIFBheWxvYWQgICB8IFBhZCB8IG5sbXNnaGRyCisgKiAgICstLS0tLS0tLS0tKy0gLSAtKy0tLS0tLS0tLS0tLS0rLSAtIC0rLS0tLS0tLS0gLSAtCisgKiAgIG5sbXNnX2RhdGEobmxoKS0tLV4gICAgICAgICAgICAgICAgICAgXgorICogICBubG1zZ19uZXh0KG5saCktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqCisgKiBQYXlsb2FkIEZvcm1hdDoKKyAqICAgIDwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIG5sbXNnX2xlbihubGgpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLT4KKyAqICAgIDwtLS0tLS0gaGRybGVuIC0tLS0tLT4gICAgICAgPC0gbmxtc2dfYXR0cmxlbihubGgsIGhkcmxlbikgLT4KKyAqICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLSAtIC0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgKiAgIHwgICAgIEZhbWlseSBIZWFkZXIgICAgfCBQYWQgfCAgICAgICAgICAgQXR0cmlidXRlcyAgICAgICAgICAgfAorICogICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstIC0gLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqICAgbmxtc2dfYXR0cmRhdGEobmxoLCBoZHJsZW4pLS0tXgorICoKKyAqIERhdGEgU3RydWN0dXJlczoKKyAqICAgc3RydWN0IG5sbXNnaGRyCQkJbmV0bGluayBtZXNzYWdlIGhlYWRlcgorICoKKyAqIE1lc3NhZ2UgQ29uc3RydWN0aW9uOgorICogICBubG1zZ19uZXcoKQkJCWNyZWF0ZSBhIG5ldyBuZXRsaW5rIG1lc3NhZ2UKKyAqICAgbmxtc2dfcHV0KCkJCQlhZGQgYSBuZXRsaW5rIG1lc3NhZ2UgdG8gYW4gc2tiCisgKiAgIG5sbXNnX3B1dF9hbnN3ZXIoKQkJCWNhbGxiYWNrIGJhc2VkIG5sbXNnX3B1dCgpCisgKiAgIG5sbXNnX2VuZCgpCQkJZmluYW5saXplIG5ldGxpbmsgbWVzc2FnZQorICogICBubG1zZ19jYW5jZWwoKQkJCWNhbmNlbCBtZXNzYWdlIGNvbnN0cnVjdGlvbgorICogICBubG1zZ19mcmVlKCkJCQlmcmVlIGEgbmV0bGluayBtZXNzYWdlCisgKgorICogTWVzc2FnZSBTZW5kaW5nOgorICogICBubG1zZ19tdWx0aWNhc3QoKQkJCW11bHRpY2FzdCBtZXNzYWdlIHRvIHNldmVyYWwgZ3JvdXBzCisgKiAgIG5sbXNnX3VuaWNhc3QoKQkJCXVuaWNhc3QgYSBtZXNzYWdlIHRvIGEgc2luZ2xlIHNvY2tldAorICoKKyAqIE1lc3NhZ2UgTGVuZ3RoIENhbGN1bGF0aW9uczoKKyAqICAgbmxtc2dfbXNnX3NpemUocGF5bG9hZCkJCWxlbmd0aCBvZiBtZXNzYWdlIHcvbyBwYWRkaW5nCisgKiAgIG5sbXNnX3RvdGFsX3NpemUocGF5bG9hZCkJCWxlbmd0aCBvZiBtZXNzYWdlIHcvIHBhZGRpbmcKKyAqICAgbmxtc2dfcGFkbGVuKHBheWxvYWQpCQlsZW5ndGggb2YgcGFkZGluZyBhdCB0YWlsCisgKgorICogTWVzc2FnZSBQYXlsb2FkIEFjY2VzczoKKyAqICAgbmxtc2dfZGF0YShubGgpCQkJaGVhZCBvZiBtZXNzYWdlIHBheWxvYWQKKyAqICAgbmxtc2dfbGVuKG5saCkJCQlsZW5ndGggb2YgbWVzc2FnZSBwYXlsb2FkCisgKiAgIG5sbXNnX2F0dHJkYXRhKG5saCwgaGRybGVuKQloZWFkIG9mIGF0dHJpYnV0ZXMgZGF0YQorICogICBubG1zZ19hdHRybGVuKG5saCwgaGRybGVuKQkJbGVuZ3RoIG9mIGF0dHJpYnV0ZXMgZGF0YQorICoKKyAqIE1lc3NhZ2UgUGFyc2luZzoKKyAqICAgbmxtc2dfb2sobmxoLCByZW1haW5pbmcpCQlkb2VzIG5saCBmaXQgaW50byByZW1haW5pbmcgYnl0ZXM/CisgKiAgIG5sbXNnX25leHQobmxoLCByZW1haW5pbmcpCQlnZXQgbmV4dCBuZXRsaW5rIG1lc3NhZ2UKKyAqICAgbmxtc2dfcGFyc2UoKQkJCXBhcnNlIGF0dHJpYnV0ZXMgb2YgYSBtZXNzYWdlCisgKiAgIG5sbXNnX2ZpbmRfYXR0cigpCQkJZmluZCBhbiBhdHRyaWJ1dGUgaW4gYSBtZXNzYWdlCisgKiAgIG5sbXNnX2Zvcl9lYWNoX21zZygpCQlsb29wIG92ZXIgYWxsIG1lc3NhZ2VzCisgKiAgIG5sbXNnX3ZhbGlkYXRlKCkJCQl2YWxpZGF0ZSBuZXRsaW5rIG1lc3NhZ2UgaW5jbC4gYXR0cnMKKyAqICAgbmxtc2dfZm9yX2VhY2hfYXR0cigpCQlsb29wIG92ZXIgYWxsIGF0dHJpYnV0ZXMKKyAqCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRyaWJ1dGVzIEludGVyZmFjZQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogQXR0cmlidXRlIEZvcm1hdDoKKyAqICAgIDwtLS0tLS0tIG5sYV90b3RhbF9zaXplKHBheWxvYWQpIC0tLS0tLS0+CisgKiAgICA8LS0tLSBubGFfYXR0cl9zaXplKHBheWxvYWQpIC0tLS0tPgorICogICArLS0tLS0tLS0tLSstIC0gLSstIC0gLSAtIC0gLSAtIC0gLSArLSAtIC0rLS0tLS0tLS0gLSAtCisgKiAgIHwgIEhlYWRlciAgfCBQYWQgfCAgICAgUGF5bG9hZCAgICAgIHwgUGFkIHwgIEhlYWRlcgorICogICArLS0tLS0tLS0tLSstIC0gLSstIC0gLSAtIC0gLSAtIC0gLSArLSAtIC0rLS0tLS0tLS0gLSAtCisgKiAgICAgICAgICAgICAgICAgICAgIDwtIG5sYV9sZW4obmxhKSAtPiAgICAgIF4KKyAqICAgbmxhX2RhdGEobmxhKS0tLS1eICAgICAgICAgICAgICAgICAgICAgICAgfAorICogICBubGFfbmV4dChubGEpLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0nCisgKgorICogRGF0YSBTdHJ1Y3R1cmVzOgorICogICBzdHJ1Y3QgbmxhdHRyCQkJbmV0bGluayBhdHRyaWJ0dWUgaGVhZGVyCisgKgorICogQXR0cmlidXRlIENvbnN0cnVjdGlvbjoKKyAqICAgbmxhX3Jlc2VydmUoc2tiLCB0eXBlLCBsZW4pCXJlc2VydmUgc2tiIHRhaWxyb29tIGZvciBhbiBhdHRyaWJ1dGUKKyAqICAgbmxhX3B1dChza2IsIHR5cGUsIGxlbiwgZGF0YSkJYWRkIGF0dHJpYnV0ZSB0byBza2IKKyAqCisgKiBBdHRyaWJ1dGUgQ29uc3RydWN0aW9uIGZvciBCYXNpYyBUeXBlczoKKyAqICAgbmxhX3B1dF91OChza2IsIHR5cGUsIHZhbHVlKQlhZGQgdTggYXR0cmlidXRlIHRvIHNrYgorICogICBubGFfcHV0X3UxNihza2IsIHR5cGUsIHZhbHVlKQlhZGQgdTE2IGF0dHJpYnV0ZSB0byBza2IKKyAqICAgbmxhX3B1dF91MzIoc2tiLCB0eXBlLCB2YWx1ZSkJYWRkIHUzMiBhdHRyaWJ1dGUgdG8gc2tiCisgKiAgIG5sYV9wdXRfdTY0KHNrYiwgdHlwZSwgdmFsdWUpCWFkZCB1NjQgYXR0cmlidXRlIHRvIHNrYgorICogICBubGFfcHV0X3N0cmluZyhza2IsIHR5cGUsIHN0cikJYWRkIHN0cmluZyBhdHRyaWJ1dGUgdG8gc2tiCisgKiAgIG5sYV9wdXRfZmxhZyhza2IsIHR5cGUpCQlhZGQgZmxhZyBhdHRyaWJ1dGUgdG8gc2tiCisgKiAgIG5sYV9wdXRfbXNlY3Moc2tiLCB0eXBlLCBqaWZmaWVzKQlhZGQgbXNlY3MgYXR0cmlidXRlIHRvIHNrYgorICoKKyAqIEV4Y2VwdGlvbnMgQmFzZWQgQXR0cmlidXRlIENvbnN0cnVjdGlvbjoKKyAqICAgTkxBX1BVVChza2IsIHR5cGUsIGxlbiwgZGF0YSkJYWRkIGF0dHJpYnV0ZSB0byBza2IKKyAqICAgTkxBX1BVVF9VOChza2IsIHR5cGUsIHZhbHVlKQlhZGQgdTggYXR0cmlidXRlIHRvIHNrYgorICogICBOTEFfUFVUX1UxNihza2IsIHR5cGUsIHZhbHVlKQlhZGQgdTE2IGF0dHJpYnV0ZSB0byBza2IKKyAqICAgTkxBX1BVVF9VMzIoc2tiLCB0eXBlLCB2YWx1ZSkJYWRkIHUzMiBhdHRyaWJ1dGUgdG8gc2tiCisgKiAgIE5MQV9QVVRfVTY0KHNrYiwgdHlwZSwgdmFsdWUpCWFkZCB1NjQgYXR0cmlidXRlIHRvIHNrYgorICogICBOTEFfUFVUX1NUUklORyhza2IsIHR5cGUsIHN0cikJYWRkIHN0cmluZyBhdHRyaWJ1dGUgdG8gc2tiCisgKiAgIE5MQV9QVVRfRkxBRyhza2IsIHR5cGUpCQlhZGQgZmxhZyBhdHRyaWJ1dGUgdG8gc2tiCisgKiAgIE5MQV9QVVRfTVNFQ1Moc2tiLCB0eXBlLCBqaWZmaWVzKQlhZGQgbXNlY3MgYXR0cmlidXRlIHRvIHNrYgorICoKKyAqICAgVGhlIG1lYW5pbmcgb2YgdGhlc2UgZnVuY3Rpb25zIGlzIGVxdWFsIHRvIHRoZWlyIGxvd2VyIGNhc2UKKyAqICAgdmFyaWFudHMgYnV0IHRoZXkganVtcCB0byB0aGUgbGFiZWwgbmxhX3B1dF9mYWlsdXJlIGluIGNhc2UKKyAqICAgb2YgYSBmYWlsdXJlLgorICoKKyAqIE5lc3RlZCBBdHRyaWJ1dGVzIENvbnN0cnVjdGlvbjoKKyAqICAgbmxhX25lc3Rfc3RhcnQoc2tiLCB0eXBlKQkJc3RhcnQgYSBuZXN0ZWQgYXR0cmlidXRlCisgKiAgIG5sYV9uZXN0X2VuZChza2IsIG5sYSkJCWZpbmFsaXplIGEgbmVzdGVkIGF0dHJpYnV0ZQorICogICBubGFfbmVzdF9jYW5jZWwoc2tiLCBubGEpCQljYW5jZWwgbmVzdGVkIGF0dHJpYnV0ZSBjb25zdHJ1Y3Rpb24KKyAqCisgKiBBdHRyaWJ1dGUgTGVuZ3RoIENhbGN1bGF0aW9uczoKKyAqICAgbmxhX2F0dHJfc2l6ZShwYXlsb2FkKQkJbGVuZ3RoIG9mIGF0dHJpYnV0ZSB3L28gcGFkZGluZworICogICBubGFfdG90YWxfc2l6ZShwYXlsb2FkKQkJbGVuZ3RoIG9mIGF0dHJpYnV0ZSB3LyBwYWRkaW5nCisgKiAgIG5sYV9wYWRsZW4ocGF5bG9hZCkJCWxlbmd0aCBvZiBwYWRkaW5nCisgKgorICogQXR0cmlidXRlIFBheWxvYWQgQWNjZXNzOgorICogICBubGFfZGF0YShubGEpCQkJaGVhZCBvZiBhdHRyaWJ1dGUgcGF5bG9hZAorICogICBubGFfbGVuKG5sYSkJCQlsZW5ndGggb2YgYXR0cmlidXRlIHBheWxvYWQKKyAqCisgKiBBdHRyaWJ1dGUgUGF5bG9hZCBBY2Nlc3MgZm9yIEJhc2ljIFR5cGVzOgorICogICBubGFfZ2V0X3U4KG5sYSkJCQlnZXQgcGF5bG9hZCBmb3IgYSB1OCBhdHRyaWJ1dGUKKyAqICAgbmxhX2dldF91MTYobmxhKQkJCWdldCBwYXlsb2FkIGZvciBhIHUxNiBhdHRyaWJ1dGUKKyAqICAgbmxhX2dldF91MzIobmxhKQkJCWdldCBwYXlsb2FkIGZvciBhIHUzMiBhdHRyaWJ1dGUKKyAqICAgbmxhX2dldF91NjQobmxhKQkJCWdldCBwYXlsb2FkIGZvciBhIHU2NCBhdHRyaWJ1dGUKKyAqICAgbmxhX2dldF9mbGFnKG5sYSkJCQlyZXR1cm4gMSBpZiBmbGFnIGlzIHRydWUKKyAqICAgbmxhX2dldF9tc2VjcyhubGEpCQkJZ2V0IHBheWxvYWQgZm9yIGEgbXNlY3MgYXR0cmlidXRlCisgKgorICogQXR0cmlidXRlIE1pc2M6CisgKiAgIG5sYV9tZW1jcHkoZGVzdCwgbmxhLCBjb3VudCkJY29weSBhdHRyaWJ1dGUgaW50byBtZW1vcnkKKyAqICAgbmxhX21lbWNtcChubGEsIGRhdGEsIHNpemUpCWNvbXBhcmUgYXR0cmlidXRlIHdpdGggbWVtb3J5IGFyZWEKKyAqICAgbmxhX3N0cmxjcHkoZHN0LCBubGEsIHNpemUpCWNvcHkgYXR0cmlidXRlIHRvIGEgc2l6ZWQgc3RyaW5nCisgKiAgIG5sYV9zdHJjbXAobmxhLCBzdHIpCQljb21wYXJlIGF0dHJpYnV0ZSB3aXRoIHN0cmluZworICoKKyAqIEF0dHJpYnV0ZSBQYXJzaW5nOgorICogICBubGFfb2sobmxhLCByZW1haW5pbmcpCQlkb2VzIG5sYSBmaXQgaW50byByZW1haW5pbmcgYnl0ZXM/CisgKiAgIG5sYV9uZXh0KG5sYSwgcmVtYWluaW5nKQkJZ2V0IG5leHQgbmV0bGluayBhdHRyaWJ1dGUKKyAqICAgbmxhX3ZhbGlkYXRlKCkJCQl2YWxpZGF0ZSBhIHN0cmVhbSBvZiBhdHRyaWJ1dGVzCisgKiAgIG5sYV9maW5kKCkJCQkJZmluZCBhdHRyaWJ1dGUgaW4gc3RyZWFtIG9mIGF0dHJpYnV0ZXMKKyAqICAgbmxhX3BhcnNlKCkJCQlwYXJzZSBhbmQgdmFsaWRhdGUgc3RyZWFtIG9mIGF0dHJzCisgKiAgIG5sYV9wYXJzZV9uZXN0ZWQoKQkJCXBhcnNlIG5lc3RlZCBhdHRyaWJ1ZXRzCisgKiAgIG5sYV9mb3JfZWFjaF9hdHRyKCkJCWxvb3Agb3ZlciBhbGwgYXR0cmlidXRlcworICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworIC8qKgorICAqIFN0YW5kYXJkIGF0dHJpYnV0ZSB0eXBlcyB0byBzcGVjaWZ5IHZhbGlkYXRpb24gcG9saWN5CisgICovCitlbnVtIHsKKwlOTEFfVU5TUEVDLAorCU5MQV9VOCwKKwlOTEFfVTE2LAorCU5MQV9VMzIsCisJTkxBX1U2NCwKKwlOTEFfU1RSSU5HLAorCU5MQV9GTEFHLAorCU5MQV9NU0VDUywKKwlOTEFfTkVTVEVELAorCV9fTkxBX1RZUEVfTUFYLAorfTsKKworI2RlZmluZSBOTEFfVFlQRV9NQVggKF9fTkxBX1RZUEVfTUFYIC0gMSkKKworLyoqCisgKiBzdHJ1Y3QgbmxhX3BvbGljeSAtIGF0dHJpYnV0ZSB2YWxpZGF0aW9uIHBvbGljeQorICogQHR5cGU6IFR5cGUgb2YgYXR0cmlidXRlIG9yIE5MQV9VTlNQRUMKKyAqIEBtaW5sZW46IE1pbmltYWwgbGVuZ3RoIG9mIHBheWxvYWQgcmVxdWlyZWQgdG8gYmUgYXZhaWxhYmxlCisgKgorICogUG9saWNpZXMgYXJlIGRlZmluZWQgYXMgYXJyYXlzIG9mIHRoaXMgc3RydWN0LCB0aGUgYXJyYXkgbXVzdCBiZQorICogYWNjZXNzaWJsZSBieSBhdHRyaWJ1dGUgdHlwZSB1cCB0byB0aGUgaGlnaGVzdCBpZGVudGlmaWVyIHRvIGJlIGV4cGVjdGVkLgorICoKKyAqIEV4YW1wbGU6CisgKiBzdGF0aWMgc3RydWN0IG5sYV9wb2xpY3kgbXlfcG9saWN5W0FUVFJfTUFYKzFdIF9fcmVhZF9tb3N0bHkgPSB7CisgKiAJW0FUVFJfRk9PXSA9IHsgLnR5cGUgPSBOTEFfVTE2IH0sCisgKglbQVRUUl9CQVJdID0geyAudHlwZSA9IE5MQV9TVFJJTkcgfSwKKyAqCVtBVFRSX0JBWl0gPSB7IC5taW5sZW4gPSBzaXplb2Yoc3RydWN0IG15c3RydWN0KSB9LAorICogfTsKKyAqLworc3RydWN0IG5sYV9wb2xpY3kgeworCXUxNgkJdHlwZTsKKwl1MTYJCW1pbmxlbjsKK307CisKK2V4dGVybiB2b2lkCQluZXRsaW5rX3J1bl9xdWV1ZShzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCAqcWxlbiwKKwkJCQkJICBpbnQgKCpjYikoc3RydWN0IHNrX2J1ZmYgKiwKKwkJCQkJCSAgICBzdHJ1Y3Qgbmxtc2doZHIgKiwgaW50ICopKTsKK2V4dGVybiB2b2lkCQluZXRsaW5rX3F1ZXVlX3NraXAoc3RydWN0IG5sbXNnaGRyICpubGgsCisJCQkJCSAgIHN0cnVjdCBza19idWZmICpza2IpOworCitleHRlcm4gaW50CQlubGFfdmFsaWRhdGUoc3RydWN0IG5sYXR0ciAqaGVhZCwgaW50IGxlbiwgaW50IG1heHR5cGUsCisJCQkJICAgICBzdHJ1Y3QgbmxhX3BvbGljeSAqcG9saWN5KTsKK2V4dGVybiBpbnQJCW5sYV9wYXJzZShzdHJ1Y3QgbmxhdHRyICp0YltdLCBpbnQgbWF4dHlwZSwKKwkJCQkgIHN0cnVjdCBubGF0dHIgKmhlYWQsIGludCBsZW4sCisJCQkJICBzdHJ1Y3QgbmxhX3BvbGljeSAqcG9saWN5KTsKK2V4dGVybiBzdHJ1Y3QgbmxhdHRyICoJbmxhX2ZpbmQoc3RydWN0IG5sYXR0ciAqaGVhZCwgaW50IGxlbiwgaW50IGF0dHJ0eXBlKTsKK2V4dGVybiBzaXplX3QJCW5sYV9zdHJsY3B5KGNoYXIgKmRzdCwgY29uc3Qgc3RydWN0IG5sYXR0ciAqbmxhLAorCQkJCSAgICBzaXplX3QgZHN0c2l6ZSk7CitleHRlcm4gaW50CQlubGFfbWVtY3B5KHZvaWQgKmRlc3QsIHN0cnVjdCBubGF0dHIgKnNyYywgaW50IGNvdW50KTsKK2V4dGVybiBpbnQJCW5sYV9tZW1jbXAoY29uc3Qgc3RydWN0IG5sYXR0ciAqbmxhLCBjb25zdCB2b2lkICpkYXRhLAorCQkJCSAgIHNpemVfdCBzaXplKTsKK2V4dGVybiBpbnQJCW5sYV9zdHJjbXAoY29uc3Qgc3RydWN0IG5sYXR0ciAqbmxhLCBjb25zdCBjaGFyICpzdHIpOworZXh0ZXJuIHN0cnVjdCBubGF0dHIgKglfX25sYV9yZXNlcnZlKHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRydHlwZSwKKwkJCQkgICAgICBpbnQgYXR0cmxlbik7CitleHRlcm4gc3RydWN0IG5sYXR0ciAqCW5sYV9yZXNlcnZlKHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRydHlwZSwKKwkJCQkgICAgaW50IGF0dHJsZW4pOworZXh0ZXJuIHZvaWQJCV9fbmxhX3B1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYXR0cnR5cGUsCisJCQkJICBpbnQgYXR0cmxlbiwgY29uc3Qgdm9pZCAqZGF0YSk7CitleHRlcm4gaW50CQlubGFfcHV0KHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRydHlwZSwKKwkJCQlpbnQgYXR0cmxlbiwgY29uc3Qgdm9pZCAqZGF0YSk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTmV0bGluayBNZXNzYWdlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIG5sbXNnX21zZ19zaXplIC0gbGVuZ3RoIG9mIG5ldGxpbmsgbWVzc2FnZSBub3QgaW5jbHVkaW5nIHBhZGRpbmcKKyAqIEBwYXlsb2FkOiBsZW5ndGggb2YgbWVzc2FnZSBwYXlsb2FkCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IG5sbXNnX21zZ19zaXplKGludCBwYXlsb2FkKQoreworCXJldHVybiBOTE1TR19IRFJMRU4gKyBwYXlsb2FkOworfQorCisvKioKKyAqIG5sbXNnX3RvdGFsX3NpemUgLSBsZW5ndGggb2YgbmV0bGluayBtZXNzYWdlIGluY2x1ZGluZyBwYWRkaW5nCisgKiBAcGF5bG9hZDogbGVuZ3RoIG9mIG1lc3NhZ2UgcGF5bG9hZAorICovCitzdGF0aWMgaW5saW5lIGludCBubG1zZ190b3RhbF9zaXplKGludCBwYXlsb2FkKQoreworCXJldHVybiBOTE1TR19BTElHTihubG1zZ19tc2dfc2l6ZShwYXlsb2FkKSk7Cit9CisKKy8qKgorICogbmxtc2dfcGFkbGVuIC0gbGVuZ3RoIG9mIHBhZGRpbmcgYXQgdGhlIG1lc3NhZ2UncyB0YWlsCisgKiBAcGF5bG9hZDogbGVuZ3RoIG9mIG1lc3NhZ2UgcGF5bG9hZAorICovCitzdGF0aWMgaW5saW5lIGludCBubG1zZ19wYWRsZW4oaW50IHBheWxvYWQpCit7CisJcmV0dXJuIG5sbXNnX3RvdGFsX3NpemUocGF5bG9hZCkgLSBubG1zZ19tc2dfc2l6ZShwYXlsb2FkKTsKK30KKworLyoqCisgKiBubG1zZ19kYXRhIC0gaGVhZCBvZiBtZXNzYWdlIHBheWxvYWQKKyAqIEBubGg6IG5ldGxpbmsgbWVzc3NhZ2UgaGVhZGVyCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCAqbmxtc2dfZGF0YShjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCkKK3sKKwlyZXR1cm4gKHVuc2lnbmVkIGNoYXIgKikgbmxoICsgTkxNU0dfSERSTEVOOworfQorCisvKioKKyAqIG5sbXNnX2xlbiAtIGxlbmd0aCBvZiBtZXNzYWdlIHBheWxvYWQKKyAqIEBubGg6IG5ldGxpbmsgbWVzc2FnZSBoZWFkZXIKKyAqLworc3RhdGljIGlubGluZSBpbnQgbmxtc2dfbGVuKGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoKQoreworCXJldHVybiBubGgtPm5sbXNnX2xlbiAtIE5MTVNHX0hEUkxFTjsKK30KKworLyoqCisgKiBubG1zZ19hdHRyZGF0YSAtIGhlYWQgb2YgYXR0cmlidXRlcyBkYXRhCisgKiBAbmxoOiBuZXRsaW5rIG1lc3NhZ2UgaGVhZGVyCisgKiBAaGRybGVuOiBsZW5ndGggb2YgZmFtaWx5IHNwZWNpZmljIGhlYWRlcgorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBubGF0dHIgKm5sbXNnX2F0dHJkYXRhKGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLAorCQkJCQkgICAgaW50IGhkcmxlbikKK3sKKwl1bnNpZ25lZCBjaGFyICpkYXRhID0gbmxtc2dfZGF0YShubGgpOworCXJldHVybiAoc3RydWN0IG5sYXR0ciAqKSAoZGF0YSArIE5MTVNHX0FMSUdOKGhkcmxlbikpOworfQorCisvKioKKyAqIG5sbXNnX2F0dHJsZW4gLSBsZW5ndGggb2YgYXR0cmlidXRlcyBkYXRhCisgKiBAbmxoOiBuZXRsaW5rIG1lc3NhZ2UgaGVhZGVyCisgKiBAaGRybGVuOiBsZW5ndGggb2YgZmFtaWx5IHNwZWNpZmljIGhlYWRlcgorICovCitzdGF0aWMgaW5saW5lIGludCBubG1zZ19hdHRybGVuKGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLCBpbnQgaGRybGVuKQoreworCXJldHVybiBubG1zZ19sZW4obmxoKSAtIE5MTVNHX0FMSUdOKGhkcmxlbik7Cit9CisKKy8qKgorICogbmxtc2dfb2sgLSBjaGVjayBpZiB0aGUgbmV0bGluayBtZXNzYWdlIGZpdHMgaW50byB0aGUgcmVtYWluaW5nIGJ5dGVzCisgKiBAbmxoOiBuZXRsaW5rIG1lc3NhZ2UgaGVhZGVyCisgKiBAcmVtYWluaW5nOiBudW1iZXIgb2YgYnl0ZXMgcmVtYWluaW5nIGluIG1lc3NhZ2Ugc3RyZWFtCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IG5sbXNnX29rKGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLCBpbnQgcmVtYWluaW5nKQoreworCXJldHVybiAocmVtYWluaW5nID49IHNpemVvZihzdHJ1Y3Qgbmxtc2doZHIpICYmCisJCW5saC0+bmxtc2dfbGVuID49IHNpemVvZihzdHJ1Y3Qgbmxtc2doZHIpICYmCisJCW5saC0+bmxtc2dfbGVuIDw9IHJlbWFpbmluZyk7Cit9CisKKy8qKgorICogbmxtc2dfbmV4dCAtIG5leHQgbmV0bGluayBtZXNzYWdlIGluIG1lc3NhZ2Ugc3RyZWFtCisgKiBAbmxoOiBuZXRsaW5rIG1lc3NhZ2UgaGVhZGVyCisgKiBAcmVtYWluaW5nOiBudW1iZXIgb2YgYnl0ZXMgcmVtYWluaW5nIGluIG1lc3NhZ2Ugc3RyZWFtCisgKgorICogUmV0dXJucyB0aGUgbmV4dCBuZXRsaW5rIG1lc3NhZ2UgaW4gdGhlIG1lc3NhZ2Ugc3RyZWFtIGFuZAorICogZGVjcmVtZW50cyByZW1haW5pbmcgYnkgdGhlIHNpemUgb2YgdGhlIGN1cnJlbnQgbWVzc2FnZS4KKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3Qgbmxtc2doZHIgKm5sbXNnX25leHQoc3RydWN0IG5sbXNnaGRyICpubGgsIGludCAqcmVtYWluaW5nKQoreworCWludCB0b3RsZW4gPSBOTE1TR19BTElHTihubGgtPm5sbXNnX2xlbik7CisKKwkqcmVtYWluaW5nIC09IHRvdGxlbjsKKworCXJldHVybiAoc3RydWN0IG5sbXNnaGRyICopICgodW5zaWduZWQgY2hhciAqKSBubGggKyB0b3RsZW4pOworfQorCisvKioKKyAqIG5sbXNnX3BhcnNlIC0gcGFyc2UgYXR0cmlidXRlcyBvZiBhIG5ldGxpbmsgbWVzc2FnZQorICogQG5saDogbmV0bGluayBtZXNzYWdlIGhlYWRlcgorICogQGhkcmxlbjogbGVuZ3RoIG9mIGZhbWlseSBzcGVjaWZpYyBoZWFkZXIKKyAqIEB0YjogZGVzdGluYXRpb24gYXJyYXkgd2l0aCBtYXh0eXBlKzEgZWxlbWVudHMKKyAqIEBtYXh0eXBlOiBtYXhpbXVtIGF0dHJpYnV0ZSB0eXBlIHRvIGJlIGV4cGVjdGVkCisgKiBAcG9saWN5OiB2YWxpZGF0aW9uIHBvbGljeQorICoKKyAqIFNlZSBubGFfcGFyc2UoKQorICovCitzdGF0aWMgaW5saW5lIGludCBubG1zZ19wYXJzZShzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgaW50IGhkcmxlbiwKKwkJCSAgICAgIHN0cnVjdCBubGF0dHIgKnRiW10sIGludCBtYXh0eXBlLAorCQkJICAgICAgc3RydWN0IG5sYV9wb2xpY3kgKnBvbGljeSkKK3sKKwlpZiAobmxoLT5ubG1zZ19sZW4gPCBubG1zZ19tc2dfc2l6ZShoZHJsZW4pKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBubGFfcGFyc2UodGIsIG1heHR5cGUsIG5sbXNnX2F0dHJkYXRhKG5saCwgaGRybGVuKSwKKwkJCSBubG1zZ19hdHRybGVuKG5saCwgaGRybGVuKSwgcG9saWN5KTsKK30KKworLyoqCisgKiBubG1zZ19maW5kX2F0dHIgLSBmaW5kIGEgc3BlY2lmaWMgYXR0cmlidXRlIGluIGEgbmV0bGluayBtZXNzYWdlCisgKiBAbmxoOiBuZXRsaW5rIG1lc3NhZ2UgaGVhZGVyCisgKiBAaGRybGVuOiBsZW5ndGggb2YgZmFtaWxpeSBzcGVjaWZpYyBoZWFkZXIKKyAqIEBhdHRydHlwZTogdHlwZSBvZiBhdHRyaWJ1dGUgdG8gbG9vayBmb3IKKyAqCisgKiBSZXR1cm5zIHRoZSBmaXJzdCBhdHRyaWJ1dGUgd2hpY2ggbWF0Y2hlcyB0aGUgc3BlY2lmaWVkIHR5cGUuCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IG5sYXR0ciAqbmxtc2dfZmluZF9hdHRyKHN0cnVjdCBubG1zZ2hkciAqbmxoLAorCQkJCQkgICAgIGludCBoZHJsZW4sIGludCBhdHRydHlwZSkKK3sKKwlyZXR1cm4gbmxhX2ZpbmQobmxtc2dfYXR0cmRhdGEobmxoLCBoZHJsZW4pLAorCQkJbmxtc2dfYXR0cmxlbihubGgsIGhkcmxlbiksIGF0dHJ0eXBlKTsKK30KKworLyoqCisgKiBubG1zZ192YWxpZGF0ZSAtIHZhbGlkYXRlIGEgbmV0bGluayBtZXNzYWdlIGluY2x1ZGluZyBhdHRyaWJ1dGVzCisgKiBAbmxoOiBuZXRsaW5rZXQgbWVzc2FnZSBoZWFkZXIKKyAqIEBoZHJsZW46IGxlbmd0aCBvZiBmYW1pbGl5IHNwZWNpZmljIGhlYWRlcgorICogQG1heHR5cGU6IG1heGltdW0gYXR0cmlidXRlIHR5cGUgdG8gYmUgZXhwZWN0ZWQKKyAqIEBwb2xpY3k6IHZhbGlkYXRpb24gcG9saWN5CisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IG5sbXNnX3ZhbGlkYXRlKHN0cnVjdCBubG1zZ2hkciAqbmxoLCBpbnQgaGRybGVuLCBpbnQgbWF4dHlwZSwKKwkJCQkgc3RydWN0IG5sYV9wb2xpY3kgKnBvbGljeSkKK3sKKwlpZiAobmxoLT5ubG1zZ19sZW4gPCBubG1zZ19tc2dfc2l6ZShoZHJsZW4pKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBubGFfdmFsaWRhdGUobmxtc2dfYXR0cmRhdGEobmxoLCBoZHJsZW4pLAorCQkJICAgIG5sbXNnX2F0dHJsZW4obmxoLCBoZHJsZW4pLCBtYXh0eXBlLCBwb2xpY3kpOworfQorCisvKioKKyAqIG5sbXNnX2Zvcl9lYWNoX2F0dHIgLSBpdGVyYXRlIG92ZXIgYSBzdHJlYW0gb2YgYXR0cmlidXRlcworICogQHBvczogbG9vcCBjb3VudGVyLCBzZXQgdG8gY3VycmVudCBhdHRyaWJ1dGUKKyAqIEBubGg6IG5ldGxpbmsgbWVzc2FnZSBoZWFkZXIKKyAqIEBoZHJsZW46IGxlbmd0aCBvZiBmYW1pbGl5IHNwZWNpZmljIGhlYWRlcgorICogQHJlbTogaW5pdGlhbGl6ZWQgdG8gbGVuLCBob2xkcyBieXRlcyBjdXJyZW50bHkgcmVtYWluaW5nIGluIHN0cmVhbQorICovCisjZGVmaW5lIG5sbXNnX2Zvcl9lYWNoX2F0dHIocG9zLCBubGgsIGhkcmxlbiwgcmVtKSBcCisJbmxhX2Zvcl9lYWNoX2F0dHIocG9zLCBubG1zZ19hdHRyZGF0YShubGgsIGhkcmxlbiksIFwKKwkJCSAgbmxtc2dfYXR0cmxlbihubGgsIGhkcmxlbiksIHJlbSkKKworI2lmIDAKKy8qIEZJWE1FOiBFbmFibGUgb25jZSBhbGwgdXNlcnMgaGF2ZSBiZWVuIGNvbnZlcnRlZCAqLworCisvKioKKyAqIF9fbmxtc2dfcHV0IC0gQWRkIGEgbmV3IG5ldGxpbmsgbWVzc2FnZSB0byBhbiBza2IKKyAqIEBza2I6IHNvY2tldCBidWZmZXIgdG8gc3RvcmUgbWVzc2FnZSBpbgorICogQHBpZDogbmV0bGluayBwcm9jZXNzIGlkCisgKiBAc2VxOiBzZXF1ZW5jZSBudW1iZXIgb2YgbWVzc2FnZQorICogQHR5cGU6IG1lc3NhZ2UgdHlwZQorICogQHBheWxvYWQ6IGxlbmd0aCBvZiBtZXNzYWdlIHBheWxvYWQKKyAqIEBmbGFnczogbWVzc2FnZSBmbGFncworICoKKyAqIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgdG8gZW5zdXJlIHRoYXQgdGhlIHNrYiBwcm92aWRlcyBlbm91Z2gKKyAqIHRhaWxyb29tIGZvciBib3RoIHRoZSBuZXRsaW5rIGhlYWRlciBhbmQgcGF5bG9hZC4KKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3Qgbmxtc2doZHIgKl9fbmxtc2dfcHV0KHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsCisJCQkJCSAgIHUzMiBzZXEsIGludCB0eXBlLCBpbnQgcGF5bG9hZCwKKwkJCQkJICAgaW50IGZsYWdzKQoreworCXN0cnVjdCBubG1zZ2hkciAqbmxoOworCisJbmxoID0gKHN0cnVjdCBubG1zZ2hkciAqKSBza2JfcHV0KHNrYiwgbmxtc2dfdG90YWxfc2l6ZShwYXlsb2FkKSk7CisJbmxoLT5ubG1zZ190eXBlID0gdHlwZTsKKwlubGgtPm5sbXNnX2xlbiA9IG5sbXNnX21zZ19zaXplKHBheWxvYWQpOworCW5saC0+bmxtc2dfZmxhZ3MgPSBmbGFnczsKKwlubGgtPm5sbXNnX3BpZCA9IHBpZDsKKwlubGgtPm5sbXNnX3NlcSA9IHNlcTsKKworCW1lbXNldCgodW5zaWduZWQgY2hhciAqKSBubG1zZ19kYXRhKG5saCkgKyBwYXlsb2FkLCAwLAorCSAgICAgICBubG1zZ19wYWRsZW4ocGF5bG9hZCkpOworCisJcmV0dXJuIG5saDsKK30KKyNlbmRpZgorCisvKioKKyAqIG5sbXNnX3B1dCAtIEFkZCBhIG5ldyBuZXRsaW5rIG1lc3NhZ2UgdG8gYW4gc2tiCisgKiBAc2tiOiBzb2NrZXQgYnVmZmVyIHRvIHN0b3JlIG1lc3NhZ2UgaW4KKyAqIEBwaWQ6IG5ldGxpbmsgcHJvY2VzcyBpZAorICogQHNlcTogc2VxdWVuY2UgbnVtYmVyIG9mIG1lc3NhZ2UKKyAqIEB0eXBlOiBtZXNzYWdlIHR5cGUKKyAqIEBwYXlsb2FkOiBsZW5ndGggb2YgbWVzc2FnZSBwYXlsb2FkCisgKiBAZmxhZ3M6IG1lc3NhZ2UgZmxhZ3MKKyAqCisgKiBSZXR1cm5zIE5VTEwgaWYgdGhlIHRhaWxyb29tIG9mIHRoZSBza2IgaXMgaW5zdWZmaWNpZW50IHRvIHN0b3JlCisgKiB0aGUgbWVzc2FnZSBoZWFkZXIgYW5kIHBheWxvYWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IG5sbXNnaGRyICpubG1zZ19wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSwKKwkJCQkJIGludCB0eXBlLCBpbnQgcGF5bG9hZCwgaW50IGZsYWdzKQoreworCWlmICh1bmxpa2VseShza2JfdGFpbHJvb20oc2tiKSA8IG5sbXNnX3RvdGFsX3NpemUocGF5bG9hZCkpKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBfX25sbXNnX3B1dChza2IsIHBpZCwgc2VxLCB0eXBlLCBwYXlsb2FkLCBmbGFncyk7Cit9CisKKy8qKgorICogbmxtc2dfcHV0X2Fuc3dlciAtIEFkZCBhIG5ldyBjYWxsYmFjayBiYXNlZCBuZXRsaW5rIG1lc3NhZ2UgdG8gYW4gc2tiCisgKiBAc2tiOiBzb2NrZXQgYnVmZmVyIHRvIHN0b3JlIG1lc3NhZ2UgaW4KKyAqIEBjYjogbmV0bGluayBjYWxsYmFjaworICogQHR5cGU6IG1lc3NhZ2UgdHlwZQorICogQHBheWxvYWQ6IGxlbmd0aCBvZiBtZXNzYWdlIHBheWxvYWQKKyAqIEBmbGFnczogbWVzc2FnZSBmbGFncworICoKKyAqIFJldHVybnMgTlVMTCBpZiB0aGUgdGFpbHJvb20gb2YgdGhlIHNrYiBpcyBpbnN1ZmZpY2llbnQgdG8gc3RvcmUKKyAqIHRoZSBtZXNzYWdlIGhlYWRlciBhbmQgcGF5bG9hZC4KKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3Qgbmxtc2doZHIgKm5sbXNnX3B1dF9hbnN3ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJCXN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYiwKKwkJCQkJCWludCB0eXBlLCBpbnQgcGF5bG9hZCwKKwkJCQkJCWludCBmbGFncykKK3sKKwlyZXR1cm4gbmxtc2dfcHV0KHNrYiwgTkVUTElOS19DQihjYi0+c2tiKS5waWQsIGNiLT5ubGgtPm5sbXNnX3NlcSwKKwkJCSB0eXBlLCBwYXlsb2FkLCBmbGFncyk7Cit9CisKKy8qKgorICogbmxtc2dfbmV3IC0gQWxsb2NhdGUgYSBuZXcgbmV0bGluayBtZXNzYWdlCisgKiBAc2l6ZTogbWF4aW11bSBzaXplIG9mIG1lc3NhZ2UKKyAqCisgKiBVc2UgTkxNU0dfR09PRFNJWkUgaWYgc2l6ZSBpc24ndCBrbm93IGFuZCB5b3UgbmVlZCBhIGdvb2QgZGVmYXVsdCBzaXplLgorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpubG1zZ19uZXcoaW50IHNpemUpCit7CisJcmV0dXJuIGFsbG9jX3NrYihOTE1TR19HT09EU0laRSwgR0ZQX0tFUk5FTCk7Cit9CisKKy8qKgorICogbmxtc2dfZW5kIC0gRmluYWxpemUgYSBuZXRsaW5rIG1lc3NhZ2UKKyAqIEBza2I6IHNvY2tldCBidWZmZXIgdGhlIG1lc3NhZ2UgaXMgc3RvcmVkIGluCisgKiBAbmxoOiBuZXRsaW5rIG1lc3NhZ2UgaGVhZGVyCisgKgorICogQ29ycmVjdHMgdGhlIG5ldGxpbmsgbWVzc2FnZSBoZWFkZXIgdG8gaW5jbHVkZSB0aGUgYXBwZW5lZGVkCisgKiBhdHRyaWJ1dGVzLiBPbmx5IG5lY2Vzc2FyeSBpZiBhdHRyaWJ1dGVzIGhhdmUgYmVlbiBhZGRlZCB0bworICogdGhlIG1lc3NhZ2UuCisgKgorICogUmV0dXJucyB0aGUgdG90YWwgZGF0YSBsZW5ndGggb2YgdGhlIHNrYi4KKyAqLworc3RhdGljIGlubGluZSBpbnQgbmxtc2dfZW5kKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoKQoreworCW5saC0+bmxtc2dfbGVuID0gc2tiLT50YWlsIC0gKHVuc2lnbmVkIGNoYXIgKikgbmxoOworCisJcmV0dXJuIHNrYi0+bGVuOworfQorCisvKioKKyAqIG5sbXNnX2NhbmNlbCAtIENhbmNlbCBjb25zdHJ1Y3Rpb24gb2YgYSBuZXRsaW5rIG1lc3NhZ2UKKyAqIEBza2I6IHNvY2tldCBidWZmZXIgdGhlIG1lc3NhZ2UgaXMgc3RvcmVkIGluCisgKiBAbmxoOiBuZXRsaW5rIG1lc3NhZ2UgaGVhZGVyCisgKgorICogUmVtb3ZlcyB0aGUgY29tcGxldGUgbmV0bGluayBtZXNzYWdlIGluY2x1ZGluZyBhbGwKKyAqIGF0dHJpYnV0ZXMgZnJvbSB0aGUgc29ja2V0IGJ1ZmZlciBhZ2Fpbi4gUmV0dXJucyAtMS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgbmxtc2dfY2FuY2VsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoKQoreworCXNrYl90cmltKHNrYiwgKHVuc2lnbmVkIGNoYXIgKikgbmxoIC0gc2tiLT5kYXRhKTsKKworCXJldHVybiAtMTsKK30KKworLyoqCisgKiBubG1zZ19mcmVlIC0gZnJlZSBhIG5ldGxpbmsgbWVzc2FnZQorICogQHNrYjogc29ja2V0IGJ1ZmZlciBvZiBuZXRsaW5rIG1lc3NhZ2UKKyAqLworc3RhdGljIGlubGluZSB2b2lkIG5sbXNnX2ZyZWUoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlrZnJlZV9za2Ioc2tiKTsKK30KKworLyoqCisgKiBubG1zZ19tdWx0aWNhc3QgLSBtdWx0aWNhc3QgYSBuZXRsaW5rIG1lc3NhZ2UKKyAqIEBzazogbmV0bGluayBzb2NrZXQgdG8gc3ByZWFkIG1lc3NhZ2VzIHRvCisgKiBAc2tiOiBuZXRsaW5rIG1lc3NhZ2UgYXMgc29ja2V0IGJ1ZmZlcgorICogQHBpZDogb3duIG5ldGxpbmsgcGlkIHRvIGF2b2lkIHNlbmRpbmcgdG8geW91cnNlbGYKKyAqIEBncm91cDogbXVsdGljYXN0IGdyb3VwIGlkCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IG5sbXNnX211bHRpY2FzdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICB1MzIgcGlkLCB1bnNpZ25lZCBpbnQgZ3JvdXApCit7CisJaW50IGVycjsKKworCU5FVExJTktfQ0Ioc2tiKS5kc3RfZ3JvdXAgPSBncm91cDsKKworCWVyciA9IG5ldGxpbmtfYnJvYWRjYXN0KHNrLCBza2IsIHBpZCwgZ3JvdXAsIEdGUF9LRVJORUwpOworCWlmIChlcnIgPiAwKQorCQllcnIgPSAwOworCisJcmV0dXJuIGVycjsKK30KKworLyoqCisgKiBubG1zZ191bmljYXN0IC0gdW5pY2FzdCBhIG5ldGxpbmsgbWVzc2FnZQorICogQHNrOiBuZXRsaW5rIHNvY2tldCB0byBzcHJlYWQgbWVzc2FnZSB0bworICogQHNrYjogbmV0bGluayBtZXNzYWdlIGFzIHNvY2tldCBidWZmZXIKKyAqIEBwaWQ6IG5ldGxpbmsgcGlkIG9mIHRoZSBkZXN0aW5hdGlvbiBzb2NrZXQKKyAqLworc3RhdGljIGlubGluZSBpbnQgbmxtc2dfdW5pY2FzdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQpCit7CisJaW50IGVycjsKKworCWVyciA9IG5ldGxpbmtfdW5pY2FzdChzaywgc2tiLCBwaWQsIE1TR19ET05UV0FJVCk7CisJaWYgKGVyciA+IDApCisJCWVyciA9IDA7CisKKwlyZXR1cm4gZXJyOworfQorCisvKioKKyAqIG5sbXNnX2Zvcl9lYWNoX21zZyAtIGl0ZXJhdGUgb3ZlciBhIHN0cmVhbSBvZiBtZXNzYWdlcworICogQHBvczogbG9vcCBjb3VudGVyLCBzZXQgdG8gY3VycmVudCBtZXNzYWdlCisgKiBAaGVhZDogaGVhZCBvZiBtZXNzYWdlIHN0cmVhbQorICogQGxlbjogbGVuZ3RoIG9mIG1lc3NhZ2Ugc3RyZWFtCisgKiBAcmVtOiBpbml0aWFsaXplZCB0byBsZW4sIGhvbGRzIGJ5dGVzIGN1cnJlbnRseSByZW1haW5pbmcgaW4gc3RyZWFtCisgKi8KKyNkZWZpbmUgbmxtc2dfZm9yX2VhY2hfbXNnKHBvcywgaGVhZCwgbGVuLCByZW0pIFwKKwlmb3IgKHBvcyA9IGhlYWQsIHJlbSA9IGxlbjsgXAorCSAgICAgbmxtc2dfb2socG9zLCByZW0pOyBcCisJICAgICBwb3MgPSBubG1zZ19uZXh0KHBvcywgJihyZW0pKSkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBOZXRsaW5rIEF0dHJpYnV0ZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBubGFfYXR0cl9zaXplIC0gbGVuZ3RoIG9mIGF0dHJpYnV0ZSBub3QgaW5jbHVkaW5nIHBhZGRpbmcKKyAqIEBwYXlsb2FkOiBsZW5ndGggb2YgcGF5bG9hZAorICovCitzdGF0aWMgaW5saW5lIGludCBubGFfYXR0cl9zaXplKGludCBwYXlsb2FkKQoreworCXJldHVybiBOTEFfSERSTEVOICsgcGF5bG9hZDsKK30KKworLyoqCisgKiBubGFfdG90YWxfc2l6ZSAtIHRvdGFsIGxlbmd0aCBvZiBhdHRyaWJ1dGUgaW5jbHVkaW5nIHBhZGRpbmcKKyAqIEBwYXlsb2FkOiBsZW5ndGggb2YgcGF5bG9hZAorICovCitzdGF0aWMgaW5saW5lIGludCBubGFfdG90YWxfc2l6ZShpbnQgcGF5bG9hZCkKK3sKKwlyZXR1cm4gTkxBX0FMSUdOKG5sYV9hdHRyX3NpemUocGF5bG9hZCkpOworfQorCisvKioKKyAqIG5sYV9wYWRsZW4gLSBsZW5ndGggb2YgcGFkZGluZyBhdCB0aGUgdGFpbCBvZiBhdHRyaWJ1dGUKKyAqIEBwYXlsb2FkOiBsZW5ndGggb2YgcGF5bG9hZAorICovCitzdGF0aWMgaW5saW5lIGludCBubGFfcGFkbGVuKGludCBwYXlsb2FkKQoreworCXJldHVybiBubGFfdG90YWxfc2l6ZShwYXlsb2FkKSAtIG5sYV9hdHRyX3NpemUocGF5bG9hZCk7Cit9CisKKy8qKgorICogbmxhX2RhdGEgLSBoZWFkIG9mIHBheWxvYWQKKyAqIEBubGE6IG5ldGxpbmsgYXR0cmlidXRlCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCAqbmxhX2RhdGEoY29uc3Qgc3RydWN0IG5sYXR0ciAqbmxhKQoreworCXJldHVybiAoY2hhciAqKSBubGEgKyBOTEFfSERSTEVOOworfQorCisvKioKKyAqIG5sYV9sZW4gLSBsZW5ndGggb2YgcGF5bG9hZAorICogQG5sYTogbmV0bGluayBhdHRyaWJ1dGUKKyAqLworc3RhdGljIGlubGluZSBpbnQgbmxhX2xlbihjb25zdCBzdHJ1Y3QgbmxhdHRyICpubGEpCit7CisJcmV0dXJuIG5sYS0+bmxhX2xlbiAtIE5MQV9IRFJMRU47Cit9CisKKy8qKgorICogbmxhX29rIC0gY2hlY2sgaWYgdGhlIG5ldGxpbmsgYXR0cmlidXRlIGZpdHMgaW50byB0aGUgcmVtYWluaW5nIGJ5dGVzCisgKiBAbmxhOiBuZXRsaW5rIGF0dHJpYnV0ZQorICogQHJlbWFpbmluZzogbnVtYmVyIG9mIGJ5dGVzIHJlbWFpbmluZyBpbiBhdHRyaWJ1dGUgc3RyZWFtCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IG5sYV9vayhjb25zdCBzdHJ1Y3QgbmxhdHRyICpubGEsIGludCByZW1haW5pbmcpCit7CisJcmV0dXJuIHJlbWFpbmluZyA+PSBzaXplb2YoKm5sYSkgJiYKKwkgICAgICAgbmxhLT5ubGFfbGVuID49IHNpemVvZigqbmxhKSAmJgorCSAgICAgICBubGEtPm5sYV9sZW4gPD0gcmVtYWluaW5nOworfQorCisvKioKKyAqIG5sYV9uZXh0IC0gbmV4dCBuZXRsaW5rIGF0dHJpYnRlIGluIGF0dHJpYnV0ZSBzdHJlYW0KKyAqIEBubGE6IG5ldGxpbmsgYXR0cmlidXRlCisgKiBAcmVtYWluaW5nOiBudW1iZXIgb2YgYnl0ZXMgcmVtYWluaW5nIGluIGF0dHJpYnV0ZSBzdHJlYW0KKyAqCisgKiBSZXR1cm5zIHRoZSBuZXh0IG5ldGxpbmsgYXR0cmlidXRlIGluIHRoZSBhdHRyaWJ1dGUgc3RyZWFtIGFuZAorICogZGVjcmVtZW50cyByZW1haW5pbmcgYnkgdGhlIHNpemUgb2YgdGhlIGN1cnJlbnQgYXR0cmlidXRlLgorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBubGF0dHIgKm5sYV9uZXh0KGNvbnN0IHN0cnVjdCBubGF0dHIgKm5sYSwgaW50ICpyZW1haW5pbmcpCit7CisJaW50IHRvdGxlbiA9IE5MQV9BTElHTihubGEtPm5sYV9sZW4pOworCisJKnJlbWFpbmluZyAtPSB0b3RsZW47CisJcmV0dXJuIChzdHJ1Y3QgbmxhdHRyICopICgoY2hhciAqKSBubGEgKyB0b3RsZW4pOworfQorCisvKioKKyAqIG5sYV9wYXJzZV9uZXN0ZWQgLSBwYXJzZSBuZXN0ZWQgYXR0cmlidXRlcworICogQHRiOiBkZXN0aW5hdGlvbiBhcnJheSB3aXRoIG1heHR5cGUrMSBlbGVtZW50cworICogQG1heHR5cGU6IG1heGltdW0gYXR0cmlidXRlIHR5cGUgdG8gYmUgZXhwZWN0ZWQKKyAqIEBubGE6IGF0dHJpYnV0ZSBjb250YWluaW5nIHRoZSBuZXN0ZWQgYXR0cmlidXRlcworICogQHBvbGljeTogdmFsaWRhdGlvbiBwb2xpY3kKKyAqCisgKiBTZWUgbmxhX3BhcnNlKCkKKyAqLworc3RhdGljIGlubGluZSBpbnQgbmxhX3BhcnNlX25lc3RlZChzdHJ1Y3QgbmxhdHRyICp0YltdLCBpbnQgbWF4dHlwZSwKKwkJCQkgICBzdHJ1Y3QgbmxhdHRyICpubGEsCisJCQkJICAgc3RydWN0IG5sYV9wb2xpY3kgKnBvbGljeSkKK3sKKwlyZXR1cm4gbmxhX3BhcnNlKHRiLCBtYXh0eXBlLCBubGFfZGF0YShubGEpLCBubGFfbGVuKG5sYSksIHBvbGljeSk7Cit9CisvKioKKyAqIG5sYV9wdXRfdTggLSBBZGQgYSB1MTYgbmV0bGluayBhdHRyaWJ1dGUgdG8gYSBzb2NrZXQgYnVmZmVyCisgKiBAc2tiOiBzb2NrZXQgYnVmZmVyIHRvIGFkZCBhdHRyaWJ1dGUgdG8KKyAqIEBhdHRydHlwZTogYXR0cmlidXRlIHR5cGUKKyAqIEB2YWx1ZTogbnVtZXJpYyB2YWx1ZQorICovCitzdGF0aWMgaW5saW5lIGludCBubGFfcHV0X3U4KHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRydHlwZSwgdTggdmFsdWUpCit7CisJcmV0dXJuIG5sYV9wdXQoc2tiLCBhdHRydHlwZSwgc2l6ZW9mKHU4KSwgJnZhbHVlKTsKK30KKworLyoqCisgKiBubGFfcHV0X3UxNiAtIEFkZCBhIHUxNiBuZXRsaW5rIGF0dHJpYnV0ZSB0byBhIHNvY2tldCBidWZmZXIKKyAqIEBza2I6IHNvY2tldCBidWZmZXIgdG8gYWRkIGF0dHJpYnV0ZSB0bworICogQGF0dHJ0eXBlOiBhdHRyaWJ1dGUgdHlwZQorICogQHZhbHVlOiBudW1lcmljIHZhbHVlCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IG5sYV9wdXRfdTE2KHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRydHlwZSwgdTE2IHZhbHVlKQoreworCXJldHVybiBubGFfcHV0KHNrYiwgYXR0cnR5cGUsIHNpemVvZih1MTYpLCAmdmFsdWUpOworfQorCisvKioKKyAqIG5sYV9wdXRfdTMyIC0gQWRkIGEgdTMyIG5ldGxpbmsgYXR0cmlidXRlIHRvIGEgc29ja2V0IGJ1ZmZlcgorICogQHNrYjogc29ja2V0IGJ1ZmZlciB0byBhZGQgYXR0cmlidXRlIHRvCisgKiBAYXR0cnR5cGU6IGF0dHJpYnV0ZSB0eXBlCisgKiBAdmFsdWU6IG51bWVyaWMgdmFsdWUKKyAqLworc3RhdGljIGlubGluZSBpbnQgbmxhX3B1dF91MzIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGF0dHJ0eXBlLCB1MzIgdmFsdWUpCit7CisJcmV0dXJuIG5sYV9wdXQoc2tiLCBhdHRydHlwZSwgc2l6ZW9mKHUzMiksICZ2YWx1ZSk7Cit9CisKKy8qKgorICogbmxhX3B1dF82NCAtIEFkZCBhIHU2NCBuZXRsaW5rIGF0dHJpYnV0ZSB0byBhIHNvY2tldCBidWZmZXIKKyAqIEBza2I6IHNvY2tldCBidWZmZXIgdG8gYWRkIGF0dHJpYnV0ZSB0bworICogQGF0dHJ0eXBlOiBhdHRyaWJ1dGUgdHlwZQorICogQHZhbHVlOiBudW1lcmljIHZhbHVlCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IG5sYV9wdXRfdTY0KHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRydHlwZSwgdTY0IHZhbHVlKQoreworCXJldHVybiBubGFfcHV0KHNrYiwgYXR0cnR5cGUsIHNpemVvZih1NjQpLCAmdmFsdWUpOworfQorCisvKioKKyAqIG5sYV9wdXRfc3RyaW5nIC0gQWRkIGEgc3RyaW5nIG5ldGxpbmsgYXR0cmlidXRlIHRvIGEgc29ja2V0IGJ1ZmZlcgorICogQHNrYjogc29ja2V0IGJ1ZmZlciB0byBhZGQgYXR0cmlidXRlIHRvCisgKiBAYXR0cnR5cGU6IGF0dHJpYnV0ZSB0eXBlCisgKiBAc3RyOiBOVUwgdGVybWluYXRlZCBzdHJpbmcKKyAqLworc3RhdGljIGlubGluZSBpbnQgbmxhX3B1dF9zdHJpbmcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGF0dHJ0eXBlLAorCQkJCSBjb25zdCBjaGFyICpzdHIpCit7CisJcmV0dXJuIG5sYV9wdXQoc2tiLCBhdHRydHlwZSwgc3RybGVuKHN0cikgKyAxLCBzdHIpOworfQorCisvKioKKyAqIG5sYV9wdXRfZmxhZyAtIEFkZCBhIGZsYWcgbmV0bGluayBhdHRyaWJ1dGUgdG8gYSBzb2NrZXQgYnVmZmVyCisgKiBAc2tiOiBzb2NrZXQgYnVmZmVyIHRvIGFkZCBhdHRyaWJ1dGUgdG8KKyAqIEBhdHRydHlwZTogYXR0cmlidXRlIHR5cGUKKyAqLworc3RhdGljIGlubGluZSBpbnQgbmxhX3B1dF9mbGFnKHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRydHlwZSkKK3sKKwlyZXR1cm4gbmxhX3B1dChza2IsIGF0dHJ0eXBlLCAwLCBOVUxMKTsKK30KKworLyoqCisgKiBubGFfcHV0X21zZWNzIC0gQWRkIGEgbXNlY3MgbmV0bGluayBhdHRyaWJ1dGUgdG8gYSBzb2NrZXQgYnVmZmVyCisgKiBAc2tiOiBzb2NrZXQgYnVmZmVyIHRvIGFkZCBhdHRyaWJ1dGUgdG8KKyAqIEBhdHRydHlwZTogYXR0cmlidXRlIHR5cGUKKyAqIEBqaWZmaWVzOiBudW1iZXIgb2YgbXNlY3MgaW4gamlmZmllcworICovCitzdGF0aWMgaW5saW5lIGludCBubGFfcHV0X21zZWNzKHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRydHlwZSwKKwkJCQl1bnNpZ25lZCBsb25nIGppZmZpZXMpCit7CisJdTY0IHRtcCA9IGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyk7CisJcmV0dXJuIG5sYV9wdXQoc2tiLCBhdHRydHlwZSwgc2l6ZW9mKHU2NCksICZ0bXApOworfQorCisjZGVmaW5lIE5MQV9QVVQoc2tiLCBhdHRydHlwZSwgYXR0cmxlbiwgZGF0YSkgXAorCWRvIHsgXAorCQlpZiAobmxhX3B1dChza2IsIGF0dHJ0eXBlLCBhdHRybGVuLCBkYXRhKSA8IDApIFwKKwkJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOyBcCisJfSB3aGlsZSgwKQorCisjZGVmaW5lIE5MQV9QVVRfVFlQRShza2IsIHR5cGUsIGF0dHJ0eXBlLCB2YWx1ZSkgXAorCWRvIHsgXAorCQl0eXBlIF9fdG1wID0gdmFsdWU7IFwKKwkJTkxBX1BVVChza2IsIGF0dHJ0eXBlLCBzaXplb2YodHlwZSksICZfX3RtcCk7IFwKKwl9IHdoaWxlKDApCisKKyNkZWZpbmUgTkxBX1BVVF9VOChza2IsIGF0dHJ0eXBlLCB2YWx1ZSkgXAorCU5MQV9QVVRfVFlQRShza2IsIHU4LCBhdHRydHlwZSwgdmFsdWUpCisKKyNkZWZpbmUgTkxBX1BVVF9VMTYoc2tiLCBhdHRydHlwZSwgdmFsdWUpIFwKKwlOTEFfUFVUX1RZUEUoc2tiLCB1MTYsIGF0dHJ0eXBlLCB2YWx1ZSkKKworI2RlZmluZSBOTEFfUFVUX1UzMihza2IsIGF0dHJ0eXBlLCB2YWx1ZSkgXAorCU5MQV9QVVRfVFlQRShza2IsIHUzMiwgYXR0cnR5cGUsIHZhbHVlKQorCisjZGVmaW5lIE5MQV9QVVRfVTY0KHNrYiwgYXR0cnR5cGUsIHZhbHVlKSBcCisJTkxBX1BVVF9UWVBFKHNrYiwgdTY0LCBhdHRydHlwZSwgdmFsdWUpCisKKyNkZWZpbmUgTkxBX1BVVF9TVFJJTkcoc2tiLCBhdHRydHlwZSwgdmFsdWUpIFwKKwlOTEFfUFVUKHNrYiwgYXR0cnR5cGUsIHN0cmxlbih2YWx1ZSkgKyAxLCB2YWx1ZSkKKworI2RlZmluZSBOTEFfUFVUX0ZMQUcoc2tiLCBhdHRydHlwZSwgdmFsdWUpIFwKKwlOTEFfUFVUKHNrYiwgYXR0cnR5cGUsIDAsIE5VTEwpCisKKyNkZWZpbmUgTkxBX1BVVF9NU0VDUyhza2IsIGF0dHJ0eXBlLCBqaWZmaWVzKSBcCisJTkxBX1BVVF9VNjQoc2tiLCBhdHRydHlwZSwgamlmZmllc190b19tc2VjcyhqaWZmaWVzKSkKKworLyoqCisgKiBubGFfZ2V0X3UzMiAtIHJldHVybiBwYXlsb2FkIG9mIHUzMiBhdHRyaWJ1dGUKKyAqIEBubGE6IHUzMiBuZXRsaW5rIGF0dHJpYnV0ZQorICovCitzdGF0aWMgaW5saW5lIHUzMiBubGFfZ2V0X3UzMihzdHJ1Y3QgbmxhdHRyICpubGEpCit7CisJcmV0dXJuICoodTMyICopIG5sYV9kYXRhKG5sYSk7Cit9CisKKy8qKgorICogbmxhX2dldF91MTYgLSByZXR1cm4gcGF5bG9hZCBvZiB1MTYgYXR0cmlidXRlCisgKiBAbmxhOiB1MTYgbmV0bGluayBhdHRyaWJ1dGUKKyAqLworc3RhdGljIGlubGluZSB1MTYgbmxhX2dldF91MTYoc3RydWN0IG5sYXR0ciAqbmxhKQoreworCXJldHVybiAqKHUxNiAqKSBubGFfZGF0YShubGEpOworfQorCisvKioKKyAqIG5sYV9nZXRfdTggLSByZXR1cm4gcGF5bG9hZCBvZiB1OCBhdHRyaWJ1dGUKKyAqIEBubGE6IHU4IG5ldGxpbmsgYXR0cmlidXRlCisgKi8KK3N0YXRpYyBpbmxpbmUgdTggbmxhX2dldF91OChzdHJ1Y3QgbmxhdHRyICpubGEpCit7CisJcmV0dXJuICoodTggKikgbmxhX2RhdGEobmxhKTsKK30KKworLyoqCisgKiBubGFfZ2V0X3U2NCAtIHJldHVybiBwYXlsb2FkIG9mIHU2NCBhdHRyaWJ1dGUKKyAqIEBubGE6IHU2NCBuZXRsaW5rIGF0dHJpYnV0ZQorICovCitzdGF0aWMgaW5saW5lIHU2NCBubGFfZ2V0X3U2NChzdHJ1Y3QgbmxhdHRyICpubGEpCit7CisJdTY0IHRtcDsKKworCW5sYV9tZW1jcHkoJnRtcCwgbmxhLCBzaXplb2YodG1wKSk7CisKKwlyZXR1cm4gdG1wOworfQorCisvKioKKyAqIG5sYV9nZXRfZmxhZyAtIHJldHVybiBwYXlsb2FkIG9mIGZsYWcgYXR0cmlidXRlCisgKiBAbmxhOiBmbGFnIG5ldGxpbmsgYXR0cmlidXRlCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IG5sYV9nZXRfZmxhZyhzdHJ1Y3QgbmxhdHRyICpubGEpCit7CisJcmV0dXJuICEhbmxhOworfQorCisvKioKKyAqIG5sYV9nZXRfbXNlY3MgLSByZXR1cm4gcGF5bG9hZCBvZiBtc2VjcyBhdHRyaWJ1dGUKKyAqIEBubGE6IG1zZWNzIG5ldGxpbmsgYXR0cmlidXRlCisgKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBpbiBqaWZmaWVzLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbmxhX2dldF9tc2VjcyhzdHJ1Y3QgbmxhdHRyICpubGEpCit7CisJdTY0IG1zZWNzID0gbmxhX2dldF91NjQobmxhKTsKKworCXJldHVybiBtc2Vjc190b19qaWZmaWVzKCh1bnNpZ25lZCBsb25nKSBtc2Vjcyk7Cit9CisKKy8qKgorICogbmxhX25lc3Rfc3RhcnQgLSBTdGFydCBhIG5ldyBsZXZlbCBvZiBuZXN0ZWQgYXR0cmlidXRlcworICogQHNrYjogc29ja2V0IGJ1ZmZlciB0byBhZGQgYXR0cmlidXRlcyB0bworICogQGF0dHJ0eXBlOiBhdHRyaWJ1dGUgdHlwZSBvZiBjb250YWluZXIKKyAqCisgKiBSZXR1cm5zIHRoZSBjb250YWluZXIgYXR0cmlidXRlCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IG5sYXR0ciAqbmxhX25lc3Rfc3RhcnQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGF0dHJ0eXBlKQoreworCXN0cnVjdCBubGF0dHIgKnN0YXJ0ID0gKHN0cnVjdCBubGF0dHIgKikgc2tiLT50YWlsOworCisJaWYgKG5sYV9wdXQoc2tiLCBhdHRydHlwZSwgMCwgTlVMTCkgPCAwKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBzdGFydDsKK30KKworLyoqCisgKiBubGFfbmVzdF9lbmQgLSBGaW5hbGl6ZSBuZXN0aW5nIG9mIGF0dHJpYnV0ZXMKKyAqIEBza2I6IHNvY2tldCBidWZmZXIgdGhlIGF0dHJpYnR1ZXMgYXJlIHN0b3JlZCBpbgorICogQHN0YXJ0OiBjb250YWluZXIgYXR0cmlidXRlCisgKgorICogQ29ycmVjdHMgdGhlIGNvbnRhaW5lciBhdHRyaWJ1dGUgaGVhZGVyIHRvIGluY2x1ZGUgdGhlIGFsbAorICogYXBwZW5lZGVkIGF0dHJpYnV0ZXMuCisgKgorICogUmV0dXJucyB0aGUgdG90YWwgZGF0YSBsZW5ndGggb2YgdGhlIHNrYi4KKyAqLworc3RhdGljIGlubGluZSBpbnQgbmxhX25lc3RfZW5kKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubGF0dHIgKnN0YXJ0KQoreworCXN0YXJ0LT5ubGFfbGVuID0gc2tiLT50YWlsIC0gKHVuc2lnbmVkIGNoYXIgKikgc3RhcnQ7CisJcmV0dXJuIHNrYi0+bGVuOworfQorCisvKioKKyAqIG5sYV9uZXN0X2NhbmNlbCAtIENhbmNlbCBuZXN0aW5nIG9mIGF0dHJpYnV0ZXMKKyAqIEBza2I6IHNvY2tldCBidWZmZXIgdGhlIG1lc3NhZ2UgaXMgc3RvcmVkIGluCisgKiBAc3RhcnQ6IGNvbnRhaW5lciBhdHRyaWJ1dGUKKyAqCisgKiBSZW1vdmVzIHRoZSBjb250YWluZXIgYXR0cmlidXRlIGFuZCBpbmNsdWRpbmcgYWxsIG5lc3RlZAorICogYXR0cmlidXRlcy4gUmV0dXJucyAtMS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgbmxhX25lc3RfY2FuY2VsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubGF0dHIgKnN0YXJ0KQoreworCWlmIChzdGFydCkKKwkJc2tiX3RyaW0oc2tiLCAodW5zaWduZWQgY2hhciAqKSBzdGFydCAtIHNrYi0+ZGF0YSk7CisKKwlyZXR1cm4gLTE7Cit9CisKKy8qKgorICogbmxhX2Zvcl9lYWNoX2F0dHIgLSBpdGVyYXRlIG92ZXIgYSBzdHJlYW0gb2YgYXR0cmlidXRlcworICogQHBvczogbG9vcCBjb3VudGVyLCBzZXQgdG8gY3VycmVudCBhdHRyaWJ1dGUKKyAqIEBoZWFkOiBoZWFkIG9mIGF0dHJpYnV0ZSBzdHJlYW0KKyAqIEBsZW46IGxlbmd0aCBvZiBhdHRyaWJ1dGUgc3RyZWFtCisgKiBAcmVtOiBpbml0aWFsaXplZCB0byBsZW4sIGhvbGRzIGJ5dGVzIGN1cnJlbnRseSByZW1haW5pbmcgaW4gc3RyZWFtCisgKi8KKyNkZWZpbmUgbmxhX2Zvcl9lYWNoX2F0dHIocG9zLCBoZWFkLCBsZW4sIHJlbSkgXAorCWZvciAocG9zID0gaGVhZCwgcmVtID0gbGVuOyBcCisJICAgICBubGFfb2socG9zLCByZW0pOyBcCisJICAgICBwb3MgPSBubGFfbmV4dChwb3MsICYocmVtKSkpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc29jay5oIGIvaW5jbHVkZS9uZXQvc29jay5oCmluZGV4IGUwNDk4YmQuLjk4MmI0ZWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NvY2suaAorKysgYi9pbmNsdWRlL25ldC9zb2NrLmgKQEAgLTQ2MSwxNiArNDYxLDE2IEBACiB9CiAKIC8qIFRoZSBwZXItc29ja2V0IHNwaW5sb2NrIG11c3QgYmUgaGVsZCBoZXJlLiAqLwotI2RlZmluZSBza19hZGRfYmFja2xvZyhfX3NrLCBfX3NrYikJCQkJXAotZG8gewlpZiAoIShfX3NrKS0+c2tfYmFja2xvZy50YWlsKSB7CQkJCVwKLQkJKF9fc2spLT5za19iYWNrbG9nLmhlYWQgPQkJCVwKLQkJICAgICAoX19zayktPnNrX2JhY2tsb2cudGFpbCA9IChfX3NrYik7CQlcCi0JfSBlbHNlIHsJCQkJCQlcCi0JCSgoX19zayktPnNrX2JhY2tsb2cudGFpbCktPm5leHQgPSAoX19za2IpOwlcCi0JCShfX3NrKS0+c2tfYmFja2xvZy50YWlsID0gKF9fc2tiKTsJCVwKLQl9CQkJCQkJCVwKLQkoX19za2IpLT5uZXh0ID0gTlVMTDsJCQkJCVwKLX0gd2hpbGUoMCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBza19hZGRfYmFja2xvZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCit7CisJaWYgKCFzay0+c2tfYmFja2xvZy50YWlsKSB7CisJCXNrLT5za19iYWNrbG9nLmhlYWQgPSBzay0+c2tfYmFja2xvZy50YWlsID0gc2tiOworCX0gZWxzZSB7CisJCXNrLT5za19iYWNrbG9nLnRhaWwtPm5leHQgPSBza2I7CisJCXNrLT5za19iYWNrbG9nLnRhaWwgPSBza2I7CisJfQorCXNrYi0+bmV4dCA9IE5VTEw7Cit9CiAKICNkZWZpbmUgc2tfd2FpdF9ldmVudChfX3NrLCBfX3RpbWVvLCBfX2NvbmRpdGlvbikJCVwKICh7CWludCByYzsJCQkJCQkJXApAQCAtMTI0Nyw2ICsxMjQ3LDEyIEBACiAJCSAgICAgKHNrYiAhPSAoc3RydWN0IHNrX2J1ZmYgKikmKHNrKS0+c2tfd3JpdGVfcXVldWUpOwlcCiAJCSAgICAgc2tiID0gc2tiLT5uZXh0KQogCisvKmZyb20gU1RDUCBmb3IgZmFzdCBTQUNLIFByb2Nlc3MqLworI2RlZmluZSBza19zdHJlYW1fZm9yX3JldHJhbnNfcXVldWVfZnJvbShza2IsIHNrKQkJCVwKKwkJZm9yICg7IChza2IgIT0gKHNrKS0+c2tfc2VuZF9oZWFkKSAmJiAgICAgICAgICAgICAgICAgICBcCisJCSAgICAgKHNrYiAhPSAoc3RydWN0IHNrX2J1ZmYgKikmKHNrKS0+c2tfd3JpdGVfcXVldWUpOwlcCisJCSAgICAgc2tiID0gc2tiLT5uZXh0KQorCiAvKgogICoJRGVmYXVsdCB3cml0ZSBwb2xpY3kgYXMgc2hvd24gdG8gdXNlciBzcGFjZSB2aWEgcG9sbC9zZWxlY3QvU0lHSU8KICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvdGNwLmggYi9pbmNsdWRlL25ldC90Y3AuaAppbmRleCBjMjQzMzljLi4wZjk4NDgwIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC90Y3AuaAorKysgYi9pbmNsdWRlL25ldC90Y3AuaApAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogCiAjaW5jbHVkZSA8bmV0L2luZXRfY29ubmVjdGlvbl9zb2NrLmg+CiAjaW5jbHVkZSA8bmV0L2luZXRfdGltZXdhaXRfc29jay5oPgpAQCAtODgsMTAgKzg5LDEwIEBACiAJCQkJICovCiAKICNkZWZpbmUgVENQX1NZTl9SRVRSSUVTCSA1CS8qIG51bWJlciBvZiB0aW1lcyB0byByZXRyeSBhY3RpdmUgb3BlbmluZyBhCi0JCQkJICogY29ubmVjdGlvbjogfjE4MHNlYyBpcyBSRkMgbWludW11bQkqLworCQkJCSAqIGNvbm5lY3Rpb246IH4xODBzZWMgaXMgUkZDIG1pbmltdW0JKi8KIAogI2RlZmluZSBUQ1BfU1lOQUNLX1JFVFJJRVMgNQkvKiBudW1iZXIgb2YgdGltZXMgdG8gcmV0cnkgcGFzc2l2ZSBvcGVuaW5nIGEKLQkJCQkgKiBjb25uZWN0aW9uOiB+MTgwc2VjIGlzIFJGQyBtaW51bXVtCSovCisJCQkJICogY29ubmVjdGlvbjogfjE4MHNlYyBpcyBSRkMgbWluaW11bQkqLwogCiAKICNkZWZpbmUgVENQX09SUEhBTl9SRVRSSUVTIDcJLyogbnVtYmVyIG9mIHRpbWVzIHRvIHJldHJ5IG9uIGFuIG9ycGhhbmVkCkBAIC0xNzksNyArMTgwLDcgQEAKIC8qIEZsYWdzIGluIHRwLT5ub25hZ2xlICovCiAjZGVmaW5lIFRDUF9OQUdMRV9PRkYJCTEJLyogTmFnbGUncyBhbGdvIGlzIGRpc2FibGVkICovCiAjZGVmaW5lIFRDUF9OQUdMRV9DT1JLCQkyCS8qIFNvY2tldCBpcyBjb3JrZWQJICAgICovCi0jZGVmaW5lIFRDUF9OQUdMRV9QVVNICQk0CS8qIENvcmsgaXMgb3ZlcnJpZGVuIGZvciBhbHJlYWR5IHF1ZXVlZCBkYXRhICovCisjZGVmaW5lIFRDUF9OQUdMRV9QVVNICQk0CS8qIENvcmsgaXMgb3ZlcnJpZGRlbiBmb3IgYWxyZWFkeSBxdWV1ZWQgZGF0YSAqLwogCiBleHRlcm4gc3RydWN0IGluZXRfdGltZXdhaXRfZGVhdGhfcm93IHRjcF9kZWF0aF9yb3c7CiAKQEAgLTIxNyw2ICsyMTgsNyBAQAogZXh0ZXJuIGludCBzeXNjdGxfdGNwX25vbWV0cmljc19zYXZlOwogZXh0ZXJuIGludCBzeXNjdGxfdGNwX21vZGVyYXRlX3JjdmJ1ZjsKIGV4dGVybiBpbnQgc3lzY3RsX3RjcF90c29fd2luX2Rpdmlzb3I7CitleHRlcm4gaW50IHN5c2N0bF90Y3BfYWJjOwogCiBleHRlcm4gYXRvbWljX3QgdGNwX21lbW9yeV9hbGxvY2F0ZWQ7CiBleHRlcm4gYXRvbWljX3QgdGNwX3NvY2tldHNfYWxsb2NhdGVkOwpAQCAtNTUwLDEzICs1NTIsMTMgQEAKIAogLyogVENQIHRpbWVzdGFtcHMgYXJlIG9ubHkgMzItYml0cywgdGhpcyBjYXVzZXMgYSBzbGlnaHQKICAqIGNvbXBsaWNhdGlvbiBvbiA2NC1iaXQgc3lzdGVtcyBzaW5jZSB3ZSBzdG9yZSBhIHNuYXBzaG90Ci0gKiBvZiBqaWZmaWVzIGluIHRoZSBidWZmZXIgY29udHJvbCBibG9ja3MgYmVsb3cuICBXZSBkZWNpZGVseQorICogb2YgamlmZmllcyBpbiB0aGUgYnVmZmVyIGNvbnRyb2wgYmxvY2tzIGJlbG93LiAgV2UgZGVjaWRlZGx5CiAgKiBvbmx5IHVzZSBvZiB0aGUgbG93IDMyLWJpdHMgb2YgamlmZmllcyBhbmQgaGlkZSB0aGUgdWdseQogICogY2FzdHMgd2l0aCB0aGUgZm9sbG93aW5nIG1hY3JvLgogICovCiAjZGVmaW5lIHRjcF90aW1lX3N0YW1wCQkoKF9fdTMyKShqaWZmaWVzKSkKIAotLyogVGhpcyBpcyB3aGF0IHRoZSBzZW5kIHBhY2tldCBxdWV1ZWluZyBlbmdpbmUgdXNlcyB0byBwYXNzCisvKiBUaGlzIGlzIHdoYXQgdGhlIHNlbmQgcGFja2V0IHF1ZXVpbmcgZW5naW5lIHVzZXMgdG8gcGFzcwogICogVENQIHBlci1wYWNrZXQgY29udHJvbCBpbmZvcm1hdGlvbiB0byB0aGUgdHJhbnNtaXNzaW9uCiAgKiBjb2RlLiAgV2UgYWxzbyBzdG9yZSB0aGUgaG9zdC1vcmRlciBzZXF1ZW5jZSBudW1iZXJzIGluCiAgKiBoZXJlIHRvby4gIFRoaXMgaXMgMzYgYnl0ZXMgb24gMzItYml0IGFyY2hpdGVjdHVyZXMsCkBAIC01OTYsNyArNTk4LDcgQEAKICNkZWZpbmUgVENQQ0JfRVZFUl9SRVRSQU5TCTB4ODAJLyogRXZlciByZXRyYW5zbWl0dGVkIGZyYW1lCSovCiAjZGVmaW5lIFRDUENCX1JFVFJBTlMJCShUQ1BDQl9TQUNLRURfUkVUUkFOU3xUQ1BDQl9FVkVSX1JFVFJBTlMpCiAKLSNkZWZpbmUgVENQQ0JfVVJHCQkweDIwCS8qIFVyZ2VudCBwb2ludGVyIGFkdmVuY2VkIGhlcmUJKi8KKyNkZWZpbmUgVENQQ0JfVVJHCQkweDIwCS8qIFVyZ2VudCBwb2ludGVyIGFkdmFuY2VkIGhlcmUJKi8KIAogI2RlZmluZSBUQ1BDQl9BVF9UQUlMCQkoVENQQ0JfVVJHKQogCkBAIC03NjQsNiArNzY2LDMzIEBACiAJCQkgICAgKHRwLT5zbmRfY3duZCA+PiAyKSkpOwogfQogCisvKgorICogTGluZWFyIGluY3JlYXNlIGR1cmluZyBzbG93IHN0YXJ0CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB0Y3Bfc2xvd19zdGFydChzdHJ1Y3QgdGNwX3NvY2sgKnRwKQoreworCWlmIChzeXNjdGxfdGNwX2FiYykgeworCQkvKiBSRkMzNDY1OiBTbG93IFN0YXJ0CisJCSAqIFRDUCBzZW5kZXIgU0hPVUxEIGluY3JlYXNlIGN3bmQgYnkgdGhlIG51bWJlciBvZgorCQkgKiBwcmV2aW91c2x5IHVuYWNrbm93bGVkZ2VkIGJ5dGVzIEFDS2VkIGJ5IGVhY2ggaW5jb21pbmcKKwkJICogYWNrbm93bGVkZ21lbnQsIHByb3ZpZGVkIHRoZSBpbmNyZWFzZSBpcyBub3QgbW9yZSB0aGFuIEwKKwkJICovCisJCWlmICh0cC0+Ynl0ZXNfYWNrZWQgPCB0cC0+bXNzX2NhY2hlKQorCQkJcmV0dXJuOworCisJCS8qIFdlIE1BWSBpbmNyZWFzZSBieSAyIGlmIGRpc2NvdmVyZWQgZGVsYXllZCBhY2sgKi8KKwkJaWYgKHN5c2N0bF90Y3BfYWJjID4gMSAmJiB0cC0+Ynl0ZXNfYWNrZWQgPiAyKnRwLT5tc3NfY2FjaGUpIHsKKwkJCWlmICh0cC0+c25kX2N3bmQgPCB0cC0+c25kX2N3bmRfY2xhbXApCisJCQkJdHAtPnNuZF9jd25kKys7CisJCX0KKwl9CisJdHAtPmJ5dGVzX2Fja2VkID0gMDsKKworCWlmICh0cC0+c25kX2N3bmQgPCB0cC0+c25kX2N3bmRfY2xhbXApCisJCXRwLT5zbmRfY3duZCsrOworfQorCisKIHN0YXRpYyBpbmxpbmUgdm9pZCB0Y3Bfc3luY19sZWZ0X291dChzdHJ1Y3QgdGNwX3NvY2sgKnRwKQogewogCWlmICh0cC0+cnhfb3B0LnNhY2tfb2sgJiYKQEAgLTc5Myw2ICs4MjIsNyBAQAogCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwogCiAJdHAtPnByaW9yX3NzdGhyZXNoID0gMDsKKwl0cC0+Ynl0ZXNfYWNrZWQgPSAwOwogCWlmIChpbmV0X2NzayhzayktPmljc2tfY2Ffc3RhdGUgPCBUQ1BfQ0FfQ1dSKSB7CiAJCV9fdGNwX2VudGVyX2N3cihzayk7CiAJCXRjcF9zZXRfY2Ffc3RhdGUoc2ssIFRDUF9DQV9DV1IpOwpAQCAtODA5LDYgKzgzOSwyNyBAQAogCXJldHVybiAzOwogfQogCisvKiBSRkMyODYxIENoZWNrIHdoZXRoZXIgd2UgYXJlIGxpbWl0ZWQgYnkgYXBwbGljYXRpb24gb3IgY29uZ2VzdGlvbiB3aW5kb3cKKyAqIFRoaXMgaXMgdGhlIGludmVyc2Ugb2YgY3duZCBjaGVjayBpbiB0Y3BfdHNvX3Nob3VsZF9kZWZlcgorICovCitzdGF0aWMgaW5saW5lIGludCB0Y3BfaXNfY3duZF9saW1pdGVkKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdTMyIGluX2ZsaWdodCkKK3sKKwljb25zdCBzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKKwl1MzIgbGVmdDsKKworCWlmIChpbl9mbGlnaHQgPj0gdHAtPnNuZF9jd25kKQorCQlyZXR1cm4gMTsKKworCWlmICghKHNrLT5za19yb3V0ZV9jYXBzICYgTkVUSUZfRl9UU08pKQorCQlyZXR1cm4gMDsKKworCWxlZnQgPSB0cC0+c25kX2N3bmQgLSBpbl9mbGlnaHQ7CisJaWYgKHN5c2N0bF90Y3BfdHNvX3dpbl9kaXZpc29yKQorCQlyZXR1cm4gbGVmdCAqIHN5c2N0bF90Y3BfdHNvX3dpbl9kaXZpc29yIDwgdHAtPnNuZF9jd25kOworCWVsc2UKKwkJcmV0dXJuIGxlZnQgPD0gdGNwX21heF9idXJzdCh0cCk7Cit9CisKIHN0YXRpYyBfX2lubGluZV9fIHZvaWQgdGNwX21pbnNoYWxsX3VwZGF0ZShzdHJ1Y3QgdGNwX3NvY2sgKnRwLCBpbnQgbXNzLCAKIAkJCQkJICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKQEAgLTg1Miw3ICs5MDMsNyBAQAogCiBzdGF0aWMgX19pbmxpbmVfXyBpbnQgX190Y3BfY2hlY2tzdW1fY29tcGxldGUoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlyZXR1cm4gKHVuc2lnbmVkIHNob3J0KWNzdW1fZm9sZChza2JfY2hlY2tzdW0oc2tiLCAwLCBza2ItPmxlbiwgc2tiLT5jc3VtKSk7CisJcmV0dXJuIF9fc2tiX2NoZWNrc3VtX2NvbXBsZXRlKHNrYik7CiB9CiAKIHN0YXRpYyBfX2lubGluZV9fIGludCB0Y3BfY2hlY2tzdW1fY29tcGxldGUoc3RydWN0IHNrX2J1ZmYgKnNrYikKQEAgLTExNTYsNiArMTIwNywxNSBAQAogCVRDUF9BRERfU1RBVFNfVVNFUihUQ1BfTUlCX01BWENPTk4sIC0xKTsKIH0KIAorLypmcm9tIFNUQ1AgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9hbGxfcmV0cmFuc19oaW50cyhzdHJ1Y3QgdGNwX3NvY2sgKnRwKXsKKwl0cC0+bG9zdF9za2JfaGludCA9IE5VTEw7CisJdHAtPnNjb3JlYm9hcmRfc2tiX2hpbnQgPSBOVUxMOworCXRwLT5yZXRyYW5zbWl0X3NrYl9oaW50ID0gTlVMTDsKKwl0cC0+Zm9yd2FyZF9za2JfaGludCA9IE5VTEw7CisJdHAtPmZhc3RwYXRoX3NrYl9oaW50ID0gTlVMTDsKK30KKwogLyogL3Byb2MgKi8KIGVudW0gdGNwX3NlcV9zdGF0ZXMgewogCVRDUF9TRVFfU1RBVEVfTElTVEVOSU5HLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9yZG1hL2liX3VzZXJfdmVyYnMuaCBiL2luY2x1ZGUvcmRtYS9pYl91c2VyX3ZlcmJzLmgKaW5kZXggMDcyZjNhMi4uNWZmMTQ5MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9yZG1hL2liX3VzZXJfdmVyYnMuaAorKysgYi9pbmNsdWRlL3JkbWEvaWJfdXNlcl92ZXJicy5oCkBAIC00Myw3ICs0Myw3IEBACiAgKiBJbmNyZW1lbnQgdGhpcyB2YWx1ZSBpZiBhbnkgY2hhbmdlcyB0aGF0IGJyZWFrIHVzZXJzcGFjZSBBQkkKICAqIGNvbXBhdGliaWxpdHkgYXJlIG1hZGUuCiAgKi8KLSNkZWZpbmUgSUJfVVNFUl9WRVJCU19BQklfVkVSU0lPTgkzCisjZGVmaW5lIElCX1VTRVJfVkVSQlNfQUJJX1ZFUlNJT04JNAogCiBlbnVtIHsKIAlJQl9VU0VSX1ZFUkJTX0NNRF9HRVRfQ09OVEVYVCwKQEAgLTMzMyw2ICszMzMsMTEgQEAKIHN0cnVjdCBpYl91dmVyYnNfY3JlYXRlX3FwX3Jlc3AgewogCV9fdTMyIHFwX2hhbmRsZTsKIAlfX3UzMiBxcG47CisJX191MzIgbWF4X3NlbmRfd3I7CisJX191MzIgbWF4X3JlY3Zfd3I7CisJX191MzIgbWF4X3NlbmRfc2dlOworCV9fdTMyIG1heF9yZWN2X3NnZTsKKwlfX3UzMiBtYXhfaW5saW5lX2RhdGE7CiB9OwogCiAvKgpAQCAtNTUyLDkgKzU1Nyw3IEBACiAJX191MzIgc3JxX2hhbmRsZTsKIAlfX3UzMiBhdHRyX21hc2s7CiAJX191MzIgbWF4X3dyOwotCV9fdTMyIG1heF9zZ2U7CiAJX191MzIgc3JxX2xpbWl0OwotCV9fdTMyIHJlc2VydmVkOwogCV9fdTY0IGRyaXZlcl9kYXRhWzBdOwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9yZG1hL2liX3ZlcmJzLmggYi9pbmNsdWRlL3JkbWEvaWJfdmVyYnMuaAppbmRleCBmNzJkNDZkLi5hN2Y0YzM1IDEwMDY0NAotLS0gYS9pbmNsdWRlL3JkbWEvaWJfdmVyYnMuaAorKysgYi9pbmNsdWRlL3JkbWEvaWJfdmVyYnMuaApAQCAtODgxLDcgKzg4MSw3IEBACiAJCQkJCQlzdHJ1Y3QgaWJfdWNvbnRleHQgKmNvbnRleHQsCiAJCQkJCQlzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKTsKIAlpbnQgICAgICAgICAgICAgICAgICAgICAgICAoKmRlc3Ryb3lfY3EpKHN0cnVjdCBpYl9jcSAqY3EpOwotCWludCAgICAgICAgICAgICAgICAgICAgICAgICgqcmVzaXplX2NxKShzdHJ1Y3QgaWJfY3EgKmNxLCBpbnQgKmNxZSk7CisJaW50ICAgICAgICAgICAgICAgICAgICAgICAgKCpyZXNpemVfY3EpKHN0cnVjdCBpYl9jcSAqY3EsIGludCBjcWUpOwogCWludCAgICAgICAgICAgICAgICAgICAgICAgICgqcG9sbF9jcSkoc3RydWN0IGliX2NxICpjcSwgaW50IG51bV9lbnRyaWVzLAogCQkJCQkgICAgICBzdHJ1Y3QgaWJfd2MgKndjKTsKIAlpbnQgICAgICAgICAgICAgICAgICAgICAgICAoKnBlZWtfY3EpKHN0cnVjdCBpYl9jcSAqY3EsIGludCB3Y19jbnQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL3Njc2lfaG9zdC5oIGIvaW5jbHVkZS9zY3NpL3Njc2lfaG9zdC5oCmluZGV4IGVjZDUzZDcuLjZjYmIxOTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zY3NpX2hvc3QuaAorKysgYi9pbmNsdWRlL3Njc2kvc2NzaV9ob3N0LmgKQEAgLTcsNiArNyw3IEBACiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAKIHN0cnVjdCBibG9ja19kZXZpY2U7CitzdHJ1Y3QgY29tcGxldGlvbjsKIHN0cnVjdCBtb2R1bGU7CiBzdHJ1Y3Qgc2NzaV9jbW5kOwogc3RydWN0IHNjc2lfZGV2aWNlOwpAQCAtNDY3LDEwICs0NjgsOCBAQAogCiAJc3RydWN0IGxpc3RfaGVhZAllaF9jbWRfcTsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgICAgKiBlaGFuZGxlcjsgIC8qIEVycm9yIHJlY292ZXJ5IHRocmVhZC4gKi8KLQlzdHJ1Y3Qgc2VtYXBob3JlICAgICAgKiBlaF9hY3Rpb247IC8qIFdhaXQgZm9yIHNwZWNpZmljIGFjdGlvbnMgb24gdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3N0LiAqLwotCXVuc2lnbmVkIGludCAgICAgICAgICAgIGVoX2FjdGl2ZToxOyAvKiBJbmRpY2F0ZXMgdGhlIGVoIHRocmVhZCBpcyBhd2FrZSBhbmQgYWN0aXZlIGlmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIGlzIHRydWUuICovCisJc3RydWN0IGNvbXBsZXRpb24gICAgICogZWhfYWN0aW9uOyAvKiBXYWl0IGZvciBzcGVjaWZpYyBhY3Rpb25zIG9uIHRoZQorCQkJCQkgICAgICBob3N0LiAqLwogCXdhaXRfcXVldWVfaGVhZF90ICAgICAgIGhvc3Rfd2FpdDsKIAlzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICpob3N0dDsKIAlzdHJ1Y3Qgc2NzaV90cmFuc3BvcnRfdGVtcGxhdGUgKnRyYW5zcG9ydHQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvc2NzaV9yZXF1ZXN0LmggYi9pbmNsdWRlL3Njc2kvc2NzaV9yZXF1ZXN0LmgKaW5kZXggMjUzOWRlYi4uOThkNjlmZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL3Njc2lfcmVxdWVzdC5oCisrKyBiL2luY2x1ZGUvc2NzaS9zY3NpX3JlcXVlc3QuaApAQCAtNDcsOSArNDcsNiBAQAogCiBleHRlcm4gc3RydWN0IHNjc2lfcmVxdWVzdCAqc2NzaV9hbGxvY2F0ZV9yZXF1ZXN0KHN0cnVjdCBzY3NpX2RldmljZSAqLCBnZnBfdCk7CiBleHRlcm4gdm9pZCBzY3NpX3JlbGVhc2VfcmVxdWVzdChzdHJ1Y3Qgc2NzaV9yZXF1ZXN0ICopOwotZXh0ZXJuIHZvaWQgc2NzaV93YWl0X3JlcShzdHJ1Y3Qgc2NzaV9yZXF1ZXN0ICosIGNvbnN0IHZvaWQgKmNtbmQsCi0JCQkgIHZvaWQgKmJ1ZmZlciwgdW5zaWduZWQgYnVmZmxlbiwKLQkJCSAgaW50IHRpbWVvdXQsIGludCByZXRyaWVzKTsKIGV4dGVybiB2b2lkIHNjc2lfZG9fcmVxKHN0cnVjdCBzY3NpX3JlcXVlc3QgKiwgY29uc3Qgdm9pZCAqY21uZCwKIAkJCXZvaWQgKmJ1ZmZlciwgdW5zaWduZWQgYnVmZmxlbiwKIAkJCXZvaWQgKCpkb25lKSAoc3RydWN0IHNjc2lfY21uZCAqKSwKZGlmZiAtLWdpdCBhL2luaXQvbWFpbi5jIGIvaW5pdC9tYWluLmMKaW5kZXggZjE0MmQ0MC4uMjdmOTdmOSAxMDA2NDQKLS0tIGEvaW5pdC9tYWluLmMKKysrIGIvaW5pdC9tYWluLmMKQEAgLTM5NCwxNCArMzk0LDE2IEBACiAJa2VybmVsX3RocmVhZChpbml0LCBOVUxMLCBDTE9ORV9GUyB8IENMT05FX1NJR0hBTkQpOwogCW51bWFfZGVmYXVsdF9wb2xpY3koKTsKIAl1bmxvY2tfa2VybmVsKCk7Ci0JcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOwogCiAJLyoKIAkgKiBUaGUgYm9vdCBpZGxlIHRocmVhZCBtdXN0IGV4ZWN1dGUgc2NoZWR1bGUoKQogCSAqIGF0IGxlYXN0IG9uZSB0byBnZXQgdGhpbmdzIG1vdmluZzoKIAkgKi8KKwlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7CiAJc2NoZWR1bGUoKTsKKwlwcmVlbXB0X2Rpc2FibGUoKTsKIAorCS8qIENhbGwgaW50byBjcHVfaWRsZSB3aXRoIHByZWVtcHQgZGlzYWJsZWQgKi8KIAljcHVfaWRsZSgpOwogfSAKIApkaWZmIC0tZ2l0IGEva2VybmVsL2NwdS5jIGIva2VybmVsL2NwdS5jCmluZGV4IDM2MTllOTMuLmQ2MWJhODggMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jcHUuYworKysgYi9rZXJuZWwvY3B1LmMKQEAgLTIxLDYgKzIxLDI0IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKmNwdV9jaGFpbjsKIAorLyoKKyAqIFVzZWQgdG8gY2hlY2sgYnkgY2FsbGVycyBpZiB0aGV5IG5lZWQgdG8gYWNxdWlyZSB0aGUgY3B1Y29udHJvbAorICogb3Igbm90IHRvIHByb3RlY3QgYSBjcHUgZnJvbSBiZWluZyByZW1vdmVkLiBJdHMgc29tZXRpbWVzIHJlcXVpcmVkIHRvCisgKiBjYWxsIHRoZXNlIGZ1bmN0aW9ucyBib3RoIGZvciBub3JtYWwgb3BlcmF0aW9ucywgYW5kIGluIHJlc3BvbnNlIHRvCisgKiBhIGNwdSBiZWluZyBhZGRlZC9yZW1vdmVkLiBJZiB0aGUgY29udGV4dCBvZiB0aGUgY2FsbCBpcyBpbiB0aGUgc2FtZQorICogdGhyZWFkIGNvbnRleHQgYXMgYSBDUFUgaG90cGx1ZyB0aHJlYWQsIHdlIGRvbnQgbmVlZCB0byB0YWtlIHRoZSBsb2NrCisgKiBzaW5jZSBpdHMgYWxyZWFkeSBwcm90ZWN0ZWQKKyAqIGNoZWNrIGRyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLmMgZm9yIGl0cyB1c2FnZSAtIEFzaG9rIFJhagorICovCisKK2ludCBjdXJyZW50X2luX2NwdV9ob3RwbHVnKHZvaWQpCit7CisJcmV0dXJuIChjdXJyZW50LT5mbGFncyAmIFBGX0hPVFBMVUdfQ1BVKTsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwoY3VycmVudF9pbl9jcHVfaG90cGx1Zyk7CisKKwogLyogTmVlZCB0byBrbm93IGFib3V0IENQVXMgZ29pbmcgdXAvZG93bj8gKi8KIGludCByZWdpc3Rlcl9jcHVfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKIHsKQEAgLTk0LDYgKzExMiwxMyBAQAogCQlnb3RvIG91dDsKIAl9CiAKKwkvKgorCSAqIExlYXZlIGEgdHJhY2UgaW4gY3VycmVudC0+ZmxhZ3MgaW5kaWNhdGluZyB3ZSBhcmUgYWxyZWFkeSBpbgorCSAqIHByb2Nlc3Mgb2YgcGVyZm9ybWluZyBDUFUgaG90cGx1Zy4gQ2FsbGVycyBjYW4gY2hlY2sgaWYgY3B1Y29udHJvbAorCSAqIGlzIGFscmVhZHkgYWNxdWlyZWQgYnkgY3VycmVudCB0aHJlYWQsIGFuZCBpZiBzbyBub3QgY2F1c2UKKwkgKiBhIGRlYWQgbG9jayBieSBub3QgYWNxdWlyaW5nIHRoZSBsb2NrCisJICovCisJY3VycmVudC0+ZmxhZ3MgfD0gUEZfSE9UUExVR19DUFU7CiAJZXJyID0gbm90aWZpZXJfY2FsbF9jaGFpbigmY3B1X2NoYWluLCBDUFVfRE9XTl9QUkVQQVJFLAogCQkJCQkJKHZvaWQgKikobG9uZyljcHUpOwogCWlmIChlcnIgPT0gTk9USUZZX0JBRCkgewpAQCAtMTQ2LDYgKzE3MSw3IEBACiBvdXRfYWxsb3dlZDoKIAlzZXRfY3B1c19hbGxvd2VkKGN1cnJlbnQsIG9sZF9hbGxvd2VkKTsKIG91dDoKKwljdXJyZW50LT5mbGFncyAmPSB+UEZfSE9UUExVR19DUFU7CiAJdW5sb2NrX2NwdV9ob3RwbHVnKCk7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTE2Myw2ICsxODksMTIgQEAKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBvdXQ7CiAJfQorCisJLyoKKwkgKiBMZWF2ZSBhIHRyYWNlIGluIGN1cnJlbnQtPmZsYWdzIGluZGljYXRpbmcgd2UgYXJlIGFscmVhZHkgaW4KKwkgKiBwcm9jZXNzIG9mIHBlcmZvcm1pbmcgQ1BVIGhvdHBsdWcuCisJICovCisJY3VycmVudC0+ZmxhZ3MgfD0gUEZfSE9UUExVR19DUFU7CiAJcmV0ID0gbm90aWZpZXJfY2FsbF9jaGFpbigmY3B1X2NoYWluLCBDUFVfVVBfUFJFUEFSRSwgaGNwdSk7CiAJaWYgKHJldCA9PSBOT1RJRllfQkFEKSB7CiAJCXByaW50aygiJXM6IGF0dGVtcHQgdG8gYnJpbmcgdXAgQ1BVICV1IGZhaWxlZFxuIiwKQEAgLTE4NSw2ICsyMTcsNyBAQAogCWlmIChyZXQgIT0gMCkKIAkJbm90aWZpZXJfY2FsbF9jaGFpbigmY3B1X2NoYWluLCBDUFVfVVBfQ0FOQ0VMRUQsIGhjcHUpOwogb3V0OgorCWN1cnJlbnQtPmZsYWdzICY9IH5QRl9IT1RQTFVHX0NQVTsKIAl1cCgmY3B1Y29udHJvbCk7CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9tYWluLmMgYi9rZXJuZWwvcG93ZXIvbWFpbi5jCmluZGV4IDE4ZDdkNjkuLjZlZTJjYWQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9tYWluLmMKKysrIGIva2VybmVsL3Bvd2VyL21haW4uYwpAQCAtMTY3LDcgKzE2Nyw3IEBACiB7CiAJaW50IGVycm9yOwogCi0JaWYgKHBtX29wcy0+dmFsaWQgJiYgIXBtX29wcy0+dmFsaWQoc3RhdGUpKQorCWlmIChwbV9vcHMgJiYgcG1fb3BzLT52YWxpZCAmJiAhcG1fb3BzLT52YWxpZChzdGF0ZSkpCiAJCXJldHVybiAtRU5PREVWOwogCWlmIChkb3duX3RyeWxvY2soJnBtX3NlbSkpCiAJCXJldHVybiAtRUJVU1k7CmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvcG93ZXIuaCBiL2tlcm5lbC9wb3dlci9wb3dlci5oCmluZGV4IGQ0ZmQ5NmEuLjZjMDQyYjUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9wb3dlci5oCisrKyBiL2tlcm5lbC9wb3dlci9wb3dlci5oCkBAIC02NSw4ICs2NSw4IEBACiBleHRlcm4gYXNtbGlua2FnZSBpbnQgc3dzdXNwX2FyY2hfc3VzcGVuZCh2b2lkKTsKIGV4dGVybiBhc21saW5rYWdlIGludCBzd3N1c3BfYXJjaF9yZXN1bWUodm9pZCk7CiAKLWV4dGVybiBpbnQgcmVzdG9yZV9oaWdobWVtKHZvaWQpOwotZXh0ZXJuIHN0cnVjdCBwYmUgKiBhbGxvY19wYWdlZGlyKHVuc2lnbmVkIG5yX3BhZ2VzKTsKK2V4dGVybiB2b2lkIGZyZWVfcGFnZWRpcihzdHJ1Y3QgcGJlICpwYmxpc3QpOworZXh0ZXJuIHN0cnVjdCBwYmUgKmFsbG9jX3BhZ2VkaXIodW5zaWduZWQgbnJfcGFnZXMsIGdmcF90IGdmcF9tYXNrLCBpbnQgc2FmZV9uZWVkZWQpOwogZXh0ZXJuIHZvaWQgY3JlYXRlX3BiZV9saXN0KHN0cnVjdCBwYmUgKnBibGlzdCwgdW5zaWduZWQgbnJfcGFnZXMpOwogZXh0ZXJuIHZvaWQgc3dzdXNwX2ZyZWUodm9pZCk7Ci1leHRlcm4gaW50IGVub3VnaF9zd2FwKHVuc2lnbmVkIG5yX3BhZ2VzKTsKK2V4dGVybiBpbnQgYWxsb2NfZGF0YV9wYWdlcyhzdHJ1Y3QgcGJlICpwYmxpc3QsIGdmcF90IGdmcF9tYXNrLCBpbnQgc2FmZV9uZWVkZWQpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL3NuYXBzaG90LmMgYi9rZXJuZWwvcG93ZXIvc25hcHNob3QuYwppbmRleCA3MjNmNTE3Li40YTZkYmNlIDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvc25hcHNob3QuYworKysgYi9rZXJuZWwvcG93ZXIvc25hcHNob3QuYwpAQCAtODgsOCArODgsNyBAQAogCXJldHVybiAwOwogfQogCi0KLXN0YXRpYyBpbnQgc2F2ZV9oaWdobWVtKHZvaWQpCitpbnQgc2F2ZV9oaWdobWVtKHZvaWQpCiB7CiAJc3RydWN0IHpvbmUgKnpvbmU7CiAJaW50IHJlcyA9IDA7CkBAIC0xMjAsMTEgKzExOSw3IEBACiAJfQogCXJldHVybiAwOwogfQotI2Vsc2UKLXN0YXRpYyBpbnQgc2F2ZV9oaWdobWVtKHZvaWQpIHsgcmV0dXJuIDA7IH0KLWludCByZXN0b3JlX2hpZ2htZW0odm9pZCkgeyByZXR1cm4gMDsgfQotI2VuZGlmIC8qIENPTkZJR19ISUdITUVNICovCi0KKyNlbmRpZgogCiBzdGF0aWMgaW50IHBmbl9pc19ub3NhdmUodW5zaWduZWQgbG9uZyBwZm4pCiB7CkBAIC0yMTYsNyArMjExLDcgQEAKICAqCWZyZWVfcGFnZWRpciAtIGZyZWUgcGFnZXMgYWxsb2NhdGVkIHdpdGggYWxsb2NfcGFnZWRpcigpCiAgKi8KIAotc3RhdGljIHZvaWQgZnJlZV9wYWdlZGlyKHN0cnVjdCBwYmUgKnBibGlzdCkKK3ZvaWQgZnJlZV9wYWdlZGlyKHN0cnVjdCBwYmUgKnBibGlzdCkKIHsKIAlzdHJ1Y3QgcGJlICpwYmU7CiAKQEAgLTI2OSw5ICsyNjQsMzAgQEAKIAlwcl9kZWJ1ZygiY3JlYXRlX3BiZV9saXN0KCk6IGluaXRpYWxpemVkICVkIFBCRXNcbiIsIG51bSk7CiB9CiAKLXN0YXRpYyB2b2lkICphbGxvY19pbWFnZV9wYWdlKHZvaWQpCisvKioKKyAqCUBzYWZlX25lZWRlZCAtIG9uIHJlc3VtZSwgZm9yIHN0b3JpbmcgdGhlIFBCRSBsaXN0IGFuZCB0aGUgaW1hZ2UsCisgKgl3ZSBjYW4gb25seSB1c2UgbWVtb3J5IHBhZ2VzIHRoYXQgZG8gbm90IGNvbmZsaWN0IHdpdGggdGhlIHBhZ2VzCisgKgl3aGljaCBoYWQgYmVlbiB1c2VkIGJlZm9yZSBzdXNwZW5kLgorICoKKyAqCVRoZSB1bnNhZmUgcGFnZXMgYXJlIG1hcmtlZCB3aXRoIHRoZSBQR19ub3NhdmVfZnJlZSBmbGFnCisgKgorICoJQWxsb2NhdGVkIGJ1dCB1bnVzYWJsZSAoaWUgZWF0ZW4pIG1lbW9yeSBwYWdlcyBzaG91bGQgYmUgbWFya2VkCisgKglzbyB0aGF0IHN3c3VzcF9mcmVlKCkgY2FuIHJlbGVhc2UgdGhlbQorICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqYWxsb2NfaW1hZ2VfcGFnZShnZnBfdCBnZnBfbWFzaywgaW50IHNhZmVfbmVlZGVkKQogewotCXZvaWQgKnJlcyA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9BVE9NSUMgfCBfX0dGUF9DT0xEKTsKKwl2b2lkICpyZXM7CisKKwlpZiAoc2FmZV9uZWVkZWQpCisJCWRvIHsKKwkJCXJlcyA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKGdmcF9tYXNrKTsKKwkJCWlmIChyZXMgJiYgUGFnZU5vc2F2ZUZyZWUodmlydF90b19wYWdlKHJlcykpKQorCQkJCS8qIFRoaXMgaXMgZm9yIHN3c3VzcF9mcmVlKCkgKi8KKwkJCQlTZXRQYWdlTm9zYXZlKHZpcnRfdG9fcGFnZShyZXMpKTsKKwkJfSB3aGlsZSAocmVzICYmIFBhZ2VOb3NhdmVGcmVlKHZpcnRfdG9fcGFnZShyZXMpKSk7CisJZWxzZQorCQlyZXMgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShnZnBfbWFzayk7CiAJaWYgKHJlcykgewogCQlTZXRQYWdlTm9zYXZlKHZpcnRfdG9fcGFnZShyZXMpKTsKIAkJU2V0UGFnZU5vc2F2ZUZyZWUodmlydF90b19wYWdlKHJlcykpOwpAQCAtMjc5LDYgKzI5NSwxMSBAQAogCXJldHVybiByZXM7CiB9CiAKK3Vuc2lnbmVkIGxvbmcgZ2V0X3NhZmVfcGFnZShnZnBfdCBnZnBfbWFzaykKK3sKKwlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpYWxsb2NfaW1hZ2VfcGFnZShnZnBfbWFzaywgMSk7Cit9CisKIC8qKgogICoJYWxsb2NfcGFnZWRpciAtIEFsbG9jYXRlIHRoZSBwYWdlIGRpcmVjdG9yeS4KICAqCkBAIC0yOTIsNyArMzEzLDcgQEAKICAqCU9uIGVhY2ggcGFnZSB3ZSBzZXQgdXAgYSBsaXN0IG9mIHN0cnVjdF9wYmUgZWxlbWVudHMuCiAgKi8KIAotc3RydWN0IHBiZSAqYWxsb2NfcGFnZWRpcih1bnNpZ25lZCBpbnQgbnJfcGFnZXMpCitzdHJ1Y3QgcGJlICphbGxvY19wYWdlZGlyKHVuc2lnbmVkIGludCBucl9wYWdlcywgZ2ZwX3QgZ2ZwX21hc2ssIGludCBzYWZlX25lZWRlZCkKIHsKIAl1bnNpZ25lZCBpbnQgbnVtOwogCXN0cnVjdCBwYmUgKnBibGlzdCwgKnBiZTsKQEAgLTMwMSwxMiArMzIyLDEyIEBACiAJCXJldHVybiBOVUxMOwogCiAJcHJfZGVidWcoImFsbG9jX3BhZ2VkaXIoKTogbnJfcGFnZXMgPSAlZFxuIiwgbnJfcGFnZXMpOwotCXBibGlzdCA9IGFsbG9jX2ltYWdlX3BhZ2UoKTsKKwlwYmxpc3QgPSBhbGxvY19pbWFnZV9wYWdlKGdmcF9tYXNrLCBzYWZlX25lZWRlZCk7CiAJLyogRklYTUU6IHJld3JpdGUgdGhpcyB1Z2x5IGxvb3AgKi8KIAlmb3IgKHBiZSA9IHBibGlzdCwgbnVtID0gUEJFU19QRVJfUEFHRTsgcGJlICYmIG51bSA8IG5yX3BhZ2VzOwogICAgICAgICAJCXBiZSA9IHBiZS0+bmV4dCwgbnVtICs9IFBCRVNfUEVSX1BBR0UpIHsKIAkJcGJlICs9IFBCX1BBR0VfU0tJUDsKLQkJcGJlLT5uZXh0ID0gYWxsb2NfaW1hZ2VfcGFnZSgpOworCQlwYmUtPm5leHQgPSBhbGxvY19pbWFnZV9wYWdlKGdmcF9tYXNrLCBzYWZlX25lZWRlZCk7CiAJfQogCWlmICghcGJlKSB7IC8qIGdldF96ZXJvZWRfcGFnZSgpIGZhaWxlZCAqLwogCQlmcmVlX3BhZ2VkaXIocGJsaXN0KTsKQEAgLTM1NCwyNCArMzc1LDMyIEBACiAJCShucl9wYWdlcyArIFBCRVNfUEVSX1BBR0UgLSAxKSAvIFBCRVNfUEVSX1BBR0UpOwogfQogCitpbnQgYWxsb2NfZGF0YV9wYWdlcyhzdHJ1Y3QgcGJlICpwYmxpc3QsIGdmcF90IGdmcF9tYXNrLCBpbnQgc2FmZV9uZWVkZWQpCit7CisJc3RydWN0IHBiZSAqcDsKKworCWZvcl9lYWNoX3BiZSAocCwgcGJsaXN0KSB7CisJCXAtPmFkZHJlc3MgPSAodW5zaWduZWQgbG9uZylhbGxvY19pbWFnZV9wYWdlKGdmcF9tYXNrLCBzYWZlX25lZWRlZCk7CisJCWlmICghcC0+YWRkcmVzcykKKwkJCXJldHVybiAtRU5PTUVNOworCX0KKwlyZXR1cm4gMDsKK30KIAogc3RhdGljIHN0cnVjdCBwYmUgKnN3c3VzcF9hbGxvYyh1bnNpZ25lZCBpbnQgbnJfcGFnZXMpCiB7Ci0Jc3RydWN0IHBiZSAqcGJsaXN0LCAqcDsKKwlzdHJ1Y3QgcGJlICpwYmxpc3Q7CiAKLQlpZiAoIShwYmxpc3QgPSBhbGxvY19wYWdlZGlyKG5yX3BhZ2VzKSkpIHsKKwlpZiAoIShwYmxpc3QgPSBhbGxvY19wYWdlZGlyKG5yX3BhZ2VzLCBHRlBfQVRPTUlDIHwgX19HRlBfQ09MRCwgMCkpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAic3VzcGVuZDogQWxsb2NhdGluZyBwYWdlZGlyIGZhaWxlZC5cbiIpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAJY3JlYXRlX3BiZV9saXN0KHBibGlzdCwgbnJfcGFnZXMpOwogCi0JZm9yX2VhY2hfcGJlIChwLCBwYmxpc3QpIHsKLQkJcC0+YWRkcmVzcyA9ICh1bnNpZ25lZCBsb25nKWFsbG9jX2ltYWdlX3BhZ2UoKTsKLQkJaWYgKCFwLT5hZGRyZXNzKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgInN1c3BlbmQ6IEFsbG9jYXRpbmcgaW1hZ2UgcGFnZXMgZmFpbGVkLlxuIik7Ci0JCQlzd3N1c3BfZnJlZSgpOwotCQkJcmV0dXJuIE5VTEw7Ci0JCX0KKwlpZiAoYWxsb2NfZGF0YV9wYWdlcyhwYmxpc3QsIEdGUF9BVE9NSUMgfCBfX0dGUF9DT0xELCAwKSkgeworCQlwcmludGsoS0VSTl9FUlIgInN1c3BlbmQ6IEFsbG9jYXRpbmcgaW1hZ2UgcGFnZXMgZmFpbGVkLlxuIik7CisJCXN3c3VzcF9mcmVlKCk7CisJCXJldHVybiBOVUxMOwogCX0KIAogCXJldHVybiBwYmxpc3Q7CkBAIC0zODIsMTEgKzQxMSw2IEBACiAJdW5zaWduZWQgaW50IG5yX3BhZ2VzOwogCiAJcHJfZGVidWcoInN3c3VzcDogY3JpdGljYWwgc2VjdGlvbjogXG4iKTsKLQlpZiAoc2F2ZV9oaWdobWVtKCkpIHsKLQkJcHJpbnRrKEtFUk5fQ1JJVCAic3dzdXNwOiBOb3QgZW5vdWdoIGZyZWUgcGFnZXMgZm9yIGhpZ2htZW1cbiIpOwotCQlyZXN0b3JlX2hpZ2htZW0oKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQogCiAJZHJhaW5fbG9jYWxfcGFnZXMoKTsKIAlucl9wYWdlcyA9IGNvdW50X2RhdGFfcGFnZXMoKTsKQEAgLTQwNiwxMSArNDMwLDYgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JaWYgKCFlbm91Z2hfc3dhcChucl9wYWdlcykpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJzd3N1c3A6IE5vdCBlbm91Z2ggZnJlZSBzd2FwXG4iKTsKLQkJcmV0dXJuIC1FTk9TUEM7Ci0JfQotCiAJcGFnZWRpcl9ub3NhdmUgPSBzd3N1c3BfYWxsb2MobnJfcGFnZXMpOwogCWlmICghcGFnZWRpcl9ub3NhdmUpCiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL3N3c3VzcC5jIGIva2VybmVsL3Bvd2VyL3N3c3VzcC5jCmluZGV4IGUxYWIyOGIuLmMwNWY0NmUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9zd3N1c3AuYworKysgYi9rZXJuZWwvcG93ZXIvc3dzdXNwLmMKQEAgLTczLDYgKzczLDE0IEBACiAKICNpbmNsdWRlICJwb3dlci5oIgogCisjaWZkZWYgQ09ORklHX0hJR0hNRU0KK2ludCBzYXZlX2hpZ2htZW0odm9pZCk7CitpbnQgcmVzdG9yZV9oaWdobWVtKHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbnQgc2F2ZV9oaWdobWVtKHZvaWQpIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbnQgcmVzdG9yZV9oaWdobWVtKHZvaWQpIHsgcmV0dXJuIDA7IH0KKyNlbmRpZgorCiAjZGVmaW5lIENJUEhFUiAiYWVzIgogI2RlZmluZSBNQVhLRVkgMzIKICNkZWZpbmUgTUFYSVYgIDMyCkBAIC01MDAsNiArNTA4LDI2IEBACiB9CiAKIC8qKgorICoJZW5vdWdoX3N3YXAgLSBNYWtlIHN1cmUgd2UgaGF2ZSBlbm91Z2ggc3dhcCB0byBzYXZlIHRoZSBpbWFnZS4KKyAqCisgKglSZXR1cm5zIFRSVUUgb3IgRkFMU0UgYWZ0ZXIgY2hlY2tpbmcgdGhlIHRvdGFsIGFtb3VudCBvZiBzd2FwCisgKglzcGFjZSBhdmFpYWJsZS4KKyAqCisgKglGSVhNRTogc2lfc3dhcGluZm8oJmkpIHJldHVybnMgYWxsIHN3YXAgZGV2aWNlcyBpbmZvcm1hdGlvbi4KKyAqCVdlIHNob3VsZCBvbmx5IGNvbnNpZGVyIHJlc3VtZV9kZXZpY2UuCisgKi8KKworc3RhdGljIGludCBlbm91Z2hfc3dhcCh1bnNpZ25lZCBpbnQgbnJfcGFnZXMpCit7CisJc3RydWN0IHN5c2luZm8gaTsKKworCXNpX3N3YXBpbmZvKCZpKTsKKwlwcl9kZWJ1Zygic3dzdXNwOiBhdmFpbGFibGUgc3dhcDogJWx1IHBhZ2VzXG4iLCBpLmZyZWVzd2FwKTsKKwlyZXR1cm4gaS5mcmVlc3dhcCA+IChucl9wYWdlcyArIFBBR0VTX0ZPUl9JTyArCisJCShucl9wYWdlcyArIFBCRVNfUEVSX1BBR0UgLSAxKSAvIFBCRVNfUEVSX1BBR0UpOworfQorCisvKioKICAqCXdyaXRlX3N1c3BlbmRfaW1hZ2UgLSBXcml0ZSBlbnRpcmUgaW1hZ2UgYW5kIG1ldGFkYXRhLgogICoKICAqLwpAQCAtNTA3LDYgKzUzNSwxMSBAQAogewogCWludCBlcnJvcjsKIAorCWlmICghZW5vdWdoX3N3YXAobnJfY29weV9wYWdlcykpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJzd3N1c3A6IE5vdCBlbm91Z2ggZnJlZSBzd2FwXG4iKTsKKwkJcmV0dXJuIC1FTk9TUEM7CisJfQorCiAJaW5pdF9oZWFkZXIoKTsKIAlpZiAoKGVycm9yID0gZGF0YV93cml0ZSgpKSkKIAkJZ290byBGcmVlRGF0YTsKQEAgLTUyNiwyNyArNTU5LDYgQEAKIAlnb3RvIERvbmU7CiB9CiAKLS8qKgotICoJZW5vdWdoX3N3YXAgLSBNYWtlIHN1cmUgd2UgaGF2ZSBlbm91Z2ggc3dhcCB0byBzYXZlIHRoZSBpbWFnZS4KLSAqCi0gKglSZXR1cm5zIFRSVUUgb3IgRkFMU0UgYWZ0ZXIgY2hlY2tpbmcgdGhlIHRvdGFsIGFtb3VudCBvZiBzd2FwCi0gKglzcGFjZSBhdmFpYWJsZS4KLSAqCi0gKglGSVhNRTogc2lfc3dhcGluZm8oJmkpIHJldHVybnMgYWxsIHN3YXAgZGV2aWNlcyBpbmZvcm1hdGlvbi4KLSAqCVdlIHNob3VsZCBvbmx5IGNvbnNpZGVyIHJlc3VtZV9kZXZpY2UuCi0gKi8KLQotaW50IGVub3VnaF9zd2FwKHVuc2lnbmVkIGludCBucl9wYWdlcykKLXsKLQlzdHJ1Y3Qgc3lzaW5mbyBpOwotCi0Jc2lfc3dhcGluZm8oJmkpOwotCXByX2RlYnVnKCJzd3N1c3A6IGF2YWlsYWJsZSBzd2FwOiAlbHUgcGFnZXNcbiIsIGkuZnJlZXN3YXApOwotCXJldHVybiBpLmZyZWVzd2FwID4gKG5yX3BhZ2VzICsgUEFHRVNfRk9SX0lPICsKLQkJKG5yX3BhZ2VzICsgUEJFU19QRVJfUEFHRSAtIDEpIC8gUEJFU19QRVJfUEFHRSk7Ci19Ci0KLQogLyogSXQgaXMgaW1wb3J0YW50IF9OT1RfIHRvIHVtb3VudCBmaWxlc3lzdGVtcyBhdCB0aGlzIHBvaW50LiBXZSB3YW50CiAgKiB0aGVtIHN5bmNlZCAoaW4gY2FzZSBzb21ldGhpbmcgZ29lcyB3cm9uZykgYnV0IHdlIERPIG5vdCB3YW50IHRvIG1hcmsKICAqIGZpbGVzeXN0ZW0gY2xlYW46IGl0IGlzIG5vdC4gKEFuZCBpdCBkb2VzIG5vdCBtYXR0ZXIsIGlmIHdlIHJlc3VtZQpAQCAtNTU2LDEyICs1NjgsMTUgQEAKIHsKIAlpbnQgZXJyb3I7CiAKKwlpZiAoKGVycm9yID0gc3dzdXNwX3N3YXBfY2hlY2soKSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJzd3N1c3A6IGNhbm5vdCBmaW5kIHN3YXAgZGV2aWNlLCB0cnkgc3dhcG9uIC1hLlxuIik7CisJCXJldHVybiBlcnJvcjsKKwl9CiAJbG9ja19zd2FwZGV2aWNlcygpOwogCWVycm9yID0gd3JpdGVfc3VzcGVuZF9pbWFnZSgpOwogCS8qIFRoaXMgd2lsbCB1bmxvY2sgaWdub3JlZCBzd2FwIGRldmljZXMgc2luY2Ugd3JpdGluZyBpcyBmaW5pc2hlZCAqLwogCWxvY2tfc3dhcGRldmljZXMoKTsKIAlyZXR1cm4gZXJyb3I7Ci0KIH0KIAogCkBAIC01NjksNiArNTg0LDcgQEAKIGludCBzd3N1c3Bfc3VzcGVuZCh2b2lkKQogewogCWludCBlcnJvcjsKKwogCWlmICgoZXJyb3IgPSBhcmNoX3ByZXBhcmVfc3VzcGVuZCgpKSkKIAkJcmV0dXJuIGVycm9yOwogCWxvY2FsX2lycV9kaXNhYmxlKCk7CkBAIC01ODAsMTUgKzU5NiwxMiBAQAogCSAqLwogCWlmICgoZXJyb3IgPSBkZXZpY2VfcG93ZXJfZG93bihQTVNHX0ZSRUVaRSkpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiU29tZSBkZXZpY2VzIGZhaWxlZCB0byBwb3dlciBkb3duLCBhYm9ydGluZyBzdXNwZW5kXG4iKTsKLQkJbG9jYWxfaXJxX2VuYWJsZSgpOwotCQlyZXR1cm4gZXJyb3I7CisJCWdvdG8gRW5hYmxlX2lycXM7CiAJfQogCi0JaWYgKChlcnJvciA9IHN3c3VzcF9zd2FwX2NoZWNrKCkpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAic3dzdXNwOiBjYW5ub3QgZmluZCBzd2FwIGRldmljZSwgdHJ5IHN3YXBvbiAtYS5cbiIpOwotCQlkZXZpY2VfcG93ZXJfdXAoKTsKLQkJbG9jYWxfaXJxX2VuYWJsZSgpOwotCQlyZXR1cm4gZXJyb3I7CisJaWYgKChlcnJvciA9IHNhdmVfaGlnaG1lbSgpKSkgeworCQlwcmludGsoS0VSTl9FUlIgInN3c3VzcDogTm90IGVub3VnaCBmcmVlIHBhZ2VzIGZvciBoaWdobWVtXG4iKTsKKwkJZ290byBSZXN0b3JlX2hpZ2htZW07CiAJfQogCiAJc2F2ZV9wcm9jZXNzb3Jfc3RhdGUoKTsKQEAgLTU5Niw4ICs2MDksMTAgQEAKIAkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciAlZCBzdXNwZW5kaW5nXG4iLCBlcnJvcik7CiAJLyogUmVzdG9yZSBjb250cm9sIGZsb3cgbWFnaWNhbGx5IGFwcGVhcnMgaGVyZSAqLwogCXJlc3RvcmVfcHJvY2Vzc29yX3N0YXRlKCk7CitSZXN0b3JlX2hpZ2htZW06CiAJcmVzdG9yZV9oaWdobWVtKCk7CiAJZGV2aWNlX3Bvd2VyX3VwKCk7CitFbmFibGVfaXJxczoKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiAJcmV0dXJuIGVycm9yOwogfQpAQCAtNjI5LDEyNyArNjQ0LDQzIEBACiB9CiAKIC8qKgotICoJT24gcmVzdW1lLCBmb3Igc3RvcmluZyB0aGUgUEJFIGxpc3QgYW5kIHRoZSBpbWFnZSwKLSAqCXdlIGNhbiBvbmx5IHVzZSBtZW1vcnkgcGFnZXMgdGhhdCBkbyBub3QgY29uZmxpY3Qgd2l0aCB0aGUgcGFnZXMKLSAqCXdoaWNoIGhhZCBiZWVuIHVzZWQgYmVmb3JlIHN1c3BlbmQuCi0gKgotICoJV2UgZG9uJ3Qga25vdyB3aGljaCBwYWdlcyBhcmUgdXNhYmxlIHVudGlsIHdlIGFsbG9jYXRlIHRoZW0uCi0gKgotICoJQWxsb2NhdGVkIGJ1dCB1bnVzYWJsZSAoaWUgZWF0ZW4pIG1lbW9yeSBwYWdlcyBhcmUgbWFya2VkIHNvIHRoYXQKLSAqCXN3c3VzcF9mcmVlKCkgY2FuIHJlbGVhc2UgdGhlbQorICoJbWFya191bnNhZmVfcGFnZXMgLSBtYXJrIHRoZSBwYWdlcyB0aGF0IGNhbm5vdCBiZSB1c2VkIGZvciBzdG9yaW5nCisgKgl0aGUgaW1hZ2UgZHVyaW5nIHJlc3VtZSwgYmVjYXVzZSB0aGV5IGNvbmZsaWN0IHdpdGggdGhlIHBhZ2VzIHRoYXQKKyAqCWhhZCBiZWVuIHVzZWQgYmVmb3JlIHN1c3BlbmQKICAqLwogCi11bnNpZ25lZCBsb25nIGdldF9zYWZlX3BhZ2UoZ2ZwX3QgZ2ZwX21hc2spCi17Ci0JdW5zaWduZWQgbG9uZyBtOwotCi0JZG8gewotCQltID0gZ2V0X3plcm9lZF9wYWdlKGdmcF9tYXNrKTsKLQkJaWYgKG0gJiYgUGFnZU5vc2F2ZUZyZWUodmlydF90b19wYWdlKG0pKSkKLQkJCS8qIFRoaXMgaXMgZm9yIHN3c3VzcF9mcmVlKCkgKi8KLQkJCVNldFBhZ2VOb3NhdmUodmlydF90b19wYWdlKG0pKTsKLQl9IHdoaWxlIChtICYmIFBhZ2VOb3NhdmVGcmVlKHZpcnRfdG9fcGFnZShtKSkpOwotCWlmIChtKSB7Ci0JCS8qIFRoaXMgaXMgZm9yIHN3c3VzcF9mcmVlKCkgKi8KLQkJU2V0UGFnZU5vc2F2ZSh2aXJ0X3RvX3BhZ2UobSkpOwotCQlTZXRQYWdlTm9zYXZlRnJlZSh2aXJ0X3RvX3BhZ2UobSkpOwotCX0KLQlyZXR1cm4gbTsKLX0KLQotLyoqCi0gKgljaGVja19wYWdlZGlyIC0gV2UgZW5zdXJlIGhlcmUgdGhhdCBwYWdlcyB0aGF0IHRoZSBQQkVzIHBvaW50IHRvCi0gKgl3b24ndCBjb2xsaWRlIHdpdGggcGFnZXMgd2hlcmUgd2UncmUgZ29pbmcgdG8gcmVzdG9yZSBmcm9tIHRoZSBsb2FkZWQKLSAqCXBhZ2VzIGxhdGVyCi0gKi8KLQotc3RhdGljIGludCBjaGVja19wYWdlZGlyKHN0cnVjdCBwYmUgKnBibGlzdCkKLXsKLQlzdHJ1Y3QgcGJlICpwOwotCi0JLyogVGhpcyBpcyBuZWNlc3NhcnksIHNvIHRoYXQgd2UgY2FuIGZyZWUgYWxsb2NhdGVkIHBhZ2VzCi0JICogaW4gY2FzZSBvZiBmYWlsdXJlCi0JICovCi0JZm9yX2VhY2hfcGJlIChwLCBwYmxpc3QpCi0JCXAtPmFkZHJlc3MgPSAwVUw7Ci0KLQlmb3JfZWFjaF9wYmUgKHAsIHBibGlzdCkgewotCQlwLT5hZGRyZXNzID0gZ2V0X3NhZmVfcGFnZShHRlBfQVRPTUlDKTsKLQkJaWYgKCFwLT5hZGRyZXNzKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCXJldHVybiAwOwotfQotCi0vKioKLSAqCXN3c3VzcF9wYWdlZGlyX3JlbG9jYXRlIC0gSXQgaXMgcG9zc2libGUsIHRoYXQgc29tZSBtZW1vcnkgcGFnZXMKLSAqCW9jY3VwaWVkIGJ5IHRoZSBsaXN0IG9mIFBCRXMgY29sbGlkZSB3aXRoIHBhZ2VzIHdoZXJlIHdlJ3JlIGdvaW5nIHRvCi0gKglyZXN0b3JlIGZyb20gdGhlIGxvYWRlZCBwYWdlcyBsYXRlci4gIFdlIHJlbG9jYXRlIHRoZW0gaGVyZS4KLSAqLwotCi1zdGF0aWMgc3RydWN0IHBiZSAqc3dzdXNwX3BhZ2VkaXJfcmVsb2NhdGUoc3RydWN0IHBiZSAqcGJsaXN0KQorc3RhdGljIHZvaWQgbWFya191bnNhZmVfcGFnZXMoc3RydWN0IHBiZSAqcGJsaXN0KQogewogCXN0cnVjdCB6b25lICp6b25lOwogCXVuc2lnbmVkIGxvbmcgem9uZV9wZm47Ci0Jc3RydWN0IHBiZSAqcGJwYWdlLCAqdGFpbCwgKnA7Ci0Jdm9pZCAqbTsKLQlpbnQgcmVsID0gMDsKKwlzdHJ1Y3QgcGJlICpwOwogCiAJaWYgKCFwYmxpc3QpIC8qIGEgc2FuaXR5IGNoZWNrICovCi0JCXJldHVybiBOVUxMOwotCi0JcHJfZGVidWcoInN3c3VzcDogUmVsb2NhdGluZyBwYWdlZGlyICglbHUgcGFnZXMgdG8gY2hlY2spXG4iLAotCQkJc3dzdXNwX2luZm8ucGFnZWRpcl9wYWdlcyk7CisJCXJldHVybjsKIAogCS8qIENsZWFyIHBhZ2UgZmxhZ3MgKi8KLQogCWZvcl9lYWNoX3pvbmUgKHpvbmUpIHsKLSAgICAgICAgCWZvciAoem9uZV9wZm4gPSAwOyB6b25lX3BmbiA8IHpvbmUtPnNwYW5uZWRfcGFnZXM7ICsrem9uZV9wZm4pCi0gICAgICAgIAkJaWYgKHBmbl92YWxpZCh6b25lX3BmbiArIHpvbmUtPnpvbmVfc3RhcnRfcGZuKSkKLSAgICAgICAgICAgICAgICAJCUNsZWFyUGFnZU5vc2F2ZUZyZWUocGZuX3RvX3BhZ2Uoem9uZV9wZm4gKworCQlmb3IgKHpvbmVfcGZuID0gMDsgem9uZV9wZm4gPCB6b25lLT5zcGFubmVkX3BhZ2VzOyArK3pvbmVfcGZuKQorCQkJaWYgKHBmbl92YWxpZCh6b25lX3BmbiArIHpvbmUtPnpvbmVfc3RhcnRfcGZuKSkKKwkJCQlDbGVhclBhZ2VOb3NhdmVGcmVlKHBmbl90b19wYWdlKHpvbmVfcGZuICsKIAkJCQkJem9uZS0+em9uZV9zdGFydF9wZm4pKTsKIAl9CiAKIAkvKiBNYXJrIG9yaWcgYWRkcmVzc2VzICovCi0KIAlmb3JfZWFjaF9wYmUgKHAsIHBibGlzdCkKIAkJU2V0UGFnZU5vc2F2ZUZyZWUodmlydF90b19wYWdlKHAtPm9yaWdfYWRkcmVzcykpOwogCi0JdGFpbCA9IHBibGlzdCArIFBCX1BBR0VfU0tJUDsKK30KIAotCS8qIFJlbG9jYXRlIGNvbGxpZGluZyBwYWdlcyAqLwotCi0JZm9yX2VhY2hfcGJfcGFnZSAocGJwYWdlLCBwYmxpc3QpIHsKLQkJaWYgKFBhZ2VOb3NhdmVGcmVlKHZpcnRfdG9fcGFnZSgodW5zaWduZWQgbG9uZylwYnBhZ2UpKSkgewotCQkJbSA9ICh2b2lkICopZ2V0X3NhZmVfcGFnZShHRlBfQVRPTUlDIHwgX19HRlBfQ09MRCk7Ci0JCQlpZiAoIW0pCi0JCQkJcmV0dXJuIE5VTEw7Ci0JCQltZW1jcHkobSwgKHZvaWQgKilwYnBhZ2UsIFBBR0VfU0laRSk7Ci0JCQlpZiAocGJwYWdlID09IHBibGlzdCkKLQkJCQlwYmxpc3QgPSAoc3RydWN0IHBiZSAqKW07Ci0JCQllbHNlCi0JCQkJdGFpbC0+bmV4dCA9IChzdHJ1Y3QgcGJlICopbTsKLQkJCXBicGFnZSA9IChzdHJ1Y3QgcGJlICopbTsKLQotCQkJLyogV2UgaGF2ZSB0byBsaW5rIHRoZSBQQkVzIGFnYWluICovCi0JCQlmb3IgKHAgPSBwYnBhZ2U7IHAgPCBwYnBhZ2UgKyBQQl9QQUdFX1NLSVA7IHArKykKLQkJCQlpZiAocC0+bmV4dCkgLyogbmVlZGVkIHRvIHNhdmUgdGhlIGVuZCAqLwotCQkJCQlwLT5uZXh0ID0gcCArIDE7Ci0KLQkJCXJlbCsrOwotCQl9Ci0JCXRhaWwgPSBwYnBhZ2UgKyBQQl9QQUdFX1NLSVA7CitzdGF0aWMgdm9pZCBjb3B5X3BhZ2VfYmFja3VwX2xpc3Qoc3RydWN0IHBiZSAqZHN0LCBzdHJ1Y3QgcGJlICpzcmMpCit7CisJLyogV2UgYXNzdW1lIGJvdGggbGlzdHMgY29udGFpbiB0aGUgc2FtZSBudW1iZXIgb2YgZWxlbWVudHMgKi8KKwl3aGlsZSAoc3JjKSB7CisJCWRzdC0+b3JpZ19hZGRyZXNzID0gc3JjLT5vcmlnX2FkZHJlc3M7CisJCWRzdC0+c3dhcF9hZGRyZXNzID0gc3JjLT5zd2FwX2FkZHJlc3M7CisJCWRzdCA9IGRzdC0+bmV4dDsKKwkJc3JjID0gc3JjLT5uZXh0OwogCX0KLQotCS8qIFRoaXMgaXMgZm9yIHN3c3VzcF9mcmVlKCkgKi8KLQlmb3JfZWFjaF9wYl9wYWdlIChwYnBhZ2UsIHBibGlzdCkgewotCQlTZXRQYWdlTm9zYXZlKHZpcnRfdG9fcGFnZShwYnBhZ2UpKTsKLQkJU2V0UGFnZU5vc2F2ZUZyZWUodmlydF90b19wYWdlKHBicGFnZSkpOwotCX0KLQotCXByaW50aygic3dzdXNwOiBSZWxvY2F0ZWQgJWQgcGFnZXNcbiIsIHJlbCk7Ci0KLQlyZXR1cm4gcGJsaXN0OwogfQogCiAvKgpAQCAtODg4LDcgKzgxOSw3IEBACiAJCSAqIFJlc2V0IHN3YXAgc2lnbmF0dXJlIG5vdy4KIAkJICovCiAJCWVycm9yID0gYmlvX3dyaXRlX3BhZ2UoMCwgJnN3c3VzcF9oZWFkZXIpOwotCX0gZWxzZSB7IAorCX0gZWxzZSB7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlpZiAoIWVycm9yKQpAQCAtOTkwLDIwICs5MjEsMjUgQEAKIAlpbnQgZXJyb3IgPSAwOwogCXN0cnVjdCBwYmUgKnA7CiAKLQlpZiAoIShwID0gYWxsb2NfcGFnZWRpcihucl9jb3B5X3BhZ2VzKSkpCisJaWYgKCEocCA9IGFsbG9jX3BhZ2VkaXIobnJfY29weV9wYWdlcywgR0ZQX0FUT01JQywgMCkpKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCWlmICgoZXJyb3IgPSByZWFkX3BhZ2VkaXIocCkpKQogCQlyZXR1cm4gZXJyb3I7Ci0KIAljcmVhdGVfcGJlX2xpc3QocCwgbnJfY29weV9wYWdlcyk7Ci0KLQlpZiAoIShwYWdlZGlyX25vc2F2ZSA9IHN3c3VzcF9wYWdlZGlyX3JlbG9jYXRlKHApKSkKKwltYXJrX3Vuc2FmZV9wYWdlcyhwKTsKKwlwYWdlZGlyX25vc2F2ZSA9IGFsbG9jX3BhZ2VkaXIobnJfY29weV9wYWdlcywgR0ZQX0FUT01JQywgMSk7CisJaWYgKHBhZ2VkaXJfbm9zYXZlKSB7CisJCWNyZWF0ZV9wYmVfbGlzdChwYWdlZGlyX25vc2F2ZSwgbnJfY29weV9wYWdlcyk7CisJCWNvcHlfcGFnZV9iYWNrdXBfbGlzdChwYWdlZGlyX25vc2F2ZSwgcCk7CisJfQorCWZyZWVfcGFnZWRpcihwKTsKKwlpZiAoIXBhZ2VkaXJfbm9zYXZlKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGltYWdlIGFuZCByZWFkIHRoZSBkYXRhIGZyb20gc3dhcCAqLwogCi0JZXJyb3IgPSBjaGVja19wYWdlZGlyKHBhZ2VkaXJfbm9zYXZlKTsKKwllcnJvciA9IGFsbG9jX2RhdGFfcGFnZXMocGFnZWRpcl9ub3NhdmUsIEdGUF9BVE9NSUMsIDEpOwogCiAJaWYgKCFlcnJvcikKIAkJZXJyb3IgPSBkYXRhX3JlYWQocGFnZWRpcl9ub3NhdmUpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3B0cmFjZS5jIGIva2VybmVsL3B0cmFjZS5jCmluZGV4IDViOGRkOTguLmI4OGQ0MTggMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wdHJhY2UuYworKysgYi9rZXJuZWwvcHRyYWNlLmMKQEAgLTE1NSw3ICsxNTUsNyBAQAogCXJldHZhbCA9IC1FUEVSTTsKIAlpZiAodGFzay0+cGlkIDw9IDEpCiAJCWdvdG8gYmFkOwotCWlmICh0YXNrID09IGN1cnJlbnQpCisJaWYgKHRhc2stPnRnaWQgPT0gY3VycmVudC0+dGdpZCkKIAkJZ290byBiYWQ7CiAJLyogdGhlIHNhbWUgcHJvY2VzcyBjYW5ub3QgYmUgYXR0YWNoZWQgbWFueSB0aW1lcyAqLwogCWlmICh0YXNrLT5wdHJhY2UgJiBQVF9QVFJBQ0VEKQpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkLmMgYi9rZXJuZWwvc2NoZWQuYwppbmRleCAzY2UyNjk1Li5iNjUwNjY3IDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQuYworKysgYi9rZXJuZWwvc2NoZWQuYwpAQCAtMjA2LDYgKzIwNiw3IEBACiAJICovCiAJdW5zaWduZWQgbG9uZyBucl9ydW5uaW5nOwogI2lmZGVmIENPTkZJR19TTVAKKwl1bnNpZ25lZCBsb25nIHByaW9fYmlhczsKIAl1bnNpZ25lZCBsb25nIGNwdV9sb2FkWzNdOwogI2VuZGlmCiAJdW5zaWduZWQgbG9uZyBsb25nIG5yX3N3aXRjaGVzOwpAQCAtNjU5LDEzICs2NjAsNjggQEAKIAlyZXR1cm4gcHJpbzsKIH0KIAorI2lmZGVmIENPTkZJR19TTVAKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbmNfcHJpb19iaWFzKHJ1bnF1ZXVlX3QgKnJxLCBpbnQgcHJpbykKK3sKKwlycS0+cHJpb19iaWFzICs9IE1BWF9QUklPIC0gcHJpbzsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRlY19wcmlvX2JpYXMocnVucXVldWVfdCAqcnEsIGludCBwcmlvKQoreworCXJxLT5wcmlvX2JpYXMgLT0gTUFYX1BSSU8gLSBwcmlvOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW5jX25yX3J1bm5pbmcodGFza190ICpwLCBydW5xdWV1ZV90ICpycSkKK3sKKwlycS0+bnJfcnVubmluZysrOworCWlmIChydF90YXNrKHApKSB7CisJCWlmIChwICE9IHJxLT5taWdyYXRpb25fdGhyZWFkKQorCQkJLyoKKwkJCSAqIFRoZSBtaWdyYXRpb24gdGhyZWFkIGRvZXMgdGhlIGFjdHVhbCBiYWxhbmNpbmcuIERvCisJCQkgKiBub3QgYmlhcyBieSBpdHMgcHJpb3JpdHkgYXMgdGhlIHVsdHJhIGhpZ2ggcHJpb3JpdHkKKwkJCSAqIHdpbGwgc2tldyBiYWxhbmNpbmcgYWR2ZXJzZWx5LgorCQkJICovCisJCQlpbmNfcHJpb19iaWFzKHJxLCBwLT5wcmlvKTsKKwl9IGVsc2UKKwkJaW5jX3ByaW9fYmlhcyhycSwgcC0+c3RhdGljX3ByaW8pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGVjX25yX3J1bm5pbmcodGFza190ICpwLCBydW5xdWV1ZV90ICpycSkKK3sKKwlycS0+bnJfcnVubmluZy0tOworCWlmIChydF90YXNrKHApKSB7CisJCWlmIChwICE9IHJxLT5taWdyYXRpb25fdGhyZWFkKQorCQkJZGVjX3ByaW9fYmlhcyhycSwgcC0+cHJpbyk7CisJfSBlbHNlCisJCWRlY19wcmlvX2JpYXMocnEsIHAtPnN0YXRpY19wcmlvKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgaW5jX3ByaW9fYmlhcyhydW5xdWV1ZV90ICpycSwgaW50IHByaW8pCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkZWNfcHJpb19iaWFzKHJ1bnF1ZXVlX3QgKnJxLCBpbnQgcHJpbykKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIGluY19ucl9ydW5uaW5nKHRhc2tfdCAqcCwgcnVucXVldWVfdCAqcnEpCit7CisJcnEtPm5yX3J1bm5pbmcrKzsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRlY19ucl9ydW5uaW5nKHRhc2tfdCAqcCwgcnVucXVldWVfdCAqcnEpCit7CisJcnEtPm5yX3J1bm5pbmctLTsKK30KKyNlbmRpZgorCiAvKgogICogX19hY3RpdmF0ZV90YXNrIC0gbW92ZSBhIHRhc2sgdG8gdGhlIHJ1bnF1ZXVlLgogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgX19hY3RpdmF0ZV90YXNrKHRhc2tfdCAqcCwgcnVucXVldWVfdCAqcnEpCiB7CiAJZW5xdWV1ZV90YXNrKHAsIHJxLT5hY3RpdmUpOwotCXJxLT5ucl9ydW5uaW5nKys7CisJaW5jX25yX3J1bm5pbmcocCwgcnEpOwogfQogCiAvKgpAQCAtNjc0LDcgKzczMCw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgX19hY3RpdmF0ZV9pZGxlX3Rhc2sodGFza190ICpwLCBydW5xdWV1ZV90ICpycSkKIHsKIAllbnF1ZXVlX3Rhc2tfaGVhZChwLCBycS0+YWN0aXZlKTsKLQlycS0+bnJfcnVubmluZysrOworCWluY19ucl9ydW5uaW5nKHAsIHJxKTsKIH0KIAogc3RhdGljIGludCByZWNhbGNfdGFza19wcmlvKHRhc2tfdCAqcCwgdW5zaWduZWQgbG9uZyBsb25nIG5vdykKQEAgLTc1OSw3ICs4MTUsOCBAQAogCX0KICNlbmRpZgogCi0JcC0+cHJpbyA9IHJlY2FsY190YXNrX3ByaW8ocCwgbm93KTsKKwlpZiAoIXJ0X3Rhc2socCkpCisJCXAtPnByaW8gPSByZWNhbGNfdGFza19wcmlvKHAsIG5vdyk7CiAKIAkvKgogCSAqIFRoaXMgY2hlY2tzIHRvIG1ha2Ugc3VyZSBpdCdzIG5vdCBhbiB1bmludGVycnVwdGlibGUgdGFzawpAQCAtNzkzLDcgKzg1MCw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIGRlYWN0aXZhdGVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHJ1bnF1ZXVlX3QgKnJxKQogewotCXJxLT5ucl9ydW5uaW5nLS07CisJZGVjX25yX3J1bm5pbmcocCwgcnEpOwogCWRlcXVldWVfdGFzayhwLCBwLT5hcnJheSk7CiAJcC0+YXJyYXkgPSBOVUxMOwogfQpAQCAtODA4LDIxICs4NjUsMjggQEAKICNpZmRlZiBDT05GSUdfU01QCiBzdGF0aWMgdm9pZCByZXNjaGVkX3Rhc2sodGFza190ICpwKQogewotCWludCBuZWVkX3Jlc2NoZWQsIG5ycG9sbGluZzsKKwlpbnQgY3B1OwogCiAJYXNzZXJ0X3NwaW5fbG9ja2VkKCZ0YXNrX3JxKHApLT5sb2NrKTsKIAotCS8qIG1pbmltaXNlIHRoZSBjaGFuY2Ugb2Ygc2VuZGluZyBhbiBpbnRlcnJ1cHQgdG8gcG9sbF9pZGxlKCkgKi8KLQlucnBvbGxpbmcgPSB0ZXN0X3Rza190aHJlYWRfZmxhZyhwLFRJRl9QT0xMSU5HX05SRkxBRyk7Ci0JbmVlZF9yZXNjaGVkID0gdGVzdF9hbmRfc2V0X3Rza190aHJlYWRfZmxhZyhwLFRJRl9ORUVEX1JFU0NIRUQpOwotCW5ycG9sbGluZyB8PSB0ZXN0X3Rza190aHJlYWRfZmxhZyhwLFRJRl9QT0xMSU5HX05SRkxBRyk7CisJaWYgKHVubGlrZWx5KHRlc3RfdHNrX3RocmVhZF9mbGFnKHAsIFRJRl9ORUVEX1JFU0NIRUQpKSkKKwkJcmV0dXJuOwogCi0JaWYgKCFuZWVkX3Jlc2NoZWQgJiYgIW5ycG9sbGluZyAmJiAodGFza19jcHUocCkgIT0gc21wX3Byb2Nlc3Nvcl9pZCgpKSkKLQkJc21wX3NlbmRfcmVzY2hlZHVsZSh0YXNrX2NwdShwKSk7CisJc2V0X3Rza190aHJlYWRfZmxhZyhwLCBUSUZfTkVFRF9SRVNDSEVEKTsKKworCWNwdSA9IHRhc2tfY3B1KHApOworCWlmIChjcHUgPT0gc21wX3Byb2Nlc3Nvcl9pZCgpKQorCQlyZXR1cm47CisKKwkvKiBORUVEX1JFU0NIRUQgbXVzdCBiZSB2aXNpYmxlIGJlZm9yZSB3ZSB0ZXN0IFBPTExJTkdfTlJGTEFHICovCisJc21wX21iKCk7CisJaWYgKCF0ZXN0X3Rza190aHJlYWRfZmxhZyhwLCBUSUZfUE9MTElOR19OUkZMQUcpKQorCQlzbXBfc2VuZF9yZXNjaGVkdWxlKGNwdSk7CiB9CiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIHJlc2NoZWRfdGFzayh0YXNrX3QgKnApCiB7CisJYXNzZXJ0X3NwaW5fbG9ja2VkKCZ0YXNrX3JxKHApLT5sb2NrKTsKIAlzZXRfdHNrX25lZWRfcmVzY2hlZChwKTsKIH0KICNlbmRpZgpAQCAtOTMwLDI3ICs5OTQsNjEgQEAKICAqIFdlIHdhbnQgdG8gdW5kZXItZXN0aW1hdGUgdGhlIGxvYWQgb2YgbWlncmF0aW9uIHNvdXJjZXMsIHRvCiAgKiBiYWxhbmNlIGNvbnNlcnZhdGl2ZWx5LgogICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgc291cmNlX2xvYWQoaW50IGNwdSwgaW50IHR5cGUpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19zb3VyY2VfbG9hZChpbnQgY3B1LCBpbnQgdHlwZSwgZW51bSBpZGxlX3R5cGUgaWRsZSkKIHsKIAlydW5xdWV1ZV90ICpycSA9IGNwdV9ycShjcHUpOwotCXVuc2lnbmVkIGxvbmcgbG9hZF9ub3cgPSBycS0+bnJfcnVubmluZyAqIFNDSEVEX0xPQURfU0NBTEU7Ci0JaWYgKHR5cGUgPT0gMCkKLQkJcmV0dXJuIGxvYWRfbm93OworCXVuc2lnbmVkIGxvbmcgcnVubmluZyA9IHJxLT5ucl9ydW5uaW5nOworCXVuc2lnbmVkIGxvbmcgc291cmNlX2xvYWQsIGNwdV9sb2FkID0gcnEtPmNwdV9sb2FkW3R5cGUtMV0sCisJCWxvYWRfbm93ID0gcnVubmluZyAqIFNDSEVEX0xPQURfU0NBTEU7CiAKLQlyZXR1cm4gbWluKHJxLT5jcHVfbG9hZFt0eXBlLTFdLCBsb2FkX25vdyk7CisJaWYgKHR5cGUgPT0gMCkKKwkJc291cmNlX2xvYWQgPSBsb2FkX25vdzsKKwllbHNlCisJCXNvdXJjZV9sb2FkID0gbWluKGNwdV9sb2FkLCBsb2FkX25vdyk7CisKKwlpZiAocnVubmluZyA+IDEgfHwgKGlkbGUgPT0gTk9UX0lETEUgJiYgcnVubmluZykpCisJCS8qCisJCSAqIElmIHdlIGFyZSBidXN5IHJlYmFsYW5jaW5nIHRoZSBsb2FkIGlzIGJpYXNlZCBieQorCQkgKiBwcmlvcml0eSB0byBjcmVhdGUgJ25pY2UnIHN1cHBvcnQgYWNyb3NzIGNwdXMuIFdoZW4KKwkJICogaWRsZSByZWJhbGFuY2luZyB3ZSBzaG91bGQgb25seSBiaWFzIHRoZSBzb3VyY2VfbG9hZCBpZgorCQkgKiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIHRhc2sgcnVubmluZyBvbiB0aGF0IHF1ZXVlIHRvCisJCSAqIHByZXZlbnQgaWRsZSByZWJhbGFuY2UgZnJvbSB0cnlpbmcgdG8gcHVsbCB0YXNrcyBmcm9tIGEKKwkJICogcXVldWUgd2l0aCBvbmx5IG9uZSBydW5uaW5nIHRhc2suCisJCSAqLworCQlzb3VyY2VfbG9hZCA9IHNvdXJjZV9sb2FkICogcnEtPnByaW9fYmlhcyAvIHJ1bm5pbmc7CisKKwlyZXR1cm4gc291cmNlX2xvYWQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBzb3VyY2VfbG9hZChpbnQgY3B1LCBpbnQgdHlwZSkKK3sKKwlyZXR1cm4gX19zb3VyY2VfbG9hZChjcHUsIHR5cGUsIE5PVF9JRExFKTsKIH0KIAogLyoKICAqIFJldHVybiBhIGhpZ2ggZ3Vlc3MgYXQgdGhlIGxvYWQgb2YgYSBtaWdyYXRpb24tdGFyZ2V0IGNwdQogICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdGFyZ2V0X2xvYWQoaW50IGNwdSwgaW50IHR5cGUpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX190YXJnZXRfbG9hZChpbnQgY3B1LCBpbnQgdHlwZSwgZW51bSBpZGxlX3R5cGUgaWRsZSkKIHsKIAlydW5xdWV1ZV90ICpycSA9IGNwdV9ycShjcHUpOwotCXVuc2lnbmVkIGxvbmcgbG9hZF9ub3cgPSBycS0+bnJfcnVubmluZyAqIFNDSEVEX0xPQURfU0NBTEU7Ci0JaWYgKHR5cGUgPT0gMCkKLQkJcmV0dXJuIGxvYWRfbm93OworCXVuc2lnbmVkIGxvbmcgcnVubmluZyA9IHJxLT5ucl9ydW5uaW5nOworCXVuc2lnbmVkIGxvbmcgdGFyZ2V0X2xvYWQsIGNwdV9sb2FkID0gcnEtPmNwdV9sb2FkW3R5cGUtMV0sCisJCWxvYWRfbm93ID0gcnVubmluZyAqIFNDSEVEX0xPQURfU0NBTEU7CiAKLQlyZXR1cm4gbWF4KHJxLT5jcHVfbG9hZFt0eXBlLTFdLCBsb2FkX25vdyk7CisJaWYgKHR5cGUgPT0gMCkKKwkJdGFyZ2V0X2xvYWQgPSBsb2FkX25vdzsKKwllbHNlCisJCXRhcmdldF9sb2FkID0gbWF4KGNwdV9sb2FkLCBsb2FkX25vdyk7CisKKwlpZiAocnVubmluZyA+IDEgfHwgKGlkbGUgPT0gTk9UX0lETEUgJiYgcnVubmluZykpCisJCXRhcmdldF9sb2FkID0gdGFyZ2V0X2xvYWQgKiBycS0+cHJpb19iaWFzIC8gcnVubmluZzsKKworCXJldHVybiB0YXJnZXRfbG9hZDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHRhcmdldF9sb2FkKGludCBjcHUsIGludCB0eXBlKQoreworCXJldHVybiBfX3RhcmdldF9sb2FkKGNwdSwgdHlwZSwgTk9UX0lETEUpOwogfQogCiAvKgpAQCAtMTQxMSw3ICsxNTA5LDcgQEAKIAkJCQlsaXN0X2FkZF90YWlsKCZwLT5ydW5fbGlzdCwgJmN1cnJlbnQtPnJ1bl9saXN0KTsKIAkJCQlwLT5hcnJheSA9IGN1cnJlbnQtPmFycmF5OwogCQkJCXAtPmFycmF5LT5ucl9hY3RpdmUrKzsKLQkJCQlycS0+bnJfcnVubmluZysrOworCQkJCWluY19ucl9ydW5uaW5nKHAsIHJxKTsKIAkJCX0KIAkJCXNldF9uZWVkX3Jlc2NoZWQoKTsKIAkJfSBlbHNlCkBAIC0xNzU2LDkgKzE4NTQsOSBAQAogCSAgICAgICBydW5xdWV1ZV90ICp0aGlzX3JxLCBwcmlvX2FycmF5X3QgKnRoaXNfYXJyYXksIGludCB0aGlzX2NwdSkKIHsKIAlkZXF1ZXVlX3Rhc2socCwgc3JjX2FycmF5KTsKLQlzcmNfcnEtPm5yX3J1bm5pbmctLTsKKwlkZWNfbnJfcnVubmluZyhwLCBzcmNfcnEpOwogCXNldF90YXNrX2NwdShwLCB0aGlzX2NwdSk7Ci0JdGhpc19ycS0+bnJfcnVubmluZysrOworCWluY19ucl9ydW5uaW5nKHAsIHRoaXNfcnEpOwogCWVucXVldWVfdGFzayhwLCB0aGlzX2FycmF5KTsKIAlwLT50aW1lc3RhbXAgPSAocC0+dGltZXN0YW1wIC0gc3JjX3JxLT50aW1lc3RhbXBfbGFzdF90aWNrKQogCQkJCSsgdGhpc19ycS0+dGltZXN0YW1wX2xhc3RfdGljazsKQEAgLTE5MzcsOSArMjAzNSw5IEBACiAKIAkJCS8qIEJpYXMgYmFsYW5jaW5nIHRvd2FyZCBjcHVzIG9mIG91ciBkb21haW4gKi8KIAkJCWlmIChsb2NhbF9ncm91cCkKLQkJCQlsb2FkID0gdGFyZ2V0X2xvYWQoaSwgbG9hZF9pZHgpOworCQkJCWxvYWQgPSBfX3RhcmdldF9sb2FkKGksIGxvYWRfaWR4LCBpZGxlKTsKIAkJCWVsc2UKLQkJCQlsb2FkID0gc291cmNlX2xvYWQoaSwgbG9hZF9pZHgpOworCQkJCWxvYWQgPSBfX3NvdXJjZV9sb2FkKGksIGxvYWRfaWR4LCBpZGxlKTsKIAogCQkJYXZnX2xvYWQgKz0gbG9hZDsKIAkJfQpAQCAtMjA0NCwxNCArMjE0MiwxNSBAQAogLyoKICAqIGZpbmRfYnVzaWVzdF9xdWV1ZSAtIGZpbmQgdGhlIGJ1c2llc3QgcnVucXVldWUgYW1vbmcgdGhlIGNwdXMgaW4gZ3JvdXAuCiAgKi8KLXN0YXRpYyBydW5xdWV1ZV90ICpmaW5kX2J1c2llc3RfcXVldWUoc3RydWN0IHNjaGVkX2dyb3VwICpncm91cCkKK3N0YXRpYyBydW5xdWV1ZV90ICpmaW5kX2J1c2llc3RfcXVldWUoc3RydWN0IHNjaGVkX2dyb3VwICpncm91cCwKKwllbnVtIGlkbGVfdHlwZSBpZGxlKQogewogCXVuc2lnbmVkIGxvbmcgbG9hZCwgbWF4X2xvYWQgPSAwOwogCXJ1bnF1ZXVlX3QgKmJ1c2llc3QgPSBOVUxMOwogCWludCBpOwogCiAJZm9yX2VhY2hfY3B1X21hc2soaSwgZ3JvdXAtPmNwdW1hc2spIHsKLQkJbG9hZCA9IHNvdXJjZV9sb2FkKGksIDApOworCQlsb2FkID0gX19zb3VyY2VfbG9hZChpLCAwLCBpZGxlKTsKIAogCQlpZiAobG9hZCA+IG1heF9sb2FkKSB7CiAJCQltYXhfbG9hZCA9IGxvYWQ7CkBAIC0yMDk1LDcgKzIxOTQsNyBAQAogCQlnb3RvIG91dF9iYWxhbmNlZDsKIAl9CiAKLQlidXNpZXN0ID0gZmluZF9idXNpZXN0X3F1ZXVlKGdyb3VwKTsKKwlidXNpZXN0ID0gZmluZF9idXNpZXN0X3F1ZXVlKGdyb3VwLCBpZGxlKTsKIAlpZiAoIWJ1c2llc3QpIHsKIAkJc2NoZWRzdGF0X2luYyhzZCwgbGJfbm9idXN5cVtpZGxlXSk7CiAJCWdvdG8gb3V0X2JhbGFuY2VkOwpAQCAtMjIxOCw3ICsyMzE3LDcgQEAKIAkJZ290byBvdXRfYmFsYW5jZWQ7CiAJfQogCi0JYnVzaWVzdCA9IGZpbmRfYnVzaWVzdF9xdWV1ZShncm91cCk7CisJYnVzaWVzdCA9IGZpbmRfYnVzaWVzdF9xdWV1ZShncm91cCwgTkVXTFlfSURMRSk7CiAJaWYgKCFidXNpZXN0KSB7CiAJCXNjaGVkc3RhdF9pbmMoc2QsIGxiX25vYnVzeXFbTkVXTFlfSURMRV0pOwogCQlnb3RvIG91dF9iYWxhbmNlZDsKQEAgLTM0NTEsOCArMzU1MCwxMCBAQAogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCWFycmF5ID0gcC0+YXJyYXk7Ci0JaWYgKGFycmF5KQorCWlmIChhcnJheSkgewogCQlkZXF1ZXVlX3Rhc2socCwgYXJyYXkpOworCQlkZWNfcHJpb19iaWFzKHJxLCBwLT5zdGF0aWNfcHJpbyk7CisJfQogCiAJb2xkX3ByaW8gPSBwLT5wcmlvOwogCW5ld19wcmlvID0gTklDRV9UT19QUklPKG5pY2UpOwpAQCAtMzQ2Miw2ICszNTYzLDcgQEAKIAogCWlmIChhcnJheSkgewogCQllbnF1ZXVlX3Rhc2socCwgYXJyYXkpOworCQlpbmNfcHJpb19iaWFzKHJxLCBwLT5zdGF0aWNfcHJpbyk7CiAJCS8qCiAJCSAqIElmIHRoZSB0YXNrIGluY3JlYXNlZCBpdHMgcHJpb3JpdHkgb3IgaXMgcnVubmluZyBhbmQKIAkJICogbG93ZXJlZCBpdHMgcHJpb3JpdHksIHRoZW4gcmVzY2hlZHVsZSBpdHMgQ1BVOgpkaWZmIC0tZ2l0IGEva2VybmVsL3NpZ25hbC5jIGIva2VybmVsL3NpZ25hbC5jCmluZGV4IDFiZjNjMzkuLjgwNzg5YTUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zaWduYWwuYworKysgYi9rZXJuZWwvc2lnbmFsLmMKQEAgLTE0OTksNyArMTQ5OSw3IEBACiAKIAlwc2lnID0gdHNrLT5wYXJlbnQtPnNpZ2hhbmQ7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBzaWctPnNpZ2xvY2ssIGZsYWdzKTsKLQlpZiAoc2lnID09IFNJR0NITEQgJiYKKwlpZiAoIXRzay0+cHRyYWNlICYmIHNpZyA9PSBTSUdDSExEICYmCiAJICAgIChwc2lnLT5hY3Rpb25bU0lHQ0hMRC0xXS5zYS5zYV9oYW5kbGVyID09IFNJR19JR04gfHwKIAkgICAgIChwc2lnLT5hY3Rpb25bU0lHQ0hMRC0xXS5zYS5zYV9mbGFncyAmIFNBX05PQ0xEV0FJVCkpKSB7CiAJCS8qCmRpZmYgLS1naXQgYS9rZXJuZWwvc29mdGxvY2t1cC5jIGIva2VybmVsL3NvZnRsb2NrdXAuYwppbmRleCBhMmRjY2ViLi5jNjcxODlhMiAxMDA2NDQKLS0tIGEva2VybmVsL3NvZnRsb2NrdXAuYworKysgYi9rZXJuZWwvc29mdGxvY2t1cC5jCkBAIC03Myw5ICs3Myw2IEBACiBzdGF0aWMgaW50IHdhdGNoZG9nKHZvaWQgKiBfX2JpbmRfY3B1KQogewogCXN0cnVjdCBzY2hlZF9wYXJhbSBwYXJhbSA9IHsgLnNjaGVkX3ByaW9yaXR5ID0gOTkgfTsKLQlpbnQgdGhpc19jcHUgPSAobG9uZykgX19iaW5kX2NwdTsKLQotCXByaW50aygic29mdGxvY2t1cCB0aHJlYWQgJWQgc3RhcnRlZCB1cC5cbiIsIHRoaXNfY3B1KTsKIAogCXNjaGVkX3NldHNjaGVkdWxlcihjdXJyZW50LCBTQ0hFRF9GSUZPLCAmcGFyYW0pOwogCWN1cnJlbnQtPmZsYWdzIHw9IFBGX05PRlJFRVpFOwpkaWZmIC0tZ2l0IGEva2VybmVsL3N5cy5jIGIva2VybmVsL3N5cy5jCmluZGV4IGM0M2IzZTIuLmJjZTkzM2UgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zeXMuYworKysgYi9rZXJuZWwvc3lzLmMKQEAgLTE0OTcsNiArMTQ5Nyw4IEBACiAKIERFQ0xBUkVfUldTRU0odXRzX3NlbSk7CiAKK0VYUE9SVF9TWU1CT0wodXRzX3NlbSk7CisKIGFzbWxpbmthZ2UgbG9uZyBzeXNfbmV3dW5hbWUoc3RydWN0IG5ld191dHNuYW1lIF9fdXNlciAqIG5hbWUpCiB7CiAJaW50IGVycm5vID0gMDsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zeXNjdGwuYyBiL2tlcm5lbC9zeXNjdGwuYwppbmRleCBjNGYzNWY5Li45OTkwZTEwIDEwMDY0NAotLS0gYS9rZXJuZWwvc3lzY3RsLmMKKysrIGIva2VybmVsL3N5c2N0bC5jCkBAIC0xNjksNyArMTY5LDcgQEAKIAogZXh0ZXJuIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY19zeXNfcm9vdDsKIAotc3RhdGljIHZvaWQgcmVnaXN0ZXJfcHJvY190YWJsZShjdGxfdGFibGUgKiwgc3RydWN0IHByb2NfZGlyX2VudHJ5ICopOworc3RhdGljIHZvaWQgcmVnaXN0ZXJfcHJvY190YWJsZShjdGxfdGFibGUgKiwgc3RydWN0IHByb2NfZGlyX2VudHJ5ICosIHZvaWQgKik7CiBzdGF0aWMgdm9pZCB1bnJlZ2lzdGVyX3Byb2NfdGFibGUoY3RsX3RhYmxlICosIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqKTsKICNlbmRpZgogCkBAIC05OTIsMTAgKzk5Miw1MSBAQAogCiBleHRlcm4gdm9pZCBpbml0X2lycV9wcm9jICh2b2lkKTsKIAorc3RhdGljIERFRklORV9TUElOTE9DSyhzeXNjdGxfbG9jayk7CisKKy8qIGNhbGxlZCB1bmRlciBzeXNjdGxfbG9jayAqLworc3RhdGljIGludCB1c2VfdGFibGUoc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKnApCit7CisJaWYgKHVubGlrZWx5KHAtPnVucmVnaXN0ZXJpbmcpKQorCQlyZXR1cm4gMDsKKwlwLT51c2VkKys7CisJcmV0dXJuIDE7Cit9CisKKy8qIGNhbGxlZCB1bmRlciBzeXNjdGxfbG9jayAqLworc3RhdGljIHZvaWQgdW51c2VfdGFibGUoc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKnApCit7CisJaWYgKCEtLXAtPnVzZWQpCisJCWlmICh1bmxpa2VseShwLT51bnJlZ2lzdGVyaW5nKSkKKwkJCWNvbXBsZXRlKHAtPnVucmVnaXN0ZXJpbmcpOworfQorCisvKiBjYWxsZWQgdW5kZXIgc3lzY3RsX2xvY2ssIHdpbGwgcmVhY3F1aXJlIGlmIGhhcyB0byB3YWl0ICovCitzdGF0aWMgdm9pZCBzdGFydF91bnJlZ2lzdGVyaW5nKHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpwKQoreworCS8qCisJICogaWYgcC0+dXNlZCBpcyAwLCBub2JvZHkgd2lsbCBldmVyIHRvdWNoIHRoYXQgZW50cnkgYWdhaW47CisJICogd2UnbGwgZWxpbWluYXRlIGFsbCBwYXRocyB0byBpdCBiZWZvcmUgZHJvcHBpbmcgc3lzY3RsX2xvY2sKKwkgKi8KKwlpZiAodW5saWtlbHkocC0+dXNlZCkpIHsKKwkJc3RydWN0IGNvbXBsZXRpb24gd2FpdDsKKwkJaW5pdF9jb21wbGV0aW9uKCZ3YWl0KTsKKwkJcC0+dW5yZWdpc3RlcmluZyA9ICZ3YWl0OworCQlzcGluX3VubG9jaygmc3lzY3RsX2xvY2spOworCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZ3YWl0KTsKKwkJc3Bpbl9sb2NrKCZzeXNjdGxfbG9jayk7CisJfQorCS8qCisJICogZG8gbm90IHJlbW92ZSBmcm9tIHRoZSBsaXN0IHVudGlsIG5vYm9keSBob2xkcyBpdDsgd2Fsa2luZyB0aGUKKwkgKiBsaXN0IGluIGRvX3N5c2N0bCgpIHJlbGllcyBvbiB0aGF0LgorCSAqLworCWxpc3RfZGVsX2luaXQoJnAtPmN0bF9lbnRyeSk7Cit9CisKIHZvaWQgX19pbml0IHN5c2N0bF9pbml0KHZvaWQpCiB7CiAjaWZkZWYgQ09ORklHX1BST0NfRlMKLQlyZWdpc3Rlcl9wcm9jX3RhYmxlKHJvb3RfdGFibGUsIHByb2Nfc3lzX3Jvb3QpOworCXJlZ2lzdGVyX3Byb2NfdGFibGUocm9vdF90YWJsZSwgcHJvY19zeXNfcm9vdCwgJnJvb3RfdGFibGVfaGVhZGVyKTsKIAlpbml0X2lycV9wcm9jKCk7CiAjZW5kaWYKIH0KQEAgLTEwMDQsNiArMTA0NSw3IEBACiAJICAgICAgIHZvaWQgX191c2VyICpuZXd2YWwsIHNpemVfdCBuZXdsZW4pCiB7CiAJc3RydWN0IGxpc3RfaGVhZCAqdG1wOworCWludCBlcnJvciA9IC1FTk9URElSOwogCiAJaWYgKG5sZW4gPD0gMCB8fCBubGVuID49IENUTF9NQVhOQU1FKQogCQlyZXR1cm4gLUVOT1RESVI7CkBAIC0xMDEyLDIwICsxMDU0LDMwIEBACiAJCWlmICghb2xkbGVucCB8fCBnZXRfdXNlcihvbGRfbGVuLCBvbGRsZW5wKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCX0KKwlzcGluX2xvY2soJnN5c2N0bF9sb2NrKTsKIAl0bXAgPSAmcm9vdF90YWJsZV9oZWFkZXIuY3RsX2VudHJ5OwogCWRvIHsKIAkJc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKmhlYWQgPQogCQkJbGlzdF9lbnRyeSh0bXAsIHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyLCBjdGxfZW50cnkpOwogCQl2b2lkICpjb250ZXh0ID0gTlVMTDsKLQkJaW50IGVycm9yID0gcGFyc2VfdGFibGUobmFtZSwgbmxlbiwgb2xkdmFsLCBvbGRsZW5wLCAKKworCQlpZiAoIXVzZV90YWJsZShoZWFkKSkKKwkJCWNvbnRpbnVlOworCisJCXNwaW5fdW5sb2NrKCZzeXNjdGxfbG9jayk7CisKKwkJZXJyb3IgPSBwYXJzZV90YWJsZShuYW1lLCBubGVuLCBvbGR2YWwsIG9sZGxlbnAsIAogCQkJCQluZXd2YWwsIG5ld2xlbiwgaGVhZC0+Y3RsX3RhYmxlLAogCQkJCQkmY29udGV4dCk7CiAJCWtmcmVlKGNvbnRleHQpOworCisJCXNwaW5fbG9jaygmc3lzY3RsX2xvY2spOworCQl1bnVzZV90YWJsZShoZWFkKTsKIAkJaWYgKGVycm9yICE9IC1FTk9URElSKQotCQkJcmV0dXJuIGVycm9yOwotCQl0bXAgPSB0bXAtPm5leHQ7Ci0JfSB3aGlsZSAodG1wICE9ICZyb290X3RhYmxlX2hlYWRlci5jdGxfZW50cnkpOwotCXJldHVybiAtRU5PVERJUjsKKwkJCWJyZWFrOworCX0gd2hpbGUgKCh0bXAgPSB0bXAtPm5leHQpICE9ICZyb290X3RhYmxlX2hlYWRlci5jdGxfZW50cnkpOworCXNwaW5fdW5sb2NrKCZzeXNjdGxfbG9jayk7CisJcmV0dXJuIGVycm9yOwogfQogCiBhc21saW5rYWdlIGxvbmcgc3lzX3N5c2N0bChzdHJ1Y3QgX19zeXNjdGxfYXJncyBfX3VzZXIgKmFyZ3MpCkBAIC0xMjM2LDEyICsxMjg4LDE2IEBACiAJCXJldHVybiBOVUxMOwogCXRtcC0+Y3RsX3RhYmxlID0gdGFibGU7CiAJSU5JVF9MSVNUX0hFQUQoJnRtcC0+Y3RsX2VudHJ5KTsKKwl0bXAtPnVzZWQgPSAwOworCXRtcC0+dW5yZWdpc3RlcmluZyA9IE5VTEw7CisJc3Bpbl9sb2NrKCZzeXNjdGxfbG9jayk7CiAJaWYgKGluc2VydF9hdF9oZWFkKQogCQlsaXN0X2FkZCgmdG1wLT5jdGxfZW50cnksICZyb290X3RhYmxlX2hlYWRlci5jdGxfZW50cnkpOwogCWVsc2UKIAkJbGlzdF9hZGRfdGFpbCgmdG1wLT5jdGxfZW50cnksICZyb290X3RhYmxlX2hlYWRlci5jdGxfZW50cnkpOworCXNwaW5fdW5sb2NrKCZzeXNjdGxfbG9jayk7CiAjaWZkZWYgQ09ORklHX1BST0NfRlMKLQlyZWdpc3Rlcl9wcm9jX3RhYmxlKHRhYmxlLCBwcm9jX3N5c19yb290KTsKKwlyZWdpc3Rlcl9wcm9jX3RhYmxlKHRhYmxlLCBwcm9jX3N5c19yb290LCB0bXApOwogI2VuZGlmCiAJcmV0dXJuIHRtcDsKIH0KQEAgLTEyNTUsMTAgKzEzMTEsMTMgQEAKICAqLwogdm9pZCB1bnJlZ2lzdGVyX3N5c2N0bF90YWJsZShzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqIGhlYWRlcikKIHsKLQlsaXN0X2RlbCgmaGVhZGVyLT5jdGxfZW50cnkpOworCW1pZ2h0X3NsZWVwKCk7CisJc3Bpbl9sb2NrKCZzeXNjdGxfbG9jayk7CisJc3RhcnRfdW5yZWdpc3RlcmluZyhoZWFkZXIpOwogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAJdW5yZWdpc3Rlcl9wcm9jX3RhYmxlKGhlYWRlci0+Y3RsX3RhYmxlLCBwcm9jX3N5c19yb290KTsKICNlbmRpZgorCXNwaW5fdW5sb2NrKCZzeXNjdGxfbG9jayk7CiAJa2ZyZWUoaGVhZGVyKTsKIH0KIApAQCAtMTI2OSw3ICsxMzI4LDcgQEAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogCiAvKiBTY2FuIHRoZSBzeXNjdGwgZW50cmllcyBpbiB0YWJsZSBhbmQgYWRkIHRoZW0gYWxsIGludG8gL3Byb2MgKi8KLXN0YXRpYyB2b2lkIHJlZ2lzdGVyX3Byb2NfdGFibGUoY3RsX3RhYmxlICogdGFibGUsIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcm9vdCkKK3N0YXRpYyB2b2lkIHJlZ2lzdGVyX3Byb2NfdGFibGUoY3RsX3RhYmxlICogdGFibGUsIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcm9vdCwgdm9pZCAqc2V0KQogewogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZGU7CiAJaW50IGxlbjsKQEAgLTEzMDUsMTMgKzEzNjQsMTQgQEAKIAkJCWRlID0gY3JlYXRlX3Byb2NfZW50cnkodGFibGUtPnByb2NuYW1lLCBtb2RlLCByb290KTsKIAkJCWlmICghZGUpCiAJCQkJY29udGludWU7CisJCQlkZS0+c2V0ID0gc2V0OwogCQkJZGUtPmRhdGEgPSAodm9pZCAqKSB0YWJsZTsKIAkJCWlmICh0YWJsZS0+cHJvY19oYW5kbGVyKQogCQkJCWRlLT5wcm9jX2ZvcHMgPSAmcHJvY19zeXNfZmlsZV9vcGVyYXRpb25zOwogCQl9CiAJCXRhYmxlLT5kZSA9IGRlOwogCQlpZiAoZGUtPm1vZGUgJiBTX0lGRElSKQotCQkJcmVnaXN0ZXJfcHJvY190YWJsZSh0YWJsZS0+Y2hpbGQsIGRlKTsKKwkJCXJlZ2lzdGVyX3Byb2NfdGFibGUodGFibGUtPmNoaWxkLCBkZSwgc2V0KTsKIAl9CiB9CiAKQEAgLTEzMzYsNiArMTM5NiwxMyBAQAogCQkJCWNvbnRpbnVlOwogCQl9CiAKKwkJLyoKKwkJICogSW4gYW55IGNhc2UsIG1hcmsgdGhlIGVudHJ5IGFzIGdvbmVyOyB3ZSdsbCBrZWVwIGl0CisJCSAqIGFyb3VuZCBpZiBpdCdzIGJ1c3ksIGJ1dCB3ZSdsbCBrbm93IHRvIGRvIG5vdGhpbmcgd2l0aAorCQkgKiBpdHMgZmllbGRzLiAgV2UgYXJlIHVuZGVyIHN5c2N0bF9sb2NrIGhlcmUuCisJCSAqLworCQlkZS0+ZGF0YSA9IE5VTEw7CisKIAkJLyogRG9uJ3QgdW5yZWdpc3RlciBwcm9jIGVudHJpZXMgdGhhdCBhcmUgc3RpbGwgYmVpbmcgdXNlZC4uICovCiAJCWlmIChhdG9taWNfcmVhZCgmZGUtPmNvdW50KSkKIAkJCWNvbnRpbnVlOwpAQCAtMTM0OSwyNyArMTQxNiwzOCBAQAogCQkJICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKIAlpbnQgb3A7Ci0Jc3RydWN0IHByb2NfZGlyX2VudHJ5ICpkZTsKKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmRlID0gUERFKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKTsKIAlzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTsKIAlzaXplX3QgcmVzOwotCXNzaXplX3QgZXJyb3I7CisJc3NpemVfdCBlcnJvciA9IC1FTk9URElSOwogCQotCWRlID0gUERFKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKTsKLQlpZiAoIWRlIHx8ICFkZS0+ZGF0YSkKLQkJcmV0dXJuIC1FTk9URElSOwotCXRhYmxlID0gKHN0cnVjdCBjdGxfdGFibGUgKikgZGUtPmRhdGE7Ci0JaWYgKCF0YWJsZSB8fCAhdGFibGUtPnByb2NfaGFuZGxlcikKLQkJcmV0dXJuIC1FTk9URElSOwotCW9wID0gKHdyaXRlID8gMDAyIDogMDA0KTsKLQlpZiAoY3RsX3Blcm0odGFibGUsIG9wKSkKLQkJcmV0dXJuIC1FUEVSTTsKLQkKLQlyZXMgPSBjb3VudDsKLQotCWVycm9yID0gKCp0YWJsZS0+cHJvY19oYW5kbGVyKSAodGFibGUsIHdyaXRlLCBmaWxlLCBidWYsICZyZXMsIHBwb3MpOwotCWlmIChlcnJvcikKLQkJcmV0dXJuIGVycm9yOwotCXJldHVybiByZXM7CisJc3Bpbl9sb2NrKCZzeXNjdGxfbG9jayk7CisJaWYgKGRlICYmIGRlLT5kYXRhICYmIHVzZV90YWJsZShkZS0+c2V0KSkgeworCQkvKgorCQkgKiBhdCB0aGF0IHBvaW50IHdlIGtub3cgdGhhdCBzeXNjdGwgd2FzIG5vdCB1bnJlZ2lzdGVyZWQKKwkJICogYW5kIHdvbid0IGJlIHVudGlsIHdlIGZpbmlzaAorCQkgKi8KKwkJc3Bpbl91bmxvY2soJnN5c2N0bF9sb2NrKTsKKwkJdGFibGUgPSAoc3RydWN0IGN0bF90YWJsZSAqKSBkZS0+ZGF0YTsKKwkJaWYgKCF0YWJsZSB8fCAhdGFibGUtPnByb2NfaGFuZGxlcikKKwkJCWdvdG8gb3V0OworCQllcnJvciA9IC1FUEVSTTsKKwkJb3AgPSAod3JpdGUgPyAwMDIgOiAwMDQpOworCQlpZiAoY3RsX3Blcm0odGFibGUsIG9wKSkKKwkJCWdvdG8gb3V0OworCQkKKwkJLyogY2FyZWZ1bDogY2FsbGluZyBjb252ZW50aW9ucyBhcmUgbmFzdHkgaGVyZSAqLworCQlyZXMgPSBjb3VudDsKKwkJZXJyb3IgPSAoKnRhYmxlLT5wcm9jX2hhbmRsZXIpKHRhYmxlLCB3cml0ZSwgZmlsZSwKKwkJCQkJCWJ1ZiwgJnJlcywgcHBvcyk7CisJCWlmICghZXJyb3IpCisJCQllcnJvciA9IHJlczsKKwlvdXQ6CisJCXNwaW5fbG9jaygmc3lzY3RsX2xvY2spOworCQl1bnVzZV90YWJsZShkZS0+c2V0KTsKKwl9CisJc3Bpbl91bmxvY2soJnN5c2N0bF9sb2NrKTsKKwlyZXR1cm4gZXJyb3I7CiB9CiAKIHN0YXRpYyBpbnQgcHJvY19vcGVuc3lzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQpkaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jCmluZGV4IGZmODFiNWMuLjk4NzIyNWIgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfYWxsb2MuYworKysgYi9tbS9wYWdlX2FsbG9jLmMKQEAgLTEzMzAsNyArMTMzMCw3IEBACiAJCX0gZWxzZQogCQkJcHJpbnRrKCJcbiIpOwogCi0JCWZvcl9lYWNoX2NwdShjcHUpIHsKKwkJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKIAkJCXN0cnVjdCBwZXJfY3B1X3BhZ2VzZXQgKnBhZ2VzZXQ7CiAKIAkJCXBhZ2VzZXQgPSB6b25lX3BjcCh6b25lLCBjcHUpOwpkaWZmIC0tZ2l0IGEvbmV0LzgwMi9wODAyMy5jIGIvbmV0LzgwMi9wODAyMy5jCmluZGV4IDYzNjhkM2QuLmQyM2U5MDYgMTAwNjQ0Ci0tLSBhL25ldC84MDIvcDgwMjMuYworKysgYi9uZXQvODAyL3A4MDIzLmMKQEAgLTU0LDggKzU0LDcgQEAKICAqLwogdm9pZCBkZXN0cm95XzgwMjNfY2xpZW50KHN0cnVjdCBkYXRhbGlua19wcm90byAqZGwpCiB7Ci0JaWYgKGRsKQotCQlrZnJlZShkbCk7CisJa2ZyZWUoZGwpOwogfQogCiBFWFBPUlRfU1lNQk9MKGRlc3Ryb3lfODAyM19jbGllbnQpOwpkaWZmIC0tZ2l0IGEvbmV0L2F4MjUvYWZfYXgyNS5jIGIvbmV0L2F4MjUvYWZfYXgyNS5jCmluZGV4IDhlMzdlNzEuLjFiNjgzZjMgMTAwNjQ0Ci0tLSBhL25ldC9heDI1L2FmX2F4MjUuYworKysgYi9uZXQvYXgyNS9hZl9heDI1LmMKQEAgLTExMzgsMTAgKzExMzgsOCBAQAogCXNrLT5za19zdGF0ZSAgID0gVENQX0NMT1NFOwogCXNvY2stPnN0YXRlID0gU1NfVU5DT05ORUNURUQ7CiAKLQlpZiAoYXgyNS0+ZGlnaXBlYXQgIT0gTlVMTCkgewotCQlrZnJlZShheDI1LT5kaWdpcGVhdCk7Ci0JCWF4MjUtPmRpZ2lwZWF0ID0gTlVMTDsKLQl9CisJa2ZyZWUoYXgyNS0+ZGlnaXBlYXQpOworCWF4MjUtPmRpZ2lwZWF0ID0gTlVMTDsKIAogCS8qCiAJICoJSGFuZGxlIGRpZ2ktcGVhdGVycyB0byBiZSB1c2VkLgpkaWZmIC0tZ2l0IGEvbmV0L2F4MjUvYXgyNV9pbi5jIGIvbmV0L2F4MjUvYXgyNV9pbi5jCmluZGV4IDczY2ZjMzQuLjRjZjg3NTQgMTAwNjQ0Ci0tLSBhL25ldC9heDI1L2F4MjVfaW4uYworKysgYi9uZXQvYXgyNS9heDI1X2luLmMKQEAgLTQwMSwxMCArNDAxLDggQEAKIAl9CiAKIAlpZiAoZHAubmRpZ2kgPT0gMCkgewotCQlpZiAoYXgyNS0+ZGlnaXBlYXQgIT0gTlVMTCkgewotCQkJa2ZyZWUoYXgyNS0+ZGlnaXBlYXQpOwotCQkJYXgyNS0+ZGlnaXBlYXQgPSBOVUxMOwotCQl9CisJCWtmcmVlKGF4MjUtPmRpZ2lwZWF0KTsKKwkJYXgyNS0+ZGlnaXBlYXQgPSBOVUxMOwogCX0gZWxzZSB7CiAJCS8qIFJldmVyc2UgdGhlIHNvdXJjZSBTQUJNJ3MgcGF0aCAqLwogCQltZW1jcHkoYXgyNS0+ZGlnaXBlYXQsICZyZXZlcnNlX2RwLCBzaXplb2YoYXgyNV9kaWdpKSk7CmRpZmYgLS1naXQgYS9uZXQvYXgyNS9heDI1X3JvdXRlLmMgYi9uZXQvYXgyNS9heDI1X3JvdXRlLmMKaW5kZXggMjZiNzdkOS4uYjFlOTQ1YmQgMTAwNjQ0Ci0tLSBhL25ldC9heDI1L2F4MjVfcm91dGUuYworKysgYi9uZXQvYXgyNS9heDI1X3JvdXRlLmMKQEAgLTU0LDE1ICs1NCwxMyBAQAogCQlpZiAocy0+ZGV2ID09IGRldikgewogCQkJaWYgKGF4MjVfcm91dGVfbGlzdCA9PSBzKSB7CiAJCQkJYXgyNV9yb3V0ZV9saXN0ID0gcy0+bmV4dDsKLQkJCQlpZiAocy0+ZGlnaXBlYXQgIT0gTlVMTCkKLQkJCQkJa2ZyZWUocy0+ZGlnaXBlYXQpOworCQkJCWtmcmVlKHMtPmRpZ2lwZWF0KTsKIAkJCQlrZnJlZShzKTsKIAkJCX0gZWxzZSB7CiAJCQkJZm9yICh0ID0gYXgyNV9yb3V0ZV9saXN0OyB0ICE9IE5VTEw7IHQgPSB0LT5uZXh0KSB7CiAJCQkJCWlmICh0LT5uZXh0ID09IHMpIHsKIAkJCQkJCXQtPm5leHQgPSBzLT5uZXh0OwotCQkJCQkJaWYgKHMtPmRpZ2lwZWF0ICE9IE5VTEwpCi0JCQkJCQkJa2ZyZWUocy0+ZGlnaXBlYXQpOworCQkJCQkJa2ZyZWUocy0+ZGlnaXBlYXQpOwogCQkJCQkJa2ZyZWUocyk7CiAJCQkJCQlicmVhazsKIAkJCQkJfQpAQCAtOTAsMTAgKzg4LDggQEAKIAl3aGlsZSAoYXgyNV9ydCAhPSBOVUxMKSB7CiAJCWlmIChheDI1Y21wKCZheDI1X3J0LT5jYWxsc2lnbiwgJnJvdXRlLT5kZXN0X2FkZHIpID09IDAgJiYKIAkJICAgICAgICAgICAgYXgyNV9ydC0+ZGV2ID09IGF4MjVfZGV2LT5kZXYpIHsKLQkJCWlmIChheDI1X3J0LT5kaWdpcGVhdCAhPSBOVUxMKSB7Ci0JCQkJa2ZyZWUoYXgyNV9ydC0+ZGlnaXBlYXQpOwotCQkJCWF4MjVfcnQtPmRpZ2lwZWF0ID0gTlVMTDsKLQkJCX0KKwkJCWtmcmVlKGF4MjVfcnQtPmRpZ2lwZWF0KTsKKwkJCWF4MjVfcnQtPmRpZ2lwZWF0ID0gTlVMTDsKIAkJCWlmIChyb3V0ZS0+ZGlnaV9jb3VudCAhPSAwKSB7CiAJCQkJaWYgKChheDI1X3J0LT5kaWdpcGVhdCA9IGttYWxsb2Moc2l6ZW9mKGF4MjVfZGlnaSksIEdGUF9BVE9NSUMpKSA9PSBOVUxMKSB7CiAJCQkJCXdyaXRlX3VubG9jaygmYXgyNV9yb3V0ZV9sb2NrKTsKQEAgLTE0NSw4ICsxNDEsNyBAQAogc3RhdGljIHZvaWQgYXgyNV9ydF9kZXN0cm95KGF4MjVfcm91dGUgKmF4MjVfcnQpCiB7CiAJaWYgKGF0b21pY19yZWFkKCZheDI1X3J0LT5yZWYpID09IDApIHsKLQkJaWYgKGF4MjVfcnQtPmRpZ2lwZWF0ICE9IE5VTEwpCi0JCQlrZnJlZShheDI1X3J0LT5kaWdpcGVhdCk7CisJCWtmcmVlKGF4MjVfcnQtPmRpZ2lwZWF0KTsKIAkJa2ZyZWUoYXgyNV9ydCk7CiAJCXJldHVybjsKIAl9CkBAIC01MzAsOSArNTI1LDcgQEAKIAkJcyAgICAgICA9IGF4MjVfcnQ7CiAJCWF4MjVfcnQgPSBheDI1X3J0LT5uZXh0OwogCi0JCWlmIChzLT5kaWdpcGVhdCAhPSBOVUxMKQotCQkJa2ZyZWUocy0+ZGlnaXBlYXQpOwotCisJCWtmcmVlKHMtPmRpZ2lwZWF0KTsKIAkJa2ZyZWUocyk7CiAJfQogCXdyaXRlX3VubG9jaygmYXgyNV9yb3V0ZV9sb2NrKTsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvYWZfYmx1ZXRvb3RoLmMgYi9uZXQvYmx1ZXRvb3RoL2FmX2JsdWV0b290aC5jCmluZGV4IDAzNTMyMDYyLi5lYTYxNmUzIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2FmX2JsdWV0b290aC5jCisrKyBiL25ldC9ibHVldG9vdGgvYWZfYmx1ZXRvb3RoLmMKQEAgLTM2LDcgKzM2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgotI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxuZXQvc29jay5oPgogCiAjaWYgZGVmaW5lZChDT05GSUdfS01PRCkKQEAgLTUwLDEwICs0OSw3IEBACiAjZGVmaW5lIEJUX0RCRyhELi4uKQogI2VuZGlmCiAKLSNkZWZpbmUgVkVSU0lPTiAiMi43IgotCi1zdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2NfYnQ7Ci1FWFBPUlRfU1lNQk9MKHByb2NfYnQpOworI2RlZmluZSBWRVJTSU9OICIyLjgiCiAKIC8qIEJsdWV0b290aCBzb2NrZXRzICovCiAjZGVmaW5lIEJUX01BWF9QUk9UTwk4CkBAIC0zMTIsMTAgKzMwOCw2IEBACiB7CiAJQlRfSU5GTygiQ29yZSB2ZXIgJXMiLCBWRVJTSU9OKTsKIAotCXByb2NfYnQgPSBwcm9jX21rZGlyKCJibHVldG9vdGgiLCBOVUxMKTsKLQlpZiAocHJvY19idCkKLQkJcHJvY19idC0+b3duZXIgPSBUSElTX01PRFVMRTsKLQogCXNvY2tfcmVnaXN0ZXIoJmJ0X3NvY2tfZmFtaWx5X29wcyk7CiAKIAlCVF9JTkZPKCJIQ0kgZGV2aWNlIGFuZCBjb25uZWN0aW9uIG1hbmFnZXIgaW5pdGlhbGl6ZWQiKTsKQEAgLTMzNCw4ICszMjYsNiBAQAogCWJ0X3N5c2ZzX2NsZWFudXAoKTsKIAogCXNvY2tfdW5yZWdpc3RlcihQRl9CTFVFVE9PVEgpOwotCi0JcmVtb3ZlX3Byb2NfZW50cnkoImJsdWV0b290aCIsIE5VTEwpOwogfQogCiBzdWJzeXNfaW5pdGNhbGwoYnRfaW5pdCk7CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMgYi9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMKaW5kZXggY2YwZGYxYy4uOTEwNjM1NCAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jCisrKyBiL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuYwpAQCAtMTgzLDcgKzE4Myw3IEBACiBzdGF0aWMgdm9pZCBoY2lfaW5pdF9yZXEoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHVuc2lnbmVkIGxvbmcgb3B0KQogewogCXN0cnVjdCBza19idWZmICpza2I7Ci0JX191MTYgcGFyYW07CisJX19sZTE2IHBhcmFtOwogCiAJQlRfREJHKCIlcyAlbGQiLCBoZGV2LT5uYW1lLCBvcHQpOwogCmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jIGIvbmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYwppbmRleCBiNjFiNGU4Li5lYjY0NTU1IDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jCisrKyBiL25ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMKQEAgLTI0Miw3ICsyNDIsNyBAQAogCQkJYnJlYWs7CiAKIAkJc3RhdHVzID0gKigoX191OCAqKSBza2ItPmRhdGEpOwotCQlzZXR0aW5nID0gX19sZTE2X3RvX2NwdShnZXRfdW5hbGlnbmVkKChfX3UxNiAqKSBzZW50KSk7CisJCXNldHRpbmcgPSBfX2xlMTZfdG9fY3B1KGdldF91bmFsaWduZWQoKF9fbGUxNiAqKSBzZW50KSk7CiAKIAkJaWYgKCFzdGF0dXMgJiYgaGRldi0+dm9pY2Vfc2V0dGluZyAhPSBzZXR0aW5nKSB7CiAJCQloZGV2LT52b2ljZV9zZXR0aW5nID0gc2V0dGluZzsKQEAgLTcyOCw3ICs3MjgsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIGhjaV9udW1fY29tcF9wa3RzX2V2dChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgaGNpX2V2X251bV9jb21wX3BrdHMgKmV2ID0gKHN0cnVjdCBoY2lfZXZfbnVtX2NvbXBfcGt0cyAqKSBza2ItPmRhdGE7Ci0JX191MTYgKnB0cjsKKwlfX2xlMTYgKnB0cjsKIAlpbnQgaTsKIAogCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKCpldikpOwpAQCAtNzQyLDcgKzc0Miw3IEBACiAKIAl0YXNrbGV0X2Rpc2FibGUoJmhkZXYtPnR4X3Rhc2spOwogCi0JZm9yIChpID0gMCwgcHRyID0gKF9fdTE2ICopIHNrYi0+ZGF0YTsgaSA8IGV2LT5udW1faG5kbDsgaSsrKSB7CisJZm9yIChpID0gMCwgcHRyID0gKF9fbGUxNiAqKSBza2ItPmRhdGE7IGkgPCBldi0+bnVtX2huZGw7IGkrKykgewogCQlzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm47CiAJCV9fdTE2ICBoYW5kbGUsIGNvdW50OwogCmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2hjaV9zb2NrLmMgYi9uZXQvYmx1ZXRvb3RoL2hjaV9zb2NrLmMKaW5kZXggNzk5ZTQ0OC4uMWQ2ZDBhMSAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9oY2lfc29jay5jCisrKyBiL25ldC9ibHVldG9vdGgvaGNpX3NvY2suYwpAQCAtNDE2LDcgKzQxNiw3IEBACiAJc2tiLT5kZXYgPSAodm9pZCAqKSBoZGV2OwogCiAJaWYgKGJ0X2NiKHNrYiktPnBrdF90eXBlID09IEhDSV9DT01NQU5EX1BLVCkgewotCQl1MTYgb3Bjb2RlID0gX19sZTE2X3RvX2NwdShnZXRfdW5hbGlnbmVkKCh1MTYgKilza2ItPmRhdGEpKTsKKwkJdTE2IG9wY29kZSA9IF9fbGUxNl90b19jcHUoZ2V0X3VuYWxpZ25lZCgoX19sZTE2ICopIHNrYi0+ZGF0YSkpOwogCQl1MTYgb2dmID0gaGNpX29wY29kZV9vZ2Yob3Bjb2RlKTsKIAkJdTE2IG9jZiA9IGhjaV9vcGNvZGVfb2NmKG9wY29kZSk7CiAKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvaGNpX3N5c2ZzLmMgYi9uZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jCmluZGV4IDc4NTZiYzIuLmJkNzU2OGEgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvaGNpX3N5c2ZzLmMKKysrIGIvbmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYwpAQCAtMTAzLDcgKzEwMyw3IEBACiAJa2ZyZWUoaGRldik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgY2xhc3MgYnRfY2xhc3MgPSB7CitzdHJ1Y3QgY2xhc3MgYnRfY2xhc3MgPSB7CiAJLm5hbWUJCT0gImJsdWV0b290aCIsCiAJLnJlbGVhc2UJPSBidF9yZWxlYXNlLAogI2lmZGVmIENPTkZJR19IT1RQTFVHCkBAIC0xMTEsNiArMTExLDggQEAKICNlbmRpZgogfTsKIAorRVhQT1JUX1NZTUJPTF9HUEwoYnRfY2xhc3MpOworCiBpbnQgaGNpX3JlZ2lzdGVyX3N5c2ZzKHN0cnVjdCBoY2lfZGV2ICpoZGV2KQogewogCXN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYgPSAmaGRldi0+Y2xhc3NfZGV2OwpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oaWRwL2NvcmUuYyBiL25ldC9ibHVldG9vdGgvaGlkcC9jb3JlLmMKaW5kZXggODYwNDQ0YS4uY2RiOWNmYSAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9oaWRwL2NvcmUuYworKysgYi9uZXQvYmx1ZXRvb3RoL2hpZHAvY29yZS5jCkBAIC02NjAsOSArNjYwLDcgQEAKIGZhaWxlZDoKIAl1cF93cml0ZSgmaGlkcF9zZXNzaW9uX3NlbSk7CiAKLQlpZiAoc2Vzc2lvbi0+aW5wdXQpCi0JCWtmcmVlKHNlc3Npb24tPmlucHV0KTsKLQorCWtmcmVlKHNlc3Npb24tPmlucHV0KTsKIAlrZnJlZShzZXNzaW9uKTsKIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9sMmNhcC5jIGIvbmV0L2JsdWV0b290aC9sMmNhcC5jCmluZGV4IDU5YjJkZDMuLmUzYmIxMWMgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvbDJjYXAuYworKysgYi9uZXQvYmx1ZXRvb3RoL2wyY2FwLmMKQEAgLTM4LDkgKzM4LDggQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KLSNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KQEAgLTU2LDcgKzU1LDcgQEAKICNkZWZpbmUgQlRfREJHKEQuLi4pCiAjZW5kaWYKIAotI2RlZmluZSBWRVJTSU9OICIyLjciCisjZGVmaW5lIFZFUlNJT04gIjIuOCIKIAogc3RhdGljIHN0cnVjdCBwcm90b19vcHMgbDJjYXBfc29ja19vcHM7CiAKQEAgLTIxMzcsOTQgKzIxMzYsMjkgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyogLS0tLSBQcm9jIGZzIHN1cHBvcnQgLS0tLSAqLwotI2lmZGVmIENPTkZJR19QUk9DX0ZTCi1zdGF0aWMgdm9pZCAqbDJjYXBfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKK3N0YXRpYyBzc2l6ZV90IGwyY2FwX3N5c2ZzX3Nob3coc3RydWN0IGNsYXNzICpkZXYsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3Qgc29jayAqc2s7CiAJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7Ci0JbG9mZl90IGwgPSAqcG9zOworCWNoYXIgKnN0ciA9IGJ1ZjsKIAogCXJlYWRfbG9ja19iaCgmbDJjYXBfc2tfbGlzdC5sb2NrKTsKIAotCXNrX2Zvcl9lYWNoKHNrLCBub2RlLCAmbDJjYXBfc2tfbGlzdC5oZWFkKQotCQlpZiAoIWwtLSkKLQkJCWdvdG8gZm91bmQ7Ci0Jc2sgPSBOVUxMOwotZm91bmQ6Ci0JcmV0dXJuIHNrOwotfQorCXNrX2Zvcl9lYWNoKHNrLCBub2RlLCAmbDJjYXBfc2tfbGlzdC5oZWFkKSB7CisJCXN0cnVjdCBsMmNhcF9waW5mbyAqcGkgPSBsMmNhcF9waShzayk7CiAKLXN0YXRpYyB2b2lkICpsMmNhcF9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqZSwgbG9mZl90ICpwb3MpCi17Ci0JKCpwb3MpKys7Ci0JcmV0dXJuIHNrX25leHQoZSk7Ci19CisJCXN0ciArPSBzcHJpbnRmKHN0ciwgIiVzICVzICVkICVkIDB4JTQuNHggMHglNC40eCAlZCAlZCAweCV4XG4iLAorCQkJCWJhdG9zdHIoJmJ0X3NrKHNrKS0+c3JjKSwgYmF0b3N0cigmYnRfc2soc2spLT5kc3QpLAorCQkJCXNrLT5za19zdGF0ZSwgcGktPnBzbSwgcGktPnNjaWQsIHBpLT5kY2lkLCBwaS0+aW10dSwKKwkJCQlwaS0+b210dSwgcGktPmxpbmtfbW9kZSk7CisJfQogCi1zdGF0aWMgdm9pZCBsMmNhcF9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqZSkKLXsKIAlyZWFkX3VubG9ja19iaCgmbDJjYXBfc2tfbGlzdC5sb2NrKTsKKworCXJldHVybiAoc3RyIC0gYnVmKTsKIH0KIAotc3RhdGljIGludCAgbDJjYXBfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKmUpCi17Ci0Jc3RydWN0IHNvY2sgKnNrID0gZTsKLQlzdHJ1Y3QgbDJjYXBfcGluZm8gKnBpID0gbDJjYXBfcGkoc2spOwotCi0Jc2VxX3ByaW50ZihzZXEsICIlcyAlcyAlZCAlZCAweCU0LjR4IDB4JTQuNHggJWQgJWQgMHgleFxuIiwKLQkJCWJhdG9zdHIoJmJ0X3NrKHNrKS0+c3JjKSwgYmF0b3N0cigmYnRfc2soc2spLT5kc3QpLCAKLQkJCXNrLT5za19zdGF0ZSwgcGktPnBzbSwgcGktPnNjaWQsIHBpLT5kY2lkLCBwaS0+aW10dSwKLQkJCXBpLT5vbXR1LCBwaS0+bGlua19tb2RlKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBsMmNhcF9zZXFfb3BzID0gewotCS5zdGFydAk9IGwyY2FwX3NlcV9zdGFydCwKLQkubmV4dAk9IGwyY2FwX3NlcV9uZXh0LAotCS5zdG9wCT0gbDJjYXBfc2VxX3N0b3AsCi0JLnNob3cJPSBsMmNhcF9zZXFfc2hvdyAKLX07Ci0KLXN0YXRpYyBpbnQgbDJjYXBfc2VxX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuIHNlcV9vcGVuKGZpbGUsICZsMmNhcF9zZXFfb3BzKTsKLX0KLQotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbDJjYXBfc2VxX2ZvcHMgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5vcGVuCQk9IGwyY2FwX3NlcV9vcGVuLAotCS5yZWFkCQk9IHNlcV9yZWFkLAotCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAotCS5yZWxlYXNlCT0gc2VxX3JlbGVhc2UsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBsMmNhcF9wcm9jX2luaXQodm9pZCkKLXsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnAgPSBjcmVhdGVfcHJvY19lbnRyeSgibDJjYXAiLCBTX0lSVUdPLCBwcm9jX2J0KTsKLQlpZiAoIXApCi0JCXJldHVybiAtRU5PTUVNOwotCXAtPm93bmVyICAgICA9IFRISVNfTU9EVUxFOwotCXAtPnByb2NfZm9wcyA9ICZsMmNhcF9zZXFfZm9wczsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGwyY2FwX3Byb2NfY2xlYW51cCh2b2lkKQotewotCXJlbW92ZV9wcm9jX2VudHJ5KCJsMmNhcCIsIHByb2NfYnQpOwotfQotCi0jZWxzZSAvKiBDT05GSUdfUFJPQ19GUyAqLwotCi1zdGF0aWMgaW50IF9faW5pdCBsMmNhcF9wcm9jX2luaXQodm9pZCkKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGwyY2FwX3Byb2NfY2xlYW51cCh2b2lkKQotewotCXJldHVybjsKLX0KLSNlbmRpZiAvKiBDT05GSUdfUFJPQ19GUyAqLworc3RhdGljIENMQVNTX0FUVFIobDJjYXAsIFNfSVJVR08sIGwyY2FwX3N5c2ZzX3Nob3csIE5VTEwpOwogCiBzdGF0aWMgc3RydWN0IHByb3RvX29wcyBsMmNhcF9zb2NrX29wcyA9IHsKIAkuZmFtaWx5CQk9IFBGX0JMVUVUT09USCwKQEAgLTIyNjYsNyArMjIwMCw3IEBACiBzdGF0aWMgaW50IF9faW5pdCBsMmNhcF9pbml0KHZvaWQpCiB7CiAJaW50IGVycjsKLQkKKwogCWVyciA9IHByb3RvX3JlZ2lzdGVyKCZsMmNhcF9wcm90bywgMCk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CkBAIC0yMjg0LDcgKzIyMTgsNyBAQAogCQlnb3RvIGVycm9yOwogCX0KIAotCWwyY2FwX3Byb2NfaW5pdCgpOworCWNsYXNzX2NyZWF0ZV9maWxlKCZidF9jbGFzcywgJmNsYXNzX2F0dHJfbDJjYXApOwogCiAJQlRfSU5GTygiTDJDQVAgdmVyICVzIiwgVkVSU0lPTik7CiAJQlRfSU5GTygiTDJDQVAgc29ja2V0IGxheWVyIGluaXRpYWxpemVkIik7CkBAIC0yMjk4LDcgKzIyMzIsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgbDJjYXBfZXhpdCh2b2lkKQogewotCWwyY2FwX3Byb2NfY2xlYW51cCgpOworCWNsYXNzX3JlbW92ZV9maWxlKCZidF9jbGFzcywgJmNsYXNzX2F0dHJfbDJjYXApOwogCiAJaWYgKGJ0X3NvY2tfdW5yZWdpc3RlcihCVFBST1RPX0wyQ0FQKSA8IDApCiAJCUJUX0VSUigiTDJDQVAgc29ja2V0IHVucmVnaXN0cmF0aW9uIGZhaWxlZCIpOwpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9yZmNvbW0vY29yZS5jIGIvbmV0L2JsdWV0b290aC9yZmNvbW0vY29yZS5jCmluZGV4IGMzZDU2ZWEuLjBkODlkNjQgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvcmZjb21tL2NvcmUuYworKysgYi9uZXQvYmx1ZXRvb3RoL3JmY29tbS9jb3JlLmMKQEAgLTM1LDkgKzM1LDggQEAKICNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L25ldC5oPgotI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CkBAIC00NywxNyArNDYsMTMgQEAKICNpbmNsdWRlIDxuZXQvYmx1ZXRvb3RoL2wyY2FwLmg+CiAjaW5jbHVkZSA8bmV0L2JsdWV0b290aC9yZmNvbW0uaD4KIAotI2RlZmluZSBWRVJTSU9OICIxLjUiCisjZGVmaW5lIFZFUlNJT04gIjEuNiIKIAogI2lmbmRlZiBDT05GSUdfQlRfUkZDT01NX0RFQlVHCiAjdW5kZWYgIEJUX0RCRwogI2RlZmluZSBCVF9EQkcoRC4uLikKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX1BST0NfRlMKLXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY19idF9yZmNvbW07Ci0jZW5kaWYKLQogc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqcmZjb21tX3RocmVhZDsKIAogc3RhdGljIERFQ0xBUkVfTVVURVgocmZjb21tX3NlbSk7CkBAIC0yMDAxLDExNyArMTk5NiwzMiBAQAogCS5lbmNyeXB0X2NmbQk9IHJmY29tbV9lbmNyeXB0X2NmbQogfTsKIAotLyogLS0tLSBQcm9jIGZzIHN1cHBvcnQgLS0tLSAqLwotI2lmZGVmIENPTkZJR19QUk9DX0ZTCi1zdGF0aWMgdm9pZCAqcmZjb21tX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCitzdGF0aWMgc3NpemVfdCByZmNvbW1fZGxjX3N5c2ZzX3Nob3coc3RydWN0IGNsYXNzICpkZXYsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgcmZjb21tX3Nlc3Npb24gKnM7CiAJc3RydWN0IGxpc3RfaGVhZCAqcHAsICpwOwotCWxvZmZfdCBsID0gKnBvczsKKwljaGFyICpzdHIgPSBidWY7CiAKIAlyZmNvbW1fbG9jaygpOwogCiAJbGlzdF9mb3JfZWFjaChwLCAmc2Vzc2lvbl9saXN0KSB7CiAJCXMgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCByZmNvbW1fc2Vzc2lvbiwgbGlzdCk7Ci0JCWxpc3RfZm9yX2VhY2gocHAsICZzLT5kbGNzKQotCQkJaWYgKCFsLS0pIHsKLQkJCQlzZXEtPnByaXZhdGUgPSBzOwotCQkJCXJldHVybiBwcDsKLQkJCX0KLQl9Ci0JcmV0dXJuIE5VTEw7Ci19CisJCWxpc3RfZm9yX2VhY2gocHAsICZzLT5kbGNzKSB7CisJCQlzdHJ1Y3Qgc29jayAqc2sgPSBzLT5zb2NrLT5zazsKKwkJCXN0cnVjdCByZmNvbW1fZGxjICpkID0gbGlzdF9lbnRyeShwcCwgc3RydWN0IHJmY29tbV9kbGMsIGxpc3QpOwogCi1zdGF0aWMgdm9pZCAqcmZjb21tX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICplLCBsb2ZmX3QgKnBvcykKLXsKLQlzdHJ1Y3QgcmZjb21tX3Nlc3Npb24gKnMgPSBzZXEtPnByaXZhdGU7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqcHAsICpwID0gZTsKLQkoKnBvcykrKzsKLQotCWlmIChwLT5uZXh0ICE9ICZzLT5kbGNzKQotCQlyZXR1cm4gcC0+bmV4dDsKLQotCWxpc3RfZm9yX2VhY2gocCwgJnNlc3Npb25fbGlzdCkgewotCQlzID0gbGlzdF9lbnRyeShwLCBzdHJ1Y3QgcmZjb21tX3Nlc3Npb24sIGxpc3QpOwotCQlfX2xpc3RfZm9yX2VhY2gocHAsICZzLT5kbGNzKSB7Ci0JCQlzZXEtPnByaXZhdGUgPSBzOwotCQkJcmV0dXJuIHBwOworCQkJc3RyICs9IHNwcmludGYoc3RyLCAiJXMgJXMgJWxkICVkICVkICVkICVkXG4iLAorCQkJCQliYXRvc3RyKCZidF9zayhzayktPnNyYyksIGJhdG9zdHIoJmJ0X3NrKHNrKS0+ZHN0KSwKKwkJCQkJZC0+c3RhdGUsIGQtPmRsY2ksIGQtPm10dSwgZC0+cnhfY3JlZGl0cywgZC0+dHhfY3JlZGl0cyk7CiAJCX0KIAl9Ci0JcmV0dXJuIE5VTEw7Ci19CiAKLXN0YXRpYyB2b2lkIHJmY29tbV9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqZSkKLXsKIAlyZmNvbW1fdW5sb2NrKCk7CisKKwlyZXR1cm4gKHN0ciAtIGJ1Zik7CiB9CiAKLXN0YXRpYyBpbnQgIHJmY29tbV9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqZSkKLXsKLQlzdHJ1Y3QgcmZjb21tX3Nlc3Npb24gKnMgPSBzZXEtPnByaXZhdGU7Ci0Jc3RydWN0IHNvY2sgKnNrID0gcy0+c29jay0+c2s7Ci0Jc3RydWN0IHJmY29tbV9kbGMgKmQgPSBsaXN0X2VudHJ5KGUsIHN0cnVjdCByZmNvbW1fZGxjLCBsaXN0KTsKLQotCXNlcV9wcmludGYoc2VxLCAiJXMgJXMgJWxkICVkICVkICVkICVkXG4iLAotCQkJYmF0b3N0cigmYnRfc2soc2spLT5zcmMpLCBiYXRvc3RyKCZidF9zayhzayktPmRzdCksCi0JCQlkLT5zdGF0ZSwgZC0+ZGxjaSwgZC0+bXR1LCBkLT5yeF9jcmVkaXRzLCBkLT50eF9jcmVkaXRzKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyByZmNvbW1fc2VxX29wcyA9IHsKLQkuc3RhcnQgID0gcmZjb21tX3NlcV9zdGFydCwKLQkubmV4dCAgID0gcmZjb21tX3NlcV9uZXh0LAotCS5zdG9wICAgPSByZmNvbW1fc2VxX3N0b3AsCi0JLnNob3cgICA9IHJmY29tbV9zZXFfc2hvdyAKLX07Ci0KLXN0YXRpYyBpbnQgcmZjb21tX3NlcV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiBzZXFfb3BlbihmaWxlLCAmcmZjb21tX3NlcV9vcHMpOwotfQotCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByZmNvbW1fc2VxX2ZvcHMgPSB7Ci0JLm93bmVyCSA9IFRISVNfTU9EVUxFLAotCS5vcGVuICAgID0gcmZjb21tX3NlcV9vcGVuLAotCS5yZWFkICAgID0gc2VxX3JlYWQsCi0JLmxsc2VlayAgPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UgPSBzZXFfcmVsZWFzZSwKLX07Ci0KLXN0YXRpYyBpbnQgIF9faW5pdCByZmNvbW1fcHJvY19pbml0KHZvaWQpCi17Ci0gICAgICAgIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcDsKLQotCXByb2NfYnRfcmZjb21tID0gcHJvY19ta2RpcigicmZjb21tIiwgcHJvY19idCk7Ci0JaWYgKHByb2NfYnRfcmZjb21tKSB7Ci0JCXByb2NfYnRfcmZjb21tLT5vd25lciA9IFRISVNfTU9EVUxFOwotCi0gICAgICAgIAlwID0gY3JlYXRlX3Byb2NfZW50cnkoImRsYyIsIFNfSVJVR08sIHByb2NfYnRfcmZjb21tKTsKLQkJaWYgKHApCi0gICAgICAgIAkJcC0+cHJvY19mb3BzID0gJnJmY29tbV9zZXFfZm9wczsKLQl9Ci0gICAgICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgcmZjb21tX3Byb2NfY2xlYW51cCh2b2lkKQotewotICAgICAgICByZW1vdmVfcHJvY19lbnRyeSgiZGxjIiwgcHJvY19idF9yZmNvbW0pOwotCi0JcmVtb3ZlX3Byb2NfZW50cnkoInJmY29tbSIsIHByb2NfYnQpOwotfQotCi0jZWxzZSAvKiBDT05GSUdfUFJPQ19GUyAqLwotCi1zdGF0aWMgaW50ICBfX2luaXQgcmZjb21tX3Byb2NfaW5pdCh2b2lkKQotewotICAgICAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IHJmY29tbV9wcm9jX2NsZWFudXAodm9pZCkKLXsKLSAgICAgICAgcmV0dXJuOwotfQotI2VuZGlmIC8qIENPTkZJR19QUk9DX0ZTICovCitzdGF0aWMgQ0xBU1NfQVRUUihyZmNvbW1fZGxjLCBTX0lSVUdPLCByZmNvbW1fZGxjX3N5c2ZzX3Nob3csIE5VTEwpOwogCiAvKiAtLS0tIEluaXRpYWxpemF0aW9uIC0tLS0gKi8KIHN0YXRpYyBpbnQgX19pbml0IHJmY29tbV9pbml0KHZvaWQpCkBAIC0yMTIyLDkgKzIwMzIsNyBAQAogCiAJa2VybmVsX3RocmVhZChyZmNvbW1fcnVuLCBOVUxMLCBDTE9ORV9LRVJORUwpOwogCi0JQlRfSU5GTygiUkZDT01NIHZlciAlcyIsIFZFUlNJT04pOwotCi0JcmZjb21tX3Byb2NfaW5pdCgpOworCWNsYXNzX2NyZWF0ZV9maWxlKCZidF9jbGFzcywgJmNsYXNzX2F0dHJfcmZjb21tX2RsYyk7CiAKIAlyZmNvbW1faW5pdF9zb2NrZXRzKCk7CiAKQEAgLTIxMzIsMTEgKzIwNDAsMTUgQEAKIAlyZmNvbW1faW5pdF90dHlzKCk7CiAjZW5kaWYKIAorCUJUX0lORk8oIlJGQ09NTSB2ZXIgJXMiLCBWRVJTSU9OKTsKKwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgcmZjb21tX2V4aXQodm9pZCkKIHsKKwljbGFzc19yZW1vdmVfZmlsZSgmYnRfY2xhc3MsICZjbGFzc19hdHRyX3JmY29tbV9kbGMpOworCiAJaGNpX3VucmVnaXN0ZXJfY2IoJnJmY29tbV9jYik7CiAKIAkvKiBUZXJtaW5hdGUgd29ya2luZyB0aHJlYWQuCkBAIC0yMTUzLDggKzIwNjUsNiBAQAogI2VuZGlmCiAKIAlyZmNvbW1fY2xlYW51cF9zb2NrZXRzKCk7Ci0KLQlyZmNvbW1fcHJvY19jbGVhbnVwKCk7CiB9CiAKIG1vZHVsZV9pbml0KHJmY29tbV9pbml0KTsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvcmZjb21tL3NvY2suYyBiL25ldC9ibHVldG9vdGgvcmZjb21tL3NvY2suYwppbmRleCBhMmIzMGYwLi42YzM0MjYxIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL3JmY29tbS9zb2NrLmMKKysrIGIvbmV0L2JsdWV0b290aC9yZmNvbW0vc29jay5jCkBAIC00Miw4ICs0Miw3IEBACiAjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CiAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CkBAIC04ODcsODkgKzg4NiwyNiBAQAogCXJldHVybiByZXN1bHQ7CiB9CiAKLS8qIC0tLS0gUHJvYyBmcyBzdXBwb3J0IC0tLS0gKi8KLSNpZmRlZiBDT05GSUdfUFJPQ19GUwotc3RhdGljIHZvaWQgKnJmY29tbV9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQorc3RhdGljIHNzaXplX3QgcmZjb21tX3NvY2tfc3lzZnNfc2hvdyhzdHJ1Y3QgY2xhc3MgKmRldiwgY2hhciAqYnVmKQogewogCXN0cnVjdCBzb2NrICpzazsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKLQlsb2ZmX3QgbCA9ICpwb3M7CisJY2hhciAqc3RyID0gYnVmOwogCiAJcmVhZF9sb2NrX2JoKCZyZmNvbW1fc2tfbGlzdC5sb2NrKTsKIAotCXNrX2Zvcl9lYWNoKHNrLCBub2RlLCAmcmZjb21tX3NrX2xpc3QuaGVhZCkKLQkJaWYgKCFsLS0pCi0JCQlyZXR1cm4gc2s7Ci0JcmV0dXJuIE5VTEw7Ci19CisJc2tfZm9yX2VhY2goc2ssIG5vZGUsICZyZmNvbW1fc2tfbGlzdC5oZWFkKSB7CisJCXN0ciArPSBzcHJpbnRmKHN0ciwgIiVzICVzICVkICVkXG4iLAorCQkJCWJhdG9zdHIoJmJ0X3NrKHNrKS0+c3JjKSwgYmF0b3N0cigmYnRfc2soc2spLT5kc3QpLAorCQkJCXNrLT5za19zdGF0ZSwgcmZjb21tX3BpKHNrKS0+Y2hhbm5lbCk7CisJfQogCi1zdGF0aWMgdm9pZCAqcmZjb21tX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICplLCBsb2ZmX3QgKnBvcykKLXsKLQlzdHJ1Y3Qgc29jayAqc2sgPSBlOwotCSgqcG9zKSsrOwotCXJldHVybiBza19uZXh0KHNrKTsKLX0KLQotc3RhdGljIHZvaWQgcmZjb21tX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICplKQotewogCXJlYWRfdW5sb2NrX2JoKCZyZmNvbW1fc2tfbGlzdC5sb2NrKTsKKworCXJldHVybiAoc3RyIC0gYnVmKTsKIH0KIAotc3RhdGljIGludCAgcmZjb21tX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICplKQotewotCXN0cnVjdCBzb2NrICpzayA9IGU7Ci0Jc2VxX3ByaW50ZihzZXEsICIlcyAlcyAlZCAlZFxuIiwKLQkJCWJhdG9zdHIoJmJ0X3NrKHNrKS0+c3JjKSwgYmF0b3N0cigmYnRfc2soc2spLT5kc3QpLAotCQkJc2stPnNrX3N0YXRlLCByZmNvbW1fcGkoc2spLT5jaGFubmVsKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyByZmNvbW1fc2VxX29wcyA9IHsKLQkuc3RhcnQgID0gcmZjb21tX3NlcV9zdGFydCwKLQkubmV4dCAgID0gcmZjb21tX3NlcV9uZXh0LAotCS5zdG9wICAgPSByZmNvbW1fc2VxX3N0b3AsCi0JLnNob3cgICA9IHJmY29tbV9zZXFfc2hvdyAKLX07Ci0KLXN0YXRpYyBpbnQgcmZjb21tX3NlcV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiBzZXFfb3BlbihmaWxlLCAmcmZjb21tX3NlcV9vcHMpOwotfQotCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByZmNvbW1fc2VxX2ZvcHMgPSB7Ci0JLm93bmVyCSA9IFRISVNfTU9EVUxFLAotCS5vcGVuICAgID0gcmZjb21tX3NlcV9vcGVuLAotCS5yZWFkICAgID0gc2VxX3JlYWQsCi0JLmxsc2VlayAgPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UgPSBzZXFfcmVsZWFzZSwKLX07Ci0KLXN0YXRpYyBpbnQgIF9faW5pdCByZmNvbW1fc29ja19wcm9jX2luaXQodm9pZCkKLXsKLSAgICAgICAgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwID0gY3JlYXRlX3Byb2NfZW50cnkoInNvY2siLCBTX0lSVUdPLCBwcm9jX2J0X3JmY29tbSk7Ci0gICAgICAgIGlmICghcCkKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKLSAgICAgICAgcC0+cHJvY19mb3BzID0gJnJmY29tbV9zZXFfZm9wczsKLSAgICAgICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCByZmNvbW1fc29ja19wcm9jX2NsZWFudXAodm9pZCkKLXsKLSAgICAgICAgcmVtb3ZlX3Byb2NfZW50cnkoInNvY2siLCBwcm9jX2J0X3JmY29tbSk7Ci19Ci0KLSNlbHNlIC8qIENPTkZJR19QUk9DX0ZTICovCi0KLXN0YXRpYyBpbnQgIF9faW5pdCByZmNvbW1fc29ja19wcm9jX2luaXQodm9pZCkKLXsKLSAgICAgICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCByZmNvbW1fc29ja19wcm9jX2NsZWFudXAodm9pZCkKLXsKLSAgICAgICAgcmV0dXJuOwotfQotI2VuZGlmIC8qIENPTkZJR19QUk9DX0ZTICovCitzdGF0aWMgQ0xBU1NfQVRUUihyZmNvbW0sIFNfSVJVR08sIHJmY29tbV9zb2NrX3N5c2ZzX3Nob3csIE5VTEwpOwogCiBzdGF0aWMgc3RydWN0IHByb3RvX29wcyByZmNvbW1fc29ja19vcHMgPSB7CiAJLmZhbWlseQkJPSBQRl9CTFVFVE9PVEgsCkBAIC05OTcsNyArOTMzLDcgQEAKIAkuY3JlYXRlCQk9IHJmY29tbV9zb2NrX2NyZWF0ZQogfTsKIAotaW50ICBfX2luaXQgcmZjb21tX2luaXRfc29ja2V0cyh2b2lkKQoraW50IF9faW5pdCByZmNvbW1faW5pdF9zb2NrZXRzKHZvaWQpCiB7CiAJaW50IGVycjsKIApAQCAtMTAwOSw3ICs5NDUsNyBAQAogCWlmIChlcnIgPCAwKQogCQlnb3RvIGVycm9yOwogCi0JcmZjb21tX3NvY2tfcHJvY19pbml0KCk7CisJY2xhc3NfY3JlYXRlX2ZpbGUoJmJ0X2NsYXNzLCAmY2xhc3NfYXR0cl9yZmNvbW0pOwogCiAJQlRfSU5GTygiUkZDT01NIHNvY2tldCBsYXllciBpbml0aWFsaXplZCIpOwogCkBAIC0xMDIzLDcgKzk1OSw3IEBACiAKIHZvaWQgX19leGl0IHJmY29tbV9jbGVhbnVwX3NvY2tldHModm9pZCkKIHsKLQlyZmNvbW1fc29ja19wcm9jX2NsZWFudXAoKTsKKwljbGFzc19yZW1vdmVfZmlsZSgmYnRfY2xhc3MsICZjbGFzc19hdHRyX3JmY29tbSk7CiAKIAlpZiAoYnRfc29ja191bnJlZ2lzdGVyKEJUUFJPVE9fUkZDT01NKSA8IDApCiAJCUJUX0VSUigiUkZDT01NIHNvY2tldCBsYXllciB1bnJlZ2lzdHJhdGlvbiBmYWlsZWQiKTsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvc2NvLmMgYi9uZXQvYmx1ZXRvb3RoL3Njby5jCmluZGV4IDk5N2U0MmQuLjljYjAwZGMgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvc2NvLmMKKysrIGIvbmV0L2JsdWV0b290aC9zY28uYwpAQCAtMzgsOCArMzgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgotI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxuZXQvc29jay5oPgogCkBAIC01NSw3ICs1NCw3IEBACiAjZGVmaW5lIEJUX0RCRyhELi4uKQogI2VuZGlmCiAKLSNkZWZpbmUgVkVSU0lPTiAiMC40IgorI2RlZmluZSBWRVJTSU9OICIwLjUiCiAKIHN0YXRpYyBzdHJ1Y3QgcHJvdG9fb3BzIHNjb19zb2NrX29wczsKIApAQCAtODkzLDkxICs4OTIsMjYgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyogLS0tLSBQcm9jIGZzIHN1cHBvcnQgLS0tLSAqLwotI2lmZGVmIENPTkZJR19QUk9DX0ZTCi1zdGF0aWMgdm9pZCAqc2NvX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCitzdGF0aWMgc3NpemVfdCBzY29fc3lzZnNfc2hvdyhzdHJ1Y3QgY2xhc3MgKmRldiwgY2hhciAqYnVmKQogewogCXN0cnVjdCBzb2NrICpzazsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKLQlsb2ZmX3QgbCA9ICpwb3M7CisJY2hhciAqc3RyID0gYnVmOwogCiAJcmVhZF9sb2NrX2JoKCZzY29fc2tfbGlzdC5sb2NrKTsKIAotCXNrX2Zvcl9lYWNoKHNrLCBub2RlLCAmc2NvX3NrX2xpc3QuaGVhZCkKLQkJaWYgKCFsLS0pCi0JCQlnb3RvIGZvdW5kOwotCXNrID0gTlVMTDsKLWZvdW5kOgotCXJldHVybiBzazsKLX0KKwlza19mb3JfZWFjaChzaywgbm9kZSwgJnNjb19za19saXN0LmhlYWQpIHsKKwkJc3RyICs9IHNwcmludGYoc3RyLCAiJXMgJXMgJWRcbiIsCisJCQkJYmF0b3N0cigmYnRfc2soc2spLT5zcmMpLCBiYXRvc3RyKCZidF9zayhzayktPmRzdCksCisJCQkJc2stPnNrX3N0YXRlKTsKKwl9CiAKLXN0YXRpYyB2b2lkICpzY29fc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKmUsIGxvZmZfdCAqcG9zKQotewotCXN0cnVjdCBzb2NrICpzayA9IGU7Ci0JKCpwb3MpKys7Ci0JcmV0dXJuIHNrX25leHQoc2spOwotfQotCi1zdGF0aWMgdm9pZCBzY29fc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKmUpCi17CiAJcmVhZF91bmxvY2tfYmgoJnNjb19za19saXN0LmxvY2spOworCisJcmV0dXJuIChzdHIgLSBidWYpOwogfQogCi1zdGF0aWMgaW50ICBzY29fc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKmUpCi17Ci0Jc3RydWN0IHNvY2sgKnNrID0gZTsKLQlzZXFfcHJpbnRmKHNlcSwgIiVzICVzICVkXG4iLAotCQkJYmF0b3N0cigmYnRfc2soc2spLT5zcmMpLCBiYXRvc3RyKCZidF9zayhzayktPmRzdCksIHNrLT5za19zdGF0ZSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc2NvX3NlcV9vcHMgPSB7Ci0JLnN0YXJ0CT0gc2NvX3NlcV9zdGFydCwKLQkubmV4dAk9IHNjb19zZXFfbmV4dCwKLQkuc3RvcAk9IHNjb19zZXFfc3RvcCwKLQkuc2hvdwk9IHNjb19zZXFfc2hvdyAKLX07Ci0KLXN0YXRpYyBpbnQgc2NvX3NlcV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiBzZXFfb3BlbihmaWxlLCAmc2NvX3NlcV9vcHMpOwotfQotCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzY29fc2VxX2ZvcHMgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5vcGVuCQk9IHNjb19zZXFfb3BlbiwKLQkucmVhZAkJPSBzZXFfcmVhZCwKLQkubGxzZWVrCQk9IHNlcV9sc2VlaywKLQkucmVsZWFzZQk9IHNlcV9yZWxlYXNlLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgc2NvX3Byb2NfaW5pdCh2b2lkKQotewotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcCA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJzY28iLCBTX0lSVUdPLCBwcm9jX2J0KTsKLQlpZiAoIXApCi0JCXJldHVybiAtRU5PTUVNOwotCXAtPm93bmVyICAgICA9IFRISVNfTU9EVUxFOwotCXAtPnByb2NfZm9wcyA9ICZzY29fc2VxX2ZvcHM7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBzY29fcHJvY19jbGVhbnVwKHZvaWQpCi17Ci0JcmVtb3ZlX3Byb2NfZW50cnkoInNjbyIsIHByb2NfYnQpOwotfQotCi0jZWxzZSAvKiBDT05GSUdfUFJPQ19GUyAqLwotCi1zdGF0aWMgaW50IF9faW5pdCBzY29fcHJvY19pbml0KHZvaWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBzY29fcHJvY19jbGVhbnVwKHZvaWQpCi17Ci0JcmV0dXJuOwotfQotI2VuZGlmIC8qIENPTkZJR19QUk9DX0ZTICovCitzdGF0aWMgQ0xBU1NfQVRUUihzY28sIFNfSVJVR08sIHNjb19zeXNmc19zaG93LCBOVUxMKTsKIAogc3RhdGljIHN0cnVjdCBwcm90b19vcHMgc2NvX3NvY2tfb3BzID0gewogCS5mYW1pbHkJCT0gUEZfQkxVRVRPT1RILApAQCAtMTAzNSw3ICs5NjksNyBAQAogCQlnb3RvIGVycm9yOwogCX0KIAotCXNjb19wcm9jX2luaXQoKTsKKwljbGFzc19jcmVhdGVfZmlsZSgmYnRfY2xhc3MsICZjbGFzc19hdHRyX3Njbyk7CiAKIAlCVF9JTkZPKCJTQ08gKFZvaWNlIExpbmspIHZlciAlcyIsIFZFUlNJT04pOwogCUJUX0lORk8oIlNDTyBzb2NrZXQgbGF5ZXIgaW5pdGlhbGl6ZWQiKTsKQEAgLTEwNDksNyArOTgzLDcgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IHNjb19leGl0KHZvaWQpCiB7Ci0Jc2NvX3Byb2NfY2xlYW51cCgpOworCWNsYXNzX3JlbW92ZV9maWxlKCZidF9jbGFzcywgJmNsYXNzX2F0dHJfc2NvKTsKIAogCWlmIChidF9zb2NrX3VucmVnaXN0ZXIoQlRQUk9UT19TQ08pIDwgMCkKIAkJQlRfRVJSKCJTQ08gc29ja2V0IHVucmVnaXN0cmF0aW9uIGZhaWxlZCIpOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGF0YWdyYW0uYyBiL25ldC9jb3JlL2RhdGFncmFtLmMKaW5kZXggZDIxOTQzNS4uMWJjZmVmNSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGF0YWdyYW0uYworKysgYi9uZXQvY29yZS9kYXRhZ3JhbS5jCkBAIC0zNTAsNiArMzUwLDIwIEBACiAJcmV0dXJuIC1FRkFVTFQ7CiB9CiAKK3Vuc2lnbmVkIGludCBfX3NrYl9jaGVja3N1bV9jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXVuc2lnbmVkIGludCBzdW07CisKKwlzdW0gPSAodTE2KWNzdW1fZm9sZChza2JfY2hlY2tzdW0oc2tiLCAwLCBza2ItPmxlbiwgc2tiLT5jc3VtKSk7CisJaWYgKGxpa2VseSghc3VtKSkgeworCQlpZiAodW5saWtlbHkoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fSFcpKQorCQkJbmV0ZGV2X3J4X2NzdW1fZmF1bHQoc2tiLT5kZXYpOworCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOworCX0KKwlyZXR1cm4gc3VtOworfQorRVhQT1JUX1NZTUJPTChfX3NrYl9jaGVja3N1bV9jb21wbGV0ZSk7CisKIC8qKgogICoJc2tiX2NvcHlfYW5kX2NzdW1fZGF0YWdyYW1faW92ZWMgLSBDb3B5IGFuZCBjaGVja3VtIHNrYiB0byB1c2VyIGlvdmVjLgogICoJQHNrYjogc2tidWZmCkBAIC0zNjMsNyArMzc3LDcgQEAKICAqCQkgLUVGQVVMVCAtIGZhdWx0IGR1cmluZyBjb3B5LiBCZXdhcmUsIGluIHRoaXMgY2FzZSBpb3ZlYwogICoJCQkgICBjYW4gYmUgbW9kaWZpZWQhCiAgKi8KLWludCBza2JfY29weV9hbmRfY3N1bV9kYXRhZ3JhbV9pb3ZlYyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAoraW50IHNrYl9jb3B5X2FuZF9jc3VtX2RhdGFncmFtX2lvdmVjKHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJICAgICBpbnQgaGxlbiwgc3RydWN0IGlvdmVjICppb3YpCiB7CiAJdW5zaWduZWQgaW50IGNzdW07CkBAIC0zNzYsOCArMzkwLDcgQEAKIAkJaW92Kys7CiAKIAlpZiAoaW92LT5pb3ZfbGVuIDwgY2h1bmspIHsKLQkJaWYgKCh1bnNpZ25lZCBzaG9ydCljc3VtX2ZvbGQoc2tiX2NoZWNrc3VtKHNrYiwgMCwgY2h1bmsgKyBobGVuLAotCQkJCQkJCSAgIHNrYi0+Y3N1bSkpKQorCQlpZiAoX19za2JfY2hlY2tzdW1fY29tcGxldGUoc2tiKSkKIAkJCWdvdG8gY3N1bV9lcnJvcjsKIAkJaWYgKHNrYl9jb3B5X2RhdGFncmFtX2lvdmVjKHNrYiwgaGxlbiwgaW92LCBjaHVuaykpCiAJCQlnb3RvIGZhdWx0OwpAQCAtMzg4LDYgKzQwMSw4IEBACiAJCQlnb3RvIGZhdWx0OwogCQlpZiAoKHVuc2lnbmVkIHNob3J0KWNzdW1fZm9sZChjc3VtKSkKIAkJCWdvdG8gY3N1bV9lcnJvcjsKKwkJaWYgKHVubGlrZWx5KHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX0hXKSkKKwkJCW5ldGRldl9yeF9jc3VtX2ZhdWx0KHNrYi0+ZGV2KTsKIAkJaW92LT5pb3ZfbGVuIC09IGNodW5rOwogCQlpb3YtPmlvdl9iYXNlICs9IGNodW5rOwogCX0KZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmMKaW5kZXggOGQxNTQxNS4uMGI0OGUyOSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGV2LmMKKysrIGIvbmV0L2NvcmUvZGV2LmMKQEAgLTExMDgsNiArMTEwOCwxOCBAQAogCXJldHVybiByZXQ7CiB9CiAKKy8qIFRha2UgYWN0aW9uIHdoZW4gaGFyZHdhcmUgcmVjZXB0aW9uIGNoZWNrc3VtIGVycm9ycyBhcmUgZGV0ZWN0ZWQuICovCisjaWZkZWYgQ09ORklHX0JVRwordm9pZCBuZXRkZXZfcnhfY3N1bV9mYXVsdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogaHcgY3N1bSBmYWlsdXJlLlxuIiwgZGV2LT5uYW1lKTsKKwkJZHVtcF9zdGFjaygpOworCX0KK30KK0VYUE9SVF9TWU1CT0wobmV0ZGV2X3J4X2NzdW1fZmF1bHQpOworI2VuZGlmCisKICNpZmRlZiBDT05GSUdfSElHSE1FTQogLyogQWN0dWFsbHksIHdlIHNob3VsZCBlbGltaW5hdGUgdGhpcyBjaGVjayBhcyBzb29uIGFzIHdlIGtub3csIHRoYXQ6CiAgKiAxLiBJT01NVSBpcyBwcmVzZW50IGFuZCBhbGxvd3MgdG8gbWFwIGFsbCB0aGUgbWVtb3J5LgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2X21jYXN0LmMgYi9uZXQvY29yZS9kZXZfbWNhc3QuYwppbmRleCBkYjA5OGZmLi5jYjUzMGVlIDEwMDY0NAotLS0gYS9uZXQvY29yZS9kZXZfbWNhc3QuYworKysgYi9uZXQvY29yZS9kZXZfbWNhc3QuYwpAQCAtMTk0LDggKzE5NCw3IEBACiAKIGRvbmU6CiAJc3Bpbl91bmxvY2tfYmgoJmRldi0+eG1pdF9sb2NrKTsKLQlpZiAoZG1pMSkKLQkJa2ZyZWUoZG1pMSk7CisJa2ZyZWUoZG1pMSk7CiAJcmV0dXJuIGVycjsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmV0cG9sbC5jIGIvbmV0L2NvcmUvbmV0cG9sbC5jCmluZGV4IDgwMmZlMTEuLjQ5NDI0YTQgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL25ldHBvbGwuYworKysgYi9uZXQvY29yZS9uZXRwb2xsLmMKQEAgLTEwMSwxNiArMTAxLDIwIEBACiBzdGF0aWMgaW50IGNoZWNrc3VtX3VkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdWRwaGRyICp1aCwKIAkJCSAgICAgdW5zaWduZWQgc2hvcnQgdWxlbiwgdTMyIHNhZGRyLCB1MzIgZGFkZHIpCiB7Ci0JaWYgKHVoLT5jaGVjayA9PSAwKQorCXVuc2lnbmVkIGludCBwc3VtOworCisJaWYgKHVoLT5jaGVjayA9PSAwIHx8IHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1VOTkVDRVNTQVJZKQogCQlyZXR1cm4gMDsKIAotCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9IVykKLQkJcmV0dXJuIGNzdW1fdGNwdWRwX21hZ2ljKAotCQkJc2FkZHIsIGRhZGRyLCB1bGVuLCBJUFBST1RPX1VEUCwgc2tiLT5jc3VtKTsKKwlwc3VtID0gY3N1bV90Y3B1ZHBfbm9mb2xkKHNhZGRyLCBkYWRkciwgdWxlbiwgSVBQUk9UT19VRFAsIDApOwogCi0Jc2tiLT5jc3VtID0gY3N1bV90Y3B1ZHBfbm9mb2xkKHNhZGRyLCBkYWRkciwgdWxlbiwgSVBQUk9UT19VRFAsIDApOworCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9IVyAmJgorCSAgICAhKHUxNiljc3VtX2ZvbGQoY3N1bV9hZGQocHN1bSwgc2tiLT5jc3VtKSkpCisJCXJldHVybiAwOwogCi0JcmV0dXJuIGNzdW1fZm9sZChza2JfY2hlY2tzdW0oc2tiLCAwLCBza2ItPmxlbiwgc2tiLT5jc3VtKSk7CisJc2tiLT5jc3VtID0gcHN1bTsKKworCXJldHVybiBfX3NrYl9jaGVja3N1bV9jb21wbGV0ZShza2IpOwogfQogCiAvKgpAQCAtNDg5LDcgKzQ5Myw3IEBACiAKIAlpZiAodWxlbiAhPSBsZW4pCiAJCWdvdG8gb3V0OwotCWlmIChjaGVja3N1bV91ZHAoc2tiLCB1aCwgdWxlbiwgaXBoLT5zYWRkciwgaXBoLT5kYWRkcikgPCAwKQorCWlmIChjaGVja3N1bV91ZHAoc2tiLCB1aCwgdWxlbiwgaXBoLT5zYWRkciwgaXBoLT5kYWRkcikpCiAJCWdvdG8gb3V0OwogCWlmIChucC0+bG9jYWxfaXAgJiYgbnAtPmxvY2FsX2lwICE9IG50b2hsKGlwaC0+ZGFkZHIpKQogCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3J0bmV0bGluay5jIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmMKaW5kZXggOWJlZDc1Ni4uODcwMDM3OSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMKKysrIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmMKQEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlIDxuZXQvdWRwLmg+CiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KICNpbmNsdWRlIDxuZXQvcGt0X3NjaGVkLmg+CisjaW5jbHVkZSA8bmV0L25ldGxpbmsuaD4KIAogREVDTEFSRV9NVVRFWChydG5sX3NlbSk7CiAKQEAgLTQ2MiwxMSArNDYzLDYgQEAKIAluZXRsaW5rX2Jyb2FkY2FzdChydG5sLCBza2IsIDAsIFJUTkxHUlBfTElOSywgR0ZQX0tFUk5FTCk7CiB9CiAKLXN0YXRpYyBpbnQgcnRuZXRsaW5rX2RvbmUoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQotewotCXJldHVybiAwOwotfQotCiAvKiBQcm90ZWN0ZWQgYnkgUlROTCBzZW1wYWhvcmUuICAqLwogc3RhdGljIHN0cnVjdCBydGF0dHIgKipydGFfYnVmOwogc3RhdGljIGludCBydGF0dHJfbWF4OwpAQCAtNTI0LDggKzUyMCw2IEBACiAJfQogCiAJaWYgKGtpbmQgPT0gMiAmJiBubGgtPm5sbXNnX2ZsYWdzJk5MTV9GX0RVTVApIHsKLQkJdTMyIHJsZW47Ci0KIAkJaWYgKGxpbmstPmR1bXBpdCA9PSBOVUxMKQogCQkJbGluayA9ICYocnRuZXRsaW5rX2xpbmtzW1BGX1VOU1BFQ11bdHlwZV0pOwogCkBAIC01MzMsMTQgKzUyNywxMSBAQAogCQkJZ290byBlcnJfaW52YWw7CiAKIAkJaWYgKCgqZXJycCA9IG5ldGxpbmtfZHVtcF9zdGFydChydG5sLCBza2IsIG5saCwKLQkJCQkJCWxpbmstPmR1bXBpdCwKLQkJCQkJCXJ0bmV0bGlua19kb25lKSkgIT0gMCkgeworCQkJCQkJbGluay0+ZHVtcGl0LCBOVUxMKSkgIT0gMCkgewogCQkJcmV0dXJuIC0xOwogCQl9Ci0JCXJsZW4gPSBOTE1TR19BTElHTihubGgtPm5sbXNnX2xlbik7Ci0JCWlmIChybGVuID4gc2tiLT5sZW4pCi0JCQlybGVuID0gc2tiLT5sZW47Ci0JCXNrYl9wdWxsKHNrYiwgcmxlbik7CisKKwkJbmV0bGlua19xdWV1ZV9za2lwKG5saCwgc2tiKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtNTc5LDc1ICs1NzAsMTMgQEAKIAlyZXR1cm4gLTE7CiB9CiAKLS8qIAotICogUHJvY2VzcyBvbmUgcGFja2V0IG9mIG1lc3NhZ2VzLgotICogTWFsZm9ybWVkIHNrYnMgd2l0aCB3cm9uZyBsZW5ndGhzIG9mIG1lc3NhZ2VzIGFyZSBkaXNjYXJkZWQgc2lsZW50bHkuCi0gKi8KLQotc3RhdGljIGlubGluZSBpbnQgcnRuZXRsaW5rX3Jjdl9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlpbnQgZXJyOwotCXN0cnVjdCBubG1zZ2hkciAqIG5saDsKLQotCXdoaWxlIChza2ItPmxlbiA+PSBOTE1TR19TUEFDRSgwKSkgewotCQl1MzIgcmxlbjsKLQotCQlubGggPSAoc3RydWN0IG5sbXNnaGRyICopc2tiLT5kYXRhOwotCQlpZiAobmxoLT5ubG1zZ19sZW4gPCBzaXplb2YoKm5saCkgfHwgc2tiLT5sZW4gPCBubGgtPm5sbXNnX2xlbikKLQkJCXJldHVybiAwOwotCQlybGVuID0gTkxNU0dfQUxJR04obmxoLT5ubG1zZ19sZW4pOwotCQlpZiAocmxlbiA+IHNrYi0+bGVuKQotCQkJcmxlbiA9IHNrYi0+bGVuOwotCQlpZiAocnRuZXRsaW5rX3Jjdl9tc2coc2tiLCBubGgsICZlcnIpKSB7Ci0JCQkvKiBOb3QgZXJyb3IsIGJ1dCB3ZSBtdXN0IGludGVycnVwdCBwcm9jZXNzaW5nIGhlcmU6Ci0JCQkgKiAgIE5vdGUsIHRoYXQgaW4gdGhpcyBjYXNlIHdlIGRvIG5vdCBwdWxsIG1lc3NhZ2UKLQkJCSAqICAgZnJvbSBza2IsIGl0IHdpbGwgYmUgcHJvY2Vzc2VkIGxhdGVyLgotCQkJICovCi0JCQlpZiAoZXJyID09IDApCi0JCQkJcmV0dXJuIC0xOwotCQkJbmV0bGlua19hY2soc2tiLCBubGgsIGVycik7Ci0JCX0gZWxzZSBpZiAobmxoLT5ubG1zZ19mbGFncyZOTE1fRl9BQ0spCi0JCQluZXRsaW5rX2Fjayhza2IsIG5saCwgMCk7Ci0JCXNrYl9wdWxsKHNrYiwgcmxlbik7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiAgcnRuZXRsaW5rIGlucHV0IHF1ZXVlIHByb2Nlc3Npbmcgcm91dGluZToKLSAqCS0gcHJvY2VzcyBhcyBtdWNoIGFzIHRoZXJlIHdhcyBpbiB0aGUgcXVldWUgdXBvbiBlbnRyeS4KLSAqCS0gZmVlZCBza2JzIHRvIHJ0bmV0bGlua19yY3Zfc2tiLCB1bnRpbCBpdCByZWZ1c2UgYSBtZXNzYWdlLAotICoJICB0aGF0IHdpbGwgb2NjdXIsIHdoZW4gYSBkdW1wIHN0YXJ0ZWQuCi0gKi8KLQogc3RhdGljIHZvaWQgcnRuZXRsaW5rX3JjdihzdHJ1Y3Qgc29jayAqc2ssIGludCBsZW4pCiB7Ci0JdW5zaWduZWQgaW50IHFsZW4gPSBza2JfcXVldWVfbGVuKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSk7CisJdW5zaWduZWQgaW50IHFsZW4gPSAwOwogCiAJZG8gewotCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCiAJCXJ0bmxfbG9jaygpOwotCi0JCWlmIChxbGVuID4gc2tiX3F1ZXVlX2xlbigmc2stPnNrX3JlY2VpdmVfcXVldWUpKQotCQkJcWxlbiA9IHNrYl9xdWV1ZV9sZW4oJnNrLT5za19yZWNlaXZlX3F1ZXVlKTsKLQotCQlmb3IgKDsgcWxlbjsgcWxlbi0tKSB7Ci0JCQlza2IgPSBza2JfZGVxdWV1ZSgmc2stPnNrX3JlY2VpdmVfcXVldWUpOwotCQkJaWYgKHJ0bmV0bGlua19yY3Zfc2tiKHNrYikpIHsKLQkJCQlpZiAoc2tiLT5sZW4pCi0JCQkJCXNrYl9xdWV1ZV9oZWFkKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSwKLQkJCQkJCSAgICAgICBza2IpOwotCQkJCWVsc2UgewotCQkJCQlrZnJlZV9za2Ioc2tiKTsKLQkJCQkJcWxlbi0tOwotCQkJCX0KLQkJCQlicmVhazsKLQkJCX0KLQkJCWtmcmVlX3NrYihza2IpOwotCQl9Ci0KKwkJbmV0bGlua19ydW5fcXVldWUoc2ssICZxbGVuLCAmcnRuZXRsaW5rX3Jjdl9tc2cpOwogCQl1cCgmcnRubF9zZW0pOwogCiAJCW5ldGRldl9ydW5fdG9kbygpOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2tidWZmLmMgYi9uZXQvY29yZS9za2J1ZmYuYwppbmRleCA5NTUwMWU0Li5iN2QxM2E0IDEwMDY0NAotLS0gYS9uZXQvY29yZS9za2J1ZmYuYworKysgYi9uZXQvY29yZS9za2J1ZmYuYwpAQCAtMzM2LDYgKzMzNiw5IEBACiAJfQogI2lmZGVmIENPTkZJR19ORVRGSUxURVIKIAluZl9jb25udHJhY2tfcHV0KHNrYi0+bmZjdCk7CisjaWYgZGVmaW5lZChDT05GSUdfTkZfQ09OTlRSQUNLKSB8fCBkZWZpbmVkKENPTkZJR19ORl9DT05OVFJBQ0tfTU9EVUxFKQorCW5mX2Nvbm50cmFja19wdXRfcmVhc20oc2tiLT5uZmN0X3JlYXNtKTsKKyNlbmRpZgogI2lmZGVmIENPTkZJR19CUklER0VfTkVURklMVEVSCiAJbmZfYnJpZGdlX3B1dChza2ItPm5mX2JyaWRnZSk7CiAjZW5kaWYKQEAgLTQxNCw5ICs0MTcsMTcgQEAKIAlDKG5mY3QpOwogCW5mX2Nvbm50cmFja19nZXQoc2tiLT5uZmN0KTsKIAlDKG5mY3RpbmZvKTsKKyNpZiBkZWZpbmVkKENPTkZJR19ORl9DT05OVFJBQ0spIHx8IGRlZmluZWQoQ09ORklHX05GX0NPTk5UUkFDS19NT0RVTEUpCisJQyhuZmN0X3JlYXNtKTsKKwluZl9jb25udHJhY2tfZ2V0X3JlYXNtKHNrYi0+bmZjdF9yZWFzbSk7CisjZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19JUF9WUykgfHwgZGVmaW5lZChDT05GSUdfSVBfVlNfTU9EVUxFKQogCUMoaXB2c19wcm9wZXJ0eSk7CiAjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19ORl9DT05OVFJBQ0spIHx8IGRlZmluZWQoQ09ORklHX05GX0NPTk5UUkFDS19NT0RVTEUpCisJQyhuZmN0X3JlYXNtKTsKKwluZl9jb25udHJhY2tfZ2V0X3JlYXNtKHNrYi0+bmZjdF9yZWFzbSk7CisjZW5kaWYKICNpZmRlZiBDT05GSUdfQlJJREdFX05FVEZJTFRFUgogCUMobmZfYnJpZGdlKTsKIAluZl9icmlkZ2VfZ2V0KHNrYi0+bmZfYnJpZGdlKTsKQEAgLTQ3NCw2ICs0ODUsMTAgQEAKIAluZXctPm5mY3QJPSBvbGQtPm5mY3Q7CiAJbmZfY29ubnRyYWNrX2dldChvbGQtPm5mY3QpOwogCW5ldy0+bmZjdGluZm8JPSBvbGQtPm5mY3RpbmZvOworI2lmIGRlZmluZWQoQ09ORklHX05GX0NPTk5UUkFDSykgfHwgZGVmaW5lZChDT05GSUdfTkZfQ09OTlRSQUNLX01PRFVMRSkKKwluZXctPm5mY3RfcmVhc20gPSBvbGQtPm5mY3RfcmVhc207CisJbmZfY29ubnRyYWNrX2dldF9yZWFzbShvbGQtPm5mY3RfcmVhc20pOworI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfSVBfVlMpIHx8IGRlZmluZWQoQ09ORklHX0lQX1ZTX01PRFVMRSkKIAluZXctPmlwdnNfcHJvcGVydHkgPSBvbGQtPmlwdnNfcHJvcGVydHk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NvY2suYyBiL25ldC9jb3JlL3NvY2suYwppbmRleCA5NjAyY2ViLi4xM2NjM2JlIDEwMDY0NAotLS0gYS9uZXQvY29yZS9zb2NrLmMKKysrIGIvbmV0L2NvcmUvc29jay5jCkBAIC0xMjQyLDggKzEyNDIsNyBAQAogCiBzdGF0aWMgdm9pZCBzb2NrX2RlZl9kZXN0cnVjdChzdHJ1Y3Qgc29jayAqc2spCiB7Ci0JaWYgKHNrLT5za19wcm90aW5mbykKLQkJa2ZyZWUoc2stPnNrX3Byb3RpbmZvKTsKKwlrZnJlZShzay0+c2tfcHJvdGluZm8pOwogfQogCiB2b2lkIHNrX3NlbmRfc2lndXJnKHN0cnVjdCBzb2NrICpzaykKZGlmZiAtLWdpdCBhL25ldC9kY2NwL2lwdjQuYyBiL25ldC9kY2NwL2lwdjQuYwppbmRleCA0YjliYzgxLi5jYTAzNTIxIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9pcHY0LmMKKysrIGIvbmV0L2RjY3AvaXB2NC5jCkBAIC0xMjYzLDEwICsxMjYzLDggQEAKIAlpZiAoaW5ldF9jc2soc2spLT5pY3NrX2JpbmRfaGFzaCAhPSBOVUxMKQogCQlpbmV0X3B1dF9wb3J0KCZkY2NwX2hhc2hpbmZvLCBzayk7CiAKLQlpZiAoZHAtPmRjY3BzX3NlcnZpY2VfbGlzdCAhPSBOVUxMKSB7Ci0JCWtmcmVlKGRwLT5kY2Nwc19zZXJ2aWNlX2xpc3QpOwotCQlkcC0+ZGNjcHNfc2VydmljZV9saXN0ID0gTlVMTDsKLQl9CisJa2ZyZWUoZHAtPmRjY3BzX3NlcnZpY2VfbGlzdCk7CisJZHAtPmRjY3BzX3NlcnZpY2VfbGlzdCA9IE5VTEw7CiAKIAljY2lkX2hjX3J4X2V4aXQoZHAtPmRjY3BzX2hjX3J4X2NjaWQsIHNrKTsKIAljY2lkX2hjX3R4X2V4aXQoZHAtPmRjY3BzX2hjX3R4X2NjaWQsIHNrKTsKZGlmZiAtLWdpdCBhL25ldC9kY2NwL3Byb3RvLmMgYi9uZXQvZGNjcC9wcm90by5jCmluZGV4IGEwMjFjMzQuLmUwYWNlN2MgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL3Byb3RvLmMKKysrIGIvbmV0L2RjY3AvcHJvdG8uYwpAQCAtMjM4LDggKzIzOCw3IEBACiAJbG9ja19zb2NrKHNrKTsKIAlkcC0+ZGNjcHNfc2VydmljZSA9IHNlcnZpY2U7CiAKLQlpZiAoZHAtPmRjY3BzX3NlcnZpY2VfbGlzdCAhPSBOVUxMKQotCQlrZnJlZShkcC0+ZGNjcHNfc2VydmljZV9saXN0KTsKKwlrZnJlZShkcC0+ZGNjcHNfc2VydmljZV9saXN0KTsKIAogCWRwLT5kY2Nwc19zZXJ2aWNlX2xpc3QgPSBzbDsKIAlyZWxlYXNlX3NvY2soc2spOwpkaWZmIC0tZ2l0IGEvbmV0L2RlY25ldC9hZl9kZWNuZXQuYyBiL25ldC9kZWNuZXQvYWZfZGVjbmV0LmMKaW5kZXggM2YyNWNhZC4uZjg5ZTU1ZiAxMDA2NDQKLS0tIGEvbmV0L2RlY25ldC9hZl9kZWNuZXQuYworKysgYi9uZXQvZGVjbmV0L2FmX2RlY25ldC5jCkBAIC0xNjY0LDE3ICsxNjY0LDE1IEBACiAJCWdvdG8gb3V0OwogCX0KIAorCWlmIChzay0+c2tfc2h1dGRvd24gJiBSQ1ZfU0hVVERPV04pIHsKKwkJcnYgPSAwOworCQlnb3RvIG91dDsKKwl9CisKIAlydiA9IGRuX2NoZWNrX3N0YXRlKHNrLCBOVUxMLCAwLCAmdGltZW8sIGZsYWdzKTsKIAlpZiAocnYpCiAJCWdvdG8gb3V0OwogCi0JaWYgKHNrLT5za19zaHV0ZG93biAmIFJDVl9TSFVURE9XTikgewotCQlpZiAoIShmbGFncyAmIE1TR19OT1NJR05BTCkpCi0JCQlzZW5kX3NpZyhTSUdQSVBFLCBjdXJyZW50LCAwKTsKLQkJcnYgPSAtRVBJUEU7Ci0JCWdvdG8gb3V0OwotCX0KLQogCWlmIChmbGFncyAmIH4oTVNHX1BFRUt8TVNHX09PQnxNU0dfV0FJVEFMTHxNU0dfRE9OVFdBSVR8TVNHX05PU0lHTkFMKSkgewogCQlydiA9IC1FT1BOT1RTVVBQOwogCQlnb3RvIG91dDsKQEAgLTE5MjgsNiArMTkyNiw4IEBACiAKIAlpZiAoc2stPnNrX3NodXRkb3duICYgU0VORF9TSFVURE9XTikgewogCQllcnIgPSAtRVBJUEU7CisJCWlmICghKGZsYWdzICYgTVNHX05PU0lHTkFMKSkKKwkJCXNlbmRfc2lnKFNJR1BJUEUsIGN1cnJlbnQsIDApOwogCQlnb3RvIG91dF9lcnI7CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvZGVjbmV0L2RuX3RhYmxlLmMgYi9uZXQvZGVjbmV0L2RuX3RhYmxlLmMKaW5kZXggZWViYTU2Zi4uNmY4YjU2NSAxMDA2NDQKLS0tIGEvbmV0L2RlY25ldC9kbl90YWJsZS5jCisrKyBiL25ldC9kZWNuZXQvZG5fdGFibGUuYwpAQCAtNzg0LDE2ICs3ODQsMTQgQEAKIAogc3RhdGljIHZvaWQgZG5fZmliX2RlbF90cmVlKGludCBuKQogewotICAgICAgICBzdHJ1Y3QgZG5fZmliX3RhYmxlICp0OworCXN0cnVjdCBkbl9maWJfdGFibGUgKnQ7CiAKLSAgICAgICAgd3JpdGVfbG9jaygmZG5fZmliX3RhYmxlc19sb2NrKTsKLSAgICAgICAgdCA9IGRuX2ZpYl90YWJsZXNbbl07Ci0gICAgICAgIGRuX2ZpYl90YWJsZXNbbl0gPSBOVUxMOwotICAgICAgICB3cml0ZV91bmxvY2soJmRuX2ZpYl90YWJsZXNfbG9jayk7CisJd3JpdGVfbG9jaygmZG5fZmliX3RhYmxlc19sb2NrKTsKKwl0ID0gZG5fZmliX3RhYmxlc1tuXTsKKwlkbl9maWJfdGFibGVzW25dID0gTlVMTDsKKwl3cml0ZV91bmxvY2soJmRuX2ZpYl90YWJsZXNfbG9jayk7CiAKLSAgICAgICAgaWYgKHQpIHsKLSAgICAgICAgICAgICAgICBrZnJlZSh0KTsKLSAgICAgICAgfQorCWtmcmVlKHQpOwogfQogCiBzdHJ1Y3QgZG5fZmliX3RhYmxlICpkbl9maWJfZW1wdHlfdGFibGUodm9pZCkKZGlmZiAtLWdpdCBhL25ldC9ldGhlcm5ldC9wZTIuYyBiL25ldC9ldGhlcm5ldC9wZTIuYwppbmRleCA5OGE0OTRiLi45ZDU3YjRmIDEwMDY0NAotLS0gYS9uZXQvZXRoZXJuZXQvcGUyLmMKKysrIGIvbmV0L2V0aGVybmV0L3BlMi5jCkBAIC0zMiw4ICszMiw3IEBACiAKIHZvaWQgZGVzdHJveV9FSUlfY2xpZW50KHN0cnVjdCBkYXRhbGlua19wcm90byAqZGwpCiB7Ci0JaWYgKGRsKQotCQlrZnJlZShkbCk7CisJa2ZyZWUoZGwpOwogfQogCiBFWFBPUlRfU1lNQk9MKGRlc3Ryb3lfRUlJX2NsaWVudCk7CmRpZmYgLS1naXQgYS9uZXQvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdC5jIGIvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHQuYwppbmRleCAyMGNjNTgwLi5lY2M5YmIxIDEwMDY0NAotLS0gYS9uZXQvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdC5jCisrKyBiL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0LmMKQEAgLTExLDE1ICsxMSwxNCBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGFzbS9zdHJpbmcuaD4KLSNpbmNsdWRlIDxhc20vZXJybm8uaD4KLQorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPG5ldC9pZWVlODAyMTEuaD4KIAorCiBNT0RVTEVfQVVUSE9SKCJKb3VuaSBNYWxpbmVuIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkhvc3RBUCBjcnlwdG8iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKQEAgLTI5LDMyICsyOCwyMCBAQAogCXN0cnVjdCBpZWVlODAyMTFfY3J5cHRvX29wcyAqb3BzOwogfTsKIAotc3RydWN0IGllZWU4MDIxMV9jcnlwdG8gewotCXN0cnVjdCBsaXN0X2hlYWQgYWxnczsKLQlzcGlubG9ja190IGxvY2s7Ci19OwotCi1zdGF0aWMgc3RydWN0IGllZWU4MDIxMV9jcnlwdG8gKmhjcnlwdDsKK3N0YXRpYyBMSVNUX0hFQUQoaWVlZTgwMjExX2NyeXB0b19hbGdzKTsKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soaWVlZTgwMjExX2NyeXB0b19sb2NrKTsKIAogdm9pZCBpZWVlODAyMTFfY3J5cHRfZGVpbml0X2VudHJpZXMoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsIGludCBmb3JjZSkKIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwdHIsICpuOwotCXN0cnVjdCBpZWVlODAyMTFfY3J5cHRfZGF0YSAqZW50cnk7CisgCXN0cnVjdCBpZWVlODAyMTFfY3J5cHRfZGF0YSAqZW50cnksICpuZXh0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaWVlZS0+bG9jaywgZmxhZ3MpOwotCi0JaWYgKGxpc3RfZW1wdHkoJmllZWUtPmNyeXB0X2RlaW5pdF9saXN0KSkKLQkJZ290byB1bmxvY2s7Ci0KLQlmb3IgKHB0ciA9IGllZWUtPmNyeXB0X2RlaW5pdF9saXN0Lm5leHQsIG4gPSBwdHItPm5leHQ7Ci0JICAgICBwdHIgIT0gJmllZWUtPmNyeXB0X2RlaW5pdF9saXN0OyBwdHIgPSBuLCBuID0gcHRyLT5uZXh0KSB7Ci0JCWVudHJ5ID0gbGlzdF9lbnRyeShwdHIsIHN0cnVjdCBpZWVlODAyMTFfY3J5cHRfZGF0YSwgbGlzdCk7Ci0KKyAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5LCBuZXh0LCAmaWVlZS0+Y3J5cHRfZGVpbml0X2xpc3QsIGxpc3QpIHsKIAkJaWYgKGF0b21pY19yZWFkKCZlbnRyeS0+cmVmY250KSAhPSAwICYmICFmb3JjZSkKIAkJCWNvbnRpbnVlOwogCi0JCWxpc3RfZGVsKHB0cik7CisJCWxpc3RfZGVsKCZlbnRyeS0+bGlzdCk7CiAKIAkJaWYgKGVudHJ5LT5vcHMpIHsKIAkJCWVudHJ5LT5vcHMtPmRlaW5pdChlbnRyeS0+cHJpdik7CkBAIC02Miw3ICs0OSw2IEBACiAJCX0KIAkJa2ZyZWUoZW50cnkpOwogCX0KLSAgICAgIHVubG9jazoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZWVlLT5sb2NrLCBmbGFncyk7CiB9CiAKQEAgLTEyNSw5ICsxMTEsNiBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGllZWU4MDIxMV9jcnlwdG9fYWxnICphbGc7CiAKLQlpZiAoaGNyeXB0ID09IE5VTEwpCi0JCXJldHVybiAtMTsKLQogCWFsZyA9IGttYWxsb2Moc2l6ZW9mKCphbGcpLCBHRlBfS0VSTkVMKTsKIAlpZiAoYWxnID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMTM1LDkgKzExOCw5IEBACiAJbWVtc2V0KGFsZywgMCwgc2l6ZW9mKCphbGcpKTsKIAlhbGctPm9wcyA9IG9wczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZoY3J5cHQtPmxvY2ssIGZsYWdzKTsKLQlsaXN0X2FkZCgmYWxnLT5saXN0LCAmaGNyeXB0LT5hbGdzKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoY3J5cHQtPmxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaWVlZTgwMjExX2NyeXB0b19sb2NrLCBmbGFncyk7CisJbGlzdF9hZGQoJmFsZy0+bGlzdCwgJmllZWU4MDIxMV9jcnlwdG9fYWxncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWVlZTgwMjExX2NyeXB0b19sb2NrLCBmbGFncyk7CiAKIAlwcmludGsoS0VSTl9ERUJVRyAiaWVlZTgwMjExX2NyeXB0OiByZWdpc3RlcmVkIGFsZ29yaXRobSAnJXMnXG4iLAogCSAgICAgICBvcHMtPm5hbWUpOwpAQCAtMTQ3LDY0ICsxMzAsNDkgQEAKIAogaW50IGllZWU4MDIxMV91bnJlZ2lzdGVyX2NyeXB0b19vcHMoc3RydWN0IGllZWU4MDIxMV9jcnlwdG9fb3BzICpvcHMpCiB7CisJc3RydWN0IGllZWU4MDIxMV9jcnlwdG9fYWxnICphbGc7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwdHI7Ci0Jc3RydWN0IGllZWU4MDIxMV9jcnlwdG9fYWxnICpkZWxfYWxnID0gTlVMTDsKIAotCWlmIChoY3J5cHQgPT0gTlVMTCkKLQkJcmV0dXJuIC0xOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmhjcnlwdC0+bG9jaywgZmxhZ3MpOwotCWZvciAocHRyID0gaGNyeXB0LT5hbGdzLm5leHQ7IHB0ciAhPSAmaGNyeXB0LT5hbGdzOyBwdHIgPSBwdHItPm5leHQpIHsKLQkJc3RydWN0IGllZWU4MDIxMV9jcnlwdG9fYWxnICphbGcgPQotCQkgICAgKHN0cnVjdCBpZWVlODAyMTFfY3J5cHRvX2FsZyAqKXB0cjsKLQkJaWYgKGFsZy0+b3BzID09IG9wcykgewotCQkJbGlzdF9kZWwoJmFsZy0+bGlzdCk7Ci0JCQlkZWxfYWxnID0gYWxnOwotCQkJYnJlYWs7Ci0JCX0KKwlzcGluX2xvY2tfaXJxc2F2ZSgmaWVlZTgwMjExX2NyeXB0b19sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShhbGcsICZpZWVlODAyMTFfY3J5cHRvX2FsZ3MsIGxpc3QpIHsKKwkJaWYgKGFsZy0+b3BzID09IG9wcykKKwkJCWdvdG8gZm91bmQ7CiAJfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhjcnlwdC0+bG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmllZWU4MDIxMV9jcnlwdG9fbG9jaywgZmxhZ3MpOworCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKGRlbF9hbGcpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgImllZWU4MDIxMV9jcnlwdDogdW5yZWdpc3RlcmVkIGFsZ29yaXRobSAiCi0JCSAgICAgICAiJyVzJ1xuIiwgb3BzLT5uYW1lKTsKLQkJa2ZyZWUoZGVsX2FsZyk7Ci0JfQotCi0JcmV0dXJuIGRlbF9hbGcgPyAwIDogLTE7CisgZm91bmQ6CisJcHJpbnRrKEtFUk5fREVCVUcgImllZWU4MDIxMV9jcnlwdDogdW5yZWdpc3RlcmVkIGFsZ29yaXRobSAiCisJCQkgICInJXMnXG4iLCBvcHMtPm5hbWUpOworCWxpc3RfZGVsKCZhbGctPmxpc3QpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmllZWU4MDIxMV9jcnlwdG9fbG9jaywgZmxhZ3MpOworCWtmcmVlKGFsZyk7CisJcmV0dXJuIDA7CiB9CiAKIHN0cnVjdCBpZWVlODAyMTFfY3J5cHRvX29wcyAqaWVlZTgwMjExX2dldF9jcnlwdG9fb3BzKGNvbnN0IGNoYXIgKm5hbWUpCiB7CisJc3RydWN0IGllZWU4MDIxMV9jcnlwdG9fYWxnICphbGc7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwdHI7Ci0Jc3RydWN0IGllZWU4MDIxMV9jcnlwdG9fYWxnICpmb3VuZF9hbGcgPSBOVUxMOwogCi0JaWYgKGhjcnlwdCA9PSBOVUxMKQotCQlyZXR1cm4gTlVMTDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZoY3J5cHQtPmxvY2ssIGZsYWdzKTsKLQlmb3IgKHB0ciA9IGhjcnlwdC0+YWxncy5uZXh0OyBwdHIgIT0gJmhjcnlwdC0+YWxnczsgcHRyID0gcHRyLT5uZXh0KSB7Ci0JCXN0cnVjdCBpZWVlODAyMTFfY3J5cHRvX2FsZyAqYWxnID0KLQkJICAgIChzdHJ1Y3QgaWVlZTgwMjExX2NyeXB0b19hbGcgKilwdHI7Ci0JCWlmIChzdHJjbXAoYWxnLT5vcHMtPm5hbWUsIG5hbWUpID09IDApIHsKLQkJCWZvdW5kX2FsZyA9IGFsZzsKLQkJCWJyZWFrOwotCQl9CisJc3Bpbl9sb2NrX2lycXNhdmUoJmllZWU4MDIxMV9jcnlwdG9fbG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoYWxnLCAmaWVlZTgwMjExX2NyeXB0b19hbGdzLCBsaXN0KSB7CisJCWlmIChzdHJjbXAoYWxnLT5vcHMtPm5hbWUsIG5hbWUpID09IDApCisJCQlnb3RvIGZvdW5kOwogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoY3J5cHQtPmxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZWVlODAyMTFfY3J5cHRvX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gTlVMTDsKIAotCWlmIChmb3VuZF9hbGcpCi0JCXJldHVybiBmb3VuZF9hbGctPm9wczsKLQllbHNlCi0JCXJldHVybiBOVUxMOworIGZvdW5kOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmllZWU4MDIxMV9jcnlwdG9fbG9jaywgZmxhZ3MpOworCXJldHVybiBhbGctPm9wczsKIH0KIAogc3RhdGljIHZvaWQgKmllZWU4MDIxMV9jcnlwdF9udWxsX2luaXQoaW50IGtleWlkeCkKIHsKIAlyZXR1cm4gKHZvaWQgKikxOwogfQorCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfY3J5cHRfbnVsbF9kZWluaXQodm9pZCAqcHJpdikKIHsKIH0KQEAgLTIxMyw1NiArMTgxLDE4IEBACiAJLm5hbWUgPSAiTlVMTCIsCiAJLmluaXQgPSBpZWVlODAyMTFfY3J5cHRfbnVsbF9pbml0LAogCS5kZWluaXQgPSBpZWVlODAyMTFfY3J5cHRfbnVsbF9kZWluaXQsCi0JLmVuY3J5cHRfbXBkdSA9IE5VTEwsCi0JLmRlY3J5cHRfbXBkdSA9IE5VTEwsCi0JLmVuY3J5cHRfbXNkdSA9IE5VTEwsCi0JLmRlY3J5cHRfbXNkdSA9IE5VTEwsCi0JLnNldF9rZXkgPSBOVUxMLAotCS5nZXRfa2V5ID0gTlVMTCwKLQkuZXh0cmFfbXBkdV9wcmVmaXhfbGVuID0gMCwKLQkuZXh0cmFfbXBkdV9wb3N0Zml4X2xlbiA9IDAsCiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBpZWVlODAyMTFfY3J5cHRvX2luaXQodm9pZCkKIHsKLQlpbnQgcmV0ID0gLUVOT01FTTsKLQotCWhjcnlwdCA9IGttYWxsb2Moc2l6ZW9mKCpoY3J5cHQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWhjcnlwdCkKLQkJZ290byBvdXQ7Ci0KLQltZW1zZXQoaGNyeXB0LCAwLCBzaXplb2YoKmhjcnlwdCkpOwotCUlOSVRfTElTVF9IRUFEKCZoY3J5cHQtPmFsZ3MpOwotCXNwaW5fbG9ja19pbml0KCZoY3J5cHQtPmxvY2spOwotCi0JcmV0ID0gaWVlZTgwMjExX3JlZ2lzdGVyX2NyeXB0b19vcHMoJmllZWU4MDIxMV9jcnlwdF9udWxsKTsKLQlpZiAocmV0IDwgMCkgewotCQlrZnJlZShoY3J5cHQpOwotCQloY3J5cHQgPSBOVUxMOwotCX0KLSAgICAgIG91dDoKLQlyZXR1cm4gcmV0OworCXJldHVybiBpZWVlODAyMTFfcmVnaXN0ZXJfY3J5cHRvX29wcygmaWVlZTgwMjExX2NyeXB0X251bGwpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgaWVlZTgwMjExX2NyeXB0b19kZWluaXQodm9pZCkKIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwdHIsICpuOwotCi0JaWYgKGhjcnlwdCA9PSBOVUxMKQotCQlyZXR1cm47Ci0KLQlmb3IgKHB0ciA9IGhjcnlwdC0+YWxncy5uZXh0LCBuID0gcHRyLT5uZXh0OyBwdHIgIT0gJmhjcnlwdC0+YWxnczsKLQkgICAgIHB0ciA9IG4sIG4gPSBwdHItPm5leHQpIHsKLQkJc3RydWN0IGllZWU4MDIxMV9jcnlwdG9fYWxnICphbGcgPQotCQkgICAgKHN0cnVjdCBpZWVlODAyMTFfY3J5cHRvX2FsZyAqKXB0cjsKLQkJbGlzdF9kZWwocHRyKTsKLQkJcHJpbnRrKEtFUk5fREVCVUcgImllZWU4MDIxMV9jcnlwdDogdW5yZWdpc3RlcmVkIGFsZ29yaXRobSAiCi0JCSAgICAgICAiJyVzJyAoZGVpbml0KVxuIiwgYWxnLT5vcHMtPm5hbWUpOwotCQlrZnJlZShhbGcpOwotCX0KLQotCWtmcmVlKGhjcnlwdCk7CisJaWVlZTgwMjExX3VucmVnaXN0ZXJfY3J5cHRvX29wcygmaWVlZTgwMjExX2NyeXB0X251bGwpOworCUJVR19PTighbGlzdF9lbXB0eSgmaWVlZTgwMjExX2NyeXB0b19hbGdzKSk7CiB9CiAKIEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX2NyeXB0X2RlaW5pdF9lbnRyaWVzKTsKZGlmZiAtLWdpdCBhL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX3J4LmMgYi9uZXQvaWVlZTgwMjExL2llZWU4MDIxMV9yeC5jCmluZGV4IDZhZDg4MjEuLjAzZWZhYWMgMTAwNjQ0Ci0tLSBhL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX3J4LmMKKysrIGIvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfcnguYwpAQCAtMzY5LDYgKzM2OSw3IEBACiAJLyogUHV0IHRoaXMgY29kZSBoZXJlIHNvIHRoYXQgd2UgYXZvaWQgZHVwbGljYXRpbmcgaXQgaW4gYWxsCiAJICogUnggcGF0aHMuIC0gSmVhbiBJSSAqLwogI2lmZGVmIElXX1dJUkVMRVNTX1NQWQkJLyogZGVmaW5lZCBpbiBpd19oYW5kbGVyLmggKi8KKyNpZmRlZiBDT05GSUdfTkVUX1JBRElPCiAJLyogSWYgc3B5IG1vbml0b3Jpbmcgb24gKi8KIAlpZiAoaWVlZS0+c3B5X2RhdGEuc3B5X251bWJlciA+IDApIHsKIAkJc3RydWN0IGl3X3F1YWxpdHkgd3N0YXRzOwpAQCAtMzk1LDYgKzM5Niw3IEBACiAJCS8qIFVwZGF0ZSBzcHkgcmVjb3JkcyAqLwogCQl3aXJlbGVzc19zcHlfdXBkYXRlKGllZWUtPmRldiwgaGRyLT5hZGRyMiwgJndzdGF0cyk7CiAJfQorI2VuZGlmCQkJCS8qIENPTkZJR19ORVRfUkFESU8gKi8KICNlbmRpZgkJCQkvKiBJV19XSVJFTEVTU19TUFkgKi8KIAogI2lmZGVmIE5PVF9ZRVQKZGlmZiAtLWdpdCBhL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMgYi9uZXQvaWVlZTgwMjExL2llZWU4MDIxMV93eC5jCmluZGV4IDFjZTdhZjkuLjE4MTc1NWYgMTAwNjQ0Ci0tLSBhL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMKKysrIGIvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfd3guYwpAQCAtMTYxLDkgKzE2MSwxMSBAQAogCQkJICAgICAoaWVlZS0+cGVyZmVjdF9yc3NpIC0gaWVlZS0+d29yc3RfcnNzaSkgLQogCQkJICAgICAoaWVlZS0+cGVyZmVjdF9yc3NpIC0gbmV0d29yay0+c3RhdHMucnNzaSkgKgogCQkJICAgICAoMTUgKiAoaWVlZS0+cGVyZmVjdF9yc3NpIC0gaWVlZS0+d29yc3RfcnNzaSkgKwotCQkJICAgICAgNjIgKiAoaWVlZS0+cGVyZmVjdF9yc3NpIC0gbmV0d29yay0+c3RhdHMucnNzaSkpKSAvCi0JCQkgICAgKChpZWVlLT5wZXJmZWN0X3Jzc2kgLSBpZWVlLT53b3JzdF9yc3NpKSAqCi0JCQkgICAgIChpZWVlLT5wZXJmZWN0X3Jzc2kgLSBpZWVlLT53b3JzdF9yc3NpKSk7CisJCQkgICAgICA2MiAqIChpZWVlLT5wZXJmZWN0X3Jzc2kgLQorCQkJCSAgICBuZXR3b3JrLT5zdGF0cy5yc3NpKSkpIC8KKwkJCSAgICAoKGllZWUtPnBlcmZlY3RfcnNzaSAtCisJCQkgICAgICBpZWVlLT53b3JzdF9yc3NpKSAqIChpZWVlLT5wZXJmZWN0X3Jzc2kgLQorCQkJCQkJICAgaWVlZS0+d29yc3RfcnNzaSkpOwogCQlpZiAoaXdlLnUucXVhbC5xdWFsID4gMTAwKQogCQkJaXdlLnUucXVhbC5xdWFsID0gMTAwOwogCQllbHNlIGlmIChpd2UudS5xdWFsLnF1YWwgPCAxKQpAQCAtNTIwLDcgKzUyMiw4IEBACiAJCWNyeXB0ID0gJmllZWUtPmNyeXB0W2lkeF07CiAJCWdyb3VwX2tleSA9IDE7CiAJfSBlbHNlIHsKLQkJaWYgKGlkeCAhPSAwKQorCQkvKiBzb21lIENpc2NvIEFQcyB1c2UgaWR4PjAgZm9yIHVuaWNhc3QgaW4gZHluYW1pYyBXRVAgKi8KKwkJaWYgKGlkeCAhPSAwICYmIGV4dC0+YWxnICE9IElXX0VOQ09ERV9BTEdfV0VQKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWlmIChpZWVlLT5pd19tb2RlID09IElXX01PREVfSU5GUkEpCiAJCQljcnlwdCA9ICZpZWVlLT5jcnlwdFtpZHhdOwpAQCAtNjg4LDcgKzY5MSw4IEBACiAJfSBlbHNlCiAJCWlkeCA9IGllZWUtPnR4X2tleWlkeDsKIAotCWlmICghZXh0LT5leHRfZmxhZ3MgJiBJV19FTkNPREVfRVhUX0dST1VQX0tFWSkKKwlpZiAoIWV4dC0+ZXh0X2ZsYWdzICYgSVdfRU5DT0RFX0VYVF9HUk9VUF9LRVkgJiYKKwkgICAgZXh0LT5hbGcgIT0gSVdfRU5DT0RFX0FMR19XRVApCiAJCWlmIChpZHggIT0gMCB8fCBpZWVlLT5pd19tb2RlICE9IElXX01PREVfSU5GUkEpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvYWZfaW5ldC5jIGIvbmV0L2lwdjQvYWZfaW5ldC5jCmluZGV4IGE5ZDg0ZjkuLmVhYTE1MGMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2FmX2luZXQuYworKysgYi9uZXQvaXB2NC9hZl9pbmV0LmMKQEAgLTE0Nyw4ICsxNDcsNyBAQAogCUJVR19UUkFQKCFzay0+c2tfd21lbV9xdWV1ZWQpOwogCUJVR19UUkFQKCFzay0+c2tfZm9yd2FyZF9hbGxvYyk7CiAKLQlpZiAoaW5ldC0+b3B0KQotCQlrZnJlZShpbmV0LT5vcHQpOworCWtmcmVlKGluZXQtPm9wdCk7CiAJZHN0X3JlbGVhc2Uoc2stPnNrX2RzdF9jYWNoZSk7CiAJc2tfcmVmY250X2RlYnVnX2RlYyhzayk7CiB9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9maWJfZnJvbnRlbmQuYyBiL25ldC9pcHY0L2ZpYl9mcm9udGVuZC5jCmluZGV4IDk5MDYzM2MuLjIyNjdjMWYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2ZpYl9mcm9udGVuZC5jCisrKyBiL25ldC9pcHY0L2ZpYl9mcm9udGVuZC5jCkBAIC0yNjYsOCArMjY2LDcgQEAKIAkJCQlpZiAodGIpCiAJCQkJCWVyciA9IHRiLT50Yl9pbnNlcnQodGIsICZyZXEucnRtLCAmcnRhLCAmcmVxLm5saCwgTlVMTCk7CiAJCQl9Ci0JCQlpZiAocnRhLnJ0YV9teCkKLQkJCQlrZnJlZShydGEucnRhX214KTsKKwkJCWtmcmVlKHJ0YS5ydGFfbXgpOwogCQl9CiAJCXJ0bmxfdW5sb2NrKCk7CiAJCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pY21wLmMgYi9uZXQvaXB2NC9pY21wLmMKaW5kZXggMTc1ZTA5My4uZTNlY2VlYyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaWNtcC5jCisrKyBiL25ldC9pcHY0L2ljbXAuYwpAQCAtOTM0LDExICs5MzQsMTEgQEAKIAljYXNlIENIRUNLU1VNX0hXOgogCQlpZiAoISh1MTYpY3N1bV9mb2xkKHNrYi0+Y3N1bSkpCiAJCQlicmVhazsKLQkJTElNSVRfTkVUREVCVUcoS0VSTl9ERUJVRyAiaWNtcCB2NCBodyBjc3VtIGZhaWx1cmVcbiIpOworCQkvKiBmYWxsIHRocm91Z2ggKi8KIAljYXNlIENIRUNLU1VNX05PTkU6Ci0JCWlmICgodTE2KWNzdW1fZm9sZChza2JfY2hlY2tzdW0oc2tiLCAwLCBza2ItPmxlbiwgMCkpKQorCQlza2ItPmNzdW0gPSAwOworCQlpZiAoX19za2JfY2hlY2tzdW1fY29tcGxldGUoc2tiKSkKIAkJCWdvdG8gZXJyb3I7Ci0JZGVmYXVsdDo7CiAJfQogCiAJaWYgKCFwc2tiX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGljbXBoZHIpKSkKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lnbXAuYyBiL25ldC9pcHY0L2lnbXAuYwppbmRleCBjNjI0N2ZjLi5jMDQ2MDdiIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pZ21wLmMKKysrIGIvbmV0L2lwdjQvaWdtcC5jCkBAIC04NzIsMTEgKzg3MiwxOCBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGlnbXBoZHIpKSB8fCAKLQkgICAgKHUxNiljc3VtX2ZvbGQoc2tiX2NoZWNrc3VtKHNrYiwgMCwgbGVuLCAwKSkpIHsKLQkJaW5fZGV2X3B1dChpbl9kZXYpOwotCQlrZnJlZV9za2Ioc2tiKTsKLQkJcmV0dXJuIDA7CisJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBpZ21waGRyKSkpCisJCWdvdG8gZHJvcDsKKworCXN3aXRjaCAoc2tiLT5pcF9zdW1tZWQpIHsKKwljYXNlIENIRUNLU1VNX0hXOgorCQlpZiAoISh1MTYpY3N1bV9mb2xkKHNrYi0+Y3N1bSkpCisJCQlicmVhazsKKwkJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBDSEVDS1NVTV9OT05FOgorCQlza2ItPmNzdW0gPSAwOworCQlpZiAoX19za2JfY2hlY2tzdW1fY29tcGxldGUoc2tiKSkKKwkJCWdvdG8gZHJvcDsKIAl9CiAKIAlpaCA9IHNrYi0+aC5pZ21waDsKQEAgLTkwNiw2ICs5MTMsOCBAQAogCWRlZmF1bHQ6CiAJCU5FVERFQlVHKEtFUk5fREVCVUcgIk5ldyBJR01QIHR5cGU9JWQsIHdoeSB3ZSBkbyBub3Qga25vdyBhYm91dCBpdD9cbiIsIGloLT50eXBlKTsKIAl9CisKK2Ryb3A6CiAJaW5fZGV2X3B1dChpbl9kZXYpOwogCWtmcmVlX3NrYihza2IpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldF9kaWFnLmMgYi9uZXQvaXB2NC9pbmV0X2RpYWcuYwppbmRleCA3MWYzYzczLi4zOTA2MWVkIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pbmV0X2RpYWcuYworKysgYi9uZXQvaXB2NC9pbmV0X2RpYWcuYwpAQCAtNzI0LDEyICs3MjQsNiBAQAogCXJldHVybiBza2ItPmxlbjsKIH0KIAotc3RhdGljIGludCBpbmV0X2RpYWdfZHVtcF9kb25lKHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKLXsKLQlyZXR1cm4gMDsKLX0KLQotCiBzdGF0aWMgX19pbmxpbmVfXyBpbnQKIGluZXRfZGlhZ19yY3ZfbXNnKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoKQogewpAQCAtNzYwLDggKzc1NCw3IEBACiAJCQkJZ290byBlcnJfaW52YWw7CiAJCX0KIAkJcmV0dXJuIG5ldGxpbmtfZHVtcF9zdGFydChpZGlhZ25sLCBza2IsIG5saCwKLQkJCQkJICBpbmV0X2RpYWdfZHVtcCwKLQkJCQkJICBpbmV0X2RpYWdfZHVtcF9kb25lKTsKKwkJCQkJICBpbmV0X2RpYWdfZHVtcCwgTlVMTCk7CiAJfSBlbHNlIHsKIAkJcmV0dXJuIGluZXRfZGlhZ19nZXRfZXhhY3Qoc2tiLCBubGgpOwogCX0KZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX2dyZS5jIGIvbmV0L2lwdjQvaXBfZ3JlLmMKaW5kZXggODk2Y2UzZi4uNGU5Yzc0YiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfZ3JlLmMKKysrIGIvbmV0L2lwdjQvaXBfZ3JlLmMKQEAgLTU3NywxNSArNTc3LDE2IEBACiAJCQlnb3RvIGRyb3Bfbm9sb2NrOwogCiAJCWlmIChmbGFncyZHUkVfQ1NVTSkgewotCQkJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX0hXKSB7CisJCQlzd2l0Y2ggKHNrYi0+aXBfc3VtbWVkKSB7CisJCQljYXNlIENIRUNLU1VNX0hXOgogCQkJCWNzdW0gPSAodTE2KWNzdW1fZm9sZChza2ItPmNzdW0pOwotCQkJCWlmIChjc3VtKQotCQkJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7Ci0JCQl9Ci0JCQlpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fTk9ORSkgewotCQkJCXNrYi0+Y3N1bSA9IHNrYl9jaGVja3N1bShza2IsIDAsIHNrYi0+bGVuLCAwKTsKKwkJCQlpZiAoIWNzdW0pCisJCQkJCWJyZWFrOworCQkJCS8qIGZhbGwgdGhyb3VnaCAqLworCQkJY2FzZSBDSEVDS1NVTV9OT05FOgorCQkJCXNrYi0+Y3N1bSA9IDA7CisJCQkJY3N1bSA9IF9fc2tiX2NoZWNrc3VtX2NvbXBsZXRlKHNrYik7CiAJCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9IVzsKLQkJCQljc3VtID0gKHUxNiljc3VtX2ZvbGQoc2tiLT5jc3VtKTsKIAkJCX0KIAkJCW9mZnNldCArPSA0OwogCQl9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9vcHRpb25zLmMgYi9uZXQvaXB2NC9pcF9vcHRpb25zLmMKaW5kZXggYmNlNGU4Ny4uZGJlMTJkYSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfb3B0aW9ucy5jCisrKyBiL25ldC9pcHY0L2lwX29wdGlvbnMuYwpAQCAtNTEwLDggKzUxMCw3IEBACiAJCWtmcmVlKG9wdCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQlpZiAoKm9wdHApCi0JCWtmcmVlKCpvcHRwKTsKKwlrZnJlZSgqb3B0cCk7CiAJKm9wdHAgPSBvcHQ7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9vdXRwdXQuYyBiL25ldC9pcHY0L2lwX291dHB1dC5jCmluZGV4IDE3NzU4MjMuLjExYzJmNjggMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX291dHB1dC5jCisrKyBiL25ldC9pcHY0L2lwX291dHB1dC5jCkBAIC0zNTMsNyArMzUzLDggQEAKIAkJaXBfb3B0aW9uc19idWlsZChza2IsIG9wdCwgaW5ldC0+ZGFkZHIsIHJ0LCAwKTsKIAl9CiAKLQlpcF9zZWxlY3RfaWRlbnRfbW9yZShpcGgsICZydC0+dS5kc3QsIHNrLCBza2Jfc2hpbmZvKHNrYiktPnRzb19zZWdzKTsKKwlpcF9zZWxlY3RfaWRlbnRfbW9yZShpcGgsICZydC0+dS5kc3QsIHNrLAorCQkJICAgICAoc2tiX3NoaW5mbyhza2IpLT50c29fc2VncyA/OiAxKSAtIDEpOwogCiAJLyogQWRkIGFuIElQIGNoZWNrc3VtLiAqLwogCWlwX3NlbmRfY2hlY2soaXBoKTsKQEAgLTEyNjIsMTAgKzEyNjMsOCBAQAogCiBvdXQ6CiAJaW5ldC0+Y29yay5mbGFncyAmPSB+SVBDT1JLX09QVDsKLQlpZiAoaW5ldC0+Y29yay5vcHQpIHsKLQkJa2ZyZWUoaW5ldC0+Y29yay5vcHQpOwotCQlpbmV0LT5jb3JrLm9wdCA9IE5VTEw7Ci0JfQorCWtmcmVlKGluZXQtPmNvcmsub3B0KTsKKwlpbmV0LT5jb3JrLm9wdCA9IE5VTEw7CiAJaWYgKGluZXQtPmNvcmsucnQpIHsKIAkJaXBfcnRfcHV0KGluZXQtPmNvcmsucnQpOwogCQlpbmV0LT5jb3JrLnJ0ID0gTlVMTDsKQEAgLTEyODksMTAgKzEyODgsOCBAQAogCQlrZnJlZV9za2Ioc2tiKTsKIAogCWluZXQtPmNvcmsuZmxhZ3MgJj0gfklQQ09SS19PUFQ7Ci0JaWYgKGluZXQtPmNvcmsub3B0KSB7Ci0JCWtmcmVlKGluZXQtPmNvcmsub3B0KTsKLQkJaW5ldC0+Y29yay5vcHQgPSBOVUxMOwotCX0KKwlrZnJlZShpbmV0LT5jb3JrLm9wdCk7CisJaW5ldC0+Y29yay5vcHQgPSBOVUxMOwogCWlmIChpbmV0LT5jb3JrLnJ0KSB7CiAJCWlwX3J0X3B1dChpbmV0LT5jb3JrLnJ0KTsKIAkJaW5ldC0+Y29yay5ydCA9IE5VTEw7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jIGIvbmV0L2lwdjQvaXBfc29ja2dsdWUuYwppbmRleCAyZjBiNDdkLi40ZjJkODcyIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jCisrKyBiL25ldC9pcHY0L2lwX3NvY2tnbHVlLmMKQEAgLTIwMiw4ICsyMDIsNyBAQAogCQlpZiAocmEtPnNrID09IHNrKSB7CiAJCQlpZiAob24pIHsKIAkJCQl3cml0ZV91bmxvY2tfYmgoJmlwX3JhX2xvY2spOwotCQkJCWlmIChuZXdfcmEpCi0JCQkJCWtmcmVlKG5ld19yYSk7CisJCQkJa2ZyZWUobmV3X3JhKTsKIAkJCQlyZXR1cm4gLUVBRERSSU5VU0U7CiAJCQl9CiAJCQkqcmFwID0gcmEtPm5leHQ7CkBAIC00NDYsOCArNDQ1LDcgQEAKICNlbmRpZgogCQkJfQogCQkJb3B0ID0geGNoZygmaW5ldC0+b3B0LCBvcHQpOwotCQkJaWYgKG9wdCkKLQkJCQlrZnJlZShvcHQpOworCQkJa2ZyZWUob3B0KTsKIAkJCWJyZWFrOwogCQl9CiAJCWNhc2UgSVBfUEtUSU5GTzoKQEAgLTgyOCwxMCArODI2LDggQEAKIAogCQkJZXJyID0gaXBfbWNfbXNmaWx0ZXIoc2ssIG1zZiwgaWZpbmRleCk7CiBtY19tc2Zfb3V0OgotCQkJaWYgKG1zZikKLQkJCQlrZnJlZShtc2YpOwotCQkJaWYgKGdzZikKLQkJCQlrZnJlZShnc2YpOworCQkJa2ZyZWUobXNmKTsKKwkJCWtmcmVlKGdzZik7CiAJCQlicmVhazsKIAkJfQogCQljYXNlIElQX1JPVVRFUl9BTEVSVDoJCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcHZzL2lwX3ZzX2FwcC5jIGIvbmV0L2lwdjQvaXB2cy9pcF92c19hcHAuYwppbmRleCBmYzZmOTVhLi5kN2ViNjgwIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcHZzL2lwX3ZzX2FwcC5jCisrKyBiL25ldC9pcHY0L2lwdnMvaXBfdnNfYXBwLmMKQEAgLTExMCw4ICsxMTAsNyBAQAogCXJldHVybiAwOwogCiAgIG91dDoKLQlpZiAoaW5jLT50aW1lb3V0X3RhYmxlKQotCQlrZnJlZShpbmMtPnRpbWVvdXRfdGFibGUpOworCWtmcmVlKGluYy0+dGltZW91dF90YWJsZSk7CiAJa2ZyZWUoaW5jKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTM2LDggKzEzNSw3IEBACiAKIAlsaXN0X2RlbCgmaW5jLT5hX2xpc3QpOwogCi0JaWYgKGluYy0+dGltZW91dF90YWJsZSAhPSBOVUxMKQotCQlrZnJlZShpbmMtPnRpbWVvdXRfdGFibGUpOworCWtmcmVlKGluYy0+dGltZW91dF90YWJsZSk7CiAJa2ZyZWUoaW5jKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXB2cy9pcF92c19jb3JlLmMgYi9uZXQvaXB2NC9pcHZzL2lwX3ZzX2NvcmUuYwppbmRleCA5ODFjYzMyLi4xYTA4NDNjIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcHZzL2lwX3ZzX2NvcmUuYworKysgYi9uZXQvaXB2NC9pcHZzL2lwX3ZzX2NvcmUuYwpAQCAtMTAwOSwxMSArMTAwOSwxMCBAQAogCQlpZiAoc3lzY3RsX2lwX3ZzX2V4cGlyZV9ub2Rlc3RfY29ubikgewogCQkJLyogdHJ5IHRvIGV4cGlyZSB0aGUgY29ubmVjdGlvbiBpbW1lZGlhdGVseSAqLwogCQkJaXBfdnNfY29ubl9leHBpcmVfbm93KGNwKTsKLQkJfSBlbHNlIHsKLQkJCS8qIGRvbid0IHJlc3RhcnQgaXRzIHRpbWVyLCBhbmQgc2lsZW50bHkKLQkJCSAgIGRyb3AgdGhlIHBhY2tldC4gKi8KLQkJCV9faXBfdnNfY29ubl9wdXQoY3ApOwogCQl9CisJCS8qIGRvbid0IHJlc3RhcnQgaXRzIHRpbWVyLCBhbmQgc2lsZW50bHkKKwkJICAgZHJvcCB0aGUgcGFja2V0LiAqLworCQlfX2lwX3ZzX2Nvbm5fcHV0KGNwKTsKIAkJcmV0dXJuIE5GX0RST1A7CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9tdWx0aXBhdGhfd3JhbmRvbS5jIGIvbmV0L2lwdjQvbXVsdGlwYXRoX3dyYW5kb20uYwppbmRleCBiZDdkNzViLi5kMzRhOWZhIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9tdWx0aXBhdGhfd3JhbmRvbS5jCisrKyBiL25ldC9pcHY0L211bHRpcGF0aF93cmFuZG9tLmMKQEAgLTIwNywxNiArMjA3LDEyIEBACiAJCQlkZWNpc2lvbiA9IG1wYy0+cnQ7CiAKIAkJbGFzdF9wb3dlciA9IG1wYy0+cG93ZXI7Ci0JCWlmIChsYXN0X21wYykKLQkJCWtmcmVlKGxhc3RfbXBjKTsKLQorCQlrZnJlZShsYXN0X21wYyk7CiAJCWxhc3RfbXBjID0gbXBjOwogCX0KIAotCWlmIChsYXN0X21wYykgewotCQkvKiBjb25jdXJyZW50IF9fbXVsdGlwYXRoX2ZsdXNoIG1heSBsZWFkIHRvICFsYXN0X21wYyAqLwotCQlrZnJlZShsYXN0X21wYyk7Ci0JfQorCS8qIGNvbmN1cnJlbnQgX19tdWx0aXBhdGhfZmx1c2ggbWF5IGxlYWQgdG8gIWxhc3RfbXBjICovCisJa2ZyZWUobGFzdF9tcGMpOwogCiAJZGVjaXNpb24tPnUuZHN0Ll9fdXNlKys7CiAJKnJwID0gZGVjaXNpb247CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZyBiL25ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnCmluZGV4IDdkOTE3ZTQuLjlkM2M4YjUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnCkBAIC01LDYgKzUsMjAgQEAKIG1lbnUgIklQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbiIKIAlkZXBlbmRzIG9uIElORVQgJiYgTkVURklMVEVSCiAKK2NvbmZpZyBORl9DT05OVFJBQ0tfSVBWNAorCXRyaXN0YXRlICJJUHY0IHN1cHBvcnQgZm9yIG5ldyBjb25uZWN0aW9uIHRyYWNraW5nIChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMICYmIE5GX0NPTk5UUkFDSworCS0tLWhlbHAtLS0KKwkgIENvbm5lY3Rpb24gdHJhY2tpbmcga2VlcHMgYSByZWNvcmQgb2Ygd2hhdCBwYWNrZXRzIGhhdmUgcGFzc2VkCisJICB0aHJvdWdoIHlvdXIgbWFjaGluZSwgaW4gb3JkZXIgdG8gZmlndXJlIG91dCBob3cgdGhleSBhcmUgcmVsYXRlZAorCSAgaW50byBjb25uZWN0aW9ucy4KKworCSAgVGhpcyBpcyBJUHY0IHN1cHBvcnQgb24gTGF5ZXIgMyBpbmRlcGVuZGVudCBjb25uZWN0aW9uIHRyYWNraW5nLgorCSAgTGF5ZXIgMyBpbmRlcGVuZGVudCBjb25uZWN0aW9uIHRyYWNraW5nIGlzIGV4cGVyaW1lbnRhbCBzY2hlbWUKKwkgIHdoaWNoIGdlbmVyYWxpemUgaXBfY29ubnRyYWNrIHRvIHN1cHBvcnQgb3RoZXIgbGF5ZXIgMyBwcm90b2NvbHMuCisKKwkgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLgorCiAjIGNvbm5lY3Rpb24gdHJhY2tpbmcsIGhlbHBlcnMgYW5kIHByb3RvY29scwogY29uZmlnIElQX05GX0NPTk5UUkFDSwogCXRyaXN0YXRlICJDb25uZWN0aW9uIHRyYWNraW5nIChyZXF1aXJlZCBmb3IgbWFzcS9OQVQpIgpAQCAtMjA5LDggKzIyMyw4IEBACiAJdHJpc3RhdGUgIlBhY2tldCB0eXBlIG1hdGNoIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBJUF9ORl9JUFRBQkxFUwogCWhlbHAKLSAgICAgICAgIFBhY2tldCB0eXBlIG1hdGNoaW5nIGFsbG93cyB5b3UgdG8gbWF0Y2ggYSBwYWNrZXQgYnkKLSAgICAgICAgIGl0cyAiY2xhc3MiLCBlZy4gQlJPQURDQVNULCBNVUxUSUNBU1QsIC4uLgorCSAgUGFja2V0IHR5cGUgbWF0Y2hpbmcgYWxsb3dzIHlvdSB0byBtYXRjaCBhIHBhY2tldCBieQorCSAgaXRzICJjbGFzcyIsIGVnLiBCUk9BRENBU1QsIE1VTFRJQ0FTVCwgLi4uCiAKIAkgIFR5cGljYWwgdXNhZ2U6CiAJICBpcHRhYmxlcyAtQSBJTlBVVCAtbSBwa3R0eXBlIC0tcGt0LXR5cGUgYnJvYWRjYXN0IC1qIExPRwpAQCAtMzE3LDcgKzMzMSw4IEBACiAKIGNvbmZpZyBJUF9ORl9NQVRDSF9IRUxQRVIKIAl0cmlzdGF0ZSAiSGVscGVyIG1hdGNoIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBJUF9ORl9DT05OVFJBQ0sgJiYgSVBfTkZfSVBUQUJMRVMKKwlkZXBlbmRzIG9uIElQX05GX0lQVEFCTEVTCisJZGVwZW5kcyBvbiBJUF9ORl9DT05OVFJBQ0sgfHwgTkZfQ09OTlRSQUNLX0lQVjQKIAloZWxwCiAJICBIZWxwZXIgbWF0Y2hpbmcgYWxsb3dzIHlvdSB0byBtYXRjaCBwYWNrZXRzIGluIGR5bmFtaWMgY29ubmVjdGlvbnMKIAkgIHRyYWNrZWQgYnkgYSBjb25udHJhY2staGVscGVyLCBpZS4gaXBfY29ubnRyYWNrX2Z0cApAQCAtMzI2LDcgKzM0MSw4IEBACiAKIGNvbmZpZyBJUF9ORl9NQVRDSF9TVEFURQogCXRyaXN0YXRlICJDb25uZWN0aW9uIHN0YXRlIG1hdGNoIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBJUF9ORl9DT05OVFJBQ0sgJiYgSVBfTkZfSVBUQUJMRVMKKwlkZXBlbmRzIG9uIElQX05GX0lQVEFCTEVTCisJZGVwZW5kcyBvbiBJUF9ORl9DT05OVFJBQ0sgfHwgTkZfQ09OTlRSQUNLX0lQVjQKIAloZWxwCiAJICBDb25uZWN0aW9uIHN0YXRlIG1hdGNoaW5nIGFsbG93cyB5b3UgdG8gbWF0Y2ggcGFja2V0cyBiYXNlZCBvbiB0aGVpcgogCSAgcmVsYXRpb25zaGlwIHRvIGEgdHJhY2tlZCBjb25uZWN0aW9uIChpZS4gcHJldmlvdXMgcGFja2V0cykuICBUaGlzCkBAIC0zMzYsNyArMzUyLDggQEAKIAogY29uZmlnIElQX05GX01BVENIX0NPTk5UUkFDSwogCXRyaXN0YXRlICJDb25uZWN0aW9uIHRyYWNraW5nIG1hdGNoIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBJUF9ORl9DT05OVFJBQ0sgJiYgSVBfTkZfSVBUQUJMRVMKKwlkZXBlbmRzIG9uIElQX05GX0lQVEFCTEVTCisJZGVwZW5kcyBvbiBJUF9ORl9DT05OVFJBQ0sgfHwgTkZfQ09OTlRSQUNLX0lQVjQKIAloZWxwCiAJICBUaGlzIGlzIGEgZ2VuZXJhbCBjb25udHJhY2sgbWF0Y2ggbW9kdWxlLCBhIHN1cGVyc2V0IG9mIHRoZSBzdGF0ZSBtYXRjaC4KIApAQCAtNDIyLDcgKzQzOSw4IEBACiAKIGNvbmZpZyBJUF9ORl9NQVRDSF9DT05OTUFSSwogCXRyaXN0YXRlICAnQ29ubmVjdGlvbiBtYXJrIG1hdGNoIHN1cHBvcnQnCi0JZGVwZW5kcyBvbiBJUF9ORl9DT05OVFJBQ0tfTUFSSyAmJiBJUF9ORl9JUFRBQkxFUworCWRlcGVuZHMgb24gSVBfTkZfSVBUQUJMRVMKKwlkZXBlbmRzIG9uIElQX05GX0NPTk5UUkFDS19NQVJLIHx8IChORl9DT05OVFJBQ0tfTUFSSyAmJiBORl9DT05OVFJBQ0tfSVBWNCkKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBhZGRzIGEgYGNvbm5tYXJrJyBtYXRjaCwgd2hpY2ggYWxsb3dzIHlvdSB0byBtYXRjaCB0aGUKIAkgIGNvbm5lY3Rpb24gbWFyayB2YWx1ZSBwcmV2aW91c2x5IHNldCBmb3IgdGhlIHNlc3Npb24gYnkgYENPTk5NQVJLJy4gCkBAIC00MzMsNyArNDUxLDggQEAKIAogY29uZmlnIElQX05GX01BVENIX0NPTk5CWVRFUwogCXRyaXN0YXRlICAnQ29ubmVjdGlvbiBieXRlL3BhY2tldCBjb3VudGVyIG1hdGNoIHN1cHBvcnQnCi0JZGVwZW5kcyBvbiBJUF9ORl9DVF9BQ0NUICYmIElQX05GX0lQVEFCTEVTCisJZGVwZW5kcyBvbiBJUF9ORl9JUFRBQkxFUworCWRlcGVuZHMgb24gSVBfTkZfQ1RfQUNDVCB8fCAoTkZfQ1RfQUNDVCAmJiBORl9DT05OVFJBQ0tfSVBWNCkKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBhZGRzIGEgYGNvbm5ieXRlcycgbWF0Y2gsIHdoaWNoIGFsbG93cyB5b3UgdG8gbWF0Y2ggdGhlCiAJICBudW1iZXIgb2YgYnl0ZXMgYW5kL29yIHBhY2tldHMgZm9yIGVhY2ggZGlyZWN0aW9uIHdpdGhpbiBhIGNvbm5lY3Rpb24uCkBAIC03NDcsNyArNzY2LDggQEAKIAogY29uZmlnIElQX05GX1RBUkdFVF9DT05OTUFSSwogCXRyaXN0YXRlICAnQ09OTk1BUksgdGFyZ2V0IHN1cHBvcnQnCi0JZGVwZW5kcyBvbiBJUF9ORl9DT05OVFJBQ0tfTUFSSyAmJiBJUF9ORl9NQU5HTEUKKwlkZXBlbmRzIG9uIElQX05GX01BTkdMRQorCWRlcGVuZHMgb24gSVBfTkZfQ09OTlRSQUNLX01BUksgfHwgKE5GX0NPTk5UUkFDS19NQVJLICYmIE5GX0NPTk5UUkFDS19JUFY0KQogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGFkZHMgYSBgQ09OTk1BUksnIHRhcmdldCwgd2hpY2ggYWxsb3dzIG9uZSB0byBtYW5pcHVsYXRlCiAJICB0aGUgY29ubmVjdGlvbiBtYXJrIHZhbHVlLiAgU2ltaWxhciB0byB0aGUgTUFSSyB0YXJnZXQsIGJ1dApAQCAtNzU5LDcgKzc3OSw4IEBACiAKIGNvbmZpZyBJUF9ORl9UQVJHRVRfQ0xVU1RFUklQCiAJdHJpc3RhdGUgIkNMVVNURVJJUCB0YXJnZXQgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIElQX05GX0NPTk5UUkFDS19NQVJLICYmIElQX05GX0lQVEFCTEVTICYmIEVYUEVSSU1FTlRBTAorCWRlcGVuZHMgb24gSVBfTkZfSVBUQUJMRVMgJiYgRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBJUF9ORl9DT05OVFJBQ0tfTUFSSyB8fCAoTkZfQ09OTlRSQUNLX01BUksgJiYgTkZfQ09OTlRSQUNLX0lQVjQpCiAJaGVscAogCSAgVGhlIENMVVNURVJJUCB0YXJnZXQgYWxsb3dzIHlvdSB0byBidWlsZCBsb2FkLWJhbGFuY2luZyBjbHVzdGVycyBvZgogCSAgbmV0d29yayBzZXJ2ZXJzIHdpdGhvdXQgaGF2aW5nIGEgZGVkaWNhdGVkIGxvYWQtYmFsYW5jaW5nCkBAIC03ODIsNyArODAzLDcgQEAKIGNvbmZpZyBJUF9ORl9UQVJHRVRfTk9UUkFDSwogCXRyaXN0YXRlICAnTk9UUkFDSyB0YXJnZXQgc3VwcG9ydCcKIAlkZXBlbmRzIG9uIElQX05GX1JBVwotCWRlcGVuZHMgb24gSVBfTkZfQ09OTlRSQUNLCisJZGVwZW5kcyBvbiBJUF9ORl9DT05OVFJBQ0sgfHwgTkZfQ09OTlRSQUNLX0lQVjQKIAloZWxwCiAJICBUaGUgTk9UUkFDSyB0YXJnZXQgYWxsb3dzIGEgc2VsZWN0IHJ1bGUgdG8gc3BlY2lmeQogCSAgd2hpY2ggcGFja2V0cyAqbm90KiB0byBlbnRlciB0aGUgY29ubnRyYWNrL05BVApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlCmluZGV4IGRhYjRiNTguLjA1OGM0OGUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZQorKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGUKQEAgLTEwMywzICsxMDMsOSBAQAogb2JqLSQoQ09ORklHX0lQX05GX0FSUEZJTFRFUikgKz0gYXJwdGFibGVfZmlsdGVyLm8KIAogb2JqLSQoQ09ORklHX0lQX05GX1FVRVVFKSArPSBpcF9xdWV1ZS5vCisKKyMgb2JqZWN0cyBmb3IgbDMgaW5kZXBlbmRlbnQgY29ubnRyYWNrCituZl9jb25udHJhY2tfaXB2NC1vYmpzICA6PSAgbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NC5vIG5mX2Nvbm50cmFja19wcm90b19pY21wLm8KKworIyBsMyBpbmRlcGVuZGVudCBjb25udHJhY2sKK29iai0kKENPTkZJR19ORl9DT05OVFJBQ0tfSVBWNCkgKz0gbmZfY29ubnRyYWNrX2lwdjQubwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19uZXRsaW5rLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX25ldGxpbmsuYwppbmRleCA4MmE2NTA0Li5kMmE0ZmVjIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX25ldGxpbmsuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX25ldGxpbmsuYwpAQCAtMjgsMTEgKzI4LDggQEAKICNpbmNsdWRlIDxsaW51eC9uZXRsaW5rLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgotI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgogCiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyLmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQuaD4KLSNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcF90YWJsZXMuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2suaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfY29yZS5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19oZWxwZXIuaD4KQEAgLTU4LDE0ICs1NSwxNyBAQAogCQkJICAgIGNvbnN0IHN0cnVjdCBpcF9jb25udHJhY2tfdHVwbGUgKnR1cGxlKQogewogCXN0cnVjdCBpcF9jb25udHJhY2tfcHJvdG9jb2wgKnByb3RvOworCWludCByZXQgPSAwOwogCiAJTkZBX1BVVChza2IsIENUQV9QUk9UT19OVU0sIHNpemVvZih1X2ludDhfdCksICZ0dXBsZS0+ZHN0LnByb3RvbnVtKTsKIAogCXByb3RvID0gaXBfY29ubnRyYWNrX3Byb3RvX2ZpbmRfZ2V0KHR1cGxlLT5kc3QucHJvdG9udW0pOwotCWlmIChwcm90byAmJiBwcm90by0+dHVwbGVfdG9fbmZhdHRyKQotCQlyZXR1cm4gcHJvdG8tPnR1cGxlX3RvX25mYXR0cihza2IsIHR1cGxlKTsKKwlpZiAobGlrZWx5KHByb3RvICYmIHByb3RvLT50dXBsZV90b19uZmF0dHIpKSB7CisJCXJldCA9IHByb3RvLT50dXBsZV90b19uZmF0dHIoc2tiLCB0dXBsZSk7CisJCWlwX2Nvbm50cmFja19wcm90b19wdXQocHJvdG8pOworCX0KIAotCXJldHVybiAwOworCXJldHVybiByZXQ7CiAKIG5mYXR0cl9mYWlsdXJlOgogCXJldHVybiAtMTsKQEAgLTE3NSw3ICsxNzUsNyBAQAogewogCWVudW0gY3RhdHRyX3R5cGUgdHlwZSA9IGRpciA/IENUQV9DT1VOVEVSU19SRVBMWTogQ1RBX0NPVU5URVJTX09SSUc7CiAJc3RydWN0IG5mYXR0ciAqbmVzdF9jb3VudCA9IE5GQV9ORVNUKHNrYiwgdHlwZSk7Ci0JdV9pbnQ2NF90IHRtcDsKKwl1X2ludDMyX3QgdG1wOwogCiAJdG1wID0gaHRvbmwoY3QtPmNvdW50ZXJzW2Rpcl0ucGFja2V0cyk7CiAJTkZBX1BVVChza2IsIENUQV9DT1VOVEVSUzMyX1BBQ0tFVFMsIHNpemVvZih1X2ludDMyX3QpLCAmdG1wKTsKQEAgLTQ3OSw5ICs0NzksNyBAQAogCiAJREVCVUdQKCJlbnRlcmVkICVzXG4iLCBfX0ZVTkNUSU9OX18pOwogCi0JCi0JaWYgKG5mYXR0cl9wYXJzZV9uZXN0ZWQodGIsIENUQV9JUF9NQVgsIGF0dHIpIDwgMCkKLQkJZ290byBuZmF0dHJfZmFpbHVyZTsKKwluZmF0dHJfcGFyc2VfbmVzdGVkKHRiLCBDVEFfSVBfTUFYLCBhdHRyKTsKIAogCWlmIChuZmF0dHJfYmFkX3NpemUodGIsIENUQV9JUF9NQVgsIGN0YV9taW5faXApKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTQ5Nyw5ICs0OTUsNiBAQAogCURFQlVHUCgibGVhdmluZ1xuIik7CiAKIAlyZXR1cm4gMDsKLQotbmZhdHRyX2ZhaWx1cmU6Ci0JcmV0dXJuIC0xOwogfQogCiBzdGF0aWMgY29uc3QgaW50IGN0YV9taW5fcHJvdG9bQ1RBX1BST1RPX01BWF0gPSB7CkBAIC01MjEsOCArNTE2LDcgQEAKIAogCURFQlVHUCgiZW50ZXJlZCAlc1xuIiwgX19GVU5DVElPTl9fKTsKIAotCWlmIChuZmF0dHJfcGFyc2VfbmVzdGVkKHRiLCBDVEFfUFJPVE9fTUFYLCBhdHRyKSA8IDApCi0JCWdvdG8gbmZhdHRyX2ZhaWx1cmU7CisJbmZhdHRyX3BhcnNlX25lc3RlZCh0YiwgQ1RBX1BST1RPX01BWCwgYXR0cik7CiAKIAlpZiAobmZhdHRyX2JhZF9zaXplKHRiLCBDVEFfUFJPVE9fTUFYLCBjdGFfbWluX3Byb3RvKSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC01MzksOSArNTMzLDYgQEAKIAl9CiAJCiAJcmV0dXJuIHJldDsKLQotbmZhdHRyX2ZhaWx1cmU6Ci0JcmV0dXJuIC0xOwogfQogCiBzdGF0aWMgaW5saW5lIGludApAQCAtNTU1LDggKzU0Niw3IEBACiAKIAltZW1zZXQodHVwbGUsIDAsIHNpemVvZigqdHVwbGUpKTsKIAotCWlmIChuZmF0dHJfcGFyc2VfbmVzdGVkKHRiLCBDVEFfVFVQTEVfTUFYLCBjZGFbdHlwZS0xXSkgPCAwKQotCQlnb3RvIG5mYXR0cl9mYWlsdXJlOworCW5mYXR0cl9wYXJzZV9uZXN0ZWQodGIsIENUQV9UVVBMRV9NQVgsIGNkYVt0eXBlLTFdKTsKIAogCWlmICghdGJbQ1RBX1RVUExFX0lQLTFdKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTU4Myw5ICs1NzMsNiBAQAogCURFQlVHUCgibGVhdmluZ1xuIik7CiAKIAlyZXR1cm4gMDsKLQotbmZhdHRyX2ZhaWx1cmU6Ci0JcmV0dXJuIC0xOwogfQogCiAjaWZkZWYgQ09ORklHX0lQX05GX05BVF9ORUVERUQKQEAgLTYwMywxMSArNTkwLDEwIEBACiAKIAlERUJVR1AoImVudGVyZWQgJXNcbiIsIF9fRlVOQ1RJT05fXyk7CiAKLQlpZiAobmZhdHRyX3BhcnNlX25lc3RlZCh0YiwgQ1RBX1BST1RPTkFUX01BWCwgYXR0cikgPCAwKQotCQlnb3RvIG5mYXR0cl9mYWlsdXJlOworCW5mYXR0cl9wYXJzZV9uZXN0ZWQodGIsIENUQV9QUk9UT05BVF9NQVgsIGF0dHIpOwogCiAJaWYgKG5mYXR0cl9iYWRfc2l6ZSh0YiwgQ1RBX1BST1RPTkFUX01BWCwgY3RhX21pbl9wcm90b25hdCkpCi0JCWdvdG8gbmZhdHRyX2ZhaWx1cmU7CisJCXJldHVybiAtRUlOVkFMOwogCiAJbnB0ID0gaXBfbmF0X3Byb3RvX2ZpbmRfZ2V0KGN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZS5kc3QucHJvdG9udW0pOwogCWlmICghbnB0KQpAQCAtNjI2LDkgKzYxMiw2IEBACiAKIAlERUJVR1AoImxlYXZpbmdcbiIpOwogCXJldHVybiAwOwotCi1uZmF0dHJfZmFpbHVyZToKLQlyZXR1cm4gLTE7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50CkBAIC02NDIsOCArNjI1LDcgQEAKIAogCW1lbXNldChyYW5nZSwgMCwgc2l6ZW9mKCpyYW5nZSkpOwogCQotCWlmIChuZmF0dHJfcGFyc2VfbmVzdGVkKHRiLCBDVEFfTkFUX01BWCwgY2RhW0NUQV9OQVQtMV0pIDwgMCkKLQkJZ290byBuZmF0dHJfZmFpbHVyZTsKKwluZmF0dHJfcGFyc2VfbmVzdGVkKHRiLCBDVEFfTkFUX01BWCwgY2RhW0NUQV9OQVQtMV0pOwogCiAJaWYgKHRiW0NUQV9OQVRfTUlOSVAtMV0pCiAJCXJhbmdlLT5taW5faXAgPSAqKHVfaW50MzJfdCAqKU5GQV9EQVRBKHRiW0NUQV9OQVRfTUlOSVAtMV0pOwpAQCAtNjY1LDkgKzY0Nyw2IEBACiAKIAlERUJVR1AoImxlYXZpbmdcbiIpOwogCXJldHVybiAwOwotCi1uZmF0dHJfZmFpbHVyZToKLQlyZXR1cm4gLTE7CiB9CiAjZW5kaWYKIApAQCAtNjc4LDggKzY1Nyw3IEBACiAKIAlERUJVR1AoImVudGVyZWQgJXNcbiIsIF9fRlVOQ1RJT05fXyk7CiAKLQlpZiAobmZhdHRyX3BhcnNlX25lc3RlZCh0YiwgQ1RBX0hFTFBfTUFYLCBhdHRyKSA8IDApCi0JCWdvdG8gbmZhdHRyX2ZhaWx1cmU7CisJbmZhdHRyX3BhcnNlX25lc3RlZCh0YiwgQ1RBX0hFTFBfTUFYLCBhdHRyKTsKIAogCWlmICghdGJbQ1RBX0hFTFBfTkFNRS0xXSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC02ODcsOSArNjY1LDYgQEAKIAkqaGVscGVyX25hbWUgPSBORkFfREFUQSh0YltDVEFfSEVMUF9OQU1FLTFdKTsKIAogCXJldHVybiAwOwotCi1uZmF0dHJfZmFpbHVyZToKLQlyZXR1cm4gLTE7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTgwNCw3ICs3NzksNyBAQAogCWN0ID0gdHVwbGVoYXNoX3RvX2N0cmFjayhoKTsKIAogCWVyciA9IC1FTk9NRU07Ci0Jc2tiMiA9IGFsbG9jX3NrYihOTE1TR19HT09EU0laRSwgR0ZQX0FUT01JQyk7CisJc2tiMiA9IGFsbG9jX3NrYihOTE1TR19HT09EU0laRSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFza2IyKSB7CiAJCWlwX2Nvbm50cmFja19wdXQoY3QpOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTgyNyw3ICs4MDIsNyBAQAogZnJlZToKIAlrZnJlZV9za2Ioc2tiMik7CiBvdXQ6Ci0JcmV0dXJuIC0xOworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50CkBAIC05NTcsOCArOTMyLDcgQEAKIAl1X2ludDE2X3QgbnB0ID0gY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlLmRzdC5wcm90b251bTsKIAlpbnQgZXJyID0gMDsKIAotCWlmIChuZmF0dHJfcGFyc2VfbmVzdGVkKHRiLCBDVEFfUFJPVE9JTkZPX01BWCwgYXR0cikgPCAwKQotCQlnb3RvIG5mYXR0cl9mYWlsdXJlOworCW5mYXR0cl9wYXJzZV9uZXN0ZWQodGIsIENUQV9QUk9UT0lORk9fTUFYLCBhdHRyKTsKIAogCXByb3RvID0gaXBfY29ubnRyYWNrX3Byb3RvX2ZpbmRfZ2V0KG5wdCk7CiAJaWYgKCFwcm90bykKQEAgLTk2OSw5ICs5NDMsNiBAQAogCWlwX2Nvbm50cmFja19wcm90b19wdXQocHJvdG8pOyAKIAogCXJldHVybiBlcnI7Ci0KLW5mYXR0cl9mYWlsdXJlOgotCXJldHVybiAtRU5PTUVNOwogfQogCiBzdGF0aWMgaW50CkBAIC0xMDA1LDYgKzk3NiwxMSBAQAogCQkJcmV0dXJuIGVycjsKIAl9CiAKKyNpZiBkZWZpbmVkKENPTkZJR19JUF9ORl9DT05OVFJBQ0tfTUFSSykKKwlpZiAoY2RhW0NUQV9NQVJLLTFdKQorCQljdC0+bWFyayA9IG50b2hsKCoodV9pbnQzMl90ICopTkZBX0RBVEEoY2RhW0NUQV9NQVJLLTFdKSk7CisjZW5kaWYKKwogCURFQlVHUCgiYWxsIGRvbmVcbiIpOwogCXJldHVybiAwOwogfQpAQCAtMTA0OCw2ICsxMDI0LDExIEBACiAJaWYgKGN0LT5oZWxwZXIpCiAJCWlwX2Nvbm50cmFja19oZWxwZXJfcHV0KGN0LT5oZWxwZXIpOwogCisjaWYgZGVmaW5lZChDT05GSUdfSVBfTkZfQ09OTlRSQUNLX01BUkspCisJaWYgKGNkYVtDVEFfTUFSSy0xXSkKKwkJY3QtPm1hcmsgPSBudG9obCgqKHVfaW50MzJfdCAqKU5GQV9EQVRBKGNkYVtDVEFfTUFSSy0xXSkpOworI2VuZGlmCisKIAlERUJVR1AoImNvbm50cmFjayB3aXRoIGlkICV1IGluc2VydGVkXG4iLCBjdC0+aWQpOwogCXJldHVybiAwOwogCkBAIC0xMzEyLDYgKzEyOTMsMTQgQEAKIAlpZiAoIWV4cCkKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKKwlpZiAoY2RhW0NUQV9FWFBFQ1RfSUQtMV0pIHsKKwkJdV9pbnQzMl90IGlkID0gKih1X2ludDMyX3QgKilORkFfREFUQShjZGFbQ1RBX0VYUEVDVF9JRC0xXSk7CisJCWlmIChleHAtPmlkICE9IG50b2hsKGlkKSkgeworCQkJaXBfY29ubnRyYWNrX2V4cGVjdF9wdXQoZXhwKTsKKwkJCXJldHVybiAtRU5PRU5UOworCQl9CisJfQkKKwogCWVyciA9IC1FTk9NRU07CiAJc2tiMiA9IGFsbG9jX3NrYihOTE1TR19HT09EU0laRSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFza2IyKQpAQCAtMTM4Nyw3ICsxMzc2LDcgQEAKIAkJCQlpcF9jb25udHJhY2tfZXhwZWN0X3B1dChleHApOwogCQkJfQogCQl9Ci0JCXdyaXRlX3VubG9jaygmaXBfY29ubnRyYWNrX2xvY2spOworCQl3cml0ZV91bmxvY2tfYmgoJmlwX2Nvbm50cmFja19sb2NrKTsKIAl9IGVsc2UgewogCQkvKiBUaGlzIGJhc2ljYWxseSBtZWFucyB3ZSBoYXZlIHRvIGZsdXNoIGV2ZXJ5dGhpbmcqLwogCQl3cml0ZV9sb2NrX2JoKCZpcF9jb25udHJhY2tfbG9jayk7CkBAIC0xNTU0LDYgKzE1NDMsOCBAQAogCS5jYgkJCQk9IGN0bmxfZXhwX2NiLAogfTsKIAorTU9EVUxFX0FMSUFTX05GTkxfU1VCU1lTKE5GTkxfU1VCU1lTX0NUTkVUTElOSyk7CisKIHN0YXRpYyBpbnQgX19pbml0IGN0bmV0bGlua19pbml0KHZvaWQpCiB7CiAJaW50IHJldDsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfcHJvdG9faWNtcC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19wcm90b19pY21wLmMKaW5kZXggOThmMDAxNS4uZTRkNmIyNiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19wcm90b19pY21wLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19wcm90b19pY21wLmMKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbi5oPgogI2luY2x1ZGUgPGxpbnV4L2ljbXAuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPG5ldC9pcC5oPgogI2luY2x1ZGUgPG5ldC9jaGVja3N1bS5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci5oPgpAQCAtMTUxLDEzICsxNTIsMTMgQEAKIAkvKiBOb3QgZW5vdWdoIGhlYWRlcj8gKi8KIAlpbnNpZGUgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBza2ItPm5oLmlwaC0+aWhsKjQsIHNpemVvZihfaW4pLCAmX2luKTsKIAlpZiAoaW5zaWRlID09IE5VTEwpCi0JCXJldHVybiBORl9BQ0NFUFQ7CisJCXJldHVybiAtTkZfQUNDRVBUOwogCiAJLyogSWdub3JlIElDTVAncyBjb250YWluaW5nIGZyYWdtZW50cyAoc2hvdWxkbid0IGhhcHBlbikgKi8KIAlpZiAoaW5zaWRlLT5pcC5mcmFnX29mZiAmIGh0b25zKElQX09GRlNFVCkpIHsKIAkJREVCVUdQKCJpY21wX2Vycm9yX3RyYWNrOiBmcmFnbWVudCBvZiBwcm90byAldVxuIiwKIAkJICAgICAgIGluc2lkZS0+aXAucHJvdG9jb2wpOwotCQlyZXR1cm4gTkZfQUNDRVBUOworCQlyZXR1cm4gLU5GX0FDQ0VQVDsKIAl9CiAKIAlpbm5lcnByb3RvID0gaXBfY29ubnRyYWNrX3Byb3RvX2ZpbmRfZ2V0KGluc2lkZS0+aXAucHJvdG9jb2wpOwpAQCAtMTY2LDcgKzE2Nyw3IEBACiAJaWYgKCFpcF9jdF9nZXRfdHVwbGUoJmluc2lkZS0+aXAsIHNrYiwgZGF0YW9mZiwgJm9yaWd0dXBsZSwgaW5uZXJwcm90bykpIHsKIAkJREVCVUdQKCJpY21wX2Vycm9yOiAhIGdldF90dXBsZSBwPSV1IiwgaW5zaWRlLT5pcC5wcm90b2NvbCk7CiAJCWlwX2Nvbm50cmFja19wcm90b19wdXQoaW5uZXJwcm90byk7Ci0JCXJldHVybiBORl9BQ0NFUFQ7CisJCXJldHVybiAtTkZfQUNDRVBUOwogCX0KIAogCS8qIE9yZGluYXJpbHksIHdlJ2QgZXhwZWN0IHRoZSBpbnZlcnRlZCB0dXBsZXByb3RvLCBidXQgaXQncwpAQCAtMTc0LDcgKzE3NSw3IEBACiAJaWYgKCFpcF9jdF9pbnZlcnRfdHVwbGUoJmlubmVydHVwbGUsICZvcmlndHVwbGUsIGlubmVycHJvdG8pKSB7CiAJCURFQlVHUCgiaWNtcF9lcnJvcl90cmFjazogQ2FuJ3QgaW52ZXJ0IHR1cGxlXG4iKTsKIAkJaXBfY29ubnRyYWNrX3Byb3RvX3B1dChpbm5lcnByb3RvKTsKLQkJcmV0dXJuIE5GX0FDQ0VQVDsKKwkJcmV0dXJuIC1ORl9BQ0NFUFQ7CiAJfQogCWlwX2Nvbm50cmFja19wcm90b19wdXQoaW5uZXJwcm90byk7CiAKQEAgLTE5MCw3ICsxOTEsNyBAQAogCiAJCWlmICghaCkgewogCQkJREVCVUdQKCJpY21wX2Vycm9yX3RyYWNrOiBubyBtYXRjaFxuIik7Ci0JCQlyZXR1cm4gTkZfQUNDRVBUOworCQkJcmV0dXJuIC1ORl9BQ0NFUFQ7CiAJCX0KIAkJLyogUmV2ZXJzZSBkaXJlY3Rpb24gZnJvbSB0aGF0IGZvdW5kICovCiAJCWlmIChESVJFQ1RJT04oaCkgIT0gSVBfQ1RfRElSX1JFUExZKQpAQCAtMjMwLDE5ICsyMzEsMTUgQEAKIAljYXNlIENIRUNLU1VNX0hXOgogCQlpZiAoISh1MTYpY3N1bV9mb2xkKHNrYi0+Y3N1bSkpIAogCQkJYnJlYWs7Ci0JCWlmIChMT0dfSU5WQUxJRChJUFBST1RPX0lDTVApKQotCQkJbmZfbG9nX3BhY2tldChQRl9JTkVULCAwLCBza2IsIE5VTEwsIE5VTEwsIE5VTEwsCi0JCQkJICAgICAgImlwX2N0X2ljbXA6IGJhZCBIVyBJQ01QIGNoZWNrc3VtICIpOwotCQlyZXR1cm4gLU5GX0FDQ0VQVDsKKwkJLyogZmFsbCB0aHJvdWdoICovCiAJY2FzZSBDSEVDS1NVTV9OT05FOgotCQlpZiAoKHUxNiljc3VtX2ZvbGQoc2tiX2NoZWNrc3VtKHNrYiwgMCwgc2tiLT5sZW4sIDApKSkgeworCQlza2ItPmNzdW0gPSAwOworCQlpZiAoX19za2JfY2hlY2tzdW1fY29tcGxldGUoc2tiKSkgewogCQkJaWYgKExPR19JTlZBTElEKElQUFJPVE9fSUNNUCkpCiAJCQkJbmZfbG9nX3BhY2tldChQRl9JTkVULCAwLCBza2IsIE5VTEwsIE5VTEwsIE5VTEwsCiAJCQkJCSAgICAgICJpcF9jdF9pY21wOiBiYWQgSUNNUCBjaGVja3N1bSAiKTsKIAkJCXJldHVybiAtTkZfQUNDRVBUOwogCQl9Ci0JZGVmYXVsdDoKLQkJYnJlYWs7CiAJfQogCiBjaGVja3N1bV9za2lwcGVkOgpAQCAtMjk2LDcgKzI5Myw4IEBACiAJCQkJc3RydWN0IGlwX2Nvbm50cmFja190dXBsZSAqdHVwbGUpCiB7CiAJaWYgKCF0YltDVEFfUFJPVE9fSUNNUF9UWVBFLTFdCi0JICAgIHx8ICF0YltDVEFfUFJPVE9fSUNNUF9DT0RFLTFdKQorCSAgICB8fCAhdGJbQ1RBX1BST1RPX0lDTVBfQ09ERS0xXQorCSAgICB8fCAhdGJbQ1RBX1BST1RPX0lDTVBfSUQtMV0pCiAJCXJldHVybiAtMTsKIAogCXR1cGxlLT5kc3QudS5pY21wLnR5cGUgPSAKQEAgLTMwNCw3ICszMDIsNyBAQAogCXR1cGxlLT5kc3QudS5pY21wLmNvZGUgPQogCQkJKih1X2ludDhfdCAqKU5GQV9EQVRBKHRiW0NUQV9QUk9UT19JQ01QX0NPREUtMV0pOwogCXR1cGxlLT5zcmMudS5pY21wLmlkID0KLQkJCSoodV9pbnQ4X3QgKilORkFfREFUQSh0YltDVEFfUFJPVE9fSUNNUF9JRC0xXSk7CisJCQkqKHVfaW50MTZfdCAqKU5GQV9EQVRBKHRiW0NUQV9QUk9UT19JQ01QX0lELTFdKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19wcm90b190Y3AuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfcHJvdG9fdGNwLmMKaW5kZXggZDY3MDFjYS4uNDY4YzYwMCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19wcm90b190Y3AuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX3RjcC5jCkBAIC0zNjIsOCArMzYyLDEyIEBACiAJc3RydWN0IG5mYXR0ciAqYXR0ciA9IGNkYVtDVEFfUFJPVE9JTkZPX1RDUC0xXTsKIAlzdHJ1Y3QgbmZhdHRyICp0YltDVEFfUFJPVE9JTkZPX1RDUF9NQVhdOwogCi0gICAgICAgIGlmIChuZmF0dHJfcGFyc2VfbmVzdGVkKHRiLCBDVEFfUFJPVE9JTkZPX1RDUF9NQVgsIGF0dHIpIDwgMCkKLSAgICAgICAgICAgICAgICBnb3RvIG5mYXR0cl9mYWlsdXJlOworCS8qIHVwZGF0ZXMgY291bGQgbm90IGNvbnRhaW4gYW55dGhpbmcgYWJvdXQgdGhlIHByaXZhdGUKKwkgKiBwcm90b2NvbCBpbmZvLCBpbiB0aGF0IGNhc2Ugc2tpcCB0aGUgcGFyc2luZyAqLworCWlmICghYXR0cikKKwkJcmV0dXJuIDA7CisKKyAgICAgICAgbmZhdHRyX3BhcnNlX25lc3RlZCh0YiwgQ1RBX1BST1RPSU5GT19UQ1BfTUFYLCBhdHRyKTsKIAogCWlmICghdGJbQ1RBX1BST1RPSU5GT19UQ1BfU1RBVEUtMV0pCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMzc0LDkgKzM3OCw2IEBACiAJd3JpdGVfdW5sb2NrX2JoKCZ0Y3BfbG9jayk7CiAKIAlyZXR1cm4gMDsKLQotbmZhdHRyX2ZhaWx1cmU6Ci0JcmV0dXJuIC0xOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfaGVscGVyX3BwdHAuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfaGVscGVyX3BwdHAuYwppbmRleCBlZTZhYjc0Li5lNTQ2MjAzIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X2hlbHBlcl9wcHRwLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9oZWxwZXJfcHB0cC5jCkBAIC03Myw2ICs3Myw3IEBACiAJc3RydWN0IGlwX2Nvbm50cmFja190dXBsZSB0OwogCXN0cnVjdCBpcF9jdF9wcHRwX21hc3RlciAqY3RfcHB0cF9pbmZvOwogCXN0cnVjdCBpcF9uYXRfcHB0cCAqbmF0X3BwdHBfaW5mbzsKKwlzdHJ1Y3QgaXBfbmF0X3JhbmdlIHJhbmdlOwogCiAJY3RfcHB0cF9pbmZvID0gJm1hc3Rlci0+aGVscC5jdF9wcHRwX2luZm87CiAJbmF0X3BwdHBfaW5mbyA9ICZtYXN0ZXItPm5hdC5oZWxwLm5hdF9wcHRwX2luZm87CkBAIC0xMTAsNyArMTExLDMwIEBACiAJCURFQlVHUCgibm90IGZvdW5kIVxuIik7CiAJfQogCi0JaXBfbmF0X2ZvbGxvd19tYXN0ZXIoY3QsIGV4cCk7CisJLyogVGhpcyBtdXN0IGJlIGEgZnJlc2ggb25lLiAqLworCUJVR19PTihjdC0+c3RhdHVzICYgSVBTX05BVF9ET05FX01BU0spOworCisJLyogQ2hhbmdlIHNyYyB0byB3aGVyZSBtYXN0ZXIgc2VuZHMgdG8gKi8KKwlyYW5nZS5mbGFncyA9IElQX05BVF9SQU5HRV9NQVBfSVBTOworCXJhbmdlLm1pbl9pcCA9IHJhbmdlLm1heF9pcAorCQk9IGN0LT5tYXN0ZXItPnR1cGxlaGFzaFshZXhwLT5kaXJdLnR1cGxlLmRzdC5pcDsKKwlpZiAoZXhwLT5kaXIgPT0gSVBfQ1RfRElSX09SSUdJTkFMKSB7CisJCXJhbmdlLmZsYWdzIHw9IElQX05BVF9SQU5HRV9QUk9UT19TUEVDSUZJRUQ7CisJCXJhbmdlLm1pbiA9IHJhbmdlLm1heCA9IGV4cC0+c2F2ZWRfcHJvdG87CisJfQorCS8qIGhvb2sgZG9lc24ndCBtYXR0ZXIsIGJ1dCBpdCBoYXMgdG8gZG8gc291cmNlIG1hbmlwICovCisJaXBfbmF0X3NldHVwX2luZm8oY3QsICZyYW5nZSwgTkZfSVBfUE9TVF9ST1VUSU5HKTsKKworCS8qIEZvciBEU1QgbWFuaXAsIG1hcCBwb3J0IGhlcmUgdG8gd2hlcmUgaXQncyBleHBlY3RlZC4gKi8KKwlyYW5nZS5mbGFncyA9IElQX05BVF9SQU5HRV9NQVBfSVBTOworCXJhbmdlLm1pbl9pcCA9IHJhbmdlLm1heF9pcAorCQk9IGN0LT5tYXN0ZXItPnR1cGxlaGFzaFshZXhwLT5kaXJdLnR1cGxlLnNyYy5pcDsKKwlpZiAoZXhwLT5kaXIgPT0gSVBfQ1RfRElSX1JFUExZKSB7CisJCXJhbmdlLmZsYWdzIHw9IElQX05BVF9SQU5HRV9QUk9UT19TUEVDSUZJRUQ7CisJCXJhbmdlLm1pbiA9IHJhbmdlLm1heCA9IGV4cC0+c2F2ZWRfcHJvdG87CisJfQorCS8qIGhvb2sgZG9lc24ndCBtYXR0ZXIsIGJ1dCBpdCBoYXMgdG8gZG8gZGVzdGluYXRpb24gbWFuaXAgKi8KKwlpcF9uYXRfc2V0dXBfaW5mbyhjdCwgJnJhbmdlLCBORl9JUF9QUkVfUk9VVElORyk7CiB9CiAKIC8qIG91dGJvdW5kIHBhY2tldHMgPT0gZnJvbSBQTlMgdG8gUEFDICovCkBAIC0yMTMsNyArMjM3LDcgQEAKIAogCS8qIGFsdGVyIGV4cGVjdGF0aW9uIGZvciBQTlMtPlBBQyBkaXJlY3Rpb24gKi8KIAlpbnZlcnRfdHVwbGVwcigmaW52X3QsICZleHBlY3Rfb3JpZy0+dHVwbGUpOwotCWV4cGVjdF9vcmlnLT5zYXZlZF9wcm90by5ncmUua2V5ID0gaHRvbnMobmF0X3BwdHBfaW5mby0+cGFjX2NhbGxfaWQpOworCWV4cGVjdF9vcmlnLT5zYXZlZF9wcm90by5ncmUua2V5ID0gaHRvbnMoY3RfcHB0cF9pbmZvLT5wbnNfY2FsbF9pZCk7CiAJZXhwZWN0X29yaWctPnR1cGxlLnNyYy51LmdyZS5rZXkgPSBodG9ucyhuYXRfcHB0cF9pbmZvLT5wbnNfY2FsbF9pZCk7CiAJZXhwZWN0X29yaWctPnR1cGxlLmRzdC51LmdyZS5rZXkgPSBodG9ucyhjdF9wcHRwX2luZm8tPnBhY19jYWxsX2lkKTsKIAlleHBlY3Rfb3JpZy0+ZGlyID0gSVBfQ1RfRElSX09SSUdJTkFMOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9zbm1wX2Jhc2ljLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X3NubXBfYmFzaWMuYwppbmRleCA5M2IyYzUxLi44YWNiN2VkIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X3NubXBfYmFzaWMuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X3NubXBfYmFzaWMuYwpAQCAtMTE2MSw4ICsxMTYxLDcgQEAKIAkJCiAJCWlmICghc25tcF9vYmplY3RfZGVjb2RlKCZjdHgsIG9iaikpIHsKIAkJCWlmICgqb2JqKSB7Ci0JCQkJaWYgKCgqb2JqKS0+aWQpCi0JCQkJCWtmcmVlKCgqb2JqKS0+aWQpOworCQkJCWtmcmVlKCgqb2JqKS0+aWQpOwogCQkJCWtmcmVlKCpvYmopOwogCQkJfQkKIAkJCWtmcmVlKG9iaik7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X0NMVVNURVJJUC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9DTFVTVEVSSVAuYwppbmRleCA5YmNiMzk4Li40NWM1MmQ4IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X0NMVVNURVJJUC5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfQ0xVU1RFUklQLmMKQEAgLTI5LDcgKzI5LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3RhYmxlcy5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9DTFVTVEVSSVAuaD4KLSNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2suaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb21wYXQuaD4KIAogI2RlZmluZSBDTFVTVEVSSVBfVkVSU0lPTiAiMC44IgogCkBAIC0zMTYsMTQgKzMxNiwxNCBAQAogewogCWNvbnN0IHN0cnVjdCBpcHRfY2x1c3RlcmlwX3RndF9pbmZvICpjaXBpbmZvID0gdGFyZ2luZm87CiAJZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm87Ci0Jc3RydWN0IGlwX2Nvbm50cmFjayAqY3QgPSBpcF9jb25udHJhY2tfZ2V0KCgqcHNrYiksICZjdGluZm8pOwotCXVfaW50MzJfdCBoYXNoOworCXVfaW50MzJfdCAqbWFyaywgaGFzaDsKIAogCS8qIGRvbid0IG5lZWQgdG8gY2x1c3RlcmlwX2NvbmZpZ19nZXQoKSBoZXJlLCBzaW5jZSByZWZjb3VudAogCSAqIGlzIG9ubHkgZGVjcmVtZW50ZWQgYnkgZGVzdHJveSgpIC0gYW5kIGlwX3RhYmxlcyBndWFyYW50ZWVzCiAJICogdGhhdCB0aGUgLT50YXJnZXQoKSBmdW5jdGlvbiBpc24ndCBjYWxsZWQgYWZ0ZXIgLT5kZXN0cm95KCkgKi8KIAotCWlmICghY3QpIHsKKwltYXJrID0gbmZfY3RfZ2V0X21hcmsoKCpwc2tiKSwgJmN0aW5mbyk7CisJaWYgKG1hcmsgPT0gTlVMTCkgewogCQlwcmludGsoS0VSTl9FUlIgIkNMVVNURVJJUDogbm8gY29ubnRyYWNrIVxuIik7CiAJCQkvKiBGSVhNRTogbmVlZCB0byBkcm9wIGludmFsaWQgb25lcywgc2luY2UgcmVwbGllcwogCQkJICogdG8gb3V0Z29pbmcgY29ubmVjdGlvbnMgb2Ygb3RoZXIgbm9kZXMgd2lsbCBiZSAKQEAgLTM0Niw3ICszNDYsNyBAQAogCiAJc3dpdGNoIChjdGluZm8pIHsKIAkJY2FzZSBJUF9DVF9ORVc6Ci0JCQljdC0+bWFyayA9IGhhc2g7CisJCQkqbWFyayA9IGhhc2g7CiAJCQlicmVhazsKIAkJY2FzZSBJUF9DVF9SRUxBVEVEOgogCQljYXNlIElQX0NUX1JFTEFURUQrSVBfQ1RfSVNfUkVQTFk6CkBAIC0zNjMsNyArMzYzLDcgQEAKICNpZmRlZiBERUJVR19DTFVTVEVSUAogCURVTVBfVFVQTEUoJmN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZSk7CiAjZW5kaWYKLQlERUJVR1AoImhhc2g9JXUgY3RfaGFzaD0ldSAiLCBoYXNoLCBjdC0+bWFyayk7CisJREVCVUdQKCJoYXNoPSV1IGN0X2hhc2g9JXUgIiwgaGFzaCwgKm1hcmspOwogCWlmICghY2x1c3RlcmlwX3Jlc3BvbnNpYmxlKGNpcGluZm8tPmNvbmZpZywgaGFzaCkpIHsKIAkJREVCVUdQKCJub3QgcmVzcG9uc2libGVcbiIpOwogCQlyZXR1cm4gTkZfRFJPUDsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfQ09OTk1BUksuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfQ09OTk1BUksuYwppbmRleCAwNWQ2NmFiLi44YWNhYzVhIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X0NPTk5NQVJLLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9DT05OTUFSSy5jCkBAIC0yOSw3ICsyOSw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcF90YWJsZXMuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfQ09OTk1BUksuaD4KLSNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2suaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb21wYXQuaD4KIAogc3RhdGljIHVuc2lnbmVkIGludAogdGFyZ2V0KHN0cnVjdCBza19idWZmICoqcHNrYiwKQEAgLTQzLDI0ICs0MywyNCBAQAogCXVfaW50MzJfdCBkaWZmOwogCXVfaW50MzJfdCBuZm1hcms7CiAJdV9pbnQzMl90IG5ld21hcms7CisJdV9pbnQzMl90IGN0aW5mbzsKKwl1X2ludDMyX3QgKmN0bWFyayA9IG5mX2N0X2dldF9tYXJrKCpwc2tiLCAmY3RpbmZvKTsKIAotCWVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvOwotCXN0cnVjdCBpcF9jb25udHJhY2sgKmN0ID0gaXBfY29ubnRyYWNrX2dldCgoKnBza2IpLCAmY3RpbmZvKTsKLQlpZiAoY3QpIHsKKwlpZiAoY3RtYXJrKSB7CiAJICAgIHN3aXRjaChtYXJraW5mby0+bW9kZSkgewogCSAgICBjYXNlIElQVF9DT05OTUFSS19TRVQ6Ci0JCW5ld21hcmsgPSAoY3QtPm1hcmsgJiB+bWFya2luZm8tPm1hc2spIHwgbWFya2luZm8tPm1hcms7Ci0JCWlmIChuZXdtYXJrICE9IGN0LT5tYXJrKQotCQkgICAgY3QtPm1hcmsgPSBuZXdtYXJrOworCQluZXdtYXJrID0gKCpjdG1hcmsgJiB+bWFya2luZm8tPm1hc2spIHwgbWFya2luZm8tPm1hcms7CisJCWlmIChuZXdtYXJrICE9ICpjdG1hcmspCisJCSAgICAqY3RtYXJrID0gbmV3bWFyazsKIAkJYnJlYWs7CiAJICAgIGNhc2UgSVBUX0NPTk5NQVJLX1NBVkU6Ci0JCW5ld21hcmsgPSAoY3QtPm1hcmsgJiB+bWFya2luZm8tPm1hc2spIHwgKCgqcHNrYiktPm5mbWFyayAmIG1hcmtpbmZvLT5tYXNrKTsKLQkJaWYgKGN0LT5tYXJrICE9IG5ld21hcmspCi0JCSAgICBjdC0+bWFyayA9IG5ld21hcms7CisJCW5ld21hcmsgPSAoKmN0bWFyayAmIH5tYXJraW5mby0+bWFzaykgfCAoKCpwc2tiKS0+bmZtYXJrICYgbWFya2luZm8tPm1hc2spOworCQlpZiAoKmN0bWFyayAhPSBuZXdtYXJrKQorCQkgICAgKmN0bWFyayA9IG5ld21hcms7CiAJCWJyZWFrOwogCSAgICBjYXNlIElQVF9DT05OTUFSS19SRVNUT1JFOgogCQluZm1hcmsgPSAoKnBza2IpLT5uZm1hcms7Ci0JCWRpZmYgPSAoY3QtPm1hcmsgXiBuZm1hcmspICYgbWFya2luZm8tPm1hc2s7CisJCWRpZmYgPSAoKmN0bWFyayBeIG5mbWFyaykgJiBtYXJraW5mby0+bWFzazsKIAkJaWYgKGRpZmYgIT0gMCkKIAkJICAgICgqcHNrYiktPm5mbWFyayA9IG5mbWFyayBeIGRpZmY7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9OT1RSQUNLLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X05PVFJBQ0suYwppbmRleCBhNGJiOWIzLi5lM2M2OWQwIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X05PVFJBQ0suYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X05PVFJBQ0suYwpAQCAtNSw3ICs1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KIAogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3RhYmxlcy5oPgotI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFjay5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvbXBhdC5oPgogCiBzdGF0aWMgdW5zaWduZWQgaW50CiB0YXJnZXQoc3RydWN0IHNrX2J1ZmYgKipwc2tiLApAQCAtMjMsNyArMjMsNyBAQAogCSAgIElmIHRoZXJlIGlzIGEgcmVhbCBjdCBlbnRyeSBjb3JyZXNwb25kaWcgdG8gdGhpcyBwYWNrZXQsIAogCSAgIGl0J2xsIGhhbmcgYXJvdW4gdGlsbCB0aW1pbmcgb3V0LiBXZSBkb24ndCBkZWFsIHdpdGggaXQKIAkgICBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucy4gSksgKi8KLQkoKnBza2IpLT5uZmN0ID0gJmlwX2Nvbm50cmFja191bnRyYWNrZWQuY3RfZ2VuZXJhbDsKKwluZl9jdF91bnRyYWNrKCpwc2tiKTsKIAkoKnBza2IpLT5uZmN0aW5mbyA9IElQX0NUX05FVzsKIAluZl9jb25udHJhY2tfZ2V0KCgqcHNrYiktPm5mY3QpOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X2Nvbm5ieXRlcy5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9jb25uYnl0ZXMuYwppbmRleCBkZjRhNDJjLi5kNjhhMDQ4IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X2Nvbm5ieXRlcy5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfY29ubmJ5dGVzLmMKQEAgLTEwLDcgKzEwLDcgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgotI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFjay5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvbXBhdC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3RhYmxlcy5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9jb25uYnl0ZXMuaD4KIApAQCAtNDYsNjAgKzQ2LDU5IEBACiAgICAgICBpbnQgKmhvdGRyb3ApCiB7CiAJY29uc3Qgc3RydWN0IGlwdF9jb25uYnl0ZXNfaW5mbyAqc2luZm8gPSBtYXRjaGluZm87Ci0JZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm87Ci0Jc3RydWN0IGlwX2Nvbm50cmFjayAqY3Q7CiAJdV9pbnQ2NF90IHdoYXQgPSAwOwkvKiBpbml0aWFsaXplIHRvIG1ha2UgZ2NjIGhhcHB5ICovCisJY29uc3Qgc3RydWN0IGlwX2Nvbm50cmFja19jb3VudGVyICpjb3VudGVyczsKIAotCWlmICghKGN0ID0gaXBfY29ubnRyYWNrX2dldCgoc3RydWN0IHNrX2J1ZmYgKilza2IsICZjdGluZm8pKSkKKwlpZiAoIShjb3VudGVycyA9IG5mX2N0X2dldF9jb3VudGVycyhza2IpKSkKIAkJcmV0dXJuIDA7IC8qIG5vIG1hdGNoICovCiAKIAlzd2l0Y2ggKHNpbmZvLT53aGF0KSB7CiAJY2FzZSBJUFRfQ09OTkJZVEVTX1BLVFM6CiAJCXN3aXRjaCAoc2luZm8tPmRpcmVjdGlvbikgewogCQljYXNlIElQVF9DT05OQllURVNfRElSX09SSUdJTkFMOgotCQkJd2hhdCA9IGN0LT5jb3VudGVyc1tJUF9DVF9ESVJfT1JJR0lOQUxdLnBhY2tldHM7CisJCQl3aGF0ID0gY291bnRlcnNbSVBfQ1RfRElSX09SSUdJTkFMXS5wYWNrZXRzOwogCQkJYnJlYWs7CiAJCWNhc2UgSVBUX0NPTk5CWVRFU19ESVJfUkVQTFk6Ci0JCQl3aGF0ID0gY3QtPmNvdW50ZXJzW0lQX0NUX0RJUl9SRVBMWV0ucGFja2V0czsKKwkJCXdoYXQgPSBjb3VudGVyc1tJUF9DVF9ESVJfUkVQTFldLnBhY2tldHM7CiAJCQlicmVhazsKIAkJY2FzZSBJUFRfQ09OTkJZVEVTX0RJUl9CT1RIOgotCQkJd2hhdCA9IGN0LT5jb3VudGVyc1tJUF9DVF9ESVJfT1JJR0lOQUxdLnBhY2tldHM7Ci0JCQl3aGF0ICs9IGN0LT5jb3VudGVyc1tJUF9DVF9ESVJfUkVQTFldLnBhY2tldHM7CisJCQl3aGF0ID0gY291bnRlcnNbSVBfQ1RfRElSX09SSUdJTkFMXS5wYWNrZXRzOworCQkJd2hhdCArPSBjb3VudGVyc1tJUF9DVF9ESVJfUkVQTFldLnBhY2tldHM7CiAJCQlicmVhazsKIAkJfQogCQlicmVhazsKIAljYXNlIElQVF9DT05OQllURVNfQllURVM6CiAJCXN3aXRjaCAoc2luZm8tPmRpcmVjdGlvbikgewogCQljYXNlIElQVF9DT05OQllURVNfRElSX09SSUdJTkFMOgotCQkJd2hhdCA9IGN0LT5jb3VudGVyc1tJUF9DVF9ESVJfT1JJR0lOQUxdLmJ5dGVzOworCQkJd2hhdCA9IGNvdW50ZXJzW0lQX0NUX0RJUl9PUklHSU5BTF0uYnl0ZXM7CiAJCQlicmVhazsKIAkJY2FzZSBJUFRfQ09OTkJZVEVTX0RJUl9SRVBMWToKLQkJCXdoYXQgPSBjdC0+Y291bnRlcnNbSVBfQ1RfRElSX1JFUExZXS5ieXRlczsKKwkJCXdoYXQgPSBjb3VudGVyc1tJUF9DVF9ESVJfUkVQTFldLmJ5dGVzOwogCQkJYnJlYWs7CiAJCWNhc2UgSVBUX0NPTk5CWVRFU19ESVJfQk9USDoKLQkJCXdoYXQgPSBjdC0+Y291bnRlcnNbSVBfQ1RfRElSX09SSUdJTkFMXS5ieXRlczsKLQkJCXdoYXQgKz0gY3QtPmNvdW50ZXJzW0lQX0NUX0RJUl9SRVBMWV0uYnl0ZXM7CisJCQl3aGF0ID0gY291bnRlcnNbSVBfQ1RfRElSX09SSUdJTkFMXS5ieXRlczsKKwkJCXdoYXQgKz0gY291bnRlcnNbSVBfQ1RfRElSX1JFUExZXS5ieXRlczsKIAkJCWJyZWFrOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgSVBUX0NPTk5CWVRFU19BVkdQS1Q6CiAJCXN3aXRjaCAoc2luZm8tPmRpcmVjdGlvbikgewogCQljYXNlIElQVF9DT05OQllURVNfRElSX09SSUdJTkFMOgotCQkJd2hhdCA9IGRpdjY0XzY0KGN0LT5jb3VudGVyc1tJUF9DVF9ESVJfT1JJR0lOQUxdLmJ5dGVzLAotCQkJCQljdC0+Y291bnRlcnNbSVBfQ1RfRElSX09SSUdJTkFMXS5wYWNrZXRzKTsKKwkJCXdoYXQgPSBkaXY2NF82NChjb3VudGVyc1tJUF9DVF9ESVJfT1JJR0lOQUxdLmJ5dGVzLAorCQkJCQljb3VudGVyc1tJUF9DVF9ESVJfT1JJR0lOQUxdLnBhY2tldHMpOwogCQkJYnJlYWs7CiAJCWNhc2UgSVBUX0NPTk5CWVRFU19ESVJfUkVQTFk6Ci0JCQl3aGF0ID0gZGl2NjRfNjQoY3QtPmNvdW50ZXJzW0lQX0NUX0RJUl9SRVBMWV0uYnl0ZXMsCi0JCQkJCWN0LT5jb3VudGVyc1tJUF9DVF9ESVJfUkVQTFldLnBhY2tldHMpOworCQkJd2hhdCA9IGRpdjY0XzY0KGNvdW50ZXJzW0lQX0NUX0RJUl9SRVBMWV0uYnl0ZXMsCisJCQkJCWNvdW50ZXJzW0lQX0NUX0RJUl9SRVBMWV0ucGFja2V0cyk7CiAJCQlicmVhazsKIAkJY2FzZSBJUFRfQ09OTkJZVEVTX0RJUl9CT1RIOgogCQkJewogCQkJCXVfaW50NjRfdCBieXRlczsKIAkJCQl1X2ludDY0X3QgcGt0czsKLQkJCQlieXRlcyA9IGN0LT5jb3VudGVyc1tJUF9DVF9ESVJfT1JJR0lOQUxdLmJ5dGVzICsKLQkJCQkJY3QtPmNvdW50ZXJzW0lQX0NUX0RJUl9SRVBMWV0uYnl0ZXM7Ci0JCQkJcGt0cyA9IGN0LT5jb3VudGVyc1tJUF9DVF9ESVJfT1JJR0lOQUxdLnBhY2tldHMrCi0JCQkJCWN0LT5jb3VudGVyc1tJUF9DVF9ESVJfUkVQTFldLnBhY2tldHM7CisJCQkJYnl0ZXMgPSBjb3VudGVyc1tJUF9DVF9ESVJfT1JJR0lOQUxdLmJ5dGVzICsKKwkJCQkJY291bnRlcnNbSVBfQ1RfRElSX1JFUExZXS5ieXRlczsKKwkJCQlwa3RzID0gY291bnRlcnNbSVBfQ1RfRElSX09SSUdJTkFMXS5wYWNrZXRzKworCQkJCQljb3VudGVyc1tJUF9DVF9ESVJfUkVQTFldLnBhY2tldHM7CiAKIAkJCQkvKiBGSVhNRV9USEVPUkVUSUNBTDogd2hhdCB0byBkbyBpZiBzdW0KIAkJCQkgKiBvdmVyZmxvd3MgPyAqLwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9jb25ubWFyay5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9jb25ubWFyay5jCmluZGV4IGJmOGRlNDcuLjUzMDZlZjIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfY29ubm1hcmsuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X2Nvbm5tYXJrLmMKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3RhYmxlcy5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9jb25ubWFyay5oPgotI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFjay5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvbXBhdC5oPgogCiBzdGF0aWMgaW50CiBtYXRjaChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLApAQCAtMzksMTIgKzM5LDEyIEBACiAgICAgICBpbnQgKmhvdGRyb3ApCiB7CiAJY29uc3Qgc3RydWN0IGlwdF9jb25ubWFya19pbmZvICppbmZvID0gbWF0Y2hpbmZvOwotCWVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvOwotCXN0cnVjdCBpcF9jb25udHJhY2sgKmN0ID0gaXBfY29ubnRyYWNrX2dldCgoc3RydWN0IHNrX2J1ZmYgKilza2IsICZjdGluZm8pOwotCWlmICghY3QpCisJdV9pbnQzMl90IGN0aW5mbzsKKwljb25zdCB1X2ludDMyX3QgKmN0bWFyayA9IG5mX2N0X2dldF9tYXJrKHNrYiwgJmN0aW5mbyk7CisJaWYgKCFjdG1hcmspCiAJCXJldHVybiAwOwogCi0JcmV0dXJuICgoY3QtPm1hcmsgJiBpbmZvLT5tYXNrKSA9PSBpbmZvLT5tYXJrKSBeIGluZm8tPmludmVydDsKKwlyZXR1cm4gKCgoKmN0bWFyaykgJiBpbmZvLT5tYXNrKSA9PSBpbmZvLT5tYXJrKSBeIGluZm8tPmludmVydDsKIH0KIAogc3RhdGljIGludApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9jb25udHJhY2suYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfY29ubnRyYWNrLmMKaW5kZXggYzFkMjI4MC4uYzhkMTg3MCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9jb25udHJhY2suYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X2Nvbm50cmFjay5jCkBAIC0xMCw3ICsxMCwxNCBAQAogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisKKyNpZiBkZWZpbmVkKENPTkZJR19JUF9ORl9DT05OVFJBQ0spIHx8IGRlZmluZWQoQ09ORklHX0lQX05GX0NPTk5UUkFDS19NT0RVTEUpCiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX3R1cGxlLmg+CisjZWxzZQorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmg+CisjZW5kaWYKKwogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3RhYmxlcy5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9jb25udHJhY2suaD4KIApAQCAtMTgsNiArMjUsOCBAQAogTU9EVUxFX0FVVEhPUigiTWFyYyBCb3VjaGVyIDxtYXJjQG1ic2kuY2E+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oImlwdGFibGVzIGNvbm5lY3Rpb24gdHJhY2tpbmcgbWF0Y2ggbW9kdWxlIik7CiAKKyNpZiBkZWZpbmVkKENPTkZJR19JUF9ORl9DT05OVFJBQ0spIHx8IGRlZmluZWQoQ09ORklHX0lQX05GX0NPTk5UUkFDS19NT0RVTEUpCisKIHN0YXRpYyBpbnQKIG1hdGNoKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCkBAIC0xMDIsNiArMTExLDkzIEBACiAJcmV0dXJuIDE7CiB9CiAKKyNlbHNlIC8qIENPTkZJR19JUF9ORl9DT05OVFJBQ0sgKi8KK3N0YXRpYyBpbnQKK21hdGNoKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCisgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCisgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAorICAgICAgY29uc3Qgdm9pZCAqbWF0Y2hpbmZvLAorICAgICAgaW50IG9mZnNldCwKKyAgICAgIGludCAqaG90ZHJvcCkKK3sKKwljb25zdCBzdHJ1Y3QgaXB0X2Nvbm50cmFja19pbmZvICpzaW5mbyA9IG1hdGNoaW5mbzsKKwlzdHJ1Y3QgbmZfY29ubiAqY3Q7CisJZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm87CisJdW5zaWduZWQgaW50IHN0YXRlYml0OworCisJY3QgPSBuZl9jdF9nZXQoKHN0cnVjdCBza19idWZmICopc2tiLCAmY3RpbmZvKTsKKworI2RlZmluZSBGV0lOVihib29sLGludmZsZykgKChib29sKSBeICEhKHNpbmZvLT5pbnZmbGFncyAmIGludmZsZykpCisKKwlpZiAoY3QgPT0gJm5mX2Nvbm50cmFja191bnRyYWNrZWQpCisJCXN0YXRlYml0ID0gSVBUX0NPTk5UUkFDS19TVEFURV9VTlRSQUNLRUQ7CisJZWxzZSBpZiAoY3QpCisgCQlzdGF0ZWJpdCA9IElQVF9DT05OVFJBQ0tfU1RBVEVfQklUKGN0aW5mbyk7CisgCWVsc2UKKyAJCXN0YXRlYml0ID0gSVBUX0NPTk5UUkFDS19TVEFURV9JTlZBTElEOworIAorCWlmKHNpbmZvLT5mbGFncyAmIElQVF9DT05OVFJBQ0tfU1RBVEUpIHsKKwkJaWYgKGN0KSB7CisJCQlpZihjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGUuc3JjLnUzLmlwICE9CisJCQkgICAgY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfUkVQTFldLnR1cGxlLmRzdC51My5pcCkKKwkJCQlzdGF0ZWJpdCB8PSBJUFRfQ09OTlRSQUNLX1NUQVRFX1NOQVQ7CisKKwkJCWlmKGN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZS5kc3QudTMuaXAgIT0KKwkJCSAgICBjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9SRVBMWV0udHVwbGUuc3JjLnUzLmlwKQorCQkJCXN0YXRlYml0IHw9IElQVF9DT05OVFJBQ0tfU1RBVEVfRE5BVDsKKwkJfQorCisJCWlmIChGV0lOVigoc3RhdGViaXQgJiBzaW5mby0+c3RhdGVtYXNrKSA9PSAwLCBJUFRfQ09OTlRSQUNLX1NUQVRFKSkKKwkJCXJldHVybiAwOworCX0KKworCWlmKHNpbmZvLT5mbGFncyAmIElQVF9DT05OVFJBQ0tfUFJPVE8pIHsKKwkJaWYgKCFjdCB8fCBGV0lOVihjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGUuZHN0LnByb3RvbnVtICE9IHNpbmZvLT50dXBsZVtJUF9DVF9ESVJfT1JJR0lOQUxdLmRzdC5wcm90b251bSwgSVBUX0NPTk5UUkFDS19QUk9UTykpCisgICAgICAgICAgICAgICAgCXJldHVybiAwOworCX0KKworCWlmKHNpbmZvLT5mbGFncyAmIElQVF9DT05OVFJBQ0tfT1JJR1NSQykgeworCQlpZiAoIWN0IHx8IEZXSU5WKChjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGUuc3JjLnUzLmlwJnNpbmZvLT5zaXBtc2tbSVBfQ1RfRElSX09SSUdJTkFMXS5zX2FkZHIpICE9IHNpbmZvLT50dXBsZVtJUF9DVF9ESVJfT1JJR0lOQUxdLnNyYy5pcCwgSVBUX0NPTk5UUkFDS19PUklHU1JDKSkKKwkJCXJldHVybiAwOworCX0KKworCWlmKHNpbmZvLT5mbGFncyAmIElQVF9DT05OVFJBQ0tfT1JJR0RTVCkgeworCQlpZiAoIWN0IHx8IEZXSU5WKChjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGUuZHN0LnUzLmlwJnNpbmZvLT5kaXBtc2tbSVBfQ1RfRElSX09SSUdJTkFMXS5zX2FkZHIpICE9IHNpbmZvLT50dXBsZVtJUF9DVF9ESVJfT1JJR0lOQUxdLmRzdC5pcCwgSVBUX0NPTk5UUkFDS19PUklHRFNUKSkKKwkJCXJldHVybiAwOworCX0KKworCWlmKHNpbmZvLT5mbGFncyAmIElQVF9DT05OVFJBQ0tfUkVQTFNSQykgeworCQlpZiAoIWN0IHx8IEZXSU5WKChjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9SRVBMWV0udHVwbGUuc3JjLnUzLmlwJnNpbmZvLT5zaXBtc2tbSVBfQ1RfRElSX1JFUExZXS5zX2FkZHIpICE9IHNpbmZvLT50dXBsZVtJUF9DVF9ESVJfUkVQTFldLnNyYy5pcCwgSVBUX0NPTk5UUkFDS19SRVBMU1JDKSkKKwkJCXJldHVybiAwOworCX0KKworCWlmKHNpbmZvLT5mbGFncyAmIElQVF9DT05OVFJBQ0tfUkVQTERTVCkgeworCQlpZiAoIWN0IHx8IEZXSU5WKChjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9SRVBMWV0udHVwbGUuZHN0LnUzLmlwJnNpbmZvLT5kaXBtc2tbSVBfQ1RfRElSX1JFUExZXS5zX2FkZHIpICE9IHNpbmZvLT50dXBsZVtJUF9DVF9ESVJfUkVQTFldLmRzdC5pcCwgSVBUX0NPTk5UUkFDS19SRVBMRFNUKSkKKwkJCXJldHVybiAwOworCX0KKworCWlmKHNpbmZvLT5mbGFncyAmIElQVF9DT05OVFJBQ0tfU1RBVFVTKSB7CisJCWlmICghY3QgfHwgRldJTlYoKGN0LT5zdGF0dXMgJiBzaW5mby0+c3RhdHVzbWFzaykgPT0gMCwgSVBUX0NPTk5UUkFDS19TVEFUVVMpKQorCQkJcmV0dXJuIDA7CisJfQorCisJaWYoc2luZm8tPmZsYWdzICYgSVBUX0NPTk5UUkFDS19FWFBJUkVTKSB7CisJCXVuc2lnbmVkIGxvbmcgZXhwaXJlczsKKworCQlpZighY3QpCisJCQlyZXR1cm4gMDsKKworCQlleHBpcmVzID0gdGltZXJfcGVuZGluZygmY3QtPnRpbWVvdXQpID8gKGN0LT50aW1lb3V0LmV4cGlyZXMgLSBqaWZmaWVzKS9IWiA6IDA7CisKKwkJaWYgKEZXSU5WKCEoZXhwaXJlcyA+PSBzaW5mby0+ZXhwaXJlc19taW4gJiYgZXhwaXJlcyA8PSBzaW5mby0+ZXhwaXJlc19tYXgpLCBJUFRfQ09OTlRSQUNLX0VYUElSRVMpKQorCQkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDE7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfTkZfSVBfQ09OTlRSQUNLICovCisKIHN0YXRpYyBpbnQgY2hlY2soY29uc3QgY2hhciAqdGFibGVuYW1lLAogCQkgY29uc3Qgc3RydWN0IGlwdF9pcCAqaXAsCiAJCSB2b2lkICptYXRjaGluZm8sCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X2hlbHBlci5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9oZWxwZXIuYwppbmRleCAzZTdkZDAxLi5iZjE0ZTFjIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X2hlbHBlci5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfaGVscGVyLmMKQEAgLTEzLDkgKzEzLDE1IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyLmg+CisjaWYgZGVmaW5lZChDT05GSUdfSVBfTkZfQ09OTlRSQUNLKSB8fCBkZWZpbmVkKENPTkZJR19JUF9ORl9DT05OVFJBQ0tfTU9EVUxFKQogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFjay5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19jb3JlLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX2hlbHBlci5oPgorI2Vsc2UKKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaD4KKyNlbmRpZgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3RhYmxlcy5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9oZWxwZXIuaD4KIApAQCAtMjksNiArMzUsNyBAQAogI2RlZmluZSBERUJVR1AoZm9ybWF0LCBhcmdzLi4uKQogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19JUF9ORl9DT05OVFJBQ0spIHx8IGRlZmluZWQoQ09ORklHX0lQX05GX0NPTk5UUkFDS19NT0RVTEUpCiBzdGF0aWMgaW50CiBtYXRjaChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLApAQCAtNzMsNiArODAsNTMgQEAKIAlyZXR1cm4gcmV0OwogfQogCisjZWxzZSAvKiBDT05GSUdfSVBfTkZfQ09OTlRSQUNLICovCisKK3N0YXRpYyBpbnQKK21hdGNoKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCisgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCisgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAorICAgICAgY29uc3Qgdm9pZCAqbWF0Y2hpbmZvLAorICAgICAgaW50IG9mZnNldCwKKyAgICAgIGludCAqaG90ZHJvcCkKK3sKKwljb25zdCBzdHJ1Y3QgaXB0X2hlbHBlcl9pbmZvICppbmZvID0gbWF0Y2hpbmZvOworCXN0cnVjdCBuZl9jb25uICpjdDsKKwllbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbzsKKwlpbnQgcmV0ID0gaW5mby0+aW52ZXJ0OworCQorCWN0ID0gbmZfY3RfZ2V0KChzdHJ1Y3Qgc2tfYnVmZiAqKXNrYiwgJmN0aW5mbyk7CisJaWYgKCFjdCkgeworCQlERUJVR1AoImlwdF9oZWxwZXI6IEVlayEgaW52YWxpZCBjb25udHJhY2s/XG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlpZiAoIWN0LT5tYXN0ZXIpIHsKKwkJREVCVUdQKCJpcHRfaGVscGVyOiBjb25udHJhY2sgJXAgaGFzIG5vIG1hc3RlclxuIiwgY3QpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJlYWRfbG9ja19iaCgmbmZfY29ubnRyYWNrX2xvY2spOworCWlmICghY3QtPm1hc3Rlci0+aGVscGVyKSB7CisJCURFQlVHUCgiaXB0X2hlbHBlcjogbWFzdGVyIGN0ICVwIGhhcyBubyBoZWxwZXJcbiIsIAorCQkJZXhwLT5leHBlY3RhbnQpOworCQlnb3RvIG91dF91bmxvY2s7CisJfQorCisJREVCVUdQKCJtYXN0ZXIncyBuYW1lID0gJXMgLCBpbmZvLT5uYW1lID0gJXNcbiIsIAorCQljdC0+bWFzdGVyLT5oZWxwZXItPm5hbWUsIGluZm8tPm5hbWUpOworCisJaWYgKGluZm8tPm5hbWVbMF0gPT0gJ1wwJykKKwkJcmV0IF49IDE7CisJZWxzZQorCQlyZXQgXj0gIXN0cm5jbXAoY3QtPm1hc3Rlci0+aGVscGVyLT5uYW1lLCBpbmZvLT5uYW1lLCAKKwkJICAgICAgICAgICAgICAgIHN0cmxlbihjdC0+bWFzdGVyLT5oZWxwZXItPm5hbWUpKTsKK291dF91bmxvY2s6CisJcmVhZF91bmxvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorI2VuZGlmCisKIHN0YXRpYyBpbnQgY2hlY2soY29uc3QgY2hhciAqdGFibGVuYW1lLAogCQkgY29uc3Qgc3RydWN0IGlwdF9pcCAqaXAsCiAJCSB2b2lkICptYXRjaGluZm8sCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X3N0YXRlLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X3N0YXRlLmMKaW5kZXggYjE1MTFiOS4uNGQ3ZjE2YiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9zdGF0ZS5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfc3RhdGUuYwpAQCAtMTAsNyArMTAsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrLmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29tcGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfdGFibGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X3N0YXRlLmg+CiAKQEAgLTMwLDkgKzMwLDkgQEAKIAllbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbzsKIAl1bnNpZ25lZCBpbnQgc3RhdGViaXQ7CiAKLQlpZiAoc2tiLT5uZmN0ID09ICZpcF9jb25udHJhY2tfdW50cmFja2VkLmN0X2dlbmVyYWwpCisJaWYgKG5mX2N0X2lzX3VudHJhY2tlZChza2IpKQogCQlzdGF0ZWJpdCA9IElQVF9TVEFURV9VTlRSQUNLRUQ7Ci0JZWxzZSBpZiAoIWlwX2Nvbm50cmFja19nZXQoc2tiLCAmY3RpbmZvKSkKKwllbHNlIGlmICghbmZfY3RfZ2V0X2N0aW5mbyhza2IsICZjdGluZm8pKQogCQlzdGF0ZWJpdCA9IElQVF9TVEFURV9JTlZBTElEOwogCWVsc2UKIAkJc3RhdGViaXQgPSBJUFRfU1RBVEVfQklUKGN0aW5mbyk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjAyYzFjCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjQuYwpAQCAtMCwwICsxLDU3MSBAQAorLyogKEMpIDE5OTktMjAwMSBQYXVsIGBSdXN0eScgUnVzc2VsbAorICogKEMpIDIwMDItMjAwNCBOZXRmaWx0ZXIgQ29yZSBUZWFtIDxjb3JldGVhbUBuZXRmaWx0ZXIub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogMTYgRGVjIDIwMDM6IFlhc3V5dWtpIEtvemFrYWkgQFVTQUdJIDx5YXN1eXVraS5rb3pha2FpQHRvc2hpYmEuY28uanA+CisgKgktIG1vdmUgTDMgcHJvdG9jb2wgZGVwZW5kZW50IHBhcnQgdG8gdGhpcyBmaWxlLgorICogMjMgTWFyIDIwMDQ6IFlhc3V5dWtpIEtvemFrYWkgQFVTQUdJIDx5YXN1eXVraS5rb3pha2FpQHRvc2hpYmEuY28uanA+CisgKgktIGFkZCBnZXRfZmVhdHVyZXMoKSB0byBzdXBwb3J0IHZhcmlvdXMgc2l6ZSBvZiBjb25udHJhY2sKKyAqCSAgc3RydWN0dXJlcy4KKyAqCisgKiBEZXJpdmVkIGZyb20gbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19zdGFuZGFsb25lLmMKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pcC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L2ljbXAuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KKyNpbmNsdWRlIDxuZXQvaXAuaD4KKworI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0Lmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b2NvbC5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG8uaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9pcHY0L25mX2Nvbm50cmFja19pcHY0Lmg+CisKKyNpZiAwCisjZGVmaW5lIERFQlVHUCBwcmludGsKKyNlbHNlCisjZGVmaW5lIERFQlVHUChmb3JtYXQsIGFyZ3MuLi4pCisjZW5kaWYKKworREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCBuZl9jb25udHJhY2tfc3RhdCwgbmZfY29ubnRyYWNrX3N0YXQpOworCitzdGF0aWMgaW50IGlwdjRfcGt0X3RvX3R1cGxlKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBuaG9mZiwKKwkJCSAgICAgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpCit7CisJdV9pbnQzMl90IF9hZGRyc1syXSwgKmFwOworCWFwID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgbmhvZmYgKyBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIHNhZGRyKSwKKwkJCQlzaXplb2YodV9pbnQzMl90KSAqIDIsIF9hZGRycyk7CisJaWYgKGFwID09IE5VTEwpCisJCXJldHVybiAwOworCisJdHVwbGUtPnNyYy51My5pcCA9IGFwWzBdOworCXR1cGxlLT5kc3QudTMuaXAgPSBhcFsxXTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGlwdjRfaW52ZXJ0X3R1cGxlKHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlLAorCQkJICAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqb3JpZykKK3sKKwl0dXBsZS0+c3JjLnUzLmlwID0gb3JpZy0+ZHN0LnUzLmlwOworCXR1cGxlLT5kc3QudTMuaXAgPSBvcmlnLT5zcmMudTMuaXA7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBpcHY0X3ByaW50X3R1cGxlKHN0cnVjdCBzZXFfZmlsZSAqcywKKwkJCSAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSkKK3sKKwlyZXR1cm4gc2VxX3ByaW50ZihzLCAic3JjPSV1LiV1LiV1LiV1IGRzdD0ldS4ldS4ldS4ldSAiLAorCQkgICAgICAgICAgTklQUVVBRCh0dXBsZS0+c3JjLnUzLmlwKSwKKwkJCSAgTklQUVVBRCh0dXBsZS0+ZHN0LnUzLmlwKSk7Cit9CisKK3N0YXRpYyBpbnQgaXB2NF9wcmludF9jb25udHJhY2soc3RydWN0IHNlcV9maWxlICpzLAorCQkJCWNvbnN0IHN0cnVjdCBuZl9jb25uICpjb25udHJhY2spCit7CisJcmV0dXJuIDA7Cit9CisKKy8qIFJldHVybnMgbmV3IHNrX2J1ZmYsIG9yIE5VTEwgKi8KK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqCituZl9jdF9pcHY0X2dhdGhlcl9mcmFncyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1X2ludDMyX3QgdXNlcikKK3sKKwlza2Jfb3JwaGFuKHNrYik7CisKKyAgICAgICAgbG9jYWxfYmhfZGlzYWJsZSgpOworICAgICAgICBza2IgPSBpcF9kZWZyYWcoc2tiLCB1c2VyKTsKKyAgICAgICAgbG9jYWxfYmhfZW5hYmxlKCk7CisKKyAgICAgICAgaWYgKHNrYikKKwkJaXBfc2VuZF9jaGVjayhza2ItPm5oLmlwaCk7CisKKyAgICAgICAgcmV0dXJuIHNrYjsKK30KKworc3RhdGljIGludAoraXB2NF9wcmVwYXJlKHN0cnVjdCBza19idWZmICoqcHNrYiwgdW5zaWduZWQgaW50IGhvb2tudW0sIHVuc2lnbmVkIGludCAqZGF0YW9mZiwKKwkgICAgIHVfaW50OF90ICpwcm90b251bSkKK3sKKwkvKiBOZXZlciBoYXBwZW4gKi8KKwlpZiAoKCpwc2tiKS0+bmguaXBoLT5mcmFnX29mZiAmIGh0b25zKElQX09GRlNFVCkpIHsKKwkJaWYgKG5ldF9yYXRlbGltaXQoKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJpcHY0X3ByZXBhcmU6IEZyYWcgb2YgcHJvdG8gJXUgKGhvb2s9JXUpXG4iLAorCQkJKCpwc2tiKS0+bmguaXBoLT5wcm90b2NvbCwgaG9va251bSk7CisJCX0KKwkJcmV0dXJuIC1ORl9EUk9QOworCX0KKworCSpkYXRhb2ZmID0gKCpwc2tiKS0+bmgucmF3IC0gKCpwc2tiKS0+ZGF0YSArICgqcHNrYiktPm5oLmlwaC0+aWhsKjQ7CisJKnByb3RvbnVtID0gKCpwc2tiKS0+bmguaXBoLT5wcm90b2NvbDsKKworCXJldHVybiBORl9BQ0NFUFQ7Cit9CisKK2ludCBuYXRfbW9kdWxlX2lzX2xvYWRlZCA9IDA7CitzdGF0aWMgdV9pbnQzMl90IGlwdjRfZ2V0X2ZlYXR1cmVzKGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKQoreworCWlmIChuYXRfbW9kdWxlX2lzX2xvYWRlZCkKKwkJcmV0dXJuIE5GX0NUX0ZfTkFUOworCisJcmV0dXJuIE5GX0NUX0ZfQkFTSUM7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaXB2NF9jb25maXJtKHVuc2lnbmVkIGludCBob29rbnVtLAorCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCisJCQkJIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKKwkJCQkgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKKwkJCQkgaW50ICgqb2tmbikoc3RydWN0IHNrX2J1ZmYgKikpCit7CisJLyogV2UndmUgc2VlbiBpdCBjb21pbmcgb3V0IHRoZSBvdGhlciBzaWRlOiBjb25maXJtIGl0ICovCisJcmV0dXJuIG5mX2Nvbm50cmFja19jb25maXJtKHBza2IpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGlwdjRfY29ubnRyYWNrX2hlbHAodW5zaWduZWQgaW50IGhvb2tudW0sCisJCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKipwc2tiLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAorCQkJCSAgICAgIGludCAoKm9rZm4pKHN0cnVjdCBza19idWZmICopKQoreworCXN0cnVjdCBuZl9jb25uICpjdDsKKwllbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbzsKKworCS8qIFRoaXMgaXMgd2hlcmUgd2UgY2FsbCB0aGUgaGVscGVyOiBhcyB0aGUgcGFja2V0IGdvZXMgb3V0LiAqLworCWN0ID0gbmZfY3RfZ2V0KCpwc2tiLCAmY3RpbmZvKTsKKwlpZiAoY3QgJiYgY3QtPmhlbHBlcikgeworCQl1bnNpZ25lZCBpbnQgcmV0OworCQlyZXQgPSBjdC0+aGVscGVyLT5oZWxwKHBza2IsCisJCQkJICAgICAgICgqcHNrYiktPm5oLnJhdyAtICgqcHNrYiktPmRhdGEKKwkJCQkJCSAgICAgICArICgqcHNrYiktPm5oLmlwaC0+aWhsKjQsCisJCQkJICAgICAgIGN0LCBjdGluZm8pOworCQlpZiAocmV0ICE9IE5GX0FDQ0VQVCkKKwkJCXJldHVybiByZXQ7CisJfQorCXJldHVybiBORl9BQ0NFUFQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaXB2NF9jb25udHJhY2tfZGVmcmFnKHVuc2lnbmVkIGludCBob29rbnVtLAorCQkJCQkgIHN0cnVjdCBza19idWZmICoqcHNrYiwKKwkJCQkJICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCisJCQkJCSAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKKwkJCQkJICBpbnQgKCpva2ZuKShzdHJ1Y3Qgc2tfYnVmZiAqKSkKK3sKKyNpZiAhZGVmaW5lZChDT05GSUdfSVBfTkZfTkFUKSAmJiAhZGVmaW5lZChDT05GSUdfSVBfTkZfTkFUX01PRFVMRSkKKwkvKiBQcmV2aW91c2x5IHNlZW4gKGxvb3BiYWNrKT8gIElnbm9yZS4gIERvIHRoaXMgYmVmb3JlCisJICAgZnJhZ21lbnQgY2hlY2suICovCisJaWYgKCgqcHNrYiktPm5mY3QpCisJCXJldHVybiBORl9BQ0NFUFQ7CisjZW5kaWYKKworCS8qIEdhdGhlciBmcmFnbWVudHMuICovCisJaWYgKCgqcHNrYiktPm5oLmlwaC0+ZnJhZ19vZmYgJiBodG9ucyhJUF9NRnxJUF9PRkZTRVQpKSB7CisJCSpwc2tiID0gbmZfY3RfaXB2NF9nYXRoZXJfZnJhZ3MoKnBza2IsCisJCQkJCQlob29rbnVtID09IE5GX0lQX1BSRV9ST1VUSU5HID8KKwkJCQkJCUlQX0RFRlJBR19DT05OVFJBQ0tfSU4gOgorCQkJCQkJSVBfREVGUkFHX0NPTk5UUkFDS19PVVQpOworCQlpZiAoISpwc2tiKQorCQkJcmV0dXJuIE5GX1NUT0xFTjsKKwl9CisJcmV0dXJuIE5GX0FDQ0VQVDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBpcHY0X3JlZnJhZyh1bnNpZ25lZCBpbnQgaG9va251bSwKKwkJCQlzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCisJCQkJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAorCQkJCWNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCisJCQkJaW50ICgqb2tmbikoc3RydWN0IHNrX2J1ZmYgKikpCit7CisJc3RydWN0IHJ0YWJsZSAqcnQgPSAoc3RydWN0IHJ0YWJsZSAqKSgqcHNrYiktPmRzdDsKKworCS8qIFdlJ3ZlIHNlZW4gaXQgY29taW5nIG91dCB0aGUgb3RoZXIgc2lkZTogY29uZmlybSAqLworCWlmIChpcHY0X2NvbmZpcm0oaG9va251bSwgcHNrYiwgaW4sIG91dCwgb2tmbikgIT0gTkZfQUNDRVBUKQorCQlyZXR1cm4gTkZfRFJPUDsKKworCS8qIExvY2FsIHBhY2tldHMgYXJlIG5ldmVyIHByb2R1Y2VkIHRvbyBsYXJnZSBmb3IgdGhlaXIKKwkgICBpbnRlcmZhY2UuICBXZSBkZWdmcmFnbWVudCB0aGVtIGF0IExPQ0FMX09VVCwgaG93ZXZlciwKKwkgICBzbyB3ZSBoYXZlIHRvIHJlZnJhZ21lbnQgdGhlbSBoZXJlLiAqLworCWlmICgoKnBza2IpLT5sZW4gPiBkc3RfbXR1KCZydC0+dS5kc3QpICYmCisJICAgICFza2Jfc2hpbmZvKCpwc2tiKS0+dHNvX3NpemUpIHsKKwkJLyogTm8gaG9vayBjYW4gYmUgYWZ0ZXIgdXMsIHNvIHRoaXMgc2hvdWxkIGJlIE9LLiAqLworCQlpcF9mcmFnbWVudCgqcHNrYiwgb2tmbik7CisJCXJldHVybiBORl9TVE9MRU47CisJfQorCXJldHVybiBORl9BQ0NFUFQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaXB2NF9jb25udHJhY2tfaW4odW5zaWduZWQgaW50IGhvb2tudW0sCisJCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKipwc2tiLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAorCQkJCSAgICAgIGludCAoKm9rZm4pKHN0cnVjdCBza19idWZmICopKQoreworCXJldHVybiBuZl9jb25udHJhY2tfaW4oUEZfSU5FVCwgaG9va251bSwgcHNrYik7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaXB2NF9jb25udHJhY2tfbG9jYWwodW5zaWduZWQgaW50IGhvb2tudW0sCisJCQkJICAgICAgICAgc3RydWN0IHNrX2J1ZmYgKipwc2tiLAorCQkJCSAgICAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKKwkJCQkgICAgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAorCQkJCSAgICAgICAgIGludCAoKm9rZm4pKHN0cnVjdCBza19idWZmICopKQoreworCS8qIHJvb3QgaXMgcGxheWluZyB3aXRoIHJhdyBzb2NrZXRzLiAqLworCWlmICgoKnBza2IpLT5sZW4gPCBzaXplb2Yoc3RydWN0IGlwaGRyKQorCSAgICB8fCAoKnBza2IpLT5uaC5pcGgtPmlobCAqIDQgPCBzaXplb2Yoc3RydWN0IGlwaGRyKSkgeworCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJcHJpbnRrKCJpcHRfaG9vazogaGFwcHkgY3JhY2tpbmcuXG4iKTsKKwkJcmV0dXJuIE5GX0FDQ0VQVDsKKwl9CisJcmV0dXJuIG5mX2Nvbm50cmFja19pbihQRl9JTkVULCBob29rbnVtLCBwc2tiKTsKK30KKworLyogQ29ubmVjdGlvbiB0cmFja2luZyBtYXkgZHJvcCBwYWNrZXRzLCBidXQgbmV2ZXIgYWx0ZXJzIHRoZW0sIHNvCisgICBtYWtlIGl0IHRoZSBmaXJzdCBob29rLiAqLworc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyBpcHY0X2Nvbm50cmFja19kZWZyYWdfb3BzID0geworCS5ob29rCQk9IGlwdjRfY29ubnRyYWNrX2RlZnJhZywKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLnBmCQk9IFBGX0lORVQsCisJLmhvb2tudW0JPSBORl9JUF9QUkVfUk9VVElORywKKwkucHJpb3JpdHkJPSBORl9JUF9QUklfQ09OTlRSQUNLX0RFRlJBRywKK307CisKK3N0YXRpYyBzdHJ1Y3QgbmZfaG9va19vcHMgaXB2NF9jb25udHJhY2tfaW5fb3BzID0geworCS5ob29rCQk9IGlwdjRfY29ubnRyYWNrX2luLAorCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkucGYJCT0gUEZfSU5FVCwKKwkuaG9va251bQk9IE5GX0lQX1BSRV9ST1VUSU5HLAorCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9DT05OVFJBQ0ssCit9OworCitzdGF0aWMgc3RydWN0IG5mX2hvb2tfb3BzIGlwdjRfY29ubnRyYWNrX2RlZnJhZ19sb2NhbF9vdXRfb3BzID0geworCS5ob29rICAgICAgICAgICA9IGlwdjRfY29ubnRyYWNrX2RlZnJhZywKKwkub3duZXIgICAgICAgICAgPSBUSElTX01PRFVMRSwKKwkucGYgICAgICAgICAgICAgPSBQRl9JTkVULAorCS5ob29rbnVtICAgICAgICA9IE5GX0lQX0xPQ0FMX09VVCwKKwkucHJpb3JpdHkgICAgICAgPSBORl9JUF9QUklfQ09OTlRSQUNLX0RFRlJBRywKK307CisKK3N0YXRpYyBzdHJ1Y3QgbmZfaG9va19vcHMgaXB2NF9jb25udHJhY2tfbG9jYWxfb3V0X29wcyA9IHsKKwkuaG9vawkJPSBpcHY0X2Nvbm50cmFja19sb2NhbCwKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLnBmCQk9IFBGX0lORVQsCisJLmhvb2tudW0JPSBORl9JUF9MT0NBTF9PVVQsCisJLnByaW9yaXR5CT0gTkZfSVBfUFJJX0NPTk5UUkFDSywKK307CisKKy8qIGhlbHBlcnMgKi8KK3N0YXRpYyBzdHJ1Y3QgbmZfaG9va19vcHMgaXB2NF9jb25udHJhY2tfaGVscGVyX291dF9vcHMgPSB7CisJLmhvb2sJCT0gaXB2NF9jb25udHJhY2tfaGVscCwKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLnBmCQk9IFBGX0lORVQsCisJLmhvb2tudW0JPSBORl9JUF9QT1NUX1JPVVRJTkcsCisJLnByaW9yaXR5CT0gTkZfSVBfUFJJX0NPTk5UUkFDS19IRUxQRVIsCit9OworCitzdGF0aWMgc3RydWN0IG5mX2hvb2tfb3BzIGlwdjRfY29ubnRyYWNrX2hlbHBlcl9pbl9vcHMgPSB7CisJLmhvb2sJCT0gaXB2NF9jb25udHJhY2tfaGVscCwKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLnBmCQk9IFBGX0lORVQsCisJLmhvb2tudW0JPSBORl9JUF9MT0NBTF9JTiwKKwkucHJpb3JpdHkJPSBORl9JUF9QUklfQ09OTlRSQUNLX0hFTFBFUiwKK307CisKKworLyogUmVmcmFnbWVudGVyOyBsYXN0IGNoYW5jZS4gKi8KK3N0YXRpYyBzdHJ1Y3QgbmZfaG9va19vcHMgaXB2NF9jb25udHJhY2tfb3V0X29wcyA9IHsKKwkuaG9vawkJPSBpcHY0X3JlZnJhZywKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLnBmCQk9IFBGX0lORVQsCisJLmhvb2tudW0JPSBORl9JUF9QT1NUX1JPVVRJTkcsCisJLnByaW9yaXR5CT0gTkZfSVBfUFJJX0NPTk5UUkFDS19DT05GSVJNLAorfTsKKworc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyBpcHY0X2Nvbm50cmFja19sb2NhbF9pbl9vcHMgPSB7CisJLmhvb2sJCT0gaXB2NF9jb25maXJtLAorCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkucGYJCT0gUEZfSU5FVCwKKwkuaG9va251bQk9IE5GX0lQX0xPQ0FMX0lOLAorCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9DT05OVFJBQ0tfQ09ORklSTSwKK307CisKKyNpZmRlZiBDT05GSUdfU1lTQ1RMCisvKiBGcm9tIG5mX2Nvbm50cmFja19wcm90b19pY21wLmMgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIG5mX2N0X2ljbXBfdGltZW91dDsKK3N0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqbmZfY3RfaXB2NF9zeXNjdGxfaGVhZGVyOworCitzdGF0aWMgY3RsX3RhYmxlIG5mX2N0X3N5c2N0bF90YWJsZVtdID0geworCXsKKwkJLmN0bF9uYW1lCT0gTkVUX05GX0NPTk5UUkFDS19JQ01QX1RJTUVPVVQsCisJCS5wcm9jbmFtZQk9ICJuZl9jb25udHJhY2tfaWNtcF90aW1lb3V0IiwKKwkJLmRhdGEJCT0gJm5mX2N0X2ljbXBfdGltZW91dCwKKwkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQgaW50KSwKKwkJLm1vZGUJCT0gMDY0NCwKKwkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjX2ppZmZpZXMsCisJfSwKKyAgICAgICAgeyAuY3RsX25hbWUgPSAwIH0KK307CisKK3N0YXRpYyBjdGxfdGFibGUgbmZfY3RfbmV0ZmlsdGVyX3RhYmxlW10gPSB7CisJeworCQkuY3RsX25hbWUgICAgICAgPSBORVRfTkVURklMVEVSLAorCQkucHJvY25hbWUgICAgICAgPSAibmV0ZmlsdGVyIiwKKwkJLm1vZGUgICAgICAgICAgID0gMDU1NSwKKwkJLmNoaWxkICAgICAgICAgID0gbmZfY3Rfc3lzY3RsX3RhYmxlLAorCX0sCisJeyAuY3RsX25hbWUgPSAwIH0KK307CisKK3N0YXRpYyBjdGxfdGFibGUgbmZfY3RfbmV0X3RhYmxlW10gPSB7CisJeworCQkuY3RsX25hbWUgICAgICAgPSBDVExfTkVULAorCQkucHJvY25hbWUgICAgICAgPSAibmV0IiwKKwkJLm1vZGUgICAgICAgICAgID0gMDU1NSwKKwkJLmNoaWxkICAgICAgICAgID0gbmZfY3RfbmV0ZmlsdGVyX3RhYmxlLAorCX0sCisJeyAuY3RsX25hbWUgPSAwIH0KK307CisjZW5kaWYKKworLyogRmFzdCBmdW5jdGlvbiBmb3IgdGhvc2Ugd2hvIGRvbid0IHdhbnQgdG8gcGFyc2UgL3Byb2MgKGFuZCBJIGRvbid0CisgICBibGFtZSB0aGVtKS4gKi8KKy8qIFJldmVyc2luZyB0aGUgc29ja2V0J3MgZHN0L3NyYyBwb2ludCBvZiB2aWV3IGdpdmVzIHVzIHRoZSByZXBseQorICAgbWFwcGluZy4gKi8KK3N0YXRpYyBpbnQKK2dldG9yaWdkc3Qoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0dmFsLCB2b2lkIF9fdXNlciAqdXNlciwgaW50ICpsZW4pCit7CisJc3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spOworCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCAqaDsKKwlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlIHR1cGxlOworCQorCU5GX0NUX1RVUExFX1VfQkxBTksoJnR1cGxlKTsKKwl0dXBsZS5zcmMudTMuaXAgPSBpbmV0LT5yY3Zfc2FkZHI7CisJdHVwbGUuc3JjLnUudGNwLnBvcnQgPSBpbmV0LT5zcG9ydDsKKwl0dXBsZS5kc3QudTMuaXAgPSBpbmV0LT5kYWRkcjsKKwl0dXBsZS5kc3QudS50Y3AucG9ydCA9IGluZXQtPmRwb3J0OworCXR1cGxlLnNyYy5sM251bSA9IFBGX0lORVQ7CisJdHVwbGUuZHN0LnByb3RvbnVtID0gSVBQUk9UT19UQ1A7CisKKwkvKiBXZSBvbmx5IGRvIFRDUCBhdCB0aGUgbW9tZW50OiBpcyB0aGVyZSBhIGJldHRlciB3YXk/ICovCisJaWYgKHN0cmNtcChzay0+c2tfcHJvdC0+bmFtZSwgIlRDUCIpKSB7CisJCURFQlVHUCgiU09fT1JJR0lOQUxfRFNUOiBOb3QgYSBUQ1Agc29ja2V0XG4iKTsKKwkJcmV0dXJuIC1FTk9QUk9UT09QVDsKKwl9CisKKwlpZiAoKHVuc2lnbmVkIGludCkgKmxlbiA8IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSB7CisJCURFQlVHUCgiU09fT1JJR0lOQUxfRFNUOiBsZW4gJXUgbm90ICV1XG4iLAorCQkgICAgICAgKmxlbiwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwloID0gbmZfY29ubnRyYWNrX2ZpbmRfZ2V0KCZ0dXBsZSwgTlVMTCk7CisJaWYgKGgpIHsKKwkJc3RydWN0IHNvY2thZGRyX2luIHNpbjsKKwkJc3RydWN0IG5mX2Nvbm4gKmN0ID0gbmZfY3RfdHVwbGVoYXNoX3RvX2N0cmFjayhoKTsKKworCQlzaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7CisJCXNpbi5zaW5fcG9ydCA9IGN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXQorCQkJLnR1cGxlLmRzdC51LnRjcC5wb3J0OworCQlzaW4uc2luX2FkZHIuc19hZGRyID0gY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdCisJCQkudHVwbGUuZHN0LnUzLmlwOworCisJCURFQlVHUCgiU09fT1JJR0lOQUxfRFNUOiAldS4ldS4ldS4ldSAldVxuIiwKKwkJICAgICAgIE5JUFFVQUQoc2luLnNpbl9hZGRyLnNfYWRkciksIG50b2hzKHNpbi5zaW5fcG9ydCkpOworCQluZl9jdF9wdXQoY3QpOworCQlpZiAoY29weV90b191c2VyKHVzZXIsICZzaW4sIHNpemVvZihzaW4pKSAhPSAwKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWVsc2UKKwkJCXJldHVybiAwOworCX0KKwlERUJVR1AoIlNPX09SSUdJTkFMX0RTVDogQ2FuJ3QgZmluZCAldS4ldS4ldS4ldS8ldS0ldS4ldS4ldS4ldS8ldS5cbiIsCisJICAgICAgIE5JUFFVQUQodHVwbGUuc3JjLnUzLmlwKSwgbnRvaHModHVwbGUuc3JjLnUudGNwLnBvcnQpLAorCSAgICAgICBOSVBRVUFEKHR1cGxlLmRzdC51My5pcCksIG50b2hzKHR1cGxlLmRzdC51LnRjcC5wb3J0KSk7CisJcmV0dXJuIC1FTk9FTlQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbmZfc29ja29wdF9vcHMgc29fZ2V0b3JpZ2RzdCA9IHsKKwkucGYJCT0gUEZfSU5FVCwKKwkuZ2V0X29wdG1pbgk9IFNPX09SSUdJTkFMX0RTVCwKKwkuZ2V0X29wdG1heAk9IFNPX09SSUdJTkFMX0RTVCsxLAorCS5nZXQJCT0gJmdldG9yaWdkc3QsCit9OworCitzdHJ1Y3QgbmZfY29ubnRyYWNrX2wzcHJvdG8gbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NCA9IHsKKwkubDNwcm90bwkgPSBQRl9JTkVULAorCS5uYW1lCQkgPSAiaXB2NCIsCisJLnBrdF90b190dXBsZQkgPSBpcHY0X3BrdF90b190dXBsZSwKKwkuaW52ZXJ0X3R1cGxlCSA9IGlwdjRfaW52ZXJ0X3R1cGxlLAorCS5wcmludF90dXBsZQkgPSBpcHY0X3ByaW50X3R1cGxlLAorCS5wcmludF9jb25udHJhY2sgPSBpcHY0X3ByaW50X2Nvbm50cmFjaywKKwkucHJlcGFyZQkgPSBpcHY0X3ByZXBhcmUsCisJLmdldF9mZWF0dXJlcwkgPSBpcHY0X2dldF9mZWF0dXJlcywKKwkubWUJCSA9IFRISVNfTU9EVUxFLAorfTsKKworZXh0ZXJuIHN0cnVjdCBuZl9jb25udHJhY2tfcHJvdG9jb2wgbmZfY29ubnRyYWNrX3Byb3RvY29sX3RjcDQ7CitleHRlcm4gc3RydWN0IG5mX2Nvbm50cmFja19wcm90b2NvbCBuZl9jb25udHJhY2tfcHJvdG9jb2xfdWRwNDsKK2V4dGVybiBzdHJ1Y3QgbmZfY29ubnRyYWNrX3Byb3RvY29sIG5mX2Nvbm50cmFja19wcm90b2NvbF9pY21wOworc3RhdGljIGludCBpbml0X29yX2NsZWFudXAoaW50IGluaXQpCit7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIWluaXQpIGdvdG8gY2xlYW51cDsKKworCXJldCA9IG5mX3JlZ2lzdGVyX3NvY2tvcHQoJnNvX2dldG9yaWdkc3QpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIHJlZ2lzdGVyIG5ldGZpbHRlciBzb2NrZXQgb3B0aW9uXG4iKTsKKwkJZ290byBjbGVhbnVwX25vdGhpbmc7CisJfQorCisJcmV0ID0gbmZfY29ubnRyYWNrX3Byb3RvY29sX3JlZ2lzdGVyKCZuZl9jb25udHJhY2tfcHJvdG9jb2xfdGNwNCk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKCJuZl9jb25udHJhY2tfaXB2NDogY2FuJ3QgcmVnaXN0ZXIgdGNwLlxuIik7CisJCWdvdG8gY2xlYW51cF9zb2Nrb3B0OworCX0KKworCXJldCA9IG5mX2Nvbm50cmFja19wcm90b2NvbF9yZWdpc3RlcigmbmZfY29ubnRyYWNrX3Byb3RvY29sX3VkcDQpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50aygibmZfY29ubnRyYWNrX2lwdjQ6IGNhbid0IHJlZ2lzdGVyIHVkcC5cbiIpOworCQlnb3RvIGNsZWFudXBfdGNwOworCX0KKworCXJldCA9IG5mX2Nvbm50cmFja19wcm90b2NvbF9yZWdpc3RlcigmbmZfY29ubnRyYWNrX3Byb3RvY29sX2ljbXApOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50aygibmZfY29ubnRyYWNrX2lwdjQ6IGNhbid0IHJlZ2lzdGVyIGljbXAuXG4iKTsKKwkJZ290byBjbGVhbnVwX3VkcDsKKwl9CisKKwlyZXQgPSBuZl9jb25udHJhY2tfbDNwcm90b19yZWdpc3RlcigmbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NCk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKCJuZl9jb25udHJhY2tfaXB2NDogY2FuJ3QgcmVnaXN0ZXIgaXB2NFxuIik7CisJCWdvdG8gY2xlYW51cF9pY21wOworCX0KKworCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2soJmlwdjRfY29ubnRyYWNrX2RlZnJhZ19vcHMpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50aygibmZfY29ubnRyYWNrX2lwdjQ6IGNhbid0IHJlZ2lzdGVyIHByZS1yb3V0aW5nIGRlZnJhZyBob29rLlxuIik7CisJCWdvdG8gY2xlYW51cF9pcHY0OworCX0KKwlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcHY0X2Nvbm50cmFja19kZWZyYWdfbG9jYWxfb3V0X29wcyk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKCJuZl9jb25udHJhY2tfaXB2NDogY2FuJ3QgcmVnaXN0ZXIgbG9jYWxfb3V0IGRlZnJhZyBob29rLlxuIik7CisJCWdvdG8gY2xlYW51cF9kZWZyYWdvcHM7CisJfQorCisJcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmaXB2NF9jb25udHJhY2tfaW5fb3BzKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoIm5mX2Nvbm50cmFja19pcHY0OiBjYW4ndCByZWdpc3RlciBwcmUtcm91dGluZyBob29rLlxuIik7CisJCWdvdG8gY2xlYW51cF9kZWZyYWdsb2NhbG9wczsKKwl9CisKKwlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcHY0X2Nvbm50cmFja19sb2NhbF9vdXRfb3BzKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoIm5mX2Nvbm50cmFja19pcHY0OiBjYW4ndCByZWdpc3RlciBsb2NhbCBvdXQgaG9vay5cbiIpOworCQlnb3RvIGNsZWFudXBfaW5vcHM7CisJfQorCisJcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmaXB2NF9jb25udHJhY2tfaGVscGVyX2luX29wcyk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKCJuZl9jb25udHJhY2tfaXB2NDogY2FuJ3QgcmVnaXN0ZXIgbG9jYWwgaGVscGVyIGhvb2suXG4iKTsKKwkJZ290byBjbGVhbnVwX2luYW5kbG9jYWxvcHM7CisJfQorCisJcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmaXB2NF9jb25udHJhY2tfaGVscGVyX291dF9vcHMpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50aygibmZfY29ubnRyYWNrX2lwdjQ6IGNhbid0IHJlZ2lzdGVyIHBvc3Ryb3V0aW5nIGhlbHBlciBob29rLlxuIik7CisJCWdvdG8gY2xlYW51cF9oZWxwZXJpbm9wczsKKwl9CisKKwlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcHY0X2Nvbm50cmFja19vdXRfb3BzKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoIm5mX2Nvbm50cmFja19pcHY0OiBjYW4ndCByZWdpc3RlciBwb3N0LXJvdXRpbmcgaG9vay5cbiIpOworCQlnb3RvIGNsZWFudXBfaGVscGVyb3V0b3BzOworCX0KKworCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2soJmlwdjRfY29ubnRyYWNrX2xvY2FsX2luX29wcyk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKCJuZl9jb25udHJhY2tfaXB2NDogY2FuJ3QgcmVnaXN0ZXIgbG9jYWwgaW4gaG9vay5cbiIpOworCQlnb3RvIGNsZWFudXBfaW5vdXRhbmRsb2NhbG9wczsKKwl9CisKKyNpZmRlZiBDT05GSUdfU1lTQ1RMCisJbmZfY3RfaXB2NF9zeXNjdGxfaGVhZGVyID0gcmVnaXN0ZXJfc3lzY3RsX3RhYmxlKG5mX2N0X25ldF90YWJsZSwgMCk7CisJaWYgKG5mX2N0X2lwdjRfc3lzY3RsX2hlYWRlciA9PSBOVUxMKSB7CisJCXByaW50aygibmZfY29ubnRyYWNrOiBjYW4ndCByZWdpc3RlciB0byBzeXNjdGwuXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBjbGVhbnVwX2xvY2FsaW5vcHM7CisJfQorI2VuZGlmCisKKwkvKiBGb3IgdXNlIGJ5IFJFSkVDVCB0YXJnZXQgKi8KKwlpcF9jdF9hdHRhY2ggPSBfX25mX2Nvbm50cmFja19hdHRhY2g7CisKKwlyZXR1cm4gcmV0OworCisgY2xlYW51cDoKKwlzeW5jaHJvbml6ZV9uZXQoKTsKKwlpcF9jdF9hdHRhY2ggPSBOVUxMOworI2lmZGVmIENPTkZJR19TWVNDVEwKKyAJdW5yZWdpc3Rlcl9zeXNjdGxfdGFibGUobmZfY3RfaXB2NF9zeXNjdGxfaGVhZGVyKTsKKyBjbGVhbnVwX2xvY2FsaW5vcHM6CisjZW5kaWYKKwluZl91bnJlZ2lzdGVyX2hvb2soJmlwdjRfY29ubnRyYWNrX2xvY2FsX2luX29wcyk7CisgY2xlYW51cF9pbm91dGFuZGxvY2Fsb3BzOgorCW5mX3VucmVnaXN0ZXJfaG9vaygmaXB2NF9jb25udHJhY2tfb3V0X29wcyk7CisgY2xlYW51cF9oZWxwZXJvdXRvcHM6CisJbmZfdW5yZWdpc3Rlcl9ob29rKCZpcHY0X2Nvbm50cmFja19oZWxwZXJfb3V0X29wcyk7CisgY2xlYW51cF9oZWxwZXJpbm9wczoKKwluZl91bnJlZ2lzdGVyX2hvb2soJmlwdjRfY29ubnRyYWNrX2hlbHBlcl9pbl9vcHMpOworIGNsZWFudXBfaW5hbmRsb2NhbG9wczoKKwluZl91bnJlZ2lzdGVyX2hvb2soJmlwdjRfY29ubnRyYWNrX2xvY2FsX291dF9vcHMpOworIGNsZWFudXBfaW5vcHM6CisJbmZfdW5yZWdpc3Rlcl9ob29rKCZpcHY0X2Nvbm50cmFja19pbl9vcHMpOworIGNsZWFudXBfZGVmcmFnbG9jYWxvcHM6CisJbmZfdW5yZWdpc3Rlcl9ob29rKCZpcHY0X2Nvbm50cmFja19kZWZyYWdfbG9jYWxfb3V0X29wcyk7CisgY2xlYW51cF9kZWZyYWdvcHM6CisJbmZfdW5yZWdpc3Rlcl9ob29rKCZpcHY0X2Nvbm50cmFja19kZWZyYWdfb3BzKTsKKyBjbGVhbnVwX2lwdjQ6CisJbmZfY29ubnRyYWNrX2wzcHJvdG9fdW5yZWdpc3RlcigmbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NCk7CisgY2xlYW51cF9pY21wOgorCW5mX2Nvbm50cmFja19wcm90b2NvbF91bnJlZ2lzdGVyKCZuZl9jb25udHJhY2tfcHJvdG9jb2xfaWNtcCk7CisgY2xlYW51cF91ZHA6CisJbmZfY29ubnRyYWNrX3Byb3RvY29sX3VucmVnaXN0ZXIoJm5mX2Nvbm50cmFja19wcm90b2NvbF91ZHA0KTsKKyBjbGVhbnVwX3RjcDoKKwluZl9jb25udHJhY2tfcHJvdG9jb2xfdW5yZWdpc3RlcigmbmZfY29ubnRyYWNrX3Byb3RvY29sX3RjcDQpOworIGNsZWFudXBfc29ja29wdDoKKwluZl91bnJlZ2lzdGVyX3NvY2tvcHQoJnNvX2dldG9yaWdkc3QpOworIGNsZWFudXBfbm90aGluZzoKKwlyZXR1cm4gcmV0OworfQorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXQodm9pZCkKK3sKKwluZWVkX25mX2Nvbm50cmFjaygpOworCXJldHVybiBpbml0X29yX2NsZWFudXAoMSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBmaW5pKHZvaWQpCit7CisJaW5pdF9vcl9jbGVhbnVwKDApOworfQorCittb2R1bGVfaW5pdChpbml0KTsKK21vZHVsZV9leGl0KGZpbmkpOworCit2b2lkIG5lZWRfaXBfY29ubnRyYWNrKHZvaWQpCit7Cit9CisKK0VYUE9SVF9TWU1CT0wobmVlZF9pcF9jb25udHJhY2spOworRVhQT1JUX1NZTUJPTChuZl9jdF9pcHY0X2dhdGhlcl9mcmFncyk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXAuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkZGI1YzAKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXAuYwpAQCAtMCwwICsxLDMwMSBAQAorLyogKEMpIDE5OTktMjAwMSBQYXVsIGBSdXN0eScgUnVzc2VsbAorICogKEMpIDIwMDItMjAwNCBOZXRmaWx0ZXIgQ29yZSBUZWFtIDxjb3JldGVhbUBuZXRmaWx0ZXIub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogMTYgRGVjIDIwMDM6IFlhc3V5dWtpIEtvemFrYWkgQFVTQUdJIDx5YXN1eXVraS5rb3pha2FpQHRvc2hpYmEuY28uanA+CisgKgktIGVuYWJsZSB3b3JraW5nIHdpdGggTGF5ZXIgMyBwcm90b2NvbCBpbmRlcGVuZGVudCBjb25uZWN0aW9uIHRyYWNraW5nLgorICoKKyAqIERlcml2ZWQgZnJvbSBuZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX2ljbXAuYworICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L2ljbXAuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPG5ldC9pcC5oPgorI2luY2x1ZGUgPG5ldC9jaGVja3N1bS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0Lmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGUuaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b2NvbC5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuaD4KKwordW5zaWduZWQgbG9uZyBuZl9jdF9pY21wX3RpbWVvdXQgPSAzMCpIWjsKKworI2lmIDAKKyNkZWZpbmUgREVCVUdQIHByaW50aworI2Vsc2UKKyNkZWZpbmUgREVCVUdQKGZvcm1hdCwgYXJncy4uLikKKyNlbmRpZgorCitzdGF0aWMgaW50IGljbXBfcGt0X3RvX3R1cGxlKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCisJCQkgICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLAorCQkJICAgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSkKK3sKKwlzdHJ1Y3QgaWNtcGhkciBfaGRyLCAqaHA7CisKKwlocCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIGRhdGFvZmYsIHNpemVvZihfaGRyKSwgJl9oZHIpOworCWlmIChocCA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCXR1cGxlLT5kc3QudS5pY21wLnR5cGUgPSBocC0+dHlwZTsKKwl0dXBsZS0+c3JjLnUuaWNtcC5pZCA9IGhwLT51bi5lY2hvLmlkOworCXR1cGxlLT5kc3QudS5pY21wLmNvZGUgPSBocC0+Y29kZTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGljbXBfaW52ZXJ0X3R1cGxlKHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICpvcmlnKQoreworCS8qIEFkZCAxOyBzcGFjZXMgZmlsbGVkIHdpdGggMC4gKi8KKwlzdGF0aWMgdV9pbnQ4X3QgaW52bWFwW10KKwkJPSB7IFtJQ01QX0VDSE9dID0gSUNNUF9FQ0hPUkVQTFkgKyAxLAorCQkgICAgW0lDTVBfRUNIT1JFUExZXSA9IElDTVBfRUNITyArIDEsCisJCSAgICBbSUNNUF9USU1FU1RBTVBdID0gSUNNUF9USU1FU1RBTVBSRVBMWSArIDEsCisJCSAgICBbSUNNUF9USU1FU1RBTVBSRVBMWV0gPSBJQ01QX1RJTUVTVEFNUCArIDEsCisJCSAgICBbSUNNUF9JTkZPX1JFUVVFU1RdID0gSUNNUF9JTkZPX1JFUExZICsgMSwKKwkJICAgIFtJQ01QX0lORk9fUkVQTFldID0gSUNNUF9JTkZPX1JFUVVFU1QgKyAxLAorCQkgICAgW0lDTVBfQUREUkVTU10gPSBJQ01QX0FERFJFU1NSRVBMWSArIDEsCisJCSAgICBbSUNNUF9BRERSRVNTUkVQTFldID0gSUNNUF9BRERSRVNTICsgMX07CisKKwlpZiAob3JpZy0+ZHN0LnUuaWNtcC50eXBlID49IHNpemVvZihpbnZtYXApCisJICAgIHx8ICFpbnZtYXBbb3JpZy0+ZHN0LnUuaWNtcC50eXBlXSkKKwkJcmV0dXJuIDA7CisKKwl0dXBsZS0+c3JjLnUuaWNtcC5pZCA9IG9yaWctPnNyYy51LmljbXAuaWQ7CisJdHVwbGUtPmRzdC51LmljbXAudHlwZSA9IGludm1hcFtvcmlnLT5kc3QudS5pY21wLnR5cGVdIC0gMTsKKwl0dXBsZS0+ZHN0LnUuaWNtcC5jb2RlID0gb3JpZy0+ZHN0LnUuaWNtcC5jb2RlOworCXJldHVybiAxOworfQorCisvKiBQcmludCBvdXQgdGhlIHBlci1wcm90b2NvbCBwYXJ0IG9mIHRoZSB0dXBsZS4gKi8KK3N0YXRpYyBpbnQgaWNtcF9wcmludF90dXBsZShzdHJ1Y3Qgc2VxX2ZpbGUgKnMsCisJCQkgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpCit7CisJcmV0dXJuIHNlcV9wcmludGYocywgInR5cGU9JXUgY29kZT0ldSBpZD0ldSAiLAorCQkJICB0dXBsZS0+ZHN0LnUuaWNtcC50eXBlLAorCQkJICB0dXBsZS0+ZHN0LnUuaWNtcC5jb2RlLAorCQkJICBudG9ocyh0dXBsZS0+c3JjLnUuaWNtcC5pZCkpOworfQorCisvKiBQcmludCBvdXQgdGhlIHByaXZhdGUgcGFydCBvZiB0aGUgY29ubnRyYWNrLiAqLworc3RhdGljIGludCBpY21wX3ByaW50X2Nvbm50cmFjayhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsCisJCQkJY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmNvbm50cmFjaykKK3sKKwlyZXR1cm4gMDsKK30KKworLyogUmV0dXJucyB2ZXJkaWN0IGZvciBwYWNrZXQsIG9yIC0xIGZvciBpbnZhbGlkLiAqLworc3RhdGljIGludCBpY21wX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsCisJCSAgICAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkgICAgICAgdW5zaWduZWQgaW50IGRhdGFvZmYsCisJCSAgICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJICAgICAgIGludCBwZiwKKwkJICAgICAgIHVuc2lnbmVkIGludCBob29rbnVtKQoreworCS8qIFRyeSB0byBkZWxldGUgY29ubmVjdGlvbiBpbW1lZGlhdGVseSBhZnRlciBhbGwgcmVwbGllczoKKyAgICAgICAgICAgd29uJ3QgYWN0dWFsbHkgdmFuaXNoIGFzIHdlIHN0aWxsIGhhdmUgc2tiLCBhbmQgZGVsX3RpbWVyCisgICAgICAgICAgIG1lYW5zIHRoaXMgd2lsbCBvbmx5IHJ1biBvbmNlIGV2ZW4gaWYgY291bnQgaGl0cyB6ZXJvIHR3aWNlCisgICAgICAgICAgICh0aGVvcmV0aWNhbGx5IHBvc3NpYmxlIHdpdGggU01QKSAqLworCWlmIChDVElORk8yRElSKGN0aW5mbykgPT0gSVBfQ1RfRElSX1JFUExZKSB7CisJCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZjdC0+cHJvdG8uaWNtcC5jb3VudCkKKwkJICAgICYmIGRlbF90aW1lcigmY3QtPnRpbWVvdXQpKQorCQkJY3QtPnRpbWVvdXQuZnVuY3Rpb24oKHVuc2lnbmVkIGxvbmcpY3QpOworCX0gZWxzZSB7CisJCWF0b21pY19pbmMoJmN0LT5wcm90by5pY21wLmNvdW50KTsKKwkJbmZfY29ubnRyYWNrX2V2ZW50X2NhY2hlKElQQ1RfUFJPVE9JTkZPX1ZPTEFUSUxFLCBza2IpOworCQluZl9jdF9yZWZyZXNoX2FjY3QoY3QsIGN0aW5mbywgc2tiLCBuZl9jdF9pY21wX3RpbWVvdXQpOworCX0KKworCXJldHVybiBORl9BQ0NFUFQ7Cit9CisKKy8qIENhbGxlZCB3aGVuIGEgbmV3IGNvbm5lY3Rpb24gZm9yIHRoaXMgcHJvdG9jb2wgZm91bmQuICovCitzdGF0aWMgaW50IGljbXBfbmV3KHN0cnVjdCBuZl9jb25uICpjb25udHJhY2ssCisJCSAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgZGF0YW9mZikKK3sKKwlzdGF0aWMgdV9pbnQ4X3QgdmFsaWRfbmV3W10KKwkJPSB7IFtJQ01QX0VDSE9dID0gMSwKKwkJICAgIFtJQ01QX1RJTUVTVEFNUF0gPSAxLAorCQkgICAgW0lDTVBfSU5GT19SRVFVRVNUXSA9IDEsCisJCSAgICBbSUNNUF9BRERSRVNTXSA9IDEgfTsKKworCWlmIChjb25udHJhY2stPnR1cGxlaGFzaFswXS50dXBsZS5kc3QudS5pY21wLnR5cGUgPj0gc2l6ZW9mKHZhbGlkX25ldykKKwkgICAgfHwgIXZhbGlkX25ld1tjb25udHJhY2stPnR1cGxlaGFzaFswXS50dXBsZS5kc3QudS5pY21wLnR5cGVdKSB7CisJCS8qIENhbid0IGNyZWF0ZSBhIG5ldyBJQ01QIGBjb25uJyB3aXRoIHRoaXMuICovCisJCURFQlVHUCgiaWNtcDogY2FuJ3QgY3JlYXRlIG5ldyBjb25uIHdpdGggdHlwZSAldVxuIiwKKwkJICAgICAgIGNvbm50cmFjay0+dHVwbGVoYXNoWzBdLnR1cGxlLmRzdC51LmljbXAudHlwZSk7CisJCU5GX0NUX0RVTVBfVFVQTEUoJmNvbm50cmFjay0+dHVwbGVoYXNoWzBdLnR1cGxlKTsKKwkJcmV0dXJuIDA7CisJfQorCWF0b21pY19zZXQoJmNvbm50cmFjay0+cHJvdG8uaWNtcC5jb3VudCwgMCk7CisJcmV0dXJuIDE7Cit9CisKK2V4dGVybiBzdHJ1Y3QgbmZfY29ubnRyYWNrX2wzcHJvdG8gbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NDsKKy8qIFJldHVybnMgY29ubnRyYWNrIGlmIGl0IGRlYWx0IHdpdGggSUNNUCwgYW5kIGZpbGxlZCBpbiBza2IgZmllbGRzICovCitzdGF0aWMgaW50CitpY21wX2Vycm9yX21lc3NhZ2Uoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKyAgICAgICAgICAgICAgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyAqY3RpbmZvLAorICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaG9va251bSkKK3sKKwlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlIGlubmVydHVwbGUsIG9yaWd0dXBsZTsKKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgaWNtcGhkciBpY21wOworCQlzdHJ1Y3QgaXBoZHIgaXA7CisJfSBfaW4sICppbnNpZGU7CisJc3RydWN0IG5mX2Nvbm50cmFja19wcm90b2NvbCAqaW5uZXJwcm90bzsKKwlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX2hhc2ggKmg7CisJaW50IGRhdGFvZmY7CisKKwlORl9DVF9BU1NFUlQoc2tiLT5uZmN0ID09IE5VTEwpOworCisJLyogTm90IGVub3VnaCBoZWFkZXI/ICovCisJaW5zaWRlID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgc2tiLT5uaC5pcGgtPmlobCo0LCBzaXplb2YoX2luKSwgJl9pbik7CisJaWYgKGluc2lkZSA9PSBOVUxMKQorCQlyZXR1cm4gLU5GX0FDQ0VQVDsKKworCS8qIElnbm9yZSBJQ01QJ3MgY29udGFpbmluZyBmcmFnbWVudHMgKHNob3VsZG4ndCBoYXBwZW4pICovCisJaWYgKGluc2lkZS0+aXAuZnJhZ19vZmYgJiBodG9ucyhJUF9PRkZTRVQpKSB7CisJCURFQlVHUCgiaWNtcF9lcnJvcl9tZXNzYWdlOiBmcmFnbWVudCBvZiBwcm90byAldVxuIiwKKwkJICAgICAgIGluc2lkZS0+aXAucHJvdG9jb2wpOworCQlyZXR1cm4gLU5GX0FDQ0VQVDsKKwl9CisKKwlpbm5lcnByb3RvID0gbmZfY3RfZmluZF9wcm90byhQRl9JTkVULCBpbnNpZGUtPmlwLnByb3RvY29sKTsKKwlkYXRhb2ZmID0gc2tiLT5uaC5pcGgtPmlobCo0ICsgc2l6ZW9mKGluc2lkZS0+aWNtcCk7CisJLyogQXJlIHRoZXkgdGFsa2luZyBhYm91dCBvbmUgb2Ygb3VyIGNvbm5lY3Rpb25zPyAqLworCWlmICghbmZfY3RfZ2V0X3R1cGxlKHNrYiwgZGF0YW9mZiwgZGF0YW9mZiArIGluc2lkZS0+aXAuaWhsKjQsIFBGX0lORVQsCisJCQkgICAgIGluc2lkZS0+aXAucHJvdG9jb2wsICZvcmlndHVwbGUsCisJCQkgICAgICZuZl9jb25udHJhY2tfbDNwcm90b19pcHY0LCBpbm5lcnByb3RvKSkgeworCQlERUJVR1AoImljbXBfZXJyb3JfbWVzc2FnZTogISBnZXRfdHVwbGUgcD0ldSIsCisJCSAgICAgICBpbnNpZGUtPmlwLnByb3RvY29sKTsKKwkJcmV0dXJuIC1ORl9BQ0NFUFQ7CisJfQorCisgICAgICAgIC8qIE9yZGluYXJpbHksIHdlJ2QgZXhwZWN0IHRoZSBpbnZlcnRlZCB0dXBsZXByb3RvLCBidXQgaXQncworICAgICAgICAgICBiZWVuIHByZXNlcnZlZCBpbnNpZGUgdGhlIElDTVAuICovCisgICAgICAgIGlmICghbmZfY3RfaW52ZXJ0X3R1cGxlKCZpbm5lcnR1cGxlLCAmb3JpZ3R1cGxlLAorCQkJCSZuZl9jb25udHJhY2tfbDNwcm90b19pcHY0LCBpbm5lcnByb3RvKSkgeworCQlERUJVR1AoImljbXBfZXJyb3JfbWVzc2FnZTogbm8gbWF0Y2hcbiIpOworCQlyZXR1cm4gLU5GX0FDQ0VQVDsKKwl9CisKKwkqY3RpbmZvID0gSVBfQ1RfUkVMQVRFRDsKKworCWggPSBuZl9jb25udHJhY2tfZmluZF9nZXQoJmlubmVydHVwbGUsIE5VTEwpOworCWlmICghaCkgeworCQkvKiBMb2NhbGx5IGdlbmVyYXRlZCBJQ01QcyB3aWxsIG1hdGNoIGludmVydGVkIGlmIHRoZXkKKwkJICAgaGF2ZW4ndCBiZWVuIFNOQVQnZWQgeWV0ICovCisJCS8qIEZJWE1FOiBOQVQgY29kZSBoYXMgdG8gaGFuZGxlIGhhbGYtZG9uZSBkb3VibGUgTkFUIC0tUlIgKi8KKwkJaWYgKGhvb2tudW0gPT0gTkZfSVBfTE9DQUxfT1VUKQorCQkJaCA9IG5mX2Nvbm50cmFja19maW5kX2dldCgmb3JpZ3R1cGxlLCBOVUxMKTsKKworCQlpZiAoIWgpIHsKKwkJCURFQlVHUCgiaWNtcF9lcnJvcl9tZXNzYWdlOiBubyBtYXRjaFxuIik7CisJCQlyZXR1cm4gLU5GX0FDQ0VQVDsKKwkJfQorCisJCS8qIFJldmVyc2UgZGlyZWN0aW9uIGZyb20gdGhhdCBmb3VuZCAqLworCQlpZiAoTkZfQ1RfRElSRUNUSU9OKGgpID09IElQX0NUX0RJUl9SRVBMWSkKKwkJCSpjdGluZm8gKz0gSVBfQ1RfSVNfUkVQTFk7CisJfSBlbHNlIHsKKwkJaWYgKE5GX0NUX0RJUkVDVElPTihoKSA9PSBJUF9DVF9ESVJfUkVQTFkpCisJCQkqY3RpbmZvICs9IElQX0NUX0lTX1JFUExZOworCX0KKworICAgICAgICAvKiBVcGRhdGUgc2tiIHRvIHJlZmVyIHRvIHRoaXMgY29ubmVjdGlvbiAqLworICAgICAgICBza2ItPm5mY3QgPSAmbmZfY3RfdHVwbGVoYXNoX3RvX2N0cmFjayhoKS0+Y3RfZ2VuZXJhbDsKKyAgICAgICAgc2tiLT5uZmN0aW5mbyA9ICpjdGluZm87CisgICAgICAgIHJldHVybiAtTkZfQUNDRVBUOworfQorCisvKiBTbWFsbCBhbmQgbW9kaWZpZWQgdmVyc2lvbiBvZiBpY21wX3JjdiAqLworc3RhdGljIGludAoraWNtcF9lcnJvcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgZGF0YW9mZiwKKwkgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvICpjdGluZm8sIGludCBwZiwgdW5zaWduZWQgaW50IGhvb2tudW0pCit7CisJc3RydWN0IGljbXBoZHIgX2loLCAqaWNtcGg7CisKKwkvKiBOb3QgZW5vdWdoIGhlYWRlcj8gKi8KKwlpY21waCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHNrYi0+bmguaXBoLT5paGwqNCwgc2l6ZW9mKF9paCksICZfaWgpOworCWlmIChpY21waCA9PSBOVUxMKSB7CisJCWlmIChMT0dfSU5WQUxJRChJUFBST1RPX0lDTVApKQorCQkJbmZfbG9nX3BhY2tldChQRl9JTkVULCAwLCBza2IsIE5VTEwsIE5VTEwsIE5VTEwsCisJCQkJICAgICAgIm5mX2N0X2ljbXA6IHNob3J0IHBhY2tldCAiKTsKKwkJcmV0dXJuIC1ORl9BQ0NFUFQ7CisJfQorCisJLyogU2VlIGlwX2Nvbm50cmFja19wcm90b190Y3AuYyAqLworCWlmIChob29rbnVtICE9IE5GX0lQX1BSRV9ST1VUSU5HKQorCQlnb3RvIGNoZWNrc3VtX3NraXBwZWQ7CisKKwlzd2l0Y2ggKHNrYi0+aXBfc3VtbWVkKSB7CisJY2FzZSBDSEVDS1NVTV9IVzoKKwkJaWYgKCEodTE2KWNzdW1fZm9sZChza2ItPmNzdW0pKQorCQkJYnJlYWs7CisJCWlmIChMT0dfSU5WQUxJRChJUFBST1RPX0lDTVApKQorCQkJbmZfbG9nX3BhY2tldChQRl9JTkVULCAwLCBza2IsIE5VTEwsIE5VTEwsIE5VTEwsCisJCQkJICAgICAgIm5mX2N0X2ljbXA6IGJhZCBIVyBJQ01QIGNoZWNrc3VtICIpOworCQlyZXR1cm4gLU5GX0FDQ0VQVDsKKwljYXNlIENIRUNLU1VNX05PTkU6CisJCWlmICgodTE2KWNzdW1fZm9sZChza2JfY2hlY2tzdW0oc2tiLCAwLCBza2ItPmxlbiwgMCkpKSB7CisJCQlpZiAoTE9HX0lOVkFMSUQoSVBQUk9UT19JQ01QKSkKKwkJCQluZl9sb2dfcGFja2V0KFBGX0lORVQsIDAsIHNrYiwgTlVMTCwgTlVMTCwKKwkJCQkJICAgICAgTlVMTCwKKwkJCQkJICAgICAgIm5mX2N0X2ljbXA6IGJhZCBJQ01QIGNoZWNrc3VtICIpOworCQkJcmV0dXJuIC1ORl9BQ0NFUFQ7CisJCX0KKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKK2NoZWNrc3VtX3NraXBwZWQ6CisJLyoKKwkgKgkxOCBpcyB0aGUgaGlnaGVzdCAna25vd24nIElDTVAgdHlwZS4gQW55dGhpbmcgZWxzZSBpcyBhIG15c3RlcnkKKwkgKgorCSAqCVJGQyAxMTIyOiAzLjIuMiAgVW5rbm93biBJQ01QIG1lc3NhZ2VzIHR5cGVzIE1VU1QgYmUgc2lsZW50bHkKKwkgKgkJICBkaXNjYXJkZWQuCisJICovCisJaWYgKGljbXBoLT50eXBlID4gTlJfSUNNUF9UWVBFUykgeworCQlpZiAoTE9HX0lOVkFMSUQoSVBQUk9UT19JQ01QKSkKKwkJCW5mX2xvZ19wYWNrZXQoUEZfSU5FVCwgMCwgc2tiLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkJCSAgICAgICJuZl9jdF9pY21wOiBpbnZhbGlkIElDTVAgdHlwZSAiKTsKKwkJcmV0dXJuIC1ORl9BQ0NFUFQ7CisJfQorCisJLyogTmVlZCB0byB0cmFjayBpY21wIGVycm9yIG1lc3NhZ2U/ICovCisJaWYgKGljbXBoLT50eXBlICE9IElDTVBfREVTVF9VTlJFQUNICisJICAgICYmIGljbXBoLT50eXBlICE9IElDTVBfU09VUkNFX1FVRU5DSAorCSAgICAmJiBpY21waC0+dHlwZSAhPSBJQ01QX1RJTUVfRVhDRUVERUQKKwkgICAgJiYgaWNtcGgtPnR5cGUgIT0gSUNNUF9QQVJBTUVURVJQUk9CCisJICAgICYmIGljbXBoLT50eXBlICE9IElDTVBfUkVESVJFQ1QpCisJCXJldHVybiBORl9BQ0NFUFQ7CisKKwlyZXR1cm4gaWNtcF9lcnJvcl9tZXNzYWdlKHNrYiwgY3RpbmZvLCBob29rbnVtKTsKK30KKworc3RydWN0IG5mX2Nvbm50cmFja19wcm90b2NvbCBuZl9jb25udHJhY2tfcHJvdG9jb2xfaWNtcCA9Cit7CisJLmxpc3QJCQk9IHsgTlVMTCwgTlVMTCB9LAorCS5sM3Byb3RvCQk9IFBGX0lORVQsCisJLnByb3RvCQkJPSBJUFBST1RPX0lDTVAsCisJLm5hbWUJCQk9ICJpY21wIiwKKwkucGt0X3RvX3R1cGxlCQk9IGljbXBfcGt0X3RvX3R1cGxlLAorCS5pbnZlcnRfdHVwbGUJCT0gaWNtcF9pbnZlcnRfdHVwbGUsCisJLnByaW50X3R1cGxlCQk9IGljbXBfcHJpbnRfdHVwbGUsCisJLnByaW50X2Nvbm50cmFjawk9IGljbXBfcHJpbnRfY29ubnRyYWNrLAorCS5wYWNrZXQJCQk9IGljbXBfcGFja2V0LAorCS5uZXcJCQk9IGljbXBfbmV3LAorCS5lcnJvcgkJCT0gaWNtcF9lcnJvciwKKwkuZGVzdHJveQkJPSBOVUxMLAorCS5tZQkJCT0gTlVMTAorfTsKKworRVhQT1JUX1NZTUJPTChuZl9jb25udHJhY2tfcHJvdG9jb2xfaWNtcCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYyBiL25ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jCmluZGV4IDY1MjY4NTYuLjAxNDQ0YTAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jCisrKyBiL25ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jCkBAIC02NDUsNiArNjQ1LDE0IEBACiAJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY190Y3BfY29uZ2VzdGlvbl9jb250cm9sLAogCQkuc3RyYXRlZ3kJPSAmc3lzY3RsX3RjcF9jb25nZXN0aW9uX2NvbnRyb2wsCiAJfSwKKwl7CisJCS5jdGxfbmFtZQk9IE5FVF9UQ1BfQUJDLAorCQkucHJvY25hbWUJPSAidGNwX2FiYyIsCisJCS5kYXRhCQk9ICZzeXNjdGxfdGNwX2FiYywKKwkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKKwkJLm1vZGUJCT0gMDY0NCwKKwkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjLAorCX0sCiAKIAl7IC5jdGxfbmFtZSA9IDAgfQogfTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcC5jIGIvbmV0L2lwdjQvdGNwLmMKaW5kZXggNzJiN2MyMi4uOWFjN2E0ZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwLmMKKysrIGIvbmV0L2lwdjQvdGNwLmMKQEAgLTE2NDAsNyArMTY0MCw3IEBACiAJfSBlbHNlIGlmICh0Y3BfbmVlZF9yZXNldChvbGRfc3RhdGUpIHx8CiAJCSAgICh0cC0+c25kX254dCAhPSB0cC0+d3JpdGVfc2VxICYmCiAJCSAgICAoMSA8PCBvbGRfc3RhdGUpICYgKFRDUEZfQ0xPU0lORyB8IFRDUEZfTEFTVF9BQ0spKSkgewotCQkvKiBUaGUgbGFzdCBjaGVjayBhZGp1c3RzIGZvciBkaXNjcmVwYW5jZSBvZiBMaW51eCB3cnQuIFJGQworCQkvKiBUaGUgbGFzdCBjaGVjayBhZGp1c3RzIGZvciBkaXNjcmVwYW5jeSBvZiBMaW51eCB3cnQuIFJGQwogCQkgKiBzdGF0ZXMKIAkJICovCiAJCXRjcF9zZW5kX2FjdGl2ZV9yZXNldChzaywgZ2ZwX2FueSgpKTsKQEAgLTE2NjksNiArMTY2OSw3IEBACiAJdHAtPnBhY2tldHNfb3V0ID0gMDsKIAl0cC0+c25kX3NzdGhyZXNoID0gMHg3ZmZmZmZmZjsKIAl0cC0+c25kX2N3bmRfY250ID0gMDsKKwl0cC0+Ynl0ZXNfYWNrZWQgPSAwOwogCXRjcF9zZXRfY2Ffc3RhdGUoc2ssIFRDUF9DQV9PcGVuKTsKIAl0Y3BfY2xlYXJfcmV0cmFucyh0cCk7CiAJaW5ldF9jc2tfZGVsYWNrX2luaXQoc2spOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2JpYy5jIGIvbmV0L2lwdjQvdGNwX2JpYy5jCmluZGV4IGFlMzVlMDYuLjFkMGNkODYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9iaWMuYworKysgYi9uZXQvaXB2NC90Y3BfYmljLmMKQEAgLTIxNywxNyArMjE3LDE1IEBACiAKIAliaWN0Y3BfbG93X3V0aWxpemF0aW9uKHNrLCBkYXRhX2Fja2VkKTsKIAotCWlmIChpbl9mbGlnaHQgPCB0cC0+c25kX2N3bmQpCisJaWYgKCF0Y3BfaXNfY3duZF9saW1pdGVkKHNrLCBpbl9mbGlnaHQpKQogCQlyZXR1cm47CiAKLQlpZiAodHAtPnNuZF9jd25kIDw9IHRwLT5zbmRfc3N0aHJlc2gpIHsKLQkJLyogSW4gInNhZmUiIGFyZWEsIGluY3JlYXNlLiAqLwotCQlpZiAodHAtPnNuZF9jd25kIDwgdHAtPnNuZF9jd25kX2NsYW1wKQotCQkJdHAtPnNuZF9jd25kKys7Ci0JfSBlbHNlIHsKKwlpZiAodHAtPnNuZF9jd25kIDw9IHRwLT5zbmRfc3N0aHJlc2gpCisJCXRjcF9zbG93X3N0YXJ0KHRwKTsKKwllbHNlIHsKIAkJYmljdGNwX3VwZGF0ZShjYSwgdHAtPnNuZF9jd25kKTsKIAotICAgICAgICAgICAgICAgIC8qIEluIGRhbmdlcm91cyBhcmVhLCBpbmNyZWFzZSBzbG93bHkuCisJCS8qIEluIGRhbmdlcm91cyBhcmVhLCBpbmNyZWFzZSBzbG93bHkuCiAJCSAqIEluIHRoZW9yeSB0aGlzIGlzIHRwLT5zbmRfY3duZCArPSAxIC8gdHAtPnNuZF9jd25kCiAJCSAqLwogCQlpZiAodHAtPnNuZF9jd25kX2NudCA+PSBjYS0+Y250KSB7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfY29uZy5jIGIvbmV0L2lwdjQvdGNwX2NvbmcuYwppbmRleCBiYmYyZDY2Li5jN2NjNjJjIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfY29uZy5jCisrKyBiL25ldC9pcHY0L3RjcF9jb25nLmMKQEAgLTE4NiwyNCArMTg2LDMyIEBACiB7CiAJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CiAKLQlpZiAoaW5fZmxpZ2h0IDwgdHAtPnNuZF9jd25kKQorCWlmICghdGNwX2lzX2N3bmRfbGltaXRlZChzaywgaW5fZmxpZ2h0KSkKIAkJcmV0dXJuOwogCi0gICAgICAgIGlmICh0cC0+c25kX2N3bmQgPD0gdHAtPnNuZF9zc3RocmVzaCkgewotICAgICAgICAgICAgICAgIC8qIEluICJzYWZlIiBhcmVhLCBpbmNyZWFzZS4gKi8KLQkJaWYgKHRwLT5zbmRfY3duZCA8IHRwLT5zbmRfY3duZF9jbGFtcCkKLQkJCXRwLT5zbmRfY3duZCsrOwotCX0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLyogSW4gZGFuZ2Vyb3VzIGFyZWEsIGluY3JlYXNlIHNsb3dseS4KLQkJICogSW4gdGhlb3J5IHRoaXMgaXMgdHAtPnNuZF9jd25kICs9IDEgLyB0cC0+c25kX2N3bmQKLQkJICovCi0JCWlmICh0cC0+c25kX2N3bmRfY250ID49IHRwLT5zbmRfY3duZCkgewotCQkJaWYgKHRwLT5zbmRfY3duZCA8IHRwLT5zbmRfY3duZF9jbGFtcCkKLQkJCQl0cC0+c25kX2N3bmQrKzsKLQkJCXRwLT5zbmRfY3duZF9jbnQgPSAwOwotCQl9IGVsc2UKLQkJCXRwLT5zbmRfY3duZF9jbnQrKzsKLQl9CisJLyogSW4gInNhZmUiIGFyZWEsIGluY3JlYXNlLiAqLworICAgICAgICBpZiAodHAtPnNuZF9jd25kIDw9IHRwLT5zbmRfc3N0aHJlc2gpCisJCXRjcF9zbG93X3N0YXJ0KHRwKTsKKworIAkvKiBJbiBkYW5nZXJvdXMgYXJlYSwgaW5jcmVhc2Ugc2xvd2x5LiAqLworCWVsc2UgaWYgKHN5c2N0bF90Y3BfYWJjKSB7CisgCQkvKiBSRkMzNDY1OiBBcHBwcmlhdGUgQnl0ZSBDb3VudAorIAkJICogaW5jcmVhc2Ugb25jZSBmb3IgZWFjaCBmdWxsIGN3bmQgYWNrZWQKKyAJCSAqLworIAkJaWYgKHRwLT5ieXRlc19hY2tlZCA+PSB0cC0+c25kX2N3bmQqdHAtPm1zc19jYWNoZSkgeworIAkJCXRwLT5ieXRlc19hY2tlZCAtPSB0cC0+c25kX2N3bmQqdHAtPm1zc19jYWNoZTsKKyAJCQlpZiAodHAtPnNuZF9jd25kIDwgdHAtPnNuZF9jd25kX2NsYW1wKQorIAkJCQl0cC0+c25kX2N3bmQrKzsKKyAJCX0KKyAJfSBlbHNlIHsKKyAJCS8qIEluIHRoZW9yeSB0aGlzIGlzIHRwLT5zbmRfY3duZCArPSAxIC8gdHAtPnNuZF9jd25kICovCisgCQlpZiAodHAtPnNuZF9jd25kX2NudCA+PSB0cC0+c25kX2N3bmQpIHsKKyAJCQlpZiAodHAtPnNuZF9jd25kIDwgdHAtPnNuZF9jd25kX2NsYW1wKQorIAkJCQl0cC0+c25kX2N3bmQrKzsKKyAJCQl0cC0+c25kX2N3bmRfY250ID0gMDsKKyAJCX0gZWxzZQorIAkJCXRwLT5zbmRfY3duZF9jbnQrKzsKKyAJfQogfQogRVhQT1JUX1NZTUJPTF9HUEwodGNwX3Jlbm9fY29uZ19hdm9pZCk7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9oaWdoc3BlZWQuYyBiL25ldC9pcHY0L3RjcF9oaWdoc3BlZWQuYwppbmRleCA2YWNjMDRiLi44MmIzYzE4IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfaGlnaHNwZWVkLmMKKysrIGIvbmV0L2lwdjQvdGNwX2hpZ2hzcGVlZC5jCkBAIC0xMTEsMTggKzExMSwxNyBAQAogfQogCiBzdGF0aWMgdm9pZCBoc3RjcF9jb25nX2F2b2lkKHN0cnVjdCBzb2NrICpzaywgdTMyIGFkaywgdTMyIHJ0dCwKLQkJCSAgICAgdTMyIGluX2ZsaWdodCwgaW50IGdvb2QpCisJCQkgICAgIHUzMiBpbl9mbGlnaHQsIHUzMiBwa3RzX2Fja2VkKQogewogCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwogCXN0cnVjdCBoc3RjcCAqY2EgPSBpbmV0X2Nza19jYShzayk7CiAKLQlpZiAoaW5fZmxpZ2h0IDwgdHAtPnNuZF9jd25kKQorCWlmICghdGNwX2lzX2N3bmRfbGltaXRlZChzaywgaW5fZmxpZ2h0KSkKIAkJcmV0dXJuOwogCi0JaWYgKHRwLT5zbmRfY3duZCA8PSB0cC0+c25kX3NzdGhyZXNoKSB7Ci0JCWlmICh0cC0+c25kX2N3bmQgPCB0cC0+c25kX2N3bmRfY2xhbXApCi0JCQl0cC0+c25kX2N3bmQrKzsKLQl9IGVsc2UgeworCWlmICh0cC0+c25kX2N3bmQgPD0gdHAtPnNuZF9zc3RocmVzaCkKKwkJdGNwX3Nsb3dfc3RhcnQodHApOworCWVsc2UgewogCQkvKiBVcGRhdGUgQUlNRCBwYXJhbWV0ZXJzICovCiAJCWlmICh0cC0+c25kX2N3bmQgPiBoc3RjcF9haW1kX3ZhbHNbY2EtPmFpXS5jd25kKSB7CiAJCQl3aGlsZSAodHAtPnNuZF9jd25kID4gaHN0Y3BfYWltZF92YWxzW2NhLT5haV0uY3duZCAmJgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2h0Y3AuYyBiL25ldC9pcHY0L3RjcF9odGNwLmMKaW5kZXggZTQ3YjM3OS4uMzI4NGNmYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2h0Y3AuYworKysgYi9uZXQvaXB2NC90Y3BfaHRjcC5jCkBAIC0yMDcsMTQgKzIwNywxMyBAQAogCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwogCXN0cnVjdCBodGNwICpjYSA9IGluZXRfY3NrX2NhKHNrKTsKIAotCWlmIChpbl9mbGlnaHQgPCB0cC0+c25kX2N3bmQpCisJaWYgKCF0Y3BfaXNfY3duZF9saW1pdGVkKHNrLCBpbl9mbGlnaHQpKQogCQlyZXR1cm47CiAKLSAgICAgICAgaWYgKHRwLT5zbmRfY3duZCA8PSB0cC0+c25kX3NzdGhyZXNoKSB7Ci0gICAgICAgICAgICAgICAgLyogSW4gInNhZmUiIGFyZWEsIGluY3JlYXNlLiAqLwotCQlpZiAodHAtPnNuZF9jd25kIDwgdHAtPnNuZF9jd25kX2NsYW1wKQotCQkJdHAtPnNuZF9jd25kKys7Ci0JfSBlbHNlIHsKKyAgICAgICAgaWYgKHRwLT5zbmRfY3duZCA8PSB0cC0+c25kX3NzdGhyZXNoKQorCQl0Y3Bfc2xvd19zdGFydCh0cCk7CisJZWxzZSB7CisKIAkJbWVhc3VyZV9ydHQoc2spOwogCiAJCS8qIGtlZXAgdHJhY2sgb2YgbnVtYmVyIG9mIHJvdW5kLXRyaXAgdGltZXMgc2luY2UgbGFzdCBiYWNrb2ZmIGV2ZW50ICovCkBAIC0yMjQsNyArMjIzLDcgQEAKIAkJCWh0Y3BfYWxwaGFfdXBkYXRlKGNhKTsKIAkJfQogCi0gICAgICAgICAgICAgICAgLyogSW4gZGFuZ2Vyb3VzIGFyZWEsIGluY3JlYXNlIHNsb3dseS4KKwkJLyogSW4gZGFuZ2Vyb3VzIGFyZWEsIGluY3JlYXNlIHNsb3dseS4KIAkJICogSW4gdGhlb3J5IHRoaXMgaXMgdHAtPnNuZF9jd25kICs9IGFscGhhIC8gdHAtPnNuZF9jd25kCiAJCSAqLwogCQlpZiAoKHRwLT5zbmRfY3duZF9jbnQrKyAqIGNhLT5hbHBoYSk+PjcgPj0gdHAtPnNuZF9jd25kKSB7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfaHlibGEuYyBiL25ldC9pcHY0L3RjcF9oeWJsYS5jCmluZGV4IDc3YWRkNjM2Li40MGRiYjM4IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfaHlibGEuYworKysgYi9uZXQvaXB2NC90Y3BfaHlibGEuYwpAQCAtMTAwLDEyICsxMDAsMTIgQEAKIAkJY2EtPm1pbnJ0dCA9IHRwLT5zcnR0OwogCX0KIAorCWlmICghdGNwX2lzX2N3bmRfbGltaXRlZChzaywgaW5fZmxpZ2h0KSkKKwkJcmV0dXJuOworCiAJaWYgKCFjYS0+aHlibGFfZW4pCiAJCXJldHVybiB0Y3BfcmVub19jb25nX2F2b2lkKHNrLCBhY2ssIHJ0dCwgaW5fZmxpZ2h0LCBmbGFnKTsKIAotCWlmIChpbl9mbGlnaHQgPCB0cC0+c25kX2N3bmQpCi0JCXJldHVybjsKLQogCWlmIChjYS0+cmhvID09IDApCiAJCWh5YmxhX3JlY2FsY19wYXJhbShzayk7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9pbnB1dC5jIGIvbmV0L2lwdjQvdGNwX2lucHV0LmMKaW5kZXggM2U5OGI1Ny4uNDBhMjZiNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2lucHV0LmMKKysrIGIvbmV0L2lwdjQvdGNwX2lucHV0LmMKQEAgLTQyLDcgKzQyLDcgQEAKICAqCQlBbmRpIEtsZWVuCToJTW92ZWQgb3Blbl9yZXF1ZXN0IGNoZWNraW5nIGhlcmUKICAqCQkJCQlhbmQgcHJvY2VzcyBSU1RzIGZvciBvcGVuX3JlcXVlc3RzLgogICoJCUFuZGkgS2xlZW4JOglCZXR0ZXIgcHJ1bmVfcXVldWUsIGFuZCBvdGhlciBmaXhlcy4KLSAqCQlBbmRyZXkgU2F2b2Noa2luOglGaXggUlRUIG1lYXN1cmVtZW50cyBpbiB0aGUgcHJlc25jZSBvZgorICoJCUFuZHJleSBTYXZvY2hraW46CUZpeCBSVFQgbWVhc3VyZW1lbnRzIGluIHRoZSBwcmVzZW5jZSBvZgogICoJCQkJCXRpbWVzdGFtcHMuCiAgKgkJQW5kcmV5IFNhdm9jaGtpbjoJQ2hlY2sgc2VxdWVuY2UgbnVtYmVycyBjb3JyZWN0bHkgd2hlbgogICoJCQkJCXJlbW92aW5nIFNBQ0tzIGR1ZSB0byBpbiBzZXF1ZW5jZSBpbmNvbWluZwpAQCAtODksNiArODksNyBAQAogaW50IHN5c2N0bF90Y3Bfbm9tZXRyaWNzX3NhdmU7CiAKIGludCBzeXNjdGxfdGNwX21vZGVyYXRlX3JjdmJ1ZiA9IDE7CitpbnQgc3lzY3RsX3RjcF9hYmMgPSAxOwogCiAjZGVmaW5lIEZMQUdfREFUQQkJMHgwMSAvKiBJbmNvbWluZyBmcmFtZSBjb250YWluZWQgZGF0YS4JCSovCiAjZGVmaW5lIEZMQUdfV0lOX1VQREFURQkJMHgwMiAvKiBJbmNvbWluZyBBQ0sgd2FzIGEgd2luZG93IHVwZGF0ZS4JKi8KQEAgLTIyMyw3ICsyMjQsNyBAQAogICogICBvZiByZWNlaXZlciB3aW5kb3cuIENoZWNrICMyLgogICoKICAqIFRoZSBzY2hlbWUgZG9lcyBub3Qgd29yayB3aGVuIHNlbmRlciBzZW5kcyBnb29kIHNlZ21lbnRzIG9wZW5pbmcKLSAqIHdpbmRvdyBhbmQgdGhlbiBzdGFydHMgdG8gZmVlZCB1cyBzcGFnZXR0aS4gQnV0IGl0IHNob3VsZCB3b3JrCisgKiB3aW5kb3cgYW5kIHRoZW4gc3RhcnRzIHRvIGZlZWQgdXMgc3BhZ2hldHRpLiBCdXQgaXQgc2hvdWxkIHdvcmsKICAqIGluIGNvbW1vbiBzaXR1YXRpb25zLiBPdGhlcndpc2UsIHdlIGhhdmUgdG8gcmVseSBvbiBxdWV1ZSBjb2xsYXBzaW5nLgogICovCiAKQEAgLTIzMyw3ICsyMzQsNyBAQAogewogCS8qIE9wdGltaXplIHRoaXMhICovCiAJaW50IHRydWVzaXplID0gdGNwX3dpbl9mcm9tX3NwYWNlKHNrYi0+dHJ1ZXNpemUpLzI7Ci0JaW50IHdpbmRvdyA9IHRjcF9mdWxsX3NwYWNlKHNrKS8yOworCWludCB3aW5kb3cgPSB0Y3Bfd2luX2Zyb21fc3BhY2Uoc3lzY3RsX3RjcF9ybWVtWzJdKS8yOwogCiAJd2hpbGUgKHRwLT5yY3Zfc3N0aHJlc2ggPD0gd2luZG93KSB7CiAJCWlmICh0cnVlc2l6ZSA8PSBza2ItPmxlbikKQEAgLTI3Nyw3ICsyNzgsNyBAQAogCWludCByY3ZtZW0gPSB0cC0+YWR2bXNzICsgTUFYX1RDUF9IRUFERVIgKyAxNiArIHNpemVvZihzdHJ1Y3Qgc2tfYnVmZik7CiAKIAkvKiBUcnkgdG8gc2VsZWN0IHJjdmJ1ZiBzbyB0aGF0IDQgbXNzLXNpemVkIHNlZ21lbnRzCi0JICogd2lsbCBmaXQgdG8gd2luZG93IGFuZCBjb3JyZXNwb2Rpbmcgc2ticyB3aWxsIGZpdCB0byBvdXIgcmN2YnVmLgorCSAqIHdpbGwgZml0IHRvIHdpbmRvdyBhbmQgY29ycmVzcG9uZGluZyBza2JzIHdpbGwgZml0IHRvIG91ciByY3ZidWYuCiAJICogKHdhcyAzOyA0IGlzIG1pbmltdW0gdG8gYWxsb3cgZmFzdCByZXRyYW5zbWl0IHRvIHdvcmsuKQogCSAqLwogCXdoaWxlICh0Y3Bfd2luX2Zyb21fc3BhY2UocmN2bWVtKSA8IHRwLT5hZHZtc3MpCkBAIC0yODYsNyArMjg3LDcgQEAKIAkJc2stPnNrX3JjdmJ1ZiA9IG1pbig0ICogcmN2bWVtLCBzeXNjdGxfdGNwX3JtZW1bMl0pOwogfQogCi0vKiA0LiBUcnkgdG8gZml4dXAgYWxsLiBJdCBpcyBtYWRlIGlpbWVkaWF0ZWx5IGFmdGVyIGNvbm5lY3Rpb24gZW50ZXJzCisvKiA0LiBUcnkgdG8gZml4dXAgYWxsLiBJdCBpcyBtYWRlIGltbWVkaWF0ZWx5IGFmdGVyIGNvbm5lY3Rpb24gZW50ZXJzCiAgKiAgICBlc3RhYmxpc2hlZCBzdGF0ZS4KICAqLwogc3RhdGljIHZvaWQgdGNwX2luaXRfYnVmZmVyX3NwYWNlKHN0cnVjdCBzb2NrICpzaykKQEAgLTMyNiwzNyArMzI3LDE4IEBACiBzdGF0aWMgdm9pZCB0Y3BfY2xhbXBfd2luZG93KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRjcF9zb2NrICp0cCkKIHsKIAlzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQl1bnNpZ25lZCBpbnQgYXBwX3dpbiA9IHRwLT5yY3Zfbnh0IC0gdHAtPmNvcGllZF9zZXE7Ci0JaW50IG9mb193aW4gPSAwOwogCiAJaWNzay0+aWNza19hY2sucXVpY2sgPSAwOwogCi0Jc2tiX3F1ZXVlX3dhbGsoJnRwLT5vdXRfb2Zfb3JkZXJfcXVldWUsIHNrYikgewotCQlvZm9fd2luICs9IHNrYi0+bGVuOworCWlmIChzay0+c2tfcmN2YnVmIDwgc3lzY3RsX3RjcF9ybWVtWzJdICYmCisJICAgICEoc2stPnNrX3VzZXJsb2NrcyAmIFNPQ0tfUkNWQlVGX0xPQ0spICYmCisJICAgICF0Y3BfbWVtb3J5X3ByZXNzdXJlICYmCisJICAgIGF0b21pY19yZWFkKCZ0Y3BfbWVtb3J5X2FsbG9jYXRlZCkgPCBzeXNjdGxfdGNwX21lbVswXSkgeworCQlzay0+c2tfcmN2YnVmID0gbWluKGF0b21pY19yZWFkKCZzay0+c2tfcm1lbV9hbGxvYyksCisJCQkJICAgIHN5c2N0bF90Y3Bfcm1lbVsyXSk7CiAJfQotCi0JLyogSWYgb3ZlcmNvbW1pdCBpcyBkdWUgdG8gb3V0IG9mIG9yZGVyIHNlZ21lbnRzLAotCSAqIGRvIG5vdCBjbGFtcCB3aW5kb3cuIFRyeSB0byBleHBhbmQgcmN2YnVmIGluc3RlYWQuCi0JICovCi0JaWYgKG9mb193aW4pIHsKLQkJaWYgKHNrLT5za19yY3ZidWYgPCBzeXNjdGxfdGNwX3JtZW1bMl0gJiYKLQkJICAgICEoc2stPnNrX3VzZXJsb2NrcyAmIFNPQ0tfUkNWQlVGX0xPQ0spICYmCi0JCSAgICAhdGNwX21lbW9yeV9wcmVzc3VyZSAmJgotCQkgICAgYXRvbWljX3JlYWQoJnRjcF9tZW1vcnlfYWxsb2NhdGVkKSA8IHN5c2N0bF90Y3BfbWVtWzBdKQotCQkJc2stPnNrX3JjdmJ1ZiA9IG1pbihhdG9taWNfcmVhZCgmc2stPnNrX3JtZW1fYWxsb2MpLAotCQkJCQkgICAgc3lzY3RsX3RjcF9ybWVtWzJdKTsKLQl9Ci0JaWYgKGF0b21pY19yZWFkKCZzay0+c2tfcm1lbV9hbGxvYykgPiBzay0+c2tfcmN2YnVmKSB7Ci0JCWFwcF93aW4gKz0gb2ZvX3dpbjsKLQkJaWYgKGF0b21pY19yZWFkKCZzay0+c2tfcm1lbV9hbGxvYykgPj0gMiAqIHNrLT5za19yY3ZidWYpCi0JCQlhcHBfd2luID4+PSAxOwotCQlpZiAoYXBwX3dpbiA+IGljc2stPmljc2tfYWNrLnJjdl9tc3MpCi0JCQlhcHBfd2luIC09IGljc2stPmljc2tfYWNrLnJjdl9tc3M7Ci0JCWFwcF93aW4gPSBtYXgoYXBwX3dpbiwgMlUqdHAtPmFkdm1zcyk7Ci0KKwlpZiAoYXRvbWljX3JlYWQoJnNrLT5za19ybWVtX2FsbG9jKSA+IHNrLT5za19yY3ZidWYpCiAJCXRwLT5yY3Zfc3N0aHJlc2ggPSBtaW4odHAtPndpbmRvd19jbGFtcCwgMlUqdHAtPmFkdm1zcyk7Ci0JfQogfQogCiAvKiBSZWNlaXZlciAiYXV0b3R1bmluZyIgY29kZS4KQEAgLTM4NSw4ICszNjcsOCBAQAogCQkgKiBhcmUgc3RhbGxlZCBvbiBmaWxlc3lzdGVtIEkvTy4KIAkJICoKIAkJICogQWxzbywgc2luY2Ugd2UgYXJlIG9ubHkgZ29pbmcgZm9yIGEgbWluaW11bSBpbiB0aGUKLQkJICogbm9uLXRpbWVzdGFtcCBjYXNlLCB3ZSBkbyBub3Qgc21vb3RoZSB0aGluZ3Mgb3V0Ci0JCSAqIGVsc2Ugd2l0aCB0aW1lc3RhbXBzIGRpc2FibGVkIGNvbnZlcmdhbmNlIHRha2VzIHRvbworCQkgKiBub24tdGltZXN0YW1wIGNhc2UsIHdlIGRvIG5vdCBzbW9vdGhlciB0aGluZ3Mgb3V0CisJCSAqIGVsc2Ugd2l0aCB0aW1lc3RhbXBzIGRpc2FibGVkIGNvbnZlcmdlbmNlIHRha2VzIHRvbwogCQkgKiBsb25nLgogCQkgKi8KIAkJaWYgKCF3aW5fZGVwKSB7CkBAIC0zOTUsNyArMzc3LDcgQEAKIAkJfSBlbHNlIGlmIChtIDwgbmV3X3NhbXBsZSkKIAkJCW5ld19zYW1wbGUgPSBtIDw8IDM7CiAJfSBlbHNlIHsKLQkJLyogTm8gcHJldmlvdXMgbWVzYXVyZS4gKi8KKwkJLyogTm8gcHJldmlvdXMgbWVhc3VyZS4gKi8KIAkJbmV3X3NhbXBsZSA9IG0gPDwgMzsKIAl9CiAKQEAgLTUyNCw3ICs1MDYsNyBAQAogCQkJaWYgKGljc2stPmljc2tfYWNrLmF0byA+IGljc2stPmljc2tfcnRvKQogCQkJCWljc2stPmljc2tfYWNrLmF0byA9IGljc2stPmljc2tfcnRvOwogCQl9IGVsc2UgaWYgKG0gPiBpY3NrLT5pY3NrX3J0bykgewotCQkJLyogVG9vIGxvbmcgZ2FwLiBBcHBhcmVudGx5IHNlbmRlciBmYWxsZWQgdG8KKwkJCS8qIFRvbyBsb25nIGdhcC4gQXBwYXJlbnRseSBzZW5kZXIgZmFpbGVkIHRvCiAJCQkgKiByZXN0YXJ0IHdpbmRvdywgc28gdGhhdCB3ZSBzZW5kIEFDS3MgcXVpY2tseS4KIAkJCSAqLwogCQkJdGNwX2luY3JfcXVpY2thY2soc2spOwpAQCAtNTQ4LDEwICs1MzAsOSBAQAogICogVG8gc2F2ZSBjeWNsZXMgaW4gdGhlIFJGQyAxMzIzIGltcGxlbWVudGF0aW9uIGl0IHdhcyBiZXR0ZXIgdG8gYnJlYWsKICAqIGl0IHVwIGludG8gdGhyZWUgcHJvY2VkdXJlcy4gLS0gZXJpY3MKICAqLwotc3RhdGljIHZvaWQgdGNwX3J0dF9lc3RpbWF0b3Ioc3RydWN0IHNvY2sgKnNrLCBjb25zdCBfX3UzMiBtcnR0LCB1MzIgKnVzcnR0KQorc3RhdGljIHZvaWQgdGNwX3J0dF9lc3RpbWF0b3Ioc3RydWN0IHNvY2sgKnNrLCBjb25zdCBfX3UzMiBtcnR0KQogewogCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwotCWNvbnN0IHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTsKIAlsb25nIG0gPSBtcnR0OyAvKiBSVFQgKi8KIAogCS8qCVRoZSBmb2xsb3dpbmcgYW11c2luZyBjb2RlIGNvbWVzIGZyb20gSmFjb2Jzb24ncwpAQCAtNTY1LDcgKzU0Niw3IEBACiAJICoKIAkgKiBGdW5ueS4gVGhpcyBhbGdvcml0aG0gc2VlbXMgdG8gYmUgdmVyeSBicm9rZW4uCiAJICogVGhlc2UgZm9ybXVsYWUgaW5jcmVhc2UgUlRPLCB3aGVuIGl0IHNob3VsZCBiZSBkZWNyZWFzZWQsIGluY3JlYXNlCi0JICogdG9vIHNsb3dseSwgd2hlbiBpdCBzaG91bGQgYmUgaW5jcmVzZWQgZmFzdGx5LCBkZWNyZWFzZSB0b28gZmFzdGx5CisJICogdG9vIHNsb3dseSwgd2hlbiBpdCBzaG91bGQgYmUgaW5jcmVhc2VkIGZhc3RseSwgZGVjcmVhc2UgdG9vIGZhc3RseQogCSAqIGV0Yy4gSSBndWVzcyBpbiBCU0QgUlRPIHRha2VzIE9ORSB2YWx1ZSwgc28gdGhhdCBpdCBpcyBhYnNvbHV0ZWx5CiAJICogZG9lcyBub3QgbWF0dGVyIGhvdyB0byBfY2FsY3VsYXRlXyBpdC4gU2VlbXMsIGl0IHdhcyB0cmFwCiAJICogdGhhdCBWSiBmYWlsZWQgdG8gYXZvaWQuIDgpCkBAIC02MTAsOSArNTkxLDYgQEAKIAkJdHAtPm1kZXZfbWF4ID0gdHAtPnJ0dHZhciA9IG1heCh0cC0+bWRldiwgVENQX1JUT19NSU4pOwogCQl0cC0+cnR0X3NlcSA9IHRwLT5zbmRfbnh0OwogCX0KLQotCWlmIChpY3NrLT5pY3NrX2NhX29wcy0+cnR0X3NhbXBsZSkKLQkJaWNzay0+aWNza19jYV9vcHMtPnJ0dF9zYW1wbGUoc2ssICp1c3J0dCk7CiB9CiAKIC8qIENhbGN1bGF0ZSBydG8gd2l0aG91dCBiYWNrb2ZmLiAgVGhpcyBpcyB0aGUgc2Vjb25kIGhhbGYgb2YgVmFuIEphY29ic29uJ3MKQEAgLTYyOSwxNCArNjA3LDE0IEBACiAJICogICAgYXQgbGVhc3QgYnkgc29sYXJpcyBhbmQgZnJlZWJzZC4gIkVycmF0aWMgQUNLcyIgaGFzIF9ub3RoaW5nXwogCSAqICAgIHRvIGRvIHdpdGggZGVsYXllZCBhY2tzLCBiZWNhdXNlIGF0IGN3bmQ+MiB0cnVlIGRlbGFjayB0aW1lb3V0CiAJICogICAgaXMgaW52aXNpYmxlLiBBY3R1YWxseSwgTGludXgtMi40IGFsc28gZ2VuZXJhdGVzIGVycmF0aWMKLQkgKiAgICBBQ0tzIGluIHNvbWUgY3VyY3Vtc3RhbmNlcy4KKwkgKiAgICBBQ0tzIGluIHNvbWUgY2lyY3Vtc3RhbmNlcy4KIAkgKi8KIAlpbmV0X2NzayhzayktPmljc2tfcnRvID0gKHRwLT5zcnR0ID4+IDMpICsgdHAtPnJ0dHZhcjsKIAogCS8qIDIuIEZpeHVwcyBtYWRlIGVhcmxpZXIgY2Fubm90IGJlIHJpZ2h0LgogCSAqICAgIElmIHdlIGRvIG5vdCBlc3RpbWF0ZSBSVE8gY29ycmVjdGx5IHdpdGhvdXQgdGhlbSwKIAkgKiAgICBhbGwgdGhlIGFsZ28gaXMgcHVyZSBzaGl0IGFuZCBzaG91bGQgYmUgcmVwbGFjZWQKLQkgKiAgICB3aXRoIGNvcnJlY3Qgb25lLiBJdCBpcyBleGFjbHR5LCB3aGljaCB3ZSBwcmV0ZW5kIHRvIGRvLgorCSAqICAgIHdpdGggY29ycmVjdCBvbmUuIEl0IGlzIGV4YWN0bHksIHdoaWNoIHdlIHByZXRlbmQgdG8gZG8uCiAJICovCiB9CiAKQEAgLTc5NCw3ICs3NzIsNyBAQAogCSAqIHRvIG1ha2UgaXQgbW9yZSByZWFsaXN0aWMuCiAJICoKIAkgKiBBIGJpdCBvZiB0aGVvcnkuIFJUVCBpcyB0aW1lIHBhc3NlZCBhZnRlciAibm9ybWFsIiBzaXplZCBwYWNrZXQKLQkgKiBpcyBzZW50IHVudGlsIGl0IGlzIEFDS2VkLiBJbiBub3JtYWwgY3VyY3Vtc3RhbmNlcyBzZW5kaW5nIHNtYWxsCisJICogaXMgc2VudCB1bnRpbCBpdCBpcyBBQ0tlZC4gSW4gbm9ybWFsIGNpcmN1bXN0YW5jZXMgc2VuZGluZyBzbWFsbAogCSAqIHBhY2tldHMgZm9yY2UgcGVlciB0byBkZWxheSBBQ0tzIGFuZCBjYWxjdWxhdGlvbiBpcyBjb3JyZWN0IHRvby4KIAkgKiBUaGUgYWxnb3JpdGhtIGlzIGFkYXB0aXZlIGFuZCwgcHJvdmlkZWQgd2UgZm9sbG93IHNwZWNzLCBpdAogCSAqIE5FVkVSIHVuZGVyZXN0aW1hdGUgUlRULiBCVVQhIElmIHBlZXIgdHJpZXMgdG8gbWFrZSBzb21lIGNsZXZlcgpAQCAtOTE5LDE4ICs4OTcsMzIgQEAKIAlpbnQgcHJpb3JfZmFja2V0czsKIAl1MzIgbG9zdF9yZXRyYW5zID0gMDsKIAlpbnQgZmxhZyA9IDA7CisJaW50IGR1cF9zYWNrID0gMDsKIAlpbnQgaTsKIAogCWlmICghdHAtPnNhY2tlZF9vdXQpCiAJCXRwLT5mYWNrZXRzX291dCA9IDA7CiAJcHJpb3JfZmFja2V0cyA9IHRwLT5mYWNrZXRzX291dDsKIAotCWZvciAoaT0wOyBpPG51bV9zYWNrczsgaSsrLCBzcCsrKSB7Ci0JCXN0cnVjdCBza19idWZmICpza2I7Ci0JCV9fdTMyIHN0YXJ0X3NlcSA9IG50b2hsKHNwLT5zdGFydF9zZXEpOwotCQlfX3UzMiBlbmRfc2VxID0gbnRvaGwoc3AtPmVuZF9zZXEpOwotCQlpbnQgZmFja19jb3VudCA9IDA7Ci0JCWludCBkdXBfc2FjayA9IDA7CisJLyogU0FDSyBmYXN0cGF0aDoKKwkgKiBpZiB0aGUgb25seSBTQUNLIGNoYW5nZSBpcyB0aGUgaW5jcmVhc2Ugb2YgdGhlIGVuZF9zZXEgb2YKKwkgKiB0aGUgZmlyc3QgYmxvY2sgdGhlbiBvbmx5IGFwcGx5IHRoYXQgU0FDSyBibG9jaworCSAqIGFuZCB1c2UgcmV0cmFucyBxdWV1ZSBoaW50aW5nIG90aGVyd2lzZSBzbG93cGF0aCAqLworCWZsYWcgPSAxOworCWZvciAoaSA9IDA7IGk8IG51bV9zYWNrczsgaSsrKSB7CisJCV9fdTMyIHN0YXJ0X3NlcSA9IG50b2hsKHNwW2ldLnN0YXJ0X3NlcSk7CisJCV9fdTMyIGVuZF9zZXEgPQkgbnRvaGwoc3BbaV0uZW5kX3NlcSk7CisKKwkJaWYgKGkgPT0gMCl7CisJCQlpZiAodHAtPnJlY3Zfc2Fja19jYWNoZVtpXS5zdGFydF9zZXEgIT0gc3RhcnRfc2VxKQorCQkJCWZsYWcgPSAwOworCQl9IGVsc2UgeworCQkJaWYgKCh0cC0+cmVjdl9zYWNrX2NhY2hlW2ldLnN0YXJ0X3NlcSAhPSBzdGFydF9zZXEpIHx8CisJCQkgICAgKHRwLT5yZWN2X3NhY2tfY2FjaGVbaV0uZW5kX3NlcSAhPSBlbmRfc2VxKSkKKwkJCQlmbGFnID0gMDsKKwkJfQorCQl0cC0+cmVjdl9zYWNrX2NhY2hlW2ldLnN0YXJ0X3NlcSA9IHN0YXJ0X3NlcTsKKwkJdHAtPnJlY3Zfc2Fja19jYWNoZVtpXS5lbmRfc2VxID0gZW5kX3NlcTsKIAogCQkvKiBDaGVjayBmb3IgRC1TQUNLLiAqLwogCQlpZiAoaSA9PSAwKSB7CkBAIC05NjIsMTUgKzk1NCw1OCBAQAogCQkJaWYgKGJlZm9yZShhY2ssIHByaW9yX3NuZF91bmEgLSB0cC0+bWF4X3dpbmRvdykpCiAJCQkJcmV0dXJuIDA7CiAJCX0KKwl9CisKKwlpZiAoZmxhZykKKwkJbnVtX3NhY2tzID0gMTsKKwllbHNlIHsKKwkJaW50IGo7CisJCXRwLT5mYXN0cGF0aF9za2JfaGludCA9IE5VTEw7CisKKwkJLyogb3JkZXIgU0FDSyBibG9ja3MgdG8gYWxsb3cgaW4gb3JkZXIgd2FsayBvZiB0aGUgcmV0cmFucyBxdWV1ZSAqLworCQlmb3IgKGkgPSBudW1fc2Fja3MtMTsgaSA+IDA7IGktLSkgeworCQkJZm9yIChqID0gMDsgaiA8IGk7IGorKyl7CisJCQkJaWYgKGFmdGVyKG50b2hsKHNwW2pdLnN0YXJ0X3NlcSksCisJCQkJCSAgbnRvaGwoc3BbaisxXS5zdGFydF9zZXEpKSl7CisJCQkJCXNwW2pdLnN0YXJ0X3NlcSA9IGh0b25sKHRwLT5yZWN2X3NhY2tfY2FjaGVbaisxXS5zdGFydF9zZXEpOworCQkJCQlzcFtqXS5lbmRfc2VxID0gaHRvbmwodHAtPnJlY3Zfc2Fja19jYWNoZVtqKzFdLmVuZF9zZXEpOworCQkJCQlzcFtqKzFdLnN0YXJ0X3NlcSA9IGh0b25sKHRwLT5yZWN2X3NhY2tfY2FjaGVbal0uc3RhcnRfc2VxKTsKKwkJCQkJc3BbaisxXS5lbmRfc2VxID0gaHRvbmwodHAtPnJlY3Zfc2Fja19jYWNoZVtqXS5lbmRfc2VxKTsKKwkJCQl9CisKKwkJCX0KKwkJfQorCX0KKworCS8qIGNsZWFyIGZsYWcgYXMgdXNlZCBmb3IgZGlmZmVyZW50IHB1cnBvc2UgaW4gZm9sbG93aW5nIGNvZGUgKi8KKwlmbGFnID0gMDsKKworCWZvciAoaT0wOyBpPG51bV9zYWNrczsgaSsrLCBzcCsrKSB7CisJCXN0cnVjdCBza19idWZmICpza2I7CisJCV9fdTMyIHN0YXJ0X3NlcSA9IG50b2hsKHNwLT5zdGFydF9zZXEpOworCQlfX3UzMiBlbmRfc2VxID0gbnRvaGwoc3AtPmVuZF9zZXEpOworCQlpbnQgZmFja19jb3VudDsKKworCQkvKiBVc2UgU0FDSyBmYXN0cGF0aCBoaW50IGlmIHZhbGlkICovCisJCWlmICh0cC0+ZmFzdHBhdGhfc2tiX2hpbnQpIHsKKwkJCXNrYiA9IHRwLT5mYXN0cGF0aF9za2JfaGludDsKKwkJCWZhY2tfY291bnQgPSB0cC0+ZmFzdHBhdGhfY250X2hpbnQ7CisJCX0gZWxzZSB7CisJCQlza2IgPSBzay0+c2tfd3JpdGVfcXVldWUubmV4dDsKKwkJCWZhY2tfY291bnQgPSAwOworCQl9CiAKIAkJLyogRXZlbnQgIkIiIGluIHRoZSBjb21tZW50IGFib3ZlLiAqLwogCQlpZiAoYWZ0ZXIoZW5kX3NlcSwgdHAtPmhpZ2hfc2VxKSkKIAkJCWZsYWcgfD0gRkxBR19EQVRBX0xPU1Q7CiAKLQkJc2tfc3RyZWFtX2Zvcl9yZXRyYW5zX3F1ZXVlKHNrYiwgc2spIHsKKwkJc2tfc3RyZWFtX2Zvcl9yZXRyYW5zX3F1ZXVlX2Zyb20oc2tiLCBzaykgewogCQkJaW50IGluX3NhY2ssIHBjb3VudDsKIAkJCXU4IHNhY2tlZDsKIAorCQkJdHAtPmZhc3RwYXRoX3NrYl9oaW50ID0gc2tiOworCQkJdHAtPmZhc3RwYXRoX2NudF9oaW50ID0gZmFja19jb3VudDsKKwogCQkJLyogVGhlIHJldHJhbnNtaXNzaW9uIHF1ZXVlIGlzIGFsd2F5cyBpbiBvcmRlciwgc28KIAkJCSAqIHdlIGNhbiBzaG9ydC1jaXJjdWl0IHRoZSB3YWxrIGVhcmx5LgogCQkJICovCkBAIC0xMDQ1LDYgKzEwODAsOSBAQAogCQkJCQkJVENQX1NLQl9DQihza2IpLT5zYWNrZWQgJj0gfihUQ1BDQl9MT1NUfFRDUENCX1NBQ0tFRF9SRVRSQU5TKTsKIAkJCQkJCXRwLT5sb3N0X291dCAtPSB0Y3Bfc2tiX3Bjb3VudChza2IpOwogCQkJCQkJdHAtPnJldHJhbnNfb3V0IC09IHRjcF9za2JfcGNvdW50KHNrYik7CisKKwkJCQkJCS8qIGNsZWFyIGxvc3QgaGludCAqLworCQkJCQkJdHAtPnJldHJhbnNtaXRfc2tiX2hpbnQgPSBOVUxMOwogCQkJCQl9CiAJCQkJfSBlbHNlIHsKIAkJCQkJLyogTmV3IHNhY2sgZm9yIG5vdCByZXRyYW5zbWl0dGVkIGZyYW1lLApAQCAtMTA1Nyw2ICsxMDk1LDkgQEAKIAkJCQkJaWYgKHNhY2tlZCAmIFRDUENCX0xPU1QpIHsKIAkJCQkJCVRDUF9TS0JfQ0Ioc2tiKS0+c2Fja2VkICY9IH5UQ1BDQl9MT1NUOwogCQkJCQkJdHAtPmxvc3Rfb3V0IC09IHRjcF9za2JfcGNvdW50KHNrYik7CisKKwkJCQkJCS8qIGNsZWFyIGxvc3QgaGludCAqLworCQkJCQkJdHAtPnJldHJhbnNtaXRfc2tiX2hpbnQgPSBOVUxMOwogCQkJCQl9CiAJCQkJfQogCkBAIC0xMDgwLDYgKzExMjEsNyBAQAogCQkJICAgIChUQ1BfU0tCX0NCKHNrYiktPnNhY2tlZCZUQ1BDQl9TQUNLRURfUkVUUkFOUykpIHsKIAkJCQlUQ1BfU0tCX0NCKHNrYiktPnNhY2tlZCAmPSB+VENQQ0JfU0FDS0VEX1JFVFJBTlM7CiAJCQkJdHAtPnJldHJhbnNfb3V0IC09IHRjcF9za2JfcGNvdW50KHNrYik7CisJCQkJdHAtPnJldHJhbnNtaXRfc2tiX2hpbnQgPSBOVUxMOwogCQkJfQogCQl9CiAJfQpAQCAtMTEwNyw2ICsxMTQ5LDkgQEAKIAkJCQlUQ1BfU0tCX0NCKHNrYiktPnNhY2tlZCAmPSB+VENQQ0JfU0FDS0VEX1JFVFJBTlM7CiAJCQkJdHAtPnJldHJhbnNfb3V0IC09IHRjcF9za2JfcGNvdW50KHNrYik7CiAKKwkJCQkvKiBjbGVhciBsb3N0IGhpbnQgKi8KKwkJCQl0cC0+cmV0cmFuc21pdF9za2JfaGludCA9IE5VTEw7CisKIAkJCQlpZiAoIShUQ1BfU0tCX0NCKHNrYiktPnNhY2tlZCYoVENQQ0JfTE9TVHxUQ1BDQl9TQUNLRURfQUNLRUQpKSkgewogCQkJCQl0cC0+bG9zdF9vdXQgKz0gdGNwX3NrYl9wY291bnQoc2tiKTsKIAkJCQkJVENQX1NLQl9DQihza2IpLT5zYWNrZWQgfD0gVENQQ0JfTE9TVDsKQEAgLTEyMTQsNiArMTI1OSw4IEBACiAJdGNwX3NldF9jYV9zdGF0ZShzaywgVENQX0NBX0xvc3MpOwogCXRwLT5oaWdoX3NlcSA9IHRwLT5mcnRvX2hpZ2htYXJrOwogCVRDUF9FQ05fcXVldWVfY3dyKHRwKTsKKworCWNsZWFyX2FsbF9yZXRyYW5zX2hpbnRzKHRwKTsKIH0KIAogdm9pZCB0Y3BfY2xlYXJfcmV0cmFucyhzdHJ1Y3QgdGNwX3NvY2sgKnRwKQpAQCAtMTI1MSw2ICsxMjk4LDcgQEAKIAl0cC0+c25kX2N3bmRfY250ICAgPSAwOwogCXRwLT5zbmRfY3duZF9zdGFtcCA9IHRjcF90aW1lX3N0YW1wOwogCisJdHAtPmJ5dGVzX2Fja2VkID0gMDsKIAl0Y3BfY2xlYXJfcmV0cmFucyh0cCk7CiAKIAkvKiBQdXNoIHVuZG8gbWFya2VyLCBpZiBpdCB3YXMgcGxhaW4gUlRPIGFuZCBub3RoaW5nCkBAIC0xMjc5LDYgKzEzMjcsOCBAQAogCXRjcF9zZXRfY2Ffc3RhdGUoc2ssIFRDUF9DQV9Mb3NzKTsKIAl0cC0+aGlnaF9zZXEgPSB0cC0+c25kX254dDsKIAlUQ1BfRUNOX3F1ZXVlX2N3cih0cCk7CisKKwljbGVhcl9hbGxfcmV0cmFuc19oaW50cyh0cCk7CiB9CiAKIHN0YXRpYyBpbnQgdGNwX2NoZWNrX3NhY2tfcmVuZWdpbmcoc3RydWN0IHNvY2sgKnNrKQpAQCAtMTUwMywxNyArMTU1MywzNyBAQAogCQkJICAgICAgIGludCBwYWNrZXRzLCB1MzIgaGlnaF9zZXEpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlpbnQgY250ID0gcGFja2V0czsKKwlpbnQgY250OwogCi0JQlVHX1RSQVAoY250IDw9IHRwLT5wYWNrZXRzX291dCk7CisJQlVHX1RSQVAocGFja2V0cyA8PSB0cC0+cGFja2V0c19vdXQpOworCWlmICh0cC0+bG9zdF9za2JfaGludCkgeworCQlza2IgPSB0cC0+bG9zdF9za2JfaGludDsKKwkJY250ID0gdHAtPmxvc3RfY250X2hpbnQ7CisJfSBlbHNlIHsKKwkJc2tiID0gc2stPnNrX3dyaXRlX3F1ZXVlLm5leHQ7CisJCWNudCA9IDA7CisJfQogCi0Jc2tfc3RyZWFtX2Zvcl9yZXRyYW5zX3F1ZXVlKHNrYiwgc2spIHsKLQkJY250IC09IHRjcF9za2JfcGNvdW50KHNrYik7Ci0JCWlmIChjbnQgPCAwIHx8IGFmdGVyKFRDUF9TS0JfQ0Ioc2tiKS0+ZW5kX3NlcSwgaGlnaF9zZXEpKQorCXNrX3N0cmVhbV9mb3JfcmV0cmFuc19xdWV1ZV9mcm9tKHNrYiwgc2spIHsKKwkJLyogVE9ETzogZG8gdGhpcyBiZXR0ZXIgKi8KKwkJLyogdGhpcyBpcyBub3QgdGhlIG1vc3QgZWZmaWNpZW50IHdheSB0byBkbyB0aGlzLi4uICovCisJCXRwLT5sb3N0X3NrYl9oaW50ID0gc2tiOworCQl0cC0+bG9zdF9jbnRfaGludCA9IGNudDsKKwkJY250ICs9IHRjcF9za2JfcGNvdW50KHNrYik7CisJCWlmIChjbnQgPiBwYWNrZXRzIHx8IGFmdGVyKFRDUF9TS0JfQ0Ioc2tiKS0+ZW5kX3NlcSwgaGlnaF9zZXEpKQogCQkJYnJlYWs7CiAJCWlmICghKFRDUF9TS0JfQ0Ioc2tiKS0+c2Fja2VkJlRDUENCX1RBR0JJVFMpKSB7CiAJCQlUQ1BfU0tCX0NCKHNrYiktPnNhY2tlZCB8PSBUQ1BDQl9MT1NUOwogCQkJdHAtPmxvc3Rfb3V0ICs9IHRjcF9za2JfcGNvdW50KHNrYik7CisKKwkJCS8qIGNsZWFyIHhtaXRfcmV0cmFuc21pdF9xdWV1ZSBoaW50cworCQkJICogIGlmIHRoaXMgaXMgYmV5b25kIGhpbnQgKi8KKwkJCWlmKHRwLT5yZXRyYW5zbWl0X3NrYl9oaW50ICE9IE5VTEwgJiYKKwkJCSAgIGJlZm9yZShUQ1BfU0tCX0NCKHNrYiktPnNlcSwKKwkJCQkgIFRDUF9TS0JfQ0IodHAtPnJldHJhbnNtaXRfc2tiX2hpbnQpLT5zZXEpKSB7CisKKwkJCQl0cC0+cmV0cmFuc21pdF9za2JfaGludCA9IE5VTEw7CisJCQl9CiAJCX0KIAl9CiAJdGNwX3N5bmNfbGVmdF9vdXQodHApOwpAQCAtMTU0MCwxMyArMTYxMCwyOCBAQAogCWlmICh0Y3BfaGVhZF90aW1lZG91dChzaywgdHApKSB7CiAJCXN0cnVjdCBza19idWZmICpza2I7CiAKLQkJc2tfc3RyZWFtX2Zvcl9yZXRyYW5zX3F1ZXVlKHNrYiwgc2spIHsKLQkJCWlmICh0Y3Bfc2tiX3RpbWVkb3V0KHNrLCBza2IpICYmCi0JCQkgICAgIShUQ1BfU0tCX0NCKHNrYiktPnNhY2tlZCZUQ1BDQl9UQUdCSVRTKSkgeworCQlza2IgPSB0cC0+c2NvcmVib2FyZF9za2JfaGludCA/IHRwLT5zY29yZWJvYXJkX3NrYl9oaW50CisJCQk6IHNrLT5za193cml0ZV9xdWV1ZS5uZXh0OworCisJCXNrX3N0cmVhbV9mb3JfcmV0cmFuc19xdWV1ZV9mcm9tKHNrYiwgc2spIHsKKwkJCWlmICghdGNwX3NrYl90aW1lZG91dChzaywgc2tiKSkKKwkJCQlicmVhazsKKworCQkJaWYgKCEoVENQX1NLQl9DQihza2IpLT5zYWNrZWQmVENQQ0JfVEFHQklUUykpIHsKIAkJCQlUQ1BfU0tCX0NCKHNrYiktPnNhY2tlZCB8PSBUQ1BDQl9MT1NUOwogCQkJCXRwLT5sb3N0X291dCArPSB0Y3Bfc2tiX3Bjb3VudChza2IpOworCisJCQkJLyogY2xlYXIgeG1pdF9yZXRyYW5zIGhpbnQgKi8KKwkJCQlpZiAodHAtPnJldHJhbnNtaXRfc2tiX2hpbnQgJiYKKwkJCQkgICAgYmVmb3JlKFRDUF9TS0JfQ0Ioc2tiKS0+c2VxLAorCQkJCQkgICBUQ1BfU0tCX0NCKHRwLT5yZXRyYW5zbWl0X3NrYl9oaW50KS0+c2VxKSkKKworCQkJCQl0cC0+cmV0cmFuc21pdF9za2JfaGludCA9IE5VTEw7CiAJCQl9CiAJCX0KKworCQl0cC0+c2NvcmVib2FyZF9za2JfaGludCA9IHNrYjsKKwogCQl0Y3Bfc3luY19sZWZ0X291dCh0cCk7CiAJfQogfQpAQCAtMTYyNiw2ICsxNzExLDEwIEBACiAJfQogCXRjcF9tb2RlcmF0ZV9jd25kKHRwKTsKIAl0cC0+c25kX2N3bmRfc3RhbXAgPSB0Y3BfdGltZV9zdGFtcDsKKworCS8qIFRoZXJlIGlzIHNvbWV0aGluZyBzY3Jld3kgZ29pbmcgb24gd2l0aCB0aGUgcmV0cmFucyBoaW50cyBhZnRlcgorCSAgIGFuIHVuZG8gKi8KKwljbGVhcl9hbGxfcmV0cmFuc19oaW50cyh0cCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IHRjcF9tYXlfdW5kbyhzdHJ1Y3QgdGNwX3NvY2sgKnRwKQpAQCAtMTcwOSw2ICsxNzk4LDkgQEAKIAkJc2tfc3RyZWFtX2Zvcl9yZXRyYW5zX3F1ZXVlKHNrYiwgc2spIHsKIAkJCVRDUF9TS0JfQ0Ioc2tiKS0+c2Fja2VkICY9IH5UQ1BDQl9MT1NUOwogCQl9CisKKwkJY2xlYXJfYWxsX3JldHJhbnNfaGludHModHApOworCiAJCURCR1VORE8oc2ssIHRwLCAicGFydGlhbCBsb3NzIik7CiAJCXRwLT5sb3N0X291dCA9IDA7CiAJCXRwLT5sZWZ0X291dCA9IHRwLT5zYWNrZWRfb3V0OwpAQCAtMTkwOCw2ICsyMDAwLDcgQEAKIAkJCVRDUF9FQ05fcXVldWVfY3dyKHRwKTsKIAkJfQogCisJCXRwLT5ieXRlc19hY2tlZCA9IDA7CiAJCXRwLT5zbmRfY3duZF9jbnQgPSAwOwogCQl0Y3Bfc2V0X2NhX3N0YXRlKHNrLCBUQ1BfQ0FfUmVjb3ZlcnkpOwogCX0KQEAgLTE5MTksOSArMjAxMiw5IEBACiB9CiAKIC8qIFJlYWQgZHJhZnQtaWV0Zi10Y3Bsdy1oaWdoLXBlcmZvcm1hbmNlIGJlZm9yZSBtdWNraW5nCi0gKiB3aXRoIHRoaXMgY29kZS4gKFN1cGVyY2VlZHMgUkZDMTMyMykKKyAqIHdpdGggdGhpcyBjb2RlLiAoU3VwZXJzZWRlcyBSRkMxMzIzKQogICovCi1zdGF0aWMgdm9pZCB0Y3BfYWNrX3Nhd190c3RhbXAoc3RydWN0IHNvY2sgKnNrLCB1MzIgKnVzcnR0LCBpbnQgZmxhZykKK3N0YXRpYyB2b2lkIHRjcF9hY2tfc2F3X3RzdGFtcChzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFnKQogewogCS8qIFJUVE0gUnVsZTogQSBUU2VjciB2YWx1ZSByZWNlaXZlZCBpbiBhIHNlZ21lbnQgaXMgdXNlZCB0bwogCSAqIHVwZGF0ZSB0aGUgYXZlcmFnZWQgUlRUIG1lYXN1cmVtZW50IG9ubHkgaWYgdGhlIHNlZ21lbnQKQEAgLTE5MzIsNyArMjAyNSw3IEBACiAJICogMTk5OC8wNC8xMCBBbmRyZXkgVi4gU2F2b2Noa2luIDxzYXdAbXN1LnJ1PgogCSAqCiAJICogQ2hhbmdlZDogcmVzZXQgYmFja29mZiBhcyBzb29uIGFzIHdlIHNlZSB0aGUgZmlyc3QgdmFsaWQgc2FtcGxlLgotCSAqIElmIHdlIGRvIG5vdCwgd2UgZ2V0IHN0cm9uZ2x5IG92ZXJzdGltYXRlZCBydG8uIFdpdGggdGltZXN0YW1wcworCSAqIElmIHdlIGRvIG5vdCwgd2UgZ2V0IHN0cm9uZ2x5IG92ZXJlc3RpbWF0ZWQgcnRvLiBXaXRoIHRpbWVzdGFtcHMKIAkgKiBzYW1wbGVzIGFyZSBhY2NlcHRlZCBldmVuIGZyb20gdmVyeSBvbGQgc2VnbWVudHM6IGYuZS4sIHdoZW4gcnR0PTEKIAkgKiBpbmNyZWFzZXMgdG8gOCwgd2UgcmV0cmFuc21pdCA1IHRpbWVzIGFuZCBhZnRlciA4IHNlY29uZHMgZGVsYXllZAogCSAqIGFuc3dlciBhcnJpdmVzIHJ0byBiZWNvbWVzIDEyMCBzZWNvbmRzISBJZiBhdCBsZWFzdCBvbmUgb2Ygc2VnbWVudHMKQEAgLTE5NDAsMTMgKzIwMzMsMTMgQEAKIAkgKi8KIAlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKIAljb25zdCBfX3UzMiBzZXFfcnR0ID0gdGNwX3RpbWVfc3RhbXAgLSB0cC0+cnhfb3B0LnJjdl90c2VjcjsKLQl0Y3BfcnR0X2VzdGltYXRvcihzaywgc2VxX3J0dCwgdXNydHQpOworCXRjcF9ydHRfZXN0aW1hdG9yKHNrLCBzZXFfcnR0KTsKIAl0Y3Bfc2V0X3J0byhzayk7CiAJaW5ldF9jc2soc2spLT5pY3NrX2JhY2tvZmYgPSAwOwogCXRjcF9ib3VuZF9ydG8oc2spOwogfQogCi1zdGF0aWMgdm9pZCB0Y3BfYWNrX25vX3RzdGFtcChzdHJ1Y3Qgc29jayAqc2ssIHUzMiBzZXFfcnR0LCB1MzIgKnVzcnR0LCBpbnQgZmxhZykKK3N0YXRpYyB2b2lkIHRjcF9hY2tfbm9fdHN0YW1wKHN0cnVjdCBzb2NrICpzaywgdTMyIHNlcV9ydHQsIGludCBmbGFnKQogewogCS8qIFdlIGRvbid0IGhhdmUgYSB0aW1lc3RhbXAuIENhbiBvbmx5IHVzZQogCSAqIHBhY2tldHMgdGhhdCBhcmUgbm90IHJldHJhbnNtaXR0ZWQgdG8gZGV0ZXJtaW5lCkBAIC0xOTYwLDIxICsyMDUzLDIxIEBACiAJaWYgKGZsYWcgJiBGTEFHX1JFVFJBTlNfREFUQV9BQ0tFRCkKIAkJcmV0dXJuOwogCi0JdGNwX3J0dF9lc3RpbWF0b3Ioc2ssIHNlcV9ydHQsIHVzcnR0KTsKKwl0Y3BfcnR0X2VzdGltYXRvcihzaywgc2VxX3J0dCk7CiAJdGNwX3NldF9ydG8oc2spOwogCWluZXRfY3NrKHNrKS0+aWNza19iYWNrb2ZmID0gMDsKIAl0Y3BfYm91bmRfcnRvKHNrKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHRjcF9hY2tfdXBkYXRlX3J0dChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IGludCBmbGFnLAotCQkJCSAgICAgIGNvbnN0IHMzMiBzZXFfcnR0LCB1MzIgKnVzcnR0KQorCQkJCSAgICAgIGNvbnN0IHMzMiBzZXFfcnR0KQogewogCWNvbnN0IHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwogCS8qIE5vdGUgdGhhdCBwZWVyIE1BWSBzZW5kIHplcm8gZWNoby4gSW4gdGhpcyBjYXNlIGl0IGlzIGlnbm9yZWQuIChyZmMxMzIzKSAqLwogCWlmICh0cC0+cnhfb3B0LnNhd190c3RhbXAgJiYgdHAtPnJ4X29wdC5yY3ZfdHNlY3IpCi0JCXRjcF9hY2tfc2F3X3RzdGFtcChzaywgdXNydHQsIGZsYWcpOworCQl0Y3BfYWNrX3Nhd190c3RhbXAoc2ssIGZsYWcpOwogCWVsc2UgaWYgKHNlcV9ydHQgPj0gMCkKLQkJdGNwX2Fja19ub190c3RhbXAoc2ssIHNlcV9ydHQsIHVzcnR0LCBmbGFnKTsKKwkJdGNwX2Fja19ub190c3RhbXAoc2ssIHNlcV9ydHQsIGZsYWcpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgdGNwX2NvbmdfYXZvaWQoc3RydWN0IHNvY2sgKnNrLCB1MzIgYWNrLCB1MzIgcnR0LApAQCAtMjA1NCwyMCArMjE0NywyNyBAQAogCXJldHVybiBhY2tlZDsKIH0KIAorc3RhdGljIGlubGluZSB1MzIgdGNwX3VzcnR0KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IHRpbWV2YWwgdHYsIG5vdzsKKworCWRvX2dldHRpbWVvZmRheSgmbm93KTsKKwlza2JfZ2V0X3RpbWVzdGFtcChza2IsICZ0dik7CisJcmV0dXJuIChub3cudHZfc2VjIC0gdHYudHZfc2VjKSAqIDEwMDAwMDAgKyAobm93LnR2X3VzZWMgLSB0di50dl91c2VjKTsKK30KIAogLyogUmVtb3ZlIGFja25vd2xlZGdlZCBmcmFtZXMgZnJvbSB0aGUgcmV0cmFuc21pc3Npb24gcXVldWUuICovCi1zdGF0aWMgaW50IHRjcF9jbGVhbl9ydHhfcXVldWUoc3RydWN0IHNvY2sgKnNrLCBfX3MzMiAqc2VxX3J0dF9wLCBzMzIgKnNlcV91c3J0dCkKK3N0YXRpYyBpbnQgdGNwX2NsZWFuX3J0eF9xdWV1ZShzdHJ1Y3Qgc29jayAqc2ssIF9fczMyICpzZXFfcnR0X3ApCiB7CiAJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CisJY29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJX191MzIgbm93ID0gdGNwX3RpbWVfc3RhbXA7CiAJaW50IGFja2VkID0gMDsKIAlfX3MzMiBzZXFfcnR0ID0gLTE7Ci0Jc3RydWN0IHRpbWV2YWwgdXNub3c7CiAJdTMyIHBrdHNfYWNrZWQgPSAwOwotCi0JaWYgKHNlcV91c3J0dCkKLQkJZG9fZ2V0dGltZW9mZGF5KCZ1c25vdyk7CisJdm9pZCAoKnJ0dF9zYW1wbGUpKHN0cnVjdCBzb2NrICpzaywgdTMyIHVzcnR0KQorCQk9IGljc2stPmljc2tfY2Ffb3BzLT5ydHRfc2FtcGxlOwogCiAJd2hpbGUgKChza2IgPSBza2JfcGVlaygmc2stPnNrX3dyaXRlX3F1ZXVlKSkgJiYKIAkgICAgICAgc2tiICE9IHNrLT5za19zZW5kX2hlYWQpIHsKQEAgLTIxMDcsMTYgKzIyMDcsMTEgQEAKIAkJCQkJdHAtPnJldHJhbnNfb3V0IC09IHRjcF9za2JfcGNvdW50KHNrYik7CiAJCQkJYWNrZWQgfD0gRkxBR19SRVRSQU5TX0RBVEFfQUNLRUQ7CiAJCQkJc2VxX3J0dCA9IC0xOwotCQkJfSBlbHNlIGlmIChzZXFfcnR0IDwgMCkKKwkJCX0gZWxzZSBpZiAoc2VxX3J0dCA8IDApIHsKIAkJCQlzZXFfcnR0ID0gbm93IC0gc2NiLT53aGVuOwotCQkJaWYgKHNlcV91c3J0dCkgewotCQkJCXN0cnVjdCB0aW1ldmFsIHR2OwotCQkJCi0JCQkJc2tiX2dldF90aW1lc3RhbXAoc2tiLCAmdHYpOwotCQkJCSpzZXFfdXNydHQgPSAodXNub3cudHZfc2VjIC0gdHYudHZfc2VjKSAqIDEwMDAwMDAKLQkJCQkJKyAodXNub3cudHZfdXNlYyAtIHR2LnR2X3VzZWMpOworCQkJCWlmIChydHRfc2FtcGxlKQorCQkJCQkoKnJ0dF9zYW1wbGUpKHNrLCB0Y3BfdXNydHQoc2tiKSk7CiAJCQl9Ci0KIAkJCWlmIChzYWNrZWQgJiBUQ1BDQl9TQUNLRURfQUNLRUQpCiAJCQkJdHAtPnNhY2tlZF9vdXQgLT0gdGNwX3NrYl9wY291bnQoc2tiKTsKIAkJCWlmIChzYWNrZWQgJiBUQ1BDQl9MT1NUKQpAQCAtMjEyNiwxNyArMjIyMSwyMCBAQAogCQkJCSAgICAhYmVmb3JlKHNjYi0+ZW5kX3NlcSwgdHAtPnNuZF91cCkpCiAJCQkJCXRwLT51cmdfbW9kZSA9IDA7CiAJCQl9Ci0JCX0gZWxzZSBpZiAoc2VxX3J0dCA8IDApCisJCX0gZWxzZSBpZiAoc2VxX3J0dCA8IDApIHsKIAkJCXNlcV9ydHQgPSBub3cgLSBzY2ItPndoZW47CisJCQlpZiAocnR0X3NhbXBsZSkKKwkJCQkoKnJ0dF9zYW1wbGUpKHNrLCB0Y3BfdXNydHQoc2tiKSk7CisJCX0KIAkJdGNwX2RlY19wY291bnRfYXBwcm94KCZ0cC0+ZmFja2V0c19vdXQsIHNrYik7CiAJCXRjcF9wYWNrZXRzX291dF9kZWModHAsIHNrYik7CiAJCV9fc2tiX3VubGluayhza2IsICZzay0+c2tfd3JpdGVfcXVldWUpOwogCQlza19zdHJlYW1fZnJlZV9za2Ioc2ssIHNrYik7CisJCWNsZWFyX2FsbF9yZXRyYW5zX2hpbnRzKHRwKTsKIAl9CiAKIAlpZiAoYWNrZWQmRkxBR19BQ0tFRCkgewotCQljb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7Ci0JCXRjcF9hY2tfdXBkYXRlX3J0dChzaywgYWNrZWQsIHNlcV9ydHQsIHNlcV91c3J0dCk7CisJCXRjcF9hY2tfdXBkYXRlX3J0dChzaywgYWNrZWQsIHNlcV9ydHQpOwogCQl0Y3BfYWNrX3BhY2tldHNfb3V0KHNrLCB0cCk7CiAKIAkJaWYgKGljc2stPmljc2tfY2Ffb3BzLT5wa3RzX2Fja2VkKQpAQCAtMjI4NCw3ICsyMzgyLDcgQEAKIAl9CiAKIAkvKiBGLVJUTyBhZmZlY3RzIG9uIHR3byBuZXcgQUNLcyBmb2xsb3dpbmcgUlRPLgotCSAqIEF0IGxhdGVzdCBvbiB0aGlyZCBBQ0sgdGhlIFRDUCBiZWhhdm9yIGlzIGJhY2sgdG8gbm9ybWFsLgorCSAqIEF0IGxhdGVzdCBvbiB0aGlyZCBBQ0sgdGhlIFRDUCBiZWhhdmlvciBpcyBiYWNrIHRvIG5vcm1hbC4KIAkgKi8KIAl0cC0+ZnJ0b19jb3VudGVyID0gKHRwLT5mcnRvX2NvdW50ZXIgKyAxKSAlIDM7CiB9CkBAIC0yMjk5LDcgKzIzOTcsNiBAQAogCXUzMiBhY2sgPSBUQ1BfU0tCX0NCKHNrYiktPmFja19zZXE7CiAJdTMyIHByaW9yX2luX2ZsaWdodDsKIAlzMzIgc2VxX3J0dDsKLQlzMzIgc2VxX3VzcnR0ID0gMDsKIAlpbnQgcHJpb3JfcGFja2V0czsKIAogCS8qIElmIHRoZSBhY2sgaXMgbmV3ZXIgdGhhbiBzZW50IG9yIG9sZGVyIHRoYW4gcHJldmlvdXMgYWNrcwpAQCAtMjMxMSw2ICsyNDA4LDkgQEAKIAlpZiAoYmVmb3JlKGFjaywgcHJpb3Jfc25kX3VuYSkpCiAJCWdvdG8gb2xkX2FjazsKIAorCWlmIChzeXNjdGxfdGNwX2FiYyAmJiBpY3NrLT5pY3NrX2NhX3N0YXRlIDwgVENQX0NBX0NXUikKKwkJdHAtPmJ5dGVzX2Fja2VkICs9IGFjayAtIHByaW9yX3NuZF91bmE7CisKIAlpZiAoIShmbGFnJkZMQUdfU0xPV1BBVEgpICYmIGFmdGVyKGFjaywgcHJpb3Jfc25kX3VuYSkpIHsKIAkJLyogV2luZG93IGlzIGNvbnN0YW50LCBwdXJlIGZvcndhcmQgYWR2YW5jZS4KIAkJICogTm8gbW9yZSBjaGVja3MgYXJlIHJlcXVpcmVkLgpAQCAtMjM1MiwxNCArMjQ1MiwxMyBAQAogCXByaW9yX2luX2ZsaWdodCA9IHRjcF9wYWNrZXRzX2luX2ZsaWdodCh0cCk7CiAKIAkvKiBTZWUgaWYgd2UgY2FuIHRha2UgYW55dGhpbmcgb2ZmIG9mIHRoZSByZXRyYW5zbWl0IHF1ZXVlLiAqLwotCWZsYWcgfD0gdGNwX2NsZWFuX3J0eF9xdWV1ZShzaywgJnNlcV9ydHQsCi0JCQkJICAgIGljc2stPmljc2tfY2Ffb3BzLT5ydHRfc2FtcGxlID8gJnNlcV91c3J0dCA6IE5VTEwpOworCWZsYWcgfD0gdGNwX2NsZWFuX3J0eF9xdWV1ZShzaywgJnNlcV9ydHQpOwogCiAJaWYgKHRwLT5mcnRvX2NvdW50ZXIpCiAJCXRjcF9wcm9jZXNzX2ZydG8oc2ssIHByaW9yX3NuZF91bmEpOwogCiAJaWYgKHRjcF9hY2tfaXNfZHViaW91cyhzaywgZmxhZykpIHsKLQkJLyogQWR2YW52ZSBDV05ELCBpZiBzdGF0ZSBhbGxvd3MgdGhpcy4gKi8KKwkJLyogQWR2YW5jZSBDV05ELCBpZiBzdGF0ZSBhbGxvd3MgdGhpcy4gKi8KIAkJaWYgKChmbGFnICYgRkxBR19EQVRBX0FDS0VEKSAmJiB0Y3BfbWF5X3JhaXNlX2N3bmQoc2ssIGZsYWcpKQogCQkJdGNwX2NvbmdfYXZvaWQoc2ssIGFjaywgIHNlcV9ydHQsIHByaW9yX2luX2ZsaWdodCwgMCk7CiAJCXRjcF9mYXN0cmV0cmFuc19hbGVydChzaywgcHJpb3Jfc25kX3VuYSwgcHJpb3JfcGFja2V0cywgZmxhZyk7CkBAIC0zMTQ4LDcgKzMyNDcsNyBAQAogewogCXN0cnVjdCBza19idWZmICpza2I7CiAKLQkvKiBGaXJzdCwgY2hlY2sgdGhhdCBxdWV1ZSBpcyBjb2xsYXBzYWJsZSBhbmQgZmluZAorCS8qIEZpcnN0LCBjaGVjayB0aGF0IHF1ZXVlIGlzIGNvbGxhcHNpYmxlIGFuZCBmaW5kCiAJICogdGhlIHBvaW50IHdoZXJlIGNvbGxhcHNpbmcgY2FuIGJlIHVzZWZ1bC4gKi8KIAlmb3IgKHNrYiA9IGhlYWQ7IHNrYiAhPSB0YWlsOyApIHsKIAkJLyogTm8gbmV3IGJpdHM/IEl0IGlzIHBvc3NpYmxlIG9uIG9mbyBxdWV1ZS4gKi8KQEAgLTM0NTYsNyArMzU1NSw3IEBACiAKIC8qCiAgKglUaGlzIHJvdXRpbmUgaXMgb25seSBjYWxsZWQgd2hlbiB3ZSBoYXZlIHVyZ2VudCBkYXRhCi0gKglzaWduYWxsZWQuIEl0cyB0aGUgJ3Nsb3cnIHBhcnQgb2YgdGNwX3VyZy4gSXQgY291bGQgYmUKKyAqCXNpZ25hbGVkLiBJdHMgdGhlICdzbG93JyBwYXJ0IG9mIHRjcF91cmcuIEl0IGNvdWxkIGJlCiAgKgltb3ZlZCBpbmxpbmUgbm93IGFzIHRjcF91cmcgaXMgb25seSBjYWxsZWQgZnJvbSBvbmUKICAqCXBsYWNlLiBXZSBoYW5kbGUgVVJHZW50IGRhdGEgd3JvbmcuIFdlIGhhdmUgdG8gLSBhcwogICoJQlNEIHN0aWxsIGRvZXNuJ3QgdXNlIHRoZSBjb3JyZWN0aW9uIGZyb20gUkZDOTYxLgpAQCAtMzUwMSw3ICszNjAwLDcgQEAKIAkgKiB1cmdlbnQuIFRvIGRvIHRoaXMgcmVxdWlyZXMgc29tZSBjYXJlLiBXZSBjYW5ub3QganVzdCBpZ25vcmUKIAkgKiB0cC0+Y29waWVkX3NlcSBzaW5jZSB3ZSB3b3VsZCByZWFkIHRoZSBsYXN0IHVyZ2VudCBieXRlIGFnYWluCiAJICogYXMgZGF0YSwgbm9yIGNhbiB3ZSBhbHRlciBjb3BpZWRfc2VxIHVudGlsIHRoaXMgZGF0YSBhcnJpdmVzCi0JICogb3Igd2UgYnJlYWsgdGhlIHNlbWF0aWNzIG9mIFNJT0NBVE1BUksgKGFuZCB0aHVzIHNvY2thdG1hcmsoKSkKKwkgKiBvciB3ZSBicmVhayB0aGUgc2VtYW50aWNzIG9mIFNJT0NBVE1BUksgKGFuZCB0aHVzIHNvY2thdG1hcmsoKSkKIAkgKgogCSAqIE5PVEUuIERvdWJsZSBEdXRjaC4gUmVuZGVyaW5nIHRvIHBsYWluIEVuZ2xpc2g6IGF1dGhvciBvZiBjb21tZW50CiAJICogYWJvdmUgZGlkIHNvbWV0aGluZyBzb3J0IG9mIAlzZW5kKCJBIiwgTVNHX09PQik7IHNlbmQoIkIiLCBNU0dfT09CKTsKQEAgLTM2NDYsNyArMzc0NSw3IEBACiAJdHAtPnJ4X29wdC5zYXdfdHN0YW1wID0gMDsKIAogCS8qCXByZWRfZmxhZ3MgaXMgMHhTPzEwIDw8IDE2ICsgc25kX3duZAotCSAqCWlmIGhlYWRlcl9wcmVkaXRpb24gaXMgdG8gYmUgbWFkZQorCSAqCWlmIGhlYWRlcl9wcmVkaWN0aW9uIGlzIHRvIGJlIG1hZGUKIAkgKgknUycgd2lsbCBhbHdheXMgYmUgdHAtPnRjcF9oZWFkZXJfbGVuID4+IDIKIAkgKgknPycgd2lsbCBiZSAwIGZvciB0aGUgZmFzdCBwYXRoLCBvdGhlcndpc2UgcHJlZF9mbGFncyBpcyAwIHRvCiAJICogIHR1cm4gaXQgb2ZmCSh3aGVuIHRoZXJlIGFyZSBob2xlcyBpbiB0aGUgcmVjZWl2ZSAKQEAgLTQyNDIsNyArNDM0MSw3IEBACiAJCQkJICovCiAJCQkJaWYgKHRwLT5yeF9vcHQuc2F3X3RzdGFtcCAmJiB0cC0+cnhfb3B0LnJjdl90c2VjciAmJgogCQkJCSAgICAhdHAtPnNydHQpCi0JCQkJCXRjcF9hY2tfc2F3X3RzdGFtcChzaywgTlVMTCwgMCk7CisJCQkJCXRjcF9hY2tfc2F3X3RzdGFtcChzaywgMCk7CiAKIAkJCQlpZiAodHAtPnJ4X29wdC50c3RhbXBfb2spCiAJCQkJCXRwLT5hZHZtc3MgLT0gVENQT0xFTl9UU1RBTVBfQUxJR05FRDsKQEAgLTQzNzIsNiArNDQ3MSw3IEBACiAKIEVYUE9SVF9TWU1CT0woc3lzY3RsX3RjcF9lY24pOwogRVhQT1JUX1NZTUJPTChzeXNjdGxfdGNwX3Jlb3JkZXJpbmcpOworRVhQT1JUX1NZTUJPTChzeXNjdGxfdGNwX2FiYyk7CiBFWFBPUlRfU1lNQk9MKHRjcF9wYXJzZV9vcHRpb25zKTsKIEVYUE9SVF9TWU1CT0wodGNwX3Jjdl9lc3RhYmxpc2hlZCk7CiBFWFBPUlRfU1lNQk9MKHRjcF9yY3Zfc3RhdGVfcHJvY2Vzcyk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfaXB2NC5jIGIvbmV0L2lwdjQvdGNwX2lwdjQuYwppbmRleCA0OWQ2N2NkLi40ZDUwMjFlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfaXB2NC5jCisrKyBiL25ldC9pcHY0L3RjcF9pcHY0LmMKQEAgLTM5LDcgKzM5LDcgQEAKICAqCQkJCQlyZXF1ZXN0X3NvY2sgaGFuZGxpbmcgYW5kIG1vdmVkCiAgKgkJCQkJbW9zdCBvZiBpdCBpbnRvIHRoZSBhZiBpbmRlcGVuZGVudCBjb2RlLgogICoJCQkJCUFkZGVkIHRhaWwgZHJvcCBhbmQgc29tZSBvdGhlciBidWdmaXhlcy4KLSAqCQkJCQlBZGRlZCBuZXcgbGlzdGVuIHNlbWF0aWNzLgorICoJCQkJCUFkZGVkIG5ldyBsaXN0ZW4gc2VtYW50aWNzLgogICoJCU1pa2UgTWNMYWdhbgk6CVJvdXRpbmcgYnkgc291cmNlCiAgKglKdWFuIEpvc2UgQ2lhcmxhbnRlOgkJaXBfZHluYWRkciBiaXRzCiAgKgkJQW5kaSBLbGVlbjoJCXZhcmlvdXMgZml4ZXMuCkBAIC04MjMsOCArODIzLDcgQEAKICAqLwogc3RhdGljIHZvaWQgdGNwX3Y0X3JlcXNrX2Rlc3RydWN0b3Ioc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKQogewotCWlmIChpbmV0X3JzayhyZXEpLT5vcHQpCi0JCWtmcmVlKGluZXRfcnNrKHJlcSktPm9wdCk7CisJa2ZyZWUoaW5ldF9yc2socmVxKS0+b3B0KTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHN5bl9mbG9vZF93YXJuaW5nKHN0cnVjdCBza19idWZmICpza2IpCkBAIC0xMTExLDI0ICsxMTEwLDE4IEBACiBzdGF0aWMgaW50IHRjcF92NF9jaGVja3N1bV9pbml0KHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX0hXKSB7Ci0JCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CiAJCWlmICghdGNwX3Y0X2NoZWNrKHNrYi0+aC50aCwgc2tiLT5sZW4sIHNrYi0+bmguaXBoLT5zYWRkciwKLQkJCQkgIHNrYi0+bmguaXBoLT5kYWRkciwgc2tiLT5jc3VtKSkKKwkJCQkgIHNrYi0+bmguaXBoLT5kYWRkciwgc2tiLT5jc3VtKSkgeworCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKIAkJCXJldHVybiAwOwotCi0JCUxJTUlUX05FVERFQlVHKEtFUk5fREVCVUcgImh3IHRjcCB2NCBjc3VtIGZhaWxlZFxuIik7Ci0JCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKKwkJfQogCX0KKworCXNrYi0+Y3N1bSA9IGNzdW1fdGNwdWRwX25vZm9sZChza2ItPm5oLmlwaC0+c2FkZHIsIHNrYi0+bmguaXBoLT5kYWRkciwKKwkJCQkgICAgICAgc2tiLT5sZW4sIElQUFJPVE9fVENQLCAwKTsKKwogCWlmIChza2ItPmxlbiA8PSA3NikgewotCQlpZiAodGNwX3Y0X2NoZWNrKHNrYi0+aC50aCwgc2tiLT5sZW4sIHNrYi0+bmguaXBoLT5zYWRkciwKLQkJCQkgc2tiLT5uaC5pcGgtPmRhZGRyLAotCQkJCSBza2JfY2hlY2tzdW0oc2tiLCAwLCBza2ItPmxlbiwgMCkpKQotCQkJcmV0dXJuIC0xOwotCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwotCX0gZWxzZSB7Ci0JCXNrYi0+Y3N1bSA9IH50Y3BfdjRfY2hlY2soc2tiLT5oLnRoLCBza2ItPmxlbiwKLQkJCQkJICBza2ItPm5oLmlwaC0+c2FkZHIsCi0JCQkJCSAgc2tiLT5uaC5pcGgtPmRhZGRyLCAwKTsKKwkJcmV0dXJuIF9fc2tiX2NoZWNrc3VtX2NvbXBsZXRlKHNrYik7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMTIxNywxMCArMTIxMCwxMCBAQAogCiAJLyogQW4gZXhwbGFuYXRpb24gaXMgcmVxdWlyZWQgaGVyZSwgSSB0aGluay4KIAkgKiBQYWNrZXQgbGVuZ3RoIGFuZCBkb2ZmIGFyZSB2YWxpZGF0ZWQgYnkgaGVhZGVyIHByZWRpY3Rpb24sCi0JICogcHJvdmlkZWQgY2FzZSBvZiB0aC0+ZG9mZj09MCBpcyBlbGltaW5ldGVkLgorCSAqIHByb3ZpZGVkIGNhc2Ugb2YgdGgtPmRvZmY9PTAgaXMgZWxpbWluYXRlZC4KIAkgKiBTbywgd2UgZGVmZXIgdGhlIGNoZWNrcy4gKi8KIAlpZiAoKHNrYi0+aXBfc3VtbWVkICE9IENIRUNLU1VNX1VOTkVDRVNTQVJZICYmCi0JICAgICB0Y3BfdjRfY2hlY2tzdW1faW5pdChza2IpIDwgMCkpCisJICAgICB0Y3BfdjRfY2hlY2tzdW1faW5pdChza2IpKSkKIAkJZ290byBiYWRfcGFja2V0OwogCiAJdGggPSBza2ItPmgudGg7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMgYi9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMKaW5kZXggYjFhNjNiMi4uMWI2NmEyYSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jCisrKyBiL25ldC9pcHY0L3RjcF9taW5pc29ja3MuYwpAQCAtMTU4LDcgKzE1OCw3IEBACiAJCS8qIEkgYW0gc2hhbWVkLCBidXQgZmFpbGVkIHRvIG1ha2UgaXQgbW9yZSBlbGVnYW50LgogCQkgKiBZZXMsIGl0IGlzIGRpcmVjdCByZWZlcmVuY2UgdG8gSVAsIHdoaWNoIGlzIGltcG9zc2libGUKIAkJICogdG8gZ2VuZXJhbGl6ZSB0byBJUHY2LiBUYWtpbmcgaW50byBhY2NvdW50IHRoYXQgSVB2NgotCQkgKiBkbyBub3QgdW5kZXJ0c25hZCByZWN5Y2xpbmcgaW4gYW55IGNhc2UsIGl0IG5vdAorCQkgKiBkbyBub3QgdW5kZXJzdGFuZCByZWN5Y2xpbmcgaW4gYW55IGNhc2UsIGl0IG5vdAogCQkgKiBhIGJpZyBwcm9ibGVtIGluIHByYWN0aWNlLiAtLUFOSyAqLwogCQlpZiAodHctPnR3X2ZhbWlseSA9PSBBRl9JTkVUICYmCiAJCSAgICB0Y3BfZGVhdGhfcm93LnN5c2N0bF90d19yZWN5Y2xlICYmIHRjcHR3LT50d190c19yZWNlbnRfc3RhbXAgJiYKQEAgLTE5NCw3ICsxOTQsNyBAQAogCQkvKiBJbiB3aW5kb3cgc2VnbWVudCwgaXQgbWF5IGJlIG9ubHkgcmVzZXQgb3IgYmFyZSBhY2suICovCiAKIAkJaWYgKHRoLT5yc3QpIHsKLQkJCS8qIFRoaXMgaXMgVElNRV9XQUlUIGFzc2FzaW5hdGlvbiwgaW4gdHdvIGZsYXZvcnMuCisJCQkvKiBUaGlzIGlzIFRJTUVfV0FJVCBhc3Nhc3NpbmF0aW9uLCBpbiB0d28gZmxhdm9ycy4KIAkJCSAqIE9oIHdlbGwuLi4gbm9ib2R5IGhhcyBhIHN1ZmZpY2llbnQgc29sdXRpb24gdG8gdGhpcwogCQkJICogcHJvdG9jb2wgYnVnIHlldC4KIAkJCSAqLwpAQCAtMzgwLDYgKzM4MCw3IEBACiAJCSAqLwogCQluZXd0cC0+c25kX2N3bmQgPSAyOwogCQluZXd0cC0+c25kX2N3bmRfY250ID0gMDsKKwkJbmV3dHAtPmJ5dGVzX2Fja2VkID0gMDsKIAogCQluZXd0cC0+ZnJ0b19jb3VudGVyID0gMDsKIAkJbmV3dHAtPmZydG9faGlnaG1hcmsgPSAwOwpAQCAtNTUwLDcgKzU1MSw3IEBACiAKIAkvKiBSRkM3OTMgcGFnZSAzNjogIklmIHRoZSBjb25uZWN0aW9uIGlzIGluIGFueSBub24tc3luY2hyb25pemVkIHN0YXRlIC4uLgogCSAqICAgICAgICAgICAgICAgICAgYW5kIHRoZSBpbmNvbWluZyBzZWdtZW50IGFja25vd2xlZGdlcyBzb21ldGhpbmcgbm90IHlldAotCSAqICAgICAgICAgICAgICAgICAgc2VudCAodGhlIHNlZ21lbnQgY2FycmllcyBhbiB1bmFjY2FwdGFibGUgQUNLKSAuLi4KKwkgKiAgICAgICAgICAgICAgICAgIHNlbnQgKHRoZSBzZWdtZW50IGNhcnJpZXMgYW4gdW5hY2NlcHRhYmxlIEFDSykgLi4uCiAJICogICAgICAgICAgICAgICAgICBhIHJlc2V0IGlzIHNlbnQuIgogCSAqCiAJICogSW52YWxpZCBBQ0s6IHJlc2V0IHdpbGwgYmUgc2VudCBieSBsaXN0ZW5pbmcgc29ja2V0CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMgYi9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKaW5kZXggYjkwNzQ1Ni4uMDI5YzcwZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX291dHB1dC5jCisrKyBiL25ldC9pcHY0L3RjcF9vdXRwdXQuYwpAQCAtNDM2LDYgKzQzNiw4IEBACiAJdTE2IGZsYWdzOwogCiAJQlVHX09OKGxlbiA+IHNrYi0+bGVuKTsKKworIAljbGVhcl9hbGxfcmV0cmFuc19oaW50cyh0cCk7CiAJbnNpemUgPSBza2JfaGVhZGxlbihza2IpIC0gbGVuOwogCWlmIChuc2l6ZSA8IDApCiAJCW5zaXplID0gMDsKQEAgLTU5OSw3ICs2MDEsNyBAQAogICAgZm9yIFRDUCBvcHRpb25zLCBidXQgaW5jbHVkZXMgb25seSBiYXJlIFRDUCBoZWFkZXIuCiAKICAgIHRwLT5yeF9vcHQubXNzX2NsYW1wIGlzIG1zcyBuZWdvdGlhdGVkIGF0IGNvbm5lY3Rpb24gc2V0dXAuCi0gICBJdCBpcyBtaW51bXVtIG9mIHVzZXJfbXNzIGFuZCBtc3MgcmVjZWl2ZWQgd2l0aCBTWU4uCisgICBJdCBpcyBtaW5pbXVtIG9mIHVzZXJfbXNzIGFuZCBtc3MgcmVjZWl2ZWQgd2l0aCBTWU4uCiAgICBJdCBhbHNvIGRvZXMgbm90IGluY2x1ZGUgVENQIG9wdGlvbnMuCiAKICAgIHRwLT5wbXR1X2Nvb2tpZSBpcyBsYXN0IHBtdHUsIHNlZW4gYnkgdGhpcyBmdW5jdGlvbi4KQEAgLTExNzEsNyArMTE3Myw3IEBACiB7CiAJc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spOwogCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwotCS8qIE1TUyBmb3IgdGhlIHBlZXIncyBkYXRhLiAgUHJldmlvdXMgdmVyaW9ucyB1c2VkIG1zc19jbGFtcAorCS8qIE1TUyBmb3IgdGhlIHBlZXIncyBkYXRhLiAgUHJldmlvdXMgdmVyc2lvbnMgdXNlZCBtc3NfY2xhbXAKIAkgKiBoZXJlLiAgSSBkb24ndCBrbm93IGlmIHRoZSB2YWx1ZSBiYXNlZCBvbiBvdXIgZ3Vlc3NlcwogCSAqIG9mIHBlZXIncyBNU1MgaXMgYmV0dGVyIGZvciB0aGUgcGVyZm9ybWFuY2UuICBJdCdzIG1vcmUgY29ycmVjdAogCSAqIGJ1dCBtYXkgYmUgd29yc2UgZm9yIHRoZSBwZXJmb3JtYW5jZSBiZWNhdXNlIG9mIHJjdl9tc3MKQEAgLTEyNjAsNyArMTI2MiwxMCBAQAogCQlCVUdfT04odGNwX3NrYl9wY291bnQoc2tiKSAhPSAxIHx8CiAJCSAgICAgICB0Y3Bfc2tiX3Bjb3VudChuZXh0X3NrYikgIT0gMSk7CiAKLQkJLyogT2suICBXZSB3aWxsIGJlIGFibGUgdG8gY29sbGFwc2UgdGhlIHBhY2tldC4gKi8KKwkJLyogY2hhbmdpbmcgdHJhbnNtaXQgcXVldWUgdW5kZXIgdXMgc28gY2xlYXIgaGludHMgKi8KKwkJY2xlYXJfYWxsX3JldHJhbnNfaGludHModHApOworCisJCS8qIE9rLglXZSB3aWxsIGJlIGFibGUgdG8gY29sbGFwc2UgdGhlIHBhY2tldC4gKi8KIAkJX19za2JfdW5saW5rKG5leHRfc2tiLCAmc2stPnNrX3dyaXRlX3F1ZXVlKTsKIAogCQltZW1jcHkoc2tiX3B1dChza2IsIG5leHRfc2tiX3NpemUpLCBuZXh0X3NrYi0+ZGF0YSwgbmV4dF9za2Jfc2l6ZSk7CkBAIC0xMzMwLDYgKzEzMzUsOCBAQAogCQl9CiAJfQogCisJY2xlYXJfYWxsX3JldHJhbnNfaGludHModHApOworCiAJaWYgKCFsb3N0KQogCQlyZXR1cm47CiAKQEAgLTEzNjEsNyArMTM2OCw3IEBACiAJaW50IGVycjsKIAogCS8qIERvIG5vdCBzZW50IG1vcmUgdGhhbiB3ZSBxdWV1ZWQuIDEvNCBpcyByZXNlcnZlZCBmb3IgcG9zc2libGUKLQkgKiBjb3B5aW5nIG92ZXJoZWFkOiBmcmdhZ21lbnRhdGlvbiwgdHVubmVsaW5nLCBtYW5nbGluZyBldGMuCisJICogY29weWluZyBvdmVyaGVhZDogZnJhZ21lbnRhdGlvbiwgdHVubmVsaW5nLCBtYW5nbGluZyBldGMuCiAJICovCiAJaWYgKGF0b21pY19yZWFkKCZzay0+c2tfd21lbV9hbGxvYykgPgogCSAgICBtaW4oc2stPnNrX3dtZW1fcXVldWVkICsgKHNrLT5za193bWVtX3F1ZXVlZCA+PiAyKSwgc2stPnNrX3NuZGJ1ZikpCkBAIC0xNDY4LDEzICsxNDc1LDI1IEBACiAJY29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spOwogCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwogCXN0cnVjdCBza19idWZmICpza2I7Ci0JaW50IHBhY2tldF9jbnQgPSB0cC0+bG9zdF9vdXQ7CisJaW50IHBhY2tldF9jbnQ7CisKKwlpZiAodHAtPnJldHJhbnNtaXRfc2tiX2hpbnQpIHsKKwkJc2tiID0gdHAtPnJldHJhbnNtaXRfc2tiX2hpbnQ7CisJCXBhY2tldF9jbnQgPSB0cC0+cmV0cmFuc21pdF9jbnRfaGludDsKKwl9ZWxzZXsKKwkJc2tiID0gc2stPnNrX3dyaXRlX3F1ZXVlLm5leHQ7CisJCXBhY2tldF9jbnQgPSAwOworCX0KIAogCS8qIEZpcnN0IHBhc3M6IHJldHJhbnNtaXQgbG9zdCBwYWNrZXRzLiAqLwotCWlmIChwYWNrZXRfY250KSB7Ci0JCXNrX3N0cmVhbV9mb3JfcmV0cmFuc19xdWV1ZShza2IsIHNrKSB7CisJaWYgKHRwLT5sb3N0X291dCkgeworCQlza19zdHJlYW1fZm9yX3JldHJhbnNfcXVldWVfZnJvbShza2IsIHNrKSB7CiAJCQlfX3U4IHNhY2tlZCA9IFRDUF9TS0JfQ0Ioc2tiKS0+c2Fja2VkOwogCisJCQkvKiB3ZSBjb3VsZCBkbyBiZXR0ZXIgdGhhbiB0byBhc3NpZ24gZWFjaCB0aW1lICovCisJCQl0cC0+cmV0cmFuc21pdF9za2JfaGludCA9IHNrYjsKKwkJCXRwLT5yZXRyYW5zbWl0X2NudF9oaW50ID0gcGFja2V0X2NudDsKKwogCQkJLyogQXNzdW1lIHRoaXMgcmV0cmFuc21pdCB3aWxsIGdlbmVyYXRlCiAJCQkgKiBvbmx5IG9uZSBwYWNrZXQgZm9yIGNvbmdlc3Rpb24gd2luZG93CiAJCQkgKiBjYWxjdWxhdGlvbiBwdXJwb3Nlcy4gIFRoaXMgd29ya3MgYmVjYXVzZQpAQCAtMTQ4NSwxMCArMTUwNCwxMiBAQAogCQkJaWYgKHRjcF9wYWNrZXRzX2luX2ZsaWdodCh0cCkgPj0gdHAtPnNuZF9jd25kKQogCQkJCXJldHVybjsKIAotCQkJaWYgKHNhY2tlZCZUQ1BDQl9MT1NUKSB7CisJCQlpZiAoc2Fja2VkICYgVENQQ0JfTE9TVCkgewogCQkJCWlmICghKHNhY2tlZCYoVENQQ0JfU0FDS0VEX0FDS0VEfFRDUENCX1NBQ0tFRF9SRVRSQU5TKSkpIHsKLQkJCQkJaWYgKHRjcF9yZXRyYW5zbWl0X3NrYihzaywgc2tiKSkKKwkJCQkJaWYgKHRjcF9yZXRyYW5zbWl0X3NrYihzaywgc2tiKSkgeworCQkJCQkJdHAtPnJldHJhbnNtaXRfc2tiX2hpbnQgPSBOVUxMOwogCQkJCQkJcmV0dXJuOworCQkJCQl9CiAJCQkJCWlmIChpY3NrLT5pY3NrX2NhX3N0YXRlICE9IFRDUF9DQV9Mb3NzKQogCQkJCQkJTkVUX0lOQ19TVEFUU19CSChMSU5VWF9NSUJfVENQRkFTVFJFVFJBTlMpOwogCQkJCQllbHNlCkBAIC0xNTAxLDggKzE1MjIsOCBAQAogCQkJCQkJCQkJICBUQ1BfUlRPX01BWCk7CiAJCQkJfQogCi0JCQkJcGFja2V0X2NudCAtPSB0Y3Bfc2tiX3Bjb3VudChza2IpOwotCQkJCWlmIChwYWNrZXRfY250IDw9IDApCisJCQkJcGFja2V0X2NudCArPSB0Y3Bfc2tiX3Bjb3VudChza2IpOworCQkJCWlmIChwYWNrZXRfY250ID49IHRwLT5sb3N0X291dCkKIAkJCQkJYnJlYWs7CiAJCQl9CiAJCX0KQEAgLTE1MjgsOSArMTU0OSwxOCBAQAogCWlmICh0Y3BfbWF5X3NlbmRfbm93KHNrLCB0cCkpCiAJCXJldHVybjsKIAotCXBhY2tldF9jbnQgPSAwOworCWlmICh0cC0+Zm9yd2FyZF9za2JfaGludCkgeworCQlza2IgPSB0cC0+Zm9yd2FyZF9za2JfaGludDsKKwkJcGFja2V0X2NudCA9IHRwLT5mb3J3YXJkX2NudF9oaW50OworCX0gZWxzZXsKKwkJc2tiID0gc2stPnNrX3dyaXRlX3F1ZXVlLm5leHQ7CisJCXBhY2tldF9jbnQgPSAwOworCX0KIAotCXNrX3N0cmVhbV9mb3JfcmV0cmFuc19xdWV1ZShza2IsIHNrKSB7CisJc2tfc3RyZWFtX2Zvcl9yZXRyYW5zX3F1ZXVlX2Zyb20oc2tiLCBzaykgeworCQl0cC0+Zm9yd2FyZF9jbnRfaGludCA9IHBhY2tldF9jbnQ7CisJCXRwLT5mb3J3YXJkX3NrYl9oaW50ID0gc2tiOworCiAJCS8qIFNpbWlsYXIgdG8gdGhlIHJldHJhbnNtaXQgbG9vcCBhYm92ZSB3ZQogCQkgKiBjYW4gcHJldGVuZCB0aGF0IHRoZSByZXRyYW5zbWl0dGVkIFNLQgogCQkgKiB3ZSBzZW5kIG91dCBoZXJlIHdpbGwgYmUgY29tcG9zZWQgb2Ygb25lCkBAIC0xNTQ3LDggKzE1NzcsMTAgQEAKIAkJCWNvbnRpbnVlOwogCiAJCS8qIE9rLCByZXRyYW5zbWl0IGl0LiAqLwotCQlpZiAodGNwX3JldHJhbnNtaXRfc2tiKHNrLCBza2IpKQorCQlpZiAodGNwX3JldHJhbnNtaXRfc2tiKHNrLCBza2IpKSB7CisJCQl0cC0+Zm9yd2FyZF9za2JfaGludCA9IE5VTEw7CiAJCQlicmVhazsKKwkJfQogCiAJCWlmIChza2IgPT0gc2tiX3BlZWsoJnNrLT5za193cml0ZV9xdWV1ZSkpCiAJCQlpbmV0X2Nza19yZXNldF94bWl0X3RpbWVyKHNrLCBJQ1NLX1RJTUVfUkVUUkFOUywKQEAgLTIwNTgsMyArMjA5MCw0IEBACiBFWFBPUlRfU1lNQk9MKHRjcF9tYWtlX3N5bmFjayk7CiBFWFBPUlRfU1lNQk9MKHRjcF9zaW1wbGVfcmV0cmFuc21pdCk7CiBFWFBPUlRfU1lNQk9MKHRjcF9zeW5jX21zcyk7CitFWFBPUlRfU1lNQk9MKHN5c2N0bF90Y3BfdHNvX3dpbl9kaXZpc29yKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9zY2FsYWJsZS5jIGIvbmV0L2lwdjQvdGNwX3NjYWxhYmxlLmMKaW5kZXggMzI3NzcwYi4uMjZkNzQ4NiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX3NjYWxhYmxlLmMKKysrIGIvbmV0L2lwdjQvdGNwX3NjYWxhYmxlLmMKQEAgLTIwLDIwICsyMCwyMCBAQAogCQkJCSAgICB1MzIgaW5fZmxpZ2h0LCBpbnQgZmxhZykKIHsKIAlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKLQlpZiAoaW5fZmxpZ2h0IDwgdHAtPnNuZF9jd25kKQorCisJaWYgKCF0Y3BfaXNfY3duZF9saW1pdGVkKHNrLCBpbl9mbGlnaHQpKQogCQlyZXR1cm47CiAKLQlpZiAodHAtPnNuZF9jd25kIDw9IHRwLT5zbmRfc3N0aHJlc2gpIHsKLQkJdHAtPnNuZF9jd25kKys7Ci0JfSBlbHNlIHsKKwlpZiAodHAtPnNuZF9jd25kIDw9IHRwLT5zbmRfc3N0aHJlc2gpCisJCXRjcF9zbG93X3N0YXJ0KHRwKTsKKwllbHNlIHsKIAkJdHAtPnNuZF9jd25kX2NudCsrOwogCQlpZiAodHAtPnNuZF9jd25kX2NudCA+IG1pbih0cC0+c25kX2N3bmQsIFRDUF9TQ0FMQUJMRV9BSV9DTlQpKXsKLQkJCXRwLT5zbmRfY3duZCsrOworCQkJaWYgKHRwLT5zbmRfY3duZCA8IHRwLT5zbmRfY3duZF9jbGFtcCkKKwkJCQl0cC0+c25kX2N3bmQrKzsKIAkJCXRwLT5zbmRfY3duZF9jbnQgPSAwOwogCQl9CiAJfQotCXRwLT5zbmRfY3duZCA9IG1pbl90KHUzMiwgdHAtPnNuZF9jd25kLCB0cC0+c25kX2N3bmRfY2xhbXApOwotCXRwLT5zbmRfY3duZF9zdGFtcCA9IHRjcF90aW1lX3N0YW1wOwogfQogCiBzdGF0aWMgdTMyIHRjcF9zY2FsYWJsZV9zc3RocmVzaChzdHJ1Y3Qgc29jayAqc2spCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfdGltZXIuYyBiL25ldC9pcHY0L3RjcF90aW1lci5jCmluZGV4IDQxNWVlNDcuLmUxODgwOTUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF90aW1lci5jCisrKyBiL25ldC9pcHY0L3RjcF90aW1lci5jCkBAIC01OCw3ICs1OCw3IEBACiAgKiB0byBwcmV2ZW50IERvUyBhdHRhY2tzLiBJdCBpcyBjYWxsZWQgd2hlbiBhIHJldHJhbnNtaXNzaW9uIHRpbWVvdXQKICAqIG9yIHplcm8gcHJvYmUgdGltZW91dCBvY2N1cnMgb24gb3JwaGFuZWQgc29ja2V0LgogICoKLSAqIENyaXRlcml1bSBpcyBzdGlsbCBub3QgY29uZmlybWVkIGV4cGVyaW1lbnRhbGx5IGFuZCBtYXkgY2hhbmdlLgorICogQ3JpdGVyaWEgaXMgc3RpbGwgbm90IGNvbmZpcm1lZCBleHBlcmltZW50YWxseSBhbmQgbWF5IGNoYW5nZS4KICAqIFdlIGtpbGwgdGhlIHNvY2tldCwgaWY6CiAgKiAxLiBJZiBudW1iZXIgb2Ygb3JwaGFuZWQgc29ja2V0cyBleGNlZWRzIGFuIGFkbWluaXN0cmF0aXZlbHkgY29uZmlndXJlZAogICogICAgbGltaXQuCkBAIC0xMzIsNyArMTMyLDcgQEAKIAkJCSAgIGhvbGUgZGV0ZWN0aW9uLiA6LSgKIAogCQkJICAgSXQgaXMgcGxhY2UgdG8gbWFrZSBpdC4gSXQgaXMgbm90IG1hZGUuIEkgZG8gbm90IHdhbnQKLQkJCSAgIHRvIG1ha2UgaXQuIEl0IGlzIGRpc2d1aXN0aW5nLiBJdCBkb2VzIG5vdCB3b3JrIGluIGFueQorCQkJICAgdG8gbWFrZSBpdC4gSXQgaXMgZGlzZ3VzdGluZy4gSXQgZG9lcyBub3Qgd29yayBpbiBhbnkKIAkJCSAgIGNhc2UuIExldCBtZSB0byBjaXRlIHRoZSBzYW1lIGRyYWZ0LCB3aGljaCByZXF1aXJlcyBmb3IKIAkJCSAgIHVzIHRvIGltcGxlbWVudCB0aGlzOgogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfdmVnYXMuYyBiL25ldC9pcHY0L3RjcF92ZWdhcy5jCmluZGV4IDkzYzVmOTIuLmI3ZDI5NmEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF92ZWdhcy5jCisrKyBiL25ldC9pcHY0L3RjcF92ZWdhcy5jCkBAIC0yMzYsOCArMjM2LDcgQEAKIAkJCS8qIFdlIGRvbid0IGhhdmUgZW5vdWdoIFJUVCBzYW1wbGVzIHRvIGRvIHRoZSBWZWdhcwogCQkJICogY2FsY3VsYXRpb24sIHNvIHdlJ2xsIGJlaGF2ZSBsaWtlIFJlbm8uCiAJCQkgKi8KLQkJCWlmICh0cC0+c25kX2N3bmQgPiB0cC0+c25kX3NzdGhyZXNoKQotCQkJCXRwLT5zbmRfY3duZCsrOworCQkJdGNwX3Jlbm9fY29uZ19hdm9pZChzaywgYWNrLCBzZXFfcnR0LCBpbl9mbGlnaHQsIGZsYWcpOwogCQl9IGVsc2UgewogCQkJdTMyIHJ0dCwgdGFyZ2V0X2N3bmQsIGRpZmY7CiAKQEAgLTI3NSw3ICsyNzQsNyBAQAogCQkJICovCiAJCQlkaWZmID0gKG9sZF93bmQgPDwgVl9QQVJBTV9TSElGVCkgLSB0YXJnZXRfY3duZDsKIAotCQkJaWYgKHRwLT5zbmRfY3duZCA8IHRwLT5zbmRfc3N0aHJlc2gpIHsKKwkJCWlmICh0cC0+c25kX2N3bmQgPD0gdHAtPnNuZF9zc3RocmVzaCkgewogCQkJCS8qIFNsb3cgc3RhcnQuICAqLwogCQkJCWlmIChkaWZmID4gZ2FtbWEpIHsKIAkJCQkJLyogR29pbmcgdG9vIGZhc3QuIFRpbWUgdG8gc2xvdyBkb3duCkBAIC0yOTUsNiArMjk0LDcgQEAKIAkJCQkJCQkgICAgVl9QQVJBTV9TSElGVCkrMSk7CiAKIAkJCQl9CisJCQkJdGNwX3Nsb3dfc3RhcnQodHApOwogCQkJfSBlbHNlIHsKIAkJCQkvKiBDb25nZXN0aW9uIGF2b2lkYW5jZS4gKi8KIAkJCQl1MzIgbmV4dF9zbmRfY3duZDsKQEAgLTMyNywzNyArMzI3LDE3IEBACiAJCQkJZWxzZSBpZiAobmV4dF9zbmRfY3duZCA8IHRwLT5zbmRfY3duZCkKIAkJCQkJdHAtPnNuZF9jd25kLS07CiAJCQl9Ci0JCX0KIAotCQkvKiBXaXBlIHRoZSBzbGF0ZSBjbGVhbiBmb3IgdGhlIG5leHQgUlRULiAqLwotCQl2ZWdhcy0+Y250UlRUID0gMDsKLQkJdmVnYXMtPm1pblJUVCA9IDB4N2ZmZmZmZmY7CisJCQlpZiAodHAtPnNuZF9jd25kIDwgMikKKwkJCQl0cC0+c25kX2N3bmQgPSAyOworCQkJZWxzZSBpZiAodHAtPnNuZF9jd25kID4gdHAtPnNuZF9jd25kX2NsYW1wKQorCQkJCXRwLT5zbmRfY3duZCA9IHRwLT5zbmRfY3duZF9jbGFtcDsKKwkJfQogCX0KIAotCS8qIFRoZSBmb2xsb3dpbmcgY29kZSBpcyBleGVjdXRlZCBmb3IgZXZlcnkgYWNrIHdlIHJlY2VpdmUsCi0JICogZXhjZXB0IGZvciBjb25kaXRpb25zIGNoZWNrZWQgaW4gc2hvdWxkX2FkdmFuY2VfY3duZCgpCi0JICogYmVmb3JlIHRoZSBjYWxsIHRvIHRjcF9jb25nX2F2b2lkKCkuIE1haW5seSB0aGlzIG1lYW5zIHRoYXQKLQkgKiB3ZSBvbmx5IGV4ZWN1dGUgdGhpcyBjb2RlIGlmIHRoZSBhY2sgYWN0dWFsbHkgYWNrZWQgc29tZQotCSAqIGRhdGEuCi0JICovCi0KLQkvKiBJZiB3ZSBhcmUgaW4gc2xvdyBzdGFydCwgaW5jcmVhc2Ugb3VyIGN3bmQgaW4gcmVzcG9uc2UgdG8gdGhpcyBBQ0suCi0JICogKElmIHdlIGFyZSBub3QgaW4gc2xvdyBzdGFydCB0aGVuIHdlIGFyZSBpbiBjb25nZXN0aW9uIGF2b2lkYW5jZSwKLQkgKiBhbmQgYWRqdXN0IG91ciBjb25nZXN0aW9uIHdpbmRvdyBvbmx5IG9uY2UgcGVyIFJUVC4gU2VlIHRoZSBjb2RlCi0JICogYWJvdmUuKQotCSAqLwotCWlmICh0cC0+c25kX2N3bmQgPD0gdHAtPnNuZF9zc3RocmVzaCkKLQkJdHAtPnNuZF9jd25kKys7Ci0KLQkvKiB0byBrZWVwIGN3bmQgZnJvbSBncm93aW5nIHdpdGhvdXQgYm91bmQgKi8KLQl0cC0+c25kX2N3bmQgPSBtaW5fdCh1MzIsIHRwLT5zbmRfY3duZCwgdHAtPnNuZF9jd25kX2NsYW1wKTsKLQotCS8qIE1ha2Ugc3VyZSB0aGF0IHdlIGFyZSBuZXZlciBzbyB0aW1pZCBhcyB0byByZWR1Y2Ugb3VyIGN3bmQgYmVsb3cKLQkgKiAyIE1TUy4KLQkgKgotCSAqIEdvaW5nIGJlbG93IDIgTVNTIHdvdWxkIHJpc2sgaHVnZSBkZWxheWVkIEFDS3MgZnJvbSBvdXIgcmVjZWl2ZXIuCi0JICovCi0JdHAtPnNuZF9jd25kID0gbWF4KHRwLT5zbmRfY3duZCwgMlUpOworCS8qIFdpcGUgdGhlIHNsYXRlIGNsZWFuIGZvciB0aGUgbmV4dCBSVFQuICovCisJdmVnYXMtPmNudFJUVCA9IDA7CisJdmVnYXMtPm1pblJUVCA9IDB4N2ZmZmZmZmY7CiB9CiAKIC8qIEV4dHJhY3QgaW5mbyBmb3IgVGNwIHNvY2tldCBpbmZvIHByb3ZpZGVkIHZpYSBuZXRsaW5rLiAqLwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdWRwLmMgYi9uZXQvaXB2NC91ZHAuYwppbmRleCBlMGJkMTAxLi4yNDIyYTVmIDEwMDY0NAotLS0gYS9uZXQvaXB2NC91ZHAuYworKysgYi9uZXQvaXB2NC91ZHAuYwpAQCAtNzYxLDcgKzc2MSw3IEBACiAKIHN0YXRpYyBfX2lubGluZV9fIGludCBfX3VkcF9jaGVja3N1bV9jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXJldHVybiAodW5zaWduZWQgc2hvcnQpY3N1bV9mb2xkKHNrYl9jaGVja3N1bShza2IsIDAsIHNrYi0+bGVuLCBza2ItPmNzdW0pKTsKKwlyZXR1cm4gX19za2JfY2hlY2tzdW1fY29tcGxldGUoc2tiKTsKIH0KIAogc3RhdGljIF9faW5saW5lX18gaW50IHVkcF9jaGVja3N1bV9jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpAQCAtMTEwMCwxMSArMTEwMCw4IEBACiAJaWYgKHVoLT5jaGVjayA9PSAwKSB7CiAJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CiAJfSBlbHNlIGlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9IVykgewotCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwogCQlpZiAoIXVkcF9jaGVjayh1aCwgdWxlbiwgc2FkZHIsIGRhZGRyLCBza2ItPmNzdW0pKQotCQkJcmV0dXJuIDA7Ci0JCUxJTUlUX05FVERFQlVHKEtFUk5fREVCVUcgInVkcCB2NCBodyBjc3VtIGZhaWx1cmUuXG4iKTsKLQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOworCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKIAl9CiAJaWYgKHNrYi0+aXBfc3VtbWVkICE9IENIRUNLU1VNX1VOTkVDRVNTQVJZKQogCQlza2ItPmNzdW0gPSBjc3VtX3RjcHVkcF9ub2ZvbGQoc2FkZHIsIGRhZGRyLCB1bGVuLCBJUFBST1RPX1VEUCwgMCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9hZGRyY29uZi5jIGIvbmV0L2lwdjYvYWRkcmNvbmYuYwppbmRleCAyYzVmNTcyLi5kZGNmNzc1IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9hZGRyY29uZi5jCisrKyBiL25ldC9pcHY2L2FkZHJjb25mLmMKQEAgLTM1LDYgKzM1LDkgQEAKICAqCVlPU0hJRlVKSSBIaWRlYWtpIEBVU0FHSQk6CUFSQ25ldCBzdXBwb3J0CiAgKglZT1NISUZVSkkgSGlkZWFraSBAVVNBR0kJOgljb252ZXJ0IC9wcm9jL25ldC9pZl9pbmV0NiB0bwogICoJCQkJCQlzZXFfZmlsZS4KKyAqCVlPU0hJRlVKSSBIaWRlYWtpIEBVU0FHSQk6CWltcHJvdmVkIHNvdXJjZSBhZGRyZXNzCisgKgkJCQkJCXNlbGVjdGlvbjsgY29uc2lkZXIgc2NvcGUsCisgKgkJCQkJCXN0YXR1cyBldGMuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgpAQCAtMTkzLDQ2ICsxOTYsNTEgQEAKICNlbmRpZgogY29uc3Qgc3RydWN0IGluNl9hZGRyIGluNmFkZHJfbG9vcGJhY2sgPSBJTjZBRERSX0xPT1BCQUNLX0lOSVQ7CiAKLWludCBpcHY2X2FkZHJfdHlwZShjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpCisjZGVmaW5lIElQVjZfQUREUl9TQ09QRV9UWVBFKHNjb3BlKQkoKHNjb3BlKSA8PCAxNikKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpcHY2X2FkZHJfc2NvcGUydHlwZSh1bnNpZ25lZCBzY29wZSkKIHsKLQlpbnQgdHlwZTsKKwlzd2l0Y2goc2NvcGUpIHsKKwljYXNlIElQVjZfQUREUl9TQ09QRV9OT0RFTE9DQUw6CisJCXJldHVybiAoSVBWNl9BRERSX1NDT1BFX1RZUEUoSVBWNl9BRERSX1NDT1BFX05PREVMT0NBTCkgfAorCQkJSVBWNl9BRERSX0xPT1BCQUNLKTsKKwljYXNlIElQVjZfQUREUl9TQ09QRV9MSU5LTE9DQUw6CisJCXJldHVybiAoSVBWNl9BRERSX1NDT1BFX1RZUEUoSVBWNl9BRERSX1NDT1BFX0xJTktMT0NBTCkgfAorCQkJSVBWNl9BRERSX0xJTktMT0NBTCk7CisJY2FzZSBJUFY2X0FERFJfU0NPUEVfU0lURUxPQ0FMOgorCQlyZXR1cm4gKElQVjZfQUREUl9TQ09QRV9UWVBFKElQVjZfQUREUl9TQ09QRV9TSVRFTE9DQUwpIHwKKwkJCUlQVjZfQUREUl9TSVRFTE9DQUwpOworCX0KKwlyZXR1cm4gSVBWNl9BRERSX1NDT1BFX1RZUEUoc2NvcGUpOworfQorCitpbnQgX19pcHY2X2FkZHJfdHlwZShjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpCit7CiAJdTMyIHN0OwogCiAJc3QgPSBhZGRyLT5zNl9hZGRyMzJbMF07CiAKLQlpZiAoKHN0ICYgaHRvbmwoMHhGRjAwMDAwMCkpID09IGh0b25sKDB4RkYwMDAwMDApKSB7Ci0JCXR5cGUgPSBJUFY2X0FERFJfTVVMVElDQVNUOwotCi0JCXN3aXRjaCgoc3QgJiBodG9ubCgweDAwRkYwMDAwKSkpIHsKLQkJCWNhc2UgX19jb25zdGFudF9odG9ubCgweDAwMDEwMDAwKToKLQkJCQl0eXBlIHw9IElQVjZfQUREUl9MT09QQkFDSzsKLQkJCQlicmVhazsKLQotCQkJY2FzZSBfX2NvbnN0YW50X2h0b25sKDB4MDAwMjAwMDApOgotCQkJCXR5cGUgfD0gSVBWNl9BRERSX0xJTktMT0NBTDsKLQkJCQlicmVhazsKLQotCQkJY2FzZSBfX2NvbnN0YW50X2h0b25sKDB4MDAwNTAwMDApOgotCQkJCXR5cGUgfD0gSVBWNl9BRERSX1NJVEVMT0NBTDsKLQkJCQlicmVhazsKLQkJfTsKLQkJcmV0dXJuIHR5cGU7Ci0JfQotCi0JdHlwZSA9IElQVjZfQUREUl9VTklDQVNUOwotCiAJLyogQ29uc2lkZXIgYWxsIGFkZHJlc3NlcyB3aXRoIHRoZSBmaXJzdCB0aHJlZSBiaXRzIGRpZmZlcmVudCBvZgotCSAgIDAwMCBhbmQgMTExIGFzIGZpbmlzaGVkLgorCSAgIDAwMCBhbmQgMTExIGFzIHVuaWNhc3RzLgogCSAqLwogCWlmICgoc3QgJiBodG9ubCgweEUwMDAwMDAwKSkgIT0gaHRvbmwoMHgwMDAwMDAwMCkgJiYKIAkgICAgKHN0ICYgaHRvbmwoMHhFMDAwMDAwMCkpICE9IGh0b25sKDB4RTAwMDAwMDApKQotCQlyZXR1cm4gdHlwZTsKLQkKLQlpZiAoKHN0ICYgaHRvbmwoMHhGRkMwMDAwMCkpID09IGh0b25sKDB4RkU4MDAwMDApKQotCQlyZXR1cm4gKElQVjZfQUREUl9MSU5LTE9DQUwgfCB0eXBlKTsKKwkJcmV0dXJuIChJUFY2X0FERFJfVU5JQ0FTVCB8IAorCQkJSVBWNl9BRERSX1NDT1BFX1RZUEUoSVBWNl9BRERSX1NDT1BFX0dMT0JBTCkpOwogCisJaWYgKChzdCAmIGh0b25sKDB4RkYwMDAwMDApKSA9PSBodG9ubCgweEZGMDAwMDAwKSkgeworCQkvKiBtdWx0aWNhc3QgKi8KKwkJLyogYWRkci1zZWxlY3QgMy4xICovCisJCXJldHVybiAoSVBWNl9BRERSX01VTFRJQ0FTVCB8CisJCQlpcHY2X2FkZHJfc2NvcGUydHlwZShJUFY2X0FERFJfTUNfU0NPUEUoYWRkcikpKTsKKwl9CisKKwlpZiAoKHN0ICYgaHRvbmwoMHhGRkMwMDAwMCkpID09IGh0b25sKDB4RkU4MDAwMDApKQorCQlyZXR1cm4gKElQVjZfQUREUl9MSU5LTE9DQUwgfCBJUFY2X0FERFJfVU5JQ0FTVCB8IAorCQkJSVBWNl9BRERSX1NDT1BFX1RZUEUoSVBWNl9BRERSX1NDT1BFX0xJTktMT0NBTCkpOwkJLyogYWRkci1zZWxlY3QgMy4xICovCiAJaWYgKChzdCAmIGh0b25sKDB4RkZDMDAwMDApKSA9PSBodG9ubCgweEZFQzAwMDAwKSkKLQkJcmV0dXJuIChJUFY2X0FERFJfU0lURUxPQ0FMIHwgdHlwZSk7CisJCXJldHVybiAoSVBWNl9BRERSX1NJVEVMT0NBTCB8IElQVjZfQUREUl9VTklDQVNUIHwKKwkJCUlQVjZfQUREUl9TQ09QRV9UWVBFKElQVjZfQUREUl9TQ09QRV9TSVRFTE9DQUwpKTsJCS8qIGFkZHItc2VsZWN0IDMuMSAqLwogCiAJaWYgKChhZGRyLT5zNl9hZGRyMzJbMF0gfCBhZGRyLT5zNl9hZGRyMzJbMV0pID09IDApIHsKIAkJaWYgKGFkZHItPnM2X2FkZHIzMlsyXSA9PSAwKSB7CkBAIC0yNDAsMjQgKzI0OCwyMCBAQAogCQkJCXJldHVybiBJUFY2X0FERFJfQU5ZOwogCiAJCQlpZiAoYWRkci0+czZfYWRkcjMyWzNdID09IGh0b25sKDB4MDAwMDAwMDEpKQotCQkJCXJldHVybiAoSVBWNl9BRERSX0xPT1BCQUNLIHwgdHlwZSk7CisJCQkJcmV0dXJuIChJUFY2X0FERFJfTE9PUEJBQ0sgfCBJUFY2X0FERFJfVU5JQ0FTVCB8CisJCQkJCUlQVjZfQUREUl9TQ09QRV9UWVBFKElQVjZfQUREUl9TQ09QRV9MSU5LTE9DQUwpKTsJLyogYWRkci1zZWxlY3QgMy40ICovCiAKLQkJCXJldHVybiAoSVBWNl9BRERSX0NPTVBBVHY0IHwgdHlwZSk7CisJCQlyZXR1cm4gKElQVjZfQUREUl9DT01QQVR2NCB8IElQVjZfQUREUl9VTklDQVNUIHwKKwkJCQlJUFY2X0FERFJfU0NPUEVfVFlQRShJUFY2X0FERFJfU0NPUEVfR0xPQkFMKSk7CS8qIGFkZHItc2VsZWN0IDMuMyAqLwogCQl9CiAKIAkJaWYgKGFkZHItPnM2X2FkZHIzMlsyXSA9PSBodG9ubCgweDAwMDBmZmZmKSkKLQkJCXJldHVybiBJUFY2X0FERFJfTUFQUEVEOworCQkJcmV0dXJuIChJUFY2X0FERFJfTUFQUEVEIHwgCisJCQkJSVBWNl9BRERSX1NDT1BFX1RZUEUoSVBWNl9BRERSX1NDT1BFX0dMT0JBTCkpOwkvKiBhZGRyLXNlbGVjdCAzLjMgKi8KIAl9CiAKLQlzdCAmPSBodG9ubCgweEZGMDAwMDAwKTsKLQlpZiAoc3QgPT0gMCkKLQkJcmV0dXJuIElQVjZfQUREUl9SRVNFUlZFRDsKLQlzdCAmPSBodG9ubCgweEZFMDAwMDAwKTsKLQlpZiAoc3QgPT0gaHRvbmwoMHgwMjAwMDAwMCkpCi0JCXJldHVybiBJUFY2X0FERFJfUkVTRVJWRUQ7CS8qIGZvciBOU0FQICovCi0JaWYgKHN0ID09IGh0b25sKDB4MDQwMDAwMDApKQotCQlyZXR1cm4gSVBWNl9BRERSX1JFU0VSVkVEOwkvKiBmb3IgSVBYICovCi0JcmV0dXJuIHR5cGU7CisJcmV0dXJuIChJUFY2X0FERFJfUkVTRVJWRUQgfCAKKwkJSVBWNl9BRERSX1NDT1BFX1RZUEUoSVBWNl9BRERSX1NDT1BFX0dMT0JBTCkpOwkvKiBhZGRyLXNlbGVjdCAzLjQgKi8KIH0KIAogc3RhdGljIHZvaWQgYWRkcmNvbmZfZGVsX3RpbWVyKHN0cnVjdCBpbmV0Nl9pZmFkZHIgKmlmcCkKQEAgLTgwNSwxMzggKzgwOSwyNzUgQEAKICNlbmRpZgogCiAvKgotICoJQ2hvb3NlIGFuIGFwcHJvcHJpYXRlIHNvdXJjZSBhZGRyZXNzCi0gKglzaG91bGQgZG86Ci0gKglpKQlnZXQgYW4gYWRkcmVzcyB3aXRoIGFuIGFwcHJvcHJpYXRlIHNjb3BlCi0gKglpaSkJc2VlIGlmIHRoZXJlIGlzIGEgc3BlY2lmaWMgcm91dGUgZm9yIHRoZSBkZXN0aW5hdGlvbiBhbmQgdXNlCi0gKgkJYW4gYWRkcmVzcyBvZiB0aGUgYXR0YWNoZWQgaW50ZXJmYWNlIAotICoJaWlpKQlkb24ndCB1c2UgZGVwcmVjYXRlZCBhZGRyZXNzZXMKKyAqCUNob29zZSBhbiBhcHByb3ByaWF0ZSBzb3VyY2UgYWRkcmVzcyAoUkZDMzQ4NCkKICAqLwotc3RhdGljIGludCBpbmxpbmUgaXB2Nl9zYWRkcl9wcmVmKGNvbnN0IHN0cnVjdCBpbmV0Nl9pZmFkZHIgKmlmcCwgdTggaW52cHJlZikKK3N0cnVjdCBpcHY2X3NhZGRyX3Njb3JlIHsKKwlpbnQJCWFkZHJfdHlwZTsKKwl1bnNpZ25lZCBpbnQJYXR0cnM7CisJaW50CQltYXRjaGxlbjsKKwl1bnNpZ25lZCBpbnQJc2NvcGU7CisJdW5zaWduZWQgaW50CXJ1bGU7Cit9OworCisjZGVmaW5lIElQVjZfU0FERFJfU0NPUkVfTE9DQUwJCTB4MDAwMQorI2RlZmluZSBJUFY2X1NBRERSX1NDT1JFX1BSRUZFUlJFRAkweDAwMDQKKyNkZWZpbmUgSVBWNl9TQUREUl9TQ09SRV9IT0EJCTB4MDAwOAorI2RlZmluZSBJUFY2X1NBRERSX1NDT1JFX09JRgkJMHgwMDEwCisjZGVmaW5lIElQVjZfU0FERFJfU0NPUkVfTEFCRUwJCTB4MDAyMAorI2RlZmluZSBJUFY2X1NBRERSX1NDT1JFX1BSSVZBQ1kJMHgwMDQwCisKK3N0YXRpYyBpbnQgaW5saW5lIGlwdjZfc2FkZHJfcHJlZmVycmVkKGludCB0eXBlKQogewotCWludCBwcmVmOwotCXByZWYgPSBpZnAtPmZsYWdzJklGQV9GX0RFUFJFQ0FURUQgPyAwIDogMjsKLSNpZmRlZiBDT05GSUdfSVBWNl9QUklWQUNZCi0JcHJlZiB8PSAoaWZwLT5mbGFnc15pbnZwcmVmKSZJRkFfRl9URU1QT1JBUlkgPyAwIDogMTsKLSNlbmRpZgotCXJldHVybiBwcmVmOworCWlmICh0eXBlICYgKElQVjZfQUREUl9NQVBQRUR8SVBWNl9BRERSX0NPTVBBVHY0fAorCQkgICAgSVBWNl9BRERSX0xPT1BCQUNLfElQVjZfQUREUl9SRVNFUlZFRCkpCisJCXJldHVybiAxOworCXJldHVybiAwOwogfQogCi0jaWZkZWYgQ09ORklHX0lQVjZfUFJJVkFDWQotI2RlZmluZSBJUFY2X0dFVF9TQUREUl9NQVhTQ09SRShzY29yZSkJKChzY29yZSkgPT0gMykKLSNlbHNlCi0jZGVmaW5lIElQVjZfR0VUX1NBRERSX01BWFNDT1JFKHNjb3JlKQkoc2NvcmUpCi0jZW5kaWYKKy8qIHN0YXRpYyBtYXRjaGluZyBsYWJlbCAqLworc3RhdGljIGludCBpbmxpbmUgaXB2Nl9zYWRkcl9sYWJlbChjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsIGludCB0eXBlKQoreworIC8qCisgICogCXByZWZpeCAobG9uZ2VzdCBtYXRjaCkJbGFiZWwKKyAgKiAJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgKiAJOjoxLzEyOAkJCTAKKyAgKiAJOjovMAkJCTEKKyAgKiAJMjAwMjo6LzE2CQkyCisgICogCTo6Lzk2CQkJMworICAqIAk6OmZmZmY6MDowLzk2CQk0CisgICovCisJaWYgKHR5cGUgJiBJUFY2X0FERFJfTE9PUEJBQ0spCisJCXJldHVybiAwOworCWVsc2UgaWYgKHR5cGUgJiBJUFY2X0FERFJfQ09NUEFUdjQpCisJCXJldHVybiAzOworCWVsc2UgaWYgKHR5cGUgJiBJUFY2X0FERFJfTUFQUEVEKQorCQlyZXR1cm4gNDsKKwllbHNlIGlmIChhZGRyLT5zNl9hZGRyMTZbMF0gPT0gaHRvbnMoMHgyMDAyKSkKKwkJcmV0dXJuIDI7CisJcmV0dXJuIDE7Cit9CiAKLWludCBpcHY2X2Rldl9nZXRfc2FkZHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKK2ludCBpcHY2X2Rldl9nZXRfc2FkZHIoc3RydWN0IG5ldF9kZXZpY2UgKmRhZGRyX2RldiwKIAkJICAgICAgIHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsIHN0cnVjdCBpbjZfYWRkciAqc2FkZHIpCiB7Ci0Jc3RydWN0IGluZXQ2X2lmYWRkciAqaWZwID0gTlVMTDsKLQlzdHJ1Y3QgaW5ldDZfaWZhZGRyICptYXRjaCA9IE5VTEw7Ci0Jc3RydWN0IGluZXQ2X2RldiAqaWRldjsKLQlpbnQgc2NvcGU7Ci0JaW50IGVycjsKLQlpbnQgaGlzY29yZSA9IC0xLCBzY29yZTsKKwlzdHJ1Y3QgaXB2Nl9zYWRkcl9zY29yZSBoaXNjb3JlOworCXN0cnVjdCBpbmV0Nl9pZmFkZHIgKmlmYV9yZXN1bHQgPSBOVUxMOworCWludCBkYWRkcl90eXBlID0gX19pcHY2X2FkZHJfdHlwZShkYWRkcik7CisJaW50IGRhZGRyX3Njb3BlID0gX19pcHY2X2FkZHJfc3JjX3Njb3BlKGRhZGRyX3R5cGUpOworCXUzMiBkYWRkcl9sYWJlbCA9IGlwdjZfc2FkZHJfbGFiZWwoZGFkZHIsIGRhZGRyX3R5cGUpOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAKLQlzY29wZSA9IGlwdjZfYWRkcl9zY29wZShkYWRkcik7Ci0KLQkvKgotCSAqCWtub3duIGRldgotCSAqCXNlYXJjaCBkZXYgYW5kIHdhbGsgdGhyb3VnaCBkZXYgYWRkcmVzc2VzCi0JICovCi0KLQlpZiAoZGV2KSB7Ci0JCWlmIChkZXYtPmZsYWdzICYgSUZGX0xPT1BCQUNLKQotCQkJc2NvcGUgPSBJRkFfSE9TVDsKLQotCQlyZWFkX2xvY2soJmFkZHJjb25mX2xvY2spOwotCQlpZGV2ID0gX19pbjZfZGV2X2dldChkZXYpOwotCQlpZiAoaWRldikgewotCQkJcmVhZF9sb2NrX2JoKCZpZGV2LT5sb2NrKTsKLQkJCWZvciAoaWZwPWlkZXYtPmFkZHJfbGlzdDsgaWZwOyBpZnA9aWZwLT5pZl9uZXh0KSB7Ci0JCQkJaWYgKGlmcC0+c2NvcGUgPT0gc2NvcGUpIHsKLQkJCQkJaWYgKGlmcC0+ZmxhZ3MmSUZBX0ZfVEVOVEFUSVZFKQotCQkJCQkJY29udGludWU7Ci0jaWZkZWYgQ09ORklHX0lQVjZfUFJJVkFDWQotCQkJCQlzY29yZSA9IGlwdjZfc2FkZHJfcHJlZihpZnAsIGlkZXYtPmNuZi51c2VfdGVtcGFkZHIgPiAxID8gSUZBX0ZfVEVNUE9SQVJZIDogMCk7Ci0jZWxzZQotCQkJCQlzY29yZSA9IGlwdjZfc2FkZHJfcHJlZihpZnAsIDApOwotI2VuZGlmCi0JCQkJCWlmIChzY29yZSA8PSBoaXNjb3JlKQotCQkJCQkJY29udGludWU7Ci0KLQkJCQkJaWYgKG1hdGNoKQotCQkJCQkJaW42X2lmYV9wdXQobWF0Y2gpOwotCQkJCQltYXRjaCA9IGlmcDsKLQkJCQkJaGlzY29yZSA9IHNjb3JlOwotCQkJCQlpbjZfaWZhX2hvbGQoaWZwKTsKLQotCQkJCQlpZiAoSVBWNl9HRVRfU0FERFJfTUFYU0NPUkUoc2NvcmUpKSB7Ci0JCQkJCQlyZWFkX3VubG9ja19iaCgmaWRldi0+bG9jayk7Ci0JCQkJCQlyZWFkX3VubG9jaygmYWRkcmNvbmZfbG9jayk7Ci0JCQkJCQlnb3RvIG91dDsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCXJlYWRfdW5sb2NrX2JoKCZpZGV2LT5sb2NrKTsKLQkJfQotCQlyZWFkX3VubG9jaygmYWRkcmNvbmZfbG9jayk7Ci0JfQotCi0JaWYgKHNjb3BlID09IElGQV9MSU5LKQotCQlnb3RvIG91dDsKLQotCS8qCi0JICoJZGV2ID09IE5VTEwgb3Igc2VhcmNoIGZhaWxlZCBmb3Igc3BlY2lmaWVkIGRldgotCSAqLworCW1lbXNldCgmaGlzY29yZSwgMCwgc2l6ZW9mKGhpc2NvcmUpKTsKIAogCXJlYWRfbG9jaygmZGV2X2Jhc2VfbG9jayk7CiAJcmVhZF9sb2NrKCZhZGRyY29uZl9sb2NrKTsKKwogCWZvciAoZGV2ID0gZGV2X2Jhc2U7IGRldjsgZGV2PWRldi0+bmV4dCkgeworCQlzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2OworCQlzdHJ1Y3QgaW5ldDZfaWZhZGRyICppZmE7CisKKwkJLyogUnVsZSAwOiBDYW5kaWRhdGUgU291cmNlIEFkZHJlc3MgKHNlY3Rpb24gNCkKKwkJICogIC0gbXVsdGljYXN0IGFuZCBsaW5rLWxvY2FsIGRlc3RpbmF0aW9uIGFkZHJlc3MsCisJCSAqICAgIHRoZSBzZXQgb2YgY2FuZGlkYXRlIHNvdXJjZSBhZGRyZXNzIE1VU1Qgb25seQorCQkgKiAgICBpbmNsdWRlIGFkZHJlc3NlcyBhc3NpZ25lZCB0byBpbnRlcmZhY2VzCisJCSAqICAgIGJlbG9uZ2luZyB0byB0aGUgc2FtZSBsaW5rIGFzIHRoZSBvdXRnb2luZworCQkgKiAgICBpbnRlcmZhY2UuCisJCSAqICgtIEZvciBzaXRlLWxvY2FsIGRlc3RpbmF0aW9uIGFkZHJlc3NlcywgdGhlCisJCSAqICAgIHNldCBvZiBjYW5kaWRhdGUgc291cmNlIGFkZHJlc3NlcyBNVVNUIG9ubHkKKwkJICogICAgaW5jbHVkZSBhZGRyZXNzZXMgYXNzaWduZWQgdG8gaW50ZXJmYWNlcworCQkgKiAgICBiZWxvbmdpbmcgdG8gdGhlIHNhbWUgc2l0ZSBhcyB0aGUgb3V0Z29pbmcKKwkJICogICAgaW50ZXJmYWNlLikKKwkJICovCisJCWlmICgoZGFkZHJfdHlwZSAmIElQVjZfQUREUl9NVUxUSUNBU1QgfHwKKwkJICAgICBkYWRkcl9zY29wZSA8PSBJUFY2X0FERFJfU0NPUEVfTElOS0xPQ0FMKSAmJgorCQkgICAgZGFkZHJfZGV2ICYmIGRldiAhPSBkYWRkcl9kZXYpCisJCQljb250aW51ZTsKKwogCQlpZGV2ID0gX19pbjZfZGV2X2dldChkZXYpOwotCQlpZiAoaWRldikgewotCQkJcmVhZF9sb2NrX2JoKCZpZGV2LT5sb2NrKTsKLQkJCWZvciAoaWZwPWlkZXYtPmFkZHJfbGlzdDsgaWZwOyBpZnA9aWZwLT5pZl9uZXh0KSB7Ci0JCQkJaWYgKGlmcC0+c2NvcGUgPT0gc2NvcGUpIHsKLQkJCQkJaWYgKGlmcC0+ZmxhZ3MmSUZBX0ZfVEVOVEFUSVZFKQotCQkJCQkJY29udGludWU7Ci0jaWZkZWYgQ09ORklHX0lQVjZfUFJJVkFDWQotCQkJCQlzY29yZSA9IGlwdjZfc2FkZHJfcHJlZihpZnAsIGlkZXYtPmNuZi51c2VfdGVtcGFkZHIgPiAxID8gSUZBX0ZfVEVNUE9SQVJZIDogMCk7Ci0jZWxzZQotCQkJCQlzY29yZSA9IGlwdjZfc2FkZHJfcHJlZihpZnAsIDApOwotI2VuZGlmCi0JCQkJCWlmIChzY29yZSA8PSBoaXNjb3JlKQotCQkJCQkJY29udGludWU7CisJCWlmICghaWRldikKKwkJCWNvbnRpbnVlOwogCi0JCQkJCWlmIChtYXRjaCkKLQkJCQkJCWluNl9pZmFfcHV0KG1hdGNoKTsKLQkJCQkJbWF0Y2ggPSBpZnA7Ci0JCQkJCWhpc2NvcmUgPSBzY29yZTsKLQkJCQkJaW42X2lmYV9ob2xkKGlmcCk7CisJCXJlYWRfbG9ja19iaCgmaWRldi0+bG9jayk7CisJCWZvciAoaWZhID0gaWRldi0+YWRkcl9saXN0OyBpZmE7IGlmYSA9IGlmYS0+aWZfbmV4dCkgeworCQkJc3RydWN0IGlwdjZfc2FkZHJfc2NvcmUgc2NvcmU7CiAKLQkJCQkJaWYgKElQVjZfR0VUX1NBRERSX01BWFNDT1JFKHNjb3JlKSkgewotCQkJCQkJcmVhZF91bmxvY2tfYmgoJmlkZXYtPmxvY2spOwotCQkJCQkJZ290byBvdXRfdW5sb2NrX2Jhc2U7Ci0JCQkJCX0KKwkJCXNjb3JlLmFkZHJfdHlwZSA9IF9faXB2Nl9hZGRyX3R5cGUoJmlmYS0+YWRkcik7CisKKwkJCS8qIFJ1bGUgMDogQ2FuZGlkYXRlIFNvdXJjZSBBZGRyZXNzIChzZWN0aW9uIDQpCisJCQkgKiAgLSBJbiBhbnkgY2FzZSwgYW55Y2FzdCBhZGRyZXNzZXMsIG11bHRpY2FzdAorCQkJICogICAgYWRkcmVzc2VzLCBhbmQgdGhlIHVuc3BlY2lmaWVkIGFkZHJlc3MgTVVTVAorCQkJICogICAgTk9UIGJlIGluY2x1ZGVkIGluIGEgY2FuZGlkYXRlIHNldC4KKwkJCSAqLworCQkJaWYgKHVubGlrZWx5KHNjb3JlLmFkZHJfdHlwZSA9PSBJUFY2X0FERFJfQU5ZIHx8CisJCQkJICAgICBzY29yZS5hZGRyX3R5cGUgJiBJUFY2X0FERFJfTVVMVElDQVNUKSkgeworCQkJCUxJTUlUX05FVERFQlVHKEtFUk5fREVCVUcKKwkJCQkJICAgICAgICJBRERSQ09ORjogdW5zcGVjaWZpZWQgLyBtdWx0aWNhc3QgYWRkcmVzcyIKKwkJCQkJICAgICAgICJhc3NpZ25lZCBhcyB1bmljYXN0IGFkZHJlc3Mgb24gJXMiLAorCQkJCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJc2NvcmUuYXR0cnMgPSAwOworCQkJc2NvcmUubWF0Y2hsZW4gPSAwOworCQkJc2NvcmUuc2NvcGUgPSAwOworCQkJc2NvcmUucnVsZSA9IDA7CisKKwkJCWlmIChpZmFfcmVzdWx0ID09IE5VTEwpIHsKKwkJCQkvKiByZWNvcmQgaXQgaWYgdGhlIGZpcnN0IGF2YWlsYWJsZSBlbnRyeSAqLworCQkJCWdvdG8gcmVjb3JkX2l0OworCQkJfQorCisJCQkvKiBSdWxlIDE6IFByZWZlciBzYW1lIGFkZHJlc3MgKi8KKwkJCWlmIChoaXNjb3JlLnJ1bGUgPCAxKSB7CisJCQkJaWYgKGlwdjZfYWRkcl9lcXVhbCgmaWZhX3Jlc3VsdC0+YWRkciwgZGFkZHIpKQorCQkJCQloaXNjb3JlLmF0dHJzIHw9IElQVjZfU0FERFJfU0NPUkVfTE9DQUw7CisJCQkJaGlzY29yZS5ydWxlKys7CisJCQl9CisJCQlpZiAoaXB2Nl9hZGRyX2VxdWFsKCZpZmEtPmFkZHIsIGRhZGRyKSkgeworCQkJCXNjb3JlLmF0dHJzIHw9IElQVjZfU0FERFJfU0NPUkVfTE9DQUw7CisJCQkJaWYgKCEoaGlzY29yZS5hdHRycyAmIElQVjZfU0FERFJfU0NPUkVfTE9DQUwpKSB7CisJCQkJCXNjb3JlLnJ1bGUgPSAxOworCQkJCQlnb3RvIHJlY29yZF9pdDsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWlmIChoaXNjb3JlLmF0dHJzICYgSVBWNl9TQUREUl9TQ09SRV9MT0NBTCkKKwkJCQkJY29udGludWU7CisJCQl9CisKKwkJCS8qIFJ1bGUgMjogUHJlZmVyIGFwcHJvcHJpYXRlIHNjb3BlICovCisJCQlpZiAoaGlzY29yZS5ydWxlIDwgMikgeworCQkJCWhpc2NvcmUuc2NvcGUgPSBfX2lwdjZfYWRkcl9zcmNfc2NvcGUoaGlzY29yZS5hZGRyX3R5cGUpOworCQkJCWhpc2NvcmUucnVsZSsrOworCQkJfQorCQkJc2NvcmUuc2NvcGUgPSBfX2lwdjZfYWRkcl9zcmNfc2NvcGUoc2NvcmUuYWRkcl90eXBlKTsKKwkJCWlmIChoaXNjb3JlLnNjb3BlIDwgc2NvcmUuc2NvcGUpIHsKKwkJCQlpZiAoaGlzY29yZS5zY29wZSA8IGRhZGRyX3Njb3BlKSB7CisJCQkJCXNjb3JlLnJ1bGUgPSAyOworCQkJCQlnb3RvIHJlY29yZF9pdDsKKwkJCQl9IGVsc2UKKwkJCQkJY29udGludWU7CisJCQl9IGVsc2UgaWYgKHNjb3JlLnNjb3BlIDwgaGlzY29yZS5zY29wZSkgeworCQkJCWlmIChzY29yZS5zY29wZSA8IGRhZGRyX3Njb3BlKQorCQkJCQljb250aW51ZTsKKwkJCQllbHNlIHsKKwkJCQkJc2NvcmUucnVsZSA9IDI7CisJCQkJCWdvdG8gcmVjb3JkX2l0OwogCQkJCX0KIAkJCX0KLQkJCXJlYWRfdW5sb2NrX2JoKCZpZGV2LT5sb2NrKTsKLQkJfQotCX0KIAotb3V0X3VubG9ja19iYXNlOgorCQkJLyogUnVsZSAzOiBBdm9pZCBkZXByZWNhdGVkIGFkZHJlc3MgKi8KKwkJCWlmIChoaXNjb3JlLnJ1bGUgPCAzKSB7CisJCQkJaWYgKGlwdjZfc2FkZHJfcHJlZmVycmVkKGhpc2NvcmUuYWRkcl90eXBlKSB8fAorCQkJCSAgICAhKGlmYV9yZXN1bHQtPmZsYWdzICYgSUZBX0ZfREVQUkVDQVRFRCkpCisJCQkJCWhpc2NvcmUuYXR0cnMgfD0gSVBWNl9TQUREUl9TQ09SRV9QUkVGRVJSRUQ7CisJCQkJaGlzY29yZS5ydWxlKys7CisJCQl9CisJCQlpZiAoaXB2Nl9zYWRkcl9wcmVmZXJyZWQoc2NvcmUuYWRkcl90eXBlKSB8fAorCQkJICAgICEoaWZhLT5mbGFncyAmIElGQV9GX0RFUFJFQ0FURUQpKSB7CisJCQkJc2NvcmUuYXR0cnMgfD0gSVBWNl9TQUREUl9TQ09SRV9QUkVGRVJSRUQ7CisJCQkJaWYgKCEoaGlzY29yZS5hdHRycyAmIElQVjZfU0FERFJfU0NPUkVfUFJFRkVSUkVEKSkgeworCQkJCQlzY29yZS5ydWxlID0gMzsKKwkJCQkJZ290byByZWNvcmRfaXQ7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlpZiAoaGlzY29yZS5hdHRycyAmIElQVjZfU0FERFJfU0NPUkVfUFJFRkVSUkVEKQorCQkJCQljb250aW51ZTsKKwkJCX0KKworCQkJLyogUnVsZSA0OiBQcmVmZXIgaG9tZSBhZGRyZXNzIC0tIG5vdCBpbXBsZW1lbnRlZCB5ZXQgKi8KKworCQkJLyogUnVsZSA1OiBQcmVmZXIgb3V0Z29pbmcgaW50ZXJmYWNlICovCisJCQlpZiAoaGlzY29yZS5ydWxlIDwgNSkgeworCQkJCWlmIChkYWRkcl9kZXYgPT0gTlVMTCB8fAorCQkJCSAgICBkYWRkcl9kZXYgPT0gaWZhX3Jlc3VsdC0+aWRldi0+ZGV2KQorCQkJCQloaXNjb3JlLmF0dHJzIHw9IElQVjZfU0FERFJfU0NPUkVfT0lGOworCQkJCWhpc2NvcmUucnVsZSsrOworCQkJfQorCQkJaWYgKGRhZGRyX2RldiA9PSBOVUxMIHx8CisJCQkgICAgZGFkZHJfZGV2ID09IGlmYS0+aWRldi0+ZGV2KSB7CisJCQkJc2NvcmUuYXR0cnMgfD0gSVBWNl9TQUREUl9TQ09SRV9PSUY7CisJCQkJaWYgKCEoaGlzY29yZS5hdHRycyAmIElQVjZfU0FERFJfU0NPUkVfT0lGKSkgeworCQkJCQlzY29yZS5ydWxlID0gNTsKKwkJCQkJZ290byByZWNvcmRfaXQ7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlpZiAoaGlzY29yZS5hdHRycyAmIElQVjZfU0FERFJfU0NPUkVfT0lGKQorCQkJCQljb250aW51ZTsKKwkJCX0KKworCQkJLyogUnVsZSA2OiBQcmVmZXIgbWF0Y2hpbmcgbGFiZWwgKi8KKwkJCWlmIChoaXNjb3JlLnJ1bGUgPCA2KSB7CisJCQkJaWYgKGlwdjZfc2FkZHJfbGFiZWwoJmlmYV9yZXN1bHQtPmFkZHIsIGhpc2NvcmUuYWRkcl90eXBlKSA9PSBkYWRkcl9sYWJlbCkKKwkJCQkJaGlzY29yZS5hdHRycyB8PSBJUFY2X1NBRERSX1NDT1JFX0xBQkVMOworCQkJCWhpc2NvcmUucnVsZSsrOworCQkJfQorCQkJaWYgKGlwdjZfc2FkZHJfbGFiZWwoJmlmYS0+YWRkciwgc2NvcmUuYWRkcl90eXBlKSA9PSBkYWRkcl9sYWJlbCkgeworCQkJCXNjb3JlLmF0dHJzIHw9IElQVjZfU0FERFJfU0NPUkVfTEFCRUw7CisJCQkJaWYgKCEoaGlzY29yZS5hdHRycyAmIElQVjZfU0FERFJfU0NPUkVfTEFCRUwpKSB7CisJCQkJCXNjb3JlLnJ1bGUgPSA2OworCQkJCQlnb3RvIHJlY29yZF9pdDsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWlmIChoaXNjb3JlLmF0dHJzICYgSVBWNl9TQUREUl9TQ09SRV9MQUJFTCkKKwkJCQkJY29udGludWU7CisJCQl9CisKKyNpZmRlZiBDT05GSUdfSVBWNl9QUklWQUNZCisJCQkvKiBSdWxlIDc6IFByZWZlciBwdWJsaWMgYWRkcmVzcworCQkJICogTm90ZTogcHJlZmVyIHRlbXByYXJ5IGFkZHJlc3MgaWYgdXNlX3RlbXBhZGRyID49IDIKKwkJCSAqLworCQkJaWYgKGhpc2NvcmUucnVsZSA8IDcpIHsKKwkJCQlpZiAoKCEoaWZhX3Jlc3VsdC0+ZmxhZ3MgJiBJRkFfRl9URU1QT1JBUlkpKSBeCisJCQkJICAgIChpZmFfcmVzdWx0LT5pZGV2LT5jbmYudXNlX3RlbXBhZGRyID49IDIpKQorCQkJCQloaXNjb3JlLmF0dHJzIHw9IElQVjZfU0FERFJfU0NPUkVfUFJJVkFDWTsKKwkJCQloaXNjb3JlLnJ1bGUrKzsKKwkJCX0KKwkJCWlmICgoIShpZmEtPmZsYWdzICYgSUZBX0ZfVEVNUE9SQVJZKSkgXgorCQkJICAgIChpZmEtPmlkZXYtPmNuZi51c2VfdGVtcGFkZHIgPj0gMikpIHsKKwkJCQlzY29yZS5hdHRycyB8PSBJUFY2X1NBRERSX1NDT1JFX1BSSVZBQ1k7CisJCQkJaWYgKCEoaGlzY29yZS5hdHRycyAmIElQVjZfU0FERFJfU0NPUkVfUFJJVkFDWSkpIHsKKwkJCQkJc2NvcmUucnVsZSA9IDc7CisJCQkJCWdvdG8gcmVjb3JkX2l0OworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJaWYgKGhpc2NvcmUuYXR0cnMgJiBJUFY2X1NBRERSX1NDT1JFX1BSSVZBQ1kpCisJCQkJCWNvbnRpbnVlOworCQkJfQorI2VuZGlmCisJCQkvKiBSdWxlIDg6IFVzZSBsb25nZXN0IG1hdGNoaW5nIHByZWZpeCAqLworCQkJaWYgKGhpc2NvcmUucnVsZSA8IDgpCisJCQkJaGlzY29yZS5tYXRjaGxlbiA9IGlwdjZfYWRkcl9kaWZmKCZpZmFfcmVzdWx0LT5hZGRyLCBkYWRkcik7CisJCQlzY29yZS5ydWxlKys7CisJCQlzY29yZS5tYXRjaGxlbiA9IGlwdjZfYWRkcl9kaWZmKCZpZmEtPmFkZHIsIGRhZGRyKTsKKwkJCWlmIChzY29yZS5tYXRjaGxlbiA+IGhpc2NvcmUubWF0Y2hsZW4pIHsKKwkJCQlzY29yZS5ydWxlID0gODsKKwkJCQlnb3RvIHJlY29yZF9pdDsKKwkJCX0KKyNpZiAwCisJCQllbHNlIGlmIChzY29yZS5tYXRjaGxlbiA8IGhpc2NvcmUubWF0Y2hsZW4pCisJCQkJY29udGludWU7CisjZW5kaWYKKworCQkJLyogRmluYWwgUnVsZTogY2hvb3NlIGZpcnN0IGF2YWlsYWJsZSBvbmUgKi8KKwkJCWNvbnRpbnVlOworcmVjb3JkX2l0OgorCQkJaWYgKGlmYV9yZXN1bHQpCisJCQkJaW42X2lmYV9wdXQoaWZhX3Jlc3VsdCk7CisJCQlpbjZfaWZhX2hvbGQoaWZhKTsKKwkJCWlmYV9yZXN1bHQgPSBpZmE7CisJCQloaXNjb3JlID0gc2NvcmU7CisJCX0KKwkJcmVhZF91bmxvY2tfYmgoJmlkZXYtPmxvY2spOworCX0KIAlyZWFkX3VubG9jaygmYWRkcmNvbmZfbG9jayk7CiAJcmVhZF91bmxvY2soJmRldl9iYXNlX2xvY2spOwogCi1vdXQ6Ci0JZXJyID0gLUVBRERSTk9UQVZBSUw7Ci0JaWYgKG1hdGNoKSB7Ci0JCWlwdjZfYWRkcl9jb3B5KHNhZGRyLCAmbWF0Y2gtPmFkZHIpOwotCQllcnIgPSAwOwotCQlpbjZfaWZhX3B1dChtYXRjaCk7Ci0JfQotCi0JcmV0dXJuIGVycjsKKwlpZiAoIWlmYV9yZXN1bHQpCisJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKKwkKKwlpcHY2X2FkZHJfY29weShzYWRkciwgJmlmYV9yZXN1bHQtPmFkZHIpOworCWluNl9pZmFfcHV0KGlmYV9yZXN1bHQpOworCXJldHVybiAwOwogfQogCiAKQEAgLTI5NTAsOCArMzA5MSw3IEBACiAKIG5sbXNnX2ZhaWx1cmU6CiBydGF0dHJfZmFpbHVyZToKLQlpZiAoYXJyYXkpCi0JCWtmcmVlKGFycmF5KTsKKwlrZnJlZShhcnJheSk7CiAJc2tiX3RyaW0oc2tiLCBiIC0gc2tiLT5kYXRhKTsKIAlyZXR1cm4gLTE7CiB9CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pY21wLmMgYi9uZXQvaXB2Ni9pY21wLmMKaW5kZXggMjNlNTQwMy4uMWJkZjBmYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaWNtcC5jCisrKyBiL25ldC9pcHY2L2ljbXAuYwpAQCAtNTg1LDE3ICs1ODUsMTYgQEAKIAlkYWRkciA9ICZza2ItPm5oLmlwdjZoLT5kYWRkcjsKIAogCS8qIFBlcmZvcm0gY2hlY2tzdW0uICovCi0JaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX0hXKSB7Ci0JCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7Ci0JCWlmIChjc3VtX2lwdjZfbWFnaWMoc2FkZHIsIGRhZGRyLCBza2ItPmxlbiwgSVBQUk9UT19JQ01QVjYsCi0JCQkJICAgIHNrYi0+Y3N1bSkpIHsKLQkJCUxJTUlUX05FVERFQlVHKEtFUk5fREVCVUcgIklDTVB2NiBodyBjaGVja3N1bSBmYWlsZWRcbiIpOwotCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwotCQl9Ci0JfQotCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9OT05FKSB7Ci0JCWlmIChjc3VtX2lwdjZfbWFnaWMoc2FkZHIsIGRhZGRyLCBza2ItPmxlbiwgSVBQUk9UT19JQ01QVjYsCi0JCQkJICAgIHNrYl9jaGVja3N1bShza2IsIDAsIHNrYi0+bGVuLCAwKSkpIHsKKwlzd2l0Y2ggKHNrYi0+aXBfc3VtbWVkKSB7CisJY2FzZSBDSEVDS1NVTV9IVzoKKwkJaWYgKCFjc3VtX2lwdjZfbWFnaWMoc2FkZHIsIGRhZGRyLCBza2ItPmxlbiwgSVBQUk9UT19JQ01QVjYsCisJCQkJICAgICBza2ItPmNzdW0pKQorCQkJYnJlYWs7CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgQ0hFQ0tTVU1fTk9ORToKKwkJc2tiLT5jc3VtID0gfmNzdW1faXB2Nl9tYWdpYyhzYWRkciwgZGFkZHIsIHNrYi0+bGVuLAorCQkJCQkgICAgIElQUFJPVE9fSUNNUFY2LCAwKTsKKwkJaWYgKF9fc2tiX2NoZWNrc3VtX2NvbXBsZXRlKHNrYikpIHsKIAkJCUxJTUlUX05FVERFQlVHKEtFUk5fREVCVUcgIklDTVB2NiBjaGVja3N1bSBmYWlsZWQgWyUwNHg6JTA0eDolMDR4OiUwNHg6JTA0eDolMDR4OiUwNHg6JTA0eCA+ICUwNHg6JTA0eDolMDR4OiUwNHg6JTA0eDolMDR4OiUwNHg6JTA0eF1cbiIsCiAJCQkJICAgICAgIE5JUDYoKnNhZGRyKSwgTklQNigqZGFkZHIpKTsKIAkJCWdvdG8gZGlzY2FyZF9pdDsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl9maWIuYyBiL25ldC9pcHY2L2lwNl9maWIuYwppbmRleCA0ZmNjNWE3Li4xYmY2ZDlhIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcDZfZmliLmMKKysrIGIvbmV0L2lwdjYvaXA2X2ZpYi5jCkBAIC0xMjcsNTYgKzEyNyw2IEBACiAJcmV0dXJuIGh0b25sKDEgPDwgKCh+Zm5fYml0KSYweDFGKSkgJiBhZGRyW2ZuX2JpdD4+NV07CiB9CiAKLS8qCi0gKglmaW5kIHRoZSBmaXJzdCBkaWZmZXJlbnQgYml0IGJldHdlZW4gdHdvIGFkZHJlc3NlcwotICoJbGVuZ3RoIG9mIGFkZHJlc3MgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMyYml0cwotICovCi0KLXN0YXRpYyBfX2lubGluZV9fIGludCBhZGRyX2RpZmYodm9pZCAqdG9rZW4xLCB2b2lkICp0b2tlbjIsIGludCBhZGRybGVuKQotewotCV9fdTMyICphMSA9IHRva2VuMTsKLQlfX3UzMiAqYTIgPSB0b2tlbjI7Ci0JaW50IGk7Ci0KLQlhZGRybGVuID4+PSAyOwotCi0JZm9yIChpID0gMDsgaSA8IGFkZHJsZW47IGkrKykgewotCQlfX3UzMiB4YjsKLQotCQl4YiA9IGExW2ldIF4gYTJbaV07Ci0KLQkJaWYgKHhiKSB7Ci0JCQlpbnQgaiA9IDMxOwotCi0JCQl4YiA9IG50b2hsKHhiKTsKLQotCQkJd2hpbGUgKCh4YiAmICgxIDw8IGopKSA9PSAwKQotCQkJCWotLTsKLQotCQkJcmV0dXJuIChpICogMzIgKyAzMSAtIGopOwotCQl9Ci0JfQotCi0JLyoKLQkgKgl3ZSBzaG91bGQgKm5ldmVyKiBnZXQgdG8gdGhpcyBwb2ludCBzaW5jZSB0aGF0IAotCSAqCXdvdWxkIG1lYW4gdGhlIGFkZHJzIGFyZSBlcXVhbAotCSAqCi0JICoJSG93ZXZlciwgd2UgZG8gZ2V0IHRvIGl0IDgpIEFuZCBleGFjbHksIHdoZW4KLQkgKglhZGRyZXNzZXMgYXJlIGVxdWFsIDgpCi0JICoKLQkgKglpcCByb3V0ZSBhZGQgMTExMTo6LzEyOCB2aWEgLi4uCi0JICoJaXAgcm91dGUgYWRkIDExMTE6Oi82NCB2aWEgLi4uCi0JICoJYW5kIHdlIGFyZSBoZXJlLgotCSAqCi0JICoJSWRlYWxseSwgdGhpcyBmdW5jdGlvbiBzaG91bGQgc3RvcCBjb21wYXJpc29uCi0JICoJYXQgcHJlZml4IGxlbmd0aC4gSXQgZG9lcyBub3QsIGJ1dCBpdCBpcyBzdGlsbCBPSywKLQkgKglpZiByZXR1cm5lZCB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gcHJlZml4IGxlbmd0aC4KLQkgKgkJCQkJLS1BTksgKDk4MDgwMykKLQkgKi8KLQotCXJldHVybiBhZGRybGVuPDw1OwotfQotCiBzdGF0aWMgX19pbmxpbmVfXyBzdHJ1Y3QgZmliNl9ub2RlICogbm9kZV9hbGxvYyh2b2lkKQogewogCXN0cnVjdCBmaWI2X25vZGUgKmZuOwpAQCAtMjk2LDExICsyNDYsMTEgQEAKIAogCS8qIGZpbmQgMXN0IGJpdCBpbiBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIDIgYWRkcnMuCiAKLQkgICBTZWUgY29tbWVudCBpbiBhZGRyX2RpZmY6IGJpdCBtYXkgYmUgYW4gaW52YWxpZCB2YWx1ZSwKKwkgICBTZWUgY29tbWVudCBpbiBfX2lwdjZfYWRkcl9kaWZmOiBiaXQgbWF5IGJlIGFuIGludmFsaWQgdmFsdWUsCiAJICAgYnV0IGlmIGl0IGlzID49IHBsZW4sIHRoZSB2YWx1ZSBpcyBpZ25vcmVkIGluIGFueSBjYXNlLgogCSAqLwogCQotCWJpdCA9IGFkZHJfZGlmZihhZGRyLCAma2V5LT5hZGRyLCBhZGRybGVuKTsKKwliaXQgPSBfX2lwdjZfYWRkcl9kaWZmKGFkZHIsICZrZXktPmFkZHIsIGFkZHJsZW4pOwogCiAJLyogCiAJICoJCShpbnRlcm1lZGlhdGUpW2luXQkKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl9pbnB1dC5jIGIvbmV0L2lwdjYvaXA2X2lucHV0LmMKaW5kZXggNmUzNDgwNC4uYTYwMjZkMiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXA2X2lucHV0LmMKKysrIGIvbmV0L2lwdjYvaXA2X2lucHV0LmMKQEAgLTE3Niw2ICsxNzYsMTEgQEAKIAkJaWYgKGlwcHJvdC0+ZmxhZ3MgJiBJTkVUNl9QUk9UT19GSU5BTCkgewogCQkJc3RydWN0IGlwdjZoZHIgKmhkcjsJCiAKKwkJCS8qIEZyZWUgcmVmZXJlbmNlIGVhcmx5OiB3ZSBkb24ndCBuZWVkIGl0IGFueSBtb3JlLAorCQkJICAgYW5kIGl0IG1heSBob2xkIGlwX2Nvbm50cmFjayBtb2R1bGUgbG9hZGVkCisJCQkgICBpbmRlZmluaXRlbHkuICovCisJCQluZl9yZXNldChza2IpOworCiAJCQlza2JfcG9zdHB1bGxfcmNzdW0oc2tiLCBza2ItPm5oLnJhdywKIAkJCQkJICAgc2tiLT5oLnJhdyAtIHNrYi0+bmgucmF3KTsKIAkJCWhkciA9IHNrYi0+bmguaXB2Nmg7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfb3V0cHV0LmMgYi9uZXQvaXB2Ni9pcDZfb3V0cHV0LmMKaW5kZXggNjE0Mjk2YS4uYzFmYTY5MyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXA2X291dHB1dC5jCisrKyBiL25ldC9pcHY2L2lwNl9vdXRwdXQuYwpAQCAtNDQxLDkgKzQ0MSwxNSBAQAogI2lmZGVmIENPTkZJR19ORVRGSUxURVIKIAl0by0+bmZtYXJrID0gZnJvbS0+bmZtYXJrOwogCS8qIENvbm5lY3Rpb24gYXNzb2NpYXRpb24gaXMgc2FtZSBhcyBwcmUtZnJhZyBwYWNrZXQgKi8KKwluZl9jb25udHJhY2tfcHV0KHRvLT5uZmN0KTsKIAl0by0+bmZjdCA9IGZyb20tPm5mY3Q7CiAJbmZfY29ubnRyYWNrX2dldCh0by0+bmZjdCk7CiAJdG8tPm5mY3RpbmZvID0gZnJvbS0+bmZjdGluZm87CisjaWYgZGVmaW5lZChDT05GSUdfTkZfQ09OTlRSQUNLKSB8fCBkZWZpbmVkKENPTkZJR19ORl9DT05OVFJBQ0tfTU9EVUxFKQorCW5mX2Nvbm50cmFja19wdXRfcmVhc20odG8tPm5mY3RfcmVhc20pOworCXRvLT5uZmN0X3JlYXNtID0gZnJvbS0+bmZjdF9yZWFzbTsKKwluZl9jb25udHJhY2tfZ2V0X3JlYXNtKHRvLT5uZmN0X3JlYXNtKTsKKyNlbmRpZgogI2lmZGVmIENPTkZJR19CUklER0VfTkVURklMVEVSCiAJbmZfYnJpZGdlX3B1dCh0by0+bmZfYnJpZGdlKTsKIAl0by0+bmZfYnJpZGdlID0gZnJvbS0+bmZfYnJpZGdlOwpAQCAtNTg3LDggKzU5Myw3IEBACiAJCQlza2ItPm5leHQgPSBOVUxMOwogCQl9CiAKLQkJaWYgKHRtcF9oZHIpCi0JCQlrZnJlZSh0bXBfaGRyKTsKKwkJa2ZyZWUodG1wX2hkcik7CiAKIAkJaWYgKGVyciA9PSAwKSB7CiAJCQlJUDZfSU5DX1NUQVRTKElQU1RBVFNfTUlCX0ZSQUdPS1MpOwpAQCAtMTE4NiwxMCArMTE5MSw4IEBACiAKIG91dDoKIAlpbmV0LT5jb3JrLmZsYWdzICY9IH5JUENPUktfT1BUOwotCWlmIChucC0+Y29yay5vcHQpIHsKLQkJa2ZyZWUobnAtPmNvcmsub3B0KTsKLQkJbnAtPmNvcmsub3B0ID0gTlVMTDsKLQl9CisJa2ZyZWUobnAtPmNvcmsub3B0KTsKKwlucC0+Y29yay5vcHQgPSBOVUxMOwogCWlmIChucC0+Y29yay5ydCkgewogCQlkc3RfcmVsZWFzZSgmbnAtPmNvcmsucnQtPnUuZHN0KTsKIAkJbnAtPmNvcmsucnQgPSBOVUxMOwpAQCAtMTIxNCwxMCArMTIxNyw4IEBACiAKIAlpbmV0LT5jb3JrLmZsYWdzICY9IH5JUENPUktfT1BUOwogCi0JaWYgKG5wLT5jb3JrLm9wdCkgewotCQlrZnJlZShucC0+Y29yay5vcHQpOwotCQlucC0+Y29yay5vcHQgPSBOVUxMOwotCX0KKwlrZnJlZShucC0+Y29yay5vcHQpOworCW5wLT5jb3JrLm9wdCA9IE5VTEw7CiAJaWYgKG5wLT5jb3JrLnJ0KSB7CiAJCWRzdF9yZWxlYXNlKCZucC0+Y29yay5ydC0+dS5kc3QpOwogCQlucC0+Y29yay5ydCA9IE5VTEw7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmMgYi9uZXQvaXB2Ni9pcDZfdHVubmVsLmMKaW5kZXggY2Y5NDM3Mi4uZTMxNWQwZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXA2X3R1bm5lbC5jCisrKyBiL25ldC9pcHY2L2lwNl90dW5uZWwuYwpAQCAtNTI1LDYgKzUyNSw3IEBACiAKIAlpZiAoKHQgPSBpcDZpcDZfdG5sX2xvb2t1cCgmaXB2NmgtPnNhZGRyLCAmaXB2NmgtPmRhZGRyKSkgIT0gTlVMTCkgewogCQlpZiAoIXhmcm02X3BvbGljeV9jaGVjayhOVUxMLCBYRlJNX1BPTElDWV9JTiwgc2tiKSkgeworCQkJcmVhZF91bmxvY2soJmlwNmlwNl9sb2NrKTsKIAkJCWtmcmVlX3NrYihza2IpOwogCQkJcmV0dXJuIDA7CiAJCX0KQEAgLTc1Niw4ICs3NTcsNyBAQAogCX0KIAlpcDZfdG5sX2RzdF9zdG9yZSh0LCBkc3QpOwogCi0JaWYgKG9wdCkKLQkJa2ZyZWUob3B0KTsKKwlrZnJlZShvcHQpOwogCiAJdC0+cmVjdXJzaW9uLS07CiAJcmV0dXJuIDA7CkBAIC03NjYsOCArNzY2LDcgQEAKIAlkc3RfbGlua19mYWlsdXJlKHNrYik7CiB0eF9lcnJfZHN0X3JlbGVhc2U6CiAJZHN0X3JlbGVhc2UoZHN0KTsKLQlpZiAob3B0KQotCQlrZnJlZShvcHQpOworCWtmcmVlKG9wdCk7CiB0eF9lcnI6CiAJc3RhdHMtPnR4X2Vycm9ycysrOwogCXN0YXRzLT50eF9kcm9wcGVkKys7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcGNvbXA2LmMgYi9uZXQvaXB2Ni9pcGNvbXA2LmMKaW5kZXggODViZmJjNi4uNTU5MTdmYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXBjb21wNi5jCisrKyBiL25ldC9pcHY2L2lwY29tcDYuYwpAQCAtMTMwLDggKzEzMCw3IEBACiBvdXRfcHV0X2NwdToKIAlwdXRfY3B1KCk7CiBvdXQ6Ci0JaWYgKHRtcF9oZHIpCi0JCWtmcmVlKHRtcF9oZHIpOworCWtmcmVlKHRtcF9oZHIpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyb3Jfb3V0OwogCXJldHVybiBuZXh0aGRyOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jIGIvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jCmluZGV4IDg1Njc4NzMuLjAwM2ZkOTkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYworKysgYi9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMKQEAgLTgwLDggKzgwLDcgQEAKIAkJaWYgKHJhLT5zayA9PSBzaykgewogCQkJaWYgKHNlbD49MCkgewogCQkJCXdyaXRlX3VubG9ja19iaCgmaXA2X3JhX2xvY2spOwotCQkJCWlmIChuZXdfcmEpCi0JCQkJCWtmcmVlKG5ld19yYSk7CisJCQkJa2ZyZWUobmV3X3JhKTsKIAkJCQlyZXR1cm4gLUVBRERSSU5VU0U7CiAJCQl9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwdjZfc3ltcy5jIGIvbmV0L2lwdjYvaXB2Nl9zeW1zLmMKaW5kZXggMzdhNGE5OS4uMTY0ODI3OCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXB2Nl9zeW1zLmMKKysrIGIvbmV0L2lwdjYvaXB2Nl9zeW1zLmMKQEAgLTcsNyArNyw3IEBACiAjaW5jbHVkZSA8bmV0L2lwNl9yb3V0ZS5oPgogI2luY2x1ZGUgPG5ldC94ZnJtLmg+CiAKLUVYUE9SVF9TWU1CT0woaXB2Nl9hZGRyX3R5cGUpOworRVhQT1JUX1NZTUJPTChfX2lwdjZfYWRkcl90eXBlKTsKIEVYUE9SVF9TWU1CT0woaWNtcHY2X3NlbmQpOwogRVhQT1JUX1NZTUJPTChpY21wdjZfc3RhdGlzdGljcyk7CiBFWFBPUlRfU1lNQk9MKGljbXB2Nl9lcnJfY29udmVydCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZyBiL25ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnCmluZGV4IGJiN2NjZmUuLjk3MWJhNjAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnCkBAIC0yNzgsNSArMjc4LDE5IEBACiAJICBJZiB5b3Ugd2FudCB0byBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBzYXkgTSBoZXJlIGFuZCByZWFkCiAJICA8ZmlsZTpEb2N1bWVudGF0aW9uL21vZHVsZXMudHh0Pi4gIElmIHVuc3VyZSwgc2F5IGBOJy4KIAorY29uZmlnIE5GX0NPTk5UUkFDS19JUFY2CisJdHJpc3RhdGUgIklQdjYgc3VwcG9ydCBmb3IgbmV3IGNvbm5lY3Rpb24gdHJhY2tpbmcgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwgJiYgTkZfQ09OTlRSQUNLCisJLS0taGVscC0tLQorCSAgQ29ubmVjdGlvbiB0cmFja2luZyBrZWVwcyBhIHJlY29yZCBvZiB3aGF0IHBhY2tldHMgaGF2ZSBwYXNzZWQKKwkgIHRocm91Z2ggeW91ciBtYWNoaW5lLCBpbiBvcmRlciB0byBmaWd1cmUgb3V0IGhvdyB0aGV5IGFyZSByZWxhdGVkCisJICBpbnRvIGNvbm5lY3Rpb25zLgorCisJICBUaGlzIGlzIElQdjYgc3VwcG9ydCBvbiBMYXllciAzIGluZGVwZW5kZW50IGNvbm5lY3Rpb24gdHJhY2tpbmcuCisJICBMYXllciAzIGluZGVwZW5kZW50IGNvbm5lY3Rpb24gdHJhY2tpbmcgaXMgZXhwZXJpbWVudGFsIHNjaGVtZQorCSAgd2hpY2ggZ2VuZXJhbGl6ZSBpcF9jb25udHJhY2sgdG8gc3VwcG9ydCBvdGhlciBsYXllciAzIHByb3RvY29scy4KKworCSAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uCisKIGVuZG1lbnUKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL01ha2VmaWxlIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL01ha2VmaWxlCmluZGV4IDJiMmMzNzAuLjlhYjViMmMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9NYWtlZmlsZQorKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvTWFrZWZpbGUKQEAgLTI3LDMgKzI3LDkgQEAKIG9iai0kKENPTkZJR19JUDZfTkZfUkFXKSArPSBpcDZ0YWJsZV9yYXcubwogb2JqLSQoQ09ORklHX0lQNl9ORl9NQVRDSF9ITCkgKz0gaXA2dF9obC5vCiBvYmotJChDT05GSUdfSVA2X05GX1RBUkdFVF9SRUpFQ1QpICs9IGlwNnRfUkVKRUNULm8KKworIyBvYmplY3RzIGZvciBsMyBpbmRlcGVuZGVudCBjb25udHJhY2sKK25mX2Nvbm50cmFja19pcHY2LW9ianMgIDo9ICBuZl9jb25udHJhY2tfbDNwcm90b19pcHY2Lm8gbmZfY29ubnRyYWNrX3Byb3RvX2ljbXB2Ni5vIG5mX2Nvbm50cmFja19yZWFzbS5vCisKKyMgbDMgaW5kZXBlbmRlbnQgY29ubnRyYWNrCitvYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX0lQVjYpICs9IG5mX2Nvbm50cmFja19pcHY2Lm8KZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X01BUksuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X01BUksuYwppbmRleCAwYzc1ODRmLi5lYWI4ZmI4IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9NQVJLLmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfTUFSSy5jCkBAIC01Niw5ICs1Niw5IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaXA2dF90YXJnZXQgaXA2dF9tYXJrX3JlZyA9IHsKLQkubmFtZSAJCT0gIk1BUksiLAotCS50YXJnZXQgCT0gdGFyZ2V0LAorc3RhdGljIHN0cnVjdCBpcDZ0X3RhcmdldCBpcDZ0X21hcmtfcmVnID0geyAKKwkubmFtZQkJPSAiTUFSSyIsCisJLnRhcmdldAkJPSB0YXJnZXQsCiAJLmNoZWNrZW50cnkJPSBjaGVja2VudHJ5LAogCS5tZQkJPSBUSElTX01PRFVMRQogfTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY2LmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2Ni5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyYzkwYjMKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2Ni5jCkBAIC0wLDAgKzEsNTU2IEBACisvKgorICogQ29weXJpZ2h0IChDKTIwMDQgVVNBR0kvV0lERSBQcm9qZWN0CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBBdXRob3I6CisgKglZYXN1eXVraSBLb3pha2FpIEBVU0FHSSA8eWFzdXl1a2kua296YWthaUB0b3NoaWJhLmNvLmpwPgorICoKKyAqIDE2IERlYyAyMDAzOiBZYXN1eXVraSBLb3pha2FpIEBVU0FHSSA8eWFzdXl1a2kua296YWthaUB0b3NoaWJhLmNvLmpwPgorICoJLSBzdXBwb3J0IExheWVyIDMgcHJvdG9jb2wgaW5kZXBlbmRlbnQgY29ubmVjdGlvbiB0cmFja2luZy4KKyAqCSAgQmFzZWQgb24gdGhlIG9yaWdpbmFsIGlwX2Nvbm50cmFjayBjb2RlIHdoaWNoCWhhZCB0aGUgZm9sbG93aW5nCisgKgkgIGNvcHlyaWdodCBpbmZvcm1hdGlvbjoKKyAqCQkoQykgMTk5OS0yMDAxIFBhdWwgYFJ1c3R5JyBSdXNzZWxsCisgKgkJKEMpIDIwMDItMjAwNCBOZXRmaWx0ZXIgQ29yZSBUZWFtIDxjb3JldGVhbUBuZXRmaWx0ZXIub3JnPgorICoKKyAqIDIzIE1hciAyMDA0OiBZYXN1eXVraSBLb3pha2FpIEBVU0FHSSA8eWFzdXl1a2kua296YWthaUB0b3NoaWJhLmNvLmpwPgorICoJLSBhZGQgZ2V0X2ZlYXR1cmVzKCkgdG8gc3VwcG9ydCB2YXJpb3VzIHNpemUgb2YgY29ubnRyYWNrCisgKgkgIHN0cnVjdHVyZXMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaXB2Ni5oPgorI2luY2x1ZGUgPGxpbnV4L2luNi5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L2ljbXAuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KKyNpbmNsdWRlIDxuZXQvaXB2Ni5oPgorCisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjYuaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvY29sLmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90by5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuaD4KKworI2lmIDAKKyNkZWZpbmUgREVCVUdQIHByaW50aworI2Vsc2UKKyNkZWZpbmUgREVCVUdQKGZvcm1hdCwgYXJncy4uLikKKyNlbmRpZgorCitERUNMQVJFX1BFUl9DUFUoc3RydWN0IGlwX2Nvbm50cmFja19zdGF0LCBuZl9jb25udHJhY2tfc3RhdCk7CisKK3N0YXRpYyBpbnQgaXB2Nl9wa3RfdG9fdHVwbGUoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IG5ob2ZmLAorCQkJICAgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSkKK3sKKwl1X2ludDMyX3QgX2FkZHJzWzhdLCAqYXA7CisKKwlhcCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG5ob2ZmICsgb2Zmc2V0b2Yoc3RydWN0IGlwdjZoZHIsIHNhZGRyKSwKKwkJCQlzaXplb2YoX2FkZHJzKSwgX2FkZHJzKTsKKwlpZiAoYXAgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwltZW1jcHkodHVwbGUtPnNyYy51My5pcDYsIGFwLCBzaXplb2YodHVwbGUtPnNyYy51My5pcDYpKTsKKwltZW1jcHkodHVwbGUtPmRzdC51My5pcDYsIGFwICsgNCwgc2l6ZW9mKHR1cGxlLT5kc3QudTMuaXA2KSk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBpcHY2X2ludmVydF90dXBsZShzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSwKKwkJCSAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqb3JpZykKK3sKKwltZW1jcHkodHVwbGUtPnNyYy51My5pcDYsIG9yaWctPmRzdC51My5pcDYsIHNpemVvZih0dXBsZS0+c3JjLnUzLmlwNikpOworCW1lbWNweSh0dXBsZS0+ZHN0LnUzLmlwNiwgb3JpZy0+c3JjLnUzLmlwNiwgc2l6ZW9mKHR1cGxlLT5kc3QudTMuaXA2KSk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBpcHY2X3ByaW50X3R1cGxlKHN0cnVjdCBzZXFfZmlsZSAqcywKKwkJCSAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSkKK3sKKwlyZXR1cm4gc2VxX3ByaW50ZihzLCAic3JjPSV4OiV4OiV4OiV4OiV4OiV4OiV4OiV4IGRzdD0leDoleDoleDoleDoleDoleDoleDoleCAiLAorCQkJICBOSVA2KCooKHN0cnVjdCBpbjZfYWRkciAqKXR1cGxlLT5zcmMudTMuaXA2KSksCisJCQkgIE5JUDYoKigoc3RydWN0IGluNl9hZGRyICopdHVwbGUtPmRzdC51My5pcDYpKSk7Cit9CisKK3N0YXRpYyBpbnQgaXB2Nl9wcmludF9jb25udHJhY2soc3RydWN0IHNlcV9maWxlICpzLAorCQkJCWNvbnN0IHN0cnVjdCBuZl9jb25uICpjb25udHJhY2spCit7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBCYXNlZCBvbiBpcHY2X3NraXBfZXh0aGRyKCkgaW4gbmV0L2lwdjYvZXh0aGRyLmMKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHBhcnNlcyAocHJvYmFibHkgdHJ1bmNhdGVkKSBleHRoZHIgc2V0ICJoZHIiCisgKiBvZiBsZW5ndGggImxlbiIuICJuZXh0aGRycCIgaW5pdGlhbGx5IHBvaW50cyB0byBzb21lIHBsYWNlLAorICogd2hlcmUgdHlwZSBvZiB0aGUgZmlyc3QgaGVhZGVyIGNhbiBiZSBmb3VuZC4KKyAqCisgKiBJdCBza2lwcyBhbGwgd2VsbC1rbm93biBleHRoZHJzLCBhbmQgcmV0dXJucyBwb2ludGVyIHRvIHRoZSBzdGFydAorICogb2YgdW5wYXJzYWJsZSBhcmVhIGkuZS4gdGhlIGZpcnN0IGhlYWRlciB3aXRoIHVua25vd24gdHlwZS4KKyAqIGlmIHN1Y2Nlc3MsICpuZXh0aGRyIGlzIHVwZGF0ZWQgYnkgdHlwZS9wcm90b2NvbCBvZiB0aGlzIGhlYWRlci4KKyAqCisgKiBOT1RFUzogLSBpdCBtYXkgcmV0dXJuIHBvaW50ZXIgcG9pbnRpbmcgYmV5b25kIGVuZCBvZiBwYWNrZXQsCisgKiAgICAgICAgICBpZiB0aGUgbGFzdCByZWNvZ25pemVkIGhlYWRlciBpcyB0cnVuY2F0ZWQgaW4gdGhlIG1pZGRsZS4KKyAqICAgICAgICAtIGlmIHBhY2tldCBpcyB0cnVuY2F0ZWQsIHNvIHRoYXQgYWxsIHBhcnNlZCBoZWFkZXJzIGFyZSBza2lwcGVkLAorICogICAgICAgICAgaXQgcmV0dXJucyAtMS4KKyAqICAgICAgICAtIGlmIHBhY2tldCBpcyBmcmFnbWVudGVkLCByZXR1cm4gcG9pbnRlciBvZiB0aGUgZnJhZ21lbnQgaGVhZGVyLgorICogICAgICAgIC0gRVNQIGlzIHVucGFyc2FibGUgZm9yIG5vdyBhbmQgY29uc2lkZXJlZCBsaWtlCisgKiAgICAgICAgICBub3JtYWwgcGF5bG9hZCBwcm90b2NvbC4KKyAqICAgICAgICAtIE5vdGUgYWxzbyBzcGVjaWFsIGhhbmRsaW5nIG9mIEFVVEggaGVhZGVyLiBUaGFua3MgdG8gSVBzZWMgd2l6YXJkcy4KKyAqLworCitpbnQgbmZfY3RfaXB2Nl9za2lwX2V4dGhkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgc3RhcnQsIHU4ICpuZXh0aGRycCwKKwkJCSAgIGludCBsZW4pCit7CisJdTggbmV4dGhkciA9ICpuZXh0aGRycDsKKworCXdoaWxlIChpcHY2X2V4dF9oZHIobmV4dGhkcikpIHsKKwkJc3RydWN0IGlwdjZfb3B0X2hkciBoZHI7CisJCWludCBoZHJsZW47CisKKwkJaWYgKGxlbiA8IChpbnQpc2l6ZW9mKHN0cnVjdCBpcHY2X29wdF9oZHIpKQorCQkJcmV0dXJuIC0xOworCQlpZiAobmV4dGhkciA9PSBORVhUSERSX05PTkUpCisJCQlicmVhazsKKwkJaWYgKG5leHRoZHIgPT0gTkVYVEhEUl9GUkFHTUVOVCkKKwkJCWJyZWFrOworCQlpZiAoc2tiX2NvcHlfYml0cyhza2IsIHN0YXJ0LCAmaGRyLCBzaXplb2YoaGRyKSkpCisJCQlCVUcoKTsKKwkJaWYgKG5leHRoZHIgPT0gTkVYVEhEUl9BVVRIKQorCQkJaGRybGVuID0gKGhkci5oZHJsZW4rMik8PDI7CisJCWVsc2UKKwkJCWhkcmxlbiA9IGlwdjZfb3B0bGVuKCZoZHIpOworCisJCW5leHRoZHIgPSBoZHIubmV4dGhkcjsKKwkJbGVuIC09IGhkcmxlbjsKKwkJc3RhcnQgKz0gaGRybGVuOworCX0KKworCSpuZXh0aGRycCA9IG5leHRoZHI7CisJcmV0dXJuIHN0YXJ0OworfQorCitzdGF0aWMgaW50CitpcHY2X3ByZXBhcmUoc3RydWN0IHNrX2J1ZmYgKipwc2tiLCB1bnNpZ25lZCBpbnQgaG9va251bSwgdW5zaWduZWQgaW50ICpkYXRhb2ZmLAorCSAgICAgdV9pbnQ4X3QgKnByb3RvbnVtKQoreworCXVuc2lnbmVkIGludCBleHRvZmY7CisJdW5zaWduZWQgY2hhciBwbnVtOworCWludCBwcm90b2ZmOworCisJZXh0b2ZmID0gKHU4KikoKCpwc2tiKS0+bmguaXB2NmggKyAxKSAtICgqcHNrYiktPmRhdGE7CisJcG51bSA9ICgqcHNrYiktPm5oLmlwdjZoLT5uZXh0aGRyOworCisJcHJvdG9mZiA9IG5mX2N0X2lwdjZfc2tpcF9leHRoZHIoKnBza2IsIGV4dG9mZiwgJnBudW0sCisJCQkJCSAoKnBza2IpLT5sZW4gLSBleHRvZmYpOworCisJLyoKKwkgKiAocHJvdG9mZiA9PSAoKnBza2IpLT5sZW4pIG1lYW4gdGhhdCB0aGUgcGFja2V0IGRvZXNuJ3QgaGF2ZSBubyBkYXRhCisJICogZXhjZXB0IG9mIElQdjYgJiBleHQgaGVhZGVycy4gYnV0IGl0J3MgdHJhY2tlZCBhbnl3YXkuIC0gWUsKKwkgKi8KKwlpZiAoKHByb3RvZmYgPCAwKSB8fCAocHJvdG9mZiA+ICgqcHNrYiktPmxlbikpIHsKKwkJREVCVUdQKCJpcDZfY29ubnRyYWNrX2NvcmU6IGNhbid0IGZpbmQgcHJvdG8gaW4gcGt0XG4iKTsKKwkJTkZfQ1RfU1RBVF9JTkMoZXJyb3IpOworCQlORl9DVF9TVEFUX0lOQyhpbnZhbGlkKTsKKwkJcmV0dXJuIC1ORl9BQ0NFUFQ7CisJfQorCisJKmRhdGFvZmYgPSBwcm90b2ZmOworCSpwcm90b251bSA9IHBudW07CisJcmV0dXJuIE5GX0FDQ0VQVDsKK30KKworc3RhdGljIHVfaW50MzJfdCBpcHY2X2dldF9mZWF0dXJlcyhjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSkKK3sKKwlyZXR1cm4gTkZfQ1RfRl9CQVNJQzsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBpcHY2X2NvbmZpcm0odW5zaWduZWQgaW50IGhvb2tudW0sCisJCQkJIHN0cnVjdCBza19idWZmICoqcHNrYiwKKwkJCQkgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAorCQkJCSBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAorCQkJCSBpbnQgKCpva2ZuKShzdHJ1Y3Qgc2tfYnVmZiAqKSkKK3sKKwlzdHJ1Y3QgbmZfY29ubiAqY3Q7CisJZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm87CisKKwkvKiBUaGlzIGlzIHdoZXJlIHdlIGNhbGwgdGhlIGhlbHBlcjogYXMgdGhlIHBhY2tldCBnb2VzIG91dC4gKi8KKwljdCA9IG5mX2N0X2dldCgqcHNrYiwgJmN0aW5mbyk7CisJaWYgKGN0ICYmIGN0LT5oZWxwZXIpIHsKKwkJdW5zaWduZWQgaW50IHJldCwgcHJvdG9mZjsKKwkJdW5zaWduZWQgaW50IGV4dG9mZiA9ICh1OCopKCgqcHNrYiktPm5oLmlwdjZoICsgMSkKKwkJCQkgICAgICAtICgqcHNrYiktPmRhdGE7CisJCXVuc2lnbmVkIGNoYXIgcG51bSA9ICgqcHNrYiktPm5oLmlwdjZoLT5uZXh0aGRyOworCisJCXByb3RvZmYgPSBuZl9jdF9pcHY2X3NraXBfZXh0aGRyKCpwc2tiLCBleHRvZmYsICZwbnVtLAorCQkJCQkJICgqcHNrYiktPmxlbiAtIGV4dG9mZik7CisJCWlmIChwcm90b2ZmIDwgMCB8fCBwcm90b2ZmID4gKCpwc2tiKS0+bGVuIHx8CisJCSAgICBwbnVtID09IE5FWFRIRFJfRlJBR01FTlQpIHsKKwkJCURFQlVHUCgicHJvdG8gaGVhZGVyIG5vdCBmb3VuZFxuIik7CisJCQlyZXR1cm4gTkZfQUNDRVBUOworCQl9CisKKwkJcmV0ID0gY3QtPmhlbHBlci0+aGVscChwc2tiLCBwcm90b2ZmLCBjdCwgY3RpbmZvKTsKKwkJaWYgKHJldCAhPSBORl9BQ0NFUFQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCS8qIFdlJ3ZlIHNlZW4gaXQgY29taW5nIG91dCB0aGUgb3RoZXIgc2lkZTogY29uZmlybSBpdCAqLworCisJcmV0dXJuIG5mX2Nvbm50cmFja19jb25maXJtKHBza2IpOworfQorCitleHRlcm4gc3RydWN0IHNrX2J1ZmYgKm5mX2N0X2ZyYWc2X2dhdGhlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiB2b2lkIG5mX2N0X2ZyYWc2X291dHB1dCh1bnNpZ25lZCBpbnQgaG9va251bSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCisJCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKKwkJCSAgICAgICBpbnQgKCpva2ZuKShzdHJ1Y3Qgc2tfYnVmZiAqKSk7CitzdGF0aWMgdW5zaWduZWQgaW50IGlwdjZfZGVmcmFnKHVuc2lnbmVkIGludCBob29rbnVtLAorCQkJCXN0cnVjdCBza19idWZmICoqcHNrYiwKKwkJCQljb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCisJCQkJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKKwkJCQlpbnQgKCpva2ZuKShzdHJ1Y3Qgc2tfYnVmZiAqKSkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqcmVhc207CisKKwkvKiBQcmV2aW91c2x5IHNlZW4gKGxvb3BiYWNrKT8gICovCisJaWYgKCgqcHNrYiktPm5mY3QpCisJCXJldHVybiBORl9BQ0NFUFQ7CisKKwlyZWFzbSA9IG5mX2N0X2ZyYWc2X2dhdGhlcigqcHNrYik7CisKKwkvKiBxdWV1ZWQgKi8KKwlpZiAocmVhc20gPT0gTlVMTCkKKwkJcmV0dXJuIE5GX1NUT0xFTjsKKworCS8qIGVycm9yIG9jY3VyZWQgb3Igbm90IGZyYWdtZW50ZWQgKi8KKwlpZiAocmVhc20gPT0gKnBza2IpCisJCXJldHVybiBORl9BQ0NFUFQ7CisKKwluZl9jdF9mcmFnNl9vdXRwdXQoaG9va251bSwgcmVhc20sIChzdHJ1Y3QgbmV0X2RldmljZSAqKWluLAorCQkJICAgKHN0cnVjdCBuZXRfZGV2aWNlICopb3V0LCBva2ZuKTsKKworCXJldHVybiBORl9TVE9MRU47Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaXB2Nl9jb25udHJhY2tfaW4odW5zaWduZWQgaW50IGhvb2tudW0sCisJCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKipwc2tiLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAorCQkJCSAgICAgIGludCAoKm9rZm4pKHN0cnVjdCBza19idWZmICopKQoreworCXN0cnVjdCBza19idWZmICpyZWFzbSA9ICgqcHNrYiktPm5mY3RfcmVhc207CisKKwkvKiBUaGlzIHBhY2tldCBpcyBmcmFnbWVudGVkIGFuZCBoYXMgcmVhc3NlbWJsZWQgcGFja2V0LiAqLworCWlmIChyZWFzbSkgeworCQkvKiBSZWFzc2VtYmxlZCBwYWNrZXQgaXNuJ3QgcGFyc2VkIHlldCA/ICovCisJCWlmICghcmVhc20tPm5mY3QpIHsKKwkJCXVuc2lnbmVkIGludCByZXQ7CisKKwkJCXJldCA9IG5mX2Nvbm50cmFja19pbihQRl9JTkVUNiwgaG9va251bSwgJnJlYXNtKTsKKwkJCWlmIChyZXQgIT0gTkZfQUNDRVBUKQorCQkJCXJldHVybiByZXQ7CisJCX0KKwkJbmZfY29ubnRyYWNrX2dldChyZWFzbS0+bmZjdCk7CisJCSgqcHNrYiktPm5mY3QgPSByZWFzbS0+bmZjdDsKKwkJcmV0dXJuIE5GX0FDQ0VQVDsKKwl9CisKKwlyZXR1cm4gbmZfY29ubnRyYWNrX2luKFBGX0lORVQ2LCBob29rbnVtLCBwc2tiKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBpcHY2X2Nvbm50cmFja19sb2NhbCh1bnNpZ25lZCBpbnQgaG9va251bSwKKwkJCQkJIHN0cnVjdCBza19idWZmICoqcHNrYiwKKwkJCQkJIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKKwkJCQkJIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCisJCQkJCSBpbnQgKCpva2ZuKShzdHJ1Y3Qgc2tfYnVmZiAqKSkKK3sKKwkvKiByb290IGlzIHBsYXlpbmcgd2l0aCByYXcgc29ja2V0cy4gKi8KKwlpZiAoKCpwc2tiKS0+bGVuIDwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSkgeworCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJcHJpbnRrKCJpcHY2X2Nvbm50cmFja19sb2NhbDogcGFja2V0IHRvbyBzaG9ydFxuIik7CisJCXJldHVybiBORl9BQ0NFUFQ7CisJfQorCXJldHVybiBpcHY2X2Nvbm50cmFja19pbihob29rbnVtLCBwc2tiLCBpbiwgb3V0LCBva2ZuKTsKK30KKworLyogQ29ubmVjdGlvbiB0cmFja2luZyBtYXkgZHJvcCBwYWNrZXRzLCBidXQgbmV2ZXIgYWx0ZXJzIHRoZW0sIHNvCisgICBtYWtlIGl0IHRoZSBmaXJzdCBob29rLiAqLworc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyBpcHY2X2Nvbm50cmFja19kZWZyYWdfb3BzID0geworCS5ob29rCQk9IGlwdjZfZGVmcmFnLAorCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkucGYJCT0gUEZfSU5FVDYsCisJLmhvb2tudW0JPSBORl9JUDZfUFJFX1JPVVRJTkcsCisJLnByaW9yaXR5CT0gTkZfSVA2X1BSSV9DT05OVFJBQ0tfREVGUkFHLAorfTsKKworc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyBpcHY2X2Nvbm50cmFja19pbl9vcHMgPSB7CisJLmhvb2sJCT0gaXB2Nl9jb25udHJhY2tfaW4sCisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5wZgkJPSBQRl9JTkVUNiwKKwkuaG9va251bQk9IE5GX0lQNl9QUkVfUk9VVElORywKKwkucHJpb3JpdHkJPSBORl9JUDZfUFJJX0NPTk5UUkFDSywKK307CisKK3N0YXRpYyBzdHJ1Y3QgbmZfaG9va19vcHMgaXB2Nl9jb25udHJhY2tfbG9jYWxfb3V0X29wcyA9IHsKKwkuaG9vawkJPSBpcHY2X2Nvbm50cmFja19sb2NhbCwKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLnBmCQk9IFBGX0lORVQ2LAorCS5ob29rbnVtCT0gTkZfSVA2X0xPQ0FMX09VVCwKKwkucHJpb3JpdHkJPSBORl9JUDZfUFJJX0NPTk5UUkFDSywKK307CisKK3N0YXRpYyBzdHJ1Y3QgbmZfaG9va19vcHMgaXB2Nl9jb25udHJhY2tfZGVmcmFnX2xvY2FsX291dF9vcHMgPSB7CisJLmhvb2sJCT0gaXB2Nl9kZWZyYWcsCisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5wZgkJPSBQRl9JTkVUNiwKKwkuaG9va251bQk9IE5GX0lQNl9MT0NBTF9PVVQsCisJLnByaW9yaXR5CT0gTkZfSVA2X1BSSV9DT05OVFJBQ0tfREVGUkFHLAorfTsKKworLyogUmVmcmFnbWVudGVyOyBsYXN0IGNoYW5jZS4gKi8KK3N0YXRpYyBzdHJ1Y3QgbmZfaG9va19vcHMgaXB2Nl9jb25udHJhY2tfb3V0X29wcyA9IHsKKwkuaG9vawkJPSBpcHY2X2NvbmZpcm0sCisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5wZgkJPSBQRl9JTkVUNiwKKwkuaG9va251bQk9IE5GX0lQNl9QT1NUX1JPVVRJTkcsCisJLnByaW9yaXR5CT0gTkZfSVA2X1BSSV9MQVNULAorfTsKKworc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyBpcHY2X2Nvbm50cmFja19sb2NhbF9pbl9vcHMgPSB7CisJLmhvb2sJCT0gaXB2Nl9jb25maXJtLAorCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkucGYJCT0gUEZfSU5FVDYsCisJLmhvb2tudW0JPSBORl9JUDZfTE9DQUxfSU4sCisJLnByaW9yaXR5CT0gTkZfSVA2X1BSSV9MQVNULTEsCit9OworCisjaWZkZWYgQ09ORklHX1NZU0NUTAorCisvKiBGcm9tIG5mX2Nvbm50cmFja19wcm90b19pY21wdjYuYyAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbmZfY3RfaWNtcHY2X3RpbWVvdXQ7CisKKy8qIEZyb20gbmZfY29ubnRyYWNrX2ZyYWc2LmMgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIG5mX2N0X2ZyYWc2X3RpbWVvdXQ7CitleHRlcm4gdW5zaWduZWQgbG9uZyBuZl9jdF9mcmFnNl9sb3dfdGhyZXNoOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbmZfY3RfZnJhZzZfaGlnaF90aHJlc2g7CisKK3N0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqbmZfY3RfaXB2Nl9zeXNjdGxfaGVhZGVyOworCitzdGF0aWMgY3RsX3RhYmxlIG5mX2N0X3N5c2N0bF90YWJsZVtdID0geworCXsKKwkJLmN0bF9uYW1lCT0gTkVUX05GX0NPTk5UUkFDS19JQ01QVjZfVElNRU9VVCwKKwkJLnByb2NuYW1lCT0gIm5mX2Nvbm50cmFja19pY21wdjZfdGltZW91dCIsCisJCS5kYXRhCQk9ICZuZl9jdF9pY21wdjZfdGltZW91dCwKKwkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQgaW50KSwKKwkJLm1vZGUJCT0gMDY0NCwKKwkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjX2ppZmZpZXMsCisJfSwKKwl7CisJCS5jdGxfbmFtZQk9IE5FVF9ORl9DT05OVFJBQ0tfRlJBRzZfVElNRU9VVCwKKwkJLnByb2NuYW1lCT0gIm5mX2Nvbm50cmFja19mcmFnNl90aW1lb3V0IiwKKwkJLmRhdGEJCT0gJm5mX2N0X2ZyYWc2X3RpbWVvdXQsCisJCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCisJCS5tb2RlCQk9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlY19qaWZmaWVzLAorCX0sCisJeworCQkuY3RsX25hbWUJPSBORVRfTkZfQ09OTlRSQUNLX0ZSQUc2X0xPV19USFJFU0gsCisJCS5wcm9jbmFtZQk9ICJuZl9jb25udHJhY2tfZnJhZzZfbG93X3RocmVzaCIsCisJCS5kYXRhCQk9ICZuZl9jdF9mcmFnNl9sb3dfdGhyZXNoLAorCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBpbnQpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWNfamlmZmllcywKKwl9LAorCXsKKwkJLmN0bF9uYW1lCT0gTkVUX05GX0NPTk5UUkFDS19GUkFHNl9ISUdIX1RIUkVTSCwKKwkJLnByb2NuYW1lCT0gIm5mX2Nvbm50cmFja19mcmFnNl9oaWdoX3RocmVzaCIsCisJCS5kYXRhCQk9ICZuZl9jdF9mcmFnNl9oaWdoX3RocmVzaCwKKwkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQgaW50KSwKKwkJLm1vZGUJCT0gMDY0NCwKKwkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjX2ppZmZpZXMsCisJfSwKKyAgICAgICAgeyAuY3RsX25hbWUgPSAwIH0KK307CisKK3N0YXRpYyBjdGxfdGFibGUgbmZfY3RfbmV0ZmlsdGVyX3RhYmxlW10gPSB7CisJeworCQkuY3RsX25hbWUJPSBORVRfTkVURklMVEVSLAorCQkucHJvY25hbWUJPSAibmV0ZmlsdGVyIiwKKwkJLm1vZGUJCT0gMDU1NSwKKwkJLmNoaWxkCQk9IG5mX2N0X3N5c2N0bF90YWJsZSwKKwl9LAorCXsgLmN0bF9uYW1lID0gMCB9Cit9OworCitzdGF0aWMgY3RsX3RhYmxlIG5mX2N0X25ldF90YWJsZVtdID0geworCXsKKwkJLmN0bF9uYW1lCT0gQ1RMX05FVCwKKwkJLnByb2NuYW1lCT0gIm5ldCIsCisJCS5tb2RlCQk9IDA1NTUsCisJCS5jaGlsZAkJPSBuZl9jdF9uZXRmaWx0ZXJfdGFibGUsCisJfSwKKwl7IC5jdGxfbmFtZSA9IDAgfQorfTsKKyNlbmRpZgorCitzdHJ1Y3QgbmZfY29ubnRyYWNrX2wzcHJvdG8gbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NiA9IHsKKwkubDNwcm90bwkJPSBQRl9JTkVUNiwKKwkubmFtZQkJCT0gImlwdjYiLAorCS5wa3RfdG9fdHVwbGUJCT0gaXB2Nl9wa3RfdG9fdHVwbGUsCisJLmludmVydF90dXBsZQkJPSBpcHY2X2ludmVydF90dXBsZSwKKwkucHJpbnRfdHVwbGUJCT0gaXB2Nl9wcmludF90dXBsZSwKKwkucHJpbnRfY29ubnRyYWNrCT0gaXB2Nl9wcmludF9jb25udHJhY2ssCisJLnByZXBhcmUJCT0gaXB2Nl9wcmVwYXJlLAorCS5nZXRfZmVhdHVyZXMJCT0gaXB2Nl9nZXRfZmVhdHVyZXMsCisJLm1lCQkJPSBUSElTX01PRFVMRSwKK307CisKK2V4dGVybiBzdHJ1Y3QgbmZfY29ubnRyYWNrX3Byb3RvY29sIG5mX2Nvbm50cmFja19wcm90b2NvbF90Y3A2OworZXh0ZXJuIHN0cnVjdCBuZl9jb25udHJhY2tfcHJvdG9jb2wgbmZfY29ubnRyYWNrX3Byb3RvY29sX3VkcDY7CitleHRlcm4gc3RydWN0IG5mX2Nvbm50cmFja19wcm90b2NvbCBuZl9jb25udHJhY2tfcHJvdG9jb2xfaWNtcHY2OworZXh0ZXJuIGludCBuZl9jdF9mcmFnNl9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgbmZfY3RfZnJhZzZfY2xlYW51cCh2b2lkKTsKK3N0YXRpYyBpbnQgaW5pdF9vcl9jbGVhbnVwKGludCBpbml0KQoreworCWludCByZXQgPSAwOworCisJaWYgKCFpbml0KSBnb3RvIGNsZWFudXA7CisKKwlyZXQgPSBuZl9jdF9mcmFnNl9pbml0KCk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKCJuZl9jb25udHJhY2tfaXB2NjogY2FuJ3QgaW5pdGlhbGl6ZSBmcmFnNi5cbiIpOworCQlnb3RvIGNsZWFudXBfbm90aGluZzsKKwl9CisJcmV0ID0gbmZfY29ubnRyYWNrX3Byb3RvY29sX3JlZ2lzdGVyKCZuZl9jb25udHJhY2tfcHJvdG9jb2xfdGNwNik7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKCJuZl9jb25udHJhY2tfaXB2NjogY2FuJ3QgcmVnaXN0ZXIgdGNwLlxuIik7CisJCWdvdG8gY2xlYW51cF9mcmFnNjsKKwl9CisKKwlyZXQgPSBuZl9jb25udHJhY2tfcHJvdG9jb2xfcmVnaXN0ZXIoJm5mX2Nvbm50cmFja19wcm90b2NvbF91ZHA2KTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoIm5mX2Nvbm50cmFja19pcHY2OiBjYW4ndCByZWdpc3RlciB1ZHAuXG4iKTsKKwkJZ290byBjbGVhbnVwX3RjcDsKKwl9CisKKwlyZXQgPSBuZl9jb25udHJhY2tfcHJvdG9jb2xfcmVnaXN0ZXIoJm5mX2Nvbm50cmFja19wcm90b2NvbF9pY21wdjYpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50aygibmZfY29ubnRyYWNrX2lwdjY6IGNhbid0IHJlZ2lzdGVyIGljbXB2Ni5cbiIpOworCQlnb3RvIGNsZWFudXBfdWRwOworCX0KKworCXJldCA9IG5mX2Nvbm50cmFja19sM3Byb3RvX3JlZ2lzdGVyKCZuZl9jb25udHJhY2tfbDNwcm90b19pcHY2KTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoIm5mX2Nvbm50cmFja19pcHY2OiBjYW4ndCByZWdpc3RlciBpcHY2XG4iKTsKKwkJZ290byBjbGVhbnVwX2ljbXB2NjsKKwl9CisKKwlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcHY2X2Nvbm50cmFja19kZWZyYWdfb3BzKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoIm5mX2Nvbm50cmFja19pcHY2OiBjYW4ndCByZWdpc3RlciBwcmUtcm91dGluZyBkZWZyYWcgIgorCQkgICAgICAgImhvb2suXG4iKTsKKwkJZ290byBjbGVhbnVwX2lwdjY7CisJfQorCisJcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmaXB2Nl9jb25udHJhY2tfZGVmcmFnX2xvY2FsX291dF9vcHMpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50aygibmZfY29ubnRyYWNrX2lwdjY6IGNhbid0IHJlZ2lzdGVyIGxvY2FsX291dCBkZWZyYWcgIgorCQkgICAgICAgImhvb2suXG4iKTsKKwkJZ290byBjbGVhbnVwX2RlZnJhZ29wczsKKwl9CisKKwlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcHY2X2Nvbm50cmFja19pbl9vcHMpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50aygibmZfY29ubnRyYWNrX2lwdjY6IGNhbid0IHJlZ2lzdGVyIHByZS1yb3V0aW5nIGhvb2suXG4iKTsKKwkJZ290byBjbGVhbnVwX2RlZnJhZ2xvY2Fsb3BzOworCX0KKworCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2soJmlwdjZfY29ubnRyYWNrX2xvY2FsX291dF9vcHMpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50aygibmZfY29ubnRyYWNrX2lwdjY6IGNhbid0IHJlZ2lzdGVyIGxvY2FsIG91dCBob29rLlxuIik7CisJCWdvdG8gY2xlYW51cF9pbm9wczsKKwl9CisKKwlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcHY2X2Nvbm50cmFja19vdXRfb3BzKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoIm5mX2Nvbm50cmFja19pcHY2OiBjYW4ndCByZWdpc3RlciBwb3N0LXJvdXRpbmcgaG9vay5cbiIpOworCQlnb3RvIGNsZWFudXBfaW5hbmRsb2NhbG9wczsKKwl9CisKKwlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcHY2X2Nvbm50cmFja19sb2NhbF9pbl9vcHMpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50aygibmZfY29ubnRyYWNrX2lwdjY6IGNhbid0IHJlZ2lzdGVyIGxvY2FsIGluIGhvb2suXG4iKTsKKwkJZ290byBjbGVhbnVwX2lub3V0YW5kbG9jYWxvcHM7CisJfQorCisjaWZkZWYgQ09ORklHX1NZU0NUTAorCW5mX2N0X2lwdjZfc3lzY3RsX2hlYWRlciA9IHJlZ2lzdGVyX3N5c2N0bF90YWJsZShuZl9jdF9uZXRfdGFibGUsIDApOworCWlmIChuZl9jdF9pcHY2X3N5c2N0bF9oZWFkZXIgPT0gTlVMTCkgeworCQlwcmludGsoIm5mX2Nvbm50cmFjazogY2FuJ3QgcmVnaXN0ZXIgdG8gc3lzY3RsLlxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gY2xlYW51cF9sb2NhbGlub3BzOworCX0KKyNlbmRpZgorCXJldHVybiByZXQ7CisKKyBjbGVhbnVwOgorCXN5bmNocm9uaXplX25ldCgpOworI2lmZGVmIENPTkZJR19TWVNDVEwKKyAJdW5yZWdpc3Rlcl9zeXNjdGxfdGFibGUobmZfY3RfaXB2Nl9zeXNjdGxfaGVhZGVyKTsKKyBjbGVhbnVwX2xvY2FsaW5vcHM6CisjZW5kaWYKKwluZl91bnJlZ2lzdGVyX2hvb2soJmlwdjZfY29ubnRyYWNrX2xvY2FsX2luX29wcyk7CisgY2xlYW51cF9pbm91dGFuZGxvY2Fsb3BzOgorCW5mX3VucmVnaXN0ZXJfaG9vaygmaXB2Nl9jb25udHJhY2tfb3V0X29wcyk7CisgY2xlYW51cF9pbmFuZGxvY2Fsb3BzOgorCW5mX3VucmVnaXN0ZXJfaG9vaygmaXB2Nl9jb25udHJhY2tfbG9jYWxfb3V0X29wcyk7CisgY2xlYW51cF9pbm9wczoKKwluZl91bnJlZ2lzdGVyX2hvb2soJmlwdjZfY29ubnRyYWNrX2luX29wcyk7CisgY2xlYW51cF9kZWZyYWdsb2NhbG9wczoKKwluZl91bnJlZ2lzdGVyX2hvb2soJmlwdjZfY29ubnRyYWNrX2RlZnJhZ19sb2NhbF9vdXRfb3BzKTsKKyBjbGVhbnVwX2RlZnJhZ29wczoKKwluZl91bnJlZ2lzdGVyX2hvb2soJmlwdjZfY29ubnRyYWNrX2RlZnJhZ19vcHMpOworIGNsZWFudXBfaXB2NjoKKwluZl9jb25udHJhY2tfbDNwcm90b191bnJlZ2lzdGVyKCZuZl9jb25udHJhY2tfbDNwcm90b19pcHY2KTsKKyBjbGVhbnVwX2ljbXB2NjoKKwluZl9jb25udHJhY2tfcHJvdG9jb2xfdW5yZWdpc3RlcigmbmZfY29ubnRyYWNrX3Byb3RvY29sX2ljbXB2Nik7CisgY2xlYW51cF91ZHA6CisJbmZfY29ubnRyYWNrX3Byb3RvY29sX3VucmVnaXN0ZXIoJm5mX2Nvbm50cmFja19wcm90b2NvbF91ZHA2KTsKKyBjbGVhbnVwX3RjcDoKKwluZl9jb25udHJhY2tfcHJvdG9jb2xfdW5yZWdpc3RlcigmbmZfY29ubnRyYWNrX3Byb3RvY29sX3RjcDYpOworIGNsZWFudXBfZnJhZzY6CisJbmZfY3RfZnJhZzZfY2xlYW51cCgpOworIGNsZWFudXBfbm90aGluZzoKKwlyZXR1cm4gcmV0OworfQorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJZYXN1eXVraSBLT1pBS0FJIEBVU0FHSSA8eWFzdXl1a2kua296YWthaUB0b3NoaWJhLmNvLmpwPiIpOworCitzdGF0aWMgaW50IF9faW5pdCBpbml0KHZvaWQpCit7CisJbmVlZF9uZl9jb25udHJhY2soKTsKKwlyZXR1cm4gaW5pdF9vcl9jbGVhbnVwKDEpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZmluaSh2b2lkKQoreworCWluaXRfb3JfY2xlYW51cCgwKTsKK30KKworbW9kdWxlX2luaXQoaW5pdCk7Cittb2R1bGVfZXhpdChmaW5pKTsKKwordm9pZCBuZWVkX2lwNl9jb25udHJhY2sodm9pZCkKK3sKK30KKworRVhQT1JUX1NZTUJPTChuZWVkX2lwNl9jb25udHJhY2spOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wdjYuYyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcHY2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBmMWRhNQotLS0gL2Rldi9udWxsCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcHY2LmMKQEAgLTAsMCArMSwyNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpMjAwMywyMDA0IFVTQUdJL1dJREUgUHJvamVjdAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogQXV0aG9yOgorICoJWWFzdXl1a2kgS296YWthaSBAVVNBR0kgPHlhc3V5dWtpLmtvemFrYWlAdG9zaGliYS5jby5qcD4KKyAqCisgKiAxNiBEZWMgMjAwMzogWWFzdXl1a2kgS296YWthaSBAVVNBR0kgPHlhc3V5dWtpLmtvemFrYWlAdG9zaGliYS5jby5qcD4KKyAqCS0gSUNNUHY2IHRyYWNraW5nIHN1cHBvcnQuIERlcml2ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaXBfY29ubnRyYWNrIGNvZGUKKyAqCSAgbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19wcm90b19pY21wLmMgd2hpY2ggaGFkIHRoZSBmb2xsb3dpbmcKKyAqCSAgY29weXJpZ2h0IGluZm9ybWF0aW9uOgorICoJCShDKSAxOTk5LTIwMDEgUGF1bCBgUnVzdHknIFJ1c3NlbGwKKyAqCQkoQykgMjAwMi0yMDA0IE5ldGZpbHRlciBDb3JlIFRlYW0gPGNvcmV0ZWFtQG5ldGZpbHRlci5vcmc+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci5oPgorI2luY2x1ZGUgPGxpbnV4L2luNi5oPgorI2luY2x1ZGUgPGxpbnV4L2ljbXB2Ni5oPgorI2luY2x1ZGUgPGxpbnV4L2lwdjYuaD4KKyNpbmNsdWRlIDxuZXQvaXB2Ni5oPgorI2luY2x1ZGUgPG5ldC9pcDZfY2hlY2tzdW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY2Lmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGUuaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b2NvbC5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL2lwdjYvbmZfY29ubnRyYWNrX2ljbXB2Ni5oPgorCit1bnNpZ25lZCBsb25nIG5mX2N0X2ljbXB2Nl90aW1lb3V0ID0gMzAqSFo7CisKKyNpZiAwCisjZGVmaW5lIERFQlVHUCBwcmludGsKKyNlbHNlCisjZGVmaW5lIERFQlVHUChmb3JtYXQsIGFyZ3MuLi4pCisjZW5kaWYKKworc3RhdGljIGludCBpY21wdjZfcGt0X3RvX3R1cGxlKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCisJCQkgICAgICAgdW5zaWduZWQgaW50IGRhdGFvZmYsCisJCQkgICAgICAgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpCit7CisJc3RydWN0IGljbXA2aGRyIF9oZHIsICpocDsKKworCWhwID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgZGF0YW9mZiwgc2l6ZW9mKF9oZHIpLCAmX2hkcik7CisJaWYgKGhwID09IE5VTEwpCisJCXJldHVybiAwOworCXR1cGxlLT5kc3QudS5pY21wLnR5cGUgPSBocC0+aWNtcDZfdHlwZTsKKwl0dXBsZS0+c3JjLnUuaWNtcC5pZCA9IGhwLT5pY21wNl9pZGVudGlmaWVyOworCXR1cGxlLT5kc3QudS5pY21wLmNvZGUgPSBocC0+aWNtcDZfY29kZTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGljbXB2Nl9pbnZlcnRfdHVwbGUoc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqb3JpZykKK3sKKwkvKiBBZGQgMTsgc3BhY2VzIGZpbGxlZCB3aXRoIDAuICovCisJc3RhdGljIHVfaW50OF90IGludm1hcFtdID0geworCQlbSUNNUFY2X0VDSE9fUkVRVUVTVCAtIDEyOF0JPSBJQ01QVjZfRUNIT19SRVBMWSArIDEsCisJCVtJQ01QVjZfRUNIT19SRVBMWSAtIDEyOF0JPSBJQ01QVjZfRUNIT19SRVFVRVNUICsgMSwKKwkJW0lDTVBWNl9OSV9RVUVSWSAtIDEyOF0JCT0gSUNNUFY2X05JX1FVRVJZICsgMSwKKwkJW0lDTVBWNl9OSV9SRVBMWSAtIDEyOF0JCT0gSUNNUFY2X05JX1JFUExZICsxCisJfTsKKworCV9fdTggdHlwZSA9IG9yaWctPmRzdC51LmljbXAudHlwZSAtIDEyODsKKwlpZiAodHlwZSA+PSBzaXplb2YoaW52bWFwKSB8fCAhaW52bWFwW3R5cGVdKQorCQlyZXR1cm4gMDsKKworCXR1cGxlLT5zcmMudS5pY21wLmlkICAgPSBvcmlnLT5zcmMudS5pY21wLmlkOworCXR1cGxlLT5kc3QudS5pY21wLnR5cGUgPSBpbnZtYXBbdHlwZV0gLSAxOworCXR1cGxlLT5kc3QudS5pY21wLmNvZGUgPSBvcmlnLT5kc3QudS5pY21wLmNvZGU7CisJcmV0dXJuIDE7Cit9CisKKy8qIFByaW50IG91dCB0aGUgcGVyLXByb3RvY29sIHBhcnQgb2YgdGhlIHR1cGxlLiAqLworc3RhdGljIGludCBpY21wdjZfcHJpbnRfdHVwbGUoc3RydWN0IHNlcV9maWxlICpzLAorCQkJICAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpCit7CisJcmV0dXJuIHNlcV9wcmludGYocywgInR5cGU9JXUgY29kZT0ldSBpZD0ldSAiLAorCQkJICB0dXBsZS0+ZHN0LnUuaWNtcC50eXBlLAorCQkJICB0dXBsZS0+ZHN0LnUuaWNtcC5jb2RlLAorCQkJICBudG9ocyh0dXBsZS0+c3JjLnUuaWNtcC5pZCkpOworfQorCisvKiBQcmludCBvdXQgdGhlIHByaXZhdGUgcGFydCBvZiB0aGUgY29ubnRyYWNrLiAqLworc3RhdGljIGludCBpY21wdjZfcHJpbnRfY29ubnRyYWNrKHN0cnVjdCBzZXFfZmlsZSAqcywKKwkJCQkgIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjb25udHJhY2spCit7CisJcmV0dXJuIDA7Cit9CisKKy8qIFJldHVybnMgdmVyZGljdCBmb3IgcGFja2V0LCBvciAtMSBmb3IgaW52YWxpZC4gKi8KK3N0YXRpYyBpbnQgaWNtcHY2X3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsCisJCSAgICAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkgICAgICAgdW5zaWduZWQgaW50IGRhdGFvZmYsCisJCSAgICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJICAgICAgIGludCBwZiwKKwkJICAgICAgIHVuc2lnbmVkIGludCBob29rbnVtKQoreworCS8qIFRyeSB0byBkZWxldGUgY29ubmVjdGlvbiBpbW1lZGlhdGVseSBhZnRlciBhbGwgcmVwbGllczoKKyAgICAgICAgICAgd29uJ3QgYWN0dWFsbHkgdmFuaXNoIGFzIHdlIHN0aWxsIGhhdmUgc2tiLCBhbmQgZGVsX3RpbWVyCisgICAgICAgICAgIG1lYW5zIHRoaXMgd2lsbCBvbmx5IHJ1biBvbmNlIGV2ZW4gaWYgY291bnQgaGl0cyB6ZXJvIHR3aWNlCisgICAgICAgICAgICh0aGVvcmV0aWNhbGx5IHBvc3NpYmxlIHdpdGggU01QKSAqLworCWlmIChDVElORk8yRElSKGN0aW5mbykgPT0gSVBfQ1RfRElSX1JFUExZKSB7CisJCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZjdC0+cHJvdG8uaWNtcC5jb3VudCkKKwkJICAgICYmIGRlbF90aW1lcigmY3QtPnRpbWVvdXQpKQorCQkJY3QtPnRpbWVvdXQuZnVuY3Rpb24oKHVuc2lnbmVkIGxvbmcpY3QpOworCX0gZWxzZSB7CisJCWF0b21pY19pbmMoJmN0LT5wcm90by5pY21wLmNvdW50KTsKKwkJbmZfY29ubnRyYWNrX2V2ZW50X2NhY2hlKElQQ1RfUFJPVE9JTkZPX1ZPTEFUSUxFLCBza2IpOworCQluZl9jdF9yZWZyZXNoX2FjY3QoY3QsIGN0aW5mbywgc2tiLCBuZl9jdF9pY21wdjZfdGltZW91dCk7CisJfQorCisJcmV0dXJuIE5GX0FDQ0VQVDsKK30KKworLyogQ2FsbGVkIHdoZW4gYSBuZXcgY29ubmVjdGlvbiBmb3IgdGhpcyBwcm90b2NvbCBmb3VuZC4gKi8KK3N0YXRpYyBpbnQgaWNtcHY2X25ldyhzdHJ1Y3QgbmZfY29ubiAqY29ubnRyYWNrLAorCQkgICAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkgICAgICB1bnNpZ25lZCBpbnQgZGF0YW9mZikKK3sKKwlzdGF0aWMgdV9pbnQ4X3QgdmFsaWRfbmV3W10gPSB7CisJCVtJQ01QVjZfRUNIT19SRVFVRVNUIC0gMTI4XSA9IDEsCisJCVtJQ01QVjZfTklfUVVFUlkgLSAxMjhdID0gMQorCX07CisKKwlpZiAoY29ubnRyYWNrLT50dXBsZWhhc2hbMF0udHVwbGUuZHN0LnUuaWNtcC50eXBlIC0gMTI4ID49IHNpemVvZih2YWxpZF9uZXcpCisJICAgIHx8ICF2YWxpZF9uZXdbY29ubnRyYWNrLT50dXBsZWhhc2hbMF0udHVwbGUuZHN0LnUuaWNtcC50eXBlIC0gMTI4XSkgeworCQkvKiBDYW4ndCBjcmVhdGUgYSBuZXcgSUNNUHY2IGBjb25uJyB3aXRoIHRoaXMuICovCisJCURFQlVHUCgiaWNtcDogY2FuJ3QgY3JlYXRlIG5ldyBjb25uIHdpdGggdHlwZSAldVxuIiwKKwkJICAgICAgIGNvbm50cmFjay0+dHVwbGVoYXNoWzBdLnR1cGxlLmRzdC51LmljbXAudHlwZSk7CisJCU5GX0NUX0RVTVBfVFVQTEUoJmNvbm50cmFjay0+dHVwbGVoYXNoWzBdLnR1cGxlKTsKKwkJcmV0dXJuIDA7CisJfQorCWF0b21pY19zZXQoJmNvbm50cmFjay0+cHJvdG8uaWNtcC5jb3VudCwgMCk7CisJcmV0dXJuIDE7Cit9CisKK2V4dGVybiBpbnQKK25mX2N0X2lwdjZfc2tpcF9leHRoZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHN0YXJ0LCB1OCAqbmV4dGhkcnAsIGludCBsZW4pOworZXh0ZXJuIHN0cnVjdCBuZl9jb25udHJhY2tfbDNwcm90byBuZl9jb25udHJhY2tfbDNwcm90b19pcHY2Oworc3RhdGljIGludAoraWNtcHY2X2Vycm9yX21lc3NhZ2Uoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJICAgICB1bnNpZ25lZCBpbnQgaWNtcDZvZmYsCisJCSAgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyAqY3RpbmZvLAorCQkgICAgIHVuc2lnbmVkIGludCBob29rbnVtKQoreworCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgaW50dXBsZSwgb3JpZ3R1cGxlOworCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCAqaDsKKwlzdHJ1Y3QgaWNtcDZoZHIgX2hkciwgKmhwOworCXVuc2lnbmVkIGludCBpbmlwNm9mZjsKKwlzdHJ1Y3QgbmZfY29ubnRyYWNrX3Byb3RvY29sICppbnByb3RvOworCXVfaW50OF90IGlucHJvdG9udW07CisJdW5zaWduZWQgaW50IGlucHJvdG9mZjsKKworCU5GX0NUX0FTU0VSVChza2ItPm5mY3QgPT0gTlVMTCk7CisKKwlocCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIGljbXA2b2ZmLCBzaXplb2YoX2hkciksICZfaGRyKTsKKwlpZiAoaHAgPT0gTlVMTCkgeworCQlERUJVR1AoImljbXB2Nl9lcnJvcjogQ2FuJ3QgZ2V0IElDTVB2NiBoZHIuXG4iKTsKKwkJcmV0dXJuIC1ORl9BQ0NFUFQ7CisJfQorCisJaW5pcDZvZmYgPSBpY21wNm9mZiArIHNpemVvZihfaGRyKTsKKwlpZiAoc2tiX2NvcHlfYml0cyhza2IsIGluaXA2b2ZmK29mZnNldG9mKHN0cnVjdCBpcHY2aGRyLCBuZXh0aGRyKSwKKwkJCSAgJmlucHJvdG9udW0sIHNpemVvZihpbnByb3RvbnVtKSkgIT0gMCkgeworCQlERUJVR1AoImljbXB2Nl9lcnJvcjogQ2FuJ3QgZ2V0IG5leHRoZHIgaW4gaW5uZXIgSVB2NiBoZWFkZXIuXG4iKTsKKwkJcmV0dXJuIC1ORl9BQ0NFUFQ7CisJfQorCWlucHJvdG9mZiA9IG5mX2N0X2lwdjZfc2tpcF9leHRoZHIoc2tiLAorCQkJCQkgICBpbmlwNm9mZiArIHNpemVvZihzdHJ1Y3QgaXB2NmhkciksCisJCQkJCSAgICZpbnByb3RvbnVtLAorCQkJCQkgICBza2ItPmxlbiAtIGluaXA2b2ZmCisJCQkJCQkgICAgLSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKTsKKworCWlmICgoaW5wcm90b2ZmIDwgMCkgfHwgKGlucHJvdG9mZiA+IHNrYi0+bGVuKSB8fAorCSAgICAoaW5wcm90b251bSA9PSBORVhUSERSX0ZSQUdNRU5UKSkgeworCQlERUJVR1AoImljbXB2Nl9lcnJvcjogQ2FuJ3QgZ2V0IHByb3RvY29sIGhlYWRlciBpbiBJQ01QdjYgcGF5bG9hZC5cbiIpOworCQlyZXR1cm4gLU5GX0FDQ0VQVDsKKwl9CisKKwlpbnByb3RvID0gbmZfY3RfZmluZF9wcm90byhQRl9JTkVUNiwgaW5wcm90b251bSk7CisKKwkvKiBBcmUgdGhleSB0YWxraW5nIGFib3V0IG9uZSBvZiBvdXIgY29ubmVjdGlvbnM/ICovCisJaWYgKCFuZl9jdF9nZXRfdHVwbGUoc2tiLCBpbmlwNm9mZiwgaW5wcm90b2ZmLCBQRl9JTkVUNiwgaW5wcm90b251bSwKKwkJCSAgICAgJm9yaWd0dXBsZSwgJm5mX2Nvbm50cmFja19sM3Byb3RvX2lwdjYsIGlucHJvdG8pKSB7CisJCURFQlVHUCgiaWNtcHY2X2Vycm9yOiBDYW4ndCBnZXQgdHVwbGVcbiIpOworCQlyZXR1cm4gLU5GX0FDQ0VQVDsKKwl9CisKKwkvKiBPcmRpbmFyaWx5LCB3ZSdkIGV4cGVjdCB0aGUgaW52ZXJ0ZWQgdHVwbGVwcm90bywgYnV0IGl0J3MKKwkgICBiZWVuIHByZXNlcnZlZCBpbnNpZGUgdGhlIElDTVAuICovCisJaWYgKCFuZl9jdF9pbnZlcnRfdHVwbGUoJmludHVwbGUsICZvcmlndHVwbGUsCisJCQkJJm5mX2Nvbm50cmFja19sM3Byb3RvX2lwdjYsIGlucHJvdG8pKSB7CisJCURFQlVHUCgiaWNtcHY2X2Vycm9yOiBDYW4ndCBpbnZlcnQgdHVwbGVcbiIpOworCQlyZXR1cm4gLU5GX0FDQ0VQVDsKKwl9CisKKwkqY3RpbmZvID0gSVBfQ1RfUkVMQVRFRDsKKworCWggPSBuZl9jb25udHJhY2tfZmluZF9nZXQoJmludHVwbGUsIE5VTEwpOworCWlmICghaCkgeworCQlERUJVR1AoImljbXB2Nl9lcnJvcjogbm8gbWF0Y2hcbiIpOworCQlyZXR1cm4gLU5GX0FDQ0VQVDsKKwl9IGVsc2UgeworCQlpZiAoTkZfQ1RfRElSRUNUSU9OKGgpID09IElQX0NUX0RJUl9SRVBMWSkKKwkJCSpjdGluZm8gKz0gSVBfQ1RfSVNfUkVQTFk7CisJfQorCisJLyogVXBkYXRlIHNrYiB0byByZWZlciB0byB0aGlzIGNvbm5lY3Rpb24gKi8KKwlza2ItPm5mY3QgPSAmbmZfY3RfdHVwbGVoYXNoX3RvX2N0cmFjayhoKS0+Y3RfZ2VuZXJhbDsKKwlza2ItPm5mY3RpbmZvID0gKmN0aW5mbzsKKwlyZXR1cm4gLU5GX0FDQ0VQVDsKK30KKworc3RhdGljIGludAoraWNtcHY2X2Vycm9yKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBkYXRhb2ZmLAorCSAgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyAqY3RpbmZvLCBpbnQgcGYsIHVuc2lnbmVkIGludCBob29rbnVtKQoreworCXN0cnVjdCBpY21wNmhkciBfaWgsICppY21wNmg7CisKKwlpY21wNmggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBkYXRhb2ZmLCBzaXplb2YoX2loKSwgJl9paCk7CisJaWYgKGljbXA2aCA9PSBOVUxMKSB7CisJCWlmIChMT0dfSU5WQUxJRChJUFBST1RPX0lDTVBWNikpCisJCW5mX2xvZ19wYWNrZXQoUEZfSU5FVDYsIDAsIHNrYiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJCSAgICAgICJuZl9jdF9pY21wdjY6IHNob3J0IHBhY2tldCAiKTsKKwkJcmV0dXJuIC1ORl9BQ0NFUFQ7CisJfQorCisJaWYgKGhvb2tudW0gIT0gTkZfSVA2X1BSRV9ST1VUSU5HKQorCQlnb3RvIHNraXBwZWQ7CisKKwkvKiBJZ25vcmUgaXQgaWYgdGhlIGNoZWNrc3VtJ3MgYm9ndXMuICovCisJaWYgKGNzdW1faXB2Nl9tYWdpYygmc2tiLT5uaC5pcHY2aC0+c2FkZHIsICZza2ItPm5oLmlwdjZoLT5kYWRkciwKKwkJCSAgICBza2ItPmxlbiAtIGRhdGFvZmYsIElQUFJPVE9fSUNNUFY2LAorCQkJICAgIHNrYl9jaGVja3N1bShza2IsIGRhdGFvZmYsCisJCQkJCSBza2ItPmxlbiAtIGRhdGFvZmYsIDApKSkgeworCQluZl9sb2dfcGFja2V0KFBGX0lORVQ2LCAwLCBza2IsIE5VTEwsIE5VTEwsIE5VTEwsCisJCQkgICAgICAibmZfY3RfaWNtcHY2OiBJQ01QdjYgY2hlY2tzdW0gZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1ORl9BQ0NFUFQ7CisJfQorCitza2lwcGVkOgorCisJLyogaXMgbm90IGVycm9yIG1lc3NhZ2UgPyAqLworCWlmIChpY21wNmgtPmljbXA2X3R5cGUgPj0gMTI4KQorCQlyZXR1cm4gTkZfQUNDRVBUOworCisJcmV0dXJuIGljbXB2Nl9lcnJvcl9tZXNzYWdlKHNrYiwgZGF0YW9mZiwgY3RpbmZvLCBob29rbnVtKTsKK30KKworc3RydWN0IG5mX2Nvbm50cmFja19wcm90b2NvbCBuZl9jb25udHJhY2tfcHJvdG9jb2xfaWNtcHY2ID0KK3sKKwkubDNwcm90bwkJPSBQRl9JTkVUNiwKKwkucHJvdG8JCQk9IElQUFJPVE9fSUNNUFY2LAorCS5uYW1lCQkJPSAiaWNtcHY2IiwKKwkucGt0X3RvX3R1cGxlCQk9IGljbXB2Nl9wa3RfdG9fdHVwbGUsCisJLmludmVydF90dXBsZQkJPSBpY21wdjZfaW52ZXJ0X3R1cGxlLAorCS5wcmludF90dXBsZQkJPSBpY21wdjZfcHJpbnRfdHVwbGUsCisJLnByaW50X2Nvbm50cmFjawk9IGljbXB2Nl9wcmludF9jb25udHJhY2ssCisJLnBhY2tldAkJCT0gaWNtcHY2X3BhY2tldCwKKwkubmV3CQkJPSBpY21wdjZfbmV3LAorCS5lcnJvcgkJCT0gaWNtcHY2X2Vycm9yLAorfTsKKworRVhQT1JUX1NZTUJPTChuZl9jb25udHJhY2tfcHJvdG9jb2xfaWNtcHY2KTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfcmVhc20uYyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfcmVhc20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjQwYjliCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19yZWFzbS5jCkBAIC0wLDAgKzEsODg1IEBACisvKgorICogSVB2NiBmcmFnbWVudCByZWFzc2VtYmx5IGZvciBjb25uZWN0aW9uIHRyYWNraW5nCisgKgorICogQ29weXJpZ2h0IChDKTIwMDQgVVNBR0kvV0lERSBQcm9qZWN0CisgKgorICogQXV0aG9yOgorICoJWWFzdXl1a2kgS296YWthaSBAVVNBR0kgPHlhc3V5dWtpLmtvemFrYWlAdG9zaGliYS5jby5qcD4KKyAqCisgKiBCYXNlZCBvbjogbmV0L2lwdjYvcmVhc3NlbWJseS5jCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPgorI2luY2x1ZGUgPGxpbnV4L3NvY2tpb3MuaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CisjaW5jbHVkZSA8bGludXgvbmV0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luNi5oPgorI2luY2x1ZGUgPGxpbnV4L2lwdjYuaD4KKyNpbmNsdWRlIDxsaW51eC9pY21wdjYuaD4KKyNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KKyNpbmNsdWRlIDxsaW51eC9qaGFzaC5oPgorCisjaW5jbHVkZSA8bmV0L3NvY2suaD4KKyNpbmNsdWRlIDxuZXQvc25tcC5oPgorCisjaW5jbHVkZSA8bmV0L2lwdjYuaD4KKyNpbmNsdWRlIDxuZXQvcHJvdG9jb2wuaD4KKyNpbmNsdWRlIDxuZXQvdHJhbnNwX3Y2Lmg+CisjaW5jbHVkZSA8bmV0L3Jhd3Y2Lmg+CisjaW5jbHVkZSA8bmV0L25kaXNjLmg+CisjaW5jbHVkZSA8bmV0L2FkZHJjb25mLmg+CisjaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjYuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworI2lmIDAKKyNkZWZpbmUgREVCVUdQIHByaW50aworI2Vsc2UKKyNkZWZpbmUgREVCVUdQKGZvcm1hdCwgYXJncy4uLikKKyNlbmRpZgorCisjZGVmaW5lIE5GX0NUX0ZSQUc2X0hJR0hfVEhSRVNIIDI2MjE0NCAvKiA9PSAyNTYqMTAyNCAqLworI2RlZmluZSBORl9DVF9GUkFHNl9MT1dfVEhSRVNIIDE5NjYwOCAgLyogPT0gMTkyKjEwMjQgKi8KKyNkZWZpbmUgTkZfQ1RfRlJBRzZfVElNRU9VVCBJUFY2X0ZSQUdfVElNRU9VVAorCitpbnQgbmZfY3RfZnJhZzZfaGlnaF90aHJlc2ggPSAyNTYqMTAyNDsKK2ludCBuZl9jdF9mcmFnNl9sb3dfdGhyZXNoID0gMTkyKjEwMjQ7CitpbnQgbmZfY3RfZnJhZzZfdGltZW91dCA9IElQVjZfRlJBR19USU1FT1VUOworCitzdHJ1Y3QgbmZfY3RfZnJhZzZfc2tiX2NiCit7CisJc3RydWN0IGluZXQ2X3NrYl9wYXJtCWg7CisJaW50CQkJb2Zmc2V0OworCXN0cnVjdCBza19idWZmCQkqb3JpZzsKK307CisKKyNkZWZpbmUgTkZDVF9GUkFHNl9DQihza2IpCSgoc3RydWN0IG5mX2N0X2ZyYWc2X3NrYl9jYiopKChza2IpLT5jYikpCisKK3N0cnVjdCBuZl9jdF9mcmFnNl9xdWV1ZQoreworCXN0cnVjdCBuZl9jdF9mcmFnNl9xdWV1ZQkqbmV4dDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxydV9saXN0OwkJLyogbHJ1IGxpc3QgbWVtYmVyCSovCisKKwlfX3UzMgkJCWlkOwkJLyogZnJhZ21lbnQgaWQJCSovCisJc3RydWN0IGluNl9hZGRyCQlzYWRkcjsKKwlzdHJ1Y3QgaW42X2FkZHIJCWRhZGRyOworCisJc3BpbmxvY2tfdAkJbG9jazsKKwlhdG9taWNfdAkJcmVmY250OworCXN0cnVjdCB0aW1lcl9saXN0CXRpbWVyOwkJLyogZXhwaXJlIHRpbWVyCQkqLworCXN0cnVjdCBza19idWZmCQkqZnJhZ21lbnRzOworCWludAkJCWxlbjsKKwlpbnQJCQltZWF0OworCXN0cnVjdCB0aW1ldmFsCQlzdGFtcDsKKwl1bnNpZ25lZCBpbnQJCWNzdW07CisJX191OAkJCWxhc3RfaW47CS8qIGhhcyBmaXJzdC9sYXN0IHNlZ21lbnQgYXJyaXZlZD8gKi8KKyNkZWZpbmUgQ09NUExFVEUJCTQKKyNkZWZpbmUgRklSU1RfSU4JCTIKKyNkZWZpbmUgTEFTVF9JTgkJCTEKKwlfX3UxNgkJCW5ob2Zmc2V0OworCXN0cnVjdCBuZl9jdF9mcmFnNl9xdWV1ZQkqKnBwcmV2OworfTsKKworLyogSGFzaCB0YWJsZS4gKi8KKworI2RlZmluZSBGUkFHNlFfSEFTSFNaCTY0CisKK3N0YXRpYyBzdHJ1Y3QgbmZfY3RfZnJhZzZfcXVldWUgKm5mX2N0X2ZyYWc2X2hhc2hbRlJBRzZRX0hBU0hTWl07CitzdGF0aWMgcndsb2NrX3QgbmZfY3RfZnJhZzZfbG9jayA9IFJXX0xPQ0tfVU5MT0NLRUQ7CitzdGF0aWMgdTMyIG5mX2N0X2ZyYWc2X2hhc2hfcm5kOworc3RhdGljIExJU1RfSEVBRChuZl9jdF9mcmFnNl9scnVfbGlzdCk7CitpbnQgbmZfY3RfZnJhZzZfbnF1ZXVlcyA9IDA7CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19mcV91bmxpbmsoc3RydWN0IG5mX2N0X2ZyYWc2X3F1ZXVlICpmcSkKK3sKKwlpZiAoZnEtPm5leHQpCisJCWZxLT5uZXh0LT5wcHJldiA9IGZxLT5wcHJldjsKKwkqZnEtPnBwcmV2ID0gZnEtPm5leHQ7CisJbGlzdF9kZWwoJmZxLT5scnVfbGlzdCk7CisJbmZfY3RfZnJhZzZfbnF1ZXVlcy0tOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGZxX3VubGluayhzdHJ1Y3QgbmZfY3RfZnJhZzZfcXVldWUgKmZxKQoreworCXdyaXRlX2xvY2soJm5mX2N0X2ZyYWc2X2xvY2spOworCV9fZnFfdW5saW5rKGZxKTsKKwl3cml0ZV91bmxvY2soJm5mX2N0X2ZyYWc2X2xvY2spOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGlwNnFoYXNoZm4odTMyIGlkLCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLAorCQkJICAgICAgIHN0cnVjdCBpbjZfYWRkciAqZGFkZHIpCit7CisJdTMyIGEsIGIsIGM7CisKKwlhID0gc2FkZHItPnM2X2FkZHIzMlswXTsKKwliID0gc2FkZHItPnM2X2FkZHIzMlsxXTsKKwljID0gc2FkZHItPnM2X2FkZHIzMlsyXTsKKworCWEgKz0gSkhBU0hfR09MREVOX1JBVElPOworCWIgKz0gSkhBU0hfR09MREVOX1JBVElPOworCWMgKz0gbmZfY3RfZnJhZzZfaGFzaF9ybmQ7CisJX19qaGFzaF9taXgoYSwgYiwgYyk7CisKKwlhICs9IHNhZGRyLT5zNl9hZGRyMzJbM107CisJYiArPSBkYWRkci0+czZfYWRkcjMyWzBdOworCWMgKz0gZGFkZHItPnM2X2FkZHIzMlsxXTsKKwlfX2poYXNoX21peChhLCBiLCBjKTsKKworCWEgKz0gZGFkZHItPnM2X2FkZHIzMlsyXTsKKwliICs9IGRhZGRyLT5zNl9hZGRyMzJbM107CisJYyArPSBpZDsKKwlfX2poYXNoX21peChhLCBiLCBjKTsKKworCXJldHVybiBjICYgKEZSQUc2UV9IQVNIU1ogLSAxKTsKK30KKworc3RhdGljIHN0cnVjdCB0aW1lcl9saXN0IG5mX2N0X2ZyYWc2X3NlY3JldF90aW1lcjsKK2ludCBuZl9jdF9mcmFnNl9zZWNyZXRfaW50ZXJ2YWwgPSAxMCAqIDYwICogSFo7CisKK3N0YXRpYyB2b2lkIG5mX2N0X2ZyYWc2X3NlY3JldF9yZWJ1aWxkKHVuc2lnbmVkIGxvbmcgZHVtbXkpCit7CisJdW5zaWduZWQgbG9uZyBub3cgPSBqaWZmaWVzOworCWludCBpOworCisJd3JpdGVfbG9jaygmbmZfY3RfZnJhZzZfbG9jayk7CisJZ2V0X3JhbmRvbV9ieXRlcygmbmZfY3RfZnJhZzZfaGFzaF9ybmQsIHNpemVvZih1MzIpKTsKKwlmb3IgKGkgPSAwOyBpIDwgRlJBRzZRX0hBU0hTWjsgaSsrKSB7CisJCXN0cnVjdCBuZl9jdF9mcmFnNl9xdWV1ZSAqcTsKKworCQlxID0gbmZfY3RfZnJhZzZfaGFzaFtpXTsKKwkJd2hpbGUgKHEpIHsKKwkJCXN0cnVjdCBuZl9jdF9mcmFnNl9xdWV1ZSAqbmV4dCA9IHEtPm5leHQ7CisJCQl1bnNpZ25lZCBpbnQgaHZhbCA9IGlwNnFoYXNoZm4ocS0+aWQsCisJCQkJCQkgICAgICAgJnEtPnNhZGRyLAorCQkJCQkJICAgICAgICZxLT5kYWRkcik7CisKKwkJCWlmIChodmFsICE9IGkpIHsKKwkJCQkvKiBVbmxpbmsuICovCisJCQkJaWYgKHEtPm5leHQpCisJCQkJCXEtPm5leHQtPnBwcmV2ID0gcS0+cHByZXY7CisJCQkJKnEtPnBwcmV2ID0gcS0+bmV4dDsKKworCQkJCS8qIFJlbGluayB0byBuZXcgaGFzaCBjaGFpbi4gKi8KKwkJCQlpZiAoKHEtPm5leHQgPSBuZl9jdF9mcmFnNl9oYXNoW2h2YWxdKSAhPSBOVUxMKQorCQkJCQlxLT5uZXh0LT5wcHJldiA9ICZxLT5uZXh0OworCQkJCW5mX2N0X2ZyYWc2X2hhc2hbaHZhbF0gPSBxOworCQkJCXEtPnBwcmV2ID0gJm5mX2N0X2ZyYWc2X2hhc2hbaHZhbF07CisJCQl9CisKKwkJCXEgPSBuZXh0OworCQl9CisJfQorCXdyaXRlX3VubG9jaygmbmZfY3RfZnJhZzZfbG9jayk7CisKKwltb2RfdGltZXIoJm5mX2N0X2ZyYWc2X3NlY3JldF90aW1lciwgbm93ICsgbmZfY3RfZnJhZzZfc2VjcmV0X2ludGVydmFsKTsKK30KKworYXRvbWljX3QgbmZfY3RfZnJhZzZfbWVtID0gQVRPTUlDX0lOSVQoMCk7CisKKy8qIE1lbW9yeSBUcmFja2luZyBGdW5jdGlvbnMuICovCitzdGF0aWMgaW5saW5lIHZvaWQgZnJhZ19rZnJlZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlhdG9taWNfc3ViKHNrYi0+dHJ1ZXNpemUsICZuZl9jdF9mcmFnNl9tZW0pOworCWlmIChORkNUX0ZSQUc2X0NCKHNrYiktPm9yaWcpCisJCWtmcmVlX3NrYihORkNUX0ZSQUc2X0NCKHNrYiktPm9yaWcpOworCisJa2ZyZWVfc2tiKHNrYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmcmFnX2ZyZWVfcXVldWUoc3RydWN0IG5mX2N0X2ZyYWc2X3F1ZXVlICpmcSkKK3sKKwlhdG9taWNfc3ViKHNpemVvZihzdHJ1Y3QgbmZfY3RfZnJhZzZfcXVldWUpLCAmbmZfY3RfZnJhZzZfbWVtKTsKKwlrZnJlZShmcSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG5mX2N0X2ZyYWc2X3F1ZXVlICpmcmFnX2FsbG9jX3F1ZXVlKHZvaWQpCit7CisJc3RydWN0IG5mX2N0X2ZyYWc2X3F1ZXVlICpmcSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBuZl9jdF9mcmFnNl9xdWV1ZSksIEdGUF9BVE9NSUMpOworCisJaWYgKCFmcSkKKwkJcmV0dXJuIE5VTEw7CisJYXRvbWljX2FkZChzaXplb2Yoc3RydWN0IG5mX2N0X2ZyYWc2X3F1ZXVlKSwgJm5mX2N0X2ZyYWc2X21lbSk7CisJcmV0dXJuIGZxOworfQorCisvKiBEZXN0cnVjdGlvbiBwcmltaXRpdmVzLiAqLworCisvKiBDb21wbGV0ZSBkZXN0cnVjdGlvbiBvZiBmcS4gKi8KK3N0YXRpYyB2b2lkIG5mX2N0X2ZyYWc2X2Rlc3Ryb3koc3RydWN0IG5mX2N0X2ZyYWc2X3F1ZXVlICpmcSkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqZnA7CisKKwlCVUdfVFJBUChmcS0+bGFzdF9pbiZDT01QTEVURSk7CisJQlVHX1RSQVAoZGVsX3RpbWVyKCZmcS0+dGltZXIpID09IDApOworCisJLyogUmVsZWFzZSBhbGwgZnJhZ21lbnQgZGF0YS4gKi8KKwlmcCA9IGZxLT5mcmFnbWVudHM7CisJd2hpbGUgKGZwKSB7CisJCXN0cnVjdCBza19idWZmICp4cCA9IGZwLT5uZXh0OworCisJCWZyYWdfa2ZyZWVfc2tiKGZwKTsKKwkJZnAgPSB4cDsKKwl9CisKKwlmcmFnX2ZyZWVfcXVldWUoZnEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGZxX3B1dChzdHJ1Y3QgbmZfY3RfZnJhZzZfcXVldWUgKmZxKQoreworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZmcS0+cmVmY250KSkKKwkJbmZfY3RfZnJhZzZfZGVzdHJveShmcSk7Cit9CisKKy8qIEtpbGwgZnEgZW50cnkuIEl0IGlzIG5vdCBkZXN0cm95ZWQgaW1tZWRpYXRlbHksCisgKiBiZWNhdXNlIGNhbGxlciAoYW5kIHNvbWVvbmUgbW9yZSkgaG9sZHMgcmVmZXJlbmNlIGNvdW50LgorICovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGZxX2tpbGwoc3RydWN0IG5mX2N0X2ZyYWc2X3F1ZXVlICpmcSkKK3sKKwlpZiAoZGVsX3RpbWVyKCZmcS0+dGltZXIpKQorCQlhdG9taWNfZGVjKCZmcS0+cmVmY250KTsKKworCWlmICghKGZxLT5sYXN0X2luICYgQ09NUExFVEUpKSB7CisJCWZxX3VubGluayhmcSk7CisJCWF0b21pY19kZWMoJmZxLT5yZWZjbnQpOworCQlmcS0+bGFzdF9pbiB8PSBDT01QTEVURTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG5mX2N0X2ZyYWc2X2V2aWN0b3Iodm9pZCkKK3sKKwlzdHJ1Y3QgbmZfY3RfZnJhZzZfcXVldWUgKmZxOworCXN0cnVjdCBsaXN0X2hlYWQgKnRtcDsKKworCWZvciAoOzspIHsKKwkJaWYgKGF0b21pY19yZWFkKCZuZl9jdF9mcmFnNl9tZW0pIDw9IG5mX2N0X2ZyYWc2X2xvd190aHJlc2gpCisJCQlyZXR1cm47CisJCXJlYWRfbG9jaygmbmZfY3RfZnJhZzZfbG9jayk7CisJCWlmIChsaXN0X2VtcHR5KCZuZl9jdF9mcmFnNl9scnVfbGlzdCkpIHsKKwkJCXJlYWRfdW5sb2NrKCZuZl9jdF9mcmFnNl9sb2NrKTsKKwkJCXJldHVybjsKKwkJfQorCQl0bXAgPSBuZl9jdF9mcmFnNl9scnVfbGlzdC5uZXh0OworCQlmcSA9IGxpc3RfZW50cnkodG1wLCBzdHJ1Y3QgbmZfY3RfZnJhZzZfcXVldWUsIGxydV9saXN0KTsKKwkJYXRvbWljX2luYygmZnEtPnJlZmNudCk7CisJCXJlYWRfdW5sb2NrKCZuZl9jdF9mcmFnNl9sb2NrKTsKKworCQlzcGluX2xvY2soJmZxLT5sb2NrKTsKKwkJaWYgKCEoZnEtPmxhc3RfaW4mQ09NUExFVEUpKQorCQkJZnFfa2lsbChmcSk7CisJCXNwaW5fdW5sb2NrKCZmcS0+bG9jayk7CisKKwkJZnFfcHV0KGZxKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG5mX2N0X2ZyYWc2X2V4cGlyZSh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IG5mX2N0X2ZyYWc2X3F1ZXVlICpmcSA9IChzdHJ1Y3QgbmZfY3RfZnJhZzZfcXVldWUgKikgZGF0YTsKKworCXNwaW5fbG9jaygmZnEtPmxvY2spOworCisJaWYgKGZxLT5sYXN0X2luICYgQ09NUExFVEUpCisJCWdvdG8gb3V0OworCisJZnFfa2lsbChmcSk7CisKK291dDoKKwlzcGluX3VubG9jaygmZnEtPmxvY2spOworCWZxX3B1dChmcSk7Cit9CisKKy8qIENyZWF0aW9uIHByaW1pdGl2ZXMuICovCisKKworc3RhdGljIHN0cnVjdCBuZl9jdF9mcmFnNl9xdWV1ZSAqbmZfY3RfZnJhZzZfaW50ZXJuKHVuc2lnbmVkIGludCBoYXNoLAorCQkJCQkgIHN0cnVjdCBuZl9jdF9mcmFnNl9xdWV1ZSAqZnFfaW4pCit7CisJc3RydWN0IG5mX2N0X2ZyYWc2X3F1ZXVlICpmcTsKKworCXdyaXRlX2xvY2soJm5mX2N0X2ZyYWc2X2xvY2spOworI2lmZGVmIENPTkZJR19TTVAKKwlmb3IgKGZxID0gbmZfY3RfZnJhZzZfaGFzaFtoYXNoXTsgZnE7IGZxID0gZnEtPm5leHQpIHsKKwkJaWYgKGZxLT5pZCA9PSBmcV9pbi0+aWQgJiYgCisJCSAgICAhaXB2Nl9hZGRyX2NtcCgmZnFfaW4tPnNhZGRyLCAmZnEtPnNhZGRyKSAmJgorCQkgICAgIWlwdjZfYWRkcl9jbXAoJmZxX2luLT5kYWRkciwgJmZxLT5kYWRkcikpIHsKKwkJCWF0b21pY19pbmMoJmZxLT5yZWZjbnQpOworCQkJd3JpdGVfdW5sb2NrKCZuZl9jdF9mcmFnNl9sb2NrKTsKKwkJCWZxX2luLT5sYXN0X2luIHw9IENPTVBMRVRFOworCQkJZnFfcHV0KGZxX2luKTsKKwkJCXJldHVybiBmcTsKKwkJfQorCX0KKyNlbmRpZgorCWZxID0gZnFfaW47CisKKwlpZiAoIW1vZF90aW1lcigmZnEtPnRpbWVyLCBqaWZmaWVzICsgbmZfY3RfZnJhZzZfdGltZW91dCkpCisJCWF0b21pY19pbmMoJmZxLT5yZWZjbnQpOworCisJYXRvbWljX2luYygmZnEtPnJlZmNudCk7CisJaWYgKChmcS0+bmV4dCA9IG5mX2N0X2ZyYWc2X2hhc2hbaGFzaF0pICE9IE5VTEwpCisJCWZxLT5uZXh0LT5wcHJldiA9ICZmcS0+bmV4dDsKKwluZl9jdF9mcmFnNl9oYXNoW2hhc2hdID0gZnE7CisJZnEtPnBwcmV2ID0gJm5mX2N0X2ZyYWc2X2hhc2hbaGFzaF07CisJSU5JVF9MSVNUX0hFQUQoJmZxLT5scnVfbGlzdCk7CisJbGlzdF9hZGRfdGFpbCgmZnEtPmxydV9saXN0LCAmbmZfY3RfZnJhZzZfbHJ1X2xpc3QpOworCW5mX2N0X2ZyYWc2X25xdWV1ZXMrKzsKKwl3cml0ZV91bmxvY2soJm5mX2N0X2ZyYWc2X2xvY2spOworCXJldHVybiBmcTsKK30KKworCitzdGF0aWMgc3RydWN0IG5mX2N0X2ZyYWc2X3F1ZXVlICoKK25mX2N0X2ZyYWc2X2NyZWF0ZSh1bnNpZ25lZCBpbnQgaGFzaCwgdTMyIGlkLCBzdHJ1Y3QgaW42X2FkZHIgKnNyYywJCQkJICAgc3RydWN0IGluNl9hZGRyICpkc3QpCit7CisJc3RydWN0IG5mX2N0X2ZyYWc2X3F1ZXVlICpmcTsKKworCWlmICgoZnEgPSBmcmFnX2FsbG9jX3F1ZXVlKCkpID09IE5VTEwpIHsKKwkJREVCVUdQKCJDYW4ndCBhbGxvYyBuZXcgcXVldWVcbiIpOworCQlnb3RvIG9vbTsKKwl9CisKKwltZW1zZXQoZnEsIDAsIHNpemVvZihzdHJ1Y3QgbmZfY3RfZnJhZzZfcXVldWUpKTsKKworCWZxLT5pZCA9IGlkOworCWlwdjZfYWRkcl9jb3B5KCZmcS0+c2FkZHIsIHNyYyk7CisJaXB2Nl9hZGRyX2NvcHkoJmZxLT5kYWRkciwgZHN0KTsKKworCWluaXRfdGltZXIoJmZxLT50aW1lcik7CisJZnEtPnRpbWVyLmZ1bmN0aW9uID0gbmZfY3RfZnJhZzZfZXhwaXJlOworCWZxLT50aW1lci5kYXRhID0gKGxvbmcpIGZxOworCWZxLT5sb2NrID0gU1BJTl9MT0NLX1VOTE9DS0VEOworCWF0b21pY19zZXQoJmZxLT5yZWZjbnQsIDEpOworCisJcmV0dXJuIG5mX2N0X2ZyYWc2X2ludGVybihoYXNoLCBmcSk7CisKK29vbToKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIF9faW5saW5lX18gc3RydWN0IG5mX2N0X2ZyYWc2X3F1ZXVlICoKK2ZxX2ZpbmQodTMyIGlkLCBzdHJ1Y3QgaW42X2FkZHIgKnNyYywgc3RydWN0IGluNl9hZGRyICpkc3QpCit7CisJc3RydWN0IG5mX2N0X2ZyYWc2X3F1ZXVlICpmcTsKKwl1bnNpZ25lZCBpbnQgaGFzaCA9IGlwNnFoYXNoZm4oaWQsIHNyYywgZHN0KTsKKworCXJlYWRfbG9jaygmbmZfY3RfZnJhZzZfbG9jayk7CisJZm9yIChmcSA9IG5mX2N0X2ZyYWc2X2hhc2hbaGFzaF07IGZxOyBmcSA9IGZxLT5uZXh0KSB7CisJCWlmIChmcS0+aWQgPT0gaWQgJiYgCisJCSAgICAhaXB2Nl9hZGRyX2NtcChzcmMsICZmcS0+c2FkZHIpICYmCisJCSAgICAhaXB2Nl9hZGRyX2NtcChkc3QsICZmcS0+ZGFkZHIpKSB7CisJCQlhdG9taWNfaW5jKCZmcS0+cmVmY250KTsKKwkJCXJlYWRfdW5sb2NrKCZuZl9jdF9mcmFnNl9sb2NrKTsKKwkJCXJldHVybiBmcTsKKwkJfQorCX0KKwlyZWFkX3VubG9jaygmbmZfY3RfZnJhZzZfbG9jayk7CisKKwlyZXR1cm4gbmZfY3RfZnJhZzZfY3JlYXRlKGhhc2gsIGlkLCBzcmMsIGRzdCk7Cit9CisKKworc3RhdGljIGludCBuZl9jdF9mcmFnNl9xdWV1ZShzdHJ1Y3QgbmZfY3RfZnJhZzZfcXVldWUgKmZxLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAKKwkJCSAgICAgc3RydWN0IGZyYWdfaGRyICpmaGRyLCBpbnQgbmhvZmYpCit7CisJc3RydWN0IHNrX2J1ZmYgKnByZXYsICpuZXh0OworCWludCBvZmZzZXQsIGVuZDsKKworCWlmIChmcS0+bGFzdF9pbiAmIENPTVBMRVRFKSB7CisJCURFQlVHUCgiQWxscmVhZHkgY29tcGxldGVkXG4iKTsKKwkJZ290byBlcnI7CisJfQorCisJb2Zmc2V0ID0gbnRvaHMoZmhkci0+ZnJhZ19vZmYpICYgfjB4NzsKKwllbmQgPSBvZmZzZXQgKyAobnRvaHMoc2tiLT5uaC5pcHY2aC0+cGF5bG9hZF9sZW4pIC0KKwkJCSgodTggKikgKGZoZHIgKyAxKSAtICh1OCAqKSAoc2tiLT5uaC5pcHY2aCArIDEpKSk7CisKKwlpZiAoKHVuc2lnbmVkIGludCllbmQgPiBJUFY2X01BWFBMRU4pIHsKKwkJREVCVUdQKCJvZmZzZXQgaXMgdG9vIGxhcmdlLlxuIik7CisgCQlyZXR1cm4gLTE7CisJfQorCisgCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9IVykKKyAJCXNrYi0+Y3N1bSA9IGNzdW1fc3ViKHNrYi0+Y3N1bSwKKyAJCQkJICAgICBjc3VtX3BhcnRpYWwoc2tiLT5uaC5yYXcsCisJCQkJCQkgICh1OCopKGZoZHIgKyAxKSAtIHNrYi0+bmgucmF3LAorCQkJCQkJICAwKSk7CisKKwkvKiBJcyB0aGlzIHRoZSBmaW5hbCBmcmFnbWVudD8gKi8KKwlpZiAoIShmaGRyLT5mcmFnX29mZiAmIGh0b25zKElQNl9NRikpKSB7CisJCS8qIElmIHdlIGFscmVhZHkgaGF2ZSBzb21lIGJpdHMgYmV5b25kIGVuZAorCQkgKiBvciBoYXZlIGRpZmZlcmVudCBlbmQsIHRoZSBzZWdtZW50IGlzIGNvcnJ1cHRlZC4KKwkJICovCisJCWlmIChlbmQgPCBmcS0+bGVuIHx8CisJCSAgICAoKGZxLT5sYXN0X2luICYgTEFTVF9JTikgJiYgZW5kICE9IGZxLT5sZW4pKSB7CisJCQlERUJVR1AoImFscmVhZHkgcmVjZWl2ZWQgbGFzdCBmcmFnbWVudFxuIik7CisJCQlnb3RvIGVycjsKKwkJfQorCQlmcS0+bGFzdF9pbiB8PSBMQVNUX0lOOworCQlmcS0+bGVuID0gZW5kOworCX0gZWxzZSB7CisJCS8qIENoZWNrIGlmIHRoZSBmcmFnbWVudCBpcyByb3VuZGVkIHRvIDggYnl0ZXMuCisJCSAqIFJlcXVpcmVkIGJ5IHRoZSBSRkMuCisJCSAqLworCQlpZiAoZW5kICYgMHg3KSB7CisJCQkvKiBSRkMyNDYwIHNheXMgYWx3YXlzIHNlbmQgcGFyYW1ldGVyIHByb2JsZW0gaW4KKwkJCSAqIHRoaXMgY2FzZS4gLURhdmVNCisJCQkgKi8KKwkJCURFQlVHUCgidGhlIGVuZCBvZiB0aGlzIGZyYWdtZW50IGlzIG5vdCByb3VuZGVkIHRvIDggYnl0ZXMuXG4iKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlpZiAoZW5kID4gZnEtPmxlbikgeworCQkJLyogU29tZSBiaXRzIGJleW9uZCBlbmQgLT4gY29ycnVwdGlvbi4gKi8KKwkJCWlmIChmcS0+bGFzdF9pbiAmIExBU1RfSU4pIHsKKwkJCQlERUJVR1AoImxhc3QgcGFja2V0IGFscmVhZHkgcmVhY2hlZC5cbiIpOworCQkJCWdvdG8gZXJyOworCQkJfQorCQkJZnEtPmxlbiA9IGVuZDsKKwkJfQorCX0KKworCWlmIChlbmQgPT0gb2Zmc2V0KQorCQlnb3RvIGVycjsKKworCS8qIFBvaW50IGludG8gdGhlIElQIGRhdGFncmFtICdkYXRhJyBwYXJ0LiAqLworCWlmICghcHNrYl9wdWxsKHNrYiwgKHU4ICopIChmaGRyICsgMSkgLSBza2ItPmRhdGEpKSB7CisJCURFQlVHUCgicXVldWU6IG1lc3NhZ2UgaXMgdG9vIHNob3J0LlxuIik7CisJCWdvdG8gZXJyOworCX0KKwlpZiAoZW5kLW9mZnNldCA8IHNrYi0+bGVuKSB7CisJCWlmIChwc2tiX3RyaW0oc2tiLCBlbmQgLSBvZmZzZXQpKSB7CisJCQlERUJVR1AoIkNhbid0IHRyaW1cbiIpOworCQkJZ290byBlcnI7CisJCX0KKwkJaWYgKHNrYi0+aXBfc3VtbWVkICE9IENIRUNLU1VNX1VOTkVDRVNTQVJZKQorCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOworCX0KKworCS8qIEZpbmQgb3V0IHdoaWNoIGZyYWdtZW50cyBhcmUgaW4gZnJvbnQgYW5kIGF0IHRoZSBiYWNrIG9mIHVzCisJICogaW4gdGhlIGNoYWluIG9mIGZyYWdtZW50cyBzbyBmYXIuICBXZSBtdXN0IGtub3cgd2hlcmUgdG8gcHV0CisJICogdGhpcyBmcmFnbWVudCwgcmlnaHQ/CisJICovCisJcHJldiA9IE5VTEw7CisJZm9yIChuZXh0ID0gZnEtPmZyYWdtZW50czsgbmV4dCAhPSBOVUxMOyBuZXh0ID0gbmV4dC0+bmV4dCkgeworCQlpZiAoTkZDVF9GUkFHNl9DQihuZXh0KS0+b2Zmc2V0ID49IG9mZnNldCkKKwkJCWJyZWFrOwkvKiBiaW5nbyEgKi8KKwkJcHJldiA9IG5leHQ7CisJfQorCisJLyogV2UgZm91bmQgd2hlcmUgdG8gcHV0IHRoaXMgb25lLiAgQ2hlY2sgZm9yIG92ZXJsYXAgd2l0aAorCSAqIHByZWNlZGluZyBmcmFnbWVudCwgYW5kLCBpZiBuZWVkZWQsIGFsaWduIHRoaW5ncyBzbyB0aGF0CisJICogYW55IG92ZXJsYXBzIGFyZSBlbGltaW5hdGVkLgorCSAqLworCWlmIChwcmV2KSB7CisJCWludCBpID0gKE5GQ1RfRlJBRzZfQ0IocHJldiktPm9mZnNldCArIHByZXYtPmxlbikgLSBvZmZzZXQ7CisKKwkJaWYgKGkgPiAwKSB7CisJCQlvZmZzZXQgKz0gaTsKKwkJCWlmIChlbmQgPD0gb2Zmc2V0KSB7CisJCQkJREVCVUdQKCJvdmVybGFwXG4iKTsKKwkJCQlnb3RvIGVycjsKKwkJCX0KKwkJCWlmICghcHNrYl9wdWxsKHNrYiwgaSkpIHsKKwkJCQlERUJVR1AoIkNhbid0IHB1bGxcbiIpOworCQkJCWdvdG8gZXJyOworCQkJfQorCQkJaWYgKHNrYi0+aXBfc3VtbWVkICE9IENIRUNLU1VNX1VOTkVDRVNTQVJZKQorCQkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKKwkJfQorCX0KKworCS8qIExvb2sgZm9yIG92ZXJsYXAgd2l0aCBzdWNjZWVkaW5nIHNlZ21lbnRzLgorCSAqIElmIHdlIGNhbiBtZXJnZSBmcmFnbWVudHMsIGRvIGl0LgorCSAqLworCXdoaWxlIChuZXh0ICYmIE5GQ1RfRlJBRzZfQ0IobmV4dCktPm9mZnNldCA8IGVuZCkgeworCQkvKiBvdmVybGFwIGlzICdpJyBieXRlcyAqLworCQlpbnQgaSA9IGVuZCAtIE5GQ1RfRlJBRzZfQ0IobmV4dCktPm9mZnNldDsKKworCQlpZiAoaSA8IG5leHQtPmxlbikgeworCQkJLyogRWF0IGhlYWQgb2YgdGhlIG5leHQgb3ZlcmxhcHBlZCBmcmFnbWVudAorCQkJICogYW5kIGxlYXZlIHRoZSBsb29wLiBUaGUgbmV4dCBvbmVzIGNhbm5vdCBvdmVybGFwLgorCQkJICovCisJCQlERUJVR1AoIkVhdCBoZWFkIG9mIHRoZSBvdmVybGFwcGVkIHBhcnRzLjogJWQiLCBpKTsKKwkJCWlmICghcHNrYl9wdWxsKG5leHQsIGkpKQorCQkJCWdvdG8gZXJyOworCisJCQkvKiBuZXh0IGZyYWdtZW50ICovCisJCQlORkNUX0ZSQUc2X0NCKG5leHQpLT5vZmZzZXQgKz0gaTsKKwkJCWZxLT5tZWF0IC09IGk7CisJCQlpZiAobmV4dC0+aXBfc3VtbWVkICE9IENIRUNLU1VNX1VOTkVDRVNTQVJZKQorCQkJCW5leHQtPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CisJCQlicmVhazsKKwkJfSBlbHNlIHsKKwkJCXN0cnVjdCBza19idWZmICpmcmVlX2l0ID0gbmV4dDsKKworCQkJLyogT2xkIGZyYWdtbmV0IGlzIGNvbXBsZXRlbHkgb3ZlcnJpZGRlbiB3aXRoCisJCQkgKiBuZXcgb25lIGRyb3AgaXQuCisJCQkgKi8KKwkJCW5leHQgPSBuZXh0LT5uZXh0OworCisJCQlpZiAocHJldikKKwkJCQlwcmV2LT5uZXh0ID0gbmV4dDsKKwkJCWVsc2UKKwkJCQlmcS0+ZnJhZ21lbnRzID0gbmV4dDsKKworCQkJZnEtPm1lYXQgLT0gZnJlZV9pdC0+bGVuOworCQkJZnJhZ19rZnJlZV9za2IoZnJlZV9pdCk7CisJCX0KKwl9CisKKwlORkNUX0ZSQUc2X0NCKHNrYiktPm9mZnNldCA9IG9mZnNldDsKKworCS8qIEluc2VydCB0aGlzIGZyYWdtZW50IGluIHRoZSBjaGFpbiBvZiBmcmFnbWVudHMuICovCisJc2tiLT5uZXh0ID0gbmV4dDsKKwlpZiAocHJldikKKwkJcHJldi0+bmV4dCA9IHNrYjsKKwllbHNlCisJCWZxLT5mcmFnbWVudHMgPSBza2I7CisKKwlza2ItPmRldiA9IE5VTEw7CisJc2tiX2dldF90aW1lc3RhbXAoc2tiLCAmZnEtPnN0YW1wKTsKKwlmcS0+bWVhdCArPSBza2ItPmxlbjsKKwlhdG9taWNfYWRkKHNrYi0+dHJ1ZXNpemUsICZuZl9jdF9mcmFnNl9tZW0pOworCisJLyogVGhlIGZpcnN0IGZyYWdtZW50LgorCSAqIG5ob2Zmc2V0IGlzIG9idGFpbmVkIGZyb20gdGhlIGZpcnN0IGZyYWdtZW50LCBvZiBjb3Vyc2UuCisJICovCisJaWYgKG9mZnNldCA9PSAwKSB7CisJCWZxLT5uaG9mZnNldCA9IG5ob2ZmOworCQlmcS0+bGFzdF9pbiB8PSBGSVJTVF9JTjsKKwl9CisJd3JpdGVfbG9jaygmbmZfY3RfZnJhZzZfbG9jayk7CisJbGlzdF9tb3ZlX3RhaWwoJmZxLT5scnVfbGlzdCwgJm5mX2N0X2ZyYWc2X2xydV9saXN0KTsKKwl3cml0ZV91bmxvY2soJm5mX2N0X2ZyYWc2X2xvY2spOworCXJldHVybiAwOworCitlcnI6CisJcmV0dXJuIC0xOworfQorCisvKgorICoJQ2hlY2sgaWYgdGhpcyBwYWNrZXQgaXMgY29tcGxldGUuCisgKglSZXR1cm5zIE5VTEwgb24gZmFpbHVyZSBieSBhbnkgcmVhc29uLCBhbmQgcG9pbnRlcgorICoJdG8gY3VycmVudCBuZXh0aGRyIGZpZWxkIGluIHJlYXNzZW1ibGVkIGZyYW1lLgorICoKKyAqCUl0IGlzIGNhbGxlZCB3aXRoIGxvY2tlZCBmcSwgYW5kIGNhbGxlciBtdXN0IGNoZWNrIHRoYXQKKyAqCXF1ZXVlIGlzIGVsaWdpYmxlIGZvciByZWFzc2VtYmx5IGkuZS4gaXQgaXMgbm90IENPTVBMRVRFLAorICoJdGhlIGxhc3QgYW5kIHRoZSBmaXJzdCBmcmFtZXMgYXJyaXZlZCBhbmQgYWxsIHRoZSBiaXRzIGFyZSBoZXJlLgorICovCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKgorbmZfY3RfZnJhZzZfcmVhc20oc3RydWN0IG5mX2N0X2ZyYWc2X3F1ZXVlICpmcSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqZnAsICpvcCwgKmhlYWQgPSBmcS0+ZnJhZ21lbnRzOworCWludCAgICBwYXlsb2FkX2xlbjsKKworCWZxX2tpbGwoZnEpOworCisJQlVHX1RSQVAoaGVhZCAhPSBOVUxMKTsKKwlCVUdfVFJBUChORkNUX0ZSQUc2X0NCKGhlYWQpLT5vZmZzZXQgPT0gMCk7CisKKwkvKiBVbmZyYWdtZW50ZWQgcGFydCBpcyB0YWtlbiBmcm9tIHRoZSBmaXJzdCBzZWdtZW50LiAqLworCXBheWxvYWRfbGVuID0gKGhlYWQtPmRhdGEgLSBoZWFkLT5uaC5yYXcpIC0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSArIGZxLT5sZW4gLSBzaXplb2Yoc3RydWN0IGZyYWdfaGRyKTsKKwlpZiAocGF5bG9hZF9sZW4gPiBJUFY2X01BWFBMRU4pIHsKKwkJREVCVUdQKCJwYXlsb2FkIGxlbiBpcyB0b28gbGFyZ2UuXG4iKTsKKwkJZ290byBvdXRfb3ZlcnNpemU7CisJfQorCisJLyogSGVhZCBvZiBsaXN0IG11c3Qgbm90IGJlIGNsb25lZC4gKi8KKwlpZiAoc2tiX2Nsb25lZChoZWFkKSAmJiBwc2tiX2V4cGFuZF9oZWFkKGhlYWQsIDAsIDAsIEdGUF9BVE9NSUMpKSB7CisJCURFQlVHUCgic2tiIGlzIGNsb25lZCBidXQgY2FuJ3QgZXhwYW5kIGhlYWQiKTsKKwkJZ290byBvdXRfb29tOworCX0KKworCS8qIElmIHRoZSBmaXJzdCBmcmFnbWVudCBpcyBmcmFnbWVudGVkIGl0c2VsZiwgd2Ugc3BsaXQKKwkgKiBpdCB0byB0d28gY2h1bmtzOiB0aGUgZmlyc3Qgd2l0aCBkYXRhIGFuZCBwYWdlZCBwYXJ0CisJICogYW5kIHRoZSBzZWNvbmQsIGhvbGRpbmcgb25seSBmcmFnbWVudHMuICovCisJaWYgKHNrYl9zaGluZm8oaGVhZCktPmZyYWdfbGlzdCkgeworCQlzdHJ1Y3Qgc2tfYnVmZiAqY2xvbmU7CisJCWludCBpLCBwbGVuID0gMDsKKworCQlpZiAoKGNsb25lID0gYWxsb2Nfc2tiKDAsIEdGUF9BVE9NSUMpKSA9PSBOVUxMKSB7CisJCQlERUJVR1AoIkNhbid0IGFsbG9jIHNrYlxuIik7CisJCQlnb3RvIG91dF9vb207CisJCX0KKwkJY2xvbmUtPm5leHQgPSBoZWFkLT5uZXh0OworCQloZWFkLT5uZXh0ID0gY2xvbmU7CisJCXNrYl9zaGluZm8oY2xvbmUpLT5mcmFnX2xpc3QgPSBza2Jfc2hpbmZvKGhlYWQpLT5mcmFnX2xpc3Q7CisJCXNrYl9zaGluZm8oaGVhZCktPmZyYWdfbGlzdCA9IE5VTEw7CisJCWZvciAoaT0wOyBpPHNrYl9zaGluZm8oaGVhZCktPm5yX2ZyYWdzOyBpKyspCisJCQlwbGVuICs9IHNrYl9zaGluZm8oaGVhZCktPmZyYWdzW2ldLnNpemU7CisJCWNsb25lLT5sZW4gPSBjbG9uZS0+ZGF0YV9sZW4gPSBoZWFkLT5kYXRhX2xlbiAtIHBsZW47CisJCWhlYWQtPmRhdGFfbGVuIC09IGNsb25lLT5sZW47CisJCWhlYWQtPmxlbiAtPSBjbG9uZS0+bGVuOworCQljbG9uZS0+Y3N1bSA9IDA7CisJCWNsb25lLT5pcF9zdW1tZWQgPSBoZWFkLT5pcF9zdW1tZWQ7CisKKwkJTkZDVF9GUkFHNl9DQihjbG9uZSktPm9yaWcgPSBOVUxMOworCQlhdG9taWNfYWRkKGNsb25lLT50cnVlc2l6ZSwgJm5mX2N0X2ZyYWc2X21lbSk7CisJfQorCisJLyogV2UgaGF2ZSB0byByZW1vdmUgZnJhZ21lbnQgaGVhZGVyIGZyb20gZGF0YWdyYW0gYW5kIHRvIHJlbG9jYXRlCisJICogaGVhZGVyIGluIG9yZGVyIHRvIGNhbGN1bGF0ZSBJQ1YgY29ycmVjdGx5LiAqLworCWhlYWQtPm5oLnJhd1tmcS0+bmhvZmZzZXRdID0gaGVhZC0+aC5yYXdbMF07CisJbWVtbW92ZShoZWFkLT5oZWFkICsgc2l6ZW9mKHN0cnVjdCBmcmFnX2hkciksIGhlYWQtPmhlYWQsIAorCQkoaGVhZC0+ZGF0YSAtIGhlYWQtPmhlYWQpIC0gc2l6ZW9mKHN0cnVjdCBmcmFnX2hkcikpOworCWhlYWQtPm1hYy5yYXcgKz0gc2l6ZW9mKHN0cnVjdCBmcmFnX2hkcik7CisJaGVhZC0+bmgucmF3ICs9IHNpemVvZihzdHJ1Y3QgZnJhZ19oZHIpOworCisJc2tiX3NoaW5mbyhoZWFkKS0+ZnJhZ19saXN0ID0gaGVhZC0+bmV4dDsKKwloZWFkLT5oLnJhdyA9IGhlYWQtPmRhdGE7CisJc2tiX3B1c2goaGVhZCwgaGVhZC0+ZGF0YSAtIGhlYWQtPm5oLnJhdyk7CisJYXRvbWljX3N1YihoZWFkLT50cnVlc2l6ZSwgJm5mX2N0X2ZyYWc2X21lbSk7CisKKwlmb3IgKGZwPWhlYWQtPm5leHQ7IGZwOyBmcCA9IGZwLT5uZXh0KSB7CisJCWhlYWQtPmRhdGFfbGVuICs9IGZwLT5sZW47CisJCWhlYWQtPmxlbiArPSBmcC0+bGVuOworCQlpZiAoaGVhZC0+aXBfc3VtbWVkICE9IGZwLT5pcF9zdW1tZWQpCisJCQloZWFkLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOworCQllbHNlIGlmIChoZWFkLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fSFcpCisJCQloZWFkLT5jc3VtID0gY3N1bV9hZGQoaGVhZC0+Y3N1bSwgZnAtPmNzdW0pOworCQloZWFkLT50cnVlc2l6ZSArPSBmcC0+dHJ1ZXNpemU7CisJCWF0b21pY19zdWIoZnAtPnRydWVzaXplLCAmbmZfY3RfZnJhZzZfbWVtKTsKKwl9CisKKwloZWFkLT5uZXh0ID0gTlVMTDsKKwloZWFkLT5kZXYgPSBkZXY7CisJc2tiX3NldF90aW1lc3RhbXAoaGVhZCwgJmZxLT5zdGFtcCk7CisJaGVhZC0+bmguaXB2NmgtPnBheWxvYWRfbGVuID0gaHRvbnMocGF5bG9hZF9sZW4pOworCisJLyogWWVzLCBhbmQgZm9sZCByZWR1bmRhbnQgY2hlY2tzdW0gYmFjay4gOCkgKi8KKwlpZiAoaGVhZC0+aXBfc3VtbWVkID09IENIRUNLU1VNX0hXKQorCQloZWFkLT5jc3VtID0gY3N1bV9wYXJ0aWFsKGhlYWQtPm5oLnJhdywgaGVhZC0+aC5yYXctaGVhZC0+bmgucmF3LCBoZWFkLT5jc3VtKTsKKworCWZxLT5mcmFnbWVudHMgPSBOVUxMOworCisJLyogYWxsIG9yaWdpbmFsIHNrYnMgYXJlIGxpbmtlZCBpbnRvIHRoZSBORkNUX0ZSQUc2X0NCKGhlYWQpLm9yaWcgKi8KKwlmcCA9IHNrYl9zaGluZm8oaGVhZCktPmZyYWdfbGlzdDsKKwlpZiAoTkZDVF9GUkFHNl9DQihmcCktPm9yaWcgPT0gTlVMTCkKKwkJLyogYXQgYWJvdmUgY29kZSwgaGVhZCBza2IgaXMgZGl2aWRlZCBpbnRvIHR3byBza2JzLiAqLworCQlmcCA9IGZwLT5uZXh0OworCisJb3AgPSBORkNUX0ZSQUc2X0NCKGhlYWQpLT5vcmlnOworCWZvciAoOyBmcDsgZnAgPSBmcC0+bmV4dCkgeworCQlzdHJ1Y3Qgc2tfYnVmZiAqb3JpZyA9IE5GQ1RfRlJBRzZfQ0IoZnApLT5vcmlnOworCisJCW9wLT5uZXh0ID0gb3JpZzsKKwkJb3AgPSBvcmlnOworCQlORkNUX0ZSQUc2X0NCKGZwKS0+b3JpZyA9IE5VTEw7CisJfQorCisJcmV0dXJuIGhlYWQ7CisKK291dF9vdmVyc2l6ZToKKwlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQlwcmludGsoS0VSTl9ERUJVRyAibmZfY3RfZnJhZzZfcmVhc206IHBheWxvYWQgbGVuID0gJWRcbiIsIHBheWxvYWRfbGVuKTsKKwlnb3RvIG91dF9mYWlsOworb3V0X29vbToKKwlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQlwcmludGsoS0VSTl9ERUJVRyAibmZfY3RfZnJhZzZfcmVhc206IG5vIG1lbW9yeSBmb3IgcmVhc3NlbWJseVxuIik7CitvdXRfZmFpbDoKKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIGZpbmQgdGhlIGhlYWRlciBqdXN0IGJlZm9yZSBGcmFnbWVudCBIZWFkZXIuCisgKgorICogaWYgc3VjY2VzcyByZXR1cm4gMCBhbmQgc2V0IC4uLgorICogKCpwcmV2aGRycCk6IHRoZSB2YWx1ZSBvZiAiTmV4dCBIZWFkZXIgRmllbGQiIGluIHRoZSBoZWFkZXIKKyAqCQlqdXN0IGJlZm9yZSBGcmFnbWVudCBIZWFkZXIuCisgKiAoKnByZXZob2ZmKTogdGhlIG9mZnNldCBvZiAiTmV4dCBIZWFkZXIgRmllbGQiIGluIHRoZSBoZWFkZXIKKyAqCQlqdXN0IGJlZm9yZSBGcmFnbWVudCBIZWFkZXIuCisgKiAoKmZob2ZmKSAgIDogdGhlIG9mZnNldCBvZiBGcmFnbWVudCBIZWFkZXIuCisgKgorICogQmFzZWQgb24gaXB2Nl9za2lwX2hkcigpIGluIG5ldC9pcHY2L2V4dGhkci5jCisgKgorICovCitzdGF0aWMgaW50CitmaW5kX3ByZXZfZmhkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCAqcHJldmhkcnAsIGludCAqcHJldmhvZmYsIGludCAqZmhvZmYpCit7CisgICAgICAgIHU4IG5leHRoZHIgPSBza2ItPm5oLmlwdjZoLT5uZXh0aGRyOworCXU4IHByZXZfbmhvZmYgPSAodTggKikmc2tiLT5uaC5pcHY2aC0+bmV4dGhkciAtIHNrYi0+ZGF0YTsKKwlpbnQgc3RhcnQgPSAodTggKikoc2tiLT5uaC5pcHY2aCsxKSAtIHNrYi0+ZGF0YTsKKwlpbnQgbGVuID0gc2tiLT5sZW4gLSBzdGFydDsKKwl1OCBwcmV2aGRyID0gTkVYVEhEUl9JUFY2OworCisgICAgICAgIHdoaWxlIChuZXh0aGRyICE9IE5FWFRIRFJfRlJBR01FTlQpIHsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgaXB2Nl9vcHRfaGRyIGhkcjsKKyAgICAgICAgICAgICAgICBpbnQgaGRybGVuOworCisJCWlmICghaXB2Nl9leHRfaGRyKG5leHRoZHIpKSB7CisJCQlyZXR1cm4gLTE7CisJCX0KKyAgICAgICAgICAgICAgICBpZiAobGVuIDwgKGludClzaXplb2Yoc3RydWN0IGlwdjZfb3B0X2hkcikpIHsKKwkJCURFQlVHUCgidG9vIHNob3J0XG4iKTsKKwkJCXJldHVybiAtMTsKKwkJfQorICAgICAgICAgICAgICAgIGlmIChuZXh0aGRyID09IE5FWFRIRFJfTk9ORSkgeworCQkJREVCVUdQKCJuZXh0IGhlYWRlciBpcyBub25lXG4iKTsKKwkJCXJldHVybiAtMTsKKwkJfQorICAgICAgICAgICAgICAgIGlmIChza2JfY29weV9iaXRzKHNrYiwgc3RhcnQsICZoZHIsIHNpemVvZihoZHIpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIEJVRygpOworICAgICAgICAgICAgICAgIGlmIChuZXh0aGRyID09IE5FWFRIRFJfQVVUSCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGhkcmxlbiA9IChoZHIuaGRybGVuKzIpPDwyOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGhkcmxlbiA9IGlwdjZfb3B0bGVuKCZoZHIpOworCisJCXByZXZoZHIgPSBuZXh0aGRyOworCQlwcmV2X25ob2ZmID0gc3RhcnQ7CisKKyAgICAgICAgICAgICAgICBuZXh0aGRyID0gaGRyLm5leHRoZHI7CisgICAgICAgICAgICAgICAgbGVuIC09IGhkcmxlbjsKKyAgICAgICAgICAgICAgICBzdGFydCArPSBoZHJsZW47CisgICAgICAgIH0KKworCWlmIChsZW4gPCAwKQorCQlyZXR1cm4gLTE7CisKKwkqcHJldmhkcnAgPSBwcmV2aGRyOworCSpwcmV2aG9mZiA9IHByZXZfbmhvZmY7CisJKmZob2ZmID0gc3RhcnQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHNrX2J1ZmYgKm5mX2N0X2ZyYWc2X2dhdGhlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBza19idWZmICpjbG9uZTsgCisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNrYi0+ZGV2OworCXN0cnVjdCBmcmFnX2hkciAqZmhkcjsKKwlzdHJ1Y3QgbmZfY3RfZnJhZzZfcXVldWUgKmZxOworCXN0cnVjdCBpcHY2aGRyICpoZHI7CisJaW50IGZob2ZmLCBuaG9mZjsKKwl1OCBwcmV2aGRyOworCXN0cnVjdCBza19idWZmICpyZXRfc2tiID0gTlVMTDsKKworCS8qIEp1bWJvIHBheWxvYWQgaW5oaWJpdHMgZnJhZy4gaGVhZGVyICovCisJaWYgKHNrYi0+bmguaXB2NmgtPnBheWxvYWRfbGVuID09IDApIHsKKwkJREVCVUdQKCJwYXlsb2FkIGxlbiA9IDBcbiIpOworCQlyZXR1cm4gc2tiOworCX0KKworCWlmIChmaW5kX3ByZXZfZmhkcihza2IsICZwcmV2aGRyLCAmbmhvZmYsICZmaG9mZikgPCAwKQorCQlyZXR1cm4gc2tiOworCisJY2xvbmUgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTsKKwlpZiAoY2xvbmUgPT0gTlVMTCkgeworCQlERUJVR1AoIkNhbid0IGNsb25lIHNrYlxuIik7CisJCXJldHVybiBza2I7CisJfQorCisJTkZDVF9GUkFHNl9DQihjbG9uZSktPm9yaWcgPSBza2I7CisKKwlpZiAoIXBza2JfbWF5X3B1bGwoY2xvbmUsIGZob2ZmICsgc2l6ZW9mKCpmaGRyKSkpIHsKKwkJREVCVUdQKCJtZXNzYWdlIGlzIHRvbyBzaG9ydC5cbiIpOworCQlnb3RvIHJldF9vcmlnOworCX0KKworCWNsb25lLT5oLnJhdyA9IGNsb25lLT5kYXRhICsgZmhvZmY7CisJaGRyID0gY2xvbmUtPm5oLmlwdjZoOworCWZoZHIgPSAoc3RydWN0IGZyYWdfaGRyICopY2xvbmUtPmgucmF3OworCisJaWYgKCEoZmhkci0+ZnJhZ19vZmYgJiBodG9ucygweEZGRjkpKSkgeworCQlERUJVR1AoIkludmFsaWQgZnJhZ21lbnQgb2Zmc2V0XG4iKTsKKwkJLyogSXQgaXMgbm90IGEgZnJhZ21lbnRlZCBmcmFtZSAqLworCQlnb3RvIHJldF9vcmlnOworCX0KKworCWlmIChhdG9taWNfcmVhZCgmbmZfY3RfZnJhZzZfbWVtKSA+IG5mX2N0X2ZyYWc2X2hpZ2hfdGhyZXNoKQorCQluZl9jdF9mcmFnNl9ldmljdG9yKCk7CisKKwlmcSA9IGZxX2ZpbmQoZmhkci0+aWRlbnRpZmljYXRpb24sICZoZHItPnNhZGRyLCAmaGRyLT5kYWRkcik7CisJaWYgKGZxID09IE5VTEwpIHsKKwkJREVCVUdQKCJDYW4ndCBmaW5kIGFuZCBjYW4ndCBjcmVhdGUgbmV3IHF1ZXVlXG4iKTsKKwkJZ290byByZXRfb3JpZzsKKwl9CisKKwlzcGluX2xvY2soJmZxLT5sb2NrKTsKKworCWlmIChuZl9jdF9mcmFnNl9xdWV1ZShmcSwgY2xvbmUsIGZoZHIsIG5ob2ZmKSA8IDApIHsKKwkJc3Bpbl91bmxvY2soJmZxLT5sb2NrKTsKKwkJREVCVUdQKCJDYW4ndCBpbnNlcnQgc2tiIHRvIHF1ZXVlXG4iKTsKKwkJZnFfcHV0KGZxKTsKKwkJZ290byByZXRfb3JpZzsKKwl9CisKKwlpZiAoZnEtPmxhc3RfaW4gPT0gKEZJUlNUX0lOfExBU1RfSU4pICYmIGZxLT5tZWF0ID09IGZxLT5sZW4pIHsKKwkJcmV0X3NrYiA9IG5mX2N0X2ZyYWc2X3JlYXNtKGZxLCBkZXYpOworCQlpZiAocmV0X3NrYiA9PSBOVUxMKQorCQkJREVCVUdQKCJDYW4ndCByZWFzc2VtYmxlIGZyYWdtZW50ZWQgcGFja2V0c1xuIik7CisJfQorCXNwaW5fdW5sb2NrKCZmcS0+bG9jayk7CisKKwlmcV9wdXQoZnEpOworCXJldHVybiByZXRfc2tiOworCityZXRfb3JpZzoKKwlrZnJlZV9za2IoY2xvbmUpOworCXJldHVybiBza2I7Cit9CisKK3ZvaWQgbmZfY3RfZnJhZzZfb3V0cHV0KHVuc2lnbmVkIGludCBob29rbnVtLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJc3RydWN0IG5ldF9kZXZpY2UgKmluLCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAorCQkJaW50ICgqb2tmbikoc3RydWN0IHNrX2J1ZmYgKikpCit7CisJc3RydWN0IHNrX2J1ZmYgKnMsICpzMjsKKworCWZvciAocyA9IE5GQ1RfRlJBRzZfQ0Ioc2tiKS0+b3JpZzsgczspIHsKKwkJbmZfY29ubnRyYWNrX3B1dF9yZWFzbShzLT5uZmN0X3JlYXNtKTsKKwkJbmZfY29ubnRyYWNrX2dldF9yZWFzbShza2IpOworCQlzLT5uZmN0X3JlYXNtID0gc2tiOworCisJCXMyID0gcy0+bmV4dDsKKwkJTkZfSE9PS19USFJFU0goUEZfSU5FVDYsIGhvb2tudW0sIHMsIGluLCBvdXQsIG9rZm4sCisJCQkgICAgICAgTkZfSVA2X1BSSV9DT05OVFJBQ0tfREVGUkFHICsgMSk7CisJCXMgPSBzMjsKKwl9CisJbmZfY29ubnRyYWNrX3B1dF9yZWFzbShza2IpOworfQorCitpbnQgbmZfY3RfZnJhZzZfa2ZyZWVfZnJhZ3Moc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqcywgKnMyOworCisJZm9yIChzID0gTkZDVF9GUkFHNl9DQihza2IpLT5vcmlnOyBzOyBzID0gczIpIHsKKworCQlzMiA9IHMtPm5leHQ7CisJCWtmcmVlX3NrYihzKTsKKwl9CisKKwlrZnJlZV9za2Ioc2tiKTsKKworCXJldHVybiAwOworfQorCitpbnQgbmZfY3RfZnJhZzZfaW5pdCh2b2lkKQoreworCW5mX2N0X2ZyYWc2X2hhc2hfcm5kID0gKHUzMikgKChudW1fcGh5c3BhZ2VzIF4gKG51bV9waHlzcGFnZXM+PjcpKSBeCisJCQkJICAgKGppZmZpZXMgXiAoamlmZmllcyA+PiA2KSkpOworCisJaW5pdF90aW1lcigmbmZfY3RfZnJhZzZfc2VjcmV0X3RpbWVyKTsKKwluZl9jdF9mcmFnNl9zZWNyZXRfdGltZXIuZnVuY3Rpb24gPSBuZl9jdF9mcmFnNl9zZWNyZXRfcmVidWlsZDsKKwluZl9jdF9mcmFnNl9zZWNyZXRfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMKKwkJCQkJICAgKyBuZl9jdF9mcmFnNl9zZWNyZXRfaW50ZXJ2YWw7CisJYWRkX3RpbWVyKCZuZl9jdF9mcmFnNl9zZWNyZXRfdGltZXIpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgbmZfY3RfZnJhZzZfY2xlYW51cCh2b2lkKQoreworCWRlbF90aW1lcigmbmZfY3RfZnJhZzZfc2VjcmV0X3RpbWVyKTsKKwluZl9jdF9mcmFnNl9ldmljdG9yKCk7Cit9CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yYXcuYyBiL25ldC9pcHY2L3Jhdy5jCmluZGV4IGExMjY1YTMuLjhlOTYyOGYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3Jhdy5jCisrKyBiL25ldC9pcHY2L3Jhdy5jCkBAIC0xNzQsOCArMTc0LDEwIEBACiAJCQlzdHJ1Y3Qgc2tfYnVmZiAqY2xvbmUgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTsKIAogCQkJLyogTm90IHJlbGVhc2luZyBoYXNoIHRhYmxlISAqLwotCQkJaWYgKGNsb25lKQorCQkJaWYgKGNsb25lKSB7CisJCQkJbmZfcmVzZXQoY2xvbmUpOwogCQkJCXJhd3Y2X3JjdihzaywgY2xvbmUpOworCQkJfQogCQl9CiAJCXNrID0gX19yYXdfdjZfbG9va3VwKHNrX25leHQoc2spLCBuZXh0aGRyLCBkYWRkciwgc2FkZHIsCiAJCQkJICAgICBJUDZDQihza2IpLT5paWYpOwpAQCAtMjk2LDEzICsyOTgsMTAgQEAKIHN0YXRpYyBpbmxpbmUgaW50IHJhd3Y2X3Jjdl9za2Ioc3RydWN0IHNvY2sgKiBzaywgc3RydWN0IHNrX2J1ZmYgKiBza2IpCiB7CiAJaWYgKChyYXc2X3NrKHNrKS0+Y2hlY2tzdW0gfHwgc2stPnNrX2ZpbHRlcikgJiYgCi0JICAgIHNrYi0+aXBfc3VtbWVkICE9IENIRUNLU1VNX1VOTkVDRVNTQVJZKSB7Ci0JCWlmICgodW5zaWduZWQgc2hvcnQpY3N1bV9mb2xkKHNrYl9jaGVja3N1bShza2IsIDAsIHNrYi0+bGVuLCBza2ItPmNzdW0pKSkgewotCQkJLyogRklYTUU6IGluY3JlbWVudCBhIHJhdzYgZHJvcHMgY291bnRlciBoZXJlICovCi0JCQlrZnJlZV9za2Ioc2tiKTsKLQkJCXJldHVybiAwOwotCQl9Ci0JCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CisJICAgIHNrYl9jaGVja3N1bV9jb21wbGV0ZShza2IpKSB7CisJCS8qIEZJWE1FOiBpbmNyZW1lbnQgYSByYXc2IGRyb3BzIGNvdW50ZXIgaGVyZSAqLworCQlrZnJlZV9za2Ioc2tiKTsKKwkJcmV0dXJuIDA7CiAJfQogCiAJLyogQ2hhcmdlIGl0IHRvIHRoZSBzb2NrZXQuICovCkBAIC0zMzUsMzIgKzMzNCwyNSBAQAogCWlmICghcnAtPmNoZWNrc3VtKQogCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwogCi0JaWYgKHNrYi0+aXBfc3VtbWVkICE9IENIRUNLU1VNX1VOTkVDRVNTQVJZKSB7Ci0JCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9IVykgewotCQkJc2tiX3Bvc3RwdWxsX3Jjc3VtKHNrYiwgc2tiLT5uaC5yYXcsCi0JCQkgICAgICAgICAgICAgICAgICAgc2tiLT5oLnJhdyAtIHNrYi0+bmgucmF3KTsKKwlpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fSFcpIHsKKwkJc2tiX3Bvc3RwdWxsX3Jjc3VtKHNrYiwgc2tiLT5uaC5yYXcsCisJCSAgICAgICAgICAgICAgICAgICBza2ItPmgucmF3IC0gc2tiLT5uaC5yYXcpOworCQlpZiAoIWNzdW1faXB2Nl9tYWdpYygmc2tiLT5uaC5pcHY2aC0+c2FkZHIsCisJCQkJICAgICAmc2tiLT5uaC5pcHY2aC0+ZGFkZHIsCisJCQkJICAgICBza2ItPmxlbiwgaW5ldC0+bnVtLCBza2ItPmNzdW0pKQogCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKLQkJCWlmIChjc3VtX2lwdjZfbWFnaWMoJnNrYi0+bmguaXB2NmgtPnNhZGRyLAotCQkJCQkgICAgJnNrYi0+bmguaXB2NmgtPmRhZGRyLAotCQkJCQkgICAgc2tiLT5sZW4sIGluZXQtPm51bSwgc2tiLT5jc3VtKSkgewotCQkJCUxJTUlUX05FVERFQlVHKEtFUk5fREVCVUcgInJhdyB2NiBodyBjc3VtIGZhaWx1cmUuXG4iKTsKLQkJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7Ci0JCQl9Ci0JCX0KLQkJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX05PTkUpCi0JCQlza2ItPmNzdW0gPSB+Y3N1bV9pcHY2X21hZ2ljKCZza2ItPm5oLmlwdjZoLT5zYWRkciwKLQkJCQkJCSAgICAgJnNrYi0+bmguaXB2NmgtPmRhZGRyLAotCQkJCQkJICAgICBza2ItPmxlbiwgaW5ldC0+bnVtLCAwKTsKIAl9CisJaWYgKHNrYi0+aXBfc3VtbWVkICE9IENIRUNLU1VNX1VOTkVDRVNTQVJZKQorCQlza2ItPmNzdW0gPSB+Y3N1bV9pcHY2X21hZ2ljKCZza2ItPm5oLmlwdjZoLT5zYWRkciwKKwkJCQkJICAgICAmc2tiLT5uaC5pcHY2aC0+ZGFkZHIsCisJCQkJCSAgICAgc2tiLT5sZW4sIGluZXQtPm51bSwgMCk7CiAKIAlpZiAoaW5ldC0+aGRyaW5jbCkgewotCQlpZiAoc2tiLT5pcF9zdW1tZWQgIT0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlkgJiYKLQkJICAgICh1bnNpZ25lZCBzaG9ydCljc3VtX2ZvbGQoc2tiX2NoZWNrc3VtKHNrYiwgMCwgc2tiLT5sZW4sIHNrYi0+Y3N1bSkpKSB7CisJCWlmIChza2JfY2hlY2tzdW1fY29tcGxldGUoc2tiKSkgewogCQkJLyogRklYTUU6IGluY3JlbWVudCBhIHJhdzYgZHJvcHMgY291bnRlciBoZXJlICovCiAJCQlrZnJlZV9za2Ioc2tiKTsKIAkJCXJldHVybiAwOwogCQl9Ci0JCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CiAJfQogCiAJcmF3djZfcmN2X3NrYihzaywgc2tiKTsKQEAgLTQwNSw3ICszOTcsNyBAQAogCWlmIChza2ItPmlwX3N1bW1lZD09Q0hFQ0tTVU1fVU5ORUNFU1NBUlkpIHsKIAkJZXJyID0gc2tiX2NvcHlfZGF0YWdyYW1faW92ZWMoc2tiLCAwLCBtc2ctPm1zZ19pb3YsIGNvcGllZCk7CiAJfSBlbHNlIGlmIChtc2ctPm1zZ19mbGFncyZNU0dfVFJVTkMpIHsKLQkJaWYgKCh1bnNpZ25lZCBzaG9ydCljc3VtX2ZvbGQoc2tiX2NoZWNrc3VtKHNrYiwgMCwgc2tiLT5sZW4sIHNrYi0+Y3N1bSkpKQorCQlpZiAoX19za2JfY2hlY2tzdW1fY29tcGxldGUoc2tiKSkKIAkJCWdvdG8gY3N1bV9jb3B5X2VycjsKIAkJZXJyID0gc2tiX2NvcHlfZGF0YWdyYW1faW92ZWMoc2tiLCAwLCBtc2ctPm1zZ19pb3YsIGNvcGllZCk7CiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3JvdXRlLmMgYi9uZXQvaXB2Ni9yb3V0ZS5jCmluZGV4IDIyN2U5OWUuLmY3ZjQyYzMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3JvdXRlLmMKKysrIGIvbmV0L2lwdjYvcm91dGUuYwpAQCAtMTcxMCw3ICsxNzEwLDcgQEAKIHN0YXRpYyBpbnQgZmliNl9kdW1wX2RvbmUoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQogewogCWZpYjZfZHVtcF9lbmQoY2IpOwotCXJldHVybiBjYi0+ZG9uZShjYik7CisJcmV0dXJuIGNiLT5kb25lID8gY2ItPmRvbmUoY2IpIDogMDsKIH0KIAogaW50IGluZXQ2X2R1bXBfZmliKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3RjcF9pcHY2LmMgYi9uZXQvaXB2Ni90Y3BfaXB2Ni5jCmluZGV4IGQ3NDZkM2IuLjYyYzBlNWIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3RjcF9pcHY2LmMKKysrIGIvbmV0L2lwdjYvdGNwX2lwdjYuYwpAQCAtMTQwMSwyMCArMTQwMSwxOCBAQAogc3RhdGljIGludCB0Y3BfdjZfY2hlY2tzdW1faW5pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9IVykgewotCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwogCQlpZiAoIXRjcF92Nl9jaGVjayhza2ItPmgudGgsc2tiLT5sZW4sJnNrYi0+bmguaXB2NmgtPnNhZGRyLAotCQkJCSAgJnNrYi0+bmguaXB2NmgtPmRhZGRyLHNrYi0+Y3N1bSkpCisJCQkJICAmc2tiLT5uaC5pcHY2aC0+ZGFkZHIsc2tiLT5jc3VtKSkgeworCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKIAkJCXJldHVybiAwOwotCQlMSU1JVF9ORVRERUJVRyhLRVJOX0RFQlVHICJodyB0Y3AgdjYgY3N1bSBmYWlsZWRcbiIpOworCQl9CiAJfQorCisJc2tiLT5jc3VtID0gfnRjcF92Nl9jaGVjayhza2ItPmgudGgsc2tiLT5sZW4sJnNrYi0+bmguaXB2NmgtPnNhZGRyLAorCQkJCSAgJnNrYi0+bmguaXB2NmgtPmRhZGRyLCAwKTsKKwogCWlmIChza2ItPmxlbiA8PSA3NikgewotCQlpZiAodGNwX3Y2X2NoZWNrKHNrYi0+aC50aCxza2ItPmxlbiwmc2tiLT5uaC5pcHY2aC0+c2FkZHIsCi0JCQkJICZza2ItPm5oLmlwdjZoLT5kYWRkcixza2JfY2hlY2tzdW0oc2tiLCAwLCBza2ItPmxlbiwgMCkpKQotCQkJcmV0dXJuIC0xOwotCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwotCX0gZWxzZSB7Ci0JCXNrYi0+Y3N1bSA9IH50Y3BfdjZfY2hlY2soc2tiLT5oLnRoLHNrYi0+bGVuLCZza2ItPm5oLmlwdjZoLT5zYWRkciwKLQkJCQkJICAmc2tiLT5uaC5pcHY2aC0+ZGFkZHIsMCk7CisJCXJldHVybiBfX3NrYl9jaGVja3N1bV9jb21wbGV0ZShza2IpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTE1NzUsNyArMTU3Myw3IEBACiAJCWdvdG8gZGlzY2FyZF9pdDsKIAogCWlmICgoc2tiLT5pcF9zdW1tZWQgIT0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlkgJiYKLQkgICAgIHRjcF92Nl9jaGVja3N1bV9pbml0KHNrYikgPCAwKSkKKwkgICAgIHRjcF92Nl9jaGVja3N1bV9pbml0KHNrYikpKQogCQlnb3RvIGJhZF9wYWNrZXQ7CiAKIAl0aCA9IHNrYi0+aC50aDsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3VkcC5jIGIvbmV0L2lwdjYvdWRwLmMKaW5kZXggYmY5NTE5My4uZTY3MTE1MyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvdWRwLmMKKysrIGIvbmV0L2lwdjYvdWRwLmMKQEAgLTI0OCw3ICsyNDgsNyBAQAogCQllcnIgPSBza2JfY29weV9kYXRhZ3JhbV9pb3ZlYyhza2IsIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSwgbXNnLT5tc2dfaW92LAogCQkJCQkgICAgICBjb3BpZWQpOwogCX0gZWxzZSBpZiAobXNnLT5tc2dfZmxhZ3MmTVNHX1RSVU5DKSB7Ci0JCWlmICgodW5zaWduZWQgc2hvcnQpY3N1bV9mb2xkKHNrYl9jaGVja3N1bShza2IsIDAsIHNrYi0+bGVuLCBza2ItPmNzdW0pKSkKKwkJaWYgKF9fc2tiX2NoZWNrc3VtX2NvbXBsZXRlKHNrYikpCiAJCQlnb3RvIGNzdW1fY29weV9lcnI7CiAJCWVyciA9IHNrYl9jb3B5X2RhdGFncmFtX2lvdmVjKHNrYiwgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpLCBtc2ctPm1zZ19pb3YsCiAJCQkJCSAgICAgIGNvcGllZCk7CkBAIC0zNjMsMTMgKzM2MywxMCBAQAogCQlyZXR1cm4gLTE7CiAJfQogCi0JaWYgKHNrYi0+aXBfc3VtbWVkICE9IENIRUNLU1VNX1VOTkVDRVNTQVJZKSB7Ci0JCWlmICgodW5zaWduZWQgc2hvcnQpY3N1bV9mb2xkKHNrYl9jaGVja3N1bShza2IsIDAsIHNrYi0+bGVuLCBza2ItPmNzdW0pKSkgewotCQkJVURQNl9JTkNfU1RBVFNfQkgoVURQX01JQl9JTkVSUk9SUyk7Ci0JCQlrZnJlZV9za2Ioc2tiKTsKLQkJCXJldHVybiAwOwotCQl9Ci0JCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CisJaWYgKHNrYl9jaGVja3N1bV9jb21wbGV0ZShza2IpKSB7CisJCVVEUDZfSU5DX1NUQVRTX0JIKFVEUF9NSUJfSU5FUlJPUlMpOworCQlrZnJlZV9za2Ioc2tiKTsKKwkJcmV0dXJuIDA7CiAJfQogCiAJaWYgKHNvY2tfcXVldWVfcmN2X3NrYihzayxza2IpPDApIHsKQEAgLTQ5MSwxMyArNDg4LDEwIEBACiAJCXVoID0gc2tiLT5oLnVoOwogCX0KIAotCWlmIChza2ItPmlwX3N1bW1lZD09Q0hFQ0tTVU1fSFcpIHsKKwlpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fSFcgJiYKKwkgICAgIWNzdW1faXB2Nl9tYWdpYyhzYWRkciwgZGFkZHIsIHVsZW4sIElQUFJPVE9fVURQLCBza2ItPmNzdW0pKQogCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwotCQlpZiAoY3N1bV9pcHY2X21hZ2ljKHNhZGRyLCBkYWRkciwgdWxlbiwgSVBQUk9UT19VRFAsIHNrYi0+Y3N1bSkpIHsKLQkJCUxJTUlUX05FVERFQlVHKEtFUk5fREVCVUcgInVkcCB2NiBodyBjc3VtIGZhaWx1cmUuXG4iKTsKLQkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKLQkJfQotCX0KKwogCWlmIChza2ItPmlwX3N1bW1lZCAhPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWSkKIAkJc2tiLT5jc3VtID0gfmNzdW1faXB2Nl9tYWdpYyhzYWRkciwgZGFkZHIsIHVsZW4sIElQUFJPVE9fVURQLCAwKTsKIApAQCAtNTIxLDggKzUxNSw3IEBACiAJCWlmICgheGZybTZfcG9saWN5X2NoZWNrKE5VTEwsIFhGUk1fUE9MSUNZX0lOLCBza2IpKQogCQkJZ290byBkaXNjYXJkOwogCi0JCWlmIChza2ItPmlwX3N1bW1lZCAhPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWSAmJgotCQkgICAgKHVuc2lnbmVkIHNob3J0KWNzdW1fZm9sZChza2JfY2hlY2tzdW0oc2tiLCAwLCBza2ItPmxlbiwgc2tiLT5jc3VtKSkpCisJCWlmIChza2JfY2hlY2tzdW1fY29tcGxldGUoc2tiKSkKIAkJCWdvdG8gZGlzY2FyZDsKIAkJVURQNl9JTkNfU1RBVFNfQkgoVURQX01JQl9OT1BPUlRTKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvZGlzY292ZXJ5LmMgYi9uZXQvaXJkYS9kaXNjb3ZlcnkuYwppbmRleCBjNGJhNWZhLi4zZmVmYzgyIDEwMDY0NAotLS0gYS9uZXQvaXJkYS9kaXNjb3ZlcnkuYworKysgYi9uZXQvaXJkYS9kaXNjb3ZlcnkuYwpAQCAtMTk0LDggKzE5NCw3IEBACiAKIAkJCS8qIFJlbW92ZSBpdCBmcm9tIHRoZSBsb2cgKi8KIAkJCWN1cnIgPSBoYXNoYmluX3JlbW92ZV90aGlzKGxvZywgKGlyZGFfcXVldWVfdCAqKSBjdXJyKTsKLQkJCWlmIChjdXJyKQotCQkJCWtmcmVlKGN1cnIpOworCQkJa2ZyZWUoY3Vycik7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lyaWFzX29iamVjdC5jIGIvbmV0L2lyZGEvaXJpYXNfb2JqZWN0LmMKaW5kZXggNmZlYzQyOC4uNzVmMjY2NiAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJpYXNfb2JqZWN0LmMKKysrIGIvbmV0L2lyZGEvaXJpYXNfb2JqZWN0LmMKQEAgLTEyMiw4ICsxMjIsNyBAQAogCUlSREFfQVNTRVJUKGF0dHJpYiAhPSBOVUxMLCByZXR1cm47KTsKIAlJUkRBX0FTU0VSVChhdHRyaWItPm1hZ2ljID09IElBU19BVFRSSUJfTUFHSUMsIHJldHVybjspOwogCi0JaWYgKGF0dHJpYi0+bmFtZSkKLQkJa2ZyZWUoYXR0cmliLT5uYW1lKTsKKwlrZnJlZShhdHRyaWItPm5hbWUpOwogCiAJaXJpYXNfZGVsZXRlX3ZhbHVlKGF0dHJpYi0+dmFsdWUpOwogCWF0dHJpYi0+bWFnaWMgPSB+SUFTX0FUVFJJQl9NQUdJQzsKQEAgLTEzNiw4ICsxMzUsNyBAQAogCUlSREFfQVNTRVJUKG9iaiAhPSBOVUxMLCByZXR1cm47KTsKIAlJUkRBX0FTU0VSVChvYmotPm1hZ2ljID09IElBU19PQkpFQ1RfTUFHSUMsIHJldHVybjspOwogCi0JaWYgKG9iai0+bmFtZSkKLQkJa2ZyZWUob2JqLT5uYW1lKTsKKwlrZnJlZShvYmotPm5hbWUpOwogCiAJaGFzaGJpbl9kZWxldGUob2JqLT5hdHRyaWJzLCAoRlJFRV9GVU5DKSBfX2lyaWFzX2RlbGV0ZV9hdHRyaWIpOwogCkBAIC01NjIsMTQgKzU2MCwxMiBAQAogCQkvKiBObyBuZWVkIHRvIGRlYWxsb2NhdGUgKi8KIAkJYnJlYWs7CiAJY2FzZSBJQVNfU1RSSU5HOgotCQkvKiBJZiBzdHJpbmcsIGRlYWxsb2NhdGUgc3RyaW5nICovCi0JCWlmICh2YWx1ZS0+dC5zdHJpbmcgIT0gTlVMTCkKLQkJCWtmcmVlKHZhbHVlLT50LnN0cmluZyk7CisJCS8qIERlYWxsb2NhdGUgc3RyaW5nICovCisJCWtmcmVlKHZhbHVlLT50LnN0cmluZyk7CiAJCWJyZWFrOwogCWNhc2UgSUFTX09DVF9TRVE6Ci0JCS8qIElmIGJ5dGUgc3RyZWFtLCBkZWFsbG9jYXRlIGJ5dGUgc3RyZWFtICovCi0JCSBpZiAodmFsdWUtPnQub2N0X3NlcSAhPSBOVUxMKQotCQkJIGtmcmVlKHZhbHVlLT50Lm9jdF9zZXEpOworCQkvKiBEZWFsbG9jYXRlIGJ5dGUgc3RyZWFtICovCisJCSBrZnJlZSh2YWx1ZS0+dC5vY3Rfc2VxKTsKIAkJIGJyZWFrOwogCWRlZmF1bHQ6CiAJCUlSREFfREVCVUcoMCwgIiVzKCksIFVua25vd24gdmFsdWUgdHlwZSFcbiIsIF9fRlVOQ1RJT05fXyk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL0tjb25maWcgYi9uZXQvbmV0ZmlsdGVyL0tjb25maWcKaW5kZXggODI5NmIzOC4uYTg0ZjkyMiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9LY29uZmlnCisrKyBiL25ldC9uZXRmaWx0ZXIvS2NvbmZpZwpAQCAtMSwzICsxLDYgQEAKK21lbnUgIkNvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24iCisJZGVwZW5kcyBvbiBORVQgJiYgTkVURklMVEVSCisKIGNvbmZpZyBORVRGSUxURVJfTkVUTElOSwogICAgICAgIHRyaXN0YXRlICJOZXRmaWx0ZXIgbmV0bGluayBpbnRlcmZhY2UiCiAgICAgICAgaGVscApAQCAtMjIsMyArMjUsNzQgQEAKIAkgIGFuZCBpcyBhbHNvIHNjaGVkdWxlZCB0byByZXBsYWNlIHRoZSBvbGQgc3lzbG9nLWJhc2VkIGlwdF9MT0cKIAkgIGFuZCBpcDZ0X0xPRyBtb2R1bGVzLgogCitjb25maWcgTkZfQ09OTlRSQUNLCisJdHJpc3RhdGUgIkxheWVyIDMgSW5kZXBlbmRlbnQgQ29ubmVjdGlvbiB0cmFja2luZyAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiBJUF9ORl9DT05OVFJBQ0s9bgorCWRlZmF1bHQgbgorCS0tLWhlbHAtLS0KKwkgIENvbm5lY3Rpb24gdHJhY2tpbmcga2VlcHMgYSByZWNvcmQgb2Ygd2hhdCBwYWNrZXRzIGhhdmUgcGFzc2VkCisJICB0aHJvdWdoIHlvdXIgbWFjaGluZSwgaW4gb3JkZXIgdG8gZmlndXJlIG91dCBob3cgdGhleSBhcmUgcmVsYXRlZAorCSAgaW50byBjb25uZWN0aW9ucy4KKworCSAgTGF5ZXIgMyBpbmRlcGVuZGVudCBjb25uZWN0aW9uIHRyYWNraW5nIGlzIGV4cGVyaW1lbnRhbCBzY2hlbWUKKwkgIHdoaWNoIGdlbmVyYWxpemUgaXBfY29ubnRyYWNrIHRvIHN1cHBvcnQgb3RoZXIgbGF5ZXIgMyBwcm90b2NvbHMuCisKKwkgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLgorCitjb25maWcgTkZfQ1RfQUNDVAorCWJvb2wgIkNvbm5lY3Rpb24gdHJhY2tpbmcgZmxvdyBhY2NvdW50aW5nIgorCWRlcGVuZHMgb24gTkZfQ09OTlRSQUNLCisJaGVscAorCSAgSWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCwgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgY29kZSB3aWxsCisJICBrZWVwIHBlci1mbG93IHBhY2tldCBhbmQgYnl0ZSBjb3VudGVycy4KKworCSAgVGhvc2UgY291bnRlcnMgY2FuIGJlIHVzZWQgZm9yIGZsb3ctYmFzZWQgYWNjb3VudGluZyBvciB0aGUKKwkgIGBjb25uYnl0ZXMnIG1hdGNoLgorCisJICBJZiB1bnN1cmUsIHNheSBgTicuCisKK2NvbmZpZyBORl9DT05OVFJBQ0tfTUFSSworCWJvb2wgICdDb25uZWN0aW9uIG1hcmsgdHJhY2tpbmcgc3VwcG9ydCcKKwlkZXBlbmRzIG9uIE5GX0NPTk5UUkFDSworCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgY29ubmVjdGlvbiBtYXJrcywgdXNlZCBieSB0aGUKKwkgIGBDT05OTUFSSycgdGFyZ2V0IGFuZCBgY29ubm1hcmsnIG1hdGNoLiBTaW1pbGFyIHRvIHRoZSBtYXJrIHZhbHVlCisJICBvZiBwYWNrZXRzLCBidXQgdGhpcyBtYXJrIHZhbHVlIGlzIGtlcHQgaW4gdGhlIGNvbm50cmFjayBzZXNzaW9uCisJICBpbnN0ZWFkIG9mIHRoZSBpbmRpdmlkdWFsIHBhY2tldHMuCisKK2NvbmZpZyBORl9DT05OVFJBQ0tfRVZFTlRTCisJYm9vbCAiQ29ubmVjdGlvbiB0cmFja2luZyBldmVudHMiCisJZGVwZW5kcyBvbiBORl9DT05OVFJBQ0sKKwloZWxwCisJICBJZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBjb2RlIHdpbGwKKwkgIHByb3ZpZGUgYSBub3RpZmllciBjaGFpbiB0aGF0IGNhbiBiZSB1c2VkIGJ5IG90aGVyIGtlcm5lbCBjb2RlCisJICB0byBnZXQgbm90aWZpZWQgYWJvdXRjaGFuZ2VzIGluIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIHN0YXRlLgorCisJICBJZiB1bnN1cmUsIHNheSBgTicuCisKK2NvbmZpZyBORl9DVF9QUk9UT19TQ1RQCisJdHJpc3RhdGUgJ1NDVFAgcHJvdG9jb2wgb24gbmV3IGNvbm5lY3Rpb24gdHJhY2tpbmcgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKScKKwlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiBORl9DT05OVFJBQ0sKKwlkZWZhdWx0IG4KKwloZWxwCisJICBXaXRoIHRoaXMgb3B0aW9uIGVuYWJsZWQsIHRoZSBsYXllciAzIGluZGVwZW5kZW50IGNvbm5lY3Rpb24KKwkgIHRyYWNraW5nIGNvZGUgd2lsbCBiZSBhYmxlIHRvIGRvIHN0YXRlIHRyYWNraW5nIG9uIFNDVFAgY29ubmVjdGlvbnMuCisKKwkgIElmIHlvdSB3YW50IHRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIHNheSBNIGhlcmUgYW5kIHJlYWQKKwkgIERvY3VtZW50YXRpb24vbW9kdWxlcy50eHQuICBJZiB1bnN1cmUsIHNheSBgTicuCisKK2NvbmZpZyBORl9DT05OVFJBQ0tfRlRQCisJdHJpc3RhdGUgIkZUUCBzdXBwb3J0IG9uIG5ldyBjb25uZWN0aW9uIHRyYWNraW5nIChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMICYmIE5GX0NPTk5UUkFDSworCWhlbHAKKwkgIFRyYWNraW5nIEZUUCBjb25uZWN0aW9ucyBpcyBwcm9ibGVtYXRpYzogc3BlY2lhbCBoZWxwZXJzIGFyZQorCSAgcmVxdWlyZWQgZm9yIHRyYWNraW5nIHRoZW0sIGFuZCBkb2luZyBtYXNxdWVyYWRpbmcgYW5kIG90aGVyIGZvcm1zCisJICBvZiBOZXR3b3JrIEFkZHJlc3MgVHJhbnNsYXRpb24gb24gdGhlbS4KKworCSAgVGhpcyBpcyBGVFAgc3VwcG9ydCBvbiBMYXllciAzIGluZGVwZW5kZW50IGNvbm5lY3Rpb24gdHJhY2tpbmcuCisJICBMYXllciAzIGluZGVwZW5kZW50IGNvbm5lY3Rpb24gdHJhY2tpbmcgaXMgZXhwZXJpbWVudGFsIHNjaGVtZQorCSAgd2hpY2ggZ2VuZXJhbGl6ZSBpcF9jb25udHJhY2sgdG8gc3VwcG9ydCBvdGhlciBsYXllciAzIHByb3RvY29scy4KKworCSAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uCisKK2VuZG1lbnUKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvTWFrZWZpbGUgYi9uZXQvbmV0ZmlsdGVyL01ha2VmaWxlCmluZGV4IGIzYjQ0ZjguLjU1ZjAxOWEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvTWFrZWZpbGUKKysrIGIvbmV0L25ldGZpbHRlci9NYWtlZmlsZQpAQCAtNSwzICs1LDExIEBACiBvYmotJChDT05GSUdfTkVURklMVEVSX05FVExJTkspICs9IG5mbmV0bGluay5vCiBvYmotJChDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUUpICs9IG5mbmV0bGlua19xdWV1ZS5vCiBvYmotJChDT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HKSArPSBuZm5ldGxpbmtfbG9nLm8KKworbmZfY29ubnRyYWNrLW9ianMJOj0gbmZfY29ubnRyYWNrX2NvcmUubyBuZl9jb25udHJhY2tfc3RhbmRhbG9uZS5vIG5mX2Nvbm50cmFja19sM3Byb3RvX2dlbmVyaWMubyBuZl9jb25udHJhY2tfcHJvdG9fZ2VuZXJpYy5vIG5mX2Nvbm50cmFja19wcm90b190Y3AubyBuZl9jb25udHJhY2tfcHJvdG9fdWRwLm8KKworb2JqLSQoQ09ORklHX05GX0NPTk5UUkFDSykgKz0gbmZfY29ubnRyYWNrLm8KK29iai0kKENPTkZJR19ORl9DT05OVFJBQ0tfRlRQKSArPSBuZl9jb25udHJhY2tfZnRwLm8KKworIyBTQ1RQIHByb3RvY29sIGNvbm5lY3Rpb24gdHJhY2tpbmcKK29iai0kKENPTkZJR19ORl9DVF9QUk9UT19TQ1RQKSArPSBuZl9jb25udHJhY2tfcHJvdG9fc2N0cC5vCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE2N2M3OQotLS0gL2Rldi9udWxsCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYwpAQCAtMCwwICsxLDE1MzggQEAKKy8qIENvbm5lY3Rpb24gc3RhdGUgdHJhY2tpbmcgZm9yIG5ldGZpbHRlci4gIFRoaXMgaXMgc2VwYXJhdGVkIGZyb20sCisgICBidXQgcmVxdWlyZWQgYnksIHRoZSBOQVQgbGF5ZXI7IGl0IGNhbiBhbHNvIGJlIHVzZWQgYnkgYW4gaXB0YWJsZXMKKyAgIGV4dGVuc2lvbi4gKi8KKworLyogKEMpIDE5OTktMjAwMSBQYXVsIGBSdXN0eScgUnVzc2VsbAorICogKEMpIDIwMDItMjAwNSBOZXRmaWx0ZXIgQ29yZSBUZWFtIDxjb3JldGVhbUBuZXRmaWx0ZXIub3JnPgorICogKEMpIDIwMDMsMjAwNCBVU0FHSS9XSURFIFByb2plY3QgPGh0dHA6Ly93d3cubGludXgtaXB2Ni5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAyMyBBcHIgMjAwMTogSGFyYWxkIFdlbHRlIDxsYWZvcmdlQGdudW1vbmtzLm9yZz4KKyAqCS0gbmV3IEFQSSBhbmQgaGFuZGxpbmcgb2YgY29ubnRyYWNrL25hdCBoZWxwZXJzCisgKgktIG5vdyBjYXBhYmxlIG9mIG11bHRpcGxlIGV4cGVjdGF0aW9ucyBmb3Igb25lIG1hc3RlcgorICogMTYgSnVsIDIwMDI6IEhhcmFsZCBXZWx0ZSA8bGFmb3JnZUBnbnVtb25rcy5vcmc+CisgKgktIGFkZCB1c2FnZS9yZWZlcmVuY2UgY291bnRzIHRvIGlwX2Nvbm50cmFja19leHBlY3QKKyAqCS0gZXhwb3J0IGlwX2Nvbm50cmFja1tfZXhwZWN0XV97ZmluZF9nZXQscHV0fSBmdW5jdGlvbnMKKyAqIDE2IERlYyAyMDAzOiBZYXN1eXVraSBLb3pha2FpIEBVU0FHSSA8eWFzdXl1a2kua296YWthaUB0b3NoaWJhLmNvLmpwPgorICoJLSBnZW5lcmFsaXplIEwzIHByb3RvY29sIGRlbmVuZGVudCBwYXJ0LgorICogMjMgTWFyIDIwMDQ6IFlhc3V5dWtpIEtvemFrYWkgQFVTQUdJIDx5YXN1eXVraS5rb3pha2FpQHRvc2hpYmEuY28uanA+CisgKgktIGFkZCBzdXBwb3J0IHZhcmlvdXMgc2l6ZSBvZiBjb25udHJhY2sgc3RydWN0dXJlcy4KKyAqCisgKiBEZXJpdmVkIGZyb20gbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19jb3JlLmMKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KKyNpbmNsdWRlIDxsaW51eC9qaGFzaC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KKworLyogVGhpcyByd2xvY2sgcHJvdGVjdHMgdGhlIG1haW4gaGFzaCB0YWJsZSwgcHJvdG9jb2wvaGVscGVyL2V4cGVjdGVkCisgICByZWdpc3RyYXRpb25zLCBjb25udHJhY2sgdGltZXJzKi8KKyNkZWZpbmUgQVNTRVJUX1JFQURfTE9DSyh4KQorI2RlZmluZSBBU1NFUlRfV1JJVEVfTE9DSyh4KQorCisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvLmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9jb2wuaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvbGlzdGhlbHAuaD4KKworI2RlZmluZSBORl9DT05OVFJBQ0tfVkVSU0lPTgkiMC40LjEiCisKKyNpZiAwCisjZGVmaW5lIERFQlVHUCBwcmludGsKKyNlbHNlCisjZGVmaW5lIERFQlVHUChmb3JtYXQsIGFyZ3MuLi4pCisjZW5kaWYKKworREVGSU5FX1JXTE9DSyhuZl9jb25udHJhY2tfbG9jayk7CisKKy8qIG5mX2Nvbm50cmFja19zdGFuZGFsb25lIG5lZWRzIHRoaXMgKi8KK2F0b21pY190IG5mX2Nvbm50cmFja19jb3VudCA9IEFUT01JQ19JTklUKDApOworCit2b2lkICgqbmZfY29ubnRyYWNrX2Rlc3Ryb3llZCkoc3RydWN0IG5mX2Nvbm4gKmNvbm50cmFjaykgPSBOVUxMOworTElTVF9IRUFEKG5mX2Nvbm50cmFja19leHBlY3RfbGlzdCk7CitzdHJ1Y3QgbmZfY29ubnRyYWNrX3Byb3RvY29sICoqbmZfY3RfcHJvdG9zW1BGX01BWF07CitzdHJ1Y3QgbmZfY29ubnRyYWNrX2wzcHJvdG8gKm5mX2N0X2wzcHJvdG9zW1BGX01BWF07CitzdGF0aWMgTElTVF9IRUFEKGhlbHBlcnMpOwordW5zaWduZWQgaW50IG5mX2Nvbm50cmFja19odGFibGVfc2l6ZSA9IDA7CitpbnQgbmZfY29ubnRyYWNrX21heDsKK3N0cnVjdCBsaXN0X2hlYWQgKm5mX2Nvbm50cmFja19oYXNoOworc3RhdGljIGttZW1fY2FjaGVfdCAqbmZfY29ubnRyYWNrX2V4cGVjdF9jYWNoZXA7CitzdHJ1Y3QgbmZfY29ubiBuZl9jb25udHJhY2tfdW50cmFja2VkOwordW5zaWduZWQgaW50IG5mX2N0X2xvZ19pbnZhbGlkOworc3RhdGljIExJU1RfSEVBRCh1bmNvbmZpcm1lZCk7CitzdGF0aWMgaW50IG5mX2Nvbm50cmFja192bWFsbG9jOworCisjaWZkZWYgQ09ORklHX05GX0NPTk5UUkFDS19FVkVOVFMKK3N0cnVjdCBub3RpZmllcl9ibG9jayAqbmZfY29ubnRyYWNrX2NoYWluOworc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZl9jb25udHJhY2tfZXhwZWN0X2NoYWluOworCitERUZJTkVfUEVSX0NQVShzdHJ1Y3QgbmZfY29ubnRyYWNrX2VjYWNoZSwgbmZfY29ubnRyYWNrX2VjYWNoZSk7CisKKy8qIGRlbGl2ZXIgY2FjaGVkIGV2ZW50cyBhbmQgY2xlYXIgY2FjaGUgZW50cnkgLSBtdXN0IGJlIGNhbGxlZCB3aXRoIGxvY2FsbHkKKyAqIGRpc2FibGVkIHNvZnRpcnFzICovCitzdGF0aWMgaW5saW5lIHZvaWQKK19fbmZfY3RfZGVsaXZlcl9jYWNoZWRfZXZlbnRzKHN0cnVjdCBuZl9jb25udHJhY2tfZWNhY2hlICplY2FjaGUpCit7CisJREVCVUdQKCJlY2FjaGU6IGRlbGl2ZXJpbmcgZXZlbnRzIGZvciAlcFxuIiwgZWNhY2hlLT5jdCk7CisJaWYgKG5mX2N0X2lzX2NvbmZpcm1lZChlY2FjaGUtPmN0KSAmJiAhbmZfY3RfaXNfZHlpbmcoZWNhY2hlLT5jdCkKKwkgICAgJiYgZWNhY2hlLT5ldmVudHMpCisJCW5vdGlmaWVyX2NhbGxfY2hhaW4oJm5mX2Nvbm50cmFja19jaGFpbiwgZWNhY2hlLT5ldmVudHMsCisJCQkJICAgIGVjYWNoZS0+Y3QpOworCisJZWNhY2hlLT5ldmVudHMgPSAwOworCW5mX2N0X3B1dChlY2FjaGUtPmN0KTsKKwllY2FjaGUtPmN0ID0gTlVMTDsKK30KKworLyogRGVsaXZlciBhbGwgY2FjaGVkIGV2ZW50cyBmb3IgYSBwYXJ0aWN1bGFyIGNvbm50cmFjay4gVGhpcyBpcyBjYWxsZWQKKyAqIGJ5IGNvZGUgcHJpb3IgdG8gYXN5bmMgcGFja2V0IGhhbmRsaW5nIGZvciBmcmVlaW5nIHRoZSBza2IgKi8KK3ZvaWQgbmZfY3RfZGVsaXZlcl9jYWNoZWRfZXZlbnRzKGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCkKK3sKKwlzdHJ1Y3QgbmZfY29ubnRyYWNrX2VjYWNoZSAqZWNhY2hlOworCisJbG9jYWxfYmhfZGlzYWJsZSgpOworCWVjYWNoZSA9ICZfX2dldF9jcHVfdmFyKG5mX2Nvbm50cmFja19lY2FjaGUpOworCWlmIChlY2FjaGUtPmN0ID09IGN0KQorCQlfX25mX2N0X2RlbGl2ZXJfY2FjaGVkX2V2ZW50cyhlY2FjaGUpOworCWxvY2FsX2JoX2VuYWJsZSgpOworfQorCisvKiBEZWxpdmVyIGNhY2hlZCBldmVudHMgZm9yIG9sZCBwZW5kaW5nIGV2ZW50cywgaWYgY3VycmVudCBjb25udHJhY2sgIT0gb2xkICovCit2b2lkIF9fbmZfY3RfZXZlbnRfY2FjaGVfaW5pdChzdHJ1Y3QgbmZfY29ubiAqY3QpCit7CisJc3RydWN0IG5mX2Nvbm50cmFja19lY2FjaGUgKmVjYWNoZTsKKwkKKwkvKiB0YWtlIGNhcmUgb2YgZGVsaXZlcmluZyBwb3RlbnRpYWxseSBvbGQgZXZlbnRzICovCisJZWNhY2hlID0gJl9fZ2V0X2NwdV92YXIobmZfY29ubnRyYWNrX2VjYWNoZSk7CisJQlVHX09OKGVjYWNoZS0+Y3QgPT0gY3QpOworCWlmIChlY2FjaGUtPmN0KQorCQlfX25mX2N0X2RlbGl2ZXJfY2FjaGVkX2V2ZW50cyhlY2FjaGUpOworCS8qIGluaXRpYWxpemUgZm9yIHRoaXMgY29ubnRyYWNrL3BhY2tldCAqLworCWVjYWNoZS0+Y3QgPSBjdDsKKwluZl9jb25udHJhY2tfZ2V0KCZjdC0+Y3RfZ2VuZXJhbCk7Cit9CisKKy8qIGZsdXNoIHRoZSBldmVudCBjYWNoZSAtIHRvdWNoZXMgb3RoZXIgQ1BVJ3MgZGF0YSBhbmQgbXVzdCBub3QgYmUgY2FsbGVkCisgKiB3aGlsZSBwYWNrZXRzIGFyZSBzdGlsbCBwYXNzaW5nIHRocm91Z2ggdGhlIGNvZGUgKi8KK3N0YXRpYyB2b2lkIG5mX2N0X2V2ZW50X2NhY2hlX2ZsdXNoKHZvaWQpCit7CisJc3RydWN0IG5mX2Nvbm50cmFja19lY2FjaGUgKmVjYWNoZTsKKwlpbnQgY3B1OworCisJZm9yX2VhY2hfY3B1KGNwdSkgeworCQllY2FjaGUgPSAmcGVyX2NwdShuZl9jb25udHJhY2tfZWNhY2hlLCBjcHUpOworCQlpZiAoZWNhY2hlLT5jdCkKKwkJCW5mX2N0X3B1dChlY2FjaGUtPmN0KTsKKwl9Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIG5mX2N0X2V2ZW50X2NhY2hlX2ZsdXNoKHZvaWQpIHt9CisjZW5kaWYgLyogQ09ORklHX05GX0NPTk5UUkFDS19FVkVOVFMgKi8KKworREVGSU5FX1BFUl9DUFUoc3RydWN0IGlwX2Nvbm50cmFja19zdGF0LCBuZl9jb25udHJhY2tfc3RhdCk7CitFWFBPUlRfUEVSX0NQVV9TWU1CT0wobmZfY29ubnRyYWNrX3N0YXQpOworCisvKgorICogVGhpcyBzY2hlbWUgb2ZmZXJzIHZhcmlvdXMgc2l6ZSBvZiAic3RydWN0IG5mX2Nvbm4iIGRlcGVuZGVudCBvbgorICogZmVhdHVyZXMoaGVscGVyLCBuYXQsIC4uLikKKyAqLworCisjZGVmaW5lIE5GX0NUX0ZFQVRVUkVTX05BTUVMRU4JMjU2CitzdGF0aWMgc3RydWN0IHsKKwkvKiBuYW1lIG9mIHNsYWIgY2FjaGUuIHByaW50ZWQgaW4gL3Byb2Mvc2xhYmluZm8gKi8KKwljaGFyICpuYW1lOworCisJLyogc2l6ZSBvZiBzbGFiIGNhY2hlICovCisJc2l6ZV90IHNpemU7CisKKwkvKiBzbGFiIGNhY2hlIHBvaW50ZXIgKi8KKwlrbWVtX2NhY2hlX3QgKmNhY2hlcDsKKworCS8qIGFsbG9jYXRlZCBzbGFiIGNhY2hlICsgbW9kdWxlcyB3aGljaCB1c2VzIHRoaXMgc2xhYiBjYWNoZSAqLworCWludCB1c2U7CisKKwkvKiBJbml0aWFsaXphdGlvbiAqLworCWludCAoKmluaXRfY29ubnRyYWNrKShzdHJ1Y3QgbmZfY29ubiAqLCB1X2ludDMyX3QpOworCit9IG5mX2N0X2NhY2hlW05GX0NUX0ZfTlVNXTsKKworLyogcHJvdGVjdCBtZW1iZXJzIG9mIG5mX2N0X2NhY2hlIGV4Y2VwdCBvZiAidXNlIiAqLworREVGSU5FX1JXTE9DSyhuZl9jdF9jYWNoZV9sb2NrKTsKKworLyogVGhpcyBhdm9pZHMgY2FsbGluZyBrbWVtX2NhY2hlX2NyZWF0ZSgpIHdpdGggc2FtZSBuYW1lIHNpbXVsdGFuZW91c2x5ICovCitERUNMQVJFX01VVEVYKG5mX2N0X2NhY2hlX211dGV4KTsKKworZXh0ZXJuIHN0cnVjdCBuZl9jb25udHJhY2tfcHJvdG9jb2wgbmZfY29ubnRyYWNrX2dlbmVyaWNfcHJvdG9jb2w7CitzdHJ1Y3QgbmZfY29ubnRyYWNrX3Byb3RvY29sICoKK25mX2N0X2ZpbmRfcHJvdG8odV9pbnQxNl90IGwzcHJvdG8sIHVfaW50OF90IHByb3RvY29sKQoreworCWlmICh1bmxpa2VseShuZl9jdF9wcm90b3NbbDNwcm90b10gPT0gTlVMTCkpCisJCXJldHVybiAmbmZfY29ubnRyYWNrX2dlbmVyaWNfcHJvdG9jb2w7CisKKwlyZXR1cm4gbmZfY3RfcHJvdG9zW2wzcHJvdG9dW3Byb3RvY29sXTsKK30KKworc3RhdGljIGludCBuZl9jb25udHJhY2tfaGFzaF9ybmRfaW5pdHRlZDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbmZfY29ubnRyYWNrX2hhc2hfcm5kOworCitzdGF0aWMgdV9pbnQzMl90IF9faGFzaF9jb25udHJhY2soY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsCisJCQkJICB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IHJuZCkKK3sKKwl1bnNpZ25lZCBpbnQgYSwgYjsKKwlhID0gamhhc2goKHZvaWQgKil0dXBsZS0+c3JjLnUzLmFsbCwgc2l6ZW9mKHR1cGxlLT5zcmMudTMuYWxsKSwKKwkJICAoKHR1cGxlLT5zcmMubDNudW0pIDw8IDE2KSB8IHR1cGxlLT5kc3QucHJvdG9udW0pOworCWIgPSBqaGFzaCgodm9pZCAqKXR1cGxlLT5kc3QudTMuYWxsLCBzaXplb2YodHVwbGUtPmRzdC51My5hbGwpLAorCQkJKHR1cGxlLT5zcmMudS5hbGwgPDwgMTYpIHwgdHVwbGUtPmRzdC51LmFsbCk7CisKKwlyZXR1cm4gamhhc2hfMndvcmRzKGEsIGIsIHJuZCkgJSBzaXplOworfQorCitzdGF0aWMgaW5saW5lIHVfaW50MzJfdCBoYXNoX2Nvbm50cmFjayhjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSkKK3sKKwlyZXR1cm4gX19oYXNoX2Nvbm50cmFjayh0dXBsZSwgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplLAorCQkJCW5mX2Nvbm50cmFja19oYXNoX3JuZCk7Cit9CisKKy8qIEluaXRpYWxpemUgInN0cnVjdCBuZl9jb25uIiB3aGljaCBoYXMgc3BhY2VzIGZvciBoZWxwZXIgKi8KK3N0YXRpYyBpbnQKK2luaXRfY29ubnRyYWNrX2Zvcl9oZWxwZXIoc3RydWN0IG5mX2Nvbm4gKmNvbm50cmFjaywgdV9pbnQzMl90IGZlYXR1cmVzKQoreworCisJY29ubnRyYWNrLT5oZWxwID0gKHVuaW9uIG5mX2Nvbm50cmFja19oZWxwICopCisJCSgoKHVuc2lnbmVkIGxvbmcpY29ubnRyYWNrLT5kYXRhCisJCSAgKyAoX19hbGlnbm9mX18odW5pb24gbmZfY29ubnRyYWNrX2hlbHApIC0gMSkpCisJCSAmICh+KCh1bnNpZ25lZCBsb25nKShfX2FsaWdub2ZfXyh1bmlvbiBuZl9jb25udHJhY2tfaGVscCkgLTEpKSkpOworCXJldHVybiAwOworfQorCitpbnQgbmZfY29ubnRyYWNrX3JlZ2lzdGVyX2NhY2hlKHVfaW50MzJfdCBmZWF0dXJlcywgY29uc3QgY2hhciAqbmFtZSwKKwkJCQlzaXplX3Qgc2l6ZSwKKwkJCQlpbnQgKCppbml0KShzdHJ1Y3QgbmZfY29ubiAqLCB1X2ludDMyX3QpKQoreworCWludCByZXQgPSAwOworCWNoYXIgKmNhY2hlX25hbWU7CisJa21lbV9jYWNoZV90ICpjYWNoZXA7CisKKwlERUJVR1AoIm5mX2Nvbm50cmFja19yZWdpc3Rlcl9jYWNoZTogZmVhdHVyZXM9MHgleCwgbmFtZT0lcywgc2l6ZT0lZFxuIiwKKwkgICAgICAgZmVhdHVyZXMsIG5hbWUsIHNpemUpOworCisJaWYgKGZlYXR1cmVzIDwgTkZfQ1RfRl9CQVNJQyB8fCBmZWF0dXJlcyA+PSBORl9DVF9GX05VTSkgeworCQlERUJVR1AoIm5mX2Nvbm50cmFja19yZWdpc3Rlcl9jYWNoZTogaW52YWxpZCBmZWF0dXJlcy46IDB4JXhcbiIsCisJCQlmZWF0dXJlcyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWRvd24oJm5mX2N0X2NhY2hlX211dGV4KTsKKworCXdyaXRlX2xvY2tfYmgoJm5mX2N0X2NhY2hlX2xvY2spOworCS8qIGUuZzogbXVsdGlwbGUgaGVscGVycyBhcmUgbG9hZGVkICovCisJaWYgKG5mX2N0X2NhY2hlW2ZlYXR1cmVzXS51c2UgPiAwKSB7CisJCURFQlVHUCgibmZfY29ubnRyYWNrX3JlZ2lzdGVyX2NhY2hlOiBhbHJlYWR5IHJlc2lzdGVyZC5cbiIpOworCQlpZiAoKCFzdHJuY21wKG5mX2N0X2NhY2hlW2ZlYXR1cmVzXS5uYW1lLCBuYW1lLAorCQkJICAgICAgTkZfQ1RfRkVBVFVSRVNfTkFNRUxFTikpCisJCSAgICAmJiBuZl9jdF9jYWNoZVtmZWF0dXJlc10uc2l6ZSA9PSBzaXplCisJCSAgICAmJiBuZl9jdF9jYWNoZVtmZWF0dXJlc10uaW5pdF9jb25udHJhY2sgPT0gaW5pdCkgeworCQkJREVCVUdQKCJuZl9jb25udHJhY2tfcmVnaXN0ZXJfY2FjaGU6IHJldXNpbmcuXG4iKTsKKwkJCW5mX2N0X2NhY2hlW2ZlYXR1cmVzXS51c2UrKzsKKwkJCXJldCA9IDA7CisJCX0gZWxzZQorCQkJcmV0ID0gLUVCVVNZOworCisJCXdyaXRlX3VubG9ja19iaCgmbmZfY3RfY2FjaGVfbG9jayk7CisJCXVwKCZuZl9jdF9jYWNoZV9tdXRleCk7CisJCXJldHVybiByZXQ7CisJfQorCXdyaXRlX3VubG9ja19iaCgmbmZfY3RfY2FjaGVfbG9jayk7CisKKwkvKgorCSAqIFRoZSBtZW1vcnkgc3BhY2UgZm9yIG5hbWUgb2Ygc2xhYiBjYWNoZSBtdXN0IGJlIGFsaXZlIHVudGlsCisJICogY2FjaGUgaXMgZGVzdHJveWVkLgorCSAqLworCWNhY2hlX25hbWUgPSBrbWFsbG9jKHNpemVvZihjaGFyKSpORl9DVF9GRUFUVVJFU19OQU1FTEVOLCBHRlBfQVRPTUlDKTsKKwlpZiAoY2FjaGVfbmFtZSA9PSBOVUxMKSB7CisJCURFQlVHUCgibmZfY29ubnRyYWNrX3JlZ2lzdGVyX2NhY2hlOiBjYW4ndCBhbGxvYyBjYWNoZV9uYW1lXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXRfdXBfbXV0ZXg7CisJfQorCisJaWYgKHN0cmxjcHkoY2FjaGVfbmFtZSwgbmFtZSwgTkZfQ1RfRkVBVFVSRVNfTkFNRUxFTikKKwkJCQkJCT49IE5GX0NUX0ZFQVRVUkVTX05BTUVMRU4pIHsKKwkJcHJpbnRrKCJuZl9jb25udHJhY2tfcmVnaXN0ZXJfY2FjaGU6IG5hbWUgdG9vIGxvbmdcbiIpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dF9mcmVlX25hbWU7CisJfQorCisJY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUoY2FjaGVfbmFtZSwgc2l6ZSwgMCwgMCwKKwkJCQkgICBOVUxMLCBOVUxMKTsKKwlpZiAoIWNhY2hlcCkgeworCQlwcmludGsoIm5mX2Nvbm50cmFja19yZWdpc3Rlcl9jYWNoZTogQ2FuJ3QgY3JlYXRlIHNsYWIgY2FjaGUgIgorCQkgICAgICAgImZvciB0aGUgZmVhdHVyZXMgPSAweCV4XG4iLCBmZWF0dXJlcyk7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0X2ZyZWVfbmFtZTsKKwl9CisKKwl3cml0ZV9sb2NrX2JoKCZuZl9jdF9jYWNoZV9sb2NrKTsKKwluZl9jdF9jYWNoZVtmZWF0dXJlc10udXNlID0gMTsKKwluZl9jdF9jYWNoZVtmZWF0dXJlc10uc2l6ZSA9IHNpemU7CisJbmZfY3RfY2FjaGVbZmVhdHVyZXNdLmluaXRfY29ubnRyYWNrID0gaW5pdDsKKwluZl9jdF9jYWNoZVtmZWF0dXJlc10uY2FjaGVwID0gY2FjaGVwOworCW5mX2N0X2NhY2hlW2ZlYXR1cmVzXS5uYW1lID0gY2FjaGVfbmFtZTsKKwl3cml0ZV91bmxvY2tfYmgoJm5mX2N0X2NhY2hlX2xvY2spOworCisJZ290byBvdXRfdXBfbXV0ZXg7CisKK291dF9mcmVlX25hbWU6CisJa2ZyZWUoY2FjaGVfbmFtZSk7CitvdXRfdXBfbXV0ZXg6CisJdXAoJm5mX2N0X2NhY2hlX211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCisvKiBGSVhNRTogSW4gdGhlIGN1cnJlbnQsIG9ubHkgbmZfY29ubnRyYWNrX2NsZWFudXAoKSBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uLiAqLwordm9pZCBuZl9jb25udHJhY2tfdW5yZWdpc3Rlcl9jYWNoZSh1X2ludDMyX3QgZmVhdHVyZXMpCit7CisJa21lbV9jYWNoZV90ICpjYWNoZXA7CisJY2hhciAqbmFtZTsKKworCS8qCisJICogVGhpcyBhc3N1cmVzIHRoYXQga21lbV9jYWNoZV9jcmVhdGUoKSBpc24ndCBjYWxsZWQgYmVmb3JlIGRlc3Ryb3lpbmcKKwkgKiBzbGFiIGNhY2hlLgorCSAqLworCURFQlVHUCgibmZfY29ubnRyYWNrX3VucmVnaXN0ZXJfY2FjaGU6IDB4JTA0eFxuIiwgZmVhdHVyZXMpOworCWRvd24oJm5mX2N0X2NhY2hlX211dGV4KTsKKworCXdyaXRlX2xvY2tfYmgoJm5mX2N0X2NhY2hlX2xvY2spOworCWlmICgtLW5mX2N0X2NhY2hlW2ZlYXR1cmVzXS51c2UgPiAwKSB7CisJCXdyaXRlX3VubG9ja19iaCgmbmZfY3RfY2FjaGVfbG9jayk7CisJCXVwKCZuZl9jdF9jYWNoZV9tdXRleCk7CisJCXJldHVybjsKKwl9CisJY2FjaGVwID0gbmZfY3RfY2FjaGVbZmVhdHVyZXNdLmNhY2hlcDsKKwluYW1lID0gbmZfY3RfY2FjaGVbZmVhdHVyZXNdLm5hbWU7CisJbmZfY3RfY2FjaGVbZmVhdHVyZXNdLmNhY2hlcCA9IE5VTEw7CisJbmZfY3RfY2FjaGVbZmVhdHVyZXNdLm5hbWUgPSBOVUxMOworCW5mX2N0X2NhY2hlW2ZlYXR1cmVzXS5pbml0X2Nvbm50cmFjayA9IE5VTEw7CisJbmZfY3RfY2FjaGVbZmVhdHVyZXNdLnNpemUgPSAwOworCXdyaXRlX3VubG9ja19iaCgmbmZfY3RfY2FjaGVfbG9jayk7CisKKwlzeW5jaHJvbml6ZV9uZXQoKTsKKworCWttZW1fY2FjaGVfZGVzdHJveShjYWNoZXApOworCWtmcmVlKG5hbWUpOworCisJdXAoJm5mX2N0X2NhY2hlX211dGV4KTsKK30KKworaW50CituZl9jdF9nZXRfdHVwbGUoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJdW5zaWduZWQgaW50IG5ob2ZmLAorCQl1bnNpZ25lZCBpbnQgZGF0YW9mZiwKKwkJdV9pbnQxNl90IGwzbnVtLAorCQl1X2ludDhfdCBwcm90b251bSwKKwkJc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsCisJCWNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfbDNwcm90byAqbDNwcm90bywKKwkJY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19wcm90b2NvbCAqcHJvdG9jb2wpCit7CisJTkZfQ1RfVFVQTEVfVV9CTEFOSyh0dXBsZSk7CisKKwl0dXBsZS0+c3JjLmwzbnVtID0gbDNudW07CisJaWYgKGwzcHJvdG8tPnBrdF90b190dXBsZShza2IsIG5ob2ZmLCB0dXBsZSkgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwl0dXBsZS0+ZHN0LnByb3RvbnVtID0gcHJvdG9udW07CisJdHVwbGUtPmRzdC5kaXIgPSBJUF9DVF9ESVJfT1JJR0lOQUw7CisKKwlyZXR1cm4gcHJvdG9jb2wtPnBrdF90b190dXBsZShza2IsIGRhdGFvZmYsIHR1cGxlKTsKK30KKworaW50CituZl9jdF9pbnZlcnRfdHVwbGUoc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqaW52ZXJzZSwKKwkJICAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqb3JpZywKKwkJICAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19sM3Byb3RvICpsM3Byb3RvLAorCQkgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3Byb3RvY29sICpwcm90b2NvbCkKK3sKKwlORl9DVF9UVVBMRV9VX0JMQU5LKGludmVyc2UpOworCisJaW52ZXJzZS0+c3JjLmwzbnVtID0gb3JpZy0+c3JjLmwzbnVtOworCWlmIChsM3Byb3RvLT5pbnZlcnRfdHVwbGUoaW52ZXJzZSwgb3JpZykgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlpbnZlcnNlLT5kc3QuZGlyID0gIW9yaWctPmRzdC5kaXI7CisKKwlpbnZlcnNlLT5kc3QucHJvdG9udW0gPSBvcmlnLT5kc3QucHJvdG9udW07CisJcmV0dXJuIHByb3RvY29sLT5pbnZlcnRfdHVwbGUoaW52ZXJzZSwgb3JpZyk7Cit9CisKKy8qIG5mX2Nvbm50cmFja19leHBlY3QgaGVscGVyIGZ1bmN0aW9ucyAqLworc3RhdGljIHZvaWQgbmZfY3RfdW5saW5rX2V4cGVjdChzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwKQoreworCUFTU0VSVF9XUklURV9MT0NLKCZuZl9jb25udHJhY2tfbG9jayk7CisJTkZfQ1RfQVNTRVJUKCF0aW1lcl9wZW5kaW5nKCZleHBfdGltZW91dCkpOworCWxpc3RfZGVsKCZleHAtPmxpc3QpOworCU5GX0NUX1NUQVRfSU5DKGV4cGVjdF9kZWxldGUpOworCWV4cC0+bWFzdGVyLT5leHBlY3RpbmctLTsKKwluZl9jb25udHJhY2tfZXhwZWN0X3B1dChleHApOworfQorCitzdGF0aWMgdm9pZCBleHBlY3RhdGlvbl90aW1lZF9vdXQodW5zaWduZWQgbG9uZyB1bF9leHBlY3QpCit7CisJc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cCA9ICh2b2lkICopdWxfZXhwZWN0OworCisJd3JpdGVfbG9ja19iaCgmbmZfY29ubnRyYWNrX2xvY2spOworCW5mX2N0X3VubGlua19leHBlY3QoZXhwKTsKKwl3cml0ZV91bmxvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKKwluZl9jb25udHJhY2tfZXhwZWN0X3B1dChleHApOworfQorCisvKiBJZiBhbiBleHBlY3RhdGlvbiBmb3IgdGhpcyBjb25uZWN0aW9uIGlzIGZvdW5kLCBpdCBnZXRzIGRlbGV0ZSBmcm9tCisgKiBnbG9iYWwgbGlzdCB0aGVuIHJldHVybmVkLiAqLworc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICoKK2ZpbmRfZXhwZWN0YXRpb24oY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpCit7CisJc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGksICZuZl9jb25udHJhY2tfZXhwZWN0X2xpc3QsIGxpc3QpIHsKKwkvKiBJZiBtYXN0ZXIgaXMgbm90IGluIGhhc2ggdGFibGUgeWV0IChpZS4gcGFja2V0IGhhc24ndCBsZWZ0CisJICAgdGhpcyBtYWNoaW5lIHlldCksIGhvdyBjYW4gb3RoZXIgZW5kIGtub3cgYWJvdXQgZXhwZWN0ZWQ/CisJICAgSGVuY2UgdGhlc2UgYXJlIG5vdCB0aGUgZHJvaWRzIHlvdSBhcmUgbG9va2luZyBmb3IgKGlmCisJICAgbWFzdGVyIGN0IG5ldmVyIGdvdCBjb25maXJtZWQsIHdlJ2QgaG9sZCBhIHJlZmVyZW5jZSB0byBpdAorCSAgIGFuZCB3ZWlyZCB0aGluZ3Mgd291bGQgaGFwcGVuIHRvIGZ1dHVyZSBwYWNrZXRzKS4gKi8KKwkJaWYgKG5mX2N0X3R1cGxlX21hc2tfY21wKHR1cGxlLCAmaS0+dHVwbGUsICZpLT5tYXNrKQorCQkgICAgJiYgbmZfY3RfaXNfY29uZmlybWVkKGktPm1hc3RlcikpIHsKKwkJCWlmIChpLT5mbGFncyAmIE5GX0NUX0VYUEVDVF9QRVJNQU5FTlQpIHsKKwkJCQlhdG9taWNfaW5jKCZpLT51c2UpOworCQkJCXJldHVybiBpOworCQkJfSBlbHNlIGlmIChkZWxfdGltZXIoJmktPnRpbWVvdXQpKSB7CisJCQkJbmZfY3RfdW5saW5rX2V4cGVjdChpKTsKKwkJCQlyZXR1cm4gaTsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gTlVMTDsKK30KKworLyogZGVsZXRlIGFsbCBleHBlY3RhdGlvbnMgZm9yIHRoaXMgY29ubnRyYWNrICovCitzdGF0aWMgdm9pZCByZW1vdmVfZXhwZWN0YXRpb25zKHN0cnVjdCBuZl9jb25uICpjdCkKK3sKKwlzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqaSwgKnRtcDsKKworCS8qIE9wdGltaXphdGlvbjogbW9zdCBjb25uZWN0aW9uIG5ldmVyIGV4cGVjdCBhbnkgb3RoZXJzLiAqLworCWlmIChjdC0+ZXhwZWN0aW5nID09IDApCisJCXJldHVybjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpLCB0bXAsICZuZl9jb25udHJhY2tfZXhwZWN0X2xpc3QsIGxpc3QpIHsKKwkJaWYgKGktPm1hc3RlciA9PSBjdCAmJiBkZWxfdGltZXIoJmktPnRpbWVvdXQpKSB7CisJCQluZl9jdF91bmxpbmtfZXhwZWN0KGkpOworCQkJbmZfY29ubnRyYWNrX2V4cGVjdF9wdXQoaSk7CisgCQl9CisJfQorfQorCitzdGF0aWMgdm9pZAorY2xlYW5fZnJvbV9saXN0cyhzdHJ1Y3QgbmZfY29ubiAqY3QpCit7CisJdW5zaWduZWQgaW50IGhvLCBocjsKKwkKKwlERUJVR1AoImNsZWFuX2Zyb21fbGlzdHMoJXApXG4iLCBjdCk7CisJQVNTRVJUX1dSSVRFX0xPQ0soJm5mX2Nvbm50cmFja19sb2NrKTsKKworCWhvID0gaGFzaF9jb25udHJhY2soJmN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZSk7CisJaHIgPSBoYXNoX2Nvbm50cmFjaygmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfUkVQTFldLnR1cGxlKTsKKwlMSVNUX0RFTEVURSgmbmZfY29ubnRyYWNrX2hhc2hbaG9dLCAmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdKTsKKwlMSVNUX0RFTEVURSgmbmZfY29ubnRyYWNrX2hhc2hbaHJdLCAmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfUkVQTFldKTsKKworCS8qIERlc3Ryb3kgYWxsIHBlbmRpbmcgZXhwZWN0YXRpb25zICovCisJcmVtb3ZlX2V4cGVjdGF0aW9ucyhjdCk7Cit9CisKK3N0YXRpYyB2b2lkCitkZXN0cm95X2Nvbm50cmFjayhzdHJ1Y3QgbmZfY29ubnRyYWNrICpuZmN0KQoreworCXN0cnVjdCBuZl9jb25uICpjdCA9IChzdHJ1Y3QgbmZfY29ubiAqKW5mY3Q7CisJc3RydWN0IG5mX2Nvbm50cmFja19sM3Byb3RvICpsM3Byb3RvOworCXN0cnVjdCBuZl9jb25udHJhY2tfcHJvdG9jb2wgKnByb3RvOworCisJREVCVUdQKCJkZXN0cm95X2Nvbm50cmFjayglcClcbiIsIGN0KTsKKwlORl9DVF9BU1NFUlQoYXRvbWljX3JlYWQoJm5mY3QtPnVzZSkgPT0gMCk7CisJTkZfQ1RfQVNTRVJUKCF0aW1lcl9wZW5kaW5nKCZjdC0+dGltZW91dCkpOworCisJbmZfY29ubnRyYWNrX2V2ZW50KElQQ1RfREVTVFJPWSwgY3QpOworCXNldF9iaXQoSVBTX0RZSU5HX0JJVCwgJmN0LT5zdGF0dXMpOworCisJLyogVG8gbWFrZSBzdXJlIHdlIGRvbid0IGdldCBhbnkgd2VpcmQgbG9ja2luZyBpc3N1ZXMgaGVyZToKKwkgKiBkZXN0cm95X2Nvbm50cmFjaygpIE1VU1QgTk9UIGJlIGNhbGxlZCB3aXRoIGEgd3JpdGUgbG9jaworCSAqIHRvIG5mX2Nvbm50cmFja19sb2NrISEhIC1IVyAqLworCWwzcHJvdG8gPSBuZl9jdF9maW5kX2wzcHJvdG8oY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfUkVQTFldLnR1cGxlLnNyYy5sM251bSk7CisJaWYgKGwzcHJvdG8gJiYgbDNwcm90by0+ZGVzdHJveSkKKwkJbDNwcm90by0+ZGVzdHJveShjdCk7CisKKwlwcm90byA9IG5mX2N0X2ZpbmRfcHJvdG8oY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfUkVQTFldLnR1cGxlLnNyYy5sM251bSwKKwkJCQkgY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfUkVQTFldLnR1cGxlLmRzdC5wcm90b251bSk7CisJaWYgKHByb3RvICYmIHByb3RvLT5kZXN0cm95KQorCQlwcm90by0+ZGVzdHJveShjdCk7CisKKwlpZiAobmZfY29ubnRyYWNrX2Rlc3Ryb3llZCkKKwkJbmZfY29ubnRyYWNrX2Rlc3Ryb3llZChjdCk7CisKKwl3cml0ZV9sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7CisJLyogRXhwZWN0YXRpb25zIHdpbGwgaGF2ZSBiZWVuIHJlbW92ZWQgaW4gY2xlYW5fZnJvbV9saXN0cywKKwkgKiBleGNlcHQgVEZUUCBjYW4gY3JlYXRlIGFuIGV4cGVjdGF0aW9uIG9uIHRoZSBmaXJzdCBwYWNrZXQsCisJICogYmVmb3JlIGNvbm5lY3Rpb24gaXMgaW4gdGhlIGxpc3QsIHNvIHdlIG5lZWQgdG8gY2xlYW4gaGVyZSwKKwkgKiB0b28uICovCisJcmVtb3ZlX2V4cGVjdGF0aW9ucyhjdCk7CisKKwkvKiBXZSBvdmVybG9hZCBmaXJzdCB0dXBsZSB0byBsaW5rIGludG8gdW5jb25maXJtZWQgbGlzdC4gKi8KKwlpZiAoIW5mX2N0X2lzX2NvbmZpcm1lZChjdCkpIHsKKwkJQlVHX09OKGxpc3RfZW1wdHkoJmN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS5saXN0KSk7CisJCWxpc3RfZGVsKCZjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0ubGlzdCk7CisJfQorCisJTkZfQ1RfU1RBVF9JTkMoZGVsZXRlKTsKKwl3cml0ZV91bmxvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKKworCWlmIChjdC0+bWFzdGVyKQorCQluZl9jdF9wdXQoY3QtPm1hc3Rlcik7CisKKwlERUJVR1AoImRlc3Ryb3lfY29ubnRyYWNrOiByZXR1cm5pbmcgY3Q9JXAgdG8gc2xhYlxuIiwgY3QpOworCW5mX2Nvbm50cmFja19mcmVlKGN0KTsKK30KKworc3RhdGljIHZvaWQgZGVhdGhfYnlfdGltZW91dCh1bnNpZ25lZCBsb25nIHVsX2Nvbm50cmFjaykKK3sKKwlzdHJ1Y3QgbmZfY29ubiAqY3QgPSAodm9pZCAqKXVsX2Nvbm50cmFjazsKKworCXdyaXRlX2xvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKKwkvKiBJbnNpZGUgbG9jayBzbyBwcmVlbXB0IGlzIGRpc2FibGVkIG9uIG1vZHVsZSByZW1vdmFsIHBhdGguCisJICogT3RoZXJ3aXNlIHdlIGNhbiBnZXQgc3B1cmlvdXMgd2FybmluZ3MuICovCisJTkZfQ1RfU1RBVF9JTkMoZGVsZXRlX2xpc3QpOworCWNsZWFuX2Zyb21fbGlzdHMoY3QpOworCXdyaXRlX3VubG9ja19iaCgmbmZfY29ubnRyYWNrX2xvY2spOworCW5mX2N0X3B1dChjdCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50Citjb25udHJhY2tfdHVwbGVfY21wKGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCAqaSwKKwkJICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlLAorCQkgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmlnbm9yZWRfY29ubnRyYWNrKQoreworCUFTU0VSVF9SRUFEX0xPQ0soJm5mX2Nvbm50cmFja19sb2NrKTsKKwlyZXR1cm4gbmZfY3RfdHVwbGVoYXNoX3RvX2N0cmFjayhpKSAhPSBpZ25vcmVkX2Nvbm50cmFjaworCQkmJiBuZl9jdF90dXBsZV9lcXVhbCh0dXBsZSwgJmktPnR1cGxlKTsKK30KKworc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCAqCitfX25mX2Nvbm50cmFja19maW5kKGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlLAorCQkgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmlnbm9yZWRfY29ubnRyYWNrKQoreworCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCAqaDsKKwl1bnNpZ25lZCBpbnQgaGFzaCA9IGhhc2hfY29ubnRyYWNrKHR1cGxlKTsKKworCUFTU0VSVF9SRUFEX0xPQ0soJm5mX2Nvbm50cmFja19sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGgsICZuZl9jb25udHJhY2tfaGFzaFtoYXNoXSwgbGlzdCkgeworCQlpZiAoY29ubnRyYWNrX3R1cGxlX2NtcChoLCB0dXBsZSwgaWdub3JlZF9jb25udHJhY2spKSB7CisJCQlORl9DVF9TVEFUX0lOQyhmb3VuZCk7CisJCQlyZXR1cm4gaDsKKwkJfQorCQlORl9DVF9TVEFUX0lOQyhzZWFyY2hlZCk7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qIEZpbmQgYSBjb25uZWN0aW9uIGNvcnJlc3BvbmRpbmcgdG8gYSB0dXBsZS4gKi8KK3N0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCAqCituZl9jb25udHJhY2tfZmluZF9nZXQoY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsCisJCSAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25uICppZ25vcmVkX2Nvbm50cmFjaykKK3sKKwlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX2hhc2ggKmg7CisKKwlyZWFkX2xvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKKwloID0gX19uZl9jb25udHJhY2tfZmluZCh0dXBsZSwgaWdub3JlZF9jb25udHJhY2spOworCWlmIChoKQorCQlhdG9taWNfaW5jKCZuZl9jdF90dXBsZWhhc2hfdG9fY3RyYWNrKGgpLT5jdF9nZW5lcmFsLnVzZSk7CisJcmVhZF91bmxvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKKworCXJldHVybiBoOworfQorCisvKiBDb25maXJtIGEgY29ubmVjdGlvbiBnaXZlbiBza2I7IHBsYWNlcyBpdCBpbiBoYXNoIHRhYmxlICovCitpbnQKK19fbmZfY29ubnRyYWNrX2NvbmZpcm0oc3RydWN0IHNrX2J1ZmYgKipwc2tiKQoreworCXVuc2lnbmVkIGludCBoYXNoLCByZXBsX2hhc2g7CisJc3RydWN0IG5mX2Nvbm4gKmN0OworCWVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvOworCisJY3QgPSBuZl9jdF9nZXQoKnBza2IsICZjdGluZm8pOworCisJLyogaXB0X1JFSkVDVCB1c2VzIG5mX2Nvbm50cmFja19hdHRhY2ggdG8gYXR0YWNoIHJlbGF0ZWQKKwkgICBJQ01QL1RDUCBSU1QgcGFja2V0cyBpbiBvdGhlciBkaXJlY3Rpb24uICBBY3R1YWwgcGFja2V0CisJICAgd2hpY2ggY3JlYXRlZCBjb25uZWN0aW9uIHdpbGwgYmUgSVBfQ1RfTkVXIG9yIGZvciBhbgorCSAgIGV4cGVjdGVkIGNvbm5lY3Rpb24sIElQX0NUX1JFTEFURUQuICovCisJaWYgKENUSU5GTzJESVIoY3RpbmZvKSAhPSBJUF9DVF9ESVJfT1JJR0lOQUwpCisJCXJldHVybiBORl9BQ0NFUFQ7CisKKwloYXNoID0gaGFzaF9jb25udHJhY2soJmN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZSk7CisJcmVwbF9oYXNoID0gaGFzaF9jb25udHJhY2soJmN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX1JFUExZXS50dXBsZSk7CisKKwkvKiBXZSdyZSBub3QgaW4gaGFzaCB0YWJsZSwgYW5kIHdlIHJlZnVzZSB0byBzZXQgdXAgcmVsYXRlZAorCSAgIGNvbm5lY3Rpb25zIGZvciB1bmNvbmZpcm1lZCBjb25ucy4gIEJ1dCBwYWNrZXQgY29waWVzIGFuZAorCSAgIFJFSkVDVCB3aWxsIGdpdmUgc3B1cmlvdXMgd2FybmluZ3MgaGVyZS4gKi8KKwkvKiBORl9DVF9BU1NFUlQoYXRvbWljX3JlYWQoJmN0LT5jdF9nZW5lcmFsLnVzZSkgPT0gMSk7ICovCisKKwkvKiBObyBleHRlcm5hbCByZWZlcmVuY2VzIG1lYW5zIG5vb25lIGVsc2UgY291bGQgaGF2ZQorCSAgIGNvbmZpcm1lZCB1cy4gKi8KKwlORl9DVF9BU1NFUlQoIW5mX2N0X2lzX2NvbmZpcm1lZChjdCkpOworCURFQlVHUCgiQ29uZmlybWluZyBjb25udHJhY2sgJXBcbiIsIGN0KTsKKworCXdyaXRlX2xvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKKworCS8qIFNlZSBpZiB0aGVyZSdzIG9uZSBpbiB0aGUgbGlzdCBhbHJlYWR5LCBpbmNsdWRpbmcgcmV2ZXJzZToKKwkgICBOQVQgY291bGQgaGF2ZSBncmFiYmVkIGl0IHdpdGhvdXQgcmVhbGl6aW5nLCBzaW5jZSB3ZSdyZQorCSAgIG5vdCBpbiB0aGUgaGFzaC4gIElmIHRoZXJlIGlzLCB3ZSBsb3N0IHJhY2UuICovCisJaWYgKCFMSVNUX0ZJTkQoJm5mX2Nvbm50cmFja19oYXNoW2hhc2hdLAorCQkgICAgICAgY29ubnRyYWNrX3R1cGxlX2NtcCwKKwkJICAgICAgIHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCAqLAorCQkgICAgICAgJmN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZSwgTlVMTCkKKwkgICAgJiYgIUxJU1RfRklORCgmbmZfY29ubnRyYWNrX2hhc2hbcmVwbF9oYXNoXSwKKwkJCSAgY29ubnRyYWNrX3R1cGxlX2NtcCwKKwkJCSAgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZV9oYXNoICosCisJCQkgICZjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9SRVBMWV0udHVwbGUsIE5VTEwpKSB7CisJCS8qIFJlbW92ZSBmcm9tIHVuY29uZmlybWVkIGxpc3QgKi8KKwkJbGlzdF9kZWwoJmN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS5saXN0KTsKKworCQlsaXN0X3ByZXBlbmQoJm5mX2Nvbm50cmFja19oYXNoW2hhc2hdLAorCQkJICAgICAmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdKTsKKwkJbGlzdF9wcmVwZW5kKCZuZl9jb25udHJhY2tfaGFzaFtyZXBsX2hhc2hdLAorCQkJICAgICAmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfUkVQTFldKTsKKwkJLyogVGltZXIgcmVsYXRpdmUgdG8gY29uZmlybWF0aW9uIHRpbWUsIG5vdCBvcmlnaW5hbAorCQkgICBzZXR0aW5nIHRpbWUsIG90aGVyd2lzZSB3ZSdkIGdldCB0aW1lciB3cmFwIGluCisJCSAgIHdlaXJkIGRlbGF5IGNhc2VzLiAqLworCQljdC0+dGltZW91dC5leHBpcmVzICs9IGppZmZpZXM7CisJCWFkZF90aW1lcigmY3QtPnRpbWVvdXQpOworCQlhdG9taWNfaW5jKCZjdC0+Y3RfZ2VuZXJhbC51c2UpOworCQlzZXRfYml0KElQU19DT05GSVJNRURfQklULCAmY3QtPnN0YXR1cyk7CisJCU5GX0NUX1NUQVRfSU5DKGluc2VydCk7CisJCXdyaXRlX3VubG9ja19iaCgmbmZfY29ubnRyYWNrX2xvY2spOworCQlpZiAoY3QtPmhlbHBlcikKKwkJCW5mX2Nvbm50cmFja19ldmVudF9jYWNoZShJUENUX0hFTFBFUiwgKnBza2IpOworI2lmZGVmIENPTkZJR19ORl9OQVRfTkVFREVECisJCWlmICh0ZXN0X2JpdChJUFNfU1JDX05BVF9ET05FX0JJVCwgJmN0LT5zdGF0dXMpIHx8CisJCSAgICB0ZXN0X2JpdChJUFNfRFNUX05BVF9ET05FX0JJVCwgJmN0LT5zdGF0dXMpKQorCQkJbmZfY29ubnRyYWNrX2V2ZW50X2NhY2hlKElQQ1RfTkFUSU5GTywgKnBza2IpOworI2VuZGlmCisJCW5mX2Nvbm50cmFja19ldmVudF9jYWNoZShtYXN0ZXJfY3QoY3QpID8KKwkJCQkJIElQQ1RfUkVMQVRFRCA6IElQQ1RfTkVXLCAqcHNrYik7CisJCXJldHVybiBORl9BQ0NFUFQ7CisJfQorCisJTkZfQ1RfU1RBVF9JTkMoaW5zZXJ0X2ZhaWxlZCk7CisJd3JpdGVfdW5sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7CisJcmV0dXJuIE5GX0RST1A7Cit9CisKKy8qIFJldHVybnMgdHJ1ZSBpZiBhIGNvbm5lY3Rpb24gY29ycmVzcG9uZGluZ3MgdG8gdGhlIHR1cGxlIChyZXF1aXJlZAorICAgZm9yIE5BVCkuICovCitpbnQKK25mX2Nvbm50cmFja190dXBsZV90YWtlbihjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSwKKwkJCSBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqaWdub3JlZF9jb25udHJhY2spCit7CisJc3RydWN0IG5mX2Nvbm50cmFja190dXBsZV9oYXNoICpoOworCisJcmVhZF9sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7CisJaCA9IF9fbmZfY29ubnRyYWNrX2ZpbmQodHVwbGUsIGlnbm9yZWRfY29ubnRyYWNrKTsKKwlyZWFkX3VubG9ja19iaCgmbmZfY29ubnRyYWNrX2xvY2spOworCisJcmV0dXJuIGggIT0gTlVMTDsKK30KKworLyogVGhlcmUncyBhIHNtYWxsIHJhY2UgaGVyZSB3aGVyZSB3ZSBtYXkgZnJlZSBhIGp1c3QtYXNzdXJlZAorICAgY29ubmVjdGlvbi4gIFRvbyBiYWQ6IHdlJ3JlIGluIHRyb3VibGUgYW55d2F5LiAqLworc3RhdGljIGlubGluZSBpbnQgdW5yZXBsaWVkKGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCAqaSkKK3sKKwlyZXR1cm4gISh0ZXN0X2JpdChJUFNfQVNTVVJFRF9CSVQsCisJCQkgICZuZl9jdF90dXBsZWhhc2hfdG9fY3RyYWNrKGkpLT5zdGF0dXMpKTsKK30KKworc3RhdGljIGludCBlYXJseV9kcm9wKHN0cnVjdCBsaXN0X2hlYWQgKmNoYWluKQoreworCS8qIFRyYXZlcnNlIGJhY2t3YXJkczogZ2l2ZXMgdXMgb2xkZXN0LCB3aGljaCBpcyByb3VnaGx5IExSVSAqLworCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCAqaDsKKwlzdHJ1Y3QgbmZfY29ubiAqY3QgPSBOVUxMOworCWludCBkcm9wcGVkID0gMDsKKworCXJlYWRfbG9ja19iaCgmbmZfY29ubnRyYWNrX2xvY2spOworCWggPSBMSVNUX0ZJTkRfQihjaGFpbiwgdW5yZXBsaWVkLCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX2hhc2ggKik7CisJaWYgKGgpIHsKKwkJY3QgPSBuZl9jdF90dXBsZWhhc2hfdG9fY3RyYWNrKGgpOworCQlhdG9taWNfaW5jKCZjdC0+Y3RfZ2VuZXJhbC51c2UpOworCX0KKwlyZWFkX3VubG9ja19iaCgmbmZfY29ubnRyYWNrX2xvY2spOworCisJaWYgKCFjdCkKKwkJcmV0dXJuIGRyb3BwZWQ7CisKKwlpZiAoZGVsX3RpbWVyKCZjdC0+dGltZW91dCkpIHsKKwkJZGVhdGhfYnlfdGltZW91dCgodW5zaWduZWQgbG9uZyljdCk7CisJCWRyb3BwZWQgPSAxOworCQlORl9DVF9TVEFUX0lOQyhlYXJseV9kcm9wKTsKKwl9CisJbmZfY3RfcHV0KGN0KTsKKwlyZXR1cm4gZHJvcHBlZDsKK30KKworc3RhdGljIGlubGluZSBpbnQgaGVscGVyX2NtcChjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaSwKKwkJCSAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqcnR1cGxlKQoreworCXJldHVybiBuZl9jdF90dXBsZV9tYXNrX2NtcChydHVwbGUsICZpLT50dXBsZSwgJmktPm1hc2spOworfQorCitzdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKgorbmZfY3RfZmluZF9oZWxwZXIoY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpCit7CisJcmV0dXJuIExJU1RfRklORCgmaGVscGVycywgaGVscGVyX2NtcCwKKwkJCSBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqLAorCQkJIHR1cGxlKTsKK30KKworc3RhdGljIHN0cnVjdCBuZl9jb25uICoKK19fbmZfY29ubnRyYWNrX2FsbG9jKGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKm9yaWcsCisJCSAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqcmVwbCwKKwkJICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2wzcHJvdG8gKmwzcHJvdG8pCit7CisJc3RydWN0IG5mX2Nvbm4gKmNvbm50cmFjayA9IE5VTEw7CisJdV9pbnQzMl90IGZlYXR1cmVzID0gMDsKKworCWlmICghbmZfY29ubnRyYWNrX2hhc2hfcm5kX2luaXR0ZWQpIHsKKwkJZ2V0X3JhbmRvbV9ieXRlcygmbmZfY29ubnRyYWNrX2hhc2hfcm5kLCA0KTsKKwkJbmZfY29ubnRyYWNrX2hhc2hfcm5kX2luaXR0ZWQgPSAxOworCX0KKworCWlmIChuZl9jb25udHJhY2tfbWF4CisJICAgICYmIGF0b21pY19yZWFkKCZuZl9jb25udHJhY2tfY291bnQpID49IG5mX2Nvbm50cmFja19tYXgpIHsKKwkJdW5zaWduZWQgaW50IGhhc2ggPSBoYXNoX2Nvbm50cmFjayhvcmlnKTsKKwkJLyogVHJ5IGRyb3BwaW5nIGZyb20gdGhpcyBoYXNoIGNoYWluLiAqLworCQlpZiAoIWVhcmx5X2Ryb3AoJm5mX2Nvbm50cmFja19oYXNoW2hhc2hdKSkgeworCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkJICAgICAgICJuZl9jb25udHJhY2s6IHRhYmxlIGZ1bGwsIGRyb3BwaW5nIgorCQkJCSAgICAgICAiIHBhY2tldC5cbiIpOworCQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJCX0KKwl9CisKKwkvKiAgZmluZCBmZWF0dXJlcyBuZWVkZWQgYnkgdGhpcyBjb25udHJhY2suICovCisJZmVhdHVyZXMgPSBsM3Byb3RvLT5nZXRfZmVhdHVyZXMob3JpZyk7CisJcmVhZF9sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7CisJaWYgKG5mX2N0X2ZpbmRfaGVscGVyKHJlcGwpICE9IE5VTEwpCisJCWZlYXR1cmVzIHw9IE5GX0NUX0ZfSEVMUDsKKwlyZWFkX3VubG9ja19iaCgmbmZfY29ubnRyYWNrX2xvY2spOworCisJREVCVUdQKCJuZl9jb25udHJhY2tfYWxsb2M6IGZlYXR1cmVzPTB4JXhcbiIsIGZlYXR1cmVzKTsKKworCXJlYWRfbG9ja19iaCgmbmZfY3RfY2FjaGVfbG9jayk7CisKKwlpZiAoIW5mX2N0X2NhY2hlW2ZlYXR1cmVzXS51c2UpIHsKKwkJREVCVUdQKCJuZl9jb25udHJhY2tfYWxsb2M6IG5vdCBzdXBwb3J0ZWQgZmVhdHVyZXMgPSAweCV4XG4iLAorCQkJZmVhdHVyZXMpOworCQlnb3RvIG91dDsKKwl9CisKKwljb25udHJhY2sgPSBrbWVtX2NhY2hlX2FsbG9jKG5mX2N0X2NhY2hlW2ZlYXR1cmVzXS5jYWNoZXAsIEdGUF9BVE9NSUMpOworCWlmIChjb25udHJhY2sgPT0gTlVMTCkgeworCQlERUJVR1AoIm5mX2Nvbm50cmFja19hbGxvYzogQ2FuJ3QgYWxsb2MgY29ubnRyYWNrIGZyb20gY2FjaGVcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwltZW1zZXQoY29ubnRyYWNrLCAwLCBuZl9jdF9jYWNoZVtmZWF0dXJlc10uc2l6ZSk7CisJY29ubnRyYWNrLT5mZWF0dXJlcyA9IGZlYXR1cmVzOworCWlmIChuZl9jdF9jYWNoZVtmZWF0dXJlc10uaW5pdF9jb25udHJhY2sgJiYKKwkgICAgbmZfY3RfY2FjaGVbZmVhdHVyZXNdLmluaXRfY29ubnRyYWNrKGNvbm50cmFjaywgZmVhdHVyZXMpIDwgMCkgeworCQlERUJVR1AoIm5mX2Nvbm50cmFja19hbGxvYzogZmFpbGVkIHRvIGluaXRcbiIpOworCQlrbWVtX2NhY2hlX2ZyZWUobmZfY3RfY2FjaGVbZmVhdHVyZXNdLmNhY2hlcCwgY29ubnRyYWNrKTsKKwkJY29ubnRyYWNrID0gTlVMTDsKKwkJZ290byBvdXQ7CisJfQorCisJYXRvbWljX3NldCgmY29ubnRyYWNrLT5jdF9nZW5lcmFsLnVzZSwgMSk7CisJY29ubnRyYWNrLT5jdF9nZW5lcmFsLmRlc3Ryb3kgPSBkZXN0cm95X2Nvbm50cmFjazsKKwljb25udHJhY2stPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlID0gKm9yaWc7CisJY29ubnRyYWNrLT50dXBsZWhhc2hbSVBfQ1RfRElSX1JFUExZXS50dXBsZSA9ICpyZXBsOworCS8qIERvbid0IHNldCB0aW1lciB5ZXQ6IHdhaXQgZm9yIGNvbmZpcm1hdGlvbiAqLworCWluaXRfdGltZXIoJmNvbm50cmFjay0+dGltZW91dCk7CisJY29ubnRyYWNrLT50aW1lb3V0LmRhdGEgPSAodW5zaWduZWQgbG9uZyljb25udHJhY2s7CisJY29ubnRyYWNrLT50aW1lb3V0LmZ1bmN0aW9uID0gZGVhdGhfYnlfdGltZW91dDsKKworCWF0b21pY19pbmMoJm5mX2Nvbm50cmFja19jb3VudCk7CitvdXQ6CisJcmVhZF91bmxvY2tfYmgoJm5mX2N0X2NhY2hlX2xvY2spOworCXJldHVybiBjb25udHJhY2s7Cit9CisKK3N0cnVjdCBuZl9jb25uICpuZl9jb25udHJhY2tfYWxsb2MoY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqb3JpZywKKwkJCQkgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICpyZXBsKQoreworCXN0cnVjdCBuZl9jb25udHJhY2tfbDNwcm90byAqbDNwcm90bzsKKworCWwzcHJvdG8gPSBuZl9jdF9maW5kX2wzcHJvdG8ob3JpZy0+c3JjLmwzbnVtKTsKKwlyZXR1cm4gX19uZl9jb25udHJhY2tfYWxsb2Mob3JpZywgcmVwbCwgbDNwcm90byk7Cit9CisKK3ZvaWQgbmZfY29ubnRyYWNrX2ZyZWUoc3RydWN0IG5mX2Nvbm4gKmNvbm50cmFjaykKK3sKKwl1X2ludDMyX3QgZmVhdHVyZXMgPSBjb25udHJhY2stPmZlYXR1cmVzOworCU5GX0NUX0FTU0VSVChmZWF0dXJlcyA+PSBORl9DVF9GX0JBU0lDICYmIGZlYXR1cmVzIDwgTkZfQ1RfRl9OVU0pOworCURFQlVHUCgibmZfY29ubnRyYWNrX2ZyZWU6IGZlYXR1cmVzID0gMHgleCwgY29ubnRyYWNrPSVwXG4iLCBmZWF0dXJlcywKKwkgICAgICAgY29ubnRyYWNrKTsKKwlrbWVtX2NhY2hlX2ZyZWUobmZfY3RfY2FjaGVbZmVhdHVyZXNdLmNhY2hlcCwgY29ubnRyYWNrKTsKKwlhdG9taWNfZGVjKCZuZl9jb25udHJhY2tfY291bnQpOworfQorCisvKiBBbGxvY2F0ZSBhIG5ldyBjb25udHJhY2s6IHdlIHJldHVybiAtRU5PTUVNIGlmIGNsYXNzaWZpY2F0aW9uCisgICBmYWlsZWQgZHVlIHRvIHN0cmVzcy4gIE90aGVyd2lzZSBpdCByZWFsbHkgaXMgdW5jbGFzc2lmaWFibGUuICovCitzdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZV9oYXNoICoKK2luaXRfY29ubnRyYWNrKGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlLAorCSAgICAgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX2wzcHJvdG8gKmwzcHJvdG8sCisJICAgICAgIHN0cnVjdCBuZl9jb25udHJhY2tfcHJvdG9jb2wgKnByb3RvY29sLAorCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCSAgICAgICB1bnNpZ25lZCBpbnQgZGF0YW9mZikKK3sKKwlzdHJ1Y3QgbmZfY29ubiAqY29ubnRyYWNrOworCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgcmVwbF90dXBsZTsKKwlzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwOworCisJaWYgKCFuZl9jdF9pbnZlcnRfdHVwbGUoJnJlcGxfdHVwbGUsIHR1cGxlLCBsM3Byb3RvLCBwcm90b2NvbCkpIHsKKwkJREVCVUdQKCJDYW4ndCBpbnZlcnQgdHVwbGUuXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJY29ubnRyYWNrID0gX19uZl9jb25udHJhY2tfYWxsb2ModHVwbGUsICZyZXBsX3R1cGxlLCBsM3Byb3RvKTsKKwlpZiAoY29ubnRyYWNrID09IE5VTEwgfHwgSVNfRVJSKGNvbm50cmFjaykpIHsKKwkJREVCVUdQKCJDYW4ndCBhbGxvY2F0ZSBjb25udHJhY2suXG4iKTsKKwkJcmV0dXJuIChzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX2hhc2ggKiljb25udHJhY2s7CisJfQorCisJaWYgKCFwcm90b2NvbC0+bmV3KGNvbm50cmFjaywgc2tiLCBkYXRhb2ZmKSkgeworCQluZl9jb25udHJhY2tfZnJlZShjb25udHJhY2spOworCQlERUJVR1AoImluaXQgY29ubnRyYWNrOiBjYW4ndCB0cmFjayB3aXRoIHByb3RvIG1vZHVsZVxuIik7CisJCXJldHVybiBOVUxMOworCX0KKworCXdyaXRlX2xvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKKwlleHAgPSBmaW5kX2V4cGVjdGF0aW9uKHR1cGxlKTsKKworCWlmIChleHApIHsKKwkJREVCVUdQKCJjb25udHJhY2s6IGV4cGVjdGF0aW9uIGFycml2ZXMgY3Q9JXAgZXhwPSVwXG4iLAorCQkJY29ubnRyYWNrLCBleHApOworCQkvKiBXZWxjb21lLCBNci4gQm9uZC4gIFdlJ3ZlIGJlZW4gZXhwZWN0aW5nIHlvdS4uLiAqLworCQlfX3NldF9iaXQoSVBTX0VYUEVDVEVEX0JJVCwgJmNvbm50cmFjay0+c3RhdHVzKTsKKwkJY29ubnRyYWNrLT5tYXN0ZXIgPSBleHAtPm1hc3RlcjsKKyNpZmRlZiBDT05GSUdfTkZfQ09OTlRSQUNLX01BUksKKwkJY29ubnRyYWNrLT5tYXJrID0gZXhwLT5tYXN0ZXItPm1hcms7CisjZW5kaWYKKwkJbmZfY29ubnRyYWNrX2dldCgmY29ubnRyYWNrLT5tYXN0ZXItPmN0X2dlbmVyYWwpOworCQlORl9DVF9TVEFUX0lOQyhleHBlY3RfbmV3KTsKKwl9IGVsc2UgeworCQljb25udHJhY2stPmhlbHBlciA9IG5mX2N0X2ZpbmRfaGVscGVyKCZyZXBsX3R1cGxlKTsKKworCQlORl9DVF9TVEFUX0lOQyhuZXcpOworICAgICAgICB9CisKKwkvKiBPdmVybG9hZCB0dXBsZSBsaW5rZWQgbGlzdCB0byBwdXQgdXMgaW4gdW5jb25maXJtZWQgbGlzdC4gKi8KKwlsaXN0X2FkZCgmY29ubnRyYWNrLT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS5saXN0LCAmdW5jb25maXJtZWQpOworCisJd3JpdGVfdW5sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7CisKKwlpZiAoZXhwKSB7CisJCWlmIChleHAtPmV4cGVjdGZuKQorCQkJZXhwLT5leHBlY3Rmbihjb25udHJhY2ssIGV4cCk7CisJCW5mX2Nvbm50cmFja19leHBlY3RfcHV0KGV4cCk7CisJfQorCisJcmV0dXJuICZjb25udHJhY2stPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdOworfQorCisvKiBPbiBzdWNjZXNzLCByZXR1cm5zIGNvbm50cmFjayBwdHIsIHNldHMgc2tiLT5uZmN0IGFuZCBjdGluZm8gKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IG5mX2Nvbm4gKgorcmVzb2x2ZV9ub3JtYWxfY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwKKwkJICB1X2ludDE2X3QgbDNudW0sCisJCSAgdV9pbnQ4X3QgcHJvdG9udW0sCisJCSAgc3RydWN0IG5mX2Nvbm50cmFja19sM3Byb3RvICpsM3Byb3RvLAorCQkgIHN0cnVjdCBuZl9jb25udHJhY2tfcHJvdG9jb2wgKnByb3RvLAorCQkgIGludCAqc2V0X3JlcGx5LAorCQkgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gKmN0aW5mbykKK3sKKwlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlIHR1cGxlOworCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCAqaDsKKwlzdHJ1Y3QgbmZfY29ubiAqY3Q7CisKKwlpZiAoIW5mX2N0X2dldF90dXBsZShza2IsICh1bnNpZ25lZCBpbnQpKHNrYi0+bmgucmF3IC0gc2tiLT5kYXRhKSwKKwkJCSAgICAgZGF0YW9mZiwgbDNudW0sIHByb3RvbnVtLCAmdHVwbGUsIGwzcHJvdG8sCisJCQkgICAgIHByb3RvKSkgeworCQlERUJVR1AoInJlc29sdmVfbm9ybWFsX2N0OiBDYW4ndCBnZXQgdHVwbGVcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKiBsb29rIGZvciB0dXBsZSBtYXRjaCAqLworCWggPSBuZl9jb25udHJhY2tfZmluZF9nZXQoJnR1cGxlLCBOVUxMKTsKKwlpZiAoIWgpIHsKKwkJaCA9IGluaXRfY29ubnRyYWNrKCZ0dXBsZSwgbDNwcm90bywgcHJvdG8sIHNrYiwgZGF0YW9mZik7CisJCWlmICghaCkKKwkJCXJldHVybiBOVUxMOworCQlpZiAoSVNfRVJSKGgpKQorCQkJcmV0dXJuICh2b2lkICopaDsKKwl9CisJY3QgPSBuZl9jdF90dXBsZWhhc2hfdG9fY3RyYWNrKGgpOworCisJLyogSXQgZXhpc3RzOyB3ZSBoYXZlIChub24tZXhjbHVzaXZlKSByZWZlcmVuY2UuICovCisJaWYgKE5GX0NUX0RJUkVDVElPTihoKSA9PSBJUF9DVF9ESVJfUkVQTFkpIHsKKwkJKmN0aW5mbyA9IElQX0NUX0VTVEFCTElTSEVEICsgSVBfQ1RfSVNfUkVQTFk7CisJCS8qIFBsZWFzZSBzZXQgcmVwbHkgYml0IGlmIHRoaXMgcGFja2V0IE9LICovCisJCSpzZXRfcmVwbHkgPSAxOworCX0gZWxzZSB7CisJCS8qIE9uY2Ugd2UndmUgaGFkIHR3byB3YXkgY29tbXMsIGFsd2F5cyBFU1RBQkxJU0hFRC4gKi8KKwkJaWYgKHRlc3RfYml0KElQU19TRUVOX1JFUExZX0JJVCwgJmN0LT5zdGF0dXMpKSB7CisJCQlERUJVR1AoIm5mX2Nvbm50cmFja19pbjogbm9ybWFsIHBhY2tldCBmb3IgJXBcbiIsIGN0KTsKKwkJCSpjdGluZm8gPSBJUF9DVF9FU1RBQkxJU0hFRDsKKwkJfSBlbHNlIGlmICh0ZXN0X2JpdChJUFNfRVhQRUNURURfQklULCAmY3QtPnN0YXR1cykpIHsKKwkJCURFQlVHUCgibmZfY29ubnRyYWNrX2luOiByZWxhdGVkIHBhY2tldCBmb3IgJXBcbiIsIGN0KTsKKwkJCSpjdGluZm8gPSBJUF9DVF9SRUxBVEVEOworCQl9IGVsc2UgeworCQkJREVCVUdQKCJuZl9jb25udHJhY2tfaW46IG5ldyBwYWNrZXQgZm9yICVwXG4iLCBjdCk7CisJCQkqY3RpbmZvID0gSVBfQ1RfTkVXOworCQl9CisJCSpzZXRfcmVwbHkgPSAwOworCX0KKwlza2ItPm5mY3QgPSAmY3QtPmN0X2dlbmVyYWw7CisJc2tiLT5uZmN0aW5mbyA9ICpjdGluZm87CisJcmV0dXJuIGN0OworfQorCit1bnNpZ25lZCBpbnQKK25mX2Nvbm50cmFja19pbihpbnQgcGYsIHVuc2lnbmVkIGludCBob29rbnVtLCBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpCit7CisJc3RydWN0IG5mX2Nvbm4gKmN0OworCWVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvOworCXN0cnVjdCBuZl9jb25udHJhY2tfbDNwcm90byAqbDNwcm90bzsKKwlzdHJ1Y3QgbmZfY29ubnRyYWNrX3Byb3RvY29sICpwcm90bzsKKwl1bnNpZ25lZCBpbnQgZGF0YW9mZjsKKwl1X2ludDhfdCBwcm90b251bTsKKwlpbnQgc2V0X3JlcGx5ID0gMDsKKwlpbnQgcmV0OworCisJLyogUHJldmlvdXNseSBzZWVuIChsb29wYmFjayBvciB1bnRyYWNrZWQpPyAgSWdub3JlLiAqLworCWlmICgoKnBza2IpLT5uZmN0KSB7CisJCU5GX0NUX1NUQVRfSU5DKGlnbm9yZSk7CisJCXJldHVybiBORl9BQ0NFUFQ7CisJfQorCisJbDNwcm90byA9IG5mX2N0X2ZpbmRfbDNwcm90bygodV9pbnQxNl90KXBmKTsKKwlpZiAoKHJldCA9IGwzcHJvdG8tPnByZXBhcmUocHNrYiwgaG9va251bSwgJmRhdGFvZmYsICZwcm90b251bSkpIDw9IDApIHsKKwkJREVCVUdQKCJub3QgcHJlcGFyZWQgdG8gdHJhY2sgeWV0IG9yIGVycm9yIG9jY3VyZWRcbiIpOworCQlyZXR1cm4gLXJldDsKKwl9CisKKwlwcm90byA9IG5mX2N0X2ZpbmRfcHJvdG8oKHVfaW50MTZfdClwZiwgcHJvdG9udW0pOworCisJLyogSXQgbWF5IGJlIGFuIHNwZWNpYWwgcGFja2V0LCBlcnJvciwgdW5jbGVhbi4uLgorCSAqIGludmVyc2Ugb2YgdGhlIHJldHVybiBjb2RlIHRlbGxzIHRvIHRoZSBuZXRmaWx0ZXIKKwkgKiBjb3JlIHdoYXQgdG8gZG8gd2l0aCB0aGUgcGFja2V0LiAqLworCWlmIChwcm90by0+ZXJyb3IgIT0gTlVMTCAmJgorCSAgICAocmV0ID0gcHJvdG8tPmVycm9yKCpwc2tiLCBkYXRhb2ZmLCAmY3RpbmZvLCBwZiwgaG9va251bSkpIDw9IDApIHsKKwkJTkZfQ1RfU1RBVF9JTkMoZXJyb3IpOworCQlORl9DVF9TVEFUX0lOQyhpbnZhbGlkKTsKKwkJcmV0dXJuIC1yZXQ7CisJfQorCisJY3QgPSByZXNvbHZlX25vcm1hbF9jdCgqcHNrYiwgZGF0YW9mZiwgcGYsIHByb3RvbnVtLCBsM3Byb3RvLCBwcm90bywKKwkJCSAgICAgICAmc2V0X3JlcGx5LCAmY3RpbmZvKTsKKwlpZiAoIWN0KSB7CisJCS8qIE5vdCB2YWxpZCBwYXJ0IG9mIGEgY29ubmVjdGlvbiAqLworCQlORl9DVF9TVEFUX0lOQyhpbnZhbGlkKTsKKwkJcmV0dXJuIE5GX0FDQ0VQVDsKKwl9CisKKwlpZiAoSVNfRVJSKGN0KSkgeworCQkvKiBUb28gc3RyZXNzZWQgdG8gZGVhbC4gKi8KKwkJTkZfQ1RfU1RBVF9JTkMoZHJvcCk7CisJCXJldHVybiBORl9EUk9QOworCX0KKworCU5GX0NUX0FTU0VSVCgoKnBza2IpLT5uZmN0KTsKKworCXJldCA9IHByb3RvLT5wYWNrZXQoY3QsICpwc2tiLCBkYXRhb2ZmLCBjdGluZm8sIHBmLCBob29rbnVtKTsKKwlpZiAocmV0IDwgMCkgeworCQkvKiBJbnZhbGlkOiBpbnZlcnNlIG9mIHRoZSByZXR1cm4gY29kZSB0ZWxscworCQkgKiB0aGUgbmV0ZmlsdGVyIGNvcmUgd2hhdCB0byBkbyAqLworCQlERUJVR1AoIm5mX2Nvbm50cmFja19pbjogQ2FuJ3QgdHJhY2sgd2l0aCBwcm90byBtb2R1bGVcbiIpOworCQluZl9jb25udHJhY2tfcHV0KCgqcHNrYiktPm5mY3QpOworCQkoKnBza2IpLT5uZmN0ID0gTlVMTDsKKwkJTkZfQ1RfU1RBVF9JTkMoaW52YWxpZCk7CisJCXJldHVybiAtcmV0OworCX0KKworCWlmIChzZXRfcmVwbHkgJiYgIXRlc3RfYW5kX3NldF9iaXQoSVBTX1NFRU5fUkVQTFlfQklULCAmY3QtPnN0YXR1cykpCisJCW5mX2Nvbm50cmFja19ldmVudF9jYWNoZShJUENUX1NUQVRVUywgKnBza2IpOworCisJcmV0dXJuIHJldDsKK30KKworaW50IG5mX2N0X2ludmVydF90dXBsZXByKHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKmludmVyc2UsCisJCQkgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqb3JpZykKK3sKKwlyZXR1cm4gbmZfY3RfaW52ZXJ0X3R1cGxlKGludmVyc2UsIG9yaWcsCisJCQkJICBuZl9jdF9maW5kX2wzcHJvdG8ob3JpZy0+c3JjLmwzbnVtKSwKKwkJCQkgIG5mX2N0X2ZpbmRfcHJvdG8ob3JpZy0+c3JjLmwzbnVtLAorCQkJCQkJICAgb3JpZy0+ZHN0LnByb3RvbnVtKSk7Cit9CisKKy8qIFdvdWxkIHR3byBleHBlY3RlZCB0aGluZ3MgY2xhc2g/ICovCitzdGF0aWMgaW5saW5lIGludCBleHBlY3RfY2xhc2goY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmEsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmIpCit7CisJLyogUGFydCBjb3ZlcmVkIGJ5IGludGVyc2VjdGlvbiBvZiBtYXNrcyBtdXN0IGJlIHVuZXF1YWwsCisJICAgb3RoZXJ3aXNlIHRoZXkgY2xhc2ggKi8KKwlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlIGludGVyc2VjdF9tYXNrOworCWludCBjb3VudDsKKworCWludGVyc2VjdF9tYXNrLnNyYy5sM251bSA9IGEtPm1hc2suc3JjLmwzbnVtICYgYi0+bWFzay5zcmMubDNudW07CisJaW50ZXJzZWN0X21hc2suc3JjLnUuYWxsID0gYS0+bWFzay5zcmMudS5hbGwgJiBiLT5tYXNrLnNyYy51LmFsbDsKKwlpbnRlcnNlY3RfbWFzay5kc3QudS5hbGwgPSBhLT5tYXNrLmRzdC51LmFsbCAmIGItPm1hc2suZHN0LnUuYWxsOworCWludGVyc2VjdF9tYXNrLmRzdC5wcm90b251bSA9IGEtPm1hc2suZHN0LnByb3RvbnVtCisJCQkJCSYgYi0+bWFzay5kc3QucHJvdG9udW07CisKKwlmb3IgKGNvdW50ID0gMDsgY291bnQgPCBORl9DVF9UVVBMRV9MM1NJWkU7IGNvdW50KyspeworCQlpbnRlcnNlY3RfbWFzay5zcmMudTMuYWxsW2NvdW50XSA9CisJCQlhLT5tYXNrLnNyYy51My5hbGxbY291bnRdICYgYi0+bWFzay5zcmMudTMuYWxsW2NvdW50XTsKKwl9CisKKwlmb3IgKGNvdW50ID0gMDsgY291bnQgPCBORl9DVF9UVVBMRV9MM1NJWkU7IGNvdW50KyspeworCQlpbnRlcnNlY3RfbWFzay5kc3QudTMuYWxsW2NvdW50XSA9CisJCQlhLT5tYXNrLmRzdC51My5hbGxbY291bnRdICYgYi0+bWFzay5kc3QudTMuYWxsW2NvdW50XTsKKwl9CisKKwlyZXR1cm4gbmZfY3RfdHVwbGVfbWFza19jbXAoJmEtPnR1cGxlLCAmYi0+dHVwbGUsICZpbnRlcnNlY3RfbWFzayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGV4cGVjdF9tYXRjaGVzKGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICphLAorCQkJCSBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqYikKK3sKKwlyZXR1cm4gYS0+bWFzdGVyID09IGItPm1hc3RlcgorCQkmJiBuZl9jdF90dXBsZV9lcXVhbCgmYS0+dHVwbGUsICZiLT50dXBsZSkKKwkJJiYgbmZfY3RfdHVwbGVfZXF1YWwoJmEtPm1hc2ssICZiLT5tYXNrKTsKK30KKworLyogR2VuZXJhbGx5IGEgYmFkIGlkZWEgdG8gY2FsbCB0aGlzOiBjb3VsZCBoYXZlIG1hdGNoZWQgYWxyZWFkeS4gKi8KK3ZvaWQgbmZfY29ubnRyYWNrX3VuZXhwZWN0X3JlbGF0ZWQoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cCkKK3sKKwlzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqaTsKKworCXdyaXRlX2xvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKKwkvKiBjaG9vc2UgdGhlIHRoZSBvbGRlc3QgZXhwZWN0YXRpb24gdG8gZXZpY3QgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2UoaSwgJm5mX2Nvbm50cmFja19leHBlY3RfbGlzdCwgbGlzdCkgeworCQlpZiAoZXhwZWN0X21hdGNoZXMoaSwgZXhwKSAmJiBkZWxfdGltZXIoJmktPnRpbWVvdXQpKSB7CisJCQluZl9jdF91bmxpbmtfZXhwZWN0KGkpOworCQkJd3JpdGVfdW5sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7CisJCQluZl9jb25udHJhY2tfZXhwZWN0X3B1dChpKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKwl3cml0ZV91bmxvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKK30KKworLyogV2UgZG9uJ3QgaW5jcmVhc2UgdGhlIG1hc3RlciBjb25udHJhY2sgcmVmY291bnQgZm9yIG5vbi1mdWxmaWxsZWQKKyAqIGNvbm50cmFja3MuIER1cmluZyB0aGUgY29ubnRyYWNrIGRlc3RydWN0aW9uLCB0aGUgZXhwZWN0YXRpb25zIGFyZQorICogYWx3YXlzIGtpbGxlZCBiZWZvcmUgdGhlIGNvbm50cmFjayBpdHNlbGYgKi8KK3N0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpuZl9jb25udHJhY2tfZXhwZWN0X2FsbG9jKHN0cnVjdCBuZl9jb25uICptZSkKK3sKKwlzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqbmV3OworCisJbmV3ID0ga21lbV9jYWNoZV9hbGxvYyhuZl9jb25udHJhY2tfZXhwZWN0X2NhY2hlcCwgR0ZQX0FUT01JQyk7CisJaWYgKCFuZXcpIHsKKwkJREVCVUdQKCJleHBlY3RfcmVsYXRlZDogT09NIGFsbG9jYXRpbmcgZXhwZWN0XG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCW5ldy0+bWFzdGVyID0gbWU7CisJYXRvbWljX3NldCgmbmV3LT51c2UsIDEpOworCXJldHVybiBuZXc7Cit9CisKK3ZvaWQgbmZfY29ubnRyYWNrX2V4cGVjdF9wdXQoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cCkKK3sKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmZXhwLT51c2UpKQorCQlrbWVtX2NhY2hlX2ZyZWUobmZfY29ubnRyYWNrX2V4cGVjdF9jYWNoZXAsIGV4cCk7Cit9CisKK3N0YXRpYyB2b2lkIG5mX2Nvbm50cmFja19leHBlY3RfaW5zZXJ0KHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHApCit7CisJYXRvbWljX2luYygmZXhwLT51c2UpOworCWV4cC0+bWFzdGVyLT5leHBlY3RpbmcrKzsKKwlsaXN0X2FkZCgmZXhwLT5saXN0LCAmbmZfY29ubnRyYWNrX2V4cGVjdF9saXN0KTsKKworCWluaXRfdGltZXIoJmV4cC0+dGltZW91dCk7CisJZXhwLT50aW1lb3V0LmRhdGEgPSAodW5zaWduZWQgbG9uZylleHA7CisJZXhwLT50aW1lb3V0LmZ1bmN0aW9uID0gZXhwZWN0YXRpb25fdGltZWRfb3V0OworCWV4cC0+dGltZW91dC5leHBpcmVzID0gamlmZmllcyArIGV4cC0+bWFzdGVyLT5oZWxwZXItPnRpbWVvdXQgKiBIWjsKKwlhZGRfdGltZXIoJmV4cC0+dGltZW91dCk7CisKKwlhdG9taWNfaW5jKCZleHAtPnVzZSk7CisJTkZfQ1RfU1RBVF9JTkMoZXhwZWN0X2NyZWF0ZSk7Cit9CisKKy8qIFJhY2Ugd2l0aCBleHBlY3RhdGlvbnMgYmVpbmcgdXNlZCBtZWFucyB3ZSBjb3VsZCBoYXZlIG5vbmUgdG8gZmluZDsgT0suICovCitzdGF0aWMgdm9pZCBldmljdF9vbGRlc3RfZXhwZWN0KHN0cnVjdCBuZl9jb25uICptYXN0ZXIpCit7CisJc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2UoaSwgJm5mX2Nvbm50cmFja19leHBlY3RfbGlzdCwgbGlzdCkgeworCQlpZiAoaS0+bWFzdGVyID09IG1hc3RlcikgeworCQkJaWYgKGRlbF90aW1lcigmaS0+dGltZW91dCkpIHsKKwkJCQluZl9jdF91bmxpbmtfZXhwZWN0KGkpOworCQkJCW5mX2Nvbm50cmFja19leHBlY3RfcHV0KGkpOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHJlZnJlc2hfdGltZXIoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmkpCit7CisJaWYgKCFkZWxfdGltZXIoJmktPnRpbWVvdXQpKQorCQlyZXR1cm4gMDsKKworCWktPnRpbWVvdXQuZXhwaXJlcyA9IGppZmZpZXMgKyBpLT5tYXN0ZXItPmhlbHBlci0+dGltZW91dCpIWjsKKwlhZGRfdGltZXIoJmktPnRpbWVvdXQpOworCXJldHVybiAxOworfQorCitpbnQgbmZfY29ubnRyYWNrX2V4cGVjdF9yZWxhdGVkKHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHBlY3QpCit7CisJc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmk7CisJaW50IHJldDsKKworCURFQlVHUCgibmZfY29ubnRyYWNrX2V4cGVjdF9yZWxhdGVkICVwXG4iLCByZWxhdGVkX3RvKTsKKwlERUJVR1AoInR1cGxlOiAiKTsgTkZfQ1RfRFVNUF9UVVBMRSgmZXhwZWN0LT50dXBsZSk7CisJREVCVUdQKCJtYXNrOiAgIik7IE5GX0NUX0RVTVBfVFVQTEUoJmV4cGVjdC0+bWFzayk7CisKKwl3cml0ZV9sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShpLCAmbmZfY29ubnRyYWNrX2V4cGVjdF9saXN0LCBsaXN0KSB7CisJCWlmIChleHBlY3RfbWF0Y2hlcyhpLCBleHBlY3QpKSB7CisJCQkvKiBSZWZyZXNoIHRpbWVyOiBpZiBpdCdzIGR5aW5nLCBpZ25vcmUuLiAqLworCQkJaWYgKHJlZnJlc2hfdGltZXIoaSkpIHsKKwkJCQlyZXQgPSAwOworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9IGVsc2UgaWYgKGV4cGVjdF9jbGFzaChpLCBleHBlY3QpKSB7CisJCQlyZXQgPSAtRUJVU1k7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKwkvKiBXaWxsIGJlIG92ZXIgbGltaXQ/ICovCisJaWYgKGV4cGVjdC0+bWFzdGVyLT5oZWxwZXItPm1heF9leHBlY3RlZCAmJiAKKwkgICAgZXhwZWN0LT5tYXN0ZXItPmV4cGVjdGluZyA+PSBleHBlY3QtPm1hc3Rlci0+aGVscGVyLT5tYXhfZXhwZWN0ZWQpCisJCWV2aWN0X29sZGVzdF9leHBlY3QoZXhwZWN0LT5tYXN0ZXIpOworCisJbmZfY29ubnRyYWNrX2V4cGVjdF9pbnNlcnQoZXhwZWN0KTsKKwluZl9jb25udHJhY2tfZXhwZWN0X2V2ZW50KElQRVhQX05FVywgZXhwZWN0KTsKKwlyZXQgPSAwOworb3V0OgorCXdyaXRlX3VubG9ja19iaCgmbmZfY29ubnRyYWNrX2xvY2spOworCXJldHVybiByZXQ7Cit9CisKKy8qIEFsdGVyIHJlcGx5IHR1cGxlIChtYXliZSBhbHRlciBoZWxwZXIpLiAgVGhpcyBpcyBmb3IgTkFULCBhbmQgaXMKKyAgIGltcGxpY2l0bHkgcmFjeTogc2VlIF9fbmZfY29ubnRyYWNrX2NvbmZpcm0gKi8KK3ZvaWQgbmZfY29ubnRyYWNrX2FsdGVyX3JlcGx5KHN0cnVjdCBuZl9jb25uICpjb25udHJhY2ssCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICpuZXdyZXBseSkKK3sKKwl3cml0ZV9sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7CisJLyogU2hvdWxkIGJlIHVuY29uZmlybWVkLCBzbyBub3QgaW4gaGFzaCB0YWJsZSB5ZXQgKi8KKwlORl9DVF9BU1NFUlQoIW5mX2N0X2lzX2NvbmZpcm1lZChjb25udHJhY2spKTsKKworCURFQlVHUCgiQWx0ZXJpbmcgcmVwbHkgdHVwbGUgb2YgJXAgdG8gIiwgY29ubnRyYWNrKTsKKwlORl9DVF9EVU1QX1RVUExFKG5ld3JlcGx5KTsKKworCWNvbm50cmFjay0+dHVwbGVoYXNoW0lQX0NUX0RJUl9SRVBMWV0udHVwbGUgPSAqbmV3cmVwbHk7CisJaWYgKCFjb25udHJhY2stPm1hc3RlciAmJiBjb25udHJhY2stPmV4cGVjdGluZyA9PSAwKQorCQljb25udHJhY2stPmhlbHBlciA9IG5mX2N0X2ZpbmRfaGVscGVyKG5ld3JlcGx5KTsKKwl3cml0ZV91bmxvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKK30KKworaW50IG5mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKm1lKQoreworCWludCByZXQ7CisJQlVHX09OKG1lLT50aW1lb3V0ID09IDApOworCisJcmV0ID0gbmZfY29ubnRyYWNrX3JlZ2lzdGVyX2NhY2hlKE5GX0NUX0ZfSEVMUCwgIm5mX2Nvbm50cmFjazpoZWxwIiwKKwkJCQkJICBzaXplb2Yoc3RydWN0IG5mX2Nvbm4pCisJCQkJCSAgKyBzaXplb2YodW5pb24gbmZfY29ubnRyYWNrX2hlbHApCisJCQkJCSAgKyBfX2FsaWdub2ZfXyh1bmlvbiBuZl9jb25udHJhY2tfaGVscCksCisJCQkJCSAgaW5pdF9jb25udHJhY2tfZm9yX2hlbHBlcik7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJuZl9jb25udHJhY2tfaGVscGVyX3JlaWdzdGVyOiBVbmFibGUgdG8gY3JlYXRlIHNsYWIgY2FjaGUgZm9yIGNvbm50cmFja3NcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwl3cml0ZV9sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7CisJbGlzdF9wcmVwZW5kKCZoZWxwZXJzLCBtZSk7CisJd3JpdGVfdW5sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgdW5oZWxwKHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCAqaSwKKwkJCSBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqbWUpCit7CisJaWYgKG5mX2N0X3R1cGxlaGFzaF90b19jdHJhY2soaSktPmhlbHBlciA9PSBtZSkgeworCQluZl9jb25udHJhY2tfZXZlbnQoSVBDVF9IRUxQRVIsIG5mX2N0X3R1cGxlaGFzaF90b19jdHJhY2soaSkpOworCQluZl9jdF90dXBsZWhhc2hfdG9fY3RyYWNrKGkpLT5oZWxwZXIgPSBOVUxMOworCX0KKwlyZXR1cm4gMDsKK30KKwordm9pZCBuZl9jb25udHJhY2tfaGVscGVyX3VucmVnaXN0ZXIoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKm1lKQoreworCXVuc2lnbmVkIGludCBpOworCXN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHAsICp0bXA7CisKKwkvKiBOZWVkIHdyaXRlIGxvY2sgaGVyZSwgdG8gZGVsZXRlIGhlbHBlci4gKi8KKwl3cml0ZV9sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7CisJTElTVF9ERUxFVEUoJmhlbHBlcnMsIG1lKTsKKworCS8qIEdldCByaWQgb2YgZXhwZWN0YXRpb25zICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGV4cCwgdG1wLCAmbmZfY29ubnRyYWNrX2V4cGVjdF9saXN0LCBsaXN0KSB7CisJCWlmIChleHAtPm1hc3Rlci0+aGVscGVyID09IG1lICYmIGRlbF90aW1lcigmZXhwLT50aW1lb3V0KSkgeworCQkJbmZfY3RfdW5saW5rX2V4cGVjdChleHApOworCQkJbmZfY29ubnRyYWNrX2V4cGVjdF9wdXQoZXhwKTsKKwkJfQorCX0KKworCS8qIEdldCByaWQgb2YgZXhwZWN0ZWRzLCBzZXQgaGVscGVycyB0byBOVUxMLiAqLworCUxJU1RfRklORF9XKCZ1bmNvbmZpcm1lZCwgdW5oZWxwLCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX2hhc2gqLCBtZSk7CisJZm9yIChpID0gMDsgaSA8IG5mX2Nvbm50cmFja19odGFibGVfc2l6ZTsgaSsrKQorCQlMSVNUX0ZJTkRfVygmbmZfY29ubnRyYWNrX2hhc2hbaV0sIHVuaGVscCwKKwkJCSAgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX2hhc2ggKiwgbWUpOworCXdyaXRlX3VubG9ja19iaCgmbmZfY29ubnRyYWNrX2xvY2spOworCisJLyogU29tZW9uZSBjb3VsZCBiZSBzdGlsbCBsb29raW5nIGF0IHRoZSBoZWxwZXIgaW4gYSBiaC4gKi8KKwlzeW5jaHJvbml6ZV9uZXQoKTsKK30KKworLyogUmVmcmVzaCBjb25udHJhY2sgZm9yIHRoaXMgbWFueSBqaWZmaWVzIGFuZCBkbyBhY2NvdW50aW5nIGlmIGRvX2FjY3QgaXMgMSAqLwordm9pZCBfX25mX2N0X3JlZnJlc2hfYWNjdChzdHJ1Y3QgbmZfY29ubiAqY3QsCisJCQkgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkJICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICB1bnNpZ25lZCBsb25nIGV4dHJhX2ppZmZpZXMsCisJCQkgIGludCBkb19hY2N0KQoreworCWludCBldmVudCA9IDA7CisKKwlORl9DVF9BU1NFUlQoY3QtPnRpbWVvdXQuZGF0YSA9PSAodW5zaWduZWQgbG9uZyljdCk7CisJTkZfQ1RfQVNTRVJUKHNrYik7CisKKwl3cml0ZV9sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7CisKKwkvKiBJZiBub3QgaW4gaGFzaCB0YWJsZSwgdGltZXIgd2lsbCBub3QgYmUgYWN0aXZlIHlldCAqLworCWlmICghbmZfY3RfaXNfY29uZmlybWVkKGN0KSkgeworCQljdC0+dGltZW91dC5leHBpcmVzID0gZXh0cmFfamlmZmllczsKKwkJZXZlbnQgPSBJUENUX1JFRlJFU0g7CisJfSBlbHNlIHsKKwkJLyogTmVlZCBkZWxfdGltZXIgZm9yIHJhY2UgYXZvaWRhbmNlIChtYXkgYWxyZWFkeSBiZSBkeWluZykuICovCisJCWlmIChkZWxfdGltZXIoJmN0LT50aW1lb3V0KSkgeworCQkJY3QtPnRpbWVvdXQuZXhwaXJlcyA9IGppZmZpZXMgKyBleHRyYV9qaWZmaWVzOworCQkJYWRkX3RpbWVyKCZjdC0+dGltZW91dCk7CisJCQlldmVudCA9IElQQ1RfUkVGUkVTSDsKKwkJfQorCX0KKworI2lmZGVmIENPTkZJR19ORl9DVF9BQ0NUCisJaWYgKGRvX2FjY3QpIHsKKwkJY3QtPmNvdW50ZXJzW0NUSU5GTzJESVIoY3RpbmZvKV0ucGFja2V0cysrOworCQljdC0+Y291bnRlcnNbQ1RJTkZPMkRJUihjdGluZm8pXS5ieXRlcyArPQorCQkJc2tiLT5sZW4gLSAodW5zaWduZWQgaW50KShza2ItPm5oLnJhdyAtIHNrYi0+ZGF0YSk7CisJaWYgKChjdC0+Y291bnRlcnNbQ1RJTkZPMkRJUihjdGluZm8pXS5wYWNrZXRzICYgMHg4MDAwMDAwMCkKKwkgICAgfHwgKGN0LT5jb3VudGVyc1tDVElORk8yRElSKGN0aW5mbyldLmJ5dGVzICYgMHg4MDAwMDAwMCkpCisJCWV2ZW50IHw9IElQQ1RfQ09VTlRFUl9GSUxMSU5HOworCX0KKyNlbmRpZgorCisJd3JpdGVfdW5sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7CisKKwkvKiBtdXN0IGJlIHVubG9ja2VkIHdoZW4gY2FsbGluZyBldmVudCBjYWNoZSAqLworCWlmIChldmVudCkKKwkJbmZfY29ubnRyYWNrX2V2ZW50X2NhY2hlKGV2ZW50LCBza2IpOworfQorCisvKiBVc2VkIGJ5IGlwdF9SRUpFQ1QgYW5kIGlwNnRfUkVKRUNULiAqLwordm9pZCBfX25mX2Nvbm50cmFja19hdHRhY2goc3RydWN0IHNrX2J1ZmYgKm5za2IsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IG5mX2Nvbm4gKmN0OworCWVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvOworCisJLyogVGhpcyBJQ01QIGlzIGluIHJldmVyc2UgZGlyZWN0aW9uIHRvIHRoZSBwYWNrZXQgd2hpY2ggY2F1c2VkIGl0ICovCisJY3QgPSBuZl9jdF9nZXQoc2tiLCAmY3RpbmZvKTsKKwlpZiAoQ1RJTkZPMkRJUihjdGluZm8pID09IElQX0NUX0RJUl9PUklHSU5BTCkKKwkJY3RpbmZvID0gSVBfQ1RfUkVMQVRFRCArIElQX0NUX0lTX1JFUExZOworCWVsc2UKKwkJY3RpbmZvID0gSVBfQ1RfUkVMQVRFRDsKKworCS8qIEF0dGFjaCB0byBuZXcgc2tidWZmLCBhbmQgaW5jcmVtZW50IGNvdW50ICovCisJbnNrYi0+bmZjdCA9ICZjdC0+Y3RfZ2VuZXJhbDsKKwluc2tiLT5uZmN0aW5mbyA9IGN0aW5mbzsKKwluZl9jb25udHJhY2tfZ2V0KG5za2ItPm5mY3QpOworfQorCitzdGF0aWMgaW5saW5lIGludAorZG9faXRlcihjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX2hhc2ggKmksCisJaW50ICgqaXRlcikoc3RydWN0IG5mX2Nvbm4gKmksIHZvaWQgKmRhdGEpLAorCXZvaWQgKmRhdGEpCit7CisJcmV0dXJuIGl0ZXIobmZfY3RfdHVwbGVoYXNoX3RvX2N0cmFjayhpKSwgZGF0YSk7Cit9CisKKy8qIEJyaW5nIG91dCB5YSBkZWFkISAqLworc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCAqCitnZXRfbmV4dF9jb3Jwc2UoaW50ICgqaXRlcikoc3RydWN0IG5mX2Nvbm4gKmksIHZvaWQgKmRhdGEpLAorCQl2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgKmJ1Y2tldCkKK3sKKwlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX2hhc2ggKmggPSBOVUxMOworCisJd3JpdGVfbG9ja19iaCgmbmZfY29ubnRyYWNrX2xvY2spOworCWZvciAoOyAqYnVja2V0IDwgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplOyAoKmJ1Y2tldCkrKykgeworCQloID0gTElTVF9GSU5EX1coJm5mX2Nvbm50cmFja19oYXNoWypidWNrZXRdLCBkb19pdGVyLAorCQkJCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCAqLCBpdGVyLCBkYXRhKTsKKwkJaWYgKGgpCisJCQlicmVhazsKKyAJfQorCWlmICghaCkKKwkJaCA9IExJU1RfRklORF9XKCZ1bmNvbmZpcm1lZCwgZG9faXRlciwKKwkJCQlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX2hhc2ggKiwgaXRlciwgZGF0YSk7CisJaWYgKGgpCisJCWF0b21pY19pbmMoJm5mX2N0X3R1cGxlaGFzaF90b19jdHJhY2soaCktPmN0X2dlbmVyYWwudXNlKTsKKwl3cml0ZV91bmxvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKKworCXJldHVybiBoOworfQorCit2b2lkCituZl9jdF9pdGVyYXRlX2NsZWFudXAoaW50ICgqaXRlcikoc3RydWN0IG5mX2Nvbm4gKmksIHZvaWQgKmRhdGEpLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCAqaDsKKwl1bnNpZ25lZCBpbnQgYnVja2V0ID0gMDsKKworCXdoaWxlICgoaCA9IGdldF9uZXh0X2NvcnBzZShpdGVyLCBkYXRhLCAmYnVja2V0KSkgIT0gTlVMTCkgeworCQlzdHJ1Y3QgbmZfY29ubiAqY3QgPSBuZl9jdF90dXBsZWhhc2hfdG9fY3RyYWNrKGgpOworCQkvKiBUaW1lIHRvIHB1c2ggdXAgZGFpc2VzLi4uICovCisJCWlmIChkZWxfdGltZXIoJmN0LT50aW1lb3V0KSkKKwkJCWRlYXRoX2J5X3RpbWVvdXQoKHVuc2lnbmVkIGxvbmcpY3QpOworCQkvKiAuLi4gZWxzZSB0aGUgdGltZXIgd2lsbCBnZXQgaGltIHNvb24uICovCisKKwkJbmZfY3RfcHV0KGN0KTsKKwl9Cit9CisKK3N0YXRpYyBpbnQga2lsbF9hbGwoc3RydWN0IG5mX2Nvbm4gKmksIHZvaWQgKmRhdGEpCit7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfY29ubnRyYWNrX2hhc2goc3RydWN0IGxpc3RfaGVhZCAqaGFzaCwgaW50IHZtYWxsb2NlZCwgaW50IHNpemUpCit7CisJaWYgKHZtYWxsb2NlZCkKKwkJdmZyZWUoaGFzaCk7CisJZWxzZQorCQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKWhhc2gsIAorCQkJICAgZ2V0X29yZGVyKHNpemVvZihzdHJ1Y3QgbGlzdF9oZWFkKSAqIHNpemUpKTsKK30KKworLyogTWlzaGVhcmluZyB0aGUgdm9pY2VzIGluIGhpcyBoZWFkLCBvdXIgaGVybyB3b25kZXJzIGhvdyBoZSdzCisgICBzdXBwb3NlZCB0byBraWxsIHRoZSBtYWxsLiAqLwordm9pZCBuZl9jb25udHJhY2tfY2xlYW51cCh2b2lkKQoreworCWludCBpOworCisJLyogVGhpcyBtYWtlcyBzdXJlIGFsbCBjdXJyZW50IHBhY2tldHMgaGF2ZSBwYXNzZWQgdGhyb3VnaAorCSAgIG5ldGZpbHRlciBmcmFtZXdvcmsuICBSb2xsIG9uLCB0d28tc3RhZ2UgbW9kdWxlCisJICAgZGVsZXRlLi4uICovCisJc3luY2hyb25pemVfbmV0KCk7CisKKwluZl9jdF9ldmVudF9jYWNoZV9mbHVzaCgpOworIGlfc2VlX2RlYWRfcGVvcGxlOgorCW5mX2N0X2l0ZXJhdGVfY2xlYW51cChraWxsX2FsbCwgTlVMTCk7CisJaWYgKGF0b21pY19yZWFkKCZuZl9jb25udHJhY2tfY291bnQpICE9IDApIHsKKwkJc2NoZWR1bGUoKTsKKwkJZ290byBpX3NlZV9kZWFkX3Blb3BsZTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgTkZfQ1RfRl9OVU07IGkrKykgeworCQlpZiAobmZfY3RfY2FjaGVbaV0udXNlID09IDApCisJCQljb250aW51ZTsKKworCQlORl9DVF9BU1NFUlQobmZfY3RfY2FjaGVbaV0udXNlID09IDEpOworCQluZl9jdF9jYWNoZVtpXS51c2UgPSAxOworCQluZl9jb25udHJhY2tfdW5yZWdpc3Rlcl9jYWNoZShpKTsKKwl9CisJa21lbV9jYWNoZV9kZXN0cm95KG5mX2Nvbm50cmFja19leHBlY3RfY2FjaGVwKTsKKwlmcmVlX2Nvbm50cmFja19oYXNoKG5mX2Nvbm50cmFja19oYXNoLCBuZl9jb25udHJhY2tfdm1hbGxvYywKKwkJCSAgICBuZl9jb25udHJhY2tfaHRhYmxlX3NpemUpOworfQorCitzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCAqYWxsb2NfaGFzaHRhYmxlKGludCBzaXplLCBpbnQgKnZtYWxsb2NlZCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpoYXNoOworCXVuc2lnbmVkIGludCBpOworCisJKnZtYWxsb2NlZCA9IDA7IAorCWhhc2ggPSAodm9pZCopX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMLCAKKwkJCQkgICAgICAgZ2V0X29yZGVyKHNpemVvZihzdHJ1Y3QgbGlzdF9oZWFkKQorCQkJCQkJICogc2l6ZSkpOworCWlmICghaGFzaCkgeyAKKwkJKnZtYWxsb2NlZCA9IDE7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIm5mX2Nvbm50cmFjazogZmFsbGluZyBiYWNrIHRvIHZtYWxsb2MuXG4iKTsKKwkJaGFzaCA9IHZtYWxsb2Moc2l6ZW9mKHN0cnVjdCBsaXN0X2hlYWQpICogc2l6ZSk7CisJfQorCisJaWYgKGhhc2gpCisJCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIAorCQkJSU5JVF9MSVNUX0hFQUQoJmhhc2hbaV0pOworCisJcmV0dXJuIGhhc2g7Cit9CisKK2ludCBzZXRfaGFzaHNpemUoY29uc3QgY2hhciAqdmFsLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCkKK3sKKwlpbnQgaSwgYnVja2V0LCBoYXNoc2l6ZSwgdm1hbGxvY2VkOworCWludCBvbGRfdm1hbGxvY2VkLCBvbGRfc2l6ZTsKKwlpbnQgcm5kOworCXN0cnVjdCBsaXN0X2hlYWQgKmhhc2gsICpvbGRfaGFzaDsKKwlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX2hhc2ggKmg7CisKKwkvKiBPbiBib290LCB3ZSBjYW4gc2V0IHRoaXMgd2l0aG91dCBhbnkgZmFuY3kgbG9ja2luZy4gKi8KKwlpZiAoIW5mX2Nvbm50cmFja19odGFibGVfc2l6ZSkKKwkJcmV0dXJuIHBhcmFtX3NldF91aW50KHZhbCwga3ApOworCisJaGFzaHNpemUgPSBzaW1wbGVfc3RydG9sKHZhbCwgTlVMTCwgMCk7CisJaWYgKCFoYXNoc2l6ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwloYXNoID0gYWxsb2NfaGFzaHRhYmxlKGhhc2hzaXplLCAmdm1hbGxvY2VkKTsKKwlpZiAoIWhhc2gpCisJCXJldHVybiAtRU5PTUVNOworCisJLyogV2UgaGF2ZSB0byByZWhhaHMgZm9yIHRoZSBuZXcgdGFibGUgYW55d2F5LCBzbyB3ZSBhbHNvIGNhbgorCSAqIHVzZSBhIG5ld3JhbmRvbSBzZWVkICovCisJZ2V0X3JhbmRvbV9ieXRlcygmcm5kLCA0KTsKKworCXdyaXRlX2xvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKKwlmb3IgKGkgPSAwOyBpIDwgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplOyBpKyspIHsKKwkJd2hpbGUgKCFsaXN0X2VtcHR5KCZuZl9jb25udHJhY2tfaGFzaFtpXSkpIHsKKwkJCWggPSBsaXN0X2VudHJ5KG5mX2Nvbm50cmFja19oYXNoW2ldLm5leHQsCisJCQkJICAgICAgIHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCwgbGlzdCk7CisJCQlsaXN0X2RlbCgmaC0+bGlzdCk7CisJCQlidWNrZXQgPSBfX2hhc2hfY29ubnRyYWNrKCZoLT50dXBsZSwgaGFzaHNpemUsIHJuZCk7CisJCQlsaXN0X2FkZF90YWlsKCZoLT5saXN0LCAmaGFzaFtidWNrZXRdKTsKKwkJfQorCX0KKwlvbGRfc2l6ZSA9IG5mX2Nvbm50cmFja19odGFibGVfc2l6ZTsKKwlvbGRfdm1hbGxvY2VkID0gbmZfY29ubnRyYWNrX3ZtYWxsb2M7CisJb2xkX2hhc2ggPSBuZl9jb25udHJhY2tfaGFzaDsKKworCW5mX2Nvbm50cmFja19odGFibGVfc2l6ZSA9IGhhc2hzaXplOworCW5mX2Nvbm50cmFja192bWFsbG9jID0gdm1hbGxvY2VkOworCW5mX2Nvbm50cmFja19oYXNoID0gaGFzaDsKKwluZl9jb25udHJhY2tfaGFzaF9ybmQgPSBybmQ7CisJd3JpdGVfdW5sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7CisKKwlmcmVlX2Nvbm50cmFja19oYXNoKG9sZF9oYXNoLCBvbGRfdm1hbGxvY2VkLCBvbGRfc2l6ZSk7CisJcmV0dXJuIDA7Cit9CisKK21vZHVsZV9wYXJhbV9jYWxsKGhhc2hzaXplLCBzZXRfaGFzaHNpemUsIHBhcmFtX2dldF91aW50LAorCQkgICZuZl9jb25udHJhY2tfaHRhYmxlX3NpemUsIDA2MDApOworCitpbnQgX19pbml0IG5mX2Nvbm50cmFja19pbml0KHZvaWQpCit7CisJdW5zaWduZWQgaW50IGk7CisJaW50IHJldDsKKworCS8qIElkZWEgZnJvbSB0Y3AuYzogdXNlIDEvMTYzODQgb2YgbWVtb3J5LiAgT24gaTM4NjogMzJNQgorCSAqIG1hY2hpbmUgaGFzIDI1NiBidWNrZXRzLiAgPj0gMUdCIG1hY2hpbmVzIGhhdmUgODE5MiBidWNrZXRzLiAqLworCWlmICghbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplKSB7CisJCW5mX2Nvbm50cmFja19odGFibGVfc2l6ZQorCQkJPSAoKChudW1fcGh5c3BhZ2VzIDw8IFBBR0VfU0hJRlQpIC8gMTYzODQpCisJCQkgICAvIHNpemVvZihzdHJ1Y3QgbGlzdF9oZWFkKSk7CisJCWlmIChudW1fcGh5c3BhZ2VzID4gKDEwMjQgKiAxMDI0ICogMTAyNCAvIFBBR0VfU0laRSkpCisJCQluZl9jb25udHJhY2tfaHRhYmxlX3NpemUgPSA4MTkyOworCQlpZiAobmZfY29ubnRyYWNrX2h0YWJsZV9zaXplIDwgMTYpCisJCQluZl9jb25udHJhY2tfaHRhYmxlX3NpemUgPSAxNjsKKwl9CisJbmZfY29ubnRyYWNrX21heCA9IDggKiBuZl9jb25udHJhY2tfaHRhYmxlX3NpemU7CisKKwlwcmludGsoIm5mX2Nvbm50cmFjayB2ZXJzaW9uICVzICgldSBidWNrZXRzLCAlZCBtYXgpXG4iLAorCSAgICAgICBORl9DT05OVFJBQ0tfVkVSU0lPTiwgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplLAorCSAgICAgICBuZl9jb25udHJhY2tfbWF4KTsKKworCW5mX2Nvbm50cmFja19oYXNoID0gYWxsb2NfaGFzaHRhYmxlKG5mX2Nvbm50cmFja19odGFibGVfc2l6ZSwKKwkJCQkJICAgICZuZl9jb25udHJhY2tfdm1hbGxvYyk7CisJaWYgKCFuZl9jb25udHJhY2tfaGFzaCkgeworCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBjcmVhdGUgbmZfY29ubnRyYWNrX2hhc2hcbiIpOworCQlnb3RvIGVycl9vdXQ7CisJfQorCisJcmV0ID0gbmZfY29ubnRyYWNrX3JlZ2lzdGVyX2NhY2hlKE5GX0NUX0ZfQkFTSUMsICJuZl9jb25udHJhY2s6YmFzaWMiLAorCQkJCQkgIHNpemVvZihzdHJ1Y3QgbmZfY29ubiksIE5VTEwpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIGNyZWF0ZSBuZl9jb25uIHNsYWIgY2FjaGVcbiIpOworCQlnb3RvIGVycl9mcmVlX2hhc2g7CisJfQorCisJbmZfY29ubnRyYWNrX2V4cGVjdF9jYWNoZXAgPSBrbWVtX2NhY2hlX2NyZWF0ZSgibmZfY29ubnRyYWNrX2V4cGVjdCIsCisJCQkJCXNpemVvZihzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCksCisJCQkJCTAsIDAsIE5VTEwsIE5VTEwpOworCWlmICghbmZfY29ubnRyYWNrX2V4cGVjdF9jYWNoZXApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gY3JlYXRlIG5mX2V4cGVjdCBzbGFiIGNhY2hlXG4iKTsKKwkJZ290byBlcnJfZnJlZV9jb25udHJhY2tfc2xhYjsKKwl9CisKKwkvKiBEb24ndCBORUVEIGxvY2sgaGVyZSwgYnV0IGdvb2QgZm9ybSBhbnl3YXkuICovCisJd3JpdGVfbG9ja19iaCgmbmZfY29ubnRyYWNrX2xvY2spOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgUEZfTUFYOyBpKyspCisJCW5mX2N0X2wzcHJvdG9zW2ldID0gJm5mX2Nvbm50cmFja19nZW5lcmljX2wzcHJvdG87CisgICAgICAgIHdyaXRlX3VubG9ja19iaCgmbmZfY29ubnRyYWNrX2xvY2spOworCisJLyogU2V0IHVwIGZha2UgY29ubnRyYWNrOgorCSAgICAtIHRvIG5ldmVyIGJlIGRlbGV0ZWQsIG5vdCBpbiBhbnkgaGFzaGVzICovCisJYXRvbWljX3NldCgmbmZfY29ubnRyYWNrX3VudHJhY2tlZC5jdF9nZW5lcmFsLnVzZSwgMSk7CisJLyogIC0gYW5kIGxvb2sgaXQgbGlrZSBhcyBhIGNvbmZpcm1lZCBjb25uZWN0aW9uICovCisJc2V0X2JpdChJUFNfQ09ORklSTUVEX0JJVCwgJm5mX2Nvbm50cmFja191bnRyYWNrZWQuc3RhdHVzKTsKKworCXJldHVybiByZXQ7CisKK2Vycl9mcmVlX2Nvbm50cmFja19zbGFiOgorCW5mX2Nvbm50cmFja191bnJlZ2lzdGVyX2NhY2hlKE5GX0NUX0ZfQkFTSUMpOworZXJyX2ZyZWVfaGFzaDoKKwlmcmVlX2Nvbm50cmFja19oYXNoKG5mX2Nvbm50cmFja19oYXNoLCBuZl9jb25udHJhY2tfdm1hbGxvYywKKwkJCSAgICBuZl9jb25udHJhY2tfaHRhYmxlX3NpemUpOworZXJyX291dDoKKwlyZXR1cm4gLUVOT01FTTsKK30KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Z0cC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZnRwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUwODBlMgotLS0gL2Rldi9udWxsCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Z0cC5jCkBAIC0wLDAgKzEsNjk4IEBACisvKiBGVFAgZXh0ZW5zaW9uIGZvciBjb25uZWN0aW9uIHRyYWNraW5nLiAqLworCisvKiAoQykgMTk5OS0yMDAxIFBhdWwgYFJ1c3R5JyBSdXNzZWxsCisgKiAoQykgMjAwMi0yMDA0IE5ldGZpbHRlciBDb3JlIFRlYW0gPGNvcmV0ZWFtQG5ldGZpbHRlci5vcmc+CisgKiAoQykgMjAwMywyMDA0IFVTQUdJL1dJREUgUHJvamVjdCA8aHR0cDovL3d3dy5saW51eC1pcHY2Lm9yZz4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIDE2IERlYyAyMDAzOiBZYXN1eXVraSBLb3pha2FpIEBVU0FHSSA8eWFzdXl1a2kua296YWthaUB0b3NoaWJhLmNvLmpwPgorICoJLSBlbmFibGUgd29ya2luZyB3aXRoIExheWVyIDMgcHJvdG9jb2wgaW5kZXBlbmRlbnQgY29ubmVjdGlvbiB0cmFja2luZy4KKyAqCS0gdHJhY2sgRVBSVCBhbmQgRVBTViBjb21tYW5kcyB3aXRoIElQdjYgYWRkcmVzcy4KKyAqCisgKiBEZXJpdmVkIGZyb20gbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19mdHAuYworICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci5oPgorI2luY2x1ZGUgPGxpbnV4L2lwLmg+CisjaW5jbHVkZSA8bGludXgvaXB2Ni5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bmV0L2NoZWNrc3VtLmg+CisjaW5jbHVkZSA8bmV0L3RjcC5oPgorCisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Z0cC5oPgorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJSdXN0eSBSdXNzZWxsIDxydXN0eUBydXN0Y29ycC5jb20uYXU+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oImZ0cCBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlciIpOworCisvKiBUaGlzIGlzIHNsb3csIGJ1dCBpdCdzIHNpbXBsZS4gLS1SUiAqLworc3RhdGljIGNoYXIgKmZ0cF9idWZmZXI7CisKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0sobmZfZnRwX2xvY2spOworCisjZGVmaW5lIE1BWF9QT1JUUyA4CitzdGF0aWMgdV9pbnQxNl90IHBvcnRzW01BWF9QT1JUU107CitzdGF0aWMgdW5zaWduZWQgaW50IHBvcnRzX2M7Cittb2R1bGVfcGFyYW1fYXJyYXkocG9ydHMsIHVzaG9ydCwgJnBvcnRzX2MsIDA0MDApOworCitzdGF0aWMgaW50IGxvb3NlOworbW9kdWxlX3BhcmFtKGxvb3NlLCBpbnQsIDA2MDApOworCit1bnNpZ25lZCBpbnQgKCpuZl9uYXRfZnRwX2hvb2spKHN0cnVjdCBza19idWZmICoqcHNrYiwKKwkJCQllbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJCQllbnVtIGlwX2N0X2Z0cF90eXBlIHR5cGUsCisJCQkJdW5zaWduZWQgaW50IG1hdGNob2ZmLAorCQkJCXVuc2lnbmVkIGludCBtYXRjaGxlbiwKKwkJCQlzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwLAorCQkJCXUzMiAqc2VxKTsKK0VYUE9SVF9TWU1CT0xfR1BMKG5mX25hdF9mdHBfaG9vayk7CisKKyNpZiAwCisjZGVmaW5lIERFQlVHUCBwcmludGsKKyNlbHNlCisjZGVmaW5lIERFQlVHUChmb3JtYXQsIGFyZ3MuLi4pCisjZW5kaWYKKworc3RhdGljIGludCB0cnlfcmZjOTU5KGNvbnN0IGNoYXIgKiwgc2l6ZV90LCBzdHJ1Y3QgbmZfY29ubnRyYWNrX21hbiAqLCBjaGFyKTsKK3N0YXRpYyBpbnQgdHJ5X2VwcnQoY29uc3QgY2hhciAqLCBzaXplX3QsIHN0cnVjdCBuZl9jb25udHJhY2tfbWFuICosIGNoYXIpOworc3RhdGljIGludCB0cnlfZXBzdl9yZXNwb25zZShjb25zdCBjaGFyICosIHNpemVfdCwgc3RydWN0IG5mX2Nvbm50cmFja19tYW4gKiwKKwkJCSAgICAgY2hhcik7CisKK3N0YXRpYyBzdHJ1Y3QgZnRwX3NlYXJjaCB7CisJZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcjsKKwljb25zdCBjaGFyICpwYXR0ZXJuOworCXNpemVfdCBwbGVuOworCWNoYXIgc2tpcDsKKwljaGFyIHRlcm07CisJZW51bSBpcF9jdF9mdHBfdHlwZSBmdHB0eXBlOworCWludCAoKmdldG51bSkoY29uc3QgY2hhciAqLCBzaXplX3QsIHN0cnVjdCBuZl9jb25udHJhY2tfbWFuICosIGNoYXIpOworfSBzZWFyY2hbXSA9IHsKKwl7CisJCUlQX0NUX0RJUl9PUklHSU5BTCwKKwkJIlBPUlQiLCBzaXplb2YoIlBPUlQiKSAtIDEsICcgJywgJ1xyJywKKwkJSVBfQ1RfRlRQX1BPUlQsCisJCXRyeV9yZmM5NTksCisJfSwKKwl7CisJCUlQX0NUX0RJUl9SRVBMWSwKKwkJIjIyNyAiLCBzaXplb2YoIjIyNyAiKSAtIDEsICcoJywgJyknLAorCQlJUF9DVF9GVFBfUEFTViwKKwkJdHJ5X3JmYzk1OSwKKwl9LAorCXsKKwkJSVBfQ1RfRElSX09SSUdJTkFMLAorCQkiRVBSVCIsIHNpemVvZigiRVBSVCIpIC0gMSwgJyAnLCAnXHInLAorCQlJUF9DVF9GVFBfRVBSVCwKKwkJdHJ5X2VwcnQsCisJfSwKKwl7CisJCUlQX0NUX0RJUl9SRVBMWSwKKwkJIjIyOSAiLCBzaXplb2YoIjIyOSAiKSAtIDEsICcoJywgJyknLAorCQlJUF9DVF9GVFBfRVBTViwKKwkJdHJ5X2Vwc3ZfcmVzcG9uc2UsCisJfSwKK307CisKKy8qIFRoaXMgY29kZSBpcyBiYXNlZCBvbiBpbmV0X3B0b24oKSBpbiBnbGliYy0yLjIuNCAqLworc3RhdGljIGludAorZ2V0X2lwdjZfYWRkcihjb25zdCBjaGFyICpzcmMsIHNpemVfdCBkbGVuLCBzdHJ1Y3QgaW42X2FkZHIgKmRzdCwgdV9pbnQ4X3QgdGVybSkKK3sKKwlzdGF0aWMgY29uc3QgY2hhciB4ZGlnaXRzW10gPSAiMDEyMzQ1Njc4OWFiY2RlZiI7CisJdV9pbnQ4X3QgdG1wWzE2XSwgKnRwLCAqZW5kcCwgKmNvbG9ucDsKKwlpbnQgY2gsIHNhd194ZGlnaXQ7CisJdV9pbnQzMl90IHZhbDsKKwlzaXplX3QgY2xlbiA9IDA7CisKKwl0cCA9IG1lbXNldCh0bXAsICdcMCcsIHNpemVvZih0bXApKTsKKwllbmRwID0gdHAgKyBzaXplb2YodG1wKTsKKwljb2xvbnAgPSBOVUxMOworCisJLyogTGVhZGluZyA6OiByZXF1aXJlcyBzb21lIHNwZWNpYWwgaGFuZGxpbmcuICovCisJaWYgKCpzcmMgPT0gJzonKXsKKwkJaWYgKCorK3NyYyAhPSAnOicpIHsKKwkJCURFQlVHUCgiaW52YWxpZCBcIjpcIiBhdCB0aGUgaGVhZCBvZiBhZGRyXG4iKTsKKwkJCXJldHVybiAwOworCQl9CisJCWNsZW4rKzsKKwl9CisKKwlzYXdfeGRpZ2l0ID0gMDsKKwl2YWwgPSAwOworCXdoaWxlICgoY2xlbiA8IGRsZW4pICYmICgqc3JjICE9IHRlcm0pKSB7CisJCWNvbnN0IGNoYXIgKnBjaDsKKworCQljaCA9IHRvbG93ZXIoKnNyYysrKTsKKwkJY2xlbisrOworCisgICAgICAgICAgICAgICAgcGNoID0gc3RyY2hyKHhkaWdpdHMsIGNoKTsKKyAgICAgICAgICAgICAgICBpZiAocGNoICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA8PD0gNDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbCB8PSAocGNoIC0geGRpZ2l0cyk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsID4gMHhmZmZmKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKworCQkJc2F3X3hkaWdpdCA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisJCWlmIChjaCAhPSAnOicpIHsKKwkJCURFQlVHUCgiZ2V0X2lwdjZfYWRkcjogaW52YWxpZCBjaGFyLiBcJyVjXCdcbiIsIGNoKTsKKwkJCXJldHVybiAwOworCQl9CisKKwkJaWYgKCFzYXdfeGRpZ2l0KSB7CisJCQlpZiAoY29sb25wKSB7CisJCQkJREVCVUdQKCJpbnZhbGlkIGxvY2F0aW9uIG9mIFwiOjpcIi5cbiIpOworCQkJCXJldHVybiAwOworCQkJfQorCQkJY29sb25wID0gdHA7CisJCQljb250aW51ZTsKKwkJfSBlbHNlIGlmICgqc3JjID09IHRlcm0pIHsKKwkJCURFQlVHUCgidHJhbmNhdGVkIElQdjYgYWRkclxuIik7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCWlmICh0cCArIDIgPiBlbmRwKQorCQkJcmV0dXJuIDA7CisJCSp0cCsrID0gKHVfaW50OF90KSAodmFsID4+IDgpICYgMHhmZjsKKwkJKnRwKysgPSAodV9pbnQ4X3QpIHZhbCAmIDB4ZmY7CisKKwkJc2F3X3hkaWdpdCA9IDA7CisJCXZhbCA9IDA7CisJCWNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmIChzYXdfeGRpZ2l0KSB7CisgICAgICAgICAgICAgICAgaWYgKHRwICsgMiA+IGVuZHApCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICAqdHArKyA9ICh1X2ludDhfdCkgKHZhbCA+PiA4KSAmIDB4ZmY7CisgICAgICAgICAgICAgICAgKnRwKysgPSAodV9pbnQ4X3QpIHZhbCAmIDB4ZmY7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvbG9ucCAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBTaW5jZSBzb21lIG1lbW1vdmUoKSdzIGVycm9uZW91c2x5IGZhaWwgdG8gaGFuZGxlCisgICAgICAgICAgICAgICAgICogb3ZlcmxhcHBpbmcgcmVnaW9ucywgd2UnbGwgZG8gdGhlIHNoaWZ0IGJ5IGhhbmQuCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgY29uc3QgaW50IG4gPSB0cCAtIGNvbG9ucDsKKyAgICAgICAgICAgICAgICBpbnQgaTsKKworICAgICAgICAgICAgICAgIGlmICh0cCA9PSBlbmRwKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAxOyBpIDw9IG47IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgZW5kcFstIGldID0gY29sb25wW24gLSBpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9ucFtuIC0gaV0gPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0cCA9IGVuZHA7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRwICE9IGVuZHAgfHwgKCpzcmMgIT0gdGVybSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgbWVtY3B5KGRzdC0+czZfYWRkciwgdG1wLCBzaXplb2YoZHN0LT5zNl9hZGRyKSk7CisgICAgICAgIHJldHVybiBjbGVuOworfQorCitzdGF0aWMgaW50IHRyeV9udW1iZXIoY29uc3QgY2hhciAqZGF0YSwgc2l6ZV90IGRsZW4sIHVfaW50MzJfdCBhcnJheVtdLAorICAgICAgICAgICAgICAgICAgICAgIGludCBhcnJheV9zaXplLCBjaGFyIHNlcCwgY2hhciB0ZXJtKQoreworCXVfaW50MzJfdCBpLCBsZW47CisKKwltZW1zZXQoYXJyYXksIDAsIHNpemVvZihhcnJheVswXSkqYXJyYXlfc2l6ZSk7CisKKwkvKiBLZWVwIGRhdGEgcG9pbnRpbmcgYXQgbmV4dCBjaGFyLiAqLworCWZvciAoaSA9IDAsIGxlbiA9IDA7IGxlbiA8IGRsZW4gJiYgaSA8IGFycmF5X3NpemU7IGxlbisrLCBkYXRhKyspIHsKKwkJaWYgKCpkYXRhID49ICcwJyAmJiAqZGF0YSA8PSAnOScpIHsKKwkJCWFycmF5W2ldID0gYXJyYXlbaV0qMTAgKyAqZGF0YSAtICcwJzsKKwkJfQorCQllbHNlIGlmICgqZGF0YSA9PSBzZXApCisJCQlpKys7CisJCWVsc2UgeworCQkJLyogVW5leHBlY3RlZCBjaGFyYWN0ZXI7IHRydWUgaWYgaXQncyB0aGUKKwkJCSAgIHRlcm1pbmF0b3IgYW5kIHdlJ3JlIGZpbmlzaGVkLiAqLworCQkJaWYgKCpkYXRhID09IHRlcm0gJiYgaSA9PSBhcnJheV9zaXplIC0gMSkKKwkJCQlyZXR1cm4gbGVuOworCisJCQlERUJVR1AoIkNoYXIgJXUgKGdvdCAldSBudW1zKSBgJXUnIHVuZXhwZWN0ZWRcbiIsCisJCQkgICAgICAgbGVuLCBpLCAqZGF0YSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlERUJVR1AoIkZhaWxlZCB0byBmaWxsICV1IG51bWJlcnMgc2VwYXJhdGVkIGJ5ICVjXG4iLCBhcnJheV9zaXplLCBzZXApOworCisJcmV0dXJuIDA7Cit9CisKKy8qIFJldHVybnMgMCwgb3IgbGVuZ3RoIG9mIG51bWJlcnM6IDE5MiwxNjgsMSwxLDUsNiAqLworc3RhdGljIGludCB0cnlfcmZjOTU5KGNvbnN0IGNoYXIgKmRhdGEsIHNpemVfdCBkbGVuLAorCQkgICAgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX21hbiAqY21kLCBjaGFyIHRlcm0pCit7CisJaW50IGxlbmd0aDsKKwl1X2ludDMyX3QgYXJyYXlbNl07CisKKwlsZW5ndGggPSB0cnlfbnVtYmVyKGRhdGEsIGRsZW4sIGFycmF5LCA2LCAnLCcsIHRlcm0pOworCWlmIChsZW5ndGggPT0gMCkKKwkJcmV0dXJuIDA7CisKKwljbWQtPnUzLmlwID0gIGh0b25sKChhcnJheVswXSA8PCAyNCkgfCAoYXJyYXlbMV0gPDwgMTYpIHwKKwkJCQkgICAgKGFycmF5WzJdIDw8IDgpIHwgYXJyYXlbM10pOworCWNtZC0+dS50Y3AucG9ydCA9IGh0b25zKChhcnJheVs0XSA8PCA4KSB8IGFycmF5WzVdKTsKKwlyZXR1cm4gbGVuZ3RoOworfQorCisvKiBHcmFiIHBvcnQ6IG51bWJlciB1cCB0byBkZWxpbWl0ZXIgKi8KK3N0YXRpYyBpbnQgZ2V0X3BvcnQoY29uc3QgY2hhciAqZGF0YSwgaW50IHN0YXJ0LCBzaXplX3QgZGxlbiwgY2hhciBkZWxpbSwKKwkJICAgIHVfaW50MTZfdCAqcG9ydCkKK3sKKwl1X2ludDE2X3QgdG1wX3BvcnQgPSAwOworCWludCBpOworCisJZm9yIChpID0gc3RhcnQ7IGkgPCBkbGVuOyBpKyspIHsKKwkJLyogRmluaXNoZWQ/ICovCisJCWlmIChkYXRhW2ldID09IGRlbGltKSB7CisJCQlpZiAodG1wX3BvcnQgPT0gMCkKKwkJCQlicmVhazsKKwkJCSpwb3J0ID0gaHRvbnModG1wX3BvcnQpOworCQkJREVCVUdQKCJnZXRfcG9ydDogcmV0dXJuICVkXG4iLCB0bXBfcG9ydCk7CisJCQlyZXR1cm4gaSArIDE7CisJCX0KKwkJZWxzZSBpZiAoZGF0YVtpXSA+PSAnMCcgJiYgZGF0YVtpXSA8PSAnOScpCisJCQl0bXBfcG9ydCA9IHRtcF9wb3J0KjEwICsgZGF0YVtpXSAtICcwJzsKKwkJZWxzZSB7IC8qIFNvbWUgb3RoZXIgY3JhcCAqLworCQkJREVCVUdQKCJnZXRfcG9ydDogaW52YWxpZCBjaGFyLlxuIik7CisJCQlicmVhazsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworLyogUmV0dXJucyAwLCBvciBsZW5ndGggb2YgbnVtYmVyczogfDF8MTMyLjIzNS4xLjJ8NjI3NXwgb3IgfDJ8M2ZmZTo6MXw2Mjc1fCAqLworc3RhdGljIGludCB0cnlfZXBydChjb25zdCBjaGFyICpkYXRhLCBzaXplX3QgZGxlbiwgc3RydWN0IG5mX2Nvbm50cmFja19tYW4gKmNtZCwKKwkJICAgIGNoYXIgdGVybSkKK3sKKwljaGFyIGRlbGltOworCWludCBsZW5ndGg7CisKKwkvKiBGaXJzdCBjaGFyYWN0ZXIgaXMgZGVsaW1pdGVyLCB0aGVuICIxIiBmb3IgSVB2NCBvciAiMiIgZm9yIElQdjYsCisJICAgdGhlbiBkZWxpbWl0ZXIgYWdhaW4uICovCisJaWYgKGRsZW4gPD0gMykgeworCQlERUJVR1AoIkVQUlQ6IHRvbyBzaG9ydFxuIik7CisJCXJldHVybiAwOworCX0KKwlkZWxpbSA9IGRhdGFbMF07CisJaWYgKGlzZGlnaXQoZGVsaW0pIHx8IGRlbGltIDwgMzMgfHwgZGVsaW0gPiAxMjYgfHwgZGF0YVsyXSAhPSBkZWxpbSkgeworCQlERUJVR1AoInRyeV9lcHJ0OiBpbnZhbGlkIGRlbGltaXR0ZXIuXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKChjbWQtPmwzbnVtID09IFBGX0lORVQgJiYgZGF0YVsxXSAhPSAnMScpIHx8CisJICAgIChjbWQtPmwzbnVtID09IFBGX0lORVQ2ICYmIGRhdGFbMV0gIT0gJzInKSkgeworCQlERUJVR1AoIkVQUlQ6IGludmFsaWQgcHJvdG9jb2wgbnVtYmVyLlxuIik7CisJCXJldHVybiAwOworCX0KKworCURFQlVHUCgiRVBSVDogR290ICVjJWMlY1xuIiwgZGVsaW0sIGRhdGFbMV0sIGRlbGltKTsKKworCWlmIChkYXRhWzFdID09ICcxJykgeworCQl1X2ludDMyX3QgYXJyYXlbNF07CisKKwkJLyogTm93IHdlIGhhdmUgSVAgYWRkcmVzcy4gKi8KKwkJbGVuZ3RoID0gdHJ5X251bWJlcihkYXRhICsgMywgZGxlbiAtIDMsIGFycmF5LCA0LCAnLicsIGRlbGltKTsKKwkJaWYgKGxlbmd0aCAhPSAwKQorCQkJY21kLT51My5pcCA9IGh0b25sKChhcnJheVswXSA8PCAyNCkgfCAoYXJyYXlbMV0gPDwgMTYpCisJCQkJCSAgIHwgKGFycmF5WzJdIDw8IDgpIHwgYXJyYXlbM10pOworCX0gZWxzZSB7CisJCS8qIE5vdyB3ZSBoYXZlIElQdjYgYWRkcmVzcy4gKi8KKwkJbGVuZ3RoID0gZ2V0X2lwdjZfYWRkcihkYXRhICsgMywgZGxlbiAtIDMsCisJCQkJICAgICAgIChzdHJ1Y3QgaW42X2FkZHIgKiljbWQtPnUzLmlwNiwgZGVsaW0pOworCX0KKworCWlmIChsZW5ndGggPT0gMCkKKwkJcmV0dXJuIDA7CisJREVCVUdQKCJFUFJUOiBHb3QgSVAgYWRkcmVzcyFcbiIpOworCS8qIFN0YXJ0IG9mZnNldCBpbmNsdWRlcyBpbml0aWFsICJ8MXwiLCBhbmQgdHJhaWxpbmcgZGVsaW1pdGVyICovCisJcmV0dXJuIGdldF9wb3J0KGRhdGEsIDMgKyBsZW5ndGggKyAxLCBkbGVuLCBkZWxpbSwgJmNtZC0+dS50Y3AucG9ydCk7Cit9CisKKy8qIFJldHVybnMgMCwgb3IgbGVuZ3RoIG9mIG51bWJlcnM6IHx8fDY0NDZ8ICovCitzdGF0aWMgaW50IHRyeV9lcHN2X3Jlc3BvbnNlKGNvbnN0IGNoYXIgKmRhdGEsIHNpemVfdCBkbGVuLAorCQkJICAgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX21hbiAqY21kLCBjaGFyIHRlcm0pCit7CisJY2hhciBkZWxpbTsKKworCS8qIFRocmVlIGRlbGltaXRlcnMuICovCisJaWYgKGRsZW4gPD0gMykgcmV0dXJuIDA7CisJZGVsaW0gPSBkYXRhWzBdOworCWlmIChpc2RpZ2l0KGRlbGltKSB8fCBkZWxpbSA8IDMzIHx8IGRlbGltID4gMTI2CisJICAgIHx8IGRhdGFbMV0gIT0gZGVsaW0gfHwgZGF0YVsyXSAhPSBkZWxpbSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gZ2V0X3BvcnQoZGF0YSwgMywgZGxlbiwgZGVsaW0sICZjbWQtPnUudGNwLnBvcnQpOworfQorCisvKiBSZXR1cm4gMSBmb3IgbWF0Y2gsIDAgZm9yIGFjY2VwdCwgLTEgZm9yIHBhcnRpYWwuICovCitzdGF0aWMgaW50IGZpbmRfcGF0dGVybihjb25zdCBjaGFyICpkYXRhLCBzaXplX3QgZGxlbiwKKwkJCWNvbnN0IGNoYXIgKnBhdHRlcm4sIHNpemVfdCBwbGVuLAorCQkJY2hhciBza2lwLCBjaGFyIHRlcm0sCisJCQl1bnNpZ25lZCBpbnQgKm51bW9mZiwKKwkJCXVuc2lnbmVkIGludCAqbnVtbGVuLAorCQkJc3RydWN0IG5mX2Nvbm50cmFja19tYW4gKmNtZCwKKwkJCWludCAoKmdldG51bSkoY29uc3QgY2hhciAqLCBzaXplX3QsCisJCQkJICAgICAgc3RydWN0IG5mX2Nvbm50cmFja19tYW4gKiwgY2hhcikpCit7CisJc2l6ZV90IGk7CisKKwlERUJVR1AoImZpbmRfcGF0dGVybiBgJXMnOiBkbGVuID0gJXVcbiIsIHBhdHRlcm4sIGRsZW4pOworCWlmIChkbGVuID09IDApCisJCXJldHVybiAwOworCisJaWYgKGRsZW4gPD0gcGxlbikgeworCQkvKiBTaG9ydCBwYWNrZXQ6IHRyeSBmb3IgcGFydGlhbD8gKi8KKwkJaWYgKHN0cm5pY21wKGRhdGEsIHBhdHRlcm4sIGRsZW4pID09IDApCisJCQlyZXR1cm4gLTE7CisJCWVsc2UgcmV0dXJuIDA7CisJfQorCisJaWYgKHN0cm5pY21wKGRhdGEsIHBhdHRlcm4sIHBsZW4pICE9IDApIHsKKyNpZiAwCisJCXNpemVfdCBpOworCisJCURFQlVHUCgiZnRwOiBzdHJpbmcgbWlzbWF0Y2hcbiIpOworCQlmb3IgKGkgPSAwOyBpIDwgcGxlbjsgaSsrKSB7CisJCQlERUJVR1AoImZ0cDpjaGFyICV1IGAlYycoJXUpIHZzIGAlYycoJXUpXG4iLAorCQkJCWksIGRhdGFbaV0sIGRhdGFbaV0sCisJCQkJcGF0dGVybltpXSwgcGF0dGVybltpXSk7CisJCX0KKyNlbmRpZgorCQlyZXR1cm4gMDsKKwl9CisKKwlERUJVR1AoIlBhdHRlcm4gbWF0Y2hlcyFcbiIpOworCS8qIE5vdyB3ZSd2ZSBmb3VuZCB0aGUgY29uc3RhbnQgc3RyaW5nLCB0cnkgdG8gc2tpcAorCSAgIHRvIHRoZSAnc2tpcCcgY2hhcmFjdGVyICovCisJZm9yIChpID0gcGxlbjsgZGF0YVtpXSAhPSBza2lwOyBpKyspCisJCWlmIChpID09IGRsZW4gLSAxKSByZXR1cm4gLTE7CisKKwkvKiBTa2lwIG92ZXIgdGhlIGxhc3QgY2hhcmFjdGVyICovCisJaSsrOworCisJREVCVUdQKCJTa2lwcGVkIHVwIHRvIGAlYychXG4iLCBza2lwKTsKKworCSpudW1vZmYgPSBpOworCSpudW1sZW4gPSBnZXRudW0oZGF0YSArIGksIGRsZW4gLSBpLCBjbWQsIHRlcm0pOworCWlmICghKm51bWxlbikKKwkJcmV0dXJuIC0xOworCisJREVCVUdQKCJNYXRjaCBzdWNjZWVkZWQhXG4iKTsKKwlyZXR1cm4gMTsKK30KKworLyogTG9vayB1cCB0byBzZWUgaWYgd2UncmUganVzdCBhZnRlciBhIFxuLiAqLworc3RhdGljIGludCBmaW5kX25sX3NlcSh1MzIgc2VxLCBjb25zdCBzdHJ1Y3QgaXBfY3RfZnRwX21hc3RlciAqaW5mbywgaW50IGRpcikKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5zZXFfYWZ0X25sX251bVtkaXJdOyBpKyspCisJCWlmIChpbmZvLT5zZXFfYWZ0X25sW2Rpcl1baV0gPT0gc2VxKQorCQkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKKy8qIFdlIGRvbid0IHVwZGF0ZSBpZiBpdCdzIG9sZGVyIHRoYW4gd2hhdCB3ZSBoYXZlLiAqLworc3RhdGljIHZvaWQgdXBkYXRlX25sX3NlcSh1MzIgbmxfc2VxLCBzdHJ1Y3QgaXBfY3RfZnRwX21hc3RlciAqaW5mbywgaW50IGRpciwKKwkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwl1bnNpZ25lZCBpbnQgaSwgb2xkZXN0ID0gTlVNX1NFUV9UT19SRU1FTUJFUjsKKworCS8qIExvb2sgZm9yIG9sZGVzdDogaWYgd2UgZmluZCBleGFjdCBtYXRjaCwgd2UncmUgZG9uZS4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgaW5mby0+c2VxX2FmdF9ubF9udW1bZGlyXTsgaSsrKSB7CisJCWlmIChpbmZvLT5zZXFfYWZ0X25sW2Rpcl1baV0gPT0gbmxfc2VxKQorCQkJcmV0dXJuOworCisJCWlmIChvbGRlc3QgPT0gaW5mby0+c2VxX2FmdF9ubF9udW1bZGlyXQorCQkgICAgfHwgYmVmb3JlKGluZm8tPnNlcV9hZnRfbmxbZGlyXVtpXSwgb2xkZXN0KSkKKwkJCW9sZGVzdCA9IGk7CisJfQorCisJaWYgKGluZm8tPnNlcV9hZnRfbmxfbnVtW2Rpcl0gPCBOVU1fU0VRX1RPX1JFTUVNQkVSKSB7CisJCWluZm8tPnNlcV9hZnRfbmxbZGlyXVtpbmZvLT5zZXFfYWZ0X25sX251bVtkaXJdKytdID0gbmxfc2VxOworCQluZl9jb25udHJhY2tfZXZlbnRfY2FjaGUoSVBDVF9IRUxQSU5GT19WT0xBVElMRSwgc2tiKTsKKwl9IGVsc2UgaWYgKG9sZGVzdCAhPSBOVU1fU0VRX1RPX1JFTUVNQkVSKSB7CisJCWluZm8tPnNlcV9hZnRfbmxbZGlyXVtvbGRlc3RdID0gbmxfc2VxOworCQluZl9jb25udHJhY2tfZXZlbnRfY2FjaGUoSVBDVF9IRUxQSU5GT19WT0xBVElMRSwgc2tiKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgaGVscChzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCisJCXVuc2lnbmVkIGludCBwcm90b2ZmLAorCQlzdHJ1Y3QgbmZfY29ubiAqY3QsCisJCWVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvKQoreworCXVuc2lnbmVkIGludCBkYXRhb2ZmLCBkYXRhbGVuOworCXN0cnVjdCB0Y3BoZHIgX3RjcGgsICp0aDsKKwljaGFyICpmYl9wdHI7CisJaW50IHJldDsKKwl1MzIgc2VxOworCWludCBkaXIgPSBDVElORk8yRElSKGN0aW5mbyk7CisJdW5zaWduZWQgaW50IG1hdGNobGVuLCBtYXRjaG9mZjsKKwlzdHJ1Y3QgaXBfY3RfZnRwX21hc3RlciAqY3RfZnRwX2luZm8gPSAmY3QtPmhlbHAtPmN0X2Z0cF9pbmZvOworCXN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHA7CisJc3RydWN0IG5mX2Nvbm50cmFja19tYW4gY21kID0ge307CisKKwl1bnNpZ25lZCBpbnQgaTsKKwlpbnQgZm91bmQgPSAwLCBlbmRzX2luX25sOworCisJLyogVW50aWwgdGhlcmUncyBiZWVuIHRyYWZmaWMgYm90aCB3YXlzLCBkb24ndCBsb29rIGluIHBhY2tldHMuICovCisJaWYgKGN0aW5mbyAhPSBJUF9DVF9FU1RBQkxJU0hFRAorCSAgICAmJiBjdGluZm8gIT0gSVBfQ1RfRVNUQUJMSVNIRUQrSVBfQ1RfSVNfUkVQTFkpIHsKKwkJREVCVUdQKCJmdHA6IENvbm50cmFja2luZm8gPSAldVxuIiwgY3RpbmZvKTsKKwkJcmV0dXJuIE5GX0FDQ0VQVDsKKwl9CisKKwl0aCA9IHNrYl9oZWFkZXJfcG9pbnRlcigqcHNrYiwgcHJvdG9mZiwgc2l6ZW9mKF90Y3BoKSwgJl90Y3BoKTsKKwlpZiAodGggPT0gTlVMTCkKKwkJcmV0dXJuIE5GX0FDQ0VQVDsKKworCWRhdGFvZmYgPSBwcm90b2ZmICsgdGgtPmRvZmYgKiA0OworCS8qIE5vIGRhdGE/ICovCisJaWYgKGRhdGFvZmYgPj0gKCpwc2tiKS0+bGVuKSB7CisJCURFQlVHUCgiZnRwOiBkYXRhb2ZmKCV1KSA+PSBza2JsZW4oJXUpXG4iLCBkYXRhb2ZmLAorCQkJKCpwc2tiKS0+bGVuKTsKKwkJcmV0dXJuIE5GX0FDQ0VQVDsKKwl9CisJZGF0YWxlbiA9ICgqcHNrYiktPmxlbiAtIGRhdGFvZmY7CisKKwlzcGluX2xvY2tfYmgoJm5mX2Z0cF9sb2NrKTsKKwlmYl9wdHIgPSBza2JfaGVhZGVyX3BvaW50ZXIoKnBza2IsIGRhdGFvZmYsIGRhdGFsZW4sIGZ0cF9idWZmZXIpOworCUJVR19PTihmYl9wdHIgPT0gTlVMTCk7CisKKwllbmRzX2luX25sID0gKGZiX3B0cltkYXRhbGVuIC0gMV0gPT0gJ1xuJyk7CisJc2VxID0gbnRvaGwodGgtPnNlcSkgKyBkYXRhbGVuOworCisJLyogTG9vayB1cCB0byBzZWUgaWYgd2UncmUganVzdCBhZnRlciBhIFxuLiAqLworCWlmICghZmluZF9ubF9zZXEobnRvaGwodGgtPnNlcSksIGN0X2Z0cF9pbmZvLCBkaXIpKSB7CisJCS8qIE5vdyBpZiB0aGlzIGVuZHMgaW4gXG4sIHVwZGF0ZSBmdHAgaW5mby4gKi8KKwkJREVCVUdQKCJuZl9jb25udHJhY2tfZnRwX2hlbHA6IHdyb25nIHNlcSBwb3MgJXMoJXUpIG9yICVzKCV1KVxuIiwKKwkJICAgICAgIGN0X2Z0cF9pbmZvLT5zZXFfYWZ0X25sX251bVtkaXJdID4gMCA/ICIiIDogIihVTlNFVCkiLAorCQkgICAgICAgY3RfZnRwX2luZm8tPnNlcV9hZnRfbmxbZGlyXVswXSwKKwkJICAgICAgIGN0X2Z0cF9pbmZvLT5zZXFfYWZ0X25sX251bVtkaXJdID4gMSA/ICIiIDogIihVTlNFVCkiLAorCQkgICAgICAgY3RfZnRwX2luZm8tPnNlcV9hZnRfbmxbZGlyXVsxXSk7CisJCXJldCA9IE5GX0FDQ0VQVDsKKwkJZ290byBvdXRfdXBkYXRlX25sOworCX0KKworICAgICAgICAvKiBJbml0aWFsaXplIElQL0lQdjYgYWRkciB0byBleHBlY3RlZCBhZGRyZXNzIChpdCdzIG5vdCBtZW50aW9uZWQKKyAgICAgICAgICAgaW4gRVBTViByZXNwb25zZXMpICovCisJY21kLmwzbnVtID0gY3QtPnR1cGxlaGFzaFtkaXJdLnR1cGxlLnNyYy5sM251bTsKKwltZW1jcHkoY21kLnUzLmFsbCwgJmN0LT50dXBsZWhhc2hbZGlyXS50dXBsZS5zcmMudTMuYWxsLAorCSAgICAgICBzaXplb2YoY21kLnUzLmFsbCkpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2VhcmNoKTsgaSsrKSB7CisJCWlmIChzZWFyY2hbaV0uZGlyICE9IGRpcikgY29udGludWU7CisKKwkJZm91bmQgPSBmaW5kX3BhdHRlcm4oZmJfcHRyLCBkYXRhbGVuLAorCQkJCSAgICAgc2VhcmNoW2ldLnBhdHRlcm4sCisJCQkJICAgICBzZWFyY2hbaV0ucGxlbiwKKwkJCQkgICAgIHNlYXJjaFtpXS5za2lwLAorCQkJCSAgICAgc2VhcmNoW2ldLnRlcm0sCisJCQkJICAgICAmbWF0Y2hvZmYsICZtYXRjaGxlbiwKKwkJCQkgICAgICZjbWQsCisJCQkJICAgICBzZWFyY2hbaV0uZ2V0bnVtKTsKKwkJaWYgKGZvdW5kKSBicmVhazsKKwl9CisJaWYgKGZvdW5kID09IC0xKSB7CisJCS8qIFdlIGRvbid0IHVzdWFsbHkgZHJvcCBwYWNrZXRzLiAgQWZ0ZXIgYWxsLCB0aGlzIGlzCisJCSAgIGNvbm5lY3Rpb24gdHJhY2tpbmcsIG5vdCBwYWNrZXQgZmlsdGVyaW5nLgorCQkgICBIb3dldmVyLCBpdCBpcyBuZWNlc3NhcnkgZm9yIGFjY3VyYXRlIHRyYWNraW5nIGluCisJCSAgIHRoaXMgY2FzZS4gKi8KKwkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCXByaW50aygiY29ubnRyYWNrX2Z0cDogcGFydGlhbCAlcyAldSsldVxuIiwKKwkJCSAgICAgICBzZWFyY2hbaV0ucGF0dGVybiwKKwkJCSAgICAgICBudG9obCh0aC0+c2VxKSwgZGF0YWxlbik7CisJCXJldCA9IE5GX0RST1A7CisJCWdvdG8gb3V0OworCX0gZWxzZSBpZiAoZm91bmQgPT0gMCkgeyAvKiBObyBtYXRjaCAqLworCQlyZXQgPSBORl9BQ0NFUFQ7CisJCWdvdG8gb3V0X3VwZGF0ZV9ubDsKKwl9CisKKwlERUJVR1AoImNvbm50cmFja19mdHA6IG1hdGNoIGAlLipzJyAoJXUgYnl0ZXMgYXQgJXUpXG4iLAorCSAgICAgICAoaW50KW1hdGNobGVuLCBmYl9wdHIgKyBtYXRjaG9mZiwKKwkgICAgICAgbWF0Y2hsZW4sIG50b2hsKHRoLT5zZXEpICsgbWF0Y2hvZmYpOworCisJZXhwID0gbmZfY29ubnRyYWNrX2V4cGVjdF9hbGxvYyhjdCk7CisJaWYgKGV4cCA9PSBOVUxMKSB7CisJCXJldCA9IE5GX0RST1A7CisJCWdvdG8gb3V0OworCX0KKworCS8qIFdlIHJlZmVyIHRvIHRoZSByZXZlcnNlIGRpcmVjdGlvbiAoIiFkaXIiKSB0dXBsZXMgaGVyZSwKKwkgKiBiZWNhdXNlIHdlJ3JlIGV4cGVjdGluZyBzb21ldGhpbmcgaW4gdGhlIG90aGVyIGRpcmVjdGlvbi4KKwkgKiBEb2Vzbid0IG1hdHRlciB1bmxlc3MgTkFUIGlzIGhhcHBlbmluZy4gICovCisJZXhwLT50dXBsZS5kc3QudTMgPSBjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLmRzdC51MzsKKworCS8qIFVwZGF0ZSB0aGUgZnRwIGluZm8gKi8KKwlpZiAoKGNtZC5sM251bSA9PSBjdC0+dHVwbGVoYXNoW2Rpcl0udHVwbGUuc3JjLmwzbnVtKSAmJgorCSAgICBtZW1jbXAoJmNtZC51My5hbGwsICZjdC0+dHVwbGVoYXNoW2Rpcl0udHVwbGUuc3JjLnUzLmFsbCwKKwkJICAgICBzaXplb2YoY21kLnUzLmFsbCkpKSB7CisJCS8qIEVucmljbyBTY2hvbHoncyBwYXNzaXZlIEZUUCB0byBwYXJ0aWFsbHkgUk5BVCdkIGZ0cAorICAgICAgICAgICAgICAgICAgIHNlcnZlcjogaXQgcmVhbGx5IHdhbnRzIHVzIHRvIGNvbm5lY3QgdG8gYQorICAgICAgICAgICAgICAgICAgIGRpZmZlcmVudCBJUCBhZGRyZXNzLiAgU2ltcGx5IGRvbid0IHJlY29yZCBpdCBmb3IKKyAgICAgICAgICAgICAgICAgICBOQVQuICovCisJCWlmIChjbWQubDNudW0gPT0gUEZfSU5FVCkgeworICAgICAgICAgICAgICAgIAlERUJVR1AoImNvbm50cmFja19mdHA6IE5PVCBSRUNPUkRJTkc6ICV1LCV1LCV1LCV1ICE9ICV1LiV1LiV1LiV1XG4iLAorCQkJICAgICAgIE5JUFFVQUQoY21kLnUzLmlwKSwKKwkJCSAgICAgICBOSVBRVUFEKGN0LT50dXBsZWhhc2hbZGlyXS50dXBsZS5zcmMudTMuaXApKTsKKwkJfSBlbHNlIHsKKwkJCURFQlVHUCgiY29ubnRyYWNrX2Z0cDogTk9UIFJFQ09SRElORzogJXg6JXg6JXg6JXg6JXg6JXg6JXg6JXggIT0gJXg6JXg6JXg6JXg6JXg6JXg6JXg6JXhcbiIsCisJCQkgICAgICAgTklQNigqKChzdHJ1Y3QgaW42X2FkZHIgKiljbWQudTMuaXA2KSksCisJCQkgICAgICAgTklQNigqKChzdHJ1Y3QgaW42X2FkZHIgKiljdC0+dHVwbGVoYXNoW2Rpcl0KKwkJCQkJCQkudHVwbGUuc3JjLnUzLmlwNikpKTsKKwkJfQorCisJCS8qIFRoYW5rcyB0byBDcmlzdGlhbm8gTGluY29sbiBNYXR0b3MKKwkJICAgPGxpbmNvbG5AY2VzYXIub3JnLmJyPiBmb3IgcmVwb3J0aW5nIHRoaXMgcG90ZW50aWFsCisJCSAgIHByb2JsZW0gKERNWiBtYWNoaW5lcyBvcGVuaW5nIGhvbGVzIHRvIGludGVybmFsCisJCSAgIG5ldHdvcmtzLCBvciB0aGUgcGFja2V0IGZpbHRlciBpdHNlbGYpLiAqLworCQlpZiAoIWxvb3NlKSB7CisJCQlyZXQgPSBORl9BQ0NFUFQ7CisJCQlnb3RvIG91dF9wdXRfZXhwZWN0OworCQl9CisJCW1lbWNweSgmZXhwLT50dXBsZS5kc3QudTMsICZjbWQudTMuYWxsLAorCQkgICAgICAgc2l6ZW9mKGV4cC0+dHVwbGUuZHN0LnUzKSk7CisJfQorCisJZXhwLT50dXBsZS5zcmMudTMgPSBjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLnNyYy51MzsKKwlleHAtPnR1cGxlLnNyYy5sM251bSA9IGNtZC5sM251bTsKKwlleHAtPnR1cGxlLnNyYy51LnRjcC5wb3J0ID0gMDsKKwlleHAtPnR1cGxlLmRzdC51LnRjcC5wb3J0ID0gY21kLnUudGNwLnBvcnQ7CisJZXhwLT50dXBsZS5kc3QucHJvdG9udW0gPSBJUFBST1RPX1RDUDsKKworCWV4cC0+bWFzayA9IChzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlKQorCQkgICAgeyAuc3JjID0geyAubDNudW0gPSAweEZGRkYsCisJCQkgICAgICAgLnUgPSB7IC50Y3AgPSB7IDAgfX0sCisJCQkgICAgIH0sCisJCSAgICAgIC5kc3QgPSB7IC5wcm90b251bSA9IDB4RkYsCisJCQkgICAgICAgLnUgPSB7IC50Y3AgPSB7IDB4RkZGRiB9fSwKKwkJCSAgICAgfSwKKwkJICAgIH07CisJaWYgKGNtZC5sM251bSA9PSBQRl9JTkVUKSB7CisJCWV4cC0+bWFzay5zcmMudTMuaXAgPSAweEZGRkZGRkZGOworCQlleHAtPm1hc2suZHN0LnUzLmlwID0gMHhGRkZGRkZGRjsKKwl9IGVsc2UgeworCQltZW1zZXQoZXhwLT5tYXNrLnNyYy51My5pcDYsIDB4RkYsCisJCSAgICAgICBzaXplb2YoZXhwLT5tYXNrLnNyYy51My5pcDYpKTsKKwkJbWVtc2V0KGV4cC0+bWFzay5kc3QudTMuaXA2LCAweEZGLAorCQkgICAgICAgc2l6ZW9mKGV4cC0+bWFzay5zcmMudTMuaXA2KSk7CisJfQorCisJZXhwLT5leHBlY3RmbiA9IE5VTEw7CisJZXhwLT5mbGFncyA9IDA7CisKKwkvKiBOb3csIE5BVCBtaWdodCB3YW50IHRvIG1hbmdsZSB0aGUgcGFja2V0LCBhbmQgcmVnaXN0ZXIgdGhlCisJICogKHBvc3NpYmx5IGNoYW5nZWQpIGV4cGVjdGF0aW9uIGl0c2VsZi4gKi8KKwlpZiAobmZfbmF0X2Z0cF9ob29rKQorCQlyZXQgPSBuZl9uYXRfZnRwX2hvb2socHNrYiwgY3RpbmZvLCBzZWFyY2hbaV0uZnRwdHlwZSwKKwkJCQkgICAgICBtYXRjaG9mZiwgbWF0Y2hsZW4sIGV4cCwgJnNlcSk7CisJZWxzZSB7CisJCS8qIENhbid0IGV4cGVjdCB0aGlzPyAgQmVzdCB0byBkcm9wIHBhY2tldCBub3cuICovCisJCWlmIChuZl9jb25udHJhY2tfZXhwZWN0X3JlbGF0ZWQoZXhwKSAhPSAwKQorCQkJcmV0ID0gTkZfRFJPUDsKKwkJZWxzZQorCQkJcmV0ID0gTkZfQUNDRVBUOworCX0KKworb3V0X3B1dF9leHBlY3Q6CisJbmZfY29ubnRyYWNrX2V4cGVjdF9wdXQoZXhwKTsKKworb3V0X3VwZGF0ZV9ubDoKKwkvKiBOb3cgaWYgdGhpcyBlbmRzIGluIFxuLCB1cGRhdGUgZnRwIGluZm8uICBTZXEgbWF5IGhhdmUgYmVlbgorCSAqIGFkanVzdGVkIGJ5IE5BVCBjb2RlLiAqLworCWlmIChlbmRzX2luX25sKQorCQl1cGRhdGVfbmxfc2VxKHNlcSwgY3RfZnRwX2luZm8sIGRpciwgKnBza2IpOworIG91dDoKKwlzcGluX3VubG9ja19iaCgmbmZfZnRwX2xvY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciBmdHBbTUFYX1BPUlRTXVsyXTsKK3N0YXRpYyBjaGFyIGZ0cF9uYW1lc1tNQVhfUE9SVFNdWzJdW3NpemVvZigiZnRwLTY1NTM1IildOworCisvKiBkb24ndCBtYWtlIHRoaXMgX19leGl0LCBzaW5jZSBpdCdzIGNhbGxlZCBmcm9tIF9faW5pdCAhICovCitzdGF0aWMgdm9pZCBmaW5pKHZvaWQpCit7CisJaW50IGksIGo7CisJZm9yIChpID0gMDsgaSA8IHBvcnRzX2M7IGkrKykgeworCQlmb3IgKGogPSAwOyBqIDwgMjsgaisrKSB7CisJCQlpZiAoZnRwW2ldW2pdLm1lID09IE5VTEwpCisJCQkJY29udGludWU7CisKKwkJCURFQlVHUCgibmZfY3RfZnRwOiB1bnJlZ2lzdGVyaW5nIGhlbHBlciBmb3IgcGY6ICVkICIKKwkJCSAgICAgICAicG9ydDogJWRcbiIsCisJCQkJZnRwW2ldW2pdLnR1cGxlLnNyYy5sM251bSwgcG9ydHNbaV0pOworCQkJbmZfY29ubnRyYWNrX2hlbHBlcl91bnJlZ2lzdGVyKCZmdHBbaV1bal0pOworCQl9CisJfQorCisJa2ZyZWUoZnRwX2J1ZmZlcik7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXQodm9pZCkKK3sKKwlpbnQgaSwgaiA9IC0xLCByZXQgPSAwOworCWNoYXIgKnRtcG5hbWU7CisKKwlmdHBfYnVmZmVyID0ga21hbGxvYyg2NTUzNiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFmdHBfYnVmZmVyKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChwb3J0c19jID09IDApCisJCXBvcnRzW3BvcnRzX2MrK10gPSBGVFBfUE9SVDsKKworCS8qIEZJWE1FIHNob3VsZCBiZSBjb25maWd1cmFibGUgd2hldGhlciBJUHY0IGFuZCBJUHY2IEZUUCBjb25uZWN0aW9ucworCQkgYXJlIHRyYWNrZWQgb3Igbm90IC0gWUsgKi8KKwlmb3IgKGkgPSAwOyBpIDwgcG9ydHNfYzsgaSsrKSB7CisJCW1lbXNldCgmZnRwW2ldLCAwLCBzaXplb2Yoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIpKTsKKworCQlmdHBbaV1bMF0udHVwbGUuc3JjLmwzbnVtID0gUEZfSU5FVDsKKwkJZnRwW2ldWzFdLnR1cGxlLnNyYy5sM251bSA9IFBGX0lORVQ2OworCQlmb3IgKGogPSAwOyBqIDwgMjsgaisrKSB7CisJCQlmdHBbaV1bal0udHVwbGUuc3JjLnUudGNwLnBvcnQgPSBodG9ucyhwb3J0c1tpXSk7CisJCQlmdHBbaV1bal0udHVwbGUuZHN0LnByb3RvbnVtID0gSVBQUk9UT19UQ1A7CisJCQlmdHBbaV1bal0ubWFzay5zcmMudS50Y3AucG9ydCA9IDB4RkZGRjsKKwkJCWZ0cFtpXVtqXS5tYXNrLmRzdC5wcm90b251bSA9IDB4RkY7CisJCQlmdHBbaV1bal0ubWF4X2V4cGVjdGVkID0gMTsKKwkJCWZ0cFtpXVtqXS50aW1lb3V0ID0gNSAqIDYwOwkvKiA1IE1pbnV0ZXMgKi8KKwkJCWZ0cFtpXVtqXS5tZSA9IFRISVNfTU9EVUxFOworCQkJZnRwW2ldW2pdLmhlbHAgPSBoZWxwOworCQkJdG1wbmFtZSA9ICZmdHBfbmFtZXNbaV1bal1bMF07CisJCQlpZiAocG9ydHNbaV0gPT0gRlRQX1BPUlQpCisJCQkJc3ByaW50Zih0bXBuYW1lLCAiZnRwIik7CisJCQllbHNlCisJCQkJc3ByaW50Zih0bXBuYW1lLCAiZnRwLSVkIiwgcG9ydHNbaV0pOworCQkJZnRwW2ldW2pdLm5hbWUgPSB0bXBuYW1lOworCisJCQlERUJVR1AoIm5mX2N0X2Z0cDogcmVnaXN0ZXJpbmcgaGVscGVyIGZvciBwZjogJWQgIgorCQkJICAgICAgICJwb3J0OiAlZFxuIiwKKwkJCQlmdHBbaV1bal0udHVwbGUuc3JjLmwzbnVtLCBwb3J0c1tpXSk7CisJCQlyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKCZmdHBbaV1bal0pOworCQkJaWYgKHJldCkgeworCQkJCXByaW50aygibmZfY3RfZnRwOiBmYWlsZWQgdG8gcmVnaXN0ZXIgaGVscGVyICIKKwkJCQkgICAgICAgIiBmb3IgcGY6ICVkIHBvcnQ6ICVkXG4iLAorCQkJCQlmdHBbaV1bal0udHVwbGUuc3JjLmwzbnVtLCBwb3J0c1tpXSk7CisJCQkJZmluaSgpOworCQkJCXJldHVybiByZXQ7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworbW9kdWxlX2luaXQoaW5pdCk7Cittb2R1bGVfZXhpdChmaW5pKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9fZ2VuZXJpYy5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19nZW5lcmljLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RlNGYwNgotLS0gL2Rldi9udWxsCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9fZ2VuZXJpYy5jCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiAoQykgMjAwMywyMDA0IFVTQUdJL1dJREUgUHJvamVjdCA8aHR0cDovL3d3dy5saW51eC1pcHY2Lm9yZz4KKyAqCisgKiBCYXNlZCBsYXJnZWx5IHVwb24gdGhlIG9yaWdpbmFsIGlwX2Nvbm50cmFjayBjb2RlIHdoaWNoCisgKiBoYWQgdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQgaW5mb3JtYXRpb246CisgKgorICogKEMpIDE5OTktMjAwMSBQYXVsIGBSdXN0eScgUnVzc2VsbAorICogKEMpIDIwMDItMjAwNCBOZXRmaWx0ZXIgQ29yZSBUZWFtIDxjb3JldGVhbUBuZXRmaWx0ZXIub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogQXV0aG9yOgorICoJWWFzdXl1a2kgS296YWthaSBAVVNBR0kJPHlhc3V5dWtpLmtvemFrYWlAdG9zaGliYS5jby5qcD4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pcC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L2ljbXAuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KKyNpbmNsdWRlIDxuZXQvaXAuaD4KKworI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0Lmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b2NvbC5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG8uaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9pcHY0L25mX2Nvbm50cmFja19pcHY0Lmg+CisKKyNpZiAwCisjZGVmaW5lIERFQlVHUCBwcmludGsKKyNlbHNlCisjZGVmaW5lIERFQlVHUChmb3JtYXQsIGFyZ3MuLi4pCisjZW5kaWYKKworREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCBuZl9jb25udHJhY2tfc3RhdCwgbmZfY29ubnRyYWNrX3N0YXQpOworCitzdGF0aWMgaW50IGdlbmVyaWNfcGt0X3RvX3R1cGxlKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBuaG9mZiwKKwkJCQlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSkKK3sKKwltZW1zZXQoJnR1cGxlLT5zcmMudTMsIDAsIHNpemVvZih0dXBsZS0+c3JjLnUzKSk7CisJbWVtc2V0KCZ0dXBsZS0+ZHN0LnUzLCAwLCBzaXplb2YodHVwbGUtPmRzdC51MykpOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgZ2VuZXJpY19pbnZlcnRfdHVwbGUoc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsCisJCQkgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICpvcmlnKQoreworCW1lbXNldCgmdHVwbGUtPnNyYy51MywgMCwgc2l6ZW9mKHR1cGxlLT5zcmMudTMpKTsKKwltZW1zZXQoJnR1cGxlLT5kc3QudTMsIDAsIHNpemVvZih0dXBsZS0+ZHN0LnUzKSk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBnZW5lcmljX3ByaW50X3R1cGxlKHN0cnVjdCBzZXFfZmlsZSAqcywKKwkJCSAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnZW5lcmljX3ByaW50X2Nvbm50cmFjayhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsCisJCQkJY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmNvbm50cmFjaykKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorZ2VuZXJpY19wcmVwYXJlKHN0cnVjdCBza19idWZmICoqcHNrYiwgdW5zaWduZWQgaW50IGhvb2tudW0sCisJCXVuc2lnbmVkIGludCAqZGF0YW9mZiwgdV9pbnQ4X3QgKnByb3RvbnVtKQoreworCS8qIE5ldmVyIHRyYWNrICEhISAqLworCXJldHVybiAtTkZfQUNDRVBUOworfQorCisKK3N0YXRpYyB1X2ludDMyX3QgZ2VuZXJpY19nZXRfZmVhdHVyZXMoY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpCisJCQkJCit7CisJcmV0dXJuIE5GX0NUX0ZfQkFTSUM7Cit9CisKK3N0cnVjdCBuZl9jb25udHJhY2tfbDNwcm90byBuZl9jb25udHJhY2tfZ2VuZXJpY19sM3Byb3RvID0geworCS5sM3Byb3RvCSA9IFBGX1VOU1BFQywKKwkubmFtZQkJID0gInVua25vd24iLAorCS5wa3RfdG9fdHVwbGUJID0gZ2VuZXJpY19wa3RfdG9fdHVwbGUsCisJLmludmVydF90dXBsZQkgPSBnZW5lcmljX2ludmVydF90dXBsZSwKKwkucHJpbnRfdHVwbGUJID0gZ2VuZXJpY19wcmludF90dXBsZSwKKwkucHJpbnRfY29ubnRyYWNrID0gZ2VuZXJpY19wcmludF9jb25udHJhY2ssCisJLnByZXBhcmUJID0gZ2VuZXJpY19wcmVwYXJlLAorCS5nZXRfZmVhdHVyZXMJID0gZ2VuZXJpY19nZXRfZmVhdHVyZXMsCisJLm1lCQkgPSBUSElTX01PRFVMRSwKK307CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19nZW5lcmljLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19nZW5lcmljLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzY0MjVmNgotLS0gL2Rldi9udWxsCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2dlbmVyaWMuYwpAQCAtMCwwICsxLDg1IEBACisvKiAoQykgMTk5OS0yMDAxIFBhdWwgYFJ1c3R5JyBSdXNzZWxsCisgKiAoQykgMjAwMi0yMDA0IE5ldGZpbHRlciBDb3JlIFRlYW0gPGNvcmV0ZWFtQG5ldGZpbHRlci5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAxNiBEZWMgMjAwMzogWWFzdXl1a2kgS296YWthaSBAVVNBR0kgPHlhc3V5dWtpLmtvemFrYWlAdG9zaGliYS5jby5qcD4KKyAqCS0gZW5hYmxlIHdvcmtpbmcgd2l0aCBMMyBwcm90b2NvbCBpbmRlcGVuZGVudCBjb25uZWN0aW9uIHRyYWNraW5nLgorICoKKyAqIERlcml2ZWQgZnJvbSBuZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX2dlbmVyaWMuYworICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIuaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b2NvbC5oPgorCit1bnNpZ25lZCBsb25nIG5mX2N0X2dlbmVyaWNfdGltZW91dCA9IDYwMCpIWjsKKworc3RhdGljIGludCBnZW5lcmljX3BrdF90b190dXBsZShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCXVuc2lnbmVkIGludCBkYXRhb2ZmLAorCQkJCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKQoreworCXR1cGxlLT5zcmMudS5hbGwgPSAwOworCXR1cGxlLT5kc3QudS5hbGwgPSAwOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgZ2VuZXJpY19pbnZlcnRfdHVwbGUoc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsCisJCQkJY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqb3JpZykKK3sKKwl0dXBsZS0+c3JjLnUuYWxsID0gMDsKKwl0dXBsZS0+ZHN0LnUuYWxsID0gMDsKKworCXJldHVybiAxOworfQorCisvKiBQcmludCBvdXQgdGhlIHBlci1wcm90b2NvbCBwYXJ0IG9mIHRoZSB0dXBsZS4gKi8KK3N0YXRpYyBpbnQgZ2VuZXJpY19wcmludF90dXBsZShzdHJ1Y3Qgc2VxX2ZpbGUgKnMsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpCit7CisJcmV0dXJuIDA7Cit9CisKKy8qIFByaW50IG91dCB0aGUgcHJpdmF0ZSBwYXJ0IG9mIHRoZSBjb25udHJhY2suICovCitzdGF0aWMgaW50IGdlbmVyaWNfcHJpbnRfY29ubnRyYWNrKHN0cnVjdCBzZXFfZmlsZSAqcywKKwkJCQkgICBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqc3RhdGUpCit7CisJcmV0dXJuIDA7Cit9CisKKy8qIFJldHVybnMgdmVyZGljdCBmb3IgcGFja2V0LCBvciAtMSBmb3IgaW52YWxpZC4gKi8KK3N0YXRpYyBpbnQgcGFja2V0KHN0cnVjdCBuZl9jb25uICpjb25udHJhY2ssCisJCSAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwKKwkJICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJICBpbnQgcGYsCisJCSAgdW5zaWduZWQgaW50IGhvb2tudW0pCit7CisJbmZfY3RfcmVmcmVzaF9hY2N0KGNvbm50cmFjaywgY3RpbmZvLCBza2IsIG5mX2N0X2dlbmVyaWNfdGltZW91dCk7CisJcmV0dXJuIE5GX0FDQ0VQVDsKK30KKworLyogQ2FsbGVkIHdoZW4gYSBuZXcgY29ubmVjdGlvbiBmb3IgdGhpcyBwcm90b2NvbCBmb3VuZC4gKi8KK3N0YXRpYyBpbnQgbmV3KHN0cnVjdCBuZl9jb25uICpjb25udHJhY2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCisJICAgICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmKQoreworCXJldHVybiAxOworfQorCitzdHJ1Y3QgbmZfY29ubnRyYWNrX3Byb3RvY29sIG5mX2Nvbm50cmFja19nZW5lcmljX3Byb3RvY29sID0KK3sKKwkubDNwcm90bwkJPSBQRl9VTlNQRUMsCisJLnByb3RvCQkJPSAwLAorCS5uYW1lCQkJPSAidW5rbm93biIsCisJLnBrdF90b190dXBsZQkJPSBnZW5lcmljX3BrdF90b190dXBsZSwKKwkuaW52ZXJ0X3R1cGxlCQk9IGdlbmVyaWNfaW52ZXJ0X3R1cGxlLAorCS5wcmludF90dXBsZQkJPSBnZW5lcmljX3ByaW50X3R1cGxlLAorCS5wcmludF9jb25udHJhY2sJPSBnZW5lcmljX3ByaW50X2Nvbm50cmFjaywKKwkucGFja2V0CQkJPSBwYWNrZXQsCisJLm5ldwkJCT0gbmV3LAorfTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTYwMGY3Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jCkBAIC0wLDAgKzEsNjcwIEBACisvKgorICogQ29ubmVjdGlvbiB0cmFja2luZyBwcm90b2NvbCBoZWxwZXIgbW9kdWxlIGZvciBTQ1RQLgorICogCisgKiBTQ1RQIGlzIGRlZmluZWQgaW4gUkZDIDI5NjAuIFJlZmVyZW5jZXMgdG8gdmFyaW91cyBzZWN0aW9ucyBpbiB0aGlzIGNvZGUgCisgKiBhcmUgdG8gdGhpcyBSRkMuCisgKiAKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogMTcgT2N0IDIwMDQ6IFlhc3V5dWtpIEtvemFrYWkgQFVTQUdJIDx5YXN1eXVraS5rb3pha2FpQHRvc2hpYmEuY28uanA+CisgKgktIGVuYWJsZSB3b3JraW5nIHdpdGggTDMgcHJvdG9jb2wgaW5kZXBlbmRlbnQgY29ubmVjdGlvbiB0cmFja2luZy4KKyAqCisgKiBEZXJpdmVkIGZyb20gbmV0L2lwdjQvaXBfY29ubnRyYWNrX3NjdHAuYworICovCisKKy8qCisgKiBBZGRlZCBzdXBwb3J0IGZvciBwcm9jIG1hbmlwdWxhdGlvbiBvZiB0aW1lb3V0cy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC9pcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjdHAuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorCisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b2NvbC5oPgorCisjaWYgMAorI2RlZmluZSBERUJVR1AoZm9ybWF0LCAuLi4pIHByaW50ayhmb3JtYXQsICMjIF9fVkFfQVJHU19fKQorI2Vsc2UKKyNkZWZpbmUgREVCVUdQKGZvcm1hdCwgYXJncy4uLikKKyNlbmRpZgorCisvKiBQcm90ZWN0cyBjb25udHJhY2stPnByb3RvLnNjdHAgKi8KK3N0YXRpYyBERUZJTkVfUldMT0NLKHNjdHBfbG9jayk7CisKKy8qIEZJWE1FOiBFeGFtaW5lIGlwZmlsdGVyJ3MgdGltZW91dHMgYW5kIGNvbm50cmFjayB0cmFuc2l0aW9ucyBtb3JlCisgICBjbG9zZWx5LiAgVGhleSdyZSBtb3JlIGNvbXBsZXguIC0tUlIgCisKKyAgIEFuZCBzbyBmb3IgbWUgZm9yIFNDVFAgOkQgLUtpcmFuICovCisKK3N0YXRpYyBjb25zdCBjaGFyICpzY3RwX2Nvbm50cmFja19uYW1lc1tdID0geworCSJOT05FIiwKKwkiQ0xPU0VEIiwKKwkiQ09PS0lFX1dBSVQiLAorCSJDT09LSUVfRUNIT0VEIiwKKwkiRVNUQUJMSVNIRUQiLAorCSJTSFVURE9XTl9TRU5UIiwKKwkiU0hVVERPV05fUkVDRCIsCisJIlNIVVRET1dOX0FDS19TRU5UIiwKK307CisKKyNkZWZpbmUgU0VDUyAgKiBIWgorI2RlZmluZSBNSU5TICAqIDYwIFNFQ1MKKyNkZWZpbmUgSE9VUlMgKiA2MCBNSU5TCisjZGVmaW5lIERBWVMgICogMjQgSE9VUlMKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgbmZfY3Rfc2N0cF90aW1lb3V0X2Nsb3NlZCAgICAgICAgICAgID0gIDEwIFNFQ1M7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBuZl9jdF9zY3RwX3RpbWVvdXRfY29va2llX3dhaXQgICAgICAgPSAgIDMgU0VDUzsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG5mX2N0X3NjdHBfdGltZW91dF9jb29raWVfZWNob2VkICAgICA9ICAgMyBTRUNTOworc3RhdGljIHVuc2lnbmVkIGxvbmcgbmZfY3Rfc2N0cF90aW1lb3V0X2VzdGFibGlzaGVkICAgICAgID0gICA1IERBWVM7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBuZl9jdF9zY3RwX3RpbWVvdXRfc2h1dGRvd25fc2VudCAgICAgPSAzMDAgU0VDUyAvIDEwMDA7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBuZl9jdF9zY3RwX3RpbWVvdXRfc2h1dGRvd25fcmVjZCAgICAgPSAzMDAgU0VDUyAvIDEwMDA7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBuZl9jdF9zY3RwX3RpbWVvdXRfc2h1dGRvd25fYWNrX3NlbnQgPSAgIDMgU0VDUzsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgKiBzY3RwX3RpbWVvdXRzW10KKz0geyBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTQ1RQX0NPTk5UUkFDS19OT05FICAqLworICAgICZuZl9jdF9zY3RwX3RpbWVvdXRfY2xvc2VkLAkgICAgICAgICAgIC8qIFNDVFBfQ09OTlRSQUNLX0NMT1NFRCAqLworICAgICZuZl9jdF9zY3RwX3RpbWVvdXRfY29va2llX3dhaXQsICAgICAgIC8qIFNDVFBfQ09OTlRSQUNLX0NPT0tJRV9XQUlUICovCisgICAgJm5mX2N0X3NjdHBfdGltZW91dF9jb29raWVfZWNob2VkLCAgICAgLyogU0NUUF9DT05OVFJBQ0tfQ09PS0lFX0VDSE9FRCAqLworICAgICZuZl9jdF9zY3RwX3RpbWVvdXRfZXN0YWJsaXNoZWQsICAgICAgIC8qIFNDVFBfQ09OTlRSQUNLX0VTVEFCTElTSEVEICovCisgICAgJm5mX2N0X3NjdHBfdGltZW91dF9zaHV0ZG93bl9zZW50LCAgICAgLyogU0NUUF9DT05OVFJBQ0tfU0hVVERPV05fU0VOVCAqLworICAgICZuZl9jdF9zY3RwX3RpbWVvdXRfc2h1dGRvd25fcmVjZCwgICAgIC8qIFNDVFBfQ09OTlRSQUNLX1NIVVRET1dOX1JFQ0QgKi8KKyAgICAmbmZfY3Rfc2N0cF90aW1lb3V0X3NodXRkb3duX2Fja19zZW50ICAvKiBTQ1RQX0NPTk5UUkFDS19TSFVURE9XTl9BQ0tfU0VOVCAqLworIH07CisKKyNkZWZpbmUgc05PIFNDVFBfQ09OTlRSQUNLX05PTkUKKyNkZWZpbmUJc0NMIFNDVFBfQ09OTlRSQUNLX0NMT1NFRAorI2RlZmluZQlzQ1cgU0NUUF9DT05OVFJBQ0tfQ09PS0lFX1dBSVQKKyNkZWZpbmUJc0NFIFNDVFBfQ09OTlRSQUNLX0NPT0tJRV9FQ0hPRUQKKyNkZWZpbmUJc0VTIFNDVFBfQ09OTlRSQUNLX0VTVEFCTElTSEVECisjZGVmaW5lCXNTUyBTQ1RQX0NPTk5UUkFDS19TSFVURE9XTl9TRU5UCisjZGVmaW5lCXNTUiBTQ1RQX0NPTk5UUkFDS19TSFVURE9XTl9SRUNECisjZGVmaW5lCXNTQSBTQ1RQX0NPTk5UUkFDS19TSFVURE9XTl9BQ0tfU0VOVAorI2RlZmluZQlzSVYgU0NUUF9DT05OVFJBQ0tfTUFYCisKKy8qIAorCVRoZXNlIGFyZSB0aGUgZGVzY3JpcHRpb25zIG9mIHRoZSBzdGF0ZXM6CisKK05PVEU6IFRoZXNlIHN0YXRlIG5hbWVzIGFyZSB0YW50YWxpemluZ2x5IHNpbWlsYXIgdG8gdGhlIHN0YXRlcyBvZiBhbiAKK1NDVFAgZW5kcG9pbnQuIEJ1dCB0aGUgaW50ZXJwcmV0YXRpb24gb2YgdGhlIHN0YXRlcyBpcyBhIGxpdHRsZSBkaWZmZXJlbnQsCitjb25zaWRlcmluZyB0aGF0IHRoZXNlIGFyZSB0aGUgc3RhdGVzIG9mIHRoZSBjb25uZWN0aW9uIGFuZCBub3Qgb2YgYW4gZW5kIAorcG9pbnQuIFBsZWFzZSBub3RlIHRoZSBzdWJ0bGV0aWVzLiAtS2lyYW4KKworTk9ORSAgICAgICAgICAgICAgLSBOb3RoaW5nIHNvIGZhci4KK0NPT0tJRSBXQUlUICAgICAgIC0gV2UgaGF2ZSBzZWVuIGFuIElOSVQgY2h1bmsgaW4gdGhlIG9yaWdpbmFsIGRpcmVjdGlvbiwgb3IgYWxzbyAKKyAgICAgICAgICAgICAgICAgICAgYW4gSU5JVF9BQ0sgY2h1bmsgaW4gdGhlIHJlcGx5IGRpcmVjdGlvbi4KK0NPT0tJRSBFQ0hPRUQgICAgIC0gV2UgaGF2ZSBzZWVuIGEgQ09PS0lFX0VDSE8gY2h1bmsgaW4gdGhlIG9yaWdpbmFsIGRpcmVjdGlvbi4KK0VTVEFCTElTSEVEICAgICAgIC0gV2UgaGF2ZSBzZWVuIGEgQ09PS0lFX0FDSyBpbiB0aGUgcmVwbHkgZGlyZWN0aW9uLgorU0hVVERPV05fU0VOVCAgICAgLSBXZSBoYXZlIHNlZW4gYSBTSFVURE9XTiBjaHVuayBpbiB0aGUgb3JpZ2luYWwgZGlyZWN0aW9uLgorU0hVVERPV05fUkVDRCAgICAgLSBXZSBoYXZlIHNlZW4gYSBTSFVURE9XTiBjaHVuayBpbiB0aGUgcmVwbHkgZGlyZWN0b2luLgorU0hVVERPV05fQUNLX1NFTlQgLSBXZSBoYXZlIHNlZW4gYSBTSFVURE9XTl9BQ0sgY2h1bmsgaW4gdGhlIGRpcmVjdGlvbiBvcHBvc2l0ZQorICAgICAgICAgICAgICAgICAgICB0byB0aGF0IG9mIHRoZSBTSFVURE9XTiBjaHVuay4KK0NMT1NFRCAgICAgICAgICAgIC0gV2UgaGF2ZSBzZWVuIGEgU0hVVERPV05fQ09NUExFVEUgY2h1bmsgaW4gdGhlIGRpcmVjdGlvbiBvZiAKKyAgICAgICAgICAgICAgICAgICAgdGhlIFNIVVRET1dOIGNodW5rLiBDb25uZWN0aW9uIGlzIGNsb3NlZC4KKyovCisKKy8qIFRPRE8KKyAtIEkgaGF2ZSBhc3N1bWVkIHRoYXQgdGhlIGZpcnN0IElOSVQgaXMgaW4gdGhlIG9yaWdpbmFsIGRpcmVjdGlvbi4gCisgVGhpcyBtZXNzZXMgdGhpbmdzIHdoZW4gYW4gSU5JVCBjb21lcyBpbiB0aGUgcmVwbHkgZGlyZWN0aW9uIGluIENMT1NFRAorIHN0YXRlLgorIC0gQ2hlY2sgdGhlIGVycm9yIHR5cGUgaW4gdGhlIHJlcGx5IGRpciBiZWZvcmUgdHJhbnNpdGlvbmluZyBmcm9tIAorY29va2llIGVjaG9lZCB0byBjbG9zZWQuCisgLSBTZWMgNS4yLjQgb2YgUkZDIDI5NjAKKyAtIE11bHRpIEhvbWluZyBzdXBwb3J0LgorKi8KKworLyogU0NUUCBjb25udHJhY2sgc3RhdGUgdHJhbnNpdGlvbnMgKi8KK3N0YXRpYyBlbnVtIHNjdHBfY29ubnRyYWNrIHNjdHBfY29ubnRyYWNrc1syXVs5XVtTQ1RQX0NPTk5UUkFDS19NQVhdID0geworCXsKKy8qCU9SSUdJTkFMCSovCisvKiAgICAgICAgICAgICAgICAgIHNOTywgc0NMLCBzQ1csIHNDRSwgc0VTLCBzU1MsIHNTUiwgc1NBICovCisvKiBpbml0ICAgICAgICAgKi8ge3NDVywgc0NXLCBzQ1csIHNDRSwgc0VTLCBzU1MsIHNTUiwgc1NBfSwKKy8qIGluaXRfYWNrICAgICAqLyB7c0NMLCBzQ0wsIHNDVywgc0NFLCBzRVMsIHNTUywgc1NSLCBzU0F9LAorLyogYWJvcnQgICAgICAgICovIHtzQ0wsIHNDTCwgc0NMLCBzQ0wsIHNDTCwgc0NMLCBzQ0wsIHNDTH0sCisvKiBzaHV0ZG93biAgICAgKi8ge3NDTCwgc0NMLCBzQ1csIHNDRSwgc1NTLCBzU1MsIHNTUiwgc1NBfSwKKy8qIHNodXRkb3duX2FjayAqLyB7c1NBLCBzQ0wsIHNDVywgc0NFLCBzRVMsIHNTQSwgc1NBLCBzU0F9LAorLyogZXJyb3IgICAgICAgICovIHtzQ0wsIHNDTCwgc0NXLCBzQ0UsIHNFUywgc1NTLCBzU1IsIHNTQX0sLyogQ2FudCBoYXZlIFN0YWxlIGNvb2tpZSovCisvKiBjb29raWVfZWNobyAgKi8ge3NDTCwgc0NMLCBzQ0UsIHNDRSwgc0VTLCBzU1MsIHNTUiwgc1NBfSwvKiA1LjIuNCAtIEJpZyBUT0RPICovCisvKiBjb29raWVfYWNrICAgKi8ge3NDTCwgc0NMLCBzQ1csIHNDRSwgc0VTLCBzU1MsIHNTUiwgc1NBfSwvKiBDYW50IGNvbWUgaW4gb3JpZyBkaXIgKi8KKy8qIHNodXRkb3duX2NvbXAqLyB7c0NMLCBzQ0wsIHNDVywgc0NFLCBzRVMsIHNTUywgc1NSLCBzQ0x9CisJfSwKKwl7CisvKglSRVBMWQkqLworLyogICAgICAgICAgICAgICAgICBzTk8sIHNDTCwgc0NXLCBzQ0UsIHNFUywgc1NTLCBzU1IsIHNTQSAqLworLyogaW5pdCAgICAgICAgICovIHtzSVYsIHNDTCwgc0NXLCBzQ0UsIHNFUywgc1NTLCBzU1IsIHNTQX0sLyogSU5JVCBpbiBzQ0wgQmlnIFRPRE8gKi8KKy8qIGluaXRfYWNrICAgICAqLyB7c0lWLCBzQ0wsIHNDVywgc0NFLCBzRVMsIHNTUywgc1NSLCBzU0F9LAorLyogYWJvcnQgICAgICAgICovIHtzSVYsIHNDTCwgc0NMLCBzQ0wsIHNDTCwgc0NMLCBzQ0wsIHNDTH0sCisvKiBzaHV0ZG93biAgICAgKi8ge3NJViwgc0NMLCBzQ1csIHNDRSwgc1NSLCBzU1MsIHNTUiwgc1NBfSwKKy8qIHNodXRkb3duX2FjayAqLyB7c0lWLCBzQ0wsIHNDVywgc0NFLCBzRVMsIHNTQSwgc1NBLCBzU0F9LAorLyogZXJyb3IgICAgICAgICovIHtzSVYsIHNDTCwgc0NXLCBzQ0wsIHNFUywgc1NTLCBzU1IsIHNTQX0sCisvKiBjb29raWVfZWNobyAgKi8ge3NJViwgc0NMLCBzQ1csIHNDRSwgc0VTLCBzU1MsIHNTUiwgc1NBfSwvKiBDYW50IGNvbWUgaW4gcmVwbHkgZGlyICovCisvKiBjb29raWVfYWNrICAgKi8ge3NJViwgc0NMLCBzQ1csIHNFUywgc0VTLCBzU1MsIHNTUiwgc1NBfSwKKy8qIHNodXRkb3duX2NvbXAqLyB7c0lWLCBzQ0wsIHNDVywgc0NFLCBzRVMsIHNTUywgc1NSLCBzQ0x9CisJfQorfTsKKworc3RhdGljIGludCBzY3RwX3BrdF90b190dXBsZShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwKKwkJCSAgICAgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpCit7CisJc2N0cF9zY3RwaGRyX3QgX2hkciwgKmhwOworCisJREVCVUdQKF9fRlVOQ1RJT05fXyk7CisJREVCVUdQKCJcbiIpOworCisJLyogQWN0dWFsbHkgb25seSBuZWVkIGZpcnN0IDggYnl0ZXMuICovCisJaHAgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBkYXRhb2ZmLCA4LCAmX2hkcik7CisJaWYgKGhwID09IE5VTEwpCisJCXJldHVybiAwOworCisJdHVwbGUtPnNyYy51LnNjdHAucG9ydCA9IGhwLT5zb3VyY2U7CisJdHVwbGUtPmRzdC51LnNjdHAucG9ydCA9IGhwLT5kZXN0OworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHNjdHBfaW52ZXJ0X3R1cGxlKHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICpvcmlnKQoreworCURFQlVHUChfX0ZVTkNUSU9OX18pOworCURFQlVHUCgiXG4iKTsKKworCXR1cGxlLT5zcmMudS5zY3RwLnBvcnQgPSBvcmlnLT5kc3QudS5zY3RwLnBvcnQ7CisJdHVwbGUtPmRzdC51LnNjdHAucG9ydCA9IG9yaWctPnNyYy51LnNjdHAucG9ydDsKKwlyZXR1cm4gMTsKK30KKworLyogUHJpbnQgb3V0IHRoZSBwZXItcHJvdG9jb2wgcGFydCBvZiB0aGUgdHVwbGUuICovCitzdGF0aWMgaW50IHNjdHBfcHJpbnRfdHVwbGUoc3RydWN0IHNlcV9maWxlICpzLAorCQkJICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKQoreworCURFQlVHUChfX0ZVTkNUSU9OX18pOworCURFQlVHUCgiXG4iKTsKKworCXJldHVybiBzZXFfcHJpbnRmKHMsICJzcG9ydD0laHUgZHBvcnQ9JWh1ICIsCisJCQkgIG50b2hzKHR1cGxlLT5zcmMudS5zY3RwLnBvcnQpLAorCQkJICBudG9ocyh0dXBsZS0+ZHN0LnUuc2N0cC5wb3J0KSk7Cit9CisKKy8qIFByaW50IG91dCB0aGUgcHJpdmF0ZSBwYXJ0IG9mIHRoZSBjb25udHJhY2suICovCitzdGF0aWMgaW50IHNjdHBfcHJpbnRfY29ubnRyYWNrKHN0cnVjdCBzZXFfZmlsZSAqcywKKwkJCQljb25zdCBzdHJ1Y3QgbmZfY29ubiAqY29ubnRyYWNrKQoreworCWVudW0gc2N0cF9jb25udHJhY2sgc3RhdGU7CisKKwlERUJVR1AoX19GVU5DVElPTl9fKTsKKwlERUJVR1AoIlxuIik7CisKKwlyZWFkX2xvY2tfYmgoJnNjdHBfbG9jayk7CisJc3RhdGUgPSBjb25udHJhY2stPnByb3RvLnNjdHAuc3RhdGU7CisJcmVhZF91bmxvY2tfYmgoJnNjdHBfbG9jayk7CisKKwlyZXR1cm4gc2VxX3ByaW50ZihzLCAiJXMgIiwgc2N0cF9jb25udHJhY2tfbmFtZXNbc3RhdGVdKTsKK30KKworI2RlZmluZSBmb3JfZWFjaF9zY3RwX2NodW5rKHNrYiwgc2NoLCBfc2NoLCBvZmZzZXQsIGRhdGFvZmYsIGNvdW50KQlcCitmb3IgKG9mZnNldCA9IGRhdGFvZmYgKyBzaXplb2Yoc2N0cF9zY3RwaGRyX3QpLCBjb3VudCA9IDA7CQlcCisJb2Zmc2V0IDwgc2tiLT5sZW4gJiYJCQkJCQlcCisJKHNjaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCwgc2l6ZW9mKF9zY2gpLCAmX3NjaCkpOwlcCisJb2Zmc2V0ICs9IChodG9ucyhzY2gtPmxlbmd0aCkgKyAzKSAmIH4zLCBjb3VudCsrKQorCisvKiBTb21lIHZhbGlkaXR5IGNoZWNrcyB0byBtYWtlIHN1cmUgdGhlIGNodW5rcyBhcmUgZmluZSAqLworc3RhdGljIGludCBkb19iYXNpY19jaGVja3Moc3RydWN0IG5mX2Nvbm4gKmNvbm50cmFjaywKKwkJCSAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCisJCQkgICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwKKwkJCSAgIGNoYXIgKm1hcCkKK3sKKwl1X2ludDMyX3Qgb2Zmc2V0LCBjb3VudDsKKwlzY3RwX2NodW5raGRyX3QgX3NjaCwgKnNjaDsKKwlpbnQgZmxhZzsKKworCURFQlVHUChfX0ZVTkNUSU9OX18pOworCURFQlVHUCgiXG4iKTsKKworCWZsYWcgPSAwOworCisJZm9yX2VhY2hfc2N0cF9jaHVuayAoc2tiLCBzY2gsIF9zY2gsIG9mZnNldCwgZGF0YW9mZiwgY291bnQpIHsKKwkJREVCVUdQKCJDaHVuayBOdW06ICVkICBUeXBlOiAlZFxuIiwgY291bnQsIHNjaC0+dHlwZSk7CisKKwkJaWYgKHNjaC0+dHlwZSA9PSBTQ1RQX0NJRF9JTklUIAorCQkJfHwgc2NoLT50eXBlID09IFNDVFBfQ0lEX0lOSVRfQUNLCisJCQl8fCBzY2gtPnR5cGUgPT0gU0NUUF9DSURfU0hVVERPV05fQ09NUExFVEUpIHsKKwkJCWZsYWcgPSAxOworCQl9CisKKwkJLyogQ29va2llIEFjay9FY2hvIGNodW5rcyBub3QgdGhlIGZpcnN0IE9SIAorCQkgICBJbml0IC8gSW5pdCBBY2sgLyBTaHV0ZG93biBjb21wbCBjaHVua3Mgbm90IHRoZSBvbmx5IGNodW5rcyAqLworCQlpZiAoKHNjaC0+dHlwZSA9PSBTQ1RQX0NJRF9DT09LSUVfQUNLIAorCQkJfHwgc2NoLT50eXBlID09IFNDVFBfQ0lEX0NPT0tJRV9FQ0hPCisJCQl8fCBmbGFnKQorCQkgICAgICYmIGNvdW50ICE9MCApIHsKKwkJCURFQlVHUCgiQmFzaWMgY2hlY2tzIGZhaWxlZFxuIik7CisJCQlyZXR1cm4gMTsKKwkJfQorCisJCWlmIChtYXApIHsKKwkJCXNldF9iaXQoc2NoLT50eXBlLCAodm9pZCAqKW1hcCk7CisJCX0KKwl9CisKKwlERUJVR1AoIkJhc2ljIGNoZWNrcyBwYXNzZWRcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5ld19zdGF0ZShlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLAorCQkgICAgIGVudW0gc2N0cF9jb25udHJhY2sgY3VyX3N0YXRlLAorCQkgICAgIGludCBjaHVua190eXBlKQoreworCWludCBpOworCisJREVCVUdQKF9fRlVOQ1RJT05fXyk7CisJREVCVUdQKCJcbiIpOworCisJREVCVUdQKCJDaHVuayB0eXBlOiAlZFxuIiwgY2h1bmtfdHlwZSk7CisKKwlzd2l0Y2ggKGNodW5rX3R5cGUpIHsKKwkJY2FzZSBTQ1RQX0NJRF9JTklUOiAKKwkJCURFQlVHUCgiU0NUUF9DSURfSU5JVFxuIik7CisJCQlpID0gMDsgYnJlYWs7CisJCWNhc2UgU0NUUF9DSURfSU5JVF9BQ0s6IAorCQkJREVCVUdQKCJTQ1RQX0NJRF9JTklUX0FDS1xuIik7CisJCQlpID0gMTsgYnJlYWs7CisJCWNhc2UgU0NUUF9DSURfQUJPUlQ6IAorCQkJREVCVUdQKCJTQ1RQX0NJRF9BQk9SVFxuIik7CisJCQlpID0gMjsgYnJlYWs7CisJCWNhc2UgU0NUUF9DSURfU0hVVERPV046IAorCQkJREVCVUdQKCJTQ1RQX0NJRF9TSFVURE9XTlxuIik7CisJCQlpID0gMzsgYnJlYWs7CisJCWNhc2UgU0NUUF9DSURfU0hVVERPV05fQUNLOiAKKwkJCURFQlVHUCgiU0NUUF9DSURfU0hVVERPV05fQUNLXG4iKTsKKwkJCWkgPSA0OyBicmVhazsKKwkJY2FzZSBTQ1RQX0NJRF9FUlJPUjogCisJCQlERUJVR1AoIlNDVFBfQ0lEX0VSUk9SXG4iKTsKKwkJCWkgPSA1OyBicmVhazsKKwkJY2FzZSBTQ1RQX0NJRF9DT09LSUVfRUNITzogCisJCQlERUJVR1AoIlNDVFBfQ0lEX0NPT0tJRV9FQ0hPXG4iKTsKKwkJCWkgPSA2OyBicmVhazsKKwkJY2FzZSBTQ1RQX0NJRF9DT09LSUVfQUNLOiAKKwkJCURFQlVHUCgiU0NUUF9DSURfQ09PS0lFX0FDS1xuIik7CisJCQlpID0gNzsgYnJlYWs7CisJCWNhc2UgU0NUUF9DSURfU0hVVERPV05fQ09NUExFVEU6IAorCQkJREVCVUdQKCJTQ1RQX0NJRF9TSFVURE9XTl9DT01QTEVURVxuIik7CisJCQlpID0gODsgYnJlYWs7CisJCWRlZmF1bHQ6CisJCQkvKiBPdGhlciBjaHVua3MgbGlrZSBEQVRBLCBTQUNLLCBIRUFSVEJFQVQgYW5kCisJCQlpdHMgQUNLIGRvIG5vdCBjYXVzZSBhIGNoYW5nZSBpbiBzdGF0ZSAqLworCQkJREVCVUdQKCJVbmtub3duIGNodW5rIHR5cGUsIFdpbGwgc3RheSBpbiAlc1xuIiwgCisJCQkJCQlzY3RwX2Nvbm50cmFja19uYW1lc1tjdXJfc3RhdGVdKTsKKwkJCXJldHVybiBjdXJfc3RhdGU7CisJfQorCisJREVCVUdQKCJkaXI6ICVkICAgY3VyX3N0YXRlOiAlcyAgY2h1bmtfdHlwZTogJWQgIG5ld19zdGF0ZTogJXNcbiIsIAorCQkJZGlyLCBzY3RwX2Nvbm50cmFja19uYW1lc1tjdXJfc3RhdGVdLCBjaHVua190eXBlLAorCQkJc2N0cF9jb25udHJhY2tfbmFtZXNbc2N0cF9jb25udHJhY2tzW2Rpcl1baV1bY3VyX3N0YXRlXV0pOworCisJcmV0dXJuIHNjdHBfY29ubnRyYWNrc1tkaXJdW2ldW2N1cl9zdGF0ZV07Cit9CisKKy8qIFJldHVybnMgdmVyZGljdCBmb3IgcGFja2V0LCBvciAtMSBmb3IgaW52YWxpZC4gKi8KK3N0YXRpYyBpbnQgc2N0cF9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmNvbm50cmFjaywKKwkJICAgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwKKwkJICAgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkgICAgICAgaW50IHBmLAorCQkgICAgICAgdW5zaWduZWQgaW50IGhvb2tudW0pCit7CisJZW51bSBzY3RwX2Nvbm50cmFjayBuZXdjb25udHJhY2ssIG9sZHNjdHBzdGF0ZTsKKwlzY3RwX3NjdHBoZHJfdCBfc2N0cGgsICpzaDsKKwlzY3RwX2NodW5raGRyX3QgX3NjaCwgKnNjaDsKKwl1X2ludDMyX3Qgb2Zmc2V0LCBjb3VudDsKKwljaGFyIG1hcFsyNTYgLyBzaXplb2YgKGNoYXIpXSA9IHswfTsKKworCURFQlVHUChfX0ZVTkNUSU9OX18pOworCURFQlVHUCgiXG4iKTsKKworCXNoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgZGF0YW9mZiwgc2l6ZW9mKF9zY3RwaCksICZfc2N0cGgpOworCWlmIChzaCA9PSBOVUxMKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoZG9fYmFzaWNfY2hlY2tzKGNvbm50cmFjaywgc2tiLCBkYXRhb2ZmLCBtYXApICE9IDApCisJCXJldHVybiAtMTsKKworCS8qIENoZWNrIHRoZSB2ZXJpZmljYXRpb24gdGFnIChTZWMgOC41KSAqLworCWlmICghdGVzdF9iaXQoU0NUUF9DSURfSU5JVCwgKHZvaWQgKiltYXApCisJCSYmICF0ZXN0X2JpdChTQ1RQX0NJRF9TSFVURE9XTl9DT01QTEVURSwgKHZvaWQgKiltYXApCisJCSYmICF0ZXN0X2JpdChTQ1RQX0NJRF9DT09LSUVfRUNITywgKHZvaWQgKiltYXApCisJCSYmICF0ZXN0X2JpdChTQ1RQX0NJRF9BQk9SVCwgKHZvaWQgKiltYXApCisJCSYmICF0ZXN0X2JpdChTQ1RQX0NJRF9TSFVURE9XTl9BQ0ssICh2b2lkICopbWFwKQorCQkmJiAoc2gtPnZ0YWcgIT0gY29ubnRyYWNrLT5wcm90by5zY3RwLnZ0YWdbQ1RJTkZPMkRJUihjdGluZm8pXSkpIHsKKwkJREVCVUdQKCJWZXJpZmljYXRpb24gdGFnIGNoZWNrIGZhaWxlZFxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlvbGRzY3Rwc3RhdGUgPSBuZXdjb25udHJhY2sgPSBTQ1RQX0NPTk5UUkFDS19NQVg7CisJZm9yX2VhY2hfc2N0cF9jaHVuayAoc2tiLCBzY2gsIF9zY2gsIG9mZnNldCwgZGF0YW9mZiwgY291bnQpIHsKKwkJd3JpdGVfbG9ja19iaCgmc2N0cF9sb2NrKTsKKworCQkvKiBTcGVjaWFsIGNhc2VzIG9mIFZlcmlmaWNhdGlvbiB0YWcgY2hlY2sgKFNlYyA4LjUuMSkgKi8KKwkJaWYgKHNjaC0+dHlwZSA9PSBTQ1RQX0NJRF9JTklUKSB7CisJCQkvKiBTZWMgOC41LjEgKEEpICovCisJCQlpZiAoc2gtPnZ0YWcgIT0gMCkgeworCQkJCXdyaXRlX3VubG9ja19iaCgmc2N0cF9sb2NrKTsKKwkJCQlyZXR1cm4gLTE7CisJCQl9CisJCX0gZWxzZSBpZiAoc2NoLT50eXBlID09IFNDVFBfQ0lEX0FCT1JUKSB7CisJCQkvKiBTZWMgOC41LjEgKEIpICovCisJCQlpZiAoIShzaC0+dnRhZyA9PSBjb25udHJhY2stPnByb3RvLnNjdHAudnRhZ1tDVElORk8yRElSKGN0aW5mbyldKQorCQkJCSYmICEoc2gtPnZ0YWcgPT0gY29ubnRyYWNrLT5wcm90by5zY3RwLnZ0YWcKKwkJCQkJCQlbMSAtIENUSU5GTzJESVIoY3RpbmZvKV0pKSB7CisJCQkJd3JpdGVfdW5sb2NrX2JoKCZzY3RwX2xvY2spOworCQkJCXJldHVybiAtMTsKKwkJCX0KKwkJfSBlbHNlIGlmIChzY2gtPnR5cGUgPT0gU0NUUF9DSURfU0hVVERPV05fQ09NUExFVEUpIHsKKwkJCS8qIFNlYyA4LjUuMSAoQykgKi8KKwkJCWlmICghKHNoLT52dGFnID09IGNvbm50cmFjay0+cHJvdG8uc2N0cC52dGFnW0NUSU5GTzJESVIoY3RpbmZvKV0pCisJCQkJJiYgIShzaC0+dnRhZyA9PSBjb25udHJhY2stPnByb3RvLnNjdHAudnRhZworCQkJCQkJCVsxIC0gQ1RJTkZPMkRJUihjdGluZm8pXSAKKwkJCQkJJiYgKHNjaC0+ZmxhZ3MgJiAxKSkpIHsKKwkJCQl3cml0ZV91bmxvY2tfYmgoJnNjdHBfbG9jayk7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCQl9IGVsc2UgaWYgKHNjaC0+dHlwZSA9PSBTQ1RQX0NJRF9DT09LSUVfRUNITykgeworCQkJLyogU2VjIDguNS4xIChEKSAqLworCQkJaWYgKCEoc2gtPnZ0YWcgPT0gY29ubnRyYWNrLT5wcm90by5zY3RwLnZ0YWdbQ1RJTkZPMkRJUihjdGluZm8pXSkpIHsKKwkJCQl3cml0ZV91bmxvY2tfYmgoJnNjdHBfbG9jayk7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCQl9CisKKwkJb2xkc2N0cHN0YXRlID0gY29ubnRyYWNrLT5wcm90by5zY3RwLnN0YXRlOworCQluZXdjb25udHJhY2sgPSBuZXdfc3RhdGUoQ1RJTkZPMkRJUihjdGluZm8pLCBvbGRzY3Rwc3RhdGUsIHNjaC0+dHlwZSk7CisKKwkJLyogSW52YWxpZCAqLworCQlpZiAobmV3Y29ubnRyYWNrID09IFNDVFBfQ09OTlRSQUNLX01BWCkgeworCQkJREVCVUdQKCJuZl9jb25udHJhY2tfc2N0cDogSW52YWxpZCBkaXI9JWkgY3R5cGU9JXUgY29ubnRyYWNrPSV1XG4iLAorCQkJICAgICAgIENUSU5GTzJESVIoY3RpbmZvKSwgc2NoLT50eXBlLCBvbGRzY3Rwc3RhdGUpOworCQkJd3JpdGVfdW5sb2NrX2JoKCZzY3RwX2xvY2spOworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJLyogSWYgaXQgaXMgYW4gSU5JVCBvciBhbiBJTklUIEFDSyBub3RlIGRvd24gdGhlIHZ0YWcgKi8KKwkJaWYgKHNjaC0+dHlwZSA9PSBTQ1RQX0NJRF9JTklUIAorCQkJfHwgc2NoLT50eXBlID09IFNDVFBfQ0lEX0lOSVRfQUNLKSB7CisJCQlzY3RwX2luaXRoZHJfdCBfaW5pdGhkciwgKmloOworCisJCQlpaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCArIHNpemVvZihzY3RwX2NodW5raGRyX3QpLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKF9pbml0aGRyKSwgJl9pbml0aGRyKTsKKwkJCWlmIChpaCA9PSBOVUxMKSB7CisJCQkJCXdyaXRlX3VubG9ja19iaCgmc2N0cF9sb2NrKTsKKwkJCQkJcmV0dXJuIC0xOworCQkJfQorCQkJREVCVUdQKCJTZXR0aW5nIHZ0YWcgJXggZm9yIGRpciAlZFxuIiwgCisJCQkJCWloLT5pbml0X3RhZywgIUNUSU5GTzJESVIoY3RpbmZvKSk7CisJCQljb25udHJhY2stPnByb3RvLnNjdHAudnRhZ1shQ1RJTkZPMkRJUihjdGluZm8pXSA9IGloLT5pbml0X3RhZzsKKwkJfQorCisJCWNvbm50cmFjay0+cHJvdG8uc2N0cC5zdGF0ZSA9IG5ld2Nvbm50cmFjazsKKwkJaWYgKG9sZHNjdHBzdGF0ZSAhPSBuZXdjb25udHJhY2spCisJCQluZl9jb25udHJhY2tfZXZlbnRfY2FjaGUoSVBDVF9QUk9UT0lORk8sIHNrYik7CisJCXdyaXRlX3VubG9ja19iaCgmc2N0cF9sb2NrKTsKKwl9CisKKwluZl9jdF9yZWZyZXNoX2FjY3QoY29ubnRyYWNrLCBjdGluZm8sIHNrYiwgKnNjdHBfdGltZW91dHNbbmV3Y29ubnRyYWNrXSk7CisKKwlpZiAob2xkc2N0cHN0YXRlID09IFNDVFBfQ09OTlRSQUNLX0NPT0tJRV9FQ0hPRUQKKwkJJiYgQ1RJTkZPMkRJUihjdGluZm8pID09IElQX0NUX0RJUl9SRVBMWQorCQkmJiBuZXdjb25udHJhY2sgPT0gU0NUUF9DT05OVFJBQ0tfRVNUQUJMSVNIRUQpIHsKKwkJREVCVUdQKCJTZXR0aW5nIGFzc3VyZWQgYml0XG4iKTsKKwkJc2V0X2JpdChJUFNfQVNTVVJFRF9CSVQsICZjb25udHJhY2stPnN0YXR1cyk7CisJCW5mX2Nvbm50cmFja19ldmVudF9jYWNoZShJUENUX1NUQVRVUywgc2tiKTsKKwl9CisKKwlyZXR1cm4gTkZfQUNDRVBUOworfQorCisvKiBDYWxsZWQgd2hlbiBhIG5ldyBjb25uZWN0aW9uIGZvciB0aGlzIHByb3RvY29sIGZvdW5kLiAqLworc3RhdGljIGludCBzY3RwX25ldyhzdHJ1Y3QgbmZfY29ubiAqY29ubnRyYWNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkgICAgdW5zaWduZWQgaW50IGRhdGFvZmYpCit7CisJZW51bSBzY3RwX2Nvbm50cmFjayBuZXdjb25udHJhY2s7CisJc2N0cF9zY3RwaGRyX3QgX3NjdHBoLCAqc2g7CisJc2N0cF9jaHVua2hkcl90IF9zY2gsICpzY2g7CisJdV9pbnQzMl90IG9mZnNldCwgY291bnQ7CisJY2hhciBtYXBbMjU2IC8gc2l6ZW9mIChjaGFyKV0gPSB7MH07CisKKwlERUJVR1AoX19GVU5DVElPTl9fKTsKKwlERUJVR1AoIlxuIik7CisKKwlzaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIGRhdGFvZmYsIHNpemVvZihfc2N0cGgpLCAmX3NjdHBoKTsKKwlpZiAoc2ggPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoZG9fYmFzaWNfY2hlY2tzKGNvbm50cmFjaywgc2tiLCBkYXRhb2ZmLCBtYXApICE9IDApCisJCXJldHVybiAwOworCisJLyogSWYgYW4gT09UQiBwYWNrZXQgaGFzIGFueSBvZiB0aGVzZSBjaHVua3MgZGlzY2FyZCAoU2VjIDguNCkgKi8KKwlpZiAoKHRlc3RfYml0IChTQ1RQX0NJRF9BQk9SVCwgKHZvaWQgKiltYXApKQorCQl8fCAodGVzdF9iaXQgKFNDVFBfQ0lEX1NIVVRET1dOX0NPTVBMRVRFLCAodm9pZCAqKW1hcCkpCisJCXx8ICh0ZXN0X2JpdCAoU0NUUF9DSURfQ09PS0lFX0FDSywgKHZvaWQgKiltYXApKSkgeworCQlyZXR1cm4gMDsKKwl9CisKKwluZXdjb25udHJhY2sgPSBTQ1RQX0NPTk5UUkFDS19NQVg7CisJZm9yX2VhY2hfc2N0cF9jaHVuayAoc2tiLCBzY2gsIF9zY2gsIG9mZnNldCwgZGF0YW9mZiwgY291bnQpIHsKKwkJLyogRG9uJ3QgbmVlZCBsb2NrIGhlcmU6IHRoaXMgY29ubnRyYWNrIG5vdCBpbiBjaXJjdWxhdGlvbiB5ZXQgKi8KKwkJbmV3Y29ubnRyYWNrID0gbmV3X3N0YXRlKElQX0NUX0RJUl9PUklHSU5BTCwgCisJCQkJCSBTQ1RQX0NPTk5UUkFDS19OT05FLCBzY2gtPnR5cGUpOworCisJCS8qIEludmFsaWQ6IGRlbGV0ZSBjb25udHJhY2sgKi8KKwkJaWYgKG5ld2Nvbm50cmFjayA9PSBTQ1RQX0NPTk5UUkFDS19NQVgpIHsKKwkJCURFQlVHUCgibmZfY29ubnRyYWNrX3NjdHA6IGludmFsaWQgbmV3IGRlbGV0aW5nLlxuIik7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCS8qIENvcHkgdGhlIHZ0YWcgaW50byB0aGUgc3RhdGUgaW5mbyAqLworCQlpZiAoc2NoLT50eXBlID09IFNDVFBfQ0lEX0lOSVQpIHsKKwkJCWlmIChzaC0+dnRhZyA9PSAwKSB7CisJCQkJc2N0cF9pbml0aGRyX3QgX2luaXRoZHIsICppaDsKKworCQkJCWloID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0ICsgc2l6ZW9mKHNjdHBfY2h1bmtoZHJfdCksCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKF9pbml0aGRyKSwgJl9pbml0aGRyKTsKKwkJCQlpZiAoaWggPT0gTlVMTCkKKwkJCQkJcmV0dXJuIDA7CisKKwkJCQlERUJVR1AoIlNldHRpbmcgdnRhZyAleCBmb3IgbmV3IGNvbm5cbiIsIAorCQkJCQlpaC0+aW5pdF90YWcpOworCisJCQkJY29ubnRyYWNrLT5wcm90by5zY3RwLnZ0YWdbSVBfQ1RfRElSX1JFUExZXSA9IAorCQkJCQkJCQlpaC0+aW5pdF90YWc7CisJCQl9IGVsc2UgeworCQkJCS8qIFNlYyA4LjUuMSAoQSkgKi8KKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJfQorCQkvKiBJZiBpdCBpcyBhIHNodXRkb3duIGFjayBPT1RCIHBhY2tldCwgd2UgZXhwZWN0IGEgcmV0dXJuCisJCSAgIHNodXRkb3duIGNvbXBsZXRlLCBvdGhlcndpc2UgYW4gQUJPUlQgU2VjIDguNCAoNSkgYW5kICg4KSAqLworCQllbHNlIHsKKwkJCURFQlVHUCgiU2V0dGluZyB2dGFnICV4IGZvciBuZXcgY29ubiBPT1RCXG4iLCAKKwkJCQlzaC0+dnRhZyk7CisJCQljb25udHJhY2stPnByb3RvLnNjdHAudnRhZ1tJUF9DVF9ESVJfUkVQTFldID0gc2gtPnZ0YWc7CisJCX0KKworCQljb25udHJhY2stPnByb3RvLnNjdHAuc3RhdGUgPSBuZXdjb25udHJhY2s7CisJfQorCisJcmV0dXJuIDE7Cit9CisKK3N0cnVjdCBuZl9jb25udHJhY2tfcHJvdG9jb2wgbmZfY29ubnRyYWNrX3Byb3RvY29sX3NjdHA0ID0geyAKKwkubDNwcm90bwkgPSBQRl9JTkVULAorCS5wcm90byAJCSA9IElQUFJPVE9fU0NUUCwgCisJLm5hbWUgCQkgPSAic2N0cCIsCisJLnBrdF90b190dXBsZSAJID0gc2N0cF9wa3RfdG9fdHVwbGUsIAorCS5pbnZlcnRfdHVwbGUgCSA9IHNjdHBfaW52ZXJ0X3R1cGxlLCAKKwkucHJpbnRfdHVwbGUgCSA9IHNjdHBfcHJpbnRfdHVwbGUsIAorCS5wcmludF9jb25udHJhY2sgPSBzY3RwX3ByaW50X2Nvbm50cmFjaywKKwkucGFja2V0IAkgPSBzY3RwX3BhY2tldCwgCisJLm5ldyAJCSA9IHNjdHBfbmV3LCAKKwkuZGVzdHJveSAJID0gTlVMTCwgCisJLm1lIAkJID0gVEhJU19NT0RVTEUgCit9OworCitzdHJ1Y3QgbmZfY29ubnRyYWNrX3Byb3RvY29sIG5mX2Nvbm50cmFja19wcm90b2NvbF9zY3RwNiA9IHsgCisJLmwzcHJvdG8JID0gUEZfSU5FVDYsCisJLnByb3RvIAkJID0gSVBQUk9UT19TQ1RQLCAKKwkubmFtZSAJCSA9ICJzY3RwIiwKKwkucGt0X3RvX3R1cGxlIAkgPSBzY3RwX3BrdF90b190dXBsZSwgCisJLmludmVydF90dXBsZSAJID0gc2N0cF9pbnZlcnRfdHVwbGUsIAorCS5wcmludF90dXBsZSAJID0gc2N0cF9wcmludF90dXBsZSwgCisJLnByaW50X2Nvbm50cmFjayA9IHNjdHBfcHJpbnRfY29ubnRyYWNrLAorCS5wYWNrZXQgCSA9IHNjdHBfcGFja2V0LCAKKwkubmV3IAkJID0gc2N0cF9uZXcsIAorCS5kZXN0cm95IAkgPSBOVUxMLCAKKwkubWUgCQkgPSBUSElTX01PRFVMRSAKK307CisKKyNpZmRlZiBDT05GSUdfU1lTQ1RMCitzdGF0aWMgY3RsX3RhYmxlIG5mX2N0X3N5c2N0bF90YWJsZVtdID0geworCXsKKwkJLmN0bF9uYW1lCT0gTkVUX05GX0NPTk5UUkFDS19TQ1RQX1RJTUVPVVRfQ0xPU0VELAorCQkucHJvY25hbWUJPSAibmZfY29ubnRyYWNrX3NjdHBfdGltZW91dF9jbG9zZWQiLAorCQkuZGF0YQkJPSAmbmZfY3Rfc2N0cF90aW1lb3V0X2Nsb3NlZCwKKwkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQgaW50KSwKKwkJLm1vZGUJCT0gMDY0NCwKKwkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjX2ppZmZpZXMsCisJfSwKKwl7CisJCS5jdGxfbmFtZQk9IE5FVF9ORl9DT05OVFJBQ0tfU0NUUF9USU1FT1VUX0NPT0tJRV9XQUlULAorCQkucHJvY25hbWUJPSAibmZfY29ubnRyYWNrX3NjdHBfdGltZW91dF9jb29raWVfd2FpdCIsCisJCS5kYXRhCQk9ICZuZl9jdF9zY3RwX3RpbWVvdXRfY29va2llX3dhaXQsCisJCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCisJCS5tb2RlCQk9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlY19qaWZmaWVzLAorCX0sCisJeworCQkuY3RsX25hbWUJPSBORVRfTkZfQ09OTlRSQUNLX1NDVFBfVElNRU9VVF9DT09LSUVfRUNIT0VELAorCQkucHJvY25hbWUJPSAibmZfY29ubnRyYWNrX3NjdHBfdGltZW91dF9jb29raWVfZWNob2VkIiwKKwkJLmRhdGEJCT0gJm5mX2N0X3NjdHBfdGltZW91dF9jb29raWVfZWNob2VkLAorCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBpbnQpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWNfamlmZmllcywKKwl9LAorCXsKKwkJLmN0bF9uYW1lCT0gTkVUX05GX0NPTk5UUkFDS19TQ1RQX1RJTUVPVVRfRVNUQUJMSVNIRUQsCisJCS5wcm9jbmFtZQk9ICJuZl9jb25udHJhY2tfc2N0cF90aW1lb3V0X2VzdGFibGlzaGVkIiwKKwkJLmRhdGEJCT0gJm5mX2N0X3NjdHBfdGltZW91dF9lc3RhYmxpc2hlZCwKKwkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQgaW50KSwKKwkJLm1vZGUJCT0gMDY0NCwKKwkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjX2ppZmZpZXMsCisJfSwKKwl7CisJCS5jdGxfbmFtZQk9IE5FVF9ORl9DT05OVFJBQ0tfU0NUUF9USU1FT1VUX1NIVVRET1dOX1NFTlQsCisJCS5wcm9jbmFtZQk9ICJuZl9jb25udHJhY2tfc2N0cF90aW1lb3V0X3NodXRkb3duX3NlbnQiLAorCQkuZGF0YQkJPSAmbmZfY3Rfc2N0cF90aW1lb3V0X3NodXRkb3duX3NlbnQsCisJCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCisJCS5tb2RlCQk9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlY19qaWZmaWVzLAorCX0sCisJeworCQkuY3RsX25hbWUJPSBORVRfTkZfQ09OTlRSQUNLX1NDVFBfVElNRU9VVF9TSFVURE9XTl9SRUNELAorCQkucHJvY25hbWUJPSAibmZfY29ubnRyYWNrX3NjdHBfdGltZW91dF9zaHV0ZG93bl9yZWNkIiwKKwkJLmRhdGEJCT0gJm5mX2N0X3NjdHBfdGltZW91dF9zaHV0ZG93bl9yZWNkLAorCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBpbnQpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWNfamlmZmllcywKKwl9LAorCXsKKwkJLmN0bF9uYW1lCT0gTkVUX05GX0NPTk5UUkFDS19TQ1RQX1RJTUVPVVRfU0hVVERPV05fQUNLX1NFTlQsCisJCS5wcm9jbmFtZQk9ICJuZl9jb25udHJhY2tfc2N0cF90aW1lb3V0X3NodXRkb3duX2Fja19zZW50IiwKKwkJLmRhdGEJCT0gJm5mX2N0X3NjdHBfdGltZW91dF9zaHV0ZG93bl9hY2tfc2VudCwKKwkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQgaW50KSwKKwkJLm1vZGUJCT0gMDY0NCwKKwkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjX2ppZmZpZXMsCisJfSwKKwl7IC5jdGxfbmFtZSA9IDAgfQorfTsKKworc3RhdGljIGN0bF90YWJsZSBuZl9jdF9uZXRmaWx0ZXJfdGFibGVbXSA9IHsKKwl7CisJCS5jdGxfbmFtZQk9IE5FVF9ORVRGSUxURVIsCisJCS5wcm9jbmFtZQk9ICJuZXRmaWx0ZXIiLAorCQkubW9kZQkJPSAwNTU1LAorCQkuY2hpbGQJCT0gbmZfY3Rfc3lzY3RsX3RhYmxlLAorCX0sCisJeyAuY3RsX25hbWUgPSAwIH0KK307CisKK3N0YXRpYyBjdGxfdGFibGUgbmZfY3RfbmV0X3RhYmxlW10gPSB7CisJeworCQkuY3RsX25hbWUJPSBDVExfTkVULAorCQkucHJvY25hbWUJPSAibmV0IiwKKwkJLm1vZGUJCT0gMDU1NSwgCisJCS5jaGlsZAkJPSBuZl9jdF9uZXRmaWx0ZXJfdGFibGUsCisJfSwKKwl7IC5jdGxfbmFtZSA9IDAgfQorfTsKKworc3RhdGljIHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpuZl9jdF9zeXNjdGxfaGVhZGVyOworI2VuZGlmCisKK2ludCBfX2luaXQgaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSBuZl9jb25udHJhY2tfcHJvdG9jb2xfcmVnaXN0ZXIoJm5mX2Nvbm50cmFja19wcm90b2NvbF9zY3RwNCk7CisJaWYgKHJldCkgeworCQlwcmludGsoIm5mX2Nvbm50cmFja19wcm90b19zY3RwNDogcHJvdG9jb2wgcmVnaXN0ZXIgZmFpbGVkXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCXJldCA9IG5mX2Nvbm50cmFja19wcm90b2NvbF9yZWdpc3RlcigmbmZfY29ubnRyYWNrX3Byb3RvY29sX3NjdHA2KTsKKwlpZiAocmV0KSB7CisJCXByaW50aygibmZfY29ubnRyYWNrX3Byb3RvX3NjdHA2OiBwcm90b2NvbCByZWdpc3RlciBmYWlsZWRcbiIpOworCQlnb3RvIGNsZWFudXBfc2N0cDQ7CisJfQorCisjaWZkZWYgQ09ORklHX1NZU0NUTAorCW5mX2N0X3N5c2N0bF9oZWFkZXIgPSByZWdpc3Rlcl9zeXNjdGxfdGFibGUobmZfY3RfbmV0X3RhYmxlLCAwKTsKKwlpZiAobmZfY3Rfc3lzY3RsX2hlYWRlciA9PSBOVUxMKSB7CisJCXByaW50aygibmZfY29ubnRyYWNrX3Byb3RvX3NjdHA6IGNhbid0IHJlZ2lzdGVyIHRvIHN5c2N0bC5cbiIpOworCQlnb3RvIGNsZWFudXA7CisJfQorI2VuZGlmCisKKwlyZXR1cm4gcmV0OworCisjaWZkZWYgQ09ORklHX1NZU0NUTAorIGNsZWFudXA6CisJbmZfY29ubnRyYWNrX3Byb3RvY29sX3VucmVnaXN0ZXIoJm5mX2Nvbm50cmFja19wcm90b2NvbF9zY3RwNik7CisjZW5kaWYKKyBjbGVhbnVwX3NjdHA0OgorCW5mX2Nvbm50cmFja19wcm90b2NvbF91bnJlZ2lzdGVyKCZuZl9jb25udHJhY2tfcHJvdG9jb2xfc2N0cDQpOworIG91dDoKKwlERUJVR1AoIlNDVFAgY29ubnRyYWNrIG1vZHVsZSBsb2FkaW5nICVzXG4iLCAKKwkJCQkJcmV0ID8gImZhaWxlZCI6ICJzdWNjZWVkZWQiKTsKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIF9fZXhpdCBmaW5pKHZvaWQpCit7CisJbmZfY29ubnRyYWNrX3Byb3RvY29sX3VucmVnaXN0ZXIoJm5mX2Nvbm50cmFja19wcm90b2NvbF9zY3RwNik7CisJbmZfY29ubnRyYWNrX3Byb3RvY29sX3VucmVnaXN0ZXIoJm5mX2Nvbm50cmFja19wcm90b2NvbF9zY3RwNCk7CisjaWZkZWYgQ09ORklHX1NZU0NUTAorIAl1bnJlZ2lzdGVyX3N5c2N0bF90YWJsZShuZl9jdF9zeXNjdGxfaGVhZGVyKTsKKyNlbmRpZgorCURFQlVHUCgiU0NUUCBjb25udHJhY2sgbW9kdWxlIHVubG9hZGVkXG4iKTsKK30KKworbW9kdWxlX2luaXQoaW5pdCk7Cittb2R1bGVfZXhpdChmaW5pKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiS2lyYW4gS3VtYXIgSW1taWRpIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk5ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIHByb3RvY29sIGhlbHBlciBmb3IgU0NUUCIpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2Q5MGRkCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMKQEAgLTAsMCArMSwxMTYyIEBACisvKiAoQykgMTk5OS0yMDAxIFBhdWwgYFJ1c3R5JyBSdXNzZWxsCisgKiAoQykgMjAwMi0yMDA0IE5ldGZpbHRlciBDb3JlIFRlYW0gPGNvcmV0ZWFtQG5ldGZpbHRlci5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBKb3pzZWYgS2FkbGVjc2lrIDxrYWRsZWNAYmxhY2tob2xlLmtma2kuaHU+OgorICoJLSBSZWFsIHN0YXRlZnVsIGNvbm5lY3Rpb24gdHJhY2tpbmcKKyAqCS0gTW9kaWZpZWQgc3RhdGUgdHJhbnNpdGlvbnMgdGFibGUKKyAqCS0gV2luZG93IHNjYWxpbmcgc3VwcG9ydCBhZGRlZAorICoJLSBTQUNLIHN1cHBvcnQgYWRkZWQKKyAqCisgKiBXaWxseSBUYXJyZWF1OgorICoJLSBTdGF0ZSB0YWJsZSBidWdmaXhlcworICoJLSBNb3JlIHJvYnVzdCBzdGF0ZSBjaGFuZ2VzCisgKgktIFR1bmluZyB0aW1lciBwYXJhbWV0ZXJzCisgKgorICogMjcgT2N0IDIwMDQ6IFlhc3V5dWtpIEtvemFrYWkgQFVTQUdJIDx5YXN1eXVraS5rb3pha2FpQHRvc2hpYmEuY28uanA+CisgKgktIGdlbmVsaXplZCBMYXllciAzIHByb3RvY29sIHBhcnQuCisgKgorICogRGVyaXZlZCBmcm9tIG5ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfcHJvdG9fdGNwLmMKKyAqCisgKiB2ZXJzaW9uIDIuMgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvaXB2Ni5oPgorI2luY2x1ZGUgPG5ldC9pcDZfY2hlY2tzdW0uaD4KKworI2luY2x1ZGUgPG5ldC90Y3AuaD4KKworI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0Lmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjYuaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvY29sLmg+CisKKyNpZiAwCisjZGVmaW5lIERFQlVHUCBwcmludGsKKyNkZWZpbmUgREVCVUdQX1ZBUlMKKyNlbHNlCisjZGVmaW5lIERFQlVHUChmb3JtYXQsIGFyZ3MuLi4pCisjZW5kaWYKKworLyogUHJvdGVjdHMgY29ubnRyYWNrLT5wcm90by50Y3AgKi8KK3N0YXRpYyBERUZJTkVfUldMT0NLKHRjcF9sb2NrKTsKKworLyogIkJlIGNvbnNlcnZhdGl2ZSBpbiB3aGF0IHlvdSBkbywgCisgICAgYmUgbGliZXJhbCBpbiB3aGF0IHlvdSBhY2NlcHQgZnJvbSBvdGhlcnMuIiAKKyAgICBJZiBpdCdzIG5vbi16ZXJvLCB3ZSBtYXJrIG9ubHkgb3V0IG9mIHdpbmRvdyBSU1Qgc2VnbWVudHMgYXMgSU5WQUxJRC4gKi8KK2ludCBuZl9jdF90Y3BfYmVfbGliZXJhbCA9IDA7CisKKy8qIFdoZW4gY29ubmVjdGlvbiBpcyBwaWNrZWQgdXAgZnJvbSB0aGUgbWlkZGxlLCBob3cgbWFueSBwYWNrZXRzIGFyZSByZXF1aXJlZAorICAgdG8gcGFzcyBpbiBlYWNoIGRpcmVjdGlvbiB3aGVuIHdlIGFzc3VtZSB3ZSBhcmUgaW4gc3luYyAtIGlmIGFueSBzaWRlIHVzZXMKKyAgIHdpbmRvdyBzY2FsaW5nLCB3ZSBsb3N0IHRoZSBnYW1lLiAKKyAgIElmIGl0IGlzIHNldCB0byB6ZXJvLCB3ZSBkaXNhYmxlIHBpY2tpbmcgdXAgYWxyZWFkeSBlc3RhYmxpc2hlZCAKKyAgIGNvbm5lY3Rpb25zLiAqLworaW50IG5mX2N0X3RjcF9sb29zZSA9IDM7CisKKy8qIE1heCBudW1iZXIgb2YgdGhlIHJldHJhbnNtaXR0ZWQgcGFja2V0cyB3aXRob3V0IHJlY2VpdmluZyBhbiAoYWNjZXB0YWJsZSkgCisgICBBQ0sgZnJvbSB0aGUgZGVzdGluYXRpb24uIElmIHRoaXMgbnVtYmVyIGlzIHJlYWNoZWQsIGEgc2hvcnRlciB0aW1lciAKKyAgIHdpbGwgYmUgc3RhcnRlZC4gKi8KK2ludCBuZl9jdF90Y3BfbWF4X3JldHJhbnMgPSAzOworCisgIC8qIEZJWE1FOiBFeGFtaW5lIGlwZmlsdGVyJ3MgdGltZW91dHMgYW5kIGNvbm50cmFjayB0cmFuc2l0aW9ucyBtb3JlCisgICAgIGNsb3NlbHkuICBUaGV5J3JlIG1vcmUgY29tcGxleC4gLS1SUiAqLworCitzdGF0aWMgY29uc3QgY2hhciAqdGNwX2Nvbm50cmFja19uYW1lc1tdID0geworCSJOT05FIiwKKwkiU1lOX1NFTlQiLAorCSJTWU5fUkVDViIsCisJIkVTVEFCTElTSEVEIiwKKwkiRklOX1dBSVQiLAorCSJDTE9TRV9XQUlUIiwKKwkiTEFTVF9BQ0siLAorCSJUSU1FX1dBSVQiLAorCSJDTE9TRSIsCisJIkxJU1RFTiIKK307CisgIAorI2RlZmluZSBTRUNTICogSFoKKyNkZWZpbmUgTUlOUyAqIDYwIFNFQ1MKKyNkZWZpbmUgSE9VUlMgKiA2MCBNSU5TCisjZGVmaW5lIERBWVMgKiAyNCBIT1VSUworCit1bnNpZ25lZCBsb25nIG5mX2N0X3RjcF90aW1lb3V0X3N5bl9zZW50ID0gICAgICAyIE1JTlM7Cit1bnNpZ25lZCBsb25nIG5mX2N0X3RjcF90aW1lb3V0X3N5bl9yZWN2ID0gICAgIDYwIFNFQ1M7Cit1bnNpZ25lZCBsb25nIG5mX2N0X3RjcF90aW1lb3V0X2VzdGFibGlzaGVkID0gICA1IERBWVM7Cit1bnNpZ25lZCBsb25nIG5mX2N0X3RjcF90aW1lb3V0X2Zpbl93YWl0ID0gICAgICAyIE1JTlM7Cit1bnNpZ25lZCBsb25nIG5mX2N0X3RjcF90aW1lb3V0X2Nsb3NlX3dhaXQgPSAgIDYwIFNFQ1M7Cit1bnNpZ25lZCBsb25nIG5mX2N0X3RjcF90aW1lb3V0X2xhc3RfYWNrID0gICAgIDMwIFNFQ1M7Cit1bnNpZ25lZCBsb25nIG5mX2N0X3RjcF90aW1lb3V0X3RpbWVfd2FpdCA9ICAgICAyIE1JTlM7Cit1bnNpZ25lZCBsb25nIG5mX2N0X3RjcF90aW1lb3V0X2Nsb3NlID0gICAgICAgIDEwIFNFQ1M7CisKKy8qIFJGQzExMjIgc2F5cyB0aGUgUjIgbGltaXQgc2hvdWxkIGJlIGF0IGxlYXN0IDEwMCBzZWNvbmRzLgorICAgTGludXggdXNlcyAxNSBwYWNrZXRzIGFzIGxpbWl0LCB3aGljaCBjb3JyZXNwb25kcyAKKyAgIHRvIH4xMy0zMG1pbiBkZXBlbmRpbmcgb24gUlRPLiAqLwordW5zaWduZWQgbG9uZyBuZl9jdF90Y3BfdGltZW91dF9tYXhfcmV0cmFucyA9ICAgICA1IE1JTlM7CisgCitzdGF0aWMgdW5zaWduZWQgbG9uZyAqIHRjcF90aW1lb3V0c1tdCis9IHsgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUQ1BfQ09OTlRSQUNLX05PTkUgKi8KKyAgICAmbmZfY3RfdGNwX3RpbWVvdXRfc3luX3NlbnQsICAgICAgIC8qIFRDUF9DT05OVFJBQ0tfU1lOX1NFTlQsICovCisgICAgJm5mX2N0X3RjcF90aW1lb3V0X3N5bl9yZWN2LCAgICAgICAvKiBUQ1BfQ09OTlRSQUNLX1NZTl9SRUNWLCAqLworICAgICZuZl9jdF90Y3BfdGltZW91dF9lc3RhYmxpc2hlZCwgICAgLyogVENQX0NPTk5UUkFDS19FU1RBQkxJU0hFRCwgKi8KKyAgICAmbmZfY3RfdGNwX3RpbWVvdXRfZmluX3dhaXQsICAgICAgIC8qIFRDUF9DT05OVFJBQ0tfRklOX1dBSVQsICovCisgICAgJm5mX2N0X3RjcF90aW1lb3V0X2Nsb3NlX3dhaXQsICAgICAvKiBUQ1BfQ09OTlRSQUNLX0NMT1NFX1dBSVQsICovCisgICAgJm5mX2N0X3RjcF90aW1lb3V0X2xhc3RfYWNrLCAgICAgICAvKiBUQ1BfQ09OTlRSQUNLX0xBU1RfQUNLLCAqLworICAgICZuZl9jdF90Y3BfdGltZW91dF90aW1lX3dhaXQsICAgICAgLyogVENQX0NPTk5UUkFDS19USU1FX1dBSVQsICovCisgICAgJm5mX2N0X3RjcF90aW1lb3V0X2Nsb3NlLCAgICAgICAgICAvKiBUQ1BfQ09OTlRSQUNLX0NMT1NFLCAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVENQX0NPTk5UUkFDS19MSVNURU4gKi8KKyB9OworIAorI2RlZmluZSBzTk8gVENQX0NPTk5UUkFDS19OT05FCisjZGVmaW5lIHNTUyBUQ1BfQ09OTlRSQUNLX1NZTl9TRU5UCisjZGVmaW5lIHNTUiBUQ1BfQ09OTlRSQUNLX1NZTl9SRUNWCisjZGVmaW5lIHNFUyBUQ1BfQ09OTlRSQUNLX0VTVEFCTElTSEVECisjZGVmaW5lIHNGVyBUQ1BfQ09OTlRSQUNLX0ZJTl9XQUlUCisjZGVmaW5lIHNDVyBUQ1BfQ09OTlRSQUNLX0NMT1NFX1dBSVQKKyNkZWZpbmUgc0xBIFRDUF9DT05OVFJBQ0tfTEFTVF9BQ0sKKyNkZWZpbmUgc1RXIFRDUF9DT05OVFJBQ0tfVElNRV9XQUlUCisjZGVmaW5lIHNDTCBUQ1BfQ09OTlRSQUNLX0NMT1NFCisjZGVmaW5lIHNMSSBUQ1BfQ09OTlRSQUNLX0xJU1RFTgorI2RlZmluZSBzSVYgVENQX0NPTk5UUkFDS19NQVgKKyNkZWZpbmUgc0lHIFRDUF9DT05OVFJBQ0tfSUdOT1JFCisKKy8qIFdoYXQgVENQIGZsYWdzIGFyZSBzZXQgZnJvbSBSU1QvU1lOL0ZJTi9BQ0suICovCitlbnVtIHRjcF9iaXRfc2V0IHsKKwlUQ1BfU1lOX1NFVCwKKwlUQ1BfU1lOQUNLX1NFVCwKKwlUQ1BfRklOX1NFVCwKKwlUQ1BfQUNLX1NFVCwKKwlUQ1BfUlNUX1NFVCwKKwlUQ1BfTk9ORV9TRVQsCit9OworICAKKy8qCisgKiBUaGUgVENQIHN0YXRlIHRyYW5zaXRpb24gdGFibGUgbmVlZHMgYSBmZXcgd29yZHMuLi4KKyAqCisgKiBXZSBhcmUgdGhlIG1hbiBpbiB0aGUgbWlkZGxlLiBBbGwgdGhlIHBhY2tldHMgZ28gdGhyb3VnaCB1cworICogYnV0IG1pZ2h0IGdldCBsb3N0IGluIHRyYW5zaXQgdG8gdGhlIGRlc3RpbmF0aW9uLgorICogSXQgaXMgYXNzdW1lZCB0aGF0IHRoZSBkZXN0aW5hdGlvbnMgY2FuJ3QgcmVjZWl2ZSBzZWdtZW50cyAKKyAqIHdlIGhhdmVuJ3Qgc2Vlbi4KKyAqCisgKiBUaGUgY2hlY2tlZCBzZWdtZW50IGlzIGluIHdpbmRvdywgYnV0IG91ciB3aW5kb3dzIGFyZSAqbm90KgorICogZXF1aXZhbGVudCB3aXRoIHRoZSBvbmVzIG9mIHRoZSBzZW5kZXIvcmVjZWl2ZXIuIFdlIGFsd2F5cworICogdHJ5IHRvIGd1ZXNzIHRoZSBzdGF0ZSBvZiB0aGUgY3VycmVudCBzZW5kZXIuCisgKgorICogVGhlIG1lYW5pbmcgb2YgdGhlIHN0YXRlcyBhcmU6CisgKgorICogTk9ORToJaW5pdGlhbCBzdGF0ZQorICogU1lOX1NFTlQ6CVNZTi1vbmx5IHBhY2tldCBzZWVuIAorICogU1lOX1JFQ1Y6CVNZTi1BQ0sgcGFja2V0IHNlZW4KKyAqIEVTVEFCTElTSEVEOglBQ0sgcGFja2V0IHNlZW4KKyAqIEZJTl9XQUlUOglGSU4gcGFja2V0IHNlZW4KKyAqIENMT1NFX1dBSVQ6CUFDSyBzZWVuIChhZnRlciBGSU4pIAorICogTEFTVF9BQ0s6CUZJTiBzZWVuIChhZnRlciBGSU4pCisgKiBUSU1FX1dBSVQ6CWxhc3QgQUNLIHNlZW4KKyAqIENMT1NFOgljbG9zZWQgY29ubmVjdGlvbgorICoKKyAqIExJU1RFTiBzdGF0ZSBpcyBub3QgdXNlZC4KKyAqCisgKiBQYWNrZXRzIG1hcmtlZCBhcyBJR05PUkVEIChzSUcpOgorICoJaWYgdGhleSBtYXkgYmUgZWl0aGVyIGludmFsaWQgb3IgdmFsaWQgCisgKglhbmQgdGhlIHJlY2VpdmVyIG1heSBzZW5kIGJhY2sgYSBjb25uZWN0aW9uIAorICoJY2xvc2luZyBSU1Qgb3IgYSBTWU4vQUNLLgorICoKKyAqIFBhY2tldHMgbWFya2VkIGFzIElOVkFMSUQgKHNJVik6CisgKglpZiB0aGV5IGFyZSBpbnZhbGlkCisgKglvciB3ZSBkbyBub3Qgc3VwcG9ydCB0aGUgcmVxdWVzdCAoc2ltdWx0YW5lb3VzIG9wZW4pCisgKi8KK3N0YXRpYyBlbnVtIHRjcF9jb25udHJhY2sgdGNwX2Nvbm50cmFja3NbMl1bNl1bVENQX0NPTk5UUkFDS19NQVhdID0geworCXsKKy8qIE9SSUdJTkFMICovCisvKiAJICAgICBzTk8sIHNTUywgc1NSLCBzRVMsIHNGVywgc0NXLCBzTEEsIHNUVywgc0NMLCBzTEkJKi8KKy8qc3luKi8JICAgeyBzU1MsIHNTUywgc0lHLCBzSUcsIHNJRywgc0lHLCBzSUcsIHNTUywgc1NTLCBzSVYgfSwKKy8qCisgKglzTk8gLT4gc1NTCUluaXRpYWxpemUgYSBuZXcgY29ubmVjdGlvbgorICoJc1NTIC0+IHNTUwlSZXRyYW5zbWl0dGVkIFNZTgorICoJc1NSIC0+IHNJRwlMYXRlIHJldHJhbnNtaXR0ZWQgU1lOPworICoJc0VTIC0+IHNJRwlFcnJvcjogU1lOcyBpbiB3aW5kb3cgb3V0c2lkZSB0aGUgU1lOX1NFTlQgc3RhdGUKKyAqCQkJYXJlIGVycm9ycy4gUmVjZWl2ZXIgd2lsbCByZXBseSB3aXRoIFJTVCAKKyAqCQkJYW5kIGNsb3NlIHRoZSBjb25uZWN0aW9uLgorICoJCQlPciB3ZSBhcmUgbm90IGluIHN5bmMgYW5kIGhvbGQgYSBkZWFkIGNvbm5lY3Rpb24uCisgKglzRlcgLT4gc0lHCisgKglzQ1cgLT4gc0lHCisgKglzTEEgLT4gc0lHCisgKglzVFcgLT4gc1NTCVJlb3BlbmVkIGNvbm5lY3Rpb24gKFJGQyAxMTIyKS4KKyAqCXNDTCAtPiBzU1MKKyAqLworLyogCSAgICAgc05PLCBzU1MsIHNTUiwgc0VTLCBzRlcsIHNDVywgc0xBLCBzVFcsIHNDTCwgc0xJCSovCisvKnN5bmFjayovIHsgc0lWLCBzSVYsIHNJViwgc0lWLCBzSVYsIHNJViwgc0lWLCBzSVYsIHNJViwgc0lWIH0sCisvKgorICogQSBTWU4vQUNLIGZyb20gdGhlIGNsaWVudCBpcyBhbHdheXMgaW52YWxpZDoKKyAqCS0gZWl0aGVyIGl0IHRyaWVzIHRvIHNldCB1cCBhIHNpbXVsdGFuZW91cyBvcGVuLCB3aGljaCBpcyAKKyAqCSAgbm90IHN1cHBvcnRlZDsKKyAqCS0gb3IgdGhlIGZpcmV3YWxsIGhhcyBqdXN0IGJlZW4gaW5zZXJ0ZWQgYmV0d2VlbiB0aGUgdHdvIGhvc3RzCisgKgkgIGR1cmluZyB0aGUgc2Vzc2lvbiBzZXQtdXAuIFRoZSBTWU4gd2lsbCBiZSByZXRyYW5zbWl0dGVkIAorICoJICBieSB0aGUgdHJ1ZSBjbGllbnQgKG9yIGl0J2xsIHRpbWUgb3V0KS4KKyAqLworLyogCSAgICAgc05PLCBzU1MsIHNTUiwgc0VTLCBzRlcsIHNDVywgc0xBLCBzVFcsIHNDTCwgc0xJCSovCisvKmZpbiovICAgIHsgc0lWLCBzSVYsIHNGVywgc0ZXLCBzTEEsIHNMQSwgc0xBLCBzVFcsIHNDTCwgc0lWIH0sCisvKgorICoJc05PIC0+IHNJVglUb28gbGF0ZSBhbmQgbm8gcmVhc29uIHRvIGRvIGFueXRoaW5nLi4uCisgKglzU1MgLT4gc0lWCUNsaWVudCBtaWd0aCBub3Qgc2VuZCBGSU4gaW4gdGhpcyBzdGF0ZToKKyAqCQkJd2UgZW5mb3JjZSB3YWl0aW5nIGZvciBhIFNZTi9BQ0sgcmVwbHkgZmlyc3QuCisgKglzU1IgLT4gc0ZXCUNsb3NlIHN0YXJ0ZWQuCisgKglzRVMgLT4gc0ZXCisgKglzRlcgLT4gc0xBCUZJTiBzZWVuIGluIGJvdGggZGlyZWN0aW9ucywgd2FpdGluZyBmb3IKKyAqCQkJdGhlIGxhc3QgQUNLLiAKKyAqCQkJTWlndGggYmUgYSByZXRyYW5zbWl0dGVkIEZJTiBhcyB3ZWxsLi4uCisgKglzQ1cgLT4gc0xBCisgKglzTEEgLT4gc0xBCVJldHJhbnNtaXR0ZWQgRklOLiBSZW1haW4gaW4gdGhlIHNhbWUgc3RhdGUuCisgKglzVFcgLT4gc1RXCisgKglzQ0wgLT4gc0NMCisgKi8KKy8qIAkgICAgIHNOTywgc1NTLCBzU1IsIHNFUywgc0ZXLCBzQ1csIHNMQSwgc1RXLCBzQ0wsIHNMSQkqLworLyphY2sqLwkgICB7IHNFUywgc0lWLCBzRVMsIHNFUywgc0NXLCBzQ1csIHNUVywgc1RXLCBzQ0wsIHNJViB9LAorLyoKKyAqCXNOTyAtPiBzRVMJQXNzdW1lZC4KKyAqCXNTUyAtPiBzSVYJQUNLIGlzIGludmFsaWQ6IHdlIGhhdmVuJ3Qgc2VlbiBhIFNZTi9BQ0sgeWV0LgorICoJc1NSIC0+IHNFUwlFc3RhYmxpc2hlZCBzdGF0ZSBpcyByZWFjaGVkLgorICoJc0VTIC0+IHNFUwk6LSkKKyAqCXNGVyAtPiBzQ1cJTm9ybWFsIGNsb3NlIHJlcXVlc3QgYW5zd2VyZWQgYnkgQUNLLgorICoJc0NXIC0+IHNDVworICoJc0xBIC0+IHNUVwlMYXN0IEFDSyBkZXRlY3RlZC4KKyAqCXNUVyAtPiBzVFcJUmV0cmFuc21pdHRlZCBsYXN0IEFDSy4gUmVtYWluIGluIHRoZSBzYW1lIHN0YXRlLgorICoJc0NMIC0+IHNDTAorICovCisvKiAJICAgICBzTk8sIHNTUywgc1NSLCBzRVMsIHNGVywgc0NXLCBzTEEsIHNUVywgc0NMLCBzTEkJKi8KKy8qcnN0Ki8gICAgeyBzSVYsIHNDTCwgc0NMLCBzQ0wsIHNDTCwgc0NMLCBzQ0wsIHNDTCwgc0NMLCBzSVYgfSwKKy8qbm9uZSovICAgeyBzSVYsIHNJViwgc0lWLCBzSVYsIHNJViwgc0lWLCBzSVYsIHNJViwgc0lWLCBzSVYgfQorCX0sCisJeworLyogUkVQTFkgKi8KKy8qIAkgICAgIHNOTywgc1NTLCBzU1IsIHNFUywgc0ZXLCBzQ1csIHNMQSwgc1RXLCBzQ0wsIHNMSQkqLworLypzeW4qLwkgICB7IHNJViwgc0lWLCBzSVYsIHNJViwgc0lWLCBzSVYsIHNJViwgc0lWLCBzSVYsIHNJViB9LAorLyoKKyAqCXNOTyAtPiBzSVYJTmV2ZXIgcmVhY2hlZC4KKyAqCXNTUyAtPiBzSVYJU2ltdWx0YW5lb3VzIG9wZW4sIG5vdCBzdXBwb3J0ZWQKKyAqCXNTUiAtPiBzSVYJU2ltdWx0YW5lb3VzIG9wZW4sIG5vdCBzdXBwb3J0ZWQuCisgKglzRVMgLT4gc0lWCVNlcnZlciBtYXkgbm90IGluaXRpYXRlIGEgY29ubmVjdGlvbi4KKyAqCXNGVyAtPiBzSVYKKyAqCXNDVyAtPiBzSVYKKyAqCXNMQSAtPiBzSVYKKyAqCXNUVyAtPiBzSVYJUmVvcGVuZWQgY29ubmVjdGlvbiwgYnV0IHNlcnZlciBtYXkgbm90IGRvIGl0LgorICoJc0NMIC0+IHNJVgorICovCisvKiAJICAgICBzTk8sIHNTUywgc1NSLCBzRVMsIHNGVywgc0NXLCBzTEEsIHNUVywgc0NMLCBzTEkJKi8KKy8qc3luYWNrKi8geyBzSVYsIHNTUiwgc1NSLCBzSUcsIHNJRywgc0lHLCBzSUcsIHNJRywgc0lHLCBzSVYgfSwKKy8qCisgKglzU1MgLT4gc1NSCVN0YW5kYXJkIG9wZW4uCisgKglzU1IgLT4gc1NSCVJldHJhbnNtaXR0ZWQgU1lOL0FDSy4KKyAqCXNFUyAtPiBzSUcJTGF0ZSByZXRyYW5zbWl0dGVkIFNZTi9BQ0s/CisgKglzRlcgLT4gc0lHCU1pZ2h0IGJlIFNZTi9BQ0sgYW5zd2VyaW5nIGlnbm9yZWQgU1lOCisgKglzQ1cgLT4gc0lHCisgKglzTEEgLT4gc0lHCisgKglzVFcgLT4gc0lHCisgKglzQ0wgLT4gc0lHCisgKi8KKy8qIAkgICAgIHNOTywgc1NTLCBzU1IsIHNFUywgc0ZXLCBzQ1csIHNMQSwgc1RXLCBzQ0wsIHNMSQkqLworLypmaW4qLyAgICB7IHNJViwgc0lWLCBzRlcsIHNGVywgc0xBLCBzTEEsIHNMQSwgc1RXLCBzQ0wsIHNJViB9LAorLyoKKyAqCXNTUyAtPiBzSVYJU2VydmVyIG1pZ2h0IG5vdCBzZW5kIEZJTiBpbiB0aGlzIHN0YXRlLgorICoJc1NSIC0+IHNGVwlDbG9zZSBzdGFydGVkLgorICoJc0VTIC0+IHNGVworICoJc0ZXIC0+IHNMQQlGSU4gc2VlbiBpbiBib3RoIGRpcmVjdGlvbnMuCisgKglzQ1cgLT4gc0xBCisgKglzTEEgLT4gc0xBCVJldHJhbnNtaXR0ZWQgRklOLgorICoJc1RXIC0+IHNUVworICoJc0NMIC0+IHNDTAorICovCisvKiAJICAgICBzTk8sIHNTUywgc1NSLCBzRVMsIHNGVywgc0NXLCBzTEEsIHNUVywgc0NMLCBzTEkJKi8KKy8qYWNrKi8JICAgeyBzSVYsIHNJViwgc1NSLCBzRVMsIHNDVywgc0NXLCBzVFcsIHNUVywgc0NMLCBzSVYgfSwKKy8qCisgKglzU1MgLT4gc0lWCU1pZ2h0IGJlIGEgaGFsZi1vcGVuIGNvbm5lY3Rpb24uCisgKglzU1IgLT4gc1NSCU1pZ2h0IGFuc3dlciBsYXRlIHJlc2VudCBTWU4uCisgKglzRVMgLT4gc0VTCTotKQorICoJc0ZXIC0+IHNDVwlOb3JtYWwgY2xvc2UgcmVxdWVzdCBhbnN3ZXJlZCBieSBBQ0suCisgKglzQ1cgLT4gc0NXCisgKglzTEEgLT4gc1RXCUxhc3QgQUNLIGRldGVjdGVkLgorICoJc1RXIC0+IHNUVwlSZXRyYW5zbWl0dGVkIGxhc3QgQUNLLgorICoJc0NMIC0+IHNDTAorICovCisvKiAJICAgICBzTk8sIHNTUywgc1NSLCBzRVMsIHNGVywgc0NXLCBzTEEsIHNUVywgc0NMLCBzTEkJKi8KKy8qcnN0Ki8gICAgeyBzSVYsIHNDTCwgc0NMLCBzQ0wsIHNDTCwgc0NMLCBzQ0wsIHNDTCwgc0NMLCBzSVYgfSwKKy8qbm9uZSovICAgeyBzSVYsIHNJViwgc0lWLCBzSVYsIHNJViwgc0lWLCBzSVYsIHNJViwgc0lWLCBzSVYgfQorICAJfQorfTsKKworc3RhdGljIGludCB0Y3BfcGt0X3RvX3R1cGxlKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCisJCQkgICAgdW5zaWduZWQgaW50IGRhdGFvZmYsCisJCQkgICAgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpCit7CisJc3RydWN0IHRjcGhkciBfaGRyLCAqaHA7CisKKwkvKiBBY3R1YWxseSBvbmx5IG5lZWQgZmlyc3QgOCBieXRlcy4gKi8KKwlocCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIGRhdGFvZmYsIDgsICZfaGRyKTsKKwlpZiAoaHAgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwl0dXBsZS0+c3JjLnUudGNwLnBvcnQgPSBocC0+c291cmNlOworCXR1cGxlLT5kc3QudS50Y3AucG9ydCA9IGhwLT5kZXN0OworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgdGNwX2ludmVydF90dXBsZShzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSwKKwkJCSAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICpvcmlnKQoreworCXR1cGxlLT5zcmMudS50Y3AucG9ydCA9IG9yaWctPmRzdC51LnRjcC5wb3J0OworCXR1cGxlLT5kc3QudS50Y3AucG9ydCA9IG9yaWctPnNyYy51LnRjcC5wb3J0OworCXJldHVybiAxOworfQorCisvKiBQcmludCBvdXQgdGhlIHBlci1wcm90b2NvbCBwYXJ0IG9mIHRoZSB0dXBsZS4gKi8KK3N0YXRpYyBpbnQgdGNwX3ByaW50X3R1cGxlKHN0cnVjdCBzZXFfZmlsZSAqcywKKwkJCSAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKQoreworCXJldHVybiBzZXFfcHJpbnRmKHMsICJzcG9ydD0laHUgZHBvcnQ9JWh1ICIsCisJCQkgIG50b2hzKHR1cGxlLT5zcmMudS50Y3AucG9ydCksCisJCQkgIG50b2hzKHR1cGxlLT5kc3QudS50Y3AucG9ydCkpOworfQorCisvKiBQcmludCBvdXQgdGhlIHByaXZhdGUgcGFydCBvZiB0aGUgY29ubnRyYWNrLiAqLworc3RhdGljIGludCB0Y3BfcHJpbnRfY29ubnRyYWNrKHN0cnVjdCBzZXFfZmlsZSAqcywKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY29ubnRyYWNrKQoreworCWVudW0gdGNwX2Nvbm50cmFjayBzdGF0ZTsKKworCXJlYWRfbG9ja19iaCgmdGNwX2xvY2spOworCXN0YXRlID0gY29ubnRyYWNrLT5wcm90by50Y3Auc3RhdGU7CisJcmVhZF91bmxvY2tfYmgoJnRjcF9sb2NrKTsKKworCXJldHVybiBzZXFfcHJpbnRmKHMsICIlcyAiLCB0Y3BfY29ubnRyYWNrX25hbWVzW3N0YXRlXSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2Nvbm50cmFja19pbmRleChjb25zdCBzdHJ1Y3QgdGNwaGRyICp0Y3BoKQoreworCWlmICh0Y3BoLT5yc3QpIHJldHVybiBUQ1BfUlNUX1NFVDsKKwllbHNlIGlmICh0Y3BoLT5zeW4pIHJldHVybiAodGNwaC0+YWNrID8gVENQX1NZTkFDS19TRVQgOiBUQ1BfU1lOX1NFVCk7CisJZWxzZSBpZiAodGNwaC0+ZmluKSByZXR1cm4gVENQX0ZJTl9TRVQ7CisJZWxzZSBpZiAodGNwaC0+YWNrKSByZXR1cm4gVENQX0FDS19TRVQ7CisJZWxzZSByZXR1cm4gVENQX05PTkVfU0VUOworfQorCisvKiBUQ1AgY29ubmVjdGlvbiB0cmFja2luZyBiYXNlZCBvbiAnUmVhbCBTdGF0ZWZ1bCBUQ1AgUGFja2V0IEZpbHRlcmluZworICAgaW4gSVAgRmlsdGVyJyBieSBHdWlkbyB2YW4gUm9vaWouCisgICAKKyAgIGh0dHA6Ly93d3cubmx1dWcubmwvZXZlbnRzL3NhbmUyMDAwL3BhcGVycy5odG1sCisgICBodHRwOi8vd3d3LmlhZS5ubC91c2Vycy9ndWlkby9wYXBlcnMvdGNwX2ZpbHRlcmluZy5wcy5negorICAgCisgICBUaGUgYm91bmRhcmllcyBhbmQgdGhlIGNvbmRpdGlvbnMgYXJlIGNoYW5nZWQgYWNjb3JkaW5nIHRvIFJGQzc5MzoKKyAgIHRoZSBwYWNrZXQgbXVzdCBpbnRlcnNlY3QgdGhlIHdpbmRvdyAoaS5lLiBzZWdtZW50cyBtYXkgYmUKKyAgIGFmdGVyIHRoZSByaWdodCBvciBiZWZvcmUgdGhlIGxlZnQgZWRnZSkgYW5kIHRodXMgcmVjZWl2ZXJzIG1heSBBQ0sKKyAgIHNlZ21lbnRzIGFmdGVyIHRoZSByaWdodCBlZGdlIG9mIHRoZSB3aW5kb3cuCisKKyAgIAl0ZF9tYXhlbmQgPSBtYXgoc2FjayArIG1heCh3aW4sMSkpIHNlZW4gaW4gcmVwbHkgcGFja2V0cworCXRkX21heHdpbiA9IG1heChtYXgod2luLCAxKSkgKyAoc2FjayAtIGFjaykgc2VlbiBpbiBzZW50IHBhY2tldHMKKwl0ZF9tYXh3aW4gKz0gc2VxICsgbGVuIC0gc2VuZGVyLnRkX21heGVuZAorCQkJaWYgc2VxICsgbGVuID4gc2VuZGVyLnRkX21heGVuZAorCXRkX2VuZCAgICA9IG1heChzZXEgKyBsZW4pIHNlZW4gaW4gc2VudCBwYWNrZXRzCisgICAKKyAgIEkuICAgVXBwZXIgYm91bmQgZm9yIHZhbGlkIGRhdGE6CXNlcSA8PSBzZW5kZXIudGRfbWF4ZW5kCisgICBJSS4gIExvd2VyIGJvdW5kIGZvciB2YWxpZCBkYXRhOglzZXEgKyBsZW4gPj0gc2VuZGVyLnRkX2VuZCAtIHJlY2VpdmVyLnRkX21heHdpbgorICAgSUlJLglVcHBlciBib3VuZCBmb3IgdmFsaWQgYWNrOiAgICAgIHNhY2sgPD0gcmVjZWl2ZXIudGRfZW5kCisgICBJVi4JTG93ZXIgYm91bmQgZm9yIHZhbGlkIGFjazoJYWNrID49IHJlY2VpdmVyLnRkX2VuZCAtIE1BWEFDS1dJTkRPVworCisgICB3aGVyZSBzYWNrIGlzIHRoZSBoaWdoZXN0IHJpZ2h0IGVkZ2Ugb2Ygc2FjayBibG9jayBmb3VuZCBpbiB0aGUgcGFja2V0LgorCisgICBUaGUgdXBwZXIgYm91bmQgbGltaXQgZm9yIGEgdmFsaWQgYWNrIGlzIG5vdCBpZ25vcmVkIC0gCisgICB3ZSBkb2Vzbid0IGhhdmUgdG8gZGVhbCB3aXRoIGZyYWdtZW50cy4gCisqLworCitzdGF0aWMgaW5saW5lIF9fdTMyIHNlZ21lbnRfc2VxX3BsdXNfbGVuKF9fdTMyIHNlcSwKKwkJCQkJIHNpemVfdCBsZW4sCisJCQkJCSB1bnNpZ25lZCBpbnQgZGF0YW9mZiwKKwkJCQkJIHN0cnVjdCB0Y3BoZHIgKnRjcGgpCit7CisJLyogWFhYIFNob3VsZCBJIHVzZSBwYXlsb2FkIGxlbmd0aCBmaWVsZCBpbiBJUC9JUHY2IGhlYWRlciA/CisJICogLSBZSyAqLworCXJldHVybiAoc2VxICsgbGVuIC0gZGF0YW9mZiAtIHRjcGgtPmRvZmYqNAorCQkrICh0Y3BoLT5zeW4gPyAxIDogMCkgKyAodGNwaC0+ZmluID8gMSA6IDApKTsKK30KKyAgCisvKiBGaXhtZTogd2hhdCBhYm91dCBiaWcgcGFja2V0cz8gKi8KKyNkZWZpbmUgTUFYQUNLV0lOQ09OU1QJCQk2NjAwMAorI2RlZmluZSBNQVhBQ0tXSU5ET1coc2VuZGVyKQkJCQkJCVwKKwkoKHNlbmRlciktPnRkX21heHdpbiA+IE1BWEFDS1dJTkNPTlNUID8gKHNlbmRlciktPnRkX21heHdpbglcCisJCQkJCSAgICAgIDogTUFYQUNLV0lOQ09OU1QpCisgIAorLyoKKyAqIFNpbXBsaWZpZWQgdGNwX3BhcnNlX29wdGlvbnMgcm91dGluZSBmcm9tIHRjcF9pbnB1dC5jCisgKi8KK3N0YXRpYyB2b2lkIHRjcF9vcHRpb25zKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCisJCQl1bnNpZ25lZCBpbnQgZGF0YW9mZiwKKwkJCXN0cnVjdCB0Y3BoZHIgKnRjcGgsIAorCQkJc3RydWN0IGlwX2N0X3RjcF9zdGF0ZSAqc3RhdGUpCit7CisJdW5zaWduZWQgY2hhciBidWZmWygxNSAqIDQpIC0gc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpXTsKKwl1bnNpZ25lZCBjaGFyICpwdHI7CisJaW50IGxlbmd0aCA9ICh0Y3BoLT5kb2ZmKjQpIC0gc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpOworCisJaWYgKCFsZW5ndGgpCisJCXJldHVybjsKKworCXB0ciA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIGRhdGFvZmYgKyBzaXplb2Yoc3RydWN0IHRjcGhkciksCisJCQkJIGxlbmd0aCwgYnVmZik7CisJQlVHX09OKHB0ciA9PSBOVUxMKTsKKworCXN0YXRlLT50ZF9zY2FsZSA9IAorCXN0YXRlLT5mbGFncyA9IDA7CisKKwl3aGlsZSAobGVuZ3RoID4gMCkgeworCQlpbnQgb3Bjb2RlPSpwdHIrKzsKKwkJaW50IG9wc2l6ZTsKKworCQlzd2l0Y2ggKG9wY29kZSkgeworCQljYXNlIFRDUE9QVF9FT0w6CisJCQlyZXR1cm47CisJCWNhc2UgVENQT1BUX05PUDoJLyogUmVmOiBSRkMgNzkzIHNlY3Rpb24gMy4xICovCisJCQlsZW5ndGgtLTsKKwkJCWNvbnRpbnVlOworCQlkZWZhdWx0OgorCQkJb3BzaXplPSpwdHIrKzsKKwkJCWlmIChvcHNpemUgPCAyKSAvKiAic2lsbHkgb3B0aW9ucyIgKi8KKwkJCQlyZXR1cm47CisJCQlpZiAob3BzaXplID4gbGVuZ3RoKQorCQkJCWJyZWFrOwkvKiBkb24ndCBwYXJzZSBwYXJ0aWFsIG9wdGlvbnMgKi8KKworCQkJaWYgKG9wY29kZSA9PSBUQ1BPUFRfU0FDS19QRVJNIAorCQkJICAgICYmIG9wc2l6ZSA9PSBUQ1BPTEVOX1NBQ0tfUEVSTSkKKwkJCQlzdGF0ZS0+ZmxhZ3MgfD0gSVBfQ1RfVENQX0ZMQUdfU0FDS19QRVJNOworCQkJZWxzZSBpZiAob3Bjb2RlID09IFRDUE9QVF9XSU5ET1cKKwkJCQkgJiYgb3BzaXplID09IFRDUE9MRU5fV0lORE9XKSB7CisJCQkJc3RhdGUtPnRkX3NjYWxlID0gKih1X2ludDhfdCAqKXB0cjsKKworCQkJCWlmIChzdGF0ZS0+dGRfc2NhbGUgPiAxNCkgeworCQkJCQkvKiBTZWUgUkZDMTMyMyAqLworCQkJCQlzdGF0ZS0+dGRfc2NhbGUgPSAxNDsKKwkJCQl9CisJCQkJc3RhdGUtPmZsYWdzIHw9CisJCQkJCUlQX0NUX1RDUF9GTEFHX1dJTkRPV19TQ0FMRTsKKwkJCX0KKwkJCXB0ciArPSBvcHNpemUgLSAyOworCQkJbGVuZ3RoIC09IG9wc2l6ZTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgdGNwX3NhY2soY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGRhdGFvZmYsCisJCSAgICAgc3RydWN0IHRjcGhkciAqdGNwaCwgX191MzIgKnNhY2spCit7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgYnVmZlsoMTUgKiA0KSAtIHNpemVvZihzdHJ1Y3QgdGNwaGRyKV07CisJdW5zaWduZWQgY2hhciAqcHRyOworCWludCBsZW5ndGggPSAodGNwaC0+ZG9mZio0KSAtIHNpemVvZihzdHJ1Y3QgdGNwaGRyKTsKKwlfX3UzMiB0bXA7CisKKwlpZiAoIWxlbmd0aCkKKwkJcmV0dXJuOworCisJcHRyID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgZGF0YW9mZiArIHNpemVvZihzdHJ1Y3QgdGNwaGRyKSwKKwkJCQkgbGVuZ3RoLCBidWZmKTsKKwlCVUdfT04ocHRyID09IE5VTEwpOworCisJLyogRmFzdCBwYXRoIGZvciB0aW1lc3RhbXAtb25seSBvcHRpb24gKi8KKwlpZiAobGVuZ3RoID09IFRDUE9MRU5fVFNUQU1QX0FMSUdORUQqNAorCSAgICAmJiAqKF9fdTMyICopcHRyID09CisJICAgICAgICBfX2NvbnN0YW50X250b2hsKChUQ1BPUFRfTk9QIDw8IDI0KSAKKwkgICAgICAgIAkJIHwgKFRDUE9QVF9OT1AgPDwgMTYpCisJICAgICAgICAJCSB8IChUQ1BPUFRfVElNRVNUQU1QIDw8IDgpCisJICAgICAgICAJCSB8IFRDUE9MRU5fVElNRVNUQU1QKSkKKwkJcmV0dXJuOworCisJd2hpbGUgKGxlbmd0aCA+IDApIHsKKwkJaW50IG9wY29kZSA9ICpwdHIrKzsKKwkJaW50IG9wc2l6ZSwgaTsKKworCQlzd2l0Y2ggKG9wY29kZSkgeworCQljYXNlIFRDUE9QVF9FT0w6CisJCQlyZXR1cm47CisJCWNhc2UgVENQT1BUX05PUDoJLyogUmVmOiBSRkMgNzkzIHNlY3Rpb24gMy4xICovCisJCQlsZW5ndGgtLTsKKwkJCWNvbnRpbnVlOworCQlkZWZhdWx0OgorCQkJb3BzaXplID0gKnB0cisrOworCQkJaWYgKG9wc2l6ZSA8IDIpIC8qICJzaWxseSBvcHRpb25zIiAqLworCQkJCXJldHVybjsKKwkJCWlmIChvcHNpemUgPiBsZW5ndGgpCisJCQkJYnJlYWs7CS8qIGRvbid0IHBhcnNlIHBhcnRpYWwgb3B0aW9ucyAqLworCisJCQlpZiAob3Bjb2RlID09IFRDUE9QVF9TQUNLIAorCQkJICAgICYmIG9wc2l6ZSA+PSAoVENQT0xFTl9TQUNLX0JBU0UgCisJCQkgICAgCQkgICsgVENQT0xFTl9TQUNLX1BFUkJMT0NLKQorCQkJICAgICYmICEoKG9wc2l6ZSAtIFRDUE9MRU5fU0FDS19CQVNFKSAKKwkJCSAgICAJICUgVENQT0xFTl9TQUNLX1BFUkJMT0NLKSkgeworCQkJICAgIAlmb3IgKGkgPSAwOworCQkJICAgIAkgICAgIGkgPCAob3BzaXplIC0gVENQT0xFTl9TQUNLX0JBU0UpOworCQkJICAgIAkgICAgIGkgKz0gVENQT0xFTl9TQUNLX1BFUkJMT0NLKSB7CisJCQkJCW1lbWNweSgmdG1wLCAoX191MzIgKikocHRyICsgaSkgKyAxLAorCQkJCQkgICAgICAgc2l6ZW9mKF9fdTMyKSk7CisJCQkJCXRtcCA9IG50b2hsKHRtcCk7CisKKwkJCQkJaWYgKGFmdGVyKHRtcCwgKnNhY2spKQorCQkJCQkJKnNhY2sgPSB0bXA7CisJCQkJfQorCQkJCXJldHVybjsKKwkJCX0KKwkJCXB0ciArPSBvcHNpemUgLSAyOworCQkJbGVuZ3RoIC09IG9wc2l6ZTsKKwkJfQorCX0KK30KKworc3RhdGljIGludCB0Y3BfaW5fd2luZG93KHN0cnVjdCBpcF9jdF90Y3AgKnN0YXRlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJIHVuc2lnbmVkIGludCBkYXRhb2ZmLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0Y3BoZHIgKnRjcGgsCisJCQkgaW50IHBmKQoreworCXN0cnVjdCBpcF9jdF90Y3Bfc3RhdGUgKnNlbmRlciA9ICZzdGF0ZS0+c2VlbltkaXJdOworCXN0cnVjdCBpcF9jdF90Y3Bfc3RhdGUgKnJlY2VpdmVyID0gJnN0YXRlLT5zZWVuWyFkaXJdOworCV9fdTMyIHNlcSwgYWNrLCBzYWNrLCBlbmQsIHdpbiwgc3dpbjsKKwlpbnQgcmVzOworCisJLyoKKwkgKiBHZXQgdGhlIHJlcXVpcmVkIGRhdGEgZnJvbSB0aGUgcGFja2V0LgorCSAqLworCXNlcSA9IG50b2hsKHRjcGgtPnNlcSk7CisJYWNrID0gc2FjayA9IG50b2hsKHRjcGgtPmFja19zZXEpOworCXdpbiA9IG50b2hzKHRjcGgtPndpbmRvdyk7CisJZW5kID0gc2VnbWVudF9zZXFfcGx1c19sZW4oc2VxLCBza2ItPmxlbiwgZGF0YW9mZiwgdGNwaCk7CisKKwlpZiAocmVjZWl2ZXItPmZsYWdzICYgSVBfQ1RfVENQX0ZMQUdfU0FDS19QRVJNKQorCQl0Y3Bfc2Fjayhza2IsIGRhdGFvZmYsIHRjcGgsICZzYWNrKTsKKworCURFQlVHUCgidGNwX2luX3dpbmRvdzogU1RBUlRcbiIpOworCURFQlVHUCgidGNwX2luX3dpbmRvdzogc3JjPSV1LiV1LiV1LiV1OiVodSBkc3Q9JXUuJXUuJXUuJXU6JWh1ICIKKwkgICAgICAgInNlcT0ldSBhY2s9JXUgc2Fjaz0ldSB3aW49JXUgZW5kPSV1XG4iLAorCQlOSVBRVUFEKGlwaC0+c2FkZHIpLCBudG9ocyh0Y3BoLT5zb3VyY2UpLCAKKwkJTklQUVVBRChpcGgtPmRhZGRyKSwgbnRvaHModGNwaC0+ZGVzdCksCisJCXNlcSwgYWNrLCBzYWNrLCB3aW4sIGVuZCk7CisJREVCVUdQKCJ0Y3BfaW5fd2luZG93OiBzZW5kZXIgZW5kPSV1IG1heGVuZD0ldSBtYXh3aW49JXUgc2NhbGU9JWkgIgorCSAgICAgICAicmVjZWl2ZXIgZW5kPSV1IG1heGVuZD0ldSBtYXh3aW49JXUgc2NhbGU9JWlcbiIsCisJCXNlbmRlci0+dGRfZW5kLCBzZW5kZXItPnRkX21heGVuZCwgc2VuZGVyLT50ZF9tYXh3aW4sCisJCXNlbmRlci0+dGRfc2NhbGUsIAorCQlyZWNlaXZlci0+dGRfZW5kLCByZWNlaXZlci0+dGRfbWF4ZW5kLCByZWNlaXZlci0+dGRfbWF4d2luLCAKKwkJcmVjZWl2ZXItPnRkX3NjYWxlKTsKKworCWlmIChzZW5kZXItPnRkX2VuZCA9PSAwKSB7CisJCS8qCisJCSAqIEluaXRpYWxpemUgc2VuZGVyIGRhdGEuCisJCSAqLworCQlpZiAodGNwaC0+c3luICYmIHRjcGgtPmFjaykgeworCQkJLyoKKwkJCSAqIE91dGdvaW5nIFNZTi1BQ0sgaW4gcmVwbHkgdG8gYSBTWU4uCisJCQkgKi8KKwkJCXNlbmRlci0+dGRfZW5kID0gCisJCQlzZW5kZXItPnRkX21heGVuZCA9IGVuZDsKKwkJCXNlbmRlci0+dGRfbWF4d2luID0gKHdpbiA9PSAwID8gMSA6IHdpbik7CisKKwkJCXRjcF9vcHRpb25zKHNrYiwgZGF0YW9mZiwgdGNwaCwgc2VuZGVyKTsKKwkJCS8qIAorCQkJICogUkZDIDEzMjM6CisJCQkgKiBCb3RoIHNpZGVzIG11c3Qgc2VuZCB0aGUgV2luZG93IFNjYWxlIG9wdGlvbgorCQkJICogdG8gZW5hYmxlIHdpbmRvdyBzY2FsaW5nIGluIGVpdGhlciBkaXJlY3Rpb24uCisJCQkgKi8KKwkJCWlmICghKHNlbmRlci0+ZmxhZ3MgJiBJUF9DVF9UQ1BfRkxBR19XSU5ET1dfU0NBTEUKKwkJCSAgICAgICYmIHJlY2VpdmVyLT5mbGFncyAmIElQX0NUX1RDUF9GTEFHX1dJTkRPV19TQ0FMRSkpCisJCQkJc2VuZGVyLT50ZF9zY2FsZSA9IAorCQkJCXJlY2VpdmVyLT50ZF9zY2FsZSA9IDA7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogV2UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBjb25uZWN0aW9uLAorCQkJICogaXRzIGhpc3RvcnkgaXMgbG9zdCBmb3IgdXMuCisJCQkgKiBMZXQncyB0cnkgdG8gdXNlIHRoZSBkYXRhIGZyb20gdGhlIHBhY2tldC4KKwkJIAkgKi8KKwkJCXNlbmRlci0+dGRfZW5kID0gZW5kOworCQkJc2VuZGVyLT50ZF9tYXh3aW4gPSAod2luID09IDAgPyAxIDogd2luKTsKKwkJCXNlbmRlci0+dGRfbWF4ZW5kID0gZW5kICsgc2VuZGVyLT50ZF9tYXh3aW47CisJCX0KKwl9IGVsc2UgaWYgKCgoc3RhdGUtPnN0YXRlID09IFRDUF9DT05OVFJBQ0tfU1lOX1NFTlQKKwkJICAgICAmJiBkaXIgPT0gSVBfQ1RfRElSX09SSUdJTkFMKQorCQkgICB8fCAoc3RhdGUtPnN0YXRlID09IFRDUF9DT05OVFJBQ0tfU1lOX1JFQ1YKKwkJICAgICAmJiBkaXIgPT0gSVBfQ1RfRElSX1JFUExZKSkKKwkJICAgJiYgYWZ0ZXIoZW5kLCBzZW5kZXItPnRkX2VuZCkpIHsKKwkJLyoKKwkJICogUkZDIDc5MzogImlmIGEgVENQIGlzIHJlaW5pdGlhbGl6ZWQgLi4uIHRoZW4gaXQgbmVlZAorCQkgKiBub3Qgd2FpdCBhdCBhbGw7IGl0IG11c3Qgb25seSBiZSBzdXJlIHRvIHVzZSBzZXF1ZW5jZSAKKwkJICogbnVtYmVycyBsYXJnZXIgdGhhbiB0aG9zZSByZWNlbnRseSB1c2VkLiIKKwkJICovCisJCXNlbmRlci0+dGRfZW5kID0KKwkJc2VuZGVyLT50ZF9tYXhlbmQgPSBlbmQ7CisJCXNlbmRlci0+dGRfbWF4d2luID0gKHdpbiA9PSAwID8gMSA6IHdpbik7CisKKwkJdGNwX29wdGlvbnMoc2tiLCBkYXRhb2ZmLCB0Y3BoLCBzZW5kZXIpOworCX0KKworCWlmICghKHRjcGgtPmFjaykpIHsKKwkJLyoKKwkJICogSWYgdGhlcmUgaXMgbm8gQUNLLCBqdXN0IHByZXRlbmQgaXQgd2FzIHNldCBhbmQgT0suCisJCSAqLworCQlhY2sgPSBzYWNrID0gcmVjZWl2ZXItPnRkX2VuZDsKKwl9IGVsc2UgaWYgKCgodGNwX2ZsYWdfd29yZCh0Y3BoKSAmIChUQ1BfRkxBR19BQ0t8VENQX0ZMQUdfUlNUKSkgPT0gCisJCSAgICAoVENQX0ZMQUdfQUNLfFRDUF9GTEFHX1JTVCkpIAorCQkgICAmJiAoYWNrID09IDApKSB7CisJCS8qCisJCSAqIEJyb2tlbiBUQ1Agc3RhY2tzLCB0aGF0IHNldCBBQ0sgaW4gUlNUIHBhY2tldHMgYXMgd2VsbAorCQkgKiB3aXRoIHplcm8gYWNrIHZhbHVlLgorCQkgKi8KKwkJYWNrID0gc2FjayA9IHJlY2VpdmVyLT50ZF9lbmQ7CisJfQorCisJaWYgKHNlcSA9PSBlbmQKKwkgICAgJiYgKCF0Y3BoLT5yc3QKKwkJfHwgKHNlcSA9PSAwICYmIHN0YXRlLT5zdGF0ZSA9PSBUQ1BfQ09OTlRSQUNLX1NZTl9TRU5UKSkpCisJCS8qCisJCSAqIFBhY2tldHMgY29udGFpbnMgbm8gZGF0YTogd2UgYXNzdW1lIGl0IGlzIHZhbGlkCisJCSAqIGFuZCBjaGVjayB0aGUgYWNrIHZhbHVlIG9ubHkuCisJCSAqIEhvd2V2ZXIgUlNUIHNlZ21lbnRzIGFyZSBhbHdheXMgdmFsaWRhdGVkIGJ5IHRoZWlyCisJCSAqIFNFUSBudW1iZXIsIGV4Y2VwdCB3aGVuIHNlcSA9PSAwIChyZXNldCBzZW50IGFuc3dlcmluZworCQkgKiBTWU4uCisJCSAqLworCQlzZXEgPSBlbmQgPSBzZW5kZXItPnRkX2VuZDsKKworCURFQlVHUCgidGNwX2luX3dpbmRvdzogc3JjPSV1LiV1LiV1LiV1OiVodSBkc3Q9JXUuJXUuJXUuJXU6JWh1ICIKKwkgICAgICAgInNlcT0ldSBhY2s9JXUgc2FjayA9JXUgd2luPSV1IGVuZD0ldVxuIiwKKwkJTklQUVVBRChpcGgtPnNhZGRyKSwgbnRvaHModGNwaC0+c291cmNlKSwKKwkJTklQUVVBRChpcGgtPmRhZGRyKSwgbnRvaHModGNwaC0+ZGVzdCksCisJCXNlcSwgYWNrLCBzYWNrLCB3aW4sIGVuZCk7CisJREVCVUdQKCJ0Y3BfaW5fd2luZG93OiBzZW5kZXIgZW5kPSV1IG1heGVuZD0ldSBtYXh3aW49JXUgc2NhbGU9JWkgIgorCSAgICAgICAicmVjZWl2ZXIgZW5kPSV1IG1heGVuZD0ldSBtYXh3aW49JXUgc2NhbGU9JWlcbiIsCisJCXNlbmRlci0+dGRfZW5kLCBzZW5kZXItPnRkX21heGVuZCwgc2VuZGVyLT50ZF9tYXh3aW4sCisJCXNlbmRlci0+dGRfc2NhbGUsIAorCQlyZWNlaXZlci0+dGRfZW5kLCByZWNlaXZlci0+dGRfbWF4ZW5kLCByZWNlaXZlci0+dGRfbWF4d2luLAorCQlyZWNlaXZlci0+dGRfc2NhbGUpOworCisJREVCVUdQKCJ0Y3BfaW5fd2luZG93OiBJPSVpIElJPSVpIElJST0laSBJVj0laVxuIiwKKwkJYmVmb3JlKHNlcSwgc2VuZGVyLT50ZF9tYXhlbmQgKyAxKSwKKwkJYWZ0ZXIoZW5kLCBzZW5kZXItPnRkX2VuZCAtIHJlY2VpdmVyLT50ZF9tYXh3aW4gLSAxKSwKKwkgICAgCWJlZm9yZShzYWNrLCByZWNlaXZlci0+dGRfZW5kICsgMSksCisJICAgIAlhZnRlcihhY2ssIHJlY2VpdmVyLT50ZF9lbmQgLSBNQVhBQ0tXSU5ET1coc2VuZGVyKSkpOworCisJaWYgKHNlbmRlci0+bG9vc2UgfHwgcmVjZWl2ZXItPmxvb3NlIHx8CisJICAgIChiZWZvcmUoc2VxLCBzZW5kZXItPnRkX21heGVuZCArIDEpICYmCisJICAgICBhZnRlcihlbmQsIHNlbmRlci0+dGRfZW5kIC0gcmVjZWl2ZXItPnRkX21heHdpbiAtIDEpICYmCisJICAgICBiZWZvcmUoc2FjaywgcmVjZWl2ZXItPnRkX2VuZCArIDEpICYmCisJICAgICBhZnRlcihhY2ssIHJlY2VpdmVyLT50ZF9lbmQgLSBNQVhBQ0tXSU5ET1coc2VuZGVyKSkpKSB7CisJICAgIAkvKgorCQkgKiBUYWtlIGludG8gYWNjb3VudCB3aW5kb3cgc2NhbGluZyAoUkZDIDEzMjMpLgorCQkgKi8KKwkJaWYgKCF0Y3BoLT5zeW4pCisJCQl3aW4gPDw9IHNlbmRlci0+dGRfc2NhbGU7CisKKwkJLyoKKwkJICogVXBkYXRlIHNlbmRlciBkYXRhLgorCQkgKi8KKwkJc3dpbiA9IHdpbiArIChzYWNrIC0gYWNrKTsKKwkJaWYgKHNlbmRlci0+dGRfbWF4d2luIDwgc3dpbikKKwkJCXNlbmRlci0+dGRfbWF4d2luID0gc3dpbjsKKwkJaWYgKGFmdGVyKGVuZCwgc2VuZGVyLT50ZF9lbmQpKQorCQkJc2VuZGVyLT50ZF9lbmQgPSBlbmQ7CisJCS8qCisJCSAqIFVwZGF0ZSByZWNlaXZlciBkYXRhLgorCQkgKi8KKwkJaWYgKGFmdGVyKGVuZCwgc2VuZGVyLT50ZF9tYXhlbmQpKQorCQkJcmVjZWl2ZXItPnRkX21heHdpbiArPSBlbmQgLSBzZW5kZXItPnRkX21heGVuZDsKKwkJaWYgKGFmdGVyKHNhY2sgKyB3aW4sIHJlY2VpdmVyLT50ZF9tYXhlbmQgLSAxKSkgeworCQkJcmVjZWl2ZXItPnRkX21heGVuZCA9IHNhY2sgKyB3aW47CisJCQlpZiAod2luID09IDApCisJCQkJcmVjZWl2ZXItPnRkX21heGVuZCsrOworCQl9CisKKwkJLyogCisJCSAqIENoZWNrIHJldHJhbnNtaXNzaW9ucy4KKwkJICovCisJCWlmIChpbmRleCA9PSBUQ1BfQUNLX1NFVCkgeworCQkJaWYgKHN0YXRlLT5sYXN0X2RpciA9PSBkaXIKKwkJCSAgICAmJiBzdGF0ZS0+bGFzdF9zZXEgPT0gc2VxCisJCQkgICAgJiYgc3RhdGUtPmxhc3RfYWNrID09IGFjaworCQkJICAgICYmIHN0YXRlLT5sYXN0X2VuZCA9PSBlbmQpCisJCQkJc3RhdGUtPnJldHJhbnMrKzsKKwkJCWVsc2UgeworCQkJCXN0YXRlLT5sYXN0X2RpciA9IGRpcjsKKwkJCQlzdGF0ZS0+bGFzdF9zZXEgPSBzZXE7CisJCQkJc3RhdGUtPmxhc3RfYWNrID0gYWNrOworCQkJCXN0YXRlLT5sYXN0X2VuZCA9IGVuZDsKKwkJCQlzdGF0ZS0+cmV0cmFucyA9IDA7CisJCQl9CisJCX0KKwkJLyoKKwkJICogQ2xvc2UgdGhlIHdpbmRvdyBvZiBkaXNhYmxlZCB3aW5kb3cgdHJhY2tpbmcgOi0pCisJCSAqLworCQlpZiAoc2VuZGVyLT5sb29zZSkKKwkJCXNlbmRlci0+bG9vc2UtLTsKKworCQlyZXMgPSAxOworCX0gZWxzZSB7CisJCWlmIChMT0dfSU5WQUxJRChJUFBST1RPX1RDUCkpCisJCQluZl9sb2dfcGFja2V0KHBmLCAwLCBza2IsIE5VTEwsIE5VTEwsIE5VTEwsCisJCQkibmZfY3RfdGNwOiAlcyAiLAorCQkJYmVmb3JlKHNlcSwgc2VuZGVyLT50ZF9tYXhlbmQgKyAxKSA/CisJCQlhZnRlcihlbmQsIHNlbmRlci0+dGRfZW5kIC0gcmVjZWl2ZXItPnRkX21heHdpbiAtIDEpID8KKwkJCWJlZm9yZShzYWNrLCByZWNlaXZlci0+dGRfZW5kICsgMSkgPworCQkJYWZ0ZXIoYWNrLCByZWNlaXZlci0+dGRfZW5kIC0gTUFYQUNLV0lORE9XKHNlbmRlcikpID8gIkJVRyIKKwkJCTogIkFDSyBpcyB1bmRlciB0aGUgbG93ZXIgYm91bmQgKHBvc3NpYmxlIG92ZXJseSBkZWxheWVkIEFDSykiCisJCQk6ICJBQ0sgaXMgb3ZlciB0aGUgdXBwZXIgYm91bmQgKEFDS2VkIGRhdGEgbm90IHNlZW4geWV0KSIKKwkJCTogIlNFUSBpcyB1bmRlciB0aGUgbG93ZXIgYm91bmQgKGFscmVhZHkgQUNLZWQgZGF0YSByZXRyYW5zbWl0dGVkKSIKKwkJCTogIlNFUSBpcyBvdmVyIHRoZSB1cHBlciBib3VuZCAob3ZlciB0aGUgd2luZG93IG9mIHRoZSByZWNlaXZlcikiKTsKKworCQlyZXMgPSBuZl9jdF90Y3BfYmVfbGliZXJhbDsKKyAgCX0KKyAgCisJREVCVUdQKCJ0Y3BfaW5fd2luZG93OiByZXM9JWkgc2VuZGVyIGVuZD0ldSBtYXhlbmQ9JXUgbWF4d2luPSV1ICIKKwkgICAgICAgInJlY2VpdmVyIGVuZD0ldSBtYXhlbmQ9JXUgbWF4d2luPSV1XG4iLAorCQlyZXMsIHNlbmRlci0+dGRfZW5kLCBzZW5kZXItPnRkX21heGVuZCwgc2VuZGVyLT50ZF9tYXh3aW4sIAorCQlyZWNlaXZlci0+dGRfZW5kLCByZWNlaXZlci0+dGRfbWF4ZW5kLCByZWNlaXZlci0+dGRfbWF4d2luKTsKKworCXJldHVybiByZXM7Cit9CisKKyNpZmRlZiBDT05GSUdfSVBfTkZfTkFUX05FRURFRAorLyogVXBkYXRlIHNlbmRlci0+dGRfZW5kIGFmdGVyIE5BVCBzdWNjZXNzZnVsbHkgbWFuZ2xlZCB0aGUgcGFja2V0ICovCisvKiBDYWxsZXIgbXVzdCBsaW5lYXJpemUgc2tiIGF0IHRjcCBoZWFkZXIuICovCit2b2lkIG5mX2Nvbm50cmFja190Y3BfdXBkYXRlKHN0cnVjdCBza19idWZmICpza2IsCisJCQkgICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLAorCQkJICAgICBzdHJ1Y3QgbmZfY29ubiAqY29ubnRyYWNrLCAKKwkJCSAgICAgaW50IGRpcikKK3sKKwlzdHJ1Y3QgdGNwaGRyICp0Y3BoID0gKHZvaWQgKilza2ItPmRhdGEgKyBkYXRhb2ZmOworCV9fdTMyIGVuZDsKKyNpZmRlZiBERUJVR1BfVkFSUworCXN0cnVjdCBpcF9jdF90Y3Bfc3RhdGUgKnNlbmRlciA9ICZjb25udHJhY2stPnByb3RvLnRjcC5zZWVuW2Rpcl07CisJc3RydWN0IGlwX2N0X3RjcF9zdGF0ZSAqcmVjZWl2ZXIgPSAmY29ubnRyYWNrLT5wcm90by50Y3Auc2VlblshZGlyXTsKKyNlbmRpZgorCisJZW5kID0gc2VnbWVudF9zZXFfcGx1c19sZW4obnRvaGwodGNwaC0+c2VxKSwgc2tiLT5sZW4sIGRhdGFvZmYsIHRjcGgpOworCisJd3JpdGVfbG9ja19iaCgmdGNwX2xvY2spOworCS8qCisJICogV2UgaGF2ZSB0byB3b3JyeSBmb3IgdGhlIGFjayBpbiB0aGUgcmVwbHkgcGFja2V0IG9ubHkuLi4KKwkgKi8KKwlpZiAoYWZ0ZXIoZW5kLCBjb25udHJhY2stPnByb3RvLnRjcC5zZWVuW2Rpcl0udGRfZW5kKSkKKwkJY29ubnRyYWNrLT5wcm90by50Y3Auc2VlbltkaXJdLnRkX2VuZCA9IGVuZDsKKwljb25udHJhY2stPnByb3RvLnRjcC5sYXN0X2VuZCA9IGVuZDsKKwl3cml0ZV91bmxvY2tfYmgoJnRjcF9sb2NrKTsKKwlERUJVR1AoInRjcF91cGRhdGU6IHNlbmRlciBlbmQ9JXUgbWF4ZW5kPSV1IG1heHdpbj0ldSBzY2FsZT0laSAiCisJICAgICAgICJyZWNlaXZlciBlbmQ9JXUgbWF4ZW5kPSV1IG1heHdpbj0ldSBzY2FsZT0laVxuIiwKKwkJc2VuZGVyLT50ZF9lbmQsIHNlbmRlci0+dGRfbWF4ZW5kLCBzZW5kZXItPnRkX21heHdpbiwKKwkJc2VuZGVyLT50ZF9zY2FsZSwgCisJCXJlY2VpdmVyLT50ZF9lbmQsIHJlY2VpdmVyLT50ZF9tYXhlbmQsIHJlY2VpdmVyLT50ZF9tYXh3aW4sCisJCXJlY2VpdmVyLT50ZF9zY2FsZSk7Cit9CisgCisjZW5kaWYKKworI2RlZmluZQlUSF9GSU4JMHgwMQorI2RlZmluZQlUSF9TWU4JMHgwMgorI2RlZmluZQlUSF9SU1QJMHgwNAorI2RlZmluZQlUSF9QVVNICTB4MDgKKyNkZWZpbmUJVEhfQUNLCTB4MTAKKyNkZWZpbmUJVEhfVVJHCTB4MjAKKyNkZWZpbmUJVEhfRUNFCTB4NDAKKyNkZWZpbmUJVEhfQ1dSCTB4ODAKKworLyogdGFibGUgb2YgdmFsaWQgZmxhZyBjb21iaW5hdGlvbnMgLSBFQ0UgYW5kIENXUiBhcmUgYWx3YXlzIHZhbGlkICovCitzdGF0aWMgdTggdGNwX3ZhbGlkX2ZsYWdzWyhUSF9GSU58VEhfU1lOfFRIX1JTVHxUSF9QVVNIfFRIX0FDS3xUSF9VUkcpICsgMV0gPQoreworCVtUSF9TWU5dCQkJPSAxLAorCVtUSF9TWU58VEhfQUNLXQkJCT0gMSwKKwlbVEhfU1lOfFRIX0FDS3xUSF9QVVNIXQkJPSAxLAorCVtUSF9SU1RdCQkJPSAxLAorCVtUSF9SU1R8VEhfQUNLXQkJCT0gMSwKKwlbVEhfUlNUfFRIX0FDS3xUSF9QVVNIXQkJPSAxLAorCVtUSF9GSU58VEhfQUNLXQkJCT0gMSwKKwlbVEhfQUNLXQkJCT0gMSwKKwlbVEhfQUNLfFRIX1BVU0hdCQk9IDEsCisJW1RIX0FDS3xUSF9VUkddCQkJPSAxLAorCVtUSF9BQ0t8VEhfVVJHfFRIX1BVU0hdCQk9IDEsCisJW1RIX0ZJTnxUSF9BQ0t8VEhfUFVTSF0JCT0gMSwKKwlbVEhfRklOfFRIX0FDS3xUSF9VUkddCQk9IDEsCisJW1RIX0ZJTnxUSF9BQ0t8VEhfVVJHfFRIX1BVU0hdCT0gMSwKK307CisKKy8qIFByb3RlY3QgY29ubnRyYWNrIGFnYWlzdCBicm9rZW4gcGFja2V0cy4gQ29kZSB0YWtlbiBmcm9tIGlwdF91bmNsZWFuLmMuICAqLworc3RhdGljIGludCB0Y3BfZXJyb3Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJICAgICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwKKwkJICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvICpjdGluZm8sCisJCSAgICAgaW50IHBmLAorCQkgICAgIHVuc2lnbmVkIGludCBob29rbnVtLAorCQkgICAgIGludCgqY3N1bSkoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKix1bnNpZ25lZCBpbnQpKQoreworCXN0cnVjdCB0Y3BoZHIgX3RjcGgsICp0aDsKKwl1bnNpZ25lZCBpbnQgdGNwbGVuID0gc2tiLT5sZW4gLSBkYXRhb2ZmOworCXVfaW50OF90IHRjcGZsYWdzOworCisJLyogU21hbGxlciB0aGF0IG1pbmltYWwgVENQIGhlYWRlcj8gKi8KKwl0aCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIGRhdGFvZmYsIHNpemVvZihfdGNwaCksICZfdGNwaCk7CisJaWYgKHRoID09IE5VTEwpIHsKKwkJaWYgKExPR19JTlZBTElEKElQUFJPVE9fVENQKSkKKwkJCW5mX2xvZ19wYWNrZXQocGYsIDAsIHNrYiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJCQkibmZfY3RfdGNwOiBzaG9ydCBwYWNrZXQgIik7CisJCXJldHVybiAtTkZfQUNDRVBUOworICAJfQorICAKKwkvKiBOb3Qgd2hvbGUgVENQIGhlYWRlciBvciBtYWxmb3JtZWQgcGFja2V0ICovCisJaWYgKHRoLT5kb2ZmKjQgPCBzaXplb2Yoc3RydWN0IHRjcGhkcikgfHwgdGNwbGVuIDwgdGgtPmRvZmYqNCkgeworCQlpZiAoTE9HX0lOVkFMSUQoSVBQUk9UT19UQ1ApKQorCQkJbmZfbG9nX3BhY2tldChwZiwgMCwgc2tiLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkJCSJuZl9jdF90Y3A6IHRydW5jYXRlZC9tYWxmb3JtZWQgcGFja2V0ICIpOworCQlyZXR1cm4gLU5GX0FDQ0VQVDsKKwl9CisgIAorCS8qIENoZWNrc3VtIGludmFsaWQ/IElnbm9yZS4KKwkgKiBXZSBza2lwIGNoZWNraW5nIHBhY2tldHMgb24gdGhlIG91dGdvaW5nIHBhdGgKKwkgKiBiZWNhdXNlIHRoZSBzZW1hbnRpYyBvZiBDSEVDS1NVTV9IVyBpcyBkaWZmZXJlbnQgdGhlcmUgCisJICogYW5kIG1vcmVvdmVyIHJvb3QgbWlnaHQgc2VuZCByYXcgcGFja2V0cy4KKwkgKi8KKwkvKiBGSVhNRTogU291cmNlIHJvdXRlIElQIG9wdGlvbiBwYWNrZXRzIC0tUlIgKi8KKwlpZiAoKChwZiA9PSBQRl9JTkVUICYmIGhvb2tudW0gPT0gTkZfSVBfUFJFX1JPVVRJTkcpIHx8CisJICAgICAocGYgPT0gUEZfSU5FVDYgJiYgaG9va251bSAgPT0gTkZfSVA2X1BSRV9ST1VUSU5HKSkKKwkgICAgJiYgc2tiLT5pcF9zdW1tZWQgIT0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlkKKwkgICAgJiYgY3N1bShza2IsIGRhdGFvZmYpKSB7CisJCWlmIChMT0dfSU5WQUxJRChJUFBST1RPX1RDUCkpCisJCQluZl9sb2dfcGFja2V0KHBmLCAwLCBza2IsIE5VTEwsIE5VTEwsIE5VTEwsCisJCQkJICAibmZfY3RfdGNwOiBiYWQgVENQIGNoZWNrc3VtICIpOworCQlyZXR1cm4gLU5GX0FDQ0VQVDsKKwl9CisKKwkvKiBDaGVjayBUQ1AgZmxhZ3MuICovCisJdGNwZmxhZ3MgPSAoKCh1X2ludDhfdCAqKXRoKVsxM10gJiB+KFRIX0VDRXxUSF9DV1IpKTsKKwlpZiAoIXRjcF92YWxpZF9mbGFnc1t0Y3BmbGFnc10pIHsKKwkJaWYgKExPR19JTlZBTElEKElQUFJPVE9fVENQKSkKKwkJCW5mX2xvZ19wYWNrZXQocGYsIDAsIHNrYiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJCQkgICJuZl9jdF90Y3A6IGludmFsaWQgVENQIGZsYWcgY29tYmluYXRpb24gIik7CisJCXJldHVybiAtTkZfQUNDRVBUOworCX0KKworCXJldHVybiBORl9BQ0NFUFQ7Cit9CisKK3N0YXRpYyBpbnQgY3N1bTQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGRhdGFvZmYpCit7CisJcmV0dXJuIGNzdW1fdGNwdWRwX21hZ2ljKHNrYi0+bmguaXBoLT5zYWRkciwgc2tiLT5uaC5pcGgtPmRhZGRyLAorCQkJCSBza2ItPmxlbiAtIGRhdGFvZmYsIElQUFJPVE9fVENQLAorCQkJICAgICAgICAgc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fSFcgPyBza2ItPmNzdW0KKwkJCSAgICAgIAkgOiBza2JfY2hlY2tzdW0oc2tiLCBkYXRhb2ZmLAorCQkJCQkJc2tiLT5sZW4gLSBkYXRhb2ZmLCAwKSk7Cit9CisKK3N0YXRpYyBpbnQgY3N1bTYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGRhdGFvZmYpCit7CisJcmV0dXJuIGNzdW1faXB2Nl9tYWdpYygmc2tiLT5uaC5pcHY2aC0+c2FkZHIsICZza2ItPm5oLmlwdjZoLT5kYWRkciwKKwkJCSAgICAgICBza2ItPmxlbiAtIGRhdGFvZmYsIElQUFJPVE9fVENQLAorCQkJICAgICAgIHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX0hXID8gc2tiLT5jc3VtCisJCQkgICAgICAgOiBza2JfY2hlY2tzdW0oc2tiLCBkYXRhb2ZmLCBza2ItPmxlbiAtIGRhdGFvZmYsCisJCQkJCSAgICAgIDApKTsKK30KKworc3RhdGljIGludCB0Y3BfZXJyb3I0KHN0cnVjdCBza19idWZmICpza2IsCisJCSAgICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLAorCQkgICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvICpjdGluZm8sCisJCSAgICAgIGludCBwZiwKKwkJICAgICAgdW5zaWduZWQgaW50IGhvb2tudW0pCit7CisJcmV0dXJuIHRjcF9lcnJvcihza2IsIGRhdGFvZmYsIGN0aW5mbywgcGYsIGhvb2tudW0sIGNzdW00KTsKK30KKworc3RhdGljIGludCB0Y3BfZXJyb3I2KHN0cnVjdCBza19idWZmICpza2IsCisJCSAgICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLAorCQkgICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvICpjdGluZm8sCisJCSAgICAgIGludCBwZiwKKwkJICAgICAgdW5zaWduZWQgaW50IGhvb2tudW0pCit7CisJcmV0dXJuIHRjcF9lcnJvcihza2IsIGRhdGFvZmYsIGN0aW5mbywgcGYsIGhvb2tudW0sIGNzdW02KTsKK30KKworLyogUmV0dXJucyB2ZXJkaWN0IGZvciBwYWNrZXQsIG9yIC0xIGZvciBpbnZhbGlkLiAqLworc3RhdGljIGludCB0Y3BfcGFja2V0KHN0cnVjdCBuZl9jb25uICpjb25udHJhY2ssCisJCSAgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCisJCSAgICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLAorCQkgICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJICAgICAgaW50IHBmLAorCQkgICAgICB1bnNpZ25lZCBpbnQgaG9va251bSkKK3sKKwllbnVtIHRjcF9jb25udHJhY2sgbmV3X3N0YXRlLCBvbGRfc3RhdGU7CisJZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcjsKKwlzdHJ1Y3QgdGNwaGRyICp0aCwgX3RjcGg7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OworCXVuc2lnbmVkIGludCBpbmRleDsKKworCXRoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgZGF0YW9mZiwgc2l6ZW9mKF90Y3BoKSwgJl90Y3BoKTsKKwlCVUdfT04odGggPT0gTlVMTCk7CisKKwl3cml0ZV9sb2NrX2JoKCZ0Y3BfbG9jayk7CisJb2xkX3N0YXRlID0gY29ubnRyYWNrLT5wcm90by50Y3Auc3RhdGU7CisJZGlyID0gQ1RJTkZPMkRJUihjdGluZm8pOworCWluZGV4ID0gZ2V0X2Nvbm50cmFja19pbmRleCh0aCk7CisJbmV3X3N0YXRlID0gdGNwX2Nvbm50cmFja3NbZGlyXVtpbmRleF1bb2xkX3N0YXRlXTsKKworCXN3aXRjaCAobmV3X3N0YXRlKSB7CisJY2FzZSBUQ1BfQ09OTlRSQUNLX0lHTk9SRToKKwkJLyogRWl0aGVyIFNZTiBpbiBPUklHSU5BTAorCQkgKiBvciBTWU4vQUNLIGluIFJFUExZLiAqLworCQlpZiAoaW5kZXggPT0gVENQX1NZTkFDS19TRVQKKwkJICAgICYmIGNvbm50cmFjay0+cHJvdG8udGNwLmxhc3RfaW5kZXggPT0gVENQX1NZTl9TRVQKKwkJICAgICYmIGNvbm50cmFjay0+cHJvdG8udGNwLmxhc3RfZGlyICE9IGRpcgorCQkgICAgJiYgbnRvaGwodGgtPmFja19zZXEpID09CisJCSAgICAJICAgICBjb25udHJhY2stPnByb3RvLnRjcC5sYXN0X2VuZCkgeworCQkJLyogVGhpcyBTWU4vQUNLIGFja25vd2xlZGdlcyBhIFNZTiB0aGF0IHdlIGVhcmxpZXIgCisJCQkgKiBpZ25vcmVkIGFzIGludmFsaWQuIFRoaXMgbWVhbnMgdGhhdCB0aGUgY2xpZW50IGFuZAorCQkJICogdGhlIHNlcnZlciBhcmUgYm90aCBpbiBzeW5jLCB3aGlsZSB0aGUgZmlyZXdhbGwgaXMKKwkJCSAqIG5vdC4gV2Uga2lsbCB0aGlzIHNlc3Npb24gYW5kIGJsb2NrIHRoZSBTWU4vQUNLIHNvCisJCQkgKiB0aGF0IHRoZSBjbGllbnQgY2Fubm90IGJ1dCByZXRyYW5zbWl0IGl0cyBTWU4gYW5kIAorCQkJICogdGh1cyBpbml0aWF0ZSBhIGNsZWFuIG5ldyBzZXNzaW9uLgorCQkJICovCisJCSAgICAJd3JpdGVfdW5sb2NrX2JoKCZ0Y3BfbG9jayk7CisJCQlpZiAoTE9HX0lOVkFMSUQoSVBQUk9UT19UQ1ApKQorCQkJCW5mX2xvZ19wYWNrZXQocGYsIDAsIHNrYiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJCQkJICAibmZfY3RfdGNwOiBraWxsaW5nIG91dCBvZiBzeW5jIHNlc3Npb24gIik7CisJCSAgICAJaWYgKGRlbF90aW1lcigmY29ubnRyYWNrLT50aW1lb3V0KSkKKwkJICAgIAkJY29ubnRyYWNrLT50aW1lb3V0LmZ1bmN0aW9uKCh1bnNpZ25lZCBsb25nKQorCQkgICAgCQkJCQkgICAgY29ubnRyYWNrKTsKKwkJICAgIAlyZXR1cm4gLU5GX0RST1A7CisJCX0KKwkJY29ubnRyYWNrLT5wcm90by50Y3AubGFzdF9pbmRleCA9IGluZGV4OworCQljb25udHJhY2stPnByb3RvLnRjcC5sYXN0X2RpciA9IGRpcjsKKwkJY29ubnRyYWNrLT5wcm90by50Y3AubGFzdF9zZXEgPSBudG9obCh0aC0+c2VxKTsKKwkJY29ubnRyYWNrLT5wcm90by50Y3AubGFzdF9lbmQgPQorCQkgICAgc2VnbWVudF9zZXFfcGx1c19sZW4obnRvaGwodGgtPnNlcSksIHNrYi0+bGVuLCBkYXRhb2ZmLCB0aCk7CisKKwkJd3JpdGVfdW5sb2NrX2JoKCZ0Y3BfbG9jayk7CisJCWlmIChMT0dfSU5WQUxJRChJUFBST1RPX1RDUCkpCisJCQluZl9sb2dfcGFja2V0KHBmLCAwLCBza2IsIE5VTEwsIE5VTEwsIE5VTEwsCisJCQkJICAibmZfY3RfdGNwOiBpbnZhbGlkIHBhY2tlZCBpZ25vcmVkICIpOworCQlyZXR1cm4gTkZfQUNDRVBUOworCWNhc2UgVENQX0NPTk5UUkFDS19NQVg6CisJCS8qIEludmFsaWQgcGFja2V0ICovCisJCURFQlVHUCgibmZfY3RfdGNwOiBJbnZhbGlkIGRpcj0laSBpbmRleD0ldSBvc3RhdGU9JXVcbiIsCisJCSAgICAgICBkaXIsIGdldF9jb25udHJhY2tfaW5kZXgodGgpLAorCQkgICAgICAgb2xkX3N0YXRlKTsKKwkJd3JpdGVfdW5sb2NrX2JoKCZ0Y3BfbG9jayk7CisJCWlmIChMT0dfSU5WQUxJRChJUFBST1RPX1RDUCkpCisJCQluZl9sb2dfcGFja2V0KHBmLCAwLCBza2IsIE5VTEwsIE5VTEwsIE5VTEwsCisJCQkJICAibmZfY3RfdGNwOiBpbnZhbGlkIHN0YXRlICIpOworCQlyZXR1cm4gLU5GX0FDQ0VQVDsKKwljYXNlIFRDUF9DT05OVFJBQ0tfU1lOX1NFTlQ6CisJCWlmIChvbGRfc3RhdGUgPCBUQ1BfQ09OTlRSQUNLX1RJTUVfV0FJVCkKKwkJCWJyZWFrOworCQlpZiAoKGNvbm50cmFjay0+cHJvdG8udGNwLnNlZW5bZGlyXS5mbGFncyAmCisJCQlJUF9DVF9UQ1BfRkxBR19DTE9TRV9JTklUKQorCQkgICAgfHwgYWZ0ZXIobnRvaGwodGgtPnNlcSksCisJCQkgICAgIGNvbm50cmFjay0+cHJvdG8udGNwLnNlZW5bZGlyXS50ZF9lbmQpKSB7CisJCSAgICAJLyogQXR0ZW1wdCB0byByZW9wZW4gYSBjbG9zZWQgY29ubmVjdGlvbi4KKwkJICAgIAkqIERlbGV0ZSB0aGlzIGNvbm5lY3Rpb24gYW5kIGxvb2sgdXAgYWdhaW4uICovCisJCSAgICAJd3JpdGVfdW5sb2NrX2JoKCZ0Y3BfbG9jayk7CisJCSAgICAJaWYgKGRlbF90aW1lcigmY29ubnRyYWNrLT50aW1lb3V0KSkKKwkJICAgIAkJY29ubnRyYWNrLT50aW1lb3V0LmZ1bmN0aW9uKCh1bnNpZ25lZCBsb25nKQorCQkgICAgCQkJCQkgICAgY29ubnRyYWNrKTsKKwkJICAgIAlyZXR1cm4gLU5GX1JFUEVBVDsKKwkJfQorCWNhc2UgVENQX0NPTk5UUkFDS19DTE9TRToKKwkJaWYgKGluZGV4ID09IFRDUF9SU1RfU0VUCisJCSAgICAmJiB0ZXN0X2JpdChJUFNfU0VFTl9SRVBMWV9CSVQsICZjb25udHJhY2stPnN0YXR1cykKKwkJICAgICYmIGNvbm50cmFjay0+cHJvdG8udGNwLmxhc3RfaW5kZXggPT0gVENQX1NZTl9TRVQKKwkJICAgICYmIG50b2hsKHRoLT5hY2tfc2VxKSA9PSBjb25udHJhY2stPnByb3RvLnRjcC5sYXN0X2VuZCkgeworCQkJLyogUlNUIHNlbnQgdG8gaW52YWxpZCBTWU4gd2UgaGFkIGxldCB0cm91Z2gKKwkJCSAqIFNZTiB3YXMgaW4gd2luZG93IHRoZW4sIHRlYXIgZG93biBjb25uZWN0aW9uLgorCQkJICogV2Ugc2tpcCB3aW5kb3cgY2hlY2tpbmcsIGJlY2F1c2UgcGFja2V0IG1pZ2h0IEFDSworCQkJICogc2VnbWVudHMgd2UgaWdub3JlZCBpbiB0aGUgU1lOLiAqLworCQkJZ290byBpbl93aW5kb3c7CisJCX0KKwkJLyogSnVzdCBmYWxsIHRyb3VnaCAqLworCWRlZmF1bHQ6CisJCS8qIEtlZXAgY29tcGlsZXJzIGhhcHB5LiAqLworCQlicmVhazsKKwl9CisKKwlpZiAoIXRjcF9pbl93aW5kb3coJmNvbm50cmFjay0+cHJvdG8udGNwLCBkaXIsIGluZGV4LAorCQkJICAgc2tiLCBkYXRhb2ZmLCB0aCwgcGYpKSB7CisJCXdyaXRlX3VubG9ja19iaCgmdGNwX2xvY2spOworCQlyZXR1cm4gLU5GX0FDQ0VQVDsKKwl9CisgICAgIGluX3dpbmRvdzoKKwkvKiBGcm9tIG5vdyBvbiB3ZSBoYXZlIGdvdCBpbi13aW5kb3cgcGFja2V0cyAqLworCWNvbm50cmFjay0+cHJvdG8udGNwLmxhc3RfaW5kZXggPSBpbmRleDsKKworCURFQlVHUCgidGNwX2Nvbm50cmFja3M6IHNyYz0ldS4ldS4ldS4ldTolaHUgZHN0PSV1LiV1LiV1LiV1OiVodSAiCisJICAgICAgICJzeW49JWkgYWNrPSVpIGZpbj0laSByc3Q9JWkgb2xkPSVpIG5ldz0laVxuIiwKKwkJTklQUVVBRChpcGgtPnNhZGRyKSwgbnRvaHModGgtPnNvdXJjZSksCisJCU5JUFFVQUQoaXBoLT5kYWRkciksIG50b2hzKHRoLT5kZXN0KSwKKwkJKHRoLT5zeW4gPyAxIDogMCksICh0aC0+YWNrID8gMSA6IDApLAorCQkodGgtPmZpbiA/IDEgOiAwKSwgKHRoLT5yc3QgPyAxIDogMCksCisJCW9sZF9zdGF0ZSwgbmV3X3N0YXRlKTsKKworCWNvbm50cmFjay0+cHJvdG8udGNwLnN0YXRlID0gbmV3X3N0YXRlOworCWlmIChvbGRfc3RhdGUgIT0gbmV3X3N0YXRlCisJICAgICYmIChuZXdfc3RhdGUgPT0gVENQX0NPTk5UUkFDS19GSU5fV0FJVAorCQl8fCBuZXdfc3RhdGUgPT0gVENQX0NPTk5UUkFDS19DTE9TRSkpCisJCWNvbm50cmFjay0+cHJvdG8udGNwLnNlZW5bZGlyXS5mbGFncyB8PSBJUF9DVF9UQ1BfRkxBR19DTE9TRV9JTklUOworCXRpbWVvdXQgPSBjb25udHJhY2stPnByb3RvLnRjcC5yZXRyYW5zID49IG5mX2N0X3RjcF9tYXhfcmV0cmFucworCQkgICYmICp0Y3BfdGltZW91dHNbbmV3X3N0YXRlXSA+IG5mX2N0X3RjcF90aW1lb3V0X21heF9yZXRyYW5zCisJCSAgPyBuZl9jdF90Y3BfdGltZW91dF9tYXhfcmV0cmFucyA6ICp0Y3BfdGltZW91dHNbbmV3X3N0YXRlXTsKKwl3cml0ZV91bmxvY2tfYmgoJnRjcF9sb2NrKTsKKworCW5mX2Nvbm50cmFja19ldmVudF9jYWNoZShJUENUX1BST1RPSU5GT19WT0xBVElMRSwgc2tiKTsKKwlpZiAobmV3X3N0YXRlICE9IG9sZF9zdGF0ZSkKKwkJbmZfY29ubnRyYWNrX2V2ZW50X2NhY2hlKElQQ1RfUFJPVE9JTkZPLCBza2IpOworCisJaWYgKCF0ZXN0X2JpdChJUFNfU0VFTl9SRVBMWV9CSVQsICZjb25udHJhY2stPnN0YXR1cykpIHsKKwkJLyogSWYgb25seSByZXBseSBpcyBhIFJTVCwgd2UgY2FuIGNvbnNpZGVyIG91cnNlbHZlcyBub3QgdG8KKwkJICAgaGF2ZSBhbiBlc3RhYmxpc2hlZCBjb25uZWN0aW9uOiB0aGlzIGlzIGEgZmFpcmx5IGNvbW1vbgorCQkgICBwcm9ibGVtIGNhc2UsIHNvIHdlIGNhbiBkZWxldGUgdGhlIGNvbm50cmFjaworCQkgICBpbW1lZGlhdGVseS4gIC0tUlIgKi8KKwkJaWYgKHRoLT5yc3QpIHsKKwkJCWlmIChkZWxfdGltZXIoJmNvbm50cmFjay0+dGltZW91dCkpCisJCQkJY29ubnRyYWNrLT50aW1lb3V0LmZ1bmN0aW9uKCh1bnNpZ25lZCBsb25nKQorCQkJCQkJCSAgICBjb25udHJhY2spOworCQkJcmV0dXJuIE5GX0FDQ0VQVDsKKwkJfQorCX0gZWxzZSBpZiAoIXRlc3RfYml0KElQU19BU1NVUkVEX0JJVCwgJmNvbm50cmFjay0+c3RhdHVzKQorCQkgICAmJiAob2xkX3N0YXRlID09IFRDUF9DT05OVFJBQ0tfU1lOX1JFQ1YKKwkJICAgICAgIHx8IG9sZF9zdGF0ZSA9PSBUQ1BfQ09OTlRSQUNLX0VTVEFCTElTSEVEKQorCQkgICAmJiBuZXdfc3RhdGUgPT0gVENQX0NPTk5UUkFDS19FU1RBQkxJU0hFRCkgeworCQkvKiBTZXQgQVNTVVJFRCBpZiB3ZSBzZWUgc2VlIHZhbGlkIGFjayBpbiBFU1RBQkxJU0hFRCAKKwkJICAgYWZ0ZXIgU1lOX1JFQ1Ygb3IgYSB2YWxpZCBhbnN3ZXIgZm9yIGEgcGlja2VkIHVwIAorCQkgICBjb25uZWN0aW9uLiAqLworCQlzZXRfYml0KElQU19BU1NVUkVEX0JJVCwgJmNvbm50cmFjay0+c3RhdHVzKTsKKwkJbmZfY29ubnRyYWNrX2V2ZW50X2NhY2hlKElQQ1RfU1RBVFVTLCBza2IpOworCX0KKwluZl9jdF9yZWZyZXNoX2FjY3QoY29ubnRyYWNrLCBjdGluZm8sIHNrYiwgdGltZW91dCk7CisKKwlyZXR1cm4gTkZfQUNDRVBUOworfQorIAorLyogQ2FsbGVkIHdoZW4gYSBuZXcgY29ubmVjdGlvbiBmb3IgdGhpcyBwcm90b2NvbCBmb3VuZC4gKi8KK3N0YXRpYyBpbnQgdGNwX25ldyhzdHJ1Y3QgbmZfY29ubiAqY29ubnRyYWNrLAorCQkgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkgICB1bnNpZ25lZCBpbnQgZGF0YW9mZikKK3sKKwllbnVtIHRjcF9jb25udHJhY2sgbmV3X3N0YXRlOworCXN0cnVjdCB0Y3BoZHIgKnRoLCBfdGNwaDsKKyNpZmRlZiBERUJVR1BfVkFSUworCXN0cnVjdCBpcF9jdF90Y3Bfc3RhdGUgKnNlbmRlciA9ICZjb25udHJhY2stPnByb3RvLnRjcC5zZWVuWzBdOworCXN0cnVjdCBpcF9jdF90Y3Bfc3RhdGUgKnJlY2VpdmVyID0gJmNvbm50cmFjay0+cHJvdG8udGNwLnNlZW5bMV07CisjZW5kaWYKKworCXRoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgZGF0YW9mZiwgc2l6ZW9mKF90Y3BoKSwgJl90Y3BoKTsKKwlCVUdfT04odGggPT0gTlVMTCk7CisKKwkvKiBEb24ndCBuZWVkIGxvY2sgaGVyZTogdGhpcyBjb25udHJhY2sgbm90IGluIGNpcmN1bGF0aW9uIHlldCAqLworCW5ld19zdGF0ZQorCQk9IHRjcF9jb25udHJhY2tzWzBdW2dldF9jb25udHJhY2tfaW5kZXgodGgpXQorCQlbVENQX0NPTk5UUkFDS19OT05FXTsKKworCS8qIEludmFsaWQ6IGRlbGV0ZSBjb25udHJhY2sgKi8KKwlpZiAobmV3X3N0YXRlID49IFRDUF9DT05OVFJBQ0tfTUFYKSB7CisJCURFQlVHUCgibmZfY3RfdGNwOiBpbnZhbGlkIG5ldyBkZWxldGluZy5cbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAobmV3X3N0YXRlID09IFRDUF9DT05OVFJBQ0tfU1lOX1NFTlQpIHsKKwkJLyogU1lOIHBhY2tldCAqLworCQljb25udHJhY2stPnByb3RvLnRjcC5zZWVuWzBdLnRkX2VuZCA9CisJCQlzZWdtZW50X3NlcV9wbHVzX2xlbihudG9obCh0aC0+c2VxKSwgc2tiLT5sZW4sCisJCQkJCSAgICAgZGF0YW9mZiwgdGgpOworCQljb25udHJhY2stPnByb3RvLnRjcC5zZWVuWzBdLnRkX21heHdpbiA9IG50b2hzKHRoLT53aW5kb3cpOworCQlpZiAoY29ubnRyYWNrLT5wcm90by50Y3Auc2VlblswXS50ZF9tYXh3aW4gPT0gMCkKKwkJCWNvbm50cmFjay0+cHJvdG8udGNwLnNlZW5bMF0udGRfbWF4d2luID0gMTsKKwkJY29ubnRyYWNrLT5wcm90by50Y3Auc2VlblswXS50ZF9tYXhlbmQgPQorCQkJY29ubnRyYWNrLT5wcm90by50Y3Auc2VlblswXS50ZF9lbmQ7CisKKwkJdGNwX29wdGlvbnMoc2tiLCBkYXRhb2ZmLCB0aCwgJmNvbm50cmFjay0+cHJvdG8udGNwLnNlZW5bMF0pOworCQljb25udHJhY2stPnByb3RvLnRjcC5zZWVuWzFdLmZsYWdzID0gMDsKKwkJY29ubnRyYWNrLT5wcm90by50Y3Auc2VlblswXS5sb29zZSA9IAorCQljb25udHJhY2stPnByb3RvLnRjcC5zZWVuWzFdLmxvb3NlID0gMDsKKwl9IGVsc2UgaWYgKG5mX2N0X3RjcF9sb29zZSA9PSAwKSB7CisJCS8qIERvbid0IHRyeSB0byBwaWNrIHVwIGNvbm5lY3Rpb25zLiAqLworCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBXZSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIGNvbm5lY3Rpb24sCisJCSAqIGl0cyBoaXN0b3J5IGlzIGxvc3QgZm9yIHVzLgorCQkgKiBMZXQncyB0cnkgdG8gdXNlIHRoZSBkYXRhIGZyb20gdGhlIHBhY2tldC4KKwkJICovCisJCWNvbm50cmFjay0+cHJvdG8udGNwLnNlZW5bMF0udGRfZW5kID0KKwkJCXNlZ21lbnRfc2VxX3BsdXNfbGVuKG50b2hsKHRoLT5zZXEpLCBza2ItPmxlbiwKKwkJCQkJICAgICBkYXRhb2ZmLCB0aCk7CisJCWNvbm50cmFjay0+cHJvdG8udGNwLnNlZW5bMF0udGRfbWF4d2luID0gbnRvaHModGgtPndpbmRvdyk7CisJCWlmIChjb25udHJhY2stPnByb3RvLnRjcC5zZWVuWzBdLnRkX21heHdpbiA9PSAwKQorCQkJY29ubnRyYWNrLT5wcm90by50Y3Auc2VlblswXS50ZF9tYXh3aW4gPSAxOworCQljb25udHJhY2stPnByb3RvLnRjcC5zZWVuWzBdLnRkX21heGVuZCA9CisJCQljb25udHJhY2stPnByb3RvLnRjcC5zZWVuWzBdLnRkX2VuZCArIAorCQkJY29ubnRyYWNrLT5wcm90by50Y3Auc2VlblswXS50ZF9tYXh3aW47CisJCWNvbm50cmFjay0+cHJvdG8udGNwLnNlZW5bMF0udGRfc2NhbGUgPSAwOworCisJCS8qIFdlIGFzc3VtZSBTQUNLLiBTaG91bGQgd2UgYXNzdW1lIHdpbmRvdyBzY2FsaW5nIHRvbz8gKi8KKwkJY29ubnRyYWNrLT5wcm90by50Y3Auc2VlblswXS5mbGFncyA9CisJCWNvbm50cmFjay0+cHJvdG8udGNwLnNlZW5bMV0uZmxhZ3MgPSBJUF9DVF9UQ1BfRkxBR19TQUNLX1BFUk07CisJCWNvbm50cmFjay0+cHJvdG8udGNwLnNlZW5bMF0ubG9vc2UgPSAKKwkJY29ubnRyYWNrLT5wcm90by50Y3Auc2VlblsxXS5sb29zZSA9IG5mX2N0X3RjcF9sb29zZTsKKwl9CisgICAgCisJY29ubnRyYWNrLT5wcm90by50Y3Auc2VlblsxXS50ZF9lbmQgPSAwOworCWNvbm50cmFjay0+cHJvdG8udGNwLnNlZW5bMV0udGRfbWF4ZW5kID0gMDsKKwljb25udHJhY2stPnByb3RvLnRjcC5zZWVuWzFdLnRkX21heHdpbiA9IDE7CisJY29ubnRyYWNrLT5wcm90by50Y3Auc2VlblsxXS50ZF9zY2FsZSA9IDA7ICAgICAgCisKKwkvKiB0Y3BfcGFja2V0IHdpbGwgc2V0IHRoZW0gKi8KKwljb25udHJhY2stPnByb3RvLnRjcC5zdGF0ZSA9IFRDUF9DT05OVFJBQ0tfTk9ORTsKKwljb25udHJhY2stPnByb3RvLnRjcC5sYXN0X2luZGV4ID0gVENQX05PTkVfU0VUOworCSAKKwlERUJVR1AoInRjcF9uZXc6IHNlbmRlciBlbmQ9JXUgbWF4ZW5kPSV1IG1heHdpbj0ldSBzY2FsZT0laSAiCisJICAgICAgICJyZWNlaXZlciBlbmQ9JXUgbWF4ZW5kPSV1IG1heHdpbj0ldSBzY2FsZT0laVxuIiwKKwkJc2VuZGVyLT50ZF9lbmQsIHNlbmRlci0+dGRfbWF4ZW5kLCBzZW5kZXItPnRkX21heHdpbiwKKwkJc2VuZGVyLT50ZF9zY2FsZSwgCisJCXJlY2VpdmVyLT50ZF9lbmQsIHJlY2VpdmVyLT50ZF9tYXhlbmQsIHJlY2VpdmVyLT50ZF9tYXh3aW4sCisJCXJlY2VpdmVyLT50ZF9zY2FsZSk7CisJcmV0dXJuIDE7Cit9CisgIAorc3RydWN0IG5mX2Nvbm50cmFja19wcm90b2NvbCBuZl9jb25udHJhY2tfcHJvdG9jb2xfdGNwNCA9Cit7CisJLmwzcHJvdG8JCT0gUEZfSU5FVCwKKwkucHJvdG8gCQkJPSBJUFBST1RPX1RDUCwKKwkubmFtZSAJCQk9ICJ0Y3AiLAorCS5wa3RfdG9fdHVwbGUgCQk9IHRjcF9wa3RfdG9fdHVwbGUsCisJLmludmVydF90dXBsZSAJCT0gdGNwX2ludmVydF90dXBsZSwKKwkucHJpbnRfdHVwbGUgCQk9IHRjcF9wcmludF90dXBsZSwKKwkucHJpbnRfY29ubnRyYWNrIAk9IHRjcF9wcmludF9jb25udHJhY2ssCisJLnBhY2tldCAJCT0gdGNwX3BhY2tldCwKKwkubmV3IAkJCT0gdGNwX25ldywKKwkuZXJyb3IJCQk9IHRjcF9lcnJvcjQsCit9OworCitzdHJ1Y3QgbmZfY29ubnRyYWNrX3Byb3RvY29sIG5mX2Nvbm50cmFja19wcm90b2NvbF90Y3A2ID0KK3sKKwkubDNwcm90bwkJPSBQRl9JTkVUNiwKKwkucHJvdG8gCQkJPSBJUFBST1RPX1RDUCwKKwkubmFtZSAJCQk9ICJ0Y3AiLAorCS5wa3RfdG9fdHVwbGUgCQk9IHRjcF9wa3RfdG9fdHVwbGUsCisJLmludmVydF90dXBsZSAJCT0gdGNwX2ludmVydF90dXBsZSwKKwkucHJpbnRfdHVwbGUgCQk9IHRjcF9wcmludF90dXBsZSwKKwkucHJpbnRfY29ubnRyYWNrIAk9IHRjcF9wcmludF9jb25udHJhY2ssCisJLnBhY2tldCAJCT0gdGNwX3BhY2tldCwKKwkubmV3IAkJCT0gdGNwX25ldywKKwkuZXJyb3IJCQk9IHRjcF9lcnJvcjYsCit9OworCitFWFBPUlRfU1lNQk9MKG5mX2Nvbm50cmFja19wcm90b2NvbF90Y3A0KTsKK0VYUE9SVF9TWU1CT0wobmZfY29ubnRyYWNrX3Byb3RvY29sX3RjcDYpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdWRwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b191ZHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2FlN2NlCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdWRwLmMKQEAgLTAsMCArMSwyMTYgQEAKKy8qIChDKSAxOTk5LTIwMDEgUGF1bCBgUnVzdHknIFJ1c3NlbGwKKyAqIChDKSAyMDAyLTIwMDQgTmV0ZmlsdGVyIENvcmUgVGVhbSA8Y29yZXRlYW1AbmV0ZmlsdGVyLm9yZz4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIDE2IERlYyAyMDAzOiBZYXN1eXVraSBLb3pha2FpIEBVU0FHSSA8eWFzdXl1a2kua296YWthaUB0b3NoaWJhLmNvLmpwPgorICoJLSBlbmFibGUgd29ya2luZyB3aXRoIExheWVyIDMgcHJvdG9jb2wgaW5kZXBlbmRlbnQgY29ubmVjdGlvbiB0cmFja2luZy4KKyAqCisgKiBEZXJpdmVkIGZyb20gbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19wcm90b191ZHAuYworICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC91ZHAuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L2lwdjYuaD4KKyNpbmNsdWRlIDxuZXQvaXA2X2NoZWNrc3VtLmg+CisjaW5jbHVkZSA8bmV0L2NoZWNrc3VtLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2Ni5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvY29sLmg+CisKK3Vuc2lnbmVkIGxvbmcgbmZfY3RfdWRwX3RpbWVvdXQgPSAzMCpIWjsKK3Vuc2lnbmVkIGxvbmcgbmZfY3RfdWRwX3RpbWVvdXRfc3RyZWFtID0gMTgwKkhaOworCitzdGF0aWMgaW50IHVkcF9wa3RfdG9fdHVwbGUoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgICAgdW5zaWduZWQgaW50IGRhdGFvZmYsCisJCQkgICAgIHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKQoreworCXN0cnVjdCB1ZHBoZHIgX2hkciwgKmhwOworCisJLyogQWN0dWFsbHkgb25seSBuZWVkIGZpcnN0IDggYnl0ZXMuICovCisJaHAgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBkYXRhb2ZmLCBzaXplb2YoX2hkciksICZfaGRyKTsKKwlpZiAoaHAgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwl0dXBsZS0+c3JjLnUudWRwLnBvcnQgPSBocC0+c291cmNlOworCXR1cGxlLT5kc3QudS51ZHAucG9ydCA9IGhwLT5kZXN0OworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgdWRwX2ludmVydF90dXBsZShzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSwKKwkJCSAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICpvcmlnKQoreworCXR1cGxlLT5zcmMudS51ZHAucG9ydCA9IG9yaWctPmRzdC51LnVkcC5wb3J0OworCXR1cGxlLT5kc3QudS51ZHAucG9ydCA9IG9yaWctPnNyYy51LnVkcC5wb3J0OworCXJldHVybiAxOworfQorCisvKiBQcmludCBvdXQgdGhlIHBlci1wcm90b2NvbCBwYXJ0IG9mIHRoZSB0dXBsZS4gKi8KK3N0YXRpYyBpbnQgdWRwX3ByaW50X3R1cGxlKHN0cnVjdCBzZXFfZmlsZSAqcywKKwkJCSAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKQoreworCXJldHVybiBzZXFfcHJpbnRmKHMsICJzcG9ydD0laHUgZHBvcnQ9JWh1ICIsCisJCQkgIG50b2hzKHR1cGxlLT5zcmMudS51ZHAucG9ydCksCisJCQkgIG50b2hzKHR1cGxlLT5kc3QudS51ZHAucG9ydCkpOworfQorCisvKiBQcmludCBvdXQgdGhlIHByaXZhdGUgcGFydCBvZiB0aGUgY29ubnRyYWNrLiAqLworc3RhdGljIGludCB1ZHBfcHJpbnRfY29ubnRyYWNrKHN0cnVjdCBzZXFfZmlsZSAqcywKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY29ubnRyYWNrKQoreworCXJldHVybiAwOworfQorCisvKiBSZXR1cm5zIHZlcmRpY3QgZm9yIHBhY2tldCwgYW5kIG1heSBtb2RpZnkgY29ubnRyYWNrdHlwZSAqLworc3RhdGljIGludCB1ZHBfcGFja2V0KHN0cnVjdCBuZl9jb25uICpjb25udHJhY2ssCisJCSAgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCisJCSAgICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLAorCQkgICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJICAgICAgaW50IHBmLAorCQkgICAgICB1bnNpZ25lZCBpbnQgaG9va251bSkKK3sKKwkvKiBJZiB3ZSd2ZSBzZWVuIHRyYWZmaWMgYm90aCB3YXlzLCB0aGlzIGlzIHNvbWUga2luZCBvZiBVRFAKKwkgICBzdHJlYW0uICBFeHRlbmQgdGltZW91dC4gKi8KKwlpZiAodGVzdF9iaXQoSVBTX1NFRU5fUkVQTFlfQklULCAmY29ubnRyYWNrLT5zdGF0dXMpKSB7CisJCW5mX2N0X3JlZnJlc2hfYWNjdChjb25udHJhY2ssIGN0aW5mbywgc2tiLAorCQkJCSAgIG5mX2N0X3VkcF90aW1lb3V0X3N0cmVhbSk7CisJCS8qIEFsc28sIG1vcmUgbGlrZWx5IHRvIGJlIGltcG9ydGFudCwgYW5kIG5vdCBhIHByb2JlICovCisJCWlmICghdGVzdF9hbmRfc2V0X2JpdChJUFNfQVNTVVJFRF9CSVQsICZjb25udHJhY2stPnN0YXR1cykpCisJCQluZl9jb25udHJhY2tfZXZlbnRfY2FjaGUoSVBDVF9TVEFUVVMsIHNrYik7CisJfSBlbHNlCisJCW5mX2N0X3JlZnJlc2hfYWNjdChjb25udHJhY2ssIGN0aW5mbywgc2tiLCBuZl9jdF91ZHBfdGltZW91dCk7CisKKwlyZXR1cm4gTkZfQUNDRVBUOworfQorCisvKiBDYWxsZWQgd2hlbiBhIG5ldyBjb25uZWN0aW9uIGZvciB0aGlzIHByb3RvY29sIGZvdW5kLiAqLworc3RhdGljIGludCB1ZHBfbmV3KHN0cnVjdCBuZl9jb25uICpjb25udHJhY2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCisJCSAgIHVuc2lnbmVkIGludCBkYXRhb2ZmKQoreworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHVkcF9lcnJvcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgZGF0YW9mZiwKKwkJICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvICpjdGluZm8sCisJCSAgICAgaW50IHBmLAorCQkgICAgIHVuc2lnbmVkIGludCBob29rbnVtLAorCQkgICAgIGludCAoKmNzdW0pKGNvbnN0IHN0cnVjdCBza19idWZmICosIHVuc2lnbmVkIGludCkpCit7CisJdW5zaWduZWQgaW50IHVkcGxlbiA9IHNrYi0+bGVuIC0gZGF0YW9mZjsKKwlzdHJ1Y3QgdWRwaGRyIF9oZHIsICpoZHI7CisKKwkvKiBIZWFkZXIgaXMgdG9vIHNtYWxsPyAqLworCWhkciA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIGRhdGFvZmYsIHNpemVvZihfaGRyKSwgJl9oZHIpOworCWlmIChoZHIgPT0gTlVMTCkgeworCQlpZiAoTE9HX0lOVkFMSUQoSVBQUk9UT19VRFApKQorCQkJbmZfbG9nX3BhY2tldChwZiwgMCwgc2tiLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkJCSAgICAgICJuZl9jdF91ZHA6IHNob3J0IHBhY2tldCAiKTsKKwkJcmV0dXJuIC1ORl9BQ0NFUFQ7CisJfQorCisJLyogVHJ1bmNhdGVkL21hbGZvcm1lZCBwYWNrZXRzICovCisJaWYgKG50b2hzKGhkci0+bGVuKSA+IHVkcGxlbiB8fCBudG9ocyhoZHItPmxlbikgPCBzaXplb2YoKmhkcikpIHsKKwkJaWYgKExPR19JTlZBTElEKElQUFJPVE9fVURQKSkKKwkJCW5mX2xvZ19wYWNrZXQocGYsIDAsIHNrYiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJCQkibmZfY3RfdWRwOiB0cnVuY2F0ZWQvbWFsZm9ybWVkIHBhY2tldCAiKTsKKwkJcmV0dXJuIC1ORl9BQ0NFUFQ7CisJfQorCisJLyogUGFja2V0IHdpdGggbm8gY2hlY2tzdW0gKi8KKwlpZiAoIWhkci0+Y2hlY2spCisJCXJldHVybiBORl9BQ0NFUFQ7CisKKwkvKiBDaGVja3N1bSBpbnZhbGlkPyBJZ25vcmUuCisJICogV2Ugc2tpcCBjaGVja2luZyBwYWNrZXRzIG9uIHRoZSBvdXRnb2luZyBwYXRoCisJICogYmVjYXVzZSB0aGUgc2VtYW50aWMgb2YgQ0hFQ0tTVU1fSFcgaXMgZGlmZmVyZW50IHRoZXJlCisJICogYW5kIG1vcmVvdmVyIHJvb3QgbWlnaHQgc2VuZCByYXcgcGFja2V0cy4KKwkgKiBGSVhNRTogU291cmNlIHJvdXRlIElQIG9wdGlvbiBwYWNrZXRzIC0tUlIgKi8KKwlpZiAoKChwZiA9PSBQRl9JTkVUICYmIGhvb2tudW0gPT0gTkZfSVBfUFJFX1JPVVRJTkcpIHx8CisJICAgICAocGYgPT0gUEZfSU5FVDYgJiYgaG9va251bSA9PSBORl9JUDZfUFJFX1JPVVRJTkcpKQorCSAgICAmJiBza2ItPmlwX3N1bW1lZCAhPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWQorCSAgICAmJiBjc3VtKHNrYiwgZGF0YW9mZikpIHsKKwkJaWYgKExPR19JTlZBTElEKElQUFJPVE9fVURQKSkKKwkJCW5mX2xvZ19wYWNrZXQocGYsIDAsIHNrYiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJCQkibmZfY3RfdWRwOiBiYWQgVURQIGNoZWNrc3VtICIpOworCQlyZXR1cm4gLU5GX0FDQ0VQVDsKKwl9CisKKwlyZXR1cm4gTkZfQUNDRVBUOworfQorCitzdGF0aWMgaW50IGNzdW00KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBkYXRhb2ZmKQoreworCXJldHVybiBjc3VtX3RjcHVkcF9tYWdpYyhza2ItPm5oLmlwaC0+c2FkZHIsIHNrYi0+bmguaXBoLT5kYWRkciwKKwkJCQkgc2tiLT5sZW4gLSBkYXRhb2ZmLCBJUFBST1RPX1VEUCwKKwkJCQkgc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fSFcgPyBza2ItPmNzdW0KKwkJCQkgOiBza2JfY2hlY2tzdW0oc2tiLCBkYXRhb2ZmLAorCQkJCQkJc2tiLT5sZW4gLSBkYXRhb2ZmLCAwKSk7Cit9CisKK3N0YXRpYyBpbnQgY3N1bTYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGRhdGFvZmYpCit7CisJcmV0dXJuIGNzdW1faXB2Nl9tYWdpYygmc2tiLT5uaC5pcHY2aC0+c2FkZHIsICZza2ItPm5oLmlwdjZoLT5kYWRkciwKKwkJCSAgICAgICBza2ItPmxlbiAtIGRhdGFvZmYsIElQUFJPVE9fVURQLAorCQkJICAgICAgIHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX0hXID8gc2tiLT5jc3VtCisJCQkgICAgICAgOiBza2JfY2hlY2tzdW0oc2tiLCBkYXRhb2ZmLCBza2ItPmxlbiAtIGRhdGFvZmYsCisJCQkJCSAgICAgIDApKTsKK30KKworc3RhdGljIGludCB1ZHBfZXJyb3I0KHN0cnVjdCBza19idWZmICpza2IsCisJCSAgICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLAorCQkgICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvICpjdGluZm8sCisJCSAgICAgIGludCBwZiwKKwkJICAgICAgdW5zaWduZWQgaW50IGhvb2tudW0pCit7CisJcmV0dXJuIHVkcF9lcnJvcihza2IsIGRhdGFvZmYsIGN0aW5mbywgcGYsIGhvb2tudW0sIGNzdW00KTsKK30KKworc3RhdGljIGludCB1ZHBfZXJyb3I2KHN0cnVjdCBza19idWZmICpza2IsCisJCSAgICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLAorCQkgICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvICpjdGluZm8sCisJCSAgICAgIGludCBwZiwKKwkJICAgICAgdW5zaWduZWQgaW50IGhvb2tudW0pCit7CisJcmV0dXJuIHVkcF9lcnJvcihza2IsIGRhdGFvZmYsIGN0aW5mbywgcGYsIGhvb2tudW0sIGNzdW02KTsKK30KKworc3RydWN0IG5mX2Nvbm50cmFja19wcm90b2NvbCBuZl9jb25udHJhY2tfcHJvdG9jb2xfdWRwNCA9Cit7CisJLmwzcHJvdG8JCT0gUEZfSU5FVCwKKwkucHJvdG8JCQk9IElQUFJPVE9fVURQLAorCS5uYW1lCQkJPSAidWRwIiwKKwkucGt0X3RvX3R1cGxlCQk9IHVkcF9wa3RfdG9fdHVwbGUsCisJLmludmVydF90dXBsZQkJPSB1ZHBfaW52ZXJ0X3R1cGxlLAorCS5wcmludF90dXBsZQkJPSB1ZHBfcHJpbnRfdHVwbGUsCisJLnByaW50X2Nvbm50cmFjawk9IHVkcF9wcmludF9jb25udHJhY2ssCisJLnBhY2tldAkJCT0gdWRwX3BhY2tldCwKKwkubmV3CQkJPSB1ZHBfbmV3LAorCS5lcnJvcgkJCT0gdWRwX2Vycm9yNCwKK307CisKK3N0cnVjdCBuZl9jb25udHJhY2tfcHJvdG9jb2wgbmZfY29ubnRyYWNrX3Byb3RvY29sX3VkcDYgPQoreworCS5sM3Byb3RvCQk9IFBGX0lORVQ2LAorCS5wcm90bwkJCT0gSVBQUk9UT19VRFAsCisJLm5hbWUJCQk9ICJ1ZHAiLAorCS5wa3RfdG9fdHVwbGUJCT0gdWRwX3BrdF90b190dXBsZSwKKwkuaW52ZXJ0X3R1cGxlCQk9IHVkcF9pbnZlcnRfdHVwbGUsCisJLnByaW50X3R1cGxlCQk9IHVkcF9wcmludF90dXBsZSwKKwkucHJpbnRfY29ubnRyYWNrCT0gdWRwX3ByaW50X2Nvbm50cmFjaywKKwkucGFja2V0CQkJPSB1ZHBfcGFja2V0LAorCS5uZXcJCQk9IHVkcF9uZXcsCisJLmVycm9yCQkJPSB1ZHBfZXJyb3I2LAorfTsKKworRVhQT1JUX1NZTUJPTChuZl9jb25udHJhY2tfcHJvdG9jb2xfdWRwNCk7CitFWFBPUlRfU1lNQk9MKG5mX2Nvbm50cmFja19wcm90b2NvbF91ZHA2KTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTIyNGRiCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jCkBAIC0wLDAgKzEsODY5IEBACisvKiBUaGlzIGZpbGUgY29udGFpbnMgYWxsIHRoZSBmdW5jdGlvbnMgcmVxdWlyZWQgZm9yIHRoZSBzdGFuZGFsb25lCisgICBuZl9jb25udHJhY2sgbW9kdWxlLgorCisgICBUaGVzZSBhcmUgbm90IHJlcXVpcmVkIGJ5IHRoZSBjb21wYXRpYmlsaXR5IGxheWVyLgorKi8KKworLyogKEMpIDE5OTktMjAwMSBQYXVsIGBSdXN0eScgUnVzc2VsbAorICogKEMpIDIwMDItMjAwNCBOZXRmaWx0ZXIgQ29yZSBUZWFtIDxjb3JldGVhbUBuZXRmaWx0ZXIub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogMTYgRGVjIDIwMDM6IFlhc3V5dWtpIEtvemFrYWkgQFVTQUdJIDx5YXN1eXVraS5rb3pha2FpQHRvc2hpYmEuY28uanA+CisgKgktIGdlbmVyYWxpemUgTDMgcHJvdG9jb2wgZGVwZW5kZW50IHBhcnQuCisgKgorICogRGVyaXZlZCBmcm9tIG5ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfc3RhbmRhbG9uZS5jCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaWZkZWYgQ09ORklHX1NZU0NUTAorI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgorI2VuZGlmCisKKyNkZWZpbmUgQVNTRVJUX1JFQURfTE9DSyh4KQorI2RlZmluZSBBU1NFUlRfV1JJVEVfTE9DSyh4KQorCisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvLmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9jb2wuaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvbGlzdGhlbHAuaD4KKworI2lmIDAKKyNkZWZpbmUgREVCVUdQIHByaW50aworI2Vsc2UKKyNkZWZpbmUgREVCVUdQKGZvcm1hdCwgYXJncy4uLikKKyNlbmRpZgorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK2V4dGVybiBhdG9taWNfdCBuZl9jb25udHJhY2tfY291bnQ7CitERUNMQVJFX1BFUl9DUFUoc3RydWN0IGlwX2Nvbm50cmFja19zdGF0LCBuZl9jb25udHJhY2tfc3RhdCk7CisKK3N0YXRpYyBpbnQga2lsbF9sM3Byb3RvKHN0cnVjdCBuZl9jb25uICppLCB2b2lkICpkYXRhKQoreworCXJldHVybiAoaS0+dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGUuc3JjLmwzbnVtID09IAorCQkJKChzdHJ1Y3QgbmZfY29ubnRyYWNrX2wzcHJvdG8gKilkYXRhKS0+bDNwcm90byk7Cit9CisKK3N0YXRpYyBpbnQga2lsbF9wcm90byhzdHJ1Y3QgbmZfY29ubiAqaSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgbmZfY29ubnRyYWNrX3Byb3RvY29sICpwcm90bzsKKwlwcm90byA9IChzdHJ1Y3QgbmZfY29ubnRyYWNrX3Byb3RvY29sICopZGF0YTsKKwlyZXR1cm4gKGktPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlLmRzdC5wcm90b251bSA9PSAKKwkJCXByb3RvLT5wcm90bykgJiYKKwkgICAgICAgKGktPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlLnNyYy5sM251bSA9PQorCQkJcHJvdG8tPmwzcHJvdG8pOworfQorCisjaWZkZWYgQ09ORklHX1BST0NfRlMKK3N0YXRpYyBpbnQKK3ByaW50X3R1cGxlKHN0cnVjdCBzZXFfZmlsZSAqcywgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsCisJICAgIHN0cnVjdCBuZl9jb25udHJhY2tfbDNwcm90byAqbDNwcm90bywKKwkgICAgc3RydWN0IG5mX2Nvbm50cmFja19wcm90b2NvbCAqcHJvdG8pCit7CisJcmV0dXJuIGwzcHJvdG8tPnByaW50X3R1cGxlKHMsIHR1cGxlKSB8fCBwcm90by0+cHJpbnRfdHVwbGUocywgdHVwbGUpOworfQorCisjaWZkZWYgQ09ORklHX05GX0NUX0FDQ1QKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK3NlcV9wcmludF9jb3VudGVycyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsCisJCSAgIGNvbnN0IHN0cnVjdCBpcF9jb25udHJhY2tfY291bnRlciAqY291bnRlcikKK3sKKwlyZXR1cm4gc2VxX3ByaW50ZihzLCAicGFja2V0cz0lbGx1IGJ5dGVzPSVsbHUgIiwKKwkJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZyljb3VudGVyLT5wYWNrZXRzLAorCQkJICAodW5zaWduZWQgbG9uZyBsb25nKWNvdW50ZXItPmJ5dGVzKTsKK30KKyNlbHNlCisjZGVmaW5lIHNlcV9wcmludF9jb3VudGVycyh4LCB5KQkwCisjZW5kaWYKKworc3RydWN0IGN0X2l0ZXJfc3RhdGUgeworCXVuc2lnbmVkIGludCBidWNrZXQ7Cit9OworCitzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCAqY3RfZ2V0X2ZpcnN0KHN0cnVjdCBzZXFfZmlsZSAqc2VxKQoreworCXN0cnVjdCBjdF9pdGVyX3N0YXRlICpzdCA9IHNlcS0+cHJpdmF0ZTsKKworCWZvciAoc3QtPmJ1Y2tldCA9IDA7CisJICAgICBzdC0+YnVja2V0IDwgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplOworCSAgICAgc3QtPmJ1Y2tldCsrKSB7CisJCWlmICghbGlzdF9lbXB0eSgmbmZfY29ubnRyYWNrX2hhc2hbc3QtPmJ1Y2tldF0pKQorCQkJcmV0dXJuIG5mX2Nvbm50cmFja19oYXNoW3N0LT5idWNrZXRdLm5leHQ7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCAqY3RfZ2V0X25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJc3RydWN0IGN0X2l0ZXJfc3RhdGUgKnN0ID0gc2VxLT5wcml2YXRlOworCisJaGVhZCA9IGhlYWQtPm5leHQ7CisJd2hpbGUgKGhlYWQgPT0gJm5mX2Nvbm50cmFja19oYXNoW3N0LT5idWNrZXRdKSB7CisJCWlmICgrK3N0LT5idWNrZXQgPj0gbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplKQorCQkJcmV0dXJuIE5VTEw7CisJCWhlYWQgPSBuZl9jb25udHJhY2tfaGFzaFtzdC0+YnVja2V0XS5uZXh0OworCX0KKwlyZXR1cm4gaGVhZDsKK30KKworc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgKmN0X2dldF9pZHgoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCBwb3MpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqaGVhZCA9IGN0X2dldF9maXJzdChzZXEpOworCisJaWYgKGhlYWQpCisJCXdoaWxlIChwb3MgJiYgKGhlYWQgPSBjdF9nZXRfbmV4dChzZXEsIGhlYWQpKSkKKwkJCXBvcy0tOworCXJldHVybiBwb3MgPyBOVUxMIDogaGVhZDsKK30KKworc3RhdGljIHZvaWQgKmN0X3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCit7CisJcmVhZF9sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7CisJcmV0dXJuIGN0X2dldF9pZHgoc2VxLCAqcG9zKTsKK30KKworc3RhdGljIHZvaWQgKmN0X3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdiwgbG9mZl90ICpwb3MpCit7CisJKCpwb3MpKys7CisJcmV0dXJuIGN0X2dldF9uZXh0KHMsIHYpOworfQorCitzdGF0aWMgdm9pZCBjdF9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYpCit7CisJcmVhZF91bmxvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKK30KKworLyogcmV0dXJuIDAgb24gc3VjY2VzcywgMSBpbiBjYXNlIG9mIGVycm9yICovCitzdGF0aWMgaW50IGN0X3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdikKK3sKKwljb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX2hhc2ggKmhhc2ggPSB2OworCWNvbnN0IHN0cnVjdCBuZl9jb25uICpjb25udHJhY2sgPSBuZl9jdF90dXBsZWhhc2hfdG9fY3RyYWNrKGhhc2gpOworCXN0cnVjdCBuZl9jb25udHJhY2tfbDNwcm90byAqbDNwcm90bzsKKwlzdHJ1Y3QgbmZfY29ubnRyYWNrX3Byb3RvY29sICpwcm90bzsKKworCUFTU0VSVF9SRUFEX0xPQ0soJm5mX2Nvbm50cmFja19sb2NrKTsKKwlORl9DVF9BU1NFUlQoY29ubnRyYWNrKTsKKworCS8qIHdlIG9ubHkgd2FudCB0byBwcmludCBESVJfT1JJR0lOQUwgKi8KKwlpZiAoTkZfQ1RfRElSRUNUSU9OKGhhc2gpKQorCQlyZXR1cm4gMDsKKworCWwzcHJvdG8gPSBuZl9jdF9maW5kX2wzcHJvdG8oY29ubnRyYWNrLT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXQorCQkJCSAgICAgLnR1cGxlLnNyYy5sM251bSk7CisKKwlORl9DVF9BU1NFUlQobDNwcm90byk7CisJcHJvdG8gPSBuZl9jdF9maW5kX3Byb3RvKGNvbm50cmFjay0+dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0KKwkJCQkgLnR1cGxlLnNyYy5sM251bSwKKwkJCQkgY29ubnRyYWNrLT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXQorCQkJCSAudHVwbGUuZHN0LnByb3RvbnVtKTsKKwlORl9DVF9BU1NFUlQocHJvdG8pOworCisJaWYgKHNlcV9wcmludGYocywgIiUtOHMgJXUgJS04cyAldSAlbGQgIiwKKwkJICAgICAgIGwzcHJvdG8tPm5hbWUsCisJCSAgICAgICBjb25udHJhY2stPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlLnNyYy5sM251bSwKKwkJICAgICAgIHByb3RvLT5uYW1lLAorCQkgICAgICAgY29ubnRyYWNrLT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZS5kc3QucHJvdG9udW0sCisJCSAgICAgICB0aW1lcl9wZW5kaW5nKCZjb25udHJhY2stPnRpbWVvdXQpCisJCSAgICAgICA/IChsb25nKShjb25udHJhY2stPnRpbWVvdXQuZXhwaXJlcyAtIGppZmZpZXMpL0haIDogMCkgIT0gMCkKKwkJcmV0dXJuIC1FTk9TUEM7CisKKwlpZiAobDNwcm90by0+cHJpbnRfY29ubnRyYWNrKHMsIGNvbm50cmFjaykpCisJCXJldHVybiAtRU5PU1BDOworCisJaWYgKHByb3RvLT5wcmludF9jb25udHJhY2socywgY29ubnRyYWNrKSkKKwkJcmV0dXJuIC1FTk9TUEM7CisKKwlpZiAocHJpbnRfdHVwbGUocywgJmNvbm50cmFjay0+dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGUsCisJCQlsM3Byb3RvLCBwcm90bykpCisJCXJldHVybiAtRU5PU1BDOworCisJaWYgKHNlcV9wcmludF9jb3VudGVycyhzLCAmY29ubnRyYWNrLT5jb3VudGVyc1tJUF9DVF9ESVJfT1JJR0lOQUxdKSkKKwkJcmV0dXJuIC1FTk9TUEM7CisKKwlpZiAoISh0ZXN0X2JpdChJUFNfU0VFTl9SRVBMWV9CSVQsICZjb25udHJhY2stPnN0YXR1cykpKQorCQlpZiAoc2VxX3ByaW50ZihzLCAiW1VOUkVQTElFRF0gIikpCisJCQlyZXR1cm4gLUVOT1NQQzsKKworCWlmIChwcmludF90dXBsZShzLCAmY29ubnRyYWNrLT50dXBsZWhhc2hbSVBfQ1RfRElSX1JFUExZXS50dXBsZSwKKwkJCWwzcHJvdG8sIHByb3RvKSkKKwkJcmV0dXJuIC1FTk9TUEM7CisKKwlpZiAoc2VxX3ByaW50X2NvdW50ZXJzKHMsICZjb25udHJhY2stPmNvdW50ZXJzW0lQX0NUX0RJUl9SRVBMWV0pKQorCQlyZXR1cm4gLUVOT1NQQzsKKworCWlmICh0ZXN0X2JpdChJUFNfQVNTVVJFRF9CSVQsICZjb25udHJhY2stPnN0YXR1cykpCisJCWlmIChzZXFfcHJpbnRmKHMsICJbQVNTVVJFRF0gIikpCisJCQlyZXR1cm4gLUVOT1NQQzsKKworI2lmIGRlZmluZWQoQ09ORklHX05GX0NPTk5UUkFDS19NQVJLKQorCWlmIChzZXFfcHJpbnRmKHMsICJtYXJrPSV1ICIsIGNvbm50cmFjay0+bWFyaykpCisJCXJldHVybiAtRU5PU1BDOworI2VuZGlmCisKKwlpZiAoc2VxX3ByaW50ZihzLCAidXNlPSV1XG4iLCBhdG9taWNfcmVhZCgmY29ubnRyYWNrLT5jdF9nZW5lcmFsLnVzZSkpKQorCQlyZXR1cm4gLUVOT1NQQzsKKwkKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBjdF9zZXFfb3BzID0geworCS5zdGFydCA9IGN0X3NlcV9zdGFydCwKKwkubmV4dCAgPSBjdF9zZXFfbmV4dCwKKwkuc3RvcCAgPSBjdF9zZXFfc3RvcCwKKwkuc2hvdyAgPSBjdF9zZXFfc2hvdworfTsKKworc3RhdGljIGludCBjdF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBzZXFfZmlsZSAqc2VxOworCXN0cnVjdCBjdF9pdGVyX3N0YXRlICpzdDsKKwlpbnQgcmV0OworCisJc3QgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgY3RfaXRlcl9zdGF0ZSksIEdGUF9LRVJORUwpOworCWlmIChzdCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwlyZXQgPSBzZXFfb3BlbihmaWxlLCAmY3Rfc2VxX29wcyk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfZnJlZTsKKwlzZXEgICAgICAgICAgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc2VxLT5wcml2YXRlID0gc3Q7CisJbWVtc2V0KHN0LCAwLCBzaXplb2Yoc3RydWN0IGN0X2l0ZXJfc3RhdGUpKTsKKwlyZXR1cm4gcmV0Oworb3V0X2ZyZWU6CisJa2ZyZWUoc3QpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGN0X2ZpbGVfb3BzID0geworCS5vd25lciAgID0gVEhJU19NT0RVTEUsCisJLm9wZW4gICAgPSBjdF9vcGVuLAorCS5yZWFkICAgID0gc2VxX3JlYWQsCisJLmxsc2VlayAgPSBzZXFfbHNlZWssCisJLnJlbGVhc2UgPSBzZXFfcmVsZWFzZV9wcml2YXRlLAorfTsKKworLyogZXhwZWN0cyAqLworc3RhdGljIHZvaWQgKmV4cF9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzLCBsb2ZmX3QgKnBvcykKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICplID0gJm5mX2Nvbm50cmFja19leHBlY3RfbGlzdDsKKwlsb2ZmX3QgaTsKKworCS8qIHN0cmFuZ2Ugc2VxX2ZpbGUgYXBpIGNhbGxzIHN0b3AgZXZlbiBpZiB3ZSBmYWlsLAorCSAqIHRodXMgd2UgbmVlZCB0byBncmFiIGxvY2sgc2luY2Ugc3RvcCB1bmxvY2tzICovCisJcmVhZF9sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7CisKKwlpZiAobGlzdF9lbXB0eShlKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlmb3IgKGkgPSAwOyBpIDw9ICpwb3M7IGkrKykgeworCQllID0gZS0+bmV4dDsKKwkJaWYgKGUgPT0gJm5mX2Nvbm50cmFja19leHBlY3RfbGlzdCkKKwkJCXJldHVybiBOVUxMOworCX0KKwlyZXR1cm4gZTsKK30KKworc3RhdGljIHZvaWQgKmV4cF9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmUgPSB2OworCisJKysqcG9zOworCWUgPSBlLT5uZXh0OworCisJaWYgKGUgPT0gJm5mX2Nvbm50cmFja19leHBlY3RfbGlzdCkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gZTsKK30KKworc3RhdGljIHZvaWQgZXhwX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdikKK3sKKwlyZWFkX3VubG9ja19iaCgmbmZfY29ubnRyYWNrX2xvY2spOworfQorCitzdGF0aWMgaW50IGV4cF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYpCit7CisJc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cGVjdCA9IHY7CisKKwlpZiAoZXhwZWN0LT50aW1lb3V0LmZ1bmN0aW9uKQorCQlzZXFfcHJpbnRmKHMsICIlbGQgIiwgdGltZXJfcGVuZGluZygmZXhwZWN0LT50aW1lb3V0KQorCQkJICAgPyAobG9uZykoZXhwZWN0LT50aW1lb3V0LmV4cGlyZXMgLSBqaWZmaWVzKS9IWiA6IDApOworCWVsc2UKKwkJc2VxX3ByaW50ZihzLCAiLSAiKTsKKwlzZXFfcHJpbnRmKHMsICJsM3Byb3RvID0gJXUgcHJvdG89JXUgIiwKKwkJICAgZXhwZWN0LT50dXBsZS5zcmMubDNudW0sCisJCSAgIGV4cGVjdC0+dHVwbGUuZHN0LnByb3RvbnVtKTsKKwlwcmludF90dXBsZShzLCAmZXhwZWN0LT50dXBsZSwKKwkJICAgIG5mX2N0X2ZpbmRfbDNwcm90byhleHBlY3QtPnR1cGxlLnNyYy5sM251bSksCisJCSAgICBuZl9jdF9maW5kX3Byb3RvKGV4cGVjdC0+dHVwbGUuc3JjLmwzbnVtLAorCQkJCSAgICAgZXhwZWN0LT50dXBsZS5kc3QucHJvdG9udW0pKTsKKwlyZXR1cm4gc2VxX3B1dGMocywgJ1xuJyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgZXhwX3NlcV9vcHMgPSB7CisJLnN0YXJ0ID0gZXhwX3NlcV9zdGFydCwKKwkubmV4dCA9IGV4cF9zZXFfbmV4dCwKKwkuc3RvcCA9IGV4cF9zZXFfc3RvcCwKKwkuc2hvdyA9IGV4cF9zZXFfc2hvdworfTsKKworc3RhdGljIGludCBleHBfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2VxX29wZW4oZmlsZSwgJmV4cF9zZXFfb3BzKTsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXhwX2ZpbGVfb3BzID0geworCS5vd25lciAgID0gVEhJU19NT0RVTEUsCisJLm9wZW4gICAgPSBleHBfb3BlbiwKKwkucmVhZCAgICA9IHNlcV9yZWFkLAorCS5sbHNlZWsgID0gc2VxX2xzZWVrLAorCS5yZWxlYXNlID0gc2VxX3JlbGVhc2UKK307CisKK3N0YXRpYyB2b2lkICpjdF9jcHVfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKK3sKKwlpbnQgY3B1OworCisJaWYgKCpwb3MgPT0gMCkKKwkJcmV0dXJuIFNFUV9TVEFSVF9UT0tFTjsKKworCWZvciAoY3B1ID0gKnBvcy0xOyBjcHUgPCBOUl9DUFVTOyArK2NwdSkgeworCQlpZiAoIWNwdV9wb3NzaWJsZShjcHUpKQorCQkJY29udGludWU7CisJCSpwb3MgPSBjcHUgKyAxOworCQlyZXR1cm4gJnBlcl9jcHUobmZfY29ubnRyYWNrX3N0YXQsIGNwdSk7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkICpjdF9jcHVfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQoreworCWludCBjcHU7CisKKwlmb3IgKGNwdSA9ICpwb3M7IGNwdSA8IE5SX0NQVVM7ICsrY3B1KSB7CisJCWlmICghY3B1X3Bvc3NpYmxlKGNwdSkpCisJCQljb250aW51ZTsKKwkJKnBvcyA9IGNwdSArIDE7CisJCXJldHVybiAmcGVyX2NwdShuZl9jb25udHJhY2tfc3RhdCwgY3B1KTsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgY3RfY3B1X3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQoreworfQorCitzdGF0aWMgaW50IGN0X2NwdV9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKK3sKKwl1bnNpZ25lZCBpbnQgbnJfY29ubnRyYWNrcyA9IGF0b21pY19yZWFkKCZuZl9jb25udHJhY2tfY291bnQpOworCXN0cnVjdCBpcF9jb25udHJhY2tfc3RhdCAqc3QgPSB2OworCisJaWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKSB7CisJCXNlcV9wcmludGYoc2VxLCAiZW50cmllcyAgc2VhcmNoZWQgZm91bmQgbmV3IGludmFsaWQgaWdub3JlIGRlbGV0ZSBkZWxldGVfbGlzdCBpbnNlcnQgaW5zZXJ0X2ZhaWxlZCBkcm9wIGVhcmx5X2Ryb3AgaWNtcF9lcnJvciAgZXhwZWN0X25ldyBleHBlY3RfY3JlYXRlIGV4cGVjdF9kZWxldGVcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlzZXFfcHJpbnRmKHNlcSwgIiUwOHggICUwOHggJTA4eCAlMDh4ICUwOHggJTA4eCAlMDh4ICUwOHggIgorCQkJIiUwOHggJTA4eCAlMDh4ICUwOHggJTA4eCAgJTA4eCAlMDh4ICUwOHggXG4iLAorCQkgICBucl9jb25udHJhY2tzLAorCQkgICBzdC0+c2VhcmNoZWQsCisJCSAgIHN0LT5mb3VuZCwKKwkJICAgc3QtPm5ldywKKwkJICAgc3QtPmludmFsaWQsCisJCSAgIHN0LT5pZ25vcmUsCisJCSAgIHN0LT5kZWxldGUsCisJCSAgIHN0LT5kZWxldGVfbGlzdCwKKwkJICAgc3QtPmluc2VydCwKKwkJICAgc3QtPmluc2VydF9mYWlsZWQsCisJCSAgIHN0LT5kcm9wLAorCQkgICBzdC0+ZWFybHlfZHJvcCwKKwkJICAgc3QtPmVycm9yLAorCisJCSAgIHN0LT5leHBlY3RfbmV3LAorCQkgICBzdC0+ZXhwZWN0X2NyZWF0ZSwKKwkJICAgc3QtPmV4cGVjdF9kZWxldGUKKwkJKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBjdF9jcHVfc2VxX29wcyA9IHsKKwkuc3RhcnQJPSBjdF9jcHVfc2VxX3N0YXJ0LAorCS5uZXh0CT0gY3RfY3B1X3NlcV9uZXh0LAorCS5zdG9wCT0gY3RfY3B1X3NlcV9zdG9wLAorCS5zaG93CT0gY3RfY3B1X3NlcV9zaG93LAorfTsKKworc3RhdGljIGludCBjdF9jcHVfc2VxX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNlcV9vcGVuKGZpbGUsICZjdF9jcHVfc2VxX29wcyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGN0X2NwdV9zZXFfZm9wcyA9IHsKKwkub3duZXIJID0gVEhJU19NT0RVTEUsCisJLm9wZW4JID0gY3RfY3B1X3NlcV9vcGVuLAorCS5yZWFkCSA9IHNlcV9yZWFkLAorCS5sbHNlZWsJID0gc2VxX2xzZWVrLAorCS5yZWxlYXNlID0gc2VxX3JlbGVhc2VfcHJpdmF0ZSwKK307CisjZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi8KKworLyogU3lzY3RsIHN1cHBvcnQgKi8KKworI2lmZGVmIENPTkZJR19TWVNDVEwKKworLyogRnJvbSBuZl9jb25udHJhY2tfY29yZS5jICovCitleHRlcm4gaW50IG5mX2Nvbm50cmFja19tYXg7CitleHRlcm4gdW5zaWduZWQgaW50IG5mX2Nvbm50cmFja19odGFibGVfc2l6ZTsKKworLyogRnJvbSBuZl9jb25udHJhY2tfcHJvdG9fdGNwLmMgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIG5mX2N0X3RjcF90aW1lb3V0X3N5bl9zZW50OworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbmZfY3RfdGNwX3RpbWVvdXRfc3luX3JlY3Y7CitleHRlcm4gdW5zaWduZWQgbG9uZyBuZl9jdF90Y3BfdGltZW91dF9lc3RhYmxpc2hlZDsKK2V4dGVybiB1bnNpZ25lZCBsb25nIG5mX2N0X3RjcF90aW1lb3V0X2Zpbl93YWl0OworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbmZfY3RfdGNwX3RpbWVvdXRfY2xvc2Vfd2FpdDsKK2V4dGVybiB1bnNpZ25lZCBsb25nIG5mX2N0X3RjcF90aW1lb3V0X2xhc3RfYWNrOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbmZfY3RfdGNwX3RpbWVvdXRfdGltZV93YWl0OworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbmZfY3RfdGNwX3RpbWVvdXRfY2xvc2U7CitleHRlcm4gdW5zaWduZWQgbG9uZyBuZl9jdF90Y3BfdGltZW91dF9tYXhfcmV0cmFuczsKK2V4dGVybiBpbnQgbmZfY3RfdGNwX2xvb3NlOworZXh0ZXJuIGludCBuZl9jdF90Y3BfYmVfbGliZXJhbDsKK2V4dGVybiBpbnQgbmZfY3RfdGNwX21heF9yZXRyYW5zOworCisvKiBGcm9tIG5mX2Nvbm50cmFja19wcm90b191ZHAuYyAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbmZfY3RfdWRwX3RpbWVvdXQ7CitleHRlcm4gdW5zaWduZWQgbG9uZyBuZl9jdF91ZHBfdGltZW91dF9zdHJlYW07CisKKy8qIEZyb20gbmZfY29ubnRyYWNrX3Byb3RvX2dlbmVyaWMuYyAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbmZfY3RfZ2VuZXJpY190aW1lb3V0OworCisvKiBMb2cgaW52YWxpZCBwYWNrZXRzIG9mIGEgZ2l2ZW4gcHJvdG9jb2wgKi8KK3N0YXRpYyBpbnQgbG9nX2ludmFsaWRfcHJvdG9fbWluID0gMDsKK3N0YXRpYyBpbnQgbG9nX2ludmFsaWRfcHJvdG9fbWF4ID0gMjU1OworCitzdGF0aWMgc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKm5mX2N0X3N5c2N0bF9oZWFkZXI7CisKK3N0YXRpYyBjdGxfdGFibGUgbmZfY3Rfc3lzY3RsX3RhYmxlW10gPSB7CisJeworCQkuY3RsX25hbWUJPSBORVRfTkZfQ09OTlRSQUNLX01BWCwKKwkJLnByb2NuYW1lCT0gIm5mX2Nvbm50cmFja19tYXgiLAorCQkuZGF0YQkJPSAmbmZfY29ubnRyYWNrX21heCwKKwkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKKwkJLm1vZGUJCT0gMDY0NCwKKwkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjLAorCX0sCisJeworCQkuY3RsX25hbWUJPSBORVRfTkZfQ09OTlRSQUNLX0NPVU5ULAorCQkucHJvY25hbWUJPSAibmZfY29ubnRyYWNrX2NvdW50IiwKKwkJLmRhdGEJCT0gJm5mX2Nvbm50cmFja19jb3VudCwKKwkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKKwkJLm1vZGUJCT0gMDQ0NCwKKwkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjLAorCX0sCisJeworCQkuY3RsX25hbWUgICAgICAgPSBORVRfTkZfQ09OTlRSQUNLX0JVQ0tFVFMsCisJCS5wcm9jbmFtZSAgICAgICA9ICJuZl9jb25udHJhY2tfYnVja2V0cyIsCisJCS5kYXRhICAgICAgICAgICA9ICZuZl9jb25udHJhY2tfaHRhYmxlX3NpemUsCisJCS5tYXhsZW4gICAgICAgICA9IHNpemVvZih1bnNpZ25lZCBpbnQpLAorCQkubW9kZSAgICAgICAgICAgPSAwNDQ0LAorCQkucHJvY19oYW5kbGVyICAgPSAmcHJvY19kb2ludHZlYywKKwl9LAorCXsKKwkJLmN0bF9uYW1lCT0gTkVUX05GX0NPTk5UUkFDS19UQ1BfVElNRU9VVF9TWU5fU0VOVCwKKwkJLnByb2NuYW1lCT0gIm5mX2Nvbm50cmFja190Y3BfdGltZW91dF9zeW5fc2VudCIsCisJCS5kYXRhCQk9ICZuZl9jdF90Y3BfdGltZW91dF9zeW5fc2VudCwKKwkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQgaW50KSwKKwkJLm1vZGUJCT0gMDY0NCwKKwkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjX2ppZmZpZXMsCisJfSwKKwl7CisJCS5jdGxfbmFtZQk9IE5FVF9ORl9DT05OVFJBQ0tfVENQX1RJTUVPVVRfU1lOX1JFQ1YsCisJCS5wcm9jbmFtZQk9ICJuZl9jb25udHJhY2tfdGNwX3RpbWVvdXRfc3luX3JlY3YiLAorCQkuZGF0YQkJPSAmbmZfY3RfdGNwX3RpbWVvdXRfc3luX3JlY3YsCisJCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCisJCS5tb2RlCQk9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlY19qaWZmaWVzLAorCX0sCisJeworCQkuY3RsX25hbWUJPSBORVRfTkZfQ09OTlRSQUNLX1RDUF9USU1FT1VUX0VTVEFCTElTSEVELAorCQkucHJvY25hbWUJPSAibmZfY29ubnRyYWNrX3RjcF90aW1lb3V0X2VzdGFibGlzaGVkIiwKKwkJLmRhdGEJCT0gJm5mX2N0X3RjcF90aW1lb3V0X2VzdGFibGlzaGVkLAorCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBpbnQpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWNfamlmZmllcywKKwl9LAorCXsKKwkJLmN0bF9uYW1lCT0gTkVUX05GX0NPTk5UUkFDS19UQ1BfVElNRU9VVF9GSU5fV0FJVCwKKwkJLnByb2NuYW1lCT0gIm5mX2Nvbm50cmFja190Y3BfdGltZW91dF9maW5fd2FpdCIsCisJCS5kYXRhCQk9ICZuZl9jdF90Y3BfdGltZW91dF9maW5fd2FpdCwKKwkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQgaW50KSwKKwkJLm1vZGUJCT0gMDY0NCwKKwkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjX2ppZmZpZXMsCisJfSwKKwl7CisJCS5jdGxfbmFtZQk9IE5FVF9ORl9DT05OVFJBQ0tfVENQX1RJTUVPVVRfQ0xPU0VfV0FJVCwKKwkJLnByb2NuYW1lCT0gIm5mX2Nvbm50cmFja190Y3BfdGltZW91dF9jbG9zZV93YWl0IiwKKwkJLmRhdGEJCT0gJm5mX2N0X3RjcF90aW1lb3V0X2Nsb3NlX3dhaXQsCisJCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCisJCS5tb2RlCQk9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlY19qaWZmaWVzLAorCX0sCisJeworCQkuY3RsX25hbWUJPSBORVRfTkZfQ09OTlRSQUNLX1RDUF9USU1FT1VUX0xBU1RfQUNLLAorCQkucHJvY25hbWUJPSAibmZfY29ubnRyYWNrX3RjcF90aW1lb3V0X2xhc3RfYWNrIiwKKwkJLmRhdGEJCT0gJm5mX2N0X3RjcF90aW1lb3V0X2xhc3RfYWNrLAorCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBpbnQpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWNfamlmZmllcywKKwl9LAorCXsKKwkJLmN0bF9uYW1lCT0gTkVUX05GX0NPTk5UUkFDS19UQ1BfVElNRU9VVF9USU1FX1dBSVQsCisJCS5wcm9jbmFtZQk9ICJuZl9jb25udHJhY2tfdGNwX3RpbWVvdXRfdGltZV93YWl0IiwKKwkJLmRhdGEJCT0gJm5mX2N0X3RjcF90aW1lb3V0X3RpbWVfd2FpdCwKKwkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQgaW50KSwKKwkJLm1vZGUJCT0gMDY0NCwKKwkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjX2ppZmZpZXMsCisJfSwKKwl7CisJCS5jdGxfbmFtZQk9IE5FVF9ORl9DT05OVFJBQ0tfVENQX1RJTUVPVVRfQ0xPU0UsCisJCS5wcm9jbmFtZQk9ICJuZl9jb25udHJhY2tfdGNwX3RpbWVvdXRfY2xvc2UiLAorCQkuZGF0YQkJPSAmbmZfY3RfdGNwX3RpbWVvdXRfY2xvc2UsCisJCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCisJCS5tb2RlCQk9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlY19qaWZmaWVzLAorCX0sCisJeworCQkuY3RsX25hbWUJPSBORVRfTkZfQ09OTlRSQUNLX1VEUF9USU1FT1VULAorCQkucHJvY25hbWUJPSAibmZfY29ubnRyYWNrX3VkcF90aW1lb3V0IiwKKwkJLmRhdGEJCT0gJm5mX2N0X3VkcF90aW1lb3V0LAorCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBpbnQpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWNfamlmZmllcywKKwl9LAorCXsKKwkJLmN0bF9uYW1lCT0gTkVUX05GX0NPTk5UUkFDS19VRFBfVElNRU9VVF9TVFJFQU0sCisJCS5wcm9jbmFtZQk9ICJuZl9jb25udHJhY2tfdWRwX3RpbWVvdXRfc3RyZWFtIiwKKwkJLmRhdGEJCT0gJm5mX2N0X3VkcF90aW1lb3V0X3N0cmVhbSwKKwkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQgaW50KSwKKwkJLm1vZGUJCT0gMDY0NCwKKwkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjX2ppZmZpZXMsCisJfSwKKwl7CisJCS5jdGxfbmFtZQk9IE5FVF9ORl9DT05OVFJBQ0tfR0VORVJJQ19USU1FT1VULAorCQkucHJvY25hbWUJPSAibmZfY29ubnRyYWNrX2dlbmVyaWNfdGltZW91dCIsCisJCS5kYXRhCQk9ICZuZl9jdF9nZW5lcmljX3RpbWVvdXQsCisJCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCisJCS5tb2RlCQk9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlY19qaWZmaWVzLAorCX0sCisJeworCQkuY3RsX25hbWUJPSBORVRfTkZfQ09OTlRSQUNLX0xPR19JTlZBTElELAorCQkucHJvY25hbWUJPSAibmZfY29ubnRyYWNrX2xvZ19pbnZhbGlkIiwKKwkJLmRhdGEJCT0gJm5mX2N0X2xvZ19pbnZhbGlkLAorCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBpbnQpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWNfbWlubWF4LAorCQkuc3RyYXRlZ3kJPSAmc3lzY3RsX2ludHZlYywKKwkJLmV4dHJhMQkJPSAmbG9nX2ludmFsaWRfcHJvdG9fbWluLAorCQkuZXh0cmEyCQk9ICZsb2dfaW52YWxpZF9wcm90b19tYXgsCisJfSwKKwl7CisJCS5jdGxfbmFtZQk9IE5FVF9ORl9DT05OVFJBQ0tfVENQX1RJTUVPVVRfTUFYX1JFVFJBTlMsCisJCS5wcm9jbmFtZQk9ICJuZl9jb25udHJhY2tfdGNwX3RpbWVvdXRfbWF4X3JldHJhbnMiLAorCQkuZGF0YQkJPSAmbmZfY3RfdGNwX3RpbWVvdXRfbWF4X3JldHJhbnMsCisJCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCisJCS5tb2RlCQk9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlY19qaWZmaWVzLAorCX0sCisJeworCQkuY3RsX25hbWUJPSBORVRfTkZfQ09OTlRSQUNLX1RDUF9MT09TRSwKKwkJLnByb2NuYW1lCT0gIm5mX2Nvbm50cmFja190Y3BfbG9vc2UiLAorCQkuZGF0YQkJPSAmbmZfY3RfdGNwX2xvb3NlLAorCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBpbnQpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWMsCisJfSwKKwl7CisJCS5jdGxfbmFtZQk9IE5FVF9ORl9DT05OVFJBQ0tfVENQX0JFX0xJQkVSQUwsCisJCS5wcm9jbmFtZSAgICAgICA9ICJuZl9jb25udHJhY2tfdGNwX2JlX2xpYmVyYWwiLAorCQkuZGF0YSAgICAgICAgICAgPSAmbmZfY3RfdGNwX2JlX2xpYmVyYWwsCisJCS5tYXhsZW4gICAgICAgICA9IHNpemVvZih1bnNpZ25lZCBpbnQpLAorCQkubW9kZSAgICAgICAgICAgPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyICAgPSAmcHJvY19kb2ludHZlYywKKwl9LAorCXsKKwkJLmN0bF9uYW1lCT0gTkVUX05GX0NPTk5UUkFDS19UQ1BfTUFYX1JFVFJBTlMsCisJCS5wcm9jbmFtZQk9ICJuZl9jb25udHJhY2tfdGNwX21heF9yZXRyYW5zIiwKKwkJLmRhdGEJCT0gJm5mX2N0X3RjcF9tYXhfcmV0cmFucywKKwkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQgaW50KSwKKwkJLm1vZGUJCT0gMDY0NCwKKwkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjLAorCX0sCisKKwl7IC5jdGxfbmFtZSA9IDAgfQorfTsKKworI2RlZmluZSBORVRfTkZfQ09OTlRSQUNLX01BWCAyMDg5CisKK3N0YXRpYyBjdGxfdGFibGUgbmZfY3RfbmV0ZmlsdGVyX3RhYmxlW10gPSB7CisJeworCQkuY3RsX25hbWUJPSBORVRfTkVURklMVEVSLAorCQkucHJvY25hbWUJPSAibmV0ZmlsdGVyIiwKKwkJLm1vZGUJCT0gMDU1NSwKKwkJLmNoaWxkCQk9IG5mX2N0X3N5c2N0bF90YWJsZSwKKwl9LAorCXsKKwkJLmN0bF9uYW1lCT0gTkVUX05GX0NPTk5UUkFDS19NQVgsCisJCS5wcm9jbmFtZQk9ICJuZl9jb25udHJhY2tfbWF4IiwKKwkJLmRhdGEJCT0gJm5mX2Nvbm50cmFja19tYXgsCisJCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCisJCS5tb2RlCQk9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlYywKKwl9LAorCXsgLmN0bF9uYW1lID0gMCB9Cit9OworCitzdGF0aWMgY3RsX3RhYmxlIG5mX2N0X25ldF90YWJsZVtdID0geworCXsKKwkJLmN0bF9uYW1lCT0gQ1RMX05FVCwKKwkJLnByb2NuYW1lCT0gIm5ldCIsCisJCS5tb2RlCQk9IDA1NTUsCisJCS5jaGlsZAkJPSBuZl9jdF9uZXRmaWx0ZXJfdGFibGUsCisJfSwKKwl7IC5jdGxfbmFtZSA9IDAgfQorfTsKK0VYUE9SVF9TWU1CT0wobmZfY3RfbG9nX2ludmFsaWQpOworI2VuZGlmIC8qIENPTkZJR19TWVNDVEwgKi8KKworc3RhdGljIGludCBpbml0X29yX2NsZWFudXAoaW50IGluaXQpCit7CisjaWZkZWYgQ09ORklHX1BST0NfRlMKKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2MsICpwcm9jX2V4cCwgKnByb2Nfc3RhdDsKKyNlbmRpZgorCWludCByZXQgPSAwOworCisJaWYgKCFpbml0KSBnb3RvIGNsZWFudXA7CisKKwlyZXQgPSBuZl9jb25udHJhY2tfaW5pdCgpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGNsZWFudXBfbm90aGluZzsKKworI2lmZGVmIENPTkZJR19QUk9DX0ZTCisJcHJvYyA9IHByb2NfbmV0X2ZvcHNfY3JlYXRlKCJuZl9jb25udHJhY2siLCAwNDQwLCAmY3RfZmlsZV9vcHMpOworCWlmICghcHJvYykgZ290byBjbGVhbnVwX2luaXQ7CisKKwlwcm9jX2V4cCA9IHByb2NfbmV0X2ZvcHNfY3JlYXRlKCJuZl9jb25udHJhY2tfZXhwZWN0IiwgMDQ0MCwKKwkJCQkJJmV4cF9maWxlX29wcyk7CisJaWYgKCFwcm9jX2V4cCkgZ290byBjbGVhbnVwX3Byb2M7CisKKwlwcm9jX3N0YXQgPSBjcmVhdGVfcHJvY19lbnRyeSgibmZfY29ubnRyYWNrIiwgU19JUlVHTywgcHJvY19uZXRfc3RhdCk7CisJaWYgKCFwcm9jX3N0YXQpCisJCWdvdG8gY2xlYW51cF9wcm9jX2V4cDsKKworCXByb2Nfc3RhdC0+cHJvY19mb3BzID0gJmN0X2NwdV9zZXFfZm9wczsKKwlwcm9jX3N0YXQtPm93bmVyID0gVEhJU19NT0RVTEU7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfU1lTQ1RMCisJbmZfY3Rfc3lzY3RsX2hlYWRlciA9IHJlZ2lzdGVyX3N5c2N0bF90YWJsZShuZl9jdF9uZXRfdGFibGUsIDApOworCWlmIChuZl9jdF9zeXNjdGxfaGVhZGVyID09IE5VTEwpIHsKKwkJcHJpbnRrKCJuZl9jb25udHJhY2s6IGNhbid0IHJlZ2lzdGVyIHRvIHN5c2N0bC5cbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGNsZWFudXBfcHJvY19zdGF0OworCX0KKyNlbmRpZgorCisJcmV0dXJuIHJldDsKKworIGNsZWFudXA6CisjaWZkZWYgQ09ORklHX1NZU0NUTAorIAl1bnJlZ2lzdGVyX3N5c2N0bF90YWJsZShuZl9jdF9zeXNjdGxfaGVhZGVyKTsKKyBjbGVhbnVwX3Byb2Nfc3RhdDoKKyNlbmRpZgorI2lmZGVmIENPTkZJR19QUk9DX0ZTCisJcHJvY19uZXRfcmVtb3ZlKCJuZl9jb25udHJhY2tfc3RhdCIpOworIGNsZWFudXBfcHJvY19leHA6CisJcHJvY19uZXRfcmVtb3ZlKCJuZl9jb25udHJhY2tfZXhwZWN0Iik7CisgY2xlYW51cF9wcm9jOgorCXByb2NfbmV0X3JlbW92ZSgibmZfY29ubnRyYWNrIik7CisgY2xlYW51cF9pbml0OgorI2VuZGlmIC8qIENORklHX1BST0NfRlMgKi8KKwluZl9jb25udHJhY2tfY2xlYW51cCgpOworIGNsZWFudXBfbm90aGluZzoKKwlyZXR1cm4gcmV0OworfQorCitpbnQgbmZfY29ubnRyYWNrX2wzcHJvdG9fcmVnaXN0ZXIoc3RydWN0IG5mX2Nvbm50cmFja19sM3Byb3RvICpwcm90bykKK3sKKwlpbnQgcmV0ID0gMDsKKworCXdyaXRlX2xvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKKwlpZiAobmZfY3RfbDNwcm90b3NbcHJvdG8tPmwzcHJvdG9dICE9ICZuZl9jb25udHJhY2tfZ2VuZXJpY19sM3Byb3RvKSB7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBvdXQ7CisJfQorCW5mX2N0X2wzcHJvdG9zW3Byb3RvLT5sM3Byb3RvXSA9IHByb3RvOworb3V0OgorCXdyaXRlX3VubG9ja19iaCgmbmZfY29ubnRyYWNrX2xvY2spOworCisJcmV0dXJuIHJldDsKK30KKwordm9pZCBuZl9jb25udHJhY2tfbDNwcm90b191bnJlZ2lzdGVyKHN0cnVjdCBuZl9jb25udHJhY2tfbDNwcm90byAqcHJvdG8pCit7CisJd3JpdGVfbG9ja19iaCgmbmZfY29ubnRyYWNrX2xvY2spOworCW5mX2N0X2wzcHJvdG9zW3Byb3RvLT5sM3Byb3RvXSA9ICZuZl9jb25udHJhY2tfZ2VuZXJpY19sM3Byb3RvOworCXdyaXRlX3VubG9ja19iaCgmbmZfY29ubnRyYWNrX2xvY2spOworCQorCS8qIFNvbWVib2R5IGNvdWxkIGJlIHN0aWxsIGxvb2tpbmcgYXQgdGhlIHByb3RvIGluIGJoLiAqLworCXN5bmNocm9uaXplX25ldCgpOworCisJLyogUmVtb3ZlIGFsbCBjb250cmFjayBlbnRyaWVzIGZvciB0aGlzIHByb3RvY29sICovCisJbmZfY3RfaXRlcmF0ZV9jbGVhbnVwKGtpbGxfbDNwcm90bywgcHJvdG8pOworfQorCisvKiBGSVhNRTogQWxsb3cgTlVMTCBmdW5jdGlvbnMgYW5kIHN1YiBpbiBwb2ludGVycyB0byBnZW5lcmljIGZvcgorICAgdGhlbS4gLS1SUiAqLworaW50IG5mX2Nvbm50cmFja19wcm90b2NvbF9yZWdpc3RlcihzdHJ1Y3QgbmZfY29ubnRyYWNrX3Byb3RvY29sICpwcm90bykKK3sKKwlpbnQgcmV0ID0gMDsKKworcmV0cnk6CisJd3JpdGVfbG9ja19iaCgmbmZfY29ubnRyYWNrX2xvY2spOworCWlmIChuZl9jdF9wcm90b3NbcHJvdG8tPmwzcHJvdG9dKSB7CisJCWlmIChuZl9jdF9wcm90b3NbcHJvdG8tPmwzcHJvdG9dW3Byb3RvLT5wcm90b10KKwkJCQkhPSAmbmZfY29ubnRyYWNrX2dlbmVyaWNfcHJvdG9jb2wpIHsKKwkJCXJldCA9IC1FQlVTWTsKKwkJCWdvdG8gb3V0X3VubG9jazsKKwkJfQorCX0gZWxzZSB7CisJCS8qIGwzcHJvdG8gbWF5IGJlIGxvYWRlZCBsYXR0ZXIuICovCisJCXN0cnVjdCBuZl9jb25udHJhY2tfcHJvdG9jb2wgKipwcm90b19hcnJheTsKKwkJaW50IGk7CisKKwkJd3JpdGVfdW5sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7CisKKwkJcHJvdG9fYXJyYXkgPSAoc3RydWN0IG5mX2Nvbm50cmFja19wcm90b2NvbCAqKikKKwkJCQlrbWFsbG9jKE1BWF9ORl9DVF9QUk9UTyAqCisJCQkJCSBzaXplb2Yoc3RydWN0IG5mX2Nvbm50cmFja19wcm90b2NvbCAqKSwKKwkJCQkJR0ZQX0tFUk5FTCk7CisJCWlmIChwcm90b19hcnJheSA9PSBOVUxMKSB7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBvdXQ7CisJCX0KKwkJZm9yIChpID0gMDsgaSA8IE1BWF9ORl9DVF9QUk9UTzsgaSsrKQorCQkJcHJvdG9fYXJyYXlbaV0gPSAmbmZfY29ubnRyYWNrX2dlbmVyaWNfcHJvdG9jb2w7CisKKwkJd3JpdGVfbG9ja19iaCgmbmZfY29ubnRyYWNrX2xvY2spOworCQlpZiAobmZfY3RfcHJvdG9zW3Byb3RvLT5sM3Byb3RvXSkgeworCQkJLyogYmFkIHRpbWluZywgYnV0IG5vIHByb2JsZW0gKi8KKwkJCXdyaXRlX3VubG9ja19iaCgmbmZfY29ubnRyYWNrX2xvY2spOworCQkJa2ZyZWUocHJvdG9fYXJyYXkpOworCQl9IGVsc2UgeworCQkJbmZfY3RfcHJvdG9zW3Byb3RvLT5sM3Byb3RvXSA9IHByb3RvX2FycmF5OworCQkJd3JpdGVfdW5sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7CisJCX0KKworCQkvKgorCQkgKiBKdXN0IG9uY2UgYmVjYXVzZSBhcnJheSBpcyBuZXZlciBmcmVlZCB1bnRpbCB1bmxvYWRpbmcKKwkJICogbmZfY29ubnRyYWNrLmtvCisJCSAqLworCQlnb3RvIHJldHJ5OworCX0KKworCW5mX2N0X3Byb3Rvc1twcm90by0+bDNwcm90b11bcHJvdG8tPnByb3RvXSA9IHByb3RvOworCitvdXRfdW5sb2NrOgorCXdyaXRlX3VubG9ja19iaCgmbmZfY29ubnRyYWNrX2xvY2spOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgbmZfY29ubnRyYWNrX3Byb3RvY29sX3VucmVnaXN0ZXIoc3RydWN0IG5mX2Nvbm50cmFja19wcm90b2NvbCAqcHJvdG8pCit7CisJd3JpdGVfbG9ja19iaCgmbmZfY29ubnRyYWNrX2xvY2spOworCW5mX2N0X3Byb3Rvc1twcm90by0+bDNwcm90b11bcHJvdG8tPnByb3RvXQorCQk9ICZuZl9jb25udHJhY2tfZ2VuZXJpY19wcm90b2NvbDsKKwl3cml0ZV91bmxvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKKwkKKwkvKiBTb21lYm9keSBjb3VsZCBiZSBzdGlsbCBsb29raW5nIGF0IHRoZSBwcm90byBpbiBiaC4gKi8KKwlzeW5jaHJvbml6ZV9uZXQoKTsKKworCS8qIFJlbW92ZSBhbGwgY29udHJhY2sgZW50cmllcyBmb3IgdGhpcyBwcm90b2NvbCAqLworCW5mX2N0X2l0ZXJhdGVfY2xlYW51cChraWxsX3Byb3RvLCBwcm90byk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXQodm9pZCkKK3sKKwlyZXR1cm4gaW5pdF9vcl9jbGVhbnVwKDEpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZmluaSh2b2lkKQoreworCWluaXRfb3JfY2xlYW51cCgwKTsKK30KKworbW9kdWxlX2luaXQoaW5pdCk7Cittb2R1bGVfZXhpdChmaW5pKTsKKworLyogU29tZSBtb2R1bGVzIG5lZWQgdXMsIGJ1dCBkb24ndCBkZXBlbmQgZGlyZWN0bHkgb24gYW55IHN5bWJvbC4KKyAgIFRoZXkgc2hvdWxkIGNhbGwgdGhpcy4gKi8KK3ZvaWQgbmVlZF9uZl9jb25udHJhY2sodm9pZCkKK3sKK30KKworI2lmZGVmIENPTkZJR19ORl9DT05OVFJBQ0tfRVZFTlRTCitFWFBPUlRfU1lNQk9MX0dQTChuZl9jb25udHJhY2tfY2hhaW4pOworRVhQT1JUX1NZTUJPTF9HUEwobmZfY29ubnRyYWNrX2V4cGVjdF9jaGFpbik7CitFWFBPUlRfU1lNQk9MX0dQTChuZl9jb25udHJhY2tfcmVnaXN0ZXJfbm90aWZpZXIpOworRVhQT1JUX1NZTUJPTF9HUEwobmZfY29ubnRyYWNrX3VucmVnaXN0ZXJfbm90aWZpZXIpOworRVhQT1JUX1NZTUJPTF9HUEwoX19uZl9jdF9ldmVudF9jYWNoZV9pbml0KTsKK0VYUE9SVF9QRVJfQ1BVX1NZTUJPTF9HUEwobmZfY29ubnRyYWNrX2VjYWNoZSk7CitFWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9kZWxpdmVyX2NhY2hlZF9ldmVudHMpOworI2VuZGlmCitFWFBPUlRfU1lNQk9MKG5mX2Nvbm50cmFja19sM3Byb3RvX3JlZ2lzdGVyKTsKK0VYUE9SVF9TWU1CT0wobmZfY29ubnRyYWNrX2wzcHJvdG9fdW5yZWdpc3Rlcik7CitFWFBPUlRfU1lNQk9MKG5mX2Nvbm50cmFja19wcm90b2NvbF9yZWdpc3Rlcik7CitFWFBPUlRfU1lNQk9MKG5mX2Nvbm50cmFja19wcm90b2NvbF91bnJlZ2lzdGVyKTsKK0VYUE9SVF9TWU1CT0wobmZfY3RfaW52ZXJ0X3R1cGxlcHIpOworRVhQT1JUX1NZTUJPTChuZl9jb25udHJhY2tfYWx0ZXJfcmVwbHkpOworRVhQT1JUX1NZTUJPTChuZl9jb25udHJhY2tfZGVzdHJveWVkKTsKK0VYUE9SVF9TWU1CT0wobmVlZF9uZl9jb25udHJhY2spOworRVhQT1JUX1NZTUJPTChuZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKTsKK0VYUE9SVF9TWU1CT0wobmZfY29ubnRyYWNrX2hlbHBlcl91bnJlZ2lzdGVyKTsKK0VYUE9SVF9TWU1CT0wobmZfY3RfaXRlcmF0ZV9jbGVhbnVwKTsKK0VYUE9SVF9TWU1CT0woX19uZl9jdF9yZWZyZXNoX2FjY3QpOworRVhQT1JUX1NZTUJPTChuZl9jdF9wcm90b3MpOworRVhQT1JUX1NZTUJPTChuZl9jdF9maW5kX3Byb3RvKTsKK0VYUE9SVF9TWU1CT0wobmZfY3RfbDNwcm90b3MpOworRVhQT1JUX1NZTUJPTChuZl9jb25udHJhY2tfZXhwZWN0X2FsbG9jKTsKK0VYUE9SVF9TWU1CT0wobmZfY29ubnRyYWNrX2V4cGVjdF9wdXQpOworRVhQT1JUX1NZTUJPTChuZl9jb25udHJhY2tfZXhwZWN0X3JlbGF0ZWQpOworRVhQT1JUX1NZTUJPTChuZl9jb25udHJhY2tfdW5leHBlY3RfcmVsYXRlZCk7CitFWFBPUlRfU1lNQk9MKG5mX2Nvbm50cmFja190dXBsZV90YWtlbik7CitFWFBPUlRfU1lNQk9MKG5mX2Nvbm50cmFja19odGFibGVfc2l6ZSk7CitFWFBPUlRfU1lNQk9MKG5mX2Nvbm50cmFja19sb2NrKTsKK0VYUE9SVF9TWU1CT0wobmZfY29ubnRyYWNrX2hhc2gpOworRVhQT1JUX1NZTUJPTChuZl9jb25udHJhY2tfdW50cmFja2VkKTsKK0VYUE9SVF9TWU1CT0xfR1BMKG5mX2Nvbm50cmFja19maW5kX2dldCk7CisjaWZkZWYgQ09ORklHX0lQX05GX05BVF9ORUVERUQKK0VYUE9SVF9TWU1CT0wobmZfY29ubnRyYWNrX3RjcF91cGRhdGUpOworI2VuZGlmCitFWFBPUlRfU1lNQk9MKF9fbmZfY29ubnRyYWNrX2NvbmZpcm0pOworRVhQT1JUX1NZTUJPTChuZl9jdF9nZXRfdHVwbGUpOworRVhQT1JUX1NZTUJPTChuZl9jdF9pbnZlcnRfdHVwbGUpOworRVhQT1JUX1NZTUJPTChuZl9jb25udHJhY2tfaW4pOworRVhQT1JUX1NZTUJPTChfX25mX2Nvbm50cmFja19hdHRhY2gpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmsuYyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmMKaW5kZXggNGJjMjdhNi4uODNmNGM1MyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmsuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGluay5jCkBAIC0xMjgsNyArMTI4LDcgQEAKIAltZW1zZXQoTkZBX0RBVEEobmZhKSArIGF0dHJsZW4sIDAsIE5GQV9BTElHTihzaXplKSAtIHNpemUpOwogfQogCi1pbnQgbmZhdHRyX3BhcnNlKHN0cnVjdCBuZmF0dHIgKnRiW10sIGludCBtYXhhdHRyLCBzdHJ1Y3QgbmZhdHRyICpuZmEsIGludCBsZW4pCit2b2lkIG5mYXR0cl9wYXJzZShzdHJ1Y3QgbmZhdHRyICp0YltdLCBpbnQgbWF4YXR0ciwgc3RydWN0IG5mYXR0ciAqbmZhLCBpbnQgbGVuKQogewogCW1lbXNldCh0YiwgMCwgc2l6ZW9mKHN0cnVjdCBuZmF0dHIgKikgKiBtYXhhdHRyKTsKIApAQCAtMTM4LDggKzEzOCw2IEBACiAJCQl0YltmbGF2b3ItMV0gPSBuZmE7CiAJCW5mYSA9IE5GQV9ORVhUKG5mYSwgbGVuKTsKIAl9Ci0KLQlyZXR1cm4gMDsKIH0KIAogLyoqCkBAIC0yNDIsMTUgKzI0MCwxOCBAQAogCXNzID0gbmZuZXRsaW5rX2dldF9zdWJzeXModHlwZSk7CiAJaWYgKCFzcykgewogI2lmZGVmIENPTkZJR19LTU9ECi0JCS8qIGRvbid0IGNhbGwgbmZubF9zaHVubG9jaywgc2luY2UgaXQgd291bGQgcmVlbnRlcgotCQkgKiB3aXRoIGZ1cnRoZXIgcGFja2V0IHByb2Nlc3NpbmcgKi8KLQkJdXAoJm5mbmxfc2VtKTsKLQkJcmVxdWVzdF9tb2R1bGUoIm5mbmV0bGluay1zdWJzeXMtJWQiLCBORk5MX1NVQlNZU19JRCh0eXBlKSk7Ci0JCW5mbmxfc2hsb2NrKCk7Ci0JCXNzID0gbmZuZXRsaW5rX2dldF9zdWJzeXModHlwZSk7CisJCWlmIChjYXBfcmFpc2VkKE5FVExJTktfQ0Ioc2tiKS5lZmZfY2FwLCBDQVBfTkVUX0FETUlOKSkgeworCQkJLyogZG9uJ3QgY2FsbCBuZm5sX3NodW5sb2NrLCBzaW5jZSBpdCB3b3VsZCByZWVudGVyCisJCQkgKiB3aXRoIGZ1cnRoZXIgcGFja2V0IHByb2Nlc3NpbmcgKi8KKwkJCXVwKCZuZm5sX3NlbSk7CisJCQlyZXF1ZXN0X21vZHVsZSgibmZuZXRsaW5rLXN1YnN5cy0lZCIsCisJCQkJCU5GTkxfU1VCU1lTX0lEKHR5cGUpKTsKKwkJCW5mbmxfc2hsb2NrKCk7CisJCQlzcyA9IG5mbmV0bGlua19nZXRfc3Vic3lzKHR5cGUpOworCQl9CiAJCWlmICghc3MpCiAjZW5kaWYKLQkJZ290byBlcnJfaW52YWw7CisJCQlnb3RvIGVycl9pbnZhbDsKIAl9CiAKIAluYyA9IG5mbmV0bGlua19maW5kX2NsaWVudCh0eXBlLCBzcyk7CmRpZmYgLS1naXQgYS9uZXQvbmV0bGluay9NYWtlZmlsZSBiL25ldC9uZXRsaW5rL01ha2VmaWxlCmluZGV4IDM5ZDljMmQuLmUzNTg5YzIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRsaW5rL01ha2VmaWxlCisrKyBiL25ldC9uZXRsaW5rL01ha2VmaWxlCkBAIC0yLDQgKzIsNCBAQAogIyBNYWtlZmlsZSBmb3IgdGhlIG5ldGxpbmsgZHJpdmVyLgogIwogCi1vYmoteSAgCQkJCTo9IGFmX25ldGxpbmsubworb2JqLXkgIAkJCQk6PSBhZl9uZXRsaW5rLm8gYXR0ci5vIGdlbmV0bGluay5vCmRpZmYgLS1naXQgYS9uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMgYi9uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMKaW5kZXggNWNhMjgzNS4uOGMzOGVlNiAxMDA2NDQKLS0tIGEvbmV0L25ldGxpbmsvYWZfbmV0bGluay5jCisrKyBiL25ldC9uZXRsaW5rL2FmX25ldGxpbmsuYwpAQCAtNTgsNiArNTgsNyBAQAogCiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KICNpbmNsdWRlIDxuZXQvc2NtLmg+CisjaW5jbHVkZSA8bmV0L25ldGxpbmsuaD4KIAogI2RlZmluZSBOcHJpbnRrKGEuLi4pCiAjZGVmaW5lIE5MR1JQU1ooeCkJKEFMSUdOKHgsIHNpemVvZih1bnNpZ25lZCBsb25nKSAqIDgpIC8gOCkKQEAgLTQyNyw3ICs0MjgsOCBAQAogCiAJc3Bpbl9sb2NrKCZubGstPmNiX2xvY2spOwogCWlmIChubGstPmNiKSB7Ci0JCW5say0+Y2ItPmRvbmUobmxrLT5jYik7CisJCWlmIChubGstPmNiLT5kb25lKQorCQkJbmxrLT5jYi0+ZG9uZShubGstPmNiKTsKIAkJbmV0bGlua19kZXN0cm95X2NhbGxiYWNrKG5say0+Y2IpOwogCQlubGstPmNiID0gTlVMTDsKIAl9CkBAIC0xMzIyLDcgKzEzMjQsOCBAQAogCXNrYl9xdWV1ZV90YWlsKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSwgc2tiKTsKIAlzay0+c2tfZGF0YV9yZWFkeShzaywgc2tiLT5sZW4pOwogCi0JY2ItPmRvbmUoY2IpOworCWlmIChjYi0+ZG9uZSkKKwkJY2ItPmRvbmUoY2IpOwogCW5say0+Y2IgPSBOVUxMOwogCXNwaW5fdW5sb2NrKCZubGstPmNiX2xvY2spOwogCkBAIC0xNDA5LDYgKzE0MTIsOTQgQEAKIAluZXRsaW5rX3VuaWNhc3QoaW5fc2tiLT5zaywgc2tiLCBORVRMSU5LX0NCKGluX3NrYikucGlkLCBNU0dfRE9OVFdBSVQpOwogfQogCitzdGF0aWMgaW50IG5ldGxpbmtfcmN2X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKCpjYikoc3RydWN0IHNrX2J1ZmYgKiwKKwkJCQkJCSAgICAgc3RydWN0IG5sbXNnaGRyICosIGludCAqKSkKK3sKKwl1bnNpZ25lZCBpbnQgdG90YWxfbGVuOworCXN0cnVjdCBubG1zZ2hkciAqbmxoOworCWludCBlcnI7CisKKwl3aGlsZSAoc2tiLT5sZW4gPj0gbmxtc2dfdG90YWxfc2l6ZSgwKSkgeworCQlubGggPSAoc3RydWN0IG5sbXNnaGRyICopIHNrYi0+ZGF0YTsKKworCQlpZiAoc2tiLT5sZW4gPCBubGgtPm5sbXNnX2xlbikKKwkJCXJldHVybiAwOworCisJCXRvdGFsX2xlbiA9IG1pbihOTE1TR19BTElHTihubGgtPm5sbXNnX2xlbiksIHNrYi0+bGVuKTsKKworCQlpZiAoY2Ioc2tiLCBubGgsICZlcnIpIDwgMCkgeworCQkJLyogTm90IGFuIGVycm9yLCBidXQgd2UgaGF2ZSB0byBpbnRlcnJ1cHQgcHJvY2Vzc2luZworCQkJICogaGVyZS4gTm90ZTogdGhhdCBpbiB0aGlzIGNhc2Ugd2UgZG8gbm90IHB1bGwKKwkJCSAqIG1lc3NhZ2UgZnJvbSBza2IsIGl0IHdpbGwgYmUgcHJvY2Vzc2VkIGxhdGVyLgorCQkJICovCisJCQlpZiAoZXJyID09IDApCisJCQkJcmV0dXJuIC0xOworCQkJbmV0bGlua19hY2soc2tiLCBubGgsIGVycik7CisJCX0gZWxzZSBpZiAobmxoLT5ubG1zZ19mbGFncyAmIE5MTV9GX0FDSykKKwkJCW5ldGxpbmtfYWNrKHNrYiwgbmxoLCAwKTsKKworCQlza2JfcHVsbChza2IsIHRvdGFsX2xlbik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogbmVsaW5rX3J1bl9xdWV1ZSAtIFByb2Nlc3MgbmV0bGluayByZWNlaXZlIHF1ZXVlLgorICogQHNrOiBOZXRsaW5rIHNvY2tldCBjb250YWluaW5nIHRoZSBxdWV1ZQorICogQHFsZW46IFBsYWNlIHRvIHN0b3JlIHF1ZXVlIGxlbmd0aCB1cG9uIGVudHJ5CisgKiBAY2I6IENhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgZm9yIGVhY2ggbmV0bGluayBtZXNzYWdlIGZvdW5kCisgKgorICogUHJvY2Vzc2VzIGFzIG11Y2ggYXMgdGhlcmUgd2FzIGluIHRoZSBxdWV1ZSB1cG9uIGVudHJ5IGFuZCBpbnZva2VzCisgKiBhIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBlYWNoIG5ldGxpbmsgbWVzc2FnZSBmb3VuZC4gVGhlIGNhbGxiYWNrCisgKiBmdW5jdGlvbiBtYXkgcmVmdXNlIGEgbWVzc2FnZSBieSByZXR1cm5pbmcgYSBuZWdhdGl2ZSBlcnJvciBjb2RlCisgKiBidXQgc2V0dGluZyB0aGUgZXJyb3IgcG9pbnRlciB0byAwIGluIHdoaWNoIGNhc2UgdGhpcyBmdW5jdGlvbgorICogcmV0dXJucyB3aXRoIGEgcWxlbiAhPSAwLgorICoKKyAqIHFsZW4gbXVzdCBiZSBpbml0aWFsaXplZCB0byAwIGJlZm9yZSB0aGUgaW5pdGlhbCBlbnRyeSwgYWZ0ZXJ3YXJkcworICogdGhlIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgcmVwZWF0ZWRseSB1bnRpbCBxbGVuIHJlYWNoZXMgMC4KKyAqLwordm9pZCBuZXRsaW5rX3J1bl9xdWV1ZShzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCAqcWxlbiwKKwkJICAgICAgIGludCAoKmNiKShzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3Qgbmxtc2doZHIgKiwgaW50ICopKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlpZiAoISpxbGVuIHx8ICpxbGVuID4gc2tiX3F1ZXVlX2xlbigmc2stPnNrX3JlY2VpdmVfcXVldWUpKQorCQkqcWxlbiA9IHNrYl9xdWV1ZV9sZW4oJnNrLT5za19yZWNlaXZlX3F1ZXVlKTsKKworCWZvciAoOyAqcWxlbjsgKCpxbGVuKS0tKSB7CisJCXNrYiA9IHNrYl9kZXF1ZXVlKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSk7CisJCWlmIChuZXRsaW5rX3Jjdl9za2Ioc2tiLCBjYikpIHsKKwkJCWlmIChza2ItPmxlbikKKwkJCQlza2JfcXVldWVfaGVhZCgmc2stPnNrX3JlY2VpdmVfcXVldWUsIHNrYik7CisJCQllbHNlIHsKKwkJCQlrZnJlZV9za2Ioc2tiKTsKKwkJCQkoKnFsZW4pLS07CisJCQl9CisJCQlicmVhazsKKwkJfQorCisJCWtmcmVlX3NrYihza2IpOworCX0KK30KKworLyoqCisgKiBuZXRsaW5rX3F1ZXVlX3NraXAgLSBTa2lwIG5ldGxpbmsgbWVzc2FnZSB3aGlsZSBwcm9jZXNzaW5nIHF1ZXVlLgorICogQG5saDogTmV0bGluayBtZXNzYWdlIHRvIGJlIHNraXBwZWQKKyAqIEBza2I6IFNvY2tldCBidWZmZXIgY29udGFpbmluZyB0aGUgbmV0bGluayBtZXNzYWdlcy4KKyAqCisgKiBQdWxscyB0aGUgZ2l2ZW4gbmV0bGluayBtZXNzYWdlIG9mZiB0aGUgc29ja2V0IGJ1ZmZlciBzbyB0aGUgbmV4dAorICogY2FsbCB0byBuZXRsaW5rX3F1ZXVlX3J1bigpIHdpbGwgbm90IHJlY29uc2lkZXIgdGhlIG1lc3NhZ2UuCisgKi8KK3ZvaWQgbmV0bGlua19xdWV1ZV9za2lwKHN0cnVjdCBubG1zZ2hkciAqbmxoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWludCBtc2dsZW4gPSBOTE1TR19BTElHTihubGgtPm5sbXNnX2xlbik7CisKKwlpZiAobXNnbGVuID4gc2tiLT5sZW4pCisJCW1zZ2xlbiA9IHNrYi0+bGVuOworCisJc2tiX3B1bGwoc2tiLCBtc2dsZW4pOworfQogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIHN0cnVjdCBubF9zZXFfaXRlciB7CkBAIC0xNjU3LDYgKzE3NDgsOCBAQAogY29yZV9pbml0Y2FsbChuZXRsaW5rX3Byb3RvX2luaXQpOwogCiBFWFBPUlRfU1lNQk9MKG5ldGxpbmtfYWNrKTsKK0VYUE9SVF9TWU1CT0wobmV0bGlua19ydW5fcXVldWUpOworRVhQT1JUX1NZTUJPTChuZXRsaW5rX3F1ZXVlX3NraXApOwogRVhQT1JUX1NZTUJPTChuZXRsaW5rX2Jyb2FkY2FzdCk7CiBFWFBPUlRfU1lNQk9MKG5ldGxpbmtfZHVtcF9zdGFydCk7CiBFWFBPUlRfU1lNQk9MKG5ldGxpbmtfa2VybmVsX2NyZWF0ZSk7CmRpZmYgLS1naXQgYS9uZXQvbmV0bGluay9hdHRyLmMgYi9uZXQvbmV0bGluay9hdHRyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZmZWY0YQotLS0gL2Rldi9udWxsCisrKyBiL25ldC9uZXRsaW5rL2F0dHIuYwpAQCAtMCwwICsxLDMyOCBAQAorLyoKKyAqIE5FVExJTksgICAgICBOZXRsaW5rIGF0dHJpYnV0ZXMKKyAqCisgKiAJCUF1dGhvcnM6CVRob21hcyBHcmFmIDx0Z3JhZkBzdXVnLmNoPgorICogCQkJCUFsZXhleSBLdXpuZXRzb3YgPGt1em5ldEBtczIuaW5yLmFjLnJ1PgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPG5ldC9uZXRsaW5rLmg+CisKK3N0YXRpYyB1MTYgbmxhX2F0dHJfbWlubGVuW05MQV9UWVBFX01BWCsxXSBfX3JlYWRfbW9zdGx5ID0geworCVtOTEFfVThdCT0gc2l6ZW9mKHU4KSwKKwlbTkxBX1UxNl0JPSBzaXplb2YodTE2KSwKKwlbTkxBX1UzMl0JPSBzaXplb2YodTMyKSwKKwlbTkxBX1U2NF0JPSBzaXplb2YodTY0KSwKKwlbTkxBX1NUUklOR10JPSAxLAorCVtOTEFfTkVTVEVEXQk9IE5MQV9IRFJMRU4sCit9OworCitzdGF0aWMgaW50IHZhbGlkYXRlX25sYShzdHJ1Y3QgbmxhdHRyICpubGEsIGludCBtYXh0eXBlLAorCQkJc3RydWN0IG5sYV9wb2xpY3kgKnBvbGljeSkKK3sKKwlzdHJ1Y3QgbmxhX3BvbGljeSAqcHQ7CisJaW50IG1pbmxlbiA9IDA7CisKKwlpZiAobmxhLT5ubGFfdHlwZSA8PSAwIHx8IG5sYS0+bmxhX3R5cGUgPiBtYXh0eXBlKQorCQlyZXR1cm4gMDsKKworCXB0ID0gJnBvbGljeVtubGEtPm5sYV90eXBlXTsKKworCUJVR19PTihwdC0+dHlwZSA+IE5MQV9UWVBFX01BWCk7CisKKwlpZiAocHQtPm1pbmxlbikKKwkJbWlubGVuID0gcHQtPm1pbmxlbjsKKwllbHNlIGlmIChwdC0+dHlwZSAhPSBOTEFfVU5TUEVDKQorCQltaW5sZW4gPSBubGFfYXR0cl9taW5sZW5bcHQtPnR5cGVdOworCisJaWYgKHB0LT50eXBlID09IE5MQV9GTEFHICYmIG5sYV9sZW4obmxhKSA+IDApCisJCXJldHVybiAtRVJBTkdFOworCisJaWYgKG5sYV9sZW4obmxhKSA8IG1pbmxlbikKKwkJcmV0dXJuIC1FUkFOR0U7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBubGFfdmFsaWRhdGUgLSBWYWxpZGF0ZSBhIHN0cmVhbSBvZiBhdHRyaWJ1dGVzCisgKiBAaGVhZDogaGVhZCBvZiBhdHRyaWJ1dGUgc3RyZWFtCisgKiBAbGVuOiBsZW5ndGggb2YgYXR0cmlidXRlIHN0cmVhbQorICogQG1heHR5cGU6IG1heGltdW0gYXR0cmlidXRlIHR5cGUgdG8gYmUgZXhwZWN0ZWQKKyAqIEBwb2xpY3k6IHZhbGlkYXRpb24gcG9saWN5CisgKgorICogVmFsaWRhdGVzIGFsbCBhdHRyaWJ1dGVzIGluIHRoZSBzcGVjaWZpZWQgYXR0cmlidXRlIHN0cmVhbSBhZ2FpbnN0IHRoZQorICogc3BlY2lmaWVkIHBvbGljeS4gQXR0cmlidXRlcyB3aXRoIGEgdHlwZSBleGNlZWRpbmcgbWF4dHlwZSB3aWxsIGJlCisgKiBpZ25vcmVkLiBTZWUgZG9jdW1lbmF0aW9uIG9mIHN0cnVjdCBubGFfcG9saWN5IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlLgorICovCitpbnQgbmxhX3ZhbGlkYXRlKHN0cnVjdCBubGF0dHIgKmhlYWQsIGludCBsZW4sIGludCBtYXh0eXBlLAorCQkgc3RydWN0IG5sYV9wb2xpY3kgKnBvbGljeSkKK3sKKwlzdHJ1Y3QgbmxhdHRyICpubGE7CisJaW50IHJlbSwgZXJyOworCisJbmxhX2Zvcl9lYWNoX2F0dHIobmxhLCBoZWFkLCBsZW4sIHJlbSkgeworCQllcnIgPSB2YWxpZGF0ZV9ubGEobmxhLCBtYXh0eXBlLCBwb2xpY3kpOworCQlpZiAoZXJyIDwgMCkKKwkJCWdvdG8gZXJyb3V0OworCX0KKworCWVyciA9IDA7CitlcnJvdXQ6CisJcmV0dXJuIGVycjsKK30KKworLyoqCisgKiBubGFfcGFyc2UgLSBQYXJzZSBhIHN0cmVhbSBvZiBhdHRyaWJ1dGVzIGludG8gYSB0YiBidWZmZXIKKyAqIEB0YjogZGVzdGluYXRpb24gYXJyYXkgd2l0aCBtYXh0eXBlKzEgZWxlbWVudHMKKyAqIEBtYXh0eXBlOiBtYXhpbXVtIGF0dHJpYnV0ZSB0eXBlIHRvIGJlIGV4cGVjdGVkCisgKiBAaGVhZDogaGVhZCBvZiBhdHRyaWJ1dGUgc3RyZWFtCisgKiBAbGVuOiBsZW5ndGggb2YgYXR0cmlidXRlIHN0cmVhbQorICoKKyAqIFBhcnNlcyBhIHN0cmVhbSBvZiBhdHRyaWJ1dGVzIGFuZCBzdG9yZXMgYSBwb2ludGVyIHRvIGVhY2ggYXR0cmlidXRlIGluCisgKiB0aGUgdGIgYXJyYXkgYWNjZXNzYWJsZSB2aWEgdGhlIGF0dHJpYnV0ZSB0eXBlLiBBdHRyaWJ1dGVzIHdpdGggYSB0eXBlCisgKiBleGNlZWRpbmcgbWF4dHlwZSB3aWxsIGJlIHNpbGVudGx5IGlnbm9yZWQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5CisgKiByZWFzb25zLiBwb2xpY3kgbWF5IGJlIHNldCB0byBOVUxMIGlmIG5vIHZhbGlkYXRpb24gaXMgcmVxdWlyZWQuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlLgorICovCitpbnQgbmxhX3BhcnNlKHN0cnVjdCBubGF0dHIgKnRiW10sIGludCBtYXh0eXBlLCBzdHJ1Y3QgbmxhdHRyICpoZWFkLCBpbnQgbGVuLAorCSAgICAgIHN0cnVjdCBubGFfcG9saWN5ICpwb2xpY3kpCit7CisJc3RydWN0IG5sYXR0ciAqbmxhOworCWludCByZW0sIGVycjsKKworCW1lbXNldCh0YiwgMCwgc2l6ZW9mKHN0cnVjdCBubGF0dHIgKikgKiAobWF4dHlwZSArIDEpKTsKKworCW5sYV9mb3JfZWFjaF9hdHRyKG5sYSwgaGVhZCwgbGVuLCByZW0pIHsKKwkJdTE2IHR5cGUgPSBubGEtPm5sYV90eXBlOworCisJCWlmICh0eXBlID4gMCAmJiB0eXBlIDw9IG1heHR5cGUpIHsKKwkJCWlmIChwb2xpY3kpIHsKKwkJCQllcnIgPSB2YWxpZGF0ZV9ubGEobmxhLCBtYXh0eXBlLCBwb2xpY3kpOworCQkJCWlmIChlcnIgPCAwKQorCQkJCQlnb3RvIGVycm91dDsKKwkJCX0KKworCQkJdGJbdHlwZV0gPSBubGE7CisJCX0KKwl9CisKKwlpZiAodW5saWtlbHkocmVtID4gMCkpCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIm5ldGxpbms6ICVkIGJ5dGVzIGxlZnRvdmVyIGFmdGVyIHBhcnNpbmcgIgorCQkgICAgICAgImF0dHJpYnV0ZXMuXG4iLCByZW0pOworCisJZXJyID0gMDsKK2Vycm91dDoKKwlyZXR1cm4gZXJyOworfQorCisvKioKKyAqIG5sYV9maW5kIC0gRmluZCBhIHNwZWNpZmljIGF0dHJpYnV0ZSBpbiBhIHN0cmVhbSBvZiBhdHRyaWJ1dGVzCisgKiBAaGVhZDogaGVhZCBvZiBhdHRyaWJ1dGUgc3RyZWFtCisgKiBAbGVuOiBsZW5ndGggb2YgYXR0cmlidXRlIHN0cmVhbQorICogQGF0dHJ0eXBlOiB0eXBlIG9mIGF0dHJpYnV0ZSB0byBsb29rIGZvcgorICoKKyAqIFJldHVybnMgdGhlIGZpcnN0IGF0dHJpYnV0ZSBpbiB0aGUgc3RyZWFtIG1hdGNoaW5nIHRoZSBzcGVjaWZpZWQgdHlwZS4KKyAqLworc3RydWN0IG5sYXR0ciAqbmxhX2ZpbmQoc3RydWN0IG5sYXR0ciAqaGVhZCwgaW50IGxlbiwgaW50IGF0dHJ0eXBlKQoreworCXN0cnVjdCBubGF0dHIgKm5sYTsKKwlpbnQgcmVtOworCisJbmxhX2Zvcl9lYWNoX2F0dHIobmxhLCBoZWFkLCBsZW4sIHJlbSkKKwkJaWYgKG5sYS0+bmxhX3R5cGUgPT0gYXR0cnR5cGUpCisJCQlyZXR1cm4gbmxhOworCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogbmxhX3N0cmxjcHkgLSBDb3B5IHN0cmluZyBhdHRyaWJ1dGUgcGF5bG9hZCBpbnRvIGEgc2l6ZWQgYnVmZmVyCisgKiBAZHN0OiB3aGVyZSB0byBjb3B5IHRoZSBzdHJpbmcgdG8KKyAqIEBzcmM6IGF0dHJpYnV0ZSB0byBjb3B5IHRoZSBzdHJpbmcgZnJvbQorICogQGRzdHNpemU6IHNpemUgb2YgZGVzdGluYXRpb24gYnVmZmVyCisgKgorICogQ29waWVzIGF0IG1vc3QgZHN0c2l6ZSAtIDEgYnl0ZXMgaW50byB0aGUgZGVzdGluYXRpb24gYnVmZmVyLgorICogVGhlIHJlc3VsdCBpcyBhbHdheXMgYSB2YWxpZCBOVUwtdGVybWluYXRlZCBzdHJpbmcuIFVubGlrZQorICogc3RybGNweSB0aGUgZGVzdGluYXRpb24gYnVmZmVyIGlzIGFsd2F5cyBwYWRkZWQgb3V0LgorICoKKyAqIFJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgc291cmNlIGJ1ZmZlci4KKyAqLworc2l6ZV90IG5sYV9zdHJsY3B5KGNoYXIgKmRzdCwgY29uc3Qgc3RydWN0IG5sYXR0ciAqbmxhLCBzaXplX3QgZHN0c2l6ZSkKK3sKKwlzaXplX3Qgc3JjbGVuID0gbmxhX2xlbihubGEpOworCWNoYXIgKnNyYyA9IG5sYV9kYXRhKG5sYSk7CisKKwlpZiAoc3JjbGVuID4gMCAmJiBzcmNbc3JjbGVuIC0gMV0gPT0gJ1wwJykKKwkJc3JjbGVuLS07CisKKwlpZiAoZHN0c2l6ZSA+IDApIHsKKwkJc2l6ZV90IGxlbiA9IChzcmNsZW4gPj0gZHN0c2l6ZSkgPyBkc3RzaXplIC0gMSA6IHNyY2xlbjsKKworCQltZW1zZXQoZHN0LCAwLCBkc3RzaXplKTsKKwkJbWVtY3B5KGRzdCwgc3JjLCBsZW4pOworCX0KKworCXJldHVybiBzcmNsZW47Cit9CisKKy8qKgorICogbmxhX21lbWNweSAtIENvcHkgYSBuZXRsaW5rIGF0dHJpYnV0ZSBpbnRvIGFub3RoZXIgbWVtb3J5IGFyZWEKKyAqIEBkZXN0OiB3aGVyZSB0byBjb3B5IHRvIG1lbWNweQorICogQHNyYzogbmV0bGluayBhdHRyaWJ1dGUgdG8gY29weSBmcm9tCisgKiBAY291bnQ6IHNpemUgb2YgdGhlIGRlc3RpbmF0aW9uIGFyZWEKKyAqCisgKiBOb3RlOiBUaGUgbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCBpcyBsaW1pdGVkIGJ5IHRoZSBsZW5ndGggb2YKKyAqICAgICAgIGF0dHJpYnV0ZSdzIHBheWxvYWQuIG1lbWNweQorICoKKyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBjb3BpZWQuCisgKi8KK2ludCBubGFfbWVtY3B5KHZvaWQgKmRlc3QsIHN0cnVjdCBubGF0dHIgKnNyYywgaW50IGNvdW50KQoreworCWludCBtaW5sZW4gPSBtaW5fdChpbnQsIGNvdW50LCBubGFfbGVuKHNyYykpOworCisJbWVtY3B5KGRlc3QsIG5sYV9kYXRhKHNyYyksIG1pbmxlbik7CisKKwlyZXR1cm4gbWlubGVuOworfQorCisvKioKKyAqIG5sYV9tZW1jbXAgLSBDb21wYXJlIGFuIGF0dHJpYnV0ZSB3aXRoIHNpemVkIG1lbW9yeSBhcmVhCisgKiBAbmxhOiBuZXRsaW5rIGF0dHJpYnV0ZQorICogQGRhdGE6IG1lbW9yeSBhcmVhCisgKiBAc2l6ZTogc2l6ZSBvZiBtZW1vcnkgYXJlYQorICovCitpbnQgbmxhX21lbWNtcChjb25zdCBzdHJ1Y3QgbmxhdHRyICpubGEsIGNvbnN0IHZvaWQgKmRhdGEsCisJCQkgICAgIHNpemVfdCBzaXplKQoreworCWludCBkID0gbmxhX2xlbihubGEpIC0gc2l6ZTsKKworCWlmIChkID09IDApCisJCWQgPSBtZW1jbXAobmxhX2RhdGEobmxhKSwgZGF0YSwgc2l6ZSk7CisKKwlyZXR1cm4gZDsKK30KKworLyoqCisgKiBubGFfc3RyY21wIC0gQ29tcGFyZSBhIHN0cmluZyBhdHRyaWJ1dGUgYWdhaW5zdCBhIHN0cmluZworICogQG5sYTogbmV0bGluayBzdHJpbmcgYXR0cmlidXRlCisgKiBAc3RyOiBhbm90aGVyIHN0cmluZworICovCitpbnQgbmxhX3N0cmNtcChjb25zdCBzdHJ1Y3QgbmxhdHRyICpubGEsIGNvbnN0IGNoYXIgKnN0cikKK3sKKwlpbnQgbGVuID0gc3RybGVuKHN0cikgKyAxOworCWludCBkID0gbmxhX2xlbihubGEpIC0gbGVuOworCisJaWYgKGQgPT0gMCkKKwkJZCA9IG1lbWNtcChubGFfZGF0YShubGEpLCBzdHIsIGxlbik7CisKKwlyZXR1cm4gZDsKK30KKworLyoqCisgKiBfX25sYV9yZXNlcnZlIC0gcmVzZXJ2ZSByb29tIGZvciBhdHRyaWJ1dGUgb24gdGhlIHNrYgorICogQHNrYjogc29ja2V0IGJ1ZmZlciB0byByZXNlcnZlIHJvb20gb24KKyAqIEBhdHRydHlwZTogYXR0cmlidXRlIHR5cGUKKyAqIEBhdHRybGVuOiBsZW5ndGggb2YgYXR0cmlidXRlIHBheWxvYWQKKyAqCisgKiBBZGRzIGEgbmV0bGluayBhdHRyaWJ1dGUgaGVhZGVyIHRvIGEgc29ja2V0IGJ1ZmZlciBhbmQgcmVzZXJ2ZXMKKyAqIHJvb20gZm9yIHRoZSBwYXlsb2FkIGJ1dCBkb2VzIG5vdCBjb3B5IGl0LgorICoKKyAqIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgdG8gZW5zdXJlIHRoYXQgdGhlIHNrYiBwcm92aWRlcyBlbm91Z2gKKyAqIHRhaWxyb29tIGZvciB0aGUgYXR0cmlidXRlIGhlYWRlciBhbmQgcGF5bG9hZC4KKyAqLworc3RydWN0IG5sYXR0ciAqX19ubGFfcmVzZXJ2ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYXR0cnR5cGUsIGludCBhdHRybGVuKQoreworCXN0cnVjdCBubGF0dHIgKm5sYTsKKworCW5sYSA9IChzdHJ1Y3QgbmxhdHRyICopIHNrYl9wdXQoc2tiLCBubGFfdG90YWxfc2l6ZShhdHRybGVuKSk7CisJbmxhLT5ubGFfdHlwZSA9IGF0dHJ0eXBlOworCW5sYS0+bmxhX2xlbiA9IG5sYV9hdHRyX3NpemUoYXR0cmxlbik7CisKKwltZW1zZXQoKHVuc2lnbmVkIGNoYXIgKikgbmxhICsgbmxhLT5ubGFfbGVuLCAwLCBubGFfcGFkbGVuKGF0dHJsZW4pKTsKKworCXJldHVybiBubGE7Cit9CisKKy8qKgorICogbmxhX3Jlc2VydmUgLSByZXNlcnZlIHJvb20gZm9yIGF0dHJpYnV0ZSBvbiB0aGUgc2tiCisgKiBAc2tiOiBzb2NrZXQgYnVmZmVyIHRvIHJlc2VydmUgcm9vbSBvbgorICogQGF0dHJ0eXBlOiBhdHRyaWJ1dGUgdHlwZQorICogQGF0dHJsZW46IGxlbmd0aCBvZiBhdHRyaWJ1dGUgcGF5bG9hZAorICoKKyAqIEFkZHMgYSBuZXRsaW5rIGF0dHJpYnV0ZSBoZWFkZXIgdG8gYSBzb2NrZXQgYnVmZmVyIGFuZCByZXNlcnZlcworICogcm9vbSBmb3IgdGhlIHBheWxvYWQgYnV0IGRvZXMgbm90IGNvcHkgaXQuCisgKgorICogUmV0dXJucyBOVUxMIGlmIHRoZSB0YWlscm9vbSBvZiB0aGUgc2tiIGlzIGluc3VmZmljaWVudCB0byBzdG9yZQorICogdGhlIGF0dHJpYnV0ZSBoZWFkZXIgYW5kIHBheWxvYWQuCisgKi8KK3N0cnVjdCBubGF0dHIgKm5sYV9yZXNlcnZlKHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRydHlwZSwgaW50IGF0dHJsZW4pCit7CisJaWYgKHVubGlrZWx5KHNrYl90YWlscm9vbShza2IpIDwgbmxhX3RvdGFsX3NpemUoYXR0cmxlbikpKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBfX25sYV9yZXNlcnZlKHNrYiwgYXR0cnR5cGUsIGF0dHJsZW4pOworfQorCisvKioKKyAqIF9fbmxhX3B1dCAtIEFkZCBhIG5ldGxpbmsgYXR0cmlidXRlIHRvIGEgc29ja2V0IGJ1ZmZlcgorICogQHNrYjogc29ja2V0IGJ1ZmZlciB0byBhZGQgYXR0cmlidXRlIHRvCisgKiBAYXR0cnR5cGU6IGF0dHJpYnV0ZSB0eXBlCisgKiBAYXR0cmxlbjogbGVuZ3RoIG9mIGF0dHJpYnV0ZSBwYXlsb2FkCisgKiBAZGF0YTogaGVhZCBvZiBhdHRyaWJ1dGUgcGF5bG9hZAorICoKKyAqIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgdG8gZW5zdXJlIHRoYXQgdGhlIHNrYiBwcm92aWRlcyBlbm91Z2gKKyAqIHRhaWxyb29tIGZvciB0aGUgYXR0cmlidXRlIGhlYWRlciBhbmQgcGF5bG9hZC4KKyAqLwordm9pZCBfX25sYV9wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGF0dHJ0eXBlLCBpbnQgYXR0cmxlbiwKKwkJCSAgICAgY29uc3Qgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgbmxhdHRyICpubGE7CisKKwlubGEgPSBfX25sYV9yZXNlcnZlKHNrYiwgYXR0cnR5cGUsIGF0dHJsZW4pOworCW1lbWNweShubGFfZGF0YShubGEpLCBkYXRhLCBhdHRybGVuKTsKK30KKworCisvKioKKyAqIG5sYV9wdXQgLSBBZGQgYSBuZXRsaW5rIGF0dHJpYnV0ZSB0byBhIHNvY2tldCBidWZmZXIKKyAqIEBza2I6IHNvY2tldCBidWZmZXIgdG8gYWRkIGF0dHJpYnV0ZSB0bworICogQGF0dHJ0eXBlOiBhdHRyaWJ1dGUgdHlwZQorICogQGF0dHJsZW46IGxlbmd0aCBvZiBhdHRyaWJ1dGUgcGF5bG9hZAorICogQGRhdGE6IGhlYWQgb2YgYXR0cmlidXRlIHBheWxvYWQKKyAqCisgKiBSZXR1cm5zIC0xIGlmIHRoZSB0YWlscm9vbSBvZiB0aGUgc2tiIGlzIGluc3VmZmljaWVudCB0byBzdG9yZQorICogdGhlIGF0dHJpYnV0ZSBoZWFkZXIgYW5kIHBheWxvYWQuCisgKi8KK2ludCBubGFfcHV0KHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRydHlwZSwgaW50IGF0dHJsZW4sIGNvbnN0IHZvaWQgKmRhdGEpCit7CisJaWYgKHVubGlrZWx5KHNrYl90YWlscm9vbShza2IpIDwgbmxhX3RvdGFsX3NpemUoYXR0cmxlbikpKQorCQlyZXR1cm4gLTE7CisKKwlfX25sYV9wdXQoc2tiLCBhdHRydHlwZSwgYXR0cmxlbiwgZGF0YSk7CisJcmV0dXJuIDA7Cit9CisKKworRVhQT1JUX1NZTUJPTChubGFfdmFsaWRhdGUpOworRVhQT1JUX1NZTUJPTChubGFfcGFyc2UpOworRVhQT1JUX1NZTUJPTChubGFfZmluZCk7CitFWFBPUlRfU1lNQk9MKG5sYV9zdHJsY3B5KTsKK0VYUE9SVF9TWU1CT0woX19ubGFfcmVzZXJ2ZSk7CitFWFBPUlRfU1lNQk9MKG5sYV9yZXNlcnZlKTsKK0VYUE9SVF9TWU1CT0woX19ubGFfcHV0KTsKK0VYUE9SVF9TWU1CT0wobmxhX3B1dCk7CitFWFBPUlRfU1lNQk9MKG5sYV9tZW1jcHkpOworRVhQT1JUX1NZTUJPTChubGFfbWVtY21wKTsKK0VYUE9SVF9TWU1CT0wobmxhX3N0cmNtcCk7CmRpZmYgLS1naXQgYS9uZXQvbmV0bGluay9nZW5ldGxpbmsuYyBiL25ldC9uZXRsaW5rL2dlbmV0bGluay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4N2NmY2MKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvbmV0bGluay9nZW5ldGxpbmsuYwpAQCAtMCwwICsxLDU3OSBAQAorLyoKKyAqIE5FVExJTksgICAgICBHZW5lcmljIE5ldGxpbmsgRmFtaWx5CisgKgorICogCQlBdXRob3JzOglKYW1hbCBIYWRpIFNhbGltCisgKiAJCQkJVGhvbWFzIEdyYWYgPHRncmFmQHN1dWcuY2g+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxuZXQvc29jay5oPgorI2luY2x1ZGUgPG5ldC9nZW5ldGxpbmsuaD4KKworc3RydWN0IHNvY2sgKmdlbmxfc29jayA9IE5VTEw7CisKK3N0YXRpYyBERUNMQVJFX01VVEVYKGdlbmxfc2VtKTsgLyogc2VyaWFsaXphdGlvbiBvZiBtZXNzYWdlIHByb2Nlc3NpbmcgKi8KKworc3RhdGljIHZvaWQgZ2VubF9sb2NrKHZvaWQpCit7CisJZG93bigmZ2VubF9zZW0pOworfQorCitzdGF0aWMgaW50IGdlbmxfdHJ5bG9jayh2b2lkKQoreworCXJldHVybiBkb3duX3RyeWxvY2soJmdlbmxfc2VtKTsKK30KKworc3RhdGljIHZvaWQgZ2VubF91bmxvY2sodm9pZCkKK3sKKwl1cCgmZ2VubF9zZW0pOworCisJaWYgKGdlbmxfc29jayAmJiBnZW5sX3NvY2stPnNrX3JlY2VpdmVfcXVldWUucWxlbikKKwkJZ2VubF9zb2NrLT5za19kYXRhX3JlYWR5KGdlbmxfc29jaywgMCk7Cit9CisKKyNkZWZpbmUgR0VOTF9GQU1fVEFCX1NJWkUJMTYKKyNkZWZpbmUgR0VOTF9GQU1fVEFCX01BU0sJKEdFTkxfRkFNX1RBQl9TSVpFIC0gMSkKKworc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgZmFtaWx5X2h0W0dFTkxfRkFNX1RBQl9TSVpFXTsKKworc3RhdGljIGludCBnZW5sX2N0cmxfZXZlbnQoaW50IGV2ZW50LCB2b2lkICpkYXRhKTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ2VubF9mYW1pbHlfaGFzaCh1bnNpZ25lZCBpbnQgaWQpCit7CisJcmV0dXJuIGlkICYgR0VOTF9GQU1fVEFCX01BU0s7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGxpc3RfaGVhZCAqZ2VubF9mYW1pbHlfY2hhaW4odW5zaWduZWQgaW50IGlkKQoreworCXJldHVybiAmZmFtaWx5X2h0W2dlbmxfZmFtaWx5X2hhc2goaWQpXTsKK30KKworc3RhdGljIHN0cnVjdCBnZW5sX2ZhbWlseSAqZ2VubF9mYW1pbHlfZmluZF9ieWlkKHVuc2lnbmVkIGludCBpZCkKK3sKKwlzdHJ1Y3QgZ2VubF9mYW1pbHkgKmY7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGYsIGdlbmxfZmFtaWx5X2NoYWluKGlkKSwgZmFtaWx5X2xpc3QpCisJCWlmIChmLT5pZCA9PSBpZCkKKwkJCXJldHVybiBmOworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZ2VubF9mYW1pbHkgKmdlbmxfZmFtaWx5X2ZpbmRfYnluYW1lKGNoYXIgKm5hbWUpCit7CisJc3RydWN0IGdlbmxfZmFtaWx5ICpmOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEdFTkxfRkFNX1RBQl9TSVpFOyBpKyspCisJCWxpc3RfZm9yX2VhY2hfZW50cnkoZiwgZ2VubF9mYW1pbHlfY2hhaW4oaSksIGZhbWlseV9saXN0KQorCQkJaWYgKHN0cmNtcChmLT5uYW1lLCBuYW1lKSA9PSAwKQorCQkJCXJldHVybiBmOworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZ2VubF9vcHMgKmdlbmxfZ2V0X2NtZCh1OCBjbWQsIHN0cnVjdCBnZW5sX2ZhbWlseSAqZmFtaWx5KQoreworCXN0cnVjdCBnZW5sX29wcyAqb3BzOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShvcHMsICZmYW1pbHktPm9wc19saXN0LCBvcHNfbGlzdCkKKwkJaWYgKG9wcy0+Y21kID09IGNtZCkKKwkJCXJldHVybiBvcHM7CisKKwlyZXR1cm4gTlVMTDsKK30KKworLyogT2YgY291cnNlIHdlIGFyZSBnb2luZyB0byBoYXZlIHByb2JsZW1zIG9uY2Ugd2UgaGl0CisgKiAyXjE2IGFsaXZlIHR5cGVzLCBidXQgdGhhdCBjYW4gb25seSBoYXBwZW4gYnkgeWVhciAySworKi8KK3N0YXRpYyBpbmxpbmUgdTE2IGdlbmxfZ2VuZXJhdGVfaWQodm9pZCkKK3sKKwlzdGF0aWMgdTE2IGlkX2dlbl9pZHg7CisJaW50IG92ZXJmbG93ZWQgPSAwOworCisJZG8geworCQlpZiAoaWRfZ2VuX2lkeCA9PSAwKQorCQkJaWRfZ2VuX2lkeCA9IEdFTkxfTUlOX0lEOworCisJCWlmICgrK2lkX2dlbl9pZHggPiBHRU5MX01BWF9JRCkgeworCQkJaWYgKCFvdmVyZmxvd2VkKSB7CisJCQkJb3ZlcmZsb3dlZCA9IDE7CisJCQkJaWRfZ2VuX2lkeCA9IDA7CisJCQkJY29udGludWU7CisJCQl9IGVsc2UKKwkJCQlyZXR1cm4gMDsKKwkJfQorCisJfSB3aGlsZSAoZ2VubF9mYW1pbHlfZmluZF9ieWlkKGlkX2dlbl9pZHgpKTsKKworCXJldHVybiBpZF9nZW5faWR4OworfQorCisvKioKKyAqIGdlbmxfcmVnaXN0ZXJfb3BzIC0gcmVnaXN0ZXIgZ2VuZXJpYyBuZXRsaW5rIG9wZXJhdGlvbnMKKyAqIEBmYW1pbHk6IGdlbmVyaWMgbmV0bGluayBmYW1pbHkKKyAqIEBvcHM6IG9wZXJhdGlvbnMgdG8gYmUgcmVnaXN0ZXJlZAorICoKKyAqIFJlZ2lzdGVycyB0aGUgc3BlY2lmaWVkIG9wZXJhdGlvbnMgYW5kIGFzc2lnbnMgdGhlbSB0byB0aGUgc3BlY2lmaWVkCisgKiBmYW1pbHkuIEVpdGhlciBhIGRvaXQgb3IgZHVtcGl0IGNhbGxiYWNrIG11c3QgYmUgc3BlY2lmaWVkIG9yIHRoZQorICogb3BlcmF0aW9uIHdpbGwgZmFpbC4gT25seSBvbmUgb3BlcmF0aW9uIHN0cnVjdHVyZSBwZXIgY29tbWFuZAorICogaWRlbnRpZmllciBtYXkgYmUgcmVnaXN0ZXJlZC4KKyAqCisgKiBTZWUgaW5jbHVkZS9uZXQvZ2VuZXRsaW5rLmggZm9yIG1vcmUgZG9jdW1lbmF0aW9uIG9uIHRoZSBvcGVyYXRpb25zCisgKiBzdHJ1Y3R1cmUuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlLgorICovCitpbnQgZ2VubF9yZWdpc3Rlcl9vcHMoc3RydWN0IGdlbmxfZmFtaWx5ICpmYW1pbHksIHN0cnVjdCBnZW5sX29wcyAqb3BzKQoreworCWludCBlcnIgPSAtRUlOVkFMOworCisJaWYgKG9wcy0+ZHVtcGl0ID09IE5VTEwgJiYgb3BzLT5kb2l0ID09IE5VTEwpCisJCWdvdG8gZXJyb3V0OworCisJaWYgKGdlbmxfZ2V0X2NtZChvcHMtPmNtZCwgZmFtaWx5KSkgeworCQllcnIgPSAtRUVYSVNUOworCQlnb3RvIGVycm91dDsKKwl9CisKKwlnZW5sX2xvY2soKTsKKwlsaXN0X2FkZF90YWlsKCZvcHMtPm9wc19saXN0LCAmZmFtaWx5LT5vcHNfbGlzdCk7CisJZ2VubF91bmxvY2soKTsKKworCWdlbmxfY3RybF9ldmVudChDVFJMX0NNRF9ORVdPUFMsIG9wcyk7CisJZXJyID0gMDsKK2Vycm91dDoKKwlyZXR1cm4gZXJyOworfQorCisvKioKKyAqIGdlbmxfdW5yZWdpc3Rlcl9vcHMgLSB1bnJlZ2lzdGVyIGdlbmVyaWMgbmV0bGluayBvcGVyYXRpb25zCisgKiBAZmFtaWx5OiBnZW5lcmljIG5ldGxpbmsgZmFtaWx5CisgKiBAb3BzOiBvcGVyYXRpb25zIHRvIGJlIHVucmVnaXN0ZXJlZAorICoKKyAqIFVucmVnaXN0ZXJzIHRoZSBzcGVjaWZpZWQgb3BlcmF0aW9ucyBhbmQgdW5hc3NpZ25zIHRoZW0gZnJvbSB0aGUKKyAqIHNwZWNpZmllZCBmYW1pbHkuIFRoZSBvcGVyYXRpb24gYmxvY2tzIHVudGlsIHRoZSBjdXJyZW50IG1lc3NhZ2UKKyAqIHByb2Nlc3NpbmcgaGFzIGZpbmlzaGVkIGFuZCBkb2Vzbid0IHN0YXJ0IGFnYWluIHVudGlsIHRoZQorICogdW5yZWdpc3RlciBwcm9jZXNzIGhhcyBmaW5pc2hlZC4KKyAqCisgKiBOb3RlOiBJdCBpcyBub3QgbmVjZXNzYXJ5IHRvIHVucmVnaXN0ZXIgYWxsIG9wZXJhdGlvbnMgYmVmb3JlCisgKiAgICAgICB1bnJlZ2lzdGVyaW5nIHRoZSBmYW1pbHksIHVucmVnaXN0ZXJpbmcgdGhlIGZhbWlseSB3aWxsIGNhdXNlCisgKiAgICAgICBhbGwgYXNzaWduZWQgb3BlcmF0aW9ucyB0byBiZSB1bnJlZ2lzdGVyZWQgYXV0b21hdGljYWxseS4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuCisgKi8KK2ludCBnZW5sX3VucmVnaXN0ZXJfb3BzKHN0cnVjdCBnZW5sX2ZhbWlseSAqZmFtaWx5LCBzdHJ1Y3QgZ2VubF9vcHMgKm9wcykKK3sKKwlzdHJ1Y3QgZ2VubF9vcHMgKnJjOworCisJZ2VubF9sb2NrKCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShyYywgJmZhbWlseS0+b3BzX2xpc3QsIG9wc19saXN0KSB7CisJCWlmIChyYyA9PSBvcHMpIHsKKwkJCWxpc3RfZGVsKCZvcHMtPm9wc19saXN0KTsKKwkJCWdlbmxfdW5sb2NrKCk7CisJCQlnZW5sX2N0cmxfZXZlbnQoQ1RSTF9DTURfREVMT1BTLCBvcHMpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJZ2VubF91bmxvY2soKTsKKworCXJldHVybiAtRU5PRU5UOworfQorCisvKioKKyAqIGdlbmxfcmVnaXN0ZXJfZmFtaWx5IC0gcmVnaXN0ZXIgYSBnZW5lcmljIG5ldGxpbmsgZmFtaWx5CisgKiBAZmFtaWx5OiBnZW5lcmljIG5ldGxpbmsgZmFtaWx5CisgKgorICogUmVnaXN0ZXJzIHRoZSBzcGVjaWZpZWQgZmFtaWx5IGFmdGVyIHZhbGlkYXRpbmcgaXQgZmlyc3QuIE9ubHkgb25lCisgKiBmYW1pbHkgbWF5IGJlIHJlZ2lzdGVyZWQgd2l0aCB0aGUgc2FtZSBmYW1pbHkgbmFtZSBvciBpZGVudGlmaWVyLgorICogVGhlIGZhbWlseSBpZCBtYXkgZXF1YWwgR0VOTF9JRF9HRU5FUkFURSBjYXVzaW5nIGFuIHVuaXF1ZSBpZCB0bworICogYmUgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYW5kIGFzc2lnbmVkLgorICoKKyAqIFJldHVybiAwIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlLgorICovCitpbnQgZ2VubF9yZWdpc3Rlcl9mYW1pbHkoc3RydWN0IGdlbmxfZmFtaWx5ICpmYW1pbHkpCit7CisJaW50IGVyciA9IC1FSU5WQUw7CisKKwlpZiAoZmFtaWx5LT5pZCAmJiBmYW1pbHktPmlkIDwgR0VOTF9NSU5fSUQpCisJCWdvdG8gZXJyb3V0OworCisJaWYgKGZhbWlseS0+aWQgPiBHRU5MX01BWF9JRCkKKwkJZ290byBlcnJvdXQ7CisKKwlJTklUX0xJU1RfSEVBRCgmZmFtaWx5LT5vcHNfbGlzdCk7CisKKwlnZW5sX2xvY2soKTsKKworCWlmIChnZW5sX2ZhbWlseV9maW5kX2J5bmFtZShmYW1pbHktPm5hbWUpKSB7CisJCWVyciA9IC1FRVhJU1Q7CisJCWdvdG8gZXJyb3V0X2xvY2tlZDsKKwl9CisKKwlpZiAoZ2VubF9mYW1pbHlfZmluZF9ieWlkKGZhbWlseS0+aWQpKSB7CisJCWVyciA9IC1FRVhJU1Q7CisJCWdvdG8gZXJyb3V0X2xvY2tlZDsKKwl9CisKKwlpZiAoIXRyeV9tb2R1bGVfZ2V0KGZhbWlseS0+b3duZXIpKSB7CisJCWVyciA9IC1FQlVTWTsKKwkJZ290byBlcnJvdXRfbG9ja2VkOworCX0KKworCWlmIChmYW1pbHktPmlkID09IEdFTkxfSURfR0VORVJBVEUpIHsKKwkJdTE2IG5ld2lkID0gZ2VubF9nZW5lcmF0ZV9pZCgpOworCisJCWlmICghbmV3aWQpIHsKKwkJCWVyciA9IC1FTk9NRU07CisJCQlnb3RvIGVycm91dF9sb2NrZWQ7CisJCX0KKworCQlmYW1pbHktPmlkID0gbmV3aWQ7CisJfQorCisJaWYgKGZhbWlseS0+bWF4YXR0cikgeworCQlmYW1pbHktPmF0dHJidWYgPSBrbWFsbG9jKChmYW1pbHktPm1heGF0dHIrMSkgKgorCQkJCQlzaXplb2Yoc3RydWN0IG5sYXR0ciAqKSwgR0ZQX0tFUk5FTCk7CisJCWlmIChmYW1pbHktPmF0dHJidWYgPT0gTlVMTCkgeworCQkJZXJyID0gLUVOT01FTTsKKwkJCWdvdG8gZXJyb3V0OworCQl9CisJfSBlbHNlCisJCWZhbWlseS0+YXR0cmJ1ZiA9IE5VTEw7CisKKwlsaXN0X2FkZF90YWlsKCZmYW1pbHktPmZhbWlseV9saXN0LCBnZW5sX2ZhbWlseV9jaGFpbihmYW1pbHktPmlkKSk7CisJZ2VubF91bmxvY2soKTsKKworCWdlbmxfY3RybF9ldmVudChDVFJMX0NNRF9ORVdGQU1JTFksIGZhbWlseSk7CisKKwlyZXR1cm4gMDsKKworZXJyb3V0X2xvY2tlZDoKKwlnZW5sX3VubG9jaygpOworZXJyb3V0OgorCXJldHVybiBlcnI7Cit9CisKKy8qKgorICogZ2VubF91bnJlZ2lzdGVyX2ZhbWlseSAtIHVucmVnaXN0ZXIgZ2VuZXJpYyBuZXRsaW5rIGZhbWlseQorICogQGZhbWlseTogZ2VuZXJpYyBuZXRsaW5rIGZhbWlseQorICoKKyAqIFVucmVnaXN0ZXJzIHRoZSBzcGVjaWZpZWQgZmFtaWx5LgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZS4KKyAqLworaW50IGdlbmxfdW5yZWdpc3Rlcl9mYW1pbHkoc3RydWN0IGdlbmxfZmFtaWx5ICpmYW1pbHkpCit7CisJc3RydWN0IGdlbmxfZmFtaWx5ICpyYzsKKworCWdlbmxfbG9jaygpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShyYywgZ2VubF9mYW1pbHlfY2hhaW4oZmFtaWx5LT5pZCksIGZhbWlseV9saXN0KSB7CisJCWlmIChmYW1pbHktPmlkICE9IHJjLT5pZCB8fCBzdHJjbXAocmMtPm5hbWUsIGZhbWlseS0+bmFtZSkpCisJCQljb250aW51ZTsKKworCQlsaXN0X2RlbCgmcmMtPmZhbWlseV9saXN0KTsKKwkJSU5JVF9MSVNUX0hFQUQoJmZhbWlseS0+b3BzX2xpc3QpOworCQlnZW5sX3VubG9jaygpOworCisJCW1vZHVsZV9wdXQoZmFtaWx5LT5vd25lcik7CisJCWtmcmVlKGZhbWlseS0+YXR0cmJ1Zik7CisJCWdlbmxfY3RybF9ldmVudChDVFJMX0NNRF9ERUxGQU1JTFksIGZhbWlseSk7CisJCXJldHVybiAwOworCX0KKworCWdlbmxfdW5sb2NrKCk7CisKKwlyZXR1cm4gLUVOT0VOVDsKK30KKworc3RhdGljIGlubGluZSBpbnQgZ2VubF9yY3ZfbXNnKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLAorCQkJICAgICAgIGludCAqZXJycCkKK3sKKwlzdHJ1Y3QgZ2VubF9vcHMgKm9wczsKKwlzdHJ1Y3QgZ2VubF9mYW1pbHkgKmZhbWlseTsKKwlzdHJ1Y3QgZ2VubF9pbmZvIGluZm87CisJc3RydWN0IGdlbmxtc2doZHIgKmhkciA9IG5sbXNnX2RhdGEobmxoKTsKKwlpbnQgaGRybGVuLCBlcnIgPSAtRUlOVkFMOworCisJaWYgKCEobmxoLT5ubG1zZ19mbGFncyAmIE5MTV9GX1JFUVVFU1QpKQorCQlnb3RvIGlnbm9yZTsKKworCWlmIChubGgtPm5sbXNnX3R5cGUgPCBOTE1TR19NSU5fVFlQRSkKKwkJZ290byBpZ25vcmU7CisKKyAgICAgICAJZmFtaWx5ID0gZ2VubF9mYW1pbHlfZmluZF9ieWlkKG5saC0+bmxtc2dfdHlwZSk7CisJaWYgKGZhbWlseSA9PSBOVUxMKSB7CisJCWVyciA9IC1FTk9FTlQ7CisJCWdvdG8gZXJyb3V0OworCX0KKworCWhkcmxlbiA9IEdFTkxfSERSTEVOICsgZmFtaWx5LT5oZHJzaXplOworCWlmIChubGgtPm5sbXNnX2xlbiA8IG5sbXNnX21zZ19zaXplKGhkcmxlbikpCisJCWdvdG8gZXJyb3V0OworCisJb3BzID0gZ2VubF9nZXRfY21kKGhkci0+Y21kLCBmYW1pbHkpOworCWlmIChvcHMgPT0gTlVMTCkgeworCQllcnIgPSAtRU9QTk9UU1VQUDsKKwkJZ290byBlcnJvdXQ7CisJfQorCisJaWYgKChvcHMtPmZsYWdzICYgR0VOTF9BRE1JTl9QRVJNKSAmJiBzZWN1cml0eV9uZXRsaW5rX3JlY3Yoc2tiKSkgeworCQllcnIgPSAtRVBFUk07CisJCWdvdG8gZXJyb3V0OworCX0KKworCWlmIChubGgtPm5sbXNnX2ZsYWdzICYgTkxNX0ZfRFVNUCkgeworCQlpZiAob3BzLT5kdW1waXQgPT0gTlVMTCkgeworCQkJZXJyID0gLUVPUE5PVFNVUFA7CisJCQlnb3RvIGVycm91dDsKKwkJfQorCisJCSplcnJwID0gZXJyID0gbmV0bGlua19kdW1wX3N0YXJ0KGdlbmxfc29jaywgc2tiLCBubGgsCisJCQkJCQkgb3BzLT5kdW1waXQsIE5VTEwpOworCQlpZiAoZXJyID09IDApCisJCQlza2JfcHVsbChza2IsIG1pbihOTE1TR19BTElHTihubGgtPm5sbXNnX2xlbiksCisJCQkJCSAgc2tiLT5sZW4pKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChvcHMtPmRvaXQgPT0gTlVMTCkgeworCQllcnIgPSAtRU9QTk9UU1VQUDsKKwkJZ290byBlcnJvdXQ7CisJfQorCisJaWYgKGZhbWlseS0+YXR0cmJ1ZikgeworCQllcnIgPSBubG1zZ19wYXJzZShubGgsIGhkcmxlbiwgZmFtaWx5LT5hdHRyYnVmLCBmYW1pbHktPm1heGF0dHIsCisJCQkJICBvcHMtPnBvbGljeSk7CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBlcnJvdXQ7CisJfQorCisJaW5mby5zbmRfc2VxID0gbmxoLT5ubG1zZ19zZXE7CisJaW5mby5zbmRfcGlkID0gTkVUTElOS19DQihza2IpLnBpZDsKKwlpbmZvLm5saGRyID0gbmxoOworCWluZm8uZ2VubGhkciA9IG5sbXNnX2RhdGEobmxoKTsKKwlpbmZvLnVzZXJoZHIgPSBubG1zZ19kYXRhKG5saCkgKyBHRU5MX0hEUkxFTjsKKwlpbmZvLmF0dHJzID0gZmFtaWx5LT5hdHRyYnVmOworCisJKmVycnAgPSBlcnIgPSBvcHMtPmRvaXQoc2tiLCAmaW5mbyk7CisJcmV0dXJuIGVycjsKKworaWdub3JlOgorCXJldHVybiAwOworCitlcnJvdXQ6CisJKmVycnAgPSBlcnI7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgdm9pZCBnZW5sX3JjdihzdHJ1Y3Qgc29jayAqc2ssIGludCBsZW4pCit7CisJdW5zaWduZWQgaW50IHFsZW4gPSAwOworCisJZG8geworCQlpZiAoZ2VubF90cnlsb2NrKCkpCisJCQlyZXR1cm47CisJCW5ldGxpbmtfcnVuX3F1ZXVlKHNrLCAmcWxlbiwgJmdlbmxfcmN2X21zZyk7CisJCWdlbmxfdW5sb2NrKCk7CisJfSB3aGlsZSAocWxlbiAmJiBnZW5sX3NvY2sgJiYgZ2VubF9zb2NrLT5za19yZWNlaXZlX3F1ZXVlLnFsZW4pOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvbnRyb2xsZXIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludCBjdHJsX2ZpbGxfaW5mbyhzdHJ1Y3QgZ2VubF9mYW1pbHkgKmZhbWlseSwgdTMyIHBpZCwgdTMyIHNlcSwKKwkJCSAgdTMyIGZsYWdzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBjbWQpCit7CisJdm9pZCAqaGRyOworCisJaGRyID0gZ2VubG1zZ19wdXQoc2tiLCBwaWQsIHNlcSwgR0VOTF9JRF9DVFJMLCAwLCBmbGFncywgY21kLAorCQkJICBmYW1pbHktPnZlcnNpb24pOworCWlmIChoZHIgPT0gTlVMTCkKKwkJcmV0dXJuIC0xOworCisJTkxBX1BVVF9TVFJJTkcoc2tiLCBDVFJMX0FUVFJfRkFNSUxZX05BTUUsIGZhbWlseS0+bmFtZSk7CisJTkxBX1BVVF9VMTYoc2tiLCBDVFJMX0FUVFJfRkFNSUxZX0lELCBmYW1pbHktPmlkKTsKKworCXJldHVybiBnZW5sbXNnX2VuZChza2IsIGhkcik7CisKK25sYV9wdXRfZmFpbHVyZToKKwlyZXR1cm4gZ2VubG1zZ19jYW5jZWwoc2tiLCBoZHIpOworfQorCitzdGF0aWMgaW50IGN0cmxfZHVtcGZhbWlseShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCit7CisKKwlpbnQgaSwgbiA9IDA7CisJc3RydWN0IGdlbmxfZmFtaWx5ICpydDsKKwlpbnQgY2hhaW5zX3RvX3NraXAgPSBjYi0+YXJnc1swXTsKKwlpbnQgZmFtc190b19za2lwID0gY2ItPmFyZ3NbMV07CisKKwlmb3IgKGkgPSAwOyBpIDwgR0VOTF9GQU1fVEFCX1NJWkU7IGkrKykgeworCQlpZiAoaSA8IGNoYWluc190b19za2lwKQorCQkJY29udGludWU7CisJCW4gPSAwOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJ0LCBnZW5sX2ZhbWlseV9jaGFpbihpKSwgZmFtaWx5X2xpc3QpIHsKKwkJCWlmICgrK24gPCBmYW1zX3RvX3NraXApCisJCQkJY29udGludWU7CisJCQlpZiAoY3RybF9maWxsX2luZm8ocnQsIE5FVExJTktfQ0IoY2ItPnNrYikucGlkLAorCQkJCQkgICBjYi0+bmxoLT5ubG1zZ19zZXEsIE5MTV9GX01VTFRJLAorCQkJCQkgICBza2IsIENUUkxfQ01EX05FV0ZBTUlMWSkgPCAwKQorCQkJCWdvdG8gZXJyb3V0OworCQl9CisKKwkJZmFtc190b19za2lwID0gMDsKKwl9CisKK2Vycm91dDoKKwljYi0+YXJnc1swXSA9IGk7CisJY2ItPmFyZ3NbMV0gPSBuOworCisJcmV0dXJuIHNrYi0+bGVuOworfQorCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmN0cmxfYnVpbGRfbXNnKHN0cnVjdCBnZW5sX2ZhbWlseSAqZmFtaWx5LCB1MzIgcGlkLAorCQkJCSAgICAgIGludCBzZXEsIGludCBjbWQpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlpbnQgZXJyOworCisJc2tiID0gbmxtc2dfbmV3KE5MTVNHX0dPT0RTSVpFKTsKKwlpZiAoc2tiID09IE5VTEwpCisJCXJldHVybiBFUlJfUFRSKC1FTk9CVUZTKTsKKworCWVyciA9IGN0cmxfZmlsbF9pbmZvKGZhbWlseSwgcGlkLCBzZXEsIDAsIHNrYiwgY21kKTsKKwlpZiAoZXJyIDwgMCkgeworCQlubG1zZ19mcmVlKHNrYik7CisJCXJldHVybiBFUlJfUFRSKGVycik7CisJfQorCisJcmV0dXJuIHNrYjsKK30KKworc3RhdGljIHN0cnVjdCBubGFfcG9saWN5IGN0cmxfcG9saWN5W0NUUkxfQVRUUl9NQVgrMV0gX19yZWFkX21vc3RseSA9IHsKKwlbQ1RSTF9BVFRSX0ZBTUlMWV9JRF0JPSB7IC50eXBlID0gTkxBX1UxNiB9LAorCVtDVFJMX0FUVFJfRkFNSUxZX05BTUVdCT0geyAudHlwZSA9IE5MQV9TVFJJTkcgfSwKK307CisKK3N0YXRpYyBpbnQgY3RybF9nZXRmYW1pbHkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqbXNnOworCXN0cnVjdCBnZW5sX2ZhbWlseSAqcmVzID0gTlVMTDsKKwlpbnQgZXJyID0gLUVJTlZBTDsKKworCWlmIChpbmZvLT5hdHRyc1tDVFJMX0FUVFJfRkFNSUxZX0lEXSkgeworCQl1MTYgaWQgPSBubGFfZ2V0X3UxNihpbmZvLT5hdHRyc1tDVFJMX0FUVFJfRkFNSUxZX0lEXSk7CisJCXJlcyA9IGdlbmxfZmFtaWx5X2ZpbmRfYnlpZChpZCk7CisJfQorCisJaWYgKGluZm8tPmF0dHJzW0NUUkxfQVRUUl9GQU1JTFlfTkFNRV0pIHsKKwkJY2hhciBuYW1lW0dFTkxfTkFNU0laXTsKKworCQlpZiAobmxhX3N0cmxjcHkobmFtZSwgaW5mby0+YXR0cnNbQ1RSTF9BVFRSX0ZBTUlMWV9OQU1FXSwKKwkJCQlHRU5MX05BTVNJWikgPj0gR0VOTF9OQU1TSVopCisJCQlnb3RvIGVycm91dDsKKworCQlyZXMgPSBnZW5sX2ZhbWlseV9maW5kX2J5bmFtZShuYW1lKTsKKwl9CisKKwlpZiAocmVzID09IE5VTEwpIHsKKwkJZXJyID0gLUVOT0VOVDsKKwkJZ290byBlcnJvdXQ7CisJfQorCisJbXNnID0gY3RybF9idWlsZF9tc2cocmVzLCBpbmZvLT5zbmRfcGlkLCBpbmZvLT5zbmRfc2VxLAorCQkJICAgICBDVFJMX0NNRF9ORVdGQU1JTFkpOworCWlmIChJU19FUlIobXNnKSkgeworCQllcnIgPSBQVFJfRVJSKG1zZyk7CisJCWdvdG8gZXJyb3V0OworCX0KKworCWVyciA9IGdlbmxtc2dfdW5pY2FzdChtc2csIGluZm8tPnNuZF9waWQpOworZXJyb3V0OgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgZ2VubF9jdHJsX2V2ZW50KGludCBldmVudCwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqbXNnOworCisJaWYgKGdlbmxfc29jayA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIENUUkxfQ01EX05FV0ZBTUlMWToKKwljYXNlIENUUkxfQ01EX0RFTEZBTUlMWToKKwkJbXNnID0gY3RybF9idWlsZF9tc2coZGF0YSwgMCwgMCwgZXZlbnQpOworCQlpZiAoSVNfRVJSKG1zZykpCisJCQlyZXR1cm4gUFRSX0VSUihtc2cpOworCisJCWdlbmxtc2dfbXVsdGljYXN0KG1zZywgMCwgR0VOTF9JRF9DVFJMKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZ2VubF9vcHMgZ2VubF9jdHJsX29wcyA9IHsKKwkuY21kCQk9IENUUkxfQ01EX0dFVEZBTUlMWSwKKwkuZG9pdAkJPSBjdHJsX2dldGZhbWlseSwKKwkuZHVtcGl0CQk9IGN0cmxfZHVtcGZhbWlseSwKKwkucG9saWN5CQk9IGN0cmxfcG9saWN5LAorfTsKKworc3RhdGljIHN0cnVjdCBnZW5sX2ZhbWlseSBnZW5sX2N0cmwgPSB7CisJLmlkID0gR0VOTF9JRF9DVFJMLAorCS5uYW1lID0gIm5sY3RybCIsCisJLnZlcnNpb24gPSAweDEsCisJLm1heGF0dHIgPSBDVFJMX0FUVFJfTUFYLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAorfTsKKworc3RhdGljIGludCBfX2luaXQgZ2VubF9pbml0KHZvaWQpCit7CisJaW50IGksIGVycjsKKworCWZvciAoaSA9IDA7IGkgPCBHRU5MX0ZBTV9UQUJfU0laRTsgaSsrKQorCQlJTklUX0xJU1RfSEVBRCgmZmFtaWx5X2h0W2ldKTsKKworCWVyciA9IGdlbmxfcmVnaXN0ZXJfZmFtaWx5KCZnZW5sX2N0cmwpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGVycm91dDsKKworCWVyciA9IGdlbmxfcmVnaXN0ZXJfb3BzKCZnZW5sX2N0cmwsICZnZW5sX2N0cmxfb3BzKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJvdXRfcmVnaXN0ZXI7CisKKwluZXRsaW5rX3NldF9ub25yb290KE5FVExJTktfR0VORVJJQywgTkxfTk9OUk9PVF9SRUNWKTsKKwlnZW5sX3NvY2sgPSBuZXRsaW5rX2tlcm5lbF9jcmVhdGUoTkVUTElOS19HRU5FUklDLCBHRU5MX01BWF9JRCwKKwkJCQkJICBnZW5sX3JjdiwgVEhJU19NT0RVTEUpOworCWlmIChnZW5sX3NvY2sgPT0gTlVMTCkgeworCQlwYW5pYygiR0VOTDogQ2Fubm90IGluaXRpYWxpemUgZ2VuZXJpYyBuZXRsaW5rXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcmV0dXJuIDA7CisKK2Vycm91dF9yZWdpc3RlcjoKKwlnZW5sX3VucmVnaXN0ZXJfZmFtaWx5KCZnZW5sX2N0cmwpOworZXJyb3V0OgorCXBhbmljKCJHRU5MOiBDYW5ub3QgcmVnaXN0ZXIgY29udHJvbGxlcjogJWRcbiIsIGVycik7CisJcmV0dXJuIGVycjsKK30KKworc3Vic3lzX2luaXRjYWxsKGdlbmxfaW5pdCk7CisKK0VYUE9SVF9TWU1CT0woZ2VubF9zb2NrKTsKK0VYUE9SVF9TWU1CT0woZ2VubF9yZWdpc3Rlcl9vcHMpOworRVhQT1JUX1NZTUJPTChnZW5sX3VucmVnaXN0ZXJfb3BzKTsKK0VYUE9SVF9TWU1CT0woZ2VubF9yZWdpc3Rlcl9mYW1pbHkpOworRVhQT1JUX1NZTUJPTChnZW5sX3VucmVnaXN0ZXJfZmFtaWx5KTsKZGlmZiAtLWdpdCBhL25ldC9yb3NlL3Jvc2Vfcm91dGUuYyBiL25ldC9yb3NlL3Jvc2Vfcm91dGUuYwppbmRleCBiMThmZTUwLi44NjMxYjY1IDEwMDY0NAotLS0gYS9uZXQvcm9zZS9yb3NlX3JvdXRlLmMKKysrIGIvbmV0L3Jvc2Uvcm9zZV9yb3V0ZS5jCkBAIC0yNDAsOCArMjQwLDcgQEAKIAlpZiAoKHMgPSByb3NlX25laWdoX2xpc3QpID09IHJvc2VfbmVpZ2gpIHsKIAkJcm9zZV9uZWlnaF9saXN0ID0gcm9zZV9uZWlnaC0+bmV4dDsKIAkJc3Bpbl91bmxvY2tfYmgoJnJvc2VfbmVpZ2hfbGlzdF9sb2NrKTsKLQkJaWYgKHJvc2VfbmVpZ2gtPmRpZ2lwZWF0ICE9IE5VTEwpCi0JCQlrZnJlZShyb3NlX25laWdoLT5kaWdpcGVhdCk7CisJCWtmcmVlKHJvc2VfbmVpZ2gtPmRpZ2lwZWF0KTsKIAkJa2ZyZWUocm9zZV9uZWlnaCk7CiAJCXJldHVybjsKIAl9CkBAIC0yNTAsOCArMjQ5LDcgQEAKIAkJaWYgKHMtPm5leHQgPT0gcm9zZV9uZWlnaCkgewogCQkJcy0+bmV4dCA9IHJvc2VfbmVpZ2gtPm5leHQ7CiAJCQlzcGluX3VubG9ja19iaCgmcm9zZV9uZWlnaF9saXN0X2xvY2spOwotCQkJaWYgKHJvc2VfbmVpZ2gtPmRpZ2lwZWF0ICE9IE5VTEwpCi0JCQkJa2ZyZWUocm9zZV9uZWlnaC0+ZGlnaXBlYXQpOworCQkJa2ZyZWUocm9zZV9uZWlnaC0+ZGlnaXBlYXQpOwogCQkJa2ZyZWUocm9zZV9uZWlnaCk7CiAJCQlyZXR1cm47CiAJCX0KZGlmZiAtLWdpdCBhL25ldC9yeHJwYy90cmFuc3BvcnQuYyBiL25ldC9yeHJwYy90cmFuc3BvcnQuYwppbmRleCAxMjJjMDg2Li5kYmU2MTA1IDEwMDY0NAotLS0gYS9uZXQvcnhycGMvdHJhbnNwb3J0LmMKKysrIGIvbmV0L3J4cnBjL3RyYW5zcG9ydC5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvaW4uaD4KICNpbmNsdWRlIDxsaW51eC9pbjYuaD4KICNpbmNsdWRlIDxsaW51eC9pY21wLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KICNpbmNsdWRlIDxuZXQvaXAuaD4KICNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkIChDT05GSUdfSVBWNl9NT0RVTEUpCkBAIC00NzUsMTUgKzQ3NiwxMSBAQAogCiAJCS8qIHdlJ2xsIHByb2JhYmx5IG5lZWQgdG8gY2hlY2tzdW0gaXQgKGRpZG4ndCBjYWxsCiAJCSAqIHNvY2tfcmVjdm1zZykgKi8KLQkJaWYgKHBrdC0+aXBfc3VtbWVkICE9IENIRUNLU1VNX1VOTkVDRVNTQVJZKSB7Ci0JCQlpZiAoKHVuc2lnbmVkIHNob3J0KQotCQkJICAgIGNzdW1fZm9sZChza2JfY2hlY2tzdW0ocGt0LCAwLCBwa3QtPmxlbiwKLQkJCQkJCSAgIHBrdC0+Y3N1bSkpKSB7Ci0JCQkJa2ZyZWVfc2tiKHBrdCk7Ci0JCQkJcnhycGNfa3J4aW9kX3F1ZXVlX3RyYW5zcG9ydCh0cmFucyk7Ci0JCQkJX2xlYXZlKCIgQ1NVTSBmYWlsZWQiKTsKLQkJCQlyZXR1cm47Ci0JCQl9CisJCWlmIChza2JfY2hlY2tzdW1fY29tcGxldGUocGt0KSkgeworCQkJa2ZyZWVfc2tiKHBrdCk7CisJCQlyeHJwY19rcnhpb2RfcXVldWVfdHJhbnNwb3J0KHRyYW5zKTsKKwkJCV9sZWF2ZSgiIENTVU0gZmFpbGVkIik7CisJCQlyZXR1cm47CiAJCX0KIAogCQlhZGRyID0gcGt0LT5uaC5pcGgtPnNhZGRyOwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19mdy5jIGIvbmV0L3NjaGVkL2Nsc19mdy5jCmluZGV4IDI5ZDhiOWEuLjc1NDcwNDggMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9jbHNfZncuYworKysgYi9uZXQvc2NoZWQvY2xzX2Z3LmMKQEAgLTI5OCw4ICsyOTgsNyBAQAogCXJldHVybiAwOwogCiBlcnJvdXQ6Ci0JaWYgKGYpCi0JCWtmcmVlKGYpOworCWtmcmVlKGYpOwogCXJldHVybiBlcnI7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfcm91dGUuYyBiL25ldC9zY2hlZC9jbHNfcm91dGUuYwppbmRleCAwMjk5NmFjLi41MjBmZjcxIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvY2xzX3JvdXRlLmMKKysrIGIvbmV0L3NjaGVkL2Nsc19yb3V0ZS5jCkBAIC01MjUsOCArNTI1LDcgQEAKIAlyZXR1cm4gMDsKIAogZXJyb3V0OgotCWlmIChmKQotCQlrZnJlZShmKTsKKwlrZnJlZShmKTsKIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX3JzdnAuaCBiL25ldC9zY2hlZC9jbHNfcnN2cC5oCmluZGV4IDAwNjE2OGQuLjU3MmYwNmIgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9jbHNfcnN2cC5oCisrKyBiL25ldC9zY2hlZC9jbHNfcnN2cC5oCkBAIC01NTUsOCArNTU1LDcgQEAKIAlnb3RvIGluc2VydDsKIAogZXJyb3V0OgotCWlmIChmKQotCQlrZnJlZShmKTsKKwlrZnJlZShmKTsKIGVycm91dDI6CiAJdGNmX2V4dHNfZGVzdHJveSh0cCwgJmUpOwogCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX3RjaW5kZXguYyBiL25ldC9zY2hlZC9jbHNfdGNpbmRleC5jCmluZGV4IDQwNGQ5ZDguLjlmOTIxMTcgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9jbHNfdGNpbmRleC5jCisrKyBiL25ldC9zY2hlZC9jbHNfdGNpbmRleC5jCkBAIC0xOTQsOCArMTk0LDcgQEAKIAl9CiAJdGNmX3VuYmluZF9maWx0ZXIodHAsICZyLT5yZXMpOwogCXRjZl9leHRzX2Rlc3Ryb3kodHAsICZyLT5leHRzKTsKLQlpZiAoZikKLQkJa2ZyZWUoZik7CisJa2ZyZWUoZik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ0MiwxMCArNDQxLDggQEAKIAl3YWxrZXIuc2tpcCA9IDA7CiAJd2Fsa2VyLmZuID0gJnRjaW5kZXhfZGVzdHJveV9lbGVtZW50OwogCXRjaW5kZXhfd2Fsayh0cCwmd2Fsa2VyKTsKLQlpZiAocC0+cGVyZmVjdCkKLQkJa2ZyZWUocC0+cGVyZmVjdCk7Ci0JaWYgKHAtPmgpCi0JCWtmcmVlKHAtPmgpOworCWtmcmVlKHAtPnBlcmZlY3QpOworCWtmcmVlKHAtPmgpOwogCWtmcmVlKHApOwogCXRwLT5yb290ID0gTlVMTDsKIH0KZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfdTMyLmMgYi9uZXQvc2NoZWQvY2xzX3UzMi5jCmluZGV4IDM2NGI4N2QuLjJiNjcwNDcgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9jbHNfdTMyLmMKKysrIGIvbmV0L3NjaGVkL2Nsc191MzIuYwpAQCAtMzQ3LDcgKzM0Nyw3IEBACiAJaWYgKG4tPmh0X2Rvd24pCiAJCW4tPmh0X2Rvd24tPnJlZmNudC0tOwogI2lmZGVmIENPTkZJR19DTFNfVTMyX1BFUkYKLQlpZiAobiAmJiAoTlVMTCAhPSBuLT5wZikpCisJaWYgKG4pCiAJCWtmcmVlKG4tPnBmKTsKICNlbmRpZgogCWtmcmVlKG4pOwpAQCAtNjgwLDcgKzY4MCw3IEBACiAJCXJldHVybiAwOwogCX0KICNpZmRlZiBDT05GSUdfQ0xTX1UzMl9QRVJGCi0JaWYgKG4gJiYgKE5VTEwgIT0gbi0+cGYpKQorCWlmIChuKQogCQlrZnJlZShuLT5wZik7CiAjZW5kaWYKIAlrZnJlZShuKTsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9lbV9tZXRhLmMgYi9uZXQvc2NoZWQvZW1fbWV0YS5jCmluZGV4IGNmNjhhNTkuLjcwMDg0NGQgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9lbV9tZXRhLmMKKysrIGIvbmV0L3NjaGVkL2VtX21ldGEuYwpAQCAtNTYxLDggKzU2MSw3IEBACiAKIHN0YXRpYyB2b2lkIG1ldGFfdmFyX2Rlc3Ryb3koc3RydWN0IG1ldGFfdmFsdWUgKnYpCiB7Ci0JaWYgKHYtPnZhbCkKLQkJa2ZyZWUoKHZvaWQgKikgdi0+dmFsKTsKKwlrZnJlZSgodm9pZCAqKSB2LT52YWwpOwogfQogCiBzdGF0aWMgdm9pZCBtZXRhX3Zhcl9hcHBseV9leHRyYXMoc3RydWN0IG1ldGFfdmFsdWUgKnYsCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvZW1hdGNoLmMgYi9uZXQvc2NoZWQvZW1hdGNoLmMKaW5kZXggZWJmZTJlNy4uNjRiMDQ3YyAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2VtYXRjaC5jCisrKyBiL25ldC9zY2hlZC9lbWF0Y2guYwpAQCAtMjk4LDYgKzI5OCwxMSBAQAogCXN0cnVjdCB0Y2ZfZW1hdGNoX3RyZWVfaGRyICp0cmVlX2hkcjsKIAlzdHJ1Y3QgdGNmX2VtYXRjaCAqZW07CiAKKwlpZiAoIXJ0YSkgeworCQltZW1zZXQodHJlZSwgMCwgc2l6ZW9mKCp0cmVlKSk7CisJCXJldHVybiAwOworCX0KKwogCWlmIChydGF0dHJfcGFyc2VfbmVzdGVkKHRiLCBUQ0FfRU1BVENIX1RSRUVfTUFYLCBydGEpIDwgMCkKIAkJZ290byBlcnJvdXQ7CiAKZGlmZiAtLWdpdCBhL25ldC9zY3RwL2Fzc29jaW9sYS5jIGIvbmV0L3NjdHAvYXNzb2Npb2xhLmMKaW5kZXggMTJiMGY1OC4uOGM4ZGRmNyAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvYXNzb2Npb2xhLmMKKysrIGIvbmV0L3NjdHAvYXNzb2Npb2xhLmMKQEAgLTM0NCw5ICszNDQsNyBAQAogCX0KIAogCS8qIEZyZWUgcGVlcidzIGNhY2hlZCBjb29raWUuICovCi0JaWYgKGFzb2MtPnBlZXIuY29va2llKSB7Ci0JCWtmcmVlKGFzb2MtPnBlZXIuY29va2llKTsKLQl9CisJa2ZyZWUoYXNvYy0+cGVlci5jb29raWUpOwogCiAJLyogUmVsZWFzZSB0aGUgdHJhbnNwb3J0IHN0cnVjdHVyZXMuICovCiAJbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgdGVtcCwgJmFzb2MtPnBlZXIudHJhbnNwb3J0X2FkZHJfbGlzdCkgewpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc21fbWFrZV9jaHVuay5jIGIvbmV0L3NjdHAvc21fbWFrZV9jaHVuay5jCmluZGV4IDY2MGM2MWIuLmY5NTczZWIgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3NtX21ha2VfY2h1bmsuYworKysgYi9uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMKQEAgLTI1NCw4ICsyNTQsNyBAQAogCWFpcGFyYW0uYWRhcHRpb25faW5kID0gaHRvbmwoc3AtPmFkYXB0aW9uX2luZCk7CiAJc2N0cF9hZGR0b19jaHVuayhyZXR2YWwsIHNpemVvZihhaXBhcmFtKSwgJmFpcGFyYW0pOwogbm9kYXRhOgotCWlmIChhZGRycy52KQotCQlrZnJlZShhZGRycy52KTsKKwlrZnJlZShhZGRycy52KTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCkBAIC0zNDcsOCArMzQ2LDcgQEAKIG5vbWVtX2NodW5rOgogCWtmcmVlKGNvb2tpZSk7CiBub21lbV9jb29raWU6Ci0JaWYgKGFkZHJzLnYpCi0JCWtmcmVlKGFkZHJzLnYpOworCWtmcmVlKGFkZHJzLnYpOwogCXJldHVybiByZXR2YWw7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX2tyYjVfc2VhbC5jIGIvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV9zZWFsLmMKaW5kZXggMTNmOGFlOS4uZDBkZmRmZCAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV9zZWFsLmMKKysrIGIvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV9zZWFsLmMKQEAgLTE0Myw2ICsxNDMsNiBAQAogCiAJcmV0dXJuICgoY3R4LT5lbmR0aW1lIDwgbm93KSA/IEdTU19TX0NPTlRFWFRfRVhQSVJFRCA6IEdTU19TX0NPTVBMRVRFKTsKIG91dF9lcnI6Ci0JaWYgKG1kNWNrc3VtLmRhdGEpIGtmcmVlKG1kNWNrc3VtLmRhdGEpOworCWtmcmVlKG1kNWNrc3VtLmRhdGEpOwogCXJldHVybiBHU1NfU19GQUlMVVJFOwogfQpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV91bnNlYWwuYyBiL25ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX2tyYjVfdW5zZWFsLmMKaW5kZXggMjAzMDQ3NS4uZGIwNTVmZCAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV91bnNlYWwuYworKysgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X3Vuc2VhbC5jCkBAIC0xNzYsNiArMTc2LDYgQEAKIAogCXJldCA9IEdTU19TX0NPTVBMRVRFOwogb3V0OgotCWlmIChtZDVja3N1bS5kYXRhKSBrZnJlZShtZDVja3N1bS5kYXRhKTsKKwlrZnJlZShtZDVja3N1bS5kYXRhKTsKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3NfbWVjaF9zd2l0Y2guYyBiL25ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX21lY2hfc3dpdGNoLmMKaW5kZXggYjA0OGJmNi4uZjhiYWM2YyAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3NfbWVjaF9zd2l0Y2guYworKysgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19tZWNoX3N3aXRjaC5jCkBAIC02MCw4ICs2MCw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgZ20tPmdtX3BmX251bTsgaSsrKSB7CiAJCXBmID0gJmdtLT5nbV9wZnNbaV07Ci0JCWlmIChwZi0+YXV0aF9kb21haW5fbmFtZSkKLQkJCWtmcmVlKHBmLT5hdXRoX2RvbWFpbl9uYW1lKTsKKwkJa2ZyZWUocGYtPmF1dGhfZG9tYWluX25hbWUpOwogCQlwZi0+YXV0aF9kb21haW5fbmFtZSA9IE5VTEw7CiAJfQogfQpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfc3BrbTNfc2VhbC5jIGIvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfc3BrbTNfc2VhbC5jCmluZGV4IDE0ODIwMWUuLmQxZTEyYjIgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX3Nwa20zX3NlYWwuYworKysgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19zcGttM19zZWFsLmMKQEAgLTEyMiw4ICsxMjIsNyBAQAogCiAJcmV0dXJuICBHU1NfU19DT01QTEVURTsKIG91dF9lcnI6Ci0JaWYgKG1kNWNrc3VtLmRhdGEpIAotCQlrZnJlZShtZDVja3N1bS5kYXRhKTsKKwlrZnJlZShtZDVja3N1bS5kYXRhKTsKIAl0b2tlbi0+ZGF0YSA9IE5VTEw7CiAJdG9rZW4tPmxlbiA9IDA7CiAJcmV0dXJuIEdTU19TX0ZBSUxVUkU7CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19zcGttM190b2tlbi5jIGIvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfc3BrbTNfdG9rZW4uYwppbmRleCA0NmMwOGEwLi4xZjgyNDU3IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19zcGttM190b2tlbi5jCisrKyBiL25ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX3Nwa20zX3Rva2VuLmMKQEAgLTI1OSw4ICsyNTksNyBAQAogCiAJcmV0ID0gR1NTX1NfQ09NUExFVEU7CiBvdXQ6Ci0JaWYgKHNwa20zX2N0eF9pZC5kYXRhKQotCQlrZnJlZShzcGttM19jdHhfaWQuZGF0YSk7CisJa2ZyZWUoc3BrbTNfY3R4X2lkLmRhdGEpOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX3Nwa20zX3Vuc2VhbC5jIGIvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfc3BrbTNfdW5zZWFsLmMKaW5kZXggYzNjMGQ5NS4uMjQxZDViMyAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfc3BrbTNfdW5zZWFsLmMKKysrIGIvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfc3BrbTNfdW5zZWFsLmMKQEAgLTEyMCw5ICsxMjAsNyBAQAogCS8qIFhYWDogbmVlZCB0byBhZGQgZXhwaXJhdGlvbiBhbmQgc2VxdWVuY2luZyAqLwogCXJldCA9IEdTU19TX0NPTVBMRVRFOwogb3V0OgotCWlmIChtZDVja3N1bS5kYXRhKSAKLQkJa2ZyZWUobWQ1Y2tzdW0uZGF0YSk7Ci0JaWYgKHdpcmVfY2tzdW0uZGF0YSkgCi0JCWtmcmVlKHdpcmVfY2tzdW0uZGF0YSk7CisJa2ZyZWUobWQ1Y2tzdW0uZGF0YSk7CisJa2ZyZWUod2lyZV9ja3N1bS5kYXRhKTsKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9jbG50LmMgYi9uZXQvc3VucnBjL2NsbnQuYwppbmRleCA3MDJlZGUzLi42MWMzYWJlIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL2NsbnQuYworKysgYi9uZXQvc3VucnBjL2NsbnQuYwpAQCAtNTUsNiArNTUsNyBAQAogc3RhdGljIHZvaWQJY2FsbF9iaW5kX3N0YXR1cyhzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2spOwogc3RhdGljIHZvaWQJY2FsbF90cmFuc21pdChzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2spOwogc3RhdGljIHZvaWQJY2FsbF9zdGF0dXMoc3RydWN0IHJwY190YXNrICp0YXNrKTsKK3N0YXRpYyB2b2lkCWNhbGxfdHJhbnNtaXRfc3RhdHVzKHN0cnVjdCBycGNfdGFzayAqdGFzayk7CiBzdGF0aWMgdm9pZAljYWxsX3JlZnJlc2goc3RydWN0IHJwY190YXNrICp0YXNrKTsKIHN0YXRpYyB2b2lkCWNhbGxfcmVmcmVzaHJlc3VsdChzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2spOwogc3RhdGljIHZvaWQJY2FsbF90aW1lb3V0KHN0cnVjdCBycGNfdGFzayAqdGFzayk7CkBAIC02NzIsNiArNjczLDE4IEBACiAJcnBjX2V4aXQodGFzaywgLUVSRVNUQVJUU1lTKTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQKK3JwY190YXNrX25lZWRfZW5jb2RlKHN0cnVjdCBycGNfdGFzayAqdGFzaykKK3sKKwlyZXR1cm4gdGFzay0+dGtfcnFzdHAtPnJxX3NuZF9idWYubGVuID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorcnBjX3Rhc2tfZm9yY2VfcmVlbmNvZGUoc3RydWN0IHJwY190YXNrICp0YXNrKQoreworCXRhc2stPnRrX3Jxc3RwLT5ycV9zbmRfYnVmLmxlbiA9IDA7Cit9CisKIC8qCiAgKiAzLglFbmNvZGUgYXJndW1lbnRzIG9mIGFuIFJQQyBjYWxsCiAgKi8KQEAgLTg2NywxMiArODgwLDE0IEBACiAJaWYgKHRhc2stPnRrX3N0YXR1cyAhPSAwKQogCQlyZXR1cm47CiAJLyogRW5jb2RlIGhlcmUgc28gdGhhdCBycGNzZWNfZ3NzIGNhbiB1c2UgY29ycmVjdCBzZXF1ZW5jZSBudW1iZXIuICovCi0JaWYgKHRhc2stPnRrX3Jxc3RwLT5ycV9ieXRlc19zZW50ID09IDApIHsKKwlpZiAocnBjX3Rhc2tfbmVlZF9lbmNvZGUodGFzaykpIHsKKwkJdGFzay0+dGtfcnFzdHAtPnJxX2J5dGVzX3NlbnQgPSAwOwogCQljYWxsX2VuY29kZSh0YXNrKTsKIAkJLyogRGlkIHRoZSBlbmNvZGUgcmVzdWx0IGluIGFuIGVycm9yIGNvbmRpdGlvbj8gKi8KIAkJaWYgKHRhc2stPnRrX3N0YXR1cyAhPSAwKQogCQkJZ290byBvdXRfbm9zZW5kOwogCX0KKwl0YXNrLT50a19hY3Rpb24gPSBjYWxsX3RyYW5zbWl0X3N0YXR1czsKIAl4cHJ0X3RyYW5zbWl0KHRhc2spOwogCWlmICh0YXNrLT50a19zdGF0dXMgPCAwKQogCQlyZXR1cm47CkBAIC04ODQsNiArODk5LDcgQEAKIG91dF9ub3NlbmQ6CiAJLyogcmVsZWFzZSBzb2NrZXQgd3JpdGUgbG9jayBiZWZvcmUgYXR0ZW1wdGluZyB0byBoYW5kbGUgZXJyb3IgKi8KIAl4cHJ0X2Fib3J0X3RyYW5zbWl0KHRhc2spOworCXJwY190YXNrX2ZvcmNlX3JlZW5jb2RlKHRhc2spOwogfQogCiAvKgpAQCAtOTE1LDcgKzkzMSw2IEBACiAJCWJyZWFrOwogCWNhc2UgLUVDT05OUkVGVVNFRDoKIAljYXNlIC1FTk9UQ09OTjoKLQkJcmVxLT5ycV9ieXRlc19zZW50ID0gMDsKIAkJaWYgKGNsbnQtPmNsX2F1dG9iaW5kKQogCQkJY2xudC0+Y2xfcG9ydCA9IDA7CiAJCXRhc2stPnRrX2FjdGlvbiA9IGNhbGxfYmluZDsKQEAgLTkzNyw3ICs5NTIsMTggQEAKIH0KIAogLyoKLSAqIDZhLglIYW5kbGUgUlBDIHRpbWVvdXQKKyAqIDZhLglIYW5kbGUgdHJhbnNtaXNzaW9uIGVycm9ycy4KKyAqLworc3RhdGljIHZvaWQKK2NhbGxfdHJhbnNtaXRfc3RhdHVzKHN0cnVjdCBycGNfdGFzayAqdGFzaykKK3sKKwlpZiAodGFzay0+dGtfc3RhdHVzICE9IC1FQUdBSU4pCisJCXJwY190YXNrX2ZvcmNlX3JlZW5jb2RlKHRhc2spOworCWNhbGxfc3RhdHVzKHRhc2spOworfQorCisvKgorICogNmIuCUhhbmRsZSBSUEMgdGltZW91dAogICogCVdlIGRvIG5vdCByZWxlYXNlIHRoZSByZXF1ZXN0IHNsb3QsIHNvIHdlIGtlZXAgdXNpbmcgdGhlCiAgKglzYW1lIFhJRCBmb3IgYWxsIHJldHJhbnNtaXRzLgogICovCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3JwY19waXBlLmMgYi9uZXQvc3VucnBjL3JwY19waXBlLmMKaW5kZXggNGYxODhkMC4uODFlMDBhNiAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9ycGNfcGlwZS5jCisrKyBiL25ldC9zdW5ycGMvcnBjX3BpcGUuYwpAQCAtNjAzLDcgKzYwMyw3IEBACiAJCXJldHVybiBFUlJfUFRSKGVycm9yKTsKIAlkaXIgPSBuZC0+ZGVudHJ5LT5kX2lub2RlOwogCWRvd24oJmRpci0+aV9zZW0pOwotCWRlbnRyeSA9IGxvb2t1cF9oYXNoKCZuZC0+bGFzdCwgbmQtPmRlbnRyeSk7CisJZGVudHJ5ID0gbG9va3VwX2hhc2gobmQpOwogCWlmIChJU19FUlIoZGVudHJ5KSkKIAkJZ290byBvdXRfZXJyOwogCWlmIChkZW50cnktPmRfaW5vZGUpIHsKQEAgLTY2NSw3ICs2NjUsNyBAQAogCQlyZXR1cm4gZXJyb3I7CiAJZGlyID0gbmQuZGVudHJ5LT5kX2lub2RlOwogCWRvd24oJmRpci0+aV9zZW0pOwotCWRlbnRyeSA9IGxvb2t1cF9oYXNoKCZuZC5sYXN0LCBuZC5kZW50cnkpOworCWRlbnRyeSA9IGxvb2t1cF9oYXNoKCZuZCk7CiAJaWYgKElTX0VSUihkZW50cnkpKSB7CiAJCWVycm9yID0gUFRSX0VSUihkZW50cnkpOwogCQlnb3RvIG91dF9yZWxlYXNlOwpAQCAtNzI2LDcgKzcyNiw3IEBACiAJCXJldHVybiBlcnJvcjsKIAlkaXIgPSBuZC5kZW50cnktPmRfaW5vZGU7CiAJZG93bigmZGlyLT5pX3NlbSk7Ci0JZGVudHJ5ID0gbG9va3VwX2hhc2goJm5kLmxhc3QsIG5kLmRlbnRyeSk7CisJZGVudHJ5ID0gbG9va3VwX2hhc2goJm5kKTsKIAlpZiAoSVNfRVJSKGRlbnRyeSkpIHsKIAkJZXJyb3IgPSBQVFJfRVJSKGRlbnRyeSk7CiAJCWdvdG8gb3V0X3JlbGVhc2U7CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3NvY2tsaWIuYyBiL25ldC9zdW5ycGMvc29ja2xpYi5jCmluZGV4IDhmOTdlOTAuLmViMzMwZDQgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvc29ja2xpYi5jCisrKyBiL25ldC9zdW5ycGMvc29ja2xpYi5jCkBAIC02LDYgKzYsOSBAQAogICogQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2IE9sYWYgS2lyY2ggPG9raXJAbW9uYWQuc3diLmRlPgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3VkcC5oPgpAQCAtMTY1LDYgKzE2OCw4IEBACiAJCXJldHVybiAtMTsKIAlpZiAoKHVuc2lnbmVkIHNob3J0KWNzdW1fZm9sZChkZXNjLmNzdW0pKQogCQlyZXR1cm4gLTE7CisJaWYgKHVubGlrZWx5KHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX0hXKSkKKwkJbmV0ZGV2X3J4X2NzdW1fZmF1bHQoc2tiLT5kZXYpOwogCXJldHVybiAwOwogbm9fY2hlY2tzdW06CiAJaWYgKHhkcl9wYXJ0aWFsX2NvcHlfZnJvbV9za2IoeGRyLCAwLCAmZGVzYywgc2tiX3JlYWRfYml0cykgPCAwKQpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zdmMuYyBiL25ldC9zdW5ycGMvc3ZjLmMKaW5kZXggNWEyMjBiMi4uZTQyOTZjOCAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9zdmMuYworKysgYi9uZXQvc3VucnBjL3N2Yy5jCkBAIC0xOTYsMTIgKzE5Niw5IEBACiAJc3RydWN0IHN2Y19zZXJ2CSpzZXJ2ID0gcnFzdHAtPnJxX3NlcnZlcjsKIAogCXN2Y19yZWxlYXNlX2J1ZmZlcihycXN0cCk7Ci0JaWYgKHJxc3RwLT5ycV9yZXNwKQotCQlrZnJlZShycXN0cC0+cnFfcmVzcCk7Ci0JaWYgKHJxc3RwLT5ycV9hcmdwKQotCQlrZnJlZShycXN0cC0+cnFfYXJncCk7Ci0JaWYgKHJxc3RwLT5ycV9hdXRoX2RhdGEpCi0JCWtmcmVlKHJxc3RwLT5ycV9hdXRoX2RhdGEpOworCWtmcmVlKHJxc3RwLT5ycV9yZXNwKTsKKwlrZnJlZShycXN0cC0+cnFfYXJncCk7CisJa2ZyZWUocnFzdHAtPnJxX2F1dGhfZGF0YSk7CiAJa2ZyZWUocnFzdHApOwogCiAJLyogUmVsZWFzZSB0aGUgc2VydmVyICovCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3N2Y3NvY2suYyBiL25ldC9zdW5ycGMvc3Zjc29jay5jCmluZGV4IGYxNmU3Y2QuLmU1MGU3Y2YgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvc3Zjc29jay5jCisrKyBiL25ldC9zdW5ycGMvc3Zjc29jay5jCkBAIC02MjMsMTIgKzYyMyw5IEBACiAJCS8qIHdlIGNhbiB1c2UgaXQgaW4tcGxhY2UgKi8KIAkJcnFzdHAtPnJxX2FyZy5oZWFkWzBdLmlvdl9iYXNlID0gc2tiLT5kYXRhICsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpOwogCQlycXN0cC0+cnFfYXJnLmhlYWRbMF0uaW92X2xlbiA9IGxlbjsKLQkJaWYgKHNrYi0+aXBfc3VtbWVkICE9IENIRUNLU1VNX1VOTkVDRVNTQVJZKSB7Ci0JCQlpZiAoKHVuc2lnbmVkIHNob3J0KWNzdW1fZm9sZChza2JfY2hlY2tzdW0oc2tiLCAwLCBza2ItPmxlbiwgc2tiLT5jc3VtKSkpIHsKLQkJCQlza2JfZnJlZV9kYXRhZ3JhbShzdnNrLT5za19zaywgc2tiKTsKLQkJCQlyZXR1cm4gMDsKLQkJCX0KLQkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CisJCWlmIChza2JfY2hlY2tzdW1fY29tcGxldGUoc2tiKSkgeworCQkJc2tiX2ZyZWVfZGF0YWdyYW0oc3Zzay0+c2tfc2ssIHNrYik7CisJCQlyZXR1cm4gMDsKIAkJfQogCQlycXN0cC0+cnFfc2tidWZmID0gc2tiOwogCX0KZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMveGRyLmMgYi9uZXQvc3VucnBjL3hkci5jCmluZGV4IDMyZGY0MzMuLmFhZjA4Y2RkIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3hkci5jCisrKyBiL25ldC9zdW5ycGMveGRyLmMKQEAgLTk5Miw4ICs5OTIsNyBAQAogCWVyciA9IDA7CiAKIG91dDoKLQlpZiAoZWxlbSkKLQkJa2ZyZWUoZWxlbSk7CisJa2ZyZWUoZWxlbSk7CiAJaWYgKHBwYWdlcykKIAkJa3VubWFwKCpwcGFnZXMpOwogCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9uZXQvdW5peC9hZl91bml4LmMgYi9uZXQvdW5peC9hZl91bml4LmMKaW5kZXggNDFmZWNhMy4uYWNjNzNiYSAxMDA2NDQKLS0tIGEvbmV0L3VuaXgvYWZfdW5peC5jCisrKyBiL25ldC91bml4L2FmX3VuaXguYwpAQCAtNjc2LDcgKzY3Niw3IEBACiAJCWVyciA9IHBhdGhfbG9va3VwKHN1bm5hbWUtPnN1bl9wYXRoLCBMT09LVVBfRk9MTE9XLCAmbmQpOwogCQlpZiAoZXJyKQogCQkJZ290byBmYWlsOwotCQllcnIgPSBwZXJtaXNzaW9uKG5kLmRlbnRyeS0+ZF9pbm9kZSxNQVlfV1JJVEUsICZuZCk7CisJCWVyciA9IHZmc19wZXJtaXNzaW9uKCZuZCwgTUFZX1dSSVRFKTsKIAkJaWYgKGVycikKIAkJCWdvdG8gcHV0X2ZhaWw7CiAKZGlmZiAtLWdpdCBhL25ldC93YW5yb3V0ZXIvYWZfd2FucGlwZS5jIGIvbmV0L3dhbnJvdXRlci9hZl93YW5waXBlLmMKaW5kZXggNTk2Y2I5Ni4uNTlmZWM1OSAxMDA2NDQKLS0tIGEvbmV0L3dhbnJvdXRlci9hZl93YW5waXBlLmMKKysrIGIvbmV0L3dhbnJvdXRlci9hZl93YW5waXBlLmMKQEAgLTEwOTksNyArMTA5OSw3IEBACiAJc29ja19yZXNldF9mbGFnKHNrLCBTT0NLX1pBUFBFRCk7CiAJd3AgPSB3cF9zayhzayk7CiAKLQlpZiAod3AgJiYgd3AtPm1ib3gpIHsKKwlpZiAod3ApIHsKIAkJa2ZyZWUod3AtPm1ib3gpOwogCQl3cC0+bWJveCA9IE5VTEw7CiAJfQpAQCAtMTE4NiwxMCArMTE4Niw4IEBACiAJCXJldHVybjsKIAl9CiAKLQlpZiAod3Bfc2soc2spKSB7Ci0JCWtmcmVlKHdwX3NrKHNrKSk7Ci0JCXdwX3NrKHNrKSA9IE5VTEw7Ci0JfQorCWtmcmVlKHdwX3NrKHNrKSk7CisJd3Bfc2soc2spID0gTlVMTDsKIAogCWlmIChhdG9taWNfcmVhZCgmc2stPnNrX3JlZmNudCkgIT0gMSkgewogCQlhdG9taWNfc2V0KCZzay0+c2tfcmVmY250LCAxKTsKQEAgLTEyMTksMTAgKzEyMTcsOCBAQAogCXNrLT5za19zb2NrZXQgPSBOVUxMOwogCiAKLQlpZiAod3Bfc2soc2spKSB7Ci0JCWtmcmVlKHdwX3NrKHNrKSk7Ci0JCXdwX3NrKHNrKSA9IE5VTEw7Ci0JfQorCWtmcmVlKHdwX3NrKHNrKSk7CisJd3Bfc2soc2spID0gTlVMTDsKIAogCWlmIChhdG9taWNfcmVhZCgmc2stPnNrX3JlZmNudCkgIT0gMSkgewogCQlhdG9taWNfc2V0KCZzay0+c2tfcmVmY250LCAxKTsKQEAgLTEyNDMsMTAgKzEyMzksOCBAQAogCiAJc2stPnNrX3NvY2tldCA9IE5VTEw7CiAKLQlpZiAod3Bfc2soc2spKSB7Ci0JCWtmcmVlKHdwX3NrKHNrKSk7Ci0JCXdwX3NrKHNrKSA9IE5VTEw7Ci0JfQorCWtmcmVlKHdwX3NrKHNrKSk7CisJd3Bfc2soc2spID0gTlVMTDsKIAogCWlmIChhdG9taWNfcmVhZCgmc2stPnNrX3JlZmNudCkgIT0gMSkgewogCQlhdG9taWNfc2V0KCZzay0+c2tfcmVmY250LCAxKTsKZGlmZiAtLWdpdCBhL25ldC93YW5yb3V0ZXIvd2FubWFpbi5jIGIvbmV0L3dhbnJvdXRlci93YW5tYWluLmMKaW5kZXggMTNiNjUwYS4uYmNmN2IzZiAxMDA2NDQKLS0tIGEvbmV0L3dhbnJvdXRlci93YW5tYWluLmMKKysrIGIvbmV0L3dhbnJvdXRlci93YW5tYWluLmMKQEAgLTcxNCwxMCArNzE0LDggQEAKIAl9CiAKIAkvKiBUaGlzIGNvZGUgaGFzIG1vdmVkIGZyb20gZGVsX2lmKCkgZnVuY3Rpb24gKi8KLQlpZiAoZGV2LT5wcml2KSB7Ci0JCWtmcmVlKGRldi0+cHJpdik7Ci0JCWRldi0+cHJpdiA9IE5VTEw7Ci0JfQorCWtmcmVlKGRldi0+cHJpdik7CisJZGV2LT5wcml2ID0gTlVMTDsKIAogI2lmZGVmIENPTkZJR19XQU5QSVBFX01VTFRQUFAKIAlpZiAoY25mLT5jb25maWdfaWQgPT0gV0FOQ09ORklHX01QUFApCkBAIC04NTEsMTAgKzg0OSw4IEBACiAKIAkvKiBEdWUgdG8gbmV3IGludGVyZmFjZSBsaW5raW5nIG1ldGhvZCB1c2luZyBkZXYtPnByaXYsCiAJICogdGhpcyBjb2RlIGhhcyBtb3ZlZCBmcm9tIGRlbF9pZigpIGZ1bmN0aW9uLiovCi0JaWYgKGRldi0+cHJpdil7Ci0JCWtmcmVlKGRldi0+cHJpdik7Ci0JCWRldi0+cHJpdj1OVUxMOwotCX0KKwlrZnJlZShkZXYtPnByaXYpOworCWRldi0+cHJpdj1OVUxMOwogCiAJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIApkaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9zdGF0ZS5jIGIvbmV0L3hmcm0veGZybV9zdGF0ZS5jCmluZGV4IDhiOWE0NzQuLjdjZjQ4YWEgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1fc3RhdGUuYworKysgYi9uZXQveGZybS94ZnJtX3N0YXRlLmMKQEAgLTYyLDE0ICs2MiwxMCBAQAogewogCWlmIChkZWxfdGltZXIoJngtPnRpbWVyKSkKIAkJQlVHKCk7Ci0JaWYgKHgtPmFhbGcpCi0JCWtmcmVlKHgtPmFhbGcpOwotCWlmICh4LT5lYWxnKQotCQlrZnJlZSh4LT5lYWxnKTsKLQlpZiAoeC0+Y2FsZykKLQkJa2ZyZWUoeC0+Y2FsZyk7Ci0JaWYgKHgtPmVuY2FwKQotCQlrZnJlZSh4LT5lbmNhcCk7CisJa2ZyZWUoeC0+YWFsZyk7CisJa2ZyZWUoeC0+ZWFsZyk7CisJa2ZyZWUoeC0+Y2FsZyk7CisJa2ZyZWUoeC0+ZW5jYXApOwogCWlmICh4LT50eXBlKSB7CiAJCXgtPnR5cGUtPmRlc3RydWN0b3IoeCk7CiAJCXhmcm1fcHV0X3R5cGUoeC0+dHlwZSk7CmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3VzZXIuYyBiL25ldC94ZnJtL3hmcm1fdXNlci5jCmluZGV4IGMzNTMzNmEuLjBjZGQ5YTAgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1fdXNlci5jCisrKyBiL25ldC94ZnJtL3hmcm1fdXNlci5jCkBAIC0xOCw3ICsxOCw2IEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0bGluay5oPgogI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgogI2luY2x1ZGUgPGxpbnV4L3Bma2V5djIuaD4KICNpbmNsdWRlIDxsaW51eC9pcHNlYy5oPgpAQCAtMjYsNiArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KICNpbmNsdWRlIDxuZXQveGZybS5oPgorI2luY2x1ZGUgPG5ldC9uZXRsaW5rLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAogc3RhdGljIHN0cnVjdCBzb2NrICp4ZnJtX25sOwpAQCAtOTQ4LDExICs5NDgsNiBAQAogCVtYRlJNX01TR19GTFVTSFBPTElDWSAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fZmx1c2hfcG9saWN5ICB9LAogfTsKIAotc3RhdGljIGludCB4ZnJtX2RvbmUoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQotewotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IHhmcm1fdXNlcl9yY3ZfbXNnKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLCBpbnQgKmVycnApCiB7CiAJc3RydWN0IHJ0YXR0ciAqeGZybWFbWEZSTUFfTUFYXTsKQEAgLTk4NCwyMCArOTc5LDE1IEBACiAJaWYgKCh0eXBlID09IChYRlJNX01TR19HRVRTQSAtIFhGUk1fTVNHX0JBU0UpIHx8CiAJICAgICB0eXBlID09IChYRlJNX01TR19HRVRQT0xJQ1kgLSBYRlJNX01TR19CQVNFKSkgJiYKIAkgICAgKG5saC0+bmxtc2dfZmxhZ3MgJiBOTE1fRl9EVU1QKSkgewotCQl1MzIgcmxlbjsKLQogCQlpZiAobGluay0+ZHVtcCA9PSBOVUxMKQogCQkJZ290byBlcnJfZWludmFsOwogCiAJCWlmICgoKmVycnAgPSBuZXRsaW5rX2R1bXBfc3RhcnQoeGZybV9ubCwgc2tiLCBubGgsCi0JCQkJCQlsaW5rLT5kdW1wLAotCQkJCQkJeGZybV9kb25lKSkgIT0gMCkgeworCQkJCQkJbGluay0+ZHVtcCwgTlVMTCkpICE9IDApIHsKIAkJCXJldHVybiAtMTsKIAkJfQotCQlybGVuID0gTkxNU0dfQUxJR04obmxoLT5ubG1zZ19sZW4pOwotCQlpZiAocmxlbiA+IHNrYi0+bGVuKQotCQkJcmxlbiA9IHNrYi0+bGVuOwotCQlza2JfcHVsbChza2IsIHJsZW4pOworCisJCW5ldGxpbmtfcXVldWVfc2tpcChubGgsIHNrYik7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTEwMzIsNjAgKzEwMjIsMTMgQEAKIAlyZXR1cm4gLTE7CiB9CiAKLXN0YXRpYyBpbnQgeGZybV91c2VyX3Jjdl9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlpbnQgZXJyOwotCXN0cnVjdCBubG1zZ2hkciAqbmxoOwotCi0Jd2hpbGUgKHNrYi0+bGVuID49IE5MTVNHX1NQQUNFKDApKSB7Ci0JCXUzMiBybGVuOwotCi0JCW5saCA9IChzdHJ1Y3Qgbmxtc2doZHIgKikgc2tiLT5kYXRhOwotCQlpZiAobmxoLT5ubG1zZ19sZW4gPCBzaXplb2YoKm5saCkgfHwKLQkJICAgIHNrYi0+bGVuIDwgbmxoLT5ubG1zZ19sZW4pCi0JCQlyZXR1cm4gMDsKLQkJcmxlbiA9IE5MTVNHX0FMSUdOKG5saC0+bmxtc2dfbGVuKTsKLQkJaWYgKHJsZW4gPiBza2ItPmxlbikKLQkJCXJsZW4gPSBza2ItPmxlbjsKLQkJaWYgKHhmcm1fdXNlcl9yY3ZfbXNnKHNrYiwgbmxoLCAmZXJyKSA8IDApIHsKLQkJCWlmIChlcnIgPT0gMCkKLQkJCQlyZXR1cm4gLTE7Ci0JCQluZXRsaW5rX2Fjayhza2IsIG5saCwgZXJyKTsKLQkJfSBlbHNlIGlmIChubGgtPm5sbXNnX2ZsYWdzICYgTkxNX0ZfQUNLKQotCQkJbmV0bGlua19hY2soc2tiLCBubGgsIDApOwotCQlza2JfcHVsbChza2IsIHJsZW4pOwotCX0KLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgdm9pZCB4ZnJtX25ldGxpbmtfcmN2KHN0cnVjdCBzb2NrICpzaywgaW50IGxlbikKIHsKLQl1bnNpZ25lZCBpbnQgcWxlbiA9IHNrYl9xdWV1ZV9sZW4oJnNrLT5za19yZWNlaXZlX3F1ZXVlKTsKKwl1bnNpZ25lZCBpbnQgcWxlbiA9IDA7CiAKIAlkbyB7Ci0JCXN0cnVjdCBza19idWZmICpza2I7Ci0KIAkJZG93bigmeGZybV9jZmdfc2VtKTsKLQotCQlpZiAocWxlbiA+IHNrYl9xdWV1ZV9sZW4oJnNrLT5za19yZWNlaXZlX3F1ZXVlKSkKLQkJCXFsZW4gPSBza2JfcXVldWVfbGVuKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSk7Ci0KLQkJZm9yICg7IHFsZW47IHFsZW4tLSkgewotCQkJc2tiID0gc2tiX2RlcXVldWUoJnNrLT5za19yZWNlaXZlX3F1ZXVlKTsKLQkJCWlmICh4ZnJtX3VzZXJfcmN2X3NrYihza2IpKSB7Ci0JCQkJaWYgKHNrYi0+bGVuKQotCQkJCQlza2JfcXVldWVfaGVhZCgmc2stPnNrX3JlY2VpdmVfcXVldWUsCi0JCQkJCQkgICAgICAgc2tiKTsKLQkJCQllbHNlIHsKLQkJCQkJa2ZyZWVfc2tiKHNrYik7Ci0JCQkJCXFsZW4tLTsKLQkJCQl9Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlrZnJlZV9za2Ioc2tiKTsKLQkJfQotCisJCW5ldGxpbmtfcnVuX3F1ZXVlKHNrLCAmcWxlbiwgJnhmcm1fdXNlcl9yY3ZfbXNnKTsKIAkJdXAoJnhmcm1fY2ZnX3NlbSk7CiAKIAl9IHdoaWxlIChxbGVuKTsKZGlmZiAtLWdpdCBhL3NjcmlwdHMva2NvbmZpZy9NYWtlZmlsZSBiL3NjcmlwdHMva2NvbmZpZy9NYWtlZmlsZQppbmRleCBjNjVjNDM1Li45ZDY3NzgyIDEwMDY0NAotLS0gYS9zY3JpcHRzL2tjb25maWcvTWFrZWZpbGUKKysrIGIvc2NyaXB0cy9rY29uZmlnL01ha2VmaWxlCkBAIC0xMTQsNyArMTE0LDcgQEAKIGVuZGlmCiAKIGNsZWFuLWZpbGVzCTo9IGxrY19kZWZzLmggcWNvbmYubW9jIC50bXBfcXRjaGVjayBcCi0JCSAgIC50bXBfZ3RrY2hlY2sgemNvbmYudGFiLmMgemNvbmYudGFiLmggbGV4Lnpjb25mLmMKKwkJICAgLnRtcF9ndGtjaGVjayB6Y29uZi50YWIuYyBsZXguemNvbmYuYyB6Y29uZi5oYXNoLmMKIAogIyBOZWVkZWQgZm9yIHN5c3RlbXMgd2l0aG91dCBnZXR0ZXh0CiBLQlVJTERfSEFWRV9OTFMgOj0gJChzaGVsbCBcCkBAIC0xMzYsMTIgKzEzNiw2IEBACiBIT1NUQ0ZMQUdTX2djb25mLm8JPSBgcGtnLWNvbmZpZyBndGsrLTIuMCBnbW9kdWxlLTIuMCBsaWJnbGFkZS0yLjAgLS1jZmxhZ3NgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgLUQgTEtDX0RJUkVDVF9MSU5LCiAKLSQob2JqKS9jb25mLm8gJChvYmopL21jb25mLm8gJChvYmopL3Fjb25mLm8gJChvYmopL2djb25mLm8gJChvYmopL2t4Z2V0dGV4dDogJChvYmopL3pjb25mLnRhYi5oCi0KLSQob2JqKS96Y29uZi50YWIuaDogJChzcmMpL3pjb25mLnRhYi5oX3NoaXBwZWQKLSQob2JqKS96Y29uZi50YWIuYzogJChzcmMpL3pjb25mLnRhYi5jX3NoaXBwZWQKLSQob2JqKS9sZXguemNvbmYuYzogJChzcmMpL2xleC56Y29uZi5jX3NoaXBwZWQKLQogJChvYmopL3Fjb25mLm86ICQob2JqKS8udG1wX3F0Y2hlY2sKIAogaWZlcSAoJChxY29uZi10YXJnZXQpLDEpCkBAIC0yMDcsNyArMjAxLDcgQEAKIAlmaQogZW5kaWYKIAotJChvYmopL3pjb25mLnRhYi5vOiAkKG9iaikvbGV4Lnpjb25mLmMKKyQob2JqKS96Y29uZi50YWIubzogJChvYmopL2xleC56Y29uZi5jICQob2JqKS96Y29uZi5oYXNoLmMKIAogJChvYmopL2tjb25maWdfbG9hZC5vOiAkKG9iaikvbGtjX2RlZnMuaAogCkBAIC0yMjMsMjAgKzIxNywyNyBAQAogCiAKICMjIwotIyBUaGUgZm9sbG93aW5nIHJlcXVpcmVzIGZsZXgvYmlzb24KKyMgVGhlIGZvbGxvd2luZyByZXF1aXJlcyBmbGV4L2Jpc29uL2dwZXJmCiAjIEJ5IGRlZmF1bHQgd2UgdXNlIHRoZSBfc2hpcHBlZCB2ZXJzaW9ucywgdW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZSBpZgogIyB5b3UgYXJlIG1vZGlmeWluZyB0aGUgZmxleC9iaXNvbiBzcmMuCiAjIExLQ19HRU5QQVJTRVIgOj0gMQogCiBpZmRlZiBMS0NfR0VOUEFSU0VSCiAKLSQob2JqKS96Y29uZi50YWIuYzogJChvYmopL3pjb25mLnkgCi0kKG9iaikvemNvbmYudGFiLmg6ICQob2JqKS96Y29uZi50YWIuYworJChvYmopL3pjb25mLnRhYi5jOiAkKHNyYykvemNvbmYueQorJChvYmopL2xleC56Y29uZi5jOiAkKHNyYykvemNvbmYubAorJChvYmopL3pjb25mLmhhc2guYzogJChzcmMpL3pjb25mLmdwZXJmCiAKICUudGFiLmM6ICUueQotCWJpc29uIC10IC1kIC12IC1iICQqIC1wICQobm90ZGlyICQqKSAkPAorCWJpc29uIC1sIC1iICQqIC1wICQobm90ZGlyICQqKSAkPAorCWNwICRAICRAX3NoaXBwZWQKIAogbGV4LiUuYzogJS5sCi0JZmxleCAtUCQobm90ZGlyICQqKSAtbyRAICQ8CisJZmxleCAtTCAtUCQobm90ZGlyICQqKSAtbyRAICQ8CisJY3AgJEAgJEBfc2hpcHBlZAorCislLmhhc2guYzogJS5ncGVyZgorCWdwZXJmIDwgJDwgPiAkQAorCWNwICRAICRAX3NoaXBwZWQKIAogZW5kaWYKZGlmZiAtLWdpdCBhL3NjcmlwdHMva2NvbmZpZy9jb25mLmMgYi9zY3JpcHRzL2tjb25maWcvY29uZi5jCmluZGV4IGJjMjBjYWIuLjhiYTVkMjkgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy9jb25mLmMKKysrIGIvc2NyaXB0cy9rY29uZmlnL2NvbmYuYwpAQCAtODIsNiArODIsMTUgQEAKIAl9CiAKIAlzd2l0Y2ggKGlucHV0X21vZGUpIHsKKwljYXNlIHNldF9ubzoKKwljYXNlIHNldF9tb2Q6CisJY2FzZSBzZXRfeWVzOgorCWNhc2Ugc2V0X3JhbmRvbToKKwkJaWYgKHN5bV9oYXNfdmFsdWUoc3ltKSkgeworCQkJcHJpbnRmKCIlc1xuIiwgZGVmKTsKKwkJCXJldHVybjsKKwkJfQorCQlicmVhazsKIAljYXNlIGFza19uZXc6CiAJY2FzZSBhc2tfc2lsZW50OgogCQlpZiAoc3ltX2hhc192YWx1ZShzeW0pKSB7CkBAIC00NjcsMTUgKzQ3NiwxNCBAQAogCQlyZXR1cm47CiAKIAlzeW0gPSBtZW51LT5zeW07Ci0JaWYgKHN5bSkgewotCQlpZiAoc3ltX2lzX2NoYW5nYWJsZShzeW0pICYmICFzeW1faGFzX3ZhbHVlKHN5bSkpIHsKKwlpZiAoc3ltICYmICFzeW1faGFzX3ZhbHVlKHN5bSkpIHsKKwkJaWYgKHN5bV9pc19jaGFuZ2FibGUoc3ltKSB8fAorCQkgICAgKHN5bV9pc19jaG9pY2Uoc3ltKSAmJiBzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSkgPT0geWVzKSkgewogCQkJaWYgKCFjb25mX2NudCsrKQogCQkJCXByaW50ZihfKCIqXG4qIFJlc3RhcnQgY29uZmlnLi4uXG4qXG4iKSk7CiAJCQlyb290RW50cnkgPSBtZW51X2dldF9wYXJlbnRfbWVudShtZW51KTsKIAkJCWNvbmYocm9vdEVudHJ5KTsKIAkJfQotCQlpZiAoc3ltX2lzX2Nob2ljZShzeW0pICYmIHN5bV9nZXRfdHJpc3RhdGVfdmFsdWUoc3ltKSAhPSBtb2QpCi0JCQlyZXR1cm47CiAJfQogCiAJZm9yIChjaGlsZCA9IG1lbnUtPmxpc3Q7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0KQpAQCAtNTU5LDYgKzU2NywyNyBAQAogCWNhc2UgYXNrX25ldzoKIAkJY29uZl9yZWFkKE5VTEwpOwogCQlicmVhazsKKwljYXNlIHNldF9ubzoKKwljYXNlIHNldF9tb2Q6CisJY2FzZSBzZXRfeWVzOgorCWNhc2Ugc2V0X3JhbmRvbToKKwkJbmFtZSA9IGdldGVudigiS0NPTkZJR19BTExDT05GSUciKTsKKwkJaWYgKG5hbWUgJiYgIXN0YXQobmFtZSwgJnRtcHN0YXQpKSB7CisJCQljb25mX3JlYWRfc2ltcGxlKG5hbWUpOworCQkJYnJlYWs7CisJCX0KKwkJc3dpdGNoIChpbnB1dF9tb2RlKSB7CisJCWNhc2Ugc2V0X25vOgkgbmFtZSA9ICJhbGxuby5jb25maWciOyBicmVhazsKKwkJY2FzZSBzZXRfbW9kOgkgbmFtZSA9ICJhbGxtb2QuY29uZmlnIjsgYnJlYWs7CisJCWNhc2Ugc2V0X3llczoJIG5hbWUgPSAiYWxseWVzLmNvbmZpZyI7IGJyZWFrOworCQljYXNlIHNldF9yYW5kb206IG5hbWUgPSAiYWxscmFuZG9tLmNvbmZpZyI7IGJyZWFrOworCQlkZWZhdWx0OiBicmVhazsKKwkJfQorCQlpZiAoIXN0YXQobmFtZSwgJnRtcHN0YXQpKQorCQkJY29uZl9yZWFkX3NpbXBsZShuYW1lKTsKKwkJZWxzZSBpZiAoIXN0YXQoImFsbC5jb25maWciLCAmdG1wc3RhdCkpCisJCQljb25mX3JlYWRfc2ltcGxlKCJhbGwuY29uZmlnIik7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL3NjcmlwdHMva2NvbmZpZy9jb25mZGF0YS5jIGIvc2NyaXB0cy9rY29uZmlnL2NvbmZkYXRhLmMKaW5kZXggMDJmNjcwYy4uY2NkNDUxMyAxMDA2NDQKLS0tIGEvc2NyaXB0cy9rY29uZmlnL2NvbmZkYXRhLmMKKysrIGIvc2NyaXB0cy9rY29uZmlnL2NvbmZkYXRhLmMKQEAgLTE0LDYgKzE0LDEyIEBACiAjZGVmaW5lIExLQ19ESVJFQ1RfTElOSwogI2luY2x1ZGUgImxrYy5oIgogCitzdGF0aWMgdm9pZCBjb25mX3dhcm5pbmcoY29uc3QgY2hhciAqZm10LCAuLi4pCisJX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpOworCitzdGF0aWMgY29uc3QgY2hhciAqY29uZl9maWxlbmFtZTsKK3N0YXRpYyBpbnQgY29uZl9saW5lbm8sIGNvbmZfd2FybmluZ3MsIGNvbmZfdW5zYXZlZDsKKwogY29uc3QgY2hhciBjb25mX2RlZl9maWxlbmFtZVtdID0gIi5jb25maWciOwogCiBjb25zdCBjaGFyIGNvbmZfZGVmbmFtZVtdID0gImFyY2gvJEFSQ0gvZGVmY29uZmlnIjsKQEAgLTI3LDYgKzMzLDE3IEBACiAJTlVMTCwKIH07CiAKK3N0YXRpYyB2b2lkIGNvbmZfd2FybmluZyhjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCXZhX3N0YXJ0KGFwLCBmbXQpOworCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6d2FybmluZzogIiwgY29uZl9maWxlbmFtZSwgY29uZl9saW5lbm8pOworCXZmcHJpbnRmKHN0ZGVyciwgZm10LCBhcCk7CisJZnByaW50ZihzdGRlcnIsICJcbiIpOworCXZhX2VuZChhcCk7CisJY29uZl93YXJuaW5ncysrOworfQorCiBzdGF0aWMgY2hhciAqY29uZl9leHBhbmRfdmFsdWUoY29uc3QgY2hhciAqaW4pCiB7CiAJc3RydWN0IHN5bWJvbCAqc3ltOwpAQCAtNjksMTUgKzg2LDEyIEBACiAJcmV0dXJuIG5hbWU7CiB9CiAKLWludCBjb25mX3JlYWQoY29uc3QgY2hhciAqbmFtZSkKK2ludCBjb25mX3JlYWRfc2ltcGxlKGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJRklMRSAqaW4gPSBOVUxMOwogCWNoYXIgbGluZVsxMDI0XTsKIAljaGFyICpwLCAqcDI7Ci0JaW50IGxpbmVubyA9IDA7CiAJc3RydWN0IHN5bWJvbCAqc3ltOwotCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKLQlzdHJ1Y3QgZXhwciAqZTsKIAlpbnQgaTsKIAogCWlmIChuYW1lKSB7CkBAIC05NSwxMiArMTA5LDE4IEBACiAJCQl9CiAJCX0KIAl9Ci0KIAlpZiAoIWluKQogCQlyZXR1cm4gMTsKIAorCWNvbmZfZmlsZW5hbWUgPSBuYW1lOworCWNvbmZfbGluZW5vID0gMDsKKwljb25mX3dhcm5pbmdzID0gMDsKKwljb25mX3Vuc2F2ZWQgPSAwOworCiAJZm9yX2FsbF9zeW1ib2xzKGksIHN5bSkgewogCQlzeW0tPmZsYWdzIHw9IFNZTUJPTF9ORVcgfCBTWU1CT0xfQ0hBTkdFRDsKKwkJaWYgKHN5bV9pc19jaG9pY2Uoc3ltKSkKKwkJCXN5bS0+ZmxhZ3MgJj0gflNZTUJPTF9ORVc7CiAJCXN5bS0+ZmxhZ3MgJj0gflNZTUJPTF9WQUxJRDsKIAkJc3dpdGNoIChzeW0tPnR5cGUpIHsKIAkJY2FzZSBTX0lOVDoKQEAgLTExNSw3ICsxMzUsNyBAQAogCX0KIAogCXdoaWxlIChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGluKSkgewotCQlsaW5lbm8rKzsKKwkJY29uZl9saW5lbm8rKzsKIAkJc3ltID0gTlVMTDsKIAkJc3dpdGNoIChsaW5lWzBdKSB7CiAJCWNhc2UgJyMnOgpAQCAtMTI5LDcgKzE0OSwxMCBAQAogCQkJCWNvbnRpbnVlOwogCQkJc3ltID0gc3ltX2ZpbmQobGluZSArIDkpOwogCQkJaWYgKCFzeW0pIHsKLQkJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiB0cnlpbmcgdG8gYXNzaWduIG5vbmV4aXN0ZW50IHN5bWJvbCAlc1xuIiwgbmFtZSwgbGluZW5vLCBsaW5lICsgOSk7CisJCQkJY29uZl93YXJuaW5nKCJ0cnlpbmcgdG8gYXNzaWduIG5vbmV4aXN0ZW50IHN5bWJvbCAlcyIsIGxpbmUgKyA5KTsKKwkJCQlicmVhazsKKwkJCX0gZWxzZSBpZiAoIShzeW0tPmZsYWdzICYgU1lNQk9MX05FVykpIHsKKwkJCQljb25mX3dhcm5pbmcoInRyeWluZyB0byByZWFzc2lnbiBzeW1ib2wgJXMiLCBzeW0tPm5hbWUpOwogCQkJCWJyZWFrOwogCQkJfQogCQkJc3dpdGNoIChzeW0tPnR5cGUpIHsKQEAgLTE0Myw4ICsxNjYsMTAgQEAKIAkJCX0KIAkJCWJyZWFrOwogCQljYXNlICdDJzoKLQkJCWlmIChtZW1jbXAobGluZSwgIkNPTkZJR18iLCA3KSkKKwkJCWlmIChtZW1jbXAobGluZSwgIkNPTkZJR18iLCA3KSkgeworCQkJCWNvbmZfd2FybmluZygidW5leHBlY3RlZCBkYXRhIik7CiAJCQkJY29udGludWU7CisJCQl9CiAJCQlwID0gc3RyY2hyKGxpbmUgKyA3LCAnPScpOwogCQkJaWYgKCFwKQogCQkJCWNvbnRpbnVlOwpAQCAtMTU0LDcgKzE3OSwxMCBAQAogCQkJCSpwMiA9IDA7CiAJCQlzeW0gPSBzeW1fZmluZChsaW5lICsgNyk7CiAJCQlpZiAoIXN5bSkgewotCQkJCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IHRyeWluZyB0byBhc3NpZ24gbm9uZXhpc3RlbnQgc3ltYm9sICVzXG4iLCBuYW1lLCBsaW5lbm8sIGxpbmUgKyA3KTsKKwkJCQljb25mX3dhcm5pbmcoInRyeWluZyB0byBhc3NpZ24gbm9uZXhpc3RlbnQgc3ltYm9sICVzIiwgbGluZSArIDcpOworCQkJCWJyZWFrOworCQkJfSBlbHNlIGlmICghKHN5bS0+ZmxhZ3MgJiBTWU1CT0xfTkVXKSkgeworCQkJCWNvbmZfd2FybmluZygidHJ5aW5nIHRvIHJlYXNzaWduIHN5bWJvbCAlcyIsIHN5bS0+bmFtZSk7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCQlzd2l0Y2ggKHN5bS0+dHlwZSkgewpAQCAtMTc1LDYgKzIwMyw3IEBACiAJCQkJCXN5bS0+ZmxhZ3MgJj0gflNZTUJPTF9ORVc7CiAJCQkJCWJyZWFrOwogCQkJCX0KKwkJCQljb25mX3dhcm5pbmcoInN5bWJvbCB2YWx1ZSAnJXMnIGludmFsaWQgZm9yICVzIiwgcCwgc3ltLT5uYW1lKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgU19TVFJJTkc6CiAJCQkJaWYgKCpwKysgIT0gJyInKQpAQCAtMTg3LDggKzIxNiw4IEBACiAJCQkJCW1lbW1vdmUocDIsIHAyICsgMSwgc3RybGVuKHAyKSk7CiAJCQkJfQogCQkJCWlmICghcDIpIHsKLQkJCQkJZnByaW50ZihzdGRlcnIsICIlczolZDogaW52YWxpZCBzdHJpbmcgZm91bmRcbiIsIG5hbWUsIGxpbmVubyk7Ci0JCQkJCWV4aXQoMSk7CisJCQkJCWNvbmZfd2FybmluZygiaW52YWxpZCBzdHJpbmcgZm91bmQiKTsKKwkJCQkJY29udGludWU7CiAJCQkJfQogCQkJY2FzZSBTX0lOVDoKIAkJCWNhc2UgU19IRVg6CkBAIC0xOTYsOCArMjI1LDggQEAKIAkJCQkJc3ltLT51c2VyLnZhbCA9IHN0cmR1cChwKTsKIAkJCQkJc3ltLT5mbGFncyAmPSB+U1lNQk9MX05FVzsKIAkJCQl9IGVsc2UgewotCQkJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBzeW1ib2wgdmFsdWUgJyVzJyBpbnZhbGlkIGZvciAlc1xuIiwgbmFtZSwgbGluZW5vLCBwLCBzeW0tPm5hbWUpOwotCQkJCQlleGl0KDEpOworCQkJCQljb25mX3dhcm5pbmcoInN5bWJvbCB2YWx1ZSAnJXMnIGludmFsaWQgZm9yICVzIiwgcCwgc3ltLT5uYW1lKTsKKwkJCQkJY29udGludWU7CiAJCQkJfQogCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoKQEAgLTIwNyw2ICsyMzYsNyBAQAogCQljYXNlICdcbic6CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKKwkJCWNvbmZfd2FybmluZygidW5leHBlY3RlZCBkYXRhIik7CiAJCQljb250aW51ZTsKIAkJfQogCQlpZiAoc3ltICYmIHN5bV9pc19jaG9pY2VfdmFsdWUoc3ltKSkgewpAQCAtMjE1LDI1ICsyNDUsNjMgQEAKIAkJCWNhc2Ugbm86CiAJCQkJYnJlYWs7CiAJCQljYXNlIG1vZDoKLQkJCQlpZiAoY3MtPnVzZXIudHJpID09IHllcykKLQkJCQkJLyogd2Fybj8gKi87CisJCQkJaWYgKGNzLT51c2VyLnRyaSA9PSB5ZXMpIHsKKwkJCQkJY29uZl93YXJuaW5nKCIlcyBjcmVhdGVzIGluY29uc2lzdGVudCBjaG9pY2Ugc3RhdGUiLCBzeW0tPm5hbWUpOworCQkJCQljcy0+ZmxhZ3MgfD0gU1lNQk9MX05FVzsKKwkJCQl9CiAJCQkJYnJlYWs7CiAJCQljYXNlIHllczoKLQkJCQlpZiAoY3MtPnVzZXIudHJpICE9IG5vKQotCQkJCQkvKiB3YXJuPyAqLzsKLQkJCQljcy0+dXNlci52YWwgPSBzeW07CisJCQkJaWYgKGNzLT51c2VyLnRyaSAhPSBubykgeworCQkJCQljb25mX3dhcm5pbmcoIiVzIGNyZWF0ZXMgaW5jb25zaXN0ZW50IGNob2ljZSBzdGF0ZSIsIHN5bS0+bmFtZSk7CisJCQkJCWNzLT5mbGFncyB8PSBTWU1CT0xfTkVXOworCQkJCX0gZWxzZQorCQkJCQljcy0+dXNlci52YWwgPSBzeW07CiAJCQkJYnJlYWs7CiAJCQl9CiAJCQljcy0+dXNlci50cmkgPSBFX09SKGNzLT51c2VyLnRyaSwgc3ltLT51c2VyLnRyaSk7Ci0JCQljcy0+ZmxhZ3MgJj0gflNZTUJPTF9ORVc7CiAJCX0KIAl9CiAJZmNsb3NlKGluKTsKIAogCWlmIChtb2R1bGVzX3N5bSkKIAkJc3ltX2NhbGNfdmFsdWUobW9kdWxlc19zeW0pOworCXJldHVybiAwOworfQorCitpbnQgY29uZl9yZWFkKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IHN5bWJvbCAqc3ltOworCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKKwlzdHJ1Y3QgZXhwciAqZTsKKwlpbnQgaTsKKworCWlmIChjb25mX3JlYWRfc2ltcGxlKG5hbWUpKQorCQlyZXR1cm4gMTsKKwogCWZvcl9hbGxfc3ltYm9scyhpLCBzeW0pIHsKIAkJc3ltX2NhbGNfdmFsdWUoc3ltKTsKKwkJaWYgKHN5bV9pc19jaG9pY2Uoc3ltKSB8fCAoc3ltLT5mbGFncyAmIFNZTUJPTF9BVVRPKSkKKwkJCWdvdG8gc3ltX29rOworCQlpZiAoc3ltX2hhc192YWx1ZShzeW0pICYmIChzeW0tPmZsYWdzICYgU1lNQk9MX1dSSVRFKSkgeworCQkJLyogY2hlY2sgdGhhdCBjYWxjdWxhdGVkIHZhbHVlIGFncmVlcyB3aXRoIHNhdmVkIHZhbHVlICovCisJCQlzd2l0Y2ggKHN5bS0+dHlwZSkgeworCQkJY2FzZSBTX0JPT0xFQU46CisJCQljYXNlIFNfVFJJU1RBVEU6CisJCQkJaWYgKHN5bS0+dXNlci50cmkgIT0gc3ltX2dldF90cmlzdGF0ZV92YWx1ZShzeW0pKQorCQkJCQlicmVhazsKKwkJCQlpZiAoIXN5bV9pc19jaG9pY2Uoc3ltKSkKKwkJCQkJZ290byBzeW1fb2s7CisJCQlkZWZhdWx0OgorCQkJCWlmICghc3RyY21wKHN5bS0+Y3Vyci52YWwsIHN5bS0+dXNlci52YWwpKQorCQkJCQlnb3RvIHN5bV9vazsKKwkJCQlicmVhazsKKwkJCX0KKwkJfSBlbHNlIGlmICghc3ltX2hhc192YWx1ZShzeW0pICYmICEoc3ltLT5mbGFncyAmIFNZTUJPTF9XUklURSkpCisJCQkvKiBubyBwcmV2aW91cyB2YWx1ZSBhbmQgbm90IHNhdmVkICovCisJCQlnb3RvIHN5bV9vazsKKwkJY29uZl91bnNhdmVkKys7CisJCS8qIG1heWJlIHByaW50IHZhbHVlIGluIHZlcmJvc2UgbW9kZS4uLiAqLworCXN5bV9vazoKIAkJaWYgKHN5bV9oYXNfdmFsdWUoc3ltKSAmJiAhc3ltX2lzX2Nob2ljZV92YWx1ZShzeW0pKSB7CiAJCQlpZiAoc3ltLT52aXNpYmxlID09IG5vKQogCQkJCXN5bS0+ZmxhZ3MgfD0gU1lNQk9MX05FVzsKQEAgLTI0MSw4ICszMDksMTAgQEAKIAkJCWNhc2UgU19TVFJJTkc6CiAJCQljYXNlIFNfSU5UOgogCQkJY2FzZSBTX0hFWDoKLQkJCQlpZiAoIXN5bV9zdHJpbmdfd2l0aGluX3JhbmdlKHN5bSwgc3ltLT51c2VyLnZhbCkpCisJCQkJaWYgKCFzeW1fc3RyaW5nX3dpdGhpbl9yYW5nZShzeW0sIHN5bS0+dXNlci52YWwpKSB7CiAJCQkJCXN5bS0+ZmxhZ3MgfD0gU1lNQk9MX05FVzsKKwkJCQkJc3ltLT5mbGFncyAmPSB+U1lNQk9MX1ZBTElEOworCQkJCX0KIAkJCWRlZmF1bHQ6CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC0yNTUsNyArMzI1LDcgQEAKIAkJCQlzeW0tPmZsYWdzIHw9IGUtPnJpZ2h0LnN5bS0+ZmxhZ3MgJiBTWU1CT0xfTkVXOwogCX0KIAotCXN5bV9jaGFuZ2VfY291bnQgPSAxOworCXN5bV9jaGFuZ2VfY291bnQgPSBjb25mX3dhcm5pbmdzICYmIGNvbmZfdW5zYXZlZDsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnL2V4cHIuaCBiL3NjcmlwdHMva2NvbmZpZy9leHByLmgKaW5kZXggN2QzOWZmNC4uMWIzNmVmMSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9rY29uZmlnL2V4cHIuaAorKysgYi9zY3JpcHRzL2tjb25maWcvZXhwci5oCkBAIC05Myw3ICs5Myw2IEBACiAjZGVmaW5lIFNZTUJPTF9ORVcJCTB4MDgwMAogI2RlZmluZSBTWU1CT0xfQVVUTwkJMHgxMDAwCiAjZGVmaW5lIFNZTUJPTF9DSEVDS0VECQkweDIwMDAKLSNkZWZpbmUgU1lNQk9MX0NIRUNLX0RPTkUJMHg0MDAwCiAjZGVmaW5lIFNZTUJPTF9XQVJORUQJCTB4ODAwMAogCiAjZGVmaW5lIFNZTUJPTF9NQVhMRU5HVEgJMjU2CmRpZmYgLS1naXQgYS9zY3JpcHRzL2tjb25maWcvbGV4Lnpjb25mLmNfc2hpcHBlZCBiL3NjcmlwdHMva2NvbmZpZy9sZXguemNvbmYuY19zaGlwcGVkCmluZGV4IDIyZGRhMTEuLjI0ZTNjOGMgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy9sZXguemNvbmYuY19zaGlwcGVkCisrKyBiL3NjcmlwdHMva2NvbmZpZy9sZXguemNvbmYuY19zaGlwcGVkCkBAIC0xLDUgKzEsNSBAQAogCi0jbGluZSAzICJsZXguemNvbmYuYyIKKyNsaW5lIDMgInNjcmlwdHMva2NvbmZpZy9sZXguemNvbmYuYyIKIAogI2RlZmluZSAgWVlfSU5UX0FMSUdORUQgc2hvcnQgaW50CiAKQEAgLTMyMyw3ICszMjMsNyBAQAogCiAvKiBCZWdpbiB1c2VyIHNlY3QzICovCiAKLSNkZWZpbmUgemNvbmZ3cmFwKG4pIDEKKyNkZWZpbmUgemNvbmZ3cmFwKCkgMQogI2RlZmluZSBZWV9TS0lQX1lZV1JBUAogCiB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgWVlfQ0hBUjsKQEAgLTMzOCwxNTY3ICszMzgsMzIzIEBACiAKIGV4dGVybiBjaGFyICp6Y29uZnRleHQ7CiAjZGVmaW5lIHl5dGV4dF9wdHIgemNvbmZ0ZXh0Ci1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfbnh0W11bMzhdID0KK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9ueHRbXVsxN10gPQogICAgIHsKICAgICB7CiAgICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsCi0gICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsCi0gICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsCi0gICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAKKyAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMAogICAgIH0sCiAKICAgICB7CiAgICAgICAgMTEsICAgMTIsICAgMTMsICAgMTQsICAgMTIsICAgMTIsICAgMTUsICAgMTIsICAgMTIsICAgMTIsCi0gICAgICAgMTIsICAgMTIsICAgMTIsICAgMTIsICAgMTIsICAgMTIsICAgMTIsICAgMTIsICAgMTIsICAgMTIsCi0gICAgICAgMTIsICAgMTIsICAgMTIsICAgMTIsICAgMTIsICAgMTIsICAgMTIsICAgMTIsICAgMTIsICAgMTIsCi0gICAgICAgMTIsICAgMTIsICAgMTIsICAgMTIsICAgMTIsICAgMTIsICAgMTIsICAgMTIKKyAgICAgICAxMiwgICAxMiwgICAxMiwgICAxMiwgICAxMiwgICAxMiwgICAxMgogICAgIH0sCiAKICAgICB7CiAgICAgICAgMTEsICAgMTIsICAgMTMsICAgMTQsICAgMTIsICAgMTIsICAgMTUsICAgMTIsICAgMTIsICAgMTIsCi0gICAgICAgMTIsICAgMTIsICAgMTIsICAgMTIsICAgMTIsICAgMTIsICAgMTIsICAgMTIsICAgMTIsICAgMTIsCi0KLSAgICAgICAxMiwgICAxMiwgICAxMiwgICAxMiwgICAxMiwgICAxMiwgICAxMiwgICAxMiwgICAxMiwgICAxMiwKLSAgICAgICAxMiwgICAxMiwgICAxMiwgICAxMiwgICAxMiwgICAxMiwgICAxMiwgICAxMgorICAgICAgIDEyLCAgIDEyLCAgIDEyLCAgIDEyLCAgIDEyLCAgIDEyLCAgIDEyCiAgICAgfSwKIAogICAgIHsKICAgICAgICAxMSwgICAxNiwgICAxNiwgICAxNywgICAxNiwgICAxNiwgICAxNiwgICAxNiwgICAxNiwgICAxNiwKLSAgICAgICAxNiwgICAxNiwgICAxNiwgICAxOCwgICAxNiwgICAxNiwgICAxOCwgICAxOCwgICAxOSwgICAyMCwKLSAgICAgICAyMSwgICAyMiwgICAxOCwgICAxOCwgICAyMywgICAyNCwgICAxOCwgICAyNSwgICAxOCwgICAyNiwKLSAgICAgICAyNywgICAxOCwgICAyOCwgICAyOSwgICAzMCwgICAxOCwgICAxOCwgICAxNgorICAgICAgIDE2LCAgIDE2LCAgIDE2LCAgIDE4LCAgIDE2LCAgIDE2LCAgIDE2CiAgICAgfSwKIAogICAgIHsKICAgICAgICAxMSwgICAxNiwgICAxNiwgICAxNywgICAxNiwgICAxNiwgICAxNiwgICAxNiwgICAxNiwgICAxNiwKLSAgICAgICAxNiwgICAxNiwgICAxNiwgICAxOCwgICAxNiwgICAxNiwgICAxOCwgICAxOCwgICAxOSwgICAyMCwKLSAgICAgICAyMSwgICAyMiwgICAxOCwgICAxOCwgICAyMywgICAyNCwgICAxOCwgICAyNSwgICAxOCwgICAyNiwKLSAgICAgICAyNywgICAxOCwgICAyOCwgICAyOSwgICAzMCwgICAxOCwgICAxOCwgICAxNgorICAgICAgIDE2LCAgIDE2LCAgIDE2LCAgIDE4LCAgIDE2LCAgIDE2LCAgIDE2CiAKICAgICB9LAogCiAgICAgewotICAgICAgIDExLCAgIDMxLCAgIDMyLCAgIDMzLCAgIDMxLCAgIDMxLCAgIDMxLCAgIDMxLCAgIDMxLCAgIDMxLAotICAgICAgIDMxLCAgIDMxLCAgIDMxLCAgIDMxLCAgIDMxLCAgIDMxLCAgIDMxLCAgIDMxLCAgIDMxLCAgIDMxLAotICAgICAgIDMxLCAgIDMxLCAgIDMxLCAgIDMxLCAgIDMxLCAgIDMxLCAgIDMxLCAgIDMxLCAgIDMxLCAgIDMxLAotICAgICAgIDMxLCAgIDMxLCAgIDMxLCAgIDMxLCAgIDMxLCAgIDMxLCAgIDMxLCAgIDMxCisgICAgICAgMTEsICAgMTksICAgMjAsICAgMjEsICAgMTksICAgMTksICAgMTksICAgMTksICAgMTksICAgMTksCisgICAgICAgMTksICAgMTksICAgMTksICAgMTksICAgMTksICAgMTksICAgMTkKICAgICB9LAogCiAgICAgewotICAgICAgIDExLCAgIDMxLCAgIDMyLCAgIDMzLCAgIDMxLCAgIDMxLCAgIDMxLCAgIDMxLCAgIDMxLCAgIDMxLAotICAgICAgIDMxLCAgIDMxLCAgIDMxLCAgIDMxLCAgIDMxLCAgIDMxLCAgIDMxLCAgIDMxLCAgIDMxLCAgIDMxLAotICAgICAgIDMxLCAgIDMxLCAgIDMxLCAgIDMxLCAgIDMxLCAgIDMxLCAgIDMxLCAgIDMxLCAgIDMxLCAgIDMxLAotICAgICAgIDMxLCAgIDMxLCAgIDMxLCAgIDMxLCAgIDMxLCAgIDMxLCAgIDMxLCAgIDMxCisgICAgICAgMTEsICAgMTksICAgMjAsICAgMjEsICAgMTksICAgMTksICAgMTksICAgMTksICAgMTksICAgMTksCisgICAgICAgMTksICAgMTksICAgMTksICAgMTksICAgMTksICAgMTksICAgMTkKICAgICB9LAogCiAgICAgewotICAgICAgIDExLCAgIDM0LCAgIDM0LCAgIDM1LCAgIDM0LCAgIDM2LCAgIDM0LCAgIDM0LCAgIDM2LCAgIDM0LAotICAgICAgIDM0LCAgIDM0LCAgIDM0LCAgIDM0LCAgIDM0LCAgIDM3LCAgIDM0LCAgIDM0LCAgIDM0LCAgIDM0LAotCi0gICAgICAgMzQsICAgMzQsICAgMzQsICAgMzQsICAgMzQsICAgMzQsICAgMzQsICAgMzQsICAgMzQsICAgMzQsCi0gICAgICAgMzQsICAgMzQsICAgMzQsICAgMzQsICAgMzQsICAgMzQsICAgMzQsICAgMzQKKyAgICAgICAxMSwgICAyMiwgICAyMiwgICAyMywgICAyMiwgICAyNCwgICAyMiwgICAyMiwgICAyNCwgICAyMiwKKyAgICAgICAyMiwgICAyMiwgICAyMiwgICAyMiwgICAyMiwgICAyNSwgICAyMgogICAgIH0sCiAKICAgICB7Ci0gICAgICAgMTEsICAgMzQsICAgMzQsICAgMzUsICAgMzQsICAgMzYsICAgMzQsICAgMzQsICAgMzYsICAgMzQsCi0gICAgICAgMzQsICAgMzQsICAgMzQsICAgMzQsICAgMzQsICAgMzcsICAgMzQsICAgMzQsICAgMzQsICAgMzQsCi0gICAgICAgMzQsICAgMzQsICAgMzQsICAgMzQsICAgMzQsICAgMzQsICAgMzQsICAgMzQsICAgMzQsICAgMzQsCi0gICAgICAgMzQsICAgMzQsICAgMzQsICAgMzQsICAgMzQsICAgMzQsICAgMzQsICAgMzQKKyAgICAgICAxMSwgICAyMiwgICAyMiwgICAyMywgICAyMiwgICAyNCwgICAyMiwgICAyMiwgICAyNCwgICAyMiwKKyAgICAgICAyMiwgICAyMiwgICAyMiwgICAyMiwgICAyMiwgICAyNSwgICAyMgogICAgIH0sCiAKICAgICB7Ci0gICAgICAgMTEsICAgMzgsICAgMzgsICAgMzksICAgNDAsICAgNDEsICAgNDIsICAgNDMsICAgNDEsICAgNDQsCi0gICAgICAgNDUsICAgNDYsICAgNDcsICAgNDcsICAgNDgsICAgNDksICAgNDcsICAgNDcsICAgNDcsICAgNDcsCi0gICAgICAgNDcsICAgNDcsICAgNDcsICAgNDcsICAgNDcsICAgNTAsICAgNDcsICAgNDcsICAgNDcsICAgNTEsCi0gICAgICAgNDcsICAgNDcsICAgNDcsICAgNDcsICAgNDcsICAgNDcsICAgNDcsICAgNTIKKyAgICAgICAxMSwgICAyNiwgICAyNiwgICAyNywgICAyOCwgICAyOSwgICAzMCwgICAzMSwgICAyOSwgICAzMiwKKyAgICAgICAzMywgICAzNCwgICAzNSwgICAzNSwgICAzNiwgICAzNywgICAzOAogCiAgICAgfSwKIAogICAgIHsKLSAgICAgICAxMSwgICAzOCwgICAzOCwgICAzOSwgICA0MCwgICA0MSwgICA0MiwgICA0MywgICA0MSwgICA0NCwKLSAgICAgICA0NSwgICA0NiwgICA0NywgICA0NywgICA0OCwgICA0OSwgICA0NywgICA0NywgICA0NywgICA0NywKLSAgICAgICA0NywgICA0NywgICA0NywgICA0NywgICA0NywgICA1MCwgICA0NywgICA0NywgICA0NywgICA1MSwKLSAgICAgICA0NywgICA0NywgICA0NywgICA0NywgICA0NywgICA0NywgICA0NywgICA1MgorICAgICAgIDExLCAgIDI2LCAgIDI2LCAgIDI3LCAgIDI4LCAgIDI5LCAgIDMwLCAgIDMxLCAgIDI5LCAgIDMyLAorICAgICAgIDMzLCAgIDM0LCAgIDM1LCAgIDM1LCAgIDM2LCAgIDM3LCAgIDM4CiAgICAgfSwKIAogICAgIHsKICAgICAgIC0xMSwgIC0xMSwgIC0xMSwgIC0xMSwgIC0xMSwgIC0xMSwgIC0xMSwgIC0xMSwgIC0xMSwgIC0xMSwKLSAgICAgIC0xMSwgIC0xMSwgIC0xMSwgIC0xMSwgIC0xMSwgIC0xMSwgIC0xMSwgIC0xMSwgIC0xMSwgIC0xMSwKLSAgICAgIC0xMSwgIC0xMSwgIC0xMSwgIC0xMSwgIC0xMSwgIC0xMSwgIC0xMSwgIC0xMSwgIC0xMSwgIC0xMSwKLSAgICAgIC0xMSwgIC0xMSwgIC0xMSwgIC0xMSwgIC0xMSwgIC0xMSwgIC0xMSwgIC0xMQorICAgICAgLTExLCAgLTExLCAgLTExLCAgLTExLCAgLTExLCAgLTExLCAgLTExCiAgICAgfSwKIAogICAgIHsKICAgICAgICAxMSwgIC0xMiwgIC0xMiwgIC0xMiwgIC0xMiwgIC0xMiwgIC0xMiwgIC0xMiwgIC0xMiwgIC0xMiwKLSAgICAgIC0xMiwgIC0xMiwgIC0xMiwgIC0xMiwgIC0xMiwgIC0xMiwgIC0xMiwgIC0xMiwgIC0xMiwgIC0xMiwKLQotICAgICAgLTEyLCAgLTEyLCAgLTEyLCAgLTEyLCAgLTEyLCAgLTEyLCAgLTEyLCAgLTEyLCAgLTEyLCAgLTEyLAotICAgICAgLTEyLCAgLTEyLCAgLTEyLCAgLTEyLCAgLTEyLCAgLTEyLCAgLTEyLCAgLTEyCisgICAgICAtMTIsICAtMTIsICAtMTIsICAtMTIsICAtMTIsICAtMTIsICAtMTIKICAgICB9LAogCiAgICAgewotICAgICAgIDExLCAgLTEzLCAgIDUzLCAgIDU0LCAgLTEzLCAgLTEzLCAgIDU1LCAgLTEzLCAgLTEzLCAgLTEzLAotICAgICAgLTEzLCAgLTEzLCAgLTEzLCAgLTEzLCAgLTEzLCAgLTEzLCAgLTEzLCAgLTEzLCAgLTEzLCAgLTEzLAotICAgICAgLTEzLCAgLTEzLCAgLTEzLCAgLTEzLCAgLTEzLCAgLTEzLCAgLTEzLCAgLTEzLCAgLTEzLCAgLTEzLAotICAgICAgLTEzLCAgLTEzLCAgLTEzLCAgLTEzLCAgLTEzLCAgLTEzLCAgLTEzLCAgLTEzCisgICAgICAgMTEsICAtMTMsICAgMzksICAgNDAsICAtMTMsICAtMTMsICAgNDEsICAtMTMsICAtMTMsICAtMTMsCisgICAgICAtMTMsICAtMTMsICAtMTMsICAtMTMsICAtMTMsICAtMTMsICAtMTMKICAgICB9LAogCiAgICAgewogICAgICAgIDExLCAgLTE0LCAgLTE0LCAgLTE0LCAgLTE0LCAgLTE0LCAgLTE0LCAgLTE0LCAgLTE0LCAgLTE0LAotICAgICAgLTE0LCAgLTE0LCAgLTE0LCAgLTE0LCAgLTE0LCAgLTE0LCAgLTE0LCAgLTE0LCAgLTE0LCAgLTE0LAotICAgICAgLTE0LCAgLTE0LCAgLTE0LCAgLTE0LCAgLTE0LCAgLTE0LCAgLTE0LCAgLTE0LCAgLTE0LCAgLTE0LAotICAgICAgLTE0LCAgLTE0LCAgLTE0LCAgLTE0LCAgLTE0LCAgLTE0LCAgLTE0LCAgLTE0CisgICAgICAtMTQsICAtMTQsICAtMTQsICAtMTQsICAtMTQsICAtMTQsICAtMTQKIAogICAgIH0sCiAKICAgICB7Ci0gICAgICAgMTEsICAgNTYsICAgNTYsICAgNTcsICAgNTYsICAgNTYsICAgNTYsICAgNTYsICAgNTYsICAgNTYsCi0gICAgICAgNTYsICAgNTYsICAgNTYsICAgNTYsICAgNTYsICAgNTYsICAgNTYsICAgNTYsICAgNTYsICAgNTYsCi0gICAgICAgNTYsICAgNTYsICAgNTYsICAgNTYsICAgNTYsICAgNTYsICAgNTYsICAgNTYsICAgNTYsICAgNTYsCi0gICAgICAgNTYsICAgNTYsICAgNTYsICAgNTYsICAgNTYsICAgNTYsICAgNTYsICAgNTYKKyAgICAgICAxMSwgICA0MiwgICA0MiwgICA0MywgICA0MiwgICA0MiwgICA0MiwgICA0MiwgICA0MiwgICA0MiwKKyAgICAgICA0MiwgICA0MiwgICA0MiwgICA0MiwgICA0MiwgICA0MiwgICA0MgogICAgIH0sCiAKICAgICB7CiAgICAgICAgMTEsICAtMTYsICAtMTYsICAtMTYsICAtMTYsICAtMTYsICAtMTYsICAtMTYsICAtMTYsICAtMTYsCi0gICAgICAtMTYsICAtMTYsICAtMTYsICAtMTYsICAtMTYsICAtMTYsICAtMTYsICAtMTYsICAtMTYsICAtMTYsCi0gICAgICAtMTYsICAtMTYsICAtMTYsICAtMTYsICAtMTYsICAtMTYsICAtMTYsICAtMTYsICAtMTYsICAtMTYsCi0gICAgICAtMTYsICAtMTYsICAtMTYsICAtMTYsICAtMTYsICAtMTYsICAtMTYsICAtMTYKKyAgICAgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNgogICAgIH0sCiAKICAgICB7CiAgICAgICAgMTEsICAtMTcsICAtMTcsICAtMTcsICAtMTcsICAtMTcsICAtMTcsICAtMTcsICAtMTcsICAtMTcsCi0gICAgICAtMTcsICAtMTcsICAtMTcsICAtMTcsICAtMTcsICAtMTcsICAtMTcsICAtMTcsICAtMTcsICAtMTcsCi0KLSAgICAgIC0xNywgIC0xNywgIC0xNywgIC0xNywgIC0xNywgIC0xNywgIC0xNywgIC0xNywgIC0xNywgIC0xNywKLSAgICAgIC0xNywgIC0xNywgIC0xNywgIC0xNywgIC0xNywgIC0xNywgIC0xNywgIC0xNworICAgICAgLTE3LCAgLTE3LCAgLTE3LCAgLTE3LCAgLTE3LCAgLTE3LCAgLTE3CiAgICAgfSwKIAogICAgIHsKICAgICAgICAxMSwgIC0xOCwgIC0xOCwgIC0xOCwgIC0xOCwgIC0xOCwgIC0xOCwgIC0xOCwgIC0xOCwgIC0xOCwKLSAgICAgIC0xOCwgIC0xOCwgIC0xOCwgICA1OCwgIC0xOCwgIC0xOCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgIC0xOAorICAgICAgLTE4LCAgLTE4LCAgLTE4LCAgIDQ0LCAgLTE4LCAgLTE4LCAgLTE4CiAgICAgfSwKIAogICAgIHsKLSAgICAgICAxMSwgIC0xOSwgIC0xOSwgIC0xOSwgIC0xOSwgIC0xOSwgIC0xOSwgIC0xOSwgIC0xOSwgIC0xOSwKLSAgICAgIC0xOSwgIC0xOSwgIC0xOSwgICA1OCwgIC0xOSwgIC0xOSwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OSwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgIC0xOQorICAgICAgIDExLCAgIDQ1LCAgIDQ1LCAgLTE5LCAgIDQ1LCAgIDQ1LCAgIDQ1LCAgIDQ1LCAgIDQ1LCAgIDQ1LAorICAgICAgIDQ1LCAgIDQ1LCAgIDQ1LCAgIDQ1LCAgIDQ1LCAgIDQ1LCAgIDQ1CiAKICAgICB9LAogCiAgICAgewotICAgICAgIDExLCAgLTIwLCAgLTIwLCAgLTIwLCAgLTIwLCAgLTIwLCAgLTIwLCAgLTIwLCAgLTIwLCAgLTIwLAotICAgICAgLTIwLCAgLTIwLCAgLTIwLCAgIDU4LCAgLTIwLCAgLTIwLCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDYwLCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDYxLAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgLTIwCisgICAgICAgMTEsICAtMjAsICAgNDYsICAgNDcsICAtMjAsICAtMjAsICAtMjAsICAtMjAsICAtMjAsICAtMjAsCisgICAgICAtMjAsICAtMjAsICAtMjAsICAtMjAsICAtMjAsICAtMjAsICAtMjAKICAgICB9LAogCiAgICAgewotICAgICAgIDExLCAgLTIxLCAgLTIxLCAgLTIxLCAgLTIxLCAgLTIxLCAgLTIxLCAgLTIxLCAgLTIxLCAgLTIxLAotICAgICAgLTIxLCAgLTIxLCAgLTIxLCAgIDU4LCAgLTIxLCAgLTIxLCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDYyLCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgLTIxCisgICAgICAgMTEsICAgNDgsICAtMjEsICAtMjEsICAgNDgsICAgNDgsICAgNDgsICAgNDgsICAgNDgsICAgNDgsCisgICAgICAgNDgsICAgNDgsICAgNDgsICAgNDgsICAgNDgsICAgNDgsICAgNDgKICAgICB9LAogCiAgICAgewotICAgICAgIDExLCAgLTIyLCAgLTIyLCAgLTIyLCAgLTIyLCAgLTIyLCAgLTIyLCAgLTIyLCAgLTIyLCAgLTIyLAotICAgICAgLTIyLCAgLTIyLCAgLTIyLCAgIDU4LCAgLTIyLCAgLTIyLCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNjMsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAtMjIKKyAgICAgICAxMSwgICA0OSwgICA0OSwgICA1MCwgICA0OSwgIC0yMiwgICA0OSwgICA0OSwgIC0yMiwgICA0OSwKKyAgICAgICA0OSwgICA0OSwgICA0OSwgICA0OSwgICA0OSwgIC0yMiwgICA0OQogICAgIH0sCiAKICAgICB7CiAgICAgICAgMTEsICAtMjMsICAtMjMsICAtMjMsICAtMjMsICAtMjMsICAtMjMsICAtMjMsICAtMjMsICAtMjMsCi0gICAgICAtMjMsICAtMjMsICAtMjMsICAgNTgsICAtMjMsICAtMjMsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNjQsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAtMjMKKyAgICAgIC0yMywgIC0yMywgIC0yMywgIC0yMywgIC0yMywgIC0yMywgIC0yMwogICAgIH0sCiAKICAgICB7CiAgICAgICAgMTEsICAtMjQsICAtMjQsICAtMjQsICAtMjQsICAtMjQsICAtMjQsICAtMjQsICAtMjQsICAtMjQsCi0gICAgICAtMjQsICAtMjQsICAtMjQsICAgNTgsICAtMjQsICAtMjQsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNjUsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNjYsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAtMjQKKyAgICAgIC0yNCwgIC0yNCwgIC0yNCwgIC0yNCwgIC0yNCwgIC0yNCwgIC0yNAogCiAgICAgfSwKIAogICAgIHsKLSAgICAgICAxMSwgIC0yNSwgIC0yNSwgIC0yNSwgIC0yNSwgIC0yNSwgIC0yNSwgIC0yNSwgIC0yNSwgIC0yNSwKLSAgICAgIC0yNSwgIC0yNSwgIC0yNSwgICA1OCwgIC0yNSwgIC0yNSwgICA1OCwgICA2NywgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA2OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgIC0yNQorICAgICAgIDExLCAgIDUxLCAgIDUxLCAgIDUyLCAgIDUxLCAgIDUxLCAgIDUxLCAgIDUxLCAgIDUxLCAgIDUxLAorICAgICAgIDUxLCAgIDUxLCAgIDUxLCAgIDUxLCAgIDUxLCAgIDUxLCAgIDUxCiAgICAgfSwKIAogICAgIHsKICAgICAgICAxMSwgIC0yNiwgIC0yNiwgIC0yNiwgIC0yNiwgIC0yNiwgIC0yNiwgIC0yNiwgIC0yNiwgIC0yNiwKLSAgICAgIC0yNiwgIC0yNiwgIC0yNiwgICA1OCwgIC0yNiwgIC0yNiwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA2OSwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgIC0yNgorICAgICAgLTI2LCAgLTI2LCAgLTI2LCAgLTI2LCAgLTI2LCAgLTI2LCAgLTI2CiAgICAgfSwKIAogICAgIHsKICAgICAgICAxMSwgIC0yNywgIC0yNywgIC0yNywgIC0yNywgIC0yNywgIC0yNywgIC0yNywgIC0yNywgIC0yNywKLSAgICAgIC0yNywgIC0yNywgIC0yNywgICA1OCwgIC0yNywgIC0yNywgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLQotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDcwLCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgLTI3CisgICAgICAtMjcsICAtMjcsICAtMjcsICAtMjcsICAtMjcsICAtMjcsICAtMjcKICAgICB9LAogCiAgICAgewogICAgICAgIDExLCAgLTI4LCAgLTI4LCAgLTI4LCAgLTI4LCAgLTI4LCAgLTI4LCAgLTI4LCAgLTI4LCAgLTI4LAotICAgICAgLTI4LCAgLTI4LCAgLTI4LCAgIDU4LCAgLTI4LCAgLTI4LCAgIDU4LCAgIDcxLCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDcyLCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgLTI4CisgICAgICAtMjgsICAtMjgsICAtMjgsICAtMjgsICAgNTMsICAtMjgsICAtMjgKICAgICB9LAogCiAgICAgewogICAgICAgIDExLCAgLTI5LCAgLTI5LCAgLTI5LCAgLTI5LCAgLTI5LCAgLTI5LCAgLTI5LCAgLTI5LCAgLTI5LAotICAgICAgLTI5LCAgLTI5LCAgLTI5LCAgIDU4LCAgLTI5LCAgLTI5LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDczLCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDc0LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDc1LCAgIDU4LCAgIDU4LCAgLTI5CisgICAgICAtMjksICAtMjksICAtMjksICAtMjksICAtMjksICAtMjksICAtMjkKIAogICAgIH0sCiAKICAgICB7Ci0gICAgICAgMTEsICAtMzAsICAtMzAsICAtMzAsICAtMzAsICAtMzAsICAtMzAsICAtMzAsICAtMzAsICAtMzAsCi0gICAgICAtMzAsICAtMzAsICAtMzAsICAgNTgsICAtMzAsICAtMzAsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNzYsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAtMzAKKyAgICAgICAxMSwgICA1NCwgICA1NCwgIC0zMCwgICA1NCwgICA1NCwgICA1NCwgICA1NCwgICA1NCwgICA1NCwKKyAgICAgICA1NCwgICA1NCwgICA1NCwgICA1NCwgICA1NCwgICA1NCwgICA1NAogICAgIH0sCiAKICAgICB7Ci0gICAgICAgMTEsICAgNzcsICAgNzcsICAtMzEsICAgNzcsICAgNzcsICAgNzcsICAgNzcsICAgNzcsICAgNzcsCi0gICAgICAgNzcsICAgNzcsICAgNzcsICAgNzcsICAgNzcsICAgNzcsICAgNzcsICAgNzcsICAgNzcsICAgNzcsCi0gICAgICAgNzcsICAgNzcsICAgNzcsICAgNzcsICAgNzcsICAgNzcsICAgNzcsICAgNzcsICAgNzcsICAgNzcsCi0gICAgICAgNzcsICAgNzcsICAgNzcsICAgNzcsICAgNzcsICAgNzcsICAgNzcsICAgNzcKKyAgICAgICAxMSwgIC0zMSwgIC0zMSwgIC0zMSwgIC0zMSwgIC0zMSwgIC0zMSwgICA1NSwgIC0zMSwgIC0zMSwKKyAgICAgIC0zMSwgIC0zMSwgIC0zMSwgIC0zMSwgIC0zMSwgIC0zMSwgIC0zMQogICAgIH0sCiAKICAgICB7Ci0gICAgICAgMTEsICAtMzIsICAgNzgsICAgNzksICAtMzIsICAtMzIsICAtMzIsICAtMzIsICAtMzIsICAtMzIsCi0gICAgICAtMzIsICAtMzIsICAtMzIsICAtMzIsICAtMzIsICAtMzIsICAtMzIsICAtMzIsICAtMzIsICAtMzIsCi0KLSAgICAgIC0zMiwgIC0zMiwgIC0zMiwgIC0zMiwgIC0zMiwgIC0zMiwgIC0zMiwgIC0zMiwgIC0zMiwgIC0zMiwKLSAgICAgIC0zMiwgIC0zMiwgIC0zMiwgIC0zMiwgIC0zMiwgIC0zMiwgIC0zMiwgIC0zMgorICAgICAgIDExLCAgLTMyLCAgLTMyLCAgLTMyLCAgLTMyLCAgLTMyLCAgLTMyLCAgLTMyLCAgLTMyLCAgLTMyLAorICAgICAgLTMyLCAgLTMyLCAgLTMyLCAgLTMyLCAgLTMyLCAgLTMyLCAgLTMyCiAgICAgfSwKIAogICAgIHsKLSAgICAgICAxMSwgICA4MCwgIC0zMywgIC0zMywgICA4MCwgICA4MCwgICA4MCwgICA4MCwgICA4MCwgICA4MCwKLSAgICAgICA4MCwgICA4MCwgICA4MCwgICA4MCwgICA4MCwgICA4MCwgICA4MCwgICA4MCwgICA4MCwgICA4MCwKLSAgICAgICA4MCwgICA4MCwgICA4MCwgICA4MCwgICA4MCwgICA4MCwgICA4MCwgICA4MCwgICA4MCwgICA4MCwKLSAgICAgICA4MCwgICA4MCwgICA4MCwgICA4MCwgICA4MCwgICA4MCwgICA4MCwgICA4MAorICAgICAgIDExLCAgLTMzLCAgLTMzLCAgLTMzLCAgLTMzLCAgLTMzLCAgLTMzLCAgLTMzLCAgLTMzLCAgLTMzLAorICAgICAgLTMzLCAgLTMzLCAgLTMzLCAgLTMzLCAgLTMzLCAgLTMzLCAgLTMzCiAgICAgfSwKIAogICAgIHsKLSAgICAgICAxMSwgICA4MSwgICA4MSwgICA4MiwgICA4MSwgIC0zNCwgICA4MSwgICA4MSwgIC0zNCwgICA4MSwKLSAgICAgICA4MSwgICA4MSwgICA4MSwgICA4MSwgICA4MSwgIC0zNCwgICA4MSwgICA4MSwgICA4MSwgICA4MSwKLSAgICAgICA4MSwgICA4MSwgICA4MSwgICA4MSwgICA4MSwgICA4MSwgICA4MSwgICA4MSwgICA4MSwgICA4MSwKLSAgICAgICA4MSwgICA4MSwgICA4MSwgICA4MSwgICA4MSwgICA4MSwgICA4MSwgICA4MQorICAgICAgIDExLCAgLTM0LCAgLTM0LCAgLTM0LCAgLTM0LCAgLTM0LCAgLTM0LCAgLTM0LCAgLTM0LCAgLTM0LAorICAgICAgLTM0LCAgIDU2LCAgIDU3LCAgIDU3LCAgLTM0LCAgLTM0LCAgLTM0CiAKICAgICB9LAogCiAgICAgewogICAgICAgIDExLCAgLTM1LCAgLTM1LCAgLTM1LCAgLTM1LCAgLTM1LCAgLTM1LCAgLTM1LCAgLTM1LCAgLTM1LAotICAgICAgLTM1LCAgLTM1LCAgLTM1LCAgLTM1LCAgLTM1LCAgLTM1LCAgLTM1LCAgLTM1LCAgLTM1LCAgLTM1LAotICAgICAgLTM1LCAgLTM1LCAgLTM1LCAgLTM1LCAgLTM1LCAgLTM1LCAgLTM1LCAgLTM1LCAgLTM1LCAgLTM1LAotICAgICAgLTM1LCAgLTM1LCAgLTM1LCAgLTM1LCAgLTM1LCAgLTM1LCAgLTM1LCAgLTM1CisgICAgICAtMzUsICAgNTcsICAgNTcsICAgNTcsICAtMzUsICAtMzUsICAtMzUKICAgICB9LAogCiAgICAgewogICAgICAgIDExLCAgLTM2LCAgLTM2LCAgLTM2LCAgLTM2LCAgLTM2LCAgLTM2LCAgLTM2LCAgLTM2LCAgLTM2LAotICAgICAgLTM2LCAgLTM2LCAgLTM2LCAgLTM2LCAgLTM2LCAgLTM2LCAgLTM2LCAgLTM2LCAgLTM2LCAgLTM2LAotICAgICAgLTM2LCAgLTM2LCAgLTM2LCAgLTM2LCAgLTM2LCAgLTM2LCAgLTM2LCAgLTM2LCAgLTM2LCAgLTM2LAotICAgICAgLTM2LCAgLTM2LCAgLTM2LCAgLTM2LCAgLTM2LCAgLTM2LCAgLTM2LCAgLTM2CisgICAgICAtMzYsICAtMzYsICAtMzYsICAtMzYsICAtMzYsICAtMzYsICAtMzYKICAgICB9LAogCiAgICAgewotICAgICAgIDExLCAgIDgzLCAgIDgzLCAgIDg0LCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLAotICAgICAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLAotCi0gICAgICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsCi0gICAgICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMKKyAgICAgICAxMSwgIC0zNywgIC0zNywgICA1OCwgIC0zNywgIC0zNywgIC0zNywgIC0zNywgIC0zNywgIC0zNywKKyAgICAgIC0zNywgIC0zNywgIC0zNywgIC0zNywgIC0zNywgIC0zNywgIC0zNwogICAgIH0sCiAKICAgICB7CiAgICAgICAgMTEsICAtMzgsICAtMzgsICAtMzgsICAtMzgsICAtMzgsICAtMzgsICAtMzgsICAtMzgsICAtMzgsCi0gICAgICAtMzgsICAtMzgsICAtMzgsICAtMzgsICAtMzgsICAtMzgsICAtMzgsICAtMzgsICAtMzgsICAtMzgsCi0gICAgICAtMzgsICAtMzgsICAtMzgsICAtMzgsICAtMzgsICAtMzgsICAtMzgsICAtMzgsICAtMzgsICAtMzgsCi0gICAgICAtMzgsICAtMzgsICAtMzgsICAtMzgsICAtMzgsICAtMzgsICAtMzgsICAtMzgKKyAgICAgIC0zOCwgIC0zOCwgIC0zOCwgIC0zOCwgIC0zOCwgIC0zOCwgICA1OQogICAgIH0sCiAKICAgICB7Ci0gICAgICAgMTEsICAtMzksICAtMzksICAtMzksICAtMzksICAtMzksICAtMzksICAtMzksICAtMzksICAtMzksCi0gICAgICAtMzksICAtMzksICAtMzksICAtMzksICAtMzksICAtMzksICAtMzksICAtMzksICAtMzksICAtMzksCi0gICAgICAtMzksICAtMzksICAtMzksICAtMzksICAtMzksICAtMzksICAtMzksICAtMzksICAtMzksICAtMzksCi0gICAgICAtMzksICAtMzksICAtMzksICAtMzksICAtMzksICAtMzksICAtMzksICAtMzkKKyAgICAgICAxMSwgIC0zOSwgICAzOSwgICA0MCwgIC0zOSwgIC0zOSwgICA0MSwgIC0zOSwgIC0zOSwgIC0zOSwKKyAgICAgIC0zOSwgIC0zOSwgIC0zOSwgIC0zOSwgIC0zOSwgIC0zOSwgIC0zOQogCiAgICAgfSwKIAogICAgIHsKICAgICAgICAxMSwgIC00MCwgIC00MCwgIC00MCwgIC00MCwgIC00MCwgIC00MCwgIC00MCwgIC00MCwgIC00MCwKLSAgICAgIC00MCwgIC00MCwgIC00MCwgIC00MCwgICA4NSwgIC00MCwgIC00MCwgIC00MCwgIC00MCwgIC00MCwKLSAgICAgIC00MCwgIC00MCwgIC00MCwgIC00MCwgIC00MCwgIC00MCwgIC00MCwgIC00MCwgIC00MCwgIC00MCwKLSAgICAgIC00MCwgIC00MCwgIC00MCwgIC00MCwgIC00MCwgIC00MCwgIC00MCwgIC00MAorICAgICAgLTQwLCAgLTQwLCAgLTQwLCAgLTQwLCAgLTQwLCAgLTQwLCAgLTQwCiAgICAgfSwKIAogICAgIHsKLSAgICAgICAxMSwgIC00MSwgIC00MSwgIC00MSwgIC00MSwgIC00MSwgIC00MSwgIC00MSwgIC00MSwgIC00MSwKLSAgICAgIC00MSwgIC00MSwgIC00MSwgIC00MSwgIC00MSwgIC00MSwgIC00MSwgIC00MSwgIC00MSwgIC00MSwKLSAgICAgIC00MSwgIC00MSwgIC00MSwgIC00MSwgIC00MSwgIC00MSwgIC00MSwgIC00MSwgIC00MSwgIC00MSwKLSAgICAgIC00MSwgIC00MSwgIC00MSwgIC00MSwgIC00MSwgIC00MSwgIC00MSwgIC00MQorICAgICAgIDExLCAgIDQyLCAgIDQyLCAgIDQzLCAgIDQyLCAgIDQyLCAgIDQyLCAgIDQyLCAgIDQyLCAgIDQyLAorICAgICAgIDQyLCAgIDQyLCAgIDQyLCAgIDQyLCAgIDQyLCAgIDQyLCAgIDQyCiAgICAgfSwKIAogICAgIHsKLSAgICAgICAxMSwgICA4NiwgICA4NiwgIC00MiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwKLSAgICAgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwKLQotICAgICAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LAotICAgICAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2CisgICAgICAgMTEsICAgNDIsICAgNDIsICAgNDMsICAgNDIsICAgNDIsICAgNDIsICAgNDIsICAgNDIsICAgNDIsCisgICAgICAgNDIsICAgNDIsICAgNDIsICAgNDIsICAgNDIsICAgNDIsICAgNDIKICAgICB9LAogCiAgICAgewotICAgICAgIDExLCAgLTQzLCAgLTQzLCAgLTQzLCAgLTQzLCAgLTQzLCAgLTQzLCAgIDg3LCAgLTQzLCAgLTQzLAotICAgICAgLTQzLCAgLTQzLCAgLTQzLCAgLTQzLCAgLTQzLCAgLTQzLCAgLTQzLCAgLTQzLCAgLTQzLCAgLTQzLAotICAgICAgLTQzLCAgLTQzLCAgLTQzLCAgLTQzLCAgLTQzLCAgLTQzLCAgLTQzLCAgLTQzLCAgLTQzLCAgLTQzLAotICAgICAgLTQzLCAgLTQzLCAgLTQzLCAgLTQzLCAgLTQzLCAgLTQzLCAgLTQzLCAgLTQzCisgICAgICAgMTEsICAtNDMsICAtNDMsICAtNDMsICAtNDMsICAtNDMsICAtNDMsICAtNDMsICAtNDMsICAtNDMsCisgICAgICAtNDMsICAtNDMsICAtNDMsICAtNDMsICAtNDMsICAtNDMsICAtNDMKICAgICB9LAogCiAgICAgewogICAgICAgIDExLCAgLTQ0LCAgLTQ0LCAgLTQ0LCAgLTQ0LCAgLTQ0LCAgLTQ0LCAgLTQ0LCAgLTQ0LCAgLTQ0LAotICAgICAgLTQ0LCAgLTQ0LCAgLTQ0LCAgLTQ0LCAgLTQ0LCAgLTQ0LCAgLTQ0LCAgLTQ0LCAgLTQ0LCAgLTQ0LAotICAgICAgLTQ0LCAgLTQ0LCAgLTQ0LCAgLTQ0LCAgLTQ0LCAgLTQ0LCAgLTQ0LCAgLTQ0LCAgLTQ0LCAgLTQ0LAotICAgICAgLTQ0LCAgLTQ0LCAgLTQ0LCAgLTQ0LCAgLTQ0LCAgLTQ0LCAgLTQ0LCAgLTQ0CisgICAgICAtNDQsICAtNDQsICAtNDQsICAgNDQsICAtNDQsICAtNDQsICAtNDQKIAogICAgIH0sCiAKICAgICB7Ci0gICAgICAgMTEsICAtNDUsICAtNDUsICAtNDUsICAtNDUsICAtNDUsICAtNDUsICAtNDUsICAtNDUsICAtNDUsCi0gICAgICAtNDUsICAtNDUsICAtNDUsICAtNDUsICAtNDUsICAtNDUsICAtNDUsICAtNDUsICAtNDUsICAtNDUsCi0gICAgICAtNDUsICAtNDUsICAtNDUsICAtNDUsICAtNDUsICAtNDUsICAtNDUsICAtNDUsICAtNDUsICAtNDUsCi0gICAgICAtNDUsICAtNDUsICAtNDUsICAtNDUsICAtNDUsICAtNDUsICAtNDUsICAtNDUKKyAgICAgICAxMSwgICA0NSwgICA0NSwgIC00NSwgICA0NSwgICA0NSwgICA0NSwgICA0NSwgICA0NSwgICA0NSwKKyAgICAgICA0NSwgICA0NSwgICA0NSwgICA0NSwgICA0NSwgICA0NSwgICA0NQogICAgIH0sCiAKICAgICB7Ci0gICAgICAgMTEsICAtNDYsICAtNDYsICAtNDYsICAtNDYsICAtNDYsICAtNDYsICAtNDYsICAtNDYsICAtNDYsCi0gICAgICAtNDYsICAgODgsICAgODksICAgODksICAtNDYsICAtNDYsICAgODksICAgODksICAgODksICAgODksCi0gICAgICAgODksICAgODksICAgODksICAgODksICAgODksICAgODksICAgODksICAgODksICAgODksICAgODksCi0gICAgICAgODksICAgODksICAgODksICAgODksICAgODksICAgODksICAgODksICAtNDYKKyAgICAgICAxMSwgIC00NiwgICA0NiwgICA0NywgIC00NiwgIC00NiwgIC00NiwgIC00NiwgIC00NiwgIC00NiwKKyAgICAgIC00NiwgIC00NiwgIC00NiwgIC00NiwgIC00NiwgIC00NiwgIC00NgogICAgIH0sCiAKICAgICB7Ci0gICAgICAgMTEsICAtNDcsICAtNDcsICAtNDcsICAtNDcsICAtNDcsICAtNDcsICAtNDcsICAtNDcsICAtNDcsCi0gICAgICAtNDcsICAgODksICAgODksICAgODksICAtNDcsICAtNDcsICAgODksICAgODksICAgODksICAgODksCi0KLSAgICAgICA4OSwgICA4OSwgICA4OSwgICA4OSwgICA4OSwgICA4OSwgICA4OSwgICA4OSwgICA4OSwgICA4OSwKLSAgICAgICA4OSwgICA4OSwgICA4OSwgICA4OSwgICA4OSwgICA4OSwgICA4OSwgIC00NworICAgICAgIDExLCAgIDQ4LCAgLTQ3LCAgLTQ3LCAgIDQ4LCAgIDQ4LCAgIDQ4LCAgIDQ4LCAgIDQ4LCAgIDQ4LAorICAgICAgIDQ4LCAgIDQ4LCAgIDQ4LCAgIDQ4LCAgIDQ4LCAgIDQ4LCAgIDQ4CiAgICAgfSwKIAogICAgIHsKICAgICAgICAxMSwgIC00OCwgIC00OCwgIC00OCwgIC00OCwgIC00OCwgIC00OCwgIC00OCwgIC00OCwgIC00OCwKLSAgICAgIC00OCwgIC00OCwgIC00OCwgIC00OCwgIC00OCwgIC00OCwgIC00OCwgIC00OCwgIC00OCwgIC00OCwKLSAgICAgIC00OCwgIC00OCwgIC00OCwgIC00OCwgIC00OCwgIC00OCwgIC00OCwgIC00OCwgIC00OCwgIC00OCwKLSAgICAgIC00OCwgIC00OCwgIC00OCwgIC00OCwgIC00OCwgIC00OCwgIC00OCwgIC00OAorICAgICAgLTQ4LCAgLTQ4LCAgLTQ4LCAgLTQ4LCAgLTQ4LCAgLTQ4LCAgLTQ4CiAgICAgfSwKIAogICAgIHsKLSAgICAgICAxMSwgIC00OSwgIC00OSwgICA5MCwgIC00OSwgIC00OSwgIC00OSwgIC00OSwgIC00OSwgIC00OSwKLSAgICAgIC00OSwgIC00OSwgIC00OSwgIC00OSwgIC00OSwgIC00OSwgIC00OSwgIC00OSwgIC00OSwgIC00OSwKLSAgICAgIC00OSwgIC00OSwgIC00OSwgIC00OSwgIC00OSwgIC00OSwgIC00OSwgIC00OSwgIC00OSwgIC00OSwKLSAgICAgIC00OSwgIC00OSwgIC00OSwgIC00OSwgIC00OSwgIC00OSwgIC00OSwgIC00OQorICAgICAgIDExLCAgIDQ5LCAgIDQ5LCAgIDUwLCAgIDQ5LCAgLTQ5LCAgIDQ5LCAgIDQ5LCAgLTQ5LCAgIDQ5LAorICAgICAgIDQ5LCAgIDQ5LCAgIDQ5LCAgIDQ5LCAgIDQ5LCAgLTQ5LCAgIDQ5CiAKICAgICB9LAogCiAgICAgewogICAgICAgIDExLCAgLTUwLCAgLTUwLCAgLTUwLCAgLTUwLCAgLTUwLCAgLTUwLCAgLTUwLCAgLTUwLCAgLTUwLAotICAgICAgLTUwLCAgIDg5LCAgIDg5LCAgIDg5LCAgLTUwLCAgLTUwLCAgIDg5LCAgIDg5LCAgIDg5LCAgIDg5LAotICAgICAgIDg5LCAgIDg5LCAgIDkxLCAgIDg5LCAgIDg5LCAgIDg5LCAgIDg5LCAgIDg5LCAgIDg5LCAgIDg5LAotICAgICAgIDg5LCAgIDg5LCAgIDg5LCAgIDg5LCAgIDg5LCAgIDg5LCAgIDg5LCAgLTUwCisgICAgICAtNTAsICAtNTAsICAtNTAsICAtNTAsICAtNTAsICAtNTAsICAtNTAKICAgICB9LAogCiAgICAgewotICAgICAgIDExLCAgLTUxLCAgLTUxLCAgLTUxLCAgLTUxLCAgLTUxLCAgLTUxLCAgLTUxLCAgLTUxLCAgLTUxLAotICAgICAgLTUxLCAgIDg5LCAgIDg5LCAgIDg5LCAgLTUxLCAgLTUxLCAgIDg5LCAgIDg5LCAgIDg5LCAgIDg5LAotICAgICAgIDg5LCAgIDg5LCAgIDg5LCAgIDg5LCAgIDg5LCAgIDg5LCAgIDg5LCAgIDg5LCAgIDkyLCAgIDg5LAotICAgICAgIDg5LCAgIDg5LCAgIDg5LCAgIDg5LCAgIDg5LCAgIDg5LCAgIDg5LCAgLTUxCisgICAgICAgMTEsICAtNTEsICAtNTEsICAgNTIsICAtNTEsICAtNTEsICAtNTEsICAtNTEsICAtNTEsICAtNTEsCisgICAgICAtNTEsICAtNTEsICAtNTEsICAtNTEsICAtNTEsICAtNTEsICAtNTEKICAgICB9LAogCiAgICAgewogICAgICAgIDExLCAgLTUyLCAgLTUyLCAgLTUyLCAgLTUyLCAgLTUyLCAgLTUyLCAgLTUyLCAgLTUyLCAgLTUyLAotICAgICAgLTUyLCAgLTUyLCAgLTUyLCAgLTUyLCAgLTUyLCAgLTUyLCAgLTUyLCAgLTUyLCAgLTUyLCAgLTUyLAotCi0gICAgICAtNTIsICAtNTIsICAtNTIsICAtNTIsICAtNTIsICAtNTIsICAtNTIsICAtNTIsICAtNTIsICAtNTIsCi0gICAgICAtNTIsICAtNTIsICAtNTIsICAtNTIsICAtNTIsICAtNTIsICAtNTIsICAgOTMKKyAgICAgIC01MiwgIC01MiwgIC01MiwgIC01MiwgIC01MiwgIC01MiwgIC01MgogICAgIH0sCiAKICAgICB7Ci0gICAgICAgMTEsICAtNTMsICAgNTMsICAgNTQsICAtNTMsICAtNTMsICAgNTUsICAtNTMsICAtNTMsICAtNTMsCi0gICAgICAtNTMsICAtNTMsICAtNTMsICAtNTMsICAtNTMsICAtNTMsICAtNTMsICAtNTMsICAtNTMsICAtNTMsCi0gICAgICAtNTMsICAtNTMsICAtNTMsICAtNTMsICAtNTMsICAtNTMsICAtNTMsICAtNTMsICAtNTMsICAtNTMsCi0gICAgICAtNTMsICAtNTMsICAtNTMsICAtNTMsICAtNTMsICAtNTMsICAtNTMsICAtNTMKKyAgICAgICAxMSwgIC01MywgIC01MywgIC01MywgIC01MywgIC01MywgIC01MywgIC01MywgIC01MywgIC01MywKKyAgICAgIC01MywgIC01MywgIC01MywgIC01MywgIC01MywgIC01MywgIC01MwogICAgIH0sCiAKICAgICB7Ci0gICAgICAgMTEsICAtNTQsICAtNTQsICAtNTQsICAtNTQsICAtNTQsICAtNTQsICAtNTQsICAtNTQsICAtNTQsCi0gICAgICAtNTQsICAtNTQsICAtNTQsICAtNTQsICAtNTQsICAtNTQsICAtNTQsICAtNTQsICAtNTQsICAtNTQsCi0gICAgICAtNTQsICAtNTQsICAtNTQsICAtNTQsICAtNTQsICAtNTQsICAtNTQsICAtNTQsICAtNTQsICAtNTQsCi0gICAgICAtNTQsICAtNTQsICAtNTQsICAtNTQsICAtNTQsICAtNTQsICAtNTQsICAtNTQKKyAgICAgICAxMSwgICA1NCwgICA1NCwgIC01NCwgICA1NCwgICA1NCwgICA1NCwgICA1NCwgICA1NCwgICA1NCwKKyAgICAgICA1NCwgICA1NCwgICA1NCwgICA1NCwgICA1NCwgICA1NCwgICA1NAogCiAgICAgfSwKIAogICAgIHsKLSAgICAgICAxMSwgICA1NiwgICA1NiwgICA1NywgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwKLSAgICAgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwKLSAgICAgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwKLSAgICAgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NgorICAgICAgIDExLCAgLTU1LCAgLTU1LCAgLTU1LCAgLTU1LCAgLTU1LCAgLTU1LCAgLTU1LCAgLTU1LCAgLTU1LAorICAgICAgLTU1LCAgLTU1LCAgLTU1LCAgLTU1LCAgLTU1LCAgLTU1LCAgLTU1CiAgICAgfSwKIAogICAgIHsKLSAgICAgICAxMSwgICA1NiwgICA1NiwgICA1NywgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwKLSAgICAgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwKLSAgICAgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwKLSAgICAgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NgorICAgICAgIDExLCAgLTU2LCAgLTU2LCAgLTU2LCAgLTU2LCAgLTU2LCAgLTU2LCAgLTU2LCAgLTU2LCAgLTU2LAorICAgICAgLTU2LCAgIDYwLCAgIDU3LCAgIDU3LCAgLTU2LCAgLTU2LCAgLTU2CiAgICAgfSwKIAogICAgIHsKICAgICAgICAxMSwgIC01NywgIC01NywgIC01NywgIC01NywgIC01NywgIC01NywgIC01NywgIC01NywgIC01NywKLSAgICAgIC01NywgIC01NywgIC01NywgIC01NywgIC01NywgIC01NywgIC01NywgIC01NywgIC01NywgIC01NywKLQotICAgICAgLTU3LCAgLTU3LCAgLTU3LCAgLTU3LCAgLTU3LCAgLTU3LCAgLTU3LCAgLTU3LCAgLTU3LCAgLTU3LAotICAgICAgLTU3LCAgLTU3LCAgLTU3LCAgLTU3LCAgLTU3LCAgLTU3LCAgLTU3LCAgLTU3CisgICAgICAtNTcsICAgNTcsICAgNTcsICAgNTcsICAtNTcsICAtNTcsICAtNTcKICAgICB9LAogCiAgICAgewogICAgICAgIDExLCAgLTU4LCAgLTU4LCAgLTU4LCAgLTU4LCAgLTU4LCAgLTU4LCAgLTU4LCAgLTU4LCAgLTU4LAotICAgICAgLTU4LCAgLTU4LCAgLTU4LCAgIDU4LCAgLTU4LCAgLTU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgLTU4CisgICAgICAtNTgsICAtNTgsICAtNTgsICAtNTgsICAtNTgsICAtNTgsICAtNTgKICAgICB9LAogCiAgICAgewogICAgICAgIDExLCAgLTU5LCAgLTU5LCAgLTU5LCAgLTU5LCAgLTU5LCAgLTU5LCAgLTU5LCAgLTU5LCAgLTU5LAotICAgICAgLTU5LCAgLTU5LCAgLTU5LCAgIDU4LCAgLTU5LCAgLTU5LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDk0LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgLTU5CisgICAgICAtNTksICAtNTksICAtNTksICAtNTksICAtNTksICAtNTksICAtNTkKIAogICAgIH0sCiAKICAgICB7CiAgICAgICAgMTEsICAtNjAsICAtNjAsICAtNjAsICAtNjAsICAtNjAsICAtNjAsICAtNjAsICAtNjAsICAtNjAsCi0gICAgICAtNjAsICAtNjAsICAtNjAsICAgNTgsICAtNjAsICAtNjAsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgOTUsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAtNjAKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAgLTYxLCAgLTYxLCAgLTYxLCAgLTYxLCAgLTYxLCAgLTYxLCAgLTYxLCAgLTYxLCAgLTYxLAotICAgICAgLTYxLCAgLTYxLCAgLTYxLCAgIDU4LCAgLTYxLCAgLTYxLCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDk2LCAgIDk3LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgLTYxCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgIC02MiwgIC02MiwgIC02MiwgIC02MiwgIC02MiwgIC02MiwgIC02MiwgIC02MiwgIC02MiwKLSAgICAgIC02MiwgIC02MiwgIC02MiwgICA1OCwgIC02MiwgIC02MiwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLQotICAgICAgIDU4LCAgIDU4LCAgIDk4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDk5LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgLTYyCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgIC02MywgIC02MywgIC02MywgIC02MywgIC02MywgIC02MywgIC02MywgIC02MywgIC02MywKLSAgICAgIC02MywgIC02MywgIC02MywgICA1OCwgIC02MywgIC02MywgICA1OCwgIDEwMCwgICA1OCwgICA1OCwKLSAgICAgIDEwMSwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgIC02MwotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsICAtNjQsICAtNjQsICAtNjQsICAtNjQsICAtNjQsICAtNjQsICAtNjQsICAtNjQsICAtNjQsCi0gICAgICAtNjQsICAtNjQsICAtNjQsICAgNTgsICAtNjQsICAtNjQsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAxMDIsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAxMDMsICAtNjQKLQotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsICAtNjUsICAtNjUsICAtNjUsICAtNjUsICAtNjUsICAtNjUsICAtNjUsICAtNjUsICAtNjUsCi0gICAgICAtNjUsICAtNjUsICAtNjUsICAgNTgsICAtNjUsICAtNjUsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAtNjUKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAgLTY2LCAgLTY2LCAgLTY2LCAgLTY2LCAgLTY2LCAgLTY2LCAgLTY2LCAgLTY2LCAgLTY2LAotICAgICAgLTY2LCAgLTY2LCAgLTY2LCAgIDU4LCAgLTY2LCAgLTY2LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgMTA0LCAgIDU4LCAgIDU4LCAgLTY2Ci0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgIC02NywgIC02NywgIC02NywgIC02NywgIC02NywgIC02NywgIC02NywgIC02NywgIC02NywKLSAgICAgIC02NywgIC02NywgIC02NywgICA1OCwgIC02NywgIC02NywgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLQotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgMTA1LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgLTY3Ci0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgIC02OCwgIC02OCwgIC02OCwgIC02OCwgIC02OCwgIC02OCwgIC02OCwgIC02OCwgIC02OCwKLSAgICAgIC02OCwgIC02OCwgIC02OCwgICA1OCwgIC02OCwgIC02OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgIDEwNiwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgIC02OAotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsICAtNjksICAtNjksICAtNjksICAtNjksICAtNjksICAtNjksICAtNjksICAtNjksICAtNjksCi0gICAgICAtNjksICAtNjksICAtNjksICAgNTgsICAtNjksICAtNjksICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAxMDcsICAgNTgsICAgNTgsICAtNjkKLQotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsICAtNzAsICAtNzAsICAtNzAsICAtNzAsICAtNzAsICAtNzAsICAtNzAsICAtNzAsICAtNzAsCi0gICAgICAtNzAsICAtNzAsICAtNzAsICAgNTgsICAtNzAsICAtNzAsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAxMDgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAtNzAKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAgLTcxLCAgLTcxLCAgLTcxLCAgLTcxLCAgLTcxLCAgLTcxLCAgLTcxLCAgLTcxLCAgLTcxLAotICAgICAgLTcxLCAgLTcxLCAgLTcxLCAgIDU4LCAgLTcxLCAgLTcxLCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgMTA5LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgLTcxCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgIC03MiwgIC03MiwgIC03MiwgIC03MiwgIC03MiwgIC03MiwgIC03MiwgIC03MiwgIC03MiwKLSAgICAgIC03MiwgIC03MiwgIC03MiwgICA1OCwgIC03MiwgIC03MiwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLQotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgMTEwLCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgLTcyCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgIC03MywgIC03MywgIC03MywgIC03MywgIC03MywgIC03MywgIC03MywgIC03MywgIC03MywKLSAgICAgIC03MywgIC03MywgIC03MywgICA1OCwgIC03MywgIC03MywgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgIDExMSwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgIC03MwotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsICAtNzQsICAtNzQsICAtNzQsICAtNzQsICAtNzQsICAtNzQsICAtNzQsICAtNzQsICAtNzQsCi0gICAgICAtNzQsICAtNzQsICAtNzQsICAgNTgsICAtNzQsICAtNzQsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAxMTIsICAgNTgsICAtNzQKLQotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsICAtNzUsICAtNzUsICAtNzUsICAtNzUsICAtNzUsICAtNzUsICAtNzUsICAtNzUsICAtNzUsCi0gICAgICAtNzUsICAtNzUsICAtNzUsICAgNTgsICAtNzUsICAtNzUsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAxMTMsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAtNzUKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAgLTc2LCAgLTc2LCAgLTc2LCAgLTc2LCAgLTc2LCAgLTc2LCAgLTc2LCAgLTc2LCAgLTc2LAotICAgICAgLTc2LCAgLTc2LCAgLTc2LCAgIDU4LCAgLTc2LCAgLTc2LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgMTE0LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgLTc2Ci0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgICA3NywgICA3NywgIC03NywgICA3NywgICA3NywgICA3NywgICA3NywgICA3NywgICA3NywKLSAgICAgICA3NywgICA3NywgICA3NywgICA3NywgICA3NywgICA3NywgICA3NywgICA3NywgICA3NywgICA3NywKLQotICAgICAgIDc3LCAgIDc3LCAgIDc3LCAgIDc3LCAgIDc3LCAgIDc3LCAgIDc3LCAgIDc3LCAgIDc3LCAgIDc3LAotICAgICAgIDc3LCAgIDc3LCAgIDc3LCAgIDc3LCAgIDc3LCAgIDc3LCAgIDc3LCAgIDc3Ci0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgIC03OCwgICA3OCwgICA3OSwgIC03OCwgIC03OCwgIC03OCwgIC03OCwgIC03OCwgIC03OCwKLSAgICAgIC03OCwgIC03OCwgIC03OCwgIC03OCwgIC03OCwgIC03OCwgIC03OCwgIC03OCwgIC03OCwgIC03OCwKLSAgICAgIC03OCwgIC03OCwgIC03OCwgIC03OCwgIC03OCwgIC03OCwgIC03OCwgIC03OCwgIC03OCwgIC03OCwKLSAgICAgIC03OCwgIC03OCwgIC03OCwgIC03OCwgIC03OCwgIC03OCwgIC03OCwgIC03OAotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsICAgODAsICAtNzksICAtNzksICAgODAsICAgODAsICAgODAsICAgODAsICAgODAsICAgODAsCi0gICAgICAgODAsICAgODAsICAgODAsICAgODAsICAgODAsICAgODAsICAgODAsICAgODAsICAgODAsICAgODAsCi0gICAgICAgODAsICAgODAsICAgODAsICAgODAsICAgODAsICAgODAsICAgODAsICAgODAsICAgODAsICAgODAsCi0gICAgICAgODAsICAgODAsICAgODAsICAgODAsICAgODAsICAgODAsICAgODAsICAgODAKLQotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsICAtODAsICAtODAsICAtODAsICAtODAsICAtODAsICAtODAsICAtODAsICAtODAsICAtODAsCi0gICAgICAtODAsICAtODAsICAtODAsICAtODAsICAtODAsICAtODAsICAtODAsICAtODAsICAtODAsICAtODAsCi0gICAgICAtODAsICAtODAsICAtODAsICAtODAsICAtODAsICAtODAsICAtODAsICAtODAsICAtODAsICAtODAsCi0gICAgICAtODAsICAtODAsICAtODAsICAtODAsICAtODAsICAtODAsICAtODAsICAtODAKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAgIDgxLCAgIDgxLCAgIDgyLCAgIDgxLCAgLTgxLCAgIDgxLCAgIDgxLCAgLTgxLCAgIDgxLAotICAgICAgIDgxLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgxLCAgLTgxLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgxLAotICAgICAgIDgxLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgxLAotICAgICAgIDgxLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgxCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgIC04MiwgIC04MiwgIC04MiwgIC04MiwgIC04MiwgIC04MiwgIC04MiwgIC04MiwgIC04MiwKLSAgICAgIC04MiwgIC04MiwgIC04MiwgIC04MiwgIC04MiwgIC04MiwgIC04MiwgIC04MiwgIC04MiwgIC04MiwKLQotICAgICAgLTgyLCAgLTgyLCAgLTgyLCAgLTgyLCAgLTgyLCAgLTgyLCAgLTgyLCAgLTgyLCAgLTgyLCAgLTgyLAotICAgICAgLTgyLCAgLTgyLCAgLTgyLCAgLTgyLCAgLTgyLCAgLTgyLCAgLTgyLCAgLTgyCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgIC04MywgIC04MywgICA4NCwgIC04MywgIC04MywgIC04MywgIC04MywgIC04MywgIC04MywKLSAgICAgIC04MywgIC04MywgIC04MywgIC04MywgIC04MywgIC04MywgIC04MywgIC04MywgIC04MywgIC04MywKLSAgICAgIC04MywgIC04MywgIC04MywgIC04MywgIC04MywgIC04MywgIC04MywgIC04MywgIC04MywgIC04MywKLSAgICAgIC04MywgIC04MywgIC04MywgIC04MywgIC04MywgIC04MywgIC04MywgIC04MwotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsICAtODQsICAtODQsICAtODQsICAtODQsICAtODQsICAtODQsICAtODQsICAtODQsICAtODQsCi0gICAgICAtODQsICAtODQsICAtODQsICAtODQsICAtODQsICAtODQsICAtODQsICAtODQsICAtODQsICAtODQsCi0gICAgICAtODQsICAtODQsICAtODQsICAtODQsICAtODQsICAtODQsICAtODQsICAtODQsICAtODQsICAtODQsCi0gICAgICAtODQsICAtODQsICAtODQsICAtODQsICAtODQsICAtODQsICAtODQsICAtODQKLQotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsICAtODUsICAtODUsICAtODUsICAtODUsICAtODUsICAtODUsICAtODUsICAtODUsICAtODUsCi0gICAgICAtODUsICAtODUsICAtODUsICAtODUsICAtODUsICAtODUsICAtODUsICAtODUsICAtODUsICAtODUsCi0gICAgICAtODUsICAtODUsICAtODUsICAtODUsICAtODUsICAtODUsICAtODUsICAtODUsICAtODUsICAtODUsCi0gICAgICAtODUsICAtODUsICAtODUsICAtODUsICAtODUsICAtODUsICAtODUsICAtODUKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAgIDg2LCAgIDg2LCAgLTg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LAotICAgICAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LAotICAgICAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LAotICAgICAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2Ci0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgIC04NywgIC04NywgIC04NywgIC04NywgIC04NywgIC04NywgIC04NywgIC04NywgIC04NywKLSAgICAgIC04NywgIC04NywgIC04NywgIC04NywgIC04NywgIC04NywgIC04NywgIC04NywgIC04NywgIC04NywKLQotICAgICAgLTg3LCAgLTg3LCAgLTg3LCAgLTg3LCAgLTg3LCAgLTg3LCAgLTg3LCAgLTg3LCAgLTg3LCAgLTg3LAotICAgICAgLTg3LCAgLTg3LCAgLTg3LCAgLTg3LCAgLTg3LCAgLTg3LCAgLTg3LCAgLTg3Ci0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgIC04OCwgIC04OCwgIC04OCwgIC04OCwgIC04OCwgIC04OCwgIC04OCwgIC04OCwgIC04OCwKLSAgICAgIC04OCwgIDExNSwgICA4OSwgICA4OSwgIC04OCwgIC04OCwgICA4OSwgICA4OSwgICA4OSwgICA4OSwKLSAgICAgICA4OSwgICA4OSwgICA4OSwgICA4OSwgICA4OSwgICA4OSwgICA4OSwgICA4OSwgICA4OSwgICA4OSwKLSAgICAgICA4OSwgICA4OSwgICA4OSwgICA4OSwgICA4OSwgICA4OSwgICA4OSwgIC04OAotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsICAtODksICAtODksICAtODksICAtODksICAtODksICAtODksICAtODksICAtODksICAtODksCi0gICAgICAtODksICAgODksICAgODksICAgODksICAtODksICAtODksICAgODksICAgODksICAgODksICAgODksCi0gICAgICAgODksICAgODksICAgODksICAgODksICAgODksICAgODksICAgODksICAgODksICAgODksICAgODksCi0gICAgICAgODksICAgODksICAgODksICAgODksICAgODksICAgODksICAgODksICAtODkKLQotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsICAtOTAsICAtOTAsICAtOTAsICAtOTAsICAtOTAsICAtOTAsICAtOTAsICAtOTAsICAtOTAsCi0gICAgICAtOTAsICAtOTAsICAtOTAsICAtOTAsICAtOTAsICAtOTAsICAtOTAsICAtOTAsICAtOTAsICAtOTAsCi0gICAgICAtOTAsICAtOTAsICAtOTAsICAtOTAsICAtOTAsICAtOTAsICAtOTAsICAtOTAsICAtOTAsICAtOTAsCi0gICAgICAtOTAsICAtOTAsICAtOTAsICAtOTAsICAtOTAsICAtOTAsICAtOTAsICAtOTAKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAgLTkxLCAgLTkxLCAgLTkxLCAgLTkxLCAgLTkxLCAgLTkxLCAgLTkxLCAgLTkxLCAgLTkxLAotICAgICAgLTkxLCAgIDg5LCAgIDg5LCAgIDg5LCAgLTkxLCAgLTkxLCAgIDg5LCAgIDg5LCAgIDg5LCAgIDg5LAotICAgICAgIDg5LCAgIDg5LCAgIDg5LCAgIDg5LCAgIDg5LCAgIDg5LCAgIDg5LCAgIDg5LCAgIDg5LCAgIDg5LAotICAgICAgIDg5LCAgIDg5LCAgIDg5LCAgIDg5LCAgIDg5LCAgIDg5LCAgIDg5LCAgLTkxCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgIC05MiwgIC05MiwgIC05MiwgIC05MiwgIC05MiwgIC05MiwgIC05MiwgIC05MiwgIC05MiwKLSAgICAgIC05MiwgICA4OSwgICA4OSwgICA4OSwgIC05MiwgIC05MiwgICA4OSwgICA4OSwgICA4OSwgICA4OSwKLQotICAgICAgIDg5LCAgIDg5LCAgIDg5LCAgIDg5LCAgIDg5LCAgIDg5LCAgIDg5LCAgIDg5LCAgIDg5LCAgIDg5LAotICAgICAgIDg5LCAgIDg5LCAgIDg5LCAgIDg5LCAgIDg5LCAgIDg5LCAgIDg5LCAgLTkyCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgIC05MywgIC05MywgIC05MywgIC05MywgIC05MywgIC05MywgIC05MywgIC05MywgIC05MywKLSAgICAgIC05MywgIC05MywgIC05MywgIC05MywgIC05MywgIC05MywgIC05MywgIC05MywgIC05MywgIC05MywKLSAgICAgIC05MywgIC05MywgIC05MywgIC05MywgIC05MywgIC05MywgIC05MywgIC05MywgIC05MywgIC05MywKLSAgICAgIC05MywgIC05MywgIC05MywgIC05MywgIC05MywgIC05MywgIC05MywgIC05MwotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsICAtOTQsICAtOTQsICAtOTQsICAtOTQsICAtOTQsICAtOTQsICAtOTQsICAtOTQsICAtOTQsCi0gICAgICAtOTQsICAtOTQsICAtOTQsICAgNTgsICAtOTQsICAtOTQsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAxMTYsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAtOTQKLQotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsICAtOTUsICAtOTUsICAtOTUsICAtOTUsICAtOTUsICAtOTUsICAtOTUsICAtOTUsICAtOTUsCi0gICAgICAtOTUsICAtOTUsICAtOTUsICAgNTgsICAtOTUsICAtOTUsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAxMTcsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAtOTUKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAgLTk2LCAgLTk2LCAgLTk2LCAgLTk2LCAgLTk2LCAgLTk2LCAgLTk2LCAgLTk2LCAgLTk2LAotICAgICAgLTk2LCAgLTk2LCAgLTk2LCAgIDU4LCAgLTk2LCAgLTk2LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgMTE4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgLTk2Ci0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgIC05NywgIC05NywgIC05NywgIC05NywgIC05NywgIC05NywgIC05NywgIC05NywgIC05NywKLSAgICAgIC05NywgIC05NywgIC05NywgICA1OCwgIC05NywgIC05NywgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLQotICAgICAgIDU4LCAgIDU4LCAgMTE5LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgLTk3Ci0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgIC05OCwgIC05OCwgIC05OCwgIC05OCwgIC05OCwgIC05OCwgIC05OCwgIC05OCwgIC05OCwKLSAgICAgIC05OCwgIC05OCwgIC05OCwgICA1OCwgIC05OCwgIC05OCwgIDEyMCwgIDEyMSwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgIC05OAotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsICAtOTksICAtOTksICAtOTksICAtOTksICAtOTksICAtOTksICAtOTksICAtOTksICAtOTksCi0gICAgICAtOTksICAtOTksICAtOTksICAgNTgsICAtOTksICAtOTksICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAxMjIsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAtOTkKLQotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsIC0xMDAsIC0xMDAsIC0xMDAsIC0xMDAsIC0xMDAsIC0xMDAsIC0xMDAsIC0xMDAsIC0xMDAsCi0gICAgIC0xMDAsIC0xMDAsIC0xMDAsICAgNTgsIC0xMDAsIC0xMDAsICAgNTgsICAgNTgsICAxMjMsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0xMDAKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAtMTAxLCAtMTAxLCAtMTAxLCAtMTAxLCAtMTAxLCAtMTAxLCAtMTAxLCAtMTAxLCAtMTAxLAotICAgICAtMTAxLCAtMTAxLCAtMTAxLCAgIDU4LCAtMTAxLCAtMTAxLCAgIDU4LCAgIDU4LCAgIDU4LCAgMTI0LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgMTI1LCAgIDU4LCAgMTI2LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAtMTAxCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTEwMiwgLTEwMiwgLTEwMiwgLTEwMiwgLTEwMiwgLTEwMiwgLTEwMiwgLTEwMiwgLTEwMiwKLSAgICAgLTEwMiwgLTEwMiwgLTEwMiwgICA1OCwgLTEwMiwgLTEwMiwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLQotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgMTI3LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAtMTAyCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTEwMywgLTEwMywgLTEwMywgLTEwMywgLTEwMywgLTEwMywgLTEwMywgLTEwMywgLTEwMywKLSAgICAgLTEwMywgLTEwMywgLTEwMywgICA1OCwgLTEwMywgLTEwMywgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgLTEwMwotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsIC0xMDQsIC0xMDQsIC0xMDQsIC0xMDQsIC0xMDQsIC0xMDQsIC0xMDQsIC0xMDQsIC0xMDQsCi0gICAgIC0xMDQsIC0xMDQsIC0xMDQsICAgNTgsIC0xMDQsIC0xMDQsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0xMDQKLQotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsIC0xMDUsIC0xMDUsIC0xMDUsIC0xMDUsIC0xMDUsIC0xMDUsIC0xMDUsIC0xMDUsIC0xMDUsCi0gICAgIC0xMDUsIC0xMDUsIC0xMDUsICAgNTgsIC0xMDUsIC0xMDUsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAxMjgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0xMDUKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAtMTA2LCAtMTA2LCAtMTA2LCAtMTA2LCAtMTA2LCAtMTA2LCAtMTA2LCAtMTA2LCAtMTA2LAotICAgICAtMTA2LCAtMTA2LCAtMTA2LCAgIDU4LCAtMTA2LCAtMTA2LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgMTI5LCAgIDU4LCAtMTA2Ci0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTEwNywgLTEwNywgLTEwNywgLTEwNywgLTEwNywgLTEwNywgLTEwNywgLTEwNywgLTEwNywKLSAgICAgLTEwNywgLTEwNywgLTEwNywgICA1OCwgLTEwNywgLTEwNywgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLQotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgMTMwLCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAtMTA3Ci0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTEwOCwgLTEwOCwgLTEwOCwgLTEwOCwgLTEwOCwgLTEwOCwgLTEwOCwgLTEwOCwgLTEwOCwKLSAgICAgLTEwOCwgLTEwOCwgLTEwOCwgICA1OCwgLTEwOCwgLTEwOCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgIDEzMSwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgLTEwOAotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsIC0xMDksIC0xMDksIC0xMDksIC0xMDksIC0xMDksIC0xMDksIC0xMDksIC0xMDksIC0xMDksCi0gICAgIC0xMDksIC0xMDksIC0xMDksICAgNTgsIC0xMDksIC0xMDksICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAxMzIsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0xMDkKLQotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsIC0xMTAsIC0xMTAsIC0xMTAsIC0xMTAsIC0xMTAsIC0xMTAsIC0xMTAsIC0xMTAsIC0xMTAsCi0gICAgIC0xMTAsIC0xMTAsIC0xMTAsICAgNTgsIC0xMTAsIC0xMTAsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAxMzMsICAgNTgsIC0xMTAKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAtMTExLCAtMTExLCAtMTExLCAtMTExLCAtMTExLCAtMTExLCAtMTExLCAtMTExLCAtMTExLAotICAgICAtMTExLCAtMTExLCAtMTExLCAgIDU4LCAtMTExLCAtMTExLCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgMTM0LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAtMTExCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTExMiwgLTExMiwgLTExMiwgLTExMiwgLTExMiwgLTExMiwgLTExMiwgLTExMiwgLTExMiwKLSAgICAgLTExMiwgLTExMiwgLTExMiwgICA1OCwgLTExMiwgLTExMiwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLQotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgMTM1LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAtMTEyCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTExMywgLTExMywgLTExMywgLTExMywgLTExMywgLTExMywgLTExMywgLTExMywgLTExMywKLSAgICAgLTExMywgLTExMywgLTExMywgICA1OCwgLTExMywgLTExMywgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgIDEzNiwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgLTExMwotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsIC0xMTQsIC0xMTQsIC0xMTQsIC0xMTQsIC0xMTQsIC0xMTQsIC0xMTQsIC0xMTQsIC0xMTQsCi0gICAgIC0xMTQsIC0xMTQsIC0xMTQsICAgNTgsIC0xMTQsIC0xMTQsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAxMzcsICAgNTgsICAgNTgsICAgNTgsIC0xMTQKLQotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsIC0xMTUsIC0xMTUsIC0xMTUsIC0xMTUsIC0xMTUsIC0xMTUsIC0xMTUsIC0xMTUsIC0xMTUsCi0gICAgIC0xMTUsICAgODksICAgODksICAgODksIC0xMTUsIC0xMTUsICAgODksICAgODksICAgODksICAgODksCi0gICAgICAgODksICAgODksICAgODksICAgODksICAgODksICAgODksICAgODksICAgODksICAgODksICAgODksCi0gICAgICAgODksICAgODksICAgODksICAgODksICAgODksICAgODksICAgODksIC0xMTUKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAtMTE2LCAtMTE2LCAtMTE2LCAtMTE2LCAtMTE2LCAtMTE2LCAtMTE2LCAtMTE2LCAtMTE2LAotICAgICAtMTE2LCAtMTE2LCAtMTE2LCAgIDU4LCAtMTE2LCAtMTE2LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgMTM4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAtMTE2Ci0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTExNywgLTExNywgLTExNywgLTExNywgLTExNywgLTExNywgLTExNywgLTExNywgLTExNywKLSAgICAgLTExNywgLTExNywgLTExNywgICA1OCwgLTExNywgLTExNywgICA1OCwgICA1OCwgICA1OCwgIDEzOSwKLQotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAtMTE3Ci0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTExOCwgLTExOCwgLTExOCwgLTExOCwgLTExOCwgLTExOCwgLTExOCwgLTExOCwgLTExOCwKLSAgICAgLTExOCwgLTExOCwgLTExOCwgICA1OCwgLTExOCwgLTExOCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgIDE0MCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgLTExOAotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsIC0xMTksIC0xMTksIC0xMTksIC0xMTksIC0xMTksIC0xMTksIC0xMTksIC0xMTksIC0xMTksCi0gICAgIC0xMTksIC0xMTksIC0xMTksICAgNTgsIC0xMTksIC0xMTksICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAxNDEsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0xMTkKLQotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsIC0xMjAsIC0xMjAsIC0xMjAsIC0xMjAsIC0xMjAsIC0xMjAsIC0xMjAsIC0xMjAsIC0xMjAsCi0gICAgIC0xMjAsIC0xMjAsIC0xMjAsICAgNTgsIC0xMjAsIC0xMjAsICAgNTgsICAgNTgsICAxNDIsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAxNDMsICAgNTgsICAgNTgsIC0xMjAKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAtMTIxLCAtMTIxLCAtMTIxLCAtMTIxLCAtMTIxLCAtMTIxLCAtMTIxLCAtMTIxLCAtMTIxLAotICAgICAtMTIxLCAtMTIxLCAtMTIxLCAgIDU4LCAtMTIxLCAtMTIxLCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgMTQ0LCAgIDU4LCAtMTIxCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTEyMiwgLTEyMiwgLTEyMiwgLTEyMiwgLTEyMiwgLTEyMiwgLTEyMiwgLTEyMiwgLTEyMiwKLSAgICAgLTEyMiwgLTEyMiwgLTEyMiwgICA1OCwgLTEyMiwgLTEyMiwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLQotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgMTQ1LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAtMTIyCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTEyMywgLTEyMywgLTEyMywgLTEyMywgLTEyMywgLTEyMywgLTEyMywgLTEyMywgLTEyMywKLSAgICAgLTEyMywgLTEyMywgLTEyMywgICA1OCwgLTEyMywgLTEyMywgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgIDE0NiwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgLTEyMwotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsIC0xMjQsIC0xMjQsIC0xMjQsIC0xMjQsIC0xMjQsIC0xMjQsIC0xMjQsIC0xMjQsIC0xMjQsCi0gICAgIC0xMjQsIC0xMjQsIC0xMjQsICAgNTgsIC0xMjQsIC0xMjQsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAxNDcsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0xMjQKLQotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsIC0xMjUsIC0xMjUsIC0xMjUsIC0xMjUsIC0xMjUsIC0xMjUsIC0xMjUsIC0xMjUsIC0xMjUsCi0gICAgIC0xMjUsIC0xMjUsIC0xMjUsICAgNTgsIC0xMjUsIC0xMjUsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAxNDgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0xMjUKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAtMTI2LCAtMTI2LCAtMTI2LCAtMTI2LCAtMTI2LCAtMTI2LCAtMTI2LCAtMTI2LCAtMTI2LAotICAgICAtMTI2LCAtMTI2LCAtMTI2LCAgIDU4LCAtMTI2LCAtMTI2LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgMTQ5LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAtMTI2Ci0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTEyNywgLTEyNywgLTEyNywgLTEyNywgLTEyNywgLTEyNywgLTEyNywgLTEyNywgLTEyNywKLSAgICAgLTEyNywgLTEyNywgLTEyNywgICA1OCwgLTEyNywgLTEyNywgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLQotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAtMTI3Ci0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTEyOCwgLTEyOCwgLTEyOCwgLTEyOCwgLTEyOCwgLTEyOCwgLTEyOCwgLTEyOCwgLTEyOCwKLSAgICAgLTEyOCwgLTEyOCwgLTEyOCwgICA1OCwgLTEyOCwgLTEyOCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgIDE1MCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgLTEyOAotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsIC0xMjksIC0xMjksIC0xMjksIC0xMjksIC0xMjksIC0xMjksIC0xMjksIC0xMjksIC0xMjksCi0gICAgIC0xMjksIC0xMjksIC0xMjksICAgNTgsIC0xMjksIC0xMjksICAgNTgsICAgNTgsICAgNTgsICAxNTEsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0xMjkKLQotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsIC0xMzAsIC0xMzAsIC0xMzAsIC0xMzAsIC0xMzAsIC0xMzAsIC0xMzAsIC0xMzAsIC0xMzAsCi0gICAgIC0xMzAsIC0xMzAsIC0xMzAsICAgNTgsIC0xMzAsIC0xMzAsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAxNTIsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0xMzAKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAtMTMxLCAtMTMxLCAtMTMxLCAtMTMxLCAtMTMxLCAtMTMxLCAtMTMxLCAtMTMxLCAtMTMxLAotICAgICAtMTMxLCAtMTMxLCAtMTMxLCAgIDU4LCAtMTMxLCAtMTMxLCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgMTUzLCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAtMTMxCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTEzMiwgLTEzMiwgLTEzMiwgLTEzMiwgLTEzMiwgLTEzMiwgLTEzMiwgLTEzMiwgLTEzMiwKLSAgICAgLTEzMiwgLTEzMiwgLTEzMiwgICA1OCwgLTEzMiwgLTEzMiwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLQotICAgICAgIDU4LCAgMTU0LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAtMTMyCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTEzMywgLTEzMywgLTEzMywgLTEzMywgLTEzMywgLTEzMywgLTEzMywgLTEzMywgLTEzMywKLSAgICAgLTEzMywgLTEzMywgLTEzMywgICA1OCwgLTEzMywgLTEzMywgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgIDE1NSwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgLTEzMwotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsIC0xMzQsIC0xMzQsIC0xMzQsIC0xMzQsIC0xMzQsIC0xMzQsIC0xMzQsIC0xMzQsIC0xMzQsCi0gICAgIC0xMzQsIC0xMzQsIC0xMzQsICAgNTgsIC0xMzQsIC0xMzQsICAgNTgsICAgNTgsICAgNTgsICAxNTYsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0xMzQKLQotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsIC0xMzUsIC0xMzUsIC0xMzUsIC0xMzUsIC0xMzUsIC0xMzUsIC0xMzUsIC0xMzUsIC0xMzUsCi0gICAgIC0xMzUsIC0xMzUsIC0xMzUsICAgNTgsIC0xMzUsIC0xMzUsICAgNTgsICAgNTgsICAgNTgsICAxNTcsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0xMzUKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAtMTM2LCAtMTM2LCAtMTM2LCAtMTM2LCAtMTM2LCAtMTM2LCAtMTM2LCAtMTM2LCAtMTM2LAotICAgICAtMTM2LCAtMTM2LCAtMTM2LCAgIDU4LCAtMTM2LCAtMTM2LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgMTU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAtMTM2Ci0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTEzNywgLTEzNywgLTEzNywgLTEzNywgLTEzNywgLTEzNywgLTEzNywgLTEzNywgLTEzNywKLSAgICAgLTEzNywgLTEzNywgLTEzNywgICA1OCwgLTEzNywgLTEzNywgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLQotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgMTU5LCAgIDU4LCAgIDU4LCAtMTM3Ci0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTEzOCwgLTEzOCwgLTEzOCwgLTEzOCwgLTEzOCwgLTEzOCwgLTEzOCwgLTEzOCwgLTEzOCwKLSAgICAgLTEzOCwgLTEzOCwgLTEzOCwgICA1OCwgLTEzOCwgLTEzOCwgICA1OCwgIDE2MCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgLTEzOAotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsIC0xMzksIC0xMzksIC0xMzksIC0xMzksIC0xMzksIC0xMzksIC0xMzksIC0xMzksIC0xMzksCi0gICAgIC0xMzksIC0xMzksIC0xMzksICAgNTgsIC0xMzksIC0xMzksICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAxNjEsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0xMzkKLQotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsIC0xNDAsIC0xNDAsIC0xNDAsIC0xNDAsIC0xNDAsIC0xNDAsIC0xNDAsIC0xNDAsIC0xNDAsCi0gICAgIC0xNDAsIC0xNDAsIC0xNDAsICAgNTgsIC0xNDAsIC0xNDAsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAxNjIsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0xNDAKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAtMTQxLCAtMTQxLCAtMTQxLCAtMTQxLCAtMTQxLCAtMTQxLCAtMTQxLCAtMTQxLCAtMTQxLAotICAgICAtMTQxLCAtMTQxLCAtMTQxLCAgIDU4LCAtMTQxLCAtMTQxLCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgMTYzLCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAtMTQxCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTE0MiwgLTE0MiwgLTE0MiwgLTE0MiwgLTE0MiwgLTE0MiwgLTE0MiwgLTE0MiwgLTE0MiwKLSAgICAgLTE0MiwgLTE0MiwgLTE0MiwgICA1OCwgLTE0MiwgLTE0MiwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLQotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgMTY0LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAtMTQyCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTE0MywgLTE0MywgLTE0MywgLTE0MywgLTE0MywgLTE0MywgLTE0MywgLTE0MywgLTE0MywKLSAgICAgLTE0MywgLTE0MywgLTE0MywgICA1OCwgLTE0MywgLTE0MywgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgIDE2NSwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgLTE0MwotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsIC0xNDQsIC0xNDQsIC0xNDQsIC0xNDQsIC0xNDQsIC0xNDQsIC0xNDQsIC0xNDQsIC0xNDQsCi0gICAgIC0xNDQsIC0xNDQsIC0xNDQsICAgNTgsIC0xNDQsIC0xNDQsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAxNjYsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0xNDQKLQotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsIC0xNDUsIC0xNDUsIC0xNDUsIC0xNDUsIC0xNDUsIC0xNDUsIC0xNDUsIC0xNDUsIC0xNDUsCi0gICAgIC0xNDUsIC0xNDUsIC0xNDUsICAgNTgsIC0xNDUsIC0xNDUsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAxNjcsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0xNDUKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAtMTQ2LCAtMTQ2LCAtMTQ2LCAtMTQ2LCAtMTQ2LCAtMTQ2LCAtMTQ2LCAtMTQ2LCAtMTQ2LAotICAgICAtMTQ2LCAtMTQ2LCAtMTQ2LCAgIDU4LCAtMTQ2LCAtMTQ2LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgMTY4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAtMTQ2Ci0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTE0NywgLTE0NywgLTE0NywgLTE0NywgLTE0NywgLTE0NywgLTE0NywgLTE0NywgLTE0NywKLSAgICAgLTE0NywgLTE0NywgLTE0NywgICA1OCwgLTE0NywgLTE0NywgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLQotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgMTY5LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAtMTQ3Ci0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTE0OCwgLTE0OCwgLTE0OCwgLTE0OCwgLTE0OCwgLTE0OCwgLTE0OCwgLTE0OCwgLTE0OCwKLSAgICAgLTE0OCwgLTE0OCwgLTE0OCwgICA1OCwgLTE0OCwgLTE0OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgLTE0OAotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsIC0xNDksIC0xNDksIC0xNDksIC0xNDksIC0xNDksIC0xNDksIC0xNDksIC0xNDksIC0xNDksCi0gICAgIC0xNDksIC0xNDksIC0xNDksICAgNTgsIC0xNDksIC0xNDksICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAxNzAsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0xNDkKLQotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsIC0xNTAsIC0xNTAsIC0xNTAsIC0xNTAsIC0xNTAsIC0xNTAsIC0xNTAsIC0xNTAsIC0xNTAsCi0gICAgIC0xNTAsIC0xNTAsIC0xNTAsICAgNTgsIC0xNTAsIC0xNTAsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAxNzEsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0xNTAKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAtMTUxLCAtMTUxLCAtMTUxLCAtMTUxLCAtMTUxLCAtMTUxLCAtMTUxLCAtMTUxLCAtMTUxLAotICAgICAtMTUxLCAtMTUxLCAtMTUxLCAgIDU4LCAtMTUxLCAtMTUxLCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgMTcyLAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAtMTUxCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTE1MiwgLTE1MiwgLTE1MiwgLTE1MiwgLTE1MiwgLTE1MiwgLTE1MiwgLTE1MiwgLTE1MiwKLSAgICAgLTE1MiwgLTE1MiwgLTE1MiwgICA1OCwgLTE1MiwgLTE1MiwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLQotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgMTczLCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAtMTUyCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTE1MywgLTE1MywgLTE1MywgLTE1MywgLTE1MywgLTE1MywgLTE1MywgLTE1MywgLTE1MywKLSAgICAgLTE1MywgLTE1MywgLTE1MywgICA1OCwgLTE1MywgLTE1MywgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgIDE3NCwgICA1OCwgICA1OCwgLTE1MwotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsIC0xNTQsIC0xNTQsIC0xNTQsIC0xNTQsIC0xNTQsIC0xNTQsIC0xNTQsIC0xNTQsIC0xNTQsCi0gICAgIC0xNTQsIC0xNTQsIC0xNTQsICAgNTgsIC0xNTQsIC0xNTQsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0xNTQKLQotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsIC0xNTUsIC0xNTUsIC0xNTUsIC0xNTUsIC0xNTUsIC0xNTUsIC0xNTUsIC0xNTUsIC0xNTUsCi0gICAgIC0xNTUsIC0xNTUsIC0xNTUsICAgNTgsIC0xNTUsIC0xNTUsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAxNzUsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0xNTUKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAtMTU2LCAtMTU2LCAtMTU2LCAtMTU2LCAtMTU2LCAtMTU2LCAtMTU2LCAtMTU2LCAtMTU2LAotICAgICAtMTU2LCAtMTU2LCAtMTU2LCAgIDU4LCAtMTU2LCAtMTU2LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgMTc2LCAgIDU4LCAgIDU4LCAtMTU2Ci0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTE1NywgLTE1NywgLTE1NywgLTE1NywgLTE1NywgLTE1NywgLTE1NywgLTE1NywgLTE1NywKLSAgICAgLTE1NywgLTE1NywgLTE1NywgICA1OCwgLTE1NywgLTE1NywgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLQotICAgICAgIDU4LCAgMTc3LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAtMTU3Ci0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTE1OCwgLTE1OCwgLTE1OCwgLTE1OCwgLTE1OCwgLTE1OCwgLTE1OCwgLTE1OCwgLTE1OCwKLSAgICAgLTE1OCwgLTE1OCwgLTE1OCwgICA1OCwgLTE1OCwgLTE1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgIDE3OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgLTE1OAotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsIC0xNTksIC0xNTksIC0xNTksIC0xNTksIC0xNTksIC0xNTksIC0xNTksIC0xNTksIC0xNTksCi0gICAgIC0xNTksIC0xNTksIC0xNTksICAgNTgsIC0xNTksIC0xNTksICAgNTgsICAxNzksICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0xNTkKLQotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsIC0xNjAsIC0xNjAsIC0xNjAsIC0xNjAsIC0xNjAsIC0xNjAsIC0xNjAsIC0xNjAsIC0xNjAsCi0gICAgIC0xNjAsIC0xNjAsIC0xNjAsICAgNTgsIC0xNjAsIC0xNjAsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAxODAsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0xNjAKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAtMTYxLCAtMTYxLCAtMTYxLCAtMTYxLCAtMTYxLCAtMTYxLCAtMTYxLCAtMTYxLCAtMTYxLAotICAgICAtMTYxLCAtMTYxLCAtMTYxLCAgIDU4LCAtMTYxLCAtMTYxLCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAtMTYxCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTE2MiwgLTE2MiwgLTE2MiwgLTE2MiwgLTE2MiwgLTE2MiwgLTE2MiwgLTE2MiwgLTE2MiwKLSAgICAgLTE2MiwgLTE2MiwgLTE2MiwgICA1OCwgLTE2MiwgLTE2MiwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLQotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgMTgxLCAgIDU4LCAgIDU4LCAtMTYyCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTE2MywgLTE2MywgLTE2MywgLTE2MywgLTE2MywgLTE2MywgLTE2MywgLTE2MywgLTE2MywKLSAgICAgLTE2MywgLTE2MywgLTE2MywgICA1OCwgLTE2MywgLTE2MywgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgLTE2MwotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsIC0xNjQsIC0xNjQsIC0xNjQsIC0xNjQsIC0xNjQsIC0xNjQsIC0xNjQsIC0xNjQsIC0xNjQsCi0gICAgIC0xNjQsIC0xNjQsIC0xNjQsICAgNTgsIC0xNjQsIC0xNjQsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAxODIsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0xNjQKLQotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsIC0xNjUsIC0xNjUsIC0xNjUsIC0xNjUsIC0xNjUsIC0xNjUsIC0xNjUsIC0xNjUsIC0xNjUsCi0gICAgIC0xNjUsIC0xNjUsIC0xNjUsICAgNTgsIC0xNjUsIC0xNjUsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAxODMsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0xNjUKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAtMTY2LCAtMTY2LCAtMTY2LCAtMTY2LCAtMTY2LCAtMTY2LCAtMTY2LCAtMTY2LCAtMTY2LAotICAgICAtMTY2LCAtMTY2LCAtMTY2LCAgIDU4LCAtMTY2LCAtMTY2LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgMTg0LCAgIDU4LCAgIDU4LCAtMTY2Ci0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTE2NywgLTE2NywgLTE2NywgLTE2NywgLTE2NywgLTE2NywgLTE2NywgLTE2NywgLTE2NywKLSAgICAgLTE2NywgLTE2NywgLTE2NywgICA1OCwgLTE2NywgLTE2NywgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLQotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgMTg1LCAgIDU4LCAgIDU4LCAgIDU4LCAtMTY3Ci0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTE2OCwgLTE2OCwgLTE2OCwgLTE2OCwgLTE2OCwgLTE2OCwgLTE2OCwgLTE2OCwgLTE2OCwKLSAgICAgLTE2OCwgLTE2OCwgLTE2OCwgICA1OCwgLTE2OCwgLTE2OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgLTE2OAotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsIC0xNjksIC0xNjksIC0xNjksIC0xNjksIC0xNjksIC0xNjksIC0xNjksIC0xNjksIC0xNjksCi0gICAgIC0xNjksIC0xNjksIC0xNjksICAgNTgsIC0xNjksIC0xNjksICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAxODYsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0xNjkKLQotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsIC0xNzAsIC0xNzAsIC0xNzAsIC0xNzAsIC0xNzAsIC0xNzAsIC0xNzAsIC0xNzAsIC0xNzAsCi0gICAgIC0xNzAsIC0xNzAsIC0xNzAsICAgNTgsIC0xNzAsIC0xNzAsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAxODcsICAgNTgsIC0xNzAKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAtMTcxLCAtMTcxLCAtMTcxLCAtMTcxLCAtMTcxLCAtMTcxLCAtMTcxLCAtMTcxLCAtMTcxLAotICAgICAtMTcxLCAtMTcxLCAtMTcxLCAgIDU4LCAtMTcxLCAtMTcxLCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgMTg4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAtMTcxCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTE3MiwgLTE3MiwgLTE3MiwgLTE3MiwgLTE3MiwgLTE3MiwgLTE3MiwgLTE3MiwgLTE3MiwKLSAgICAgLTE3MiwgLTE3MiwgLTE3MiwgICA1OCwgLTE3MiwgLTE3MiwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLQotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgMTg5LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAtMTcyCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTE3MywgLTE3MywgLTE3MywgLTE3MywgLTE3MywgLTE3MywgLTE3MywgLTE3MywgLTE3MywKLSAgICAgLTE3MywgLTE3MywgLTE3MywgICA1OCwgLTE3MywgLTE3MywgICA1OCwgIDE5MCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgLTE3MwotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsIC0xNzQsIC0xNzQsIC0xNzQsIC0xNzQsIC0xNzQsIC0xNzQsIC0xNzQsIC0xNzQsIC0xNzQsCi0gICAgIC0xNzQsIC0xNzQsIC0xNzQsICAgNTgsIC0xNzQsIC0xNzQsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0xNzQKLQotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsIC0xNzUsIC0xNzUsIC0xNzUsIC0xNzUsIC0xNzUsIC0xNzUsIC0xNzUsIC0xNzUsIC0xNzUsCi0gICAgIC0xNzUsIC0xNzUsIC0xNzUsICAgNTgsIC0xNzUsIC0xNzUsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAxOTEsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0xNzUKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAtMTc2LCAtMTc2LCAtMTc2LCAtMTc2LCAtMTc2LCAtMTc2LCAtMTc2LCAtMTc2LCAtMTc2LAotICAgICAtMTc2LCAtMTc2LCAtMTc2LCAgIDU4LCAtMTc2LCAtMTc2LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAtMTc2Ci0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTE3NywgLTE3NywgLTE3NywgLTE3NywgLTE3NywgLTE3NywgLTE3NywgLTE3NywgLTE3NywKLSAgICAgLTE3NywgLTE3NywgLTE3NywgICA1OCwgLTE3NywgLTE3NywgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLQotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAtMTc3Ci0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTE3OCwgLTE3OCwgLTE3OCwgLTE3OCwgLTE3OCwgLTE3OCwgLTE3OCwgLTE3OCwgLTE3OCwKLSAgICAgLTE3OCwgLTE3OCwgLTE3OCwgICA1OCwgLTE3OCwgLTE3OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgLTE3OAotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsIC0xNzksIC0xNzksIC0xNzksIC0xNzksIC0xNzksIC0xNzksIC0xNzksIC0xNzksIC0xNzksCi0gICAgIC0xNzksIC0xNzksIC0xNzksICAgNTgsIC0xNzksIC0xNzksICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAxOTIsICAgNTgsICAgNTgsIC0xNzkKLQotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsIC0xODAsIC0xODAsIC0xODAsIC0xODAsIC0xODAsIC0xODAsIC0xODAsIC0xODAsIC0xODAsCi0gICAgIC0xODAsIC0xODAsIC0xODAsICAgNTgsIC0xODAsIC0xODAsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0xODAKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAtMTgxLCAtMTgxLCAtMTgxLCAtMTgxLCAtMTgxLCAtMTgxLCAtMTgxLCAtMTgxLCAtMTgxLAotICAgICAtMTgxLCAtMTgxLCAtMTgxLCAgIDU4LCAtMTgxLCAtMTgxLCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAtMTgxCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTE4MiwgLTE4MiwgLTE4MiwgLTE4MiwgLTE4MiwgLTE4MiwgLTE4MiwgLTE4MiwgLTE4MiwKLSAgICAgLTE4MiwgLTE4MiwgLTE4MiwgICA1OCwgLTE4MiwgLTE4MiwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLQotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgMTkzLCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAtMTgyCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTE4MywgLTE4MywgLTE4MywgLTE4MywgLTE4MywgLTE4MywgLTE4MywgLTE4MywgLTE4MywKLSAgICAgLTE4MywgLTE4MywgLTE4MywgICA1OCwgLTE4MywgLTE4MywgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgIDE5NCwgICA1OCwgICA1OCwgICA1OCwgLTE4MwotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsIC0xODQsIC0xODQsIC0xODQsIC0xODQsIC0xODQsIC0xODQsIC0xODQsIC0xODQsIC0xODQsCi0gICAgIC0xODQsIC0xODQsIC0xODQsICAgNTgsIC0xODQsIC0xODQsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0xODQKLQotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsIC0xODUsIC0xODUsIC0xODUsIC0xODUsIC0xODUsIC0xODUsIC0xODUsIC0xODUsIC0xODUsCi0gICAgIC0xODUsIC0xODUsIC0xODUsICAgNTgsIC0xODUsIC0xODUsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0xODUKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAtMTg2LCAtMTg2LCAtMTg2LCAtMTg2LCAtMTg2LCAtMTg2LCAtMTg2LCAtMTg2LCAtMTg2LAotICAgICAtMTg2LCAtMTg2LCAtMTg2LCAgIDU4LCAtMTg2LCAtMTg2LCAgIDU4LCAgIDU4LCAgIDU4LCAgMTk1LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAtMTg2Ci0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTE4NywgLTE4NywgLTE4NywgLTE4NywgLTE4NywgLTE4NywgLTE4NywgLTE4NywgLTE4NywKLSAgICAgLTE4NywgLTE4NywgLTE4NywgICA1OCwgLTE4NywgLTE4NywgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLQotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAtMTg3Ci0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTE4OCwgLTE4OCwgLTE4OCwgLTE4OCwgLTE4OCwgLTE4OCwgLTE4OCwgLTE4OCwgLTE4OCwKLSAgICAgLTE4OCwgLTE4OCwgLTE4OCwgICA1OCwgLTE4OCwgLTE4OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgIDE5NiwgICA1OCwgLTE4OAotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsIC0xODksIC0xODksIC0xODksIC0xODksIC0xODksIC0xODksIC0xODksIC0xODksIC0xODksCi0gICAgIC0xODksIC0xODksIC0xODksICAgNTgsIC0xODksIC0xODksICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAxOTcsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0xODkKLQotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsIC0xOTAsIC0xOTAsIC0xOTAsIC0xOTAsIC0xOTAsIC0xOTAsIC0xOTAsIC0xOTAsIC0xOTAsCi0gICAgIC0xOTAsIC0xOTAsIC0xOTAsICAgNTgsIC0xOTAsIC0xOTAsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAxOTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0xOTAKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAtMTkxLCAtMTkxLCAtMTkxLCAtMTkxLCAtMTkxLCAtMTkxLCAtMTkxLCAtMTkxLCAtMTkxLAotICAgICAtMTkxLCAtMTkxLCAtMTkxLCAgIDU4LCAtMTkxLCAtMTkxLCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgMTk5LCAgIDU4LCAgIDU4LCAgIDU4LCAtMTkxCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTE5MiwgLTE5MiwgLTE5MiwgLTE5MiwgLTE5MiwgLTE5MiwgLTE5MiwgLTE5MiwgLTE5MiwKLSAgICAgLTE5MiwgLTE5MiwgLTE5MiwgICA1OCwgLTE5MiwgLTE5MiwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLQotICAgICAgIDU4LCAgMjAwLCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAtMTkyCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTE5MywgLTE5MywgLTE5MywgLTE5MywgLTE5MywgLTE5MywgLTE5MywgLTE5MywgLTE5MywKLSAgICAgLTE5MywgLTE5MywgLTE5MywgICA1OCwgLTE5MywgLTE5MywgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgIDIwMSwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgLTE5MwotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsIC0xOTQsIC0xOTQsIC0xOTQsIC0xOTQsIC0xOTQsIC0xOTQsIC0xOTQsIC0xOTQsIC0xOTQsCi0gICAgIC0xOTQsIC0xOTQsIC0xOTQsICAgNTgsIC0xOTQsIC0xOTQsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAyMDIsICAgNTgsICAgNTgsIC0xOTQKLQotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsIC0xOTUsIC0xOTUsIC0xOTUsIC0xOTUsIC0xOTUsIC0xOTUsIC0xOTUsIC0xOTUsIC0xOTUsCi0gICAgIC0xOTUsIC0xOTUsIC0xOTUsICAgNTgsIC0xOTUsIC0xOTUsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAyMDMsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0xOTUKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAtMTk2LCAtMTk2LCAtMTk2LCAtMTk2LCAtMTk2LCAtMTk2LCAtMTk2LCAtMTk2LCAtMTk2LAotICAgICAtMTk2LCAtMTk2LCAtMTk2LCAgIDU4LCAtMTk2LCAtMTk2LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAtMTk2Ci0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTE5NywgLTE5NywgLTE5NywgLTE5NywgLTE5NywgLTE5NywgLTE5NywgLTE5NywgLTE5NywKLSAgICAgLTE5NywgLTE5NywgLTE5NywgICA1OCwgLTE5NywgLTE5NywgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLQotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgMjA0LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAtMTk3Ci0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTE5OCwgLTE5OCwgLTE5OCwgLTE5OCwgLTE5OCwgLTE5OCwgLTE5OCwgLTE5OCwgLTE5OCwKLSAgICAgLTE5OCwgLTE5OCwgLTE5OCwgICA1OCwgLTE5OCwgLTE5OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgLTE5OAotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsIC0xOTksIC0xOTksIC0xOTksIC0xOTksIC0xOTksIC0xOTksIC0xOTksIC0xOTksIC0xOTksCi0gICAgIC0xOTksIC0xOTksIC0xOTksICAgNTgsIC0xOTksIC0xOTksICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0xOTkKLQotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsIC0yMDAsIC0yMDAsIC0yMDAsIC0yMDAsIC0yMDAsIC0yMDAsIC0yMDAsIC0yMDAsIC0yMDAsCi0gICAgIC0yMDAsIC0yMDAsIC0yMDAsICAgNTgsIC0yMDAsIC0yMDAsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0yMDAKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAtMjAxLCAtMjAxLCAtMjAxLCAtMjAxLCAtMjAxLCAtMjAxLCAtMjAxLCAtMjAxLCAtMjAxLAotICAgICAtMjAxLCAtMjAxLCAtMjAxLCAgIDU4LCAtMjAxLCAtMjAxLCAgIDU4LCAgMjA1LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAtMjAxCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTIwMiwgLTIwMiwgLTIwMiwgLTIwMiwgLTIwMiwgLTIwMiwgLTIwMiwgLTIwMiwgLTIwMiwKLSAgICAgLTIwMiwgLTIwMiwgLTIwMiwgICA1OCwgLTIwMiwgLTIwMiwgICA1OCwgIDIwNiwgICA1OCwgICA1OCwKLQotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAtMjAyCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTIwMywgLTIwMywgLTIwMywgLTIwMywgLTIwMywgLTIwMywgLTIwMywgLTIwMywgLTIwMywKLSAgICAgLTIwMywgLTIwMywgLTIwMywgICA1OCwgLTIwMywgLTIwMywgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgLTIwMwotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsIC0yMDQsIC0yMDQsIC0yMDQsIC0yMDQsIC0yMDQsIC0yMDQsIC0yMDQsIC0yMDQsIC0yMDQsCi0gICAgIC0yMDQsIC0yMDQsIC0yMDQsICAgNTgsIC0yMDQsIC0yMDQsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAyMDcsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0yMDQKLQotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsIC0yMDUsIC0yMDUsIC0yMDUsIC0yMDUsIC0yMDUsIC0yMDUsIC0yMDUsIC0yMDUsIC0yMDUsCi0gICAgIC0yMDUsIC0yMDUsIC0yMDUsICAgNTgsIC0yMDUsIC0yMDUsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAyMDgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0yMDUKLSAgICB9LAotCi0gICAgewotICAgICAgIDExLCAtMjA2LCAtMjA2LCAtMjA2LCAtMjA2LCAtMjA2LCAtMjA2LCAtMjA2LCAtMjA2LCAtMjA2LAotICAgICAtMjA2LCAtMjA2LCAtMjA2LCAgIDU4LCAtMjA2LCAtMjA2LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgMjA5LCAgIDU4LCAgIDU4LCAtMjA2Ci0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTIwNywgLTIwNywgLTIwNywgLTIwNywgLTIwNywgLTIwNywgLTIwNywgLTIwNywgLTIwNywKLSAgICAgLTIwNywgLTIwNywgLTIwNywgICA1OCwgLTIwNywgLTIwNywgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLQotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAotICAgICAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAtMjA3Ci0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMSwgLTIwOCwgLTIwOCwgLTIwOCwgLTIwOCwgLTIwOCwgLTIwOCwgLTIwOCwgLTIwOCwgLTIwOCwKLSAgICAgLTIwOCwgLTIwOCwgLTIwOCwgICA1OCwgLTIwOCwgLTIwOCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwKLSAgICAgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgICA1OCwgLTIwOAotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsIC0yMDksIC0yMDksIC0yMDksIC0yMDksIC0yMDksIC0yMDksIC0yMDksIC0yMDksIC0yMDksCi0gICAgIC0yMDksIC0yMDksIC0yMDksICAgNTgsIC0yMDksIC0yMDksICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAyMTAsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0yMDkKLQotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTEsIC0yMTAsIC0yMTAsIC0yMTAsIC0yMTAsIC0yMTAsIC0yMTAsIC0yMTAsIC0yMTAsIC0yMTAsCi0gICAgIC0yMTAsIC0yMTAsIC0yMTAsICAgNTgsIC0yMTAsIC0yMTAsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsCi0gICAgICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsICAgNTgsIC0yMTAKKyAgICAgIC02MCwgICA1NywgICA1NywgICA1NywgIC02MCwgIC02MCwgIC02MAogICAgIH0sCiAKICAgICB9IDsKQEAgLTE5MTgsOCArNjc0LDggQEAKIAkqeXlfY3AgPSAnXDAnOyBcCiAJKHl5X2NfYnVmX3ApID0geXlfY3A7CiAKLSNkZWZpbmUgWVlfTlVNX1JVTEVTIDY0Ci0jZGVmaW5lIFlZX0VORF9PRl9CVUZGRVIgNjUKKyNkZWZpbmUgWVlfTlVNX1JVTEVTIDMzCisjZGVmaW5lIFlZX0VORF9PRl9CVUZGRVIgMzQKIC8qIFRoaXMgc3RydWN0IGlzIG5vdCB1c2VkIGluIHRoaXMgc2Nhbm5lciwKICAgIGJ1dCBpdHMgcHJlc2VuY2UgaXMgbmVjZXNzYXJ5LiAqLwogc3RydWN0IHl5X3RyYW5zX2luZm8KQEAgLTE5MjcsMzEgKzY4MywxNCBAQAogCWZsZXhfaW50MzJfdCB5eV92ZXJpZnk7CiAJZmxleF9pbnQzMl90IHl5X254dDsKIAl9Owotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2FjY2VwdFsyMTFdID0KK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9hY2NlcHRbNjFdID0KICAgICB7ICAgMCwKICAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKLSAgICAgICA2NSwgICAgNSwgICAgNCwgICAgMywgICAgMiwgICAzNiwgICAzNywgICAzNSwgICAzNSwgICAzNSwKLSAgICAgICAzNSwgICAzNSwgICAzNSwgICAzNSwgICAzNSwgICAzNSwgICAzNSwgICAzNSwgICAzNSwgICAzNSwKLSAgICAgICA2MywgICA2MCwgICA2MiwgICA1NSwgICA1OSwgICA1OCwgICA1NywgICA1MywgICA0OCwgICA0MiwKLSAgICAgICA0NywgICA1MSwgICA1MywgICA0MCwgICA0MSwgICA1MCwgICA1MCwgICA0MywgICA1MywgICA1MCwKLSAgICAgICA1MCwgICA1MywgICAgNCwgICAgMywgICAgMiwgICAgMiwgICAgMSwgICAzNSwgICAzNSwgICAzNSwKLSAgICAgICAzNSwgICAzNSwgICAzNSwgICAzNSwgICAxNiwgICAzNSwgICAzNSwgICAzNSwgICAzNSwgICAzNSwKLSAgICAgICAzNSwgICAzNSwgICAzNSwgICAzNSwgICAzNSwgICAzNSwgICA2MywgICA2MCwgICA2MiwgICA2MSwKLSAgICAgICA1NSwgICA1NCwgICA1NywgICA1NiwgICA0NCwgICA1MSwgICAzOCwgICA1MCwgICA1MCwgICA1MiwKLSAgICAgICA0NSwgICA0NiwgICAzOSwgICAzNSwgICAzNSwgICAzNSwgICAzNSwgICAzNSwgICAzNSwgICAzNSwKLQotICAgICAgIDM1LCAgIDM1LCAgIDMwLCAgIDI5LCAgIDM1LCAgIDM1LCAgIDM1LCAgIDM1LCAgIDM1LCAgIDM1LAotICAgICAgIDM1LCAgIDM1LCAgIDM1LCAgIDM1LCAgIDQ5LCAgIDI1LCAgIDM1LCAgIDM1LCAgIDM1LCAgIDM1LAotICAgICAgIDM1LCAgIDM1LCAgIDM1LCAgIDM1LCAgIDM1LCAgIDM1LCAgIDE1LCAgIDM1LCAgICA3LCAgIDM1LAotICAgICAgIDM1LCAgIDM1LCAgIDM1LCAgIDM1LCAgIDM1LCAgIDM1LCAgIDM1LCAgIDM1LCAgIDM1LCAgIDM1LAotICAgICAgIDM1LCAgIDM1LCAgIDM1LCAgIDM1LCAgIDM1LCAgIDM1LCAgIDM1LCAgIDE3LCAgIDM1LCAgIDM1LAotICAgICAgIDM1LCAgIDM1LCAgIDM1LCAgIDM0LCAgIDM1LCAgIDM1LCAgIDM1LCAgIDM1LCAgIDM1LCAgIDM1LAotICAgICAgIDEwLCAgIDM1LCAgIDEzLCAgIDM1LCAgIDM1LCAgIDM1LCAgIDM1LCAgIDMzLCAgIDM1LCAgIDM1LAotICAgICAgIDM1LCAgIDM1LCAgIDM1LCAgIDIyLCAgIDM1LCAgIDMyLCAgICA5LCAgIDMxLCAgIDM1LCAgIDI2LAotICAgICAgIDEyLCAgIDM1LCAgIDM1LCAgIDIxLCAgIDE4LCAgIDM1LCAgICA4LCAgIDM1LCAgIDM1LCAgIDM1LAotICAgICAgIDM1LCAgIDM1LCAgIDI3LCAgIDM1LCAgIDM1LCAgICA2LCAgIDM1LCAgIDIwLCAgIDE5LCAgIDIzLAotCi0gICAgICAgMzUsICAgMzUsICAgMTEsICAgMzUsICAgMzUsICAgMzUsICAgMTQsICAgMjgsICAgMzUsICAgMjQKKyAgICAgICAzNCwgICAgNSwgICAgNCwgICAgMiwgICAgMywgICAgNywgICAgOCwgICAgNiwgICAzMiwgICAyOSwKKyAgICAgICAzMSwgICAyNCwgICAyOCwgICAyNywgICAyNiwgICAyMiwgICAxNywgICAxMywgICAxNiwgICAyMCwKKyAgICAgICAyMiwgICAxMSwgICAxMiwgICAxOSwgICAxOSwgICAxNCwgICAyMiwgICAyMiwgICAgNCwgICAgMiwKKyAgICAgICAgMywgICAgMywgICAgMSwgICAgNiwgICAzMiwgICAyOSwgICAzMSwgICAzMCwgICAyNCwgICAyMywKKyAgICAgICAyNiwgICAyNSwgICAxNSwgICAyMCwgICAgOSwgICAxOSwgICAxOSwgICAyMSwgICAxMCwgICAxOAogICAgIH0gOwogCiBzdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfZWNbMjU2XSA9CkBAIC0xOTY1LDExICs3MDQsMTEgQEAKICAgICAgICAxNCwgICAgMSwgICAgMSwgICAgMSwgICAxMywgICAxMywgICAxMywgICAxMywgICAxMywgICAxMywKICAgICAgICAxMywgICAxMywgICAxMywgICAxMywgICAxMywgICAxMywgICAxMywgICAxMywgICAxMywgICAxMywKICAgICAgICAxMywgICAxMywgICAxMywgICAxMywgICAxMywgICAxMywgICAxMywgICAxMywgICAxMywgICAxMywKLSAgICAgICAgMSwgICAxNSwgICAgMSwgICAgMSwgICAxNiwgICAgMSwgICAxNywgICAxOCwgICAxOSwgICAyMCwKKyAgICAgICAgMSwgICAxNSwgICAgMSwgICAgMSwgICAxMywgICAgMSwgICAxMywgICAxMywgICAxMywgICAxMywKIAotICAgICAgIDIxLCAgIDIyLCAgIDIzLCAgIDI0LCAgIDI1LCAgIDEzLCAgIDEzLCAgIDI2LCAgIDI3LCAgIDI4LAotICAgICAgIDI5LCAgIDMwLCAgIDMxLCAgIDMyLCAgIDMzLCAgIDM0LCAgIDM1LCAgIDEzLCAgIDEzLCAgIDM2LAotICAgICAgIDEzLCAgIDEzLCAgICAxLCAgIDM3LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLAorICAgICAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLAorICAgICAgIDEzLCAgIDEzLCAgICAxLCAgIDE2LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLApAQCAtMjAxNCw4ICs3NTMsMTIgQEAKIAogI2RlZmluZSBTVEFSVF9TVFJTSVpFCTE2CiAKLWNoYXIgKnRleHQ7Ci1zdGF0aWMgY2hhciAqdGV4dF9wdHI7CitzdGF0aWMgc3RydWN0IHsKKwlzdHJ1Y3QgZmlsZSAqZmlsZTsKKwlpbnQgbGluZW5vOworfSBjdXJyZW50X3BvczsKKworc3RhdGljIGNoYXIgKnRleHQ7CiBzdGF0aWMgaW50IHRleHRfc2l6ZSwgdGV4dF9hc2l6ZTsKIAogc3RydWN0IGJ1ZmZlciB7CkBAIC0yMDI4LDI5ICs3NzEsMjggQEAKIHN0YXRpYyBpbnQgbGFzdF90cywgZmlyc3RfdHM7CiAKIHN0YXRpYyB2b2lkIHpjb25mX2VuZGhlbHAodm9pZCk7Ci1zdGF0aWMgc3RydWN0IGJ1ZmZlciAqemNvbmZfZW5kZmlsZSh2b2lkKTsKK3N0YXRpYyB2b2lkIHpjb25mX2VuZGZpbGUodm9pZCk7CiAKIHZvaWQgbmV3X3N0cmluZyh2b2lkKQogewogCXRleHQgPSBtYWxsb2MoU1RBUlRfU1RSU0laRSk7CiAJdGV4dF9hc2l6ZSA9IFNUQVJUX1NUUlNJWkU7Ci0JdGV4dF9wdHIgPSB0ZXh0OwogCXRleHRfc2l6ZSA9IDA7Ci0JKnRleHRfcHRyID0gMDsKKwkqdGV4dCA9IDA7CiB9CiAKIHZvaWQgYXBwZW5kX3N0cmluZyhjb25zdCBjaGFyICpzdHIsIGludCBzaXplKQogewogCWludCBuZXdfc2l6ZSA9IHRleHRfc2l6ZSArIHNpemUgKyAxOwogCWlmIChuZXdfc2l6ZSA+IHRleHRfYXNpemUpIHsKKwkJbmV3X3NpemUgKz0gU1RBUlRfU1RSU0laRSAtIDE7CisJCW5ld19zaXplICY9IC1TVEFSVF9TVFJTSVpFOwogCQl0ZXh0ID0gcmVhbGxvYyh0ZXh0LCBuZXdfc2l6ZSk7CiAJCXRleHRfYXNpemUgPSBuZXdfc2l6ZTsKLQkJdGV4dF9wdHIgPSB0ZXh0ICsgdGV4dF9zaXplOwogCX0KLQltZW1jcHkodGV4dF9wdHIsIHN0ciwgc2l6ZSk7Ci0JdGV4dF9wdHIgKz0gc2l6ZTsKKwltZW1jcHkodGV4dCArIHRleHRfc2l6ZSwgc3RyLCBzaXplKTsKIAl0ZXh0X3NpemUgKz0gc2l6ZTsKLQkqdGV4dF9wdHIgPSAwOworCXRleHRbdGV4dF9zaXplXSA9IDA7CiB9CiAKIHZvaWQgYWxsb2Nfc3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwgaW50IHNpemUpCkBAIC0yMDY2LDExICs4MDgsMTMgQEAKICNkZWZpbmUgU1RSSU5HIDMKICNkZWZpbmUgUEFSQU0gNAogCisjaWZuZGVmIFlZX05PX1VOSVNURF9ICiAvKiBTcGVjaWFsIGNhc2UgZm9yICJ1bmlzdGQuaCIsIHNpbmNlIGl0IGlzIG5vbi1BTlNJLiBXZSBpbmNsdWRlIGl0IHdheQogICogZG93biBoZXJlIGJlY2F1c2Ugd2Ugd2FudCB0aGUgdXNlcidzIHNlY3Rpb24gMSB0byBoYXZlIGJlZW4gc2Nhbm5lZCBmaXJzdC4KICAqIFRoZSB1c2VyIGhhcyBhIGNoYW5jZSB0byBvdmVycmlkZSBpdCB3aXRoIGFuIG9wdGlvbi4KICAqLwogI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCiAKICNpZm5kZWYgWVlfRVhUUkFfVFlQRQogI2RlZmluZSBZWV9FWFRSQV9UWVBFIHZvaWQgKgpAQCAtMjI1NCwxNyArOTk4LDE3IEBACiAJeyAvKiBiZWdpbm5pbmcgb2YgYWN0aW9uIHN3aXRjaCAqLwogY2FzZSAxOgogLyogcnVsZSAxIGNhbiBtYXRjaCBlb2wgKi8KLVlZX1JVTEVfU0VUVVAKLWN1cnJlbnRfZmlsZS0+bGluZW5vKys7Ci0JWVlfQlJFQUsKIGNhc2UgMjoKKy8qIHJ1bGUgMiBjYW4gbWF0Y2ggZW9sICovCiBZWV9SVUxFX1NFVFVQCi0KK3sKKwljdXJyZW50X2ZpbGUtPmxpbmVubysrOworCXJldHVybiBUX0VPTDsKK30KIAlZWV9CUkVBSwogY2FzZSAzOgotLyogcnVsZSAzIGNhbiBtYXRjaCBlb2wgKi8KIFlZX1JVTEVfU0VUVVAKLWN1cnJlbnRfZmlsZS0+bGluZW5vKys7IHJldHVybiBUX0VPTDsKKwogCVlZX0JSRUFLCiBjYXNlIDQ6CiBZWV9SVUxFX1NFVFVQCkBAIC0yMjgyLDE3NSArMTAyNiw2MyBAQAogCiBjYXNlIDY6CiBZWV9SVUxFX1NFVFVQCi1CRUdJTihQQVJBTSk7IHJldHVybiBUX01BSU5NRU5VOwotCVlZX0JSRUFLCi1jYXNlIDc6Ci1ZWV9SVUxFX1NFVFVQCi1CRUdJTihQQVJBTSk7IHJldHVybiBUX01FTlU7Ci0JWVlfQlJFQUsKLWNhc2UgODoKLVlZX1JVTEVfU0VUVVAKLUJFR0lOKFBBUkFNKTsgcmV0dXJuIFRfRU5ETUVOVTsKLQlZWV9CUkVBSwotY2FzZSA5OgotWVlfUlVMRV9TRVRVUAotQkVHSU4oUEFSQU0pOyByZXR1cm4gVF9TT1VSQ0U7Ci0JWVlfQlJFQUsKLWNhc2UgMTA6Ci1ZWV9SVUxFX1NFVFVQCi1CRUdJTihQQVJBTSk7IHJldHVybiBUX0NIT0lDRTsKLQlZWV9CUkVBSwotY2FzZSAxMToKLVlZX1JVTEVfU0VUVVAKLUJFR0lOKFBBUkFNKTsgcmV0dXJuIFRfRU5EQ0hPSUNFOwotCVlZX0JSRUFLCi1jYXNlIDEyOgotWVlfUlVMRV9TRVRVUAotQkVHSU4oUEFSQU0pOyByZXR1cm4gVF9DT01NRU5UOwotCVlZX0JSRUFLCi1jYXNlIDEzOgotWVlfUlVMRV9TRVRVUAotQkVHSU4oUEFSQU0pOyByZXR1cm4gVF9DT05GSUc7Ci0JWVlfQlJFQUsKLWNhc2UgMTQ6Ci1ZWV9SVUxFX1NFVFVQCi1CRUdJTihQQVJBTSk7IHJldHVybiBUX01FTlVDT05GSUc7Ci0JWVlfQlJFQUsKLWNhc2UgMTU6Ci1ZWV9SVUxFX1NFVFVQCi1CRUdJTihQQVJBTSk7IHJldHVybiBUX0hFTFA7Ci0JWVlfQlJFQUsKLWNhc2UgMTY6Ci1ZWV9SVUxFX1NFVFVQCi1CRUdJTihQQVJBTSk7IHJldHVybiBUX0lGOwotCVlZX0JSRUFLCi1jYXNlIDE3OgotWVlfUlVMRV9TRVRVUAotQkVHSU4oUEFSQU0pOyByZXR1cm4gVF9FTkRJRjsKLQlZWV9CUkVBSwotY2FzZSAxODoKLVlZX1JVTEVfU0VUVVAKLUJFR0lOKFBBUkFNKTsgcmV0dXJuIFRfREVQRU5EUzsKLQlZWV9CUkVBSwotY2FzZSAxOToKLVlZX1JVTEVfU0VUVVAKLUJFR0lOKFBBUkFNKTsgcmV0dXJuIFRfUkVRVUlSRVM7Ci0JWVlfQlJFQUsKLWNhc2UgMjA6Ci1ZWV9SVUxFX1NFVFVQCi1CRUdJTihQQVJBTSk7IHJldHVybiBUX09QVElPTkFMOwotCVlZX0JSRUFLCi1jYXNlIDIxOgotWVlfUlVMRV9TRVRVUAotQkVHSU4oUEFSQU0pOyByZXR1cm4gVF9ERUZBVUxUOwotCVlZX0JSRUFLCi1jYXNlIDIyOgotWVlfUlVMRV9TRVRVUAotQkVHSU4oUEFSQU0pOyByZXR1cm4gVF9QUk9NUFQ7Ci0JWVlfQlJFQUsKLWNhc2UgMjM6Ci1ZWV9SVUxFX1NFVFVQCi1CRUdJTihQQVJBTSk7IHJldHVybiBUX1RSSVNUQVRFOwotCVlZX0JSRUFLCi1jYXNlIDI0OgotWVlfUlVMRV9TRVRVUAotQkVHSU4oUEFSQU0pOyByZXR1cm4gVF9ERUZfVFJJU1RBVEU7Ci0JWVlfQlJFQUsKLWNhc2UgMjU6Ci1ZWV9SVUxFX1NFVFVQCi1CRUdJTihQQVJBTSk7IHJldHVybiBUX0JPT0xFQU47Ci0JWVlfQlJFQUsKLWNhc2UgMjY6Ci1ZWV9SVUxFX1NFVFVQCi1CRUdJTihQQVJBTSk7IHJldHVybiBUX0JPT0xFQU47Ci0JWVlfQlJFQUsKLWNhc2UgMjc6Ci1ZWV9SVUxFX1NFVFVQCi1CRUdJTihQQVJBTSk7IHJldHVybiBUX0RFRl9CT09MRUFOOwotCVlZX0JSRUFLCi1jYXNlIDI4OgotWVlfUlVMRV9TRVRVUAotQkVHSU4oUEFSQU0pOyByZXR1cm4gVF9ERUZfQk9PTEVBTjsKLQlZWV9CUkVBSwotY2FzZSAyOToKLVlZX1JVTEVfU0VUVVAKLUJFR0lOKFBBUkFNKTsgcmV0dXJuIFRfSU5UOwotCVlZX0JSRUFLCi1jYXNlIDMwOgotWVlfUlVMRV9TRVRVUAotQkVHSU4oUEFSQU0pOyByZXR1cm4gVF9IRVg7Ci0JWVlfQlJFQUsKLWNhc2UgMzE6Ci1ZWV9SVUxFX1NFVFVQCi1CRUdJTihQQVJBTSk7IHJldHVybiBUX1NUUklORzsKLQlZWV9CUkVBSwotY2FzZSAzMjoKLVlZX1JVTEVfU0VUVVAKLUJFR0lOKFBBUkFNKTsgcmV0dXJuIFRfU0VMRUNUOwotCVlZX0JSRUFLCi1jYXNlIDMzOgotWVlfUlVMRV9TRVRVUAotQkVHSU4oUEFSQU0pOyByZXR1cm4gVF9TRUxFQ1Q7Ci0JWVlfQlJFQUsKLWNhc2UgMzQ6Ci1ZWV9SVUxFX1NFVFVQCi1CRUdJTihQQVJBTSk7IHJldHVybiBUX1JBTkdFOwotCVlZX0JSRUFLCi1jYXNlIDM1OgotWVlfUlVMRV9TRVRVUAogeworCQlzdHJ1Y3Qga2NvbmZfaWQgKmlkID0ga2NvbmZfaWRfbG9va3VwKHpjb25mdGV4dCwgemNvbmZsZW5nKTsKKwkJQkVHSU4oUEFSQU0pOworCQljdXJyZW50X3Bvcy5maWxlID0gY3VycmVudF9maWxlOworCQljdXJyZW50X3Bvcy5saW5lbm8gPSBjdXJyZW50X2ZpbGUtPmxpbmVubzsKKwkJaWYgKGlkICYmIGlkLT5mbGFncyAmIFRGX0NPTU1BTkQpIHsKKwkJCXpjb25mbHZhbC5pZCA9IGlkOworCQkJcmV0dXJuIGlkLT50b2tlbjsKKwkJfQogCQlhbGxvY19zdHJpbmcoemNvbmZ0ZXh0LCB6Y29uZmxlbmcpOwogCQl6Y29uZmx2YWwuc3RyaW5nID0gdGV4dDsKIAkJcmV0dXJuIFRfV09SRDsKIAl9CiAJWVlfQlJFQUsKLWNhc2UgMzY6CitjYXNlIDc6CiBZWV9SVUxFX1NFVFVQCiAKIAlZWV9CUkVBSwotY2FzZSAzNzoKLS8qIHJ1bGUgMzcgY2FuIG1hdGNoIGVvbCAqLworY2FzZSA4OgorLyogcnVsZSA4IGNhbiBtYXRjaCBlb2wgKi8KIFlZX1JVTEVfU0VUVVAKLWN1cnJlbnRfZmlsZS0+bGluZW5vKys7IEJFR0lOKElOSVRJQUwpOworeworCQlCRUdJTihJTklUSUFMKTsKKwkJY3VycmVudF9maWxlLT5saW5lbm8rKzsKKwkJcmV0dXJuIFRfRU9MOworCX0KIAlZWV9CUkVBSwogCi1jYXNlIDM4OgorY2FzZSA5OgogWVlfUlVMRV9TRVRVUAogcmV0dXJuIFRfQU5EOwogCVlZX0JSRUFLCi1jYXNlIDM5OgorY2FzZSAxMDoKIFlZX1JVTEVfU0VUVVAKIHJldHVybiBUX09SOwogCVlZX0JSRUFLCi1jYXNlIDQwOgorY2FzZSAxMToKIFlZX1JVTEVfU0VUVVAKIHJldHVybiBUX09QRU5fUEFSRU47CiAJWVlfQlJFQUsKLWNhc2UgNDE6CitjYXNlIDEyOgogWVlfUlVMRV9TRVRVUAogcmV0dXJuIFRfQ0xPU0VfUEFSRU47CiAJWVlfQlJFQUsKLWNhc2UgNDI6CitjYXNlIDEzOgogWVlfUlVMRV9TRVRVUAogcmV0dXJuIFRfTk9UOwogCVlZX0JSRUFLCi1jYXNlIDQzOgorY2FzZSAxNDoKIFlZX1JVTEVfU0VUVVAKIHJldHVybiBUX0VRVUFMOwogCVlZX0JSRUFLCi1jYXNlIDQ0OgorY2FzZSAxNToKIFlZX1JVTEVfU0VUVVAKIHJldHVybiBUX1VORVFVQUw7CiAJWVlfQlJFQUsKLWNhc2UgNDU6Ci1ZWV9SVUxFX1NFVFVQCi1yZXR1cm4gVF9JRjsKLQlZWV9CUkVBSwotY2FzZSA0NjoKLVlZX1JVTEVfU0VUVVAKLXJldHVybiBUX09OOwotCVlZX0JSRUFLCi1jYXNlIDQ3OgorY2FzZSAxNjoKIFlZX1JVTEVfU0VUVVAKIHsKIAkJc3RyID0gemNvbmZ0ZXh0WzBdOwpAQCAtMjQ1OCwzMyArMTA5MCwzOCBAQAogCQlCRUdJTihTVFJJTkcpOwogCX0KIAlZWV9CUkVBSwotY2FzZSA0ODoKLS8qIHJ1bGUgNDggY2FuIG1hdGNoIGVvbCAqLworY2FzZSAxNzoKKy8qIHJ1bGUgMTcgY2FuIG1hdGNoIGVvbCAqLwogWVlfUlVMRV9TRVRVUAogQkVHSU4oSU5JVElBTCk7IGN1cnJlbnRfZmlsZS0+bGluZW5vKys7IHJldHVybiBUX0VPTDsKIAlZWV9CUkVBSwotY2FzZSA0OToKK2Nhc2UgMTg6CiBZWV9SVUxFX1NFVFVQCiAvKiBpZ25vcmUgKi8KIAlZWV9CUkVBSwotY2FzZSA1MDoKK2Nhc2UgMTk6CiBZWV9SVUxFX1NFVFVQCiB7CisJCXN0cnVjdCBrY29uZl9pZCAqaWQgPSBrY29uZl9pZF9sb29rdXAoemNvbmZ0ZXh0LCB6Y29uZmxlbmcpOworCQlpZiAoaWQgJiYgaWQtPmZsYWdzICYgVEZfUEFSQU0pIHsKKwkJCXpjb25mbHZhbC5pZCA9IGlkOworCQkJcmV0dXJuIGlkLT50b2tlbjsKKwkJfQogCQlhbGxvY19zdHJpbmcoemNvbmZ0ZXh0LCB6Y29uZmxlbmcpOwogCQl6Y29uZmx2YWwuc3RyaW5nID0gdGV4dDsKIAkJcmV0dXJuIFRfV09SRDsKIAl9CiAJWVlfQlJFQUsKLWNhc2UgNTE6CitjYXNlIDIwOgogWVlfUlVMRV9TRVRVUAogLyogY29tbWVudCAqLwogCVlZX0JSRUFLCi1jYXNlIDUyOgotLyogcnVsZSA1MiBjYW4gbWF0Y2ggZW9sICovCitjYXNlIDIxOgorLyogcnVsZSAyMSBjYW4gbWF0Y2ggZW9sICovCiBZWV9SVUxFX1NFVFVQCiBjdXJyZW50X2ZpbGUtPmxpbmVubysrOwogCVlZX0JSRUFLCi1jYXNlIDUzOgorY2FzZSAyMjoKIFlZX1JVTEVfU0VUVVAKIAogCVlZX0JSRUFLCkBAIC0yNDk0LDggKzExMzEsOCBAQAogCX0KIAlZWV9CUkVBSwogCi1jYXNlIDU0OgotLyogcnVsZSA1NCBjYW4gbWF0Y2ggZW9sICovCitjYXNlIDIzOgorLyogcnVsZSAyMyBjYW4gbWF0Y2ggZW9sICovCiAqeXlfY3AgPSAoeXlfaG9sZF9jaGFyKTsgLyogdW5kbyBlZmZlY3RzIG9mIHNldHRpbmcgdXAgemNvbmZ0ZXh0ICovCiAoeXlfY19idWZfcCkgPSB5eV9jcCAtPSAxOwogWVlfRE9fQkVGT1JFX0FDVElPTjsgLyogc2V0IHVwIHpjb25mdGV4dCBhZ2FpbiAqLwpAQCAtMjUwNiwxNCArMTE0MywxNCBAQAogCQlyZXR1cm4gVF9XT1JEX1FVT1RFOwogCX0KIAlZWV9CUkVBSwotY2FzZSA1NToKK2Nhc2UgMjQ6CiBZWV9SVUxFX1NFVFVQCiB7CiAJCWFwcGVuZF9zdHJpbmcoemNvbmZ0ZXh0LCB6Y29uZmxlbmcpOwogCX0KIAlZWV9CUkVBSwotY2FzZSA1NjoKLS8qIHJ1bGUgNTYgY2FuIG1hdGNoIGVvbCAqLworY2FzZSAyNToKKy8qIHJ1bGUgMjUgY2FuIG1hdGNoIGVvbCAqLwogKnl5X2NwID0gKHl5X2hvbGRfY2hhcik7IC8qIHVuZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHpjb25mdGV4dCAqLwogKHl5X2NfYnVmX3ApID0geXlfY3AgLT0gMTsKIFlZX0RPX0JFRk9SRV9BQ1RJT047IC8qIHNldCB1cCB6Y29uZnRleHQgYWdhaW4gKi8KQEAgLTI1MjQsMTMgKzExNjEsMTMgQEAKIAkJcmV0dXJuIFRfV09SRF9RVU9URTsKIAl9CiAJWVlfQlJFQUsKLWNhc2UgNTc6CitjYXNlIDI2OgogWVlfUlVMRV9TRVRVUAogewogCQlhcHBlbmRfc3RyaW5nKHpjb25mdGV4dCArIDEsIHpjb25mbGVuZyAtIDEpOwogCX0KIAlZWV9CUkVBSwotY2FzZSA1ODoKK2Nhc2UgMjc6CiBZWV9SVUxFX1NFVFVQCiB7CiAJCWlmIChzdHIgPT0gemNvbmZ0ZXh0WzBdKSB7CkBAIC0yNTQxLDggKzExNzgsOCBAQAogCQkJYXBwZW5kX3N0cmluZyh6Y29uZnRleHQsIDEpOwogCX0KIAlZWV9CUkVBSwotY2FzZSA1OToKLS8qIHJ1bGUgNTkgY2FuIG1hdGNoIGVvbCAqLworY2FzZSAyODoKKy8qIHJ1bGUgMjggY2FuIG1hdGNoIGVvbCAqLwogWVlfUlVMRV9TRVRVUAogewogCQlwcmludGYoIiVzOiVkOndhcm5pbmc6IG11bHRpLWxpbmUgc3RyaW5ncyBub3Qgc3VwcG9ydGVkXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKQEAgLTI1NTcsNyArMTE5NCw3IEBACiAJfQogCVlZX0JSRUFLCiAKLWNhc2UgNjA6CitjYXNlIDI5OgogWVlfUlVMRV9TRVRVUAogewogCQl0cyA9IDA7CkBAIC0yNTgyLDggKzEyMTksOCBAQAogCQl9CiAJfQogCVlZX0JSRUFLCi1jYXNlIDYxOgotLyogcnVsZSA2MSBjYW4gbWF0Y2ggZW9sICovCitjYXNlIDMwOgorLyogcnVsZSAzMCBjYW4gbWF0Y2ggZW9sICovCiAqeXlfY3AgPSAoeXlfaG9sZF9jaGFyKTsgLyogdW5kbyBlZmZlY3RzIG9mIHNldHRpbmcgdXAgemNvbmZ0ZXh0ICovCiAoeXlfY19idWZfcCkgPSB5eV9jcCAtPSAxOwogWVlfRE9fQkVGT1JFX0FDVElPTjsgLyogc2V0IHVwIHpjb25mdGV4dCBhZ2FpbiAqLwpAQCAtMjU5NCwxNSArMTIzMSwxNSBAQAogCQlyZXR1cm4gVF9IRUxQVEVYVDsKIAl9CiAJWVlfQlJFQUsKLWNhc2UgNjI6Ci0vKiBydWxlIDYyIGNhbiBtYXRjaCBlb2wgKi8KK2Nhc2UgMzE6CisvKiBydWxlIDMxIGNhbiBtYXRjaCBlb2wgKi8KIFlZX1JVTEVfU0VUVVAKIHsKIAkJY3VycmVudF9maWxlLT5saW5lbm8rKzsKIAkJYXBwZW5kX3N0cmluZygiXG4iLCAxKTsKIAl9CiAJWVlfQlJFQUsKLWNhc2UgNjM6CitjYXNlIDMyOgogWVlfUlVMRV9TRVRVUAogewogCQlhcHBlbmRfc3RyaW5nKHpjb25mdGV4dCwgemNvbmZsZW5nKTsKQEAgLTI2MjAsMTUgKzEyNTcsMTUgQEAKIGNhc2UgWVlfU1RBVEVfRU9GKElOSVRJQUwpOgogY2FzZSBZWV9TVEFURV9FT0YoQ09NTUFORCk6CiB7Ci0JaWYgKGN1cnJlbnRfYnVmKSB7CisJaWYgKGN1cnJlbnRfZmlsZSkgewogCQl6Y29uZl9lbmRmaWxlKCk7Ci0JCXJldHVybiBUX0VPRjsKKwkJcmV0dXJuIFRfRU9MOwogCX0KIAlmY2xvc2UoemNvbmZpbik7CiAJeXl0ZXJtaW5hdGUoKTsKIH0KIAlZWV9CUkVBSwotY2FzZSA2NDoKK2Nhc2UgMzM6CiBZWV9SVUxFX1NFVFVQCiBZWV9GQVRBTF9FUlJPUiggImZsZXggc2Nhbm5lciBqYW1tZWQiICk7CiAJWVlfQlJFQUsKQEAgLTMzMzIsMTYgKzE5NjksMTYgQEAKIAogLyoqIFNldHVwIHRoZSBpbnB1dCBidWZmZXIgc3RhdGUgdG8gc2NhbiBhIHN0cmluZy4gVGhlIG5leHQgY2FsbCB0byB6Y29uZmxleCgpIHdpbGwKICAqIHNjYW4gZnJvbSBhIEBlIGNvcHkgb2YgQGEgc3RyLgotICogQHBhcmFtIHN0ciBhIE5VTC10ZXJtaW5hdGVkIHN0cmluZyB0byBzY2FuCisgKiBAcGFyYW0geXlfc3RyIGEgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIHRvIHNjYW4KICAqIAogICogQHJldHVybiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBvYmplY3QuCiAgKiBAbm90ZSBJZiB5b3Ugd2FudCB0byBzY2FuIGJ5dGVzIHRoYXQgbWF5IGNvbnRhaW4gTlVMIHZhbHVlcywgdGhlbiB1c2UKICAqICAgICAgIHpjb25mX3NjYW5fYnl0ZXMoKSBpbnN0ZWFkLgogICovCi1ZWV9CVUZGRVJfU1RBVEUgemNvbmZfc2Nhbl9zdHJpbmcgKHl5Y29uc3QgY2hhciAqIHN0ciApCitZWV9CVUZGRVJfU1RBVEUgemNvbmZfc2Nhbl9zdHJpbmcgKHl5Y29uc3QgY2hhciAqIHl5X3N0ciApCiB7CiAgICAgCi0JcmV0dXJuIHpjb25mX3NjYW5fYnl0ZXMoc3RyLHN0cmxlbihzdHIpICk7CisJcmV0dXJuIHpjb25mX3NjYW5fYnl0ZXMoeXlfc3RyLHN0cmxlbih5eV9zdHIpICk7CiB9CiAKIC8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gdGhlIGdpdmVuIGJ5dGVzLiBUaGUgbmV4dCBjYWxsIHRvIHpjb25mbGV4KCkgd2lsbApAQCAtMzY1MCw3ICsyMjg3LDcgQEAKIAljdXJyZW50X2ZpbGUgPSBmaWxlOwogfQogCi1zdGF0aWMgc3RydWN0IGJ1ZmZlciAqemNvbmZfZW5kZmlsZSh2b2lkKQorc3RhdGljIHZvaWQgemNvbmZfZW5kZmlsZSh2b2lkKQogewogCXN0cnVjdCBidWZmZXIgKnBhcmVudDsKIApAQCAtMzY2NiwyMyArMjMwMywxNSBAQAogCX0KIAlmcmVlKGN1cnJlbnRfYnVmKTsKIAljdXJyZW50X2J1ZiA9IHBhcmVudDsKLQotCXJldHVybiBwYXJlbnQ7CiB9CiAKIGludCB6Y29uZl9saW5lbm8odm9pZCkKIHsKLQlpZiAoY3VycmVudF9idWYpCi0JCXJldHVybiBjdXJyZW50X2ZpbGUtPmxpbmVubyAtIDE7Ci0JZWxzZQotCQlyZXR1cm4gMDsKKwlyZXR1cm4gY3VycmVudF9wb3MubGluZW5vOwogfQogCiBjaGFyICp6Y29uZl9jdXJuYW1lKHZvaWQpCiB7Ci0JaWYgKGN1cnJlbnRfYnVmKQotCQlyZXR1cm4gY3VycmVudF9maWxlLT5uYW1lOwotCWVsc2UKLQkJcmV0dXJuICI8bm9uZT4iOworCXJldHVybiBjdXJyZW50X3Bvcy5maWxlID8gY3VycmVudF9wb3MuZmlsZS0+bmFtZSA6ICI8bm9uZT4iOwogfQogCmRpZmYgLS1naXQgYS9zY3JpcHRzL2tjb25maWcvbGtjLmggYi9zY3JpcHRzL2tjb25maWcvbGtjLmgKaW5kZXggNWZiYTFmZS4uNTI3ZjYwYyAxMDA2NDQKLS0tIGEvc2NyaXB0cy9rY29uZmlnL2xrYy5oCisrKyBiL3NjcmlwdHMva2NvbmZpZy9sa2MuaApAQCAtMzcsNiArMzcsMTcgQEAKICNkZWZpbmUgXyh0ZXh0KSBnZXR0ZXh0KHRleHQpCiAjZGVmaW5lIE5fKHRleHQpICh0ZXh0KQogCisKKyNkZWZpbmUgVEZfQ09NTUFORAkweDAwMDEKKyNkZWZpbmUgVEZfUEFSQU0JMHgwMDAyCisKK3N0cnVjdCBrY29uZl9pZCB7CisJaW50IG5hbWU7CisJaW50IHRva2VuOworCXVuc2lnbmVkIGludCBmbGFnczsKKwllbnVtIHN5bWJvbF90eXBlIHN0eXBlOworfTsKKwogaW50IHpjb25mcGFyc2Uodm9pZCk7CiB2b2lkIHpjb25mZHVtcChGSUxFICpvdXQpOwogCkBAIC01MCw3ICs2MSw2IEBACiAKIC8qIGNvbmZkYXRhLmMgKi8KIGV4dGVybiBjb25zdCBjaGFyIGNvbmZfZGVmX2ZpbGVuYW1lW107Ci1leHRlcm4gY2hhciBjb25mX2ZpbGVuYW1lW107CiAKIGNoYXIgKmNvbmZfZ2V0X2RlZmF1bHRfY29uZm5hbWUodm9pZCk7CiAKQEAgLTU5LDcgKzY5LDcgQEAKIAogLyogbWVudS5jICovCiB2b2lkIG1lbnVfaW5pdCh2b2lkKTsKLXZvaWQgbWVudV9hZGRfbWVudSh2b2lkKTsKK3N0cnVjdCBtZW51ICptZW51X2FkZF9tZW51KHZvaWQpOwogdm9pZCBtZW51X2VuZF9tZW51KHZvaWQpOwogdm9pZCBtZW51X2FkZF9lbnRyeShzdHJ1Y3Qgc3ltYm9sICpzeW0pOwogdm9pZCBtZW51X2VuZF9lbnRyeSh2b2lkKTsKZGlmZiAtLWdpdCBhL3NjcmlwdHMva2NvbmZpZy9sa2NfcHJvdG8uaCBiL3NjcmlwdHMva2NvbmZpZy9sa2NfcHJvdG8uaAppbmRleCA2ZGM2ZDBjLi5iNmEzODljIDEwMDY0NAotLS0gYS9zY3JpcHRzL2tjb25maWcvbGtjX3Byb3RvLmgKKysrIGIvc2NyaXB0cy9rY29uZmlnL2xrY19wcm90by5oCkBAIC0yLDYgKzIsNyBAQAogLyogY29uZmRhdGEuYyAqLwogUChjb25mX3BhcnNlLHZvaWQsKGNvbnN0IGNoYXIgKm5hbWUpKTsKIFAoY29uZl9yZWFkLGludCwoY29uc3QgY2hhciAqbmFtZSkpOworUChjb25mX3JlYWRfc2ltcGxlLGludCwoY29uc3QgY2hhciAqbmFtZSkpOwogUChjb25mX3dyaXRlLGludCwoY29uc3QgY2hhciAqbmFtZSkpOwogCiAvKiBtZW51LmMgKi8KZGlmZiAtLWdpdCBhL3NjcmlwdHMva2NvbmZpZy9tZW51LmMgYi9zY3JpcHRzL2tjb25maWcvbWVudS5jCmluZGV4IDVjZmE2YzQuLjBmY2UyMGMgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy9tZW51LmMKKysrIGIvc2NyaXB0cy9rY29uZmlnL21lbnUuYwpAQCAtNjEsMTAgKzYxLDExIEBACiB7CiB9CiAKLXZvaWQgbWVudV9hZGRfbWVudSh2b2lkKQorc3RydWN0IG1lbnUgKm1lbnVfYWRkX21lbnUodm9pZCkKIHsKLQljdXJyZW50X21lbnUgPSBjdXJyZW50X2VudHJ5OworCW1lbnVfZW5kX2VudHJ5KCk7CiAJbGFzdF9lbnRyeV9wdHIgPSAmY3VycmVudF9lbnRyeS0+bGlzdDsKKwlyZXR1cm4gY3VycmVudF9tZW51ID0gY3VycmVudF9lbnRyeTsKIH0KIAogdm9pZCBtZW51X2VuZF9tZW51KHZvaWQpCkBAIC0xNTEsNiArMTUyLDEyIEBACiAJbWVudV9hZGRfcHJvcCh0eXBlLCBOVUxMLCBleHByX2FsbG9jX3N5bWJvbChzeW0pLCBkZXApOwogfQogCitzdGF0aWMgaW50IG1lbnVfcmFuZ2VfdmFsaWRfc3ltKHN0cnVjdCBzeW1ib2wgKnN5bSwgc3RydWN0IHN5bWJvbCAqc3ltMikKK3sKKwlyZXR1cm4gc3ltMi0+dHlwZSA9PSBTX0lOVCB8fCBzeW0yLT50eXBlID09IFNfSEVYIHx8CisJICAgICAgIChzeW0yLT50eXBlID09IFNfVU5LTk9XTiAmJiBzeW1fc3RyaW5nX3ZhbGlkKHN5bSwgc3ltMi0+bmFtZSkpOworfQorCiB2b2lkIHN5bV9jaGVja19wcm9wKHN0cnVjdCBzeW1ib2wgKnN5bSkKIHsKIAlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CkBAIC0xODUsOCArMTkyLDggQEAKIAkJCWlmIChzeW0tPnR5cGUgIT0gU19JTlQgJiYgc3ltLT50eXBlICE9IFNfSEVYKQogCQkJCXByb3Bfd2Fybihwcm9wLCAicmFuZ2UgaXMgb25seSBhbGxvd2VkICIKIAkJCQkgICAgICAgICAgICAgICAgImZvciBpbnQgb3IgaGV4IHN5bWJvbHMiKTsKLQkJCWlmICghc3ltX3N0cmluZ192YWxpZChzeW0sIHByb3AtPmV4cHItPmxlZnQuc3ltLT5uYW1lKSB8fAotCQkJICAgICFzeW1fc3RyaW5nX3ZhbGlkKHN5bSwgcHJvcC0+ZXhwci0+cmlnaHQuc3ltLT5uYW1lKSkKKwkJCWlmICghbWVudV9yYW5nZV92YWxpZF9zeW0oc3ltLCBwcm9wLT5leHByLT5sZWZ0LnN5bSkgfHwKKwkJCSAgICAhbWVudV9yYW5nZV92YWxpZF9zeW0oc3ltLCBwcm9wLT5leHByLT5yaWdodC5zeW0pKQogCQkJCXByb3Bfd2Fybihwcm9wLCAicmFuZ2UgaXMgaW52YWxpZCIpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9zY3JpcHRzL2tjb25maWcvc3ltYm9sLmMgYi9zY3JpcHRzL2tjb25maWcvc3ltYm9sLmMKaW5kZXggYWZmYTUyZi4uNjljMjU0OSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9rY29uZmlnL3N5bWJvbC5jCisrKyBiL3NjcmlwdHMva2NvbmZpZy9zeW1ib2wuYwpAQCAtMTQxLDYgKzE0MSw1NSBAQAogCXJldHVybiBOVUxMOwogfQogCitzdGF0aWMgaW50IHN5bV9nZXRfcmFuZ2VfdmFsKHN0cnVjdCBzeW1ib2wgKnN5bSwgaW50IGJhc2UpCit7CisJc3ltX2NhbGNfdmFsdWUoc3ltKTsKKwlzd2l0Y2ggKHN5bS0+dHlwZSkgeworCWNhc2UgU19JTlQ6CisJCWJhc2UgPSAxMDsKKwkJYnJlYWs7CisJY2FzZSBTX0hFWDoKKwkJYmFzZSA9IDE2OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJcmV0dXJuIHN0cnRvbChzeW0tPmN1cnIudmFsLCBOVUxMLCBiYXNlKTsKK30KKworc3RhdGljIHZvaWQgc3ltX3ZhbGlkYXRlX3JhbmdlKHN0cnVjdCBzeW1ib2wgKnN5bSkKK3sKKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CisJaW50IGJhc2UsIHZhbCwgdmFsMjsKKwljaGFyIHN0cls2NF07CisKKwlzd2l0Y2ggKHN5bS0+dHlwZSkgeworCWNhc2UgU19JTlQ6CisJCWJhc2UgPSAxMDsKKwkJYnJlYWs7CisJY2FzZSBTX0hFWDoKKwkJYmFzZSA9IDE2OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm47CisJfQorCXByb3AgPSBzeW1fZ2V0X3JhbmdlX3Byb3Aoc3ltKTsKKwlpZiAoIXByb3ApCisJCXJldHVybjsKKwl2YWwgPSBzdHJ0b2woc3ltLT5jdXJyLnZhbCwgTlVMTCwgYmFzZSk7CisJdmFsMiA9IHN5bV9nZXRfcmFuZ2VfdmFsKHByb3AtPmV4cHItPmxlZnQuc3ltLCBiYXNlKTsKKwlpZiAodmFsID49IHZhbDIpIHsKKwkJdmFsMiA9IHN5bV9nZXRfcmFuZ2VfdmFsKHByb3AtPmV4cHItPnJpZ2h0LnN5bSwgYmFzZSk7CisJCWlmICh2YWwgPD0gdmFsMikKKwkJCXJldHVybjsKKwl9CisJaWYgKHN5bS0+dHlwZSA9PSBTX0lOVCkKKwkJc3ByaW50ZihzdHIsICIlZCIsIHZhbDIpOworCWVsc2UKKwkJc3ByaW50ZihzdHIsICIweCV4IiwgdmFsMik7CisJc3ltLT5jdXJyLnZhbCA9IHN0cmR1cChzdHIpOworfQorCiBzdGF0aWMgdm9pZCBzeW1fY2FsY192aXNpYmlsaXR5KHN0cnVjdCBzeW1ib2wgKnN5bSkKIHsKIAlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CkBAIC0zMDEsNiArMzUwLDcgQEAKIAlzeW0tPmN1cnIgPSBuZXd2YWw7CiAJaWYgKHN5bV9pc19jaG9pY2Uoc3ltKSAmJiBuZXd2YWwudHJpID09IHllcykKIAkJc3ltLT5jdXJyLnZhbCA9IHN5bV9jYWxjX2Nob2ljZShzeW0pOworCXN5bV92YWxpZGF0ZV9yYW5nZShzeW0pOwogCiAJaWYgKG1lbWNtcCgmb2xkdmFsLCAmc3ltLT5jdXJyLCBzaXplb2Yob2xkdmFsKSkpCiAJCXN5bV9zZXRfY2hhbmdlZChzeW0pOwpAQCAtMzgwLDExICs0MzAsMjIgQEAKIAkJc3ltLT5mbGFncyAmPSB+U1lNQk9MX05FVzsKIAkJc3ltX3NldF9jaGFuZ2VkKHN5bSk7CiAJfQorCS8qCisJICogc2V0dGluZyBhIGNob2ljZSB2YWx1ZSBhbHNvIHJlc2V0cyB0aGUgbmV3IGZsYWcgb2YgdGhlIGNob2ljZQorCSAqIHN5bWJvbCBhbmQgYWxsIG90aGVyIGNob2ljZSB2YWx1ZXMuCisJICovCiAJaWYgKHN5bV9pc19jaG9pY2VfdmFsdWUoc3ltKSAmJiB2YWwgPT0geWVzKSB7CiAJCXN0cnVjdCBzeW1ib2wgKmNzID0gcHJvcF9nZXRfc3ltYm9sKHN5bV9nZXRfY2hvaWNlX3Byb3Aoc3ltKSk7CisJCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKKwkJc3RydWN0IGV4cHIgKmU7CiAKIAkJY3MtPnVzZXIudmFsID0gc3ltOwogCQljcy0+ZmxhZ3MgJj0gflNZTUJPTF9ORVc7CisJCXByb3AgPSBzeW1fZ2V0X2Nob2ljZV9wcm9wKGNzKTsKKwkJZm9yIChlID0gcHJvcC0+ZXhwcjsgZTsgZSA9IGUtPmxlZnQuZXhwcikgeworCQkJaWYgKGUtPnJpZ2h0LnN5bS0+dmlzaWJsZSAhPSBubykKKwkJCQllLT5yaWdodC5zeW0tPmZsYWdzICY9IH5TWU1CT0xfTkVXOworCQl9CiAJfQogCiAJc3ltLT51c2VyLnRyaSA9IHZhbDsKQEAgLTQ3OCw4ICs1MzksOCBAQAogCQlpZiAoIXByb3ApCiAJCQlyZXR1cm4gdHJ1ZTsKIAkJdmFsID0gc3RydG9sKHN0ciwgTlVMTCwgMTApOwotCQlyZXR1cm4gdmFsID49IHN0cnRvbChwcm9wLT5leHByLT5sZWZ0LnN5bS0+bmFtZSwgTlVMTCwgMTApICYmCi0JCSAgICAgICB2YWwgPD0gc3RydG9sKHByb3AtPmV4cHItPnJpZ2h0LnN5bS0+bmFtZSwgTlVMTCwgMTApOworCQlyZXR1cm4gdmFsID49IHN5bV9nZXRfcmFuZ2VfdmFsKHByb3AtPmV4cHItPmxlZnQuc3ltLCAxMCkgJiYKKwkJICAgICAgIHZhbCA8PSBzeW1fZ2V0X3JhbmdlX3ZhbChwcm9wLT5leHByLT5yaWdodC5zeW0sIDEwKTsKIAljYXNlIFNfSEVYOgogCQlpZiAoIXN5bV9zdHJpbmdfdmFsaWQoc3ltLCBzdHIpKQogCQkJcmV0dXJuIGZhbHNlOwpAQCAtNDg3LDggKzU0OCw4IEBACiAJCWlmICghcHJvcCkKIAkJCXJldHVybiB0cnVlOwogCQl2YWwgPSBzdHJ0b2woc3RyLCBOVUxMLCAxNik7Ci0JCXJldHVybiB2YWwgPj0gc3RydG9sKHByb3AtPmV4cHItPmxlZnQuc3ltLT5uYW1lLCBOVUxMLCAxNikgJiYKLQkJICAgICAgIHZhbCA8PSBzdHJ0b2wocHJvcC0+ZXhwci0+cmlnaHQuc3ltLT5uYW1lLCBOVUxMLCAxNik7CisJCXJldHVybiB2YWwgPj0gc3ltX2dldF9yYW5nZV92YWwocHJvcC0+ZXhwci0+bGVmdC5zeW0sIDE2KSAmJgorCQkgICAgICAgdmFsIDw9IHN5bV9nZXRfcmFuZ2VfdmFsKHByb3AtPmV4cHItPnJpZ2h0LnN5bSwgMTYpOwogCWNhc2UgU19CT09MRUFOOgogCWNhc2UgU19UUklTVEFURToKIAkJc3dpdGNoIChzdHJbMF0pIHsKQEAgLTczMSwxMiArNzkyLDEyIEBACiAJc3RydWN0IHN5bWJvbCAqc3ltMjsKIAlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CiAKLQlpZiAoc3ltLT5mbGFncyAmIFNZTUJPTF9DSEVDS19ET05FKQotCQlyZXR1cm4gTlVMTDsKIAlpZiAoc3ltLT5mbGFncyAmIFNZTUJPTF9DSEVDSykgewogCQlwcmludGYoIldhcm5pbmchIEZvdW5kIHJlY3Vyc2l2ZSBkZXBlbmRlbmN5OiAlcyIsIHN5bS0+bmFtZSk7CiAJCXJldHVybiBzeW07CiAJfQorCWlmIChzeW0tPmZsYWdzICYgU1lNQk9MX0NIRUNLRUQpCisJCXJldHVybiBOVUxMOwogCiAJc3ltLT5mbGFncyB8PSAoU1lNQk9MX0NIRUNLIHwgU1lNQk9MX0NIRUNLRUQpOwogCXN5bTIgPSBzeW1fY2hlY2tfZXhwcl9kZXBzKHN5bS0+cmV2X2RlcC5leHByKTsKQEAgLTc1Niw4ICs4MTcsMTMgQEAKIAkJCWdvdG8gb3V0OwogCX0KIG91dDoKLQlpZiAoc3ltMikKKwlpZiAoc3ltMikgewogCQlwcmludGYoIiAlcyIsIHN5bS0+bmFtZSk7CisJCWlmIChzeW0yID09IHN5bSkgeworCQkJcHJpbnRmKCJcbiIpOworCQkJc3ltMiA9IE5VTEw7CisJCX0KKwl9CiAJc3ltLT5mbGFncyAmPSB+U1lNQk9MX0NIRUNLOwogCXJldHVybiBzeW0yOwogfQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnL3pjb25mLmdwZXJmIGIvc2NyaXB0cy9rY29uZmlnL3pjb25mLmdwZXJmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwMzIyMDYKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2tjb25maWcvemNvbmYuZ3BlcmYKQEAgLTAsMCArMSw0MyBAQAorJWxhbmd1YWdlPUFOU0ktQworJWRlZmluZSBoYXNoLWZ1bmN0aW9uLW5hbWUga2NvbmZfaWRfaGFzaAorJWRlZmluZSBsb29rdXAtZnVuY3Rpb24tbmFtZSBrY29uZl9pZF9sb29rdXAKKyVkZWZpbmUgc3RyaW5nLXBvb2wtbmFtZSBrY29uZl9pZF9zdHJpbmdzCislY29tcGFyZS1zdHJuY21wCislZW51bQorJXBpYworJXN0cnVjdC10eXBlCisKK3N0cnVjdCBrY29uZl9pZDsKKworJSUKK21haW5tZW51LAlUX01BSU5NRU5VLAlURl9DT01NQU5ECittZW51LAkJVF9NRU5VLAkJVEZfQ09NTUFORAorZW5kbWVudSwJVF9FTkRNRU5VLAlURl9DT01NQU5ECitzb3VyY2UsCQlUX1NPVVJDRSwJVEZfQ09NTUFORAorY2hvaWNlLAkJVF9DSE9JQ0UsCVRGX0NPTU1BTkQKK2VuZGNob2ljZSwJVF9FTkRDSE9JQ0UsCVRGX0NPTU1BTkQKK2NvbW1lbnQsCVRfQ09NTUVOVCwJVEZfQ09NTUFORAorY29uZmlnLAkJVF9DT05GSUcsCVRGX0NPTU1BTkQKK21lbnVjb25maWcsCVRfTUVOVUNPTkZJRywJVEZfQ09NTUFORAoraGVscCwJCVRfSEVMUCwJCVRGX0NPTU1BTkQKK2lmLAkJVF9JRiwJCVRGX0NPTU1BTkR8VEZfUEFSQU0KK2VuZGlmLAkJVF9FTkRJRiwJVEZfQ09NTUFORAorZGVwZW5kcywJVF9ERVBFTkRTLAlURl9DT01NQU5ECityZXF1aXJlcywJVF9SRVFVSVJFUywJVEZfQ09NTUFORAorb3B0aW9uYWwsCVRfT1BUSU9OQUwsCVRGX0NPTU1BTkQKK2RlZmF1bHQsCVRfREVGQVVMVCwJVEZfQ09NTUFORCwgU19VTktOT1dOCitwcm9tcHQsCQlUX1BST01QVCwJVEZfQ09NTUFORAordHJpc3RhdGUsCVRfVFlQRSwJCVRGX0NPTU1BTkQsIFNfVFJJU1RBVEUKK2RlZl90cmlzdGF0ZSwJVF9ERUZBVUxULAlURl9DT01NQU5ELCBTX1RSSVNUQVRFCitib29sLAkJVF9UWVBFLAkJVEZfQ09NTUFORCwgU19CT09MRUFOCitib29sZWFuLAlUX1RZUEUsCQlURl9DT01NQU5ELCBTX0JPT0xFQU4KK2RlZl9ib29sLAlUX0RFRkFVTFQsCVRGX0NPTU1BTkQsIFNfQk9PTEVBTgorZGVmX2Jvb2xlYW4sCVRfREVGQVVMVCwJVEZfQ09NTUFORCwgU19CT09MRUFOCitpbnQsCQlUX1RZUEUsCQlURl9DT01NQU5ELCBTX0lOVAoraGV4LAkJVF9UWVBFLAkJVEZfQ09NTUFORCwgU19IRVgKK3N0cmluZywJCVRfVFlQRSwJCVRGX0NPTU1BTkQsIFNfU1RSSU5HCitzZWxlY3QsCQlUX1NFTEVDVCwJVEZfQ09NTUFORAorZW5hYmxlLAkJVF9TRUxFQ1QsCVRGX0NPTU1BTkQKK3JhbmdlLAkJVF9SQU5HRSwJVEZfQ09NTUFORAorb24sCQlUX09OLAkJVEZfUEFSQU0KKyUlCmRpZmYgLS1naXQgYS9zY3JpcHRzL2tjb25maWcvemNvbmYuaGFzaC5jX3NoaXBwZWQgYi9zY3JpcHRzL2tjb25maWcvemNvbmYuaGFzaC5jX3NoaXBwZWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ1ZjBmYwotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMva2NvbmZpZy96Y29uZi5oYXNoLmNfc2hpcHBlZApAQCAtMCwwICsxLDIzMSBAQAorLyogQU5TSS1DIGNvZGUgcHJvZHVjZWQgYnkgZ3BlcmYgdmVyc2lvbiAzLjAuMSAqLworLyogQ29tbWFuZC1saW5lOiBncGVyZiAgKi8KKy8qIENvbXB1dGVkIHBvc2l0aW9uczogLWsnMSwzJyAqLworCisjaWYgISgoJyAnID09IDMyKSAmJiAoJyEnID09IDMzKSAmJiAoJyInID09IDM0KSAmJiAoJyMnID09IDM1KSBcCisgICAgICAmJiAoJyUnID09IDM3KSAmJiAoJyYnID09IDM4KSAmJiAoJ1wnJyA9PSAzOSkgJiYgKCcoJyA9PSA0MCkgXAorICAgICAgJiYgKCcpJyA9PSA0MSkgJiYgKCcqJyA9PSA0MikgJiYgKCcrJyA9PSA0MykgJiYgKCcsJyA9PSA0NCkgXAorICAgICAgJiYgKCctJyA9PSA0NSkgJiYgKCcuJyA9PSA0NikgJiYgKCcvJyA9PSA0NykgJiYgKCcwJyA9PSA0OCkgXAorICAgICAgJiYgKCcxJyA9PSA0OSkgJiYgKCcyJyA9PSA1MCkgJiYgKCczJyA9PSA1MSkgJiYgKCc0JyA9PSA1MikgXAorICAgICAgJiYgKCc1JyA9PSA1MykgJiYgKCc2JyA9PSA1NCkgJiYgKCc3JyA9PSA1NSkgJiYgKCc4JyA9PSA1NikgXAorICAgICAgJiYgKCc5JyA9PSA1NykgJiYgKCc6JyA9PSA1OCkgJiYgKCc7JyA9PSA1OSkgJiYgKCc8JyA9PSA2MCkgXAorICAgICAgJiYgKCc9JyA9PSA2MSkgJiYgKCc+JyA9PSA2MikgJiYgKCc/JyA9PSA2MykgJiYgKCdBJyA9PSA2NSkgXAorICAgICAgJiYgKCdCJyA9PSA2NikgJiYgKCdDJyA9PSA2NykgJiYgKCdEJyA9PSA2OCkgJiYgKCdFJyA9PSA2OSkgXAorICAgICAgJiYgKCdGJyA9PSA3MCkgJiYgKCdHJyA9PSA3MSkgJiYgKCdIJyA9PSA3MikgJiYgKCdJJyA9PSA3MykgXAorICAgICAgJiYgKCdKJyA9PSA3NCkgJiYgKCdLJyA9PSA3NSkgJiYgKCdMJyA9PSA3NikgJiYgKCdNJyA9PSA3NykgXAorICAgICAgJiYgKCdOJyA9PSA3OCkgJiYgKCdPJyA9PSA3OSkgJiYgKCdQJyA9PSA4MCkgJiYgKCdRJyA9PSA4MSkgXAorICAgICAgJiYgKCdSJyA9PSA4MikgJiYgKCdTJyA9PSA4MykgJiYgKCdUJyA9PSA4NCkgJiYgKCdVJyA9PSA4NSkgXAorICAgICAgJiYgKCdWJyA9PSA4NikgJiYgKCdXJyA9PSA4NykgJiYgKCdYJyA9PSA4OCkgJiYgKCdZJyA9PSA4OSkgXAorICAgICAgJiYgKCdaJyA9PSA5MCkgJiYgKCdbJyA9PSA5MSkgJiYgKCdcXCcgPT0gOTIpICYmICgnXScgPT0gOTMpIFwKKyAgICAgICYmICgnXicgPT0gOTQpICYmICgnXycgPT0gOTUpICYmICgnYScgPT0gOTcpICYmICgnYicgPT0gOTgpIFwKKyAgICAgICYmICgnYycgPT0gOTkpICYmICgnZCcgPT0gMTAwKSAmJiAoJ2UnID09IDEwMSkgJiYgKCdmJyA9PSAxMDIpIFwKKyAgICAgICYmICgnZycgPT0gMTAzKSAmJiAoJ2gnID09IDEwNCkgJiYgKCdpJyA9PSAxMDUpICYmICgnaicgPT0gMTA2KSBcCisgICAgICAmJiAoJ2snID09IDEwNykgJiYgKCdsJyA9PSAxMDgpICYmICgnbScgPT0gMTA5KSAmJiAoJ24nID09IDExMCkgXAorICAgICAgJiYgKCdvJyA9PSAxMTEpICYmICgncCcgPT0gMTEyKSAmJiAoJ3EnID09IDExMykgJiYgKCdyJyA9PSAxMTQpIFwKKyAgICAgICYmICgncycgPT0gMTE1KSAmJiAoJ3QnID09IDExNikgJiYgKCd1JyA9PSAxMTcpICYmICgndicgPT0gMTE4KSBcCisgICAgICAmJiAoJ3cnID09IDExOSkgJiYgKCd4JyA9PSAxMjApICYmICgneScgPT0gMTIxKSAmJiAoJ3onID09IDEyMikgXAorICAgICAgJiYgKCd7JyA9PSAxMjMpICYmICgnfCcgPT0gMTI0KSAmJiAoJ30nID09IDEyNSkgJiYgKCd+JyA9PSAxMjYpKQorLyogVGhlIGNoYXJhY3RlciBzZXQgaXMgbm90IGJhc2VkIG9uIElTTy02NDYuICAqLworI2Vycm9yICJncGVyZiBnZW5lcmF0ZWQgdGFibGVzIGRvbid0IHdvcmsgd2l0aCB0aGlzIGV4ZWN1dGlvbiBjaGFyYWN0ZXIgc2V0LiBQbGVhc2UgcmVwb3J0IGEgYnVnIHRvIDxidWctZ251LWdwZXJmQGdudS5vcmc+LiIKKyNlbmRpZgorCitzdHJ1Y3Qga2NvbmZfaWQ7CisvKiBtYXhpbXVtIGtleSByYW5nZSA9IDQ1LCBkdXBsaWNhdGVzID0gMCAqLworCisjaWZkZWYgX19HTlVDX18KK19faW5saW5lCisjZWxzZQorI2lmZGVmIF9fY3BsdXNwbHVzCitpbmxpbmUKKyNlbmRpZgorI2VuZGlmCitzdGF0aWMgdW5zaWduZWQgaW50CitrY29uZl9pZF9oYXNoIChyZWdpc3RlciBjb25zdCBjaGFyICpzdHIsIHJlZ2lzdGVyIHVuc2lnbmVkIGludCBsZW4pCit7CisgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGFzc29fdmFsdWVzW10gPQorICAgIHsKKyAgICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LAorICAgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsCisgICAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywKKyAgICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LAorICAgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsCisgICAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywKKyAgICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LAorICAgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsCisgICAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywKKyAgICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAyNSwgMTAsIDE1LAorICAgICAgIDAsICAwLCAgNSwgNDcsICAwLCAgMCwgNDcsIDQ3LCAgMCwgMTAsCisgICAgICAgMCwgMjAsIDIwLCAyMCwgIDUsICAwLCAgMCwgMjAsIDQ3LCA0NywKKyAgICAgIDIwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LAorICAgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsCisgICAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywKKyAgICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LAorICAgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsCisgICAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywKKyAgICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LAorICAgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsCisgICAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywKKyAgICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LAorICAgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsCisgICAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywKKyAgICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LAorICAgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NworICAgIH07CisgIHJlZ2lzdGVyIGludCBodmFsID0gbGVuOworCisgIHN3aXRjaCAoaHZhbCkKKyAgICB7CisgICAgICBkZWZhdWx0OgorICAgICAgICBodmFsICs9IGFzc29fdmFsdWVzWyh1bnNpZ25lZCBjaGFyKXN0clsyXV07CisgICAgICAvKkZBTExUSFJPVUdIKi8KKyAgICAgIGNhc2UgMjoKKyAgICAgIGNhc2UgMToKKyAgICAgICAgaHZhbCArPSBhc3NvX3ZhbHVlc1sodW5zaWduZWQgY2hhcilzdHJbMF1dOworICAgICAgICBicmVhazsKKyAgICB9CisgIHJldHVybiBodmFsOworfQorCitzdHJ1Y3Qga2NvbmZfaWRfc3RyaW5nc190CisgIHsKKyAgICBjaGFyIGtjb25mX2lkX3N0cmluZ3Nfc3RyMltzaXplb2YoImlmIildOworICAgIGNoYXIga2NvbmZfaWRfc3RyaW5nc19zdHIzW3NpemVvZigiaW50IildOworICAgIGNoYXIga2NvbmZfaWRfc3RyaW5nc19zdHI0W3NpemVvZigiaGVscCIpXTsKKyAgICBjaGFyIGtjb25mX2lkX3N0cmluZ3Nfc3RyNVtzaXplb2YoImVuZGlmIildOworICAgIGNoYXIga2NvbmZfaWRfc3RyaW5nc19zdHI2W3NpemVvZigic2VsZWN0IildOworICAgIGNoYXIga2NvbmZfaWRfc3RyaW5nc19zdHI3W3NpemVvZigiZW5kbWVudSIpXTsKKyAgICBjaGFyIGtjb25mX2lkX3N0cmluZ3Nfc3RyOFtzaXplb2YoInRyaXN0YXRlIildOworICAgIGNoYXIga2NvbmZfaWRfc3RyaW5nc19zdHI5W3NpemVvZigiZW5kY2hvaWNlIildOworICAgIGNoYXIga2NvbmZfaWRfc3RyaW5nc19zdHIxMFtzaXplb2YoInJhbmdlIildOworICAgIGNoYXIga2NvbmZfaWRfc3RyaW5nc19zdHIxMVtzaXplb2YoInN0cmluZyIpXTsKKyAgICBjaGFyIGtjb25mX2lkX3N0cmluZ3Nfc3RyMTJbc2l6ZW9mKCJkZWZhdWx0IildOworICAgIGNoYXIga2NvbmZfaWRfc3RyaW5nc19zdHIxM1tzaXplb2YoImRlZl9ib29sIildOworICAgIGNoYXIga2NvbmZfaWRfc3RyaW5nc19zdHIxNFtzaXplb2YoIm1lbnUiKV07CisgICAgY2hhciBrY29uZl9pZF9zdHJpbmdzX3N0cjE2W3NpemVvZigiZGVmX2Jvb2xlYW4iKV07CisgICAgY2hhciBrY29uZl9pZF9zdHJpbmdzX3N0cjE3W3NpemVvZigiZGVmX3RyaXN0YXRlIildOworICAgIGNoYXIga2NvbmZfaWRfc3RyaW5nc19zdHIxOFtzaXplb2YoIm1haW5tZW51IildOworICAgIGNoYXIga2NvbmZfaWRfc3RyaW5nc19zdHIyMFtzaXplb2YoIm1lbnVjb25maWciKV07CisgICAgY2hhciBrY29uZl9pZF9zdHJpbmdzX3N0cjIxW3NpemVvZigiY29uZmlnIildOworICAgIGNoYXIga2NvbmZfaWRfc3RyaW5nc19zdHIyMltzaXplb2YoIm9uIildOworICAgIGNoYXIga2NvbmZfaWRfc3RyaW5nc19zdHIyM1tzaXplb2YoImhleCIpXTsKKyAgICBjaGFyIGtjb25mX2lkX3N0cmluZ3Nfc3RyMjZbc2l6ZW9mKCJzb3VyY2UiKV07CisgICAgY2hhciBrY29uZl9pZF9zdHJpbmdzX3N0cjI3W3NpemVvZigiZGVwZW5kcyIpXTsKKyAgICBjaGFyIGtjb25mX2lkX3N0cmluZ3Nfc3RyMjhbc2l6ZW9mKCJvcHRpb25hbCIpXTsKKyAgICBjaGFyIGtjb25mX2lkX3N0cmluZ3Nfc3RyMzFbc2l6ZW9mKCJlbmFibGUiKV07CisgICAgY2hhciBrY29uZl9pZF9zdHJpbmdzX3N0cjMyW3NpemVvZigiY29tbWVudCIpXTsKKyAgICBjaGFyIGtjb25mX2lkX3N0cmluZ3Nfc3RyMzNbc2l6ZW9mKCJyZXF1aXJlcyIpXTsKKyAgICBjaGFyIGtjb25mX2lkX3N0cmluZ3Nfc3RyMzRbc2l6ZW9mKCJib29sIildOworICAgIGNoYXIga2NvbmZfaWRfc3RyaW5nc19zdHIzN1tzaXplb2YoImJvb2xlYW4iKV07CisgICAgY2hhciBrY29uZl9pZF9zdHJpbmdzX3N0cjQxW3NpemVvZigiY2hvaWNlIildOworICAgIGNoYXIga2NvbmZfaWRfc3RyaW5nc19zdHI0NltzaXplb2YoInByb21wdCIpXTsKKyAgfTsKK3N0YXRpYyBzdHJ1Y3Qga2NvbmZfaWRfc3RyaW5nc190IGtjb25mX2lkX3N0cmluZ3NfY29udGVudHMgPQorICB7CisgICAgImlmIiwKKyAgICAiaW50IiwKKyAgICAiaGVscCIsCisgICAgImVuZGlmIiwKKyAgICAic2VsZWN0IiwKKyAgICAiZW5kbWVudSIsCisgICAgInRyaXN0YXRlIiwKKyAgICAiZW5kY2hvaWNlIiwKKyAgICAicmFuZ2UiLAorICAgICJzdHJpbmciLAorICAgICJkZWZhdWx0IiwKKyAgICAiZGVmX2Jvb2wiLAorICAgICJtZW51IiwKKyAgICAiZGVmX2Jvb2xlYW4iLAorICAgICJkZWZfdHJpc3RhdGUiLAorICAgICJtYWlubWVudSIsCisgICAgIm1lbnVjb25maWciLAorICAgICJjb25maWciLAorICAgICJvbiIsCisgICAgImhleCIsCisgICAgInNvdXJjZSIsCisgICAgImRlcGVuZHMiLAorICAgICJvcHRpb25hbCIsCisgICAgImVuYWJsZSIsCisgICAgImNvbW1lbnQiLAorICAgICJyZXF1aXJlcyIsCisgICAgImJvb2wiLAorICAgICJib29sZWFuIiwKKyAgICAiY2hvaWNlIiwKKyAgICAicHJvbXB0IgorICB9OworI2RlZmluZSBrY29uZl9pZF9zdHJpbmdzICgoY29uc3QgY2hhciAqKSAma2NvbmZfaWRfc3RyaW5nc19jb250ZW50cykKKyNpZmRlZiBfX0dOVUNfXworX19pbmxpbmUKKyNlbmRpZgorc3RydWN0IGtjb25mX2lkICoKK2tjb25mX2lkX2xvb2t1cCAocmVnaXN0ZXIgY29uc3QgY2hhciAqc3RyLCByZWdpc3RlciB1bnNpZ25lZCBpbnQgbGVuKQoreworICBlbnVtCisgICAgeworICAgICAgVE9UQUxfS0VZV09SRFMgPSAzMCwKKyAgICAgIE1JTl9XT1JEX0xFTkdUSCA9IDIsCisgICAgICBNQVhfV09SRF9MRU5HVEggPSAxMiwKKyAgICAgIE1JTl9IQVNIX1ZBTFVFID0gMiwKKyAgICAgIE1BWF9IQVNIX1ZBTFVFID0gNDYKKyAgICB9OworCisgIHN0YXRpYyBzdHJ1Y3Qga2NvbmZfaWQgd29yZGxpc3RbXSA9CisgICAgeworICAgICAgey0xfSwgey0xfSwKKyAgICAgIHsoaW50KShsb25nKSYoKHN0cnVjdCBrY29uZl9pZF9zdHJpbmdzX3QgKikwKS0+a2NvbmZfaWRfc3RyaW5nc19zdHIyLAkJVF9JRiwJCVRGX0NPTU1BTkR8VEZfUEFSQU19LAorICAgICAgeyhpbnQpKGxvbmcpJigoc3RydWN0IGtjb25mX2lkX3N0cmluZ3NfdCAqKTApLT5rY29uZl9pZF9zdHJpbmdzX3N0cjMsCQlUX1RZUEUsCQlURl9DT01NQU5ELCBTX0lOVH0sCisgICAgICB7KGludCkobG9uZykmKChzdHJ1Y3Qga2NvbmZfaWRfc3RyaW5nc190ICopMCktPmtjb25mX2lkX3N0cmluZ3Nfc3RyNCwJCVRfSEVMUCwJCVRGX0NPTU1BTkR9LAorICAgICAgeyhpbnQpKGxvbmcpJigoc3RydWN0IGtjb25mX2lkX3N0cmluZ3NfdCAqKTApLT5rY29uZl9pZF9zdHJpbmdzX3N0cjUsCQlUX0VORElGLAlURl9DT01NQU5EfSwKKyAgICAgIHsoaW50KShsb25nKSYoKHN0cnVjdCBrY29uZl9pZF9zdHJpbmdzX3QgKikwKS0+a2NvbmZfaWRfc3RyaW5nc19zdHI2LAkJVF9TRUxFQ1QsCVRGX0NPTU1BTkR9LAorICAgICAgeyhpbnQpKGxvbmcpJigoc3RydWN0IGtjb25mX2lkX3N0cmluZ3NfdCAqKTApLT5rY29uZl9pZF9zdHJpbmdzX3N0cjcsCVRfRU5ETUVOVSwJVEZfQ09NTUFORH0sCisgICAgICB7KGludCkobG9uZykmKChzdHJ1Y3Qga2NvbmZfaWRfc3RyaW5nc190ICopMCktPmtjb25mX2lkX3N0cmluZ3Nfc3RyOCwJVF9UWVBFLAkJVEZfQ09NTUFORCwgU19UUklTVEFURX0sCisgICAgICB7KGludCkobG9uZykmKChzdHJ1Y3Qga2NvbmZfaWRfc3RyaW5nc190ICopMCktPmtjb25mX2lkX3N0cmluZ3Nfc3RyOSwJVF9FTkRDSE9JQ0UsCVRGX0NPTU1BTkR9LAorICAgICAgeyhpbnQpKGxvbmcpJigoc3RydWN0IGtjb25mX2lkX3N0cmluZ3NfdCAqKTApLT5rY29uZl9pZF9zdHJpbmdzX3N0cjEwLAkJVF9SQU5HRSwJVEZfQ09NTUFORH0sCisgICAgICB7KGludCkobG9uZykmKChzdHJ1Y3Qga2NvbmZfaWRfc3RyaW5nc190ICopMCktPmtjb25mX2lkX3N0cmluZ3Nfc3RyMTEsCQlUX1RZUEUsCQlURl9DT01NQU5ELCBTX1NUUklOR30sCisgICAgICB7KGludCkobG9uZykmKChzdHJ1Y3Qga2NvbmZfaWRfc3RyaW5nc190ICopMCktPmtjb25mX2lkX3N0cmluZ3Nfc3RyMTIsCVRfREVGQVVMVCwJVEZfQ09NTUFORCwgU19VTktOT1dOfSwKKyAgICAgIHsoaW50KShsb25nKSYoKHN0cnVjdCBrY29uZl9pZF9zdHJpbmdzX3QgKikwKS0+a2NvbmZfaWRfc3RyaW5nc19zdHIxMywJVF9ERUZBVUxULAlURl9DT01NQU5ELCBTX0JPT0xFQU59LAorICAgICAgeyhpbnQpKGxvbmcpJigoc3RydWN0IGtjb25mX2lkX3N0cmluZ3NfdCAqKTApLT5rY29uZl9pZF9zdHJpbmdzX3N0cjE0LAkJVF9NRU5VLAkJVEZfQ09NTUFORH0sCisgICAgICB7LTF9LAorICAgICAgeyhpbnQpKGxvbmcpJigoc3RydWN0IGtjb25mX2lkX3N0cmluZ3NfdCAqKTApLT5rY29uZl9pZF9zdHJpbmdzX3N0cjE2LAlUX0RFRkFVTFQsCVRGX0NPTU1BTkQsIFNfQk9PTEVBTn0sCisgICAgICB7KGludCkobG9uZykmKChzdHJ1Y3Qga2NvbmZfaWRfc3RyaW5nc190ICopMCktPmtjb25mX2lkX3N0cmluZ3Nfc3RyMTcsCVRfREVGQVVMVCwJVEZfQ09NTUFORCwgU19UUklTVEFURX0sCisgICAgICB7KGludCkobG9uZykmKChzdHJ1Y3Qga2NvbmZfaWRfc3RyaW5nc190ICopMCktPmtjb25mX2lkX3N0cmluZ3Nfc3RyMTgsCVRfTUFJTk1FTlUsCVRGX0NPTU1BTkR9LAorICAgICAgey0xfSwKKyAgICAgIHsoaW50KShsb25nKSYoKHN0cnVjdCBrY29uZl9pZF9zdHJpbmdzX3QgKikwKS0+a2NvbmZfaWRfc3RyaW5nc19zdHIyMCwJVF9NRU5VQ09ORklHLAlURl9DT01NQU5EfSwKKyAgICAgIHsoaW50KShsb25nKSYoKHN0cnVjdCBrY29uZl9pZF9zdHJpbmdzX3QgKikwKS0+a2NvbmZfaWRfc3RyaW5nc19zdHIyMSwJCVRfQ09ORklHLAlURl9DT01NQU5EfSwKKyAgICAgIHsoaW50KShsb25nKSYoKHN0cnVjdCBrY29uZl9pZF9zdHJpbmdzX3QgKikwKS0+a2NvbmZfaWRfc3RyaW5nc19zdHIyMiwJCVRfT04sCQlURl9QQVJBTX0sCisgICAgICB7KGludCkobG9uZykmKChzdHJ1Y3Qga2NvbmZfaWRfc3RyaW5nc190ICopMCktPmtjb25mX2lkX3N0cmluZ3Nfc3RyMjMsCQlUX1RZUEUsCQlURl9DT01NQU5ELCBTX0hFWH0sCisgICAgICB7LTF9LCB7LTF9LAorICAgICAgeyhpbnQpKGxvbmcpJigoc3RydWN0IGtjb25mX2lkX3N0cmluZ3NfdCAqKTApLT5rY29uZl9pZF9zdHJpbmdzX3N0cjI2LAkJVF9TT1VSQ0UsCVRGX0NPTU1BTkR9LAorICAgICAgeyhpbnQpKGxvbmcpJigoc3RydWN0IGtjb25mX2lkX3N0cmluZ3NfdCAqKTApLT5rY29uZl9pZF9zdHJpbmdzX3N0cjI3LAlUX0RFUEVORFMsCVRGX0NPTU1BTkR9LAorICAgICAgeyhpbnQpKGxvbmcpJigoc3RydWN0IGtjb25mX2lkX3N0cmluZ3NfdCAqKTApLT5rY29uZl9pZF9zdHJpbmdzX3N0cjI4LAlUX09QVElPTkFMLAlURl9DT01NQU5EfSwKKyAgICAgIHstMX0sIHstMX0sCisgICAgICB7KGludCkobG9uZykmKChzdHJ1Y3Qga2NvbmZfaWRfc3RyaW5nc190ICopMCktPmtjb25mX2lkX3N0cmluZ3Nfc3RyMzEsCQlUX1NFTEVDVCwJVEZfQ09NTUFORH0sCisgICAgICB7KGludCkobG9uZykmKChzdHJ1Y3Qga2NvbmZfaWRfc3RyaW5nc190ICopMCktPmtjb25mX2lkX3N0cmluZ3Nfc3RyMzIsCVRfQ09NTUVOVCwJVEZfQ09NTUFORH0sCisgICAgICB7KGludCkobG9uZykmKChzdHJ1Y3Qga2NvbmZfaWRfc3RyaW5nc190ICopMCktPmtjb25mX2lkX3N0cmluZ3Nfc3RyMzMsCVRfUkVRVUlSRVMsCVRGX0NPTU1BTkR9LAorICAgICAgeyhpbnQpKGxvbmcpJigoc3RydWN0IGtjb25mX2lkX3N0cmluZ3NfdCAqKTApLT5rY29uZl9pZF9zdHJpbmdzX3N0cjM0LAkJVF9UWVBFLAkJVEZfQ09NTUFORCwgU19CT09MRUFOfSwKKyAgICAgIHstMX0sIHstMX0sCisgICAgICB7KGludCkobG9uZykmKChzdHJ1Y3Qga2NvbmZfaWRfc3RyaW5nc190ICopMCktPmtjb25mX2lkX3N0cmluZ3Nfc3RyMzcsCVRfVFlQRSwJCVRGX0NPTU1BTkQsIFNfQk9PTEVBTn0sCisgICAgICB7LTF9LCB7LTF9LCB7LTF9LAorICAgICAgeyhpbnQpKGxvbmcpJigoc3RydWN0IGtjb25mX2lkX3N0cmluZ3NfdCAqKTApLT5rY29uZl9pZF9zdHJpbmdzX3N0cjQxLAkJVF9DSE9JQ0UsCVRGX0NPTU1BTkR9LAorICAgICAgey0xfSwgey0xfSwgey0xfSwgey0xfSwKKyAgICAgIHsoaW50KShsb25nKSYoKHN0cnVjdCBrY29uZl9pZF9zdHJpbmdzX3QgKikwKS0+a2NvbmZfaWRfc3RyaW5nc19zdHI0NiwJCVRfUFJPTVBULAlURl9DT01NQU5EfQorICAgIH07CisKKyAgaWYgKGxlbiA8PSBNQVhfV09SRF9MRU5HVEggJiYgbGVuID49IE1JTl9XT1JEX0xFTkdUSCkKKyAgICB7CisgICAgICByZWdpc3RlciBpbnQga2V5ID0ga2NvbmZfaWRfaGFzaCAoc3RyLCBsZW4pOworCisgICAgICBpZiAoa2V5IDw9IE1BWF9IQVNIX1ZBTFVFICYmIGtleSA+PSAwKQorICAgICAgICB7CisgICAgICAgICAgcmVnaXN0ZXIgaW50IG8gPSB3b3JkbGlzdFtrZXldLm5hbWU7CisgICAgICAgICAgaWYgKG8gPj0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgcmVnaXN0ZXIgY29uc3QgY2hhciAqcyA9IG8gKyBrY29uZl9pZF9zdHJpbmdzOworCisgICAgICAgICAgICAgIGlmICgqc3RyID09ICpzICYmICFzdHJuY21wIChzdHIgKyAxLCBzICsgMSwgbGVuIC0gMSkgJiYgc1tsZW5dID09ICdcMCcpCisgICAgICAgICAgICAgICAgcmV0dXJuICZ3b3JkbGlzdFtrZXldOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICByZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnL3pjb25mLmwgYi9zY3JpcHRzL2tjb25maWcvemNvbmYubAppbmRleCA1NTUxN2IyLi5jZmE0NjA3IDEwMDY0NAotLS0gYS9zY3JpcHRzL2tjb25maWcvemNvbmYubAorKysgYi9zY3JpcHRzL2tjb25maWcvemNvbmYubApAQCAtMTgsOCArMTgsMTIgQEAKIAogI2RlZmluZSBTVEFSVF9TVFJTSVpFCTE2CiAKLWNoYXIgKnRleHQ7Ci1zdGF0aWMgY2hhciAqdGV4dF9wdHI7CitzdGF0aWMgc3RydWN0IHsKKwlzdHJ1Y3QgZmlsZSAqZmlsZTsKKwlpbnQgbGluZW5vOworfSBjdXJyZW50X3BvczsKKworc3RhdGljIGNoYXIgKnRleHQ7CiBzdGF0aWMgaW50IHRleHRfc2l6ZSwgdGV4dF9hc2l6ZTsKIAogc3RydWN0IGJ1ZmZlciB7CkBAIC0zMiwyOSArMzYsMjggQEAKIHN0YXRpYyBpbnQgbGFzdF90cywgZmlyc3RfdHM7CiAKIHN0YXRpYyB2b2lkIHpjb25mX2VuZGhlbHAodm9pZCk7Ci1zdGF0aWMgc3RydWN0IGJ1ZmZlciAqemNvbmZfZW5kZmlsZSh2b2lkKTsKK3N0YXRpYyB2b2lkIHpjb25mX2VuZGZpbGUodm9pZCk7CiAKIHZvaWQgbmV3X3N0cmluZyh2b2lkKQogewogCXRleHQgPSBtYWxsb2MoU1RBUlRfU1RSU0laRSk7CiAJdGV4dF9hc2l6ZSA9IFNUQVJUX1NUUlNJWkU7Ci0JdGV4dF9wdHIgPSB0ZXh0OwogCXRleHRfc2l6ZSA9IDA7Ci0JKnRleHRfcHRyID0gMDsKKwkqdGV4dCA9IDA7CiB9CiAKIHZvaWQgYXBwZW5kX3N0cmluZyhjb25zdCBjaGFyICpzdHIsIGludCBzaXplKQogewogCWludCBuZXdfc2l6ZSA9IHRleHRfc2l6ZSArIHNpemUgKyAxOwogCWlmIChuZXdfc2l6ZSA+IHRleHRfYXNpemUpIHsKKwkJbmV3X3NpemUgKz0gU1RBUlRfU1RSU0laRSAtIDE7CisJCW5ld19zaXplICY9IC1TVEFSVF9TVFJTSVpFOwogCQl0ZXh0ID0gcmVhbGxvYyh0ZXh0LCBuZXdfc2l6ZSk7CiAJCXRleHRfYXNpemUgPSBuZXdfc2l6ZTsKLQkJdGV4dF9wdHIgPSB0ZXh0ICsgdGV4dF9zaXplOwogCX0KLQltZW1jcHkodGV4dF9wdHIsIHN0ciwgc2l6ZSk7Ci0JdGV4dF9wdHIgKz0gc2l6ZTsKKwltZW1jcHkodGV4dCArIHRleHRfc2l6ZSwgc3RyLCBzaXplKTsKIAl0ZXh0X3NpemUgKz0gc2l6ZTsKLQkqdGV4dF9wdHIgPSAwOworCXRleHRbdGV4dF9zaXplXSA9IDA7CiB9CiAKIHZvaWQgYWxsb2Nfc3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwgaW50IHNpemUpCkBAIC03MiwxMCArNzUsMTMgQEAKIAlpbnQgc3RyID0gMDsKIAlpbnQgdHMsIGk7CiAKLVsgXHRdKiMuKlxuCWN1cnJlbnRfZmlsZS0+bGluZW5vKys7CitbIFx0XSojLipcbgl8CitbIFx0XSpcbgl7CisJY3VycmVudF9maWxlLT5saW5lbm8rKzsKKwlyZXR1cm4gVF9FT0w7Cit9CiBbIFx0XSojLioKIAotWyBcdF0qXG4JY3VycmVudF9maWxlLT5saW5lbm8rKzsgcmV0dXJuIFRfRU9MOwogCiBbIFx0XSsJewogCUJFR0lOKENPTU1BTkQpOwpAQCAtODgsNDIgKzk0LDI1IEBACiAKIAogPENPTU1BTkQ+ewotCSJtYWlubWVudSIJCUJFR0lOKFBBUkFNKTsgcmV0dXJuIFRfTUFJTk1FTlU7Ci0JIm1lbnUiCQkJQkVHSU4oUEFSQU0pOyByZXR1cm4gVF9NRU5VOwotCSJlbmRtZW51IgkJQkVHSU4oUEFSQU0pOyByZXR1cm4gVF9FTkRNRU5VOwotCSJzb3VyY2UiCQlCRUdJTihQQVJBTSk7IHJldHVybiBUX1NPVVJDRTsKLQkiY2hvaWNlIgkJQkVHSU4oUEFSQU0pOyByZXR1cm4gVF9DSE9JQ0U7Ci0JImVuZGNob2ljZSIJCUJFR0lOKFBBUkFNKTsgcmV0dXJuIFRfRU5EQ0hPSUNFOwotCSJjb21tZW50IgkJQkVHSU4oUEFSQU0pOyByZXR1cm4gVF9DT01NRU5UOwotCSJjb25maWciCQlCRUdJTihQQVJBTSk7IHJldHVybiBUX0NPTkZJRzsKLQkibWVudWNvbmZpZyIJCUJFR0lOKFBBUkFNKTsgcmV0dXJuIFRfTUVOVUNPTkZJRzsKLQkiaGVscCIJCQlCRUdJTihQQVJBTSk7IHJldHVybiBUX0hFTFA7Ci0JImlmIgkJCUJFR0lOKFBBUkFNKTsgcmV0dXJuIFRfSUY7Ci0JImVuZGlmIgkJCUJFR0lOKFBBUkFNKTsgcmV0dXJuIFRfRU5ESUY7Ci0JImRlcGVuZHMiCQlCRUdJTihQQVJBTSk7IHJldHVybiBUX0RFUEVORFM7Ci0JInJlcXVpcmVzIgkJQkVHSU4oUEFSQU0pOyByZXR1cm4gVF9SRVFVSVJFUzsKLQkib3B0aW9uYWwiCQlCRUdJTihQQVJBTSk7IHJldHVybiBUX09QVElPTkFMOwotCSJkZWZhdWx0IgkJQkVHSU4oUEFSQU0pOyByZXR1cm4gVF9ERUZBVUxUOwotCSJwcm9tcHQiCQlCRUdJTihQQVJBTSk7IHJldHVybiBUX1BST01QVDsKLQkidHJpc3RhdGUiCQlCRUdJTihQQVJBTSk7IHJldHVybiBUX1RSSVNUQVRFOwotCSJkZWZfdHJpc3RhdGUiCQlCRUdJTihQQVJBTSk7IHJldHVybiBUX0RFRl9UUklTVEFURTsKLQkiYm9vbCIJCQlCRUdJTihQQVJBTSk7IHJldHVybiBUX0JPT0xFQU47Ci0JImJvb2xlYW4iCQlCRUdJTihQQVJBTSk7IHJldHVybiBUX0JPT0xFQU47Ci0JImRlZl9ib29sIgkJQkVHSU4oUEFSQU0pOyByZXR1cm4gVF9ERUZfQk9PTEVBTjsKLQkiZGVmX2Jvb2xlYW4iCQlCRUdJTihQQVJBTSk7IHJldHVybiBUX0RFRl9CT09MRUFOOwotCSJpbnQiCQkJQkVHSU4oUEFSQU0pOyByZXR1cm4gVF9JTlQ7Ci0JImhleCIJCQlCRUdJTihQQVJBTSk7IHJldHVybiBUX0hFWDsKLQkic3RyaW5nIgkJQkVHSU4oUEFSQU0pOyByZXR1cm4gVF9TVFJJTkc7Ci0JInNlbGVjdCIJCUJFR0lOKFBBUkFNKTsgcmV0dXJuIFRfU0VMRUNUOwotCSJlbmFibGUiCQlCRUdJTihQQVJBTSk7IHJldHVybiBUX1NFTEVDVDsKLQkicmFuZ2UiCQkJQkVHSU4oUEFSQU0pOyByZXR1cm4gVF9SQU5HRTsKIAl7bn0rCXsKKwkJc3RydWN0IGtjb25mX2lkICppZCA9IGtjb25mX2lkX2xvb2t1cCh5eXRleHQsIHl5bGVuZyk7CisJCUJFR0lOKFBBUkFNKTsKKwkJY3VycmVudF9wb3MuZmlsZSA9IGN1cnJlbnRfZmlsZTsKKwkJY3VycmVudF9wb3MubGluZW5vID0gY3VycmVudF9maWxlLT5saW5lbm87CisJCWlmIChpZCAmJiBpZC0+ZmxhZ3MgJiBURl9DT01NQU5EKSB7CisJCQl6Y29uZmx2YWwuaWQgPSBpZDsKKwkJCXJldHVybiBpZC0+dG9rZW47CisJCX0KIAkJYWxsb2Nfc3RyaW5nKHl5dGV4dCwgeXlsZW5nKTsKIAkJemNvbmZsdmFsLnN0cmluZyA9IHRleHQ7CiAJCXJldHVybiBUX1dPUkQ7CiAJfQogCS4KLQlcbgljdXJyZW50X2ZpbGUtPmxpbmVubysrOyBCRUdJTihJTklUSUFMKTsKKwlcbgl7CisJCUJFR0lOKElOSVRJQUwpOworCQljdXJyZW50X2ZpbGUtPmxpbmVubysrOworCQlyZXR1cm4gVF9FT0w7CisJfQogfQogCiA8UEFSQU0+ewpAQCAtMTM0LDggKzEyMyw2IEBACiAJIiEiCXJldHVybiBUX05PVDsKIAkiPSIJcmV0dXJuIFRfRVFVQUw7CiAJIiE9IglyZXR1cm4gVF9VTkVRVUFMOwotCSJpZiIJcmV0dXJuIFRfSUY7Ci0JIm9uIglyZXR1cm4gVF9PTjsKIAlcInxcJwl7CiAJCXN0ciA9IHl5dGV4dFswXTsKIAkJbmV3X3N0cmluZygpOwpAQCAtMTQ0LDYgKzEzMSwxMSBAQAogCVxuCUJFR0lOKElOSVRJQUwpOyBjdXJyZW50X2ZpbGUtPmxpbmVubysrOyByZXR1cm4gVF9FT0w7CiAJLS0tCS8qIGlnbm9yZSAqLwogCSh7bn18Wy0vLl0pKwl7CisJCXN0cnVjdCBrY29uZl9pZCAqaWQgPSBrY29uZl9pZF9sb29rdXAoeXl0ZXh0LCB5eWxlbmcpOworCQlpZiAoaWQgJiYgaWQtPmZsYWdzICYgVEZfUEFSQU0pIHsKKwkJCXpjb25mbHZhbC5pZCA9IGlkOworCQkJcmV0dXJuIGlkLT50b2tlbjsKKwkJfQogCQlhbGxvY19zdHJpbmcoeXl0ZXh0LCB5eWxlbmcpOwogCQl6Y29uZmx2YWwuc3RyaW5nID0gdGV4dDsKIAkJcmV0dXJuIFRfV09SRDsKQEAgLTIzNiw5ICsyMjgsOSBAQAogfQogCiA8PEVPRj4+CXsKLQlpZiAoY3VycmVudF9idWYpIHsKKwlpZiAoY3VycmVudF9maWxlKSB7CiAJCXpjb25mX2VuZGZpbGUoKTsKLQkJcmV0dXJuIFRfRU9GOworCQlyZXR1cm4gVF9FT0w7CiAJfQogCWZjbG9zZSh5eWluKTsKIAl5eXRlcm1pbmF0ZSgpOwpAQCAtMzI5LDcgKzMyMSw3IEBACiAJY3VycmVudF9maWxlID0gZmlsZTsKIH0KIAotc3RhdGljIHN0cnVjdCBidWZmZXIgKnpjb25mX2VuZGZpbGUodm9pZCkKK3N0YXRpYyB2b2lkIHpjb25mX2VuZGZpbGUodm9pZCkKIHsKIAlzdHJ1Y3QgYnVmZmVyICpwYXJlbnQ7CiAKQEAgLTM0NSwyMiArMzM3LDE0IEBACiAJfQogCWZyZWUoY3VycmVudF9idWYpOwogCWN1cnJlbnRfYnVmID0gcGFyZW50OwotCi0JcmV0dXJuIHBhcmVudDsKIH0KIAogaW50IHpjb25mX2xpbmVubyh2b2lkKQogewotCWlmIChjdXJyZW50X2J1ZikKLQkJcmV0dXJuIGN1cnJlbnRfZmlsZS0+bGluZW5vIC0gMTsKLQllbHNlCi0JCXJldHVybiAwOworCXJldHVybiBjdXJyZW50X3Bvcy5saW5lbm87CiB9CiAKIGNoYXIgKnpjb25mX2N1cm5hbWUodm9pZCkKIHsKLQlpZiAoY3VycmVudF9idWYpCi0JCXJldHVybiBjdXJyZW50X2ZpbGUtPm5hbWU7Ci0JZWxzZQotCQlyZXR1cm4gIjxub25lPiI7CisJcmV0dXJuIGN1cnJlbnRfcG9zLmZpbGUgPyBjdXJyZW50X3Bvcy5maWxlLT5uYW1lIDogIjxub25lPiI7CiB9CmRpZmYgLS1naXQgYS9zY3JpcHRzL2tjb25maWcvemNvbmYudGFiLmNfc2hpcHBlZCBiL3NjcmlwdHMva2NvbmZpZy96Y29uZi50YWIuY19zaGlwcGVkCmluZGV4IGZmNGZjYzAuLmVhNzc1NWQgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy96Y29uZi50YWIuY19zaGlwcGVkCisrKyBiL3NjcmlwdHMva2NvbmZpZy96Y29uZi50YWIuY19zaGlwcGVkCkBAIC0xLDcgKzEsNyBAQAotLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDEuODc1YS4gICovCisvKiBBIEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMi4wLiAgKi8KIAogLyogU2tlbGV0b24gcGFyc2VyIGZvciBZYWNjLWxpa2UgcGFyc2luZyB3aXRoIEJpc29uLAotICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LCAxOTkwLCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LCAxOTkwLCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCiAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTQ1LDggKzQ1LDcgQEAKIC8qIFVzaW5nIGxvY2F0aW9ucy4gICovCiAjZGVmaW5lIFlZTFNQX05FRURFRCAwCiAKLS8qIElmIE5BTUVfUFJFRklYIGlzIHNwZWNpZmllZCBzdWJzdGl0dXRlIHRoZSB2YXJpYWJsZXMgYW5kIGZ1bmN0aW9ucwotICAgbmFtZXMuICAqLworLyogU3Vic3RpdHV0ZSB0aGUgdmFyaWFibGUgYW5kIGZ1bmN0aW9uIG5hbWVzLiAgKi8KICNkZWZpbmUgeXlwYXJzZSB6Y29uZnBhcnNlCiAjZGVmaW5lIHl5bGV4ICAgemNvbmZsZXgKICNkZWZpbmUgeXllcnJvciB6Y29uZmVycm9yCkBAIC03OSwyOCArNzgsMjEgQEAKICAgICAgVF9SRVFVSVJFUyA9IDI3MiwKICAgICAgVF9PUFRJT05BTCA9IDI3MywKICAgICAgVF9QUk9NUFQgPSAyNzQsCi0gICAgIFRfREVGQVVMVCA9IDI3NSwKLSAgICAgVF9UUklTVEFURSA9IDI3NiwKLSAgICAgVF9ERUZfVFJJU1RBVEUgPSAyNzcsCi0gICAgIFRfQk9PTEVBTiA9IDI3OCwKLSAgICAgVF9ERUZfQk9PTEVBTiA9IDI3OSwKLSAgICAgVF9TVFJJTkcgPSAyODAsCi0gICAgIFRfSU5UID0gMjgxLAotICAgICBUX0hFWCA9IDI4MiwKLSAgICAgVF9XT1JEID0gMjgzLAotICAgICBUX1dPUkRfUVVPVEUgPSAyODQsCi0gICAgIFRfVU5FUVVBTCA9IDI4NSwKLSAgICAgVF9FT0YgPSAyODYsCi0gICAgIFRfRU9MID0gMjg3LAotICAgICBUX0NMT1NFX1BBUkVOID0gMjg4LAotICAgICBUX09QRU5fUEFSRU4gPSAyODksCi0gICAgIFRfT04gPSAyOTAsCi0gICAgIFRfU0VMRUNUID0gMjkxLAotICAgICBUX1JBTkdFID0gMjkyLAotICAgICBUX09SID0gMjkzLAotICAgICBUX0FORCA9IDI5NCwKLSAgICAgVF9FUVVBTCA9IDI5NSwKLSAgICAgVF9OT1QgPSAyOTYKKyAgICAgVF9UWVBFID0gMjc1LAorICAgICBUX0RFRkFVTFQgPSAyNzYsCisgICAgIFRfU0VMRUNUID0gMjc3LAorICAgICBUX1JBTkdFID0gMjc4LAorICAgICBUX09OID0gMjc5LAorICAgICBUX1dPUkQgPSAyODAsCisgICAgIFRfV09SRF9RVU9URSA9IDI4MSwKKyAgICAgVF9VTkVRVUFMID0gMjgyLAorICAgICBUX0NMT1NFX1BBUkVOID0gMjgzLAorICAgICBUX09QRU5fUEFSRU4gPSAyODQsCisgICAgIFRfRU9MID0gMjg1LAorICAgICBUX09SID0gMjg2LAorICAgICBUX0FORCA9IDI4NywKKyAgICAgVF9FUVVBTCA9IDI4OCwKKyAgICAgVF9OT1QgPSAyODkKICAgIH07CiAjZW5kaWYKICNkZWZpbmUgVF9NQUlOTUVOVSAyNTgKQEAgLTEyMCwyOCArMTEyLDIxIEBACiAjZGVmaW5lIFRfUkVRVUlSRVMgMjcyCiAjZGVmaW5lIFRfT1BUSU9OQUwgMjczCiAjZGVmaW5lIFRfUFJPTVBUIDI3NAotI2RlZmluZSBUX0RFRkFVTFQgMjc1Ci0jZGVmaW5lIFRfVFJJU1RBVEUgMjc2Ci0jZGVmaW5lIFRfREVGX1RSSVNUQVRFIDI3NwotI2RlZmluZSBUX0JPT0xFQU4gMjc4Ci0jZGVmaW5lIFRfREVGX0JPT0xFQU4gMjc5Ci0jZGVmaW5lIFRfU1RSSU5HIDI4MAotI2RlZmluZSBUX0lOVCAyODEKLSNkZWZpbmUgVF9IRVggMjgyCi0jZGVmaW5lIFRfV09SRCAyODMKLSNkZWZpbmUgVF9XT1JEX1FVT1RFIDI4NAotI2RlZmluZSBUX1VORVFVQUwgMjg1Ci0jZGVmaW5lIFRfRU9GIDI4NgotI2RlZmluZSBUX0VPTCAyODcKLSNkZWZpbmUgVF9DTE9TRV9QQVJFTiAyODgKLSNkZWZpbmUgVF9PUEVOX1BBUkVOIDI4OQotI2RlZmluZSBUX09OIDI5MAotI2RlZmluZSBUX1NFTEVDVCAyOTEKLSNkZWZpbmUgVF9SQU5HRSAyOTIKLSNkZWZpbmUgVF9PUiAyOTMKLSNkZWZpbmUgVF9BTkQgMjk0Ci0jZGVmaW5lIFRfRVFVQUwgMjk1Ci0jZGVmaW5lIFRfTk9UIDI5NgorI2RlZmluZSBUX1RZUEUgMjc1CisjZGVmaW5lIFRfREVGQVVMVCAyNzYKKyNkZWZpbmUgVF9TRUxFQ1QgMjc3CisjZGVmaW5lIFRfUkFOR0UgMjc4CisjZGVmaW5lIFRfT04gMjc5CisjZGVmaW5lIFRfV09SRCAyODAKKyNkZWZpbmUgVF9XT1JEX1FVT1RFIDI4MQorI2RlZmluZSBUX1VORVFVQUwgMjgyCisjZGVmaW5lIFRfQ0xPU0VfUEFSRU4gMjgzCisjZGVmaW5lIFRfT1BFTl9QQVJFTiAyODQKKyNkZWZpbmUgVF9FT0wgMjg1CisjZGVmaW5lIFRfT1IgMjg2CisjZGVmaW5lIFRfQU5EIDI4NworI2RlZmluZSBUX0VRVUFMIDI4OAorI2RlZmluZSBUX05PVCAyODkKIAogCiAKQEAgLTE2MSw2ICsxNDYsMTEgQEAKICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDxzdGRib29sLmg+CiAKKyNkZWZpbmUgTEtDX0RJUkVDVF9MSU5LCisjaW5jbHVkZSAibGtjLmgiCisKKyNpbmNsdWRlICJ6Y29uZi5oYXNoLmMiCisKICNkZWZpbmUgcHJpbnRkKG1hc2ssIGZtdC4uLikgaWYgKGNkZWJ1ZyAmIChtYXNrKSkgcHJpbnRmKGZtdCkKIAogI2RlZmluZSBQUklOVEQJCTB4MDAwMQpAQCAtMTcwLDE0ICsxNjAsMTggQEAKIAogZXh0ZXJuIGludCB6Y29uZmxleCh2b2lkKTsKIHN0YXRpYyB2b2lkIHpjb25mcHJpbnQoY29uc3QgY2hhciAqZXJyLCAuLi4pOworc3RhdGljIHZvaWQgemNvbmZfZXJyb3IoY29uc3QgY2hhciAqZXJyLCAuLi4pOwogc3RhdGljIHZvaWQgemNvbmZlcnJvcihjb25zdCBjaGFyICplcnIpOwotc3RhdGljIGJvb2wgemNvbmZfZW5kdG9rZW4oaW50IHRva2VuLCBpbnQgc3RhcnR0b2tlbiwgaW50IGVuZHRva2VuKTsKK3N0YXRpYyBib29sIHpjb25mX2VuZHRva2VuKHN0cnVjdCBrY29uZl9pZCAqaWQsIGludCBzdGFydHRva2VuLCBpbnQgZW5kdG9rZW4pOwogCiBzdHJ1Y3Qgc3ltYm9sICpzeW1ib2xfaGFzaFsyNTddOwogCiBzdGF0aWMgc3RydWN0IG1lbnUgKmN1cnJlbnRfbWVudSwgKmN1cnJlbnRfZW50cnk7CiAKKyNkZWZpbmUgWVlERUJVRyAwCisjaWYgWVlERUJVRwogI2RlZmluZSBZWUVSUk9SX1ZFUkJPU0UKKyNlbmRpZgogCiAKIC8qIEVuYWJsaW5nIHRyYWNlcy4gICovCkBAIC0xOTYsMTMgKzE5MCwxNCBAQAogI2lmICEgZGVmaW5lZCAoWVlTVFlQRSkgJiYgISBkZWZpbmVkIChZWVNUWVBFX0lTX0RFQ0xBUkVEKQogCiB0eXBlZGVmIHVuaW9uIFlZU1RZUEUgewotCWludCB0b2tlbjsKIAljaGFyICpzdHJpbmc7CisJc3RydWN0IGZpbGUgKmZpbGU7CiAJc3RydWN0IHN5bWJvbCAqc3ltYm9sOwogCXN0cnVjdCBleHByICpleHByOwogCXN0cnVjdCBtZW51ICptZW51OworCXN0cnVjdCBrY29uZl9pZCAqaWQ7CiB9IFlZU1RZUEU7Ci0vKiBMaW5lIDE5MSBvZiB5YWNjLmMuICAqLworLyogTGluZSAxOTAgb2YgeWFjYy5jLiAgKi8KIAogIyBkZWZpbmUgeXlzdHlwZSBZWVNUWVBFIC8qIG9ic29sZXNjZW50OyB3aWxsIGJlIHdpdGhkcmF3biAqLwogIyBkZWZpbmUgWVlTVFlQRV9JU19ERUNMQVJFRCAxCkBAIC0yMTQsMjcgKzIwOSwyNiBAQAogLyogQ29weSB0aGUgc2Vjb25kIHBhcnQgb2YgdXNlciBkZWNsYXJhdGlvbnMuICAqLwogCiAKLSNkZWZpbmUgTEtDX0RJUkVDVF9MSU5LCi0jaW5jbHVkZSAibGtjLmgiCi0KLQotLyogTGluZSAyMTQgb2YgeWFjYy5jLiAgKi8KKy8qIExpbmUgMjEzIG9mIHlhY2MuYy4gICovCiAKIAogI2lmICEgZGVmaW5lZCAoeXlvdmVyZmxvdykgfHwgWVlFUlJPUl9WRVJCT1NFCiAKKyMgaWZuZGVmIFlZRlJFRQorIyAgZGVmaW5lIFlZRlJFRSBmcmVlCisjIGVuZGlmCisjIGlmbmRlZiBZWU1BTExPQworIyAgZGVmaW5lIFlZTUFMTE9DIG1hbGxvYworIyBlbmRpZgorCiAvKiBUaGUgcGFyc2VyIGludm9rZXMgYWxsb2NhIG9yIG1hbGxvYzsgZGVmaW5lIHRoZSBuZWNlc3Nhcnkgc3ltYm9scy4gICovCiAKLSMgaWYgWVlTVEFDS19VU0VfQUxMT0NBCi0jICBkZWZpbmUgWVlTVEFDS19BTExPQyBhbGxvY2EKLSMgZWxzZQotIyAgaWZuZGVmIFlZU1RBQ0tfVVNFX0FMTE9DQQotIyAgIGlmIGRlZmluZWQgKGFsbG9jYSkgfHwgZGVmaW5lZCAoX0FMTE9DQV9IKQotIyAgICBkZWZpbmUgWVlTVEFDS19BTExPQyBhbGxvY2EKKyMgaWZkZWYgWVlTVEFDS19VU0VfQUxMT0NBCisjICBpZiBZWVNUQUNLX1VTRV9BTExPQ0EKKyMgICBpZmRlZiBfX0dOVUNfXworIyAgICBkZWZpbmUgWVlTVEFDS19BTExPQyBfX2J1aWx0aW5fYWxsb2NhCiAjICAgZWxzZQotIyAgICBpZmRlZiBfX0dOVUNfXwotIyAgICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgX19idWlsdGluX2FsbG9jYQotIyAgICBlbmRpZgorIyAgICBkZWZpbmUgWVlTVEFDS19BTExPQyBhbGxvY2EKICMgICBlbmRpZgogIyAgZW5kaWYKICMgZW5kaWYKQEAgLTI0NywyMCArMjQxLDIwIEBACiAjICAgaW5jbHVkZSA8c3RkbGliLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KICMgICBkZWZpbmUgWVlTSVpFX1Qgc2l6ZV90CiAjICBlbmRpZgotIyAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgbWFsbG9jCi0jICBkZWZpbmUgWVlTVEFDS19GUkVFIGZyZWUKKyMgIGRlZmluZSBZWVNUQUNLX0FMTE9DIFlZTUFMTE9DCisjICBkZWZpbmUgWVlTVEFDS19GUkVFIFlZRlJFRQogIyBlbmRpZgogI2VuZGlmIC8qICEgZGVmaW5lZCAoeXlvdmVyZmxvdykgfHwgWVlFUlJPUl9WRVJCT1NFICovCiAKIAogI2lmICghIGRlZmluZWQgKHl5b3ZlcmZsb3cpIFwKICAgICAgJiYgKCEgZGVmaW5lZCAoX19jcGx1c3BsdXMpIFwKLQkgfHwgKFlZU1RZUEVfSVNfVFJJVklBTCkpKQorCSB8fCAoZGVmaW5lZCAoWVlTVFlQRV9JU19UUklWSUFMKSAmJiBZWVNUWVBFX0lTX1RSSVZJQUwpKSkKIAogLyogQSB0eXBlIHRoYXQgaXMgcHJvcGVybHkgYWxpZ25lZCBmb3IgYW55IHN0YWNrIG1lbWJlci4gICovCiB1bmlvbiB5eWFsbG9jCiB7Ci0gIHNob3J0IHl5c3M7CisgIHNob3J0IGludCB5eXNzOwogICBZWVNUWVBFIHl5dnM7CiAgIH07CiAKQEAgLTI3MCwxMyArMjY0LDEzIEBACiAvKiBUaGUgc2l6ZSBvZiBhbiBhcnJheSBsYXJnZSB0byBlbm91Z2ggdG8gaG9sZCBhbGwgc3RhY2tzLCBlYWNoIHdpdGgKICAgIE4gZWxlbWVudHMuICAqLwogIyBkZWZpbmUgWVlTVEFDS19CWVRFUyhOKSBcCi0gICAgICgoTikgKiAoc2l6ZW9mIChzaG9ydCkgKyBzaXplb2YgKFlZU1RZUEUpKQkJCQlcCisgICAgICgoTikgKiAoc2l6ZW9mIChzaG9ydCBpbnQpICsgc2l6ZW9mIChZWVNUWVBFKSkJCQlcCiAgICAgICArIFlZU1RBQ0tfR0FQX01BWElNVU0pCiAKIC8qIENvcHkgQ09VTlQgb2JqZWN0cyBmcm9tIEZST00gdG8gVE8uICBUaGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBkbwogICAgbm90IG92ZXJsYXAuICAqLwogIyBpZm5kZWYgWVlDT1BZCi0jICBpZiAxIDwgX19HTlVDX18KKyMgIGlmIGRlZmluZWQgKF9fR05VQ19fKSAmJiAxIDwgX19HTlVDX18KICMgICBkZWZpbmUgWVlDT1BZKFRvLCBGcm9tLCBDb3VudCkgXAogICAgICAgX19idWlsdGluX21lbWNweSAoVG8sIEZyb20sIChDb3VudCkgKiBzaXplb2YgKCooRnJvbSkpKQogIyAgZWxzZQpAQCAtMzEyLDI2ICszMDYsMjYgQEAKICNpZiBkZWZpbmVkIChfX1NURENfXykgfHwgZGVmaW5lZCAoX19jcGx1c3BsdXMpCiAgICB0eXBlZGVmIHNpZ25lZCBjaGFyIHl5c2lnbmVkX2NoYXI7CiAjZWxzZQotICAgdHlwZWRlZiBzaG9ydCB5eXNpZ25lZF9jaGFyOworICAgdHlwZWRlZiBzaG9ydCBpbnQgeXlzaWduZWRfY2hhcjsKICNlbmRpZgogCiAvKiBZWUZJTkFMIC0tIFN0YXRlIG51bWJlciBvZiB0aGUgdGVybWluYXRpb24gc3RhdGUuICovCi0jZGVmaW5lIFlZRklOQUwgIDIKKyNkZWZpbmUgWVlGSU5BTCAgMwogLyogWVlMQVNUIC0tIExhc3QgaW5kZXggaW4gWVlUQUJMRS4gICovCi0jZGVmaW5lIFlZTEFTVCAgIDIwMQorI2RlZmluZSBZWUxBU1QgICAyNjQKIAogLyogWVlOVE9LRU5TIC0tIE51bWJlciBvZiB0ZXJtaW5hbHMuICovCi0jZGVmaW5lIFlZTlRPS0VOUyAgNDIKKyNkZWZpbmUgWVlOVE9LRU5TICAzNQogLyogWVlOTlRTIC0tIE51bWJlciBvZiBub250ZXJtaW5hbHMuICovCi0jZGVmaW5lIFlZTk5UUyAgNDEKKyNkZWZpbmUgWVlOTlRTICA0MgogLyogWVlOUlVMRVMgLS0gTnVtYmVyIG9mIHJ1bGVzLiAqLwogI2RlZmluZSBZWU5SVUxFUyAgMTA0CiAvKiBZWU5SVUxFUyAtLSBOdW1iZXIgb2Ygc3RhdGVzLiAqLwotI2RlZmluZSBZWU5TVEFURVMgIDE4MgorI2RlZmluZSBZWU5TVEFURVMgIDE3NQogCiAvKiBZWVRSQU5TTEFURShZWUxFWCkgLS0gQmlzb24gc3ltYm9sIG51bWJlciBjb3JyZXNwb25kaW5nIHRvIFlZTEVYLiAgKi8KICNkZWZpbmUgWVlVTkRFRlRPSyAgMgotI2RlZmluZSBZWU1BWFVUT0sgICAyOTYKKyNkZWZpbmUgWVlNQVhVVE9LICAgMjg5CiAKICNkZWZpbmUgWVlUUkFOU0xBVEUoWVlYKSAJCQkJCQlcCiAgICgodW5zaWduZWQgaW50KSAoWVlYKSA8PSBZWU1BWFVUT0sgPyB5eXRyYW5zbGF0ZVtZWVhdIDogWVlVTkRFRlRPSykKQEAgLTM2Nyw3OSArMzYxLDc4IEBACiAgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMSwgICAgIDIsICAgICAzLCAgICAgNCwKICAgICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LAogICAgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsCi0gICAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwKLSAgICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxCisgICAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNAogfTsKIAogI2lmIFlZREVCVUcKIC8qIFlZUFJIU1tZWU5dIC0tIEluZGV4IG9mIHRoZSBmaXJzdCBSSFMgc3ltYm9sIG9mIHJ1bGUgbnVtYmVyIFlZTiBpbgogICAgWVlSSFMuICAqLwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IHl5cHJoc1tdID0KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBpbnQgeXlwcmhzW10gPQogewotICAgICAgIDAsICAgICAwLCAgICAgMywgICAgIDQsICAgICA3LCAgICAgOSwgICAgMTEsICAgIDEzLCAgICAxNywgICAgMTksCi0gICAgICAyMSwgICAgMjMsICAgIDI2LCAgICAyOCwgICAgMzAsICAgIDMyLCAgICAzNCwgICAgMzYsICAgIDM4LCAgICA0MiwKLSAgICAgIDQ1LCAgICA0OSwgICAgNTIsICAgIDUzLCAgICA1NiwgICAgNTksICAgIDYyLCAgICA2NSwgICAgNjksICAgIDc0LAotICAgICAgNzgsICAgIDgzLCAgICA4NywgICAgOTEsICAgIDk1LCAgIDEwMCwgICAxMDUsICAgMTEwLCAgIDExNiwgICAxMTksCi0gICAgIDEyMiwgICAxMjQsICAgMTI4LCAgIDEzMSwgICAxMzIsICAgMTM1LCAgIDEzOCwgICAxNDEsICAgMTQ0LCAgIDE0OSwKLSAgICAgMTUzLCAgIDE1NywgICAxNjAsICAgMTY1LCAgIDE2NiwgICAxNjksICAgMTczLCAgIDE3NSwgICAxNzksICAgMTgyLAotICAgICAxODMsICAgMTg2LCAgIDE4OSwgICAxOTIsICAgMTk2LCAgIDE5OSwgICAyMDEsICAgMjA1LCAgIDIwOCwgICAyMDksCi0gICAgIDIxMiwgICAyMTUsICAgMjE4LCAgIDIyMiwgICAyMjYsICAgMjI4LCAgIDIzMiwgICAyMzUsICAgMjM4LCAgIDI0MSwKLSAgICAgMjQyLCAgIDI0NSwgICAyNDgsICAgMjUzLCAgIDI1NywgICAyNjEsICAgMjYyLCAgIDI2NSwgICAyNjcsICAgMjY5LAotICAgICAyNzIsICAgMjc1LCAgIDI3OCwgICAyODAsICAgMjgyLCAgIDI4MywgICAyODYsICAgMjg4LCAgIDI5MiwgICAyOTYsCi0gICAgIDMwMCwgICAzMDMsICAgMzA3LCAgIDMxMSwgICAzMTMKKyAgICAgICAwLCAgICAgMCwgICAgIDMsICAgICA1LCAgICAgNiwgICAgIDksICAgIDEyLCAgICAxNSwgICAgMjAsICAgIDIzLAorICAgICAgMjgsICAgIDMzLCAgICAzNywgICAgMzksICAgIDQxLCAgICA0MywgICAgNDUsICAgIDQ3LCAgICA0OSwgICAgNTEsCisgICAgICA1MywgICAgNTUsICAgIDU3LCAgICA1OSwgICAgNjEsICAgIDYzLCAgICA2NywgICAgNzAsICAgIDc0LCAgICA3NywKKyAgICAgIDgxLCAgICA4NCwgICAgODUsICAgIDg4LCAgICA5MSwgICAgOTQsICAgIDk3LCAgIDEwMCwgICAxMDQsICAgMTA5LAorICAgICAxMTQsICAgMTE5LCAgIDEyNSwgICAxMjgsICAgMTMxLCAgIDEzMywgICAxMzcsICAgMTM4LCAgIDE0MSwgICAxNDQsCisgICAgIDE0NywgICAxNTAsICAgMTUzLCAgIDE1OCwgICAxNjIsICAgMTY1LCAgIDE3MCwgICAxNzEsICAgMTc0LCAgIDE3OCwKKyAgICAgMTgwLCAgIDE4NCwgICAxODUsICAgMTg4LCAgIDE5MSwgICAxOTQsICAgMTk4LCAgIDIwMSwgICAyMDMsICAgMjA3LAorICAgICAyMDgsICAgMjExLCAgIDIxNCwgICAyMTcsICAgMjIxLCAgIDIyNSwgICAyMjgsICAgMjMxLCAgIDIzNCwgICAyMzUsCisgICAgIDIzOCwgICAyNDEsICAgMjQ0LCAgIDI0OSwgICAyNTMsICAgMjU3LCAgIDI1OCwgICAyNjEsICAgMjYzLCAgIDI2NSwKKyAgICAgMjY4LCAgIDI3MSwgICAyNzQsICAgMjc2LCAgIDI3OSwgICAyODAsICAgMjgzLCAgIDI4NSwgICAyODksICAgMjkzLAorICAgICAyOTcsICAgMzAwLCAgIDMwNCwgICAzMDgsICAgMzEwCiB9OwogCiAvKiBZWVJIUyAtLSBBIGAtMSctc2VwYXJhdGVkIGxpc3Qgb2YgdGhlIHJ1bGVzJyBSSFMuICovCiBzdGF0aWMgY29uc3QgeXlzaWduZWRfY2hhciB5eXJoc1tdID0KIHsKLSAgICAgIDQzLCAgICAgMCwgICAgLTEsICAgIC0xLCAgICA0MywgICAgNDQsICAgIC0xLCAgICA0NSwgICAgLTEsICAgIDU1LAotICAgICAgLTEsICAgIDY2LCAgICAtMSwgICAgIDMsICAgIDc3LCAgICA3OSwgICAgLTEsICAgICA1LCAgICAtMSwgICAgMTUsCi0gICAgICAtMSwgICAgIDgsICAgIC0xLCAgICAgMSwgICAgNzksICAgIC0xLCAgICA2MSwgICAgLTEsICAgIDcxLCAgICAtMSwKLSAgICAgIDQ3LCAgICAtMSwgICAgNDksICAgIC0xLCAgICA2OSwgICAgLTEsICAgIDc5LCAgICAtMSwgICAgMTAsICAgIDI4LAotICAgICAgMzIsICAgIC0xLCAgICA0NiwgICAgNTAsICAgIC0xLCAgICAxMSwgICAgMjgsICAgIDMyLCAgICAtMSwgICAgNDgsCi0gICAgICA1MCwgICAgLTEsICAgIC0xLCAgICA1MCwgICAgNTEsICAgIC0xLCAgICA1MCwgICAgNzUsICAgIC0xLCAgICA1MCwKLSAgICAgIDczLCAgICAtMSwgICAgNTAsICAgIDMyLCAgICAtMSwgICAgMjEsICAgIDc2LCAgICAzMiwgICAgLTEsICAgIDIyLAotICAgICAgODEsICAgIDgwLCAgICAzMiwgICAgLTEsICAgIDIzLCAgICA3NiwgICAgMzIsICAgIC0xLCAgICAyNCwgICAgODEsCi0gICAgICA4MCwgICAgMzIsICAgIC0xLCAgICAyNiwgICAgNzYsICAgIDMyLCAgICAtMSwgICAgMjcsICAgIDc2LCAgICAzMiwKLSAgICAgIC0xLCAgICAyNSwgICAgNzYsICAgIDMyLCAgICAtMSwgICAgMTksICAgIDc3LCAgICA4MCwgICAgMzIsICAgIC0xLAotICAgICAgMjAsICAgIDgxLCAgICA4MCwgICAgMzIsICAgIC0xLCAgICAzNiwgICAgMjgsICAgIDgwLCAgICAzMiwgICAgLTEsCi0gICAgICAzNywgICAgODIsICAgIDgyLCAgICA4MCwgICAgMzIsICAgIC0xLCAgICAgNywgICAgMzIsICAgIC0xLCAgICA1MiwKLSAgICAgIDU2LCAgICAtMSwgICAgNzgsICAgIC0xLCAgICA1MywgICAgNTgsICAgIDU0LCAgICAtMSwgICAgNTMsICAgIDU4LAotICAgICAgLTEsICAgIC0xLCAgICA1NiwgICAgNTcsICAgIC0xLCAgICA1NiwgICAgNzUsICAgIC0xLCAgICA1NiwgICAgNzMsCi0gICAgICAtMSwgICAgNTYsICAgIDMyLCAgICAtMSwgICAgMTksICAgIDc3LCAgICA4MCwgICAgMzIsICAgIC0xLCAgICAyMSwKLSAgICAgIDc2LCAgICAzMiwgICAgLTEsICAgIDIzLCAgICA3NiwgICAgMzIsICAgIC0xLCAgICAxOCwgICAgMzIsICAgIC0xLAotICAgICAgMjAsICAgIDI4LCAgICA4MCwgICAgMzIsICAgIC0xLCAgICAtMSwgICAgNTgsICAgIDQ1LCAgICAtMSwgICAgMTQsCi0gICAgICA4MSwgICAgMzIsICAgIC0xLCAgICA3OCwgICAgLTEsICAgIDU5LCAgICA2MiwgICAgNjAsICAgIC0xLCAgICA1OSwKLSAgICAgIDYyLCAgICAtMSwgICAgLTEsICAgIDYyLCAgICA0NSwgICAgLTEsICAgIDYyLCAgICA2NiwgICAgLTEsICAgIDYyLAotICAgICAgNTUsICAgIC0xLCAgICAgNCwgICAgNzcsICAgIDMyLCAgICAtMSwgICAgNjMsICAgIDc0LCAgICAtMSwgICAgNzgsCi0gICAgICAtMSwgICAgNjQsICAgIDY3LCAgICA2NSwgICAgLTEsICAgIDY0LCAgICA2NywgICAgLTEsICAgIC0xLCAgICA2NywKLSAgICAgIDQ1LCAgICAtMSwgICAgNjcsICAgIDY2LCAgICAtMSwgICAgNjcsICAgIDU1LCAgICAtMSwgICAgNjcsICAgICAxLAotICAgICAgMzIsICAgIC0xLCAgICAgNiwgICAgNzcsICAgIDMyLCAgICAtMSwgICAgNjgsICAgIC0xLCAgICAgOSwgICAgNzcsCi0gICAgICAzMiwgICAgLTEsICAgIDcwLCAgICA3NCwgICAgLTEsICAgIDEyLCAgICAzMiwgICAgLTEsICAgIDcyLCAgICAxMywKLSAgICAgIC0xLCAgICAtMSwgICAgNzQsICAgIDc1LCAgICAtMSwgICAgNzQsICAgIDMyLCAgICAtMSwgICAgMTYsICAgIDM1LAotICAgICAgODEsICAgIDMyLCAgICAtMSwgICAgMTYsICAgIDgxLCAgICAzMiwgICAgLTEsICAgIDE3LCAgICA4MSwgICAgMzIsCi0gICAgICAtMSwgICAgLTEsICAgIDc3LCAgICA4MCwgICAgLTEsICAgIDI4LCAgICAtMSwgICAgMjksICAgIC0xLCAgICAgNSwKLSAgICAgIDc5LCAgICAtMSwgICAgIDgsICAgIDc5LCAgICAtMSwgICAgMTUsICAgIDc5LCAgICAtMSwgICAgMzIsICAgIC0xLAotICAgICAgMzEsICAgIC0xLCAgICAtMSwgICAgMTQsICAgIDgxLCAgICAtMSwgICAgODIsICAgIC0xLCAgICA4MiwgICAgNDAsCi0gICAgICA4MiwgICAgLTEsICAgIDgyLCAgICAzMCwgICAgODIsICAgIC0xLCAgICAzNCwgICAgODEsICAgIDMzLCAgICAtMSwKLSAgICAgIDQxLCAgICA4MSwgICAgLTEsICAgIDgxLCAgICAzOCwgICAgODEsICAgIC0xLCAgICA4MSwgICAgMzksICAgIDgxLAotICAgICAgLTEsICAgIDI4LCAgICAtMSwgICAgMjksICAgIC0xCisgICAgICAzNiwgICAgIDAsICAgIC0xLCAgICAzNywgICAgLTEsICAgIC0xLCAgICAzNywgICAgMzksICAgIC0xLCAgICAzNywKKyAgICAgIDUwLCAgICAtMSwgICAgMzcsICAgIDYxLCAgICAtMSwgICAgMzcsICAgICAzLCAgICA3MSwgICAgNzMsICAgIC0xLAorICAgICAgMzcsICAgIDcyLCAgICAtMSwgICAgMzcsICAgIDI1LCAgICAgMSwgICAgMzAsICAgIC0xLCAgICAzNywgICAgMzgsCisgICAgICAgMSwgICAgMzAsICAgIC0xLCAgICAzNywgICAgIDEsICAgIDMwLCAgICAtMSwgICAgMTYsICAgIC0xLCAgICAxOSwKKyAgICAgIC0xLCAgICAyMCwgICAgLTEsICAgIDIyLCAgICAtMSwgICAgMTgsICAgIC0xLCAgICAyMywgICAgLTEsICAgIDIxLAorICAgICAgLTEsICAgIDMwLCAgICAtMSwgICAgNTYsICAgIC0xLCAgICA2NSwgICAgLTEsICAgIDQyLCAgICAtMSwgICAgNDQsCisgICAgICAtMSwgICAgNjMsICAgIC0xLCAgICAyNSwgICAgIDEsICAgIDMwLCAgICAtMSwgICAgIDEsICAgIDMwLCAgICAtMSwKKyAgICAgIDEwLCAgICAyNSwgICAgMzAsICAgIC0xLCAgICA0MSwgICAgNDUsICAgIC0xLCAgICAxMSwgICAgMjUsICAgIDMwLAorICAgICAgLTEsICAgIDQzLCAgICA0NSwgICAgLTEsICAgIC0xLCAgICA0NSwgICAgNDYsICAgIC0xLCAgICA0NSwgICAgNjksCisgICAgICAtMSwgICAgNDUsICAgIDY3LCAgICAtMSwgICAgNDUsICAgIDQwLCAgICAtMSwgICAgNDUsICAgIDMwLCAgICAtMSwKKyAgICAgIDIwLCAgICA3MCwgICAgMzAsICAgIC0xLCAgICAxOSwgICAgNzEsICAgIDc0LCAgICAzMCwgICAgLTEsICAgIDIxLAorICAgICAgNzUsICAgIDc0LCAgICAzMCwgICAgLTEsICAgIDIyLCAgICAyNSwgICAgNzQsICAgIDMwLCAgICAtMSwgICAgMjMsCisgICAgICA3NiwgICAgNzYsICAgIDc0LCAgICAzMCwgICAgLTEsICAgICA3LCAgICAzMCwgICAgLTEsICAgIDQ3LCAgICA1MSwKKyAgICAgIC0xLCAgICA3MiwgICAgLTEsICAgIDQ4LCAgICA1MywgICAgNDksICAgIC0xLCAgICAtMSwgICAgNTEsICAgIDUyLAorICAgICAgLTEsICAgIDUxLCAgICA2OSwgICAgLTEsICAgIDUxLCAgICA2NywgICAgLTEsICAgIDUxLCAgICAzMCwgICAgLTEsCisgICAgICA1MSwgICAgNDAsICAgIC0xLCAgICAxOSwgICAgNzEsICAgIDc0LCAgICAzMCwgICAgLTEsICAgIDIwLCAgICA3MCwKKyAgICAgIDMwLCAgICAtMSwgICAgMTgsICAgIDMwLCAgICAtMSwgICAgMjEsICAgIDI1LCAgICA3NCwgICAgMzAsICAgIC0xLAorICAgICAgLTEsICAgIDUzLCAgICAzOSwgICAgLTEsICAgIDE0LCAgICA3NSwgICAgNzMsICAgIC0xLCAgICA3MiwgICAgLTEsCisgICAgICA1NCwgICAgNTcsICAgIDU1LCAgICAtMSwgICAgLTEsICAgIDU3LCAgICAzOSwgICAgLTEsICAgIDU3LCAgICA2MSwKKyAgICAgIC0xLCAgICA1NywgICAgNTAsICAgIC0xLCAgICAgNCwgICAgNzEsICAgIDMwLCAgICAtMSwgICAgNTgsICAgIDY4LAorICAgICAgLTEsICAgIDcyLCAgICAtMSwgICAgNTksICAgIDYyLCAgICA2MCwgICAgLTEsICAgIC0xLCAgICA2MiwgICAgMzksCisgICAgICAtMSwgICAgNjIsICAgIDYxLCAgICAtMSwgICAgNjIsICAgIDUwLCAgICAtMSwgICAgIDYsICAgIDcxLCAgICAzMCwKKyAgICAgIC0xLCAgICAgOSwgICAgNzEsICAgIDMwLCAgICAtMSwgICAgNjQsICAgIDY4LCAgICAtMSwgICAgMTIsICAgIDMwLAorICAgICAgLTEsICAgIDY2LCAgICAxMywgICAgLTEsICAgIC0xLCAgICA2OCwgICAgNjksICAgIC0xLCAgICA2OCwgICAgMzAsCisgICAgICAtMSwgICAgNjgsICAgIDQwLCAgICAtMSwgICAgMTYsICAgIDI0LCAgICA3NSwgICAgMzAsICAgIC0xLCAgICAxNiwKKyAgICAgIDc1LCAgICAzMCwgICAgLTEsICAgIDE3LCAgICA3NSwgICAgMzAsICAgIC0xLCAgICAtMSwgICAgNzEsICAgIDc0LAorICAgICAgLTEsICAgIDI1LCAgICAtMSwgICAgMjYsICAgIC0xLCAgICAgNSwgICAgMzAsICAgIC0xLCAgICAgOCwgICAgMzAsCisgICAgICAtMSwgICAgMTUsICAgIDMwLCAgICAtMSwgICAgMzAsICAgIC0xLCAgICA3MywgICAgMzAsICAgIC0xLCAgICAtMSwKKyAgICAgIDE0LCAgICA3NSwgICAgLTEsICAgIDc2LCAgICAtMSwgICAgNzYsICAgIDMzLCAgICA3NiwgICAgLTEsICAgIDc2LAorICAgICAgMjcsICAgIDc2LCAgICAtMSwgICAgMjksICAgIDc1LCAgICAyOCwgICAgLTEsICAgIDM0LCAgICA3NSwgICAgLTEsCisgICAgICA3NSwgICAgMzEsICAgIDc1LCAgICAtMSwgICAgNzUsICAgIDMyLCAgICA3NSwgICAgLTEsICAgIDI1LCAgICAtMSwKKyAgICAgIDI2LCAgICAtMQogfTsKIAogLyogWVlSTElORVtZWU5dIC0tIHNvdXJjZSBsaW5lIHdoZXJlIHJ1bGUgbnVtYmVyIFlZTiB3YXMgZGVmaW5lZC4gICovCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgeXlybGluZVtdID0KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBpbnQgeXlybGluZVtdID0KIHsKLSAgICAgICAwLCAgICA5NCwgICAgOTQsICAgIDk1LCAgICA5OCwgICAgOTksICAgMTAwLCAgIDEwMSwgICAxMDIsICAgMTAzLAotICAgICAxMDQsICAgMTA1LCAgIDEwOSwgICAxMTAsICAgMTExLCAgIDExMiwgICAxMTMsICAgMTE0LCAgIDEyMCwgICAxMjgsCi0gICAgIDEzNCwgICAxNDIsICAgMTUyLCAgIDE1NCwgICAxNTUsICAgMTU2LCAgIDE1NywgICAxNjAsICAgMTY2LCAgIDE3MywKLSAgICAgMTc5LCAgIDE4NiwgICAxOTIsICAgMTk4LCAgIDIwNCwgICAyMTAsICAgMjE2LCAgIDIyMiwgICAyMzAsICAgMjM5LAotICAgICAyNDUsICAgMjU0LCAgIDI1NSwgICAyNjEsICAgMjYzLCAgIDI2NCwgICAyNjUsICAgMjY2LCAgIDI2OSwgICAyNzUsCi0gICAgIDI4MSwgICAyODcsICAgMjkzLCAgIDI5OSwgICAzMDEsICAgMzA2LCAgIDMxNSwgICAzMjQsICAgMzI1LCAgIDMzMSwKLSAgICAgMzMzLCAgIDMzNCwgICAzMzUsICAgMzQwLCAgIDM0NywgICAzNTMsICAgMzYyLCAgIDM2MywgICAzNjksICAgMzcxLAotICAgICAzNzIsICAgMzczLCAgIDM3NCwgICAzNzcsICAgMzgzLCAgIDM5MCwgICAzOTcsICAgNDA0LCAgIDQxMCwgICA0MTcsCi0gICAgIDQxOCwgICA0MTksICAgNDIyLCAgIDQyNywgICA0MzIsICAgNDQwLCAgIDQ0MiwgICA0NDcsICAgNDQ4LCAgIDQ1MSwKLSAgICAgNDUyLCAgIDQ1MywgICA0NTcsICAgNDU3LCAgIDQ1OSwgICA0NjAsICAgNDYzLCAgIDQ2NCwgICA0NjUsICAgNDY2LAotICAgICA0NjcsICAgNDY4LCAgIDQ2OSwgICA0NzIsICAgNDczCisgICAgICAgMCwgICAxMDMsICAgMTAzLCAgIDEwNSwgICAxMDcsICAgMTA4LCAgIDEwOSwgICAxMTAsICAgMTExLCAgIDExMiwKKyAgICAgMTEzLCAgIDExNywgICAxMjEsICAgMTIxLCAgIDEyMSwgICAxMjEsICAgMTIxLCAgIDEyMSwgICAxMjEsICAgMTI1LAorICAgICAxMjYsICAgMTI3LCAgIDEyOCwgICAxMjksICAgMTMwLCAgIDEzNCwgICAxMzUsICAgMTQxLCAgIDE0OSwgICAxNTUsCisgICAgIDE2MywgICAxNzMsICAgMTc1LCAgIDE3NiwgICAxNzcsICAgMTc4LCAgIDE3OSwgICAxODIsICAgMTkwLCAgIDE5NiwKKyAgICAgMjA2LCAgIDIxMiwgICAyMjAsICAgMjI5LCAgIDIzNCwgICAyNDIsICAgMjQ1LCAgIDI0NywgICAyNDgsICAgMjQ5LAorICAgICAyNTAsICAgMjUxLCAgIDI1NCwgICAyNjAsICAgMjcxLCAgIDI3NywgICAyODcsICAgMjg5LCAgIDI5NCwgICAzMDIsCisgICAgIDMxMCwgICAzMTMsICAgMzE1LCAgIDMxNiwgICAzMTcsICAgMzIyLCAgIDMyOSwgICAzMzQsICAgMzQyLCAgIDM0NSwKKyAgICAgMzQ3LCAgIDM0OCwgICAzNDksICAgMzUyLCAgIDM2MCwgICAzNjcsICAgMzc0LCAgIDM4MCwgICAzODcsICAgMzg5LAorICAgICAzOTAsICAgMzkxLCAgIDM5NCwgICAzOTksICAgNDA0LCAgIDQxMiwgICA0MTQsICAgNDE5LCAgIDQyMCwgICA0MjMsCisgICAgIDQyNCwgICA0MjUsICAgNDI5LCAgIDQzMCwgICA0MzMsICAgNDM0LCAgIDQzNywgICA0MzgsICAgNDM5LCAgIDQ0MCwKKyAgICAgNDQxLCAgIDQ0MiwgICA0NDMsICAgNDQ2LCAgIDQ0NwogfTsKICNlbmRpZgogCkBAIC00NDgsNjcgKzQ0MSw2NSBAQAogICAgRmlyc3QsIHRoZSB0ZXJtaW5hbHMsIHRoZW4sIHN0YXJ0aW5nIGF0IFlZTlRPS0VOUywgbm9udGVybWluYWxzLiAqLwogc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHl5dG5hbWVbXSA9CiB7Ci0gICIkZW5kIiwgImVycm9yIiwgIiR1bmRlZmluZWQiLCAiVF9NQUlOTUVOVSIsICJUX01FTlUiLCAiVF9FTkRNRU5VIiwgCi0gICJUX1NPVVJDRSIsICJUX0NIT0lDRSIsICJUX0VORENIT0lDRSIsICJUX0NPTU1FTlQiLCAiVF9DT05GSUciLCAKLSAgIlRfTUVOVUNPTkZJRyIsICJUX0hFTFAiLCAiVF9IRUxQVEVYVCIsICJUX0lGIiwgIlRfRU5ESUYiLCAiVF9ERVBFTkRTIiwgCi0gICJUX1JFUVVJUkVTIiwgIlRfT1BUSU9OQUwiLCAiVF9QUk9NUFQiLCAiVF9ERUZBVUxUIiwgIlRfVFJJU1RBVEUiLCAKLSAgIlRfREVGX1RSSVNUQVRFIiwgIlRfQk9PTEVBTiIsICJUX0RFRl9CT09MRUFOIiwgIlRfU1RSSU5HIiwgIlRfSU5UIiwgCi0gICJUX0hFWCIsICJUX1dPUkQiLCAiVF9XT1JEX1FVT1RFIiwgIlRfVU5FUVVBTCIsICJUX0VPRiIsICJUX0VPTCIsIAotICAiVF9DTE9TRV9QQVJFTiIsICJUX09QRU5fUEFSRU4iLCAiVF9PTiIsICJUX1NFTEVDVCIsICJUX1JBTkdFIiwgIlRfT1IiLCAKLSAgIlRfQU5EIiwgIlRfRVFVQUwiLCAiVF9OT1QiLCAiJGFjY2VwdCIsICJpbnB1dCIsICJibG9jayIsIAotICAiY29tbW9uX2Jsb2NrIiwgImNvbmZpZ19lbnRyeV9zdGFydCIsICJjb25maWdfc3RtdCIsIAotICAibWVudWNvbmZpZ19lbnRyeV9zdGFydCIsICJtZW51Y29uZmlnX3N0bXQiLCAiY29uZmlnX29wdGlvbl9saXN0IiwgCi0gICJjb25maWdfb3B0aW9uIiwgImNob2ljZSIsICJjaG9pY2VfZW50cnkiLCAiY2hvaWNlX2VuZCIsICJjaG9pY2Vfc3RtdCIsIAotICAiY2hvaWNlX29wdGlvbl9saXN0IiwgImNob2ljZV9vcHRpb24iLCAiY2hvaWNlX2Jsb2NrIiwgImlmIiwgImlmX2VuZCIsIAotICAiaWZfc3RtdCIsICJpZl9ibG9jayIsICJtZW51IiwgIm1lbnVfZW50cnkiLCAibWVudV9lbmQiLCAibWVudV9zdG10IiwgCi0gICJtZW51X2Jsb2NrIiwgInNvdXJjZSIsICJzb3VyY2Vfc3RtdCIsICJjb21tZW50IiwgImNvbW1lbnRfc3RtdCIsIAotICAiaGVscF9zdGFydCIsICJoZWxwIiwgImRlcGVuZHNfbGlzdCIsICJkZXBlbmRzIiwgInByb21wdF9zdG10X29wdCIsIAotICAicHJvbXB0IiwgImVuZCIsICJubF9vcl9lb2YiLCAiaWZfZXhwciIsICJleHByIiwgInN5bWJvbCIsIDAKKyAgIiRlbmQiLCAiZXJyb3IiLCAiJHVuZGVmaW5lZCIsICJUX01BSU5NRU5VIiwgIlRfTUVOVSIsICJUX0VORE1FTlUiLAorICAiVF9TT1VSQ0UiLCAiVF9DSE9JQ0UiLCAiVF9FTkRDSE9JQ0UiLCAiVF9DT01NRU5UIiwgIlRfQ09ORklHIiwKKyAgIlRfTUVOVUNPTkZJRyIsICJUX0hFTFAiLCAiVF9IRUxQVEVYVCIsICJUX0lGIiwgIlRfRU5ESUYiLCAiVF9ERVBFTkRTIiwKKyAgIlRfUkVRVUlSRVMiLCAiVF9PUFRJT05BTCIsICJUX1BST01QVCIsICJUX1RZUEUiLCAiVF9ERUZBVUxUIiwKKyAgIlRfU0VMRUNUIiwgIlRfUkFOR0UiLCAiVF9PTiIsICJUX1dPUkQiLCAiVF9XT1JEX1FVT1RFIiwgIlRfVU5FUVVBTCIsCisgICJUX0NMT1NFX1BBUkVOIiwgIlRfT1BFTl9QQVJFTiIsICJUX0VPTCIsICJUX09SIiwgIlRfQU5EIiwgIlRfRVFVQUwiLAorICAiVF9OT1QiLCAiJGFjY2VwdCIsICJpbnB1dCIsICJzdG10X2xpc3QiLCAib3B0aW9uX25hbWUiLCAiY29tbW9uX3N0bXQiLAorICAib3B0aW9uX2Vycm9yIiwgImNvbmZpZ19lbnRyeV9zdGFydCIsICJjb25maWdfc3RtdCIsCisgICJtZW51Y29uZmlnX2VudHJ5X3N0YXJ0IiwgIm1lbnVjb25maWdfc3RtdCIsICJjb25maWdfb3B0aW9uX2xpc3QiLAorICAiY29uZmlnX29wdGlvbiIsICJjaG9pY2UiLCAiY2hvaWNlX2VudHJ5IiwgImNob2ljZV9lbmQiLCAiY2hvaWNlX3N0bXQiLAorICAiY2hvaWNlX29wdGlvbl9saXN0IiwgImNob2ljZV9vcHRpb24iLCAiY2hvaWNlX2Jsb2NrIiwgImlmX2VudHJ5IiwKKyAgImlmX2VuZCIsICJpZl9zdG10IiwgImlmX2Jsb2NrIiwgIm1lbnUiLCAibWVudV9lbnRyeSIsICJtZW51X2VuZCIsCisgICJtZW51X3N0bXQiLCAibWVudV9ibG9jayIsICJzb3VyY2Vfc3RtdCIsICJjb21tZW50IiwgImNvbW1lbnRfc3RtdCIsCisgICJoZWxwX3N0YXJ0IiwgImhlbHAiLCAiZGVwZW5kc19saXN0IiwgImRlcGVuZHMiLCAicHJvbXB0X3N0bXRfb3B0IiwKKyAgInByb21wdCIsICJlbmQiLCAibmwiLCAiaWZfZXhwciIsICJleHByIiwgInN5bWJvbCIsIDAKIH07CiAjZW5kaWYKIAogIyBpZmRlZiBZWVBSSU5UCiAvKiBZWVRPS05VTVtZWUxFWC1OVU1dIC0tIEludGVybmFsIHRva2VuIG51bWJlciBjb3JyZXNwb25kaW5nIHRvCiAgICB0b2tlbiBZWUxFWC1OVU0uICAqLwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IHl5dG9rbnVtW10gPQorc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGludCB5eXRva251bVtdID0KIHsKICAgICAgICAwLCAgIDI1NiwgICAyNTcsICAgMjU4LCAgIDI1OSwgICAyNjAsICAgMjYxLCAgIDI2MiwgICAyNjMsICAgMjY0LAogICAgICAyNjUsICAgMjY2LCAgIDI2NywgICAyNjgsICAgMjY5LCAgIDI3MCwgICAyNzEsICAgMjcyLCAgIDI3MywgICAyNzQsCiAgICAgIDI3NSwgICAyNzYsICAgMjc3LCAgIDI3OCwgICAyNzksICAgMjgwLCAgIDI4MSwgICAyODIsICAgMjgzLCAgIDI4NCwKLSAgICAgMjg1LCAgIDI4NiwgICAyODcsICAgMjg4LCAgIDI4OSwgICAyOTAsICAgMjkxLCAgIDI5MiwgICAyOTMsICAgMjk0LAotICAgICAyOTUsICAgMjk2CisgICAgIDI4NSwgICAyODYsICAgMjg3LCAgIDI4OCwgICAyODkKIH07CiAjIGVuZGlmCiAKIC8qIFlZUjFbWVlOXSAtLSBTeW1ib2wgbnVtYmVyIG9mIHN5bWJvbCB0aGF0IHJ1bGUgWVlOIGRlcml2ZXMuICAqLwogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgeXlyMVtdID0KIHsKLSAgICAgICAwLCAgICA0MiwgICAgNDMsICAgIDQzLCAgICA0NCwgICAgNDQsICAgIDQ0LCAgICA0NCwgICAgNDQsICAgIDQ0LAotICAgICAgNDQsICAgIDQ0LCAgICA0NSwgICAgNDUsICAgIDQ1LCAgICA0NSwgICAgNDUsICAgIDQ1LCAgICA0NiwgICAgNDcsCi0gICAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MCwgICAgNTAsICAgIDUwLCAgICA1MCwgICAgNTEsICAgIDUxLCAgICA1MSwKLSAgICAgIDUxLCAgICA1MSwgICAgNTEsICAgIDUxLCAgICA1MSwgICAgNTEsICAgIDUxLCAgICA1MSwgICAgNTIsICAgIDUzLAotICAgICAgNTQsICAgIDU1LCAgICA1NSwgICAgNTYsICAgIDU2LCAgICA1NiwgICAgNTYsICAgIDU2LCAgICA1NywgICAgNTcsCi0gICAgICA1NywgICAgNTcsICAgIDU3LCAgICA1OCwgICAgNTgsICAgIDU5LCAgICA2MCwgICAgNjEsICAgIDYxLCAgICA2MiwKLSAgICAgIDYyLCAgICA2MiwgICAgNjIsICAgIDYzLCAgICA2NCwgICAgNjUsICAgIDY2LCAgICA2NiwgICAgNjcsICAgIDY3LAotICAgICAgNjcsICAgIDY3LCAgICA2NywgICAgNjgsICAgIDY5LCAgICA3MCwgICAgNzEsICAgIDcyLCAgICA3MywgICAgNzQsCi0gICAgICA3NCwgICAgNzQsICAgIDc1LCAgICA3NSwgICAgNzUsICAgIDc2LCAgICA3NiwgICAgNzcsICAgIDc3LCAgICA3OCwKLSAgICAgIDc4LCAgICA3OCwgICAgNzksICAgIDc5LCAgICA4MCwgICAgODAsICAgIDgxLCAgICA4MSwgICAgODEsICAgIDgxLAotICAgICAgODEsICAgIDgxLCAgICA4MSwgICAgODIsICAgIDgyCisgICAgICAgMCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzcsICAgIDM3LCAgICAzNywgICAgMzcsICAgIDM3LCAgICAzNywKKyAgICAgIDM3LCAgICAzNywgICAgMzgsICAgIDM4LCAgICAzOCwgICAgMzgsICAgIDM4LCAgICAzOCwgICAgMzgsICAgIDM5LAorICAgICAgMzksICAgIDM5LCAgICAzOSwgICAgMzksICAgIDM5LCAgICA0MCwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsCisgICAgICA0NCwgICAgNDUsICAgIDQ1LCAgICA0NSwgICAgNDUsICAgIDQ1LCAgICA0NSwgICAgNDYsICAgIDQ2LCAgICA0NiwKKyAgICAgIDQ2LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1MSwgICAgNTEsICAgIDUxLAorICAgICAgNTEsICAgIDUxLCAgICA1MiwgICAgNTIsICAgIDUyLCAgICA1MiwgICAgNTMsICAgIDUzLCAgICA1NCwgICAgNTUsCisgICAgICA1NiwgICAgNTcsICAgIDU3LCAgICA1NywgICAgNTcsICAgIDU4LCAgICA1OSwgICAgNjAsICAgIDYxLCAgICA2MiwKKyAgICAgIDYyLCAgICA2MiwgICAgNjIsICAgIDYzLCAgICA2NCwgICAgNjUsICAgIDY2LCAgICA2NywgICAgNjgsICAgIDY4LAorICAgICAgNjgsICAgIDY4LCAgICA2OSwgICAgNjksICAgIDY5LCAgICA3MCwgICAgNzAsICAgIDcxLCAgICA3MSwgICAgNzIsCisgICAgICA3MiwgICAgNzIsICAgIDczLCAgICA3MywgICAgNzQsICAgIDc0LCAgICA3NSwgICAgNzUsICAgIDc1LCAgICA3NSwKKyAgICAgIDc1LCAgICA3NSwgICAgNzUsICAgIDc2LCAgICA3NgogfTsKIAogLyogWVlSMltZWU5dIC0tIE51bWJlciBvZiBzeW1ib2xzIGNvbXBvc2luZyByaWdodCBoYW5kIHNpZGUgb2YgcnVsZSBZWU4uICAqLwogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgeXlyMltdID0KIHsKLSAgICAgICAwLCAgICAgMiwgICAgIDAsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMywgICAgIDEsICAgICAxLAotICAgICAgIDEsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMywgICAgIDIsCi0gICAgICAgMywgICAgIDIsICAgICAwLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDMsICAgICA0LCAgICAgMywKLSAgICAgICA0LCAgICAgMywgICAgIDMsICAgICAzLCAgICAgNCwgICAgIDQsICAgICA0LCAgICAgNSwgICAgIDIsICAgICAyLAotICAgICAgIDEsICAgICAzLCAgICAgMiwgICAgIDAsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgNCwgICAgIDMsCi0gICAgICAgMywgICAgIDIsICAgICA0LCAgICAgMCwgICAgIDIsICAgICAzLCAgICAgMSwgICAgIDMsICAgICAyLCAgICAgMCwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAzLCAgICAgMiwgICAgIDEsICAgICAzLCAgICAgMiwgICAgIDAsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMywgICAgIDMsICAgICAxLCAgICAgMywgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDAsCisgICAgICAgMCwgICAgIDIsICAgICAxLCAgICAgMCwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDQsICAgICAyLCAgICAgNCwKKyAgICAgICA0LCAgICAgMywgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLAorICAgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMywgICAgIDIsICAgICAzLCAgICAgMiwgICAgIDMsCisgICAgICAgMiwgICAgIDAsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDMsICAgICA0LCAgICAgNCwKKyAgICAgICA0LCAgICAgNSwgICAgIDIsICAgICAyLCAgICAgMSwgICAgIDMsICAgICAwLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgNCwgICAgIDMsICAgICAyLCAgICAgNCwgICAgIDAsICAgICAyLCAgICAgMywgICAgIDEsCisgICAgICAgMywgICAgIDAsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAzLCAgICAgMiwgICAgIDEsICAgICAzLCAgICAgMCwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAzLCAgICAgMywgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDAsICAgICAyLAogICAgICAgIDIsICAgICAyLCAgICAgNCwgICAgIDMsICAgICAzLCAgICAgMCwgICAgIDIsICAgICAxLCAgICAgMSwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAxLCAgICAgMSwgICAgIDAsICAgICAyLCAgICAgMSwgICAgIDMsICAgICAzLCAgICAgMywKKyAgICAgICAyLCAgICAgMiwgICAgIDEsICAgICAyLCAgICAgMCwgICAgIDIsICAgICAxLCAgICAgMywgICAgIDMsICAgICAzLAogICAgICAgIDIsICAgICAzLCAgICAgMywgICAgIDEsICAgICAxCiB9OwogCkBAIC01MTcsMTUxICs1MDgsMTYwIEBACiAgICBtZWFucyB0aGUgZGVmYXVsdCBpcyBhbiBlcnJvci4gICovCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciB5eWRlZmFjdFtdID0KIHsKLSAgICAgICAyLCAgICAgMCwgICAgIDEsICAgICAwLCAgICAgMCwgICAgIDAsICAgICA4LCAgICAgMCwgICAgIDAsICAgIDEwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICA5LCAgICA5MywgICAgOTIsICAgICAzLCAgICAgNCwgICAgMjIsCi0gICAgICAxNCwgICAgMjIsICAgIDE1LCAgICA0MywgICAgNTMsICAgICA1LCAgICA1OSwgICAgMTIsICAgIDc5LCAgICA2OCwKLSAgICAgICA2LCAgICA3NCwgICAgMTYsICAgIDc5LCAgICAxMywgICAgMTcsICAgIDExLCAgICA4NywgICAgODgsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAzOCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxMDMsICAgMTA0LCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgOTYsICAgIDE5LCAgICAyMSwgICAgMzksICAgIDQyLCAgICA1OCwgICAgNjQsICAgICAwLCAgICA3NiwKLSAgICAgICA3LCAgICA2MywgICAgNzMsICAgIDc1LCAgICAxOCwgICAgMjAsICAgICAwLCAgIDEwMCwgICAgNTUsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA4NSwgICAgIDAsCi0gICAgICA4NSwgICAgIDAsICAgIDg1LCAgICA4NSwgICAgODUsICAgIDI2LCAgICAgMCwgICAgIDAsICAgIDIzLCAgICAgMCwKLSAgICAgIDI1LCAgICAyNCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgODUsICAgIDg1LCAgICA0NywgICAgNDQsICAgIDQ2LAotICAgICAgNDUsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDU0LCAgICA0MSwgICAgNDAsICAgIDYwLCAgICA2MiwgICAgNTcsCi0gICAgICA2MSwgICAgNTYsICAgIDgxLCAgICA4MCwgICAgIDAsICAgIDY5LCAgICA3MSwgICAgNjYsICAgIDcwLCAgICA2NSwKLSAgICAgIDk5LCAgIDEwMSwgICAxMDIsICAgIDk4LCAgICA5NywgICAgNzcsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDk0LAotICAgICAgOTQsICAgICAwLCAgICA5NCwgICAgOTQsICAgICAwLCAgICA5NCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgOTQsCi0gICAgICAgMCwgICAgNzgsICAgIDUxLCAgICA5NCwgICAgOTQsICAgICAwLCAgICAgMCwgICAgODksICAgIDkwLCAgICA5MSwKLSAgICAgIDcyLCAgICAgMCwgICAgODMsICAgIDg0LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyNywgICAgODYsICAgICAwLAotICAgICAgMjksICAgICAwLCAgICAzMywgICAgMzEsICAgIDMyLCAgICAgMCwgICAgOTQsICAgICAwLCAgICAgMCwgICAgNDksCi0gICAgICA1MCwgICAgODIsICAgIDk1LCAgICAzNCwgICAgMzUsICAgIDI4LCAgICAzMCwgICAgMzYsICAgICAwLCAgICA0OCwKLSAgICAgIDUyLCAgICAzNworICAgICAgIDMsICAgICAwLCAgICAgMCwgICAgIDEsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMiwgICAgMTYsICAgIDEzLCAgICAxNCwKKyAgICAgIDE4LCAgICAxNSwgICAgMTcsICAgICAwLCAgICAxOSwgICAgIDAsICAgICA0LCAgICAzMSwgICAgMjIsICAgIDMxLAorICAgICAgMjMsICAgIDQ2LCAgICA1NiwgICAgIDUsICAgIDYxLCAgICAyMCwgICAgNzgsICAgIDY5LCAgICAgNiwgICAgMjQsCisgICAgICA3OCwgICAgMjEsICAgICA4LCAgICAxMSwgICAgODcsICAgIDg4LCAgICAgMCwgICAgIDAsICAgIDg5LCAgICAgMCwKKyAgICAgIDQyLCAgICA5MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxMDMsICAgMTA0LCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgOTYsICAgIDkxLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgIDkyLCAgICAgNywgICAgNjUsICAgIDczLCAgICA3NCwgICAgMjcsICAgIDI5LCAgICAgMCwKKyAgICAgMTAwLCAgICAgMCwgICAgIDAsICAgIDU4LCAgICAgMCwgICAgIDAsICAgICA5LCAgICAxMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgODUsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAzNiwgICAgMzUsCisgICAgICAzMiwgICAgIDAsICAgIDM0LCAgICAzMywgICAgIDAsICAgICAwLCAgICA4NSwgICAgIDAsICAgIDUwLCAgICA1MSwKKyAgICAgIDQ3LCAgICA0OSwgICAgNDgsICAgIDU3LCAgICA0NSwgICAgNDQsICAgIDYyLCAgICA2NCwgICAgNjAsICAgIDYzLAorICAgICAgNTksICAgIDgwLCAgICA4MSwgICAgNzksICAgIDcwLCAgICA3MiwgICAgNjgsICAgIDcxLCAgICA2NywgICAgOTMsCisgICAgICA5OSwgICAxMDEsICAgMTAyLCAgICA5OCwgICAgOTcsICAgIDI2LCAgICA3NiwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgIDk0LCAgICAgMCwgICAgOTQsICAgIDk0LCAgICA5NCwgICAgIDAsICAgICAwLCAgICA3NywgICAgNTQsICAgIDk0LAorICAgICAgIDAsICAgIDk0LCAgICAgMCwgICAgODMsICAgIDg0LCAgICAgMCwgICAgIDAsICAgIDM3LCAgICA4NiwgICAgIDAsCisgICAgICAgMCwgICAgOTQsICAgIDI1LCAgICAgMCwgICAgNTMsICAgICAwLCAgICA4MiwgICAgOTUsICAgIDM4LCAgICAzOSwKKyAgICAgIDQwLCAgICAgMCwgICAgNTIsICAgIDU1LCAgICA0MQogfTsKIAogLyogWVlERUZHT1RPW05URVJNLU5VTV0uICovCi1zdGF0aWMgY29uc3Qgc2hvcnQgeXlkZWZnb3RvW10gPQorc3RhdGljIGNvbnN0IHNob3J0IGludCB5eWRlZmdvdG9bXSA9CiB7Ci0gICAgICAtMSwgICAgIDEsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDUyLCAgICA4OCwKLSAgICAgIDIzLCAgICAyNCwgICAxMDUsICAgIDI1LCAgICA1NCwgICAgOTgsICAgIDU1LCAgICAyNiwgICAxMDksICAgIDI3LAotICAgICAgNTYsICAgIDI4LCAgICAyOSwgICAxMTcsICAgIDMwLCAgICA1OCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsCi0gICAgICA4OSwgICAgOTAsICAgIDU3LCAgICA5MSwgICAxMzEsICAgMTMyLCAgIDEwNiwgICAgMzUsICAgMTU1LCAgICA1MCwKLSAgICAgIDUxCisgICAgICAtMSwgICAgIDEsICAgICAyLCAgICAyNSwgICAgMjYsICAgIDk5LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwKKyAgICAgIDY0LCAgIDEwMCwgICAgMzEsICAgIDMyLCAgIDExNCwgICAgMzMsICAgIDY2LCAgIDExMCwgICAgNjcsICAgIDM0LAorICAgICAxMTgsICAgIDM1LCAgICA2OCwgICAgMzYsICAgIDM3LCAgIDEyNiwgICAgMzgsICAgIDcwLCAgICAzOSwgICAgNDAsCisgICAgICA0MSwgICAxMDEsICAgMTAyLCAgICA2OSwgICAxMDMsICAgMTQxLCAgIDE0MiwgICAgNDIsICAgIDczLCAgIDE1NiwKKyAgICAgIDU5LCAgICA2MAogfTsKIAogLyogWVlQQUNUW1NUQVRFLU5VTV0gLS0gSW5kZXggaW4gWVlUQUJMRSBvZiB0aGUgcG9ydGlvbiBkZXNjcmliaW5nCiAgICBTVEFURS1OVU0uICAqLwotI2RlZmluZSBZWVBBQ1RfTklORiAtOTkKLXN0YXRpYyBjb25zdCBzaG9ydCB5eXBhY3RbXSA9CisjZGVmaW5lIFlZUEFDVF9OSU5GIC03OAorc3RhdGljIGNvbnN0IHNob3J0IGludCB5eXBhY3RbXSA9CiB7Ci0gICAgIC05OSwgICAgNDgsICAgLTk5LCAgICAzOCwgICAgNDYsICAgIDQ2LCAgIC05OSwgICAgNDYsICAgLTI5LCAgIC05OSwKLSAgICAgIDQ2LCAgIC0xNywgICAgLTMsICAgLTExLCAgIC05OSwgICAtOTksICAgLTk5LCAgIC05OSwgICAtOTksICAgLTk5LAotICAgICAtOTksICAgLTk5LCAgIC05OSwgICAtOTksICAgLTk5LCAgIC05OSwgICAtOTksICAgLTk5LCAgIC05OSwgICAtOTksCi0gICAgIC05OSwgICAtOTksICAgLTk5LCAgIC05OSwgICAtOTksICAgLTk5LCAgIC05OSwgICAtOTksICAgLTk5LCAgICAzOCwKLSAgICAgIDEyLCAgICAxNSwgICAtOTksICAgIDE4LCAgICA1MSwgICAgNjIsICAgLTk5LCAgIC05OSwgICAtMTEsICAgLTExLAotICAgICAgIDQsICAgLTI0LCAgIDEzOCwgICAxMzgsICAgMTYwLCAgIDEyMSwgICAxMTAsICAgIC00LCAgICA4MSwgICAgLTQsCi0gICAgIC05OSwgICAtOTksICAgLTk5LCAgIC05OSwgICAtOTksICAgLTk5LCAgIC0xOSwgICAtOTksICAgLTk5LCAgIC0xMSwKLSAgICAgLTExLCAgICA3MCwgICAgNzAsICAgIDczLCAgICAzMiwgICAtMTEsICAgIDQ2LCAgIC0xMSwgICAgNDYsICAgLTExLAotICAgICAgNDYsICAgLTExLCAgICA0NiwgICAgNDYsICAgIDQ2LCAgIC05OSwgICAgMzYsICAgIDcwLCAgIC05OSwgICAgOTUsCi0gICAgIC05OSwgICAtOTksICAgIDk2LCAgICA0NiwgICAxMDYsICAgIDQ2LCAgICA0NiwgICAtOTksICAgLTk5LCAgIC05OSwKLSAgICAgLTk5LCAgICAzOCwgICAgMzgsICAgIDM4LCAgIC05OSwgICAtOTksICAgLTk5LCAgIC05OSwgICAtOTksICAgLTk5LAotICAgICAtOTksICAgLTk5LCAgIC05OSwgICAtOTksICAgMTEyLCAgIC05OSwgICAtOTksICAgLTk5LCAgIC05OSwgICAtOTksCi0gICAgIC05OSwgICAxMTcsICAgLTk5LCAgIC05OSwgICAtOTksICAgLTk5LCAgIC0xMSwgICAgMzMsICAgIDY1LCAgIDEzMSwKLSAgICAgICAxLCAgIDExOSwgICAxMzEsICAgICAxLCAgIDEzNiwgICAgIDEsICAgMTUzLCAgIDE1NCwgICAxNTUsICAgMTMxLAotICAgICAgNzAsICAgLTk5LCAgIC05OSwgICAxMzEsICAgMTMxLCAgIDE1NiwgICAxNTcsICAgLTk5LCAgIC05OSwgICAtOTksCi0gICAgIC05OSwgICAxMDEsICAgLTk5LCAgIC05OSwgICAtMTEsICAgMTU4LCAgIDE1OSwgICAtOTksICAgLTk5LCAgIDE2MSwKLSAgICAgLTk5LCAgIDE2MiwgICAtOTksICAgLTk5LCAgIC05OSwgICAxNjMsICAgMTMxLCAgIDE2NCwgICAxNjUsICAgLTk5LAotICAgICAtOTksICAgLTk5LCAgICA5OSwgICAtOTksICAgLTk5LCAgIC05OSwgICAtOTksICAgLTk5LCAgIDE2NiwgICAtOTksCi0gICAgIC05OSwgICAtOTkKKyAgICAgLTc4LCAgICAgMiwgICAxNTksICAgLTc4LCAgIC0yMSwgICAgIDAsICAgICAwLCAgIC0xMiwgICAgIDAsICAgICAxLAorICAgICAgIDQsICAgICAwLCAgICAyNywgICAgMzgsICAgIDYwLCAgICA1OCwgICAtNzgsICAgLTc4LCAgIC03OCwgICAtNzgsCisgICAgIC03OCwgICAtNzgsICAgLTc4LCAgIDEwMCwgICAtNzgsICAgMTA0LCAgIC03OCwgICAtNzgsICAgLTc4LCAgIC03OCwKKyAgICAgLTc4LCAgIC03OCwgICAtNzgsICAgLTc4LCAgIC03OCwgICAtNzgsICAgLTc4LCAgIC03OCwgICAtNzgsICAgLTc4LAorICAgICAtNzgsICAgLTc4LCAgIC03OCwgICAtNzgsICAgLTc4LCAgIC03OCwgICAgODYsICAgMTEzLCAgIC03OCwgICAxMTQsCisgICAgIC03OCwgICAtNzgsICAgMTI1LCAgIDEyNywgICAxMjgsICAgLTc4LCAgIC03OCwgICAgNjAsICAgIDYwLCAgIDIxMCwKKyAgICAgIDY1LCAgIC03OCwgICAxNDEsICAgMTQyLCAgICAzOSwgICAxMDMsICAgMTgyLCAgIDIwMCwgICAgIDYsICAgIDY2LAorICAgICAgIDYsICAgMTMxLCAgIC03OCwgICAxNDYsICAgLTc4LCAgIC03OCwgICAtNzgsICAgLTc4LCAgIC03OCwgICAxOTYsCisgICAgIC03OCwgICAgNjAsICAgIDYwLCAgIDE0NiwgICAgNDAsICAgIDQwLCAgIC03OCwgICAtNzgsICAgMTU1LCAgIDE1NiwKKyAgICAgIC0yLCAgICA2MCwgICAgIDAsICAgICAwLCAgICA2MCwgICAxMDUsICAgIDQwLCAgIDE5NCwgICAtNzgsICAgLTc4LAorICAgICAtNzgsICAgMjA2LCAgIC03OCwgICAtNzgsICAgMTgzLCAgICAgMCwgICAgIDAsICAgMTk1LCAgIC03OCwgICAtNzgsCisgICAgIC03OCwgICAtNzgsICAgLTc4LCAgIC03OCwgICAtNzgsICAgLTc4LCAgIC03OCwgICAtNzgsICAgLTc4LCAgIC03OCwKKyAgICAgLTc4LCAgIC03OCwgICAtNzgsICAgLTc4LCAgIC03OCwgICAtNzgsICAgLTc4LCAgIC03OCwgICAtNzgsICAgLTc4LAorICAgICAtNzgsICAgMTk3LCAgIC03OCwgICAtNzgsICAgLTc4LCAgIC03OCwgICAtNzgsICAgIDYwLCAgIDIxMywgICAyMTYsCisgICAgIDIxMiwgICAyMDMsICAgMjEyLCAgIDE5MCwgICAyMTIsICAgIDQwLCAgIDIwOCwgICAtNzgsICAgLTc4LCAgIDIxMiwKKyAgICAgMjIyLCAgIDIxMiwgICAyMTksICAgLTc4LCAgIC03OCwgICAgNjAsICAgMjIzLCAgIC03OCwgICAtNzgsICAgMjI0LAorICAgICAyMjUsICAgMjEyLCAgIC03OCwgICAyMjYsICAgLTc4LCAgIDIyNywgICAtNzgsICAgIDQ3LCAgIC03OCwgICAtNzgsCisgICAgIC03OCwgICAyMjgsICAgLTc4LCAgIC03OCwgICAtNzgKIH07CiAKIC8qIFlZUEdPVE9bTlRFUk0tTlVNXS4gICovCi1zdGF0aWMgY29uc3Qgc2hvcnQgeXlwZ290b1tdID0KK3N0YXRpYyBjb25zdCBzaG9ydCBpbnQgeXlwZ290b1tdID0KIHsKLSAgICAgLTk5LCAgIC05OSwgICAtOTksICAgMTExLCAgIC05OSwgICAtOTksICAgLTk5LCAgIC05OSwgICAxNzgsICAgLTk5LAotICAgICAtOTksICAgLTk5LCAgIC05OSwgICAgOTEsICAgLTk5LCAgIC05OSwgICAtOTksICAgLTk5LCAgIC05OSwgICAtOTksCi0gICAgIC05OSwgICAtOTksICAgLTk5LCAgIC05OSwgICAxMTUsICAgLTk5LCAgIC05OSwgICAtOTksICAgLTk5LCAgIC05OSwKLSAgICAgLTk5LCAgIDE0NiwgICAxNjgsICAgIDg5LCAgICAyNywgICAgIDAsICAgMTI2LCAgICAtMSwgICAtOTgsICAgLTQ4LAotICAgICAtNjMKKyAgICAgLTc4LCAgIC03OCwgICAtNzgsICAgLTc4LCAgIDE2NCwgICAtMzYsICAgLTc4LCAgIC03OCwgICAtNzgsICAgLTc4LAorICAgICAyMzAsICAgLTc4LCAgIC03OCwgICAtNzgsICAgLTc4LCAgICAyOSwgICAtNzgsICAgLTc4LCAgIC03OCwgICAtNzgsCisgICAgIC03OCwgICAtNzgsICAgLTc4LCAgIC03OCwgICAtNzgsICAgLTc4LCAgICA1OSwgICAtNzgsICAgLTc4LCAgIC03OCwKKyAgICAgLTc4LCAgIC03OCwgICAxOTgsICAgMjIwLCAgICAyNCwgICAxNTcsICAgIC01LCAgIDE2OSwgICAyMDIsICAgIDc0LAorICAgICAtNTMsICAgLTc3CiB9OwogCiAvKiBZWVRBQkxFW1lZUEFDVFtTVEFURS1OVU1dXS4gIFdoYXQgdG8gZG8gaW4gc3RhdGUgU1RBVEUtTlVNLiAgSWYKICAgIHBvc2l0aXZlLCBzaGlmdCB0aGF0IHRva2VuLiAgSWYgbmVnYXRpdmUsIHJlZHVjZSB0aGUgcnVsZSB3aGljaAogICAgbnVtYmVyIGlzIHRoZSBvcHBvc2l0ZS4gIElmIHplcm8sIGRvIHdoYXQgWVlERUZBQ1Qgc2F5cy4KICAgIElmIFlZVEFCTEVfTklORiwgc3ludGF4IGVycm9yLiAgKi8KLSNkZWZpbmUgWVlUQUJMRV9OSU5GIC02OAotc3RhdGljIGNvbnN0IHNob3J0IHl5dGFibGVbXSA9CisjZGVmaW5lIFlZVEFCTEVfTklORiAtNzYKK3N0YXRpYyBjb25zdCBzaG9ydCBpbnQgeXl0YWJsZVtdID0KIHsKLSAgICAgIDY2LCAgICA2NywgICAgMzYsICAgIDQyLCAgICAzOSwgICAgNDAsICAgIDcxLCAgICA0MSwgICAxMjMsICAgMTI0LAotICAgICAgNDMsICAgIDQ0LCAgICA3NCwgICAgNzUsICAgMTIwLCAgIDE1NCwgICAgNzIsICAgIDQ2LCAgICA0NywgICAgNjksCi0gICAgICA3MCwgICAxMjEsICAgMTIyLCAgICA0OCwgICAxNDAsICAgIDQ1LCAgIDEyNywgICAxMjgsICAgMTEyLCAgIDEzMCwKLSAgICAgIDQ5LCAgIDEzMywgICAxNTYsICAgMTM1LCAgIDE1OCwgICAxNTksICAgIDY4LCAgIDE2MSwgICAgNjAsICAgIDY5LAotICAgICAgNzAsICAgMTY1LCAgICA2OSwgICAgNzAsICAgIDYxLCAgIDE2NywgICAxNjgsICAgIDYyLCAgICAgMiwgICAgIDMsCi0gICAgICA2MywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwKLSAgICAgIDQ2LCAgICA0NywgICAgMTMsICAgIDE0LCAgIDEzOSwgICAxNTIsICAgIDQ4LCAgIDEyNiwgICAxNzgsICAgIDE1LAotICAgICAgMTYsICAgIDY5LCAgICA3MCwgICAgNDksICAgIDM3LCAgICAzOCwgICAxMjksICAgMTY2LCAgIDE1MSwgICAgMTUsCi0gICAgICAxNiwgICAtNjcsICAgMTE0LCAgICA2NCwgICAtNjcsICAgICA1LCAgIDEwMSwgICAgIDcsICAgICA4LCAgIDEwMiwKLSAgICAgIDEwLCAgICAxMSwgICAgMTIsICAgMTQzLCAgICA2NSwgICAgMTMsICAgMTAzLCAgIDE1MywgICAgNDYsICAgIDQ3LAotICAgICAxNDcsICAgMTQ4LCAgIDE0OSwgICAgNjksICAgIDcwLCAgIDEyNSwgICAxNzIsICAgMTM0LCAgIDE0MSwgICAxMzYsCi0gICAgIDEzNywgICAxMzgsICAgIDE1LCAgICAxNiwgICAgIDUsICAgMTAxLCAgICAgNywgICAgIDgsICAgMTAyLCAgICAxMCwKLSAgICAgIDExLCAgICAxMiwgICAxNDUsICAgMTQ2LCAgICAxMywgICAxMDMsICAgMTAxLCAgICAgNywgICAxNDIsICAgMTAyLAotICAgICAgMTAsICAgIDExLCAgICAxMiwgICAxNzEsICAgMTQ0LCAgICAxMywgICAxMDMsICAgIDY5LCAgICA3MCwgICAgNjksCi0gICAgICA3MCwgICAgMTUsICAgIDE2LCAgIDEwMCwgICAxNTAsICAgMTU0LCAgIDExMywgICAxMDgsICAgMTEzLCAgIDExNiwKLSAgICAgIDczLCAgIDE1NywgICAgMTUsICAgIDE2LCAgICA3NCwgICAgNzUsICAgIDcwLCAgICA3NiwgICAgNzcsICAgIDc4LAotICAgICAgNzksICAgIDgwLCAgICA4MSwgICAgODIsICAgIDgzLCAgICA4NCwgICAxMDQsICAgMTA3LCAgIDE2MCwgICAxMTUsCi0gICAgICA4NSwgICAxMTAsICAgIDczLCAgIDExOCwgICAgODYsICAgIDg3LCAgICA3NCwgICAgNzUsICAgIDkyLCAgICA5MywKLSAgICAgIDk0LCAgICA5NSwgICAxMTEsICAgIDk2LCAgIDExOSwgICAxNjIsICAgMTYzLCAgIDE2NCwgICAxNjksICAgMTcwLAotICAgICAxNzMsICAgMTc0LCAgICA5NywgICAxNzUsICAgMTc2LCAgIDE3NywgICAxNzksICAgMTgwLCAgIDE4MSwgICAgNTMsCi0gICAgICA5OSwgICAgNTkKKyAgICAgIDQ2LCAgICA0NywgICAgIDMsICAgIDQ5LCAgICA3OSwgICAgODAsICAgIDUyLCAgIDEzMywgICAxMzQsICAgIDQzLAorICAgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICA0OCwgICAxNDUsCisgICAgICAxNCwgICAgMTUsICAgMTM3LCAgICA1NSwgICAgNTYsICAgIDQ0LCAgICA0NSwgICAgNTcsICAgMTMxLCAgIDEzMiwKKyAgICAgMTA5LCAgICA1MCwgICAgNTgsICAgMTIyLCAgICA1MSwgICAxMjIsICAgIDI0LCAgIDEzOCwgICAxMzksICAgLTI4LAorICAgICAgODgsICAgMTQzLCAgIC0yOCwgICAtMjgsICAgLTI4LCAgIC0yOCwgICAtMjgsICAgLTI4LCAgIC0yOCwgICAtMjgsCisgICAgIC0yOCwgICAgODksICAgIDUzLCAgIC0yOCwgICAtMjgsICAgIDkwLCAgICA5MSwgICAtMjgsICAgIDkyLCAgICA5MywKKyAgICAgIDk0LCAgICA5NSwgICAgOTYsICAgIDU0LCAgICA5NywgICAgNTUsICAgIDU2LCAgICA4OCwgICAxNjEsICAgIDk4LAorICAgICAtNjYsICAgLTY2LCAgIC02NiwgICAtNjYsICAgLTY2LCAgIC02NiwgICAtNjYsICAgLTY2LCAgICA4MSwgICAgODIsCisgICAgIC02NiwgICAtNjYsICAgIDkwLCAgICA5MSwgICAxNTIsICAgIDU1LCAgICA1NiwgICAxNDAsICAgIDYxLCAgICA1NywKKyAgICAgMTEyLCAgICA5NywgICAgODQsICAgMTIzLCAgICA1OCwgICAxMjMsICAgMTIxLCAgIDExNywgICAgODUsICAgMTI1LAorICAgICAxNDksICAgIDYyLCAgIDE2NywgICAtMzAsICAgIDg4LCAgICA2MywgICAtMzAsICAgLTMwLCAgIC0zMCwgICAtMzAsCisgICAgIC0zMCwgICAtMzAsICAgLTMwLCAgIC0zMCwgICAtMzAsICAgIDg5LCAgICA3MiwgICAtMzAsICAgLTMwLCAgICA5MCwKKyAgICAgIDkxLCAgIC0zMCwgICAgOTIsICAgIDkzLCAgICA5NCwgICAgOTUsICAgIDk2LCAgIDExOSwgICAgOTcsICAgMTI3LAorICAgICAxNDQsICAgLTc1LCAgICA4OCwgICAgOTgsICAgLTc1LCAgIC03NSwgICAtNzUsICAgLTc1LCAgIC03NSwgICAtNzUsCisgICAgIC03NSwgICAtNzUsICAgLTc1LCAgICA3NCwgICAgNzUsICAgLTc1LCAgIC03NSwgICAgOTAsICAgIDkxLCAgIC03NSwKKyAgICAgLTc1LCAgIC03NSwgICAtNzUsICAgLTc1LCAgIC03NSwgICAgNzYsICAgIDk3LCAgICA3NywgICAgNzgsICAgIC0yLAorICAgICAgIDQsICAgMTIxLCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsCisgICAgICAxMywgICAgODYsICAgIDg3LCAgICAxNCwgICAgMTUsICAgIDE2LCAgIDEyOSwgICAgMTcsICAgIDE4LCAgICAxOSwKKyAgICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDg4LCAgICAyMywgICAxMzUsICAgMTM2LCAgIC00MywgICAtNDMsICAgIDI0LAorICAgICAtNDMsICAgLTQzLCAgIC00MywgICAtNDMsICAgIDg5LCAgIDE0NiwgICAtNDMsICAgLTQzLCAgICA5MCwgICAgOTEsCisgICAgIDEwNCwgICAxMDUsICAgMTA2LCAgIDEwNywgICAxNTUsICAgICA3LCAgICAgOCwgICAgOTcsICAgIDEwLCAgICAxMSwKKyAgICAgIDEyLCAgICAxMywgICAxMDgsICAgMTQ4LCAgICAxNCwgICAgMTUsICAgMTU4LCAgIDE1OSwgICAxNjAsICAgMTQ3LAorICAgICAxNTEsICAgIDgxLCAgICA4MiwgICAxNjMsICAgMTMwLCAgIDE2NSwgICAxNTUsICAgIDgxLCAgICA4MiwgICAgODIsCisgICAgICAyNCwgICAxMTMsICAgMTE2LCAgIDE1NywgICAxMjQsICAgMTcxLCAgIDExNSwgICAxMjAsICAgMTYyLCAgIDEyOCwKKyAgICAgIDcyLCAgICA4MSwgICAgODIsICAgMTUzLCAgICA4MSwgICAgODIsICAgMTU0LCAgICA4MSwgICAgODIsICAgMTY2LAorICAgICAgODEsICAgIDgyLCAgIDE2NCwgICAxNjgsICAgMTY5LCAgIDE3MCwgICAxNzIsICAgMTczLCAgIDE3NCwgICAgNjUsCisgICAgICA3MSwgICAgODMsICAgICAwLCAgIDE1MCwgICAxMTEKIH07CiAKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHl5Y2hlY2tbXSA9CitzdGF0aWMgY29uc3Qgc2hvcnQgaW50IHl5Y2hlY2tbXSA9CiB7Ci0gICAgICA0OCwgICAgNDksICAgICAzLCAgICAzMiwgICAgIDQsICAgICA1LCAgICAzMCwgICAgIDcsICAgIDcxLCAgICA3MiwKLSAgICAgIDEwLCAgICAyOCwgICAgMTYsICAgIDE3LCAgICAzMywgICAgMTQsICAgIDQwLCAgICAyOCwgICAgMjksICAgIDM4LAotICAgICAgMzksICAgIDY5LCAgICA3MCwgICAgMzQsICAgIDg3LCAgICAyOCwgICAgNzQsICAgIDc1LCAgICAzMiwgICAgNzcsCi0gICAgICA0MSwgICAgNzksICAgMTMwLCAgICA4MSwgICAxMzIsICAgMTMzLCAgICAzMiwgICAxMzUsICAgIDM5LCAgICAzOCwKLSAgICAgIDM5LCAgIDEzOSwgICAgMzgsICAgIDM5LCAgICAzMiwgICAxNDMsICAgMTQ0LCAgICAzMiwgICAgIDAsICAgICAxLAotICAgICAgMzIsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsCi0gICAgICAyOCwgICAgMjksICAgIDE0LCAgICAxNSwgICAgMjgsICAgIDMyLCAgICAzNCwgICAgMzUsICAgMTY2LCAgICAzMSwKLSAgICAgIDMyLCAgICAzOCwgICAgMzksICAgIDQxLCAgICAyOCwgICAgMjksICAgIDc2LCAgIDE0MCwgICAxMjYsICAgIDMxLAotICAgICAgMzIsICAgICAwLCAgICAgMSwgICAgMzIsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsCi0gICAgICAgOSwgICAgMTAsICAgIDExLCAgICA5MywgICAgMzIsICAgIDE0LCAgICAxNSwgICAgMzIsICAgIDI4LCAgICAyOSwKLSAgICAgMTAxLCAgIDEwMiwgICAxMDMsICAgIDM4LCAgICAzOSwgICAgMzIsICAgMTU0LCAgICA4MCwgICAgMTMsICAgIDgyLAotICAgICAgODMsICAgIDg0LCAgICAzMSwgICAgMzIsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksCi0gICAgICAxMCwgICAgMTEsICAgIDk1LCAgICA5NiwgICAgMTQsICAgIDE1LCAgICAgNSwgICAgIDYsICAgIDMyLCAgICAgOCwKLSAgICAgICA5LCAgICAxMCwgICAgMTEsICAgIDMyLCAgICAyOCwgICAgMTQsICAgIDE1LCAgICAzOCwgICAgMzksICAgIDM4LAotICAgICAgMzksICAgIDMxLCAgICAzMiwgICAgNTQsICAgIDMyLCAgICAxNCwgICAgNTcsICAgIDU2LCAgICA1OSwgICAgNTgsCi0gICAgICAxMiwgICAgMzIsICAgIDMxLCAgICAzMiwgICAgMTYsICAgIDE3LCAgICAzOSwgICAgMTksICAgIDIwLCAgICAyMSwKLSAgICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDU1LCAgICA1NiwgICAgMzIsICAgIDU4LAotICAgICAgMzIsICAgIDU2LCAgICAxMiwgICAgNTgsICAgIDM2LCAgICAzNywgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksCi0gICAgICAyMCwgICAgMjEsICAgIDU2LCAgICAyMywgICAgNTgsICAgIDMyLCAgICAzMiwgICAgMzIsICAgIDMyLCAgICAzMiwKLSAgICAgIDMyLCAgICAzMiwgICAgMzIsICAgIDMyLCAgICAzMiwgICAgMzIsICAgIDMyLCAgICAzMiwgICAgMzIsICAgIDIxLAotICAgICAgNTQsICAgIDMzCisgICAgICAgNSwgICAgIDYsICAgICAwLCAgICAgOCwgICAgNTcsICAgIDU4LCAgICAxMSwgICAgODQsICAgIDg1LCAgICAzMCwKKyAgICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMzAsICAgIDk2LAorICAgICAgMTQsICAgIDE1LCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNSwgICAgMjYsICAgIDI5LCAgICA4MSwgICAgODIsCisgICAgICA2NiwgICAgMzAsICAgIDM0LCAgICA2OSwgICAgMzAsICAgIDcxLCAgICAzMCwgICAgOTAsICAgIDkxLCAgICAgMCwKKyAgICAgICAxLCAgICA5NCwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLAorICAgICAgMTEsICAgIDEyLCAgICAyNSwgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsCisgICAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNSwgICAgMjUsICAgIDI1LCAgICAyNiwgICAgIDEsICAgMTQ1LCAgICAzMCwKKyAgICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMzEsICAgIDMyLAorICAgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgMTM3LCAgICAyNSwgICAgMjYsICAgIDkyLCAgICAzMCwgICAgMjksCisgICAgICA2NiwgICAgMjUsICAgIDI3LCAgICA2OSwgICAgMzQsICAgIDcxLCAgICAzMCwgICAgNjgsICAgIDMzLCAgICA3MCwKKyAgICAgMTA1LCAgICAgMSwgICAxNTUsICAgICAwLCAgICAgMSwgICAgIDEsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LAorICAgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMzAsICAgIDE0LCAgICAxNSwgICAgMTYsCisgICAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgNjgsICAgIDI1LCAgICA3MCwKKyAgICAgIDI1LCAgICAgMCwgICAgIDEsICAgIDMwLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LAorICAgICAgIDksICAgIDEwLCAgICAxMSwgICAgMzAsICAgIDMwLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsCisgICAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDMwLCAgICAyNSwgICAgMzAsICAgIDMwLCAgICAgMCwKKyAgICAgICAxLCAgICAzMCwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLAorICAgICAgMTEsICAgIDMwLCAgICAzMCwgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMzAsICAgIDE4LCAgICAxOSwgICAgMjAsCisgICAgICAyMSwgICAgMjIsICAgIDIzLCAgICAgMSwgICAgMjUsICAgIDMwLCAgICAzMCwgICAgIDUsICAgICA2LCAgICAzMCwKKyAgICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgIDEsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LAorICAgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDE0LCAgICAgNSwgICAgIDYsICAgIDI1LCAgICAgOCwgICAgIDksCisgICAgICAxMCwgICAgMTEsICAgIDMwLCAgICAzMCwgICAgMTQsICAgIDE1LCAgIDE0MiwgICAxNDMsICAgMTQ0LCAgICAxMywKKyAgICAgIDI1LCAgICAzMSwgICAgMzIsICAgMTQ5LCAgICAyOCwgICAxNTEsICAgIDE0LCAgICAzMSwgICAgMzIsICAgIDMyLAorICAgICAgMzAsICAgIDY3LCAgICA2OCwgICAgMzAsICAgIDcwLCAgIDE2MSwgICAgNjcsICAgIDY4LCAgICAzMCwgICAgNzAsCisgICAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMCwKKyAgICAgIDMxLCAgICAzMiwgICAgMzAsICAgIDMwLCAgICAzMCwgICAgMzAsICAgIDMwLCAgICAzMCwgICAgMzAsICAgIDI5LAorICAgICAgNDAsICAgIDU5LCAgICAtMSwgICAxMDYsICAgIDY2CiB9OwogCiAvKiBZWVNUT1NbU1RBVEUtTlVNXSAtLSBUaGUgKGludGVybmFsIG51bWJlciBvZiB0aGUpIGFjY2Vzc2luZwogICAgc3ltYm9sIG9mIHN0YXRlIFNUQVRFLU5VTS4gICovCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciB5eXN0b3NbXSA9CiB7Ci0gICAgICAgMCwgICAgNDMsICAgICAwLCAgICAgMSwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwKLSAgICAgICA5LCAgICAxMCwgICAgMTEsICAgIDE0LCAgICAxNSwgICAgMzEsICAgIDMyLCAgICA0NCwgICAgNDUsICAgIDQ2LAotICAgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTIsICAgIDUzLCAgICA1NSwgICAgNTksICAgIDYxLCAgICA2MywgICAgNjQsCi0gICAgICA2NiwgICAgNjgsICAgIDY5LCAgICA3MCwgICAgNzEsICAgIDc5LCAgICA3OSwgICAgMjgsICAgIDI5LCAgICA3NywKLSAgICAgIDc3LCAgICA3NywgICAgMzIsICAgIDc3LCAgICAyOCwgICAgMjgsICAgIDI4LCAgICAyOSwgICAgMzQsICAgIDQxLAotICAgICAgODEsICAgIDgyLCAgICA1MCwgICAgNTAsICAgIDU2LCAgICA1OCwgICAgNjIsICAgIDc0LCAgICA2NywgICAgNzQsCi0gICAgICA3OSwgICAgMzIsICAgIDMyLCAgICAzMiwgICAgMzIsICAgIDMyLCAgICA4MSwgICAgODEsICAgIDMyLCAgICAzOCwKLSAgICAgIDM5LCAgICAzMCwgICAgNDAsICAgIDEyLCAgICAxNiwgICAgMTcsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLAotICAgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAzMiwgICAgMzYsICAgIDM3LCAgICA1MSwgICAgNzIsCi0gICAgICA3MywgICAgNzUsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMywgICAgMzIsICAgIDU3LCAgICA3MywKLSAgICAgIDc1LCAgICAgNSwgICAgIDgsICAgIDE1LCAgICA0NSwgICAgNTQsICAgIDc4LCAgICA0NSwgICAgNTUsICAgIDYwLAotICAgICAgNjYsICAgIDc4LCAgICAzMiwgICAgNzUsICAgICAxLCAgICA0NSwgICAgNTUsICAgIDY1LCAgICA2NiwgICAgNzgsCi0gICAgICAzMywgICAgODEsICAgIDgxLCAgICA4MiwgICAgODIsICAgIDMyLCAgICAzNSwgICAgODEsICAgIDgxLCAgICA3NywKLSAgICAgIDgxLCAgICA3NiwgICAgNzcsICAgIDgxLCAgICA3NiwgICAgODEsICAgIDc2LCAgICA3NiwgICAgNzYsICAgIDI4LAotICAgICAgODIsICAgIDEzLCAgICAzMiwgICAgNzcsICAgIDI4LCAgICA3NiwgICAgNzYsICAgIDc5LCAgICA3OSwgICAgNzksCi0gICAgICAzMiwgICAgODEsICAgIDMyLCAgICAzMiwgICAgMTQsICAgIDgwLCAgICA4MCwgICAgMzIsICAgIDgwLCAgICA4MCwKLSAgICAgIDMyLCAgICA4MCwgICAgMzIsICAgIDMyLCAgICAzMiwgICAgODAsICAgIDgyLCAgICA4MCwgICAgODAsICAgIDMyLAotICAgICAgMzIsICAgIDMyLCAgICA4MSwgICAgMzIsICAgIDMyLCAgICAzMiwgICAgMzIsICAgIDMyLCAgICA4MCwgICAgMzIsCi0gICAgICAzMiwgICAgMzIKKyAgICAgICAwLCAgICAzNiwgICAgMzcsICAgICAwLCAgICAgMSwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LAorICAgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE4LCAgICAxOSwgICAgMjAsCisgICAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNSwgICAgMzAsICAgIDM4LCAgICAzOSwgICAgNDEsICAgIDQyLCAgICA0MywKKyAgICAgIDQ0LCAgICA0NywgICAgNDgsICAgIDUwLCAgICA1NCwgICAgNTYsICAgIDU4LCAgICA1OSwgICAgNjEsICAgIDYzLAorICAgICAgNjQsICAgIDY1LCAgICA3MiwgICAgMzAsICAgIDI1LCAgICAyNiwgICAgNzEsICAgIDcxLCAgICAzMCwgICAgNzEsCisgICAgICAzMCwgICAgMzAsICAgIDcxLCAgICAyNSwgICAgMjUsICAgIDI1LCAgICAyNiwgICAgMjksICAgIDM0LCAgICA3NSwKKyAgICAgIDc2LCAgICAzMCwgICAgIDEsICAgICAxLCAgICA0NSwgICAgNDUsICAgIDUxLCAgICA1MywgICAgNTcsICAgIDY4LAorICAgICAgNjIsICAgIDY4LCAgICAzMCwgICAgNzMsICAgIDMwLCAgICAzMCwgICAgMzAsICAgIDMwLCAgICAzMCwgICAgNzUsCisgICAgICA3NSwgICAgMzEsICAgIDMyLCAgICA3MywgICAgMjcsICAgIDMzLCAgICAzMCwgICAgMzAsICAgICAxLCAgICAxMiwKKyAgICAgIDE2LCAgICAxNywgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNSwgICAgMzAsICAgIDQwLAorICAgICAgNDYsICAgIDY2LCAgICA2NywgICAgNjksICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAzMCwgICAgNDAsCisgICAgICA1MiwgICAgNjcsICAgIDY5LCAgICAzOSwgICAgNDksICAgIDcyLCAgICAzOSwgICAgNTAsICAgIDU1LCAgICA2MSwKKyAgICAgIDcyLCAgICAzMCwgICAgNDAsICAgIDY5LCAgICAzOSwgICAgNTAsICAgIDYwLCAgICA2MSwgICAgNzIsICAgIDMwLAorICAgICAgMjgsICAgIDc1LCAgICA3NSwgICAgNzYsICAgIDc2LCAgICAzMCwgICAgMzAsICAgIDI0LCAgICA3NSwgICAgNzUsCisgICAgICA3MSwgICAgNzAsICAgIDcxLCAgICA3NSwgICAgMjUsICAgIDc2LCAgICAgMSwgICAgMTMsICAgIDMwLCAgICA3MSwKKyAgICAgIDcwLCAgICAyNSwgICAgNzUsICAgIDMwLCAgICAzMCwgICAgMTQsICAgIDc0LCAgICAzMCwgICAgNzQsICAgIDc0LAorICAgICAgNzQsICAgIDc2LCAgICAzMCwgICAgNzQsICAgIDMwLCAgICA3NCwgICAgMzAsICAgIDc1LCAgICAzMCwgICAgMzAsCisgICAgICAzMCwgICAgNzQsICAgIDMwLCAgICAzMCwgICAgMzAKIH07CiAKICNpZiAhIGRlZmluZWQgKFlZU0laRV9UKSAmJiBkZWZpbmVkIChfX1NJWkVfVFlQRV9fKQpAQCAtNjg3LDcgKzY4Nyw3IEBACiAKICNkZWZpbmUgWVlBQ0NFUFQJZ290byB5eWFjY2VwdGxhYgogI2RlZmluZSBZWUFCT1JUCQlnb3RvIHl5YWJvcnRsYWIKLSNkZWZpbmUgWVlFUlJPUgkJZ290byB5eWVycmxhYjEKKyNkZWZpbmUgWVlFUlJPUgkJZ290byB5eWVycm9ybGFiCiAKIAogLyogTGlrZSBZWUVSUk9SIGV4Y2VwdCBkbyBjYWxsIHl5ZXJyb3IuICBUaGlzIHJlbWFpbnMgaGVyZSB0ZW1wb3JhcmlseQpAQCAtNzE1LDIwICs3MTUsNTMgQEAKICAgICB9CQkJCQkJCQlcCiB3aGlsZSAoMCkKIAorCiAjZGVmaW5lIFlZVEVSUk9SCTEKICNkZWZpbmUgWVlFUlJDT0RFCTI1NgogCi0vKiBZWUxMT0NfREVGQVVMVCAtLSBDb21wdXRlIHRoZSBkZWZhdWx0IGxvY2F0aW9uIChiZWZvcmUgdGhlIGFjdGlvbnMKLSAgIGFyZSBydW4pLiAgKi8KIAorLyogWVlMTE9DX0RFRkFVTFQgLS0gU2V0IENVUlJFTlQgdG8gc3BhbiBmcm9tIFJIU1sxXSB0byBSSFNbTl0uCisgICBJZiBOIGlzIDAsIHRoZW4gc2V0IENVUlJFTlQgdG8gdGhlIGVtcHR5IGxvY2F0aW9uIHdoaWNoIGVuZHMKKyAgIHRoZSBwcmV2aW91cyBzeW1ib2w6IFJIU1swXSAoYWx3YXlzIGRlZmluZWQpLiAgKi8KKworI2RlZmluZSBZWVJIU0xPQyhSaHMsIEspICgoUmhzKVtLXSkKICNpZm5kZWYgWVlMTE9DX0RFRkFVTFQKLSMgZGVmaW5lIFlZTExPQ19ERUZBVUxUKEN1cnJlbnQsIFJocywgTikgICAgICAgICBcCi0gIEN1cnJlbnQuZmlyc3RfbGluZSAgID0gUmhzWzFdLmZpcnN0X2xpbmU7ICAgICAgXAotICBDdXJyZW50LmZpcnN0X2NvbHVtbiA9IFJoc1sxXS5maXJzdF9jb2x1bW47ICAgIFwKLSAgQ3VycmVudC5sYXN0X2xpbmUgICAgPSBSaHNbTl0ubGFzdF9saW5lOyAgICAgICBcCi0gIEN1cnJlbnQubGFzdF9jb2x1bW4gID0gUmhzW05dLmxhc3RfY29sdW1uOworIyBkZWZpbmUgWVlMTE9DX0RFRkFVTFQoQ3VycmVudCwgUmhzLCBOKQkJCQlcCisgICAgZG8JCQkJCQkJCQlcCisgICAgICBpZiAoTikJCQkJCQkJCVwKKwl7CQkJCQkJCQlcCisJICAoQ3VycmVudCkuZmlyc3RfbGluZSAgID0gWVlSSFNMT0MgKFJocywgMSkuZmlyc3RfbGluZTsJXAorCSAgKEN1cnJlbnQpLmZpcnN0X2NvbHVtbiA9IFlZUkhTTE9DIChSaHMsIDEpLmZpcnN0X2NvbHVtbjsJXAorCSAgKEN1cnJlbnQpLmxhc3RfbGluZSAgICA9IFlZUkhTTE9DIChSaHMsIE4pLmxhc3RfbGluZTsJCVwKKwkgIChDdXJyZW50KS5sYXN0X2NvbHVtbiAgPSBZWVJIU0xPQyAoUmhzLCBOKS5sYXN0X2NvbHVtbjsJXAorCX0JCQkJCQkJCVwKKyAgICAgIGVsc2UJCQkJCQkJCVwKKwl7CQkJCQkJCQlcCisJICAoQ3VycmVudCkuZmlyc3RfbGluZSAgID0gKEN1cnJlbnQpLmxhc3RfbGluZSAgID0JCVwKKwkgICAgWVlSSFNMT0MgKFJocywgMCkubGFzdF9saW5lOwkJCQlcCisJICAoQ3VycmVudCkuZmlyc3RfY29sdW1uID0gKEN1cnJlbnQpLmxhc3RfY29sdW1uID0JCVwKKwkgICAgWVlSSFNMT0MgKFJocywgMCkubGFzdF9jb2x1bW47CQkJCVwKKwl9CQkJCQkJCQlcCisgICAgd2hpbGUgKDApCiAjZW5kaWYKIAorCisvKiBZWV9MT0NBVElPTl9QUklOVCAtLSBQcmludCB0aGUgbG9jYXRpb24gb24gdGhlIHN0cmVhbS4KKyAgIFRoaXMgbWFjcm8gd2FzIG5vdCBtYW5kYXRlZCBvcmlnaW5hbGx5OiBkZWZpbmUgb25seSBpZiB3ZSBrbm93CisgICB3ZSB3b24ndCBicmVhayB1c2VyIGNvZGU6IHdoZW4gdGhlc2UgYXJlIHRoZSBsb2NhdGlvbnMgd2Uga25vdy4gICovCisKKyNpZm5kZWYgWVlfTE9DQVRJT05fUFJJTlQKKyMgaWYgWVlMVFlQRV9JU19UUklWSUFMCisjICBkZWZpbmUgWVlfTE9DQVRJT05fUFJJTlQoRmlsZSwgTG9jKQkJCVwKKyAgICAgZnByaW50ZiAoRmlsZSwgIiVkLiVkLSVkLiVkIiwJCQlcCisgICAgICAgICAgICAgIChMb2MpLmZpcnN0X2xpbmUsIChMb2MpLmZpcnN0X2NvbHVtbiwJXAorICAgICAgICAgICAgICAoTG9jKS5sYXN0X2xpbmUsICAoTG9jKS5sYXN0X2NvbHVtbikKKyMgZWxzZQorIyAgZGVmaW5lIFlZX0xPQ0FUSU9OX1BSSU5UKEZpbGUsIExvYykgKCh2b2lkKSAwKQorIyBlbmRpZgorI2VuZGlmCisKKwogLyogWVlMRVggLS0gY2FsbGluZyBgeXlsZXgnIHdpdGggdGhlIHJpZ2h0IGFyZ3VtZW50cy4gICovCiAKICNpZmRlZiBZWUxFWF9QQVJBTQpAQCAtNzUxLDM2ICs3ODQsMzAgQEAKICAgICBZWUZQUklOVEYgQXJnczsJCQkJXAogfSB3aGlsZSAoMCkKIAotIyBkZWZpbmUgWVlEU1lNUFJJTlQoQXJncykJCQlcCi1kbyB7CQkJCQkJXAotICBpZiAoeXlkZWJ1ZykJCQkJCVwKLSAgICB5eXN5bXByaW50IEFyZ3M7CQkJCVwKLX0gd2hpbGUgKDApCi0KLSMgZGVmaW5lIFlZRFNZTVBSSU5URihUaXRsZSwgVG9rZW4sIFZhbHVlLCBMb2NhdGlvbikJCVwKKyMgZGVmaW5lIFlZX1NZTUJPTF9QUklOVChUaXRsZSwgVHlwZSwgVmFsdWUsIExvY2F0aW9uKQkJXAogZG8gewkJCQkJCQkJXAogICBpZiAoeXlkZWJ1ZykJCQkJCQkJXAogICAgIHsJCQkJCQkJCVwKICAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiJXMgIiwgVGl0bGUpOwkJCQlcCiAgICAgICB5eXN5bXByaW50IChzdGRlcnIsIAkJCQkJXAotICAgICAgICAgICAgICAgICAgVG9rZW4sIFZhbHVlKTsJXAorICAgICAgICAgICAgICAgICAgVHlwZSwgVmFsdWUpOwlcCiAgICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIlxuIik7CQkJCQlcCiAgICAgfQkJCQkJCQkJXAogfSB3aGlsZSAoMCkKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCiB8IHl5X3N0YWNrX3ByaW50IC0tIFByaW50IHRoZSBzdGF0ZSBzdGFjayBmcm9tIGl0cyBCT1RUT00gdXAgdG8gaXRzIHwKLXwgVE9QIChjaW5sdWRlZCkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCBUT1AgKGluY2x1ZGVkKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogI2lmIGRlZmluZWQgKF9fU1REQ19fKSB8fCBkZWZpbmVkIChfX2NwbHVzcGx1cykKIHN0YXRpYyB2b2lkCi15eV9zdGFja19wcmludCAoc2hvcnQgKmJvdHRvbSwgc2hvcnQgKnRvcCkKK3l5X3N0YWNrX3ByaW50IChzaG9ydCBpbnQgKmJvdHRvbSwgc2hvcnQgaW50ICp0b3ApCiAjZWxzZQogc3RhdGljIHZvaWQKIHl5X3N0YWNrX3ByaW50IChib3R0b20sIHRvcCkKLSAgICBzaG9ydCAqYm90dG9tOwotICAgIHNob3J0ICp0b3A7CisgICAgc2hvcnQgaW50ICpib3R0b207CisgICAgc2hvcnQgaW50ICp0b3A7CiAjZW5kaWYKIHsKICAgWVlGUFJJTlRGIChzdGRlcnIsICJTdGFjayBub3ciKTsKQEAgLTgxMCw5ICs4MzcsOSBAQAogI2VuZGlmCiB7CiAgIGludCB5eWk7Ci0gIHVuc2lnbmVkIGludCB5eWxpbmVubyA9IHl5cmxpbmVbeXlydWxlXTsKKyAgdW5zaWduZWQgaW50IHl5bG5vID0geXlybGluZVt5eXJ1bGVdOwogICBZWUZQUklOVEYgKHN0ZGVyciwgIlJlZHVjaW5nIHN0YWNrIGJ5IHJ1bGUgJWQgKGxpbmUgJXUpLCAiLAotICAgICAgICAgICAgIHl5cnVsZSAtIDEsIHl5bGluZW5vKTsKKyAgICAgICAgICAgICB5eXJ1bGUgLSAxLCB5eWxubyk7CiAgIC8qIFByaW50IHRoZSBzeW1ib2xzIGJlaW5nIHJlZHVjZWQsIGFuZCB0aGVpciByZXN1bHQuICAqLwogICBmb3IgKHl5aSA9IHl5cHJoc1t5eXJ1bGVdOyAwIDw9IHl5cmhzW3l5aV07IHl5aSsrKQogICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiJXMgIiwgeXl0bmFtZSBbeXlyaHNbeXlpXV0pOwpAQCAtODMwLDggKzg1Nyw3IEBACiBpbnQgeXlkZWJ1ZzsKICNlbHNlIC8qICFZWURFQlVHICovCiAjIGRlZmluZSBZWURQUklOVEYoQXJncykKLSMgZGVmaW5lIFlZRFNZTVBSSU5UKEFyZ3MpCi0jIGRlZmluZSBZWURTWU1QUklOVEYoVGl0bGUsIFRva2VuLCBWYWx1ZSwgTG9jYXRpb24pCisjIGRlZmluZSBZWV9TWU1CT0xfUFJJTlQoVGl0bGUsIFR5cGUsIFZhbHVlLCBMb2NhdGlvbikKICMgZGVmaW5lIFlZX1NUQUNLX1BSSU5UKEJvdHRvbSwgVG9wKQogIyBkZWZpbmUgWVlfUkVEVUNFX1BSSU5UKFJ1bGUpCiAjZW5kaWYgLyogIVlZREVCVUcgKi8KQEAgLTg0OSwxMCArODc1LDYgQEAKICAgIFNJWkVfTUFYIDwgWVlTVEFDS19CWVRFUyAoWVlNQVhERVBUSCkKICAgIGV2YWx1YXRlZCB3aXRoIGluZmluaXRlLXByZWNpc2lvbiBpbnRlZ2VyIGFyaXRobWV0aWMuICAqLwogCi0jaWYgWVlNQVhERVBUSCA9PSAwCi0jIHVuZGVmIFlZTUFYREVQVEgKLSNlbmRpZgotCiAjaWZuZGVmIFlZTUFYREVQVEgKICMgZGVmaW5lIFlZTUFYREVQVEggMTAwMDAKICNlbmRpZgpAQCAtOTM0LDE1ICs5NTYsMTUgQEAKICAgKHZvaWQpIHl5dmFsdWVwOwogCiAgIGlmICh5eXR5cGUgPCBZWU5UT0tFTlMpCi0gICAgewotICAgICAgWVlGUFJJTlRGICh5eW91dHB1dCwgInRva2VuICVzICgiLCB5eXRuYW1lW3l5dHlwZV0pOwotIyBpZmRlZiBZWVBSSU5UCi0gICAgICBZWVBSSU5UICh5eW91dHB1dCwgeXl0b2tudW1beXl0eXBlXSwgKnl5dmFsdWVwKTsKLSMgZW5kaWYKLSAgICB9CisgICAgWVlGUFJJTlRGICh5eW91dHB1dCwgInRva2VuICVzICgiLCB5eXRuYW1lW3l5dHlwZV0pOwogICBlbHNlCiAgICAgWVlGUFJJTlRGICh5eW91dHB1dCwgIm50ZXJtICVzICgiLCB5eXRuYW1lW3l5dHlwZV0pOwogCisKKyMgaWZkZWYgWVlQUklOVAorICBpZiAoeXl0eXBlIDwgWVlOVE9LRU5TKQorICAgIFlZUFJJTlQgKHl5b3V0cHV0LCB5eXRva251bVt5eXR5cGVdLCAqeXl2YWx1ZXApOworIyBlbmRpZgogICBzd2l0Y2ggKHl5dHlwZSkKICAgICB7CiAgICAgICBkZWZhdWx0OgpAQCAtOTU4LDEwICs5ODAsMTEgQEAKIAogI2lmIGRlZmluZWQgKF9fU1REQ19fKSB8fCBkZWZpbmVkIChfX2NwbHVzcGx1cykKIHN0YXRpYyB2b2lkCi15eWRlc3RydWN0IChpbnQgeXl0eXBlLCBZWVNUWVBFICp5eXZhbHVlcCkKK3l5ZGVzdHJ1Y3QgKGNvbnN0IGNoYXIgKnl5bXNnLCBpbnQgeXl0eXBlLCBZWVNUWVBFICp5eXZhbHVlcCkKICNlbHNlCiBzdGF0aWMgdm9pZAoteXlkZXN0cnVjdCAoeXl0eXBlLCB5eXZhbHVlcCkKK3l5ZGVzdHJ1Y3QgKHl5bXNnLCB5eXR5cGUsIHl5dmFsdWVwKQorICAgIGNvbnN0IGNoYXIgKnl5bXNnOwogICAgIGludCB5eXR5cGU7CiAgICAgWVlTVFlQRSAqeXl2YWx1ZXA7CiAjZW5kaWYKQEAgLTk2OSw4ICs5OTIsNDIgQEAKICAgLyogUGFjaWZ5IGBgdW51c2VkIHZhcmlhYmxlJycgd2FybmluZ3MuICAqLwogICAodm9pZCkgeXl2YWx1ZXA7CiAKKyAgaWYgKCF5eW1zZykKKyAgICB5eW1zZyA9ICJEZWxldGluZyI7CisgIFlZX1NZTUJPTF9QUklOVCAoeXltc2csIHl5dHlwZSwgeXl2YWx1ZXAsIHl5bG9jYXRpb25wKTsKKwogICBzd2l0Y2ggKHl5dHlwZSkKICAgICB7CisgICAgICBjYXNlIDQ4OiAvKiBjaG9pY2VfZW50cnkgKi8KKworICAgICAgICB7CisJZnByaW50ZihzdGRlcnIsICIlczolZDogbWlzc2luZyBlbmQgc3RhdGVtZW50IGZvciB0aGlzIGVudHJ5XG4iLAorCQkoeXl2YWx1ZXAtPm1lbnUpLT5maWxlLT5uYW1lLCAoeXl2YWx1ZXAtPm1lbnUpLT5saW5lbm8pOworCWlmIChjdXJyZW50X21lbnUgPT0gKHl5dmFsdWVwLT5tZW51KSkKKwkJbWVudV9lbmRfbWVudSgpOworfTsKKworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgNTQ6IC8qIGlmX2VudHJ5ICovCisKKyAgICAgICAgeworCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IG1pc3NpbmcgZW5kIHN0YXRlbWVudCBmb3IgdGhpcyBlbnRyeVxuIiwKKwkJKHl5dmFsdWVwLT5tZW51KS0+ZmlsZS0+bmFtZSwgKHl5dmFsdWVwLT5tZW51KS0+bGluZW5vKTsKKwlpZiAoY3VycmVudF9tZW51ID09ICh5eXZhbHVlcC0+bWVudSkpCisJCW1lbnVfZW5kX21lbnUoKTsKK307CisKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIDU5OiAvKiBtZW51X2VudHJ5ICovCisKKyAgICAgICAgeworCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IG1pc3NpbmcgZW5kIHN0YXRlbWVudCBmb3IgdGhpcyBlbnRyeVxuIiwKKwkJKHl5dmFsdWVwLT5tZW51KS0+ZmlsZS0+bmFtZSwgKHl5dmFsdWVwLT5tZW51KS0+bGluZW5vKTsKKwlpZiAoY3VycmVudF9tZW51ID09ICh5eXZhbHVlcC0+bWVudSkpCisJCW1lbnVfZW5kX21lbnUoKTsKK307CisKKyAgICAgICAgYnJlYWs7CiAKICAgICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwpAQCAtOTk2LDEwICsxMDUzLDEwIEBACiAKIAogCi0vKiBUaGUgbG9va2FoZWFkIHN5bWJvbC4gICovCisvKiBUaGUgbG9vay1haGVhZCBzeW1ib2wuICAqLwogaW50IHl5Y2hhcjsKIAotLyogVGhlIHNlbWFudGljIHZhbHVlIG9mIHRoZSBsb29rYWhlYWQgc3ltYm9sLiAgKi8KKy8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBvZiB0aGUgbG9vay1haGVhZCBzeW1ib2wuICAqLwogWVlTVFlQRSB5eWx2YWw7CiAKIC8qIE51bWJlciBvZiBzeW50YXggZXJyb3JzIHNvIGZhci4gICovCkBAIC0xMDM1LDcgKzEwOTIsNyBAQAogICBpbnQgeXlyZXN1bHQ7CiAgIC8qIE51bWJlciBvZiB0b2tlbnMgdG8gc2hpZnQgYmVmb3JlIGVycm9yIG1lc3NhZ2VzIGVuYWJsZWQuICAqLwogICBpbnQgeXllcnJzdGF0dXM7Ci0gIC8qIExvb2thaGVhZCB0b2tlbiBhcyBhbiBpbnRlcm5hbCAodHJhbnNsYXRlZCkgdG9rZW4gbnVtYmVyLiAgKi8KKyAgLyogTG9vay1haGVhZCB0b2tlbiBhcyBhbiBpbnRlcm5hbCAodHJhbnNsYXRlZCkgdG9rZW4gbnVtYmVyLiAgKi8KICAgaW50IHl5dG9rZW4gPSAwOwogCiAgIC8qIFRocmVlIHN0YWNrcyBhbmQgdGhlaXIgdG9vbHM6CkBAIC0xMDQ3LDkgKzExMDQsOSBAQAogICAgICB0byByZWFsbG9jYXRlIHRoZW0gZWxzZXdoZXJlLiAgKi8KIAogICAvKiBUaGUgc3RhdGUgc3RhY2suICAqLwotICBzaG9ydAl5eXNzYVtZWUlOSVRERVBUSF07Ci0gIHNob3J0ICp5eXNzID0geXlzc2E7Ci0gIHJlZ2lzdGVyIHNob3J0ICp5eXNzcDsKKyAgc2hvcnQgaW50IHl5c3NhW1lZSU5JVERFUFRIXTsKKyAgc2hvcnQgaW50ICp5eXNzID0geXlzc2E7CisgIHJlZ2lzdGVyIHNob3J0IGludCAqeXlzc3A7CiAKICAgLyogVGhlIHNlbWFudGljIHZhbHVlIHN0YWNrLiAgKi8KICAgWVlTVFlQRSB5eXZzYVtZWUlOSVRERVBUSF07CkBAIC0xMDg2LDYgKzExNDMsOSBAQAogICB5eXNzcCA9IHl5c3M7CiAgIHl5dnNwID0geXl2czsKIAorCisgIHl5dnNwWzBdID0geXlsdmFsOworCiAgIGdvdG8geXlzZXRzdGF0ZTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCkBAIC0xMTExLDcgKzExNzEsNyBAQAogCSAgIHRoZXNlIHNvIHRoYXQgdGhlICYncyBkb24ndCBmb3JjZSB0aGUgcmVhbCBvbmVzIGludG8KIAkgICBtZW1vcnkuICAqLwogCVlZU1RZUEUgKnl5dnMxID0geXl2czsKLQlzaG9ydCAqeXlzczEgPSB5eXNzOworCXNob3J0IGludCAqeXlzczEgPSB5eXNzOwogCiAKIAkvKiBFYWNoIHN0YWNrIHBvaW50ZXIgYWRkcmVzcyBpcyBmb2xsb3dlZCBieSB0aGUgc2l6ZSBvZiB0aGUKQEAgLTExMzksNyArMTE5OSw3IEBACiAJeXlzdGFja3NpemUgPSBZWU1BWERFUFRIOwogCiAgICAgICB7Ci0Jc2hvcnQgKnl5c3MxID0geXlzczsKKwlzaG9ydCBpbnQgKnl5c3MxID0geXlzczsKIAl1bmlvbiB5eWFsbG9jICp5eXB0ciA9CiAJICAodW5pb24geXlhbGxvYyAqKSBZWVNUQUNLX0FMTE9DIChZWVNUQUNLX0JZVEVTICh5eXN0YWNrc2l6ZSkpOwogCWlmICghIHl5cHRyKQpAQCAtMTE3NSwxOCArMTIzNSwxOCBAQAogeXliYWNrdXA6CiAKIC8qIERvIGFwcHJvcHJpYXRlIHByb2Nlc3NpbmcgZ2l2ZW4gdGhlIGN1cnJlbnQgc3RhdGUuICAqLwotLyogUmVhZCBhIGxvb2thaGVhZCB0b2tlbiBpZiB3ZSBuZWVkIG9uZSBhbmQgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCisvKiBSZWFkIGEgbG9vay1haGVhZCB0b2tlbiBpZiB3ZSBuZWVkIG9uZSBhbmQgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCiAvKiB5eXJlc3VtZTogKi8KIAotICAvKiBGaXJzdCB0cnkgdG8gZGVjaWRlIHdoYXQgdG8gZG8gd2l0aG91dCByZWZlcmVuY2UgdG8gbG9va2FoZWFkIHRva2VuLiAgKi8KKyAgLyogRmlyc3QgdHJ5IHRvIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGhvdXQgcmVmZXJlbmNlIHRvIGxvb2stYWhlYWQgdG9rZW4uICAqLwogCiAgIHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKICAgaWYgKHl5biA9PSBZWVBBQ1RfTklORikKICAgICBnb3RvIHl5ZGVmYXVsdDsKIAotICAvKiBOb3Qga25vd24gPT4gZ2V0IGEgbG9va2FoZWFkIHRva2VuIGlmIGRvbid0IGFscmVhZHkgaGF2ZSBvbmUuICAqLworICAvKiBOb3Qga25vd24gPT4gZ2V0IGEgbG9vay1haGVhZCB0b2tlbiBpZiBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAgKi8KIAotICAvKiBZWUNIQVIgaXMgZWl0aGVyIFlZRU1QVFkgb3IgWVlFT0Ygb3IgYSB2YWxpZCBsb29rYWhlYWQgc3ltYm9sLiAgKi8KKyAgLyogWVlDSEFSIGlzIGVpdGhlciBZWUVNUFRZIG9yIFlZRU9GIG9yIGEgdmFsaWQgbG9vay1haGVhZCBzeW1ib2wuICAqLwogICBpZiAoeXljaGFyID09IFlZRU1QVFkpCiAgICAgewogICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiUmVhZGluZyBhIHRva2VuOiAiKSk7CkBAIC0xMjAxLDcgKzEyNjEsNyBAQAogICBlbHNlCiAgICAgewogICAgICAgeXl0b2tlbiA9IFlZVFJBTlNMQVRFICh5eWNoYXIpOwotICAgICAgWVlEU1lNUFJJTlRGICgiTmV4dCB0b2tlbiBpcyIsIHl5dG9rZW4sICZ5eWx2YWwsICZ5eWxsb2MpOworICAgICAgWVlfU1lNQk9MX1BSSU5UICgiTmV4dCB0b2tlbiBpcyIsIHl5dG9rZW4sICZ5eWx2YWwsICZ5eWxsb2MpOwogICAgIH0KIAogICAvKiBJZiB0aGUgcHJvcGVyIGFjdGlvbiBvbiBzZWVpbmcgdG9rZW4gWVlUT0tFTiBpcyB0byByZWR1Y2Ugb3IgdG8KQEAgLTEyMjEsOCArMTI4MSw4IEBACiAgIGlmICh5eW4gPT0gWVlGSU5BTCkKICAgICBZWUFDQ0VQVDsKIAotICAvKiBTaGlmdCB0aGUgbG9va2FoZWFkIHRva2VuLiAgKi8KLSAgWVlEUFJJTlRGICgoc3RkZXJyLCAiU2hpZnRpbmcgdG9rZW4gJXMsICIsIHl5dG5hbWVbeXl0b2tlbl0pKTsKKyAgLyogU2hpZnQgdGhlIGxvb2stYWhlYWQgdG9rZW4uICAqLworICBZWV9TWU1CT0xfUFJJTlQgKCJTaGlmdGluZyIsIHl5dG9rZW4sICZ5eWx2YWwsICZ5eWxsb2MpOwogCiAgIC8qIERpc2NhcmQgdGhlIHRva2VuIGJlaW5nIHNoaWZ0ZWQgdW5sZXNzIGl0IGlzIGVvZi4gICovCiAgIGlmICh5eWNoYXIgIT0gWVlFT0YpCkBAIC0xMjczLDM1ICsxMzMzLDQ3IEBACiAgICAgewogICAgICAgICBjYXNlIDg6CiAKLSAgICB7IHpjb25mcHJpbnQoInVuZXhwZWN0ZWQgJ2VuZG1lbnUnIHN0YXRlbWVudCIpOyA7fQorICAgIHsgemNvbmZfZXJyb3IoInVuZXhwZWN0ZWQgZW5kIHN0YXRlbWVudCIpOyA7fQogICAgIGJyZWFrOwogCiAgIGNhc2UgOToKIAotICAgIHsgemNvbmZwcmludCgidW5leHBlY3RlZCAnZW5kaWYnIHN0YXRlbWVudCIpOyA7fQorICAgIHsgemNvbmZfZXJyb3IoInVua25vd24gc3RhdGVtZW50IFwiJXNcIiIsICh5eXZzcFstMl0uc3RyaW5nKSk7IDt9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMDoKIAotICAgIHsgemNvbmZwcmludCgidW5leHBlY3RlZCAnZW5kY2hvaWNlJyBzdGF0ZW1lbnQiKTsgO30KKyAgICB7CisJemNvbmZfZXJyb3IoInVuZXhwZWN0ZWQgb3B0aW9uIFwiJXNcIiIsIGtjb25mX2lkX3N0cmluZ3MgKyAoeXl2c3BbLTJdLmlkKS0+bmFtZSk7Cis7fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTE6CiAKLSAgICB7IHpjb25mcHJpbnQoInN5bnRheCBlcnJvciIpOyB5eWVycm9rOyA7fQorICAgIHsgemNvbmZfZXJyb3IoImludmFsaWQgc3RhdGVtZW50Iik7IDt9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxODoKKyAgY2FzZSAyNToKKworICAgIHsgemNvbmZfZXJyb3IoInVua25vd24gb3B0aW9uIFwiJXNcIiIsICh5eXZzcFstMl0uc3RyaW5nKSk7IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyNjoKKworICAgIHsgemNvbmZfZXJyb3IoImludmFsaWQgb3B0aW9uIik7IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyNzoKIAogICAgIHsKLQlzdHJ1Y3Qgc3ltYm9sICpzeW0gPSBzeW1fbG9va3VwKHl5dnNwWy0xXS5zdHJpbmcsIDApOworCXN0cnVjdCBzeW1ib2wgKnN5bSA9IHN5bV9sb29rdXAoKHl5dnNwWy0xXS5zdHJpbmcpLCAwKTsKIAlzeW0tPmZsYWdzIHw9IFNZTUJPTF9PUFRJT05BTDsKIAltZW51X2FkZF9lbnRyeShzeW0pOwotCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmNvbmZpZyAlc1xuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSwgeXl2c3BbLTFdLnN0cmluZyk7CisJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6Y29uZmlnICVzXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpLCAoeXl2c3BbLTFdLnN0cmluZykpOwogO30KICAgICBicmVhazsKIAotICBjYXNlIDE5OgorICBjYXNlIDI4OgogCiAgICAgewogCW1lbnVfZW5kX2VudHJ5KCk7CkBAIC0xMzA5LDE3ICsxMzgxLDE3IEBACiA7fQogICAgIGJyZWFrOwogCi0gIGNhc2UgMjA6CisgIGNhc2UgMjk6CiAKICAgICB7Ci0Jc3RydWN0IHN5bWJvbCAqc3ltID0gc3ltX2xvb2t1cCh5eXZzcFstMV0uc3RyaW5nLCAwKTsKKwlzdHJ1Y3Qgc3ltYm9sICpzeW0gPSBzeW1fbG9va3VwKCh5eXZzcFstMV0uc3RyaW5nKSwgMCk7CiAJc3ltLT5mbGFncyB8PSBTWU1CT0xfT1BUSU9OQUw7CiAJbWVudV9hZGRfZW50cnkoc3ltKTsKLQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDptZW51Y29uZmlnICVzXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpLCB5eXZzcFstMV0uc3RyaW5nKTsKKwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDptZW51Y29uZmlnICVzXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpLCAoeXl2c3BbLTFdLnN0cmluZykpOwogO30KICAgICBicmVhazsKIAotICBjYXNlIDIxOgorICBjYXNlIDMwOgogCiAgICAgewogCWlmIChjdXJyZW50X2VudHJ5LT5wcm9tcHQpCkBAIC0xMzMxLDk5ICsxNDAzLDU1IEBACiA7fQogICAgIGJyZWFrOwogCi0gIGNhc2UgMjc6Ci0KLSAgICB7Ci0JbWVudV9zZXRfdHlwZShTX1RSSVNUQVRFKTsKLQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDp0cmlzdGF0ZVxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7Ci07fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMjg6Ci0KLSAgICB7Ci0JbWVudV9hZGRfZXhwcihQX0RFRkFVTFQsIHl5dnNwWy0yXS5leHByLCB5eXZzcFstMV0uZXhwcik7Ci0JbWVudV9zZXRfdHlwZShTX1RSSVNUQVRFKTsKLQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpkZWZfYm9vbGVhblxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7Ci07fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMjk6Ci0KLSAgICB7Ci0JbWVudV9zZXRfdHlwZShTX0JPT0xFQU4pOwotCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmJvb2xlYW5cbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOwotO30KLSAgICBicmVhazsKLQotICBjYXNlIDMwOgotCi0gICAgewotCW1lbnVfYWRkX2V4cHIoUF9ERUZBVUxULCB5eXZzcFstMl0uZXhwciwgeXl2c3BbLTFdLmV4cHIpOwotCW1lbnVfc2V0X3R5cGUoU19CT09MRUFOKTsKLQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpkZWZfYm9vbGVhblxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7Ci07fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMzE6Ci0KLSAgICB7Ci0JbWVudV9zZXRfdHlwZShTX0lOVCk7Ci0JcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6aW50XG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKLTt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAzMjoKLQotICAgIHsKLQltZW51X3NldF90eXBlKFNfSEVYKTsKLQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpoZXhcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOwotO30KLSAgICBicmVhazsKLQotICBjYXNlIDMzOgotCi0gICAgewotCW1lbnVfc2V0X3R5cGUoU19TVFJJTkcpOwotCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOnN0cmluZ1xuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7Ci07fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMzQ6Ci0KLSAgICB7Ci0JbWVudV9hZGRfcHJvbXB0KFBfUFJPTVBULCB5eXZzcFstMl0uc3RyaW5nLCB5eXZzcFstMV0uZXhwcik7Ci0JcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6cHJvbXB0XG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKLTt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAzNToKLQotICAgIHsKLQltZW51X2FkZF9leHByKFBfREVGQVVMVCwgeXl2c3BbLTJdLmV4cHIsIHl5dnNwWy0xXS5leHByKTsKLQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpkZWZhdWx0XG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKLTt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAzNjoKLQotICAgIHsKLQltZW51X2FkZF9zeW1ib2woUF9TRUxFQ1QsIHN5bV9sb29rdXAoeXl2c3BbLTJdLnN0cmluZywgMCksIHl5dnNwWy0xXS5leHByKTsKLQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpzZWxlY3RcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOwotO30KLSAgICBicmVhazsKLQogICBjYXNlIDM3OgogCiAgICAgewotCW1lbnVfYWRkX2V4cHIoUF9SQU5HRSwgZXhwcl9hbGxvY19jb21wKEVfUkFOR0UseXl2c3BbLTNdLnN5bWJvbCwgeXl2c3BbLTJdLnN5bWJvbCksIHl5dnNwWy0xXS5leHByKTsKLQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpyYW5nZVxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7CisJbWVudV9zZXRfdHlwZSgoeXl2c3BbLTJdLmlkKS0+c3R5cGUpOworCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOnR5cGUoJXUpXG4iLAorCQl6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpLAorCQkoeXl2c3BbLTJdLmlkKS0+c3R5cGUpOwogO30KICAgICBicmVhazsKIAogICBjYXNlIDM4OgogCiAgICAgeworCW1lbnVfYWRkX3Byb21wdChQX1BST01QVCwgKHl5dnNwWy0yXS5zdHJpbmcpLCAoeXl2c3BbLTFdLmV4cHIpKTsKKwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpwcm9tcHRcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOworO30KKyAgICBicmVhazsKKworICBjYXNlIDM5OgorCisgICAgeworCW1lbnVfYWRkX2V4cHIoUF9ERUZBVUxULCAoeXl2c3BbLTJdLmV4cHIpLCAoeXl2c3BbLTFdLmV4cHIpKTsKKwlpZiAoKHl5dnNwWy0zXS5pZCktPnN0eXBlICE9IFNfVU5LTk9XTikKKwkJbWVudV9zZXRfdHlwZSgoeXl2c3BbLTNdLmlkKS0+c3R5cGUpOworCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmRlZmF1bHQoJXUpXG4iLAorCQl6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpLAorCQkoeXl2c3BbLTNdLmlkKS0+c3R5cGUpOworO30KKyAgICBicmVhazsKKworICBjYXNlIDQwOgorCisgICAgeworCW1lbnVfYWRkX3N5bWJvbChQX1NFTEVDVCwgc3ltX2xvb2t1cCgoeXl2c3BbLTJdLnN0cmluZyksIDApLCAoeXl2c3BbLTFdLmV4cHIpKTsKKwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpzZWxlY3RcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOworO30KKyAgICBicmVhazsKKworICBjYXNlIDQxOgorCisgICAgeworCW1lbnVfYWRkX2V4cHIoUF9SQU5HRSwgZXhwcl9hbGxvY19jb21wKEVfUkFOR0UsKHl5dnNwWy0zXS5zeW1ib2wpLCAoeXl2c3BbLTJdLnN5bWJvbCkpLCAoeXl2c3BbLTFdLmV4cHIpKTsKKwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpyYW5nZVxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7Cis7fQorICAgIGJyZWFrOworCisgIGNhc2UgNDI6CisKKyAgICB7CiAJc3RydWN0IHN5bWJvbCAqc3ltID0gc3ltX2xvb2t1cChOVUxMLCAwKTsKIAlzeW0tPmZsYWdzIHw9IFNZTUJPTF9DSE9JQ0U7CiAJbWVudV9hZGRfZW50cnkoc3ltKTsKQEAgLTE0MzIsNTcgKzE0NjAsNDUgQEAKIDt9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAzOToKKyAgY2FzZSA0MzoKIAogICAgIHsKLQltZW51X2VuZF9lbnRyeSgpOwotCW1lbnVfYWRkX21lbnUoKTsKKwkoeXl2YWwubWVudSkgPSBtZW51X2FkZF9tZW51KCk7CiA7fQogICAgIGJyZWFrOwogCi0gIGNhc2UgNDA6CisgIGNhc2UgNDQ6CiAKICAgICB7Ci0JaWYgKHpjb25mX2VuZHRva2VuKHl5dnNwWzBdLnRva2VuLCBUX0NIT0lDRSwgVF9FTkRDSE9JQ0UpKSB7CisJaWYgKHpjb25mX2VuZHRva2VuKCh5eXZzcFswXS5pZCksIFRfQ0hPSUNFLCBUX0VORENIT0lDRSkpIHsKIAkJbWVudV9lbmRfbWVudSgpOwogCQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDplbmRjaG9pY2VcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOwogCX0KIDt9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA0MjoKKyAgY2FzZSA1MjoKIAogICAgIHsKLQlwcmludGYoIiVzOiVkOiBtaXNzaW5nICdlbmRjaG9pY2UnIGZvciB0aGlzICdjaG9pY2UnIHN0YXRlbWVudFxuIiwgY3VycmVudF9tZW51LT5maWxlLT5uYW1lLCBjdXJyZW50X21lbnUtPmxpbmVubyk7Ci0JemNvbmZuZXJycysrOwotO30KLSAgICBicmVhazsKLQotICBjYXNlIDQ4OgotCi0gICAgewotCW1lbnVfYWRkX3Byb21wdChQX1BST01QVCwgeXl2c3BbLTJdLnN0cmluZywgeXl2c3BbLTFdLmV4cHIpOworCW1lbnVfYWRkX3Byb21wdChQX1BST01QVCwgKHl5dnNwWy0yXS5zdHJpbmcpLCAoeXl2c3BbLTFdLmV4cHIpKTsKIAlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpwcm9tcHRcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOwogO30KICAgICBicmVhazsKIAotICBjYXNlIDQ5OgorICBjYXNlIDUzOgogCiAgICAgewotCW1lbnVfc2V0X3R5cGUoU19UUklTVEFURSk7Ci0JcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6dHJpc3RhdGVcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOworCWlmICgoeXl2c3BbLTJdLmlkKS0+c3R5cGUgPT0gU19CT09MRUFOIHx8ICh5eXZzcFstMl0uaWQpLT5zdHlwZSA9PSBTX1RSSVNUQVRFKSB7CisJCW1lbnVfc2V0X3R5cGUoKHl5dnNwWy0yXS5pZCktPnN0eXBlKTsKKwkJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6dHlwZSgldSlcbiIsCisJCQl6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpLAorCQkJKHl5dnNwWy0yXS5pZCktPnN0eXBlKTsKKwl9IGVsc2UKKwkJWVlFUlJPUjsKIDt9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA1MDoKLQotICAgIHsKLQltZW51X3NldF90eXBlKFNfQk9PTEVBTik7Ci0JcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6Ym9vbGVhblxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7Ci07fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNTE6CisgIGNhc2UgNTQ6CiAKICAgICB7CiAJY3VycmVudF9lbnRyeS0+c3ltLT5mbGFncyB8PSBTWU1CT0xfT1BUSU9OQUw7CkBAIC0xNDkwLDExNSArMTUwNiw4OSBAQAogO30KICAgICBicmVhazsKIAotICBjYXNlIDUyOgotCi0gICAgewotCW1lbnVfYWRkX3N5bWJvbChQX0RFRkFVTFQsIHN5bV9sb29rdXAoeXl2c3BbLTJdLnN0cmluZywgMCksIHl5dnNwWy0xXS5leHByKTsKLQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpkZWZhdWx0XG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKLTt9Ci0gICAgYnJlYWs7Ci0KICAgY2FzZSA1NToKIAogICAgIHsKLQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDppZlxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7Ci0JbWVudV9hZGRfZW50cnkoTlVMTCk7Ci0JbWVudV9hZGRfZGVwKHl5dnNwWy0xXS5leHByKTsKLQltZW51X2VuZF9lbnRyeSgpOwotCW1lbnVfYWRkX21lbnUoKTsKLTt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA1NjoKLQotICAgIHsKLQlpZiAoemNvbmZfZW5kdG9rZW4oeXl2c3BbMF0udG9rZW4sIFRfSUYsIFRfRU5ESUYpKSB7Ci0JCW1lbnVfZW5kX21lbnUoKTsKLQkJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6ZW5kaWZcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOwotCX0KKwlpZiAoKHl5dnNwWy0zXS5pZCktPnN0eXBlID09IFNfVU5LTk9XTikgeworCQltZW51X2FkZF9zeW1ib2woUF9ERUZBVUxULCBzeW1fbG9va3VwKCh5eXZzcFstMl0uc3RyaW5nKSwgMCksICh5eXZzcFstMV0uZXhwcikpOworCQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpkZWZhdWx0XG4iLAorCQkJemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7CisJfSBlbHNlCisJCVlZRVJST1I7CiA7fQogICAgIGJyZWFrOwogCiAgIGNhc2UgNTg6CiAKICAgICB7Ci0JcHJpbnRmKCIlczolZDogbWlzc2luZyAnZW5kaWYnIGZvciB0aGlzICdpZicgc3RhdGVtZW50XG4iLCBjdXJyZW50X21lbnUtPmZpbGUtPm5hbWUsIGN1cnJlbnRfbWVudS0+bGluZW5vKTsKLQl6Y29uZm5lcnJzKys7Ci07fQotICAgIGJyZWFrOwotCi0gIGNhc2UgNjM6Ci0KLSAgICB7CisJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6aWZcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOwogCW1lbnVfYWRkX2VudHJ5KE5VTEwpOwotCW1lbnVfYWRkX3Byb21wdChQX01FTlUsIHl5dnNwWy0xXS5zdHJpbmcsIE5VTEwpOwotCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOm1lbnVcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOworCW1lbnVfYWRkX2RlcCgoeXl2c3BbLTFdLmV4cHIpKTsKKwkoeXl2YWwubWVudSkgPSBtZW51X2FkZF9tZW51KCk7CiA7fQogICAgIGJyZWFrOwogCi0gIGNhc2UgNjQ6CisgIGNhc2UgNTk6CiAKICAgICB7Ci0JbWVudV9lbmRfZW50cnkoKTsKLQltZW51X2FkZF9tZW51KCk7CisJaWYgKHpjb25mX2VuZHRva2VuKCh5eXZzcFswXS5pZCksIFRfSUYsIFRfRU5ESUYpKSB7CisJCW1lbnVfZW5kX21lbnUoKTsKKwkJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6ZW5kaWZcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOworCX0KIDt9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA2NToKIAogICAgIHsKLQlpZiAoemNvbmZfZW5kdG9rZW4oeXl2c3BbMF0udG9rZW4sIFRfTUVOVSwgVF9FTkRNRU5VKSkgewotCQltZW51X2VuZF9tZW51KCk7Ci0JCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmVuZG1lbnVcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOwotCX0KKwltZW51X2FkZF9lbnRyeShOVUxMKTsKKwltZW51X2FkZF9wcm9tcHQoUF9NRU5VLCAoeXl2c3BbLTFdLnN0cmluZyksIE5VTEwpOworCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOm1lbnVcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOworO30KKyAgICBicmVhazsKKworICBjYXNlIDY2OgorCisgICAgeworCSh5eXZhbC5tZW51KSA9IG1lbnVfYWRkX21lbnUoKTsKIDt9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA2NzoKIAogICAgIHsKLQlwcmludGYoIiVzOiVkOiBtaXNzaW5nICdlbmRtZW51JyBmb3IgdGhpcyAnbWVudScgc3RhdGVtZW50XG4iLCBjdXJyZW50X21lbnUtPmZpbGUtPm5hbWUsIGN1cnJlbnRfbWVudS0+bGluZW5vKTsKLQl6Y29uZm5lcnJzKys7CisJaWYgKHpjb25mX2VuZHRva2VuKCh5eXZzcFswXS5pZCksIFRfTUVOVSwgVF9FTkRNRU5VKSkgeworCQltZW51X2VuZF9tZW51KCk7CisJCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmVuZG1lbnVcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOworCX0KIDt9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA3MjoKLQotICAgIHsgemNvbmZwcmludCgiaW52YWxpZCBtZW51IG9wdGlvbiIpOyB5eWVycm9rOyA7fQotICAgIGJyZWFrOwotCiAgIGNhc2UgNzM6CiAKICAgICB7Ci0JeXl2YWwuc3RyaW5nID0geXl2c3BbLTFdLnN0cmluZzsKLQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpzb3VyY2UgJXNcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCksIHl5dnNwWy0xXS5zdHJpbmcpOworCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOnNvdXJjZSAlc1xuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSwgKHl5dnNwWy0xXS5zdHJpbmcpKTsKKwl6Y29uZl9uZXh0ZmlsZSgoeXl2c3BbLTFdLnN0cmluZykpOwogO30KICAgICBicmVhazsKIAogICBjYXNlIDc0OgogCiAgICAgewotCXpjb25mX25leHRmaWxlKHl5dnNwWzBdLnN0cmluZyk7CisJbWVudV9hZGRfZW50cnkoTlVMTCk7CisJbWVudV9hZGRfcHJvbXB0KFBfQ09NTUVOVCwgKHl5dnNwWy0xXS5zdHJpbmcpLCBOVUxMKTsKKwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpjb21tZW50XG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKIDt9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA3NToKIAogICAgIHsKLQltZW51X2FkZF9lbnRyeShOVUxMKTsKLQltZW51X2FkZF9wcm9tcHQoUF9DT01NRU5ULCB5eXZzcFstMV0uc3RyaW5nLCBOVUxMKTsKLQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpjb21tZW50XG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKLTt9Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSA3NjoKLQotICAgIHsKIAltZW51X2VuZF9lbnRyeSgpOwogO30KICAgICBicmVhazsKIAotICBjYXNlIDc3OgorICBjYXNlIDc2OgogCiAgICAgewogCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmhlbHBcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOwpAQCAtMTYwNiwxNyArMTU5NiwxNyBAQAogO30KICAgICBicmVhazsKIAotICBjYXNlIDc4OgorICBjYXNlIDc3OgogCiAgICAgewotCWN1cnJlbnRfZW50cnktPnN5bS0+aGVscCA9IHl5dnNwWzBdLnN0cmluZzsKKwljdXJyZW50X2VudHJ5LT5zeW0tPmhlbHAgPSAoeXl2c3BbMF0uc3RyaW5nKTsKIDt9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA4MjoKIAogICAgIHsKLQltZW51X2FkZF9kZXAoeXl2c3BbLTFdLmV4cHIpOworCW1lbnVfYWRkX2RlcCgoeXl2c3BbLTFdLmV4cHIpKTsKIAlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpkZXBlbmRzIG9uXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKIDt9CiAgICAgYnJlYWs7CkBAIC0xNjI0LDcgKzE2MTQsNyBAQAogICBjYXNlIDgzOgogCiAgICAgewotCW1lbnVfYWRkX2RlcCh5eXZzcFstMV0uZXhwcik7CisJbWVudV9hZGRfZGVwKCh5eXZzcFstMV0uZXhwcikpOwogCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmRlcGVuZHNcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOwogO30KICAgICBicmVhazsKQEAgLTE2MzIsNyArMTYyMiw3IEBACiAgIGNhc2UgODQ6CiAKICAgICB7Ci0JbWVudV9hZGRfZGVwKHl5dnNwWy0xXS5leHByKTsKKwltZW51X2FkZF9kZXAoKHl5dnNwWy0xXS5leHByKSk7CiAJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6cmVxdWlyZXNcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOwogO30KICAgICBicmVhazsKQEAgLTE2NDAsODQgKzE2MzAsODQgQEAKICAgY2FzZSA4NjoKIAogICAgIHsKLQltZW51X2FkZF9wcm9tcHQoUF9QUk9NUFQsIHl5dnNwWy0xXS5zdHJpbmcsIHl5dnNwWzBdLmV4cHIpOworCW1lbnVfYWRkX3Byb21wdChQX1BST01QVCwgKHl5dnNwWy0xXS5zdHJpbmcpLCAoeXl2c3BbMF0uZXhwcikpOwogO30KICAgICBicmVhazsKIAogICBjYXNlIDg5OgogCi0gICAgeyB5eXZhbC50b2tlbiA9IFRfRU5ETUVOVTsgO30KKyAgICB7ICh5eXZhbC5pZCkgPSAoeXl2c3BbLTFdLmlkKTsgO30KICAgICBicmVhazsKIAogICBjYXNlIDkwOgogCi0gICAgeyB5eXZhbC50b2tlbiA9IFRfRU5EQ0hPSUNFOyA7fQorICAgIHsgKHl5dmFsLmlkKSA9ICh5eXZzcFstMV0uaWQpOyA7fQogICAgIGJyZWFrOwogCiAgIGNhc2UgOTE6CiAKLSAgICB7IHl5dmFsLnRva2VuID0gVF9FTkRJRjsgO30KKyAgICB7ICh5eXZhbC5pZCkgPSAoeXl2c3BbLTFdLmlkKTsgO30KICAgICBicmVhazsKIAogICBjYXNlIDk0OgogCi0gICAgeyB5eXZhbC5leHByID0gTlVMTDsgO30KKyAgICB7ICh5eXZhbC5leHByKSA9IE5VTEw7IDt9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA5NToKIAotICAgIHsgeXl2YWwuZXhwciA9IHl5dnNwWzBdLmV4cHI7IDt9CisgICAgeyAoeXl2YWwuZXhwcikgPSAoeXl2c3BbMF0uZXhwcik7IDt9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA5NjoKIAotICAgIHsgeXl2YWwuZXhwciA9IGV4cHJfYWxsb2Nfc3ltYm9sKHl5dnNwWzBdLnN5bWJvbCk7IDt9CisgICAgeyAoeXl2YWwuZXhwcikgPSBleHByX2FsbG9jX3N5bWJvbCgoeXl2c3BbMF0uc3ltYm9sKSk7IDt9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA5NzoKIAotICAgIHsgeXl2YWwuZXhwciA9IGV4cHJfYWxsb2NfY29tcChFX0VRVUFMLCB5eXZzcFstMl0uc3ltYm9sLCB5eXZzcFswXS5zeW1ib2wpOyA7fQorICAgIHsgKHl5dmFsLmV4cHIpID0gZXhwcl9hbGxvY19jb21wKEVfRVFVQUwsICh5eXZzcFstMl0uc3ltYm9sKSwgKHl5dnNwWzBdLnN5bWJvbCkpOyA7fQogICAgIGJyZWFrOwogCiAgIGNhc2UgOTg6CiAKLSAgICB7IHl5dmFsLmV4cHIgPSBleHByX2FsbG9jX2NvbXAoRV9VTkVRVUFMLCB5eXZzcFstMl0uc3ltYm9sLCB5eXZzcFswXS5zeW1ib2wpOyA7fQorICAgIHsgKHl5dmFsLmV4cHIpID0gZXhwcl9hbGxvY19jb21wKEVfVU5FUVVBTCwgKHl5dnNwWy0yXS5zeW1ib2wpLCAoeXl2c3BbMF0uc3ltYm9sKSk7IDt9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA5OToKIAotICAgIHsgeXl2YWwuZXhwciA9IHl5dnNwWy0xXS5leHByOyA7fQorICAgIHsgKHl5dmFsLmV4cHIpID0gKHl5dnNwWy0xXS5leHByKTsgO30KICAgICBicmVhazsKIAogICBjYXNlIDEwMDoKIAotICAgIHsgeXl2YWwuZXhwciA9IGV4cHJfYWxsb2Nfb25lKEVfTk9ULCB5eXZzcFswXS5leHByKTsgO30KKyAgICB7ICh5eXZhbC5leHByKSA9IGV4cHJfYWxsb2Nfb25lKEVfTk9ULCAoeXl2c3BbMF0uZXhwcikpOyA7fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTAxOgogCi0gICAgeyB5eXZhbC5leHByID0gZXhwcl9hbGxvY190d28oRV9PUiwgeXl2c3BbLTJdLmV4cHIsIHl5dnNwWzBdLmV4cHIpOyA7fQorICAgIHsgKHl5dmFsLmV4cHIpID0gZXhwcl9hbGxvY190d28oRV9PUiwgKHl5dnNwWy0yXS5leHByKSwgKHl5dnNwWzBdLmV4cHIpKTsgO30KICAgICBicmVhazsKIAogICBjYXNlIDEwMjoKIAotICAgIHsgeXl2YWwuZXhwciA9IGV4cHJfYWxsb2NfdHdvKEVfQU5ELCB5eXZzcFstMl0uZXhwciwgeXl2c3BbMF0uZXhwcik7IDt9CisgICAgeyAoeXl2YWwuZXhwcikgPSBleHByX2FsbG9jX3R3byhFX0FORCwgKHl5dnNwWy0yXS5leHByKSwgKHl5dnNwWzBdLmV4cHIpKTsgO30KICAgICBicmVhazsKIAogICBjYXNlIDEwMzoKIAotICAgIHsgeXl2YWwuc3ltYm9sID0gc3ltX2xvb2t1cCh5eXZzcFswXS5zdHJpbmcsIDApOyBmcmVlKHl5dnNwWzBdLnN0cmluZyk7IDt9CisgICAgeyAoeXl2YWwuc3ltYm9sKSA9IHN5bV9sb29rdXAoKHl5dnNwWzBdLnN0cmluZyksIDApOyBmcmVlKCh5eXZzcFswXS5zdHJpbmcpKTsgO30KICAgICBicmVhazsKIAogICBjYXNlIDEwNDoKIAotICAgIHsgeXl2YWwuc3ltYm9sID0gc3ltX2xvb2t1cCh5eXZzcFswXS5zdHJpbmcsIDEpOyBmcmVlKHl5dnNwWzBdLnN0cmluZyk7IDt9CisgICAgeyAoeXl2YWwuc3ltYm9sKSA9IHN5bV9sb29rdXAoKHl5dnNwWzBdLnN0cmluZyksIDEpOyBmcmVlKCh5eXZzcFswXS5zdHJpbmcpKTsgO30KICAgICBicmVhazsKIAogCiAgICAgfQogCi0vKiBMaW5lIDk5OSBvZiB5YWNjLmMuICAqLworLyogTGluZSAxMDM3IG9mIHlhY2MuYy4gICovCiAKIAwKICAgeXl2c3AgLT0geXlsZW47CkBAIC0xNzU5LDE4ICsxNzQ5LDMzIEBACiAJewogCSAgWVlTSVpFX1QgeXlzaXplID0gMDsKIAkgIGludCB5eXR5cGUgPSBZWVRSQU5TTEFURSAoeXljaGFyKTsKKwkgIGNvbnN0IGNoYXIqIHl5cHJlZml4OwogCSAgY2hhciAqeXltc2c7Ci0JICBpbnQgeXl4LCB5eWNvdW50OworCSAgaW50IHl5eDsKIAotCSAgeXljb3VudCA9IDA7CiAJICAvKiBTdGFydCBZWVggYXQgLVlZTiBpZiBuZWdhdGl2ZSB0byBhdm9pZCBuZWdhdGl2ZSBpbmRleGVzIGluCiAJICAgICBZWUNIRUNLLiAgKi8KLQkgIGZvciAoeXl4ID0geXluIDwgMCA/IC15eW4gOiAwOwotCSAgICAgICB5eXggPCAoaW50KSAoc2l6ZW9mICh5eXRuYW1lKSAvIHNpemVvZiAoY2hhciAqKSk7IHl5eCsrKQorCSAgaW50IHl5eGJlZ2luID0geXluIDwgMCA/IC15eW4gOiAwOworCisJICAvKiBTdGF5IHdpdGhpbiBib3VuZHMgb2YgYm90aCB5eWNoZWNrIGFuZCB5eXRuYW1lLiAgKi8KKwkgIGludCB5eWNoZWNrbGltID0gWVlMQVNUIC0geXluOworCSAgaW50IHl5eGVuZCA9IHl5Y2hlY2tsaW0gPCBZWU5UT0tFTlMgPyB5eWNoZWNrbGltIDogWVlOVE9LRU5TOworCSAgaW50IHl5Y291bnQgPSAwOworCisJICB5eXByZWZpeCA9ICIsIGV4cGVjdGluZyAiOworCSAgZm9yICh5eXggPSB5eXhiZWdpbjsgeXl4IDwgeXl4ZW5kOyArK3l5eCkKIAkgICAgaWYgKHl5Y2hlY2tbeXl4ICsgeXluXSA9PSB5eXggJiYgeXl4ICE9IFlZVEVSUk9SKQotCSAgICAgIHl5c2l6ZSArPSB5eXN0cmxlbiAoeXl0bmFtZVt5eXhdKSArIDE1LCB5eWNvdW50Kys7Ci0JICB5eXNpemUgKz0geXlzdHJsZW4gKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgIikgKyAxOwotCSAgeXlzaXplICs9IHl5c3RybGVuICh5eXRuYW1lW3l5dHlwZV0pOworCSAgICAgIHsKKwkJeXlzaXplICs9IHl5c3RybGVuICh5eXByZWZpeCkgKyB5eXN0cmxlbiAoeXl0bmFtZSBbeXl4XSk7CisJCXl5Y291bnQgKz0gMTsKKwkJaWYgKHl5Y291bnQgPT0gNSkKKwkJICB7CisJCSAgICB5eXNpemUgPSAwOworCQkgICAgYnJlYWs7CisJCSAgfQorCSAgICAgIH0KKwkgIHl5c2l6ZSArPSAoc2l6ZW9mICgic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICIpCisJCSAgICAgKyB5eXN0cmxlbiAoeXl0bmFtZVt5eXR5cGVdKSk7CiAJICB5eW1zZyA9IChjaGFyICopIFlZU1RBQ0tfQUxMT0MgKHl5c2l6ZSk7CiAJICBpZiAoeXltc2cgIT0gMCkKIAkgICAgewpAQCAtMTc3OSwxNiArMTc4NCwxMyBAQAogCiAJICAgICAgaWYgKHl5Y291bnQgPCA1KQogCQl7Ci0JCSAgeXljb3VudCA9IDA7Ci0JCSAgZm9yICh5eXggPSB5eW4gPCAwID8gLXl5biA6IDA7Ci0JCSAgICAgICB5eXggPCAoaW50KSAoc2l6ZW9mICh5eXRuYW1lKSAvIHNpemVvZiAoY2hhciAqKSk7Ci0JCSAgICAgICB5eXgrKykKKwkJICB5eXByZWZpeCA9ICIsIGV4cGVjdGluZyAiOworCQkgIGZvciAoeXl4ID0geXl4YmVnaW47IHl5eCA8IHl5eGVuZDsgKyt5eXgpCiAJCSAgICBpZiAoeXljaGVja1t5eXggKyB5eW5dID09IHl5eCAmJiB5eXggIT0gWVlURVJST1IpCiAJCSAgICAgIHsKLQkJCWNvbnN0IGNoYXIgKnl5cSA9ICEgeXljb3VudCA/ICIsIGV4cGVjdGluZyAiIDogIiBvciAiOwotCQkJeXlwID0geXlzdHBjcHkgKHl5cCwgeXlxKTsKKwkJCXl5cCA9IHl5c3RwY3B5ICh5eXAsIHl5cHJlZml4KTsKIAkJCXl5cCA9IHl5c3RwY3B5ICh5eXAsIHl5dG5hbWVbeXl4XSk7Ci0JCQl5eWNvdW50Kys7CisJCQl5eXByZWZpeCA9ICIgb3IgIjsKIAkJICAgICAgfQogCQl9CiAJICAgICAgeXllcnJvciAoeXltc2cpOwpAQCAtMTgwNiwzOCArMTgwOCw1NyBAQAogCiAgIGlmICh5eWVycnN0YXR1cyA9PSAzKQogICAgIHsKLSAgICAgIC8qIElmIGp1c3QgdHJpZWQgYW5kIGZhaWxlZCB0byByZXVzZSBsb29rYWhlYWQgdG9rZW4gYWZ0ZXIgYW4KKyAgICAgIC8qIElmIGp1c3QgdHJpZWQgYW5kIGZhaWxlZCB0byByZXVzZSBsb29rLWFoZWFkIHRva2VuIGFmdGVyIGFuCiAJIGVycm9yLCBkaXNjYXJkIGl0LiAgKi8KIAotICAgICAgLyogUmV0dXJuIGZhaWx1cmUgaWYgYXQgZW5kIG9mIGlucHV0LiAgKi8KLSAgICAgIGlmICh5eWNoYXIgPT0gWVlFT0YpCisgICAgICBpZiAoeXljaGFyIDw9IFlZRU9GKQogICAgICAgICB7Ci0JICAvKiBQb3AgdGhlIGVycm9yIHRva2VuLiAgKi8KLSAgICAgICAgICBZWVBPUFNUQUNLOwotCSAgLyogUG9wIHRoZSByZXN0IG9mIHRoZSBzdGFjay4gICovCi0JICB3aGlsZSAoeXlzcyA8IHl5c3NwKQotCSAgICB7Ci0JICAgICAgWVlEU1lNUFJJTlRGICgiRXJyb3I6IHBvcHBpbmciLCB5eXN0b3NbKnl5c3NwXSwgeXl2c3AsIHl5bHNwKTsKLQkgICAgICB5eWRlc3RydWN0ICh5eXN0b3NbKnl5c3NwXSwgeXl2c3ApOwotCSAgICAgIFlZUE9QU1RBQ0s7Ci0JICAgIH0KLQkgIFlZQUJPUlQ7CisgICAgICAgICAgLyogSWYgYXQgZW5kIG9mIGlucHV0LCBwb3AgdGhlIGVycm9yIHRva2VuLAorCSAgICAgdGhlbiB0aGUgcmVzdCBvZiB0aGUgc3RhY2ssIHRoZW4gcmV0dXJuIGZhaWx1cmUuICAqLworCSAgaWYgKHl5Y2hhciA9PSBZWUVPRikKKwkgICAgIGZvciAoOzspCisJICAgICAgIHsKKworCQkgWVlQT1BTVEFDSzsKKwkJIGlmICh5eXNzcCA9PSB5eXNzKQorCQkgICBZWUFCT1JUOworCQkgeXlkZXN0cnVjdCAoIkVycm9yOiBwb3BwaW5nIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeXlzdG9zWyp5eXNzcF0sIHl5dnNwKTsKKwkgICAgICAgfQogICAgICAgICB9Ci0KLSAgICAgIFlZRFNZTVBSSU5URiAoIkVycm9yOiBkaXNjYXJkaW5nIiwgeXl0b2tlbiwgJnl5bHZhbCwgJnl5bGxvYyk7Ci0gICAgICB5eWRlc3RydWN0ICh5eXRva2VuLCAmeXlsdmFsKTsKLSAgICAgIHl5Y2hhciA9IFlZRU1QVFk7Ci0KKyAgICAgIGVsc2UKKwl7CisJICB5eWRlc3RydWN0ICgiRXJyb3I6IGRpc2NhcmRpbmciLCB5eXRva2VuLCAmeXlsdmFsKTsKKwkgIHl5Y2hhciA9IFlZRU1QVFk7CisJfQogICAgIH0KIAotICAvKiBFbHNlIHdpbGwgdHJ5IHRvIHJldXNlIGxvb2thaGVhZCB0b2tlbiBhZnRlciBzaGlmdGluZyB0aGUgZXJyb3IKKyAgLyogRWxzZSB3aWxsIHRyeSB0byByZXVzZSBsb29rLWFoZWFkIHRva2VuIGFmdGVyIHNoaWZ0aW5nIHRoZSBlcnJvcgogICAgICB0b2tlbi4gICovCiAgIGdvdG8geXllcnJsYWIxOwogCiAKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgeXllcnJsYWIxIC0tIGVycm9yIHJhaXNlZCBleHBsaWNpdGx5IGJ5IGFuIGFjdGlvbi4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWVycm9ybGFiIC0tIGVycm9yIHJhaXNlZCBleHBsaWNpdGx5IGJ5IFlZRVJST1IuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5ZXJyb3JsYWI6CisKKyNpZmRlZiBfX0dOVUNfXworICAvKiBQYWNpZnkgR0NDIHdoZW4gdGhlIHVzZXIgY29kZSBuZXZlciBpbnZva2VzIFlZRVJST1IgYW5kIHRoZSBsYWJlbAorICAgICB5eWVycm9ybGFiIHRoZXJlZm9yZSBuZXZlciBhcHBlYXJzIGluIHVzZXIgY29kZS4gICovCisgIGlmICgwKQorICAgICBnb3RvIHl5ZXJyb3JsYWI7CisjZW5kaWYKKworeXl2c3AgLT0geXlsZW47CisgIHl5c3NwIC09IHl5bGVuOworICB5eXN0YXRlID0gKnl5c3NwOworICBnb3RvIHl5ZXJybGFiMTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5ZXJybGFiMSAtLSBjb21tb24gY29kZSBmb3IgYm90aCBzeW50YXggZXJyb3IgYW5kIFlZRVJST1IuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiB5eWVycmxhYjE6CiAgIHl5ZXJyc3RhdHVzID0gMzsJLyogRWFjaCByZWFsIHRva2VuIHNoaWZ0ZWQgZGVjcmVtZW50cyB0aGlzLiAgKi8KIApAQCAtMTg1OSwyMiArMTg4MCwyMiBAQAogICAgICAgaWYgKHl5c3NwID09IHl5c3MpCiAJWVlBQk9SVDsKIAotICAgICAgWVlEU1lNUFJJTlRGICgiRXJyb3I6IHBvcHBpbmciLCB5eXN0b3NbKnl5c3NwXSwgeXl2c3AsIHl5bHNwKTsKLSAgICAgIHl5ZGVzdHJ1Y3QgKHl5c3Rvc1t5eXN0YXRlXSwgeXl2c3ApOwotICAgICAgeXl2c3AtLTsKLSAgICAgIHl5c3RhdGUgPSAqLS15eXNzcDsKIAorICAgICAgeXlkZXN0cnVjdCAoIkVycm9yOiBwb3BwaW5nIiwgeXlzdG9zW3l5c3RhdGVdLCB5eXZzcCk7CisgICAgICBZWVBPUFNUQUNLOworICAgICAgeXlzdGF0ZSA9ICp5eXNzcDsKICAgICAgIFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNzcCk7CiAgICAgfQogCiAgIGlmICh5eW4gPT0gWVlGSU5BTCkKICAgICBZWUFDQ0VQVDsKIAotICBZWURQUklOVEYgKChzdGRlcnIsICJTaGlmdGluZyBlcnJvciB0b2tlbiwgIikpOwotCiAgICorK3l5dnNwID0geXlsdmFsOwogCiAKKyAgLyogU2hpZnQgdGhlIGVycm9yIHRva2VuLiAqLworICBZWV9TWU1CT0xfUFJJTlQgKCJTaGlmdGluZyIsIHl5c3Rvc1t5eW5dLCB5eXZzcCwgeXlsc3ApOworCiAgIHl5c3RhdGUgPSB5eW47CiAgIGdvdG8geXluZXdzdGF0ZTsKIApAQCAtMTg5MCw2ICsxOTExLDkgQEAKIHwgeXlhYm9ydGxhYiAtLSBZWUFCT1JUIGNvbWVzIGhlcmUuICB8CiBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogeXlhYm9ydGxhYjoKKyAgeXlkZXN0cnVjdCAoIkVycm9yOiBkaXNjYXJkaW5nIGxvb2thaGVhZCIsCisgICAgICAgICAgICAgIHl5dG9rZW4sICZ5eWx2YWwpOworICB5eWNoYXIgPSBZWUVNUFRZOwogICB5eXJlc3VsdCA9IDE7CiAgIGdvdG8geXlyZXR1cm47CiAKQEAgLTE5MjcsMTYgKzE5NTEsMTYgQEAKIAltb2R1bGVzX3N5bSA9IHN5bV9sb29rdXAoIk1PRFVMRVMiLCAwKTsKIAlyb290bWVudS5wcm9tcHQgPSBtZW51X2FkZF9wcm9tcHQoUF9NRU5VLCAiTGludXggS2VybmVsIENvbmZpZ3VyYXRpb24iLCBOVUxMKTsKIAotCS8vemNvbmZkZWJ1ZyA9IDE7CisjaWYgWVlERUJVRworCWlmIChnZXRlbnYoIlpDT05GX0RFQlVHIikpCisJCXpjb25mZGVidWcgPSAxOworI2VuZGlmCiAJemNvbmZwYXJzZSgpOwogCWlmICh6Y29uZm5lcnJzKQogCQlleGl0KDEpOwogCW1lbnVfZmluYWxpemUoJnJvb3RtZW51KTsKIAlmb3JfYWxsX3N5bWJvbHMoaSwgc3ltKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCEoc3ltLT5mbGFncyAmIFNZTUJPTF9DSEVDS0VEKSAmJiBzeW1fY2hlY2tfZGVwcyhzeW0pKQotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJcbiIpOwotCQllbHNlCi0JCQlzeW0tPmZsYWdzIHw9IFNZTUJPTF9DSEVDS19ET05FOworCQlzeW1fY2hlY2tfZGVwcyhzeW0pOwogICAgICAgICB9CiAKIAlzeW1fY2hhbmdlX2NvdW50ID0gMTsKQEAgLTE5NTEsMjAgKzE5NzUsMjUgQEAKIAljYXNlIFRfRU5EQ0hPSUNFOglyZXR1cm4gImVuZGNob2ljZSI7CiAJY2FzZSBUX0lGOgkJcmV0dXJuICJpZiI7CiAJY2FzZSBUX0VORElGOgkJcmV0dXJuICJlbmRpZiI7CisJY2FzZSBUX0RFUEVORFM6CQlyZXR1cm4gImRlcGVuZHMiOwogCX0KIAlyZXR1cm4gIjx0b2tlbj4iOwogfQogCi1zdGF0aWMgYm9vbCB6Y29uZl9lbmR0b2tlbihpbnQgdG9rZW4sIGludCBzdGFydHRva2VuLCBpbnQgZW5kdG9rZW4pCitzdGF0aWMgYm9vbCB6Y29uZl9lbmR0b2tlbihzdHJ1Y3Qga2NvbmZfaWQgKmlkLCBpbnQgc3RhcnR0b2tlbiwgaW50IGVuZHRva2VuKQogewotCWlmICh0b2tlbiAhPSBlbmR0b2tlbikgewotCQl6Y29uZnByaW50KCJ1bmV4cGVjdGVkICclcycgd2l0aGluICVzIGJsb2NrIiwgemNvbmZfdG9rZW5uYW1lKHRva2VuKSwgemNvbmZfdG9rZW5uYW1lKHN0YXJ0dG9rZW4pKTsKKwlpZiAoaWQtPnRva2VuICE9IGVuZHRva2VuKSB7CisJCXpjb25mX2Vycm9yKCJ1bmV4cGVjdGVkICclcycgd2l0aGluICVzIGJsb2NrIiwKKwkJCWtjb25mX2lkX3N0cmluZ3MgKyBpZC0+bmFtZSwgemNvbmZfdG9rZW5uYW1lKHN0YXJ0dG9rZW4pKTsKIAkJemNvbmZuZXJycysrOwogCQlyZXR1cm4gZmFsc2U7CiAJfQogCWlmIChjdXJyZW50X21lbnUtPmZpbGUgIT0gY3VycmVudF9maWxlKSB7Ci0JCXpjb25mcHJpbnQoIiclcycgaW4gZGlmZmVyZW50IGZpbGUgdGhhbiAnJXMnIiwgemNvbmZfdG9rZW5uYW1lKHRva2VuKSwgemNvbmZfdG9rZW5uYW1lKHN0YXJ0dG9rZW4pKTsKLQkJemNvbmZwcmludCgibG9jYXRpb24gb2YgdGhlICclcyciLCB6Y29uZl90b2tlbm5hbWUoc3RhcnR0b2tlbikpOworCQl6Y29uZl9lcnJvcigiJyVzJyBpbiBkaWZmZXJlbnQgZmlsZSB0aGFuICclcyciLAorCQkJa2NvbmZfaWRfc3RyaW5ncyArIGlkLT5uYW1lLCB6Y29uZl90b2tlbm5hbWUoc3RhcnR0b2tlbikpOworCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBsb2NhdGlvbiBvZiB0aGUgJyVzJ1xuIiwKKwkJCWN1cnJlbnRfbWVudS0+ZmlsZS0+bmFtZSwgY3VycmVudF9tZW51LT5saW5lbm8sCisJCQl6Y29uZl90b2tlbm5hbWUoc3RhcnR0b2tlbikpOwogCQl6Y29uZm5lcnJzKys7CiAJCXJldHVybiBmYWxzZTsKIAl9CkBAIC0xOTc1LDcgKzIwMDQsMTkgQEAKIHsKIAl2YV9saXN0IGFwOwogCi0JZnByaW50ZihzdGRlcnIsICIlczolZDogIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSArIDEpOworCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6ICIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOworCXZhX3N0YXJ0KGFwLCBlcnIpOworCXZmcHJpbnRmKHN0ZGVyciwgZXJyLCBhcCk7CisJdmFfZW5kKGFwKTsKKwlmcHJpbnRmKHN0ZGVyciwgIlxuIik7Cit9CisKK3N0YXRpYyB2b2lkIHpjb25mX2Vycm9yKGNvbnN0IGNoYXIgKmVyciwgLi4uKQoreworCXZhX2xpc3QgYXA7CisKKwl6Y29uZm5lcnJzKys7CisJZnByaW50ZihzdGRlcnIsICIlczolZDogIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7CiAJdmFfc3RhcnQoYXAsIGVycik7CiAJdmZwcmludGYoc3RkZXJyLCBlcnIsIGFwKTsKIAl2YV9lbmQoYXApOwpAQCAtMTk4NCw3ICsyMDI1LDkgQEAKIAogc3RhdGljIHZvaWQgemNvbmZlcnJvcihjb25zdCBjaGFyICplcnIpCiB7CisjaWYgWVlERUJVRwogCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6ICVzXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpICsgMSwgZXJyKTsKKyNlbmRpZgogfQogCiB2b2lkIHByaW50X3F1b3RlZF9zdHJpbmcoRklMRSAqb3V0LCBjb25zdCBjaGFyICpzdHIpCmRpZmYgLS1naXQgYS9zY3JpcHRzL2tjb25maWcvemNvbmYudGFiLmhfc2hpcHBlZCBiL3NjcmlwdHMva2NvbmZpZy96Y29uZi50YWIuaF9zaGlwcGVkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYjE5MWVmLi4wMDAwMDAwCi0tLSBhL3NjcmlwdHMva2NvbmZpZy96Y29uZi50YWIuaF9zaGlwcGVkCisrKyAvZGV2L251bGwKQEAgLTEsMTI1ICswLDAgQEAKLS8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGZyb20gemNvbmYueSwgYnkgR05VIGJpc29uIDEuNzUuICAqLwotCi0vKiBTa2VsZXRvbiBwYXJzZXIgZm9yIFlhY2MtbGlrZSBwYXJzaW5nIHdpdGggQmlzb24sCi0gICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODksIDE5OTAsIDIwMDAsIDIwMDEsIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICAgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAotICAgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLwotCi0vKiBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB3aGVuIHRoaXMgZmlsZSBpcyBjb3BpZWQgYnkgQmlzb24gaW50byBhCi0gICBCaXNvbiBvdXRwdXQgZmlsZSwgeW91IG1heSB1c2UgdGhhdCBvdXRwdXQgZmlsZSB3aXRob3V0IHJlc3RyaWN0aW9uLgotICAgVGhpcyBzcGVjaWFsIGV4Y2VwdGlvbiB3YXMgYWRkZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotICAgaW4gdmVyc2lvbiAxLjI0IG9mIEJpc29uLiAgKi8KLQotI2lmbmRlZiBCSVNPTl9aQ09ORl9UQUJfSAotIyBkZWZpbmUgQklTT05fWkNPTkZfVEFCX0gKLQotLyogVG9rZW5zLiAgKi8KLSNpZm5kZWYgWVlUT0tFTlRZUEUKLSMgZGVmaW5lIFlZVE9LRU5UWVBFCi0gICAvKiBQdXQgdGhlIHRva2VucyBpbnRvIHRoZSBzeW1ib2wgdGFibGUsIHNvIHRoYXQgR0RCIGFuZCBvdGhlciBkZWJ1Z2dlcnMKLSAgICAgIGtub3cgYWJvdXQgdGhlbS4gICovCi0gICBlbnVtIHl5dG9rZW50eXBlIHsKLSAgICAgVF9NQUlOTUVOVSA9IDI1OCwKLSAgICAgVF9NRU5VID0gMjU5LAotICAgICBUX0VORE1FTlUgPSAyNjAsCi0gICAgIFRfU09VUkNFID0gMjYxLAotICAgICBUX0NIT0lDRSA9IDI2MiwKLSAgICAgVF9FTkRDSE9JQ0UgPSAyNjMsCi0gICAgIFRfQ09NTUVOVCA9IDI2NCwKLSAgICAgVF9DT05GSUcgPSAyNjUsCi0gICAgIFRfSEVMUCA9IDI2NiwKLSAgICAgVF9IRUxQVEVYVCA9IDI2NywKLSAgICAgVF9JRiA9IDI2OCwKLSAgICAgVF9FTkRJRiA9IDI2OSwKLSAgICAgVF9ERVBFTkRTID0gMjcwLAotICAgICBUX1JFUVVJUkVTID0gMjcxLAotICAgICBUX09QVElPTkFMID0gMjcyLAotICAgICBUX1BST01QVCA9IDI3MywKLSAgICAgVF9ERUZBVUxUID0gMjc0LAotICAgICBUX1RSSVNUQVRFID0gMjc1LAotICAgICBUX0JPT0xFQU4gPSAyNzYsCi0gICAgIFRfSU5UID0gMjc3LAotICAgICBUX0hFWCA9IDI3OCwKLSAgICAgVF9XT1JEID0gMjc5LAotICAgICBUX1NUUklORyA9IDI4MCwKLSAgICAgVF9VTkVRVUFMID0gMjgxLAotICAgICBUX0VPRiA9IDI4MiwKLSAgICAgVF9FT0wgPSAyODMsCi0gICAgIFRfQ0xPU0VfUEFSRU4gPSAyODQsCi0gICAgIFRfT1BFTl9QQVJFTiA9IDI4NSwKLSAgICAgVF9PTiA9IDI4NiwKLSAgICAgVF9PUiA9IDI4NywKLSAgICAgVF9BTkQgPSAyODgsCi0gICAgIFRfRVFVQUwgPSAyODksCi0gICAgIFRfTk9UID0gMjkwCi0gICB9OwotI2VuZGlmCi0jZGVmaW5lIFRfTUFJTk1FTlUgMjU4Ci0jZGVmaW5lIFRfTUVOVSAyNTkKLSNkZWZpbmUgVF9FTkRNRU5VIDI2MAotI2RlZmluZSBUX1NPVVJDRSAyNjEKLSNkZWZpbmUgVF9DSE9JQ0UgMjYyCi0jZGVmaW5lIFRfRU5EQ0hPSUNFIDI2MwotI2RlZmluZSBUX0NPTU1FTlQgMjY0Ci0jZGVmaW5lIFRfQ09ORklHIDI2NQotI2RlZmluZSBUX0hFTFAgMjY2Ci0jZGVmaW5lIFRfSEVMUFRFWFQgMjY3Ci0jZGVmaW5lIFRfSUYgMjY4Ci0jZGVmaW5lIFRfRU5ESUYgMjY5Ci0jZGVmaW5lIFRfREVQRU5EUyAyNzAKLSNkZWZpbmUgVF9SRVFVSVJFUyAyNzEKLSNkZWZpbmUgVF9PUFRJT05BTCAyNzIKLSNkZWZpbmUgVF9QUk9NUFQgMjczCi0jZGVmaW5lIFRfREVGQVVMVCAyNzQKLSNkZWZpbmUgVF9UUklTVEFURSAyNzUKLSNkZWZpbmUgVF9CT09MRUFOIDI3NgotI2RlZmluZSBUX0lOVCAyNzcKLSNkZWZpbmUgVF9IRVggMjc4Ci0jZGVmaW5lIFRfV09SRCAyNzkKLSNkZWZpbmUgVF9TVFJJTkcgMjgwCi0jZGVmaW5lIFRfVU5FUVVBTCAyODEKLSNkZWZpbmUgVF9FT0YgMjgyCi0jZGVmaW5lIFRfRU9MIDI4MwotI2RlZmluZSBUX0NMT1NFX1BBUkVOIDI4NAotI2RlZmluZSBUX09QRU5fUEFSRU4gMjg1Ci0jZGVmaW5lIFRfT04gMjg2Ci0jZGVmaW5lIFRfT1IgMjg3Ci0jZGVmaW5lIFRfQU5EIDI4OAotI2RlZmluZSBUX0VRVUFMIDI4OQotI2RlZmluZSBUX05PVCAyOTAKLQotCi0KLQotI2lmbmRlZiBZWVNUWVBFCi0jbGluZSAzMyAiemNvbmYueSIKLXR5cGVkZWYgdW5pb24gewotCWludCB0b2tlbjsKLQljaGFyICpzdHJpbmc7Ci0Jc3RydWN0IHN5bWJvbCAqc3ltYm9sOwotCXN0cnVjdCBleHByICpleHByOwotCXN0cnVjdCBtZW51ICptZW51OwotfSB5eXN0eXBlOwotLyogTGluZSAxMjgxIG9mIC91c3Ivc2hhcmUvYmlzb24veWFjYy5jLiAgKi8KLSNsaW5lIDExOCAiemNvbmYudGFiLmgiCi0jIGRlZmluZSBZWVNUWVBFIHl5c3R5cGUKLSNlbmRpZgotCi1leHRlcm4gWVlTVFlQRSB6Y29uZmx2YWw7Ci0KLQotI2VuZGlmIC8qIG5vdCBCSVNPTl9aQ09ORl9UQUJfSCAqLwotCmRpZmYgLS1naXQgYS9zY3JpcHRzL2tjb25maWcvemNvbmYueSBiL3NjcmlwdHMva2NvbmZpZy96Y29uZi55CmluZGV4IGUxYTBmNDUuLjFmNjFmYmEgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy96Y29uZi55CisrKyBiL3NjcmlwdHMva2NvbmZpZy96Y29uZi55CkBAIC0xMSw2ICsxMSwxMSBAQAogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHN0ZGJvb2wuaD4KIAorI2RlZmluZSBMS0NfRElSRUNUX0xJTksKKyNpbmNsdWRlICJsa2MuaCIKKworI2luY2x1ZGUgInpjb25mLmhhc2guYyIKKwogI2RlZmluZSBwcmludGQobWFzaywgZm10Li4uKSBpZiAoY2RlYnVnICYgKG1hc2spKSBwcmludGYoZm10KQogCiAjZGVmaW5lIFBSSU5URAkJMHgwMDAxCkBAIC0yMCw2MSArMjUsNTkgQEAKIAogZXh0ZXJuIGludCB6Y29uZmxleCh2b2lkKTsKIHN0YXRpYyB2b2lkIHpjb25mcHJpbnQoY29uc3QgY2hhciAqZXJyLCAuLi4pOworc3RhdGljIHZvaWQgemNvbmZfZXJyb3IoY29uc3QgY2hhciAqZXJyLCAuLi4pOwogc3RhdGljIHZvaWQgemNvbmZlcnJvcihjb25zdCBjaGFyICplcnIpOwotc3RhdGljIGJvb2wgemNvbmZfZW5kdG9rZW4oaW50IHRva2VuLCBpbnQgc3RhcnR0b2tlbiwgaW50IGVuZHRva2VuKTsKK3N0YXRpYyBib29sIHpjb25mX2VuZHRva2VuKHN0cnVjdCBrY29uZl9pZCAqaWQsIGludCBzdGFydHRva2VuLCBpbnQgZW5kdG9rZW4pOwogCiBzdHJ1Y3Qgc3ltYm9sICpzeW1ib2xfaGFzaFsyNTddOwogCiBzdGF0aWMgc3RydWN0IG1lbnUgKmN1cnJlbnRfbWVudSwgKmN1cnJlbnRfZW50cnk7CiAKKyNkZWZpbmUgWVlERUJVRyAwCisjaWYgWVlERUJVRwogI2RlZmluZSBZWUVSUk9SX1ZFUkJPU0UKKyNlbmRpZgogJX0KLSVleHBlY3QgNDAKKyVleHBlY3QgMjYKIAogJXVuaW9uCiB7Ci0JaW50IHRva2VuOwogCWNoYXIgKnN0cmluZzsKKwlzdHJ1Y3QgZmlsZSAqZmlsZTsKIAlzdHJ1Y3Qgc3ltYm9sICpzeW1ib2w7CiAJc3RydWN0IGV4cHIgKmV4cHI7CiAJc3RydWN0IG1lbnUgKm1lbnU7CisJc3RydWN0IGtjb25mX2lkICppZDsKIH0KIAotJXRva2VuIFRfTUFJTk1FTlUKLSV0b2tlbiBUX01FTlUKLSV0b2tlbiBUX0VORE1FTlUKLSV0b2tlbiBUX1NPVVJDRQotJXRva2VuIFRfQ0hPSUNFCi0ldG9rZW4gVF9FTkRDSE9JQ0UKLSV0b2tlbiBUX0NPTU1FTlQKLSV0b2tlbiBUX0NPTkZJRwotJXRva2VuIFRfTUVOVUNPTkZJRwotJXRva2VuIFRfSEVMUAorJXRva2VuIDxpZD5UX01BSU5NRU5VCisldG9rZW4gPGlkPlRfTUVOVQorJXRva2VuIDxpZD5UX0VORE1FTlUKKyV0b2tlbiA8aWQ+VF9TT1VSQ0UKKyV0b2tlbiA8aWQ+VF9DSE9JQ0UKKyV0b2tlbiA8aWQ+VF9FTkRDSE9JQ0UKKyV0b2tlbiA8aWQ+VF9DT01NRU5UCisldG9rZW4gPGlkPlRfQ09ORklHCisldG9rZW4gPGlkPlRfTUVOVUNPTkZJRworJXRva2VuIDxpZD5UX0hFTFAKICV0b2tlbiA8c3RyaW5nPiBUX0hFTFBURVhUCi0ldG9rZW4gVF9JRgotJXRva2VuIFRfRU5ESUYKLSV0b2tlbiBUX0RFUEVORFMKLSV0b2tlbiBUX1JFUVVJUkVTCi0ldG9rZW4gVF9PUFRJT05BTAotJXRva2VuIFRfUFJPTVBUCi0ldG9rZW4gVF9ERUZBVUxUCi0ldG9rZW4gVF9UUklTVEFURQotJXRva2VuIFRfREVGX1RSSVNUQVRFCi0ldG9rZW4gVF9CT09MRUFOCi0ldG9rZW4gVF9ERUZfQk9PTEVBTgotJXRva2VuIFRfU1RSSU5HCi0ldG9rZW4gVF9JTlQKLSV0b2tlbiBUX0hFWAorJXRva2VuIDxpZD5UX0lGCisldG9rZW4gPGlkPlRfRU5ESUYKKyV0b2tlbiA8aWQ+VF9ERVBFTkRTCisldG9rZW4gPGlkPlRfUkVRVUlSRVMKKyV0b2tlbiA8aWQ+VF9PUFRJT05BTAorJXRva2VuIDxpZD5UX1BST01QVAorJXRva2VuIDxpZD5UX1RZUEUKKyV0b2tlbiA8aWQ+VF9ERUZBVUxUCisldG9rZW4gPGlkPlRfU0VMRUNUCisldG9rZW4gPGlkPlRfUkFOR0UKKyV0b2tlbiA8aWQ+VF9PTgogJXRva2VuIDxzdHJpbmc+IFRfV09SRAogJXRva2VuIDxzdHJpbmc+IFRfV09SRF9RVU9URQogJXRva2VuIFRfVU5FUVVBTAotJXRva2VuIFRfRU9GCi0ldG9rZW4gVF9FT0wKICV0b2tlbiBUX0NMT1NFX1BBUkVOCiAldG9rZW4gVF9PUEVOX1BBUkVOCi0ldG9rZW4gVF9PTgotJXRva2VuIFRfU0VMRUNUCi0ldG9rZW4gVF9SQU5HRQorJXRva2VuIFRfRU9MCiAKICVsZWZ0IFRfT1IKICVsZWZ0IFRfQU5ECkBAIC04MiwzOCArODUsNTQgQEAKICVub25hc3NvYyBUX05PVAogCiAldHlwZSA8c3RyaW5nPiBwcm9tcHQKLSV0eXBlIDxzdHJpbmc+IHNvdXJjZQogJXR5cGUgPHN5bWJvbD4gc3ltYm9sCiAldHlwZSA8ZXhwcj4gZXhwcgogJXR5cGUgPGV4cHI+IGlmX2V4cHIKLSV0eXBlIDx0b2tlbj4gZW5kCisldHlwZSA8aWQ+IGVuZAorJXR5cGUgPGlkPiBvcHRpb25fbmFtZQorJXR5cGUgPG1lbnU+IGlmX2VudHJ5IG1lbnVfZW50cnkgY2hvaWNlX2VudHJ5CiAKLSV7Ci0jZGVmaW5lIExLQ19ESVJFQ1RfTElOSwotI2luY2x1ZGUgImxrYy5oIgotJX0KKyVkZXN0cnVjdG9yIHsKKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBtaXNzaW5nIGVuZCBzdGF0ZW1lbnQgZm9yIHRoaXMgZW50cnlcbiIsCisJCSQkLT5maWxlLT5uYW1lLCAkJC0+bGluZW5vKTsKKwlpZiAoY3VycmVudF9tZW51ID09ICQkKQorCQltZW51X2VuZF9tZW51KCk7Cit9IGlmX2VudHJ5IG1lbnVfZW50cnkgY2hvaWNlX2VudHJ5CisKICUlCi1pbnB1dDoJICAvKiBlbXB0eSAqLwotCXwgaW5wdXQgYmxvY2sKK2lucHV0OiBzdG10X2xpc3Q7CisKK3N0bXRfbGlzdDoKKwkgIC8qIGVtcHR5ICovCisJfCBzdG10X2xpc3QgY29tbW9uX3N0bXQKKwl8IHN0bXRfbGlzdCBjaG9pY2Vfc3RtdAorCXwgc3RtdF9saXN0IG1lbnVfc3RtdAorCXwgc3RtdF9saXN0IFRfTUFJTk1FTlUgcHJvbXB0IG5sCisJfCBzdG10X2xpc3QgZW5kCQkJeyB6Y29uZl9lcnJvcigidW5leHBlY3RlZCBlbmQgc3RhdGVtZW50Iik7IH0KKwl8IHN0bXRfbGlzdCBUX1dPUkQgZXJyb3IgVF9FT0wJeyB6Y29uZl9lcnJvcigidW5rbm93biBzdGF0ZW1lbnQgXCIlc1wiIiwgJDIpOyB9CisJfCBzdG10X2xpc3Qgb3B0aW9uX25hbWUgZXJyb3IgVF9FT0wKK3sKKwl6Y29uZl9lcnJvcigidW5leHBlY3RlZCBvcHRpb24gXCIlc1wiIiwga2NvbmZfaWRfc3RyaW5ncyArICQyLT5uYW1lKTsKK30KKwl8IHN0bXRfbGlzdCBlcnJvciBUX0VPTAkJeyB6Y29uZl9lcnJvcigiaW52YWxpZCBzdGF0ZW1lbnQiKTsgfQogOwogCi1ibG9jazoJICBjb21tb25fYmxvY2sKLQl8IGNob2ljZV9zdG10Ci0JfCBtZW51X3N0bXQKLQl8IFRfTUFJTk1FTlUgcHJvbXB0IG5sX29yX2VvZgotCXwgVF9FTkRNRU5VCQl7IHpjb25mcHJpbnQoInVuZXhwZWN0ZWQgJ2VuZG1lbnUnIHN0YXRlbWVudCIpOyB9Ci0JfCBUX0VORElGCQl7IHpjb25mcHJpbnQoInVuZXhwZWN0ZWQgJ2VuZGlmJyBzdGF0ZW1lbnQiKTsgfQotCXwgVF9FTkRDSE9JQ0UJCXsgemNvbmZwcmludCgidW5leHBlY3RlZCAnZW5kY2hvaWNlJyBzdGF0ZW1lbnQiKTsgfQotCXwgZXJyb3Igbmxfb3JfZW9mCXsgemNvbmZwcmludCgic3ludGF4IGVycm9yIik7IHl5ZXJyb2s7IH0KK29wdGlvbl9uYW1lOgorCVRfREVQRU5EUyB8IFRfUFJPTVBUIHwgVF9UWVBFIHwgVF9TRUxFQ1QgfCBUX09QVElPTkFMIHwgVF9SQU5HRSB8IFRfREVGQVVMVAogOwogCi1jb21tb25fYmxvY2s6Ci0JICBpZl9zdG10Citjb21tb25fc3RtdDoKKwkgIFRfRU9MCisJfCBpZl9zdG10CiAJfCBjb21tZW50X3N0bXQKIAl8IGNvbmZpZ19zdG10CiAJfCBtZW51Y29uZmlnX3N0bXQKIAl8IHNvdXJjZV9zdG10Ci0JfCBubF9vcl9lb2YKKzsKKworb3B0aW9uX2Vycm9yOgorCSAgVF9XT1JEIGVycm9yIFRfRU9MCQl7IHpjb25mX2Vycm9yKCJ1bmtub3duIG9wdGlvbiBcIiVzXCIiLCAkMSk7IH0KKwl8IGVycm9yIFRfRU9MCQkJeyB6Y29uZl9lcnJvcigiaW52YWxpZCBvcHRpb24iKTsgfQogOwogCiAKQEAgLTE1Niw1MSArMTc1LDE2IEBACiAJfCBjb25maWdfb3B0aW9uX2xpc3QgY29uZmlnX29wdGlvbgogCXwgY29uZmlnX29wdGlvbl9saXN0IGRlcGVuZHMKIAl8IGNvbmZpZ19vcHRpb25fbGlzdCBoZWxwCisJfCBjb25maWdfb3B0aW9uX2xpc3Qgb3B0aW9uX2Vycm9yCiAJfCBjb25maWdfb3B0aW9uX2xpc3QgVF9FT0wKIDsKIAotY29uZmlnX29wdGlvbjogVF9UUklTVEFURSBwcm9tcHRfc3RtdF9vcHQgVF9FT0wKK2NvbmZpZ19vcHRpb246IFRfVFlQRSBwcm9tcHRfc3RtdF9vcHQgVF9FT0wKIHsKLQltZW51X3NldF90eXBlKFNfVFJJU1RBVEUpOwotCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOnRyaXN0YXRlXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKLX07Ci0KLWNvbmZpZ19vcHRpb246IFRfREVGX1RSSVNUQVRFIGV4cHIgaWZfZXhwciBUX0VPTAotewotCW1lbnVfYWRkX2V4cHIoUF9ERUZBVUxULCAkMiwgJDMpOwotCW1lbnVfc2V0X3R5cGUoU19UUklTVEFURSk7Ci0JcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6ZGVmX2Jvb2xlYW5cbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOwotfTsKLQotY29uZmlnX29wdGlvbjogVF9CT09MRUFOIHByb21wdF9zdG10X29wdCBUX0VPTAotewotCW1lbnVfc2V0X3R5cGUoU19CT09MRUFOKTsKLQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpib29sZWFuXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKLX07Ci0KLWNvbmZpZ19vcHRpb246IFRfREVGX0JPT0xFQU4gZXhwciBpZl9leHByIFRfRU9MCi17Ci0JbWVudV9hZGRfZXhwcihQX0RFRkFVTFQsICQyLCAkMyk7Ci0JbWVudV9zZXRfdHlwZShTX0JPT0xFQU4pOwotCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmRlZl9ib29sZWFuXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKLX07Ci0KLWNvbmZpZ19vcHRpb246IFRfSU5UIHByb21wdF9zdG10X29wdCBUX0VPTAotewotCW1lbnVfc2V0X3R5cGUoU19JTlQpOwotCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmludFxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7Ci19OwotCi1jb25maWdfb3B0aW9uOiBUX0hFWCBwcm9tcHRfc3RtdF9vcHQgVF9FT0wKLXsKLQltZW51X3NldF90eXBlKFNfSEVYKTsKLQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpoZXhcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOwotfTsKLQotY29uZmlnX29wdGlvbjogVF9TVFJJTkcgcHJvbXB0X3N0bXRfb3B0IFRfRU9MCi17Ci0JbWVudV9zZXRfdHlwZShTX1NUUklORyk7Ci0JcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6c3RyaW5nXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKKwltZW51X3NldF90eXBlKCQxLT5zdHlwZSk7CisJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6dHlwZSgldSlcbiIsCisJCXpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCksCisJCSQxLT5zdHlwZSk7CiB9OwogCiBjb25maWdfb3B0aW9uOiBUX1BST01QVCBwcm9tcHQgaWZfZXhwciBUX0VPTApAQCAtMjEyLDcgKzE5NiwxMSBAQAogY29uZmlnX29wdGlvbjogVF9ERUZBVUxUIGV4cHIgaWZfZXhwciBUX0VPTAogewogCW1lbnVfYWRkX2V4cHIoUF9ERUZBVUxULCAkMiwgJDMpOwotCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmRlZmF1bHRcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOworCWlmICgkMS0+c3R5cGUgIT0gU19VTktOT1dOKQorCQltZW51X3NldF90eXBlKCQxLT5zdHlwZSk7CisJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6ZGVmYXVsdCgldSlcbiIsCisJCXpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCksCisJCSQxLT5zdHlwZSk7CiB9OwogCiBjb25maWdfb3B0aW9uOiBUX1NFTEVDVCBUX1dPUkQgaWZfZXhwciBUX0VPTApAQCAtMjQwLDggKzIyOCw3IEBACiAKIGNob2ljZV9lbnRyeTogY2hvaWNlIGNob2ljZV9vcHRpb25fbGlzdAogewotCW1lbnVfZW5kX2VudHJ5KCk7Ci0JbWVudV9hZGRfbWVudSgpOworCSQkID0gbWVudV9hZGRfbWVudSgpOwogfTsKIAogY2hvaWNlX2VuZDogZW5kCkBAIC0yNTIsMTMgKzIzOSw4IEBACiAJfQogfTsKIAotY2hvaWNlX3N0bXQ6Ci0JICBjaG9pY2VfZW50cnkgY2hvaWNlX2Jsb2NrIGNob2ljZV9lbmQKLQl8IGNob2ljZV9lbnRyeSBjaG9pY2VfYmxvY2sKLXsKLQlwcmludGYoIiVzOiVkOiBtaXNzaW5nICdlbmRjaG9pY2UnIGZvciB0aGlzICdjaG9pY2UnIHN0YXRlbWVudFxuIiwgY3VycmVudF9tZW51LT5maWxlLT5uYW1lLCBjdXJyZW50X21lbnUtPmxpbmVubyk7Ci0JemNvbmZuZXJycysrOwotfTsKK2Nob2ljZV9zdG10OiBjaG9pY2VfZW50cnkgY2hvaWNlX2Jsb2NrIGNob2ljZV9lbmQKKzsKIAogY2hvaWNlX29wdGlvbl9saXN0OgogCSAgLyogZW1wdHkgKi8KQEAgLTI2Niw2ICsyNDgsNyBAQAogCXwgY2hvaWNlX29wdGlvbl9saXN0IGRlcGVuZHMKIAl8IGNob2ljZV9vcHRpb25fbGlzdCBoZWxwCiAJfCBjaG9pY2Vfb3B0aW9uX2xpc3QgVF9FT0wKKwl8IGNob2ljZV9vcHRpb25fbGlzdCBvcHRpb25fZXJyb3IKIDsKIAogY2hvaWNlX29wdGlvbjogVF9QUk9NUFQgcHJvbXB0IGlmX2V4cHIgVF9FT0wKQEAgLTI3NCwxNiArMjU3LDE1IEBACiAJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6cHJvbXB0XG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKIH07CiAKLWNob2ljZV9vcHRpb246IFRfVFJJU1RBVEUgcHJvbXB0X3N0bXRfb3B0IFRfRU9MCitjaG9pY2Vfb3B0aW9uOiBUX1RZUEUgcHJvbXB0X3N0bXRfb3B0IFRfRU9MCiB7Ci0JbWVudV9zZXRfdHlwZShTX1RSSVNUQVRFKTsKLQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDp0cmlzdGF0ZVxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7Ci19OwotCi1jaG9pY2Vfb3B0aW9uOiBUX0JPT0xFQU4gcHJvbXB0X3N0bXRfb3B0IFRfRU9MCi17Ci0JbWVudV9zZXRfdHlwZShTX0JPT0xFQU4pOwotCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmJvb2xlYW5cbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOworCWlmICgkMS0+c3R5cGUgPT0gU19CT09MRUFOIHx8ICQxLT5zdHlwZSA9PSBTX1RSSVNUQVRFKSB7CisJCW1lbnVfc2V0X3R5cGUoJDEtPnN0eXBlKTsKKwkJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6dHlwZSgldSlcbiIsCisJCQl6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpLAorCQkJJDEtPnN0eXBlKTsKKwl9IGVsc2UKKwkJWVlFUlJPUjsKIH07CiAKIGNob2ljZV9vcHRpb246IFRfT1BUSU9OQUwgVF9FT0wKQEAgLTI5NCwyNCArMjc2LDI3IEBACiAKIGNob2ljZV9vcHRpb246IFRfREVGQVVMVCBUX1dPUkQgaWZfZXhwciBUX0VPTAogewotCW1lbnVfYWRkX3N5bWJvbChQX0RFRkFVTFQsIHN5bV9sb29rdXAoJDIsIDApLCAkMyk7Ci0JcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6ZGVmYXVsdFxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7CisJaWYgKCQxLT5zdHlwZSA9PSBTX1VOS05PV04pIHsKKwkJbWVudV9hZGRfc3ltYm9sKFBfREVGQVVMVCwgc3ltX2xvb2t1cCgkMiwgMCksICQzKTsKKwkJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6ZGVmYXVsdFxuIiwKKwkJCXpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOworCX0gZWxzZQorCQlZWUVSUk9SOwogfTsKIAogY2hvaWNlX2Jsb2NrOgogCSAgLyogZW1wdHkgKi8KLQl8IGNob2ljZV9ibG9jayBjb21tb25fYmxvY2sKKwl8IGNob2ljZV9ibG9jayBjb21tb25fc3RtdAogOwogCiAvKiBpZiBlbnRyeSAqLwogCi1pZjogVF9JRiBleHByIFRfRU9MCitpZl9lbnRyeTogVF9JRiBleHByIG5sCiB7CiAJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6aWZcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOwogCW1lbnVfYWRkX2VudHJ5KE5VTEwpOwogCW1lbnVfYWRkX2RlcCgkMik7Ci0JbWVudV9lbmRfZW50cnkoKTsKLQltZW51X2FkZF9tZW51KCk7CisJJCQgPSBtZW51X2FkZF9tZW51KCk7CiB9OwogCiBpZl9lbmQ6IGVuZApAQCAtMzIyLDE3ICszMDcsMTIgQEAKIAl9CiB9OwogCi1pZl9zdG10OgotCSAgaWYgaWZfYmxvY2sgaWZfZW5kCi0JfCBpZiBpZl9ibG9jawotewotCXByaW50ZigiJXM6JWQ6IG1pc3NpbmcgJ2VuZGlmJyBmb3IgdGhpcyAnaWYnIHN0YXRlbWVudFxuIiwgY3VycmVudF9tZW51LT5maWxlLT5uYW1lLCBjdXJyZW50X21lbnUtPmxpbmVubyk7Ci0JemNvbmZuZXJycysrOwotfTsKK2lmX3N0bXQ6IGlmX2VudHJ5IGlmX2Jsb2NrIGlmX2VuZAorOwogCiBpZl9ibG9jazoKIAkgIC8qIGVtcHR5ICovCi0JfCBpZl9ibG9jayBjb21tb25fYmxvY2sKKwl8IGlmX2Jsb2NrIGNvbW1vbl9zdG10CiAJfCBpZl9ibG9jayBtZW51X3N0bXQKIAl8IGlmX2Jsb2NrIGNob2ljZV9zdG10CiA7CkBAIC0zNDgsOCArMzI4LDcgQEAKIAogbWVudV9lbnRyeTogbWVudSBkZXBlbmRzX2xpc3QKIHsKLQltZW51X2VuZF9lbnRyeSgpOwotCW1lbnVfYWRkX21lbnUoKTsKKwkkJCA9IG1lbnVfYWRkX21lbnUoKTsKIH07CiAKIG1lbnVfZW5kOiBlbmQKQEAgLTM2MCwzMSArMzM5LDIwIEBACiAJfQogfTsKIAotbWVudV9zdG10OgotCSAgbWVudV9lbnRyeSBtZW51X2Jsb2NrIG1lbnVfZW5kCi0JfCBtZW51X2VudHJ5IG1lbnVfYmxvY2sKLXsKLQlwcmludGYoIiVzOiVkOiBtaXNzaW5nICdlbmRtZW51JyBmb3IgdGhpcyAnbWVudScgc3RhdGVtZW50XG4iLCBjdXJyZW50X21lbnUtPmZpbGUtPm5hbWUsIGN1cnJlbnRfbWVudS0+bGluZW5vKTsKLQl6Y29uZm5lcnJzKys7Ci19OworbWVudV9zdG10OiBtZW51X2VudHJ5IG1lbnVfYmxvY2sgbWVudV9lbmQKKzsKIAogbWVudV9ibG9jazoKIAkgIC8qIGVtcHR5ICovCi0JfCBtZW51X2Jsb2NrIGNvbW1vbl9ibG9jaworCXwgbWVudV9ibG9jayBjb21tb25fc3RtdAogCXwgbWVudV9ibG9jayBtZW51X3N0bXQKIAl8IG1lbnVfYmxvY2sgY2hvaWNlX3N0bXQKLQl8IG1lbnVfYmxvY2sgZXJyb3IgVF9FT0wJCXsgemNvbmZwcmludCgiaW52YWxpZCBtZW51IG9wdGlvbiIpOyB5eWVycm9rOyB9CiA7CiAKLXNvdXJjZTogVF9TT1VSQ0UgcHJvbXB0IFRfRU9MCitzb3VyY2Vfc3RtdDogVF9TT1VSQ0UgcHJvbXB0IFRfRU9MCiB7Ci0JJCQgPSAkMjsKIAlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpzb3VyY2UgJXNcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCksICQyKTsKLX07Ci0KLXNvdXJjZV9zdG10OiBzb3VyY2UKLXsKLQl6Y29uZl9uZXh0ZmlsZSgkMSk7CisJemNvbmZfbmV4dGZpbGUoJDIpOwogfTsKIAogLyogY29tbWVudCBlbnRyeSAqLwpAQCAtNDE2LDkgKzM4NCwxMSBAQAogCiAvKiBkZXBlbmRzIG9wdGlvbiAqLwogCi1kZXBlbmRzX2xpc3Q6CSAgLyogZW1wdHkgKi8KLQkJfCBkZXBlbmRzX2xpc3QgZGVwZW5kcwotCQl8IGRlcGVuZHNfbGlzdCBUX0VPTAorZGVwZW5kc19saXN0OgorCSAgLyogZW1wdHkgKi8KKwl8IGRlcGVuZHNfbGlzdCBkZXBlbmRzCisJfCBkZXBlbmRzX2xpc3QgVF9FT0wKKwl8IGRlcGVuZHNfbGlzdCBvcHRpb25fZXJyb3IKIDsKIAogZGVwZW5kczogVF9ERVBFTkRTIFRfT04gZXhwciBUX0VPTApAQCAtNDUwLDEzICs0MjAsMTUgQEAKIAl8IFRfV09SRF9RVU9URQogOwogCi1lbmQ6CSAgVF9FTkRNRU5VIG5sX29yX2VvZgl7ICQkID0gVF9FTkRNRU5VOyB9Ci0JfCBUX0VORENIT0lDRSBubF9vcl9lb2YJeyAkJCA9IFRfRU5EQ0hPSUNFOyB9Ci0JfCBUX0VORElGIG5sX29yX2VvZgl7ICQkID0gVF9FTkRJRjsgfQorZW5kOgkgIFRfRU5ETUVOVSBUX0VPTAl7ICQkID0gJDE7IH0KKwl8IFRfRU5EQ0hPSUNFIFRfRU9MCXsgJCQgPSAkMTsgfQorCXwgVF9FTkRJRiBUX0VPTAkJeyAkJCA9ICQxOyB9CiA7CiAKLW5sX29yX2VvZjoKLQlUX0VPTCB8IFRfRU9GOworbmw6CisJICBUX0VPTAorCXwgbmwgVF9FT0wKKzsKIAogaWZfZXhwcjogIC8qIGVtcHR5ICovCQkJeyAkJCA9IE5VTEw7IH0KIAl8IFRfSUYgZXhwcgkJCXsgJCQgPSAkMjsgfQpAQCAtNDg5LDE2ICs0NjEsMTYgQEAKIAltb2R1bGVzX3N5bSA9IHN5bV9sb29rdXAoIk1PRFVMRVMiLCAwKTsKIAlyb290bWVudS5wcm9tcHQgPSBtZW51X2FkZF9wcm9tcHQoUF9NRU5VLCAiTGludXggS2VybmVsIENvbmZpZ3VyYXRpb24iLCBOVUxMKTsKIAotCS8vemNvbmZkZWJ1ZyA9IDE7CisjaWYgWVlERUJVRworCWlmIChnZXRlbnYoIlpDT05GX0RFQlVHIikpCisJCXpjb25mZGVidWcgPSAxOworI2VuZGlmCiAJemNvbmZwYXJzZSgpOwogCWlmICh6Y29uZm5lcnJzKQogCQlleGl0KDEpOwogCW1lbnVfZmluYWxpemUoJnJvb3RtZW51KTsKIAlmb3JfYWxsX3N5bWJvbHMoaSwgc3ltKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCEoc3ltLT5mbGFncyAmIFNZTUJPTF9DSEVDS0VEKSAmJiBzeW1fY2hlY2tfZGVwcyhzeW0pKQotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJcbiIpOwotCQllbHNlCi0JCQlzeW0tPmZsYWdzIHw9IFNZTUJPTF9DSEVDS19ET05FOworCQlzeW1fY2hlY2tfZGVwcyhzeW0pOwogICAgICAgICB9CiAKIAlzeW1fY2hhbmdlX2NvdW50ID0gMTsKQEAgLTUxMywyMCArNDg1LDI1IEBACiAJY2FzZSBUX0VORENIT0lDRToJcmV0dXJuICJlbmRjaG9pY2UiOwogCWNhc2UgVF9JRjoJCXJldHVybiAiaWYiOwogCWNhc2UgVF9FTkRJRjoJCXJldHVybiAiZW5kaWYiOworCWNhc2UgVF9ERVBFTkRTOgkJcmV0dXJuICJkZXBlbmRzIjsKIAl9CiAJcmV0dXJuICI8dG9rZW4+IjsKIH0KIAotc3RhdGljIGJvb2wgemNvbmZfZW5kdG9rZW4oaW50IHRva2VuLCBpbnQgc3RhcnR0b2tlbiwgaW50IGVuZHRva2VuKQorc3RhdGljIGJvb2wgemNvbmZfZW5kdG9rZW4oc3RydWN0IGtjb25mX2lkICppZCwgaW50IHN0YXJ0dG9rZW4sIGludCBlbmR0b2tlbikKIHsKLQlpZiAodG9rZW4gIT0gZW5kdG9rZW4pIHsKLQkJemNvbmZwcmludCgidW5leHBlY3RlZCAnJXMnIHdpdGhpbiAlcyBibG9jayIsIHpjb25mX3Rva2VubmFtZSh0b2tlbiksIHpjb25mX3Rva2VubmFtZShzdGFydHRva2VuKSk7CisJaWYgKGlkLT50b2tlbiAhPSBlbmR0b2tlbikgeworCQl6Y29uZl9lcnJvcigidW5leHBlY3RlZCAnJXMnIHdpdGhpbiAlcyBibG9jayIsCisJCQlrY29uZl9pZF9zdHJpbmdzICsgaWQtPm5hbWUsIHpjb25mX3Rva2VubmFtZShzdGFydHRva2VuKSk7CiAJCXpjb25mbmVycnMrKzsKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAlpZiAoY3VycmVudF9tZW51LT5maWxlICE9IGN1cnJlbnRfZmlsZSkgewotCQl6Y29uZnByaW50KCInJXMnIGluIGRpZmZlcmVudCBmaWxlIHRoYW4gJyVzJyIsIHpjb25mX3Rva2VubmFtZSh0b2tlbiksIHpjb25mX3Rva2VubmFtZShzdGFydHRva2VuKSk7Ci0JCXpjb25mcHJpbnQoImxvY2F0aW9uIG9mIHRoZSAnJXMnIiwgemNvbmZfdG9rZW5uYW1lKHN0YXJ0dG9rZW4pKTsKKwkJemNvbmZfZXJyb3IoIiclcycgaW4gZGlmZmVyZW50IGZpbGUgdGhhbiAnJXMnIiwKKwkJCWtjb25mX2lkX3N0cmluZ3MgKyBpZC0+bmFtZSwgemNvbmZfdG9rZW5uYW1lKHN0YXJ0dG9rZW4pKTsKKwkJZnByaW50ZihzdGRlcnIsICIlczolZDogbG9jYXRpb24gb2YgdGhlICclcydcbiIsCisJCQljdXJyZW50X21lbnUtPmZpbGUtPm5hbWUsIGN1cnJlbnRfbWVudS0+bGluZW5vLAorCQkJemNvbmZfdG9rZW5uYW1lKHN0YXJ0dG9rZW4pKTsKIAkJemNvbmZuZXJycysrOwogCQlyZXR1cm4gZmFsc2U7CiAJfQpAQCAtNTM3LDcgKzUxNCwxOSBAQAogewogCXZhX2xpc3QgYXA7CiAKLQlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiAiLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpICsgMSk7CisJZnByaW50ZihzdGRlcnIsICIlczolZDogIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7CisJdmFfc3RhcnQoYXAsIGVycik7CisJdmZwcmludGYoc3RkZXJyLCBlcnIsIGFwKTsKKwl2YV9lbmQoYXApOworCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKK30KKworc3RhdGljIHZvaWQgemNvbmZfZXJyb3IoY29uc3QgY2hhciAqZXJyLCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKworCXpjb25mbmVycnMrKzsKKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiAiLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKIAl2YV9zdGFydChhcCwgZXJyKTsKIAl2ZnByaW50ZihzdGRlcnIsIGVyciwgYXApOwogCXZhX2VuZChhcCk7CkBAIC01NDYsNyArNTM1LDkgQEAKIAogc3RhdGljIHZvaWQgemNvbmZlcnJvcihjb25zdCBjaGFyICplcnIpCiB7CisjaWYgWVlERUJVRwogCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6ICVzXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpICsgMSwgZXJyKTsKKyNlbmRpZgogfQogCiB2b2lkIHByaW50X3F1b3RlZF9zdHJpbmcoRklMRSAqb3V0LCBjb25zdCBjaGFyICpzdHIpCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKaW5kZXggNDVjNDE0OS4uZmM3NzQ0MyAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwpAQCAtMTk4Niw2ICsxOTg2LDkgQEAKIAogCWlub2RlX3NlY3VyaXR5X3NldF9zaWQoaW5vZGUsIG5ld3NpZCk7CiAKKwlpZiAoc2JzZWMtPmJlaGF2aW9yID09IFNFQ1VSSVRZX0ZTX1VTRV9NTlRQT0lOVCkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCiAJaWYgKG5hbWUpIHsKIAkJbmFtZXAgPSBrc3RyZHVwKFhBVFRSX1NFTElOVVhfU1VGRklYLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFuYW1lcCkKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvc2VsaW51eGZzLmMgYi9zZWN1cml0eS9zZWxpbnV4L3NlbGludXhmcy5jCmluZGV4IGZkYzM4MjMuLjBlMTM1MmEgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvc2VsaW51eGZzLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9zZWxpbnV4ZnMuYwpAQCAtMjcxLDQ2ICsyNzEsMzggQEAKIAkud3JpdGUJCT0gc2VsX3dyaXRlX2xvYWQsCiB9OwogCi0KLXN0YXRpYyBzc2l6ZV90IHNlbF93cml0ZV9jb250ZXh0KHN0cnVjdCBmaWxlICogZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKiBidWYsCi0JCQkJIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQotCitzdGF0aWMgc3NpemVfdCBzZWxfd3JpdGVfY29udGV4dChzdHJ1Y3QgZmlsZSAqIGZpbGUsIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpCiB7Ci0JY2hhciAqcGFnZTsKLQl1MzIgc2lkOworCWNoYXIgKmNhbm9uOworCXUzMiBzaWQsIGxlbjsKIAlzc2l6ZV90IGxlbmd0aDsKIAogCWxlbmd0aCA9IHRhc2tfaGFzX3NlY3VyaXR5KGN1cnJlbnQsIFNFQ1VSSVRZX19DSEVDS19DT05URVhUKTsKIAlpZiAobGVuZ3RoKQogCQlyZXR1cm4gbGVuZ3RoOwogCi0JaWYgKGNvdW50ID49IFBBR0VfU0laRSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JaWYgKCpwcG9zICE9IDApIHsKLQkJLyogTm8gcGFydGlhbCB3cml0ZXMuICovCi0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlwYWdlID0gKGNoYXIqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKLQlpZiAoIXBhZ2UpCi0JCXJldHVybiAtRU5PTUVNOwotCWxlbmd0aCA9IC1FRkFVTFQ7Ci0JaWYgKGNvcHlfZnJvbV91c2VyKHBhZ2UsIGJ1ZiwgY291bnQpKQotCQlnb3RvIG91dDsKLQotCWxlbmd0aCA9IHNlY3VyaXR5X2NvbnRleHRfdG9fc2lkKHBhZ2UsIGNvdW50LCAmc2lkKTsKKwlsZW5ndGggPSBzZWN1cml0eV9jb250ZXh0X3RvX3NpZChidWYsIHNpemUsICZzaWQpOwogCWlmIChsZW5ndGggPCAwKQotCQlnb3RvIG91dDsKKwkJcmV0dXJuIGxlbmd0aDsKIAotCWxlbmd0aCA9IGNvdW50OworCWxlbmd0aCA9IHNlY3VyaXR5X3NpZF90b19jb250ZXh0KHNpZCwgJmNhbm9uLCAmbGVuKTsKKwlpZiAobGVuZ3RoIDwgMCkKKwkJcmV0dXJuIGxlbmd0aDsKKworCWlmIChsZW4gPiBTSU1QTEVfVFJBTlNBQ1RJT05fTElNSVQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogIGNvbnRleHQgc2l6ZSAoJXUpIGV4Y2VlZHMgcGF5bG9hZCAiCisJCSAgICAgICAibWF4XG4iLCBfX0ZVTkNUSU9OX18sIGxlbik7CisJCWxlbmd0aCA9IC1FUkFOR0U7CisJCWdvdG8gb3V0OworCX0KKworCW1lbWNweShidWYsIGNhbm9uLCBsZW4pOworCWxlbmd0aCA9IGxlbjsKIG91dDoKLQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIHBhZ2UpOworCWtmcmVlKGNhbm9uKTsKIAlyZXR1cm4gbGVuZ3RoOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzZWxfY29udGV4dF9vcHMgPSB7Ci0JLndyaXRlCQk9IHNlbF93cml0ZV9jb250ZXh0LAotfTsKLQogc3RhdGljIHNzaXplX3Qgc2VsX3JlYWRfY2hlY2tyZXFwcm90KHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqYnVmLAogCQkJCSAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CkBAIC0zNzUsNiArMzY3LDcgQEAKIAlbU0VMX1JFTEFCRUxdID0gc2VsX3dyaXRlX3JlbGFiZWwsCiAJW1NFTF9VU0VSXSA9IHNlbF93cml0ZV91c2VyLAogCVtTRUxfTUVNQkVSXSA9IHNlbF93cml0ZV9tZW1iZXIsCisJW1NFTF9DT05URVhUXSA9IHNlbF93cml0ZV9jb250ZXh0LAogfTsKIAogc3RhdGljIHNzaXplX3Qgc2VsaW51eF90cmFuc2FjdGlvbl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IHNpemUsIGxvZmZfdCAqcG9zKQpAQCAtMTIyMCw3ICsxMjEzLDcgQEAKIAlzdGF0aWMgc3RydWN0IHRyZWVfZGVzY3Igc2VsaW51eF9maWxlc1tdID0gewogCQlbU0VMX0xPQURdID0geyJsb2FkIiwgJnNlbF9sb2FkX29wcywgU19JUlVTUnxTX0lXVVNSfSwKIAkJW1NFTF9FTkZPUkNFXSA9IHsiZW5mb3JjZSIsICZzZWxfZW5mb3JjZV9vcHMsIFNfSVJVR098U19JV1VTUn0sCi0JCVtTRUxfQ09OVEVYVF0gPSB7ImNvbnRleHQiLCAmc2VsX2NvbnRleHRfb3BzLCBTX0lSVUdPfFNfSVdVR099LAorCQlbU0VMX0NPTlRFWFRdID0geyJjb250ZXh0IiwgJnRyYW5zYWN0aW9uX29wcywgU19JUlVHT3xTX0lXVUdPfSwKIAkJW1NFTF9BQ0NFU1NdID0geyJhY2Nlc3MiLCAmdHJhbnNhY3Rpb25fb3BzLCBTX0lSVUdPfFNfSVdVR099LAogCQlbU0VMX0NSRUFURV0gPSB7ImNyZWF0ZSIsICZ0cmFuc2FjdGlvbl9vcHMsIFNfSVJVR098U19JV1VHT30sCiAJCVtTRUxfUkVMQUJFTF0gPSB7InJlbGFiZWwiLCAmdHJhbnNhY3Rpb25fb3BzLCBTX0lSVUdPfFNfSVdVR099LApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9zcy9tbHMuYyBiL3NlY3VyaXR5L3NlbGludXgvc3MvbWxzLmMKaW5kZXggYWFlZmFjMi4uNjQwZDBiZiAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9zcy9tbHMuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L3NzL21scy5jCkBAIC0yNjIsOCArMjYyLDExIEBACiAJc3RydWN0IGNhdF9kYXR1bSAqY2F0ZGF0dW0sICpybmdkYXR1bTsKIAlpbnQgbCwgcmMgPSAtRUlOVkFMOwogCi0JaWYgKCFzZWxpbnV4X21sc19lbmFibGVkKQorCWlmICghc2VsaW51eF9tbHNfZW5hYmxlZCkgeworCQlpZiAoZGVmX3NpZCAhPSBTRUNTSURfTlVMTCAmJiBvbGRjKQorCQkJKnNjb250ZXh0ICs9IHN0cmxlbigqc2NvbnRleHQpOwogCQlyZXR1cm4gMDsKKwl9CiAKIAkvKgogCSAqIE5vIE1MUyBjb21wb25lbnQgdG8gdGhlIHNlY3VyaXR5IGNvbnRleHQsIHRyeSBhbmQgbWFwIHRvCmRpZmYgLS1naXQgYS9zb3VuZC9hcm0vcHhhMnh4LWFjOTcuYyBiL3NvdW5kL2FybS9weGEyeHgtYWM5Ny5jCmluZGV4IGQxZjlkYTQuLmM5NmM4YTIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2FybS9weGEyeHgtYWM5Ny5jCisrKyBiL3NvdW5kL2FybS9weGEyeHgtYWM5Ny5jCkBAIC0yNzUsOSArMjc1LDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBweGEyeHhfYWM5N19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKl9kZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgcHhhMnh4X2FjOTdfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlzbmRfY2FyZF90ICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKF9kZXYpOworCXNuZF9jYXJkX3QgKmNhcmQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCWludCByZXQgPSAwOwogCiAJaWYgKGNhcmQpCkBAIC0yODYsOSArMjg2LDkgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHB4YTJ4eF9hYzk3X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpfZGV2KQorc3RhdGljIGludCBweGEyeHhfYWM5N19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXNuZF9jYXJkX3QgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEoX2Rldik7CisJc25kX2NhcmRfdCAqY2FyZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAJaW50IHJldCA9IDA7CiAKIAlpZiAoY2FyZCkKQEAgLTMwMiw3ICszMDIsNyBAQAogI2RlZmluZSBweGEyeHhfYWM5N19yZXN1bWUJTlVMTAogI2VuZGlmCiAKLXN0YXRpYyBpbnQgcHhhMnh4X2FjOTdfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBweGEyeHhfYWM5N19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc25kX2NhcmRfdCAqY2FyZDsKIAlhYzk3X2J1c190ICphYzk3X2J1czsKQEAgLTMxNSw4ICszMTUsOCBAQAogCWlmICghY2FyZCkKIAkJZ290byBlcnI7CiAKLQljYXJkLT5kZXYgPSBkZXY7Ci0Jc3RybmNweShjYXJkLT5kcml2ZXIsIGRldi0+ZHJpdmVyLT5uYW1lLCBzaXplb2YoY2FyZC0+ZHJpdmVyKSk7CisJY2FyZC0+ZGV2ID0gJmRldi0+ZGV2OworCXN0cm5jcHkoY2FyZC0+ZHJpdmVyLCBkZXYtPmRldi5kcml2ZXItPm5hbWUsIHNpemVvZihjYXJkLT5kcml2ZXIpKTsKIAogCXJldCA9IHB4YTJ4eF9wY21fbmV3KGNhcmQsICZweGEyeHhfYWM5N19wY21fY2xpZW50LCAmcHhhMnh4X2FjOTdfcGNtKTsKIAlpZiAocmV0KQpAQCAtMzQ3LDEzICszNDcsMTMgQEAKIAlzbnByaW50ZihjYXJkLT5zaG9ydG5hbWUsIHNpemVvZihjYXJkLT5zaG9ydG5hbWUpLAogCQkgIiVzIiwgc25kX2FjOTdfZ2V0X3Nob3J0X25hbWUocHhhMnh4X2FjOTdfYWM5NykpOwogCXNucHJpbnRmKGNhcmQtPmxvbmduYW1lLCBzaXplb2YoY2FyZC0+bG9uZ25hbWUpLAotCQkgIiVzICglcykiLCBkZXYtPmRyaXZlci0+bmFtZSwgY2FyZC0+bWl4ZXJuYW1lKTsKKwkJICIlcyAoJXMpIiwgZGV2LT5kZXYuZHJpdmVyLT5uYW1lLCBjYXJkLT5taXhlcm5hbWUpOwogCiAJc25kX2NhcmRfc2V0X3BtX2NhbGxiYWNrKGNhcmQsIHB4YTJ4eF9hYzk3X2RvX3N1c3BlbmQsCiAJCQkJIHB4YTJ4eF9hYzk3X2RvX3Jlc3VtZSwgTlVMTCk7CiAJcmV0ID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCk7CiAJaWYgKHJldCA9PSAwKSB7Ci0JCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGNhcmQpOworCQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIGNhcmQpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTM2OCwxMyArMzY4LDEzIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBweGEyeHhfYWM5N19yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBweGEyeHhfYWM5N19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXNuZF9jYXJkX3QgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzbmRfY2FyZF90ICpjYXJkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAogCWlmIChjYXJkKSB7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOwogCQlHQ1IgfD0gR0NSX0FDTElOS19PRkY7CiAJCWZyZWVfaXJxKElSUV9BQzk3LCBOVUxMKTsKIAkJcHhhX3NldF9ja2VuKENLRU4yX0FDOTcsIDApOwpAQCAtMzgzLDIzICszODMsMjQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHB4YTJ4eF9hYzk3X2RyaXZlciA9IHsKLQkubmFtZQkJPSAicHhhMnh4LWFjOTciLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcHhhMnh4X2FjOTdfZHJpdmVyID0gewogCS5wcm9iZQkJPSBweGEyeHhfYWM5N19wcm9iZSwKIAkucmVtb3ZlCQk9IHB4YTJ4eF9hYzk3X3JlbW92ZSwKIAkuc3VzcGVuZAk9IHB4YTJ4eF9hYzk3X3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBweGEyeHhfYWM5N19yZXN1bWUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gInB4YTJ4eC1hYzk3IiwKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgcHhhMnh4X2FjOTdfaW5pdCh2b2lkKQogewotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJnB4YTJ4eF9hYzk3X2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmcHhhMnh4X2FjOTdfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHB4YTJ4eF9hYzk3X2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmcHhhMnh4X2FjOTdfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmcHhhMnh4X2FjOTdfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQocHhhMnh4X2FjOTdfaW5pdCk7CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL2luaXQuYyBiL3NvdW5kL2NvcmUvaW5pdC5jCmluZGV4IGQ5ZWUyN2EuLjMzODEzZjkgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvaW5pdC5jCisrKyBiL3NvdW5kL2NvcmUvaW5pdC5jCkBAIC02NzQsMjMgKzY3NCwyNCBAQAogCXNuZF9jYXJkX3QgKmNhcmQ7CiB9OwogCi0jZGVmaW5lIGdldF9zbmRfZ2VuZXJpY19jYXJkKGRldikJY29udGFpbmVyX29mKHRvX3BsYXRmb3JtX2RldmljZShkZXYpLCBzdHJ1Y3Qgc25kX2dlbmVyaWNfZGV2aWNlLCBwZGV2KS0+Y2FyZAorI2RlZmluZSBnZXRfc25kX2dlbmVyaWNfY2FyZChkZXYpCWNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBzbmRfZ2VuZXJpY19kZXZpY2UsIHBkZXYpLT5jYXJkCiAKICNkZWZpbmUgU05EX0dFTkVSSUNfTkFNRQkic25kX2dlbmVyaWMiCiAKICNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyBpbnQgc25kX2dlbmVyaWNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSk7Ci1zdGF0aWMgaW50IHNuZF9nZW5lcmljX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpOworc3RhdGljIGludCBzbmRfZ2VuZXJpY19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKTsKK3N0YXRpYyBpbnQgc25kX2dlbmVyaWNfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldik7CiAjZW5kaWYKIAogLyogaW5pdGlhbGl6ZWQgaW4gc291bmQuYyAqLwotc3RydWN0IGRldmljZV9kcml2ZXIgc25kX2dlbmVyaWNfZHJpdmVyID0gewotCS5uYW1lCQk9IFNORF9HRU5FUklDX05BTUUsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNuZF9nZW5lcmljX2RyaXZlciA9IHsKICNpZmRlZiBDT05GSUdfUE0KIAkuc3VzcGVuZAk9IHNuZF9nZW5lcmljX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBzbmRfZ2VuZXJpY19yZXN1bWUsCiAjZW5kaWYKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSBTTkRfR0VORVJJQ19OQU1FLAorCX0sCiB9OwogCiB2b2lkIHNuZF9nZW5lcmljX2RldmljZV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKQEAgLTgyMSw3ICs4MjIsNyBAQAogCiAjaWZkZWYgQ09ORklHX1NORF9HRU5FUklDX0RSSVZFUgogLyogc3VzcGVuZC9yZXN1bWUgY2FsbGJhY2tzIGZvciBzbmRfZ2VuZXJpYyBwbGF0Zm9ybSBkZXZpY2UgKi8KLXN0YXRpYyBpbnQgc25kX2dlbmVyaWNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgc25kX2dlbmVyaWNfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzbmRfY2FyZF90ICpjYXJkOwogCkBAIC04MzQsNyArODM1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzbmRfZ2VuZXJpY19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBzbmRfZ2VuZXJpY19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXNuZF9jYXJkX3QgKmNhcmQ7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvc291bmQuYyBiL3NvdW5kL2NvcmUvc291bmQuYwppbmRleCAxMTM5ZGQ4Li42ZTdjYWQxZSAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9zb3VuZC5jCisrKyBiL3NvdW5kL2NvcmUvc291bmQuYwpAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KICNpbmNsdWRlIDxsaW51eC9rbW9kLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2ZnNfZnNfa2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAKICNkZWZpbmUgU05EUlZfT1NfTUlOT1JTIDI1NgogCkBAIC0zMjksNyArMzI5LDcgQEAKICAqLwogCiAjaWZkZWYgQ09ORklHX1NORF9HRU5FUklDX0RSSVZFUgotZXh0ZXJuIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHNuZF9nZW5lcmljX2RyaXZlcjsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNuZF9nZW5lcmljX2RyaXZlcjsKICNlbmRpZgogCiBzdGF0aWMgaW50IF9faW5pdCBhbHNhX3NvdW5kX2luaXQodm9pZCkKQEAgLTM1Nyw3ICszNTcsNyBAQAogCX0KIAlzbmRfaW5mb19taW5vcl9yZWdpc3RlcigpOwogI2lmZGVmIENPTkZJR19TTkRfR0VORVJJQ19EUklWRVIKLQlkcml2ZXJfcmVnaXN0ZXIoJnNuZF9nZW5lcmljX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzbmRfZ2VuZXJpY19kcml2ZXIpOwogI2VuZGlmCiAJZm9yIChjb250cm9sbnVtID0gMDsgY29udHJvbG51bSA8IGNhcmRzX2xpbWl0OyBjb250cm9sbnVtKyspCiAJCWRldmZzX21rX2NkZXYoTUtERVYobWFqb3IsIGNvbnRyb2xudW08PDUpLCBTX0lGQ0hSIHwgZGV2aWNlX21vZGUsICJzbmQvY29udHJvbEMlZCIsIGNvbnRyb2xudW0pOwpAQCAtMzc1LDcgKzM3NSw3IEBACiAJCWRldmZzX3JlbW92ZSgic25kL2NvbnRyb2xDJWQiLCBjb250cm9sbnVtKTsKIAogI2lmZGVmIENPTkZJR19TTkRfR0VORVJJQ19EUklWRVIKLQlkcml2ZXJfdW5yZWdpc3Rlcigmc25kX2dlbmVyaWNfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc25kX2dlbmVyaWNfZHJpdmVyKTsKICNlbmRpZgogCXNuZF9pbmZvX21pbm9yX3VucmVnaXN0ZXIoKTsKIAlzbmRfaW5mb19kb25lKCk7CmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL3Z4L3Z4X2h3ZGVwLmMgYi9zb3VuZC9kcml2ZXJzL3Z4L3Z4X2h3ZGVwLmMKaW5kZXggOWEzZGMzYy4uYzQ5OTNiMCAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy92eC92eF9od2RlcC5jCisrKyBiL3NvdW5kL2RyaXZlcnMvdngvdnhfaHdkZXAuYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPHNvdW5kL2RyaXZlci5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9od2RlcC5oPgogI2luY2x1ZGUgPHNvdW5kL3Z4X2NvcmUuaD4KZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9LY29uZmlnIGIvc291bmQvb3NzL0tjb25maWcKaW5kZXggOTUzZTVmMy4uODhlNTJkYyAxMDA2NDQKLS0tIGEvc291bmQvb3NzL0tjb25maWcKKysrIGIvc291bmQvb3NzL0tjb25maWcKQEAgLTQsOSArNCwyNCBAQAogIyBNb3JlIGhhY2tpbmcgZm9yIG1vZHVsYXJpc2F0aW9uLgogIwogIyBQcm9tcHQgdXNlciBmb3IgcHJpbWFyeSBkcml2ZXJzLgorCitjb25maWcgT0JTT0xFVEVfT1NTX0RSSVZFUgorCWJvb2wgIk9ic29sZXRlIE9TUyBkcml2ZXJzIgorCWRlcGVuZHMgb24gU09VTkRfUFJJTUUKKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIG9ic29sZXRlIE9TUyBkcml2ZXJzIHRoYXQKKwkgIGFyZSBzY2hlZHVsZWQgZm9yIHJlbW92YWwgaW4gdGhlIG5lYXIgZnV0dXJlIHNpbmNlIHRoZXJlCisJICBhcmUgQUxTQSBkcml2ZXJzIGZvciB0aGUgc2FtZSBoYXJkd2FyZS4KKworCSAgUGxlYXNlIGNvbnRhY3QgQWRyaWFuIEJ1bmsgPGJ1bmtAc3R1c3RhLmRlPiBpZiB5b3UgaGFkIHRvCisJICBzYXkgWSBoZXJlIGJlY2F1c2UgeW91ciBzb3VuZGNhcmQgaXMgbm90IHByb3Blcmx5IHN1cHBvcnRlZAorCSAgYnkgQUxTQS4KKworCSAgSWYgdW5zdXJlLCBzYXkgTi4KKwogY29uZmlnIFNPVU5EX0JUODc4CiAJdHJpc3RhdGUgIkJUODc4IGF1ZGlvIGRtYSIKLQlkZXBlbmRzIG9uIFNPVU5EX1BSSU1FICYmIFBDSQorCWRlcGVuZHMgb24gU09VTkRfUFJJTUUgJiYgUENJICYmIE9CU09MRVRFX09TU19EUklWRVIKIAktLS1oZWxwLS0tCiAJICBBdWRpbyBETUEgc3VwcG9ydCBmb3IgYnQ4NzggYmFzZWQgZ3JhYmJlciBib2FyZHMuICBBcyB5b3UgbWlnaHQgaGF2ZQogCSAgYWxyZWFkeSBub3RpY2VkLCBidDg3OCBpcyBsaXN0ZWQgd2l0aCB0d28gZnVuY3Rpb25zIGluIC9wcm9jL3BjaS4KQEAgLTIyLDcgKzM3LDcgQEAKIAogY29uZmlnIFNPVU5EX0NNUENJCiAJdHJpc3RhdGUgIkMtTWVkaWEgUENJIChDTUk4MzM4Lzg3MzgpIgotCWRlcGVuZHMgb24gU09VTkRfUFJJTUUgJiYgUENJCisJZGVwZW5kcyBvbiBTT1VORF9QUklNRSAmJiBQQ0kgJiYgT0JTT0xFVEVfT1NTX0RSSVZFUgogCWhlbHAKIAkgIFNheSBZIG9yIE0gaWYgeW91IGhhdmUgYSBQQ0kgc291bmQgY2FyZCB1c2luZyB0aGUgQ01JODMzOAogCSAgb3IgdGhlIENNSTg3MzggY2hpcHNldC4gIERhdGEgb24gdGhlc2UgY2hpcHMgYXJlIGF2YWlsYWJsZSBhdApAQCAtNjEsNyArNzYsNyBAQAogCiBjb25maWcgU09VTkRfRU1VMTBLMQogCXRyaXN0YXRlICJDcmVhdGl2ZSBTQkxpdmUhIChFTVUxMEsxKSIKLQlkZXBlbmRzIG9uIFNPVU5EX1BSSU1FICYmIFBDSQorCWRlcGVuZHMgb24gU09VTkRfUFJJTUUgJiYgUENJICYmIE9CU09MRVRFX09TU19EUklWRVIKIAktLS1oZWxwLS0tCiAJICBTYXkgWSBvciBNIGlmIHlvdSBoYXZlIGEgUENJIHNvdW5kIGNhcmQgdXNpbmcgdGhlIEVNVTEwSzEgY2hpcHNldCwKIAkgIHN1Y2ggYXMgdGhlIENyZWF0aXZlIFNCTGl2ZSEsIFNCIFBDSTUxMiBvciBFbXUtQVBTLgpAQCAtOTUsNyArMTEwLDcgQEAKIAogY29uZmlnIFNPVU5EX0NTNDI4MQogCXRyaXN0YXRlICJDcnlzdGFsIFNvdW5kIENTNDI4MSIKLQlkZXBlbmRzIG9uIFNPVU5EX1BSSU1FICYmIFBDSQorCWRlcGVuZHMgb24gU09VTkRfUFJJTUUgJiYgUENJICYmIE9CU09MRVRFX09TU19EUklWRVIKIAloZWxwCiAJICBQaWN0dXJlIGFuZCBmZWF0dXJlIGxpc3QgYXQKIAkgIDxodHRwOi8vd3d3LnBjYnJva2VyLmNvbS9jcnlzdGFsNDI4MS5odG1sPi4KQEAgLTExMiw3ICsxMjcsNyBAQAogCiBjb25maWcgU09VTkRfRVMxMzcwCiAJdHJpc3RhdGUgIkVuc29uaXEgQXVkaW9QQ0kgKEVTMTM3MCkiCi0JZGVwZW5kcyBvbiBTT1VORF9QUklNRSAmJiBQQ0kKKwlkZXBlbmRzIG9uIFNPVU5EX1BSSU1FICYmIFBDSSAmJiBPQlNPTEVURV9PU1NfRFJJVkVSCiAJaGVscAogCSAgU2F5IFkgb3IgTSBpZiB5b3UgaGF2ZSBhIFBDSSBzb3VuZCBjYXJkIHV0aWxpemluZyB0aGUgRW5zb25pcQogCSAgRVMxMzcwIGNoaXBzZXQsIHN1Y2ggYXMgRW5zb25pcSdzIEF1ZGlvUENJIChub24tOTcpLiBUbyBmaW5kCkBAIC0xMjUsNyArMTQwLDcgQEAKIAogY29uZmlnIFNPVU5EX0VTMTM3MQogCXRyaXN0YXRlICJDcmVhdGl2ZSBFbnNvbmlxIEF1ZGlvUENJIDk3IChFUzEzNzEpIgotCWRlcGVuZHMgb24gU09VTkRfUFJJTUUgJiYgUENJCisJZGVwZW5kcyBvbiBTT1VORF9QUklNRSAmJiBQQ0kgJiYgT0JTT0xFVEVfT1NTX0RSSVZFUgogCWhlbHAKIAkgIFNheSBZIG9yIE0gaWYgeW91IGhhdmUgYSBQQ0kgc291bmQgY2FyZCB1dGlsaXppbmcgdGhlIEVuc29uaXEKIAkgIEVTMTM3MSBjaGlwc2V0LCBzdWNoIGFzIEVuc29uaXEncyBBdWRpb1BDSTk3LiBUbyBmaW5kIG91dCBpZgpAQCAtMTM4LDcgKzE1Myw3IEBACiAKIGNvbmZpZyBTT1VORF9FU1NTT0xPMQogCXRyaXN0YXRlICJFU1MgVGVjaG5vbG9neSBTb2xvMSIgCi0JZGVwZW5kcyBvbiBTT1VORF9QUklNRSAmJiBQQ0kKKwlkZXBlbmRzIG9uIFNPVU5EX1BSSU1FICYmIFBDSSAmJiBPQlNPTEVURV9PU1NfRFJJVkVSCiAJaGVscAogCSAgU2F5IFkgb3IgTSBpZiB5b3UgaGF2ZSBhIFBDSSBzb3VuZCBjYXJkIHV0aWxpemluZyB0aGUgRVNTIFRlY2hub2xvZ3kKIAkgIFNvbG8xIGNoaXAuIFRvIGZpbmQgb3V0IGlmIHlvdXIgc291bmQgY2FyZCB1c2VzIGEKQEAgLTE0OSw3ICsxNjQsNyBAQAogCiBjb25maWcgU09VTkRfTUFFU1RSTwogCXRyaXN0YXRlICJFU1MgTWFlc3RybywgTWFlc3RybzIsIE1hZXN0cm8yRSBkcml2ZXIiCi0JZGVwZW5kcyBvbiBTT1VORF9QUklNRSAmJiBQQ0kKKwlkZXBlbmRzIG9uIFNPVU5EX1BSSU1FICYmIFBDSSAmJiBPQlNPTEVURV9PU1NfRFJJVkVSCiAJaGVscAogCSAgU2F5IFkgb3IgTSBpZiB5b3UgaGF2ZSBhIHNvdW5kIHN5c3RlbSBkcml2ZW4gYnkgRVNTJ3MgTWFlc3RybyBsaW5lCiAJICBvZiBQQ0kgc291bmQgY2hpcHMuICBUaGVzZSBpbmNsdWRlIHRoZSBNYWVzdHJvIDEsIE1hZXN0cm8gMiwgYW5kCkBAIC0xNTgsNyArMTczLDcgQEAKIAogY29uZmlnIFNPVU5EX01BRVNUUk8zCiAJdHJpc3RhdGUgIkVTUyBNYWVzdHJvMy9BbGxlZ3JvIGRyaXZlciAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIFNPVU5EX1BSSU1FICYmIFBDSSAmJiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIFNPVU5EX1BSSU1FICYmIFBDSSAmJiBFWFBFUklNRU5UQUwgJiYgT0JTT0xFVEVfT1NTX0RSSVZFUgogCWhlbHAKIAkgIFNheSBZIG9yIE0gaWYgeW91IGhhdmUgYSBzb3VuZCBzeXN0ZW0gZHJpdmVuIGJ5IEVTUydzIE1hZXN0cm8gMwogCSAgUENJIHNvdW5kIGNoaXAuCkBAIC0xNzIsMTQgKzE4NywxNCBAQAogCiBjb25maWcgU09VTkRfSEFSTU9OWQogCXRyaXN0YXRlICJQQSBIYXJtb255IGF1ZGlvIGRyaXZlciIKLQlkZXBlbmRzIG9uIEdTQ19MQVNJICYmIFNPVU5EX1BSSU1FCisJZGVwZW5kcyBvbiBHU0NfTEFTSSAmJiBTT1VORF9QUklNRSAmJiBPQlNPTEVURV9PU1NfRFJJVkVSCiAJaGVscAogCSAgU2F5ICdZJyBvciAnTScgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBIYXJtb255IHNvdW5kY2hpcAogCSAgb24gSFAgNzEyLCA3MTUvbmV3IGFuZCBtYW55IG90aGVyIEdTQyBiYXNlZCBtYWNoaW5lcy4KIAogY29uZmlnIFNPVU5EX1NPTklDVklCRVMKIAl0cmlzdGF0ZSAiUzMgU29uaWNWaWJlcyIKLQlkZXBlbmRzIG9uIFNPVU5EX1BSSU1FICYmIFBDSQorCWRlcGVuZHMgb24gU09VTkRfUFJJTUUgJiYgUENJICYmIE9CU09MRVRFX09TU19EUklWRVIKIAloZWxwCiAJICBTYXkgWSBvciBNIGlmIHlvdSBoYXZlIGEgUENJIHNvdW5kIGNhcmQgdXRpbGl6aW5nIHRoZSBTMwogCSAgU29uaWNWaWJlcyBjaGlwc2V0LiBUbyBmaW5kIG91dCBpZiB5b3VyIHNvdW5kIGNhcmQgdXNlcyBhCkBAIC0yMTgsNyArMjMzLDcgQEAKIAogY29uZmlnIFNPVU5EX0FVMTAwMAogCXRyaXN0YXRlICJBdTEwMDAgU291bmQiCi0JZGVwZW5kcyBvbiBTT1VORF9QUklNRSAmJiAoU09DX0FVMTAwMCB8fCBTT0NfQVUxMTAwIHx8IFNPQ19BVTE1MDApCisJZGVwZW5kcyBvbiBTT1VORF9QUklNRSAmJiAoU09DX0FVMTAwMCB8fCBTT0NfQVUxMTAwIHx8IFNPQ19BVTE1MDApICYmIE9CU09MRVRFX09TU19EUklWRVIKIAogY29uZmlnIFNPVU5EX0FVMTU1MF9BQzk3CiAJdHJpc3RhdGUgIkF1MTU1MCBBQzk3IFNvdW5kIgpAQCAtNDkyLDcgKzUwNyw3IEBACiAKIGNvbmZpZyBTT1VORF9WSUE4MkNYWFgKIAl0cmlzdGF0ZSAiVklBIDgyQzY4NiBBdWRpbyBDb2RlYyIKLQlkZXBlbmRzIG9uIFNPVU5EX1BSSU1FICYmIFBDSQorCWRlcGVuZHMgb24gU09VTkRfUFJJTUUgJiYgUENJICYmIE9CU09MRVRFX09TU19EUklWRVIKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIGF1ZGlvIGNvZGVjIGZvdW5kIG9uIFZJQQogCSAgODJDeHh4LWJhc2VkIGNoaXBzLiBUeXBpY2FsbHkgdGhlc2UgYXJlIGJ1aWx0IGludG8gYSBtb3RoZXJib2FyZC4KQEAgLTU2Myw3ICs1NzgsNyBAQAogCiBjb25maWcgU09VTkRfU0dBTEFYWQogCXRyaXN0YXRlICJBenRlY2ggU291bmQgR2FsYXh5IChub24tUG5QKSBjYXJkcyIKLQlkZXBlbmRzIG9uIFNPVU5EX09TUworCWRlcGVuZHMgb24gU09VTkRfT1NTICYmIE9CU09MRVRFX09TU19EUklWRVIKIAloZWxwCiAJICBUaGlzIG1vZHVsZSBpbml0aWFsaXplcyB0aGUgb2xkZXIgbm9uIFBsdWcgYW5kIFBsYXkgc291bmQgZ2FsYXh5CiAJICBjYXJkcyBmcm9tIEF6dGVjaC4gSXQgc3VwcG9ydHMgdGhlIFdhdmVyaWRlciBQcm8gMzIgLSAzRCBhbmQgdGhlCkBAIC01OTksNyArNjE0LDcgQEAKIAogY29uZmlnIFNPVU5EX0NTNDIzMgogCXRyaXN0YXRlICJDcnlzdGFsIENTNDIzMiBiYXNlZCAoUG5QKSBjYXJkcyIKLQlkZXBlbmRzIG9uIFNPVU5EX09TUworCWRlcGVuZHMgb24gU09VTkRfT1NTICYmIE9CU09MRVRFX09TU19EUklWRVIKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGEgY2FyZCBiYXNlZCBvbiB0aGUgQ3J5c3RhbCBDUzQyMzIgY2hpcCBzZXQsCiAJICB3aGljaCB1c2VzIGl0cyBvd24gUGx1ZyBhbmQgUGxheSBwcm90b2NvbC4KQEAgLTYxMyw3ICs2MjgsNyBAQAogCiBjb25maWcgU09VTkRfU1NDQVBFCiAJdHJpc3RhdGUgIkVuc29uaXEgU291bmRTY2FwZSBzdXBwb3J0IgotCWRlcGVuZHMgb24gU09VTkRfT1NTCisJZGVwZW5kcyBvbiBTT1VORF9PU1MgJiYgT0JTT0xFVEVfT1NTX0RSSVZFUgogCWhlbHAKIAkgIEFuc3dlciBZIGlmIHlvdSBoYXZlIGEgc291bmQgY2FyZCBiYXNlZCBvbiB0aGUgRW5zb25pcSBTb3VuZFNjYXBlCiAJICBjaGlwc2V0LiBTdWNoIGNhcmRzIGFyZSBiZWluZyBtYW51ZmFjdHVyZWQgYXQgbGVhc3QgYnkgRW5zb25pcSwgU3BlYQpAQCAtNjI1LDcgKzY0MCw3IEBACiAKIGNvbmZpZyBTT1VORF9HVVMKIAl0cmlzdGF0ZSAiR3JhdmlzIFVsdHJhc291bmQgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFNPVU5EX09TUworCWRlcGVuZHMgb24gU09VTkRfT1NTICYmIE9CU09MRVRFX09TU19EUklWRVIKIAloZWxwCiAJICBTYXkgWSBoZXJlIGZvciBhbnkgdHlwZSBvZiBHcmF2aXMgVWx0cmFzb3VuZCBjYXJkLCBpbmNsdWRpbmcgdGhlIEdVUwogCSAgb3IgR1VTIE1BWC4gIFNlZSBhbHNvIDxmaWxlOkRvY3VtZW50YXRpb24vc291bmQvb3NzL3VsdHJhc291bmQ+IGZvciBtb3JlCkBAIC03MjcsNyArNzQyLDcgQEAKIAogY29uZmlnIFNPVU5EX05NMjU2CiAJdHJpc3RhdGUgIk5NMjU2QVYvTk0yNTZaWCBhdWRpbyBzdXBwb3J0IgotCWRlcGVuZHMgb24gU09VTkRfT1NTCisJZGVwZW5kcyBvbiBTT1VORF9PU1MgJiYgT0JTT0xFVEVfT1NTX0RSSVZFUgogCWhlbHAKIAkgIFNheSBNIGhlcmUgdG8gaW5jbHVkZSBhdWRpbyBzdXBwb3J0IGZvciB0aGUgTmVvTWFnaWMgMjU2QVYvMjU2WlgKIAkgIGNoaXBzZXRzLiBUaGVzZSBhcmUgdGhlIGF1ZGlvIGNoaXBzZXRzIGZvdW5kIGluIHRoZSBTb255CkBAIC03MzksNyArNzU0LDcgQEAKIAogY29uZmlnIFNPVU5EX01BRDE2CiAJdHJpc3RhdGUgIk9QVGkgTUFEMTYgYW5kL29yIE1vemFydCBiYXNlZCBjYXJkcyIKLQlkZXBlbmRzIG9uIFNPVU5EX09TUworCWRlcGVuZHMgb24gU09VTkRfT1NTICYmIE9CU09MRVRFX09TU19EUklWRVIKIAktLS1oZWxwLS0tCiAJICBBbnN3ZXIgWSBpZiB5b3VyIGNhcmQgaGFzIGEgTW96YXJ0IChPQUsgT1RJLTYwMSkgb3IgTUFEMTYgKE9QVGkKIAkgIDgyQzkyOCBvciA4MkM5Mjkgb3IgODJDOTMxKSBhdWRpbyBpbnRlcmZhY2UgY2hpcC4gVGhlc2UgY2hpcHMgYXJlCkBAIC04NjAsNyArODc1LDcgQEAKIAogY29uZmlnIFNPVU5EX0FXRTMyX1NZTlRICiAJdHJpc3RhdGUgIkFXRTMyIHN5bnRoIgotCWRlcGVuZHMgb24gU09VTkRfT1NTCisJZGVwZW5kcyBvbiBTT1VORF9PU1MgJiYgT0JTT0xFVEVfT1NTX0RSSVZFUgogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYSBTb3VuZCBCbGFzdGVyIFNCMzIsIEFXRTMyLVBuUCwgU0IgQVdFNjQgb3IKIAkgIHNpbWlsYXIgc291bmQgY2FyZC4gU2VlIDxmaWxlOkRvY3VtZW50YXRpb24vc291bmQvb3NzL1JFQURNRS5hd2U+LApAQCAtODcwLDcgKzg4NSw3IEBACiAKIGNvbmZpZyBTT1VORF9XQVZFRlJPTlQKIAl0cmlzdGF0ZSAiRnVsbCBzdXBwb3J0IGZvciBUdXJ0bGUgQmVhY2ggV2F2ZUZyb250IChUcm9wZXogUGx1cywgVHJvcGV6LCBNYXVpKSBzeW50aC9zb3VuZGNhcmRzIgotCWRlcGVuZHMgb24gU09VTkRfT1NTICYmIG0KKwlkZXBlbmRzIG9uIFNPVU5EX09TUyAmJiBtICYmIE9CU09MRVRFX09TU19EUklWRVIKIAloZWxwCiAJICBBbnN3ZXIgWSBvciBNIGlmIHlvdSBoYXZlIGEgVHJvcGV6IFBsdXMsIFRyb3BleiBvciBNYXVpIHNvdW5kIGNhcmQKIAkgIGFuZCByZWFkIHRoZSBmaWxlcyA8ZmlsZTpEb2N1bWVudGF0aW9uL3NvdW5kL29zcy9XYXZlZnJvbnQ+IGFuZApAQCAtODc4LDcgKzg5Myw3IEBACiAKIGNvbmZpZyBTT1VORF9NQVVJCiAJdHJpc3RhdGUgIkxpbWl0ZWQgc3VwcG9ydCBmb3IgVHVydGxlIEJlYWNoIFdhdmUgRnJvbnQgKE1hdWksIFRyb3Bleikgc3ludGhlc2l6ZXJzIgotCWRlcGVuZHMgb24gU09VTkRfT1NTCisJZGVwZW5kcyBvbiBTT1VORF9PU1MgJiYgT0JTT0xFVEVfT1NTX0RSSVZFUgogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYSBUdXJ0bGUgQmVhY2ggV2F2ZSBGcm9udCwgTWF1aSwgb3IgVHJvcGV6CiAJICBzb3VuZCBjYXJkLgpAQCAtOTA0LDcgKzkxOSw3IEBACiAKIGNvbmZpZyBTT1VORF9ZTTM4MTIKIAl0cmlzdGF0ZSAiWWFtYWhhIEZNIHN5bnRoZXNpemVyIChZTTM4MTIvT1BMLTMpIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBTT1VORF9PU1MKKwlkZXBlbmRzIG9uIFNPVU5EX09TUyAmJiBPQlNPTEVURV9PU1NfRFJJVkVSCiAJLS0taGVscC0tLQogCSAgQW5zd2VyIFkgaWYgeW91ciBjYXJkIGhhcyBhIEZNIGNoaXAgbWFkZSBieSBZYW1haGEgKE9QTDIvT1BMMy9PUEw0KS4KIAkgIEFuc3dlcmluZyBZIGlzIHVzdWFsbHkgYSBzYWZlIGFuZCByZWNvbW1lbmRlZCBjaG9pY2UsIGhvd2V2ZXIgc29tZQpAQCAtOTIwLDcgKzkzNSw3IEBACiAKIGNvbmZpZyBTT1VORF9PUEwzU0ExCiAJdHJpc3RhdGUgIllhbWFoYSBPUEwzLVNBMSBhdWRpbyBjb250cm9sbGVyIgotCWRlcGVuZHMgb24gU09VTkRfT1NTCisJZGVwZW5kcyBvbiBTT1VORF9PU1MgJiYgT0JTT0xFVEVfT1NTX0RSSVZFUgogCWhlbHAKIAkgIFNheSBZIG9yIE0gaWYgeW91IGhhdmUgYSBZYW1haGEgT1BMMy1TQTEgc291bmQgY2hpcCwgd2hpY2ggaXMKIAkgIHVzdWFsbHkgYnVpbHQgaW50byBtb3RoZXJib2FyZHMuIFJlYWQKQEAgLTk0Niw3ICs5NjEsNyBAQAogCiBjb25maWcgU09VTkRfWU1GUENJCiAJdHJpc3RhdGUgIllhbWFoYSBZTUY3eHggUENJIGF1ZGlvIChuYXRpdmUgbW9kZSkiCi0JZGVwZW5kcyBvbiBTT1VORF9PU1MgJiYgUENJCisJZGVwZW5kcyBvbiBTT1VORF9PU1MgJiYgUENJICYmIE9CU09MRVRFX09TU19EUklWRVIKIAloZWxwCiAJICBTdXBwb3J0IGZvciBZYW1haGEgY2FyZHMgaW5jbHVkaW5nIHRoZSBZTUY3MTEsIFlNRjcxNSwgWU1GNzE4LAogCSAgWU1GNzE5LCBZTUY3MjQsIFdhdmVmb3JjZSAxOTJYRywgYW5kIFdhdmVmb3JjZSAxOTIgRGlnaXRhbC4KQEAgLTEwODgsMTEgKzExMDMsMTEgQEAKIAogY29uZmlnIFNPVU5EX0FMSTU0NTUKIAl0cmlzdGF0ZSAiQUxpNTQ1NSBhdWRpbyBzdXBwb3J0IgotCWRlcGVuZHMgb24gU09VTkRfUFJJTUUgJiYgUENJCisJZGVwZW5kcyBvbiBTT1VORF9QUklNRSAmJiBQQ0kgJiYgT0JTT0xFVEVfT1NTX0RSSVZFUgogCiBjb25maWcgU09VTkRfRk9SVEUKIAl0cmlzdGF0ZSAiRm9ydGVNZWRpYSBGTTgwMSBkcml2ZXIiCi0JZGVwZW5kcyBvbiBTT1VORF9QUklNRSAmJiBQQ0kKKwlkZXBlbmRzIG9uIFNPVU5EX1BSSU1FICYmIFBDSSAmJiBPQlNPTEVURV9PU1NfRFJJVkVSCiAJaGVscAogCSAgU2F5IFkgb3IgTSBpZiB5b3Ugd2FudCBkcml2ZXIgc3VwcG9ydCBmb3IgdGhlIEZvcnRlTWVkaWEgRk04MDEgUENJCiAJICBhdWRpbyBjb250cm9sbGVyIChBYml0IEFVMTAsIEdlbml1cyBTb3VuZCBNYWtlciwgSFAgV29ya3N0YXRpb24KQEAgLTExMDAsNyArMTExNSw3IEBACiAKIGNvbmZpZyBTT1VORF9STUU5NlhYCiAJdHJpc3RhdGUgIlJNRSBIYW1tZXJmYWxsIChSTUU5NlhYKSBzdXBwb3J0IgotCWRlcGVuZHMgb24gU09VTkRfUFJJTUUgJiYgUENJCisJZGVwZW5kcyBvbiBTT1VORF9QUklNRSAmJiBQQ0kgJiYgT0JTT0xFVEVfT1NTX0RSSVZFUgogCWhlbHAKIAkgIFNheSBZIG9yIE0gaWYgeW91IGhhdmUgYSBIYW1tZXJmYWxsIG9yIEhhbW1lcmZhbGwgbGlnaHQKIAkgIG11bHRpY2hhbm5lbCBjYXJkIGZyb20gUk1FLiBJZiB5b3Ugd2FudCB0byBhY2Nlc3MgYWR2YW5jZWQKQEAgLTExMDgsNyArMTEyMyw3IEBACiAKIGNvbmZpZyBTT1VORF9BRDE5ODAKIAl0cmlzdGF0ZSAiQUQxOTgwIGZyb250L2JhY2sgc3dpdGNoIHBsdWdpbiIKLQlkZXBlbmRzIG9uIFNPVU5EX1BSSU1FCisJZGVwZW5kcyBvbiBTT1VORF9QUklNRSAmJiBPQlNPTEVURV9PU1NfRFJJVkVSCiAKIGNvbmZpZyBTT1VORF9TSF9EQUNfQVVESU8KIAl0cmlzdGF0ZSAiU3VwZXJIIERBQyBhdWRpbyBzdXBwb3J0IgpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL21zbmQuYyBiL3NvdW5kL29zcy9tc25kLmMKaW5kZXggNGYxZmYxYi4uYTdhZDJiMCAxMDA2NDQKLS0tIGEvc291bmQvb3NzL21zbmQuYworKysgYi9zb3VuZC9vc3MvbXNuZC5jCkBAIC0yNCw3ICsyNCw2IEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9vcy5oIGIvc291bmQvb3NzL29zLmgKaW5kZXggODBkY2UzMi4uMDQ5MDU2MiAxMDA2NDQKLS0tIGEvc291bmQvb3NzL29zLmgKKysrIGIvc291bmQvb3NzL29zLmgKQEAgLTUsMTAgKzUsOCBAQAogI3VuZGVmICBET19USU1JTkdTCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAKICNpZmRlZiBfX0tFUk5FTF9fCi0jaW5jbHVkZSA8bGludXgvdXRzbmFtZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8YXNtL2RtYS5oPgpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL3JtZTk2eHguYyBiL3NvdW5kL29zcy9ybWU5Nnh4LmMKaW5kZXggNzYwOWM2OC4uMzE4ZGM1MSAxMDA2NDQKLS0tIGEvc291bmQvb3NzL3JtZTk2eHguYworKysgYi9zb3VuZC9vc3Mvcm1lOTZ4eC5jCkBAIC00NCw3ICs0NCw2IEBACiAjZGVmaW5lIFJNRVZFUlNJT04gIjAuOCIKICNlbmRpZgogCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CmRpZmYgLS1naXQgYS9zb3VuZC9vc3Mvc2hfZGFjX2F1ZGlvLmMgYi9zb3VuZC9vc3Mvc2hfZGFjX2F1ZGlvLmMKaW5kZXggYzA5Y2RlZS4uOGE5OTE3YzkgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9zaF9kYWNfYXVkaW8uYworKysgYi9zb3VuZC9vc3Mvc2hfZGFjX2F1ZGlvLmMKQEAgLTIsNyArMiw2IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hZDE4ODkuYyBiL3NvdW5kL3BjaS9hZDE4ODkuYwppbmRleCBlNzJjY2QxLi4xZmRhZTY3IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYWQxODg5LmMKKysrIGIvc291bmQvcGNpL2FkMTg4OS5jCkBAIC0xMDY3LDcgKzEwNjcsNiBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYWQxODg5X3BjaSA9IHsKIAkubmFtZSA9ICJBRDE4ODkgQXVkaW8iLAotCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9IHNuZF9hZDE4ODlfaWRzLAogCS5wcm9iZSA9IHNuZF9hZDE4ODlfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF9hZDE4ODlfcmVtb3ZlKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hbGk1NDUxL2FsaTU0NTEuYyBiL3NvdW5kL3BjaS9hbGk1NDUxL2FsaTU0NTEuYwppbmRleCA0ZTc2YzRhLi5mZWZmYmU3IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYWxpNTQ1MS9hbGk1NDUxLmMKKysrIGIvc291bmQvcGNpL2FsaTU0NTEvYWxpNTQ1MS5jCkBAIC0yNDAzLDcgKzI0MDMsNiBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0gewogCS5uYW1lID0gIkFMSSA1NDUxIiwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuaWRfdGFibGUgPSBzbmRfYWxpX2lkcywKIAkucHJvYmUgPSBzbmRfYWxpX3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfYWxpX3JlbW92ZSksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYWxzNDAwMC5jIGIvc291bmQvcGNpL2FsczQwMDAuYwppbmRleCA3YzYxNTYxZi4uMTkwNGRmNiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2FsczQwMDAuYworKysgYi9zb3VuZC9wY2kvYWxzNDAwMC5jCkBAIC03NjgsNyArNzY4LDYgQEAKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKIAkubmFtZSA9ICJBTFM0MDAwIiwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuaWRfdGFibGUgPSBzbmRfYWxzNDAwMF9pZHMsCiAJLnByb2JlID0gc25kX2NhcmRfYWxzNDAwMF9wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3Aoc25kX2NhcmRfYWxzNDAwMF9yZW1vdmUpLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2F0aWl4cC5jIGIvc291bmQvcGNpL2F0aWl4cC5jCmluZGV4IGY1ZGFkOTIuLjhiYWUxMGQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hdGlpeHAuYworKysgYi9zb3VuZC9wY2kvYXRpaXhwLmMKQEAgLTE2MzUsNyArMTYzNSw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPSAiQVRJIElYUCBBQzk3IGNvbnRyb2xsZXIiLAotCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9IHNuZF9hdGlpeHBfaWRzLAogCS5wcm9iZSA9IHNuZF9hdGlpeHBfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF9hdGlpeHBfcmVtb3ZlKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hdGlpeHBfbW9kZW0uYyBiL3NvdW5kL3BjaS9hdGlpeHBfbW9kZW0uYwppbmRleCAwY2YyMDIwLi4zMTc0YjY2IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXRpaXhwX21vZGVtLmMKKysrIGIvc291bmQvcGNpL2F0aWl4cF9tb2RlbS5jCkBAIC0xMzA5LDcgKzEzMDksNiBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0gewogCS5uYW1lID0gIkFUSSBJWFAgTUM5NyBjb250cm9sbGVyIiwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuaWRfdGFibGUgPSBzbmRfYXRpaXhwX2lkcywKIAkucHJvYmUgPSBzbmRfYXRpaXhwX3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfYXRpaXhwX3JlbW92ZSksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MC5jIGIvc291bmQvcGNpL2F1ODh4MC9hdTg4eDAuYwppbmRleCA2YWYzYjEzLi5kOTY1NjA5IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MC5jCisrKyBiL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwLmMKQEAgLTM3Myw3ICszNzMsNiBAQAogLy8gcGNpX2RyaXZlciBkZWZpbml0aW9uCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0gewogCS5uYW1lID0gQ0FSRF9OQU1FX1NIT1JULAotCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9IHNuZF92b3J0ZXhfaWRzLAogCS5wcm9iZSA9IHNuZF92b3J0ZXhfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF92b3J0ZXhfcmVtb3ZlKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9henQzMzI4LmMgYi9zb3VuZC9wY2kvYXp0MzMyOC5jCmluZGV4IGRhOTliMWIuLmFiNzM3ZDYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9henQzMzI4LmMKKysrIGIvc291bmQvcGNpL2F6dDMzMjguYwpAQCAtMTgzOCw3ICsxODM4LDYgQEAKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKIAkubmFtZSA9ICJBWkYzMzI4IiwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuaWRfdGFibGUgPSBzbmRfYXpmMzMyOF9pZHMsCiAJLnByb2JlID0gc25kX2F6ZjMzMjhfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF9hemYzMzI4X3JlbW92ZSksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYnQ4N3guYyBiL3NvdW5kL3BjaS9idDg3eC5jCmluZGV4IDAxZDk4ZWUuLjhmZWNhMjIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9idDg3eC5jCisrKyBiL3NvdW5kL3BjaS9idDg3eC5jCkBAIC04OTcsMTQgKzg5NywxMyBAQAogLyogZGVmYXVsdCBlbnRyaWVzIGZvciBhbGwgQnQ4N3ggY2FyZHMgLSBpdCdzIG5vdCBleHBvcnRlZCAqLwogLyogZHJpdmVyX2RhdGEgaXMgc2V0IHRvIDAgdG8gY2FsbCBkZXRlY3Rpb24gKi8KIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfYnQ4N3hfZGVmYXVsdF9pZHNbXSA9IHsKLQlCVF9ERVZJQ0UoODc4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwKSwKLQlCVF9ERVZJQ0UoODc5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwKSwKKwlCVF9ERVZJQ0UoUENJX0RFVklDRV9JRF9CUk9PS1RSRUVfODc4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwKSwKKwlCVF9ERVZJQ0UoUENJX0RFVklDRV9JRF9CUk9PS1RSRUVfODc5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwKSwKIAl7IH0KIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPSAiQnQ4N3giLAotCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9IHNuZF9idDg3eF9pZHMsCiAJLnByb2JlID0gc25kX2J0ODd4X3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfYnQ4N3hfcmVtb3ZlKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jYTAxMDYvY2EwMTA2X21haW4uYyBiL3NvdW5kL3BjaS9jYTAxMDYvY2EwMTA2X21haW4uYwppbmRleCBlZTU4ZDE2Li4zODlkOTY3IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY2EwMTA2L2NhMDEwNl9tYWluLmMKKysrIGIvc291bmQvcGNpL2NhMDEwNi9jYTAxMDZfbWFpbi5jCkBAIC0xNDk5LDcgKzE0OTksNiBAQAogLy8gcGNpX2RyaXZlciBkZWZpbml0aW9uCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0gewogCS5uYW1lID0gIkNBMDEwNiIsCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmlkX3RhYmxlID0gc25kX2NhMDEwNl9pZHMsCiAJLnByb2JlID0gc25kX2NhMDEwNl9wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3Aoc25kX2NhMDEwNl9yZW1vdmUpLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2NtaXBjaS5jIGIvc291bmQvcGNpL2NtaXBjaS5jCmluZGV4IDU3ZThlNDMuLmRiNjA1MzcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9jbWlwY2kuYworKysgYi9zb3VuZC9wY2kvY21pcGNpLmMKQEAgLTMwNTMsNyArMzA1Myw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPSAiQy1NZWRpYSBQQ0kiLAotCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9IHNuZF9jbWlwY2lfaWRzLAogCS5wcm9iZSA9IHNuZF9jbWlwY2lfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF9jbWlwY2lfcmVtb3ZlKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jczQyODEuYyBiL3NvdW5kL3BjaS9jczQyODEuYwppbmRleCBhZWEyYzQ3Li4wMzRmZjM3IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY3M0MjgxLmMKKysrIGIvc291bmQvcGNpL2NzNDI4MS5jCkBAIC0yMTA2LDcgKzIxMDYsNiBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0gewogCS5uYW1lID0gIkNTNDI4MSIsCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmlkX3RhYmxlID0gc25kX2NzNDI4MV9pZHMsCiAJLnByb2JlID0gc25kX2NzNDI4MV9wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3Aoc25kX2NzNDI4MV9yZW1vdmUpLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2NzNDZ4eC9jczQ2eHguYyBiL3NvdW5kL3BjaS9jczQ2eHgvY3M0Nnh4LmMKaW5kZXggMzJiNGY4NC4uYjlmZmY0ZSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2NzNDZ4eC9jczQ2eHguYworKysgYi9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eC5jCkBAIC0xNjMsNyArMTYzLDYgQEAKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKIAkubmFtZSA9ICJTb3VuZCBGdXNpb24gQ1M0Nnh4IiwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuaWRfdGFibGUgPSBzbmRfY3M0Nnh4X2lkcywKIAkucHJvYmUgPSBzbmRfY2FyZF9jczQ2eHhfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF9jYXJkX2NzNDZ4eF9yZW1vdmUpLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMS5jIGIvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMS5jCmluZGV4IGRkMWVhOWQuLjc4MjcwZjggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazEuYworKysgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxLmMKQEAgLTIyMyw3ICsyMjMsNiBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0gewogCS5uYW1lID0gIkVNVTEwSzFfQXVkaWd5IiwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuaWRfdGFibGUgPSBzbmRfZW11MTBrMV9pZHMsCiAJLnByb2JlID0gc25kX2NhcmRfZW11MTBrMV9wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3Aoc25kX2NhcmRfZW11MTBrMV9yZW1vdmUpLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMXguYyBiL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazF4LmMKaW5kZXggY2JiNjg5NC4uNzk1NTc3NyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMXguYworKysgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxeC5jCkBAIC0xNjEzLDcgKzE2MTMsNiBAQAogLy8gcGNpX2RyaXZlciBkZWZpbml0aW9uCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0gewogCS5uYW1lID0gIkVNVTEwSzFYIiwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuaWRfdGFibGUgPSBzbmRfZW11MTBrMXhfaWRzLAogCS5wcm9iZSA9IHNuZF9lbXUxMGsxeF9wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3Aoc25kX2VtdTEwazF4X3JlbW92ZSksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZW5zMTM3MC5jIGIvc291bmQvcGNpL2VuczEzNzAuYwppbmRleCA5MmZmN2M1Li4yZGFhNTc1IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZW5zMTM3MC5jCisrKyBiL3NvdW5kL3BjaS9lbnMxMzcwLmMKQEAgLTIzODYsNyArMjM4Niw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPSBEUklWRVJfTkFNRSwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuaWRfdGFibGUgPSBzbmRfYXVkaW9wY2lfaWRzLAogCS5wcm9iZSA9IHNuZF9hdWRpb3BjaV9wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3Aoc25kX2F1ZGlvcGNpX3JlbW92ZSksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZXMxOTM4LmMgYi9zb3VuZC9wY2kvZXMxOTM4LmMKaW5kZXggNzhmOTBkZS4uYzEzNGY0OCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VzMTkzOC5jCisrKyBiL3NvdW5kL3BjaS9lczE5MzguYwpAQCAtMTc1OCw3ICsxNzU4LDYgQEAKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKIAkubmFtZSA9ICJFU1MgRVMxOTM4IChTb2xvLTEpIiwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuaWRfdGFibGUgPSBzbmRfZXMxOTM4X2lkcywKIAkucHJvYmUgPSBzbmRfZXMxOTM4X3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfZXMxOTM4X3JlbW92ZSksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZXMxOTY4LmMgYi9zb3VuZC9wY2kvZXMxOTY4LmMKaW5kZXggYWM4Mjk0ZS4uNTAwNzlkYzkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lczE5NjguYworKysgYi9zb3VuZC9wY2kvZXMxOTY4LmMKQEAgLTI3NjEsNyArMjc2MSw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPSAiRVMxOTY4IChFU1MgTWFlc3RybykiLAotCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9IHNuZF9lczE5NjhfaWRzLAogCS5wcm9iZSA9IHNuZF9lczE5NjhfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF9lczE5NjhfcmVtb3ZlKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9mbTgwMS5jIGIvc291bmQvcGNpL2ZtODAxLmMKaW5kZXggNGM3YzhkMi4uNGUxZDM0MyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ZtODAxLmMKKysrIGIvc291bmQvcGNpL2ZtODAxLmMKQEAgLTE0NTksNyArMTQ1OSw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPSAiRk04MDEiLAotCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9IHNuZF9mbTgwMV9pZHMsCiAJLnByb2JlID0gc25kX2NhcmRfZm04MDFfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF9jYXJkX2ZtODAxX3JlbW92ZSksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jIGIvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYwppbmRleCA5ZDE0MTJhLi5lZDUyNWMwIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jCisrKyBiL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMKQEAgLTE2MTYsNyArMTYxNiw2IEBACiAvKiBwY2lfZHJpdmVyIGRlZmluaXRpb24gKi8KIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPSAiSERBIEludGVsIiwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuaWRfdGFibGUgPSBhenhfaWRzLAogCS5wcm9iZSA9IGF6eF9wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3AoYXp4X3JlbW92ZSksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzEyLmMgYi9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzEyLmMKaW5kZXggNWFjYTM3Ny4uYmQ3MWJmNCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcxMi5jCisrKyBiL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuYwpAQCAtMjczNSw3ICsyNzM1LDYgQEAKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKIAkubmFtZSA9ICJJQ0UxNzEyIiwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuaWRfdGFibGUgPSBzbmRfaWNlMTcxMl9pZHMsCiAJLnByb2JlID0gc25kX2ljZTE3MTJfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF9pY2UxNzEyX3JlbW92ZSksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzI0LmMgYi9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzI0LmMKaW5kZXggNWI0MjkzZi4uMGI1Mzg5ZSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcyNC5jCisrKyBiL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MjQuYwpAQCAtMjMzMiw3ICsyMzMyLDYgQEAKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKIAkubmFtZSA9ICJJQ0UxNzI0IiwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuaWRfdGFibGUgPSBzbmRfdnQxNzI0X2lkcywKIAkucHJvYmUgPSBzbmRfdnQxNzI0X3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfdnQxNzI0X3JlbW92ZSksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaW50ZWw4eDAuYyBiL3NvdW5kL3BjaS9pbnRlbDh4MC5jCmluZGV4IDA4MDEwODMuLmNmNzgwMWQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9pbnRlbDh4MC5jCisrKyBiL3NvdW5kL3BjaS9pbnRlbDh4MC5jCkBAIC0yODc2LDcgKzI4NzYsNiBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0gewogCS5uYW1lID0gIkludGVsIElDSCIsCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmlkX3RhYmxlID0gc25kX2ludGVsOHgwX2lkcywKIAkucHJvYmUgPSBzbmRfaW50ZWw4eDBfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF9pbnRlbDh4MF9yZW1vdmUpLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ludGVsOHgwbS5jIGIvc291bmQvcGNpL2ludGVsOHgwbS5jCmluZGV4IGFjZmIxOTcuLmE0MjA5MTggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9pbnRlbDh4MG0uYworKysgYi9zb3VuZC9wY2kvaW50ZWw4eDBtLmMKQEAgLTEzMTcsNyArMTMxNyw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPSAiSW50ZWwgSUNIIE1vZGVtIiwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuaWRfdGFibGUgPSBzbmRfaW50ZWw4eDBtX2lkcywKIAkucHJvYmUgPSBzbmRfaW50ZWw4eDBtX3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfaW50ZWw4eDBtX3JlbW92ZSksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kva29yZzEyMTIva29yZzEyMTIuYyBiL3NvdW5kL3BjaS9rb3JnMTIxMi9rb3JnMTIxMi5jCmluZGV4IDU1NjFmZDQuLmExMTBkNjYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9rb3JnMTIxMi9rb3JnMTIxMi5jCisrKyBiL3NvdW5kL3BjaS9rb3JnMTIxMi9rb3JnMTIxMi5jCkBAIC0yNTM0LDcgKzI1MzQsNiBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0gewogCS5uYW1lID0gImtvcmcxMjEyIiwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuaWRfdGFibGUgPSBzbmRfa29yZzEyMTJfaWRzLAogCS5wcm9iZSA9IHNuZF9rb3JnMTIxMl9wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3Aoc25kX2tvcmcxMjEyX3JlbW92ZSksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvbWFlc3RybzMuYyBiL3NvdW5kL3BjaS9tYWVzdHJvMy5jCmluZGV4IDk5ZWI3NmM1Li5lZGU3YTc1IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvbWFlc3RybzMuYworKysgYi9zb3VuZC9wY2kvbWFlc3RybzMuYwpAQCAtMjg1OCw3ICsyODU4LDYgQEAKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKIAkubmFtZSA9ICJNYWVzdHJvMyIsCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmlkX3RhYmxlID0gc25kX20zX2lkcywKIAkucHJvYmUgPSBzbmRfbTNfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF9tM19yZW1vdmUpLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL21peGFydC9taXhhcnQuYyBiL3NvdW5kL3BjaS9taXhhcnQvbWl4YXJ0LmMKaW5kZXggYzM0MWM5OS4uYjMwOTBhMSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL21peGFydC9taXhhcnQuYworKysgYi9zb3VuZC9wY2kvbWl4YXJ0L21peGFydC5jCkBAIC0xNDIzLDcgKzE0MjMsNiBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0gewogCS5uYW1lID0gIkRpZ2lncmFtIG1pWGFydCIsCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmlkX3RhYmxlID0gc25kX21peGFydF9pZHMsCiAJLnByb2JlID0gc25kX21peGFydF9wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3Aoc25kX21peGFydF9yZW1vdmUpLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL25tMjU2L25tMjU2LmMgYi9zb3VuZC9wY2kvbm0yNTYvbm0yNTYuYwppbmRleCBlN2FhMTUxLi4wODlkMjNiIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvbm0yNTYvbm0yNTYuYworKysgYi9zb3VuZC9wY2kvbm0yNTYvbm0yNTYuYwpAQCAtMTY3Myw3ICsxNjczLDYgQEAKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKIAkubmFtZSA9ICJOZW9NYWdpYyAyNTYiLAotCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9IHNuZF9ubTI1Nl9pZHMsCiAJLnByb2JlID0gc25kX25tMjU2X3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfbm0yNTZfcmVtb3ZlKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9ybWUzMi5jIGIvc291bmQvcGNpL3JtZTMyLmMKaW5kZXggZTY2MjdiMC4uNzgzZGY3NiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3JtZTMyLmMKKysrIGIvc291bmQvcGNpL3JtZTMyLmMKQEAgLTIwMTIsNyArMjAxMiw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPQkJIlJNRSBEaWdpMzIiLAotCS5vd25lciA9CVRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9CXNuZF9ybWUzMl9pZHMsCiAJLnByb2JlID0Jc25kX3JtZTMyX3Byb2JlLAogCS5yZW1vdmUgPQlfX2RldmV4aXRfcChzbmRfcm1lMzJfcmVtb3ZlKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9ybWU5Ni5jIGIvc291bmQvcGNpL3JtZTk2LmMKaW5kZXggMGVkZGViMS4uNmQ0MjJlZiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3JtZTk2LmMKKysrIGIvc291bmQvcGNpL3JtZTk2LmMKQEAgLTI0MTMsNyArMjQxMyw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPSAiUk1FIERpZ2k5NiIsCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmlkX3RhYmxlID0gc25kX3JtZTk2X2lkcywKIAkucHJvYmUgPSBzbmRfcm1lOTZfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF9ybWU5Nl9yZW1vdmUpLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3JtZTk2NTIvaGRzcC5jIGIvc291bmQvcGNpL3JtZTk2NTIvaGRzcC5jCmluZGV4IDg0NTE1OGIuLmQxNWZmYjMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9ybWU5NjUyL2hkc3AuYworKysgYi9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwLmMKQEAgLTUwNjIsNyArNTA2Miw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPSAgICAgIlJNRSBIYW1tZXJmYWxsIERTUCIsCi0JLm93bmVyID0gICAgVEhJU19NT0RVTEUsCiAJLmlkX3RhYmxlID0gc25kX2hkc3BfaWRzLAogCS5wcm9iZSA9ICAgIHNuZF9oZHNwX3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfaGRzcF9yZW1vdmUpLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3JtZTk2NTIvaGRzcG0uYyBiL3NvdW5kL3BjaS9ybWU5NjUyL2hkc3BtLmMKaW5kZXggNjBhMTE0MS4uYTFhZWY2ZiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3JtZTk2NTIvaGRzcG0uYworKysgYi9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwbS5jCkBAIC0zNjM5LDcgKzM2MzksNiBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0gewogCS5uYW1lID0gIlJNRSBIYW1tZXJmYWxsIERTUCBNQURJIiwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuaWRfdGFibGUgPSBzbmRfaGRzcG1faWRzLAogCS5wcm9iZSA9IHNuZF9oZHNwbV9wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3Aoc25kX2hkc3BtX3JlbW92ZSksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcm1lOTY1Mi9ybWU5NjUyLmMgYi9zb3VuZC9wY2kvcm1lOTY1Mi9ybWU5NjUyLmMKaW5kZXggNTlmY2VmOS4uZjlkMGMxMiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3JtZTk2NTIvcm1lOTY1Mi5jCisrKyBiL3NvdW5kL3BjaS9ybWU5NjUyL3JtZTk2NTIuYwpAQCAtMjY1NCw3ICsyNjU0LDYgQEAKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKIAkubmFtZQkgID0gIlJNRSBEaWdpOTY1MiAoSGFtbWVyZmFsbCkiLAotCS5vd25lcgkgID0gVEhJU19NT0RVTEUsCiAJLmlkX3RhYmxlID0gc25kX3JtZTk2NTJfaWRzLAogCS5wcm9iZQkgID0gc25kX3JtZTk2NTJfcHJvYmUsCiAJLnJlbW92ZQkgID0gX19kZXZleGl0X3Aoc25kX3JtZTk2NTJfcmVtb3ZlKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9zb25pY3ZpYmVzLmMgYi9zb3VuZC9wY2kvc29uaWN2aWJlcy5jCmluZGV4IDlhMzU0NzQuLmU5MmVmM2EgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9zb25pY3ZpYmVzLmMKKysrIGIvc291bmQvcGNpL3NvbmljdmliZXMuYwpAQCAtMTUwMiw3ICsxNTAyLDYgQEAKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKIAkubmFtZSA9ICJTMyBTb25pY1ZpYmVzIiwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuaWRfdGFibGUgPSBzbmRfc29uaWNfaWRzLAogCS5wcm9iZSA9IHNuZF9zb25pY19wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3Aoc25kX3NvbmljX3JlbW92ZSksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvdHJpZGVudC90cmlkZW50LmMgYi9zb3VuZC9wY2kvdHJpZGVudC90cmlkZW50LmMKaW5kZXggYThjYThlMS4uOTQwZDUzMSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3RyaWRlbnQvdHJpZGVudC5jCisrKyBiL3NvdW5kL3BjaS90cmlkZW50L3RyaWRlbnQuYwpAQCAtMTc3LDcgKzE3Nyw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPSAiVHJpZGVudDREV2F2ZUF1ZGlvIiwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuaWRfdGFibGUgPSBzbmRfdHJpZGVudF9pZHMsCiAJLnByb2JlID0gc25kX3RyaWRlbnRfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF90cmlkZW50X3JlbW92ZSksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvdmlhODJ4eC5jIGIvc291bmQvcGNpL3ZpYTgyeHguYwppbmRleCA1MjNlYWNlLi5mYWQyYTI0IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvdmlhODJ4eC5jCisrKyBiL3NvdW5kL3BjaS92aWE4Mnh4LmMKQEAgLTI0NzgsNyArMjQ3OCw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPSAiVklBIDgyeHggQXVkaW8iLAotCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9IHNuZF92aWE4Mnh4X2lkcywKIAkucHJvYmUgPSBzbmRfdmlhODJ4eF9wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3Aoc25kX3ZpYTgyeHhfcmVtb3ZlKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS92aWE4Mnh4X21vZGVtLmMgYi9zb3VuZC9wY2kvdmlhODJ4eF9tb2RlbS5jCmluZGV4IDAxMWYwZmIuLmI4MzY2MGIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS92aWE4Mnh4X21vZGVtLmMKKysrIGIvc291bmQvcGNpL3ZpYTgyeHhfbW9kZW0uYwpAQCAtMTE5OCw3ICsxMTk4LDYgQEAKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKIAkubmFtZSA9ICJWSUEgODJ4eCBNb2RlbSIsCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmlkX3RhYmxlID0gc25kX3ZpYTgyeHhfbW9kZW1faWRzLAogCS5wcm9iZSA9IHNuZF92aWE4Mnh4X3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfdmlhODJ4eF9yZW1vdmUpLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3Z4MjIyL3Z4MjIyLmMgYi9zb3VuZC9wY2kvdngyMjIvdngyMjIuYwppbmRleCAyYTdhZDlkLi5kY2E2YmQyIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvdngyMjIvdngyMjIuYworKysgYi9zb3VuZC9wY2kvdngyMjIvdngyMjIuYwpAQCAtMjUyLDcgKzI1Miw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPSAiRGlnaWdyYW0gVlgyMjIiLAotCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9IHNuZF92eDIyMl9pZHMsCiAJLnByb2JlID0gc25kX3Z4MjIyX3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfdngyMjJfcmVtb3ZlKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS95bWZwY2kveW1mcGNpLmMgYi9zb3VuZC9wY2kveW1mcGNpL3ltZnBjaS5jCmluZGV4IDFiYmJhMzIuLmQwMTMyMzcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS95bWZwY2kveW1mcGNpLmMKKysrIGIvc291bmQvcGNpL3ltZnBjaS95bWZwY2kuYwpAQCAtMzQ0LDcgKzM0NCw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPSAiWWFtYWhhIERTLVhHIFBDSSIsCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmlkX3RhYmxlID0gc25kX3ltZnBjaV9pZHMsCiAJLnByb2JlID0gc25kX2NhcmRfeW1mcGNpX3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfY2FyZF95bWZwY2lfcmVtb3ZlKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BwYy9wbWFjLmggYi9zb3VuZC9wcGMvcG1hYy5oCmluZGV4IGFlM2JiNmMuLmJmZmY3ODggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BwYy9wbWFjLmgKKysrIGIvc291bmQvcHBjL3BtYWMuaApAQCAtMjIsNyArMjIsNiBAQAogI2lmbmRlZiBfX1BNQUNfSAogI2RlZmluZSBfX1BNQUNfSAogCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPHNvdW5kL2NvbnRyb2wuaD4KICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KICNpbmNsdWRlICJhd2Fjcy5oIgo=